From: "W. Trevor King" <wking@tremily.us>
To: gentoo-portage-dev@lists.gentoo.org
Cc: Rafael Goncalves Martins <rafaelmartins@gentoo.org>,
"W. Trevor King" <wking@tremily.us>
Subject: [gentoo-portage-dev] [PATCH v3 2/4] pym/portage/package/ebuild/fetch.py: Factor out _get_fetch_resume_size
Date: Sun, 19 Jan 2014 19:26:08 -0800 [thread overview]
Message-ID: <deec09e7a8e0f797e55a43d30858413006f34274.1390187967.git.wking@tremily.us> (raw)
In-Reply-To: <cover.1390187967.git.wking@tremily.us>
In-Reply-To: <cover.1390187967.git.wking@tremily.us>
The current fetch() function is quite long, which makes it hard to
know what I can change without adverse side effects. By pulling this
logic out of the main function, we get clearer logic in fetch() and
more explicit input for the config extraction.
Following a suggestion by Tom Wijsman, I put the setting name in a new
'key' variable to cut down on the PORTAGE_FETCH_RESUME_MIN_SIZE noise.
---
pym/portage/package/ebuild/fetch.py | 51 +++++++++++++++++++---------------
pym/portage/tests/ebuild/test_fetch.py | 37 ++++++++++++++++++++++++
2 files changed, 65 insertions(+), 23 deletions(-)
diff --git a/pym/portage/package/ebuild/fetch.py b/pym/portage/package/ebuild/fetch.py
index 911500a..4ecefc9 100644
--- a/pym/portage/package/ebuild/fetch.py
+++ b/pym/portage/package/ebuild/fetch.py
@@ -274,6 +274,33 @@ def _get_checksum_failure_max_tries(settings, default=5):
return v
+def _get_fetch_resume_size(settings, default='350K'):
+ key = 'PORTAGE_FETCH_RESUME_MIN_SIZE'
+ v = settings.get(key)
+ if v is not None:
+ v = "".join(v.split())
+ if not v:
+ # If it's empty, silently use the default.
+ v = default
+ match = _fetch_resume_size_re.match(v)
+ if (match is None or
+ match.group(2).upper() not in _size_suffix_map):
+ writemsg(_("!!! Variable %s contains an "
+ "unrecognized format: '%s'\n")
+ % (key, settings[key]),
+ noiselevel=-1)
+ writemsg(_("!!! Using %s default value: %s\n")
+ % (key, default),
+ noiselevel=-1)
+ v = None
+ if v is None:
+ v = default
+ match = _fetch_resume_size_re.match(v)
+ v = int(match.group(1)) * \
+ 2 ** _size_suffix_map[match.group(2).upper()]
+ return v
+
+
def fetch(myuris, mysettings, listonly=0, fetchonly=0,
locks_in_subdir=".locks", use_locks=1, try_mirrors=1, digests=None,
allow_missing_digests=True):
@@ -299,29 +326,7 @@ def fetch(myuris, mysettings, listonly=0, fetchonly=0,
checksum_failure_max_tries = _get_checksum_failure_max_tries(
settings=mysettings)
-
- fetch_resume_size_default = "350K"
- fetch_resume_size = mysettings.get("PORTAGE_FETCH_RESUME_MIN_SIZE")
- if fetch_resume_size is not None:
- fetch_resume_size = "".join(fetch_resume_size.split())
- if not fetch_resume_size:
- # If it's undefined or empty, silently use the default.
- fetch_resume_size = fetch_resume_size_default
- match = _fetch_resume_size_re.match(fetch_resume_size)
- if match is None or \
- (match.group(2).upper() not in _size_suffix_map):
- writemsg(_("!!! Variable PORTAGE_FETCH_RESUME_MIN_SIZE"
- " contains an unrecognized format: '%s'\n") % \
- mysettings["PORTAGE_FETCH_RESUME_MIN_SIZE"], noiselevel=-1)
- writemsg(_("!!! Using PORTAGE_FETCH_RESUME_MIN_SIZE "
- "default value: %s\n") % fetch_resume_size_default,
- noiselevel=-1)
- fetch_resume_size = None
- if fetch_resume_size is None:
- fetch_resume_size = fetch_resume_size_default
- match = _fetch_resume_size_re.match(fetch_resume_size)
- fetch_resume_size = int(match.group(1)) * \
- 2 ** _size_suffix_map[match.group(2).upper()]
+ fetch_resume_size = _get_fetch_resume_size(settings=mysettings)
# Behave like the package has RESTRICT="primaryuri" after a
# couple of checksum failures, to increase the probablility
diff --git a/pym/portage/tests/ebuild/test_fetch.py b/pym/portage/tests/ebuild/test_fetch.py
index 26e0349..2b06190 100644
--- a/pym/portage/tests/ebuild/test_fetch.py
+++ b/pym/portage/tests/ebuild/test_fetch.py
@@ -3,6 +3,7 @@
from portage.package.ebuild.fetch import (
_get_checksum_failure_max_tries,
+ _get_fetch_resume_size,
)
from portage.tests import TestCase
@@ -43,3 +44,39 @@ class FetchTestCase(TestCase):
_get_checksum_failure_max_tries(
settings={}, default=3),
3)
+
+ def test_get_fetch_resume_size(self):
+ self.assertEqual(
+ _get_fetch_resume_size(settings={}),
+ 358400)
+ self.assertEqual(
+ _get_fetch_resume_size(settings={
+ 'PORTAGE_FETCH_RESUME_MIN_SIZE': ''}),
+ 358400)
+ self.assertEqual(
+ _get_fetch_resume_size(settings={
+ 'PORTAGE_FETCH_RESUME_MIN_SIZE': '3'}),
+ 3)
+ self.assertEqual(
+ _get_fetch_resume_size(settings={
+ 'PORTAGE_FETCH_RESUME_MIN_SIZE': '3K'}),
+ 3072)
+ self.assertEqual(
+ _get_fetch_resume_size(settings={
+ 'PORTAGE_FETCH_RESUME_MIN_SIZE': '3 K'}),
+ 3072)
+ self.assertEqual(
+ _get_fetch_resume_size(settings={
+ 'PORTAGE_FETCH_RESUME_MIN_SIZE': '3M'}),
+ 3145728)
+ self.assertEqual(
+ _get_fetch_resume_size(settings={
+ 'PORTAGE_FETCH_RESUME_MIN_SIZE': '3G'}),
+ 3221225472)
+ self.assertEqual(
+ _get_fetch_resume_size(settings={
+ 'PORTAGE_FETCH_RESUME_MIN_SIZE': 'oops'}),
+ 358400)
+ self.assertEqual(
+ _get_fetch_resume_size(settings={}, default='3K'),
+ 3072)
--
1.8.5.2.8.g0f6c0d1
next prev parent reply other threads:[~2014-01-20 3:26 UTC|newest]
Thread overview: 45+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-01-19 3:07 [gentoo-portage-dev] [PATCH 0/3] Initial fetch() refactoring W. Trevor King
2014-01-19 3:07 ` [gentoo-portage-dev] [PATCH 1/3] pym/portage/package/ebuild/fetch.py: Factor out _get_checksum_failure_max_tries W. Trevor King
2014-01-20 1:26 ` Tom Wijsman
2014-01-20 1:56 ` W. Trevor King
2014-01-19 3:07 ` [gentoo-portage-dev] [PATCH 2/3] pym/portage/package/ebuild/fetch.py: Factor out _get_fetch_resume_size W. Trevor King
2014-01-20 1:41 ` Tom Wijsman
2014-01-20 2:01 ` W. Trevor King
2014-01-20 2:26 ` Tom Wijsman
2014-01-19 3:07 ` [gentoo-portage-dev] [PATCH 3/3] pym/portage/package/ebuild/fetch.py: Factor out _get_uris W. Trevor King
2014-01-19 21:36 ` Sebastian Luther
2014-01-19 21:43 ` W. Trevor King
2014-01-19 22:36 ` Alec Warner
2014-01-19 23:06 ` W. Trevor King
2014-01-19 23:31 ` W. Trevor King
2014-01-19 20:05 ` [gentoo-portage-dev] [PATCH 0/3] Initial fetch() refactoring Sebastian Luther
2014-01-19 20:58 ` W. Trevor King
2014-01-19 22:14 ` [gentoo-portage-dev] [PATCH v2 " W. Trevor King
2014-01-19 22:14 ` [gentoo-portage-dev] [PATCH v2 1/3] pym/portage/package/ebuild/fetch.py: Factor out _get_checksum_failure_max_tries W. Trevor King
2014-01-19 22:44 ` Alec Warner
2014-01-19 22:45 ` Alec Warner
2014-01-19 22:51 ` W. Trevor King
2014-01-19 22:52 ` Alec Warner
2014-01-19 22:14 ` [gentoo-portage-dev] [PATCH v2 2/3] pym/portage/package/ebuild/fetch.py: Factor out _get_fetch_resume_size W. Trevor King
2014-01-19 22:14 ` [gentoo-portage-dev] [PATCH v2 3/3] pym/portage/package/ebuild/fetch.py: Factor out _get_uris W. Trevor King
2014-01-20 3:26 ` [gentoo-portage-dev] [PATCH v3 0/4] Initial fetch() refactoring W. Trevor King
2014-01-20 3:26 ` [gentoo-portage-dev] [PATCH v3 1/4] pym/portage/package/ebuild/fetch.py: Factor out _get_checksum_failure_max_tries W. Trevor King
2014-01-20 3:26 ` W. Trevor King [this message]
2014-01-20 3:26 ` [gentoo-portage-dev] [PATCH v3 3/4] pym/portage/package/ebuild/fetch.py: Factor out _get_uris W. Trevor King
2014-01-21 2:57 ` [gentoo-portage-dev] " W. Trevor King
2014-01-20 3:26 ` [gentoo-portage-dev] [PATCH v3 4/4] pym/portage/package/ebuild/fetch.py: Flatten conditionals in _get_fetch_resume_size W. Trevor King
2014-01-22 5:35 ` [gentoo-portage-dev] [PATCH v3 0/4] Initial fetch() refactoring Mike Frysinger
2014-01-22 16:10 ` W. Trevor King
2014-01-22 19:00 ` Mike Frysinger
2014-01-27 4:00 ` [gentoo-portage-dev] " W. Trevor King
2014-01-19 21:22 ` [gentoo-portage-dev] [PATCH 0/3] " Sebastian Luther
2014-01-19 22:45 ` Alexander Berntsen
2014-01-19 22:46 ` Alec Warner
2014-01-19 22:50 ` Alexander Berntsen
2014-01-19 22:54 ` Alec Warner
2014-01-19 23:51 ` Alexander Berntsen
2014-01-19 23:53 ` Alec Warner
2014-01-19 23:11 ` W. Trevor King
2014-01-22 5:34 ` Mike Frysinger
2014-01-19 21:39 ` Sebastian Luther
2014-01-19 22:46 ` W. Trevor King
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=deec09e7a8e0f797e55a43d30858413006f34274.1390187967.git.wking@tremily.us \
--to=wking@tremily.us \
--cc=gentoo-portage-dev@lists.gentoo.org \
--cc=rafaelmartins@gentoo.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox