sapling/tests/test-hggit-clone.t
Durham Goode e348c3c98c hggit: use transactions during git import
Summary:
Previously hggit used a single transaction for each commit it imported.
This added a lot of over head, such as writing the fncache every time and
committing to sql every time.

Instead, let's use a transaction that lasts a while. We'll tie it to the
existing gitmap save logic, so that we commit commits to disk before writing the
map file (so the map file never references commits that don't exist).

Reviewed By: quark-zju

Differential Revision: D9210162

fbshipit-source-id: 9b1302dfc824055742c4194dfaea7e172e5db6b4
2018-08-07 18:07:08 -07:00

109 lines
2.9 KiB
Perl

Load commonly used test logic
$ . "$TESTDIR/hggit/testutil"
$ git init gitrepo
Initialized empty Git repository in $TESTTMP/gitrepo/.git/
$ cd gitrepo
$ echo alpha > alpha
$ git add alpha
$ fn_git_commit -m 'add alpha'
$ git tag alpha
$ git checkout -b beta
Switched to a new branch 'beta'
$ echo beta > beta
$ git add beta
$ fn_git_commit -m 'add beta'
$ cd ..
clone a tag
$ hg clone -r alpha gitrepo hgrepo-a | grep -v '^updating'
importing git objects into hg
1 files updated, 0 files merged, 0 files removed, 0 files unresolved
$ hg -R hgrepo-a log --graph
@ changeset: 0:ff7a2f2d8d70
bookmark: master
tag: alpha
tag: default/master
tag: tip
user: test <test@example.org>
date: Mon Jan 01 00:00:10 2007 +0000
summary: add alpha
Make sure this is still draft since we didn't pull remote's HEAD
$ hg -R hgrepo-a phase -r alpha
0: draft
clone a branch
$ hg clone -r beta gitrepo hgrepo-b | grep -v '^updating'
importing git objects into hg
2 files updated, 0 files merged, 0 files removed, 0 files unresolved
$ hg -R hgrepo-b log --graph
@ changeset: 1:7fe02317c63d
| bookmark: beta
| tag: default/beta
| tag: tip
| user: test <test@example.org>
| date: Mon Jan 01 00:00:11 2007 +0000
| summary: add beta
|
o changeset: 0:ff7a2f2d8d70
bookmark: master
tag: alpha
tag: default/master
user: test <test@example.org>
date: Mon Jan 01 00:00:10 2007 +0000
summary: add alpha
clone with mapsavefreq set
$ rm -rf hgrepo-b
$ hg clone -r beta gitrepo hgrepo-b --config hggit.mapsavefrequency=1 --debug | egrep "(saving|committing)"
committing files:
committing manifest
committing changelog
committing transaction
saving mapfile
committing files:
committing manifest
committing changelog
committing transaction
saving mapfile
Make sure that a deleted .hgsubstate does not confuse hg-git
$ cd gitrepo
$ echo 'HASH random' > .hgsubstate
$ git add .hgsubstate
$ fn_git_commit -m 'add bogus .hgsubstate'
$ git rm -q .hgsubstate
$ fn_git_commit -m 'remove bogus .hgsubstate'
$ cd ..
$ hg clone -r beta gitrepo hgrepo-c
importing git objects into hg
updating to branch default
2 files updated, 0 files merged, 0 files removed, 0 files unresolved
$ hg --cwd hgrepo-c status
clone empty repo
$ git init empty
Initialized empty Git repository in $TESTTMP/empty/.git/
$ hg clone empty emptyhg
updating to branch default
0 files updated, 0 files merged, 0 files removed, 0 files unresolved
Ensure hggit.disallowinitbare blocks initting .hg/git
$ hg init nogitbare
$ cd nogitbare
$ cat >> .hg/hgrc <<EOF
> [hggit]
> disallowinitbare=True
> EOF
$ hg pull ../empty
pulling from ../empty
abort: missing .hg/git repo
[255]