From 451e593181c554b06f1ce292b4233d396a355753 Mon Sep 17 00:00:00 2001 From: Mike Ralphson Date: Fri, 7 Sep 2007 17:43:37 +0100 Subject: Documentation / grammer nit If we're counting, a smaller number is 'fewer' not 'less' Signed-off-by: Mike Ralphson Signed-off-by: Junio C Hamano diff --git a/Documentation/git-clone.txt b/Documentation/git-clone.txt index 227f092..253f4f0 100644 --- a/Documentation/git-clone.txt +++ b/Documentation/git-clone.txt @@ -68,7 +68,7 @@ OPTIONS automatically setup .git/objects/info/alternates to obtain objects from the reference repository. Using an already existing repository as an alternate will - require less objects to be copied from the repository + require fewer objects to be copied from the repository being cloned, reducing network and local storage costs. --quiet:: -- cgit v0.10.2-6-g49f6 From ee834cf0c7de68557bc5c30552fce3e55f52e109 Mon Sep 17 00:00:00 2001 From: Michael Smith Date: Fri, 7 Sep 2007 17:35:07 -0400 Subject: (cvs|svn)import: Ask git-tag to overwrite old tags. If the tag was moved in CVS or SVN history, it will be moved in the imported history as well. Tag history is not tracked. Signed-off-by: Junio C Hamano diff --git a/git-cvsimport.perl b/git-cvsimport.perl index ba23eb8..2954fb8 100755 --- a/git-cvsimport.perl +++ b/git-cvsimport.perl @@ -779,7 +779,7 @@ sub commit { $xtag =~ tr/_/\./ if ( $opt_u ); $xtag =~ s/[\/]/$opt_s/g; - system('git-tag', $xtag, $cid) == 0 + system('git-tag', '-f', $xtag, $cid) == 0 or die "Cannot create tag $xtag: $!\n"; print "Created tag '$xtag' on '$branch'\n" if $opt_v; diff --git a/git-svnimport.perl b/git-svnimport.perl index 8c17fb5..d3ad5b9 100755 --- a/git-svnimport.perl +++ b/git-svnimport.perl @@ -873,7 +873,7 @@ sub commit { $dest =~ tr/_/\./ if $opt_u; - system('git-tag', $dest, $cid) == 0 + system('git-tag', '-f', $dest, $cid) == 0 or die "Cannot create tag $dest: $!\n"; print "Created tag '$dest' on '$branch'\n" if $opt_v; -- cgit v0.10.2-6-g49f6 From a51cdb0c0420ee3bef26bbd1a9aa75e1d464e5b7 Mon Sep 17 00:00:00 2001 From: Eric Wong Date: Fri, 7 Sep 2007 04:00:40 -0700 Subject: git-svn: fix "Malformed network data" with svn:// servers We have a workaround for the reparent function not working correctly on the SVN native protocol servers. This workaround opens a new connection (SVN::Ra object) to the new URL/directory. Since libsvn appears limited to only supporting one connection at a time, this workaround invalidates the Git::SVN::Ra object that is $self inside gs_fetch_loop_common(). So we need to restart that connection once all the fetching is done for each loop iteration to be able to run get_log() successfully. Signed-off-by: Eric Wong Signed-off-by: Junio C Hamano diff --git a/git-svn.perl b/git-svn.perl index d3c8cd0..fbd4691 100755 --- a/git-svn.perl +++ b/git-svn.perl @@ -3013,7 +3013,7 @@ package Git::SVN::Ra; use vars qw/@ISA $config_dir $_log_window_size/; use strict; use warnings; -my ($can_do_switch, %ignored_err, $RA); +my ($ra_invalid, $can_do_switch, %ignored_err, $RA); BEGIN { # enforce temporary pool usage for some simple functions @@ -3174,7 +3174,11 @@ sub gs_do_switch { $self->{url} = $full_url; $reparented = 1; } else { + $_[0] = undef; + $self = undef; + $RA = undef; $ra = Git::SVN::Ra->new($full_url); + $ra_invalid = 1; } } $ra ||= $self; @@ -3234,6 +3238,7 @@ sub gs_fetch_loop_common { my $inc = $_log_window_size; my ($min, $max) = ($base, $head < $base + $inc ? $head : $base + $inc); my $longest_path = longest_common_path($gsv, $globs); + my $ra_url = $self->{url}; while (1) { my %revs; my $err; @@ -3295,6 +3300,13 @@ sub gs_fetch_loop_common { "$g->{t}-maxRev"; Git::SVN::tmp_config($k, $r); } + if ($ra_invalid) { + $_[0] = undef; + $self = undef; + $RA = undef; + $self = Git::SVN::Ra->new($ra_url); + $ra_invalid = undef; + } } # pre-fill the .rev_db since it'll eventually get filled in # with '0' x40 if something new gets committed -- cgit v0.10.2-6-g49f6 From 5701115aa7cfe7edd57c2483085456a37e27a5ba Mon Sep 17 00:00:00 2001 From: Sven Verdoolaege Date: Sat, 8 Sep 2007 12:30:22 +0200 Subject: git-diff: don't squelch the new SHA1 in submodule diffs The code to squelch empty diffs introduced by commit fb13227e089f22dc31a3b1624559153821056848 would inadvertently populate filespec "two" of a submodule change using the uninitialized (null) SHA1, thereby replacing the submodule SHA1 by 0{40} in the output. This change teaches diffcore_skip_stat_unmatch to handle submodule changes correctly. Signed-off-by: Sven Verdoolaege Signed-off-by: Junio C Hamano diff --git a/diff.c b/diff.c index 0d30d05..1aca5df 100644 --- a/diff.c +++ b/diff.c @@ -3144,6 +3144,22 @@ static void diffcore_apply_filter(const char *filter) *q = outq; } +/* Check whether two filespecs with the same mode and size are identical */ +static int diff_filespec_is_identical(struct diff_filespec *one, + struct diff_filespec *two) +{ + if (S_ISGITLINK(one->mode)) { + diff_fill_sha1_info(one); + diff_fill_sha1_info(two); + return !hashcmp(one->sha1, two->sha1); + } + if (diff_populate_filespec(one, 0)) + return 0; + if (diff_populate_filespec(two, 0)) + return 0; + return !memcmp(one->data, two->data, one->size); +} + static void diffcore_skip_stat_unmatch(struct diff_options *diffopt) { int i; @@ -3175,10 +3191,7 @@ static void diffcore_skip_stat_unmatch(struct diff_options *diffopt) diff_populate_filespec(p->one, 1) || diff_populate_filespec(p->two, 1) || (p->one->size != p->two->size) || - - diff_populate_filespec(p->one, 0) || /* (2) */ - diff_populate_filespec(p->two, 0) || - memcmp(p->one->data, p->two->data, p->one->size)) + !diff_filespec_is_identical(p->one, p->two)) /* (2) */ diff_q(&outq, p); else { /* diff --git a/t/t7400-submodule-basic.sh b/t/t7400-submodule-basic.sh index 9d142ed..4fe3a41 100755 --- a/t/t7400-submodule-basic.sh +++ b/t/t7400-submodule-basic.sh @@ -152,6 +152,10 @@ test_expect_success 'the --cached sha1 should be rev1' ' git-submodule --cached status | grep "^+$rev1" ' +test_expect_success 'git diff should report the SHA1 of the new submodule commit' ' + git-diff | grep "^+Subproject commit $rev2" +' + test_expect_success 'update should checkout rev1' ' git-submodule update && head=$(cd lib && git rev-parse HEAD) && -- cgit v0.10.2-6-g49f6 From 7b02b85a66fee6b357e02f9e70dd0baa0fd24308 Mon Sep 17 00:00:00 2001 From: Eric Wong Date: Sat, 8 Sep 2007 16:33:08 -0700 Subject: git-svn: understand grafts when doing dcommit Use the rev-list --parents functionality to read the parents of the commit. cat-file only shows the raw object with the original parents and doesn't take into account grafts; so we'll rely on rev-list machinery for the smarts here. Signed-off-by: Eric Wong Signed-off-by: Junio C Hamano diff --git a/git-svn.perl b/git-svn.perl index fbd4691..f818160 100755 --- a/git-svn.perl +++ b/git-svn.perl @@ -841,14 +841,9 @@ sub working_head_info { sub read_commit_parents { my ($parents, $c) = @_; - my ($fh, $ctx) = command_output_pipe(qw/cat-file commit/, $c); - while (<$fh>) { - chomp; - last if ''; - /^parent ($sha1)/ or next; - push @{$parents->{$c}}, $1; - } - close $fh; # break the pipe + chomp(my $p = command_oneline(qw/rev-list --parents -1/, $c)); + $p =~ s/^($c)\s*// or die "rev-list --parents -1 $c failed!\n"; + @{$parents->{$c}} = split(/ /, $p); } sub linearize_history { -- cgit v0.10.2-6-g49f6