Re: [PATCH 4/3] revert: write REVERT_HEAD pseudoref during conflicted revert
- From
Ramkumar Ramachandra <artagnon@gmail.com>
- Date
- Dec 1, 2011, 09:34 UTC
- Message-ID
- <CALkWK0mp4-nxLsf=wjDwHOhvoWFNzNz-Rc+Q+S_Er5rpFW2k=Q@mail.gmail.com>
- In-Reply-To
- <20111122111736.GE7399@elie.hsd1.il.comcast.net>
Hi,
Jonathan Nieder wrote:
Show 5 quoted lines
> [...] > Set a REVERT_HEAD pseudoref when "git revert" does not make a commit, > for cases like this. This also makes it possible for scripts to > distinguish between a revert that encountered conflicts and other > sources of an unmerged index.
Sounds a lot like CHERRY_PICK_HEAD counterpart. Let's read ahead and see if there are any unexpected differences.
Show 24 quoted lines
> diff --git a/branch.c b/branch.c
> index d8098762..025a97be 100644
> --- a/branch.c
> +++ b/branch.c
> @@ -241,6 +241,7 @@ void create_branch(const char *head,
> void remove_branch_state(void)
> {
> unlink(git_path("CHERRY_PICK_HEAD"));
> + unlink(git_path("REVERT_HEAD"));
> unlink(git_path("MERGE_HEAD"));
> unlink(git_path("MERGE_RR"));
> unlink(git_path("MERGE_MSG"));
> diff --git a/builtin/commit.c b/builtin/commit.c
> index c46f2d18..8f2bebec 100644
> --- a/builtin/commit.c
> +++ b/builtin/commit.c
> @@ -1514,6 +1514,7 @@ int cmd_commit(int argc, const char **argv, const char *prefix)
> }
>
> unlink(git_path("CHERRY_PICK_HEAD"));
> + unlink(git_path("REVERT_HEAD"));
> unlink(git_path("MERGE_HEAD"));
> unlink(git_path("MERGE_MSG"));
> unlink(git_path("MERGE_MODE"));So far so good. Behaves exactly like CHERRY_PICK_HEAD.
Show 33 quoted lines
> diff --git a/builtin/revert.c b/builtin/revert.c
> index 1d112e4c..f5ba67a5 100644
> --- a/builtin/revert.c
> +++ b/builtin/revert.c
> @@ -289,7 +289,7 @@ static char *get_encoding(const char *message)
> return NULL;
> }
>
> -static void write_cherry_pick_head(struct commit *commit)
> +static void write_cherry_pick_head(struct commit *commit, const char *pseudoref)
> {
> const char *filename;
> int fd;
> @@ -297,7 +297,7 @@ static void write_cherry_pick_head(struct commit *commit)
>
> strbuf_addf(&buf, "%s\n", sha1_to_hex(commit->object.sha1));
>
> - filename = git_path("CHERRY_PICK_HEAD");
> + filename = git_path(pseudoref);
> fd = open(filename, O_WRONLY | O_CREAT, 0666);
> if (fd < 0)
> die_errno(_("Could not open '%s' for writing"), filename);
> @@ -597,7 +597,9 @@ static int do_pick_commit(struct commit *commit, struct replay_opts *opts)
> * write it at all.
> */
> if (opts->action == CHERRY_PICK && !opts->no_commit && (res == 0 || res == 1))
> - write_cherry_pick_head(commit);
> + write_cherry_pick_head(commit, "CHERRY_PICK_HEAD");
> + if (opts->action == REVERT && ((opts->no_commit && res == 0) || res == 1))
> + write_cherry_pick_head(commit, "REVERT_HEAD");
>
> if (res) {
> error(opts->action == REVERTInteresting. This additional symmetry will probably make life much easier for my pending "New Sequencer Workflow! v2" series.
Show 5 quoted lines
> diff --git a/t/t3507-cherry-pick-conflict.sh b/t/t3507-cherry-pick-conflict.sh > index cb45574a..ee1659c1 100755 > --- a/t/t3507-cherry-pick-conflict.sh > +++ b/t/t3507-cherry-pick-conflict.sh > [...]
And some tests. Nice.
Thanks.
-- Ram