diff --git a/eden/scm/edenscm/hgext/commitcloud/commands.py b/eden/scm/edenscm/hgext/commitcloud/commands.py index 543c036c0b..cfa47d7d84 100644 --- a/eden/scm/edenscm/hgext/commitcloud/commands.py +++ b/eden/scm/edenscm/hgext/commitcloud/commands.py @@ -1459,7 +1459,7 @@ def cloudcheck(ui, repo, dest=None, **opts): if not revs: revs = ["."] - remotepath = ccutil.getremotepath(repo, dest) + remotepath = ccutil.getremotereadpath(repo, dest) unfi = repo revs = scmutil.revrange(repo, revs) nodestocheck = [repo[r].hex() for r in revs] diff --git a/eden/scm/edenscm/hgext/commitcloud/sync.py b/eden/scm/edenscm/hgext/commitcloud/sync.py index 803216b4d8..603c83dbdb 100644 --- a/eden/scm/edenscm/hgext/commitcloud/sync.py +++ b/eden/scm/edenscm/hgext/commitcloud/sync.py @@ -124,11 +124,6 @@ def _sync( ui = repo.ui start = util.timer() - remotepath = ccutil.getremotepath(repo, dest) - getconnection = lambda: repo.connectionpool.get( - remotepath, connect_opts, reason="cloudsync" - ) - startnode = repo["."].node() if full: @@ -187,6 +182,16 @@ def _sync( origheads = _getheads(repo) origbookmarks = _getbookmarks(repo) + readonly = not origheads and not origbookmarks + remotepath = ( + ccutil.getremotereadpath(repo, dest) + if readonly + else ccutil.getremotepath(repo, dest) + ) + getconnection = lambda: repo.connectionpool.get( + remotepath, connect_opts, reason="cloudsync" + ) + # Back up all local commits that are not already backed up. # Load the backup state under the repo lock to ensure a consistent view. with repo.lock(): diff --git a/eden/scm/edenscm/hgext/commitcloud/util.py b/eden/scm/edenscm/hgext/commitcloud/util.py index 1f6f5a6560..94da7e694b 100644 --- a/eden/scm/edenscm/hgext/commitcloud/util.py +++ b/eden/scm/edenscm/hgext/commitcloud/util.py @@ -65,17 +65,44 @@ def getreponame(repo): return reponame -def getremotepath(repo, dest): - # If dest is empty, pass in None to get the default path. +def getremotewritepath(repo, dest): + """Select an appopriate remote repository to connect to for read/write commit cloud operations. + + If dest is empty, pass in None to get the default path. + Priorities: 'infinitepushwrite', 'infinitepush', 'default' + """ pathname = dependencies.infinitepush.constants.pathname path = repo.ui.paths.getpath( dest or None, default=(pathname.infinitepushwrite, pathname.infinitepush, pathname.default), ) - if not path: raise error.Abort( - _("default repository not configured!"), + _( + "none of 'infinitepushwrite', 'infinitepush', 'default' repositories configured!" + ), + hint=_("see 'hg help config.paths'"), + ) + return path.pushloc or path.loc + + +# alias +getremotepath = getremotewritepath + + +def getremotereadpath(repo, dest): + """Select an appopriate remote repository to connect to for readonly commit cloud operations. + + If dest is empty, pass in None to get the default path. + Priorities: 'infinitepush', 'default' + """ + pathname = dependencies.infinitepush.constants.pathname + path = repo.ui.paths.getpath( + dest or None, default=(pathname.infinitepush, pathname.default) + ) + if not path: + raise error.Abort( + _("none of 'infinitepush', 'default' repositories configured!"), hint=_("see 'hg help config.paths'"), ) return path.pushloc or path.loc diff --git a/eden/scm/tests/test-fb-hgext-smartlog-smallcommitmetadata.t b/eden/scm/tests/test-fb-hgext-smartlog-smallcommitmetadata.t index 0562527d0c..1e9a40c567 100644 --- a/eden/scm/tests/test-fb-hgext-smartlog-smallcommitmetadata.t +++ b/eden/scm/tests/test-fb-hgext-smartlog-smallcommitmetadata.t @@ -43,6 +43,6 @@ Verify smartlog shows only the configured data stable note: background backup is currently disabled so your commits are not being backed up. - abort: default repository not configured! + abort: none of 'infinitepushwrite', 'infinitepush', 'default' repositories configured! (see 'hg help config.paths') [255]