Hi Pratik, On Sun, 8 Jul 2018, Pratik Karki wrote: > As a GSoC project, I have been working on the builtin rebase. > > The motivation behind the rewrite of rebase i.e. from shell script to C > are for following reasons: > > 1. Writing shell scripts and getting it to production is much faster > than doing the equivalent in C but lacks in performance and extra > workarounds are needed for non-POSIX platforms. > > 2. Git for Windows is at loss as the installer size increases due to > addition of extra dependencies for the shell scripts which are usually > available in POSIX compliant platforms. > > This series of patches serves to demonstrate a minimal builtin rebase > which supports running `git rebase <upstream>` and also serves to ask for > reviews. > > Changes since v3: > > - Fix commit message of `rebase: start implementing it as a builtin`. > > - Acknowledge Junio's style reviews. > > - Acknowledge Johannes Schindelin's review. The range-diff looks like this (and makes sense to me; you might want to fix the typo s/retun/return/, but that's all for now): -- snipsnap -- 1: 7baec70f219 ! 1: 42778b20edf rebase: start implementing it as a builtin @@ -13,6 +13,12 @@ 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 retun 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 2: f385f42dc56 ! 2: a28be7308e6 rebase: refactor common shell functions into their own file @@ -45,6 +45,20 @@ diff --git a/git-legacy-rebase.sh b/git-legacy-rebase.sh --- a/git-legacy-rebase.sh +++ b/git-legacy-rebase.sh +@@ + LF=' + ' + ok_to_skip_pre_rebase= +-resolvemsg=" +-$(gettext 'Resolve all conflicts manually, mark them as resolved with +-"git add/rm <conflicted_files>", then run "git rebase --continue". +-You can instead skip this commit: run "git rebase --skip". +-To abort and get back to the state before "git rebase", run "git rebase --abort".') +-" ++ + squash_onto= + unset onto + unset restrict_revision @@ true) gpg_sign_opt=-S ;; *) gpg_sign_opt= ;; @@ -128,6 +142,13 @@ +++ b/git-rebase--common.sh @@ + ++resolvemsg=" ++$(gettext 'Resolve all conflicts manually, mark them as resolved with ++"git add/rm <conflicted_files>", then run "git rebase --continue". ++You can instead skip this commit: run "git rebase --skip". ++To abort and get back to the state before "git rebase", run "git rebase --abort".') ++" ++ +write_basic_state () { + echo "$head_name" > "$state_dir"/head-name && + echo "$onto" > "$state_dir"/onto && 3: 147699bd195 = 3: 7591098c4d1 sequencer: refactor the code to detach HEAD to checkout.c 4: bbaa4264caa ! 4: f8429e950a4 builtin/rebase: support running "git rebase <upstream>" @@ -232,13 +232,14 @@ + } + + /* -+ * If the branch to rebase is given, that is the branch we will rebase -+ * branch_name -- branch/commit being rebased, or HEAD (already detached) -+ * orig_head -- commit object name of tip of the branch before rebasing -+ * head_name -- refs/heads/<that-branch> or "detached HEAD" -+ */ ++ * If the branch to rebase is given, that is the branch we will rebase ++ * branch_name -- branch/commit being rebased, or ++ * HEAD (already detached) ++ * orig_head -- commit object name of tip of the branch before rebasing ++ * head_name -- refs/heads/<that-branch> or "detached HEAD" ++ */ + if (argc > 1) -+ die ("TODO: handle switch_to"); ++ die("TODO: handle switch_to"); + else { + /* Do not need to switch branches, we are already on it. */ + options.head_name =