public inbox for gentoo-portage-dev@lists.gentoo.org
 help / color / mirror / Atom feed
Search results ordered by [date|relevance]  view[summary|nested|Atom feed]
thread overview below | download: 
* Re: [gentoo-portage-dev] [PATCH v2 1/3] pym/portage/package/ebuild/fetch.py: Factor out _get_checksum_failure_max_tries
  @ 2014-01-19 22:45 99%       ` Alec Warner
  0 siblings, 0 replies; 1+ results
From: Alec Warner @ 2014-01-19 22:45 UTC (permalink / raw
  To: gentoo-portage-dev

[-- Attachment #1: Type: text/plain, Size: 5518 bytes --]

On Sun, Jan 19, 2014 at 2:44 PM, Alec Warner <antarus@gentoo.org> wrote:

> On Sun, Jan 19, 2014 at 2:14 PM, W. Trevor King <wking@tremily.us> wrote:
>
>> 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.
>> ---
>>  pym/portage/package/ebuild/fetch.py | 59
>> +++++++++++++++++++++----------------
>>  1 file changed, 34 insertions(+), 25 deletions(-)
>>
>> diff --git a/pym/portage/package/ebuild/fetch.py
>> b/pym/portage/package/ebuild/fetch.py
>> index 5316f03..6f46572 100644
>> --- a/pym/portage/package/ebuild/fetch.py
>> +++ b/pym/portage/package/ebuild/fetch.py
>> @@ -240,6 +240,38 @@ _size_suffix_map = {
>>         'Y' : 80,
>>  }
>>
>> +
>> +def _get_checksum_failure_max_tries(settings, default=5):
>> +       """
>> +       Get the maximum number of failed download attempts
>> +
>> +       Generally, downloading the same file repeatedly from
>> +       every single available mirror is a waste of bandwidth
>> +       and time, so there needs to be a cap.
>> +       """
>> +       v = default
>> +       try:
>> +               v = int(settings.get("PORTAGE_FETCH_CHECKSUM_TRY_MIRRORS",
>> +                       default))
>> +       except (ValueError, OverflowError):
>> +               writemsg(_("!!! Variable
>> PORTAGE_FETCH_CHECKSUM_TRY_MIRRORS"
>> +                       " contains non-integer value: '%s'\n") % \
>> +                       settings["PORTAGE_FETCH_CHECKSUM_TRY_MIRRORS"],
>> +                       noiselevel=-1)
>> +               writemsg(_("!!! Using PORTAGE_FETCH_CHECKSUM_TRY_MIRRORS "
>> +                       "default value: %s\n") % default,
>> +                       noiselevel=-1)
>> +               v = default
>> +       if v < 1:
>> +               writemsg(_("!!! Variable
>> PORTAGE_FETCH_CHECKSUM_TRY_MIRRORS"
>> +                       " contains value less than 1: '%s'\n") % v,
>> noiselevel=-1)
>> +               writemsg(_("!!! Using PORTAGE_FETCH_CHECKSUM_TRY_MIRRORS "
>> +                       "default value: %s\n") % default,
>> +                       noiselevel=-1)
>> +               v = default
>> +       return v
>> +
>> +
>>
>
> This function and the next function you wrote are identical. How about
> making a single function?
>
> def getValueFromSettings(settings, key, default, validator):
>   try:
>     return validator(settings.get(key, default))
>   except ValidationError as e:
>     # writemsg the exception, it will contain the juicy bits.)
>
> def getIntValueFromSettings(settings, key, default):
>   def validator(v):
>     try:
>       v = int(v)
>    except (ValueError, OverflowError) as e:
>       raise ValidationError(" bla bla bla not an int, we picked the
> default.")
>     if v < 1:
>       v = default
>       raise ValidationError("bla bla bla less than one we used the
> defualt.")
>
>   return getValueFromSettings(settings, key, default, validator)
>
>
Note, don't actually use these function names, they are terrible.

-A



> Then we are not necessarily writing a bunch of the same functions over and
> over. The defaults we can stick in a config file, or in python, or at the
> call site.
>
> -A
>
>
>
>
>
>
>
>
>>  def fetch(myuris, mysettings, listonly=0, fetchonly=0,
>>         locks_in_subdir=".locks", use_locks=1, try_mirrors=1,
>> digests=None,
>>         allow_missing_digests=True):
>> @@ -263,31 +295,8 @@ def fetch(myuris, mysettings, listonly=0,
>> fetchonly=0,
>>                         print(_(">>> \"mirror\" mode desired and
>> \"mirror\" restriction found; skipping fetch."))
>>                         return 1
>>
>> -       # Generally, downloading the same file repeatedly from
>> -       # every single available mirror is a waste of bandwidth
>> -       # and time, so there needs to be a cap.
>> -       checksum_failure_max_tries = 5
>> -       v = checksum_failure_max_tries
>> -       try:
>> -               v =
>> int(mysettings.get("PORTAGE_FETCH_CHECKSUM_TRY_MIRRORS",
>> -                       checksum_failure_max_tries))
>> -       except (ValueError, OverflowError):
>> -               writemsg(_("!!! Variable
>> PORTAGE_FETCH_CHECKSUM_TRY_MIRRORS"
>> -                       " contains non-integer value: '%s'\n") % \
>> -                       mysettings["PORTAGE_FETCH_CHECKSUM_TRY_MIRRORS"],
>> noiselevel=-1)
>> -               writemsg(_("!!! Using PORTAGE_FETCH_CHECKSUM_TRY_MIRRORS "
>> -                       "default value: %s\n") %
>> checksum_failure_max_tries,
>> -                       noiselevel=-1)
>> -               v = checksum_failure_max_tries
>> -       if v < 1:
>> -               writemsg(_("!!! Variable
>> PORTAGE_FETCH_CHECKSUM_TRY_MIRRORS"
>> -                       " contains value less than 1: '%s'\n") % v,
>> noiselevel=-1)
>> -               writemsg(_("!!! Using PORTAGE_FETCH_CHECKSUM_TRY_MIRRORS "
>> -                       "default value: %s\n") %
>> checksum_failure_max_tries,
>> -                       noiselevel=-1)
>> -               v = checksum_failure_max_tries
>> -       checksum_failure_max_tries = v
>> -       del v
>> +       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")
>> --
>> 1.8.5.2.8.g0f6c0d1
>>
>>
>>
>

[-- Attachment #2: Type: text/html, Size: 7918 bytes --]

^ permalink raw reply	[relevance 99%]

Results 1-1 of 1 | reverse | options above
-- pct% links below jump to the message on this page, permalinks otherwise --
2014-01-19 20:58     [gentoo-portage-dev] [PATCH 0/3] Initial fetch() refactoring 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 99%       ` Alec Warner

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox