Merge branch 'maint-1.7.6' into maint

* maint-1.7.6:
  notes_merge_commit(): do not pass temporary buffer to other function
  gitweb: Fix links to lines in blobs when javascript-actions are enabled
  mergetool: no longer need to save standard input
  mergetool: Use args as pathspec to unmerged files
  t9159-*.sh: skip for mergeinfo test for svn <= 1.4
  date.c: Support iso8601 timezone formats
  remote: only update remote-tracking branch if updating refspec
  remote rename: warn when refspec was not updated
  remote: "rename o foo" should not rename ref "origin/bar"
  remote: write correct fetch spec when renaming remote 'remote'
maint
Junio C Hamano 2011-10-26 16:13:27 -07:00
commit f0911b996c
10 changed files with 167 additions and 94 deletions

View File

@ -17,9 +17,10 @@ Use `git mergetool` to run one of several merge utilities to resolve
merge conflicts. It is typically run after 'git merge'. merge conflicts. It is typically run after 'git merge'.


If one or more <file> parameters are given, the merge tool program will If one or more <file> parameters are given, the merge tool program will
be run to resolve differences on each file. If no <file> names are be run to resolve differences on each file (skipping those without
specified, 'git mergetool' will run the merge tool program on every file conflicts). Specifying a directory will include all unresolved files in
with merge conflicts. that path. If no <file> names are specified, 'git mergetool' will run
the merge tool program on every file with merge conflicts.


OPTIONS OPTIONS
------- -------

View File

@ -570,7 +570,7 @@ static int read_remote_branches(const char *refname,
unsigned char orig_sha1[20]; unsigned char orig_sha1[20];
const char *symref; const char *symref;


strbuf_addf(&buf, "refs/remotes/%s", rename->old); strbuf_addf(&buf, "refs/remotes/%s/", rename->old);
if (!prefixcmp(refname, buf.buf)) { if (!prefixcmp(refname, buf.buf)) {
item = string_list_append(rename->remote_branches, xstrdup(refname)); item = string_list_append(rename->remote_branches, xstrdup(refname));
symref = resolve_ref(refname, orig_sha1, 1, &flag); symref = resolve_ref(refname, orig_sha1, 1, &flag);
@ -621,10 +621,11 @@ static int mv(int argc, const char **argv)
OPT_END() OPT_END()
}; };
struct remote *oldremote, *newremote; struct remote *oldremote, *newremote;
struct strbuf buf = STRBUF_INIT, buf2 = STRBUF_INIT, buf3 = STRBUF_INIT; struct strbuf buf = STRBUF_INIT, buf2 = STRBUF_INIT, buf3 = STRBUF_INIT,
old_remote_context = STRBUF_INIT;
struct string_list remote_branches = STRING_LIST_INIT_NODUP; struct string_list remote_branches = STRING_LIST_INIT_NODUP;
struct rename_info rename; struct rename_info rename;
int i; int i, refspec_updated = 0;


if (argc != 3) if (argc != 3)
usage_with_options(builtin_remote_rename_usage, options); usage_with_options(builtin_remote_rename_usage, options);
@ -659,15 +660,25 @@ static int mv(int argc, const char **argv)
strbuf_addf(&buf, "remote.%s.fetch", rename.new); strbuf_addf(&buf, "remote.%s.fetch", rename.new);
if (git_config_set_multivar(buf.buf, NULL, NULL, 1)) if (git_config_set_multivar(buf.buf, NULL, NULL, 1))
return error("Could not remove config section '%s'", buf.buf); return error("Could not remove config section '%s'", buf.buf);
strbuf_addf(&old_remote_context, ":refs/remotes/%s/", rename.old);
for (i = 0; i < oldremote->fetch_refspec_nr; i++) { for (i = 0; i < oldremote->fetch_refspec_nr; i++) {
char *ptr; char *ptr;


strbuf_reset(&buf2); strbuf_reset(&buf2);
strbuf_addstr(&buf2, oldremote->fetch_refspec[i]); strbuf_addstr(&buf2, oldremote->fetch_refspec[i]);
ptr = strstr(buf2.buf, rename.old); ptr = strstr(buf2.buf, old_remote_context.buf);
if (ptr) if (ptr) {
strbuf_splice(&buf2, ptr-buf2.buf, strlen(rename.old), refspec_updated = 1;
rename.new, strlen(rename.new)); strbuf_splice(&buf2,
ptr-buf2.buf + strlen(":refs/remotes/"),
strlen(rename.old), rename.new,
strlen(rename.new));
} else
warning("Not updating non-default fetch respec\n"
"\t%s\n"
"\tPlease update the configuration manually if necessary.",
buf2.buf);

if (git_config_set_multivar(buf.buf, buf2.buf, "^$", 0)) if (git_config_set_multivar(buf.buf, buf2.buf, "^$", 0))
return error("Could not append '%s'", buf.buf); return error("Could not append '%s'", buf.buf);
} }
@ -685,6 +696,9 @@ static int mv(int argc, const char **argv)
} }
} }


if (!refspec_updated)
return 0;

/* /*
* First remove symrefs, then rename the rest, finally create * First remove symrefs, then rename the rest, finally create
* the new symrefs. * the new symrefs.

34
date.c
View File

@ -552,23 +552,35 @@ static int match_digit(const char *date, struct tm *tm, int *offset, int *tm_gmt
static int match_tz(const char *date, int *offp) static int match_tz(const char *date, int *offp)
{ {
char *end; char *end;
int offset = strtoul(date+1, &end, 10); int hour = strtoul(date + 1, &end, 10);
int min, hour; int n = end - (date + 1);
int n = end - date - 1; int min = 0;


min = offset % 100; if (n == 4) {
hour = offset / 100; /* hhmm */
min = hour % 100;
hour = hour / 100;
} else if (n != 2) {
min = 99; /* random crap */
} else if (*end == ':') {
/* hh:mm? */
min = strtoul(end + 1, &end, 10);
if (end - (date + 1) != 5)
min = 99; /* random crap */
} /* otherwise we parsed "hh" */


/* /*
* Don't accept any random crap.. At least 3 digits, and * Don't accept any random crap. Even though some places have
* a valid minute. We might want to check that the minutes * offset larger than 12 hours (e.g. Pacific/Kiritimati is at
* are divisible by 30 or something too. * UTC+14), there is something wrong if hour part is much
* larger than that. We might also want to check that the
* minutes are divisible by 15 or something too. (Offset of
* Kathmandu, Nepal is UTC+5:45)
*/ */
if (min < 60 && n > 2) { if (min < 60 && hour < 24) {
offset = hour*60+min; int offset = hour * 60 + min;
if (*date == '-') if (*date == '-')
offset = -offset; offset = -offset;

*offp = offset; *offp = offset;
} }
return end - date; return end - date;

View File

@ -342,64 +342,42 @@ merge_keep_temporaries="$(git config --bool mergetool.keepTemporaries || echo fa


last_status=0 last_status=0
rollup_status=0 rollup_status=0
rerere=false files=

files_to_merge() {
if test "$rerere" = true
then
git rerere remaining
else
git ls-files -u | sed -e 's/^[^ ]* //' | sort -u
fi
}



if test $# -eq 0 ; then if test $# -eq 0 ; then
cd_to_toplevel cd_to_toplevel


if test -e "$GIT_DIR/MERGE_RR" if test -e "$GIT_DIR/MERGE_RR"
then then
rerere=true files=$(git rerere remaining)
else
files=$(git ls-files -u | sed -e 's/^[^ ]* //' | sort -u)
fi fi

files=$(files_to_merge)
if test -z "$files" ; then
echo "No files need merging"
exit 0
fi

# Save original stdin
exec 3<&0

printf "Merging:\n"
printf "$files\n"

files_to_merge |
while IFS= read i
do
if test $last_status -ne 0; then
prompt_after_failed_merge <&3 || exit 1
fi
printf "\n"
merge_file "$i" <&3
last_status=$?
if test $last_status -ne 0; then
rollup_status=1
fi
done
else else
while test $# -gt 0; do files=$(git ls-files -u -- "$@" | sed -e 's/^[^ ]* //' | sort -u)
if test $last_status -ne 0; then
prompt_after_failed_merge || exit 1
fi
printf "\n"
merge_file "$1"
last_status=$?
if test $last_status -ne 0; then
rollup_status=1
fi
shift
done
fi fi


if test -z "$files" ; then
echo "No files need merging"
exit 0
fi

printf "Merging:\n"
printf "$files\n"

IFS='
'
for i in $files
do
if test $last_status -ne 0; then
prompt_after_failed_merge || exit 1
fi
printf "\n"
merge_file "$i"
last_status=$?
if test $last_status -ne 0; then
rollup_status=1
fi
done

