git/list[1] front-page[2] threads[3] people[4] search[5] about
 

[PATCH v3 1/4] bundle: add bundle verification options type

From
Justin Tobler <jltobler@gmail.com>
Date
Nov 27, 2024, 23:33 UTC
Message-ID
<20241127233312.27710-2-jltobler@gmail.com>
In-Reply-To
<20241127233312.27710-1-jltobler@gmail.com>

When `unbundle()` is invoked, fsck verification may be configured by passing the `VERIFY_BUNDLE_FSCK` flag. This mechanism allows fsck checks on the bundle to be enabled or disabled entirely. To facilitate more fine-grained fsck configuration, additional context must be provided to `unbundle()`.

Introduce the `unbundle_opts` type, which wraps the existing `verify_bundle_flags`, to facilitate future extension of `unbundle()` configuration. Also update `unbundle()` and its call sites to accept this new options type instead of the flags directly. The end behavior is functionally the same, but allows for the set of configurable options to be extended. This is leveraged in a subsequent commit to enable fsck message severity configuration.

Signed-off-by: Justin Tobler <jltobler@gmail.com>
---
 builtin/bundle.c |  2 +-
 bundle-uri.c     |  7 +++++--
 bundle.c         |  6 +++++-
 bundle.h         | 10 +++++++---
 transport.c      |  6 ++++--
 5 files changed, 22 insertions(+), 9 deletions(-)
diff --git a/builtin/bundle.c b/builtin/bundle.c
index 127518c2a8..15ac75ab51 100644
--- a/builtin/bundle.c
+++ b/builtin/bundle.c
@@ -218,7 +218,7 @@ static int cmd_bundle_unbundle(int argc, const char **argv, const char *prefix)
 		strvec_pushl(&extra_index_pack_args, "-v", "--progress-title",
 			     _("Unbundling objects"), NULL);
 	ret = !!unbundle(the_repository, &header, bundle_fd,
-			 &extra_index_pack_args, 0) ||
+			 &extra_index_pack_args, NULL) ||
 		list_bundle_refs(&header, argc, argv);
 	bundle_header_release(&header);
 
diff --git a/bundle-uri.c b/bundle-uri.c
index 0df66e2872..cdf9e4f9e1 100644
--- a/bundle-uri.c
+++ b/bundle-uri.c
@@ -367,6 +367,10 @@ static int unbundle_from_file(struct repository *r, const char *file)
 	struct string_list_item *refname;
 	struct strbuf bundle_ref = STRBUF_INIT;
 	size_t bundle_prefix_len;
