Hi Tom, thanks for the patch.  I'll have to let Colin make the final
determination, both because he knows the code much better than I do and
because he has upload rights where I do not.  I do have some questions
after looking at your patch from 2011-02-15.

First: since you have a branch that contains your change, why not add a
merge proposal for that?  It would make it easier to review your patch,
comment on it, and apply it.  Also, they're easy to do! :)

Why do you add the empty string to the suffix list in the for loop?  I
see that the original code unconditionally adds the unsuffixed value of
open_tag_file() if both .bz2 and .gz fail. Is that the real source of
the bug (iow, open_tag_file(mirror, '') may not produce a non-None
value)?

Nit: it's better to spell it "if tag_file is not None"

Nit: some of the indentation is a bit inconsistent.  E.g. the "raise
IOError" is too far to the right, although it doesn't break anything.

Nit: unless tag_files could be any false value, I generally like to use
a more specific test.  In this case, tag_files will always be a list, so
testing for len() == 0 is better since it more closely matches your
intention.

I know you're modifying the existing logic, but it seems like the only
way to break out of the for-loop with tag_file not None is when
open_tag_file() returns some non-None value.  In that case, I wonder if
this code makes more sense (completely untested of course ;):

        tag_files = []
        for mirror in mirrors:
            for suffix in (".bz2", ".gz", ""):
                tag_file = None
                try:
                    tag_file = open_tag_file(mirror, suffix)
                except (IOError, OSError):
                    pass
                else:
                    if tag_file is not None:
                        tag_files.append(tag_file)
                    break
        if len(tag_files) == 0:
            raise IOError
        return tag_files

Notice that I moved tag_files=None to inside the inner loop.  I think
the way the old code was written, it was possible to add a tag_file more
than once inadvertently.  Let's say mirrors=('A', 'B').
open_tag_file('A', '.gz') returns something non-None and it gets added
to tag_files.  Now mirror 'B' is processed, but all its suffixes raise
IOError.  When the inner loop for mirror='B' completes, tag_file is
still set to the value it had during the mirror='A' iteration and it
gets added twice.

I can't tell whether that's intended, but I kind of doubt it, thus the
rewrite moving tag_file=None to the inner loop.

Or I could be totally wrong. :)  As I said though, I'll let Colin make
the final determination.  Cheers, and thanks for your contribution!

-- 
You received this bug notification because you are a member of Ubuntu
Bugs, which is subscribed to Ubuntu.
https://bugs.launchpad.net/bugs/717879

Title:
  germinate should not examine all components in PPAs

-- 
ubuntu-bugs mailing list
[email protected]
https://lists.ubuntu.com/mailman/listinfo/ubuntu-bugs

Reply via email to