From 6ed77266c6e85130920ef30cd290d36ad4464695 Mon Sep 17 00:00:00 2001 From: Eric Wong Date: Wed, 15 Aug 2007 09:55:18 -0700 Subject: git-svn: fix log with single revision against a non-HEAD branch Running git-svn log -r against a other than the current HEAD did not work if the was exclusive to the other branch. Signed-off-by: Eric Wong Signed-off-by: Junio C Hamano diff --git a/git-svn.perl b/git-svn.perl index ee7ef69..d162114 100755 --- a/git-svn.perl +++ b/git-svn.perl @@ -3501,11 +3501,17 @@ sub log_use_color { sub git_svn_log_cmd { my ($r_min, $r_max, @args) = @_; my $head = 'HEAD'; + my (@files, @log_opts); foreach my $x (@args) { - last if $x eq '--'; - next unless ::verify_ref("$x^0"); - $head = $x; - last; + if ($x eq '--' || @files) { + push @files, $x; + } else { + if (::verify_ref("$x^0")) { + $head = $x; + } else { + push @log_opts, $x; + } + } } 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, qw/--raw --name-status/ if $verbose; push @cmd, '--color' if log_use_color(); - return @cmd unless defined $r_max; - if ($r_max == $r_min) { + push @cmd, @log_opts; + if (defined $r_max && $r_max == $r_min) { push @cmd, '--max-count=1'; if (my $c = $gs->rev_db_get($r_max)) { push @cmd, $c; } - } else { + } elsif (defined $r_max) { my ($c_min, $c_max); $c_max = $gs->rev_db_get($r_max); $c_min = $gs->rev_db_get($r_min); @@ -3537,7 +3543,7 @@ sub git_svn_log_cmd { push @cmd, $c_min; } } - return @cmd; + return (@cmd, @files); } # adapted from pager.c @@ -3702,7 +3708,7 @@ sub cmd_show_log { } 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); run_pager(); my (@k, $c, $d, $stat); diff --git a/t/t9116-git-svn-log.sh b/t/t9116-git-svn-log.sh new file mode 100755 index 0000000..0d4e6b3 --- /dev/null +++ b/t/t9116-git-svn-log.sh @@ -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 -- cgit v0.10.2-6-g49f6