summaryrefslogtreecommitdiff
path: root/builtin
diff options
context:
space:
mode:
authorStephen Boyd <sboyd@kernel.org>2019-04-26 23:51:57 (GMT)
committerJunio C Hamano <gitster@pobox.com>2019-05-08 10:27:43 (GMT)
commita8f6855f48fd474719e92eecc66c29a28fdc0f46 (patch)
tree5ff4baed03ea6955b7f3c6b1b0f89b862e2f61c5 /builtin
parent6f93d261fa8ca6a84c2e03e20558c0ddca3c05c3 (diff)
downloadgit-a8f6855f48fd474719e92eecc66c29a28fdc0f46.zip
git-a8f6855f48fd474719e92eecc66c29a28fdc0f46.tar.gz
git-a8f6855f48fd474719e92eecc66c29a28fdc0f46.tar.bz2
format-patch: make --base patch-id output stable
We weren't flushing the context each time we processed a hunk in the patch-id generation code in diff.c, but we were doing that when we generated "stable" patch-ids with the 'patch-id' tool. Let's port that similar logic over from patch-id.c into diff.c so we can get the same hash when we're generating patch-ids for 'format-patch --base=' types of command invocations. Cc: Xiaolong Ye <xiaolong.ye@intel.com> Signed-off-by: Stephen Boyd <sboyd@kernel.org> Signed-off-by: Junio C Hamano <gitster@pobox.com>
Diffstat (limited to 'builtin')
-rw-r--r--builtin/log.c2
-rw-r--r--builtin/patch-id.c17
2 files changed, 2 insertions, 17 deletions
diff --git a/builtin/log.c b/builtin/log.c
index e43ee12..147850d 100644
--- a/builtin/log.c
+++ b/builtin/log.c
@@ -1435,7 +1435,7 @@ static void prepare_bases(struct base_tree_info *bases,
struct object_id *patch_id;
if (*commit_base_at(&commit_base, commit))
continue;
- if (commit_patch_id(commit, &diffopt, &oid, 0))
+ if (commit_patch_id(commit, &diffopt, &oid, 0, 1))
die(_("cannot get patch id"));
ALLOC_GROW(bases->patch_id, bases->nr_patch_id + 1, bases->alloc_patch_id);
patch_id = bases->patch_id + bases->nr_patch_id;
diff --git a/builtin/patch-id.c b/builtin/patch-id.c
index 970d0d3..bd28b80 100644
--- a/builtin/patch-id.c
+++ b/builtin/patch-id.c
@@ -1,5 +1,6 @@
#include "builtin.h"
#include "config.h"
+#include "diff.h"
static void flush_current_id(int patchlen, struct object_id *id, struct object_id *result)
{
@@ -54,22 +55,6 @@ static int scan_hunk_header(const char *p, int *p_before, int *p_after)
return 1;
}
-static void flush_one_hunk(struct object_id *result, git_SHA_CTX *ctx)
-{
- unsigned char hash[GIT_MAX_RAWSZ];
- unsigned short carry = 0;
- int i;
-
- git_SHA1_Final(hash, ctx);
- git_SHA1_Init(ctx);
- /* 20-byte sum, with carry */
- for (i = 0; i < GIT_SHA1_RAWSZ; ++i) {
- carry += result->hash[i] + hash[i];
- result->hash[i] = carry;
- carry >>= 8;
- }
-}
-
static int get_one_patchid(struct object_id *next_oid, struct object_id *result,
struct strbuf *line_buf, int stable)
{