Patchwork [1,of,5,STABLE] subrepo: make "_sanitize()" work

login
register
mail settings
Submitter Katsunori FUJIWARA
Date May 5, 2014, 11:15 a.m.
Message ID <475893f11f9cb72ff167.1399288552@juju>
Download mbox | patch
Permalink /patch/4627/
State Superseded
Headers show

Comments

Katsunori FUJIWARA - May 5, 2014, 11:15 a.m.
# HG changeset patch
# User FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
# Date 1399219389 -32400
#      Mon May 05 01:03:09 2014 +0900
# Branch stable
# Node ID 475893f11f9cb72ff1677859cf02658cc75d7344
# Parent  cadad384c97c7956c98f3c9b92d8cc40fa16d93b
subrepo: make "_sanitize()" work

"_sanitize()" was introduced by 224e96078708 on "stable" branch to
sanitize ".hg/hgrc" in non-hg subrepo, but it doesn't work, because
"os.walk()" itself doesn't make loop: "os.walk()" just returns
generator object, and the caller should make loop with it.

This patch makes "_sanitize()" work correctly.

This patch also changes the format of warning message to show each
unlinked files, for multiple appearances of "potentially hostile
.hg/hgrc".
Pierre-Yves David - May 5, 2014, 11:58 p.m.
On 05/05/2014 04:15 AM, FUJIWARA Katsunori wrote:
> # HG changeset patch
> # User FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
> # Date 1399219389 -32400
> #      Mon May 05 01:03:09 2014 +0900
> # Branch stable
> # Node ID 475893f11f9cb72ff1677859cf02658cc75d7344
> # Parent  cadad384c97c7956c98f3c9b92d8cc40fa16d93b
> subrepo: make "_sanitize()" work

This series seems to fix a regression. Can you confirms if it as a 
regression fix or just a regular bugfix of a new feature?

Also could you elaborate on the symptom of the error?

Thanks!
Katsunori FUJIWARA - May 6, 2014, 7:15 a.m.
At Mon, 05 May 2014 16:58:32 -0700,
Pierre-Yves David wrote:
> 
> On 05/05/2014 04:15 AM, FUJIWARA Katsunori wrote:
> > # HG changeset patch
> > # User FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
> > # Date 1399219389 -32400
> > #      Mon May 05 01:03:09 2014 +0900
> > # Branch stable
> > # Node ID 475893f11f9cb72ff1677859cf02658cc75d7344
> > # Parent  cadad384c97c7956c98f3c9b92d8cc40fa16d93b
> > subrepo: make "_sanitize()" work
> 
> This series seems to fix a regression. Can you confirms if it as a 
> regression fix or just a regular bugfix of a new feature?

"_sanitize()" was introduced by 224e96078708 on stable, and no changes
have been applied on it (except for 5db105f216c3 fixing "% inside _()"
problem of message formatting).

"_sanitize()" does nothing from the beginning. Which is making it work
a regression fix or a bugfix of a new feature ? :-)


BTW, I noticed that patch #5 is a just backout of fccd350acf79 fixing
issue3033:

    http://bz.selenic.com/show_bug.cgi?id=3033

and confirmed that patch #5 causes regression :-<

I'll re-send revised series, and


> Also could you elaborate on the symptom of the error?

I'll also revise patch description.


> Thanks!
> 
> -- 
> Pierre-Yves David
> 

----------------------------------------------------------------------
[FUJIWARA Katsunori]                             foozy@lares.dti.ne.jp

Patch

diff --git a/mercurial/subrepo.py b/mercurial/subrepo.py
--- a/mercurial/subrepo.py
+++ b/mercurial/subrepo.py
@@ -315,16 +315,14 @@ 
         raise util.Abort(_("default path for subrepository not found"))
 
 def _sanitize(ui, path):
-    def v(arg, dirname, names):
+    for dirname, dirs, names in os.walk(path):
         if os.path.basename(dirname).lower() != '.hg':
-            return
+            continue
         for f in names:
             if f.lower() == 'hgrc':
-                ui.warn(
-                    _("warning: removing potentially hostile .hg/hgrc in '%s'")
-                      % path)
+                ui.warn(_("warning: removing potentially hostile 'hgrc' "
+                          "in '%s'\n") % dirname)
                 os.unlink(os.path.join(dirname, f))
