mirror of
https://github.com/facebook/sapling.git
synced 2024-10-11 09:17:30 +03:00
bf3cad3004
Summary: In order to move our hg-git mirroring off of the main hg servers, we need to make it possible for the hg servers to compute the hg-git mapping without having the entire git repository available. To do so, let's store the git hash as an extra in the hg commit. This breaks bidirectionality, but we've long since not needed that. Reviewed By: phillco Differential Revision: D13362980 fbshipit-source-id: 51df709bc5e77d78bb963abf90d0c35bb743d966
219 lines
5.9 KiB
Perl
219 lines
5.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 checkout -b not-master
|
|
Switched to a new branch 'not-master'
|
|
|
|
$ cd ..
|
|
$ hg clone gitrepo hgrepo | grep -v '^updating'
|
|
importing git objects into hg
|
|
1 files updated, 0 files merged, 0 files removed, 0 files unresolved
|
|
|
|
$ cd hgrepo
|
|
$ hg bookmark -q master
|
|
$ echo beta > beta
|
|
$ hg add beta
|
|
$ fn_hg_commit -m 'add beta'
|
|
|
|
|
|
$ echo gamma > gamma
|
|
$ hg add gamma
|
|
$ fn_hg_commit -m 'add gamma'
|
|
|
|
$ hg book -r 1 beta
|
|
$ hg push -r beta
|
|
pushing to $TESTTMP/gitrepo
|
|
searching for changes
|
|
adding objects
|
|
added 1 commits with 1 trees and 1 blobs
|
|
adding reference refs/heads/beta
|
|
|
|
$ cd ..
|
|
|
|
should have two different branches
|
|
$ cd gitrepo
|
|
$ git branch -v
|
|
beta 0f378ab add beta
|
|
master 7eeab2e add alpha
|
|
* not-master 7eeab2e add alpha
|
|
|
|
some more work on master from git
|
|
$ git checkout master
|
|
Switched to branch 'master'
|
|
$ echo delta > delta
|
|
$ git add delta
|
|
$ fn_git_commit -m "add delta"
|
|
$ git checkout not-master
|
|
Switched to branch 'not-master'
|
|
|
|
$ cd ..
|
|
|
|
$ cd hgrepo
|
|
this should fail
|
|
$ hg push -r master
|
|
pushing to $TESTTMP/gitrepo
|
|
searching for changes
|
|
abort: branch 'refs/heads/master' changed on the server, please pull and merge before pushing
|
|
[255]
|
|
|
|
... even with -f
|
|
$ hg push -fr master
|
|
pushing to $TESTTMP/gitrepo
|
|
searching for changes
|
|
abort: branch 'refs/heads/master' changed on the server, please pull and merge before pushing
|
|
[255]
|
|
|
|
$ hg pull 2>&1 | grep -v 'divergent bookmark'
|
|
pulling from $TESTTMP/gitrepo
|
|
importing git objects into hg
|
|
(run 'hg heads' to see heads, 'hg merge' to merge)
|
|
TODO shouldn't need to do this since we're (in theory) pushing master explicitly,
|
|
which should not implicitly also push the not-master ref.
|
|
$ hg book not-master -r default/not-master --force
|
|
master and default/master should be diferent
|
|
$ hg log -r master
|
|
changeset: 2:49480a0fbf45
|
|
bookmark: master
|
|
user: test
|
|
date: Mon Jan 01 00:00:12 2007 +0000
|
|
summary: add gamma
|
|
|
|
$ hg log -r default/master
|
|
changeset: 3:59db0d26c08d
|
|
tag: default/master
|
|
tag: tip
|
|
parent: 0:69982ec78c6d
|
|
user: test <test@example.org>
|
|
date: Mon Jan 01 00:00:13 2007 +0000
|
|
summary: add delta
|
|
|
|
|
|
this should also fail
|
|
$ hg push -r master
|
|
pushing to $TESTTMP/gitrepo
|
|
searching for changes
|
|
abort: pushing refs/heads/master overwrites 49480a0fbf45
|
|
[255]
|
|
|
|
... but succeed with -f
|
|
$ hg push -fr master
|
|
pushing to $TESTTMP/gitrepo
|
|
searching for changes
|
|
adding objects
|
|
added 1 commits with 1 trees and 1 blobs
|
|
updating reference refs/heads/master
|
|
|
|
this should fail, no changes to push
|
|
$ hg push -r master
|
|
pushing to $TESTTMP/gitrepo
|
|
searching for changes
|
|
no changes found
|
|
[1]
|
|
|
|
hg-git issue103 -- directories can lose information at hg-git export time
|
|
|
|
$ hg up master | egrep -v '^\(activating bookmark master\)$'
|
|
0 files updated, 0 files merged, 0 files removed, 0 files unresolved
|
|
$ mkdir dir1
|
|
$ echo alpha > dir1/alpha
|
|
$ hg add dir1/alpha
|
|
$ fn_hg_commit -m 'add dir1/alpha'
|
|
$ hg push -r master
|
|
pushing to $TESTTMP/gitrepo
|
|
searching for changes
|
|
adding objects
|
|
added 1 commits with 2 trees and 0 blobs
|
|
updating reference refs/heads/master
|
|
|
|
$ echo beta > dir1/beta
|
|
$ hg add dir1/beta
|
|
$ fn_hg_commit -m 'add dir1/beta'
|
|
$ hg push -r master
|
|
pushing to $TESTTMP/gitrepo
|
|
searching for changes
|
|
adding objects
|
|
added 1 commits with 2 trees and 0 blobs
|
|
updating reference refs/heads/master
|
|
$ hg log -r master
|
|
changeset: 5:e4281e9db8f8
|
|
bookmark: master
|
|
tag: default/master
|
|
tag: tip
|
|
user: test
|
|
date: Mon Jan 01 00:00:15 2007 +0000
|
|
summary: add dir1/beta
|
|
|
|
|
|
$ cd ..
|
|
|
|
$ hg clone gitrepo hgrepo-test
|
|
importing git objects into hg
|
|
updating to branch default
|
|
5 files updated, 0 files merged, 0 files removed, 0 files unresolved
|
|
$ hg -R hgrepo-test log -r master
|
|
changeset: 4:8df619e46009
|
|
bookmark: master
|
|
tag: default/master
|
|
tag: tip
|
|
user: test
|
|
date: Mon Jan 01 00:00:15 2007 +0000
|
|
summary: add dir1/beta
|
|
|
|
|
|
Push empty Hg repo to empty Git repo (issue #58)
|
|
$ hg init hgrepo2
|
|
$ git init -q --bare gitrepo2
|
|
$ hg -R hgrepo2 push gitrepo2
|
|
pushing to gitrepo2
|
|
searching for changes
|
|
no changes found
|
|
[1]
|
|
|
|
The remote repo is empty and the local one doesn't have any bookmarks/tags
|
|
$ cd hgrepo2
|
|
$ echo init >> test.txt
|
|
$ hg addremove
|
|
adding test.txt
|
|
$ fn_hg_commit -m init
|
|
$ hg update null
|
|
0 files updated, 0 files merged, 1 files removed, 0 files unresolved
|
|
$ hg push ../gitrepo2
|
|
pushing to ../gitrepo2
|
|
searching for changes
|
|
adding objects
|
|
added 1 commits with 1 trees and 1 blobs
|
|
(the phases line was added in Mercurial 3.5)
|
|
$ hg summary | grep -Ev '^phases:'
|
|
parent: -1:000000000000 (no revision checked out)
|
|
commit: (clean)
|
|
Only one bookmark 'master' should be created
|
|
$ hg bookmarks
|
|
* master 0:8aded40be5af
|
|
|
|
test for ssh vulnerability
|
|
|
|
$ cat >> $HGRCPATH << EOF
|
|
> [ui]
|
|
> ssh = ssh -o ConnectTimeout=1
|
|
> EOF
|
|
$ hg push 'git+ssh://-oProxyCommand=rm${IFS}nonexistent/path' 2>&1 >/dev/null
|
|
abort: potentially unsafe hostname: '-oProxyCommand=rm${IFS}nonexistent'
|
|
[255]
|
|
$ hg push 'git+ssh://-oProxyCommand=rm%20nonexistent/path' 2>&1 >/dev/null
|
|
abort: potentially unsafe hostname: '-oProxyCommand=rm nonexistent'
|
|
[255]
|
|
$ hg push 'git+ssh://fakehost|rm%20nonexistent/path' 2>&1 >/dev/null
|
|
ssh: * fakehost%7crm%20nonexistent* (glob)
|
|
abort: git remote error: The remote server unexpectedly closed the connection.
|
|
[255]
|
|
$ hg push 'git+ssh://fakehost%7Crm%20nonexistent/path' 2>&1 >/dev/null
|
|
ssh: * fakehost%7crm%20nonexistent* (glob)
|
|
abort: git remote error: The remote server unexpectedly closed the connection.
|
|
[255]
|