From 0c1ec5a1f769021ebe96dfff493c561921dbba52 Mon Sep 17 00:00:00 2001 From: Eric Wong Date: Wed, 18 Apr 2007 00:17:33 -0700 Subject: [PATCH 1/3] git-svn: don't allow globs to match regular files git only tracks the histories of full directories, not that of individual files. Sometimes, SVN users will place[1] a regular file in the directory designated for subdirectories of branches or tags. Thanks to jrockway on #git for pointing this out. [1] mistakenly or otherwise, such as a README Signed-off-by: Eric Wong Signed-off-by: Junio C Hamano --- Documentation/RelNotes-1.5.1.1.txt | 4 ++++ git-svn.perl | 2 ++ 2 files changed, 6 insertions(+) diff --git a/Documentation/RelNotes-1.5.1.1.txt b/Documentation/RelNotes-1.5.1.1.txt index 3054b5a3f..91471213b 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/git-svn.perl b/git-svn.perl index 4d3c453bf..efc4c88a4 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); From 0afa7644f2f3543a033d327468ab97d7581f9d13 Mon Sep 17 00:00:00 2001 From: Alex Riesen Date: Wed, 18 Apr 2007 23:58:56 +0200 Subject: [PATCH 2/3] Fix overwriting of files when applying contextually independent diffs Noticed by applying two diffs of different contexts to the same file. The check for existence of a file was wrong: the test assumed it was a directory and reset the errno (twice: directly and by calling lstat). So if an entry existed and was _not_ a directory no attempt was made to rename into it, because the errno (expected by renaming code) was already reset to 0. This resulted in error: fatal: unable to write file file mode 100644 For Linux, removing "errno = 0" is enough, as lstat wont modify errno if it was successful. The behavior should not be depended upon, though, so modify the "if" as well. The test simulates this situation. Signed-off-by: Alex Riesen Signed-off-by: Junio C Hamano --- builtin-apply.c | 3 +-- t/t4121-apply-diffs.sh | 33 +++++++++++++++++++++++++++++++++ 2 files changed, 34 insertions(+), 2 deletions(-) create mode 100755 t/t4121-apply-diffs.sh diff --git a/builtin-apply.c b/builtin-apply.c index a5d612655..db5272245 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/t/t4121-apply-diffs.sh b/t/t4121-apply-diffs.sh new file mode 100755 index 000000000..2b2f1eda2 --- /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 + From 0ad64fd0b8d073e0c73836858a54f693c9191918 Mon Sep 17 00:00:00 2001 From: Frank Lichtenheld Date: Thu, 19 Apr 2007 00:10:22 +0200 Subject: [PATCH 3/3] git-shortlog: Fix two formatting errors in asciidoc documentation First use [verse] in the SYNOPSIS so that the line break actually shows. Secondly drop the quotes around '.mailmap' since this exposes a bug in our toolchain (didn't bother enough yet to find out wether it is asciidoc's fault or that of the XSL templates) that leads to the dot not getting escaped correctly in the roff output and thereby swallowing the line. Signed-off-by: Frank Lichtenheld Signed-off-by: Junio C Hamano --- Documentation/git-shortlog.txt | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/Documentation/git-shortlog.txt b/Documentation/git-shortlog.txt index b0df92e81..1c8c55ef6 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] [...] @@ -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