git.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Jason Gross <jgross@MIT.EDU>
To: git@vger.kernel.org
Cc: Jason Gross <jgross@mit.edu>, Jonathan Nieder <jrnieder@gmail.com>
Subject: Re: [PATCH] git-svn: Destroy the cache when we fail to read it
Date: Mon, 22 Aug 2011 00:04:09 -0400	[thread overview]
Message-ID: <CAKObCao5KwTptvJG_2F8SkM2hA=GrhC2HC0hFrDSDw3_PVb-PA@mail.gmail.com> (raw)
In-Reply-To: <1313979422-21286-1-git-send-email-jgross@mit.edu>

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@mit.edu> 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@gmail.com> with suggestions
> from Steffen Mueller <smueller@cpan.org> (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@mit.edu>
> Cc: Jonathan Nieder <jrnieder@gmail.com>
> ---
>  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
>

  reply	other threads:[~2011-08-22  4:04 UTC|newest]

Thread overview: 26+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2011-08-22  2:17 [PATCH] git-svn: Destroy the cache when we fail to read it Jason Gross
2011-08-22  4:04 ` Jason Gross [this message]
2011-08-22  4:10 ` [PATCH] Add tests for handling corrupted caches Jason Gross
2011-08-23  2:27 ` [PATCH] git-svn: Destroy the cache when we fail to read it Jonathan Nieder
2011-08-23  2:36   ` Jonathan Nieder
2011-08-23  5:51   ` Jason Gross
2011-08-23  8:15 ` Eric Wong
2011-08-23 17:05   ` Junio C Hamano
2011-08-23 19:58     ` Eric Wong
2012-05-27 19:25     ` [RFC/PATCH] git-svn: use YAML format for mergeinfo cache when possible Jonathan Nieder
2012-05-27 19:48       ` [RFC/PATCH 2/1] fixup! " Jonathan Nieder
2012-05-27 20:14       ` [RFC/PATCH] " Eric Wong
2012-05-28  0:39         ` Jonathan Nieder
2012-05-28  6:57           ` [RFC/PATCH 0/2] git-svn: give SVN::Git::Fetcher its own file Jonathan Nieder
2012-05-28  7:00             ` [PATCH 1/2] git-svn: rename SVN::Git::* packages to Git::SVN::* Jonathan Nieder
2012-05-28  7:03             ` [PATCH 2/2] git-svn: make Git::SVN::Fetcher a separate file Jonathan Nieder
2012-05-29  0:25           ` [RFC/PATCH] git-svn: use YAML format for mergeinfo cache when possible Eric Wong
2012-05-29 20:48             ` Junio C Hamano
2012-06-09 22:20         ` [PATCH v2 0/3] " Jonathan Nieder
2012-06-09 22:25           ` [PATCH 1/3] git-svn: make Git::SVN::Editor a separate file Jonathan Nieder
2012-06-09 22:28           ` [PATCH 2/3] git-svn: make Git::SVN::RA " Jonathan Nieder
2012-06-09 22:35           ` [PATCH 3/3] git-svn: use YAML format for mergeinfo cache when possible Jonathan Nieder
2012-06-13  1:34             ` Jonathan Nieder
2012-06-10  9:00           ` [PATCH v2 0/3] " Eric Wong
2012-06-10 10:04             ` Jonathan Nieder
2012-06-11 15:06               ` Junio C Hamano

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to='CAKObCao5KwTptvJG_2F8SkM2hA=GrhC2HC0hFrDSDw3_PVb-PA@mail.gmail.com' \
    --to=jgross@mit.edu \
    --cc=git@vger.kernel.org \
    --cc=jrnieder@gmail.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).