зеркало из https://github.com/microsoft/git.git
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 <johannes.schindelin@gmx.de> Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
Родитель
7e97e10033
Коммит
f8d83fb66c
|
@ -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;
|
||||
}
|
||||
|
||||
|
|
Загрузка…
Ссылка в новой задаче