From: Pranit Bauva <pranit.bauva@gmail.com>
To: git@vger.kernel.org
Cc: Pranit Bauva <pranit.bauva@gmail.com>,
christian.couder@gmail.com, chriscool@tuxfamily.org,
larsxschneider@gmail.com, Johannes.Schindelin@gmx.de,
sunshine@sunshineco.com, gitster@pobox.com
Subject: [PATCH v6 2/3] bisect: rewrite `check_term_format` shell function in C
Date: Thu, 12 May 2016 11:02:06 +0530 [thread overview]
Message-ID: <1463031127-17718-3-git-send-email-pranit.bauva@gmail.com> (raw)
In-Reply-To: <1463031127-17718-1-git-send-email-pranit.bauva@gmail.com>
Reimplement the `check_term_format` shell function in C and add
a `--check-term-format` subcommand to `git bisect--helper` to call it
from git-bisect.sh
Using `--check-term-format` subcommand is a temporary measure to port
shell function to C so as to use the existing test suite. As more
functions are ported, this subcommand will be retired and will
be called by some other method/subcommand. For eg. In conversion of
write_terms() of git-bisect.sh, the subcommand will be removed and
instead check_term_format() will be called in its C implementation while
a new subcommand will be introduced for write_terms().
Helped-by: Johannes Schindelein <Johannes.Schindelein@gmx.de>
Mentored-by: Lars Schneider <larsxschneider@gmail.com>
Mentored-by: Christian Couder <chriscool@tuxfamily.org>
Signed-off-by: Pranit Bauva <pranit.bauva@gmail.com>
---
builtin/bisect--helper.c | 59 +++++++++++++++++++++++++++++++++++++++++++++++-
git-bisect.sh | 31 ++-----------------------
2 files changed, 60 insertions(+), 30 deletions(-)
diff --git a/builtin/bisect--helper.c b/builtin/bisect--helper.c
index 8111c91..3c748d1 100644
--- a/builtin/bisect--helper.c
+++ b/builtin/bisect--helper.c
@@ -2,19 +2,72 @@
#include "cache.h"
#include "parse-options.h"
#include "bisect.h"
+#include "refs.h"
static const char * const git_bisect_helper_usage[] = {
N_("git bisect--helper --next-all [--no-checkout]"),
+ N_("git bisect--helper --check-term-format <term> <orig_term>"),
NULL
};
+/*
+ * Check whether the string `term` belongs to the set of strings
+ * included in the variable arguments.
+ */
+static int one_of(const char *term, ...)
+{
+ int res = 0;
+ va_list matches;
+ const char *match;
+
+ va_start(matches, term);
+ while (!res && (match = va_arg(matches, const char *)))
+ res = !strcmp(term, match);
+ va_end(matches);
+
+ return res;
+}
+
+static int check_term_format(const char *term, const char *orig_term)
+{
+ struct strbuf new_term = STRBUF_INIT;
+ strbuf_addf(&new_term, "refs/bisect/%s", term);
+
+ if (check_refname_format(new_term.buf, 0)) {
+ strbuf_release(&new_term);
+ return error(_("'%s' is not a valid term"), term);
+ }
+ strbuf_release(&new_term);
+
+ if (one_of(term, "help", "start", "skip", "next", "reset",
+ "visualize", "replay", "log", "run", NULL))
+ return error(_("can't use the builtin command '%s' as a term"), term);
+
+ /*
+ * In theory, nothing prevents swapping completely good and bad,
+ * but this situation could be confusing and hasn't been tested
+ * enough. Forbid it for now.
+ */
+
+ if ((strcmp(orig_term, "bad") && one_of(term, "bad", "new", NULL)) ||
+ (strcmp(orig_term, "good") && one_of(term, "good", "old", NULL)))
+ return error(_("can't change the meaning of the term '%s'"), term);
+
+ return 0;
+}
+
int cmd_bisect__helper(int argc, const char **argv, const char *prefix)
{
- enum { NEXT_ALL = 1 } cmdmode = 0;
+ enum {
+ NEXT_ALL = 1,
+ CHECK_TERM_FMT
+ } cmdmode = 0;
int no_checkout = 0;
struct option options[] = {
OPT_CMDMODE(0, "next-all", &cmdmode,
N_("perform 'git bisect next'"), NEXT_ALL),
+ OPT_CMDMODE(0, "check-term-format", &cmdmode,
+ N_("check format of the term"), CHECK_TERM_FMT),
OPT_BOOL(0, "no-checkout", &no_checkout,
N_("update BISECT_HEAD instead of checking out the current commit")),
OPT_END()
@@ -29,6 +82,10 @@ int cmd_bisect__helper(int argc, const char **argv, const char *prefix)
switch (cmdmode) {
case NEXT_ALL:
return bisect_next_all(prefix, no_checkout);
+ case CHECK_TERM_FMT:
+ if (argc != 2)
+ die(_("--check-term-format requires two arguments"));
+ return check_term_format(argv[0], argv[1]);
default:
die("BUG: unknown subcommand '%d'", cmdmode);
}
diff --git a/git-bisect.sh b/git-bisect.sh
index 5d1cb00..7d7965d 100755
--- a/git-bisect.sh
+++ b/git-bisect.sh
@@ -564,38 +564,11 @@ write_terms () {
then
die "$(gettext "please use two different terms")"
fi
- check_term_format "$TERM_BAD" bad
- check_term_format "$TERM_GOOD" good
+ git bisect--helper --check-term-format "$TERM_BAD" bad || exit
+ git bisect--helper --check-term-format "$TERM_GOOD" good || exit
printf '%s\n%s\n' "$TERM_BAD" "$TERM_GOOD" >"$GIT_DIR/BISECT_TERMS"
}
-check_term_format () {
- term=$1
- git check-ref-format refs/bisect/"$term" ||
- die "$(eval_gettext "'\$term' is not a valid term")"
- case "$term" in
- help|start|terms|skip|next|reset|visualize|replay|log|run)
- die "$(eval_gettext "can't use the builtin command '\$term' as a term")"
- ;;
- bad|new)
- if test "$2" != bad
- then
- # In theory, nothing prevents swapping
- # completely good and bad, but this situation
- # could be confusing and hasn't been tested
- # enough. Forbid it for now.
- die "$(eval_gettext "can't change the meaning of term '\$term'")"
- fi
- ;;
- good|old)
- if test "$2" != good
- then
- die "$(eval_gettext "can't change the meaning of term '\$term'")"
- fi
- ;;
- esac
-}
-
check_and_set_terms () {
cmd="$1"
case "$cmd" in
--
2.8.2
next prev parent reply other threads:[~2016-05-12 5:33 UTC|newest]
Thread overview: 114+ messages / expand[flat|nested] mbox.gz Atom feed top
2016-03-21 19:00 [PATCH] bisect--helper: convert a function in shell to C Pranit Bauva
2016-03-22 0:28 ` Stefan Beller
2016-03-22 6:10 ` Christian Couder
2016-03-22 6:13 ` Pranit Bauva
2016-03-22 6:13 ` Pranit Bauva
2016-03-22 8:01 ` [PATCH v2] " Pranit Bauva
2016-03-22 15:09 ` Johannes Schindelin
2016-03-22 15:11 ` Johannes Schindelin
2016-03-22 17:46 ` Pranit Bauva
2016-03-23 11:23 ` Johannes Schindelin
2016-03-22 16:03 ` Junio C Hamano
2016-03-22 16:49 ` Johannes Schindelin
2016-03-22 17:52 ` Pranit Bauva
2016-03-22 17:59 ` Stefan Beller
2016-03-23 11:24 ` Johannes Schindelin
2016-03-22 17:45 ` Pranit Bauva
2016-03-23 11:22 ` Johannes Schindelin
2016-03-23 13:53 ` Pranit Bauva
2016-03-23 7:16 ` [PATCH v3] " Pranit Bauva
2016-03-23 11:57 ` Johannes Schindelin
2016-03-23 13:16 ` Pranit Bauva
2016-03-23 16:24 ` Junio C Hamano
2016-03-23 18:38 ` Pranit Bauva
2016-03-23 16:15 ` Junio C Hamano
2016-03-23 18:46 ` Pranit Bauva
2016-05-04 5:07 ` [PATCH 0/2] bisect--helper: rewrite of check_term_format() Pranit Bauva
2016-05-04 5:07 ` [PATCH 1/2] bisect--helper: use OPT_CMDMODE instead of OPT_BOOL Pranit Bauva
2016-05-04 5:34 ` Pranit Bauva
2016-05-04 6:07 ` Eric Sunshine
2016-05-04 6:50 ` Christian Couder
2016-05-04 11:05 ` Johannes Schindelin
2016-05-04 12:04 ` Pranit Bauva
2016-05-04 12:05 ` Christian Couder
2016-05-04 12:21 ` Johannes Schindelin
2016-05-04 12:41 ` Christian Couder
2016-05-04 14:56 ` Johannes Schindelin
2016-05-04 19:07 ` Christian Couder
2016-05-08 6:54 ` Johannes Schindelin
2016-05-04 7:28 ` Junio C Hamano
2016-05-04 11:02 ` Johannes Schindelin
2016-05-04 5:07 ` [PATCH 2/2] bisect: rewrite `check_term_format` shell function in C Pranit Bauva
2016-05-04 6:52 ` Eric Sunshine
2016-05-04 7:36 ` Pranit Bauva
2016-05-04 7:40 ` Pranit Bauva
2016-05-04 8:28 ` Eric Sunshine
2016-05-04 8:54 ` Christian Couder
2016-05-04 11:58 ` Pranit Bauva
2016-05-04 17:49 ` Eric Sunshine
2016-05-04 18:08 ` Pranit Bauva
2016-05-04 11:13 ` Johannes Schindelin
2016-05-04 12:00 ` Pranit Bauva
2016-05-04 12:21 ` Christian Couder
2016-05-04 19:10 ` Junio C Hamano
2016-05-04 5:22 ` [PATCH 0/2] bisect--helper: rewrite of check_term_format() Christian Couder
2016-05-04 5:25 ` Pranit Bauva
2016-05-06 14:49 ` [PATCH v5 0/2] bisect--helper: rewrite of check-term-format() Pranit Bauva
2016-05-06 14:49 ` [PATCH v5 1/2] bisect--helper: use OPT_CMDMODE instead of OPT_BOOL Pranit Bauva
2016-05-08 7:04 ` Johannes Schindelin
2016-05-08 7:17 ` Pranit Bauva
2016-05-08 15:30 ` Christian Couder
2016-05-08 15:33 ` Pranit Bauva
2016-05-09 14:59 ` Johannes Schindelin
2016-05-09 15:33 ` Pranit Bauva
2016-05-06 14:49 ` [PATCH v5 2/2] bisect: rewrite `check_term_format` shell function in C Pranit Bauva
2016-05-07 0:05 ` Eric Sunshine
2016-05-06 22:15 ` [PATCH v5 0/2] bisect--helper: rewrite of check-term-format() Junio C Hamano
2016-05-07 13:07 ` Pranit Bauva
2016-05-08 2:25 ` Junio C Hamano
2016-05-08 6:23 ` Pranit Bauva
2016-05-08 13:34 ` Pranit Bauva
2016-05-16 0:35 ` Eric Sunshine
2016-05-16 17:07 ` Christian Couder
2016-05-20 6:59 ` Pranit Bauva
2016-05-12 5:32 ` [PATCH v6 0/3] bisect--helper: check_term_format() & write_terms() Pranit Bauva
2016-05-12 5:32 ` [PATCH v6 1/3] bisect--helper: use OPT_CMDMODE instead of OPT_BOOL Pranit Bauva
2016-05-16 7:07 ` Eric Sunshine
2016-05-20 7:17 ` Pranit Bauva
2016-05-12 5:32 ` Pranit Bauva [this message]
2016-05-12 22:36 ` [PATCH v6 2/3] bisect: rewrite `check_term_format` shell function in C Junio C Hamano
2016-05-13 6:59 ` Pranit Bauva
2016-05-13 18:01 ` Junio C Hamano
2016-05-12 5:32 ` [PATCH v6 3/3] bisect--helper: `write_terms` " Pranit Bauva
2016-05-16 7:28 ` Eric Sunshine
2016-05-16 13:16 ` Johannes Schindelin
2016-05-16 15:42 ` Eric Sunshine
2016-05-16 16:45 ` Johannes Schindelin
2016-05-16 16:59 ` Eric Sunshine
2016-05-20 7:45 ` Pranit Bauva
2016-05-23 11:07 ` Johannes Schindelin
2016-05-23 13:58 ` Christian Couder
2016-05-23 15:10 ` Johannes Schindelin
2016-05-23 14:33 ` Pranit Bauva
2016-05-20 7:42 ` Pranit Bauva
2016-05-23 14:48 ` [PATCH v7 0/3] bisect--helper: check_term_format() & write_terms() Pranit Bauva
2016-05-23 14:48 ` [PATCH v7 1/3] bisect--helper: use OPT_CMDMODE instead of OPT_BOOL Pranit Bauva
2016-05-23 14:48 ` [PATCH v7 2/3] bisect: rewrite `check_term_format` shell function in C Pranit Bauva
2016-05-23 14:48 ` [PATCH v7 3/3] bisect--helper: `write_terms` " Pranit Bauva
2016-05-23 16:01 ` Eric Sunshine
2016-05-23 17:59 ` Pranit Bauva
2016-05-24 7:21 ` [PATCH v8 0/3] bisect--helper: check-term-format() & write_terms() Pranit Bauva
2016-05-24 18:42 ` [PATCH v9 0/3] bisect--helper: check_term_format() and write_terms() Pranit Bauva
2016-05-24 18:42 ` [PATCH v9 1/3] bisect--helper: use OPT_CMDMODE instead of OPT_BOOL Pranit Bauva
2016-05-24 18:42 ` [PATCH v9 2/3] bisect: rewrite `check_term_format` shell function in C Pranit Bauva
2016-05-24 18:42 ` [PATCH v9 3/3] bisect--helper: `write_terms` " Pranit Bauva
2016-05-24 7:21 ` [PATCH v8 1/3] bisect--helper: use OPT_CMDMODE instead of OPT_BOOL Pranit Bauva
2016-05-24 7:21 ` [PATCH v8 2/3] bisect: rewrite `check_term_format` shell function in C Pranit Bauva
2016-05-25 5:04 ` Johannes Schindelin
2016-05-25 5:13 ` Pranit Bauva
2016-06-16 7:10 ` Lars Schneider
2016-06-17 12:48 ` Pranit Bauva
2016-05-24 7:21 ` [PATCH v8 3/3] bisect--helper: `write_terms` " Pranit Bauva
2016-05-24 7:33 ` Christian Couder
2016-05-24 17:39 ` Junio C Hamano
2016-05-24 18:31 ` Pranit Bauva
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
List information: http://vger.kernel.org/majordomo-info.html
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1463031127-17718-3-git-send-email-pranit.bauva@gmail.com \
--to=pranit.bauva@gmail.com \
--cc=Johannes.Schindelin@gmx.de \
--cc=chriscool@tuxfamily.org \
--cc=christian.couder@gmail.com \
--cc=git@vger.kernel.org \
--cc=gitster@pobox.com \
--cc=larsxschneider@gmail.com \
--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.
Code repositories for project(s) associated with this public inbox
https://80x24.org/mirrors/git.git
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).