зеркало из https://github.com/microsoft/git.git
contrib/git-svn: allow rebuild to work on non-linear remote heads
Because committing back to an SVN repository from different machines can result in different lineages, two different repositories running git-svn can result in different commit SHA1s (but of the same tree). Sometimes trees that are tracked independently are merged together (usually via children), resulting in non-unique git-svn-id: lines in rev-list. Signed-off-by: Eric Wong <normalperson@yhbt.net> Signed-off-by: Junio C Hamano <junkio@cox.net>
This commit is contained in:
Родитель
a3c57c9adb
Коммит
ac74905064
|
@ -850,11 +850,23 @@ sub assert_revision_unknown {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
sub trees_eq {
|
||||||
|
my ($x, $y) = @_;
|
||||||
|
my @x = safe_qx('git-cat-file','commit',$x);
|
||||||
|
my @y = safe_qx('git-cat-file','commit',$y);
|
||||||
|
if (($y[0] ne $x[0]) || $x[0] !~ /^tree $sha1\n$/
|
||||||
|
|| $y[0] !~ /^tree $sha1\n$/) {
|
||||||
|
print STDERR "Trees not equal: $y[0] != $x[0]\n";
|
||||||
|
return 0
|
||||||
|
}
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
sub assert_revision_eq_or_unknown {
|
sub assert_revision_eq_or_unknown {
|
||||||
my ($revno, $commit) = @_;
|
my ($revno, $commit) = @_;
|
||||||
if (-f "$REV_DIR/$revno") {
|
if (-f "$REV_DIR/$revno") {
|
||||||
my $current = file_to_s("$REV_DIR/$revno");
|
my $current = file_to_s("$REV_DIR/$revno");
|
||||||
if ($commit ne $current) {
|
if (($commit ne $current) && !trees_eq($commit, $current)) {
|
||||||
croak "$REV_DIR/$revno already exists!\n",
|
croak "$REV_DIR/$revno already exists!\n",
|
||||||
"current: $current\nexpected: $commit\n";
|
"current: $current\nexpected: $commit\n";
|
||||||
}
|
}
|
||||||
|
|
Загрузка…
Ссылка в новой задаче