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

[RFC/PATCH 11/18] revert: add get_todo_content() and create_todo_file()

From
Christian Couder <chriscool@tuxfamily.org>
Date
Nov 25, 2010, 21:20 UTC
Message-ID
<20101125212050.5188.30170.chriscool@tuxfamily.org>
In-Reply-To
<20101125210138.5188.13115.chriscool@tuxfamily.org>

These static functions will make it possible to write "todo" and "done" files. These files will list the actions (cherry picks or reverts) that are still to be completed and that have already been done respectively.

Signed-off-by: Christian Couder <chriscool@tuxfamily.org>
---
 builtin/revert.c |   63 ++++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 63 insertions(+), 0 deletions(-)
diff --git a/builtin/revert.c b/builtin/revert.c
index 8b50e0c..7429be2 100644
--- a/builtin/revert.c
+++ b/builtin/revert.c
@@ -177,6 +177,69 @@ static char *get_encoding(const char *message, const unsigned char *sha1)
 	return NULL;
 }
 
+static void get_todo_content(struct strbuf *buf, struct commit_list *list,
+			     const char *line_prefix, struct args_info *info)
+{
+	struct commit_list *cur = list;
+	struct strbuf cmd = STRBUF_INIT;
+
+	if (line_prefix)
+		strbuf_addstr(&cmd, line_prefix);
+	strbuf_addstr(&cmd, info->action == REVERT ? "revert " : "pick ");
+	if (info->no_commit)
+		strbuf_addstr(&cmd, "-n ");
+	if (info->edit)
+		strbuf_addstr(&cmd, "-e ");
+	if (info->signoff)
+		strbuf_addstr(&cmd, "-s ");
+	if (info->mainline)
+		strbuf_addf(&cmd, "-m %d ", info->mainline);
+	if (info->allow_rerere_auto)
+		strbuf_addstr(&cmd, "--rerere-autoupdate ");
+	if (info->strategy)
+		strbuf_addf(&cmd, "--strategy %s ", info->strategy);
+	if (info->no_replay)
+		strbuf_addstr(&cmd, "-x ");
+	if (info->allow_ff)
+		strbuf_addstr(&cmd, "--ff ");
+
+	for (; cur; cur = cur->next) {
+		struct commit_message msg = { NULL, NULL, NULL, NULL, NULL };
+		const unsigned char *sha1 = cur->item->object.sha1;
+		if (get_message(cur->item->buffer, sha1, &msg) != 0)
+			die("Cannot get commit message for %s",
+			    sha1_to_hex(sha1));
+		strbuf_addbuf(buf, &cmd);
+		strbuf_addf(buf, " %s # %s\n",
+			    find_unique_abbrev(sha1, DEFAULT_ABBREV),
+			    msg.subject);
+		free_message(&msg);
+	}
+
+	strbuf_release(&cmd);
+}
+
+static void create_todo_file(const char *filepath, int append,
+			     struct commit_list *list, const char *line_prefix,
+			     struct args_info *info)
+{
+	int fd, flags;
+	struct strbuf buf = STRBUF_INIT;
+
+	get_todo_content(&buf, list, line_prefix, info);
+
+	flags = O_WRONLY | O_CREAT | (append ? O_APPEND : O_TRUNC);
+	fd = open(filepath, flags, 0666);
+	if (fd < 0)
+		die_errno("Could not open file '%s' for writing", filepath);
+
+	write_or_whine(fd, buf.buf, buf.len, filepath);
+
+	close(fd);
+
+	strbuf_release(&buf);
+}
+
 static void add_message_to_msg(struct strbuf *msgbuf, const char *message,
 			       const unsigned char *sha1)
 {
-- 
1.7.3.2.504.g59d466
Previous: Christian CouderNext: Christian Couder
Message 19 of 27 in “WIP implement cherry-pick/revert --continue”
  1. 00/18 WIP implement cherry-pick/revert --continueChristian Couder, Nov 25, 2010
  2. 01/18 advice: add error_resolve_conflict() functionChristian Couder, Nov 25, 2010
  3. Jonathan NiederNov 26, 2010
  4. 02/18 revert: change many die() calls into "return error()" callsChristian Couder, Nov 25, 2010
  5. Jonathan NiederNov 26, 2010
  6. 03/18 usage: implement error_errno() the same way as die_errno()Christian Couder, Nov 25, 2010
  7. Jonathan NiederNov 26, 2010
  8. Junio C HamanoNov 26, 2010
  9. 04/18 revert: don't die when write_message() failsChristian Couder, Nov 25, 2010
  10. 05/18 commit: move reverse_commit_list() into commit.{h, c}Christian Couder, Nov 25, 2010
  11. 06/18 revert: remove "commit" global variableChristian Couder, Nov 25, 2010
  12. 07/18 revert: put option information in an option structChristian Couder, Nov 25, 2010
  13. Jonathan NiederNov 26, 2010
  14. Junio C HamanoNov 26, 2010
  15. 08/18 revert: refactor code into a new pick_commits() functionChristian Couder, Nov 25, 2010
  16. Daniel BarkalowNov 27, 2010
  17. 09/18 revert: make pick_commits() return an error on --ff incompatible optionChristian Couder, Nov 25, 2010
  18. 10/18 revert: make read_and_refresh_cache() and prepare_revs() return errorsChristian Couder, Nov 25, 2010
  19. 11/18 revert: add get_todo_content() and create_todo_file()Christian Couder, Nov 25, 2010
  20. 12/18 revert: write TODO and DONE files in case of failureChristian Couder, Nov 25, 2010
  21. 13/18 revert: add option parsing for option --continueChristian Couder, Nov 25, 2010
  22. 14/18 revert: move global variable "me" into "struct args_info"Christian Couder, Nov 25, 2010
  23. 15/18 revert: add NONE action and make parse_args() manage itChristian Couder, Nov 25, 2010
  24. 16/18 revert: implement parsing TODO and DONE filesChristian Couder, Nov 25, 2010
  25. 17/18 revert: add remaining instructions in todo fileChristian Couder, Nov 25, 2010
  26. 18/18 revert: implement --continue processingChristian Couder, Nov 25, 2010
  27. Jonathan NiederNov 26, 2010

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.