зеркало из https://github.com/microsoft/git.git
builtin/fast-export: convert to struct object_id
In addition to converting to struct object_id, write some hardcoded buffer sizes in terms of GIT_SHA1_RAWSZ. Signed-off-by: brian m. carlson <sandals@crustytoothpaste.net> Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
Родитель
6439b5d941
Коммит
273f8ee8c0
|
@ -212,7 +212,7 @@ static char *anonymize_blob(unsigned long *size)
|
||||||
return strbuf_detach(&out, NULL);
|
return strbuf_detach(&out, NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void export_blob(const unsigned char *sha1)
|
static void export_blob(const struct object_id *oid)
|
||||||
{
|
{
|
||||||
unsigned long size;
|
unsigned long size;
|
||||||
enum object_type type;
|
enum object_type type;
|
||||||
|
@ -223,34 +223,34 @@ static void export_blob(const unsigned char *sha1)
|
||||||
if (no_data)
|
if (no_data)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
if (is_null_sha1(sha1))
|
if (is_null_oid(oid))
|
||||||
return;
|
return;
|
||||||
|
|
||||||
object = lookup_object(sha1);
|
object = lookup_object(oid->hash);
|
||||||
if (object && object->flags & SHOWN)
|
if (object && object->flags & SHOWN)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
if (anonymize) {
|
if (anonymize) {
|
||||||
buf = anonymize_blob(&size);
|
buf = anonymize_blob(&size);
|
||||||
object = (struct object *)lookup_blob(sha1);
|
object = (struct object *)lookup_blob(oid->hash);
|
||||||
eaten = 0;
|
eaten = 0;
|
||||||
} else {
|
} else {
|
||||||
buf = read_sha1_file(sha1, &type, &size);
|
buf = read_sha1_file(oid->hash, &type, &size);
|
||||||
if (!buf)
|
if (!buf)
|
||||||
die ("Could not read blob %s", sha1_to_hex(sha1));
|
die ("Could not read blob %s", oid_to_hex(oid));
|
||||||
if (check_sha1_signature(sha1, buf, size, typename(type)) < 0)
|
if (check_sha1_signature(oid->hash, buf, size, typename(type)) < 0)
|
||||||
die("sha1 mismatch in blob %s", sha1_to_hex(sha1));
|
die("sha1 mismatch in blob %s", oid_to_hex(oid));
|
||||||
object = parse_object_buffer(sha1, type, size, buf, &eaten);
|
object = parse_object_buffer(oid->hash, type, size, buf, &eaten);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!object)
|
if (!object)
|
||||||
die("Could not read blob %s", sha1_to_hex(sha1));
|
die("Could not read blob %s", oid_to_hex(oid));
|
||||||
|
|
||||||
mark_next_object(object);
|
mark_next_object(object);
|
||||||
|
|
||||||
printf("blob\nmark :%"PRIu32"\ndata %lu\n", last_idnum, size);
|
printf("blob\nmark :%"PRIu32"\ndata %lu\n", last_idnum, size);
|
||||||
if (size && fwrite(buf, size, 1, stdout) != 1)
|
if (size && fwrite(buf, size, 1, stdout) != 1)
|
||||||
die_errno ("Could not write blob '%s'", sha1_to_hex(sha1));
|
die_errno ("Could not write blob '%s'", oid_to_hex(oid));
|
||||||
printf("\n");
|
printf("\n");
|
||||||
|
|
||||||
show_progress();
|
show_progress();
|
||||||
|
@ -323,19 +323,19 @@ static void print_path(const char *path)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static void *generate_fake_sha1(const void *old, size_t *len)
|
static void *generate_fake_oid(const void *old, size_t *len)
|
||||||
{
|
{
|
||||||
static uint32_t counter = 1; /* avoid null sha1 */
|
static uint32_t counter = 1; /* avoid null sha1 */
|
||||||
unsigned char *out = xcalloc(20, 1);
|
unsigned char *out = xcalloc(GIT_SHA1_RAWSZ, 1);
|
||||||
put_be32(out + 16, counter++);
|
put_be32(out + GIT_SHA1_RAWSZ - 4, counter++);
|
||||||
return out;
|
return out;
|
||||||
}
|
}
|
||||||
|
|
||||||
static const unsigned char *anonymize_sha1(const unsigned char *sha1)
|
static const unsigned char *anonymize_sha1(const struct object_id *oid)
|
||||||
{
|
{
|
||||||
static struct hashmap sha1s;
|
static struct hashmap sha1s;
|
||||||
size_t len = 20;
|
size_t len = GIT_SHA1_RAWSZ;
|
||||||
return anonymize_mem(&sha1s, generate_fake_sha1, sha1, &len);
|
return anonymize_mem(&sha1s, generate_fake_oid, oid, &len);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void show_filemodify(struct diff_queue_struct *q,
|
static void show_filemodify(struct diff_queue_struct *q,
|
||||||
|
@ -383,7 +383,7 @@ static void show_filemodify(struct diff_queue_struct *q,
|
||||||
if (no_data || S_ISGITLINK(spec->mode))
|
if (no_data || S_ISGITLINK(spec->mode))
|
||||||
printf("M %06o %s ", spec->mode,
|
printf("M %06o %s ", spec->mode,
|
||||||
sha1_to_hex(anonymize ?
|
sha1_to_hex(anonymize ?
|
||||||
anonymize_sha1(spec->oid.hash) :
|
anonymize_sha1(&spec->oid) :
|
||||||
spec->oid.hash));
|
spec->oid.hash));
|
||||||
else {
|
else {
|
||||||
struct object *object = lookup_object(spec->oid.hash);
|
struct object *object = lookup_object(spec->oid.hash);
|
||||||
|
@ -572,7 +572,7 @@ static void handle_commit(struct commit *commit, struct rev_info *rev)
|
||||||
/* Export the referenced blobs, and remember the marks. */
|
/* Export the referenced blobs, and remember the marks. */
|
||||||
for (i = 0; i < diff_queued_diff.nr; i++)
|
for (i = 0; i < diff_queued_diff.nr; i++)
|
||||||
if (!S_ISGITLINK(diff_queued_diff.queue[i]->two->mode))
|
if (!S_ISGITLINK(diff_queued_diff.queue[i]->two->mode))
|
||||||
export_blob(diff_queued_diff.queue[i]->two->oid.hash);
|
export_blob(&diff_queued_diff.queue[i]->two->oid);
|
||||||
|
|
||||||
refname = commit->util;
|
refname = commit->util;
|
||||||
if (anonymize) {
|
if (anonymize) {
|
||||||
|
@ -797,14 +797,14 @@ static void get_tags_and_duplicates(struct rev_cmdline_info *info)
|
||||||
|
|
||||||
for (i = 0; i < info->nr; i++) {
|
for (i = 0; i < info->nr; i++) {
|
||||||
struct rev_cmdline_entry *e = info->rev + i;
|
struct rev_cmdline_entry *e = info->rev + i;
|
||||||
unsigned char sha1[20];
|
struct object_id oid;
|
||||||
struct commit *commit;
|
struct commit *commit;
|
||||||
char *full_name;
|
char *full_name;
|
||||||
|
|
||||||
if (e->flags & UNINTERESTING)
|
if (e->flags & UNINTERESTING)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
if (dwim_ref(e->name, strlen(e->name), sha1, &full_name) != 1)
|
if (dwim_ref(e->name, strlen(e->name), oid.hash, &full_name) != 1)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
if (refspecs) {
|
if (refspecs) {
|
||||||
|
@ -828,7 +828,7 @@ static void get_tags_and_duplicates(struct rev_cmdline_info *info)
|
||||||
case OBJ_COMMIT:
|
case OBJ_COMMIT:
|
||||||
break;
|
break;
|
||||||
case OBJ_BLOB:
|
case OBJ_BLOB:
|
||||||
export_blob(commit->object.oid.hash);
|
export_blob(&commit->object.oid);
|
||||||
continue;
|
continue;
|
||||||
default: /* OBJ_TAG (nested tags) is already handled */
|
default: /* OBJ_TAG (nested tags) is already handled */
|
||||||
warning("Tag points to object of unexpected type %s, skipping.",
|
warning("Tag points to object of unexpected type %s, skipping.",
|
||||||
|
@ -912,7 +912,7 @@ static void import_marks(char *input_file)
|
||||||
while (fgets(line, sizeof(line), f)) {
|
while (fgets(line, sizeof(line), f)) {
|
||||||
uint32_t mark;
|
uint32_t mark;
|
||||||
char *line_end, *mark_end;
|
char *line_end, *mark_end;
|
||||||
unsigned char sha1[20];
|
struct object_id oid;
|
||||||
struct object *object;
|
struct object *object;
|
||||||
struct commit *commit;
|
struct commit *commit;
|
||||||
enum object_type type;
|
enum object_type type;
|
||||||
|
@ -924,28 +924,28 @@ static void import_marks(char *input_file)
|
||||||
|
|
||||||
mark = strtoumax(line + 1, &mark_end, 10);
|
mark = strtoumax(line + 1, &mark_end, 10);
|
||||||
if (!mark || mark_end == line + 1
|
if (!mark || mark_end == line + 1
|
||||||
|| *mark_end != ' ' || get_sha1_hex(mark_end + 1, sha1))
|
|| *mark_end != ' ' || get_oid_hex(mark_end + 1, &oid))
|
||||||
die("corrupt mark line: %s", line);
|
die("corrupt mark line: %s", line);
|
||||||
|
|
||||||
if (last_idnum < mark)
|
if (last_idnum < mark)
|
||||||
last_idnum = mark;
|
last_idnum = mark;
|
||||||
|
|
||||||
type = sha1_object_info(sha1, NULL);
|
type = sha1_object_info(oid.hash, NULL);
|
||||||
if (type < 0)
|
if (type < 0)
|
||||||
die("object not found: %s", sha1_to_hex(sha1));
|
die("object not found: %s", oid_to_hex(&oid));
|
||||||
|
|
||||||
if (type != OBJ_COMMIT)
|
if (type != OBJ_COMMIT)
|
||||||
/* only commits */
|
/* only commits */
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
commit = lookup_commit(sha1);
|
commit = lookup_commit(oid.hash);
|
||||||
if (!commit)
|
if (!commit)
|
||||||
die("not a commit? can't happen: %s", sha1_to_hex(sha1));
|
die("not a commit? can't happen: %s", oid_to_hex(&oid));
|
||||||
|
|
||||||
object = &commit->object;
|
object = &commit->object;
|
||||||
|
|
||||||
if (object->flags & SHOWN)
|
if (object->flags & SHOWN)
|
||||||
error("Object %s already has a mark", sha1_to_hex(sha1));
|
error("Object %s already has a mark", oid_to_hex(&oid));
|
||||||
|
|
||||||
mark_object(object, mark);
|
mark_object(object, mark);
|
||||||
|
|
||||||
|
|
Загрузка…
Ссылка в новой задаче