Code

git-svn: replace .rev_db with a more space-efficient .rev_map format
authorEric Wong <normalperson@yhbt.net>
Sun, 9 Dec 2007 07:27:41 +0000 (23:27 -0800)
committerJunio C Hamano <gitster@pobox.com>
Tue, 11 Dec 2007 05:28:25 +0000 (21:28 -0800)
commit060610c572b21d00bb09ebbab664c0452c7eac9d
treef1f9eb782df1482fc39b2f81f4f6205d0d221bdd
parent591aa2536fdbc4090ba8d4ca512d4ee7df4bf05d
git-svn: replace .rev_db with a more space-efficient .rev_map format

Migrations are done automatically on an as-needed basis when new
revisions are to be fetched.  Stale remote branches do not get
migrated, yet.

However, unless you set noMetadata or useSvkProps it's safe to
just do:

  find $GIT_DIR/svn -name '.rev_db*' -print0 | xargs rm -f

to purge all the old .rev_db files.

The new format is a one-way migration and is NOT compatible with
old versions of git-svn.

This is the replacement for the rev_db format, which was too big
and inefficient for large repositories with a lot of sparse history
(mainly tags).

The format is this:

  - 24 bytes for every record,
    * 4 bytes for the integer representing an SVN revision number
    * 20 bytes representing the sha1 of a git commit

  - No empty padding records like the old format

  - new records are written append-only since SVN revision numbers
    increase monotonically

  - lookups on SVN revision number are done via a binary search

  - Piping the file to xxd(1) -c24 is a good way of dumping it for
    viewing or editing, should the need ever arise.

As with .rev_db, these files are disposable unless noMetadata or
useSvmProps is set.

Signed-off-by: Eric Wong <normalperson@yhbt.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
git-svn.perl
t/lib-git-svn.sh
t/t9107-git-svn-migrate.sh