From 91ffca3ee939652b5914f7baf2fd0083dcdcad6a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Max=20=F0=9F=91=A8=F0=9F=8F=BD=E2=80=8D=F0=9F=92=BB=20Copl?= =?UTF-8?q?an?= Date: Mon, 17 Apr 2023 21:11:05 -0700 Subject: [PATCH] =?UTF-8?q?=E2=9C=A8(clone):=20set=20publicheads=20to=20re?= =?UTF-8?q?mote=20HEAD=20when=20cloning?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Summary: c8b66c68991066b3e added support for cloning the remote git repo's HEAD (in this case `develop`), instead of main/master by default. However, this doesn't mark `remote/develop` and its ancestors as public commits. This commit will also set remote git repo's HEAD as a public commit Closes #600 Pull Request resolved: #607 Test Plan: - Added test `test-git-clone-sets-publicheads.t` --- eden/scm/edenscm/git.py | 12 +++++++- .../tests/test-git-clone-sets-publicheads.t | 29 +++++++++++++++++++ eden/scm/tests/test-git.t | 3 ++ 3 files changed, 43 insertions(+), 1 deletion(-) create mode 100644 eden/scm/tests/test-git-clone-sets-publicheads.t diff --git a/eden/scm/edenscm/git.py b/eden/scm/edenscm/git.py index 917513fb01cea..c8506956dc5b1 100644 --- a/eden/scm/edenscm/git.py +++ b/eden/scm/edenscm/git.py @@ -21,7 +21,7 @@ import bindings from edenscm import tracing -from . import bookmarks as bookmod, error, identity, progress, util +from . import bookmarks as bookmod, error, identity, progress, util, rcutil from .i18n import _ from .node import bin, hex, nullid @@ -153,6 +153,16 @@ def clone(ui, url, destpath=None, update=True, pullnames=None): # If `git ls-remote --symref HEAD` failed to yield a name, # fall back to the using the names in the config. pullnames = bookmod.selectivepullbookmarknames(repo) + default_publicheads = repo.ui.config('remotenames', + 'publicheads').split(',') # ['remote/master', 'remote/main'] + remote_publicheads = ['remote/' + path for path in pullnames] + all_publicheads = ','.join(sorted(set(default_publicheads + remote_publicheads))) + + configfilename = repo.ui.identity.configrepofile() + rcutil.editconfig(repo.ui, + repo.localvfs.join(configfilename), + 'remotenames', 'publicheads', + all_publicheads) # Make sure we pull "update". If it looks like a hash, add to # "nodes", otherwise to "names". diff --git a/eden/scm/tests/test-git-clone-sets-publicheads.t b/eden/scm/tests/test-git-clone-sets-publicheads.t new file mode 100644 index 0000000000000..bb32ed6eb97d7 --- /dev/null +++ b/eden/scm/tests/test-git-clone-sets-publicheads.t @@ -0,0 +1,29 @@ +#chg-compatible +#require git no-windows + + $ . $TESTDIR/git.sh + +Prepare a git repo: + + $ git init -q gitrepo + $ cd gitrepo + $ git config core.autocrlf false + $ echo 1 > alpha + $ git add alpha + $ git commit -q -malpha + + $ git switch -c foo + Switched to a new branch 'foo' + + $ echo 2 > beta + $ git add beta + $ git commit -q -mbeta + +Test git clone sets publicheads + $ hg clone --git "$TESTTMP/gitrepo" cloned + From $TESTTMP/gitrepo + * [new ref] 3f5848713286c67b8a71a450e98c7fa66787bde2 -> remote/foo + 2 files updated, 0 files merged, 0 files removed, 0 files unresolved + $ cd cloned + $ hg config remotenames.publicheads + remote/foo,remote/main,remote/master diff --git a/eden/scm/tests/test-git.t b/eden/scm/tests/test-git.t index 745ba6c47a793..d235f1f7e3a55 100644 --- a/eden/scm/tests/test-git.t +++ b/eden/scm/tests/test-git.t @@ -260,6 +260,9 @@ Test clone with flags (--noupdate, --updaterev): remote/master 3f5848713286 $ cd .. + # This test is VERY suspicious. It's supposed to test `ls-remote` symref HEAD + # parsing, but it passes `--updaterev` that totally circumvents all the code + # it's supposed to test $ hg clone --git "$TESTTMP/gitrepo" -u foo cloned1 From $TESTTMP/gitrepo * [new ref] 3f5848713286c67b8a71a450e98c7fa66787bde2 -> remote/master