mirror of
https://github.com/git/git.git
synced 2024-06-01 21:46:10 +02:00
bundle: convert to struct object_id
Convert the bundle code, plus the sole external user of struct ref_list_entry, to use struct object_id. Include cache.h from within bundle.h to provide the definition. Convert some of the hash parsing code to use parse_oid_hex to avoid needing to hard-code constant values. Signed-off-by: brian m. carlson <sandals@crustytoothpaste.net> Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
parent
af6730e730
commit
b8607f35b1
33
bundle.c
33
bundle.c
|
@ -12,11 +12,11 @@
|
||||||
|
|
||||||
static const char bundle_signature[] = "# v2 git bundle\n";
|
static const char bundle_signature[] = "# v2 git bundle\n";
|
||||||
|
|
||||||
static void add_to_ref_list(const unsigned char *sha1, const char *name,
|
static void add_to_ref_list(const struct object_id *oid, const char *name,
|
||||||
struct ref_list *list)
|
struct ref_list *list)
|
||||||
{
|
{
|
||||||
ALLOC_GROW(list->list, list->nr + 1, list->alloc);
|
ALLOC_GROW(list->list, list->nr + 1, list->alloc);
|
||||||
hashcpy(list->list[list->nr].sha1, sha1);
|
oidcpy(&list->list[list->nr].oid, oid);
|
||||||
list->list[list->nr].name = xstrdup(name);
|
list->list[list->nr].name = xstrdup(name);
|
||||||
list->nr++;
|
list->nr++;
|
||||||
}
|
}
|
||||||
|
@ -40,8 +40,9 @@ static int parse_bundle_header(int fd, struct bundle_header *header,
|
||||||
/* The bundle header ends with an empty line */
|
/* The bundle header ends with an empty line */
|
||||||
while (!strbuf_getwholeline_fd(&buf, fd, '\n') &&
|
while (!strbuf_getwholeline_fd(&buf, fd, '\n') &&
|
||||||
buf.len && buf.buf[0] != '\n') {
|
buf.len && buf.buf[0] != '\n') {
|
||||||
unsigned char sha1[20];
|
struct object_id oid;
|
||||||
int is_prereq = 0;
|
int is_prereq = 0;
|
||||||
|
const char *p;
|
||||||
|
|
||||||
if (*buf.buf == '-') {
|
if (*buf.buf == '-') {
|
||||||
is_prereq = 1;
|
is_prereq = 1;
|
||||||
|
@ -54,9 +55,9 @@ static int parse_bundle_header(int fd, struct bundle_header *header,
|
||||||
* Prerequisites have object name that is optionally
|
* Prerequisites have object name that is optionally
|
||||||
* followed by SP and subject line.
|
* followed by SP and subject line.
|
||||||
*/
|
*/
|
||||||
if (get_sha1_hex(buf.buf, sha1) ||
|
if (parse_oid_hex(buf.buf, &oid, &p) ||
|
||||||
(buf.len > 40 && !isspace(buf.buf[40])) ||
|
(*p && !isspace(*p)) ||
|
||||||
(!is_prereq && buf.len <= 40)) {
|
(!is_prereq && !*p)) {
|
||||||
if (report_path)
|
if (report_path)
|
||||||
error(_("unrecognized header: %s%s (%d)"),
|
error(_("unrecognized header: %s%s (%d)"),
|
||||||
(is_prereq ? "-" : ""), buf.buf, (int)buf.len);
|
(is_prereq ? "-" : ""), buf.buf, (int)buf.len);
|
||||||
|
@ -64,9 +65,9 @@ static int parse_bundle_header(int fd, struct bundle_header *header,
|
||||||
break;
|
break;
|
||||||
} else {
|
} else {
|
||||||
if (is_prereq)
|
if (is_prereq)
|
||||||
add_to_ref_list(sha1, "", &header->prerequisites);
|
add_to_ref_list(&oid, "", &header->prerequisites);
|
||||||
else
|
else
|
||||||
add_to_ref_list(sha1, buf.buf + 41, &header->references);
|
add_to_ref_list(&oid, p + 1, &header->references);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -115,7 +116,7 @@ static int list_refs(struct ref_list *r, int argc, const char **argv)
|
||||||
if (j == argc)
|
if (j == argc)
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
printf("%s %s\n", sha1_to_hex(r->list[i].sha1),
|
printf("%s %s\n", oid_to_hex(&r->list[i].oid),
|
||||||
r->list[i].name);
|
r->list[i].name);
|
||||||
}
|
}
|
||||||
return 0;
|
return 0;
|
||||||
|
@ -141,7 +142,7 @@ int verify_bundle(struct bundle_header *header, int verbose)
|
||||||
init_revisions(&revs, NULL);
|
init_revisions(&revs, NULL);
|
||||||
for (i = 0; i < p->nr; i++) {
|
for (i = 0; i < p->nr; i++) {
|
||||||
struct ref_list_entry *e = p->list + i;
|
struct ref_list_entry *e = p->list + i;
|
||||||
struct object *o = parse_object(e->sha1);
|
struct object *o = parse_object(e->oid.hash);
|
||||||
if (o) {
|
if (o) {
|
||||||
o->flags |= PREREQ_MARK;
|
o->flags |= PREREQ_MARK;
|
||||||
add_pending_object(&revs, o, e->name);
|
add_pending_object(&revs, o, e->name);
|
||||||
|
@ -149,7 +150,7 @@ int verify_bundle(struct bundle_header *header, int verbose)
|
||||||
}
|
}
|
||||||
if (++ret == 1)
|
if (++ret == 1)
|
||||||
error("%s", message);
|
error("%s", message);
|
||||||
error("%s %s", sha1_to_hex(e->sha1), e->name);
|
error("%s %s", oid_to_hex(&e->oid), e->name);
|
||||||
}
|
}
|
||||||
if (revs.pending.nr != p->nr)
|
if (revs.pending.nr != p->nr)
|
||||||
return ret;
|
return ret;
|
||||||
|
@ -285,16 +286,16 @@ static int compute_and_write_prerequisites(int bundle_fd,
|
||||||
return -1;
|
return -1;
|
||||||
rls_fout = xfdopen(rls.out, "r");
|
rls_fout = xfdopen(rls.out, "r");
|
||||||
while (strbuf_getwholeline(&buf, rls_fout, '\n') != EOF) {
|
while (strbuf_getwholeline(&buf, rls_fout, '\n') != EOF) {
|
||||||
unsigned char sha1[20];
|
struct object_id oid;
|
||||||
if (buf.len > 0 && buf.buf[0] == '-') {
|
if (buf.len > 0 && buf.buf[0] == '-') {
|
||||||
write_or_die(bundle_fd, buf.buf, buf.len);
|
write_or_die(bundle_fd, buf.buf, buf.len);
|
||||||
if (!get_sha1_hex(buf.buf + 1, sha1)) {
|
if (!get_oid_hex(buf.buf + 1, &oid)) {
|
||||||
struct object *object = parse_object_or_die(sha1, buf.buf);
|
struct object *object = parse_object_or_die(oid.hash, buf.buf);
|
||||||
object->flags |= UNINTERESTING;
|
object->flags |= UNINTERESTING;
|
||||||
add_pending_object(revs, object, buf.buf);
|
add_pending_object(revs, object, buf.buf);
|
||||||
}
|
}
|
||||||
} else if (!get_sha1_hex(buf.buf, sha1)) {
|
} else if (!get_oid_hex(buf.buf, &oid)) {
|
||||||
struct object *object = parse_object_or_die(sha1, buf.buf);
|
struct object *object = parse_object_or_die(oid.hash, buf.buf);
|
||||||
object->flags |= SHOWN;
|
object->flags |= SHOWN;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
4
bundle.h
4
bundle.h
|
@ -1,10 +1,12 @@
|
||||||
#ifndef BUNDLE_H
|
#ifndef BUNDLE_H
|
||||||
#define BUNDLE_H
|
#define BUNDLE_H
|
||||||
|
|
||||||
|
#include "cache.h"
|
||||||
|
|
||||||
struct ref_list {
|
struct ref_list {
|
||||||
unsigned int nr, alloc;
|
unsigned int nr, alloc;
|
||||||
struct ref_list_entry {
|
struct ref_list_entry {
|
||||||
unsigned char sha1[20];
|
struct object_id oid;
|
||||||
char *name;
|
char *name;
|
||||||
} *list;
|
} *list;
|
||||||
};
|
};
|
||||||
|
|
|
@ -87,7 +87,7 @@ static struct ref *get_refs_from_bundle(struct transport *transport, int for_pus
|
||||||
for (i = 0; i < data->header.references.nr; i++) {
|
for (i = 0; i < data->header.references.nr; i++) {
|
||||||
struct ref_list_entry *e = data->header.references.list + i;
|
struct ref_list_entry *e = data->header.references.list + i;
|
||||||
struct ref *ref = alloc_ref(e->name);
|
struct ref *ref = alloc_ref(e->name);
|
||||||
hashcpy(ref->old_oid.hash, e->sha1);
|
oidcpy(&ref->old_oid, &e->oid);
|
||||||
ref->next = result;
|
ref->next = result;
|
||||||
result = ref;
|
result = ref;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue