From: Junio C Hamano <gitster@pobox.com>
To: David Turner <dturner@twopensource.com>
Cc: git@vger.kernel.org, mhagger@alum.mit.edu,
sunshine@sunshineco.com, philipoakley@iee.org
Subject: Re: [PATCH 4/5] rebase: use update_ref
Date: Tue, 28 Jul 2015 11:18:17 -0700 [thread overview]
Message-ID: <xmqq4mkof8nq.fsf@gitster.dls.corp.google.com> (raw)
In-Reply-To: <1438027720-23074-5-git-send-email-dturner@twopensource.com> (David Turner's message of "Mon, 27 Jul 2015 16:08:39 -0400")
David Turner <dturner@twopensource.com> writes:
> Instead of manually writing a pseudoref (in one case) and shelling out
> to git update-ref (in another), use the update_ref function. This
> is much simpler.
>
> Signed-off-by: David Turner <dturner@twopensource.com>
> ---
> bisect.c | 37 ++++++++-----------------------------
> 1 file changed, 8 insertions(+), 29 deletions(-)
Mistitled? I can do s/rebase/bisect/ at my end if that is all
needed.
>
> diff --git a/bisect.c b/bisect.c
> index 857cf59..33ac88d 100644
> --- a/bisect.c
> +++ b/bisect.c
> @@ -19,7 +19,6 @@ static struct object_id *current_bad_oid;
>
> static const char *argv_checkout[] = {"checkout", "-q", NULL, "--", NULL};
> static const char *argv_show_branch[] = {"show-branch", NULL, NULL};
> -static const char *argv_update_ref[] = {"update-ref", "--no-deref", "BISECT_HEAD", NULL, NULL};
>
> static const char *term_bad;
> static const char *term_good;
> @@ -675,34 +674,16 @@ static int is_expected_rev(const struct object_id *oid)
> return res;
> }
>
> -static void mark_expected_rev(char *bisect_rev_hex)
> -{
> - int len = strlen(bisect_rev_hex);
> - const char *filename = git_path("BISECT_EXPECTED_REV");
> - int fd = open(filename, O_CREAT | O_TRUNC | O_WRONLY, 0600);
> -
> - if (fd < 0)
> - die_errno("could not create file '%s'", filename);
> -
> - bisect_rev_hex[len] = '\n';
> - write_or_die(fd, bisect_rev_hex, len + 1);
> - bisect_rev_hex[len] = '\0';
> -
> - if (close(fd) < 0)
> - die("closing file %s: %s", filename, strerror(errno));
> -}
> -
> -static int bisect_checkout(char *bisect_rev_hex, int no_checkout)
> +static int bisect_checkout(const unsigned char *bisect_rev, int no_checkout)
> {
> + char bisect_rev_hex[GIT_SHA1_HEXSZ + 1];
>
> - mark_expected_rev(bisect_rev_hex);
> + memcpy(bisect_rev_hex, sha1_to_hex(bisect_rev), GIT_SHA1_HEXSZ + 1);
> + update_ref(NULL, "BISECT_EXPECTED_REV", bisect_rev, NULL, 0, UPDATE_REFS_DIE_ON_ERR);
>
> argv_checkout[2] = bisect_rev_hex;
> if (no_checkout) {
> - argv_update_ref[3] = bisect_rev_hex;
> - if (run_command_v_opt(argv_update_ref, RUN_GIT_CMD))
> - die("update-ref --no-deref HEAD failed on %s",
> - bisect_rev_hex);
> + update_ref(NULL, "BISECT_HEAD", bisect_rev, NULL, 0, UPDATE_REFS_DIE_ON_ERR);
> } else {
> int res;
> res = run_command_v_opt(argv_checkout, RUN_GIT_CMD);
> @@ -804,7 +785,7 @@ static void check_merge_bases(int no_checkout)
> handle_skipped_merge_base(mb);
> } else {
> printf("Bisecting: a merge base must be tested\n");
> - exit(bisect_checkout(sha1_to_hex(mb), no_checkout));
> + exit(bisect_checkout(mb, no_checkout));
> }
> }
>
> @@ -948,7 +929,6 @@ int bisect_next_all(const char *prefix, int no_checkout)
> struct commit_list *tried;
> int reaches = 0, all = 0, nr, steps;
> const unsigned char *bisect_rev;
> - char bisect_rev_hex[GIT_SHA1_HEXSZ + 1];
>
> read_bisect_terms(&term_bad, &term_good);
> if (read_bisect_refs())
> @@ -986,11 +966,10 @@ int bisect_next_all(const char *prefix, int no_checkout)
> }
>
> bisect_rev = revs.commits->item->object.sha1;
> - memcpy(bisect_rev_hex, sha1_to_hex(bisect_rev), GIT_SHA1_HEXSZ + 1);
>
> if (!hashcmp(bisect_rev, current_bad_oid->hash)) {
> exit_if_skipped_commits(tried, current_bad_oid);
> - printf("%s is the first %s commit\n", bisect_rev_hex,
> + printf("%s is the first %s commit\n", sha1_to_hex(bisect_rev),
> term_bad);
> show_diff_tree(prefix, revs.commits->item);
> /* This means the bisection process succeeded. */
> @@ -1003,7 +982,7 @@ int bisect_next_all(const char *prefix, int no_checkout)
> "(roughly %d step%s)\n", nr, (nr == 1 ? "" : "s"),
> steps, (steps == 1 ? "" : "s"));
>
> - return bisect_checkout(bisect_rev_hex, no_checkout);
> + return bisect_checkout(bisect_rev, no_checkout);
> }
>
> static inline int log2i(int n)
next prev parent reply other threads:[~2015-07-28 18:18 UTC|newest]
Thread overview: 11+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-07-27 20:08 [PATCH v2 0/5] pseudorefs David Turner
2015-07-27 20:08 ` [PATCH 1/5] refs: Introduce pseudoref and per-worktree ref concepts David Turner
2015-07-28 17:13 ` Eric Sunshine
2015-07-27 20:08 ` [PATCH 2/5] notes: replace pseudorefs with real refs David Turner
2015-07-27 20:08 ` [PATCH 3/5] pseudorefs: create and use pseudoref update and delete functions David Turner
2015-07-28 0:49 ` David Turner
2015-07-27 20:08 ` [PATCH 4/5] rebase: use update_ref David Turner
2015-07-28 18:18 ` Junio C Hamano [this message]
2015-07-28 18:53 ` David Turner
2015-07-27 20:08 ` [PATCH 5/5] sequencer: replace write_cherry_pick_head with update_ref David Turner
2015-07-27 22:04 ` [PATCH v2 0/5] pseudorefs Junio C Hamano
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=xmqq4mkof8nq.fsf@gitster.dls.corp.google.com \
--to=gitster@pobox.com \
--cc=dturner@twopensource.com \
--cc=git@vger.kernel.org \
--cc=mhagger@alum.mit.edu \
--cc=philipoakley@iee.org \
--cc=sunshine@sunshineco.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.