handle hg

mkdir git
cd git

env GIT_AUTHOR_NAME='Russ Cox'
env GIT_AUTHOR_EMAIL='rsc@golang.org'
env GIT_COMMITTER_NAME=$GIT_AUTHOR_NAME
env GIT_COMMITTER_EMAIL=$GIT_AUTHOR_EMAIL

git init

at 2018-04-17T15:43:22-04:00
unquote ''
cp stdout README
git add README
git commit -a -m 'empty README'
git branch -m master
git tag v1.2.3

at 2018-04-17T15:45:48-04:00
git branch v2
git checkout v2
echo 'v2'
cp stdout v2
git add v2
git commit -a -m 'v2'
git tag v2.3
git tag v2.0.1
git branch v2.3.4
git tag branch-v2.3.4

at 2018-04-17T16:00:19-04:00
echo 'intermediate'
cp stdout foo.txt
git add foo.txt
git commit -a -m 'intermediate'

at 2018-04-17T16:00:32-04:00
echo 'another'
cp stdout another.txt
git add another.txt
git commit -a -m 'another'
git tag v2.0.2
git tag branch-v2

at 2018-04-17T16:16:52-04:00
git checkout master
git branch v3
git checkout v3
mkdir v3/sub/dir
echo 'v3/sub/dir/file'
cp stdout v3/sub/dir/file.txt
git add v3
git commit -a -m 'add v3/sub/dir/file.txt'
git tag branch-v3

at 2018-04-17T22:23:00-04:00
git checkout master
git tag -a v1.2.4-annotated -m 'v1.2.4-annotated'

cd ..

hg init
hg convert --datesort ./git .
rm ./git

hg update -C v2
hg branch v2
unquote ''
cp stdout dummy
hg add dummy
hg commit --user 'Russ Cox <rsc@golang.org>' --date '2018-06-27T12:15:24-04:00' -m 'dummy'

# 'hg convert' blindly stamps a tag-update commit at the end of whatever branch
# happened to contain the last converted commit — in this case, v3. However, the
# original vcs-test.golang.org copy of this repo had this commit on the v3
# branch as a descendent of 'add v3/sub/dir/file.txt', so that's where we put it
# here. That leaves the convert-repo 'update tags' commit only reachable as the
# head of the default branch.
hg update -r 4

hg branch v3
unquote ''
cp stdout dummy
hg add dummy
hg commit --user 'Russ Cox <rsc@golang.org>' --date '2018-06-27T12:15:45-04:00' -m 'dummy'

hg update v2.3.4
hg branch v2.3.4
unquote ''
cp stdout dummy
hg add dummy
hg commit --user 'Russ Cox <rsc@golang.org>' --date '2018-06-27T12:16:10-04:00' -m 'dummy'

hg tag --user 'Russ Cox <rsc@golang.org>' --date '2018-06-27T12:16:30-04:00' -m 'Removed tag branch-v2, branch-v3, branch-v2.3.4' --remove branch-v2 branch-v3 branch-v2.3.4

# Adding commits to the above branches updates both the branch heads and the
# corresponding bookmarks.
# But apparently at some point it did not do so? The original copy of this repo
# had bookmarks pointing to the base of each branch instead of the tip. 🤔
# Either way, force the bookmarks we care about to match the original copy of
# the repo.
hg book v2 -r 3 --force
hg book v2.3.4 -r 1 --force
hg book v3 -r 5 --force

hg log -G --debug

hg tags
cmp stdout .hg-tags

	# 'hg convert' leaves an 'update tags' commit on the default branch, and that
	# commit always uses the current date (so is not reproducible). Fortunately,
	# that commit lands on the 'default' branch and is not tagged as 'tip', so it
	# seems to be mostly harmless. However, because it is nondeterministic we
	# should avoid listing it here.
	#
	# Unfortunately, some of our builders are still running Debian 9 “Stretch”,
	# which shipped with a version of 'hg' that does not support 'hg branch -r'
	# to list branches for specific versions. Although Stretch is past its
	# end-of-life date, we need to keep the builders happy until they can be
	# turned down (https://go.dev/issue/56414).
hg branches
? cmp stdout .hg-branches
stdout 'v2\s+6:9a4f43d231ec'
stdout 'v2.3.4\s+9:18518c07eb8e'
stdout 'v3\s+7:a2cad8a2b1bb'
stdout 'default\s+5:'

# Likewise, bookmark v3 ends up on the nondeterministic commit.
hg bookmarks
? cmp stdout .hg-bookmarks
stdout 'master\s+0:41964ddce118'
stdout 'v2\s+3:8f49ee7a6ddc'
stdout 'v2.3.4\s+1:88fde824ec8b'
stdout 'v3\s+5:.*'

-- .hg-branches --
v2.3.4                         9:18518c07eb8e
v3                             7:a2cad8a2b1bb
v2                             6:9a4f43d231ec
-- .hg-tags --
tip                                9:18518c07eb8e
v2.0.2                             3:8f49ee7a6ddc
v2.3                               1:88fde824ec8b
v2.0.1                             1:88fde824ec8b
v1.2.4-annotated                   0:41964ddce118
v1.2.3                             0:41964ddce118
-- .hg-bookmarks --
   master                    0:41964ddce118
   v2                        3:8f49ee7a6ddc
   v2.3.4                    1:88fde824ec8b
