-
Notifications
You must be signed in to change notification settings - Fork 25.3k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
rebase: start implementing it as a builtin
This commit imitates the strategy that was used to convert the difftool to a builtin. We start by renaming the shell script `git-rebase.sh` to `git-legacy-rebase.sh` and introduce a `builtin/rebase.c` that simply executes the shell script version, unless the config setting `rebase.useBuiltin` is set to `true`. The motivation behind this is to rewrite all the functionality of the shell script version in the aforementioned `rebase.c`, one by one and be able to conveniently test new features by configuring `rebase.useBuiltin`. In the original difftool conversion, if sane_execvp() that attempts to run the legacy scripted version returned with non-negative status, the command silently exited without doing anything with success, but sane_execvp() should not return with non-negative status in the first place, so we use die() to notice such an abnormal case. We intentionally avoid reading the config directly to avoid messing up the GIT_* environment variables when we need to fall back to exec()ing the shell script. The test of builtin rebase can be done by `git -c rebase.useBuiltin=true rebase ...` Signed-off-by: Pratik Karki <predatoramigo@gmail.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
- Loading branch information
Showing
6 changed files
with
68 additions
and
1 deletion.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,58 @@ | ||
/* | ||
* "git rebase" builtin command | ||
* | ||
* Copyright (c) 2018 Pratik Karki | ||
*/ | ||
|
||
#include "builtin.h" | ||
#include "run-command.h" | ||
#include "exec-cmd.h" | ||
#include "argv-array.h" | ||
#include "dir.h" | ||
|
||
static int use_builtin_rebase(void) | ||
{ | ||
struct child_process cp = CHILD_PROCESS_INIT; | ||
struct strbuf out = STRBUF_INIT; | ||
int ret; | ||
|
||
argv_array_pushl(&cp.args, | ||
"config", "--bool", "rebase.usebuiltin", NULL); | ||
cp.git_cmd = 1; | ||
if (capture_command(&cp, &out, 6)) { | ||
strbuf_release(&out); | ||
return 0; | ||
} | ||
|
||
strbuf_trim(&out); | ||
ret = !strcmp("true", out.buf); | ||
strbuf_release(&out); | ||
return ret; | ||
} | ||
|
||
int cmd_rebase(int argc, const char **argv, const char *prefix) | ||
{ | ||
/* | ||
* NEEDSWORK: Once the builtin rebase has been tested enough | ||
* and git-legacy-rebase.sh is retired to contrib/, this preamble | ||
* can be removed. | ||
*/ | ||
|
||
if (!use_builtin_rebase()) { | ||
const char *path = mkpath("%s/git-legacy-rebase", | ||
git_exec_path()); | ||
|
||
if (sane_execvp(path, (char **)argv) < 0) | ||
die_errno(_("could not exec %s"), path); | ||
else | ||
BUG("sane_execvp() returned???"); | ||
} | ||
|
||
if (argc != 2) | ||
die(_("Usage: %s <base>"), argv[0]); | ||
prefix = setup_git_directory(); | ||
trace_repo_setup(prefix); | ||
setup_work_tree(); | ||
|
||
die("TODO"); | ||
} |
File renamed without changes.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters