mirror of
https://github.com/git/git
synced 2024-08-28 03:59:25 +00:00
builtin-rm: fix index lock file path
When hold_locked_index() is called with a relative git_dir and you are outside the work tree, the lock file become relative to the current directory. So when later setup_work_tree() change the current directory it breaks lock file path and commit_locked_index() fails. This patch move index locking code after setup_work_tree() call to make lock file relative to the working tree as it should be and add a test case. Noticed by Nick Andrew. Signed-off-by: Olivier Marin <dkr@freesurf.fr> Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
parent
fcf74dbfca
commit
4d26467279
10
builtin-rm.c
10
builtin-rm.c
|
@ -146,11 +146,6 @@ int cmd_rm(int argc, const char **argv, const char *prefix)
|
||||||
|
|
||||||
git_config(git_default_config, NULL);
|
git_config(git_default_config, NULL);
|
||||||
|
|
||||||
newfd = hold_locked_index(&lock_file, 1);
|
|
||||||
|
|
||||||
if (read_cache() < 0)
|
|
||||||
die("index file corrupt");
|
|
||||||
|
|
||||||
argc = parse_options(argc, argv, builtin_rm_options, builtin_rm_usage, 0);
|
argc = parse_options(argc, argv, builtin_rm_options, builtin_rm_usage, 0);
|
||||||
if (!argc)
|
if (!argc)
|
||||||
usage_with_options(builtin_rm_usage, builtin_rm_options);
|
usage_with_options(builtin_rm_usage, builtin_rm_options);
|
||||||
|
@ -158,6 +153,11 @@ int cmd_rm(int argc, const char **argv, const char *prefix)
|
||||||
if (!index_only)
|
if (!index_only)
|
||||||
setup_work_tree();
|
setup_work_tree();
|
||||||
|
|
||||||
|
newfd = hold_locked_index(&lock_file, 1);
|
||||||
|
|
||||||
|
if (read_cache() < 0)
|
||||||
|
die("index file corrupt");
|
||||||
|
|
||||||
pathspec = get_pathspec(prefix, argv);
|
pathspec = get_pathspec(prefix, argv);
|
||||||
seen = NULL;
|
seen = NULL;
|
||||||
for (i = 0; pathspec[i] ; i++)
|
for (i = 0; pathspec[i] ; i++)
|
||||||
|
|
|
@ -217,4 +217,16 @@ test_expect_success 'Remove nonexistent file returns nonzero exit status' '
|
||||||
! git rm nonexistent
|
! git rm nonexistent
|
||||||
'
|
'
|
||||||
|
|
||||||
|
test_expect_success 'Call "rm" from outside the work tree' '
|
||||||
|
mkdir repo &&
|
||||||
|
cd repo &&
|
||||||
|
git init &&
|
||||||
|
echo something > somefile &&
|
||||||
|
git add somefile &&
|
||||||
|
git commit -m "add a file" &&
|
||||||
|
(cd .. &&
|
||||||
|
git --git-dir=repo/.git --work-tree=repo rm somefile) &&
|
||||||
|
test_must_fail git ls-files --error-unmatch somefile
|
||||||
|
'
|
||||||
|
|
||||||
test_done
|
test_done
|
||||||
|
|
Loading…
Reference in a new issue