Code

git-svn: remember to check for clean indices on globbed refs, too
authorEric Wong <normalperson@yhbt.net>
Thu, 15 Feb 2007 00:29:52 +0000 (16:29 -0800)
committerEric Wong <normalperson@yhbt.net>
Fri, 23 Feb 2007 08:57:12 +0000 (00:57 -0800)
Also, warn about dirty indices and avoid an unncessary
write-tree call if the index is clean.

Signed-off-by: Eric Wong <normalperson@yhbt.net>
git-svn.perl

index 8a80f81add22d6d10be6f59e6f0520be0e2306cf..ace31021e745e36deadc19925bd6957530165a1e 100755 (executable)
@@ -1269,10 +1269,11 @@ sub assert_index_clean {
                my $x = command_oneline('write-tree');
                my ($y) = (command(qw/cat-file commit/, $treeish) =~
                           /^tree ($::sha1)/mo);
-               if ($y ne $x) {
-                       unlink $self->{index} or croak $!;
-                       command_noisy('read-tree', $treeish);
-               }
+               return if $y eq $x;
+
+               warn "Index mismatch: $y != $x\nrereading $treeish\n";
+               unlink $self->{index} or die "unlink $self->{index}: $!\n";
+               command_noisy('read-tree', $treeish);
                $x = command_oneline('write-tree');
                if ($y ne $x) {
                        ::fatal "trees ($treeish) $y != $x\n",
@@ -2755,9 +2756,6 @@ sub gs_fetch_loop_common {
        my $common_max = scalar @$gsv;
 
        foreach my $gs (@$gsv) {
-               if (my $last_commit = $gs->last_commit) {
-                       $gs->assert_index_clean($last_commit);
-               }
                my @tmp = split m#/#, $gs->{path};
                my $p = '';
                foreach (@tmp) {
@@ -2833,6 +2831,9 @@ sub gs_fetch_loop_common {
                                }
                                next unless $gs->match_paths($paths, $r);
                                $gs->{logged_rev_props} = $logged;
+                               if (my $last_commit = $gs->last_commit) {
+                                       $gs->assert_index_clean($last_commit);
+                               }
                                my $log_entry = $gs->do_fetch($paths, $r);
                                if ($log_entry) {
                                        $gs->do_git_commit($log_entry);