Re: [PATCH 17/18] revert: Introduce --continue to continue the operation
- From
Christian Couder <chriscool@tuxfamily.org>
- Date
- Aug 2, 2011, 02:36 UTC
- Message-ID
- <201108020436.42148.chriscool@tuxfamily.org>
- In-Reply-To
- <1312222025-28453-18-git-send-email-artagnon@gmail.com>
On Monday 01 August 2011 20:07:04 Ramkumar Ramachandra wrote:
Show 36 quoted lines
>
> +static void read_populate_todo(struct commit_list **todo_list,
> + struct replay_opts *opts)
> +{
> + const char *todo_file = git_path(SEQ_TODO_FILE);
> + struct strbuf buf = STRBUF_INIT;
> + struct commit_list **next;
> + struct commit *commit;
> + char *p;
> + int fd;
> +
> + fd = open(todo_file, O_RDONLY);
> + if (fd < 0)
> + die_errno(_("Could not open %s."), todo_file);
> + if (strbuf_read(&buf, fd, 0) < 0) {
> + close(fd);
> + strbuf_release(&buf);
> + die(_("Could not read %s."), todo_file);
> + }
> + close(fd);
> +
> + next = todo_list;
> + for (p = buf.buf; *p; p = strchr(p, '\n') + 1) {
> + commit = parse_insn_line(p, opts);
> + if (!commit)
> + goto error;
> + next = commit_list_append(commit, next);
> + }
> + if (!*todo_list)
> + goto error;
> + strbuf_release(&buf);
> + return;
> +error:
> + strbuf_release(&buf);
> + die(_("Unusable instruction sheet: %s"), todo_file);
> +}I'd suggest using 2 functions like this:
static int parse_insn_buffer(char *buffer,
struct commit_list **todo_list,
struct replay_opts *opts)
{
struct commit_list **next = todo_list;
char *p = buffer;
int i; for (i = 1; p && *p; i++) {
struct commit *commit = parse_insn_line(p, opts);
if (!commit)
return error(_("Could not parse line %d."), i);
next = commit_list_append(commit, next);
p = strchr(p, '\n');
if (p)
p++;
}
if (!*todo_list)
return error(_("Could not parse one commit."));
return 0;
}static void read_populate_todo(struct commit_list **todo_list,
struct replay_opts *opts)
{
const char *todo_file = git_path(SEQ_TODO_FILE);
struct strbuf buf = STRBUF_INIT;
int fd, res; fd = open(todo_file, O_RDONLY);
if (fd < 0)
die_errno(_("Could not open %s."), todo_file);
if (strbuf_read(&buf, fd, 0) < 0) {
close(fd);
strbuf_release(&buf);
die(_("Could not read %s."), todo_file);
}
close(fd); res = parse_insn_buffer(buf.buf, todo_list, opts);
strbuf_release(&buf);
if (res)
die(_("Unusable instruction sheet: %s"), todo_file);
}Thanks, Christian.