diff options
-rw-r--r-- | Documentation/RelNotes-1.5.1.1.txt | 4 | ||||
-rw-r--r-- | Documentation/git-shortlog.txt | 4 | ||||
-rw-r--r-- | builtin-apply.c | 3 | ||||
-rwxr-xr-x | git-svn.perl | 2 | ||||
-rwxr-xr-x | t/t4121-apply-diffs.sh | 33 |
5 files changed, 43 insertions, 3 deletions
diff --git a/Documentation/RelNotes-1.5.1.1.txt b/Documentation/RelNotes-1.5.1.1.txt index 3054b5a3f0..91471213bd 100644 --- a/Documentation/RelNotes-1.5.1.1.txt +++ b/Documentation/RelNotes-1.5.1.1.txt @@ -59,3 +59,7 @@ Fixes since v1.5.1 - git-svn dcommit and rebase was confused by patches that were merged from another branch that is managed by git-svn. + + - git-svn used to get confused when globbing remote branch/tag + spec (e.g. "branches = proj/branches/*:refs/remotes/origin/*") + is used and there was a plain file that matched the glob. diff --git a/Documentation/git-shortlog.txt b/Documentation/git-shortlog.txt index b0df92e819..1c8c55ef6e 100644 --- a/Documentation/git-shortlog.txt +++ b/Documentation/git-shortlog.txt @@ -7,6 +7,7 @@ git-shortlog - Summarize 'git log' output SYNOPSIS -------- +[verse] git-log --pretty=short | 'git-shortlog' [-h] [-n] [-s] git-shortlog [-n|--number] [-s|--summary] [<committish>...] @@ -33,7 +34,8 @@ OPTIONS FILES ----- -'.mailmap':: + +.mailmap:: If this file exists, it will be used for mapping author email addresses to a real author name. One mapping per line, first the author name followed by the email address enclosed by diff --git a/builtin-apply.c b/builtin-apply.c index fd92ef7174..94311e7af4 100644 --- a/builtin-apply.c +++ b/builtin-apply.c @@ -2416,8 +2416,7 @@ static void create_one_file(char *path, unsigned mode, const char *buf, unsigned * used to be. */ struct stat st; - errno = 0; - if (!lstat(path, &st) && S_ISDIR(st.st_mode) && !rmdir(path)) + if (!lstat(path, &st) && (!S_ISDIR(st.st_mode) || !rmdir(path))) errno = EEXIST; } diff --git a/git-svn.perl b/git-svn.perl index 4d3c453bf2..efc4c88a4e 100755 --- a/git-svn.perl +++ b/git-svn.perl @@ -3162,6 +3162,8 @@ sub match_globs { my $p = $1; my $pathname = $g->{path}->full_path($p); next if $exists->{$pathname}; + next if ($self->check_path($pathname, $r) != + $SVN::Node::dir); $exists->{$pathname} = Git::SVN->init( $self->{url}, $pathname, undef, $g->{ref}->full_path($p), 1); diff --git a/t/t4121-apply-diffs.sh b/t/t4121-apply-diffs.sh new file mode 100755 index 0000000000..2b2f1eda21 --- /dev/null +++ b/t/t4121-apply-diffs.sh @@ -0,0 +1,33 @@ +#!/bin/sh + +test_description='git-apply for contextually independent diffs' +. ./test-lib.sh + +echo '1 +2 +3 +4 +5 +6 +7 +8' >file + +test_expect_success 'setup' \ + 'git add file && + git commit -q -m 1 && + git checkout -b test && + mv file file.tmp && + echo 0 >file && + cat file.tmp >>file && + rm file.tmp && + git commit -a -q -m 2 && + echo 9 >>file && + git commit -a -q -m 3 && + git checkout master' + +test_expect_success \ + 'check if contextually independent diffs for the same file apply' \ + '( git diff test~2 test~1; git diff test~1 test~0 )| git apply' + +test_done + |