Peter Baumann <waste.manager@xxxxxx> wrote: > 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: > + 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). > @@ -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. > +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. > + 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" > + ) && -- 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