зеркало из https://github.com/microsoft/git.git
merge-file: correctly find files when called in subdir
Since b541248
(merge.conflictstyle: choose between "merge" and "diff3
-m" styles, 2008-08-29), git-merge-file uses setup_directory_gently(),
thus cd'ing around to find any possible config files to use.
This broke merge-file when it is called from within a subdirectory of
a repository, and the arguments are all relative paths.
Fix by prepending the prefix, as passed down from the main git
setup code, if there is any.
Signed-off-by: Thomas Rast <trast@student.ethz.ch>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
Родитель
9e5f5d4cfe
Коммит
55846b9abd
|
@ -28,6 +28,7 @@ int cmd_merge_file(int argc, const char **argv, const char *prefix)
|
|||
xmparam_t xmp = {{0}};
|
||||
int ret = 0, i = 0, to_stdout = 0;
|
||||
int quiet = 0;
|
||||
int prefixlen = 0;
|
||||
struct option options[] = {
|
||||
OPT_BOOLEAN('p', "stdout", &to_stdout, "send results to standard output"),
|
||||
OPT_SET_INT(0, "diff3", &xmp.style, "use a diff3 based merge", XDL_MERGE_DIFF3),
|
||||
|
@ -65,10 +66,14 @@ int cmd_merge_file(int argc, const char **argv, const char *prefix)
|
|||
"%s\n", strerror(errno));
|
||||
}
|
||||
|
||||
if (prefix)
|
||||
prefixlen = strlen(prefix);
|
||||
|
||||
for (i = 0; i < 3; i++) {
|
||||
const char *fname = prefix_filename(prefix, prefixlen, argv[i]);
|
||||
if (!names[i])
|
||||
names[i] = argv[i];
|
||||
if (read_mmfile(mmfs + i, argv[i]))
|
||||
if (read_mmfile(mmfs + i, fname))
|
||||
return -1;
|
||||
if (buffer_is_binary(mmfs[i].ptr, mmfs[i].size))
|
||||
return error("Cannot merge binary files: %s\n",
|
||||
|
|
|
@ -64,6 +64,14 @@ cp new1.txt test.txt
|
|||
test_expect_success "merge without conflict" \
|
||||
"git merge-file test.txt orig.txt new2.txt"
|
||||
|
||||
test_expect_success 'works in subdirectory' '
|
||||
mkdir dir &&
|
||||
cp new1.txt dir/a.txt &&
|
||||
cp orig.txt dir/o.txt &&
|
||||
cp new2.txt dir/b.txt &&
|
||||
( cd dir && git merge-file a.txt o.txt b.txt )
|
||||
'
|
||||
|
||||
cp new1.txt test.txt
|
||||
test_expect_success "merge without conflict (--quiet)" \
|
||||
"git merge-file --quiet test.txt orig.txt new2.txt"
|
||||
|
|
Загрузка…
Ссылка в новой задаче