[yocto] [PATCH 03/10][AUH] recipe.py: Improvements and refactor of fetch method.

Aníbal Limón anibal.limon at linux.intel.com
Wed Nov 11 12:08:45 PST 2015


Hi Paul,


On 11/10/2015 02:46 AM, Paul Eggleton wrote:
> Hi Aníbal,
> 
> On Monday 09 November 2015 16:01:34 Aníbal Limón wrote:
>> Make more clear fetch method changing recursive manner to
>> loop and split logic into try fetch and suffix change.
>>
>> Now when fails only retry changing recipe suffix when recipe
>> isn't git based because does not make sense suffixes in SCM's.
>>
>> Signed-off-by: Aníbal Limón <anibal.limon at linux.intel.com>
>> ---
>>  recipe.py | 58 +++++++++++++++++++++++++++++++++-------------------------
>>  1 file changed, 33 insertions(+), 25 deletions(-)
>>
>> diff --git a/recipe.py b/recipe.py
>> index 6fd8f24..0e8799f 100644
>> --- a/recipe.py
>> +++ b/recipe.py
>> @@ -55,7 +55,6 @@ class Recipe(object):
>>              "tar.gz", "tgz", "zip", "tar.bz2", "tar.xz", "tar.lz4", "bz2",
>>              "lz4", "orig.tar.gz", "src.tar.gz", "src.rpm", "src.tgz",
>>              "svnr\d+.tar.bz2", "stable.tar.gz", "src.rpm"]
>> -        self.suffix_index = 0
>>          self.old_env = None
>>
>>          self.commit_msg = self.env['PN'] + ": upgrade to " + self.new_ver +
>> "\n\n" @@ -540,33 +539,42 @@ class Recipe(object):
>>          self.bb.unpack(self.env['PN'])
>>
>>      def fetch(self):
>> -        try:
>> -            self.bb.fetch(self.env['PN'])
>> -        except Error as e:
>> -            machine, failed_recipes = self._get_failed_recipes(e.stdout)
>> -            if not self.env['PN'] in failed_recipes:
>> -                raise Error("unknown error occured during fetch")
>> -
>> -            fetch_log = failed_recipes[self.env['PN']][1]
>> -            if self.suffix_index < len(self.suffixes) and
>> self._is_uri_failure(fetch_log): -                I(" Trying new SRC_URI
>> suffix: %s ..." % self.suffixes[self.suffix_index]) -               
>> self._change_source_suffix(self.suffixes[self.suffix_index]) -             
>>   self.suffix_index += 1
>> -                self.fetch()
>> -
>> -            if not self._is_uri_failure(fetch_log):
>> -                if not self.checksums_changed:
>> +        from gitrecipe import GitRecipe
>> +
>> +        def _try_fetch():
>> +            try:
>> +                self.bb.fetch(self.env['PN'])
>> +                return
>> +            except Error as e:
>> +                machine, failed_recipes =
>> self._get_failed_recipes(e.stdout) +                if not self.env['PN']
>> in failed_recipes:
>> +                    raise Error("Unknown error occured during fetch",
>> +                            stdout = e.stdout, stderr = e.stderr)
>> +
>> +                fetch_log = failed_recipes[self.env['PN']][1]
>> +
>> +                if not self._is_uri_failure(fetch_log) and not \
>> +                        self.checksums_changed:
>>                      self._change_recipe_checksums(fetch_log)
>> -                    return
>> -                else:
>> -                    raise FetchError()
>> +                    self.checksums_changed = True
>> +                    return True
>>
>> -                if self.recipes_renamed and not self.checksums_changed:
>> -                    raise Error("fetch succeeded without changing
>> checksums") +                return False
>> +
>> +        succeed = _try_fetch()
>> +        if succeed is False and not isinstance(self, GitRecipe):
>> +            for sfx in self.suffixes:
>> +                I(" Trying new SRC_URI suffix: %s ..." % sfx)
>> +                self._change_source_suffix(sfx)
>> +
>> +                succeed = _try_fetch()
>> +                if succeed is True:
>> +                    break
>>
>> -            elif self.suffix_index == len(self.suffixes):
>> -                # Every suffix tried without success
>> -                raise FetchError()
>> +        if succeed is False:
> 
> "x is True" or "x is False" is very odd syntax - the "is" operator is for when 
> you want to compare the instance of two things, and whilst that may work that 
> isn't what you want here. Simply "x" or "not x" would be the more standard way 
> to do this.

I didn't know about that convention, but if you said it i'll change the
code to be Pythonic.


> 
> Cheers,
> Paul
> 



More information about the yocto mailing list