exit $rollup_status exit $rollup_status

View File

@ -16,7 +16,7 @@
* and other reasons to not add 'js=1' param at the end of link * and other reasons to not add 'js=1' param at the end of link
* @constant * @constant
*/ */
var jsExceptionsRe = /[;?]js=[01]$/; var jsExceptionsRe = /[;?]js=[01](#.*)?$/;


/** /**
* Add '?js=1' or ';js=1' to the end of every link in the document * Add '?js=1' or ';js=1' to the end of every link in the document
@ -33,9 +33,9 @@ function fixLinks() {
var allLinks = document.getElementsByTagName("a") || document.links; var allLinks = document.getElementsByTagName("a") || document.links;
for (var i = 0, len = allLinks.length; i < len; i++) { for (var i = 0, len = allLinks.length; i < len; i++) {
var link = allLinks[i]; var link = allLinks[i];
if (!jsExceptionsRe.test(link)) { // =~ /[;?]js=[01]$/; if (!jsExceptionsRe.test(link)) {
link.href += link.href = link.href.replace(/(#|$)/,
(link.href.indexOf('?') === -1 ? '?' : ';') + 'js=1'; (link.href.indexOf('?') === -1 ? '?' : ';') + 'js=1$1');
} }
} }
} }

View File

@ -680,7 +680,7 @@ int notes_merge_commit(struct notes_merge_options *o,
* Finally store the new commit object SHA1 into 'result_sha1'. * Finally store the new commit object SHA1 into 'result_sha1'.
*/ */
struct dir_struct dir; struct dir_struct dir;
const char *path = git_path(NOTES_MERGE_WORKTREE "/"); char *path = xstrdup(git_path(NOTES_MERGE_WORKTREE "/"));
int path_len = strlen(path), i; int path_len = strlen(path), i;
const char *msg = strstr(partial_commit->buffer, "\n\n"); const char *msg = strstr(partial_commit->buffer, "\n\n");


@ -720,6 +720,7 @@ int notes_merge_commit(struct notes_merge_options *o,
result_sha1); result_sha1);
OUTPUT(o, 4, "Finalized notes merge commit: %s", OUTPUT(o, 4, "Finalized notes merge commit: %s",
sha1_to_hex(result_sha1)); sha1_to_hex(result_sha1));
free(path);
return 0; return 0;
} }



View File

@ -40,6 +40,12 @@ check_parse 2008-02 bad
check_parse 2008-02-14 bad check_parse 2008-02-14 bad
check_parse '2008-02-14 20:30:45' '2008-02-14 20:30:45 +0000' check_parse '2008-02-14 20:30:45' '2008-02-14 20:30:45 +0000'
check_parse '2008-02-14 20:30:45 -0500' '2008-02-14 20:30:45 -0500' check_parse '2008-02-14 20:30:45 -0500' '2008-02-14 20:30:45 -0500'
check_parse '2008-02-14 20:30:45 -0015' '2008-02-14 20:30:45 -0015'
check_parse '2008-02-14 20:30:45 -5' '2008-02-14 20:30:45 +0000'
check_parse '2008-02-14 20:30:45 -5:' '2008-02-14 20:30:45 +0000'
check_parse '2008-02-14 20:30:45 -05' '2008-02-14 20:30:45 -0500'
check_parse '2008-02-14 20:30:45 -:30' '2008-02-14 20:30:45 +0000'
check_parse '2008-02-14 20:30:45 -05:00' '2008-02-14 20:30:45 -0500'
check_parse '2008-02-14 20:30:45' '2008-02-14 20:30:45 -0500' EST5 check_parse '2008-02-14 20:30:45' '2008-02-14 20:30:45 -0500' EST5