-    os.walk(path, v, None)
 
 def subrepo(ctx, path):
     """return instance of the right subrepo class for subrepo in path"""
diff --git a/tests/test-subrepo-git.t b/tests/test-subrepo-git.t
--- a/tests/test-subrepo-git.t
+++ b/tests/test-subrepo-git.t
@@ -566,3 +566,45 @@ 
 #endif
 
   $ cd ..
+
+Test sanitizing ".hg/hgrc" in subrepo
+
+  $ cd t
+  $ hg tip -q
+  7:af6d2edbb0d3
+  $ hg update -q -C af6d2edbb0d3
+  $ cd s
+  $ git checkout -q -b sanitize-test
+  $ mkdir .hg
+  $ echo '.hg/hgrc in git repo' > .hg/hgrc
+  $ mkdir -p sub/.hg
+  $ echo 'sub/.hg/hgrc in git repo' > sub/.hg/hgrc
+  $ git add .hg sub
+  $ git commit -qm 'add .hg/hgrc to be sanitized at hg update'
+  $ git push -q origin sanitize-test
+  $ cd ..
+  $ grep ' s$' .hgsubstate
+  32a343883b74769118bb1d3b4b1fbf9156f4dddc s
+  $ hg commit -qm 'commit with git revision including .hg/hgrc'
+  $ hg parents -q
+  8:3473d20bddcf
+  $ grep ' s$' .hgsubstate
+  c4069473b459cf27fd4d7c2f50c4346b4e936599 s
+  $ cd ..
+
+  $ cd tc
+  $ hg pull -q
+  $ hg update -q -C 3473d20bddcf 2>&1 | sort
+  warning: removing potentially hostile 'hgrc' in 's/.hg' (glob)
+  warning: removing potentially hostile 'hgrc' in 's/sub/.hg' (glob)
+  $ hg parents -q
+  8:3473d20bddcf
+  $ grep ' s$' .hgsubstate
+  c4069473b459cf27fd4d7c2f50c4346b4e936599 s
+  $ cat s/.hg/hgrc
+  cat: s/.hg/hgrc: No such file or directory
+  [1]
+  $ cat s/sub/.hg/hgrc
+  cat: s/sub/.hg/hgrc: No such file or directory
+  [1]
+  $ cd ..
diff --git a/tests/test-subrepo-svn.t b/tests/test-subrepo-svn.t
--- a/tests/test-subrepo-svn.t
+++ b/tests/test-subrepo-svn.t
@@ -632,3 +632,48 @@ 
   Checked out revision 15.
   2 files updated, 0 files merged, 0 files removed, 0 files unresolved
   $ cd ..
+
+Test sanitizing ".hg/hgrc" in subrepo
+
+  $ cd sub/t
+  $ hg update -q -C tip
+  $ cd s
+  $ mkdir .hg
+  $ echo '.hg/hgrc in svn repo' > .hg/hgrc
+  $ mkdir -p sub/.hg
+  $ echo 'sub/.hg/hgrc in svn repo' > sub/.hg/hgrc
+  $ svn add .hg sub
+  A         .hg
+  A         .hg/hgrc (glob)
+  A         sub
+  A         sub/.hg (glob)
+  A         sub/.hg/hgrc (glob)
+  $ svn ci -m 'add .hg/hgrc to be sanitized at hg update'
+  Adding         .hg
+  Adding         .hg/hgrc (glob)
+  Adding         sub
+  Adding         sub/.hg (glob)
+  Adding         sub/.hg/hgrc (glob)
+  Transmitting file data ..
+  Committed revision 16.
+  $ svn up -q
+  $ cd ..
+  $ hg commit -S -m 'commit with svn revision including .hg/hgrc'
+  $ grep ' s$' .hgsubstate
+  16 s
+  $ cd ..
+
+  $ cd tc
+  $ hg pull -u -q 2>&1 | sort
+  warning: removing potentially hostile 'hgrc' in 's/.hg' (glob)
+  warning: removing potentially hostile 'hgrc' in 's/sub/.hg' (glob)
+  $ grep ' s$' .hgsubstate
+  16 s
+  $ cat s/.hg/hgrc
+  cat: s/.hg/hgrc: No such file or directory
+  [1]
+  $ cat s/sub/.hg/hgrc
+  cat: s/sub/.hg/hgrc: No such file or directory
+  [1]
+
+  $ cd ../..