Re: [PATCH 3/3] bundle: remove "ref_list" in favor of string-list.c API

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On 17/06/2021 13:21, Ævar Arnfjörð Bjarmason wrote:
---
  builtin/bundle.c | 12 ++++-----
  bundle.c         | 64 ++++++++++++++++++++++++------------------------
  bundle.h         | 20 +++++++--------
  transport.c      | 10 +++++---
  4 files changed, 55 insertions(+), 51 deletions(-)


[snip]

diff --git a/bundle.c b/bundle.c
index 621708f40e..d36eeee1a5 100644
--- a/bundle.c
+++ b/bundle.c
@@ -162,14 +156,14 @@ static int list_refs(struct ref_list *r, int argc, const char **argv)
  		if (argc > 1) {
  			int j;
  			for (j = 1; j < argc; j++)
-				if (!strcmp(r->list[i].name, argv[j]))
+				if (!strcmp(r->items[i].string, argv[j]))
  					break;
  			if (j == argc)
  				continue;
  		}
- oid = &r->list[i].oid;
-		name = r->list[i].name;
+		oid = r->items[i].util;
+		name = r->items[i].string;
  		printf("%s %s\n", oid_to_hex(oid), name);

In function `list_refs` variable `name` that is used in a call to printf
has been extracted by the previous patch.

  	}
  	return 0;
@@ -186,7 +180,7 @@ int verify_bundle(struct repository *r,
  	 * Do fast check, then if any prereqs are missing then go line by line
  	 * to be verbose about the errors
  	 */
-	struct ref_list *p = &header->prerequisites;
+	struct string_list *p = &header->prerequisites;
  	struct rev_info revs;
  	const char *argv[] = {NULL, "--all", NULL};
  	struct commit *commit;
@@ -198,17 +192,17 @@ int verify_bundle(struct repository *r,
repo_init_revisions(r, &revs, NULL);
  	for (i = 0; i < p->nr; i++) {
-		struct ref_list_entry *e = p->list + i;
-		struct object_id *oid = &e->oid;
+		struct string_list_item *e = p->items + i;
+		struct object_id *oid = e->util;
  		struct object *o = parse_object(r, oid);
  		if (o) {
  			o->flags |= PREREQ_MARK;
-			add_pending_object(&revs, o, e->name);
+			add_pending_object(&revs, o, e->string);
  			continue;
  		}
  		if (++ret == 1)
  			error("%s", message);
-		error("%s %s", oid_to_hex(oid), e->name);
+		error("%s %s", oid_to_hex(oid), e->string);
  	}
  	if (revs.pending.nr != p->nr)
  		return ret;
@@ -224,28 +218,28 @@ int verify_bundle(struct repository *r,
  			i--;
for (i = 0; i < p->nr; i++) {
-		struct ref_list_entry *e = p->list + i;
-		struct object_id *oid = &e->oid;
+		struct string_list_item *e = p->items + i;
+		const struct object_id *oid = e->util;
  		struct object *o = parse_object(r, oid);
  		assert(o); /* otherwise we'd have returned early */
  		if (o->flags & SHOWN)
  			continue;
  		if (++ret == 1)
  			error("%s", message);
-		error("%s %s", oid_to_hex(oid), e->name);
+		error("%s %s", oid_to_hex(oid), e->string);

However, `e->name` in three places in function `verify_bundle` for two
different instances of `struct ref_list_entry *` wasn't extracted into
a variable by the previous patch. Could you please clarify this
discrepancy?

[snip]

diff --git a/transport.c b/transport.c
index 9d601c8c95..667c4e0cc6 100644
--- a/transport.c
+++ b/transport.c
@@ -147,13 +147,14 @@ static struct ref *get_refs_from_bundle(struct transport *transport,
  	transport->hash_algo = data->header.hash_algo;
for (i = 0; i < data->header.references.nr; i++) {
-		struct ref_list_entry *e = data->header.references.list + i;
-		struct ref *ref = alloc_ref(e->name);
-		struct object_id *oid = &e->oid;
+		struct string_list_item *e = data->header.references.items + i;
+		struct ref *ref = alloc_ref(e->string);

Similar question for `e->name` here.

+		const struct object_id *oid = e->util;
  		oidcpy(&ref->old_oid, oid);
  		ref->next = result;
  		result = ref;
  	}
+	string_list_clear(&data->header.references, 1);
  	return result;
  }
@@ -176,6 +177,7 @@ static int close_bundle(struct transport *transport)
  	struct bundle_transport_data *data = transport->data;
  	if (data->fd > 0)
  		close(data->fd);
+	bundle_header_release(&data->header);
  	free(data);
  	return 0;
  }
@@ -1082,6 +1084,8 @@ struct transport *transport_get(struct remote *remote, const char *url)
  		die(_("git-over-rsync is no longer supported"));
  	} else if (url_is_local_not_ssh(url) && is_file(url) && is_bundle(url, 1)) {
  		struct bundle_transport_data *data = xcalloc(1, sizeof(*data));
+		string_list_init(&data->header.prerequisites, 1);
+		string_list_init(&data->header.references, 1);
  		transport_check_allowed("file");
  		ret->data = data;
  		ret->vtable = &bundle_vtable;





[Index of Archives]     [Linux Kernel Development]     [Gcc Help]     [IETF Annouce]     [DCCP]     [Netdev]     [Networking]     [Security]     [V4L]     [Bugtraq]     [Yosemite]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Linux SCSI]     [Fedora Users]

  Powered by Linux