+	struct unbundle_opts opts = {
+		.flags = VERIFY_BUNDLE_QUIET |
+			 (fetch_pack_fsck_objects() ? VERIFY_BUNDLE_FSCK : 0),
+	};
 
 	bundle_fd = read_bundle_header(file, &header);
 	if (bundle_fd < 0) {
@@ -379,8 +383,7 @@ static int unbundle_from_file(struct repository *r, const char *file)
 	 * a reachable ref pointing to the new tips, which will reach
 	 * the prerequisite commits.
 	 */
-	result = unbundle(r, &header, bundle_fd, NULL,
-			  VERIFY_BUNDLE_QUIET | (fetch_pack_fsck_objects() ? VERIFY_BUNDLE_FSCK : 0));
+	result = unbundle(r, &header, bundle_fd, NULL, &opts);
 	if (result) {
 		result = 1;
 		goto cleanup;
diff --git a/bundle.c b/bundle.c
index 4773b51eb1..485033ea3f 100644
--- a/bundle.c
+++ b/bundle.c
@@ -628,9 +628,13 @@ int create_bundle(struct repository *r, const char *path,
 
 int unbundle(struct repository *r, struct bundle_header *header,
 	     int bundle_fd, struct strvec *extra_index_pack_args,
-	     enum verify_bundle_flags flags)
+	     struct unbundle_opts *opts)
 {
 	struct child_process ip = CHILD_PROCESS_INIT;
+	enum verify_bundle_flags flags = 0;
+
+	if (opts)
+		flags = opts->flags;
 
 	if (verify_bundle(r, header, flags))
 		return -1;
diff --git a/bundle.h b/bundle.h
index 5ccc9a061a..6a09cc7bfb 100644
--- a/bundle.h
+++ b/bundle.h
@@ -39,6 +39,10 @@ enum verify_bundle_flags {
 int verify_bundle(struct repository *r, struct bundle_header *header,
 		  enum verify_bundle_flags flags);
 
+struct unbundle_opts {
+	enum verify_bundle_flags flags;
+};
+
 /**
  * Unbundle after reading the header with read_bundle_header().
  *
@@ -49,12 +53,12 @@ int verify_bundle(struct repository *r, struct bundle_header *header,
  * (e.g. "-v" for verbose/progress), NULL otherwise. The provided
  * "extra_index_pack_args" (if any) will be strvec_clear()'d for you.
  *
- * Before unbundling, this method will call verify_bundle() with the
- * given 'flags'.
+ * Before unbundling, this method will call verify_bundle() with 'flags'
+ * provided in 'opts'.
  */
 int unbundle(struct repository *r, struct bundle_header *header,
 	     int bundle_fd, struct strvec *extra_index_pack_args,
-	     enum verify_bundle_flags flags);
+	     struct unbundle_opts *opts);
 int list_bundle_refs(struct bundle_header *header,
 		int argc, const char **argv);
 
diff --git a/transport.c b/transport.c
index 47fda6a773..8536b14181 100644
--- a/transport.c
+++ b/transport.c
@@ -176,6 +176,9 @@ static int fetch_refs_from_bundle(struct transport *transport,
 				  int nr_heads UNUSED,
 				  struct ref **to_fetch UNUSED)
 {
+	struct unbundle_opts opts = {
+		.flags = fetch_pack_fsck_objects() ? VERIFY_BUNDLE_FSCK : 0,
+	};
 	struct bundle_transport_data *data = transport->data;
 	struct strvec extra_index_pack_args = STRVEC_INIT;
 	int ret;
@@ -186,8 +189,7 @@ static int fetch_refs_from_bundle(struct transport *transport,
 	if (!data->get_refs_from_bundle_called)
 		get_refs_from_bundle_inner(transport);
 	ret = unbundle(the_repository, &data->header, data->fd,
-		       &extra_index_pack_args,
-		       fetch_pack_fsck_objects() ? VERIFY_BUNDLE_FSCK : 0);
+		       &extra_index_pack_args, &opts);
 	transport->hash_algo = data->header.hash_algo;
 
 	strvec_clear(&extra_index_pack_args);
-- 
2.47.0
Previous: Justin ToblerNext: Justin Tobler
Message 32 of 41 in “propagate fsck message severity for bundle fetch”
  1. 0/5 propagate fsck message severity for bundle fetchJustin Tobler, Nov 21, 2024
  2. 1/5 bundle: add bundle verification options typeJustin Tobler, Nov 21, 2024
  3. Junio C HamanoNov 22, 2024
  4. Justin ToblerNov 22, 2024
  5. Patrick SteinhardtNov 26, 2024
  6. Justin ToblerNov 26, 2024
  7. 2/5 bundle: support fsck message configurationJustin Tobler, Nov 21, 2024
  8. Junio C HamanoNov 22, 2024
  9. Justin ToblerNov 22, 2024
  10. Junio C HamanoNov 25, 2024
  11. 3/5 fetch-pack: introduce `fetch_pack_options`Justin Tobler, Nov 21, 2024
  12. Junio C HamanoNov 22, 2024
  13. Junio C HamanoNov 22, 2024
  14. Justin ToblerNov 22, 2024
  15. 4/5 fetch-pack: expose `fetch_pack_config_cb()`Justin Tobler, Nov 21, 2024
  16. Junio C HamanoNov 22, 2024
  17. Justin ToblerNov 22, 2024
  18. shejialuoNov 22, 2024
  19. Justin ToblerNov 27, 2024
  20. 5/5 transport: propagate fsck configuration during bundle fetchJustin Tobler, Nov 21, 2024
  21. Junio C HamanoNov 22, 2024
  22. 0/4 propagate fsck message severity for bundle fetchJustin Tobler, Nov 27, 2024
  23. 1/4 bundle: add bundle verification options typeJustin Tobler, Nov 27, 2024
  24. 2/4 bundle: support fsck message configurationJustin Tobler, Nov 27, 2024
  25. Patrick SteinhardtNov 27, 2024
  26. 3/4 fetch-pack: split out fsck config parsingJustin Tobler, Nov 27, 2024
  27. Patrick SteinhardtNov 27, 2024
  28. Justin ToblerNov 27, 2024
  29. 4/4 transport: propagate fsck configuration during bundle fetchJustin Tobler, Nov 27, 2024
  30. Junio C HamanoNov 27, 2024
  31. 0/4 propagate fsck message severity for bundle fetchJustin Tobler, Nov 27, 2024
  32. 1/4 bundle: add bundle verification options typeJustin Tobler, Nov 27, 2024
  33. 2/4 bundle: support fsck message configurationJustin Tobler, Nov 27, 2024
  34. 3/4 fetch-pack: split out fsck config parsingJustin Tobler, Nov 27, 2024
  35. Junio C HamanoNov 28, 2024
  36. Patrick SteinhardtDec 3, 2024
  37. Justin ToblerDec 3, 2024
  38. Patrick SteinhardtDec 3, 2024
  39. Junio C HamanoDec 3, 2024
  40. Junio C HamanoDec 4, 2024
  41. 4/4 transport: propagate fsck configuration during bundle fetchJustin Tobler, Nov 27, 2024

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.