git-svn: fix log with single revision against a non-HEAD branch
Running git-svn log <ref> -r<rev> against a <ref> other than the current HEAD did not work if the <rev> was exclusive to the other branch. Signed-off-by: Eric Wong <normalperson@yhbt.net> Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:

committed by
Junio C Hamano

parent
1467b5fec3
commit
6ed77266c6
22
git-svn.perl
22
git-svn.perl
@ -3501,11 +3501,17 @@ sub log_use_color {
|
|||||||
sub git_svn_log_cmd {
|
sub git_svn_log_cmd {
|
||||||
my ($r_min, $r_max, @args) = @_;
|
my ($r_min, $r_max, @args) = @_;
|
||||||
my $head = 'HEAD';
|
my $head = 'HEAD';
|
||||||
|
my (@files, @log_opts);
|
||||||
foreach my $x (@args) {
|
foreach my $x (@args) {
|
||||||
last if $x eq '--';
|
if ($x eq '--' || @files) {
|
||||||
next unless ::verify_ref("$x^0");
|
push @files, $x;
|
||||||
|
} else {
|
||||||
|
if (::verify_ref("$x^0")) {
|
||||||
$head = $x;
|
$head = $x;
|
||||||
last;
|
} else {
|
||||||
|
push @log_opts, $x;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
my ($url, $rev, $uuid, $gs) = ::working_head_info($head);
|
my ($url, $rev, $uuid, $gs) = ::working_head_info($head);
|
||||||
@ -3515,13 +3521,13 @@ sub git_svn_log_cmd {
|
|||||||
push @cmd, '-r' unless $non_recursive;
|
push @cmd, '-r' unless $non_recursive;
|
||||||
push @cmd, qw/--raw --name-status/ if $verbose;
|
push @cmd, qw/--raw --name-status/ if $verbose;
|
||||||
push @cmd, '--color' if log_use_color();
|
push @cmd, '--color' if log_use_color();
|
||||||
return @cmd unless defined $r_max;
|
push @cmd, @log_opts;
|
||||||
if ($r_max == $r_min) {
|
if (defined $r_max && $r_max == $r_min) {
|
||||||
push @cmd, '--max-count=1';
|
push @cmd, '--max-count=1';
|
||||||
if (my $c = $gs->rev_db_get($r_max)) {
|
if (my $c = $gs->rev_db_get($r_max)) {
|
||||||
push @cmd, $c;
|
push @cmd, $c;
|
||||||
}
|
}
|
||||||
} else {
|
} elsif (defined $r_max) {
|
||||||
my ($c_min, $c_max);
|
my ($c_min, $c_max);
|
||||||
$c_max = $gs->rev_db_get($r_max);
|
$c_max = $gs->rev_db_get($r_max);
|
||||||
$c_min = $gs->rev_db_get($r_min);
|
$c_min = $gs->rev_db_get($r_min);
|
||||||
@ -3537,7 +3543,7 @@ sub git_svn_log_cmd {
|
|||||||
push @cmd, $c_min;
|
push @cmd, $c_min;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return @cmd;
|
return (@cmd, @files);
|
||||||
}
|
}
|
||||||
|
|
||||||
# adapted from pager.c
|
# adapted from pager.c
|
||||||
@ -3702,7 +3708,7 @@ sub cmd_show_log {
|
|||||||
}
|
}
|
||||||
|
|
||||||
config_pager();
|
config_pager();
|
||||||
@args = (git_svn_log_cmd($r_min, $r_max, @args), @args);
|
@args = git_svn_log_cmd($r_min, $r_max, @args);
|
||||||
my $log = command_output_pipe(@args);
|
my $log = command_output_pipe(@args);
|
||||||
run_pager();
|
run_pager();
|
||||||
my (@k, $c, $d, $stat);
|
my (@k, $c, $d, $stat);
|
||||||
|
48
t/t9116-git-svn-log.sh
Executable file
48
t/t9116-git-svn-log.sh
Executable file
@ -0,0 +1,48 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
#
|
||||||
|
# Copyright (c) 2007 Eric Wong
|
||||||
|
#
|
||||||
|
|
||||||
|
test_description='git-svn log tests'
|
||||||
|
. ./lib-git-svn.sh
|
||||||
|
|
||||||
|
test_expect_success 'setup repository and import' "
|
||||||
|
mkdir import &&
|
||||||
|
cd import &&
|
||||||
|
for i in trunk branches/a branches/b \
|
||||||
|
tags/0.1 tags/0.2 tags/0.3; do
|
||||||
|
mkdir -p \$i && \
|
||||||
|
echo hello >> \$i/README || exit 1
|
||||||
|
done && \
|
||||||
|
svn import -m test . $svnrepo
|
||||||
|
cd .. &&
|
||||||
|
git-svn init $svnrepo -T trunk -b branches -t tags &&
|
||||||
|
git-svn fetch &&
|
||||||
|
git reset --hard trunk &&
|
||||||
|
echo bye >> README &&
|
||||||
|
git commit -a -m bye &&
|
||||||
|
git svn dcommit &&
|
||||||
|
git reset --hard a &&
|
||||||
|
echo why >> FEEDME &&
|
||||||
|
git update-index --add FEEDME &&
|
||||||
|
git commit -m feedme &&
|
||||||
|
git svn dcommit &&
|
||||||
|
git reset --hard trunk &&
|
||||||
|
echo aye >> README &&
|
||||||
|
git commit -a -m aye &&
|
||||||
|
git svn dcommit
|
||||||
|
"
|
||||||
|
|
||||||
|
test_expect_success 'run log' "
|
||||||
|
git reset --hard a &&
|
||||||
|
git svn log -r2 trunk | grep ^r2 &&
|
||||||
|
git svn log -r4 trunk | grep ^r4 &&
|
||||||
|
git svn log -r3 | grep ^r3
|
||||||
|
"
|
||||||
|
|
||||||
|
test_expect_success 'run log against a from trunk' "
|
||||||
|
git reset --hard trunk &&
|
||||||
|
git svn log -r3 a | grep ^r3
|
||||||
|
"
|
||||||
|
|
||||||
|
test_done
|
Reference in New Issue
Block a user