mirror of
https://github.com/git/git
synced 2024-08-24 18:26:02 +00:00
bisect--helper: reimplement bisect_visualize()
shell function in C
Reimplement the `bisect_visualize()` shell function in C and also add `--bisect-visualize` subcommand to `git bisect--helper` to call it from git-bisect.sh. Mentored-by: Christian Couder <chriscool@tuxfamily.org> Mentored-by: Johannes Schindelin <Johannes.Schindelin@gmx.de> Signed-off-by: Tanushree Tumane <tanushreetumane@gmail.com> Signed-off-by: Miriam Rubio <mirucam@gmail.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
parent
3f36e6f30c
commit
5e1f28d206
|
@ -30,6 +30,7 @@ static const char * const git_bisect_helper_usage[] = {
|
|||
N_("git bisect--helper --bisect-state (good|old) [<rev>...]"),
|
||||
N_("git bisect--helper --bisect-replay <filename>"),
|
||||
N_("git bisect--helper --bisect-skip [(<rev>|<range>)...]"),
|
||||
N_("git bisect--helper --bisect-visualize"),
|
||||
NULL
|
||||
};
|
||||
|
||||
|
@ -1036,6 +1037,44 @@ static enum bisect_error bisect_skip(struct bisect_terms *terms, const char **ar
|
|||
return res;
|
||||
}
|
||||
|
||||
static int bisect_visualize(struct bisect_terms *terms, const char **argv, int argc)
|
||||
{
|
||||
struct strvec args = STRVEC_INIT;
|
||||
int flags = RUN_COMMAND_NO_STDIN, res = 0;
|
||||
struct strbuf sb = STRBUF_INIT;
|
||||
|
||||
if (bisect_next_check(terms, NULL) != 0)
|
||||
return BISECT_FAILED;
|
||||
|
||||
if (!argc) {
|
||||
if ((getenv("DISPLAY") || getenv("SESSIONNAME") || getenv("MSYSTEM") ||
|
||||
getenv("SECURITYSESSIONID")) && exists_in_PATH("gitk")) {
|
||||
strvec_push(&args, "gitk");
|
||||
} else {
|
||||
strvec_push(&args, "log");
|
||||
flags |= RUN_GIT_CMD;
|
||||
}
|
||||
} else {
|
||||
if (argv[0][0] == '-') {
|
||||
strvec_push(&args, "log");
|
||||
flags |= RUN_GIT_CMD;
|
||||
} else if (strcmp(argv[0], "tig") && !starts_with(argv[0], "git"))
|
||||
flags |= RUN_GIT_CMD;
|
||||
|
||||
strvec_pushv(&args, argv);
|
||||
}
|
||||
|
||||
strvec_pushl(&args, "--bisect", "--", NULL);
|
||||
|
||||
strbuf_read_file(&sb, git_path_bisect_names(), 0);
|
||||
sq_dequote_to_strvec(sb.buf, &args);
|
||||
strbuf_release(&sb);
|
||||
|
||||
res = run_command_v_opt(args.v, flags);
|
||||
strvec_clear(&args);
|
||||
return res;
|
||||
}
|
||||
|
||||
int cmd_bisect__helper(int argc, const char **argv, const char *prefix)
|
||||
{
|
||||
enum {
|
||||
|
@ -1048,7 +1087,8 @@ int cmd_bisect__helper(int argc, const char **argv, const char *prefix)
|
|||
BISECT_STATE,
|
||||
BISECT_LOG,
|
||||
BISECT_REPLAY,
|
||||
BISECT_SKIP
|
||||
BISECT_SKIP,
|
||||
BISECT_VISUALIZE,
|
||||
} cmdmode = 0;
|
||||
int res = 0, nolog = 0;
|
||||
struct option options[] = {
|
||||
|
@ -1070,6 +1110,8 @@ int cmd_bisect__helper(int argc, const char **argv, const char *prefix)
|
|||
N_("replay the bisection process from the given file"), BISECT_REPLAY),
|
||||
OPT_CMDMODE(0, "bisect-skip", &cmdmode,
|
||||
N_("skip some commits for checkout"), BISECT_SKIP),
|
||||
OPT_CMDMODE(0, "bisect-visualize", &cmdmode,
|
||||
N_("visualize the bisection"), BISECT_VISUALIZE),
|
||||
OPT_BOOL(0, "no-log", &nolog,
|
||||
N_("no log for BISECT_WRITE")),
|
||||
OPT_END()
|
||||
|
@ -1131,6 +1173,10 @@ int cmd_bisect__helper(int argc, const char **argv, const char *prefix)
|
|||
get_terms(&terms);
|
||||
res = bisect_skip(&terms, argv, argc);
|
||||
break;
|
||||
case BISECT_VISUALIZE:
|
||||
get_terms(&terms);
|
||||
res = bisect_visualize(&terms, argv, argc);
|
||||
break;
|
||||
default:
|
||||
BUG("unknown subcommand %d", cmdmode);
|
||||
}
|
||||
|
|
|
@ -39,29 +39,6 @@ _x40="$_x40$_x40$_x40$_x40$_x40$_x40$_x40$_x40"
|
|||
TERM_BAD=bad
|
||||
TERM_GOOD=good
|
||||
|
||||
bisect_visualize() {
|
||||
git bisect--helper --bisect-next-check $TERM_GOOD $TERM_BAD fail || exit
|
||||
|
||||
if test $# = 0
|
||||
then
|
||||
if test -n "${DISPLAY+set}${SESSIONNAME+set}${MSYSTEM+set}${SECURITYSESSIONID+set}" &&
|
||||
type gitk >/dev/null 2>&1
|
||||
then
|
||||
set gitk
|
||||
else
|
||||
set git log
|
||||
fi
|
||||
else
|
||||
case "$1" in
|
||||
git*|tig) ;;
|
||||
-*) set git log "$@" ;;
|
||||
*) set git "$@" ;;
|
||||
esac
|
||||
fi
|
||||
|
||||
eval '"$@"' --bisect -- $(cat "$GIT_DIR/BISECT_NAMES")
|
||||
}
|
||||
|
||||
bisect_run () {
|
||||
git bisect--helper --bisect-next-check $TERM_GOOD $TERM_BAD fail || exit
|
||||
|
||||
|
@ -152,7 +129,7 @@ case "$#" in
|
|||
# Not sure we want "next" at the UI level anymore.
|
||||
git bisect--helper --bisect-next "$@" || exit ;;
|
||||
visualize|view)
|
||||
bisect_visualize "$@" ;;
|
||||
git bisect--helper --bisect-visualize "$@" || exit;;
|
||||
reset)
|
||||
git bisect--helper --bisect-reset "$@" ;;
|
||||
replay)
|
||||
|
|
Loading…
Reference in a new issue