urlutil: add a `get_pull_paths` to perform the pull destination logic
authorPierre-Yves David <pierre-yves.david@octobus.net>
Tue, 13 Apr 2021 12:28:44 +0200
changeset 46910 df7439cc6806
parent 46909 067840864f37
child 46911 6071bfab6292
urlutil: add a `get_pull_paths` to perform the pull destination logic As is this changeset does not change anything. However having an official empty point will help unifying the logic and encapsulate the details and update the logic to support path definition pointing to multiple other path. Differential Revision: https://phab.mercurial-scm.org/D10378
mercurial/commands.py
mercurial/utils/urlutil.py
--- a/mercurial/commands.py	Mon Apr 12 22:22:56 2021 +0200
+++ b/mercurial/commands.py	Tue Apr 13 12:28:44 2021 +0200
@@ -5387,12 +5387,8 @@
         hint = _(b'use hg pull followed by hg update DEST')
         raise error.InputError(msg, hint=hint)
 
-    if not sources:
-        sources = [b'default']
-    for source in sources:
-        source, branches = urlutil.parseurl(
-            ui.expandpath(source), opts.get(b'branch')
-        )
+    sources = urlutil.get_pull_paths(repo, ui, sources, opts.get(b'branch'))
+    for source, branches in sources:
         ui.status(_(b'pulling from %s\n') % urlutil.hidepassword(source))
         ui.flush()
         other = hg.peer(repo, opts, source)
--- a/mercurial/utils/urlutil.py	Mon Apr 12 22:22:56 2021 +0200
+++ b/mercurial/utils/urlutil.py	Tue Apr 13 12:28:44 2021 +0200
@@ -453,6 +453,15 @@
         yield ui.getpath(dest, default=(b'default-push', b'default'))
 
 
+def get_pull_paths(repo, ui, sources, default_branches=()):
+    """yields all the `(path, branch)` selected as pull source by `sources`"""
+    if not sources:
+        sources = [b'default']
+    for source in sources:
+        url = ui.expandpath(source)
+        yield parseurl(url, default_branches)
+
+
 def parseurl(path, branches=None):
     '''parse url#branch, returning (url, (branch, branches))'''
     u = url(path)