Subject: Re: git svn dcommit -n rebuilds revmap w/ 1.5.4.rc0.1187.gc1e8d

From: Eric Wong <[email-masked]>
Date: Wed, 19 Dec 2007 22:55:13 -0800

Bill Priest <[email-masked]> wrote:
> All,
>   I had been experiencing commit slow downs (> 15
> seconds) so I decided to test it out on 1.5.4.rc0.  I
> use committed a file and it too ~5 seconds which is
> slower than it used to be but much better (I'll need
> to do an apples to apples test to quantify it better;
> e.g. check in the same file w/ a repository in the
> same state).  In the course of using 1.5.4.rc0 I did a
> git svn dcommit -n and observed the following:

Are these slowdowns for commits using git-commit? or for using git-svn
dcommit?

The new rev_map format is very space-efficient, but I haven't optimized
for performance, yet.  It seems to do well enough on Linux that I
don't notice any performance penalty/improvement.  I'm also network
I/O bound for real-world SVN usage, too.

I haven't benchmarked .rev_map much, but the binary search could
certainly be optimized to avoid extra seeks if needed.

> > git svn dcommit -n
> Rebuilding
> .git/svn/mss_release_2.1B3/.rev_map.59aec714-b326-0410-a24e-830352df6fdd
> ...
> r2918 = 992aa04a75fffdbdb65bae815905f96d5e3ef6bd
> r2920 = e68e7f5aead05fc9e7a151e95f43b8283b0ed670
> Done rebuilding
> .git/svn/mss_release_2.1B3/.rev_map.59aec714-b326-0410-a24e-830352df6fdd
> Committing to
> svn://lucille/var/lib/svnrepos/svnMSS/branches/mss_release_2.1B3
> ...
> diff-tree b7cc4c3d32478277c1cdf13e3abdc9dd4a225826~1
> b7cc4c3d32478277c1cdf13e3abdc9dd4a225826
> diff-tree 0bbb656391f5a888d07c98ccce01a4c753ef4997~1
> 0bbb656391f5a888d07c98ccce01a4c753ef4997
> > git svn dcommit -n
> Committing to
> svn://lucille/var/lib/svnrepos/svnMSS/branches/mss_release_2.1B3
> ...
> diff-tree b7cc4c3d32478277c1cdf13e3abdc9dd4a225826~1
> b7cc4c3d32478277c1cdf13e3abdc9dd4a225826
> diff-tree 0bbb656391f5a888d07c98ccce01a4c753ef4997~1
> 0bbb656391f5a888d07c98ccce01a4c753ef4997
> > git --version
> git version 1.5.4.rc0.1187.gc1e8d
> 
> Notice the Rebuilding doesn't seem to be honoring the
> -n "dry run" switch.
> 
> I'm not sure of the implications.  Is this something
> that I should worry about the .revmap being out of
> sync w/ what has actually been dcommit'ed?

--dry-run only means that it won't write to the SVN repository.

There's no need to worry about stuff that's out of sync, .rev_map only
stores information about commits already made to SVN, and is more of an
internal cache for most repositories.

All .rev_map and .rev_db files it replaces are safely deletable
unless you're using noMetadata or useSvmProps with git-svn.

-- 
Eric Wong