sapling/tests/test-git-getmeta.t
Siddharth Agarwal 5322d7b6fe add a command and server-side support to fetch git metadata
Summary:
When a machine is newly set up, it needs to have the git mapfile available. Generating it from scratch is prohibitively slow for large repos like `configerator`, so instead add a command that can download the entire git metadata from a server that has it.

This is a temporary hack while I work on a real fix to upstream to hg-git. A real fix would be

- part of hg-git
- not send the entire git metadata over, just the bits that are needed based on a common/heads computation
- be dependent on bundle2
- (probably) be part of the pull operation, not a separate command
- be configurable with an option

This isn't part of hg-git, even in a private branch, to emphasize its temporary nature. `gitlookup` might also not be the best fit, but I want to avoid adding yet another extension for a temporary hack.

Test Plan:
Ran the following commands. Note that the current version of `hg` deployed to devservers is broken, so we need to deploy an updated hg before enabling this. These commands were tested against 1ced7c762592

(in `fbandroid-hg`, with `gitlookup` enabled on both ends and the remotefilelog fix in D1341059)

    hg gitgetmeta ../fbandroid-from-git

Saw that 3 files were written out.

    hg gitgetmeta ssh://localhost//data/users/sid0/fbandroid-from-git

Saw that 3 files were written out.

Reviewers: dschleimer, davidsp, akushner, durham, pyd

Reviewed By: pyd

Differential Revision: https://phabricator.fb.com/D1341166

Tasks: 3751836
2014-05-20 22:32:54 -07:00

41 lines
1.4 KiB
Perl

$ echo "[extensions]" >> $HGRCPATH
$ echo "gitlookup = $TESTDIR/../gitlookup.py" >> $HGRCPATH
Set up the hg-git files
$ hg init repo1
$ cd repo1/.hg
$ echo '0000000000000000000000000000000000000000 ffffffffffffffffffffffffffffffffffffffff' > git-mapfile
$ echo '0000000000000000000000000000000000000000 default/master' > git-remote-refs
$ echo '0000000000000000000000000000000000000000 0.1' > git-tags
$ cd ../..
$ hg clone repo1 repo2 -q
$ cd repo2
$ hg gitgetmeta -v
getting git metadata from $TESTTMP/repo1
writing .hg/git-mapfile
writing .hg/git-remote-refs
writing .hg/git-tags
wrote 3 files (183 bytes)
$ cat .hg/git-mapfile
0000000000000000000000000000000000000000 ffffffffffffffffffffffffffffffffffffffff
$ cat .hg/git-remote-refs
0000000000000000000000000000000000000000 default/master
$ cat .hg/git-tags
0000000000000000000000000000000000000000 0.1
Change a file upstream and see that it gets reflected her
$ echo '1111111111111111111111111111111111111111 eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee' >> ../repo1/.hg/git-mapfile
$ hg gitgetmeta -v
getting git metadata from $TESTTMP/repo1
writing .hg/git-mapfile
writing .hg/git-remote-refs
writing .hg/git-tags
wrote 3 files (265 bytes)
$ cat .hg/git-mapfile
0000000000000000000000000000000000000000 ffffffffffffffffffffffffffffffffffffffff
1111111111111111111111111111111111111111 eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee