[PATCH stable] findrepo(), walkrepos(): skip repositories not readable with current privileges; skip empty '.hg' directories, e.g. unmounted mountpoint

Roland Eggner edvx1 at systemanalysen.net
Fri Jun 15 12:46:19 UTC 2012


On 2012-06-14 Thu 01:31 +0200, Martin Geisler wrote:
> Roland Eggner <edvx1 at systemanalysen.net> writes:
> 
> > Thank you for the hint. Already tried to follow this guideline. Now I
> > try even harder, adjust mail subject, and provide my patch enhanced
> > with more description (repository just set up for getting proper “hg
> > export tip” output, it holds only the 2 modified files, thus hashes
> > are probably useless):
> 
> Don't worry, we normally don't use the hashes for anything -- patches
> are just applied on the tip of the relevant branch.
> 
> >
> > # HG changeset patch
> > # User Roland Eggner < odvx1 at systomanalyson.not s/o/e/g >
> > # Date 1339621084 -7200
> > # Node ID fe5416b6fb8607c070a2d3ae0303cb2d7ce04354
> > # Parent  654ad2f8392c501a55d28a7f1f8f9e39148fcaa5
> > findrepo(), walkrepos():  skip repositories not readable with current privileges;  skip empty '.hg' directories, e.g. unmounted mountpoints
> 
> That line is quite long, I would go with something like
> 
>   findrepo, walkrepos: skip .hg inaccessable folders
> 
> and then explain the rest below like you already do.
> 
> (Minor detail: I read foo() as the result of calling foo, so if I want
> to talk about the function foo, I leave out the parenthesis.)
> 
> > mercurial-2.0.2/mercurial/cmdutil.py |  4 +++-
> > mercurial-2.0.2/mercurial/scmutil.py |  4 +++-
> > 2 files changed, 6 insertions(+), 2 deletions(-)
> 
> We don't include a diffstat in the commit message.
> 
> > [...]
> >
> > diff --git a/mercurial-2.0.2/mercurial/cmdutil.py b/mercurial-2.0.2/mercurial/cmdutil.py
> > --- a/mercurial-2.0.2/mercurial/cmdutil.py
> > +++ b/mercurial-2.0.2/mercurial/cmdutil.py
> > @@ -69,7 +69,9 @@ def findcmd(cmd, table, strict=True):
> >      raise error.UnknownCommand(cmd)
> >  
> >  def findrepo(p):
> > -    while not os.path.isdir(os.path.join(p, ".hg")):
> > +    while not (os.path.isdir(os.path.join(p, ".hg"))
> > +        and ((os.path.isfile(os.path.join(p, '.hg', 'requires'     )) and os.access(os.path.join(p, '.hg', 'requires'     ), os.R_OK))
> > +        or   (os.path.isfile(os.path.join(p, '.hg', '00changelog.i')) and os.access(os.path.join(p, '.hg', '00changelog.i'), os.R_OK)))):
> 
> You should run the entire test suite -- test-check-code-hg.t will tell
> you that these lines are too long, and probably also that the extra
> spacing before ')' is unwanted.
> 
> >          oldp, p = p, os.path.dirname(p)
> >          if p == oldp:
> >              return None
> > diff --git a/mercurial-2.0.2/mercurial/scmutil.py b/mercurial-2.0.2/mercurial/scmutil.py
> > --- a/mercurial-2.0.2/mercurial/scmutil.py
> > +++ b/mercurial-2.0.2/mercurial/scmutil.py
> > @@ -355,7 +355,9 @@ def walkrepos(path, followsym=False, see
> >          adddir(seen_dirs, path)
> >      for root, dirs, files in os.walk(path, topdown=True, onerror=errhandler):
> >          dirs.sort()
> > -        if '.hg' in dirs:
> > +        if  ('.hg' in dirs
> > +            and ((os.path.isfile(os.path.join(root, '.hg', 'requires'     )) and os.access(os.path.join(root, '.hg', 'requires'     ), os.R_OK))
> > +            or   (os.path.isfile(os.path.join(root, '.hg', '00changelog.i')) and os.access(os.path.join(root, '.hg', '00changelog.i'), os.R_OK)))):
> 
> Now you've duplicated this not-completely-trivial logic. If the logic is
> really needed, then I suggest putting it into a function like
> 
>   def isrepo(path):
>       return path.endswith('/.hg') and ...
> 

Thank you for the friendly advice.

I will cook a patch v2 honoring your input and Matt's comment.

-- 
Roland Eggner
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 198 bytes
Desc: not available
URL: <http://lists.mercurial-scm.org/pipermail/mercurial-devel/attachments/20120615/5dc6af72/attachment.asc>


More information about the Mercurial-devel mailing list