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>
This commit is contained in:

committed by
Junio C Hamano

parent
6f93d261fa
commit
a8f6855f48
@ -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;
|
||||
|
@ -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)
|
||||
{
|
||||
|
Reference in New Issue
Block a user