From: Junio C Hamano Date: Thu, 17 Oct 2013 22:55:13 +0000 (-0700) Subject: Merge branch 'jk/trailing-slash-in-pathspec' X-Git-Tag: v1.8.5-rc0~43 X-Git-Url: https://git.lorimer.id.au/gitweb.git/diff_plain/be98d915bec9aadcf746192ce0c5ddc19926b8bb?ds=inline;hp=-c Merge branch 'jk/trailing-slash-in-pathspec' Code refactoring. * jk/trailing-slash-in-pathspec: reset: handle submodule with trailing slash rm: re-use parse_pathspec's trailing-slash removal --- be98d915bec9aadcf746192ce0c5ddc19926b8bb diff --combined builtin/reset.c index 1a53448772,800117f4f3..f2f9d55392 --- a/builtin/reset.c +++ b/builtin/reset.c @@@ -143,7 -143,6 +143,6 @@@ static int read_from_tree(const struct opt.output_format = DIFF_FORMAT_CALLBACK; opt.format_callback = update_index_from_diff; - read_cache(); if (do_diff_cache(tree_sha1, &opt)) return 1; diffcore_std(&opt); @@@ -169,7 -168,7 +168,7 @@@ static void set_reflog_message(struct s static void die_if_unmerged_cache(int reset_type) { - if (is_merge() || read_cache() < 0 || unmerged_cache()) + if (is_merge() || unmerged_cache()) die(_("Cannot do a %s reset in the middle of a merge."), _(reset_type_names[reset_type])); @@@ -220,13 -219,18 +219,18 @@@ static void parse_args(struct pathspec } } *rev_ret = rev; + + if (read_cache() < 0) + die(_("index file corrupt")); + parse_pathspec(pathspec, 0, PATHSPEC_PREFER_FULL | + PATHSPEC_STRIP_SUBMODULE_SLASH_CHEAP | (patch_mode ? PATHSPEC_PREFIX_ORIGIN : 0), prefix, argv); } -static int update_refs(const char *rev, const unsigned char *sha1) +static int reset_refs(const char *rev, const unsigned char *sha1) { int update_ref_status; struct strbuf msg = STRBUF_INIT; @@@ -330,14 -334,11 +334,14 @@@ int cmd_reset(int argc, const char **ar die_if_unmerged_cache(reset_type); if (reset_type != SOFT) { - struct lock_file *lock = xcalloc(1, sizeof(struct lock_file)); + struct lock_file *lock = xcalloc(1, sizeof(*lock)); int newfd = hold_locked_index(lock, 1); if (reset_type == MIXED) { + int flags = quiet ? REFRESH_QUIET : REFRESH_IN_PORCELAIN; if (read_from_tree(&pathspec, sha1)) return 1; + refresh_index(&the_index, flags, NULL, NULL, + _("Unstaged changes after reset:")); } else { int err = reset_index(sha1, reset_type, quiet); if (reset_type == KEEP && !err) @@@ -346,6 -347,12 +350,6 @@@ die(_("Could not reset index file to revision '%s'."), rev); } - if (reset_type == MIXED) { /* Report what has not been updated. */ - int flags = quiet ? REFRESH_QUIET : REFRESH_IN_PORCELAIN; - refresh_index(&the_index, flags, NULL, NULL, - _("Unstaged changes after reset:")); - } - if (write_cache(newfd, active_cache, active_nr) || commit_locked_index(lock)) die(_("Could not write new index file.")); @@@ -354,7 -361,7 +358,7 @@@ if (!pathspec.nr && !unborn) { /* Any resets without paths update HEAD to the head being * switched to, saving the previous head in ORIG_HEAD before. */ - update_ref_status = update_refs(rev, sha1); + update_ref_status = reset_refs(rev, sha1); if (reset_type == HARD && !update_ref_status && !quiet) print_new_head_line(lookup_commit_reference(sha1)); diff --combined t/t7400-submodule-basic.sh index 10f89bd0ce,c268d3c9a2..c28e8d8ada --- a/t/t7400-submodule-basic.sh +++ b/t/t7400-submodule-basic.sh @@@ -481,7 -481,7 +481,7 @@@ test_expect_success 'do not add files f ' - test_expect_success 'gracefully add submodule with a trailing slash' ' + test_expect_success 'gracefully add/reset submodule with a trailing slash' ' git reset --hard && git commit -m "commit subproject" init && @@@ -495,7 -495,9 +495,9 @@@ git add init/ && test_must_fail git diff --exit-code --cached init && test $commit = $(git ls-files --stage | - sed -n "s/^160000 \([^ ]*\).*/\1/p") + sed -n "s/^160000 \([^ ]*\).*/\1/p") && + git reset init/ && + git diff --exit-code --cached init ' @@@ -962,6 -964,7 +964,6 @@@ test_expect_success 'submodule with UTF git add sub && git commit -m "init sub" ) && - test_config core.precomposeunicode true && git submodule add ./"$svname" && git submodule >&2 && test -n "$(git submodule | grep "$svname")"