All of lore.kernel.org
 help / color / mirror / Atom feed
From: Jonathan Nieder <jrnieder@gmail.com>
To: Ramkumar Ramachandra <artagnon@gmail.com>
Cc: Git List <git@vger.kernel.org>,
	Junio C Hamano <gitster@pobox.com>,
	Christian Couder <chriscool@tuxfamily.org>,
	Daniel Barkalow <barkalow@iabervon.org>
Subject: Re: [PATCH 10/13] revert: Persist data for continuation
Date: Tue, 21 Jun 2011 12:11:39 -0500	[thread overview]
Message-ID: <20110621171139.GO15461@elie> (raw)
In-Reply-To: <1308661489-20080-11-git-send-email-artagnon@gmail.com>

Ramkumar Ramachandra wrote:

> Ever since v1.7.2-rc1~4^2~7 (revert: allow cherry-picking more than
> one commit, 2010-06-02), a single invocation of "git cherry-pick" or
> "git revert" can perform picks of several individual commits.  To
> implement features like "--continue" to continue the whole operation,
> we will need to store some information about the state and the plan at
> the beginning.  Introduce a ".git/sequencer/head" file to store this
> state, and ".git/sequencer/todo" file to store the plan.

Makes a lot of sense.

> Don't touch
> CHERRY_PICK_HEAD -- it will still be useful when a conflict is
> encountered.

I think there's some logical connector or something missing.  Why would
introducing a .git/sequencer dir involve touching CHERRY_PICK_HEAD?

Maybe the idea is to say: "The purpose of these new files is orthogonal
to the existing CHERRY_PICK_HEAD" with some explanation of that.

> --- a/builtin/revert.c
> +++ b/builtin/revert.c
> @@ -13,6 +13,7 @@
>  #include "rerere.h"
>  #include "merge-recursive.h"
>  #include "refs.h"
> +#include "dir.h"
>  
>  /*
>   * This implements the builtins revert and cherry-pick.
> @@ -25,6 +26,10 @@
>   * Copyright (c) 2005 Junio C Hamano
>   */
>  
> +#define SEQ_DIR		git_path("sequencer")
> +#define HEAD_FILE	git_path("sequencer/head")
> +#define TODO_FILE	git_path("sequencer/todo")

