[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