Add NEED_WORK_TREE for more commands
PATCH 1/1 Add NEED_WORK_TREE for more commands
--- git.c | 12 ++++++------ 1 files changed, 6 insertions(+), 6 deletions(-)
git.c +6 -6
@@ -307,10 +307,10 @@ static void handle_internal_command(int argc, const char **argv)const char *cmd = argv[0 ];static struct cmd_struct commands[] = { {"add" , cmd_add,RUN_SETUP |NEED_WORK_TREE }, - {"annotate" , cmd_annotate,RUN_SETUP }, + {"annotate" , cmd_annotate,RUN_SETUP |NEED_WORK_TREE }, {"apply" , cmd_apply }, {"archive" , cmd_archive }, - {"blame" , cmd_blame,RUN_SETUP }, + {"blame" , cmd_blame,RUN_SETUP |NEED_WORK_TREE }, {"branch" , cmd_branch,RUN_SETUP }, {"bundle" , cmd_bundle }, {"cat-file" , cmd_cat_file,RUN_SETUP },
@@ -333,7 +333,7 @@ static void handle_internal_command(int argc, const char **argv) { "fetch--tool", cmd_fetch__tool, RUN_SETUP }, { "fmt-merge-msg", cmd_fmt_merge_msg, RUN_SETUP }, { "for-each-ref", cmd_for_each_ref, RUN_SETUP }, - { "format-patch", cmd_format_patch, RUN_SETUP }, + { "format-patch", cmd_format_patch, RUN_SETUP | NEED_WORK_TREE }, { "fsck", cmd_fsck, RUN_SETUP }, { "fsck-objects", cmd_fsck, RUN_SETUP }, { "gc", cmd_gc, RUN_SETUP },
@@ -346,7 +346,7 @@ static void handle_internal_command(int argc, const char **argv) { "init", cmd_init_db }, { "init-db", cmd_init_db }, { "log", cmd_log, RUN_SETUP | USE_PAGER }, - { "ls-files", cmd_ls_files, RUN_SETUP }, + { "ls-files", cmd_ls_files, RUN_SETUP | NEED_WORK_TREE }, { "ls-tree", cmd_ls_tree, RUN_SETUP }, { "mailinfo", cmd_mailinfo }, { "mailsplit", cmd_mailsplit },
@@ -363,7 +363,7 @@ static void handle_internal_command(int argc, const char **argv) { "reflog", cmd_reflog, RUN_SETUP }, { "repo-config", cmd_config }, { "rerere", cmd_rerere, RUN_SETUP }, - { "reset", cmd_reset, RUN_SETUP }, + { "reset", cmd_reset, RUN_SETUP | NEED_WORK_TREE }, { "rev-list", cmd_rev_list, RUN_SETUP }, { "rev-parse", cmd_rev_parse, RUN_SETUP }, { "revert", cmd_revert, RUN_SETUP | NEED_WORK_TREE },
@@ -377,7 +377,7 @@ static void handle_internal_command(int argc, const char **argv) { "tag", cmd_tag, RUN_SETUP }, { "tar-tree", cmd_tar_tree }, { "unpack-objects", cmd_unpack_objects, RUN_SETUP }, - { "update-index", cmd_update_index, RUN_SETUP }, + { "update-index", cmd_update_index, RUN_SETUP | NEED_WORK_TREE }, { "update-ref", cmd_update_ref, RUN_SETUP }, { "upload-archive", cmd_upload_archive }, { "verify-tag", cmd_verify_tag, RUN_SETUP },
Signature · 1 line
1.5.3.rc4.3.gab089
git.c
Quoted 12 lines · Nguyễn Thái Ngọc Duy
Signed-off-by Nguyễn Thái Ngọc Duy <[email protected]>--- git.c | 12 ++++++------ 1 files changed, 6 insertions(+), 6 deletions(-)git.c +2
-0+ { "ls-files", cmd_ls_files, RUN_SETUP | NEED_WORK_TREE }, + { "update-index", cmd_update_index, RUN_SETUP | NEED_WORK_TREE },
At least these two work very fine without a working tree (and I *do* need them to work without a working tree).
Mike
Quoted 7 lines · Mike Hommey
Quoted 6 lines · Nguy???n Th??i Ng???c Duy
Signed-off-by Nguy???n Th??i Ng???c Duy <[email protected]>--- git.c | 12 ++++++------ 1 files changed, 6 insertions(+), 6 deletions(-)
Quoted 9 lines
git.c
Quoted 6 lines
git.c +2
-0+ { "ls-files", cmd_ls_files, RUN_SETUP | NEED_WORK_TREE }, + { "update-index", cmd_update_index, RUN_SETUP | NEED_WORK_TREE },At least these two work very fine without a working tree (and I *do* need them to work without a working tree).
How can you do that while both need index and a working directory to operate?
Quoted 1 line
Mike
Signature · 1 line
Duy
Quoted 18 lines · Nguyen Thai Ngoc Duy
Quoted 7 lines · Mike Hommey
Quoted 6 lines · Nguy???n Th??i Ng???c Duy
Signed-off-by Nguy???n Th??i Ng???c Duy <[email protected]>--- git.c | 12 ++++++------ 1 files changed, 6 insertions(+), 6 deletions(-)Quoted 9 lines
git.c
Quoted 6 lines
git.c +2
-0+ { "ls-files", cmd_ls_files, RUN_SETUP | NEED_WORK_TREE }, + { "update-index", cmd_update_index, RUN_SETUP | NEED_WORK_TREE },At least these two work very fine without a working tree (and I *do* need them to work without a working tree).
Quoted 2 lines
How can you do that while both need index and a working directory to operate?
For example, ls-files -c and update-index --remove don't need more than the index, and you don't need a working tree to fiddle with the index with these commands.
By the way, git-rm has a --cached option that allows it to only work on the index, but it has a NEED_WORK_TREE which prevents its use without a working tree in such a case (though I don't know if the implementation itself relies on the working tree or not, but if it does, it shouldn't). It's sad to have to do
git-ls-files -c directory | xargs -d "\n" git-update-index --remove instead of
git-rm -r --cached directory
when you want to remove a directory in a bare repository.
Mike
Hi,
git.c static void handle_internal_command(int argc, const char **argv) · line 313
Quoted 2 lines · Nguyễn Thái Ngọc Duy
git.c +2
-0+ { "annotate", cmd_annotate, RUN_SETUP | NEED_WORK_TREE }, + { "blame", cmd_blame, RUN_SETUP | NEED_WORK_TREE },
Both can be sensibly run without a work tree: "git blame <commit> <file>"
git.c static void handle_internal_command(int argc, const char **argv) · line 336
Quoted 1 line
git.c +1
-0+ { "format-patch", cmd_format_patch, RUN_SETUP | NEED_WORK_TREE },
This can be run without work tree in any case, methinks. AFAICT format-patch only ever uses information from the object database.
git.c static void handle_internal_command(int argc, const char **argv) · line 349
Quoted 1 line
git.c +1
-0+ { "ls-files", cmd_ls_files, RUN_SETUP | NEED_WORK_TREE },
That has already been commented on.
git.c static void handle_internal_command(int argc, const char **argv) · line 366
Quoted 1 line
git.c +1
-0+ { "reset", cmd_reset, RUN_SETUP | NEED_WORK_TREE },
"git reset --soft HEAD <commit>" makes sense in a bare repository.
git.c static void handle_internal_command(int argc, const char **argv) · line 380
Quoted 1 line
git.c +1
-0+ { "update-index", cmd_update_index, RUN_SETUP | NEED_WORK_TREE },
That has been coommented on, too.
I agree that there are modes for these commands (except format-patch), in which they want a work-tree, but they have other modes, too, so IMHO it should be solved a la 6d9ba67b(Commands requiring a work tree must not run in GIT_DIR). You'll see that ls-files already has some special handling here, and this could be refactorised to requires_work_tree(), which should make the code much more elegant.
Ciao,
Dscho