I've failed to convince you in the past that these fake constants are
scary, but believe me, they really are.  Consider the following code
--- what would you expect it to print?  What does it actually print?
(Hint: there's not one right answer.)

	printf("%s %s %s %s %s\n", SEQ_DIR, HEAD_FILE, TODO_FILE,
					SEQ_DIR, HEAD_FILE);

> +static void walk_revs_populate_todo(struct commit_list **todo_list,
> +				struct replay_opts *opts)
>  {
>  	struct rev_info revs;
>  	struct commit *commit;
> +	struct commit_list *new_item;
> +	struct commit_list *cur = NULL;
> +
> +	/* Insert into todo_list in the same order */
> +	prepare_revs(&revs, opts);
> +	while ((commit = get_revision(&revs))) {
> +		new_item = xmalloc(sizeof(struct commit_list));
> +		new_item->item = commit;
> +		if (cur)
> +			cur->next = new_item;
> +		else
> +			*todo_list = new_item;
> +		cur = new_item;
> +	}
> +	cur->next = NULL;

The naive reader, perhaps stupidly, wonders: "why not use
commit_list_insert"?  A comment or something to explain "NEEDSWORK:
expose this as commit_list_append" could help him.

[...]
> -	return 0;
> +	/* Sequence of picks finished successfully; cleanup by
> +	   removing the .git/sequencer directory */
> +	return cleanup_sequencer_data();

GNU-style comment seems to have snuck in.

Thanks; this one was pretty pleasant.

  reply	other threads:[~2011-06-21 17:11 UTC|newest]

Thread overview: 47+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2011-06-21 13:04 [PATCH 00/13] Sequencer with continuation features Ramkumar Ramachandra
2011-06-21 13:04 ` [PATCH 01/13] advice: Introduce error_resolve_conflict Ramkumar Ramachandra
2011-06-21 15:55   ` Jonathan Nieder
2011-06-21 18:43     ` Junio C Hamano
2011-07-02  9:44     ` Ramkumar Ramachandra
2011-07-02 10:09       ` Jonathan Nieder
2011-06-21 13:04 ` [PATCH 02/13] revert: Factor out add_message_to_msg function Ramkumar Ramachandra
2011-06-21 15:58   ` Jonathan Nieder
2011-06-21 19:01     ` Junio C Hamano
2011-06-21 13:04 ` [PATCH 03/13] revert: Don't check lone argument in get_encoding Ramkumar Ramachandra
2011-06-21 16:03   ` Jonathan Nieder
2011-06-21 13:04 ` [PATCH 04/13] revert: Propogate errors upwards from do_pick_commit Ramkumar Ramachandra
2011-06-21 16:22   ` Jonathan Nieder
2011-06-21 19:19     ` Junio C Hamano
2011-06-21 19:32       ` Jonathan Nieder
2011-06-21 20:18         ` Junio C Hamano
2011-07-02 10:31           ` Ramkumar Ramachandra
2011-06-21 13:04 ` [PATCH 05/13] revert: Eliminate global "commit" variable Ramkumar Ramachandra
2011-06-21 16:52   ` Jonathan Nieder
2011-06-21 19:23   ` Junio C Hamano
2011-06-21 13:04 ` [PATCH 06/13] revert: Rename no_replay to record_origin Ramkumar Ramachandra
2011-06-21 13:04 ` [PATCH 07/13] revert: Introduce struct to keep command-line options Ramkumar Ramachandra
2011-06-21 16:58   ` Jonathan Nieder
2011-06-21 19:28     ` Junio C Hamano
2011-06-21 13:04 ` [PATCH 08/13] revert: Separate cmdline parsing from functional code Ramkumar Ramachandra
2011-06-21 17:00   ` Jonathan Nieder
2011-06-21 13:04 ` [PATCH 09/13] revert: Catch incompatible command-line options early Ramkumar Ramachandra
2011-06-21 17:04   ` Jonathan Nieder
2011-07-02  9:47     ` Ramkumar Ramachandra
2011-07-02  9:53       ` Jonathan Nieder
2011-07-02 10:04         ` Jonathan Nieder
2011-07-02 11:19           ` Ramkumar Ramachandra
2011-07-02 11:30             ` Jonathan Nieder
2011-07-02 20:02               ` Jonathan Nieder
2011-06-21 13:04 ` [PATCH 10/13] revert: Persist data for continuation Ramkumar Ramachandra
2011-06-21 17:11   ` Jonathan Nieder [this message]
2011-06-21 19:49   ` Junio C Hamano
2011-06-21 13:04 ` [PATCH 11/13] revert: Introduce a layer of indirection over pick_commits Ramkumar Ramachandra
2011-06-21 19:59   ` Junio C Hamano
2011-06-21 13:04 ` [PATCH 12/13] revert: Introduce skip-all to cleanup sequencer data Ramkumar Ramachandra
2011-06-21 20:02   ` Junio C Hamano
2011-07-02  6:24     ` Ramkumar Ramachandra
2011-07-04  4:59       ` Miles Bader
2011-07-05 10:47         ` Ramkumar Ramachandra
2011-06-21 13:04 ` [RFC PATCH 13/13] revert: Introduce --continue to continue the operation Ramkumar Ramachandra
2011-06-21 17:19   ` Jonathan Nieder
2011-06-21 15:48 ` [PATCH 00/13] Sequencer with continuation features Jonathan Nieder

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20110621171139.GO15461@elie \
    --to=jrnieder@gmail.com \
    --cc=artagnon@gmail.com \
    --cc=barkalow@iabervon.org \
    --cc=chriscool@tuxfamily.org \
    --cc=git@vger.kernel.org \
    --cc=gitster@pobox.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.