Skip to content

Commit

Permalink
✨(clone): set publicheads to remote HEAD when cloning (facebook#607)
Browse files Browse the repository at this point in the history
Summary:
✨(clone): set publicheads to remote HEAD when cloning
c8b66c6 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 facebook#600

Pull Request resolved: facebook#607

Pull Request resolved: facebook#607

Test Plan: - Added test `test-git-clone-sets-publicheads.t`

Reviewed By: sggutier

Differential Revision: D45249747

Pulled By: zzl0

fbshipit-source-id: 8c3a36bd21a25a856d13cc3b2c78f9cbdd9a94c5
  • Loading branch information
vegerot authored and facebook-github-bot committed Apr 25, 2023
1 parent b5d3aab commit 0ce7010
Show file tree
Hide file tree
Showing 2 changed files with 49 additions and 1 deletion.
21 changes: 20 additions & 1 deletion eden/scm/edenscm/git.py
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,8 @@
import bindings
from edenscm import tracing

from . import bookmarks as bookmod, error, identity, progress, util
from . import bookmarks as bookmod, error, identity, progress, rcutil, util

from .i18n import _
from .node import bin, hex, nullid

Expand Down Expand Up @@ -154,6 +155,8 @@ def clone(ui, url, destpath=None, update=True, pullnames=None):
# fall back to the using the names in the config.
pullnames = bookmod.selectivepullbookmarknames(repo)

update_publicheads(repo, pullnames)

# Make sure we pull "update". If it looks like a hash, add to
# "nodes", otherwise to "names".
nodes = []
Expand Down Expand Up @@ -183,6 +186,15 @@ def clone(ui, url, destpath=None, update=True, pullnames=None):
return repo


def update_publicheads(repo, pullnames):
default_publicheads = repo.ui.configlist(
"remotenames", "publicheads"
) # ['remote/master', 'remote/main']
remote_publicheads = ["remote/" + path for path in pullnames]
all_publicheads = ",".join(sorted(set(default_publicheads + remote_publicheads)))
update_and_persist_config(repo, "remotenames", "publicheads", all_publicheads)


def parse_symref_head(symref_head_output: str) -> Optional[str]:
r"""
Args:
Expand Down Expand Up @@ -342,6 +354,13 @@ def readconfig(repo):
return config


def update_and_persist_config(repo, section, name, value):
"""edit config and save it to the repo's config file"""
configfilename = repo.ui.identity.configrepofile()
configfilepath = repo.localvfs.join(configfilename)
rcutil.editconfig(repo.ui, configfilepath, section, name, value)


@dataclass
class RefName:
"""simple reference name handling for git
Expand Down
29 changes: 29 additions & 0 deletions eden/scm/tests/test-git-clone-sets-publicheads.t
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
#debugruntest-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

0 comments on commit 0ce7010

Please sign in to comment.