diff options
author | Kevin Willford <kewillf@microsoft.com> | 2016-07-29 12:19:18 -0400 |
---|---|---|
committer | Junio C Hamano <gitster@pobox.com> | 2016-07-29 13:23:03 -0700 |
commit | 683f17ec440afafd2b375fd1b7a80a1aca219b4f (patch) | |
tree | 6b0cf441fcc4069b5c128ffec4127fb610d2087f | |
parent | dfb7a1b4d0dafd53bf3980b3bd90668bf8d2a27f (diff) | |
download | git-683f17ec440afafd2b375fd1b7a80a1aca219b4f.tar.gz |
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>
-rw-r--r-- | patch-ids.c | 1 | ||||
-rw-r--r-- | patch-ids.h | 2 | ||||
-rw-r--r-- | revision.c | 18 |
3 files changed, 5 insertions, 16 deletions
diff --git a/patch-ids.c b/patch-ids.c index db31fa647a..bafaae2a6a 100644 --- a/patch-ids.c +++ b/patch-ids.c @@ -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; diff --git a/patch-ids.h b/patch-ids.h index 9569ee0d26..dea1ecda48 100644 --- a/patch-ids.h +++ b/patch-ids.h @@ -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 { diff --git a/revision.c b/revision.c index d30d1c4f80..233ec72073 100644 --- a/revision.c +++ b/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)) 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; + commit->object.flags |= cherry_flag; + id->commit->object.flags |= cherry_flag; } free_patch_ids(&ids); |