Johannes Schindelin <[email protected]> writes:
> I agree that the comment is not very good currently. But I disagree that
> we are better off without any comment here.
I meant we are better off without your particular version of comment
which is misleading. I am all for a better comment to help those
who are new to the codepath.
> I would like to propose this diff instead (it is larger, but with a net
> savings of one line):
>
> -- snipsnap --
> diff --git a/merge-recursive.c b/merge-recursive.c
> index d5a593c..0eda51a 100644
> --- a/merge-recursive.c
> +++ b/merge-recursive.c
> @@ -658,24 +658,22 @@ 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 (pos >= 0)
> + return pos < active_nr;
> + /*
> + * cache_name_pos() looks for stage == 0, even if we did not ask for
> + * it. Let's look for stage == 2 now.
> + */
I think this keeps the same phrasing from the original that makes
the comment misleading. It "looks for stage == 0" is not the whole
story but only half. It looks for a place to insert the path at
stage #0" is. Your half is used by the "if (0 <= pos)" you split
out into a separate statement above already, and the untold half is
needed to explain why this loop is correct.
It returns the place to insert stage #0 entry, so if you are looking
for stage #1 or higher, you only have to loop while the path
matches, because the entries are sorted by <path, stage>.
And with that understanding, there is no strong reason to special
case "ah, we found stage #0 entry" at all.
> + for (pos = -1 - pos; pos < active_nr &&
> + !strcmp(path, active_cache[pos]->name); pos++)
> /*
> * 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 (ce_stage(active_cache[pos]) == 2)
> return 1;
> - }
> - pos++;
> - }
> return 0;
> }
>
--
To unsubscribe from this list: send the line "unsubscribe git" in
the body of a message to [email protected]
More majordomo info at http://vger.kernel.org/majordomo-info.html