# HG changeset patch # User Pierre-Yves David # Date 1714632418 -7200 # Node ID fc317bd5b6375ea412be94fdb6fef0e970f31485 # Parent 3e0f86f09f26b3f474b1b34e90ac657869d3ef51 fold-or-prune-me: update proposal This does the same things but with a narrower wrapping. diff -r 3e0f86f09f26 -r fc317bd5b637 mercurial/hg.py --- a/mercurial/hg.py Sun Mar 31 17:57:46 2024 -0300 +++ b/mercurial/hg.py Thu May 02 08:46:58 2024 +0200 @@ -1420,44 +1420,58 @@ ) +_no_subtoppath = object() + + def _outgoing(ui, repo, dests, opts, subpath=None): out = set() others = [] for path in urlutil.get_push_paths(repo, ui, dests): dest = path.loc - repo._subtoppath = dest - if subpath is not None: - subpath = urlutil.url(subpath) - if subpath.isabs(): - dest = bytes(subpath) - else: - p = urlutil.url(dest) - if p.islocal(): - normpath = os.path.normpath + prev_subtopath = getattr(repo, "_subtoppath", _no_subtoppath) + try: + repo._subtoppath = dest + if subpath is not None: + subpath = urlutil.url(subpath) + if subpath.isabs(): + dest = bytes(subpath) else: - normpath = posixpath.normpath - p.path = normpath(b'%s/%s' % (p.path, subpath)) - dest = bytes(p) - branches = path.branch, opts.get(b'branch') or [] + p = urlutil.url(dest) + if p.islocal(): + normpath = os.path.normpath + else: + normpath = posixpath.normpath + p.path = normpath(b'%s/%s' % (p.path, subpath)) + dest = bytes(p) + branches = path.branch, opts.get(b'branch') or [] - ui.status(_(b'comparing with %s\n') % urlutil.hidepassword(dest)) - revs, checkout = addbranchrevs(repo, repo, branches, opts.get(b'rev')) - if revs: - revs = [repo[rev].node() for rev in logcmdutil.revrange(repo, revs)] + ui.status(_(b'comparing with %s\n') % urlutil.hidepassword(dest)) + revs, checkout = addbranchrevs( + repo, repo, branches, opts.get(b'rev') + ) + if revs: + revs = [ + repo[rev].node() for rev in logcmdutil.revrange(repo, revs) + ] - other = peer(repo, opts, dest) - try: - outgoing = discovery.findcommonoutgoing( - 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) - except: # re-raises - other.close() - raise + other = peer(repo, opts, dest) + try: + outgoing = discovery.findcommonoutgoing( + 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) + except: # re-raises + other.close() + raise + finally: + if prev_subtopath is _no_subtoppath: + del repo._subtoppath + else: + repo._subtoppath = prev_subtopath # make sure this is ordered by revision number outgoing_revs = list(out) cl = repo.changelog @@ -1529,7 +1543,6 @@ finally: for oth in others: oth.close() - del repo._subtoppath def verify(repo, level=None):