check_approxidate() { check_approxidate() {

View File

@ -631,6 +631,37 @@ test_expect_success 'rename a remote' '


' '


test_expect_success 'rename does not update a non-default fetch refspec' '

git clone one four.one &&
(cd four.one &&
git config remote.origin.fetch +refs/heads/*:refs/heads/origin/* &&
git remote rename origin upstream &&
test "$(git config remote.upstream.fetch)" = "+refs/heads/*:refs/heads/origin/*" &&
git rev-parse -q origin/master)

'

test_expect_success 'rename a remote with name part of fetch spec' '

git clone one four.two &&
(cd four.two &&
git remote rename origin remote &&
git remote rename remote upstream &&
test "$(git config remote.upstream.fetch)" = "+refs/heads/*:refs/remotes/upstream/*")

'

test_expect_success 'rename a remote with name prefix of other remote' '

git clone one four.three &&
(cd four.three &&
git remote add o git://example.com/repo.git &&
git remote rename o upstream &&
test "$(git rev-parse origin/master)" = "$(git rev-parse master)")

'

cat > remotes_origin << EOF cat > remotes_origin << EOF
URL: $(pwd)/one URL: $(pwd)/one
Push: refs/heads/master:refs/heads/upstream Push: refs/heads/master:refs/heads/upstream

View File

@ -16,6 +16,7 @@ Testing basic merge tool invocation'
test_expect_success 'setup' ' test_expect_success 'setup' '
git config rerere.enabled true && git config rerere.enabled true &&
echo master >file1 && echo master >file1 &&
echo master spaced >"spaced name" &&
echo master file11 >file11 && echo master file11 >file11 &&
echo master file12 >file12 && echo master file12 >file12 &&
echo master file13 >file13 && echo master file13 >file13 &&
@ -30,13 +31,14 @@ test_expect_success 'setup' '
git commit -m "Add foo" git commit -m "Add foo"
) && ) &&
git submodule add git://example.com/submod submod && git submodule add git://example.com/submod submod &&
git add file1 file1[1-4] subdir/file3 .gitmodules submod && git add file1 "spaced name" file1[1-4] subdir/file3 .gitmodules submod &&
git commit -m "add initial versions" && git commit -m "add initial versions" &&


git checkout -b branch1 master && git checkout -b branch1 master &&
git submodule update -N && git submodule update -N &&
echo branch1 change >file1 && echo branch1 change >file1 &&
echo branch1 newfile >file2 && echo branch1 newfile >file2 &&
echo branch1 spaced >"spaced name" &&
echo branch1 change file11 >file11 && echo branch1 change file11 >file11 &&
echo branch1 change file13 >file13 && echo branch1 change file13 >file13 &&
echo branch1 sub >subdir/file3 && echo branch1 sub >subdir/file3 &&
@ -47,7 +49,7 @@ test_expect_success 'setup' '
git commit -m "Add bar on branch1" && git commit -m "Add bar on branch1" &&
git checkout -b submod-branch1 git checkout -b submod-branch1
) && ) &&
git add file1 file11 file13 file2 subdir/file3 submod && git add file1 "spaced name" file11 file13 file2 subdir/file3 submod &&
git rm file12 && git rm file12 &&
git commit -m "branch1 changes" && git commit -m "branch1 changes" &&


@ -55,6 +57,7 @@ test_expect_success 'setup' '
git submodule update -N && git submodule update -N &&
echo master updated >file1 && echo master updated >file1 &&
echo master new >file2 && echo master new >file2 &&
echo master updated spaced >"spaced name" &&
echo master updated file12 >file12 && echo master updated file12 >file12 &&
echo master updated file14 >file14 && echo master updated file14 >file14 &&
echo master new sub >subdir/file3 && echo master new sub >subdir/file3 &&
@ -65,7 +68,7 @@ test_expect_success 'setup' '
git commit -m "Add bar on master" && git commit -m "Add bar on master" &&
git checkout -b submod-master git checkout -b submod-master
) && ) &&
git add file1 file12 file14 file2 subdir/file3 submod && git add file1 "spaced name" file12 file14 file2 subdir/file3 submod &&
git rm file11 && git rm file11 &&
git commit -m "master updates" && git commit -m "master updates" &&


@ -78,8 +81,8 @@ test_expect_success 'custom mergetool' '
git checkout -b test1 branch1 && git checkout -b test1 branch1 &&
git submodule update -N && git submodule update -N &&
test_must_fail git merge master >/dev/null 2>&1 && test_must_fail git merge master >/dev/null 2>&1 &&
( yes "" | git mergetool file1 >/dev/null 2>&1 ) && ( yes "" | git mergetool file1 file1 ) &&
( yes "" | git mergetool file2 >/dev/null 2>&1 ) && ( yes "" | git mergetool file2 "spaced name" >/dev/null 2>&1 ) &&
( yes "" | git mergetool subdir/file3 >/dev/null 2>&1 ) && ( yes "" | git mergetool subdir/file3 >/dev/null 2>&1 ) &&
( yes "d" | git mergetool file11 >/dev/null 2>&1 ) && ( yes "d" | git mergetool file11 >/dev/null 2>&1 ) &&
( yes "d" | git mergetool file12 >/dev/null 2>&1 ) && ( yes "d" | git mergetool file12 >/dev/null 2>&1 ) &&
@ -97,6 +100,7 @@ test_expect_success 'mergetool crlf' '
test_must_fail git merge master >/dev/null 2>&1 && test_must_fail git merge master >/dev/null 2>&1 &&
( yes "" | git mergetool file1 >/dev/null 2>&1 ) && ( yes "" | git mergetool file1 >/dev/null 2>&1 ) &&
( yes "" | git mergetool file2 >/dev/null 2>&1 ) && ( yes "" | git mergetool file2 >/dev/null 2>&1 ) &&
( yes "" | git mergetool "spaced name" >/dev/null 2>&1 ) &&
( yes "" | git mergetool subdir/file3 >/dev/null 2>&1 ) && ( yes "" | git mergetool subdir/file3 >/dev/null 2>&1 ) &&
( yes "d" | git mergetool file11 >/dev/null 2>&1 ) && ( yes "d" | git mergetool file11 >/dev/null 2>&1 ) &&
( yes "d" | git mergetool file12 >/dev/null 2>&1 ) && ( yes "d" | git mergetool file12 >/dev/null 2>&1 ) &&
@ -126,7 +130,7 @@ test_expect_success 'mergetool on file in parent dir' '
( (
cd subdir && cd subdir &&
( yes "" | git mergetool ../file1 >/dev/null 2>&1 ) && ( yes "" | git mergetool ../file1 >/dev/null 2>&1 ) &&
( yes "" | git mergetool ../file2 >/dev/null 2>&1 ) && ( yes "" | git mergetool ../file2 ../spaced\ name >/dev/null 2>&1 ) &&
( yes "d" | git mergetool ../file11 >/dev/null 2>&1 ) && ( yes "d" | git mergetool ../file11 >/dev/null 2>&1 ) &&
( yes "d" | git mergetool ../file12 >/dev/null 2>&1 ) && ( yes "d" | git mergetool ../file12 >/dev/null 2>&1 ) &&
( yes "l" | git mergetool ../submod >/dev/null 2>&1 ) && ( yes "l" | git mergetool ../submod >/dev/null 2>&1 ) &&
@ -180,6 +184,24 @@ test_expect_success 'mergetool skips resolved paths when rerere is active' '
git reset --hard git reset --hard
' '


test_expect_success 'mergetool takes partial path' '
git config rerere.enabled false &&
git checkout -b test12 branch1 &&
git submodule update -N &&
test_must_fail git merge master &&

#shouldnt need these lines
#( yes "d" | git mergetool file11 >/dev/null 2>&1 ) &&
#( yes "d" | git mergetool file12 >/dev/null 2>&1 ) &&
#( yes "l" | git mergetool submod >/dev/null 2>&1 ) &&
#( yes "" | git mergetool file1 file2 >/dev/null 2>&1 ) &&

( yes "" | git mergetool subdir ) &&

test "$(cat subdir/file3)" = "master new sub" &&
git reset --hard
'

test_expect_success 'deleted vs modified submodule' ' test_expect_success 'deleted vs modified submodule' '
git checkout -b test6 branch1 && git checkout -b test6 branch1 &&
git submodule update -N && git submodule update -N &&
@ -189,7 +211,7 @@ test_expect_success 'deleted vs modified submodule' '
git checkout -b test6.a test6 && git checkout -b test6.a test6 &&
test_must_fail git merge master && test_must_fail git merge master &&
test -n "$(git ls-files -u)" && test -n "$(git ls-files -u)" &&
( yes "" | git mergetool file1 file2 subdir/file3 >/dev/null 2>&1 ) && ( yes "" | git mergetool file1 file2 spaced\ name subdir/file3 >/dev/null 2>&1 ) &&
( yes "d" | git mergetool file11 file12 >/dev/null 2>&1 ) && ( yes "d" | git mergetool file11 file12 >/dev/null 2>&1 ) &&
( yes "r" | git mergetool submod ) && ( yes "r" | git mergetool submod ) &&
rmdir submod && mv submod-movedaside submod && rmdir submod && mv submod-movedaside submod &&
@ -205,7 +227,7 @@ test_expect_success 'deleted vs modified submodule' '
git submodule update -N && git submodule update -N &&
test_must_fail git merge master && test_must_fail git merge master &&
test -n "$(git ls-files -u)" && test -n "$(git ls-files -u)" &&
( yes "" | git mergetool file1 file2 subdir/file3 >/dev/null 2>&1 ) && ( yes "" | git mergetool file1 file2 spaced\ name subdir/file3 >/dev/null 2>&1 ) &&
( yes "d" | git mergetool file11 file12 >/dev/null 2>&1 ) && ( yes "d" | git mergetool file11 file12 >/dev/null 2>&1 ) &&
( yes "l" | git mergetool submod ) && ( yes "l" | git mergetool submod ) &&
test ! -e submod && test ! -e submod &&
@ -218,7 +240,7 @@ test_expect_success 'deleted vs modified submodule' '
git submodule update -N && git submodule update -N &&
test_must_fail git merge test6 && test_must_fail git merge test6 &&
test -n "$(git ls-files -u)" && test -n "$(git ls-files -u)" &&
( yes "" | git mergetool file1 file2 subdir/file3 >/dev/null 2>&1 ) && ( yes "" | git mergetool file1 file2 spaced\ name subdir/file3 >/dev/null 2>&1 ) &&
( yes "d" | git mergetool file11 file12 >/dev/null 2>&1 ) && ( yes "d" | git mergetool file11 file12 >/dev/null 2>&1 ) &&
( yes "r" | git mergetool submod ) && ( yes "r" | git mergetool submod ) &&
test ! -e submod && test ! -e submod &&
@ -233,7 +255,7 @@ test_expect_success 'deleted vs modified submodule' '
git submodule update -N && git submodule update -N &&
test_must_fail git merge test6 && test_must_fail git merge test6 &&
test -n "$(git ls-files -u)" && test -n "$(git ls-files -u)" &&
( yes "" | git mergetool file1 file2 subdir/file3 >/dev/null 2>&1 ) && ( yes "" | git mergetool file1 file2 spaced\ name subdir/file3 >/dev/null 2>&1 ) &&
( yes "d" | git mergetool file11 file12 >/dev/null 2>&1 ) && ( yes "d" | git mergetool file11 file12 >/dev/null 2>&1 ) &&
( yes "l" | git mergetool submod ) && ( yes "l" | git mergetool submod ) &&
test "$(cat submod/bar)" = "master submodule" && test "$(cat submod/bar)" = "master submodule" &&
@ -256,7 +278,7 @@ test_expect_success 'file vs modified submodule' '
git checkout -b test7.a branch1 && git checkout -b test7.a branch1 &&
test_must_fail git merge master && test_must_fail git merge master &&
test -n "$(git ls-files -u)" && test -n "$(git ls-files -u)" &&
( yes "" | git mergetool file1 file2 subdir/file3 >/dev/null 2>&1 ) && ( yes "" | git mergetool file1 file2 spaced\ name subdir/file3 >/dev/null 2>&1 ) &&
( yes "d" | git mergetool file11 file12 >/dev/null 2>&1 ) && ( yes "d" | git mergetool file11 file12 >/dev/null 2>&1 ) &&
( yes "r" | git mergetool submod ) && ( yes "r" | git mergetool submod ) &&
rmdir submod && mv submod-movedaside submod && rmdir submod && mv submod-movedaside submod &&
@ -271,7 +293,7 @@ test_expect_success 'file vs modified submodule' '
git checkout -b test7.b test7 && git checkout -b test7.b test7 &&
test_must_fail git merge master && test_must_fail git merge master &&
test -n "$(git ls-files -u)" && test -n "$(git ls-files -u)" &&
( yes "" | git mergetool file1 file2 subdir/file3 >/dev/null 2>&1 ) && ( yes "" | git mergetool file1 file2 spaced\ name subdir/file3 >/dev/null 2>&1 ) &&
( yes "d" | git mergetool file11 file12 >/dev/null 2>&1 ) && ( yes "d" | git mergetool file11 file12 >/dev/null 2>&1 ) &&
( yes "l" | git mergetool submod ) && ( yes "l" | git mergetool submod ) &&
git submodule update -N && git submodule update -N &&
@ -286,7 +308,7 @@ test_expect_success 'file vs modified submodule' '
git submodule update -N && git submodule update -N &&
test_must_fail git merge test7 && test_must_fail git merge test7 &&
test -n "$(git ls-files -u)" && test -n "$(git ls-files -u)" &&
( yes "" | git mergetool file1 file2 subdir/file3 >/dev/null 2>&1 ) && ( yes "" | git mergetool file1 file2 spaced\ name subdir/file3 >/dev/null 2>&1 ) &&
( yes "d" | git mergetool file11 file12 >/dev/null 2>&1 ) && ( yes "d" | git mergetool file11 file12 >/dev/null 2>&1 ) &&
( yes "r" | git mergetool submod ) && ( yes "r" | git mergetool submod ) &&
test -d submod.orig && test -d submod.orig &&
@ -301,7 +323,7 @@ test_expect_success 'file vs modified submodule' '
git submodule update -N && git submodule update -N &&
test_must_fail git merge test7 && test_must_fail git merge test7 &&
test -n "$(git ls-files -u)" && test -n "$(git ls-files -u)" &&
( yes "" | git mergetool file1 file2 subdir/file3 >/dev/null 2>&1 ) && ( yes "" | git mergetool file1 file2 spaced\ name subdir/file3 >/dev/null 2>&1 ) &&
( yes "d" | git mergetool file11 file12 >/dev/null 2>&1 ) && ( yes "d" | git mergetool file11 file12 >/dev/null 2>&1 ) &&
( yes "l" | git mergetool submod ) && ( yes "l" | git mergetool submod ) &&
test "$(cat submod/bar)" = "master submodule" && test "$(cat submod/bar)" = "master submodule" &&
@ -388,7 +410,7 @@ test_expect_success 'directory vs modified submodule' '
test "$(cat submod/file16)" = "not a submodule" && test "$(cat submod/file16)" = "not a submodule" &&
rm -rf submod.orig && rm -rf submod.orig &&


git reset --hard && git reset --hard >/dev/null 2>&1 &&
test_must_fail git merge master && test_must_fail git merge master &&
test -n "$(git ls-files -u)" && test -n "$(git ls-files -u)" &&
test ! -e submod.orig && test ! -e submod.orig &&
@ -400,7 +422,7 @@ test_expect_success 'directory vs modified submodule' '
( cd submod && git clean -f && git reset --hard ) && ( cd submod && git clean -f && git reset --hard ) &&
git submodule update -N && git submodule update -N &&
test "$(cat submod/bar)" = "master submodule" && test "$(cat submod/bar)" = "master submodule" &&
git reset --hard && rm -rf submod-movedaside && git reset --hard >/dev/null 2>&1 && rm -rf submod-movedaside &&


git checkout -b test11.c master && git checkout -b test11.c master &&
git submodule update -N && git submodule update -N &&
@ -410,7 +432,7 @@ test_expect_success 'directory vs modified submodule' '
git submodule update -N && git submodule update -N &&
test "$(cat submod/bar)" = "master submodule" && test "$(cat submod/bar)" = "master submodule" &&


git reset --hard && git reset --hard >/dev/null 2>&1 &&
git submodule update -N && git submodule update -N &&
test_must_fail git merge test11 && test_must_fail git merge test11 &&
test -n "$(git ls-files -u)" && test -n "$(git ls-files -u)" &&
@ -418,7 +440,7 @@ test_expect_success 'directory vs modified submodule' '
( yes "r" | git mergetool submod ) && ( yes "r" | git mergetool submod ) &&
test "$(cat submod/file16)" = "not a submodule" && test "$(cat submod/file16)" = "not a submodule" &&


git reset --hard master && git reset --hard master >/dev/null 2>&1 &&
( cd submod && git clean -f && git reset --hard ) && ( cd submod && git clean -f && git reset --hard ) &&
git submodule update -N git submodule update -N
' '

View File

@ -2,6 +2,14 @@
test_description='git svn handling of root commits in merge ranges' test_description='git svn handling of root commits in merge ranges'
. ./lib-git-svn.sh . ./lib-git-svn.sh


svn_ver="$(svn --version --quiet)"
case $svn_ver in
0.* | 1.[0-4].*)
skip_all="skipping git-svn test - SVN too old ($svn_ver)"
test_done
;;
esac

test_expect_success 'test handling of root commits in merge ranges' ' test_expect_success 'test handling of root commits in merge ranges' '
mkdir -p init/trunk init/branches init/tags && mkdir -p init/trunk init/branches init/tags &&
echo "r1" > init/trunk/file.txt && echo "r1" > init/trunk/file.txt &&