summaryrefslogtreecommitdiff
path: root/builtin-rm.c
diff options
context:
space:
mode:
authorOlivier Marin <dkr@freesurf.fr>2008-07-19 18:24:46 +0200
committerJunio C Hamano <gitster@pobox.com>2008-07-19 10:41:17 -0700
commit4d2646727997c82c04a82ce38e56d76e7b5d268b (patch)
treeae5c784cdd0412d039b6981cfb6c89aa61753a3c /builtin-rm.c
parentfcf74dbfca9738a724995c92f0845e8018e51a0e (diff)
downloadgit-4d2646727997c82c04a82ce38e56d76e7b5d268b.tar.gz
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>
Diffstat (limited to 'builtin-rm.c')
-rw-r--r--builtin-rm.c10
1 files changed, 5 insertions, 5 deletions
diff --git a/builtin-rm.c b/builtin-rm.c
index 22c9bd1c6c..abdab7f001 100644
--- a/builtin-rm.c
+++ b/builtin-rm.c
@@ -146,11 +146,6 @@ int cmd_rm(int argc, const char **argv, const char *prefix)
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);
if (!argc)
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)
setup_work_tree();
+ newfd = hold_locked_index(&lock_file, 1);
+
+ if (read_cache() < 0)
+ die("index file corrupt");
+
pathspec = get_pathspec(prefix, argv);
seen = NULL;
for (i = 0; pathspec[i] ; i++)