Merge branch 'jc/diff-no-index-in-subdir'
"git diff --no-index" run inside a subdirectory under control of a Git repository operated at the top of the working tree and stripped the prefix from the output, and oddballs like "-" (stdin) did not work correctly because of it. Correct the set-up by undoing what the set-up sequence did to cwd and prefix. * jc/diff-no-index-in-subdir: diff: --no-index should ignore the worktreemain
commit
72e4eb56f0
|
|
@ -487,6 +487,21 @@ int cmd_diff(int argc,
|
|||
|
||||
init_diff_ui_defaults();
|
||||
repo_config(the_repository, git_diff_ui_config, NULL);
|
||||
|
||||
/*
|
||||
* If we are ignoring the fact that our current directory may
|
||||
* be part of a working tree controlled by a Git repository to
|
||||
* pretend to be a "better GNU diff", we should undo the
|
||||
* effect of the setup code that did a chdir() to the top of
|
||||
* the working tree. Where we came from is recorded in the
|
||||
* prefix.
|
||||
*/
|
||||
if (no_index && prefix) {
|
||||
if (chdir(prefix))
|
||||
die(_("cannot come back to cwd"));
|
||||
prefix = NULL;
|
||||
}
|
||||
|
||||
prefix = precompose_argv_prefix(argc, argv, prefix);
|
||||
|
||||
repo_init_revisions(the_repository, &rev, prefix);
|
||||
|
|
|
|||
|
|
@ -26,6 +26,23 @@ test_expect_success 'git diff --no-index directories' '
|
|||
test_line_count = 14 cnt
|
||||
'
|
||||
|
||||
test_expect_success 'git diff --no-index with -' '
|
||||
cat >expect <<-\EOF &&
|
||||
diff --git a/- b/-
|
||||
new file mode 100644
|
||||
--- /dev/null
|
||||
+++ b/-
|
||||
@@ -0,0 +1 @@
|
||||
+frotz
|
||||
EOF
|
||||
(
|
||||
cd a &&
|
||||
echo frotz |
|
||||
test_expect_code 1 git diff --no-index /dev/null - >../actual
|
||||
) &&
|
||||
test_cmp expect actual
|
||||
'
|
||||
|
||||
test_expect_success 'git diff --no-index relative path outside repo' '
|
||||
(
|
||||
cd repo &&
|
||||
|
|
|
|||
Loading…
Reference in New Issue