Commit Graph

90720 Commits

Author SHA1 Message Date
Pratik Karki
709f22748b builtin rebase: support --abort
This commit teaches the builtin rebase the "abort" action, which a user
can call to roll back a rebase that is in progress.

Signed-off-by: Pratik Karki <predatoramigo@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
2018-11-21 17:36:27 +01:00
Pratik Karki
7568f6cd5f builtin rebase: support --skip
This commit adds the option `--skip` which is used to restart
rebase after skipping the current patch.

Signed-off-by: Pratik Karki <predatoramigo@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
2018-11-21 17:36:27 +01:00
Pratik Karki
29986236b8 builtin rebase: support --continue
This commit adds the option `--continue` which is used to resume
rebase after merge conflicts. The code tries to stay as close to
the equivalent shell scripts found in `git-legacy-rebase.sh` as
possible.

When continuing a rebase, the state variables are read from state_dir.
Some of the state variables are not actually stored there, such as
`upstream`. The shell script version simply does not set them, but for
consistency, we unset them in the builtin version.

Signed-off-by: Pratik Karki <predatoramigo@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
2018-11-21 17:36:27 +01:00
Pratik Karki
7794550ed3 builtin rebase: support git rebase <upstream> <switch-to>
This commit adds support for `switch-to` which is used to switch to the
target branch if needed. The equivalent codes found in shell script
`git-legacy-rebase.sh` is converted to builtin `rebase.c`.

Signed-off-by: Pratik Karki <predatoramigo@gmail.com>
Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
2018-11-21 17:36:27 +01:00
Pratik Karki
25d316165e builtin rebase: only store fully-qualified refs in options.head_name
When running a rebase on a detached HEAD, we currently store the string
"detached HEAD" in options.head_name. That is a faithful translation of
the shell script version, and we still kind of need it for the purposes of
the scripted backends.

It is poor style for C, though, where we would really only want a valid,
fully-qualified ref name as value, and NULL for detached HEADs, using
"detached HEAD" for display only. Make it so.

Signed-off-by: Pratik Karki <predatoramigo@gmail.com>
Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
2018-11-21 17:36:27 +01:00
Pratik Karki
440561ccbb builtin rebase: start a new rebase only if none is in progress
To run a new rebase, there needs to be a check to assure that no other
rebase is in progress. New rebase operation cannot start until an
ongoing rebase operation completes or is terminated.

Signed-off-by: Pratik Karki <predatoramigo@gmail.com>
Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
2018-11-21 17:36:27 +01:00
Pratik Karki
6b0b6ddca7 builtin rebase: support --force-rebase
In this commit, we add support to `--force-rebase` option. The
equivalent part of the shell script found in `git-legacy-rebase.sh` is
converted as faithfully as possible to C.

The --force-rebase option ensures that the rebase does not simply
fast-forward even if it could.

Signed-off-by: Pratik Karki <predatoramigo@gmail.com>
Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
2018-11-21 17:36:27 +01:00
Pratik Karki
b2e7d08bb3 builtin rebase: try to fast forward when possible
In this commit, we add support to fast forward.

Note: we will need the merge base later, therefore the call to
can_fast_forward() really needs to be the first one when testing whether
we can skip the rebase entirely (otherwise, it would make more sense to
skip the possibly expensive operation if, say, running an interactive
rebase).

Signed-off-by: Pratik Karki <predatoramigo@gmail.com>
Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
2018-11-21 17:36:27 +01:00
Pratik Karki
fb7c99607d builtin rebase: require a clean worktree
This commit reads the index of the repository for rebase and checks
whether the repository is ready for rebase.

Signed-off-by: Pratik Karki <predatoramigo@gmail.com>
Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
2018-11-21 17:36:27 +01:00
Pratik Karki
2fd4c5f6c5 builtin rebase: support the verbose and diffstat options
This commit introduces support for the `-v` and `--stat` options of
rebase.

The --stat option can also be configured via the Git config setting
rebase.stat. To support this, we also add a custom rebase_config()
function in this commit that will be used instead of (and falls back to
calling) git_default_config().

Signed-off-by: Pratik Karki <predatoramigo@gmail.com>
Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
2018-11-21 17:36:26 +01:00
Pratik Karki
ce83a90991 builtin rebase: support --quiet
This commit introduces a rebase option `--quiet`. While `--quiet` is
commonly perceived as opposite to `--verbose`, this is not the case for
the rebase command: both `--quiet` and `--verbose` default to `false` if
neither `--quiet` nor `--verbose` is present.

Despite the default being `false` for both verbose and quiet mode,
passing the `--quiet` option will turn off verbose mode, and `--verbose`
will turn off quiet mode.

