git/list[1] front-page[2] threads[3] people[4] search[5] about
 

Re: [PATCH] git-svn: cache max revision in rev_db databases

From
EWEric Wong <normalperson@yhbt.net>
Date
Jun 10, 2007, 21:47 UTC
Message-ID
<20070610214753.GC12222@muzzle>
In-Reply-To
<20070610091304.C3E0413A4F8@magnus.utsl.gen.nz>
Sam Vilain <sam@vilain.net> wrote:
> Cache the maximum revision for each rev_db URL rather than looking it
> up each time.  This saves a lot of time when rebuilding indexes on a
> freshly cloned repository.

It looks correct, but I'm not sure how often we can even hit this optimization to make it worth it.

Any live repositories and benchmarks you've run this on? (without the rev-list => log patch applied, which would be a big performance improvement if all log messages were under 16k).

Show 32 quoted lines
> Signed-off-by: Sam Vilain <sam@vilain.net>
> ---
>  git-svn.perl |    4 ++++
>  1 files changed, 4 insertions(+), 0 deletions(-)
> 
> diff --git a/git-svn.perl b/git-svn.perl
> index 610563c..c9758a0 100755
> --- a/git-svn.perl
> +++ b/git-svn.perl
> @@ -804,6 +804,7 @@ sub working_head_info {
>  	my ($head, $refs) = @_;
>  	my ($fh, $ctx) = command_output_pipe('log', $head);
>  	my $hash;
> +	my %max;
>  	while (<$fh>) {
>  		if ( m{^commit ($::sha1)$} ) {
>  			$hash = $1;
> @@ -812,11 +813,14 @@ sub working_head_info {
>  		next unless s{^\s+(git-svn-id:)}{$1};
>  		my ($url, $rev, $uuid) = extract_metadata($_);
>  		if (defined $url && defined $rev) {
> +			next if $max{$url} and $max{$url} < $rev;
>  			if (my $gs = Git::SVN->find_by_url($url)) {
>  				my $c = $gs->rev_db_get($rev);
>  				if ($c && $c eq $hash) {
>  					close $fh; # break the pipe
>  					return ($url, $rev, $uuid, $gs);
> +				} else {
> +					$max{$url} ||= $gs->rev_db_max;
>  				}
>  			}
>  		}
-- 
Eric Wong
Previous: Sam VilainNext: Sam Vilain
Message 2 of 3 in “git-svn: cache max revision in rev_db databases”
  1. git-svn: cache max revision in rev_db databasesSam Vilain, Jun 10, 2007
  2. Eric WongJun 10, 2007
  3. Sam VilainJun 11, 2007

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.