[MERGE] Repository.iter_files_bytes()

Vincent Ladeuil v.ladeuil+lp at free.fr
Thu Mar 26 09:42:59 GMT 2009


>>>>> "bialix" == Alexander Belchenko <bialix at ukr.net> writes:

    bialix> Robert Collins пишет:
    >> On Wed, 2009-03-25 at 14:16 -0400, Aaron Bentley wrote:
    >>>> === modified file 'bzrlib/revisiontree.py'
    >>>> --- bzrlib/revisiontree.py    2009-03-23 14:59:43 +0000
    >>>> +++ bzrlib/revisiontree.py    2009-03-25 16:27:34 +0000
    >>>> @@ -64,7 +64,8 @@
    >>>> return self._revision_id
    >>>> 
    >>>> def get_file_text(self, file_id, path=None):
    >>>> -        return list(self.iter_files_bytes([(file_id, None)]))[0][1]
    >>>> +        _, content = list(self.iter_files_bytes([(file_id,
    >>> None)]))[0]
    >>> 
    >>> I would prefer not to use underscore this way, but I guess there's
    >>> already precedent in the codebase.
    >> 
    >> FWIW, I recall seeing comments from Guido that this is approriate.

    bialix> The _ interacts horribly with pdb and gettext.

And selftest ! :-) 

As seen in https://bugs.launchpad.net/bzr-gtk/+bug/187283

Given that using '_' as an anonymous variable is a common idiom
in python, this conflicts hard with gettext reserving '_' for its
private usage by adding it to __global__ so that it can be
accessed anywhere without importing gettext again.

But doing so is fragile as it means any *apparently* local use of
'_' will in fact modify the globally gettext installed one.

bzr-gtk addressed the problem in (shameless plug)
revid:v.ladeuil+lp at free.fr-20080505181646-n95l8ltw2u6jtr26

Since any plugin[1] (in addition to bzrlib itself) can use '_', relying on gettext
definition of '_' is asking for trouble, the only reliable way to
be protected against that I could think of was to use a private
alias for '_' immune to the problem.

        Vincent

[1]: I.e. even if bzrlib never uses '_' as an anonymous variable,
as soon as any plugin uses it (or any python module today or
tomorrow), you're doomed.




More information about the bazaar mailing list