Re: [PATCH] git-svn: Destroy the cache when we fail to read it

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Oops, the bug numbers I gave were debian bug ids, not git bug ids.
The "This fixes bug ..." sentence should either be removed from the
commit message before this commit is merged, or the numbers should be
replaced with the appropriate git bug numbers.

-Jason

On Sun, Aug 21, 2011 at 10:17 PM, Jason Gross <jgross@xxxxxxx> wrote:
>
> Previously, we would fail fatally when trying to fetch changes with
> mergeinfo on a 32 bit machine, when the repository previously had
> fetched changes with mergeinfo on a 64 bit machine.
>
> This fixes bug 618875 (which is also 587650, 635097).  Much of the code
> was written by Jonathan Nieder <jrnieder@xxxxxxxxx> with suggestions
> from Steffen Mueller <smueller@xxxxxxxx> (see
> http://lists.debian.org/debian-perl/2011/05/msg00023.html and
> http://lists.debian.org/debian-perl/2011/05/msg00026.html).
>
> Signed-off-by: Jason Gross <jgross@xxxxxxx>
> Cc: Jonathan Nieder <jrnieder@xxxxxxxxx>
> ---
>  git-svn.perl |   59 +++++++++++++++++++++++++++++++++++----------------------
>  1 files changed, 36 insertions(+), 23 deletions(-)
>
> diff --git a/git-svn.perl b/git-svn.perl
> index 89f83fd..78ccdc8 100755
> --- a/git-svn.perl
> +++ b/git-svn.perl
> @@ -1680,7 +1680,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/;
> +use File::Path qw/mkpath rmtree/;
>  use File::Copy qw/copy/;
>  use IPC::Open3;
>  use Memoize;  # core since 5.8.0, Jul 2002
> @@ -3198,28 +3198,41 @@ sub has_no_changes {
>                $memoized = 1;
>
>                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';
> -               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';
> -               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';
> -               memoize 'has_no_changes',
> -                       SCALAR_CACHE => ['HASH' => \%has_no_changes_cache],
> -                       LIST_CACHE => 'FAULT',
> -               ;
> +               my $do_memoization = sub {
> +                       mkpath([$cache_path]) unless -d $cache_path;
> +
> +                       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';
> +                       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';
> +                       memoize 'has_no_changes',
> +                               SCALAR_CACHE => ['HASH' => \%has_no_changes_cache],
> +                               LIST_CACHE => 'FAULT',
> +                       ;
> +               };
> +
> +               if (not eval {
> +                       $do_memoization->();
> +                       1;
> +               }) {
> +                       my $err = $@ || "Zombie error"; # "Zombie error" to catch clobbered $@ in buggy destructors
> +                       die $err unless -d $cache_path;
> +                       print STDERR "Discarding cache and trying again ($@)\n";
> +                       rmtree([$cache_path]);
> +                       $do_memoization->();
> +               }
>        }
>
>        sub unmemoize_svn_mergeinfo_functions {
> --
> 1.7.2.3
>
--
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


[Index of Archives]     [Linux Kernel Development]     [Gcc Help]     [IETF Annouce]     [DCCP]     [Netdev]     [Networking]     [Security]     [V4L]     [Bugtraq]     [Yosemite]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Linux SCSI]     [Fedora Users]