mirror of
https://github.com/git/git.git
synced 2024-11-25 02:44:48 +08:00
Merge branch 'jk/patch-ids-no-merges' into maint
"git log --cherry-pick" used to include merge commits as candidates to be matched up with other commits, resulting a lot of wasted time. The patch-id generation logic has been updated to ignore merges to avoid the wastage. * jk/patch-ids-no-merges: patch-ids: refuse to compute patch-id for merge commit patch-ids: turn off rename detection
This commit is contained in:
commit
35ca3e538d
16
patch-ids.c
16
patch-ids.c
@ -4,9 +4,18 @@
|
||||
#include "sha1-lookup.h"
|
||||
#include "patch-ids.h"
|
||||
|
||||
static int patch_id_defined(struct commit *commit)
|
||||
{
|
||||
/* must be 0 or 1 parents */
|
||||
return !commit->parents || !commit->parents->next;
|
||||
}
|
||||
|
||||
int commit_patch_id(struct commit *commit, struct diff_options *options,
|
||||
unsigned char *sha1, int diff_header_only)
|
||||
{
|
||||
if (!patch_id_defined(commit))
|
||||
return -1;
|
||||
|
||||
if (commit->parents)
|
||||
diff_tree_sha1(commit->parents->item->object.oid.hash,
|
||||
commit->object.oid.hash, "", options);
|
||||
@ -45,6 +54,7 @@ int init_patch_ids(struct patch_ids *ids)
|
||||
{
|
||||
memset(ids, 0, sizeof(*ids));
|
||||
diff_setup(&ids->diffopts);
|
||||
ids->diffopts.detect_rename = 0;
|
||||
DIFF_OPT_SET(&ids->diffopts, RECURSIVE);
|
||||
diff_setup_done(&ids->diffopts);
|
||||
hashmap_init(&ids->patches, (hashmap_cmp_fn)patch_id_cmp, 256);
|
||||
@ -76,6 +86,9 @@ struct patch_id *has_commit_patch_id(struct commit *commit,
|
||||
{
|
||||
struct patch_id patch;
|
||||
|
||||
if (!patch_id_defined(commit))
|
||||
return NULL;
|
||||
|
||||
memset(&patch, 0, sizeof(patch));
|
||||
if (init_patch_id_entry(&patch, commit, ids))
|
||||
return NULL;
|
||||
@ -88,6 +101,9 @@ struct patch_id *add_commit_patch_id(struct commit *commit,
|
||||
{
|
||||
struct patch_id *key = xcalloc(1, sizeof(*key));
|
||||
|
||||
if (!patch_id_defined(commit))
|
||||
return NULL;
|
||||
|
||||
if (init_patch_id_entry(key, commit, ids)) {
|
||||
free(key);
|
||||
return NULL;
|
||||
|
Loading…
Reference in New Issue
Block a user