From: Junio C Hamano Date: Thu, 9 Dec 2010 18:36:51 +0000 (-0800) Subject: Merge branch 'jn/cherry-pick-refresh-index' into maint X-Git-Tag: v1.7.3.4~22 X-Git-Url: https://git.lorimer.id.au/gitweb.git/diff_plain/6aa6a92fb61f0ba295b349222b8966c46ef0ba58?ds=inline;hp=-c Merge branch 'jn/cherry-pick-refresh-index' into maint * jn/cherry-pick-refresh-index: cherry-pick/revert: transparently refresh index --- 6aa6a92fb61f0ba295b349222b8966c46ef0ba58 diff --combined builtin/revert.c index 57b51e4a0e,d849f40fcc..bb6e9e83b7 --- a/builtin/revert.c +++ b/builtin/revert.c @@@ -442,7 -442,7 +442,7 @@@ static int do_pick_commit(void else parent = commit->parents->item; - if (allow_ff && !hashcmp(parent->object.sha1, head)) + if (allow_ff && parent && !hashcmp(parent->object.sha1, head)) return fast_forward_to(commit->object.sha1, head); if (parent && parse_commit(parent) < 0) @@@ -547,6 -547,21 +547,21 @@@ static void prepare_revs(struct rev_inf die("empty commit set passed"); } + static void read_and_refresh_cache(const char *me) + { + static struct lock_file index_lock; + int index_fd = hold_locked_index(&index_lock, 0); + if (read_index_preload(&the_index, NULL) < 0) + die("git %s: failed to read the index", me); + refresh_index(&the_index, REFRESH_QUIET|REFRESH_UNMERGED, NULL, NULL, NULL); + if (the_index.cache_changed) { + if (write_index(&the_index, index_fd) || + commit_locked_index(&index_lock)) + die("git %s: failed to refresh the index", me); + } + rollback_lock_file(&index_lock); + } + static int revert_or_cherry_pick(int argc, const char **argv) { struct rev_info revs; @@@ -567,8 -582,7 +582,7 @@@ die("cherry-pick --ff cannot be used with --edit"); } - if (read_cache() < 0) - die("git %s: failed to read the index", me); + read_and_refresh_cache(me); prepare_revs(&revs);