# HG changeset patch # User Pierre-Yves David # Date 2021-04-14 08:35:40 # Node ID ebb13f9a9ba8c2e43a7cc927333097864b9bb69d # Parent 9519312ecd81fc874a03428cae2515ccf139f53f urlutil: add a `get_clone_path` function We add a new function with a semantic focussed on `clone` operation (so without an existing repository). I am not certain the return type is the best, but this is what we need for now. Once all caller are migrated we might start thinking about that the API should be. For now that will do. Differential Revision: https://phab.mercurial-scm.org/D10401 diff --git a/mercurial/hg.py b/mercurial/hg.py --- a/mercurial/hg.py +++ b/mercurial/hg.py @@ -672,8 +672,8 @@ def clone( """ if isinstance(source, bytes): - origsource = ui.expandpath(source) - source, branches = urlutil.parseurl(origsource, branch) + src = urlutil.get_clone_path(ui, source, branch) + origsource, source, branches = src srcpeer = peer(ui, peeropts, source) else: srcpeer = source.peer() # in case we were called with a localrepo diff --git a/mercurial/utils/urlutil.py b/mercurial/utils/urlutil.py --- a/mercurial/utils/urlutil.py +++ b/mercurial/utils/urlutil.py @@ -471,6 +471,13 @@ def get_pull_paths(repo, ui, sources, de yield parseurl(url, default_branches) +def get_clone_path(ui, source, default_branches=()): + """return the `(origsource, path, branch)` selected as clone source""" + url = ui.expandpath(source) + path, branch = parseurl(url, default_branches) + return url, path, branch + + def parseurl(path, branches=None): '''parse url#branch, returning (url, (branch, branches))''' u = url(path)