Git fork

patch-id: use stable patch-id for rebases

Git doesn't persist patch-ids during the rebase process, so there is
no need to specifically invoke the unstable variant. Use the stable
logic for all internal patch-id calculations to minimize the number of
code paths and improve test coverage.

Signed-off-by: Jerry Zhang <jerry@skydio.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

authored by

Jerry Zhang and committed by
Junio C Hamano
51276c18 0570be79

+12 -16
+1 -1
builtin/log.c
··· 1694 struct object_id *patch_id; 1695 if (*commit_base_at(&commit_base, commit)) 1696 continue; 1697 - if (commit_patch_id(commit, &diffopt, &oid, 0, 1)) 1698 die(_("cannot get patch id")); 1699 ALLOC_GROW(bases->patch_id, bases->nr_patch_id + 1, bases->alloc_patch_id); 1700 patch_id = bases->patch_id + bases->nr_patch_id;
··· 1694 struct object_id *patch_id; 1695 if (*commit_base_at(&commit_base, commit)) 1696 continue; 1697 + if (commit_patch_id(commit, &diffopt, &oid, 0)) 1698 die(_("cannot get patch id")); 1699 ALLOC_GROW(bases->patch_id, bases->nr_patch_id + 1, bases->alloc_patch_id); 1700 patch_id = bases->patch_id + bases->nr_patch_id;
+4 -8
diff.c
··· 6174 } 6175 6176 /* returns 0 upon success, and writes result into oid */ 6177 - static int diff_get_patch_id(struct diff_options *options, struct object_id *oid, int diff_header_only, int stable) 6178 { 6179 struct diff_queue_struct *q = &diff_queued_diff; 6180 int i; ··· 6261 return error("unable to generate patch-id diff for %s", 6262 p->one->path); 6263 } 6264 - if (stable) 6265 - flush_one_hunk(oid, &ctx); 6266 } 6267 6268 - if (!stable) 6269 - the_hash_algo->final_oid_fn(oid, &ctx); 6270 - 6271 return 0; 6272 } 6273 6274 - int diff_flush_patch_id(struct diff_options *options, struct object_id *oid, int diff_header_only, int stable) 6275 { 6276 struct diff_queue_struct *q = &diff_queued_diff; 6277 int i; 6278 - int result = diff_get_patch_id(options, oid, diff_header_only, stable); 6279 6280 for (i = 0; i < q->nr; i++) 6281 diff_free_filepair(q->queue[i]);
··· 6174 } 6175 6176 /* returns 0 upon success, and writes result into oid */ 6177 + static int diff_get_patch_id(struct diff_options *options, struct object_id *oid, int diff_header_only) 6178 { 6179 struct diff_queue_struct *q = &diff_queued_diff; 6180 int i; ··· 6261 return error("unable to generate patch-id diff for %s", 6262 p->one->path); 6263 } 6264 + flush_one_hunk(oid, &ctx); 6265 } 6266 6267 return 0; 6268 } 6269 6270 + int diff_flush_patch_id(struct diff_options *options, struct object_id *oid, int diff_header_only) 6271 { 6272 struct diff_queue_struct *q = &diff_queued_diff; 6273 int i; 6274 + int result = diff_get_patch_id(options, oid, diff_header_only); 6275 6276 for (i = 0; i < q->nr; i++) 6277 diff_free_filepair(q->queue[i]);
+1 -1
diff.h
··· 634 int run_diff_index(struct rev_info *revs, unsigned int option); 635 636 int do_diff_cache(const struct object_id *, struct diff_options *); 637 - int diff_flush_patch_id(struct diff_options *, struct object_id *, int, int); 638 void flush_one_hunk(struct object_id *result, git_hash_ctx *ctx); 639 640 int diff_result_code(struct diff_options *, int);
··· 634 int run_diff_index(struct rev_info *revs, unsigned int option); 635 636 int do_diff_cache(const struct object_id *, struct diff_options *); 637 + int diff_flush_patch_id(struct diff_options *, struct object_id *, int); 638 void flush_one_hunk(struct object_id *result, git_hash_ctx *ctx); 639 640 int diff_result_code(struct diff_options *, int);
+5 -5
patch-ids.c
··· 11 } 12 13 int commit_patch_id(struct commit *commit, struct diff_options *options, 14 - struct object_id *oid, int diff_header_only, int stable) 15 { 16 if (!patch_id_defined(commit)) 17 return -1; ··· 22 else 23 diff_root_tree_oid(&commit->object.oid, "", options); 24 diffcore_std(options); 25 - return diff_flush_patch_id(options, oid, diff_header_only, stable); 26 } 27 28 /* ··· 48 b = container_of(entry_or_key, struct patch_id, ent); 49 50 if (is_null_oid(&a->patch_id) && 51 - commit_patch_id(a->commit, opt, &a->patch_id, 0, 0)) 52 return error("Could not get patch ID for %s", 53 oid_to_hex(&a->commit->object.oid)); 54 if (is_null_oid(&b->patch_id) && 55 - commit_patch_id(b->commit, opt, &b->patch_id, 0, 0)) 56 return error("Could not get patch ID for %s", 57 oid_to_hex(&b->commit->object.oid)); 58 return !oideq(&a->patch_id, &b->patch_id); ··· 82 struct object_id header_only_patch_id; 83 84 patch->commit = commit; 85 - if (commit_patch_id(commit, &ids->diffopts, &header_only_patch_id, 1, 0)) 86 return -1; 87 88 hashmap_entry_init(&patch->ent, oidhash(&header_only_patch_id));
··· 11 } 12 13 int commit_patch_id(struct commit *commit, struct diff_options *options, 14 + struct object_id *oid, int diff_header_only) 15 { 16 if (!patch_id_defined(commit)) 17 return -1; ··· 22 else 23 diff_root_tree_oid(&commit->object.oid, "", options); 24 diffcore_std(options); 25 + return diff_flush_patch_id(options, oid, diff_header_only); 26 } 27 28 /* ··· 48 b = container_of(entry_or_key, struct patch_id, ent); 49 50 if (is_null_oid(&a->patch_id) && 51 + commit_patch_id(a->commit, opt, &a->patch_id, 0)) 52 return error("Could not get patch ID for %s", 53 oid_to_hex(&a->commit->object.oid)); 54 if (is_null_oid(&b->patch_id) && 55 + commit_patch_id(b->commit, opt, &b->patch_id, 0)) 56 return error("Could not get patch ID for %s", 57 oid_to_hex(&b->commit->object.oid)); 58 return !oideq(&a->patch_id, &b->patch_id); ··· 82 struct object_id header_only_patch_id; 83 84 patch->commit = commit; 85 + if (commit_patch_id(commit, &ids->diffopts, &header_only_patch_id, 1)) 86 return -1; 87 88 hashmap_entry_init(&patch->ent, oidhash(&header_only_patch_id));
+1 -1
patch-ids.h
··· 20 }; 21 22 int commit_patch_id(struct commit *commit, struct diff_options *options, 23 - struct object_id *oid, int, int); 24 int init_patch_ids(struct repository *, struct patch_ids *); 25 int free_patch_ids(struct patch_ids *); 26
··· 20 }; 21 22 int commit_patch_id(struct commit *commit, struct diff_options *options, 23 + struct object_id *oid, int); 24 int init_patch_ids(struct repository *, struct patch_ids *); 25 int free_patch_ids(struct patch_ids *); 26