changeset 52086:fb15ba66c702 stable

subrepo: propagate non-default path on outgoing There was already a fix made in 5dbff89cf107 for pull and push commands. I did the same for the outgoing command. The problem I identified is that when the parent repository has multiple paths, the outgoing command was not respecting the parent path used and was always using the default path for subrepositories.
author Felipe Resende <felipe@fcresende.dev.br>
date Sun, 31 Mar 2024 17:57:46 -0300
parents 653b7a19f1de
children 888e00b2c3ee
files mercurial/hg.py tests/test-exchange-multi-source.t
diffstat 2 files changed, 83 insertions(+), 43 deletions(-) [+]
line wrap: on
line diff
--- a/mercurial/hg.py	Fri Oct 25 01:14:53 2024 +0200
+++ b/mercurial/hg.py	Sun Mar 31 17:57:46 2024 -0300
@@ -1472,30 +1472,18 @@
             displayer.close()
 
 
+_no_subtoppath = object()
+
+
 def outgoing(ui, repo, dests, opts, subpath=None):
     if opts.get(b'graph'):
         logcmdutil.checkunsupportedgraphflags([], opts)
-    o, others = _outgoing(ui, repo, dests, opts, subpath=subpath)
     ret = 1
-    try:
-        if o:
-            ret = 0
-            display_outgoing_revs(ui, repo, o, opts)
-        for oth in others:
-            cmdutil.outgoinghooks(ui, repo, oth, opts, o)
-            ret = min(ret, _outgoing_recurse(ui, repo, dests, opts))
-        return ret  # exit code is zero since we found outgoing changes
-    finally:
-        for oth in others:
-            oth.close()
-
-
-def _outgoing(ui, repo, dests, opts, subpath=None):
-    out = set()
-    others = []
     for path in urlutil.get_push_paths(repo, ui, dests):
         dest = path.loc
-        if True:
+        prev_subtopath = getattr(repo, "_subtoppath", _no_subtoppath)
+        try:
+            repo._subtoppath = dest
             if subpath is not None:
                 subpath = urlutil.url(subpath)
                 if subpath.isabs():
@@ -1525,14 +1513,24 @@
                     repo, other, revs, force=opts.get(b'force')
                 )
                 o = outgoing.missing
-                out.update(o)
                 if not o:
                     scmutil.nochangesfound(repo.ui, repo, outgoing.excluded)
-                others.append(other)
+                else:
+                    ret = 0
+                    display_outgoing_revs(ui, repo, o, opts)
+
+                cmdutil.outgoinghooks(ui, repo, other, opts, o)
+                ret = min(ret, _outgoing_recurse(ui, repo, dests, opts))
             except:  # re-raises
+                raise
+            finally:
                 other.close()
-                raise
-    return list(out), others
+        finally:
+            if prev_subtopath is _no_subtoppath:
+                del repo._subtoppath
+            else:
+                repo._subtoppath = prev_subtopath
+    return ret
 
 
 def verify(repo, level=None):
--- a/tests/test-exchange-multi-source.t	Fri Oct 25 01:14:53 2024 +0200
+++ b/tests/test-exchange-multi-source.t	Sun Mar 31 17:57:46 2024 -0300
@@ -133,10 +133,26 @@
   $ hg out -G -R test-repo-bare ./branch-E-push ./branch-G-push ./branch-H-push
   comparing with ./branch-E-push
   searching for changes
+  o  changeset:   7:40faebb2ec45
+     tag:         tip
+     parent:      2:f838bfaca5c7
+     user:        test
+     date:        Thu Jan 01 00:00:00 1970 +0000
+     summary:     H
+  
+  o  changeset:   6:c521a06b234b
+  |  user:        test
+  |  date:        Thu Jan 01 00:00:00 1970 +0000
+  |  summary:     G
+  |
+  o  changeset:   5:2f3a4c5c1417
+     parent:      1:27547f69f254
+     user:        test
+     date:        Thu Jan 01 00:00:00 1970 +0000
+     summary:     F
+  
   comparing with ./branch-G-push
   searching for changes
