* Re: [PATCH] rebase -i: introduce the 'test' command
From: Duy Nguyen @ 2018-12-03 17:53 UTC (permalink / raw)
To: Jeff King, Johannes Schindelin; +Cc: Paul Morelle, Git Users
In-Reply-To: <20181201200209.GC29120@sigill.intra.peff.net>
On Sat, Dec 01, 2018 at 03:02:09PM -0500, Jeff King wrote:
> I sometimes add "x false" to the top of the todo list to stop and create
> new commits before the first one.
And here I've been doing the same by "edit" the first commit, add a
new commit then reorder them in the second interactive rebase :P
This made me look at git-rebase.txt to really learn about interactive
rebase. I think the interactive rebase section could use some
improvements. Its style looks.. umm.. more story telling than a
reference. Perhaps something like this to at least highlight the
commands.
-- 8< --
diff --git a/Documentation/git-rebase.txt b/Documentation/git-rebase.txt
index 80793bad8d..c569b3370b 100644
--- a/Documentation/git-rebase.txt
+++ b/Documentation/git-rebase.txt
@@ -637,22 +637,22 @@ The oneline descriptions are purely for your pleasure; 'git rebase' will
not look at them but at the commit names ("deadbee" and "fa1afe1" in this
example), so do not delete or edit the names.
-By replacing the command "pick" with the command "edit", you can tell
+By replacing the command `pick` with the command `edit`, you can tell
'git rebase' to stop after applying that commit, so that you can edit
the files and/or the commit message, amend the commit, and continue
rebasing.
To interrupt the rebase (just like an "edit" command would do, but without
-cherry-picking any commit first), use the "break" command.
+cherry-picking any commit first), use the `break` command.
If you just want to edit the commit message for a commit, replace the
-command "pick" with the command "reword".
+command "pick" with the command `reword`.
-To drop a commit, replace the command "pick" with "drop", or just
+To drop a commit, replace the command "pick" with `drop`, or just
delete the matching line.
If you want to fold two or more commits into one, replace the command
-"pick" for the second and subsequent commits with "squash" or "fixup".
+"pick" for the second and subsequent commits with `squash` or `fixup`.
If the commits had different authors, the folded commit will be
attributed to the author of the first commit. The suggested commit
message for the folded commit is the concatenation of the commit
@@ -693,7 +693,7 @@ $ git rebase -i -p --onto Q O
Reordering and editing commits usually creates untested intermediate
steps. You may want to check that your history editing did not break
anything by running a test, or at least recompiling at intermediate
-points in history by using the "exec" command (shortcut "x"). You may
+points in history by using the `exec` command (shortcut `x`). You may
do so by creating a todo list like this one:
-------------------------------------------
-- 8< --
--
Duy
^ permalink raw reply related
* Re: [PATCH] rebase -i: introduce the 'test' command
From: Johannes Schindelin @ 2018-12-03 19:01 UTC (permalink / raw)
To: Luc Van Oostenryck; +Cc: Jeff King, Paul Morelle, Git Users
In-Reply-To: <20181203172743.kq5zfbfnvjadeikj@ltop.local>
Hi Luc,
On Mon, 3 Dec 2018, Luc Van Oostenryck wrote:
> On Sat, Dec 01, 2018 at 03:02:09PM -0500, Jeff King wrote:
> > On Thu, Nov 29, 2018 at 09:32:48AM +0100, Johannes Schindelin wrote:
> >
> > > > > Would it not make more sense to add a command-line option (and a config
> > > > > setting) to re-schedule failed `exec` commands? Like so:
> > > >
> > > > Your proposition would do in most cases, however it is not possible to
> > > > make a distinction between reschedulable and non-reschedulable commands.
> > >
> > > True. But I don't think that's so terrible.
> > >
> > > What I think is something to avoid is two commands that do something very,
> > > very similar, but with two very, very different names.
> > >
> > > In reality, I think that it would even make sense to change the default to
> > > reschedule failed `exec` commands. Which is why I suggested to also add a
> > > config option.
> >
> > I sometimes add "x false" to the top of the todo list to stop and create
> > new commits before the first one. That would be awkward if I could never
> > get past that line. However, I think elsewhere a "pause" line has been
> > discussed, which would serve the same purpose.
> >
> > I wonder how often this kind of "yes, I know it fails, but keep going
> > anyway" situation would come up. And what the interface is like for
> > getting past it. E.g., what if you fixed a bunch of stuff but your tests
> > still fail? You may not want to abandon the changes you've made, but you
> > need to "rebase --continue" to move forward. I encounter this often when
> > the correct fix is actually in an earlier commit than the one that
> > yields the test failure. You can't rewind an interactive rebase, so I
> > complete and restart it, adding an "e"dit at the earlier commit.
>
> In this sort of situation, I often whish to be able to do nested rebases.
> Even more because it happen relatively often that I forget that I'm
> working in a rebase and not on the head, and then it's quite natural
> to me to type things like 'git rebase -i @^^^' while already rebasing.
> But I suppose this has already been discussed.
Varieties of this have been discussed, but no, not nested rebases.
The closest we thought about was re-scheduling the latest <n> commits,
which is now harder because of the `--rebase-merges` mode.
But I think it would be doable. Your idea of a "nested" rebase actually
opens that door quite nicely. It would not *really* be a nested rebase,
and it would still only be possible in interactive mode, but I could
totally see
git rebase --nested -i HEAD~3
to generate and prepend the following lines to the `git-rebase-todo` file:
reset abcdef01 # This is HEAD~3
pick abcdef02 # This is HEAD~2
pick abcdef03 # This is HEAD~
pick abcdef04 # This is HEAD
(assuming that the latest 3 commits were non-merge commits; It would look
quite a bit more complicated in other situations.)
Ciao,
Dscho
^ permalink raw reply
* Re: [PATCH] rebase -i: introduce the 'test' command
From: Johannes Schindelin @ 2018-12-03 19:03 UTC (permalink / raw)
To: Duy Nguyen; +Cc: Jeff King, Paul Morelle, Git Users
In-Reply-To: <20181203175322.GA3892@duynguyen.home>
Hi Duy,
On Mon, 3 Dec 2018, Duy Nguyen wrote:
> On Sat, Dec 01, 2018 at 03:02:09PM -0500, Jeff King wrote:
> > I sometimes add "x false" to the top of the todo list to stop and create
> > new commits before the first one.
>
> And here I've been doing the same by "edit" the first commit, add a
> new commit then reorder them in the second interactive rebase :P
>
> This made me look at git-rebase.txt to really learn about interactive
> rebase. I think the interactive rebase section could use some
> improvements. Its style looks.. umm.. more story telling than a
> reference. Perhaps something like this to at least highlight the
> commands.
And maybe, just maybe, that "story telling" is more useful for users who
want to learn about the interactive rebase, just like yourself, when
compared to a mere "reference".
Ciao,
Johannes
^ permalink raw reply
* Re: [RFC 2/2] exclude-promisor-objects: declare when option is allowed
From: Matthew DeVore @ 2018-12-03 19:10 UTC (permalink / raw)
To: Jeff King; +Cc: Matthew DeVore, git, gitster, pclouds, jonathantanmy, jeffhost
In-Reply-To: <20181201194424.GB28918@sigill.intra.peff.net>
On 12/01/2018 11:44 AM, Jeff King wrote:
>> repo_init_revisions(the_repository, &revs, NULL);
>> save_commit_buffer = 0;
>> - revs.allow_exclude_promisor_objects_opt = 1;
>> - setup_revisions(ac, av, &revs, NULL);
>> +
>> + memset(&s_r_opt, 0, sizeof(s_r_opt));
>> + s_r_opt.allow_exclude_promisor_objects = 1;
>> + setup_revisions(ac, av, &revs, &s_r_opt);
>
> I wonder if a static initializer for setup_revision_opt is worth it. It
> would remove the need for this memset. Probably not a big deal either
> way, though.
I think you mean something like this:
static struct setup_revision_opt s_r_opt = {NULL, NULL, NULL, 0, 1, 0};
This is a bit cryptic (I have to read the struct declaration in order to
know what is being set to 1) and if the struct ever gets a new field
before allow_exclude_promisor_objects, this initializer has to be updated.
>
>> static int handle_revision_opt(struct rev_info *revs, int argc, const char
>> **argv,
>> - int *unkc, const char **unkv)
>> + int *unkc, const char **unkv,
>> + int allow_exclude_promisor_objects)
>
> Why not pass in the whole setup_revision_opt struct? We don't need
> anything else from it yet, but it seems like the point of that struct is
> to pass around preferences like this.
OK, the code reads better if I do that, so I agree.
>
> -Peff
>
^ permalink raw reply
* [PATCH] revisions.c: put promisor option in specialized struct
From: Matthew DeVore @ 2018-12-03 19:23 UTC (permalink / raw)
To: peff, git, gitster; +Cc: Matthew DeVore, pclouds, jonathantanmy, jeffhost
In-Reply-To: <20181201194424.GB28918@sigill.intra.peff.net>
Put the allow_exclude_promisor_objects flag in setup_revision_opt. When
it was in rev_info, it was unclear when it was used, since rev_info is
passed to functions that don't use the flag. This resulted in
unnecessary setting of the flag in prune.c, so fix that as well.
Signed-off-by: Matthew DeVore <matvore@google.com>
---
builtin/pack-objects.c | 7 +++++--
builtin/prune.c | 1 -
builtin/rev-list.c | 6 ++++--
revision.c | 10 ++++++----
revision.h | 4 ++--
5 files changed, 17 insertions(+), 11 deletions(-)
diff --git a/builtin/pack-objects.c b/builtin/pack-objects.c
index 24bba8147f..b22c99f540 100644
--- a/builtin/pack-objects.c
+++ b/builtin/pack-objects.c
@@ -3084,14 +3084,17 @@ static void record_recent_commit(struct commit *commit, void *data)
static void get_object_list(int ac, const char **av)
{
struct rev_info revs;
+ struct setup_revision_opt s_r_opt;
char line[1000];
int flags = 0;
int save_warning;
repo_init_revisions(the_repository, &revs, NULL);
save_commit_buffer = 0;
- revs.allow_exclude_promisor_objects_opt = 1;
- setup_revisions(ac, av, &revs, NULL);
+
+ memset(&s_r_opt, 0, sizeof(s_r_opt));
+ s_r_opt.allow_exclude_promisor_objects = 1;
+ setup_revisions(ac, av, &revs, &s_r_opt);
/* make sure shallows are read */
is_repository_shallow(the_repository);
diff --git a/builtin/prune.c b/builtin/prune.c
index e42653b99c..1ec9ddd751 100644
--- a/builtin/prune.c
+++ b/builtin/prune.c
@@ -120,7 +120,6 @@ int cmd_prune(int argc, const char **argv, const char *prefix)
save_commit_buffer = 0;
read_replace_refs = 0;
ref_paranoia = 1;
- revs.allow_exclude_promisor_objects_opt = 1;
repo_init_revisions(the_repository, &revs, prefix);
argc = parse_options(argc, argv, prefix, options, prune_usage, 0);
diff --git a/builtin/rev-list.c b/builtin/rev-list.c
index 3a2c0c23b6..c3095c6fed 100644
--- a/builtin/rev-list.c
+++ b/builtin/rev-list.c
@@ -362,6 +362,7 @@ int cmd_rev_list(int argc, const char **argv, const char *prefix)
{
struct rev_info revs;
struct rev_list_info info;
+ struct setup_revision_opt s_r_opt;
int i;
int bisect_list = 0;
int bisect_show_vars = 0;
@@ -375,7 +376,6 @@ int cmd_rev_list(int argc, const char **argv, const char *prefix)
git_config(git_default_config, NULL);
repo_init_revisions(the_repository, &revs, prefix);
revs.abbrev = DEFAULT_ABBREV;
- revs.allow_exclude_promisor_objects_opt = 1;
revs.commit_format = CMIT_FMT_UNSPECIFIED;
revs.do_not_die_on_missing_tree = 1;
@@ -407,7 +407,9 @@ int cmd_rev_list(int argc, const char **argv, const char *prefix)
}
}
- argc = setup_revisions(argc, argv, &revs, NULL);
+ memset(&s_r_opt, 0, sizeof(s_r_opt));
+ s_r_opt.allow_exclude_promisor_objects = 1;
+ argc = setup_revisions(argc, argv, &revs, &s_r_opt);
memset(&info, 0, sizeof(info));
info.revs = &revs;
diff --git a/revision.c b/revision.c
index 13e0519c02..f6b32e6a42 100644
--- a/revision.c
+++ b/revision.c
@@ -1791,7 +1791,8 @@ static void add_message_grep(struct rev_info *revs, const char *pattern)
}
static int handle_revision_opt(struct rev_info *revs, int argc, const char **argv,
- int *unkc, const char **unkv)
+ int *unkc, const char **unkv,
+ const struct setup_revision_opt* opt)
{
const char *arg = argv[0];
const char *optarg;
@@ -2151,7 +2152,7 @@ static int handle_revision_opt(struct rev_info *revs, int argc, const char **arg
revs->limited = 1;
} else if (!strcmp(arg, "--ignore-missing")) {
revs->ignore_missing = 1;
- } else if (revs->allow_exclude_promisor_objects_opt &&
+ } else if (opt && opt->allow_exclude_promisor_objects &&
!strcmp(arg, "--exclude-promisor-objects")) {
if (fetch_if_missing)
BUG("exclude_promisor_objects can only be used when fetch_if_missing is 0");
@@ -2173,7 +2174,7 @@ void parse_revision_opt(struct rev_info *revs, struct parse_opt_ctx_t *ctx,
const char * const usagestr[])
{
int n = handle_revision_opt(revs, ctx->argc, ctx->argv,
- &ctx->cpidx, ctx->out);
+ &ctx->cpidx, ctx->out, NULL);
if (n <= 0) {
error("unknown option `%s'", ctx->argv[0]);
usage_with_options(usagestr, options);
@@ -2391,7 +2392,8 @@ int setup_revisions(int argc, const char **argv, struct rev_info *revs, struct s
continue;
}
- opts = handle_revision_opt(revs, argc - i, argv + i, &left, argv);
+ opts = handle_revision_opt(revs, argc - i, argv + i,
+ &left, argv, opt);
if (opts > 0) {
i += opts - 1;
continue;
diff --git a/revision.h b/revision.h
index 7987bfcd2e..7d6e050569 100644
--- a/revision.h
+++ b/revision.h
@@ -161,7 +161,6 @@ struct rev_info {
do_not_die_on_missing_tree:1,
/* for internal use only */
- allow_exclude_promisor_objects_opt:1,
exclude_promisor_objects:1;
/* Diff flags */
@@ -297,7 +296,8 @@ struct setup_revision_opt {
const char *def;
void (*tweak)(struct rev_info *, struct setup_revision_opt *);
const char *submodule; /* TODO: drop this and use rev_info->repo */
- int assume_dashdash;
+ int assume_dashdash : 1;
+ int allow_exclude_promisor_objects : 1;
unsigned revarg_opt;
};
--
2.20.0.rc1.387.gf8505762e3-goog
^ permalink raw reply related
* Re: [PATCH] rebase -i: introduce the 'test' command
From: Luc Van Oostenryck @ 2018-12-03 19:34 UTC (permalink / raw)
To: Johannes Schindelin; +Cc: Jeff King, Paul Morelle, Git Users
In-Reply-To: <nycvar.QRO.7.76.6.1812031957060.41@tvgsbejvaqbjf.bet>
On Mon, Dec 03, 2018 at 08:01:44PM +0100, Johannes Schindelin wrote:
> Hi Luc,
>
> On Mon, 3 Dec 2018, Luc Van Oostenryck wrote:
>
> > On Sat, Dec 01, 2018 at 03:02:09PM -0500, Jeff King wrote:
> > > I sometimes add "x false" to the top of the todo list to stop and create
> > > new commits before the first one. That would be awkward if I could never
> > > get past that line. However, I think elsewhere a "pause" line has been
> > > discussed, which would serve the same purpose.
> > >
> > > I wonder how often this kind of "yes, I know it fails, but keep going
> > > anyway" situation would come up. And what the interface is like for
> > > getting past it. E.g., what if you fixed a bunch of stuff but your tests
> > > still fail? You may not want to abandon the changes you've made, but you
> > > need to "rebase --continue" to move forward. I encounter this often when
> > > the correct fix is actually in an earlier commit than the one that
> > > yields the test failure. You can't rewind an interactive rebase, so I
> > > complete and restart it, adding an "e"dit at the earlier commit.
> >
> > In this sort of situation, I often whish to be able to do nested rebases.
> > Even more because it happen relatively often that I forget that I'm
> > working in a rebase and not on the head, and then it's quite natural
> > to me to type things like 'git rebase -i @^^^' while already rebasing.
> > But I suppose this has already been discussed.
>
> Varieties of this have been discussed, but no, not nested rebases.
Interesting :)
> The closest we thought about was re-scheduling the latest <n> commits,
> which is now harder because of the `--rebase-merges` mode.
>
> But I think it would be doable. Your idea of a "nested" rebase actually
> opens that door quite nicely. It would not *really* be a nested rebase,
> and it would still only be possible in interactive mode, but I could
> totally see
>
> git rebase --nested -i HEAD~3
I don't mind much if it would be "really nested" or "as-if nested" but
with this flag --nested I wonder what would happen if I would use it
in a 'top-level' rebase (or, said in another way, would I be able
to alias 'rebase' to 'rebase --nested')?
> to generate and prepend the following lines to the `git-rebase-todo` file:
>
> reset abcdef01 # This is HEAD~3
> pick abcdef02 # This is HEAD~2
> pick abcdef03 # This is HEAD~
> pick abcdef04 # This is HEAD
>
OK, I see.
This would not be nestable/stackable but would solve the problem nicely.
Best regards,
-- Luc
^ permalink raw reply
* [PATCH v2] range-diff: always pass at least minimal diff options
From: Martin Ågren @ 2018-12-03 20:07 UTC (permalink / raw)
To: git
Cc: Eric Sunshine, Junio C Hamano, Johannes Schindelin,
Ævar Arnfjörð Bjarmason
In-Reply-To: <CAN0heSrfH39-37KDU3XDhxiYs1_3eUMdjbdAm37cPAmnOYUZMA@mail.gmail.com>
Commit d8981c3f88 ("format-patch: do not let its diff-options affect
--range-diff", 2018-11-30) taught `show_range_diff()` to accept a
NULL-pointer as an indication that it should use its own "reasonable
default". That fixed a regression from a5170794 ("Merge branch
'ab/range-diff-no-patch'", 2018-11-18), but unfortunately it introduced
a regression of its own.
In particular, it means we forget the `file` member of the diff options,
so rather than placing a range-diff in the cover-letter, we write it to
stdout. In order to fix this, rewrite the two callers adjusted by
d8981c3f88 to instead create a "dummy" set of diff options where they
only fill in which file to use.
Plus, turn off coloring to make sure we don't write any color codes.
Maybe we could do `opts.use_color = opts.file != stdout`, but for now,
I'd much rather always write uncolored output than write color codes
where there shouldn't be any.
Modify and extend the existing tests to try and verify that the right
contents end up in the right place.
Don't revert `show_range_diff()`, i.e., let it keep accepting NULL.
Rather than removing what is dead code and figuring out it isn't
actually dead and we've broken 2.20, just leave it for now.
Signed-off-by: Martin Ågren <martin.agren@gmail.com>
---
Here's another attempt at fixing this recent regression.
t/t3206-range-diff.sh | 20 +++++++++++++-------
builtin/log.c | 13 ++++++++++++-
log-tree.c | 13 ++++++++++++-
3 files changed, 37 insertions(+), 9 deletions(-)
diff --git a/t/t3206-range-diff.sh b/t/t3206-range-diff.sh
index e497c1358f..048feaf6dd 100755
--- a/t/t3206-range-diff.sh
+++ b/t/t3206-range-diff.sh
@@ -248,18 +248,24 @@ test_expect_success 'dual-coloring' '
for prev in topic master..topic
do
test_expect_success "format-patch --range-diff=$prev" '
- git format-patch --stdout --cover-letter --range-diff=$prev \
+ git format-patch --cover-letter --range-diff=$prev \
master..unmodified >actual &&
- grep "= 1: .* s/5/A" actual &&
- grep "= 2: .* s/4/A" actual &&
- grep "= 3: .* s/11/B" actual &&
- grep "= 4: .* s/12/B" actual
+ test_when_finished "rm 000?-*" &&
+ test_line_count = 5 actual &&
+ test_i18ngrep "^Range-diff:$" 0000-* &&
+ grep "= 1: .* s/5/A" 0000-* &&
+ grep "= 2: .* s/4/A" 0000-* &&
+ grep "= 3: .* s/11/B" 0000-* &&
+ grep "= 4: .* s/12/B" 0000-*
'
done
test_expect_success 'format-patch --range-diff as commentary' '
- git format-patch --stdout --range-diff=HEAD~1 HEAD~1 >actual &&
- test_i18ngrep "^Range-diff:$" actual
+ git format-patch --range-diff=HEAD~1 HEAD~1 >actual &&
+ test_when_finished "rm 0001-*" &&
+ test_line_count = 1 actual &&
+ test_i18ngrep "^Range-diff:$" 0001-* &&
+ grep "> 1: .* new message" 0001-*
'
test_done
diff --git a/builtin/log.c b/builtin/log.c
index 5ac18e2848..e42487b46d 100644
--- a/builtin/log.c
+++ b/builtin/log.c
@@ -1094,9 +1094,20 @@ static void make_cover_letter(struct rev_info *rev, int use_stdout,
}
if (rev->rdiff1) {
+ /*
+ * (At least for now) we only want to pass down
+ * the file handle where we want the range-diff
+ * to appear. Avoid any other diff options until
+ * we know how we want to handle them.
+ */
+ struct diff_options opts;
+ diff_setup(&opts);
+ opts.file = rev->diffopt.file;
+ opts.use_color = 0;
+ diff_setup_done(&opts);
fprintf_ln(rev->diffopt.file, "%s", rev->rdiff_title);
show_range_diff(rev->rdiff1, rev->rdiff2,
- rev->creation_factor, 1, NULL);
+ rev->creation_factor, 1, &opts);
}
}
diff --git a/log-tree.c b/log-tree.c
index b243779a0b..fd79a3ec37 100644
--- a/log-tree.c
+++ b/log-tree.c
@@ -755,14 +755,25 @@ void show_log(struct rev_info *opt)
if (cmit_fmt_is_mail(ctx.fmt) && opt->rdiff1) {
struct diff_queue_struct dq;
+ struct diff_options opts;
memcpy(&dq, &diff_queued_diff, sizeof(diff_queued_diff));
DIFF_QUEUE_CLEAR(&diff_queued_diff);
next_commentary_block(opt, NULL);
fprintf_ln(opt->diffopt.file, "%s", opt->rdiff_title);
+ /*
+ * (At least for now) we only want to pass down
+ * the file handle where we want the range-diff
+ * to appear. Avoid any other diff options until
+ * we know how we want to handle them.
+ */
+ diff_setup(&opts);
+ opts.file = opt->diffopt.file;
+ opts.use_color = 0;
+ diff_setup_done(&opts);
show_range_diff(opt->rdiff1, opt->rdiff2,
- opt->creation_factor, 1, NULL);
+ opt->creation_factor, 1, &opts);
memcpy(&diff_queued_diff, &dq, sizeof(diff_queued_diff));
}
--
2.20.0.rc2.1.gfcc5f94f1e
^ permalink raw reply related
* [PATCH 0/3] Re: [ANNOUNCE] Git v2.20.0-rc2
From: Martin Ågren @ 2018-12-03 20:21 UTC (permalink / raw)
To: Junio C Hamano; +Cc: git
In-Reply-To: <xmqq36rhjnts.fsf@gitster-ct.c.googlers.com>
Hi Junio,
> 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.
Here are a few suggested tweaks after reading the draft release notes.
Nothing critical.
Martin
Martin Ågren (3):
RelNotes 2.20: move some items between sections
RelNotes 2.20: clarify sentence
RelNotes 2.20: drop spurious double quote
Documentation/RelNotes/2.20.0.txt | 30 +++++++++++++++---------------
1 file changed, 15 insertions(+), 15 deletions(-)
--
2.20.0.rc2.1.gfcc5f94f1e
^ permalink raw reply
* [PATCH 1/3] RelNotes 2.20: move some items between sections
From: Martin Ågren @ 2018-12-03 20:21 UTC (permalink / raw)
To: Junio C Hamano; +Cc: git
In-Reply-To: <cover.1543868120.git.martin.agren@gmail.com>
Some items that should be in "Performance, Internal Implementation,
Development Support etc." have ended up in "UI, Workflows & Features"
and "Fixes since v2.19". Move them, and do s/uses/use/ while at it.
Signed-off-by: Martin Ågren <martin.agren@gmail.com>
---
Documentation/RelNotes/2.20.0.txt | 26 +++++++++++++-------------
1 file changed, 13 insertions(+), 13 deletions(-)
diff --git a/Documentation/RelNotes/2.20.0.txt b/Documentation/RelNotes/2.20.0.txt
index b1deaf37da..e5ab8cc609 100644
--- a/Documentation/RelNotes/2.20.0.txt
+++ b/Documentation/RelNotes/2.20.0.txt
@@ -137,11 +137,6 @@ UI, Workflows & Features
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.
@@ -185,6 +180,11 @@ UI, Workflows & Features
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
@@ -387,6 +387,14 @@ Performance, Internal Implementation, Development Support etc.
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
-----------------
@@ -544,14 +552,6 @@ Fixes since v2.19
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).
--
2.20.0.rc2.1.gfcc5f94f1e
^ permalink raw reply related
* [PATCH 2/3] RelNotes 2.20: clarify sentence
From: Martin Ågren @ 2018-12-03 20:21 UTC (permalink / raw)
To: Junio C Hamano; +Cc: git
In-Reply-To: <cover.1543868120.git.martin.agren@gmail.com>
I had to read this sentence a few times to understand it. Let's try to
clarify it.
Signed-off-by: Martin Ågren <martin.agren@gmail.com>
---
Documentation/RelNotes/2.20.0.txt | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/Documentation/RelNotes/2.20.0.txt b/Documentation/RelNotes/2.20.0.txt
index e5ab8cc609..201135d80c 100644
--- a/Documentation/RelNotes/2.20.0.txt
+++ b/Documentation/RelNotes/2.20.0.txt
@@ -305,7 +305,7 @@ Performance, Internal Implementation, Development Support etc.
* 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.
+ 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.
--
2.20.0.rc2.1.gfcc5f94f1e
^ permalink raw reply related
* [PATCH 3/3] RelNotes 2.20: drop spurious double quote
From: Martin Ågren @ 2018-12-03 20:21 UTC (permalink / raw)
To: Junio C Hamano; +Cc: git
In-Reply-To: <cover.1543868120.git.martin.agren@gmail.com>
We have three double-quote characters, which is one too many or too few.
Dropping the last one seems to match the original intention best.
Signed-off-by: Martin Ågren <martin.agren@gmail.com>
---
Documentation/RelNotes/2.20.0.txt | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/Documentation/RelNotes/2.20.0.txt b/Documentation/RelNotes/2.20.0.txt
index 201135d80c..e71fe3dee1 100644
--- a/Documentation/RelNotes/2.20.0.txt
+++ b/Documentation/RelNotes/2.20.0.txt
@@ -578,7 +578,7 @@ Fixes since v2.19
* "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")
+ 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).
--
2.20.0.rc2.1.gfcc5f94f1e
^ permalink raw reply related
* Re: [PATCH] rebase docs: fix incorrect format of the section Behavioral Differences
From: Martin Ågren @ 2018-12-03 20:42 UTC (permalink / raw)
To: Johannes Sixt; +Cc: Git Mailing List
In-Reply-To: <f26b53e3-e7d1-f0fe-cdd3-dd734beb1628@kdbg.org>
On Mon, 3 Dec 2018 at 18:35, Johannes Sixt <j6t@kdbg.org> wrote:
> I actually did not test the result, because I don't have the
> infrastructure.
I've tested with asciidoc and Asciidoctor, html and man-page. Looks
good.
Martin
^ permalink raw reply
* Re: [ANNOUNCE] Git v2.20.0-rc2
From: Johannes Schindelin @ 2018-12-03 20:45 UTC (permalink / raw)
To: Junio C Hamano; +Cc: git, git-for-windows, git-packagers
In-Reply-To: <xmqq36rhjnts.fsf@gitster-ct.c.googlers.com>
[-- 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
* Re: [PATCH] rebase docs: fix incorrect format of the section Behavioral Differences
From: Johannes Sixt @ 2018-12-03 20:50 UTC (permalink / raw)
To: Martin Ågren; +Cc: Git Mailing List
In-Reply-To: <CAN0heSqfgu2A7Hg5b1Td-m_5gXtmd-8_ZBC5Fq9BDMaJD0yMqA@mail.gmail.com>
Am 03.12.18 um 21:42 schrieb Martin Ågren:
> On Mon, 3 Dec 2018 at 18:35, Johannes Sixt <j6t@kdbg.org> wrote:
>> I actually did not test the result, because I don't have the
>> infrastructure.
>
> I've tested with asciidoc and Asciidoctor, html and man-page. Looks
> good.
Thank you so much!
-- Hannes
^ permalink raw reply
* Re: [PATCH] rebase docs: fix incorrect format of the section Behavioral Differences
From: Johannes Schindelin @ 2018-12-03 20:56 UTC (permalink / raw)
To: Johannes Sixt; +Cc: Git Mailing List
In-Reply-To: <f26b53e3-e7d1-f0fe-cdd3-dd734beb1628@kdbg.org>
Hi Hannes,
On Mon, 3 Dec 2018, Johannes Sixt wrote:
> The text body of section Behavioral Differences is typeset as code,
> but should be regular text. Remove the indentation to achieve that.
>
> While here, prettify the language:
>
> - use "the x backend" instead of "x-based rebase";
> - use present tense instead of future tense;
>
> and use subsections instead of a list.
>
> Signed-off-by: Johannes Sixt <j6t@kdbg.org>
> ---
The changes look sensible to me.
Thanks,
Dscho
> Cf. https://git-scm.com/docs/git-rebase#_behavioral_differences
>
> I actually did not test the result, because I don't have the
> infrastructure.
>
> The sentence "The am backend sometimes does not" is not very useful,
> but is not my fault ;) It would be great if it could be made more
> specific, but I do not know the details.
>
> Documentation/git-rebase.txt | 30 +++++++++++++++++-------------
> 1 file changed, 17 insertions(+), 13 deletions(-)
>
> diff --git a/Documentation/git-rebase.txt b/Documentation/git-rebase.txt
> index 80793bad8d..dff17b3178 100644
> --- a/Documentation/git-rebase.txt
> +++ b/Documentation/git-rebase.txt
> @@ -550,24 +550,28 @@ Other incompatible flag pairs:
> BEHAVIORAL DIFFERENCES
> -----------------------
>
> - * empty commits:
> +There are some subtle differences how the backends behave.
>
> - am-based rebase will drop any "empty" commits, whether the
> - commit started empty (had no changes relative to its parent to
> - start with) or ended empty (all changes were already applied
> - upstream in other commits).
> +Empty commits
> +~~~~~~~~~~~~~
> +
> +The am backend drops any "empty" commits, regardless of whether the
> +commit started empty (had no changes relative to its parent to
> +start with) or ended empty (all changes were already applied
> +upstream in other commits).
>
> - merge-based rebase does the same.
> +The merge backend does the same.
>
> - interactive-based rebase will by default drop commits that
> - started empty and halt if it hits a commit that ended up empty.
> - The `--keep-empty` option exists for interactive rebases to allow
> - it to keep commits that started empty.
> +The interactive backend drops commits by default that
> +started empty and halts if it hits a commit that ended up empty.
> +The `--keep-empty` option exists for the interactive backend to allow
> +it to keep commits that started empty.
>
> - * directory rename detection:
> +Directory rename detection
> +~~~~~~~~~~~~~~~~~~~~~~~~~~
>
> - merge-based and interactive-based rebases work fine with
> - directory rename detection. am-based rebases sometimes do not.
> +The merge and interactive backends work fine with
> +directory rename detection. The am backend sometimes does not.
>
> include::merge-strategies.txt[]
>
> --
> 2.19.1.1133.g2dd3d172d2
>
^ permalink raw reply
* Re: [RFC 2/2] exclude-promisor-objects: declare when option is allowed
From: Jeff King @ 2018-12-03 21:15 UTC (permalink / raw)
To: Matthew DeVore
Cc: Matthew DeVore, git, gitster, pclouds, jonathantanmy, jeffhost
In-Reply-To: <80a08b99-14cb-e398-e6c2-2aa94a5fdda3@comcast.net>
On Mon, Dec 03, 2018 at 11:10:49AM -0800, Matthew DeVore wrote:
> > > + memset(&s_r_opt, 0, sizeof(s_r_opt));
> > > + s_r_opt.allow_exclude_promisor_objects = 1;
> > > + setup_revisions(ac, av, &revs, &s_r_opt);
> >
> > I wonder if a static initializer for setup_revision_opt is worth it. It
> > would remove the need for this memset. Probably not a big deal either
> > way, though.
> I think you mean something like this:
>
> static struct setup_revision_opt s_r_opt = {NULL, NULL, NULL, 0, 1, 0};
>
> This is a bit cryptic (I have to read the struct declaration in order to
> know what is being set to 1) and if the struct ever gets a new field before
> allow_exclude_promisor_objects, this initializer has to be updated.
I agree that's pretty awful. I meant something like this:
struct setup_revision_opt s_r_opt = { NULL };
...
s_r_opt.allow_exclude_promisor_objects = 1;
setup_revisions(...);
It's functionally equivalent to the memset(), but you don't have to
wonder about whether we peek at the uninitialized state in between.
That said, our C99 designated initializer weather-balloons haven't
gotten any complaints yet. So I think you could actually do:
struct setup_revision_opt s_r_opt = {
.allow_exclude_promisor_objects = 1,
};
...
setup_revisions(...);
which is pretty nice.
-Peff
^ permalink raw reply
* [PATCH v3] range-diff: always pass at least minimal diff options
From: Eric Sunshine @ 2018-12-03 21:21 UTC (permalink / raw)
To: git
Cc: Junio C Hamano, Johannes Schindelin,
Ævar Arnfjörð Bjarmason, Martin Ågren,
Eric Sunshine
In-Reply-To: <20181203200734.527341-1-martin.agren@gmail.com>
From: Martin Ågren <martin.agren@gmail.com>
Commit d8981c3f88 ("format-patch: do not let its diff-options affect
--range-diff", 2018-11-30) taught `show_range_diff()` to accept a
NULL-pointer as an indication that it should use its own "reasonable
default". That fixed a regression from a5170794 ("Merge branch
'ab/range-diff-no-patch'", 2018-11-18), but unfortunately it introduced
a regression of its own.
In particular, it means we forget the `file` member of the diff options,
so rather than placing a range-diff in the cover-letter, we write it to
stdout. In order to fix this, rewrite the two callers adjusted by
d8981c3f88 to instead create a "dummy" set of diff options where they
only fill in the fields we absolutely require, such as output file and
color.
Modify and extend the existing tests to try and verify that the right
contents end up in the right place.
Don't revert `show_range_diff()`, i.e., let it keep accepting NULL.
Rather than removing what is dead code and figuring out it isn't
actually dead and we've broken 2.20, just leave it for now.
[es: retain diff coloring when going to stdout]
Signed-off-by: Martin Ågren <martin.agren@gmail.com>
Signed-off-by: Eric Sunshine <sunshine@sunshineco.com>
---
This is a re-roll of Martin's v2[1]. The only difference from v2 is that
it retains coloring when emitting to the terminal (plus an in-code
comment was simplified).
The regression introduced by d8981c3f88, in which the range-diff only
ever gets emitted to the terminal, and never to the cover letter or
commentary section of a standalone patch, makes the --range-diff option
rather useless, so this fix probably ought to be fast-tracked. An
alternative would be to rip out all the recent "--range-diff"-related
changes and go with the --range-diff implementation which has been in
use for a few months, even if it is not perfect.
[1]: https://public-inbox.org/git/20181203200734.527341-1-martin.agren@gmail.com/
builtin/log.c | 11 ++++++++++-
log-tree.c | 11 ++++++++++-
t/t3206-range-diff.sh | 20 +++++++++++++-------
3 files changed, 33 insertions(+), 9 deletions(-)
diff --git a/builtin/log.c b/builtin/log.c
index 5ac18e2848..e8e51068bd 100644
--- a/builtin/log.c
+++ b/builtin/log.c
@@ -1094,9 +1094,18 @@ static void make_cover_letter(struct rev_info *rev, int use_stdout,
}
if (rev->rdiff1) {
+ /*
+ * Pass minimum required diff-options to range-diff; others
+ * can be added later if deemed desirable.
+ */
+ struct diff_options opts;
+ diff_setup(&opts);
+ opts.file = rev->diffopt.file;
+ opts.use_color = rev->diffopt.use_color;
+ diff_setup_done(&opts);
fprintf_ln(rev->diffopt.file, "%s", rev->rdiff_title);
show_range_diff(rev->rdiff1, rev->rdiff2,
- rev->creation_factor, 1, NULL);
+ rev->creation_factor, 1, &opts);
}
}
diff --git a/log-tree.c b/log-tree.c
index b243779a0b..10680c139e 100644
--- a/log-tree.c
+++ b/log-tree.c
@@ -755,14 +755,23 @@ void show_log(struct rev_info *opt)
if (cmit_fmt_is_mail(ctx.fmt) && opt->rdiff1) {
struct diff_queue_struct dq;
+ struct diff_options opts;
memcpy(&dq, &diff_queued_diff, sizeof(diff_queued_diff));
DIFF_QUEUE_CLEAR(&diff_queued_diff);
next_commentary_block(opt, NULL);
fprintf_ln(opt->diffopt.file, "%s", opt->rdiff_title);
+ /*
+ * Pass minimum required diff-options to range-diff; others
+ * can be added later if deemed desirable.
+ */
+ diff_setup(&opts);
+ opts.file = opt->diffopt.file;
+ opts.use_color = opt->diffopt.use_color;
+ diff_setup_done(&opts);
show_range_diff(opt->rdiff1, opt->rdiff2,
- opt->creation_factor, 1, NULL);
+ opt->creation_factor, 1, &opts);
memcpy(&diff_queued_diff, &dq, sizeof(diff_queued_diff));
}
diff --git a/t/t3206-range-diff.sh b/t/t3206-range-diff.sh
index e497c1358f..048feaf6dd 100755
--- a/t/t3206-range-diff.sh
+++ b/t/t3206-range-diff.sh
@@ -248,18 +248,24 @@ test_expect_success 'dual-coloring' '
for prev in topic master..topic
do
test_expect_success "format-patch --range-diff=$prev" '
- git format-patch --stdout --cover-letter --range-diff=$prev \
+ git format-patch --cover-letter --range-diff=$prev \
master..unmodified >actual &&
- grep "= 1: .* s/5/A" actual &&
- grep "= 2: .* s/4/A" actual &&
- grep "= 3: .* s/11/B" actual &&
- grep "= 4: .* s/12/B" actual
+ test_when_finished "rm 000?-*" &&
+ test_line_count = 5 actual &&
+ test_i18ngrep "^Range-diff:$" 0000-* &&
+ grep "= 1: .* s/5/A" 0000-* &&
+ grep "= 2: .* s/4/A" 0000-* &&
+ grep "= 3: .* s/11/B" 0000-* &&
+ grep "= 4: .* s/12/B" 0000-*
'
done
test_expect_success 'format-patch --range-diff as commentary' '
- git format-patch --stdout --range-diff=HEAD~1 HEAD~1 >actual &&
- test_i18ngrep "^Range-diff:$" actual
+ git format-patch --range-diff=HEAD~1 HEAD~1 >actual &&
+ test_when_finished "rm 0001-*" &&
+ test_line_count = 1 actual &&
+ test_i18ngrep "^Range-diff:$" 0001-* &&
+ grep "> 1: .* new message" 0001-*
'
test_done
--
2.20.0.rc2.403.gdbc3b29805
^ permalink raw reply related
* Re: [PATCH] revisions.c: put promisor option in specialized struct
From: Jeff King @ 2018-12-03 21:24 UTC (permalink / raw)
To: Matthew DeVore; +Cc: git, gitster, pclouds, jonathantanmy, jeffhost
In-Reply-To: <20181203192356.51432-1-matvore@google.com>
On Mon, Dec 03, 2018 at 11:23:56AM -0800, Matthew DeVore wrote:
> Put the allow_exclude_promisor_objects flag in setup_revision_opt. When
> it was in rev_info, it was unclear when it was used, since rev_info is
> passed to functions that don't use the flag. This resulted in
> unnecessary setting of the flag in prune.c, so fix that as well.
>
> Signed-off-by: Matthew DeVore <matvore@google.com>
> ---
> builtin/pack-objects.c | 7 +++++--
> builtin/prune.c | 1 -
> builtin/rev-list.c | 6 ++++--
> revision.c | 10 ++++++----
> revision.h | 4 ++--
> 5 files changed, 17 insertions(+), 11 deletions(-)
Thanks, this mostly looks good to me (with or without tweaking the
initializers as discussed in the other part of the thread).
One thing I noticed:
> @@ -297,7 +296,8 @@ struct setup_revision_opt {
> const char *def;
> void (*tweak)(struct rev_info *, struct setup_revision_opt *);
> const char *submodule; /* TODO: drop this and use rev_info->repo */
> - int assume_dashdash;
> + int assume_dashdash : 1;
> + int allow_exclude_promisor_objects : 1;
> unsigned revarg_opt;
> };
I don't know that we need to penny-pinch bytes in this struct, but in
general it shouldn't hurt either awy. However, a signed bit-field with 1
bit is funny. I'm not even sure what the standard has to say, but in
twos-complement that would store "-1" and "0" (gcc -Wpedantic also
complains about overflow in assigning "1" to it).
So this probably ought to be "unsigned".
-Peff
^ permalink raw reply
* Re: [PATCH] rebase -i: introduce the 'test' command
From: Jeff King @ 2018-12-03 21:27 UTC (permalink / raw)
To: phillip.wood; +Cc: Johannes Schindelin, Paul Morelle, Git Users
In-Reply-To: <ab4b0a47-858e-659f-f970-944b7c5313fc@talktalk.net>
On Mon, Dec 03, 2018 at 02:31:37PM +0000, Phillip Wood wrote:
> > How would I move past the test that fails to continue? I guess "git
> > rebase --edit-todo" and then manually remove it (and any other remaining
> > test lines)?
>
> Perhaps we could teach git rebase --skip to skip a rescheduled command, it
> could be useful if people want to skip rescheduled picks as well (though I
> don't think I've ever had that happen in the wild). I can see myself turning
> on the rescheduling config setting but occasionally wanting to be able to
> skip over the rescheduled exec command.
Yeah, I agree that would give a nice user experience.
-Peff
^ permalink raw reply
* Re: [PATCH] rebase -i: introduce the 'test' command
From: Jeff King @ 2018-12-03 21:31 UTC (permalink / raw)
To: Johannes Schindelin; +Cc: Luc Van Oostenryck, Paul Morelle, Git Users
In-Reply-To: <nycvar.QRO.7.76.6.1812031957060.41@tvgsbejvaqbjf.bet>
On Mon, Dec 03, 2018 at 08:01:44PM +0100, Johannes Schindelin wrote:
> > In this sort of situation, I often whish to be able to do nested rebases.
> > Even more because it happen relatively often that I forget that I'm
> > working in a rebase and not on the head, and then it's quite natural
> > to me to type things like 'git rebase -i @^^^' while already rebasing.
> > But I suppose this has already been discussed.
>
> Varieties of this have been discussed, but no, not nested rebases.
>
> The closest we thought about was re-scheduling the latest <n> commits,
> which is now harder because of the `--rebase-merges` mode.
>
> But I think it would be doable. Your idea of a "nested" rebase actually
> opens that door quite nicely. It would not *really* be a nested rebase,
> and it would still only be possible in interactive mode, but I could
> totally see
>
> git rebase --nested -i HEAD~3
>
> to generate and prepend the following lines to the `git-rebase-todo` file:
>
> reset abcdef01 # This is HEAD~3
> pick abcdef02 # This is HEAD~2
> pick abcdef03 # This is HEAD~
> pick abcdef04 # This is HEAD
>
> (assuming that the latest 3 commits were non-merge commits; It would look
> quite a bit more complicated in other situations.)
Yeah, I would probably use that if it existed.
It would be nicer to have real nested sequencer operations, I think, for
other situations. E.g., cherry-picking a sequence of commits while
you're in the middle of a rebase.
But I suspect getting that right would be _loads_ more work, and
probably would involve some funky UI corner cases to handle the stack of
operations (so truly aborting a rebase may mean an arbitrary number of
"rebase --abort" calls to pop the stack). Your suggestion is probably a
reasonable trick in the meantime.
-Peff
^ permalink raw reply
* Re: [PATCH] rebase -i: introduce the 'test' command
From: Jeff King @ 2018-12-03 21:34 UTC (permalink / raw)
To: Duy Nguyen; +Cc: Johannes Schindelin, Paul Morelle, Git Users
In-Reply-To: <20181203175322.GA3892@duynguyen.home>
On Mon, Dec 03, 2018 at 06:53:22PM +0100, Duy Nguyen wrote:
> On Sat, Dec 01, 2018 at 03:02:09PM -0500, Jeff King wrote:
> > I sometimes add "x false" to the top of the todo list to stop and create
> > new commits before the first one.
>
> And here I've been doing the same by "edit" the first commit, add a
> new commit then reorder them in the second interactive rebase :P
>
> This made me look at git-rebase.txt to really learn about interactive
> rebase. I think the interactive rebase section could use some
> improvements. Its style looks.. umm.. more story telling than a
> reference. Perhaps something like this to at least highlight the
> commands.
Yeah, I think the typographic change is an improvement that doesn't
really have a downside.
As Dscho mentioned, sometimes the story style is what you want, so I
don't think we'd want to simply rearrange it. It may be useful to
present the material twice, though: once as a table/list for reference,
and then once as a story working through an example.
-Peff
^ permalink raw reply
* Re: [PATCH/RFC v2 0/7] Introduce new commands switch-branch and checkout-files
From: Stefan Beller @ 2018-12-03 21:42 UTC (permalink / raw)
To: Duy Nguyen
Cc: Ævar Arnfjörð Bjarmason, git, Junio C Hamano,
Thomas Gummerer
In-Reply-To: <CACsJy8CkBV48Yd9FHfLVQSHJ630uw8icn128xjAPUOeWJVWfVA@mail.gmail.com>
On Thu, Nov 29, 2018 at 7:33 AM Duy Nguyen <pclouds@gmail.com> wrote:
>
> On Wed, Nov 28, 2018 at 9:30 PM Stefan Beller <sbeller@google.com> wrote:
> >
> > On Wed, Nov 28, 2018 at 12:09 PM Duy Nguyen <pclouds@gmail.com> wrote:
> > >
> > > On Wed, Nov 28, 2018 at 9:01 PM Duy Nguyen <pclouds@gmail.com> wrote:
> > > > should we do
> > > > something about detached HEAD in this switch-branch command (or
> > > > whatever its name will be)?
> > > >
> > > > This is usually a confusing concept to new users
> > >
> > > And it just occurred to me that perhaps we should call this "unnamed
> > > branch" (at least at high UI level) instead of detached HEAD. It is
> > > technically not as accurate, but much better to understand.
> >
> > or 'direct' branch?
>
> makes me think, what is an indirect branch?
I drew the term from HEAD pointing to a branch pointing
to a commit, i.e. HEAD indirectly points to a commit, but
in 'direct' branch mode, HEAD contains the commit id.
So indirect branch would work for our current 'real' branches.
When asked out of context of this discussion, I might add
yet another layer of abstraction to make an 'indirect branch',
i.e. HEAD pointing to a symbolic ref that points at a branch
that points to a commit.
The term symref is what we currently use
(Just looked into gitglossary, where we distinguish
symbolic refs from pseudorefs) for hat I would have called
an indirect branch as well.
So maybe we need to measure the level of indirection
("How often do we need to dereference the ref/object to get
a commit oid?") to come to terms in how to describe
the use cases easily.
Here is a fun-one:
git checkout <symbolic-ref>
git checkout --detach
Currently the --detach option detaches HEAD from
branch pointing at the object id, i.e. it is the same as
git checkout <oid>
whereas when we focus on the levels of indirection
it would also be reasonable to have
git checkout <branch>
as a reasonable alternative, where <branch> is the
branch that is pointed at from the <symbolic ref>.
^ permalink raw reply
* Re: [RFC 2/2] exclude-promisor-objects: declare when option is allowed
From: Matthew DeVore @ 2018-12-03 21:54 UTC (permalink / raw)
To: Jeff King; +Cc: Matthew DeVore, git, gitster, pclouds, jonathantanmy, jeffhost
In-Reply-To: <20181203211555.GA8700@sigill.intra.peff.net>
On 12/03/2018 01:15 PM, Jeff King wrote:
> That said, our C99 designated initializer weather-balloons haven't
> gotten any complaints yet. So I think you could actually do:
>
> struct setup_revision_opt s_r_opt = {
> .allow_exclude_promisor_objects = 1,
> };
I like this way best, so I'll use it. Thank you.
^ permalink raw reply
* Re: [PATCH 8/9] sha1-file: use loose object cache for quick existence check
From: Jeff King @ 2018-12-03 22:04 UTC (permalink / raw)
To: René Scharfe
Cc: Ævar Arnfjörð Bjarmason, Geert Jansen,
Junio C Hamano, git@vger.kernel.org, Takuto Ikuta
In-Reply-To: <221cb2e4-a024-e301-2b3f-e37dcd93795e@web.de>
On Sun, Dec 02, 2018 at 11:52:50AM +0100, René Scharfe wrote:
> > And for mu.git, a ~20k object repo:
> >
> > Test origin/master peff/jk/loose-cache avar/check-collisions-config
> > -------------------------------------------------------------------------------------------------------------------------
> > 0008.2: index-pack with 256*1 loose objects 0.59(0.91+0.06) 0.58(0.93+0.03) -1.7% 0.57(0.89+0.04) -3.4%
> > 0008.3: index-pack with 256*10 loose objects 0.59(0.91+0.07) 0.59(0.92+0.03) +0.0% 0.57(0.89+0.03) -3.4%
> > 0008.4: index-pack with 256*100 loose objects 0.59(0.91+0.05) 0.81(1.13+0.04) +37.3% 0.58(0.91+0.04) -1.7%
> > 0008.5: index-pack with 256*250 loose objects 0.59(0.91+0.05) 1.23(1.51+0.08) +108.5% 0.58(0.91+0.04) -1.7%
> > 0008.6: index-pack with 256*500 loose objects 0.59(0.90+0.06) 1.96(2.20+0.12) +232.2% 0.58(0.91+0.04) -1.7%
> > 0008.7: index-pack with 256*750 loose objects 0.59(0.92+0.05) 2.72(2.92+0.17) +361.0% 0.58(0.90+0.04) -1.7%
> > 0008.8: index-pack with 256*1000 loose objects 0.59(0.90+0.06) 3.50(3.67+0.21) +493.2% 0.57(0.90+0.04) -3.4%
>
> OK, here's another theory: The cache scales badly with increasing
> numbers of loose objects because it sorts the array 256 times as it is
> filled. Loading it fully and sorting once would help, as would using
> one array per subdirectory.
Yeah, that makes sense. This was actually how I had planned to do it
originally, but then I ended up just reusing the existing single-array
approach from the abbrev code.
I hadn't actually thought about the repeated sortings (but that
definitely makes sense that they would hurt in these pathological
cases), but more just that we get a 256x reduction in N for our binary
search (in fact we already do this first-byte lookup-table trick for
pack index lookups).
Your patch looks good to me. We may want to do one thing on top:
> diff --git a/object-store.h b/object-store.h
> index 8dceed0f31..ee67a50980 100644
> --- a/object-store.h
> +++ b/object-store.h
> @@ -20,7 +20,7 @@ struct object_directory {
> * Be sure to call odb_load_loose_cache() before using.
> */
> char loose_objects_subdir_seen[256];
> - struct oid_array loose_objects_cache;
> + struct oid_array loose_objects_cache[256];
The comment in the context there is warning callers to remember to load
the cache first. Now that we have individual caches, might it make sense
to change the interface a bit, and make these members private. I.e.,
something like:
struct oid_array *odb_loose_cache(struct object_directory *odb,
int subdir_nr)
{
if (!loose_objects_subdir_seen[subdir_nr])
odb_load_loose_cache(odb, subdir_nr); /* or just inline it here */
return &odb->loose_objects_cache[subdir_nr];
}
That's harder to get wrong, and this:
> diff --git a/sha1-file.c b/sha1-file.c
> index 05f63dfd4e..d2f5e65865 100644
> --- a/sha1-file.c
> +++ b/sha1-file.c
> @@ -933,7 +933,8 @@ static int quick_has_loose(struct repository *r,
> prepare_alt_odb(r);
> for (odb = r->objects->odb; odb; odb = odb->next) {
> odb_load_loose_cache(odb, subdir_nr);
> - if (oid_array_lookup(&odb->loose_objects_cache, &oid) >= 0)
> + if (oid_array_lookup(&odb->loose_objects_cache[subdir_nr],
> + &oid) >= 0)
> return 1;
> }
becomes:
struct oid_array *cache = odb_loose_cache(odb, subdir_nr);
if (oid_array_lookup(cache, &oid))
return 1;
(An even simpler interface would be a single function that computes
subdir_nr and does the lookup itself, but that would not be enough for
find_short_object_filename()).
-Peff
^ permalink raw reply
* Re: [PATCH] revisions.c: put promisor option in specialized struct
From: Matthew DeVore @ 2018-12-03 22:01 UTC (permalink / raw)
To: Jeff King, Matthew DeVore; +Cc: git, gitster, pclouds, jonathantanmy, jeffhost
In-Reply-To: <20181203212431.GB8700@sigill.intra.peff.net>
On 12/03/2018 01:24 PM, Jeff King wrote:
>> @@ -297,7 +296,8 @@ struct setup_revision_opt {
>> const char *def;
>> void (*tweak)(struct rev_info *, struct setup_revision_opt *);
>> const char *submodule; /* TODO: drop this and use rev_info->repo */
>> - int assume_dashdash;
>> + int assume_dashdash : 1;
>> + int allow_exclude_promisor_objects : 1;
>> unsigned revarg_opt;
>> };
>
> I don't know that we need to penny-pinch bytes in this struct, but in
> general it shouldn't hurt either awy. However, a signed bit-field with 1
> bit is funny. I'm not even sure what the standard has to say, but in
> twos-complement that would store "-1" and "0" (gcc -Wpedantic also
> complains about overflow in assigning "1" to it).
Interesting. I hadn't suspected this. But I confirmed it with this:
#include <stdio.h>
struct x {
int y : 1;
int z : 1;
};
int main() {
struct x x;
x.y = 1;
x.z = 1;
printf("%d %d\n", (int) x.y, (int) x.z);
return 0;
}
-- Output --
-1 -1
>
> So this probably ought to be "unsigned".
Earlier in this file we define bit fields this way:
/* Traversal flags */
unsigned int dense:1,
prune:1,
... using \t to align the field names, so I'll mimic that style.
^ permalink raw reply
page: next (older) | prev (newer) | latest
- recent:[subjects (threaded)|topics (new)|topics (active)]
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox