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

Re: [PATCH] git svn: reset invalidates the memoized mergeinfo caches

From
EWEric Wong <normalperson@yhbt.net>
Date
Aug 7, 2012, 20:45 UTC
Message-ID
<20120807204510.GA10453@dcvr.yhbt.net>
In-Reply-To
<20120807200207.GA10899@m62s10.vlinux.de>
Peter Baumann <waste.manager@gmx.de> wrote:
Show 7 quoted lines
> Therefore the easiest solution to clear the cache is to delete the files
> on disk in 'git svn reset'. Normally, deleting the files behind the back
> of the memoization module would be problematic, because the in-memory
> representation would still exist and contain wrong data. Fortunately, the
> memoization is active in memory only for a small portion of the code.
> Invalidating the cache by deleting the files on disk if it isn't active
> should be safe.
Thanks for the patch and explanation.  A few comments below:
Show 11 quoted lines
> +	sub clear_memoized_mergeinfo_caches {
> +		die "Only call this method in non-memoized context" if ($memoized);
> +
> +		my $cache_path = "$ENV{GIT_DIR}/svn/.caches/";
> +		return unless -d $cache_path;
> +
> +		for my $cache_file (("$cache_path/lookup_svn_merge",
> +				     "$cache_path/check_cherry_pick",
> +				     "$cache_path/has_no_changes")) {
> +			for my $suffix (qw(yaml db)) {
> +				unlink("$cache_file.$suffix");
Need to check for unlink() errors (and ignore ENOENT).
Show 9 quoted lines
> @@ -2126,8 +2142,13 @@ sub rev_map_set {
>  
>  	sysopen(my $fh, $db_lock, O_RDWR | O_CREAT)
>  	     or croak "Couldn't open $db_lock: $!\n";
> -	$update_ref eq 'reset' ? _rev_map_reset($fh, $rev, $commit) :
> -				 _rev_map_set($fh, $rev, $commit);
> +	if ($update_ref eq 'reset') {
> +		_rev_map_reset($fh, $rev, $commit);
> +		clear_memoized_mergeinfo_caches();

Better to clear_memoized_mergeinfo_caches() before _rev_map_reset() in case unlink() (or anything else) fails when clearing the cache.

Show 8 quoted lines
> +test_expect_success 'initialize source svn repo' '
> +	svn_cmd mkdir -m "create trunk" "$svnrepo"/trunk &&
> +	svn_cmd mkdir -m "create branches" "$svnrepo/branches" &&
> +	svn_cmd co "$svnrepo"/trunk "$SVN_TREE" &&
> +	(
> +		cd "$SVN_TREE" &&
> +		touch foo &&
> +		svn add foo &&
svn_cmd here, too.
Show 14 quoted lines
> +		svn commit -m "a" &&
> +		svn cp -m branch "$svnrepo"/trunk "$svnrepo"/branches/branch1 &&
> +		svn switch "$svnrepo"/branches/branch1 &&
> +		touch bar &&
> +		svn add bar &&
> +		svn commit -m b &&
> +		svn switch "$svnrepo"/trunk &&
> +		touch baz &&
> +		svn add baz &&
> +		svn commit -m c &&
> +		svn up &&
> +		svn merge "$svnrepo"/branches/branch1 &&
> +		svn commit -m "m"
> +	) &&
Previous: Peter BaumannNext: Peter Baumann
Message 2 of 9 in “git svn: reset invalidates the memoized mergeinfo caches”
  1. git svn: reset invalidates the memoized mergeinfo cachesPeter Baumann, Aug 7, 2012
  2. Eric WongAug 7, 2012
  3. Peter BaumannAug 8, 2012
  4. Eric WongAug 8, 2012
  5. git svn: reset invalidates the memoized mergeinfo cachesPeter Baumann, Aug 9, 2012
  6. Steven WalterAug 9, 2012
  7. Eric WongAug 10, 2012
  8. Junio C HamanoAug 10, 2012
  9. Eric WongAug 10, 2012

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.