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

Re: [PATCH] git-svn: persistent memoization

From
EWEric Wong <normalperson@yhbt.net>
Date
Feb 1, 2010, 04:03 UTC
Message-ID
<20100201040312.GA26199@dcvr.yhbt.net>
In-Reply-To
<1264821262-28322-1-git-send-email-amyrick@apple.com>
Andrew Myrick <amyrick@apple.com> wrote:
Show 5 quoted lines
> Make memoization of the svn:mergeinfo processing functions persistent with
> Memoize::Storable so that the memoization tables don't need to be regenerated
> every time the user runs git-svn fetch.
> 
> The Memoize::Storable hashes are stored in ENV{GIT_DIR}/svn/caches.
Hi Andrew,

Perhaps "$ENV{GIT_DIR}/svn/.caches" is better here since older versions of git svn used "$ENV{GIT_DIR}/svn/$refname" in the top-level and "caches" may conflict with existing repos.

> -use File::Path qw/mkpath/;
> +use File::Path qw/mkpath make_path/;

File::Path::make_path is very recent not in Perls distributed by most vendors. My 5.10.0 installation (Debian stable) doesn't have it, and I also don't see a good reason to use it over the traditional mkpath.

I think I'll squash the following patch and Ack. Let me know if you have any objections, thanks.! (also wraps long lines to 80 chars)

diff --git a/git-svn.perl b/git-svn.perl
index 0153439..265852f 100755
--- a/git-svn.perl
+++ b/git-svn.perl
@@ -1652,7 +1652,7 @@ use vars qw/$default_repo_id $default_ref_id $_no_metadata $_follow_parent
             $_use_svnsync_props $no_reuse_existing $_minimize_url
 	    $_use_log_author $_add_author_from $_localtime/;
 use Carp qw/croak/;
-use File::Path qw/mkpath make_path/;
+use File::Path qw/mkpath/;
 use File::Copy qw/copy/;
 use IPC::Open3;
 use Memoize;  # core since 5.8.0, Jul 2002
@@ -3126,25 +3126,25 @@ sub has_no_changes {
 		return if $memoized;
 		$memoized = 1;
 
-		my $cache_path = "$ENV{GIT_DIR}/svn/caches/";
-		make_path($cache_path) unless -d $cache_path;
+		my $cache_path = "$ENV{GIT_DIR}/svn/.caches/";
+		mkpath([$cache_path]) unless -d $cache_path;
 
-		tie my %lookup_svn_merge_cache =>
-			'Memoize::Storable',"$cache_path/lookup_svn_merge.db", 'nstore';
+		tie my %lookup_svn_merge_cache => 'Memoize::Storable',
+		    "$cache_path/lookup_svn_merge.db", 'nstore';
 		memoize 'lookup_svn_merge',
 			SCALAR_CACHE => 'FAULT',
 			LIST_CACHE => ['HASH' => \%lookup_svn_merge_cache],
 		;
 
-		tie my %check_cherry_pick_cache =>
-			'Memoize::Storable',"$cache_path/check_cherry_pick.db", 'nstore';
+		tie my %check_cherry_pick_cache => 'Memoize::Storable',
+		    "$cache_path/check_cherry_pick.db", 'nstore';
 		memoize 'check_cherry_pick',
 			SCALAR_CACHE => 'FAULT',
 			LIST_CACHE => ['HASH' => \%check_cherry_pick_cache],
 		;
 
-		tie my %has_no_changes_cache =>
-			'Memoize::Storable',"$cache_path/has_no_changes.db", 'nstore';
+		tie my %has_no_changes_cache => 'Memoize::Storable',
+		    "$cache_path/has_no_changes.db", 'nstore';
 		memoize 'has_no_changes',
 			SCALAR_CACHE => ['HASH' => \%has_no_changes_cache],
 			LIST_CACHE => 'FAULT',
-- 
Eric Wong
Previous: Andrew MyrickNext: Andrew Myrick
Message 2 of 4 in “git-svn: persistent memoization”
  1. git-svn: persistent memoizationAndrew Myrick, Jan 30, 2010
  2. Eric WongFeb 1, 2010
  3. Andrew MyrickFeb 1, 2010
  4. Eric WongFeb 5, 2010

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.