This patch introduces the `flags` bit field, with `REBASE_NO_QUIET`
as first user (with many more to come).

We do *not* use `REBASE_QUIET` here for an important reason: To keep the
implementation simple, this commit introduces `--no-quiet` instead of
`--quiet`, so that a single `OPT_NEGBIT()` can turn on quiet mode and
turn off verbose and diffstat mode at the same time. Likewise, the
companion commit which will introduce support for `--verbose` will have
a single `OPT_BIT()` that turns off quiet mode and turns on verbose and
diffstat mode at the same time.

Signed-off-by: Pratik Karki <predatoramigo@gmail.com>
Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
2018-11-21 17:36:26 +01:00
Pratik Karki
134793850f builtin rebase: handle the pre-rebase hook and --no-verify
This commit converts the equivalent part of the shell script
`git-legacy-rebase.sh` to run the pre-rebase hook (unless disabled), and
to interrupt the rebase with error if the hook fails.

Signed-off-by: Pratik Karki <predatoramigo@gmail.com>
Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
2018-11-21 17:36:26 +01:00
Pratik Karki
7317a0b8ef builtin rebase: support git rebase --onto A...B
This commit implements support for an --onto argument that is actually a
"symmetric range" i.e. `<rev1>...<rev2>`.

The equivalent shell script version of the code offers two different
error messages for the cases where there is no merge base vs more than
one merge base.

Though it would be nice to retain this distinction, dropping it makes it
possible to simply use the `get_oid_mb()` function. Besides, it happens
rarely in real-world scenarios.

Therefore, in the interest of keeping the code less complex, let's just
use that function, and live with an error message that does not
distinguish between those two error conditions.

Signed-off-by: Pratik Karki <predatoramigo@gmail.com>
Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
2018-11-21 17:36:26 +01:00
Pratik Karki
87a7900810 builtin rebase: support --onto
The `--onto` option is important, as it allows to rebase a range of
commits onto a different base commit (which gave the command its odd
name: "rebase").

This commit introduces options parsing so that different options can
be added in future commits.

Note: As this commit introduces to the parse_options() call (which
"eats" argv[0]), the argc is now expected to be lower by one after this
patch, compared to before this patch: argv[0] no longer refers to the
command name, but to the first (non-option) command-line parameter.

Signed-off-by: Pratik Karki <predatoramigo@gmail.com>
Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
2018-11-21 17:36:26 +01:00
Pratik Karki
35f1581110 builtin/rebase: support running "git rebase <upstream>"
This patch gives life to the skeleton added in the previous patches:
With this change, we can perform a elementary rebase (without any
options).

It can be tested thusly by:

git -c rebase.usebuiltin=true rebase HEAD~2

The rebase backends (i.e. the shell script functions defined in
`git-rebase--<backend>`) are still at work here and the "builtin
rebase"'s purpose is simply to parse the options and set
everything up so that those rebase backends can do their work.

Note: We take an alternative approach here which is *not* to set the
environment variables via `run_command_v_opt_cd_env()` because those
variables would then be visible by processes spawned from the rebase
backends. Instead, we work hard to set them in the shell script snippet.
On Windows, some of the tests fail merely due to core.fileMode not
being heeded that's why the core.*config variables is parsed here.

The `reset_head()` function is currently only used to detach the HEAD
to onto by way of starting the rebase, but it offers additional
functionality that subsequent patches will need like moving to the
original branch (possibly updating it) and also to do the equivalent of
`git reset --hard`.

The next commits will handle and support all the wonderful rebase
options.

Signed-off-by: Pratik Karki <predatoramigo@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
2018-11-21 17:36:26 +01:00
Pratik Karki
e53bff9f60 rebase: refactor common shell functions into their own file
The functions present in `git-legacy-rebase.sh` are used by the rebase
backends as they are implemented as shell script functions in the
`git-rebase--<backend>` files.

To make the `builtin/rebase.c` work, we have to provide support via
a Unix shell script snippet that uses these functions and so, we
want to use the rebase backends *directly* from the builtin rebase
without going through `git-legacy-rebase.sh`.

This commit extracts the functions to a separate file,
`git-rebase--common`, that will be read by `git-legacy-rebase.sh` and
by the shell script snippets which will be used extensively in the
following commits.

