index_has_changes(): avoid assuming operating on the_index

Modify index_has_changes() to take a struct istate* instead of just
operating on the_index.  This is only a partial conversion, though,
because we call do_diff_cache() which implicitly assumes work is to be
done on the_index.  Ongoing work is being done elsewhere to do the
remainder of the conversion, and thus is not duplicated here.  Instead,
a simple check is put in place until that work is complete.

Signed-off-by: Elijah Newren <newren@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
Elijah Newren 2018-06-30 18:24:56 -07:00 committed by Junio C Hamano
parent cffbfad50d
commit 1b9fbefbe0
4 changed files with 17 additions and 13 deletions

View File

@ -1763,7 +1763,7 @@ static void am_run(struct am_state *state, int resume)
refresh_and_write_cache(); refresh_and_write_cache();
if (index_has_changes(&sb)) { if (index_has_changes(&the_index, &sb)) {
write_state_bool(state, "dirtyindex", 1); write_state_bool(state, "dirtyindex", 1);
die(_("Dirty index: cannot apply patches (dirty: %s)"), sb.buf); die(_("Dirty index: cannot apply patches (dirty: %s)"), sb.buf);
} }
@ -1820,7 +1820,7 @@ static void am_run(struct am_state *state, int resume)
* Applying the patch to an earlier tree and merging * Applying the patch to an earlier tree and merging
* the result may have produced the same tree as ours. * the result may have produced the same tree as ours.
*/ */
if (!apply_status && !index_has_changes(NULL)) { if (!apply_status && !index_has_changes(&the_index, NULL)) {
say(state, stdout, _("No changes -- Patch already applied.")); say(state, stdout, _("No changes -- Patch already applied."));
goto next; goto next;
} }
@ -1878,7 +1878,7 @@ static void am_resolve(struct am_state *state)
say(state, stdout, _("Applying: %.*s"), linelen(state->msg), state->msg); say(state, stdout, _("Applying: %.*s"), linelen(state->msg), state->msg);
if (!index_has_changes(NULL)) { if (!index_has_changes(&the_index, NULL)) {
printf_ln(_("No changes - did you forget to use 'git add'?\n" printf_ln(_("No changes - did you forget to use 'git add'?\n"
"If there is nothing left to stage, chances are that something else\n" "If there is nothing left to stage, chances are that something else\n"
"already introduced the same changes; you might want to skip this patch.")); "already introduced the same changes; you might want to skip this patch."));

11
cache.h
View File

@ -627,12 +627,13 @@ extern void move_index_extensions(struct index_state *dst, struct index_state *s
extern int unmerged_index(const struct index_state *); extern int unmerged_index(const struct index_state *);
/** /**
* Returns 1 if the index differs from HEAD, 0 otherwise. When on an unborn * Returns 1 if istate differs from HEAD, 0 otherwise. When on an unborn
* branch, returns 1 if there are entries in the index, 0 otherwise. If an * branch, returns 1 if there are entries in istate, 0 otherwise. If an
* strbuf is provided, the space-separated list of files that differ will be * strbuf is provided, the space-separated list of files that differ will
* appended to it. * be appended to it.
*/ */
extern int index_has_changes(struct strbuf *sb); extern int index_has_changes(const struct index_state *istate,
struct strbuf *sb);
extern int verify_path(const char *path, unsigned mode); extern int verify_path(const char *path, unsigned mode);
extern int strcmp_offset(const char *s1, const char *s2, size_t *first_change); extern int strcmp_offset(const char *s1, const char *s2, size_t *first_change);

View File

@ -1983,7 +1983,7 @@ int merge_trees(struct merge_options *o,
if (oid_eq(&common->object.oid, &merge->object.oid)) { if (oid_eq(&common->object.oid, &merge->object.oid)) {
struct strbuf sb = STRBUF_INIT; struct strbuf sb = STRBUF_INIT;
if (!o->call_depth && index_has_changes(&sb)) { if (!o->call_depth && index_has_changes(&the_index, &sb)) {
err(o, _("Dirty index: cannot merge (dirty: %s)"), err(o, _("Dirty index: cannot merge (dirty: %s)"),
sb.buf); sb.buf);
return 0; return 0;

View File

@ -1986,11 +1986,14 @@ int unmerged_index(const struct index_state *istate)
return 0; return 0;
} }
int index_has_changes(struct strbuf *sb) int index_has_changes(const struct index_state *istate, struct strbuf *sb)
{ {
struct object_id head; struct object_id head;
int i; int i;
if (istate != &the_index) {
BUG("index_has_changes cannot yet accept istate != &the_index; do_diff_cache needs updating first.");
}
if (!get_oid_tree("HEAD", &head)) { if (!get_oid_tree("HEAD", &head)) {
struct diff_options opt; struct diff_options opt;
@ -2008,12 +2011,12 @@ int index_has_changes(struct strbuf *sb)
diff_flush(&opt); diff_flush(&opt);
return opt.flags.has_changes != 0; return opt.flags.has_changes != 0;
} else { } else {
for (i = 0; sb && i < the_index.cache_nr; i++) { for (i = 0; sb && i < istate->cache_nr; i++) {
if (i) if (i)
strbuf_addch(sb, ' '); strbuf_addch(sb, ' ');
strbuf_addstr(sb, the_index.cache[i]->name); strbuf_addstr(sb, istate->cache[i]->name);
} }
return !!the_index.cache_nr; return !!istate->cache_nr;
} }
} }