Merge branch 'po/read-graft-line'
Conversion from uchar[20] to struct object_id continues; this is to ensure that we do not assume sizeof(struct object_id) is the same as the length of SHA-1 hash (or length of longest hash we support). * po/read-graft-line: commit: rewrite read_graft_line commit: allocate array using object_id size commit: replace the raw buffer with strbuf in read_graft_line sha1_file: fix definition of null_sha1
This commit is contained in:
commit
8b36f0b196
@ -488,7 +488,7 @@ static int read_ancestry(const char *graft_file)
|
||||
return -1;
|
||||
while (!strbuf_getwholeline(&buf, fp, '\n')) {
|
||||
/* The format is just "Commit Parent1 Parent2 ...\n" */
|
||||
struct commit_graft *graft = read_graft_line(buf.buf, buf.len);
|
||||
struct commit_graft *graft = read_graft_line(&buf);
|
||||
if (graft)
|
||||
register_commit_graft(graft, 0);
|
||||
}
|
||||
|
46
commit.c
46
commit.c
@ -134,35 +134,41 @@ int register_commit_graft(struct commit_graft *graft, int ignore_dups)
|
||||
return 0;
|
||||
}
|
||||
|
||||
struct commit_graft *read_graft_line(char *buf, int len)
|
||||
struct commit_graft *read_graft_line(struct strbuf *line)
|
||||
{
|
||||
/* The format is just "Commit Parent1 Parent2 ...\n" */
|
||||
int i;
|
||||
int i, phase;
|
||||
const char *tail = NULL;
|
||||
struct commit_graft *graft = NULL;
|
||||
const int entry_size = GIT_SHA1_HEXSZ + 1;
|
||||
struct object_id dummy_oid, *oid;
|
||||
|
||||
while (len && isspace(buf[len-1]))
|
||||
buf[--len] = '\0';
|
||||
if (buf[0] == '#' || buf[0] == '\0')
|
||||
strbuf_rtrim(line);
|
||||
if (!line->len || line->buf[0] == '#')
|
||||
return NULL;
|
||||
if ((len + 1) % entry_size)
|
||||
goto bad_graft_data;
|
||||
i = (len + 1) / entry_size - 1;
|
||||
graft = xmalloc(st_add(sizeof(*graft), st_mult(GIT_SHA1_RAWSZ, i)));
|
||||
graft->nr_parent = i;
|
||||
if (get_oid_hex(buf, &graft->oid))
|
||||
goto bad_graft_data;
|
||||
for (i = GIT_SHA1_HEXSZ; i < len; i += entry_size) {
|
||||
if (buf[i] != ' ')
|
||||
goto bad_graft_data;
|
||||
if (get_sha1_hex(buf + i + 1, graft->parent[i/entry_size].hash))
|
||||
/*
|
||||
* phase 0 verifies line, counts hashes in line and allocates graft
|
||||
* phase 1 fills graft
|
||||
*/
|
||||
for (phase = 0; phase < 2; phase++) {
|
||||
oid = graft ? &graft->oid : &dummy_oid;
|
||||
if (parse_oid_hex(line->buf, oid, &tail))
|
||||
goto bad_graft_data;
|
||||
for (i = 0; *tail != '\0'; i++) {
|
||||
oid = graft ? &graft->parent[i] : &dummy_oid;
|
||||
if (!isspace(*tail++) || parse_oid_hex(tail, oid, &tail))
|
||||
goto bad_graft_data;
|
||||
}
|
||||
if (!graft) {
|
||||
graft = xmalloc(st_add(sizeof(*graft),
|
||||
st_mult(sizeof(struct object_id), i)));
|
||||
graft->nr_parent = i;
|
||||
}
|
||||
}
|
||||
return graft;
|
||||
|
||||
bad_graft_data:
|
||||
error("bad graft data: %s", buf);
|
||||
free(graft);
|
||||
error("bad graft data: %s", line->buf);
|
||||
assert(!graft);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
@ -174,7 +180,7 @@ static int read_graft_file(const char *graft_file)
|
||||
return -1;
|
||||
while (!strbuf_getwholeline(&buf, fp, '\n')) {
|
||||
/* The format is just "Commit Parent1 Parent2 ...\n" */
|
||||
struct commit_graft *graft = read_graft_line(buf.buf, buf.len);
|
||||
struct commit_graft *graft = read_graft_line(&buf);
|
||||
if (!graft)
|
||||
continue;
|
||||
if (register_commit_graft(graft, 1))
|
||||
|
2
commit.h
2
commit.h
@ -247,7 +247,7 @@ struct commit_graft {
|
||||
};
|
||||
typedef int (*each_commit_graft_fn)(const struct commit_graft *, void *);
|
||||
|
||||
struct commit_graft *read_graft_line(char *buf, int len);
|
||||
struct commit_graft *read_graft_line(struct strbuf *line);
|
||||
int register_commit_graft(struct commit_graft *, int);
|
||||
struct commit_graft *lookup_commit_graft(const struct object_id *oid);
|
||||
|
||||
|
@ -30,7 +30,7 @@
|
||||
#include "quote.h"
|
||||
#include "packfile.h"
|
||||
|
||||
const unsigned char null_sha1[20];
|
||||
const unsigned char null_sha1[GIT_MAX_RAWSZ];
|
||||
const struct object_id null_oid;
|
||||
const struct object_id empty_tree_oid = {
|
||||
EMPTY_TREE_SHA1_BIN_LITERAL
|
||||
|
Loading…
Reference in New Issue
Block a user