Signed-off-by: Pratik Karki <predatoramigo@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
2018-11-21 17:36:26 +01:00
Pratik Karki
2f3a8cfbb3 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>
2018-11-21 17:36:26 +01:00
Johannes Schindelin
c35a3ea0c4 Start the merging-rebase to v2.19.2
This commit starts the rebase of 1085d510a6 to e0a939751a
2018-11-21 17:29:34 +01:00
Johannes Schindelin
5f26ad6184 fixup! mingw: replace mingw_startup() hack
We do not actually need -mconsole; it is the default. But it hurts to
have it, as it breaks the assumption of the mingw-w64-git package that
it can reuse the flags to link git-bash.exe. So let's remove it.

Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
2018-11-21 17:25:11 +01:00
Junio C Hamano
98cdfbb84a Git 2.19.2
Signed-off-by: Junio C Hamano <gitster@pobox.com>
v2.19.2
2018-11-21 23:22:12 +09:00
Junio C Hamano
a4830a7a45 Merge branch 'sg/test-rebase-editor-fix' into maint
* sg/test-rebase-editor-fix:
  t3404-rebase-interactive: test abbreviated commands
2018-11-21 22:58:10 +09:00
Junio C Hamano
85eb0f162c Merge branch 'tb/char-may-be-unsigned' into maint
Build portability fix.

* tb/char-may-be-unsigned:
  path.c: char is not (always) signed
2018-11-21 22:58:09 +09:00
Junio C Hamano
2b153408b4 Merge branch 'jk/uploadpack-packobjectshook-fix' into maint
Code clean-up that results in a small bugfix.

* jk/uploadpack-packobjectshook-fix:
  upload-pack: fix broken if/else chain in config callback
2018-11-21 22:58:09 +09:00
Junio C Hamano
227124b271 Merge branch 'uk/merge-subtree-doc-update' into maint
Belated documentation update to adjust to a new world order that
happened a yew years ago.

* uk/merge-subtree-doc-update:
  howto/using-merge-subtree: mention --allow-unrelated-histories
2018-11-21 22:58:08 +09:00
Junio C Hamano
196afc439c Merge branch 'jc/cocci-preincr' into maint
Code cleanup.

* jc/cocci-preincr:
  fsck: s/++i > 1/i++/
  cocci: simplify "if (++u > 1)" to "if (u++)"
2018-11-21 22:58:08 +09:00
Junio C Hamano
eba14167f1 Merge branch 'ah/doc-updates' into maint
Doc updates.

* ah/doc-updates:
  doc: fix formatting in git-update-ref
  doc: fix indentation of listing blocks in gitweb.conf.txt
  doc: fix descripion for 'git tag --format'
  doc: fix inappropriate monospace formatting
  doc: fix ASCII art tab spacing
  doc: clarify boundaries of 'git worktree list --porcelain'
2018-11-21 22:58:07 +09:00
Junio C Hamano
b53df43bf5 Merge branch 'sg/doc-show-branch-typofix' into maint
Docfix.

* sg/doc-show-branch-typofix:
  doc: fix small typo in git show-branch
2018-11-21 22:58:07 +09:00
Junio C Hamano
69ae6660fc Merge branch 'tq/branch-style-fix' into maint
Code clean-up.

* tq/branch-style-fix:
  branch: trivial style fix
2018-11-21 22:58:06 +09:00
Junio C Hamano
2b40fdd079 Merge branch 'tq/branch-create-wo-branch-get' into maint
Code clean-up.

* tq/branch-create-wo-branch-get:
  builtin/branch.c: remove useless branch_get
2018-11-21 22:58:06 +09:00
Junio C Hamano
c2d6378458 Merge branch 'sb/strbuf-h-update' into maint
Code clean-up to serve as a BCP example.
Further clean-up patches may want to follow soon.

* sb/strbuf-h-update:
  strbuf.h: format according to coding guidelines
2018-11-21 22:58:06 +09:00
Junio C Hamano
a6dc172d00 Merge branch 'du/cherry-is-plumbing' into maint
Doc update to mark "git cherry" as a plumbing command.

* du/cherry-is-plumbing:
  doc: move git-cherry to plumbing
2018-11-21 22:58:05 +09:00
Junio C Hamano
c3ba2ae0ba Merge branch 'du/get-tar-commit-id-is-plumbing' into maint
Doc update to mark "git get-tar-commit-id" as a plumbing command.

* du/get-tar-commit-id-is-plumbing:
  doc: move git-get-tar-commit-id to plumbing
2018-11-21 22:58:05 +09:00
Junio C Hamano
53016f4c13 Merge branch 'mm/doc-no-dashed-git' into maint
Doc update.

* mm/doc-no-dashed-git:
  doc: fix a typo and clarify a sentence
2018-11-21 22:58:05 +09:00
Junio C Hamano
95500c8a0d Merge branch 'du/rev-parse-is-plumbing' into maint
Doc update.

* du/rev-parse-is-plumbing:
  doc: move git-rev-parse from porcelain to plumbing
