patch-ids: replace the seen indicator with a commit pointer

The cherry_pick_list was looping through the original side checking the
seen indicator and setting the cherry_flag on the commit.  If we save
off the commit in the patch_id we can set the cherry_flag on the correct
commit when running through the other side when a patch_id match is found.

Signed-off-by: Kevin Willford <kcwillford@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
Kevin Willford 2016-07-29 12:19:18 -04:00 коммит произвёл Junio C Hamano
Родитель dfb7a1b4d0
Коммит 683f17ec44
3 изменённых файлов: 5 добавлений и 16 удалений

Просмотреть файл

@ -43,6 +43,7 @@ static int init_patch_id_entry(struct patch_id *patch,
struct commit *commit,
struct patch_ids *ids)
{
patch->commit = commit;
if (commit_patch_id(commit, &ids->diffopts, patch->patch_id))
return -1;

Просмотреть файл

@ -4,7 +4,7 @@
struct patch_id {
struct hashmap_entry ent;
unsigned char patch_id[GIT_SHA1_RAWSZ];
char seen;
struct commit *commit;
};
struct patch_ids {

Просмотреть файл

@ -846,7 +846,7 @@ static void cherry_pick_list(struct commit_list *list, struct rev_info *revs)
*/
if (left_first != !!(flags & SYMMETRIC_LEFT))
continue;
commit->util = add_commit_patch_id(commit, &ids);
add_commit_patch_id(commit, &ids);
}
/* either cherry_mark or cherry_pick are true */
@ -873,21 +873,9 @@ static void cherry_pick_list(struct commit_list *list, struct rev_info *revs)
id = has_commit_patch_id(commit, &ids);
if (!id)
continue;
id->seen = 1;
commit->object.flags |= cherry_flag;
}
/* Now check the original side for seen ones */
for (p = list; p; p = p->next) {
struct commit *commit = p->item;
struct patch_id *ent;
ent = commit->util;
if (!ent)
continue;
if (ent->seen)
commit->object.flags |= cherry_flag;
commit->util = NULL;
id->commit->object.flags |= cherry_flag;
}
free_patch_ids(&ids);