changeset 12400:40852b4b910c

incoming/outgoing: Fix recursion on sub repositories Incoming and outgoing are fixed so they go through the whole three of repositories instead of only visiting first level of sub repositories.
author Erik Zielke <ez@aragost.com>
date Fri, 24 Sep 2010 12:00:55 +0200
parents 4fee1fd3de9a
children 4cdaf1adafc8
files mercurial/commands.py mercurial/hg.py tests/test-subrepo-recursion.t
diffstat 3 files changed, 35 insertions(+), 12 deletions(-) [+]
line wrap: on
line diff
--- a/mercurial/commands.py	Fri Sep 24 10:13:49 2010 +0200
+++ b/mercurial/commands.py	Fri Sep 24 12:00:55 2010 +0200
@@ -2363,11 +2363,6 @@
         raise util.Abort(_('cannot combine --bundle and --subrepos'))
 
     ret = hg.incoming(ui, repo, source, opts)
-    if opts.get('subrepos'):
-        ctx = repo[None]
-        for subpath in sorted(ctx.substate):
-            sub = ctx.sub(subpath)
-            ret = min(ret, sub.incoming(ui, source, opts))
     return ret
 
 def init(ui, dest=".", **opts):
@@ -2630,11 +2625,6 @@
     Returns 0 if there are outgoing changes, 1 otherwise.
     """
     ret = hg.outgoing(ui, repo, dest, opts)
-    if opts.get('subrepos'):
-        ctx = repo[None]
-        for subpath in sorted(ctx.substate):
-            sub = ctx.sub(subpath)
-            ret = min(ret, sub.outgoing(ui, dest, opts))
     return ret
 
 def parents(ui, repo, file_=None, **opts):
--- a/mercurial/hg.py	Fri Sep 24 10:13:49 2010 +0200
+++ b/mercurial/hg.py	Fri Sep 24 12:00:55 2010 +0200
@@ -409,6 +409,15 @@
     return stats[3] > 0
 
 def incoming(ui, repo, source, opts):
+    def recurse():
+        ret = 1
+        if opts.get('subrepos'):
+            ctx = repo[None]
+            for subpath in sorted(ctx.substate):
+                sub = ctx.sub(subpath)
+                ret = min(ret, sub.incoming(ui, source, opts))
+        return ret
+
     limit = cmdutil.loglimit(opts)
     source, branches = parseurl(ui.expandpath(source), opts.get('branch'))
     other = repository(remoteui(repo, opts), source)
@@ -426,7 +435,7 @@
         except:
             pass
         ui.status(_("no changes found\n"))
-        return 1
+        return recurse()
 
     cleanup = None
     try:
@@ -469,8 +478,19 @@
             other.close()
         if cleanup:
             os.unlink(cleanup)
+    recurse()
+    return 0 # exit code is zero since we found incoming changes
 
 def outgoing(ui, repo, dest, opts):
+    def recurse():
+        ret = 1
+        if opts.get('subrepos'):
+            ctx = repo[None]
+            for subpath in sorted(ctx.substate):
+                sub = ctx.sub(subpath)
+                ret = min(ret, sub.outgoing(ui, dest, opts))
+        return ret
+
     limit = cmdutil.loglimit(opts)
     dest = ui.expandpath(dest or 'default-push', dest or 'default')
     dest, branches = parseurl(dest, opts.get('branch'))
@@ -483,7 +503,8 @@
     o = discovery.findoutgoing(repo, other, force=opts.get('force'))
     if not o:
         ui.status(_("no changes found\n"))
-        return 1
+        return recurse()
+
     o = repo.changelog.nodesbetween(o, revs)[0]
     if opts.get('newest_first'):
         o.reverse()
@@ -498,6 +519,8 @@
         count += 1
         displayer.show(repo[n])
     displayer.close()
+    recurse()
+    return 0 # exit code is zero since we found outgoing changes
 
 def revert(repo, node, choose):
     """revert changes to revision in node without updating dirstate"""
--- a/tests/test-subrepo-recursion.t	Fri Sep 24 10:13:49 2010 +0200
+++ b/tests/test-subrepo-recursion.t	Fri Sep 24 12:00:55 2010 +0200
@@ -273,6 +273,9 @@
   comparing with */test-subrepo-recursion.t/repo/foo (glob)
   searching for changes
   no changes found
+  comparing with */test-subrepo-recursion.t/repo/foo/bar (glob)
+  searching for changes
+  no changes found
   [1]
 
 Make nested change:
@@ -306,6 +309,9 @@
   date:        Thu Jan 01 00:00:00 1970 +0000
   summary:     3-4-2
   
+  comparing with */test-subrepo-recursion.t/repo/foo/bar (glob)
+  searching for changes
+  no changes found
 
 Switch to original repo and setup default path:
 
@@ -332,6 +338,10 @@
   date:        Thu Jan 01 00:00:00 1970 +0000
   summary:     3-4-2
   
+  comparing with */test-subrepo-recursion.t/repo2/foo/bar (glob)
+  searching for changes
+  no changes found
+
   $ hg incoming -S --bundle incoming.hg
   abort: cannot combine --bundle and --subrepos
   [255]