When -u was introduced in dfdac5d (git-add -u: match the index with working tree., 2007-04-20), "add -u" (without pathspec) added everything. Shortly after, 2ed2c22 (git-add -u paths... now works from subdirectory, 2007-08-16) broke it while fixing something related. This makes -u (and -A) inconsistent with some other options, namely -p. It's been four years since the unintentional breakage and people are probably used to "git add -u" updating only current directory. Perhaps it's time to bring the original behavior back? Current behavior can always be achieved with "git add -u ." Migration plan: I'm bad at this. Can we start with a patch that warns users to do "git add -u ." when they do "git add -u"? Hopefully they would have their fingers retraied by the time the behavior is changed in 1.8.0. PS. What about -A? Signed-off-by: Nguyán ThÃi Ngác Duy <pclouds@xxxxxxxxx> --- 2011/2/7 Sebastian Pipping <webmaster@xxxxxxxxxxxx>: >> git add -u was tree-wide when it was introduced in dfdac5d (git-add >> -u: match the index with working tree., 2007-04-20), but 2ed2c22 >> (git-add -u paths... now works from subdirectory, 2007-08-16) broke it >> while fixing something related. > > So my memory didn't fool me. Thanks for digging this out. > > Can we have tree-wide "git add -u" back, please? Yup yup I like it too (and wanted the original behavior sometimes, even though I didn't know it was original behavior). Pulling Junio in for -A. It seems closely related to -u. In fact I revert one line from 1e5f764 (builtin-add.c: optimize -A option and "git add ." - 2008-07-22) but not fully understand why it was changed. builtin/add.c | 7 +++++-- t/t2200-add-update.sh | 13 +++++++------ 2 files changed, 12 insertions(+), 8 deletions(-) diff --git a/builtin/add.c b/builtin/add.c index 12b964e..f1f8b5a 100644 --- a/builtin/add.c +++ b/builtin/add.c @@ -389,7 +389,7 @@ int cmd_add(int argc, const char **argv, const char *prefix) die("-A and -u are mutually incompatible"); if (!show_only && ignore_missing) die("Option --ignore-missing can only be used together with --dry-run"); - if ((addremove || take_worktree_changes) && !argc) { + if (addremove && !argc) { static const char *here[2] = { ".", NULL }; argc = 1; argv = here; @@ -412,7 +412,10 @@ int cmd_add(int argc, const char **argv, const char *prefix) fprintf(stderr, "Maybe you wanted to say 'git add .'?\n"); return 0; } - pathspec = validate_pathspec(argc, argv, prefix); + if (take_worktree_changes && !argc) + pathspec = NULL; + else + pathspec = validate_pathspec(argc, argv, prefix); if (read_cache() < 0) die("index file corrupt"); diff --git a/t/t2200-add-update.sh b/t/t2200-add-update.sh index 0692427..2201242 100755 --- a/t/t2200-add-update.sh +++ b/t/t2200-add-update.sh @@ -69,15 +69,16 @@ test_expect_success 'cache tree has not been corrupted' ' test_expect_success 'update from a subdirectory' ' ( cd dir1 && - echo more >sub2 && + echo more >>sub2 && git add -u sub2 - ) -' - -test_expect_success 'change gets noticed' ' - + ) && test "$(git diff-files --name-status dir1)" = "" +' +test_expect_success 'update without args from subdir' ' + echo more >>top && + ( cd dir1 && git add -u ) && + test "$(git diff-files --name-status top)" = "" ' test_expect_success SYMLINKS 'replace a file with a symlink' ' -- 1.7.3.4.878.g439c7 -- To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html