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:
parent
dfb7a1b4d0
commit
683f17ec44
@ -43,6 +43,7 @@ static int init_patch_id_entry(struct patch_id *patch,
|
|||||||
struct commit *commit,
|
struct commit *commit,
|
||||||
struct patch_ids *ids)
|
struct patch_ids *ids)
|
||||||
{
|
{
|
||||||
|
patch->commit = commit;
|
||||||
if (commit_patch_id(commit, &ids->diffopts, patch->patch_id))
|
if (commit_patch_id(commit, &ids->diffopts, patch->patch_id))
|
||||||
return -1;
|
return -1;
|
||||||
|
|
||||||
|
@ -4,7 +4,7 @@
|
|||||||
struct patch_id {
|
struct patch_id {
|
||||||
struct hashmap_entry ent;
|
struct hashmap_entry ent;
|
||||||
unsigned char patch_id[GIT_SHA1_RAWSZ];
|
unsigned char patch_id[GIT_SHA1_RAWSZ];
|
||||||
char seen;
|
struct commit *commit;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct patch_ids {
|
struct patch_ids {
|
||||||
|
18
revision.c
18
revision.c
@ -846,7 +846,7 @@ static void cherry_pick_list(struct commit_list *list, struct rev_info *revs)
|
|||||||
*/
|
*/
|
||||||
if (left_first != !!(flags & SYMMETRIC_LEFT))
|
if (left_first != !!(flags & SYMMETRIC_LEFT))
|
||||||
continue;
|
continue;
|
||||||
commit->util = add_commit_patch_id(commit, &ids);
|
add_commit_patch_id(commit, &ids);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* either cherry_mark or cherry_pick are true */
|
/* 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);
|
id = has_commit_patch_id(commit, &ids);
|
||||||
if (!id)
|
if (!id)
|
||||||
continue;
|
continue;
|
||||||
id->seen = 1;
|
|
||||||
commit->object.flags |= cherry_flag;
|
commit->object.flags |= cherry_flag;
|
||||||
}
|
id->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;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
free_patch_ids(&ids);
|
free_patch_ids(&ids);
|
||||||
|
Loading…
Reference in New Issue
Block a user