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

[RFC PATCH 2/2] fast-import: add option command

From
Sverre Rabbelier <srabbelier@gmail.com>
Date
Aug 2, 2009, 05:06 UTC
Message-ID
<1249189570-26576-3-git-send-email-srabbelier@gmail.com>
In-Reply-To
<1249189570-26576-2-git-send-email-srabbelier@gmail.com>

This allows the frontend to specify any of the supported options as long as no non-option command has been given. This way the user does not have to include any frontend-specific options, but instead she can rely on the frontend to tell fast-import what it needs.

Signed-off-by: Sverre Rabbelier <srabbelier@gmail.com>
---
    This addds an extra prefixcmp for each command, but only for the
    first command, and any 'option' commands. I felt that was better
    than to add seen_non_option_command=1 to each other command.
 fast-import.c |   39 +++++++++++++++++++++++++++++++++++++++
 1 files changed, 39 insertions(+), 0 deletions(-)
diff --git a/fast-import.c b/fast-import.c
index 57fff3b..2007ed8 100644
--- a/fast-import.c
+++ b/fast-import.c
@@ -348,6 +348,7 @@ static struct recent_command *rc_free;
 static unsigned int cmd_save = 100;
 static uintmax_t next_mark;
 static struct strbuf new_data = STRBUF_INIT;
+static int seen_non_option_command;
 
 static void write_branch_report(FILE *rpt, struct branch *b)
 {
@@ -1663,6 +1664,10 @@ static int read_next_command(void)
 			if (stdin_eof)
 				return EOF;
 
+			if (!seen_non_option_command
+				&& prefixcmp(command_buf.buf, "option "))
+				seen_non_option_command = 1;
+
 			rc = rc_free;
 			if (rc)
 				rc_free = rc->next;
@@ -2422,6 +2427,38 @@ static void option_stats() {
 	show_stats = 1;
 }
 
+static void parse_option(void)
+{
+    char* option = command_buf.buf + 7;
+
+	if (seen_non_option_command)
+		die("Got option command '%s' after non-option command", option);
+
+    if (!prefixcmp(option, "date-format")) {
+		option_date_format(option + 12);
+    } else if (!prefixcmp(option, "max-pack-size")) {
+		option_max_pack_size(option + 14);
+    } else if (!prefixcmp(option, "depth")) {
+		option_depth(option + 6);
+    } else if (!prefixcmp(option, "active-branches")) {
+		option_active_branches(option + 16);
+    } else if (!prefixcmp(option, "import-marks")) {
+		option_import_marks(option + 13);
+    } else if (!prefixcmp(option, "export-marks")) {
+		option_export_marks(option + 13);
+    } else if (!prefixcmp(option, "export-pack-edges")) {
+		option_export_pack_edges(option + 18);
+    } else if (!prefixcmp(option, "force")) {
+		option_force();
+    } else if (!prefixcmp(option, "quiet")) {
+		option_quiet();
+    } else if (!prefixcmp(option, "stats")) {
+		option_stats();
+    } else {
+		die("Unsupported option: %s", option);
+    }
+}
+
 static int git_pack_config(const char *k, const char *v, void *cb)
 {
 	if (!strcmp(k, "pack.depth")) {
@@ -2516,6 +2553,8 @@ int main(int argc, const char **argv)
 			parse_checkpoint();
 		else if (!prefixcmp(command_buf.buf, "progress "))
 			parse_progress();
+		else if (!prefixcmp(command_buf.buf, "option "))
+			parse_option();
 		else
 			die("Unsupported command: %s", command_buf.buf);
 	}
-- 
1.6.3.GIT
Previous: Sverre RabbelierNext: Sverre Rabbelier
Message 4 of 8 in “option directive to fast-import”
  1. Sverre RabbelierAug 2, 2009
  2. 0/3 fast-import: add option commandSverre Rabbelier, Aug 2, 2009
  3. 1/2 fast-import: put option parsing code in seperate functionsSverre Rabbelier, Aug 2, 2009
  4. 2/2 fast-import: add option commandSverre Rabbelier, Aug 2, 2009
  5. 3/3 fast-import: test the new option commandSverre Rabbelier, Aug 2, 2009
  6. 1/3 fast-import: put option parsing code in seperate functionsSverre Rabbelier, Aug 2, 2009
  7. Shawn O. PearceAug 3, 2009
  8. Sverre RabbelierAug 3, 2009

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.