[주의!] 문서의 이전 버전(에 수정)을 보고 있습니다. 최신 버전으로 이동
diff --git a/builtin/commit.c b/builtin/commit.c
index 2f45968222..25e26a2f70 100644
--- a/builtin/commit.c
+++ b/builtin/commit.c
@@ -125,7 +125,7 @@ static int all, also, interactive, patch_interactive, only, amend, signoff;
static int edit_flag = -1; /* unspecified */
static int quiet, verbose, no_verify, allow_empty, dry_run, renew_authorship;
static int config_commit_verbose = -1; /* unspecified */
-static int no_post_rewrite, allow_empty_message, pathspec_file_nul;
+static int no_post_rewrite, allow_empty_message = 1, pathspec_file_nul;
static const char *untracked_files_arg, *force_date, *ignore_submodule_arg, *ignored_arg;
static const char *sign_commit, *pathspec_from_file;
static struct strvec trailer_args = STRVEC_INIT;문제는 이대로 빌드하면 unit test가 실패하는 듯하다.
error: builder for '/nix/store/m9iqhqfxxqs7p6jdj2jcf9aq2ygfiv0a-git-2.47.2.drv' failed with exit code 2;
last 25 log lines:
> t3404-rebase-interactive.sh (Wstat: 256 (exited 1) Tests: 131 Failed: 3)
> Failed tests: 42-44
> Non-zero exit status: 1
> t7500-commit-template-squash-signoff.sh (Wstat: 256 (exited 1) Tests: 54 Failed: 5)
> Failed tests: 4, 8, 22, 24, 34
> Non-zero exit status: 1
> t7501-commit-basic-functionality.sh (Wstat: 256 (exited 1) Tests: 77 Failed: 4)
> Failed tests: 27, 29, 39, 47
> Non-zero exit status: 1
> t7507-commit-verbose.sh (Wstat: 256 (exited 1) Tests: 45 Failed: 23)
> Failed tests: 8-10, 13-14, 19-21, 23-24, 26-27, 29-30
> 32-33, 35-36, 38-39, 41-42, 44
> Non-zero exit status: 1
> t7502-commit-porcelain.sh (Wstat: 256 (exited 1) Tests: 81 Failed: 1)
> Failed test: 39
> Non-zero exit status: 1
> t7508-status.sh (Wstat: 256 (exited 1) Tests: 125 Failed: 66)
> Failed tests: 13-19, 21-35, 37-41, 50-54, 58-66, 69, 71-93
> 107
> Non-zero exit status: 1
> Files=1023, Tests=30126, 216 wallclock secs (10.62 usr 2.79 sys + 449.92 cusr 960.70 csys = 1424.03 CPU)
> Result: FAIL
> make[1]: *** [Makefile:73: prove] Error 1
> make[1]: Leaving directory '/build/git-2.47.2/t'
> make: *** [Makefile:3273: test] Error 2
For full logs, run 'nix log /nix/store/m9iqhqfxxqs7p6jdj2jcf9aq2ygfiv0a-git-2.47.2.drv'.
error: 1 dependencies of derivation '/nix/store/2i62rn1l27qy4gm30msn39i0ban9q5f1-git-2.47.2-fish-completions.drv' failed to build
error: 1 dependencies of derivation '/nix/store/hx9d5rydwzi4inqhbfi33azafafv7071-home-manager-path.drv' failed to build
error: 1 dependencies of derivation '/nix/store/whrrhjd3lwjv6kj6j7smd3xx1h3b1d3l-home-manager-generation.drv' failed to buildstruct delta_index {
unsigned long memsize;
const void *src_buf;
unsigned long src_size;
unsigned int hash_mask;
struct index_entry *hash[FLEX_ARRAY];
};
struct delta_index * create_delta_index(const void *buf, unsigned long bufsize)
{
unsigned int i, hsize, hmask, entries, prev_val, *hash_count;
const unsigned char *data, *buffer = buf;
struct delta_index *index;
struct unpacked_index_entry *entry, **hash;
struct index_entry *packed_entry, **packed_hash;
void *mem;
unsigned long memsize;
if (!buf || !bufsize)
return NULL;
entries = (bufsize - 1) / RABIN_WINDOW;
if (bufsize >= 0xffffffffUL) {
entries = 0xfffffffeU / RABIN_WINDOW;
}
hsize = entries / 4;
for (i = 4; (1u << i) < hsize; i++);
hsize = 1 << i;
hmask = hsize - 1;
/* allocate lookup index */
memsize = sizeof(*hash) * hsize +
sizeof(*entry) * entries;
mem = malloc(memsize);
if (!mem)
return NULL;
hash = mem;
mem = hash + hsize;
entry = mem;
memset(hash, 0, hsize * sizeof(*hash));
hash_count = calloc(hsize, sizeof(*hash_count));
if (!hash_count) {
free(hash);
return NULL;
}
prev_val = ~0;
for (data = buffer + entries * RABIN_WINDOW - RABIN_WINDOW;
data >= buffer;
data -= RABIN_WINDOW) {
unsigned int val = 0;
for (i = 1; i <= RABIN_WINDOW; i++)
val = ((val << 8) | data[i]) ^ T[val >> RABIN_SHIFT];
if (val == prev_val) {
entry[-1].entry.ptr = data + RABIN_WINDOW;
--entries;
} else {
prev_val = val;
i = val & hmask;
entry->entry.ptr = data + RABIN_WINDOW;
entry->entry.val = val;
entry->next = hash[i];
hash[i] = entry++;
hash_count[i]++;
}
}
for (i = 0; i < hsize; i++) {
int acc;
if (hash_count[i] <= HASH_LIMIT)
continue;
entries -= hash_count[i] - HASH_LIMIT;
entry = hash[i];
acc = 0;
do {
acc += hash_count[i] - HASH_LIMIT;
if (acc > 0) {
struct unpacked_index_entry *keep = entry;
do {
entry = entry->next;
acc -= HASH_LIMIT;
} while (acc > 0);
keep->next = entry->next;
}
entry = entry->next;
} while (entry);
}
free(hash_count);
memsize = sizeof(*index)
+ sizeof(*packed_hash) * (hsize+1)
+ sizeof(*packed_entry) * entries;
mem = malloc(memsize);
if (!mem) {
free(hash);
return NULL;
}
index = mem;
index->memsize = memsize;
index->src_buf = buf;
index->src_size = bufsize;
index->hash_mask = hmask;
mem = index->hash;
packed_hash = mem;
mem = packed_hash + (hsize+1);
packed_entry = mem;
for (i = 0; i < hsize; i++) {
packed_hash[i] = packed_entry;
for (entry = hash[i]; entry; entry = entry->next)
*packed_entry++ = entry->entry;
}
packed_hash[hsize] = packed_entry;
assert(packed_entry - (struct index_entry *)mem == entries);
free(hash);
return index;
}
void free_delta_index(struct delta_index *index)
{
free(index);
}
unsigned long sizeof_delta_index(struct delta_index *index)
{
if (index)
return index->memsize;
else
return 0;
}
#define MAX_OP_SIZE (5 + 5 + 1 + RABIN_WINDOW + 7)
void *
create_delta(const struct delta_index *index,
const void *trg_buf, unsigned long trg_size,
unsigned long *delta_size, unsigned long max_size)
{
unsigned int i, val;
off_t outpos, moff;
size_t l, outsize, msize;
int inscnt;
const unsigned char *ref_data, *ref_top, *data, *top;
unsigned char *out;
*delta_size = 0;
if (!trg_buf || !trg_size)
return NULL;
outpos = 0;
outsize = 8192;
if (max_size && outsize >= max_size)
outsize = max_size + MAX_OP_SIZE + 1;
out = malloc(outsize);
if (!out)
return NULL;
l = index->src_size;
while (l >= 0x80) {
out[outpos++] = l | 0x80;
l >>= 7;
}
out[outpos++] = l;
l = trg_size;
while (l >= 0x80) {
out[outpos++] = l | 0x80;
l >>= 7;
}
out[outpos++] = l;
ref_data = index->src_buf;
ref_top = ref_data + index->src_size;
data = trg_buf;
top = (const unsigned char *) trg_buf + trg_size;
outpos++;
val = 0;
for (i = 0; i < RABIN_WINDOW && data < top; i++, data++) {
out[outpos++] = *data;
val = ((val << 8) | *data) ^ T[val >> RABIN_SHIFT];
}
inscnt = i;
moff = 0;
msize = 0;
while (data < top) {
if (msize < 4096) {
struct index_entry *entry;
val ^= U[data[-RABIN_WINDOW]];
val = ((val << 8) | *data) ^ T[val >> RABIN_SHIFT];
i = val & index->hash_mask;
for (entry = index->hash[i]; entry < index->hash[i+1]; entry++) {
const unsigned char *ref = entry->ptr;
const unsigned char *src = data;
unsigned int ref_size = ref_top - ref;
if (entry->val != val)
continue;
if (ref_size > top - src)
ref_size = top - src;
if (ref_size <= msize)
break;
while (ref_size-- && *src++ == *ref)
ref++;
if (msize < ref - entry->ptr) {
msize = ref - entry->ptr;
moff = entry->ptr - ref_data;
if (msize >= 4096)
break;
}
}
}
if (msize < 4) {
if (!inscnt)
outpos++;
out[outpos++] = *data++;
inscnt++;
if (inscnt == 0x7f) {
out[outpos - inscnt - 1] = inscnt;
inscnt = 0;
}
msize = 0;
} else {
unsigned int left;
unsigned char *op;
if (inscnt) {
while (moff && ref_data[moff-1] == data[-1]) {
msize++;
moff--;
data--;
outpos--;
if (--inscnt)
continue;
outpos--;
inscnt--;
break;
}
out[outpos - inscnt - 1] = inscnt;
inscnt = 0;
}
left = (msize < 0x10000) ? 0 : (msize - 0x10000);
msize -= left;
op = out + outpos++;
i = 0x80;
if (moff & 0x000000ff)
out[outpos++] = moff >> 0, i |= 0x01;
if (moff & 0x0000ff00)
out[outpos++] = moff >> 8, i |= 0x02;
if (moff & 0x00ff0000)
out[outpos++] = moff >> 16, i |= 0x04;
if (moff & 0xff000000)
out[outpos++] = moff >> 24, i |= 0x08;
if (msize & 0x00ff)
out[outpos++] = msize >> 0, i |= 0x10;
if (msize & 0xff00)
out[outpos++] = msize >> 8, i |= 0x20;
*op = i;
data += msize;
moff += msize;
msize = left;
if (moff > 0xffffffff)
msize = 0;
if (msize < 4096) {
int j;
val = 0;
for (j = -RABIN_WINDOW; j < 0; j++)
val = ((val << 8) | data[j])
^ T[val >> RABIN_SHIFT];
}
}
if (outpos >= outsize - MAX_OP_SIZE) {
void *tmp = out;
outsize = outsize * 3 / 2;
if (max_size && outsize >= max_size)
outsize = max_size + MAX_OP_SIZE + 1;
if (max_size && outpos > max_size)
break;
out = realloc(out, outsize);
if (!out) {
free(tmp);
return NULL;
}
}
}
if (inscnt)
out[outpos - inscnt - 1] = inscnt;
if (max_size && outpos > max_size) {
free(out);
return NULL;
}
*delta_size = outpos;
return out;
}