* [PATCH 07/25] documentation: fix subject/verb agreement
@ 2023-10-08 6:45 3% ` Elijah Newren via GitGitGadget
2023-10-08 6:45 4% ` [PATCH 22/25] documentation: add some commas where they are helpful Elijah Newren via GitGitGadget
1 sibling, 0 replies; 71+ results
From: Elijah Newren via GitGitGadget @ 2023-10-08 6:45 UTC (permalink / raw)
To: git; +Cc: Elijah Newren, Elijah Newren
From: Elijah Newren <newren@gmail.com>
Diff best viewed with --color-diff.
Signed-off-by: Elijah Newren <newren@gmail.com>
---
Documentation/CodingGuidelines | 2 +-
Documentation/config/advice.txt | 2 +-
Documentation/config/alias.txt | 2 +-
Documentation/config/fsck.txt | 2 +-
Documentation/config/gpg.txt | 2 +-
Documentation/config/maintenance.txt | 2 +-
Documentation/config/status.txt | 2 +-
Documentation/fetch-options.txt | 2 +-
Documentation/git-blame.txt | 2 +-
Documentation/git-diff-tree.txt | 2 +-
Documentation/git-format-patch.txt | 2 +-
Documentation/git-fsck.txt | 4 ++--
Documentation/git-init.txt | 2 +-
Documentation/git-rev-list.txt | 2 +-
Documentation/git-show-ref.txt | 2 +-
Documentation/git-symbolic-ref.txt | 2 +-
Documentation/gitdiffcore.txt | 2 +-
Documentation/gitformat-bundle.txt | 2 +-
Documentation/gitprotocol-capabilities.txt | 2 +-
Documentation/gitprotocol-pack.txt | 4 ++--
Documentation/glossary-content.txt | 2 +-
Documentation/howto/coordinate-embargoed-releases.txt | 2 +-
Documentation/i18n.txt | 2 +-
Documentation/technical/api-simple-ipc.txt | 2 +-
Documentation/technical/reftable.txt | 4 ++--
25 files changed, 28 insertions(+), 28 deletions(-)
diff --git a/Documentation/CodingGuidelines b/Documentation/CodingGuidelines
index 99b22ff2345..c494e07460e 100644
--- a/Documentation/CodingGuidelines
+++ b/Documentation/CodingGuidelines
@@ -40,7 +40,7 @@ As for more concrete guidelines, just imitate the existing code
contributing to). It is always preferable to match the _local_
convention. New code added to Git suite is expected to match
the overall style of existing code. Modifications to existing
-code is expected to match the style the surrounding code already
+code are expected to match the style the surrounding code already
uses (even if it doesn't match the overall style of existing code).
But if you must have a list of rules, here are some language
diff --git a/Documentation/config/advice.txt b/Documentation/config/advice.txt
index f4864a2d58b..f524af4e899 100644
--- a/Documentation/config/advice.txt
+++ b/Documentation/config/advice.txt
@@ -5,7 +5,7 @@ advice.*::
+
--
ambiguousFetchRefspec::
- Advice shown when fetch refspec for multiple remotes map to
+ Advice shown when fetch refspec for multiple remotes maps to
the same remote-tracking branch namespace and causes branch
tracking set-up to fail.
fetchShowForcedUpdates::
diff --git a/Documentation/config/alias.txt b/Documentation/config/alias.txt
index f1ca739d574..01df96fab3d 100644
--- a/Documentation/config/alias.txt
+++ b/Documentation/config/alias.txt
@@ -4,7 +4,7 @@ alias.*::
`git last` is equivalent to `git cat-file commit HEAD`. To avoid
confusion and troubles with script usage, aliases that
hide existing Git commands are ignored. Arguments are split by
- spaces, the usual shell quoting and escaping is supported.
+ spaces, the usual shell quoting and escaping are supported.
A quote pair or a backslash can be used to quote them.
+
Note that the first word of an alias does not necessarily have to be a
diff --git a/Documentation/config/fsck.txt b/Documentation/config/fsck.txt
index 9b167575530..0687e86ba10 100644
--- a/Documentation/config/fsck.txt
+++ b/Documentation/config/fsck.txt
@@ -44,7 +44,7 @@ fsck.skipList::
The path to a list of object names (i.e. one unabbreviated SHA-1 per
line) that are known to be broken in a non-fatal way and should
be ignored. On versions of Git 2.20 and later comments ('#'), empty
- lines, and any leading and trailing whitespace is ignored. Everything
+ lines, and any leading and trailing whitespace are ignored. Everything
but a SHA-1 per line will error out on older versions.
+
This feature is useful when an established project should be accepted
diff --git a/Documentation/config/gpg.txt b/Documentation/config/gpg.txt
index 248d99d70b8..5cf32b179dc 100644
--- a/Documentation/config/gpg.txt
+++ b/Documentation/config/gpg.txt
@@ -25,7 +25,7 @@ gpg.<format>.program::
gpg.minTrustLevel::
Specifies a minimum trust level for signature verification. If
this option is unset, then signature verification for merge
- operations require a key with at least `marginal` trust. Other
+ operations requires a key with at least `marginal` trust. Other
operations that perform signature verification require a key
with at least `undefined` trust. Setting this option overrides
the required trust-level for all operations. Supported values,
diff --git a/Documentation/config/maintenance.txt b/Documentation/config/maintenance.txt
index 18f05621314..69a4f05153e 100644
--- a/Documentation/config/maintenance.txt
+++ b/Documentation/config/maintenance.txt
@@ -12,7 +12,7 @@ maintenance.strategy::
then that value is used instead of the one provided by
`maintenance.strategy`. The possible strategy strings are:
+
-* `none`: This default setting implies no task are run at any schedule.
+* `none`: This default setting implies no tasks are run at any schedule.
* `incremental`: This setting optimizes for performing small maintenance
activities that do not delete any data. This does not schedule the `gc`
task, but runs the `prefetch` and `commit-graph` tasks hourly, the
diff --git a/Documentation/config/status.txt b/Documentation/config/status.txt
index 0fc704ab80b..f0336938cbc 100644
--- a/Documentation/config/status.txt
+++ b/Documentation/config/status.txt
@@ -47,7 +47,7 @@ status.showUntrackedFiles::
contain only untracked files, are shown with the directory name
only. Showing untracked files means that Git needs to lstat() all
the files in the whole repository, which might be slow on some
- systems. So, this variable controls how the commands displays
+ systems. So, this variable controls how the commands display
the untracked files. Possible values are:
+
--
diff --git a/Documentation/fetch-options.txt b/Documentation/fetch-options.txt
index 41fc7ca3c67..9ee9fa659d2 100644
--- a/Documentation/fetch-options.txt
+++ b/Documentation/fetch-options.txt
@@ -43,7 +43,7 @@ the current repository has the same history as the source repository.
--update-shallow::
By default when fetching from a shallow repository,
`git fetch` refuses refs that require updating
- .git/shallow. This option updates .git/shallow and accept such
+ .git/shallow. This option updates .git/shallow and accepts such
refs.
--negotiation-tip=<commit|glob>::
diff --git a/Documentation/git-blame.txt b/Documentation/git-blame.txt
index f69a871a96f..a927c7c9f33 100644
--- a/Documentation/git-blame.txt
+++ b/Documentation/git-blame.txt
@@ -128,7 +128,7 @@ at least once for each commit:
- the filename in the commit that the line is attributed to.
- the first line of the commit log message ("summary").
-The contents of the actual line is output after the above
+The contents of the actual line are output after the above
header, prefixed by a TAB. This is to allow adding more
header elements later.
diff --git a/Documentation/git-diff-tree.txt b/Documentation/git-diff-tree.txt
index 37ca32c396f..1e34f80daa9 100644
--- a/Documentation/git-diff-tree.txt
+++ b/Documentation/git-diff-tree.txt
@@ -107,7 +107,7 @@ include::pretty-options.txt[]
by omitting uninteresting hunks whose contents in the parents
have only two variants and the merge result picks one of them
without modification. When all hunks are uninteresting, the commit
- itself and the commit log message is not shown, just like in any other
+ itself and the commit log message are not shown, just like in any other
"empty diff" case.
--combined-all-paths::
diff --git a/Documentation/git-format-patch.txt b/Documentation/git-format-patch.txt
index 711823a7f4e..aaafce24be2 100644
--- a/Documentation/git-format-patch.txt
+++ b/Documentation/git-format-patch.txt
@@ -55,7 +55,7 @@ A "message" generated by the command consists of three parts:
* The "patch", which is the "diff -p --stat" output (see
linkgit:git-diff[1]) between the commit and its parent.
-The log message and the patch is separated by a line with a
+The log message and the patch are separated by a line with a
three-dash line.
There are two ways to specify which commits to operate on.
diff --git a/Documentation/git-fsck.txt b/Documentation/git-fsck.txt
index b6a0f8a085c..e4980d28615 100644
--- a/Documentation/git-fsck.txt
+++ b/Documentation/git-fsck.txt
@@ -64,7 +64,7 @@ index file, all SHA-1 references in `refs` namespace, and all reflogs
--connectivity-only::
Check only the connectivity of reachable objects, making sure
that any objects referenced by a reachable tag, commit, or tree
- is present. This speeds up the operation by avoiding reading
+ are present. This speeds up the operation by avoiding reading
blobs entirely (though it does still check that referenced blobs
exist). This will detect corruption in commits and trees, but
not do any semantic checks (e.g., for format errors). Corruption
@@ -79,7 +79,7 @@ care about this output and want to speed it up further.
recorded with g+w bit set, which was created by older
versions of Git. Existing repositories, including the
Linux kernel, Git itself, and sparse repository have old
- objects that triggers this check, but it is recommended
+ objects that trigger this check, but it is recommended
to check new projects with this flag.
--verbose::
diff --git a/Documentation/git-init.txt b/Documentation/git-init.txt
index 30ab86ab96a..138dc4a3bfe 100644
--- a/Documentation/git-init.txt
+++ b/Documentation/git-init.txt
@@ -115,7 +115,7 @@ Same as 'group', but make the repository readable by all users.
'<perm>' is a 3-digit octal number prefixed with `0` and each file
will have mode '<perm>'. '<perm>' will override users' umask(2)
value (and not only loosen permissions as 'group' and 'all'
-does). '0640' will create a repository which is group-readable, but
+do). '0640' will create a repository which is group-readable, but
not group-writable or accessible to others. '0660' will create a repo
that is readable and writable to the current user and group, but
inaccessible to others (directories and executable files get their
diff --git a/Documentation/git-rev-list.txt b/Documentation/git-rev-list.txt
index fbe913ee746..2e05c4b5109 100644
--- a/Documentation/git-rev-list.txt
+++ b/Documentation/git-rev-list.txt
@@ -19,7 +19,7 @@ include::rev-list-description.txt[]
'rev-list' is an essential Git command, since it
provides the ability to build and traverse commit ancestry graphs. For
-this reason, it has a lot of different options that enables it to be
+this reason, it has a lot of different options that enable it to be
used by commands as different as 'git bisect' and
'git repack'.
diff --git a/Documentation/git-show-ref.txt b/Documentation/git-show-ref.txt
index 2fe274b8faa..36e81b9dec4 100644
--- a/Documentation/git-show-ref.txt
+++ b/Documentation/git-show-ref.txt
@@ -144,7 +144,7 @@ use:
-----------------------------------------------------------------------------
This will show "refs/heads/master" but also "refs/remote/other-repo/master",
-if such references exists.
+if such references exist.
When using the `--verify` flag, the command requires an exact path:
diff --git a/Documentation/git-symbolic-ref.txt b/Documentation/git-symbolic-ref.txt
index 102c83eb19e..761b154bcbb 100644
--- a/Documentation/git-symbolic-ref.txt
+++ b/Documentation/git-symbolic-ref.txt
@@ -27,7 +27,7 @@ symbolic ref.
A symbolic ref is a regular file that stores a string that
begins with `ref: refs/`. For example, your `.git/HEAD` is
-a regular file whose contents is `ref: refs/heads/master`.
+a regular file whose content is `ref: refs/heads/master`.
OPTIONS
-------
diff --git a/Documentation/gitdiffcore.txt b/Documentation/gitdiffcore.txt
index 0d57f86abc4..5681ba3f330 100644
--- a/Documentation/gitdiffcore.txt
+++ b/Documentation/gitdiffcore.txt
@@ -173,7 +173,7 @@ Note that when rename detection is on but both copy and break
detection are off, rename detection adds a preliminary step that first
checks if files are moved across directories while keeping their
filename the same. If there is a file added to a directory whose
-contents is sufficiently similar to a file with the same name that got
+contents are sufficiently similar to a file with the same name that got
deleted from a different directory, it will mark them as renames and
exclude them from the later quadratic step (the one that pairwise
compares all unmatched files to find the "best" matches, determined by
diff --git a/Documentation/gitformat-bundle.txt b/Documentation/gitformat-bundle.txt
index f1acf196e10..1b75cf71cec 100644
--- a/Documentation/gitformat-bundle.txt
+++ b/Documentation/gitformat-bundle.txt
@@ -67,7 +67,7 @@ A Git bundle consists of several parts.
* "Capabilities", which are only in the v3 format, indicate functionality that
the bundle requires to be read properly.
-* "Prerequisites" lists the objects that are NOT included in the bundle and the
+* "Prerequisites" list the objects that are NOT included in the bundle and the
reader of the bundle MUST already have, in order to use the data in the
bundle. The objects stored in the bundle may refer to prerequisite objects and
anything reachable from them (e.g. a tree object in the bundle can reference
diff --git a/Documentation/gitprotocol-capabilities.txt b/Documentation/gitprotocol-capabilities.txt
index 9adda577e51..388846d92e9 100644
--- a/Documentation/gitprotocol-capabilities.txt
+++ b/Documentation/gitprotocol-capabilities.txt
@@ -30,7 +30,7 @@ to be in effect. The client MUST NOT ask for capabilities the server
did not say it supports.
Server MUST diagnose and abort if capabilities it does not understand
-was sent. Server MUST NOT ignore capabilities that client requested
+were sent. Server MUST NOT ignore capabilities that client requested
and server advertised. As a consequence of these rules, server MUST
NOT advertise capabilities it does not understand.
diff --git a/Documentation/gitprotocol-pack.txt b/Documentation/gitprotocol-pack.txt
index 01391cb300d..837b691c892 100644
--- a/Documentation/gitprotocol-pack.txt
+++ b/Documentation/gitprotocol-pack.txt
@@ -30,7 +30,7 @@ pkt-line Format
---------------
The descriptions below build on the pkt-line format described in
-linkgit:gitprotocol-common[5]. When the grammar indicate `PKT-LINE(...)`, unless
+linkgit:gitprotocol-common[5]. When the grammar indicates `PKT-LINE(...)`, unless
otherwise noted the usual pkt-line LF rules apply: the sender SHOULD
include a LF, but the receiver MUST NOT complain if it is not present.
@@ -325,7 +325,7 @@ a positive depth, this step is skipped.
If the client has requested a positive depth, the server will compute
the set of commits which are no deeper than the desired depth. The set
-of commits start at the client's wants.
+of commits starts at the client's wants.
The server writes 'shallow' lines for each
commit whose parents will not be sent as a result. The server writes
diff --git a/Documentation/glossary-content.txt b/Documentation/glossary-content.txt
index 5a537268e27..65c89e7b3eb 100644
--- a/Documentation/glossary-content.txt
+++ b/Documentation/glossary-content.txt
@@ -186,7 +186,7 @@ current branch integrates with) obviously do not work, as there is no
points at the directory that is the real repository.
[[def_grafts]]grafts::
- Grafts enables two otherwise different lines of development to be joined
+ Grafts enable two otherwise different lines of development to be joined
together by recording fake ancestry information for commits. This way
you can make Git pretend the set of <<def_parent,parents>> a <<def_commit,commit>> has
is different from what was recorded when the commit was
diff --git a/Documentation/howto/coordinate-embargoed-releases.txt b/Documentation/howto/coordinate-embargoed-releases.txt
index e653775bab1..b9cb95e82f0 100644
--- a/Documentation/howto/coordinate-embargoed-releases.txt
+++ b/Documentation/howto/coordinate-embargoed-releases.txt
@@ -145,7 +145,7 @@ Opening a Security Advisory draft
The first step is to https://github.com/git/git/security/advisories/new[open
an advisory]. Technically, this is not necessary. However, it is the most
-convenient way to obtain the CVE number and it give us a private repository
+convenient way to obtain the CVE number and it gives us a private repository
associated with it that can be used to collaborate on a fix.
Notifying the Linux distributions
diff --git a/Documentation/i18n.txt b/Documentation/i18n.txt
index 0efb1153d27..3a866af4a42 100644
--- a/Documentation/i18n.txt
+++ b/Documentation/i18n.txt
@@ -34,7 +34,7 @@ project find it more convenient to use legacy encodings, Git
does not forbid it. However, there are a few things to keep in
mind.
-. 'git commit' and 'git commit-tree' issues
+. 'git commit' and 'git commit-tree' issue
a warning if the commit log message given to it does not look
like a valid UTF-8 string, unless you explicitly say your
project uses a legacy encoding. The way to say this is to
diff --git a/Documentation/technical/api-simple-ipc.txt b/Documentation/technical/api-simple-ipc.txt
index d88b1ef206e..b4259098680 100644
--- a/Documentation/technical/api-simple-ipc.txt
+++ b/Documentation/technical/api-simple-ipc.txt
@@ -2,7 +2,7 @@ Simple-IPC API
==============
The Simple-IPC API is a collection of `ipc_` prefixed library routines
-and a basic communication protocol that allow an IPC-client process to
+and a basic communication protocol that allows an IPC-client process to
send an application-specific IPC-request message to an IPC-server
process and receive an application-specific IPC-response message.
diff --git a/Documentation/technical/reftable.txt b/Documentation/technical/reftable.txt
index d7d066d876a..84637f96e77 100644
--- a/Documentation/technical/reftable.txt
+++ b/Documentation/technical/reftable.txt
@@ -46,7 +46,7 @@ search lookup, and range scans.
Storage in the file is organized into variable sized blocks. Prefix
compression is used within a single block to reduce disk space. Block
-size and alignment is tunable by the writer.
+size and alignment are tunable by the writer.
Performance
^^^^^^^^^^^
@@ -288,7 +288,7 @@ The 2-byte `restart_count` stores the number of entries in the
`restart_count` to binary search between restarts before starting a
linear scan.
-Exactly `restart_count` 3-byte `restart_offset` values precedes the
+Exactly `restart_count` 3-byte `restart_offset` values precede the
`restart_count`. Offsets are relative to the start of the block and
refer to the first byte of any `ref_record` whose name has not been
prefix compressed. Entries in the `restart_offset` list must be sorted,
--
gitgitgadget
^ permalink raw reply related [relevance 3%]
* [PATCH 22/25] documentation: add some commas where they are helpful
2023-10-08 6:45 3% ` [PATCH 07/25] documentation: fix subject/verb agreement Elijah Newren via GitGitGadget
@ 2023-10-08 6:45 4% ` Elijah Newren via GitGitGadget
1 sibling, 0 replies; 71+ results
From: Elijah Newren via GitGitGadget @ 2023-10-08 6:45 UTC (permalink / raw)
To: git; +Cc: Elijah Newren, Elijah Newren
From: Elijah Newren <newren@gmail.com>
Diff best viewed with --color-diff.
Signed-off-by: Elijah Newren <newren@gmail.com>
---
Documentation/ToolsForGit.txt | 2 +-
Documentation/config/clean.txt | 2 +-
Documentation/config/color.txt | 2 +-
Documentation/config/credential.txt | 2 +-
Documentation/config/fastimport.txt | 4 ++--
Documentation/config/fsck.txt | 10 +++++-----
Documentation/config/log.txt | 2 +-
Documentation/config/merge.txt | 2 +-
Documentation/config/mergetool.txt | 10 +++++-----
Documentation/config/push.txt | 2 +-
Documentation/config/sequencer.txt | 2 +-
Documentation/config/splitindex.txt | 6 +++---
Documentation/config/user.txt | 4 ++--
Documentation/config/versionsort.txt | 2 +-
Documentation/diff-generate-patch.txt | 4 ++--
Documentation/fetch-options.txt | 2 +-
Documentation/git-am.txt | 4 ++--
Documentation/git-apply.txt | 10 +++++-----
Documentation/git-check-attr.txt | 4 ++--
Documentation/git-checkout-index.txt | 2 +-
Documentation/git-diff-files.txt | 4 ++--
Documentation/git-fast-import.txt | 2 +-
Documentation/git-fsmonitor--daemon.txt | 4 ++--
Documentation/git-help.txt | 6 +++---
Documentation/git-http-push.txt | 2 +-
Documentation/git-merge-base.txt | 4 ++--
Documentation/git-mergetool.txt | 4 ++--
Documentation/git-mv.txt | 2 +-
Documentation/git-name-rev.txt | 2 +-
Documentation/git-remote-fd.txt | 4 ++--
Documentation/git-request-pull.txt | 2 +-
Documentation/git-show-branch.txt | 4 ++--
Documentation/git-update-index.txt | 2 +-
Documentation/gitdiffcore.txt | 4 ++--
Documentation/gitformat-pack.txt | 2 +-
Documentation/technical/api-simple-ipc.txt | 4 ++--
Documentation/technical/reftable.txt | 2 +-
37 files changed, 66 insertions(+), 66 deletions(-)
diff --git a/Documentation/ToolsForGit.txt b/Documentation/ToolsForGit.txt
index 209eaad31ea..ae7690b45d0 100644
--- a/Documentation/ToolsForGit.txt
+++ b/Documentation/ToolsForGit.txt
@@ -5,7 +5,7 @@ Tools for developing Git
[[summary]]
== Summary
-This document gathers tips, scripts and configuration files to help people
+This document gathers tips, scripts, and configuration files to help people
working on Git's codebase use their favorite tools while following Git's
coding style.
diff --git a/Documentation/config/clean.txt b/Documentation/config/clean.txt
index a807c925b9c..f05b9403b5a 100644
--- a/Documentation/config/clean.txt
+++ b/Documentation/config/clean.txt
@@ -1,3 +1,3 @@
clean.requireForce::
A boolean to make git-clean do nothing unless given -f,
- -i or -n. Defaults to true.
+ -i, or -n. Defaults to true.
diff --git a/Documentation/config/color.txt b/Documentation/config/color.txt
index 1795b2d16be..2f2275ac697 100644
--- a/Documentation/config/color.txt
+++ b/Documentation/config/color.txt
@@ -106,7 +106,7 @@ color.grep.<slot>::
matching text in context lines
`matchSelected`;;
matching text in selected lines. Also, used to customize the following
- linkgit:git-log[1] subcommands: `--grep`, `--author` and `--committer`.
+ linkgit:git-log[1] subcommands: `--grep`, `--author`, and `--committer`.
`selected`;;
non-matching text in selected lines. Also, used to customize the
following linkgit:git-log[1] subcommands: `--grep`, `--author` and
diff --git a/Documentation/config/credential.txt b/Documentation/config/credential.txt
index 075ef8c9750..0221c3e620d 100644
--- a/Documentation/config/credential.txt
+++ b/Documentation/config/credential.txt
@@ -21,7 +21,7 @@ credential.username::
credential.<url>.*::
Any of the credential.* options above can be applied selectively to
- some credentials. For example "credential.https://example.com.username"
+ some credentials. For example, "credential.https://example.com.username"
would set the default username only for https connections to
example.com. See linkgit:gitcredentials[7] for details on how URLs are
matched.
diff --git a/Documentation/config/fastimport.txt b/Documentation/config/fastimport.txt
index c1166e330d5..903677d7efe 100644
--- a/Documentation/config/fastimport.txt
+++ b/Documentation/config/fastimport.txt
@@ -1,8 +1,8 @@
fastimport.unpackLimit::
If the number of objects imported by linkgit:git-fast-import[1]
is below this limit, then the objects will be unpacked into
- loose object files. However if the number of imported objects
- equals or exceeds this limit then the pack will be stored as a
+ loose object files. However, if the number of imported objects
+ equals or exceeds this limit, then the pack will be stored as a
pack. Storing the pack from a fast-import can make the import
operation complete faster, especially on slow filesystems. If
not set, the value of `transfer.unpackLimit` is used instead.
diff --git a/Documentation/config/fsck.txt b/Documentation/config/fsck.txt
index 2384c8c94d6..8e9e508933f 100644
--- a/Documentation/config/fsck.txt
+++ b/Documentation/config/fsck.txt
@@ -13,10 +13,10 @@ The rest of the documentation discusses `fsck.*` for brevity, but the
same applies for the corresponding `receive.fsck.*` and
`fetch.fsck.*`. variables.
+
-Unlike variables like `color.ui` and `core.editor` the
+Unlike variables like `color.ui` and `core.editor`, the
`receive.fsck.<msg-id>` and `fetch.fsck.<msg-id>` variables will not
fall back on the `fsck.<msg-id>` configuration if they aren't set. To
-uniformly configure the same fsck settings in different circumstances
+uniformly configure the same fsck settings in different circumstances,
all three of them must be set to the same values.
+
When `fsck.<msg-id>` is set, errors can be switched to warnings and
@@ -43,12 +43,12 @@ values of `<msg-id>`.
fsck.skipList::
The path to a list of object names (i.e. one unabbreviated SHA-1 per
line) that are known to be broken in a non-fatal way and should
- be ignored. On versions of Git 2.20 and later comments ('#'), empty
+ be ignored. On versions of Git 2.20 and later, comments ('#'), empty
lines, and any leading and trailing whitespace are ignored. Everything
but a SHA-1 per line will error out on older versions.
+
This feature is useful when an established project should be accepted
-despite early commits containing errors that can be safely ignored
+despite early commits containing errors that can be safely ignored,
such as invalid committer email addresses. Note: corrupt objects
cannot be skipped with this setting.
+
@@ -58,7 +58,7 @@ Like `fsck.<msg-id>` this variable has corresponding
Unlike variables like `color.ui` and `core.editor` the
`receive.fsck.skipList` and `fetch.fsck.skipList` variables will not
fall back on the `fsck.skipList` configuration if they aren't set. To
-uniformly configure the same fsck settings in different circumstances
+uniformly configure the same fsck settings in different circumstances,
all three of them must be set to the same values.
+
Older versions of Git (before 2.20) documented that the object names
diff --git a/Documentation/config/log.txt b/Documentation/config/log.txt
index 6e04fbe4f48..9003a821914 100644
--- a/Documentation/config/log.txt
+++ b/Documentation/config/log.txt
@@ -9,7 +9,7 @@ log.date::
`--date` option. See linkgit:git-log[1] for details.
+
If the format is set to "auto:foo" and the pager is in use, format
-"foo" will be used for the date format. Otherwise "default" will
+"foo" will be used for the date format. Otherwise, "default" will
be used.
log.decorate::
diff --git a/Documentation/config/merge.txt b/Documentation/config/merge.txt
index 99e83dd36e5..8851b6cedef 100644
--- a/Documentation/config/merge.txt
+++ b/Documentation/config/merge.txt
@@ -7,7 +7,7 @@ merge.conflictStyle::
marker and the original text before the `=======` marker. The
"merge" style tends to produce smaller conflict regions than diff3,
both because of the exclusion of the original text, and because
- when a subset of lines match on the two sides they are just pulled
+ when a subset of lines match on the two sides, they are just pulled
out of the conflict region. Another alternate style, "zdiff3", is
similar to diff3 but removes matching lines on the two sides from
the conflict region when those matching lines appear near either
diff --git a/Documentation/config/mergetool.txt b/Documentation/config/mergetool.txt
index fe4ba0271b5..294f61efd12 100644
--- a/Documentation/config/mergetool.txt
+++ b/Documentation/config/mergetool.txt
@@ -22,8 +22,8 @@ mergetool.<tool>.trustExitCode::
For a custom merge command, specify whether the exit code of
the merge command can be used to determine whether the merge was
successful. If this is not set to true then the merge target file
- timestamp is checked and the merge is assumed to have been successful
- if the file has been updated, otherwise the user is prompted to
+ timestamp is checked, and the merge is assumed to have been successful
+ if the file has been updated; otherwise, the user is prompted to
indicate the success of the merge.
mergetool.meld.hasOutput::
@@ -37,7 +37,7 @@ mergetool.meld.hasOutput::
mergetool.meld.useAutoMerge::
When the `--auto-merge` is given, meld will merge all non-conflicting
- parts automatically, highlight the conflicting parts and wait for
+ parts automatically, highlight the conflicting parts, and wait for
user decision. Setting `mergetool.meld.useAutoMerge` to `true` tells
Git to unconditionally use the `--auto-merge` option with `meld`.
Setting this value to `auto` makes git detect whether `--auto-merge`
@@ -55,7 +55,7 @@ endif::[]
for details.
mergetool.hideResolved::
- During a merge Git will automatically resolve as many conflicts as
+ During a merge, Git will automatically resolve as many conflicts as
possible and write the 'MERGED' file containing conflict markers around
any conflicts that it cannot resolve; 'LOCAL' and 'REMOTE' normally
represent the versions of the file from before Git's conflict
@@ -74,7 +74,7 @@ mergetool.keepTemporaries::
When invoking a custom merge tool, Git uses a set of temporary
files to pass to the tool. If the tool returns an error and this
variable is set to `true`, then these temporary files will be
- preserved, otherwise they will be removed after the tool has
+ preserved; otherwise, they will be removed after the tool has
exited. Defaults to `false`.
mergetool.writeToTemp::
diff --git a/Documentation/config/push.txt b/Documentation/config/push.txt
index dbaf930f01b..0acbbea18a3 100644
--- a/Documentation/config/push.txt
+++ b/Documentation/config/push.txt
@@ -67,7 +67,7 @@ new default).
--
push.followTags::
- If set to true enable `--follow-tags` option by default. You
+ If set to true, enable `--follow-tags` option by default. You
may override this configuration at time of push by specifying
`--no-follow-tags`.
diff --git a/Documentation/config/sequencer.txt b/Documentation/config/sequencer.txt
index b48d532a969..e664eef01d1 100644
--- a/Documentation/config/sequencer.txt
+++ b/Documentation/config/sequencer.txt
@@ -2,4 +2,4 @@ sequence.editor::
Text editor used by `git rebase -i` for editing the rebase instruction file.
The value is meant to be interpreted by the shell when it is used.
It can be overridden by the `GIT_SEQUENCE_EDITOR` environment variable.
- When not configured the default commit message editor is used instead.
+ When not configured, the default commit message editor is used instead.
diff --git a/Documentation/config/splitindex.txt b/Documentation/config/splitindex.txt
index afdb186df8b..cfaa29610b5 100644
--- a/Documentation/config/splitindex.txt
+++ b/Documentation/config/splitindex.txt
@@ -3,10 +3,10 @@ splitIndex.maxPercentChange::
percent of entries the split index can contain compared to the
total number of entries in both the split index and the shared
index before a new shared index is written.
- The value should be between 0 and 100. If the value is 0 then
- a new shared index is always written, if it is 100 a new
+ The value should be between 0 and 100. If the value is 0, then
+ a new shared index is always written; if it is 100, a new
shared index is never written.
- By default the value is 20, so a new shared index is written
+ By default, the value is 20, so a new shared index is written
if the number of entries in the split index would be greater
than 20 percent of the total number of entries.
See linkgit:git-update-index[1].
diff --git a/Documentation/config/user.txt b/Documentation/config/user.txt
index c1347fa7bcd..2ffc38d1647 100644
--- a/Documentation/config/user.txt
+++ b/Documentation/config/user.txt
@@ -8,11 +8,11 @@ committer.email::
up in the `author` and `committer` fields of commit
objects.
If you need the `author` or `committer` to be different, the
- `author.name`, `author.email`, `committer.name` or
+ `author.name`, `author.email`, `committer.name`, or
`committer.email` variables can be set.
All of these can be overridden by the `GIT_AUTHOR_NAME`,
`GIT_AUTHOR_EMAIL`, `GIT_COMMITTER_NAME`,
- `GIT_COMMITTER_EMAIL` and `EMAIL` environment variables.
+ `GIT_COMMITTER_EMAIL`, and `EMAIL` environment variables.
+
Note that the `name` forms of these variables conventionally refer to
some form of a personal name. See linkgit:git-commit[1] and the
diff --git a/Documentation/config/versionsort.txt b/Documentation/config/versionsort.txt
index 0d66617f59f..0cff0908193 100644
--- a/Documentation/config/versionsort.txt
+++ b/Documentation/config/versionsort.txt
@@ -19,7 +19,7 @@ with those suffixes. E.g. if "-pre" appears before "-rc" in the
configuration, then all "1.0-preX" tags will be listed before any
"1.0-rcX" tags. The placement of the main release tag relative to tags
with various suffixes can be determined by specifying the empty suffix
-among those other suffixes. E.g. if the suffixes "-rc", "", "-ck" and
+among those other suffixes. E.g. if the suffixes "-rc", "", "-ck", and
"-bfs" appear in the configuration in this order, then all "v4.8-rcX" tags
are listed first, followed by "v4.8", then "v4.8-ckX" and finally
"v4.8-bfsX".
diff --git a/Documentation/diff-generate-patch.txt b/Documentation/diff-generate-patch.txt
index 988e33de70b..4b5aa5c2e04 100644
--- a/Documentation/diff-generate-patch.txt
+++ b/Documentation/diff-generate-patch.txt
@@ -156,7 +156,7 @@ format, `/dev/null` is used to signal created or deleted
files.
+
However, if the --combined-all-paths option is provided, instead of a
-two-line from-file/to-file you get an N+1 line from-file/to-file header,
+two-line from-file/to-file, you get an N+1 line from-file/to-file header,
where N is the number of parents in the merge commit:
--- a/file
@@ -197,7 +197,7 @@ added, from the point of view of that parent).
In the above example output, the function signature was changed
from both files (hence two `-` removals from both file1 and
file2, plus `++` to mean one line that was added does not appear
-in either file1 or file2). Also eight other lines are the same
+in either file1 or file2). Also, eight other lines are the same
from file1 but do not appear in file2 (hence prefixed with `+`).
When shown by `git diff-tree -c`, it compares the parents of a
diff --git a/Documentation/fetch-options.txt b/Documentation/fetch-options.txt
index 9ee9fa659d2..a1d6633a4f1 100644
--- a/Documentation/fetch-options.txt
+++ b/Documentation/fetch-options.txt
@@ -96,7 +96,7 @@ endif::git-pull[]
-f::
--force::
- When 'git fetch' is used with `<src>:<dst>` refspec it may
+ When 'git fetch' is used with `<src>:<dst>` refspec, it may
refuse to update the local branch as discussed
ifdef::git-pull[]
in the `<refspec>` part of the linkgit:git-fetch[1]
diff --git a/Documentation/git-am.txt b/Documentation/git-am.txt
index 2ada047b6aa..0390dab20f9 100644
--- a/Documentation/git-am.txt
+++ b/Documentation/git-am.txt
@@ -23,7 +23,7 @@ SYNOPSIS
DESCRIPTION
-----------
Splits mail messages in a mailbox into commit log messages,
-authorship information and patches, and applies them to the
+authorship information, and patches, and applies them to the
current branch. You could think of it as a reverse operation
of linkgit:git-format-patch[1] run on a branch with a straight
history without merges.
@@ -134,7 +134,7 @@ include::rerere-options.txt[]
automatically. This option allows the user to bypass the automatic
detection and specify the patch format that the patch(es) should be
interpreted as. Valid formats are mbox, mboxrd,
- stgit, stgit-series and hg.
+ stgit, stgit-series, and hg.
-i::
--interactive::
diff --git a/Documentation/git-apply.txt b/Documentation/git-apply.txt
index 95bde308709..9cce68a38be 100644
--- a/Documentation/git-apply.txt
+++ b/Documentation/git-apply.txt
@@ -23,8 +23,8 @@ DESCRIPTION
Reads the supplied diff output (i.e. "a patch") and applies it to files.
When running from a subdirectory in a repository, patched paths
outside the directory are ignored.
-With the `--index` option the patch is also applied to the index, and
-with the `--cached` option the patch is only applied to the index.
+With the `--index` option, the patch is also applied to the index, and
+with the `--cached` option, the patch is only applied to the index.
Without these options, the command applies the patch only to files,
and does not require them to be in a Git repository.
@@ -52,7 +52,7 @@ OPTIONS
--summary::
Instead of applying the patch, output a condensed
summary of information obtained from git diff extended
- headers, such as creations, renames and mode changes.
+ headers, such as creations, renames, and mode changes.
Turns off "apply".
--check::
@@ -140,7 +140,7 @@ linkgit:git-config[1]).
applying a diff generated with `--unified=0`. To bypass these
checks use `--unidiff-zero`.
+
-Note, for the reasons stated above the usage of context-free patches is
+Note, for the reasons stated above, the usage of context-free patches is
discouraged.
--apply::
@@ -161,7 +161,7 @@ discouraged.
--binary::
Historically we did not allow binary patch application
without an explicit permission from the user, and this
- flag was the way to do so. Currently we always allow binary
+ flag was the way to do so. Currently, we always allow binary
patch application, so this is a no-op.
--exclude=<path-pattern>::
diff --git a/Documentation/git-check-attr.txt b/Documentation/git-check-attr.txt
index 7fea245ed22..cb5a6c8f335 100644
--- a/Documentation/git-check-attr.txt
+++ b/Documentation/git-check-attr.txt
@@ -38,7 +38,7 @@ OPTIONS
--source=<tree-ish>::
Check attributes against the specified tree-ish. It is common to
- specify the source tree by naming a commit, branch or tag associated
+ specify the source tree by naming a commit, branch, or tag associated
with it.
\--::
@@ -60,7 +60,7 @@ unless `-z` is in effect, in which case NUL is used as delimiter:
<path> is the path of a file being queried, <attribute> is an attribute
-being queried and <info> can be either:
+being queried, and <info> can be either:
'unspecified';; when the attribute is not defined for the path.
'unset';; when the attribute is defined as false.
diff --git a/Documentation/git-checkout-index.txt b/Documentation/git-checkout-index.txt
index 4e2527612e0..faf8d6ca36f 100644
--- a/Documentation/git-checkout-index.txt
+++ b/Documentation/git-checkout-index.txt
@@ -57,7 +57,7 @@ OPTIONS
Note: --stage=all automatically implies --temp.
--temp::
- Instead of copying the files to the working directory
+ Instead of copying the files to the working directory,
write the content to temporary files. The temporary name
associations will be written to stdout.
diff --git a/Documentation/git-diff-files.txt b/Documentation/git-diff-files.txt
index 18f7f86bef3..bf78e314313 100644
--- a/Documentation/git-diff-files.txt
+++ b/Documentation/git-diff-files.txt
@@ -26,7 +26,7 @@ include::diff-options.txt[]
-2 --ours::
-3 --theirs::
-0::
- Diff against the "base" version, "our branch" or "their
+ Diff against the "base" version, "our branch", or "their
branch" respectively. With these options, diffs for
merged entries are not shown.
+
@@ -37,7 +37,7 @@ omit diff output for unmerged entries and just show "Unmerged".
-c::
--cc::
This compares stage 2 (our branch), stage 3 (their
- branch) and the working tree file and outputs a combined
+ branch), and the working tree file and outputs a combined
diff, similar to the way 'diff-tree' shows a merge
commit with these flags.
diff --git a/Documentation/git-fast-import.txt b/Documentation/git-fast-import.txt
index a6a054f86d2..bd7b1e0a2ea 100644
--- a/Documentation/git-fast-import.txt
+++ b/Documentation/git-fast-import.txt
@@ -1353,7 +1353,7 @@ the marks back to the source repository, it is easy to verify the
accuracy and completeness of the import by comparing each Git
commit to the corresponding source revision.
-Coming from a system such as Perforce or Subversion this should be
+Coming from a system such as Perforce or Subversion, this should be
quite simple, as the fast-import mark can also be the Perforce changeset
number or the Subversion revision number.
diff --git a/Documentation/git-fsmonitor--daemon.txt b/Documentation/git-fsmonitor--daemon.txt
index 65c7b4641e8..8585d19f4d8 100644
--- a/Documentation/git-fsmonitor--daemon.txt
+++ b/Documentation/git-fsmonitor--daemon.txt
@@ -73,7 +73,7 @@ but it will not cause an incorrect result.
By default, the fsmonitor daemon refuses to work with network-mounted
repositories; this may be overridden by setting `fsmonitor.allowRemote` to
`true`. Note, however, that the fsmonitor daemon is not guaranteed to work
-correctly with all network-mounted repositories and such use is considered
+correctly with all network-mounted repositories, so such use is considered
experimental.
On Mac OS, the inter-process communication (IPC) between various Git
@@ -86,7 +86,7 @@ to work with these filesystems and such use is considered experimental.
By default, the socket is created in the `.git` directory. However, if the
`.git` directory is on a network-mounted filesystem, it will instead be
created at `$HOME/.git-fsmonitor-*` unless `$HOME` itself is on a
-network-mounted filesystem in which case you must set the configuration
+network-mounted filesystem, in which case you must set the configuration
variable `fsmonitor.socketDir` to the path of a directory on a Mac OS native
filesystem in which to create the socket file.
diff --git a/Documentation/git-help.txt b/Documentation/git-help.txt
index 22dfd780851..7532625a138 100644
--- a/Documentation/git-help.txt
+++ b/Documentation/git-help.txt
@@ -59,7 +59,7 @@ OPTIONS
aliases.
--verbose::
- When used with `--all` print description for all recognized
+ When used with `--all`, print description for all recognized
commands. This is the default.
-c::
@@ -129,8 +129,8 @@ line option:
* "info" corresponds to '-i|--info',
* "web" or "html" correspond to '-w|--web'.
-help.browser, web.browser and browser.<tool>.path
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+help.browser, web.browser, and browser.<tool>.path
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
The `help.browser`, `web.browser` and `browser.<tool>.path` will also
be checked if the 'web' format is chosen (either by command-line
diff --git a/Documentation/git-http-push.txt b/Documentation/git-http-push.txt
index c0c841b9fdd..ce0d8082125 100644
--- a/Documentation/git-http-push.txt
+++ b/Documentation/git-http-push.txt
@@ -44,7 +44,7 @@ OPTIONS
-d::
-D::
Remove <ref> from remote repository. The specified branch
- cannot be the remote HEAD. If -d is specified the following
+ cannot be the remote HEAD. If -d is specified, the following
other conditions must also be met:
- Remote HEAD must resolve to an object that exists locally
diff --git a/Documentation/git-merge-base.txt b/Documentation/git-merge-base.txt
index cbc77f72588..5ab957cfbc1 100644
--- a/Documentation/git-merge-base.txt
+++ b/Documentation/git-merge-base.txt
@@ -88,7 +88,7 @@ For example, with this topology:
the merge base between 'A' and 'B' is '1'.
-Given three commits 'A', 'B' and 'C', `git merge-base A B C` will compute the
+Given three commits 'A', 'B', and 'C', `git merge-base A B C` will compute the
merge base between 'A' and a hypothetical commit 'M', which is a merge
between 'B' and 'C'. For example, with this topology:
@@ -204,7 +204,7 @@ will find B0, and
$ git rebase --onto origin/master $fork_point topic
-will replay D0, D1 and D on top of B to create a new history of this
+will replay D0, D1, and D on top of B to create a new history of this
shape:
....
diff --git a/Documentation/git-mergetool.txt b/Documentation/git-mergetool.txt
index 7b7b6f8f344..b9e20c5dcd8 100644
--- a/Documentation/git-mergetool.txt
+++ b/Documentation/git-mergetool.txt
@@ -49,7 +49,7 @@ variable `mergetool.<tool>.cmd`.
+
When 'git mergetool' is invoked with this tool (either through the
`-t` or `--tool` option or the `merge.tool` configuration
-variable) the configured command line will be invoked with `$BASE`
+variable), the configured command line will be invoked with `$BASE`
set to the name of a temporary file containing the common base for
the merge, if available; `$LOCAL` set to the name of a temporary
file containing the contents of the file on the current branch;
@@ -81,7 +81,7 @@ success of the resolution after the custom tool has exited.
-g::
--gui::
- When 'git-mergetool' is invoked with the `-g` or `--gui` option
+ When 'git-mergetool' is invoked with the `-g` or `--gui` option,
the default merge tool will be read from the configured
`merge.guitool` variable instead of `merge.tool`. If
`merge.guitool` is not set, we will fallback to the tool
diff --git a/Documentation/git-mv.txt b/Documentation/git-mv.txt
index fb0220fd18d..7f991a33802 100644
--- a/Documentation/git-mv.txt
+++ b/Documentation/git-mv.txt
@@ -13,7 +13,7 @@ SYNOPSIS
DESCRIPTION
-----------
-Move or rename a file, directory or symlink.
+Move or rename a file, directory, or symlink.
git mv [-v] [-f] [-n] [-k] <source> <destination>
git mv [-v] [-f] [-n] [-k] <source> ... <destination directory>
diff --git a/Documentation/git-name-rev.txt b/Documentation/git-name-rev.txt
index 5c56c870253..d4f1c4d5945 100644
--- a/Documentation/git-name-rev.txt
+++ b/Documentation/git-name-rev.txt
@@ -26,7 +26,7 @@ OPTIONS
--refs=<pattern>::
Only use refs whose names match a given shell pattern. The pattern
- can be one of branch name, tag name or fully qualified ref name. If
+ can be a branch name, a tag name, or a fully qualified ref name. If
given multiple times, use refs whose names match any of the given shell
patterns. Use `--no-refs` to clear any previous ref patterns given.
diff --git a/Documentation/git-remote-fd.txt b/Documentation/git-remote-fd.txt
index 6ed71bd0b75..94700b89be9 100644
--- a/Documentation/git-remote-fd.txt
+++ b/Documentation/git-remote-fd.txt
@@ -13,10 +13,10 @@ DESCRIPTION
-----------
This helper uses specified file descriptors to connect to a remote Git server.
This is not meant for end users but for programs and scripts calling git
-fetch, push or archive.
+fetch, push, or archive.
If only <infd> is given, it is assumed to be a bidirectional socket connected
-to remote Git server (git-upload-pack, git-receive-pack or
+to a remote Git server (git-upload-pack, git-receive-pack, or
git-upload-archive). If both <infd> and <outfd> are given, they are assumed
to be pipes connected to a remote Git server (<infd> being the inbound pipe
and <outfd> being the outbound pipe.
diff --git a/Documentation/git-request-pull.txt b/Documentation/git-request-pull.txt
index d274002666c..15dcbb6d91c 100644
--- a/Documentation/git-request-pull.txt
+++ b/Documentation/git-request-pull.txt
@@ -16,7 +16,7 @@ DESCRIPTION
Generate a request asking your upstream project to pull changes into
their tree. The request, printed to the standard output,
begins with the branch description, summarizes
-the changes and indicates from where they can be pulled.
+the changes, and indicates from where they can be pulled.
The upstream project is expected to have the commit named by
`<start>` and the output asks it to integrate the changes you made
diff --git a/Documentation/git-show-branch.txt b/Documentation/git-show-branch.txt
index 4ef0872b463..c771c897707 100644
--- a/Documentation/git-show-branch.txt
+++ b/Documentation/git-show-branch.txt
@@ -125,7 +125,7 @@ OPTIONS
default to color output.
Same as `--color=never`.
-Note that --more, --list, --independent and --merge-base options
+Note that --more, --list, --independent, and --merge-base options
are mutually exclusive.
@@ -144,7 +144,7 @@ otherwise it shows a space. Merge commits are denoted by
a `-` sign. Each commit shows a short name that
can be used as an extended SHA-1 to name that commit.
-The following example shows three branches, "master", "fixes"
+The following example shows three branches, "master", "fixes",
and "mhf":
------------------------------------------------
diff --git a/Documentation/git-update-index.txt b/Documentation/git-update-index.txt
index e030dd75bed..8c47890a6a8 100644
--- a/Documentation/git-update-index.txt
+++ b/Documentation/git-update-index.txt
@@ -160,7 +160,7 @@ you will need to handle the situation manually.
--index-version <n>::
Write the resulting index out in the named on-disk format version.
- Supported versions are 2, 3 and 4. The current default version is 2
+ Supported versions are 2, 3, and 4. The current default version is 2
or 3, depending on whether extra features are used, such as
`git add -N`. With `--verbose`, also report the version the index
file uses before and after this command.
diff --git a/Documentation/gitdiffcore.txt b/Documentation/gitdiffcore.txt
index bc65f91310d..3cda2e07c24 100644
--- a/Documentation/gitdiffcore.txt
+++ b/Documentation/gitdiffcore.txt
@@ -231,7 +231,7 @@ like these:
* -B/60 (the same as above, since diffcore-break defaults to 50%).
Note that earlier implementation left a broken pair as separate
-creation and deletion patches. This was an unnecessary hack and
+creation and deletion patches. This was an unnecessary hack, and
the latest implementation always merges all the broken pairs
back into modifications, but the resulting patch output is
formatted differently for easier review in case of such
@@ -263,7 +263,7 @@ textual diff has an added or a deleted line that matches the given
regular expression. This means that it will detect in-file (or what
rename-detection considers the same file) moves, which is noise. The
implementation runs diff twice and greps, and this can be quite
-expensive. To speed things up binary files without textconv filters
+expensive. To speed things up, binary files without textconv filters
will be ignored.
When `-S` or `-G` are used without `--pickaxe-all`, only filepairs
diff --git a/Documentation/gitformat-pack.txt b/Documentation/gitformat-pack.txt
index 678a7e4cb49..dd0476a616a 100644
--- a/Documentation/gitformat-pack.txt
+++ b/Documentation/gitformat-pack.txt
@@ -18,7 +18,7 @@ DESCRIPTION
-----------
The Git pack format is how Git stores most of its primary repository
-data. Over the lietime of a repository loose objects (if any) and
+data. Over the lietime of a repository, loose objects (if any) and
smaller packs are consolidated into larger pack(s). See
linkgit:git-gc[1] and linkgit:git-pack-objects[1].
diff --git a/Documentation/technical/api-simple-ipc.txt b/Documentation/technical/api-simple-ipc.txt
index b4259098680..c4fb152b232 100644
--- a/Documentation/technical/api-simple-ipc.txt
+++ b/Documentation/technical/api-simple-ipc.txt
@@ -25,7 +25,7 @@ When received, the response is returned back to the caller.
For example, the `fsmonitor--daemon` feature will be built as a server
application on top of the IPC-server library routines. It will have
threads watching for file system events and a thread pool waiting for
-client connections. Clients, such as `git status` will request a list
+client connections. Clients, such as `git status`, will request a list
of file system events since a point in time and the server will
respond with a list of changed files and directories. The formats of
the request and response are application-specific; the IPC-client and
@@ -37,7 +37,7 @@ Comparison with sub-process model
The Simple-IPC mechanism differs from the existing `sub-process.c`
model (Documentation/technical/long-running-process-protocol.txt) and
-used by applications like Git-LFS. In the LFS-style sub-process model
+used by applications like Git-LFS. In the LFS-style sub-process model,
the helper is started by the foreground process, communication happens
via a pair of file descriptors bound to the stdin/stdout of the
sub-process, the sub-process only serves the current foreground
diff --git a/Documentation/technical/reftable.txt b/Documentation/technical/reftable.txt
index 82d919b2615..dd0b37c4e34 100644
--- a/Documentation/technical/reftable.txt
+++ b/Documentation/technical/reftable.txt
@@ -175,7 +175,7 @@ log_index*
footer
....
-In a log-only file the first log block immediately follows the file
+In a log-only file, the first log block immediately follows the file
header, without padding to block alignment.
Block size
--
gitgitgadget
^ permalink raw reply related [relevance 4%]
* Re: is this data corruption?
2022-12-31 0:57 3% ` Samuel Wales
@ 2023-01-01 1:15 0% ` Samuel Wales
0 siblings, 0 replies; 71+ results
From: Samuel Wales @ 2023-01-01 1:15 UTC (permalink / raw)
To: rsbecker; +Cc: git
as expected, there is only one copy of bigpart is a partition in all
of my rsnapshot files and all of my emacs backup files.
therefore, the diff in git and magit are incorrect. it was not a
question of me removing a duplicate.
for future reference, is this mailing list correct for this question
or should i use the git help list which i discovered just now?
On 12/30/22, Samuel Wales <samologist@gmail.com> wrote:
> more below.
>
> On 12/30/22, rsbecker@nexbridge.com <rsbecker@nexbridge.com> wrote:
>> On December 30, 2022 7:18 PM, Samuel Wales wrote:
>>>i am not subscribed, but am of the impression that's ok. please copy me
>>> directly.
>
> ...
>
>> I cannot account for your emacs issues, but have a question. Have you
>> done
>> any git add operations? Git diff is subject to what specifically is
>> staged.
>
> idk what this means. there is nothing in the staging area at this
> time, if that is relevant.
>
>> So you might be comparing your file with partially staged content that
>> could
>> account for partial diffs. See if diff --cached makes a difference. Also
>> try
>
> diff --cached produces nothing. 0 bytes.
>
>> different algorithms, like --patience or --diff-algorithm=histogram.
>
> i tried both with git 2.20. they produce different output from
> regular git diff. i looked for the paragraph i mentioned. in regular
> git diff, the problem is the same as i described, with - - +. in both
> patience and histogram, it is -.
>
> it occurs to me that, although unlikely, i might have in principle had
> a duplicate copy of those lines in A, and deleted one, and moved the
> other, when i created the current version, B. thus, i /think/ both
> regular and patience/histogram could be /in principle/ correct on that
> one point. to confirm, i will check rsnapshot using grep -c to count
> the matches in all versions of the original files. unless i report
> back, the number will be 1 in all of them, i.e. git diff and magit
> status buffer are both producing an incorrect diff.
>
> however, even if this is user error, i.e., i deleted a duplicate and
> moved it, the patience/histogram - result seems still incorrect:
>
> The next few commands work with both grub> and grub rescue>.
> -***************** REF bigpart is a partition
> -biglike and homelike are distracting nonsense i think except
> -to describe inferior filesets. anomalous subset of home
> -might be called homelike or so.
>
> 1) The first command you should run invokes the pager, for
>
> you can see here that the context lines are from a different org
> entry. it is intermingling a live - line with a context line that is
> not adjacent to it. that seems corrupt unless i, even more
> improbably, moved an entry from inside another entry.
>
>>
>> --Randall
>
>
>
>>
>>
>
>
> --
> The Kafka Pandemic
>
> A blog about science, health, human rights, and misopathy:
> https://thekafkapandemic.blogspot.com
>
--
The Kafka Pandemic
A blog about science, health, human rights, and misopathy:
https://thekafkapandemic.blogspot.com
^ permalink raw reply [relevance 0%]
* Re: is this data corruption?
@ 2022-12-31 0:57 3% ` Samuel Wales
2023-01-01 1:15 0% ` Samuel Wales
0 siblings, 1 reply; 71+ results
From: Samuel Wales @ 2022-12-31 0:57 UTC (permalink / raw)
To: rsbecker; +Cc: git
more below.
On 12/30/22, rsbecker@nexbridge.com <rsbecker@nexbridge.com> wrote:
> On December 30, 2022 7:18 PM, Samuel Wales wrote:
>>i am not subscribed, but am of the impression that's ok. please copy me
>> directly.
...
> I cannot account for your emacs issues, but have a question. Have you done
> any git add operations? Git diff is subject to what specifically is staged.
idk what this means. there is nothing in the staging area at this
time, if that is relevant.
> So you might be comparing your file with partially staged content that could
> account for partial diffs. See if diff --cached makes a difference. Also try
diff --cached produces nothing. 0 bytes.
> different algorithms, like --patience or --diff-algorithm=histogram.
i tried both with git 2.20. they produce different output from
regular git diff. i looked for the paragraph i mentioned. in regular
git diff, the problem is the same as i described, with - - +. in both
patience and histogram, it is -.
it occurs to me that, although unlikely, i might have in principle had
a duplicate copy of those lines in A, and deleted one, and moved the
other, when i created the current version, B. thus, i /think/ both
regular and patience/histogram could be /in principle/ correct on that
one point. to confirm, i will check rsnapshot using grep -c to count
the matches in all versions of the original files. unless i report
back, the number will be 1 in all of them, i.e. git diff and magit
status buffer are both producing an incorrect diff.
however, even if this is user error, i.e., i deleted a duplicate and
moved it, the patience/histogram - result seems still incorrect:
The next few commands work with both grub> and grub rescue>.
-***************** REF bigpart is a partition
-biglike and homelike are distracting nonsense i think except
-to describe inferior filesets. anomalous subset of home
-might be called homelike or so.
1) The first command you should run invokes the pager, for
you can see here that the context lines are from a different org
entry. it is intermingling a live - line with a context line that is
not adjacent to it. that seems corrupt unless i, even more
improbably, moved an entry from inside another entry.
>
> --Randall
>
>
--
The Kafka Pandemic
A blog about science, health, human rights, and misopathy:
https://thekafkapandemic.blogspot.com
^ permalink raw reply [relevance 3%]
* Re: is this data corruption?
@ 2022-12-31 0:33 4% ` Samuel Wales
1 sibling, 0 replies; 71+ results
From: Samuel Wales @ 2022-12-31 0:33 UTC (permalink / raw)
To: git
p.p.s. git 2.20 has the same problem.
On 12/30/22, Samuel Wales <samologist@gmail.com> wrote:
> i am not subscribed, but am of the impression that's ok. please copy
> me directly.
>
>
> tldr: git diff is showing differences that do not exist in the files
> themselves.
>
> i have nothing staged, nothing fancy like stashing, etc. this is a
> repo of mostly emacs org mode files. mostly ascii text.
>
> git status and these commands show nothing unusual:
>
> git fsck --strict --no-dangling
> git gc --prune="0 days"
>
>
> the problem that seems like data corruption is that a few lines appear
> twice as - and once as +. but in the current version of the files,
> those lines exist only once. here are the lines. there are 2 -
> versions and one + version:
>
> +***************** REF bigpart is a partition
> +biglike and homelike are distracting nonsense i think except
> +to describe inferior filesets. anomalous subset of home
> +might be called homelike or so.
>
>
> emacs magit shows the same problem. however, it shows a slightly
> different diff. i did a meta-diff on git diff vs. magit, and there
> are about 800 + real-content lines that magit shows but git diff does
> not. i do not know what this means. wc -l is like
>
> 62540 aaa.diff
> 62965 bbb--magit.txt
>
> idk why a diff would be different with only + lines being different?
>
>
> in summary, what is wrong with my repo, if anything, and what can i do
> about it? nothing on the web for git corruption seems to say much,
> other than pull from github or whatever. this is my own repo, the
> original repo, so i cannot do that. org annex has an uncorrupt tool
> of some kind, but it did not seem relevant. i do have rsnapshot
> [basically rsync] backups of the repo and the most significant files
> and dirs, but i do not know what one does to use that to repair any
> issues. i won't get into why, but changes were made over months.
>
> is there a protocol for this?
>
> would git fsck have balked?
>
> thank you!
>
>
> p.s.
>
> i have no reason to believe this is related, but git diff has
> intermingled emacs org mode entries. but i don't have to talk about
> it in org terms; in generic text terms, it has intermingled parts of
> different paragraphs. as a user, i'd prefer that completely unrelated
> paragraphs not be mingled, regardless of minimality. if possible.
>
> with respect to the intermingling only, unless this is related to the
> possible corruption, i will presume the diff is correct, in that a
> patch from it would produce the same result as a patch that does not
> intermingle. i believe this intermingling is because diff does not
> understand org, or paragraphs for that matter. in org, an entry
> starts with "^[*]+ " and ends at the beginning of another entry or at
> eof. they consist in my case mostly of ascii text paragraphs. just
> as with paragraphs, if you move an entry, you don't expect it to be
> mingled with a different one in the diff.
>
> i have been told that this cannot be fixed by merely telling a
> slightly improved differ that stuff between stars is worth preserving,
> but that a parser, not merely a couple of regexps, is needed to reduce
> this intermingling. i have also been told that difftastic uses
> tree-sitter, which might get such a syntax for emacs org mode. and so
> maybe at some point git diff can use that. idk.
>
> idk if any of this is related but i include it for completeness.
>
> also, please don't laugh, but i am using git version 2.11.0. i will
> upgrade pending various library and os stuff but my main concern is
> not for git, but for possible corruption in the repo and what is
> possible to do, at least given rsnapshot, to fix it.
>
--
The Kafka Pandemic
A blog about science, health, human rights, and misopathy:
https://thekafkapandemic.blogspot.com
^ permalink raw reply [relevance 4%]
* Re: [BUG] bulk move silently dropped, leaving the "delete" part in work dir, on commit reorder (rebase -i)
@ 2020-04-07 20:10 4% ` Elijah Newren
0 siblings, 0 replies; 71+ results
From: Elijah Newren @ 2020-04-07 20:10 UTC (permalink / raw)
To: ydirson; +Cc: Git Mailing List
Hi,
On Tue, Apr 7, 2020 at 9:03 AM <ydirson@free.fr> wrote:
>
> Hello all,
>
> Please find attached a fast-export test-case for the problem. It contains an "original state" commit
> and 2 commits moving lots of files around. As context, the first one is a logical fixup of the second
> one, adding one more move to the bulk move in the second commit.
>
> If I use "rebase -i" to reorder the 2 commits, "subject 1" which originally contains 4 blob changes and
> 324 moves, loses all the renames. Problem exists at least in 2.25.1 and 2.26.0 as shipped in Debian testing.
>
> Additionally, the files in workdir are all locally deleted and stay there as "Changes not staged for commit",
> which should have prevented the rebase from proceeding to the second "pick".
>
> (ref0/ref1)$ git log --raw HEAD^^..
> commit d368ee70ca358f4877185175780147b5bfba0ec5 (HEAD -> ref0/ref1)
> Author: User 0 <user0@example.com>
> Date: Thu Apr 2 17:15:29 2020 +0200
>
> subject 1
>
> body
>
> :100644 100644 16fd26f 16fd26f R100 path15/path30/path89/path102/path106/path107 path15/path607/path30/path89/path102/path106/path107
>
> commit a6b4902d848acdeeb0238d22dd7a093317e7a389
> Author: User 0 <user0@example.com>
> Date: Wed Apr 1 18:14:31 2020 +0200
>
> subject 2
>
> body
>
> :100644 100644 386a5e0 67bb842 M path12/path10
> :100644 100644 703e2a3 57729f1 M path13/path10
> :100644 100644 386a5e0 67bb842 M path14/path10
> :100644 100644 53d9ddb fe616ea M path9/path10
> (ref0/ref1)$
Thanks for the report. The testcase was slightly hard to understand
from the description at first, but it's basically:
# download the file that Yann attached
cat $DOWNLOADED_FILE | git fast-import --quiet
git checkout -b testing ref0/ref1
git rebase -i HEAD~2
# Swap the two pick lines, save & exit editor
at which point the rebase will complete with a report of success, but
it will drop most the changes in the "subject 2" patch, and leave the
working directory quite dirty at the end despite the fact that it
started out clean.
One can also duplicate this bug using cherry-pick or merge-recursive;
for example, assuming the testing branch was already created as above:
git reset --hard testing ref0/ref1~2
git cherry-pick ref0/ref1
This bug goes back to at least git-2.20 and likely earlier.
I tested with the ort merge strategy and it happens to fix this bug
(among others), so maybe if rebase stuff ever quiets down then I can
address this bug just by pushing that new strategy forward.
^ permalink raw reply [relevance 4%]
* Updating local tags: bugs and general feasibility
@ 2019-06-19 13:25 5% Karen Arutyunov
0 siblings, 0 replies; 71+ results
From: Karen Arutyunov @ 2019-06-19 13:25 UTC (permalink / raw)
To: git; +Cc: Boris Kolpackov
Hello,
I'm trying to configure my git client to update local tags with the
remote ones. Prior to git 2.20 the following option in ~/.gitconfig did
the job:
[remote "origin"]
tagopt = --tags
So the following commands worked as expected and the local tag gets updated:
# Create remote repository.
#
$ git init foo.git
$ touch foo.git/README
$ git -C foo.git/ add README
$ git -C foo.git/ commit -m "Release 1.0.0"
$ git -C foo.git/ tag -a -m "Tag version 1.0.0" "v1.0.0"
# Create local repository.
#
$ git clone foo.git
# Update remote repository moving the tag.
#
$ echo "TODO" >foo.git/README
$ git -C foo.git/ commit -a -m "Revision 1.0.0+1"
$ git -C foo.git/ tag -a -f -m "Tag version 1.0.0+1" "v1.0.0"
Updated tag 'v1.0.0' (was 3b773b1)
# Update local repository moving the tag.
#
$ git -C foo pull
...
t [tag update] v1.0.0 -> v1.0.0
...
Staring with git 2.20 the last command expectedly (according to the
git-fetch documentation) fails:
$ git -C foo pull
...
! [rejected] v1.0.0 -> v1.0.0 (would clobber existing tag)
Replacing the tagopt option in ~/.gitconfig with the following helps and
the above git-pull command succeeds:
[remote "origin"]
fetch = +refs/tags/*:refs/tags/*
(This approach is recommended by several stackoverflow answers and
studying git documentation gives the impression that it is the proper
way to accomplish this.)
However, starting with git 2.21 in the presence of this configuration
option I'm no longer able to clone any repository that contains tags:
$ git clone foo.git
Cloning into 'foo'...
done.
fatal: multiple updates for ref 'refs/tags/v1.0.0' not allowed
fatal: the remote end hung up unexpectedly
But still can succeed by running:
$ git init foo
$ git -C foo remote add origin ../foo.git
$ git -C foo fetch
...
>From ../foo
* [new tag] v1.0.0 -> v1.0.0
* [new branch] master -> origin/master
$ git -C foo checkout master
Note that the git version at the tip of the master branch (a6a95cd)
behaves the same way.
Is it a bug or am I somehow misusing this fetch configuration option?
Yet another strange thing I've noticed (that also happens for git
versions prior to 2.20) is that removing a remote tag also removes the
local tag in the presence of this fetch configuration option:
$ git -C foo tag
v1.0.0
$ git -C foo push origin :v1.0.0
$ git -C foo tag
Is it a bug or does the fetch option somehow also affects the push
operation?
The more general question: is overwriting tags, while generally not
recommended, nevertheless a valid approach for some sensible use cases
(e.g., a tag that always refers to the latest stable version or some
such) or is this not going to be supported long term and we are on our
own trying to accomplish this?
If the approach is considered to be valid, are there any plans to allow
configuring a remote git repository in a way that when it is
pulled/fetched, the local tags get updated without any additional
configuration effort from the user?
Thanks,
Karen
^ permalink raw reply [relevance 5%]
* Re: git-clone --config remote.origin.fetch regression
2019-05-28 22:34 4% git-clone --config remote.origin.fetch regression Han-Wen Nienhuys
@ 2019-05-29 13:20 0% ` SZEDER Gábor
0 siblings, 0 replies; 71+ results
From: SZEDER Gábor @ 2019-05-29 13:20 UTC (permalink / raw)
To: Han-Wen Nienhuys; +Cc: Jeff King, Alexander Huynh, git
On Tue, May 28, 2019 at 07:34:58PM -0300, Han-Wen Nienhuys wrote:
> (see also https://github.com/google/zoekt/issues/81)
>
> It looks like git 2.21 included a regression. The command
>
> git clone --bare --progress \
> --config "remote.origin.fetch=+refs/heads/*:refs/heads/*" \
> https://github.com/google/zoekt.git \
> /tmp/zoekt-git2.20.git
>
> would succeed with git 2.20, but fails with
>
> fatal: multiple updates for ref 'refs/heads/master' not allowed
>
> in git 2.21, probably caused by commit 515be83.
>
> Should I call git in another way? I originally included
> "remote.origin.fetch=+refs/heads/*:refs/heads/*" to avoid getting
> Gerrit refs (refs/changes/*), but maybe I should use a different
> incantation?
On first sight I was wondering why you don't use '--mirror', but yeah,
that would fetch 'refs/changes/*' as well (the whole 'refs/*',
really). In the meantime a workaround would be to run separate
commands to accomplish what 'git clone' would do under the hood:
git init --bare zoekt.git
cd zoekt.git
git config remote.origin.url https://github.com/google/zoekt.git
git config remote.origin.fetch '+refs/heads/*:refs/heads/*'
git fetch
This is indeed caused by 515be83382 (clone: respect additional
configured fetch refspecs during initial fetch, 2018-11-14): since
then the same refspec comes up twice in remote->fetch, once from the
configuration that you specified on the command line and once from the
default refspec that 'git clone' would have used anyway, and in the
end 'git clone' tries to write each ref twice, once for each of those
two refspecs, in a single ref transaction, hence the error.
I'm not quite sure how to properly handle the situation. The patch at
the bottom makes your case (and the case in an earlier report [1])
work by omitting 'git clone's default refspec if one of the configured
refspecs have the same destination side as the default refspec. I
think this is a step in the right-ish direction, but there are some
open questions:
- Should it only check the destination side of the refspecs, or the
source as well? IOW, in case of e.g.
git clone --bare \
-c 'remote.origin.fetch=refs/foo/*:refs/heads/*' ...
should it only fetch from 'refs/foo/*' or both from 'refs/foo/*'
and 'refs/heads/*'? With the patch below it's only 'refs/foo/*'.
If we were to fetch from both, then I expect trouble when both
'refs/foo/feature' and 'refs/heads/feature' happen to exist, but
this is a more general issue not limited to 'git clone -c ...'.
- Even if it were to check the source side of the refspec, it should
ignore the optional leading '+' in the refspecs, because otherwise
the command
# no leading '+' in the additional configured refspec
git clone --bare \
-c 'remote.origin.fetch=refs/heads/*:refs/heads/*' ...
would lead to the same error, because the default refspec for
'--bare' is '+refs/heads/*:refs/heads/*'.
(Sidenote: 'git clone's default refspec always has the leading
'+', but I think that's unnecessary, because during cloning there
are no existing refs to be updated in the first place.)
- What should be written to the configuration? Writing the default
refspec configuration uses a different logic than assembling the
default refspec for the initial fetch. As a result, even if the
default refspec is not used in the initial fetch, the command
# no leading '+' in the additional configured refspec
git clone \
-c 'remote.origin.fetch=refs/heads/*:refs/remotes/origin/*' ...
will still write it to the config, resulting in:
$ git config --get-all remote.origin.fetch
refs/heads/*:refs/remotes/origin/*
+refs/heads/*:refs/remotes/origin/*
Alas, we can't simply avoid writing the default refspec to the
configuration if it matches one of the additional configured
refspecs from the command line, because there is
git -c remote.origin.fetch=<refspec> clone ...
as well...
- Alternatively, we could make ref transactions a bit more lax about
duplicated entries, and ignore multiple updates to the same ref if
all of those ref updates want to do the same thing, i.e. have the
same old and new OID. However, the issue with writing the
configuration would still remain.
[1] https://public-inbox.org/git/20190307214447.GA4909@chabuduo/
--- >8 ---
Subject: [PATCH] [PoC] clone: avoid redundant default refspec
---
builtin/clone.c | 19 ++++++++++++++++++-
t/t5611-clone-config.sh | 15 +++++++++++++++
2 files changed, 33 insertions(+), 1 deletion(-)
diff --git a/builtin/clone.c b/builtin/clone.c
index 85b0d3155d..f104510cfe 100644
--- a/builtin/clone.c
+++ b/builtin/clone.c
@@ -907,6 +907,8 @@ int cmd_clone(int argc, const char **argv, const char *prefix)
struct remote *remote;
int err = 0, complete_refs_before_fetch = 1;
int submodule_progress;
+ int i, add_default_refspec = 1;
+ const char *default_refspec_dst;
struct argv_array ref_prefixes = ARGV_ARRAY_INIT;
@@ -1093,7 +1095,22 @@ int cmd_clone(int argc, const char **argv, const char *prefix)
strbuf_addf(&default_refspec, "+%s*:%s*", src_ref_prefix,
branch_top.buf);
- refspec_append(&remote->fetch, default_refspec.buf);
+ /*
+ * Don't add the default refspec if the user specified an additional
+ * refspec in the configuration whose destination matches the
+ * destination of the default refspec, because then both would want
+ * to update the same ref(s), leading to "multiple updates" error
+ * from the refs transaction.
+ * TODO: Or should it check both the source and the destination?
+ */
+ default_refspec_dst = strchr(default_refspec.buf, ':') + 1;
+ for (i = 0; i < remote->fetch.nr; i++)
+ if (!strcmp(default_refspec_dst, remote->fetch.items[i].dst)) {
+ add_default_refspec = 0;
+ break;
+ }
+ if (add_default_refspec)
+ refspec_append(&remote->fetch, default_refspec.buf);
transport = transport_get(remote, remote->url[0]);
transport_set_verbosity(transport, option_verbosity, option_progress);
diff --git a/t/t5611-clone-config.sh b/t/t5611-clone-config.sh
index 60c1ba951b..e63eec2894 100755
--- a/t/t5611-clone-config.sh
+++ b/t/t5611-clone-config.sh
@@ -92,6 +92,21 @@ test_expect_success 'clone -c remote.<remote>.fetch=<refspec> --origin=<name>' '
test_cmp expect actual
'
+test_expect_success 'clone -c remote.origin.fetch=<refspec> matches the default refspec' '
+ rm -rf child &&
+ git clone -c "remote.origin.fetch=+refs/heads/*:refs/remotes/origin/*" \
+ . child &&
+ # TODO: look, the same refspec is stored in the config twice:
+ git -C child config --get-all remote.origin.fetch &&
+ git -C child for-each-ref --format="%(refname)" >actual &&
+ cat >expect <<-\EOF &&
+ refs/heads/master
+ refs/remotes/origin/HEAD
+ refs/remotes/origin/master
+ EOF
+ test_cmp expect actual
+'
+
# Tests for the hidden file attribute on windows
is_hidden () {
# Use the output of `attrib`, ignore the absolute path
--
2.22.0.rc1.423.g9b4f2abbc5
^ permalink raw reply related [relevance 0%]
* git-clone --config remote.origin.fetch regression
@ 2019-05-28 22:34 4% Han-Wen Nienhuys
2019-05-29 13:20 0% ` SZEDER Gábor
0 siblings, 1 reply; 71+ results
From: Han-Wen Nienhuys @ 2019-05-28 22:34 UTC (permalink / raw)
To: git
(see also https://github.com/google/zoekt/issues/81)
It looks like git 2.21 included a regression. The command
git clone --bare --progress \
--config "remote.origin.fetch=+refs/heads/*:refs/heads/*" \
https://github.com/google/zoekt.git \
/tmp/zoekt-git2.20.git
would succeed with git 2.20, but fails with
fatal: multiple updates for ref 'refs/heads/master' not allowed
in git 2.21, probably caused by commit 515be83.
Should I call git in another way? I originally included
"remote.origin.fetch=+refs/heads/*:refs/heads/*" to avoid getting
Gerrit refs (refs/changes/*), but maybe I should use a different
incantation?
--
Google Germany GmbH, Erika-Mann-Strasse 33, 80636 Munich
Registergericht und -nummer: Hamburg, HRB 86891
Sitz der Gesellschaft: Hamburg
Geschäftsführer: Paul Manicle, Halimah DeLaine Prado
^ permalink raw reply [relevance 4%]
* Re: How to disable docs when building Git from sources
2019-03-25 7:14 0% ` Johannes Sixt
@ 2019-03-25 14:37 0% ` Jeffrey Walton
0 siblings, 0 replies; 71+ results
From: Jeffrey Walton @ 2019-03-25 14:37 UTC (permalink / raw)
To: Johannes Sixt; +Cc: Git List
On Mon, Mar 25, 2019 at 3:14 AM Johannes Sixt <j6t@kdbg.org> wrote:
>
> Am 25.03.19 um 07:40 schrieb Jeffrey Walton:
> > I'm working on a low-resource dev-board. It is missing a lot of
> > utilities to save space. I'm building Git 2.20 from sources. Make is
> > failing due to '/bin/sh: 1: msgfmt: not found'. I don't cross-compile
> > because that's a bigger pain in the ass than waiting for the native
> > build to finish.
> >
> > I ran './configure --help' but I don't see a way to disable the docs.
> > In the past I tired --disable-docs but it had no effect.
> >
> > How do I disable the docs?
>
> These are message translations, not documentation. To disable them, set
>
> NO_GETTEXT=Yes
>
> in your config.mak.
Thanks Hannes.
I used 'make -j 4 NO_GETTEXT=Yes' and I think that fixed the command
line components. Or at least I did not see the error where I was
previously seeing it.
I am seeing a similar issue now for the GUI components (assuming
po2msg.sh is doing similar):
make -C git-gui gitexecdir='/usr/local/libexec/git-core' all
make[1]: Entering directory '/home/jwalton/Build-Scripts/git-2.21.0/git-gui'
GITGUI_VERSION = 0.21.GITGUI
* new locations or Tcl/Tk interpreter
tclsh po/po2msg.sh --statistics --tcl -l hu -d po/ po/hu.po
tclsh po/po2msg.sh --statistics --tcl -l pt_pt -d po/ po/pt_pt.po
make[1]: tclsh: Command not found
make[1]: tclsh: Command not found
tclsh po/po2msg.sh --statistics --tcl -l ja -d po/ po/ja.po
Makefile:252: recipe for target 'po/hu.msg' failed
make[1]: tclsh: Command not found
make[1]: *** [po/hu.msg] Error 127
make[1]: *** Waiting for unfinished jobs....
Makefile:252: recipe for target 'po/pt_pt.msg' failed
make[1]: *** [po/pt_pt.msg] Error 127
Makefile:252: recipe for target 'po/ja.msg' failed
make[1]: *** [po/ja.msg] Error 127
make[1]: Leaving directory '/home/jwalton/Build-Scripts/git-2.21.0/git-gui'
Makefile:2037: recipe for target 'all' failed
make: *** [all] Error 2
Jeff
^ permalink raw reply [relevance 0%]
* Re: How to disable docs when building Git from sources
2019-03-25 6:40 4% How to disable docs when building Git from sources Jeffrey Walton
@ 2019-03-25 7:14 0% ` Johannes Sixt
2019-03-25 14:37 0% ` Jeffrey Walton
0 siblings, 1 reply; 71+ results
From: Johannes Sixt @ 2019-03-25 7:14 UTC (permalink / raw)
To: noloader; +Cc: Git List
Am 25.03.19 um 07:40 schrieb Jeffrey Walton:
> I'm working on a low-resource dev-board. It is missing a lot of
> utilities to save space. I'm building Git 2.20 from sources. Make is
> failing due to '/bin/sh: 1: msgfmt: not found'. I don't cross-compile
> because that's a bigger pain in the ass than waiting for the native
> build to finish.
>
> I ran './configure --help' but I don't see a way to disable the docs.
> In the past I tired --disable-docs but it had no effect.
>
> How do I disable the docs?
These are message translations, not documentation. To disable them, set
NO_GETTEXT=Yes
in your config.mak.
-- Hannes
^ permalink raw reply [relevance 0%]
* How to disable docs when building Git from sources
@ 2019-03-25 6:40 4% Jeffrey Walton
2019-03-25 7:14 0% ` Johannes Sixt
0 siblings, 1 reply; 71+ results
From: Jeffrey Walton @ 2019-03-25 6:40 UTC (permalink / raw)
To: Git List
Hi Everyone,
I'm working on a low-resource dev-board. It is missing a lot of
utilities to save space. I'm building Git 2.20 from sources. Make is
failing due to '/bin/sh: 1: msgfmt: not found'. I don't cross-compile
because that's a bigger pain in the ass than waiting for the native
build to finish.
I ran './configure --help' but I don't see a way to disable the docs.
In the past I tired --disable-docs but it had no effect.
How do I disable the docs?
=========================
gcc -o builtin/write-tree.o -c -MF builtin/.depend/write-tree.o.d -MQ builtin/wr
ite-tree.o -MMD -MP -I/usr/local/include -DNDEBUG -g2 -O2 -march=native -fPIC -I
. -DHAVE_SYSINFO -DGIT_HOST_CPU="\"armv7l\"" -DUSE_LIBPCRE2 -I/usr/local/include
-DHAVE_ALLOCA_H -I/usr/local/include -DUSE_CURL_FOR_IMAP_SEND -I/usr/local/incl
ude -I/usr/local/include -I/usr/local/include -DSHA1_DC -DSHA1DC_NO_STANDARD_INC
LUDES -DSHA1DC_INIT_SAFE_HASH_DEFAULT=0 -DSHA1DC_CUSTOM_INCLUDE_SHA1_C="\"cache.
h\"" -DSHA1DC_CUSTOM_INCLUDE_UBC_CHECK_C="\"git-compat-util.h\"" -DSHA256_BLK -
DHAVE_PATHS_H -DHAVE_LIBCHARSET_H -DHAVE_STRINGS_H -DHAVE_DEV_TTY -DHAVE_CLOCK_G
ETTIME -DHAVE_CLOCK_MONOTONIC -DHAVE_GETDELIM '-DPROCFS_EXECUTABLE_PATH="/proc/s
elf/exe"' -DFREAD_READS_DIRECTORIES -DNO_STRLCPY -DSHELL_PATH='"/bin/sh"' -DPAG
ER_ENV='"LESS=FRX LV=-c"' builtin/write-tree.c
mkdir -p po/build/locale/pt_PT/LC_MESSAGES/ && msgfmt --check --statistics -o po
/build/locale/pt_PT/LC_MESSAGES/git.mo po/pt_PT.po
/bin/sh: 1: msgfmt: not found
Makefile:2533: recipe for target 'po/build/locale/pt_PT/LC_MESSAGES/git.mo' fail
ed
make: *** [po/build/locale/pt_PT/LC_MESSAGES/git.mo] Error 127
^ permalink raw reply [relevance 4%]
* Re: [PATCH v4] rebase: remove the rebase.useBuiltin setting
2019-03-18 11:01 2% ` [PATCH v4] " Ævar Arnfjörð Bjarmason
@ 2019-03-19 10:21 0% ` Phillip Wood
0 siblings, 0 replies; 71+ results
From: Phillip Wood @ 2019-03-19 10:21 UTC (permalink / raw)
To: Ævar Arnfjörð Bjarmason, git
Cc: Junio C Hamano, Phillip Wood, Johannes Schindelin
Hi Ævar
On 18/03/2019 11:01, Ævar Arnfjörð Bjarmason wrote:
> Remove the rebase.useBuiltin setting, which was added as an escape
> hatch to disable the builtin version of rebase first released with Git
> 2.20.
>
> See [1] for the initial implementation of rebase.useBuiltin, and [2]
> and [3] for the documentation and corresponding
> GIT_TEST_REBASE_USE_BUILTIN option.
>
> Carrying the legacy version is a maintenance burden as seen in
> 7e097e27d3 ("legacy-rebase: backport -C<n> and --whitespace=<option>
> checks", 2018-11-20) and 9aea5e9286 ("rebase: fix regression in
> rebase.useBuiltin=false test mode", 2019-02-13). Since the built-in
> version has been shown to be stable enough let's remove the legacy
> version.
>
> As noted in [3] having use_builtin_rebase() shell out to get its
> config doesn't make any sense anymore, that was done for the purposes
> of spawning the legacy rebase without having modified any global
> state. Let's instead handle this case in rebase_config().
>
> There's still a bunch of references to git-legacy-rebase in po/*.po,
> but those will be dealt with in time by the i18n effort.
>
> Even though this configuration variable only existed two releases
> let's not entirely delete the entry from the docs, but note its
> absence. Individual versions of git tend to be around for a while due
> to distro packaging timelines, so e.g. if we're "lucky" a given
> version like 2.21 might be installed on say OSX for half a decade.
>
> That'll mean some people probably setting this in config, and then
> when they later wonder if it's needed they can Google search the
> config option name or check it in git-config. It also allows us to
> refer to the docs from the warning for details.
>
> 1. 55071ea248 ("rebase: start implementing it as a builtin",
> 2018-08-07)
> 2. d8d0a546f0 ("rebase doc: document rebase.useBuiltin", 2018-11-14)
> 3. 62c23938fa ("tests: add a special setup where rebase.useBuiltin is
> off", 2018-11-14)
> 3. https://public-inbox.org/git/nycvar.QRO.7.76.6.1903141544110.41@tvgsbejvaqbjf.bet/
>
> Acked-by: Johannes Schindelin <johannes.schindelin@gmx.de>
> Signed-off-by: Ævar Arnfjörð Bjarmason <avarab@gmail.com>
> ---
>
> Fix wording issues pointed out by Phillip & incorporated the Acked-by
> in Junio's push-out & added my SOB.
>
> The confusion with "one release" was a) I'd initially written this
> before 2.21 was cut and forgot to change that
Ah I wondered if that was the case. The new version looks great
Thanks
Phillip
2) I was then using
> "between" in the inclusive sense "pick a number between 1 and
> 10". Phillip's suggestion is better.
>
> Range-diff:
> 1: 799dd15e4fd ! 1: 9ca747cb1f5 rebase: remove the rebase.useBuiltin setting
> @@ -25,7 +25,7 @@
> There's still a bunch of references to git-legacy-rebase in po/*.po,
> but those will be dealt with in time by the i18n effort.
>
> - Even though this configuration variable only existed for one release
> + Even though this configuration variable only existed two releases
> let's not entirely delete the entry from the docs, but note its
> absence. Individual versions of git tend to be around for a while due
> to distro packaging timelines, so e.g. if we're "lucky" a given
> @@ -43,6 +43,9 @@
> off", 2018-11-14)
> 3. https://public-inbox.org/git/nycvar.QRO.7.76.6.1903141544110.41@tvgsbejvaqbjf.bet/
>
> + Acked-by: Johannes Schindelin <johannes.schindelin@gmx.de>
> + Signed-off-by: Ævar Arnfjörð Bjarmason <avarab@gmail.com>
> +
> diff --git a/.gitignore b/.gitignore
> --- a/.gitignore
> +++ b/.gitignore
> @@ -72,8 +75,8 @@
> -If you find some reason to set this option to `false` other than
> -one-off testing you should report the behavior difference as a bug in
> -git.
> -+ Unused configuration variable. Used between Git version 2.20
> -+ and 2.21 as an escape hatch to enable the legacy shellscript
> ++ Unused configuration variable. Used in Git versions 2.20 and
> ++ 2.21 as an escape hatch to enable the legacy shellscript
> + implementation of rebase. Now the built-in rewrite of it in C
> + is always used. Setting this will emit a warning, to alert any
> + remaining users that setting this now does nothing.
>
> .gitignore | 1 -
> Documentation/config/rebase.txt | 17 +-
> Makefile | 1 -
> builtin/rebase.c | 50 +--
> git-legacy-rebase.sh | 770 --------------------------------
> t/README | 4 -
> t/t3400-rebase.sh | 16 +
> t/t3404-rebase-interactive.sh | 9 +-
> 8 files changed, 35 insertions(+), 833 deletions(-)
> delete mode 100755 git-legacy-rebase.sh
>
> diff --git a/.gitignore b/.gitignore
> index 7374587f9df..5cb84f1d1a9 100644
> --- a/.gitignore
> +++ b/.gitignore
> @@ -82,7 +82,6 @@
> /git-init-db
> /git-interpret-trailers
> /git-instaweb
> -/git-legacy-rebase
> /git-log
> /git-ls-files
> /git-ls-remote
> diff --git a/Documentation/config/rebase.txt b/Documentation/config/rebase.txt
> index 331d250e046..d98e32d812e 100644
> --- a/Documentation/config/rebase.txt
> +++ b/Documentation/config/rebase.txt
> @@ -1,16 +1,9 @@
> rebase.useBuiltin::
> - Set to `false` to use the legacy shellscript implementation of
> - linkgit:git-rebase[1]. Is `true` by default, which means use
> - the built-in rewrite of it in C.
> -+
> -The C rewrite is first included with Git version 2.20. This option
> -serves an an escape hatch to re-enable the legacy version in case any
> -bugs are found in the rewrite. This option and the shellscript version
> -of linkgit:git-rebase[1] will be removed in some future release.
> -+
> -If you find some reason to set this option to `false` other than
> -one-off testing you should report the behavior difference as a bug in
> -git.
> + Unused configuration variable. Used in Git versions 2.20 and
> + 2.21 as an escape hatch to enable the legacy shellscript
> + implementation of rebase. Now the built-in rewrite of it in C
> + is always used. Setting this will emit a warning, to alert any
> + remaining users that setting this now does nothing.
>
> rebase.stat::
> Whether to show a diffstat of what changed upstream since the last
> diff --git a/Makefile b/Makefile
> index 537493822b1..9f1159cffcb 100644
> --- a/Makefile
> +++ b/Makefile
> @@ -632,7 +632,6 @@ SCRIPT_SH += git-merge-one-file.sh
> SCRIPT_SH += git-merge-resolve.sh
> SCRIPT_SH += git-mergetool.sh
> SCRIPT_SH += git-quiltimport.sh
> -SCRIPT_SH += git-legacy-rebase.sh
> SCRIPT_SH += git-remote-testgit.sh
> SCRIPT_SH += git-request-pull.sh
> SCRIPT_SH += git-stash.sh
> diff --git a/builtin/rebase.c b/builtin/rebase.c
> index 52114cbf0d9..bc3dc629c16 100644
> --- a/builtin/rebase.c
> +++ b/builtin/rebase.c
> @@ -46,29 +46,6 @@ enum rebase_type {
> REBASE_PRESERVE_MERGES
> };
>
> -static int use_builtin_rebase(void)
> -{
> - struct child_process cp = CHILD_PROCESS_INIT;
> - struct strbuf out = STRBUF_INIT;
> - int ret, env = git_env_bool("GIT_TEST_REBASE_USE_BUILTIN", -1);
> -
> - if (env != -1)
> - return env;
> -
> - argv_array_pushl(&cp.args,
> - "config", "--bool", "rebase.usebuiltin", NULL);
> - cp.git_cmd = 1;
> - if (capture_command(&cp, &out, 6)) {
> - strbuf_release(&out);
> - return 1;
> - }
> -
> - strbuf_trim(&out);
> - ret = !strcmp("true", out.buf);
> - strbuf_release(&out);
> - return ret;
> -}
> -
> struct rebase_options {
> enum rebase_type type;
> const char *state_dir;
> @@ -106,6 +83,7 @@ struct rebase_options {
> char *strategy, *strategy_opts;
> struct strbuf git_format_patch_opt;
> int reschedule_failed_exec;
> + int use_legacy_rebase;
> };
>
> static int is_interactive(struct rebase_options *opts)
> @@ -869,6 +847,11 @@ static int rebase_config(const char *var, const char *value, void *data)
> return 0;
> }
>
> + if (!strcmp(var, "rebase.usebuiltin")) {
> + opts->use_legacy_rebase = !git_config_bool(var, value);
> + return 0;
> + }
> +
> return git_default_config(var, value, data);
> }
>
> @@ -1143,22 +1126,6 @@ int cmd_rebase(int argc, const char **argv, const char *prefix)
> };
> int i;
>
> - /*
> - * 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 && !strcmp(argv[1], "-h"))
> usage_with_options(builtin_rebase_usage,
> builtin_rebase_options);
> @@ -1169,6 +1136,11 @@ int cmd_rebase(int argc, const char **argv, const char *prefix)
>
> git_config(rebase_config, &options);
>
> + if (options.use_legacy_rebase ||
> + !git_env_bool("GIT_TEST_REBASE_USE_BUILTIN", -1))
> + warning(_("the rebase.useBuiltin support has been removed!\n"
> + "See its entry in 'git help config' for details."));
> +
> strbuf_reset(&buf);
> strbuf_addf(&buf, "%s/applying", apply_dir());
> if(file_exists(buf.buf))
> diff --git a/git-legacy-rebase.sh b/git-legacy-rebase.sh
> deleted file mode 100755
> index 5c2c4e5276d..00000000000
> --- a/git-legacy-rebase.sh
> +++ /dev/null
> @@ -1,770 +0,0 @@
> -#!/bin/sh
> -#
> -# Copyright (c) 2005 Junio C Hamano.
> -#
> -
> -SUBDIRECTORY_OK=Yes
> -OPTIONS_KEEPDASHDASH=
> -OPTIONS_STUCKLONG=t
> -OPTIONS_SPEC="\
> -git rebase [-i] [options] [--exec <cmd>] [--onto <newbase>] [<upstream>] [<branch>]
> -git rebase [-i] [options] [--exec <cmd>] [--onto <newbase>] --root [<branch>]
> -git rebase --continue | --abort | --skip | --edit-todo
> ---
> - Available options are
> -v,verbose! display a diffstat of what changed upstream
> -q,quiet! be quiet. implies --no-stat
> -autostash automatically stash/stash pop before and after
> -fork-point use 'merge-base --fork-point' to refine upstream
> -onto=! rebase onto given branch instead of upstream
> -r,rebase-merges? try to rebase merges instead of skipping them
> -p,preserve-merges! try to recreate merges instead of ignoring them
> -s,strategy=! use the given merge strategy
> -X,strategy-option=! pass the argument through to the merge strategy
> -no-ff! cherry-pick all commits, even if unchanged
> -f,force-rebase! cherry-pick all commits, even if unchanged
> -m,merge! use merging strategies to rebase
> -i,interactive! let the user edit the list of commits to rebase
> -x,exec=! add exec lines after each commit of the editable list
> -k,keep-empty preserve empty commits during rebase
> -allow-empty-message allow rebasing commits with empty messages
> -stat! display a diffstat of what changed upstream
> -n,no-stat! do not show diffstat of what changed upstream
> -verify allow pre-rebase hook to run
> -rerere-autoupdate allow rerere to update index with resolved conflicts
> -root! rebase all reachable commits up to the root(s)
> -autosquash move commits that begin with squash!/fixup! under -i
> -signoff add a Signed-off-by: line to each commit
> -committer-date-is-author-date! passed to 'git am'
> -ignore-date! passed to 'git am'
> -whitespace=! passed to 'git apply'
> -ignore-whitespace! passed to 'git apply'
> -C=! passed to 'git apply'
> -S,gpg-sign? GPG-sign commits
> - Actions:
> -continue! continue
> -abort! abort and check out the original branch
> -skip! skip current patch and continue
> -edit-todo! edit the todo list during an interactive rebase
> -quit! abort but keep HEAD where it is
> -show-current-patch! show the patch file being applied or merged
> -reschedule-failed-exec automatically reschedule failed exec commands
> -"
> -. git-sh-setup
> -set_reflog_action rebase
> -require_work_tree_exists
> -cd_to_toplevel
> -
> -LF='
> -'
> -ok_to_skip_pre_rebase=
> -
> -squash_onto=
> -unset onto
> -unset restrict_revision
> -cmd=
> -strategy=
> -strategy_opts=
> -do_merge=
> -merge_dir="$GIT_DIR"/rebase-merge
> -apply_dir="$GIT_DIR"/rebase-apply
> -verbose=
> -diffstat=
> -test "$(git config --bool rebase.stat)" = true && diffstat=t
> -autostash="$(git config --bool rebase.autostash || echo false)"
> -fork_point=auto
> -git_am_opt=
> -git_format_patch_opt=
> -rebase_root=
> -force_rebase=
> -allow_rerere_autoupdate=
> -# Non-empty if a rebase was in progress when 'git rebase' was invoked
> -in_progress=
> -# One of {am, merge, interactive}
> -type=
> -# One of {"$GIT_DIR"/rebase-apply, "$GIT_DIR"/rebase-merge}
> -state_dir=
> -# One of {'', continue, skip, abort}, as parsed from command line
> -action=
> -rebase_merges=
> -rebase_cousins=
> -preserve_merges=
> -autosquash=
> -keep_empty=
> -allow_empty_message=--allow-empty-message
> -signoff=
> -reschedule_failed_exec=
> -test "$(git config --bool rebase.autosquash)" = "true" && autosquash=t
> -case "$(git config --bool commit.gpgsign)" in
> -true) gpg_sign_opt=-S ;;
> -*) gpg_sign_opt= ;;
> -esac
> -test "$(git config --bool rebase.reschedulefailedexec)" = "true" &&
> -reschedule_failed_exec=--reschedule-failed-exec
> -. git-rebase--common
> -
> -read_basic_state () {
> - test -f "$state_dir/head-name" &&
> - test -f "$state_dir/onto" &&
> - head_name=$(cat "$state_dir"/head-name) &&
> - onto=$(cat "$state_dir"/onto) &&
> - # We always write to orig-head, but interactive rebase used to write to
> - # head. Fall back to reading from head to cover for the case that the
> - # user upgraded git with an ongoing interactive rebase.
> - if test -f "$state_dir"/orig-head
> - then
> - orig_head=$(cat "$state_dir"/orig-head)
> - else
> - orig_head=$(cat "$state_dir"/head)
> - fi &&
> - test -f "$state_dir"/quiet && GIT_QUIET=t
> - test -f "$state_dir"/verbose && verbose=t
> - test -f "$state_dir"/strategy && strategy="$(cat "$state_dir"/strategy)"
> - test -f "$state_dir"/strategy_opts &&
> - strategy_opts="$(cat "$state_dir"/strategy_opts)"
> - test -f "$state_dir"/allow_rerere_autoupdate &&
> - allow_rerere_autoupdate="$(cat "$state_dir"/allow_rerere_autoupdate)"
> - test -f "$state_dir"/gpg_sign_opt &&
> - gpg_sign_opt="$(cat "$state_dir"/gpg_sign_opt)"
> - test -f "$state_dir"/signoff && {
> - signoff="$(cat "$state_dir"/signoff)"
> - force_rebase=t
> - }
> - test -f "$state_dir"/reschedule-failed-exec &&
> - reschedule_failed_exec=t
> -}
> -
> -finish_rebase () {
> - rm -f "$(git rev-parse --git-path REBASE_HEAD)"
> - apply_autostash &&
> - { git gc --auto || true; } &&
> - rm -rf "$state_dir"
> -}
> -
> -run_interactive () {
> - GIT_CHERRY_PICK_HELP="$resolvemsg"
> - export GIT_CHERRY_PICK_HELP
> -
> - test -n "$keep_empty" && keep_empty="--keep-empty"
> - test -n "$rebase_merges" && rebase_merges="--rebase-merges"
> - test -n "$rebase_cousins" && rebase_cousins="--rebase-cousins"
> - test -n "$autosquash" && autosquash="--autosquash"
> - test -n "$verbose" && verbose="--verbose"
> - test -n "$force_rebase" && force_rebase="--no-ff"
> - test -n "$restrict_revision" && \
> - restrict_revision="--restrict-revision=^$restrict_revision"
> - test -n "$upstream" && upstream="--upstream=$upstream"
> - test -n "$onto" && onto="--onto=$onto"
> - test -n "$squash_onto" && squash_onto="--squash-onto=$squash_onto"
> - test -n "$onto_name" && onto_name="--onto-name=$onto_name"
> - test -n "$head_name" && head_name="--head-name=$head_name"
> - test -n "$strategy" && strategy="--strategy=$strategy"
> - test -n "$strategy_opts" && strategy_opts="--strategy-opts=$strategy_opts"
> - test -n "$switch_to" && switch_to="--switch-to=$switch_to"
> - test -n "$cmd" && cmd="--cmd=$cmd"
> - test -n "$action" && action="--$action"
> -
> - exec git rebase--interactive "$action" "$keep_empty" "$rebase_merges" "$rebase_cousins" \
> - "$upstream" "$onto" "$squash_onto" "$restrict_revision" \
> - "$allow_empty_message" "$autosquash" "$verbose" \
> - "$force_rebase" "$onto_name" "$head_name" "$strategy" \
> - "$strategy_opts" "$cmd" "$switch_to" \
> - "$allow_rerere_autoupdate" "$gpg_sign_opt" "$signoff" \
> - "$reschedule_failed_exec"
> -}
> -
> -run_specific_rebase () {
> - if [ "$interactive_rebase" = implied ]; then
> - GIT_SEQUENCE_EDITOR=:
> - export GIT_SEQUENCE_EDITOR
> - autosquash=
> - fi
> -
> - if test -n "$interactive_rebase" -a -z "$preserve_merges"
> - then
> - run_interactive
> - else
> - . git-rebase--$type
> -
> - if test -z "$preserve_merges"
> - then
> - git_rebase__$type
> - else
> - git_rebase__preserve_merges
> - fi
> - fi
> -
> - ret=$?
> - if test $ret -eq 0
> - then
> - finish_rebase
> - elif test $ret -eq 2 # special exit status for rebase -p
> - then
> - apply_autostash &&
> - rm -rf "$state_dir" &&
> - die "Nothing to do"
> - fi
> - exit $ret
> -}
> -
> -run_pre_rebase_hook () {
> - if test -z "$ok_to_skip_pre_rebase" &&
> - test -x "$(git rev-parse --git-path hooks/pre-rebase)"
> - then
> - "$(git rev-parse --git-path hooks/pre-rebase)" ${1+"$@"} ||
> - die "$(gettext "The pre-rebase hook refused to rebase.")"
> - fi
> -}
> -
> -test -f "$apply_dir"/applying &&
> - die "$(gettext "It looks like 'git am' is in progress. Cannot rebase.")"
> -
> -if test -d "$apply_dir"
> -then
> - type=am
> - state_dir="$apply_dir"
> -elif test -d "$merge_dir"
> -then
> - type=interactive
> - if test -d "$merge_dir"/rewritten
> - then
> - type=preserve-merges
> - interactive_rebase=explicit
> - preserve_merges=t
> - elif test -f "$merge_dir"/interactive
> - then
> - interactive_rebase=explicit
> - fi
> - state_dir="$merge_dir"
> -fi
> -test -n "$type" && in_progress=t
> -
> -total_argc=$#
> -while test $# != 0
> -do
> - case "$1" in
> - --no-verify)
> - ok_to_skip_pre_rebase=yes
> - ;;
> - --verify)
> - ok_to_skip_pre_rebase=
> - ;;
> - --continue|--skip|--abort|--quit|--edit-todo|--show-current-patch)
> - test $total_argc -eq 2 || usage
> - action=${1##--}
> - ;;
> - --onto=*)
> - onto="${1#--onto=}"
> - ;;
> - --exec=*)
> - cmd="${cmd}exec ${1#--exec=}${LF}"
> - test -z "$interactive_rebase" && interactive_rebase=implied
> - ;;
> - --interactive)
> - interactive_rebase=explicit
> - ;;
> - --keep-empty)
> - keep_empty=yes
> - ;;
> - --allow-empty-message)
> - allow_empty_message=--allow-empty-message
> - ;;
> - --no-keep-empty)
> - keep_empty=
> - ;;
> - --rebase-merges)
> - rebase_merges=t
> - test -z "$interactive_rebase" && interactive_rebase=implied
> - ;;
> - --rebase-merges=*)
> - rebase_merges=t
> - case "${1#*=}" in
> - rebase-cousins) rebase_cousins=t;;
> - no-rebase-cousins) rebase_cousins=;;
> - *) die "Unknown mode: $1";;
> - esac
> - test -z "$interactive_rebase" && interactive_rebase=implied
> - ;;
> - --preserve-merges)
> - preserve_merges=t
> - test -z "$interactive_rebase" && interactive_rebase=implied
> - ;;
> - --autosquash)
> - autosquash=t
> - ;;
> - --no-autosquash)
> - autosquash=
> - ;;
> - --fork-point)
> - fork_point=t
> - ;;
> - --no-fork-point)
> - fork_point=
> - ;;
> - --merge)
> - do_merge=t
> - ;;
> - --strategy-option=*)
> - strategy_opts="$strategy_opts $(git rev-parse --sq-quote "--${1#--strategy-option=}" | sed -e s/^.//)"
> - do_merge=t
> - test -z "$strategy" && strategy=recursive
> - ;;
> - --strategy=*)
> - strategy="${1#--strategy=}"
> - do_merge=t
> - ;;
> - --no-stat)
> - diffstat=
> - ;;
> - --stat)
> - diffstat=t
> - ;;
> - --autostash)
> - autostash=true
> - ;;
> - --no-autostash)
> - autostash=false
> - ;;
> - --verbose)
> - verbose=t
> - diffstat=t
> - GIT_QUIET=
> - ;;
> - --quiet)
> - GIT_QUIET=t
> - git_am_opt="$git_am_opt -q"
> - verbose=
> - diffstat=
> - ;;
> - --whitespace=*)
> - git_am_opt="$git_am_opt --whitespace=${1#--whitespace=}"
> - case "${1#--whitespace=}" in
> - fix|strip)
> - force_rebase=t
> - ;;
> - warn|nowarn|error|error-all)
> - ;; # okay, known whitespace option
> - *)
> - die "fatal: Invalid whitespace option: '${1#*=}'"
> - ;;
> - esac
> - ;;
> - --ignore-whitespace)
> - git_am_opt="$git_am_opt $1"
> - ;;
> - --signoff)
> - signoff=--signoff
> - ;;
> - --no-signoff)
> - signoff=
> - ;;
> - --committer-date-is-author-date|--ignore-date)
> - git_am_opt="$git_am_opt $1"
> - force_rebase=t
> - ;;
> - -C*[!0-9]*)
> - die "fatal: switch \`C' expects a numerical value"
> - ;;
> - -C*)
> - git_am_opt="$git_am_opt $1"
> - ;;
> - --root)
> - rebase_root=t
> - ;;
> - --force-rebase|--no-ff)
> - force_rebase=t
> - ;;
> - --rerere-autoupdate|--no-rerere-autoupdate)
> - allow_rerere_autoupdate="$1"
> - ;;
> - --gpg-sign)
> - gpg_sign_opt=-S
> - ;;
> - --gpg-sign=*)
> - gpg_sign_opt="-S${1#--gpg-sign=}"
> - ;;
> - --reschedule-failed-exec)
> - reschedule_failed_exec=--reschedule-failed-exec
> - ;;
> - --no-reschedule-failed-exec)
> - reschedule_failed_exec=
> - ;;
> - --)
> - shift
> - break
> - ;;
> - *)
> - usage
> - ;;
> - esac
> - shift
> -done
> -test $# -gt 2 && usage
> -
> -if test -n "$action"
> -then
> - test -z "$in_progress" && die "$(gettext "No rebase in progress?")"
> - # Only interactive rebase uses detailed reflog messages
> - if test -n "$interactive_rebase" && test "$GIT_REFLOG_ACTION" = rebase
> - then
> - GIT_REFLOG_ACTION="rebase -i ($action)"
> - export GIT_REFLOG_ACTION
> - fi
> -fi
> -
> -if test "$action" = "edit-todo" && test -z "$interactive_rebase"
> -then
> - die "$(gettext "The --edit-todo action can only be used during interactive rebase.")"
> -fi
> -
> -case "$action" in
> -continue)
> - # Sanity check
> - git rev-parse --verify HEAD >/dev/null ||
> - die "$(gettext "Cannot read HEAD")"
> - git update-index --ignore-submodules --refresh &&
> - git diff-files --quiet --ignore-submodules || {
> - echo "$(gettext "You must edit all merge conflicts and then
> -mark them as resolved using git add")"
> - exit 1
> - }
> - read_basic_state
> - run_specific_rebase
> - ;;
> -skip)
> - output git reset --hard HEAD || exit $?
> - read_basic_state
> - run_specific_rebase
> - ;;
> -abort)
> - git rerere clear
> - read_basic_state
> - case "$head_name" in
> - refs/*)
> - git symbolic-ref -m "rebase: aborting" HEAD $head_name ||
> - die "$(eval_gettext "Could not move back to \$head_name")"
> - ;;
> - esac
> - output git reset --hard $orig_head
> - finish_rebase
> - exit
> - ;;
> -quit)
> - exec rm -rf "$state_dir"
> - ;;
> -edit-todo)
> - run_specific_rebase
> - ;;
> -show-current-patch)
> - run_specific_rebase
> - die "BUG: run_specific_rebase is not supposed to return here"
> - ;;
> -esac
> -
> -# Make sure no rebase is in progress
> -if test -n "$in_progress"
> -then
> - state_dir_base=${state_dir##*/}
> - cmd_live_rebase="git rebase (--continue | --abort | --skip)"
> - cmd_clear_stale_rebase="rm -fr \"$state_dir\""
> - die "
> -$(eval_gettext 'It seems that there is already a $state_dir_base directory, and
> -I wonder if you are in the middle of another rebase. If that is the
> -case, please try
> - $cmd_live_rebase
> -If that is not the case, please
> - $cmd_clear_stale_rebase
> -and run me again. I am stopping in case you still have something
> -valuable there.')"
> -fi
> -
> -if test -n "$rebase_root" && test -z "$onto"
> -then
> - test -z "$interactive_rebase" && interactive_rebase=implied
> -fi
> -
> -if test -n "$keep_empty"
> -then
> - test -z "$interactive_rebase" && interactive_rebase=implied
> -fi
> -
> -actually_interactive=
> -if test -n "$interactive_rebase"
> -then
> - if test -z "$preserve_merges"
> - then
> - type=interactive
> - else
> - type=preserve-merges
> - fi
> - actually_interactive=t
> - state_dir="$merge_dir"
> -elif test -n "$do_merge"
> -then
> - interactive_rebase=implied
> - type=interactive
> - state_dir="$merge_dir"
> -else
> - type=am
> - state_dir="$apply_dir"
> -fi
> -
> -if test -t 2 && test -z "$GIT_QUIET"
> -then
> - git_format_patch_opt="$git_format_patch_opt --progress"
> -fi
> -
> -incompatible_opts=$(echo " $git_am_opt " | \
> - sed -e 's/ -q / /g' -e 's/^ \(.*\) $/\1/')
> -if test -n "$incompatible_opts"
> -then
> - if test -n "$actually_interactive" || test "$do_merge"
> - then
> - die "$(gettext "fatal: cannot combine am options with either interactive or merge options")"
> - fi
> -fi
> -
> -if test -n "$signoff"
> -then
> - test -n "$preserve_merges" &&
> - die "$(gettext "fatal: cannot combine '--signoff' with '--preserve-merges'")"
> - git_am_opt="$git_am_opt $signoff"
> - force_rebase=t
> -fi
> -
> -if test -n "$preserve_merges"
> -then
> - # Note: incompatibility with --signoff handled in signoff block above
> - # Note: incompatibility with --interactive is just a strong warning;
> - # git-rebase.txt caveats with "unless you know what you are doing"
> - test -n "$rebase_merges" &&
> - die "$(gettext "fatal: cannot combine '--preserve-merges' with '--rebase-merges'")"
> -
> - test -n "$reschedule_failed_exec" &&
> - die "$(gettext "error: cannot combine '--preserve-merges' with '--reschedule-failed-exec'")"
> -fi
> -
> -if test -n "$rebase_merges"
> -then
> - test -n "$strategy_opts" &&
> - die "$(gettext "fatal: cannot combine '--rebase-merges' with '--strategy-option'")"
> - test -n "$strategy" &&
> - die "$(gettext "fatal: cannot combine '--rebase-merges' with '--strategy'")"
> -fi
> -
> -if test -z "$rebase_root"
> -then
> - case "$#" in
> - 0)
> - if ! upstream_name=$(git rev-parse --symbolic-full-name \
> - --verify -q @{upstream} 2>/dev/null)
> - then
> - . git-parse-remote
> - error_on_missing_default_upstream "rebase" "rebase" \
> - "against" "git rebase $(gettext '<branch>')"
> - fi
> -
> - test "$fork_point" = auto && fork_point=t
> - ;;
> - *) upstream_name="$1"
> - if test "$upstream_name" = "-"
> - then
> - upstream_name="@{-1}"
> - fi
> - shift
> - ;;
> - esac
> - upstream=$(peel_committish "${upstream_name}") ||
> - die "$(eval_gettext "invalid upstream '\$upstream_name'")"
> - upstream_arg="$upstream_name"
> -else
> - if test -z "$onto"
> - then
> - empty_tree=$(git hash-object -t tree /dev/null)
> - onto=$(git commit-tree $empty_tree </dev/null)
> - squash_onto="$onto"
> - fi
> - unset upstream_name
> - unset upstream
> - test $# -gt 1 && usage
> - upstream_arg=--root
> -fi
> -
> -# Make sure the branch to rebase onto is valid.
> -onto_name=${onto-"$upstream_name"}
> -case "$onto_name" in
> -*...*)
> - if left=${onto_name%...*} right=${onto_name#*...} &&
> - onto=$(git merge-base --all ${left:-HEAD} ${right:-HEAD})
> - then
> - case "$onto" in
> - ?*"$LF"?*)
> - die "$(eval_gettext "\$onto_name: there are more than one merge bases")"
> - ;;
> - '')
> - die "$(eval_gettext "\$onto_name: there is no merge base")"
> - ;;
> - esac
> - else
> - die "$(eval_gettext "\$onto_name: there is no merge base")"
> - fi
> - ;;
> -*)
> - onto=$(peel_committish "$onto_name") ||
> - die "$(eval_gettext "Does not point to a valid commit: \$onto_name")"
> - ;;
> -esac
> -
> -# 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"
> -switch_to=
> -case "$#" in
> -1)
> - # Is it "rebase other $branchname" or "rebase other $commit"?
> - branch_name="$1"
> - switch_to="$1"
> -
> - # Is it a local branch?
> - if git show-ref --verify --quiet -- "refs/heads/$branch_name" &&
> - orig_head=$(git rev-parse -q --verify "refs/heads/$branch_name")
> - then
> - head_name="refs/heads/$branch_name"
> - # If not is it a valid ref (branch or commit)?
> - elif orig_head=$(git rev-parse -q --verify "$branch_name")
> - then
> - head_name="detached HEAD"
> -
> - else
> - die "$(eval_gettext "fatal: no such branch/commit '\$branch_name'")"
> - fi
> - ;;
> -0)
> - # Do not need to switch branches, we are already on it.
> - if branch_name=$(git symbolic-ref -q HEAD)
> - then
> - head_name=$branch_name
> - branch_name=$(expr "z$branch_name" : 'zrefs/heads/\(.*\)')
> - else
> - head_name="detached HEAD"
> - branch_name=HEAD
> - fi
> - orig_head=$(git rev-parse --verify HEAD) || exit
> - ;;
> -*)
> - die "BUG: unexpected number of arguments left to parse"
> - ;;
> -esac
> -
> -if test "$fork_point" = t
> -then
> - new_upstream=$(git merge-base --fork-point "$upstream_name" \
> - "${switch_to:-HEAD}")
> - if test -n "$new_upstream"
> - then
> - restrict_revision=$new_upstream
> - fi
> -fi
> -
> -if test "$autostash" = true && ! (require_clean_work_tree) 2>/dev/null
> -then
> - stash_sha1=$(git stash create "autostash") ||
> - die "$(gettext 'Cannot autostash')"
> -
> - mkdir -p "$state_dir" &&
> - echo $stash_sha1 >"$state_dir/autostash" &&
> - stash_abbrev=$(git rev-parse --short $stash_sha1) &&
> - echo "$(eval_gettext 'Created autostash: $stash_abbrev')" &&
> - git reset --hard
> -fi
> -
> -require_clean_work_tree "rebase" "$(gettext "Please commit or stash them.")"
> -
> -# Now we are rebasing commits $upstream..$orig_head (or with --root,
> -# everything leading up to $orig_head) on top of $onto
> -
> -# Check if we are already based on $onto with linear history,
> -# but this should be done only when upstream and onto are the same
> -# and if this is not an interactive rebase.
> -mb=$(git merge-base "$onto" "$orig_head")
> -if test -z "$actually_interactive" && test "$upstream" = "$onto" &&
> - test "$mb" = "$onto" && test -z "$restrict_revision" &&
> - # linear history?
> - ! (git rev-list --parents "$onto".."$orig_head" | sane_grep " .* ") > /dev/null
> -then
> - if test -z "$force_rebase"
> - then
> - # Lazily switch to the target branch if needed...
> - test -z "$switch_to" ||
> - GIT_REFLOG_ACTION="$GIT_REFLOG_ACTION: checkout $switch_to" \
> - git checkout -q "$switch_to" --
> - if test "$branch_name" = "HEAD" &&
> - ! git symbolic-ref -q HEAD
> - then
> - say "$(eval_gettext "HEAD is up to date.")"
> - else
> - say "$(eval_gettext "Current branch \$branch_name is up to date.")"
> - fi
> - finish_rebase
> - exit 0
> - else
> - if test "$branch_name" = "HEAD" &&
> - ! git symbolic-ref -q HEAD
> - then
> - say "$(eval_gettext "HEAD is up to date, rebase forced.")"
> - else
> - say "$(eval_gettext "Current branch \$branch_name is up to date, rebase forced.")"
> - fi
> - fi
> -fi
> -
> -# If a hook exists, give it a chance to interrupt
> -run_pre_rebase_hook "$upstream_arg" "$@"
> -
> -if test -n "$diffstat"
> -then
> - if test -n "$verbose"
> - then
> - if test -z "$mb"
> - then
> - echo "$(eval_gettext "Changes to \$onto:")"
> - else
> - echo "$(eval_gettext "Changes from \$mb to \$onto:")"
> - fi
> - fi
> - mb_tree="${mb:-$(git hash-object -t tree /dev/null)}"
> - # We want color (if set), but no pager
> - GIT_PAGER='' git diff --stat --summary "$mb_tree" "$onto"
> -fi
> -
> -if test -z "$actually_interactive" && test "$mb" = "$orig_head"
> -then
> - say "$(eval_gettext "Fast-forwarded \$branch_name to \$onto_name.")"
> - GIT_REFLOG_ACTION="$GIT_REFLOG_ACTION: checkout $onto_name" \
> - git checkout -q "$onto^0" || die "could not detach HEAD"
> - # If the $onto is a proper descendant of the tip of the branch, then
> - # we just fast-forwarded.
> - git update-ref ORIG_HEAD $orig_head
> - move_to_original_branch
> - finish_rebase
> - exit 0
> -fi
> -
> -test -n "$interactive_rebase" && run_specific_rebase
> -
> -# Detach HEAD and reset the tree
> -say "$(gettext "First, rewinding head to replay your work on top of it...")"
> -
> -GIT_REFLOG_ACTION="$GIT_REFLOG_ACTION: checkout $onto_name" \
> - git checkout -q "$onto^0" || die "could not detach HEAD"
> -git update-ref ORIG_HEAD $orig_head
> -
> -if test -n "$rebase_root"
> -then
> - revisions="$onto..$orig_head"
> -else
> - revisions="${restrict_revision-$upstream}..$orig_head"
> -fi
> -
> -run_specific_rebase
> diff --git a/t/README b/t/README
> index 7a3d582267c..385262357b5 100644
> --- a/t/README
> +++ b/t/README
> @@ -379,10 +379,6 @@ the --no-sparse command-line argument.
> GIT_TEST_PRELOAD_INDEX=<boolean> exercises the preload-index code path
> by overriding the minimum number of cache entries required per thread.
>
> -GIT_TEST_REBASE_USE_BUILTIN=<boolean>, when false, disables the
> -builtin version of git-rebase. See 'rebase.useBuiltin' in
> -git-config(1).
> -
> GIT_TEST_INDEX_THREADS=<n> enables exercising the multi-threaded loading
> of the index for the whole test suite by bypassing the default number of
> cache entries and thread minimums. Setting this to 1 will make the
> diff --git a/t/t3400-rebase.sh b/t/t3400-rebase.sh
> index 3e73f7584ce..a809de93047 100755
> --- a/t/t3400-rebase.sh
> +++ b/t/t3400-rebase.sh
> @@ -311,4 +311,20 @@ test_expect_success 'rebase--merge.sh and --show-current-patch' '
> )
> '
>
> +test_expect_success 'rebase -c rebase.useBuiltin=false warning' '
> + expected="rebase.useBuiltin support has been removed" &&
> +
> + # Only warn when the legacy rebase is requested...
> + test_must_fail git -c rebase.useBuiltin=false rebase 2>err &&
> + test_i18ngrep "$expected" err &&
> + test_must_fail env GIT_TEST_REBASE_USE_BUILTIN=false git rebase 2>err &&
> + test_i18ngrep "$expected" err &&
> +
> + # ...not when we would have used the built-in anyway
> + test_must_fail git -c rebase.useBuiltin=true rebase 2>err &&
> + test_must_be_empty err &&
> + test_must_fail env GIT_TEST_REBASE_USE_BUILTIN=true git rebase 2>err &&
> + test_must_be_empty err
> +'
> +
> test_done
> diff --git a/t/t3404-rebase-interactive.sh b/t/t3404-rebase-interactive.sh
> index b60b11f9f2f..1723e1a8585 100755
> --- a/t/t3404-rebase-interactive.sh
> +++ b/t/t3404-rebase-interactive.sh
> @@ -149,12 +149,10 @@ test_expect_success 'rebase -i with the exec command checks tree cleanness' '
>
> test_expect_success 'rebase -x with empty command fails' '
> test_when_finished "git rebase --abort ||:" &&
> - test_must_fail env GIT_TEST_REBASE_USE_BUILTIN=true \
> - git rebase -x "" @ 2>actual &&
> + test_must_fail env git rebase -x "" @ 2>actual &&
> test_write_lines "error: empty exec command" >expected &&
> test_i18ncmp expected actual &&
> - test_must_fail env GIT_TEST_REBASE_USE_BUILTIN=true \
> - git rebase -x " " @ 2>actual &&
> + test_must_fail env git rebase -x " " @ 2>actual &&
> test_i18ncmp expected actual
> '
>
> @@ -162,8 +160,7 @@ LF='
> '
> test_expect_success 'rebase -x with newline in command fails' '
> test_when_finished "git rebase --abort ||:" &&
> - test_must_fail env GIT_TEST_REBASE_USE_BUILTIN=true \
> - git rebase -x "a${LF}b" @ 2>actual &&
> + test_must_fail env git rebase -x "a${LF}b" @ 2>actual &&
> test_write_lines "error: exec commands cannot contain newlines" \
> >expected &&
> test_i18ncmp expected actual
>
^ permalink raw reply [relevance 0%]
* [PATCH v4] rebase: remove the rebase.useBuiltin setting
2019-03-18 10:19 0% ` Phillip Wood
@ 2019-03-18 11:01 2% ` Ævar Arnfjörð Bjarmason
2019-03-19 10:21 0% ` Phillip Wood
0 siblings, 1 reply; 71+ results
From: Ævar Arnfjörð Bjarmason @ 2019-03-18 11:01 UTC (permalink / raw)
To: git
Cc: Junio C Hamano, Phillip Wood, Johannes Schindelin,
Ævar Arnfjörð Bjarmason, Johannes Schindelin
Remove the rebase.useBuiltin setting, which was added as an escape
hatch to disable the builtin version of rebase first released with Git
2.20.
See [1] for the initial implementation of rebase.useBuiltin, and [2]
and [3] for the documentation and corresponding
GIT_TEST_REBASE_USE_BUILTIN option.
Carrying the legacy version is a maintenance burden as seen in
7e097e27d3 ("legacy-rebase: backport -C<n> and --whitespace=<option>
checks", 2018-11-20) and 9aea5e9286 ("rebase: fix regression in
rebase.useBuiltin=false test mode", 2019-02-13). Since the built-in
version has been shown to be stable enough let's remove the legacy
version.
As noted in [3] having use_builtin_rebase() shell out to get its
config doesn't make any sense anymore, that was done for the purposes
of spawning the legacy rebase without having modified any global
state. Let's instead handle this case in rebase_config().
There's still a bunch of references to git-legacy-rebase in po/*.po,
but those will be dealt with in time by the i18n effort.
Even though this configuration variable only existed two releases
let's not entirely delete the entry from the docs, but note its
absence. Individual versions of git tend to be around for a while due
to distro packaging timelines, so e.g. if we're "lucky" a given
version like 2.21 might be installed on say OSX for half a decade.
That'll mean some people probably setting this in config, and then
when they later wonder if it's needed they can Google search the
config option name or check it in git-config. It also allows us to
refer to the docs from the warning for details.
1. 55071ea248 ("rebase: start implementing it as a builtin",
2018-08-07)
2. d8d0a546f0 ("rebase doc: document rebase.useBuiltin", 2018-11-14)
3. 62c23938fa ("tests: add a special setup where rebase.useBuiltin is
off", 2018-11-14)
3. https://public-inbox.org/git/nycvar.QRO.7.76.6.1903141544110.41@tvgsbejvaqbjf.bet/
Acked-by: Johannes Schindelin <johannes.schindelin@gmx.de>
Signed-off-by: Ævar Arnfjörð Bjarmason <avarab@gmail.com>
---
Fix wording issues pointed out by Phillip & incorporated the Acked-by
in Junio's push-out & added my SOB.
The confusion with "one release" was a) I'd initially written this
before 2.21 was cut and forgot to change that 2) I was then using
"between" in the inclusive sense "pick a number between 1 and
10". Phillip's suggestion is better.
Range-diff:
1: 799dd15e4fd ! 1: 9ca747cb1f5 rebase: remove the rebase.useBuiltin setting
@@ -25,7 +25,7 @@
There's still a bunch of references to git-legacy-rebase in po/*.po,
but those will be dealt with in time by the i18n effort.
- Even though this configuration variable only existed for one release
+ Even though this configuration variable only existed two releases
let's not entirely delete the entry from the docs, but note its
absence. Individual versions of git tend to be around for a while due
to distro packaging timelines, so e.g. if we're "lucky" a given
@@ -43,6 +43,9 @@
off", 2018-11-14)
3. https://public-inbox.org/git/nycvar.QRO.7.76.6.1903141544110.41@tvgsbejvaqbjf.bet/
+ Acked-by: Johannes Schindelin <johannes.schindelin@gmx.de>
+ Signed-off-by: Ævar Arnfjörð Bjarmason <avarab@gmail.com>
+
diff --git a/.gitignore b/.gitignore
--- a/.gitignore
+++ b/.gitignore
@@ -72,8 +75,8 @@
-If you find some reason to set this option to `false` other than
-one-off testing you should report the behavior difference as a bug in
-git.
-+ Unused configuration variable. Used between Git version 2.20
-+ and 2.21 as an escape hatch to enable the legacy shellscript
++ Unused configuration variable. Used in Git versions 2.20 and
++ 2.21 as an escape hatch to enable the legacy shellscript
+ implementation of rebase. Now the built-in rewrite of it in C
+ is always used. Setting this will emit a warning, to alert any
+ remaining users that setting this now does nothing.
.gitignore | 1 -
Documentation/config/rebase.txt | 17 +-
Makefile | 1 -
builtin/rebase.c | 50 +--
git-legacy-rebase.sh | 770 --------------------------------
t/README | 4 -
t/t3400-rebase.sh | 16 +
t/t3404-rebase-interactive.sh | 9 +-
8 files changed, 35 insertions(+), 833 deletions(-)
delete mode 100755 git-legacy-rebase.sh
diff --git a/.gitignore b/.gitignore
index 7374587f9df..5cb84f1d1a9 100644
--- a/.gitignore
+++ b/.gitignore
@@ -82,7 +82,6 @@
/git-init-db
/git-interpret-trailers
/git-instaweb
-/git-legacy-rebase
/git-log
/git-ls-files
/git-ls-remote
diff --git a/Documentation/config/rebase.txt b/Documentation/config/rebase.txt
index 331d250e046..d98e32d812e 100644
--- a/Documentation/config/rebase.txt
+++ b/Documentation/config/rebase.txt
@@ -1,16 +1,9 @@
rebase.useBuiltin::
- Set to `false` to use the legacy shellscript implementation of
- linkgit:git-rebase[1]. Is `true` by default, which means use
- the built-in rewrite of it in C.
-+
-The C rewrite is first included with Git version 2.20. This option
-serves an an escape hatch to re-enable the legacy version in case any
-bugs are found in the rewrite. This option and the shellscript version
-of linkgit:git-rebase[1] will be removed in some future release.
-+
-If you find some reason to set this option to `false` other than
-one-off testing you should report the behavior difference as a bug in
-git.
+ Unused configuration variable. Used in Git versions 2.20 and
+ 2.21 as an escape hatch to enable the legacy shellscript
+ implementation of rebase. Now the built-in rewrite of it in C
+ is always used. Setting this will emit a warning, to alert any
+ remaining users that setting this now does nothing.
rebase.stat::
Whether to show a diffstat of what changed upstream since the last
diff --git a/Makefile b/Makefile
index 537493822b1..9f1159cffcb 100644
--- a/Makefile
+++ b/Makefile
@@ -632,7 +632,6 @@ SCRIPT_SH += git-merge-one-file.sh
SCRIPT_SH += git-merge-resolve.sh
SCRIPT_SH += git-mergetool.sh
SCRIPT_SH += git-quiltimport.sh
-SCRIPT_SH += git-legacy-rebase.sh
SCRIPT_SH += git-remote-testgit.sh
SCRIPT_SH += git-request-pull.sh
SCRIPT_SH += git-stash.sh
diff --git a/builtin/rebase.c b/builtin/rebase.c
index 52114cbf0d9..bc3dc629c16 100644
--- a/builtin/rebase.c
+++ b/builtin/rebase.c
@@ -46,29 +46,6 @@ enum rebase_type {
REBASE_PRESERVE_MERGES
};
-static int use_builtin_rebase(void)
-{
- struct child_process cp = CHILD_PROCESS_INIT;
- struct strbuf out = STRBUF_INIT;
- int ret, env = git_env_bool("GIT_TEST_REBASE_USE_BUILTIN", -1);
-
- if (env != -1)
- return env;
-
- argv_array_pushl(&cp.args,
- "config", "--bool", "rebase.usebuiltin", NULL);
- cp.git_cmd = 1;
- if (capture_command(&cp, &out, 6)) {
- strbuf_release(&out);
- return 1;
- }
-
- strbuf_trim(&out);
- ret = !strcmp("true", out.buf);
- strbuf_release(&out);
- return ret;
-}
-
struct rebase_options {
enum rebase_type type;
const char *state_dir;
@@ -106,6 +83,7 @@ struct rebase_options {
char *strategy, *strategy_opts;
struct strbuf git_format_patch_opt;
int reschedule_failed_exec;
+ int use_legacy_rebase;
};
static int is_interactive(struct rebase_options *opts)
@@ -869,6 +847,11 @@ static int rebase_config(const char *var, const char *value, void *data)
return 0;
}
+ if (!strcmp(var, "rebase.usebuiltin")) {
+ opts->use_legacy_rebase = !git_config_bool(var, value);
+ return 0;
+ }
+
return git_default_config(var, value, data);
}
@@ -1143,22 +1126,6 @@ int cmd_rebase(int argc, const char **argv, const char *prefix)
};
int i;
- /*
- * 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 && !strcmp(argv[1], "-h"))
usage_with_options(builtin_rebase_usage,
builtin_rebase_options);
@@ -1169,6 +1136,11 @@ int cmd_rebase(int argc, const char **argv, const char *prefix)
git_config(rebase_config, &options);
+ if (options.use_legacy_rebase ||
+ !git_env_bool("GIT_TEST_REBASE_USE_BUILTIN", -1))
+ warning(_("the rebase.useBuiltin support has been removed!\n"
+ "See its entry in 'git help config' for details."));
+
strbuf_reset(&buf);
strbuf_addf(&buf, "%s/applying", apply_dir());
if(file_exists(buf.buf))
diff --git a/git-legacy-rebase.sh b/git-legacy-rebase.sh
deleted file mode 100755
index 5c2c4e5276d..00000000000
--- a/git-legacy-rebase.sh
+++ /dev/null
@@ -1,770 +0,0 @@
-#!/bin/sh
-#
-# Copyright (c) 2005 Junio C Hamano.
-#
-
-SUBDIRECTORY_OK=Yes
-OPTIONS_KEEPDASHDASH=
-OPTIONS_STUCKLONG=t
-OPTIONS_SPEC="\
-git rebase [-i] [options] [--exec <cmd>] [--onto <newbase>] [<upstream>] [<branch>]
-git rebase [-i] [options] [--exec <cmd>] [--onto <newbase>] --root [<branch>]
-git rebase --continue | --abort | --skip | --edit-todo
---
- Available options are
-v,verbose! display a diffstat of what changed upstream
-q,quiet! be quiet. implies --no-stat
-autostash automatically stash/stash pop before and after
-fork-point use 'merge-base --fork-point' to refine upstream
-onto=! rebase onto given branch instead of upstream
-r,rebase-merges? try to rebase merges instead of skipping them
-p,preserve-merges! try to recreate merges instead of ignoring them
-s,strategy=! use the given merge strategy
-X,strategy-option=! pass the argument through to the merge strategy
-no-ff! cherry-pick all commits, even if unchanged
-f,force-rebase! cherry-pick all commits, even if unchanged
-m,merge! use merging strategies to rebase
-i,interactive! let the user edit the list of commits to rebase
-x,exec=! add exec lines after each commit of the editable list
-k,keep-empty preserve empty commits during rebase
-allow-empty-message allow rebasing commits with empty messages
-stat! display a diffstat of what changed upstream
-n,no-stat! do not show diffstat of what changed upstream
-verify allow pre-rebase hook to run
-rerere-autoupdate allow rerere to update index with resolved conflicts
-root! rebase all reachable commits up to the root(s)
-autosquash move commits that begin with squash!/fixup! under -i
-signoff add a Signed-off-by: line to each commit
-committer-date-is-author-date! passed to 'git am'
-ignore-date! passed to 'git am'
-whitespace=! passed to 'git apply'
-ignore-whitespace! passed to 'git apply'
-C=! passed to 'git apply'
-S,gpg-sign? GPG-sign commits
- Actions:
-continue! continue
-abort! abort and check out the original branch
-skip! skip current patch and continue
-edit-todo! edit the todo list during an interactive rebase
-quit! abort but keep HEAD where it is
-show-current-patch! show the patch file being applied or merged
-reschedule-failed-exec automatically reschedule failed exec commands
-"
-. git-sh-setup
-set_reflog_action rebase
-require_work_tree_exists
-cd_to_toplevel
-
-LF='
-'
-ok_to_skip_pre_rebase=
-
-squash_onto=
-unset onto
-unset restrict_revision
-cmd=
-strategy=
-strategy_opts=
-do_merge=
-merge_dir="$GIT_DIR"/rebase-merge
-apply_dir="$GIT_DIR"/rebase-apply
-verbose=
-diffstat=
-test "$(git config --bool rebase.stat)" = true && diffstat=t
-autostash="$(git config --bool rebase.autostash || echo false)"
-fork_point=auto
-git_am_opt=
-git_format_patch_opt=
-rebase_root=
-force_rebase=
-allow_rerere_autoupdate=
-# Non-empty if a rebase was in progress when 'git rebase' was invoked
-in_progress=
-# One of {am, merge, interactive}
-type=
-# One of {"$GIT_DIR"/rebase-apply, "$GIT_DIR"/rebase-merge}
-state_dir=
-# One of {'', continue, skip, abort}, as parsed from command line
-action=
-rebase_merges=
-rebase_cousins=
-preserve_merges=
-autosquash=
-keep_empty=
-allow_empty_message=--allow-empty-message
-signoff=
-reschedule_failed_exec=
-test "$(git config --bool rebase.autosquash)" = "true" && autosquash=t
-case "$(git config --bool commit.gpgsign)" in
-true) gpg_sign_opt=-S ;;
-*) gpg_sign_opt= ;;
-esac
-test "$(git config --bool rebase.reschedulefailedexec)" = "true" &&
-reschedule_failed_exec=--reschedule-failed-exec
-. git-rebase--common
-
-read_basic_state () {
- test -f "$state_dir/head-name" &&
- test -f "$state_dir/onto" &&
- head_name=$(cat "$state_dir"/head-name) &&
- onto=$(cat "$state_dir"/onto) &&
- # We always write to orig-head, but interactive rebase used to write to
- # head. Fall back to reading from head to cover for the case that the
- # user upgraded git with an ongoing interactive rebase.
- if test -f "$state_dir"/orig-head
- then
- orig_head=$(cat "$state_dir"/orig-head)
- else
- orig_head=$(cat "$state_dir"/head)
- fi &&
- test -f "$state_dir"/quiet && GIT_QUIET=t
- test -f "$state_dir"/verbose && verbose=t
- test -f "$state_dir"/strategy && strategy="$(cat "$state_dir"/strategy)"
- test -f "$state_dir"/strategy_opts &&
- strategy_opts="$(cat "$state_dir"/strategy_opts)"
- test -f "$state_dir"/allow_rerere_autoupdate &&
- allow_rerere_autoupdate="$(cat "$state_dir"/allow_rerere_autoupdate)"
- test -f "$state_dir"/gpg_sign_opt &&
- gpg_sign_opt="$(cat "$state_dir"/gpg_sign_opt)"
- test -f "$state_dir"/signoff && {
- signoff="$(cat "$state_dir"/signoff)"
- force_rebase=t
- }
- test -f "$state_dir"/reschedule-failed-exec &&
- reschedule_failed_exec=t
-}
-
-finish_rebase () {
- rm -f "$(git rev-parse --git-path REBASE_HEAD)"
- apply_autostash &&
- { git gc --auto || true; } &&
- rm -rf "$state_dir"
-}
-
-run_interactive () {
- GIT_CHERRY_PICK_HELP="$resolvemsg"
- export GIT_CHERRY_PICK_HELP
-
- test -n "$keep_empty" && keep_empty="--keep-empty"
- test -n "$rebase_merges" && rebase_merges="--rebase-merges"
- test -n "$rebase_cousins" && rebase_cousins="--rebase-cousins"
- test -n "$autosquash" && autosquash="--autosquash"
- test -n "$verbose" && verbose="--verbose"
- test -n "$force_rebase" && force_rebase="--no-ff"
- test -n "$restrict_revision" && \
- restrict_revision="--restrict-revision=^$restrict_revision"
- test -n "$upstream" && upstream="--upstream=$upstream"
- test -n "$onto" && onto="--onto=$onto"
- test -n "$squash_onto" && squash_onto="--squash-onto=$squash_onto"
- test -n "$onto_name" && onto_name="--onto-name=$onto_name"
- test -n "$head_name" && head_name="--head-name=$head_name"
- test -n "$strategy" && strategy="--strategy=$strategy"
- test -n "$strategy_opts" && strategy_opts="--strategy-opts=$strategy_opts"
- test -n "$switch_to" && switch_to="--switch-to=$switch_to"
- test -n "$cmd" && cmd="--cmd=$cmd"
- test -n "$action" && action="--$action"
-
- exec git rebase--interactive "$action" "$keep_empty" "$rebase_merges" "$rebase_cousins" \
- "$upstream" "$onto" "$squash_onto" "$restrict_revision" \
- "$allow_empty_message" "$autosquash" "$verbose" \
- "$force_rebase" "$onto_name" "$head_name" "$strategy" \
- "$strategy_opts" "$cmd" "$switch_to" \
- "$allow_rerere_autoupdate" "$gpg_sign_opt" "$signoff" \
- "$reschedule_failed_exec"
-}
-
-run_specific_rebase () {
- if [ "$interactive_rebase" = implied ]; then
- GIT_SEQUENCE_EDITOR=:
- export GIT_SEQUENCE_EDITOR
- autosquash=
- fi
-
- if test -n "$interactive_rebase" -a -z "$preserve_merges"
- then
- run_interactive
- else
- . git-rebase--$type
-
- if test -z "$preserve_merges"
- then
- git_rebase__$type
- else
- git_rebase__preserve_merges
- fi
- fi
-
- ret=$?
- if test $ret -eq 0
- then
- finish_rebase
- elif test $ret -eq 2 # special exit status for rebase -p
- then
- apply_autostash &&
- rm -rf "$state_dir" &&
- die "Nothing to do"
- fi
- exit $ret
-}
-
-run_pre_rebase_hook () {
- if test -z "$ok_to_skip_pre_rebase" &&
- test -x "$(git rev-parse --git-path hooks/pre-rebase)"
- then
- "$(git rev-parse --git-path hooks/pre-rebase)" ${1+"$@"} ||
- die "$(gettext "The pre-rebase hook refused to rebase.")"
- fi
-}
-
-test -f "$apply_dir"/applying &&
- die "$(gettext "It looks like 'git am' is in progress. Cannot rebase.")"
-
-if test -d "$apply_dir"
-then
- type=am
- state_dir="$apply_dir"
-elif test -d "$merge_dir"
-then
- type=interactive
- if test -d "$merge_dir"/rewritten
- then
- type=preserve-merges
- interactive_rebase=explicit
- preserve_merges=t
- elif test -f "$merge_dir"/interactive
- then
- interactive_rebase=explicit
- fi
- state_dir="$merge_dir"
-fi
-test -n "$type" && in_progress=t
-
-total_argc=$#
-while test $# != 0
-do
- case "$1" in
- --no-verify)
- ok_to_skip_pre_rebase=yes
- ;;
- --verify)
- ok_to_skip_pre_rebase=
- ;;
- --continue|--skip|--abort|--quit|--edit-todo|--show-current-patch)
- test $total_argc -eq 2 || usage
- action=${1##--}
- ;;
- --onto=*)
- onto="${1#--onto=}"
- ;;
- --exec=*)
- cmd="${cmd}exec ${1#--exec=}${LF}"
- test -z "$interactive_rebase" && interactive_rebase=implied
- ;;
- --interactive)
- interactive_rebase=explicit
- ;;
- --keep-empty)
- keep_empty=yes
- ;;
- --allow-empty-message)
- allow_empty_message=--allow-empty-message
- ;;
- --no-keep-empty)
- keep_empty=
- ;;
- --rebase-merges)
- rebase_merges=t
- test -z "$interactive_rebase" && interactive_rebase=implied
- ;;
- --rebase-merges=*)
- rebase_merges=t
- case "${1#*=}" in
- rebase-cousins) rebase_cousins=t;;
- no-rebase-cousins) rebase_cousins=;;
- *) die "Unknown mode: $1";;
- esac
- test -z "$interactive_rebase" && interactive_rebase=implied
- ;;
- --preserve-merges)
- preserve_merges=t
- test -z "$interactive_rebase" && interactive_rebase=implied
- ;;
- --autosquash)
- autosquash=t
- ;;
- --no-autosquash)
- autosquash=
- ;;
- --fork-point)
- fork_point=t
- ;;
- --no-fork-point)
- fork_point=
- ;;
- --merge)
- do_merge=t
- ;;
- --strategy-option=*)
- strategy_opts="$strategy_opts $(git rev-parse --sq-quote "--${1#--strategy-option=}" | sed -e s/^.//)"
- do_merge=t
- test -z "$strategy" && strategy=recursive
- ;;
- --strategy=*)
- strategy="${1#--strategy=}"
- do_merge=t
- ;;
- --no-stat)
- diffstat=
- ;;
- --stat)
- diffstat=t
- ;;
- --autostash)
- autostash=true
- ;;
- --no-autostash)
- autostash=false
- ;;
- --verbose)
- verbose=t
- diffstat=t
- GIT_QUIET=
- ;;
- --quiet)
- GIT_QUIET=t
- git_am_opt="$git_am_opt -q"
- verbose=
- diffstat=
- ;;
- --whitespace=*)
- git_am_opt="$git_am_opt --whitespace=${1#--whitespace=}"
- case "${1#--whitespace=}" in
- fix|strip)
- force_rebase=t
- ;;
- warn|nowarn|error|error-all)
- ;; # okay, known whitespace option
- *)
- die "fatal: Invalid whitespace option: '${1#*=}'"
- ;;
- esac
- ;;
- --ignore-whitespace)
- git_am_opt="$git_am_opt $1"
- ;;
- --signoff)
- signoff=--signoff
- ;;
- --no-signoff)
- signoff=
- ;;
- --committer-date-is-author-date|--ignore-date)
- git_am_opt="$git_am_opt $1"
- force_rebase=t
- ;;
- -C*[!0-9]*)
- die "fatal: switch \`C' expects a numerical value"
- ;;
- -C*)
- git_am_opt="$git_am_opt $1"
- ;;
- --root)
- rebase_root=t
- ;;
- --force-rebase|--no-ff)
- force_rebase=t
- ;;
- --rerere-autoupdate|--no-rerere-autoupdate)
- allow_rerere_autoupdate="$1"
- ;;
- --gpg-sign)
- gpg_sign_opt=-S
- ;;
- --gpg-sign=*)
- gpg_sign_opt="-S${1#--gpg-sign=}"
- ;;
- --reschedule-failed-exec)
- reschedule_failed_exec=--reschedule-failed-exec
- ;;
- --no-reschedule-failed-exec)
- reschedule_failed_exec=
- ;;
- --)
- shift
- break
- ;;
- *)
- usage
- ;;
- esac
- shift
-done
-test $# -gt 2 && usage
-
-if test -n "$action"
-then
- test -z "$in_progress" && die "$(gettext "No rebase in progress?")"
- # Only interactive rebase uses detailed reflog messages
- if test -n "$interactive_rebase" && test "$GIT_REFLOG_ACTION" = rebase
- then
- GIT_REFLOG_ACTION="rebase -i ($action)"
- export GIT_REFLOG_ACTION
- fi
-fi
-
-if test "$action" = "edit-todo" && test -z "$interactive_rebase"
-then
- die "$(gettext "The --edit-todo action can only be used during interactive rebase.")"
-fi
-
-case "$action" in
-continue)
- # Sanity check
- git rev-parse --verify HEAD >/dev/null ||
- die "$(gettext "Cannot read HEAD")"
- git update-index --ignore-submodules --refresh &&
- git diff-files --quiet --ignore-submodules || {
- echo "$(gettext "You must edit all merge conflicts and then
-mark them as resolved using git add")"
- exit 1
- }
- read_basic_state
- run_specific_rebase
- ;;
-skip)
- output git reset --hard HEAD || exit $?
- read_basic_state
- run_specific_rebase
- ;;
-abort)
- git rerere clear
- read_basic_state
- case "$head_name" in
- refs/*)
- git symbolic-ref -m "rebase: aborting" HEAD $head_name ||
- die "$(eval_gettext "Could not move back to \$head_name")"
- ;;
- esac
- output git reset --hard $orig_head
- finish_rebase
- exit
- ;;
-quit)
- exec rm -rf "$state_dir"
- ;;
-edit-todo)
- run_specific_rebase
- ;;
-show-current-patch)
- run_specific_rebase
- die "BUG: run_specific_rebase is not supposed to return here"
- ;;
-esac
-
-# Make sure no rebase is in progress
-if test -n "$in_progress"
-then
- state_dir_base=${state_dir##*/}
- cmd_live_rebase="git rebase (--continue | --abort | --skip)"
- cmd_clear_stale_rebase="rm -fr \"$state_dir\""
- die "
-$(eval_gettext 'It seems that there is already a $state_dir_base directory, and
-I wonder if you are in the middle of another rebase. If that is the
-case, please try
- $cmd_live_rebase
-If that is not the case, please
- $cmd_clear_stale_rebase
-and run me again. I am stopping in case you still have something
-valuable there.')"
-fi
-
-if test -n "$rebase_root" && test -z "$onto"
-then
- test -z "$interactive_rebase" && interactive_rebase=implied
-fi
-
-if test -n "$keep_empty"
-then
- test -z "$interactive_rebase" && interactive_rebase=implied
-fi
-
-actually_interactive=
-if test -n "$interactive_rebase"
-then
- if test -z "$preserve_merges"
- then
- type=interactive
- else
- type=preserve-merges
- fi
- actually_interactive=t
- state_dir="$merge_dir"
-elif test -n "$do_merge"
-then
- interactive_rebase=implied
- type=interactive
- state_dir="$merge_dir"
-else
- type=am
- state_dir="$apply_dir"
-fi
-
-if test -t 2 && test -z "$GIT_QUIET"
-then
- git_format_patch_opt="$git_format_patch_opt --progress"
-fi
-
-incompatible_opts=$(echo " $git_am_opt " | \
- sed -e 's/ -q / /g' -e 's/^ \(.*\) $/\1/')
-if test -n "$incompatible_opts"
-then
- if test -n "$actually_interactive" || test "$do_merge"
- then
- die "$(gettext "fatal: cannot combine am options with either interactive or merge options")"
- fi
-fi
-
-if test -n "$signoff"
-then
- test -n "$preserve_merges" &&
- die "$(gettext "fatal: cannot combine '--signoff' with '--preserve-merges'")"
- git_am_opt="$git_am_opt $signoff"
- force_rebase=t
-fi
-
-if test -n "$preserve_merges"
-then
- # Note: incompatibility with --signoff handled in signoff block above
- # Note: incompatibility with --interactive is just a strong warning;
- # git-rebase.txt caveats with "unless you know what you are doing"
- test -n "$rebase_merges" &&
- die "$(gettext "fatal: cannot combine '--preserve-merges' with '--rebase-merges'")"
-
- test -n "$reschedule_failed_exec" &&
- die "$(gettext "error: cannot combine '--preserve-merges' with '--reschedule-failed-exec'")"
-fi
-
-if test -n "$rebase_merges"
-then
- test -n "$strategy_opts" &&
- die "$(gettext "fatal: cannot combine '--rebase-merges' with '--strategy-option'")"
- test -n "$strategy" &&
- die "$(gettext "fatal: cannot combine '--rebase-merges' with '--strategy'")"
-fi
-
-if test -z "$rebase_root"
-then
- case "$#" in
- 0)
- if ! upstream_name=$(git rev-parse --symbolic-full-name \
- --verify -q @{upstream} 2>/dev/null)
- then
- . git-parse-remote
- error_on_missing_default_upstream "rebase" "rebase" \
- "against" "git rebase $(gettext '<branch>')"
- fi
-
- test "$fork_point" = auto && fork_point=t
- ;;
- *) upstream_name="$1"
- if test "$upstream_name" = "-"
- then
- upstream_name="@{-1}"
- fi
- shift
- ;;
- esac
- upstream=$(peel_committish "${upstream_name}") ||
- die "$(eval_gettext "invalid upstream '\$upstream_name'")"
- upstream_arg="$upstream_name"
-else
- if test -z "$onto"
- then
- empty_tree=$(git hash-object -t tree /dev/null)
- onto=$(git commit-tree $empty_tree </dev/null)
- squash_onto="$onto"
- fi
- unset upstream_name
- unset upstream
- test $# -gt 1 && usage
- upstream_arg=--root
-fi
-
-# Make sure the branch to rebase onto is valid.
-onto_name=${onto-"$upstream_name"}
-case "$onto_name" in
-*...*)
- if left=${onto_name%...*} right=${onto_name#*...} &&
- onto=$(git merge-base --all ${left:-HEAD} ${right:-HEAD})
- then
- case "$onto" in
- ?*"$LF"?*)
- die "$(eval_gettext "\$onto_name: there are more than one merge bases")"
- ;;
- '')
- die "$(eval_gettext "\$onto_name: there is no merge base")"
- ;;
- esac
- else
- die "$(eval_gettext "\$onto_name: there is no merge base")"
- fi
- ;;
-*)
- onto=$(peel_committish "$onto_name") ||
- die "$(eval_gettext "Does not point to a valid commit: \$onto_name")"
- ;;
-esac
-
-# 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"
-switch_to=
-case "$#" in
-1)
- # Is it "rebase other $branchname" or "rebase other $commit"?
- branch_name="$1"
- switch_to="$1"
-
- # Is it a local branch?
- if git show-ref --verify --quiet -- "refs/heads/$branch_name" &&
- orig_head=$(git rev-parse -q --verify "refs/heads/$branch_name")
- then
- head_name="refs/heads/$branch_name"
- # If not is it a valid ref (branch or commit)?
- elif orig_head=$(git rev-parse -q --verify "$branch_name")
- then
- head_name="detached HEAD"
-
- else
- die "$(eval_gettext "fatal: no such branch/commit '\$branch_name'")"
- fi
- ;;
-0)
- # Do not need to switch branches, we are already on it.
- if branch_name=$(git symbolic-ref -q HEAD)
- then
- head_name=$branch_name
- branch_name=$(expr "z$branch_name" : 'zrefs/heads/\(.*\)')
- else
- head_name="detached HEAD"
- branch_name=HEAD
- fi
- orig_head=$(git rev-parse --verify HEAD) || exit
- ;;
-*)
- die "BUG: unexpected number of arguments left to parse"
- ;;
-esac
-
-if test "$fork_point" = t
-then
- new_upstream=$(git merge-base --fork-point "$upstream_name" \
- "${switch_to:-HEAD}")
- if test -n "$new_upstream"
- then
- restrict_revision=$new_upstream
- fi
-fi
-
-if test "$autostash" = true && ! (require_clean_work_tree) 2>/dev/null
-then
- stash_sha1=$(git stash create "autostash") ||
- die "$(gettext 'Cannot autostash')"
-
- mkdir -p "$state_dir" &&
- echo $stash_sha1 >"$state_dir/autostash" &&
- stash_abbrev=$(git rev-parse --short $stash_sha1) &&
- echo "$(eval_gettext 'Created autostash: $stash_abbrev')" &&
- git reset --hard
-fi
-
-require_clean_work_tree "rebase" "$(gettext "Please commit or stash them.")"
-
-# Now we are rebasing commits $upstream..$orig_head (or with --root,
-# everything leading up to $orig_head) on top of $onto
-
-# Check if we are already based on $onto with linear history,
-# but this should be done only when upstream and onto are the same
-# and if this is not an interactive rebase.
-mb=$(git merge-base "$onto" "$orig_head")
-if test -z "$actually_interactive" && test "$upstream" = "$onto" &&
- test "$mb" = "$onto" && test -z "$restrict_revision" &&
- # linear history?
- ! (git rev-list --parents "$onto".."$orig_head" | sane_grep " .* ") > /dev/null
-then
- if test -z "$force_rebase"
- then
- # Lazily switch to the target branch if needed...
- test -z "$switch_to" ||
- GIT_REFLOG_ACTION="$GIT_REFLOG_ACTION: checkout $switch_to" \
- git checkout -q "$switch_to" --
- if test "$branch_name" = "HEAD" &&
- ! git symbolic-ref -q HEAD
- then
- say "$(eval_gettext "HEAD is up to date.")"
- else
- say "$(eval_gettext "Current branch \$branch_name is up to date.")"
- fi
- finish_rebase
- exit 0
- else
- if test "$branch_name" = "HEAD" &&
- ! git symbolic-ref -q HEAD
- then
- say "$(eval_gettext "HEAD is up to date, rebase forced.")"
- else
- say "$(eval_gettext "Current branch \$branch_name is up to date, rebase forced.")"
- fi
- fi
-fi
-
-# If a hook exists, give it a chance to interrupt
-run_pre_rebase_hook "$upstream_arg" "$@"
-
-if test -n "$diffstat"
-then
- if test -n "$verbose"
- then
- if test -z "$mb"
- then
- echo "$(eval_gettext "Changes to \$onto:")"
- else
- echo "$(eval_gettext "Changes from \$mb to \$onto:")"
- fi
- fi
- mb_tree="${mb:-$(git hash-object -t tree /dev/null)}"
- # We want color (if set), but no pager
- GIT_PAGER='' git diff --stat --summary "$mb_tree" "$onto"
-fi
-
-if test -z "$actually_interactive" && test "$mb" = "$orig_head"
-then
- say "$(eval_gettext "Fast-forwarded \$branch_name to \$onto_name.")"
- GIT_REFLOG_ACTION="$GIT_REFLOG_ACTION: checkout $onto_name" \
- git checkout -q "$onto^0" || die "could not detach HEAD"
- # If the $onto is a proper descendant of the tip of the branch, then
- # we just fast-forwarded.
- git update-ref ORIG_HEAD $orig_head
- move_to_original_branch
- finish_rebase
- exit 0
-fi
-
-test -n "$interactive_rebase" && run_specific_rebase
-
-# Detach HEAD and reset the tree
-say "$(gettext "First, rewinding head to replay your work on top of it...")"
-
-GIT_REFLOG_ACTION="$GIT_REFLOG_ACTION: checkout $onto_name" \
- git checkout -q "$onto^0" || die "could not detach HEAD"
-git update-ref ORIG_HEAD $orig_head
-
-if test -n "$rebase_root"
-then
- revisions="$onto..$orig_head"
-else
- revisions="${restrict_revision-$upstream}..$orig_head"
-fi
-
-run_specific_rebase
diff --git a/t/README b/t/README
index 7a3d582267c..385262357b5 100644
--- a/t/README
+++ b/t/README
@@ -379,10 +379,6 @@ the --no-sparse command-line argument.
GIT_TEST_PRELOAD_INDEX=<boolean> exercises the preload-index code path
by overriding the minimum number of cache entries required per thread.
-GIT_TEST_REBASE_USE_BUILTIN=<boolean>, when false, disables the
-builtin version of git-rebase. See 'rebase.useBuiltin' in
-git-config(1).
-
GIT_TEST_INDEX_THREADS=<n> enables exercising the multi-threaded loading
of the index for the whole test suite by bypassing the default number of
cache entries and thread minimums. Setting this to 1 will make the
diff --git a/t/t3400-rebase.sh b/t/t3400-rebase.sh
index 3e73f7584ce..a809de93047 100755
--- a/t/t3400-rebase.sh
+++ b/t/t3400-rebase.sh
@@ -311,4 +311,20 @@ test_expect_success 'rebase--merge.sh and --show-current-patch' '
)
'
+test_expect_success 'rebase -c rebase.useBuiltin=false warning' '
+ expected="rebase.useBuiltin support has been removed" &&
+
+ # Only warn when the legacy rebase is requested...
+ test_must_fail git -c rebase.useBuiltin=false rebase 2>err &&
+ test_i18ngrep "$expected" err &&
+ test_must_fail env GIT_TEST_REBASE_USE_BUILTIN=false git rebase 2>err &&
+ test_i18ngrep "$expected" err &&
+
+ # ...not when we would have used the built-in anyway
+ test_must_fail git -c rebase.useBuiltin=true rebase 2>err &&
+ test_must_be_empty err &&
+ test_must_fail env GIT_TEST_REBASE_USE_BUILTIN=true git rebase 2>err &&
+ test_must_be_empty err
+'
+
test_done
diff --git a/t/t3404-rebase-interactive.sh b/t/t3404-rebase-interactive.sh
index b60b11f9f2f..1723e1a8585 100755
--- a/t/t3404-rebase-interactive.sh
+++ b/t/t3404-rebase-interactive.sh
@@ -149,12 +149,10 @@ test_expect_success 'rebase -i with the exec command checks tree cleanness' '
test_expect_success 'rebase -x with empty command fails' '
test_when_finished "git rebase --abort ||:" &&
- test_must_fail env GIT_TEST_REBASE_USE_BUILTIN=true \
- git rebase -x "" @ 2>actual &&
+ test_must_fail env git rebase -x "" @ 2>actual &&
test_write_lines "error: empty exec command" >expected &&
test_i18ncmp expected actual &&
- test_must_fail env GIT_TEST_REBASE_USE_BUILTIN=true \
- git rebase -x " " @ 2>actual &&
+ test_must_fail env git rebase -x " " @ 2>actual &&
test_i18ncmp expected actual
'
@@ -162,8 +160,7 @@ LF='
'
test_expect_success 'rebase -x with newline in command fails' '
test_when_finished "git rebase --abort ||:" &&
- test_must_fail env GIT_TEST_REBASE_USE_BUILTIN=true \
- git rebase -x "a${LF}b" @ 2>actual &&
+ test_must_fail env git rebase -x "a${LF}b" @ 2>actual &&
test_write_lines "error: exec commands cannot contain newlines" \
>expected &&
test_i18ncmp expected actual
--
2.21.0.360.g471c308f928
^ permalink raw reply related [relevance 2%]
* Re: [PATCH v3] rebase: remove the rebase.useBuiltin setting
2019-03-15 13:45 1% ` [PATCH v3] " Ævar Arnfjörð Bjarmason
2019-03-15 15:44 0% ` Johannes Schindelin
@ 2019-03-18 10:19 0% ` Phillip Wood
2019-03-18 11:01 2% ` [PATCH v4] " Ævar Arnfjörð Bjarmason
1 sibling, 1 reply; 71+ results
From: Phillip Wood @ 2019-03-18 10:19 UTC (permalink / raw)
To: Ævar Arnfjörð Bjarmason, git
Cc: Junio C Hamano, Phillip Wood, Johannes Schindelin
Hi Ævar
Thanks for doing this, it's great to see it from a maintenance
perspective as well as it meaning the builtin rebase is considered
stable. A couple small nit picks below
On 15/03/2019 13:45, Ævar Arnfjörð Bjarmason wrote:
> Remove the rebase.useBuiltin setting, which was added as an escape
> hatch to disable the builtin version of rebase first released with Git
> 2.20.
>
> See [1] for the initial implementation of rebase.useBuiltin, and [2]
> and [3] for the documentation and corresponding
> GIT_TEST_REBASE_USE_BUILTIN option.
>
> Carrying the legacy version is a maintenance burden as seen in
> 7e097e27d3 ("legacy-rebase: backport -C<n> and --whitespace=<option>
> checks", 2018-11-20) and 9aea5e9286 ("rebase: fix regression in
> rebase.useBuiltin=false test mode", 2019-02-13). Since the built-in
> version has been shown to be stable enough let's remove the legacy
> version.
>
> As noted in [3] having use_builtin_rebase() shell out to get its
> config doesn't make any sense anymore, that was done for the purposes
> of spawning the legacy rebase without having modified any global
> state. Let's instead handle this case in rebase_config().
>
> There's still a bunch of references to git-legacy-rebase in po/*.po,
> but those will be dealt with in time by the i18n effort.
>
> Even though this configuration variable only existed for one release
If it was added in 2.20 then that's two releases isn't it?
> let's not entirely delete the entry from the docs, but note its
> absence. Individual versions of git tend to be around for a while due
> to distro packaging timelines, so e.g. if we're "lucky" a given
> version like 2.21 might be installed on say OSX for half a decade.
>
> That'll mean some people probably setting this in config, and then
> when they later wonder if it's needed they can Google search the
> config option name or check it in git-config. It also allows us to
> refer to the docs from the warning for details.
>
> 1. 55071ea248 ("rebase: start implementing it as a builtin",
> 2018-08-07)
> 2. d8d0a546f0 ("rebase doc: document rebase.useBuiltin", 2018-11-14)
> 3. 62c23938fa ("tests: add a special setup where rebase.useBuiltin is
> off", 2018-11-14)
> 3. https://public-inbox.org/git/nycvar.QRO.7.76.6.1903141544110.41@tvgsbejvaqbjf.bet/
> ---
>
> Addresses Johannes's comments on v2, and improves the tests I'm adding
> to cover both the env var & config variable.
>
> .gitignore | 1 -
> Documentation/config/rebase.txt | 17 +-
> Makefile | 1 -
> builtin/rebase.c | 50 +--
> git-legacy-rebase.sh | 770 --------------------------------
> t/README | 4 -
> t/t3400-rebase.sh | 16 +
> t/t3404-rebase-interactive.sh | 9 +-
> 8 files changed, 35 insertions(+), 833 deletions(-)
> delete mode 100755 git-legacy-rebase.sh
>
> diff --git a/.gitignore b/.gitignore
> index 7374587f9d..5cb84f1d1a 100644
> --- a/.gitignore
> +++ b/.gitignore
> @@ -82,7 +82,6 @@
> /git-init-db
> /git-interpret-trailers
> /git-instaweb
> -/git-legacy-rebase
> /git-log
> /git-ls-files
> /git-ls-remote
> diff --git a/Documentation/config/rebase.txt b/Documentation/config/rebase.txt
> index 331d250e04..c747452983 100644
> --- a/Documentation/config/rebase.txt
> +++ b/Documentation/config/rebase.txt
> @@ -1,16 +1,9 @@
> rebase.useBuiltin::
> - Set to `false` to use the legacy shellscript implementation of
> - linkgit:git-rebase[1]. Is `true` by default, which means use
> - the built-in rewrite of it in C.
> -+
> -The C rewrite is first included with Git version 2.20. This option
> -serves an an escape hatch to re-enable the legacy version in case any
> -bugs are found in the rewrite. This option and the shellscript version
> -of linkgit:git-rebase[1] will be removed in some future release.
> -+
> -If you find some reason to set this option to `false` other than
> -one-off testing you should report the behavior difference as a bug in
> -git.
> + Unused configuration variable. Used between Git version 2.20
> + and 2.21
If it is present in 2.21 then this is perhaps ambiguous, Iread it as <
2.21 rather than <=2.21 (I just asked my wife what she thought it meant
to make sure it wasn't just me and she says the same) so maybe
Used in Git versions 2.20 and 2.21
would be clearer
Best Wishes
Phillip
as an escape hatch to enable the legacy shellscript
> + implementation of rebase. Now the built-in rewrite of it in C
> + is always used. Setting this will emit a warning, to alert any
> + remaining users that setting this now does nothing.
>
> rebase.stat::
> Whether to show a diffstat of what changed upstream since the last
> diff --git a/Makefile b/Makefile
> index 537493822b..9f1159cffc 100644
> --- a/Makefile
> +++ b/Makefile
> @@ -632,7 +632,6 @@ SCRIPT_SH += git-merge-one-file.sh
> SCRIPT_SH += git-merge-resolve.sh
> SCRIPT_SH += git-mergetool.sh
> SCRIPT_SH += git-quiltimport.sh
> -SCRIPT_SH += git-legacy-rebase.sh
> SCRIPT_SH += git-remote-testgit.sh
> SCRIPT_SH += git-request-pull.sh
> SCRIPT_SH += git-stash.sh
> diff --git a/builtin/rebase.c b/builtin/rebase.c
> index 52114cbf0d..bc3dc629c1 100644
> --- a/builtin/rebase.c
> +++ b/builtin/rebase.c
> @@ -46,29 +46,6 @@ enum rebase_type {
> REBASE_PRESERVE_MERGES
> };
>
> -static int use_builtin_rebase(void)
> -{
> - struct child_process cp = CHILD_PROCESS_INIT;
> - struct strbuf out = STRBUF_INIT;
> - int ret, env = git_env_bool("GIT_TEST_REBASE_USE_BUILTIN", -1);
> -
> - if (env != -1)
> - return env;
> -
> - argv_array_pushl(&cp.args,
> - "config", "--bool", "rebase.usebuiltin", NULL);
> - cp.git_cmd = 1;
> - if (capture_command(&cp, &out, 6)) {
> - strbuf_release(&out);
> - return 1;
> - }
> -
> - strbuf_trim(&out);
> - ret = !strcmp("true", out.buf);
> - strbuf_release(&out);
> - return ret;
> -}
> -
> struct rebase_options {
> enum rebase_type type;
> const char *state_dir;
> @@ -106,6 +83,7 @@ struct rebase_options {
> char *strategy, *strategy_opts;
> struct strbuf git_format_patch_opt;
> int reschedule_failed_exec;
> + int use_legacy_rebase;
> };
>
> static int is_interactive(struct rebase_options *opts)
> @@ -869,6 +847,11 @@ static int rebase_config(const char *var, const char *value, void *data)
> return 0;
> }
>
> + if (!strcmp(var, "rebase.usebuiltin")) {
> + opts->use_legacy_rebase = !git_config_bool(var, value);
> + return 0;
> + }
> +
> return git_default_config(var, value, data);
> }
>
> @@ -1143,22 +1126,6 @@ int cmd_rebase(int argc, const char **argv, const char *prefix)
> };
> int i;
>
> - /*
> - * 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 && !strcmp(argv[1], "-h"))
> usage_with_options(builtin_rebase_usage,
> builtin_rebase_options);
> @@ -1169,6 +1136,11 @@ int cmd_rebase(int argc, const char **argv, const char *prefix)
>
> git_config(rebase_config, &options);
>
> + if (options.use_legacy_rebase ||
> + !git_env_bool("GIT_TEST_REBASE_USE_BUILTIN", -1))
> + warning(_("the rebase.useBuiltin support has been removed!\n"
> + "See its entry in 'git help config' for details."));
> +
> strbuf_reset(&buf);
> strbuf_addf(&buf, "%s/applying", apply_dir());
> if(file_exists(buf.buf))
> diff --git a/git-legacy-rebase.sh b/git-legacy-rebase.sh
> deleted file mode 100755
> index 5c2c4e5276..0000000000
> --- a/git-legacy-rebase.sh
> +++ /dev/null
> @@ -1,770 +0,0 @@
> -#!/bin/sh
> -#
> -# Copyright (c) 2005 Junio C Hamano.
> -#
> -
> -SUBDIRECTORY_OK=Yes
> -OPTIONS_KEEPDASHDASH=
> -OPTIONS_STUCKLONG=t
> -OPTIONS_SPEC="\
> -git rebase [-i] [options] [--exec <cmd>] [--onto <newbase>] [<upstream>] [<branch>]
> -git rebase [-i] [options] [--exec <cmd>] [--onto <newbase>] --root [<branch>]
> -git rebase --continue | --abort | --skip | --edit-todo
> ---
> - Available options are
> -v,verbose! display a diffstat of what changed upstream
> -q,quiet! be quiet. implies --no-stat
> -autostash automatically stash/stash pop before and after
> -fork-point use 'merge-base --fork-point' to refine upstream
> -onto=! rebase onto given branch instead of upstream
> -r,rebase-merges? try to rebase merges instead of skipping them
> -p,preserve-merges! try to recreate merges instead of ignoring them
> -s,strategy=! use the given merge strategy
> -X,strategy-option=! pass the argument through to the merge strategy
> -no-ff! cherry-pick all commits, even if unchanged
> -f,force-rebase! cherry-pick all commits, even if unchanged
> -m,merge! use merging strategies to rebase
> -i,interactive! let the user edit the list of commits to rebase
> -x,exec=! add exec lines after each commit of the editable list
> -k,keep-empty preserve empty commits during rebase
> -allow-empty-message allow rebasing commits with empty messages
> -stat! display a diffstat of what changed upstream
> -n,no-stat! do not show diffstat of what changed upstream
> -verify allow pre-rebase hook to run
> -rerere-autoupdate allow rerere to update index with resolved conflicts
> -root! rebase all reachable commits up to the root(s)
> -autosquash move commits that begin with squash!/fixup! under -i
> -signoff add a Signed-off-by: line to each commit
> -committer-date-is-author-date! passed to 'git am'
> -ignore-date! passed to 'git am'
> -whitespace=! passed to 'git apply'
> -ignore-whitespace! passed to 'git apply'
> -C=! passed to 'git apply'
> -S,gpg-sign? GPG-sign commits
> - Actions:
> -continue! continue
> -abort! abort and check out the original branch
> -skip! skip current patch and continue
> -edit-todo! edit the todo list during an interactive rebase
> -quit! abort but keep HEAD where it is
> -show-current-patch! show the patch file being applied or merged
> -reschedule-failed-exec automatically reschedule failed exec commands
> -"
> -. git-sh-setup
> -set_reflog_action rebase
> -require_work_tree_exists
> -cd_to_toplevel
> -
> -LF='
> -'
> -ok_to_skip_pre_rebase=
> -
> -squash_onto=
> -unset onto
> -unset restrict_revision
> -cmd=
> -strategy=
> -strategy_opts=
> -do_merge=
> -merge_dir="$GIT_DIR"/rebase-merge
> -apply_dir="$GIT_DIR"/rebase-apply
> -verbose=
> -diffstat=
> -test "$(git config --bool rebase.stat)" = true && diffstat=t
> -autostash="$(git config --bool rebase.autostash || echo false)"
> -fork_point=auto
> -git_am_opt=
> -git_format_patch_opt=
> -rebase_root=
> -force_rebase=
> -allow_rerere_autoupdate=
> -# Non-empty if a rebase was in progress when 'git rebase' was invoked
> -in_progress=
> -# One of {am, merge, interactive}
> -type=
> -# One of {"$GIT_DIR"/rebase-apply, "$GIT_DIR"/rebase-merge}
> -state_dir=
> -# One of {'', continue, skip, abort}, as parsed from command line
> -action=
> -rebase_merges=
> -rebase_cousins=
> -preserve_merges=
> -autosquash=
> -keep_empty=
> -allow_empty_message=--allow-empty-message
> -signoff=
> -reschedule_failed_exec=
> -test "$(git config --bool rebase.autosquash)" = "true" && autosquash=t
> -case "$(git config --bool commit.gpgsign)" in
> -true) gpg_sign_opt=-S ;;
> -*) gpg_sign_opt= ;;
> -esac
> -test "$(git config --bool rebase.reschedulefailedexec)" = "true" &&
> -reschedule_failed_exec=--reschedule-failed-exec
> -. git-rebase--common
> -
> -read_basic_state () {
> - test -f "$state_dir/head-name" &&
> - test -f "$state_dir/onto" &&
> - head_name=$(cat "$state_dir"/head-name) &&
> - onto=$(cat "$state_dir"/onto) &&
> - # We always write to orig-head, but interactive rebase used to write to
> - # head. Fall back to reading from head to cover for the case that the
> - # user upgraded git with an ongoing interactive rebase.
> - if test -f "$state_dir"/orig-head
> - then
> - orig_head=$(cat "$state_dir"/orig-head)
> - else
> - orig_head=$(cat "$state_dir"/head)
> - fi &&
> - test -f "$state_dir"/quiet && GIT_QUIET=t
> - test -f "$state_dir"/verbose && verbose=t
> - test -f "$state_dir"/strategy && strategy="$(cat "$state_dir"/strategy)"
> - test -f "$state_dir"/strategy_opts &&
> - strategy_opts="$(cat "$state_dir"/strategy_opts)"
> - test -f "$state_dir"/allow_rerere_autoupdate &&
> - allow_rerere_autoupdate="$(cat "$state_dir"/allow_rerere_autoupdate)"
> - test -f "$state_dir"/gpg_sign_opt &&
> - gpg_sign_opt="$(cat "$state_dir"/gpg_sign_opt)"
> - test -f "$state_dir"/signoff && {
> - signoff="$(cat "$state_dir"/signoff)"
> - force_rebase=t
> - }
> - test -f "$state_dir"/reschedule-failed-exec &&
> - reschedule_failed_exec=t
> -}
> -
> -finish_rebase () {
> - rm -f "$(git rev-parse --git-path REBASE_HEAD)"
> - apply_autostash &&
> - { git gc --auto || true; } &&
> - rm -rf "$state_dir"
> -}
> -
> -run_interactive () {
> - GIT_CHERRY_PICK_HELP="$resolvemsg"
> - export GIT_CHERRY_PICK_HELP
> -
> - test -n "$keep_empty" && keep_empty="--keep-empty"
> - test -n "$rebase_merges" && rebase_merges="--rebase-merges"
> - test -n "$rebase_cousins" && rebase_cousins="--rebase-cousins"
> - test -n "$autosquash" && autosquash="--autosquash"
> - test -n "$verbose" && verbose="--verbose"
> - test -n "$force_rebase" && force_rebase="--no-ff"
> - test -n "$restrict_revision" && \
> - restrict_revision="--restrict-revision=^$restrict_revision"
> - test -n "$upstream" && upstream="--upstream=$upstream"
> - test -n "$onto" && onto="--onto=$onto"
> - test -n "$squash_onto" && squash_onto="--squash-onto=$squash_onto"
> - test -n "$onto_name" && onto_name="--onto-name=$onto_name"
> - test -n "$head_name" && head_name="--head-name=$head_name"
> - test -n "$strategy" && strategy="--strategy=$strategy"
> - test -n "$strategy_opts" && strategy_opts="--strategy-opts=$strategy_opts"
> - test -n "$switch_to" && switch_to="--switch-to=$switch_to"
> - test -n "$cmd" && cmd="--cmd=$cmd"
> - test -n "$action" && action="--$action"
> -
> - exec git rebase--interactive "$action" "$keep_empty" "$rebase_merges" "$rebase_cousins" \
> - "$upstream" "$onto" "$squash_onto" "$restrict_revision" \
> - "$allow_empty_message" "$autosquash" "$verbose" \
> - "$force_rebase" "$onto_name" "$head_name" "$strategy" \
> - "$strategy_opts" "$cmd" "$switch_to" \
> - "$allow_rerere_autoupdate" "$gpg_sign_opt" "$signoff" \
> - "$reschedule_failed_exec"
> -}
> -
> -run_specific_rebase () {
> - if [ "$interactive_rebase" = implied ]; then
> - GIT_SEQUENCE_EDITOR=:
> - export GIT_SEQUENCE_EDITOR
> - autosquash=
> - fi
> -
> - if test -n "$interactive_rebase" -a -z "$preserve_merges"
> - then
> - run_interactive
> - else
> - . git-rebase--$type
> -
> - if test -z "$preserve_merges"
> - then
> - git_rebase__$type
> - else
> - git_rebase__preserve_merges
> - fi
> - fi
> -
> - ret=$?
> - if test $ret -eq 0
> - then
> - finish_rebase
> - elif test $ret -eq 2 # special exit status for rebase -p
> - then
> - apply_autostash &&
> - rm -rf "$state_dir" &&
> - die "Nothing to do"
> - fi
> - exit $ret
> -}
> -
> -run_pre_rebase_hook () {
> - if test -z "$ok_to_skip_pre_rebase" &&
> - test -x "$(git rev-parse --git-path hooks/pre-rebase)"
> - then
> - "$(git rev-parse --git-path hooks/pre-rebase)" ${1+"$@"} ||
> - die "$(gettext "The pre-rebase hook refused to rebase.")"
> - fi
> -}
> -
> -test -f "$apply_dir"/applying &&
> - die "$(gettext "It looks like 'git am' is in progress. Cannot rebase.")"
> -
> -if test -d "$apply_dir"
> -then
> - type=am
> - state_dir="$apply_dir"
> -elif test -d "$merge_dir"
> -then
> - type=interactive
> - if test -d "$merge_dir"/rewritten
> - then
> - type=preserve-merges
> - interactive_rebase=explicit
> - preserve_merges=t
> - elif test -f "$merge_dir"/interactive
> - then
> - interactive_rebase=explicit
> - fi
> - state_dir="$merge_dir"
> -fi
> -test -n "$type" && in_progress=t
> -
> -total_argc=$#
> -while test $# != 0
> -do
> - case "$1" in
> - --no-verify)
> - ok_to_skip_pre_rebase=yes
> - ;;
> - --verify)
> - ok_to_skip_pre_rebase=
> - ;;
> - --continue|--skip|--abort|--quit|--edit-todo|--show-current-patch)
> - test $total_argc -eq 2 || usage
> - action=${1##--}
> - ;;
> - --onto=*)
> - onto="${1#--onto=}"
> - ;;
> - --exec=*)
> - cmd="${cmd}exec ${1#--exec=}${LF}"
> - test -z "$interactive_rebase" && interactive_rebase=implied
> - ;;
> - --interactive)
> - interactive_rebase=explicit
> - ;;
> - --keep-empty)
> - keep_empty=yes
> - ;;
> - --allow-empty-message)
> - allow_empty_message=--allow-empty-message
> - ;;
> - --no-keep-empty)
> - keep_empty=
> - ;;
> - --rebase-merges)
> - rebase_merges=t
> - test -z "$interactive_rebase" && interactive_rebase=implied
> - ;;
> - --rebase-merges=*)
> - rebase_merges=t
> - case "${1#*=}" in
> - rebase-cousins) rebase_cousins=t;;
> - no-rebase-cousins) rebase_cousins=;;
> - *) die "Unknown mode: $1";;
> - esac
> - test -z "$interactive_rebase" && interactive_rebase=implied
> - ;;
> - --preserve-merges)
> - preserve_merges=t
> - test -z "$interactive_rebase" && interactive_rebase=implied
> - ;;
> - --autosquash)
> - autosquash=t
> - ;;
> - --no-autosquash)
> - autosquash=
> - ;;
> - --fork-point)
> - fork_point=t
> - ;;
> - --no-fork-point)
> - fork_point=
> - ;;
> - --merge)
> - do_merge=t
> - ;;
> - --strategy-option=*)
> - strategy_opts="$strategy_opts $(git rev-parse --sq-quote "--${1#--strategy-option=}" | sed -e s/^.//)"
> - do_merge=t
> - test -z "$strategy" && strategy=recursive
> - ;;
> - --strategy=*)
> - strategy="${1#--strategy=}"
> - do_merge=t
> - ;;
> - --no-stat)
> - diffstat=
> - ;;
> - --stat)
> - diffstat=t
> - ;;
> - --autostash)
> - autostash=true
> - ;;
> - --no-autostash)
> - autostash=false
> - ;;
> - --verbose)
> - verbose=t
> - diffstat=t
> - GIT_QUIET=
> - ;;
> - --quiet)
> - GIT_QUIET=t
> - git_am_opt="$git_am_opt -q"
> - verbose=
> - diffstat=
> - ;;
> - --whitespace=*)
> - git_am_opt="$git_am_opt --whitespace=${1#--whitespace=}"
> - case "${1#--whitespace=}" in
> - fix|strip)
> - force_rebase=t
> - ;;
> - warn|nowarn|error|error-all)
> - ;; # okay, known whitespace option
> - *)
> - die "fatal: Invalid whitespace option: '${1#*=}'"
> - ;;
> - esac
> - ;;
> - --ignore-whitespace)
> - git_am_opt="$git_am_opt $1"
> - ;;
> - --signoff)
> - signoff=--signoff
> - ;;
> - --no-signoff)
> - signoff=
> - ;;
> - --committer-date-is-author-date|--ignore-date)
> - git_am_opt="$git_am_opt $1"
> - force_rebase=t
> - ;;
> - -C*[!0-9]*)
> - die "fatal: switch \`C' expects a numerical value"
> - ;;
> - -C*)
> - git_am_opt="$git_am_opt $1"
> - ;;
> - --root)
> - rebase_root=t
> - ;;
> - --force-rebase|--no-ff)
> - force_rebase=t
> - ;;
> - --rerere-autoupdate|--no-rerere-autoupdate)
> - allow_rerere_autoupdate="$1"
> - ;;
> - --gpg-sign)
> - gpg_sign_opt=-S
> - ;;
> - --gpg-sign=*)
> - gpg_sign_opt="-S${1#--gpg-sign=}"
> - ;;
> - --reschedule-failed-exec)
> - reschedule_failed_exec=--reschedule-failed-exec
> - ;;
> - --no-reschedule-failed-exec)
> - reschedule_failed_exec=
> - ;;
> - --)
> - shift
> - break
> - ;;
> - *)
> - usage
> - ;;
> - esac
> - shift
> -done
> -test $# -gt 2 && usage
> -
> -if test -n "$action"
> -then
> - test -z "$in_progress" && die "$(gettext "No rebase in progress?")"
> - # Only interactive rebase uses detailed reflog messages
> - if test -n "$interactive_rebase" && test "$GIT_REFLOG_ACTION" = rebase
> - then
> - GIT_REFLOG_ACTION="rebase -i ($action)"
> - export GIT_REFLOG_ACTION
> - fi
> -fi
> -
> -if test "$action" = "edit-todo" && test -z "$interactive_rebase"
> -then
> - die "$(gettext "The --edit-todo action can only be used during interactive rebase.")"
> -fi
> -
> -case "$action" in
> -continue)
> - # Sanity check
> - git rev-parse --verify HEAD >/dev/null ||
> - die "$(gettext "Cannot read HEAD")"
> - git update-index --ignore-submodules --refresh &&
> - git diff-files --quiet --ignore-submodules || {
> - echo "$(gettext "You must edit all merge conflicts and then
> -mark them as resolved using git add")"
> - exit 1
> - }
> - read_basic_state
> - run_specific_rebase
> - ;;
> -skip)
> - output git reset --hard HEAD || exit $?
> - read_basic_state
> - run_specific_rebase
> - ;;
> -abort)
> - git rerere clear
> - read_basic_state
> - case "$head_name" in
> - refs/*)
> - git symbolic-ref -m "rebase: aborting" HEAD $head_name ||
> - die "$(eval_gettext "Could not move back to \$head_name")"
> - ;;
> - esac
> - output git reset --hard $orig_head
> - finish_rebase
> - exit
> - ;;
> -quit)
> - exec rm -rf "$state_dir"
> - ;;
> -edit-todo)
> - run_specific_rebase
> - ;;
> -show-current-patch)
> - run_specific_rebase
> - die "BUG: run_specific_rebase is not supposed to return here"
> - ;;
> -esac
> -
> -# Make sure no rebase is in progress
> -if test -n "$in_progress"
> -then
> - state_dir_base=${state_dir##*/}
> - cmd_live_rebase="git rebase (--continue | --abort | --skip)"
> - cmd_clear_stale_rebase="rm -fr \"$state_dir\""
> - die "
> -$(eval_gettext 'It seems that there is already a $state_dir_base directory, and
> -I wonder if you are in the middle of another rebase. If that is the
> -case, please try
> - $cmd_live_rebase
> -If that is not the case, please
> - $cmd_clear_stale_rebase
> -and run me again. I am stopping in case you still have something
> -valuable there.')"
> -fi
> -
> -if test -n "$rebase_root" && test -z "$onto"
> -then
> - test -z "$interactive_rebase" && interactive_rebase=implied
> -fi
> -
> -if test -n "$keep_empty"
> -then
> - test -z "$interactive_rebase" && interactive_rebase=implied
> -fi
> -
> -actually_interactive=
> -if test -n "$interactive_rebase"
> -then
> - if test -z "$preserve_merges"
> - then
> - type=interactive
> - else
> - type=preserve-merges
> - fi
> - actually_interactive=t
> - state_dir="$merge_dir"
> -elif test -n "$do_merge"
> -then
> - interactive_rebase=implied
> - type=interactive
> - state_dir="$merge_dir"
> -else
> - type=am
> - state_dir="$apply_dir"
> -fi
> -
> -if test -t 2 && test -z "$GIT_QUIET"
> -then
> - git_format_patch_opt="$git_format_patch_opt --progress"
> -fi
> -
> -incompatible_opts=$(echo " $git_am_opt " | \
> - sed -e 's/ -q / /g' -e 's/^ \(.*\) $/\1/')
> -if test -n "$incompatible_opts"
> -then
> - if test -n "$actually_interactive" || test "$do_merge"
> - then
> - die "$(gettext "fatal: cannot combine am options with either interactive or merge options")"
> - fi
> -fi
> -
> -if test -n "$signoff"
> -then
> - test -n "$preserve_merges" &&
> - die "$(gettext "fatal: cannot combine '--signoff' with '--preserve-merges'")"
> - git_am_opt="$git_am_opt $signoff"
> - force_rebase=t
> -fi
> -
> -if test -n "$preserve_merges"
> -then
> - # Note: incompatibility with --signoff handled in signoff block above
> - # Note: incompatibility with --interactive is just a strong warning;
> - # git-rebase.txt caveats with "unless you know what you are doing"
> - test -n "$rebase_merges" &&
> - die "$(gettext "fatal: cannot combine '--preserve-merges' with '--rebase-merges'")"
> -
> - test -n "$reschedule_failed_exec" &&
> - die "$(gettext "error: cannot combine '--preserve-merges' with '--reschedule-failed-exec'")"
> -fi
> -
> -if test -n "$rebase_merges"
> -then
> - test -n "$strategy_opts" &&
> - die "$(gettext "fatal: cannot combine '--rebase-merges' with '--strategy-option'")"
> - test -n "$strategy" &&
> - die "$(gettext "fatal: cannot combine '--rebase-merges' with '--strategy'")"
> -fi
> -
> -if test -z "$rebase_root"
> -then
> - case "$#" in
> - 0)
> - if ! upstream_name=$(git rev-parse --symbolic-full-name \
> - --verify -q @{upstream} 2>/dev/null)
> - then
> - . git-parse-remote
> - error_on_missing_default_upstream "rebase" "rebase" \
> - "against" "git rebase $(gettext '<branch>')"
> - fi
> -
> - test "$fork_point" = auto && fork_point=t
> - ;;
> - *) upstream_name="$1"
> - if test "$upstream_name" = "-"
> - then
> - upstream_name="@{-1}"
> - fi
> - shift
> - ;;
> - esac
> - upstream=$(peel_committish "${upstream_name}") ||
> - die "$(eval_gettext "invalid upstream '\$upstream_name'")"
> - upstream_arg="$upstream_name"
> -else
> - if test -z "$onto"
> - then
> - empty_tree=$(git hash-object -t tree /dev/null)
> - onto=$(git commit-tree $empty_tree </dev/null)
> - squash_onto="$onto"
> - fi
> - unset upstream_name
> - unset upstream
> - test $# -gt 1 && usage
> - upstream_arg=--root
> -fi
> -
> -# Make sure the branch to rebase onto is valid.
> -onto_name=${onto-"$upstream_name"}
> -case "$onto_name" in
> -*...*)
> - if left=${onto_name%...*} right=${onto_name#*...} &&
> - onto=$(git merge-base --all ${left:-HEAD} ${right:-HEAD})
> - then
> - case "$onto" in
> - ?*"$LF"?*)
> - die "$(eval_gettext "\$onto_name: there are more than one merge bases")"
> - ;;
> - '')
> - die "$(eval_gettext "\$onto_name: there is no merge base")"
> - ;;
> - esac
> - else
> - die "$(eval_gettext "\$onto_name: there is no merge base")"
> - fi
> - ;;
> -*)
> - onto=$(peel_committish "$onto_name") ||
> - die "$(eval_gettext "Does not point to a valid commit: \$onto_name")"
> - ;;
> -esac
> -
> -# 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"
> -switch_to=
> -case "$#" in
> -1)
> - # Is it "rebase other $branchname" or "rebase other $commit"?
> - branch_name="$1"
> - switch_to="$1"
> -
> - # Is it a local branch?
> - if git show-ref --verify --quiet -- "refs/heads/$branch_name" &&
> - orig_head=$(git rev-parse -q --verify "refs/heads/$branch_name")
> - then
> - head_name="refs/heads/$branch_name"
> - # If not is it a valid ref (branch or commit)?
> - elif orig_head=$(git rev-parse -q --verify "$branch_name")
> - then
> - head_name="detached HEAD"
> -
> - else
> - die "$(eval_gettext "fatal: no such branch/commit '\$branch_name'")"
> - fi
> - ;;
> -0)
> - # Do not need to switch branches, we are already on it.
> - if branch_name=$(git symbolic-ref -q HEAD)
> - then
> - head_name=$branch_name
> - branch_name=$(expr "z$branch_name" : 'zrefs/heads/\(.*\)')
> - else
> - head_name="detached HEAD"
> - branch_name=HEAD
> - fi
> - orig_head=$(git rev-parse --verify HEAD) || exit
> - ;;
> -*)
> - die "BUG: unexpected number of arguments left to parse"
> - ;;
> -esac
> -
> -if test "$fork_point" = t
> -then
> - new_upstream=$(git merge-base --fork-point "$upstream_name" \
> - "${switch_to:-HEAD}")
> - if test -n "$new_upstream"
> - then
> - restrict_revision=$new_upstream
> - fi
> -fi
> -
> -if test "$autostash" = true && ! (require_clean_work_tree) 2>/dev/null
> -then
> - stash_sha1=$(git stash create "autostash") ||
> - die "$(gettext 'Cannot autostash')"
> -
> - mkdir -p "$state_dir" &&
> - echo $stash_sha1 >"$state_dir/autostash" &&
> - stash_abbrev=$(git rev-parse --short $stash_sha1) &&
> - echo "$(eval_gettext 'Created autostash: $stash_abbrev')" &&
> - git reset --hard
> -fi
> -
> -require_clean_work_tree "rebase" "$(gettext "Please commit or stash them.")"
> -
> -# Now we are rebasing commits $upstream..$orig_head (or with --root,
> -# everything leading up to $orig_head) on top of $onto
> -
> -# Check if we are already based on $onto with linear history,
> -# but this should be done only when upstream and onto are the same
> -# and if this is not an interactive rebase.
> -mb=$(git merge-base "$onto" "$orig_head")
> -if test -z "$actually_interactive" && test "$upstream" = "$onto" &&
> - test "$mb" = "$onto" && test -z "$restrict_revision" &&
> - # linear history?
> - ! (git rev-list --parents "$onto".."$orig_head" | sane_grep " .* ") > /dev/null
> -then
> - if test -z "$force_rebase"
> - then
> - # Lazily switch to the target branch if needed...
> - test -z "$switch_to" ||
> - GIT_REFLOG_ACTION="$GIT_REFLOG_ACTION: checkout $switch_to" \
> - git checkout -q "$switch_to" --
> - if test "$branch_name" = "HEAD" &&
> - ! git symbolic-ref -q HEAD
> - then
> - say "$(eval_gettext "HEAD is up to date.")"
> - else
> - say "$(eval_gettext "Current branch \$branch_name is up to date.")"
> - fi
> - finish_rebase
> - exit 0
> - else
> - if test "$branch_name" = "HEAD" &&
> - ! git symbolic-ref -q HEAD
> - then
> - say "$(eval_gettext "HEAD is up to date, rebase forced.")"
> - else
> - say "$(eval_gettext "Current branch \$branch_name is up to date, rebase forced.")"
> - fi
> - fi
> -fi
> -
> -# If a hook exists, give it a chance to interrupt
> -run_pre_rebase_hook "$upstream_arg" "$@"
> -
> -if test -n "$diffstat"
> -then
> - if test -n "$verbose"
> - then
> - if test -z "$mb"
> - then
> - echo "$(eval_gettext "Changes to \$onto:")"
> - else
> - echo "$(eval_gettext "Changes from \$mb to \$onto:")"
> - fi
> - fi
> - mb_tree="${mb:-$(git hash-object -t tree /dev/null)}"
> - # We want color (if set), but no pager
> - GIT_PAGER='' git diff --stat --summary "$mb_tree" "$onto"
> -fi
> -
> -if test -z "$actually_interactive" && test "$mb" = "$orig_head"
> -then
> - say "$(eval_gettext "Fast-forwarded \$branch_name to \$onto_name.")"
> - GIT_REFLOG_ACTION="$GIT_REFLOG_ACTION: checkout $onto_name" \
> - git checkout -q "$onto^0" || die "could not detach HEAD"
> - # If the $onto is a proper descendant of the tip of the branch, then
> - # we just fast-forwarded.
> - git update-ref ORIG_HEAD $orig_head
> - move_to_original_branch
> - finish_rebase
> - exit 0
> -fi
> -
> -test -n "$interactive_rebase" && run_specific_rebase
> -
> -# Detach HEAD and reset the tree
> -say "$(gettext "First, rewinding head to replay your work on top of it...")"
> -
> -GIT_REFLOG_ACTION="$GIT_REFLOG_ACTION: checkout $onto_name" \
> - git checkout -q "$onto^0" || die "could not detach HEAD"
> -git update-ref ORIG_HEAD $orig_head
> -
> -if test -n "$rebase_root"
> -then
> - revisions="$onto..$orig_head"
> -else
> - revisions="${restrict_revision-$upstream}..$orig_head"
> -fi
> -
> -run_specific_rebase
> diff --git a/t/README b/t/README
> index 7a3d582267..385262357b 100644
> --- a/t/README
> +++ b/t/README
> @@ -379,10 +379,6 @@ the --no-sparse command-line argument.
> GIT_TEST_PRELOAD_INDEX=<boolean> exercises the preload-index code path
> by overriding the minimum number of cache entries required per thread.
>
> -GIT_TEST_REBASE_USE_BUILTIN=<boolean>, when false, disables the
> -builtin version of git-rebase. See 'rebase.useBuiltin' in
> -git-config(1).
> -
> GIT_TEST_INDEX_THREADS=<n> enables exercising the multi-threaded loading
> of the index for the whole test suite by bypassing the default number of
> cache entries and thread minimums. Setting this to 1 will make the
> diff --git a/t/t3400-rebase.sh b/t/t3400-rebase.sh
> index 3e73f7584c..a809de9304 100755
> --- a/t/t3400-rebase.sh
> +++ b/t/t3400-rebase.sh
> @@ -311,4 +311,20 @@ test_expect_success 'rebase--merge.sh and --show-current-patch' '
> )
> '
>
> +test_expect_success 'rebase -c rebase.useBuiltin=false warning' '
> + expected="rebase.useBuiltin support has been removed" &&
> +
> + # Only warn when the legacy rebase is requested...
> + test_must_fail git -c rebase.useBuiltin=false rebase 2>err &&
> + test_i18ngrep "$expected" err &&
> + test_must_fail env GIT_TEST_REBASE_USE_BUILTIN=false git rebase 2>err &&
> + test_i18ngrep "$expected" err &&
> +
> + # ...not when we would have used the built-in anyway
> + test_must_fail git -c rebase.useBuiltin=true rebase 2>err &&
> + test_must_be_empty err &&
> + test_must_fail env GIT_TEST_REBASE_USE_BUILTIN=true git rebase 2>err &&
> + test_must_be_empty err
> +'
> +
> test_done
> diff --git a/t/t3404-rebase-interactive.sh b/t/t3404-rebase-interactive.sh
> index b60b11f9f2..1723e1a858 100755
> --- a/t/t3404-rebase-interactive.sh
> +++ b/t/t3404-rebase-interactive.sh
> @@ -149,12 +149,10 @@ test_expect_success 'rebase -i with the exec command checks tree cleanness' '
>
> test_expect_success 'rebase -x with empty command fails' '
> test_when_finished "git rebase --abort ||:" &&
> - test_must_fail env GIT_TEST_REBASE_USE_BUILTIN=true \
> - git rebase -x "" @ 2>actual &&
> + test_must_fail env git rebase -x "" @ 2>actual &&
> test_write_lines "error: empty exec command" >expected &&
> test_i18ncmp expected actual &&
> - test_must_fail env GIT_TEST_REBASE_USE_BUILTIN=true \
> - git rebase -x " " @ 2>actual &&
> + test_must_fail env git rebase -x " " @ 2>actual &&
> test_i18ncmp expected actual
> '
>
> @@ -162,8 +160,7 @@ LF='
> '
> test_expect_success 'rebase -x with newline in command fails' '
> test_when_finished "git rebase --abort ||:" &&
> - test_must_fail env GIT_TEST_REBASE_USE_BUILTIN=true \
> - git rebase -x "a${LF}b" @ 2>actual &&
> + test_must_fail env git rebase -x "a${LF}b" @ 2>actual &&
> test_write_lines "error: exec commands cannot contain newlines" \
> >expected &&
> test_i18ncmp expected actual
>
^ permalink raw reply [relevance 0%]
* Re: [PATCH v3] rebase: remove the rebase.useBuiltin setting
2019-03-15 15:44 0% ` Johannes Schindelin
@ 2019-03-15 16:11 0% ` Ævar Arnfjörð Bjarmason
0 siblings, 0 replies; 71+ results
From: Ævar Arnfjörð Bjarmason @ 2019-03-15 16:11 UTC (permalink / raw)
To: Johannes Schindelin; +Cc: git, Junio C Hamano, Phillip Wood
On Fri, Mar 15 2019, Johannes Schindelin wrote:
> Hi Ævar,
>
> On Fri, 15 Mar 2019, Ævar Arnfjörð Bjarmason wrote:
>
>> Remove the rebase.useBuiltin setting, which was added as an escape
>> hatch to disable the builtin version of rebase first released with Git
>> 2.20.
>>
>> See [1] for the initial implementation of rebase.useBuiltin, and [2]
>> and [3] for the documentation and corresponding
>> GIT_TEST_REBASE_USE_BUILTIN option.
>>
>> Carrying the legacy version is a maintenance burden as seen in
>> 7e097e27d3 ("legacy-rebase: backport -C<n> and --whitespace=<option>
>> checks", 2018-11-20) and 9aea5e9286 ("rebase: fix regression in
>> rebase.useBuiltin=false test mode", 2019-02-13). Since the built-in
>> version has been shown to be stable enough let's remove the legacy
>> version.
>>
>> As noted in [3] having use_builtin_rebase() shell out to get its
>> config doesn't make any sense anymore, that was done for the purposes
>> of spawning the legacy rebase without having modified any global
>> state. Let's instead handle this case in rebase_config().
>>
>> There's still a bunch of references to git-legacy-rebase in po/*.po,
>> but those will be dealt with in time by the i18n effort.
>>
>> Even though this configuration variable only existed for one release
>> let's not entirely delete the entry from the docs, but note its
>> absence. Individual versions of git tend to be around for a while due
>> to distro packaging timelines, so e.g. if we're "lucky" a given
>> version like 2.21 might be installed on say OSX for half a decade.
>>
>> That'll mean some people probably setting this in config, and then
>> when they later wonder if it's needed they can Google search the
>> config option name or check it in git-config. It also allows us to
>> refer to the docs from the warning for details.
>>
>> 1. 55071ea248 ("rebase: start implementing it as a builtin",
>> 2018-08-07)
>> 2. d8d0a546f0 ("rebase doc: document rebase.useBuiltin", 2018-11-14)
>> 3. 62c23938fa ("tests: add a special setup where rebase.useBuiltin is
>> off", 2018-11-14)
>> 3. https://public-inbox.org/git/nycvar.QRO.7.76.6.1903141544110.41@tvgsbejvaqbjf.bet/
>> ---
>
> With the obviously intended SOB line: ACK!
Urgh, Junio: If there's no other comments/concerns on v3 requiring a v4
this has my:
Signed-off-by: Ævar Arnfjörð Bjarmason <avarab@gmail.com>
^ permalink raw reply [relevance 0%]
* Re: [PATCH v3] rebase: remove the rebase.useBuiltin setting
2019-03-15 13:45 1% ` [PATCH v3] " Ævar Arnfjörð Bjarmason
@ 2019-03-15 15:44 0% ` Johannes Schindelin
2019-03-15 16:11 0% ` Ævar Arnfjörð Bjarmason
2019-03-18 10:19 0% ` Phillip Wood
1 sibling, 1 reply; 71+ results
From: Johannes Schindelin @ 2019-03-15 15:44 UTC (permalink / raw)
To: Ævar Arnfjörð Bjarmason; +Cc: git, Junio C Hamano, Phillip Wood
[-- Attachment #1: Type: text/plain, Size: 2140 bytes --]
Hi Ævar,
On Fri, 15 Mar 2019, Ævar Arnfjörð Bjarmason wrote:
> Remove the rebase.useBuiltin setting, which was added as an escape
> hatch to disable the builtin version of rebase first released with Git
> 2.20.
>
> See [1] for the initial implementation of rebase.useBuiltin, and [2]
> and [3] for the documentation and corresponding
> GIT_TEST_REBASE_USE_BUILTIN option.
>
> Carrying the legacy version is a maintenance burden as seen in
> 7e097e27d3 ("legacy-rebase: backport -C<n> and --whitespace=<option>
> checks", 2018-11-20) and 9aea5e9286 ("rebase: fix regression in
> rebase.useBuiltin=false test mode", 2019-02-13). Since the built-in
> version has been shown to be stable enough let's remove the legacy
> version.
>
> As noted in [3] having use_builtin_rebase() shell out to get its
> config doesn't make any sense anymore, that was done for the purposes
> of spawning the legacy rebase without having modified any global
> state. Let's instead handle this case in rebase_config().
>
> There's still a bunch of references to git-legacy-rebase in po/*.po,
> but those will be dealt with in time by the i18n effort.
>
> Even though this configuration variable only existed for one release
> let's not entirely delete the entry from the docs, but note its
> absence. Individual versions of git tend to be around for a while due
> to distro packaging timelines, so e.g. if we're "lucky" a given
> version like 2.21 might be installed on say OSX for half a decade.
>
> That'll mean some people probably setting this in config, and then
> when they later wonder if it's needed they can Google search the
> config option name or check it in git-config. It also allows us to
> refer to the docs from the warning for details.
>
> 1. 55071ea248 ("rebase: start implementing it as a builtin",
> 2018-08-07)
> 2. d8d0a546f0 ("rebase doc: document rebase.useBuiltin", 2018-11-14)
> 3. 62c23938fa ("tests: add a special setup where rebase.useBuiltin is
> off", 2018-11-14)
> 3. https://public-inbox.org/git/nycvar.QRO.7.76.6.1903141544110.41@tvgsbejvaqbjf.bet/
> ---
With the obviously intended SOB line: ACK!
Ciao,
Dscho
^ permalink raw reply [relevance 0%]
* [PATCH v3] rebase: remove the rebase.useBuiltin setting
2019-03-14 15:27 0% ` Ævar Arnfjörð Bjarmason
@ 2019-03-15 13:45 1% ` Ævar Arnfjörð Bjarmason
2019-03-15 15:44 0% ` Johannes Schindelin
2019-03-18 10:19 0% ` Phillip Wood
0 siblings, 2 replies; 71+ results
From: Ævar Arnfjörð Bjarmason @ 2019-03-15 13:45 UTC (permalink / raw)
To: git
Cc: Junio C Hamano, Phillip Wood, Johannes Schindelin,
Ævar Arnfjörð Bjarmason
Remove the rebase.useBuiltin setting, which was added as an escape
hatch to disable the builtin version of rebase first released with Git
2.20.
See [1] for the initial implementation of rebase.useBuiltin, and [2]
and [3] for the documentation and corresponding
GIT_TEST_REBASE_USE_BUILTIN option.
Carrying the legacy version is a maintenance burden as seen in
7e097e27d3 ("legacy-rebase: backport -C<n> and --whitespace=<option>
checks", 2018-11-20) and 9aea5e9286 ("rebase: fix regression in
rebase.useBuiltin=false test mode", 2019-02-13). Since the built-in
version has been shown to be stable enough let's remove the legacy
version.
As noted in [3] having use_builtin_rebase() shell out to get its
config doesn't make any sense anymore, that was done for the purposes
of spawning the legacy rebase without having modified any global
state. Let's instead handle this case in rebase_config().
There's still a bunch of references to git-legacy-rebase in po/*.po,
but those will be dealt with in time by the i18n effort.
Even though this configuration variable only existed for one release
let's not entirely delete the entry from the docs, but note its
absence. Individual versions of git tend to be around for a while due
to distro packaging timelines, so e.g. if we're "lucky" a given
version like 2.21 might be installed on say OSX for half a decade.
That'll mean some people probably setting this in config, and then
when they later wonder if it's needed they can Google search the
config option name or check it in git-config. It also allows us to
refer to the docs from the warning for details.
1. 55071ea248 ("rebase: start implementing it as a builtin",
2018-08-07)
2. d8d0a546f0 ("rebase doc: document rebase.useBuiltin", 2018-11-14)
3. 62c23938fa ("tests: add a special setup where rebase.useBuiltin is
off", 2018-11-14)
3. https://public-inbox.org/git/nycvar.QRO.7.76.6.1903141544110.41@tvgsbejvaqbjf.bet/
---
Addresses Johannes's comments on v2, and improves the tests I'm adding
to cover both the env var & config variable.
.gitignore | 1 -
Documentation/config/rebase.txt | 17 +-
Makefile | 1 -
builtin/rebase.c | 50 +--
git-legacy-rebase.sh | 770 --------------------------------
t/README | 4 -
t/t3400-rebase.sh | 16 +
t/t3404-rebase-interactive.sh | 9 +-
8 files changed, 35 insertions(+), 833 deletions(-)
delete mode 100755 git-legacy-rebase.sh
diff --git a/.gitignore b/.gitignore
index 7374587f9d..5cb84f1d1a 100644
--- a/.gitignore
+++ b/.gitignore
@@ -82,7 +82,6 @@
/git-init-db
/git-interpret-trailers
/git-instaweb
-/git-legacy-rebase
/git-log
/git-ls-files
/git-ls-remote
diff --git a/Documentation/config/rebase.txt b/Documentation/config/rebase.txt
index 331d250e04..c747452983 100644
--- a/Documentation/config/rebase.txt
+++ b/Documentation/config/rebase.txt
@@ -1,16 +1,9 @@
rebase.useBuiltin::
- Set to `false` to use the legacy shellscript implementation of
- linkgit:git-rebase[1]. Is `true` by default, which means use
- the built-in rewrite of it in C.
-+
-The C rewrite is first included with Git version 2.20. This option
-serves an an escape hatch to re-enable the legacy version in case any
-bugs are found in the rewrite. This option and the shellscript version
-of linkgit:git-rebase[1] will be removed in some future release.
-+
-If you find some reason to set this option to `false` other than
-one-off testing you should report the behavior difference as a bug in
-git.
+ Unused configuration variable. Used between Git version 2.20
+ and 2.21 as an escape hatch to enable the legacy shellscript
+ implementation of rebase. Now the built-in rewrite of it in C
+ is always used. Setting this will emit a warning, to alert any
+ remaining users that setting this now does nothing.
rebase.stat::
Whether to show a diffstat of what changed upstream since the last
diff --git a/Makefile b/Makefile
index 537493822b..9f1159cffc 100644
--- a/Makefile
+++ b/Makefile
@@ -632,7 +632,6 @@ SCRIPT_SH += git-merge-one-file.sh
SCRIPT_SH += git-merge-resolve.sh
SCRIPT_SH += git-mergetool.sh
SCRIPT_SH += git-quiltimport.sh
-SCRIPT_SH += git-legacy-rebase.sh
SCRIPT_SH += git-remote-testgit.sh
SCRIPT_SH += git-request-pull.sh
SCRIPT_SH += git-stash.sh
diff --git a/builtin/rebase.c b/builtin/rebase.c
index 52114cbf0d..bc3dc629c1 100644
--- a/builtin/rebase.c
+++ b/builtin/rebase.c
@@ -46,29 +46,6 @@ enum rebase_type {
REBASE_PRESERVE_MERGES
};
-static int use_builtin_rebase(void)
-{
- struct child_process cp = CHILD_PROCESS_INIT;
- struct strbuf out = STRBUF_INIT;
- int ret, env = git_env_bool("GIT_TEST_REBASE_USE_BUILTIN", -1);
-
- if (env != -1)
- return env;
-
- argv_array_pushl(&cp.args,
- "config", "--bool", "rebase.usebuiltin", NULL);
- cp.git_cmd = 1;
- if (capture_command(&cp, &out, 6)) {
- strbuf_release(&out);
- return 1;
- }
-
- strbuf_trim(&out);
- ret = !strcmp("true", out.buf);
- strbuf_release(&out);
- return ret;
-}
-
struct rebase_options {
enum rebase_type type;
const char *state_dir;
@@ -106,6 +83,7 @@ struct rebase_options {
char *strategy, *strategy_opts;
struct strbuf git_format_patch_opt;
int reschedule_failed_exec;
+ int use_legacy_rebase;
};
static int is_interactive(struct rebase_options *opts)
@@ -869,6 +847,11 @@ static int rebase_config(const char *var, const char *value, void *data)
return 0;
}
+ if (!strcmp(var, "rebase.usebuiltin")) {
+ opts->use_legacy_rebase = !git_config_bool(var, value);
+ return 0;
+ }
+
return git_default_config(var, value, data);
}
@@ -1143,22 +1126,6 @@ int cmd_rebase(int argc, const char **argv, const char *prefix)
};
int i;
- /*
- * 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 && !strcmp(argv[1], "-h"))
usage_with_options(builtin_rebase_usage,
builtin_rebase_options);
@@ -1169,6 +1136,11 @@ int cmd_rebase(int argc, const char **argv, const char *prefix)
git_config(rebase_config, &options);
+ if (options.use_legacy_rebase ||
+ !git_env_bool("GIT_TEST_REBASE_USE_BUILTIN", -1))
+ warning(_("the rebase.useBuiltin support has been removed!\n"
+ "See its entry in 'git help config' for details."));
+
strbuf_reset(&buf);
strbuf_addf(&buf, "%s/applying", apply_dir());
if(file_exists(buf.buf))
diff --git a/git-legacy-rebase.sh b/git-legacy-rebase.sh
deleted file mode 100755
index 5c2c4e5276..0000000000
--- a/git-legacy-rebase.sh
+++ /dev/null
@@ -1,770 +0,0 @@
-#!/bin/sh
-#
-# Copyright (c) 2005 Junio C Hamano.
-#
-
-SUBDIRECTORY_OK=Yes
-OPTIONS_KEEPDASHDASH=
-OPTIONS_STUCKLONG=t
-OPTIONS_SPEC="\
-git rebase [-i] [options] [--exec <cmd>] [--onto <newbase>] [<upstream>] [<branch>]
-git rebase [-i] [options] [--exec <cmd>] [--onto <newbase>] --root [<branch>]
-git rebase --continue | --abort | --skip | --edit-todo
---
- Available options are
-v,verbose! display a diffstat of what changed upstream
-q,quiet! be quiet. implies --no-stat
-autostash automatically stash/stash pop before and after
-fork-point use 'merge-base --fork-point' to refine upstream
-onto=! rebase onto given branch instead of upstream
-r,rebase-merges? try to rebase merges instead of skipping them
-p,preserve-merges! try to recreate merges instead of ignoring them
-s,strategy=! use the given merge strategy
-X,strategy-option=! pass the argument through to the merge strategy
-no-ff! cherry-pick all commits, even if unchanged
-f,force-rebase! cherry-pick all commits, even if unchanged
-m,merge! use merging strategies to rebase
-i,interactive! let the user edit the list of commits to rebase
-x,exec=! add exec lines after each commit of the editable list
-k,keep-empty preserve empty commits during rebase
-allow-empty-message allow rebasing commits with empty messages
-stat! display a diffstat of what changed upstream
-n,no-stat! do not show diffstat of what changed upstream
-verify allow pre-rebase hook to run
-rerere-autoupdate allow rerere to update index with resolved conflicts
-root! rebase all reachable commits up to the root(s)
-autosquash move commits that begin with squash!/fixup! under -i
-signoff add a Signed-off-by: line to each commit
-committer-date-is-author-date! passed to 'git am'
-ignore-date! passed to 'git am'
-whitespace=! passed to 'git apply'
-ignore-whitespace! passed to 'git apply'
-C=! passed to 'git apply'
-S,gpg-sign? GPG-sign commits
- Actions:
-continue! continue
-abort! abort and check out the original branch
-skip! skip current patch and continue
-edit-todo! edit the todo list during an interactive rebase
-quit! abort but keep HEAD where it is
-show-current-patch! show the patch file being applied or merged
-reschedule-failed-exec automatically reschedule failed exec commands
-"
-. git-sh-setup
-set_reflog_action rebase
-require_work_tree_exists
-cd_to_toplevel
-
-LF='
-'
-ok_to_skip_pre_rebase=
-
-squash_onto=
-unset onto
-unset restrict_revision
-cmd=
-strategy=
-strategy_opts=
-do_merge=
-merge_dir="$GIT_DIR"/rebase-merge
-apply_dir="$GIT_DIR"/rebase-apply
-verbose=
-diffstat=
-test "$(git config --bool rebase.stat)" = true && diffstat=t
-autostash="$(git config --bool rebase.autostash || echo false)"
-fork_point=auto
-git_am_opt=
-git_format_patch_opt=
-rebase_root=
-force_rebase=
-allow_rerere_autoupdate=
-# Non-empty if a rebase was in progress when 'git rebase' was invoked
-in_progress=
-# One of {am, merge, interactive}
-type=
-# One of {"$GIT_DIR"/rebase-apply, "$GIT_DIR"/rebase-merge}
-state_dir=
-# One of {'', continue, skip, abort}, as parsed from command line
-action=
-rebase_merges=
-rebase_cousins=
-preserve_merges=
-autosquash=
-keep_empty=
-allow_empty_message=--allow-empty-message
-signoff=
-reschedule_failed_exec=
-test "$(git config --bool rebase.autosquash)" = "true" && autosquash=t
-case "$(git config --bool commit.gpgsign)" in
-true) gpg_sign_opt=-S ;;
-*) gpg_sign_opt= ;;
-esac
-test "$(git config --bool rebase.reschedulefailedexec)" = "true" &&
-reschedule_failed_exec=--reschedule-failed-exec
-. git-rebase--common
-
-read_basic_state () {
- test -f "$state_dir/head-name" &&
- test -f "$state_dir/onto" &&
- head_name=$(cat "$state_dir"/head-name) &&
- onto=$(cat "$state_dir"/onto) &&
- # We always write to orig-head, but interactive rebase used to write to
- # head. Fall back to reading from head to cover for the case that the
- # user upgraded git with an ongoing interactive rebase.
- if test -f "$state_dir"/orig-head
- then
- orig_head=$(cat "$state_dir"/orig-head)
- else
- orig_head=$(cat "$state_dir"/head)
- fi &&
- test -f "$state_dir"/quiet && GIT_QUIET=t
- test -f "$state_dir"/verbose && verbose=t
- test -f "$state_dir"/strategy && strategy="$(cat "$state_dir"/strategy)"
- test -f "$state_dir"/strategy_opts &&
- strategy_opts="$(cat "$state_dir"/strategy_opts)"
- test -f "$state_dir"/allow_rerere_autoupdate &&
- allow_rerere_autoupdate="$(cat "$state_dir"/allow_rerere_autoupdate)"
- test -f "$state_dir"/gpg_sign_opt &&
- gpg_sign_opt="$(cat "$state_dir"/gpg_sign_opt)"
- test -f "$state_dir"/signoff && {
- signoff="$(cat "$state_dir"/signoff)"
- force_rebase=t
- }
- test -f "$state_dir"/reschedule-failed-exec &&
- reschedule_failed_exec=t
-}
-
-finish_rebase () {
- rm -f "$(git rev-parse --git-path REBASE_HEAD)"
- apply_autostash &&
- { git gc --auto || true; } &&
- rm -rf "$state_dir"
-}
-
-run_interactive () {
- GIT_CHERRY_PICK_HELP="$resolvemsg"
- export GIT_CHERRY_PICK_HELP
-
- test -n "$keep_empty" && keep_empty="--keep-empty"
- test -n "$rebase_merges" && rebase_merges="--rebase-merges"
- test -n "$rebase_cousins" && rebase_cousins="--rebase-cousins"
- test -n "$autosquash" && autosquash="--autosquash"
- test -n "$verbose" && verbose="--verbose"
- test -n "$force_rebase" && force_rebase="--no-ff"
- test -n "$restrict_revision" && \
- restrict_revision="--restrict-revision=^$restrict_revision"
- test -n "$upstream" && upstream="--upstream=$upstream"
- test -n "$onto" && onto="--onto=$onto"
- test -n "$squash_onto" && squash_onto="--squash-onto=$squash_onto"
- test -n "$onto_name" && onto_name="--onto-name=$onto_name"
- test -n "$head_name" && head_name="--head-name=$head_name"
- test -n "$strategy" && strategy="--strategy=$strategy"
- test -n "$strategy_opts" && strategy_opts="--strategy-opts=$strategy_opts"
- test -n "$switch_to" && switch_to="--switch-to=$switch_to"
- test -n "$cmd" && cmd="--cmd=$cmd"
- test -n "$action" && action="--$action"
-
- exec git rebase--interactive "$action" "$keep_empty" "$rebase_merges" "$rebase_cousins" \
- "$upstream" "$onto" "$squash_onto" "$restrict_revision" \
- "$allow_empty_message" "$autosquash" "$verbose" \
- "$force_rebase" "$onto_name" "$head_name" "$strategy" \
- "$strategy_opts" "$cmd" "$switch_to" \
- "$allow_rerere_autoupdate" "$gpg_sign_opt" "$signoff" \
- "$reschedule_failed_exec"
-}
-
-run_specific_rebase () {
- if [ "$interactive_rebase" = implied ]; then
- GIT_SEQUENCE_EDITOR=:
- export GIT_SEQUENCE_EDITOR
- autosquash=
- fi
-
- if test -n "$interactive_rebase" -a -z "$preserve_merges"
- then
- run_interactive
- else
- . git-rebase--$type
-
- if test -z "$preserve_merges"
- then
- git_rebase__$type
- else
- git_rebase__preserve_merges
- fi
- fi
-
- ret=$?
- if test $ret -eq 0
- then
- finish_rebase
- elif test $ret -eq 2 # special exit status for rebase -p
- then
- apply_autostash &&
- rm -rf "$state_dir" &&
- die "Nothing to do"
- fi
- exit $ret
-}
-
-run_pre_rebase_hook () {
- if test -z "$ok_to_skip_pre_rebase" &&
- test -x "$(git rev-parse --git-path hooks/pre-rebase)"
- then
- "$(git rev-parse --git-path hooks/pre-rebase)" ${1+"$@"} ||
- die "$(gettext "The pre-rebase hook refused to rebase.")"
- fi
-}
-
-test -f "$apply_dir"/applying &&
- die "$(gettext "It looks like 'git am' is in progress. Cannot rebase.")"
-
-if test -d "$apply_dir"
-then
- type=am
- state_dir="$apply_dir"
-elif test -d "$merge_dir"
-then
- type=interactive
- if test -d "$merge_dir"/rewritten
- then
- type=preserve-merges
- interactive_rebase=explicit
- preserve_merges=t
- elif test -f "$merge_dir"/interactive
- then
- interactive_rebase=explicit
- fi
- state_dir="$merge_dir"
-fi
-test -n "$type" && in_progress=t
-
-total_argc=$#
-while test $# != 0
-do
- case "$1" in
- --no-verify)
- ok_to_skip_pre_rebase=yes
- ;;
- --verify)
- ok_to_skip_pre_rebase=
- ;;
- --continue|--skip|--abort|--quit|--edit-todo|--show-current-patch)
- test $total_argc -eq 2 || usage
- action=${1##--}
- ;;
- --onto=*)
- onto="${1#--onto=}"
- ;;
- --exec=*)
- cmd="${cmd}exec ${1#--exec=}${LF}"
- test -z "$interactive_rebase" && interactive_rebase=implied
- ;;
- --interactive)
- interactive_rebase=explicit
- ;;
- --keep-empty)
- keep_empty=yes
- ;;
- --allow-empty-message)
- allow_empty_message=--allow-empty-message
- ;;
- --no-keep-empty)
- keep_empty=
- ;;
- --rebase-merges)
- rebase_merges=t
- test -z "$interactive_rebase" && interactive_rebase=implied
- ;;
- --rebase-merges=*)
- rebase_merges=t
- case "${1#*=}" in
- rebase-cousins) rebase_cousins=t;;
- no-rebase-cousins) rebase_cousins=;;
- *) die "Unknown mode: $1";;
- esac
- test -z "$interactive_rebase" && interactive_rebase=implied
- ;;
- --preserve-merges)
- preserve_merges=t
- test -z "$interactive_rebase" && interactive_rebase=implied
- ;;
- --autosquash)
- autosquash=t
- ;;
- --no-autosquash)
- autosquash=
- ;;
- --fork-point)
- fork_point=t
- ;;
- --no-fork-point)
- fork_point=
- ;;
- --merge)
- do_merge=t
- ;;
- --strategy-option=*)
- strategy_opts="$strategy_opts $(git rev-parse --sq-quote "--${1#--strategy-option=}" | sed -e s/^.//)"
- do_merge=t
- test -z "$strategy" && strategy=recursive
- ;;
- --strategy=*)
- strategy="${1#--strategy=}"
- do_merge=t
- ;;
- --no-stat)
- diffstat=
- ;;
- --stat)
- diffstat=t
- ;;
- --autostash)
- autostash=true
- ;;
- --no-autostash)
- autostash=false
- ;;
- --verbose)
- verbose=t
- diffstat=t
- GIT_QUIET=
- ;;
- --quiet)
- GIT_QUIET=t
- git_am_opt="$git_am_opt -q"
- verbose=
- diffstat=
- ;;
- --whitespace=*)
- git_am_opt="$git_am_opt --whitespace=${1#--whitespace=}"
- case "${1#--whitespace=}" in
- fix|strip)
- force_rebase=t
- ;;
- warn|nowarn|error|error-all)
- ;; # okay, known whitespace option
- *)
- die "fatal: Invalid whitespace option: '${1#*=}'"
- ;;
- esac
- ;;
- --ignore-whitespace)
- git_am_opt="$git_am_opt $1"
- ;;
- --signoff)
- signoff=--signoff
- ;;
- --no-signoff)
- signoff=
- ;;
- --committer-date-is-author-date|--ignore-date)
- git_am_opt="$git_am_opt $1"
- force_rebase=t
- ;;
- -C*[!0-9]*)
- die "fatal: switch \`C' expects a numerical value"
- ;;
- -C*)
- git_am_opt="$git_am_opt $1"
- ;;
- --root)
- rebase_root=t
- ;;
- --force-rebase|--no-ff)
- force_rebase=t
- ;;
- --rerere-autoupdate|--no-rerere-autoupdate)
- allow_rerere_autoupdate="$1"
- ;;
- --gpg-sign)
- gpg_sign_opt=-S
- ;;
- --gpg-sign=*)
- gpg_sign_opt="-S${1#--gpg-sign=}"
- ;;
- --reschedule-failed-exec)
- reschedule_failed_exec=--reschedule-failed-exec
- ;;
- --no-reschedule-failed-exec)
- reschedule_failed_exec=
- ;;
- --)
- shift
- break
- ;;
- *)
- usage
- ;;
- esac
- shift
-done
-test $# -gt 2 && usage
-
-if test -n "$action"
-then
- test -z "$in_progress" && die "$(gettext "No rebase in progress?")"
- # Only interactive rebase uses detailed reflog messages
- if test -n "$interactive_rebase" && test "$GIT_REFLOG_ACTION" = rebase
- then
- GIT_REFLOG_ACTION="rebase -i ($action)"
- export GIT_REFLOG_ACTION
- fi
-fi
-
-if test "$action" = "edit-todo" && test -z "$interactive_rebase"
-then
- die "$(gettext "The --edit-todo action can only be used during interactive rebase.")"
-fi
-
-case "$action" in
-continue)
- # Sanity check
- git rev-parse --verify HEAD >/dev/null ||
- die "$(gettext "Cannot read HEAD")"
- git update-index --ignore-submodules --refresh &&
- git diff-files --quiet --ignore-submodules || {
- echo "$(gettext "You must edit all merge conflicts and then
-mark them as resolved using git add")"
- exit 1
- }
- read_basic_state
- run_specific_rebase
- ;;
-skip)
- output git reset --hard HEAD || exit $?
- read_basic_state
- run_specific_rebase
- ;;
-abort)
- git rerere clear
- read_basic_state
- case "$head_name" in
- refs/*)
- git symbolic-ref -m "rebase: aborting" HEAD $head_name ||
- die "$(eval_gettext "Could not move back to \$head_name")"
- ;;
- esac
- output git reset --hard $orig_head
- finish_rebase
- exit
- ;;
-quit)
- exec rm -rf "$state_dir"
- ;;
-edit-todo)
- run_specific_rebase
- ;;
-show-current-patch)
- run_specific_rebase
- die "BUG: run_specific_rebase is not supposed to return here"
- ;;
-esac
-
-# Make sure no rebase is in progress
-if test -n "$in_progress"
-then
- state_dir_base=${state_dir##*/}
- cmd_live_rebase="git rebase (--continue | --abort | --skip)"
- cmd_clear_stale_rebase="rm -fr \"$state_dir\""
- die "
-$(eval_gettext 'It seems that there is already a $state_dir_base directory, and
-I wonder if you are in the middle of another rebase. If that is the
-case, please try
- $cmd_live_rebase
-If that is not the case, please
- $cmd_clear_stale_rebase
-and run me again. I am stopping in case you still have something
-valuable there.')"
-fi
-
-if test -n "$rebase_root" && test -z "$onto"
-then
- test -z "$interactive_rebase" && interactive_rebase=implied
-fi
-
-if test -n "$keep_empty"
-then
- test -z "$interactive_rebase" && interactive_rebase=implied
-fi
-
-actually_interactive=
-if test -n "$interactive_rebase"
-then
- if test -z "$preserve_merges"
- then
- type=interactive
- else
- type=preserve-merges
- fi
- actually_interactive=t
- state_dir="$merge_dir"
-elif test -n "$do_merge"
-then
- interactive_rebase=implied
- type=interactive
- state_dir="$merge_dir"
-else
- type=am
- state_dir="$apply_dir"
-fi
-
-if test -t 2 && test -z "$GIT_QUIET"
-then
- git_format_patch_opt="$git_format_patch_opt --progress"
-fi
-
-incompatible_opts=$(echo " $git_am_opt " | \
- sed -e 's/ -q / /g' -e 's/^ \(.*\) $/\1/')
-if test -n "$incompatible_opts"
-then
- if test -n "$actually_interactive" || test "$do_merge"
- then
- die "$(gettext "fatal: cannot combine am options with either interactive or merge options")"
- fi
-fi
-
-if test -n "$signoff"
-then
- test -n "$preserve_merges" &&
- die "$(gettext "fatal: cannot combine '--signoff' with '--preserve-merges'")"
- git_am_opt="$git_am_opt $signoff"
- force_rebase=t
-fi
-
-if test -n "$preserve_merges"
-then
- # Note: incompatibility with --signoff handled in signoff block above
- # Note: incompatibility with --interactive is just a strong warning;
- # git-rebase.txt caveats with "unless you know what you are doing"
- test -n "$rebase_merges" &&
- die "$(gettext "fatal: cannot combine '--preserve-merges' with '--rebase-merges'")"
-
- test -n "$reschedule_failed_exec" &&
- die "$(gettext "error: cannot combine '--preserve-merges' with '--reschedule-failed-exec'")"
-fi
-
-if test -n "$rebase_merges"
-then
- test -n "$strategy_opts" &&
- die "$(gettext "fatal: cannot combine '--rebase-merges' with '--strategy-option'")"
- test -n "$strategy" &&
- die "$(gettext "fatal: cannot combine '--rebase-merges' with '--strategy'")"
-fi
-
-if test -z "$rebase_root"
-then
- case "$#" in
- 0)
- if ! upstream_name=$(git rev-parse --symbolic-full-name \
- --verify -q @{upstream} 2>/dev/null)
- then
- . git-parse-remote
- error_on_missing_default_upstream "rebase" "rebase" \
- "against" "git rebase $(gettext '<branch>')"
- fi
-
- test "$fork_point" = auto && fork_point=t
- ;;
- *) upstream_name="$1"
- if test "$upstream_name" = "-"
- then
- upstream_name="@{-1}"
- fi
- shift
- ;;
- esac
- upstream=$(peel_committish "${upstream_name}") ||
- die "$(eval_gettext "invalid upstream '\$upstream_name'")"
- upstream_arg="$upstream_name"
-else
- if test -z "$onto"
- then
- empty_tree=$(git hash-object -t tree /dev/null)
- onto=$(git commit-tree $empty_tree </dev/null)
- squash_onto="$onto"
- fi
- unset upstream_name
- unset upstream
- test $# -gt 1 && usage
- upstream_arg=--root
-fi
-
-# Make sure the branch to rebase onto is valid.
-onto_name=${onto-"$upstream_name"}
-case "$onto_name" in
-*...*)
- if left=${onto_name%...*} right=${onto_name#*...} &&
- onto=$(git merge-base --all ${left:-HEAD} ${right:-HEAD})
- then
- case "$onto" in
- ?*"$LF"?*)
- die "$(eval_gettext "\$onto_name: there are more than one merge bases")"
- ;;
- '')
- die "$(eval_gettext "\$onto_name: there is no merge base")"
- ;;
- esac
- else
- die "$(eval_gettext "\$onto_name: there is no merge base")"
- fi
- ;;
-*)
- onto=$(peel_committish "$onto_name") ||
- die "$(eval_gettext "Does not point to a valid commit: \$onto_name")"
- ;;
-esac
-
-# 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"
-switch_to=
-case "$#" in
-1)
- # Is it "rebase other $branchname" or "rebase other $commit"?
- branch_name="$1"
- switch_to="$1"
-
- # Is it a local branch?
- if git show-ref --verify --quiet -- "refs/heads/$branch_name" &&
- orig_head=$(git rev-parse -q --verify "refs/heads/$branch_name")
- then
- head_name="refs/heads/$branch_name"
- # If not is it a valid ref (branch or commit)?
- elif orig_head=$(git rev-parse -q --verify "$branch_name")
- then
- head_name="detached HEAD"
-
- else
- die "$(eval_gettext "fatal: no such branch/commit '\$branch_name'")"
- fi
- ;;
-0)
- # Do not need to switch branches, we are already on it.
- if branch_name=$(git symbolic-ref -q HEAD)
- then
- head_name=$branch_name
- branch_name=$(expr "z$branch_name" : 'zrefs/heads/\(.*\)')
- else
- head_name="detached HEAD"
- branch_name=HEAD
- fi
- orig_head=$(git rev-parse --verify HEAD) || exit
- ;;
-*)
- die "BUG: unexpected number of arguments left to parse"
- ;;
-esac
-
-if test "$fork_point" = t
-then
- new_upstream=$(git merge-base --fork-point "$upstream_name" \
- "${switch_to:-HEAD}")
- if test -n "$new_upstream"
- then
- restrict_revision=$new_upstream
- fi
-fi
-
-if test "$autostash" = true && ! (require_clean_work_tree) 2>/dev/null
-then
- stash_sha1=$(git stash create "autostash") ||
- die "$(gettext 'Cannot autostash')"
-
- mkdir -p "$state_dir" &&
- echo $stash_sha1 >"$state_dir/autostash" &&
- stash_abbrev=$(git rev-parse --short $stash_sha1) &&
- echo "$(eval_gettext 'Created autostash: $stash_abbrev')" &&
- git reset --hard
-fi
-
-require_clean_work_tree "rebase" "$(gettext "Please commit or stash them.")"
-
-# Now we are rebasing commits $upstream..$orig_head (or with --root,
-# everything leading up to $orig_head) on top of $onto
-
-# Check if we are already based on $onto with linear history,
-# but this should be done only when upstream and onto are the same
-# and if this is not an interactive rebase.
-mb=$(git merge-base "$onto" "$orig_head")
-if test -z "$actually_interactive" && test "$upstream" = "$onto" &&
- test "$mb" = "$onto" && test -z "$restrict_revision" &&
- # linear history?
- ! (git rev-list --parents "$onto".."$orig_head" | sane_grep " .* ") > /dev/null
-then
- if test -z "$force_rebase"
- then
- # Lazily switch to the target branch if needed...
- test -z "$switch_to" ||
- GIT_REFLOG_ACTION="$GIT_REFLOG_ACTION: checkout $switch_to" \
- git checkout -q "$switch_to" --
- if test "$branch_name" = "HEAD" &&
- ! git symbolic-ref -q HEAD
- then
- say "$(eval_gettext "HEAD is up to date.")"
- else
- say "$(eval_gettext "Current branch \$branch_name is up to date.")"
- fi
- finish_rebase
- exit 0
- else
- if test "$branch_name" = "HEAD" &&
- ! git symbolic-ref -q HEAD
- then
- say "$(eval_gettext "HEAD is up to date, rebase forced.")"
- else
- say "$(eval_gettext "Current branch \$branch_name is up to date, rebase forced.")"
- fi
- fi
-fi
-
-# If a hook exists, give it a chance to interrupt
-run_pre_rebase_hook "$upstream_arg" "$@"
-
-if test -n "$diffstat"
-then
- if test -n "$verbose"
- then
- if test -z "$mb"
- then
- echo "$(eval_gettext "Changes to \$onto:")"
- else
- echo "$(eval_gettext "Changes from \$mb to \$onto:")"
- fi
- fi
- mb_tree="${mb:-$(git hash-object -t tree /dev/null)}"
- # We want color (if set), but no pager
- GIT_PAGER='' git diff --stat --summary "$mb_tree" "$onto"
-fi
-
-if test -z "$actually_interactive" && test "$mb" = "$orig_head"
-then
- say "$(eval_gettext "Fast-forwarded \$branch_name to \$onto_name.")"
- GIT_REFLOG_ACTION="$GIT_REFLOG_ACTION: checkout $onto_name" \
- git checkout -q "$onto^0" || die "could not detach HEAD"
- # If the $onto is a proper descendant of the tip of the branch, then
- # we just fast-forwarded.
- git update-ref ORIG_HEAD $orig_head
- move_to_original_branch
- finish_rebase
- exit 0
-fi
-
-test -n "$interactive_rebase" && run_specific_rebase
-
-# Detach HEAD and reset the tree
-say "$(gettext "First, rewinding head to replay your work on top of it...")"
-
-GIT_REFLOG_ACTION="$GIT_REFLOG_ACTION: checkout $onto_name" \
- git checkout -q "$onto^0" || die "could not detach HEAD"
-git update-ref ORIG_HEAD $orig_head
-
-if test -n "$rebase_root"
-then
- revisions="$onto..$orig_head"
-else
- revisions="${restrict_revision-$upstream}..$orig_head"
-fi
-
-run_specific_rebase
diff --git a/t/README b/t/README
index 7a3d582267..385262357b 100644
--- a/t/README
+++ b/t/README
@@ -379,10 +379,6 @@ the --no-sparse command-line argument.
GIT_TEST_PRELOAD_INDEX=<boolean> exercises the preload-index code path
by overriding the minimum number of cache entries required per thread.
-GIT_TEST_REBASE_USE_BUILTIN=<boolean>, when false, disables the
-builtin version of git-rebase. See 'rebase.useBuiltin' in
-git-config(1).
-
GIT_TEST_INDEX_THREADS=<n> enables exercising the multi-threaded loading
of the index for the whole test suite by bypassing the default number of
cache entries and thread minimums. Setting this to 1 will make the
diff --git a/t/t3400-rebase.sh b/t/t3400-rebase.sh
index 3e73f7584c..a809de9304 100755
--- a/t/t3400-rebase.sh
+++ b/t/t3400-rebase.sh
@@ -311,4 +311,20 @@ test_expect_success 'rebase--merge.sh and --show-current-patch' '
)
'
+test_expect_success 'rebase -c rebase.useBuiltin=false warning' '
+ expected="rebase.useBuiltin support has been removed" &&
+
+ # Only warn when the legacy rebase is requested...
+ test_must_fail git -c rebase.useBuiltin=false rebase 2>err &&
+ test_i18ngrep "$expected" err &&
+ test_must_fail env GIT_TEST_REBASE_USE_BUILTIN=false git rebase 2>err &&
+ test_i18ngrep "$expected" err &&
+
+ # ...not when we would have used the built-in anyway
+ test_must_fail git -c rebase.useBuiltin=true rebase 2>err &&
+ test_must_be_empty err &&
+ test_must_fail env GIT_TEST_REBASE_USE_BUILTIN=true git rebase 2>err &&
+ test_must_be_empty err
+'
+
test_done
diff --git a/t/t3404-rebase-interactive.sh b/t/t3404-rebase-interactive.sh
index b60b11f9f2..1723e1a858 100755
--- a/t/t3404-rebase-interactive.sh
+++ b/t/t3404-rebase-interactive.sh
@@ -149,12 +149,10 @@ test_expect_success 'rebase -i with the exec command checks tree cleanness' '
test_expect_success 'rebase -x with empty command fails' '
test_when_finished "git rebase --abort ||:" &&
- test_must_fail env GIT_TEST_REBASE_USE_BUILTIN=true \
- git rebase -x "" @ 2>actual &&
+ test_must_fail env git rebase -x "" @ 2>actual &&
test_write_lines "error: empty exec command" >expected &&
test_i18ncmp expected actual &&
- test_must_fail env GIT_TEST_REBASE_USE_BUILTIN=true \
- git rebase -x " " @ 2>actual &&
+ test_must_fail env git rebase -x " " @ 2>actual &&
test_i18ncmp expected actual
'
@@ -162,8 +160,7 @@ LF='
'
test_expect_success 'rebase -x with newline in command fails' '
test_when_finished "git rebase --abort ||:" &&
- test_must_fail env GIT_TEST_REBASE_USE_BUILTIN=true \
- git rebase -x "a${LF}b" @ 2>actual &&
+ test_must_fail env git rebase -x "a${LF}b" @ 2>actual &&
test_write_lines "error: exec commands cannot contain newlines" \
>expected &&
test_i18ncmp expected actual
--
2.21.0.360.g471c308f928
^ permalink raw reply related [relevance 1%]
* Re: [PATCH v2] rebase: remove the rebase.useBuiltin setting
2019-03-14 14:58 0% ` Johannes Schindelin
@ 2019-03-14 15:27 0% ` Ævar Arnfjörð Bjarmason
2019-03-15 13:45 1% ` [PATCH v3] " Ævar Arnfjörð Bjarmason
0 siblings, 1 reply; 71+ results
From: Ævar Arnfjörð Bjarmason @ 2019-03-14 15:27 UTC (permalink / raw)
To: Johannes Schindelin; +Cc: git, Junio C Hamano, Phillip Wood
On Thu, Mar 14 2019, Johannes Schindelin wrote:
> Hi Ævar,
>
> On Thu, 14 Mar 2019, Ævar Arnfjörð Bjarmason wrote:
>
>> Remove the rebase.useBuiltin setting, which was added as an escape
>> hatch to disable the builtin version of rebase first released with Git
>> 2.20.
>>
>> See [1] for the initial implementation of rebase.useBuiltin, and [2]
>> and [3] for the documentation and corresponding
>> GIT_TEST_REBASE_USE_BUILTIN option.
>>
>> Carrying the legacy version is a maintenance burden as seen in
>> 7e097e27d3 ("legacy-rebase: backport -C<n> and --whitespace=<option>
>> checks", 2018-11-20) and 9aea5e9286 ("rebase: fix regression in
>> rebase.useBuiltin=false test mode", 2019-02-13). Since the built-in
>> version has been shown to be stable enough let's remove the legacy
>> version.
>
> I agree with that reasoning. Elsewhere, a wish cropped up for the `git
> stash` command to optionally ignore unmatched globs, and if we go about to
> implement this, we will have to implement it in the scripted and the
> built-in version. If we can at least avoid that for the `rebase` command,
> I think it would make things a bit easier over here.
>
>> diff --git a/Documentation/config/rebase.txt b/Documentation/config/rebase.txt
>> index 331d250e04..c747452983 100644
>> --- a/Documentation/config/rebase.txt
>> +++ b/Documentation/config/rebase.txt
>> @@ -1,16 +1,9 @@
>> rebase.useBuiltin::
>> - Set to `false` to use the legacy shellscript implementation of
>> - linkgit:git-rebase[1]. Is `true` by default, which means use
>> - the built-in rewrite of it in C.
>> -+
>> -The C rewrite is first included with Git version 2.20. This option
>> -serves an an escape hatch to re-enable the legacy version in case any
>> -bugs are found in the rewrite. This option and the shellscript version
>> -of linkgit:git-rebase[1] will be removed in some future release.
>> -+
>> -If you find some reason to set this option to `false` other than
>> -one-off testing you should report the behavior difference as a bug in
>> -git.
>> + Unused configuration variable. Used between Git version 2.20
>> + and 2.21 as an escape hatch to enable the legacy shellscript
>> + implementation of rebase. Now the built-in rewrite of it in C
>> + is always used. Setting this will emit a warning, to alert any
>> + remaining users that setting this now does nothing.
>
> Do we really need to document this? Why not just remove the entire entry
> wholesale; the warning if `rebase.useBuiltin=false` is set will be
> informative enough.
I don't have a super-strong preference in this case, but in general I
think it makes sense to have docs for this too.
Individual versions of git tend to be around for a while due to distro
packaging timelines, so e.g. if we're "lucky" a given version like 2.21
might be installed on say OSX for half a decade.
That'll mean some people probably setting this in config, and then when
they later wonder if it's needed they can Google search the config
option name or check it in git-config, less of a stretch than needing to
know to run git-rebase with the option...
>> diff --git a/builtin/rebase.c b/builtin/rebase.c
>> index 52114cbf0d..829897a8fe 100644
>> --- a/builtin/rebase.c
>> +++ b/builtin/rebase.c
>> @@ -1143,21 +1143,8 @@ int cmd_rebase(int argc, const char **argv, const char *prefix)
>> };
>> int i;
>>
>> - /*
>> - * 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 (!use_builtin_rebase())
>> + warning(_("The rebase.useBuiltin support has been removed!"));
>
> A couple of thoughts about this:
>
> - `use_builtin_rebase()` spawns a `git config`. This is a pretty expensive
> operation on Windows (even if it might not matter in the big scheme of
> things, as the couple of milliseconds are probably a mere drop on a hot
> stone compared to the I/O incurred by the recursive merge), and it was
> only done in that way to allow for spawning the legacy rebase without
> having touched any global state (such as setting `GIT_*` environment
> variables when a Git directory was discovered).
>
> Couldn't we rather move this warning into `rebase_config()`?
>
> - The warning should start with a lower-case letter (why don't we have any
> automated linter for this? This is a totally automatable thing that
> could run as part of `make` when `DEVELOPER` is set, maybe just on the
> `git diff HEAD --` part, and maybe even generating a patch that can be
> applied; No human should *ever* need to spend time on such issues).
Both of these make sense. Will have that in a v3 pending further
feedback. Didn't notice that strange use_builtin_rebase()
implementation.
> - That warning should probably talk more specifically about the scripted
> version having been removed, not only the option (which was actually not
> removed, otherwise the user would not see that warning ;-)).
...or just change it to briefly refer to the git-config docs where all
of this will be explained :)
>> diff --git a/t/t3400-rebase.sh b/t/t3400-rebase.sh
>> index 3e73f7584c..0a88eed1db 100755
>> --- a/t/t3400-rebase.sh
>> +++ b/t/t3400-rebase.sh
>> @@ -311,4 +311,10 @@ test_expect_success 'rebase--merge.sh and --show-current-patch' '
>> )
>> '
>>
>> +test_expect_success 'rebase -c rebase.useBuiltin=false warning' '
>> + test_must_fail env GIT_TEST_REBASE_USE_BUILTIN= \
>
> Good attention to detail! I would have forgotten to unset that environment
> variable.
>
>> + git -c rebase.useBuiltin=false rebase 2>err &&
>> + test_i18ngrep "rebase.useBuiltin support has been removed" err
>> +'
>> +
>> test_done
>> diff --git a/t/t3404-rebase-interactive.sh b/t/t3404-rebase-interactive.sh
>> index b60b11f9f2..1723e1a858 100755
>> --- a/t/t3404-rebase-interactive.sh
>> +++ b/t/t3404-rebase-interactive.sh
>> @@ -149,12 +149,10 @@ test_expect_success 'rebase -i with the exec command checks tree cleanness' '
>>
>> test_expect_success 'rebase -x with empty command fails' '
>> test_when_finished "git rebase --abort ||:" &&
>> - test_must_fail env GIT_TEST_REBASE_USE_BUILTIN=true \
>> - git rebase -x "" @ 2>actual &&
>> + test_must_fail env git rebase -x "" @ 2>actual &&
>> test_write_lines "error: empty exec command" >expected &&
>> test_i18ncmp expected actual &&
>> - test_must_fail env GIT_TEST_REBASE_USE_BUILTIN=true \
>> - git rebase -x " " @ 2>actual &&
>> + test_must_fail env git rebase -x " " @ 2>actual &&
>> test_i18ncmp expected actual
>> '
>>
>> @@ -162,8 +160,7 @@ LF='
>> '
>> test_expect_success 'rebase -x with newline in command fails' '
>> test_when_finished "git rebase --abort ||:" &&
>> - test_must_fail env GIT_TEST_REBASE_USE_BUILTIN=true \
>> - git rebase -x "a${LF}b" @ 2>actual &&
>> + test_must_fail env git rebase -x "a${LF}b" @ 2>actual &&
>
> Not a terribly big deal, but I would have structured the patch (series) by
> leaving this change to t3404 as a 2/2, as it is not technically necessary
> to include those changes in 1/2 (if your goal is, as mine usually is, to
> "go from working state to working state" between commits).
I run the test suite on various git versions, including for bisecting
purposes and with various GIT_TEST_* options on.
I'll probably never bump into *this* particular commit for this option,
but in general I think it makes more sense to not break the test suite
under existing GIT_TEST_* flags, unless it's a breakage where e.g. we
say "this isn't supported anymore".
By splitting this up as you suggest the 1/2 of those would be a head
scratching breakage under GIT_TEST_REBASE_USE_BUILTIN=false, and only
under 2/2 would we show via the warning why it was failing.
^ permalink raw reply [relevance 0%]
* Re: [PATCH v2] rebase: remove the rebase.useBuiltin setting
2019-03-14 13:24 1% ` [PATCH v2] " Ævar Arnfjörð Bjarmason
@ 2019-03-14 14:58 0% ` Johannes Schindelin
2019-03-14 15:27 0% ` Ævar Arnfjörð Bjarmason
0 siblings, 1 reply; 71+ results
From: Johannes Schindelin @ 2019-03-14 14:58 UTC (permalink / raw)
To: Ævar Arnfjörð Bjarmason; +Cc: git, Junio C Hamano, Phillip Wood
[-- Attachment #1: Type: text/plain, Size: 6625 bytes --]
Hi Ævar,
On Thu, 14 Mar 2019, Ævar Arnfjörð Bjarmason wrote:
> Remove the rebase.useBuiltin setting, which was added as an escape
> hatch to disable the builtin version of rebase first released with Git
> 2.20.
>
> See [1] for the initial implementation of rebase.useBuiltin, and [2]
> and [3] for the documentation and corresponding
> GIT_TEST_REBASE_USE_BUILTIN option.
>
> Carrying the legacy version is a maintenance burden as seen in
> 7e097e27d3 ("legacy-rebase: backport -C<n> and --whitespace=<option>
> checks", 2018-11-20) and 9aea5e9286 ("rebase: fix regression in
> rebase.useBuiltin=false test mode", 2019-02-13). Since the built-in
> version has been shown to be stable enough let's remove the legacy
> version.
I agree with that reasoning. Elsewhere, a wish cropped up for the `git
stash` command to optionally ignore unmatched globs, and if we go about to
implement this, we will have to implement it in the scripted and the
built-in version. If we can at least avoid that for the `rebase` command,
I think it would make things a bit easier over here.
> diff --git a/Documentation/config/rebase.txt b/Documentation/config/rebase.txt
> index 331d250e04..c747452983 100644
> --- a/Documentation/config/rebase.txt
> +++ b/Documentation/config/rebase.txt
> @@ -1,16 +1,9 @@
> rebase.useBuiltin::
> - Set to `false` to use the legacy shellscript implementation of
> - linkgit:git-rebase[1]. Is `true` by default, which means use
> - the built-in rewrite of it in C.
> -+
> -The C rewrite is first included with Git version 2.20. This option
> -serves an an escape hatch to re-enable the legacy version in case any
> -bugs are found in the rewrite. This option and the shellscript version
> -of linkgit:git-rebase[1] will be removed in some future release.
> -+
> -If you find some reason to set this option to `false` other than
> -one-off testing you should report the behavior difference as a bug in
> -git.
> + Unused configuration variable. Used between Git version 2.20
> + and 2.21 as an escape hatch to enable the legacy shellscript
> + implementation of rebase. Now the built-in rewrite of it in C
> + is always used. Setting this will emit a warning, to alert any
> + remaining users that setting this now does nothing.
Do we really need to document this? Why not just remove the entire entry
wholesale; the warning if `rebase.useBuiltin=false` is set will be
informative enough.
> diff --git a/builtin/rebase.c b/builtin/rebase.c
> index 52114cbf0d..829897a8fe 100644
> --- a/builtin/rebase.c
> +++ b/builtin/rebase.c
> @@ -1143,21 +1143,8 @@ int cmd_rebase(int argc, const char **argv, const char *prefix)
> };
> int i;
>
> - /*
> - * 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 (!use_builtin_rebase())
> + warning(_("The rebase.useBuiltin support has been removed!"));
A couple of thoughts about this:
- `use_builtin_rebase()` spawns a `git config`. This is a pretty expensive
operation on Windows (even if it might not matter in the big scheme of
things, as the couple of milliseconds are probably a mere drop on a hot
stone compared to the I/O incurred by the recursive merge), and it was
only done in that way to allow for spawning the legacy rebase without
having touched any global state (such as setting `GIT_*` environment
variables when a Git directory was discovered).
Couldn't we rather move this warning into `rebase_config()`?
- The warning should start with a lower-case letter (why don't we have any
automated linter for this? This is a totally automatable thing that
could run as part of `make` when `DEVELOPER` is set, maybe just on the
`git diff HEAD --` part, and maybe even generating a patch that can be
applied; No human should *ever* need to spend time on such issues).
- That warning should probably talk more specifically about the scripted
version having been removed, not only the option (which was actually not
removed, otherwise the user would not see that warning ;-)).
> diff --git a/t/t3400-rebase.sh b/t/t3400-rebase.sh
> index 3e73f7584c..0a88eed1db 100755
> --- a/t/t3400-rebase.sh
> +++ b/t/t3400-rebase.sh
> @@ -311,4 +311,10 @@ test_expect_success 'rebase--merge.sh and --show-current-patch' '
> )
> '
>
> +test_expect_success 'rebase -c rebase.useBuiltin=false warning' '
> + test_must_fail env GIT_TEST_REBASE_USE_BUILTIN= \
Good attention to detail! I would have forgotten to unset that environment
variable.
> + git -c rebase.useBuiltin=false rebase 2>err &&
> + test_i18ngrep "rebase.useBuiltin support has been removed" err
> +'
> +
> test_done
> diff --git a/t/t3404-rebase-interactive.sh b/t/t3404-rebase-interactive.sh
> index b60b11f9f2..1723e1a858 100755
> --- a/t/t3404-rebase-interactive.sh
> +++ b/t/t3404-rebase-interactive.sh
> @@ -149,12 +149,10 @@ test_expect_success 'rebase -i with the exec command checks tree cleanness' '
>
> test_expect_success 'rebase -x with empty command fails' '
> test_when_finished "git rebase --abort ||:" &&
> - test_must_fail env GIT_TEST_REBASE_USE_BUILTIN=true \
> - git rebase -x "" @ 2>actual &&
> + test_must_fail env git rebase -x "" @ 2>actual &&
> test_write_lines "error: empty exec command" >expected &&
> test_i18ncmp expected actual &&
> - test_must_fail env GIT_TEST_REBASE_USE_BUILTIN=true \
> - git rebase -x " " @ 2>actual &&
> + test_must_fail env git rebase -x " " @ 2>actual &&
> test_i18ncmp expected actual
> '
>
> @@ -162,8 +160,7 @@ LF='
> '
> test_expect_success 'rebase -x with newline in command fails' '
> test_when_finished "git rebase --abort ||:" &&
> - test_must_fail env GIT_TEST_REBASE_USE_BUILTIN=true \
> - git rebase -x "a${LF}b" @ 2>actual &&
> + test_must_fail env git rebase -x "a${LF}b" @ 2>actual &&
Not a terribly big deal, but I would have structured the patch (series) by
leaving this change to t3404 as a 2/2, as it is not technically necessary
to include those changes in 1/2 (if your goal is, as mine usually is, to
"go from working state to working state" between commits).
Thank you for keeping on the track with this,
Dscho
> test_write_lines "error: exec commands cannot contain newlines" \
> >expected &&
> test_i18ncmp expected actual
> --
> 2.21.0.360.g471c308f928
>
>
^ permalink raw reply [relevance 0%]
* [PATCH v2] rebase: remove the rebase.useBuiltin setting
2019-02-13 14:22 1% ` [PATCH] rebase: remove the rebase.useBuiltin setting Ævar Arnfjörð Bjarmason
2019-02-13 16:25 0% ` Johannes Schindelin
2019-02-13 20:46 0% ` Junio C Hamano
@ 2019-03-14 13:24 1% ` Ævar Arnfjörð Bjarmason
2019-03-14 14:58 0% ` Johannes Schindelin
2 siblings, 1 reply; 71+ results
From: Ævar Arnfjörð Bjarmason @ 2019-03-14 13:24 UTC (permalink / raw)
To: git
Cc: Junio C Hamano, Phillip Wood, Johannes Schindelin,
Ævar Arnfjörð Bjarmason
Remove the rebase.useBuiltin setting, which was added as an escape
hatch to disable the builtin version of rebase first released with Git
2.20.
See [1] for the initial implementation of rebase.useBuiltin, and [2]
and [3] for the documentation and corresponding
GIT_TEST_REBASE_USE_BUILTIN option.
Carrying the legacy version is a maintenance burden as seen in
7e097e27d3 ("legacy-rebase: backport -C<n> and --whitespace=<option>
checks", 2018-11-20) and 9aea5e9286 ("rebase: fix regression in
rebase.useBuiltin=false test mode", 2019-02-13). Since the built-in
version has been shown to be stable enough let's remove the legacy
version.
There's still a bunch of references to git-legacy-rebase in po/*.po,
but those will be dealt with in time by the i18n effort.
1. 55071ea248 ("rebase: start implementing it as a builtin",
2018-08-07)
2. d8d0a546f0 ("rebase doc: document rebase.useBuiltin", 2018-11-14)
3. 62c23938fa ("tests: add a special setup where rebase.useBuiltin is
off", 2018-11-14)
---
I submitted this shortly before v2.21.0 where Junio noted that he'd
rather take the smaller 9aea5e9286 fix for that release.
So here this is again now that we've started on v2.22.0. Only trivial
changes:
- updated commit message
- removed legacy script from .gitignore
- adjusted more test code for a test added in 9aea5e9286
.gitignore | 1 -
Documentation/config/rebase.txt | 17 +-
Makefile | 1 -
builtin/rebase.c | 17 +-
git-legacy-rebase.sh | 770 --------------------------------
t/README | 4 -
t/t3400-rebase.sh | 6 +
t/t3404-rebase-interactive.sh | 9 +-
8 files changed, 16 insertions(+), 809 deletions(-)
delete mode 100755 git-legacy-rebase.sh
diff --git a/.gitignore b/.gitignore
index 7374587f9d..5cb84f1d1a 100644
--- a/.gitignore
+++ b/.gitignore
@@ -82,7 +82,6 @@
/git-init-db
/git-interpret-trailers
/git-instaweb
-/git-legacy-rebase
/git-log
/git-ls-files
/git-ls-remote
diff --git a/Documentation/config/rebase.txt b/Documentation/config/rebase.txt
index 331d250e04..c747452983 100644
--- a/Documentation/config/rebase.txt
+++ b/Documentation/config/rebase.txt
@@ -1,16 +1,9 @@
rebase.useBuiltin::
- Set to `false` to use the legacy shellscript implementation of
- linkgit:git-rebase[1]. Is `true` by default, which means use
- the built-in rewrite of it in C.
-+
-The C rewrite is first included with Git version 2.20. This option
-serves an an escape hatch to re-enable the legacy version in case any
-bugs are found in the rewrite. This option and the shellscript version
-of linkgit:git-rebase[1] will be removed in some future release.
-+
-If you find some reason to set this option to `false` other than
-one-off testing you should report the behavior difference as a bug in
-git.
+ Unused configuration variable. Used between Git version 2.20
+ and 2.21 as an escape hatch to enable the legacy shellscript
+ implementation of rebase. Now the built-in rewrite of it in C
+ is always used. Setting this will emit a warning, to alert any
+ remaining users that setting this now does nothing.
rebase.stat::
Whether to show a diffstat of what changed upstream since the last
diff --git a/Makefile b/Makefile
index 537493822b..9f1159cffc 100644
--- a/Makefile
+++ b/Makefile
@@ -632,7 +632,6 @@ SCRIPT_SH += git-merge-one-file.sh
SCRIPT_SH += git-merge-resolve.sh
SCRIPT_SH += git-mergetool.sh
SCRIPT_SH += git-quiltimport.sh
-SCRIPT_SH += git-legacy-rebase.sh
SCRIPT_SH += git-remote-testgit.sh
SCRIPT_SH += git-request-pull.sh
SCRIPT_SH += git-stash.sh
diff --git a/builtin/rebase.c b/builtin/rebase.c
index 52114cbf0d..829897a8fe 100644
--- a/builtin/rebase.c
+++ b/builtin/rebase.c
@@ -1143,21 +1143,8 @@ int cmd_rebase(int argc, const char **argv, const char *prefix)
};
int i;
- /*
- * 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 (!use_builtin_rebase())
+ warning(_("The rebase.useBuiltin support has been removed!"));
if (argc == 2 && !strcmp(argv[1], "-h"))
usage_with_options(builtin_rebase_usage,
diff --git a/git-legacy-rebase.sh b/git-legacy-rebase.sh
deleted file mode 100755
index 5c2c4e5276..0000000000
--- a/git-legacy-rebase.sh
+++ /dev/null
@@ -1,770 +0,0 @@
-#!/bin/sh
-#
-# Copyright (c) 2005 Junio C Hamano.
-#
-
-SUBDIRECTORY_OK=Yes
-OPTIONS_KEEPDASHDASH=
-OPTIONS_STUCKLONG=t
-OPTIONS_SPEC="\
-git rebase [-i] [options] [--exec <cmd>] [--onto <newbase>] [<upstream>] [<branch>]
-git rebase [-i] [options] [--exec <cmd>] [--onto <newbase>] --root [<branch>]
-git rebase --continue | --abort | --skip | --edit-todo
---
- Available options are
-v,verbose! display a diffstat of what changed upstream
-q,quiet! be quiet. implies --no-stat
-autostash automatically stash/stash pop before and after
-fork-point use 'merge-base --fork-point' to refine upstream
-onto=! rebase onto given branch instead of upstream
-r,rebase-merges? try to rebase merges instead of skipping them
-p,preserve-merges! try to recreate merges instead of ignoring them
-s,strategy=! use the given merge strategy
-X,strategy-option=! pass the argument through to the merge strategy
-no-ff! cherry-pick all commits, even if unchanged
-f,force-rebase! cherry-pick all commits, even if unchanged
-m,merge! use merging strategies to rebase
-i,interactive! let the user edit the list of commits to rebase
-x,exec=! add exec lines after each commit of the editable list
-k,keep-empty preserve empty commits during rebase
-allow-empty-message allow rebasing commits with empty messages
-stat! display a diffstat of what changed upstream
-n,no-stat! do not show diffstat of what changed upstream
-verify allow pre-rebase hook to run
-rerere-autoupdate allow rerere to update index with resolved conflicts
-root! rebase all reachable commits up to the root(s)
-autosquash move commits that begin with squash!/fixup! under -i
-signoff add a Signed-off-by: line to each commit
-committer-date-is-author-date! passed to 'git am'
-ignore-date! passed to 'git am'
-whitespace=! passed to 'git apply'
-ignore-whitespace! passed to 'git apply'
-C=! passed to 'git apply'
-S,gpg-sign? GPG-sign commits
- Actions:
-continue! continue
-abort! abort and check out the original branch
-skip! skip current patch and continue
-edit-todo! edit the todo list during an interactive rebase
-quit! abort but keep HEAD where it is
-show-current-patch! show the patch file being applied or merged
-reschedule-failed-exec automatically reschedule failed exec commands
-"
-. git-sh-setup
-set_reflog_action rebase
-require_work_tree_exists
-cd_to_toplevel
-
-LF='
-'
-ok_to_skip_pre_rebase=
-
-squash_onto=
-unset onto
-unset restrict_revision
-cmd=
-strategy=
-strategy_opts=
-do_merge=
-merge_dir="$GIT_DIR"/rebase-merge
-apply_dir="$GIT_DIR"/rebase-apply
-verbose=
-diffstat=
-test "$(git config --bool rebase.stat)" = true && diffstat=t
-autostash="$(git config --bool rebase.autostash || echo false)"
-fork_point=auto
-git_am_opt=
-git_format_patch_opt=
-rebase_root=
-force_rebase=
-allow_rerere_autoupdate=
-# Non-empty if a rebase was in progress when 'git rebase' was invoked
-in_progress=
-# One of {am, merge, interactive}
-type=
-# One of {"$GIT_DIR"/rebase-apply, "$GIT_DIR"/rebase-merge}
-state_dir=
-# One of {'', continue, skip, abort}, as parsed from command line
-action=
-rebase_merges=
-rebase_cousins=
-preserve_merges=
-autosquash=
-keep_empty=
-allow_empty_message=--allow-empty-message
-signoff=
-reschedule_failed_exec=
-test "$(git config --bool rebase.autosquash)" = "true" && autosquash=t
-case "$(git config --bool commit.gpgsign)" in
-true) gpg_sign_opt=-S ;;
-*) gpg_sign_opt= ;;
-esac
-test "$(git config --bool rebase.reschedulefailedexec)" = "true" &&
-reschedule_failed_exec=--reschedule-failed-exec
-. git-rebase--common
-
-read_basic_state () {
- test -f "$state_dir/head-name" &&
- test -f "$state_dir/onto" &&
- head_name=$(cat "$state_dir"/head-name) &&
- onto=$(cat "$state_dir"/onto) &&
- # We always write to orig-head, but interactive rebase used to write to
- # head. Fall back to reading from head to cover for the case that the
- # user upgraded git with an ongoing interactive rebase.
- if test -f "$state_dir"/orig-head
- then
- orig_head=$(cat "$state_dir"/orig-head)
- else
- orig_head=$(cat "$state_dir"/head)
- fi &&
- test -f "$state_dir"/quiet && GIT_QUIET=t
- test -f "$state_dir"/verbose && verbose=t
- test -f "$state_dir"/strategy && strategy="$(cat "$state_dir"/strategy)"
- test -f "$state_dir"/strategy_opts &&
- strategy_opts="$(cat "$state_dir"/strategy_opts)"
- test -f "$state_dir"/allow_rerere_autoupdate &&
- allow_rerere_autoupdate="$(cat "$state_dir"/allow_rerere_autoupdate)"
- test -f "$state_dir"/gpg_sign_opt &&
- gpg_sign_opt="$(cat "$state_dir"/gpg_sign_opt)"
- test -f "$state_dir"/signoff && {
- signoff="$(cat "$state_dir"/signoff)"
- force_rebase=t
- }
- test -f "$state_dir"/reschedule-failed-exec &&
- reschedule_failed_exec=t
-}
-
-finish_rebase () {
- rm -f "$(git rev-parse --git-path REBASE_HEAD)"
- apply_autostash &&
- { git gc --auto || true; } &&
- rm -rf "$state_dir"
-}
-
-run_interactive () {
- GIT_CHERRY_PICK_HELP="$resolvemsg"
- export GIT_CHERRY_PICK_HELP
-
- test -n "$keep_empty" && keep_empty="--keep-empty"
- test -n "$rebase_merges" && rebase_merges="--rebase-merges"
- test -n "$rebase_cousins" && rebase_cousins="--rebase-cousins"
- test -n "$autosquash" && autosquash="--autosquash"
- test -n "$verbose" && verbose="--verbose"
- test -n "$force_rebase" && force_rebase="--no-ff"
- test -n "$restrict_revision" && \
- restrict_revision="--restrict-revision=^$restrict_revision"
- test -n "$upstream" && upstream="--upstream=$upstream"
- test -n "$onto" && onto="--onto=$onto"
- test -n "$squash_onto" && squash_onto="--squash-onto=$squash_onto"
- test -n "$onto_name" && onto_name="--onto-name=$onto_name"
- test -n "$head_name" && head_name="--head-name=$head_name"
- test -n "$strategy" && strategy="--strategy=$strategy"
- test -n "$strategy_opts" && strategy_opts="--strategy-opts=$strategy_opts"
- test -n "$switch_to" && switch_to="--switch-to=$switch_to"
- test -n "$cmd" && cmd="--cmd=$cmd"
- test -n "$action" && action="--$action"
-
- exec git rebase--interactive "$action" "$keep_empty" "$rebase_merges" "$rebase_cousins" \
- "$upstream" "$onto" "$squash_onto" "$restrict_revision" \
- "$allow_empty_message" "$autosquash" "$verbose" \
- "$force_rebase" "$onto_name" "$head_name" "$strategy" \
- "$strategy_opts" "$cmd" "$switch_to" \
- "$allow_rerere_autoupdate" "$gpg_sign_opt" "$signoff" \
- "$reschedule_failed_exec"
-}
-
-run_specific_rebase () {
- if [ "$interactive_rebase" = implied ]; then
- GIT_SEQUENCE_EDITOR=:
- export GIT_SEQUENCE_EDITOR
- autosquash=
- fi
-
- if test -n "$interactive_rebase" -a -z "$preserve_merges"
- then
- run_interactive
- else
- . git-rebase--$type
-
- if test -z "$preserve_merges"
- then
- git_rebase__$type
- else
- git_rebase__preserve_merges
- fi
- fi
-
- ret=$?
- if test $ret -eq 0
- then
- finish_rebase
- elif test $ret -eq 2 # special exit status for rebase -p
- then
- apply_autostash &&
- rm -rf "$state_dir" &&
- die "Nothing to do"
- fi
- exit $ret
-}
-
-run_pre_rebase_hook () {
- if test -z "$ok_to_skip_pre_rebase" &&
- test -x "$(git rev-parse --git-path hooks/pre-rebase)"
- then
- "$(git rev-parse --git-path hooks/pre-rebase)" ${1+"$@"} ||
- die "$(gettext "The pre-rebase hook refused to rebase.")"
- fi
-}
-
-test -f "$apply_dir"/applying &&
- die "$(gettext "It looks like 'git am' is in progress. Cannot rebase.")"
-
-if test -d "$apply_dir"
-then
- type=am
- state_dir="$apply_dir"
-elif test -d "$merge_dir"
-then
- type=interactive
- if test -d "$merge_dir"/rewritten
- then
- type=preserve-merges
- interactive_rebase=explicit
- preserve_merges=t
- elif test -f "$merge_dir"/interactive
- then
- interactive_rebase=explicit
- fi
- state_dir="$merge_dir"
-fi
-test -n "$type" && in_progress=t
-
-total_argc=$#
-while test $# != 0
-do
- case "$1" in
- --no-verify)
- ok_to_skip_pre_rebase=yes
- ;;
- --verify)
- ok_to_skip_pre_rebase=
- ;;
- --continue|--skip|--abort|--quit|--edit-todo|--show-current-patch)
- test $total_argc -eq 2 || usage
- action=${1##--}
- ;;
- --onto=*)
- onto="${1#--onto=}"
- ;;
- --exec=*)
- cmd="${cmd}exec ${1#--exec=}${LF}"
- test -z "$interactive_rebase" && interactive_rebase=implied
- ;;
- --interactive)
- interactive_rebase=explicit
- ;;
- --keep-empty)
- keep_empty=yes
- ;;
- --allow-empty-message)
- allow_empty_message=--allow-empty-message
- ;;
- --no-keep-empty)
- keep_empty=
- ;;
- --rebase-merges)
- rebase_merges=t
- test -z "$interactive_rebase" && interactive_rebase=implied
- ;;
- --rebase-merges=*)
- rebase_merges=t
- case "${1#*=}" in
- rebase-cousins) rebase_cousins=t;;
- no-rebase-cousins) rebase_cousins=;;
- *) die "Unknown mode: $1";;
- esac
- test -z "$interactive_rebase" && interactive_rebase=implied
- ;;
- --preserve-merges)
- preserve_merges=t
- test -z "$interactive_rebase" && interactive_rebase=implied
- ;;
- --autosquash)
- autosquash=t
- ;;
- --no-autosquash)
- autosquash=
- ;;
- --fork-point)
- fork_point=t
- ;;
- --no-fork-point)
- fork_point=
- ;;
- --merge)
- do_merge=t
- ;;
- --strategy-option=*)
- strategy_opts="$strategy_opts $(git rev-parse --sq-quote "--${1#--strategy-option=}" | sed -e s/^.//)"
- do_merge=t
- test -z "$strategy" && strategy=recursive
- ;;
- --strategy=*)
- strategy="${1#--strategy=}"
- do_merge=t
- ;;
- --no-stat)
- diffstat=
- ;;
- --stat)
- diffstat=t
- ;;
- --autostash)
- autostash=true
- ;;
- --no-autostash)
- autostash=false
- ;;
- --verbose)
- verbose=t
- diffstat=t
- GIT_QUIET=
- ;;
- --quiet)
- GIT_QUIET=t
- git_am_opt="$git_am_opt -q"
- verbose=
- diffstat=
- ;;
- --whitespace=*)
- git_am_opt="$git_am_opt --whitespace=${1#--whitespace=}"
- case "${1#--whitespace=}" in
- fix|strip)
- force_rebase=t
- ;;
- warn|nowarn|error|error-all)
- ;; # okay, known whitespace option
- *)
- die "fatal: Invalid whitespace option: '${1#*=}'"
- ;;
- esac
- ;;
- --ignore-whitespace)
- git_am_opt="$git_am_opt $1"
- ;;
- --signoff)
- signoff=--signoff
- ;;
- --no-signoff)
- signoff=
- ;;
- --committer-date-is-author-date|--ignore-date)
- git_am_opt="$git_am_opt $1"
- force_rebase=t
- ;;
- -C*[!0-9]*)
- die "fatal: switch \`C' expects a numerical value"
- ;;
- -C*)
- git_am_opt="$git_am_opt $1"
- ;;
- --root)
- rebase_root=t
- ;;
- --force-rebase|--no-ff)
- force_rebase=t
- ;;
- --rerere-autoupdate|--no-rerere-autoupdate)
- allow_rerere_autoupdate="$1"
- ;;
- --gpg-sign)
- gpg_sign_opt=-S
- ;;
- --gpg-sign=*)
- gpg_sign_opt="-S${1#--gpg-sign=}"
- ;;
- --reschedule-failed-exec)
- reschedule_failed_exec=--reschedule-failed-exec
- ;;
- --no-reschedule-failed-exec)
- reschedule_failed_exec=
- ;;
- --)
- shift
- break
- ;;
- *)
- usage
- ;;
- esac
- shift
-done
-test $# -gt 2 && usage
-
-if test -n "$action"
-then
- test -z "$in_progress" && die "$(gettext "No rebase in progress?")"
- # Only interactive rebase uses detailed reflog messages
- if test -n "$interactive_rebase" && test "$GIT_REFLOG_ACTION" = rebase
- then
- GIT_REFLOG_ACTION="rebase -i ($action)"
- export GIT_REFLOG_ACTION
- fi
-fi
-
-if test "$action" = "edit-todo" && test -z "$interactive_rebase"
-then
- die "$(gettext "The --edit-todo action can only be used during interactive rebase.")"
-fi
-
-case "$action" in
-continue)
- # Sanity check
- git rev-parse --verify HEAD >/dev/null ||
- die "$(gettext "Cannot read HEAD")"
- git update-index --ignore-submodules --refresh &&
- git diff-files --quiet --ignore-submodules || {
- echo "$(gettext "You must edit all merge conflicts and then
-mark them as resolved using git add")"
- exit 1
- }
- read_basic_state
- run_specific_rebase
- ;;
-skip)
- output git reset --hard HEAD || exit $?
- read_basic_state
- run_specific_rebase
- ;;
-abort)
- git rerere clear
- read_basic_state
- case "$head_name" in
- refs/*)
- git symbolic-ref -m "rebase: aborting" HEAD $head_name ||
- die "$(eval_gettext "Could not move back to \$head_name")"
- ;;
- esac
- output git reset --hard $orig_head
- finish_rebase
- exit
- ;;
-quit)
- exec rm -rf "$state_dir"
- ;;
-edit-todo)
- run_specific_rebase
- ;;
-show-current-patch)
- run_specific_rebase
- die "BUG: run_specific_rebase is not supposed to return here"
- ;;
-esac
-
-# Make sure no rebase is in progress
-if test -n "$in_progress"
-then
- state_dir_base=${state_dir##*/}
- cmd_live_rebase="git rebase (--continue | --abort | --skip)"
- cmd_clear_stale_rebase="rm -fr \"$state_dir\""
- die "
-$(eval_gettext 'It seems that there is already a $state_dir_base directory, and
-I wonder if you are in the middle of another rebase. If that is the
-case, please try
- $cmd_live_rebase
-If that is not the case, please
- $cmd_clear_stale_rebase
-and run me again. I am stopping in case you still have something
-valuable there.')"
-fi
-
-if test -n "$rebase_root" && test -z "$onto"
-then
- test -z "$interactive_rebase" && interactive_rebase=implied
-fi
-
-if test -n "$keep_empty"
-then
- test -z "$interactive_rebase" && interactive_rebase=implied
-fi
-
-actually_interactive=
-if test -n "$interactive_rebase"
-then
- if test -z "$preserve_merges"
- then
- type=interactive
- else
- type=preserve-merges
- fi
- actually_interactive=t
- state_dir="$merge_dir"
-elif test -n "$do_merge"
-then
- interactive_rebase=implied
- type=interactive
- state_dir="$merge_dir"
-else
- type=am
- state_dir="$apply_dir"
-fi
-
-if test -t 2 && test -z "$GIT_QUIET"
-then
- git_format_patch_opt="$git_format_patch_opt --progress"
-fi
-
-incompatible_opts=$(echo " $git_am_opt " | \
- sed -e 's/ -q / /g' -e 's/^ \(.*\) $/\1/')
-if test -n "$incompatible_opts"
-then
- if test -n "$actually_interactive" || test "$do_merge"
- then
- die "$(gettext "fatal: cannot combine am options with either interactive or merge options")"
- fi
-fi
-
-if test -n "$signoff"
-then
- test -n "$preserve_merges" &&
- die "$(gettext "fatal: cannot combine '--signoff' with '--preserve-merges'")"
- git_am_opt="$git_am_opt $signoff"
- force_rebase=t
-fi
-
-if test -n "$preserve_merges"
-then
- # Note: incompatibility with --signoff handled in signoff block above
- # Note: incompatibility with --interactive is just a strong warning;
- # git-rebase.txt caveats with "unless you know what you are doing"
- test -n "$rebase_merges" &&
- die "$(gettext "fatal: cannot combine '--preserve-merges' with '--rebase-merges'")"
-
- test -n "$reschedule_failed_exec" &&
- die "$(gettext "error: cannot combine '--preserve-merges' with '--reschedule-failed-exec'")"
-fi
-
-if test -n "$rebase_merges"
-then
- test -n "$strategy_opts" &&
- die "$(gettext "fatal: cannot combine '--rebase-merges' with '--strategy-option'")"
- test -n "$strategy" &&
- die "$(gettext "fatal: cannot combine '--rebase-merges' with '--strategy'")"
-fi
-
-if test -z "$rebase_root"
-then
- case "$#" in
- 0)
- if ! upstream_name=$(git rev-parse --symbolic-full-name \
- --verify -q @{upstream} 2>/dev/null)
- then
- . git-parse-remote
- error_on_missing_default_upstream "rebase" "rebase" \
- "against" "git rebase $(gettext '<branch>')"
- fi
-
- test "$fork_point" = auto && fork_point=t
- ;;
- *) upstream_name="$1"
- if test "$upstream_name" = "-"
- then
- upstream_name="@{-1}"
- fi
- shift
- ;;
- esac
- upstream=$(peel_committish "${upstream_name}") ||
- die "$(eval_gettext "invalid upstream '\$upstream_name'")"
- upstream_arg="$upstream_name"
-else
- if test -z "$onto"
- then
- empty_tree=$(git hash-object -t tree /dev/null)
- onto=$(git commit-tree $empty_tree </dev/null)
- squash_onto="$onto"
- fi
- unset upstream_name
- unset upstream
- test $# -gt 1 && usage
- upstream_arg=--root
-fi
-
-# Make sure the branch to rebase onto is valid.
-onto_name=${onto-"$upstream_name"}
-case "$onto_name" in
-*...*)
- if left=${onto_name%...*} right=${onto_name#*...} &&
- onto=$(git merge-base --all ${left:-HEAD} ${right:-HEAD})
- then
- case "$onto" in
- ?*"$LF"?*)
- die "$(eval_gettext "\$onto_name: there are more than one merge bases")"
- ;;
- '')
- die "$(eval_gettext "\$onto_name: there is no merge base")"
- ;;
- esac
- else
- die "$(eval_gettext "\$onto_name: there is no merge base")"
- fi
- ;;
-*)
- onto=$(peel_committish "$onto_name") ||
- die "$(eval_gettext "Does not point to a valid commit: \$onto_name")"
- ;;
-esac
-
-# 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"
-switch_to=
-case "$#" in
-1)
- # Is it "rebase other $branchname" or "rebase other $commit"?
- branch_name="$1"
- switch_to="$1"
-
- # Is it a local branch?
- if git show-ref --verify --quiet -- "refs/heads/$branch_name" &&
- orig_head=$(git rev-parse -q --verify "refs/heads/$branch_name")
- then
- head_name="refs/heads/$branch_name"
- # If not is it a valid ref (branch or commit)?
- elif orig_head=$(git rev-parse -q --verify "$branch_name")
- then
- head_name="detached HEAD"
-
- else
- die "$(eval_gettext "fatal: no such branch/commit '\$branch_name'")"
- fi
- ;;
-0)
- # Do not need to switch branches, we are already on it.
- if branch_name=$(git symbolic-ref -q HEAD)
- then
- head_name=$branch_name
- branch_name=$(expr "z$branch_name" : 'zrefs/heads/\(.*\)')
- else
- head_name="detached HEAD"
- branch_name=HEAD
- fi
- orig_head=$(git rev-parse --verify HEAD) || exit
- ;;
-*)
- die "BUG: unexpected number of arguments left to parse"
- ;;
-esac
-
-if test "$fork_point" = t
-then
- new_upstream=$(git merge-base --fork-point "$upstream_name" \
- "${switch_to:-HEAD}")
- if test -n "$new_upstream"
- then
- restrict_revision=$new_upstream
- fi
-fi
-
-if test "$autostash" = true && ! (require_clean_work_tree) 2>/dev/null
-then
- stash_sha1=$(git stash create "autostash") ||
- die "$(gettext 'Cannot autostash')"
-
- mkdir -p "$state_dir" &&
- echo $stash_sha1 >"$state_dir/autostash" &&
- stash_abbrev=$(git rev-parse --short $stash_sha1) &&
- echo "$(eval_gettext 'Created autostash: $stash_abbrev')" &&
- git reset --hard
-fi
-
-require_clean_work_tree "rebase" "$(gettext "Please commit or stash them.")"
-
-# Now we are rebasing commits $upstream..$orig_head (or with --root,
-# everything leading up to $orig_head) on top of $onto
-
-# Check if we are already based on $onto with linear history,
-# but this should be done only when upstream and onto are the same
-# and if this is not an interactive rebase.
-mb=$(git merge-base "$onto" "$orig_head")
-if test -z "$actually_interactive" && test "$upstream" = "$onto" &&
- test "$mb" = "$onto" && test -z "$restrict_revision" &&
- # linear history?
- ! (git rev-list --parents "$onto".."$orig_head" | sane_grep " .* ") > /dev/null
-then
- if test -z "$force_rebase"
- then
- # Lazily switch to the target branch if needed...
- test -z "$switch_to" ||
- GIT_REFLOG_ACTION="$GIT_REFLOG_ACTION: checkout $switch_to" \
- git checkout -q "$switch_to" --
- if test "$branch_name" = "HEAD" &&
- ! git symbolic-ref -q HEAD
- then
- say "$(eval_gettext "HEAD is up to date.")"
- else
- say "$(eval_gettext "Current branch \$branch_name is up to date.")"
- fi
- finish_rebase
- exit 0
- else
- if test "$branch_name" = "HEAD" &&
- ! git symbolic-ref -q HEAD
- then
- say "$(eval_gettext "HEAD is up to date, rebase forced.")"
- else
- say "$(eval_gettext "Current branch \$branch_name is up to date, rebase forced.")"
- fi
- fi
-fi
-
-# If a hook exists, give it a chance to interrupt
-run_pre_rebase_hook "$upstream_arg" "$@"
-
-if test -n "$diffstat"
-then
- if test -n "$verbose"
- then
- if test -z "$mb"
- then
- echo "$(eval_gettext "Changes to \$onto:")"
- else
- echo "$(eval_gettext "Changes from \$mb to \$onto:")"
- fi
- fi
- mb_tree="${mb:-$(git hash-object -t tree /dev/null)}"
- # We want color (if set), but no pager
- GIT_PAGER='' git diff --stat --summary "$mb_tree" "$onto"
-fi
-
-if test -z "$actually_interactive" && test "$mb" = "$orig_head"
-then
- say "$(eval_gettext "Fast-forwarded \$branch_name to \$onto_name.")"
- GIT_REFLOG_ACTION="$GIT_REFLOG_ACTION: checkout $onto_name" \
- git checkout -q "$onto^0" || die "could not detach HEAD"
- # If the $onto is a proper descendant of the tip of the branch, then
- # we just fast-forwarded.
- git update-ref ORIG_HEAD $orig_head
- move_to_original_branch
- finish_rebase
- exit 0
-fi
-
-test -n "$interactive_rebase" && run_specific_rebase
-
-# Detach HEAD and reset the tree
-say "$(gettext "First, rewinding head to replay your work on top of it...")"
-
-GIT_REFLOG_ACTION="$GIT_REFLOG_ACTION: checkout $onto_name" \
- git checkout -q "$onto^0" || die "could not detach HEAD"
-git update-ref ORIG_HEAD $orig_head
-
-if test -n "$rebase_root"
-then
- revisions="$onto..$orig_head"
-else
- revisions="${restrict_revision-$upstream}..$orig_head"
-fi
-
-run_specific_rebase
diff --git a/t/README b/t/README
index 7a3d582267..385262357b 100644
--- a/t/README
+++ b/t/README
@@ -379,10 +379,6 @@ the --no-sparse command-line argument.
GIT_TEST_PRELOAD_INDEX=<boolean> exercises the preload-index code path
by overriding the minimum number of cache entries required per thread.
-GIT_TEST_REBASE_USE_BUILTIN=<boolean>, when false, disables the
-builtin version of git-rebase. See 'rebase.useBuiltin' in
-git-config(1).
-
GIT_TEST_INDEX_THREADS=<n> enables exercising the multi-threaded loading
of the index for the whole test suite by bypassing the default number of
cache entries and thread minimums. Setting this to 1 will make the
diff --git a/t/t3400-rebase.sh b/t/t3400-rebase.sh
index 3e73f7584c..0a88eed1db 100755
--- a/t/t3400-rebase.sh
+++ b/t/t3400-rebase.sh
@@ -311,4 +311,10 @@ test_expect_success 'rebase--merge.sh and --show-current-patch' '
)
'
+test_expect_success 'rebase -c rebase.useBuiltin=false warning' '
+ test_must_fail env GIT_TEST_REBASE_USE_BUILTIN= \
+ git -c rebase.useBuiltin=false rebase 2>err &&
+ test_i18ngrep "rebase.useBuiltin support has been removed" err
+'
+
test_done
diff --git a/t/t3404-rebase-interactive.sh b/t/t3404-rebase-interactive.sh
index b60b11f9f2..1723e1a858 100755
--- a/t/t3404-rebase-interactive.sh
+++ b/t/t3404-rebase-interactive.sh
@@ -149,12 +149,10 @@ test_expect_success 'rebase -i with the exec command checks tree cleanness' '
test_expect_success 'rebase -x with empty command fails' '
test_when_finished "git rebase --abort ||:" &&
- test_must_fail env GIT_TEST_REBASE_USE_BUILTIN=true \
- git rebase -x "" @ 2>actual &&
+ test_must_fail env git rebase -x "" @ 2>actual &&
test_write_lines "error: empty exec command" >expected &&
test_i18ncmp expected actual &&
- test_must_fail env GIT_TEST_REBASE_USE_BUILTIN=true \
- git rebase -x " " @ 2>actual &&
+ test_must_fail env git rebase -x " " @ 2>actual &&
test_i18ncmp expected actual
'
@@ -162,8 +160,7 @@ LF='
'
test_expect_success 'rebase -x with newline in command fails' '
test_when_finished "git rebase --abort ||:" &&
- test_must_fail env GIT_TEST_REBASE_USE_BUILTIN=true \
- git rebase -x "a${LF}b" @ 2>actual &&
+ test_must_fail env git rebase -x "a${LF}b" @ 2>actual &&
test_write_lines "error: exec commands cannot contain newlines" \
>expected &&
test_i18ncmp expected actual
--
2.21.0.360.g471c308f928
^ permalink raw reply related [relevance 1%]
* Re: git rebase --continue after solving conflicts doesn't work anymore
2019-02-19 14:03 3% ` Sebastián Mancilla
@ 2019-02-19 14:32 0% ` Phillip Wood
0 siblings, 0 replies; 71+ results
From: Phillip Wood @ 2019-02-19 14:32 UTC (permalink / raw)
To: Sebastián Mancilla, phillip.wood
Cc: Eric Sunshine, Christian Couder, git,
Nguyễn Thái Ngọc Duy
Hi Sebastián
On 19/02/2019 14:03, Sebastián Mancilla wrote:
> My system is macOS Mojave 10.14.2. I normally use Git from Homebrew (currently
> Git 2.20.1).
>
> I investigated this further, and I think I found the problem on my end.
>
> When I actually run "git rebase --interactive <commit>" from the terminal,
> everything works fine.
>
> But almost every time I start my rebases from inside "tig" [0], for which I
> have this mapping:
>
> bind main R <git rebase -i %(commit)
>
> tig will exit after running that command, and then I normally continue working
> on the rebase from the shell. And it is when I start the rebase this way that
> "git rebase --continue" fails after solving conflicts.
>
> Second, I have tig installed with the Nix package manager [1], which shows
>
> $ ~/.nix-profile/bin/tig --version
> tig version 2.4.1
> ncursesw version 6.1.20180127
> readline version 6.3
>
> So, I decided to try with tig from Homebrew, and then the problem
> doesn't happen.
> The Hombrew version of tig shows:
>
> $ /usr/local/bin/tig --version
> tig version 2.4.1
> ncurses version 5.7.20081102
> readline version 8.0
>
> I will keep using tig from Homebrew to avoid issues for now.
>
>
> In summary, the problem only happens when I start the rebase from inside tig,
> but only when tig is the version from the Nix package manager, which has
> different dependencies than the Homebrew version of tig.
> And it happens for Git 2.20.x and master. Git <= 2.19.x works fine.
>
>
> I also did bisect Git (I never though I would be bisecting Git itself).
> It landed in this commit: 4d010a757c (sequencer: use read_author_script(),
> 2018-10-31).
>
> And the content of .git/rebase-merge/author-script is always the same:
>
> GIT_AUTHOR_NAME='Sebastián Mancilla'
> GIT_AUTHOR_EMAIL='smancill@jlab.org'
> GIT_AUTHOR_DATE='@1550530007 -0300
>
Thanks for all the details, the problem is that the older version of git
that the Nix tig uses to start the rebase creates author scripts that
are not correctly quoted (as you can see above) and cannot be read by
the newer version of git you were using to continue the rebase (it
should be possible to continue the rebase with the git bundled with Nix
tig). Anyway I'm glad the Homebrew tig is working for you. When we made
this change and discussed whether we needed backwards compatibility I
think we only discussed the possibility of git being upgrading while a
rebase was stopped for conflict resolution, not the possibility of
people having two different versions of git installed and using one to
start a rebase and the other to continue it.
Best Wishes
Phillip
> Regards
>
>
> [0]: https://github.com/jonas/tig
> [1]: https://nixos.org/nix/
>
> El mar., 19 de feb. de 2019 a la(s) 06:59, Phillip Wood
> (phillip.wood@talktalk.net) escribió:
>>
>> Dear Sebastián
>>
>> On 19/02/2019 07:22, Eric Sunshine wrote:
>>> [cc:+phillip.wood@talktalk.net]
>>
>> Thanks Eric
>>
>>> On Tue, Feb 19, 2019 at 1:45 AM Christian Couder
>>> <christian.couder@gmail.com> wrote:
>>>> On Tue, Feb 19, 2019 at 5:20 AM Sebastián Mancilla <smancill.m@gmail.com> wrote:
>>>>> But since Git 2.20.x it doesn't work anymore. Now after solving the conflicts
>>>>> and running "git rebase --continue" I get this error most of the time:
>>>>>
>>>>> error: unable to dequote value of 'GIT_AUTHOR_DATE'
>>>>
>>>> It looks like this can happen only when an "author-script" file (most
>>>> likely .git/rebase-merge/author-script)
>>
>> or it could be .git/rebase-apply/author-script depending on the options
>> passed to rebase when it started (the sequencer and am use the same code
>> for reading the author script now)
>>
>>>> is read by the sequencer
>>>> mechanism. Could you show us the content of this file on your machine?
>>>
>>> A very good suggestion considering that there have been changes
>>> recently specifically related to the parsing of GIT_AUTHOR_DATE in C
>>> code.
>>
>> That would be very helpful, without seeing that it's hard to know what
>> the problem is.
>>
>> Best Wishes
>>
>> Phillip
>>
>
>
^ permalink raw reply [relevance 0%]
* Re: git rebase --continue after solving conflicts doesn't work anymore
2019-02-19 9:59 0% ` Phillip Wood
@ 2019-02-19 14:03 3% ` Sebastián Mancilla
2019-02-19 14:32 0% ` Phillip Wood
0 siblings, 1 reply; 71+ results
From: Sebastián Mancilla @ 2019-02-19 14:03 UTC (permalink / raw)
To: phillip.wood; +Cc: Eric Sunshine, Christian Couder, git
My system is macOS Mojave 10.14.2. I normally use Git from Homebrew (currently
Git 2.20.1).
I investigated this further, and I think I found the problem on my end.
When I actually run "git rebase --interactive <commit>" from the terminal,
everything works fine.
But almost every time I start my rebases from inside "tig" [0], for which I
have this mapping:
bind main R <git rebase -i %(commit)
tig will exit after running that command, and then I normally continue working
on the rebase from the shell. And it is when I start the rebase this way that
"git rebase --continue" fails after solving conflicts.
Second, I have tig installed with the Nix package manager [1], which shows
$ ~/.nix-profile/bin/tig --version
tig version 2.4.1
ncursesw version 6.1.20180127
readline version 6.3
So, I decided to try with tig from Homebrew, and then the problem
doesn't happen.
The Hombrew version of tig shows:
$ /usr/local/bin/tig --version
tig version 2.4.1
ncurses version 5.7.20081102
readline version 8.0
I will keep using tig from Homebrew to avoid issues for now.
In summary, the problem only happens when I start the rebase from inside tig,
but only when tig is the version from the Nix package manager, which has
different dependencies than the Homebrew version of tig.
And it happens for Git 2.20.x and master. Git <= 2.19.x works fine.
I also did bisect Git (I never though I would be bisecting Git itself).
It landed in this commit: 4d010a757c (sequencer: use read_author_script(),
2018-10-31).
And the content of .git/rebase-merge/author-script is always the same:
GIT_AUTHOR_NAME='Sebastián Mancilla'
GIT_AUTHOR_EMAIL='smancill@jlab.org'
GIT_AUTHOR_DATE='@1550530007 -0300
Regards
[0]: https://github.com/jonas/tig
[1]: https://nixos.org/nix/
El mar., 19 de feb. de 2019 a la(s) 06:59, Phillip Wood
(phillip.wood@talktalk.net) escribió:
>
> Dear Sebastián
>
> On 19/02/2019 07:22, Eric Sunshine wrote:
> > [cc:+phillip.wood@talktalk.net]
>
> Thanks Eric
>
> > On Tue, Feb 19, 2019 at 1:45 AM Christian Couder
> > <christian.couder@gmail.com> wrote:
> >> On Tue, Feb 19, 2019 at 5:20 AM Sebastián Mancilla <smancill.m@gmail.com> wrote:
> >>> But since Git 2.20.x it doesn't work anymore. Now after solving the conflicts
> >>> and running "git rebase --continue" I get this error most of the time:
> >>>
> >>> error: unable to dequote value of 'GIT_AUTHOR_DATE'
> >>
> >> It looks like this can happen only when an "author-script" file (most
> >> likely .git/rebase-merge/author-script)
>
> or it could be .git/rebase-apply/author-script depending on the options
> passed to rebase when it started (the sequencer and am use the same code
> for reading the author script now)
>
> >> is read by the sequencer
> >> mechanism. Could you show us the content of this file on your machine?
> >
> > A very good suggestion considering that there have been changes
> > recently specifically related to the parsing of GIT_AUTHOR_DATE in C
> > code.
>
> That would be very helpful, without seeing that it's hard to know what
> the problem is.
>
> Best Wishes
>
> Phillip
>
--
Sebastian Mancilla
^ permalink raw reply [relevance 3%]
* Re: git rebase --continue after solving conflicts doesn't work anymore
2019-02-19 7:22 0% ` Eric Sunshine
@ 2019-02-19 9:59 0% ` Phillip Wood
2019-02-19 14:03 3% ` Sebastián Mancilla
0 siblings, 1 reply; 71+ results
From: Phillip Wood @ 2019-02-19 9:59 UTC (permalink / raw)
To: Eric Sunshine, Christian Couder, Sebastián Mancilla; +Cc: git
Dear Sebastián
On 19/02/2019 07:22, Eric Sunshine wrote:
> [cc:+phillip.wood@talktalk.net]
Thanks Eric
> On Tue, Feb 19, 2019 at 1:45 AM Christian Couder
> <christian.couder@gmail.com> wrote:
>> On Tue, Feb 19, 2019 at 5:20 AM Sebastián Mancilla <smancill.m@gmail.com> wrote:
>>> But since Git 2.20.x it doesn't work anymore. Now after solving the conflicts
>>> and running "git rebase --continue" I get this error most of the time:
>>>
>>> error: unable to dequote value of 'GIT_AUTHOR_DATE'
>>
>> It looks like this can happen only when an "author-script" file (most
>> likely .git/rebase-merge/author-script)
or it could be .git/rebase-apply/author-script depending on the options
passed to rebase when it started (the sequencer and am use the same code
for reading the author script now)
>> is read by the sequencer
>> mechanism. Could you show us the content of this file on your machine?
>
> A very good suggestion considering that there have been changes
> recently specifically related to the parsing of GIT_AUTHOR_DATE in C
> code.
That would be very helpful, without seeing that it's hard to know what
the problem is.
Best Wishes
Phillip
^ permalink raw reply [relevance 0%]
* Re: git rebase --continue after solving conflicts doesn't work anymore
2019-02-19 6:45 0% ` Christian Couder
@ 2019-02-19 7:22 0% ` Eric Sunshine
2019-02-19 9:59 0% ` Phillip Wood
0 siblings, 1 reply; 71+ results
From: Eric Sunshine @ 2019-02-19 7:22 UTC (permalink / raw)
To: Christian Couder; +Cc: Sebastián Mancilla, git, Phillip Wood
[cc:+phillip.wood@talktalk.net]
On Tue, Feb 19, 2019 at 1:45 AM Christian Couder
<christian.couder@gmail.com> wrote:
> On Tue, Feb 19, 2019 at 5:20 AM Sebastián Mancilla <smancill.m@gmail.com> wrote:
> > But since Git 2.20.x it doesn't work anymore. Now after solving the conflicts
> > and running "git rebase --continue" I get this error most of the time:
> >
> > error: unable to dequote value of 'GIT_AUTHOR_DATE'
>
> It looks like this can happen only when an "author-script" file (most
> likely .git/rebase-merge/author-script) is read by the sequencer
> mechanism. Could you show us the content of this file on your machine?
A very good suggestion considering that there have been changes
recently specifically related to the parsing of GIT_AUTHOR_DATE in C
code.
^ permalink raw reply [relevance 0%]
* Re: git rebase --continue after solving conflicts doesn't work anymore
2019-02-19 4:17 5% git rebase --continue after solving conflicts doesn't work anymore Sebastián Mancilla
@ 2019-02-19 6:45 0% ` Christian Couder
2019-02-19 7:22 0% ` Eric Sunshine
0 siblings, 1 reply; 71+ results
From: Christian Couder @ 2019-02-19 6:45 UTC (permalink / raw)
To: Sebastián Mancilla; +Cc: git
On Tue, Feb 19, 2019 at 5:20 AM Sebastián Mancilla <smancill.m@gmail.com> wrote:
>
> I've always used "git rebase --continue" as the help shows:
>
> Resolve all conflicts manually, mark them as resolved with
> "git add/rm <conflicted_files>", then run "git rebase --continue".
>
> and Git would apply the conflicted commit without issues and the rebase would
> continue.
>
> But since Git 2.20.x it doesn't work anymore. Now after solving the conflicts
> and running "git rebase --continue" I get this error most of the time:
>
> error: unable to dequote value of 'GIT_AUTHOR_DATE'
It looks like this can happen only when an "author-script" file (most
likely .git/rebase-merge/author-script) is read by the sequencer
mechanism. Could you show us the content of this file on your machine?
It could also help if you could give us information about your OS and
locale.
> error: you have staged changes in your working tree
> If these changes are meant to be squashed into the previous commit, run:
>
> git commit --amend
>
> If they are meant to go into a new commit, run:
>
> git commit
>
> In both cases, once you're done, continue with:
>
> git rebase --continue
>
> error: could not commit staged changes.
>
> Now I have to run "git commit" first to commit manually and then do the "git
> rebase --continue".
>
> I've compiled 2.18.2 and 2.19.2 to check and the error doesn't happen.
>
> It is present in 2.20.x and current master v2.21.0-rc1-9-gca1b411648.
>
>
> Is it a regression because of the new rebase written in C?
That's possible.
Thanks for the report,
Christian.
^ permalink raw reply [relevance 0%]
* git rebase --continue after solving conflicts doesn't work anymore
@ 2019-02-19 4:17 5% Sebastián Mancilla
2019-02-19 6:45 0% ` Christian Couder
0 siblings, 1 reply; 71+ results
From: Sebastián Mancilla @ 2019-02-19 4:17 UTC (permalink / raw)
To: git
I've always used "git rebase --continue" as the help shows:
Resolve all conflicts manually, mark them as resolved with
"git add/rm <conflicted_files>", then run "git rebase --continue".
and Git would apply the conflicted commit without issues and the rebase would
continue.
But since Git 2.20.x it doesn't work anymore. Now after solving the conflicts
and running "git rebase --continue" I get this error most of the time:
error: unable to dequote value of 'GIT_AUTHOR_DATE'
error: you have staged changes in your working tree
If these changes are meant to be squashed into the previous commit, run:
git commit --amend
If they are meant to go into a new commit, run:
git commit
In both cases, once you're done, continue with:
git rebase --continue
error: could not commit staged changes.
Now I have to run "git commit" first to commit manually and then do the "git
rebase --continue".
I've compiled 2.18.2 and 2.19.2 to check and the error doesn't happen.
It is present in 2.20.x and current master v2.21.0-rc1-9-gca1b411648.
Is it a regression because of the new rebase written in C?
--
Sebastian Mancilla
^ permalink raw reply [relevance 5%]
* Re: 2.21: Change in ref advertisement handling?
2019-02-16 2:45 4% 2.21: Change in ref advertisement handling? Bryan Turner
@ 2019-02-16 6:45 0% ` Jeff King
0 siblings, 0 replies; 71+ results
From: Jeff King @ 2019-02-16 6:45 UTC (permalink / raw)
To: Bryan Turner; +Cc: Git Users
On Fri, Feb 15, 2019 at 06:45:42PM -0800, Bryan Turner wrote:
> In Bitbucket Server's Git test suite, we have some lazy tests that use
> a stub HTTP server with mocked payloads to feed a Git client, to test
> its behavior.
>
> For some of those tests, we have the server configured to send a
> response body like this for a ref advertisement:
> 76d28b849be7fb3301e4bd14fb28328947b4f5a1<tab>HEAD<newline>
> 76d28b849be7fb3301e4bd14fb28328947b4f5a1<tab>refs/heads/master<newline>
>
> There are headers we set, like "Content-Type:
> application/x-git-upload-pack-advertisement", but that's the response.
> It's not packeted or anything.
>
> [...]
>
> First let me say, I had no idea these tests of ours existed, and I'm
> surprised that they worked on Git 2.20 and older, given that the
> response isn't in proper pkt-line format.
I believe older versions of Git would have fallen back to dumb-http
here. Do your tests actually follow-up with a real object fetch, or are
they just listing the refs? If the latter, I think it would "work" even
if your server does not otherwise implement dumb-http.
> I'm not looking for anything to change here, let me hasten to add; I'm
> just interested in some clarification. Why did our invalid ref
> advertisement response work in older Git versions? Why has it stopped
> working in 2.21?
This is almost certainly due to my 8ee3e120cd (remote-curl: refactor
smart-http discovery, 2019-02-06), which intentionally tightened a few
corner cases to match the spec. In particular, once you respond with
"application/x-git-upload-pack-advertisement", we fully commit to
smart-http and complain if you further violate the spec, rather than
falling back to dumb-http.
-Peff
^ permalink raw reply [relevance 0%]
* 2.21: Change in ref advertisement handling?
@ 2019-02-16 2:45 4% Bryan Turner
2019-02-16 6:45 0% ` Jeff King
0 siblings, 1 reply; 71+ results
From: Bryan Turner @ 2019-02-16 2:45 UTC (permalink / raw)
To: Git Users
In Bitbucket Server's Git test suite, we have some lazy tests that use
a stub HTTP server with mocked payloads to feed a Git client, to test
its behavior.
For some of those tests, we have the server configured to send a
response body like this for a ref advertisement:
76d28b849be7fb3301e4bd14fb28328947b4f5a1<tab>HEAD<newline>
76d28b849be7fb3301e4bd14fb28328947b4f5a1<tab>refs/heads/master<newline>
There are headers we set, like "Content-Type:
application/x-git-upload-pack-advertisement", but that's the response.
It's not packeted or anything.
If I use (for example) Git 2.17.1 and run "git ls-remote <url>" with
that response, Git happily displays essentially identical output, HEAD
and master at 76d28b849be7fb3301e4bd14fb28328947b4f5a1.
If I run that "git ls-remote" with 2.21.0-rc1, Git displays "fatal:
the remote end hung up unexpectedly" and dies.
If I change the mocked response to:
001e# service=git-upload-pack<newline>
0000<no newline; wrapping just for display>
003276d28b849be7fb3301e4bd14fb28328947b4f5a1<sp>HEAD<newline>
003f76d28b849be7fb3301e4bd14fb28328947b4f5a1<sp>refs/heads/master<newline>
0000
This works in both 2.17.1 and 2.21.0-rc1. (I was a little surprised
Git didn't care about the lack of a NUL byte after "HEAD" with the
capabilities after it, before the newline, but even 2.21 doesn't seem
to mind.)
First let me say, I had no idea these tests of ours existed, and I'm
surprised that they worked on Git 2.20 and older, given that the
response isn't in proper pkt-line format.
I'm not looking for anything to change here, let me hasten to add; I'm
just interested in some clarification. Why did our invalid ref
advertisement response work in older Git versions? Why has it stopped
working in 2.21?
Best regards,
Bryan Turner
^ permalink raw reply [relevance 4%]
* Re: [PATCH] rebase: remove the rebase.useBuiltin setting
2019-02-13 14:22 1% ` [PATCH] rebase: remove the rebase.useBuiltin setting Ævar Arnfjörð Bjarmason
2019-02-13 16:25 0% ` Johannes Schindelin
@ 2019-02-13 20:46 0% ` Junio C Hamano
2019-03-14 13:24 1% ` [PATCH v2] " Ævar Arnfjörð Bjarmason
2 siblings, 0 replies; 71+ results
From: Junio C Hamano @ 2019-02-13 20:46 UTC (permalink / raw)
To: Ævar Arnfjörð Bjarmason
Cc: git, Phillip Wood, Johannes Schindelin
Ævar Arnfjörð Bjarmason <avarab@gmail.com> writes:
> Remove the rebase.useBuiltin setting, which was added as an escape
> hatch to disable the builtin version of rebase first released with Git
> 2.20.
> ...
>> This patch breaks the test suite (with these two new tests) under
>> GIT_TEST_REBASE_USE_BUILTIN=false. So a 2.21.0-rc0 regression.
>>
>> It would have been better to raise this before the rc period, but I just
>> noticed this now, but we can now:
>>
>> 1. Skip the test under that mode
>> 2. Fix the shell code to do the same thing
>> 3. Just remove the shell code & GIT_TEST_REBASE_USE_BUILTIN=false mode
>>
>> Maybe we should just do #3. The reason for the escape hatch was in case
>> we had bugs, and now we've had a full release cycle, but maybe that's
>> too early...
If a new feature is added to the built-in version, I do not think it
is a good use of our time to backport it to the scripted version, if
only to make the USE_BUILTIN=false test pass, especially when the
problematic thing is a fringe feature, lack of which would not
affect the real users too much.
So I do agree that #2 is a bad choice.
However, it is way too late in the cycle to say that we will ship
without the escape hatch for the upcoming release, so #3 is a non
starter. And you are reading too much into a full release cycle,
which is merely less than 1k commits and a bit short of 3 months.
It would however be long enough to declare victory _immediately
after_ the upcoming release and start the next cycle without the
escape hatch. At that point we'd be committed to maintain only the
built-in version.
The more important every-day features should still be covered by
tests, if the scripted ones are to be kept as escape hatch. So to
me #1 looks like the only sensible choice at this point, if you want
to see a test cycle with USE_BUILTIN=false to fully pass (i.e. by
skipping the ones that are known not to pass).
^ permalink raw reply [relevance 0%]
* Re: [PATCH] rebase: remove the rebase.useBuiltin setting
2019-02-13 14:22 1% ` [PATCH] rebase: remove the rebase.useBuiltin setting Ævar Arnfjörð Bjarmason
@ 2019-02-13 16:25 0% ` Johannes Schindelin
2019-02-13 20:46 0% ` Junio C Hamano
2019-03-14 13:24 1% ` [PATCH v2] " Ævar Arnfjörð Bjarmason
2 siblings, 0 replies; 71+ results
From: Johannes Schindelin @ 2019-02-13 16:25 UTC (permalink / raw)
To: Ævar Arnfjörð Bjarmason; +Cc: git, Junio C Hamano, Phillip Wood
[-- Attachment #1: Type: text/plain, Size: 29218 bytes --]
Hi Ævar,
On Wed, 13 Feb 2019, Ævar Arnfjörð Bjarmason wrote:
> Remove the rebase.useBuiltin setting, which was added as an escape
> hatch to disable the builtin version of rebase first released with Git
> 2.20.
I like it!
Thanks,
Dscho
>
> See [1] for the initial implementation of rebase.useBuiltin, and [2]
> and [3] for the documentation and corresponding
> GIT_TEST_REBASE_USE_BUILTIN option.
>
> As noted in [4] the test suite hasn't passed with
> GIT_TEST_REBASE_USE_BUILTIN=false since c762aada1a ("rebase -x: sanity
> check command", 2019-01-29). We could fix this as we did for another
> such bug in 7e097e27d3 ("legacy-rebase: backport -C<n> and
> --whitespace=<option> checks", 2018-11-20), or just decide that the
> built-in version is stable enough, and remove the legacy version. This
> patch implements that removal of the legacy version.
>
> 1. 55071ea248 ("rebase: start implementing it as a builtin",
> 2018-08-07)
> 2. d8d0a546f0 ("rebase doc: document rebase.useBuiltin", 2018-11-14)
> 3. 62c23938fa ("tests: add a special setup where rebase.useBuiltin is
> off", 2018-11-14)
> 4. https://public-inbox.org/git/87ftsrke6r.fsf@evledraar.gmail.com/
> ---
>
> On Wed, Feb 13 2019, Ævar Arnfjörð Bjarmason wrote:
> > On Tue, Jan 29 2019, Phillip Wood wrote:
> >> [...]
> >> test_expect_success 'rebase -i with exec of inexistent command' '
> >> git checkout master &&
> >> test_when_finished "git rebase --abort" &&
> >
> > This patch breaks the test suite (with these two new tests) under
> > GIT_TEST_REBASE_USE_BUILTIN=false. So a 2.21.0-rc0 regression.
> >
> > It would have been better to raise this before the rc period, but I just
> > noticed this now, but we can now:
> >
> > 1. Skip the test under that mode
> > 2. Fix the shell code to do the same thing
> > 3. Just remove the shell code & GIT_TEST_REBASE_USE_BUILTIN=false mode
> >
> > Maybe we should just do #3. The reason for the escape hatch was in case
> > we had bugs, and now we've had a full release cycle, but maybe that's
> > too early...
>
> Here is approach #3, intended for 2.21, but I'll defer to Junio on
> whether we should take that approach.
>
> Documentation/config/rebase.txt | 17 +-
> Makefile | 1 -
> builtin/rebase.c | 17 +-
> git-legacy-rebase.sh | 770 --------------------------------
> t/README | 4 -
> t/t3400-rebase.sh | 6 +
> 6 files changed, 13 insertions(+), 802 deletions(-)
> delete mode 100755 git-legacy-rebase.sh
>
> diff --git a/Documentation/config/rebase.txt b/Documentation/config/rebase.txt
> index 331d250e04..c747452983 100644
> --- a/Documentation/config/rebase.txt
> +++ b/Documentation/config/rebase.txt
> @@ -1,16 +1,9 @@
> rebase.useBuiltin::
> - Set to `false` to use the legacy shellscript implementation of
> - linkgit:git-rebase[1]. Is `true` by default, which means use
> - the built-in rewrite of it in C.
> -+
> -The C rewrite is first included with Git version 2.20. This option
> -serves an an escape hatch to re-enable the legacy version in case any
> -bugs are found in the rewrite. This option and the shellscript version
> -of linkgit:git-rebase[1] will be removed in some future release.
> -+
> -If you find some reason to set this option to `false` other than
> -one-off testing you should report the behavior difference as a bug in
> -git.
> + Unused configuration variable. Used between Git version 2.20
> + and 2.21 as an escape hatch to enable the legacy shellscript
> + implementation of rebase. Now the built-in rewrite of it in C
> + is always used. Setting this will emit a warning, to alert any
> + remaining users that setting this now does nothing.
>
> rebase.stat::
> Whether to show a diffstat of what changed upstream since the last
> diff --git a/Makefile b/Makefile
> index 0e13a5b469..58dceccd8a 100644
> --- a/Makefile
> +++ b/Makefile
> @@ -626,7 +626,6 @@ SCRIPT_SH += git-merge-one-file.sh
> SCRIPT_SH += git-merge-resolve.sh
> SCRIPT_SH += git-mergetool.sh
> SCRIPT_SH += git-quiltimport.sh
> -SCRIPT_SH += git-legacy-rebase.sh
> SCRIPT_SH += git-remote-testgit.sh
> SCRIPT_SH += git-request-pull.sh
> SCRIPT_SH += git-stash.sh
> diff --git a/builtin/rebase.c b/builtin/rebase.c
> index 7c7bc13e91..37a036933d 100644
> --- a/builtin/rebase.c
> +++ b/builtin/rebase.c
> @@ -1135,21 +1135,8 @@ int cmd_rebase(int argc, const char **argv, const char *prefix)
> };
> int i;
>
> - /*
> - * 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 (!use_builtin_rebase())
> + warning(_("The rebase.useBuiltin support has been removed!"));
>
> if (argc == 2 && !strcmp(argv[1], "-h"))
> usage_with_options(builtin_rebase_usage,
> diff --git a/git-legacy-rebase.sh b/git-legacy-rebase.sh
> deleted file mode 100755
> index 5c2c4e5276..0000000000
> --- a/git-legacy-rebase.sh
> +++ /dev/null
> @@ -1,770 +0,0 @@
> -#!/bin/sh
> -#
> -# Copyright (c) 2005 Junio C Hamano.
> -#
> -
> -SUBDIRECTORY_OK=Yes
> -OPTIONS_KEEPDASHDASH=
> -OPTIONS_STUCKLONG=t
> -OPTIONS_SPEC="\
> -git rebase [-i] [options] [--exec <cmd>] [--onto <newbase>] [<upstream>] [<branch>]
> -git rebase [-i] [options] [--exec <cmd>] [--onto <newbase>] --root [<branch>]
> -git rebase --continue | --abort | --skip | --edit-todo
> ---
> - Available options are
> -v,verbose! display a diffstat of what changed upstream
> -q,quiet! be quiet. implies --no-stat
> -autostash automatically stash/stash pop before and after
> -fork-point use 'merge-base --fork-point' to refine upstream
> -onto=! rebase onto given branch instead of upstream
> -r,rebase-merges? try to rebase merges instead of skipping them
> -p,preserve-merges! try to recreate merges instead of ignoring them
> -s,strategy=! use the given merge strategy
> -X,strategy-option=! pass the argument through to the merge strategy
> -no-ff! cherry-pick all commits, even if unchanged
> -f,force-rebase! cherry-pick all commits, even if unchanged
> -m,merge! use merging strategies to rebase
> -i,interactive! let the user edit the list of commits to rebase
> -x,exec=! add exec lines after each commit of the editable list
> -k,keep-empty preserve empty commits during rebase
> -allow-empty-message allow rebasing commits with empty messages
> -stat! display a diffstat of what changed upstream
> -n,no-stat! do not show diffstat of what changed upstream
> -verify allow pre-rebase hook to run
> -rerere-autoupdate allow rerere to update index with resolved conflicts
> -root! rebase all reachable commits up to the root(s)
> -autosquash move commits that begin with squash!/fixup! under -i
> -signoff add a Signed-off-by: line to each commit
> -committer-date-is-author-date! passed to 'git am'
> -ignore-date! passed to 'git am'
> -whitespace=! passed to 'git apply'
> -ignore-whitespace! passed to 'git apply'
> -C=! passed to 'git apply'
> -S,gpg-sign? GPG-sign commits
> - Actions:
> -continue! continue
> -abort! abort and check out the original branch
> -skip! skip current patch and continue
> -edit-todo! edit the todo list during an interactive rebase
> -quit! abort but keep HEAD where it is
> -show-current-patch! show the patch file being applied or merged
> -reschedule-failed-exec automatically reschedule failed exec commands
> -"
> -. git-sh-setup
> -set_reflog_action rebase
> -require_work_tree_exists
> -cd_to_toplevel
> -
> -LF='
> -'
> -ok_to_skip_pre_rebase=
> -
> -squash_onto=
> -unset onto
> -unset restrict_revision
> -cmd=
> -strategy=
> -strategy_opts=
> -do_merge=
> -merge_dir="$GIT_DIR"/rebase-merge
> -apply_dir="$GIT_DIR"/rebase-apply
> -verbose=
> -diffstat=
> -test "$(git config --bool rebase.stat)" = true && diffstat=t
> -autostash="$(git config --bool rebase.autostash || echo false)"
> -fork_point=auto
> -git_am_opt=
> -git_format_patch_opt=
> -rebase_root=
> -force_rebase=
> -allow_rerere_autoupdate=
> -# Non-empty if a rebase was in progress when 'git rebase' was invoked
> -in_progress=
> -# One of {am, merge, interactive}
> -type=
> -# One of {"$GIT_DIR"/rebase-apply, "$GIT_DIR"/rebase-merge}
> -state_dir=
> -# One of {'', continue, skip, abort}, as parsed from command line
> -action=
> -rebase_merges=
> -rebase_cousins=
> -preserve_merges=
> -autosquash=
> -keep_empty=
> -allow_empty_message=--allow-empty-message
> -signoff=
> -reschedule_failed_exec=
> -test "$(git config --bool rebase.autosquash)" = "true" && autosquash=t
> -case "$(git config --bool commit.gpgsign)" in
> -true) gpg_sign_opt=-S ;;
> -*) gpg_sign_opt= ;;
> -esac
> -test "$(git config --bool rebase.reschedulefailedexec)" = "true" &&
> -reschedule_failed_exec=--reschedule-failed-exec
> -. git-rebase--common
> -
> -read_basic_state () {
> - test -f "$state_dir/head-name" &&
> - test -f "$state_dir/onto" &&
> - head_name=$(cat "$state_dir"/head-name) &&
> - onto=$(cat "$state_dir"/onto) &&
> - # We always write to orig-head, but interactive rebase used to write to
> - # head. Fall back to reading from head to cover for the case that the
> - # user upgraded git with an ongoing interactive rebase.
> - if test -f "$state_dir"/orig-head
> - then
> - orig_head=$(cat "$state_dir"/orig-head)
> - else
> - orig_head=$(cat "$state_dir"/head)
> - fi &&
> - test -f "$state_dir"/quiet && GIT_QUIET=t
> - test -f "$state_dir"/verbose && verbose=t
> - test -f "$state_dir"/strategy && strategy="$(cat "$state_dir"/strategy)"
> - test -f "$state_dir"/strategy_opts &&
> - strategy_opts="$(cat "$state_dir"/strategy_opts)"
> - test -f "$state_dir"/allow_rerere_autoupdate &&
> - allow_rerere_autoupdate="$(cat "$state_dir"/allow_rerere_autoupdate)"
> - test -f "$state_dir"/gpg_sign_opt &&
> - gpg_sign_opt="$(cat "$state_dir"/gpg_sign_opt)"
> - test -f "$state_dir"/signoff && {
> - signoff="$(cat "$state_dir"/signoff)"
> - force_rebase=t
> - }
> - test -f "$state_dir"/reschedule-failed-exec &&
> - reschedule_failed_exec=t
> -}
> -
> -finish_rebase () {
> - rm -f "$(git rev-parse --git-path REBASE_HEAD)"
> - apply_autostash &&
> - { git gc --auto || true; } &&
> - rm -rf "$state_dir"
> -}
> -
> -run_interactive () {
> - GIT_CHERRY_PICK_HELP="$resolvemsg"
> - export GIT_CHERRY_PICK_HELP
> -
> - test -n "$keep_empty" && keep_empty="--keep-empty"
> - test -n "$rebase_merges" && rebase_merges="--rebase-merges"
> - test -n "$rebase_cousins" && rebase_cousins="--rebase-cousins"
> - test -n "$autosquash" && autosquash="--autosquash"
> - test -n "$verbose" && verbose="--verbose"
> - test -n "$force_rebase" && force_rebase="--no-ff"
> - test -n "$restrict_revision" && \
> - restrict_revision="--restrict-revision=^$restrict_revision"
> - test -n "$upstream" && upstream="--upstream=$upstream"
> - test -n "$onto" && onto="--onto=$onto"
> - test -n "$squash_onto" && squash_onto="--squash-onto=$squash_onto"
> - test -n "$onto_name" && onto_name="--onto-name=$onto_name"
> - test -n "$head_name" && head_name="--head-name=$head_name"
> - test -n "$strategy" && strategy="--strategy=$strategy"
> - test -n "$strategy_opts" && strategy_opts="--strategy-opts=$strategy_opts"
> - test -n "$switch_to" && switch_to="--switch-to=$switch_to"
> - test -n "$cmd" && cmd="--cmd=$cmd"
> - test -n "$action" && action="--$action"
> -
> - exec git rebase--interactive "$action" "$keep_empty" "$rebase_merges" "$rebase_cousins" \
> - "$upstream" "$onto" "$squash_onto" "$restrict_revision" \
> - "$allow_empty_message" "$autosquash" "$verbose" \
> - "$force_rebase" "$onto_name" "$head_name" "$strategy" \
> - "$strategy_opts" "$cmd" "$switch_to" \
> - "$allow_rerere_autoupdate" "$gpg_sign_opt" "$signoff" \
> - "$reschedule_failed_exec"
> -}
> -
> -run_specific_rebase () {
> - if [ "$interactive_rebase" = implied ]; then
> - GIT_SEQUENCE_EDITOR=:
> - export GIT_SEQUENCE_EDITOR
> - autosquash=
> - fi
> -
> - if test -n "$interactive_rebase" -a -z "$preserve_merges"
> - then
> - run_interactive
> - else
> - . git-rebase--$type
> -
> - if test -z "$preserve_merges"
> - then
> - git_rebase__$type
> - else
> - git_rebase__preserve_merges
> - fi
> - fi
> -
> - ret=$?
> - if test $ret -eq 0
> - then
> - finish_rebase
> - elif test $ret -eq 2 # special exit status for rebase -p
> - then
> - apply_autostash &&
> - rm -rf "$state_dir" &&
> - die "Nothing to do"
> - fi
> - exit $ret
> -}
> -
> -run_pre_rebase_hook () {
> - if test -z "$ok_to_skip_pre_rebase" &&
> - test -x "$(git rev-parse --git-path hooks/pre-rebase)"
> - then
> - "$(git rev-parse --git-path hooks/pre-rebase)" ${1+"$@"} ||
> - die "$(gettext "The pre-rebase hook refused to rebase.")"
> - fi
> -}
> -
> -test -f "$apply_dir"/applying &&
> - die "$(gettext "It looks like 'git am' is in progress. Cannot rebase.")"
> -
> -if test -d "$apply_dir"
> -then
> - type=am
> - state_dir="$apply_dir"
> -elif test -d "$merge_dir"
> -then
> - type=interactive
> - if test -d "$merge_dir"/rewritten
> - then
> - type=preserve-merges
> - interactive_rebase=explicit
> - preserve_merges=t
> - elif test -f "$merge_dir"/interactive
> - then
> - interactive_rebase=explicit
> - fi
> - state_dir="$merge_dir"
> -fi
> -test -n "$type" && in_progress=t
> -
> -total_argc=$#
> -while test $# != 0
> -do
> - case "$1" in
> - --no-verify)
> - ok_to_skip_pre_rebase=yes
> - ;;
> - --verify)
> - ok_to_skip_pre_rebase=
> - ;;
> - --continue|--skip|--abort|--quit|--edit-todo|--show-current-patch)
> - test $total_argc -eq 2 || usage
> - action=${1##--}
> - ;;
> - --onto=*)
> - onto="${1#--onto=}"
> - ;;
> - --exec=*)
> - cmd="${cmd}exec ${1#--exec=}${LF}"
> - test -z "$interactive_rebase" && interactive_rebase=implied
> - ;;
> - --interactive)
> - interactive_rebase=explicit
> - ;;
> - --keep-empty)
> - keep_empty=yes
> - ;;
> - --allow-empty-message)
> - allow_empty_message=--allow-empty-message
> - ;;
> - --no-keep-empty)
> - keep_empty=
> - ;;
> - --rebase-merges)
> - rebase_merges=t
> - test -z "$interactive_rebase" && interactive_rebase=implied
> - ;;
> - --rebase-merges=*)
> - rebase_merges=t
> - case "${1#*=}" in
> - rebase-cousins) rebase_cousins=t;;
> - no-rebase-cousins) rebase_cousins=;;
> - *) die "Unknown mode: $1";;
> - esac
> - test -z "$interactive_rebase" && interactive_rebase=implied
> - ;;
> - --preserve-merges)
> - preserve_merges=t
> - test -z "$interactive_rebase" && interactive_rebase=implied
> - ;;
> - --autosquash)
> - autosquash=t
> - ;;
> - --no-autosquash)
> - autosquash=
> - ;;
> - --fork-point)
> - fork_point=t
> - ;;
> - --no-fork-point)
> - fork_point=
> - ;;
> - --merge)
> - do_merge=t
> - ;;
> - --strategy-option=*)
> - strategy_opts="$strategy_opts $(git rev-parse --sq-quote "--${1#--strategy-option=}" | sed -e s/^.//)"
> - do_merge=t
> - test -z "$strategy" && strategy=recursive
> - ;;
> - --strategy=*)
> - strategy="${1#--strategy=}"
> - do_merge=t
> - ;;
> - --no-stat)
> - diffstat=
> - ;;
> - --stat)
> - diffstat=t
> - ;;
> - --autostash)
> - autostash=true
> - ;;
> - --no-autostash)
> - autostash=false
> - ;;
> - --verbose)
> - verbose=t
> - diffstat=t
> - GIT_QUIET=
> - ;;
> - --quiet)
> - GIT_QUIET=t
> - git_am_opt="$git_am_opt -q"
> - verbose=
> - diffstat=
> - ;;
> - --whitespace=*)
> - git_am_opt="$git_am_opt --whitespace=${1#--whitespace=}"
> - case "${1#--whitespace=}" in
> - fix|strip)
> - force_rebase=t
> - ;;
> - warn|nowarn|error|error-all)
> - ;; # okay, known whitespace option
> - *)
> - die "fatal: Invalid whitespace option: '${1#*=}'"
> - ;;
> - esac
> - ;;
> - --ignore-whitespace)
> - git_am_opt="$git_am_opt $1"
> - ;;
> - --signoff)
> - signoff=--signoff
> - ;;
> - --no-signoff)
> - signoff=
> - ;;
> - --committer-date-is-author-date|--ignore-date)
> - git_am_opt="$git_am_opt $1"
> - force_rebase=t
> - ;;
> - -C*[!0-9]*)
> - die "fatal: switch \`C' expects a numerical value"
> - ;;
> - -C*)
> - git_am_opt="$git_am_opt $1"
> - ;;
> - --root)
> - rebase_root=t
> - ;;
> - --force-rebase|--no-ff)
> - force_rebase=t
> - ;;
> - --rerere-autoupdate|--no-rerere-autoupdate)
> - allow_rerere_autoupdate="$1"
> - ;;
> - --gpg-sign)
> - gpg_sign_opt=-S
> - ;;
> - --gpg-sign=*)
> - gpg_sign_opt="-S${1#--gpg-sign=}"
> - ;;
> - --reschedule-failed-exec)
> - reschedule_failed_exec=--reschedule-failed-exec
> - ;;
> - --no-reschedule-failed-exec)
> - reschedule_failed_exec=
> - ;;
> - --)
> - shift
> - break
> - ;;
> - *)
> - usage
> - ;;
> - esac
> - shift
> -done
> -test $# -gt 2 && usage
> -
> -if test -n "$action"
> -then
> - test -z "$in_progress" && die "$(gettext "No rebase in progress?")"
> - # Only interactive rebase uses detailed reflog messages
> - if test -n "$interactive_rebase" && test "$GIT_REFLOG_ACTION" = rebase
> - then
> - GIT_REFLOG_ACTION="rebase -i ($action)"
> - export GIT_REFLOG_ACTION
> - fi
> -fi
> -
> -if test "$action" = "edit-todo" && test -z "$interactive_rebase"
> -then
> - die "$(gettext "The --edit-todo action can only be used during interactive rebase.")"
> -fi
> -
> -case "$action" in
> -continue)
> - # Sanity check
> - git rev-parse --verify HEAD >/dev/null ||
> - die "$(gettext "Cannot read HEAD")"
> - git update-index --ignore-submodules --refresh &&
> - git diff-files --quiet --ignore-submodules || {
> - echo "$(gettext "You must edit all merge conflicts and then
> -mark them as resolved using git add")"
> - exit 1
> - }
> - read_basic_state
> - run_specific_rebase
> - ;;
> -skip)
> - output git reset --hard HEAD || exit $?
> - read_basic_state
> - run_specific_rebase
> - ;;
> -abort)
> - git rerere clear
> - read_basic_state
> - case "$head_name" in
> - refs/*)
> - git symbolic-ref -m "rebase: aborting" HEAD $head_name ||
> - die "$(eval_gettext "Could not move back to \$head_name")"
> - ;;
> - esac
> - output git reset --hard $orig_head
> - finish_rebase
> - exit
> - ;;
> -quit)
> - exec rm -rf "$state_dir"
> - ;;
> -edit-todo)
> - run_specific_rebase
> - ;;
> -show-current-patch)
> - run_specific_rebase
> - die "BUG: run_specific_rebase is not supposed to return here"
> - ;;
> -esac
> -
> -# Make sure no rebase is in progress
> -if test -n "$in_progress"
> -then
> - state_dir_base=${state_dir##*/}
> - cmd_live_rebase="git rebase (--continue | --abort | --skip)"
> - cmd_clear_stale_rebase="rm -fr \"$state_dir\""
> - die "
> -$(eval_gettext 'It seems that there is already a $state_dir_base directory, and
> -I wonder if you are in the middle of another rebase. If that is the
> -case, please try
> - $cmd_live_rebase
> -If that is not the case, please
> - $cmd_clear_stale_rebase
> -and run me again. I am stopping in case you still have something
> -valuable there.')"
> -fi
> -
> -if test -n "$rebase_root" && test -z "$onto"
> -then
> - test -z "$interactive_rebase" && interactive_rebase=implied
> -fi
> -
> -if test -n "$keep_empty"
> -then
> - test -z "$interactive_rebase" && interactive_rebase=implied
> -fi
> -
> -actually_interactive=
> -if test -n "$interactive_rebase"
> -then
> - if test -z "$preserve_merges"
> - then
> - type=interactive
> - else
> - type=preserve-merges
> - fi
> - actually_interactive=t
> - state_dir="$merge_dir"
> -elif test -n "$do_merge"
> -then
> - interactive_rebase=implied
> - type=interactive
> - state_dir="$merge_dir"
> -else
> - type=am
> - state_dir="$apply_dir"
> -fi
> -
> -if test -t 2 && test -z "$GIT_QUIET"
> -then
> - git_format_patch_opt="$git_format_patch_opt --progress"
> -fi
> -
> -incompatible_opts=$(echo " $git_am_opt " | \
> - sed -e 's/ -q / /g' -e 's/^ \(.*\) $/\1/')
> -if test -n "$incompatible_opts"
> -then
> - if test -n "$actually_interactive" || test "$do_merge"
> - then
> - die "$(gettext "fatal: cannot combine am options with either interactive or merge options")"
> - fi
> -fi
> -
> -if test -n "$signoff"
> -then
> - test -n "$preserve_merges" &&
> - die "$(gettext "fatal: cannot combine '--signoff' with '--preserve-merges'")"
> - git_am_opt="$git_am_opt $signoff"
> - force_rebase=t
> -fi
> -
> -if test -n "$preserve_merges"
> -then
> - # Note: incompatibility with --signoff handled in signoff block above
> - # Note: incompatibility with --interactive is just a strong warning;
> - # git-rebase.txt caveats with "unless you know what you are doing"
> - test -n "$rebase_merges" &&
> - die "$(gettext "fatal: cannot combine '--preserve-merges' with '--rebase-merges'")"
> -
> - test -n "$reschedule_failed_exec" &&
> - die "$(gettext "error: cannot combine '--preserve-merges' with '--reschedule-failed-exec'")"
> -fi
> -
> -if test -n "$rebase_merges"
> -then
> - test -n "$strategy_opts" &&
> - die "$(gettext "fatal: cannot combine '--rebase-merges' with '--strategy-option'")"
> - test -n "$strategy" &&
> - die "$(gettext "fatal: cannot combine '--rebase-merges' with '--strategy'")"
> -fi
> -
> -if test -z "$rebase_root"
> -then
> - case "$#" in
> - 0)
> - if ! upstream_name=$(git rev-parse --symbolic-full-name \
> - --verify -q @{upstream} 2>/dev/null)
> - then
> - . git-parse-remote
> - error_on_missing_default_upstream "rebase" "rebase" \
> - "against" "git rebase $(gettext '<branch>')"
> - fi
> -
> - test "$fork_point" = auto && fork_point=t
> - ;;
> - *) upstream_name="$1"
> - if test "$upstream_name" = "-"
> - then
> - upstream_name="@{-1}"
> - fi
> - shift
> - ;;
> - esac
> - upstream=$(peel_committish "${upstream_name}") ||
> - die "$(eval_gettext "invalid upstream '\$upstream_name'")"
> - upstream_arg="$upstream_name"
> -else
> - if test -z "$onto"
> - then
> - empty_tree=$(git hash-object -t tree /dev/null)
> - onto=$(git commit-tree $empty_tree </dev/null)
> - squash_onto="$onto"
> - fi
> - unset upstream_name
> - unset upstream
> - test $# -gt 1 && usage
> - upstream_arg=--root
> -fi
> -
> -# Make sure the branch to rebase onto is valid.
> -onto_name=${onto-"$upstream_name"}
> -case "$onto_name" in
> -*...*)
> - if left=${onto_name%...*} right=${onto_name#*...} &&
> - onto=$(git merge-base --all ${left:-HEAD} ${right:-HEAD})
> - then
> - case "$onto" in
> - ?*"$LF"?*)
> - die "$(eval_gettext "\$onto_name: there are more than one merge bases")"
> - ;;
> - '')
> - die "$(eval_gettext "\$onto_name: there is no merge base")"
> - ;;
> - esac
> - else
> - die "$(eval_gettext "\$onto_name: there is no merge base")"
> - fi
> - ;;
> -*)
> - onto=$(peel_committish "$onto_name") ||
> - die "$(eval_gettext "Does not point to a valid commit: \$onto_name")"
> - ;;
> -esac
> -
> -# 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"
> -switch_to=
> -case "$#" in
> -1)
> - # Is it "rebase other $branchname" or "rebase other $commit"?
> - branch_name="$1"
> - switch_to="$1"
> -
> - # Is it a local branch?
> - if git show-ref --verify --quiet -- "refs/heads/$branch_name" &&
> - orig_head=$(git rev-parse -q --verify "refs/heads/$branch_name")
> - then
> - head_name="refs/heads/$branch_name"
> - # If not is it a valid ref (branch or commit)?
> - elif orig_head=$(git rev-parse -q --verify "$branch_name")
> - then
> - head_name="detached HEAD"
> -
> - else
> - die "$(eval_gettext "fatal: no such branch/commit '\$branch_name'")"
> - fi
> - ;;
> -0)
> - # Do not need to switch branches, we are already on it.
> - if branch_name=$(git symbolic-ref -q HEAD)
> - then
> - head_name=$branch_name
> - branch_name=$(expr "z$branch_name" : 'zrefs/heads/\(.*\)')
> - else
> - head_name="detached HEAD"
> - branch_name=HEAD
> - fi
> - orig_head=$(git rev-parse --verify HEAD) || exit
> - ;;
> -*)
> - die "BUG: unexpected number of arguments left to parse"
> - ;;
> -esac
> -
> -if test "$fork_point" = t
> -then
> - new_upstream=$(git merge-base --fork-point "$upstream_name" \
> - "${switch_to:-HEAD}")
> - if test -n "$new_upstream"
> - then
> - restrict_revision=$new_upstream
> - fi
> -fi
> -
> -if test "$autostash" = true && ! (require_clean_work_tree) 2>/dev/null
> -then
> - stash_sha1=$(git stash create "autostash") ||
> - die "$(gettext 'Cannot autostash')"
> -
> - mkdir -p "$state_dir" &&
> - echo $stash_sha1 >"$state_dir/autostash" &&
> - stash_abbrev=$(git rev-parse --short $stash_sha1) &&
> - echo "$(eval_gettext 'Created autostash: $stash_abbrev')" &&
> - git reset --hard
> -fi
> -
> -require_clean_work_tree "rebase" "$(gettext "Please commit or stash them.")"
> -
> -# Now we are rebasing commits $upstream..$orig_head (or with --root,
> -# everything leading up to $orig_head) on top of $onto
> -
> -# Check if we are already based on $onto with linear history,
> -# but this should be done only when upstream and onto are the same
> -# and if this is not an interactive rebase.
> -mb=$(git merge-base "$onto" "$orig_head")
> -if test -z "$actually_interactive" && test "$upstream" = "$onto" &&
> - test "$mb" = "$onto" && test -z "$restrict_revision" &&
> - # linear history?
> - ! (git rev-list --parents "$onto".."$orig_head" | sane_grep " .* ") > /dev/null
> -then
> - if test -z "$force_rebase"
> - then
> - # Lazily switch to the target branch if needed...
> - test -z "$switch_to" ||
> - GIT_REFLOG_ACTION="$GIT_REFLOG_ACTION: checkout $switch_to" \
> - git checkout -q "$switch_to" --
> - if test "$branch_name" = "HEAD" &&
> - ! git symbolic-ref -q HEAD
> - then
> - say "$(eval_gettext "HEAD is up to date.")"
> - else
> - say "$(eval_gettext "Current branch \$branch_name is up to date.")"
> - fi
> - finish_rebase
> - exit 0
> - else
> - if test "$branch_name" = "HEAD" &&
> - ! git symbolic-ref -q HEAD
> - then
> - say "$(eval_gettext "HEAD is up to date, rebase forced.")"
> - else
> - say "$(eval_gettext "Current branch \$branch_name is up to date, rebase forced.")"
> - fi
> - fi
> -fi
> -
> -# If a hook exists, give it a chance to interrupt
> -run_pre_rebase_hook "$upstream_arg" "$@"
> -
> -if test -n "$diffstat"
> -then
> - if test -n "$verbose"
> - then
> - if test -z "$mb"
> - then
> - echo "$(eval_gettext "Changes to \$onto:")"
> - else
> - echo "$(eval_gettext "Changes from \$mb to \$onto:")"
> - fi
> - fi
> - mb_tree="${mb:-$(git hash-object -t tree /dev/null)}"
> - # We want color (if set), but no pager
> - GIT_PAGER='' git diff --stat --summary "$mb_tree" "$onto"
> -fi
> -
> -if test -z "$actually_interactive" && test "$mb" = "$orig_head"
> -then
> - say "$(eval_gettext "Fast-forwarded \$branch_name to \$onto_name.")"
> - GIT_REFLOG_ACTION="$GIT_REFLOG_ACTION: checkout $onto_name" \
> - git checkout -q "$onto^0" || die "could not detach HEAD"
> - # If the $onto is a proper descendant of the tip of the branch, then
> - # we just fast-forwarded.
> - git update-ref ORIG_HEAD $orig_head
> - move_to_original_branch
> - finish_rebase
> - exit 0
> -fi
> -
> -test -n "$interactive_rebase" && run_specific_rebase
> -
> -# Detach HEAD and reset the tree
> -say "$(gettext "First, rewinding head to replay your work on top of it...")"
> -
> -GIT_REFLOG_ACTION="$GIT_REFLOG_ACTION: checkout $onto_name" \
> - git checkout -q "$onto^0" || die "could not detach HEAD"
> -git update-ref ORIG_HEAD $orig_head
> -
> -if test -n "$rebase_root"
> -then
> - revisions="$onto..$orig_head"
> -else
> - revisions="${restrict_revision-$upstream}..$orig_head"
> -fi
> -
> -run_specific_rebase
> diff --git a/t/README b/t/README
> index 1326fd7505..decceb8576 100644
> --- a/t/README
> +++ b/t/README
> @@ -374,10 +374,6 @@ the --no-sparse command-line argument.
> GIT_TEST_PRELOAD_INDEX=<boolean> exercises the preload-index code path
> by overriding the minimum number of cache entries required per thread.
>
> -GIT_TEST_REBASE_USE_BUILTIN=<boolean>, when false, disables the
> -builtin version of git-rebase. See 'rebase.useBuiltin' in
> -git-config(1).
> -
> GIT_TEST_INDEX_THREADS=<n> enables exercising the multi-threaded loading
> of the index for the whole test suite by bypassing the default number of
> cache entries and thread minimums. Setting this to 1 will make the
> diff --git a/t/t3400-rebase.sh b/t/t3400-rebase.sh
> index 3e73f7584c..0a88eed1db 100755
> --- a/t/t3400-rebase.sh
> +++ b/t/t3400-rebase.sh
> @@ -311,4 +311,10 @@ test_expect_success 'rebase--merge.sh and --show-current-patch' '
> )
> '
>
> +test_expect_success 'rebase -c rebase.useBuiltin=false warning' '
> + test_must_fail env GIT_TEST_REBASE_USE_BUILTIN= \
> + git -c rebase.useBuiltin=false rebase 2>err &&
> + test_i18ngrep "rebase.useBuiltin support has been removed" err
> +'
> +
> test_done
> --
> 2.20.1.611.gfbb209baf1
>
>
^ permalink raw reply [relevance 0%]
* [PATCH] rebase: remove the rebase.useBuiltin setting
@ 2019-02-13 14:22 1% ` Ævar Arnfjörð Bjarmason
2019-02-13 16:25 0% ` Johannes Schindelin
` (2 more replies)
0 siblings, 3 replies; 71+ results
From: Ævar Arnfjörð Bjarmason @ 2019-02-13 14:22 UTC (permalink / raw)
To: git
Cc: Junio C Hamano, Phillip Wood, Johannes Schindelin,
Ævar Arnfjörð Bjarmason
Remove the rebase.useBuiltin setting, which was added as an escape
hatch to disable the builtin version of rebase first released with Git
2.20.
See [1] for the initial implementation of rebase.useBuiltin, and [2]
and [3] for the documentation and corresponding
GIT_TEST_REBASE_USE_BUILTIN option.
As noted in [4] the test suite hasn't passed with
GIT_TEST_REBASE_USE_BUILTIN=false since c762aada1a ("rebase -x: sanity
check command", 2019-01-29). We could fix this as we did for another
such bug in 7e097e27d3 ("legacy-rebase: backport -C<n> and
--whitespace=<option> checks", 2018-11-20), or just decide that the
built-in version is stable enough, and remove the legacy version. This
patch implements that removal of the legacy version.
1. 55071ea248 ("rebase: start implementing it as a builtin",
2018-08-07)
2. d8d0a546f0 ("rebase doc: document rebase.useBuiltin", 2018-11-14)
3. 62c23938fa ("tests: add a special setup where rebase.useBuiltin is
off", 2018-11-14)
4. https://public-inbox.org/git/87ftsrke6r.fsf@evledraar.gmail.com/
---
On Wed, Feb 13 2019, Ævar Arnfjörð Bjarmason wrote:
> On Tue, Jan 29 2019, Phillip Wood wrote:
>> [...]
>> test_expect_success 'rebase -i with exec of inexistent command' '
>> git checkout master &&
>> test_when_finished "git rebase --abort" &&
>
> This patch breaks the test suite (with these two new tests) under
> GIT_TEST_REBASE_USE_BUILTIN=false. So a 2.21.0-rc0 regression.
>
> It would have been better to raise this before the rc period, but I just
> noticed this now, but we can now:
>
> 1. Skip the test under that mode
> 2. Fix the shell code to do the same thing
> 3. Just remove the shell code & GIT_TEST_REBASE_USE_BUILTIN=false mode
>
> Maybe we should just do #3. The reason for the escape hatch was in case
> we had bugs, and now we've had a full release cycle, but maybe that's
> too early...
Here is approach #3, intended for 2.21, but I'll defer to Junio on
whether we should take that approach.
Documentation/config/rebase.txt | 17 +-
Makefile | 1 -
builtin/rebase.c | 17 +-
git-legacy-rebase.sh | 770 --------------------------------
t/README | 4 -
t/t3400-rebase.sh | 6 +
6 files changed, 13 insertions(+), 802 deletions(-)
delete mode 100755 git-legacy-rebase.sh
diff --git a/Documentation/config/rebase.txt b/Documentation/config/rebase.txt
index 331d250e04..c747452983 100644
--- a/Documentation/config/rebase.txt
+++ b/Documentation/config/rebase.txt
@@ -1,16 +1,9 @@
rebase.useBuiltin::
- Set to `false` to use the legacy shellscript implementation of
- linkgit:git-rebase[1]. Is `true` by default, which means use
- the built-in rewrite of it in C.
-+
-The C rewrite is first included with Git version 2.20. This option
-serves an an escape hatch to re-enable the legacy version in case any
-bugs are found in the rewrite. This option and the shellscript version
-of linkgit:git-rebase[1] will be removed in some future release.
-+
-If you find some reason to set this option to `false` other than
-one-off testing you should report the behavior difference as a bug in
-git.
+ Unused configuration variable. Used between Git version 2.20
+ and 2.21 as an escape hatch to enable the legacy shellscript
+ implementation of rebase. Now the built-in rewrite of it in C
+ is always used. Setting this will emit a warning, to alert any
+ remaining users that setting this now does nothing.
rebase.stat::
Whether to show a diffstat of what changed upstream since the last
diff --git a/Makefile b/Makefile
index 0e13a5b469..58dceccd8a 100644
--- a/Makefile
+++ b/Makefile
@@ -626,7 +626,6 @@ SCRIPT_SH += git-merge-one-file.sh
SCRIPT_SH += git-merge-resolve.sh
SCRIPT_SH += git-mergetool.sh
SCRIPT_SH += git-quiltimport.sh
-SCRIPT_SH += git-legacy-rebase.sh
SCRIPT_SH += git-remote-testgit.sh
SCRIPT_SH += git-request-pull.sh
SCRIPT_SH += git-stash.sh
diff --git a/builtin/rebase.c b/builtin/rebase.c
index 7c7bc13e91..37a036933d 100644
--- a/builtin/rebase.c
+++ b/builtin/rebase.c
@@ -1135,21 +1135,8 @@ int cmd_rebase(int argc, const char **argv, const char *prefix)
};
int i;
- /*
- * 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 (!use_builtin_rebase())
+ warning(_("The rebase.useBuiltin support has been removed!"));
if (argc == 2 && !strcmp(argv[1], "-h"))
usage_with_options(builtin_rebase_usage,
diff --git a/git-legacy-rebase.sh b/git-legacy-rebase.sh
deleted file mode 100755
index 5c2c4e5276..0000000000
--- a/git-legacy-rebase.sh
+++ /dev/null
@@ -1,770 +0,0 @@
-#!/bin/sh
-#
-# Copyright (c) 2005 Junio C Hamano.
-#
-
-SUBDIRECTORY_OK=Yes
-OPTIONS_KEEPDASHDASH=
-OPTIONS_STUCKLONG=t
-OPTIONS_SPEC="\
-git rebase [-i] [options] [--exec <cmd>] [--onto <newbase>] [<upstream>] [<branch>]
-git rebase [-i] [options] [--exec <cmd>] [--onto <newbase>] --root [<branch>]
-git rebase --continue | --abort | --skip | --edit-todo
---
- Available options are
-v,verbose! display a diffstat of what changed upstream
-q,quiet! be quiet. implies --no-stat
-autostash automatically stash/stash pop before and after
-fork-point use 'merge-base --fork-point' to refine upstream
-onto=! rebase onto given branch instead of upstream
-r,rebase-merges? try to rebase merges instead of skipping them
-p,preserve-merges! try to recreate merges instead of ignoring them
-s,strategy=! use the given merge strategy
-X,strategy-option=! pass the argument through to the merge strategy
-no-ff! cherry-pick all commits, even if unchanged
-f,force-rebase! cherry-pick all commits, even if unchanged
-m,merge! use merging strategies to rebase
-i,interactive! let the user edit the list of commits to rebase
-x,exec=! add exec lines after each commit of the editable list
-k,keep-empty preserve empty commits during rebase
-allow-empty-message allow rebasing commits with empty messages
-stat! display a diffstat of what changed upstream
-n,no-stat! do not show diffstat of what changed upstream
-verify allow pre-rebase hook to run
-rerere-autoupdate allow rerere to update index with resolved conflicts
-root! rebase all reachable commits up to the root(s)
-autosquash move commits that begin with squash!/fixup! under -i
-signoff add a Signed-off-by: line to each commit
-committer-date-is-author-date! passed to 'git am'
-ignore-date! passed to 'git am'
-whitespace=! passed to 'git apply'
-ignore-whitespace! passed to 'git apply'
-C=! passed to 'git apply'
-S,gpg-sign? GPG-sign commits
- Actions:
-continue! continue
-abort! abort and check out the original branch
-skip! skip current patch and continue
-edit-todo! edit the todo list during an interactive rebase
-quit! abort but keep HEAD where it is
-show-current-patch! show the patch file being applied or merged
-reschedule-failed-exec automatically reschedule failed exec commands
-"
-. git-sh-setup
-set_reflog_action rebase
-require_work_tree_exists
-cd_to_toplevel
-
-LF='
-'
-ok_to_skip_pre_rebase=
-
-squash_onto=
-unset onto
-unset restrict_revision
-cmd=
-strategy=
-strategy_opts=
-do_merge=
-merge_dir="$GIT_DIR"/rebase-merge
-apply_dir="$GIT_DIR"/rebase-apply
-verbose=
-diffstat=
-test "$(git config --bool rebase.stat)" = true && diffstat=t
-autostash="$(git config --bool rebase.autostash || echo false)"
-fork_point=auto
-git_am_opt=
-git_format_patch_opt=
-rebase_root=
-force_rebase=
-allow_rerere_autoupdate=
-# Non-empty if a rebase was in progress when 'git rebase' was invoked
-in_progress=
-# One of {am, merge, interactive}
-type=
-# One of {"$GIT_DIR"/rebase-apply, "$GIT_DIR"/rebase-merge}
-state_dir=
-# One of {'', continue, skip, abort}, as parsed from command line
-action=
-rebase_merges=
-rebase_cousins=
-preserve_merges=
-autosquash=
-keep_empty=
-allow_empty_message=--allow-empty-message
-signoff=
-reschedule_failed_exec=
-test "$(git config --bool rebase.autosquash)" = "true" && autosquash=t
-case "$(git config --bool commit.gpgsign)" in
-true) gpg_sign_opt=-S ;;
-*) gpg_sign_opt= ;;
-esac
-test "$(git config --bool rebase.reschedulefailedexec)" = "true" &&
-reschedule_failed_exec=--reschedule-failed-exec
-. git-rebase--common
-
-read_basic_state () {
- test -f "$state_dir/head-name" &&
- test -f "$state_dir/onto" &&
- head_name=$(cat "$state_dir"/head-name) &&
- onto=$(cat "$state_dir"/onto) &&
- # We always write to orig-head, but interactive rebase used to write to
- # head. Fall back to reading from head to cover for the case that the
- # user upgraded git with an ongoing interactive rebase.
- if test -f "$state_dir"/orig-head
- then
- orig_head=$(cat "$state_dir"/orig-head)
- else
- orig_head=$(cat "$state_dir"/head)
- fi &&
- test -f "$state_dir"/quiet && GIT_QUIET=t
- test -f "$state_dir"/verbose && verbose=t
- test -f "$state_dir"/strategy && strategy="$(cat "$state_dir"/strategy)"
- test -f "$state_dir"/strategy_opts &&
- strategy_opts="$(cat "$state_dir"/strategy_opts)"
- test -f "$state_dir"/allow_rerere_autoupdate &&
- allow_rerere_autoupdate="$(cat "$state_dir"/allow_rerere_autoupdate)"
- test -f "$state_dir"/gpg_sign_opt &&
- gpg_sign_opt="$(cat "$state_dir"/gpg_sign_opt)"
- test -f "$state_dir"/signoff && {
- signoff="$(cat "$state_dir"/signoff)"
- force_rebase=t
- }
- test -f "$state_dir"/reschedule-failed-exec &&
- reschedule_failed_exec=t
-}
-
-finish_rebase () {
- rm -f "$(git rev-parse --git-path REBASE_HEAD)"
- apply_autostash &&
- { git gc --auto || true; } &&
- rm -rf "$state_dir"
-}
-
-run_interactive () {
- GIT_CHERRY_PICK_HELP="$resolvemsg"
- export GIT_CHERRY_PICK_HELP
-
- test -n "$keep_empty" && keep_empty="--keep-empty"
- test -n "$rebase_merges" && rebase_merges="--rebase-merges"
- test -n "$rebase_cousins" && rebase_cousins="--rebase-cousins"
- test -n "$autosquash" && autosquash="--autosquash"
- test -n "$verbose" && verbose="--verbose"
- test -n "$force_rebase" && force_rebase="--no-ff"
- test -n "$restrict_revision" && \
- restrict_revision="--restrict-revision=^$restrict_revision"
- test -n "$upstream" && upstream="--upstream=$upstream"
- test -n "$onto" && onto="--onto=$onto"
- test -n "$squash_onto" && squash_onto="--squash-onto=$squash_onto"
- test -n "$onto_name" && onto_name="--onto-name=$onto_name"
- test -n "$head_name" && head_name="--head-name=$head_name"
- test -n "$strategy" && strategy="--strategy=$strategy"
- test -n "$strategy_opts" && strategy_opts="--strategy-opts=$strategy_opts"
- test -n "$switch_to" && switch_to="--switch-to=$switch_to"
- test -n "$cmd" && cmd="--cmd=$cmd"
- test -n "$action" && action="--$action"
-
- exec git rebase--interactive "$action" "$keep_empty" "$rebase_merges" "$rebase_cousins" \
- "$upstream" "$onto" "$squash_onto" "$restrict_revision" \
- "$allow_empty_message" "$autosquash" "$verbose" \
- "$force_rebase" "$onto_name" "$head_name" "$strategy" \
- "$strategy_opts" "$cmd" "$switch_to" \
- "$allow_rerere_autoupdate" "$gpg_sign_opt" "$signoff" \
- "$reschedule_failed_exec"
-}
-
-run_specific_rebase () {
- if [ "$interactive_rebase" = implied ]; then
- GIT_SEQUENCE_EDITOR=:
- export GIT_SEQUENCE_EDITOR
- autosquash=
- fi
-
- if test -n "$interactive_rebase" -a -z "$preserve_merges"
- then
- run_interactive
- else
- . git-rebase--$type
-
- if test -z "$preserve_merges"
- then
- git_rebase__$type
- else
- git_rebase__preserve_merges
- fi
- fi
-
- ret=$?
- if test $ret -eq 0
- then
- finish_rebase
- elif test $ret -eq 2 # special exit status for rebase -p
- then
- apply_autostash &&
- rm -rf "$state_dir" &&
- die "Nothing to do"
- fi
- exit $ret
-}
-
-run_pre_rebase_hook () {
- if test -z "$ok_to_skip_pre_rebase" &&
- test -x "$(git rev-parse --git-path hooks/pre-rebase)"
- then
- "$(git rev-parse --git-path hooks/pre-rebase)" ${1+"$@"} ||
- die "$(gettext "The pre-rebase hook refused to rebase.")"
- fi
-}
-
-test -f "$apply_dir"/applying &&
- die "$(gettext "It looks like 'git am' is in progress. Cannot rebase.")"
-
-if test -d "$apply_dir"
-then
- type=am
- state_dir="$apply_dir"
-elif test -d "$merge_dir"
-then
- type=interactive
- if test -d "$merge_dir"/rewritten
- then
- type=preserve-merges
- interactive_rebase=explicit
- preserve_merges=t
- elif test -f "$merge_dir"/interactive
- then
- interactive_rebase=explicit
- fi
- state_dir="$merge_dir"
-fi
-test -n "$type" && in_progress=t
-
-total_argc=$#
-while test $# != 0
-do
- case "$1" in
- --no-verify)
- ok_to_skip_pre_rebase=yes
- ;;
- --verify)
- ok_to_skip_pre_rebase=
- ;;
- --continue|--skip|--abort|--quit|--edit-todo|--show-current-patch)
- test $total_argc -eq 2 || usage
- action=${1##--}
- ;;
- --onto=*)
- onto="${1#--onto=}"
- ;;
- --exec=*)
- cmd="${cmd}exec ${1#--exec=}${LF}"
- test -z "$interactive_rebase" && interactive_rebase=implied
- ;;
- --interactive)
- interactive_rebase=explicit
- ;;
- --keep-empty)
- keep_empty=yes
- ;;
- --allow-empty-message)
- allow_empty_message=--allow-empty-message
- ;;
- --no-keep-empty)
- keep_empty=
- ;;
- --rebase-merges)
- rebase_merges=t
- test -z "$interactive_rebase" && interactive_rebase=implied
- ;;
- --rebase-merges=*)
- rebase_merges=t
- case "${1#*=}" in
- rebase-cousins) rebase_cousins=t;;
- no-rebase-cousins) rebase_cousins=;;
- *) die "Unknown mode: $1";;
- esac
- test -z "$interactive_rebase" && interactive_rebase=implied
- ;;
- --preserve-merges)
- preserve_merges=t
- test -z "$interactive_rebase" && interactive_rebase=implied
- ;;
- --autosquash)
- autosquash=t
- ;;
- --no-autosquash)
- autosquash=
- ;;
- --fork-point)
- fork_point=t
- ;;
- --no-fork-point)
- fork_point=
- ;;
- --merge)
- do_merge=t
- ;;
- --strategy-option=*)
- strategy_opts="$strategy_opts $(git rev-parse --sq-quote "--${1#--strategy-option=}" | sed -e s/^.//)"
- do_merge=t
- test -z "$strategy" && strategy=recursive
- ;;
- --strategy=*)
- strategy="${1#--strategy=}"
- do_merge=t
- ;;
- --no-stat)
- diffstat=
- ;;
- --stat)
- diffstat=t
- ;;
- --autostash)
- autostash=true
- ;;
- --no-autostash)
- autostash=false
- ;;
- --verbose)
- verbose=t
- diffstat=t
- GIT_QUIET=
- ;;
- --quiet)
- GIT_QUIET=t
- git_am_opt="$git_am_opt -q"
- verbose=
- diffstat=
- ;;
- --whitespace=*)
- git_am_opt="$git_am_opt --whitespace=${1#--whitespace=}"
- case "${1#--whitespace=}" in
- fix|strip)
- force_rebase=t
- ;;
- warn|nowarn|error|error-all)
- ;; # okay, known whitespace option
- *)
- die "fatal: Invalid whitespace option: '${1#*=}'"
- ;;
- esac
- ;;
- --ignore-whitespace)
- git_am_opt="$git_am_opt $1"
- ;;
- --signoff)
- signoff=--signoff
- ;;
- --no-signoff)
- signoff=
- ;;
- --committer-date-is-author-date|--ignore-date)
- git_am_opt="$git_am_opt $1"
- force_rebase=t
- ;;
- -C*[!0-9]*)
- die "fatal: switch \`C' expects a numerical value"
- ;;
- -C*)
- git_am_opt="$git_am_opt $1"
- ;;
- --root)
- rebase_root=t
- ;;
- --force-rebase|--no-ff)
- force_rebase=t
- ;;
- --rerere-autoupdate|--no-rerere-autoupdate)
- allow_rerere_autoupdate="$1"
- ;;
- --gpg-sign)
- gpg_sign_opt=-S
- ;;
- --gpg-sign=*)
- gpg_sign_opt="-S${1#--gpg-sign=}"
- ;;
- --reschedule-failed-exec)
- reschedule_failed_exec=--reschedule-failed-exec
- ;;
- --no-reschedule-failed-exec)
- reschedule_failed_exec=
- ;;
- --)
- shift
- break
- ;;
- *)
- usage
- ;;
- esac
- shift
-done
-test $# -gt 2 && usage
-
-if test -n "$action"
-then
- test -z "$in_progress" && die "$(gettext "No rebase in progress?")"
- # Only interactive rebase uses detailed reflog messages
- if test -n "$interactive_rebase" && test "$GIT_REFLOG_ACTION" = rebase
- then
- GIT_REFLOG_ACTION="rebase -i ($action)"
- export GIT_REFLOG_ACTION
- fi
-fi
-
-if test "$action" = "edit-todo" && test -z "$interactive_rebase"
-then
- die "$(gettext "The --edit-todo action can only be used during interactive rebase.")"
-fi
-
-case "$action" in
-continue)
- # Sanity check
- git rev-parse --verify HEAD >/dev/null ||
- die "$(gettext "Cannot read HEAD")"
- git update-index --ignore-submodules --refresh &&
- git diff-files --quiet --ignore-submodules || {
- echo "$(gettext "You must edit all merge conflicts and then
-mark them as resolved using git add")"
- exit 1
- }
- read_basic_state
- run_specific_rebase
- ;;
-skip)
- output git reset --hard HEAD || exit $?
- read_basic_state
- run_specific_rebase
- ;;
-abort)
- git rerere clear
- read_basic_state
- case "$head_name" in
- refs/*)
- git symbolic-ref -m "rebase: aborting" HEAD $head_name ||
- die "$(eval_gettext "Could not move back to \$head_name")"
- ;;
- esac
- output git reset --hard $orig_head
- finish_rebase
- exit
- ;;
-quit)
- exec rm -rf "$state_dir"
- ;;
-edit-todo)
- run_specific_rebase
- ;;
-show-current-patch)
- run_specific_rebase
- die "BUG: run_specific_rebase is not supposed to return here"
- ;;
-esac
-
-# Make sure no rebase is in progress
-if test -n "$in_progress"
-then
- state_dir_base=${state_dir##*/}
- cmd_live_rebase="git rebase (--continue | --abort | --skip)"
- cmd_clear_stale_rebase="rm -fr \"$state_dir\""
- die "
-$(eval_gettext 'It seems that there is already a $state_dir_base directory, and
-I wonder if you are in the middle of another rebase. If that is the
-case, please try
- $cmd_live_rebase
-If that is not the case, please
- $cmd_clear_stale_rebase
-and run me again. I am stopping in case you still have something
-valuable there.')"
-fi
-
-if test -n "$rebase_root" && test -z "$onto"
-then
- test -z "$interactive_rebase" && interactive_rebase=implied
-fi
-
-if test -n "$keep_empty"
-then
- test -z "$interactive_rebase" && interactive_rebase=implied
-fi
-
-actually_interactive=
-if test -n "$interactive_rebase"
-then
- if test -z "$preserve_merges"
- then
- type=interactive
- else
- type=preserve-merges
- fi
- actually_interactive=t
- state_dir="$merge_dir"
-elif test -n "$do_merge"
-then
- interactive_rebase=implied
- type=interactive
- state_dir="$merge_dir"
-else
- type=am
- state_dir="$apply_dir"
-fi
-
-if test -t 2 && test -z "$GIT_QUIET"
-then
- git_format_patch_opt="$git_format_patch_opt --progress"
-fi
-
-incompatible_opts=$(echo " $git_am_opt " | \
- sed -e 's/ -q / /g' -e 's/^ \(.*\) $/\1/')
-if test -n "$incompatible_opts"
-then
- if test -n "$actually_interactive" || test "$do_merge"
- then
- die "$(gettext "fatal: cannot combine am options with either interactive or merge options")"
- fi
-fi
-
-if test -n "$signoff"
-then
- test -n "$preserve_merges" &&
- die "$(gettext "fatal: cannot combine '--signoff' with '--preserve-merges'")"
- git_am_opt="$git_am_opt $signoff"
- force_rebase=t
-fi
-
-if test -n "$preserve_merges"
-then
- # Note: incompatibility with --signoff handled in signoff block above
- # Note: incompatibility with --interactive is just a strong warning;
- # git-rebase.txt caveats with "unless you know what you are doing"
- test -n "$rebase_merges" &&
- die "$(gettext "fatal: cannot combine '--preserve-merges' with '--rebase-merges'")"
-
- test -n "$reschedule_failed_exec" &&
- die "$(gettext "error: cannot combine '--preserve-merges' with '--reschedule-failed-exec'")"
-fi
-
-if test -n "$rebase_merges"
-then
- test -n "$strategy_opts" &&
- die "$(gettext "fatal: cannot combine '--rebase-merges' with '--strategy-option'")"
- test -n "$strategy" &&
- die "$(gettext "fatal: cannot combine '--rebase-merges' with '--strategy'")"
-fi
-
-if test -z "$rebase_root"
-then
- case "$#" in
- 0)
- if ! upstream_name=$(git rev-parse --symbolic-full-name \
- --verify -q @{upstream} 2>/dev/null)
- then
- . git-parse-remote
- error_on_missing_default_upstream "rebase" "rebase" \
- "against" "git rebase $(gettext '<branch>')"
- fi
-
- test "$fork_point" = auto && fork_point=t
- ;;
- *) upstream_name="$1"
- if test "$upstream_name" = "-"
- then
- upstream_name="@{-1}"
- fi
- shift
- ;;
- esac
- upstream=$(peel_committish "${upstream_name}") ||
- die "$(eval_gettext "invalid upstream '\$upstream_name'")"
- upstream_arg="$upstream_name"
-else
- if test -z "$onto"
- then
- empty_tree=$(git hash-object -t tree /dev/null)
- onto=$(git commit-tree $empty_tree </dev/null)
- squash_onto="$onto"
- fi
- unset upstream_name
- unset upstream
- test $# -gt 1 && usage
- upstream_arg=--root
-fi
-
-# Make sure the branch to rebase onto is valid.
-onto_name=${onto-"$upstream_name"}
-case "$onto_name" in
-*...*)
- if left=${onto_name%...*} right=${onto_name#*...} &&
- onto=$(git merge-base --all ${left:-HEAD} ${right:-HEAD})
- then
- case "$onto" in
- ?*"$LF"?*)
- die "$(eval_gettext "\$onto_name: there are more than one merge bases")"
- ;;
- '')
- die "$(eval_gettext "\$onto_name: there is no merge base")"
- ;;
- esac
- else
- die "$(eval_gettext "\$onto_name: there is no merge base")"
- fi
- ;;
-*)
- onto=$(peel_committish "$onto_name") ||
- die "$(eval_gettext "Does not point to a valid commit: \$onto_name")"
- ;;
-esac
-
-# 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"
-switch_to=
-case "$#" in
-1)
- # Is it "rebase other $branchname" or "rebase other $commit"?
- branch_name="$1"
- switch_to="$1"
-
- # Is it a local branch?
- if git show-ref --verify --quiet -- "refs/heads/$branch_name" &&
- orig_head=$(git rev-parse -q --verify "refs/heads/$branch_name")
- then
- head_name="refs/heads/$branch_name"
- # If not is it a valid ref (branch or commit)?
- elif orig_head=$(git rev-parse -q --verify "$branch_name")
- then
- head_name="detached HEAD"
-
- else
- die "$(eval_gettext "fatal: no such branch/commit '\$branch_name'")"
- fi
- ;;
-0)
- # Do not need to switch branches, we are already on it.
- if branch_name=$(git symbolic-ref -q HEAD)
- then
- head_name=$branch_name
- branch_name=$(expr "z$branch_name" : 'zrefs/heads/\(.*\)')
- else
- head_name="detached HEAD"
- branch_name=HEAD
- fi
- orig_head=$(git rev-parse --verify HEAD) || exit
- ;;
-*)
- die "BUG: unexpected number of arguments left to parse"
- ;;
-esac
-
-if test "$fork_point" = t
-then
- new_upstream=$(git merge-base --fork-point "$upstream_name" \
- "${switch_to:-HEAD}")
- if test -n "$new_upstream"
- then
- restrict_revision=$new_upstream
- fi
-fi
-
-if test "$autostash" = true && ! (require_clean_work_tree) 2>/dev/null
-then
- stash_sha1=$(git stash create "autostash") ||
- die "$(gettext 'Cannot autostash')"
-
- mkdir -p "$state_dir" &&
- echo $stash_sha1 >"$state_dir/autostash" &&
- stash_abbrev=$(git rev-parse --short $stash_sha1) &&
- echo "$(eval_gettext 'Created autostash: $stash_abbrev')" &&
- git reset --hard
-fi
-
-require_clean_work_tree "rebase" "$(gettext "Please commit or stash them.")"
-
-# Now we are rebasing commits $upstream..$orig_head (or with --root,
-# everything leading up to $orig_head) on top of $onto
-
-# Check if we are already based on $onto with linear history,
-# but this should be done only when upstream and onto are the same
-# and if this is not an interactive rebase.
-mb=$(git merge-base "$onto" "$orig_head")
-if test -z "$actually_interactive" && test "$upstream" = "$onto" &&
- test "$mb" = "$onto" && test -z "$restrict_revision" &&
- # linear history?
- ! (git rev-list --parents "$onto".."$orig_head" | sane_grep " .* ") > /dev/null
-then
- if test -z "$force_rebase"
- then
- # Lazily switch to the target branch if needed...
- test -z "$switch_to" ||
- GIT_REFLOG_ACTION="$GIT_REFLOG_ACTION: checkout $switch_to" \
- git checkout -q "$switch_to" --
- if test "$branch_name" = "HEAD" &&
- ! git symbolic-ref -q HEAD
- then
- say "$(eval_gettext "HEAD is up to date.")"
- else
- say "$(eval_gettext "Current branch \$branch_name is up to date.")"
- fi
- finish_rebase
- exit 0
- else
- if test "$branch_name" = "HEAD" &&
- ! git symbolic-ref -q HEAD
- then
- say "$(eval_gettext "HEAD is up to date, rebase forced.")"
- else
- say "$(eval_gettext "Current branch \$branch_name is up to date, rebase forced.")"
- fi
- fi
-fi
-
-# If a hook exists, give it a chance to interrupt
-run_pre_rebase_hook "$upstream_arg" "$@"
-
-if test -n "$diffstat"
-then
- if test -n "$verbose"
- then
- if test -z "$mb"
- then
- echo "$(eval_gettext "Changes to \$onto:")"
- else
- echo "$(eval_gettext "Changes from \$mb to \$onto:")"
- fi
- fi
- mb_tree="${mb:-$(git hash-object -t tree /dev/null)}"
- # We want color (if set), but no pager
- GIT_PAGER='' git diff --stat --summary "$mb_tree" "$onto"
-fi
-
-if test -z "$actually_interactive" && test "$mb" = "$orig_head"
-then
- say "$(eval_gettext "Fast-forwarded \$branch_name to \$onto_name.")"
- GIT_REFLOG_ACTION="$GIT_REFLOG_ACTION: checkout $onto_name" \
- git checkout -q "$onto^0" || die "could not detach HEAD"
- # If the $onto is a proper descendant of the tip of the branch, then
- # we just fast-forwarded.
- git update-ref ORIG_HEAD $orig_head
- move_to_original_branch
- finish_rebase
- exit 0
-fi
-
-test -n "$interactive_rebase" && run_specific_rebase
-
-# Detach HEAD and reset the tree
-say "$(gettext "First, rewinding head to replay your work on top of it...")"
-
-GIT_REFLOG_ACTION="$GIT_REFLOG_ACTION: checkout $onto_name" \
- git checkout -q "$onto^0" || die "could not detach HEAD"
-git update-ref ORIG_HEAD $orig_head
-
-if test -n "$rebase_root"
-then
- revisions="$onto..$orig_head"
-else
- revisions="${restrict_revision-$upstream}..$orig_head"
-fi
-
-run_specific_rebase
diff --git a/t/README b/t/README
index 1326fd7505..decceb8576 100644
--- a/t/README
+++ b/t/README
@@ -374,10 +374,6 @@ the --no-sparse command-line argument.
GIT_TEST_PRELOAD_INDEX=<boolean> exercises the preload-index code path
by overriding the minimum number of cache entries required per thread.
-GIT_TEST_REBASE_USE_BUILTIN=<boolean>, when false, disables the
-builtin version of git-rebase. See 'rebase.useBuiltin' in
-git-config(1).
-
GIT_TEST_INDEX_THREADS=<n> enables exercising the multi-threaded loading
of the index for the whole test suite by bypassing the default number of
cache entries and thread minimums. Setting this to 1 will make the
diff --git a/t/t3400-rebase.sh b/t/t3400-rebase.sh
index 3e73f7584c..0a88eed1db 100755
--- a/t/t3400-rebase.sh
+++ b/t/t3400-rebase.sh
@@ -311,4 +311,10 @@ test_expect_success 'rebase--merge.sh and --show-current-patch' '
)
'
+test_expect_success 'rebase -c rebase.useBuiltin=false warning' '
+ test_must_fail env GIT_TEST_REBASE_USE_BUILTIN= \
+ git -c rebase.useBuiltin=false rebase 2>err &&
+ test_i18ngrep "rebase.useBuiltin support has been removed" err
+'
+
test_done
--
2.20.1.611.gfbb209baf1
^ permalink raw reply related [relevance 1%]
* Re: Contributor Summit Topics and Logistics
@ 2019-01-29 18:22 3% ` Derrick Stolee
0 siblings, 0 replies; 71+ results
From: Derrick Stolee @ 2019-01-29 18:22 UTC (permalink / raw)
To: Ævar Arnfjörð Bjarmason; +Cc: Jeff King, git
I was hoping to attend the contributors' summit remotely, but now my leave is
starting before then. This email contains a summary of what I would have
added to the discussion.
Thanks,
-Stolee
Commit-Graph Status Report
==========================
I'm really happy with the progress in this area, especially with the number of
other contributors working on the feature! Thanks Ævar, Jonathan, Josh, Stefan,
and Szeder in particular.
Here are some directions to take the feature in the near future:
File Format v2
--------------
The new format version [1] specifically fixes some shortcomings in v1:
* Uses the 4-byte format id for the hash algorithm.
* Creates a separate version byte for the reachability index.
* Enforces that the unused byte is zero until we use it for incremental writes.
Hopefully, this is the last time we need to update the file header.
[1] https://public-inbox.org/git/pull.112.git.gitgitgadget@gmail.com/
[PATCH 0/6] Create commit-graph file format v2
Reachability Index
------------------
As discussed on-list [2], we want to replace generation numbers with a different
(negative-cut) reachability index. I used the term "corrected commit date". The
definition is:
* If a commit has no parents, then its corrected commit date is its commit date.
* If a commit has parents, then its corrected commit date is the maximum of:
- its commit date
- one more than the maximum corrected commit date of its parents
The benefits of this definition were discussed already, but to summarize:
* This definition will work _at least as well_ as the commit date heuristic,
with the added bonus of being absolutely sure our results are right. We can
update algorithms like paint_down_to_common() to use this reachability index
without performance problems in some cases.
* If someone creates a terrible commit with a date that is far in the future,
this definition is no worse than existing generation numbers (because we
enforce that the corrected commit date is strictly larger than the parents'
corrected commit date).
To implement this index, we can re-use the 30 bits per commit in the
commit-graph file that are used for generation numbers, but use them instead
for the difference between the corrected commit date and the actual commit
date. File format v2 gives us a version value that can be incremented to signal
the change in meaning.
Some work is required to adjust the existing generation-number-aware algorithms
to care about an "arbitrary" reachability index. It could be as easy as a
helper function that returns a function pointer to the proper compare function.
If someone wants to move forward on this topic while I'm gone, please
volunteer. Otherwise, this will be among my first items to work on when I
return from leave.
[2] https://public-inbox.org/git/6367e30a-1b3a-4fe9-611b-d931f51effef@gmail.com/
[RFC] Generation Number v2
Incremental Writes
------------------
Similar to the split index, an incremental commit-graph file can be implemented
to reduce the write time when adding commits to an existing (large)
commit-graph. In this case, the .git/objects/info/commit-graph file would
be small, and have a pointer to a base file, say "cgraph-<hash>.cgraph", that
contains the majority of the commits.
The important thing to keep in mind here is that we use integers to refer to
a commit's parents. This integer would need to refer to the order of commits
when you concatenate the orderd lists from each file. When doing this, we
can point into the base file as well as the tip file. Since the base
commit-graph file would be closed under reachability, it only needs to care
about commits in its file.
It is also possible to have multiple base files, and we can use the unused
byte in the commit-graph file format v2 to store the number of base files.
We can then store a list of file names in a new chunk, presenting the ordered
list of base files. We still want to keep this list short, but there may be
benefits to a variable number. I expect the first version would limit the
construction to one base file for simplicity's sake.
When this is implemented, we can use it to write the commit-graph at fetch
time. A config setting, say 'fetch.writeCommitGraph', could enable this write.
Since most writes would add a small number of commits compared to the large
base file, this would be a more reasonable cost to add to a fetch. Since we
verify the pack upon download, the commits it contained will already be in
the memory cache and we won't need to re-parse those commits.
Volunteers welcome.
Bloom Filters
-------------
Using bloom filters to speed up file history has been discussed and prototyped
on-list (see [12] and the thread before it). Thanks for lots of contributions
in this area! A lot of people have shown an interest in this feature, and it
is particularly helpful with server-side queries.
Any implementation here should check that it is helping 'git blame' as much as
it can [13]. It's entirely possible that the performance problem mentioned
there is more about the size of the file and not finding the commits that
changed the file, but it's worth digging in here.
A few people have mentioned that they are interested in pursuing this
implementation, so it would be good to declare intentions during the summit.
[12] https://public-inbox.org/git/61559c5b-546e-d61b-d2e1-68de692f5972@gmail.com/
[13] https://public-inbox.org/git/CABXAcUzoNJ6s3=2xZfWYQUZ_AUefwP=5UVUgMnafKHHtufzbSA@mail.gmail.com/
Enabled by Default?
-------------------
I proposed turning on the feature by default [3], but that had some
resistance [4] and I never followed up to that remark. (It involved the
hope that we could consolidate commit walks during a gc/repack. I'm unsure
this is a goal worth pursuing.) Since there has been more interest recently [5]
I think it would be good to discuss what concerns we may have in turning this
on by default. Specifically, make 'core.commitGraph' and 'gc.writeCommitGraph'
default to 'true'. Users could still opt-out.
[3] https://public-inbox.org/git/pull.50.git.gitgitgadget@gmail.com/
[4] https://public-inbox.org/git/xmqqlg6vvrur.fsf@gitster-ct.c.googlers.com/
[5] https://public-inbox.org/git/87bm464elm.fsf@evledraar.gmail.com/
Multi-Pack-Index Status Report
==============================
The multi-pack-index feature shipped with Git 2.20! We've been using this
feature (or, a similar implementation as it changed a lot with review) in
VFS for Git for a year now. It's been critical to solving the many-packs
problem we have with our prefetch packs model. Our next version ships with
Git 2.20 and the upstream implementation.
We are now able to start tackling our space problem with these many packs.
Our solution includes the 'expire' and 'repack' subcommands [6]. We will run
these in the background [7] to slowly reduce the space we are using. Since
Git references the multi-pack-index, we are able to delete packs that have
no referenced objects from the multi-pack-index without interrupting user
commands (I don't think the same holds for 'git repack'). This "highly
available" model makes me think that this could be useful to other scenarios.
We are looking for interest from other users or groups in this feature. We
want this feature to be adopted, and that means the future of the feature
should depend on more scenarios than our specific case.
Here are some ideas to make this more useful for others:
1. Incremental writes. See the commit-graph section for details. This would
allow writing the multi-pack-index on fetch, helping users who have set
gc.auto=0 keep performance high even though they have packs piling up.
2. Stable object order and bitmaps. This is discussed in the design
document [8]. This is more useful for server environments.
[6] https://public-inbox.org/git/pull.92.git.gitgitgadget@gmail.com/
[PATCH 0/5] Create 'expire' and 'repack' verbs for git-multi-pack-index
[7] https://github.com/Microsoft/VFSForGit/blob/9cad154293456a41bef593a75e1ad2cb840c8524/GVFS/GVFS.Common/Maintenance/PackfileMaintenanceStep.cs#L141-L158
The use of 'expire' and 'repack' in VFS for Git
[8] https://github.com/git/git/blob/master/Documentation/technical/multi-pack-index.txt#L77-L84
multi-pack-index and stable object order
Test Coverage Report
====================
My intentions creating the test coverage report were to avoid bugs by double-
checking that we are testing all logic that was both (1) non-trivial, and
(2) new. The report does tend to be noisy with a lot of trivial blocks (error
cases) or code that was not covered before but was updated with a mechanical
refactoring. I'm hoping to attack these issues by using a new approach when
generating the reports.
I've created a GitHub repo [9] that contains new logic for generating the test
coverage report. In particular, it will now generate a text report that will
be sent to the list, but also an HTML report that will be posted online (see
[10] for an example).
In addition, the repo has an 'ignored' directory. This directory will be filled
with files that mirror their corresponding files in the Git repo, but contain
line numbers and contents for lines that have been deemed "unimportant". For
instance, I didn't want to just ignore all lines that say simply "return;" but
we can check that line 302 of builtin/checkout.c says "return;" and ignore that
line in the report [11].
I'll try to review the test report and add ignored lines before generating the
next report. I'll also accept PRs that add ignored lines (with justification).
I think this will help the usefulness significantly, especially as topics merge
down into 'next' and 'master'. If we track the ignored lines throughout a cycle,
then the report for 'maint' versus 'master' near release time may actually be
reasonable to read.
Any other feedback on the reports is greatly appreciated!
[9] https://github.com/derrickstolee/git-test-coverage
[10] https://derrickstolee.github.io/git-test-coverage/reports/2019-01-29.htm
[11] https://github.com/derrickstolee/git-test-coverage/blob/master/ignored/builtin/checkout.c
^ permalink raw reply [relevance 3%]
* Regression in: [PATCH on sb/more-repo-in-api] revision: use commit graph in get_reference()
@ 2019-01-25 15:33 4% ` SZEDER Gábor
0 siblings, 0 replies; 71+ results
From: SZEDER Gábor @ 2019-01-25 15:33 UTC (permalink / raw)
To: Jonathan Tan
Cc: git, Jeff King, Junio C Hamano, Derrick Stolee, Stefan Beller
On Tue, Dec 04, 2018 at 02:42:38PM -0800, Jonathan Tan wrote:
> When fetching into a repository, a connectivity check is first made by
> check_exist_and_connected() in builtin/fetch.c that runs:
>
> git rev-list --objects --stdin --not --all --quiet <(list of objects)
>
> If the client repository has many refs, this command can be slow,
> regardless of the nature of the server repository or what is being
> fetched. A profiler reveals that most of the time is spent in
> setup_revisions() (approx. 60/63), and of the time spent in
> setup_revisions(), most of it is spent in parse_object() (approx.
> 49/60). This is because setup_revisions() parses the target of every ref
> (from "--all"), and parse_object() reads the buffer of the object.
>
> Reading the buffer is unnecessary if the repository has a commit graph
> and if the ref points to a commit (which is typically the case). This
> patch uses the commit graph wherever possible; on my computer, when I
> run the above command with a list of 1 object on a many-ref repository,
> I get a speedup from 1.8s to 1.0s.
>
> Another way to accomplish this effect would be to modify parse_object()
> to use the commit graph if possible; however, I did not want to change
> parse_object()'s current behavior of always checking the object
> signature of the returned object.
>
> Signed-off-by: Jonathan Tan <jonathantanmy@google.com>
> ---
> This is on sb/more-repo-in-api because I'm using the repo_parse_commit()
> function.
>
> A colleague noticed this issue when handling a mirror clone.
>
> Looking at the bigger picture, the speed of the connectivity check
> during a fetch might be further improved by passing only the negotiation
> tips (obtained through --negotiation-tip) instead of "--all". This patch
> just handles the low-hanging fruit first.
> ---
I stumbled upon a regression that bisects down to this commit
ec0c5798ee (revision: use commit graph in get_reference(),
2018-12-04):
$ ~/src/git/bin-wrappers/git version
git version 2.19.1.566.gec0c5798ee
$ ~/src/git/bin-wrappers/git commit-graph write --reachable
Computing commit graph generation numbers: 100% (58994/58994), done.
$ ~/src/git/bin-wrappers/git status
HEAD detached at origin/pu
nothing to commit, working tree clean
$ ~/src/git/bin-wrappers/git -c core.commitGraph=false describe --dirty
v2.20.1-833-gcb3b9e7ee3
$ ~/src/git/bin-wrappers/git -c core.commitGraph=true describe --dirty
v2.20.1-833-gcb3b9e7ee3
It's all good with only '--dirty', but watch this with '--all
--dirty':
$ ~/src/git/bin-wrappers/git -c core.commitGraph=false describe --all --dirty
remotes/origin/pu
$ ~/src/git/bin-wrappers/git -c core.commitGraph=true describe --all --dirty
remotes/origin/pu-dirty
IOW if the commit-graph is enabled, then my clean worktree is reported
as dirty.
And to add a cherry on top of my confusion:
$ git checkout v2.20.0
Previous HEAD position was cb3b9e7ee3 Merge branch 'jh/trace2' into pu
HEAD is now at 5d826e9729 Git 2.20
$ ~/src/git/bin-wrappers/git -c core.commitGraph=true describe --all --dirty
tags/v2.20.0
It's clean even with '--all' and commit-graph enabled, but watch this:
$ git branch this-will-screw-it-up
$ ~/src/git/bin-wrappers/git -c core.commitGraph=true describe --all --dirty
tags/v2.20.0-dirty
Have fun! :)
> revision.c | 15 ++++++++++++++-
> 1 file changed, 14 insertions(+), 1 deletion(-)
>
> diff --git a/revision.c b/revision.c
> index b5108b75ab..e7da2c57ab 100644
> --- a/revision.c
> +++ b/revision.c
> @@ -212,7 +212,20 @@ static struct object *get_reference(struct rev_info *revs, const char *name,
> {
> struct object *object;
>
> - object = parse_object(revs->repo, oid);
> + /*
> + * If the repository has commit graphs, repo_parse_commit() avoids
> + * reading the object buffer, so use it whenever possible.
> + */
> + if (oid_object_info(revs->repo, oid, NULL) == OBJ_COMMIT) {
> + struct commit *c = lookup_commit(revs->repo, oid);
> + if (!repo_parse_commit(revs->repo, c))
> + object = (struct object *) c;
> + else
> + object = NULL;
> + } else {
> + object = parse_object(revs->repo, oid);
> + }
> +
> if (!object) {
> if (revs->ignore_missing)
> return object;
> --
> 2.19.0.271.gfe8321ec05.dirty
>
^ permalink raw reply [relevance 4%]
* Regression `git checkout $rev -b branch` while in a `--no-checkout` clone does not check out files
@ 2019-01-01 23:17 5% Anthony Sottile
0 siblings, 0 replies; 71+ results
From: Anthony Sottile @ 2019-01-01 23:17 UTC (permalink / raw)
To: Git Mailing List
Here's a simple regression test -- haven't had time to bisect this
```
#!/usr/bin/env bash
set -euxo pipefail
rm -rf src dest
git --version
git init src
echo hi > src/a
git -C src add .
git -C src commit -m "initial commit"
rev="$(git -C src rev-parse HEAD)"
git clone --no-checkout src dest
git -C dest checkout "$rev" -b branch
test -f dest/a
: 'SUCCESS!'
```
With git 2.17.1
```
+ set -euo pipefail
+ rm -rf src dest
+ git --version
git version 2.17.1
+ git init src
Initialized empty Git repository in /tmp/t/src/.git/
+ echo hi
+ git -C src add .
+ git -C src commit -m 'initial commit'
[master (root-commit) 61ae2ae] initial commit
1 file changed, 1 insertion(+)
create mode 100644 a
++ git -C src rev-parse HEAD
+ rev=61ae2ae9c9a96de7b1688b095f20a6adf9c20db1
+ git clone --no-checkout src dest
Cloning into 'dest'...
done.
+ git -C dest checkout 61ae2ae9c9a96de7b1688b095f20a6adf9c20db1 -b branch
Switched to a new branch 'branch'
+ test -f dest/a
+ : 'SUCCESS!'
```
With git 2.20.GIT (b21ebb671bb7dea8d342225f0d66c41f4e54d5ca)
```
+ set -euo pipefail
+ rm -rf src dest
+ git --version
git version 2.20.GIT
+ git init src
Initialized empty Git repository in /tmp/t/src/.git/
+ echo hi
+ git -C src add .
+ git -C src commit -m 'initial commit'
[master (root-commit) df4d6dc] initial commit
1 file changed, 1 insertion(+)
create mode 100644 a
++ git -C src rev-parse HEAD
+ rev=df4d6dcf02b15bfe2b3f0e4a8aa25ac165b1368c
+ git clone --no-checkout src dest
Cloning into 'dest'...
done.
+ git -C dest checkout df4d6dcf02b15bfe2b3f0e4a8aa25ac165b1368c -b branch
D a
Switched to a new branch 'branch'
+ test -f dest/a
```
A workaround for my use case is to not use `--no-checkout`, though
this is potentially slow
Anthony
^ permalink raw reply [relevance 5%]
* Re: ag/sequencer-reduce-rewriting-todo, was Re: What's cooking in git.git (Dec 2018, #02; Fri, 28)
2018-12-28 19:21 4% ` ag/sequencer-reduce-rewriting-todo, was " Alban Gruin
@ 2018-12-28 20:28 0% ` Junio C Hamano
0 siblings, 0 replies; 71+ results
From: Junio C Hamano @ 2018-12-28 20:28 UTC (permalink / raw)
To: Alban Gruin; +Cc: git
Alban Gruin <alban.gruin@gmail.com> writes:
>> With too many topics in-flight that touch sequencer and rebaser,
>> this need to wait giving precedence to other topics that fix bugs.
>>
>
> Most of these topics have reached master and have been released in git
> 2.20. Currently, there is four topics actually touching rebase,
> interactive rebase and/or the sequencer (js/rebase-i-redo-exec,
> nd/backup-log, en/rebase-merge-on-sequencer and nd/the-index). Among
> these, only nd/the-index conflicts with my series.
OK, so now it's turn for this topic ;-) Thanks.
^ permalink raw reply [relevance 0%]
* ag/sequencer-reduce-rewriting-todo, was Re: What's cooking in git.git (Dec 2018, #02; Fri, 28)
@ 2018-12-28 19:21 4% ` Alban Gruin
2018-12-28 20:28 0% ` Junio C Hamano
0 siblings, 1 reply; 71+ results
From: Alban Gruin @ 2018-12-28 19:21 UTC (permalink / raw)
To: Junio C Hamano, git
Hi Junio,
Le 28/12/2018 à 19:04, Junio C Hamano a écrit :
> * ag/sequencer-reduce-rewriting-todo (2018-11-12) 16 commits
> . rebase--interactive: move transform_todo_file() to rebase--interactive.c
> . sequencer: fix a call to error() in transform_todo_file()
> . sequencer: use edit_todo_list() in complete_action()
> . rebase-interactive: rewrite edit_todo_list() to handle the initial edit
> . rebase-interactive: append_todo_help() changes
> . rebase-interactive: use todo_list_write_to_file() in edit_todo_list()
> . sequencer: refactor skip_unnecessary_picks() to work on a todo_list
> . sequencer: change complete_action() to use the refactored functions
> . sequencer: make sequencer_make_script() write its script to a strbuf
> . sequencer: refactor rearrange_squash() to work on a todo_list
> . sequencer: refactor sequencer_add_exec_commands() to work on a todo_list
> . sequencer: refactor check_todo_list() to work on a todo_list
> . sequencer: introduce todo_list_write_to_file()
> . sequencer: refactor transform_todos() to work on a todo_list
> . sequencer: make the todo_list structure public
> . sequencer: changes in parse_insn_buffer()
>
> The scripted version of "git rebase -i" wrote and rewrote the todo
> list many times during a single step of its operation, and the
> recent C-rewrite made a faithful conversion of the logic to C. The
> implementation has been updated to carry necessary information
> around in-core to avoid rewriting the same file over and over
> unnecessarily.
>
> With too many topics in-flight that touch sequencer and rebaser,
> this need to wait giving precedence to other topics that fix bugs.
>
>
Most of these topics have reached master and have been released in git
2.20. Currently, there is four topics actually touching rebase,
interactive rebase and/or the sequencer (js/rebase-i-redo-exec,
nd/backup-log, en/rebase-merge-on-sequencer and nd/the-index). Among
these, only nd/the-index conflicts with my series.
Should I consider this comment as outdated, and reroll my series
(rebased on top of nd/the-index) in the next few days?
Cheers,
Alban
^ permalink raw reply [relevance 4%]
* [PATCH] t5570: drop racy test
2018-11-26 16:42 0% ` Jeff King
@ 2018-12-20 16:41 0% ` Thomas Gummerer
0 siblings, 0 replies; 71+ results
From: Thomas Gummerer @ 2018-12-20 16:41 UTC (permalink / raw)
To: Jeff King
Cc: Torsten Bögershausen, Git Mailing List, szeder.dev,
Jan Palus, Johannes Schindelin
On 11/26, Jeff King wrote:
> On Sun, Nov 25, 2018 at 10:01:38PM +0000, Thomas Gummerer wrote:
>
> > On 11/25, Torsten Bögershausen wrote:
> > > After running the "Git 2.20-rc1" testsuite here on a raspi,
> > > the only TC that failed was t5570.
> > > When the "grep" was run on daemon.log, the file was empty (?).
> > > When inspecting it later, it was filled, and grep would have found
> > > the "extended.attribute" it was looking for.
> >
> > I believe this has been reported before in
> > https://public-inbox.org/git/1522783990.964448.1325338528.0D49CC15@webmail.messagingengine.com/,
> > but it seems like the thread never ended with actually fixing it.
> > Reading the first reply Peff seemed to be fine with just removing the
> > test completely, which would be the easiest solution ;) Adding him to
> > Cc: here.
>
> Yes, I don't think there is a way to make this race-proof without
> somehow convincing "cat" to flush (and let us know when it has). Which
> really implies killing the daemon, and wait()ing on cat to process the
> EOF and exit. And that makes the tests a lot more expensive if we have
> to start the daemon for each snippet.
>
> So I'm still fine with just dropping this test.
Alright since this has come up twice on the mailing list now (and I've
seen this racyness as well), and nobody found the time to write a
patch yet, below is a patch to just remove the test.
> > > diff --git a/t/t5570-git-daemon.sh b/t/t5570-git-daemon.sh
> > > index 7466aad111..e259fee0ed 100755
> > > --- a/t/t5570-git-daemon.sh
> > > +++ b/t/t5570-git-daemon.sh
> > > @@ -192,6 +192,7 @@ test_expect_success 'daemon log records all attributes' '
> > > GIT_OVERRIDE_VIRTUAL_HOST=localhost \
> > > git -c protocol.version=1 \
> > > ls-remote "$GIT_DAEMON_URL/interp.git" &&
> > > + sleep 1 &&
> > > grep -i extended.attribute daemon.log | cut -d" " -f2- >actual &&
> > > test_cmp expect actual
> > > '
> > > ----------------
> > > A slightly better approach may be to use a "sleep on demand":
> > >
> > > + ( grep -i -q extended.attribute daemon.log || sleep 1 ) &&
>
> That doesn't really fix it, but just broadens the race window. I dunno.
> Maybe that is enough in practice. We could do something like:
>
> repeat_with_timeout () {
> local i=0
> while test $i -lt 10
> do
> "$@" && return 0
> sleep 1
> done
> # no success even after 10 seconds
> return 1
> }
>
> repeat_with_timeout grep -i extended.attribute daemon.log
>
> to make the pattern a bit more obvious (and make it easy to extend the
> window arbitrarily; surely 10s is enough?).
I gave this a try, with below patch to lib-git-daemon.sh that you
proposed in the previous thread about this racyness. That shows
another problem though, namely when truncating 'daemon.log' before
running 'git ls-remote' in this test, we're not sure all 'git deamon'
has flushed everything from previous invocations. That may be an even
rarer problem in practice, but still something to keep in mind.
diff --git a/t/lib-git-daemon.sh b/t/lib-git-daemon.sh
index edbea2d986..3c7fea169b 100644
--- a/t/lib-git-daemon.sh
+++ b/t/lib-git-daemon.sh
@@ -62,6 +62,7 @@ start_git_daemon() {
(
while read -r line <&7
do
+ sleep 1
printf "%s\n" "$line"
printf >&4 "%s\n" "$line"
done
Dscho also mentioned on #git-devel a while ago that he may have a look
at actually making this test race-proof, but I guess he's been busy
with the 2.20 release. I'm also not sure it's worth spending a lot of
time trying to fix this test, but I'd definitely be happy if someone
proposes a different solution.
> -Peff
--- >8 ---
Subject: [PATCH] t5570: drop racy test
t5570 being racy has been reported twice separately on the mailing
list [*1*, *2*].
To make the test race proof, we'd either have to introduce another
fifo the test snippet is waiting on, or somehow convincing "cat" to
flush (and let us know when it has). Which really implies killing the
daemon, and wait()ing on cat to process the EOF and exit. And that
makes the tests a lot more expensive if we have to start the daemon
for each snippet.
As this is a test for a relatively minor fix (according to the author)
in 19136be3f8 ("daemon: fix off-by-one in logging extended
attributes", 2018-01-24), drop it to avoid this racyness. It doesn't
seem worth making the test code much more complex, or slowing down all
tests just to keep this one.
*1*: 1522783990.964448.1325338528.0D49CC15@webmail.messagingengine.com/
*2*: 9d4e5224-9ff4-f3f8-519d-7b2a6f1ea7cd@web.de
Reported-by: Jan Palus <jpalus@fastmail.com>
Reported-by: Torsten Bögershausen <tboegi@web.de>
Helped-by: Jeff King <peff@peff.net>
Signed-off-by: Thomas Gummerer <t.gummerer@gmail.com>
---
t/t5570-git-daemon.sh | 13 -------------
1 file changed, 13 deletions(-)
diff --git a/t/t5570-git-daemon.sh b/t/t5570-git-daemon.sh
index 7466aad111..58ee787685 100755
--- a/t/t5570-git-daemon.sh
+++ b/t/t5570-git-daemon.sh
@@ -183,19 +183,6 @@ test_expect_success 'hostname cannot break out of directory' '
git ls-remote "$GIT_DAEMON_URL/escape.git"
'
-test_expect_success 'daemon log records all attributes' '
- cat >expect <<-\EOF &&
- Extended attribute "host": localhost
- Extended attribute "protocol": version=1
- EOF
- >daemon.log &&
- GIT_OVERRIDE_VIRTUAL_HOST=localhost \
- git -c protocol.version=1 \
- ls-remote "$GIT_DAEMON_URL/interp.git" &&
- grep -i extended.attribute daemon.log | cut -d" " -f2- >actual &&
- test_cmp expect actual
-'
-
test_expect_success FAKENC 'hostname interpolation works after LF-stripping' '
{
printf "git-upload-pack /interp.git\n\0host=localhost" | packetize
--
2.20.1.415.g653613c723
^ permalink raw reply related [relevance 0%]
* Re: Can git tell me which uncommitted files clash with the incoming changes?
2018-12-18 13:14 0% ` Jeff King
@ 2018-12-18 15:51 0% ` Elijah Newren
0 siblings, 0 replies; 71+ results
From: Elijah Newren @ 2018-12-18 15:51 UTC (permalink / raw)
To: Jeff King; +Cc: Mark Kharitonov, Duy Nguyen, Git Mailing List
On Tue, Dec 18, 2018 at 5:14 AM Jeff King <peff@peff.net> wrote:
>
> On Mon, Dec 17, 2018 at 05:50:31PM -0500, Mark Kharitonov wrote:
>
> > Guys, having git merge --dry-run would be great, but I am OK with git
> > merge for real as long as its output is parseable.
Don't rely on that. merge output has changed occasionally and will
likely change again in the future multiple times. The other solutions
provided by Peff and Duy are much better. If we need to add more
options to provide you with what you need, then that's a route we can
take, but I'll make no guarantees about merge output being stable and
parseable.
All that said...
> > However, somewhere in between git 2.18 and git 2.20 the output of
> > merge changed and now I do not know how to parse it.
> > it used to be something like that:
> >
> > bla bla bla
> > <tab>file name 1
> > <tab>file name 2
> > ...
> > bla bla bla
> >
> > But now, the files are output in one line and given that some files
> > may have spaces in the name I do not see how this can be parsed. If we
> > could have easily parseable output of merge, it would be enough for
> > me.
>
> Interesting. I don't see that behavior at all. E.g., running this:
>
...
> I see:
>
> error: The following untracked working tree files would be overwritten by merge:
> one
> three
> two
> Please move or remove them before you merge.
>
> I wonder if it has to do with Windows.
>
> If you can reproduce it at will, can you try bisecting between v2.18 and
> v2.20 to see which commit introduced the change?
>
> -Peff
I see the same as Peff, and I see no changes to
unpack_trees.c:display_error_msgs() since git 2.11 (not even in a
clone of git-for-windows), and as far as I can tell that function is
the place that prints all the files and adds the newlines, so I'm kind
of perplexed how you're seeing things print multiple files on a line.
Bisecting as Peff suggests would help but I'm curious if there's
something special about your setup needed to reproduce and which
changed since you were using 2.18 (e.g. always forcing output through
a pager and having a pager that doesn't understand LF and requires
CRLF to display things correctly??)
^ permalink raw reply [relevance 0%]
* Re: Can git tell me which uncommitted files clash with the incoming changes?
2018-12-17 22:50 4% ` Mark Kharitonov
@ 2018-12-18 13:14 0% ` Jeff King
2018-12-18 15:51 0% ` Elijah Newren
0 siblings, 1 reply; 71+ results
From: Jeff King @ 2018-12-18 13:14 UTC (permalink / raw)
To: Mark Kharitonov; +Cc: Duy Nguyen, Elijah Newren, Git Mailing List
On Mon, Dec 17, 2018 at 05:50:31PM -0500, Mark Kharitonov wrote:
> Guys, having git merge --dry-run would be great, but I am OK with git
> merge for real as long as its output is parseable.
>
> However, somewhere in between git 2.18 and git 2.20 the output of
> merge changed and now I do not know how to parse it.
> it used to be something like that:
>
> bla bla bla
> <tab>file name 1
> <tab>file name 2
> ...
> bla bla bla
>
> But now, the files are output in one line and given that some files
> may have spaces in the name I do not see how this can be parsed. If we
> could have easily parseable output of merge, it would be enough for
> me.
Interesting. I don't see that behavior at all. E.g., running this:
-- >8 --
git init repo
cd repo
echo base >base; git add base; git commit -m base
for i in one two three; do
echo $i >$i
done
git add .
git commit -m master
git checkout -b other HEAD^
echo other >other; git add other; git commit -m other
for i in one two three; do
echo working-tree >$i
done
git pull . master
-- 8< --
I see:
error: The following untracked working tree files would be overwritten by merge:
one
three
two
Please move or remove them before you merge.
I wonder if it has to do with Windows.
If you can reproduce it at will, can you try bisecting between v2.18 and
v2.20 to see which commit introduced the change?
-Peff
^ permalink raw reply [relevance 0%]
* Re: Can git tell me which uncommitted files clash with the incoming changes?
@ 2018-12-17 22:50 4% ` Mark Kharitonov
2018-12-18 13:14 0% ` Jeff King
0 siblings, 1 reply; 71+ results
From: Mark Kharitonov @ 2018-12-17 22:50 UTC (permalink / raw)
To: Duy Nguyen; +Cc: Elijah Newren, Git Mailing List
Guys, having git merge --dry-run would be great, but I am OK with git
merge for real as long as its output is parseable.
However, somewhere in between git 2.18 and git 2.20 the output of
merge changed and now I do not know how to parse it.
it used to be something like that:
bla bla bla
<tab>file name 1
<tab>file name 2
...
bla bla bla
But now, the files are output in one line and given that some files
may have spaces in the name I do not see how this can be parsed. If we
could have easily parseable output of merge, it would be enough for
me.
Le lun. 17 déc. 2018 à 14:37, Duy Nguyen <pclouds@gmail.com> a écrit :
>
> On Mon, Dec 17, 2018 at 6:17 PM Elijah Newren <newren@gmail.com> wrote:
> >
> > On Mon, Dec 17, 2018 at 8:26 AM Duy Nguyen <pclouds@gmail.com> wrote:
> > >
> > > On Mon, Dec 17, 2018 at 2:11 PM Mark Kharitonov
> > > <mark.kharitonov@gmail.com> wrote:
> > > >
> > > > Hi,
> > > > I have asked this question on SO
> > > > (https://stackoverflow.com/questions/53679167/can-git-tell-me-which-uncommitted-files-clash-with-the-incoming-changes)
> > > > and usually there are tons of responses on Git questions, but not on
> > > > this one.
> > > >
> > > > Allow me to quote it now.
> > > >
> > > > Please, observe:
> > > >
> > > > C:\Dayforce\test [master ↓2 +0 ~2 -0 !]> git pull
> > > > error: Your local changes to the following files would be
> > > > overwritten by merge:
> > > > 2.txt
> > > > Please commit your changes or stash them before you merge.
> > > > Aborting
> > > > Updating 2dc8bd0..ea343f8
> > > > C:\Dayforce\test [master ↓2 +0 ~2 -0 !]>
> > > >
> > > > Does git have a command that can tell me which uncommitted files cause
> > > > the this error? I can see them displayed by git pull, but I really do
> > > > not want to parse git pull output.
> > >
> > > Assume that you have done "git fetch origin" (or whatever master's
> > > upstream is). Do
> > >
> > > git diff --name-only HEAD origin/master
> > >
> > > You get the list of files that will need to be updated. Do
> > >
> > > git diff --name-only
> >
> > Are you assuming that `git diff --cached --name-only` is empty? If it
> > isn't, that alone will trigger a failure (unless using an esoteric
> > merge strategy or an older version of git), so this assumption is
> > fairly reasonable to make. But it may be worth being explicit about
> > for external readers.
>
> Actually I think Jeff's suggestion may be better since he compares
> worktree with HEAD and should catch everything.
>
> > > to get the list of files that have local changes. If this list shares
> > > some paths with the first list, these paths will very likely cause
> > > "git pull" to abort.
> > >
> > > For a better check, I think you need to do "git read-tree -m" by
> > > yourself (to a temporary index file with --index-output) then you can
> > > examine that file and determine what file has changed compared to HEAD
> > > (and if the same file has local changes, git-pull will be aborted).
> > > You may need to read more in read-tree man page.
> > >
> > > Ideally though, git-read-tree should be able to tell what paths are
> > > updated in "--dry-run -u" mode. But I don't think it's supported yet.
> >
> > merge-recursive currently uses unpack_trees to do this "files would be
> > overwritten by merge" checking, so the suggestion of read-tree (which
> > also uses unpack_trees) makes sense. BUT ... the error checking in
> > unpack_trees has both false positives and false negatives due to not
> > understanding renames, and it is somewhat of a nightmarish mess. See
> > [1] for details. Further, I think it warns in cases that shouldn't be
> > needed (both sides of history modified the same file, with the
> > modifications on HEAD's side being a superset of the changes on the
> > other side, in such a way that 3-way content merge happens to match
> > what is in HEAD already). So, while the suggestions made so far give
> > some useful approximations, it's an approximation that will get worse
> > over time.
>
> Ah.. dang. I guess we need "git merge --dry-run" then :)
>
> > I don't have a better approximation to provide at this
> > time, though.
> >
> >
> > Elijah
> >
> > [1] https://public-inbox.org/git/20171124195901.2581-1-newren@gmail.com/
> > , starting at "Note that unpack_trees() doesn't understand renames"
> > and running until "4-way merges simply cause the complexity to
> > increase with every new capability."
>
>
>
> --
> Duy
--
Be well and prosper.
==============================
"There are two kinds of people.Those whose guns are loaded and those who dig."
("The good, the bad and the ugly")
So let us drink for our guns always be loaded.
^ permalink raw reply [relevance 4%]
* Issues with gitattributes pattern matching
@ 2018-12-12 8:23 4% Sebastian Schuberth
0 siblings, 0 replies; 71+ results
From: Sebastian Schuberth @ 2018-12-12 8:23 UTC (permalink / raw)
To: git
Hi,
after reading though [1] and [2] again, I believe a pattern in
.gitattributes like
*/src/*/assets/**/*-expected-* text eol=lf
should match a committed file at
reporter/src/funTest/assets/NPM-is-windows-1.0.2-expected-NOTICE
In other words, "**" should be able to match "nothing", but it doesn't
seem to do in my case.
To cross-check, assuming that ls-files supports the same patterns, running
git ls-files "*/src/*/assets/**/*-expected-*"
indeed does not list the committed file at
reporter/src/funTest/assets/NPM-is-windows-1.0.2-expected-NOTICE
for me. Tested with Git 2.20 on Windows and Git 2.19.2 on Linux. Is it a
documentation error or a bug in Git?
[1] https://git-scm.com/docs/gitattributes
[2] https://git-scm.com/docs/gitignore#_pattern_format
--
Sebastian Schuberth
^ permalink raw reply [relevance 4%]
* Re: [BUG] Git 2.20: `git help -a' hangs if specific git alias occurs
2018-12-11 17:30 6% [BUG] Git 2.20: `git help -a' hangs if specific git alias occurs Sebastian Gniazdowski
2018-12-11 17:46 6% ` Duy Nguyen
@ 2018-12-11 17:46 6% ` SZEDER Gábor
1 sibling, 0 replies; 71+ results
From: SZEDER Gábor @ 2018-12-11 17:46 UTC (permalink / raw)
To: Sebastian Gniazdowski; +Cc: git
On Tue, Dec 11, 2018 at 06:30:26PM +0100, Sebastian Gniazdowski wrote:
> Hello,
> I've attached a screenshot for running `git help -a' that ends in a
> hang and ~100% cpu usage, for the following ~/.gitconfig (it's also
> attached):
>
> https://raw.githubusercontent.com/agostonbarna/dotfiles-base/master/.gitconfig
>
> So it's hangs on the alias `remote-origin-https-to-ssh'. One user in
> following thread discovered, that it's about lenght of the alias:
> "abcdefghijklmnopqr = ... is ok, but with abcdefghijklmnopqrs = ..."
> it will crash, "the problem occurs if the name of a git alias consists
> of more than 18 characters" (see the thread:
> https://github.com/zdharma/fast-syntax-highlighting/issues/95).
>
> Is there a workaround? Of course a fix is needed, but I'm interested
> specifically in a workaround so my Zsh plugin
> `fast-syntax-highlighting' can work without hang also with Git 2.20,
> without exceptions in code.
Have a look at these patches:
https://public-inbox.org/git/pull.97.git.gitgitgadget@gmail.com/T/
It sounds like you hit the same issue.
^ permalink raw reply [relevance 6%]
* Re: [BUG] Git 2.20: `git help -a' hangs if specific git alias occurs
2018-12-11 17:30 6% [BUG] Git 2.20: `git help -a' hangs if specific git alias occurs Sebastian Gniazdowski
@ 2018-12-11 17:46 6% ` Duy Nguyen
2018-12-11 17:46 6% ` SZEDER Gábor
1 sibling, 0 replies; 71+ results
From: Duy Nguyen @ 2018-12-11 17:46 UTC (permalink / raw)
To: sgniazdowski; +Cc: Git Mailing List
On Tue, Dec 11, 2018 at 6:42 PM Sebastian Gniazdowski
<sgniazdowski@gmail.com> wrote:
>
> Hello,
> I've attached a screenshot for running `git help -a' that ends in a
> hang and ~100% cpu usage, for the following ~/.gitconfig (it's also
> attached):
>
> https://raw.githubusercontent.com/agostonbarna/dotfiles-base/master/.gitconfig
>
> So it's hangs on the alias `remote-origin-https-to-ssh'. One user in
> following thread discovered, that it's about lenght of the alias:
> "abcdefghijklmnopqr = ... is ok, but with abcdefghijklmnopqrs = ..."
> it will crash, "the problem occurs if the name of a git alias consists
> of more than 18 characters" (see the thread:
> https://github.com/zdharma/fast-syntax-highlighting/issues/95).
>
> Is there a workaround? Of course a fix is needed, but I'm interested
> specifically in a workaround so my Zsh plugin
> `fast-syntax-highlighting' can work without hang also with Git 2.20,
> without exceptions in code.
I don't think there's a workaround (except shortening the aliases).
The fix for this was sent out just a couple hours ago, maybe it'll hit
2.20.1
https://public-inbox.org/git/pull.97.git.gitgitgadget@gmail.com/T/#t
> --
> Sebastian Gniazdowski
> News: https://twitter.com/ZdharmaI
> IRC: https://kiwiirc.com/client/chat.freenode.net:+6697/#zplugin
> Blog: http://zdharma.org
--
Duy
^ permalink raw reply [relevance 6%]
* [BUG] Git 2.20: `git help -a' hangs if specific git alias occurs
@ 2018-12-11 17:30 6% Sebastian Gniazdowski
2018-12-11 17:46 6% ` Duy Nguyen
2018-12-11 17:46 6% ` SZEDER Gábor
0 siblings, 2 replies; 71+ results
From: Sebastian Gniazdowski @ 2018-12-11 17:30 UTC (permalink / raw)
To: git
[-- Attachment #1: Type: text/plain, Size: 983 bytes --]
Hello,
I've attached a screenshot for running `git help -a' that ends in a
hang and ~100% cpu usage, for the following ~/.gitconfig (it's also
attached):
https://raw.githubusercontent.com/agostonbarna/dotfiles-base/master/.gitconfig
So it's hangs on the alias `remote-origin-https-to-ssh'. One user in
following thread discovered, that it's about lenght of the alias:
"abcdefghijklmnopqr = ... is ok, but with abcdefghijklmnopqrs = ..."
it will crash, "the problem occurs if the name of a git alias consists
of more than 18 characters" (see the thread:
https://github.com/zdharma/fast-syntax-highlighting/issues/95).
Is there a workaround? Of course a fix is needed, but I'm interested
specifically in a workaround so my Zsh plugin
`fast-syntax-highlighting' can work without hang also with Git 2.20,
without exceptions in code.
--
Sebastian Gniazdowski
News: https://twitter.com/ZdharmaI
IRC: https://kiwiirc.com/client/chat.freenode.net:+6697/#zplugin
Blog: http://zdharma.org
[-- Attachment #2: gitconfig-crash-95.txt --]
[-- Type: text/plain, Size: 6869 bytes --]
[include]
path = ~/.gitconfig.user
#[user]
#useconfigOnly = true # enforces to configure Git user on a per-repository basis
[credential]
helper = cache --timeout=3600
[core]
trustctime = false
preComposeUnicode = false
autocrlf = input
eol = lf
untrackedCache = true # speed up commands involving untracked files
#attributesFile = ~/.gitattributes
#excludesfile = ~/.gitignore
#filemode = false
#editor = vim
[color]
ui = auto
[color "branch"]
current = yellow reverse
local = yellow
remote = green
[color "status"]
added = green
changed = yellow
deleted = red
untracked = cyan
header = normal italic
localBranch = cyan bold
remoteBranch = magenta bold
[color "diff"]
meta = yellow bold
frag = cyan
new = green # additions
old = red # deletions
newMoved = green dim
oldMoved = red dim
whitespace = red reverse
commit = yellow bold
[color "diff-highlight"]
oldNormal = red bold
oldHighlight = black red
newNormal = green bold
newHighlight = black green
[color "grep"]
linenumber = yellow bold
match = red bold
filename = magenta
[advice]
statusHints = false
[status]
showStash = true
[grep]
extendRegexp = true
lineNumber = true
[commit]
template = ~/.gitmessage
[stash]
showPatch = true
[apply]
whitespace = fix # Detect whitespace errors when applying a patch
[push]
default = simple
[pull]
ff = only
[rebase]
autoStash = true
[diff]
renames = copies
colorMoved = zebra
tool = meld
#tool = idea # slow
#whitespace = reverse
#context = 0
[difftool]
prompt = false
[difftool "meld"]
cmd = meld \"$LOCAL\" \"$REMOTE\" -L \"LOCAL | REMOTE\" 2>/dev/null
trustExitCode = true
[difftool "idea"]
cmd = idea diff \"$LOCAL\" \"$REMOTE\"
[diff-so-fancy]
useUnicodeRuler = false
[merge]
conflictstyle = diff3
tool = meld
#tool = idea
[mergetool]
prompt = false
#keepBackup = false # do not keep the .orig backup files
[mergetool "meld"]
cmd = meld \"$LOCAL\" \"$MERGED\" \"$REMOTE\" -o \"$MERGED\" -L \"LOCAL | MERGED | REMOTE\" 2>/dev/null
#cmd = meld \"$LOCAL\" \"$BASE\" \"$REMOTE\" -o \"$MERGED\" -L \"LOCAL | BASE | REMOTE\" 2>/dev/null
trustExitCode = true
[mergetool "idea"]
cmd = idea merge \"$LOCAL\" \"$REMOTE\" \"$BASE\" \"$MERGED\"
trustExitCode = true
[interactive]
singleKey = true # in interactive mode, accept one-letter inputs (no need to hit enter)
[submodule]
fetchJobs = 0 # 0: auto, 1: default
[tag]
sort = version:refname # sort tags by version number (1.2.0 before 1.10.2)
[alias]
aliases = config --get-regexp "^alias\\."
alias = "!git config --get-regexp \"^alias\\.$1$\" #"
addu = add -u
addp = add -p
addi = add -i
addn = add -n
addN = add -N
st = status -sb
co = checkout
cob = checkout -b
cof = checkout -f
stashk = stash save --keep-index
stashl = stash list
stashps = stash push
ps = push
psf = push --force-with-lease
psuom = push -u origin master
pullf = pull --allow-unrelated-histories
br = branch
brd = branch -d
brD = branch -D
brm = branch -m
branches = branch -vv
remotes = remote -v
tags = tag -l
untracked = ls-files --exclude-standard --others --directory --no-empty-directory
ignored = ls-files --exclude-standard --others --ignored --directory
modified = ls-files --exclude-standard --modified
deleted = ls-files --exclude-standard --deleted
ci = commit -v
cia = commit -v -a
cim = commit -m
ciam = commit -v -a -m
cinit = commit -m 'Initial commit' --allow-empty
amend = commit --amend --no-edit
amenda = commit --amend --no-edit -a
amende = commit --amend
# View abbreviated SHA, description, and history graph of the latest 20 commits
lg = log --graph --pretty=format:'%C(red)%h%C(reset) %C(bold)%s%C(reset) %C(green)(%cr)%C(reset) %C(blue)%an%C(reset)%C(yellow)%d%C(reset)'
lga = !git lg --all
lgp = log -p --ignore-all-space --date=relative
lgpf = !git lgp --follow
standup = "!git log --stat --no-merges --since=$(($(date +%u)==1?3:1)).days.ago.midnight --date=format:'%Y-%m-%d %H:%M:%S' --pretty=format:'%C(red)%h%C(reset) %C(bold)%s%C(reset) %C(green)%cd%C(reset)'"
# Show what I did today
today = "!git log --reverse --no-merges --branches=* --date=local --after=\"yesterday 23:59\" --author=\"`git config --get user.name`\""
showw = show --color-words
showc = show --color-words=.
showst = show --stat
# word diff
diffw = diff --color-words #-U0 -b -w --ignore-space-at-eol --ignore-blank-lines
# character diff
diffc = diff --color-words=.
diffs = diff --staged
diffsw = diff --staged --color-words
diffsc = diff --staged --color-words=.
diffst = diff --stat
dt = difftool
mt = mergetool
rao = remote add origin
unstage = reset
rh = reset --hard
rs = reset --soft
rs1 = reset --soft @^
rb = rebase
rbi = rebase -i
rba = rebase --abort
rbc = rebase --continue
ls = ls-files
ag = "grep --break --heading --line-number"
# Search files registered in the index, rather than the working tree
ag-index = "grep --break --heading --line-number --cached -e"
# Local Git Server
# Appending "#" to an alias allow positional parameters without leaving the trailing ones
# Origin: git serve REPO
# Destination: git pull git://IP_OR_HOSTNAME_OF_ORIGIN/
server = "!git daemon --verbose --reuseaddr --export-all --enable=receive-pack --base-path=\"$1\" #"
remote-origin-https-to-ssh = "!git remote set-url origin $(git remote get-url origin | sed 's|.*://|git@|; s|/|:|')"
assume-unchanged = update-index --assume-unchanged
assume-changed = update-index --no-assume-unchanged
[url "git@github.com:"]
#insteadOf = "https://github.com/" # force SSH instead of HTTP
insteadOf = "github:" # shortcut
pushInsteadOf = "git://github.com/"
pushInsteadOf = "https://github.com/"
[url "git@gitlab.com:"]
#insteadOf = "https://gitlab.com/" # force SSH instead of HTTP
insteadOf = "gitlab:" # shortcut
pushInsteadOf = "git://gitlab.com/"
pushInsteadOf = "https://gitlab.com/"
[url "git@bitbucket.org:"]
#insteadOf = "https://bitbucket.org/" # force SSH instead of HTTP
insteadOf = "bitbucket:" # shortcut
pushInsteadOf = "git://bitbucket.org/"
pushInsteadOf = "https://bitbucket.org/"
[url "git@heroku.com:"]
insteadOf = "heroku:" # shortcut
# Prettier inline JSON diff
[diff "json"]
textconv = "perl -MJSON::PP -e '$j = JSON::PP->new->pretty->canonical; print $j->encode($j->decode(do {$/ = undef; <>}))'"
cachetextconv = true
[filter "transmission-conf"]
clean = "grep -Ev '\"(alt-speed-enabled|blocklist-date|main-window-[-a-z]+|open-dialog-dir|rpc-password)\":'"
smudge = cat
#[diff "bin"]
# textconv = hexdump -v -C
# Merge drivers
# .gitattributes example: file merge=ours
[merge "theirs"]
driver = cp -f %B %A
[merge "ours"]
driver = true
[-- Attachment #3: git-help--a-crash-95.png --]
[-- Type: image/png, Size: 20853 bytes --]
^ permalink raw reply [relevance 6%]
* Re: What's cooking in git.git (Dec 2018, #01; Sun, 9)
2018-12-10 20:05 0% ` Elijah Newren
2018-12-10 21:50 0% ` Ævar Arnfjörð Bjarmason
@ 2018-12-11 1:48 0% ` Junio C Hamano
1 sibling, 0 replies; 71+ results
From: Junio C Hamano @ 2018-12-11 1:48 UTC (permalink / raw)
To: Elijah Newren; +Cc: Git Mailing List
Elijah Newren <newren@gmail.com> writes:
> On Sun, Dec 9, 2018 at 12:42 AM Junio C Hamano <gitster@pobox.com> wrote:
>
>> Git 2.20 has been tagged. I'd expect that we would slow down to see
>> how stable it is and queue only the brown-paper-bag fixes for a week
>> or so, before opening the tree for the next cycle, rewinding the tip
>> of 'next', etc.
>
> Does this mean you'd prefer we continue to wait a little longer before
> sending in new series and re-rolls, or just that you are managing
> expectations about when they might be queued?
More of the latter. The best way to find bugs that matter in real
life is to use the software in the real project settings, i.e. you
guys work on your own topics using Git. I'll keep reviewing and
commenting just like other reviewers, but the new patches won't come
close to 'next' (as I said elsewhere, being in 'pu' does not count
much---it is like getting bookmarked) in the meantime.
^ permalink raw reply [relevance 0%]
* Re: What's cooking in git.git (Dec 2018, #01; Sun, 9)
2018-12-10 20:05 0% ` Elijah Newren
@ 2018-12-10 21:50 0% ` Ævar Arnfjörð Bjarmason
2018-12-11 1:48 0% ` Junio C Hamano
1 sibling, 0 replies; 71+ results
From: Ævar Arnfjörð Bjarmason @ 2018-12-10 21:50 UTC (permalink / raw)
To: Elijah Newren; +Cc: Junio C Hamano, Git Mailing List
On Mon, Dec 10 2018, Elijah Newren wrote:
> On Sun, Dec 9, 2018 at 12:42 AM Junio C Hamano <gitster@pobox.com> wrote:
>
>> Git 2.20 has been tagged. I'd expect that we would slow down to see
>> how stable it is and queue only the brown-paper-bag fixes for a week
>> or so, before opening the tree for the next cycle, rewinding the tip
>> of 'next', etc.
>
> Does this mean you'd prefer we continue to wait a little longer before
> sending in new series and re-rolls, or just that you are managing
> expectations about when they might be queued?
>
> (Just curious whether I should submit my rebase-merge-on-sequencer
> re-roll or continue waiting. I'm happy to do whatever is more
> convenient for others.)
Related; Junio: I've submitted a few things in the last 2-3 weeks which
I knew weren't making it into 2.20, but I just wanted to kick out the
door as I had them ready. Things which are not noted in this "What's
Cooking".
I'm fine with re-submitting those once 2.21 picks up, but don't want to
needlessly spam if your plan is to circle around and pick up those
things you were (rightly) ignoring during the RC period.
^ permalink raw reply [relevance 0%]
* Re: What's cooking in git.git (Dec 2018, #01; Sun, 9)
2018-12-09 8:42 1% What's cooking in git.git (Dec 2018, #01; Sun, 9) Junio C Hamano
@ 2018-12-10 20:05 0% ` Elijah Newren
2018-12-10 21:50 0% ` Ævar Arnfjörð Bjarmason
2018-12-11 1:48 0% ` Junio C Hamano
0 siblings, 2 replies; 71+ results
From: Elijah Newren @ 2018-12-10 20:05 UTC (permalink / raw)
To: Junio C Hamano; +Cc: Git Mailing List
On Sun, Dec 9, 2018 at 12:42 AM Junio C Hamano <gitster@pobox.com> wrote:
> Git 2.20 has been tagged. I'd expect that we would slow down to see
> how stable it is and queue only the brown-paper-bag fixes for a week
> or so, before opening the tree for the next cycle, rewinding the tip
> of 'next', etc.
Does this mean you'd prefer we continue to wait a little longer before
sending in new series and re-rolls, or just that you are managing
expectations about when they might be queued?
(Just curious whether I should submit my rebase-merge-on-sequencer
re-roll or continue waiting. I'm happy to do whatever is more
convenient for others.)
^ permalink raw reply [relevance 0%]
* [ANNOUNCE] Git v2.20.0
@ 2018-12-09 8:43 3% Junio C Hamano
0 siblings, 0 replies; 71+ results
From: Junio C Hamano @ 2018-12-09 8:43 UTC (permalink / raw)
To: git; +Cc: Linux Kernel, git-packagers
The latest feature release Git v2.20.0 is now available at the usual
places. It is comprised of 962 non-merge commits since v2.19.0
(this is by far the largest release in v2.x.x series), contributed
by 83 people, 26 of which are new faces.
The tarballs are found at:
https://www.kernel.org/pub/software/scm/git/
The following public repositories all have a copy of the 'v2.20.0'
tag and the 'master' branch that the tag points at:
url = https://kernel.googlesource.com/pub/scm/git/git
url = git://repo.or.cz/alt-git.git
url = https://github.com/gitster/git
New contributors whose contributions weren't in v2.19.0 are as follows.
Welcome to the Git development community!
Aaron Lindsay, Alexander Pyhalov, Anton Serbulov, Brendan
Forster, Carlo Marcelo Arenas Belón, Daniels Umanovskis,
David Zych, Đoàn Trần Công Danh, Frederick Eaton, Greg
Hurrell, James Knight, Jann Horn, Joshua Watt, Loo Rong Jie,
Lucas De Marchi, Matthew DeVore, Mihir Mehta, Minh Nguyen,
Nickolai Belakovski, Roger Strain, Sam McKelvie, Saulius Gurklys,
Shulhan, Steven Fernandez, Strain, Roger L, and Tim Schumacher.
Returning contributors who helped this release are as follows.
Thanks for your continued support.
Ævar Arnfjörð Bjarmason, Alban Gruin, Alexander Shopov,
Andreas Gruenbacher, Andreas Heiduk, Antonio Ospite, Ben Peart,
Brandon Williams, brian m. carlson, Christian Couder, Christian
Hesse, Christopher Díaz Riveros, Denton Liu, Derrick Stolee,
Elijah Newren, Eric Sunshine, Jean-Noël Avila, Jeff Hostetler,
Jeff King, Jiang Xin, Johannes Schindelin, Johannes Sixt,
Jonathan Nieder, Jonathan Tan, Jordi Mas, Josh Steadmon,
Junio C Hamano, Karsten Blees, Luke Diamand, Martin Ågren,
Max Kirillov, Michael Witten, Michał Górny, Nguyễn Thái
Ngọc Duy, Noam Postavsky, Olga Telezhnaya, Peter Krefting,
Phillip Wood, Pratik Karki, Rafael Ascensão, Ralf Thielow,
Ramsay Jones, Rasmus Villemoes, René Scharfe, Sebastian Staudt,
Stefan Beller, Stephen P. Smith, Steve Hoelzer, Sven Strickroth,
SZEDER Gábor, Tao Qingyun, Taylor Blau, Thomas Gummerer,
Todd Zullinger, Torsten Bögershausen, Trần Ngọc Quân,
and Uwe Kleine-König.
----------------------------------------------------------------
Git 2.20 Release Notes
======================
Backward Compatibility Notes
----------------------------
* "git branch -l <foo>" used to be a way to ask a reflog to be
created while creating a new branch, but that is no longer the
case. It is a short-hand for "git branch --list <foo>" now.
* "git push" into refs/tags/* hierarchy is rejected without getting
forced, but "git fetch" (misguidedly) used the "fast forwarding"
rule used for the refs/heads/* hierarchy; this has been corrected,
which means some fetches of tags that did not fail with older
version of Git will fail without "--force" with this version.
* "git help -a" now gives verbose output (same as "git help -av").
Those who want the old output may say "git help --no-verbose -a"..
* "git cpn --help", when "cpn" is an alias to, say, "cherry-pick -n",
reported only the alias expansion of "cpn" in earlier versions of
Git. It now runs "git cherry-pick --help" to show the manual page
of the command, while sending the alias expansion to the standard
error stream.
* "git send-email" learned to grab address-looking string on any
trailer whose name ends with "-by". This is a backward-incompatible
change. Adding "--suppress-cc=misc-by" on the command line, or
setting sendemail.suppresscc configuration variable to "misc-by",
can be used to disable this behaviour.
Updates since v2.19
-------------------
UI, Workflows & Features
* Running "git clone" against a project that contain two files with
pathnames that differ only in cases on a case insensitive
filesystem would result in one of the files lost because the
underlying filesystem is incapable of holding both at the same
time. An attempt is made to detect such a case and warn.
* "git checkout -b newbranch [HEAD]" should not have to do as much as
checking out a commit different from HEAD. An attempt is made to
optimize this special case.
* "git rev-list --stdin </dev/null" used to be an error; it now shows
no output without an error. "git rev-list --stdin --default HEAD"
still falls back to the given default when nothing is given on the
standard input.
* Lift code from GitHub to restrict delta computation so that an
object that exists in one fork is not made into a delta against
another object that does not appear in the same forked repository.
* "git format-patch" learned new "--interdiff" and "--range-diff"
options to explain the difference between this version and the
previous attempt in the cover letter (or after the three-dashes as
a comment).
* "git mailinfo" used in "git am" learned to make a best-effort
recovery of a patch corrupted by MUA that sends text/plain with
format=flawed option.
(merge 3aa4d81f88 rs/mailinfo-format-flowed later to maint).
* The rules used by "git push" and "git fetch" to determine if a ref
can or cannot be updated were inconsistent; specifically, fetching
to update existing tags were allowed even though tags are supposed
to be unmoving anchoring points. "git fetch" was taught to forbid
updates to existing tags without the "--force" option.
* "git multi-pack-index" learned to detect corruption in the .midx
file it uses, and this feature has been integrated into "git fsck".
* Generation of (experimental) commit-graph files have so far been
fairly silent, even though it takes noticeable amount of time in a
meaningfully large repository. The users will now see progress
output.
* The minimum version of Windows supported by Windows port of Git is
now set to Vista.
* The completion script (in contrib/) learned to complete a handful of
options "git stash list" command takes.
* The completion script (in contrib/) learned that "git fetch
--multiple" only takes remote names as arguments and no refspecs.
* "git status" learns to show progress bar when refreshing the index
takes a long time.
(merge ae9af12287 nd/status-refresh-progress later to maint).
* "git help -a" and "git help -av" give different pieces of
information, and generally the "verbose" version is more friendly
to the new users. "git help -a" by default now uses the more
verbose output (with "--no-verbose", you can go back to the
original). Also "git help -av" now lists aliases and external
commands, which it did not used to.
* Unlike "grep", "git grep" by default recurses to the whole tree.
The command learned "git grep --recursive" option, so that "git
grep --no-recursive" can serve as a synonym to setting the
max-depth to 0.
* When pushing into a repository that borrows its objects from an
alternate object store, "git receive-pack" that responds to the
push request on the other side lists the tips of refs in the
alternate to reduce the amount of objects transferred. This
sometimes is detrimental when the number of refs in the alternate
is absurdly large, in which case the bandwidth saved in potentially
fewer objects transferred is wasted in excessively large ref
advertisement. The alternate refs that are advertised are now
configurable with a pair of configuration variables.
* "git cmd --help" when "cmd" is aliased used to only say "cmd is
aliased to ...". Now it shows that to the standard error stream
and runs "git $cmd --help" where $cmd is the first word of the
alias expansion.
* The documentation of "git gc" has been updated to mention that it
is no longer limited to "pruning away crufts" but also updates
ancillary files like commit-graph as a part of repository
optimization.
* "git p4 unshelve" improvements.
* The logic to select the default user name and e-mail on Windows has
been improved.
(merge 501afcb8b0 js/mingw-default-ident later to maint).
* The "rev-list --filter" feature learned to exclude all trees via
"tree:0" filter.
* "git send-email" learned to grab address-looking string on any
trailer whose name ends with "-by"; --suppress-cc=misc-by on the
command line, or setting sendemail.suppresscc configuration
variable to "misc-by", can be used to disable this behaviour.
* "git mergetool" learned to take the "--[no-]gui" option, just like
"git difftool" does.
* "git rebase -i" learned a new insn, 'break', that the user can
insert in the to-do list. Upon hitting it, the command returns
control back to the user.
* New "--pretty=format:" placeholders %GF and %GP that show the GPG
key fingerprints have been invented.
* On platforms with recent cURL library, http.sslBackend configuration
variable can be used to choose a different SSL backend at runtime.
The Windows port uses this mechanism to switch between OpenSSL and
Secure Channel while talking over the HTTPS protocol.
* "git send-email" learned to disable SMTP authentication via the
"--smtp-auth=none" option, even when the smtp username is given
(which turns the authentication on by default).
* A fourth class of configuration files (in addition to the
traditional "system wide", "per user in the $HOME directory" and
"per repository in the $GIT_DIR/config") has been introduced so
that different worktrees that share the same repository (hence the
same $GIT_DIR/config file) can use different customization.
* A pattern with '**' that does not have a slash on either side used
to be an invalid one, but the code now treats such double-asterisks
the same way as two normal asterisks that happen to be adjacent to
each other.
(merge e5bbe09e88 nd/wildmatch-double-asterisk later to maint).
* The "--no-patch" option, which can be used to get a high-level
overview without the actual line-by-line patch difference shown, of
the "range-diff" command was earlier broken, which has been
corrected.
* The recently merged "rebase in C" has an escape hatch to use the
scripted version when necessary, but it hasn't been documented,
which has been corrected.
Performance, Internal Implementation, Development Support etc.
* Developer builds now use -Wunused-function compilation option.
* One of our CI tests to run with "unusual/experimental/random"
settings now also uses commit-graph and midx.
* When there are too many packfiles in a repository (which is not
recommended), looking up an object in these would require
consulting many pack .idx files; a new mechanism to have a single
file that consolidates all of these .idx files is introduced.
* "git submodule update" is getting rewritten piece-by-piece into C.
* The code for computing history reachability has been shuffled,
obtained a bunch of new tests to cover them, and then being
improved.
* The unpack_trees() API used in checking out a branch and merging
walks one or more trees along with the index. When the cache-tree
in the index tells us that we are walking a tree whose flattened
contents is known (i.e. matches a span in the index), as linearly
scanning a span in the index is much more efficient than having to
open tree objects recursively and listing their entries, the walk
can be optimized, which has been done.
* When creating a thin pack, which allows objects to be made into a
delta against another object that is not in the resulting pack but
is known to be present on the receiving end, the code learned to
take advantage of the reachability bitmap; this allows the server
to send a delta against a base beyond the "boundary" commit.
* spatch transformation to replace boolean uses of !hashcmp() to
newly introduced oideq() is added, and applied, to regain
performance lost due to support of multiple hash algorithms.
* Fix a bug in which the same path could be registered under multiple
worktree entries if the path was missing (for instance, was removed
manually). Also, as a convenience, expand the number of cases in
which --force is applicable.
* Split Documentation/config.txt for easier maintenance.
(merge 6014363f0b nd/config-split later to maint).
* Test helper binaries clean-up.
(merge c9a1f4161f nd/test-tool later to maint).
* Various tests have been updated to make it easier to swap the
hash function used for object identification.
(merge ae0c89d41b bc/hash-independent-tests later to maint).
* Update fsck.skipList implementation and documentation.
(merge 371a655074 ab/fsck-skiplist later to maint).
* An alias that expands to another alias has so far been forbidden,
but now it is allowed to create such an alias.
* Various test scripts have been updated for style and also correct
handling of exit status of various commands.
* "gc --auto" ended up calling exit(-1) upon error, which has been
corrected to use exit(1). Also the error reporting behaviour when
daemonized has been updated to exit with zero status when stopping
due to a previously discovered error (which implies there is no
point running gc to improve the situation); we used to exit with
failure in such a case.
* Various codepaths in the core-ish part learned to work on an
arbitrary in-core index structure, not necessarily the default
instance "the_index".
(merge b3c7eef9b0 nd/the-index later to maint).
* Code clean-up in the internal machinery used by "git status" and
"git commit --dry-run".
(merge 73ba5d78b4 ss/wt-status-committable later to maint).
* Some environment variables that control the runtime options of Git
used during tests are getting renamed for consistency.
(merge 4231d1ba99 bp/rename-test-env-var later to maint).
* A pair of new extensions to the index file have been introduced.
They allow the index file to be read in parallel for performance.
* The oidset API was built on top of the oidmap API which in turn is
on the hashmap API. Replace the implementation to build on top of
the khash API and gain performance.
* Over some transports, fetching objects with an exact commit object
name can be done without first seeing the ref advertisements. The
code has been optimized to exploit this.
* In a partial clone that will lazily be hydrated from the
originating repository, we generally want to avoid "does this
object exist (locally)?" on objects that we deliberately omitted
when we created the clone. The cache-tree codepath (which is used
to write a tree object out of the index) however insisted that the
object exists, even for paths that are outside of the partial
checkout area. The code has been updated to avoid such a check.
* To help developers, an EditorConfig file that attempts to follow
the project convention has been added.
(merge b548d698a0 bc/editorconfig later to maint).
* The result of coverage test can be combined with "git blame" to
check the test coverage of code introduced recently with a new
'coverage-diff' tool (in contrib/).
(merge 783faedd65 ds/coverage-diff later to maint).
* An experiment to fuzz test a few areas, hopefully we can gain more
coverage to various areas.
* More codepaths are moving away from hardcoded hash sizes.
* The way the Windows port figures out the current directory has been
improved.
* The way DLLs are loaded on the Windows port has been improved.
* Some tests have been reorganized and renamed; "ls t/" now gives a
better overview of what is tested for these scripts than before.
* "git rebase" and "git rebase -i" have been reimplemented in C.
* Windows port learned to use nano-second resolution file timestamps.
* The overly large Documentation/config.txt file have been split into
million little pieces. This potentially allows each individual piece
to be included into the manual page of the command it affects more easily.
* Replace three string-list instances used as look-up tables in "git
fetch" with hashmaps.
* Unify code to read the author-script used in "git am" and the
commands that use the sequencer machinery, e.g. "git rebase -i".
* In preparation to the day when we can deprecate and remove the
"rebase -p", make sure we can skip and later remove tests for
it.
* The history traversal used to implement the tag-following has been
optimized by introducing a new helper.
* The helper function to refresh the cached stat information in the
in-core index has learned to perform the lstat() part of the
operation in parallel on multi-core platforms.
* The code to traverse objects for reachability, used to decide what
objects are unreferenced and expendable, have been taught to also
consider per-worktree refs of other worktrees as starting points to
prevent data loss.
* "git add" needs to internally run "diff-files" equivalent, and the
codepath learned the same optimization as "diff-files" has to run
lstat(2) in parallel to find which paths have been updated in the
working tree.
* The procedure to install dependencies before testing at Travis CI
is getting revamped for both simplicity and flexibility, taking
advantage of the recent move to the vm-based environment.
* The support for format-patch (and send-email) by the command-line
completion script (in contrib/) has been simplified a bit.
* The revision walker machinery learned to take advantage of the
commit generation numbers stored in the commit-graph file.
* The codebase has been cleaned up to reduce "#ifndef NO_PTHREADS".
* The way -lcurl library gets linked has been simplified by taking
advantage of the fact that we can just ask curl-config command how.
* Various functions have been audited for "-Wunused-parameter" warnings
and bugs in them got fixed.
* A sanity check for start-up sequence has been added in the config
API codepath.
* The build procedure to link for fuzzing test has been made
customizable with a new Makefile variable.
* The way "git rebase" parses and forwards the command line options
meant for underlying "git am" has been revamped, which fixed for
options with parameters that were not passed correctly.
* Our testing framework uses a special i18n "poisoned localization"
feature to find messages that ought to stay constant but are
incorrectly marked to be translated. This feature has been made
into a runtime option (it used to be a compile-time option).
* "git push" used to check ambiguities between object-names and
refnames while processing the list of refs' old and new values,
which was unnecessary (as it knew that it is feeding raw object
names). This has been optimized out.
* The xcurl_off_t() helper function is used to cast size_t to
curl_off_t, but some compilers gave warnings against the code to
ensure the casting is done without wraparound, when size_t is
narrower than curl_off_t. This warning has been squelched.
* Code preparation to replace ulong vars with size_t vars where
appropriate continues.
* The "test installed Git" mode of our test suite has been updated to
work better.
* A coding convention around the Coccinelle semantic patches to have
two classes to ease code migration process has been proposed and
its support has been added to the Makefile.
* The "container" mode of TravisCI is going away. Our .travis.yml
file is getting prepared for the transition.
(merge 32ee384be8 ss/travis-ci-force-vm-mode later to maint).
* Our test scripts can now take the '-V' option as a synonym for the
'--verbose-log' option.
(merge a5f52c6dab sg/test-verbose-log later to maint).
Fixes since v2.19
-----------------
* "git interpret-trailers" and its underlying machinery had a buggy
code that attempted to ignore patch text after commit log message,
which triggered in various codepaths that will always get the log
message alone and never get such an input.
(merge 66e83d9b41 jk/trailer-fixes later to maint).
* Malformed or crafted data in packstream can make our code attempt
to read or write past the allocated buffer and abort, instead of
reporting an error, which has been fixed.
* "git rebase -i" did not clear the state files correctly when a run
of "squash/fixup" is aborted and then the user manually amended the
commit instead, which has been corrected.
(merge 10d2f35436 js/rebase-i-autosquash-fix later to maint).
* When fsmonitor is in use, after operation on submodules updates
.gitmodules, we lost track of the fact that we did so and relied on
stale fsmonitor data.
(merge 43f1180814 bp/mv-submodules-with-fsmonitor later to maint).
* Fix for a long-standing bug that leaves the index file corrupt when
it shrinks during a partial commit.
(merge 6c003d6ffb jk/reopen-tempfile-truncate later to maint).
* Further fix for O_APPEND emulation on Windows
(merge eeaf7ddac7 js/mingw-o-append later to maint).
* A corner case bugfix in "git rerere" code.
(merge ad2bf0d9b4 en/rerere-multi-stage-1-fix later to maint).
* "git add ':(attr:foo)'" is not supported and is supposed to be
rejected while the command line arguments are parsed, but we fail
to reject such a command line upfront.
(merge 84d938b732 nd/attr-pathspec-fix later to maint).
* Recent update broke the reachability algorithm when refs (e.g.
tags) that point at objects that are not commit were involved,
which has been fixed.
* "git rebase" etc. in Git 2.19 fails to abort when given an empty
commit log message as result of editing, which has been corrected.
(merge a3ec9eaf38 en/sequencer-empty-edit-result-aborts later to maint).
* The code to backfill objects in lazily cloned repository did not
work correctly, which has been corrected.
(merge e68302011c jt/lazy-object-fetch-fix later to maint).
* Update error messages given by "git remote" and make them consistent.
(merge 5025425dff ms/remote-error-message-update later to maint).
* "git update-ref" learned to make both "--no-deref" and "--stdin"
work at the same time.
(merge d345e9fbe7 en/update-ref-no-deref-stdin later to maint).
* Recently added "range-diff" had a corner-case bug to cause it
segfault, which has been corrected.
(merge e467a90c7a tg/range-diff-corner-case-fix later to maint).
* The recently introduced commit-graph auxiliary data is incompatible
with mechanisms such as replace & grafts that "breaks" immutable
nature of the object reference relationship. Disable optimizations
based on its use (and updating existing commit-graph) when these
incompatible features are in use in the repository.
(merge 829a321569 ds/commit-graph-with-grafts later to maint).
* The mailmap file update.
(merge 255eb03edf jn/mailmap-update later to maint).
* The code in "git status" sometimes hit an assertion failure. This
was caused by a structure that was reused without cleaning the data
used for the first run, which has been corrected.
(merge 3e73cc62c0 en/status-multiple-renames-to-the-same-target-fix later to maint).
* "git fetch $repo $object" in a partial clone did not correctly
fetch the asked-for object that is referenced by an object in
promisor packfile, which has been fixed.
* A corner-case bugfix.
(merge c5cbb27cb5 sm/show-superproject-while-conflicted later to maint).
* Various fixes to "diff --color-moved-ws".
* A partial clone that is configured to lazily fetch missing objects
will on-demand issue a "git fetch" request to the originating
repository to fill not-yet-obtained objects. The request has been
optimized for requesting a tree object (and not the leaf blob
objects contained in it) by telling the originating repository that
no blobs are needed.
(merge 4c7f9567ea jt/non-blob-lazy-fetch later to maint).
* The codepath to support the experimental split-index mode had
remaining "racily clean" issues fixed.
(merge 4c490f3d32 sg/split-index-racefix later to maint).
* "git log --graph" showing an octopus merge sometimes miscounted the
number of display columns it is consuming to show the merge and its
parent commits, which has been corrected.
(merge 04005834ed np/log-graph-octopus-fix later to maint).
* "git range-diff" did not work well when the compared ranges had
changes in submodules and the "--submodule=log" was used.
* The implementation of run_command() API on the UNIX platforms had a
bug that caused a command not on $PATH to be found in the current
directory.
(merge f67b980771 jk/run-command-notdot later to maint).
* A mutex used in "git pack-objects" were not correctly initialized
and this caused "git repack" to dump core on Windows.
(merge 34204c8166 js/pack-objects-mutex-init-fix later to maint).
* Under certain circumstances, "git diff D:/a/b/c D:/a/b/d" on
Windows would strip initial parts from the paths because they
were not recognized as absolute, which has been corrected.
(merge ffd04e92e2 js/diff-notice-has-drive-prefix later to maint).
* The receive.denyCurrentBranch=updateInstead codepath kicked in even
when the push should have been rejected due to other reasons, such
as it does not fast-forward or the update-hook rejects it, which
has been corrected.
(merge b072a25fad jc/receive-deny-current-branch-fix later to maint).
* The logic to determine the archive type "git archive" uses did not
correctly kick in for "git archive --remote", which has been
corrected.
* "git repack" in a shallow clone did not correctly update the
shallow points in the repository, leading to a repository that
does not pass fsck.
(merge 5dcfbf564c js/shallow-and-fetch-prune later to maint).
* Some codepaths failed to form a proper URL when .gitmodules record
the URL to a submodule repository as relative to the repository of
superproject, which has been corrected.
(merge e0a862fdaf sb/submodule-url-to-absolute later to maint).
* "git fetch" over protocol v2 into a shallow repository failed to
fetch full history behind a new tip of history that was diverged
before the cut-off point of the history that was previously fetched
shallowly.
* The command line completion machinery (in contrib/) has been
updated to allow the completion script to tweak the list of options
that are reported by the parse-options machinery correctly.
(merge 276b49ff34 nd/completion-negation later to maint).
* Operations on promisor objects make sense in the context of only a
small subset of the commands that internally use the revisions
machinery, but the "--exclude-promisor-objects" option were taken
and led to nonsense results by commands like "log", to which it
didn't make much sense. This has been corrected.
(merge 669b1d2aae md/exclude-promisor-objects-fix later to maint).
* A regression in Git 2.12 era made "git fsck" fall into an infinite
loop while processing truncated loose objects.
(merge 18ad13e5b2 jk/detect-truncated-zlib-input later to maint).
* "git ls-remote $there foo" was broken by recent update for the
protocol v2 and stopped showing refs that match 'foo' that are not
refs/{heads,tags}/foo, which has been fixed.
(merge 6a139cdd74 jk/proto-v2-ref-prefix-fix later to maint).
* Additional comment on a tricky piece of code to help developers.
(merge 0afbe3e806 jk/stream-pack-non-delta-clarification later to maint).
* A couple of tests used to leave the repository in a state that is
deliberately corrupt, which have been corrected.
(merge aa984dbe5e ab/pack-tests-cleanup later to maint).
* The submodule support has been updated to read from the blob at
HEAD:.gitmodules when the .gitmodules file is missing from the
working tree.
(merge 2b1257e463 ao/submodule-wo-gitmodules-checked-out later to maint).
* "git fetch" was a bit loose in parsing responses from the other side
when talking over the protocol v2.
* "git rev-parse --exclude=* --branches --branches" (i.e. first
saying "add only things that do not match '*' out of all branches"
and then adding all branches, without any exclusion this time)
worked as expected, but "--exclude=* --all --all" did not work the
same way, which has been fixed.
(merge 5221048092 ag/rev-parse-all-exclude-fix later to maint).
* "git send-email --transfer-encoding=..." in recent versions of Git
sometimes produced an empty "Content-Transfer-Encoding:" header,
which has been corrected.
(merge 3c88e46f1a al/send-email-auto-cte-fixup later to maint).
* The interface into "xdiff" library used to discover the offset and
size of a generated patch hunk by first formatting it into the
textual hunk header "@@ -n,m +k,l @@" and then parsing the numbers
out. A new interface has been introduced to allow callers a more
direct access to them.
(merge 5eade0746e jk/xdiff-interface later to maint).
* Pathspec matching against a tree object were buggy when negative
pathspec elements were involved, which has been fixed.
(merge b7845cebc0 nd/tree-walk-path-exclusion later to maint).
* "git merge" and "git pull" that merges into an unborn branch used
to completely ignore "--verify-signatures", which has been
corrected.
(merge 01a31f3bca jk/verify-sig-merge-into-void later to maint).
* "git rebase --autostash" did not correctly re-attach the HEAD at times.
* "rev-parse --exclude=<pattern> --branches=<pattern>" etc. did not
quite work, which has been corrected.
(merge 9ab9b5df0e ra/rev-parse-exclude-glob later to maint).
* When editing a patch in a "git add -i" session, a hunk could be
made to no-op. The "git apply" program used to reject a patch with
such a no-op hunk to catch user mistakes, but it is now updated to
explicitly allow a no-op hunk in an edited patch.
(merge 22cb3835b9 js/apply-recount-allow-noop later to maint).
* The URL to an MSDN page in a comment has been updated.
(merge 2ef2ae2917 js/mingw-msdn-url later to maint).
* "git ls-remote --sort=<thing>" can feed an object that is not yet
available into the comparison machinery and segfault, which has
been corrected to check such a request upfront and reject it.
* When "git bundle" aborts due to an empty commit ranges
(i.e. resulting in an empty pack), it left a file descriptor to an
lockfile open, which resulted in leftover lockfile on Windows where
you cannot remove a file with an open file descriptor. This has
been corrected.
(merge 2c8ee1f53c jk/close-duped-fd-before-unlock-for-bundle later to maint).
* "git format-patch --stat=<width>" can be used to specify the width
used by the diffstat (shown in the cover letter).
(merge 284aeb7e60 nd/format-patch-cover-letter-stat-width later to maint).
* The way .git/index and .git/sharedindex* files were initially
created gave these files different perm bits until they were
adjusted for shared repository settings. This was made consistent.
(merge c9d6c78870 cc/shared-index-permbits later to maint).
* "git rebase --stat" to transplant a piece of history onto a totally
unrelated history were not working before and silently showed wrong
result. With the recent reimplementation in C, it started to instead
die with an error message, as the original logic was not prepared
to cope with this case. This has now been fixed.
* The advice message to tell the user to migrate an existing graft
file to the replace system when a graft file was read was shown
even when "git replace --convert-graft-file" command, which is the
way the message suggests to use, was running, which made little
sense.
(merge 8821e90a09 ab/replace-graft-with-replace-advice later to maint).
* "git diff --raw" lost ellipses to adjust the output columns for
some time now, but the documentation still showed them.
* Code cleanup, docfix, build fix, etc.
(merge 96a7501aad ts/doc-build-manpage-xsl-quietly later to maint).
(merge b9b07efdb2 tg/conflict-marker-size later to maint).
(merge fa0aeea770 sg/doc-trace-appends later to maint).
(merge d64324cb60 tb/void-check-attr later to maint).
(merge c3b9bc94b9 en/double-semicolon-fix later to maint).
(merge 79336116f5 sg/t3701-tighten-trace later to maint).
(merge 801fa63a90 jk/dev-build-format-security later to maint).
(merge 0597dd62ba sb/string-list-remove-unused later to maint).
(merge db2d36fad8 bw/protocol-v2 later to maint).
(merge 456d7cd3a9 sg/split-index-test later to maint).
(merge 7b6057c852 tq/refs-internal-comment-fix later to maint).
(merge 29e8dc50ad tg/t5551-with-curl-7.61.1 later to maint).
(merge 55f6bce2c9 fe/doc-updates later to maint).
(merge 7987d2232d jk/check-everything-connected-is-long-gone later to maint).
(merge 4ba3c9be47 dz/credential-doc-url-matching-rules later to maint).
(merge 4c399442f7 ma/commit-graph-docs later to maint).
(merge fc0503b04e ma/t1400-undebug-test later to maint).
(merge e56b53553a nd/packobjectshook-doc-fix later to maint).
(merge c56170a0c4 ma/mailing-list-address-in-git-help later to maint).
(merge 6e8fc70fce rs/sequencer-oidset-insert-avoids-dups later to maint).
(merge ad0b8f9575 mw/doc-typofixes later to maint).
(merge d9f079ad1a jc/how-to-document-api later to maint).
(merge b1492bf315 ma/t7005-bash-workaround later to maint).
(merge ac1f98a0df du/rev-parse-is-plumbing later to maint).
(merge ca8ed443a5 mm/doc-no-dashed-git later to maint).
(merge ce366a8144 du/get-tar-commit-id-is-plumbing later to maint).
(merge 61018fe9e0 du/cherry-is-plumbing later to maint).
(merge c7e5fe79b9 sb/strbuf-h-update later to maint).
(merge 8d2008196b tq/branch-create-wo-branch-get later to maint).
(merge 2e3c894f4b tq/branch-style-fix later to maint).
(merge c5d844af9c sg/doc-show-branch-typofix later to maint).
(merge 081d91618b ah/doc-updates later to maint).
(merge b84c783882 jc/cocci-preincr later to maint).
(merge 5e495f8122 uk/merge-subtree-doc-update later to maint).
(merge aaaa881822 jk/uploadpack-packobjectshook-fix later to maint).
(merge 3063477445 tb/char-may-be-unsigned later to maint).
(merge 8c64bc9420 sg/test-rebase-editor-fix later to maint).
(merge 71571cd7d6 ma/sequencer-do-reset-saner-loop-termination later to maint).
(merge 9a4cb8781e cb/notes-freeing-always-null-fix later to maint).
(merge 3006f5ee16 ma/reset-doc-rendering-fix later to maint).
(merge 4c2eb06419 sg/daemon-test-signal-fix later to maint).
(merge d27525e519 ss/msvc-strcasecmp later to maint).
----------------------------------------------------------------
Changes since v2.19.0 are as follows:
Aaron Lindsay (1):
send-email: avoid empty transfer encoding header
Alban Gruin (21):
sequencer: make three functions and an enum from sequencer.c public
rebase -i: rewrite append_todo_help() in C
editor: add a function to launch the sequence editor
rebase -i: rewrite the edit-todo functionality in C
sequencer: add a new function to silence a command, except if it fails
rebase -i: rewrite setup_reflog_action() in C
rebase -i: rewrite checkout_onto() in C
sequencer: refactor append_todo_help() to write its message to a buffer
sequencer: change the way skip_unnecessary_picks() returns its result
t3404: todo list with commented-out commands only aborts
rebase -i: rewrite complete_action() in C
rebase -i: remove unused modes and functions
rebase -i: implement the logic to initialize $revisions in C
rebase -i: rewrite the rest of init_revisions_and_shortrevisions() in C
rebase -i: rewrite write_basic_state() in C
rebase -i: rewrite init_basic_state() in C
rebase -i: implement the main part of interactive rebase as a builtin
rebase--interactive2: rewrite the submodes of interactive rebase in C
rebase -i: remove git-rebase--interactive.sh
rebase -i: move rebase--helper modes to rebase--interactive
p3400: replace calls to `git checkout -b' by `git checkout -B'
Alexander Pyhalov (1):
t7005-editor: quote filename to fix whitespace-issue
Alexander Shopov (3):
l10n: bg.po: Updated Bulgarian translation (4185t)
l10n: bg.po: Updated Bulgarian translation (4185t)
l10n: bg.po: Updated Bulgarian translation (4187t)
Andreas Gruenbacher (1):
rev-parse: clear --exclude list after 'git rev-parse --all'
Andreas Heiduk (6):
doc: clarify boundaries of 'git worktree list --porcelain'
doc: fix ASCII art tab spacing
doc: fix inappropriate monospace formatting
doc: fix descripion for 'git tag --format'
doc: fix indentation of listing blocks in gitweb.conf.txt
doc: fix formatting in git-update-ref
Anton Serbulov (1):
mingw: fix getcwd when the parent directory cannot be queried
Antonio Ospite (10):
submodule: add a print_config_from_gitmodules() helper
submodule: factor out a config_set_in_gitmodules_file_gently function
t7411: merge tests 5 and 6
t7411: be nicer to future tests and really clean things up
submodule--helper: add a new 'config' subcommand
submodule: use the 'submodule--helper config' command
t7506: clean up .gitmodules properly before setting up new scenario
submodule: add a helper to check if it is safe to write to .gitmodules
submodule: support reading .gitmodules when it's not in the working tree
t/helper: add test-submodule-nested-repo-config
Ben Peart (19):
checkout: optimize "git checkout -b <new_branch>"
git-mv: allow submodules and fsmonitor to work together
t/README: correct spelling of "uncommon"
preload-index: use git_env_bool() not getenv() for customization
fsmonitor: update GIT_TEST_FSMONITOR support
read-cache: update TEST_GIT_INDEX_VERSION support
preload-index: update GIT_FORCE_PRELOAD_TEST support
read-cache: clean up casting and byte decoding
eoie: add End of Index Entry (EOIE) extension
config: add new index.threads config setting
read-cache: load cache extensions on a worker thread
ieot: add Index Entry Offset Table (IEOT) extension
read-cache: load cache entries on worker threads
reset: don't compute unstaged changes after reset when --quiet
reset: add new reset.quiet config setting
reset: warn when refresh_index() takes more than 2 seconds
speed up refresh_index() by utilizing preload_index()
add: speed up cmd_add() by utilizing read_cache_preload()
refresh_index: remove unnecessary calls to preload_index()
Brandon Williams (1):
config: document value 2 for protocol.version
Brendan Forster (1):
http: add support for disabling SSL revocation checks in cURL
Carlo Marcelo Arenas Belón (8):
unpack-trees: avoid dead store for struct progress
multi-pack-index: avoid dead store for struct progress
read-cache: use of memory after it is freed
commit-slabs: move MAYBE_UNUSED out
khash: silence -Wunused-function for delta-islands
compat: make sure git_mmap is not expected to write
sequencer: cleanup for gcc warning in non developer mode
builtin/notes: remove unnecessary free
Christian Couder (3):
pack-objects: refactor code into compute_layer_order()
pack-objects: move tree_depth into 'struct packing_data'
pack-objects: move 'layer' into 'struct packing_data'
Christian Hesse (2):
subtree: add build targets 'man' and 'html'
subtree: make install targets depend on build targets
Christopher Díaz Riveros (2):
l10n: es.po v2.20.0 round 1
l10n: es.po v2.20.0 round 3
Daniels Umanovskis (3):
doc: move git-rev-parse from porcelain to plumbing
doc: move git-get-tar-commit-id to plumbing
doc: move git-cherry to plumbing
David Zych (1):
doc: clarify gitcredentials path component matching
Denton Liu (3):
mergetool: accept -g/--[no-]gui as arguments
completion: support `git mergetool --[no-]gui`
doc: document diff/merge.guitool config keys
Derrick Stolee (93):
multi-pack-index: add design document
multi-pack-index: add format details
multi-pack-index: add builtin
multi-pack-index: add 'write' verb
midx: write header information to lockfile
multi-pack-index: load into memory
t5319: expand test data
packfile: generalize pack directory list
multi-pack-index: read packfile list
multi-pack-index: write pack names in chunk
midx: read pack names into array
midx: sort and deduplicate objects from packfiles
midx: write object ids in a chunk
midx: write object id fanout chunk
midx: write object offsets
config: create core.multiPackIndex setting
midx: read objects from multi-pack-index
midx: use midx in abbreviation calculations
midx: use existing midx when writing new one
midx: use midx in approximate_object_count
midx: prevent duplicate packfile loads
packfile: skip loading index if in multi-pack-index
midx: clear midx on repack
commit-reach: move walk methods from commit.c
commit.h: remove method declarations
commit-reach: move ref_newer from remote.c
commit-reach: move commit_contains from ref-filter
upload-pack: make reachable() more generic
upload-pack: refactor ok_to_give_up()
upload-pack: generalize commit date cutoff
commit-reach: move can_all_from_reach_with_flags
test-reach: create new test tool for ref_newer
test-reach: test in_merge_bases
test-reach: test is_descendant_of
test-reach: test get_merge_bases_many
test-reach: test reduce_heads
test-reach: test can_all_from_reach_with_flags
test-reach: test commit_contains
commit-reach: replace ref_newer logic
commit-reach: make can_all_from_reach... linear
commit-reach: use can_all_from_reach
multi-pack-index: provide more helpful usage info
multi-pack-index: store local property
midx: mark bad packed objects
midx: stop reporting garbage
midx: fix bug that skips midx with alternates
packfile: add all_packs list
treewide: use get_all_packs
midx: test a few commands that use get_all_packs
pack-objects: consider packs in multi-pack-index
commit-graph: update design document
test-repository: properly init repo
commit-graph: not compatible with replace objects
commit-graph: not compatible with grafts
commit-graph: not compatible with uninitialized repo
commit-graph: close_commit_graph before shallow walk
commit-graph: define GIT_TEST_COMMIT_GRAPH
t3206-range-diff.sh: cover single-patch case
t5318: use test_oid for HASH_LEN
multi-pack-index: add 'verify' verb
multi-pack-index: verify bad header
multi-pack-index: verify corrupt chunk lookup table
multi-pack-index: verify packname order
multi-pack-index: verify missing pack
multi-pack-index: verify oid fanout order
multi-pack-index: verify oid lookup order
multi-pack-index: fix 32-bit vs 64-bit size check
multi-pack-index: verify object offsets
multi-pack-index: report progress during 'verify'
fsck: verify multi-pack-index
commit-reach: properly peel tags
commit-reach: fix memory and flag leaks
commit-reach: cleanups in can_all_from_reach...
commit-graph: clean up leaked memory during write
commit-graph: reduce initial oid allocation
midx: fix broken free() in close_midx()
contrib: add coverage-diff script
ci: add optional test variables
commit-reach: fix first-parent heuristic
midx: close multi-pack-index on repack
multi-pack-index: define GIT_TEST_MULTI_PACK_INDEX
packfile: close multi-pack-index in close_all_packs
prio-queue: add 'peek' operation
test-reach: add run_three_modes method
test-reach: add rev-list tests
revision.c: begin refactoring --topo-order logic
commit/revisions: bookkeeping before refactoring
revision.c: generation-based topo-order algorithm
t6012: make rev-list tests more interesting
commit-reach: implement get_reachable_subset
test-reach: test get_reachable_subset
remote: make add_missing_tags() linear
pack-objects: ignore ambiguous object warnings
Elijah Newren (14):
Remove superfluous trailing semicolons
t4200: demonstrate rerere segfault on specially crafted merge
rerere: avoid buffer overrun
update-ref: fix type of update_flags variable to match its usage
update-ref: allow --no-deref with --stdin
sequencer: fix --allow-empty-message behavior, make it smarter
merge-recursive: set paths correctly when three-way merging content
merge-recursive: avoid wrapper function when unnecessary and wasteful
merge-recursive: remove final remaining caller of merge_file_one()
merge-recursive: rename merge_file_1() and merge_content()
commit: fix erroneous BUG, 'multiple renames on the same target? how?'
merge-recursive: improve auto-merging messages with path collisions
merge-recursive: avoid showing conflicts with merge branch before HEAD
fsck: move fsck_head_link() to get_default_heads() to avoid some globals
Eric Sunshine (26):
format-patch: allow additional generated content in make_cover_letter()
format-patch: add --interdiff option to embed diff in cover letter
format-patch: teach --interdiff to respect -v/--reroll-count
interdiff: teach show_interdiff() to indent interdiff
log-tree: show_log: make commentary block delimiting reusable
format-patch: allow --interdiff to apply to a lone-patch
range-diff: respect diff_option.file rather than assuming 'stdout'
range-diff: publish default creation factor
range-diff: relieve callers of low-level configuration burden
format-patch: add --range-diff option to embed diff in cover letter
format-patch: extend --range-diff to accept revision range
format-patch: teach --range-diff to respect -v/--reroll-count
format-patch: add --creation-factor tweak for --range-diff
format-patch: allow --range-diff to apply to a lone-patch
worktree: don't die() in library function find_worktree()
worktree: move delete_git_dir() earlier in file for upcoming new callers
worktree: generalize delete_git_dir() to reduce code duplication
worktree: prepare for more checks of whether path can become worktree
worktree: disallow adding same path multiple times
worktree: teach 'add' to respect --force for registered but missing path
worktree: teach 'move' to override lock when --force given twice
worktree: teach 'remove' to override lock when --force given twice
worktree: delete .git/worktrees if empty after 'remove'
doc-diff: fix non-portable 'man' invocation
doc-diff: add --clean mode to remove temporary working gunk
doc/Makefile: drop doc-diff worktree and temporary files on "make clean"
Frederick Eaton (3):
git-archimport.1: specify what kind of Arch we're talking about
git-column.1: clarify initial description, provide examples
git-describe.1: clarify that "human readable" is also git-readable
Greg Hurrell (1):
doc: update diff-format.txt for removed ellipses in --raw
James Knight (1):
build: link with curl-defined linker flags
Jann Horn (2):
patch-delta: fix oob read
patch-delta: consistently report corruption
Jean-Noël Avila (3):
l10n: fr.po v2.20 rnd 1
i18n: fix small typos
l10n: fr.po v2.20.0 round 3
Jeff Hostetler (2):
t0051: test GIT_TRACE to a windows named pipe
mingw: fix mingw_open_append to work with named pipes
Jeff King (98):
branch: make "-l" a synonym for "--list"
Add delta-islands.{c,h}
pack-objects: add delta-islands support
repack: add delta-islands support
t5320: tests for delta islands
t/perf: factor boilerplate out of test_perf
t/perf: factor out percent calculations
t/perf: add infrastructure for measuring sizes
t/perf: add perf tests for fetches from a bitmapped server
pack-bitmap: save "have" bitmap from walk
pack-objects: reuse on-disk deltas for thin "have" objects
SubmittingPatches: mention doc-diff
rev-list: make empty --stdin not an error
trailer: use size_t for string offsets
trailer: use size_t for iterating trailer list
trailer: pass process_trailer_opts to trailer_info_get()
interpret-trailers: tighten check for "---" patch boundary
interpret-trailers: allow suppressing "---" divider
pretty, ref-filter: format %(trailers) with no_divider option
sequencer: ignore "---" divider when parsing trailers
append_signoff: use size_t for string offsets
coccinelle: use <...> for function exclusion
introduce hasheq() and oideq()
convert "oidcmp() == 0" to oideq()
convert "hashcmp() == 0" to hasheq()
convert "oidcmp() != 0" to "!oideq()"
convert "hashcmp() != 0" to "!hasheq()"
convert hashmap comparison functions to oideq()
read-cache: use oideq() in ce_compare functions
show_dirstat: simplify same-content check
doc-diff: always use oids inside worktree
test-delta: read input into a heap buffer
t5303: test some corrupt deltas
patch-delta: handle truncated copy parameters
t5303: use printf to generate delta bases
doc/git-branch: remove obsolete "-l" references
bitmap_has_sha1_in_uninteresting(): drop BUG check
t5310: test delta reuse with bitmaps
traverse_bitmap_commit_list(): don't free result
pack-bitmap: drop "loaded" flag
reopen_tempfile(): truncate opened file
doc-diff: force worktree add
config.mak.dev: add -Wformat-security
pack-objects: handle island check for "external" delta base
receive-pack: update comment with check_everything_connected
submodule--helper: use "--" to signal end of clone options
submodule-config: ban submodule urls that start with dash
submodule-config: ban submodule paths that start with a dash
fsck: detect submodule urls starting with dash
fsck: detect submodule paths starting with dash
more oideq/hasheq conversions
transport: drop refnames from for_each_alternate_ref
test-tool: show tool list on error
config.mak.dev: enable -Wunused-function
run-command: mark path lookup errors with ENOENT
t5410: use longer path for sample script
upload-pack: fix broken if/else chain in config callback
t1450: check large blob in trailing-garbage test
check_stream_sha1(): handle input underflow
cat-file: handle streaming failures consistently
ls-remote: do not send ref prefixes for patterns
ls-remote: pass heads/tags prefixes to transport
read_istream_pack_non_delta(): document input handling
xdiff: provide a separate emit callback for hunks
xdiff-interface: provide a separate consume callback for hunks
rev-list: handle flags for --indexed-objects
approxidate: handle pending number for "specials"
pathspec: handle non-terminated strings with :(attr)
diff: avoid generating unused hunk header lines
diff: discard hunk headers for patch-ids earlier
diff: use hunk callback for word-diff
combine-diff: use an xdiff hunk callback
diff: convert --check to use a hunk callback
range-diff: use a hunk callback
xdiff-interface: drop parse_hunk_header()
apply: mark include/exclude options as NONEG
am: handle --no-patch-format option
ls-files: mark exclude options as NONEG
pack-objects: mark index-version option as NONEG
cat-file: mark batch options with NONEG
status: mark --find-renames option with NONEG
format-patch: mark "--no-numbered" option with NONEG
show-branch: mark --reflog option as NONEG
tag: mark "--message" option with NONEG
cat-file: report an error on multiple --batch options
apply: return -1 from option callback instead of calling exit(1)
parse-options: drop OPT_DATE()
assert NOARG/NONEG behavior of parse-options callbacks
midx: double-check large object write loop
merge: extract verify_merge_signature() helper
merge: handle --verify-signatures for unborn branch
pull: handle --verify-signatures for unborn branch
approxidate: fix NULL dereference in date_time()
bundle: dup() output descriptor closer to point-of-use
pack-objects: fix tree_depth and layer invariants
pack-objects: zero-initialize tree_depth/layer arrays
pack-objects: fix off-by-one in delta-island tree-depth computation
t5562: fix perl path
Jiang Xin (5):
l10n: zh_CN: review for git v2.19.0 l10n
l10n: git.pot: v2.20.0 round 1 (254 new, 27 removed)
l10n: git.pot: v2.20.0 round 2 (2 new, 2 removed)
l10n: git.pot: v2.20.0 round 3 (5 new, 3 removed)
l10n: zh_CN: for git v2.20.0 l10n round 1 to 3
Johannes Schindelin (64):
rebase -i --autosquash: demonstrate a problem skipping the last squash
rebase -i: be careful to wrap up fixup/squash chains
compat/poll: prepare for targeting Windows Vista
mingw: set _WIN32_WINNT explicitly for Git for Windows
mingw: bump the minimum Windows version to Vista
builtin rebase: prepare for builtin rebase -i
rebase -i: clarify what happens on a failed `exec`
rebase -i: introduce the 'break' command
getpwuid(mingw): initialize the structure only once
getpwuid(mingw): provide a better default for the user name
mingw: use domain information for default email
http: add support for selecting SSL backends at runtime
pack-objects: fix typo 'detla' -> 'delta'
pack-objects (mingw): demonstrate a segmentation fault with large deltas
pack-objects (mingw): initialize `packing_data` mutex in the correct spot
rebase (autostash): avoid duplicate call to state_dir_path()
rebase (autostash): store the full OID in <state-dir>/autostash
rebase (autostash): use an explicit OID to apply the stash
mingw: factor out code to set stat() data
rebase --autostash: demonstrate a problem with dirty submodules
rebase --autostash: fix issue with dirty submodules
mingw: load system libraries the recommended way
mingw: ensure `getcwd()` reports the correct case
repack: point out a bug handling stale shallow info
shallow: offer to prune only non-existing entries
repack -ad: prune the list of shallow commits
http: when using Secure Channel, ignore sslCAInfo by default
t7800: fix quoting
mingw: reencode environment variables on the fly (UTF-16 <-> UTF-8)
config: rename `dummy` parameter to `cb` in git_default_config()
config: allow for platform-specific core.* config settings
config: move Windows-specific config settings into compat/mingw.c
mingw: unset PERL5LIB by default
mingw: fix isatty() after dup2()
t3404: decouple some test cases from outcomes of previous test cases
t3418: decouple test cases from a previous `rebase -p` test case
tests: optionally skip `git rebase -p` tests
Windows: force-recompile git.res for differing architectures
built-in rebase: demonstrate regression with --autostash
built-in rebase --autostash: leave the current branch alone if possible
Update .mailmap
rebase -r: demonstrate bug with conflicting merges
rebase -r: do not write MERGE_HEAD unless needed
rebase -i: include MERGE_HEAD into files to clean up
built-in rebase --skip/--abort: clean up stale .git/<name> files
status: rebase and merge can be in progress at the same time
apply --recount: allow "no-op hunks"
rebase: consolidate clean-up code before leaving reset_head()
rebase: prepare reset_head() for more flags
built-in rebase: reinstate `checkout -q` behavior where appropriate
tests: fix GIT_TEST_INSTALLED's PATH to include t/helper/
tests: respect GIT_TEST_INSTALLED when initializing repositories
t/lib-gettext: test installed git-sh-i18n if GIT_TEST_INSTALLED is set
mingw: use `CreateHardLink()` directly
rebase: really just passthru the `git am` options
rebase: validate -C<n> and --whitespace=<mode> parameters early
config: report a bug if git_dir exists without commondir
tests: do not require Git to be built when testing an installed Git
tests: explicitly use `git.exe` on Windows
mingw: replace an obsolete link with the superseding one
legacy-rebase: backport -C<n> and --whitespace=<option> checks
rebase: warn about the correct tree's OID
rebase: fix GIT_REFLOG_ACTION regression
rebase --stat: fix when rebasing to an unrelated history
Johannes Sixt (4):
diff: don't attempt to strip prefix from absolute Windows paths
rebase -i: recognize short commands without arguments
t3404-rebase-interactive: test abbreviated commands
rebase docs: fix incorrect format of the section Behavioral Differences
Jonathan Nieder (9):
gc: improve handling of errors reading gc.log
gc: exit with status 128 on failure
gc: do not return error for prior errors in daemonized mode
commit-reach: correct accidental #include of C file
mailmap: consistently normalize brian m. carlson's name
git doc: direct bug reporters to mailing list archive
eoie: default to not writing EOIE section
ieot: default to not writing IEOT section
index: make index.threads=true enable ieot and eoie
Jonathan Tan (15):
fetch-object: unify fetch_object[s] functions
fetch-object: set exact_oid when fetching
connected: document connectivity in partial clones
fetch: in partial clone, check presence of targets
fetch-pack: avoid object flags if no_dependents
fetch-pack: exclude blobs when lazy-fetching trees
transport: allow skipping of ref listing
transport: do not list refs if possible
transport: list refs before fetch if necessary
fetch: do not list refs if fetching only hashes
cache-tree: skip some blob checks in partial clone
upload-pack: make have_obj not global
upload-pack: make want_obj not global
upload-pack: clear flags before each v2 request
fetch-pack: be more precise in parsing v2 response
Jordi Mas (2):
l10n: Update Catalan translation
l10n: Update Catalan translation
Josh Steadmon (4):
fuzz: add basic fuzz testing target.
fuzz: add fuzz testing for packfile indices.
archive: initialize archivers earlier
Makefile: use FUZZ_CXXFLAGS for linking fuzzers
Joshua Watt (1):
send-email: explicitly disable authentication
Junio C Hamano (37):
Revert "doc/Makefile: drop doc-diff worktree and temporary files on "make clean""
Initial batch post 2.19
Second batch post 2.19
Git 2.14.5
Git 2.15.3
Git 2.16.5
Git 2.17.2
Git 2.18.1
Git 2.19.1
t0000: do not get self-test disrupted by environment warnings
CodingGuidelines: document the API in *.h files
Declare that the next one will be named 2.20
Third batch for 2.20
rebase: fix typoes in error messages
Fourth batch for 2.20
Revert "subtree: make install targets depend on build targets"
Fifth batch for 2.20
receive: denyCurrentBranch=updateinstead should not blindly update
cocci: simplify "if (++u > 1)" to "if (u++)"
fsck: s/++i > 1/i++/
http: give curl version warnings consistently
Sixth batch for 2.20
Seventh batch for 2.20
fetch: replace string-list used as a look-up table with a hashmap
rebase: apply cocci patch
Eighth batch for 2.20
Ninth batch for 2.20
Makefile: ease dynamic-gettext-poison transition
Tenth batch for 2.20
Git 2.20-rc0
RelNotes: name the release properly
Prepare for 2.20-rc1
Git 2.19.2
Git 2.20-rc1
format-patch: do not let its diff-options affect --range-diff
Git 2.20-rc2
Git 2.20
Karsten Blees (2):
mingw: replace MSVCRT's fstat() with a Win32-based implementation
mingw: implement nanosecond-precision file times
Loo Rong Jie (1):
win32: replace pthread_cond_*() with much simpler code
Lucas De Marchi (1):
range-diff: allow to diff files regardless of submodule config
Luke Diamand (3):
git-p4: do not fail in verbose mode for missing 'fileSize' key
git-p4: unshelve into refs/remotes/p4-unshelved, not refs/remotes/p4/unshelved
git-p4: fully support unshelving changelists
Martin Ågren (15):
Doc: use `--type=bool` instead of `--bool`
git-config.txt: fix 'see: above' note
git-commit-graph.txt: fix bullet lists
git-commit-graph.txt: typeset more in monospace
git-commit-graph.txt: refer to "*commit*-graph file"
Doc: refer to the "commit-graph file" with dash
t1400: drop debug `echo` to actually execute `test`
builtin/commit-graph.c: UNLEAK variables
sequencer: break out of loop explicitly
git-reset.txt: render tables correctly under Asciidoctor
git-reset.txt: render literal examples as monospace
range-diff: always pass at least minimal diff options
RelNotes 2.20: move some items between sections
RelNotes 2.20: clarify sentence
RelNotes 2.20: drop spurious double quote
Matthew DeVore (19):
list-objects: store common func args in struct
list-objects: refactor to process_tree_contents
list-objects: always parse trees gently
t/README: reformat Do, Don't, Keep in mind lists
Documentation: add shell guidelines
tests: standardize pipe placement
t/*: fix ordering of expected/observed arguments
tests: don't swallow Git errors upstream of pipes
t9109: don't swallow Git errors upstream of pipes
tests: order arguments to git-rev-list properly
rev-list: handle missing tree objects properly
revision: mark non-user-given objects instead
list-objects-filter: use BUG rather than die
list-objects-filter-options: do not over-strbuf_init
list-objects-filter: implement filter tree:0
filter-trees: code clean-up of tests
list-objects: support for skipping tree traversal
Documentation/git-log.txt: do not show --exclude-promisor-objects
exclude-promisor-objects: declare when option is allowed
Max Kirillov (1):
http-backend test: make empty CONTENT_LENGTH test more realistic
Michael Witten (3):
docs: typo: s/go/to/
docs: graph: remove unnecessary `graph_update()' call
docs: typo: s/isimilar/similar/
Michał Górny (6):
gpg-interface.c: detect and reject multiple signatures on commits
gpg-interface.c: use flags to determine key/signer info presence
gpg-interface.c: support getting key fingerprint via %GF format
gpg-interface.c: obtain primary key fingerprint as well
t/t7510-signed-commit.sh: Add %GP to custom format checks
t/t7510-signed-commit.sh: add signing subkey to Eris Discordia key
Mihir Mehta (1):
doc: fix a typo and clarify a sentence
Minh Nguyen (1):
l10n: vi.po: fix typo in pack-objects
Nguyễn Thái Ngọc Duy (170):
clone: report duplicate entries on case-insensitive filesystems
trace.h: support nested performance tracing
unpack-trees: add performance tracing
unpack-trees: optimize walking same trees with cache-tree
unpack-trees: reduce malloc in cache-tree walk
unpack-trees: reuse (still valid) cache-tree from src_index
unpack-trees: add missing cache invalidation
cache-tree: verify valid cache-tree in the test suite
Document update for nd/unpack-trees-with-cache-tree
bisect.c: make show_list() build again
t/helper: keep test-tool command list sorted
t/helper: merge test-dump-untracked-cache into test-tool
t/helper: merge test-pkt-line into test-tool
t/helper: merge test-parse-options into test-tool
t/helper: merge test-dump-fsmonitor into test-tool
Makefile: add a hint about TEST_BUILTINS_OBJS
config.txt: follow camelCase naming
config.txt: move fetch part out to a separate file
config.txt: move format part out to a separate file
config.txt: move gitcvs part out to a separate file
config.txt: move gui part out to a separate file
config.txt: move pull part out to a separate file
config.txt: move push part out to a separate file
config.txt: move receive part out to a separate file
config.txt: move sendemail part out to a separate file
config.txt: move sequence.editor out of "core" part
config.txt: move submodule part out to a separate file
archive.c: remove implicit dependency the_repository
status: show progress bar if refreshing the index takes too long
add: do not accept pathspec magic 'attr'
completion: support "git fetch --multiple"
read-cache.c: remove 'const' from index_has_changes()
diff.c: reduce implicit dependency on the_index
combine-diff.c: remove implicit dependency on the_index
blame.c: rename "repo" argument to "r"
diff.c: remove the_index dependency in textconv() functions
grep.c: remove implicit dependency on the_index
diff.c: remove implicit dependency on the_index
read-cache.c: remove implicit dependency on the_index
diff-lib.c: remove implicit dependency on the_index
ll-merge.c: remove implicit dependency on the_index
merge-blobs.c: remove implicit dependency on the_index
merge.c: remove implicit dependency on the_index
patch-ids.c: remove implicit dependency on the_index
sha1-file.c: remove implicit dependency on the_index
rerere.c: remove implicit dependency on the_index
userdiff.c: remove implicit dependency on the_index
line-range.c: remove implicit dependency on the_index
submodule.c: remove implicit dependency on the_index
tree-diff.c: remove implicit dependency on the_index
ws.c: remove implicit dependency on the_index
revision.c: remove implicit dependency on the_index
revision.c: reduce implicit dependency the_repository
read-cache.c: optimize reading index format v4
config.txt: correct the note about uploadpack.packObjectsHook
help -a: improve and make --verbose default
refs.c: indent with tabs, not spaces
Add a place for (not) sharing stuff between worktrees
submodule.c: remove some of the_repository references
completion: fix __gitcomp_builtin no longer consider extra options
t1300: extract and use test_cmp_config()
worktree: add per-worktree config files
refs: new ref types to make per-worktree refs visible to all worktrees
revision.c: correct a parameter name
revision.c: better error reporting on ref from different worktrees
fsck: check HEAD and reflog from other worktrees
reflog expire: cover reflog from all worktrees
Update makefile in preparation for Documentation/config/*.txt
config.txt: move advice.* to a separate file
config.txt: move core.* to a separate file
config.txt: move add.* to a separate file
config.txt: move alias.* to a separate file
config.txt: move am.* to a separate file
config.txt: move apply.* to a separate file
config.txt: move blame.* to a separate file
config.txt: move branch.* to a separate file
config.txt: move browser.* to a separate file
config.txt: move checkout.* to a separate file
config.txt: move clean.* to a separate file
config.txt: move color.* to a separate file
config.txt: move column.* to a separate file
config.txt: move commit.* to a separate file
config.txt: move credential.* to a separate file
config.txt: move completion.* to a separate file
config.txt: move diff-config.txt to config/
config.txt: move difftool.* to a separate file
config.txt: move fastimport.* to a separate file
config.txt: move fetch-config.txt to config/
config.txt: move filter.* to a separate file
config.txt: move format-config.txt to config/
config.txt: move fmt-merge-msg-config.txt to config/
config.txt: move fsck.* to a separate file
config.txt: move gc.* to a separate file
config.txt: move gitcvs-config.txt to config/
config.txt: move gitweb.* to a separate file
config.txt: move grep.* to a separate file
config.txt: move gpg.* to a separate file
config.txt: move gui-config.txt to config/
config.txt: move guitool.* to a separate file
config.txt: move help.* to a separate file
config.txt: move ssh.* to a separate file
config.txt: move http.* to a separate file
config.txt: move i18n.* to a separate file
git-imap-send.txt: move imap.* to a separate file
config.txt: move index.* to a separate file
config.txt: move init.* to a separate file
config.txt: move instaweb.* to a separate file
config.txt: move interactive.* to a separate file
config.txt: move log.* to a separate file
config.txt: move mailinfo.* to a separate file
config.txt: move mailmap.* to a separate file
config.txt: move man.* to a separate file
config.txt: move merge-config.txt to config/
config.txt: move mergetool.* to a separate file
config.txt: move notes.* to a separate file
config.txt: move pack.* to a separate file
config.txt: move pager.* to a separate file
config.txt: move pretty.* to a separate file
config.txt: move protocol.* to a separate file
config.txt: move pull-config.txt to config/
config.txt: move push-config.txt to config/
config.txt: move rebase-config.txt to config/
config.txt: move receive-config.txt to config/
config.txt: move remote.* to a separate file
config.txt: move remotes.* to a separate file
config.txt: move repack.* to a separate file
config.txt: move rerere.* to a separate file
config.txt: move reset.* to a separate file
config.txt: move sendemail-config.txt to config/
config.txt: move sequencer.* to a separate file
config.txt: move showBranch.* to a separate file
config.txt: move splitIndex.* to a separate file
config.txt: move status.* to a separate file
config.txt: move stash.* to a separate file
config.txt: move submodule.* to a separate file
config.txt: move tag.* to a separate file
config.txt: move transfer.* to a separate file
config.txt: move uploadarchive.* to a separate file
config.txt: move uploadpack.* to a separate file
config.txt: move url.* to a separate file
config.txt: move user.* to a separate file
config.txt: move versionsort.* to a separate file
config.txt: move web.* to a separate file
config.txt: move worktree.* to a separate file
config.txt: remove config/dummy.txt
thread-utils: macros to unconditionally compile pthreads API
wildmatch: change behavior of "foo**bar" in WM_PATHNAME mode
git-worktree.txt: correct linkgit command name
sequencer.c: remove a stray semicolon
tree-walk.c: fix overoptimistic inclusion in :(exclude) matching
run-command.h: include thread-utils.h instead of pthread.h
send-pack.c: move async's #ifdef NO_PTHREADS back to run-command.c
index-pack: remove #ifdef NO_PTHREADS
name-hash.c: remove #ifdef NO_PTHREADS
attr.c: remove #ifdef NO_PTHREADS
grep: remove #ifdef NO_PTHREADS
grep: clean up num_threads handling
preload-index.c: remove #ifdef NO_PTHREADS
pack-objects: remove #ifdef NO_PTHREADS
read-cache.c: remove #ifdef NO_PTHREADS
read-cache.c: reduce branching based on HAVE_THREADS
read-cache.c: initialize copy_len to shut up gcc 8
Clean up pthread_create() error handling
completion: use __gitcomp_builtin for format-patch
build: fix broken command-list.h generation with core.autocrlf
format-patch: respect --stat in cover letter's diffstat
doc: move extensions.worktreeConfig to the right place
clone: fix colliding file detection on APFS
files-backend.c: fix build error on Solaris
transport-helper.c: do not translate a string twice
Nickolai Belakovski (2):
worktree: update documentation for lock_reason and lock_reason_valid
worktree: rename is_worktree_locked to worktree_lock_reason
Noam Postavsky (1):
log: fix coloring of certain octopus merge shapes
Olga Telezhnaya (3):
ref-filter: free memory from used_atom
ls-remote: release memory instead of UNLEAK
ref-filter: free item->value and item->value->s
Peter Krefting (2):
l10n: sv.po: Update Swedish translation (4185t0f0u)
l10n: sv.po: Update Swedish translation (4187t0f0u)
Phillip Wood (11):
diff: fix --color-moved-ws=allow-indentation-change
diff --color-moved-ws: fix double free crash
diff --color-moved-ws: fix out of bounds string access
diff --color-moved-ws: fix a memory leak
diff --color-moved-ws: fix another memory leak
diff --color-moved: fix a memory leak
am: don't die in read_author_script()
am: improve author-script error reporting
am: rename read_author_script()
add read_author_script() to libgit
sequencer: use read_author_script()
Pratik Karki (46):
rebase: start implementing it as a builtin
rebase: refactor common shell functions into their own file
builtin/rebase: support running "git rebase <upstream>"
builtin rebase: support --onto
builtin rebase: support `git rebase --onto A...B`
builtin rebase: handle the pre-rebase hook and --no-verify
builtin rebase: support --quiet
builtin rebase: support the `verbose` and `diffstat` options
builtin rebase: require a clean worktree
builtin rebase: try to fast forward when possible
builtin rebase: support --force-rebase
builtin rebase: start a new rebase only if none is in progress
builtin rebase: only store fully-qualified refs in `options.head_name`
builtin rebase: support `git rebase <upstream> <switch-to>`
builtin rebase: support --continue
builtin rebase: support --skip
builtin rebase: support --abort
builtin rebase: support --quit
builtin rebase: support --edit-todo and --show-current-patch
builtin rebase: actions require a rebase in progress
builtin rebase: stop if `git am` is in progress
builtin rebase: allow selecting the rebase "backend"
builtin rebase: support --signoff
builtin rebase: support --rerere-autoupdate
builtin rebase: support --committer-date-is-author-date
builtin rebase: support `ignore-whitespace` option
builtin rebase: support `ignore-date` option
builtin rebase: support `keep-empty` option
builtin rebase: support `--autosquash`
builtin rebase: support `--gpg-sign` option
builtin rebase: support `-C` and `--whitespace=<type>`
builtin rebase: support `--autostash` option
builtin rebase: support `--exec`
builtin rebase: support `--allow-empty-message` option
builtin rebase: support --rebase-merges[=[no-]rebase-cousins]
merge-base --fork-point: extract libified function
builtin rebase: support `fork-point` option
builtin rebase: add support for custom merge strategies
builtin rebase: support --root
builtin rebase: optionally auto-detect the upstream
builtin rebase: optionally pass custom reflogs to reset_head()
builtin rebase: fast-forward to onto if it is a proper descendant
builtin rebase: show progress when connected to a terminal
builtin rebase: use no-op editor when interactive is "implied"
builtin rebase: error out on incompatible option/mode combinations
rebase: default to using the builtin rebase
Rafael Ascensão (2):
refs: show --exclude failure with --branches/tags/remotes=glob
refs: fix some exclude patterns being ignored
Ralf Thielow (5):
git-rebase.sh: fix typos in error messages
l10n: update German translation
builtin/rebase.c: remove superfluous space in messages
l10n: update German translation
l10n: de.po: fix two messages
Ramsay Jones (12):
Makefile: add a hdr-check target
json-writer.h: add missing include (hdr-check)
ewah/ewok_rlw.h: add missing include (hdr-check)
refs/ref-cache.h: add missing declarations (hdr-check)
refs/packed-backend.h: add missing declaration (hdr-check)
refs/refs-internal.h: add missing declarations (hdr-check)
midx.h: add missing forward declarations (hdr-check)
delta-islands.h: add missing forward declarations (hdr-check)
headers: normalize the spelling of some header guards
fetch-object.h: add missing declaration (hdr-check)
ewok_rlw.h: add missing 'inline' to function definition
commit-reach.h: add missing declarations (hdr-check)
Rasmus Villemoes (6):
help: redirect to aliased commands for "git cmd --help"
git.c: handle_alias: prepend alias info when first argument is -h
git-help.txt: document "git help cmd" vs "git cmd --help" for aliases
Documentation/git-send-email.txt: style fixes
send-email: only consider lines containing @ or <> for automatic Cc'ing
send-email: also pick up cc addresses from -by trailers
René Scharfe (12):
mailinfo: support format=flowed
fsck: add a performance test for skipList
fsck: use strbuf_getline() to read skiplist file
fsck: use oidset instead of oid_array for skipList
sequencer: use return value of oidset_insert()
grep: add -r/--[no-]recursive
fetch-pack: factor out is_unmatched_ref()
fetch-pack: load tip_oids eagerly iff needed
khash: factor out kh_release_*
oidset: use khash
oidset: uninline oidset_init()
commit-reach: fix cast in compare_commits_by_gen()
Roger Strain (1):
subtree: performance improvement for finding unexpected parent commits
SZEDER Gábor (20):
t1404: increase core.packedRefsTimeout to avoid occasional test failure
Documentation/git.txt: clarify that GIT_TRACE=/path appends
t3701-add-interactive: tighten the check of trace output
t1700-split-index: drop unnecessary 'grep'
t0090: disable GIT_TEST_SPLIT_INDEX for the test checking split index
t1700-split-index: document why FSMONITOR is disabled in this test script
split-index: add tests to demonstrate the racy split index problem
t1700-split-index: date back files to avoid racy situations
split-index: count the number of deleted entries
split-index: don't compare cached data of entries already marked for split index
split-index: smudge and add racily clean cache entries to split index
split-index: BUG() when cache entry refers to non-existing shared entry
object_id.cocci: match only expressions of type 'struct object_id'
test-lib: introduce the '-V' short option for '--verbose-log'
travis-ci: install packages in 'ci/install-dependencies.sh'
coccicheck: introduce 'pending' semantic patches
ref-filter: don't look for objects when outside of a repository
tests: send "bug in the test script" errors to the script's stderr
test-lib-functions: make 'test_cmp_rev' more informative on failure
t/lib-git-daemon: fix signal checking
Sam McKelvie (1):
rev-parse: --show-superproject-working-tree should work during a merge
Saulius Gurklys (1):
doc: fix small typo in git show-branch
Sebastian Staudt (1):
travis-ci: no longer use containers
Shulhan (1):
builtin/remote: quote remote name on error to display empty name
Stefan Beller (25):
git-submodule.sh: align error reporting for update mode to use path
git-submodule.sh: rename unused variables
builtin/submodule--helper: factor out submodule updating
builtin/submodule--helper: store update_clone information in a struct
builtin/submodule--helper: factor out method to update a single submodule
submodule--helper: replace connect-gitdir-workingtree by ensure-core-worktree
submodule--helper: introduce new update-module-mode helper
test_decode_color: understand FAINT and ITALIC
t3206: add color test for range-diff --dual-color
diff.c: simplify caller of emit_line_0
diff.c: reorder arguments for emit_line_ws_markup
diff.c: add set_sign to emit_line_0
diff: use emit_line_0 once per line
diff.c: omit check for line prefix in emit_line_0
diff.c: rewrite emit_line_0 more understandably
diff.c: add --output-indicator-{new, old, context}
range-diff: make use of different output indicators
range-diff: indent special lines as context
refs.c: migrate internal ref iteration to pass thru repository argument
refs.c: upgrade for_each_replace_ref to be a each_repo_ref_fn callback
string-list: remove unused function print_string_list
strbuf.h: format according to coding guidelines
diff.c: pass sign_index to emit_line_ws_markup
submodule helper: convert relative URL to absolute URL if needed
builtin/submodule--helper: remove debugging leftover tracing
Stephen P. Smith (10):
wt-status.c: move has_unmerged earlier in the file
wt-status: rename commitable to committable
t7501: add test of "commit --dry-run --short"
wt-status.c: set the committable flag in the collect phase
roll wt_status_state into wt_status and populate in the collect phase
t2000: rename and combine checkout clash tests
t7509: cleanup description and filename
t7502: rename commit test script to comply with naming convention
t7500: rename commit tests script to comply with naming convention
t7501: rename commit test to comply with naming convention
Steve Hoelzer (1):
poll: use GetTickCount64() to avoid wrap-around issues
Steven Fernandez (1):
git-completion.bash: add completion for stash list
Strain, Roger L (4):
subtree: refactor split of a commit into standalone method
subtree: make --ignore-joins pay attention to adds
subtree: use commits before rejoins for splits
subtree: improve decision on merges kept in split
Sven Strickroth (1):
msvc: directly use MS version (_stricmp) of strcasecmp
Tao Qingyun (3):
refs: docstring typo
builtin/branch.c: remove useless branch_get
branch: trivial style fix
Taylor Blau (4):
transport.c: extract 'fill_alternate_refs_command'
transport.c: introduce core.alternateRefsCommand
transport.c: introduce core.alternateRefsPrefixes
Documentation/config.txt: fix typo in core.alternateRefsCommand
Thomas Gummerer (17):
rerere: unify error messages when read_cache fails
rerere: lowercase error messages
rerere: wrap paths in output in sq
rerere: mark strings for translation
rerere: add documentation for conflict normalization
rerere: fix crash with files rerere can't handle
rerere: only return whether a path has conflicts or not
rerere: factor out handle_conflict function
rerere: return strbuf from handle path
rerere: teach rerere to handle nested conflicts
rerere: recalculate conflict ID when unresolved conflict is committed
rerere: mention caveat about unmatched conflict markers
rerere: add note about files with existing conflict markers
.gitattributes: add conflict-marker-size for relevant files
linear-assignment: fix potential out of bounds memory access
t5551: move setup code inside test_expect blocks
t5551: compare sorted cookies files
Tim Schumacher (4):
Documentation/Makefile: make manpage-base-url.xsl generation quieter
alias: add support for aliases of an alias
alias: show the call history when an alias is looping
t0014: introduce an alias testing suite
Todd Zullinger (1):
Documentation: build technical/multi-pack-index
Torsten Bögershausen (5):
Make git_check_attr() a void function
path.c: char is not (always) signed
Upcast size_t variables to uintmax_t when printing
remote-curl.c: xcurl_off_t is not portable (on 32 bit platfoms)
t5601-99: Enable colliding file detection for MINGW
Trần Ngọc Quân (2):
l10n: vi(4185t): Updated Vietnamese translation for v2.20.0
l10n: vi(4187t): Updated Vietnamese translation for v2.20.0 rd3
Uwe Kleine-König (1):
howto/using-merge-subtree: mention --allow-unrelated-histories
brian m. carlson (26):
t: add test functions to translate hash-related values
t0000: use hash translation table
t0000: update tests for SHA-256
t0002: abstract away SHA-1 specific constants
t0064: make hash size independent
t1006: make hash size independent
t1400: switch hard-coded object ID to variable
t1405: make hash size independent
t1406: make hash-size independent
t1407: make hash size independent
editorconfig: provide editor settings for Git developers
editorconfig: indicate settings should be kept in sync
pack-bitmap-write: use GIT_MAX_RAWSZ for allocation
builtin/repack: replace hard-coded constants
builtin/mktree: remove hard-coded constant
builtin/fetch-pack: remove constants with parse_oid_hex
pack-revindex: express constants in terms of the_hash_algo
packfile: express constants in terms of the_hash_algo
refs/packed-backend: express constants using the_hash_algo
upload-pack: express constants in terms of the_hash_algo
transport: use parse_oid_hex instead of a constant
tag: express constant in terms of the_hash_algo
apply: replace hard-coded constants
apply: rename new_sha1_prefix and old_sha1_prefix
submodule: make zero-oid comparison hash function agnostic
rerere: convert to use the_hash_algo
Ævar Arnfjörð Bjarmason (35):
fetch: change "branch" to "reference" in --force -h output
push tests: make use of unused $1 in test description
push tests: use spaces in interpolated string
fetch tests: add a test for clobbering tag behavior
push doc: remove confusing mention of remote merger
push doc: move mention of "tag <tag>" later in the prose
push doc: correct lies about how push refspecs work
fetch: document local ref updates with/without --force
fetch: stop clobbering existing tags without --force
fsck tests: setup of bogus commit object
fsck tests: add a test for no skipList input
fsck: document and test sorted skipList input
fsck: document and test commented & empty line skipList input
fsck: document that skipList input must be unabbreviated
fsck: add a performance test
fsck: support comments & empty lines in skipList
commit-graph write: add progress output
commit-graph verify: add progress output
config doc: add missing list separator for checkout.optimizeNewBranch
push doc: add spacing between two words
fetch doc: correct grammar in --force docs
gc: fix regression in 7b0f229222 impacting --quiet
gc doc: mention the commit-graph in the intro
pack-objects test: modernize style
pack-objects tests: don't leave test .git corrupt at end
index-pack tests: don't leave test repo dirty at end
i18n: make GETTEXT_POISON a runtime option
range-diff doc: add a section about output stability
range-diff: fix regression in passing along diff options
range-diff: make diff option behavior (e.g. --stat) consistent
push: change needlessly ambiguous example in error
rebase doc: document rebase.useBuiltin
tests: add a special setup where rebase.useBuiltin is off
read-cache: make the split index obey umask settings
advice: don't pointlessly suggest --convert-graft-file
Đoàn Trần Công Danh (1):
git-compat-util: prefer poll.h to sys/poll.h
^ permalink raw reply [relevance 3%]
* What's cooking in git.git (Dec 2018, #01; Sun, 9)
@ 2018-12-09 8:42 1% Junio C Hamano
2018-12-10 20:05 0% ` Elijah Newren
0 siblings, 1 reply; 71+ results
From: Junio C Hamano @ 2018-12-09 8:42 UTC (permalink / raw)
To: git
Here are the topics that have been cooking. Commits prefixed with
'-' are only in 'pu' (proposed updates) while commits prefixed with
'+' are in 'next'. The ones marked with '.' do not appear in any of
the integration branches, but I am still holding onto them.
Git 2.20 has been tagged. I'd expect that we would slow down to see
how stable it is and queue only the brown-paper-bag fixes for a week
or so, before opening the tree for the next cycle, rewinding the tip
of 'next', etc.
You can find the changes described here in the integration branches
of the repositories listed at
http://git-blame.blogspot.com/p/git-public-repositories.html
--------------------------------------------------
[Graduated to "master"]
* ab/push-example-in-doc (2018-11-14) 1 commit
(merged to 'next' on 2018-11-18 at 8fd935a19c)
+ push: change needlessly ambiguous example in error
An error message that sugggests how to give correct arguments to
"git push" has been updated.
* ab/replace-graft-with-replace-advice (2018-11-29) 1 commit
(merged to 'next' on 2018-11-30 at c5d658e075)
+ advice: don't pointlessly suggest --convert-graft-file
The advice message to tell the user to migrate an existing graft
file to the replace system when a graft file was read was shown
even when "git replace --convert-graft-file" command, which is the
way the message suggests to use, was running, which made little
sense.
* gh/diff-raw-has-no-ellipses (2018-11-26) 1 commit
(merged to 'next' on 2018-11-29 at 24a7536f15)
+ doc: update diff-format.txt for removed ellipses in --raw
"git diff --raw" lost ellipses to adjust the output columns for
some time now, but the documentation still showed them.
* jc/format-patch-range-diff-fix (2018-11-30) 1 commit
(merged to 'next' on 2018-11-30 at 26290b1ec1)
+ format-patch: do not let its diff-options affect --range-diff
"git format-patch --range-diff" by mistake passed the diff options
used to generate the primary output of the command to the
range-diff machinery, which caused the range-diff in the cover
letter to include fairly useless "--stat" output. This has been
corrected by forcing a non-customizable default formatting options
on the range-diff machinery when driven by format-patch.
* js/rebase-reflog-action-fix (2018-11-30) 1 commit
(merged to 'next' on 2018-11-30 at 93fd2fb920)
+ rebase: fix GIT_REFLOG_ACTION regression
"git rebase" reimplemented recently in C accidentally changed the
way reflog entries are recorded (earlier "rebase -i" identified the
entries it leaves with "rebase -i", but the new version always
marks them with "rebase"). This has been corrected.
* js/rebase-stat-unrelated-fix (2018-11-30) 1 commit
(merged to 'next' on 2018-11-30 at a9faaff8c1)
+ rebase --stat: fix when rebasing to an unrelated history
"git rebase --stat" to transplant a piece of history onto a totally
unrelated history were not working before and silently showed wrong
result. With the recent reimplementation in C, it started to instead
die with an error message, as the original logic was not prepared
to cope with this case. This has now been fixed.
* ma/reset-doc-rendering-fix (2018-11-29) 2 commits
(merged to 'next' on 2018-11-30 at be718c19e2)
+ git-reset.txt: render literal examples as monospace
+ git-reset.txt: render tables correctly under Asciidoctor
Doc updates.
* rt/rebase-in-c-message-fix (2018-12-01) 1 commit
(merged to 'next' on 2018-12-01 at 4428c15a66)
+ builtin/rebase.c: remove superfluous space in messages
* sg/daemon-test-signal-fix (2018-11-27) 1 commit
(merged to 'next' on 2018-11-30 at b3f7fdf727)
+ t/lib-git-daemon: fix signal checking
Test fix.
* sg/test-BUG (2018-11-20) 1 commit
(merged to 'next' on 2018-11-21 at bb81013952)
+ tests: send "bug in the test script" errors to the script's stderr
test framework has been updated to make a bug in the test script
(as opposed to bugs in Git that are discovered by running the
tests) stand out more prominently.
* sg/test-cmp-rev (2018-11-20) 1 commit
(merged to 'next' on 2018-11-21 at 5d65cb2a76)
+ test-lib-functions: make 'test_cmp_rev' more informative on failure
Test framework update.
* ss/msvc-strcasecmp (2018-11-20) 1 commit
(merged to 'next' on 2018-11-21 at 9e45649e6e)
+ msvc: directly use MS version (_stricmp) of strcasecmp
MSVC update.
--------------------------------------------------
[New Topics]
* cb/openbsd-allows-reading-directory (2018-12-03) 1 commit
- config.mak.uname: OpenBSD uses BSD semantics with fread for directories
BSD port update.
Will merge to 'next'.
* cb/t5004-empty-tar-archive-fix (2018-12-03) 1 commit
- t5004: avoid using tar for empty packages
BSD port update.
Will merge to 'next'.
* cb/test-lint-cp-a (2018-12-03) 1 commit
- tests: add lint for non portable cp -a
BSD port update.
Will merge to 'next'.
* hb/t0061-dot-in-path-fix (2018-12-03) 1 commit
- t0061: do not fail test if '.' is part of $PATH
Test update.
Will merge to 'next'.
* hn/highlight-sideband-keywords (2018-12-04) 1 commit
- sideband: color lines with keyword only
Lines that begin with a certain keyword that come over the wire, as
well as lines that consist only of one of these keywords, ought to
be painted in color for easier eyeballing, but the latter was
broken ever since the feature was introduced in 2.19, which has
been corrected.
Will merge to 'next'.
* js/commit-graph-chunk-table-fix (2018-12-09) 4 commits
- SQUASH???
- Makefile: correct example fuzz build
- commit-graph: fix buffer read-overflow
- commit-graph, fuzz: add fuzzer for commit-graph
The codepath to read from the commit-graph file attempted to read
past the end of it when the file's table-of-contents was corrupt.
* jt/get-reference-with-commit-graph (2018-12-06) 1 commit
- revision: use commit graph in get_reference()
(this branch uses sb/more-repo-in-api.)
Micro-optimize the code that prepares commit objects to be walked
by "git rev-list" when the commit-graph is available.
Will merge to 'next'.
* md/exclude-promisor-objects-fix-cleanup (2018-12-06) 1 commit
- revision.c: put promisor option in specialized struct
Code clean-up.
Will merge to 'next'.
* bw/mailmap (2018-12-09) 1 commit
- mailmap: update Brandon Williams's email address
Will merge to 'next'.
* do/gitweb-strict-export-conf-doc (2018-12-09) 1 commit
- docs: fix $strict_export text in gitweb.conf.txt
Doc update.
Will merge to 'next'.
* en/directory-renames-nothanks-doc-update (2018-12-09) 1 commit
- git-rebase.txt: update note about directory rename detection and am
Doc update.
Will merge to 'next'.
* fd/gitweb-snapshot-conf-doc-fix (2018-12-09) 1 commit
- docs/gitweb.conf: config variable typo
Doc update.
Will merge to 'next'.
* km/rebase-doc-typofix (2018-12-09) 1 commit
- rebase docs: drop stray word in merge command description
Doc update.
Will merge to 'next'.
* nd/indentation-fix (2018-12-09) 1 commit
- Indent code with TABs
Code cleanup.
Will merge to 'next'.
* tb/use-common-win32-pathfuncs-on-cygwin (2018-12-09) 1 commit
- git clone <url> C:\cygwin\home\USER\repo' is working (again)
Cygwin update.
Will merge to 'next'.
--------------------------------------------------
[Stalled]
* lt/date-human (2018-07-09) 1 commit
- Add 'human' date format
A new date format "--date=human" that morphs its output depending
on how far the time is from the current time has been introduced.
"--date=auto" can be used to use this new format when the output is
goint to the pager or to the terminal and otherwise the default
format.
--------------------------------------------------
[Cooking]
* mk/http-backend-kill-children-before-exit (2018-11-26) 1 commit
(merged to 'next' on 2018-11-29 at bf2d45062f)
+ http-backend: enable cleaning up forked upload/receive-pack on exit
The http-backend CGI process did not correctly clean up the child
processes it spawns to run upload-pack etc. when it dies itself,
which has been corrected.
Will cook in 'next'.
* tb/log-G-binary (2018-11-29) 1 commit
- log -G: ignore binary files
"git log -G<regex>" looked for a hunk in the "git log -p" patch
output that contained a string that matches the given pattern.
Optimize this code to ignore binary files, which by default will
not show any hunk that would match any pattern (unless textconv or
the --text option is in effect, that is).
Expecting an update to the tests.
* dl/merge-cleanup-scissors-fix (2018-11-21) 2 commits
(merged to 'next' on 2018-11-21 at 217be06acb)
+ merge: add scissors line on merge conflict
+ t7600: clean up 'merge --squash c3 with c7' test
The list of conflicted paths shown in the editor while concluding a
conflicted merge was shown above the scissors line when the
clean-up mode is set to "scissors", even though it was commented
out just like the list of updated paths and other information to
help the user explain the merge better.
Will cook in 'next'.
* aw/pretty-trailers (2018-12-09) 7 commits
- pretty: add support for separator option in %(trailers)
- strbuf: separate callback for strbuf_expand:ing literals
- pretty: add support for "valueonly" option in %(trailers)
- pretty: allow showing specific trailers
- pretty: single return path in %(trailers) handling
- pretty: allow %(trailers) options with explicit value
- doc: group pretty-format.txt placeholders descriptions
The %(trailers) formatter in "git log --format=..." now allows to
optionally pick trailers selectively by keyword, show only values,
etc.
How's the doneness of this one?
* nd/attr-pathspec-in-tree-walk (2018-11-19) 5 commits
- tree-walk: support :(attr) matching
- dir.c: move, rename and export match_attrs()
- pathspec.h: clean up "extern" in function declarations
- tree-walk.c: make tree_entry_interesting() take an index
- tree.c: make read_tree*() take 'struct repository *'
The traversal over tree objects has learned to honor
":(attr:label)" pathspec match, which has been implemented only for
enumerating paths on the filesystem.
Will merge to 'next'.
* ab/commit-graph-progress-fix (2018-11-20) 1 commit
- commit-graph: split up close_reachable() progress output
Will merge to 'next'.
* jn/unknown-index-extensions (2018-11-21) 2 commits
- index: offer advice for unknown index extensions
- index: do not warn about unrecognized extensions
A bit too alarming warning given when unknown index extensions
exist is getting revamped.
Expecting a reroll.
* en/fast-export-import (2018-11-17) 11 commits
(merged to 'next' on 2018-11-18 at 87bbbffc95)
+ fast-export: add a --show-original-ids option to show original names
+ fast-import: remove unmaintained duplicate documentation
+ fast-export: add --reference-excluded-parents option
+ fast-export: ensure we export requested refs
+ fast-export: when using paths, avoid corrupt stream with non-existent mark
+ fast-export: move commit rewriting logic into a function for reuse
+ fast-export: avoid dying when filtering by paths and old tags exist
+ fast-export: use value from correct enum
+ git-fast-export.txt: clarify misleading documentation about rev-list args
+ git-fast-import.txt: fix documentation for --quiet option
+ fast-export: convert sha1 to oid
Small fixes and features for fast-export and fast-import, mostly on
the fast-export side.
Will cook in 'next'.
* nd/checkout-dwim-fix (2018-11-14) 1 commit
(merged to 'next' on 2018-11-18 at 3d714e7719)
+ checkout: disambiguate dwim tracking branches and local files
"git checkout frotz" (without any double-dash) avoids ambiguity by
making sure 'frotz' cannot be interpreted as a revision and as a
path at the same time. This safety has been updated to check also
a unique remote-tracking branch 'frotz' in a remote, when dwimming
to create a local branch 'frotz' out of a remote-tracking branch
'frotz' from a remote.
Will cook in 'next'.
* nd/checkout-noisy (2018-11-20) 2 commits
- t0027: squelch checkout path run outside test_expect_* block
- checkout: print something when checking out paths
"git checkout [<tree-ish>] path..." learned to report the number of
paths that have been checked out of the index or the tree-ish,
which gives it the same degree of noisy-ness as the case in which
the command checks out a branch.
Will merge to 'next'.
* sg/clone-initial-fetch-configuration (2018-11-16) 3 commits
(merged to 'next' on 2018-11-18 at cae0f3985b)
+ Documentation/clone: document ignored configuration variables
+ clone: respect additional configured fetch refspecs during initial fetch
+ clone: use a more appropriate variable name for the default refspec
Refspecs configured with "git -c var=val clone" did not propagate
to the resulting repository, which has been corrected.
Will cook in 'next'.
* en/rebase-merge-on-sequencer (2018-11-08) 2 commits
- rebase: implement --merge via git-rebase--interactive
- git-rebase, sequencer: extend --quiet option for the interactive machinery
"git rebase --merge" as been reimplemented by reusing the internal
machinery used for "git rebase -i".
Expecting a reroll.
cf. <CABPp-BF8RupyfP69iqAVTXxEhBGyzVd-wUgp3y0pf+CbBFAQeg@mail.gmail.com>
* fc/http-version (2018-11-09) 1 commit
(merged to 'next' on 2018-11-18 at 42f5155095)
+ http: add support selecting http version
The "http.version" configuration variable can be used with recent
enough cURL library to force the version of HTTP used to talk when
fetching and pushing.
Will cook in 'next'.
* dl/remote-save-to-push (2018-11-13) 1 commit
- remote: add --save-to-push option to git remote set-url
"git remote set-url" learned a new option that moves existing value
of the URL field to pushURL field of the remote before replacing
the URL field with a new value.
I am personally not yet quite convinced if this is worth pursuing.
* jk/loose-object-cache (2018-11-24) 10 commits
(merged to 'next' on 2018-11-24 at 5f4f22707d)
+ odb_load_loose_cache: fix strbuf leak
(merged to 'next' on 2018-11-18 at 276691a21b)
+ fetch-pack: drop custom loose object cache
+ sha1-file: use loose object cache for quick existence check
+ object-store: provide helpers for loose_objects_cache
+ sha1-file: use an object_directory for the main object dir
+ handle alternates paths the same as the main object dir
+ sha1_file_name(): overwrite buffer instead of appending
+ rename "alternate_object_database" to "object_directory"
+ submodule--helper: prefer strip_suffix() to ends_with()
+ fsck: do not reuse child_process structs
Code clean-up with optimization for the codepath that checks
(non-)existence of loose objects.
Will cook in 'next'.
* js/protocol-advertise-multi (2018-11-17) 1 commit
- protocol: advertise multiple supported versions
The transport layer has been updated so that the protocol version
used can be negotiated between the parties, by the initiator
listing the protocol versions it is willing to talk, and the other
side choosing from one of them.
How's the doneness of this one?
* js/smart-http-detect-remote-error (2018-11-17) 3 commits
(merged to 'next' on 2018-11-18 at 5c6edfcb85)
+ remote-curl: die on server-side errors
+ remote-curl: tighten "version 2" check for smart-http
+ remote-curl: refactor smart-http discovery
Some errors from the other side coming over smart HTTP transport
were not noticed, which has been corrected.
Will cook in 'next'.
* nb/branch-show-other-worktrees-head (2018-11-12) 2 commits
- branch: mark and colorize a branch differently if it is checked out in a linked worktree
- ref-filter: add worktree atom
"git branch --list" learned to show branches that are checked out
in other worktrees connected to the same repository prefixed with
'+', similar to the way the currently checked out branch is shown
with '*' in front.
Expecting a reroll.
* nd/the-index (2018-11-12) 22 commits
(merged to 'next' on 2018-11-18 at 73d1d8594e)
+ rebase-interactive.c: remove the_repository references
+ rerere.c: remove the_repository references
+ pack-*.c: remove the_repository references
+ pack-check.c: remove the_repository references
+ notes-cache.c: remove the_repository references
+ line-log.c: remove the_repository reference
+ diff-lib.c: remove the_repository references
+ delta-islands.c: remove the_repository references
+ cache-tree.c: remove the_repository references
+ bundle.c: remove the_repository references
+ branch.c: remove the_repository reference
+ bisect.c: remove the_repository reference
+ blame.c: remove implicit dependency the_repository
+ sequencer.c: remove implicit dependency on the_repository
+ sequencer.c: remove implicit dependency on the_index
+ transport.c: remove implicit dependency on the_index
+ notes-merge.c: remove implicit dependency the_repository
+ notes-merge.c: remove implicit dependency on the_index
+ list-objects.c: reduce the_repository references
+ list-objects-filter.c: remove implicit dependency on the_index
+ wt-status.c: remove implicit dependency the_repository
+ wt-status.c: remove implicit dependency on the_index
More codepaths become aware of working with in-core repository
instance other than the default "the_repository".
Will cook in 'next'.
* ot/ref-filter-object-info (2018-11-24) 6 commits
(merged to 'next' on 2018-11-24 at f8505762e3)
+ ref-filter: replace unportable `%lld` format with %PRIdMAX
(merged to 'next' on 2018-11-18 at ad4c086678)
+ ref-filter: add docs for new options
+ ref-filter: add tests for deltabase
+ ref-filter: add deltabase option
+ ref-filter: add tests for objectsize:disk
+ ref-filter: add objectsize:disk option
The "--format=<placeholder>" option of for-each-ref, branch and tag
learned to show a few more traits of objects that can be learned by
the object_info API.
Will cook in 'next'.
* sb/diff-color-moved-config-option-fixup (2018-11-14) 1 commit
- diff: align move detection error handling with other options
Minor inconsistency fix.
Will merge to 'next'.
* ab/push-dwim-dst (2018-11-14) 7 commits
(merged to 'next' on 2018-11-18 at 36567023be)
+ push doc: document the DWYM behavior pushing to unqualified <dst>
+ push: test that <src> doesn't DWYM if <dst> is unqualified
+ push: add an advice on unqualified <dst> push
+ push: move unqualified refname error into a function
+ push: improve the error shown on unqualified <dst> push
+ i18n: remote.c: mark error(...) messages for translation
+ remote.c: add braces in anticipation of a follow-up change
"git push $there $src:$dst" rejects when $dst is not a fully
qualified refname and not clear what the end user meant. The
codepath has been taught to give a clearer error message, and also
guess where the push should go by taking the type of the pushed
object into account (e.g. a tag object would want to go under
refs/tags/).
Will cook in 'next'.
* md/list-lazy-objects-fix (2018-12-06) 1 commit
- list-objects.c: don't segfault for missing cmdline objects
"git rev-list --exclude-promissor-objects" had to take an object
that does not exist locally (and is lazily available) from the
command line without barfing, but the code dereferenced NULL.
Will merge to 'next'.
* nd/i18n (2018-11-12) 16 commits
(merged to 'next' on 2018-11-18 at 5215bd2f7d)
+ fsck: mark strings for translation
+ fsck: reduce word legos to help i18n
+ parse-options.c: mark more strings for translation
+ parse-options.c: turn some die() to BUG()
+ parse-options: replace opterror() with optname()
+ repack: mark more strings for translation
+ remote.c: mark messages for translation
+ remote.c: turn some error() or die() to BUG()
+ reflog: mark strings for translation
+ read-cache.c: add missing colon separators
+ read-cache.c: mark more strings for translation
+ read-cache.c: turn die("internal error") to BUG()
+ attr.c: mark more string for translation
+ archive.c: mark more strings for translation
+ alias.c: mark split_cmdline_strerror() strings for translation
+ git.c: mark more strings for translation
More _("i18n") markings.
Will cook in 'next'.
* sb/more-repo-in-api (2018-11-14) 23 commits
(merged to 'next' on 2018-11-19 at e5d2a129da)
+ t/helper/test-repository: celebrate independence from the_repository
+ path.h: make REPO_GIT_PATH_FUNC repository agnostic
+ commit: prepare free_commit_buffer and release_commit_memory for any repo
+ commit-graph: convert remaining functions to handle any repo
+ submodule: don't add submodule as odb for push
+ submodule: use submodule repos for object lookup
+ pretty: prepare format_commit_message to handle arbitrary repositories
+ commit: prepare logmsg_reencode to handle arbitrary repositories
+ commit: prepare repo_unuse_commit_buffer to handle any repo
+ commit: prepare get_commit_buffer to handle any repo
+ commit-reach: prepare in_merge_bases[_many] to handle any repo
+ commit-reach: prepare get_merge_bases to handle any repo
+ commit-reach.c: allow get_merge_bases_many_0 to handle any repo
+ commit-reach.c: allow remove_redundant to handle any repo
+ commit-reach.c: allow merge_bases_many to handle any repo
+ commit-reach.c: allow paint_down_to_common to handle any repo
+ commit: allow parse_commit* to handle any repo
+ object: parse_object to honor its repository argument
+ object-store: prepare has_{sha1, object}_file to handle any repo
+ object-store: prepare read_object_file to deal with any repo
+ object-store: allow read_object_file_extended to read from any repo
+ packfile: allow has_packed_and_bad to handle arbitrary repositories
+ sha1_file: allow read_object to read objects in arbitrary repositories
(this branch is used by jt/get-reference-with-commit-graph.)
The in-core repository instances are passed through more codepaths.
Will cook in 'next'.
cf. <20181115221254.45373-1-jonathantanmy@google.com>
* en/merge-path-collision (2018-12-01) 11 commits
(merged to 'next' on 2018-12-01 at 24492e61f1)
+ t6036: avoid non-portable "cp -a"
(merged to 'next' on 2018-11-18 at 3ec9286e0b)
+ merge-recursive: combine error handling
+ t6036, t6043: increase code coverage for file collision handling
+ merge-recursive: improve rename/rename(1to2)/add[/add] handling
+ merge-recursive: use handle_file_collision for add/add conflicts
+ merge-recursive: improve handling for rename/rename(2to1) conflicts
+ merge-recursive: fix rename/add conflict handling
+ merge-recursive: new function for better colliding conflict resolutions
+ merge-recursive: increase marker length with depth of recursion
+ t6036, t6042: testcases for rename collision of already conflicting files
+ t6042: add tests for consistency in file collision conflict handling
Updates for corner cases in merge-recursive.
Will cook in 'next'.
* sd/stash-wo-user-name (2018-11-19) 1 commit
(merged to 'next' on 2018-11-19 at 0838b091ea)
+ stash: tolerate missing user identity
A properly configured username/email is required under
user.useConfigOnly in order to create commits; now "git stash"
(even though it creates commit objects to represent stash entries)
command is excempt from the requirement.
Will cook in 'next'.
* bc/sha-256 (2018-11-14) 12 commits
- hash: add an SHA-256 implementation using OpenSSL
- sha256: add an SHA-256 implementation using libgcrypt
- Add a base implementation of SHA-256 support
- commit-graph: convert to using the_hash_algo
- t/helper: add a test helper to compute hash speed
- sha1-file: add a constant for hash block size
- t: make the sha1 test-tool helper generic
- t: add basic tests for our SHA-1 implementation
- cache: make hashcmp and hasheq work with larger hashes
- hex: introduce functions to print arbitrary hashes
- sha1-file: provide functions to look up hash algorithms
- sha1-file: rename algorithm to "sha1"
Add sha-256 hash and plug it through the code to allow building Git
with the "NewHash".
* js/vsts-ci (2018-10-16) 13 commits
. travis: fix skipping tagged releases
. README: add a build badge (status of the Azure Pipelines build)
. tests: record more stderr with --write-junit-xml in case of failure
. tests: include detailed trace logs with --write-junit-xml upon failure
. git-p4: use `test_atexit` to kill the daemon
. git-daemon: use `test_atexit` in the tests
. tests: introduce `test_atexit`
. ci: add a build definition for Azure DevOps
. ci/lib.sh: add support for Azure Pipelines
. tests: optionally write results as JUnit-style .xml
. test-date: add a subcommand to measure times in shell scripts
. ci/lib.sh: encapsulate Travis-specific things
. ci: rename the library of common functions
Prepare to run test suite on Azure DevOps.
Ejected out of 'pu', as doing so seems to help other topics get
tested at TravisCI.
https://travis-ci.org/git/git/builds/452713184 is a sample of a
build whose tests on 4 hang (with this series in). Ejecting it
gave us https://travis-ci.org/git/git/builds/452778963 which still
shows breakages from other topics not yet in 'next', but at least
the tests do not stall.
* du/branch-show-current (2018-10-26) 1 commit
- branch: introduce --show-current display option
"git branch" learned a new subcommand "--show-current".
I am personally not yet quite convinced if this is worth pursuing.
* mk/use-size-t-in-zlib (2018-10-15) 1 commit
- zlib.c: use size_t for size
The wrapper to call into zlib followed our long tradition to use
"unsigned long" for sizes of regions in memory, which have been
updated to use "size_t".
* ag/sequencer-reduce-rewriting-todo (2018-11-12) 16 commits
. rebase--interactive: move transform_todo_file() to rebase--interactive.c
. sequencer: fix a call to error() in transform_todo_file()
. sequencer: use edit_todo_list() in complete_action()
. rebase-interactive: rewrite edit_todo_list() to handle the initial edit
. rebase-interactive: append_todo_help() changes
. rebase-interactive: use todo_list_write_to_file() in edit_todo_list()
. sequencer: refactor skip_unnecessary_picks() to work on a todo_list
. sequencer: change complete_action() to use the refactored functions
. sequencer: make sequencer_make_script() write its script to a strbuf
. sequencer: refactor rearrange_squash() to work on a todo_list
. sequencer: refactor sequencer_add_exec_commands() to work on a todo_list
. sequencer: refactor check_todo_list() to work on a todo_list
. sequencer: introduce todo_list_write_to_file()
. sequencer: refactor transform_todos() to work on a todo_list
. sequencer: make the todo_list structure public
. sequencer: changes in parse_insn_buffer()
The scripted version of "git rebase -i" wrote and rewrote the todo
list many times during a single step of its operation, and the
recent C-rewrite made a faithful conversion of the logic to C. The
implementation has been updated to carry necessary information
around in-core to avoid rewriting the same file over and over
unnecessarily.
With too many topics in-flight that touch sequencer and rebaser,
this need to wait giving precedence to other topics that fix bugs.
* sb/submodule-recursive-fetch-gets-the-tip (2018-12-09) 9 commits
- fetch: ensure submodule objects fetched
- submodule.c: fetch in submodules git directory instead of in worktree
- submodule: migrate get_next_submodule to use repository structs
- repository: repo_submodule_init to take a submodule struct
- submodule: store OIDs in changed_submodule_names
- submodule.c: tighten scope of changed_submodule_names struct
- submodule.c: sort changed_submodule_names before searching it
- submodule.c: fix indentation
- sha1-array: provide oid_array_filter
"git fetch --recurse-submodules" may not fetch the necessary commit
that is bound to the superproject, which is getting corrected.
Ready?
* js/add-i-coalesce-after-editing-hunk (2018-08-28) 1 commit
- add -p: coalesce hunks before testing applicability
Applicability check after a patch is edited in a "git add -i/p"
session has been improved.
Will hold.
cf. <e5b2900a-0558-d3bf-8ea1-d526b078bbc2@talktalk.net>
* ps/stash-in-c (2018-11-26) 22 commits
. stash: replace all `write-tree` child processes with API calls
. stash: optimize `get_untracked_files()` and `check_changes()`
. stash: convert `stash--helper.c` into `stash.c`
. stash: convert save to builtin
. stash: make push -q quiet
. stash: convert push to builtin
. stash: convert create to builtin
. stash: convert store to builtin
. stash: convert show to builtin
. stash: convert list to builtin
. stash: convert pop to builtin
. stash: convert branch to builtin
. stash: convert drop and clear to builtin
. stash: convert apply to builtin
. stash: mention options in `show` synopsis
. stash: add tests for `git stash show` config
. stash: rename test cases to be more descriptive
. t3903: modernize style
. stash: improve option parsing test coverage
. strbuf.c: add `strbuf_insertf()` and `strbuf_vinsertf()`
. strbuf.c: add `strbuf_join_argv()`
. sha1-name.c: add `get_oidf()` which acts like `get_oid()`
"git stash" rewritten in C.
Expecting a reroll, probably on top of the sd/stash-wo-user-name
topic after it stabilizes, with an escape hatch like the one in
"rebase in C".
* pw/add-p-select (2018-07-26) 4 commits
- add -p: optimize line selection for short hunks
- add -p: allow line selection to be inverted
- add -p: select modified lines correctly
- add -p: select individual hunk lines
"git add -p" interactive interface learned to let users choose
individual added/removed lines to be used in the operation, instead
of accepting or rejecting a whole hunk.
Will discard.
No further feedbacks on the topic for quite some time.
cf. <d622a95b-7302-43d4-4ec9-b2cf3388c653@talktalk.net>
I found the feature to be hard to explain, and may result in more
end-user complaints, but let's see.
--------------------------------------------------
[Discarded]
* ab/reject-alias-loop (2018-10-19) 1 commit
(merged to 'next' on 2018-10-26 at bc213f1bef)
+ alias: detect loops in mixed execution mode
Two (or more) aliases that mutually refer to each other can form an
infinite loop; we now attempt to notice and stop.
Discarded.
Reverted out of 'next'.
cf. <87sh0slvxm.fsf@evledraar.gmail.com>
* gl/bundle-unlock-before-aborting (2018-11-14) 1 commit
. bundle: rollback lock file while refusing to create an empty bundle
Superseded by jk/close-duped-fd-before-unlock-for-bundle
* js/remote-archive-v2 (2018-09-28) 4 commits
(merged to 'next' on 2018-10-12 at 5f34377f60)
+ archive: allow archive over HTTP(S) with proto v2
+ archive: implement protocol v2 archive command
+ archive: use packet_reader for communications
+ archive: follow test standards around assertions
The original implementation of "git archive --remote" more or less
bypassed the transport layer and did not work over http(s). The
version 2 of the protocol is defined to allow going over http(s) as
well as Git native transport.
Retracted; reverted out of next.
cf. <20181114195142.GI126896@google.com>
* ab/format-patch-rangediff-not-stat (2018-11-24) 1 commit
(merged to 'next' on 2018-11-26 at d9c84916b3)
+ format-patch: don't include --stat with --range-diff output
The "--rangediff" option recently added to "format-patch"
interspersed a bogus and useless "--stat" information by mistake,
which is being corrected.
Reverted out of 'next'.
* jc/postpone-rebase-in-c (2018-11-26) 1 commit
(merged to 'next' on 2018-11-26 at c6ae45110f)
+ rebase: mark the C reimplementation as an experimental opt-in feature
People seem to be still finding latent bugs in the "rebase in C"
reimplementation. For the upcoming release, use the scripted
version by default and adjust the documentation accordingly.
Reverted out of 'next'.
^ permalink raw reply [relevance 1%]
* Re: [GIT PULL] l10n updates for 2.20.0 round 3
2018-12-09 4:04 3% [GIT PULL] l10n updates for 2.20.0 round 3 Jiang Xin
@ 2018-12-09 4:09 0% ` Junio C Hamano
0 siblings, 0 replies; 71+ results
From: Junio C Hamano @ 2018-12-09 4:09 UTC (permalink / raw)
To: Jiang Xin
Cc: Git List, Alexander Shopov, Jordi Mas, Ralf Thielow,
Christopher Díaz, Jean-Noël Avila, Marco Paolone,
Gwan-gyeong Mun, Vasco Almeida, Dimitriy Ryazantcev,
Peter Krefting, Trần Ngọc Quân,
Christopher Diaz Riveros, Minh Nguyen
Jiang Xin <worldhello.net@gmail.com> writes:
> Please pull the following git l10n updates for Git 2.20.0.
>
> The following changes since commit 8a0ba68f6dab2c8b1f297a0d46b710bb9af3237a:
>
> Git 2.20-rc2 (2018-12-01 21:44:56 +0900)
>
> are available in the Git repository at:
>
> git@github.com:git-l10n/git-po.git tags/l10n-2.20.0-rnd3
>
> for you to fetch changes up to 0688c551a3e0f812e2153b716b9674da5914122c:
>
> l10n: de.po: fix two messages (2018-12-07 19:43:07 +0100)
Thanks, will do.
^ permalink raw reply [relevance 0%]
* [GIT PULL] l10n updates for 2.20.0 round 3
@ 2018-12-09 4:04 3% Jiang Xin
2018-12-09 4:09 0% ` Junio C Hamano
0 siblings, 1 reply; 71+ results
From: Jiang Xin @ 2018-12-09 4:04 UTC (permalink / raw)
To: Junio C Hamano
Cc: Git List, Alexander Shopov, Jordi Mas, Ralf Thielow,
Christopher Díaz, Jean-Noël Avila, Marco Paolone,
Gwan-gyeong Mun, Vasco Almeida, Dimitriy Ryazantcev,
Peter Krefting, Trần Ngọc Quân, Jiang Xin,
Christopher Diaz Riveros, Minh Nguyen
Hi Junio,
Please pull the following git l10n updates for Git 2.20.0.
The following changes since commit 8a0ba68f6dab2c8b1f297a0d46b710bb9af3237a:
Git 2.20-rc2 (2018-12-01 21:44:56 +0900)
are available in the Git repository at:
git@github.com:git-l10n/git-po.git tags/l10n-2.20.0-rnd3
for you to fetch changes up to 0688c551a3e0f812e2153b716b9674da5914122c:
l10n: de.po: fix two messages (2018-12-07 19:43:07 +0100)
----------------------------------------------------------------
l10n-2.20.0-rnd3
----------------------------------------------------------------
Alexander Shopov (3):
l10n: bg.po: Updated Bulgarian translation (4185t)
l10n: bg.po: Updated Bulgarian translation (4185t)
l10n: bg.po: Updated Bulgarian translation (4187t)
Christopher Díaz Riveros (2):
l10n: es.po v2.20.0 round 1
l10n: es.po v2.20.0 round 3
Jean-Noël Avila (2):
l10n: fr.po v2.20 rnd 1
l10n: fr.po v2.20.0 round 3
Jiang Xin (16):
l10n: zh_CN: review for git v2.19.0 l10n
Merge branch 'master' of https://github.com/Softcatala/git-po
l10n: git.pot: v2.20.0 round 1 (254 new, 27 removed)
Merge branch 'master' of git://github.com/git-l10n/git-po
Merge branch 'fr_2.20_rnd1' of git://github.com/jnavila/git
Merge branch 'master' of git://github.com/nafmo/git-l10n-sv
Merge branch 'master' of git://github.com/alshopov/git-po
Merge branch 'master' of git://github.com/git-l10n/git-po
l10n: git.pot: v2.20.0 round 2 (2 new, 2 removed)
Merge branch 'master' of https://github.com/vnwildman/git
Merge branch 'master' of git://github.com/git-l10n/git-po
l10n: git.pot: v2.20.0 round 3 (5 new, 3 removed)
Merge branch 'master' of https://github.com/vnwildman/git
Merge branch 'fr_2.20_round3' of git://github.com/jnavila/git
Merge branch 'master' of git://github.com/alshopov/git-po
l10n: zh_CN: for git v2.20.0 l10n round 1 to 3
Jordi Mas (2):
l10n: Update Catalan translation
l10n: Update Catalan translation
Minh Nguyen (1):
l10n: vi.po: fix typo in pack-objects
Peter Krefting (2):
l10n: sv.po: Update Swedish translation (4185t0f0u)
l10n: sv.po: Update Swedish translation (4187t0f0u)
Ralf Thielow (3):
l10n: update German translation
l10n: update German translation
l10n: de.po: fix two messages
Trần Ngọc Quân (2):
l10n: vi(4185t): Updated Vietnamese translation for v2.20.0
l10n: vi(4187t): Updated Vietnamese translation for v2.20.0 rd3
po/bg.po | 7398 ++++++++++++++++-------------
po/ca.po | 14723 +++++++++++++++++++++++++++++++++++++---------------------
po/de.po | 10702 ++++++++++++++++++++++++++++--------------
po/es.po | 7642 +++++++++++++++++-------------
po/fr.po | 7344 +++++++++++++++++------------
po/git.pot | 7243 +++++++++++++++++------------
po/sv.po | 7324 +++++++++++++++++------------
po/vi.po | 7357 +++++++++++++++++------------
po/zh_CN.po | 7422 ++++++++++++++++-------------
9 files changed, 46477 insertions(+), 30678 deletions(-)
--
Jiang Xin
^ permalink raw reply [relevance 3%]
* Re: [ANNOUNCE] Git v2.20.0-rc2
2018-12-01 14:58 3% [ANNOUNCE] Git v2.20.0-rc2 Junio C Hamano
@ 2018-12-03 20:45 0% ` Johannes Schindelin
0 siblings, 0 replies; 71+ results
From: Johannes Schindelin @ 2018-12-03 20:45 UTC (permalink / raw)
To: Junio C Hamano; +Cc: git, git-for-windows, git-packagers
[-- Attachment #1: Type: text/plain, Size: 91897 bytes --]
Team,
Git for Windows v2.20.0-rc2 is available here:
https://github.com/git-for-windows/git/releases/tag/v2.20.0-rc2.windows.1
There is already one known issue: the size of the installer increased (see
https://github.com/git-for-windows/git/issues/1963). This is in the
process of being addressed.
Ciao,
Johannes
On Sat, 1 Dec 2018, Junio C Hamano wrote:
> A release candidate Git v2.20.0-rc2 is now available for testing
> at the usual places. It is comprised of 934 non-merge commits
> since v2.19.0, contributed by 76 people, 25 of which are new faces.
>
> The tarballs are found at:
>
> https://www.kernel.org/pub/software/scm/git/testing/
>
> The following public repositories all have a copy of the
> 'v2.20.0-rc2' tag and the 'master' branch that the tag points at:
>
> url = https://kernel.googlesource.com/pub/scm/git/git
> url = git://repo.or.cz/alt-git.git
> url = https://github.com/gitster/git
>
> New contributors whose contributions weren't in v2.19.0 are as follows.
> Welcome to the Git development community!
>
> Aaron Lindsay, Alexander Pyhalov, Anton Serbulov, Brendan
> Forster, Carlo Marcelo Arenas Belón, Daniels Umanovskis, David
> Zych, Đoàn Trần Công Danh, Frederick Eaton, Greg Hurrell,
> James Knight, Jann Horn, Joshua Watt, Loo Rong Jie, Lucas
> De Marchi, Matthew DeVore, Mihir Mehta, Nickolai Belakovski,
> Roger Strain, Sam McKelvie, Saulius Gurklys, Shulhan, Steven
> Fernandez, Strain, Roger L, and Tim Schumacher.
>
> Returning contributors who helped this release are as follows.
> Thanks for your continued support.
>
> Ævar Arnfjörð Bjarmason, Alban Gruin, Andreas Gruenbacher,
> Andreas Heiduk, Antonio Ospite, Ben Peart, Brandon Williams,
> brian m. carlson, Christian Couder, Christian Hesse, Denton Liu,
> Derrick Stolee, Elijah Newren, Eric Sunshine, Jean-Noël Avila,
> Jeff Hostetler, Jeff King, Johannes Schindelin, Johannes Sixt,
> Jonathan Nieder, Jonathan Tan, Josh Steadmon, Junio C Hamano,
> Karsten Blees, Luke Diamand, Martin Ågren, Max Kirillov,
> Michael Witten, Michał Górny, Nguyễn Thái Ngọc Duy, Noam
> Postavsky, Olga Telezhnaya, Phillip Wood, Pratik Karki, Rafael
> Ascensão, Ralf Thielow, Ramsay Jones, Rasmus Villemoes, René
> Scharfe, Sebastian Staudt, Stefan Beller, Stephen P. Smith, Steve
> Hoelzer, Sven Strickroth, SZEDER Gábor, Tao Qingyun, Taylor
> Blau, Thomas Gummerer, Todd Zullinger, Torsten Bögershausen,
> and Uwe Kleine-König.
>
> ----------------------------------------------------------------
>
> Git 2.20 Release Notes (draft)
> ==============================
>
> Backward Compatibility Notes
> ----------------------------
>
> * "git branch -l <foo>" used to be a way to ask a reflog to be
> created while creating a new branch, but that is no longer the
> case. It is a short-hand for "git branch --list <foo>" now.
>
> * "git push" into refs/tags/* hierarchy is rejected without getting
> forced, but "git fetch" (misguidedly) used the "fast forwarding"
> rule used for the refs/heads/* hierarchy; this has been corrected,
> which means some fetches of tags that did not fail with older
> version of Git will fail without "--force" with this version.
>
> * "git help -a" now gives verbose output (same as "git help -av").
> Those who want the old output may say "git help --no-verbose -a"..
>
> * "git cpn --help", when "cpn" is an alias to, say, "cherry-pick -n",
> reported only the alias expansion of "cpn" in earlier versions of
> Git. It now runs "git cherry-pick --help" to show the manual page
> of the command, while sending the alias expansion to the standard
> error stream.
>
> * "git send-email" learned to grab address-looking string on any
> trailer whose name ends with "-by". This is a backward-incompatible
> change. Adding "--suppress-cc=misc-by" on the command line, or
> setting sendemail.suppresscc configuration variable to "misc-by",
> can be used to disable this behaviour.
>
>
> Updates since v2.19
> -------------------
>
> UI, Workflows & Features
>
> * Running "git clone" against a project that contain two files with
> pathnames that differ only in cases on a case insensitive
> filesystem would result in one of the files lost because the
> underlying filesystem is incapable of holding both at the same
> time. An attempt is made to detect such a case and warn.
>
> * "git checkout -b newbranch [HEAD]" should not have to do as much as
> checking out a commit different from HEAD. An attempt is made to
> optimize this special case.
>
> * "git rev-list --stdin </dev/null" used to be an error; it now shows
> no output without an error. "git rev-list --stdin --default HEAD"
> still falls back to the given default when nothing is given on the
> standard input.
>
> * Lift code from GitHub to restrict delta computation so that an
> object that exists in one fork is not made into a delta against
> another object that does not appear in the same forked repository.
>
> * "git format-patch" learned new "--interdiff" and "--range-diff"
> options to explain the difference between this version and the
> previous attempt in the cover letter (or after the three-dashes as
> a comment).
>
> * "git mailinfo" used in "git am" learned to make a best-effort
> recovery of a patch corrupted by MUA that sends text/plain with
> format=flawed option.
> (merge 3aa4d81f88 rs/mailinfo-format-flowed later to maint).
>
> * The rules used by "git push" and "git fetch" to determine if a ref
> can or cannot be updated were inconsistent; specifically, fetching
> to update existing tags were allowed even though tags are supposed
> to be unmoving anchoring points. "git fetch" was taught to forbid
> updates to existing tags without the "--force" option.
>
> * "git multi-pack-index" learned to detect corruption in the .midx
> file it uses, and this feature has been integrated into "git fsck".
>
> * Generation of (experimental) commit-graph files have so far been
> fairly silent, even though it takes noticeable amount of time in a
> meaningfully large repository. The users will now see progress
> output.
>
> * The minimum version of Windows supported by Windows port of Git is
> now set to Vista.
>
> * The completion script (in contrib/) learned to complete a handful of
> options "git stash list" command takes.
>
> * The completion script (in contrib/) learned that "git fetch
> --multiple" only takes remote names as arguments and no refspecs.
>
> * "git status" learns to show progress bar when refreshing the index
> takes a long time.
> (merge ae9af12287 nd/status-refresh-progress later to maint).
>
> * "git help -a" and "git help -av" give different pieces of
> information, and generally the "verbose" version is more friendly
> to the new users. "git help -a" by default now uses the more
> verbose output (with "--no-verbose", you can go back to the
> original). Also "git help -av" now lists aliases and external
> commands, which it did not used to.
>
> * Unlike "grep", "git grep" by default recurses to the whole tree.
> The command learned "git grep --recursive" option, so that "git
> grep --no-recursive" can serve as a synonym to setting the
> max-depth to 0.
>
> * When pushing into a repository that borrows its objects from an
> alternate object store, "git receive-pack" that responds to the
> push request on the other side lists the tips of refs in the
> alternate to reduce the amount of objects transferred. This
> sometimes is detrimental when the number of refs in the alternate
> is absurdly large, in which case the bandwidth saved in potentially
> fewer objects transferred is wasted in excessively large ref
> advertisement. The alternate refs that are advertised are now
> configurable with a pair of configuration variables.
>
> * "git cmd --help" when "cmd" is aliased used to only say "cmd is
> aliased to ...". Now it shows that to the standard error stream
> and runs "git $cmd --help" where $cmd is the first word of the
> alias expansion.
>
> * The documentation of "git gc" has been updated to mention that it
> is no longer limited to "pruning away crufts" but also updates
> ancillary files like commit-graph as a part of repository
> optimization.
>
> * "git p4 unshelve" improvements.
>
> * The logic to select the default user name and e-mail on Windows has
> been improved.
> (merge 501afcb8b0 js/mingw-default-ident later to maint).
>
> * The "rev-list --filter" feature learned to exclude all trees via
> "tree:0" filter.
>
> * "git send-email" learned to grab address-looking string on any
> trailer whose name ends with "-by"; --suppress-cc=misc-by on the
> command line, or setting sendemail.suppresscc configuration
> variable to "misc-by", can be used to disable this behaviour.
>
> * Developer builds now uses -Wunused-function compilation option.
>
> * One of our CI tests to run with "unusual/experimental/random"
> settings now also uses commit-graph and midx.
>
> * "git mergetool" learned to take the "--[no-]gui" option, just like
> "git difftool" does.
>
> * "git rebase -i" learned a new insn, 'break', that the user can
> insert in the to-do list. Upon hitting it, the command returns
> control back to the user.
>
> * New "--pretty=format:" placeholders %GF and %GP that show the GPG
> key fingerprints have been invented.
>
> * On platforms with recent cURL library, http.sslBackend configuration
> variable can be used to choose a different SSL backend at runtime.
> The Windows port uses this mechanism to switch between OpenSSL and
> Secure Channel while talking over the HTTPS protocol.
>
> * "git send-email" learned to disable SMTP authentication via the
> "--smtp-auth=none" option, even when the smtp username is given
> (which turns the authentication on by default).
>
> * A fourth class of configuration files (in addition to the
> traditional "system wide", "per user in the $HOME directory" and
> "per repository in the $GIT_DIR/config") has been introduced so
> that different worktrees that share the same repository (hence the
> same $GIT_DIR/config file) can use different customization.
>
> * A pattern with '**' that does not have a slash on either side used
> to be an invalid one, but the code now treats such double-asterisks
> the same way as two normal asterisks that happen to be adjacent to
> each other.
> (merge e5bbe09e88 nd/wildmatch-double-asterisk later to maint).
>
> * The "--no-patch" option, which can be used to get a high-level
> overview without the actual line-by-line patch difference shown, of
> the "range-diff" command was earlier broken, which has been
> corrected.
>
> * The recently merged "rebase in C" has an escape hatch to use the
> scripted version when necessary, but it hasn't been documented,
> which has been corrected.
>
>
> Performance, Internal Implementation, Development Support etc.
>
> * When there are too many packfiles in a repository (which is not
> recommended), looking up an object in these would require
> consulting many pack .idx files; a new mechanism to have a single
> file that consolidates all of these .idx files is introduced.
>
> * "git submodule update" is getting rewritten piece-by-piece into C.
>
> * The code for computing history reachability has been shuffled,
> obtained a bunch of new tests to cover them, and then being
> improved.
>
> * The unpack_trees() API used in checking out a branch and merging
> walks one or more trees along with the index. When the cache-tree
> in the index tells us that we are walking a tree whose flattened
> contents is known (i.e. matches a span in the index), as linearly
> scanning a span in the index is much more efficient than having to
> open tree objects recursively and listing their entries, the walk
> can be optimized, which has been done.
>
> * When creating a thin pack, which allows objects to be made into a
> delta against another object that is not in the resulting pack but
> is known to be present on the receiving end, the code learned to
> take advantage of the reachability bitmap; this allows the server
> to send a delta against a base beyond the "boundary" commit.
>
> * spatch transformation to replace boolean uses of !hashcmp() to
> newly introduced oideq() is added, and applied, to regain
> performance lost due to support of multiple hash algorithms.
>
> * Fix a bug in which the same path could be registered under multiple
> worktree entries if the path was missing (for instance, was removed
> manually). Also, as a convenience, expand the number of cases in
> which --force is applicable.
>
> * Split Documentation/config.txt for easier maintenance.
> (merge 6014363f0b nd/config-split later to maint).
>
> * Test helper binaries clean-up.
> (merge c9a1f4161f nd/test-tool later to maint).
>
> * Various tests have been updated to make it easier to swap the
> hash function used for object identification.
> (merge ae0c89d41b bc/hash-independent-tests later to maint).
>
> * Update fsck.skipList implementation and documentation.
> (merge 371a655074 ab/fsck-skiplist later to maint).
>
> * An alias that expands to another alias has so far been forbidden,
> but now it is allowed to create such an alias.
>
> * Various test scripts have been updated for style and also correct
> handling of exit status of various commands.
>
> * "gc --auto" ended up calling exit(-1) upon error, which has been
> corrected to use exit(1). Also the error reporting behaviour when
> daemonized has been updated to exit with zero status when stopping
> due to a previously discovered error (which implies there is no
> point running gc to improve the situation); we used to exit with
> failure in such a case.
>
> * Various codepaths in the core-ish part learned to work on an
> arbitrary in-core index structure, not necessarily the default
> instance "the_index".
> (merge b3c7eef9b0 nd/the-index later to maint).
>
> * Code clean-up in the internal machinery used by "git status" and
> "git commit --dry-run".
> (merge 73ba5d78b4 ss/wt-status-committable later to maint).
>
> * Some environment variables that control the runtime options of Git
> used during tests are getting renamed for consistency.
> (merge 4231d1ba99 bp/rename-test-env-var later to maint).
>
> * A pair of new extensions to the index file have been introduced.
> They allow the index file to be read in parallel for performance.
>
> * The oidset API was built on top of the oidmap API which in turn is
> on the hashmap API. Replace the implementation to build on top of
> the khash API and gain performance.
>
> * Over some transports, fetching objects with an exact commit object
> name can be done without first seeing the ref advertisements. The
> code has been optimized to exploit this.
>
> * In a partial clone that will lazily be hydrated from the
> originating repository, we generally want to avoid "does this
> object exist (locally)?" on objects that we deliberately omitted
> when we created the clone. The cache-tree codepath (which is used
> to write a tree object out of the index) however insisted that the
> object exists, even for paths that are outside of the partial
> checkout area. The code has been updated to avoid such a check.
>
> * To help developers, an EditorConfig file that attempts to follow
> the project convention has been added.
> (merge b548d698a0 bc/editorconfig later to maint).
>
> * The result of coverage test can be combined with "git blame" to
> check the test coverage of code introduced recently with a new
> 'coverage-diff' tool (in contrib/).
> (merge 783faedd65 ds/coverage-diff later to maint).
>
> * An experiment to fuzz test a few areas, hopefully we can gain more
> coverage to various areas.
>
> * More codepaths are moving away from hardcoded hash sizes.
>
> * The way the Windows port figures out the current directory has been
> improved.
>
> * The way DLLs are loaded on the Windows port has been improved.
>
> * Some tests have been reorganized and renamed; "ls t/" now gives a
> better overview of what is tested for these scripts than before.
>
> * "git rebase" and "git rebase -i" have been reimplemented in C.
>
> * Windows port learned to use nano-second resolution file timestamps.
>
> * The overly large Documentation/config.txt file have been split into
> million little pieces. This potentially allows each individual piece
> included into the manual page of the command it affects more easily.
>
> * Replace three string-list instances used as look-up tables in "git
> fetch" with hashmaps.
>
> * Unify code to read the author-script used in "git am" and the
> commands that use the sequencer machinery, e.g. "git rebase -i".
>
> * In preparation to the day when we can deprecate and remove the
> "rebase -p", make sure we can skip and later remove tests for
> it.
>
> * The history traversal used to implement the tag-following has been
> optimized by introducing a new helper.
>
> * The helper function to refresh the cached stat information in the
> in-core index has learned to perform the lstat() part of the
> operation in parallel on multi-core platforms.
>
> * The code to traverse objects for reachability, used to decide what
> objects are unreferenced and expendable, have been taught to also
> consider per-worktree refs of other worktrees as starting points to
> prevent data loss.
>
> * "git add" needs to internally run "diff-files" equivalent, and the
> codepath learned the same optimization as "diff-files" has to run
> lstat(2) in parallel to find which paths have been updated in the
> working tree.
>
> * The procedure to install dependencies before testing at Travis CI
> is getting revamped for both simplicity and flexibility, taking
> advantage of the recent move to the vm-based environment.
>
> * The support for format-patch (and send-email) by the command-line
> completion script (in contrib/) has been simplified a bit.
>
> * The revision walker machinery learned to take advantage of the
> commit generation numbers stored in the commit-graph file.
>
> * The codebase has been cleaned up to reduce "#ifndef NO_PTHREADS".
>
> * The way -lcurl library gets linked has been simplified by taking
> advantage of the fact that we can just ask curl-config command how.
>
> * Various functions have been audited for "-Wunused-parameter" warnings
> and bugs in them got fixed.
>
> * A sanity check for start-up sequence has been added in the config
> API codepath.
>
> * The build procedure to link for fuzzing test has been made
> customizable with a new Makefile variable.
>
> * The way "git rebase" parses and forwards the command line options
> meant for underlying "git am" has been revamped, which fixed for
> options with parameters that were not passed correctly.
>
> * Our testing framework uses a special i18n "poisoned localization"
> feature to find messages that ought to stay constant but are
> incorrectly marked to be translated. This feature has been made
> into a runtime option (it used to be a compile-time option).
>
> * "git push" used to check ambiguities between object-names and
> refnames while processing the list of refs' old and new values,
> which was unnecessary (as it knew that it is feeding raw object
> names). This has been optimized out.
>
> * The xcurl_off_t() helper function is used to cast size_t to
> curl_off_t, but some compilers gave warnings against the code to
> ensure the casting is done without wraparound, when size_t is
> narrower than curl_off_t. This warning has been squelched.
>
> * Code preparation to replace ulong vars with size_t vars where
> appropriate continues.
>
> * The "test installed Git" mode of our test suite has been updated to
> work better.
>
> * A coding convention around the Coccinelle semantic patches to have
> two classes to ease code migration process has been proposed and
> its support has been added to the Makefile.
>
>
> Fixes since v2.19
> -----------------
>
> * "git interpret-trailers" and its underlying machinery had a buggy
> code that attempted to ignore patch text after commit log message,
> which triggered in various codepaths that will always get the log
> message alone and never get such an input.
> (merge 66e83d9b41 jk/trailer-fixes later to maint).
>
> * Malformed or crafted data in packstream can make our code attempt
> to read or write past the allocated buffer and abort, instead of
> reporting an error, which has been fixed.
>
> * "git rebase -i" did not clear the state files correctly when a run
> of "squash/fixup" is aborted and then the user manually amended the
> commit instead, which has been corrected.
> (merge 10d2f35436 js/rebase-i-autosquash-fix later to maint).
>
> * When fsmonitor is in use, after operation on submodules updates
> .gitmodules, we lost track of the fact that we did so and relied on
> stale fsmonitor data.
> (merge 43f1180814 bp/mv-submodules-with-fsmonitor later to maint).
>
> * Fix for a long-standing bug that leaves the index file corrupt when
> it shrinks during a partial commit.
> (merge 6c003d6ffb jk/reopen-tempfile-truncate later to maint).
>
> * Further fix for O_APPEND emulation on Windows
> (merge eeaf7ddac7 js/mingw-o-append later to maint).
>
> * A corner case bugfix in "git rerere" code.
> (merge ad2bf0d9b4 en/rerere-multi-stage-1-fix later to maint).
>
> * "git add ':(attr:foo)'" is not supported and is supposed to be
> rejected while the command line arguments are parsed, but we fail
> to reject such a command line upfront.
> (merge 84d938b732 nd/attr-pathspec-fix later to maint).
>
> * Recent update broke the reachability algorithm when refs (e.g.
> tags) that point at objects that are not commit were involved,
> which has been fixed.
>
> * "git rebase" etc. in Git 2.19 fails to abort when given an empty
> commit log message as result of editing, which has been corrected.
> (merge a3ec9eaf38 en/sequencer-empty-edit-result-aborts later to maint).
>
> * The code to backfill objects in lazily cloned repository did not
> work correctly, which has been corrected.
> (merge e68302011c jt/lazy-object-fetch-fix later to maint).
>
> * Update error messages given by "git remote" and make them consistent.
> (merge 5025425dff ms/remote-error-message-update later to maint).
>
> * "git update-ref" learned to make both "--no-deref" and "--stdin"
> work at the same time.
> (merge d345e9fbe7 en/update-ref-no-deref-stdin later to maint).
>
> * Recently added "range-diff" had a corner-case bug to cause it
> segfault, which has been corrected.
> (merge e467a90c7a tg/range-diff-corner-case-fix later to maint).
>
> * The recently introduced commit-graph auxiliary data is incompatible
> with mechanisms such as replace & grafts that "breaks" immutable
> nature of the object reference relationship. Disable optimizations
> based on its use (and updating existing commit-graph) when these
> incompatible features are in use in the repository.
> (merge 829a321569 ds/commit-graph-with-grafts later to maint).
>
> * The mailmap file update.
> (merge 255eb03edf jn/mailmap-update later to maint).
>
> * The code in "git status" sometimes hit an assertion failure. This
> was caused by a structure that was reused without cleaning the data
> used for the first run, which has been corrected.
> (merge 3e73cc62c0 en/status-multiple-renames-to-the-same-target-fix later to maint).
>
> * "git fetch $repo $object" in a partial clone did not correctly
> fetch the asked-for object that is referenced by an object in
> promisor packfile, which has been fixed.
>
> * A corner-case bugfix.
> (merge c5cbb27cb5 sm/show-superproject-while-conflicted later to maint).
>
> * Various fixes to "diff --color-moved-ws".
>
> * A partial clone that is configured to lazily fetch missing objects
> will on-demand issue a "git fetch" request to the originating
> repository to fill not-yet-obtained objects. The request has been
> optimized for requesting a tree object (and not the leaf blob
> objects contained in it) by telling the originating repository that
> no blobs are needed.
> (merge 4c7f9567ea jt/non-blob-lazy-fetch later to maint).
>
> * The codepath to support the experimental split-index mode had
> remaining "racily clean" issues fixed.
> (merge 4c490f3d32 sg/split-index-racefix later to maint).
>
> * "git log --graph" showing an octopus merge sometimes miscounted the
> number of display columns it is consuming to show the merge and its
> parent commits, which has been corrected.
> (merge 04005834ed np/log-graph-octopus-fix later to maint).
>
> * "git range-diff" did not work well when the compared ranges had
> changes in submodules and the "--submodule=log" was used.
>
> * The implementation of run_command() API on the UNIX platforms had a
> bug that caused a command not on $PATH to be found in the current
> directory.
> (merge f67b980771 jk/run-command-notdot later to maint).
>
> * A mutex used in "git pack-objects" were not correctly initialized
> and this caused "git repack" to dump core on Windows.
> (merge 34204c8166 js/pack-objects-mutex-init-fix later to maint).
>
> * Under certain circumstances, "git diff D:/a/b/c D:/a/b/d" on
> Windows would strip initial parts from the paths because they
> were not recognized as absolute, which has been corrected.
> (merge ffd04e92e2 js/diff-notice-has-drive-prefix later to maint).
>
> * The receive.denyCurrentBranch=updateInstead codepath kicked in even
> when the push should have been rejected due to other reasons, such
> as it does not fast-forward or the update-hook rejects it, which
> has been corrected.
> (merge b072a25fad jc/receive-deny-current-branch-fix later to maint).
>
> * The logic to determine the archive type "git archive" uses did not
> correctly kick in for "git archive --remote", which has been
> corrected.
>
> * "git repack" in a shallow clone did not correctly update the
> shallow points in the repository, leading to a repository that
> does not pass fsck.
> (merge 5dcfbf564c js/shallow-and-fetch-prune later to maint).
>
> * Some codepaths failed to form a proper URL when .gitmodules record
> the URL to a submodule repository as relative to the repository of
> superproject, which has been corrected.
> (merge e0a862fdaf sb/submodule-url-to-absolute later to maint).
>
> * "git fetch" over protocol v2 into a shallow repository failed to
> fetch full history behind a new tip of history that was diverged
> before the cut-off point of the history that was previously fetched
> shallowly.
>
> * The command line completion machinery (in contrib/) has been
> updated to allow the completion script to tweak the list of options
> that are reported by the parse-options machinery correctly.
> (merge 276b49ff34 nd/completion-negation later to maint).
>
> * Operations on promisor objects make sense in the context of only a
> small subset of the commands that internally use the revisions
> machinery, but the "--exclude-promisor-objects" option were taken
> and led to nonsense results by commands like "log", to which it
> didn't make much sense. This has been corrected.
> (merge 669b1d2aae md/exclude-promisor-objects-fix later to maint).
>
> * The "container" mode of TravisCI is going away. Our .travis.yml
> file is getting prepared for the transition.
> (merge 32ee384be8 ss/travis-ci-force-vm-mode later to maint).
>
> * Our test scripts can now take the '-V' option as a synonym for the
> '--verbose-log' option.
> (merge a5f52c6dab sg/test-verbose-log later to maint).
>
> * A regression in Git 2.12 era made "git fsck" fall into an infinite
> loop while processing truncated loose objects.
> (merge 18ad13e5b2 jk/detect-truncated-zlib-input later to maint).
>
> * "git ls-remote $there foo" was broken by recent update for the
> protocol v2 and stopped showing refs that match 'foo' that are not
> refs/{heads,tags}/foo, which has been fixed.
> (merge 6a139cdd74 jk/proto-v2-ref-prefix-fix later to maint).
>
> * Additional comment on a tricky piece of code to help developers.
> (merge 0afbe3e806 jk/stream-pack-non-delta-clarification later to maint).
>
> * A couple of tests used to leave the repository in a state that is
> deliberately corrupt, which have been corrected.
> (merge aa984dbe5e ab/pack-tests-cleanup later to maint).
>
> * The submodule support has been updated to read from the blob at
> HEAD:.gitmodules when the .gitmodules file is missing from the
> working tree.
> (merge 2b1257e463 ao/submodule-wo-gitmodules-checked-out later to maint).
>
> * "git fetch" was a bit loose in parsing responses from the other side
> when talking over the protocol v2.
>
> * "git rev-parse --exclude=* --branches --branches" (i.e. first
> saying "add only things that do not match '*' out of all branches"
> and then adding all branches, without any exclusion this time")
> worked as expected, but "--exclude=* --all --all" did not work the
> same way, which has been fixed.
> (merge 5221048092 ag/rev-parse-all-exclude-fix later to maint).
>
> * "git send-email --transfer-encoding=..." in recent versions of Git
> sometimes produced an empty "Content-Transfer-Encoding:" header,
> which has been corrected.
> (merge 3c88e46f1a al/send-email-auto-cte-fixup later to maint).
>
> * The interface into "xdiff" library used to discover the offset and
> size of a generated patch hunk by first formatting it into the
> textual hunk header "@@ -n,m +k,l @@" and then parsing the numbers
> out. A new interface has been introduced to allow callers a more
> direct access to them.
> (merge 5eade0746e jk/xdiff-interface later to maint).
>
> * Pathspec matching against a tree object were buggy when negative
> pathspec elements were involved, which has been fixed.
> (merge b7845cebc0 nd/tree-walk-path-exclusion later to maint).
>
> * "git merge" and "git pull" that merges into an unborn branch used
> to completely ignore "--verify-signatures", which has been
> corrected.
> (merge 01a31f3bca jk/verify-sig-merge-into-void later to maint).
>
> * "git rebase --autostash" did not correctly re-attach the HEAD at times.
>
> * "rev-parse --exclude=<pattern> --branches=<pattern>" etc. did not
> quite work, which has been corrected.
> (merge 9ab9b5df0e ra/rev-parse-exclude-glob later to maint).
>
> * When editing a patch in a "git add -i" session, a hunk could be
> made to no-op. The "git apply" program used to reject a patch with
> such a no-op hunk to catch user mistakes, but it is now updated to
> explicitly allow a no-op hunk in an edited patch.
> (merge 22cb3835b9 js/apply-recount-allow-noop later to maint).
>
> * The URL to an MSDN page in a comment has been updated.
> (merge 2ef2ae2917 js/mingw-msdn-url later to maint).
>
> * "git ls-remote --sort=<thing>" can feed an object that is not yet
> available into the comparison machinery and segfault, which has
> been corrected to check such a request upfront and reject it.
>
> * When "git bundle" aborts due to an empty commit ranges
> (i.e. resulting in an empty pack), it left a file descriptor to an
> lockfile open, which resulted in leftover lockfile on Windows where
> you cannot remove a file with an open file descriptor. This has
> been corrected.
> (merge 2c8ee1f53c jk/close-duped-fd-before-unlock-for-bundle later to maint).
>
> * "git format-patch --stat=<width>" can be used to specify the width
> used by the diffstat (shown in the cover letter).
> (merge 284aeb7e60 nd/format-patch-cover-letter-stat-width later to maint).
>
> * The way .git/index and .git/sharedindex* files were initially
> created gave these files different perm bits until they were
> adjusted for shared repository settings. This was made consistent.
> (merge c9d6c78870 cc/shared-index-permbits later to maint).
>
> * "git rebase --stat" to transplant a piece of history onto a totally
> unrelated history were not working before and silently showed wrong
> result. With the recent reimplementation in C, it started to instead
> die with an error message, as the original logic was not prepared
> to cope with this case. This has now been fixed.
>
> * The advice message to tell the user to migrate an existing graft
> file to the replace system when a graft file was read was shown
> even when "git replace --convert-graft-file" command, which is the
> way the message suggests to use, was running, which made little
> sense.
> (merge 8821e90a09 ab/replace-graft-with-replace-advice later to maint).
>
> * "git diff --raw" lost ellipses to adjust the output columns for
> some time now, but the documentation still showed them.
>
> * Code cleanup, docfix, build fix, etc.
> (merge 96a7501aad ts/doc-build-manpage-xsl-quietly later to maint).
> (merge b9b07efdb2 tg/conflict-marker-size later to maint).
> (merge fa0aeea770 sg/doc-trace-appends later to maint).
> (merge d64324cb60 tb/void-check-attr later to maint).
> (merge c3b9bc94b9 en/double-semicolon-fix later to maint).
> (merge 79336116f5 sg/t3701-tighten-trace later to maint).
> (merge 801fa63a90 jk/dev-build-format-security later to maint).
> (merge 0597dd62ba sb/string-list-remove-unused later to maint).
> (merge db2d36fad8 bw/protocol-v2 later to maint).
> (merge 456d7cd3a9 sg/split-index-test later to maint).
> (merge 7b6057c852 tq/refs-internal-comment-fix later to maint).
> (merge 29e8dc50ad tg/t5551-with-curl-7.61.1 later to maint).
> (merge 55f6bce2c9 fe/doc-updates later to maint).
> (merge 7987d2232d jk/check-everything-connected-is-long-gone later to maint).
> (merge 4ba3c9be47 dz/credential-doc-url-matching-rules later to maint).
> (merge 4c399442f7 ma/commit-graph-docs later to maint).
> (merge fc0503b04e ma/t1400-undebug-test later to maint).
> (merge e56b53553a nd/packobjectshook-doc-fix later to maint).
> (merge c56170a0c4 ma/mailing-list-address-in-git-help later to maint).
> (merge 6e8fc70fce rs/sequencer-oidset-insert-avoids-dups later to maint).
> (merge ad0b8f9575 mw/doc-typofixes later to maint).
> (merge d9f079ad1a jc/how-to-document-api later to maint).
> (merge b1492bf315 ma/t7005-bash-workaround later to maint).
> (merge ac1f98a0df du/rev-parse-is-plumbing later to maint).
> (merge ca8ed443a5 mm/doc-no-dashed-git later to maint).
> (merge ce366a8144 du/get-tar-commit-id-is-plumbing later to maint).
> (merge 61018fe9e0 du/cherry-is-plumbing later to maint).
> (merge c7e5fe79b9 sb/strbuf-h-update later to maint).
> (merge 8d2008196b tq/branch-create-wo-branch-get later to maint).
> (merge 2e3c894f4b tq/branch-style-fix later to maint).
> (merge c5d844af9c sg/doc-show-branch-typofix later to maint).
> (merge 081d91618b ah/doc-updates later to maint).
> (merge b84c783882 jc/cocci-preincr later to maint).
> (merge 5e495f8122 uk/merge-subtree-doc-update later to maint).
> (merge aaaa881822 jk/uploadpack-packobjectshook-fix later to maint).
> (merge 3063477445 tb/char-may-be-unsigned later to maint).
> (merge 8c64bc9420 sg/test-rebase-editor-fix later to maint).
> (merge 71571cd7d6 ma/sequencer-do-reset-saner-loop-termination later to maint).
> (merge 9a4cb8781e cb/notes-freeing-always-null-fix later to maint).
> (merge 3006f5ee16 ma/reset-doc-rendering-fix later to maint).
> (merge 4c2eb06419 sg/daemon-test-signal-fix later to maint).
> (merge d27525e519 ss/msvc-strcasecmp later to maint).
>
> ----------------------------------------------------------------
>
> Changes since v2.19.0 are as follows:
>
> Aaron Lindsay (1):
> send-email: avoid empty transfer encoding header
>
> Alban Gruin (21):
> sequencer: make three functions and an enum from sequencer.c public
> rebase -i: rewrite append_todo_help() in C
> editor: add a function to launch the sequence editor
> rebase -i: rewrite the edit-todo functionality in C
> sequencer: add a new function to silence a command, except if it fails
> rebase -i: rewrite setup_reflog_action() in C
> rebase -i: rewrite checkout_onto() in C
> sequencer: refactor append_todo_help() to write its message to a buffer
> sequencer: change the way skip_unnecessary_picks() returns its result
> t3404: todo list with commented-out commands only aborts
> rebase -i: rewrite complete_action() in C
> rebase -i: remove unused modes and functions
> rebase -i: implement the logic to initialize $revisions in C
> rebase -i: rewrite the rest of init_revisions_and_shortrevisions() in C
> rebase -i: rewrite write_basic_state() in C
> rebase -i: rewrite init_basic_state() in C
> rebase -i: implement the main part of interactive rebase as a builtin
> rebase--interactive2: rewrite the submodes of interactive rebase in C
> rebase -i: remove git-rebase--interactive.sh
> rebase -i: move rebase--helper modes to rebase--interactive
> p3400: replace calls to `git checkout -b' by `git checkout -B'
>
> Alexander Pyhalov (1):
> t7005-editor: quote filename to fix whitespace-issue
>
> Andreas Gruenbacher (1):
> rev-parse: clear --exclude list after 'git rev-parse --all'
>
> Andreas Heiduk (6):
> doc: clarify boundaries of 'git worktree list --porcelain'
> doc: fix ASCII art tab spacing
> doc: fix inappropriate monospace formatting
> doc: fix descripion for 'git tag --format'
> doc: fix indentation of listing blocks in gitweb.conf.txt
> doc: fix formatting in git-update-ref
>
> Anton Serbulov (1):
> mingw: fix getcwd when the parent directory cannot be queried
>
> Antonio Ospite (10):
> submodule: add a print_config_from_gitmodules() helper
> submodule: factor out a config_set_in_gitmodules_file_gently function
> t7411: merge tests 5 and 6
> t7411: be nicer to future tests and really clean things up
> submodule--helper: add a new 'config' subcommand
> submodule: use the 'submodule--helper config' command
> t7506: clean up .gitmodules properly before setting up new scenario
> submodule: add a helper to check if it is safe to write to .gitmodules
> submodule: support reading .gitmodules when it's not in the working tree
> t/helper: add test-submodule-nested-repo-config
>
> Ben Peart (19):
> checkout: optimize "git checkout -b <new_branch>"
> git-mv: allow submodules and fsmonitor to work together
> t/README: correct spelling of "uncommon"
> preload-index: use git_env_bool() not getenv() for customization
> fsmonitor: update GIT_TEST_FSMONITOR support
> read-cache: update TEST_GIT_INDEX_VERSION support
> preload-index: update GIT_FORCE_PRELOAD_TEST support
> read-cache: clean up casting and byte decoding
> eoie: add End of Index Entry (EOIE) extension
> config: add new index.threads config setting
> read-cache: load cache extensions on a worker thread
> ieot: add Index Entry Offset Table (IEOT) extension
> read-cache: load cache entries on worker threads
> reset: don't compute unstaged changes after reset when --quiet
> reset: add new reset.quiet config setting
> reset: warn when refresh_index() takes more than 2 seconds
> speed up refresh_index() by utilizing preload_index()
> add: speed up cmd_add() by utilizing read_cache_preload()
> refresh_index: remove unnecessary calls to preload_index()
>
> Brandon Williams (1):
> config: document value 2 for protocol.version
>
> Brendan Forster (1):
> http: add support for disabling SSL revocation checks in cURL
>
> Carlo Marcelo Arenas Belón (8):
> unpack-trees: avoid dead store for struct progress
> multi-pack-index: avoid dead store for struct progress
> read-cache: use of memory after it is freed
> commit-slabs: move MAYBE_UNUSED out
> khash: silence -Wunused-function for delta-islands
> compat: make sure git_mmap is not expected to write
> sequencer: cleanup for gcc warning in non developer mode
> builtin/notes: remove unnecessary free
>
> Christian Couder (3):
> pack-objects: refactor code into compute_layer_order()
> pack-objects: move tree_depth into 'struct packing_data'
> pack-objects: move 'layer' into 'struct packing_data'
>
> Christian Hesse (2):
> subtree: add build targets 'man' and 'html'
> subtree: make install targets depend on build targets
>
> Daniels Umanovskis (3):
> doc: move git-rev-parse from porcelain to plumbing
> doc: move git-get-tar-commit-id to plumbing
> doc: move git-cherry to plumbing
>
> David Zych (1):
> doc: clarify gitcredentials path component matching
>
> Denton Liu (3):
> mergetool: accept -g/--[no-]gui as arguments
> completion: support `git mergetool --[no-]gui`
> doc: document diff/merge.guitool config keys
>
> Derrick Stolee (93):
> multi-pack-index: add design document
> multi-pack-index: add format details
> multi-pack-index: add builtin
> multi-pack-index: add 'write' verb
> midx: write header information to lockfile
> multi-pack-index: load into memory
> t5319: expand test data
> packfile: generalize pack directory list
> multi-pack-index: read packfile list
> multi-pack-index: write pack names in chunk
> midx: read pack names into array
> midx: sort and deduplicate objects from packfiles
> midx: write object ids in a chunk
> midx: write object id fanout chunk
> midx: write object offsets
> config: create core.multiPackIndex setting
> midx: read objects from multi-pack-index
> midx: use midx in abbreviation calculations
> midx: use existing midx when writing new one
> midx: use midx in approximate_object_count
> midx: prevent duplicate packfile loads
> packfile: skip loading index if in multi-pack-index
> midx: clear midx on repack
> commit-reach: move walk methods from commit.c
> commit.h: remove method declarations
> commit-reach: move ref_newer from remote.c
> commit-reach: move commit_contains from ref-filter
> upload-pack: make reachable() more generic
> upload-pack: refactor ok_to_give_up()
> upload-pack: generalize commit date cutoff
> commit-reach: move can_all_from_reach_with_flags
> test-reach: create new test tool for ref_newer
> test-reach: test in_merge_bases
> test-reach: test is_descendant_of
> test-reach: test get_merge_bases_many
> test-reach: test reduce_heads
> test-reach: test can_all_from_reach_with_flags
> test-reach: test commit_contains
> commit-reach: replace ref_newer logic
> commit-reach: make can_all_from_reach... linear
> commit-reach: use can_all_from_reach
> multi-pack-index: provide more helpful usage info
> multi-pack-index: store local property
> midx: mark bad packed objects
> midx: stop reporting garbage
> midx: fix bug that skips midx with alternates
> packfile: add all_packs list
> treewide: use get_all_packs
> midx: test a few commands that use get_all_packs
> pack-objects: consider packs in multi-pack-index
> commit-graph: update design document
> test-repository: properly init repo
> commit-graph: not compatible with replace objects
> commit-graph: not compatible with grafts
> commit-graph: not compatible with uninitialized repo
> commit-graph: close_commit_graph before shallow walk
> commit-graph: define GIT_TEST_COMMIT_GRAPH
> t3206-range-diff.sh: cover single-patch case
> t5318: use test_oid for HASH_LEN
> multi-pack-index: add 'verify' verb
> multi-pack-index: verify bad header
> multi-pack-index: verify corrupt chunk lookup table
> multi-pack-index: verify packname order
> multi-pack-index: verify missing pack
> multi-pack-index: verify oid fanout order
> multi-pack-index: verify oid lookup order
> multi-pack-index: fix 32-bit vs 64-bit size check
> multi-pack-index: verify object offsets
> multi-pack-index: report progress during 'verify'
> fsck: verify multi-pack-index
> commit-reach: properly peel tags
> commit-reach: fix memory and flag leaks
> commit-reach: cleanups in can_all_from_reach...
> commit-graph: clean up leaked memory during write
> commit-graph: reduce initial oid allocation
> midx: fix broken free() in close_midx()
> contrib: add coverage-diff script
> ci: add optional test variables
> commit-reach: fix first-parent heuristic
> midx: close multi-pack-index on repack
> multi-pack-index: define GIT_TEST_MULTI_PACK_INDEX
> packfile: close multi-pack-index in close_all_packs
> prio-queue: add 'peek' operation
> test-reach: add run_three_modes method
> test-reach: add rev-list tests
> revision.c: begin refactoring --topo-order logic
> commit/revisions: bookkeeping before refactoring
> revision.c: generation-based topo-order algorithm
> t6012: make rev-list tests more interesting
> commit-reach: implement get_reachable_subset
> test-reach: test get_reachable_subset
> remote: make add_missing_tags() linear
> pack-objects: ignore ambiguous object warnings
>
> Elijah Newren (14):
> Remove superfluous trailing semicolons
> t4200: demonstrate rerere segfault on specially crafted merge
> rerere: avoid buffer overrun
> update-ref: fix type of update_flags variable to match its usage
> update-ref: allow --no-deref with --stdin
> sequencer: fix --allow-empty-message behavior, make it smarter
> merge-recursive: set paths correctly when three-way merging content
> merge-recursive: avoid wrapper function when unnecessary and wasteful
> merge-recursive: remove final remaining caller of merge_file_one()
> merge-recursive: rename merge_file_1() and merge_content()
> commit: fix erroneous BUG, 'multiple renames on the same target? how?'
> merge-recursive: improve auto-merging messages with path collisions
> merge-recursive: avoid showing conflicts with merge branch before HEAD
> fsck: move fsck_head_link() to get_default_heads() to avoid some globals
>
> Eric Sunshine (26):
> format-patch: allow additional generated content in make_cover_letter()
> format-patch: add --interdiff option to embed diff in cover letter
> format-patch: teach --interdiff to respect -v/--reroll-count
> interdiff: teach show_interdiff() to indent interdiff
> log-tree: show_log: make commentary block delimiting reusable
> format-patch: allow --interdiff to apply to a lone-patch
> range-diff: respect diff_option.file rather than assuming 'stdout'
> range-diff: publish default creation factor
> range-diff: relieve callers of low-level configuration burden
> format-patch: add --range-diff option to embed diff in cover letter
> format-patch: extend --range-diff to accept revision range
> format-patch: teach --range-diff to respect -v/--reroll-count
> format-patch: add --creation-factor tweak for --range-diff
> format-patch: allow --range-diff to apply to a lone-patch
> worktree: don't die() in library function find_worktree()
> worktree: move delete_git_dir() earlier in file for upcoming new callers
> worktree: generalize delete_git_dir() to reduce code duplication
> worktree: prepare for more checks of whether path can become worktree
> worktree: disallow adding same path multiple times
> worktree: teach 'add' to respect --force for registered but missing path
> worktree: teach 'move' to override lock when --force given twice
> worktree: teach 'remove' to override lock when --force given twice
> worktree: delete .git/worktrees if empty after 'remove'
> doc-diff: fix non-portable 'man' invocation
> doc-diff: add --clean mode to remove temporary working gunk
> doc/Makefile: drop doc-diff worktree and temporary files on "make clean"
>
> Frederick Eaton (3):
> git-archimport.1: specify what kind of Arch we're talking about
> git-column.1: clarify initial description, provide examples
> git-describe.1: clarify that "human readable" is also git-readable
>
> Greg Hurrell (1):
> doc: update diff-format.txt for removed ellipses in --raw
>
> James Knight (1):
> build: link with curl-defined linker flags
>
> Jann Horn (2):
> patch-delta: fix oob read
> patch-delta: consistently report corruption
>
> Jean-Noël Avila (1):
> i18n: fix small typos
>
> Jeff Hostetler (2):
> t0051: test GIT_TRACE to a windows named pipe
> mingw: fix mingw_open_append to work with named pipes
>
> Jeff King (98):
> branch: make "-l" a synonym for "--list"
> Add delta-islands.{c,h}
> pack-objects: add delta-islands support
> repack: add delta-islands support
> t5320: tests for delta islands
> t/perf: factor boilerplate out of test_perf
> t/perf: factor out percent calculations
> t/perf: add infrastructure for measuring sizes
> t/perf: add perf tests for fetches from a bitmapped server
> pack-bitmap: save "have" bitmap from walk
> pack-objects: reuse on-disk deltas for thin "have" objects
> SubmittingPatches: mention doc-diff
> rev-list: make empty --stdin not an error
> trailer: use size_t for string offsets
> trailer: use size_t for iterating trailer list
> trailer: pass process_trailer_opts to trailer_info_get()
> interpret-trailers: tighten check for "---" patch boundary
> interpret-trailers: allow suppressing "---" divider
> pretty, ref-filter: format %(trailers) with no_divider option
> sequencer: ignore "---" divider when parsing trailers
> append_signoff: use size_t for string offsets
> coccinelle: use <...> for function exclusion
> introduce hasheq() and oideq()
> convert "oidcmp() == 0" to oideq()
> convert "hashcmp() == 0" to hasheq()
> convert "oidcmp() != 0" to "!oideq()"
> convert "hashcmp() != 0" to "!hasheq()"
> convert hashmap comparison functions to oideq()
> read-cache: use oideq() in ce_compare functions
> show_dirstat: simplify same-content check
> doc-diff: always use oids inside worktree
> test-delta: read input into a heap buffer
> t5303: test some corrupt deltas
> patch-delta: handle truncated copy parameters
> t5303: use printf to generate delta bases
> doc/git-branch: remove obsolete "-l" references
> bitmap_has_sha1_in_uninteresting(): drop BUG check
> t5310: test delta reuse with bitmaps
> traverse_bitmap_commit_list(): don't free result
> pack-bitmap: drop "loaded" flag
> reopen_tempfile(): truncate opened file
> doc-diff: force worktree add
> config.mak.dev: add -Wformat-security
> pack-objects: handle island check for "external" delta base
> receive-pack: update comment with check_everything_connected
> submodule--helper: use "--" to signal end of clone options
> submodule-config: ban submodule urls that start with dash
> submodule-config: ban submodule paths that start with a dash
> fsck: detect submodule urls starting with dash
> fsck: detect submodule paths starting with dash
> more oideq/hasheq conversions
> transport: drop refnames from for_each_alternate_ref
> test-tool: show tool list on error
> config.mak.dev: enable -Wunused-function
> run-command: mark path lookup errors with ENOENT
> t5410: use longer path for sample script
> upload-pack: fix broken if/else chain in config callback
> t1450: check large blob in trailing-garbage test
> check_stream_sha1(): handle input underflow
> cat-file: handle streaming failures consistently
> ls-remote: do not send ref prefixes for patterns
> ls-remote: pass heads/tags prefixes to transport
> read_istream_pack_non_delta(): document input handling
> xdiff: provide a separate emit callback for hunks
> xdiff-interface: provide a separate consume callback for hunks
> rev-list: handle flags for --indexed-objects
> approxidate: handle pending number for "specials"
> pathspec: handle non-terminated strings with :(attr)
> diff: avoid generating unused hunk header lines
> diff: discard hunk headers for patch-ids earlier
> diff: use hunk callback for word-diff
> combine-diff: use an xdiff hunk callback
> diff: convert --check to use a hunk callback
> range-diff: use a hunk callback
> xdiff-interface: drop parse_hunk_header()
> apply: mark include/exclude options as NONEG
> am: handle --no-patch-format option
> ls-files: mark exclude options as NONEG
> pack-objects: mark index-version option as NONEG
> cat-file: mark batch options with NONEG
> status: mark --find-renames option with NONEG
> format-patch: mark "--no-numbered" option with NONEG
> show-branch: mark --reflog option as NONEG
> tag: mark "--message" option with NONEG
> cat-file: report an error on multiple --batch options
> apply: return -1 from option callback instead of calling exit(1)
> parse-options: drop OPT_DATE()
> assert NOARG/NONEG behavior of parse-options callbacks
> midx: double-check large object write loop
> merge: extract verify_merge_signature() helper
> merge: handle --verify-signatures for unborn branch
> pull: handle --verify-signatures for unborn branch
> approxidate: fix NULL dereference in date_time()
> bundle: dup() output descriptor closer to point-of-use
> pack-objects: fix tree_depth and layer invariants
> pack-objects: zero-initialize tree_depth/layer arrays
> pack-objects: fix off-by-one in delta-island tree-depth computation
> t5562: fix perl path
>
> Johannes Schindelin (64):
> rebase -i --autosquash: demonstrate a problem skipping the last squash
> rebase -i: be careful to wrap up fixup/squash chains
> compat/poll: prepare for targeting Windows Vista
> mingw: set _WIN32_WINNT explicitly for Git for Windows
> mingw: bump the minimum Windows version to Vista
> builtin rebase: prepare for builtin rebase -i
> rebase -i: clarify what happens on a failed `exec`
> rebase -i: introduce the 'break' command
> getpwuid(mingw): initialize the structure only once
> getpwuid(mingw): provide a better default for the user name
> mingw: use domain information for default email
> http: add support for selecting SSL backends at runtime
> pack-objects: fix typo 'detla' -> 'delta'
> pack-objects (mingw): demonstrate a segmentation fault with large deltas
> pack-objects (mingw): initialize `packing_data` mutex in the correct spot
> rebase (autostash): avoid duplicate call to state_dir_path()
> rebase (autostash): store the full OID in <state-dir>/autostash
> rebase (autostash): use an explicit OID to apply the stash
> mingw: factor out code to set stat() data
> rebase --autostash: demonstrate a problem with dirty submodules
> rebase --autostash: fix issue with dirty submodules
> mingw: load system libraries the recommended way
> mingw: ensure `getcwd()` reports the correct case
> repack: point out a bug handling stale shallow info
> shallow: offer to prune only non-existing entries
> repack -ad: prune the list of shallow commits
> http: when using Secure Channel, ignore sslCAInfo by default
> t7800: fix quoting
> mingw: reencode environment variables on the fly (UTF-16 <-> UTF-8)
> config: rename `dummy` parameter to `cb` in git_default_config()
> config: allow for platform-specific core.* config settings
> config: move Windows-specific config settings into compat/mingw.c
> mingw: unset PERL5LIB by default
> mingw: fix isatty() after dup2()
> t3404: decouple some test cases from outcomes of previous test cases
> t3418: decouple test cases from a previous `rebase -p` test case
> tests: optionally skip `git rebase -p` tests
> Windows: force-recompile git.res for differing architectures
> built-in rebase: demonstrate regression with --autostash
> built-in rebase --autostash: leave the current branch alone if possible
> Update .mailmap
> rebase -r: demonstrate bug with conflicting merges
> rebase -r: do not write MERGE_HEAD unless needed
> rebase -i: include MERGE_HEAD into files to clean up
> built-in rebase --skip/--abort: clean up stale .git/<name> files
> status: rebase and merge can be in progress at the same time
> apply --recount: allow "no-op hunks"
> rebase: consolidate clean-up code before leaving reset_head()
> rebase: prepare reset_head() for more flags
> built-in rebase: reinstate `checkout -q` behavior where appropriate
> tests: fix GIT_TEST_INSTALLED's PATH to include t/helper/
> tests: respect GIT_TEST_INSTALLED when initializing repositories
> t/lib-gettext: test installed git-sh-i18n if GIT_TEST_INSTALLED is set
> mingw: use `CreateHardLink()` directly
> rebase: really just passthru the `git am` options
> rebase: validate -C<n> and --whitespace=<mode> parameters early
> config: report a bug if git_dir exists without commondir
> tests: do not require Git to be built when testing an installed Git
> tests: explicitly use `git.exe` on Windows
> mingw: replace an obsolete link with the superseding one
> legacy-rebase: backport -C<n> and --whitespace=<option> checks
> rebase: warn about the correct tree's OID
> rebase: fix GIT_REFLOG_ACTION regression
> rebase --stat: fix when rebasing to an unrelated history
>
> Johannes Sixt (3):
> diff: don't attempt to strip prefix from absolute Windows paths
> rebase -i: recognize short commands without arguments
> t3404-rebase-interactive: test abbreviated commands
>
> Jonathan Nieder (9):
> gc: improve handling of errors reading gc.log
> gc: exit with status 128 on failure
> gc: do not return error for prior errors in daemonized mode
> commit-reach: correct accidental #include of C file
> mailmap: consistently normalize brian m. carlson's name
> git doc: direct bug reporters to mailing list archive
> eoie: default to not writing EOIE section
> ieot: default to not writing IEOT section
> index: make index.threads=true enable ieot and eoie
>
> Jonathan Tan (15):
> fetch-object: unify fetch_object[s] functions
> fetch-object: set exact_oid when fetching
> connected: document connectivity in partial clones
> fetch: in partial clone, check presence of targets
> fetch-pack: avoid object flags if no_dependents
> fetch-pack: exclude blobs when lazy-fetching trees
> transport: allow skipping of ref listing
> transport: do not list refs if possible
> transport: list refs before fetch if necessary
> fetch: do not list refs if fetching only hashes
> cache-tree: skip some blob checks in partial clone
> upload-pack: make have_obj not global
> upload-pack: make want_obj not global
> upload-pack: clear flags before each v2 request
> fetch-pack: be more precise in parsing v2 response
>
> Josh Steadmon (4):
> fuzz: add basic fuzz testing target.
> fuzz: add fuzz testing for packfile indices.
> archive: initialize archivers earlier
> Makefile: use FUZZ_CXXFLAGS for linking fuzzers
>
> Joshua Watt (1):
> send-email: explicitly disable authentication
>
> Junio C Hamano (36):
> Revert "doc/Makefile: drop doc-diff worktree and temporary files on "make clean""
> Initial batch post 2.19
> Second batch post 2.19
> Git 2.14.5
> Git 2.15.3
> Git 2.16.5
> Git 2.17.2
> Git 2.18.1
> Git 2.19.1
> t0000: do not get self-test disrupted by environment warnings
> CodingGuidelines: document the API in *.h files
> Declare that the next one will be named 2.20
> Third batch for 2.20
> rebase: fix typoes in error messages
> Fourth batch for 2.20
> Revert "subtree: make install targets depend on build targets"
> Fifth batch for 2.20
> receive: denyCurrentBranch=updateinstead should not blindly update
> cocci: simplify "if (++u > 1)" to "if (u++)"
> fsck: s/++i > 1/i++/
> http: give curl version warnings consistently
> Sixth batch for 2.20
> Seventh batch for 2.20
> fetch: replace string-list used as a look-up table with a hashmap
> rebase: apply cocci patch
> Eighth batch for 2.20
> Ninth batch for 2.20
> Makefile: ease dynamic-gettext-poison transition
> Tenth batch for 2.20
> Git 2.20-rc0
> RelNotes: name the release properly
> Prepare for 2.20-rc1
> Git 2.19.2
> Git 2.20-rc1
> format-patch: do not let its diff-options affect --range-diff
> Git 2.20-rc2
>
> Karsten Blees (2):
> mingw: replace MSVCRT's fstat() with a Win32-based implementation
> mingw: implement nanosecond-precision file times
>
> Loo Rong Jie (1):
> win32: replace pthread_cond_*() with much simpler code
>
> Lucas De Marchi (1):
> range-diff: allow to diff files regardless of submodule config
>
> Luke Diamand (3):
> git-p4: do not fail in verbose mode for missing 'fileSize' key
> git-p4: unshelve into refs/remotes/p4-unshelved, not refs/remotes/p4/unshelved
> git-p4: fully support unshelving changelists
>
> Martin Ågren (11):
> Doc: use `--type=bool` instead of `--bool`
> git-config.txt: fix 'see: above' note
> git-commit-graph.txt: fix bullet lists
> git-commit-graph.txt: typeset more in monospace
> git-commit-graph.txt: refer to "*commit*-graph file"
> Doc: refer to the "commit-graph file" with dash
> t1400: drop debug `echo` to actually execute `test`
> builtin/commit-graph.c: UNLEAK variables
> sequencer: break out of loop explicitly
> git-reset.txt: render tables correctly under Asciidoctor
> git-reset.txt: render literal examples as monospace
>
> Matthew DeVore (19):
> list-objects: store common func args in struct
> list-objects: refactor to process_tree_contents
> list-objects: always parse trees gently
> t/README: reformat Do, Don't, Keep in mind lists
> Documentation: add shell guidelines
> tests: standardize pipe placement
> t/*: fix ordering of expected/observed arguments
> tests: don't swallow Git errors upstream of pipes
> t9109: don't swallow Git errors upstream of pipes
> tests: order arguments to git-rev-list properly
> rev-list: handle missing tree objects properly
> revision: mark non-user-given objects instead
> list-objects-filter: use BUG rather than die
> list-objects-filter-options: do not over-strbuf_init
> list-objects-filter: implement filter tree:0
> filter-trees: code clean-up of tests
> list-objects: support for skipping tree traversal
> Documentation/git-log.txt: do not show --exclude-promisor-objects
> exclude-promisor-objects: declare when option is allowed
>
> Max Kirillov (1):
> http-backend test: make empty CONTENT_LENGTH test more realistic
>
> Michael Witten (3):
> docs: typo: s/go/to/
> docs: graph: remove unnecessary `graph_update()' call
> docs: typo: s/isimilar/similar/
>
> Michał Górny (6):
> gpg-interface.c: detect and reject multiple signatures on commits
> gpg-interface.c: use flags to determine key/signer info presence
> gpg-interface.c: support getting key fingerprint via %GF format
> gpg-interface.c: obtain primary key fingerprint as well
> t/t7510-signed-commit.sh: Add %GP to custom format checks
> t/t7510-signed-commit.sh: add signing subkey to Eris Discordia key
>
> Mihir Mehta (1):
> doc: fix a typo and clarify a sentence
>
> Nguyễn Thái Ngọc Duy (170):
> clone: report duplicate entries on case-insensitive filesystems
> trace.h: support nested performance tracing
> unpack-trees: add performance tracing
> unpack-trees: optimize walking same trees with cache-tree
> unpack-trees: reduce malloc in cache-tree walk
> unpack-trees: reuse (still valid) cache-tree from src_index
> unpack-trees: add missing cache invalidation
> cache-tree: verify valid cache-tree in the test suite
> Document update for nd/unpack-trees-with-cache-tree
> bisect.c: make show_list() build again
> t/helper: keep test-tool command list sorted
> t/helper: merge test-dump-untracked-cache into test-tool
> t/helper: merge test-pkt-line into test-tool
> t/helper: merge test-parse-options into test-tool
> t/helper: merge test-dump-fsmonitor into test-tool
> Makefile: add a hint about TEST_BUILTINS_OBJS
> config.txt: follow camelCase naming
> config.txt: move fetch part out to a separate file
> config.txt: move format part out to a separate file
> config.txt: move gitcvs part out to a separate file
> config.txt: move gui part out to a separate file
> config.txt: move pull part out to a separate file
> config.txt: move push part out to a separate file
> config.txt: move receive part out to a separate file
> config.txt: move sendemail part out to a separate file
> config.txt: move sequence.editor out of "core" part
> config.txt: move submodule part out to a separate file
> archive.c: remove implicit dependency the_repository
> status: show progress bar if refreshing the index takes too long
> add: do not accept pathspec magic 'attr'
> completion: support "git fetch --multiple"
> read-cache.c: remove 'const' from index_has_changes()
> diff.c: reduce implicit dependency on the_index
> combine-diff.c: remove implicit dependency on the_index
> blame.c: rename "repo" argument to "r"
> diff.c: remove the_index dependency in textconv() functions
> grep.c: remove implicit dependency on the_index
> diff.c: remove implicit dependency on the_index
> read-cache.c: remove implicit dependency on the_index
> diff-lib.c: remove implicit dependency on the_index
> ll-merge.c: remove implicit dependency on the_index
> merge-blobs.c: remove implicit dependency on the_index
> merge.c: remove implicit dependency on the_index
> patch-ids.c: remove implicit dependency on the_index
> sha1-file.c: remove implicit dependency on the_index
> rerere.c: remove implicit dependency on the_index
> userdiff.c: remove implicit dependency on the_index
> line-range.c: remove implicit dependency on the_index
> submodule.c: remove implicit dependency on the_index
> tree-diff.c: remove implicit dependency on the_index
> ws.c: remove implicit dependency on the_index
> revision.c: remove implicit dependency on the_index
> revision.c: reduce implicit dependency the_repository
> read-cache.c: optimize reading index format v4
> config.txt: correct the note about uploadpack.packObjectsHook
> help -a: improve and make --verbose default
> refs.c: indent with tabs, not spaces
> Add a place for (not) sharing stuff between worktrees
> submodule.c: remove some of the_repository references
> completion: fix __gitcomp_builtin no longer consider extra options
> t1300: extract and use test_cmp_config()
> worktree: add per-worktree config files
> refs: new ref types to make per-worktree refs visible to all worktrees
> revision.c: correct a parameter name
> revision.c: better error reporting on ref from different worktrees
> fsck: check HEAD and reflog from other worktrees
> reflog expire: cover reflog from all worktrees
> Update makefile in preparation for Documentation/config/*.txt
> config.txt: move advice.* to a separate file
> config.txt: move core.* to a separate file
> config.txt: move add.* to a separate file
> config.txt: move alias.* to a separate file
> config.txt: move am.* to a separate file
> config.txt: move apply.* to a separate file
> config.txt: move blame.* to a separate file
> config.txt: move branch.* to a separate file
> config.txt: move browser.* to a separate file
> config.txt: move checkout.* to a separate file
> config.txt: move clean.* to a separate file
> config.txt: move color.* to a separate file
> config.txt: move column.* to a separate file
> config.txt: move commit.* to a separate file
> config.txt: move credential.* to a separate file
> config.txt: move completion.* to a separate file
> config.txt: move diff-config.txt to config/
> config.txt: move difftool.* to a separate file
> config.txt: move fastimport.* to a separate file
> config.txt: move fetch-config.txt to config/
> config.txt: move filter.* to a separate file
> config.txt: move format-config.txt to config/
> config.txt: move fmt-merge-msg-config.txt to config/
> config.txt: move fsck.* to a separate file
> config.txt: move gc.* to a separate file
> config.txt: move gitcvs-config.txt to config/
> config.txt: move gitweb.* to a separate file
> config.txt: move grep.* to a separate file
> config.txt: move gpg.* to a separate file
> config.txt: move gui-config.txt to config/
> config.txt: move guitool.* to a separate file
> config.txt: move help.* to a separate file
> config.txt: move ssh.* to a separate file
> config.txt: move http.* to a separate file
> config.txt: move i18n.* to a separate file
> git-imap-send.txt: move imap.* to a separate file
> config.txt: move index.* to a separate file
> config.txt: move init.* to a separate file
> config.txt: move instaweb.* to a separate file
> config.txt: move interactive.* to a separate file
> config.txt: move log.* to a separate file
> config.txt: move mailinfo.* to a separate file
> config.txt: move mailmap.* to a separate file
> config.txt: move man.* to a separate file
> config.txt: move merge-config.txt to config/
> config.txt: move mergetool.* to a separate file
> config.txt: move notes.* to a separate file
> config.txt: move pack.* to a separate file
> config.txt: move pager.* to a separate file
> config.txt: move pretty.* to a separate file
> config.txt: move protocol.* to a separate file
> config.txt: move pull-config.txt to config/
> config.txt: move push-config.txt to config/
> config.txt: move rebase-config.txt to config/
> config.txt: move receive-config.txt to config/
> config.txt: move remote.* to a separate file
> config.txt: move remotes.* to a separate file
> config.txt: move repack.* to a separate file
> config.txt: move rerere.* to a separate file
> config.txt: move reset.* to a separate file
> config.txt: move sendemail-config.txt to config/
> config.txt: move sequencer.* to a separate file
> config.txt: move showBranch.* to a separate file
> config.txt: move splitIndex.* to a separate file
> config.txt: move status.* to a separate file
> config.txt: move stash.* to a separate file
> config.txt: move submodule.* to a separate file
> config.txt: move tag.* to a separate file
> config.txt: move transfer.* to a separate file
> config.txt: move uploadarchive.* to a separate file
> config.txt: move uploadpack.* to a separate file
> config.txt: move url.* to a separate file
> config.txt: move user.* to a separate file
> config.txt: move versionsort.* to a separate file
> config.txt: move web.* to a separate file
> config.txt: move worktree.* to a separate file
> config.txt: remove config/dummy.txt
> thread-utils: macros to unconditionally compile pthreads API
> wildmatch: change behavior of "foo**bar" in WM_PATHNAME mode
> git-worktree.txt: correct linkgit command name
> sequencer.c: remove a stray semicolon
> tree-walk.c: fix overoptimistic inclusion in :(exclude) matching
> run-command.h: include thread-utils.h instead of pthread.h
> send-pack.c: move async's #ifdef NO_PTHREADS back to run-command.c
> index-pack: remove #ifdef NO_PTHREADS
> name-hash.c: remove #ifdef NO_PTHREADS
> attr.c: remove #ifdef NO_PTHREADS
> grep: remove #ifdef NO_PTHREADS
> grep: clean up num_threads handling
> preload-index.c: remove #ifdef NO_PTHREADS
> pack-objects: remove #ifdef NO_PTHREADS
> read-cache.c: remove #ifdef NO_PTHREADS
> read-cache.c: reduce branching based on HAVE_THREADS
> read-cache.c: initialize copy_len to shut up gcc 8
> Clean up pthread_create() error handling
> completion: use __gitcomp_builtin for format-patch
> build: fix broken command-list.h generation with core.autocrlf
> format-patch: respect --stat in cover letter's diffstat
> doc: move extensions.worktreeConfig to the right place
> clone: fix colliding file detection on APFS
> files-backend.c: fix build error on Solaris
> transport-helper.c: do not translate a string twice
>
> Nickolai Belakovski (2):
> worktree: update documentation for lock_reason and lock_reason_valid
> worktree: rename is_worktree_locked to worktree_lock_reason
>
> Noam Postavsky (1):
> log: fix coloring of certain octopus merge shapes
>
> Olga Telezhnaya (3):
> ref-filter: free memory from used_atom
> ls-remote: release memory instead of UNLEAK
> ref-filter: free item->value and item->value->s
>
> Phillip Wood (11):
> diff: fix --color-moved-ws=allow-indentation-change
> diff --color-moved-ws: fix double free crash
> diff --color-moved-ws: fix out of bounds string access
> diff --color-moved-ws: fix a memory leak
> diff --color-moved-ws: fix another memory leak
> diff --color-moved: fix a memory leak
> am: don't die in read_author_script()
> am: improve author-script error reporting
> am: rename read_author_script()
> add read_author_script() to libgit
> sequencer: use read_author_script()
>
> Pratik Karki (46):
> rebase: start implementing it as a builtin
> rebase: refactor common shell functions into their own file
> builtin/rebase: support running "git rebase <upstream>"
> builtin rebase: support --onto
> builtin rebase: support `git rebase --onto A...B`
> builtin rebase: handle the pre-rebase hook and --no-verify
> builtin rebase: support --quiet
> builtin rebase: support the `verbose` and `diffstat` options
> builtin rebase: require a clean worktree
> builtin rebase: try to fast forward when possible
> builtin rebase: support --force-rebase
> builtin rebase: start a new rebase only if none is in progress
> builtin rebase: only store fully-qualified refs in `options.head_name`
> builtin rebase: support `git rebase <upstream> <switch-to>`
> builtin rebase: support --continue
> builtin rebase: support --skip
> builtin rebase: support --abort
> builtin rebase: support --quit
> builtin rebase: support --edit-todo and --show-current-patch
> builtin rebase: actions require a rebase in progress
> builtin rebase: stop if `git am` is in progress
> builtin rebase: allow selecting the rebase "backend"
> builtin rebase: support --signoff
> builtin rebase: support --rerere-autoupdate
> builtin rebase: support --committer-date-is-author-date
> builtin rebase: support `ignore-whitespace` option
> builtin rebase: support `ignore-date` option
> builtin rebase: support `keep-empty` option
> builtin rebase: support `--autosquash`
> builtin rebase: support `--gpg-sign` option
> builtin rebase: support `-C` and `--whitespace=<type>`
> builtin rebase: support `--autostash` option
> builtin rebase: support `--exec`
> builtin rebase: support `--allow-empty-message` option
> builtin rebase: support --rebase-merges[=[no-]rebase-cousins]
> merge-base --fork-point: extract libified function
> builtin rebase: support `fork-point` option
> builtin rebase: add support for custom merge strategies
> builtin rebase: support --root
> builtin rebase: optionally auto-detect the upstream
> builtin rebase: optionally pass custom reflogs to reset_head()
> builtin rebase: fast-forward to onto if it is a proper descendant
> builtin rebase: show progress when connected to a terminal
> builtin rebase: use no-op editor when interactive is "implied"
> builtin rebase: error out on incompatible option/mode combinations
> rebase: default to using the builtin rebase
>
> Rafael Ascensão (2):
> refs: show --exclude failure with --branches/tags/remotes=glob
> refs: fix some exclude patterns being ignored
>
> Ralf Thielow (2):
> git-rebase.sh: fix typos in error messages
> builtin/rebase.c: remove superfluous space in messages
>
> Ramsay Jones (12):
> Makefile: add a hdr-check target
> json-writer.h: add missing include (hdr-check)
> ewah/ewok_rlw.h: add missing include (hdr-check)
> refs/ref-cache.h: add missing declarations (hdr-check)
> refs/packed-backend.h: add missing declaration (hdr-check)
> refs/refs-internal.h: add missing declarations (hdr-check)
> midx.h: add missing forward declarations (hdr-check)
> delta-islands.h: add missing forward declarations (hdr-check)
> headers: normalize the spelling of some header guards
> fetch-object.h: add missing declaration (hdr-check)
> ewok_rlw.h: add missing 'inline' to function definition
> commit-reach.h: add missing declarations (hdr-check)
>
> Rasmus Villemoes (6):
> help: redirect to aliased commands for "git cmd --help"
> git.c: handle_alias: prepend alias info when first argument is -h
> git-help.txt: document "git help cmd" vs "git cmd --help" for aliases
> Documentation/git-send-email.txt: style fixes
> send-email: only consider lines containing @ or <> for automatic Cc'ing
> send-email: also pick up cc addresses from -by trailers
>
> René Scharfe (12):
> mailinfo: support format=flowed
> fsck: add a performance test for skipList
> fsck: use strbuf_getline() to read skiplist file
> fsck: use oidset instead of oid_array for skipList
> sequencer: use return value of oidset_insert()
> grep: add -r/--[no-]recursive
> fetch-pack: factor out is_unmatched_ref()
> fetch-pack: load tip_oids eagerly iff needed
> khash: factor out kh_release_*
> oidset: use khash
> oidset: uninline oidset_init()
> commit-reach: fix cast in compare_commits_by_gen()
>
> Roger Strain (1):
> subtree: performance improvement for finding unexpected parent commits
>
> SZEDER Gábor (20):
> t1404: increase core.packedRefsTimeout to avoid occasional test failure
> Documentation/git.txt: clarify that GIT_TRACE=/path appends
> t3701-add-interactive: tighten the check of trace output
> t1700-split-index: drop unnecessary 'grep'
> t0090: disable GIT_TEST_SPLIT_INDEX for the test checking split index
> t1700-split-index: document why FSMONITOR is disabled in this test script
> split-index: add tests to demonstrate the racy split index problem
> t1700-split-index: date back files to avoid racy situations
> split-index: count the number of deleted entries
> split-index: don't compare cached data of entries already marked for split index
> split-index: smudge and add racily clean cache entries to split index
> split-index: BUG() when cache entry refers to non-existing shared entry
> object_id.cocci: match only expressions of type 'struct object_id'
> test-lib: introduce the '-V' short option for '--verbose-log'
> travis-ci: install packages in 'ci/install-dependencies.sh'
> coccicheck: introduce 'pending' semantic patches
> ref-filter: don't look for objects when outside of a repository
> tests: send "bug in the test script" errors to the script's stderr
> test-lib-functions: make 'test_cmp_rev' more informative on failure
> t/lib-git-daemon: fix signal checking
>
> Sam McKelvie (1):
> rev-parse: --show-superproject-working-tree should work during a merge
>
> Saulius Gurklys (1):
> doc: fix small typo in git show-branch
>
> Sebastian Staudt (1):
> travis-ci: no longer use containers
>
> Shulhan (1):
> builtin/remote: quote remote name on error to display empty name
>
> Stefan Beller (25):
> git-submodule.sh: align error reporting for update mode to use path
> git-submodule.sh: rename unused variables
> builtin/submodule--helper: factor out submodule updating
> builtin/submodule--helper: store update_clone information in a struct
> builtin/submodule--helper: factor out method to update a single submodule
> submodule--helper: replace connect-gitdir-workingtree by ensure-core-worktree
> submodule--helper: introduce new update-module-mode helper
> test_decode_color: understand FAINT and ITALIC
> t3206: add color test for range-diff --dual-color
> diff.c: simplify caller of emit_line_0
> diff.c: reorder arguments for emit_line_ws_markup
> diff.c: add set_sign to emit_line_0
> diff: use emit_line_0 once per line
> diff.c: omit check for line prefix in emit_line_0
> diff.c: rewrite emit_line_0 more understandably
> diff.c: add --output-indicator-{new, old, context}
> range-diff: make use of different output indicators
> range-diff: indent special lines as context
> refs.c: migrate internal ref iteration to pass thru repository argument
> refs.c: upgrade for_each_replace_ref to be a each_repo_ref_fn callback
> string-list: remove unused function print_string_list
> strbuf.h: format according to coding guidelines
> diff.c: pass sign_index to emit_line_ws_markup
> submodule helper: convert relative URL to absolute URL if needed
> builtin/submodule--helper: remove debugging leftover tracing
>
> Stephen P. Smith (10):
> wt-status.c: move has_unmerged earlier in the file
> wt-status: rename commitable to committable
> t7501: add test of "commit --dry-run --short"
> wt-status.c: set the committable flag in the collect phase
> roll wt_status_state into wt_status and populate in the collect phase
> t2000: rename and combine checkout clash tests
> t7509: cleanup description and filename
> t7502: rename commit test script to comply with naming convention
> t7500: rename commit tests script to comply with naming convention
> t7501: rename commit test to comply with naming convention
>
> Steve Hoelzer (1):
> poll: use GetTickCount64() to avoid wrap-around issues
>
> Steven Fernandez (1):
> git-completion.bash: add completion for stash list
>
> Strain, Roger L (4):
> subtree: refactor split of a commit into standalone method
> subtree: make --ignore-joins pay attention to adds
> subtree: use commits before rejoins for splits
> subtree: improve decision on merges kept in split
>
> Sven Strickroth (1):
> msvc: directly use MS version (_stricmp) of strcasecmp
>
> Tao Qingyun (3):
> refs: docstring typo
> builtin/branch.c: remove useless branch_get
> branch: trivial style fix
>
> Taylor Blau (4):
> transport.c: extract 'fill_alternate_refs_command'
> transport.c: introduce core.alternateRefsCommand
> transport.c: introduce core.alternateRefsPrefixes
> Documentation/config.txt: fix typo in core.alternateRefsCommand
>
> Thomas Gummerer (17):
> rerere: unify error messages when read_cache fails
> rerere: lowercase error messages
> rerere: wrap paths in output in sq
> rerere: mark strings for translation
> rerere: add documentation for conflict normalization
> rerere: fix crash with files rerere can't handle
> rerere: only return whether a path has conflicts or not
> rerere: factor out handle_conflict function
> rerere: return strbuf from handle path
> rerere: teach rerere to handle nested conflicts
> rerere: recalculate conflict ID when unresolved conflict is committed
> rerere: mention caveat about unmatched conflict markers
> rerere: add note about files with existing conflict markers
> .gitattributes: add conflict-marker-size for relevant files
> linear-assignment: fix potential out of bounds memory access
> t5551: move setup code inside test_expect blocks
> t5551: compare sorted cookies files
>
> Tim Schumacher (4):
> Documentation/Makefile: make manpage-base-url.xsl generation quieter
> alias: add support for aliases of an alias
> alias: show the call history when an alias is looping
> t0014: introduce an alias testing suite
>
> Todd Zullinger (1):
> Documentation: build technical/multi-pack-index
>
> Torsten Bögershausen (5):
> Make git_check_attr() a void function
> path.c: char is not (always) signed
> Upcast size_t variables to uintmax_t when printing
> remote-curl.c: xcurl_off_t is not portable (on 32 bit platfoms)
> t5601-99: Enable colliding file detection for MINGW
>
> Uwe Kleine-König (1):
> howto/using-merge-subtree: mention --allow-unrelated-histories
>
> brian m. carlson (26):
> t: add test functions to translate hash-related values
> t0000: use hash translation table
> t0000: update tests for SHA-256
> t0002: abstract away SHA-1 specific constants
> t0064: make hash size independent
> t1006: make hash size independent
> t1400: switch hard-coded object ID to variable
> t1405: make hash size independent
> t1406: make hash-size independent
> t1407: make hash size independent
> editorconfig: provide editor settings for Git developers
> editorconfig: indicate settings should be kept in sync
> pack-bitmap-write: use GIT_MAX_RAWSZ for allocation
> builtin/repack: replace hard-coded constants
> builtin/mktree: remove hard-coded constant
> builtin/fetch-pack: remove constants with parse_oid_hex
> pack-revindex: express constants in terms of the_hash_algo
> packfile: express constants in terms of the_hash_algo
> refs/packed-backend: express constants using the_hash_algo
> upload-pack: express constants in terms of the_hash_algo
> transport: use parse_oid_hex instead of a constant
> tag: express constant in terms of the_hash_algo
> apply: replace hard-coded constants
> apply: rename new_sha1_prefix and old_sha1_prefix
> submodule: make zero-oid comparison hash function agnostic
> rerere: convert to use the_hash_algo
>
> Ævar Arnfjörð Bjarmason (35):
> fetch: change "branch" to "reference" in --force -h output
> push tests: make use of unused $1 in test description
> push tests: use spaces in interpolated string
> fetch tests: add a test for clobbering tag behavior
> push doc: remove confusing mention of remote merger
> push doc: move mention of "tag <tag>" later in the prose
> push doc: correct lies about how push refspecs work
> fetch: document local ref updates with/without --force
> fetch: stop clobbering existing tags without --force
> fsck tests: setup of bogus commit object
> fsck tests: add a test for no skipList input
> fsck: document and test sorted skipList input
> fsck: document and test commented & empty line skipList input
> fsck: document that skipList input must be unabbreviated
> fsck: add a performance test
> fsck: support comments & empty lines in skipList
> commit-graph write: add progress output
> commit-graph verify: add progress output
> config doc: add missing list separator for checkout.optimizeNewBranch
> push doc: add spacing between two words
> fetch doc: correct grammar in --force docs
> gc: fix regression in 7b0f229222 impacting --quiet
> gc doc: mention the commit-graph in the intro
> pack-objects test: modernize style
> pack-objects tests: don't leave test .git corrupt at end
> index-pack tests: don't leave test repo dirty at end
> i18n: make GETTEXT_POISON a runtime option
> range-diff doc: add a section about output stability
> range-diff: fix regression in passing along diff options
> range-diff: make diff option behavior (e.g. --stat) consistent
> push: change needlessly ambiguous example in error
> rebase doc: document rebase.useBuiltin
> tests: add a special setup where rebase.useBuiltin is off
> read-cache: make the split index obey umask settings
> advice: don't pointlessly suggest --convert-graft-file
>
> Đoàn Trần Công Danh (1):
> git-compat-util: prefer poll.h to sys/poll.h
>
> --
> You received this message because you are subscribed to the Google Groups "git-packagers" group.
> To unsubscribe from this group and stop receiving emails from it, send an email to git-packagers+unsubscribe@googlegroups.com.
> To view this discussion on the web visit https://groups.google.com/d/msgid/git-packagers/xmqq36rhjnts.fsf%40gitster-ct.c.googlers.com.
> For more options, visit https://groups.google.com/d/optout.
>
^ permalink raw reply [relevance 0%]
* [ANNOUNCE] Git v2.20.0-rc2
@ 2018-12-01 14:58 3% Junio C Hamano
2018-12-03 20:45 0% ` Johannes Schindelin
0 siblings, 1 reply; 71+ results
From: Junio C Hamano @ 2018-12-01 14:58 UTC (permalink / raw)
To: git; +Cc: Linux Kernel, git-packagers
A release candidate Git v2.20.0-rc2 is now available for testing
at the usual places. It is comprised of 934 non-merge commits
since v2.19.0, contributed by 76 people, 25 of which are new faces.
The tarballs are found at:
https://www.kernel.org/pub/software/scm/git/testing/
The following public repositories all have a copy of the
'v2.20.0-rc2' tag and the 'master' branch that the tag points at:
url = https://kernel.googlesource.com/pub/scm/git/git
url = git://repo.or.cz/alt-git.git
url = https://github.com/gitster/git
New contributors whose contributions weren't in v2.19.0 are as follows.
Welcome to the Git development community!
Aaron Lindsay, Alexander Pyhalov, Anton Serbulov, Brendan
Forster, Carlo Marcelo Arenas Belón, Daniels Umanovskis, David
Zych, Đoàn Trần Công Danh, Frederick Eaton, Greg Hurrell,
James Knight, Jann Horn, Joshua Watt, Loo Rong Jie, Lucas
De Marchi, Matthew DeVore, Mihir Mehta, Nickolai Belakovski,
Roger Strain, Sam McKelvie, Saulius Gurklys, Shulhan, Steven
Fernandez, Strain, Roger L, and Tim Schumacher.
Returning contributors who helped this release are as follows.
Thanks for your continued support.
Ævar Arnfjörð Bjarmason, Alban Gruin, Andreas Gruenbacher,
Andreas Heiduk, Antonio Ospite, Ben Peart, Brandon Williams,
brian m. carlson, Christian Couder, Christian Hesse, Denton Liu,
Derrick Stolee, Elijah Newren, Eric Sunshine, Jean-Noël Avila,
Jeff Hostetler, Jeff King, Johannes Schindelin, Johannes Sixt,
Jonathan Nieder, Jonathan Tan, Josh Steadmon, Junio C Hamano,
Karsten Blees, Luke Diamand, Martin Ågren, Max Kirillov,
Michael Witten, Michał Górny, Nguyễn Thái Ngọc Duy, Noam
Postavsky, Olga Telezhnaya, Phillip Wood, Pratik Karki, Rafael
Ascensão, Ralf Thielow, Ramsay Jones, Rasmus Villemoes, René
Scharfe, Sebastian Staudt, Stefan Beller, Stephen P. Smith, Steve
Hoelzer, Sven Strickroth, SZEDER Gábor, Tao Qingyun, Taylor
Blau, Thomas Gummerer, Todd Zullinger, Torsten Bögershausen,
and Uwe Kleine-König.
----------------------------------------------------------------
Git 2.20 Release Notes (draft)
==============================
Backward Compatibility Notes
----------------------------
* "git branch -l <foo>" used to be a way to ask a reflog to be
created while creating a new branch, but that is no longer the
case. It is a short-hand for "git branch --list <foo>" now.
* "git push" into refs/tags/* hierarchy is rejected without getting
forced, but "git fetch" (misguidedly) used the "fast forwarding"
rule used for the refs/heads/* hierarchy; this has been corrected,
which means some fetches of tags that did not fail with older
version of Git will fail without "--force" with this version.
* "git help -a" now gives verbose output (same as "git help -av").
Those who want the old output may say "git help --no-verbose -a"..
* "git cpn --help", when "cpn" is an alias to, say, "cherry-pick -n",
reported only the alias expansion of "cpn" in earlier versions of
Git. It now runs "git cherry-pick --help" to show the manual page
of the command, while sending the alias expansion to the standard
error stream.
* "git send-email" learned to grab address-looking string on any
trailer whose name ends with "-by". This is a backward-incompatible
change. Adding "--suppress-cc=misc-by" on the command line, or
setting sendemail.suppresscc configuration variable to "misc-by",
can be used to disable this behaviour.
Updates since v2.19
-------------------
UI, Workflows & Features
* Running "git clone" against a project that contain two files with
pathnames that differ only in cases on a case insensitive
filesystem would result in one of the files lost because the
underlying filesystem is incapable of holding both at the same
time. An attempt is made to detect such a case and warn.
* "git checkout -b newbranch [HEAD]" should not have to do as much as
checking out a commit different from HEAD. An attempt is made to
optimize this special case.
* "git rev-list --stdin </dev/null" used to be an error; it now shows
no output without an error. "git rev-list --stdin --default HEAD"
still falls back to the given default when nothing is given on the
standard input.
* Lift code from GitHub to restrict delta computation so that an
object that exists in one fork is not made into a delta against
another object that does not appear in the same forked repository.
* "git format-patch" learned new "--interdiff" and "--range-diff"
options to explain the difference between this version and the
previous attempt in the cover letter (or after the three-dashes as
a comment).
* "git mailinfo" used in "git am" learned to make a best-effort
recovery of a patch corrupted by MUA that sends text/plain with
format=flawed option.
(merge 3aa4d81f88 rs/mailinfo-format-flowed later to maint).
* The rules used by "git push" and "git fetch" to determine if a ref
can or cannot be updated were inconsistent; specifically, fetching
to update existing tags were allowed even though tags are supposed
to be unmoving anchoring points. "git fetch" was taught to forbid
updates to existing tags without the "--force" option.
* "git multi-pack-index" learned to detect corruption in the .midx
file it uses, and this feature has been integrated into "git fsck".
* Generation of (experimental) commit-graph files have so far been
fairly silent, even though it takes noticeable amount of time in a
meaningfully large repository. The users will now see progress
output.
* The minimum version of Windows supported by Windows port of Git is
now set to Vista.
* The completion script (in contrib/) learned to complete a handful of
options "git stash list" command takes.
* The completion script (in contrib/) learned that "git fetch
--multiple" only takes remote names as arguments and no refspecs.
* "git status" learns to show progress bar when refreshing the index
takes a long time.
(merge ae9af12287 nd/status-refresh-progress later to maint).
* "git help -a" and "git help -av" give different pieces of
information, and generally the "verbose" version is more friendly
to the new users. "git help -a" by default now uses the more
verbose output (with "--no-verbose", you can go back to the
original). Also "git help -av" now lists aliases and external
commands, which it did not used to.
* Unlike "grep", "git grep" by default recurses to the whole tree.
The command learned "git grep --recursive" option, so that "git
grep --no-recursive" can serve as a synonym to setting the
max-depth to 0.
* When pushing into a repository that borrows its objects from an
alternate object store, "git receive-pack" that responds to the
push request on the other side lists the tips of refs in the
alternate to reduce the amount of objects transferred. This
sometimes is detrimental when the number of refs in the alternate
is absurdly large, in which case the bandwidth saved in potentially
fewer objects transferred is wasted in excessively large ref
advertisement. The alternate refs that are advertised are now
configurable with a pair of configuration variables.
* "git cmd --help" when "cmd" is aliased used to only say "cmd is
aliased to ...". Now it shows that to the standard error stream
and runs "git $cmd --help" where $cmd is the first word of the
alias expansion.
* The documentation of "git gc" has been updated to mention that it
is no longer limited to "pruning away crufts" but also updates
ancillary files like commit-graph as a part of repository
optimization.
* "git p4 unshelve" improvements.
* The logic to select the default user name and e-mail on Windows has
been improved.
(merge 501afcb8b0 js/mingw-default-ident later to maint).
* The "rev-list --filter" feature learned to exclude all trees via
"tree:0" filter.
* "git send-email" learned to grab address-looking string on any
trailer whose name ends with "-by"; --suppress-cc=misc-by on the
command line, or setting sendemail.suppresscc configuration
variable to "misc-by", can be used to disable this behaviour.
* Developer builds now uses -Wunused-function compilation option.
* One of our CI tests to run with "unusual/experimental/random"
settings now also uses commit-graph and midx.
* "git mergetool" learned to take the "--[no-]gui" option, just like
"git difftool" does.
* "git rebase -i" learned a new insn, 'break', that the user can
insert in the to-do list. Upon hitting it, the command returns
control back to the user.
* New "--pretty=format:" placeholders %GF and %GP that show the GPG
key fingerprints have been invented.
* On platforms with recent cURL library, http.sslBackend configuration
variable can be used to choose a different SSL backend at runtime.
The Windows port uses this mechanism to switch between OpenSSL and
Secure Channel while talking over the HTTPS protocol.
* "git send-email" learned to disable SMTP authentication via the
"--smtp-auth=none" option, even when the smtp username is given
(which turns the authentication on by default).
* A fourth class of configuration files (in addition to the
traditional "system wide", "per user in the $HOME directory" and
"per repository in the $GIT_DIR/config") has been introduced so
that different worktrees that share the same repository (hence the
same $GIT_DIR/config file) can use different customization.
* A pattern with '**' that does not have a slash on either side used
to be an invalid one, but the code now treats such double-asterisks
the same way as two normal asterisks that happen to be adjacent to
each other.
(merge e5bbe09e88 nd/wildmatch-double-asterisk later to maint).
* The "--no-patch" option, which can be used to get a high-level
overview without the actual line-by-line patch difference shown, of
the "range-diff" command was earlier broken, which has been
corrected.
* The recently merged "rebase in C" has an escape hatch to use the
scripted version when necessary, but it hasn't been documented,
which has been corrected.
Performance, Internal Implementation, Development Support etc.
* When there are too many packfiles in a repository (which is not
recommended), looking up an object in these would require
consulting many pack .idx files; a new mechanism to have a single
file that consolidates all of these .idx files is introduced.
* "git submodule update" is getting rewritten piece-by-piece into C.
* The code for computing history reachability has been shuffled,
obtained a bunch of new tests to cover them, and then being
improved.
* The unpack_trees() API used in checking out a branch and merging
walks one or more trees along with the index. When the cache-tree
in the index tells us that we are walking a tree whose flattened
contents is known (i.e. matches a span in the index), as linearly
scanning a span in the index is much more efficient than having to
open tree objects recursively and listing their entries, the walk
can be optimized, which has been done.
* When creating a thin pack, which allows objects to be made into a
delta against another object that is not in the resulting pack but
is known to be present on the receiving end, the code learned to
take advantage of the reachability bitmap; this allows the server
to send a delta against a base beyond the "boundary" commit.
* spatch transformation to replace boolean uses of !hashcmp() to
newly introduced oideq() is added, and applied, to regain
performance lost due to support of multiple hash algorithms.
* Fix a bug in which the same path could be registered under multiple
worktree entries if the path was missing (for instance, was removed
manually). Also, as a convenience, expand the number of cases in
which --force is applicable.
* Split Documentation/config.txt for easier maintenance.
(merge 6014363f0b nd/config-split later to maint).
* Test helper binaries clean-up.
(merge c9a1f4161f nd/test-tool later to maint).
* Various tests have been updated to make it easier to swap the
hash function used for object identification.
(merge ae0c89d41b bc/hash-independent-tests later to maint).
* Update fsck.skipList implementation and documentation.
(merge 371a655074 ab/fsck-skiplist later to maint).
* An alias that expands to another alias has so far been forbidden,
but now it is allowed to create such an alias.
* Various test scripts have been updated for style and also correct
handling of exit status of various commands.
* "gc --auto" ended up calling exit(-1) upon error, which has been
corrected to use exit(1). Also the error reporting behaviour when
daemonized has been updated to exit with zero status when stopping
due to a previously discovered error (which implies there is no
point running gc to improve the situation); we used to exit with
failure in such a case.
* Various codepaths in the core-ish part learned to work on an
arbitrary in-core index structure, not necessarily the default
instance "the_index".
(merge b3c7eef9b0 nd/the-index later to maint).
* Code clean-up in the internal machinery used by "git status" and
"git commit --dry-run".
(merge 73ba5d78b4 ss/wt-status-committable later to maint).
* Some environment variables that control the runtime options of Git
used during tests are getting renamed for consistency.
(merge 4231d1ba99 bp/rename-test-env-var later to maint).
* A pair of new extensions to the index file have been introduced.
They allow the index file to be read in parallel for performance.
* The oidset API was built on top of the oidmap API which in turn is
on the hashmap API. Replace the implementation to build on top of
the khash API and gain performance.
* Over some transports, fetching objects with an exact commit object
name can be done without first seeing the ref advertisements. The
code has been optimized to exploit this.
* In a partial clone that will lazily be hydrated from the
originating repository, we generally want to avoid "does this
object exist (locally)?" on objects that we deliberately omitted
when we created the clone. The cache-tree codepath (which is used
to write a tree object out of the index) however insisted that the
object exists, even for paths that are outside of the partial
checkout area. The code has been updated to avoid such a check.
* To help developers, an EditorConfig file that attempts to follow
the project convention has been added.
(merge b548d698a0 bc/editorconfig later to maint).
* The result of coverage test can be combined with "git blame" to
check the test coverage of code introduced recently with a new
'coverage-diff' tool (in contrib/).
(merge 783faedd65 ds/coverage-diff later to maint).
* An experiment to fuzz test a few areas, hopefully we can gain more
coverage to various areas.
* More codepaths are moving away from hardcoded hash sizes.
* The way the Windows port figures out the current directory has been
improved.
* The way DLLs are loaded on the Windows port has been improved.
* Some tests have been reorganized and renamed; "ls t/" now gives a
better overview of what is tested for these scripts than before.
* "git rebase" and "git rebase -i" have been reimplemented in C.
* Windows port learned to use nano-second resolution file timestamps.
* The overly large Documentation/config.txt file have been split into
million little pieces. This potentially allows each individual piece
included into the manual page of the command it affects more easily.
* Replace three string-list instances used as look-up tables in "git
fetch" with hashmaps.
* Unify code to read the author-script used in "git am" and the
commands that use the sequencer machinery, e.g. "git rebase -i".
* In preparation to the day when we can deprecate and remove the
"rebase -p", make sure we can skip and later remove tests for
it.
* The history traversal used to implement the tag-following has been
optimized by introducing a new helper.
* The helper function to refresh the cached stat information in the
in-core index has learned to perform the lstat() part of the
operation in parallel on multi-core platforms.
* The code to traverse objects for reachability, used to decide what
objects are unreferenced and expendable, have been taught to also
consider per-worktree refs of other worktrees as starting points to
prevent data loss.
* "git add" needs to internally run "diff-files" equivalent, and the
codepath learned the same optimization as "diff-files" has to run
lstat(2) in parallel to find which paths have been updated in the
working tree.
* The procedure to install dependencies before testing at Travis CI
is getting revamped for both simplicity and flexibility, taking
advantage of the recent move to the vm-based environment.
* The support for format-patch (and send-email) by the command-line
completion script (in contrib/) has been simplified a bit.
* The revision walker machinery learned to take advantage of the
commit generation numbers stored in the commit-graph file.
* The codebase has been cleaned up to reduce "#ifndef NO_PTHREADS".
* The way -lcurl library gets linked has been simplified by taking
advantage of the fact that we can just ask curl-config command how.
* Various functions have been audited for "-Wunused-parameter" warnings
and bugs in them got fixed.
* A sanity check for start-up sequence has been added in the config
API codepath.
* The build procedure to link for fuzzing test has been made
customizable with a new Makefile variable.
* The way "git rebase" parses and forwards the command line options
meant for underlying "git am" has been revamped, which fixed for
options with parameters that were not passed correctly.
* Our testing framework uses a special i18n "poisoned localization"
feature to find messages that ought to stay constant but are
incorrectly marked to be translated. This feature has been made
into a runtime option (it used to be a compile-time option).
* "git push" used to check ambiguities between object-names and
refnames while processing the list of refs' old and new values,
which was unnecessary (as it knew that it is feeding raw object
names). This has been optimized out.
* The xcurl_off_t() helper function is used to cast size_t to
curl_off_t, but some compilers gave warnings against the code to
ensure the casting is done without wraparound, when size_t is
narrower than curl_off_t. This warning has been squelched.
* Code preparation to replace ulong vars with size_t vars where
appropriate continues.
* The "test installed Git" mode of our test suite has been updated to
work better.
* A coding convention around the Coccinelle semantic patches to have
two classes to ease code migration process has been proposed and
its support has been added to the Makefile.
Fixes since v2.19
-----------------
* "git interpret-trailers" and its underlying machinery had a buggy
code that attempted to ignore patch text after commit log message,
which triggered in various codepaths that will always get the log
message alone and never get such an input.
(merge 66e83d9b41 jk/trailer-fixes later to maint).
* Malformed or crafted data in packstream can make our code attempt
to read or write past the allocated buffer and abort, instead of
reporting an error, which has been fixed.
* "git rebase -i" did not clear the state files correctly when a run
of "squash/fixup" is aborted and then the user manually amended the
commit instead, which has been corrected.
(merge 10d2f35436 js/rebase-i-autosquash-fix later to maint).
* When fsmonitor is in use, after operation on submodules updates
.gitmodules, we lost track of the fact that we did so and relied on
stale fsmonitor data.
(merge 43f1180814 bp/mv-submodules-with-fsmonitor later to maint).
* Fix for a long-standing bug that leaves the index file corrupt when
it shrinks during a partial commit.
(merge 6c003d6ffb jk/reopen-tempfile-truncate later to maint).
* Further fix for O_APPEND emulation on Windows
(merge eeaf7ddac7 js/mingw-o-append later to maint).
* A corner case bugfix in "git rerere" code.
(merge ad2bf0d9b4 en/rerere-multi-stage-1-fix later to maint).
* "git add ':(attr:foo)'" is not supported and is supposed to be
rejected while the command line arguments are parsed, but we fail
to reject such a command line upfront.
(merge 84d938b732 nd/attr-pathspec-fix later to maint).
* Recent update broke the reachability algorithm when refs (e.g.
tags) that point at objects that are not commit were involved,
which has been fixed.
* "git rebase" etc. in Git 2.19 fails to abort when given an empty
commit log message as result of editing, which has been corrected.
(merge a3ec9eaf38 en/sequencer-empty-edit-result-aborts later to maint).
* The code to backfill objects in lazily cloned repository did not
work correctly, which has been corrected.
(merge e68302011c jt/lazy-object-fetch-fix later to maint).
* Update error messages given by "git remote" and make them consistent.
(merge 5025425dff ms/remote-error-message-update later to maint).
* "git update-ref" learned to make both "--no-deref" and "--stdin"
work at the same time.
(merge d345e9fbe7 en/update-ref-no-deref-stdin later to maint).
* Recently added "range-diff" had a corner-case bug to cause it
segfault, which has been corrected.
(merge e467a90c7a tg/range-diff-corner-case-fix later to maint).
* The recently introduced commit-graph auxiliary data is incompatible
with mechanisms such as replace & grafts that "breaks" immutable
nature of the object reference relationship. Disable optimizations
based on its use (and updating existing commit-graph) when these
incompatible features are in use in the repository.
(merge 829a321569 ds/commit-graph-with-grafts later to maint).
* The mailmap file update.
(merge 255eb03edf jn/mailmap-update later to maint).
* The code in "git status" sometimes hit an assertion failure. This
was caused by a structure that was reused without cleaning the data
used for the first run, which has been corrected.
(merge 3e73cc62c0 en/status-multiple-renames-to-the-same-target-fix later to maint).
* "git fetch $repo $object" in a partial clone did not correctly
fetch the asked-for object that is referenced by an object in
promisor packfile, which has been fixed.
* A corner-case bugfix.
(merge c5cbb27cb5 sm/show-superproject-while-conflicted later to maint).
* Various fixes to "diff --color-moved-ws".
* A partial clone that is configured to lazily fetch missing objects
will on-demand issue a "git fetch" request to the originating
repository to fill not-yet-obtained objects. The request has been
optimized for requesting a tree object (and not the leaf blob
objects contained in it) by telling the originating repository that
no blobs are needed.
(merge 4c7f9567ea jt/non-blob-lazy-fetch later to maint).
* The codepath to support the experimental split-index mode had
remaining "racily clean" issues fixed.
(merge 4c490f3d32 sg/split-index-racefix later to maint).
* "git log --graph" showing an octopus merge sometimes miscounted the
number of display columns it is consuming to show the merge and its
parent commits, which has been corrected.
(merge 04005834ed np/log-graph-octopus-fix later to maint).
* "git range-diff" did not work well when the compared ranges had
changes in submodules and the "--submodule=log" was used.
* The implementation of run_command() API on the UNIX platforms had a
bug that caused a command not on $PATH to be found in the current
directory.
(merge f67b980771 jk/run-command-notdot later to maint).
* A mutex used in "git pack-objects" were not correctly initialized
and this caused "git repack" to dump core on Windows.
(merge 34204c8166 js/pack-objects-mutex-init-fix later to maint).
* Under certain circumstances, "git diff D:/a/b/c D:/a/b/d" on
Windows would strip initial parts from the paths because they
were not recognized as absolute, which has been corrected.
(merge ffd04e92e2 js/diff-notice-has-drive-prefix later to maint).
* The receive.denyCurrentBranch=updateInstead codepath kicked in even
when the push should have been rejected due to other reasons, such
as it does not fast-forward or the update-hook rejects it, which
has been corrected.
(merge b072a25fad jc/receive-deny-current-branch-fix later to maint).
* The logic to determine the archive type "git archive" uses did not
correctly kick in for "git archive --remote", which has been
corrected.
* "git repack" in a shallow clone did not correctly update the
shallow points in the repository, leading to a repository that
does not pass fsck.
(merge 5dcfbf564c js/shallow-and-fetch-prune later to maint).
* Some codepaths failed to form a proper URL when .gitmodules record
the URL to a submodule repository as relative to the repository of
superproject, which has been corrected.
(merge e0a862fdaf sb/submodule-url-to-absolute later to maint).
* "git fetch" over protocol v2 into a shallow repository failed to
fetch full history behind a new tip of history that was diverged
before the cut-off point of the history that was previously fetched
shallowly.
* The command line completion machinery (in contrib/) has been
updated to allow the completion script to tweak the list of options
that are reported by the parse-options machinery correctly.
(merge 276b49ff34 nd/completion-negation later to maint).
* Operations on promisor objects make sense in the context of only a
small subset of the commands that internally use the revisions
machinery, but the "--exclude-promisor-objects" option were taken
and led to nonsense results by commands like "log", to which it
didn't make much sense. This has been corrected.
(merge 669b1d2aae md/exclude-promisor-objects-fix later to maint).
* The "container" mode of TravisCI is going away. Our .travis.yml
file is getting prepared for the transition.
(merge 32ee384be8 ss/travis-ci-force-vm-mode later to maint).
* Our test scripts can now take the '-V' option as a synonym for the
'--verbose-log' option.
(merge a5f52c6dab sg/test-verbose-log later to maint).
* A regression in Git 2.12 era made "git fsck" fall into an infinite
loop while processing truncated loose objects.
(merge 18ad13e5b2 jk/detect-truncated-zlib-input later to maint).
* "git ls-remote $there foo" was broken by recent update for the
protocol v2 and stopped showing refs that match 'foo' that are not
refs/{heads,tags}/foo, which has been fixed.
(merge 6a139cdd74 jk/proto-v2-ref-prefix-fix later to maint).
* Additional comment on a tricky piece of code to help developers.
(merge 0afbe3e806 jk/stream-pack-non-delta-clarification later to maint).
* A couple of tests used to leave the repository in a state that is
deliberately corrupt, which have been corrected.
(merge aa984dbe5e ab/pack-tests-cleanup later to maint).
* The submodule support has been updated to read from the blob at
HEAD:.gitmodules when the .gitmodules file is missing from the
working tree.
(merge 2b1257e463 ao/submodule-wo-gitmodules-checked-out later to maint).
* "git fetch" was a bit loose in parsing responses from the other side
when talking over the protocol v2.
* "git rev-parse --exclude=* --branches --branches" (i.e. first
saying "add only things that do not match '*' out of all branches"
and then adding all branches, without any exclusion this time")
worked as expected, but "--exclude=* --all --all" did not work the
same way, which has been fixed.
(merge 5221048092 ag/rev-parse-all-exclude-fix later to maint).
* "git send-email --transfer-encoding=..." in recent versions of Git
sometimes produced an empty "Content-Transfer-Encoding:" header,
which has been corrected.
(merge 3c88e46f1a al/send-email-auto-cte-fixup later to maint).
* The interface into "xdiff" library used to discover the offset and
size of a generated patch hunk by first formatting it into the
textual hunk header "@@ -n,m +k,l @@" and then parsing the numbers
out. A new interface has been introduced to allow callers a more
direct access to them.
(merge 5eade0746e jk/xdiff-interface later to maint).
* Pathspec matching against a tree object were buggy when negative
pathspec elements were involved, which has been fixed.
(merge b7845cebc0 nd/tree-walk-path-exclusion later to maint).
* "git merge" and "git pull" that merges into an unborn branch used
to completely ignore "--verify-signatures", which has been
corrected.
(merge 01a31f3bca jk/verify-sig-merge-into-void later to maint).
* "git rebase --autostash" did not correctly re-attach the HEAD at times.
* "rev-parse --exclude=<pattern> --branches=<pattern>" etc. did not
quite work, which has been corrected.
(merge 9ab9b5df0e ra/rev-parse-exclude-glob later to maint).
* When editing a patch in a "git add -i" session, a hunk could be
made to no-op. The "git apply" program used to reject a patch with
such a no-op hunk to catch user mistakes, but it is now updated to
explicitly allow a no-op hunk in an edited patch.
(merge 22cb3835b9 js/apply-recount-allow-noop later to maint).
* The URL to an MSDN page in a comment has been updated.
(merge 2ef2ae2917 js/mingw-msdn-url later to maint).
* "git ls-remote --sort=<thing>" can feed an object that is not yet
available into the comparison machinery and segfault, which has
been corrected to check such a request upfront and reject it.
* When "git bundle" aborts due to an empty commit ranges
(i.e. resulting in an empty pack), it left a file descriptor to an
lockfile open, which resulted in leftover lockfile on Windows where
you cannot remove a file with an open file descriptor. This has
been corrected.
(merge 2c8ee1f53c jk/close-duped-fd-before-unlock-for-bundle later to maint).
* "git format-patch --stat=<width>" can be used to specify the width
used by the diffstat (shown in the cover letter).
(merge 284aeb7e60 nd/format-patch-cover-letter-stat-width later to maint).
* The way .git/index and .git/sharedindex* files were initially
created gave these files different perm bits until they were
adjusted for shared repository settings. This was made consistent.
(merge c9d6c78870 cc/shared-index-permbits later to maint).
* "git rebase --stat" to transplant a piece of history onto a totally
unrelated history were not working before and silently showed wrong
result. With the recent reimplementation in C, it started to instead
die with an error message, as the original logic was not prepared
to cope with this case. This has now been fixed.
* The advice message to tell the user to migrate an existing graft
file to the replace system when a graft file was read was shown
even when "git replace --convert-graft-file" command, which is the
way the message suggests to use, was running, which made little
sense.
(merge 8821e90a09 ab/replace-graft-with-replace-advice later to maint).
* "git diff --raw" lost ellipses to adjust the output columns for
some time now, but the documentation still showed them.
* Code cleanup, docfix, build fix, etc.
(merge 96a7501aad ts/doc-build-manpage-xsl-quietly later to maint).
(merge b9b07efdb2 tg/conflict-marker-size later to maint).
(merge fa0aeea770 sg/doc-trace-appends later to maint).
(merge d64324cb60 tb/void-check-attr later to maint).
(merge c3b9bc94b9 en/double-semicolon-fix later to maint).
(merge 79336116f5 sg/t3701-tighten-trace later to maint).
(merge 801fa63a90 jk/dev-build-format-security later to maint).
(merge 0597dd62ba sb/string-list-remove-unused later to maint).
(merge db2d36fad8 bw/protocol-v2 later to maint).
(merge 456d7cd3a9 sg/split-index-test later to maint).
(merge 7b6057c852 tq/refs-internal-comment-fix later to maint).
(merge 29e8dc50ad tg/t5551-with-curl-7.61.1 later to maint).
(merge 55f6bce2c9 fe/doc-updates later to maint).
(merge 7987d2232d jk/check-everything-connected-is-long-gone later to maint).
(merge 4ba3c9be47 dz/credential-doc-url-matching-rules later to maint).
(merge 4c399442f7 ma/commit-graph-docs later to maint).
(merge fc0503b04e ma/t1400-undebug-test later to maint).
(merge e56b53553a nd/packobjectshook-doc-fix later to maint).
(merge c56170a0c4 ma/mailing-list-address-in-git-help later to maint).
(merge 6e8fc70fce rs/sequencer-oidset-insert-avoids-dups later to maint).
(merge ad0b8f9575 mw/doc-typofixes later to maint).
(merge d9f079ad1a jc/how-to-document-api later to maint).
(merge b1492bf315 ma/t7005-bash-workaround later to maint).
(merge ac1f98a0df du/rev-parse-is-plumbing later to maint).
(merge ca8ed443a5 mm/doc-no-dashed-git later to maint).
(merge ce366a8144 du/get-tar-commit-id-is-plumbing later to maint).
(merge 61018fe9e0 du/cherry-is-plumbing later to maint).
(merge c7e5fe79b9 sb/strbuf-h-update later to maint).
(merge 8d2008196b tq/branch-create-wo-branch-get later to maint).
(merge 2e3c894f4b tq/branch-style-fix later to maint).
(merge c5d844af9c sg/doc-show-branch-typofix later to maint).
(merge 081d91618b ah/doc-updates later to maint).
(merge b84c783882 jc/cocci-preincr later to maint).
(merge 5e495f8122 uk/merge-subtree-doc-update later to maint).
(merge aaaa881822 jk/uploadpack-packobjectshook-fix later to maint).
(merge 3063477445 tb/char-may-be-unsigned later to maint).
(merge 8c64bc9420 sg/test-rebase-editor-fix later to maint).
(merge 71571cd7d6 ma/sequencer-do-reset-saner-loop-termination later to maint).
(merge 9a4cb8781e cb/notes-freeing-always-null-fix later to maint).
(merge 3006f5ee16 ma/reset-doc-rendering-fix later to maint).
(merge 4c2eb06419 sg/daemon-test-signal-fix later to maint).
(merge d27525e519 ss/msvc-strcasecmp later to maint).
----------------------------------------------------------------
Changes since v2.19.0 are as follows:
Aaron Lindsay (1):
send-email: avoid empty transfer encoding header
Alban Gruin (21):
sequencer: make three functions and an enum from sequencer.c public
rebase -i: rewrite append_todo_help() in C
editor: add a function to launch the sequence editor
rebase -i: rewrite the edit-todo functionality in C
sequencer: add a new function to silence a command, except if it fails
rebase -i: rewrite setup_reflog_action() in C
rebase -i: rewrite checkout_onto() in C
sequencer: refactor append_todo_help() to write its message to a buffer
sequencer: change the way skip_unnecessary_picks() returns its result
t3404: todo list with commented-out commands only aborts
rebase -i: rewrite complete_action() in C
rebase -i: remove unused modes and functions
rebase -i: implement the logic to initialize $revisions in C
rebase -i: rewrite the rest of init_revisions_and_shortrevisions() in C
rebase -i: rewrite write_basic_state() in C
rebase -i: rewrite init_basic_state() in C
rebase -i: implement the main part of interactive rebase as a builtin
rebase--interactive2: rewrite the submodes of interactive rebase in C
rebase -i: remove git-rebase--interactive.sh
rebase -i: move rebase--helper modes to rebase--interactive
p3400: replace calls to `git checkout -b' by `git checkout -B'
Alexander Pyhalov (1):
t7005-editor: quote filename to fix whitespace-issue
Andreas Gruenbacher (1):
rev-parse: clear --exclude list after 'git rev-parse --all'
Andreas Heiduk (6):
doc: clarify boundaries of 'git worktree list --porcelain'
doc: fix ASCII art tab spacing
doc: fix inappropriate monospace formatting
doc: fix descripion for 'git tag --format'
doc: fix indentation of listing blocks in gitweb.conf.txt
doc: fix formatting in git-update-ref
Anton Serbulov (1):
mingw: fix getcwd when the parent directory cannot be queried
Antonio Ospite (10):
submodule: add a print_config_from_gitmodules() helper
submodule: factor out a config_set_in_gitmodules_file_gently function
t7411: merge tests 5 and 6
t7411: be nicer to future tests and really clean things up
submodule--helper: add a new 'config' subcommand
submodule: use the 'submodule--helper config' command
t7506: clean up .gitmodules properly before setting up new scenario
submodule: add a helper to check if it is safe to write to .gitmodules
submodule: support reading .gitmodules when it's not in the working tree
t/helper: add test-submodule-nested-repo-config
Ben Peart (19):
checkout: optimize "git checkout -b <new_branch>"
git-mv: allow submodules and fsmonitor to work together
t/README: correct spelling of "uncommon"
preload-index: use git_env_bool() not getenv() for customization
fsmonitor: update GIT_TEST_FSMONITOR support
read-cache: update TEST_GIT_INDEX_VERSION support
preload-index: update GIT_FORCE_PRELOAD_TEST support
read-cache: clean up casting and byte decoding
eoie: add End of Index Entry (EOIE) extension
config: add new index.threads config setting
read-cache: load cache extensions on a worker thread
ieot: add Index Entry Offset Table (IEOT) extension
read-cache: load cache entries on worker threads
reset: don't compute unstaged changes after reset when --quiet
reset: add new reset.quiet config setting
reset: warn when refresh_index() takes more than 2 seconds
speed up refresh_index() by utilizing preload_index()
add: speed up cmd_add() by utilizing read_cache_preload()
refresh_index: remove unnecessary calls to preload_index()
Brandon Williams (1):
config: document value 2 for protocol.version
Brendan Forster (1):
http: add support for disabling SSL revocation checks in cURL
Carlo Marcelo Arenas Belón (8):
unpack-trees: avoid dead store for struct progress
multi-pack-index: avoid dead store for struct progress
read-cache: use of memory after it is freed
commit-slabs: move MAYBE_UNUSED out
khash: silence -Wunused-function for delta-islands
compat: make sure git_mmap is not expected to write
sequencer: cleanup for gcc warning in non developer mode
builtin/notes: remove unnecessary free
Christian Couder (3):
pack-objects: refactor code into compute_layer_order()
pack-objects: move tree_depth into 'struct packing_data'
pack-objects: move 'layer' into 'struct packing_data'
Christian Hesse (2):
subtree: add build targets 'man' and 'html'
subtree: make install targets depend on build targets
Daniels Umanovskis (3):
doc: move git-rev-parse from porcelain to plumbing
doc: move git-get-tar-commit-id to plumbing
doc: move git-cherry to plumbing
David Zych (1):
doc: clarify gitcredentials path component matching
Denton Liu (3):
mergetool: accept -g/--[no-]gui as arguments
completion: support `git mergetool --[no-]gui`
doc: document diff/merge.guitool config keys
Derrick Stolee (93):
multi-pack-index: add design document
multi-pack-index: add format details
multi-pack-index: add builtin
multi-pack-index: add 'write' verb
midx: write header information to lockfile
multi-pack-index: load into memory
t5319: expand test data
packfile: generalize pack directory list
multi-pack-index: read packfile list
multi-pack-index: write pack names in chunk
midx: read pack names into array
midx: sort and deduplicate objects from packfiles
midx: write object ids in a chunk
midx: write object id fanout chunk
midx: write object offsets
config: create core.multiPackIndex setting
midx: read objects from multi-pack-index
midx: use midx in abbreviation calculations
midx: use existing midx when writing new one
midx: use midx in approximate_object_count
midx: prevent duplicate packfile loads
packfile: skip loading index if in multi-pack-index
midx: clear midx on repack
commit-reach: move walk methods from commit.c
commit.h: remove method declarations
commit-reach: move ref_newer from remote.c
commit-reach: move commit_contains from ref-filter
upload-pack: make reachable() more generic
upload-pack: refactor ok_to_give_up()
upload-pack: generalize commit date cutoff
commit-reach: move can_all_from_reach_with_flags
test-reach: create new test tool for ref_newer
test-reach: test in_merge_bases
test-reach: test is_descendant_of
test-reach: test get_merge_bases_many
test-reach: test reduce_heads
test-reach: test can_all_from_reach_with_flags
test-reach: test commit_contains
commit-reach: replace ref_newer logic
commit-reach: make can_all_from_reach... linear
commit-reach: use can_all_from_reach
multi-pack-index: provide more helpful usage info
multi-pack-index: store local property
midx: mark bad packed objects
midx: stop reporting garbage
midx: fix bug that skips midx with alternates
packfile: add all_packs list
treewide: use get_all_packs
midx: test a few commands that use get_all_packs
pack-objects: consider packs in multi-pack-index
commit-graph: update design document
test-repository: properly init repo
commit-graph: not compatible with replace objects
commit-graph: not compatible with grafts
commit-graph: not compatible with uninitialized repo
commit-graph: close_commit_graph before shallow walk
commit-graph: define GIT_TEST_COMMIT_GRAPH
t3206-range-diff.sh: cover single-patch case
t5318: use test_oid for HASH_LEN
multi-pack-index: add 'verify' verb
multi-pack-index: verify bad header
multi-pack-index: verify corrupt chunk lookup table
multi-pack-index: verify packname order
multi-pack-index: verify missing pack
multi-pack-index: verify oid fanout order
multi-pack-index: verify oid lookup order
multi-pack-index: fix 32-bit vs 64-bit size check
multi-pack-index: verify object offsets
multi-pack-index: report progress during 'verify'
fsck: verify multi-pack-index
commit-reach: properly peel tags
commit-reach: fix memory and flag leaks
commit-reach: cleanups in can_all_from_reach...
commit-graph: clean up leaked memory during write
commit-graph: reduce initial oid allocation
midx: fix broken free() in close_midx()
contrib: add coverage-diff script
ci: add optional test variables
commit-reach: fix first-parent heuristic
midx: close multi-pack-index on repack
multi-pack-index: define GIT_TEST_MULTI_PACK_INDEX
packfile: close multi-pack-index in close_all_packs
prio-queue: add 'peek' operation
test-reach: add run_three_modes method
test-reach: add rev-list tests
revision.c: begin refactoring --topo-order logic
commit/revisions: bookkeeping before refactoring
revision.c: generation-based topo-order algorithm
t6012: make rev-list tests more interesting
commit-reach: implement get_reachable_subset
test-reach: test get_reachable_subset
remote: make add_missing_tags() linear
pack-objects: ignore ambiguous object warnings
Elijah Newren (14):
Remove superfluous trailing semicolons
t4200: demonstrate rerere segfault on specially crafted merge
rerere: avoid buffer overrun
update-ref: fix type of update_flags variable to match its usage
update-ref: allow --no-deref with --stdin
sequencer: fix --allow-empty-message behavior, make it smarter
merge-recursive: set paths correctly when three-way merging content
merge-recursive: avoid wrapper function when unnecessary and wasteful
merge-recursive: remove final remaining caller of merge_file_one()
merge-recursive: rename merge_file_1() and merge_content()
commit: fix erroneous BUG, 'multiple renames on the same target? how?'
merge-recursive: improve auto-merging messages with path collisions
merge-recursive: avoid showing conflicts with merge branch before HEAD
fsck: move fsck_head_link() to get_default_heads() to avoid some globals
Eric Sunshine (26):
format-patch: allow additional generated content in make_cover_letter()
format-patch: add --interdiff option to embed diff in cover letter
format-patch: teach --interdiff to respect -v/--reroll-count
interdiff: teach show_interdiff() to indent interdiff
log-tree: show_log: make commentary block delimiting reusable
format-patch: allow --interdiff to apply to a lone-patch
range-diff: respect diff_option.file rather than assuming 'stdout'
range-diff: publish default creation factor
range-diff: relieve callers of low-level configuration burden
format-patch: add --range-diff option to embed diff in cover letter
format-patch: extend --range-diff to accept revision range
format-patch: teach --range-diff to respect -v/--reroll-count
format-patch: add --creation-factor tweak for --range-diff
format-patch: allow --range-diff to apply to a lone-patch
worktree: don't die() in library function find_worktree()
worktree: move delete_git_dir() earlier in file for upcoming new callers
worktree: generalize delete_git_dir() to reduce code duplication
worktree: prepare for more checks of whether path can become worktree
worktree: disallow adding same path multiple times
worktree: teach 'add' to respect --force for registered but missing path
worktree: teach 'move' to override lock when --force given twice
worktree: teach 'remove' to override lock when --force given twice
worktree: delete .git/worktrees if empty after 'remove'
doc-diff: fix non-portable 'man' invocation
doc-diff: add --clean mode to remove temporary working gunk
doc/Makefile: drop doc-diff worktree and temporary files on "make clean"
Frederick Eaton (3):
git-archimport.1: specify what kind of Arch we're talking about
git-column.1: clarify initial description, provide examples
git-describe.1: clarify that "human readable" is also git-readable
Greg Hurrell (1):
doc: update diff-format.txt for removed ellipses in --raw
James Knight (1):
build: link with curl-defined linker flags
Jann Horn (2):
patch-delta: fix oob read
patch-delta: consistently report corruption
Jean-Noël Avila (1):
i18n: fix small typos
Jeff Hostetler (2):
t0051: test GIT_TRACE to a windows named pipe
mingw: fix mingw_open_append to work with named pipes
Jeff King (98):
branch: make "-l" a synonym for "--list"
Add delta-islands.{c,h}
pack-objects: add delta-islands support
repack: add delta-islands support
t5320: tests for delta islands
t/perf: factor boilerplate out of test_perf
t/perf: factor out percent calculations
t/perf: add infrastructure for measuring sizes
t/perf: add perf tests for fetches from a bitmapped server
pack-bitmap: save "have" bitmap from walk
pack-objects: reuse on-disk deltas for thin "have" objects
SubmittingPatches: mention doc-diff
rev-list: make empty --stdin not an error
trailer: use size_t for string offsets
trailer: use size_t for iterating trailer list
trailer: pass process_trailer_opts to trailer_info_get()
interpret-trailers: tighten check for "---" patch boundary
interpret-trailers: allow suppressing "---" divider
pretty, ref-filter: format %(trailers) with no_divider option
sequencer: ignore "---" divider when parsing trailers
append_signoff: use size_t for string offsets
coccinelle: use <...> for function exclusion
introduce hasheq() and oideq()
convert "oidcmp() == 0" to oideq()
convert "hashcmp() == 0" to hasheq()
convert "oidcmp() != 0" to "!oideq()"
convert "hashcmp() != 0" to "!hasheq()"
convert hashmap comparison functions to oideq()
read-cache: use oideq() in ce_compare functions
show_dirstat: simplify same-content check
doc-diff: always use oids inside worktree
test-delta: read input into a heap buffer
t5303: test some corrupt deltas
patch-delta: handle truncated copy parameters
t5303: use printf to generate delta bases
doc/git-branch: remove obsolete "-l" references
bitmap_has_sha1_in_uninteresting(): drop BUG check
t5310: test delta reuse with bitmaps
traverse_bitmap_commit_list(): don't free result
pack-bitmap: drop "loaded" flag
reopen_tempfile(): truncate opened file
doc-diff: force worktree add
config.mak.dev: add -Wformat-security
pack-objects: handle island check for "external" delta base
receive-pack: update comment with check_everything_connected
submodule--helper: use "--" to signal end of clone options
submodule-config: ban submodule urls that start with dash
submodule-config: ban submodule paths that start with a dash
fsck: detect submodule urls starting with dash
fsck: detect submodule paths starting with dash
more oideq/hasheq conversions
transport: drop refnames from for_each_alternate_ref
test-tool: show tool list on error
config.mak.dev: enable -Wunused-function
run-command: mark path lookup errors with ENOENT
t5410: use longer path for sample script
upload-pack: fix broken if/else chain in config callback
t1450: check large blob in trailing-garbage test
check_stream_sha1(): handle input underflow
cat-file: handle streaming failures consistently
ls-remote: do not send ref prefixes for patterns
ls-remote: pass heads/tags prefixes to transport
read_istream_pack_non_delta(): document input handling
xdiff: provide a separate emit callback for hunks
xdiff-interface: provide a separate consume callback for hunks
rev-list: handle flags for --indexed-objects
approxidate: handle pending number for "specials"
pathspec: handle non-terminated strings with :(attr)
diff: avoid generating unused hunk header lines
diff: discard hunk headers for patch-ids earlier
diff: use hunk callback for word-diff
combine-diff: use an xdiff hunk callback
diff: convert --check to use a hunk callback
range-diff: use a hunk callback
xdiff-interface: drop parse_hunk_header()
apply: mark include/exclude options as NONEG
am: handle --no-patch-format option
ls-files: mark exclude options as NONEG
pack-objects: mark index-version option as NONEG
cat-file: mark batch options with NONEG
status: mark --find-renames option with NONEG
format-patch: mark "--no-numbered" option with NONEG
show-branch: mark --reflog option as NONEG
tag: mark "--message" option with NONEG
cat-file: report an error on multiple --batch options
apply: return -1 from option callback instead of calling exit(1)
parse-options: drop OPT_DATE()
assert NOARG/NONEG behavior of parse-options callbacks
midx: double-check large object write loop
merge: extract verify_merge_signature() helper
merge: handle --verify-signatures for unborn branch
pull: handle --verify-signatures for unborn branch
approxidate: fix NULL dereference in date_time()
bundle: dup() output descriptor closer to point-of-use
pack-objects: fix tree_depth and layer invariants
pack-objects: zero-initialize tree_depth/layer arrays
pack-objects: fix off-by-one in delta-island tree-depth computation
t5562: fix perl path
Johannes Schindelin (64):
rebase -i --autosquash: demonstrate a problem skipping the last squash
rebase -i: be careful to wrap up fixup/squash chains
compat/poll: prepare for targeting Windows Vista
mingw: set _WIN32_WINNT explicitly for Git for Windows
mingw: bump the minimum Windows version to Vista
builtin rebase: prepare for builtin rebase -i
rebase -i: clarify what happens on a failed `exec`
rebase -i: introduce the 'break' command
getpwuid(mingw): initialize the structure only once
getpwuid(mingw): provide a better default for the user name
mingw: use domain information for default email
http: add support for selecting SSL backends at runtime
pack-objects: fix typo 'detla' -> 'delta'
pack-objects (mingw): demonstrate a segmentation fault with large deltas
pack-objects (mingw): initialize `packing_data` mutex in the correct spot
rebase (autostash): avoid duplicate call to state_dir_path()
rebase (autostash): store the full OID in <state-dir>/autostash
rebase (autostash): use an explicit OID to apply the stash
mingw: factor out code to set stat() data
rebase --autostash: demonstrate a problem with dirty submodules
rebase --autostash: fix issue with dirty submodules
mingw: load system libraries the recommended way
mingw: ensure `getcwd()` reports the correct case
repack: point out a bug handling stale shallow info
shallow: offer to prune only non-existing entries
repack -ad: prune the list of shallow commits
http: when using Secure Channel, ignore sslCAInfo by default
t7800: fix quoting
mingw: reencode environment variables on the fly (UTF-16 <-> UTF-8)
config: rename `dummy` parameter to `cb` in git_default_config()
config: allow for platform-specific core.* config settings
config: move Windows-specific config settings into compat/mingw.c
mingw: unset PERL5LIB by default
mingw: fix isatty() after dup2()
t3404: decouple some test cases from outcomes of previous test cases
t3418: decouple test cases from a previous `rebase -p` test case
tests: optionally skip `git rebase -p` tests
Windows: force-recompile git.res for differing architectures
built-in rebase: demonstrate regression with --autostash
built-in rebase --autostash: leave the current branch alone if possible
Update .mailmap
rebase -r: demonstrate bug with conflicting merges
rebase -r: do not write MERGE_HEAD unless needed
rebase -i: include MERGE_HEAD into files to clean up
built-in rebase --skip/--abort: clean up stale .git/<name> files
status: rebase and merge can be in progress at the same time
apply --recount: allow "no-op hunks"
rebase: consolidate clean-up code before leaving reset_head()
rebase: prepare reset_head() for more flags
built-in rebase: reinstate `checkout -q` behavior where appropriate
tests: fix GIT_TEST_INSTALLED's PATH to include t/helper/
tests: respect GIT_TEST_INSTALLED when initializing repositories
t/lib-gettext: test installed git-sh-i18n if GIT_TEST_INSTALLED is set
mingw: use `CreateHardLink()` directly
rebase: really just passthru the `git am` options
rebase: validate -C<n> and --whitespace=<mode> parameters early
config: report a bug if git_dir exists without commondir
tests: do not require Git to be built when testing an installed Git
tests: explicitly use `git.exe` on Windows
mingw: replace an obsolete link with the superseding one
legacy-rebase: backport -C<n> and --whitespace=<option> checks
rebase: warn about the correct tree's OID
rebase: fix GIT_REFLOG_ACTION regression
rebase --stat: fix when rebasing to an unrelated history
Johannes Sixt (3):
diff: don't attempt to strip prefix from absolute Windows paths
rebase -i: recognize short commands without arguments
t3404-rebase-interactive: test abbreviated commands
Jonathan Nieder (9):
gc: improve handling of errors reading gc.log
gc: exit with status 128 on failure
gc: do not return error for prior errors in daemonized mode
commit-reach: correct accidental #include of C file
mailmap: consistently normalize brian m. carlson's name
git doc: direct bug reporters to mailing list archive
eoie: default to not writing EOIE section
ieot: default to not writing IEOT section
index: make index.threads=true enable ieot and eoie
Jonathan Tan (15):
fetch-object: unify fetch_object[s] functions
fetch-object: set exact_oid when fetching
connected: document connectivity in partial clones
fetch: in partial clone, check presence of targets
fetch-pack: avoid object flags if no_dependents
fetch-pack: exclude blobs when lazy-fetching trees
transport: allow skipping of ref listing
transport: do not list refs if possible
transport: list refs before fetch if necessary
fetch: do not list refs if fetching only hashes
cache-tree: skip some blob checks in partial clone
upload-pack: make have_obj not global
upload-pack: make want_obj not global
upload-pack: clear flags before each v2 request
fetch-pack: be more precise in parsing v2 response
Josh Steadmon (4):
fuzz: add basic fuzz testing target.
fuzz: add fuzz testing for packfile indices.
archive: initialize archivers earlier
Makefile: use FUZZ_CXXFLAGS for linking fuzzers
Joshua Watt (1):
send-email: explicitly disable authentication
Junio C Hamano (36):
Revert "doc/Makefile: drop doc-diff worktree and temporary files on "make clean""
Initial batch post 2.19
Second batch post 2.19
Git 2.14.5
Git 2.15.3
Git 2.16.5
Git 2.17.2
Git 2.18.1
Git 2.19.1
t0000: do not get self-test disrupted by environment warnings
CodingGuidelines: document the API in *.h files
Declare that the next one will be named 2.20
Third batch for 2.20
rebase: fix typoes in error messages
Fourth batch for 2.20
Revert "subtree: make install targets depend on build targets"
Fifth batch for 2.20
receive: denyCurrentBranch=updateinstead should not blindly update
cocci: simplify "if (++u > 1)" to "if (u++)"
fsck: s/++i > 1/i++/
http: give curl version warnings consistently
Sixth batch for 2.20
Seventh batch for 2.20
fetch: replace string-list used as a look-up table with a hashmap
rebase: apply cocci patch
Eighth batch for 2.20
Ninth batch for 2.20
Makefile: ease dynamic-gettext-poison transition
Tenth batch for 2.20
Git 2.20-rc0
RelNotes: name the release properly
Prepare for 2.20-rc1
Git 2.19.2
Git 2.20-rc1
format-patch: do not let its diff-options affect --range-diff
Git 2.20-rc2
Karsten Blees (2):
mingw: replace MSVCRT's fstat() with a Win32-based implementation
mingw: implement nanosecond-precision file times
Loo Rong Jie (1):
win32: replace pthread_cond_*() with much simpler code
Lucas De Marchi (1):
range-diff: allow to diff files regardless of submodule config
Luke Diamand (3):
git-p4: do not fail in verbose mode for missing 'fileSize' key
git-p4: unshelve into refs/remotes/p4-unshelved, not refs/remotes/p4/unshelved
git-p4: fully support unshelving changelists
Martin Ågren (11):
Doc: use `--type=bool` instead of `--bool`
git-config.txt: fix 'see: above' note
git-commit-graph.txt: fix bullet lists
git-commit-graph.txt: typeset more in monospace
git-commit-graph.txt: refer to "*commit*-graph file"
Doc: refer to the "commit-graph file" with dash
t1400: drop debug `echo` to actually execute `test`
builtin/commit-graph.c: UNLEAK variables
sequencer: break out of loop explicitly
git-reset.txt: render tables correctly under Asciidoctor
git-reset.txt: render literal examples as monospace
Matthew DeVore (19):
list-objects: store common func args in struct
list-objects: refactor to process_tree_contents
list-objects: always parse trees gently
t/README: reformat Do, Don't, Keep in mind lists
Documentation: add shell guidelines
tests: standardize pipe placement
t/*: fix ordering of expected/observed arguments
tests: don't swallow Git errors upstream of pipes
t9109: don't swallow Git errors upstream of pipes
tests: order arguments to git-rev-list properly
rev-list: handle missing tree objects properly
revision: mark non-user-given objects instead
list-objects-filter: use BUG rather than die
list-objects-filter-options: do not over-strbuf_init
list-objects-filter: implement filter tree:0
filter-trees: code clean-up of tests
list-objects: support for skipping tree traversal
Documentation/git-log.txt: do not show --exclude-promisor-objects
exclude-promisor-objects: declare when option is allowed
Max Kirillov (1):
http-backend test: make empty CONTENT_LENGTH test more realistic
Michael Witten (3):
docs: typo: s/go/to/
docs: graph: remove unnecessary `graph_update()' call
docs: typo: s/isimilar/similar/
Michał Górny (6):
gpg-interface.c: detect and reject multiple signatures on commits
gpg-interface.c: use flags to determine key/signer info presence
gpg-interface.c: support getting key fingerprint via %GF format
gpg-interface.c: obtain primary key fingerprint as well
t/t7510-signed-commit.sh: Add %GP to custom format checks
t/t7510-signed-commit.sh: add signing subkey to Eris Discordia key
Mihir Mehta (1):
doc: fix a typo and clarify a sentence
Nguyễn Thái Ngọc Duy (170):
clone: report duplicate entries on case-insensitive filesystems
trace.h: support nested performance tracing
unpack-trees: add performance tracing
unpack-trees: optimize walking same trees with cache-tree
unpack-trees: reduce malloc in cache-tree walk
unpack-trees: reuse (still valid) cache-tree from src_index
unpack-trees: add missing cache invalidation
cache-tree: verify valid cache-tree in the test suite
Document update for nd/unpack-trees-with-cache-tree
bisect.c: make show_list() build again
t/helper: keep test-tool command list sorted
t/helper: merge test-dump-untracked-cache into test-tool
t/helper: merge test-pkt-line into test-tool
t/helper: merge test-parse-options into test-tool
t/helper: merge test-dump-fsmonitor into test-tool
Makefile: add a hint about TEST_BUILTINS_OBJS
config.txt: follow camelCase naming
config.txt: move fetch part out to a separate file
config.txt: move format part out to a separate file
config.txt: move gitcvs part out to a separate file
config.txt: move gui part out to a separate file
config.txt: move pull part out to a separate file
config.txt: move push part out to a separate file
config.txt: move receive part out to a separate file
config.txt: move sendemail part out to a separate file
config.txt: move sequence.editor out of "core" part
config.txt: move submodule part out to a separate file
archive.c: remove implicit dependency the_repository
status: show progress bar if refreshing the index takes too long
add: do not accept pathspec magic 'attr'
completion: support "git fetch --multiple"
read-cache.c: remove 'const' from index_has_changes()
diff.c: reduce implicit dependency on the_index
combine-diff.c: remove implicit dependency on the_index
blame.c: rename "repo" argument to "r"
diff.c: remove the_index dependency in textconv() functions
grep.c: remove implicit dependency on the_index
diff.c: remove implicit dependency on the_index
read-cache.c: remove implicit dependency on the_index
diff-lib.c: remove implicit dependency on the_index
ll-merge.c: remove implicit dependency on the_index
merge-blobs.c: remove implicit dependency on the_index
merge.c: remove implicit dependency on the_index
patch-ids.c: remove implicit dependency on the_index
sha1-file.c: remove implicit dependency on the_index
rerere.c: remove implicit dependency on the_index
userdiff.c: remove implicit dependency on the_index
line-range.c: remove implicit dependency on the_index
submodule.c: remove implicit dependency on the_index
tree-diff.c: remove implicit dependency on the_index
ws.c: remove implicit dependency on the_index
revision.c: remove implicit dependency on the_index
revision.c: reduce implicit dependency the_repository
read-cache.c: optimize reading index format v4
config.txt: correct the note about uploadpack.packObjectsHook
help -a: improve and make --verbose default
refs.c: indent with tabs, not spaces
Add a place for (not) sharing stuff between worktrees
submodule.c: remove some of the_repository references
completion: fix __gitcomp_builtin no longer consider extra options
t1300: extract and use test_cmp_config()
worktree: add per-worktree config files
refs: new ref types to make per-worktree refs visible to all worktrees
revision.c: correct a parameter name
revision.c: better error reporting on ref from different worktrees
fsck: check HEAD and reflog from other worktrees
reflog expire: cover reflog from all worktrees
Update makefile in preparation for Documentation/config/*.txt
config.txt: move advice.* to a separate file
config.txt: move core.* to a separate file
config.txt: move add.* to a separate file
config.txt: move alias.* to a separate file
config.txt: move am.* to a separate file
config.txt: move apply.* to a separate file
config.txt: move blame.* to a separate file
config.txt: move branch.* to a separate file
config.txt: move browser.* to a separate file
config.txt: move checkout.* to a separate file
config.txt: move clean.* to a separate file
config.txt: move color.* to a separate file
config.txt: move column.* to a separate file
config.txt: move commit.* to a separate file
config.txt: move credential.* to a separate file
config.txt: move completion.* to a separate file
config.txt: move diff-config.txt to config/
config.txt: move difftool.* to a separate file
config.txt: move fastimport.* to a separate file
config.txt: move fetch-config.txt to config/
config.txt: move filter.* to a separate file
config.txt: move format-config.txt to config/
config.txt: move fmt-merge-msg-config.txt to config/
config.txt: move fsck.* to a separate file
config.txt: move gc.* to a separate file
config.txt: move gitcvs-config.txt to config/
config.txt: move gitweb.* to a separate file
config.txt: move grep.* to a separate file
config.txt: move gpg.* to a separate file
config.txt: move gui-config.txt to config/
config.txt: move guitool.* to a separate file
config.txt: move help.* to a separate file
config.txt: move ssh.* to a separate file
config.txt: move http.* to a separate file
config.txt: move i18n.* to a separate file
git-imap-send.txt: move imap.* to a separate file
config.txt: move index.* to a separate file
config.txt: move init.* to a separate file
config.txt: move instaweb.* to a separate file
config.txt: move interactive.* to a separate file
config.txt: move log.* to a separate file
config.txt: move mailinfo.* to a separate file
config.txt: move mailmap.* to a separate file
config.txt: move man.* to a separate file
config.txt: move merge-config.txt to config/
config.txt: move mergetool.* to a separate file
config.txt: move notes.* to a separate file
config.txt: move pack.* to a separate file
config.txt: move pager.* to a separate file
config.txt: move pretty.* to a separate file
config.txt: move protocol.* to a separate file
config.txt: move pull-config.txt to config/
config.txt: move push-config.txt to config/
config.txt: move rebase-config.txt to config/
config.txt: move receive-config.txt to config/
config.txt: move remote.* to a separate file
config.txt: move remotes.* to a separate file
config.txt: move repack.* to a separate file
config.txt: move rerere.* to a separate file
config.txt: move reset.* to a separate file
config.txt: move sendemail-config.txt to config/
config.txt: move sequencer.* to a separate file
config.txt: move showBranch.* to a separate file
config.txt: move splitIndex.* to a separate file
config.txt: move status.* to a separate file
config.txt: move stash.* to a separate file
config.txt: move submodule.* to a separate file
config.txt: move tag.* to a separate file
config.txt: move transfer.* to a separate file
config.txt: move uploadarchive.* to a separate file
config.txt: move uploadpack.* to a separate file
config.txt: move url.* to a separate file
config.txt: move user.* to a separate file
config.txt: move versionsort.* to a separate file
config.txt: move web.* to a separate file
config.txt: move worktree.* to a separate file
config.txt: remove config/dummy.txt
thread-utils: macros to unconditionally compile pthreads API
wildmatch: change behavior of "foo**bar" in WM_PATHNAME mode
git-worktree.txt: correct linkgit command name
sequencer.c: remove a stray semicolon
tree-walk.c: fix overoptimistic inclusion in :(exclude) matching
run-command.h: include thread-utils.h instead of pthread.h
send-pack.c: move async's #ifdef NO_PTHREADS back to run-command.c
index-pack: remove #ifdef NO_PTHREADS
name-hash.c: remove #ifdef NO_PTHREADS
attr.c: remove #ifdef NO_PTHREADS
grep: remove #ifdef NO_PTHREADS
grep: clean up num_threads handling
preload-index.c: remove #ifdef NO_PTHREADS
pack-objects: remove #ifdef NO_PTHREADS
read-cache.c: remove #ifdef NO_PTHREADS
read-cache.c: reduce branching based on HAVE_THREADS
read-cache.c: initialize copy_len to shut up gcc 8
Clean up pthread_create() error handling
completion: use __gitcomp_builtin for format-patch
build: fix broken command-list.h generation with core.autocrlf
format-patch: respect --stat in cover letter's diffstat
doc: move extensions.worktreeConfig to the right place
clone: fix colliding file detection on APFS
files-backend.c: fix build error on Solaris
transport-helper.c: do not translate a string twice
Nickolai Belakovski (2):
worktree: update documentation for lock_reason and lock_reason_valid
worktree: rename is_worktree_locked to worktree_lock_reason
Noam Postavsky (1):
log: fix coloring of certain octopus merge shapes
Olga Telezhnaya (3):
ref-filter: free memory from used_atom
ls-remote: release memory instead of UNLEAK
ref-filter: free item->value and item->value->s
Phillip Wood (11):
diff: fix --color-moved-ws=allow-indentation-change
diff --color-moved-ws: fix double free crash
diff --color-moved-ws: fix out of bounds string access
diff --color-moved-ws: fix a memory leak
diff --color-moved-ws: fix another memory leak
diff --color-moved: fix a memory leak
am: don't die in read_author_script()
am: improve author-script error reporting
am: rename read_author_script()
add read_author_script() to libgit
sequencer: use read_author_script()
Pratik Karki (46):
rebase: start implementing it as a builtin
rebase: refactor common shell functions into their own file
builtin/rebase: support running "git rebase <upstream>"
builtin rebase: support --onto
builtin rebase: support `git rebase --onto A...B`
builtin rebase: handle the pre-rebase hook and --no-verify
builtin rebase: support --quiet
builtin rebase: support the `verbose` and `diffstat` options
builtin rebase: require a clean worktree
builtin rebase: try to fast forward when possible
builtin rebase: support --force-rebase
builtin rebase: start a new rebase only if none is in progress
builtin rebase: only store fully-qualified refs in `options.head_name`
builtin rebase: support `git rebase <upstream> <switch-to>`
builtin rebase: support --continue
builtin rebase: support --skip
builtin rebase: support --abort
builtin rebase: support --quit
builtin rebase: support --edit-todo and --show-current-patch
builtin rebase: actions require a rebase in progress
builtin rebase: stop if `git am` is in progress
builtin rebase: allow selecting the rebase "backend"
builtin rebase: support --signoff
builtin rebase: support --rerere-autoupdate
builtin rebase: support --committer-date-is-author-date
builtin rebase: support `ignore-whitespace` option
builtin rebase: support `ignore-date` option
builtin rebase: support `keep-empty` option
builtin rebase: support `--autosquash`
builtin rebase: support `--gpg-sign` option
builtin rebase: support `-C` and `--whitespace=<type>`
builtin rebase: support `--autostash` option
builtin rebase: support `--exec`
builtin rebase: support `--allow-empty-message` option
builtin rebase: support --rebase-merges[=[no-]rebase-cousins]
merge-base --fork-point: extract libified function
builtin rebase: support `fork-point` option
builtin rebase: add support for custom merge strategies
builtin rebase: support --root
builtin rebase: optionally auto-detect the upstream
builtin rebase: optionally pass custom reflogs to reset_head()
builtin rebase: fast-forward to onto if it is a proper descendant
builtin rebase: show progress when connected to a terminal
builtin rebase: use no-op editor when interactive is "implied"
builtin rebase: error out on incompatible option/mode combinations
rebase: default to using the builtin rebase
Rafael Ascensão (2):
refs: show --exclude failure with --branches/tags/remotes=glob
refs: fix some exclude patterns being ignored
Ralf Thielow (2):
git-rebase.sh: fix typos in error messages
builtin/rebase.c: remove superfluous space in messages
Ramsay Jones (12):
Makefile: add a hdr-check target
json-writer.h: add missing include (hdr-check)
ewah/ewok_rlw.h: add missing include (hdr-check)
refs/ref-cache.h: add missing declarations (hdr-check)
refs/packed-backend.h: add missing declaration (hdr-check)
refs/refs-internal.h: add missing declarations (hdr-check)
midx.h: add missing forward declarations (hdr-check)
delta-islands.h: add missing forward declarations (hdr-check)
headers: normalize the spelling of some header guards
fetch-object.h: add missing declaration (hdr-check)
ewok_rlw.h: add missing 'inline' to function definition
commit-reach.h: add missing declarations (hdr-check)
Rasmus Villemoes (6):
help: redirect to aliased commands for "git cmd --help"
git.c: handle_alias: prepend alias info when first argument is -h
git-help.txt: document "git help cmd" vs "git cmd --help" for aliases
Documentation/git-send-email.txt: style fixes
send-email: only consider lines containing @ or <> for automatic Cc'ing
send-email: also pick up cc addresses from -by trailers
René Scharfe (12):
mailinfo: support format=flowed
fsck: add a performance test for skipList
fsck: use strbuf_getline() to read skiplist file
fsck: use oidset instead of oid_array for skipList
sequencer: use return value of oidset_insert()
grep: add -r/--[no-]recursive
fetch-pack: factor out is_unmatched_ref()
fetch-pack: load tip_oids eagerly iff needed
khash: factor out kh_release_*
oidset: use khash
oidset: uninline oidset_init()
commit-reach: fix cast in compare_commits_by_gen()
Roger Strain (1):
subtree: performance improvement for finding unexpected parent commits
SZEDER Gábor (20):
t1404: increase core.packedRefsTimeout to avoid occasional test failure
Documentation/git.txt: clarify that GIT_TRACE=/path appends
t3701-add-interactive: tighten the check of trace output
t1700-split-index: drop unnecessary 'grep'
t0090: disable GIT_TEST_SPLIT_INDEX for the test checking split index
t1700-split-index: document why FSMONITOR is disabled in this test script
split-index: add tests to demonstrate the racy split index problem
t1700-split-index: date back files to avoid racy situations
split-index: count the number of deleted entries
split-index: don't compare cached data of entries already marked for split index
split-index: smudge and add racily clean cache entries to split index
split-index: BUG() when cache entry refers to non-existing shared entry
object_id.cocci: match only expressions of type 'struct object_id'
test-lib: introduce the '-V' short option for '--verbose-log'
travis-ci: install packages in 'ci/install-dependencies.sh'
coccicheck: introduce 'pending' semantic patches
ref-filter: don't look for objects when outside of a repository
tests: send "bug in the test script" errors to the script's stderr
test-lib-functions: make 'test_cmp_rev' more informative on failure
t/lib-git-daemon: fix signal checking
Sam McKelvie (1):
rev-parse: --show-superproject-working-tree should work during a merge
Saulius Gurklys (1):
doc: fix small typo in git show-branch
Sebastian Staudt (1):
travis-ci: no longer use containers
Shulhan (1):
builtin/remote: quote remote name on error to display empty name
Stefan Beller (25):
git-submodule.sh: align error reporting for update mode to use path
git-submodule.sh: rename unused variables
builtin/submodule--helper: factor out submodule updating
builtin/submodule--helper: store update_clone information in a struct
builtin/submodule--helper: factor out method to update a single submodule
submodule--helper: replace connect-gitdir-workingtree by ensure-core-worktree
submodule--helper: introduce new update-module-mode helper
test_decode_color: understand FAINT and ITALIC
t3206: add color test for range-diff --dual-color
diff.c: simplify caller of emit_line_0
diff.c: reorder arguments for emit_line_ws_markup
diff.c: add set_sign to emit_line_0
diff: use emit_line_0 once per line
diff.c: omit check for line prefix in emit_line_0
diff.c: rewrite emit_line_0 more understandably
diff.c: add --output-indicator-{new, old, context}
range-diff: make use of different output indicators
range-diff: indent special lines as context
refs.c: migrate internal ref iteration to pass thru repository argument
refs.c: upgrade for_each_replace_ref to be a each_repo_ref_fn callback
string-list: remove unused function print_string_list
strbuf.h: format according to coding guidelines
diff.c: pass sign_index to emit_line_ws_markup
submodule helper: convert relative URL to absolute URL if needed
builtin/submodule--helper: remove debugging leftover tracing
Stephen P. Smith (10):
wt-status.c: move has_unmerged earlier in the file
wt-status: rename commitable to committable
t7501: add test of "commit --dry-run --short"
wt-status.c: set the committable flag in the collect phase
roll wt_status_state into wt_status and populate in the collect phase
t2000: rename and combine checkout clash tests
t7509: cleanup description and filename
t7502: rename commit test script to comply with naming convention
t7500: rename commit tests script to comply with naming convention
t7501: rename commit test to comply with naming convention
Steve Hoelzer (1):
poll: use GetTickCount64() to avoid wrap-around issues
Steven Fernandez (1):
git-completion.bash: add completion for stash list
Strain, Roger L (4):
subtree: refactor split of a commit into standalone method
subtree: make --ignore-joins pay attention to adds
subtree: use commits before rejoins for splits
subtree: improve decision on merges kept in split
Sven Strickroth (1):
msvc: directly use MS version (_stricmp) of strcasecmp
Tao Qingyun (3):
refs: docstring typo
builtin/branch.c: remove useless branch_get
branch: trivial style fix
Taylor Blau (4):
transport.c: extract 'fill_alternate_refs_command'
transport.c: introduce core.alternateRefsCommand
transport.c: introduce core.alternateRefsPrefixes
Documentation/config.txt: fix typo in core.alternateRefsCommand
Thomas Gummerer (17):
rerere: unify error messages when read_cache fails
rerere: lowercase error messages
rerere: wrap paths in output in sq
rerere: mark strings for translation
rerere: add documentation for conflict normalization
rerere: fix crash with files rerere can't handle
rerere: only return whether a path has conflicts or not
rerere: factor out handle_conflict function
rerere: return strbuf from handle path
rerere: teach rerere to handle nested conflicts
rerere: recalculate conflict ID when unresolved conflict is committed
rerere: mention caveat about unmatched conflict markers
rerere: add note about files with existing conflict markers
.gitattributes: add conflict-marker-size for relevant files
linear-assignment: fix potential out of bounds memory access
t5551: move setup code inside test_expect blocks
t5551: compare sorted cookies files
Tim Schumacher (4):
Documentation/Makefile: make manpage-base-url.xsl generation quieter
alias: add support for aliases of an alias
alias: show the call history when an alias is looping
t0014: introduce an alias testing suite
Todd Zullinger (1):
Documentation: build technical/multi-pack-index
Torsten Bögershausen (5):
Make git_check_attr() a void function
path.c: char is not (always) signed
Upcast size_t variables to uintmax_t when printing
remote-curl.c: xcurl_off_t is not portable (on 32 bit platfoms)
t5601-99: Enable colliding file detection for MINGW
Uwe Kleine-König (1):
howto/using-merge-subtree: mention --allow-unrelated-histories
brian m. carlson (26):
t: add test functions to translate hash-related values
t0000: use hash translation table
t0000: update tests for SHA-256
t0002: abstract away SHA-1 specific constants
t0064: make hash size independent
t1006: make hash size independent
t1400: switch hard-coded object ID to variable
t1405: make hash size independent
t1406: make hash-size independent
t1407: make hash size independent
editorconfig: provide editor settings for Git developers
editorconfig: indicate settings should be kept in sync
pack-bitmap-write: use GIT_MAX_RAWSZ for allocation
builtin/repack: replace hard-coded constants
builtin/mktree: remove hard-coded constant
builtin/fetch-pack: remove constants with parse_oid_hex
pack-revindex: express constants in terms of the_hash_algo
packfile: express constants in terms of the_hash_algo
refs/packed-backend: express constants using the_hash_algo
upload-pack: express constants in terms of the_hash_algo
transport: use parse_oid_hex instead of a constant
tag: express constant in terms of the_hash_algo
apply: replace hard-coded constants
apply: rename new_sha1_prefix and old_sha1_prefix
submodule: make zero-oid comparison hash function agnostic
rerere: convert to use the_hash_algo
Ævar Arnfjörð Bjarmason (35):
fetch: change "branch" to "reference" in --force -h output
push tests: make use of unused $1 in test description
push tests: use spaces in interpolated string
fetch tests: add a test for clobbering tag behavior
push doc: remove confusing mention of remote merger
push doc: move mention of "tag <tag>" later in the prose
push doc: correct lies about how push refspecs work
fetch: document local ref updates with/without --force
fetch: stop clobbering existing tags without --force
fsck tests: setup of bogus commit object
fsck tests: add a test for no skipList input
fsck: document and test sorted skipList input
fsck: document and test commented & empty line skipList input
fsck: document that skipList input must be unabbreviated
fsck: add a performance test
fsck: support comments & empty lines in skipList
commit-graph write: add progress output
commit-graph verify: add progress output
config doc: add missing list separator for checkout.optimizeNewBranch
push doc: add spacing between two words
fetch doc: correct grammar in --force docs
gc: fix regression in 7b0f229222 impacting --quiet
gc doc: mention the commit-graph in the intro
pack-objects test: modernize style
pack-objects tests: don't leave test .git corrupt at end
index-pack tests: don't leave test repo dirty at end
i18n: make GETTEXT_POISON a runtime option
range-diff doc: add a section about output stability
range-diff: fix regression in passing along diff options
range-diff: make diff option behavior (e.g. --stat) consistent
push: change needlessly ambiguous example in error
rebase doc: document rebase.useBuiltin
tests: add a special setup where rebase.useBuiltin is off
read-cache: make the split index obey umask settings
advice: don't pointlessly suggest --convert-graft-file
Đoàn Trần Công Danh (1):
git-compat-util: prefer poll.h to sys/poll.h
^ permalink raw reply [relevance 3%]
* Re: t5570 shaky for anyone ?
2018-11-25 22:01 0% ` Thomas Gummerer
@ 2018-11-26 16:42 0% ` Jeff King
2018-12-20 16:41 0% ` [PATCH] t5570: drop racy test Thomas Gummerer
0 siblings, 1 reply; 71+ results
From: Jeff King @ 2018-11-26 16:42 UTC (permalink / raw)
To: Thomas Gummerer; +Cc: Torsten Bögershausen, Git Mailing List, szeder.dev
On Sun, Nov 25, 2018 at 10:01:38PM +0000, Thomas Gummerer wrote:
> On 11/25, Torsten Bögershausen wrote:
> > After running the "Git 2.20-rc1" testsuite here on a raspi,
> > the only TC that failed was t5570.
> > When the "grep" was run on daemon.log, the file was empty (?).
> > When inspecting it later, it was filled, and grep would have found
> > the "extended.attribute" it was looking for.
>
> I believe this has been reported before in
> https://public-inbox.org/git/1522783990.964448.1325338528.0D49CC15@webmail.messagingengine.com/,
> but it seems like the thread never ended with actually fixing it.
> Reading the first reply Peff seemed to be fine with just removing the
> test completely, which would be the easiest solution ;) Adding him to
> Cc: here.
Yes, I don't think there is a way to make this race-proof without
somehow convincing "cat" to flush (and let us know when it has). Which
really implies killing the daemon, and wait()ing on cat to process the
EOF and exit. And that makes the tests a lot more expensive if we have
to start the daemon for each snippet.
So I'm still fine with just dropping this test.
> > diff --git a/t/t5570-git-daemon.sh b/t/t5570-git-daemon.sh
> > index 7466aad111..e259fee0ed 100755
> > --- a/t/t5570-git-daemon.sh
> > +++ b/t/t5570-git-daemon.sh
> > @@ -192,6 +192,7 @@ test_expect_success 'daemon log records all attributes' '
> > GIT_OVERRIDE_VIRTUAL_HOST=localhost \
> > git -c protocol.version=1 \
> > ls-remote "$GIT_DAEMON_URL/interp.git" &&
> > + sleep 1 &&
> > grep -i extended.attribute daemon.log | cut -d" " -f2- >actual &&
> > test_cmp expect actual
> > '
> > ----------------
> > A slightly better approach may be to use a "sleep on demand":
> >
> > + ( grep -i -q extended.attribute daemon.log || sleep 1 ) &&
That doesn't really fix it, but just broadens the race window. I dunno.
Maybe that is enough in practice. We could do something like:
repeat_with_timeout () {
local i=0
while test $i -lt 10
do
"$@" && return 0
sleep 1
done
# no success even after 10 seconds
return 1
}
repeat_with_timeout grep -i extended.attribute daemon.log
to make the pattern a bit more obvious (and make it easy to extend the
window arbitrarily; surely 10s is enough?).
-Peff
^ permalink raw reply [relevance 0%]
* Re: t5570 shaky for anyone ?
2018-11-25 20:52 4% t5570 shaky for anyone ? Torsten Bögershausen
2018-11-25 22:01 0% ` Thomas Gummerer
@ 2018-11-25 22:22 0% ` SZEDER Gábor
1 sibling, 0 replies; 71+ results
From: SZEDER Gábor @ 2018-11-25 22:22 UTC (permalink / raw)
To: Torsten Bögershausen; +Cc: Git Mailing List, Jeff King
On Sun, Nov 25, 2018 at 09:52:23PM +0100, Torsten Bögershausen wrote:
> After running the "Git 2.20-rc1" testsuite here on a raspi,
> the only TC that failed was t5570.
> When the "grep" was run on daemon.log, the file was empty (?).
> When inspecting it later, it was filled, and grep would have found
> the "extended.attribute" it was looking for.
I think I saw the same failure on Travis CI already before 2.19, so
it's not a new issue. Here's the test's verbose output:
+ cat
+
+ GIT_OVERRIDE_VIRTUAL_HOST=localhost git -c protocol.version=1 ls-remote git://127.0.0.1:5570/interp.git
b6752e52dd867264d12240028003f21e3e1dccab HEAD
b6752e52dd867264d12240028003f21e3e1dccab refs/heads/master
+ cut -d -f2-
+ grep -i extended.attribute daemon.log
+ test_cmp expect actual
+ diff -u expect actual
--- expect 2018-06-12 10:06:50.758357927 +0000
+++ actual 2018-06-12 10:06:50.774365936 +0000
@@ -1,2 +0,0 @@
-Extended attribute "host": localhost
-Extended attribute "protocol": version=1
[10579] Connection from 127.0.0.1:45836
[10579] Extended attribute "host": localhost
[10579] Extended attribute "protocol": version=1
error: last command exited with $?=1
[10579] Request upload-pack for '/interp.git'
[10579] Interpolated dir '/usr/src/git/t/trash
dir.t5570/repo/localhost/interp.git'
[10462] [10579] Disconnected
not ok 21 - daemon log records all attributes
The thing is that 'git daemon's log is not written to 'daemon.log'
directly, but it goes through a fifo, which is read by a shell loop,
which then sends all log messages both to 'daemon.log' and to the test
script's standard error. So there is certainly a race between log
messages going through the fifo and the loop before reaching
'daemon.log' and 'git ls-remote' exiting and 'grep' opening
'daemon.log'.
> The following fixes it, but I am not sure if this is the ideal
> solution.
Currently this is the only test that looks at 'daemon.log', but if we
ever going to add another one, then that will be prone to the same
issue.
I wonder whether it's really that useful to have the daemon log in the
test script's output... if the log was sent directly to daemon log,
then the window for this race would be smaller, but still not
completely closed.
Anyway, I added Peff to Cc, since he added that whole fifo-shell-loop
thing.
> diff --git a/t/t5570-git-daemon.sh b/t/t5570-git-daemon.sh
> index 7466aad111..e259fee0ed 100755
> --- a/t/t5570-git-daemon.sh
> +++ b/t/t5570-git-daemon.sh
> @@ -192,6 +192,7 @@ test_expect_success 'daemon log records all attributes' '
> GIT_OVERRIDE_VIRTUAL_HOST=localhost \
> git -c protocol.version=1 \
> ls-remote "$GIT_DAEMON_URL/interp.git" &&
> + sleep 1 &&
> grep -i extended.attribute daemon.log | cut -d" " -f2- >actual &&
> test_cmp expect actual
> '
> ----------------
> A slightly better approach may be to use a "sleep on demand":
>
> + ( grep -i -q extended.attribute daemon.log || sleep 1 ) &&
>
^ permalink raw reply [relevance 0%]
* Re: t5570 shaky for anyone ?
2018-11-25 20:52 4% t5570 shaky for anyone ? Torsten Bögershausen
@ 2018-11-25 22:01 0% ` Thomas Gummerer
2018-11-26 16:42 0% ` Jeff King
2018-11-25 22:22 0% ` t5570 shaky for anyone ? SZEDER Gábor
1 sibling, 1 reply; 71+ results
From: Thomas Gummerer @ 2018-11-25 22:01 UTC (permalink / raw)
To: Torsten Bögershausen; +Cc: Git Mailing List, szeder.dev, Jeff King
On 11/25, Torsten Bögershausen wrote:
> After running the "Git 2.20-rc1" testsuite here on a raspi,
> the only TC that failed was t5570.
> When the "grep" was run on daemon.log, the file was empty (?).
> When inspecting it later, it was filled, and grep would have found
> the "extended.attribute" it was looking for.
I believe this has been reported before in
https://public-inbox.org/git/1522783990.964448.1325338528.0D49CC15@webmail.messagingengine.com/,
but it seems like the thread never ended with actually fixing it.
Reading the first reply Peff seemed to be fine with just removing the
test completely, which would be the easiest solution ;) Adding him to
Cc: here.
> The following fixes it, but I am not sure if this is the ideal
> solution.
>
>
> diff --git a/t/t5570-git-daemon.sh b/t/t5570-git-daemon.sh
> index 7466aad111..e259fee0ed 100755
> --- a/t/t5570-git-daemon.sh
> +++ b/t/t5570-git-daemon.sh
> @@ -192,6 +192,7 @@ test_expect_success 'daemon log records all attributes' '
> GIT_OVERRIDE_VIRTUAL_HOST=localhost \
> git -c protocol.version=1 \
> ls-remote "$GIT_DAEMON_URL/interp.git" &&
> + sleep 1 &&
> grep -i extended.attribute daemon.log | cut -d" " -f2- >actual &&
> test_cmp expect actual
> '
> ----------------
> A slightly better approach may be to use a "sleep on demand":
>
> + ( grep -i -q extended.attribute daemon.log || sleep 1 ) &&
>
^ permalink raw reply [relevance 0%]
* t5570 shaky for anyone ?
@ 2018-11-25 20:52 4% Torsten Bögershausen
2018-11-25 22:01 0% ` Thomas Gummerer
2018-11-25 22:22 0% ` t5570 shaky for anyone ? SZEDER Gábor
0 siblings, 2 replies; 71+ results
From: Torsten Bögershausen @ 2018-11-25 20:52 UTC (permalink / raw)
To: Git Mailing List, szeder.dev
After running the "Git 2.20-rc1" testsuite here on a raspi,
the only TC that failed was t5570.
When the "grep" was run on daemon.log, the file was empty (?).
When inspecting it later, it was filled, and grep would have found
the "extended.attribute" it was looking for.
The following fixes it, but I am not sure if this is the ideal
solution.
diff --git a/t/t5570-git-daemon.sh b/t/t5570-git-daemon.sh
index 7466aad111..e259fee0ed 100755
--- a/t/t5570-git-daemon.sh
+++ b/t/t5570-git-daemon.sh
@@ -192,6 +192,7 @@ test_expect_success 'daemon log records all attributes' '
GIT_OVERRIDE_VIRTUAL_HOST=localhost \
git -c protocol.version=1 \
ls-remote "$GIT_DAEMON_URL/interp.git" &&
+ sleep 1 &&
grep -i extended.attribute daemon.log | cut -d" " -f2- >actual &&
test_cmp expect actual
'
----------------
A slightly better approach may be to use a "sleep on demand":
+ ( grep -i -q extended.attribute daemon.log || sleep 1 ) &&
^ permalink raw reply related [relevance 4%]
* Re: Git for Windows v2.20.0-rc0, was Re: [ANNOUNCE] Git v2.20.0-rc0
2018-11-21 19:28 5% ` Bryan Turner
@ 2018-11-22 16:38 0% ` Jeff King
0 siblings, 0 replies; 71+ results
From: Jeff King @ 2018-11-22 16:38 UTC (permalink / raw)
To: Bryan Turner
Cc: Johannes Schindelin, Junio C Hamano, Git Users, git-for-windows,
git-packagers
On Wed, Nov 21, 2018 at 11:28:28AM -0800, Bryan Turner wrote:
> But that test code exists because Bitbucket Server provides a Java API
> [1][2] which allows third-party developers to easily build arbitrary
> Git commands to invoke for their own functionality. Setting
> `GitBranchCreateBuilder.reflog(true)` will trigger adding "-l" to the
> assembled "git branch" command. I've changed the code now so that it
> will use "--create-reflog" instead; however, because many of the
> Bitbucket Server add-ons on Marketplace [3], whether free or paid, are
> not open source, and because there are a significant number of
> in-house plugins that are not listed there, it's difficult to know how
> many might be affected. If I were to hazard a guess it would be
> _none_, but I've been surprised before. The end result is that the net
> impact is hard to predict--especially because Git on the server would
> need to be upgraded to 2.20.
Yeah, that is slightly worrisome. In some sense we can guess that
calling ".reflog(true)" is in the same league as our assumption of
"probably nobody is using -l in the first place", but it's one more
place that might have encouraged people into using it, even if it's a
noop.
> (In case you're curious why we used shorthand options, it's because of
> our Windows support. While "git branch" commands rarely, if ever, get
> very long, as a general rule we use shorthand options where they exist
> to keep our command lines shorter, to allow passing more options
> without hitting the hard limit (generally 32K) imposed by
> Windows--something we _have_ had issues with on other commands. For
> commands like "git diff", where it's not possible to pass in paths via
> stdin, every character matters.)
I follow your reasoning, though that is not the engineering decision I
would have made. The long-names tend to be more robust, and while saving
a few bytes might make a case work that would not otherwise, it is
really only delaying the inevitable. But hey, it's not my product. ;)
We probably should support --stdin in more places to cover situations
like this. Patches, welcome.
Also, I have noticed that performance with a large number of pathspecs
tends to be pretty poor, as we search them linearly. I wonder if you've
run into that, too (or maybe, coming from a Java world, you simply have
a small number of extremely long path names ;) ). A while ago I
experimented with putting non-wildcard pathspecs into a trie structure
that we could traverse while walking the actual trees to diff. I never
really polished it because having a huge number of pathspecs didn't seem
like a common use case.
> To try and protect against the unexpected, we have a Supported
> Platforms [4] page which lists Git versions that we've _explicitly
> tested_ with Bitbucket Server. 2.20 won't be marked tested until a
> future release, so the majority of installs will not use it with older
> versions of the system--but there's always that subset who ignore the
> documentation. (Since we do text parsing on Git output, subtle
> breakages do happen from time to time.)
>
> I would say it's _unlikely_ that we'll hear of any installations where
> all the conditions are met for this to come up:
> - Git 2.20
> - Bitbucket Server (without fixes)
> - Third-party add-on using `reflog(true)`
Thanks for laying this out (and again, thanks for testing and reporting
this before the release!).
I'm comfortable with continuing with the change in v2.20 at this point,
but I'm also totally fine with bumping it for another release. Your case
is about Bitbucket, but there may well be other scripts in the wild.
> It's really just that a) I was caught off guard by the change (my own
> fault for not reading the 2.19 announcement more carefully) and b)
> it's impossible for me to say with _certainty_ that it won't be an
> issue. I'd imagine that latter point is true of the change in general,
> though (it's not really possible to know what scripts it might break,
> and that's going to be true regardless of when the change actually
> gets released), and I'd agree that that shouldn't hold Git back from
> making useful improvements.
The advantage of bumping is that if you switch Bitbucket to
"--create-reflog" _now_, it's more likely to be deployed by the time the
Git change comes.
In theory that also helps people who may not have upgraded to v2.19 yet,
but I suspect in many cases people don't notice the warning at all
(because it's buried in some script output) and will only notice once
the breaking change ships. Then the deprecation period only gives us a
larger ability to say "I told you so...", but that is small satisfaction
to the person whose script was broken.
-Peff
^ permalink raw reply [relevance 0%]
* Re: Git for Windows v2.20.0-rc0, was Re: [ANNOUNCE] Git v2.20.0-rc0
@ 2018-11-21 19:28 5% ` Bryan Turner
2018-11-22 16:38 0% ` Jeff King
0 siblings, 1 reply; 71+ results
From: Bryan Turner @ 2018-11-21 19:28 UTC (permalink / raw)
To: Jeff King
Cc: Johannes Schindelin, Junio C Hamano, Git Users, git-for-windows,
git-packagers
On Wed, Nov 21, 2018 at 6:20 AM Jeff King <peff@peff.net> wrote:
>
> On Tue, Nov 20, 2018 at 03:17:07PM -0800, Bryan Turner wrote:
>
> > I've run 2.20.0-rc0 through the test matrix for Bitbucket Server on
> > both Linux and Windows, and the only failures were related to this
> > change:
> >
> > * "git branch -l <foo>" used to be a way to ask a reflog to be
> > created while creating a new branch, but that is no longer the
> > case. It is a short-hand for "git branch --list <foo>" now.
> >
> > Since this is an intentional change I suspect there's nothing to do
> > for it but patch Bitbucket Server and move on, but I'll confess it's a
> > little frustrating that the option was deprecated in 2.19 and then
> > immediately removed in the next minor release. Such a
> > backwards-incompatible change seems far more apt for a major release,
> > a perspective that's reinforced by having the change follow such a
> > brief deprecation period--2.19.0 was only tagged September 10th (in my
> > timezone), so it's been less than 3 months. (Looking at the git branch
> > documentation for 2.18.0 [1] shows nothing about this deprecation; the
> > messaging first appears in 2.19.0 [2]. To be honest, I didn't even
> > realize it was deprecated until now, when it's gone--our test suite is
> > automated, so the deprecation warning was not visible.)
>
> We did go a bit faster than usual, under the assumption that nobody's
> really using "-l". It has been the default since 2006.
>
> Can you tell us a little more about your invocation?
Our invocation is... A little difficult to nail down, if I'm honest.
Bitbucket Server code does not use "git branch -l" anywhere in its
_shipping_ code, only in its _test_ code.
But that test code exists because Bitbucket Server provides a Java API
[1][2] which allows third-party developers to easily build arbitrary
Git commands to invoke for their own functionality. Setting
`GitBranchCreateBuilder.reflog(true)` will trigger adding "-l" to the
assembled "git branch" command. I've changed the code now so that it
will use "--create-reflog" instead; however, because many of the
Bitbucket Server add-ons on Marketplace [3], whether free or paid, are
not open source, and because there are a significant number of
in-house plugins that are not listed there, it's difficult to know how
many might be affected. If I were to hazard a guess it would be
_none_, but I've been surprised before. The end result is that the net
impact is hard to predict--especially because Git on the server would
need to be upgraded to 2.20.
(In case you're curious why we used shorthand options, it's because of
our Windows support. While "git branch" commands rarely, if ever, get
very long, as a general rule we use shorthand options where they exist
to keep our command lines shorter, to allow passing more options
without hitting the hard limit (generally 32K) imposed by
Windows--something we _have_ had issues with on other commands. For
commands like "git diff", where it's not possible to pass in paths via
stdin, every character matters.)
To try and protect against the unexpected, we have a Supported
Platforms [4] page which lists Git versions that we've _explicitly
tested_ with Bitbucket Server. 2.20 won't be marked tested until a
future release, so the majority of installs will not use it with older
versions of the system--but there's always that subset who ignore the
documentation. (Since we do text parsing on Git output, subtle
breakages do happen from time to time.)
I would say it's _unlikely_ that we'll hear of any installations where
all the conditions are met for this to come up:
- Git 2.20
- Bitbucket Server (without fixes)
- Third-party add-on using `reflog(true)`
It's really just that a) I was caught off guard by the change (my own
fault for not reading the 2.19 announcement more carefully) and b)
it's impossible for me to say with _certainty_ that it won't be an
issue. I'd imagine that latter point is true of the change in general,
though (it's not really possible to know what scripts it might break,
and that's going to be true regardless of when the change actually
gets released), and I'd agree that that shouldn't hold Git back from
making useful improvements.
Thanks for your time!
Bryan
[1] https://docs.atlassian.com/bitbucket-server/javadoc/5.16.0/git-api/reference/com/atlassian/bitbucket/scm/git/command/GitScmCommandBuilder.html
[2] https://docs.atlassian.com/bitbucket-server/javadoc/5.16.0/git-api/reference/com/atlassian/bitbucket/scm/git/command/branch/GitBranchCreateBuilder.html
[3] https://marketplace.atlassian.com/addons/app/bitbucket
[4] https://confluence.atlassian.com/bitbucketserver/supported-platforms-776640981.html#Supportedplatforms-dvcsDVCS
>
> We still have time to avoid the change for this release. And this early
> testing of master and release candidates is wonderful exactly to get
> this kind of feedback before it's too late.
>
> -Peff
^ permalink raw reply [relevance 5%]
* [ANNOUNCE] Git v2.20.0-rc1
@ 2018-11-21 15:20 3% Junio C Hamano
0 siblings, 0 replies; 71+ results
From: Junio C Hamano @ 2018-11-21 15:20 UTC (permalink / raw)
To: git; +Cc: Linux Kernel, git-packagers
A release candidate Git v2.20.0-rc1 is now available for testing
at the usual places. It is comprised of 915 non-merge commits
since v2.19.0, contributed by 73 people, 24 of which are new faces.
The tarballs are found at:
https://www.kernel.org/pub/software/scm/git/testing/
The following public repositories all have a copy of the
'v2.20.0-rc1' tag and the 'master' branch that the tag points at:
url = https://kernel.googlesource.com/pub/scm/git/git
url = git://repo.or.cz/alt-git.git
url = https://github.com/gitster/git
New contributors whose contributions weren't in v2.19.0 are as follows.
Welcome to the Git development community!
Aaron Lindsay, Alexander Pyhalov, Anton Serbulov, Brendan
Forster, Carlo Marcelo Arenas Belón, Daniels Umanovskis, David
Zych, Đoàn Trần Công Danh, Frederick Eaton, James Knight,
Jann Horn, Joshua Watt, Loo Rong Jie, Lucas De Marchi, Matthew
DeVore, Mihir Mehta, Nickolai Belakovski, Roger Strain, Sam
McKelvie, Saulius Gurklys, Shulhan, Steven Fernandez, Strain,
Roger L, and Tim Schumacher.
Returning contributors who helped this release are as follows.
Thanks for your continued support.
Ævar Arnfjörð Bjarmason, Alban Gruin, Andreas Gruenbacher,
Andreas Heiduk, Antonio Ospite, Ben Peart, Brandon Williams,
brian m. carlson, Christian Couder, Christian Hesse, Denton Liu,
Derrick Stolee, Elijah Newren, Eric Sunshine, Jeff Hostetler,
Jeff King, Johannes Schindelin, Johannes Sixt, Jonathan Nieder,
Jonathan Tan, Josh Steadmon, Junio C Hamano, Karsten Blees,
Luke Diamand, Martin Ågren, Max Kirillov, Michael Witten,
Michał Górny, Nguyễn Thái Ngọc Duy, Noam Postavsky,
Olga Telezhnaya, Phillip Wood, Pratik Karki, Rafael Ascensão,
Ralf Thielow, Ramsay Jones, Rasmus Villemoes, René Scharfe,
Sebastian Staudt, Stefan Beller, Stephen P. Smith, Steve Hoelzer,
SZEDER Gábor, Tao Qingyun, Taylor Blau, Thomas Gummerer,
Todd Zullinger, Torsten Bögershausen, and Uwe Kleine-König.
----------------------------------------------------------------
Git 2.20 Release Notes (draft)
==============================
Backward Compatibility Notes
----------------------------
* "git branch -l <foo>" used to be a way to ask a reflog to be
created while creating a new branch, but that is no longer the
case. It is a short-hand for "git branch --list <foo>" now.
* "git push" into refs/tags/* hierarchy is rejected without getting
forced, but "git fetch" (misguidedly) used the "fast forwarding"
rule used for the refs/heads/* hierarchy; this has been corrected,
which means some fetches of tags that did not fail with older
version of Git will fail without "--force" with this version.
* "git help -a" now gives verbose output (same as "git help -av").
Those who want the old output may say "git help --no-verbose -a"..
* "git cpn --help", when "cpn" is an alias to, say, "cherry-pick -n",
reported only the alias expansion of "cpn" in earlier versions of
Git. It now runs "git cherry-pick --help" to show the manual page
of the command, while sending the alias expansion to the standard
error stream.
* "git send-email" learned to grab address-looking string on any
trailer whose name ends with "-by". This is a backward-incompatible
change. Adding "--suppress-cc=misc-by" on the command line, or
setting sendemail.suppresscc configuration variable to "misc-by",
can be used to disable this behaviour.
Updates since v2.19
-------------------
UI, Workflows & Features
* Running "git clone" against a project that contain two files with
pathnames that differ only in cases on a case insensitive
filesystem would result in one of the files lost because the
underlying filesystem is incapable of holding both at the same
time. An attempt is made to detect such a case and warn.
* "git checkout -b newbranch [HEAD]" should not have to do as much as
checking out a commit different from HEAD. An attempt is made to
optimize this special case.
* "git rev-list --stdin </dev/null" used to be an error; it now shows
no output without an error. "git rev-list --stdin --default HEAD"
still falls back to the given default when nothing is given on the
standard input.
* Lift code from GitHub to restrict delta computation so that an
object that exists in one fork is not made into a delta against
another object that does not appear in the same forked repository.
* "git format-patch" learned new "--interdiff" and "--range-diff"
options to explain the difference between this version and the
previous attempt in the cover letter (or after the three-dashes as
a comment).
* "git mailinfo" used in "git am" learned to make a best-effort
recovery of a patch corrupted by MUA that sends text/plain with
format=flawed option.
(merge 3aa4d81f88 rs/mailinfo-format-flowed later to maint).
* The rules used by "git push" and "git fetch" to determine if a ref
can or cannot be updated were inconsistent; specifically, fetching
to update existing tags were allowed even though tags are supposed
to be unmoving anchoring points. "git fetch" was taught to forbid
updates to existing tags without the "--force" option.
* "git multi-pack-index" learned to detect corruption in the .midx
file it uses, and this feature has been integrated into "git fsck".
* Generation of (experimental) commit-graph files have so far been
fairly silent, even though it takes noticeable amount of time in a
meaningfully large repository. The users will now see progress
output.
* The minimum version of Windows supported by Windows port of Git is
now set to Vista.
* The completion script (in contrib/) learned to complete a handful of
options "git stash list" command takes.
* The completion script (in contrib/) learned that "git fetch
--multiple" only takes remote names as arguments and no refspecs.
* "git status" learns to show progress bar when refreshing the index
takes a long time.
(merge ae9af12287 nd/status-refresh-progress later to maint).
* "git help -a" and "git help -av" give different pieces of
information, and generally the "verbose" version is more friendly
to the new users. "git help -a" by default now uses the more
verbose output (with "--no-verbose", you can go back to the
original). Also "git help -av" now lists aliases and external
commands, which it did not used to.
* Unlike "grep", "git grep" by default recurses to the whole tree.
The command learned "git grep --recursive" option, so that "git
grep --no-recursive" can serve as a synonym to setting the
max-depth to 0.
* When pushing into a repository that borrows its objects from an
alternate object store, "git receive-pack" that responds to the
push request on the other side lists the tips of refs in the
alternate to reduce the amount of objects transferred. This
sometimes is detrimental when the number of refs in the alternate
is absurdly large, in which case the bandwidth saved in potentially
fewer objects transferred is wasted in excessively large ref
advertisement. The alternate refs that are advertised are now
configurable with a pair of configuration variables.
* "git cmd --help" when "cmd" is aliased used to only say "cmd is
aliased to ...". Now it shows that to the standard error stream
and runs "git $cmd --help" where $cmd is the first word of the
alias expansion.
* The documentation of "git gc" has been updated to mention that it
is no longer limited to "pruning away crufts" but also updates
ancillary files like commit-graph as a part of repository
optimization.
* "git p4 unshelve" improvements.
* The logic to select the default user name and e-mail on Windows has
been improved.
(merge 501afcb8b0 js/mingw-default-ident later to maint).
* The "rev-list --filter" feature learned to exclude all trees via
"tree:0" filter.
* "git send-email" learned to grab address-looking string on any
trailer whose name ends with "-by"; --suppress-cc=misc-by on the
command line, or setting sendemail.suppresscc configuration
variable to "misc-by", can be used to disable this behaviour.
* Developer builds now uses -Wunused-function compilation option.
* One of our CI tests to run with "unusual/experimental/random"
settings now also uses commit-graph and midx.
* "git mergetool" learned to take the "--[no-]gui" option, just like
"git difftool" does.
* "git rebase -i" learned a new insn, 'break', that the user can
insert in the to-do list. Upon hitting it, the command returns
control back to the user.
* New "--pretty=format:" placeholders %GF and %GP that show the GPG
key fingerprints have been invented.
* On platforms with recent cURL library, http.sslBackend configuration
variable can be used to choose a different SSL backend at runtime.
The Windows port uses this mechanism to switch between OpenSSL and
Secure Channel while talking over the HTTPS protocol.
* "git send-email" learned to disable SMTP authentication via the
"--smtp-auth=none" option, even when the smtp username is given
(which turns the authentication on by default).
* A fourth class of configuration files (in addition to the
traditional "system wide", "per user in the $HOME directory" and
"per repository in the $GIT_DIR/config") has been introduced so
that different worktrees that share the same repository (hence the
same $GIT_DIR/config file) can use different customization.
* A pattern with '**' that does not have a slash on either side used
to be an invalid one, but the code now treats such double-asterisks
the same way as two normal asterisks that happen to be adjacent to
each other.
(merge e5bbe09e88 nd/wildmatch-double-asterisk later to maint).
* The "--no-patch" option, which can be used to get a high-level
overview without the actual line-by-line patch difference shown, of
the "range-diff" command was earlier broken, which has been
corrected.
* The recently merged "rebase in C" has an escape hatch to use the
scripted version when necessary, but it hasn't been documented,
which has been corrected.
Performance, Internal Implementation, Development Support etc.
* When there are too many packfiles in a repository (which is not
recommended), looking up an object in these would require
consulting many pack .idx files; a new mechanism to have a single
file that consolidates all of these .idx files is introduced.
* "git submodule update" is getting rewritten piece-by-piece into C.
* The code for computing history reachability has been shuffled,
obtained a bunch of new tests to cover them, and then being
improved.
* The unpack_trees() API used in checking out a branch and merging
walks one or more trees along with the index. When the cache-tree
in the index tells us that we are walking a tree whose flattened
contents is known (i.e. matches a span in the index), as linearly
scanning a span in the index is much more efficient than having to
open tree objects recursively and listing their entries, the walk
can be optimized, which has been done.
* When creating a thin pack, which allows objects to be made into a
delta against another object that is not in the resulting pack but
is known to be present on the receiving end, the code learned to
take advantage of the reachability bitmap; this allows the server
to send a delta against a base beyond the "boundary" commit.
* spatch transformation to replace boolean uses of !hashcmp() to
newly introduced oideq() is added, and applied, to regain
performance lost due to support of multiple hash algorithms.
* Fix a bug in which the same path could be registered under multiple
worktree entries if the path was missing (for instance, was removed
manually). Also, as a convenience, expand the number of cases in
which --force is applicable.
* Split Documentation/config.txt for easier maintenance.
(merge 6014363f0b nd/config-split later to maint).
* Test helper binaries clean-up.
(merge c9a1f4161f nd/test-tool later to maint).
* Various tests have been updated to make it easier to swap the
hash function used for object identification.
(merge ae0c89d41b bc/hash-independent-tests later to maint).
* Update fsck.skipList implementation and documentation.
(merge 371a655074 ab/fsck-skiplist later to maint).
* An alias that expands to another alias has so far been forbidden,
but now it is allowed to create such an alias.
* Various test scripts have been updated for style and also correct
handling of exit status of various commands.
* "gc --auto" ended up calling exit(-1) upon error, which has been
corrected to use exit(1). Also the error reporting behaviour when
daemonized has been updated to exit with zero status when stopping
due to a previously discovered error (which implies there is no
point running gc to improve the situation); we used to exit with
failure in such a case.
* Various codepaths in the core-ish part learned to work on an
arbitrary in-core index structure, not necessarily the default
instance "the_index".
(merge b3c7eef9b0 nd/the-index later to maint).
* Code clean-up in the internal machinery used by "git status" and
"git commit --dry-run".
(merge 73ba5d78b4 ss/wt-status-committable later to maint).
* Some environment variables that control the runtime options of Git
used during tests are getting renamed for consistency.
(merge 4231d1ba99 bp/rename-test-env-var later to maint).
* A pair of new extensions to the index file have been introduced.
They allow the index file to be read in parallel for performance.
* The oidset API was built on top of the oidmap API which in turn is
on the hashmap API. Replace the implementation to build on top of
the khash API and gain performance.
* Over some transports, fetching objects with an exact commit object
name can be done without first seeing the ref advertisements. The
code has been optimized to exploit this.
* In a partial clone that will lazily be hydrated from the
originating repository, we generally want to avoid "does this
object exist (locally)?" on objects that we deliberately omitted
when we created the clone. The cache-tree codepath (which is used
to write a tree object out of the index) however insisted that the
object exists, even for paths that are outside of the partial
checkout area. The code has been updated to avoid such a check.
* To help developers, an EditorConfig file that attempts to follow
the project convention has been added.
(merge b548d698a0 bc/editorconfig later to maint).
* The result of coverage test can be combined with "git blame" to
check the test coverage of code introduced recently with a new
'coverage-diff' tool (in contrib/).
(merge 783faedd65 ds/coverage-diff later to maint).
* An experiment to fuzz test a few areas, hopefully we can gain more
coverage to various areas.
* More codepaths are moving away from hardcoded hash sizes.
* The way the Windows port figures out the current directory has been
improved.
* The way DLLs are loaded on the Windows port has been improved.
* Some tests have been reorganized and renamed; "ls t/" now gives a
better overview of what is tested for these scripts than before.
* "git rebase" and "git rebase -i" have been reimplemented in C.
* Windows port learned to use nano-second resolution file timestamps.
* The overly large Documentation/config.txt file have been split into
million little pieces. This potentially allows each individual piece
included into the manual page of the command it affects more easily.
* Replace three string-list instances used as look-up tables in "git
fetch" with hashmaps.
* Unify code to read the author-script used in "git am" and the
commands that use the sequencer machinery, e.g. "git rebase -i".
* In preparation to the day when we can deprecate and remove the
"rebase -p", make sure we can skip and later remove tests for
it.
* The history traversal used to implement the tag-following has been
optimized by introducing a new helper.
* The helper function to refresh the cached stat information in the
in-core index has learned to perform the lstat() part of the
operation in parallel on multi-core platforms.
* The code to traverse objects for reachability, used to decide what
objects are unreferenced and expendable, have been taught to also
consider per-worktree refs of other worktrees as starting points to
prevent data loss.
* "git add" needs to internally run "diff-files" equivalent, and the
codepath learned the same optimization as "diff-files" has to run
lstat(2) in parallel to find which paths have been updated in the
working tree.
* The procedure to install dependencies before testing at Travis CI
is getting revamped for both simplicity and flexibility, taking
advantage of the recent move to the vm-based environment.
* The support for format-patch (and send-email) by the command-line
completion script (in contrib/) has been simplified a bit.
* The revision walker machinery learned to take advantage of the
commit generation numbers stored in the commit-graph file.
* The codebase has been cleaned up to reduce "#ifndef NO_PTHREADS".
* The way -lcurl library gets linked has been simplified by taking
advantage of the fact that we can just ask curl-config command how.
* Various functions have been audited for "-Wunused-parameter" warnings
and bugs in them got fixed.
* A sanity check for start-up sequence has been added in the config
API codepath.
* The build procedure to link for fuzzing test has been made
customizable with a new Makefile variable.
* The way "git rebase" parses and forwards the command line options
meant for underlying "git am" has been revamped, which fixed for
options with parameters that were not passed correctly.
* Our testing framework uses a special i18n "poisoned localization"
feature to find messages that ought to stay constant but are
incorrectly marked to be translated. This feature has been made
into a runtime option (it used to be a compile-time option).
* "git push" used to check ambiguities between object-names and
refnames while processing the list of refs' old and new values,
which was unnecessary (as it knew that it is feeding raw object
names). This has been optimized out.
* The xcurl_off_t() helper function is used to cast size_t to
curl_off_t, but some compilers gave warnings against the code to
ensure the casting is done without wraparound, when size_t is
narrower than curl_off_t. This warning has been squelched.
* Code preparation to replace ulong vars with size_t vars where
appropriate continues.
* The "test installed Git" mode of our test suite has been updated to
work better.
* A coding convention around the Coccinelle semantic patches to have
two classes to ease code migration process has been proposed and
its support has been added to the Makefile.
Fixes since v2.19
-----------------
* "git interpret-trailers" and its underlying machinery had a buggy
code that attempted to ignore patch text after commit log message,
which triggered in various codepaths that will always get the log
message alone and never get such an input.
(merge 66e83d9b41 jk/trailer-fixes later to maint).
* Malformed or crafted data in packstream can make our code attempt
to read or write past the allocated buffer and abort, instead of
reporting an error, which has been fixed.
* "git rebase -i" did not clear the state files correctly when a run
of "squash/fixup" is aborted and then the user manually amended the
commit instead, which has been corrected.
(merge 10d2f35436 js/rebase-i-autosquash-fix later to maint).
* When fsmonitor is in use, after operation on submodules updates
.gitmodules, we lost track of the fact that we did so and relied on
stale fsmonitor data.
(merge 43f1180814 bp/mv-submodules-with-fsmonitor later to maint).
* Fix for a long-standing bug that leaves the index file corrupt when
it shrinks during a partial commit.
(merge 6c003d6ffb jk/reopen-tempfile-truncate later to maint).
* Further fix for O_APPEND emulation on Windows
(merge eeaf7ddac7 js/mingw-o-append later to maint).
* A corner case bugfix in "git rerere" code.
(merge ad2bf0d9b4 en/rerere-multi-stage-1-fix later to maint).
* "git add ':(attr:foo)'" is not supported and is supposed to be
rejected while the command line arguments are parsed, but we fail
to reject such a command line upfront.
(merge 84d938b732 nd/attr-pathspec-fix later to maint).
* Recent update broke the reachability algorithm when refs (e.g.
tags) that point at objects that are not commit were involved,
which has been fixed.
* "git rebase" etc. in Git 2.19 fails to abort when given an empty
commit log message as result of editing, which has been corrected.
(merge a3ec9eaf38 en/sequencer-empty-edit-result-aborts later to maint).
* The code to backfill objects in lazily cloned repository did not
work correctly, which has been corrected.
(merge e68302011c jt/lazy-object-fetch-fix later to maint).
* Update error messages given by "git remote" and make them consistent.
(merge 5025425dff ms/remote-error-message-update later to maint).
* "git update-ref" learned to make both "--no-deref" and "--stdin"
work at the same time.
(merge d345e9fbe7 en/update-ref-no-deref-stdin later to maint).
* Recently added "range-diff" had a corner-case bug to cause it
segfault, which has been corrected.
(merge e467a90c7a tg/range-diff-corner-case-fix later to maint).
* The recently introduced commit-graph auxiliary data is incompatible
with mechanisms such as replace & grafts that "breaks" immutable
nature of the object reference relationship. Disable optimizations
based on its use (and updating existing commit-graph) when these
incompatible features are in use in the repository.
(merge 829a321569 ds/commit-graph-with-grafts later to maint).
* The mailmap file update.
(merge 255eb03edf jn/mailmap-update later to maint).
* The code in "git status" sometimes hit an assertion failure. This
was caused by a structure that was reused without cleaning the data
used for the first run, which has been corrected.
(merge 3e73cc62c0 en/status-multiple-renames-to-the-same-target-fix later to maint).
* "git fetch $repo $object" in a partial clone did not correctly
fetch the asked-for object that is referenced by an object in
promisor packfile, which has been fixed.
* A corner-case bugfix.
(merge c5cbb27cb5 sm/show-superproject-while-conflicted later to maint).
* Various fixes to "diff --color-moved-ws".
* A partial clone that is configured to lazily fetch missing objects
will on-demand issue a "git fetch" request to the originating
repository to fill not-yet-obtained objects. The request has been
optimized for requesting a tree object (and not the leaf blob
objects contained in it) by telling the originating repository that
no blobs are needed.
(merge 4c7f9567ea jt/non-blob-lazy-fetch later to maint).
* The codepath to support the experimental split-index mode had
remaining "racily clean" issues fixed.
(merge 4c490f3d32 sg/split-index-racefix later to maint).
* "git log --graph" showing an octopus merge sometimes miscounted the
number of display columns it is consuming to show the merge and its
parent commits, which has been corrected.
(merge 04005834ed np/log-graph-octopus-fix later to maint).
* "git range-diff" did not work well when the compared ranges had
changes in submodules and the "--submodule=log" was used.
* The implementation of run_command() API on the UNIX platforms had a
bug that caused a command not on $PATH to be found in the current
directory.
(merge f67b980771 jk/run-command-notdot later to maint).
* A mutex used in "git pack-objects" were not correctly initialized
and this caused "git repack" to dump core on Windows.
(merge 34204c8166 js/pack-objects-mutex-init-fix later to maint).
* Under certain circumstances, "git diff D:/a/b/c D:/a/b/d" on
Windows would strip initial parts from the paths because they
were not recognized as absolute, which has been corrected.
(merge ffd04e92e2 js/diff-notice-has-drive-prefix later to maint).
* The receive.denyCurrentBranch=updateInstead codepath kicked in even
when the push should have been rejected due to other reasons, such
as it does not fast-forward or the update-hook rejects it, which
has been corrected.
(merge b072a25fad jc/receive-deny-current-branch-fix later to maint).
* The logic to determine the archive type "git archive" uses did not
correctly kick in for "git archive --remote", which has been
corrected.
* "git repack" in a shallow clone did not correctly update the
shallow points in the repository, leading to a repository that
does not pass fsck.
(merge 5dcfbf564c js/shallow-and-fetch-prune later to maint).
* Some codepaths failed to form a proper URL when .gitmodules record
the URL to a submodule repository as relative to the repository of
superproject, which has been corrected.
(merge e0a862fdaf sb/submodule-url-to-absolute later to maint).
* "git fetch" over protocol v2 into a shallow repository failed to
fetch full history behind a new tip of history that was diverged
before the cut-off point of the history that was previously fetched
shallowly.
* The command line completion machinery (in contrib/) has been
updated to allow the completion script to tweak the list of options
that are reported by the parse-options machinery correctly.
(merge 276b49ff34 nd/completion-negation later to maint).
* Operations on promisor objects make sense in the context of only a
small subset of the commands that internally use the revisions
machinery, but the "--exclude-promisor-objects" option were taken
and led to nonsense results by commands like "log", to which it
didn't make much sense. This has been corrected.
(merge 669b1d2aae md/exclude-promisor-objects-fix later to maint).
* The "container" mode of TravisCI is going away. Our .travis.yml
file is getting prepared for the transition.
(merge 32ee384be8 ss/travis-ci-force-vm-mode later to maint).
* Our test scripts can now take the '-V' option as a synonym for the
'--verbose-log' option.
(merge a5f52c6dab sg/test-verbose-log later to maint).
* A regression in Git 2.12 era made "git fsck" fall into an infinite
loop while processing truncated loose objects.
(merge 18ad13e5b2 jk/detect-truncated-zlib-input later to maint).
* "git ls-remote $there foo" was broken by recent update for the
protocol v2 and stopped showing refs that match 'foo' that are not
refs/{heads,tags}/foo, which has been fixed.
(merge 6a139cdd74 jk/proto-v2-ref-prefix-fix later to maint).
* Additional comment on a tricky piece of code to help developers.
(merge 0afbe3e806 jk/stream-pack-non-delta-clarification later to maint).
* A couple of tests used to leave the repository in a state that is
deliberately corrupt, which have been corrected.
(merge aa984dbe5e ab/pack-tests-cleanup later to maint).
* The submodule support has been updated to read from the blob at
HEAD:.gitmodules when the .gitmodules file is missing from the
working tree.
(merge 2b1257e463 ao/submodule-wo-gitmodules-checked-out later to maint).
* "git fetch" was a bit loose in parsing responses from the other side
when talking over the protocol v2.
* "git rev-parse --exclude=* --branches --branches" (i.e. first
saying "add only things that do not match '*' out of all branches"
and then adding all branches, without any exclusion this time")
worked as expected, but "--exclude=* --all --all" did not work the
same way, which has been fixed.
(merge 5221048092 ag/rev-parse-all-exclude-fix later to maint).
* "git send-email --transfer-encoding=..." in recent versions of Git
sometimes produced an empty "Content-Transfer-Encoding:" header,
which has been corrected.
(merge 3c88e46f1a al/send-email-auto-cte-fixup later to maint).
* The interface into "xdiff" library used to discover the offset and
size of a generated patch hunk by first formatting it into the
textual hunk header "@@ -n,m +k,l @@" and then parsing the numbers
out. A new interface has been introduced to allow callers a more
direct access to them.
(merge 5eade0746e jk/xdiff-interface later to maint).
* Pathspec matching against a tree object were buggy when negative
pathspec elements were involved, which has been fixed.
(merge b7845cebc0 nd/tree-walk-path-exclusion later to maint).
* "git merge" and "git pull" that merges into an unborn branch used
to completely ignore "--verify-signatures", which has been
corrected.
(merge 01a31f3bca jk/verify-sig-merge-into-void later to maint).
* "git rebase --autostash" did not correctly re-attach the HEAD at times.
* "rev-parse --exclude=<pattern> --branches=<pattern>" etc. did not
quite work, which has been corrected.
(merge 9ab9b5df0e ra/rev-parse-exclude-glob later to maint).
* When editing a patch in a "git add -i" session, a hunk could be
made to no-op. The "git apply" program used to reject a patch with
such a no-op hunk to catch user mistakes, but it is now updated to
explicitly allow a no-op hunk in an edited patch.
(merge 22cb3835b9 js/apply-recount-allow-noop later to maint).
* The URL to an MSDN page in a comment has been updated.
(merge 2ef2ae2917 js/mingw-msdn-url later to maint).
* "git ls-remote --sort=<thing>" can feed an object that is not yet
available into the comparison machinery and segfault, which has
been corrected to check such a request upfront and reject it.
* When "git bundle" aborts due to an empty commit ranges
(i.e. resulting in an empty pack), it left a file descriptor to an
lockfile open, which resulted in leftover lockfile on Windows where
you cannot remove a file with an open file descriptor. This has
been corrected.
(merge 2c8ee1f53c jk/close-duped-fd-before-unlock-for-bundle later to maint).
* "git format-patch --stat=<width>" can be used to specify the width
used by the diffstat (shown in the cover letter).
(merge 284aeb7e60 nd/format-patch-cover-letter-stat-width later to maint).
* The way .git/index and .git/sharedindex* files were initially
created gave these files different perm bits until they were
adjusted for shared repository settings. This was made consistent.
(merge c9d6c78870 cc/shared-index-permbits later to maint).
* Code cleanup, docfix, build fix, etc.
(merge 96a7501aad ts/doc-build-manpage-xsl-quietly later to maint).
(merge b9b07efdb2 tg/conflict-marker-size later to maint).
(merge fa0aeea770 sg/doc-trace-appends later to maint).
(merge d64324cb60 tb/void-check-attr later to maint).
(merge c3b9bc94b9 en/double-semicolon-fix later to maint).
(merge 79336116f5 sg/t3701-tighten-trace later to maint).
(merge 801fa63a90 jk/dev-build-format-security later to maint).
(merge 0597dd62ba sb/string-list-remove-unused later to maint).
(merge db2d36fad8 bw/protocol-v2 later to maint).
(merge 456d7cd3a9 sg/split-index-test later to maint).
(merge 7b6057c852 tq/refs-internal-comment-fix later to maint).
(merge 29e8dc50ad tg/t5551-with-curl-7.61.1 later to maint).
(merge 55f6bce2c9 fe/doc-updates later to maint).
(merge 7987d2232d jk/check-everything-connected-is-long-gone later to maint).
(merge 4ba3c9be47 dz/credential-doc-url-matching-rules later to maint).
(merge 4c399442f7 ma/commit-graph-docs later to maint).
(merge fc0503b04e ma/t1400-undebug-test later to maint).
(merge e56b53553a nd/packobjectshook-doc-fix later to maint).
(merge c56170a0c4 ma/mailing-list-address-in-git-help later to maint).
(merge 6e8fc70fce rs/sequencer-oidset-insert-avoids-dups later to maint).
(merge ad0b8f9575 mw/doc-typofixes later to maint).
(merge d9f079ad1a jc/how-to-document-api later to maint).
(merge b1492bf315 ma/t7005-bash-workaround later to maint).
(merge ac1f98a0df du/rev-parse-is-plumbing later to maint).
(merge ca8ed443a5 mm/doc-no-dashed-git later to maint).
(merge ce366a8144 du/get-tar-commit-id-is-plumbing later to maint).
(merge 61018fe9e0 du/cherry-is-plumbing later to maint).
(merge c7e5fe79b9 sb/strbuf-h-update later to maint).
(merge 8d2008196b tq/branch-create-wo-branch-get later to maint).
(merge 2e3c894f4b tq/branch-style-fix later to maint).
(merge c5d844af9c sg/doc-show-branch-typofix later to maint).
(merge 081d91618b ah/doc-updates later to maint).
(merge b84c783882 jc/cocci-preincr later to maint).
(merge 5e495f8122 uk/merge-subtree-doc-update later to maint).
(merge aaaa881822 jk/uploadpack-packobjectshook-fix later to maint).
(merge 3063477445 tb/char-may-be-unsigned later to maint).
(merge 8c64bc9420 sg/test-rebase-editor-fix later to maint).
(merge 71571cd7d6 ma/sequencer-do-reset-saner-loop-termination later to maint).
(merge 9a4cb8781e cb/notes-freeing-always-null-fix later to maint).
----------------------------------------------------------------
Changes since v2.19.0 are as follows:
Aaron Lindsay (1):
send-email: avoid empty transfer encoding header
Alban Gruin (21):
sequencer: make three functions and an enum from sequencer.c public
rebase -i: rewrite append_todo_help() in C
editor: add a function to launch the sequence editor
rebase -i: rewrite the edit-todo functionality in C
sequencer: add a new function to silence a command, except if it fails
rebase -i: rewrite setup_reflog_action() in C
rebase -i: rewrite checkout_onto() in C
sequencer: refactor append_todo_help() to write its message to a buffer
sequencer: change the way skip_unnecessary_picks() returns its result
t3404: todo list with commented-out commands only aborts
rebase -i: rewrite complete_action() in C
rebase -i: remove unused modes and functions
rebase -i: implement the logic to initialize $revisions in C
rebase -i: rewrite the rest of init_revisions_and_shortrevisions() in C
rebase -i: rewrite write_basic_state() in C
rebase -i: rewrite init_basic_state() in C
rebase -i: implement the main part of interactive rebase as a builtin
rebase--interactive2: rewrite the submodes of interactive rebase in C
rebase -i: remove git-rebase--interactive.sh
rebase -i: move rebase--helper modes to rebase--interactive
p3400: replace calls to `git checkout -b' by `git checkout -B'
Alexander Pyhalov (1):
t7005-editor: quote filename to fix whitespace-issue
Andreas Gruenbacher (1):
rev-parse: clear --exclude list after 'git rev-parse --all'
Andreas Heiduk (6):
doc: clarify boundaries of 'git worktree list --porcelain'
doc: fix ASCII art tab spacing
doc: fix inappropriate monospace formatting
doc: fix descripion for 'git tag --format'
doc: fix indentation of listing blocks in gitweb.conf.txt
doc: fix formatting in git-update-ref
Anton Serbulov (1):
mingw: fix getcwd when the parent directory cannot be queried
Antonio Ospite (10):
submodule: add a print_config_from_gitmodules() helper
submodule: factor out a config_set_in_gitmodules_file_gently function
t7411: merge tests 5 and 6
t7411: be nicer to future tests and really clean things up
submodule--helper: add a new 'config' subcommand
submodule: use the 'submodule--helper config' command
t7506: clean up .gitmodules properly before setting up new scenario
submodule: add a helper to check if it is safe to write to .gitmodules
submodule: support reading .gitmodules when it's not in the working tree
t/helper: add test-submodule-nested-repo-config
Ben Peart (19):
checkout: optimize "git checkout -b <new_branch>"
git-mv: allow submodules and fsmonitor to work together
t/README: correct spelling of "uncommon"
preload-index: use git_env_bool() not getenv() for customization
fsmonitor: update GIT_TEST_FSMONITOR support
read-cache: update TEST_GIT_INDEX_VERSION support
preload-index: update GIT_FORCE_PRELOAD_TEST support
read-cache: clean up casting and byte decoding
eoie: add End of Index Entry (EOIE) extension
config: add new index.threads config setting
read-cache: load cache extensions on a worker thread
ieot: add Index Entry Offset Table (IEOT) extension
read-cache: load cache entries on worker threads
reset: don't compute unstaged changes after reset when --quiet
reset: add new reset.quiet config setting
reset: warn when refresh_index() takes more than 2 seconds
speed up refresh_index() by utilizing preload_index()
add: speed up cmd_add() by utilizing read_cache_preload()
refresh_index: remove unnecessary calls to preload_index()
Brandon Williams (1):
config: document value 2 for protocol.version
Brendan Forster (1):
http: add support for disabling SSL revocation checks in cURL
Carlo Marcelo Arenas Belón (8):
unpack-trees: avoid dead store for struct progress
multi-pack-index: avoid dead store for struct progress
read-cache: use of memory after it is freed
commit-slabs: move MAYBE_UNUSED out
khash: silence -Wunused-function for delta-islands
compat: make sure git_mmap is not expected to write
sequencer: cleanup for gcc warning in non developer mode
builtin/notes: remove unnecessary free
Christian Couder (3):
pack-objects: refactor code into compute_layer_order()
pack-objects: move tree_depth into 'struct packing_data'
pack-objects: move 'layer' into 'struct packing_data'
Christian Hesse (2):
subtree: add build targets 'man' and 'html'
subtree: make install targets depend on build targets
Daniels Umanovskis (3):
doc: move git-rev-parse from porcelain to plumbing
doc: move git-get-tar-commit-id to plumbing
doc: move git-cherry to plumbing
David Zych (1):
doc: clarify gitcredentials path component matching
Denton Liu (3):
mergetool: accept -g/--[no-]gui as arguments
completion: support `git mergetool --[no-]gui`
doc: document diff/merge.guitool config keys
Derrick Stolee (93):
multi-pack-index: add design document
multi-pack-index: add format details
multi-pack-index: add builtin
multi-pack-index: add 'write' verb
midx: write header information to lockfile
multi-pack-index: load into memory
t5319: expand test data
packfile: generalize pack directory list
multi-pack-index: read packfile list
multi-pack-index: write pack names in chunk
midx: read pack names into array
midx: sort and deduplicate objects from packfiles
midx: write object ids in a chunk
midx: write object id fanout chunk
midx: write object offsets
config: create core.multiPackIndex setting
midx: read objects from multi-pack-index
midx: use midx in abbreviation calculations
midx: use existing midx when writing new one
midx: use midx in approximate_object_count
midx: prevent duplicate packfile loads
packfile: skip loading index if in multi-pack-index
midx: clear midx on repack
commit-reach: move walk methods from commit.c
commit.h: remove method declarations
commit-reach: move ref_newer from remote.c
commit-reach: move commit_contains from ref-filter
upload-pack: make reachable() more generic
upload-pack: refactor ok_to_give_up()
upload-pack: generalize commit date cutoff
commit-reach: move can_all_from_reach_with_flags
test-reach: create new test tool for ref_newer
test-reach: test in_merge_bases
test-reach: test is_descendant_of
test-reach: test get_merge_bases_many
test-reach: test reduce_heads
test-reach: test can_all_from_reach_with_flags
test-reach: test commit_contains
commit-reach: replace ref_newer logic
commit-reach: make can_all_from_reach... linear
commit-reach: use can_all_from_reach
multi-pack-index: provide more helpful usage info
multi-pack-index: store local property
midx: mark bad packed objects
midx: stop reporting garbage
midx: fix bug that skips midx with alternates
packfile: add all_packs list
treewide: use get_all_packs
midx: test a few commands that use get_all_packs
pack-objects: consider packs in multi-pack-index
commit-graph: update design document
test-repository: properly init repo
commit-graph: not compatible with replace objects
commit-graph: not compatible with grafts
commit-graph: not compatible with uninitialized repo
commit-graph: close_commit_graph before shallow walk
commit-graph: define GIT_TEST_COMMIT_GRAPH
t3206-range-diff.sh: cover single-patch case
t5318: use test_oid for HASH_LEN
multi-pack-index: add 'verify' verb
multi-pack-index: verify bad header
multi-pack-index: verify corrupt chunk lookup table
multi-pack-index: verify packname order
multi-pack-index: verify missing pack
multi-pack-index: verify oid fanout order
multi-pack-index: verify oid lookup order
multi-pack-index: fix 32-bit vs 64-bit size check
multi-pack-index: verify object offsets
multi-pack-index: report progress during 'verify'
fsck: verify multi-pack-index
commit-reach: properly peel tags
commit-reach: fix memory and flag leaks
commit-reach: cleanups in can_all_from_reach...
commit-graph: clean up leaked memory during write
commit-graph: reduce initial oid allocation
midx: fix broken free() in close_midx()
contrib: add coverage-diff script
ci: add optional test variables
commit-reach: fix first-parent heuristic
midx: close multi-pack-index on repack
multi-pack-index: define GIT_TEST_MULTI_PACK_INDEX
packfile: close multi-pack-index in close_all_packs
prio-queue: add 'peek' operation
test-reach: add run_three_modes method
test-reach: add rev-list tests
revision.c: begin refactoring --topo-order logic
commit/revisions: bookkeeping before refactoring
revision.c: generation-based topo-order algorithm
t6012: make rev-list tests more interesting
commit-reach: implement get_reachable_subset
test-reach: test get_reachable_subset
remote: make add_missing_tags() linear
pack-objects: ignore ambiguous object warnings
Elijah Newren (14):
Remove superfluous trailing semicolons
t4200: demonstrate rerere segfault on specially crafted merge
rerere: avoid buffer overrun
update-ref: fix type of update_flags variable to match its usage
update-ref: allow --no-deref with --stdin
sequencer: fix --allow-empty-message behavior, make it smarter
merge-recursive: set paths correctly when three-way merging content
merge-recursive: avoid wrapper function when unnecessary and wasteful
merge-recursive: remove final remaining caller of merge_file_one()
merge-recursive: rename merge_file_1() and merge_content()
commit: fix erroneous BUG, 'multiple renames on the same target? how?'
merge-recursive: improve auto-merging messages with path collisions
merge-recursive: avoid showing conflicts with merge branch before HEAD
fsck: move fsck_head_link() to get_default_heads() to avoid some globals
Eric Sunshine (26):
format-patch: allow additional generated content in make_cover_letter()
format-patch: add --interdiff option to embed diff in cover letter
format-patch: teach --interdiff to respect -v/--reroll-count
interdiff: teach show_interdiff() to indent interdiff
log-tree: show_log: make commentary block delimiting reusable
format-patch: allow --interdiff to apply to a lone-patch
range-diff: respect diff_option.file rather than assuming 'stdout'
range-diff: publish default creation factor
range-diff: relieve callers of low-level configuration burden
format-patch: add --range-diff option to embed diff in cover letter
format-patch: extend --range-diff to accept revision range
format-patch: teach --range-diff to respect -v/--reroll-count
format-patch: add --creation-factor tweak for --range-diff
format-patch: allow --range-diff to apply to a lone-patch
worktree: don't die() in library function find_worktree()
worktree: move delete_git_dir() earlier in file for upcoming new callers
worktree: generalize delete_git_dir() to reduce code duplication
worktree: prepare for more checks of whether path can become worktree
worktree: disallow adding same path multiple times
worktree: teach 'add' to respect --force for registered but missing path
worktree: teach 'move' to override lock when --force given twice
worktree: teach 'remove' to override lock when --force given twice
worktree: delete .git/worktrees if empty after 'remove'
doc-diff: fix non-portable 'man' invocation
doc-diff: add --clean mode to remove temporary working gunk
doc/Makefile: drop doc-diff worktree and temporary files on "make clean"
Frederick Eaton (3):
git-archimport.1: specify what kind of Arch we're talking about
git-column.1: clarify initial description, provide examples
git-describe.1: clarify that "human readable" is also git-readable
James Knight (1):
build: link with curl-defined linker flags
Jann Horn (2):
patch-delta: fix oob read
patch-delta: consistently report corruption
Jeff Hostetler (2):
t0051: test GIT_TRACE to a windows named pipe
mingw: fix mingw_open_append to work with named pipes
Jeff King (97):
branch: make "-l" a synonym for "--list"
Add delta-islands.{c,h}
pack-objects: add delta-islands support
repack: add delta-islands support
t5320: tests for delta islands
t/perf: factor boilerplate out of test_perf
t/perf: factor out percent calculations
t/perf: add infrastructure for measuring sizes
t/perf: add perf tests for fetches from a bitmapped server
pack-bitmap: save "have" bitmap from walk
pack-objects: reuse on-disk deltas for thin "have" objects
SubmittingPatches: mention doc-diff
rev-list: make empty --stdin not an error
trailer: use size_t for string offsets
trailer: use size_t for iterating trailer list
trailer: pass process_trailer_opts to trailer_info_get()
interpret-trailers: tighten check for "---" patch boundary
interpret-trailers: allow suppressing "---" divider
pretty, ref-filter: format %(trailers) with no_divider option
sequencer: ignore "---" divider when parsing trailers
append_signoff: use size_t for string offsets
coccinelle: use <...> for function exclusion
introduce hasheq() and oideq()
convert "oidcmp() == 0" to oideq()
convert "hashcmp() == 0" to hasheq()
convert "oidcmp() != 0" to "!oideq()"
convert "hashcmp() != 0" to "!hasheq()"
convert hashmap comparison functions to oideq()
read-cache: use oideq() in ce_compare functions
show_dirstat: simplify same-content check
doc-diff: always use oids inside worktree
test-delta: read input into a heap buffer
t5303: test some corrupt deltas
patch-delta: handle truncated copy parameters
t5303: use printf to generate delta bases
doc/git-branch: remove obsolete "-l" references
bitmap_has_sha1_in_uninteresting(): drop BUG check
t5310: test delta reuse with bitmaps
traverse_bitmap_commit_list(): don't free result
pack-bitmap: drop "loaded" flag
reopen_tempfile(): truncate opened file
doc-diff: force worktree add
config.mak.dev: add -Wformat-security
pack-objects: handle island check for "external" delta base
receive-pack: update comment with check_everything_connected
submodule--helper: use "--" to signal end of clone options
submodule-config: ban submodule urls that start with dash
submodule-config: ban submodule paths that start with a dash
fsck: detect submodule urls starting with dash
fsck: detect submodule paths starting with dash
more oideq/hasheq conversions
transport: drop refnames from for_each_alternate_ref
test-tool: show tool list on error
config.mak.dev: enable -Wunused-function
run-command: mark path lookup errors with ENOENT
t5410: use longer path for sample script
upload-pack: fix broken if/else chain in config callback
t1450: check large blob in trailing-garbage test
check_stream_sha1(): handle input underflow
cat-file: handle streaming failures consistently
ls-remote: do not send ref prefixes for patterns
ls-remote: pass heads/tags prefixes to transport
read_istream_pack_non_delta(): document input handling
xdiff: provide a separate emit callback for hunks
xdiff-interface: provide a separate consume callback for hunks
rev-list: handle flags for --indexed-objects
approxidate: handle pending number for "specials"
pathspec: handle non-terminated strings with :(attr)
diff: avoid generating unused hunk header lines
diff: discard hunk headers for patch-ids earlier
diff: use hunk callback for word-diff
combine-diff: use an xdiff hunk callback
diff: convert --check to use a hunk callback
range-diff: use a hunk callback
xdiff-interface: drop parse_hunk_header()
apply: mark include/exclude options as NONEG
am: handle --no-patch-format option
ls-files: mark exclude options as NONEG
pack-objects: mark index-version option as NONEG
cat-file: mark batch options with NONEG
status: mark --find-renames option with NONEG
format-patch: mark "--no-numbered" option with NONEG
show-branch: mark --reflog option as NONEG
tag: mark "--message" option with NONEG
cat-file: report an error on multiple --batch options
apply: return -1 from option callback instead of calling exit(1)
parse-options: drop OPT_DATE()
assert NOARG/NONEG behavior of parse-options callbacks
midx: double-check large object write loop
merge: extract verify_merge_signature() helper
merge: handle --verify-signatures for unborn branch
pull: handle --verify-signatures for unborn branch
approxidate: fix NULL dereference in date_time()
bundle: dup() output descriptor closer to point-of-use
pack-objects: fix tree_depth and layer invariants
pack-objects: zero-initialize tree_depth/layer arrays
pack-objects: fix off-by-one in delta-island tree-depth computation
Johannes Schindelin (62):
rebase -i --autosquash: demonstrate a problem skipping the last squash
rebase -i: be careful to wrap up fixup/squash chains
compat/poll: prepare for targeting Windows Vista
mingw: set _WIN32_WINNT explicitly for Git for Windows
mingw: bump the minimum Windows version to Vista
builtin rebase: prepare for builtin rebase -i
rebase -i: clarify what happens on a failed `exec`
rebase -i: introduce the 'break' command
getpwuid(mingw): initialize the structure only once
getpwuid(mingw): provide a better default for the user name
mingw: use domain information for default email
http: add support for selecting SSL backends at runtime
pack-objects: fix typo 'detla' -> 'delta'
pack-objects (mingw): demonstrate a segmentation fault with large deltas
pack-objects (mingw): initialize `packing_data` mutex in the correct spot
rebase (autostash): avoid duplicate call to state_dir_path()
rebase (autostash): store the full OID in <state-dir>/autostash
rebase (autostash): use an explicit OID to apply the stash
mingw: factor out code to set stat() data
rebase --autostash: demonstrate a problem with dirty submodules
rebase --autostash: fix issue with dirty submodules
mingw: load system libraries the recommended way
mingw: ensure `getcwd()` reports the correct case
repack: point out a bug handling stale shallow info
shallow: offer to prune only non-existing entries
repack -ad: prune the list of shallow commits
http: when using Secure Channel, ignore sslCAInfo by default
t7800: fix quoting
mingw: reencode environment variables on the fly (UTF-16 <-> UTF-8)
config: rename `dummy` parameter to `cb` in git_default_config()
config: allow for platform-specific core.* config settings
config: move Windows-specific config settings into compat/mingw.c
mingw: unset PERL5LIB by default
mingw: fix isatty() after dup2()
t3404: decouple some test cases from outcomes of previous test cases
t3418: decouple test cases from a previous `rebase -p` test case
tests: optionally skip `git rebase -p` tests
Windows: force-recompile git.res for differing architectures
built-in rebase: demonstrate regression with --autostash
built-in rebase --autostash: leave the current branch alone if possible
Update .mailmap
rebase -r: demonstrate bug with conflicting merges
rebase -r: do not write MERGE_HEAD unless needed
rebase -i: include MERGE_HEAD into files to clean up
built-in rebase --skip/--abort: clean up stale .git/<name> files
status: rebase and merge can be in progress at the same time
apply --recount: allow "no-op hunks"
rebase: consolidate clean-up code before leaving reset_head()
rebase: prepare reset_head() for more flags
built-in rebase: reinstate `checkout -q` behavior where appropriate
tests: fix GIT_TEST_INSTALLED's PATH to include t/helper/
tests: respect GIT_TEST_INSTALLED when initializing repositories
t/lib-gettext: test installed git-sh-i18n if GIT_TEST_INSTALLED is set
mingw: use `CreateHardLink()` directly
rebase: really just passthru the `git am` options
rebase: validate -C<n> and --whitespace=<mode> parameters early
config: report a bug if git_dir exists without commondir
tests: do not require Git to be built when testing an installed Git
tests: explicitly use `git.exe` on Windows
mingw: replace an obsolete link with the superseding one
legacy-rebase: backport -C<n> and --whitespace=<option> checks
rebase: warn about the correct tree's OID
Johannes Sixt (3):
diff: don't attempt to strip prefix from absolute Windows paths
rebase -i: recognize short commands without arguments
t3404-rebase-interactive: test abbreviated commands
Jonathan Nieder (9):
gc: improve handling of errors reading gc.log
gc: exit with status 128 on failure
gc: do not return error for prior errors in daemonized mode
commit-reach: correct accidental #include of C file
mailmap: consistently normalize brian m. carlson's name
git doc: direct bug reporters to mailing list archive
eoie: default to not writing EOIE section
ieot: default to not writing IEOT section
index: make index.threads=true enable ieot and eoie
Jonathan Tan (15):
fetch-object: unify fetch_object[s] functions
fetch-object: set exact_oid when fetching
connected: document connectivity in partial clones
fetch: in partial clone, check presence of targets
fetch-pack: avoid object flags if no_dependents
fetch-pack: exclude blobs when lazy-fetching trees
transport: allow skipping of ref listing
transport: do not list refs if possible
transport: list refs before fetch if necessary
fetch: do not list refs if fetching only hashes
cache-tree: skip some blob checks in partial clone
upload-pack: make have_obj not global
upload-pack: make want_obj not global
upload-pack: clear flags before each v2 request
fetch-pack: be more precise in parsing v2 response
Josh Steadmon (4):
fuzz: add basic fuzz testing target.
fuzz: add fuzz testing for packfile indices.
archive: initialize archivers earlier
Makefile: use FUZZ_CXXFLAGS for linking fuzzers
Joshua Watt (1):
send-email: explicitly disable authentication
Junio C Hamano (34):
Revert "doc/Makefile: drop doc-diff worktree and temporary files on "make clean""
Initial batch post 2.19
Second batch post 2.19
Git 2.14.5
Git 2.15.3
Git 2.16.5
Git 2.17.2
Git 2.18.1
Git 2.19.1
t0000: do not get self-test disrupted by environment warnings
CodingGuidelines: document the API in *.h files
Declare that the next one will be named 2.20
Third batch for 2.20
rebase: fix typoes in error messages
Fourth batch for 2.20
Revert "subtree: make install targets depend on build targets"
Fifth batch for 2.20
receive: denyCurrentBranch=updateinstead should not blindly update
cocci: simplify "if (++u > 1)" to "if (u++)"
fsck: s/++i > 1/i++/
http: give curl version warnings consistently
Sixth batch for 2.20
Seventh batch for 2.20
fetch: replace string-list used as a look-up table with a hashmap
rebase: apply cocci patch
Eighth batch for 2.20
Ninth batch for 2.20
Makefile: ease dynamic-gettext-poison transition
Tenth batch for 2.20
Git 2.20-rc0
RelNotes: name the release properly
Prepare for 2.20-rc1
Git 2.19.2
Git 2.20-rc1
Karsten Blees (2):
mingw: replace MSVCRT's fstat() with a Win32-based implementation
mingw: implement nanosecond-precision file times
Loo Rong Jie (1):
win32: replace pthread_cond_*() with much simpler code
Lucas De Marchi (1):
range-diff: allow to diff files regardless of submodule config
Luke Diamand (3):
git-p4: do not fail in verbose mode for missing 'fileSize' key
git-p4: unshelve into refs/remotes/p4-unshelved, not refs/remotes/p4/unshelved
git-p4: fully support unshelving changelists
Martin Ågren (9):
Doc: use `--type=bool` instead of `--bool`
git-config.txt: fix 'see: above' note
git-commit-graph.txt: fix bullet lists
git-commit-graph.txt: typeset more in monospace
git-commit-graph.txt: refer to "*commit*-graph file"
Doc: refer to the "commit-graph file" with dash
t1400: drop debug `echo` to actually execute `test`
builtin/commit-graph.c: UNLEAK variables
sequencer: break out of loop explicitly
Matthew DeVore (19):
list-objects: store common func args in struct
list-objects: refactor to process_tree_contents
list-objects: always parse trees gently
t/README: reformat Do, Don't, Keep in mind lists
Documentation: add shell guidelines
tests: standardize pipe placement
t/*: fix ordering of expected/observed arguments
tests: don't swallow Git errors upstream of pipes
t9109: don't swallow Git errors upstream of pipes
tests: order arguments to git-rev-list properly
rev-list: handle missing tree objects properly
revision: mark non-user-given objects instead
list-objects-filter: use BUG rather than die
list-objects-filter-options: do not over-strbuf_init
list-objects-filter: implement filter tree:0
filter-trees: code clean-up of tests
list-objects: support for skipping tree traversal
Documentation/git-log.txt: do not show --exclude-promisor-objects
exclude-promisor-objects: declare when option is allowed
Max Kirillov (1):
http-backend test: make empty CONTENT_LENGTH test more realistic
Michael Witten (3):
docs: typo: s/go/to/
docs: graph: remove unnecessary `graph_update()' call
docs: typo: s/isimilar/similar/
Michał Górny (6):
gpg-interface.c: detect and reject multiple signatures on commits
gpg-interface.c: use flags to determine key/signer info presence
gpg-interface.c: support getting key fingerprint via %GF format
gpg-interface.c: obtain primary key fingerprint as well
t/t7510-signed-commit.sh: Add %GP to custom format checks
t/t7510-signed-commit.sh: add signing subkey to Eris Discordia key
Mihir Mehta (1):
doc: fix a typo and clarify a sentence
Nguyễn Thái Ngọc Duy (168):
clone: report duplicate entries on case-insensitive filesystems
trace.h: support nested performance tracing
unpack-trees: add performance tracing
unpack-trees: optimize walking same trees with cache-tree
unpack-trees: reduce malloc in cache-tree walk
unpack-trees: reuse (still valid) cache-tree from src_index
unpack-trees: add missing cache invalidation
cache-tree: verify valid cache-tree in the test suite
Document update for nd/unpack-trees-with-cache-tree
bisect.c: make show_list() build again
t/helper: keep test-tool command list sorted
t/helper: merge test-dump-untracked-cache into test-tool
t/helper: merge test-pkt-line into test-tool
t/helper: merge test-parse-options into test-tool
t/helper: merge test-dump-fsmonitor into test-tool
Makefile: add a hint about TEST_BUILTINS_OBJS
config.txt: follow camelCase naming
config.txt: move fetch part out to a separate file
config.txt: move format part out to a separate file
config.txt: move gitcvs part out to a separate file
config.txt: move gui part out to a separate file
config.txt: move pull part out to a separate file
config.txt: move push part out to a separate file
config.txt: move receive part out to a separate file
config.txt: move sendemail part out to a separate file
config.txt: move sequence.editor out of "core" part
config.txt: move submodule part out to a separate file
archive.c: remove implicit dependency the_repository
status: show progress bar if refreshing the index takes too long
add: do not accept pathspec magic 'attr'
completion: support "git fetch --multiple"
read-cache.c: remove 'const' from index_has_changes()
diff.c: reduce implicit dependency on the_index
combine-diff.c: remove implicit dependency on the_index
blame.c: rename "repo" argument to "r"
diff.c: remove the_index dependency in textconv() functions
grep.c: remove implicit dependency on the_index
diff.c: remove implicit dependency on the_index
read-cache.c: remove implicit dependency on the_index
diff-lib.c: remove implicit dependency on the_index
ll-merge.c: remove implicit dependency on the_index
merge-blobs.c: remove implicit dependency on the_index
merge.c: remove implicit dependency on the_index
patch-ids.c: remove implicit dependency on the_index
sha1-file.c: remove implicit dependency on the_index
rerere.c: remove implicit dependency on the_index
userdiff.c: remove implicit dependency on the_index
line-range.c: remove implicit dependency on the_index
submodule.c: remove implicit dependency on the_index
tree-diff.c: remove implicit dependency on the_index
ws.c: remove implicit dependency on the_index
revision.c: remove implicit dependency on the_index
revision.c: reduce implicit dependency the_repository
read-cache.c: optimize reading index format v4
config.txt: correct the note about uploadpack.packObjectsHook
help -a: improve and make --verbose default
refs.c: indent with tabs, not spaces
Add a place for (not) sharing stuff between worktrees
submodule.c: remove some of the_repository references
completion: fix __gitcomp_builtin no longer consider extra options
t1300: extract and use test_cmp_config()
worktree: add per-worktree config files
refs: new ref types to make per-worktree refs visible to all worktrees
revision.c: correct a parameter name
revision.c: better error reporting on ref from different worktrees
fsck: check HEAD and reflog from other worktrees
reflog expire: cover reflog from all worktrees
Update makefile in preparation for Documentation/config/*.txt
config.txt: move advice.* to a separate file
config.txt: move core.* to a separate file
config.txt: move add.* to a separate file
config.txt: move alias.* to a separate file
config.txt: move am.* to a separate file
config.txt: move apply.* to a separate file
config.txt: move blame.* to a separate file
config.txt: move branch.* to a separate file
config.txt: move browser.* to a separate file
config.txt: move checkout.* to a separate file
config.txt: move clean.* to a separate file
config.txt: move color.* to a separate file
config.txt: move column.* to a separate file
config.txt: move commit.* to a separate file
config.txt: move credential.* to a separate file
config.txt: move completion.* to a separate file
config.txt: move diff-config.txt to config/
config.txt: move difftool.* to a separate file
config.txt: move fastimport.* to a separate file
config.txt: move fetch-config.txt to config/
config.txt: move filter.* to a separate file
config.txt: move format-config.txt to config/
config.txt: move fmt-merge-msg-config.txt to config/
config.txt: move fsck.* to a separate file
config.txt: move gc.* to a separate file
config.txt: move gitcvs-config.txt to config/
config.txt: move gitweb.* to a separate file
config.txt: move grep.* to a separate file
config.txt: move gpg.* to a separate file
config.txt: move gui-config.txt to config/
config.txt: move guitool.* to a separate file
config.txt: move help.* to a separate file
config.txt: move ssh.* to a separate file
config.txt: move http.* to a separate file
config.txt: move i18n.* to a separate file
git-imap-send.txt: move imap.* to a separate file
config.txt: move index.* to a separate file
config.txt: move init.* to a separate file
config.txt: move instaweb.* to a separate file
config.txt: move interactive.* to a separate file
config.txt: move log.* to a separate file
config.txt: move mailinfo.* to a separate file
config.txt: move mailmap.* to a separate file
config.txt: move man.* to a separate file
config.txt: move merge-config.txt to config/
config.txt: move mergetool.* to a separate file
config.txt: move notes.* to a separate file
config.txt: move pack.* to a separate file
config.txt: move pager.* to a separate file
config.txt: move pretty.* to a separate file
config.txt: move protocol.* to a separate file
config.txt: move pull-config.txt to config/
config.txt: move push-config.txt to config/
config.txt: move rebase-config.txt to config/
config.txt: move receive-config.txt to config/
config.txt: move remote.* to a separate file
config.txt: move remotes.* to a separate file
config.txt: move repack.* to a separate file
config.txt: move rerere.* to a separate file
config.txt: move reset.* to a separate file
config.txt: move sendemail-config.txt to config/
config.txt: move sequencer.* to a separate file
config.txt: move showBranch.* to a separate file
config.txt: move splitIndex.* to a separate file
config.txt: move status.* to a separate file
config.txt: move stash.* to a separate file
config.txt: move submodule.* to a separate file
config.txt: move tag.* to a separate file
config.txt: move transfer.* to a separate file
config.txt: move uploadarchive.* to a separate file
config.txt: move uploadpack.* to a separate file
config.txt: move url.* to a separate file
config.txt: move user.* to a separate file
config.txt: move versionsort.* to a separate file
config.txt: move web.* to a separate file
config.txt: move worktree.* to a separate file
config.txt: remove config/dummy.txt
thread-utils: macros to unconditionally compile pthreads API
wildmatch: change behavior of "foo**bar" in WM_PATHNAME mode
git-worktree.txt: correct linkgit command name
sequencer.c: remove a stray semicolon
tree-walk.c: fix overoptimistic inclusion in :(exclude) matching
run-command.h: include thread-utils.h instead of pthread.h
send-pack.c: move async's #ifdef NO_PTHREADS back to run-command.c
index-pack: remove #ifdef NO_PTHREADS
name-hash.c: remove #ifdef NO_PTHREADS
attr.c: remove #ifdef NO_PTHREADS
grep: remove #ifdef NO_PTHREADS
grep: clean up num_threads handling
preload-index.c: remove #ifdef NO_PTHREADS
pack-objects: remove #ifdef NO_PTHREADS
read-cache.c: remove #ifdef NO_PTHREADS
read-cache.c: reduce branching based on HAVE_THREADS
read-cache.c: initialize copy_len to shut up gcc 8
Clean up pthread_create() error handling
completion: use __gitcomp_builtin for format-patch
build: fix broken command-list.h generation with core.autocrlf
format-patch: respect --stat in cover letter's diffstat
doc: move extensions.worktreeConfig to the right place
clone: fix colliding file detection on APFS
Nickolai Belakovski (2):
worktree: update documentation for lock_reason and lock_reason_valid
worktree: rename is_worktree_locked to worktree_lock_reason
Noam Postavsky (1):
log: fix coloring of certain octopus merge shapes
Olga Telezhnaya (3):
ref-filter: free memory from used_atom
ls-remote: release memory instead of UNLEAK
ref-filter: free item->value and item->value->s
Phillip Wood (11):
diff: fix --color-moved-ws=allow-indentation-change
diff --color-moved-ws: fix double free crash
diff --color-moved-ws: fix out of bounds string access
diff --color-moved-ws: fix a memory leak
diff --color-moved-ws: fix another memory leak
diff --color-moved: fix a memory leak
am: don't die in read_author_script()
am: improve author-script error reporting
am: rename read_author_script()
add read_author_script() to libgit
sequencer: use read_author_script()
Pratik Karki (46):
rebase: start implementing it as a builtin
rebase: refactor common shell functions into their own file
builtin/rebase: support running "git rebase <upstream>"
builtin rebase: support --onto
builtin rebase: support `git rebase --onto A...B`
builtin rebase: handle the pre-rebase hook and --no-verify
builtin rebase: support --quiet
builtin rebase: support the `verbose` and `diffstat` options
builtin rebase: require a clean worktree
builtin rebase: try to fast forward when possible
builtin rebase: support --force-rebase
builtin rebase: start a new rebase only if none is in progress
builtin rebase: only store fully-qualified refs in `options.head_name`
builtin rebase: support `git rebase <upstream> <switch-to>`
builtin rebase: support --continue
builtin rebase: support --skip
builtin rebase: support --abort
builtin rebase: support --quit
builtin rebase: support --edit-todo and --show-current-patch
builtin rebase: actions require a rebase in progress
builtin rebase: stop if `git am` is in progress
builtin rebase: allow selecting the rebase "backend"
builtin rebase: support --signoff
builtin rebase: support --rerere-autoupdate
builtin rebase: support --committer-date-is-author-date
builtin rebase: support `ignore-whitespace` option
builtin rebase: support `ignore-date` option
builtin rebase: support `keep-empty` option
builtin rebase: support `--autosquash`
builtin rebase: support `--gpg-sign` option
builtin rebase: support `-C` and `--whitespace=<type>`
builtin rebase: support `--autostash` option
builtin rebase: support `--exec`
builtin rebase: support `--allow-empty-message` option
builtin rebase: support --rebase-merges[=[no-]rebase-cousins]
merge-base --fork-point: extract libified function
builtin rebase: support `fork-point` option
builtin rebase: add support for custom merge strategies
builtin rebase: support --root
builtin rebase: optionally auto-detect the upstream
builtin rebase: optionally pass custom reflogs to reset_head()
builtin rebase: fast-forward to onto if it is a proper descendant
builtin rebase: show progress when connected to a terminal
builtin rebase: use no-op editor when interactive is "implied"
builtin rebase: error out on incompatible option/mode combinations
rebase: default to using the builtin rebase
Rafael Ascensão (2):
refs: show --exclude failure with --branches/tags/remotes=glob
refs: fix some exclude patterns being ignored
Ralf Thielow (1):
git-rebase.sh: fix typos in error messages
Ramsay Jones (12):
Makefile: add a hdr-check target
json-writer.h: add missing include (hdr-check)
ewah/ewok_rlw.h: add missing include (hdr-check)
refs/ref-cache.h: add missing declarations (hdr-check)
refs/packed-backend.h: add missing declaration (hdr-check)
refs/refs-internal.h: add missing declarations (hdr-check)
midx.h: add missing forward declarations (hdr-check)
delta-islands.h: add missing forward declarations (hdr-check)
headers: normalize the spelling of some header guards
fetch-object.h: add missing declaration (hdr-check)
ewok_rlw.h: add missing 'inline' to function definition
commit-reach.h: add missing declarations (hdr-check)
Rasmus Villemoes (6):
help: redirect to aliased commands for "git cmd --help"
git.c: handle_alias: prepend alias info when first argument is -h
git-help.txt: document "git help cmd" vs "git cmd --help" for aliases
Documentation/git-send-email.txt: style fixes
send-email: only consider lines containing @ or <> for automatic Cc'ing
send-email: also pick up cc addresses from -by trailers
René Scharfe (12):
mailinfo: support format=flowed
fsck: add a performance test for skipList
fsck: use strbuf_getline() to read skiplist file
fsck: use oidset instead of oid_array for skipList
sequencer: use return value of oidset_insert()
grep: add -r/--[no-]recursive
fetch-pack: factor out is_unmatched_ref()
fetch-pack: load tip_oids eagerly iff needed
khash: factor out kh_release_*
oidset: use khash
oidset: uninline oidset_init()
commit-reach: fix cast in compare_commits_by_gen()
Roger Strain (1):
subtree: performance improvement for finding unexpected parent commits
SZEDER Gábor (17):
t1404: increase core.packedRefsTimeout to avoid occasional test failure
Documentation/git.txt: clarify that GIT_TRACE=/path appends
t3701-add-interactive: tighten the check of trace output
t1700-split-index: drop unnecessary 'grep'
t0090: disable GIT_TEST_SPLIT_INDEX for the test checking split index
t1700-split-index: document why FSMONITOR is disabled in this test script
split-index: add tests to demonstrate the racy split index problem
t1700-split-index: date back files to avoid racy situations
split-index: count the number of deleted entries
split-index: don't compare cached data of entries already marked for split index
split-index: smudge and add racily clean cache entries to split index
split-index: BUG() when cache entry refers to non-existing shared entry
object_id.cocci: match only expressions of type 'struct object_id'
test-lib: introduce the '-V' short option for '--verbose-log'
travis-ci: install packages in 'ci/install-dependencies.sh'
coccicheck: introduce 'pending' semantic patches
ref-filter: don't look for objects when outside of a repository
Sam McKelvie (1):
rev-parse: --show-superproject-working-tree should work during a merge
Saulius Gurklys (1):
doc: fix small typo in git show-branch
Sebastian Staudt (1):
travis-ci: no longer use containers
Shulhan (1):
builtin/remote: quote remote name on error to display empty name
Stefan Beller (25):
git-submodule.sh: align error reporting for update mode to use path
git-submodule.sh: rename unused variables
builtin/submodule--helper: factor out submodule updating
builtin/submodule--helper: store update_clone information in a struct
builtin/submodule--helper: factor out method to update a single submodule
submodule--helper: replace connect-gitdir-workingtree by ensure-core-worktree
submodule--helper: introduce new update-module-mode helper
test_decode_color: understand FAINT and ITALIC
t3206: add color test for range-diff --dual-color
diff.c: simplify caller of emit_line_0
diff.c: reorder arguments for emit_line_ws_markup
diff.c: add set_sign to emit_line_0
diff: use emit_line_0 once per line
diff.c: omit check for line prefix in emit_line_0
diff.c: rewrite emit_line_0 more understandably
diff.c: add --output-indicator-{new, old, context}
range-diff: make use of different output indicators
range-diff: indent special lines as context
refs.c: migrate internal ref iteration to pass thru repository argument
refs.c: upgrade for_each_replace_ref to be a each_repo_ref_fn callback
string-list: remove unused function print_string_list
strbuf.h: format according to coding guidelines
diff.c: pass sign_index to emit_line_ws_markup
submodule helper: convert relative URL to absolute URL if needed
builtin/submodule--helper: remove debugging leftover tracing
Stephen P. Smith (10):
wt-status.c: move has_unmerged earlier in the file
wt-status: rename commitable to committable
t7501: add test of "commit --dry-run --short"
wt-status.c: set the committable flag in the collect phase
roll wt_status_state into wt_status and populate in the collect phase
t2000: rename and combine checkout clash tests
t7509: cleanup description and filename
t7502: rename commit test script to comply with naming convention
t7500: rename commit tests script to comply with naming convention
t7501: rename commit test to comply with naming convention
Steve Hoelzer (1):
poll: use GetTickCount64() to avoid wrap-around issues
Steven Fernandez (1):
git-completion.bash: add completion for stash list
Strain, Roger L (4):
subtree: refactor split of a commit into standalone method
subtree: make --ignore-joins pay attention to adds
subtree: use commits before rejoins for splits
subtree: improve decision on merges kept in split
Tao Qingyun (3):
refs: docstring typo
builtin/branch.c: remove useless branch_get
branch: trivial style fix
Taylor Blau (4):
transport.c: extract 'fill_alternate_refs_command'
transport.c: introduce core.alternateRefsCommand
transport.c: introduce core.alternateRefsPrefixes
Documentation/config.txt: fix typo in core.alternateRefsCommand
Thomas Gummerer (17):
rerere: unify error messages when read_cache fails
rerere: lowercase error messages
rerere: wrap paths in output in sq
rerere: mark strings for translation
rerere: add documentation for conflict normalization
rerere: fix crash with files rerere can't handle
rerere: only return whether a path has conflicts or not
rerere: factor out handle_conflict function
rerere: return strbuf from handle path
rerere: teach rerere to handle nested conflicts
rerere: recalculate conflict ID when unresolved conflict is committed
rerere: mention caveat about unmatched conflict markers
rerere: add note about files with existing conflict markers
.gitattributes: add conflict-marker-size for relevant files
linear-assignment: fix potential out of bounds memory access
t5551: move setup code inside test_expect blocks
t5551: compare sorted cookies files
Tim Schumacher (4):
Documentation/Makefile: make manpage-base-url.xsl generation quieter
alias: add support for aliases of an alias
alias: show the call history when an alias is looping
t0014: introduce an alias testing suite
Todd Zullinger (1):
Documentation: build technical/multi-pack-index
Torsten Bögershausen (4):
Make git_check_attr() a void function
path.c: char is not (always) signed
Upcast size_t variables to uintmax_t when printing
remote-curl.c: xcurl_off_t is not portable (on 32 bit platfoms)
Uwe Kleine-König (1):
howto/using-merge-subtree: mention --allow-unrelated-histories
brian m. carlson (26):
t: add test functions to translate hash-related values
t0000: use hash translation table
t0000: update tests for SHA-256
t0002: abstract away SHA-1 specific constants
t0064: make hash size independent
t1006: make hash size independent
t1400: switch hard-coded object ID to variable
t1405: make hash size independent
t1406: make hash-size independent
t1407: make hash size independent
editorconfig: provide editor settings for Git developers
editorconfig: indicate settings should be kept in sync
pack-bitmap-write: use GIT_MAX_RAWSZ for allocation
builtin/repack: replace hard-coded constants
builtin/mktree: remove hard-coded constant
builtin/fetch-pack: remove constants with parse_oid_hex
pack-revindex: express constants in terms of the_hash_algo
packfile: express constants in terms of the_hash_algo
refs/packed-backend: express constants using the_hash_algo
upload-pack: express constants in terms of the_hash_algo
transport: use parse_oid_hex instead of a constant
tag: express constant in terms of the_hash_algo
apply: replace hard-coded constants
apply: rename new_sha1_prefix and old_sha1_prefix
submodule: make zero-oid comparison hash function agnostic
rerere: convert to use the_hash_algo
Ævar Arnfjörð Bjarmason (33):
fetch: change "branch" to "reference" in --force -h output
push tests: make use of unused $1 in test description
push tests: use spaces in interpolated string
fetch tests: add a test for clobbering tag behavior
push doc: remove confusing mention of remote merger
push doc: move mention of "tag <tag>" later in the prose
push doc: correct lies about how push refspecs work
fetch: document local ref updates with/without --force
fetch: stop clobbering existing tags without --force
fsck tests: setup of bogus commit object
fsck tests: add a test for no skipList input
fsck: document and test sorted skipList input
fsck: document and test commented & empty line skipList input
fsck: document that skipList input must be unabbreviated
fsck: add a performance test
fsck: support comments & empty lines in skipList
commit-graph write: add progress output
commit-graph verify: add progress output
config doc: add missing list separator for checkout.optimizeNewBranch
push doc: add spacing between two words
fetch doc: correct grammar in --force docs
gc: fix regression in 7b0f229222 impacting --quiet
gc doc: mention the commit-graph in the intro
pack-objects test: modernize style
pack-objects tests: don't leave test .git corrupt at end
index-pack tests: don't leave test repo dirty at end
i18n: make GETTEXT_POISON a runtime option
range-diff doc: add a section about output stability
range-diff: fix regression in passing along diff options
range-diff: make diff option behavior (e.g. --stat) consistent
rebase doc: document rebase.useBuiltin
tests: add a special setup where rebase.useBuiltin is off
read-cache: make the split index obey umask settings
Đoàn Trần Công Danh (1):
git-compat-util: prefer poll.h to sys/poll.h
^ permalink raw reply [relevance 3%]
* Re: [PATCH 5/5] index: offer advice for unknown index extensions
2018-11-21 1:03 3% ` Jonathan Nieder
@ 2018-11-21 9:30 0% ` Ævar Arnfjörð Bjarmason
0 siblings, 0 replies; 71+ results
From: Ævar Arnfjörð Bjarmason @ 2018-11-21 9:30 UTC (permalink / raw)
To: Jonathan Nieder
Cc: Junio C Hamano, Ben Peart, git, pclouds, Ben Peart, jonathantanmy
On Wed, Nov 21 2018, Jonathan Nieder wrote:
> Junio C Hamano wrote:
>
>> This series has a strong smell of pushing back by the
>> toolsmiths who refuse to promptly upgrade to help their users, and
>> that is why I do not feel entirely happy with this series.
>
> Last reply, I promise. :)
>
> This sentence might have the key to the misunderstanding. Let me say
> a little more about where this showed up in the internal deployment
> here, to clarify things a little.
>
> At Google we deploy snapshots of the "next" branch approximately
> weekly so that we can find problems early before they affect a
> published release. We rely on the ability to roll back quickly when a
> problem is discovered, and we might care more about compatibility than
> some others because of that.
>
> A popular tool within Google has a bundled copy of Git (also a
> snapshot of the "next" branch, but from a few weeks prior) and when we
> deployed Git with the EOIE and IEOT extensions, users of that tool
> very quickly reported the mysterious message.
>
> That said, the maintainers of that tool did not complain at all, so
> hopefully I can allay your worries about toolsmiths pushing back.
> Once the problem reached my attention (a few days later than I would
> have liked it to), the Git team at Google knew that we could not roll
> back and were certainly alarmed about what that means about our
> ability to cope with other problems should we need to. But we were
> able to quickly update that popular tool --- no issue.
>
> Instead, we ran into a number of other users running into the same
> problem, when sharing repositories between machines using sshfs, etc.
> That, plus the aforementioned inability to roll back Git if we need
> to, meant that this was a serious issue so we quickly addressed it in
> the internal installation.
>
> In general, we haven't had much trouble getting people to use Git
> 2.19.1 or newer. So the problem here does not have to do with users
> being slow to upgrade.
>
> Instead, it's simply that upgrading Git should not cause the older,
> widely deployed version of Git to complain about the repositories it
> acts on. That's a recipe for difficult debugging situations, it can
> lead to people upgrading less quickly and reporting bugs later, and
> all in all it's a bad situation to be in. I've used tools like
> Subversion that would upgrade repositories so they are unusable by the
> previous version and experienced all of these problems.
>
> So I consider it important *to Git upstream* to handle this well in
> the Git 2.20 release. We can flip the default soon after, even as
> soon as 2.21.
>
> Moreover, I am not the only one who ran into this --- e.g. from [1],
> 2018-10-19:
>
> 17:10 <peff> jrnieder: Yes, I noticed that annoyance myself. ;)
> 17:11 <newren> Yeah, I saw that message a few times and was slightly
> annoyed as well.
>
> Now, a meta point. Throughout this discussion, I have been hoping for
> some acknowledgement of the problem --- e.g. an "I am sympathetic to
> what you are trying to do, but <X>". I wasn't able to find that, and
> that is part of what contributed to the feeling of not being heard.
>
> Thanks for your patient explanations, and hope that helps,
> Jonathan
I think it makes total sense to fix this. I had not spotted this myself
since I tend to just roll forward and only use one version of git on one
system, but fixing this makes sense.
^ permalink raw reply [relevance 0%]
* Re: [PATCH 5/5] index: offer advice for unknown index extensions
@ 2018-11-21 1:03 3% ` Jonathan Nieder
2018-11-21 9:30 0% ` Ævar Arnfjörð Bjarmason
0 siblings, 1 reply; 71+ results
From: Jonathan Nieder @ 2018-11-21 1:03 UTC (permalink / raw)
To: Junio C Hamano
Cc: Ben Peart, Ævar Arnfjörð Bjarmason, git, pclouds,
Ben Peart, jonathantanmy
Junio C Hamano wrote:
> This series has a strong smell of pushing back by the
> toolsmiths who refuse to promptly upgrade to help their users, and
> that is why I do not feel entirely happy with this series.
Last reply, I promise. :)
This sentence might have the key to the misunderstanding. Let me say
a little more about where this showed up in the internal deployment
here, to clarify things a little.
At Google we deploy snapshots of the "next" branch approximately
weekly so that we can find problems early before they affect a
published release. We rely on the ability to roll back quickly when a
problem is discovered, and we might care more about compatibility than
some others because of that.
A popular tool within Google has a bundled copy of Git (also a
snapshot of the "next" branch, but from a few weeks prior) and when we
deployed Git with the EOIE and IEOT extensions, users of that tool
very quickly reported the mysterious message.
That said, the maintainers of that tool did not complain at all, so
hopefully I can allay your worries about toolsmiths pushing back.
Once the problem reached my attention (a few days later than I would
have liked it to), the Git team at Google knew that we could not roll
back and were certainly alarmed about what that means about our
ability to cope with other problems should we need to. But we were
able to quickly update that popular tool --- no issue.
Instead, we ran into a number of other users running into the same
problem, when sharing repositories between machines using sshfs, etc.
That, plus the aforementioned inability to roll back Git if we need
to, meant that this was a serious issue so we quickly addressed it in
the internal installation.
In general, we haven't had much trouble getting people to use Git
2.19.1 or newer. So the problem here does not have to do with users
being slow to upgrade.
Instead, it's simply that upgrading Git should not cause the older,
widely deployed version of Git to complain about the repositories it
acts on. That's a recipe for difficult debugging situations, it can
lead to people upgrading less quickly and reporting bugs later, and
all in all it's a bad situation to be in. I've used tools like
Subversion that would upgrade repositories so they are unusable by the
previous version and experienced all of these problems.
So I consider it important *to Git upstream* to handle this well in
the Git 2.20 release. We can flip the default soon after, even as
soon as 2.21.
Moreover, I am not the only one who ran into this --- e.g. from [1],
2018-10-19:
17:10 <peff> jrnieder: Yes, I noticed that annoyance myself. ;)
17:11 <newren> Yeah, I saw that message a few times and was slightly
annoyed as well.
Now, a meta point. Throughout this discussion, I have been hoping for
some acknowledgement of the problem --- e.g. an "I am sympathetic to
what you are trying to do, but <X>". I wasn't able to find that, and
that is part of what contributed to the feeling of not being heard.
Thanks for your patient explanations, and hope that helps,
Jonathan
[1] https://colabti.org/irclogger/irclogger_log/git-devel?date=2018-10-19#l114
^ permalink raw reply [relevance 3%]
* [ANNOUNCE] Git v2.20.0-rc0
@ 2018-11-18 14:20 2% Junio C Hamano
0 siblings, 1 reply; 71+ results
From: Junio C Hamano @ 2018-11-18 14:20 UTC (permalink / raw)
To: git; +Cc: Linux Kernel, git-packagers
An early preview release Git v2.20.0-rc0 is now available for
testing at the usual places. It is comprised of 887 non-merge
commits since v2.19.0, contributed by 71 people, 23 of which are
new faces.
The tarballs are found at:
https://www.kernel.org/pub/software/scm/git/testing/
The following public repositories all have a copy of the
'v2.20.0-rc0' tag and the 'master' branch that the tag points at:
url = https://kernel.googlesource.com/pub/scm/git/git
url = git://repo.or.cz/alt-git.git
url = https://github.com/gitster/git
New contributors whose contributions weren't in v2.19.0 are as follows.
Welcome to the Git development community!
Aaron Lindsay, Alexander Pyhalov, Anton Serbulov, Brendan
Forster, Carlo Marcelo Arenas Belón, Daniels Umanovskis, David
Zych, Frederick Eaton, James Knight, Jann Horn, Joshua Watt,
Loo Rong Jie, Lucas De Marchi, Matthew DeVore, Mihir Mehta,
Nickolai Belakovski, Roger Strain, Sam McKelvie, Saulius Gurklys,
Shulhan, Steven Fernandez, Strain, Roger L, and Tim Schumacher.
Returning contributors who helped this release are as follows.
Thanks for your continued support.
Ævar Arnfjörð Bjarmason, Alban Gruin, Andreas Gruenbacher,
Andreas Heiduk, Antonio Ospite, Ben Peart, Brandon Williams,
brian m. carlson, Christian Couder, Christian Hesse, Denton Liu,
Derrick Stolee, Elijah Newren, Eric Sunshine, Jeff Hostetler,
Jeff King, Johannes Schindelin, Johannes Sixt, Jonathan Nieder,
Jonathan Tan, Josh Steadmon, Junio C Hamano, Karsten Blees,
Luke Diamand, Martin Ågren, Max Kirillov, Michael Witten,
Michał Górny, Nguyễn Thái Ngọc Duy, Noam Postavsky,
Olga Telezhnaya, Phillip Wood, Pratik Karki, Rafael Ascensão,
Ralf Thielow, Ramsay Jones, Rasmus Villemoes, René Scharfe,
Sebastian Staudt, Stefan Beller, Stephen P. Smith, Steve Hoelzer,
SZEDER Gábor, Tao Qingyun, Taylor Blau, Thomas Gummerer,
Torsten Bögershausen, and Uwe Kleine-König.
----------------------------------------------------------------
Git Release Notes
=========================
Backward Compatibility Notes
----------------------------
* "git branch -l <foo>" used to be a way to ask a reflog to be
created while creating a new branch, but that is no longer the
case. It is a short-hand for "git branch --list <foo>" now.
* "git push" into refs/tags/* hierarchy is rejected without getting
forced, but "git fetch" (misguidedly) used the "fast forwarding"
rule used for the refs/heads/* hierarchy; this has been corrected,
which means some fetches of tags that did not fail with older
version of Git will fail without "--force" with this version.
* "git help -a" now gives verbose output (same as "git help -av").
Those who want the old output may say "git help --no-verbose -a"..
* "git cpn --help", when "cpn" is an alias to, say, "cherry-pick -n",
reported only the alias expansion of "cpn" in earlier versions of
Git. It now runs "git cherry-pick --help" to show the manual page
of the command, while sending the alias expansion to the standard
error stream.
* "git send-email" learned to grab address-looking string on any
trailer whose name ends with "-by". This is a backward-incompatible
change. Adding "--suppress-cc=misc-by" on the command line, or
setting sendemail.suppresscc configuration variable to "misc-by",
can be used to disable this behaviour.
Updates since v2.19
-------------------
UI, Workflows & Features
* Running "git clone" against a project that contain two files with
pathnames that differ only in cases on a case insensitive
filesystem would result in one of the files lost because the
underlying filesystem is incapable of holding both at the same
time. An attempt is made to detect such a case and warn.
* "git checkout -b newbranch [HEAD]" should not have to do as much as
checking out a commit different from HEAD. An attempt is made to
optimize this special case.
* "git rev-list --stdin </dev/null" used to be an error; it now shows
no output without an error. "git rev-list --stdin --default HEAD"
still falls back to the given default when nothing is given on the
standard input.
* Lift code from GitHub to restrict delta computation so that an
object that exists in one fork is not made into a delta against
another object that does not appear in the same forked repository.
* "git format-patch" learned new "--interdiff" and "--range-diff"
options to explain the difference between this version and the
previous attempt in the cover letter (or after the three-dashes as
a comment).
* "git mailinfo" used in "git am" learned to make a best-effort
recovery of a patch corrupted by MUA that sends text/plain with
format=flawed option.
(merge 3aa4d81f88 rs/mailinfo-format-flowed later to maint).
* The rules used by "git push" and "git fetch" to determine if a ref
can or cannot be updated were inconsistent; specifically, fetching
to update existing tags were allowed even though tags are supposed
to be unmoving anchoring points. "git fetch" was taught to forbid
updates to existing tags without the "--force" option.
* "git multi-pack-index" learned to detect corruption in the .midx
file it uses, and this feature has been integrated into "git fsck".
* Generation of (experimental) commit-graph files have so far been
fairly silent, even though it takes noticeable amount of time in a
meaningfully large repository. The users will now see progress
output.
* The minimum version of Windows supported by Windows port of Git is
now set to Vista.
* The completion script (in contrib/) learned to complete a handful of
options "git stash list" command takes.
* The completion script (in contrib/) learned that "git fetch
--multiple" only takes remote names as arguments and no refspecs.
* "git status" learns to show progress bar when refreshing the index
takes a long time.
(merge ae9af12287 nd/status-refresh-progress later to maint).
* "git help -a" and "git help -av" give different pieces of
information, and generally the "verbose" version is more friendly
to the new users. "git help -a" by default now uses the more
verbose output (with "--no-verbose", you can go back to the
original). Also "git help -av" now lists aliases and external
commands, which it did not used to.
* Unlike "grep", "git grep" by default recurses to the whole tree.
The command learned "git grep --recursive" option, so that "git
grep --no-recursive" can serve as a synonym to setting the
max-depth to 0.
* When pushing into a repository that borrows its objects from an
alternate object store, "git receive-pack" that responds to the
push request on the other side lists the tips of refs in the
alternate to reduce the amount of objects transferred. This
sometimes is detrimental when the number of refs in the alternate
is absurdly large, in which case the bandwidth saved in potentially
fewer objects transferred is wasted in excessively large ref
advertisement. The alternate refs that are advertised are now
configurable with a pair of configuration variables.
* "git cmd --help" when "cmd" is aliased used to only say "cmd is
aliased to ...". Now it shows that to the standard error stream
and runs "git $cmd --help" where $cmd is the first word of the
alias expansion.
* The documentation of "git gc" has been updated to mention that it
is no longer limited to "pruning away crufts" but also updates
ancillary files like commit-graph as a part of repository
optimization.
* "git p4 unshelve" improvements.
* The logic to select the default user name and e-mail on Windows has
been improved.
(merge 501afcb8b0 js/mingw-default-ident later to maint).
* The "rev-list --filter" feature learned to exclude all trees via
"tree:0" filter.
* "git send-email" learned to grab address-looking string on any
trailer whose name ends with "-by"; --suppress-cc=misc-by on the
command line, or setting sendemail.suppresscc configuration
variable to "misc-by", can be used to disable this behaviour.
* Developer builds now uses -Wunused-function compilation option.
* One of our CI tests to run with "unusual/experimental/random"
settings now also uses commit-graph and midx.
* "git mergetool" learned to take the "--[no-]gui" option, just like
"git difftool" does.
* "git rebase -i" learned a new insn, 'break', that the user can
insert in the to-do list. Upon hitting it, the command returns
control back to the user.
* New "--pretty=format:" placeholders %GF and %GP that show the GPG
key fingerprints have been invented.
* On platforms with recent cURL library, http.sslBackend configuration
variable can be used to choose a different SSL backend at runtime.
The Windows port uses this mechanism to switch between OpenSSL and
Secure Channel while talking over the HTTPS protocol.
* "git send-email" learned to disable SMTP authentication via the
"--smtp-auth=none" option, even when the smtp username is given
(which turns the authentication on by default).
* A fourth class of configuration files (in addition to the
traditional "system wide", "per user in the $HOME directory" and
"per repository in the $GIT_DIR/config") has been introduced so
that different worktrees that share the same repository (hence the
same $GIT_DIR/config file) can use different customization.
* A pattern with '**' that does not have a slash on either side used
to be an invalid one, but the code now treats such double-asterisks
the same way as two normal asterisks that happen to be adjacent to
each other.
(merge e5bbe09e88 nd/wildmatch-double-asterisk later to maint).
* The "--no-patch" option, which can be used to get a high-level
overview without the actual line-by-line patch difference shown, of
the "range-diff" command was earlier broken, which has been
corrected.
* The recently merged "rebase in C" has an escape hatch to use the
scripted version when necessary, but it hasn't been documented,
which has been corrected.
Performance, Internal Implementation, Development Support etc.
* When there are too many packfiles in a repository (which is not
recommended), looking up an object in these would require
consulting many pack .idx files; a new mechanism to have a single
file that consolidates all of these .idx files is introduced.
* "git submodule update" is getting rewritten piece-by-piece into C.
* The code for computing history reachability has been shuffled,
obtained a bunch of new tests to cover them, and then being
improved.
* The unpack_trees() API used in checking out a branch and merging
walks one or more trees along with the index. When the cache-tree
in the index tells us that we are walking a tree whose flattened
contents is known (i.e. matches a span in the index), as linearly
scanning a span in the index is much more efficient than having to
open tree objects recursively and listing their entries, the walk
can be optimized, which has been done.
* When creating a thin pack, which allows objects to be made into a
delta against another object that is not in the resulting pack but
is known to be present on the receiving end, the code learned to
take advantage of the reachability bitmap; this allows the server
to send a delta against a base beyond the "boundary" commit.
* spatch transformation to replace boolean uses of !hashcmp() to
newly introduced oideq() is added, and applied, to regain
performance lost due to support of multiple hash algorithms.
* Fix a bug in which the same path could be registered under multiple
worktree entries if the path was missing (for instance, was removed
manually). Also, as a convenience, expand the number of cases in
which --force is applicable.
* Split Documentation/config.txt for easier maintenance.
(merge 6014363f0b nd/config-split later to maint).
* Test helper binaries clean-up.
(merge c9a1f4161f nd/test-tool later to maint).
* Various tests have been updated to make it easier to swap the
hash function used for object identification.
(merge ae0c89d41b bc/hash-independent-tests later to maint).
* Update fsck.skipList implementation and documentation.
(merge 371a655074 ab/fsck-skiplist later to maint).
* An alias that expands to another alias has so far been forbidden,
but now it is allowed to create such an alias.
* Various test scripts have been updated for style and also correct
handling of exit status of various commands.
* "gc --auto" ended up calling exit(-1) upon error, which has been
corrected to use exit(1). Also the error reporting behaviour when
daemonized has been updated to exit with zero status when stopping
due to a previously discovered error (which implies there is no
point running gc to improve the situation); we used to exit with
failure in such a case.
* Various codepaths in the core-ish part learned to work on an
arbitrary in-core index structure, not necessarily the default
instance "the_index".
(merge b3c7eef9b0 nd/the-index later to maint).
* Code clean-up in the internal machinery used by "git status" and
"git commit --dry-run".
(merge 73ba5d78b4 ss/wt-status-committable later to maint).
* Some environment variables that control the runtime options of Git
used during tests are getting renamed for consistency.
(merge 4231d1ba99 bp/rename-test-env-var later to maint).
* A new extension to the index file has been introduced, which allows
the index file to be read in parallel for performance.
* The oidset API was built on top of the oidmap API which in turn is
on the hashmap API. Replace the implementation to build on top of
the khash API and gain performance.
* Over some transports, fetching objects with an exact commit object
name can be done without first seeing the ref advertisements. The
code has been optimized to exploit this.
* In a partial clone that will lazily be hydrated from the
originating repository, we generally want to avoid "does this
object exist (locally)?" on objects that we deliberately omitted
when we created the clone. The cache-tree codepath (which is used
to write a tree object out of the index) however insisted that the
object exists, even for paths that are outside of the partial
checkout area. The code has been updated to avoid such a check.
* To help developers, an EditorConfig file that attempts to follow
the project convention has been added.
(merge b548d698a0 bc/editorconfig later to maint).
* The result of coverage test can be combined with "git blame" to
check the test coverage of code introduced recently with a new
'coverage-diff' tool (in contrib/).
(merge 783faedd65 ds/coverage-diff later to maint).
* An experiment to fuzz test a few areas, hopefully we can gain more
coverage to various areas.
* More codepaths are moving away from hardcoded hash sizes.
* The way the Windows port figures out the current directory has been
improved.
* The way DLLs are loaded on the Windows port has been improved.
* Some tests have been reorganized and renamed; "ls t/" now gives a
better overview of what is tested for these scripts than before.
* "git rebase" and "git rebase -i" have been reimplemented in C.
* Windows port learned to use nano-second resolution file timestamps.
* The overly large Documentation/config.txt file have been split into
million little pieces. This potentially allows each individual piece
included into the manual page of the command it affects more easily.
* Replace three string-list instances used as look-up tables in "git
fetch" with hashmaps.
* Unify code to read the author-script used in "git am" and the
commands that use the sequencer machinery, e.g. "git rebase -i".
* In preparation to the day when we can deprecate and remove the
"rebase -p", make sure we can skip and later remove tests for
it.
* The history traversal used to implement the tag-following has been
optimized by introducing a new helper.
* The helper function to refresh the cached stat information in the
in-core index has learned to perform the lstat() part of the
operation in parallel on multi-core platforms.
* The code to traverse objects for reachability, used to decide what
objects are unreferenced and expendable, have been taught to also
consider per-worktree refs of other worktrees as starting points to
prevent data loss.
* "git add" needs to internally run "diff-files" equivalent, and the
codepath learned the same optimization as "diff-files" has to run
lstat(2) in parallel to find which paths have been updated in the
working tree.
* The procedure to install dependencies before testing at Travis CI
is getting revamped for both simplicity and flexibility, taking
advantage of the recent move to the vm-based environment.
* The support for format-patch (and send-email) by the command-line
completion script (in contrib/) has been simplified a bit.
* The revision walker machinery learned to take advantage of the
commit generation numbers stored in the commit-graph file.
* The codebase has been cleaned up to reduce "#ifndef NO_PTHREADS".
* The way -lcurl library gets linked has been simplified by taking
advantage of the fact that we can just ask curl-config command how.
* Various functions have been audited for "-Wunused-parameter" warnings
and bugs in them got fixed.
* A sanity check for start-up sequence has been added in the config
API codepath.
* The build procedure to link for fuzzing test has been made
customizable with a new Makefile variable.
* The way "git rebase" parses and forwards the command line options
meant for underlying "git am" has been revamped, which fixed for
options with parameters that were not passed correctly.
Fixes since v2.19
-----------------
* "git interpret-trailers" and its underlying machinery had a buggy
code that attempted to ignore patch text after commit log message,
which triggered in various codepaths that will always get the log
message alone and never get such an input.
(merge 66e83d9b41 jk/trailer-fixes later to maint).
* Malformed or crafted data in packstream can make our code attempt
to read or write past the allocated buffer and abort, instead of
reporting an error, which has been fixed.
* "git rebase -i" did not clear the state files correctly when a run
of "squash/fixup" is aborted and then the user manually amended the
commit instead, which has been corrected.
(merge 10d2f35436 js/rebase-i-autosquash-fix later to maint).
* When fsmonitor is in use, after operation on submodules updates
.gitmodules, we lost track of the fact that we did so and relied on
stale fsmonitor data.
(merge 43f1180814 bp/mv-submodules-with-fsmonitor later to maint).
* Fix for a long-standing bug that leaves the index file corrupt when
it shrinks during a partial commit.
(merge 6c003d6ffb jk/reopen-tempfile-truncate later to maint).
* Further fix for O_APPEND emulation on Windows
(merge eeaf7ddac7 js/mingw-o-append later to maint).
* A corner case bugfix in "git rerere" code.
(merge ad2bf0d9b4 en/rerere-multi-stage-1-fix later to maint).
* "git add ':(attr:foo)'" is not supported and is supposed to be
rejected while the command line arguments are parsed, but we fail
to reject such a command line upfront.
(merge 84d938b732 nd/attr-pathspec-fix later to maint).
* Recent update broke the reachability algorithm when refs (e.g.
tags) that point at objects that are not commit were involved,
which has been fixed.
* "git rebase" etc. in Git 2.19 fails to abort when given an empty
commit log message as result of editing, which has been corrected.
(merge a3ec9eaf38 en/sequencer-empty-edit-result-aborts later to maint).
* The code to backfill objects in lazily cloned repository did not
work correctly, which has been corrected.
(merge e68302011c jt/lazy-object-fetch-fix later to maint).
* Update error messages given by "git remote" and make them consistent.
(merge 5025425dff ms/remote-error-message-update later to maint).
* "git update-ref" learned to make both "--no-deref" and "--stdin"
work at the same time.
(merge d345e9fbe7 en/update-ref-no-deref-stdin later to maint).
* Recently added "range-diff" had a corner-case bug to cause it
segfault, which has been corrected.
(merge e467a90c7a tg/range-diff-corner-case-fix later to maint).
* The recently introduced commit-graph auxiliary data is incompatible
with mechanisms such as replace & grafts that "breaks" immutable
nature of the object reference relationship. Disable optimizations
based on its use (and updating existing commit-graph) when these
incompatible features are in use in the repository.
(merge 829a321569 ds/commit-graph-with-grafts later to maint).
* The mailmap file update.
(merge 255eb03edf jn/mailmap-update later to maint).
* The code in "git status" sometimes hit an assertion failure. This
was caused by a structure that was reused without cleaning the data
used for the first run, which has been corrected.
(merge 3e73cc62c0 en/status-multiple-renames-to-the-same-target-fix later to maint).
* "git fetch $repo $object" in a partial clone did not correctly
fetch the asked-for object that is referenced by an object in
promisor packfile, which has been fixed.
* A corner-case bugfix.
(merge c5cbb27cb5 sm/show-superproject-while-conflicted later to maint).
* Various fixes to "diff --color-moved-ws".
* A partial clone that is configured to lazily fetch missing objects
will on-demand issue a "git fetch" request to the originating
repository to fill not-yet-obtained objects. The request has been
optimized for requesting a tree object (and not the leaf blob
objects contained in it) by telling the originating repository that
no blobs are needed.
(merge 4c7f9567ea jt/non-blob-lazy-fetch later to maint).
* The codepath to support the experimental split-index mode had
remaining "racily clean" issues fixed.
(merge 4c490f3d32 sg/split-index-racefix later to maint).
* "git log --graph" showing an octopus merge sometimes miscounted the
number of display columns it is consuming to show the merge and its
parent commits, which has been corrected.
(merge 04005834ed np/log-graph-octopus-fix later to maint).
* "git range-diff" did not work well when the compared ranges had
changes in submodules and the "--submodule=log" was used.
* The implementation of run_command() API on the UNIX platforms had a
bug that caused a command not on $PATH to be found in the current
directory.
(merge f67b980771 jk/run-command-notdot later to maint).
* A mutex used in "git pack-objects" were not correctly initialized
and this caused "git repack" to dump core on Windows.
(merge 34204c8166 js/pack-objects-mutex-init-fix later to maint).
* Under certain circumstances, "git diff D:/a/b/c D:/a/b/d" on
Windows would strip initial parts from the paths because they
were not recognized as absolute, which has been corrected.
(merge ffd04e92e2 js/diff-notice-has-drive-prefix later to maint).
* The receive.denyCurrentBranch=updateInstead codepath kicked in even
when the push should have been rejected due to other reasons, such
as it does not fast-forward or the update-hook rejects it, which
has been corrected.
(merge b072a25fad jc/receive-deny-current-branch-fix later to maint).
* The logic to determine the archive type "git archive" uses did not
correctly kick in for "git archive --remote", which has been
corrected.
* "git repack" in a shallow clone did not correctly update the
shallow points in the repository, leading to a repository that
does not pass fsck.
(merge 5dcfbf564c js/shallow-and-fetch-prune later to maint).
* Some codepaths failed to form a proper URL when .gitmodules record
the URL to a submodule repository as relative to the repository of
superproject, which has been corrected.
(merge e0a862fdaf sb/submodule-url-to-absolute later to maint).
* "git fetch" over protocol v2 into a shallow repository failed to
fetch full history behind a new tip of history that was diverged
before the cut-off point of the history that was previously fetched
shallowly.
* The command line completion machinery (in contrib/) has been
updated to allow the completion script to tweak the list of options
that are reported by the parse-options machinery correctly.
(merge 276b49ff34 nd/completion-negation later to maint).
* Operations on promisor objects make sense in the context of only a
small subset of the commands that internally use the revisions
machinery, but the "--exclude-promisor-objects" option were taken
and led to nonsense results by commands like "log", to which it
didn't make much sense. This has been corrected.
(merge 669b1d2aae md/exclude-promisor-objects-fix later to maint).
* The "container" mode of TravisCI is going away. Our .travis.yml
file is getting prepared for the transition.
(merge 32ee384be8 ss/travis-ci-force-vm-mode later to maint).
* Our test scripts can now take the '-V' option as a synonym for the
'--verbose-log' option.
(merge a5f52c6dab sg/test-verbose-log later to maint).
* A regression in Git 2.12 era made "git fsck" fall into an infinite
loop while processing truncated loose objects.
(merge 18ad13e5b2 jk/detect-truncated-zlib-input later to maint).
* "git ls-remote $there foo" was broken by recent update for the
protocol v2 and stopped showing refs that match 'foo' that are not
refs/{heads,tags}/foo, which has been fixed.
(merge 6a139cdd74 jk/proto-v2-ref-prefix-fix later to maint).
* Additional comment on a tricky piece of code to help developers.
(merge 0afbe3e806 jk/stream-pack-non-delta-clarification later to maint).
* A couple of tests used to leave the repository in a state that is
deliberately corrupt, which have been corrected.
(merge aa984dbe5e ab/pack-tests-cleanup later to maint).
* The submodule support has been updated to read from the blob at
HEAD:.gitmodules when the .gitmodules file is missing from the
working tree.
(merge 2b1257e463 ao/submodule-wo-gitmodules-checked-out later to maint).
* "git fetch" was a bit loose in parsing responses from the other side
when talking over the protocol v2.
* "git rev-parse --exclude=* --branches --branches" (i.e. first
saying "add only things that do not match '*' out of all branches"
and then adding all branches, without any exclusion this time")
worked as expected, but "--exclude=* --all --all" did not work the
same way, which has been fixed.
(merge 5221048092 ag/rev-parse-all-exclude-fix later to maint).
* "git send-email --transfer-encoding=..." in recent versions of Git
sometimes produced an empty "Content-Transfer-Encoding:" header,
which has been corrected.
(merge 3c88e46f1a al/send-email-auto-cte-fixup later to maint).
* The interface into "xdiff" library used to discover the offset and
size of a generated patch hunk by first formatting it into the
textual hunk header "@@ -n,m +k,l @@" and then parsing the numbers
out. A new interface has been introduced to allow callers a more
direct access to them.
(merge 5eade0746e jk/xdiff-interface later to maint).
* Pathspec matching against a tree object were buggy when negative
pathspec elements were involved, which has been fixed.
(merge b7845cebc0 nd/tree-walk-path-exclusion later to maint).
* "git merge" and "git pull" that merges into an unborn branch used
to completely ignore "--verify-signatures", which has been
corrected.
(merge 01a31f3bca jk/verify-sig-merge-into-void later to maint).
* "git rebase --autostash" did not correctly re-attach the HEAD at times.
* "rev-parse --exclude=<pattern> --branches=<pattern>" etc. did not
quite work, which has been corrected.
(merge 9ab9b5df0e ra/rev-parse-exclude-glob later to maint).
* When editing a patch in a "git add -i" session, a hunk could be
made to no-op. The "git apply" program used to reject a patch with
such a no-op hunk to catch user mistakes, but it is now updated to
explicitly allow a no-op hunk in an edited patch.
(merge 22cb3835b9 js/apply-recount-allow-noop later to maint).
* The URL to an MSDN page in a comment has been updated.
(merge 2ef2ae2917 js/mingw-msdn-url later to maint).
* "git ls-remote --sort=<thing>" can feed an object that is not yet
available into the comparison machinery and segfault, which has
been corrected to check such a request upfront and reject it.
* When "git bundle" aborts due to an empty commit ranges
(i.e. resulting in an empty pack), it left a file descriptor to an
lockfile open, which resulted in leftover lockfile on Windows where
you cannot remove a file with an open file descriptor. This has
been corrected.
(merge 2c8ee1f53c jk/close-duped-fd-before-unlock-for-bundle later to maint).
* Code cleanup, docfix, build fix, etc.
(merge 96a7501aad ts/doc-build-manpage-xsl-quietly later to maint).
(merge b9b07efdb2 tg/conflict-marker-size later to maint).
(merge fa0aeea770 sg/doc-trace-appends later to maint).
(merge d64324cb60 tb/void-check-attr later to maint).
(merge c3b9bc94b9 en/double-semicolon-fix later to maint).
(merge 79336116f5 sg/t3701-tighten-trace later to maint).
(merge 801fa63a90 jk/dev-build-format-security later to maint).
(merge 0597dd62ba sb/string-list-remove-unused later to maint).
(merge db2d36fad8 bw/protocol-v2 later to maint).
(merge 456d7cd3a9 sg/split-index-test later to maint).
(merge 7b6057c852 tq/refs-internal-comment-fix later to maint).
(merge 29e8dc50ad tg/t5551-with-curl-7.61.1 later to maint).
(merge 55f6bce2c9 fe/doc-updates later to maint).
(merge 7987d2232d jk/check-everything-connected-is-long-gone later to maint).
(merge 4ba3c9be47 dz/credential-doc-url-matching-rules later to maint).
(merge 4c399442f7 ma/commit-graph-docs later to maint).
(merge fc0503b04e ma/t1400-undebug-test later to maint).
(merge e56b53553a nd/packobjectshook-doc-fix later to maint).
(merge c56170a0c4 ma/mailing-list-address-in-git-help later to maint).
(merge 6e8fc70fce rs/sequencer-oidset-insert-avoids-dups later to maint).
(merge ad0b8f9575 mw/doc-typofixes later to maint).
(merge d9f079ad1a jc/how-to-document-api later to maint).
(merge b1492bf315 ma/t7005-bash-workaround later to maint).
(merge ac1f98a0df du/rev-parse-is-plumbing later to maint).
(merge ca8ed443a5 mm/doc-no-dashed-git later to maint).
(merge ce366a8144 du/get-tar-commit-id-is-plumbing later to maint).
(merge 61018fe9e0 du/cherry-is-plumbing later to maint).
(merge c7e5fe79b9 sb/strbuf-h-update later to maint).
(merge 8d2008196b tq/branch-create-wo-branch-get later to maint).
(merge 2e3c894f4b tq/branch-style-fix later to maint).
(merge c5d844af9c sg/doc-show-branch-typofix later to maint).
(merge 081d91618b ah/doc-updates later to maint).
(merge b84c783882 jc/cocci-preincr later to maint).
(merge 5e495f8122 uk/merge-subtree-doc-update later to maint).
(merge aaaa881822 jk/uploadpack-packobjectshook-fix later to maint).
(merge 3063477445 tb/char-may-be-unsigned later to maint).
(merge 8c64bc9420 sg/test-rebase-editor-fix later to maint).
(merge 71571cd7d6 ma/sequencer-do-reset-saner-loop-termination later to maint).
(merge 9a4cb8781e cb/notes-freeing-always-null-fix later to maint).
----------------------------------------------------------------
Changes since v2.19.0 are as follows:
Aaron Lindsay (1):
send-email: avoid empty transfer encoding header
Alban Gruin (21):
sequencer: make three functions and an enum from sequencer.c public
rebase -i: rewrite append_todo_help() in C
editor: add a function to launch the sequence editor
rebase -i: rewrite the edit-todo functionality in C
sequencer: add a new function to silence a command, except if it fails
rebase -i: rewrite setup_reflog_action() in C
rebase -i: rewrite checkout_onto() in C
sequencer: refactor append_todo_help() to write its message to a buffer
sequencer: change the way skip_unnecessary_picks() returns its result
t3404: todo list with commented-out commands only aborts
rebase -i: rewrite complete_action() in C
rebase -i: remove unused modes and functions
rebase -i: implement the logic to initialize $revisions in C
rebase -i: rewrite the rest of init_revisions_and_shortrevisions() in C
rebase -i: rewrite write_basic_state() in C
rebase -i: rewrite init_basic_state() in C
rebase -i: implement the main part of interactive rebase as a builtin
rebase--interactive2: rewrite the submodes of interactive rebase in C
rebase -i: remove git-rebase--interactive.sh
rebase -i: move rebase--helper modes to rebase--interactive
p3400: replace calls to `git checkout -b' by `git checkout -B'
Alexander Pyhalov (1):
t7005-editor: quote filename to fix whitespace-issue
Andreas Gruenbacher (1):
rev-parse: clear --exclude list after 'git rev-parse --all'
Andreas Heiduk (6):
doc: clarify boundaries of 'git worktree list --porcelain'
doc: fix ASCII art tab spacing
doc: fix inappropriate monospace formatting
doc: fix descripion for 'git tag --format'
doc: fix indentation of listing blocks in gitweb.conf.txt
doc: fix formatting in git-update-ref
Anton Serbulov (1):
mingw: fix getcwd when the parent directory cannot be queried
Antonio Ospite (10):
submodule: add a print_config_from_gitmodules() helper
submodule: factor out a config_set_in_gitmodules_file_gently function
t7411: merge tests 5 and 6
t7411: be nicer to future tests and really clean things up
submodule--helper: add a new 'config' subcommand
submodule: use the 'submodule--helper config' command
t7506: clean up .gitmodules properly before setting up new scenario
submodule: add a helper to check if it is safe to write to .gitmodules
submodule: support reading .gitmodules when it's not in the working tree
t/helper: add test-submodule-nested-repo-config
Ben Peart (19):
checkout: optimize "git checkout -b <new_branch>"
git-mv: allow submodules and fsmonitor to work together
t/README: correct spelling of "uncommon"
preload-index: use git_env_bool() not getenv() for customization
fsmonitor: update GIT_TEST_FSMONITOR support
read-cache: update TEST_GIT_INDEX_VERSION support
preload-index: update GIT_FORCE_PRELOAD_TEST support
read-cache: clean up casting and byte decoding
eoie: add End of Index Entry (EOIE) extension
config: add new index.threads config setting
read-cache: load cache extensions on a worker thread
ieot: add Index Entry Offset Table (IEOT) extension
read-cache: load cache entries on worker threads
reset: don't compute unstaged changes after reset when --quiet
reset: add new reset.quiet config setting
reset: warn when refresh_index() takes more than 2 seconds
speed up refresh_index() by utilizing preload_index()
add: speed up cmd_add() by utilizing read_cache_preload()
refresh_index: remove unnecessary calls to preload_index()
Brandon Williams (1):
config: document value 2 for protocol.version
Brendan Forster (1):
http: add support for disabling SSL revocation checks in cURL
Carlo Marcelo Arenas Belón (8):
unpack-trees: avoid dead store for struct progress
multi-pack-index: avoid dead store for struct progress
read-cache: use of memory after it is freed
commit-slabs: move MAYBE_UNUSED out
khash: silence -Wunused-function for delta-islands
compat: make sure git_mmap is not expected to write
sequencer: cleanup for gcc warning in non developer mode
builtin/notes: remove unnecessary free
Christian Couder (3):
pack-objects: refactor code into compute_layer_order()
pack-objects: move tree_depth into 'struct packing_data'
pack-objects: move 'layer' into 'struct packing_data'
Christian Hesse (2):
subtree: add build targets 'man' and 'html'
subtree: make install targets depend on build targets
Daniels Umanovskis (3):
doc: move git-rev-parse from porcelain to plumbing
doc: move git-get-tar-commit-id to plumbing
doc: move git-cherry to plumbing
David Zych (1):
doc: clarify gitcredentials path component matching
Denton Liu (3):
mergetool: accept -g/--[no-]gui as arguments
completion: support `git mergetool --[no-]gui`
doc: document diff/merge.guitool config keys
Derrick Stolee (92):
multi-pack-index: add design document
multi-pack-index: add format details
multi-pack-index: add builtin
multi-pack-index: add 'write' verb
midx: write header information to lockfile
multi-pack-index: load into memory
t5319: expand test data
packfile: generalize pack directory list
multi-pack-index: read packfile list
multi-pack-index: write pack names in chunk
midx: read pack names into array
midx: sort and deduplicate objects from packfiles
midx: write object ids in a chunk
midx: write object id fanout chunk
midx: write object offsets
config: create core.multiPackIndex setting
midx: read objects from multi-pack-index
midx: use midx in abbreviation calculations
midx: use existing midx when writing new one
midx: use midx in approximate_object_count
midx: prevent duplicate packfile loads
packfile: skip loading index if in multi-pack-index
midx: clear midx on repack
commit-reach: move walk methods from commit.c
commit.h: remove method declarations
commit-reach: move ref_newer from remote.c
commit-reach: move commit_contains from ref-filter
upload-pack: make reachable() more generic
upload-pack: refactor ok_to_give_up()
upload-pack: generalize commit date cutoff
commit-reach: move can_all_from_reach_with_flags
test-reach: create new test tool for ref_newer
test-reach: test in_merge_bases
test-reach: test is_descendant_of
test-reach: test get_merge_bases_many
test-reach: test reduce_heads
test-reach: test can_all_from_reach_with_flags
test-reach: test commit_contains
commit-reach: replace ref_newer logic
commit-reach: make can_all_from_reach... linear
commit-reach: use can_all_from_reach
multi-pack-index: provide more helpful usage info
multi-pack-index: store local property
midx: mark bad packed objects
midx: stop reporting garbage
midx: fix bug that skips midx with alternates
packfile: add all_packs list
treewide: use get_all_packs
midx: test a few commands that use get_all_packs
pack-objects: consider packs in multi-pack-index
commit-graph: update design document
test-repository: properly init repo
commit-graph: not compatible with replace objects
commit-graph: not compatible with grafts
commit-graph: not compatible with uninitialized repo
commit-graph: close_commit_graph before shallow walk
commit-graph: define GIT_TEST_COMMIT_GRAPH
t3206-range-diff.sh: cover single-patch case
t5318: use test_oid for HASH_LEN
multi-pack-index: add 'verify' verb
multi-pack-index: verify bad header
multi-pack-index: verify corrupt chunk lookup table
multi-pack-index: verify packname order
multi-pack-index: verify missing pack
multi-pack-index: verify oid fanout order
multi-pack-index: verify oid lookup order
multi-pack-index: fix 32-bit vs 64-bit size check
multi-pack-index: verify object offsets
multi-pack-index: report progress during 'verify'
fsck: verify multi-pack-index
commit-reach: properly peel tags
commit-reach: fix memory and flag leaks
commit-reach: cleanups in can_all_from_reach...
commit-graph: clean up leaked memory during write
commit-graph: reduce initial oid allocation
midx: fix broken free() in close_midx()
contrib: add coverage-diff script
ci: add optional test variables
commit-reach: fix first-parent heuristic
midx: close multi-pack-index on repack
multi-pack-index: define GIT_TEST_MULTI_PACK_INDEX
packfile: close multi-pack-index in close_all_packs
prio-queue: add 'peek' operation
test-reach: add run_three_modes method
test-reach: add rev-list tests
revision.c: begin refactoring --topo-order logic
commit/revisions: bookkeeping before refactoring
revision.c: generation-based topo-order algorithm
t6012: make rev-list tests more interesting
commit-reach: implement get_reachable_subset
test-reach: test get_reachable_subset
remote: make add_missing_tags() linear
Elijah Newren (14):
Remove superfluous trailing semicolons
t4200: demonstrate rerere segfault on specially crafted merge
rerere: avoid buffer overrun
update-ref: fix type of update_flags variable to match its usage
update-ref: allow --no-deref with --stdin
sequencer: fix --allow-empty-message behavior, make it smarter
merge-recursive: set paths correctly when three-way merging content
merge-recursive: avoid wrapper function when unnecessary and wasteful
merge-recursive: remove final remaining caller of merge_file_one()
merge-recursive: rename merge_file_1() and merge_content()
commit: fix erroneous BUG, 'multiple renames on the same target? how?'
merge-recursive: improve auto-merging messages with path collisions
merge-recursive: avoid showing conflicts with merge branch before HEAD
fsck: move fsck_head_link() to get_default_heads() to avoid some globals
Eric Sunshine (26):
format-patch: allow additional generated content in make_cover_letter()
format-patch: add --interdiff option to embed diff in cover letter
format-patch: teach --interdiff to respect -v/--reroll-count
interdiff: teach show_interdiff() to indent interdiff
log-tree: show_log: make commentary block delimiting reusable
format-patch: allow --interdiff to apply to a lone-patch
range-diff: respect diff_option.file rather than assuming 'stdout'
range-diff: publish default creation factor
range-diff: relieve callers of low-level configuration burden
format-patch: add --range-diff option to embed diff in cover letter
format-patch: extend --range-diff to accept revision range
format-patch: teach --range-diff to respect -v/--reroll-count
format-patch: add --creation-factor tweak for --range-diff
format-patch: allow --range-diff to apply to a lone-patch
worktree: don't die() in library function find_worktree()
worktree: move delete_git_dir() earlier in file for upcoming new callers
worktree: generalize delete_git_dir() to reduce code duplication
worktree: prepare for more checks of whether path can become worktree
worktree: disallow adding same path multiple times
worktree: teach 'add' to respect --force for registered but missing path
worktree: teach 'move' to override lock when --force given twice
worktree: teach 'remove' to override lock when --force given twice
worktree: delete .git/worktrees if empty after 'remove'
doc-diff: fix non-portable 'man' invocation
doc-diff: add --clean mode to remove temporary working gunk
doc/Makefile: drop doc-diff worktree and temporary files on "make clean"
Frederick Eaton (3):
git-archimport.1: specify what kind of Arch we're talking about
git-column.1: clarify initial description, provide examples
git-describe.1: clarify that "human readable" is also git-readable
James Knight (1):
build: link with curl-defined linker flags
Jann Horn (2):
patch-delta: fix oob read
patch-delta: consistently report corruption
Jeff Hostetler (2):
t0051: test GIT_TRACE to a windows named pipe
mingw: fix mingw_open_append to work with named pipes
Jeff King (94):
branch: make "-l" a synonym for "--list"
Add delta-islands.{c,h}
pack-objects: add delta-islands support
repack: add delta-islands support
t5320: tests for delta islands
t/perf: factor boilerplate out of test_perf
t/perf: factor out percent calculations
t/perf: add infrastructure for measuring sizes
t/perf: add perf tests for fetches from a bitmapped server
pack-bitmap: save "have" bitmap from walk
pack-objects: reuse on-disk deltas for thin "have" objects
SubmittingPatches: mention doc-diff
rev-list: make empty --stdin not an error
trailer: use size_t for string offsets
trailer: use size_t for iterating trailer list
trailer: pass process_trailer_opts to trailer_info_get()
interpret-trailers: tighten check for "---" patch boundary
interpret-trailers: allow suppressing "---" divider
pretty, ref-filter: format %(trailers) with no_divider option
sequencer: ignore "---" divider when parsing trailers
append_signoff: use size_t for string offsets
coccinelle: use <...> for function exclusion
introduce hasheq() and oideq()
convert "oidcmp() == 0" to oideq()
convert "hashcmp() == 0" to hasheq()
convert "oidcmp() != 0" to "!oideq()"
convert "hashcmp() != 0" to "!hasheq()"
convert hashmap comparison functions to oideq()
read-cache: use oideq() in ce_compare functions
show_dirstat: simplify same-content check
doc-diff: always use oids inside worktree
test-delta: read input into a heap buffer
t5303: test some corrupt deltas
patch-delta: handle truncated copy parameters
t5303: use printf to generate delta bases
doc/git-branch: remove obsolete "-l" references
bitmap_has_sha1_in_uninteresting(): drop BUG check
t5310: test delta reuse with bitmaps
traverse_bitmap_commit_list(): don't free result
pack-bitmap: drop "loaded" flag
reopen_tempfile(): truncate opened file
doc-diff: force worktree add
config.mak.dev: add -Wformat-security
pack-objects: handle island check for "external" delta base
receive-pack: update comment with check_everything_connected
submodule--helper: use "--" to signal end of clone options
submodule-config: ban submodule urls that start with dash
submodule-config: ban submodule paths that start with a dash
fsck: detect submodule urls starting with dash
fsck: detect submodule paths starting with dash
more oideq/hasheq conversions
transport: drop refnames from for_each_alternate_ref
test-tool: show tool list on error
config.mak.dev: enable -Wunused-function
run-command: mark path lookup errors with ENOENT
t5410: use longer path for sample script
upload-pack: fix broken if/else chain in config callback
t1450: check large blob in trailing-garbage test
check_stream_sha1(): handle input underflow
cat-file: handle streaming failures consistently
ls-remote: do not send ref prefixes for patterns
ls-remote: pass heads/tags prefixes to transport
read_istream_pack_non_delta(): document input handling
xdiff: provide a separate emit callback for hunks
xdiff-interface: provide a separate consume callback for hunks
rev-list: handle flags for --indexed-objects
approxidate: handle pending number for "specials"
pathspec: handle non-terminated strings with :(attr)
diff: avoid generating unused hunk header lines
diff: discard hunk headers for patch-ids earlier
diff: use hunk callback for word-diff
combine-diff: use an xdiff hunk callback
diff: convert --check to use a hunk callback
range-diff: use a hunk callback
xdiff-interface: drop parse_hunk_header()
apply: mark include/exclude options as NONEG
am: handle --no-patch-format option
ls-files: mark exclude options as NONEG
pack-objects: mark index-version option as NONEG
cat-file: mark batch options with NONEG
status: mark --find-renames option with NONEG
format-patch: mark "--no-numbered" option with NONEG
show-branch: mark --reflog option as NONEG
tag: mark "--message" option with NONEG
cat-file: report an error on multiple --batch options
apply: return -1 from option callback instead of calling exit(1)
parse-options: drop OPT_DATE()
assert NOARG/NONEG behavior of parse-options callbacks
midx: double-check large object write loop
merge: extract verify_merge_signature() helper
merge: handle --verify-signatures for unborn branch
pull: handle --verify-signatures for unborn branch
approxidate: fix NULL dereference in date_time()
bundle: dup() output descriptor closer to point-of-use
Johannes Schindelin (55):
rebase -i --autosquash: demonstrate a problem skipping the last squash
rebase -i: be careful to wrap up fixup/squash chains
compat/poll: prepare for targeting Windows Vista
mingw: set _WIN32_WINNT explicitly for Git for Windows
mingw: bump the minimum Windows version to Vista
builtin rebase: prepare for builtin rebase -i
rebase -i: clarify what happens on a failed `exec`
rebase -i: introduce the 'break' command
getpwuid(mingw): initialize the structure only once
getpwuid(mingw): provide a better default for the user name
mingw: use domain information for default email
http: add support for selecting SSL backends at runtime
pack-objects: fix typo 'detla' -> 'delta'
pack-objects (mingw): demonstrate a segmentation fault with large deltas
pack-objects (mingw): initialize `packing_data` mutex in the correct spot
rebase (autostash): avoid duplicate call to state_dir_path()
rebase (autostash): store the full OID in <state-dir>/autostash
rebase (autostash): use an explicit OID to apply the stash
mingw: factor out code to set stat() data
rebase --autostash: demonstrate a problem with dirty submodules
rebase --autostash: fix issue with dirty submodules
mingw: load system libraries the recommended way
mingw: ensure `getcwd()` reports the correct case
repack: point out a bug handling stale shallow info
shallow: offer to prune only non-existing entries
repack -ad: prune the list of shallow commits
http: when using Secure Channel, ignore sslCAInfo by default
t7800: fix quoting
mingw: reencode environment variables on the fly (UTF-16 <-> UTF-8)
config: rename `dummy` parameter to `cb` in git_default_config()
config: allow for platform-specific core.* config settings
config: move Windows-specific config settings into compat/mingw.c
mingw: unset PERL5LIB by default
mingw: fix isatty() after dup2()
t3404: decouple some test cases from outcomes of previous test cases
t3418: decouple test cases from a previous `rebase -p` test case
tests: optionally skip `git rebase -p` tests
Windows: force-recompile git.res for differing architectures
built-in rebase: demonstrate regression with --autostash
built-in rebase --autostash: leave the current branch alone if possible
Update .mailmap
rebase -r: demonstrate bug with conflicting merges
rebase -r: do not write MERGE_HEAD unless needed
rebase -i: include MERGE_HEAD into files to clean up
built-in rebase --skip/--abort: clean up stale .git/<name> files
status: rebase and merge can be in progress at the same time
apply --recount: allow "no-op hunks"
rebase: consolidate clean-up code before leaving reset_head()
rebase: prepare reset_head() for more flags
built-in rebase: reinstate `checkout -q` behavior where appropriate
mingw: use `CreateHardLink()` directly
rebase: really just passthru the `git am` options
rebase: validate -C<n> and --whitespace=<mode> parameters early
config: report a bug if git_dir exists without commondir
mingw: replace an obsolete link with the superseding one
Johannes Sixt (3):
diff: don't attempt to strip prefix from absolute Windows paths
rebase -i: recognize short commands without arguments
t3404-rebase-interactive: test abbreviated commands
Jonathan Nieder (6):
gc: improve handling of errors reading gc.log
gc: exit with status 128 on failure
gc: do not return error for prior errors in daemonized mode
commit-reach: correct accidental #include of C file
mailmap: consistently normalize brian m. carlson's name
git doc: direct bug reporters to mailing list archive
Jonathan Tan (15):
fetch-object: unify fetch_object[s] functions
fetch-object: set exact_oid when fetching
connected: document connectivity in partial clones
fetch: in partial clone, check presence of targets
fetch-pack: avoid object flags if no_dependents
fetch-pack: exclude blobs when lazy-fetching trees
transport: allow skipping of ref listing
transport: do not list refs if possible
transport: list refs before fetch if necessary
fetch: do not list refs if fetching only hashes
cache-tree: skip some blob checks in partial clone
upload-pack: make have_obj not global
upload-pack: make want_obj not global
upload-pack: clear flags before each v2 request
fetch-pack: be more precise in parsing v2 response
Josh Steadmon (4):
fuzz: add basic fuzz testing target.
fuzz: add fuzz testing for packfile indices.
archive: initialize archivers earlier
Makefile: use FUZZ_CXXFLAGS for linking fuzzers
Joshua Watt (1):
send-email: explicitly disable authentication
Junio C Hamano (29):
Revert "doc/Makefile: drop doc-diff worktree and temporary files on "make clean""
Initial batch post 2.19
Second batch post 2.19
Git 2.14.5
Git 2.15.3
Git 2.16.5
Git 2.17.2
Git 2.18.1
Git 2.19.1
t0000: do not get self-test disrupted by environment warnings
CodingGuidelines: document the API in *.h files
Declare that the next one will be named 2.20
Third batch for 2.20
rebase: fix typoes in error messages
Fourth batch for 2.20
Revert "subtree: make install targets depend on build targets"
Fifth batch for 2.20
receive: denyCurrentBranch=updateinstead should not blindly update
cocci: simplify "if (++u > 1)" to "if (u++)"
fsck: s/++i > 1/i++/
http: give curl version warnings consistently
Sixth batch for 2.20
Seventh batch for 2.20
fetch: replace string-list used as a look-up table with a hashmap
rebase: apply cocci patch
Eighth batch for 2.20
Ninth batch for 2.20
Tenth batch for 2.20
Git 2.20-rc0
Karsten Blees (2):
mingw: replace MSVCRT's fstat() with a Win32-based implementation
mingw: implement nanosecond-precision file times
Loo Rong Jie (1):
win32: replace pthread_cond_*() with much simpler code
Lucas De Marchi (1):
range-diff: allow to diff files regardless of submodule config
Luke Diamand (3):
git-p4: do not fail in verbose mode for missing 'fileSize' key
git-p4: unshelve into refs/remotes/p4-unshelved, not refs/remotes/p4/unshelved
git-p4: fully support unshelving changelists
Martin Ågren (9):
Doc: use `--type=bool` instead of `--bool`
git-config.txt: fix 'see: above' note
git-commit-graph.txt: fix bullet lists
git-commit-graph.txt: typeset more in monospace
git-commit-graph.txt: refer to "*commit*-graph file"
Doc: refer to the "commit-graph file" with dash
t1400: drop debug `echo` to actually execute `test`
builtin/commit-graph.c: UNLEAK variables
sequencer: break out of loop explicitly
Matthew DeVore (19):
list-objects: store common func args in struct
list-objects: refactor to process_tree_contents
list-objects: always parse trees gently
t/README: reformat Do, Don't, Keep in mind lists
Documentation: add shell guidelines
tests: standardize pipe placement
t/*: fix ordering of expected/observed arguments
tests: don't swallow Git errors upstream of pipes
t9109: don't swallow Git errors upstream of pipes
tests: order arguments to git-rev-list properly
rev-list: handle missing tree objects properly
revision: mark non-user-given objects instead
list-objects-filter: use BUG rather than die
list-objects-filter-options: do not over-strbuf_init
list-objects-filter: implement filter tree:0
filter-trees: code clean-up of tests
list-objects: support for skipping tree traversal
Documentation/git-log.txt: do not show --exclude-promisor-objects
exclude-promisor-objects: declare when option is allowed
Max Kirillov (1):
http-backend test: make empty CONTENT_LENGTH test more realistic
Michael Witten (3):
docs: typo: s/go/to/
docs: graph: remove unnecessary `graph_update()' call
docs: typo: s/isimilar/similar/
Michał Górny (6):
gpg-interface.c: detect and reject multiple signatures on commits
gpg-interface.c: use flags to determine key/signer info presence
gpg-interface.c: support getting key fingerprint via %GF format
gpg-interface.c: obtain primary key fingerprint as well
t/t7510-signed-commit.sh: Add %GP to custom format checks
t/t7510-signed-commit.sh: add signing subkey to Eris Discordia key
Mihir Mehta (1):
doc: fix a typo and clarify a sentence
Nguyễn Thái Ngọc Duy (166):
clone: report duplicate entries on case-insensitive filesystems
trace.h: support nested performance tracing
unpack-trees: add performance tracing
unpack-trees: optimize walking same trees with cache-tree
unpack-trees: reduce malloc in cache-tree walk
unpack-trees: reuse (still valid) cache-tree from src_index
unpack-trees: add missing cache invalidation
cache-tree: verify valid cache-tree in the test suite
Document update for nd/unpack-trees-with-cache-tree
bisect.c: make show_list() build again
t/helper: keep test-tool command list sorted
t/helper: merge test-dump-untracked-cache into test-tool
t/helper: merge test-pkt-line into test-tool
t/helper: merge test-parse-options into test-tool
t/helper: merge test-dump-fsmonitor into test-tool
Makefile: add a hint about TEST_BUILTINS_OBJS
config.txt: follow camelCase naming
config.txt: move fetch part out to a separate file
config.txt: move format part out to a separate file
config.txt: move gitcvs part out to a separate file
config.txt: move gui part out to a separate file
config.txt: move pull part out to a separate file
config.txt: move push part out to a separate file
config.txt: move receive part out to a separate file
config.txt: move sendemail part out to a separate file
config.txt: move sequence.editor out of "core" part
config.txt: move submodule part out to a separate file
archive.c: remove implicit dependency the_repository
status: show progress bar if refreshing the index takes too long
add: do not accept pathspec magic 'attr'
completion: support "git fetch --multiple"
read-cache.c: remove 'const' from index_has_changes()
diff.c: reduce implicit dependency on the_index
combine-diff.c: remove implicit dependency on the_index
blame.c: rename "repo" argument to "r"
diff.c: remove the_index dependency in textconv() functions
grep.c: remove implicit dependency on the_index
diff.c: remove implicit dependency on the_index
read-cache.c: remove implicit dependency on the_index
diff-lib.c: remove implicit dependency on the_index
ll-merge.c: remove implicit dependency on the_index
merge-blobs.c: remove implicit dependency on the_index
merge.c: remove implicit dependency on the_index
patch-ids.c: remove implicit dependency on the_index
sha1-file.c: remove implicit dependency on the_index
rerere.c: remove implicit dependency on the_index
userdiff.c: remove implicit dependency on the_index
line-range.c: remove implicit dependency on the_index
submodule.c: remove implicit dependency on the_index
tree-diff.c: remove implicit dependency on the_index
ws.c: remove implicit dependency on the_index
revision.c: remove implicit dependency on the_index
revision.c: reduce implicit dependency the_repository
read-cache.c: optimize reading index format v4
config.txt: correct the note about uploadpack.packObjectsHook
help -a: improve and make --verbose default
refs.c: indent with tabs, not spaces
Add a place for (not) sharing stuff between worktrees
submodule.c: remove some of the_repository references
completion: fix __gitcomp_builtin no longer consider extra options
t1300: extract and use test_cmp_config()
worktree: add per-worktree config files
refs: new ref types to make per-worktree refs visible to all worktrees
revision.c: correct a parameter name
revision.c: better error reporting on ref from different worktrees
fsck: check HEAD and reflog from other worktrees
reflog expire: cover reflog from all worktrees
Update makefile in preparation for Documentation/config/*.txt
config.txt: move advice.* to a separate file
config.txt: move core.* to a separate file
config.txt: move add.* to a separate file
config.txt: move alias.* to a separate file
config.txt: move am.* to a separate file
config.txt: move apply.* to a separate file
config.txt: move blame.* to a separate file
config.txt: move branch.* to a separate file
config.txt: move browser.* to a separate file
config.txt: move checkout.* to a separate file
config.txt: move clean.* to a separate file
config.txt: move color.* to a separate file
config.txt: move column.* to a separate file
config.txt: move commit.* to a separate file
config.txt: move credential.* to a separate file
config.txt: move completion.* to a separate file
config.txt: move diff-config.txt to config/
config.txt: move difftool.* to a separate file
config.txt: move fastimport.* to a separate file
config.txt: move fetch-config.txt to config/
config.txt: move filter.* to a separate file
config.txt: move format-config.txt to config/
config.txt: move fmt-merge-msg-config.txt to config/
config.txt: move fsck.* to a separate file
config.txt: move gc.* to a separate file
config.txt: move gitcvs-config.txt to config/
config.txt: move gitweb.* to a separate file
config.txt: move grep.* to a separate file
config.txt: move gpg.* to a separate file
config.txt: move gui-config.txt to config/
config.txt: move guitool.* to a separate file
config.txt: move help.* to a separate file
config.txt: move ssh.* to a separate file
config.txt: move http.* to a separate file
config.txt: move i18n.* to a separate file
git-imap-send.txt: move imap.* to a separate file
config.txt: move index.* to a separate file
config.txt: move init.* to a separate file
config.txt: move instaweb.* to a separate file
config.txt: move interactive.* to a separate file
config.txt: move log.* to a separate file
config.txt: move mailinfo.* to a separate file
config.txt: move mailmap.* to a separate file
config.txt: move man.* to a separate file
config.txt: move merge-config.txt to config/
config.txt: move mergetool.* to a separate file
config.txt: move notes.* to a separate file
config.txt: move pack.* to a separate file
config.txt: move pager.* to a separate file
config.txt: move pretty.* to a separate file
config.txt: move protocol.* to a separate file
config.txt: move pull-config.txt to config/
config.txt: move push-config.txt to config/
config.txt: move rebase-config.txt to config/
config.txt: move receive-config.txt to config/
config.txt: move remote.* to a separate file
config.txt: move remotes.* to a separate file
config.txt: move repack.* to a separate file
config.txt: move rerere.* to a separate file
config.txt: move reset.* to a separate file
config.txt: move sendemail-config.txt to config/
config.txt: move sequencer.* to a separate file
config.txt: move showBranch.* to a separate file
config.txt: move splitIndex.* to a separate file
config.txt: move status.* to a separate file
config.txt: move stash.* to a separate file
config.txt: move submodule.* to a separate file
config.txt: move tag.* to a separate file
config.txt: move transfer.* to a separate file
config.txt: move uploadarchive.* to a separate file
config.txt: move uploadpack.* to a separate file
config.txt: move url.* to a separate file
config.txt: move user.* to a separate file
config.txt: move versionsort.* to a separate file
config.txt: move web.* to a separate file
config.txt: move worktree.* to a separate file
config.txt: remove config/dummy.txt
thread-utils: macros to unconditionally compile pthreads API
wildmatch: change behavior of "foo**bar" in WM_PATHNAME mode
git-worktree.txt: correct linkgit command name
sequencer.c: remove a stray semicolon
tree-walk.c: fix overoptimistic inclusion in :(exclude) matching
run-command.h: include thread-utils.h instead of pthread.h
send-pack.c: move async's #ifdef NO_PTHREADS back to run-command.c
index-pack: remove #ifdef NO_PTHREADS
name-hash.c: remove #ifdef NO_PTHREADS
attr.c: remove #ifdef NO_PTHREADS
grep: remove #ifdef NO_PTHREADS
grep: clean up num_threads handling
preload-index.c: remove #ifdef NO_PTHREADS
pack-objects: remove #ifdef NO_PTHREADS
read-cache.c: remove #ifdef NO_PTHREADS
read-cache.c: reduce branching based on HAVE_THREADS
read-cache.c: initialize copy_len to shut up gcc 8
Clean up pthread_create() error handling
completion: use __gitcomp_builtin for format-patch
build: fix broken command-list.h generation with core.autocrlf
doc: move extensions.worktreeConfig to the right place
Nickolai Belakovski (2):
worktree: update documentation for lock_reason and lock_reason_valid
worktree: rename is_worktree_locked to worktree_lock_reason
Noam Postavsky (1):
log: fix coloring of certain octopus merge shapes
Olga Telezhnaya (3):
ref-filter: free memory from used_atom
ls-remote: release memory instead of UNLEAK
ref-filter: free item->value and item->value->s
Phillip Wood (11):
diff: fix --color-moved-ws=allow-indentation-change
diff --color-moved-ws: fix double free crash
diff --color-moved-ws: fix out of bounds string access
diff --color-moved-ws: fix a memory leak
diff --color-moved-ws: fix another memory leak
diff --color-moved: fix a memory leak
am: don't die in read_author_script()
am: improve author-script error reporting
am: rename read_author_script()
add read_author_script() to libgit
sequencer: use read_author_script()
Pratik Karki (46):
rebase: start implementing it as a builtin
rebase: refactor common shell functions into their own file
builtin/rebase: support running "git rebase <upstream>"
builtin rebase: support --onto
builtin rebase: support `git rebase --onto A...B`
builtin rebase: handle the pre-rebase hook and --no-verify
builtin rebase: support --quiet
builtin rebase: support the `verbose` and `diffstat` options
builtin rebase: require a clean worktree
builtin rebase: try to fast forward when possible
builtin rebase: support --force-rebase
builtin rebase: start a new rebase only if none is in progress
builtin rebase: only store fully-qualified refs in `options.head_name`
builtin rebase: support `git rebase <upstream> <switch-to>`
builtin rebase: support --continue
builtin rebase: support --skip
builtin rebase: support --abort
builtin rebase: support --quit
builtin rebase: support --edit-todo and --show-current-patch
builtin rebase: actions require a rebase in progress
builtin rebase: stop if `git am` is in progress
builtin rebase: allow selecting the rebase "backend"
builtin rebase: support --signoff
builtin rebase: support --rerere-autoupdate
builtin rebase: support --committer-date-is-author-date
builtin rebase: support `ignore-whitespace` option
builtin rebase: support `ignore-date` option
builtin rebase: support `keep-empty` option
builtin rebase: support `--autosquash`
builtin rebase: support `--gpg-sign` option
builtin rebase: support `-C` and `--whitespace=<type>`
builtin rebase: support `--autostash` option
builtin rebase: support `--exec`
builtin rebase: support `--allow-empty-message` option
builtin rebase: support --rebase-merges[=[no-]rebase-cousins]
merge-base --fork-point: extract libified function
builtin rebase: support `fork-point` option
builtin rebase: add support for custom merge strategies
builtin rebase: support --root
builtin rebase: optionally auto-detect the upstream
builtin rebase: optionally pass custom reflogs to reset_head()
builtin rebase: fast-forward to onto if it is a proper descendant
builtin rebase: show progress when connected to a terminal
builtin rebase: use no-op editor when interactive is "implied"
builtin rebase: error out on incompatible option/mode combinations
rebase: default to using the builtin rebase
Rafael Ascensão (2):
refs: show --exclude failure with --branches/tags/remotes=glob
refs: fix some exclude patterns being ignored
Ralf Thielow (1):
git-rebase.sh: fix typos in error messages
Ramsay Jones (12):
Makefile: add a hdr-check target
json-writer.h: add missing include (hdr-check)
ewah/ewok_rlw.h: add missing include (hdr-check)
refs/ref-cache.h: add missing declarations (hdr-check)
refs/packed-backend.h: add missing declaration (hdr-check)
refs/refs-internal.h: add missing declarations (hdr-check)
midx.h: add missing forward declarations (hdr-check)
delta-islands.h: add missing forward declarations (hdr-check)
headers: normalize the spelling of some header guards
fetch-object.h: add missing declaration (hdr-check)
ewok_rlw.h: add missing 'inline' to function definition
commit-reach.h: add missing declarations (hdr-check)
Rasmus Villemoes (6):
help: redirect to aliased commands for "git cmd --help"
git.c: handle_alias: prepend alias info when first argument is -h
git-help.txt: document "git help cmd" vs "git cmd --help" for aliases
Documentation/git-send-email.txt: style fixes
send-email: only consider lines containing @ or <> for automatic Cc'ing
send-email: also pick up cc addresses from -by trailers
René Scharfe (12):
mailinfo: support format=flowed
fsck: add a performance test for skipList
fsck: use strbuf_getline() to read skiplist file
fsck: use oidset instead of oid_array for skipList
sequencer: use return value of oidset_insert()
grep: add -r/--[no-]recursive
fetch-pack: factor out is_unmatched_ref()
fetch-pack: load tip_oids eagerly iff needed
khash: factor out kh_release_*
oidset: use khash
oidset: uninline oidset_init()
commit-reach: fix cast in compare_commits_by_gen()
Roger Strain (1):
subtree: performance improvement for finding unexpected parent commits
SZEDER Gábor (16):
t1404: increase core.packedRefsTimeout to avoid occasional test failure
Documentation/git.txt: clarify that GIT_TRACE=/path appends
t3701-add-interactive: tighten the check of trace output
t1700-split-index: drop unnecessary 'grep'
t0090: disable GIT_TEST_SPLIT_INDEX for the test checking split index
t1700-split-index: document why FSMONITOR is disabled in this test script
split-index: add tests to demonstrate the racy split index problem
t1700-split-index: date back files to avoid racy situations
split-index: count the number of deleted entries
split-index: don't compare cached data of entries already marked for split index
split-index: smudge and add racily clean cache entries to split index
split-index: BUG() when cache entry refers to non-existing shared entry
object_id.cocci: match only expressions of type 'struct object_id'
test-lib: introduce the '-V' short option for '--verbose-log'
travis-ci: install packages in 'ci/install-dependencies.sh'
ref-filter: don't look for objects when outside of a repository
Sam McKelvie (1):
rev-parse: --show-superproject-working-tree should work during a merge
Saulius Gurklys (1):
doc: fix small typo in git show-branch
Sebastian Staudt (1):
travis-ci: no longer use containers
Shulhan (1):
builtin/remote: quote remote name on error to display empty name
Stefan Beller (25):
git-submodule.sh: align error reporting for update mode to use path
git-submodule.sh: rename unused variables
builtin/submodule--helper: factor out submodule updating
builtin/submodule--helper: store update_clone information in a struct
builtin/submodule--helper: factor out method to update a single submodule
submodule--helper: replace connect-gitdir-workingtree by ensure-core-worktree
submodule--helper: introduce new update-module-mode helper
test_decode_color: understand FAINT and ITALIC
t3206: add color test for range-diff --dual-color
diff.c: simplify caller of emit_line_0
diff.c: reorder arguments for emit_line_ws_markup
diff.c: add set_sign to emit_line_0
diff: use emit_line_0 once per line
diff.c: omit check for line prefix in emit_line_0
diff.c: rewrite emit_line_0 more understandably
diff.c: add --output-indicator-{new, old, context}
range-diff: make use of different output indicators
range-diff: indent special lines as context
refs.c: migrate internal ref iteration to pass thru repository argument
refs.c: upgrade for_each_replace_ref to be a each_repo_ref_fn callback
string-list: remove unused function print_string_list
strbuf.h: format according to coding guidelines
diff.c: pass sign_index to emit_line_ws_markup
submodule helper: convert relative URL to absolute URL if needed
builtin/submodule--helper: remove debugging leftover tracing
Stephen P. Smith (10):
wt-status.c: move has_unmerged earlier in the file
wt-status: rename commitable to committable
t7501: add test of "commit --dry-run --short"
wt-status.c: set the committable flag in the collect phase
roll wt_status_state into wt_status and populate in the collect phase
t2000: rename and combine checkout clash tests
t7509: cleanup description and filename
t7502: rename commit test script to comply with naming convention
t7500: rename commit tests script to comply with naming convention
t7501: rename commit test to comply with naming convention
Steve Hoelzer (1):
poll: use GetTickCount64() to avoid wrap-around issues
Steven Fernandez (1):
git-completion.bash: add completion for stash list
Strain, Roger L (4):
subtree: refactor split of a commit into standalone method
subtree: make --ignore-joins pay attention to adds
subtree: use commits before rejoins for splits
subtree: improve decision on merges kept in split
Tao Qingyun (3):
refs: docstring typo
builtin/branch.c: remove useless branch_get
branch: trivial style fix
Taylor Blau (4):
transport.c: extract 'fill_alternate_refs_command'
transport.c: introduce core.alternateRefsCommand
transport.c: introduce core.alternateRefsPrefixes
Documentation/config.txt: fix typo in core.alternateRefsCommand
Thomas Gummerer (17):
rerere: unify error messages when read_cache fails
rerere: lowercase error messages
rerere: wrap paths in output in sq
rerere: mark strings for translation
rerere: add documentation for conflict normalization
rerere: fix crash with files rerere can't handle
rerere: only return whether a path has conflicts or not
rerere: factor out handle_conflict function
rerere: return strbuf from handle path
rerere: teach rerere to handle nested conflicts
rerere: recalculate conflict ID when unresolved conflict is committed
rerere: mention caveat about unmatched conflict markers
rerere: add note about files with existing conflict markers
.gitattributes: add conflict-marker-size for relevant files
linear-assignment: fix potential out of bounds memory access
t5551: move setup code inside test_expect blocks
t5551: compare sorted cookies files
Tim Schumacher (4):
Documentation/Makefile: make manpage-base-url.xsl generation quieter
alias: add support for aliases of an alias
alias: show the call history when an alias is looping
t0014: introduce an alias testing suite
Torsten Bögershausen (2):
Make git_check_attr() a void function
path.c: char is not (always) signed
Uwe Kleine-König (1):
howto/using-merge-subtree: mention --allow-unrelated-histories
brian m. carlson (26):
t: add test functions to translate hash-related values
t0000: use hash translation table
t0000: update tests for SHA-256
t0002: abstract away SHA-1 specific constants
t0064: make hash size independent
t1006: make hash size independent
t1400: switch hard-coded object ID to variable
t1405: make hash size independent
t1406: make hash-size independent
t1407: make hash size independent
editorconfig: provide editor settings for Git developers
editorconfig: indicate settings should be kept in sync
pack-bitmap-write: use GIT_MAX_RAWSZ for allocation
builtin/repack: replace hard-coded constants
builtin/mktree: remove hard-coded constant
builtin/fetch-pack: remove constants with parse_oid_hex
pack-revindex: express constants in terms of the_hash_algo
packfile: express constants in terms of the_hash_algo
refs/packed-backend: express constants using the_hash_algo
upload-pack: express constants in terms of the_hash_algo
transport: use parse_oid_hex instead of a constant
tag: express constant in terms of the_hash_algo
apply: replace hard-coded constants
apply: rename new_sha1_prefix and old_sha1_prefix
submodule: make zero-oid comparison hash function agnostic
rerere: convert to use the_hash_algo
Ævar Arnfjörð Bjarmason (31):
fetch: change "branch" to "reference" in --force -h output
push tests: make use of unused $1 in test description
push tests: use spaces in interpolated string
fetch tests: add a test for clobbering tag behavior
push doc: remove confusing mention of remote merger
push doc: move mention of "tag <tag>" later in the prose
push doc: correct lies about how push refspecs work
fetch: document local ref updates with/without --force
fetch: stop clobbering existing tags without --force
fsck tests: setup of bogus commit object
fsck tests: add a test for no skipList input
fsck: document and test sorted skipList input
fsck: document and test commented & empty line skipList input
fsck: document that skipList input must be unabbreviated
fsck: add a performance test
fsck: support comments & empty lines in skipList
commit-graph write: add progress output
commit-graph verify: add progress output
config doc: add missing list separator for checkout.optimizeNewBranch
push doc: add spacing between two words
fetch doc: correct grammar in --force docs
gc: fix regression in 7b0f229222 impacting --quiet
gc doc: mention the commit-graph in the intro
pack-objects test: modernize style
pack-objects tests: don't leave test .git corrupt at end
index-pack tests: don't leave test repo dirty at end
range-diff doc: add a section about output stability
range-diff: fix regression in passing along diff options
range-diff: make diff option behavior (e.g. --stat) consistent
rebase doc: document rebase.useBuiltin
tests: add a special setup where rebase.useBuiltin is off
^ permalink raw reply [relevance 2%]
* [PATCH 25/78] config.txt: move fsck.* to a separate file
@ 2018-10-27 6:22 14% ` Nguyễn Thái Ngọc Duy
0 siblings, 0 replies; 71+ results
From: Nguyễn Thái Ngọc Duy @ 2018-10-27 6:22 UTC (permalink / raw)
To: git; +Cc: Junio C Hamano, Nguyễn Thái Ngọc Duy
Signed-off-by: Nguyễn Thái Ngọc Duy <pclouds@gmail.com>
---
Documentation/config.txt | 68 +----------------------------------
Documentation/config/fsck.txt | 67 ++++++++++++++++++++++++++++++++++
2 files changed, 68 insertions(+), 67 deletions(-)
create mode 100644 Documentation/config/fsck.txt
diff --git a/Documentation/config.txt b/Documentation/config.txt
index 3dc2285ba5..f70f95d5cf 100644
--- a/Documentation/config.txt
+++ b/Documentation/config.txt
@@ -331,73 +331,7 @@ include::config/format.txt[]
include::config/filter.txt[]
-fsck.<msg-id>::
- During fsck git may find issues with legacy data which
- wouldn't be generated by current versions of git, and which
- wouldn't be sent over the wire if `transfer.fsckObjects` was
- set. This feature is intended to support working with legacy
- repositories containing such data.
-+
-Setting `fsck.<msg-id>` will be picked up by linkgit:git-fsck[1], but
-to accept pushes of such data set `receive.fsck.<msg-id>` instead, or
-to clone or fetch it set `fetch.fsck.<msg-id>`.
-+
-The rest of the documentation discusses `fsck.*` for brevity, but the
-same applies for the corresponding `receive.fsck.*` and
-`fetch.<msg-id>.*`. variables.
-+
-Unlike variables like `color.ui` and `core.editor` the
-`receive.fsck.<msg-id>` and `fetch.fsck.<msg-id>` variables will not
-fall back on the `fsck.<msg-id>` configuration if they aren't set. To
-uniformly configure the same fsck settings in different circumstances
-all three of them they must all set to the same values.
-+
-When `fsck.<msg-id>` is set, errors can be switched to warnings and
-vice versa by configuring the `fsck.<msg-id>` setting where the
-`<msg-id>` is the fsck message ID and the value is one of `error`,
-`warn` or `ignore`. For convenience, fsck prefixes the error/warning
-with the message ID, e.g. "missingEmail: invalid author/committer line
-- missing email" means that setting `fsck.missingEmail = ignore` will
-hide that issue.
-+
-In general, it is better to enumerate existing objects with problems
-with `fsck.skipList`, instead of listing the kind of breakages these
-problematic objects share to be ignored, as doing the latter will
-allow new instances of the same breakages go unnoticed.
-+
-Setting an unknown `fsck.<msg-id>` value will cause fsck to die, but
-doing the same for `receive.fsck.<msg-id>` and `fetch.fsck.<msg-id>`
-will only cause git to warn.
-
-fsck.skipList::
- The path to a list of object names (i.e. one unabbreviated SHA-1 per
- line) that are known to be broken in a non-fatal way and should
- be ignored. On versions of Git 2.20 and later comments ('#'), empty
- lines, and any leading and trailing whitespace is ignored. Everything
- but a SHA-1 per line will error out on older versions.
-+
-This feature is useful when an established project should be accepted
-despite early commits containing errors that can be safely ignored
-such as invalid committer email addresses. Note: corrupt objects
-cannot be skipped with this setting.
-+
-Like `fsck.<msg-id>` this variable has corresponding
-`receive.fsck.skipList` and `fetch.fsck.skipList` variants.
-+
-Unlike variables like `color.ui` and `core.editor` the
-`receive.fsck.skipList` and `fetch.fsck.skipList` variables will not
-fall back on the `fsck.skipList` configuration if they aren't set. To
-uniformly configure the same fsck settings in different circumstances
-all three of them they must all set to the same values.
-+
-Older versions of Git (before 2.20) documented that the object names
-list should be sorted. This was never a requirement, the object names
-could appear in any order, but when reading the list we tracked whether
-the list was sorted for the purposes of an internal binary search
-implementation, which could save itself some work with an already sorted
-list. Unless you had a humongous list there was no reason to go out of
-your way to pre-sort the list. After Git version 2.20 a hash implementation
-is used instead, so there's now no reason to pre-sort the list.
+include::config/fsck.txt[]
gc.aggressiveDepth::
The depth parameter used in the delta compression
diff --git a/Documentation/config/fsck.txt b/Documentation/config/fsck.txt
new file mode 100644
index 0000000000..879c5a29c4
--- /dev/null
+++ b/Documentation/config/fsck.txt
@@ -0,0 +1,67 @@
+fsck.<msg-id>::
+ During fsck git may find issues with legacy data which
+ wouldn't be generated by current versions of git, and which
+ wouldn't be sent over the wire if `transfer.fsckObjects` was
+ set. This feature is intended to support working with legacy
+ repositories containing such data.
++
+Setting `fsck.<msg-id>` will be picked up by linkgit:git-fsck[1], but
+to accept pushes of such data set `receive.fsck.<msg-id>` instead, or
+to clone or fetch it set `fetch.fsck.<msg-id>`.
++
+The rest of the documentation discusses `fsck.*` for brevity, but the
+same applies for the corresponding `receive.fsck.*` and
+`fetch.<msg-id>.*`. variables.
++
+Unlike variables like `color.ui` and `core.editor` the
+`receive.fsck.<msg-id>` and `fetch.fsck.<msg-id>` variables will not
+fall back on the `fsck.<msg-id>` configuration if they aren't set. To
+uniformly configure the same fsck settings in different circumstances
+all three of them they must all set to the same values.
++
+When `fsck.<msg-id>` is set, errors can be switched to warnings and
+vice versa by configuring the `fsck.<msg-id>` setting where the
+`<msg-id>` is the fsck message ID and the value is one of `error`,
+`warn` or `ignore`. For convenience, fsck prefixes the error/warning
+with the message ID, e.g. "missingEmail: invalid author/committer line
+- missing email" means that setting `fsck.missingEmail = ignore` will
+hide that issue.
++
+In general, it is better to enumerate existing objects with problems
+with `fsck.skipList`, instead of listing the kind of breakages these
+problematic objects share to be ignored, as doing the latter will
+allow new instances of the same breakages go unnoticed.
++
+Setting an unknown `fsck.<msg-id>` value will cause fsck to die, but
+doing the same for `receive.fsck.<msg-id>` and `fetch.fsck.<msg-id>`
+will only cause git to warn.
+
+fsck.skipList::
+ The path to a list of object names (i.e. one unabbreviated SHA-1 per
+ line) that are known to be broken in a non-fatal way and should
+ be ignored. On versions of Git 2.20 and later comments ('#'), empty
+ lines, and any leading and trailing whitespace is ignored. Everything
+ but a SHA-1 per line will error out on older versions.
++
+This feature is useful when an established project should be accepted
+despite early commits containing errors that can be safely ignored
+such as invalid committer email addresses. Note: corrupt objects
+cannot be skipped with this setting.
++
+Like `fsck.<msg-id>` this variable has corresponding
+`receive.fsck.skipList` and `fetch.fsck.skipList` variants.
++
+Unlike variables like `color.ui` and `core.editor` the
+`receive.fsck.skipList` and `fetch.fsck.skipList` variables will not
+fall back on the `fsck.skipList` configuration if they aren't set. To
+uniformly configure the same fsck settings in different circumstances
+all three of them they must all set to the same values.
++
+Older versions of Git (before 2.20) documented that the object names
+list should be sorted. This was never a requirement, the object names
+could appear in any order, but when reading the list we tracked whether
+the list was sorted for the purposes of an internal binary search
+implementation, which could save itself some work with an already sorted
+list. Unless you had a humongous list there was no reason to go out of
+your way to pre-sort the list. After Git version 2.20 a hash implementation
+is used instead, so there's now no reason to pre-sort the list.
--
2.19.1.647.g708186aaf9
^ permalink raw reply related [relevance 14%]
* [PATCH 20/59] config.txt: move fsck.* to a separate file
@ 2018-10-20 12:38 14% ` Nguyễn Thái Ngọc Duy
0 siblings, 0 replies; 71+ results
From: Nguyễn Thái Ngọc Duy @ 2018-10-20 12:38 UTC (permalink / raw)
To: git; +Cc: Junio C Hamano, Nguyễn Thái Ngọc Duy
Signed-off-by: Nguyễn Thái Ngọc Duy <pclouds@gmail.com>
---
Documentation/config.txt | 68 +----------------------------------
Documentation/fsck-config.txt | 67 ++++++++++++++++++++++++++++++++++
2 files changed, 68 insertions(+), 67 deletions(-)
create mode 100644 Documentation/fsck-config.txt
diff --git a/Documentation/config.txt b/Documentation/config.txt
index 7c7dde188c..fa26cb1090 100644
--- a/Documentation/config.txt
+++ b/Documentation/config.txt
@@ -331,73 +331,7 @@ include::format-config.txt[]
include::filter-config.txt[]
-fsck.<msg-id>::
- During fsck git may find issues with legacy data which
- wouldn't be generated by current versions of git, and which
- wouldn't be sent over the wire if `transfer.fsckObjects` was
- set. This feature is intended to support working with legacy
- repositories containing such data.
-+
-Setting `fsck.<msg-id>` will be picked up by linkgit:git-fsck[1], but
-to accept pushes of such data set `receive.fsck.<msg-id>` instead, or
-to clone or fetch it set `fetch.fsck.<msg-id>`.
-+
-The rest of the documentation discusses `fsck.*` for brevity, but the
-same applies for the corresponding `receive.fsck.*` and
-`fetch.<msg-id>.*`. variables.
-+
-Unlike variables like `color.ui` and `core.editor` the
-`receive.fsck.<msg-id>` and `fetch.fsck.<msg-id>` variables will not
-fall back on the `fsck.<msg-id>` configuration if they aren't set. To
-uniformly configure the same fsck settings in different circumstances
-all three of them they must all set to the same values.
-+
-When `fsck.<msg-id>` is set, errors can be switched to warnings and
-vice versa by configuring the `fsck.<msg-id>` setting where the
-`<msg-id>` is the fsck message ID and the value is one of `error`,
-`warn` or `ignore`. For convenience, fsck prefixes the error/warning
-with the message ID, e.g. "missingEmail: invalid author/committer line
-- missing email" means that setting `fsck.missingEmail = ignore` will
-hide that issue.
-+
-In general, it is better to enumerate existing objects with problems
-with `fsck.skipList`, instead of listing the kind of breakages these
-problematic objects share to be ignored, as doing the latter will
-allow new instances of the same breakages go unnoticed.
-+
-Setting an unknown `fsck.<msg-id>` value will cause fsck to die, but
-doing the same for `receive.fsck.<msg-id>` and `fetch.fsck.<msg-id>`
-will only cause git to warn.
-
-fsck.skipList::
- The path to a list of object names (i.e. one unabbreviated SHA-1 per
- line) that are known to be broken in a non-fatal way and should
- be ignored. On versions of Git 2.20 and later comments ('#'), empty
- lines, and any leading and trailing whitespace is ignored. Everything
- but a SHA-1 per line will error out on older versions.
-+
-This feature is useful when an established project should be accepted
-despite early commits containing errors that can be safely ignored
-such as invalid committer email addresses. Note: corrupt objects
-cannot be skipped with this setting.
-+
-Like `fsck.<msg-id>` this variable has corresponding
-`receive.fsck.skipList` and `fetch.fsck.skipList` variants.
-+
-Unlike variables like `color.ui` and `core.editor` the
-`receive.fsck.skipList` and `fetch.fsck.skipList` variables will not
-fall back on the `fsck.skipList` configuration if they aren't set. To
-uniformly configure the same fsck settings in different circumstances
-all three of them they must all set to the same values.
-+
-Older versions of Git (before 2.20) documented that the object names
-list should be sorted. This was never a requirement, the object names
-could appear in any order, but when reading the list we tracked whether
-the list was sorted for the purposes of an internal binary search
-implementation, which could save itself some work with an already sorted
-list. Unless you had a humongous list there was no reason to go out of
-your way to pre-sort the list. After Git version 2.20 a hash implementation
-is used instead, so there's now no reason to pre-sort the list.
+include::fsck-config.txt[]
gc.aggressiveDepth::
The depth parameter used in the delta compression
diff --git a/Documentation/fsck-config.txt b/Documentation/fsck-config.txt
new file mode 100644
index 0000000000..879c5a29c4
--- /dev/null
+++ b/Documentation/fsck-config.txt
@@ -0,0 +1,67 @@
+fsck.<msg-id>::
+ During fsck git may find issues with legacy data which
+ wouldn't be generated by current versions of git, and which
+ wouldn't be sent over the wire if `transfer.fsckObjects` was
+ set. This feature is intended to support working with legacy
+ repositories containing such data.
++
+Setting `fsck.<msg-id>` will be picked up by linkgit:git-fsck[1], but
+to accept pushes of such data set `receive.fsck.<msg-id>` instead, or
+to clone or fetch it set `fetch.fsck.<msg-id>`.
++
+The rest of the documentation discusses `fsck.*` for brevity, but the
+same applies for the corresponding `receive.fsck.*` and
+`fetch.<msg-id>.*`. variables.
++
+Unlike variables like `color.ui` and `core.editor` the
+`receive.fsck.<msg-id>` and `fetch.fsck.<msg-id>` variables will not
+fall back on the `fsck.<msg-id>` configuration if they aren't set. To
+uniformly configure the same fsck settings in different circumstances
+all three of them they must all set to the same values.
++
+When `fsck.<msg-id>` is set, errors can be switched to warnings and
+vice versa by configuring the `fsck.<msg-id>` setting where the
+`<msg-id>` is the fsck message ID and the value is one of `error`,
+`warn` or `ignore`. For convenience, fsck prefixes the error/warning
+with the message ID, e.g. "missingEmail: invalid author/committer line
+- missing email" means that setting `fsck.missingEmail = ignore` will
+hide that issue.
++
+In general, it is better to enumerate existing objects with problems
+with `fsck.skipList`, instead of listing the kind of breakages these
+problematic objects share to be ignored, as doing the latter will
+allow new instances of the same breakages go unnoticed.
++
+Setting an unknown `fsck.<msg-id>` value will cause fsck to die, but
+doing the same for `receive.fsck.<msg-id>` and `fetch.fsck.<msg-id>`
+will only cause git to warn.
+
+fsck.skipList::
+ The path to a list of object names (i.e. one unabbreviated SHA-1 per
+ line) that are known to be broken in a non-fatal way and should
+ be ignored. On versions of Git 2.20 and later comments ('#'), empty
+ lines, and any leading and trailing whitespace is ignored. Everything
+ but a SHA-1 per line will error out on older versions.
++
+This feature is useful when an established project should be accepted
+despite early commits containing errors that can be safely ignored
+such as invalid committer email addresses. Note: corrupt objects
+cannot be skipped with this setting.
++
+Like `fsck.<msg-id>` this variable has corresponding
+`receive.fsck.skipList` and `fetch.fsck.skipList` variants.
++
+Unlike variables like `color.ui` and `core.editor` the
+`receive.fsck.skipList` and `fetch.fsck.skipList` variables will not
+fall back on the `fsck.skipList` configuration if they aren't set. To
+uniformly configure the same fsck settings in different circumstances
+all three of them they must all set to the same values.
++
+Older versions of Git (before 2.20) documented that the object names
+list should be sorted. This was never a requirement, the object names
+could appear in any order, but when reading the list we tracked whether
+the list was sorted for the purposes of an internal binary search
+implementation, which could save itself some work with an already sorted
+list. Unless you had a humongous list there was no reason to go out of
+your way to pre-sort the list. After Git version 2.20 a hash implementation
+is used instead, so there's now no reason to pre-sort the list.
--
2.19.1.647.g708186aaf9
^ permalink raw reply related [relevance 14%]
* [PATCH 0/3] Use commit-graph by default
@ 2018-10-17 20:33 3% Derrick Stolee via GitGitGadget
0 siblings, 0 replies; 71+ results
From: Derrick Stolee via GitGitGadget @ 2018-10-17 20:33 UTC (permalink / raw)
To: git; +Cc: Junio C Hamano
The commit-graph feature is starting to stabilize. Based on what is in
master right now, we have:
Git 2.18:
* Ability to write commit-graph (requires user interaction).
* Commit parsing is faster when commit-graph exists.
* Must have core.commitGraph true to use.
Git 2.19:
* Ability to write commit-graph on GC with gc.writeCommitGraph.
* Generation numbers written in commit-graph
* A few reachability algorithms make use of generation numbers.
(queued for) master:
* The test suite passes with GIT_TEST_COMMIT_GRAPH=1
* 'git commit-graph write' has progress indicators.
* The commit-graph is automatically disabled when grafts or replace-objects
exist.
There are some other things coming that are in review (like 'git log
--graph' speedups), but it is probably time to consider enabling the
commit-graph by default. This series does that.
For timing, I'm happy to leave this queued for a merge after the Git 2.20
release. There are enough things in master to justify not enabling this by
default until that goes out and more people use it.
PATCH 3/3 is rather simple, and is the obvious thing to do to achieve
enabling these config values by default.
PATCH 1/3 is a required change to make the test suite work with this change.
This change isn't needed with GIT_TEST_COMMIT_GRAPH=1 because the
commit-graph is up-to-date for these 'git gc' calls, so no progress is
output.
PATCH 2/3 is also a necessary evil, since we already had to disable
GIT_TEST_COMMIT_GRAPH for some tests, we now also need to turn off
core.commitGraph.
Thanks, -Stolee
Derrick Stolee (3):
t6501: use --quiet when testing gc stderr
t: explicitly turn off core.commitGraph as needed
commit-graph: Use commit-graph by default
Documentation/config.txt | 4 ++--
builtin/gc.c | 2 +-
commit-graph.c | 6 +++---
t/t0410-partial-clone.sh | 3 ++-
t/t5307-pack-missing-commit.sh | 3 ++-
t/t6011-rev-list-with-bad-commit.sh | 3 ++-
t/t6024-recursive-merge.sh | 3 ++-
t/t6501-freshen-objects.sh | 6 +++---
8 files changed, 17 insertions(+), 13 deletions(-)
base-commit: a4b8ab5363a32f283a61ef3a962853556d136c0e
Published-As: https://github.com/gitgitgadget/git/releases/tags/pr-50%2Fderrickstolee%2Fcommit-graph-default-v1
Fetch-It-Via: git fetch https://github.com/gitgitgadget/git pr-50/derrickstolee/commit-graph-default-v1
Pull-Request: https://github.com/gitgitgadget/git/pull/50
--
gitgitgadget
^ permalink raw reply [relevance 3%]
* [PATCH v5 10/10] fsck: support comments & empty lines in skipList
2018-08-28 14:59 0% ` René Scharfe
@ 2018-09-03 14:49 4% ` Ævar Arnfjörð Bjarmason
0 siblings, 0 replies; 71+ results
From: Ævar Arnfjörð Bjarmason @ 2018-09-03 14:49 UTC (permalink / raw)
To: git
Cc: Junio C Hamano, René Scharfe, Ramsay Jones,
Johannes Schindelin, Jeff King,
Ævar Arnfjörð Bjarmason
It's annoying not to be able to put comments and empty lines in the
skipList, when e.g. keeping a big central list of commits to skip in
/etc/gitconfig, which was my motivation for 1362df0d41 ("fetch:
implement fetch.fsck.*", 2018-07-27).
Implement that, and document what version of Git this was changed in,
since this on-disk format can be expected to be used by multiple
versions of git.
There is no notable performance impact from this change, using the
test setup described a couple of commits back:
Test HEAD~ HEAD
----------------------------------------------------------------------------------------
1450.3: fsck with 0 skipped bad commits 7.69(7.27+0.42) 7.86(7.48+0.37) +2.2%
1450.5: fsck with 1 skipped bad commits 7.69(7.30+0.38) 7.83(7.47+0.36) +1.8%
1450.7: fsck with 10 skipped bad commits 7.76(7.38+0.38) 7.79(7.38+0.41) +0.4%
1450.9: fsck with 100 skipped bad commits 7.76(7.38+0.38) 7.74(7.36+0.38) -0.3%
1450.11: fsck with 1000 skipped bad commits 7.71(7.30+0.41) 7.72(7.34+0.38) +0.1%
1450.13: fsck with 10000 skipped bad commits 7.74(7.34+0.40) 7.72(7.34+0.38) -0.3%
1450.15: fsck with 100000 skipped bad commits 7.75(7.40+0.35) 7.70(7.29+0.40) -0.6%
1450.17: fsck with 1000000 skipped bad commits 7.12(6.86+0.26) 7.13(6.87+0.26) +0.1%
Signed-off-by: Ævar Arnfjörð Bjarmason <avarab@gmail.com>
---
Documentation/config.txt | 5 +++--
fsck.c | 14 ++++++++++++++
t/t5504-fetch-receive-strict.sh | 19 ++++++++++++++++---
3 files changed, 33 insertions(+), 5 deletions(-)
diff --git a/Documentation/config.txt b/Documentation/config.txt
index 161ffe259e..0906db3a99 100644
--- a/Documentation/config.txt
+++ b/Documentation/config.txt
@@ -1712,8 +1712,9 @@ will only cause git to warn.
fsck.skipList::
The path to a list of object names (i.e. one unabbreviated SHA-1 per
line) that are known to be broken in a non-fatal way and should
- be ignored. Comments ('#') and empty lines are not supported, and
- will error out.
+ be ignored. On versions of Git 2.20 and later comments ('#'), empty
+ lines, and any leading and trailing whitespace is ignored. Everything
+ but a SHA-1 per line will error out on older versions.
+
This feature is useful when an established project should be accepted
despite early commits containing errors that can be safely ignored
diff --git a/fsck.c b/fsck.c
index 4c643f1d40..859b050b05 100644
--- a/fsck.c
+++ b/fsck.c
@@ -190,6 +190,20 @@ static void init_skiplist(struct fsck_options *options, const char *path)
die("Could not open skip list: %s", path);
while (!strbuf_getline(&sb, fp)) {
const char *p;
+ const char *hash;
+
+ /*
+ * Allow trailing comments, leading whitespace
+ * (including before commits), and empty or whitespace
+ * only lines.
+ */
+ hash = strchr(sb.buf, '#');
+ if (hash)
+ strbuf_setlen(&sb, hash - sb.buf);
+ strbuf_trim(&sb);
+ if (!sb.len)
+ continue;
+
if (parse_oid_hex(sb.buf, &oid, &p) || *p != '\0')
die("Invalid SHA-1: %s", sb.buf);
oidset_insert(&options->skiplist, &oid);
diff --git a/t/t5504-fetch-receive-strict.sh b/t/t5504-fetch-receive-strict.sh
index d67ab37321..7bc706873c 100755
--- a/t/t5504-fetch-receive-strict.sh
+++ b/t/t5504-fetch-receive-strict.sh
@@ -169,20 +169,20 @@ test_expect_success 'fsck with invalid or bogus skipList input' '
test_i18ngrep "Invalid SHA-1: \[core\]" err
'
-test_expect_success 'fsck with invalid or bogus skipList input (comments & empty lines)' '
+test_expect_success 'fsck with other accepted skipList input (comments & empty lines)' '
cat >SKIP.with-comment <<-EOF &&
# Some bad commit
0000000000000000000000000000000000000001
EOF
test_must_fail git -c fsck.skipList=SKIP.with-comment fsck 2>err-with-comment &&
- test_i18ngrep "^fatal: Invalid SHA-1: # Some bad commit$" err-with-comment &&
+ test_i18ngrep "missingEmail" err-with-comment &&
cat >SKIP.with-empty-line <<-EOF &&
0000000000000000000000000000000000000001
0000000000000000000000000000000000000002
EOF
test_must_fail git -c fsck.skipList=SKIP.with-empty-line fsck 2>err-with-empty-line &&
- test_i18ngrep "^fatal: Invalid SHA-1: " err-with-empty-line
+ test_i18ngrep "missingEmail" err-with-empty-line
'
test_expect_success 'fsck no garbage output from comments & empty lines errors' '
@@ -196,6 +196,19 @@ test_expect_success 'fsck with invalid abbreviated skipList input' '
test_i18ngrep "^fatal: Invalid SHA-1: " err-abbreviated
'
+test_expect_success 'fsck with exhaustive accepted skipList input (various types of comments etc.)' '
+ >SKIP.exhaustive &&
+ echo "# A commented line" >>SKIP.exhaustive &&
+ echo "" >>SKIP.exhaustive &&
+ echo " " >>SKIP.exhaustive &&
+ echo " # Comment after whitespace" >>SKIP.exhaustive &&
+ echo "$commit # Our bad commit (with leading whitespace and trailing comment)" >>SKIP.exhaustive &&
+ echo "# Some bad commit (leading whitespace)" >>SKIP.exhaustive &&
+ echo " 0000000000000000000000000000000000000001" >>SKIP.exhaustive &&
+ git -c fsck.skipList=SKIP.exhaustive fsck 2>err &&
+ test_must_be_empty err
+'
+
test_expect_success 'push with receive.fsck.skipList' '
git push . $commit:refs/heads/bogus &&
rm -rf dst &&
--
2.19.0.rc1.350.ge57e33dbd1
^ permalink raw reply related [relevance 4%]
* Re: [PATCH v4 8/8] fsck: support comments & empty lines in skipList
2018-08-28 9:52 4% ` [PATCH v4 8/8] fsck: support comments & empty lines in skipList Ævar Arnfjörð Bjarmason
@ 2018-08-28 14:59 0% ` René Scharfe
2018-09-03 14:49 4% ` [PATCH v5 10/10] " Ævar Arnfjörð Bjarmason
0 siblings, 1 reply; 71+ results
From: René Scharfe @ 2018-08-28 14:59 UTC (permalink / raw)
To: Ævar Arnfjörð Bjarmason, git
Cc: Junio C Hamano, Ramsay Jones, Johannes Schindelin, Jeff King
Am 28.08.2018 um 11:52 schrieb Ævar Arnfjörð Bjarmason:
> It's annoying not to be able to put comments and empty lines in the
> skipList, when e.g. keeping a big central list of commits to skip in
> /etc/gitconfig, which was my motivation for 1362df0d41 ("fetch:
> implement fetch.fsck.*", 2018-07-27).
>
> Implement that, and document what version of Git this was changed in,
> since this on-disk format can be expected to be used by multiple
> versions of git.
>
> There is no notable performance impact from this change, using the
> test setup described a couple of commist back:
>
> Test HEAD~ HEAD
> ----------------------------------------------------------------------------------------
> 1450.3: fsck with 0 skipped bad commits 7.81(7.42+0.39) 7.72(7.34+0.38) -1.2%
> 1450.5: fsck with 1 skipped bad commits 7.75(7.36+0.38) 7.66(7.26+0.39) -1.2%
> 1450.7: fsck with 10 skipped bad commits 7.81(7.43+0.38) 7.70(7.30+0.39) -1.4%
> 1450.9: fsck with 100 skipped bad commits 7.85(7.42+0.42) 7.73(7.31+0.41) -1.5%
> 1450.11: fsck with 1000 skipped bad commits 7.81(7.43+0.38) 7.84(7.46+0.38) +0.4%
> 1450.13: fsck with 10000 skipped bad commits 7.87(7.47+0.40) 7.86(7.46+0.40) -0.1%
> 1450.15: fsck with 100000 skipped bad commits 7.77(7.39+0.38) 7.83(7.48+0.34) +0.8%
> 1450.17: fsck with 1000000 skipped bad commits 7.17(6.92+0.24) 7.11(6.85+0.26) -0.8%
>
> Signed-off-by: Ævar Arnfjörð Bjarmason <avarab@gmail.com>
> ---
> Documentation/config.txt | 4 ++--
> fsck.c | 2 ++
> t/t5504-fetch-receive-strict.sh | 6 +++---
> 3 files changed, 7 insertions(+), 5 deletions(-)
>
> diff --git a/Documentation/config.txt b/Documentation/config.txt
> index ebaa044689..824634c412 100644
> --- a/Documentation/config.txt
> +++ b/Documentation/config.txt
> @@ -1712,8 +1712,8 @@ will only cause git to warn.
> fsck.skipList::
> The path to a list of object names (i.e. one SHA-1 per
> line) that are known to be broken in a non-fatal way and should
> - be ignored. Comments ('#') and empty lines are not supported, and
> - will error out.
> + be ignored. On versions of Git 2.20 and later comments ('#') and empty
> + lines are ignored, but will error out on older versions.
> +
> This feature is useful when an established project should be accepted
> despite early commits containing errors that can be safely ignored
> diff --git a/fsck.c b/fsck.c
> index 4c643f1d40..589548308a 100644
> --- a/fsck.c
> +++ b/fsck.c
> @@ -190,6 +190,8 @@ static void init_skiplist(struct fsck_options *options, const char *path)
> die("Could not open skip list: %s", path);
> while (!strbuf_getline(&sb, fp)) {
> const char *p;
> + if (!strcmp(sb.buf, "") || starts_with(sb.buf, "#"))
> + continue;
Checking sb.len == 0 is simpler and might be slightly quicker.
But what is an empty line? Shouldn't whitespace-only lines qualify?
And why not allow trailing comments, while we're at it? I.e. what
about something like this instead?
const char *hash = strchr(sb.buf, '#);
if (hash)
strbuf_setlen(&sb, hash - sb.buf);
strbuf_rtrim(&sb);
if (!sb.len)
continue;
Too much?
> if (parse_oid_hex(sb.buf, &oid, &p) || *p != '\0')
> die("Invalid SHA-1: %s", sb.buf);
> oidset_insert(&options->skiplist, &oid);
> diff --git a/t/t5504-fetch-receive-strict.sh b/t/t5504-fetch-receive-strict.sh
> index c7224db3bb..a1bac164d1 100755
> --- a/t/t5504-fetch-receive-strict.sh
> +++ b/t/t5504-fetch-receive-strict.sh
> @@ -169,20 +169,20 @@ test_expect_success 'fsck with invalid or bogus skipList input' '
> test_i18ngrep "Invalid SHA-1: \[core\]" err
> '
>
> -test_expect_success 'fsck with invalid or bogus skipList input (comments & empty lines)' '
> +test_expect_success 'fsck with other accepted skipList input (comments & empty lines)' '
> cat >SKIP.with-comment <<-EOF &&
> # Some bad commit
> 0000000000000000000000000000000000000001
> EOF
> test_must_fail git -c fsck.skipList=SKIP.with-comment fsck 2>err-with-comment &&
> - test_i18ngrep "^fatal: Invalid SHA-1: # Some bad commit$" err-with-comment &&
> + test_i18ngrep "missingEmail" err-with-comment &&
> cat >SKIP.with-empty-line <<-EOF &&
> 0000000000000000000000000000000000000001
>
> 0000000000000000000000000000000000000002
> EOF
> test_must_fail git -c fsck.skipList=SKIP.with-empty-line fsck 2>err-with-empty-line &&
> - test_i18ngrep "^fatal: Invalid SHA-1: " err-with-empty-line
> + test_i18ngrep "missingEmail" err-with-empty-line
> '
>
> test_expect_success 'fsck no garbage output from comments & empty lines errors' '
>
^ permalink raw reply [relevance 0%]
* [PATCH v4 8/8] fsck: support comments & empty lines in skipList
@ 2018-08-28 9:52 4% ` Ævar Arnfjörð Bjarmason
2018-08-28 14:59 0% ` René Scharfe
0 siblings, 1 reply; 71+ results
From: Ævar Arnfjörð Bjarmason @ 2018-08-28 9:52 UTC (permalink / raw)
To: git
Cc: Junio C Hamano, René Scharfe, Ramsay Jones,
Johannes Schindelin, Jeff King,
Ævar Arnfjörð Bjarmason
It's annoying not to be able to put comments and empty lines in the
skipList, when e.g. keeping a big central list of commits to skip in
/etc/gitconfig, which was my motivation for 1362df0d41 ("fetch:
implement fetch.fsck.*", 2018-07-27).
Implement that, and document what version of Git this was changed in,
since this on-disk format can be expected to be used by multiple
versions of git.
There is no notable performance impact from this change, using the
test setup described a couple of commist back:
Test HEAD~ HEAD
----------------------------------------------------------------------------------------
1450.3: fsck with 0 skipped bad commits 7.81(7.42+0.39) 7.72(7.34+0.38) -1.2%
1450.5: fsck with 1 skipped bad commits 7.75(7.36+0.38) 7.66(7.26+0.39) -1.2%
1450.7: fsck with 10 skipped bad commits 7.81(7.43+0.38) 7.70(7.30+0.39) -1.4%
1450.9: fsck with 100 skipped bad commits 7.85(7.42+0.42) 7.73(7.31+0.41) -1.5%
1450.11: fsck with 1000 skipped bad commits 7.81(7.43+0.38) 7.84(7.46+0.38) +0.4%
1450.13: fsck with 10000 skipped bad commits 7.87(7.47+0.40) 7.86(7.46+0.40) -0.1%
1450.15: fsck with 100000 skipped bad commits 7.77(7.39+0.38) 7.83(7.48+0.34) +0.8%
1450.17: fsck with 1000000 skipped bad commits 7.17(6.92+0.24) 7.11(6.85+0.26) -0.8%
Signed-off-by: Ævar Arnfjörð Bjarmason <avarab@gmail.com>
---
Documentation/config.txt | 4 ++--
fsck.c | 2 ++
t/t5504-fetch-receive-strict.sh | 6 +++---
3 files changed, 7 insertions(+), 5 deletions(-)
diff --git a/Documentation/config.txt b/Documentation/config.txt
index ebaa044689..824634c412 100644
--- a/Documentation/config.txt
+++ b/Documentation/config.txt
@@ -1712,8 +1712,8 @@ will only cause git to warn.
fsck.skipList::
The path to a list of object names (i.e. one SHA-1 per
line) that are known to be broken in a non-fatal way and should
- be ignored. Comments ('#') and empty lines are not supported, and
- will error out.
+ be ignored. On versions of Git 2.20 and later comments ('#') and empty
+ lines are ignored, but will error out on older versions.
+
This feature is useful when an established project should be accepted
despite early commits containing errors that can be safely ignored
diff --git a/fsck.c b/fsck.c
index 4c643f1d40..589548308a 100644
--- a/fsck.c
+++ b/fsck.c
@@ -190,6 +190,8 @@ static void init_skiplist(struct fsck_options *options, const char *path)
die("Could not open skip list: %s", path);
while (!strbuf_getline(&sb, fp)) {
const char *p;
+ if (!strcmp(sb.buf, "") || starts_with(sb.buf, "#"))
+ continue;
if (parse_oid_hex(sb.buf, &oid, &p) || *p != '\0')
die("Invalid SHA-1: %s", sb.buf);
oidset_insert(&options->skiplist, &oid);
diff --git a/t/t5504-fetch-receive-strict.sh b/t/t5504-fetch-receive-strict.sh
index c7224db3bb..a1bac164d1 100755
--- a/t/t5504-fetch-receive-strict.sh
+++ b/t/t5504-fetch-receive-strict.sh
@@ -169,20 +169,20 @@ test_expect_success 'fsck with invalid or bogus skipList input' '
test_i18ngrep "Invalid SHA-1: \[core\]" err
'
-test_expect_success 'fsck with invalid or bogus skipList input (comments & empty lines)' '
+test_expect_success 'fsck with other accepted skipList input (comments & empty lines)' '
cat >SKIP.with-comment <<-EOF &&
# Some bad commit
0000000000000000000000000000000000000001
EOF
test_must_fail git -c fsck.skipList=SKIP.with-comment fsck 2>err-with-comment &&
- test_i18ngrep "^fatal: Invalid SHA-1: # Some bad commit$" err-with-comment &&
+ test_i18ngrep "missingEmail" err-with-comment &&
cat >SKIP.with-empty-line <<-EOF &&
0000000000000000000000000000000000000001
0000000000000000000000000000000000000002
EOF
test_must_fail git -c fsck.skipList=SKIP.with-empty-line fsck 2>err-with-empty-line &&
- test_i18ngrep "^fatal: Invalid SHA-1: " err-with-empty-line
+ test_i18ngrep "missingEmail" err-with-empty-line
'
test_expect_success 'fsck no garbage output from comments & empty lines errors' '
--
2.19.0.rc0.228.g281dcd1b4d0
^ permalink raw reply related [relevance 4%]
* [PATCH v3 7/7] fsck: support comments & empty lines in skipList
@ 2018-08-27 19:43 5% ` Ævar Arnfjörð Bjarmason
0 siblings, 0 replies; 71+ results
From: Ævar Arnfjörð Bjarmason @ 2018-08-27 19:43 UTC (permalink / raw)
To: git
Cc: Junio C Hamano, René Scharfe, Ramsay Jones,
Johannes Schindelin, Jeff King,
Ævar Arnfjörð Bjarmason
It's annoying not to be able to put comments and empty lines in the
skipList, when e.g. keeping a big central list of commits to skip in
/etc/gitconfig, which was my motivation for 1362df0d41 ("fetch:
implement fetch.fsck.*", 2018-07-27).
Implement that, and document what version of Git this was changed in,
since this on-disk format can be expected to be used by multiple
versions of git.
Signed-off-by: Ævar Arnfjörð Bjarmason <avarab@gmail.com>
---
Documentation/config.txt | 4 ++--
fsck.c | 2 ++
t/t5504-fetch-receive-strict.sh | 6 +++---
3 files changed, 7 insertions(+), 5 deletions(-)
diff --git a/Documentation/config.txt b/Documentation/config.txt
index 3d0556e85d..e6f95a7fb2 100644
--- a/Documentation/config.txt
+++ b/Documentation/config.txt
@@ -1710,8 +1710,8 @@ will only cause git to warn.
fsck.skipList::
The path to a list of object names (i.e. one SHA-1 per
line) that are known to be broken in a non-fatal way and should
- be ignored. Comments ('#') and empty lines are not supported, and
- will error out.
+ be ignored. On versions of Git 2.20 and later comments ('#') and empty
+ lines are ignored, but will error out on older versions.
+
This feature is useful when an established project should be accepted
despite early commits containing errors that can be safely ignored
diff --git a/fsck.c b/fsck.c
index 4c643f1d40..589548308a 100644
--- a/fsck.c
+++ b/fsck.c
@@ -190,6 +190,8 @@ static void init_skiplist(struct fsck_options *options, const char *path)
die("Could not open skip list: %s", path);
while (!strbuf_getline(&sb, fp)) {
const char *p;
+ if (!strcmp(sb.buf, "") || starts_with(sb.buf, "#"))
+ continue;
if (parse_oid_hex(sb.buf, &oid, &p) || *p != '\0')
die("Invalid SHA-1: %s", sb.buf);
oidset_insert(&options->skiplist, &oid);
diff --git a/t/t5504-fetch-receive-strict.sh b/t/t5504-fetch-receive-strict.sh
index c7224db3bb..a1bac164d1 100755
--- a/t/t5504-fetch-receive-strict.sh
+++ b/t/t5504-fetch-receive-strict.sh
@@ -169,20 +169,20 @@ test_expect_success 'fsck with invalid or bogus skipList input' '
test_i18ngrep "Invalid SHA-1: \[core\]" err
'
-test_expect_success 'fsck with invalid or bogus skipList input (comments & empty lines)' '
+test_expect_success 'fsck with other accepted skipList input (comments & empty lines)' '
cat >SKIP.with-comment <<-EOF &&
# Some bad commit
0000000000000000000000000000000000000001
EOF
test_must_fail git -c fsck.skipList=SKIP.with-comment fsck 2>err-with-comment &&
- test_i18ngrep "^fatal: Invalid SHA-1: # Some bad commit$" err-with-comment &&
+ test_i18ngrep "missingEmail" err-with-comment &&
cat >SKIP.with-empty-line <<-EOF &&
0000000000000000000000000000000000000001
0000000000000000000000000000000000000002
EOF
test_must_fail git -c fsck.skipList=SKIP.with-empty-line fsck 2>err-with-empty-line &&
- test_i18ngrep "^fatal: Invalid SHA-1: " err-with-empty-line
+ test_i18ngrep "missingEmail" err-with-empty-line
'
test_expect_success 'fsck no garbage output from comments & empty lines errors' '
--
2.19.0.rc0.228.g281dcd1b4d0
^ permalink raw reply related [relevance 5%]
Results 1-71 of 71 | reverse | options above
-- pct% links below jump to the message on this page, permalinks otherwise --
2018-08-27 19:43 [PATCH v3 0/7] use oidset for skiplist + docs + tests + comment support Ævar Arnfjörð Bjarmason
2018-08-27 19:43 5% ` [PATCH v3 7/7] fsck: support comments & empty lines in skipList Ævar Arnfjörð Bjarmason
2018-08-27 20:15 [PATCH v3 6/7] fsck: use oidset for skiplist Ævar Arnfjörð Bjarmason
2018-08-28 9:52 4% ` [PATCH v4 8/8] fsck: support comments & empty lines in skipList Ævar Arnfjörð Bjarmason
2018-08-28 14:59 0% ` René Scharfe
2018-09-03 14:49 4% ` [PATCH v5 10/10] " Ævar Arnfjörð Bjarmason
2018-10-10 15:59 [PATCH v8 0/7] speed up index load through parallelization Ben Peart
2018-11-13 0:38 ` [PATCH 0/3] Avoid confusing messages from new index extensions (Re: [PATCH v8 0/7] speed up index load through parallelization) Jonathan Nieder
2018-11-13 0:39 ` [PATCH 2/3] ieot: default to not writing IEOT section Jonathan Nieder
2018-11-13 15:22 ` Ben Peart
2018-11-14 3:05 ` Junio C Hamano
2018-11-20 6:09 ` [PATCH v2 0/5] Avoid confusing messages from new index extensions Jonathan Nieder
2018-11-20 6:15 ` [PATCH 5/5] index: offer advice for unknown " Jonathan Nieder
2018-11-20 9:26 ` Ævar Arnfjörð Bjarmason
2018-11-20 13:30 ` Ben Peart
2018-11-21 0:22 ` Junio C Hamano
2018-11-21 1:03 3% ` Jonathan Nieder
2018-11-21 9:30 0% ` Ævar Arnfjörð Bjarmason
2018-10-17 20:33 3% [PATCH 0/3] Use commit-graph by default Derrick Stolee via GitGitGadget
2018-10-20 12:37 [PATCH 00/59] Split config.txt Nguyễn Thái Ngọc Duy
2018-10-20 12:38 14% ` [PATCH 20/59] config.txt: move fsck.* to a separate file Nguyễn Thái Ngọc Duy
2018-10-27 6:22 [PATCH 00/78] nd/config-split reroll Nguyễn Thái Ngọc Duy
2018-10-27 6:22 14% ` [PATCH 25/78] config.txt: move fsck.* to a separate file Nguyễn Thái Ngọc Duy
2018-11-18 14:20 2% [ANNOUNCE] Git v2.20.0-rc0 Junio C Hamano
2018-11-20 20:56 ` Git for Windows v2.20.0-rc0, was " Johannes Schindelin
2018-11-20 23:17 ` Bryan Turner
2018-11-21 14:20 ` Jeff King
2018-11-21 19:28 5% ` Bryan Turner
2018-11-22 16:38 0% ` Jeff King
2018-11-21 15:20 3% [ANNOUNCE] Git v2.20.0-rc1 Junio C Hamano
2018-11-25 20:52 4% t5570 shaky for anyone ? Torsten Bögershausen
2018-11-25 22:01 0% ` Thomas Gummerer
2018-11-26 16:42 0% ` Jeff King
2018-12-20 16:41 0% ` [PATCH] t5570: drop racy test Thomas Gummerer
2018-11-25 22:22 0% ` t5570 shaky for anyone ? SZEDER Gábor
2018-12-01 14:58 3% [ANNOUNCE] Git v2.20.0-rc2 Junio C Hamano
2018-12-03 20:45 0% ` Johannes Schindelin
2018-12-04 22:42 [PATCH on sb/more-repo-in-api] revision: use commit graph in get_reference() Jonathan Tan
2019-01-25 15:33 4% ` Regression in: " SZEDER Gábor
2018-12-09 4:04 3% [GIT PULL] l10n updates for 2.20.0 round 3 Jiang Xin
2018-12-09 4:09 0% ` Junio C Hamano
2018-12-09 8:42 1% What's cooking in git.git (Dec 2018, #01; Sun, 9) Junio C Hamano
2018-12-10 20:05 0% ` Elijah Newren
2018-12-10 21:50 0% ` Ævar Arnfjörð Bjarmason
2018-12-11 1:48 0% ` Junio C Hamano
2018-12-09 8:43 3% [ANNOUNCE] Git v2.20.0 Junio C Hamano
2018-12-11 17:30 6% [BUG] Git 2.20: `git help -a' hangs if specific git alias occurs Sebastian Gniazdowski
2018-12-11 17:46 6% ` Duy Nguyen
2018-12-11 17:46 6% ` SZEDER Gábor
2018-12-12 8:23 4% Issues with gitattributes pattern matching Sebastian Schuberth
2018-12-17 13:08 Can git tell me which uncommitted files clash with the incoming changes? Mark Kharitonov
2018-12-17 16:24 ` Duy Nguyen
2018-12-17 17:17 ` Elijah Newren
2018-12-17 19:37 ` Duy Nguyen
2018-12-17 22:50 4% ` Mark Kharitonov
2018-12-18 13:14 0% ` Jeff King
2018-12-18 15:51 0% ` Elijah Newren
2018-12-28 18:04 What's cooking in git.git (Dec 2018, #02; Fri, 28) Junio C Hamano
2018-12-28 19:21 4% ` ag/sequencer-reduce-rewriting-todo, was " Alban Gruin
2018-12-28 20:28 0% ` Junio C Hamano
2019-01-01 23:17 5% Regression `git checkout $rev -b branch` while in a `--no-checkout` clone does not check out files Anthony Sottile
2019-01-22 7:50 Contributor Summit Topics and Logistics Jeff King
2019-01-22 18:23 ` Derrick Stolee
2019-01-24 8:57 ` Ævar Arnfjörð Bjarmason
2019-01-29 18:22 3% ` Derrick Stolee
2019-02-13 13:31 [PATCH v2] rebase -x: sanity check command Ævar Arnfjörð Bjarmason
2019-02-13 14:22 1% ` [PATCH] rebase: remove the rebase.useBuiltin setting Ævar Arnfjörð Bjarmason
2019-02-13 16:25 0% ` Johannes Schindelin
2019-02-13 20:46 0% ` Junio C Hamano
2019-03-14 13:24 1% ` [PATCH v2] " Ævar Arnfjörð Bjarmason
2019-03-14 14:58 0% ` Johannes Schindelin
2019-03-14 15:27 0% ` Ævar Arnfjörð Bjarmason
2019-03-15 13:45 1% ` [PATCH v3] " Ævar Arnfjörð Bjarmason
2019-03-15 15:44 0% ` Johannes Schindelin
2019-03-15 16:11 0% ` Ævar Arnfjörð Bjarmason
2019-03-18 10:19 0% ` Phillip Wood
2019-03-18 11:01 2% ` [PATCH v4] " Ævar Arnfjörð Bjarmason
2019-03-19 10:21 0% ` Phillip Wood
2019-02-16 2:45 4% 2.21: Change in ref advertisement handling? Bryan Turner
2019-02-16 6:45 0% ` Jeff King
2019-02-19 4:17 5% git rebase --continue after solving conflicts doesn't work anymore Sebastián Mancilla
2019-02-19 6:45 0% ` Christian Couder
2019-02-19 7:22 0% ` Eric Sunshine
2019-02-19 9:59 0% ` Phillip Wood
2019-02-19 14:03 3% ` Sebastián Mancilla
2019-02-19 14:32 0% ` Phillip Wood
2019-03-25 6:40 4% How to disable docs when building Git from sources Jeffrey Walton
2019-03-25 7:14 0% ` Johannes Sixt
2019-03-25 14:37 0% ` Jeffrey Walton
2019-05-28 22:34 4% git-clone --config remote.origin.fetch regression Han-Wen Nienhuys
2019-05-29 13:20 0% ` SZEDER Gábor
2019-06-19 13:25 5% Updating local tags: bugs and general feasibility Karen Arutyunov
[not found] <1249625346.805132902.1586274429644.JavaMail.root@zimbra39-e7>
2020-04-07 16:01 ` [BUG] bulk move silently dropped, leaving the "delete" part in work dir, on commit reorder (rebase -i) ydirson
2020-04-07 20:10 4% ` Elijah Newren
2022-12-31 0:17 is this data corruption? Samuel Wales
2022-12-31 0:25 ` rsbecker
2022-12-31 0:57 3% ` Samuel Wales
2023-01-01 1:15 0% ` Samuel Wales
2022-12-31 0:33 4% ` Samuel Wales
2023-10-08 6:45 [PATCH 00/25] Documentation fixes Elijah Newren via GitGitGadget
2023-10-08 6:45 3% ` [PATCH 07/25] documentation: fix subject/verb agreement Elijah Newren via GitGitGadget
2023-10-08 6:45 4% ` [PATCH 22/25] documentation: add some commas where they are helpful Elijah Newren via GitGitGadget
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).