-  comparing with ./branch-H-push
-  searching for changes
   o  changeset:   7:40faebb2ec45
   |  tag:         tip
   |  parent:      2:f838bfaca5c7
@@ -144,17 +160,6 @@
   |  date:        Thu Jan 01 00:00:00 1970 +0000
   |  summary:     H
   |
-  | o  changeset:   6:c521a06b234b
-  | |  user:        test
-  | |  date:        Thu Jan 01 00:00:00 1970 +0000
-  | |  summary:     G
-  | |
-  | o  changeset:   5:2f3a4c5c1417
-  |    parent:      1:27547f69f254
-  |    user:        test
-  |    date:        Thu Jan 01 00:00:00 1970 +0000
-  |    summary:     F
-  |
   | o  changeset:   4:a603bfb5a83e
   | |  user:        test
   | |  date:        Thu Jan 01 00:00:00 1970 +0000
@@ -170,6 +175,29 @@
      date:        Thu Jan 01 00:00:00 1970 +0000
      summary:     C
   
+  comparing with ./branch-H-push
+  searching for changes
+  o  changeset:   6:c521a06b234b
+  |  user:        test
+  |  date:        Thu Jan 01 00:00:00 1970 +0000
+  |  summary:     G
+  |
+  o  changeset:   5:2f3a4c5c1417
+     parent:      1:27547f69f254
+     user:        test
+     date:        Thu Jan 01 00:00:00 1970 +0000
+     summary:     F
+  
+  o  changeset:   4:a603bfb5a83e
+  |  user:        test
+  |  date:        Thu Jan 01 00:00:00 1970 +0000
+  |  summary:     E
+  |
+  o  changeset:   3:b3325c91a4d9
+     user:        test
+     date:        Thu Jan 01 00:00:00 1970 +0000
+     summary:     D
+  
   $ hg bundle -R test-repo-bare bundle.hg ./branch-E-push ./branch-G-push ./branch-H-push
   searching for changes
   searching for changes
@@ -339,11 +367,15 @@
   $ hg out -G -R test-repo-bare ./branch-E-push ./branch-G-push ./branch-H-push --rev default
   comparing with ./branch-E-push
   searching for changes
+  o  changeset:   7:40faebb2ec45
+     tag:         tip
+     parent:      2:f838bfaca5c7
+     user:        test
+     date:        Thu Jan 01 00:00:00 1970 +0000
+     summary:     H
+  
   comparing with ./branch-G-push
   searching for changes
-  comparing with ./branch-H-push
-  searching for changes
-  no changes found
   o  changeset:   7:40faebb2ec45
   |  tag:         tip
   |  parent:      2:f838bfaca5c7
@@ -356,6 +388,9 @@
      date:        Thu Jan 01 00:00:00 1970 +0000
      summary:     C
   
+  comparing with ./branch-H-push
+  searching for changes
+  no changes found
   $ hg bundle -R test-repo-bare bundle.hg ./branch-E-push ./branch-G-push ./branch-H-push --rev default
   searching for changes
   searching for changes
@@ -422,11 +457,6 @@
   $ hg out -G -R test-repo-bare ./branch-G-push ./branch-H-push ./branch-E-push --rev default
   comparing with ./branch-G-push
   searching for changes
-  comparing with ./branch-H-push
-  searching for changes
-  no changes found
-  comparing with ./branch-E-push
-  searching for changes
   o  changeset:   7:40faebb2ec45
   |  tag:         tip
   |  parent:      2:f838bfaca5c7
@@ -439,6 +469,18 @@
      date:        Thu Jan 01 00:00:00 1970 +0000
      summary:     C
   
+  comparing with ./branch-H-push
+  searching for changes
+  no changes found
+  comparing with ./branch-E-push
+  searching for changes
+  o  changeset:   7:40faebb2ec45
+     tag:         tip
+     parent:      2:f838bfaca5c7
+     user:        test
+     date:        Thu Jan 01 00:00:00 1970 +0000
+     summary:     H
+  
   $ hg bundle -R test-repo-bare bundle.hg ./branch-G-push ./branch-H-push ./branch-E-push --rev default
   searching for changes
   searching for changes