From: Johannes Schindelin Date: Tue, 26 Jul 2016 16:05:57 +0000 (+0200) Subject: merge-recursive: clarify code in was_tracked() X-Git-Tag: v2.10.0-rc0~21^2~12 X-Git-Url: https://git.lorimer.id.au/gitweb.git/diff_plain/f8d83fb66c653fff0541067a0b5a0821d3f548f9 merge-recursive: clarify code in was_tracked() It can be puzzling to see that was_tracked() asks to get an index entry by name, but does not take a negative return value for an answer. The reason we have to do this is that cache_name_pos() only looks for entries in stage 0, even if nobody asked for any stage in particular. Let's rewrite the logic a little bit, to handle the easy case early: if cache_name_pos() returned a non-negative position, we know it is a match, and we do not even have to compare the name again (cache_name_pos() did that for us already). We can say right away: yes, this file was tracked. Only if there was no exact match do we need to look harder for any matching entry in stage 2. Signed-off-by: Johannes Schindelin Signed-off-by: Junio C Hamano --- diff --git a/merge-recursive.c b/merge-recursive.c index 1b6db87ef0..3a652b7ff9 100644 --- a/merge-recursive.c +++ b/merge-recursive.c @@ -667,23 +667,21 @@ static int was_tracked(const char *path) { int pos = cache_name_pos(path, strlen(path)); - if (pos < 0) - pos = -1 - pos; - while (pos < active_nr && - !strcmp(path, active_cache[pos]->name)) { - /* - * If stage #0, it is definitely tracked. - * If it has stage #2 then it was tracked - * before this merge started. All other - * cases the path was not tracked. - */ - switch (ce_stage(active_cache[pos])) { - case 0: - case 2: + if (0 <= pos) + /* we have been tracking this path */ + return 1; + + /* + * Look for an unmerged entry for the path, + * specifically stage #2, which would indicate + * that "our" side before the merge started + * had the path tracked (and resulted in a conflict). + */ + for (pos = -1 - pos; + pos < active_nr && !strcmp(path, active_cache[pos]->name); + pos++) + if (ce_stage(active_cache[pos]) == 2) return 1; - } - pos++; - } return 0; }