2018-11-21 22:58:04 +09:00
Junio C Hamano
6262f5c471 Merge branch 'ma/t7005-bash-workaround' into maint
Test fix.

* ma/t7005-bash-workaround:
  t7005-editor: quote filename to fix whitespace-issue
2018-11-21 22:58:04 +09:00
Junio C Hamano
6b57374d3e Merge branch 'jc/how-to-document-api' into maint
Doc update.

* jc/how-to-document-api:
  CodingGuidelines: document the API in *.h files
2018-11-21 22:58:03 +09:00
Junio C Hamano
368ba6b7ac Merge branch 'mw/doc-typofixes' into maint
Typofixes.

* mw/doc-typofixes:
  docs: typo: s/isimilar/similar/
  docs: graph: remove unnecessary `graph_update()' call
  docs: typo: s/go/to/
2018-11-21 22:58:03 +09:00
Junio C Hamano
587b3f5d72 Merge branch 'rs/sequencer-oidset-insert-avoids-dups' into maint
Code clean-up.

* rs/sequencer-oidset-insert-avoids-dups:
  sequencer: use return value of oidset_insert()
2018-11-21 22:58:02 +09:00
Junio C Hamano
171309399a Merge branch 'ma/mailing-list-address-in-git-help' into maint
Doc update.

* ma/mailing-list-address-in-git-help:
  git doc: direct bug reporters to mailing list archive
2018-11-21 22:58:02 +09:00
Junio C Hamano
060d0617ef Merge branch 'nd/packobjectshook-doc-fix' into maint
Doc update.

* nd/packobjectshook-doc-fix:
  config.txt: correct the note about uploadpack.packObjectsHook
2018-11-21 22:58:01 +09:00
Junio C Hamano
6f1c8154aa Merge branch 'ma/t1400-undebug-test' into maint
Test fix.

* ma/t1400-undebug-test:
  t1400: drop debug `echo` to actually execute `test`
2018-11-21 22:58:01 +09:00
Junio C Hamano
35e54ea2e0 Merge branch 'ma/commit-graph-docs' into maint
Doc update.

* ma/commit-graph-docs:
  Doc: refer to the "commit-graph file" with dash
  git-commit-graph.txt: refer to "*commit*-graph file"
  git-commit-graph.txt: typeset more in monospace
  git-commit-graph.txt: fix bullet lists
2018-11-21 22:58:00 +09:00
Junio C Hamano
871955c797 Merge branch 'dz/credential-doc-url-matching-rules' into maint
Doc update.

* dz/credential-doc-url-matching-rules:
  doc: clarify gitcredentials path component matching
2018-11-21 22:58:00 +09:00
Junio C Hamano
75266b4e8b Merge branch 'jk/check-everything-connected-is-long-gone' into maint
Comment fix.

* jk/check-everything-connected-is-long-gone:
  receive-pack: update comment with check_everything_connected
2018-11-21 22:58:00 +09:00
Junio C Hamano
0caea62a4b Merge branch 'fe/doc-updates' into maint
Doc updates.

* fe/doc-updates:
  git-describe.1: clarify that "human readable" is also git-readable
  git-column.1: clarify initial description, provide examples
  git-archimport.1: specify what kind of Arch we're talking about
2018-11-21 22:57:58 +09:00
Junio C Hamano
2a98f6c2b5 Merge branch 'tg/t5551-with-curl-7.61.1' into maint
Test update.
Supersedes tz/t5551-with-curl-7.61.1 topic

* tg/t5551-with-curl-7.61.1:
  t5551: compare sorted cookies files
  t5551: move setup code inside test_expect blocks
2018-11-21 22:57:58 +09:00
Junio C Hamano
a75337341f Merge branch 'tq/refs-internal-comment-fix' into maint
Fix for typo in a sample code in comment.

* tq/refs-internal-comment-fix:
  refs: docstring typo
2018-11-21 22:57:58 +09:00
Junio C Hamano
85f6afc28b Merge branch 'sg/split-index-test' into maint
Test updates.

* sg/split-index-test:
  t0090: disable GIT_TEST_SPLIT_INDEX for the test checking split index
  t1700-split-index: drop unnecessary 'grep'
2018-11-21 22:57:57 +09:00
Junio C Hamano
3ae0ac65cf Merge branch 'bw/protocol-v2' into maint
Doc fix.

* bw/protocol-v2:
  config: document value 2 for protocol.version
2018-11-21 22:57:57 +09:00
Junio C Hamano
d5e4cbabcf Merge branch 'sb/string-list-remove-unused' into maint
Code clean-up.

* sb/string-list-remove-unused:
  string-list: remove unused function print_string_list
2018-11-21 22:57:56 +09:00