Sam Vilain <sam@xxxxxxxxxx> wrote: > This saves a bit of time when rebuilding the git-svn index. Does git-log still have the 16k buffer limit? If so then we can't use it because commit messages over 16k will be truncated and the git-svn-id line will not show up. Also, if that limit is removed I'd prefer to just add --pretty=raw to rev-list because git-log is stil porcelain and more likely to change. > Signed-off-by: Sam Vilain <sam@xxxxxxxxxx> > --- > git-svn.perl | 30 +++++++++++++++++++----------- > 1 files changed, 19 insertions(+), 11 deletions(-) > > diff --git a/git-svn.perl b/git-svn.perl > index e350061..610563c 100755 > --- a/git-svn.perl > +++ b/git-svn.perl > @@ -802,10 +802,15 @@ sub cmt_metadata { > > sub working_head_info { > my ($head, $refs) = @_; > - my ($fh, $ctx) = command_output_pipe('rev-list', $head); > - while (my $hash = <$fh>) { > - chomp($hash); > - my ($url, $rev, $uuid) = cmt_metadata($hash); > + my ($fh, $ctx) = command_output_pipe('log', $head); > + my $hash; > + while (<$fh>) { > + if ( m{^commit ($::sha1)$} ) { > + $hash = $1; > + next; > + } > + next unless s{^\s+(git-svn-id:)}{$1}; > + my ($url, $rev, $uuid) = extract_metadata($_); > if (defined $url && defined $rev) { > if (my $gs = Git::SVN->find_by_url($url)) { > my $c = $gs->rev_db_get($rev); > @@ -1964,16 +1969,19 @@ sub rebuild { > return; > } > print "Rebuilding $db_path ...\n"; > - my ($rev_list, $ctx) = command_output_pipe("rev-list", $self->refname); > + my ($log, $ctx) = command_output_pipe("log", $self->refname); > my $latest; > my $full_url = $self->full_url; > remove_username($full_url); > my $svn_uuid; > - while (<$rev_list>) { > - chomp; > - my $c = $_; > - die "Non-SHA1: $c\n" unless $c =~ /^$::sha1$/o; > - my ($url, $rev, $uuid) = ::cmt_metadata($c); > + my $c; > + while (<$log>) { > + if ( m{^commit ($::sha1)$} ) { > + $c = $1; > + next; > + } > + next unless s{^\s*(git-svn-id:)}{$1}; > + my ($url, $rev, $uuid) = ::extract_metadata($_); > remove_username($url); > > # ignore merges (from set-tree) > @@ -1991,7 +1999,7 @@ sub rebuild { > $self->rev_db_set($rev, $c); > print "r$rev = $c\n"; > } > - command_close_pipe($rev_list, $ctx); > + command_close_pipe($log, $ctx); > print "Done rebuilding $db_path\n"; > } > > -- > 1.5.0.4.210.gf8a7c-dirty > -- Eric Wong - To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html