git@vger.kernel.org mailing list mirror (one of many)
 help / color / mirror / code / Atom feed
Search results ordered by [date|relevance]  view[summary|nested|Atom feed]
thread overview below | download mbox.gz: |
* What's cooking in git.git (Nov 2015, #01; Thu, 5)
@ 2015-11-05 23:13  2% Junio C Hamano
  0 siblings, 0 replies; 200+ results
From: Junio C Hamano @ 2015-11-05 23:13 UTC (permalink / raw)
  To: git

Here are the topics that have been cooking.  Commits prefixed with
'-' are only in 'pu' (proposed updates) while commits prefixed with
'+' are in 'next'.

Git 2.6.3 has been tagged, with accumulated fixes and minor updates
that are already in 'master'.  We have about 5 weeks left til -rc0
so hopefully a handful of topics that are not yet in 'next' but have
already been reviewed and polished may be able to be merged to
'next', cook in there for a while and be in 2.7.0 release.  I'll be
offline for a few weeks starting this weekend, but I am confident
that our capable interim maintainer can shepherd these topics
forward with the help from our contributors ;-).

You can find the changes described here in the integration branches
of the repositories listed at

    http://git-blame.blogspot.com/p/git-public-repositories.html

--------------------------------------------------
[Graduated to "master"]

* da/difftool (2015-10-29) 1 commit
  (merged to 'next' on 2015-11-01 at 4e5ab33)
 + difftool: ignore symbolic links in use_wt_file

 The code to prepare the working tree side of temporary directory
 for the "dir-diff" feature forgot that symbolic links need not be
 copied (or symlinked) to the temporary area, as the code already
 special cases and overwrites them.  Besides, it was wrong to try
 computing the object name of the target of symbolic link, which may
 not even exist or may be a directory.


* jc/mailinfo-lib (2015-11-01) 1 commit
  (merged to 'next' on 2015-11-01 at 3ecaa28)
 + mailinfo: fix passing wrong address to git_mailinfo_config

 Hotfix for a topic already in 'master'.


* jk/initialization-fix-to-add-submodule-odb (2015-10-28) 1 commit
  (merged to 'next' on 2015-11-01 at da94b97)
 + add_submodule_odb: initialize alt_odb list earlier

 We peek objects from submodule's object store by linking it to the
 list of alternate object databases, but the code to do so forgot to
 correctly initialize the list.


* js/git-gdb (2015-10-30) 1 commit
  (merged to 'next' on 2015-11-01 at 3d232d5)
 + test: facilitate debugging Git executables in tests with gdb

 Allow easier debugging of a single "git" invocation in our test
 scripts.


* kn/for-each-branch (2015-10-30) 1 commit
  (merged to 'next' on 2015-11-01 at 4249dc9)
 + ref-filter: fallback on alphabetical comparison

 Using the timestamp based criteria in "git branch --sort" did not
 tiebreak branches that point at commits with the same timestamp (or
 the same commit), making the resulting output unstable.


* mk/blame-first-parent (2015-10-30) 3 commits
  (merged to 'next' on 2015-11-01 at 3f87150)
 + blame: allow blame --reverse --first-parent when it makes sense
 + blame: extract find_single_final
 + blame: test to describe use of blame --reverse --first-parent

 "git blame" learnt to take "--first-parent" and "--reverse" at the
 same time when it makes sense.


* rs/daemon-plug-child-leak (2015-11-02) 2 commits
  (merged to 'next' on 2015-11-02 at 64afbb9)
 + daemon: plug memory leak
 + run-command: factor out child_process_clear()
 (this branch is used by sb/submodule-parallel-update.)

 "git daemon" uses "run_command()" without "finish_command()", so it
 needs to release resources itself, which it forgot to do.


* rs/show-branch-argv-array (2015-11-01) 1 commit
  (merged to 'next' on 2015-11-01 at fac4fa6)
 + show-branch: use argv_array for default arguments

 Code simplification.


* rs/wt-status-detached-branch-fix (2015-11-01) 5 commits
  (merged to 'next' on 2015-11-01 at cb23615)
 + wt-status: use skip_prefix() to get rid of magic string length constants
 + wt-status: don't skip a magical number of characters blindly
 + wt-status: avoid building bogus branch name with detached HEAD
 + wt-status: exit early using goto in wt_shortstatus_print_tracking()
 + t7060: add test for status --branch on a detached HEAD

 "git status --branch --short" accessed beyond the constant string
 "HEAD", which has been corrected.

--------------------------------------------------
[New Topics]

* ad/sha1-update-chunked (2015-11-05) 2 commits
 - sha1: allow limiting the size of the data passed to SHA1_Update()
 - sha1: provide another level of indirection for the SHA-1 functions

 Apple's common crypto implementation of SHA1_Update() does not take
 more than 4GB at a time, and we now have a compile-time workaround
 for it.

 I think this is more or less ready.  I am skeptical about the file
 location reorg ([PATCH 3/3] $gmane/280912) and did not queue it.


* dt/http-range (2015-11-02) 2 commits
  (merged to 'next' on 2015-11-03 at 7c3cc60)
 + http: use off_t to store partial file size
 + http.c: use CURLOPT_RANGE for range requests

 A Range: request can be responded with a full response and when
 asked properly libcurl knows how to strip the result down to the
 requested range.  However, we were hand-crafting a range request
 and it did not kick in.

 Will merge to 'master'.


* vl/grep-configurable-threads (2015-11-01) 1 commit
 - grep: add --threads=<num> option and grep.threads configuration

 "git grep" can now be configured (or told from the command line)
 how many threads to use when searching in the working tree files.

 Expecting a reroll.
 ($gmane/280854)


* kf/http-proxy-auth-methods (2015-11-04) 3 commits
 - SQUASH???
 - http: use credential API to handle proxy authentication
 - http: allow selection of proxy authentication method

 New http.proxyAuthMethod configuration variable can be used to
 specify what authentication method to use, as a way to work around
 proxies that do not give error response expected by libcurl when
 CURLAUTH_ANY is used.  Also, the codepath for proxy authentication
 has been taught to use credential API to store the authentication
 material in user's keyrings.

 Still being worked on.
 ($gmane/280925).


* lf/ref-is-hidden-namespace (2015-11-05) 4 commits
 - t5509: add basic tests for hideRefs
 - hideRefs: add support for matching full refs
 - upload-pack: strip refs before calling ref_is_hidden()
 - config.txt: document the semantics of hideRefs with namespaces

 Extend transfer.hideRefs to work better with use of namespaces.

 Will merge to 'next'.


* dg/git-svn-empty-dirs (2015-11-05) 1 commit
 - git-svn: improve rebase/mkdirs performance


* fp/subtree-todo-update (2015-11-05) 1 commit
 - contrib/subtree: remove "push" command from the "todo" file

--------------------------------------------------
[Stalled]

* nd/ita-cleanup (2015-09-06) 6 commits
 - grep: make it clear i-t-a entries are ignored
 - checkout(-index): do not checkout i-t-a entries
 - apply: make sure check_preimage() does not leave empty file on error
 - apply: fix adding new files on i-t-a entries
 - add and use a convenience macro ce_intent_to_add()
 - blame: remove obsolete comment

 Paths that have been told the index about with "add -N" are not yet
 in the index, but various commands behaved as if they already are.

 Some commits need better explanation.

 Waiting for a reroll.


* ld/p4-detached-head (2015-09-09) 2 commits
 - git-p4: work with a detached head
 - git-p4: add failing test for submit from detached head

 Will be rerolled.
 ($gmane/277574)


* mg/httpd-tests-update-for-apache-2.4 (2015-04-08) 2 commits
 - t/lib-git-svn: check same httpd module dirs as lib-httpd
 - t/lib-httpd: load mod_unixd

 This is the first two commits in a three-patch series $gmane/266962

 Becoming tired of waiting for a reroll.
 with updated log message ($gmane/268061).


* wp/sha1-name-negative-match (2015-06-08) 2 commits
 - sha1_name.c: introduce '^{/!-<negative pattern>}' notation
 - test for '!' handling in rev-parse's named commits

 Introduce "branch^{/!-<pattern>}" notation to name a commit
 reachable from branch that does not match the given pattern.

 Becoming tired of waiting for a reroll.
 ($gmane/271213).


* ak/format-patch-odir-config (2015-06-19) 1 commit
 - format-patch: introduce format.outputDirectory configuration

 Reroll exists but didn't pick it up as it seemed to be still
 collecting review comments.

 Becoming tired of waiting for a reroll.
 ($gmane/272180).


* jc/diff-b-m (2015-02-23) 5 commits
 . WIPWIP
 . WIP: diff-b-m
 - diffcore-rename: allow easier debugging
 - diffcore-rename.c: add locate_rename_src()
 - diffcore-break: allow debugging

 "git diff -B -M" produced incorrect patch when the postimage of a
 completely rewritten file is similar to the preimage of a removed
 file; such a resulting file must not be expressed as a rename from
 other place.

 The fix in this patch is broken, unfortunately.

--------------------------------------------------
[Cooking]

* dk/gc-idx-wo-pack (2015-11-04) 3 commits
 - gc: remove garbage .idx files from pack dir
 - t5304: test cleaning pack garbage
 - prepare_packed_git(): refactor garbage reporting in pack directory

 Having a leftover .idx file without corresponding .pack file in
 the repository hurts performance; "git gc" learned to prune them.

 We may want to do the same for .bitmap (and notice but not prune
 .keep) without corresponding .pack, but that can be a separate
 topic.

 Will merge to 'next'.


* sb/submodule-parallel-update (2015-11-05) 10 commits
 - clone: allow an explicit argument for parallel submodule clones
 - submodule update: expose parallelism to the user
 - git submodule update: have a dedicated helper for cloning
 - fetching submodules: respect `submodule.jobs` config option
 - submodule config: update parse_config()
 - submodule config: remove name_and_item_from_var
 - submodule config: keep update strategy around
 - run_processes_parallel: add output to tracing messages
 - Merge branch 'rs/daemon-plug-child-leak' into sb/submodule-parallel-update
 - Merge branch 'sb/submodule-parallel-fetch' into sb/submodule-parallel-update
 (this branch uses sb/submodule-parallel-fetch; is tangled with rs/daemon-leak-fix.)

 Builds on top of the "fetch --recurse-submodules" work to introduce
 parallel downloading into multiple submodules for "submodule update".

 Waiting for sb/submodule-parallel-fetch to stabilize.

 It would be the cleanest to rebuild sb/submodule-parallel-fetch on
 top of 2.7.0 once it ships and then build this directly on top;
 that way, we do not have to have merges in this topic that
 distracting (besides, some part of the other topic can be updated
 in-place instead of this follow-up topic tweaking them as past
 mistakes and inflexibilities).


* jc/strbuf-gets (2015-10-28) 17 commits
 - test-sha1-array: read command stream with strbuf_gets()
 - grep: read -f file with strbuf_gets()
 - send-pack: read list of refs with strbuf_gets()
 - column: read lines with strbuf_gets()
 - cat-file: read batch stream with strbuf_gets()
 - transport-helper: read helper response with strbuf_gets()
 - clone/sha1_file: read info/alternates with strbuf_gets()
 - remote.c: read $GIT_DIR/remotes/* with strbuf_gets()
 - ident.c: read /etc/mailname with strbuf_gets()
 - rev-parse: read parseopt spec with strbuf_gets()
 - revision: read --stdin with strbuf_gets()
 - hash-object: read --stdin-paths with strbuf_gets()
 - mktree: read textual tree representation with strbuf_gets()
 - update-index: read list of paths with strbuf_gets() under --stdin
 - update-index: read --index-info with strbuf_gets()
 - check-attr, check-ignore, checkout-index: read paths with strbuf_gets()
 - strbuf: add strbuf_gets()

 Teach codepaths that communicate with users by reading text files
 to be more lenient to editors that write CRLF-terminated lines.
 Note that this is only about communication with Git, like feeding
 list of object names from the standard input instead of from the
 command line, and does not involve files in the working tree.

 Waiting for reviews.


* eg/p4-submit-catch-failure (2015-10-30) 1 commit
 - git-p4: clean up after p4 submit failure

 Just like the working tree is cleaned up when the user cancelled
 submission in P4Submit.applyCommit(), clean up the mess if "p4
 submit" fails.

 Needs an update to test.
 ($gmane/280539)


* ep/ident-with-getaddrinfo (2015-10-30) 1 commit
 - (NEEDSWORK $gmane/280507) ident.c: add support for IPv6

 A build without NO_IPv6 used to use gethostbyname() when guessing
 user's hostname, instead of getaddrinfo() that is used in other
 codepaths in such a build.

 Waiting for a reroll.
 ($gmane/280507)


* ea/checkout-progress (2015-11-01) 1 commit
  (merged to 'next' on 2015-11-03 at 08a8d1f)
 + checkout: add --progress option

 "git checkout" did not follow the usual "--[no-]progress"
 convention and implemented only "--quiet" that is essentially
 a superset of "--no-progress".  Extend the command to support the
 usual "--[no-]progress".

 Will merge to 'master'.


* jc/test-must-fail-with-sigpipe (2015-10-30) 1 commit
 - test: accept death by SIGPIPE as a valid failure mode

 In some tests we expect a git command that transfers objects to
 result in failure, but it is normal for the failure to come from
 SIGPIPE when the other end of the connection detects an (expected)
 error and hangs up.  However, test_expect_failure helper function
 was not prepared to see a death by sigpipe as a normal failure
 exit.

 It probably is more sensible to limit the test that allows depth by
 SIGPIPE as Lars Schneider suggests, so it is likely that this will
 be replaced while I am away ;-)


* pt/http-socks-proxy (2015-10-26) 1 commit
 - remote-http(s): support SOCKS proxies

 Add support for talking http/https over socks proxy.
 Needs a sign-off from the original author.


* mh/notes-allow-reading-treeish (2015-10-08) 3 commits
  (merged to 'next' on 2015-10-23 at 8a697f0)
 + notes: allow treeish expressions as notes ref
 + Merge branch 'jk/notes-dwim-doc' into next
 + Merge branch 'jc/merge-drop-old-syntax' into next
 (this branch uses jc/merge-drop-old-syntax.)

 Some "git notes" operations, e.g. "git log --notes=<note>", should
 be able to read notes from any tree-ish that is shaped like a notes
 tree, but the notes infrastructure required that the argument must
 be a ref under refs/notes/.  Loosen it to require a valid ref only
 when the operation would update the notes (in which case we must
 have a place to store the updated notes tree, iow, a ref).

 As the patch was done on top of the 'drop old-syntax from merge',
 this has to wait until that other topic can graduate, unfortunately.
 It can be redone in a way that does not depend on that topic after
 this cycle, though.

 Will keep in 'next'.


* jc/mailinfo (2015-10-21) 1 commit
 - mailinfo: ignore in-body header that we do not care about

 Some people write arbitrary garbage at the beginning of a piece of
 e-mail (or after -- >8 -- scissors -- >8 -- line) in the commit log
 message and expect them to be discarded, even though "From:" and
 "Subject:" are the only documented in-body headers that you are
 supposed to have there.  Allow some garbage (specifically, what may
 look like RFC2822 headers like "MIME-Version: ...") to be there and
 ignore them.

 I have a feeling that that this is a step in a wrong direction.
 Comments?


* js/am-3-merge-recursive-direct (2015-10-12) 2 commits
  (merged to 'next' on 2015-10-23 at dc631e5)
 + am: make a direct call to merge_recursive
 + merge_recursive_options: introduce the "gently" flag

 The merge_recursive_generic() function has been made a bit safer to
 call from inside a process.  "git am -3" was taught to make a direct
 call to the function when falling back to three-way merge.

 Being able to make a direct call would be good in general, but as a
 performance thing, we would want to see it backed up by numbers.

 I haven't gone through the "gently" change with fine toothed comb;
 I can see that the change avoids calling die(), but I haven't made
 sure that the program states (e.g. what's in the in-core index) are
 adjusted sensibly when it returns to the caller instead of dying,
 or the codepaths that used to die() are free of resource leaks.
 The original code certainly did not care the program states at the
 point of dying exactly because it knew it is going to exit, but now
 they have to care, and they need to be audited.

 Will keep in 'next'.


* sg/pretty-more-date-mode-format (2015-10-07) 1 commit
 - pretty: add format specifiers for short and raw date formats

 Introduce "%as" and "%aR" placeholders for "log --format" to show
 the author date in the short and raw formats.

 I have a feeling that that this is a step in a wrong direction.
 Comments?


* kn/for-each-branch-remainder (2015-10-02) 9 commits
 - branch: implement '--format' option
 - branch: use ref-filter printing APIs
 - ref-filter: make %(upstream:track) prints "[gone]" for invalid upstreams
 - ref-filter: introduce format_ref_array_item()
 - ref-filter: adopt get_head_description() from branch.c
 - ref-filter: modify "%(objectname:short)" to take length
 - ref-filter: add support for %(path) atom
 - ref-filter: implement %(if:equals=<string>) and %(if:notequals=<string>)
 - ref-filter: implement %(if), %(then), and %(else) atoms

 More unification among "branch -l", "tag -l" and "for-each-ref --format".

 Expecting a reroll.
 ($gmane/278926)


* jk/graph-format-padding (2015-09-14) 1 commit
 - pretty: pass graph width to pretty formatting for use in '%>|(N)'

 Redefine the way '%>|(N)' padding and the "--graph" option
 interacts.  It has been that the available columns to display the
 log message was measured from the edge of the area the graph ended,
 but with this it becomes the beginning of the entire output.

 I have a suspicion that 50% of the users would appreciate this
 change, and the remainder see this break their expectation.  If
 that is the case, we might need to introduce a similar but
 different alignment operator so that this new behaviour is
 available to those who want to use it, without negatively affecting
 existing uses.

 Undecided.
 ($gmane/278326)


* sb/submodule-parallel-fetch (2015-11-05) 16 commits
 - strbuf: update documentation for strbuf_read_once()
 - run-command: remove set_nonblocking()
  (merged to 'next' on 2015-10-23 at 8f04bbd)
 + run-command: fix missing output from late callbacks
 + test-run-command: increase test coverage
 + test-run-command: test for gracefully aborting
 + run-command: initialize the shutdown flag
 + run-command: clear leftover state from child_process structure
 + run-command: fix early shutdown
  (merged to 'next' on 2015-10-15 at df63590)
 + submodules: allow parallel fetching, add tests and documentation
 + fetch_populated_submodules: use new parallel job processing
 + run-command: add an asynchronous parallel child processor
 + sigchain: add command to pop all common signals
 + strbuf: add strbuf_read_once to read without blocking
 + xread_nonblock: add functionality to read from fds without blocking
 + xread: poll on non blocking fds
 + submodule.c: write "Fetching submodule <foo>" to stderr
 (this branch is used by sb/submodule-parallel-update; is tangled with rs/daemon-leak-fix.)

 Add a framework to spawn a group of processes in parallel, and use
 it to run "git fetch --recurse-submodules" in parallel.

 Still being worked on, but it seems that we are seeing light at the
 end of the tunnel.
 ($gmane/280937)


* ad/cygwin-wants-rename (2015-08-07) 1 commit
 - config.mak.uname: Cygwin needs OBJECT_CREATION_USES_RENAMES

 Will hold.
 ($gmane/275680).


* jc/rerere-multi (2015-09-14) 7 commits
 - rerere: do use multiple variants
 - t4200: rerere a merge with two identical conflicts
 - rerere: allow multiple variants to exist
 - rerere: delay the recording of preimage
 - rerere: handle leftover rr-cache/$ID directory and postimage files
 - rerere: scan $GIT_DIR/rr-cache/$ID when instantiating a rerere_id
 - rerere: split conflict ID further

 "git rerere" can encounter two or more files with the same conflict
 signature that have to be resolved in different ways, but there was
 no way to record these separate resolutions.


* jc/merge-drop-old-syntax (2015-04-29) 1 commit
  (merged to 'next' on 2015-10-07 at 50fed71)
 + merge: drop 'git merge <message> HEAD <commit>' syntax
 (this branch is used by mh/notes-allow-reading-treeish.)

 Originally merged to 'next' on 2015-05-28

 Stop supporting "git merge <message> HEAD <commit>" syntax that has
 been deprecated since October 2007.  It has been reported that
 git-gui still uses the deprecated syntax, which needs to be fixed
 before this final step can proceed.

 Will keep in 'next'.

--------------------------------------------------
[Discarded]

* km/cache-entry-refcnt (2015-10-14) 1 commit
 . merge: fix cache_entry use-after-free

 Made unnecessary with dt/name-hash-dir-entry-fix topic.


* rs/daemon-leak-fix (2015-10-31) 3 commits
  (merged to 'next' on 2015-11-01 at 9b6c8f9)
 + daemon: plug memory leak
 + run-command: export child_process_clear()
 + run-command: name the cleanup function child_process_clear()
 (this branch uses sb/submodule-parallel-fetch; is tangled with sb/submodule-parallel-update.)

 "git daemon" uses "run_command()" without "finish_command()", so it
 needs to release resources itself, which it forgot to do.

 This was tangled with another topic that was not quite ready.
 Discard and replace it with an equivalent rs/daemon-plug-child-leak
 that is independent.


* dt/refs-backend-pre-vtable (2015-10-15) 26 commits
 . refs: break out ref conflict checks
 . refs: make files_log_ref_write functions public
 . initdb: move safe_create_dir into common code
 . refs.c: move should_autocreate_reflog to common code
 . refs.c: move peel_object to the common code
 . refs.c: move copy_msg to the common code
 . refs.c: move refname_is_safe to the common code
 . refs: move transaction functions into common code
 . refs.c: move head_ref_namespaced to the common code
 . refs.c: move ref iterators to the common code
 . refs.c: move prettify_refname to the common code
 . refs.c: move is_branch to the common code
 . refs.c: move check_refname_format to the common code
 . refs.c: move resolve_refdup to common
 . refs.c: move read_ref, read_ref_full and ref_exists to the common code
 . refs.c: move warn_if_dangling_symref* to the common code
 . refs.c: move dwim and friend functions to the common refs code
 . refs.c: move the hidden refs functions to the common code
 . refs.c: move read_ref_at to the common refs file
 . refs.c: move delete_pseudoref and delete_ref to the common code
 . refs.c: move update_ref to refs.c
 . refs.c: add a new refs.c file to hold all common refs code
 . refs-be-files.c: rename refs to refs-be-files
 . refs: make repack_without_refs and is_branch public
 . refs.c: create a public version of verify_refname_available
 . Merge branch 'jk/war-on-sprintf' into HEAD

 The early part of the pluggable ref backend series, which sifts the
 ref API functions into two bins: the filesystem backend specific
 ones and the generic API functions.  The next step will start
 introducing the framework to dispatch generic calls to specific
 backend implementation(s) and then finally plug a new backend that
 is different from the file backend.

 It seems Michael's "I'd do it like this if I were doing it"
 $gmane/280754 would be the way forward?

 Ejected while the topic is in flux, as this and its later reroll
 both want to move things around while other topics want to update
 the files involved.

^ permalink raw reply	[relevance 2%]

* Re: [PATCH v6 25/25] refs: break out ref conflict checks
  @ 2015-11-06 23:24  2%             ` Junio C Hamano
  0 siblings, 0 replies; 200+ results
From: Junio C Hamano @ 2015-11-06 23:24 UTC (permalink / raw)
  To: Michael Haggerty; +Cc: David Turner, git, Jeff King

Junio C Hamano <gitster@pobox.com> writes:

> Michael Haggerty <mhagger@alum.mit.edu> writes:
>
>> Junio, if there are no more comments, would you mind
>>
>>     s/verify_no_descendants/find_descendant_ref/
>>
>> in the log message of this commit? And then, if you are also OK with the
>> new subdirectory introduced in this patch series, David and I seem to be
>> in agreement that it is ready to go. It would be great if this patch
>> series could be merged in a timely manner, as it will conflict with
>> nearly any other changes that people might want to undertake in the refs
>> code.
>
> Thanks for working well together.  Let me see what I can do today...

What I'll push out later today merges this to the tip of 'pu'.
The resolution is the same for 'jch' or 'next' (I checked).

I have to say that the merge of this topioc is not pretty.  A topic
that is already in flight has changed ref_is_hidden() in refs.c; you
move this block of code first to refs/refs-backend.c and then to
refs/refs.c, and the recursive merge ends up saying "The trunk side
changed this block of code in refs/refs-backend.c while the side
branch removed that block".

The resolution has to become an evil merge that brings in a new file
refs/refs.c from the tip of your topic to the trunk while replaying
that change in the lost block to that new file.  Because an
in-flight topic like this one needs to be merged over and over until
it gets merged to 'master' I'd prepare an evil merge-fix to be
squashed into the result of an auto-merge to help this process for
the interim maintainer, but this topic is placing more burden than
it otherwise would to the entire process.

Incidentally, that was why I originally asked you if you want to be
an interim maintainer for this cycle.  Whoever is doing a large code
movement with a large patch series must be the one who would know
the best how its interaction with other topics is best managed.

I wonder if refs.c -> refs/refs.c rename is a good idea.  I do agree
that refs/ subdirectory that collects the backend implementation
details is a very sensible thing to do, but if the public and
generic API were left in refs.c, this particular conflict might have
been less severe and easier to handle.  Whatever.

For those who are listening in from sideline, in case when they need
to deal with a similar situation "the code our side changed gets
moved to elsewhere by a side branch", here is what I did:

 * let "git merge --conflict=diff3" attempt and fail.

 * a conflicted file will have something like this:

    <<<< ours
    ... the code with changes made by our side (trunk) ...
    |||| base
    ... the code before our side (trunk) made the above changes ...
    ====
    >>>> theirs

 * create two new files, OURS and BASE.  Save the part in that
   conflicted file between <<<< and |||| to OURS, and between ||||
   and ==== to BASE.

 * look at "diff -u BASE OURS", find in the (failed) automerge
   result where the original went (a sample of it is at the end of
   this message), and apply that change manually.

The above is only to resolve this conflict *once*.

Automating future merges of this branch into a slightly updated
codebase needs help from rerere and also merge-fix/ machinery (this
is not in core-git proper, but the tool is in the 'todo' branch and
its use is described in howto/maintain-git.txt).

Essentially the procedure were:

 * "git checkout pu^0"

 * let "git merge --conflict=diff3" attempt and fail.

 * accept removal of the conflicted block in refs/files-backend.c in
   the editor, do "git rerere" to record it.  commit the result.

 * apply the above diff between BASE and OURS, commit the result.

 * git update-ref refs/merge-fix/dt/refs-backend-pre-vtable HEAD

With this, the Reintegrate script (on 'todo', checked out in "Meta/"
subdirectory) will be able to reproduce the evil merge, e.g.

 $ git checkout pu
 $ echo dt/refs-backend-pre-vtable | Meta/Reintegrate

would first let "git rerere" replay the removal of conflicted block
in refs/files-backend.c and then amend the result by squashing the
change in merge-fix/dt/refs-backend-pre-vtable.


--- V_BASE	2015-11-06 14:51:10.150197900 -0800
+++ V_OURS	2015-11-06 14:51:05.638059250 -0800
@@ -117,7 +117,7 @@
 	return 0;
 }
 
-int ref_is_hidden(const char *refname)
+int ref_is_hidden(const char *refname, const char *refname_full)
 {
 	int i;
 
@@ -125,6 +125,7 @@
 		return 0;
 	for (i = hide_refs->nr - 1; i >= 0; i--) {
 		const char *match = hide_refs->items[i].string;
+		const char *subject;
 		int neg = 0;
 		int len;
 
@@ -133,10 +134,18 @@
 			match++;
 		}
 
-		if (!starts_with(refname, match))
+		if (*match == '^') {
+			subject = refname_full;
+			match++;
+		} else {
+			subject = refname;
+		}
+
+		/* refname can be NULL when namespaces are used. */
+		if (!subject || !starts_with(subject, match))
 			continue;
 		len = strlen(match);
-		if (!refname[len] || refname[len] == '/')
+		if (!subject[len] || subject[len] == '/')
 			return !neg;
 	}
 	return 0;

^ permalink raw reply	[relevance 2%]

* Re: What's cooking in git.git (Nov 2015, #04; Tue, 24)
  @ 2015-12-01 23:10  2%       ` Jeff King
  0 siblings, 0 replies; 200+ results
From: Jeff King @ 2015-12-01 23:10 UTC (permalink / raw)
  To: brian m. carlson, git

On Sat, Nov 28, 2015 at 05:09:32PM +0000, brian m. carlson wrote:

> > I got a bunch of conflicts trying to merge it into 'next' and 'pu' and
> > punted on it. I think the tricky bits are coming from
> > dt/refs-backend-pre-vtable, where there was a lot of code movement.
> 
> I think as for merging into the latest pu, the thing you want to do in
> refs.c is simply take what pu has.  You'll have to fix up one additional
> struct object call site.  The same thing goes for builtin/merge.c and
> builtin/branch.c, where the code I changed has since been eliminated.
> 
> I also noticed that merge-recursive.c and builtin/ff-refs.c needed some
> minor fixups as well, but a quick compile will show you where those are.
> I've included a diff for those two below.

Thanks, this gave me an opportunity to play with Junio's merge-fix
scripts. :) The result will be in the "pu" I push out shortly.

-Peff

^ permalink raw reply	[relevance 2%]

* Re: What's cooking in git.git (Dec 2015, #01; Tue, 1)
  @ 2015-12-02 22:11  2% ` Junio C Hamano
  2015-12-02 22:31  3%   ` Jeff King
  2015-12-03  0:29  0%   ` David Turner
  0 siblings, 2 replies; 200+ results
From: Junio C Hamano @ 2015-12-02 22:11 UTC (permalink / raw)
  To: Jeff King; +Cc: git

Jeff King <peff@peff.net> writes:

> What's cooking in git.git (Dec 2015, #01; Tue, 1)
> --------------------------------------------------
>
> Here are the topics that have been cooking.  Commits prefixed with
> '-' are only in 'pu' (proposed updates) while commits prefixed with
> '+' are in 'next'.
>
> This should by my final whats-cooking before handing things back to
> Junio. Thanks all for review help and for your patience during the past
> few weeks.

I think I managed to get my working area (together with a handful of
new entries in the rerere database and a few merge-fix/ entries) in
sync with what you pushed out well enough that my automated
procedure would recreate the status of various branches you pushed
out exactly.

I haven't caught up with the changes in the component branches,
though, so it may take a few days until I start picking up new
topics from the list traffic.

> * bc/object-id (2015-11-20) 12 commits
>  - remote: convert functions to struct object_id
>  - Remove get_object_hash.
>  - Convert struct object to object_id
>  - Add several uses of get_object_hash.
>  - object: introduce get_object_hash macro.
>  - ref_newer: convert to use struct object_id
>  - push_refs_with_export: convert to struct object_id
>  - get_remote_heads: convert to struct object_id
>  - parse_fetch: convert to use struct object_id
>  - add_sought_entry_mem: convert to struct object_id
>  - Convert struct ref to use object_id.
>  - sha1_file: introduce has_object_file helper.
>
>  More transition from "unsigned char[40]" to "struct object_id".
>
>  This needed a few merge fixups, but is mostly disentangled from other
>  topics.
>
>  Will merge to 'next'.

Aside from niggles on titles of a handful of changes in this topic,
I have a bit of concern with this one and dt/refs-backend-pre-vtable
topic (marked as "Will merge to 'master' two cycles from now.",
which I am reading as "two cycles" means 2 x (8-10 week release
cycle), not "two integration cycles by the maintainer, aka two
issues of What's cooking report", which is typically less than a
week).

The merge resolution in 'pu' discards what this topic did to refs.c
because much of the original goes away from there, but does it mean
(remember, I haven't caught up with the contents of the topics yet)
that the merge reverts part of what this topic did, and in an ideal
world, if the other one were more mature when this topic got
started, more use of "unsigned char[40]" would have been migrated to
"struct object_id" in new files the other one introduced?  Or
perhaps we would want to go the other way around, i.e. as this topic
conceptually is fairly straight-forward, merge this to 'next' and
then down to 'master' (which would not take two release cycles) and
then redo the other topic on top?

> * mr/ff-refs (2015-11-28) 6 commits
>  - builtin/ff-refs.c: mark some file-local variables static
>  - ff-refs: Add tests
>  - ff-refs: Add documentation
>  - ff-refs: add --dry-run and --skip-worktree options
>  - ff-refs: update each updatable ref
>  - ff-refs: builtin cmd to check and fast forward local refs to their upstream
>
>  Specialized command to fast-forward refs to match their upstream.
>
>  I remain skeptical that this is necessary or sufficient. Comments
>  welcome.
>
>  Will hold.

This is another one that needs some evil-merge interaction with
bc/object-id, but I have a feeling that this is not such a good
addition to our workflow elements, so I am not worried too much
about it.  I'm inclined to eject this topic (and will welcome if
people come up with an alternative, perhaps based on the "let fetch
do so instead" approach discussed there).

> * ps/rebase-keep-empty (2015-11-24) 2 commits
>  - rebase: fix preserving commits with --keep-empty
>  - rebase: test broken behavior with --keep-empty
>
>  Keep duplicate commits via rebase --keep-empty.
>
>  I'm not sure if I agree with this interpretation of the "rebase
>  --keep-empty" documentation, but I haven't thought too hard about it.
>  Comments welcome.

"--keep-empty" has always been about keeping an originally empty
commit, not a commit that becomes empty because of rebasing
(i.e. what has already been applied to the updated base).  The
documentation, if it leads to any other interpretation, needs to be
fixed.

Besides, if "--keep-empty" were to mean "keep redundant ones that
are already in the updated base", the patch must do a lot more,
e.g. stop filtering with git-cherry patch equivalence.

I'm inclined to eject this topic.


> * ls/test-must-fail-sigpipe (2015-11-28) 2 commits
>   (merged to 'next' on 2015-12-01 at d374686)
>  + add "ok=sigpipe" to test_must_fail and use it to fix flaky tests
>  + implement test_might_fail using a refactored test_must_fail
>
>  Fix some racy client/server tests by treating SIGPIPE the same as a
>  normal non-zero exit.
>
>  Will merge to 'master' two cycles from now.

Hmm, perhaps I misread what you meant by "two cycles", as this is
only the test suite and I cannot imagine we would want to be
ultra-safe to cook that for two release cycles, and you did mean two
issues of "What's cooking" report?

If so, I'll have to rethink the comment on bc/object-id I made
earlier...

> * dt/refs-backend-pre-vtable (2015-11-20) 10 commits
>   (merged to 'next' on 2015-11-24 at 8fd7293)
>  + refs: break out ref conflict checks
>  + files_log_ref_write: new function
>  + initdb: make safe_create_dir public
>  + refs: split filesystem-based refs code into a new file
>  + refs/refs-internal.h: new header file
>  + refname_is_safe(): improve docstring
>  + pack_if_possible_fn(): use ref_type() instead of is_per_worktree_ref()
>  + copy_msg(): rename to copy_reflog_msg()
>  + verify_refname_available(): new function
>  + verify_refname_available(): rename function
>
>  Code preparation for pluggable ref backends.
>
>  Will merge to 'master' two cycles from now.

... that is, I'd very much prefer bc/object-id redone on top of an
updated codebase that already has dt/refs-backend-pre-vtable in it.

Thanks.

^ permalink raw reply	[relevance 2%]

* Re: What's cooking in git.git (Dec 2015, #01; Tue, 1)
  2015-12-02 22:11  2% ` Junio C Hamano
@ 2015-12-02 22:31  3%   ` Jeff King
  2015-12-02 23:31  0%     ` Junio C Hamano
  2015-12-03  1:09  0%     ` Junio C Hamano
  2015-12-03  0:29  0%   ` David Turner
  1 sibling, 2 replies; 200+ results
From: Jeff King @ 2015-12-02 22:31 UTC (permalink / raw)
  To: Junio C Hamano; +Cc: git

On Wed, Dec 02, 2015 at 02:11:32PM -0800, Junio C Hamano wrote:

> I think I managed to get my working area (together with a handful of
> new entries in the rerere database and a few merge-fix/ entries) in
> sync with what you pushed out well enough that my automated
> procedure would recreate the status of various branches you pushed
> out exactly.
> 
> I haven't caught up with the changes in the component branches,
> though, so it may take a few days until I start picking up new
> topics from the list traffic.

My whole workspace is at https://github.com/peff/git, if fetching that
directly is easier. I just noticed that my refspecs were not configured
to push up refs/merge-fix. I've just fixed that and pushed again.

I'll leave it that way for a few more days, but then will probably take
it back to my usual contributor setup (i.e., just my topics and personal
integration branches).

Let me know if there's anything else I can do to help with the handoff.

> > * bc/object-id (2015-11-20) 12 commits
> [...]
> 
> Aside from niggles on titles of a handful of changes in this topic,
> I have a bit of concern with this one and dt/refs-backend-pre-vtable
> topic (marked as "Will merge to 'master' two cycles from now.",
> which I am reading as "two cycles" means 2 x (8-10 week release
> cycle), not "two integration cycles by the maintainer, aka two
> issues of What's cooking report", which is typically less than a
> week).

My "two cycles from now" meant "two integration cycles". I seemed to do
only about two per week. You can take those all with a grain of salt. It
was meant only as a note to myself that the topic seemed risky enough to
allow extra cooking time in next.

Since your "Meta/cook -w" output shows dates of merges, I imagine you
are in the habit of simply looking at those dates and saying "eh, this
has been in next for 2 weeks and nobody has complained; that's enough
cooking time".

> The merge resolution in 'pu' discards what this topic did to refs.c
> because much of the original goes away from there, but does it mean
> (remember, I haven't caught up with the contents of the topics yet)
> that the merge reverts part of what this topic did, and in an ideal
> world, if the other one were more mature when this topic got
> started, more use of "unsigned char[40]" would have been migrated to
> "struct object_id" in new files the other one introduced?  Or
> perhaps we would want to go the other way around, i.e. as this topic
> conceptually is fairly straight-forward, merge this to 'next' and
> then down to 'master' (which would not take two release cycles) and
> then redo the other topic on top?

I took the resolution proposed by brian, which was that the refs.c code
went away. There was some evil-merge required to make the new
refs/files-backend.c compile (in my refs/merge-fix/bc/object-id) for
code that moved. I was surprised there wasn't more, but I think it's
right. We dropped the _users_ of some sha1/object_id transition code
(which is why it doesn't need more fixup to compile). We did not drop
any actual function conversions (which might have been wrong but still
compiled, if both the function signature and its callers all moved).

As it's all part of an incremental conversion anyway, my feeling was
that it was OK to move forward as long as it wasn't disturbing topics in
flight (assuming we're agreed on the overall direction, which I think is
the case).

> > * mr/ff-refs (2015-11-28) 6 commits
> [...]
> 
> This is another one that needs some evil-merge interaction with
> bc/object-id, but I have a feeling that this is not such a good
> addition to our workflow elements, so I am not worried too much
> about it.  I'm inclined to eject this topic (and will welcome if
> people come up with an alternative, perhaps based on the "let fetch
> do so instead" approach discussed there).

Right. There's another merge-fix for this.

I explicitly put this after bc/object-id (requiring another merge-fix,
rather than rolling it into the bc/object-id merge fix), because I
expected bc/object-id to graduate, and this one to languish in pu or get
re-rolled.

I agree that ejecting is fine here.

> > * ps/rebase-keep-empty (2015-11-24) 2 commits
> >  - rebase: fix preserving commits with --keep-empty
> >  - rebase: test broken behavior with --keep-empty
> >
> >  Keep duplicate commits via rebase --keep-empty.
> >
> >  I'm not sure if I agree with this interpretation of the "rebase
> >  --keep-empty" documentation, but I haven't thought too hard about it.
> >  Comments welcome.
> 
> "--keep-empty" has always been about keeping an originally empty
> commit, not a commit that becomes empty because of rebasing
> (i.e. what has already been applied to the updated base).  The
> documentation, if it leads to any other interpretation, needs to be
> fixed.
> 
> Besides, if "--keep-empty" were to mean "keep redundant ones that
> are already in the updated base", the patch must do a lot more,
> e.g. stop filtering with git-cherry patch equivalence.
> 
> I'm inclined to eject this topic.

That was my thinking too (and I notice it didn't get any review from
anybody else).

> > * ls/test-must-fail-sigpipe (2015-11-28) 2 commits
> >   (merged to 'next' on 2015-12-01 at d374686)
> >  + add "ok=sigpipe" to test_must_fail and use it to fix flaky tests
> >  + implement test_might_fail using a refactored test_must_fail
> >
> >  Fix some racy client/server tests by treating SIGPIPE the same as a
> >  normal non-zero exit.
> >
> >  Will merge to 'master' two cycles from now.
> 
> Hmm, perhaps I misread what you meant by "two cycles", as this is
> only the test suite and I cannot imagine we would want to be
> ultra-safe to cook that for two release cycles, and you did mean two
> issues of "What's cooking" report?

Yes, the latter. Even though it is "only" the test suite, it gave us
enough trouble that I did not want to go to next and then immediately to
master in the next cycle (i.e., I wanted to give people time enough to
complain if it breaks their "make test" in next).

> > * dt/refs-backend-pre-vtable (2015-11-20) 10 commits
> >   (merged to 'next' on 2015-11-24 at 8fd7293)
> >  + refs: break out ref conflict checks
> >  + files_log_ref_write: new function
> >  + initdb: make safe_create_dir public
> >  + refs: split filesystem-based refs code into a new file
> >  + refs/refs-internal.h: new header file
> >  + refname_is_safe(): improve docstring
> >  + pack_if_possible_fn(): use ref_type() instead of is_per_worktree_ref()
> >  + copy_msg(): rename to copy_reflog_msg()
> >  + verify_refname_available(): new function
> >  + verify_refname_available(): rename function
> >
> >  Code preparation for pluggable ref backends.
> >
> >  Will merge to 'master' two cycles from now.
> 
> ... that is, I'd very much prefer bc/object-id redone on top of an
> updated codebase that already has dt/refs-backend-pre-vtable in it.

I think that is OK to do, though I'm not sure the end result will be
all that different.

-Peff

^ permalink raw reply	[relevance 3%]

* Re: What's cooking in git.git (Dec 2015, #01; Tue, 1)
  2015-12-02 22:31  3%   ` Jeff King
@ 2015-12-02 23:31  0%     ` Junio C Hamano
  2015-12-03  1:09  0%     ` Junio C Hamano
  1 sibling, 0 replies; 200+ results
From: Junio C Hamano @ 2015-12-02 23:31 UTC (permalink / raw)
  To: Jeff King; +Cc: git

Jeff King <peff@peff.net> writes:

> On Wed, Dec 02, 2015 at 02:11:32PM -0800, Junio C Hamano wrote:
>
>> I think I managed to get my working area (together with a handful of
>> new entries in the rerere database and a few merge-fix/ entries) in
>> sync with what you pushed out well enough that my automated
>> procedure would recreate the status of various branches you pushed
>> out exactly.
>> 
>> I haven't caught up with the changes in the component branches,
>> though, so it may take a few days until I start picking up new
>> topics from the list traffic.
>
> My whole workspace is at https://github.com/peff/git, if fetching that
> directly is easier. I just noticed that my refspecs were not configured
> to push up refs/merge-fix. I've just fixed that and pushed again.
>
> I'll leave it that way for a few more days, but then will probably take
> it back to my usual contributor setup (i.e., just my topics and personal
> integration branches).

Thanks.  I haven't re-fetched from you, but I think I am good.

> My "two cycles from now" meant "two integration cycles". I seemed to do
> only about two per week. You can take those all with a grain of salt. It
> was meant only as a note to myself that the topic seemed risky enough to
> allow extra cooking time in next.
>
> Since your "Meta/cook -w" output shows dates of merges, I imagine you
> are in the habit of simply looking at those dates and saying "eh, this
> has been in next for 2 weeks and nobody has complained; that's enough
> cooking time".

Yup ;-)

> (which is why it doesn't need more fixup to compile). We did not drop
> any actual function conversions (which might have been wrong but still
> compiled, if both the function signature and its callers all moved).

OK, good to know.

I just finished my first pass of going through "cook -w" output and
had trouble judging jk/send-email-ssl-errors topic, which is marked
as "waiting for re-roll", but I cannot seem to find any discussion
on it, just the original patch $gmane/281655.  Are there concerns?

^ permalink raw reply	[relevance 0%]

* Re: What's cooking in git.git (Dec 2015, #01; Tue, 1)
  2015-12-02 22:11  2% ` Junio C Hamano
  2015-12-02 22:31  3%   ` Jeff King
@ 2015-12-03  0:29  0%   ` David Turner
  1 sibling, 0 replies; 200+ results
From: David Turner @ 2015-12-03  0:29 UTC (permalink / raw)
  To: Junio C Hamano; +Cc: Jeff King, git

On Wed, 2015-12-02 at 14:11 -0800, Junio C Hamano wrote:
> Jeff King <peff@peff.net> writes:
> 
> > What's cooking in git.git (Dec 2015, #01; Tue, 1)
> > --------------------------------------------------
> >
> > Here are the topics that have been cooking.  Commits prefixed with
> > '-' are only in 'pu' (proposed updates) while commits prefixed with
> > '+' are in 'next'.
> >
> > This should by my final whats-cooking before handing things back to
> > Junio. Thanks all for review help and for your patience during the past
> > few weeks.
> 
> I think I managed to get my working area (together with a handful of
> new entries in the rerere database and a few merge-fix/ entries) in
> sync with what you pushed out well enough that my automated
> procedure would recreate the status of various branches you pushed
> out exactly.
> 
> I haven't caught up with the changes in the component branches,
> though, so it may take a few days until I start picking up new
> topics from the list traffic.
> 
> > * bc/object-id (2015-11-20) 12 commits
> >  - remote: convert functions to struct object_id
> >  - Remove get_object_hash.
> >  - Convert struct object to object_id
> >  - Add several uses of get_object_hash.
> >  - object: introduce get_object_hash macro.
> >  - ref_newer: convert to use struct object_id
> >  - push_refs_with_export: convert to struct object_id
> >  - get_remote_heads: convert to struct object_id
> >  - parse_fetch: convert to use struct object_id
> >  - add_sought_entry_mem: convert to struct object_id
> >  - Convert struct ref to use object_id.
> >  - sha1_file: introduce has_object_file helper.
> >
> >  More transition from "unsigned char[40]" to "struct object_id".
> >
> >  This needed a few merge fixups, but is mostly disentangled from other
> >  topics.
> >
> >  Will merge to 'next'.
> 
> Aside from niggles on titles of a handful of changes in this topic,
> I have a bit of concern with this one and dt/refs-backend-pre-vtable
> topic (marked as "Will merge to 'master' two cycles from now.",
> which I am reading as "two cycles" means 2 x (8-10 week release
> cycle), not "two integration cycles by the maintainer, aka two
> issues of What's cooking report", which is typically less than a
> week).
> 
> The merge resolution in 'pu' discards what this topic did to refs.c
> because much of the original goes away from there, but does it mean
> (remember, I haven't caught up with the contents of the topics yet)
> that the merge reverts part of what this topic did, and in an ideal
> world, if the other one were more mature when this topic got
> started, more use of "unsigned char[40]" would have been migrated to
> "struct object_id" in new files the other one introduced?  Or
> perhaps we would want to go the other way around, i.e. as this topic
> conceptually is fairly straight-forward, merge this to 'next' and
> then down to 'master' (which would not take two release cycles) and
> then redo the other topic on top?
> 
> > * mr/ff-refs (2015-11-28) 6 commits
> >  - builtin/ff-refs.c: mark some file-local variables static
> >  - ff-refs: Add tests
> >  - ff-refs: Add documentation
> >  - ff-refs: add --dry-run and --skip-worktree options
> >  - ff-refs: update each updatable ref
> >  - ff-refs: builtin cmd to check and fast forward local refs to their upstream
> >
> >  Specialized command to fast-forward refs to match their upstream.
> >
> >  I remain skeptical that this is necessary or sufficient. Comments
> >  welcome.
> >
> >  Will hold.
> 
> This is another one that needs some evil-merge interaction with
> bc/object-id, but I have a feeling that this is not such a good
> addition to our workflow elements, so I am not worried too much
> about it.  I'm inclined to eject this topic (and will welcome if
> people come up with an alternative, perhaps based on the "let fetch
> do so instead" approach discussed there).
> 
> > * ps/rebase-keep-empty (2015-11-24) 2 commits
> >  - rebase: fix preserving commits with --keep-empty
> >  - rebase: test broken behavior with --keep-empty
> >
> >  Keep duplicate commits via rebase --keep-empty.
> >
> >  I'm not sure if I agree with this interpretation of the "rebase
> >  --keep-empty" documentation, but I haven't thought too hard about it.
> >  Comments welcome.
> 
> "--keep-empty" has always been about keeping an originally empty
> commit, not a commit that becomes empty because of rebasing
> (i.e. what has already been applied to the updated base).  The
> documentation, if it leads to any other interpretation, needs to be
> fixed.
> 
> Besides, if "--keep-empty" were to mean "keep redundant ones that
> are already in the updated base", the patch must do a lot more,
> e.g. stop filtering with git-cherry patch equivalence.
> 
> I'm inclined to eject this topic.
> 
> 
> > * ls/test-must-fail-sigpipe (2015-11-28) 2 commits
> >   (merged to 'next' on 2015-12-01 at d374686)
> >  + add "ok=sigpipe" to test_must_fail and use it to fix flaky tests
> >  + implement test_might_fail using a refactored test_must_fail
> >
> >  Fix some racy client/server tests by treating SIGPIPE the same as a
> >  normal non-zero exit.
> >
> >  Will merge to 'master' two cycles from now.
> 
> Hmm, perhaps I misread what you meant by "two cycles", as this is
> only the test suite and I cannot imagine we would want to be
> ultra-safe to cook that for two release cycles, and you did mean two
> issues of "What's cooking" report?
> 
> If so, I'll have to rethink the comment on bc/object-id I made
> earlier...
> 
> > * dt/refs-backend-pre-vtable (2015-11-20) 10 commits
> >   (merged to 'next' on 2015-11-24 at 8fd7293)
> >  + refs: break out ref conflict checks
> >  + files_log_ref_write: new function
> >  + initdb: make safe_create_dir public
> >  + refs: split filesystem-based refs code into a new file
> >  + refs/refs-internal.h: new header file
> >  + refname_is_safe(): improve docstring
> >  + pack_if_possible_fn(): use ref_type() instead of is_per_worktree_ref()
> >  + copy_msg(): rename to copy_reflog_msg()
> >  + verify_refname_available(): new function
> >  + verify_refname_available(): rename function
> >
> >  Code preparation for pluggable ref backends.
> >
> >  Will merge to 'master' two cycles from now.
> 
> ... that is, I'd very much prefer bc/object-id redone on top of an
> updated codebase that already has dt/refs-backend-pre-vtable in it.

>From a selfish perspective, I, would prefer for object-ids to not happen
quite yet for the refs code.  I have already prepared (but not yet sent)
a new version of the refs backend vtable (and lmdb) code on top of
refs-backend-pre-vtable, and it'll be a hassle to reroll it on top of
new object-id stuff.

I guess I'll go ahead and send mine now, and we can later make a
decision about how to deal with the object-id stuff.

^ permalink raw reply	[relevance 0%]

* Re: What's cooking in git.git (Dec 2015, #01; Tue, 1)
  2015-12-02 22:31  3%   ` Jeff King
  2015-12-02 23:31  0%     ` Junio C Hamano
@ 2015-12-03  1:09  0%     ` Junio C Hamano
  1 sibling, 0 replies; 200+ results
From: Junio C Hamano @ 2015-12-03  1:09 UTC (permalink / raw)
  To: Jeff King; +Cc: git

Jeff King <peff@peff.net> writes:

> On Wed, Dec 02, 2015 at 02:11:32PM -0800, Junio C Hamano wrote:
>
>> I think I managed to get my working area (together with a handful of
>> new entries in the rerere database and a few merge-fix/ entries) in
>> sync with what you pushed out well enough that my automated
>> procedure would recreate the status of various branches you pushed
>> out exactly.
>> 
>> I haven't caught up with the changes in the component branches,
>> though, so it may take a few days until I start picking up new
>> topics from the list traffic.
>
> My whole workspace is at https://github.com/peff/git, if fetching that
> directly is easier. I just noticed that my refspecs were not configured
> to push up refs/merge-fix. I've just fixed that and pushed again.
>
> I'll leave it that way for a few more days, but then will probably take
> it back to my usual contributor setup (i.e., just my topics and personal
> integration branches).
>
> Let me know if there's anything else I can do to help with the handoff.

I've rebuilt 'pu' (and 'jch') with the component topics myself,
following the exact order of merges you had between master..pu, in
order to make sure that I fully made my working area in sync with
your merge resolutions, meaning that there shouldn't be any
differences between trees of the tips of integration branches.

The result has been pushed out to various places.  The push to
https://github.com/git/git/ resulted in a single 'pu' update (the
trees did not change, the merge history was rebuilt as stated in the
previous paragraph).  Other repositories, i.e.

  git://git.kernel.org/pub/scm/git/git.git/
  git://repo.or.cz/alt-git.git/
  git://git.sourceforge.jp/gitroot/git-core/git.git/
  git://git-core.git.sourceforge.net/gitroot/git-core/git-core/

received various updates to match your last integration results.

So it is OK for you to set your workspace back to your usual
contributor settings.  I can continue from here on.

Note that I haven't made any new merges, picked up any new topics or
replaced an old patch on an existing topic with a new one (yet).
Hopefully I can get to that tomorrow.

Thanks.

^ permalink raw reply	[relevance 0%]

* merge: fix NULL pointer dereference when merging nothing into void
  @ 2016-03-21 19:01  2%   ` Junio C Hamano
  2016-03-21 19:36  2%     ` Eric Sunshine
  0 siblings, 1 reply; 200+ results
From: Junio C Hamano @ 2016-03-21 19:01 UTC (permalink / raw)
  To: Jose Ivan B. Vilarouca Filho; +Cc: sunshine, git

When we are on an unborn branch and merging only one foreign parent,
we allow "git merge" to fast-forward to that foreign parent commit.

This codepath incorrectly attempted to dereference the list of
parents that the merge is going to record even when the list is
empty.  It must refuse to operate instead when there is no parent.

All other codepaths make sure the list is not empty before they
dereference it, and are safe.

Reported by Jose Ivan B. Vilarouca Filho
Signed-off-by: Junio C Hamano <gitster@pobox.com>
---

 * So here is what I came up with as a suggestion.  The original
   check to see if remote_head is empty is simply bogus (an empty
   list would to have a single element whose item is NULL), so I
   rewrote it to clarify what is going on in this codepath.

 builtin/merge.c  | 10 +++++-----
 t/t7600-merge.sh | 10 ++++++++++
 2 files changed, 15 insertions(+), 5 deletions(-)

diff --git a/builtin/merge.c b/builtin/merge.c
index 101ffef..bf2f261 100644
--- a/builtin/merge.c
+++ b/builtin/merge.c
@@ -1257,12 +1257,12 @@ int cmd_merge(int argc, const char **argv, const char *prefix)
 			builtin_merge_options);
 
 	if (!head_commit) {
-		struct commit *remote_head;
 		/*
 		 * If the merged head is a valid one there is no reason
 		 * to forbid "git merge" into a branch yet to be born.
 		 * We do the same for "git pull".
 		 */
+		unsigned char *remote_head_sha1;
 		if (squash)
 			die(_("Squash commit into empty head not supported yet"));
 		if (fast_forward == FF_NO)
@@ -1270,13 +1270,13 @@ int cmd_merge(int argc, const char **argv, const char *prefix)
 			    "an empty head"));
 		remoteheads = collect_parents(head_commit, &head_subsumed,
 					      argc, argv, NULL);
-		remote_head = remoteheads->item;
-		if (!remote_head)
+		if (!remoteheads)
 			die(_("%s - not something we can merge"), argv[0]);
 		if (remoteheads->next)
 			die(_("Can merge only exactly one commit into empty head"));
-		read_empty(remote_head->object.oid.hash, 0);
-		update_ref("initial pull", "HEAD", remote_head->object.oid.hash,
+		remote_head_sha1 = remoteheads->item->object.oid.hash;
+		read_empty(remote_head_sha1, 0);
+		update_ref("initial pull", "HEAD", remote_head_sha1,
 			   NULL, 0, UPDATE_REFS_DIE_ON_ERR);
 		goto done;
 	}
diff --git a/t/t7600-merge.sh b/t/t7600-merge.sh
index 302e238..9d7952f 100755
--- a/t/t7600-merge.sh
+++ b/t/t7600-merge.sh
@@ -725,4 +725,14 @@ test_expect_success 'merge detects mod-256 conflicts (resolve)' '
 	test_must_fail git merge -s resolve master
 '
 
+test_expect_success 'merge nothing into void' '
+	git init void &&
+	(
+		cd void &&
+		git remote add up .. &&
+		git fetch up &&
+		test_must_fail git merge FETCH_HEAD
+	)
+'
+
 test_done

^ permalink raw reply related	[relevance 2%]

* Re: merge: fix NULL pointer dereference when merging nothing into void
  2016-03-21 19:01  2%   ` merge: fix NULL pointer dereference when merging nothing into void Junio C Hamano
@ 2016-03-21 19:36  2%     ` Eric Sunshine
  0 siblings, 0 replies; 200+ results
From: Eric Sunshine @ 2016-03-21 19:36 UTC (permalink / raw)
  To: Junio C Hamano; +Cc: Jose Ivan B. Vilarouca Filho, Git List

On Mon, Mar 21, 2016 at 3:01 PM, Junio C Hamano <gitster@pobox.com> wrote:
> When we are on an unborn branch and merging only one foreign parent,
> we allow "git merge" to fast-forward to that foreign parent commit.
>
> This codepath incorrectly attempted to dereference the list of
> parents that the merge is going to record even when the list is
> empty.  It must refuse to operate instead when there is no parent.
>
> All other codepaths make sure the list is not empty before they
> dereference it, and are safe.
>
> Reported by Jose Ivan B. Vilarouca Filho
> Signed-off-by: Junio C Hamano <gitster@pobox.com>
> ---
> diff --git a/t/t7600-merge.sh b/t/t7600-merge.sh
> @@ -725,4 +725,14 @@ test_expect_success 'merge detects mod-256 conflicts (resolve)' '
> +test_expect_success 'merge nothing into void' '
> +       git init void &&
> +       (
> +               cd void &&
> +               git remote add up .. &&
> +               git fetch up &&
> +               test_must_fail git merge FETCH_HEAD

Ah, nice. I either didn't know or had forgotten that test_must_fail is
smart enough to detect unexpected failures (such as segfault), so my
advice to Jose about capturing stderr[1] was misdirected. Thanks.

[1]: http://article.gmane.org/gmane.comp.version-control.git/289405

> +       )
> +'
> +
>  test_done

^ permalink raw reply	[relevance 2%]

* What's cooking in git.git (Mar 2016, #04; Wed, 23)
@ 2016-03-23 21:12  3% Junio C Hamano
  0 siblings, 0 replies; 200+ results
From: Junio C Hamano @ 2016-03-23 21:12 UTC (permalink / raw)
  To: git

Here are the topics that have been cooking.  Commits prefixed with
'-' are only in 'pu' (proposed updates) while commits prefixed with
'+' are in 'next'.  The ones marked with '.' do not appear in any of
the integration branches, but I am still holding onto them.

Three more minor fix-up topics are to be merged by 2.8 final, but we
are almost there.

You can find the changes described here in the integration branches
of the repositories listed at

    http://git-blame.blogspot.com/p/git-public-repositories.html

--------------------------------------------------
[New Topics]

* jk/check-repository-format (2016-03-11) 10 commits
 - verify_repository_format: mark messages for translation
 - setup: drop repository_format_version global
 - setup: unify repository version callbacks
 - init: use setup.c's repo version verification
 - setup: refactor repo format reading and verification
 - config: drop git_config_early
 - check_repository_format_gently: stop using git_config_early
 - lazily load core.sharedrepository
 - wrap shared_repository global in get/set accessors
 - setup: document check_repository_format()

 The repository set-up sequence has been streamlined (the biggest
 change is that there is no longer git_config_early()), so that we
 do not attempt to look into refs/* when we know we do not have a
 Git repository.


* mj/pull-rebase-autostash (2016-03-21) 2 commits
  (merged to 'next' on 2016-03-23 at ebf1afa)
 + pull --rebase: add --[no-]autostash flag
 + git-pull.c: introduce git_pull_config()

 "git pull --rebase" learned "--[no-]autostash" option, so that
 the rebase.autostash configuration variable set to true can be
 overridden from the command line.

 Will merge to 'master' after 2.8 final.


* pb/commit-verbose-config (2016-03-14) 1 commit
 - commit: add a commit.verbose config variable
 (this branch uses pb/t7502-drop-dup.)

 "git commit" learned to pay attention to "commit.verbose"
 configuration variable and act as if "--verbose" option was given
 from the command line.


* pb/t7502-drop-dup (2016-03-11) 1 commit
  (merged to 'next' on 2016-03-15 at 037c877)
 + t/t7502 : drop duplicate test
 (this branch is used by pb/commit-verbose-config.)

 Code clean-up.

 Will merge to 'master' after 2.8 final.


* ss/commit-squash-msg (2016-03-21) 1 commit
  (merged to 'next' on 2016-03-23 at 0b72631)
 + commit: do not lose SQUASH_MSG contents

 When "git merge --squash" stopped due to conflict, the concluding
 "git commit" failed to read in the SQUASH_MSG that shows the log
 messages from all the squashed commits.

 Will merge to 'master' after 2.8 final.


* ls/p4-map-user (2016-03-15) 1 commit
  (merged to 'next' on 2016-03-23 at 9e0a4f5)
 + git-p4: map a P4 user to Git author name and email address

 Will merge to 'master' after 2.8 final.


* jc/merge-refuse-new-root (2016-03-23) 1 commit
  (merged to 'next' on 2016-03-23 at d7da4cf)
 + merge: refuse to create too cool a merge by default

 "git merge" used to allow merging two branches that have no common
 base by default, which led to a brand new history of an existing
 project created and then get pulled by an unsuspecting maintainer,
 which allowed an unnecessary parallel history merged into the
 existing project.  The command has been taught not to allow this by
 default, with an escape hatch "--allow-unrelated-histories" option
 to be used in a rare event that merges histories of two projects
 that started their lives independently.

 Will merge to 'master' after 2.8 final.


* jc/rerere-multi-wip (2016-03-21) 1 commit
 . WIP forget
 (this branch uses jc/rerere-multi.)


* jk/credential-cache-comment-exit (2016-03-18) 1 commit
  (merged to 'next' on 2016-03-23 at d2b8cc7)
 + credential-cache--daemon: clarify "exit" action semantics

 Will merge to 'master' after 2.8 final.


* jk/send-email-rtrim-mailrc-alias (2016-03-18) 1 commit
  (merged to 'next' on 2016-03-23 at 74f1f44)
 + send-email: ignore trailing whitespace in mailrc alias file

 Will merge to 'master' after 2.8 final.


* jk/test-httpd-config-nosystem (2016-03-18) 1 commit
  (merged to 'next' on 2016-03-23 at 245263b)
 + t/lib-httpd: pass through GIT_CONFIG_NOSYSTEM env

 Will merge to 'master' after 2.8 final.


* lt/pretty-expand-tabs (2016-03-17) 4 commits
 - pretty-print: add --pretty=noexpand
 - pretty-print: further abstract out pp_handle_indent()
 - pretty-print: simplify the interaction between pp_handle_indent() and its caller
 - pretty-print: de-tabify indented logs to make things line up properly

 Needs a UI rework.


* sb/clone-shallow-passthru (2016-03-23) 3 commits
 - clone: add t5614 to test cloning submodules with shallowness involved
 - submodule clone: pass along `local` option
 - clone: add `--shallow-submodules` flag
 (this branch uses sb/submodule-parallel-update; is tangled with sb/submodule-init.)

 "git clone" learned "--shallow-submodules" option.

 Needs review.


* sb/clone-t57-t56 (2016-03-16) 1 commit
  (merged to 'next' on 2016-03-23 at 5df850d)
 + clone tests: rename t57* => t56*

 Rename bunch of tests on "git clone" for better organization.

 Will merge to 'master' after 2.8 final.


* sb/rebase-x (2016-03-18) 2 commits
  (merged to 'next' on 2016-03-23 at ef8861b)
 + t3404: cleanup double empty lines between tests
 + rebase: decouple --exec from --interactive

 "git rebase -x" can be used without passing "-i" option.

 Will merge to 'master' after 2.8 final.


* cc/apply (2016-03-22) 2 commits
 - apply: remove unused call to free() in gitdiff_{old,new}name()
 - builtin/apply: get rid of useless 'name' variable

 Code clean-up.

 Will merge to 'next'.


* dt/index-helper (2016-03-23) 18 commits
 - SQUASH - minimum compilation fix
 - read-cache: config for waiting for index-helper
 - index-helper: optionally automatically run
 - index-helper: autorun mode
 - index-helper: don't run if already running
 - index-helper: kill mode
 - unpack-trees: preserve index extensions
 - update-index: enable/disable watchman support
 - index-helper: use watchman to avoid refreshing index with lstat()
 - Add watchman support to reduce index refresh cost
 - read-cache: invalidate untracked cache data when reading WAMA
 - read-cache: add watchman 'WAMA' extension
 - index-helper: add --detach
 - daemonize(): set a flag before exiting the main process
 - index-helper: add --strict
 - index-helper: new daemon for caching index and related stuff
 - read-cache: allow to keep mmap'd memory after reading
 - read-cache.c: fix constness of verify_hdr()


* js/mingw-tests-2.8 (2016-03-23) 4 commits
  (merged to 'next' on 2016-03-23 at aeec80e)
 + mingw: skip some tests in t9115 due to file name issues
 + t1300: fix the new --show-origin tests on Windows
 + t1300-repo-config: make it resilient to being run via 'sh -x'
 + config --show-origin: report paths with forward slashes

 Will merge to 'master' by 2.8-final.


* jv/merge-nothing-into-void (2016-03-23) 1 commit
  (merged to 'next' on 2016-03-23 at 40b905d)
 + merge: fix NULL pointer dereference when merging nothing into void

 "git merge FETCH_HEAD" dereferenced NULL pointer when merging
 nothing into an unborn history (which is arguably unusual usage,
 which perhaps was the reason why nobody noticed it).

 Will merge to 'master' after 2.8 final.


* la/tag-force-signing-annotated-tags (2016-03-22) 1 commit
 - tag: add the option to force signing of annotated tags

 "git tag" can create an annotated tag without explicitly given an
 "-a" (or "-s") option (i.e. when a tag message is given).  A new
 configuration variable, tag.forceSignAnnotated, can be used to tell
 the command to create signed tag in such a situation.

 Will merge to 'next'.


* ls/p4-doc-markup (2016-03-23) 2 commits
  (merged to 'next' on 2016-03-23 at 94a6275)
 + Documentation: fix git-p4 AsciiDoc formatting
 + Documentation: use ASCII quotation marks in git-p4

 Will merge to 'master' by 2.8-final.


* sb/submodule-module-list-pathspec-fix (2016-03-22) 1 commit
  (merged to 'next' on 2016-03-23 at 67fe17c)
 + submodule: fix regression for deinit without submodules

 Will merge to 'master' by 2.8-final.

--------------------------------------------------
[Graduated to "master"]

* cn/deprecate-ssh-git-url (2016-03-09) 1 commit
  (merged to 'next' on 2016-03-15 at c52f11c)
 + Disown ssh+git and git+ssh

 The two alternative ways to spell "ssh://" transport have been
 deprecated for a long time.  The last mention of them has finally
 removed from the documentation.


* jc/exclusion-doc (2016-03-08) 1 commit
  (merged to 'next' on 2016-03-10 at 19173ff)
 + gitignore: document that unignoring a directory unignores everything in it


* jc/sane-grep (2016-03-10) 2 commits
  (merged to 'next' on 2016-03-15 at 98d08a4)
 + rebase-i: clarify "is this commit relevant?" test
 + sane_grep: pass "-a" if grep accepts it

 Recent versions of GNU grep is pickier than before to decide if a
 file is "binary" and refuse to give line-oriented hits when we
 expect it to, unless explicitly told with "-a" option.  As our
 scripted Porcelains use sane_grep wrapper for line-oriented data,
 even when the line may contain non-ASCII payload we took from
 end-user data, use "grep -a" to implement sane_grep wrapper when
 using an implementation of "grep" that takes the "-a" option.


* js/close-packs-before-gc (2016-03-04) 1 commit
  (merged to 'next' on 2016-03-04 at fe6f6ed)
 + t5510: do not leave changed cwd

 A small future-proofing of a test added recently.


* jx/http-no-proxy (2016-02-29) 1 commit
  (merged to 'next' on 2016-03-10 at 989305b)
 + http: honor no_http env variable to bypass proxy

 A small regression fix to keep no_proxy environment variable
 working.


* sb/rebase-summary (2016-03-02) 1 commit
  (merged to 'next' on 2016-03-04 at d40714d)
 + Documentation: reword rebase summary

--------------------------------------------------
[Stalled]

* ec/annotate-deleted (2015-11-20) 1 commit
 - annotate: skip checking working tree if a revision is provided

 Usability fix for annotate-specific "<file> <rev>" syntax with deleted
 files.

 Waiting for review.


* dg/subtree-rebase-test (2016-01-19) 1 commit
 - contrib/subtree: Add a test for subtree rebase that loses commits

 Reviewed up to v5.
 Will be rerolled.
 ($gmane/284426)


* js/am-3-merge-recursive-direct (2015-10-12) 2 commits
 - am: make a direct call to merge_recursive
 - merge_recursive_options: introduce the "gently" flag

 The merge_recursive_generic() function has been made a bit safer to
 call from inside a process.  "git am -3" was taught to make a direct
 call to the function when falling back to three-way merge.

 Being able to make a direct call would be good in general, but as a
 performance thing, the change needs to be backed up by numbers.

 Needs review.

 I haven't gone through the "gently" change with fine toothed comb;
 I can see that the change avoids calling die(), but I haven't made
 sure that the program states (e.g. what's in the in-core index) are
 adjusted sensibly when it returns to the caller instead of dying,
 or the codepaths that used to die() are free of resource leaks.
 The original code certainly did not care the program states at the
 point of dying exactly because it knew it is going to exit, but now
 they have to care, and they need to be audited.


* dk/gc-more-wo-pack (2016-01-13) 4 commits
 - gc: clean garbage .bitmap files from pack dir
 - t5304: ensure non-garbage files are not deleted
 - t5304: test .bitmap garbage files
 - prepare_packed_git(): find more garbage

 Follow-on to dk/gc-idx-wo-pack topic, to clean up stale
 .bitmap and .keep files.

 Waiting for a reroll.
 ($gmane/284368).


* jc/diff-b-m (2015-02-23) 5 commits
 . WIPWIP
 . WIP: diff-b-m
 - diffcore-rename: allow easier debugging
 - diffcore-rename.c: add locate_rename_src()
 - diffcore-break: allow debugging

 "git diff -B -M" produced incorrect patch when the postimage of a
 completely rewritten file is similar to the preimage of a removed
 file; such a resulting file must not be expressed as a rename from
 other place.

 The fix in this patch is broken, unfortunately.
 Will discard.

--------------------------------------------------
[Cooking]

* cc/doc-recommend-performance-trace-to-file (2016-03-07) 1 commit
  (merged to 'next' on 2016-03-23 at 086b9f2)
 + Documentation: talk about pager in api-trace.txt

 Will merge to 'master' after 2.8 final.


* da/mergetool-delete-delete-conflict (2016-03-10) 2 commits
  (merged to 'next' on 2016-03-15 at 281a81a)
 + mergetool: honor tempfile configuration when resolving delete conflicts
 + mergetool: support delete/delete conflicts

 "git mergetool" did not work well with conflicts that both sides
 deleted.

 Will merge to 'master' after 2.8 final.


* es/test-gpg-tags (2016-03-06) 4 commits
  (merged to 'next' on 2016-03-15 at 617119f)
 + t6302: skip only signed tags rather than all tests when GPG is missing
 + t6302: also test annotated in addition to signed tags
 + t6302: normalize names and descriptions of signed tags
 + lib-gpg: drop unnecessary "missing GPG" warning

 A test for tags has been restructured so that more parts of it can
 easily be run on a platform without a working GnuPG.

 Will merge to 'master' after 2.8 final.


* jk/getwholeline-getdelim-empty (2016-03-05) 1 commit
  (merged to 'next' on 2016-03-15 at e70d4bd)
 + strbuf_getwholeline: NUL-terminate getdelim buffer on error

 strbuf_getwholeline() did not NUL-terminate the buffer on certain
 corner cases in its error codepath.

 Will merge to 'master' after 2.8 final.


* jk/startup-info (2016-03-07) 6 commits
  (merged to 'next' on 2016-03-15 at eb95e5f)
 + use setup_git_directory() in test-* programs
 + grep: turn off gitlink detection for --no-index
 + mailmap: do not resolve blobs in a non-repository
 + remote: don't resolve HEAD in non-repository
 + setup: set startup_info->have_repository more reliably
 + setup: make startup_info available everywhere

 The startup_info data, which records if we are working inside a
 repository (among other things), are now uniformly available to Git
 subcommand implementations, and Git avoids attempting to touch
 references when we are not in a repository.

 Will merge to 'master' after 2.8 final.


* rj/xdiff-prepare-plug-leak-on-error-codepath (2016-03-04) 2 commits
  (merged to 'next' on 2016-03-15 at f72755e)
 + xdiff/xprepare: fix a memory leak
 + xdiff/xprepare: use the XDF_DIFF_ALG() macro to access flag bits

 A small memory leak in an error codepath has been plugged in xdiff
 code.

 Will merge to 'master' after 2.8 final.


* jc/index-pack (2016-03-03) 2 commits
  (merged to 'next' on 2016-03-15 at 42efaa7)
 + index-pack: add a helper function to derive .idx/.keep filename
 + Merge branch 'jc/maint-index-pack-keep' into jc/index-pack
 (this branch is used by jc/bundle; uses jc/maint-index-pack-keep; is tangled with jc/index-pack-clone-bundle.)

 Code clean-up.

 Will merge to 'master' after 2.8 final.


* jc/maint-index-pack-keep (2016-03-03) 1 commit
  (merged to 'next' on 2016-03-04 at bc1d37a)
 + index-pack: correct --keep[=<msg>]
 (this branch is used by jc/bundle, jc/index-pack and jc/index-pack-clone-bundle.)

 "git index-pack --keep[=<msg>] pack-$name.pack" simply did not work.

 Will merge to 'master' after 2.8 final.


* mm/readme-markdown (2016-02-27) 1 commit
  (merged to 'next' on 2016-03-01 at 81f3858)
 + README.md: don't take 'commandname' literally

 The top-level README file has been updated to be more appropriate
 for the sign on the front door to welcome new acquaintances to Git
 by toning down inside jokes and making it into MarkDown.

 Will merge to 'master' after 2.8 final.


* gf/fetch-pack-direct-object-fetch (2016-03-05) 2 commits
  (merged to 'next' on 2016-03-06 at 5628860)
 + fetch-pack: update the documentation for "<refs>..." arguments
  (merged to 'next' on 2016-03-04 at 49199e0)
 + fetch-pack: fix object_id of exact sha1

 Fetching of history by naming a commit object name directly didn't
 work across remote-curl transport.

 Will merge to 'master' after 2.8 final.


* jk/add-i-highlight (2016-02-28) 1 commit
  (merged to 'next' on 2016-03-04 at 4ac3aa1)
 + add--interactive: allow custom diff highlighting programs

 Will merge to 'master' after 2.8 final.


* jk/config-get-urlmatch (2016-02-28) 3 commits
  (merged to 'next' on 2016-03-04 at feeb192)
 + Documentation/git-config: fix --get-all description
 + Documentation/git-config: use bulleted list for exit codes
 + config: fail if --get-urlmatch finds no value

 "git config --get-urlmatch", unlike other variants of the "git
 config --get" family, did not signal error with its exit status
 when there was no matching configuration.

 Will merge to 'master' after 2.8 final.


* jk/rev-parse-local-env-vars (2016-02-29) 2 commits
  (merged to 'next' on 2016-03-04 at a0300d5)
 + rev-parse: let some options run outside repository
 + t1515: add tests for rev-parse out-of-repo helpers

 The "--local-env-vars" and "--resolve-git-dir" options of "git
 rev-parse" failed to work outside a repository when the command's
 option parsing was rewritten in 1.8.5 era.

 Will merge to 'master' after 2.8 final.


* sg/completion-updates (2016-02-28) 21 commits
 - completion: cache the path to the repository
 - completion: extract repository discovery from __gitdir()
 - completion: don't guard git executions with __gitdir()
 - completion: consolidate silencing errors from git commands
 - completion: don't use __gitdir() for git commands
 - completion: respect 'git -C <path>'
 - completion: fix completion after 'git -C <path>'
 - completion: don't offer commands when 'git --opt' needs an argument
 - rev-parse: add '--absolute-git-dir' option
 - completion: list short refs from a remote given as a URL
 - completion: don't list 'HEAD' when trying refs completion outside of a repo
 - completion: list refs from remote when remote's name matches a directory
 - completion: respect 'git --git-dir=<path>' when listing remote refs
 - completion: fix most spots not respecting 'git --git-dir=<path>'
 - completion: ensure that the repository path given on the command line exists
 - completion tests: add tests for the __git_refs() helper function
 - completion tests: check __gitdir()'s output in the error cases
 - completion tests: consolidate getting path of current working directory
 - completion tests: make the $cur variable local to the test helper functions
 - completion tests: don't add test cruft to the test repository
 - completion: improve __git_refs()'s in-code documentation

 Will be rerolled.
 ($gmane/287839)


* mm/lockfile-error-message (2016-03-01) 2 commits
  (merged to 'next' on 2016-03-04 at 04ed7e6)
 + lockfile: improve error message when lockfile exists
 + lockfile: mark strings for translation

 Will merge to 'master' after 2.8 final.


* ss/exc-flag-is-a-collection-of-bits (2016-03-01) 1 commit
  (merged to 'next' on 2016-03-04 at 5ea48c7)
 + dir: store EXC_FLAG_* values in unsigned integers

 Will merge to 'master' after 2.8 final.


* jc/bundle (2016-03-03) 6 commits
 - index-pack: --clone-bundle option
 - Merge branch 'jc/index-pack' into jc/bundle
 - bundle v3: the beginning
 - bundle: keep a copy of bundle file name in the in-core bundle header
 - bundle: plug resource leak
 - bundle doc: 'verify' is not about verifying the bundle
 (this branch uses jc/index-pack and jc/maint-index-pack-keep; is tangled with jc/index-pack-clone-bundle.)

 The beginning of "split bundle", which could be one of the
 ingredients to allow "git clone" traffic off of the core server
 network to CDN.


* ss/receive-pack-parse-options (2016-03-01) 1 commit
  (merged to 'next' on 2016-03-04 at c577ea7)
 + builtin/receive-pack.c: use parse_options API

 The command line argument parser for "receive-pack" has been
 rewritten to use parse-options.

 Will merge to 'master' after 2.8 final.


* jk/credential-clear-config (2016-02-26) 1 commit
  (merged to 'next' on 2016-03-04 at f7b26b7)
 + credential: let empty credential specs reset helper list

 The credential.helper configuration variable is cumulative and
 there is no good way to override it from the command line.  As
 a special case, giving an empty string as its value now serves
 as the signal to clear the values specified in various files.

 Will merge to 'master' after 2.8 final.


* jk/submodule-c-credential (2016-03-23) 7 commits
  (merged to 'next' on 2016-03-23 at 952367a)
 + git_config_push_parameter: handle empty GIT_CONFIG_PARAMETERS
  (merged to 'next' on 2016-03-15 at 81df5b1)
 + git: submodule honor -c credential.* from command line
 + quote: implement sq_quotef()
 + submodule: fix segmentation fault in submodule--helper clone
 + submodule: fix submodule--helper clone usage
 + submodule: check argc count for git submodule--helper clone
 + submodule: don't pass empty string arguments to submodule--helper clone

 "git -c credential.<var>=<value> submodule" can now be used to
 propagate configuration variables related to credential helper
 down to the submodules.

 Will merge to 'master' after 2.8 final.


* nd/shallow-deepen (2016-02-23) 25 commits
 - fetch, upload-pack: --deepen=N extends shallow boundary by N commits
 - upload-pack: add get_reachable_list()
 - upload-pack: split check_unreachable() in two, prep for get_reachable_list()
 - t5500, t5539: tests for shallow depth excluding a ref
 - clone: define shallow clone boundary with --shallow-exclude
 - fetch: define shallow boundary with --shallow-exclude
 - upload-pack: support define shallow boundary by excluding revisions
 - refs: add expand_ref()
 - t5500, t5539: tests for shallow depth since a specific date
 - clone: define shallow clone boundary based on time with --shallow-since
 - fetch: define shallow boundary with --shallow-since
 - upload-pack: add deepen-since to cut shallow repos based on time
 - shallow.c: implement a generic shallow boundary finder based on rev-list
 - fetch-pack: use a separate flag for fetch in deepening mode
 - fetch-pack: use a common function for verbose printing
 - fetch-pack: use skip_prefix() instead of starts_with()
 - upload-pack: move rev-list code out of check_non_tip()
 - upload-pack: tighten number parsing at "deepen" lines
 - upload-pack: use skip_prefix() instead of starts_with()
 - upload-pack: move "unshallow" sending code out of deepen()
 - upload-pack: remove unused variable "backup"
 - upload-pack: move "shallow" sending code out of deepen()
 - upload-pack: move shallow deepen code out of receive_needs()
 - transport-helper.c: refactor set_helper_option()
 - remote-curl.c: convert fetch_git() to use argv_array

 The existing "git fetch --depth=<n>" option was hard to use
 correctly when making the history of an existing shallow clone
 deeper.  A new option, "--deepen=<n>", has been added to make this
 easier to use.  "git clone" also learned "--shallow-since=<date>"
 and "--shallow-exclude=<tag>" options to make it easier to specify
 "I am interested only in the recent N months worth of history" and
 "Give me only the history since that version".

 Needs review.


* mm/diff-renames-default (2016-02-25) 5 commits
  (merged to 'next' on 2016-02-25 at 947c399)
 + diff: activate diff.renames by default
 + log: introduce init_log_defaults()
 + t: add tests for diff.renames (true/false/unset)
 + t4001-diff-rename: wrap file creations in a test
 + Documentation/diff-config: fix description of diff.renames

 The end-user facing Porcelain level commands like "diff" and "log"
 now enables the rename detection by default.

 Will merge to 'master' after 2.8 final.


* mp/upload-pack-use-embedded-args (2016-02-25) 1 commit
  (merged to 'next' on 2016-02-26 at f0a54e5)
 + upload-pack: use argv_array for pack_objects

 The embedded args argv-array in the child process is used to build
 the command line to run pack-objects instead of using a separate
 array of strings.

 Will merge to 'master' after 2.8 final.


* sb/submodule-init (2016-03-15) 2 commits
 - submodule: port init from shell to C
 - submodule: port resolve_relative_url from shell to C
 (this branch uses sb/submodule-parallel-update; is tangled with sb/clone-shallow-passthru.)

 Update of "git submodule" to move pieces of logic to C continues.

 Needs review.
 ($gmane/288824)


* az/p4-bare-no-rebase (2016-02-19) 1 commit
 - git-p4.py: Don't try to rebase on submit from bare repository

 "git p4 submit" attempts to do a rebase, which would fail if done
 in a bare repository.  Not doing this rebase would paper over the
 failure, which is what this patch does, but it is unclear what the
 side effect of not rebasing is.

 Needs a better explanation.


* ss/commit-dry-run-resolve-merge-to-no-op (2016-02-17) 1 commit
 - wt-status.c: set commitable bit if there is a meaningful merge.

 "git commit --dry-run" reported "No, no, you cannot commit." in one
 case where "git commit" would have allowed you to commit, and this
 improves it a little bit ("git commit --dry-run --short" still does
 not give you the correct answer, for example).


* nd/icase (2016-02-15) 12 commits
 - grep.c: reuse "icase" variable
 - diffcore-pickaxe: support case insensitive match on non-ascii
 - diffcore-pickaxe: "share" regex error handling code
 - grep/pcre: support utf-8
 - gettext: add is_utf8_locale()
 - grep/pcre: prepare locale-dependent tables for icase matching
 - grep/icase: avoid kwsset when -F is specified
 - grep/icase: avoid kwsset on literal non-ascii strings
 - test-regex: expose full regcomp() to the command line
 - test-regex: isolate the bug test code
 - grep: break down an "if" stmt in preparation for next changes
 - grep: allow -F -i combination

 "git grep -i" has been taught to fold case in non-ascii locales.

 Needs review.
 ($gmane/286137)


* sb/submodule-parallel-update (2016-03-01) 10 commits
  (merged to 'next' on 2016-03-15 at a8bf6c5)
 + clone: allow an explicit argument for parallel submodule clones
 + submodule update: expose parallelism to the user
 + submodule helper: remove double 'fatal: ' prefix
 + git submodule update: have a dedicated helper for cloning
 + run_processes_parallel: rename parameters for the callbacks
 + run_processes_parallel: treat output of children as byte array
 + submodule update: direct error message to stderr
 + fetching submodules: respect `submodule.fetchJobs` config option
 + submodule-config: drop check against NULL
 + submodule-config: keep update strategy around
 (this branch is used by sb/clone-shallow-passthru and sb/submodule-init.)

 A major part of "git submodule update" has been ported to C to take
 advantage of the recently added framework to run download tasks in
 parallel.

 Will merge to 'master' after 2.8 final.


* dt/refs-backend-lmdb (2016-02-25) 45 commits
 . SQUASH??? Minimum compilation band-aid
 . tests: add ref-storage argument
 . refs: tests for lmdb backend
 . refs: add LMDB refs storage backend
 . refs: break out resolve_ref_unsafe_submodule
 . config: read ref storage config on startup
 . refs: register ref storage backends
 . svn: learn ref-storage argument
 . clone: allow ref storage backend to be set for clone
 . refs: check submodules' ref storage config
 . init: allow alternate ref strorage to be set for new repos
 . refs: always handle non-normal refs in files backend
 . refs: resolve symbolic refs first
 . refs: on symref reflog expire, lock symref not referrent
 . refs: don't dereference on rename
 . refs: allow log-only updates
 . refs: move duplicate check to common code
 . refs: make lock generic
 . refs: handle non-normal ref renames
 . refs: add method to rename refs
 . refs: add methods to init refs db
 . refs: add method for delete_refs
 . refs: add method for initial ref transaction commit
 . refs: add methods for reflog
 . refs: add do_for_each_per_worktree_ref
 . refs: reduce the visibility of do_for_each_ref()
 . refs: add method for do_for_each_ref
 . refs: add methods for misc ref operations
 . refs: add a backend method structure with transaction functions
 . refs: move resolve_ref_unsafe into common code
 . files-backend: break out ref reading
 . refs: move for_each_*ref* functions into common code
 . refs: move head_ref{,_submodule} to the common code
 . Merge branch 'sb/submodule-parallel-update' into dt/refs-backend-lmdb
 . clone: allow an explicit argument for parallel submodule clones
 . submodule update: expose parallelism to the user
 . git submodule update: have a dedicated helper for cloning
 . run_processes_parallel: correctly terminate callbacks with an LF
 . run_processes_parallel: rename parameters for the callbacks
 . run-command: expose default_{start_failure, task_finished}
 . run_processes_parallel: treat output of children as byte array
 . submodule update: direct error message to stderr
 . fetching submodules: respect `submodule.fetchJobs` config option
 . submodule-config: drop check against NULL
 . submodule-config: keep update strategy around

 A reroll exists, but it seems that will further be rerolled.


* ad/cygwin-wants-rename (2015-08-07) 1 commit
 - config.mak.uname: Cygwin needs OBJECT_CREATION_USES_RENAMES

 Will hold.
 ($gmane/275680).


* jc/rerere-multi (2016-03-15) 10 commits
 - rerere: split code to call ll_merge() further
 - rerere: move code related to "forget" together
 - rerere: gc and clear
 - rerere: do use multiple variants
 - t4200: rerere a merge with two identical conflicts
 - rerere: allow multiple variants to exist
 - rerere: delay the recording of preimage
 - rerere: handle leftover rr-cache/$ID directory and postimage files
 - rerere: scan $GIT_DIR/rr-cache/$ID when instantiating a rerere_id
 - rerere: split conflict ID further
 (this branch is used by jc/rerere-multi-wip.)

 "git rerere" can encounter two or more files with the same conflict
 signature that have to be resolved in different ways, but there was
 no way to record these separate resolutions.

 May need further work on forget.


* jc/merge-drop-old-syntax (2015-04-29) 1 commit
 - merge: drop 'git merge <message> HEAD <commit>' syntax

 Stop supporting "git merge <message> HEAD <commit>" syntax that has
 been deprecated since October 2007.  It has been reported that
 git-gui still uses the deprecated syntax, which needs to be fixed
 before this final step can proceed.
 ($gmane/282594)

^ permalink raw reply	[relevance 3%]

* What's cooking in git.git (Mar 2016, #05; Fri, 25)
@ 2016-03-25 22:03  2% Junio C Hamano
  0 siblings, 0 replies; 200+ results
From: Junio C Hamano @ 2016-03-25 22:03 UTC (permalink / raw)
  To: git

Here are the topics that have been cooking.  Commits prefixed with
'-' are only in 'pu' (proposed updates) while commits prefixed with
'+' are in 'next'.  The ones marked with '.' do not appear in any of
the integration branches, but I am still holding onto them.

We'll have 2.8 final early next week, hopefully.

You can find the changes described here in the integration branches
of the repositories listed at

    http://git-blame.blogspot.com/p/git-public-repositories.html

--------------------------------------------------
[New Topics]

* ak/use-hashmap-iter-first-in-submodule-config (2016-03-23) 1 commit
 - submodule-config: use hashmap_iter_first()

 Minor code cleanup.

 Will merge to 'next'.


* ky/branch-d-worktree (2016-03-25) 1 commit
 - branch -d: refuse deleting a branch which is currently checked out

 When "git worktree" feature is in use, "git branch -d" allowed
 deletion of a branch that is checked out in another worktree

 Will merge to 'next'.


* ky/branch-m-worktree (2016-03-25) 4 commits
 - branch -m: update all per-worktree HEADs
 - refs: add create_symref_common_dir as a variation of create_symref
 - refs: add REF_COMMON_DIR flag
 - refs: add new flag RESOLVE_REF_COMMON_DIR to resolve_ref_unsafe

 When "git worktree" feature is in use, "git branch -m" renamed a
 branch that is checked out in another worktree without adjusting
 the HEAD symbolic ref for the worktree.

 Needs review.


* nd/apply-doc (2016-03-24) 2 commits
 - git-apply.txt: mention the behavior inside a subdir
 - git-apply.txt: remove a space

 Will merge to 'next'.


* nd/apply-report-skip (2016-03-24) 1 commit
 - apply: report patch skipping in verbose mode

 "git apply -v" learned to report paths in the patch that were
 skipped via --include/--exclude mechanism or being outside the
 current working directory.

 Will merge to 'next'.


* pb/opt-cmdmode-doc (2016-03-25) 1 commit
 - api-parse-options.txt: document OPT_CMDMODE()

 Minor API documentation update.


* rt/completion-help (2016-03-24) 2 commits
 - completion: add 'revisions' and 'everyday' to 'git help'
 - completion: add option '--guides' to 'git help'

 Shell completion (in contrib/) updates.


* rt/rebase-i-shorten-stop-report (2016-03-24) 1 commit
 - rebase-i: print abbreviated hash when stop for editing

 The commit object name reported when "rebase -i" stops has been
 shortened.

 Needs a better explanation.


* sb/submodule-helper-prefix (2016-03-25) 5 commits
 - submodule--helper clone: lose the extra prefix option
 - submodule sync: test syncing one submodule
 - submodule update: add test for recursive from non root dir
 - submodule--helper list: lose the extra prefix option
 - submodule: prepare recursive path from non root directory

--------------------------------------------------
[Graduated to "master"]

* js/mingw-tests-2.8 (2016-03-23) 4 commits
  (merged to 'next' on 2016-03-23 at aeec80e)
 + mingw: skip some tests in t9115 due to file name issues
 + t1300: fix the new --show-origin tests on Windows
 + t1300-repo-config: make it resilient to being run via 'sh -x'
 + config --show-origin: report paths with forward slashes

 Last-minute tweaks to test to pass on Windows.


* ls/p4-doc-markup (2016-03-23) 2 commits
  (merged to 'next' on 2016-03-23 at 94a6275)
 + Documentation: fix git-p4 AsciiDoc formatting
 + Documentation: use ASCII quotation marks in git-p4

 Trivially OK doc cleanup.


* sb/submodule-module-list-pathspec-fix (2016-03-22) 1 commit
  (merged to 'next' on 2016-03-23 at 67fe17c)
 + submodule: fix regression for deinit without submodules

 A fix to a small regression in module_list helper that was
 rewritten in C in 2.7.x timeframe.


--------------------------------------------------
[Stalled]

* ec/annotate-deleted (2015-11-20) 1 commit
 - annotate: skip checking working tree if a revision is provided

 Usability fix for annotate-specific "<file> <rev>" syntax with deleted
 files.

 Waiting for review.


* dg/subtree-rebase-test (2016-01-19) 1 commit
 - contrib/subtree: Add a test for subtree rebase that loses commits

 Reviewed up to v5.
 Will be rerolled.
 ($gmane/284426)


* js/am-3-merge-recursive-direct (2015-10-12) 2 commits
 - am: make a direct call to merge_recursive
 - merge_recursive_options: introduce the "gently" flag

 The merge_recursive_generic() function has been made a bit safer to
 call from inside a process.  "git am -3" was taught to make a direct
 call to the function when falling back to three-way merge.

 Being able to make a direct call would be good in general, but as a
 performance thing, the change needs to be backed up by numbers.

 Needs review.

 I haven't gone through the "gently" change with fine toothed comb;
 I can see that the change avoids calling die(), but I haven't made
 sure that the program states (e.g. what's in the in-core index) are
 adjusted sensibly when it returns to the caller instead of dying,
 or the codepaths that used to die() are free of resource leaks.
 The original code certainly did not care the program states at the
 point of dying exactly because it knew it is going to exit, but now
 they have to care, and they need to be audited.


* dk/gc-more-wo-pack (2016-01-13) 4 commits
 - gc: clean garbage .bitmap files from pack dir
 - t5304: ensure non-garbage files are not deleted
 - t5304: test .bitmap garbage files
 - prepare_packed_git(): find more garbage

 Follow-on to dk/gc-idx-wo-pack topic, to clean up stale
 .bitmap and .keep files.

 Waiting for a reroll.
 ($gmane/284368).


* jc/diff-b-m (2015-02-23) 5 commits
 . WIPWIP
 . WIP: diff-b-m
 - diffcore-rename: allow easier debugging
 - diffcore-rename.c: add locate_rename_src()
 - diffcore-break: allow debugging

 "git diff -B -M" produced incorrect patch when the postimage of a
 completely rewritten file is similar to the preimage of a removed
 file; such a resulting file must not be expressed as a rename from
 other place.

 The fix in this patch is broken, unfortunately.
 Will discard.

--------------------------------------------------
[Cooking]

* jk/check-repository-format (2016-03-11) 10 commits
 - verify_repository_format: mark messages for translation
 - setup: drop repository_format_version global
 - setup: unify repository version callbacks
 - init: use setup.c's repo version verification
 - setup: refactor repo format reading and verification
 - config: drop git_config_early
 - check_repository_format_gently: stop using git_config_early
 - lazily load core.sharedrepository
 - wrap shared_repository global in get/set accessors
 - setup: document check_repository_format()

 The repository set-up sequence has been streamlined (the biggest
 change is that there is no longer git_config_early()), so that we
 do not attempt to look into refs/* when we know we do not have a
 Git repository.


* mj/pull-rebase-autostash (2016-03-21) 2 commits
  (merged to 'next' on 2016-03-23 at ebf1afa)
 + pull --rebase: add --[no-]autostash flag
 + git-pull.c: introduce git_pull_config()

 "git pull --rebase" learned "--[no-]autostash" option, so that
 the rebase.autostash configuration variable set to true can be
 overridden from the command line.

 Will merge to 'master' after 2.8 final.


* pb/commit-verbose-config (2016-03-14) 1 commit
 - commit: add a commit.verbose config variable
 (this branch uses pb/t7502-drop-dup.)

 "git commit" learned to pay attention to "commit.verbose"
 configuration variable and act as if "--verbose" option was given
 from the command line.


* pb/t7502-drop-dup (2016-03-11) 1 commit
  (merged to 'next' on 2016-03-15 at 037c877)
 + t/t7502 : drop duplicate test
 (this branch is used by pb/commit-verbose-config.)

 Code clean-up.

 Will merge to 'master' after 2.8 final.


* ss/commit-squash-msg (2016-03-21) 1 commit
  (merged to 'next' on 2016-03-23 at 0b72631)
 + commit: do not lose SQUASH_MSG contents

 When "git merge --squash" stopped due to conflict, the concluding
 "git commit" failed to read in the SQUASH_MSG that shows the log
 messages from all the squashed commits.

 Will merge to 'master' after 2.8 final.


* ls/p4-map-user (2016-03-15) 1 commit
  (merged to 'next' on 2016-03-23 at 9e0a4f5)
 + git-p4: map a P4 user to Git author name and email address

 Will merge to 'master' after 2.8 final.


* jc/merge-refuse-new-root (2016-03-23) 1 commit
  (merged to 'next' on 2016-03-23 at d7da4cf)
 + merge: refuse to create too cool a merge by default

 "git merge" used to allow merging two branches that have no common
 base by default, which led to a brand new history of an existing
 project created and then get pulled by an unsuspecting maintainer,
 which allowed an unnecessary parallel history merged into the
 existing project.  The command has been taught not to allow this by
 default, with an escape hatch "--allow-unrelated-histories" option
 to be used in a rare event that merges histories of two projects
 that started their lives independently.

 Will merge to 'master' after 2.8 final.


* jc/rerere-multi-wip (2016-03-21) 1 commit
 . WIP forget
 (this branch uses jc/rerere-multi.)


* jk/credential-cache-comment-exit (2016-03-18) 1 commit
  (merged to 'next' on 2016-03-23 at d2b8cc7)
 + credential-cache--daemon: clarify "exit" action semantics

 Will merge to 'master' after 2.8 final.


* jk/send-email-rtrim-mailrc-alias (2016-03-18) 1 commit
  (merged to 'next' on 2016-03-23 at 74f1f44)
 + send-email: ignore trailing whitespace in mailrc alias file

 Will merge to 'master' after 2.8 final.


* jk/test-httpd-config-nosystem (2016-03-18) 1 commit
  (merged to 'next' on 2016-03-23 at 245263b)
 + t/lib-httpd: pass through GIT_CONFIG_NOSYSTEM env

 Will merge to 'master' after 2.8 final.


* lt/pretty-expand-tabs (2016-03-23) 5 commits
 - pretty-print: teach "--no-expand-tabs" option to "git log"
 - pretty-print: limit expand-tabs to selected --pretty formats
 - pretty-print: further abstract out pp_handle_indent()
 - pretty-print: simplify the interaction between pp_handle_indent() and its caller
 - pretty-print: de-tabify indented logs to make things line up properly

 May need a UI rework.
 Needs reordering.


* sb/clone-shallow-passthru (2016-03-23) 3 commits
 - clone: add t5614 to test cloning submodules with shallowness involved
 - submodule clone: pass along `local` option
 - clone: add `--shallow-submodules` flag
 (this branch uses sb/submodule-parallel-update; is tangled with sb/submodule-init.)

 "git clone" learned "--shallow-submodules" option.

 Needs review.


* sb/clone-t57-t56 (2016-03-16) 1 commit
  (merged to 'next' on 2016-03-23 at 5df850d)
 + clone tests: rename t57* => t56*

 Rename bunch of tests on "git clone" for better organization.

 Will merge to 'master' after 2.8 final.


* sb/rebase-x (2016-03-18) 2 commits
  (merged to 'next' on 2016-03-23 at ef8861b)
 + t3404: cleanup double empty lines between tests
 + rebase: decouple --exec from --interactive

 "git rebase -x" can be used without passing "-i" option.

 Will merge to 'master' after 2.8 final.


* cc/apply (2016-03-22) 2 commits
  (merged to 'next' on 2016-03-24 at 70623f2)
 + apply: remove unused call to free() in gitdiff_{old,new}name()
 + builtin/apply: get rid of useless 'name' variable

 Code clean-up.

 Will merge to 'master' after 2.8 final.


* dt/index-helper (2016-03-23) 18 commits
 - SQUASH - minimum compilation fix
 - read-cache: config for waiting for index-helper
 - index-helper: optionally automatically run
 - index-helper: autorun mode
 - index-helper: don't run if already running
 - index-helper: kill mode
 - unpack-trees: preserve index extensions
 - update-index: enable/disable watchman support
 - index-helper: use watchman to avoid refreshing index with lstat()
 - Add watchman support to reduce index refresh cost
 - read-cache: invalidate untracked cache data when reading WAMA
 - read-cache: add watchman 'WAMA' extension
 - index-helper: add --detach
 - daemonize(): set a flag before exiting the main process
 - index-helper: add --strict
 - index-helper: new daemon for caching index and related stuff
 - read-cache: allow to keep mmap'd memory after reading
 - read-cache.c: fix constness of verify_hdr()


* jv/merge-nothing-into-void (2016-03-23) 1 commit
  (merged to 'next' on 2016-03-23 at 40b905d)
 + merge: fix NULL pointer dereference when merging nothing into void

 "git merge FETCH_HEAD" dereferenced NULL pointer when merging
 nothing into an unborn history (which is arguably unusual usage,
 which perhaps was the reason why nobody noticed it).

 Will merge to 'master' after 2.8 final.


* la/tag-force-signing-annotated-tags (2016-03-22) 1 commit
  (merged to 'next' on 2016-03-24 at 424da3f)
 + tag: add the option to force signing of annotated tags

 "git tag" can create an annotated tag without explicitly given an
 "-a" (or "-s") option (i.e. when a tag message is given).  A new
 configuration variable, tag.forceSignAnnotated, can be used to tell
 the command to create signed tag in such a situation.

 Will merge to 'master' after 2.8 final.


* cc/doc-recommend-performance-trace-to-file (2016-03-07) 1 commit
  (merged to 'next' on 2016-03-23 at 086b9f2)
 + Documentation: talk about pager in api-trace.txt

 Will merge to 'master' after 2.8 final.


* da/mergetool-delete-delete-conflict (2016-03-10) 2 commits
  (merged to 'next' on 2016-03-15 at 281a81a)
 + mergetool: honor tempfile configuration when resolving delete conflicts
 + mergetool: support delete/delete conflicts

 "git mergetool" did not work well with conflicts that both sides
 deleted.

 Will merge to 'master' after 2.8 final.


* es/test-gpg-tags (2016-03-06) 4 commits
  (merged to 'next' on 2016-03-15 at 617119f)
 + t6302: skip only signed tags rather than all tests when GPG is missing
 + t6302: also test annotated in addition to signed tags
 + t6302: normalize names and descriptions of signed tags
 + lib-gpg: drop unnecessary "missing GPG" warning

 A test for tags has been restructured so that more parts of it can
 easily be run on a platform without a working GnuPG.

 Will merge to 'master' after 2.8 final.


* jk/getwholeline-getdelim-empty (2016-03-05) 1 commit
  (merged to 'next' on 2016-03-15 at e70d4bd)
 + strbuf_getwholeline: NUL-terminate getdelim buffer on error

 strbuf_getwholeline() did not NUL-terminate the buffer on certain
 corner cases in its error codepath.

 Will merge to 'master' after 2.8 final.


* jk/startup-info (2016-03-07) 6 commits
  (merged to 'next' on 2016-03-15 at eb95e5f)
 + use setup_git_directory() in test-* programs
 + grep: turn off gitlink detection for --no-index
 + mailmap: do not resolve blobs in a non-repository
 + remote: don't resolve HEAD in non-repository
 + setup: set startup_info->have_repository more reliably
 + setup: make startup_info available everywhere

 The startup_info data, which records if we are working inside a
 repository (among other things), are now uniformly available to Git
 subcommand implementations, and Git avoids attempting to touch
 references when we are not in a repository.

 Will merge to 'master' after 2.8 final.


* rj/xdiff-prepare-plug-leak-on-error-codepath (2016-03-04) 2 commits
  (merged to 'next' on 2016-03-15 at f72755e)
 + xdiff/xprepare: fix a memory leak
 + xdiff/xprepare: use the XDF_DIFF_ALG() macro to access flag bits

 A small memory leak in an error codepath has been plugged in xdiff
 code.

 Will merge to 'master' after 2.8 final.


* jc/index-pack (2016-03-03) 2 commits
  (merged to 'next' on 2016-03-15 at 42efaa7)
 + index-pack: add a helper function to derive .idx/.keep filename
 + Merge branch 'jc/maint-index-pack-keep' into jc/index-pack
 (this branch is used by jc/bundle; uses jc/maint-index-pack-keep; is tangled with jc/index-pack-clone-bundle.)

 Code clean-up.

 Will merge to 'master' after 2.8 final.


* jc/maint-index-pack-keep (2016-03-03) 1 commit
  (merged to 'next' on 2016-03-04 at bc1d37a)
 + index-pack: correct --keep[=<msg>]
 (this branch is used by jc/bundle, jc/index-pack and jc/index-pack-clone-bundle.)

 "git index-pack --keep[=<msg>] pack-$name.pack" simply did not work.

 Will merge to 'master' after 2.8 final.


* mm/readme-markdown (2016-02-27) 1 commit
  (merged to 'next' on 2016-03-01 at 81f3858)
 + README.md: don't take 'commandname' literally

 The top-level README file has been updated to be more appropriate
 for the sign on the front door to welcome new acquaintances to Git
 by toning down inside jokes and making it into MarkDown.

 Will merge to 'master' after 2.8 final.


* gf/fetch-pack-direct-object-fetch (2016-03-05) 2 commits
  (merged to 'next' on 2016-03-06 at 5628860)
 + fetch-pack: update the documentation for "<refs>..." arguments
  (merged to 'next' on 2016-03-04 at 49199e0)
 + fetch-pack: fix object_id of exact sha1

 Fetching of history by naming a commit object name directly didn't
 work across remote-curl transport.

 Will merge to 'master' after 2.8 final.


* jk/add-i-highlight (2016-02-28) 1 commit
  (merged to 'next' on 2016-03-04 at 4ac3aa1)
 + add--interactive: allow custom diff highlighting programs

 Will merge to 'master' after 2.8 final.


* jk/config-get-urlmatch (2016-02-28) 3 commits
  (merged to 'next' on 2016-03-04 at feeb192)
 + Documentation/git-config: fix --get-all description
 + Documentation/git-config: use bulleted list for exit codes
 + config: fail if --get-urlmatch finds no value

 "git config --get-urlmatch", unlike other variants of the "git
 config --get" family, did not signal error with its exit status
 when there was no matching configuration.

 Will merge to 'master' after 2.8 final.


* jk/rev-parse-local-env-vars (2016-02-29) 2 commits
  (merged to 'next' on 2016-03-04 at a0300d5)
 + rev-parse: let some options run outside repository
 + t1515: add tests for rev-parse out-of-repo helpers

 The "--local-env-vars" and "--resolve-git-dir" options of "git
 rev-parse" failed to work outside a repository when the command's
 option parsing was rewritten in 1.8.5 era.

 Will merge to 'master' after 2.8 final.


* sg/completion-updates (2016-02-28) 21 commits
 - completion: cache the path to the repository
 - completion: extract repository discovery from __gitdir()
 - completion: don't guard git executions with __gitdir()
 - completion: consolidate silencing errors from git commands
 - completion: don't use __gitdir() for git commands
 - completion: respect 'git -C <path>'
 - completion: fix completion after 'git -C <path>'
 - completion: don't offer commands when 'git --opt' needs an argument
 - rev-parse: add '--absolute-git-dir' option
 - completion: list short refs from a remote given as a URL
 - completion: don't list 'HEAD' when trying refs completion outside of a repo
 - completion: list refs from remote when remote's name matches a directory
 - completion: respect 'git --git-dir=<path>' when listing remote refs
 - completion: fix most spots not respecting 'git --git-dir=<path>'
 - completion: ensure that the repository path given on the command line exists
 - completion tests: add tests for the __git_refs() helper function
 - completion tests: check __gitdir()'s output in the error cases
 - completion tests: consolidate getting path of current working directory
 - completion tests: make the $cur variable local to the test helper functions
 - completion tests: don't add test cruft to the test repository
 - completion: improve __git_refs()'s in-code documentation

 Will be rerolled.
 ($gmane/287839)


* mm/lockfile-error-message (2016-03-01) 2 commits
  (merged to 'next' on 2016-03-04 at 04ed7e6)
 + lockfile: improve error message when lockfile exists
 + lockfile: mark strings for translation

 Will merge to 'master' after 2.8 final.


* ss/exc-flag-is-a-collection-of-bits (2016-03-01) 1 commit
  (merged to 'next' on 2016-03-04 at 5ea48c7)
 + dir: store EXC_FLAG_* values in unsigned integers

 Will merge to 'master' after 2.8 final.


* jc/bundle (2016-03-03) 6 commits
 - index-pack: --clone-bundle option
 - Merge branch 'jc/index-pack' into jc/bundle
 - bundle v3: the beginning
 - bundle: keep a copy of bundle file name in the in-core bundle header
 - bundle: plug resource leak
 - bundle doc: 'verify' is not about verifying the bundle
 (this branch uses jc/index-pack and jc/maint-index-pack-keep; is tangled with jc/index-pack-clone-bundle.)

 The beginning of "split bundle", which could be one of the
 ingredients to allow "git clone" traffic off of the core server
 network to CDN.


* ss/receive-pack-parse-options (2016-03-01) 1 commit
  (merged to 'next' on 2016-03-04 at c577ea7)
 + builtin/receive-pack.c: use parse_options API

 The command line argument parser for "receive-pack" has been
 rewritten to use parse-options.

 Will merge to 'master' after 2.8 final.


* jk/credential-clear-config (2016-02-26) 1 commit
  (merged to 'next' on 2016-03-04 at f7b26b7)
 + credential: let empty credential specs reset helper list

 The credential.helper configuration variable is cumulative and
 there is no good way to override it from the command line.  As
 a special case, giving an empty string as its value now serves
 as the signal to clear the values specified in various files.

 Will merge to 'master' after 2.8 final.


* jk/submodule-c-credential (2016-03-23) 7 commits
  (merged to 'next' on 2016-03-23 at 952367a)
 + git_config_push_parameter: handle empty GIT_CONFIG_PARAMETERS
  (merged to 'next' on 2016-03-15 at 81df5b1)
 + git: submodule honor -c credential.* from command line
 + quote: implement sq_quotef()
 + submodule: fix segmentation fault in submodule--helper clone
 + submodule: fix submodule--helper clone usage
 + submodule: check argc count for git submodule--helper clone
 + submodule: don't pass empty string arguments to submodule--helper clone

 "git -c credential.<var>=<value> submodule" can now be used to
 propagate configuration variables related to credential helper
 down to the submodules.

 Will merge to 'master' after 2.8 final.


* nd/shallow-deepen (2016-02-23) 25 commits
 - fetch, upload-pack: --deepen=N extends shallow boundary by N commits
 - upload-pack: add get_reachable_list()
 - upload-pack: split check_unreachable() in two, prep for get_reachable_list()
 - t5500, t5539: tests for shallow depth excluding a ref
 - clone: define shallow clone boundary with --shallow-exclude
 - fetch: define shallow boundary with --shallow-exclude
 - upload-pack: support define shallow boundary by excluding revisions
 - refs: add expand_ref()
 - t5500, t5539: tests for shallow depth since a specific date
 - clone: define shallow clone boundary based on time with --shallow-since
 - fetch: define shallow boundary with --shallow-since
 - upload-pack: add deepen-since to cut shallow repos based on time
 - shallow.c: implement a generic shallow boundary finder based on rev-list
 - fetch-pack: use a separate flag for fetch in deepening mode
 - fetch-pack: use a common function for verbose printing
 - fetch-pack: use skip_prefix() instead of starts_with()
 - upload-pack: move rev-list code out of check_non_tip()
 - upload-pack: tighten number parsing at "deepen" lines
 - upload-pack: use skip_prefix() instead of starts_with()
 - upload-pack: move "unshallow" sending code out of deepen()
 - upload-pack: remove unused variable "backup"
 - upload-pack: move "shallow" sending code out of deepen()
 - upload-pack: move shallow deepen code out of receive_needs()
 - transport-helper.c: refactor set_helper_option()
 - remote-curl.c: convert fetch_git() to use argv_array

 The existing "git fetch --depth=<n>" option was hard to use
 correctly when making the history of an existing shallow clone
 deeper.  A new option, "--deepen=<n>", has been added to make this
 easier to use.  "git clone" also learned "--shallow-since=<date>"
 and "--shallow-exclude=<tag>" options to make it easier to specify
 "I am interested only in the recent N months worth of history" and
 "Give me only the history since that version".

 Needs review.


* mm/diff-renames-default (2016-02-25) 5 commits
  (merged to 'next' on 2016-02-25 at 947c399)
 + diff: activate diff.renames by default
 + log: introduce init_log_defaults()
 + t: add tests for diff.renames (true/false/unset)
 + t4001-diff-rename: wrap file creations in a test
 + Documentation/diff-config: fix description of diff.renames

 The end-user facing Porcelain level commands like "diff" and "log"
 now enables the rename detection by default.

 Will merge to 'master' after 2.8 final.


* mp/upload-pack-use-embedded-args (2016-02-25) 1 commit
  (merged to 'next' on 2016-02-26 at f0a54e5)
 + upload-pack: use argv_array for pack_objects

 The embedded args argv-array in the child process is used to build
 the command line to run pack-objects instead of using a separate
 array of strings.

 Will merge to 'master' after 2.8 final.


* sb/submodule-init (2016-03-15) 2 commits
 - submodule: port init from shell to C
 - submodule: port resolve_relative_url from shell to C
 (this branch uses sb/submodule-parallel-update; is tangled with sb/clone-shallow-passthru.)

 Update of "git submodule" to move pieces of logic to C continues.

 Needs review.
 ($gmane/288824)


* az/p4-bare-no-rebase (2016-02-19) 1 commit
 - git-p4.py: Don't try to rebase on submit from bare repository

 "git p4 submit" attempts to do a rebase, which would fail if done
 in a bare repository.  Not doing this rebase would paper over the
 failure, which is what this patch does, but it is unclear what the
 side effect of not rebasing is.

 Needs a better explanation.


* ss/commit-dry-run-resolve-merge-to-no-op (2016-02-17) 1 commit
 - wt-status.c: set commitable bit if there is a meaningful merge.

 "git commit --dry-run" reported "No, no, you cannot commit." in one
 case where "git commit" would have allowed you to commit, and this
 improves it a little bit ("git commit --dry-run --short" still does
 not give you the correct answer, for example).


* nd/icase (2016-02-15) 12 commits
 - grep.c: reuse "icase" variable
 - diffcore-pickaxe: support case insensitive match on non-ascii
 - diffcore-pickaxe: "share" regex error handling code
 - grep/pcre: support utf-8
 - gettext: add is_utf8_locale()
 - grep/pcre: prepare locale-dependent tables for icase matching
 - grep/icase: avoid kwsset when -F is specified
 - grep/icase: avoid kwsset on literal non-ascii strings
 - test-regex: expose full regcomp() to the command line
 - test-regex: isolate the bug test code
 - grep: break down an "if" stmt in preparation for next changes
 - grep: allow -F -i combination

 "git grep -i" has been taught to fold case in non-ascii locales.

 Needs review.
 ($gmane/286137)


* sb/submodule-parallel-update (2016-03-01) 10 commits
  (merged to 'next' on 2016-03-15 at a8bf6c5)
 + clone: allow an explicit argument for parallel submodule clones
 + submodule update: expose parallelism to the user
 + submodule helper: remove double 'fatal: ' prefix
 + git submodule update: have a dedicated helper for cloning
 + run_processes_parallel: rename parameters for the callbacks
 + run_processes_parallel: treat output of children as byte array
 + submodule update: direct error message to stderr
 + fetching submodules: respect `submodule.fetchJobs` config option
 + submodule-config: drop check against NULL
 + submodule-config: keep update strategy around
 (this branch is used by sb/clone-shallow-passthru and sb/submodule-init.)

 A major part of "git submodule update" has been ported to C to take
 advantage of the recently added framework to run download tasks in
 parallel.

 Will merge to 'master' after 2.8 final.


* dt/refs-backend-lmdb (2016-02-25) 45 commits
 . SQUASH??? Minimum compilation band-aid
 . tests: add ref-storage argument
 . refs: tests for lmdb backend
 . refs: add LMDB refs storage backend
 . refs: break out resolve_ref_unsafe_submodule
 . config: read ref storage config on startup
 . refs: register ref storage backends
 . svn: learn ref-storage argument
 . clone: allow ref storage backend to be set for clone
 . refs: check submodules' ref storage config
 . init: allow alternate ref strorage to be set for new repos
 . refs: always handle non-normal refs in files backend
 . refs: resolve symbolic refs first
 . refs: on symref reflog expire, lock symref not referrent
 . refs: don't dereference on rename
 . refs: allow log-only updates
 . refs: move duplicate check to common code
 . refs: make lock generic
 . refs: handle non-normal ref renames
 . refs: add method to rename refs
 . refs: add methods to init refs db
 . refs: add method for delete_refs
 . refs: add method for initial ref transaction commit
 . refs: add methods for reflog
 . refs: add do_for_each_per_worktree_ref
 . refs: reduce the visibility of do_for_each_ref()
 . refs: add method for do_for_each_ref
 . refs: add methods for misc ref operations
 . refs: add a backend method structure with transaction functions
 . refs: move resolve_ref_unsafe into common code
 . files-backend: break out ref reading
 . refs: move for_each_*ref* functions into common code
 . refs: move head_ref{,_submodule} to the common code
 . Merge branch 'sb/submodule-parallel-update' into dt/refs-backend-lmdb
 . clone: allow an explicit argument for parallel submodule clones
 . submodule update: expose parallelism to the user
 . git submodule update: have a dedicated helper for cloning
 . run_processes_parallel: correctly terminate callbacks with an LF
 . run_processes_parallel: rename parameters for the callbacks
 . run-command: expose default_{start_failure, task_finished}
 . run_processes_parallel: treat output of children as byte array
 . submodule update: direct error message to stderr
 . fetching submodules: respect `submodule.fetchJobs` config option
 . submodule-config: drop check against NULL
 . submodule-config: keep update strategy around

 A reroll exists, but it seems that will further be rerolled.


* ad/cygwin-wants-rename (2015-08-07) 1 commit
 - config.mak.uname: Cygwin needs OBJECT_CREATION_USES_RENAMES

 Will hold.
 ($gmane/275680).


* jc/rerere-multi (2016-03-15) 10 commits
 - rerere: split code to call ll_merge() further
 - rerere: move code related to "forget" together
 - rerere: gc and clear
 - rerere: do use multiple variants
 - t4200: rerere a merge with two identical conflicts
 - rerere: allow multiple variants to exist
 - rerere: delay the recording of preimage
 - rerere: handle leftover rr-cache/$ID directory and postimage files
 - rerere: scan $GIT_DIR/rr-cache/$ID when instantiating a rerere_id
 - rerere: split conflict ID further
 (this branch is used by jc/rerere-multi-wip.)

 "git rerere" can encounter two or more files with the same conflict
 signature that have to be resolved in different ways, but there was
 no way to record these separate resolutions.

 May need further work on forget.


* jc/merge-drop-old-syntax (2015-04-29) 1 commit
 - merge: drop 'git merge <message> HEAD <commit>' syntax

 Stop supporting "git merge <message> HEAD <commit>" syntax that has
 been deprecated since October 2007.  It has been reported that
 git-gui still uses the deprecated syntax, which needs to be fixed
 before this final step can proceed.
 ($gmane/282594)

^ permalink raw reply	[relevance 2%]

* What's cooking in git.git (Apr 2016, #01; Fri, 1)
@ 2016-04-01 22:47  2% Junio C Hamano
  0 siblings, 0 replies; 200+ results
From: Junio C Hamano @ 2016-04-01 22:47 UTC (permalink / raw)
  To: git

Here are the topics that have been cooking.  Commits prefixed with
'-' are only in 'pu' (proposed updates) while commits prefixed with
'+' are in 'next'.  The ones marked with '.' do not appear in any of
the integration branches, but I am still holding onto them.

There are quite a few topics that have been cooking in 'next' during
the pre-2.8 freeze period that are ready to be merged to 'master';
the first batch will be merged early next week, and then the tip of
'next' will be rebuilt on top sometime mid next week.  Let's start
looking at new shiny toys after all that happens.

You can find the changes described here in the integration branches
of the repositories listed at

    http://git-blame.blogspot.com/p/git-public-repositories.html

--------------------------------------------------
[New Topics]

* jn/mergetools-examdiff (2016-03-28) 2 commits
 - mergetools: add support for ExamDiff
 - mergetools: create mergetool_find_win32_cmd() helper function for winmerge

 "git mergetools" learned to drive ExamDiff.

 Waiting for an Ack by the area expert.


* kn/for-each-tag-branch (2016-03-30) 1 commit
 - for-each-ref: fix description of '--contains' in manpage

 Docfix.

 Will merge to 'next'.


* kn/ref-filter-branch-list (2016-03-30) 16 commits
 . branch: implement '--format' option
 . branch: use ref-filter printing APIs
 . branch, tag: use porcelain output
 . ref-filter: allow porcelain to translate messages in the output
 . ref-filter: add support for %(refname:dir) and %(refname:base)
 . ref-filter: introduce refname_atom_parser()
 . ref-filter: introduce symref_atom_parser()
 . ref-filter: make "%(symref)" atom work with the ':short' modifier
 . ref-filter: add support for %(upstream:track,nobracket)
 . ref-filter: make %(upstream:track) prints "[gone]" for invalid upstreams
 . ref-filter: introduce format_ref_array_item()
 . ref-filter: move get_head_description() from branch.c
 . ref-filter: modify "%(objectname:short)" to take length
 . ref-filter: implement %(if:equals=<string>) and %(if:notequals=<string>)
 . ref-filter: include reference to 'used_atom' within 'atom_value'
 . ref-filter: implement %(if), %(then), and %(else) atoms

 The code to list branches in "git branch" has been consolidated
 with the more generic ref-filter API.

 Will be rerolled.


* oa/doc-diff-check (2016-03-29) 1 commit
 - Documentation: git diff --check detects conflict markers

 Docfix.

 Will merge to 'next'.


* rz/worktree-no-checkout (2016-03-29) 1 commit
 - worktree: add: introduce --checkout option

 "git worktree add" can be given "--no-checkout" option to only
 create an empty worktree without checking out the files.

 Will merge to 'next'.


* sb/misc-cleanups (2016-04-01) 4 commits
 - credential-cache, send_request: close fd when done
 - bundle: don't leak an fd in case of early return
 - abbrev_sha1_in_line: don't leak memory
 - notes: don't leak memory in git_config_get_notes_strategy

 Assorted minor clean-ups.

 Will merge to 'next'.


* sb/submodule-helper-clone-regression-fix (2016-04-01) 6 commits
 - submodule--helper, module_clone: catch fprintf failure
 - submodule--helper: do not borrow absolute_path() result for too long
 - submodule--helper, module_clone: always operate on absolute paths
 - submodule--helper clone: create the submodule path just once
 - submodule--helper: fix potential NULL-dereference
 - recursive submodules: test for relative paths

 A partial rewrite of "git submodule" in the 2.7 timeframe changed
 the way the gitdir: pointer in the submodules point at the real
 repository location to use absolute paths by accident.  This has
 been corrected.

 Any further comments?  Otherwise will merge to 'next'.


* sb/submodule-path-misc-bugs (2016-03-30) 6 commits
 - t7407: make expectation as clear as possible
 - submodule update: test recursive path reporting from subdirectory
 - submodule update: align reporting path for custom command execution
 - submodule status: correct path handling in recursive submodules
 - submodule update --init: correct path handling in recursive submodules
 - submodule foreach: correct path display in recursive submodules

 "git submodule" reports the paths of submodules the command
 recurses into, but this was incorrect when the command was not run
 from the root level of the superproject.

 Any further comments?  Otherwise will merge to 'next'.


* sg/diff-multiple-identical-renames (2016-03-30) 1 commit
 - diffcore: fix iteration order of identical files during rename detection

 "git diff -M" used to work better when two originally identical
 files A and B got renamed to X/A and X/B by pairing A to X/A and B
 to X/B, but this was broken in 2.0 timeframe.

 Will merge to 'next'.


* sk/send-pack-all-fix (2016-03-31) 1 commit
 - git-send-pack: fix --all option when used with directory

 "git send-pack --all <there>" was broken when its command line
 option parsing was written in 2.6 timeframe.

 Will merge to 'next'.


* ss/msvc (2016-03-30) 2 commits
 - MSVC: use shipped headers instead of fallback definitions
 - MSVC: vsnprintf in Visual Studio 2015 doesn't need SNPRINTF_SIZE_CORR any more

 Will merge to 'next'.


* xy/format-patch-base (2016-03-31) 4 commits
 - format-patch: introduce format.base configuration
 - format-patch: introduce --base=auto option
 - format-patch: add '--base' option to record base tree info
 - patch-ids: make commit_patch_id() a public helper function

 "git format-patch" learned a new "--base" option to record what
 (public, well-known) commit the original series was built on in
 its output.

 Will be rerolled.
 ($gmane/290365)


* da/user-useconfigonly (2016-04-01) 2 commits
 - ident: give "please tell me" message upon useConfigOnly error
 - ident: check for useConfigOnly before auto-detection of name/email

 The "user.useConfigOnly" configuration variable makes it an error
 if users do not explicitly set user.name and user.email.  However,
 its check was not done early enough and allowed another error to
 trigger, reporting that the default value we guessed from the
 system setting was unusable.  This was a suboptimal end-user
 experience as we want the users to set user.name/user.email without
 relying on the auto-detection at all.

 Waiting for Acks.
 ($gmane/290340)


* tb/safe-crlf-output-fix (2016-04-01) 7 commits
 - convert.c: more safer crlf handling with text attribute
 - correct blame for files commited with CRLF
 - convert: unify the "auto" handling of CRLF
 - t0027: test cases for combined attributes
 - convert: allow core.autocrlf=input and core.eol=crlf
 - convert.c: stream and early out
 - read-cache: factor out get_sha1_from_index() helper

 The "safe CRLF" facility disables line-end conversion from CRLF to
 LF when checking in if the blob registered to the index already
 contains CR, but some codepaths like "git blame" did not know this,
 and instead assumed that only the configuration and attribute
 settings determined how the data from the working tree is converted.

 Comments sent.
 ($gmane/290548)


--------------------------------------------------
[Stalled]

* ec/annotate-deleted (2015-11-20) 1 commit
 - annotate: skip checking working tree if a revision is provided

 Usability fix for annotate-specific "<file> <rev>" syntax with deleted
 files.

 Waiting for review.


* dg/subtree-rebase-test (2016-01-19) 1 commit
 - contrib/subtree: Add a test for subtree rebase that loses commits

 Reviewed up to v5.
 Will be rerolled.
 ($gmane/284426)


* js/am-3-merge-recursive-direct (2015-10-12) 2 commits
 - am: make a direct call to merge_recursive
 - merge_recursive_options: introduce the "gently" flag

 The merge_recursive_generic() function has been made a bit safer to
 call from inside a process.  "git am -3" was taught to make a direct
 call to the function when falling back to three-way merge.

 Being able to make a direct call would be good in general, but as a
 performance thing, the change needs to be backed up by numbers.

 Needs review.

 I haven't gone through the "gently" change with fine toothed comb;
 I can see that the change avoids calling die(), but I haven't made
 sure that the program states (e.g. what's in the in-core index) are
 adjusted sensibly when it returns to the caller instead of dying,
 or the codepaths that used to die() are free of resource leaks.
 The original code certainly did not care the program states at the
 point of dying exactly because it knew it is going to exit, but now
 they have to care, and they need to be audited.


* dk/gc-more-wo-pack (2016-01-13) 4 commits
 - gc: clean garbage .bitmap files from pack dir
 - t5304: ensure non-garbage files are not deleted
 - t5304: test .bitmap garbage files
 - prepare_packed_git(): find more garbage

 Follow-on to dk/gc-idx-wo-pack topic, to clean up stale
 .bitmap and .keep files.

 Waiting for a reroll.
 ($gmane/284368).


* jc/diff-b-m (2015-02-23) 5 commits
 . WIPWIP
 . WIP: diff-b-m
 - diffcore-rename: allow easier debugging
 - diffcore-rename.c: add locate_rename_src()
 - diffcore-break: allow debugging

 "git diff -B -M" produced incorrect patch when the postimage of a
 completely rewritten file is similar to the preimage of a removed
 file; such a resulting file must not be expressed as a rename from
 other place.

 The fix in this patch is broken, unfortunately.
 Will discard.

--------------------------------------------------
[Cooking]

* ak/use-hashmap-iter-first-in-submodule-config (2016-03-23) 1 commit
 - submodule-config: use hashmap_iter_first()

 Minor code cleanup.

 Will merge to 'next'.


* ky/branch-d-worktree (2016-03-29) 1 commit
 - branch -d: refuse deleting a branch which is currently checked out

 When "git worktree" feature is in use, "git branch -d" allowed
 deletion of a branch that is checked out in another worktree

 Will merge to 'next'.


* ky/branch-m-worktree (2016-03-28) 2 commits
 - branch -m: update all per-worktree HEADs
 - refs: add a new function set_worktree_head_symref

 When "git worktree" feature is in use, "git branch -m" renamed a
 branch that is checked out in another worktree without adjusting
 the HEAD symbolic ref for the worktree.

 Needs review by "refs" area experts.


* nd/apply-doc (2016-03-24) 2 commits
 - git-apply.txt: mention the behavior inside a subdir
 - git-apply.txt: remove a space

 Will merge to 'next'.


* nd/apply-report-skip (2016-03-24) 1 commit
 - apply: report patch skipping in verbose mode

 "git apply -v" learned to report paths in the patch that were
 skipped via --include/--exclude mechanism or being outside the
 current working directory.

 Will merge to 'next'.


* pb/opt-cmdmode-doc (2016-03-25) 1 commit
 - api-parse-options.txt: document OPT_CMDMODE()

 Minor API documentation update.


* rt/completion-help (2016-03-24) 2 commits
 - completion: add 'revisions' and 'everyday' to 'git help'
 - completion: add option '--guides' to 'git help'

 Shell completion (in contrib/) updates.

 Will merge to 'next'.


* rt/rebase-i-shorten-stop-report (2016-03-28) 1 commit
 - rebase-i: print an abbreviated hash when stop for editing

 The commit object name reported when "rebase -i" stops has been
 shortened.

 Will merge to 'next'.


* jk/check-repository-format (2016-03-11) 10 commits
 - verify_repository_format: mark messages for translation
 - setup: drop repository_format_version global
 - setup: unify repository version callbacks
 - init: use setup.c's repo version verification
 - setup: refactor repo format reading and verification
 - config: drop git_config_early
 - check_repository_format_gently: stop using git_config_early
 - lazily load core.sharedrepository
 - wrap shared_repository global in get/set accessors
 - setup: document check_repository_format()

 The repository set-up sequence has been streamlined (the biggest
 change is that there is no longer git_config_early()), so that we
 do not attempt to look into refs/* when we know we do not have a
 Git repository.

 Will merge to 'next'.


* mj/pull-rebase-autostash (2016-03-29) 7 commits
 - t5520: test --[no-]autostash with pull.rebase=true
 - t5520: modify tests to reduce common code
 - t5520: use test_i18ngrep instead of test_cmp
 - t5520: explicitly unset rebase.autostash
 - t5520: use consistent capitalization in test titles
  (merged to 'next' on 2016-03-23 at ebf1afa)
 + pull --rebase: add --[no-]autostash flag
 + git-pull.c: introduce git_pull_config()

 "git pull --rebase" learned "--[no-]autostash" option, so that
 the rebase.autostash configuration variable set to true can be
 overridden from the command line.

 Will merge to 'next'.


* pb/commit-verbose-config (2016-03-14) 1 commit
 - commit: add a commit.verbose config variable
 (this branch uses pb/t7502-drop-dup.)

 "git commit" learned to pay attention to "commit.verbose"
 configuration variable and act as if "--verbose" option was
 given from the command line.

 Will merge to 'next'.


* pb/t7502-drop-dup (2016-03-11) 1 commit
  (merged to 'next' on 2016-03-15 at 037c877)
 + t/t7502 : drop duplicate test
 (this branch is used by pb/commit-verbose-config.)

 Code clean-up.

 Will merge to 'master' after 2.8 final.


* ss/commit-squash-msg (2016-03-21) 1 commit
  (merged to 'next' on 2016-03-23 at 0b72631)
 + commit: do not lose SQUASH_MSG contents

 When "git merge --squash" stopped due to conflict, the concluding
 "git commit" failed to read in the SQUASH_MSG that shows the log
 messages from all the squashed commits.

 Will merge to 'master' after 2.8 final.


* ls/p4-map-user (2016-03-15) 1 commit
  (merged to 'next' on 2016-03-23 at 9e0a4f5)
 + git-p4: map a P4 user to Git author name and email address

 Will merge to 'master' after 2.8 final.


* jc/merge-refuse-new-root (2016-03-23) 1 commit
  (merged to 'next' on 2016-03-23 at d7da4cf)
 + merge: refuse to create too cool a merge by default

 "git merge" used to allow merging two branches that have no common
 base by default, which led to a brand new history of an existing
 project created and then get pulled by an unsuspecting maintainer,
 which allowed an unnecessary parallel history merged into the
 existing project.  The command has been taught not to allow this by
 default, with an escape hatch "--allow-unrelated-histories" option
 to be used in a rare event that merges histories of two projects
 that started their lives independently.

 Will merge to 'master' after 2.8 final.


* jk/credential-cache-comment-exit (2016-03-18) 1 commit
  (merged to 'next' on 2016-03-23 at d2b8cc7)
 + credential-cache--daemon: clarify "exit" action semantics

 Will merge to 'master' after 2.8 final.


* jk/send-email-rtrim-mailrc-alias (2016-03-18) 1 commit
  (merged to 'next' on 2016-03-23 at 74f1f44)
 + send-email: ignore trailing whitespace in mailrc alias file

 Will merge to 'master' after 2.8 final.


* jk/test-httpd-config-nosystem (2016-03-18) 1 commit
  (merged to 'next' on 2016-03-23 at 245263b)
 + t/lib-httpd: pass through GIT_CONFIG_NOSYSTEM env

 Will merge to 'master' after 2.8 final.


* lt/pretty-expand-tabs (2016-03-30) 3 commits
 - pretty: allow tweaking tabwidth in --expand-tabs
 - pretty: enable --expand-tabs by default for selected pretty formats
 - pretty: expand tabs in indented logs to make things line up properly

 Needs tests.


* sb/clone-shallow-passthru (2016-03-23) 3 commits
 - clone: add t5614 to test cloning submodules with shallowness involved
 - submodule clone: pass along `local` option
 - clone: add `--shallow-submodules` flag
 (this branch uses sb/submodule-parallel-update; is tangled with sb/submodule-init.)

 "git clone" learned "--shallow-submodules" option.

 Needs review.


* sb/clone-t57-t56 (2016-03-16) 1 commit
  (merged to 'next' on 2016-03-23 at 5df850d)
 + clone tests: rename t57* => t56*

 Rename bunch of tests on "git clone" for better organization.

 Will merge to 'master' after 2.8 final.


* sb/rebase-x (2016-03-18) 2 commits
  (merged to 'next' on 2016-03-23 at ef8861b)
 + t3404: cleanup double empty lines between tests
 + rebase: decouple --exec from --interactive

 "git rebase -x" can be used without passing "-i" option.

 Will merge to 'master' after 2.8 final.


* cc/apply (2016-04-01) 4 commits
 - builtin/apply: free patch when parse_chunk() fails
 - builtin/apply: handle parse_binary() failure
  (merged to 'next' on 2016-03-24 at 70623f2)
 + apply: remove unused call to free() in gitdiff_{old,new}name()
 + builtin/apply: get rid of useless 'name' variable

 Code clean-up.

 Will merge to 'next'.


* dt/index-helper (2016-03-23) 18 commits
 - SQUASH - minimum compilation fix
 - read-cache: config for waiting for index-helper
 - index-helper: optionally automatically run
 - index-helper: autorun mode
 - index-helper: don't run if already running
 - index-helper: kill mode
 - unpack-trees: preserve index extensions
 - update-index: enable/disable watchman support
 - index-helper: use watchman to avoid refreshing index with lstat()
 - Add watchman support to reduce index refresh cost
 - read-cache: invalidate untracked cache data when reading WAMA
 - read-cache: add watchman 'WAMA' extension
 - index-helper: add --detach
 - daemonize(): set a flag before exiting the main process
 - index-helper: add --strict
 - index-helper: new daemon for caching index and related stuff
 - read-cache: allow to keep mmap'd memory after reading
 - read-cache.c: fix constness of verify_hdr()


* jv/merge-nothing-into-void (2016-03-23) 1 commit
  (merged to 'next' on 2016-03-23 at 40b905d)
 + merge: fix NULL pointer dereference when merging nothing into void

 "git merge FETCH_HEAD" dereferenced NULL pointer when merging
 nothing into an unborn history (which is arguably unusual usage,
 which perhaps was the reason why nobody noticed it).

 Will merge to 'master' after 2.8 final.


* la/tag-force-signing-annotated-tags (2016-03-22) 1 commit
  (merged to 'next' on 2016-03-24 at 424da3f)
 + tag: add the option to force signing of annotated tags

 "git tag" can create an annotated tag without explicitly given an
 "-a" (or "-s") option (i.e. when a tag message is given).  A new
 configuration variable, tag.forceSignAnnotated, can be used to tell
 the command to create signed tag in such a situation.

 Will merge to 'master' after 2.8 final.


* cc/doc-recommend-performance-trace-to-file (2016-03-07) 1 commit
  (merged to 'next' on 2016-03-23 at 086b9f2)
 + Documentation: talk about pager in api-trace.txt

 Will merge to 'master' after 2.8 final.


* da/mergetool-delete-delete-conflict (2016-03-10) 2 commits
  (merged to 'next' on 2016-03-15 at 281a81a)
 + mergetool: honor tempfile configuration when resolving delete conflicts
 + mergetool: support delete/delete conflicts

 "git mergetool" did not work well with conflicts that both sides
 deleted.

 Will merge to 'master' after 2.8 final.


* es/test-gpg-tags (2016-03-06) 4 commits
  (merged to 'next' on 2016-03-15 at 617119f)
 + t6302: skip only signed tags rather than all tests when GPG is missing
 + t6302: also test annotated in addition to signed tags
 + t6302: normalize names and descriptions of signed tags
 + lib-gpg: drop unnecessary "missing GPG" warning

 A test for tags has been restructured so that more parts of it can
 easily be run on a platform without a working GnuPG.

 Will merge to 'master' after 2.8 final.


* jk/getwholeline-getdelim-empty (2016-03-05) 1 commit
  (merged to 'next' on 2016-03-15 at e70d4bd)
 + strbuf_getwholeline: NUL-terminate getdelim buffer on error

 strbuf_getwholeline() did not NUL-terminate the buffer on certain
 corner cases in its error codepath.

 Will merge to 'master' after 2.8 final.


* jk/startup-info (2016-03-07) 6 commits
  (merged to 'next' on 2016-03-15 at eb95e5f)
 + use setup_git_directory() in test-* programs
 + grep: turn off gitlink detection for --no-index
 + mailmap: do not resolve blobs in a non-repository
 + remote: don't resolve HEAD in non-repository
 + setup: set startup_info->have_repository more reliably
 + setup: make startup_info available everywhere

 The startup_info data, which records if we are working inside a
 repository (among other things), are now uniformly available to Git
 subcommand implementations, and Git avoids attempting to touch
 references when we are not in a repository.

 Will merge to 'master' after 2.8 final.


* rj/xdiff-prepare-plug-leak-on-error-codepath (2016-03-04) 2 commits
  (merged to 'next' on 2016-03-15 at f72755e)
 + xdiff/xprepare: fix a memory leak
 + xdiff/xprepare: use the XDF_DIFF_ALG() macro to access flag bits

 A small memory leak in an error codepath has been plugged in xdiff
 code.

 Will merge to 'master' after 2.8 final.


* jc/index-pack (2016-03-03) 2 commits
  (merged to 'next' on 2016-03-15 at 42efaa7)
 + index-pack: add a helper function to derive .idx/.keep filename
 + Merge branch 'jc/maint-index-pack-keep' into jc/index-pack
 (this branch is used by jc/bundle; uses jc/maint-index-pack-keep; is tangled with jc/index-pack-clone-bundle.)

 Code clean-up.

 Will merge to 'master' after 2.8 final.


* jc/maint-index-pack-keep (2016-03-03) 1 commit
  (merged to 'next' on 2016-03-04 at bc1d37a)
 + index-pack: correct --keep[=<msg>]
 (this branch is used by jc/bundle, jc/index-pack and jc/index-pack-clone-bundle.)

 "git index-pack --keep[=<msg>] pack-$name.pack" simply did not work.

 Will merge to 'master' after 2.8 final.


* mm/readme-markdown (2016-04-01) 2 commits
 - git.spec: use README.md, not README
  (merged to 'next' on 2016-03-01 at 81f3858)
 + README.md: don't take 'commandname' literally

 The top-level README file has been updated to be more appropriate
 for the sign on the front door to welcome new acquaintances to Git
 by toning down inside jokes and making it into MarkDown.

 Will merge to 'next'.


* gf/fetch-pack-direct-object-fetch (2016-03-05) 2 commits
  (merged to 'next' on 2016-03-06 at 5628860)
 + fetch-pack: update the documentation for "<refs>..." arguments
  (merged to 'next' on 2016-03-04 at 49199e0)
 + fetch-pack: fix object_id of exact sha1

 Fetching of history by naming a commit object name directly didn't
 work across remote-curl transport.

 Will merge to 'master' after 2.8 final.


* jk/add-i-highlight (2016-02-28) 1 commit
  (merged to 'next' on 2016-03-04 at 4ac3aa1)
 + add--interactive: allow custom diff highlighting programs

 Will merge to 'master' after 2.8 final.


* jk/config-get-urlmatch (2016-02-28) 3 commits
  (merged to 'next' on 2016-03-04 at feeb192)
 + Documentation/git-config: fix --get-all description
 + Documentation/git-config: use bulleted list for exit codes
 + config: fail if --get-urlmatch finds no value

 "git config --get-urlmatch", unlike other variants of the "git
 config --get" family, did not signal error with its exit status
 when there was no matching configuration.

 Will merge to 'master' after 2.8 final.


* jk/rev-parse-local-env-vars (2016-02-29) 2 commits
  (merged to 'next' on 2016-03-04 at a0300d5)
 + rev-parse: let some options run outside repository
 + t1515: add tests for rev-parse out-of-repo helpers

 The "--local-env-vars" and "--resolve-git-dir" options of "git
 rev-parse" failed to work outside a repository when the command's
 option parsing was rewritten in 1.8.5 era.

 Will merge to 'master' after 2.8 final.


* sg/completion-updates (2016-02-28) 21 commits
 - completion: cache the path to the repository
 - completion: extract repository discovery from __gitdir()
 - completion: don't guard git executions with __gitdir()
 - completion: consolidate silencing errors from git commands
 - completion: don't use __gitdir() for git commands
 - completion: respect 'git -C <path>'
 - completion: fix completion after 'git -C <path>'
 - completion: don't offer commands when 'git --opt' needs an argument
 - rev-parse: add '--absolute-git-dir' option
 - completion: list short refs from a remote given as a URL
 - completion: don't list 'HEAD' when trying refs completion outside of a repo
 - completion: list refs from remote when remote's name matches a directory
 - completion: respect 'git --git-dir=<path>' when listing remote refs
 - completion: fix most spots not respecting 'git --git-dir=<path>'
 - completion: ensure that the repository path given on the command line exists
 - completion tests: add tests for the __git_refs() helper function
 - completion tests: check __gitdir()'s output in the error cases
 - completion tests: consolidate getting path of current working directory
 - completion tests: make the $cur variable local to the test helper functions
 - completion tests: don't add test cruft to the test repository
 - completion: improve __git_refs()'s in-code documentation

 Will be rerolled.
 ($gmane/287839)


* mm/lockfile-error-message (2016-03-01) 2 commits
  (merged to 'next' on 2016-03-04 at 04ed7e6)
 + lockfile: improve error message when lockfile exists
 + lockfile: mark strings for translation

 Will merge to 'master' after 2.8 final.


* ss/exc-flag-is-a-collection-of-bits (2016-03-01) 1 commit
  (merged to 'next' on 2016-03-04 at 5ea48c7)
 + dir: store EXC_FLAG_* values in unsigned integers

 Will merge to 'master' after 2.8 final.


* jc/bundle (2016-03-03) 6 commits
 - index-pack: --clone-bundle option
 - Merge branch 'jc/index-pack' into jc/bundle
 - bundle v3: the beginning
 - bundle: keep a copy of bundle file name in the in-core bundle header
 - bundle: plug resource leak
 - bundle doc: 'verify' is not about verifying the bundle
 (this branch uses jc/index-pack and jc/maint-index-pack-keep; is tangled with jc/index-pack-clone-bundle.)

 The beginning of "split bundle", which could be one of the
 ingredients to allow "git clone" traffic off of the core server
 network to CDN.


* ss/receive-pack-parse-options (2016-03-01) 1 commit
  (merged to 'next' on 2016-03-04 at c577ea7)
 + builtin/receive-pack.c: use parse_options API

 The command line argument parser for "receive-pack" has been
 rewritten to use parse-options.

 Will merge to 'master' after 2.8 final.


* jk/credential-clear-config (2016-02-26) 1 commit
  (merged to 'next' on 2016-03-04 at f7b26b7)
 + credential: let empty credential specs reset helper list

 The credential.helper configuration variable is cumulative and
 there is no good way to override it from the command line.  As
 a special case, giving an empty string as its value now serves
 as the signal to clear the values specified in various files.

 Will merge to 'master' after 2.8 final.


* jk/submodule-c-credential (2016-03-23) 7 commits
  (merged to 'next' on 2016-03-23 at 952367a)
 + git_config_push_parameter: handle empty GIT_CONFIG_PARAMETERS
  (merged to 'next' on 2016-03-15 at 81df5b1)
 + git: submodule honor -c credential.* from command line
 + quote: implement sq_quotef()
 + submodule: fix segmentation fault in submodule--helper clone
 + submodule: fix submodule--helper clone usage
 + submodule: check argc count for git submodule--helper clone
 + submodule: don't pass empty string arguments to submodule--helper clone

 "git -c credential.<var>=<value> submodule" can now be used to
 propagate configuration variables related to credential helper
 down to the submodules.

 Will merge to 'master' after 2.8 final.


* nd/shallow-deepen (2016-02-23) 25 commits
 - fetch, upload-pack: --deepen=N extends shallow boundary by N commits
 - upload-pack: add get_reachable_list()
 - upload-pack: split check_unreachable() in two, prep for get_reachable_list()
 - t5500, t5539: tests for shallow depth excluding a ref
 - clone: define shallow clone boundary with --shallow-exclude
 - fetch: define shallow boundary with --shallow-exclude
 - upload-pack: support define shallow boundary by excluding revisions
 - refs: add expand_ref()
 - t5500, t5539: tests for shallow depth since a specific date
 - clone: define shallow clone boundary based on time with --shallow-since
 - fetch: define shallow boundary with --shallow-since
 - upload-pack: add deepen-since to cut shallow repos based on time
 - shallow.c: implement a generic shallow boundary finder based on rev-list
 - fetch-pack: use a separate flag for fetch in deepening mode
 - fetch-pack: use a common function for verbose printing
 - fetch-pack: use skip_prefix() instead of starts_with()
 - upload-pack: move rev-list code out of check_non_tip()
 - upload-pack: tighten number parsing at "deepen" lines
 - upload-pack: use skip_prefix() instead of starts_with()
 - upload-pack: move "unshallow" sending code out of deepen()
 - upload-pack: remove unused variable "backup"
 - upload-pack: move "shallow" sending code out of deepen()
 - upload-pack: move shallow deepen code out of receive_needs()
 - transport-helper.c: refactor set_helper_option()
 - remote-curl.c: convert fetch_git() to use argv_array

 The existing "git fetch --depth=<n>" option was hard to use
 correctly when making the history of an existing shallow clone
 deeper.  A new option, "--deepen=<n>", has been added to make this
 easier to use.  "git clone" also learned "--shallow-since=<date>"
 and "--shallow-exclude=<tag>" options to make it easier to specify
 "I am interested only in the recent N months worth of history" and
 "Give me only the history since that version".

 Needs review.


* mm/diff-renames-default (2016-02-25) 5 commits
  (merged to 'next' on 2016-02-25 at 947c399)
 + diff: activate diff.renames by default
 + log: introduce init_log_defaults()
 + t: add tests for diff.renames (true/false/unset)
 + t4001-diff-rename: wrap file creations in a test
 + Documentation/diff-config: fix description of diff.renames

 The end-user facing Porcelain level commands like "diff" and "log"
 now enables the rename detection by default.

 Will merge to 'master' after 2.8 final.


* mp/upload-pack-use-embedded-args (2016-02-25) 1 commit
  (merged to 'next' on 2016-02-26 at f0a54e5)
 + upload-pack: use argv_array for pack_objects

 The embedded args argv-array in the child process is used to build
 the command line to run pack-objects instead of using a separate
 array of strings.

 Will merge to 'master' after 2.8 final.


* sb/submodule-init (2016-03-15) 2 commits
 . submodule: port init from shell to C
 . submodule: port resolve_relative_url from shell to C
 (this branch uses sb/submodule-parallel-update; is tangled with sb/clone-shallow-passthru.)

 Update of "git submodule" to move pieces of logic to C continues.

 Needs review.
 ($gmane/288824)


* az/p4-bare-no-rebase (2016-02-19) 1 commit
 - git-p4.py: Don't try to rebase on submit from bare repository

 "git p4 submit" attempts to do a rebase, which would fail if done
 in a bare repository.  Not doing this rebase would paper over the
 failure, which is what this patch does, but it is unclear what the
 side effect of not rebasing is.

 Needs a better explanation.


* ss/commit-dry-run-resolve-merge-to-no-op (2016-02-17) 1 commit
 - wt-status.c: set commitable bit if there is a meaningful merge.

 "git commit --dry-run" reported "No, no, you cannot commit." in one
 case where "git commit" would have allowed you to commit, and this
 improves it a little bit ("git commit --dry-run --short" still does
 not give you the correct answer, for example).


* nd/icase (2016-02-15) 12 commits
 - grep.c: reuse "icase" variable
 - diffcore-pickaxe: support case insensitive match on non-ascii
 - diffcore-pickaxe: "share" regex error handling code
 - grep/pcre: support utf-8
 - gettext: add is_utf8_locale()
 - grep/pcre: prepare locale-dependent tables for icase matching
 - grep/icase: avoid kwsset when -F is specified
 - grep/icase: avoid kwsset on literal non-ascii strings
 - test-regex: expose full regcomp() to the command line
 - test-regex: isolate the bug test code
 - grep: break down an "if" stmt in preparation for next changes
 - grep: allow -F -i combination

 "git grep -i" has been taught to fold case in non-ascii locales.

 Needs review.
 ($gmane/286137)


* sb/submodule-parallel-update (2016-03-01) 10 commits
  (merged to 'next' on 2016-03-15 at a8bf6c5)
 + clone: allow an explicit argument for parallel submodule clones
 + submodule update: expose parallelism to the user
 + submodule helper: remove double 'fatal: ' prefix
 + git submodule update: have a dedicated helper for cloning
 + run_processes_parallel: rename parameters for the callbacks
 + run_processes_parallel: treat output of children as byte array
 + submodule update: direct error message to stderr
 + fetching submodules: respect `submodule.fetchJobs` config option
 + submodule-config: drop check against NULL
 + submodule-config: keep update strategy around
 (this branch is used by sb/clone-shallow-passthru and sb/submodule-init.)

 A major part of "git submodule update" has been ported to C to take
 advantage of the recently added framework to run download tasks in
 parallel.

 Will merge to 'master' after 2.8 final.


* dt/refs-backend-lmdb (2016-02-25) 45 commits
 . SQUASH??? Minimum compilation band-aid
 . tests: add ref-storage argument
 . refs: tests for lmdb backend
 . refs: add LMDB refs storage backend
 . refs: break out resolve_ref_unsafe_submodule
 . config: read ref storage config on startup
 . refs: register ref storage backends
 . svn: learn ref-storage argument
 . clone: allow ref storage backend to be set for clone
 . refs: check submodules' ref storage config
 . init: allow alternate ref strorage to be set for new repos
 . refs: always handle non-normal refs in files backend
 . refs: resolve symbolic refs first
 . refs: on symref reflog expire, lock symref not referrent
 . refs: don't dereference on rename
 . refs: allow log-only updates
 . refs: move duplicate check to common code
 . refs: make lock generic
 . refs: handle non-normal ref renames
 . refs: add method to rename refs
 . refs: add methods to init refs db
 . refs: add method for delete_refs
 . refs: add method for initial ref transaction commit
 . refs: add methods for reflog
 . refs: add do_for_each_per_worktree_ref
 . refs: reduce the visibility of do_for_each_ref()
 . refs: add method for do_for_each_ref
 . refs: add methods for misc ref operations
 . refs: add a backend method structure with transaction functions
 . refs: move resolve_ref_unsafe into common code
 . files-backend: break out ref reading
 . refs: move for_each_*ref* functions into common code
 . refs: move head_ref{,_submodule} to the common code
 . Merge branch 'sb/submodule-parallel-update' into dt/refs-backend-lmdb
 . clone: allow an explicit argument for parallel submodule clones
 . submodule update: expose parallelism to the user
 . git submodule update: have a dedicated helper for cloning
 . run_processes_parallel: correctly terminate callbacks with an LF
 . run_processes_parallel: rename parameters for the callbacks
 . run-command: expose default_{start_failure, task_finished}
 . run_processes_parallel: treat output of children as byte array
 . submodule update: direct error message to stderr
 . fetching submodules: respect `submodule.fetchJobs` config option
 . submodule-config: drop check against NULL
 . submodule-config: keep update strategy around

 A reroll exists, but it seems that will further be rerolled.


* ad/cygwin-wants-rename (2015-08-07) 1 commit
 - config.mak.uname: Cygwin needs OBJECT_CREATION_USES_RENAMES

 Will hold.
 ($gmane/275680).


* jc/rerere-multi (2016-03-28) 11 commits
 - rerere: adjust 'forget' to multi-variant world order
 - rerere: split code to call ll_merge() further
 - rerere: move code related to "forget" together
 - rerere: gc and clear
 - rerere: do use multiple variants
 - t4200: rerere a merge with two identical conflicts
 - rerere: allow multiple variants to exist
 - rerere: delay the recording of preimage
 - rerere: handle leftover rr-cache/$ID directory and postimage files
 - rerere: scan $GIT_DIR/rr-cache/$ID when instantiating a rerere_id
 - rerere: split conflict ID further

 "git rerere" can encounter two or more files with the same conflict
 signature that have to be resolved in different ways, but there was
 no way to record these separate resolutions.

 Need to send out the final round of review as this should be now complete.


* jc/merge-drop-old-syntax (2015-04-29) 1 commit
 - merge: drop 'git merge <message> HEAD <commit>' syntax

 Stop supporting "git merge <message> HEAD <commit>" syntax that has
 been deprecated since October 2007.  It has been reported that
 git-gui still uses the deprecated syntax, which needs to be fixed
 before this final step can proceed.
 ($gmane/282594)

^ permalink raw reply	[relevance 2%]

* What's cooking in git.git (Apr 2016, #02; Mon, 4)
@ 2016-04-04 21:26  2% Junio C Hamano
  0 siblings, 0 replies; 200+ results
From: Junio C Hamano @ 2016-04-04 21:26 UTC (permalink / raw)
  To: git; +Cc: David A. Greene, Doug Kelly, Marios Titas, SZEDER Gábor

Here are the topics that have been cooking.  Commits prefixed with
'-' are only in 'pu' (proposed updates) while commits prefixed with
'+' are in 'next'.  The ones marked with '.' do not appear in any of
the integration branches, but I am still holding onto them.

The tip of 'next' has been rewound, the first maintenance release
v2.8.1 that most everybody can safely ignore has been tagged, and
the first batch of topics that have been cooking in 'next' during
the pre-2.8 freeze period are now in 'master'.

There are a handful of topics that are stuck; they are marked as
"Needs review", "Needs an Ack", "Waiting for reroll" etc. in the
following list.

You can find the changes described here in the integration branches
of the repositories listed at

    http://git-blame.blogspot.com/p/git-public-repositories.html

--------------------------------------------------
[New Topics]

* es/format-patch-doc-hide-no-patch (2016-04-04) 1 commit
 - git-format-patch.txt: don't show -s as shorthand for multiple options

 "git format-patch --help" showed `-s` and `--no-patch` as if these
 are valid options to the command.  We already hide `--patch` option
 from the documentation, because format-patch is about showing the
 diff, and the documentation now hides these options as well.

 Will merge to next.


* jk/branch-shortening-funny-symrefs (2016-04-04) 1 commit
 - branch: fix shortening of non-remote symrefs

 A change back in version 2.7 to "git branch" broke display of a
 symbolic refs in a non-standard place in the refs/ hierarchy (we
 expect symbolic refs to appear in refs/remotes/*/HEAD to point at
 the primary branch the remote has, and as .git/HEAD to point at the
 branch we locally checked out).

 Will merge to next.
 and later down to maint-2.7.

--------------------------------------------------
[Graduated to "master"]

* es/test-gpg-tags (2016-03-06) 4 commits
  (merged to 'next' on 2016-03-15 at 617119f)
 + t6302: skip only signed tags rather than all tests when GPG is missing
 + t6302: also test annotated in addition to signed tags
 + t6302: normalize names and descriptions of signed tags
 + lib-gpg: drop unnecessary "missing GPG" warning

 A test for tags has been restructured so that more parts of it can
 easily be run on a platform without a working GnuPG.


* gf/fetch-pack-direct-object-fetch (2016-03-05) 2 commits
  (merged to 'next' on 2016-03-06 at 5628860)
 + fetch-pack: update the documentation for "<refs>..." arguments
  (merged to 'next' on 2016-03-04 at 49199e0)
 + fetch-pack: fix object_id of exact sha1

 Fetching of history by naming a commit object name directly didn't
 work across remote-curl transport.


* jc/index-pack (2016-03-03) 2 commits
  (merged to 'next' on 2016-03-15 at 42efaa7)
 + index-pack: add a helper function to derive .idx/.keep filename
 + Merge branch 'jc/maint-index-pack-keep' into jc/index-pack
 (this branch is used by jc/bundle; uses jc/maint-index-pack-keep; is tangled with jc/index-pack-clone-bundle.)

 Code clean-up.


* jc/maint-index-pack-keep (2016-03-03) 1 commit
  (merged to 'next' on 2016-03-04 at bc1d37a)
 + index-pack: correct --keep[=<msg>]
 (this branch is used by jc/bundle, jc/index-pack and jc/index-pack-clone-bundle.)

 "git index-pack --keep[=<msg>] pack-$name.pack" simply did not work.


* jk/add-i-highlight (2016-02-28) 1 commit
  (merged to 'next' on 2016-03-04 at 4ac3aa1)
 + add--interactive: allow custom diff highlighting programs

 A new "interactive.diffFilter" configuration can be used to
 customize the diff shown in "git add -i" session.


* jk/config-get-urlmatch (2016-02-28) 3 commits
  (merged to 'next' on 2016-03-04 at feeb192)
 + Documentation/git-config: fix --get-all description
 + Documentation/git-config: use bulleted list for exit codes
 + config: fail if --get-urlmatch finds no value

 "git config --get-urlmatch", unlike other variants of the "git
 config --get" family, did not signal error with its exit status
 when there was no matching configuration.


* jk/credential-clear-config (2016-02-26) 1 commit
  (merged to 'next' on 2016-03-04 at f7b26b7)
 + credential: let empty credential specs reset helper list

 The credential.helper configuration variable is cumulative and
 there is no good way to override it from the command line.  As
 a special case, giving an empty string as its value now serves
 as the signal to clear the values specified in various files.


* jk/getwholeline-getdelim-empty (2016-03-05) 1 commit
  (merged to 'next' on 2016-03-15 at e70d4bd)
 + strbuf_getwholeline: NUL-terminate getdelim buffer on error

 strbuf_getwholeline() did not NUL-terminate the buffer on certain
 corner cases in its error codepath.


* jk/rev-parse-local-env-vars (2016-02-29) 2 commits
  (merged to 'next' on 2016-03-04 at a0300d5)
 + rev-parse: let some options run outside repository
 + t1515: add tests for rev-parse out-of-repo helpers

 The "--local-env-vars" and "--resolve-git-dir" options of "git
 rev-parse" failed to work outside a repository when the command's
 option parsing was rewritten in 1.8.5 era.


* jk/startup-info (2016-03-07) 6 commits
  (merged to 'next' on 2016-03-15 at eb95e5f)
 + use setup_git_directory() in test-* programs
 + grep: turn off gitlink detection for --no-index
 + mailmap: do not resolve blobs in a non-repository
 + remote: don't resolve HEAD in non-repository
 + setup: set startup_info->have_repository more reliably
 + setup: make startup_info available everywhere

 The startup_info data, which records if we are working inside a
 repository (among other things), are now uniformly available to Git
 subcommand implementations, and Git avoids attempting to touch
 references when we are not in a repository.


* mm/diff-renames-default (2016-02-25) 5 commits
  (merged to 'next' on 2016-02-25 at 947c399)
 + diff: activate diff.renames by default
 + log: introduce init_log_defaults()
 + t: add tests for diff.renames (true/false/unset)
 + t4001-diff-rename: wrap file creations in a test
 + Documentation/diff-config: fix description of diff.renames

 The end-user facing Porcelain level commands like "diff" and "log"
 now enables the rename detection by default.


* mm/lockfile-error-message (2016-03-01) 2 commits
  (merged to 'next' on 2016-03-04 at 04ed7e6)
 + lockfile: improve error message when lockfile exists
 + lockfile: mark strings for translation


* mm/readme-markdown (2016-04-01) 2 commits
 - git.spec: use README.md, not README
  (merged to 'next' on 2016-03-01 at 81f3858)
 + README.md: don't take 'commandname' literally

 The top-level README file has been updated to be more appropriate
 for the sign on the front door to welcome new acquaintances to Git
 by toning down inside jokes and making it into MarkDown.


* mp/upload-pack-use-embedded-args (2016-02-25) 1 commit
  (merged to 'next' on 2016-02-26 at f0a54e5)
 + upload-pack: use argv_array for pack_objects

 The embedded args argv-array in the child process is used to build
 the command line to run pack-objects instead of using a separate
 array of strings.


* rj/xdiff-prepare-plug-leak-on-error-codepath (2016-03-04) 2 commits
  (merged to 'next' on 2016-03-15 at f72755e)
 + xdiff/xprepare: fix a memory leak
 + xdiff/xprepare: use the XDF_DIFF_ALG() macro to access flag bits

 A small memory leak in an error codepath has been plugged in xdiff
 code.

--------------------------------------------------
[Stalled]

* ec/annotate-deleted (2015-11-20) 1 commit
 - annotate: skip checking working tree if a revision is provided

 Usability fix for annotate-specific "<file> <rev>" syntax with deleted
 files.

 Waiting for review.


* dg/subtree-rebase-test (2016-01-19) 1 commit
 - contrib/subtree: Add a test for subtree rebase that loses commits

 Reviewed up to v5.
 Will be rerolled.
 ($gmane/284426)


* js/am-3-merge-recursive-direct (2015-10-12) 2 commits
 - am: make a direct call to merge_recursive
 - merge_recursive_options: introduce the "gently" flag

 The merge_recursive_generic() function has been made a bit safer to
 call from inside a process.  "git am -3" was taught to make a direct
 call to the function when falling back to three-way merge.

 Being able to make a direct call would be good in general, but as a
 performance thing, the change needs to be backed up by numbers.

 Needs review.

 I haven't gone through the "gently" change with fine toothed comb;
 I can see that the change avoids calling die(), but I haven't made
 sure that the program states (e.g. what's in the in-core index) are
 adjusted sensibly when it returns to the caller instead of dying,
 or the codepaths that used to die() are free of resource leaks.
 The original code certainly did not care the program states at the
 point of dying exactly because it knew it is going to exit, but now
 they have to care, and they need to be audited.


* dk/gc-more-wo-pack (2016-01-13) 4 commits
 - gc: clean garbage .bitmap files from pack dir
 - t5304: ensure non-garbage files are not deleted
 - t5304: test .bitmap garbage files
 - prepare_packed_git(): find more garbage

 Follow-on to dk/gc-idx-wo-pack topic, to clean up stale
 .bitmap and .keep files.

 Waiting for a reroll.
 ($gmane/284368).


* jc/diff-b-m (2015-02-23) 5 commits
 . WIPWIP
 . WIP: diff-b-m
 - diffcore-rename: allow easier debugging
 - diffcore-rename.c: add locate_rename_src()
 - diffcore-break: allow debugging

 "git diff -B -M" produced incorrect patch when the postimage of a
 completely rewritten file is similar to the preimage of a removed
 file; such a resulting file must not be expressed as a rename from
 other place.

 The fix in this patch is broken, unfortunately.
 Will discard.

--------------------------------------------------
[Cooking]

* jn/mergetools-examdiff (2016-04-04) 2 commits
 - mergetools: add support for ExamDiff
 - mergetools: create mergetool_find_win32_cmd() helper function for winmerge

 "git mergetools" learned to drive ExamDiff.

 Will merge to 'next'.


* kn/for-each-tag-branch (2016-03-30) 1 commit
 - for-each-ref: fix description of '--contains' in manpage

 Docfix.

 Will merge to 'next'.


* kn/ref-filter-branch-list (2016-03-30) 16 commits
 . branch: implement '--format' option
 . branch: use ref-filter printing APIs
 . branch, tag: use porcelain output
 . ref-filter: allow porcelain to translate messages in the output
 . ref-filter: add support for %(refname:dir) and %(refname:base)
 . ref-filter: introduce refname_atom_parser()
 . ref-filter: introduce symref_atom_parser()
 . ref-filter: make "%(symref)" atom work with the ':short' modifier
 . ref-filter: add support for %(upstream:track,nobracket)
 . ref-filter: make %(upstream:track) prints "[gone]" for invalid upstreams
 . ref-filter: introduce format_ref_array_item()
 . ref-filter: move get_head_description() from branch.c
 . ref-filter: modify "%(objectname:short)" to take length
 . ref-filter: implement %(if:equals=<string>) and %(if:notequals=<string>)
 . ref-filter: include reference to 'used_atom' within 'atom_value'
 . ref-filter: implement %(if), %(then), and %(else) atoms

 The code to list branches in "git branch" has been consolidated
 with the more generic ref-filter API.

 Will be rerolled.


* oa/doc-diff-check (2016-03-29) 1 commit
 - Documentation: git diff --check detects conflict markers

 Docfix.

 Will merge to 'next'.


* rz/worktree-no-checkout (2016-03-29) 1 commit
 - worktree: add: introduce --checkout option

 "git worktree add" can be given "--no-checkout" option to only
 create an empty worktree without checking out the files.

 Will merge to 'next'.


* sb/misc-cleanups (2016-04-01) 4 commits
 - credential-cache, send_request: close fd when done
 - bundle: don't leak an fd in case of early return
 - abbrev_sha1_in_line: don't leak memory
 - notes: don't leak memory in git_config_get_notes_strategy

 Assorted minor clean-ups.

 Will merge to 'next'.


* sb/submodule-helper-clone-regression-fix (2016-04-01) 6 commits
 - submodule--helper, module_clone: catch fprintf failure
 - submodule--helper: do not borrow absolute_path() result for too long
 - submodule--helper, module_clone: always operate on absolute paths
 - submodule--helper clone: create the submodule path just once
 - submodule--helper: fix potential NULL-dereference
 - recursive submodules: test for relative paths

 A partial rewrite of "git submodule" in the 2.7 timeframe changed
 the way the gitdir: pointer in the submodules point at the real
 repository location to use absolute paths by accident.  This has
 been corrected.

 Any further comments?  Otherwise will merge to 'next'.


* sb/submodule-path-misc-bugs (2016-03-30) 6 commits
 - t7407: make expectation as clear as possible
 - submodule update: test recursive path reporting from subdirectory
 - submodule update: align reporting path for custom command execution
 - submodule status: correct path handling in recursive submodules
 - submodule update --init: correct path handling in recursive submodules
 - submodule foreach: correct path display in recursive submodules

 "git submodule" reports the paths of submodules the command
 recurses into, but this was incorrect when the command was not run
 from the root level of the superproject.

 Any further comments?  Otherwise will merge to 'next'.


* sg/diff-multiple-identical-renames (2016-03-30) 1 commit
 - diffcore: fix iteration order of identical files during rename detection

 "git diff -M" used to work better when two originally identical
 files A and B got renamed to X/A and X/B by pairing A to X/A and B
 to X/B, but this was broken in 2.0 timeframe.

 Will merge to 'next'.


* sk/send-pack-all-fix (2016-03-31) 1 commit
 - git-send-pack: fix --all option when used with directory

 "git send-pack --all <there>" was broken when its command line
 option parsing was written in 2.6 timeframe.

 Will merge to 'next'.


* ss/msvc (2016-03-30) 2 commits
 - MSVC: use shipped headers instead of fallback definitions
 - MSVC: vsnprintf in Visual Studio 2015 doesn't need SNPRINTF_SIZE_CORR any more

 Will merge to 'next'.


* xy/format-patch-base (2016-03-31) 4 commits
 - format-patch: introduce format.base configuration
 - format-patch: introduce --base=auto option
 - format-patch: add '--base' option to record base tree info
 - patch-ids: make commit_patch_id() a public helper function

 "git format-patch" learned a new "--base" option to record what
 (public, well-known) commit the original series was built on in
 its output.

 Will be rerolled.
 ($gmane/290365)


* da/user-useconfigonly (2016-04-01) 2 commits
 - ident: give "please tell me" message upon useConfigOnly error
 - ident: check for useConfigOnly before auto-detection of name/email

 The "user.useConfigOnly" configuration variable makes it an error
 if users do not explicitly set user.name and user.email.  However,
 its check was not done early enough and allowed another error to
 trigger, reporting that the default value we guessed from the
 system setting was unusable.  This was a suboptimal end-user
 experience as we want the users to set user.name/user.email without
 relying on the auto-detection at all.

 Waiting for Acks.
 ($gmane/290340)


* tb/safe-crlf-output-fix (2016-04-01) 7 commits
 . convert.c: more safer crlf handling with text attribute
 . correct blame for files commited with CRLF
 . convert: unify the "auto" handling of CRLF
 . t0027: test cases for combined attributes
 . convert: allow core.autocrlf=input and core.eol=crlf
 . convert.c: stream and early out
 . read-cache: factor out get_sha1_from_index() helper

 The "safe CRLF" facility disables line-end conversion from CRLF to
 LF when checking in if the blob registered to the index already
 contains CR, but some codepaths like "git blame" did not know this,
 and instead assumed that only the configuration and attribute
 settings determined how the data from the working tree is converted.

 Will be rerolled.
 ($gmane/290637)


* ak/use-hashmap-iter-first-in-submodule-config (2016-03-23) 1 commit
 - submodule-config: use hashmap_iter_first()

 Minor code cleanup.

 Will merge to 'next'.


* ky/branch-d-worktree (2016-03-29) 1 commit
 - branch -d: refuse deleting a branch which is currently checked out

 When "git worktree" feature is in use, "git branch -d" allowed
 deletion of a branch that is checked out in another worktree

 Will merge to 'next'.


* ky/branch-m-worktree (2016-04-04) 2 commits
 - branch -m: update all per-worktree HEADs
 - refs: add a new function set_worktree_head_symref

 When "git worktree" feature is in use, "git branch -m" renamed a
 branch that is checked out in another worktree without adjusting
 the HEAD symbolic ref for the worktree.

 Will merge to 'next'.


* nd/apply-doc (2016-03-24) 2 commits
 - git-apply.txt: mention the behavior inside a subdir
 - git-apply.txt: remove a space

 Will merge to 'next'.


* nd/apply-report-skip (2016-03-24) 1 commit
 - apply: report patch skipping in verbose mode

 "git apply -v" learned to report paths in the patch that were
 skipped via --include/--exclude mechanism or being outside the
 current working directory.

 Will merge to 'next'.


* pb/opt-cmdmode-doc (2016-03-25) 1 commit
 - api-parse-options.txt: document OPT_CMDMODE()

 Minor API documentation update.

 Will merge to 'next'.


* rt/completion-help (2016-03-24) 2 commits
 - completion: add 'revisions' and 'everyday' to 'git help'
 - completion: add option '--guides' to 'git help'

 Shell completion (in contrib/) updates.

 Will merge to 'next'.


* rt/rebase-i-shorten-stop-report (2016-03-28) 1 commit
 - rebase-i: print an abbreviated hash when stop for editing

 The commit object name reported when "rebase -i" stops has been
 shortened.

 Will merge to 'next'.


* jk/check-repository-format (2016-03-11) 10 commits
 - verify_repository_format: mark messages for translation
 - setup: drop repository_format_version global
 - setup: unify repository version callbacks
 - init: use setup.c's repo version verification
 - setup: refactor repo format reading and verification
 - config: drop git_config_early
 - check_repository_format_gently: stop using git_config_early
 - lazily load core.sharedrepository
 - wrap shared_repository global in get/set accessors
 - setup: document check_repository_format()

 The repository set-up sequence has been streamlined (the biggest
 change is that there is no longer git_config_early()), so that we
 do not attempt to look into refs/* when we know we do not have a
 Git repository.

 Will merge to 'next'.


* mj/pull-rebase-autostash (2016-04-04) 9 commits
 - t5520: test --[no-]autostash with pull.rebase=true
 - t5520: reduce commom lines of code
 - t5520: factor out common "failing autostash" code
 - t5520: factor out common "successful autostash" code
 - t5520: use better test to check stderr output
 - t5520: ensure consistent test conditions
 - t5520: use consistent capitalization in test titles
 - pull --rebase: add --[no-]autostash flag
 - git-pull.c: introduce git_pull_config()

 "git pull --rebase" learned "--[no-]autostash" option, so that
 the rebase.autostash configuration variable set to true can be
 overridden from the command line.

 Will merge to 'next'.


* pb/commit-verbose-config (2016-03-14) 1 commit
 - commit: add a commit.verbose config variable
 (this branch uses pb/t7502-drop-dup.)

 "git commit" learned to pay attention to "commit.verbose"
 configuration variable and act as if "--verbose" option was
 given from the command line.

 Will merge to 'next'.


* pb/t7502-drop-dup (2016-03-11) 1 commit
  (merged to 'next' on 2016-04-04 at 4799cad)
 + t/t7502 : drop duplicate test
 (this branch is used by pb/commit-verbose-config.)

 Originally merged to 'next' on 2016-03-15

 Code clean-up.

 Will merge to 'master' after 2.8 final.


* ss/commit-squash-msg (2016-03-21) 1 commit
  (merged to 'next' on 2016-04-04 at d389f19)
 + commit: do not lose SQUASH_MSG contents

 Originally merged to 'next' on 2016-03-23

 When "git merge --squash" stopped due to conflict, the concluding
 "git commit" failed to read in the SQUASH_MSG that shows the log
 messages from all the squashed commits.

 Will merge to 'master' after 2.8 final.


* ls/p4-map-user (2016-03-15) 1 commit
  (merged to 'next' on 2016-04-04 at a56b011)
 + git-p4: map a P4 user to Git author name and email address

 Originally merged to 'next' on 2016-03-23

 "git p4" now allows P4 author names to be mapped to Git author
 names.

 Will merge to 'master' after 2.8 final.


* jc/merge-refuse-new-root (2016-03-23) 1 commit
  (merged to 'next' on 2016-04-04 at cd70fd6)
 + merge: refuse to create too cool a merge by default

 Originally merged to 'next' on 2016-03-23

 "git merge" used to allow merging two branches that have no common
 base by default, which led to a brand new history of an existing
 project created and then get pulled by an unsuspecting maintainer,
 which allowed an unnecessary parallel history merged into the
 existing project.  The command has been taught not to allow this by
 default, with an escape hatch "--allow-unrelated-histories" option
 to be used in a rare event that merges histories of two projects
 that started their lives independently.

 Will merge to 'master' after 2.8 final.


* jk/credential-cache-comment-exit (2016-03-18) 1 commit
  (merged to 'next' on 2016-04-04 at 50427fe)
 + credential-cache--daemon: clarify "exit" action semantics

 Originally merged to 'next' on 2016-03-23

 A code clarification.

 Will merge to 'master' after 2.8 final.


* jk/send-email-rtrim-mailrc-alias (2016-03-18) 1 commit
  (merged to 'next' on 2016-04-04 at 4d54956)
 + send-email: ignore trailing whitespace in mailrc alias file

 Originally merged to 'next' on 2016-03-23

 "git send-email" had trouble parsing alias file in mailrc format
 when lines in it had trailing whitespaces on them.

 Will merge to 'master' after 2.8 final.


* jk/test-httpd-config-nosystem (2016-03-18) 1 commit
  (merged to 'next' on 2016-04-04 at 5fa6274)
 + t/lib-httpd: pass through GIT_CONFIG_NOSYSTEM env

 Originally merged to 'next' on 2016-03-23

 The tests that involve running httpd leaked the system-wide
 configuration in /etc/gitconfig to the tested environment.

 Will merge to 'master' after 2.8 final.


* lt/pretty-expand-tabs (2016-03-30) 3 commits
 - pretty: allow tweaking tabwidth in --expand-tabs
 - pretty: enable --expand-tabs by default for selected pretty formats
 - pretty: expand tabs in indented logs to make things line up properly

 Needs tests.


* sb/clone-shallow-passthru (2016-03-23) 3 commits
 - clone: add t5614 to test cloning submodules with shallowness involved
 - submodule clone: pass along `local` option
 - clone: add `--shallow-submodules` flag
 (this branch uses sb/submodule-parallel-update; is tangled with sb/submodule-init.)

 "git clone" learned "--shallow-submodules" option.

 Needs review.


* sb/clone-t57-t56 (2016-03-16) 1 commit
  (merged to 'next' on 2016-04-04 at 5c20247)
 + clone tests: rename t57* => t56*

 Originally merged to 'next' on 2016-03-23

 Rename bunch of tests on "git clone" for better organization.

 Will merge to 'master' after 2.8 final.


* sb/rebase-x (2016-03-18) 2 commits
  (merged to 'next' on 2016-04-04 at feda620)
 + t3404: cleanup double empty lines between tests
 + rebase: decouple --exec from --interactive

 Originally merged to 'next' on 2016-03-23

 "git rebase -x" can be used without passing "-i" option.

 Will merge to 'master' after 2.8 final.


* cc/apply (2016-04-01) 4 commits
 - builtin/apply: free patch when parse_chunk() fails
 - builtin/apply: handle parse_binary() failure
 - apply: remove unused call to free() in gitdiff_{old,new}name()
 - builtin/apply: get rid of useless 'name' variable

 Minor code clean-up.

 Will merge to 'next'.


* dt/index-helper (2016-03-23) 18 commits
 - SQUASH - minimum compilation fix
 - read-cache: config for waiting for index-helper
 - index-helper: optionally automatically run
 - index-helper: autorun mode
 - index-helper: don't run if already running
 - index-helper: kill mode
 - unpack-trees: preserve index extensions
 - update-index: enable/disable watchman support
 - index-helper: use watchman to avoid refreshing index with lstat()
 - Add watchman support to reduce index refresh cost
 - read-cache: invalidate untracked cache data when reading WAMA
 - read-cache: add watchman 'WAMA' extension
 - index-helper: add --detach
 - daemonize(): set a flag before exiting the main process
 - index-helper: add --strict
 - index-helper: new daemon for caching index and related stuff
 - read-cache: allow to keep mmap'd memory after reading
 - read-cache.c: fix constness of verify_hdr()


* jv/merge-nothing-into-void (2016-03-23) 1 commit
  (merged to 'next' on 2016-04-04 at aa37405)
 + merge: fix NULL pointer dereference when merging nothing into void

 Originally merged to 'next' on 2016-03-23

 "git merge FETCH_HEAD" dereferenced NULL pointer when merging
 nothing into an unborn history (which is arguably unusual usage,
 which perhaps was the reason why nobody noticed it).

 Will merge to 'master' after 2.8 final.


* la/tag-force-signing-annotated-tags (2016-03-22) 1 commit
  (merged to 'next' on 2016-04-04 at a49ec4a)
 + tag: add the option to force signing of annotated tags

 Originally merged to 'next' on 2016-03-24

 "git tag" can create an annotated tag without explicitly given an
 "-a" (or "-s") option (i.e. when a tag message is given).  A new
 configuration variable, tag.forceSignAnnotated, can be used to tell
 the command to create signed tag in such a situation.

 Will merge to 'master' after 2.8 final.


* cc/doc-recommend-performance-trace-to-file (2016-03-07) 1 commit
  (merged to 'next' on 2016-04-04 at 26f94c0)
 + Documentation: talk about pager in api-trace.txt

 Originally merged to 'next' on 2016-03-23

 A minor documentation update.

 Will merge to 'master' after 2.8 final.


* da/mergetool-delete-delete-conflict (2016-03-10) 2 commits
  (merged to 'next' on 2016-04-04 at 34e645f)
 + mergetool: honor tempfile configuration when resolving delete conflicts
 + mergetool: support delete/delete conflicts

 Originally merged to 'next' on 2016-03-15

 "git mergetool" did not work well with conflicts that both sides
 deleted.

 Will merge to 'master' after 2.8 final.


* sg/completion-updates (2016-02-28) 21 commits
 - completion: cache the path to the repository
 - completion: extract repository discovery from __gitdir()
 - completion: don't guard git executions with __gitdir()
 - completion: consolidate silencing errors from git commands
 - completion: don't use __gitdir() for git commands
 - completion: respect 'git -C <path>'
 - completion: fix completion after 'git -C <path>'
 - completion: don't offer commands when 'git --opt' needs an argument
 - rev-parse: add '--absolute-git-dir' option
 - completion: list short refs from a remote given as a URL
 - completion: don't list 'HEAD' when trying refs completion outside of a repo
 - completion: list refs from remote when remote's name matches a directory
 - completion: respect 'git --git-dir=<path>' when listing remote refs
 - completion: fix most spots not respecting 'git --git-dir=<path>'
 - completion: ensure that the repository path given on the command line exists
 - completion tests: add tests for the __git_refs() helper function
 - completion tests: check __gitdir()'s output in the error cases
 - completion tests: consolidate getting path of current working directory
 - completion tests: make the $cur variable local to the test helper functions
 - completion tests: don't add test cruft to the test repository
 - completion: improve __git_refs()'s in-code documentation

 Will be rerolled.
 ($gmane/287839)


* ss/exc-flag-is-a-collection-of-bits (2016-03-01) 1 commit
  (merged to 'next' on 2016-04-04 at 9f0207e)
 + dir: store EXC_FLAG_* values in unsigned integers

 Originally merged to 'next' on 2016-03-04

 Code clean-up.

 Will merge to 'master' after 2.8 final.


* jc/bundle (2016-03-03) 6 commits
 - index-pack: --clone-bundle option
 - Merge branch 'jc/index-pack' into jc/bundle
 - bundle v3: the beginning
 - bundle: keep a copy of bundle file name in the in-core bundle header
 - bundle: plug resource leak
 - bundle doc: 'verify' is not about verifying the bundle

 The beginning of "split bundle", which could be one of the
 ingredients to allow "git clone" traffic off of the core server
 network to CDN.


* ss/receive-pack-parse-options (2016-03-01) 1 commit
  (merged to 'next' on 2016-04-04 at fd6ab4c)
 + builtin/receive-pack.c: use parse_options API

 Originally merged to 'next' on 2016-03-04

 The command line argument parser for "receive-pack" has been
 rewritten to use parse-options.

 Will merge to 'master' after 2.8 final.


* jk/submodule-c-credential (2016-03-23) 7 commits
  (merged to 'next' on 2016-04-04 at 8de8e8c)
 + git_config_push_parameter: handle empty GIT_CONFIG_PARAMETERS
 + git: submodule honor -c credential.* from command line
 + quote: implement sq_quotef()
 + submodule: fix segmentation fault in submodule--helper clone
 + submodule: fix submodule--helper clone usage
 + submodule: check argc count for git submodule--helper clone
 + submodule: don't pass empty string arguments to submodule--helper clone

 Originally merged to 'next' on 2016-03-23

 "git -c credential.<var>=<value> submodule" can now be used to
 propagate configuration variables related to credential helper
 down to the submodules.

 Will merge to 'master' after 2.8 final.


* nd/shallow-deepen (2016-02-23) 25 commits
 - fetch, upload-pack: --deepen=N extends shallow boundary by N commits
 - upload-pack: add get_reachable_list()
 - upload-pack: split check_unreachable() in two, prep for get_reachable_list()
 - t5500, t5539: tests for shallow depth excluding a ref
 - clone: define shallow clone boundary with --shallow-exclude
 - fetch: define shallow boundary with --shallow-exclude
 - upload-pack: support define shallow boundary by excluding revisions
 - refs: add expand_ref()
 - t5500, t5539: tests for shallow depth since a specific date
 - clone: define shallow clone boundary based on time with --shallow-since
 - fetch: define shallow boundary with --shallow-since
 - upload-pack: add deepen-since to cut shallow repos based on time
 - shallow.c: implement a generic shallow boundary finder based on rev-list
 - fetch-pack: use a separate flag for fetch in deepening mode
 - fetch-pack: use a common function for verbose printing
 - fetch-pack: use skip_prefix() instead of starts_with()
 - upload-pack: move rev-list code out of check_non_tip()
 - upload-pack: tighten number parsing at "deepen" lines
 - upload-pack: use skip_prefix() instead of starts_with()
 - upload-pack: move "unshallow" sending code out of deepen()
 - upload-pack: remove unused variable "backup"
 - upload-pack: move "shallow" sending code out of deepen()
 - upload-pack: move shallow deepen code out of receive_needs()
 - transport-helper.c: refactor set_helper_option()
 - remote-curl.c: convert fetch_git() to use argv_array

 The existing "git fetch --depth=<n>" option was hard to use
 correctly when making the history of an existing shallow clone
 deeper.  A new option, "--deepen=<n>", has been added to make this
 easier to use.  "git clone" also learned "--shallow-since=<date>"
 and "--shallow-exclude=<tag>" options to make it easier to specify
 "I am interested only in the recent N months worth of history" and
 "Give me only the history since that version".

 Needs review.


* sb/submodule-init (2016-03-15) 2 commits
 . submodule: port init from shell to C
 . submodule: port resolve_relative_url from shell to C
 (this branch uses sb/submodule-parallel-update; is tangled with sb/clone-shallow-passthru.)

 Update of "git submodule" to move pieces of logic to C continues.

 Needs review.
 ($gmane/288824)


* az/p4-bare-no-rebase (2016-02-19) 1 commit
 - git-p4.py: Don't try to rebase on submit from bare repository

 "git p4 submit" attempts to do a rebase, which would fail if done
 in a bare repository.  Not doing this rebase would paper over the
 failure, which is what this patch does, but it is unclear what the
 side effect of not rebasing is.

 Needs a better explanation.


* ss/commit-dry-run-resolve-merge-to-no-op (2016-02-17) 1 commit
 - wt-status.c: set commitable bit if there is a meaningful merge.

 "git commit --dry-run" reported "No, no, you cannot commit." in one
 case where "git commit" would have allowed you to commit, and this
 improves it a little bit ("git commit --dry-run --short" still does
 not give you the correct answer, for example).


* nd/icase (2016-02-15) 12 commits
 - grep.c: reuse "icase" variable
 - diffcore-pickaxe: support case insensitive match on non-ascii
 - diffcore-pickaxe: "share" regex error handling code
 - grep/pcre: support utf-8
 - gettext: add is_utf8_locale()
 - grep/pcre: prepare locale-dependent tables for icase matching
 - grep/icase: avoid kwsset when -F is specified
 - grep/icase: avoid kwsset on literal non-ascii strings
 - test-regex: expose full regcomp() to the command line
 - test-regex: isolate the bug test code
 - grep: break down an "if" stmt in preparation for next changes
 - grep: allow -F -i combination

 "git grep -i" has been taught to fold case in non-ascii locales.

 Needs review.
 ($gmane/286137)


* sb/submodule-parallel-update (2016-03-01) 10 commits
  (merged to 'next' on 2016-04-04 at a0aea8d)
 + clone: allow an explicit argument for parallel submodule clones
 + submodule update: expose parallelism to the user
 + submodule helper: remove double 'fatal: ' prefix
 + git submodule update: have a dedicated helper for cloning
 + run_processes_parallel: rename parameters for the callbacks
 + run_processes_parallel: treat output of children as byte array
 + submodule update: direct error message to stderr
 + fetching submodules: respect `submodule.fetchJobs` config option
 + submodule-config: drop check against NULL
 + submodule-config: keep update strategy around
 (this branch is used by sb/clone-shallow-passthru and sb/submodule-init.)

 Originally merged to 'next' on 2016-03-15

 A major part of "git submodule update" has been ported to C to take
 advantage of the recently added framework to run download tasks in
 parallel.

 Will merge to 'master' after 2.8 final.


* dt/refs-backend-lmdb (2016-02-25) 45 commits
 . SQUASH??? Minimum compilation band-aid
 . tests: add ref-storage argument
 . refs: tests for lmdb backend
 . refs: add LMDB refs storage backend
 . refs: break out resolve_ref_unsafe_submodule
 . config: read ref storage config on startup
 . refs: register ref storage backends
 . svn: learn ref-storage argument
 . clone: allow ref storage backend to be set for clone
 . refs: check submodules' ref storage config
 . init: allow alternate ref strorage to be set for new repos
 . refs: always handle non-normal refs in files backend
 . refs: resolve symbolic refs first
 . refs: on symref reflog expire, lock symref not referrent
 . refs: don't dereference on rename
 . refs: allow log-only updates
 . refs: move duplicate check to common code
 . refs: make lock generic
 . refs: handle non-normal ref renames
 . refs: add method to rename refs
 . refs: add methods to init refs db
 . refs: add method for delete_refs
 . refs: add method for initial ref transaction commit
 . refs: add methods for reflog
 . refs: add do_for_each_per_worktree_ref
 . refs: reduce the visibility of do_for_each_ref()
 . refs: add method for do_for_each_ref
 . refs: add methods for misc ref operations
 . refs: add a backend method structure with transaction functions
 . refs: move resolve_ref_unsafe into common code
 . files-backend: break out ref reading
 . refs: move for_each_*ref* functions into common code
 . refs: move head_ref{,_submodule} to the common code
 . Merge branch 'sb/submodule-parallel-update' into dt/refs-backend-lmdb
 . clone: allow an explicit argument for parallel submodule clones
 . submodule update: expose parallelism to the user
 . git submodule update: have a dedicated helper for cloning
 . run_processes_parallel: correctly terminate callbacks with an LF
 . run_processes_parallel: rename parameters for the callbacks
 . run-command: expose default_{start_failure, task_finished}
 . run_processes_parallel: treat output of children as byte array
 . submodule update: direct error message to stderr
 . fetching submodules: respect `submodule.fetchJobs` config option
 . submodule-config: drop check against NULL
 . submodule-config: keep update strategy around

 A reroll exists, but it seems that will further be rerolled.


* ad/cygwin-wants-rename (2015-08-07) 1 commit
 - config.mak.uname: Cygwin needs OBJECT_CREATION_USES_RENAMES

 Will hold.
 ($gmane/275680).


* jc/rerere-multi (2016-03-28) 11 commits
 - rerere: adjust 'forget' to multi-variant world order
 - rerere: split code to call ll_merge() further
 - rerere: move code related to "forget" together
 - rerere: gc and clear
 - rerere: do use multiple variants
 - t4200: rerere a merge with two identical conflicts
 - rerere: allow multiple variants to exist
 - rerere: delay the recording of preimage
 - rerere: handle leftover rr-cache/$ID directory and postimage files
 - rerere: scan $GIT_DIR/rr-cache/$ID when instantiating a rerere_id
 - rerere: split conflict ID further

 "git rerere" can encounter two or more files with the same conflict
 signature that have to be resolved in different ways, but there was
 no way to record these separate resolutions.

 Need to send out the final round of review as this should be now complete.


* jc/merge-drop-old-syntax (2015-04-29) 1 commit
 - merge: drop 'git merge <message> HEAD <commit>' syntax

 Stop supporting "git merge <message> HEAD <commit>" syntax that has
 been deprecated since October 2007.  It has been reported that
 git-gui still uses the deprecated syntax, which needs to be fixed
 before this final step can proceed.
 ($gmane/282594)

^ permalink raw reply	[relevance 2%]

* What's cooking in git.git (Apr 2016, #03; Thu, 7)
@ 2016-04-07 19:01  2% Junio C Hamano
  2016-04-07 21:03  0% ` Pranit Bauva
  0 siblings, 1 reply; 200+ results
From: Junio C Hamano @ 2016-04-07 19:01 UTC (permalink / raw)
  To: git

Here are the topics that have been cooking.  Commits prefixed with
'-' are only in 'pu' (proposed updates) while commits prefixed with
'+' are in 'next'.  The ones marked with '.' do not appear in any of
the integration branches, but I am still holding onto them.

The 'master' branch now has the second batch of topics of this
cycle.

There are a handful of topics that are stuck; they are marked as
"Needs review", "Needs an Ack", etc. in the following list.

You can find the changes described here in the integration branches
of the repositories listed at

    http://git-blame.blogspot.com/p/git-public-repositories.html

--------------------------------------------------
[Graduated to "master"]

* cc/doc-recommend-performance-trace-to-file (2016-03-07) 1 commit
  (merged to 'next' on 2016-04-04 at 26f94c0)
 + Documentation: talk about pager in api-trace.txt

 Originally merged to 'next' on 2016-03-23

 A minor documentation update.


* da/mergetool-delete-delete-conflict (2016-03-10) 2 commits
  (merged to 'next' on 2016-04-04 at 34e645f)
 + mergetool: honor tempfile configuration when resolving delete conflicts
 + mergetool: support delete/delete conflicts

 Originally merged to 'next' on 2016-03-15

 "git mergetool" did not work well with conflicts that both sides
 deleted.


* jk/credential-cache-comment-exit (2016-03-18) 1 commit
  (merged to 'next' on 2016-04-04 at 50427fe)
 + credential-cache--daemon: clarify "exit" action semantics

 Originally merged to 'next' on 2016-03-23

 A code clarification.


* jk/send-email-rtrim-mailrc-alias (2016-03-18) 1 commit
  (merged to 'next' on 2016-04-04 at 4d54956)
 + send-email: ignore trailing whitespace in mailrc alias file

 Originally merged to 'next' on 2016-03-23

 "git send-email" had trouble parsing alias file in mailrc format
 when lines in it had trailing whitespaces on them.


* jk/submodule-c-credential (2016-03-23) 7 commits
  (merged to 'next' on 2016-04-04 at 8de8e8c)
 + git_config_push_parameter: handle empty GIT_CONFIG_PARAMETERS
 + git: submodule honor -c credential.* from command line
 + quote: implement sq_quotef()
 + submodule: fix segmentation fault in submodule--helper clone
 + submodule: fix submodule--helper clone usage
 + submodule: check argc count for git submodule--helper clone
 + submodule: don't pass empty string arguments to submodule--helper clone

 Originally merged to 'next' on 2016-03-23

 "git -c credential.<var>=<value> submodule" can now be used to
 propagate configuration variables related to credential helper
 down to the submodules.


* jk/test-httpd-config-nosystem (2016-03-18) 1 commit
  (merged to 'next' on 2016-04-04 at 5fa6274)
 + t/lib-httpd: pass through GIT_CONFIG_NOSYSTEM env

 Originally merged to 'next' on 2016-03-23

 The tests that involve running httpd leaked the system-wide
 configuration in /etc/gitconfig to the tested environment.


* jv/merge-nothing-into-void (2016-03-23) 1 commit
  (merged to 'next' on 2016-04-04 at aa37405)
 + merge: fix NULL pointer dereference when merging nothing into void

 Originally merged to 'next' on 2016-03-23

 "git merge FETCH_HEAD" dereferenced NULL pointer when merging
 nothing into an unborn history (which is arguably unusual usage,
 which perhaps was the reason why nobody noticed it).


* la/tag-force-signing-annotated-tags (2016-03-22) 1 commit
  (merged to 'next' on 2016-04-04 at a49ec4a)
 + tag: add the option to force signing of annotated tags

 Originally merged to 'next' on 2016-03-24

 "git tag" can create an annotated tag without explicitly given an
 "-a" (or "-s") option (i.e. when a tag message is given).  A new
 configuration variable, tag.forceSignAnnotated, can be used to tell
 the command to create signed tag in such a situation.


* ls/p4-map-user (2016-03-15) 1 commit
  (merged to 'next' on 2016-04-04 at a56b011)
 + git-p4: map a P4 user to Git author name and email address

 Originally merged to 'next' on 2016-03-23

 "git p4" now allows P4 author names to be mapped to Git author
 names.


* pb/t7502-drop-dup (2016-03-11) 1 commit
  (merged to 'next' on 2016-04-04 at 4799cad)
 + t/t7502 : drop duplicate test
 (this branch is used by pb/commit-verbose-config.)

 Originally merged to 'next' on 2016-03-15

 Code clean-up.


* sb/clone-t57-t56 (2016-03-16) 1 commit
  (merged to 'next' on 2016-04-04 at 5c20247)
 + clone tests: rename t57* => t56*

 Originally merged to 'next' on 2016-03-23

 Rename bunch of tests on "git clone" for better organization.


* sb/rebase-x (2016-03-18) 2 commits
  (merged to 'next' on 2016-04-04 at feda620)
 + t3404: cleanup double empty lines between tests
 + rebase: decouple --exec from --interactive

 Originally merged to 'next' on 2016-03-23

 "git rebase -x" can be used without passing "-i" option.


* sb/submodule-parallel-update (2016-03-01) 10 commits
  (merged to 'next' on 2016-04-04 at a0aea8d)
 + clone: allow an explicit argument for parallel submodule clones
 + submodule update: expose parallelism to the user
 + submodule helper: remove double 'fatal: ' prefix
 + git submodule update: have a dedicated helper for cloning
 + run_processes_parallel: rename parameters for the callbacks
 + run_processes_parallel: treat output of children as byte array
 + submodule update: direct error message to stderr
 + fetching submodules: respect `submodule.fetchJobs` config option
 + submodule-config: drop check against NULL
 + submodule-config: keep update strategy around
 (this branch is used by sb/clone-shallow-passthru and sb/submodule-init.)

 Originally merged to 'next' on 2016-03-15

 A major part of "git submodule update" has been ported to C to take
 advantage of the recently added framework to run download tasks in
 parallel.


* ss/commit-squash-msg (2016-03-21) 1 commit
  (merged to 'next' on 2016-04-04 at d389f19)
 + commit: do not lose SQUASH_MSG contents

 Originally merged to 'next' on 2016-03-23

 When "git merge --squash" stopped due to conflict, the concluding
 "git commit" failed to read in the SQUASH_MSG that shows the log
 messages from all the squashed commits.


* ss/exc-flag-is-a-collection-of-bits (2016-03-01) 1 commit
  (merged to 'next' on 2016-04-04 at 9f0207e)
 + dir: store EXC_FLAG_* values in unsigned integers

 Originally merged to 'next' on 2016-03-04

 Code clean-up.


* ss/receive-pack-parse-options (2016-03-01) 1 commit
  (merged to 'next' on 2016-04-04 at fd6ab4c)
 + builtin/receive-pack.c: use parse_options API

 Originally merged to 'next' on 2016-03-04

 The command line argument parser for "receive-pack" has been
 rewritten to use parse-options.

--------------------------------------------------
[New Topics]

* jc/drop-git-spec-in (2016-04-06) 1 commit
 - Makefile: stop pretending to support rpmbuild

 As nobody maintains our in-tree git.spec.in and distros use their
 own spec file, we stopped pretending that we support "make rpm".


* jc/makefile-redirection-stderr (2016-04-05) 1 commit
  (merged to 'next' on 2016-04-06 at e3f2ded)
 + Makefile: fix misdirected redirections

 A minor fix in the Makefile.

 Will merge to 'master'.


* js/mingw-tests-2.8 (2016-04-04) 1 commit
  (merged to 'next' on 2016-04-06 at f85a013)
 + Windows: shorten code by re-using convert_slashes()

 Code clean-up.

 Will merge to 'master'.


* ar/diff-args-osx-precompose (2016-04-05) 1 commit
 - diff: run arguments through precompose_argv

 Many commands normalize command line arguments from NFD to NFC
 variant of UTF-8 on OSX, but commands in the "diff" family did
 not, causing "git diff $path" to complain that no such path is
 known to Git.  They have been taught to do the normalization.

 Will be rerolled?
 ($gmane/290724)


* ep/trace-doc-sample-fix (2016-04-05) 1 commit
  (merged to 'next' on 2016-04-06 at 0df7357)
 + api-trace.txt: fix typo

 Fix a typo in an example in the trace API documentation.

 Will merge to 'master'.


* ew/send-email-readable-message-id (2016-04-06) 1 commit
 - send-email: more meaningful Message-ID

 "git send-email" now uses a more readable timestamps when
 formulating a message ID.

 Will merge to 'next'.


* mg/complete-cherry-mark-to-log (2016-04-05) 1 commit
  (merged to 'next' on 2016-04-06 at 3002be6)
 + completion: complete --cherry-mark for git log

 The completion scripts (in contrib/) did not include the
 "--cherry-mark" option when completing "git log <HT>".

 Will merge to 'master'.


* tb/blame-force-read-cache-to-workaround-safe-crlf (2016-04-05) 1 commit
  (merged to 'next' on 2016-04-06 at 263bba8)
 + correct blame for files commited with CRLF

 When running "git blame $path" with unnormalized data in the index
 for the path, the data in the working tree was blamed, even though
 "git add" would not have changed what is already in the index, due
 to "safe crlf" that disables the line-end conversion.  It has been
 corrected.

 Will merge to 'master'.


* st/verify-tag (2016-04-06) 3 commits
 - verify-tag: change variable name for readability
 - t7030: test verifying multiple tags
 - builtin/verify-tag.c: ignore SIGPIPE in gpg-interface

 Only the first three patches in a six-patch series.


* ew/send-email-drop-data-dumper (2016-04-06) 1 commit
 - send-email: do not load Data::Dumper

 Code clean-up.

 Will merge to 'next'.

--------------------------------------------------
[Stalled]

* da/user-useconfigonly (2016-04-01) 2 commits
 - ident: give "please tell me" message upon useConfigOnly error
 - ident: check for useConfigOnly before auto-detection of name/email

 The "user.useConfigOnly" configuration variable makes it an error
 if users do not explicitly set user.name and user.email.  However,
 its check was not done early enough and allowed another error to
 trigger, reporting that the default value we guessed from the
 system setting was unusable.  This was a suboptimal end-user
 experience as we want the users to set user.name/user.email without
 relying on the auto-detection at all.

 Waiting for Acks.
 ($gmane/290340)


* sb/clone-shallow-passthru (2016-03-23) 3 commits
 - clone: add t5614 to test cloning submodules with shallowness involved
 - submodule clone: pass along `local` option
 - clone: add `--shallow-submodules` flag

 "git clone" learned "--shallow-submodules" option.

 Needs review.


* sg/completion-updates (2016-02-28) 21 commits
 - completion: cache the path to the repository
 - completion: extract repository discovery from __gitdir()
 - completion: don't guard git executions with __gitdir()
 - completion: consolidate silencing errors from git commands
 - completion: don't use __gitdir() for git commands
 - completion: respect 'git -C <path>'
 - completion: fix completion after 'git -C <path>'
 - completion: don't offer commands when 'git --opt' needs an argument
 - rev-parse: add '--absolute-git-dir' option
 - completion: list short refs from a remote given as a URL
 - completion: don't list 'HEAD' when trying refs completion outside of a repo
 - completion: list refs from remote when remote's name matches a directory
 - completion: respect 'git --git-dir=<path>' when listing remote refs
 - completion: fix most spots not respecting 'git --git-dir=<path>'
 - completion: ensure that the repository path given on the command line exists
 - completion tests: add tests for the __git_refs() helper function
 - completion tests: check __gitdir()'s output in the error cases
 - completion tests: consolidate getting path of current working directory
 - completion tests: make the $cur variable local to the test helper functions
 - completion tests: don't add test cruft to the test repository
 - completion: improve __git_refs()'s in-code documentation

 Will be rerolled.
 ($gmane/287839)


* nd/shallow-deepen (2016-02-23) 25 commits
 - fetch, upload-pack: --deepen=N extends shallow boundary by N commits
 - upload-pack: add get_reachable_list()
 - upload-pack: split check_unreachable() in two, prep for get_reachable_list()
 - t5500, t5539: tests for shallow depth excluding a ref
 - clone: define shallow clone boundary with --shallow-exclude
 - fetch: define shallow boundary with --shallow-exclude
 - upload-pack: support define shallow boundary by excluding revisions
 - refs: add expand_ref()
 - t5500, t5539: tests for shallow depth since a specific date
 - clone: define shallow clone boundary based on time with --shallow-since
 - fetch: define shallow boundary with --shallow-since
 - upload-pack: add deepen-since to cut shallow repos based on time
 - shallow.c: implement a generic shallow boundary finder based on rev-list
 - fetch-pack: use a separate flag for fetch in deepening mode
 - fetch-pack: use a common function for verbose printing
 - fetch-pack: use skip_prefix() instead of starts_with()
 - upload-pack: move rev-list code out of check_non_tip()
 - upload-pack: tighten number parsing at "deepen" lines
 - upload-pack: use skip_prefix() instead of starts_with()
 - upload-pack: move "unshallow" sending code out of deepen()
 - upload-pack: remove unused variable "backup"
 - upload-pack: move "shallow" sending code out of deepen()
 - upload-pack: move shallow deepen code out of receive_needs()
 - transport-helper.c: refactor set_helper_option()
 - remote-curl.c: convert fetch_git() to use argv_array

 The existing "git fetch --depth=<n>" option was hard to use
 correctly when making the history of an existing shallow clone
 deeper.  A new option, "--deepen=<n>", has been added to make this
 easier to use.  "git clone" also learned "--shallow-since=<date>"
 and "--shallow-exclude=<tag>" options to make it easier to specify
 "I am interested only in the recent N months worth of history" and
 "Give me only the history since that version".

 Needs review.


* sb/submodule-init (2016-03-15) 2 commits
 . submodule: port init from shell to C
 . submodule: port resolve_relative_url from shell to C

 Update of "git submodule" to move pieces of logic to C continues.

 Needs review.
 ($gmane/288824)


* az/p4-bare-no-rebase (2016-02-19) 1 commit
 - git-p4.py: Don't try to rebase on submit from bare repository

 "git p4 submit" attempts to do a rebase, which would fail if done
 in a bare repository.  Not doing this rebase would paper over the
 failure, which is what this patch does, but it is unclear what the
 side effect of not rebasing is.

 Needs a better explanation.


* ss/commit-dry-run-resolve-merge-to-no-op (2016-02-17) 1 commit
 - wt-status.c: set commitable bit if there is a meaningful merge.

 "git commit --dry-run" reported "No, no, you cannot commit." in one
 case where "git commit" would have allowed you to commit, and this
 improves it a little bit ("git commit --dry-run --short" still does
 not give you the correct answer, for example).


* nd/icase (2016-02-15) 12 commits
 - grep.c: reuse "icase" variable
 - diffcore-pickaxe: support case insensitive match on non-ascii
 - diffcore-pickaxe: "share" regex error handling code
 - grep/pcre: support utf-8
 - gettext: add is_utf8_locale()
 - grep/pcre: prepare locale-dependent tables for icase matching
 - grep/icase: avoid kwsset when -F is specified
 - grep/icase: avoid kwsset on literal non-ascii strings
 - test-regex: expose full regcomp() to the command line
 - test-regex: isolate the bug test code
 - grep: break down an "if" stmt in preparation for next changes
 - grep: allow -F -i combination

 "git grep -i" has been taught to fold case in non-ascii locales.

 Needs review.
 ($gmane/286137)


* dt/refs-backend-lmdb (2016-02-25) 45 commits
 . SQUASH??? Minimum compilation band-aid
 . tests: add ref-storage argument
 . refs: tests for lmdb backend
 . refs: add LMDB refs storage backend
 . refs: break out resolve_ref_unsafe_submodule
 . config: read ref storage config on startup
 . refs: register ref storage backends
 . svn: learn ref-storage argument
 . clone: allow ref storage backend to be set for clone
 . refs: check submodules' ref storage config
 . init: allow alternate ref strorage to be set for new repos
 . refs: always handle non-normal refs in files backend
 . refs: resolve symbolic refs first
 . refs: on symref reflog expire, lock symref not referrent
 . refs: don't dereference on rename
 . refs: allow log-only updates
 . refs: move duplicate check to common code
 . refs: make lock generic
 . refs: handle non-normal ref renames
 . refs: add method to rename refs
 . refs: add methods to init refs db
 . refs: add method for delete_refs
 . refs: add method for initial ref transaction commit
 . refs: add methods for reflog
 . refs: add do_for_each_per_worktree_ref
 . refs: reduce the visibility of do_for_each_ref()
 . refs: add method for do_for_each_ref
 . refs: add methods for misc ref operations
 . refs: add a backend method structure with transaction functions
 . refs: move resolve_ref_unsafe into common code
 . files-backend: break out ref reading
 . refs: move for_each_*ref* functions into common code
 . refs: move head_ref{,_submodule} to the common code
 . Merge branch 'sb/submodule-parallel-update' into dt/refs-backend-lmdb
 . clone: allow an explicit argument for parallel submodule clones
 . submodule update: expose parallelism to the user
 . git submodule update: have a dedicated helper for cloning
 . run_processes_parallel: correctly terminate callbacks with an LF
 . run_processes_parallel: rename parameters for the callbacks
 . run-command: expose default_{start_failure, task_finished}
 . run_processes_parallel: treat output of children as byte array
 . submodule update: direct error message to stderr
 . fetching submodules: respect `submodule.fetchJobs` config option
 . submodule-config: drop check against NULL
 . submodule-config: keep update strategy around

 A reroll exists, but it seems that will further be rerolled.


* ec/annotate-deleted (2015-11-20) 1 commit
 - annotate: skip checking working tree if a revision is provided

 Usability fix for annotate-specific "<file> <rev>" syntax with deleted
 files.

 Waiting for review.


* dg/subtree-rebase-test (2016-01-19) 1 commit
 - contrib/subtree: Add a test for subtree rebase that loses commits

 Reviewed up to v5.
 Will be rerolled.
 ($gmane/284426)


* js/am-3-merge-recursive-direct (2015-10-12) 2 commits
 - am: make a direct call to merge_recursive
 - merge_recursive_options: introduce the "gently" flag

 The merge_recursive_generic() function has been made a bit safer to
 call from inside a process.  "git am -3" was taught to make a direct
 call to the function when falling back to three-way merge.

 Being able to make a direct call would be good in general, but as a
 performance thing, the change needs to be backed up by numbers.

 Needs review.

 I haven't gone through the "gently" change with fine toothed comb;
 I can see that the change avoids calling die(), but I haven't made
 sure that the program states (e.g. what's in the in-core index) are
 adjusted sensibly when it returns to the caller instead of dying,
 or the codepaths that used to die() are free of resource leaks.
 The original code certainly did not care the program states at the
 point of dying exactly because it knew it is going to exit, but now
 they have to care, and they need to be audited.


* dk/gc-more-wo-pack (2016-01-13) 4 commits
 - gc: clean garbage .bitmap files from pack dir
 - t5304: ensure non-garbage files are not deleted
 - t5304: test .bitmap garbage files
 - prepare_packed_git(): find more garbage

 Follow-on to dk/gc-idx-wo-pack topic, to clean up stale
 .bitmap and .keep files.

 Waiting for a reroll.
 ($gmane/284368).


* jc/diff-b-m (2015-02-23) 5 commits
 . WIPWIP
 . WIP: diff-b-m
 - diffcore-rename: allow easier debugging
 - diffcore-rename.c: add locate_rename_src()
 - diffcore-break: allow debugging

 "git diff -B -M" produced incorrect patch when the postimage of a
 completely rewritten file is similar to the preimage of a removed
 file; such a resulting file must not be expressed as a rename from
 other place.

 The fix in this patch is broken, unfortunately.
 Will discard.

--------------------------------------------------
[Cooking]

* es/format-patch-doc-hide-no-patch (2016-04-04) 1 commit
  (merged to 'next' on 2016-04-06 at 25d79bb)
 + git-format-patch.txt: don't show -s as shorthand for multiple options

 "git format-patch --help" showed `-s` and `--no-patch` as if these
 are valid options to the command.  We already hide `--patch` option
 from the documentation, because format-patch is about showing the
 diff, and the documentation now hides these options as well.

 Will merge to 'master'.


* jk/branch-shortening-funny-symrefs (2016-04-04) 1 commit
  (merged to 'next' on 2016-04-06 at 1a3f8be)
 + branch: fix shortening of non-remote symrefs

 A change back in version 2.7 to "git branch" broke display of a
 symbolic ref in a non-standard place in the refs/ hierarchy (we
 expect symbolic refs to appear in refs/remotes/*/HEAD to point at
 the primary branch the remote has, and as .git/HEAD to point at the
 branch we locally checked out).

 Will merge to 'next' and later down to maint-2.7.


* jn/mergetools-examdiff (2016-04-04) 2 commits
  (merged to 'next' on 2016-04-06 at 819e858)
 + mergetools: add support for ExamDiff
 + mergetools: create mergetool_find_win32_cmd() helper function for winmerge

 "git mergetools" learned to drive ExamDiff.

 Will merge to 'master'.


* kn/for-each-tag-branch (2016-03-30) 1 commit
  (merged to 'next' on 2016-04-06 at 4595ad3)
 + for-each-ref: fix description of '--contains' in manpage

 A minor documentation update.

 Will merge to 'master'.


* kn/ref-filter-branch-list (2016-03-30) 16 commits
 . branch: implement '--format' option
 . branch: use ref-filter printing APIs
 . branch, tag: use porcelain output
 . ref-filter: allow porcelain to translate messages in the output
 . ref-filter: add support for %(refname:dir) and %(refname:base)
 . ref-filter: introduce refname_atom_parser()
 . ref-filter: introduce symref_atom_parser()
 . ref-filter: make "%(symref)" atom work with the ':short' modifier
 . ref-filter: add support for %(upstream:track,nobracket)
 . ref-filter: make %(upstream:track) prints "[gone]" for invalid upstreams
 . ref-filter: introduce format_ref_array_item()
 . ref-filter: move get_head_description() from branch.c
 . ref-filter: modify "%(objectname:short)" to take length
 . ref-filter: implement %(if:equals=<string>) and %(if:notequals=<string>)
 . ref-filter: include reference to 'used_atom' within 'atom_value'
 . ref-filter: implement %(if), %(then), and %(else) atoms

 The code to list branches in "git branch" has been consolidated
 with the more generic ref-filter API.

 Will be rerolled.


* oa/doc-diff-check (2016-03-29) 1 commit
  (merged to 'next' on 2016-04-06 at e3d6e8d)
 + Documentation: git diff --check detects conflict markers

 A minor documentation update.

 Will merge to 'master'.


* rz/worktree-no-checkout (2016-03-29) 1 commit
  (merged to 'next' on 2016-04-06 at e725216)
 + worktree: add: introduce --checkout option

 "git worktree add" can be given "--no-checkout" option to only
 create an empty worktree without checking out the files.

 Will merge to 'master'.


* sb/misc-cleanups (2016-04-01) 4 commits
  (merged to 'next' on 2016-04-06 at 4e63691)
 + credential-cache, send_request: close fd when done
 + bundle: don't leak an fd in case of early return
 + abbrev_sha1_in_line: don't leak memory
 + notes: don't leak memory in git_config_get_notes_strategy

 Assorted minor clean-ups.

 Will merge to 'master'.


* sb/submodule-helper-clone-regression-fix (2016-04-01) 6 commits
 - submodule--helper, module_clone: catch fprintf failure
 - submodule--helper: do not borrow absolute_path() result for too long
 - submodule--helper, module_clone: always operate on absolute paths
 - submodule--helper clone: create the submodule path just once
 - submodule--helper: fix potential NULL-dereference
 - recursive submodules: test for relative paths

 A partial rewrite of "git submodule" in the 2.7 timeframe changed
 the way the gitdir: pointer in the submodules point at the real
 repository location to use absolute paths by accident.  This has
 been corrected.

 Any further comments?  Otherwise will merge to 'next'.


* sb/submodule-path-misc-bugs (2016-03-30) 6 commits
 - t7407: make expectation as clear as possible
 - submodule update: test recursive path reporting from subdirectory
 - submodule update: align reporting path for custom command execution
 - submodule status: correct path handling in recursive submodules
 - submodule update --init: correct path handling in recursive submodules
 - submodule foreach: correct path display in recursive submodules

 "git submodule" reports the paths of submodules the command
 recurses into, but this was incorrect when the command was not run
 from the root level of the superproject.

 Any further comments?  Otherwise will merge to 'next'.


* sg/diff-multiple-identical-renames (2016-03-30) 1 commit
  (merged to 'next' on 2016-04-06 at ac19e48)
 + diffcore: fix iteration order of identical files during rename detection

 "git diff -M" used to work better when two originally identical
 files A and B got renamed to X/A and X/B by pairing A to X/A and B
 to X/B, but this was broken in the 2.0 timeframe.

 Will merge to 'master'.


* sk/send-pack-all-fix (2016-03-31) 1 commit
  (merged to 'next' on 2016-04-06 at 31e1e1b)
 + git-send-pack: fix --all option when used with directory

 "git send-pack --all <there>" was broken when its command line
 option parsing was written in the 2.6 timeframe.

 Will merge to 'master'.


* ss/msvc (2016-03-30) 2 commits
  (merged to 'next' on 2016-04-06 at 4b53bce)
 + MSVC: use shipped headers instead of fallback definitions
 + MSVC: vsnprintf in Visual Studio 2015 doesn't need SNPRINTF_SIZE_CORR any more

 Build updates for MSVC.

 Will merge to 'master'.


* xy/format-patch-base (2016-03-31) 4 commits
 - format-patch: introduce format.base configuration
 - format-patch: introduce --base=auto option
 - format-patch: add '--base' option to record base tree info
 - patch-ids: make commit_patch_id() a public helper function

 "git format-patch" learned a new "--base" option to record what
 (public, well-known) commit the original series was built on in
 its output.

 Will be rerolled.
 ($gmane/290365)


* tb/safe-crlf-output-fix (2016-04-01) 7 commits
 . convert.c: more safer crlf handling with text attribute
 . correct blame for files commited with CRLF
 . convert: unify the "auto" handling of CRLF
 . t0027: test cases for combined attributes
 . convert: allow core.autocrlf=input and core.eol=crlf
 . convert.c: stream and early out
 . read-cache: factor out get_sha1_from_index() helper

 The "safe CRLF" facility disables line-end conversion from CRLF to
 LF when checking in if the blob registered to the index already
 contains CR, but some codepaths like "git blame" did not know this,
 and instead assumed that only the configuration and attribute
 settings determined how the data from the working tree is converted.

 Will be rerolled.
 ($gmane/290637)


* ak/use-hashmap-iter-first-in-submodule-config (2016-03-23) 1 commit
  (merged to 'next' on 2016-04-06 at 2aab890)
 + submodule-config: use hashmap_iter_first()

 Minor code cleanup.

 Will merge to 'master'.


* ky/branch-d-worktree (2016-03-29) 1 commit
  (merged to 'next' on 2016-04-06 at 00f9bff)
 + branch -d: refuse deleting a branch which is currently checked out

 When "git worktree" feature is in use, "git branch -d" allowed
 deletion of a branch that is checked out in another worktree

 Will merge to 'master'.


* ky/branch-m-worktree (2016-04-04) 2 commits
  (merged to 'next' on 2016-04-06 at e7b285c)
 + branch -m: update all per-worktree HEADs
 + refs: add a new function set_worktree_head_symref

 When "git worktree" feature is in use, "git branch -m" renamed a
 branch that is checked out in another worktree without adjusting
 the HEAD symbolic ref for the worktree.

 Will merge to 'master'.


* nd/apply-doc (2016-03-24) 2 commits
  (merged to 'next' on 2016-04-06 at f9bd355)
 + git-apply.txt: mention the behavior inside a subdir
 + git-apply.txt: remove a space

 A minor documentation update.

 Will merge to 'master'.


* nd/apply-report-skip (2016-03-24) 1 commit
  (merged to 'next' on 2016-04-06 at ae2c824)
 + apply: report patch skipping in verbose mode

 "git apply -v" learned to report paths in the patch that were
 skipped via --include/--exclude mechanism or being outside the
 current working directory.

 Will merge to 'master'.


* pb/opt-cmdmode-doc (2016-03-25) 1 commit
  (merged to 'next' on 2016-04-06 at a5f3835)
 + api-parse-options.txt: document OPT_CMDMODE()

 Minor API documentation update.

 Will merge to 'master'.


* rt/completion-help (2016-03-24) 2 commits
  (merged to 'next' on 2016-04-06 at 8c3ee08)
 + completion: add 'revisions' and 'everyday' to 'git help'
 + completion: add option '--guides' to 'git help'

 Shell completion (in contrib/) updates.

 Will merge to 'master'.


* rt/rebase-i-shorten-stop-report (2016-03-28) 1 commit
  (merged to 'next' on 2016-04-06 at 7a766b7)
 + rebase-i: print an abbreviated hash when stop for editing

 The commit object name reported when "rebase -i" stops has been
 shortened.

 Will merge to 'master'.


* jk/check-repository-format (2016-03-11) 10 commits
  (merged to 'next' on 2016-04-06 at a0dada0)
 + verify_repository_format: mark messages for translation
 + setup: drop repository_format_version global
 + setup: unify repository version callbacks
 + init: use setup.c's repo version verification
 + setup: refactor repo format reading and verification
 + config: drop git_config_early
 + check_repository_format_gently: stop using git_config_early
 + lazily load core.sharedrepository
 + wrap shared_repository global in get/set accessors
 + setup: document check_repository_format()

 The repository set-up sequence has been streamlined (the biggest
 change is that there is no longer git_config_early()), so that we
 do not attempt to look into refs/* when we know we do not have a
 Git repository.

 Will merge to 'master'.


* mj/pull-rebase-autostash (2016-04-04) 9 commits
  (merged to 'next' on 2016-04-06 at b4e4f31)
 + t5520: test --[no-]autostash with pull.rebase=true
 + t5520: reduce commom lines of code
 + t5520: factor out common "failing autostash" code
 + t5520: factor out common "successful autostash" code
 + t5520: use better test to check stderr output
 + t5520: ensure consistent test conditions
 + t5520: use consistent capitalization in test titles
 + pull --rebase: add --[no-]autostash flag
 + git-pull.c: introduce git_pull_config()

 "git pull --rebase" learned "--[no-]autostash" option, so that
 the rebase.autostash configuration variable set to true can be
 overridden from the command line.

 Will merge to 'master'.


* pb/commit-verbose-config (2016-03-14) 1 commit
  (merged to 'next' on 2016-04-06 at e5c744f)
 + commit: add a commit.verbose config variable

 "git commit" learned to pay attention to "commit.verbose"
 configuration variable and act as if "--verbose" option was
 given from the command line.

 Will merge to 'master'.


* jc/merge-refuse-new-root (2016-03-23) 1 commit
  (merged to 'next' on 2016-04-04 at cd70fd6)
 + merge: refuse to create too cool a merge by default

 Originally merged to 'next' on 2016-03-23

 "git merge" used to allow merging two branches that have no common
 base by default, which led to a brand new history of an existing
 project created and then get pulled by an unsuspecting maintainer,
 which allowed an unnecessary parallel history merged into the
 existing project.  The command has been taught not to allow this by
 default, with an escape hatch "--allow-unrelated-histories" option
 to be used in a rare event that merges histories of two projects
 that started their lives independently.

 Will merge to 'master'.


* lt/pretty-expand-tabs (2016-04-04) 4 commits
  (merged to 'next' on 2016-04-06 at 186ac2a)
 + pretty: test --expand-tabs
 + pretty: allow tweaking tabwidth in --expand-tabs
 + pretty: enable --expand-tabs by default for selected pretty formats
 + pretty: expand tabs in indented logs to make things line up properly

 When "git log" shows the log message indented by 4-spaces, the
 remainder of a line after a HT does not align in the way the author
 originally intended.  The command now expands tabs by default in
 such a case, and allows the users to override it with a new option,
 '--no-expand-tabs'.

 Will merge to 'master'.


* cc/apply (2016-04-01) 4 commits
  (merged to 'next' on 2016-04-06 at 2e23c44)
 + builtin/apply: free patch when parse_chunk() fails
 + builtin/apply: handle parse_binary() failure
 + apply: remove unused call to free() in gitdiff_{old,new}name()
 + builtin/apply: get rid of useless 'name' variable

 Minor code clean-up.

 Will merge to 'master'.


* dt/index-helper (2016-03-23) 18 commits
 - SQUASH - minimum compilation fix
 - read-cache: config for waiting for index-helper
 - index-helper: optionally automatically run
 - index-helper: autorun mode
 - index-helper: don't run if already running
 - index-helper: kill mode
 - unpack-trees: preserve index extensions
 - update-index: enable/disable watchman support
 - index-helper: use watchman to avoid refreshing index with lstat()
 - Add watchman support to reduce index refresh cost
 - read-cache: invalidate untracked cache data when reading WAMA
 - read-cache: add watchman 'WAMA' extension
 - index-helper: add --detach
 - daemonize(): set a flag before exiting the main process
 - index-helper: add --strict
 - index-helper: new daemon for caching index and related stuff
 - read-cache: allow to keep mmap'd memory after reading
 - read-cache.c: fix constness of verify_hdr()

 Needs review.


* jc/bundle (2016-03-03) 6 commits
 - index-pack: --clone-bundle option
 - Merge branch 'jc/index-pack' into jc/bundle
 - bundle v3: the beginning
 - bundle: keep a copy of bundle file name in the in-core bundle header
 - bundle: plug resource leak
 - bundle doc: 'verify' is not about verifying the bundle

 The beginning of "split bundle", which could be one of the
 ingredients to allow "git clone" traffic off of the core server
 network to CDN.


* ad/cygwin-wants-rename (2015-08-07) 1 commit
 - config.mak.uname: Cygwin needs OBJECT_CREATION_USES_RENAMES

 Will hold.
 ($gmane/275680).


* jc/rerere-multi (2016-04-06) 11 commits
 - rerere: adjust 'forget' to multi-variant world order
 - rerere: split code to call ll_merge() further
 - rerere: move code related to "forget" together
 - rerere: gc and clear
 - rerere: do use multiple variants
 - t4200: rerere a merge with two identical conflicts
 - rerere: allow multiple variants to exist
 - rerere: delay the recording of preimage
 - rerere: handle leftover rr-cache/$ID directory and postimage files
 - rerere: scan $GIT_DIR/rr-cache/$ID when instantiating a rerere_id
 - rerere: split conflict ID further

 "git rerere" can encounter two or more files with the same conflict
 signature that have to be resolved in different ways, but there was
 no way to record these separate resolutions.

 Will merge to 'next'.


* jc/merge-drop-old-syntax (2015-04-29) 1 commit
 - merge: drop 'git merge <message> HEAD <commit>' syntax

 Stop supporting "git merge <message> HEAD <commit>" syntax that has
 been deprecated since October 2007, and issues a deprecation
 warning message since v2.5.0.

 It has been reported that git-gui still uses the deprecated syntax,
 which needs to be fixed before this final step can proceed.
 ($gmane/282594)

^ permalink raw reply	[relevance 2%]

* Re: What's cooking in git.git (Apr 2016, #03; Thu, 7)
  2016-04-07 19:01  2% What's cooking in git.git (Apr 2016, #03; Thu, 7) Junio C Hamano
@ 2016-04-07 21:03  0% ` Pranit Bauva
  0 siblings, 0 replies; 200+ results
From: Pranit Bauva @ 2016-04-07 21:03 UTC (permalink / raw)
  To: Junio C Hamano; +Cc: Git List

On Fri, Apr 8, 2016 at 12:31 AM, Junio C Hamano <gitster@pobox.com> wrote:
> Here are the topics that have been cooking.  Commits prefixed with
> '-' are only in 'pu' (proposed updates) while commits prefixed with
> '+' are in 'next'.  The ones marked with '.' do not appear in any of
> the integration branches, but I am still holding onto them.
>
> The 'master' branch now has the second batch of topics of this
> cycle.
>
> There are a handful of topics that are stuck; they are marked as
> "Needs review", "Needs an Ack", etc. in the following list.
>
> You can find the changes described here in the integration branches
> of the repositories listed at
>
>     http://git-blame.blogspot.com/p/git-public-repositories.html
>
> --------------------------------------------------
> [Graduated to "master"]
>
> * cc/doc-recommend-performance-trace-to-file (2016-03-07) 1 commit
>   (merged to 'next' on 2016-04-04 at 26f94c0)
>  + Documentation: talk about pager in api-trace.txt
>
>  Originally merged to 'next' on 2016-03-23
>
>  A minor documentation update.
>
>
> * da/mergetool-delete-delete-conflict (2016-03-10) 2 commits
>   (merged to 'next' on 2016-04-04 at 34e645f)
>  + mergetool: honor tempfile configuration when resolving delete conflicts
>  + mergetool: support delete/delete conflicts
>
>  Originally merged to 'next' on 2016-03-15
>
>  "git mergetool" did not work well with conflicts that both sides
>  deleted.
>
>
> * jk/credential-cache-comment-exit (2016-03-18) 1 commit
>   (merged to 'next' on 2016-04-04 at 50427fe)
>  + credential-cache--daemon: clarify "exit" action semantics
>
>  Originally merged to 'next' on 2016-03-23
>
>  A code clarification.
>
>
> * jk/send-email-rtrim-mailrc-alias (2016-03-18) 1 commit
>   (merged to 'next' on 2016-04-04 at 4d54956)
>  + send-email: ignore trailing whitespace in mailrc alias file
>
>  Originally merged to 'next' on 2016-03-23
>
>  "git send-email" had trouble parsing alias file in mailrc format
>  when lines in it had trailing whitespaces on them.
>
>
> * jk/submodule-c-credential (2016-03-23) 7 commits
>   (merged to 'next' on 2016-04-04 at 8de8e8c)
>  + git_config_push_parameter: handle empty GIT_CONFIG_PARAMETERS
>  + git: submodule honor -c credential.* from command line
>  + quote: implement sq_quotef()
>  + submodule: fix segmentation fault in submodule--helper clone
>  + submodule: fix submodule--helper clone usage
>  + submodule: check argc count for git submodule--helper clone
>  + submodule: don't pass empty string arguments to submodule--helper clone
>
>  Originally merged to 'next' on 2016-03-23
>
>  "git -c credential.<var>=<value> submodule" can now be used to
>  propagate configuration variables related to credential helper
>  down to the submodules.
>
>
> * jk/test-httpd-config-nosystem (2016-03-18) 1 commit
>   (merged to 'next' on 2016-04-04 at 5fa6274)
>  + t/lib-httpd: pass through GIT_CONFIG_NOSYSTEM env
>
>  Originally merged to 'next' on 2016-03-23
>
>  The tests that involve running httpd leaked the system-wide
>  configuration in /etc/gitconfig to the tested environment.
>
>
> * jv/merge-nothing-into-void (2016-03-23) 1 commit
>   (merged to 'next' on 2016-04-04 at aa37405)
>  + merge: fix NULL pointer dereference when merging nothing into void
>
>  Originally merged to 'next' on 2016-03-23
>
>  "git merge FETCH_HEAD" dereferenced NULL pointer when merging
>  nothing into an unborn history (which is arguably unusual usage,
>  which perhaps was the reason why nobody noticed it).
>
>
> * la/tag-force-signing-annotated-tags (2016-03-22) 1 commit
>   (merged to 'next' on 2016-04-04 at a49ec4a)
>  + tag: add the option to force signing of annotated tags
>
>  Originally merged to 'next' on 2016-03-24
>
>  "git tag" can create an annotated tag without explicitly given an
>  "-a" (or "-s") option (i.e. when a tag message is given).  A new
>  configuration variable, tag.forceSignAnnotated, can be used to tell
>  the command to create signed tag in such a situation.
>
>
> * ls/p4-map-user (2016-03-15) 1 commit
>   (merged to 'next' on 2016-04-04 at a56b011)
>  + git-p4: map a P4 user to Git author name and email address
>
>  Originally merged to 'next' on 2016-03-23
>
>  "git p4" now allows P4 author names to be mapped to Git author
>  names.
>
>
> * pb/t7502-drop-dup (2016-03-11) 1 commit
>   (merged to 'next' on 2016-04-04 at 4799cad)
>  + t/t7502 : drop duplicate test
>  (this branch is used by pb/commit-verbose-config.)
>
>  Originally merged to 'next' on 2016-03-15
>
>  Code clean-up.
>
>
> * sb/clone-t57-t56 (2016-03-16) 1 commit
>   (merged to 'next' on 2016-04-04 at 5c20247)
>  + clone tests: rename t57* => t56*
>
>  Originally merged to 'next' on 2016-03-23
>
>  Rename bunch of tests on "git clone" for better organization.
>
>
> * sb/rebase-x (2016-03-18) 2 commits
>   (merged to 'next' on 2016-04-04 at feda620)
>  + t3404: cleanup double empty lines between tests
>  + rebase: decouple --exec from --interactive
>
>  Originally merged to 'next' on 2016-03-23
>
>  "git rebase -x" can be used without passing "-i" option.
>
>
> * sb/submodule-parallel-update (2016-03-01) 10 commits
>   (merged to 'next' on 2016-04-04 at a0aea8d)
>  + clone: allow an explicit argument for parallel submodule clones
>  + submodule update: expose parallelism to the user
>  + submodule helper: remove double 'fatal: ' prefix
>  + git submodule update: have a dedicated helper for cloning
>  + run_processes_parallel: rename parameters for the callbacks
>  + run_processes_parallel: treat output of children as byte array
>  + submodule update: direct error message to stderr
>  + fetching submodules: respect `submodule.fetchJobs` config option
>  + submodule-config: drop check against NULL
>  + submodule-config: keep update strategy around
>  (this branch is used by sb/clone-shallow-passthru and sb/submodule-init.)
>
>  Originally merged to 'next' on 2016-03-15
>
>  A major part of "git submodule update" has been ported to C to take
>  advantage of the recently added framework to run download tasks in
>  parallel.
>
>
> * ss/commit-squash-msg (2016-03-21) 1 commit
>   (merged to 'next' on 2016-04-04 at d389f19)
>  + commit: do not lose SQUASH_MSG contents
>
>  Originally merged to 'next' on 2016-03-23
>
>  When "git merge --squash" stopped due to conflict, the concluding
>  "git commit" failed to read in the SQUASH_MSG that shows the log
>  messages from all the squashed commits.
>
>
> * ss/exc-flag-is-a-collection-of-bits (2016-03-01) 1 commit
>   (merged to 'next' on 2016-04-04 at 9f0207e)
>  + dir: store EXC_FLAG_* values in unsigned integers
>
>  Originally merged to 'next' on 2016-03-04
>
>  Code clean-up.
>
>
> * ss/receive-pack-parse-options (2016-03-01) 1 commit
>   (merged to 'next' on 2016-04-04 at fd6ab4c)
>  + builtin/receive-pack.c: use parse_options API
>
>  Originally merged to 'next' on 2016-03-04
>
>  The command line argument parser for "receive-pack" has been
>  rewritten to use parse-options.
>
> --------------------------------------------------
> [New Topics]
>
> * jc/drop-git-spec-in (2016-04-06) 1 commit
>  - Makefile: stop pretending to support rpmbuild
>
>  As nobody maintains our in-tree git.spec.in and distros use their
>  own spec file, we stopped pretending that we support "make rpm".
>
>
> * jc/makefile-redirection-stderr (2016-04-05) 1 commit
>   (merged to 'next' on 2016-04-06 at e3f2ded)
>  + Makefile: fix misdirected redirections
>
>  A minor fix in the Makefile.
>
>  Will merge to 'master'.
>
>
> * js/mingw-tests-2.8 (2016-04-04) 1 commit
>   (merged to 'next' on 2016-04-06 at f85a013)
>  + Windows: shorten code by re-using convert_slashes()
>
>  Code clean-up.
>
>  Will merge to 'master'.
>
>
> * ar/diff-args-osx-precompose (2016-04-05) 1 commit
>  - diff: run arguments through precompose_argv
>
>  Many commands normalize command line arguments from NFD to NFC
>  variant of UTF-8 on OSX, but commands in the "diff" family did
>  not, causing "git diff $path" to complain that no such path is
>  known to Git.  They have been taught to do the normalization.
>
>  Will be rerolled?
>  ($gmane/290724)
>
>
> * ep/trace-doc-sample-fix (2016-04-05) 1 commit
>   (merged to 'next' on 2016-04-06 at 0df7357)
>  + api-trace.txt: fix typo
>
>  Fix a typo in an example in the trace API documentation.
>
>  Will merge to 'master'.
>
>
> * ew/send-email-readable-message-id (2016-04-06) 1 commit
>  - send-email: more meaningful Message-ID
>
>  "git send-email" now uses a more readable timestamps when
>  formulating a message ID.
>
>  Will merge to 'next'.
>
>
> * mg/complete-cherry-mark-to-log (2016-04-05) 1 commit
>   (merged to 'next' on 2016-04-06 at 3002be6)
>  + completion: complete --cherry-mark for git log
>
>  The completion scripts (in contrib/) did not include the
>  "--cherry-mark" option when completing "git log <HT>".
>
>  Will merge to 'master'.
>
>
> * tb/blame-force-read-cache-to-workaround-safe-crlf (2016-04-05) 1 commit
>   (merged to 'next' on 2016-04-06 at 263bba8)
>  + correct blame for files commited with CRLF
>
>  When running "git blame $path" with unnormalized data in the index
>  for the path, the data in the working tree was blamed, even though
>  "git add" would not have changed what is already in the index, due
>  to "safe crlf" that disables the line-end conversion.  It has been
>  corrected.
>
>  Will merge to 'master'.
>
>
> * st/verify-tag (2016-04-06) 3 commits
>  - verify-tag: change variable name for readability
>  - t7030: test verifying multiple tags
>  - builtin/verify-tag.c: ignore SIGPIPE in gpg-interface
>
>  Only the first three patches in a six-patch series.
>
>
> * ew/send-email-drop-data-dumper (2016-04-06) 1 commit
>  - send-email: do not load Data::Dumper
>
>  Code clean-up.
>
>  Will merge to 'next'.
>
> --------------------------------------------------
> [Stalled]
>
> * da/user-useconfigonly (2016-04-01) 2 commits
>  - ident: give "please tell me" message upon useConfigOnly error
>  - ident: check for useConfigOnly before auto-detection of name/email
>
>  The "user.useConfigOnly" configuration variable makes it an error
>  if users do not explicitly set user.name and user.email.  However,
>  its check was not done early enough and allowed another error to
>  trigger, reporting that the default value we guessed from the
>  system setting was unusable.  This was a suboptimal end-user
>  experience as we want the users to set user.name/user.email without
>  relying on the auto-detection at all.
>
>  Waiting for Acks.
>  ($gmane/290340)
>
>
> * sb/clone-shallow-passthru (2016-03-23) 3 commits
>  - clone: add t5614 to test cloning submodules with shallowness involved
>  - submodule clone: pass along `local` option
>  - clone: add `--shallow-submodules` flag
>
>  "git clone" learned "--shallow-submodules" option.
>
>  Needs review.
>
>
> * sg/completion-updates (2016-02-28) 21 commits
>  - completion: cache the path to the repository
>  - completion: extract repository discovery from __gitdir()
>  - completion: don't guard git executions with __gitdir()
>  - completion: consolidate silencing errors from git commands
>  - completion: don't use __gitdir() for git commands
>  - completion: respect 'git -C <path>'
>  - completion: fix completion after 'git -C <path>'
>  - completion: don't offer commands when 'git --opt' needs an argument
>  - rev-parse: add '--absolute-git-dir' option
>  - completion: list short refs from a remote given as a URL
>  - completion: don't list 'HEAD' when trying refs completion outside of a repo
>  - completion: list refs from remote when remote's name matches a directory
>  - completion: respect 'git --git-dir=<path>' when listing remote refs
>  - completion: fix most spots not respecting 'git --git-dir=<path>'
>  - completion: ensure that the repository path given on the command line exists
>  - completion tests: add tests for the __git_refs() helper function
>  - completion tests: check __gitdir()'s output in the error cases
>  - completion tests: consolidate getting path of current working directory
>  - completion tests: make the $cur variable local to the test helper functions
>  - completion tests: don't add test cruft to the test repository
>  - completion: improve __git_refs()'s in-code documentation
>
>  Will be rerolled.
>  ($gmane/287839)
>
>
> * nd/shallow-deepen (2016-02-23) 25 commits
>  - fetch, upload-pack: --deepen=N extends shallow boundary by N commits
>  - upload-pack: add get_reachable_list()
>  - upload-pack: split check_unreachable() in two, prep for get_reachable_list()
>  - t5500, t5539: tests for shallow depth excluding a ref
>  - clone: define shallow clone boundary with --shallow-exclude
>  - fetch: define shallow boundary with --shallow-exclude
>  - upload-pack: support define shallow boundary by excluding revisions
>  - refs: add expand_ref()
>  - t5500, t5539: tests for shallow depth since a specific date
>  - clone: define shallow clone boundary based on time with --shallow-since
>  - fetch: define shallow boundary with --shallow-since
>  - upload-pack: add deepen-since to cut shallow repos based on time
>  - shallow.c: implement a generic shallow boundary finder based on rev-list
>  - fetch-pack: use a separate flag for fetch in deepening mode
>  - fetch-pack: use a common function for verbose printing
>  - fetch-pack: use skip_prefix() instead of starts_with()
>  - upload-pack: move rev-list code out of check_non_tip()
>  - upload-pack: tighten number parsing at "deepen" lines
>  - upload-pack: use skip_prefix() instead of starts_with()
>  - upload-pack: move "unshallow" sending code out of deepen()
>  - upload-pack: remove unused variable "backup"
>  - upload-pack: move "shallow" sending code out of deepen()
>  - upload-pack: move shallow deepen code out of receive_needs()
>  - transport-helper.c: refactor set_helper_option()
>  - remote-curl.c: convert fetch_git() to use argv_array
>
>  The existing "git fetch --depth=<n>" option was hard to use
>  correctly when making the history of an existing shallow clone
>  deeper.  A new option, "--deepen=<n>", has been added to make this
>  easier to use.  "git clone" also learned "--shallow-since=<date>"
>  and "--shallow-exclude=<tag>" options to make it easier to specify
>  "I am interested only in the recent N months worth of history" and
>  "Give me only the history since that version".
>
>  Needs review.
>
>
> * sb/submodule-init (2016-03-15) 2 commits
>  . submodule: port init from shell to C
>  . submodule: port resolve_relative_url from shell to C
>
>  Update of "git submodule" to move pieces of logic to C continues.
>
>  Needs review.
>  ($gmane/288824)
>
>
> * az/p4-bare-no-rebase (2016-02-19) 1 commit
>  - git-p4.py: Don't try to rebase on submit from bare repository
>
>  "git p4 submit" attempts to do a rebase, which would fail if done
>  in a bare repository.  Not doing this rebase would paper over the
>  failure, which is what this patch does, but it is unclear what the
>  side effect of not rebasing is.
>
>  Needs a better explanation.
>
>
> * ss/commit-dry-run-resolve-merge-to-no-op (2016-02-17) 1 commit
>  - wt-status.c: set commitable bit if there is a meaningful merge.
>
>  "git commit --dry-run" reported "No, no, you cannot commit." in one
>  case where "git commit" would have allowed you to commit, and this
>  improves it a little bit ("git commit --dry-run --short" still does
>  not give you the correct answer, for example).
>
>
> * nd/icase (2016-02-15) 12 commits
>  - grep.c: reuse "icase" variable
>  - diffcore-pickaxe: support case insensitive match on non-ascii
>  - diffcore-pickaxe: "share" regex error handling code
>  - grep/pcre: support utf-8
>  - gettext: add is_utf8_locale()
>  - grep/pcre: prepare locale-dependent tables for icase matching
>  - grep/icase: avoid kwsset when -F is specified
>  - grep/icase: avoid kwsset on literal non-ascii strings
>  - test-regex: expose full regcomp() to the command line
>  - test-regex: isolate the bug test code
>  - grep: break down an "if" stmt in preparation for next changes
>  - grep: allow -F -i combination
>
>  "git grep -i" has been taught to fold case in non-ascii locales.
>
>  Needs review.
>  ($gmane/286137)
>
>
> * dt/refs-backend-lmdb (2016-02-25) 45 commits
>  . SQUASH??? Minimum compilation band-aid
>  . tests: add ref-storage argument
>  . refs: tests for lmdb backend
>  . refs: add LMDB refs storage backend
>  . refs: break out resolve_ref_unsafe_submodule
>  . config: read ref storage config on startup
>  . refs: register ref storage backends
>  . svn: learn ref-storage argument
>  . clone: allow ref storage backend to be set for clone
>  . refs: check submodules' ref storage config
>  . init: allow alternate ref strorage to be set for new repos
>  . refs: always handle non-normal refs in files backend
>  . refs: resolve symbolic refs first
>  . refs: on symref reflog expire, lock symref not referrent
>  . refs: don't dereference on rename
>  . refs: allow log-only updates
>  . refs: move duplicate check to common code
>  . refs: make lock generic
>  . refs: handle non-normal ref renames
>  . refs: add method to rename refs
>  . refs: add methods to init refs db
>  . refs: add method for delete_refs
>  . refs: add method for initial ref transaction commit
>  . refs: add methods for reflog
>  . refs: add do_for_each_per_worktree_ref
>  . refs: reduce the visibility of do_for_each_ref()
>  . refs: add method for do_for_each_ref
>  . refs: add methods for misc ref operations
>  . refs: add a backend method structure with transaction functions
>  . refs: move resolve_ref_unsafe into common code
>  . files-backend: break out ref reading
>  . refs: move for_each_*ref* functions into common code
>  . refs: move head_ref{,_submodule} to the common code
>  . Merge branch 'sb/submodule-parallel-update' into dt/refs-backend-lmdb
>  . clone: allow an explicit argument for parallel submodule clones
>  . submodule update: expose parallelism to the user
>  . git submodule update: have a dedicated helper for cloning
>  . run_processes_parallel: correctly terminate callbacks with an LF
>  . run_processes_parallel: rename parameters for the callbacks
>  . run-command: expose default_{start_failure, task_finished}
>  . run_processes_parallel: treat output of children as byte array
>  . submodule update: direct error message to stderr
>  . fetching submodules: respect `submodule.fetchJobs` config option
>  . submodule-config: drop check against NULL
>  . submodule-config: keep update strategy around
>
>  A reroll exists, but it seems that will further be rerolled.
>
>
> * ec/annotate-deleted (2015-11-20) 1 commit
>  - annotate: skip checking working tree if a revision is provided
>
>  Usability fix for annotate-specific "<file> <rev>" syntax with deleted
>  files.
>
>  Waiting for review.
>
>
> * dg/subtree-rebase-test (2016-01-19) 1 commit
>  - contrib/subtree: Add a test for subtree rebase that loses commits
>
>  Reviewed up to v5.
>  Will be rerolled.
>  ($gmane/284426)
>
>
> * js/am-3-merge-recursive-direct (2015-10-12) 2 commits
>  - am: make a direct call to merge_recursive
>  - merge_recursive_options: introduce the "gently" flag
>
>  The merge_recursive_generic() function has been made a bit safer to
>  call from inside a process.  "git am -3" was taught to make a direct
>  call to the function when falling back to three-way merge.
>
>  Being able to make a direct call would be good in general, but as a
>  performance thing, the change needs to be backed up by numbers.
>
>  Needs review.
>
>  I haven't gone through the "gently" change with fine toothed comb;
>  I can see that the change avoids calling die(), but I haven't made
>  sure that the program states (e.g. what's in the in-core index) are
>  adjusted sensibly when it returns to the caller instead of dying,
>  or the codepaths that used to die() are free of resource leaks.
>  The original code certainly did not care the program states at the
>  point of dying exactly because it knew it is going to exit, but now
>  they have to care, and they need to be audited.
>
>
> * dk/gc-more-wo-pack (2016-01-13) 4 commits
>  - gc: clean garbage .bitmap files from pack dir
>  - t5304: ensure non-garbage files are not deleted
>  - t5304: test .bitmap garbage files
>  - prepare_packed_git(): find more garbage
>
>  Follow-on to dk/gc-idx-wo-pack topic, to clean up stale
>  .bitmap and .keep files.
>
>  Waiting for a reroll.
>  ($gmane/284368).
>
>
> * jc/diff-b-m (2015-02-23) 5 commits
>  . WIPWIP
>  . WIP: diff-b-m
>  - diffcore-rename: allow easier debugging
>  - diffcore-rename.c: add locate_rename_src()
>  - diffcore-break: allow debugging
>
>  "git diff -B -M" produced incorrect patch when the postimage of a
>  completely rewritten file is similar to the preimage of a removed
>  file; such a resulting file must not be expressed as a rename from
>  other place.
>
>  The fix in this patch is broken, unfortunately.
>  Will discard.
>
> --------------------------------------------------
> [Cooking]
>
> * es/format-patch-doc-hide-no-patch (2016-04-04) 1 commit
>   (merged to 'next' on 2016-04-06 at 25d79bb)
>  + git-format-patch.txt: don't show -s as shorthand for multiple options
>
>  "git format-patch --help" showed `-s` and `--no-patch` as if these
>  are valid options to the command.  We already hide `--patch` option
>  from the documentation, because format-patch is about showing the
>  diff, and the documentation now hides these options as well.
>
>  Will merge to 'master'.
>
>
> * jk/branch-shortening-funny-symrefs (2016-04-04) 1 commit
>   (merged to 'next' on 2016-04-06 at 1a3f8be)
>  + branch: fix shortening of non-remote symrefs
>
>  A change back in version 2.7 to "git branch" broke display of a
>  symbolic ref in a non-standard place in the refs/ hierarchy (we
>  expect symbolic refs to appear in refs/remotes/*/HEAD to point at
>  the primary branch the remote has, and as .git/HEAD to point at the
>  branch we locally checked out).
>
>  Will merge to 'next' and later down to maint-2.7.
>
>
> * jn/mergetools-examdiff (2016-04-04) 2 commits
>   (merged to 'next' on 2016-04-06 at 819e858)
>  + mergetools: add support for ExamDiff
>  + mergetools: create mergetool_find_win32_cmd() helper function for winmerge
>
>  "git mergetools" learned to drive ExamDiff.
>
>  Will merge to 'master'.
>
>
> * kn/for-each-tag-branch (2016-03-30) 1 commit
>   (merged to 'next' on 2016-04-06 at 4595ad3)
>  + for-each-ref: fix description of '--contains' in manpage
>
>  A minor documentation update.
>
>  Will merge to 'master'.
>
>
> * kn/ref-filter-branch-list (2016-03-30) 16 commits
>  . branch: implement '--format' option
>  . branch: use ref-filter printing APIs
>  . branch, tag: use porcelain output
>  . ref-filter: allow porcelain to translate messages in the output
>  . ref-filter: add support for %(refname:dir) and %(refname:base)
>  . ref-filter: introduce refname_atom_parser()
>  . ref-filter: introduce symref_atom_parser()
>  . ref-filter: make "%(symref)" atom work with the ':short' modifier
>  . ref-filter: add support for %(upstream:track,nobracket)
>  . ref-filter: make %(upstream:track) prints "[gone]" for invalid upstreams
>  . ref-filter: introduce format_ref_array_item()
>  . ref-filter: move get_head_description() from branch.c
>  . ref-filter: modify "%(objectname:short)" to take length
>  . ref-filter: implement %(if:equals=<string>) and %(if:notequals=<string>)
>  . ref-filter: include reference to 'used_atom' within 'atom_value'
>  . ref-filter: implement %(if), %(then), and %(else) atoms
>
>  The code to list branches in "git branch" has been consolidated
>  with the more generic ref-filter API.
>
>  Will be rerolled.
>
>
> * oa/doc-diff-check (2016-03-29) 1 commit
>   (merged to 'next' on 2016-04-06 at e3d6e8d)
>  + Documentation: git diff --check detects conflict markers
>
>  A minor documentation update.
>
>  Will merge to 'master'.
>
>
> * rz/worktree-no-checkout (2016-03-29) 1 commit
>   (merged to 'next' on 2016-04-06 at e725216)
>  + worktree: add: introduce --checkout option
>
>  "git worktree add" can be given "--no-checkout" option to only
>  create an empty worktree without checking out the files.
>
>  Will merge to 'master'.
>
>
> * sb/misc-cleanups (2016-04-01) 4 commits
>   (merged to 'next' on 2016-04-06 at 4e63691)
>  + credential-cache, send_request: close fd when done
>  + bundle: don't leak an fd in case of early return
>  + abbrev_sha1_in_line: don't leak memory
>  + notes: don't leak memory in git_config_get_notes_strategy
>
>  Assorted minor clean-ups.
>
>  Will merge to 'master'.
>
>
> * sb/submodule-helper-clone-regression-fix (2016-04-01) 6 commits
>  - submodule--helper, module_clone: catch fprintf failure
>  - submodule--helper: do not borrow absolute_path() result for too long
>  - submodule--helper, module_clone: always operate on absolute paths
>  - submodule--helper clone: create the submodule path just once
>  - submodule--helper: fix potential NULL-dereference
>  - recursive submodules: test for relative paths
>
>  A partial rewrite of "git submodule" in the 2.7 timeframe changed
>  the way the gitdir: pointer in the submodules point at the real
>  repository location to use absolute paths by accident.  This has
>  been corrected.
>
>  Any further comments?  Otherwise will merge to 'next'.
>
>
> * sb/submodule-path-misc-bugs (2016-03-30) 6 commits
>  - t7407: make expectation as clear as possible
>  - submodule update: test recursive path reporting from subdirectory
>  - submodule update: align reporting path for custom command execution
>  - submodule status: correct path handling in recursive submodules
>  - submodule update --init: correct path handling in recursive submodules
>  - submodule foreach: correct path display in recursive submodules
>
>  "git submodule" reports the paths of submodules the command
>  recurses into, but this was incorrect when the command was not run
>  from the root level of the superproject.
>
>  Any further comments?  Otherwise will merge to 'next'.
>
>
> * sg/diff-multiple-identical-renames (2016-03-30) 1 commit
>   (merged to 'next' on 2016-04-06 at ac19e48)
>  + diffcore: fix iteration order of identical files during rename detection
>
>  "git diff -M" used to work better when two originally identical
>  files A and B got renamed to X/A and X/B by pairing A to X/A and B
>  to X/B, but this was broken in the 2.0 timeframe.
>
>  Will merge to 'master'.
>
>
> * sk/send-pack-all-fix (2016-03-31) 1 commit
>   (merged to 'next' on 2016-04-06 at 31e1e1b)
>  + git-send-pack: fix --all option when used with directory
>
>  "git send-pack --all <there>" was broken when its command line
>  option parsing was written in the 2.6 timeframe.
>
>  Will merge to 'master'.
>
>
> * ss/msvc (2016-03-30) 2 commits
>   (merged to 'next' on 2016-04-06 at 4b53bce)
>  + MSVC: use shipped headers instead of fallback definitions
>  + MSVC: vsnprintf in Visual Studio 2015 doesn't need SNPRINTF_SIZE_CORR any more
>
>  Build updates for MSVC.
>
>  Will merge to 'master'.
>
>
> * xy/format-patch-base (2016-03-31) 4 commits
>  - format-patch: introduce format.base configuration
>  - format-patch: introduce --base=auto option
>  - format-patch: add '--base' option to record base tree info
>  - patch-ids: make commit_patch_id() a public helper function
>
>  "git format-patch" learned a new "--base" option to record what
>  (public, well-known) commit the original series was built on in
>  its output.
>
>  Will be rerolled.
>  ($gmane/290365)
>
>
> * tb/safe-crlf-output-fix (2016-04-01) 7 commits
>  . convert.c: more safer crlf handling with text attribute
>  . correct blame for files commited with CRLF
>  . convert: unify the "auto" handling of CRLF
>  . t0027: test cases for combined attributes
>  . convert: allow core.autocrlf=input and core.eol=crlf
>  . convert.c: stream and early out
>  . read-cache: factor out get_sha1_from_index() helper
>
>  The "safe CRLF" facility disables line-end conversion from CRLF to
>  LF when checking in if the blob registered to the index already
>  contains CR, but some codepaths like "git blame" did not know this,
>  and instead assumed that only the configuration and attribute
>  settings determined how the data from the working tree is converted.
>
>  Will be rerolled.
>  ($gmane/290637)
>
>
> * ak/use-hashmap-iter-first-in-submodule-config (2016-03-23) 1 commit
>   (merged to 'next' on 2016-04-06 at 2aab890)
>  + submodule-config: use hashmap_iter_first()
>
>  Minor code cleanup.
>
>  Will merge to 'master'.
>
>
> * ky/branch-d-worktree (2016-03-29) 1 commit
>   (merged to 'next' on 2016-04-06 at 00f9bff)
>  + branch -d: refuse deleting a branch which is currently checked out
>
>  When "git worktree" feature is in use, "git branch -d" allowed
>  deletion of a branch that is checked out in another worktree
>
>  Will merge to 'master'.
>
>
> * ky/branch-m-worktree (2016-04-04) 2 commits
>   (merged to 'next' on 2016-04-06 at e7b285c)
>  + branch -m: update all per-worktree HEADs
>  + refs: add a new function set_worktree_head_symref
>
>  When "git worktree" feature is in use, "git branch -m" renamed a
>  branch that is checked out in another worktree without adjusting
>  the HEAD symbolic ref for the worktree.
>
>  Will merge to 'master'.
>
>
> * nd/apply-doc (2016-03-24) 2 commits
>   (merged to 'next' on 2016-04-06 at f9bd355)
>  + git-apply.txt: mention the behavior inside a subdir
>  + git-apply.txt: remove a space
>
>  A minor documentation update.
>
>  Will merge to 'master'.
>
>
> * nd/apply-report-skip (2016-03-24) 1 commit
>   (merged to 'next' on 2016-04-06 at ae2c824)
>  + apply: report patch skipping in verbose mode
>
>  "git apply -v" learned to report paths in the patch that were
>  skipped via --include/--exclude mechanism or being outside the
>  current working directory.
>
>  Will merge to 'master'.
>
>
> * pb/opt-cmdmode-doc (2016-03-25) 1 commit
>   (merged to 'next' on 2016-04-06 at a5f3835)
>  + api-parse-options.txt: document OPT_CMDMODE()
>
>  Minor API documentation update.
>
>  Will merge to 'master'.
>
>
> * rt/completion-help (2016-03-24) 2 commits
>   (merged to 'next' on 2016-04-06 at 8c3ee08)
>  + completion: add 'revisions' and 'everyday' to 'git help'
>  + completion: add option '--guides' to 'git help'
>
>  Shell completion (in contrib/) updates.
>
>  Will merge to 'master'.
>
>
> * rt/rebase-i-shorten-stop-report (2016-03-28) 1 commit
>   (merged to 'next' on 2016-04-06 at 7a766b7)
>  + rebase-i: print an abbreviated hash when stop for editing
>
>  The commit object name reported when "rebase -i" stops has been
>  shortened.
>
>  Will merge to 'master'.
>
>
> * jk/check-repository-format (2016-03-11) 10 commits
>   (merged to 'next' on 2016-04-06 at a0dada0)
>  + verify_repository_format: mark messages for translation
>  + setup: drop repository_format_version global
>  + setup: unify repository version callbacks
>  + init: use setup.c's repo version verification
>  + setup: refactor repo format reading and verification
>  + config: drop git_config_early
>  + check_repository_format_gently: stop using git_config_early
>  + lazily load core.sharedrepository
>  + wrap shared_repository global in get/set accessors
>  + setup: document check_repository_format()
>
>  The repository set-up sequence has been streamlined (the biggest
>  change is that there is no longer git_config_early()), so that we
>  do not attempt to look into refs/* when we know we do not have a
>  Git repository.
>
>  Will merge to 'master'.
>
>
> * mj/pull-rebase-autostash (2016-04-04) 9 commits
>   (merged to 'next' on 2016-04-06 at b4e4f31)
>  + t5520: test --[no-]autostash with pull.rebase=true
>  + t5520: reduce commom lines of code
>  + t5520: factor out common "failing autostash" code
>  + t5520: factor out common "successful autostash" code
>  + t5520: use better test to check stderr output
>  + t5520: ensure consistent test conditions
>  + t5520: use consistent capitalization in test titles
>  + pull --rebase: add --[no-]autostash flag
>  + git-pull.c: introduce git_pull_config()
>
>  "git pull --rebase" learned "--[no-]autostash" option, so that
>  the rebase.autostash configuration variable set to true can be
>  overridden from the command line.
>
>  Will merge to 'master'.
>
>
> * pb/commit-verbose-config (2016-03-14) 1 commit
>   (merged to 'next' on 2016-04-06 at e5c744f)
>  + commit: add a commit.verbose config variable
>
>  "git commit" learned to pay attention to "commit.verbose"
>  configuration variable and act as if "--verbose" option was
>  given from the command line.
>
>  Will merge to 'master'.

Could you delay this a little bit. I am currently working on this.

>
> * jc/merge-refuse-new-root (2016-03-23) 1 commit
>   (merged to 'next' on 2016-04-04 at cd70fd6)
>  + merge: refuse to create too cool a merge by default
>
>  Originally merged to 'next' on 2016-03-23
>
>  "git merge" used to allow merging two branches that have no common
>  base by default, which led to a brand new history of an existing
>  project created and then get pulled by an unsuspecting maintainer,
>  which allowed an unnecessary parallel history merged into the
>  existing project.  The command has been taught not to allow this by
>  default, with an escape hatch "--allow-unrelated-histories" option
>  to be used in a rare event that merges histories of two projects
>  that started their lives independently.
>
>  Will merge to 'master'.
>
>
> * lt/pretty-expand-tabs (2016-04-04) 4 commits
>   (merged to 'next' on 2016-04-06 at 186ac2a)
>  + pretty: test --expand-tabs
>  + pretty: allow tweaking tabwidth in --expand-tabs
>  + pretty: enable --expand-tabs by default for selected pretty formats
>  + pretty: expand tabs in indented logs to make things line up properly
>
>  When "git log" shows the log message indented by 4-spaces, the
>  remainder of a line after a HT does not align in the way the author
>  originally intended.  The command now expands tabs by default in
>  such a case, and allows the users to override it with a new option,
>  '--no-expand-tabs'.
>
>  Will merge to 'master'.
>
>
> * cc/apply (2016-04-01) 4 commits
>   (merged to 'next' on 2016-04-06 at 2e23c44)
>  + builtin/apply: free patch when parse_chunk() fails
>  + builtin/apply: handle parse_binary() failure
>  + apply: remove unused call to free() in gitdiff_{old,new}name()
>  + builtin/apply: get rid of useless 'name' variable
>
>  Minor code clean-up.
>
>  Will merge to 'master'.
>
>
> * dt/index-helper (2016-03-23) 18 commits
>  - SQUASH - minimum compilation fix
>  - read-cache: config for waiting for index-helper
>  - index-helper: optionally automatically run
>  - index-helper: autorun mode
>  - index-helper: don't run if already running
>  - index-helper: kill mode
>  - unpack-trees: preserve index extensions
>  - update-index: enable/disable watchman support
>  - index-helper: use watchman to avoid refreshing index with lstat()
>  - Add watchman support to reduce index refresh cost
>  - read-cache: invalidate untracked cache data when reading WAMA
>  - read-cache: add watchman 'WAMA' extension
>  - index-helper: add --detach
>  - daemonize(): set a flag before exiting the main process
>  - index-helper: add --strict
>  - index-helper: new daemon for caching index and related stuff
>  - read-cache: allow to keep mmap'd memory after reading
>  - read-cache.c: fix constness of verify_hdr()
>
>  Needs review.
>
>
> * jc/bundle (2016-03-03) 6 commits
>  - index-pack: --clone-bundle option
>  - Merge branch 'jc/index-pack' into jc/bundle
>  - bundle v3: the beginning
>  - bundle: keep a copy of bundle file name in the in-core bundle header
>  - bundle: plug resource leak
>  - bundle doc: 'verify' is not about verifying the bundle
>
>  The beginning of "split bundle", which could be one of the
>  ingredients to allow "git clone" traffic off of the core server
>  network to CDN.
>
>
> * ad/cygwin-wants-rename (2015-08-07) 1 commit
>  - config.mak.uname: Cygwin needs OBJECT_CREATION_USES_RENAMES
>
>  Will hold.
>  ($gmane/275680).
>
>
> * jc/rerere-multi (2016-04-06) 11 commits
>  - rerere: adjust 'forget' to multi-variant world order
>  - rerere: split code to call ll_merge() further
>  - rerere: move code related to "forget" together
>  - rerere: gc and clear
>  - rerere: do use multiple variants
>  - t4200: rerere a merge with two identical conflicts
>  - rerere: allow multiple variants to exist
>  - rerere: delay the recording of preimage
>  - rerere: handle leftover rr-cache/$ID directory and postimage files
>  - rerere: scan $GIT_DIR/rr-cache/$ID when instantiating a rerere_id
>  - rerere: split conflict ID further
>
>  "git rerere" can encounter two or more files with the same conflict
>  signature that have to be resolved in different ways, but there was
>  no way to record these separate resolutions.
>
>  Will merge to 'next'.
>
>
> * jc/merge-drop-old-syntax (2015-04-29) 1 commit
>  - merge: drop 'git merge <message> HEAD <commit>' syntax
>
>  Stop supporting "git merge <message> HEAD <commit>" syntax that has
>  been deprecated since October 2007, and issues a deprecation
>  warning message since v2.5.0.
>
>  It has been reported that git-gui still uses the deprecated syntax,
>  which needs to be fixed before this final step can proceed.
>  ($gmane/282594)
> --
> To unsubscribe from this list: send the line "unsubscribe git" in
> the body of a message to majordomo@vger.kernel.org
> More majordomo info at  http://vger.kernel.org/majordomo-info.html

^ permalink raw reply	[relevance 0%]

* [PATCH] ll-merge: fix typo in comment
@ 2016-04-14 22:12  2% Junio C Hamano
  0 siblings, 0 replies; 200+ results
From: Junio C Hamano @ 2016-04-14 22:12 UTC (permalink / raw)
  To: git

When a944af1d (merge: teach -Xours/-Xtheirs to binary ll-merge
driver, 2012-09-08) introduced FAVOR_OURS/FAVOR_THEIRS to the binary
ll-merge driver, it changed what happens to the merge result for the
outer merge, and updated the comment from:

    The tentative merge result is "ours" for the final round, or
    common ancestor for an internal merge.  Still return "conflicted
    merge" status.

to

    The tentative merge result is the or common ancestor for an
    internal merge.

What happened is obvious.  I noticed the lack of definitive article
in front of "common" but failed to remove "or".  Also I forgot to
describe what I did for the final merge, probably because I was
satisified by the description in the log message.

Signed-off-by: Junio C Hamano <gitster@pobox.com>
---
 ll-merge.c | 4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)

diff --git a/ll-merge.c b/ll-merge.c
index ff4a43a..fe22412 100644
--- a/ll-merge.c
+++ b/ll-merge.c
@@ -47,7 +47,9 @@ static int ll_binary_merge(const struct ll_merge_driver *drv_unused,
 	assert(opts);
 
 	/*
-	 * The tentative merge result is the or common ancestor for an internal merge.
+	 * The tentative merge result is the common ancestor for an
+	 * internal merge.  For the final merge, it is "ours" by
+	 * default but -Xours/-Xtheirs can tweak the choice.
 	 */
 	if (opts->virtual_ancestor) {
 		stolen = orig;

^ permalink raw reply related	[relevance 2%]

* What's cooking in git.git (Apr 2016, #05; Mon, 18)
@ 2016-04-18 22:48  3% Junio C Hamano
  0 siblings, 0 replies; 200+ results
From: Junio C Hamano @ 2016-04-18 22:48 UTC (permalink / raw)
  To: git

Here are the topics that have been cooking.  Commits prefixed with
'-' are only in 'pu' (proposed updates) while commits prefixed with
'+' are in 'next'.  The ones marked with '.' do not appear in any of
the integration branches, but I am still holding onto them.

The 'master' branch now has the fifth batch of topics of this cycle.

There are a handful of topics that are stuck; they are marked as
"Needs review", "Needs an Ack", etc. in the following list.

You can find the changes described here in the integration branches
of the repositories listed at

    http://git-blame.blogspot.com/p/git-public-repositories.html

--------------------------------------------------
[Graduated to "master"]

* ak/use-hashmap-iter-first-in-submodule-config (2016-03-23) 1 commit
  (merged to 'next' on 2016-04-06 at 2aab890)
 + submodule-config: use hashmap_iter_first()

 Minor code cleanup.


* cc/apply (2016-04-01) 4 commits
  (merged to 'next' on 2016-04-06 at 2e23c44)
 + builtin/apply: free patch when parse_chunk() fails
 + builtin/apply: handle parse_binary() failure
 + apply: remove unused call to free() in gitdiff_{old,new}name()
 + builtin/apply: get rid of useless 'name' variable

 Minor code clean-up.


* ep/trace-doc-sample-fix (2016-04-05) 1 commit
  (merged to 'next' on 2016-04-06 at 0df7357)
 + api-trace.txt: fix typo

 Fix a typo in an example in the trace API documentation.


* es/format-patch-doc-hide-no-patch (2016-04-04) 1 commit
  (merged to 'next' on 2016-04-06 at 25d79bb)
 + git-format-patch.txt: don't show -s as shorthand for multiple options

 "git format-patch --help" showed `-s` and `--no-patch` as if these
 are valid options to the command.  We already hide `--patch` option
 from the documentation, because format-patch is about showing the
 diff, and the documentation now hides these options as well.


* jc/makefile-redirection-stderr (2016-04-05) 1 commit
  (merged to 'next' on 2016-04-06 at e3f2ded)
 + Makefile: fix misdirected redirections

 A minor fix in the Makefile.


* jk/branch-shortening-funny-symrefs (2016-04-04) 1 commit
  (merged to 'next' on 2016-04-06 at 1a3f8be)
 + branch: fix shortening of non-remote symrefs

 A change back in version 2.7 to "git branch" broke display of a
 symbolic ref in a non-standard place in the refs/ hierarchy (we
 expect symbolic refs to appear in refs/remotes/*/HEAD to point at
 the primary branch the remote has, and as .git/HEAD to point at the
 branch we locally checked out).

 Will merge down to maint-2.7.


* jk/check-repository-format (2016-03-11) 10 commits
  (merged to 'next' on 2016-04-06 at a0dada0)
 + verify_repository_format: mark messages for translation
 + setup: drop repository_format_version global
 + setup: unify repository version callbacks
 + init: use setup.c's repo version verification
 + setup: refactor repo format reading and verification
 + config: drop git_config_early
 + check_repository_format_gently: stop using git_config_early
 + lazily load core.sharedrepository
 + wrap shared_repository global in get/set accessors
 + setup: document check_repository_format()
 (this branch is used by dt/pre-refs-backend.)

 The repository set-up sequence has been streamlined (the biggest
 change is that there is no longer git_config_early()), so that we
 do not attempt to look into refs/* when we know we do not have a
 Git repository.


* jn/mergetools-examdiff (2016-04-04) 2 commits
  (merged to 'next' on 2016-04-06 at 819e858)
 + mergetools: add support for ExamDiff
 + mergetools: create mergetool_find_win32_cmd() helper function for winmerge

 "git mergetools" learned to drive ExamDiff.


* js/mingw-tests-2.8 (2016-04-04) 1 commit
  (merged to 'next' on 2016-04-06 at f85a013)
 + Windows: shorten code by re-using convert_slashes()

 Code clean-up.


* kn/for-each-tag-branch (2016-03-30) 1 commit
  (merged to 'next' on 2016-04-06 at 4595ad3)
 + for-each-ref: fix description of '--contains' in manpage

 A minor documentation update.


* ky/branch-d-worktree (2016-03-29) 1 commit
  (merged to 'next' on 2016-04-06 at 00f9bff)
 + branch -d: refuse deleting a branch which is currently checked out

 When "git worktree" feature is in use, "git branch -d" allowed
 deletion of a branch that is checked out in another worktree


* ky/branch-m-worktree (2016-04-08) 3 commits
  (merged to 'next' on 2016-04-08 at b673b5e)
 + set_worktree_head_symref(): fix error message
  (merged to 'next' on 2016-04-06 at e7b285c)
 + branch -m: update all per-worktree HEADs
 + refs: add a new function set_worktree_head_symref

 When "git worktree" feature is in use, "git branch -m" renamed a
 branch that is checked out in another worktree without adjusting
 the HEAD symbolic ref for the worktree.


* lt/pretty-expand-tabs (2016-04-04) 4 commits
  (merged to 'next' on 2016-04-06 at 186ac2a)
 + pretty: test --expand-tabs
 + pretty: allow tweaking tabwidth in --expand-tabs
 + pretty: enable --expand-tabs by default for selected pretty formats
 + pretty: expand tabs in indented logs to make things line up properly

 When "git log" shows the log message indented by 4-spaces, the
 remainder of a line after a HT does not align in the way the author
 originally intended.  The command now expands tabs by default in
 such a case, and allows the users to override it with a new option,
 '--no-expand-tabs'.


* mg/complete-cherry-mark-to-log (2016-04-05) 1 commit
  (merged to 'next' on 2016-04-06 at 3002be6)
 + completion: complete --cherry-mark for git log

 The completion scripts (in contrib/) did not include the
 "--cherry-mark" option when completing "git log <HT>".


* mj/pull-rebase-autostash (2016-04-04) 9 commits
  (merged to 'next' on 2016-04-06 at b4e4f31)
 + t5520: test --[no-]autostash with pull.rebase=true
 + t5520: reduce commom lines of code
 + t5520: factor out common "failing autostash" code
 + t5520: factor out common "successful autostash" code
 + t5520: use better test to check stderr output
 + t5520: ensure consistent test conditions
 + t5520: use consistent capitalization in test titles
 + pull --rebase: add --[no-]autostash flag
 + git-pull.c: introduce git_pull_config()

 "git pull --rebase" learned "--[no-]autostash" option, so that
 the rebase.autostash configuration variable set to true can be
 overridden from the command line.


* rt/completion-help (2016-03-24) 2 commits
  (merged to 'next' on 2016-04-06 at 8c3ee08)
 + completion: add 'revisions' and 'everyday' to 'git help'
 + completion: add option '--guides' to 'git help'

 Shell completion (in contrib/) updates.


* rt/rebase-i-shorten-stop-report (2016-03-28) 1 commit
  (merged to 'next' on 2016-04-06 at 7a766b7)
 + rebase-i: print an abbreviated hash when stop for editing

 The commit object name reported when "rebase -i" stops has been
 shortened.


* rz/worktree-no-checkout (2016-03-29) 1 commit
  (merged to 'next' on 2016-04-06 at e725216)
 + worktree: add: introduce --checkout option

 "git worktree add" can be given "--no-checkout" option to only
 create an empty worktree without checking out the files.


* sb/misc-cleanups (2016-04-01) 4 commits
  (merged to 'next' on 2016-04-06 at 4e63691)
 + credential-cache, send_request: close fd when done
 + bundle: don't leak an fd in case of early return
 + abbrev_sha1_in_line: don't leak memory
 + notes: don't leak memory in git_config_get_notes_strategy

 Assorted minor clean-ups.


* sg/diff-multiple-identical-renames (2016-03-30) 1 commit
  (merged to 'next' on 2016-04-06 at ac19e48)
 + diffcore: fix iteration order of identical files during rename detection

 "git diff -M" used to work better when two originally identical
 files A and B got renamed to X/A and X/B by pairing A to X/A and B
 to X/B, but this was broken in the 2.0 timeframe.


* sk/send-pack-all-fix (2016-03-31) 1 commit
  (merged to 'next' on 2016-04-06 at 31e1e1b)
 + git-send-pack: fix --all option when used with directory

 "git send-pack --all <there>" was broken when its command line
 option parsing was written in the 2.6 timeframe.


* tb/blame-force-read-cache-to-workaround-safe-crlf (2016-04-05) 1 commit
  (merged to 'next' on 2016-04-06 at 263bba8)
 + correct blame for files commited with CRLF

 When running "git blame $path" with unnormalized data in the index
 for the path, the data in the working tree was blamed, even though
 "git add" would not have changed what is already in the index, due
 to "safe crlf" that disables the line-end conversion.  It has been
 corrected.

--------------------------------------------------
[New Topics]

* en/merge-fixes (2016-04-12) 2 commits
 - merge-recursive: do not check working copy when creating a virtual merge base
 - merge-recursive: remove duplicate code

 "merge-recursive" strategy incorrectly checked if a path that is
 involved in its internal merge exists in the working tree.

 Will merge to 'next'.


* en/merge-octopus-fix (2016-04-12) 2 commits
  (merged to 'next' on 2016-04-13 at 600b479)
 + merge-octopus: abort if index does not match HEAD
 + t6044: new merge testcases for when index doesn't match HEAD

 "merge-octopus" strategy did not ensure that the index is clean
 when merge begins.

 Will merge to 'master'.


* en/merge-trivial-fix (2016-04-12) 2 commits
  (merged to 'next' on 2016-04-13 at fb3ea86)
 + builtin/merge.c: fix a bug with trivial merges
 + t7605: add a testcase demonstrating a bug with trivial merges

 When "git merge" notices that the merge can be resolved purely at
 the tree level (without having to merge blobs) and the resulting
 tree happens to already exist in the object store, it forgot to
 update the index, which lead to an inconsistent state for later
 operations.

 Will merge to 'master'.


* jc/fsck-nul-in-commit (2016-04-14) 2 commits
 - fsck: detect and warn a commit with embedded NUL
 - fsck_commit_buffer(): do not special case the last validation

 "git fsck" learned to catch NUL byte in a commit object as
 potential error and warn.


* jc/ll-merge-internal (2016-04-14) 2 commits
 - ll-merge: use a longer conflict marker for internal merge
 - ll-merge: fix typo in comment

 RFC.


* jk/diff-compact-heuristic (2016-04-18) 2 commits
 - xdiff: implement empty line chunk heuristic
 - xdiff: add recs_match helper function


* nd/test-helpers (2016-04-15) 2 commits
 - test helpers: move test-* to t/helper/ subdirectory
 - Makefile: clean *.o files we create

 Sources to many test helper binaries (and the generated helpers)
 have been moved to t/helper/ subdirectory to reduce clutter at the
 top level of the tree.

--------------------------------------------------
[Stalled]

* tb/safe-crlf-output-fix (2016-04-01) 7 commits
 . convert.c: more safer crlf handling with text attribute
 . correct blame for files commited with CRLF
 . convert: unify the "auto" handling of CRLF
 . t0027: test cases for combined attributes
 . convert: allow core.autocrlf=input and core.eol=crlf
 . convert.c: stream and early out
 . read-cache: factor out get_sha1_from_index() helper

 The "safe CRLF" facility disables line-end conversion from CRLF to
 LF when checking in if the blob registered to the index already
 contains CR, but some codepaths like "git blame" did not know this,
 and instead assumed that only the configuration and attribute
 settings determined how the data from the working tree is converted.

 Will be rerolled.
 ($gmane/290637)


* da/user-useconfigonly (2016-04-01) 2 commits
 - ident: give "please tell me" message upon useConfigOnly error
 - ident: check for useConfigOnly before auto-detection of name/email

 The "user.useConfigOnly" configuration variable makes it an error
 if users do not explicitly set user.name and user.email.  However,
 its check was not done early enough and allowed another error to
 trigger, reporting that the default value we guessed from the
 system setting was unusable.  This was a suboptimal end-user
 experience as we want the users to set user.name/user.email without
 relying on the auto-detection at all.

 Waiting for Acks.
 ($gmane/290340)


* sg/completion-updates (2016-02-28) 21 commits
 - completion: cache the path to the repository
 - completion: extract repository discovery from __gitdir()
 - completion: don't guard git executions with __gitdir()
 - completion: consolidate silencing errors from git commands
 - completion: don't use __gitdir() for git commands
 - completion: respect 'git -C <path>'
 - completion: fix completion after 'git -C <path>'
 - completion: don't offer commands when 'git --opt' needs an argument
 - rev-parse: add '--absolute-git-dir' option
 - completion: list short refs from a remote given as a URL
 - completion: don't list 'HEAD' when trying refs completion outside of a repo
 - completion: list refs from remote when remote's name matches a directory
 - completion: respect 'git --git-dir=<path>' when listing remote refs
 - completion: fix most spots not respecting 'git --git-dir=<path>'
 - completion: ensure that the repository path given on the command line exists
 - completion tests: add tests for the __git_refs() helper function
 - completion tests: check __gitdir()'s output in the error cases
 - completion tests: consolidate getting path of current working directory
 - completion tests: make the $cur variable local to the test helper functions
 - completion tests: don't add test cruft to the test repository
 - completion: improve __git_refs()'s in-code documentation

 Will be rerolled.
 ($gmane/287839)


* az/p4-bare-no-rebase (2016-02-19) 1 commit
 - git-p4.py: Don't try to rebase on submit from bare repository

 "git p4 submit" attempts to do a rebase, which would fail if done
 in a bare repository.  Not doing this rebase would paper over the
 failure, which is what this patch does, but it is unclear what the
 side effect of not rebasing is.

 Needs a better explanation.


* ss/commit-dry-run-resolve-merge-to-no-op (2016-02-17) 1 commit
 - wt-status.c: set commitable bit if there is a meaningful merge.

 "git commit --dry-run" reported "No, no, you cannot commit." in one
 case where "git commit" would have allowed you to commit, and this
 improves it a little bit ("git commit --dry-run --short" still does
 not give you the correct answer, for example).


* nd/icase (2016-02-15) 12 commits
 - grep.c: reuse "icase" variable
 - diffcore-pickaxe: support case insensitive match on non-ascii
 - diffcore-pickaxe: "share" regex error handling code
 - grep/pcre: support utf-8
 - gettext: add is_utf8_locale()
 - grep/pcre: prepare locale-dependent tables for icase matching
 - grep/icase: avoid kwsset when -F is specified
 - grep/icase: avoid kwsset on literal non-ascii strings
 - test-regex: expose full regcomp() to the command line
 - test-regex: isolate the bug test code
 - grep: break down an "if" stmt in preparation for next changes
 - grep: allow -F -i combination

 "git grep -i" has been taught to fold case in non-ascii locales.

 Needs review.
 ($gmane/286137)


* ec/annotate-deleted (2015-11-20) 1 commit
 - annotate: skip checking working tree if a revision is provided

 Usability fix for annotate-specific "<file> <rev>" syntax with deleted
 files.

 Waiting for review.


* dg/subtree-rebase-test (2016-01-19) 1 commit
 - contrib/subtree: Add a test for subtree rebase that loses commits

 Reviewed up to v5.
 Will be rerolled.
 ($gmane/284426)


* js/am-3-merge-recursive-direct (2015-10-12) 2 commits
 - am: make a direct call to merge_recursive
 - merge_recursive_options: introduce the "gently" flag

 The merge_recursive_generic() function has been made a bit safer to
 call from inside a process.  "git am -3" was taught to make a direct
 call to the function when falling back to three-way merge.

 Being able to make a direct call would be good in general, but as a
 performance thing, the change needs to be backed up by numbers.

 Needs review.

 I haven't gone through the "gently" change with fine toothed comb;
 I can see that the change avoids calling die(), but I haven't made
 sure that the program states (e.g. what's in the in-core index) are
 adjusted sensibly when it returns to the caller instead of dying,
 or the codepaths that used to die() are free of resource leaks.
 The original code certainly did not care the program states at the
 point of dying exactly because it knew it is going to exit, but now
 they have to care, and they need to be audited.


* dk/gc-more-wo-pack (2016-01-13) 4 commits
 - gc: clean garbage .bitmap files from pack dir
 - t5304: ensure non-garbage files are not deleted
 - t5304: test .bitmap garbage files
 - prepare_packed_git(): find more garbage

 Follow-on to dk/gc-idx-wo-pack topic, to clean up stale
 .bitmap and .keep files.

 Waiting for a reroll.
 ($gmane/284368).


* jc/diff-b-m (2015-02-23) 5 commits
 . WIPWIP
 . WIP: diff-b-m
 - diffcore-rename: allow easier debugging
 - diffcore-rename.c: add locate_rename_src()
 - diffcore-break: allow debugging

 "git diff -B -M" produced incorrect patch when the postimage of a
 completely rewritten file is similar to the preimage of a removed
 file; such a resulting file must not be expressed as a rename from
 other place.

 The fix in this patch is broken, unfortunately.
 Will discard.

--------------------------------------------------
[Cooking]

* sb/submodule-init (2016-04-16) 4 commits
 - submodule: port init from shell to C
 - submodule: port resolve_relative_url from shell to C
 - Merge branch 'sb/submodule-path-misc-bugs' into sb/submodule-init
 - Merge branch 'sb/submodule-helper-clone-regression-fix' into sb/submodule-init
 (this branch uses sb/submodule-helper-clone-regression-fix and sb/submodule-path-misc-bugs.)

 Update of "git submodule" to move pieces of logic to C continues.


* nd/shallow-deepen (2016-04-13) 26 commits
 - fetch, upload-pack: --deepen=N extends shallow boundary by N commits
 - upload-pack: add get_reachable_list()
 - upload-pack: split check_unreachable() in two, prep for get_reachable_list()
 - t5500, t5539: tests for shallow depth excluding a ref
 - clone: define shallow clone boundary with --shallow-exclude
 - fetch: define shallow boundary with --shallow-exclude
 - upload-pack: support define shallow boundary by excluding revisions
 - refs: add expand_ref()
 - t5500, t5539: tests for shallow depth since a specific date
 - clone: define shallow clone boundary based on time with --shallow-since
 - fetch: define shallow boundary with --shallow-since
 - upload-pack: add deepen-since to cut shallow repos based on time
 - shallow.c: implement a generic shallow boundary finder based on rev-list
 - fetch-pack: use a separate flag for fetch in deepening mode
 - fetch-pack.c: mark strings for translating
 - fetch-pack: use a common function for verbose printing
 - fetch-pack: use skip_prefix() instead of starts_with()
 - upload-pack: move rev-list code out of check_non_tip()
 - upload-pack: tighten number parsing at "deepen" lines
 - upload-pack: use skip_prefix() instead of starts_with()
 - upload-pack: move "unshallow" sending code out of deepen()
 - upload-pack: remove unused variable "backup"
 - upload-pack: move "shallow" sending code out of deepen()
 - upload-pack: move shallow deepen code out of receive_needs()
 - transport-helper.c: refactor set_helper_option()
 - remote-curl.c: convert fetch_git() to use argv_array

 The existing "git fetch --depth=<n>" option was hard to use
 correctly when making the history of an existing shallow clone
 deeper.  A new option, "--deepen=<n>", has been added to make this
 easier to use.  "git clone" also learned "--shallow-since=<date>"
 and "--shallow-exclude=<tag>" options to make it easier to specify
 "I am interested only in the recent N months worth of history" and
 "Give me only the history since that version".

 Needs review.


* sb/clone-shallow-passthru (2016-04-13) 3 commits
 - clone: add t5614 to test cloning submodules with shallowness involved
 - clone: add `--shallow-submodules` flag
 - submodule clone: pass along `local` option

 "git clone" learned "--shallow-submodules" option.

 Needs review.


* ad/commit-have-m-option (2016-04-07) 2 commits
  (merged to 'next' on 2016-04-13 at 74088c2)
 + commit: do not ignore an empty message given by -m ''
 + commit: --amend -m '' silently fails to wipe message

 "git commit" misbehaved in a few minor ways when an empty message
 is given via -m '', all of which has been corrected.

 Will merge to 'master'.


* jc/xstrfmt-null-with-prec-0 (2016-04-07) 1 commit
  (merged to 'next' on 2016-04-13 at 2457462)
 + setup.c: do not feed NULL to "%.*s" even with precision 0

 Will merge to 'master'.


* dt/pre-refs-backend (2016-04-10) 24 commits
  (merged to 'next' on 2016-04-13 at 0a8f9dd)
 + refs: on symref reflog expire, lock symref not referrent
 + refs: move resolve_ref_unsafe into common code
 + show_head_ref(): check the result of resolve_ref_namespace()
 + check_aliased_update(): check that dst_name is non-NULL
 + checkout_paths(): remove unneeded flag variable
 + cmd_merge(): remove unneeded flag variable
 + fsck_head_link(): remove unneeded flag variable
 + read_raw_ref(): change flags parameter to unsigned int
 + files-backend: inline resolve_ref_1() into resolve_ref_unsafe()
 + read_raw_ref(): manage own scratch space
 + files-backend: break out ref reading
 + resolve_ref_1(): eliminate local variable "bad_name"
 + resolve_ref_1(): reorder code
 + resolve_ref_1(): eliminate local variable
 + resolve_ref_unsafe(): ensure flags is always set
 + resolve_ref_unsafe(): use for loop to count up to MAXDEPTH
 + resolve_missing_loose_ref(): simplify semantics
 + t1430: improve test coverage of deletion of badly-named refs
 + t1430: test for-each-ref in the presence of badly-named refs
 + t1430: don't rely on symbolic-ref for creating broken symrefs
 + t1430: clean up broken refs/tags/shadow
 + t1430: test the output and error of some commands more carefully
 + refs: move for_each_*ref* functions into common code
 + refs: move head_ref{,_submodule} to the common code

 Code restructuring around the "refs" area to prepare for pluggable
 refs backends.

 Will merge to 'master'.


* ky/imap-send (2016-04-13) 2 commits
  (merged to 'next' on 2016-04-13 at 52cf493)
 + imap-send: fix CRAM-MD5 response calculation
 + imap-send: check for NOLOGIN capability only when using LOGIN command

 Support for CRAM-MD5 authentication method in "git imap-send" did
 not work well.

 Will merge to 'master'.


* ky/imap-send-openssl-1.1.0 (2016-04-08) 4 commits
  (merged to 'next' on 2016-04-13 at 49d2643)
 + configure: remove checking for HMAC_CTX_cleanup
 + imap-send: avoid deprecated TLSv1_method()
 + imap-send: check NULL return of SSL_CTX_new()
 + imap-send: use HMAC() function provided by OpenSSL

 Upcoming OpenSSL 1.1.0 will break compilation b updating a few APIs
 we use in imap-send, which has been adjusted for the change.

 Will merge to 'master'.


* jc/http-socks5h (2016-04-10) 1 commit
  (merged to 'next' on 2016-04-13 at eb27afc)
 + http: differentiate socks5:// and socks5h://

 The socks5:// proxy support added back in 2.6.4 days was not aware
 that socks5h:// proxies behave differently.

 Will merge to 'master'.


* jc/send-email-skip-backup (2016-04-12) 1 commit
 - send-email: detect and offer to skip backup files

 A careless invocation of "git send-email directory/" after editing
 0001-change.patch with an editor often ends up sending both
 0001-change.patch and its backup file, 0001-change.patch~, causing
 embarrassment and a minor confusion.  Detect such an input and
 offer to skip the backup files when sending the patches out.

 Needs review.


* jk/do-not-printf-NULL (2016-04-10) 3 commits
  (merged to 'next' on 2016-04-13 at 60912e3)
 + git_config_set_multivar_in_file: handle "unset" errors
 + git_config_set_multivar_in_file: all non-zero returns are errors
 + config: lower-case first word of error strings

 "git config" had a codepath that tried to pass a NULL to
 printf("%s"), which nobody seems to have noticed.

 Will merge to 'master'.


* jk/use-write-script-more (2016-04-12) 3 commits
  (merged to 'next' on 2016-04-13 at d6718bf)
 + t3404: use write_script
 + t1020: do not overuse printf and use write_script
 + t5532: use write_script

 Code clean-up.

 Will merge to 'master'.


* nf/mergetool-prompt (2016-04-12) 2 commits
 - SQUASH???
 - difftool/mergetool: make the form of yes/no questions consistent

 UI consistency improvements.


* va/i18n-misc-updates (2016-04-13) 6 commits
 - i18n: branch: move comment for translators
 - i18n: branch: unmark string for translation
 - i18n: builtin/rm.c: remove a comma ',' from string
 - i18n: unpack-trees: mark strings for translation
 - i18n: builtin/branch.c: mark option for translation
 - i18n: index-pack: use plural string instead of normal one

 Mark several messages for translation.


* jc/drop-git-spec-in (2016-04-06) 1 commit
 - Makefile: stop pretending to support rpmbuild

 As nobody maintains our in-tree git.spec.in and distros use their
 own spec file, we stopped pretending that we support "make rpm".

 Comments?


* ar/diff-args-osx-precompose (2016-04-05) 1 commit
 - diff: run arguments through precompose_argv

 Many commands normalize command line arguments from NFD to NFC
 variant of UTF-8 on OSX, but commands in the "diff" family did
 not, causing "git diff $path" to complain that no such path is
 known to Git.  They have been taught to do the normalization.

 Will be rerolled?
 ($gmane/290724)


* ew/send-email-readable-message-id (2016-04-06) 1 commit
  (merged to 'next' on 2016-04-13 at 422959a)
 + send-email: more meaningful Message-ID

 "git send-email" now uses a more readable timestamps when
 formulating a message ID.

 Will merge to 'master'.


* st/verify-tag (2016-04-18) 6 commits
 - tag -v: verfy directly rather than exec-ing verify-tag
 - verify-tag: move verification code to tag.c
 - verify-tag: add sha1 argument to verify_tag()
 - verify-tag: change variable name for readability
 - t7030: test verifying multiple tags
 - builtin/verify-tag.c: ignore SIGPIPE in gpg-interface

 Saw review comments on this v6.
 Expecting a reroll.


* ew/send-email-drop-data-dumper (2016-04-06) 1 commit
  (merged to 'next' on 2016-04-13 at 180266c)
 + send-email: do not load Data::Dumper

 Code clean-up.

 Will merge to 'master'.


* kn/ref-filter-branch-list (2016-04-12) 16 commits
 . branch: implement '--format' option
 . branch: use ref-filter printing APIs
 . branch, tag: use porcelain output
 . ref-filter: allow porcelain to translate messages in the output
 . ref-filter: add support for %(refname:dir) and %(refname:base)
 . ref-filter: introduce refname_atom_parser()
 . ref-filter: introduce symref_atom_parser()
 . ref-filter: make "%(symref)" atom work with the ':short' modifier
 . ref-filter: add support for %(upstream:track,nobracket)
 . ref-filter: make %(upstream:track) prints "[gone]" for invalid upstreams
 . ref-filter: introduce format_ref_array_item()
 . ref-filter: move get_head_description() from branch.c
 . ref-filter: modify "%(objectname:short)" to take length
 . ref-filter: implement %(if:equals=<string>) and %(if:notequals=<string>)
 . ref-filter: include reference to 'used_atom' within 'atom_value'
 . ref-filter: implement %(if), %(then), and %(else) atoms

 The code to list branches in "git branch" has been consolidated
 with the more generic ref-filter API.

 Rerolled but seems to lack jk/branch-shortening-funny-symrefs aka
 $gmane/291295 yet.


* sb/submodule-helper-clone-regression-fix (2016-04-01) 6 commits
  (merged to 'next' on 2016-04-13 at c6584bb)
 + submodule--helper, module_clone: catch fprintf failure
 + submodule--helper: do not borrow absolute_path() result for too long
 + submodule--helper, module_clone: always operate on absolute paths
 + submodule--helper clone: create the submodule path just once
 + submodule--helper: fix potential NULL-dereference
 + recursive submodules: test for relative paths
 (this branch is used by sb/submodule-init.)

 A partial rewrite of "git submodule" in the 2.7 timeframe changed
 the way the gitdir: pointer in the submodules point at the real
 repository location to use absolute paths by accident.  This has
 been corrected.

 Will merge to 'master'.


* sb/submodule-path-misc-bugs (2016-03-30) 6 commits
  (merged to 'next' on 2016-04-18 at 9daa5ce)
 + t7407: make expectation as clear as possible
 + submodule update: test recursive path reporting from subdirectory
 + submodule update: align reporting path for custom command execution
 + submodule status: correct path handling in recursive submodules
 + submodule update --init: correct path handling in recursive submodules
 + submodule foreach: correct path display in recursive submodules
 (this branch is used by sb/submodule-init.)

 "git submodule" reports the paths of submodules the command
 recurses into, but this was incorrect when the command was not run
 from the root level of the superproject.

 Will merge to 'master'.


* xy/format-patch-base (2016-04-12) 4 commits
 - format-patch: introduce format.base configuration
 - format-patch: introduce --base=auto option
 - format-patch: add '--base' option to record base tree info
 - patch-ids: make commit_patch_id() a public helper function

 "git format-patch" learned a new "--base" option to record what
 (public, well-known) commit the original series was built on in
 its output.

 Review comments sent.
 ($gmane/291198)


* pb/commit-verbose-config (2016-04-12) 6 commits
 . commit: add a commit.verbose config variable
 . t7507-commit-verbose: improve test coverage by testing number of diffs
 . parse-options.c: make OPTION_COUNTUP respect "unspecified" values
 . t0040-parse-options: improve test coverage
 . test-parse-options: print quiet as integer
 . t0040-test-parse-options.sh: fix style issues

 "git commit" learned to pay attention to "commit.verbose"
 configuration variable and act as if "--verbose" option was
 given from the command line.
 


* dt/index-helper (2016-04-14) 16 commits
 - read-cache: config for waiting for index-helper
 - index-helper: optionally automatically run
 - index-helper: autorun mode
 - index-helper: don't run if already running
 - index-helper: kill mode
 - unpack-trees: preserve index extensions
 - update-index: enable/disable watchman support
 - index-helper: use watchman to avoid refreshing index with lstat()
 - index-helper: add watchman support to reduce index refresh cost
 - read-cache: add watchman 'WAMA' extension
 - index-helper: add --detach
 - daemonize(): set a flag before exiting the main process
 - index-helper: add --strict
 - index-helper: new daemon for caching index and related stuff
 - read-cache: allow to keep mmap'd memory after reading
 - read-cache.c: fix constness of verify_hdr()

 Needs review.


* jc/bundle (2016-03-03) 6 commits
 - index-pack: --clone-bundle option
 - Merge branch 'jc/index-pack' into jc/bundle
 - bundle v3: the beginning
 - bundle: keep a copy of bundle file name in the in-core bundle header
 - bundle: plug resource leak
 - bundle doc: 'verify' is not about verifying the bundle

 The beginning of "split bundle", which could be one of the
 ingredients to allow "git clone" traffic off of the core server
 network to CDN.


* ad/cygwin-wants-rename (2015-08-07) 1 commit
 - config.mak.uname: Cygwin needs OBJECT_CREATION_USES_RENAMES

 Will hold.
 ($gmane/275680).


* jc/rerere-multi (2016-04-06) 11 commits
  (merged to 'next' on 2016-04-13 at 3db2753)
 + rerere: adjust 'forget' to multi-variant world order
 + rerere: split code to call ll_merge() further
 + rerere: move code related to "forget" together
 + rerere: gc and clear
 + rerere: do use multiple variants
 + t4200: rerere a merge with two identical conflicts
 + rerere: allow multiple variants to exist
 + rerere: delay the recording of preimage
 + rerere: handle leftover rr-cache/$ID directory and postimage files
 + rerere: scan $GIT_DIR/rr-cache/$ID when instantiating a rerere_id
 + rerere: split conflict ID further

 "git rerere" can encounter two or more files with the same conflict
 signature that have to be resolved in different ways, but there was
 no way to record these separate resolutions.

 Will merge to 'master'.


* jc/merge-drop-old-syntax (2015-04-29) 1 commit
 - merge: drop 'git merge <message> HEAD <commit>' syntax

 Stop supporting "git merge <message> HEAD <commit>" syntax that has
 been deprecated since October 2007, and issues a deprecation
 warning message since v2.5.0.

 It has been reported that git-gui still uses the deprecated syntax,
 which needs to be fixed before this final step can proceed.
 ($gmane/282594)

^ permalink raw reply	[relevance 3%]

* What's cooking in git.git (Apr 2016, #06; Thu, 21)
@ 2016-04-21 22:20  3% Junio C Hamano
  0 siblings, 0 replies; 200+ results
From: Junio C Hamano @ 2016-04-21 22:20 UTC (permalink / raw)
  To: git

Here are the topics that have been cooking.  Commits prefixed with
'-' are only in 'pu' (proposed updates) while commits prefixed with
'+' are in 'next'.  The ones marked with '.' do not appear in any of
the integration branches, but I am still holding onto them.

The 'master' branch now has the fifth batch of topics of this cycle.

There are a handful of topics that are stuck; they are marked as
"Needs review", "Needs an Ack", etc. in the following list.

You can find the changes described here in the integration branches
of the repositories listed at

    http://git-blame.blogspot.com/p/git-public-repositories.html

--------------------------------------------------
[New Topics]

* jd/p4-jobs-in-commit (2016-04-19) 2 commits
 - git-p4: add P4 jobs to git commit message
 - git-p4: clean-up code style in tests

 "git p4" learned to record P4 jobs in Git commit that imports from
 the history in Perforce.

 Will merge to 'next'.


* js/replace-edit-use-editor-configuration (2016-04-20) 1 commit
 - replace --edit: respect core.editor

 "git replace -e" did not honour "core.editor" configuration.

 Will merge to 'next'.


* ls/p4-lfs (2016-04-19) 2 commits
 - git-p4: fix Git LFS pointer parsing
 - travis-ci: update Git-LFS and P4 to the latest version

 Recent update to Git LFS broke "git p4" by changing the output from
 its "lfs pointer" subcommand.


* sb/mv-submodule-fix (2016-04-19) 1 commit
 - mv: allow moving nested submodules

 "git mv old new" did not adjust the path for a submodule that lives
 as a subdirectory inside old/ directory correctly.

 Will merge to 'next'.


* tb/convert-eol-autocrlf (2016-04-19) 4 commits
 - convert.c: ident + core.autocrlf didn't work
 - t0027: test cases for combined attributes
 - convert: allow core.autocrlf=input and core.eol=crlf
 - t0027: avoid false "unchanged" due to lstat() matching after a change

 Setting core.autocrlf to 'input' and core.eol to 'crlf' used to be
 rejected, but because the code gives precedence to core.autcrlf,
 there is no need to, hence we no longer reject the combination.

 Will merge to 'next'.


* bc/object-id (2016-04-19) 6 commits
 - match-trees: convert several leaf functions to use struct object_id
 - tree-walk: convert tree_entry_extract() to use struct object_id
 - struct name_entry: use struct object_id instead of unsigned char sha1[20]
 - match-trees: convert shift_tree() and shift_tree_by() to use object_id
 - test-match-trees: convert to use struct object_id
 - sha1-name: introduce a get_oid() function

 Will be rerolled.
 ($gmane/291950)


* ep/http-curl-trace (2016-04-20) 3 commits
 - git.txt: document the new GIT_TRACE_CURL environment variable
 - imap-send.c: introduce the GIT_TRACE_CURL enviroment variable
 - http.c: implement the GIT_TRACE_CURL environment variable

 HTTP transport gained an option to produce more detailed debugging
 trace.

 Still under discussion.
 ($gmane/292074)


* nd/worktree-various-heads (2016-04-20) 13 commits
 - branch: do not rename a branch under bisect or rebase
 - worktree.c: test if branch being bisected in another worktree
 - wt-status.c: split bisect detection out of wt_status_get_state()
 - worktree.c: test if branch being rebased in another worktree
 - worktree.c: avoid referencing to worktrees[i] multiple times
 - wt-status.c: make wt_status_check_rebase() work on any worktree
 - SQUASH???
 - wt-status.c: split rebase detection out of wt_status_get_state()
 - path.c: refactor and add worktree_git_path()
 - worktree.c: mark current worktree
 - worktree.c: make find_shared_symref() return struct worktree *
 - worktree.c: store "id" instead of "git_dir"
 - path.c: add git_common_path() and strbuf_git_common_path()

 The experimental "multiple worktree" feature gains more safety to
 forbid operations on a branch that is checked out or being actively
 worked on elsewhere, by noticing that e.g. it is being rebased.

 Being reviewed.
 ($gmane/292050)


* bw/rebase-merge-entire-branch (2016-04-20) 1 commit
 - git-rebase--merge: don't include absent parent as a base

 "git rebase -m" could be asked to rebase an entire branch starting
 from the root, but failed by assuming that there always is a parent
 commit to the first commit on the branch.

 Will merge to 'next'.


* jk/push-client-deadlock-fix (2016-04-20) 5 commits
 - t5504: drop sigpipe=ok from push tests
 - fetch-pack: isolate sigpipe in demuxer thread
 - send-pack: isolate sigpipe in demuxer thread
 - run-command: teach async threads to ignore SIGPIPE
 - send-pack: close demux pipe before finishing async process

 "git push" from a corrupt repository that attempts to push a large
 number of refs deadlocked waiting for a rejection from the
 receiving end that will never come.

 Will merge to 'next'.


* jc/merge-refuse-new-root (2016-04-21) 2 commits
 - pull: pass --allow-unrelated-histories to "git merge"
 - t3033: avoid 'ambiguous refs' warning

 "git pull" has been taught to pass --allow-unrelated-histories
 option to underlying "git merge".

 Will merge to 'next'.
 

--------------------------------------------------
[Stalled]

* ar/diff-args-osx-precompose (2016-04-05) 1 commit
 - diff: run arguments through precompose_argv

 Many commands normalize command line arguments from NFD to NFC
 variant of UTF-8 on OSX, but commands in the "diff" family did
 not, causing "git diff $path" to complain that no such path is
 known to Git.  They have been taught to do the normalization.

 Will be rerolled?
 ($gmane/290724)


* nd/shallow-deepen (2016-04-13) 26 commits
 - fetch, upload-pack: --deepen=N extends shallow boundary by N commits
 - upload-pack: add get_reachable_list()
 - upload-pack: split check_unreachable() in two, prep for get_reachable_list()
 - t5500, t5539: tests for shallow depth excluding a ref
 - clone: define shallow clone boundary with --shallow-exclude
 - fetch: define shallow boundary with --shallow-exclude
 - upload-pack: support define shallow boundary by excluding revisions
 - refs: add expand_ref()
 - t5500, t5539: tests for shallow depth since a specific date
 - clone: define shallow clone boundary based on time with --shallow-since
 - fetch: define shallow boundary with --shallow-since
 - upload-pack: add deepen-since to cut shallow repos based on time
 - shallow.c: implement a generic shallow boundary finder based on rev-list
 - fetch-pack: use a separate flag for fetch in deepening mode
 - fetch-pack.c: mark strings for translating
 - fetch-pack: use a common function for verbose printing
 - fetch-pack: use skip_prefix() instead of starts_with()
 - upload-pack: move rev-list code out of check_non_tip()
 - upload-pack: tighten number parsing at "deepen" lines
 - upload-pack: use skip_prefix() instead of starts_with()
 - upload-pack: move "unshallow" sending code out of deepen()
 - upload-pack: remove unused variable "backup"
 - upload-pack: move "shallow" sending code out of deepen()
 - upload-pack: move shallow deepen code out of receive_needs()
 - transport-helper.c: refactor set_helper_option()
 - remote-curl.c: convert fetch_git() to use argv_array

 The existing "git fetch --depth=<n>" option was hard to use
 correctly when making the history of an existing shallow clone
 deeper.  A new option, "--deepen=<n>", has been added to make this
 easier to use.  "git clone" also learned "--shallow-since=<date>"
 and "--shallow-exclude=<tag>" options to make it easier to specify
 "I am interested only in the recent N months worth of history" and
 "Give me only the history since that version".

 Needs review.


* sb/clone-shallow-passthru (2016-04-13) 3 commits
 - clone: add t5614 to test cloning submodules with shallowness involved
 - clone: add `--shallow-submodules` flag
 - submodule clone: pass along `local` option

 "git clone" learned "--shallow-submodules" option.

 Needs review.


* da/user-useconfigonly (2016-04-01) 2 commits
 - ident: give "please tell me" message upon useConfigOnly error
 - ident: check for useConfigOnly before auto-detection of name/email

 The "user.useConfigOnly" configuration variable makes it an error
 if users do not explicitly set user.name and user.email.  However,
 its check was not done early enough and allowed another error to
 trigger, reporting that the default value we guessed from the
 system setting was unusable.  This was a suboptimal end-user
 experience as we want the users to set user.name/user.email without
 relying on the auto-detection at all.

 Waiting for Acks.
 ($gmane/290340)


* sg/completion-updates (2016-02-28) 21 commits
 - completion: cache the path to the repository
 - completion: extract repository discovery from __gitdir()
 - completion: don't guard git executions with __gitdir()
 - completion: consolidate silencing errors from git commands
 - completion: don't use __gitdir() for git commands
 - completion: respect 'git -C <path>'
 - completion: fix completion after 'git -C <path>'
 - completion: don't offer commands when 'git --opt' needs an argument
 - rev-parse: add '--absolute-git-dir' option
 - completion: list short refs from a remote given as a URL
 - completion: don't list 'HEAD' when trying refs completion outside of a repo
 - completion: list refs from remote when remote's name matches a directory
 - completion: respect 'git --git-dir=<path>' when listing remote refs
 - completion: fix most spots not respecting 'git --git-dir=<path>'
 - completion: ensure that the repository path given on the command line exists
 - completion tests: add tests for the __git_refs() helper function
 - completion tests: check __gitdir()'s output in the error cases
 - completion tests: consolidate getting path of current working directory
 - completion tests: make the $cur variable local to the test helper functions
 - completion tests: don't add test cruft to the test repository
 - completion: improve __git_refs()'s in-code documentation

 Will be rerolled.
 ($gmane/287839)


* az/p4-bare-no-rebase (2016-02-19) 1 commit
 - git-p4.py: Don't try to rebase on submit from bare repository

 "git p4 submit" attempts to do a rebase, which would fail if done
 in a bare repository.  Not doing this rebase would paper over the
 failure, which is what this patch does, but it is unclear what the
 side effect of not rebasing is.

 Needs a better explanation.


* ss/commit-dry-run-resolve-merge-to-no-op (2016-02-17) 1 commit
 - wt-status.c: set commitable bit if there is a meaningful merge.

 "git commit --dry-run" reported "No, no, you cannot commit." in one
 case where "git commit" would have allowed you to commit, and this
 improves it a little bit ("git commit --dry-run --short" still does
 not give you the correct answer, for example).


* nd/icase (2016-02-15) 12 commits
 - grep.c: reuse "icase" variable
 - diffcore-pickaxe: support case insensitive match on non-ascii
 - diffcore-pickaxe: "share" regex error handling code
 - grep/pcre: support utf-8
 - gettext: add is_utf8_locale()
 - grep/pcre: prepare locale-dependent tables for icase matching
 - grep/icase: avoid kwsset when -F is specified
 - grep/icase: avoid kwsset on literal non-ascii strings
 - test-regex: expose full regcomp() to the command line
 - test-regex: isolate the bug test code
 - grep: break down an "if" stmt in preparation for next changes
 - grep: allow -F -i combination

 "git grep -i" has been taught to fold case in non-ascii locales.

 Needs review.
 ($gmane/286137)


* ec/annotate-deleted (2015-11-20) 1 commit
 - annotate: skip checking working tree if a revision is provided

 Usability fix for annotate-specific "<file> <rev>" syntax with deleted
 files.

 Waiting for review.


* dg/subtree-rebase-test (2016-01-19) 1 commit
 - contrib/subtree: Add a test for subtree rebase that loses commits

 Reviewed up to v5.
 Will be rerolled.
 ($gmane/284426)


* js/am-3-merge-recursive-direct (2015-10-12) 2 commits
 - am: make a direct call to merge_recursive
 - merge_recursive_options: introduce the "gently" flag

 The merge_recursive_generic() function has been made a bit safer to
 call from inside a process.  "git am -3" was taught to make a direct
 call to the function when falling back to three-way merge.

 Being able to make a direct call would be good in general, but as a
 performance thing, the change needs to be backed up by numbers.

 Needs review.

 I haven't gone through the "gently" change with fine toothed comb;
 I can see that the change avoids calling die(), but I haven't made
 sure that the program states (e.g. what's in the in-core index) are
 adjusted sensibly when it returns to the caller instead of dying,
 or the codepaths that used to die() are free of resource leaks.
 The original code certainly did not care the program states at the
 point of dying exactly because it knew it is going to exit, but now
 they have to care, and they need to be audited.


* dk/gc-more-wo-pack (2016-01-13) 4 commits
 - gc: clean garbage .bitmap files from pack dir
 - t5304: ensure non-garbage files are not deleted
 - t5304: test .bitmap garbage files
 - prepare_packed_git(): find more garbage

 Follow-on to dk/gc-idx-wo-pack topic, to clean up stale
 .bitmap and .keep files.

 Waiting for a reroll.
 ($gmane/284368).


* jc/diff-b-m (2015-02-23) 5 commits
 . WIPWIP
 . WIP: diff-b-m
 - diffcore-rename: allow easier debugging
 - diffcore-rename.c: add locate_rename_src()
 - diffcore-break: allow debugging

 "git diff -B -M" produced incorrect patch when the postimage of a
 completely rewritten file is similar to the preimage of a removed
 file; such a resulting file must not be expressed as a rename from
 other place.

 The fix in this patch is broken, unfortunately.
 Will discard.

--------------------------------------------------
[Cooking]

* pb/commit-verbose-config (2016-04-19) 6 commits
 - commit: add a commit.verbose config variable
 - t7507-commit-verbose: improve test coverage by testing number of diffs
 - parse-options.c: make OPTION_COUNTUP respect "unspecified" values
 - t0040-parse-options: improve test coverage
 - test-parse-options: print quiet as integer
 - t0040-test-parse-options.sh: fix style issues

 "git commit" learned to pay attention to "commit.verbose"
 configuration variable and act as if "--verbose" option was
 given from the command line.

 Is this going to be rerolled?
 ($gmane/291382)


* en/merge-fixes (2016-04-12) 2 commits
 - merge-recursive: do not check working copy when creating a virtual merge base
 - merge-recursive: remove duplicate code

 "merge-recursive" strategy incorrectly checked if a path that is
 involved in its internal merge exists in the working tree.

 Will merge to 'next'.


* en/merge-octopus-fix (2016-04-12) 2 commits
  (merged to 'next' on 2016-04-13 at 600b479)
 + merge-octopus: abort if index does not match HEAD
 + t6044: new merge testcases for when index doesn't match HEAD

 "merge-octopus" strategy did not ensure that the index is clean
 when merge begins.

 Will merge to 'master'.


* en/merge-trivial-fix (2016-04-12) 2 commits
  (merged to 'next' on 2016-04-13 at fb3ea86)
 + builtin/merge.c: fix a bug with trivial merges
 + t7605: add a testcase demonstrating a bug with trivial merges

 When "git merge" notices that the merge can be resolved purely at
 the tree level (without having to merge blobs) and the resulting
 tree happens to already exist in the object store, it forgot to
 update the index, which lead to an inconsistent state for later
 operations.

 Will merge to 'master'.


* jc/fsck-nul-in-commit (2016-04-14) 2 commits
 - fsck: detect and warn a commit with embedded NUL
 - fsck_commit_buffer(): do not special case the last validation

 "git fsck" learned to catch NUL byte in a commit object as
 potential error and warn.


* jc/ll-merge-internal (2016-04-14) 2 commits
 - ll-merge: use a longer conflict marker for internal merge
 - ll-merge: fix typo in comment

 RFC.


* jk/diff-compact-heuristic (2016-04-19) 2 commits
 - xdiff: implement empty line chunk heuristic
 - xdiff: add recs_match helper function

 Patch output from "git diff" and friends has been tweaked to be
 more readable by using a blank line as a strong hint that the
 contents before and after it belong to a logically separate unit.

 Will merge to 'next'.


* nd/test-helpers (2016-04-15) 2 commits
 - test helpers: move test-* to t/helper/ subdirectory
 - Makefile: clean *.o files we create

 Sources to many test helper binaries (and the generated helpers)
 have been moved to t/helper/ subdirectory to reduce clutter at the
 top level of the tree.

 Will merge to 'next'.


* sb/submodule-init (2016-04-16) 4 commits
 - submodule: port init from shell to C
 - submodule: port resolve_relative_url from shell to C
 - Merge branch 'sb/submodule-path-misc-bugs' into sb/submodule-init
 - Merge branch 'sb/submodule-helper-clone-regression-fix' into sb/submodule-init
 (this branch uses sb/submodule-helper-clone-regression-fix and sb/submodule-path-misc-bugs.)

 Update of "git submodule" to move pieces of logic to C continues.

 Will merge to 'next'.


* ad/commit-have-m-option (2016-04-07) 2 commits
  (merged to 'next' on 2016-04-13 at 74088c2)
 + commit: do not ignore an empty message given by -m ''
 + commit: --amend -m '' silently fails to wipe message

 "git commit" misbehaved in a few minor ways when an empty message
 is given via -m '', all of which has been corrected.

 Will merge to 'master'.


* jc/xstrfmt-null-with-prec-0 (2016-04-07) 1 commit
  (merged to 'next' on 2016-04-13 at 2457462)
 + setup.c: do not feed NULL to "%.*s" even with precision 0

 Will merge to 'master'.


* dt/pre-refs-backend (2016-04-10) 24 commits
  (merged to 'next' on 2016-04-13 at 0a8f9dd)
 + refs: on symref reflog expire, lock symref not referrent
 + refs: move resolve_ref_unsafe into common code
 + show_head_ref(): check the result of resolve_ref_namespace()
 + check_aliased_update(): check that dst_name is non-NULL
 + checkout_paths(): remove unneeded flag variable
 + cmd_merge(): remove unneeded flag variable
 + fsck_head_link(): remove unneeded flag variable
 + read_raw_ref(): change flags parameter to unsigned int
 + files-backend: inline resolve_ref_1() into resolve_ref_unsafe()
 + read_raw_ref(): manage own scratch space
 + files-backend: break out ref reading
 + resolve_ref_1(): eliminate local variable "bad_name"
 + resolve_ref_1(): reorder code
 + resolve_ref_1(): eliminate local variable
 + resolve_ref_unsafe(): ensure flags is always set
 + resolve_ref_unsafe(): use for loop to count up to MAXDEPTH
 + resolve_missing_loose_ref(): simplify semantics
 + t1430: improve test coverage of deletion of badly-named refs
 + t1430: test for-each-ref in the presence of badly-named refs
 + t1430: don't rely on symbolic-ref for creating broken symrefs
 + t1430: clean up broken refs/tags/shadow
 + t1430: test the output and error of some commands more carefully
 + refs: move for_each_*ref* functions into common code
 + refs: move head_ref{,_submodule} to the common code

 Code restructuring around the "refs" area to prepare for pluggable
 refs backends.

 Will merge to 'master'.


* ky/imap-send (2016-04-13) 2 commits
  (merged to 'next' on 2016-04-13 at 52cf493)
 + imap-send: fix CRAM-MD5 response calculation
 + imap-send: check for NOLOGIN capability only when using LOGIN command

 Support for CRAM-MD5 authentication method in "git imap-send" did
 not work well.

 Will merge to 'master'.


* ky/imap-send-openssl-1.1.0 (2016-04-08) 4 commits
  (merged to 'next' on 2016-04-13 at 49d2643)
 + configure: remove checking for HMAC_CTX_cleanup
 + imap-send: avoid deprecated TLSv1_method()
 + imap-send: check NULL return of SSL_CTX_new()
 + imap-send: use HMAC() function provided by OpenSSL

 Upcoming OpenSSL 1.1.0 will break compilation b updating a few APIs
 we use in imap-send, which has been adjusted for the change.

 Will merge to 'master'.


* jc/http-socks5h (2016-04-10) 1 commit
  (merged to 'next' on 2016-04-13 at eb27afc)
 + http: differentiate socks5:// and socks5h://

 The socks5:// proxy support added back in 2.6.4 days was not aware
 that socks5h:// proxies behave differently.

 Will merge to 'master'.


* jc/send-email-skip-backup (2016-04-12) 1 commit
 - send-email: detect and offer to skip backup files

 A careless invocation of "git send-email directory/" after editing
 0001-change.patch with an editor often ends up sending both
 0001-change.patch and its backup file, 0001-change.patch~, causing
 embarrassment and a minor confusion.  Detect such an input and
 offer to skip the backup files when sending the patches out.

 Needs review.


* jk/do-not-printf-NULL (2016-04-10) 3 commits
  (merged to 'next' on 2016-04-13 at 60912e3)
 + git_config_set_multivar_in_file: handle "unset" errors
 + git_config_set_multivar_in_file: all non-zero returns are errors
 + config: lower-case first word of error strings

 "git config" had a codepath that tried to pass a NULL to
 printf("%s"), which nobody seems to have noticed.

 Will merge to 'master'.


* jk/use-write-script-more (2016-04-12) 3 commits
  (merged to 'next' on 2016-04-13 at d6718bf)
 + t3404: use write_script
 + t1020: do not overuse printf and use write_script
 + t5532: use write_script

 Code clean-up.

 Will merge to 'master'.


* nf/mergetool-prompt (2016-04-12) 2 commits
 - SQUASH???
 - difftool/mergetool: make the form of yes/no questions consistent

 UI consistency improvements.


* va/i18n-misc-updates (2016-04-19) 9 commits
 - i18n: builtin/pull.c: split strings marked for translation
 - i18n: builtin/pull.c: mark placeholders for translation
 - i18n: git-parse-remote.sh: mark strings for translation
 - i18n: branch: move comment for translators
 - i18n: branch: unmark string for translation
 - i18n: builtin/rm.c: remove a comma ',' from string
 - i18n: unpack-trees: mark strings for translation
 - i18n: builtin/branch.c: mark option for translation
 - i18n: index-pack: use plural string instead of normal one

 Mark several messages for translation.

 Comments?  They looked all sensible to me.


* jc/drop-git-spec-in (2016-04-06) 1 commit
 - Makefile: stop pretending to support rpmbuild

 As nobody maintains our in-tree git.spec.in and distros use their
 own spec file, we stopped pretending that we support "make rpm".

 Will merge to 'next'.


* ew/send-email-readable-message-id (2016-04-06) 1 commit
  (merged to 'next' on 2016-04-13 at 422959a)
 + send-email: more meaningful Message-ID

 "git send-email" now uses a more readable timestamps when
 formulating a message ID.

 Will merge to 'master'.


* st/verify-tag (2016-04-19) 6 commits
 - tag -v: verfy directly rather than exec-ing verify-tag
 - verify-tag: move tag verification code to tag.c
 - verify-tag: prepare verify_tag for libification
 - verify-tag: update variable name and type
 - t7030: test verifying multiple tags
 - builtin/verify-tag.c: ignore SIGPIPE in gpg-interface

 Unify internal logic between "git tag -v" and "git verify-tag"
 commands by making one directly call into the other.

 Will merge to 'next'.


* ew/send-email-drop-data-dumper (2016-04-06) 1 commit
  (merged to 'next' on 2016-04-13 at 180266c)
 + send-email: do not load Data::Dumper

 Code clean-up.

 Will merge to 'master'.


* kn/ref-filter-branch-list (2016-04-12) 16 commits
 . branch: implement '--format' option
 . branch: use ref-filter printing APIs
 . branch, tag: use porcelain output
 . ref-filter: allow porcelain to translate messages in the output
 . ref-filter: add support for %(refname:dir) and %(refname:base)
 . ref-filter: introduce refname_atom_parser()
 . ref-filter: introduce symref_atom_parser()
 . ref-filter: make "%(symref)" atom work with the ':short' modifier
 . ref-filter: add support for %(upstream:track,nobracket)
 . ref-filter: make %(upstream:track) prints "[gone]" for invalid upstreams
 . ref-filter: introduce format_ref_array_item()
 . ref-filter: move get_head_description() from branch.c
 . ref-filter: modify "%(objectname:short)" to take length
 . ref-filter: implement %(if:equals=<string>) and %(if:notequals=<string>)
 . ref-filter: include reference to 'used_atom' within 'atom_value'
 . ref-filter: implement %(if), %(then), and %(else) atoms

 The code to list branches in "git branch" has been consolidated
 with the more generic ref-filter API.

 Rerolled but seems to lack jk/branch-shortening-funny-symrefs aka
 $gmane/291295 yet.


* sb/submodule-helper-clone-regression-fix (2016-04-01) 6 commits
  (merged to 'next' on 2016-04-13 at c6584bb)
 + submodule--helper, module_clone: catch fprintf failure
 + submodule--helper: do not borrow absolute_path() result for too long
 + submodule--helper, module_clone: always operate on absolute paths
 + submodule--helper clone: create the submodule path just once
 + submodule--helper: fix potential NULL-dereference
 + recursive submodules: test for relative paths
 (this branch is used by sb/submodule-init.)

 A partial rewrite of "git submodule" in the 2.7 timeframe changed
 the way the gitdir: pointer in the submodules point at the real
 repository location to use absolute paths by accident.  This has
 been corrected.

 Will merge to 'master'.


* sb/submodule-path-misc-bugs (2016-03-30) 6 commits
  (merged to 'next' on 2016-04-18 at 9daa5ce)
 + t7407: make expectation as clear as possible
 + submodule update: test recursive path reporting from subdirectory
 + submodule update: align reporting path for custom command execution
 + submodule status: correct path handling in recursive submodules
 + submodule update --init: correct path handling in recursive submodules
 + submodule foreach: correct path display in recursive submodules
 (this branch is used by sb/submodule-init.)

 "git submodule" reports the paths of submodules the command
 recurses into, but this was incorrect when the command was not run
 from the root level of the superproject.

 Will merge to 'master'.


* xy/format-patch-base (2016-04-12) 4 commits
 - format-patch: introduce format.base configuration
 - format-patch: introduce --base=auto option
 - format-patch: add '--base' option to record base tree info
 - patch-ids: make commit_patch_id() a public helper function

 "git format-patch" learned a new "--base" option to record what
 (public, well-known) commit the original series was built on in
 its output.

 Review comments sent.
 ($gmane/291198)


* dt/index-helper (2016-04-14) 16 commits
 - read-cache: config for waiting for index-helper
 - index-helper: optionally automatically run
 - index-helper: autorun mode
 - index-helper: don't run if already running
 - index-helper: kill mode
 - unpack-trees: preserve index extensions
 - update-index: enable/disable watchman support
 - index-helper: use watchman to avoid refreshing index with lstat()
 - index-helper: add watchman support to reduce index refresh cost
 - read-cache: add watchman 'WAMA' extension
 - index-helper: add --detach
 - daemonize(): set a flag before exiting the main process
 - index-helper: add --strict
 - index-helper: new daemon for caching index and related stuff
 - read-cache: allow to keep mmap'd memory after reading
 - read-cache.c: fix constness of verify_hdr()

 Needs review.


* jc/bundle (2016-03-03) 6 commits
 - index-pack: --clone-bundle option
 - Merge branch 'jc/index-pack' into jc/bundle
 - bundle v3: the beginning
 - bundle: keep a copy of bundle file name in the in-core bundle header
 - bundle: plug resource leak
 - bundle doc: 'verify' is not about verifying the bundle

 The beginning of "split bundle", which could be one of the
 ingredients to allow "git clone" traffic off of the core server
 network to CDN.


* ad/cygwin-wants-rename (2015-08-07) 1 commit
  (merged to 'next' on 2016-04-19 at 1352ede)
 + config.mak.uname: Cygwin needs OBJECT_CREATION_USES_RENAMES

 On Cygwin, object creation uses the "create a temporary and then
 rename it to the final name" pattern, not "create a temporary,
 hardlink it to the final name and then unlink the temporary"
 pattern.

 This is necessary to use Git on Windows shared directories, and is
 already enabled for the MinGW and plain Windows builds.  It also
 has been used in Cygwin packaged versions of Git for quite a while.
 See http://thread.gmane.org/gmane.comp.version-control.git/291853

 Will merge to 'master'.
 ($gmane/275680, $gmane/291853).


* jc/rerere-multi (2016-04-06) 11 commits
  (merged to 'next' on 2016-04-13 at 3db2753)
 + rerere: adjust 'forget' to multi-variant world order
 + rerere: split code to call ll_merge() further
 + rerere: move code related to "forget" together
 + rerere: gc and clear
 + rerere: do use multiple variants
 + t4200: rerere a merge with two identical conflicts
 + rerere: allow multiple variants to exist
 + rerere: delay the recording of preimage
 + rerere: handle leftover rr-cache/$ID directory and postimage files
 + rerere: scan $GIT_DIR/rr-cache/$ID when instantiating a rerere_id
 + rerere: split conflict ID further

 "git rerere" can encounter two or more files with the same conflict
 signature that have to be resolved in different ways, but there was
 no way to record these separate resolutions.

 Will merge to 'master'.


* jc/merge-drop-old-syntax (2015-04-29) 1 commit
 - merge: drop 'git merge <message> HEAD <commit>' syntax

 Stop supporting "git merge <message> HEAD <commit>" syntax that has
 been deprecated since October 2007, and issues a deprecation
 warning message since v2.5.0.

 It has been reported that git-gui still uses the deprecated syntax,
 which needs to be fixed before this final step can proceed.
 ($gmane/282594)

^ permalink raw reply	[relevance 3%]

* What's cooking in git.git (Apr 2016, #07; Mon, 25)
@ 2016-04-25 22:43  3% Junio C Hamano
  0 siblings, 0 replies; 200+ results
From: Junio C Hamano @ 2016-04-25 22:43 UTC (permalink / raw)
  To: git

Here are the topics that have been cooking.  Commits prefixed with
'-' are only in 'pu' (proposed updates) while commits prefixed with
'+' are in 'next'.  The ones marked with '.' do not appear in any of
the integration branches, but I am still holding onto them.

The 'master' branch now has the seventh batch of topics of this
cycle.

You can find the changes described here in the integration branches
of the repositories listed at

    http://git-blame.blogspot.com/p/git-public-repositories.html

--------------------------------------------------
[Graduated to "master"]

* ad/commit-have-m-option (2016-04-07) 2 commits
  (merged to 'next' on 2016-04-13 at 74088c2)
 + commit: do not ignore an empty message given by -m ''
 + commit: --amend -m '' silently fails to wipe message

 "git commit" misbehaved in a few minor ways when an empty message
 is given via -m '', all of which has been corrected.


* ad/cygwin-wants-rename (2015-08-07) 1 commit
  (merged to 'next' on 2016-04-19 at 1352ede)
 + config.mak.uname: Cygwin needs OBJECT_CREATION_USES_RENAMES

 On Cygwin, object creation uses the "create a temporary and then
 rename it to the final name" pattern, not "create a temporary,
 hardlink it to the final name and then unlink the temporary"
 pattern.

 This is necessary to use Git on Windows shared directories, and is
 already enabled for the MinGW and plain Windows builds.  It also
 has been used in Cygwin packaged versions of Git for quite a while.
 See http://thread.gmane.org/gmane.comp.version-control.git/291853
 ($gmane/275680, $gmane/291853).


* dt/pre-refs-backend (2016-04-10) 24 commits
  (merged to 'next' on 2016-04-13 at 0a8f9dd)
 + refs: on symref reflog expire, lock symref not referrent
 + refs: move resolve_ref_unsafe into common code
 + show_head_ref(): check the result of resolve_ref_namespace()
 + check_aliased_update(): check that dst_name is non-NULL
 + checkout_paths(): remove unneeded flag variable
 + cmd_merge(): remove unneeded flag variable
 + fsck_head_link(): remove unneeded flag variable
 + read_raw_ref(): change flags parameter to unsigned int
 + files-backend: inline resolve_ref_1() into resolve_ref_unsafe()
 + read_raw_ref(): manage own scratch space
 + files-backend: break out ref reading
 + resolve_ref_1(): eliminate local variable "bad_name"
 + resolve_ref_1(): reorder code
 + resolve_ref_1(): eliminate local variable
 + resolve_ref_unsafe(): ensure flags is always set
 + resolve_ref_unsafe(): use for loop to count up to MAXDEPTH
 + resolve_missing_loose_ref(): simplify semantics
 + t1430: improve test coverage of deletion of badly-named refs
 + t1430: test for-each-ref in the presence of badly-named refs
 + t1430: don't rely on symbolic-ref for creating broken symrefs
 + t1430: clean up broken refs/tags/shadow
 + t1430: test the output and error of some commands more carefully
 + refs: move for_each_*ref* functions into common code
 + refs: move head_ref{,_submodule} to the common code

 Code restructuring around the "refs" area to prepare for pluggable
 refs backends.


* en/merge-octopus-fix (2016-04-12) 2 commits
  (merged to 'next' on 2016-04-13 at 600b479)
 + merge-octopus: abort if index does not match HEAD
 + t6044: new merge testcases for when index doesn't match HEAD

 "merge-octopus" strategy did not ensure that the index is clean
 when merge begins.


* en/merge-trivial-fix (2016-04-12) 2 commits
  (merged to 'next' on 2016-04-13 at fb3ea86)
 + builtin/merge.c: fix a bug with trivial merges
 + t7605: add a testcase demonstrating a bug with trivial merges

 When "git merge" notices that the merge can be resolved purely at
 the tree level (without having to merge blobs) and the resulting
 tree happens to already exist in the object store, it forgot to
 update the index, which lead to an inconsistent state for later
 operations.


* ew/send-email-drop-data-dumper (2016-04-06) 1 commit
  (merged to 'next' on 2016-04-13 at 180266c)
 + send-email: do not load Data::Dumper

 Code clean-up.


* ew/send-email-readable-message-id (2016-04-06) 1 commit
  (merged to 'next' on 2016-04-13 at 422959a)
 + send-email: more meaningful Message-ID

 "git send-email" now uses a more readable timestamps when
 formulating a message ID.


* jc/http-socks5h (2016-04-10) 1 commit
  (merged to 'next' on 2016-04-13 at eb27afc)
 + http: differentiate socks5:// and socks5h://

 The socks5:// proxy support added back in 2.6.4 days was not aware
 that socks5h:// proxies behave differently.


* jc/rerere-multi (2016-04-06) 11 commits
  (merged to 'next' on 2016-04-13 at 3db2753)
 + rerere: adjust 'forget' to multi-variant world order
 + rerere: split code to call ll_merge() further
 + rerere: move code related to "forget" together
 + rerere: gc and clear
 + rerere: do use multiple variants
 + t4200: rerere a merge with two identical conflicts
 + rerere: allow multiple variants to exist
 + rerere: delay the recording of preimage
 + rerere: handle leftover rr-cache/$ID directory and postimage files
 + rerere: scan $GIT_DIR/rr-cache/$ID when instantiating a rerere_id
 + rerere: split conflict ID further

 "git rerere" can encounter two or more files with the same conflict
 signature that have to be resolved in different ways, but there was
 no way to record these separate resolutions.


* jc/xstrfmt-null-with-prec-0 (2016-04-07) 1 commit
  (merged to 'next' on 2016-04-13 at 2457462)
 + setup.c: do not feed NULL to "%.*s" even with precision 0

 Code cleanup.


* jk/do-not-printf-NULL (2016-04-10) 3 commits
  (merged to 'next' on 2016-04-13 at 60912e3)
 + git_config_set_multivar_in_file: handle "unset" errors
 + git_config_set_multivar_in_file: all non-zero returns are errors
 + config: lower-case first word of error strings

 "git config" had a codepath that tried to pass a NULL to
 printf("%s"), which nobody seems to have noticed.


* jk/use-write-script-more (2016-04-12) 3 commits
  (merged to 'next' on 2016-04-13 at d6718bf)
 + t3404: use write_script
 + t1020: do not overuse printf and use write_script
 + t5532: use write_script

 Code clean-up.


* ky/imap-send (2016-04-13) 2 commits
  (merged to 'next' on 2016-04-13 at 52cf493)
 + imap-send: fix CRAM-MD5 response calculation
 + imap-send: check for NOLOGIN capability only when using LOGIN command

 Support for CRAM-MD5 authentication method in "git imap-send" did
 not work well.


* ky/imap-send-openssl-1.1.0 (2016-04-08) 4 commits
  (merged to 'next' on 2016-04-13 at 49d2643)
 + configure: remove checking for HMAC_CTX_cleanup
 + imap-send: avoid deprecated TLSv1_method()
 + imap-send: check NULL return of SSL_CTX_new()
 + imap-send: use HMAC() function provided by OpenSSL

 Upcoming OpenSSL 1.1.0 will break compilation b updating a few APIs
 we use in imap-send, which has been adjusted for the change.


* sb/submodule-helper-clone-regression-fix (2016-04-01) 6 commits
  (merged to 'next' on 2016-04-13 at c6584bb)
 + submodule--helper, module_clone: catch fprintf failure
 + submodule--helper: do not borrow absolute_path() result for too long
 + submodule--helper, module_clone: always operate on absolute paths
 + submodule--helper clone: create the submodule path just once
 + submodule--helper: fix potential NULL-dereference
 + recursive submodules: test for relative paths
 (this branch is used by sb/submodule-init.)

 A partial rewrite of "git submodule" in the 2.7 timeframe changed
 the way the gitdir: pointer in the submodules point at the real
 repository location to use absolute paths by accident.  This has
 been corrected.


* sb/submodule-path-misc-bugs (2016-03-30) 6 commits
  (merged to 'next' on 2016-04-18 at 9daa5ce)
 + t7407: make expectation as clear as possible
 + submodule update: test recursive path reporting from subdirectory
 + submodule update: align reporting path for custom command execution
 + submodule status: correct path handling in recursive submodules
 + submodule update --init: correct path handling in recursive submodules
 + submodule foreach: correct path display in recursive submodules
 (this branch is used by sb/submodule-init.)

 "git submodule" reports the paths of submodules the command
 recurses into, but this was incorrect when the command was not run
 from the root level of the superproject.

--------------------------------------------------
[New Topics]

* js/name-rev-use-oldest-ref (2016-04-22) 1 commit
 - name-rev: include taggerdate in considering the best name

 "git describe --contains" often made a hard-to-justify choice of
 tag to give name to a given commit, because it tried to come up
 with a name with smallest number of hops from a tag, causing an old
 commit whose close descendant that is recently tagged were not
 described with respect to an old tag but with a newer tag.  It did
 not help that its computation of "hop" count was further tweaked to
 penalize being on a side branch of a merge.  The logic has been
 updated to favor using the tag with the oldest tagger date, which
 is a lot easier to explain to the end users: "We describe a commit
 in terms of the (chronologically) oldest tag that contains the
 commit."

 Will merge to 'next'.


* js/win32-mmap (2016-04-22) 3 commits
  (merged to 'next' on 2016-04-22 at cd39c60)
 + mmap(win32): avoid expensive fstat() call
 + mmap(win32): avoid copy-on-write when it is unnecessary
 + win32mmap: set errno appropriately

 mmap emulation on Windows has been optimized.

 Will merge to 'master'.


* nd/remove-unused (2016-04-22) 2 commits
 - wrapper.c: delete dead function git_mkstemps()
 - dir.c: remove dead function fnmatch_icase()

 Code cleanup.

 Will merge to 'next'.


* rt/string-list-lookup-cleanup (2016-04-25) 1 commit
 - string_list: use string-list API in unsorted_string_list_lookup()

 Code cleanup.

 Will merge to 'next'.


* sg/test-lib-simplify-expr-away (2016-04-22) 1 commit
 - test-lib: simplify '--option=value' parsing

 Code cleanup.

 Will merge to 'next'.


* ew/fast-import-unpack-limit (2016-04-24) 1 commit
 - fast-import: implement unpack limit

 "git fast-import" learned the same performance trick to avoid
 creating too small a packfile as "git fetch" and "git push" have,
 using *.unpackLimit configuration.

 Need to pick up the rerolled version.
 ($gmane/292562)


* jd/send-email-to-whom (2016-04-25) 1 commit
 - send-email: fix grammo in the prompt that asks e-mail recipients

 A question by "git send-email" to ask the identity of the sender
 has been updated.

 Will merge to 'next'.


* ld/p4-test-py3 (2016-04-25) 2 commits
 - git-p4 tests: work with python3 as well as python2
 - git-p4 tests: cd to testdir before running python

 The test scripts for "git p4" (but not "git p4" implementation
 itself) has been updated so that they would work even on a system
 where the installed version of Python is python 3.


* ls/p4-lfs-test-fix-2.7.0 (2016-04-24) 1 commit
 - t9824: fix broken &&-chain in a subshell

 Fix a broken test.

 Will merge to 'next'.

--------------------------------------------------
[Stalled]

* ar/diff-args-osx-precompose (2016-04-05) 1 commit
 - diff: run arguments through precompose_argv

 Many commands normalize command line arguments from NFD to NFC
 variant of UTF-8 on OSX, but commands in the "diff" family did
 not, causing "git diff $path" to complain that no such path is
 known to Git.  They have been taught to do the normalization.

 Will be rerolled?
 ($gmane/290724)


* nd/shallow-deepen (2016-04-13) 26 commits
 - fetch, upload-pack: --deepen=N extends shallow boundary by N commits
 - upload-pack: add get_reachable_list()
 - upload-pack: split check_unreachable() in two, prep for get_reachable_list()
 - t5500, t5539: tests for shallow depth excluding a ref
 - clone: define shallow clone boundary with --shallow-exclude
 - fetch: define shallow boundary with --shallow-exclude
 - upload-pack: support define shallow boundary by excluding revisions
 - refs: add expand_ref()
 - t5500, t5539: tests for shallow depth since a specific date
 - clone: define shallow clone boundary based on time with --shallow-since
 - fetch: define shallow boundary with --shallow-since
 - upload-pack: add deepen-since to cut shallow repos based on time
 - shallow.c: implement a generic shallow boundary finder based on rev-list
 - fetch-pack: use a separate flag for fetch in deepening mode
 - fetch-pack.c: mark strings for translating
 - fetch-pack: use a common function for verbose printing
 - fetch-pack: use skip_prefix() instead of starts_with()
 - upload-pack: move rev-list code out of check_non_tip()
 - upload-pack: tighten number parsing at "deepen" lines
 - upload-pack: use skip_prefix() instead of starts_with()
 - upload-pack: move "unshallow" sending code out of deepen()
 - upload-pack: remove unused variable "backup"
 - upload-pack: move "shallow" sending code out of deepen()
 - upload-pack: move shallow deepen code out of receive_needs()
 - transport-helper.c: refactor set_helper_option()
 - remote-curl.c: convert fetch_git() to use argv_array

 The existing "git fetch --depth=<n>" option was hard to use
 correctly when making the history of an existing shallow clone
 deeper.  A new option, "--deepen=<n>", has been added to make this
 easier to use.  "git clone" also learned "--shallow-since=<date>"
 and "--shallow-exclude=<tag>" options to make it easier to specify
 "I am interested only in the recent N months worth of history" and
 "Give me only the history since that version".

 Needs review.


* sg/completion-updates (2016-02-28) 21 commits
 - completion: cache the path to the repository
 - completion: extract repository discovery from __gitdir()
 - completion: don't guard git executions with __gitdir()
 - completion: consolidate silencing errors from git commands
 - completion: don't use __gitdir() for git commands
 - completion: respect 'git -C <path>'
 - completion: fix completion after 'git -C <path>'
 - completion: don't offer commands when 'git --opt' needs an argument
 - rev-parse: add '--absolute-git-dir' option
 - completion: list short refs from a remote given as a URL
 - completion: don't list 'HEAD' when trying refs completion outside of a repo
 - completion: list refs from remote when remote's name matches a directory
 - completion: respect 'git --git-dir=<path>' when listing remote refs
 - completion: fix most spots not respecting 'git --git-dir=<path>'
 - completion: ensure that the repository path given on the command line exists
 - completion tests: add tests for the __git_refs() helper function
 - completion tests: check __gitdir()'s output in the error cases
 - completion tests: consolidate getting path of current working directory
 - completion tests: make the $cur variable local to the test helper functions
 - completion tests: don't add test cruft to the test repository
 - completion: improve __git_refs()'s in-code documentation

 Will be rerolled.
 ($gmane/287839)


* az/p4-bare-no-rebase (2016-02-19) 1 commit
 - git-p4.py: Don't try to rebase on submit from bare repository

 "git p4 submit" attempts to do a rebase, which would fail if done
 in a bare repository.  Not doing this rebase would paper over the
 failure, which is what this patch does, but it is unclear what the
 side effect of not rebasing is.

 Needs a better explanation.


* ss/commit-dry-run-resolve-merge-to-no-op (2016-02-17) 1 commit
 - wt-status.c: set commitable bit if there is a meaningful merge.

 "git commit --dry-run" reported "No, no, you cannot commit." in one
 case where "git commit" would have allowed you to commit, and this
 improves it a little bit ("git commit --dry-run --short" still does
 not give you the correct answer, for example).


* nd/icase (2016-02-15) 12 commits
 - grep.c: reuse "icase" variable
 - diffcore-pickaxe: support case insensitive match on non-ascii
 - diffcore-pickaxe: "share" regex error handling code
 - grep/pcre: support utf-8
 - gettext: add is_utf8_locale()
 - grep/pcre: prepare locale-dependent tables for icase matching
 - grep/icase: avoid kwsset when -F is specified
 - grep/icase: avoid kwsset on literal non-ascii strings
 - test-regex: expose full regcomp() to the command line
 - test-regex: isolate the bug test code
 - grep: break down an "if" stmt in preparation for next changes
 - grep: allow -F -i combination

 "git grep -i" has been taught to fold case in non-ascii locales.

 Needs review.
 ($gmane/286137)


* ec/annotate-deleted (2015-11-20) 1 commit
 - annotate: skip checking working tree if a revision is provided

 Usability fix for annotate-specific "<file> <rev>" syntax with deleted
 files.

 Waiting for review.


* dg/subtree-rebase-test (2016-01-19) 1 commit
 - contrib/subtree: Add a test for subtree rebase that loses commits

 Reviewed up to v5.
 Will be rerolled.
 ($gmane/284426)


* js/am-3-merge-recursive-direct (2015-10-12) 2 commits
 - am: make a direct call to merge_recursive
 - merge_recursive_options: introduce the "gently" flag

 The merge_recursive_generic() function has been made a bit safer to
 call from inside a process.  "git am -3" was taught to make a direct
 call to the function when falling back to three-way merge.

 Being able to make a direct call would be good in general, but as a
 performance thing, the change needs to be backed up by numbers.

 I haven't gone through the "gently" change with fine toothed comb;
 I can see that the change avoids calling die(), but I haven't made
 sure that the program states (e.g. what's in the in-core index) are
 adjusted sensibly when it returns to the caller instead of dying,
 or the codepaths that used to die() are free of resource leaks.
 The original code certainly did not care the program states at the
 point of dying exactly because it knew it is going to exit, but now
 they have to care, and they need to be audited.

 Will be rerolled.
 ($gmane/292205)


* dk/gc-more-wo-pack (2016-01-13) 4 commits
 - gc: clean garbage .bitmap files from pack dir
 - t5304: ensure non-garbage files are not deleted
 - t5304: test .bitmap garbage files
 - prepare_packed_git(): find more garbage

 Follow-on to dk/gc-idx-wo-pack topic, to clean up stale
 .bitmap and .keep files.

 Waiting for a reroll.
 ($gmane/284368).


* jc/diff-b-m (2015-02-23) 5 commits
 . WIPWIP
 . WIP: diff-b-m
 - diffcore-rename: allow easier debugging
 - diffcore-rename.c: add locate_rename_src()
 - diffcore-break: allow debugging

 "git diff -B -M" produced incorrect patch when the postimage of a
 completely rewritten file is similar to the preimage of a removed
 file; such a resulting file must not be expressed as a rename from
 other place.

 The fix in this patch is broken, unfortunately.
 Will discard.

--------------------------------------------------
[Cooking]

* sb/clone-shallow-passthru (2016-04-25) 1 commit
 - clone: add `--shallow-submodules` flag

 "git clone" learned "--shallow-submodules" option.

 Modulo minor nits, looked ready.
 ($gmane/292539)


* da/user-useconfigonly (2016-04-01) 2 commits
  (merged to 'next' on 2016-04-22 at 26845a5)
 + ident: give "please tell me" message upon useConfigOnly error
 + ident: check for useConfigOnly before auto-detection of name/email

 The "user.useConfigOnly" configuration variable makes it an error
 if users do not explicitly set user.name and user.email.  However,
 its check was not done early enough and allowed another error to
 trigger, reporting that the default value we guessed from the
 system setting was unusable.  This was a suboptimal end-user
 experience as we want the users to set user.name/user.email without
 relying on the auto-detection at all.

 Will merge to 'master'.


* jd/p4-jobs-in-commit (2016-04-19) 2 commits
 - git-p4: add P4 jobs to git commit message
 - git-p4: clean-up code style in tests

 "git p4" learned to record P4 jobs in Git commit that imports from
 the history in Perforce.

 Will merge to 'next'.


* js/replace-edit-use-editor-configuration (2016-04-20) 1 commit
  (merged to 'next' on 2016-04-22 at 8df6d30)
 + replace --edit: respect core.editor

 "git replace -e" did not honour "core.editor" configuration.

 Will merge to 'master'.


* ls/p4-lfs (2016-04-19) 2 commits
 - git-p4: fix Git LFS pointer parsing
 - travis-ci: update Git-LFS and P4 to the latest version

 Recent update to Git LFS broke "git p4" by changing the output from
 its "lfs pointer" subcommand.


* sb/mv-submodule-fix (2016-04-19) 1 commit
  (merged to 'next' on 2016-04-22 at 089e788)
 + mv: allow moving nested submodules

 "git mv old new" did not adjust the path for a submodule that lives
 as a subdirectory inside old/ directory correctly.

 Will merge to 'master'.


* tb/convert-eol-autocrlf (2016-04-25) 10 commits
 - ce_compare_data() did not respect conversion
 - t6038; use crlf on all platforms
 - convert.c: more safer crlf handling with text attribute
 - convert: unify the "auto" handling of CRLF
 - convert.c: stream and early out
 - read-cache: factor out get_sha1_from_index() helper
 - convert.c: ident + core.autocrlf didn't work
 - t0027: test cases for combined attributes
 - convert: allow core.autocrlf=input and core.eol=crlf
 - t0027: make commit_chk_wrnNNO() reliable

 The combination of text=auto & eol=crlf (or eol=lf for that matter)
 is taught to be much more useful; it used to be "auto detection"
 was defeated as if setting eol declares that the file _is_ text,
 but now text=auto is still in effect for such a path and the code
 refrains from applying eol conversion if it found the path is not
 text.  Also setting core.autocrlf to 'input' and core.eol to 'crlf'
 used to be rejected, but because the code gives precedence to
 core.autcrlf, there is no need to, hence we no longer reject the
 combination.

 Modulo minor nits, looked almost ready.
 ($gmane/292521, $gmane/292550)


* bc/object-id (2016-04-25) 6 commits
 - match-trees: convert several leaf functions to use struct object_id
 - tree-walk: convert tree_entry_extract() to use struct object_id
 - struct name_entry: use struct object_id instead of unsigned char sha1[20]
 - match-trees: convert shift_tree() and shift_tree_by() to use object_id
 - test-match-trees: convert to use struct object_id
 - sha1-name: introduce a get_oid() function

 Move from unsigned char[20] to struct object_id continues.

 Will merge to 'next'.


* ep/http-curl-trace (2016-04-20) 3 commits
 - git.txt: document the new GIT_TRACE_CURL environment variable
 - imap-send.c: introduce the GIT_TRACE_CURL enviroment variable
 - http.c: implement the GIT_TRACE_CURL environment variable

 HTTP transport gained an option to produce more detailed debugging
 trace.

 Still under discussion.
 ($gmane/292074)


* nd/worktree-various-heads (2016-04-22) 13 commits
 - branch: do not rename a branch under bisect or rebase
 - worktree.c: check whether branch is bisected in another worktree
 - wt-status.c: split bisect detection out of wt_status_get_state()
 - worktree.c: check whether branch is rebased in another worktree
 - worktree.c: avoid referencing to worktrees[i] multiple times
 - wt-status.c: make wt_status_check_rebase() work on any worktree
 - wt-status.c: split rebase detection out of wt_status_get_state()
 - path.c: refactor and add worktree_git_path()
 - worktree.c: mark current worktree
 - worktree.c: make find_shared_symref() return struct worktree *
 - worktree.c: store "id" instead of "git_dir"
 - path.c: add git_common_path() and strbuf_git_common_path()
 - dir.c: rename str(n)cmp_icase to fspath(n)cmp

 The experimental "multiple worktree" feature gains more safety to
 forbid operations on a branch that is checked out or being actively
 worked on elsewhere, by noticing that e.g. it is being rebased.

 Being reviewed.
 ($gmane/292189)


* bw/rebase-merge-entire-branch (2016-04-24) 1 commit
 - git-rebase--merge: don't include absent parent as a base

 "git rebase -m" could be asked to rebase an entire branch starting
 from the root, but failed by assuming that there always is a parent
 commit to the first commit on the branch.

 Will merge to 'next'.


* jk/push-client-deadlock-fix (2016-04-20) 5 commits
  (merged to 'next' on 2016-04-22 at d59a2af)
 + t5504: drop sigpipe=ok from push tests
 + fetch-pack: isolate sigpipe in demuxer thread
 + send-pack: isolate sigpipe in demuxer thread
 + run-command: teach async threads to ignore SIGPIPE
 + send-pack: close demux pipe before finishing async process

 "git push" from a corrupt repository that attempts to push a large
 number of refs deadlocked; the thread to relay rejection notices
 for these ref updates blocked on writing them to the main thread,
 after the main thread at the receiving end notices that the push
 failed and decides not to read these notices and return a failure.

 Will merge to 'master'.


* jc/merge-refuse-new-root (2016-04-21) 2 commits
  (merged to 'next' on 2016-04-22 at 74eb957)
 + pull: pass --allow-unrelated-histories to "git merge"
 + t3033: avoid 'ambiguous refs' warning

 "git pull" has been taught to pass --allow-unrelated-histories
 option to underlying "git merge".

 Will merge to 'master'.


* pb/commit-verbose-config (2016-04-19) 6 commits
 - commit: add a commit.verbose config variable
 - t7507-commit-verbose: improve test coverage by testing number of diffs
 - parse-options.c: make OPTION_COUNTUP respect "unspecified" values
 - t0040-parse-options: improve test coverage
 - test-parse-options: print quiet as integer
 - t0040-test-parse-options.sh: fix style issues

 "git commit" learned to pay attention to "commit.verbose"
 configuration variable and act as if "--verbose" option was
 given from the command line.

 Need a reroll but it will be some time before that happens.
 ($gmane/292160).


* en/merge-fixes (2016-04-12) 2 commits
 - merge-recursive: do not check working copy when creating a virtual merge base
 - merge-recursive: remove duplicate code

 "merge-recursive" strategy incorrectly checked if a path that is
 involved in its internal merge exists in the working tree.

 Will merge to 'next'.


* jc/fsck-nul-in-commit (2016-04-14) 2 commits
 - fsck: detect and warn a commit with embedded NUL
 - fsck_commit_buffer(): do not special case the last validation

 "git fsck" learned to catch NUL byte in a commit object as
 potential error and warn.


* jc/ll-merge-internal (2016-04-14) 2 commits
 - ll-merge: use a longer conflict marker for internal merge
 - ll-merge: fix typo in comment

 RFC.


* jk/diff-compact-heuristic (2016-04-19) 2 commits
  (merged to 'next' on 2016-04-22 at 0c117ea)
 + xdiff: implement empty line chunk heuristic
 + xdiff: add recs_match helper function

 Patch output from "git diff" and friends has been tweaked to be
 more readable by using a blank line as a strong hint that the
 contents before and after it belong to a logically separate unit.

 Will merge to 'master'.


* nd/test-helpers (2016-04-15) 2 commits
  (merged to 'next' on 2016-04-22 at 55ea5cd)
 + test helpers: move test-* to t/helper/ subdirectory
 + Makefile: clean *.o files we create

 Sources to many test helper binaries (and the generated helpers)
 have been moved to t/helper/ subdirectory to reduce clutter at the
 top level of the tree.

 Will merge to 'master'.


* sb/submodule-init (2016-04-16) 4 commits
 - submodule: port init from shell to C
 - submodule: port resolve_relative_url from shell to C
 - Merge branch 'sb/submodule-path-misc-bugs' into sb/submodule-init
 - Merge branch 'sb/submodule-helper-clone-regression-fix' into sb/submodule-init

 Update of "git submodule" to move pieces of logic to C continues.

 Will merge to 'next'.


* jc/send-email-skip-backup (2016-04-12) 1 commit
 - send-email: detect and offer to skip backup files

 A careless invocation of "git send-email directory/" after editing
 0001-change.patch with an editor often ends up sending both
 0001-change.patch and its backup file, 0001-change.patch~, causing
 embarrassment and a minor confusion.  Detect such an input and
 offer to skip the backup files when sending the patches out.

 Needs review.


* nf/mergetool-prompt (2016-04-25) 1 commit
 - difftool/mergetool: make the form of yes/no questions consistent

 UI consistency improvements.

 Will merge to 'next'.


* va/i18n-misc-updates (2016-04-19) 9 commits
 - i18n: builtin/pull.c: split strings marked for translation
 - i18n: builtin/pull.c: mark placeholders for translation
 - i18n: git-parse-remote.sh: mark strings for translation
 - i18n: branch: move comment for translators
 - i18n: branch: unmark string for translation
 - i18n: builtin/rm.c: remove a comma ',' from string
 - i18n: unpack-trees: mark strings for translation
 - i18n: builtin/branch.c: mark option for translation
 - i18n: index-pack: use plural string instead of normal one

 Mark several messages for translation.

 Comments?  They looked all sensible to me.


* jc/drop-git-spec-in (2016-04-06) 1 commit
  (merged to 'next' on 2016-04-22 at 531583f)
 + Makefile: stop pretending to support rpmbuild

 As nobody maintains our in-tree git.spec.in and distros use their
 own spec file, we stopped pretending that we support "make rpm".

 Will merge to 'master'.


* st/verify-tag (2016-04-22) 6 commits
  (merged to 'next' on 2016-04-22 at 98ba239)
 + tag -v: verify directly rather than exec-ing verify-tag
 + verify-tag: move tag verification code to tag.c
 + verify-tag: prepare verify_tag for libification
 + verify-tag: update variable name and type
 + t7030: test verifying multiple tags
 + builtin/verify-tag.c: ignore SIGPIPE in gpg-interface

 Unify internal logic between "git tag -v" and "git verify-tag"
 commands by making one directly call into the other.

 Will merge to 'master'.


* kn/ref-filter-branch-list (2016-04-25) 17 commits
 - branch: implement '--format' option
 - branch: use ref-filter printing APIs
 - branch, tag: use porcelain output
 - ref-filter: allow porcelain to translate messages in the output
 - ref-filter: add `:dir` and `:base` options for ref printing atoms
 - ref-filter: make remote_ref_atom_parser() use refname_atom_parser_internal()
 - ref-filter: introduce symref_atom_parser() and refname_atom_parser()
 - ref-filter: introduce refname_atom_parser_internal()
 - ref-filter: make "%(symref)" atom work with the ':short' modifier
 - ref-filter: add support for %(upstream:track,nobracket)
 - ref-filter: make %(upstream:track) prints "[gone]" for invalid upstreams
 - ref-filter: introduce format_ref_array_item()
 - ref-filter: move get_head_description() from branch.c
 - ref-filter: modify "%(objectname:short)" to take length
 - ref-filter: implement %(if:equals=<string>) and %(if:notequals=<string>)
 - ref-filter: include reference to 'used_atom' within 'atom_value'
 - ref-filter: implement %(if), %(then), and %(else) atoms

 The code to list branches in "git branch" has been consolidated
 with the more generic ref-filter API.

 Needs review.


* xy/format-patch-base (2016-04-22) 4 commits
 . format-patch: introduce format.useAutoBase configuration
 . format-patch: introduce --base=auto option
 . format-patch: add '--base' option to record base tree info
 . patch-ids: make commit_patch_id() a public helper function

 "git format-patch" learned a new "--base" option to record what
 (public, well-known) commit the original series was built on in
 its output.

 Review comments sent.
 ($gmane/292168)


* dt/index-helper (2016-04-14) 16 commits
 - read-cache: config for waiting for index-helper
 - index-helper: optionally automatically run
 - index-helper: autorun mode
 - index-helper: don't run if already running
 - index-helper: kill mode
 - unpack-trees: preserve index extensions
 - update-index: enable/disable watchman support
 - index-helper: use watchman to avoid refreshing index with lstat()
 - index-helper: add watchman support to reduce index refresh cost
 - read-cache: add watchman 'WAMA' extension
 - index-helper: add --detach
 - daemonize(): set a flag before exiting the main process
 - index-helper: add --strict
 - index-helper: new daemon for caching index and related stuff
 - read-cache: allow to keep mmap'd memory after reading
 - read-cache.c: fix constness of verify_hdr()

 Needs review.


* jc/bundle (2016-03-03) 6 commits
 - index-pack: --clone-bundle option
 - Merge branch 'jc/index-pack' into jc/bundle
 - bundle v3: the beginning
 - bundle: keep a copy of bundle file name in the in-core bundle header
 - bundle: plug resource leak
 - bundle doc: 'verify' is not about verifying the bundle

 The beginning of "split bundle", which could be one of the
 ingredients to allow "git clone" traffic off of the core server
 network to CDN.


* jc/merge-drop-old-syntax (2015-04-29) 1 commit
 - merge: drop 'git merge <message> HEAD <commit>' syntax

 Stop supporting "git merge <message> HEAD <commit>" syntax that has
 been deprecated since October 2007, and issues a deprecation
 warning message since v2.5.0.

 It has been reported that git-gui still uses the deprecated syntax,
 which needs to be fixed before this final step can proceed.
 ($gmane/282594)

^ permalink raw reply	[relevance 3%]

* [ANNOUNCE] Git v2.8.2
@ 2016-04-29 22:04  2% Junio C Hamano
  0 siblings, 0 replies; 200+ results
From: Junio C Hamano @ 2016-04-29 22:04 UTC (permalink / raw)
  To: git; +Cc: Linux Kernel

The latest maintenance release Git v2.8.2 is now available at
the usual places.

The tarballs are found at:

    https://www.kernel.org/pub/software/scm/git/

The following public repositories all have a copy of the 'v2.8.2'
tag and the 'maint' branch that the tag points at:

  url = https://kernel.googlesource.com/pub/scm/git/git
  url = git://repo.or.cz/alt-git.git
  url = git://git.sourceforge.jp/gitroot/git-core/git.git
  url = git://git-core.git.sourceforge.net/gitroot/git-core/git-core
  url = https://github.com/gitster/git

----------------------------------------------------------------

Git v2.8.2 Release Notes
========================

Fixes since v2.8.1
------------------

 * The embedded args argv-array in the child process is used to build
   the command line to run pack-objects instead of using a separate
   array of strings.

 * Bunch of tests on "git clone" has been renumbered for better
   organization.

 * The tests that involve running httpd leaked the system-wide
   configuration in /etc/gitconfig to the tested environment.

 * "index-pack --keep=<msg>" was broken since v2.1.0 timeframe.

 * "git config --get-urlmatch", unlike other variants of the "git
   config --get" family, did not signal error with its exit status
   when there was no matching configuration.

 * The "--local-env-vars" and "--resolve-git-dir" options of "git
   rev-parse" failed to work outside a repository when the command's
   option parsing was rewritten in 1.8.5 era.

 * Fetching of history by naming a commit object name directly didn't
   work across remote-curl transport.

 * A small memory leak in an error codepath has been plugged in xdiff
   code.

 * strbuf_getwholeline() did not NUL-terminate the buffer on certain
   corner cases in its error codepath.

 * The startup_info data, which records if we are working inside a
   repository (among other things), are now uniformly available to Git
   subcommand implementations, and Git avoids attempting to touch
   references when we are not in a repository.

 * "git mergetool" did not work well with conflicts that both sides
   deleted.

 * "git send-email" had trouble parsing alias file in mailrc format
   when lines in it had trailing whitespaces on them.

 * When "git merge --squash" stopped due to conflict, the concluding
   "git commit" failed to read in the SQUASH_MSG that shows the log
   messages from all the squashed commits.

 * "git merge FETCH_HEAD" dereferenced NULL pointer when merging
   nothing into an unborn history (which is arguably unusual usage,
   which perhaps was the reason why nobody noticed it).

 * Build updates for MSVC.

 * "git diff -M" used to work better when two originally identical
   files A and B got renamed to X/A and X/B by pairing A to X/A and B
   to X/B, but this was broken in the 2.0 timeframe.

 * "git send-pack --all <there>" was broken when its command line
   option parsing was written in the 2.6 timeframe.

 * When running "git blame $path" with unnormalized data in the index
   for the path, the data in the working tree was blamed, even though
   "git add" would not have changed what is already in the index, due
   to "safe crlf" that disables the line-end conversion.  It has been
   corrected.

Also contains minor documentation updates and code clean-ups.

----------------------------------------------------------------

Changes since v2.8.1 are as follows:

Alexander Kuleshov (1):
      submodule-config: use hashmap_iter_first()

Christian Couder (1):
      Documentation: talk about pager in api-trace.txt

David Aguilar (2):
      mergetool: support delete/delete conflicts
      mergetool: honor tempfile configuration when resolving delete conflicts

Elia Pinto (1):
      api-trace.txt: fix typo

Gabriel Souza Franco (2):
      fetch-pack: fix object_id of exact sha1
      fetch-pack: update the documentation for "<refs>..." arguments

Jeff King (12):
      t1515: add tests for rev-parse out-of-repo helpers
      rev-parse: let some options run outside repository
      strbuf_getwholeline: NUL-terminate getdelim buffer on error
      setup: make startup_info available everywhere
      setup: set startup_info->have_repository more reliably
      remote: don't resolve HEAD in non-repository
      mailmap: do not resolve blobs in a non-repository
      grep: turn off gitlink detection for --no-index
      use setup_git_directory() in test-* programs
      send-email: ignore trailing whitespace in mailrc alias file
      credential-cache--daemon: clarify "exit" action semantics
      t/lib-httpd: pass through GIT_CONFIG_NOSYSTEM env

Johannes Sixt (1):
      Windows: shorten code by re-using convert_slashes()

John Keeping (3):
      config: fail if --get-urlmatch finds no value
      Documentation/git-config: use bulleted list for exit codes
      Documentation/git-config: fix --get-all description

Junio C Hamano (7):
      index-pack: correct --keep[=<msg>]
      index-pack: add a helper function to derive .idx/.keep filename
      merge: fix NULL pointer dereference when merging nothing into void
      Makefile: fix misdirected redirections
      Start preparing for 2.8.2
      Prepare for 2.8.2
      Git 2.8.2

Matthieu Moy (2):
      lockfile: mark strings for translation
      lockfile: improve error message when lockfile exists

Michael Procter (1):
      upload-pack: use argv_array for pack_objects

Nguyễn Thái Ngọc Duy (2):
      git-apply.txt: remove a space
      git-apply.txt: mention the behavior inside a subdir

Ori Avtalion (1):
      Documentation: git diff --check detects conflict markers

Pranit Bauva (2):
      t/t7502 : drop duplicate test
      api-parse-options.txt: document OPT_CMDMODE()

Ramsay Jones (2):
      xdiff/xprepare: use the XDF_DIFF_ALG() macro to access flag bits
      xdiff/xprepare: fix a memory leak

SZEDER Gábor (1):
      diffcore: fix iteration order of identical files during rename detection

Saurav Sachidanand (1):
      dir: store EXC_FLAG_* values in unsigned integers

Stanislav Kolotinskiy (1):
      git-send-pack: fix --all option when used with directory

Stefan Beller (1):
      clone tests: rename t57* => t56*

Sven Strickroth (3):
      commit: do not lose SQUASH_MSG contents
      MSVC: vsnprintf in Visual Studio 2015 doesn't need SNPRINTF_SIZE_CORR any more
      MSVC: use shipped headers instead of fallback definitions

Torsten Bögershausen (1):
      correct blame for files commited with CRLF

Vasco Almeida (4):
      l10n: fr: fix transcation of "dir"
      l10n: fr: fix wrongly translated option name
      l10n: fr: change "id de clé" to match "id-clé"
      l10n: fr: don't translate "merge" as a parameter

^ permalink raw reply	[relevance 2%]

* What's cooking in git.git (Apr 2016, #08; Fri, 29)
@ 2016-04-29 22:04  2% Junio C Hamano
  0 siblings, 0 replies; 200+ results
From: Junio C Hamano @ 2016-04-29 22:04 UTC (permalink / raw)
  To: git

Here are the topics that have been cooking.  Commits prefixed with
'-' are only in 'pu' (proposed updates) while commits prefixed with
'+' are in 'next'.  The ones marked with '.' do not appear in any of
the integration branches, but I am still holding onto them.

The 'master' branch now has the eighths batch of topics of this
cycle.  On the 'maint' front, 2.8.2 is out.

There are a handful of topics that are stuck; they are marked as
"Needs review", "Needs an Ack", etc. in the following list.

You can find the changes described here in the integration branches
of the repositories listed at

    http://git-blame.blogspot.com/p/git-public-repositories.html

--------------------------------------------------
[Graduated to "master"]

* da/user-useconfigonly (2016-04-01) 2 commits
  (merged to 'next' on 2016-04-22 at 26845a5)
 + ident: give "please tell me" message upon useConfigOnly error
 + ident: check for useConfigOnly before auto-detection of name/email

 The "user.useConfigOnly" configuration variable makes it an error
 if users do not explicitly set user.name and user.email.  However,
 its check was not done early enough and allowed another error to
 trigger, reporting that the default value we guessed from the
 system setting was unusable.  This was a suboptimal end-user
 experience as we want the users to set user.name/user.email without
 relying on the auto-detection at all.


* jc/merge-refuse-new-root (2016-04-21) 2 commits
  (merged to 'next' on 2016-04-22 at 74eb957)
 + pull: pass --allow-unrelated-histories to "git merge"
 + t3033: avoid 'ambiguous refs' warning

 "git pull" has been taught to pass --allow-unrelated-histories
 option to underlying "git merge".


* jk/push-client-deadlock-fix (2016-04-20) 5 commits
  (merged to 'next' on 2016-04-22 at d59a2af)
 + t5504: drop sigpipe=ok from push tests
 + fetch-pack: isolate sigpipe in demuxer thread
 + send-pack: isolate sigpipe in demuxer thread
 + run-command: teach async threads to ignore SIGPIPE
 + send-pack: close demux pipe before finishing async process

 "git push" from a corrupt repository that attempts to push a large
 number of refs deadlocked; the thread to relay rejection notices
 for these ref updates blocked on writing them to the main thread,
 after the main thread at the receiving end notices that the push
 failed and decides not to read these notices and return a failure.


* js/replace-edit-use-editor-configuration (2016-04-20) 1 commit
  (merged to 'next' on 2016-04-22 at 8df6d30)
 + replace --edit: respect core.editor

 "git replace -e" did not honour "core.editor" configuration.


* js/win32-mmap (2016-04-22) 3 commits
  (merged to 'next' on 2016-04-22 at cd39c60)
 + mmap(win32): avoid expensive fstat() call
 + mmap(win32): avoid copy-on-write when it is unnecessary
 + win32mmap: set errno appropriately

 mmap emulation on Windows has been optimized and work better without
 consuming paging store when not needed.


* nd/test-helpers (2016-04-15) 2 commits
  (merged to 'next' on 2016-04-22 at 55ea5cd)
 + test helpers: move test-* to t/helper/ subdirectory
 + Makefile: clean *.o files we create

 Sources to many test helper binaries (and the generated helpers)
 have been moved to t/helper/ subdirectory to reduce clutter at the
 top level of the tree.


* sb/mv-submodule-fix (2016-04-19) 1 commit
  (merged to 'next' on 2016-04-22 at 089e788)
 + mv: allow moving nested submodules

 "git mv old new" did not adjust the path for a submodule that lives
 as a subdirectory inside old/ directory correctly.


* st/verify-tag (2016-04-22) 6 commits
  (merged to 'next' on 2016-04-22 at 98ba239)
 + tag -v: verify directly rather than exec-ing verify-tag
 + verify-tag: move tag verification code to tag.c
 + verify-tag: prepare verify_tag for libification
 + verify-tag: update variable name and type
 + t7030: test verifying multiple tags
 + builtin/verify-tag.c: ignore SIGPIPE in gpg-interface

 Unify internal logic between "git tag -v" and "git verify-tag"
 commands by making one directly call into the other.

--------------------------------------------------
[New Topics]

* ab/hooks (2016-04-26) 4 commits
 - hooks: allow customizing where the hook directory is
 - githooks.txt: minor improvements to the grammar & phrasing
 - githooks.txt: amend dangerous advice about 'update' hook ACL
 - githooks.txt: improve the intro section

 A new configuration variable core.hooksPath allows customizing
 where the hook directory is.

 Almost there.
 ($gmane/292635)


* jc/merge-impossible-no-commit (2016-04-26) 2 commits
 - merge: warn --no-commit merge when no new commit is created
 - merge: do not contaminate option_commit with --squash

 "git merge --no-commit" silently succeeded when there is no need to
 create any commit, either when you are more recent than the commit
 you tried to merge, or you can fast-forward to the commit you tried
 to merge.  The command gives a warning message in such cases.

 Just tying loose ends in a discussion.  Unless somebody else
 champions this topic, I'll drop it.


* jk/fix-attribute-macro-in-2.5 (2016-04-25) 1 commit
  (merged to 'next' on 2016-04-27 at 2e42613)
 + remote.c: spell __attribute__ correctly

 Code fixup.

 Will merge to 'master'.


* js/http-custom-headers (2016-04-27) 1 commit
  (merged to 'next' on 2016-04-27 at 0c97a50)
 + http: support sending custom HTTP headers

 HTTP transport clients learned to throw extra HTTP headers at the
 server, specified via http.extraHeader configuration variable.

 Will merge to 'master'.


* sb/bisect (2016-04-15) 22 commits
 - SQUASH???
 - bisect: get back halfway shortcut
 - bisect: compute best bisection in compute_relevant_weights()
 - bisect: use a bottom-up traversal to find relevant weights
 - bisect: prepare for different algorithms based on find_all
 - bisect: rename count_distance() to compute_weight()
 - bisect: make total number of commits global
 - bisect: introduce distance_direction()
 - bisect: extract get_distance() function from code duplication
 - bisect: use commit instead of commit list as arguments when appropriate
 - bisect: replace clear_distance() by unique markers
 - bisect: use struct node_data array instead of int array
 - bisect: get rid of recursion in count_distance()
 - bisect: make algorithm behavior independent of DEBUG_BISECT
 - bisect: make bisect compile if DEBUG_BISECT is set
 - bisect: plug the biggest memory leak
 - bisect: add test for the bisect algorithm
 - t6030: generalize test to not rely on current implementation
 - t: use test_cmp_rev() where appropriate
 - t/test-lib-functions.sh: generalize test_cmp_rev
 - bisect: allow 'bisect run' if no good commit is known
 - bisect: write about `bisect next` in documentation

 The internal algorithm used in "git bisect" to find the next commit
 to check has been optimized greatly.

 Expecting a reroll.
 ($gmane/291163)


* sb/config-exit-status-list (2016-04-26) 1 commit
  (merged to 'next' on 2016-04-27 at 44fe343)
 + config doc: improve exit code listing

 Doc update.

 Will merge to 'master'.


* mh/split-under-lock (2016-04-27) 29 commits
 - lock_ref_sha1_basic(): only handle REF_NODEREF mode
 - commit_ref_update(): remove the flags parameter
 - lock_ref_for_update(): don't resolve symrefs
 - lock_ref_for_update(): don't re-read non-symbolic references
 - refs: resolve symbolic refs first
 - ref_transaction_update(): check refname_is_safe() at a minimum
 - unlock_ref(): move definition higher in the file
 - lock_ref_for_update(): new function
 - add_update(): initialize the whole ref_update
 - verify_refname_available(): adjust constness in declaration
 - refs: don't dereference on rename
 - refs: allow log-only updates
 - delete_branches(): use resolve_refdup()
 - ref_transaction_commit(): correctly report close_ref() failure
 - ref_transaction_create(): disallow recursive pruning
 - refs: make error messages more consistent
 - lock_ref_sha1_basic(): remove unneeded local variable
 - read_raw_ref(): improve docstring
 - read_raw_ref(): rename symref argument to referent
 - read_raw_ref(): clear *type at start of function
 - read_raw_ref(): rename flags argument to type
 - ref_transaction_commit(): remove local variable n
 - rename_ref(): remove unneeded local variable
 - commit_ref_update(): write error message to *err, not stderr
 - refname_is_safe(): insist that the refname already be normalized
 - refname_is_safe(): don't allow the empty string
 - refname_is_safe(): use skip_prefix()
 - remove_dir_recursively(): add docstring
 - safe_create_leading_directories(): improve docstring

 Further preparatory work on the refs API before the pluggable
 backend series can land.

 Almost there.
 ($gmane/292772)


* bn/http-cookiefile-config (2016-04-29) 2 commits
 - http: expand http.cookieFile as a path
 - Documentation: config: improve word ordering for http.cookieFile
 (this branch uses jc/config-pathname-type.)

 "http.cookieFile" configuration variable clearly wants a pathname,
 but we forgot to treat it as such by e.g. applying tilde expansion.

 Waiting for an Ack to what's queued with tweaks, or a reroll.
 ($gmane/292969)


* ew/doc-split-pack-disables-bitmap (2016-04-28) 1 commit
 - pack-objects: warn on split packs disabling bitmaps

 Doc update.

 Will merge to 'next'.


* jc/config-pathname-type (2016-04-29) 1 commit
 - config: describe 'pathname' value type
 (this branch is used by bn/http-cookiefile-config.)

 Consolidate description of tilde-expansion that is done to
 configuration variables that take pathname to a single place.

 Will merge to 'next'.


* jk/submodule-config-sanitize-fix (2016-04-28) 5 commits
 - submodule: use prepare_submodule_repo_env consistently
 - submodule--helper: move config-sanitizing to submodule.c
 - submodule: export sanitized GIT_CONFIG_PARAMETERS
 - t5550: break submodule config test into multiple sub-tests
 - t5550: fix typo in $HTTPD_URL

 An earlier addition of "sanitize_submodule_env" with 14111fc4 (git:
 submodule honor -c credential.* from command line, 2016-02-29)
 turned out to be a convoluted no-op; implement what it wanted to do
 correctly.

 With a rethink of the merit of "sanitization" going on, we may end
 up doing the configuration propagation very differently, though.

 Will hold.


* mh/connect-leak (2016-04-28) 1 commit
 - git_connect(): fix memory leak with CONNECT_DIAG_URL

 Is already made obsolete with a patch in flight under discussion.
 ($gmane/292962)


* sb/misc-cleanups (2016-04-28) 2 commits
 - submodule-config: don't shadow `cache`
 - config.c: drop local variable

 Will merge to 'next'.

--------------------------------------------------
[Stalled]

* ar/diff-args-osx-precompose (2016-04-05) 1 commit
 - diff: run arguments through precompose_argv

 Many commands normalize command line arguments from NFD to NFC
 variant of UTF-8 on OSX, but commands in the "diff" family did
 not, causing "git diff $path" to complain that no such path is
 known to Git.  They have been taught to do the normalization.

 Will be rerolled?
 ($gmane/290724)


* nd/shallow-deepen (2016-04-13) 26 commits
 - fetch, upload-pack: --deepen=N extends shallow boundary by N commits
 - upload-pack: add get_reachable_list()
 - upload-pack: split check_unreachable() in two, prep for get_reachable_list()
 - t5500, t5539: tests for shallow depth excluding a ref
 - clone: define shallow clone boundary with --shallow-exclude
 - fetch: define shallow boundary with --shallow-exclude
 - upload-pack: support define shallow boundary by excluding revisions
 - refs: add expand_ref()
 - t5500, t5539: tests for shallow depth since a specific date
 - clone: define shallow clone boundary based on time with --shallow-since
 - fetch: define shallow boundary with --shallow-since
 - upload-pack: add deepen-since to cut shallow repos based on time
 - shallow.c: implement a generic shallow boundary finder based on rev-list
 - fetch-pack: use a separate flag for fetch in deepening mode
 - fetch-pack.c: mark strings for translating
 - fetch-pack: use a common function for verbose printing
 - fetch-pack: use skip_prefix() instead of starts_with()
 - upload-pack: move rev-list code out of check_non_tip()
 - upload-pack: tighten number parsing at "deepen" lines
 - upload-pack: use skip_prefix() instead of starts_with()
 - upload-pack: move "unshallow" sending code out of deepen()
 - upload-pack: remove unused variable "backup"
 - upload-pack: move "shallow" sending code out of deepen()
 - upload-pack: move shallow deepen code out of receive_needs()
 - transport-helper.c: refactor set_helper_option()
 - remote-curl.c: convert fetch_git() to use argv_array

 The existing "git fetch --depth=<n>" option was hard to use
 correctly when making the history of an existing shallow clone
 deeper.  A new option, "--deepen=<n>", has been added to make this
 easier to use.  "git clone" also learned "--shallow-since=<date>"
 and "--shallow-exclude=<tag>" options to make it easier to specify
 "I am interested only in the recent N months worth of history" and
 "Give me only the history since that version".

 Needs review.


* sg/completion-updates (2016-02-28) 21 commits
 - completion: cache the path to the repository
 - completion: extract repository discovery from __gitdir()
 - completion: don't guard git executions with __gitdir()
 - completion: consolidate silencing errors from git commands
 - completion: don't use __gitdir() for git commands
 - completion: respect 'git -C <path>'
 - completion: fix completion after 'git -C <path>'
 - completion: don't offer commands when 'git --opt' needs an argument
 - rev-parse: add '--absolute-git-dir' option
 - completion: list short refs from a remote given as a URL
 - completion: don't list 'HEAD' when trying refs completion outside of a repo
 - completion: list refs from remote when remote's name matches a directory
 - completion: respect 'git --git-dir=<path>' when listing remote refs
 - completion: fix most spots not respecting 'git --git-dir=<path>'
 - completion: ensure that the repository path given on the command line exists
 - completion tests: add tests for the __git_refs() helper function
 - completion tests: check __gitdir()'s output in the error cases
 - completion tests: consolidate getting path of current working directory
 - completion tests: make the $cur variable local to the test helper functions
 - completion tests: don't add test cruft to the test repository
 - completion: improve __git_refs()'s in-code documentation

 Will be rerolled.
 ($gmane/287839)


* az/p4-bare-no-rebase (2016-02-19) 1 commit
 - git-p4.py: Don't try to rebase on submit from bare repository

 "git p4 submit" attempts to do a rebase, which would fail if done
 in a bare repository.  Not doing this rebase would paper over the
 failure, which is what this patch does, but it is unclear what the
 side effect of not rebasing is.

 Needs a better explanation.


* ss/commit-dry-run-resolve-merge-to-no-op (2016-02-17) 1 commit
 - wt-status.c: set commitable bit if there is a meaningful merge.

 "git commit --dry-run" reported "No, no, you cannot commit." in one
 case where "git commit" would have allowed you to commit, and this
 improves it a little bit ("git commit --dry-run --short" still does
 not give you the correct answer, for example).


* nd/icase (2016-02-15) 12 commits
 - grep.c: reuse "icase" variable
 - diffcore-pickaxe: support case insensitive match on non-ascii
 - diffcore-pickaxe: "share" regex error handling code
 - grep/pcre: support utf-8
 - gettext: add is_utf8_locale()
 - grep/pcre: prepare locale-dependent tables for icase matching
 - grep/icase: avoid kwsset when -F is specified
 - grep/icase: avoid kwsset on literal non-ascii strings
 - test-regex: expose full regcomp() to the command line
 - test-regex: isolate the bug test code
 - grep: break down an "if" stmt in preparation for next changes
 - grep: allow -F -i combination

 "git grep -i" has been taught to fold case in non-ascii locales.

 Needs review.
 ($gmane/286137)


* ec/annotate-deleted (2015-11-20) 1 commit
 - annotate: skip checking working tree if a revision is provided

 Usability fix for annotate-specific "<file> <rev>" syntax with deleted
 files.

 Waiting for review.


* dg/subtree-rebase-test (2016-01-19) 1 commit
 - contrib/subtree: Add a test for subtree rebase that loses commits

 Reviewed up to v5.
 Will be rerolled.
 ($gmane/284426)


* js/am-3-merge-recursive-direct (2015-10-12) 2 commits
 - am: make a direct call to merge_recursive
 - merge_recursive_options: introduce the "gently" flag

 The merge_recursive_generic() function has been made a bit safer to
 call from inside a process.  "git am -3" was taught to make a direct
 call to the function when falling back to three-way merge.

 Being able to make a direct call would be good in general, but as a
 performance thing, the change needs to be backed up by numbers.

 I haven't gone through the "gently" change with fine toothed comb;
 I can see that the change avoids calling die(), but I haven't made
 sure that the program states (e.g. what's in the in-core index) are
 adjusted sensibly when it returns to the caller instead of dying,
 or the codepaths that used to die() are free of resource leaks.
 The original code certainly did not care the program states at the
 point of dying exactly because it knew it is going to exit, but now
 they have to care, and they need to be audited.

 Will be rerolled.
 ($gmane/292205)


* dk/gc-more-wo-pack (2016-01-13) 4 commits
 - gc: clean garbage .bitmap files from pack dir
 - t5304: ensure non-garbage files are not deleted
 - t5304: test .bitmap garbage files
 - prepare_packed_git(): find more garbage

 Follow-on to dk/gc-idx-wo-pack topic, to clean up stale
 .bitmap and .keep files.

 Waiting for a reroll.
 ($gmane/284368).


* jc/diff-b-m (2015-02-23) 5 commits
 . WIPWIP
 . WIP: diff-b-m
 - diffcore-rename: allow easier debugging
 - diffcore-rename.c: add locate_rename_src()
 - diffcore-break: allow debugging

 "git diff -B -M" produced incorrect patch when the postimage of a
 completely rewritten file is similar to the preimage of a removed
 file; such a resulting file must not be expressed as a rename from
 other place.

 The fix in this patch is broken, unfortunately.
 Will discard.

--------------------------------------------------
[Cooking]

* js/name-rev-use-oldest-ref (2016-04-22) 1 commit
  (merged to 'next' on 2016-04-27 at 8fdc0ac)
 + name-rev: include taggerdate in considering the best name

 "git describe --contains" often made a hard-to-justify choice of
 tag to give name to a given commit, because it tried to come up
 with a name with smallest number of hops from a tag, causing an old
 commit whose close descendant that is recently tagged were not
 described with respect to an old tag but with a newer tag.  It did
 not help that its computation of "hop" count was further tweaked to
 penalize being on a side branch of a merge.  The logic has been
 updated to favor using the tag with the oldest tagger date, which
 is a lot easier to explain to the end users: "We describe a commit
 in terms of the (chronologically) oldest tag that contains the
 commit."

 Will merge to 'master'.


* nd/remove-unused (2016-04-22) 2 commits
  (merged to 'next' on 2016-04-27 at 7917efa)
 + wrapper.c: delete dead function git_mkstemps()
 + dir.c: remove dead function fnmatch_icase()

 Code cleanup.

 Will merge to 'master'.


* rt/string-list-lookup-cleanup (2016-04-25) 1 commit
  (merged to 'next' on 2016-04-27 at 53514e1)
 + string_list: use string-list API in unsorted_string_list_lookup()

 Code cleanup.

 Will merge to 'master'.


* sg/test-lib-simplify-expr-away (2016-04-22) 1 commit
  (merged to 'next' on 2016-04-27 at 8f40952)
 + test-lib: simplify '--option=value' parsing

 Code cleanup.

 Will merge to 'master'.


* ew/fast-import-unpack-limit (2016-04-24) 1 commit
 - fast-import: implement unpack limit

 "git fast-import" learned the same performance trick to avoid
 creating too small a packfile as "git fetch" and "git push" have,
 using *.unpackLimit configuration.

 Need to pick up the rerolled version.
 ($gmane/292562)


* jd/send-email-to-whom (2016-04-25) 1 commit
  (merged to 'next' on 2016-04-27 at 47ae363)
 + send-email: fix grammo in the prompt that asks e-mail recipients

 A question by "git send-email" to ask the identity of the sender
 has been updated.

 Will merge to 'master'.


* ld/p4-test-py3 (2016-04-26) 3 commits
  (merged to 'next' on 2016-04-27 at d5d5fca)
 + git-p4 tests: time_in_seconds should use $PYTHON_PATH
 + git-p4 tests: work with python3 as well as python2
 + git-p4 tests: cd to / before running python

 The test scripts for "git p4" (but not "git p4" implementation
 itself) has been updated so that they would work even on a system
 where the installed version of Python is python 3.

 Will merge to 'master'.


* ls/p4-lfs-test-fix-2.7.0 (2016-04-29) 2 commits
  (merged to 'next' on 2016-04-29 at da56b67)
 + t9824: fix wrong reference value
  (merged to 'next' on 2016-04-27 at be87c63)
 + t9824: fix broken &&-chain in a subshell

 Fix a broken test.

 Will merge to 'master'.


* sb/clone-shallow-passthru (2016-04-26) 1 commit
  (merged to 'next' on 2016-04-27 at 3112b24)
 + clone: add `--shallow-submodules` flag

 "git clone" learned "--shallow-submodules" option.

 Will merge to 'master'.


* jd/p4-jobs-in-commit (2016-04-19) 2 commits
  (merged to 'next' on 2016-04-27 at 654d946)
 + git-p4: add P4 jobs to git commit message
 + git-p4: clean-up code style in tests

 "git p4" learned to record P4 jobs in Git commit that imports from
 the history in Perforce.

 Will merge to 'master'.


* ls/p4-lfs (2016-04-28) 3 commits
 - git-p4: fix Git LFS pointer parsing
 - travis-ci: express Linux/OS X dependency versions more clearly
 - travis-ci: update Git-LFS and P4 to the latest version

 Recent update to Git LFS broke "git p4" by changing the output from
 its "lfs pointer" subcommand.

 Will merge to 'next'.


* tb/convert-eol-autocrlf (2016-04-29) 10 commits
 - ce_compare_data() did not respect conversion
 - t6038; use crlf on all platforms
 - convert.c: more safer crlf handling with text attribute
 - convert: unify the "auto" handling of CRLF
 - convert.c: stream and early out
 - read-cache: factor out get_sha1_from_index() helper
 - convert.c: ident + core.autocrlf didn't work
 - t0027: test cases for combined attributes
 - convert: allow core.autocrlf=input and core.eol=crlf
 - t0027: make commit_chk_wrnNNO() reliable

 The combination of text=auto & eol=crlf (or eol=lf for that matter)
 is taught to be much more useful; it used to be "auto detection"
 was defeated as if setting eol declares that the file _is_ text,
 but now text=auto is still in effect for such a path and the code
 refrains from applying eol conversion if it found the path is not
 text.  Also setting core.autocrlf to 'input' and core.eol to 'crlf'
 used to be rejected, but because the code gives precedence to
 core.autocrlf, there is no need to, hence we no longer reject the
 combination.

 The last step seems to be identical to what I earlier did and
 discarded because the approach is fundamentally wrong, but I may be
 misreading the patch.


* bc/object-id (2016-04-25) 6 commits
  (merged to 'next' on 2016-04-29 at 02f13a4)
 + match-trees: convert several leaf functions to use struct object_id
 + tree-walk: convert tree_entry_extract() to use struct object_id
 + struct name_entry: use struct object_id instead of unsigned char sha1[20]
 + match-trees: convert shift_tree() and shift_tree_by() to use object_id
 + test-match-trees: convert to use struct object_id
 + sha1-name: introduce a get_oid() function

 Move from unsigned char[20] to struct object_id continues.

 Will merge to 'master'.


* ep/http-curl-trace (2016-04-20) 3 commits
 - git.txt: document the new GIT_TRACE_CURL environment variable
 - imap-send.c: introduce the GIT_TRACE_CURL enviroment variable
 - http.c: implement the GIT_TRACE_CURL environment variable

 HTTP transport gained an option to produce more detailed debugging
 trace.

 Still under discussion.
 ($gmane/292074)


* nd/worktree-various-heads (2016-04-22) 13 commits
 - branch: do not rename a branch under bisect or rebase
 - worktree.c: check whether branch is bisected in another worktree
 - wt-status.c: split bisect detection out of wt_status_get_state()
 - worktree.c: check whether branch is rebased in another worktree
 - worktree.c: avoid referencing to worktrees[i] multiple times
 - wt-status.c: make wt_status_check_rebase() work on any worktree
 - wt-status.c: split rebase detection out of wt_status_get_state()
 - path.c: refactor and add worktree_git_path()
 - worktree.c: mark current worktree
 - worktree.c: make find_shared_symref() return struct worktree *
 - worktree.c: store "id" instead of "git_dir"
 - path.c: add git_common_path() and strbuf_git_common_path()
 - dir.c: rename str(n)cmp_icase to fspath(n)cmp

 The experimental "multiple worktree" feature gains more safety to
 forbid operations on a branch that is checked out or being actively
 worked on elsewhere, by noticing that e.g. it is being rebased.

 Being reviewed.
 ($gmane/292189)


* bw/rebase-merge-entire-branch (2016-04-24) 1 commit
  (merged to 'next' on 2016-04-29 at 7a9487f)
 + git-rebase--merge: don't include absent parent as a base

 "git rebase -m" could be asked to rebase an entire branch starting
 from the root, but failed by assuming that there always is a parent
 commit to the first commit on the branch.

 Will merge to 'master'.


* pb/commit-verbose-config (2016-04-19) 6 commits
 - commit: add a commit.verbose config variable
 - t7507-commit-verbose: improve test coverage by testing number of diffs
 - parse-options.c: make OPTION_COUNTUP respect "unspecified" values
 - t0040-parse-options: improve test coverage
 - test-parse-options: print quiet as integer
 - t0040-test-parse-options.sh: fix style issues

 "git commit" learned to pay attention to "commit.verbose"
 configuration variable and act as if "--verbose" option was
 given from the command line.

 Need a reroll but it will be some time before that happens.
 ($gmane/292160).


* en/merge-fixes (2016-04-12) 2 commits
  (merged to 'next' on 2016-04-27 at 14d7d10)
 + merge-recursive: do not check working copy when creating a virtual merge base
 + merge-recursive: remove duplicate code

 "merge-recursive" strategy incorrectly checked if a path that is
 involved in its internal merge exists in the working tree.

 Will merge to 'master'.


* jc/fsck-nul-in-commit (2016-04-14) 2 commits
 - fsck: detect and warn a commit with embedded NUL
 - fsck_commit_buffer(): do not special case the last validation

 "git fsck" learned to catch NUL byte in a commit object as
 potential error and warn.


* jc/ll-merge-internal (2016-04-27) 3 commits
 - t6036: remove pointless test that expects failure
 - ll-merge: use a longer conflict marker for internal merge
 - ll-merge: fix typo in comment

 RFC.


* jk/diff-compact-heuristic (2016-04-19) 2 commits
  (merged to 'next' on 2016-04-22 at 0c117ea)
 + xdiff: implement empty line chunk heuristic
 + xdiff: add recs_match helper function

 Patch output from "git diff" and friends has been tweaked to be
 more readable by using a blank line as a strong hint that the
 contents before and after it belong to a logically separate unit.

 Will merge to 'master' after removing the experimentation knob.


* sb/submodule-init (2016-04-29) 6 commits
  (merged to 'next' on 2016-04-29 at 3e81ee88)
 + submodule--helper update-clone: abort gracefully on missing .gitmodules
 + submodule init: fail gracefully with a missing .gitmodules file
  (merged to 'next' on 2016-04-27 at afaad81)
 + submodule: port init from shell to C
 + submodule: port resolve_relative_url from shell to C
 + Merge branch 'sb/submodule-path-misc-bugs' into sb/submodule-init
 + Merge branch 'sb/submodule-helper-clone-regression-fix' into sb/submodule-init

 Update of "git submodule" to move pieces of logic to C continues.

 Will cook for a bit more in 'next'.


* jc/send-email-skip-backup (2016-04-12) 1 commit
 - send-email: detect and offer to skip backup files

 A careless invocation of "git send-email directory/" after editing
 0001-change.patch with an editor often ends up sending both
 0001-change.patch and its backup file, 0001-change.patch~, causing
 embarrassment and a minor confusion.  Detect such an input and
 offer to skip the backup files when sending the patches out.

 Needs review.


* nf/mergetool-prompt (2016-04-25) 1 commit
  (merged to 'next' on 2016-04-27 at 1c992df)
 + difftool/mergetool: make the form of yes/no questions consistent

 UI consistency improvements.

 Will merge to 'master'.


* va/i18n-misc-updates (2016-04-19) 9 commits
 - i18n: builtin/pull.c: split strings marked for translation
 - i18n: builtin/pull.c: mark placeholders for translation
 - i18n: git-parse-remote.sh: mark strings for translation
 - i18n: branch: move comment for translators
 - i18n: branch: unmark string for translation
 - i18n: builtin/rm.c: remove a comma ',' from string
 - i18n: unpack-trees: mark strings for translation
 - i18n: builtin/branch.c: mark option for translation
 - i18n: index-pack: use plural string instead of normal one

 Mark several messages for translation.

 Comments?  They looked all sensible to me.


* jc/drop-git-spec-in (2016-04-27) 2 commits
  (merged to 'next' on 2016-04-27 at 2b85030)
 + Makefile: remove dependency on git.spec
  (merged to 'next' on 2016-04-22 at 531583f)
 + Makefile: stop pretending to support rpmbuild

 As nobody maintains our in-tree git.spec.in and distros use their
 own spec file, we stopped pretending that we support "make rpm".

 Will merge to 'master'.


* kn/ref-filter-branch-list (2016-04-25) 17 commits
 - branch: implement '--format' option
 - branch: use ref-filter printing APIs
 - branch, tag: use porcelain output
 - ref-filter: allow porcelain to translate messages in the output
 - ref-filter: add `:dir` and `:base` options for ref printing atoms
 - ref-filter: make remote_ref_atom_parser() use refname_atom_parser_internal()
 - ref-filter: introduce symref_atom_parser() and refname_atom_parser()
 - ref-filter: introduce refname_atom_parser_internal()
 - ref-filter: make "%(symref)" atom work with the ':short' modifier
 - ref-filter: add support for %(upstream:track,nobracket)
 - ref-filter: make %(upstream:track) prints "[gone]" for invalid upstreams
 - ref-filter: introduce format_ref_array_item()
 - ref-filter: move get_head_description() from branch.c
 - ref-filter: modify "%(objectname:short)" to take length
 - ref-filter: implement %(if:equals=<string>) and %(if:notequals=<string>)
 - ref-filter: include reference to 'used_atom' within 'atom_value'
 - ref-filter: implement %(if), %(then), and %(else) atoms

 The code to list branches in "git branch" has been consolidated
 with the more generic ref-filter API.

 Needs review.


* xy/format-patch-base (2016-04-26) 4 commits
 - format-patch: introduce format.useAutoBase configuration
 - format-patch: introduce --base=auto option
 - format-patch: add '--base' option to record base tree info
 - patch-ids: make commit_patch_id() a public helper function

 "git format-patch" learned a new "--base" option to record what
 (public, well-known) commit the original series was built on in
 its output.

 Looking close to be ready.
 ($gmane/292622).


* dt/index-helper (2016-04-28) 19 commits
 . untracked-cache: config option
 . Add tracing to measure where most of the time is spent
 . index-helper: optionally automatically run
 . index-helper: autorun mode
 . index-helper: don't run if already running
 . index-helper: kill mode
 . watchman: add a config option to enable the extension
 . unpack-trees: preserve index extensions
 . update-index: enable/disable watchman support
 . index-helper: use watchman to avoid refreshing index with lstat()
 . Add watchman support to reduce index refresh cost
 . read-cache: add watchman 'WAMA' extension
 . index-helper: add --detach
 . daemonize(): set a flag before exiting the main process
 . index-helper: log warnings
 . index-helper: add --strict
 . index-helper: new daemon for caching index and related stuff
 . read-cache: allow to keep mmap'd memory after reading
 . read-cache.c: fix constness of verify_hdr()

 Needs review.
 t7900#5 seems to fail for me.


* jc/bundle (2016-03-03) 6 commits
 - index-pack: --clone-bundle option
 - Merge branch 'jc/index-pack' into jc/bundle
 - bundle v3: the beginning
 - bundle: keep a copy of bundle file name in the in-core bundle header
 - bundle: plug resource leak
 - bundle doc: 'verify' is not about verifying the bundle

 The beginning of "split bundle", which could be one of the
 ingredients to allow "git clone" traffic off of the core server
 network to CDN.


* jc/merge-drop-old-syntax (2015-04-29) 1 commit
 - merge: drop 'git merge <message> HEAD <commit>' syntax

 Stop supporting "git merge <message> HEAD <commit>" syntax that has
 been deprecated since October 2007, and issues a deprecation
 warning message since v2.5.0.

 It has been reported that git-gui still uses the deprecated syntax,
 which needs to be fixed before this final step can proceed.
 ($gmane/282594)

^ permalink raw reply	[relevance 2%]

* What's cooking in git.git (May 2016, #01; Tue, 3)
@ 2016-05-03 22:49  3% Junio C Hamano
  0 siblings, 0 replies; 200+ results
From: Junio C Hamano @ 2016-05-03 22:49 UTC (permalink / raw)
  To: git

Here are the topics that have been cooking.  Commits prefixed with
'-' are only in 'pu' (proposed updates) while commits prefixed with
'+' are in 'next'.  The ones marked with '.' do not appear in any of
the integration branches, but I am still holding onto them.

The 'master' branch now has the ninth batch of topics of this cycle.
On the 'maint' front, 2.8.2 is out and fixes that have been in
'master' accumulates on it for 2.8.3.

Ones with questionable status has a '?' character in their comments.

You can find the changes described here in the integration branches
of the repositories listed at

    http://git-blame.blogspot.com/p/git-public-repositories.html

--------------------------------------------------
[Graduated to "master"]

* en/merge-fixes (2016-04-12) 2 commits
  (merged to 'next' on 2016-04-27 at 14d7d10)
 + merge-recursive: do not check working copy when creating a virtual merge base
 + merge-recursive: remove duplicate code

 "merge-recursive" strategy incorrectly checked if a path that is
 involved in its internal merge exists in the working tree.


* jd/p4-jobs-in-commit (2016-04-19) 2 commits
  (merged to 'next' on 2016-04-27 at 654d946)
 + git-p4: add P4 jobs to git commit message
 + git-p4: clean-up code style in tests

 "git p4" learned to record P4 jobs in Git commit that imports from
 the history in Perforce.


* jd/send-email-to-whom (2016-04-25) 1 commit
  (merged to 'next' on 2016-04-27 at 47ae363)
 + send-email: fix grammo in the prompt that asks e-mail recipients

 A question by "git send-email" to ask the identity of the sender
 has been updated.


* jk/fix-attribute-macro-in-2.5 (2016-04-25) 1 commit
  (merged to 'next' on 2016-04-27 at 2e42613)
 + remote.c: spell __attribute__ correctly

 Code fixup.


* js/name-rev-use-oldest-ref (2016-04-22) 1 commit
  (merged to 'next' on 2016-04-27 at 8fdc0ac)
 + name-rev: include taggerdate in considering the best name

 "git describe --contains" often made a hard-to-justify choice of
 tag to give name to a given commit, because it tried to come up
 with a name with smallest number of hops from a tag, causing an old
 commit whose close descendant that is recently tagged were not
 described with respect to an old tag but with a newer tag.  It did
 not help that its computation of "hop" count was further tweaked to
 penalize being on a side branch of a merge.  The logic has been
 updated to favor using the tag with the oldest tagger date, which
 is a lot easier to explain to the end users: "We describe a commit
 in terms of the (chronologically) oldest tag that contains the
 commit."


* nd/remove-unused (2016-04-22) 2 commits
  (merged to 'next' on 2016-04-27 at 7917efa)
 + wrapper.c: delete dead function git_mkstemps()
 + dir.c: remove dead function fnmatch_icase()

 Code cleanup.


* nf/mergetool-prompt (2016-04-25) 1 commit
  (merged to 'next' on 2016-04-27 at 1c992df)
 + difftool/mergetool: make the form of yes/no questions consistent

 UI consistency improvements.


* rt/string-list-lookup-cleanup (2016-04-25) 1 commit
  (merged to 'next' on 2016-04-27 at 53514e1)
 + string_list: use string-list API in unsorted_string_list_lookup()

 Code cleanup.


* sg/test-lib-simplify-expr-away (2016-04-22) 1 commit
  (merged to 'next' on 2016-04-27 at 8f40952)
 + test-lib: simplify '--option=value' parsing

 Code cleanup.

--------------------------------------------------
[New Topics]

* ew/normal-to-e (2016-05-02) 1 commit
 - .mailmap: update to my shorter email address

 Will merge to 'next'.


* jc/diff-compact-always-use-blank-heuristics (2016-04-29) 3 commits
 - diff: enable "compaction heuristics" and lose experimentation knob
  (merged to 'next' on 2016-04-22 at 0c117ea)
 + xdiff: implement empty line chunk heuristic
 + xdiff: add recs_match helper function
 (this branch is tangled with jk/diff-compact-heuristic.)

 This should be discarded.


* js/close-packs-before-gc (2016-05-02) 1 commit
 - t5510: run auto-gc in the foreground

 Will merge to 'next'.


* ls/travis-submitting-patches (2016-05-02) 1 commit
 - Documentation: add setup instructions for Travis CI

 Will merge to 'next'.


* rn/glossary-typofix (2016-05-02) 1 commit
 - Documentation: fix typo 'In such these cases'

 Will merge to 'next'.


* jc/commit-tree-ignore-commit-gpgsign (2016-05-03) 1 commit
 - commit-tree: do not pay attention to commit.gpgsign

 "git commit-tree" plumbing command required the user to always sign
 its result when the user sets the commit.gpgsign configuration
 variable, which was an ancient mistake.  Rework "git rebase" that
 relied on this mistake so that it reads commit.gpgsign and pass (or
 not pass) the -S option to "git commit-tree" to keep the end-user
 expectation the same, while teaching "git commit-tree" to ignore
 the configuration variable.  This will stop requiring the users to
 sign commit objects used internally as an implementation detail of
 "git stash".

 Will merge to 'next'.


* jk/push-client-deadlock-fix (2016-05-02) 1 commit
 - Windows: add pthread_sigmask() that does nothing

 Will merge to 'next'.


* sb/clean-test-fix (2016-05-03) 1 commit
 - t7300: mark test with SANITY

 Will merge to 'next'.


* sb/submodule-module-list-pathspec-fix (2016-05-03) 1 commit
 - submodule deinit test: fix broken && chain in subshell

 Will merge to 'next'.


* sk/gitweb-highlight-encoding (2016-05-03) 1 commit
 - gitweb: apply fallback encoding before highlight

 Some multi-byte encoding can have a backslash byte as a later part
 of one letter, which would confuse "highlight" filter used in
 gitweb.

 Will merge to 'next'.

--------------------------------------------------
[Stalled]

* ar/diff-args-osx-precompose (2016-04-05) 1 commit
 - diff: run arguments through precompose_argv

 Many commands normalize command line arguments from NFD to NFC
 variant of UTF-8 on OSX, but commands in the "diff" family did
 not, causing "git diff $path" to complain that no such path is
 known to Git.  They have been taught to do the normalization.

 Will this be rerolled?
 ($gmane/290724)


* nd/shallow-deepen (2016-04-13) 26 commits
 - fetch, upload-pack: --deepen=N extends shallow boundary by N commits
 - upload-pack: add get_reachable_list()
 - upload-pack: split check_unreachable() in two, prep for get_reachable_list()
 - t5500, t5539: tests for shallow depth excluding a ref
 - clone: define shallow clone boundary with --shallow-exclude
 - fetch: define shallow boundary with --shallow-exclude
 - upload-pack: support define shallow boundary by excluding revisions
 - refs: add expand_ref()
 - t5500, t5539: tests for shallow depth since a specific date
 - clone: define shallow clone boundary based on time with --shallow-since
 - fetch: define shallow boundary with --shallow-since
 - upload-pack: add deepen-since to cut shallow repos based on time
 - shallow.c: implement a generic shallow boundary finder based on rev-list
 - fetch-pack: use a separate flag for fetch in deepening mode
 - fetch-pack.c: mark strings for translating
 - fetch-pack: use a common function for verbose printing
 - fetch-pack: use skip_prefix() instead of starts_with()
 - upload-pack: move rev-list code out of check_non_tip()
 - upload-pack: tighten number parsing at "deepen" lines
 - upload-pack: use skip_prefix() instead of starts_with()
 - upload-pack: move "unshallow" sending code out of deepen()
 - upload-pack: remove unused variable "backup"
 - upload-pack: move "shallow" sending code out of deepen()
 - upload-pack: move shallow deepen code out of receive_needs()
 - transport-helper.c: refactor set_helper_option()
 - remote-curl.c: convert fetch_git() to use argv_array

 The existing "git fetch --depth=<n>" option was hard to use
 correctly when making the history of an existing shallow clone
 deeper.  A new option, "--deepen=<n>", has been added to make this
 easier to use.  "git clone" also learned "--shallow-since=<date>"
 and "--shallow-exclude=<tag>" options to make it easier to specify
 "I am interested only in the recent N months worth of history" and
 "Give me only the history since that version".

 Needs review.


* sg/completion-updates (2016-02-28) 21 commits
 - completion: cache the path to the repository
 - completion: extract repository discovery from __gitdir()
 - completion: don't guard git executions with __gitdir()
 - completion: consolidate silencing errors from git commands
 - completion: don't use __gitdir() for git commands
 - completion: respect 'git -C <path>'
 - completion: fix completion after 'git -C <path>'
 - completion: don't offer commands when 'git --opt' needs an argument
 - rev-parse: add '--absolute-git-dir' option
 - completion: list short refs from a remote given as a URL
 - completion: don't list 'HEAD' when trying refs completion outside of a repo
 - completion: list refs from remote when remote's name matches a directory
 - completion: respect 'git --git-dir=<path>' when listing remote refs
 - completion: fix most spots not respecting 'git --git-dir=<path>'
 - completion: ensure that the repository path given on the command line exists
 - completion tests: add tests for the __git_refs() helper function
 - completion tests: check __gitdir()'s output in the error cases
 - completion tests: consolidate getting path of current working directory
 - completion tests: make the $cur variable local to the test helper functions
 - completion tests: don't add test cruft to the test repository
 - completion: improve __git_refs()'s in-code documentation

 Will be rerolled.
 ($gmane/287839)


* az/p4-bare-no-rebase (2016-02-19) 1 commit
 - git-p4.py: Don't try to rebase on submit from bare repository

 "git p4 submit" attempts to do a rebase, which would fail if done
 in a bare repository.  Not doing this rebase would paper over the
 failure, which is what this patch does, but it is unclear what the
 side effect of not rebasing is.

 Needs a better explanation.


* ss/commit-dry-run-resolve-merge-to-no-op (2016-02-17) 1 commit
 - wt-status.c: set commitable bit if there is a meaningful merge.

 "git commit --dry-run" reported "No, no, you cannot commit." in one
 case where "git commit" would have allowed you to commit, and this
 improves it a little bit ("git commit --dry-run --short" still does
 not give you the correct answer, for example).


* nd/icase (2016-02-15) 12 commits
 - grep.c: reuse "icase" variable
 - diffcore-pickaxe: support case insensitive match on non-ascii
 - diffcore-pickaxe: "share" regex error handling code
 - grep/pcre: support utf-8
 - gettext: add is_utf8_locale()
 - grep/pcre: prepare locale-dependent tables for icase matching
 - grep/icase: avoid kwsset when -F is specified
 - grep/icase: avoid kwsset on literal non-ascii strings
 - test-regex: expose full regcomp() to the command line
 - test-regex: isolate the bug test code
 - grep: break down an "if" stmt in preparation for next changes
 - grep: allow -F -i combination

 "git grep -i" has been taught to fold case in non-ascii locales.

 Needs review.
 ($gmane/286137)


* ec/annotate-deleted (2015-11-20) 1 commit
 - annotate: skip checking working tree if a revision is provided

 Usability fix for annotate-specific "<file> <rev>" syntax with deleted
 files.

 Waiting for review.


* dg/subtree-rebase-test (2016-01-19) 1 commit
 - contrib/subtree: Add a test for subtree rebase that loses commits

 Reviewed up to v5.
 Will be rerolled.
 ($gmane/284426)


* js/am-3-merge-recursive-direct (2015-10-12) 2 commits
 - am: make a direct call to merge_recursive
 - merge_recursive_options: introduce the "gently" flag

 The merge_recursive_generic() function has been made a bit safer to
 call from inside a process.  "git am -3" was taught to make a direct
 call to the function when falling back to three-way merge.

 Being able to make a direct call would be good in general, but as a
 performance thing, the change needs to be backed up by numbers.

 I haven't gone through the "gently" change with fine toothed comb;
 I can see that the change avoids calling die(), but I haven't made
 sure that the program states (e.g. what's in the in-core index) are
 adjusted sensibly when it returns to the caller instead of dying,
 or the codepaths that used to die() are free of resource leaks.
 The original code certainly did not care the program states at the
 point of dying exactly because it knew it is going to exit, but now
 they have to care, and they need to be audited.

 Will be rerolled.
 ($gmane/292205)


* dk/gc-more-wo-pack (2016-01-13) 4 commits
 - gc: clean garbage .bitmap files from pack dir
 - t5304: ensure non-garbage files are not deleted
 - t5304: test .bitmap garbage files
 - prepare_packed_git(): find more garbage

 Follow-on to dk/gc-idx-wo-pack topic, to clean up stale
 .bitmap and .keep files.

 Waiting for a reroll.
 ($gmane/284368).


* jc/diff-b-m (2015-02-23) 5 commits
 . WIPWIP
 . WIP: diff-b-m
 - diffcore-rename: allow easier debugging
 - diffcore-rename.c: add locate_rename_src()
 - diffcore-break: allow debugging

 "git diff -B -M" produced incorrect patch when the postimage of a
 completely rewritten file is similar to the preimage of a removed
 file; such a resulting file must not be expressed as a rename from
 other place.

 The fix in this patch is broken, unfortunately.
 Will discard.

--------------------------------------------------
[Cooking]

* ab/hooks (2016-04-26) 4 commits
 - hooks: allow customizing where the hook directory is
 - githooks.txt: minor improvements to the grammar & phrasing
 - githooks.txt: amend dangerous advice about 'update' hook ACL
 - githooks.txt: improve the intro section

 A new configuration variable core.hooksPath allows customizing
 where the hook directory is.

 Almost there.
 ($gmane/292635)


* jc/merge-impossible-no-commit (2016-04-26) 2 commits
 - merge: warn --no-commit merge when no new commit is created
 - merge: do not contaminate option_commit with --squash

 "git merge --no-commit" silently succeeded when there is no need to
 create any commit, either when you are more recent than the commit
 you tried to merge, or you can fast-forward to the commit you tried
 to merge.  The command gives a warning message in such cases.

 Just tying loose ends in a discussion.  Unless somebody else
 champions this topic, I'll drop it.


* js/http-custom-headers (2016-04-27) 1 commit
  (merged to 'next' on 2016-04-27 at 0c97a50)
 + http: support sending custom HTTP headers

 HTTP transport clients learned to throw extra HTTP headers at the
 server, specified via http.extraHeader configuration variable.

 Will merge to 'master'.


* sb/bisect (2016-04-15) 22 commits
 - SQUASH???
 - bisect: get back halfway shortcut
 - bisect: compute best bisection in compute_relevant_weights()
 - bisect: use a bottom-up traversal to find relevant weights
 - bisect: prepare for different algorithms based on find_all
 - bisect: rename count_distance() to compute_weight()
 - bisect: make total number of commits global
 - bisect: introduce distance_direction()
 - bisect: extract get_distance() function from code duplication
 - bisect: use commit instead of commit list as arguments when appropriate
 - bisect: replace clear_distance() by unique markers
 - bisect: use struct node_data array instead of int array
 - bisect: get rid of recursion in count_distance()
 - bisect: make algorithm behavior independent of DEBUG_BISECT
 - bisect: make bisect compile if DEBUG_BISECT is set
 - bisect: plug the biggest memory leak
 - bisect: add test for the bisect algorithm
 - t6030: generalize test to not rely on current implementation
 - t: use test_cmp_rev() where appropriate
 - t/test-lib-functions.sh: generalize test_cmp_rev
 - bisect: allow 'bisect run' if no good commit is known
 - bisect: write about `bisect next` in documentation

 The internal algorithm used in "git bisect" to find the next commit
 to check has been optimized greatly.

 Expecting a reroll.
 ($gmane/291163)


* sb/config-exit-status-list (2016-04-26) 1 commit
  (merged to 'next' on 2016-04-27 at 44fe343)
 + config doc: improve exit code listing

 Doc update.

 Will merge to 'master'.


* mh/split-under-lock (2016-04-27) 29 commits
 - lock_ref_sha1_basic(): only handle REF_NODEREF mode
 - commit_ref_update(): remove the flags parameter
 - lock_ref_for_update(): don't resolve symrefs
 - lock_ref_for_update(): don't re-read non-symbolic references
 - refs: resolve symbolic refs first
 - ref_transaction_update(): check refname_is_safe() at a minimum
 - unlock_ref(): move definition higher in the file
 - lock_ref_for_update(): new function
 - add_update(): initialize the whole ref_update
 - verify_refname_available(): adjust constness in declaration
 - refs: don't dereference on rename
 - refs: allow log-only updates
 - delete_branches(): use resolve_refdup()
 - ref_transaction_commit(): correctly report close_ref() failure
 - ref_transaction_create(): disallow recursive pruning
 - refs: make error messages more consistent
 - lock_ref_sha1_basic(): remove unneeded local variable
 - read_raw_ref(): improve docstring
 - read_raw_ref(): rename symref argument to referent
 - read_raw_ref(): clear *type at start of function
 - read_raw_ref(): rename flags argument to type
 - ref_transaction_commit(): remove local variable n
 - rename_ref(): remove unneeded local variable
 - commit_ref_update(): write error message to *err, not stderr
 - refname_is_safe(): insist that the refname already be normalized
 - refname_is_safe(): don't allow the empty string
 - refname_is_safe(): use skip_prefix()
 - remove_dir_recursively(): add docstring
 - safe_create_leading_directories(): improve docstring

 Further preparatory work on the refs API before the pluggable
 backend series can land.

 Almost there.
 ($gmane/292772)


* bn/http-cookiefile-config (2016-04-29) 2 commits
 - http: expand http.cookieFile as a path
 - Documentation: config: improve word ordering for http.cookieFile
 (this branch uses jc/config-pathname-type.)

 "http.cookieFile" configuration variable clearly wants a pathname,
 but we forgot to treat it as such by e.g. applying tilde expansion.

 Waiting for an Ack to what's queued with tweaks, or a reroll.
 ($gmane/292969)


* ew/doc-split-pack-disables-bitmap (2016-04-28) 1 commit
 - pack-objects: warn on split packs disabling bitmaps

 Doc update.

 Will merge to 'next'.


* jc/config-pathname-type (2016-04-29) 1 commit
 - config: describe 'pathname' value type
 (this branch is used by bn/http-cookiefile-config.)

 Consolidate description of tilde-expansion that is done to
 configuration variables that take pathname to a single place.

 Will merge to 'next'.


* jk/submodule-config-sanitize-fix (2016-04-28) 5 commits
 - submodule: use prepare_submodule_repo_env consistently
 - submodule--helper: move config-sanitizing to submodule.c
 - submodule: export sanitized GIT_CONFIG_PARAMETERS
 - t5550: break submodule config test into multiple sub-tests
 - t5550: fix typo in $HTTPD_URL

 An earlier addition of "sanitize_submodule_env" with 14111fc4 (git:
 submodule honor -c credential.* from command line, 2016-02-29)
 turned out to be a convoluted no-op; implement what it wanted to do
 correctly.

 With a rethink of the merit of "sanitization" going on, we may end
 up doing the configuration propagation very differently, though.

 Will hold.


* mh/connect-leak (2016-04-28) 1 commit
 - git_connect(): fix memory leak with CONNECT_DIAG_URL

 Is already made obsolete with a patch in flight under discussion.
 ($gmane/292962)

 Will discard.


* sb/misc-cleanups (2016-04-28) 2 commits
 - submodule-config: don't shadow `cache`
 - config.c: drop local variable

 Will merge to 'next'.


* ew/fast-import-unpack-limit (2016-04-24) 1 commit
 - fast-import: implement unpack limit

 "git fast-import" learned the same performance trick to avoid
 creating too small a packfile as "git fetch" and "git push" have,
 using *.unpackLimit configuration.

 Need to pick up the rerolled version.
 ($gmane/292562)


* ld/p4-test-py3 (2016-04-26) 3 commits
  (merged to 'next' on 2016-04-27 at d5d5fca)
 + git-p4 tests: time_in_seconds should use $PYTHON_PATH
 + git-p4 tests: work with python3 as well as python2
 + git-p4 tests: cd to / before running python

 The test scripts for "git p4" (but not "git p4" implementation
 itself) has been updated so that they would work even on a system
 where the installed version of Python is python 3.

 Will merge to 'master'.


* ls/p4-lfs-test-fix-2.7.0 (2016-04-29) 2 commits
  (merged to 'next' on 2016-04-29 at da56b67)
 + t9824: fix wrong reference value
  (merged to 'next' on 2016-04-27 at be87c63)
 + t9824: fix broken &&-chain in a subshell

 Fix a broken test.

 Will merge to 'master'.


* sb/clone-shallow-passthru (2016-04-26) 1 commit
  (merged to 'next' on 2016-04-27 at 3112b24)
 + clone: add `--shallow-submodules` flag

 "git clone" learned "--shallow-submodules" option.

 Will merge to 'master'.


* ls/p4-lfs (2016-04-28) 3 commits
 - git-p4: fix Git LFS pointer parsing
 - travis-ci: express Linux/OS X dependency versions more clearly
 - travis-ci: update Git-LFS and P4 to the latest version

 Recent update to Git LFS broke "git p4" by changing the output from
 its "lfs pointer" subcommand.

 Will merge to 'next'.


* tb/convert-eol-autocrlf (2016-04-29) 10 commits
 - ce_compare_data() did not respect conversion
 - t6038; use crlf on all platforms
 - convert.c: more safer crlf handling with text attribute
 - convert: unify the "auto" handling of CRLF
 - convert.c: stream and early out
 - read-cache: factor out get_sha1_from_index() helper
 - convert.c: ident + core.autocrlf didn't work
 - t0027: test cases for combined attributes
 - convert: allow core.autocrlf=input and core.eol=crlf
 - t0027: make commit_chk_wrnNNO() reliable

 The combination of text=auto & eol=crlf (or eol=lf for that matter)
 is taught to be much more useful; it used to be "auto detection"
 was defeated as if setting eol declares that the file _is_ text,
 but now text=auto is still in effect for such a path and the code
 refrains from applying eol conversion if it found the path is not
 text.  Also setting core.autocrlf to 'input' and core.eol to 'crlf'
 used to be rejected, but because the code gives precedence to
 core.autocrlf, there is no need to, hence we no longer reject the
 combination.

 Earlier steps looked alright, but it veers into a wrong direction
 in the middle.


* bc/object-id (2016-04-25) 6 commits
  (merged to 'next' on 2016-04-29 at 02f13a4)
 + match-trees: convert several leaf functions to use struct object_id
 + tree-walk: convert tree_entry_extract() to use struct object_id
 + struct name_entry: use struct object_id instead of unsigned char sha1[20]
 + match-trees: convert shift_tree() and shift_tree_by() to use object_id
 + test-match-trees: convert to use struct object_id
 + sha1-name: introduce a get_oid() function

 Move from unsigned char[20] to struct object_id continues.

 Will merge to 'master'.


* ep/http-curl-trace (2016-05-02) 2 commits
 . imap-send.c: introduce the GIT_TRACE_CURL environment variable
 . http.c: implement the GIT_TRACE_CURL environment variable

 HTTP transport gained an option to produce more detailed debugging
 trace.

 Still under discussion.
 ($gmane/292074, 293236)


* nd/worktree-various-heads (2016-04-22) 13 commits
 - branch: do not rename a branch under bisect or rebase
 - worktree.c: check whether branch is bisected in another worktree
 - wt-status.c: split bisect detection out of wt_status_get_state()
 - worktree.c: check whether branch is rebased in another worktree
 - worktree.c: avoid referencing to worktrees[i] multiple times
 - wt-status.c: make wt_status_check_rebase() work on any worktree
 - wt-status.c: split rebase detection out of wt_status_get_state()
 - path.c: refactor and add worktree_git_path()
 - worktree.c: mark current worktree
 - worktree.c: make find_shared_symref() return struct worktree *
 - worktree.c: store "id" instead of "git_dir"
 - path.c: add git_common_path() and strbuf_git_common_path()
 - dir.c: rename str(n)cmp_icase to fspath(n)cmp

 The experimental "multiple worktree" feature gains more safety to
 forbid operations on a branch that is checked out or being actively
 worked on elsewhere, by noticing that e.g. it is being rebased.

 Being reviewed.
 ($gmane/292189)


* bw/rebase-merge-entire-branch (2016-04-24) 1 commit
  (merged to 'next' on 2016-04-29 at 7a9487f)
 + git-rebase--merge: don't include absent parent as a base

 "git rebase -m" could be asked to rebase an entire branch starting
 from the root, but failed by assuming that there always is a parent
 commit to the first commit on the branch.

 Will merge to 'master'.


* pb/commit-verbose-config (2016-05-02) 7 commits
 - t/t7507: tests for broken behavior of status
 - commit: add a commit.verbose config variable
 - t7507-commit-verbose: improve test coverage by testing number of diffs
 - parse-options.c: make OPTION_COUNTUP respect "unspecified" values
 - t0040-parse-options: improve test coverage
 - test-parse-options: print quiet as integer
 - t0040-test-parse-options.sh: fix style issues

 "git commit" learned to pay attention to "commit.verbose"
 configuration variable and act as if "--verbose" option was
 given from the command line.

 Almost there.
 ($gmane/293410).


* jc/fsck-nul-in-commit (2016-04-14) 2 commits
 - fsck: detect and warn a commit with embedded NUL
 - fsck_commit_buffer(): do not special case the last validation

 "git fsck" learned to catch NUL byte in a commit object as
 potential error and warn.

 What was the status of this one?  Ready to proceed?


* jc/ll-merge-internal (2016-04-27) 3 commits
 - t6036: remove pointless test that expects failure
 - ll-merge: use a longer conflict marker for internal merge
 - ll-merge: fix typo in comment

 "git rerere" can get confused by conflict markers deliberately left
 by the inner merge step, because they are indistinguishable from
 the real conflict markers left by the outermost merge which are
 what the end user and "rerere" need to look at.  This was fixed by
 making the conflict markers left by the inner merges a bit longer.

 Will rebase to remove the comment after three-dash line and then merge.


* jk/diff-compact-heuristic (2016-05-02) 3 commits
  (merged to 'next' on 2016-05-02 at 2a74763)
 + diff: undocument the compaction heuristic knobs for experimentation
  (merged to 'next' on 2016-04-22 at 0c117ea)
 + xdiff: implement empty line chunk heuristic
 + xdiff: add recs_match helper function
 (this branch is tangled with jc/diff-compact-always-use-blank-heuristics.)

 Patch output from "git diff" and friends has been tweaked to be
 more readable by using a blank line as a strong hint that the
 contents before and after it belong to a logically separate unit.

 Will merge to 'master'.


* sb/submodule-init (2016-05-03) 7 commits
  (merged to 'next' on 2016-05-03 at 8a5fce4)
 + submodule init: redirect stdout to stderr
  (merged to 'next' on 2016-04-29 at 3e81ee88)
 + submodule--helper update-clone: abort gracefully on missing .gitmodules
 + submodule init: fail gracefully with a missing .gitmodules file
  (merged to 'next' on 2016-04-27 at afaad81)
 + submodule: port init from shell to C
 + submodule: port resolve_relative_url from shell to C
 + Merge branch 'sb/submodule-path-misc-bugs' into sb/submodule-init
 + Merge branch 'sb/submodule-helper-clone-regression-fix' into sb/submodule-init

 Update of "git submodule" to move pieces of logic to C continues.

 Will cook for a bit more in 'next'.


* jc/send-email-skip-backup (2016-04-12) 1 commit
 - send-email: detect and offer to skip backup files

 A careless invocation of "git send-email directory/" after editing
 0001-change.patch with an editor often ends up sending both
 0001-change.patch and its backup file, 0001-change.patch~, causing
 embarrassment and a minor confusion.  Detect such an input and
 offer to skip the backup files when sending the patches out.

 Needs review.


* va/i18n-misc-updates (2016-04-19) 9 commits
 - i18n: builtin/pull.c: split strings marked for translation
 - i18n: builtin/pull.c: mark placeholders for translation
 - i18n: git-parse-remote.sh: mark strings for translation
 - i18n: branch: move comment for translators
 - i18n: branch: unmark string for translation
 - i18n: builtin/rm.c: remove a comma ',' from string
 - i18n: unpack-trees: mark strings for translation
 - i18n: builtin/branch.c: mark option for translation
 - i18n: index-pack: use plural string instead of normal one

 Mark several messages for translation.

 Comments?  They looked all sensible to me.
 Does the lack of response mean lack of interest and support?


* jc/drop-git-spec-in (2016-04-27) 2 commits
  (merged to 'next' on 2016-04-27 at 2b85030)
 + Makefile: remove dependency on git.spec
  (merged to 'next' on 2016-04-22 at 531583f)
 + Makefile: stop pretending to support rpmbuild

 As nobody maintains our in-tree git.spec.in and distros use their
 own spec file, we stopped pretending that we support "make rpm".

 Will merge to 'master'.


* kn/ref-filter-branch-list (2016-04-25) 17 commits
 - branch: implement '--format' option
 - branch: use ref-filter printing APIs
 - branch, tag: use porcelain output
 - ref-filter: allow porcelain to translate messages in the output
 - ref-filter: add `:dir` and `:base` options for ref printing atoms
 - ref-filter: make remote_ref_atom_parser() use refname_atom_parser_internal()
 - ref-filter: introduce symref_atom_parser() and refname_atom_parser()
 - ref-filter: introduce refname_atom_parser_internal()
 - ref-filter: make "%(symref)" atom work with the ':short' modifier
 - ref-filter: add support for %(upstream:track,nobracket)
 - ref-filter: make %(upstream:track) prints "[gone]" for invalid upstreams
 - ref-filter: introduce format_ref_array_item()
 - ref-filter: move get_head_description() from branch.c
 - ref-filter: modify "%(objectname:short)" to take length
 - ref-filter: implement %(if:equals=<string>) and %(if:notequals=<string>)
 - ref-filter: include reference to 'used_atom' within 'atom_value'
 - ref-filter: implement %(if), %(then), and %(else) atoms

 The code to list branches in "git branch" has been consolidated
 with the more generic ref-filter API.

 Needs review.


* xy/format-patch-base (2016-04-26) 4 commits
 - format-patch: introduce format.useAutoBase configuration
 - format-patch: introduce --base=auto option
 - format-patch: add '--base' option to record base tree info
 - patch-ids: make commit_patch_id() a public helper function

 "git format-patch" learned a new "--base" option to record what
 (public, well-known) commit the original series was built on in
 its output.

 Looking close to be ready.
 ($gmane/292622).


* dt/index-helper (2016-05-02) 19 commits
 . untracked-cache: config option
 . Add tracing to measure where most of the time is spent
 . index-helper: optionally automatically run
 . index-helper: autorun mode
 . index-helper: don't run if already running
 . index-helper: kill mode
 . watchman: add a config option to enable the extension
 . unpack-trees: preserve index extensions
 . update-index: enable/disable watchman support
 . index-helper: use watchman to avoid refreshing index with lstat()
 . watchman: add support to watchman to reduce refresh cost
 . read-cache: add watchman 'WAMA' extension
 . index-helper: add --detach
 . daemonize(): set a flag before exiting the main process
 . index-helper: log warnings
 . index-helper: add --strict
 . index-helper: new daemon for caching index and related stuff
 . read-cache: allow to keep mmap'd memory after reading
 . read-cache.c: fix constness of verify_hdr()

 Needs review.  Reported to break its own tests.
 ($gmane/293461).


* jc/bundle (2016-03-03) 6 commits
 - index-pack: --clone-bundle option
 - Merge branch 'jc/index-pack' into jc/bundle
 - bundle v3: the beginning
 - bundle: keep a copy of bundle file name in the in-core bundle header
 - bundle: plug resource leak
 - bundle doc: 'verify' is not about verifying the bundle

 The beginning of "split bundle", which could be one of the
 ingredients to allow "git clone" traffic off of the core server
 network to CDN.


* jc/merge-drop-old-syntax (2015-04-29) 1 commit
 - merge: drop 'git merge <message> HEAD <commit>' syntax

 Stop supporting "git merge <message> HEAD <commit>" syntax that has
 been deprecated since October 2007, and issues a deprecation
 warning message since v2.5.0.

 It has been reported that git-gui still uses the deprecated syntax,
 which needs to be fixed before this final step can proceed.
 ($gmane/282594)

^ permalink raw reply	[relevance 3%]

* What's cooking in git.git (May 2016, #02; Fri, 6)
@ 2016-05-06 22:46  3% Junio C Hamano
  0 siblings, 0 replies; 200+ results
From: Junio C Hamano @ 2016-05-06 22:46 UTC (permalink / raw)
  To: git

Here are the topics that have been cooking.  Commits prefixed with
'-' are only in 'pu' (proposed updates) while commits prefixed with
'+' are in 'next'.  The ones marked with '.' do not appear in any of
the integration branches, but I am still holding onto them.

The 'master' branch now has the tenth batch of topics of this cycle.
On the 'maint' front, 2.8.2 is out and fixes that have been in
'master' accumulates on it for 2.8.3.

Ones with questionable status has a '?' character in their comments.

You can find the changes described here in the integration branches
of the repositories listed at

    http://git-blame.blogspot.com/p/git-public-repositories.html

--------------------------------------------------
[Graduated to "master"]

* bc/object-id (2016-04-25) 6 commits
  (merged to 'next' on 2016-04-29 at 02f13a4)
 + match-trees: convert several leaf functions to use struct object_id
 + tree-walk: convert tree_entry_extract() to use struct object_id
 + struct name_entry: use struct object_id instead of unsigned char sha1[20]
 + match-trees: convert shift_tree() and shift_tree_by() to use object_id
 + test-match-trees: convert to use struct object_id
 + sha1-name: introduce a get_oid() function

 Move from unsigned char[20] to struct object_id continues.


* bw/rebase-merge-entire-branch (2016-04-24) 1 commit
  (merged to 'next' on 2016-04-29 at 7a9487f)
 + git-rebase--merge: don't include absent parent as a base

 "git rebase -m" could be asked to rebase an entire branch starting
 from the root, but failed by assuming that there always is a parent
 commit to the first commit on the branch.


* jc/drop-git-spec-in (2016-04-27) 2 commits
  (merged to 'next' on 2016-04-27 at 2b85030)
 + Makefile: remove dependency on git.spec
  (merged to 'next' on 2016-04-22 at 531583f)
 + Makefile: stop pretending to support rpmbuild

 As nobody maintains our in-tree git.spec.in and distros use their
 own spec file, we stopped pretending that we support "make rpm".


* jk/diff-compact-heuristic (2016-05-02) 3 commits
  (merged to 'next' on 2016-05-02 at 2a74763)
 + diff: undocument the compaction heuristic knobs for experimentation
  (merged to 'next' on 2016-04-22 at 0c117ea)
 + xdiff: implement empty line chunk heuristic
 + xdiff: add recs_match helper function
 (this branch is tangled with jc/diff-compact-always-use-blank-heuristics.)

 Patch output from "git diff" and friends has been tweaked to be
 more readable by using a blank line as a strong hint that the
 contents before and after it belong to a logically separate unit.


* js/http-custom-headers (2016-04-27) 1 commit
  (merged to 'next' on 2016-04-27 at 0c97a50)
 + http: support sending custom HTTP headers

 HTTP transport clients learned to throw extra HTTP headers at the
 server, specified via http.extraHeader configuration variable.


* ld/p4-test-py3 (2016-04-26) 3 commits
  (merged to 'next' on 2016-04-27 at d5d5fca)
 + git-p4 tests: time_in_seconds should use $PYTHON_PATH
 + git-p4 tests: work with python3 as well as python2
 + git-p4 tests: cd to / before running python

 The test scripts for "git p4" (but not "git p4" implementation
 itself) has been updated so that they would work even on a system
 where the installed version of Python is python 3.


* ls/p4-lfs-test-fix-2.7.0 (2016-04-29) 2 commits
  (merged to 'next' on 2016-04-29 at da56b67)
 + t9824: fix wrong reference value
  (merged to 'next' on 2016-04-27 at be87c63)
 + t9824: fix broken &&-chain in a subshell

 Fix a broken test.


* sb/clone-shallow-passthru (2016-04-26) 1 commit
  (merged to 'next' on 2016-04-27 at 3112b24)
 + clone: add `--shallow-submodules` flag

 "git clone" learned "--shallow-submodules" option.


* sb/config-exit-status-list (2016-04-26) 1 commit
  (merged to 'next' on 2016-04-27 at 44fe343)
 + config doc: improve exit code listing

 Doc update.

--------------------------------------------------
[New Topics]

* sb/submodule-deinit-all (2016-05-05) 1 commit
 - submodule deinit: require '--all' instead of '.' for all submodules

 Correct faulty recommendation to use "git submodule deinit ." when
 de-initialising all submodules, which would result in a strange
 error message in a pathological corner case.

 Will merge to 'next'.


* bn/config-doc-tt-varnames (2016-05-05) 1 commit
 - config: consistently format $variables in monospaced font
 (this branch uses jc/config-pathname-type.)

 Doc formatting fixes.


* lp/typofixes (2016-05-06) 1 commit
 - typofix: assorted typofixes in comments, documentation and messages

 Will merge to 'next'.


* sb/z-is-gnutar-ism (2016-05-06) 1 commit
 - t3513: do not compress backup tar file

 Will merge to 'next'.


* jc/test-parse-options-expect (2016-05-06) 4 commits
 - t0040: convert a few tests to use test-parse-options --expect
 - t0040: remove unused test helpers
 - test-parse-options: --expect=<string> option to simplify tests
 - test-parse-options: fix output when callback option fails
 (this branch uses pb/commit-verbose-config.)


* jc/doc-lint (2016-05-04) 2 commits
 - Documentation: fix linkgit references
 - ci: validate "gitlink:" in documentation


--------------------------------------------------
[Stalled]

* sb/bisect (2016-04-15) 22 commits
 - SQUASH???
 - bisect: get back halfway shortcut
 - bisect: compute best bisection in compute_relevant_weights()
 - bisect: use a bottom-up traversal to find relevant weights
 - bisect: prepare for different algorithms based on find_all
 - bisect: rename count_distance() to compute_weight()
 - bisect: make total number of commits global
 - bisect: introduce distance_direction()
 - bisect: extract get_distance() function from code duplication
 - bisect: use commit instead of commit list as arguments when appropriate
 - bisect: replace clear_distance() by unique markers
 - bisect: use struct node_data array instead of int array
 - bisect: get rid of recursion in count_distance()
 - bisect: make algorithm behavior independent of DEBUG_BISECT
 - bisect: make bisect compile if DEBUG_BISECT is set
 - bisect: plug the biggest memory leak
 - bisect: add test for the bisect algorithm
 - t6030: generalize test to not rely on current implementation
 - t: use test_cmp_rev() where appropriate
 - t/test-lib-functions.sh: generalize test_cmp_rev
 - bisect: allow 'bisect run' if no good commit is known
 - bisect: write about `bisect next` in documentation

 The internal algorithm used in "git bisect" to find the next commit
 to check has been optimized greatly.

 Expecting a reroll.
 ($gmane/291163)


* ar/diff-args-osx-precompose (2016-04-05) 1 commit
 - diff: run arguments through precompose_argv

 Many commands normalize command line arguments from NFD to NFC
 variant of UTF-8 on OSX, but commands in the "diff" family did
 not, causing "git diff $path" to complain that no such path is
 known to Git.  They have been taught to do the normalization.

 Will this be rerolled?
 ($gmane/290724)


* nd/shallow-deepen (2016-04-13) 26 commits
 - fetch, upload-pack: --deepen=N extends shallow boundary by N commits
 - upload-pack: add get_reachable_list()
 - upload-pack: split check_unreachable() in two, prep for get_reachable_list()
 - t5500, t5539: tests for shallow depth excluding a ref
 - clone: define shallow clone boundary with --shallow-exclude
 - fetch: define shallow boundary with --shallow-exclude
 - upload-pack: support define shallow boundary by excluding revisions
 - refs: add expand_ref()
 - t5500, t5539: tests for shallow depth since a specific date
 - clone: define shallow clone boundary based on time with --shallow-since
 - fetch: define shallow boundary with --shallow-since
 - upload-pack: add deepen-since to cut shallow repos based on time
 - shallow.c: implement a generic shallow boundary finder based on rev-list
 - fetch-pack: use a separate flag for fetch in deepening mode
 - fetch-pack.c: mark strings for translating
 - fetch-pack: use a common function for verbose printing
 - fetch-pack: use skip_prefix() instead of starts_with()
 - upload-pack: move rev-list code out of check_non_tip()
 - upload-pack: tighten number parsing at "deepen" lines
 - upload-pack: use skip_prefix() instead of starts_with()
 - upload-pack: move "unshallow" sending code out of deepen()
 - upload-pack: remove unused variable "backup"
 - upload-pack: move "shallow" sending code out of deepen()
 - upload-pack: move shallow deepen code out of receive_needs()
 - transport-helper.c: refactor set_helper_option()
 - remote-curl.c: convert fetch_git() to use argv_array

 The existing "git fetch --depth=<n>" option was hard to use
 correctly when making the history of an existing shallow clone
 deeper.  A new option, "--deepen=<n>", has been added to make this
 easier to use.  "git clone" also learned "--shallow-since=<date>"
 and "--shallow-exclude=<tag>" options to make it easier to specify
 "I am interested only in the recent N months worth of history" and
 "Give me only the history since that version".

 Needs review.


* sg/completion-updates (2016-02-28) 21 commits
 - completion: cache the path to the repository
 - completion: extract repository discovery from __gitdir()
 - completion: don't guard git executions with __gitdir()
 - completion: consolidate silencing errors from git commands
 - completion: don't use __gitdir() for git commands
 - completion: respect 'git -C <path>'
 - completion: fix completion after 'git -C <path>'
 - completion: don't offer commands when 'git --opt' needs an argument
 - rev-parse: add '--absolute-git-dir' option
 - completion: list short refs from a remote given as a URL
 - completion: don't list 'HEAD' when trying refs completion outside of a repo
 - completion: list refs from remote when remote's name matches a directory
 - completion: respect 'git --git-dir=<path>' when listing remote refs
 - completion: fix most spots not respecting 'git --git-dir=<path>'
 - completion: ensure that the repository path given on the command line exists
 - completion tests: add tests for the __git_refs() helper function
 - completion tests: check __gitdir()'s output in the error cases
 - completion tests: consolidate getting path of current working directory
 - completion tests: make the $cur variable local to the test helper functions
 - completion tests: don't add test cruft to the test repository
 - completion: improve __git_refs()'s in-code documentation

 Will be rerolled.
 ($gmane/287839)


* az/p4-bare-no-rebase (2016-02-19) 1 commit
 - git-p4.py: Don't try to rebase on submit from bare repository

 "git p4 submit" attempts to do a rebase, which would fail if done
 in a bare repository.  Not doing this rebase would paper over the
 failure, which is what this patch does, but it is unclear what the
 side effect of not rebasing is.

 Needs a better explanation.


* ss/commit-dry-run-resolve-merge-to-no-op (2016-02-17) 1 commit
 - wt-status.c: set commitable bit if there is a meaningful merge.

 "git commit --dry-run" reported "No, no, you cannot commit." in one
 case where "git commit" would have allowed you to commit, and this
 improves it a little bit ("git commit --dry-run --short" still does
 not give you the correct answer, for example).


* nd/icase (2016-02-15) 12 commits
 - grep.c: reuse "icase" variable
 - diffcore-pickaxe: support case insensitive match on non-ascii
 - diffcore-pickaxe: "share" regex error handling code
 - grep/pcre: support utf-8
 - gettext: add is_utf8_locale()
 - grep/pcre: prepare locale-dependent tables for icase matching
 - grep/icase: avoid kwsset when -F is specified
 - grep/icase: avoid kwsset on literal non-ascii strings
 - test-regex: expose full regcomp() to the command line
 - test-regex: isolate the bug test code
 - grep: break down an "if" stmt in preparation for next changes
 - grep: allow -F -i combination

 "git grep -i" has been taught to fold case in non-ascii locales.

 Needs review.
 ($gmane/286137)


* ec/annotate-deleted (2015-11-20) 1 commit
 - annotate: skip checking working tree if a revision is provided

 Usability fix for annotate-specific "<file> <rev>" syntax with deleted
 files.

 Waiting for review.


* dg/subtree-rebase-test (2016-01-19) 1 commit
 - contrib/subtree: Add a test for subtree rebase that loses commits

 Reviewed up to v5.
 Will be rerolled.
 ($gmane/284426)


* js/am-3-merge-recursive-direct (2015-10-12) 2 commits
 - am: make a direct call to merge_recursive
 - merge_recursive_options: introduce the "gently" flag

 The merge_recursive_generic() function has been made a bit safer to
 call from inside a process.  "git am -3" was taught to make a direct
 call to the function when falling back to three-way merge.

 Being able to make a direct call would be good in general, but as a
 performance thing, the change needs to be backed up by numbers.

 I haven't gone through the "gently" change with fine toothed comb;
 I can see that the change avoids calling die(), but I haven't made
 sure that the program states (e.g. what's in the in-core index) are
 adjusted sensibly when it returns to the caller instead of dying,
 or the codepaths that used to die() are free of resource leaks.
 The original code certainly did not care the program states at the
 point of dying exactly because it knew it is going to exit, but now
 they have to care, and they need to be audited.

 Will be rerolled.
 ($gmane/292205)


* dk/gc-more-wo-pack (2016-01-13) 4 commits
 - gc: clean garbage .bitmap files from pack dir
 - t5304: ensure non-garbage files are not deleted
 - t5304: test .bitmap garbage files
 - prepare_packed_git(): find more garbage

 Follow-on to dk/gc-idx-wo-pack topic, to clean up stale
 .bitmap and .keep files.

 Waiting for a reroll.
 ($gmane/284368).


* jc/diff-b-m (2015-02-23) 5 commits
 . WIPWIP
 . WIP: diff-b-m
 - diffcore-rename: allow easier debugging
 - diffcore-rename.c: add locate_rename_src()
 - diffcore-break: allow debugging

 "git diff -B -M" produced incorrect patch when the postimage of a
 completely rewritten file is similar to the preimage of a removed
 file; such a resulting file must not be expressed as a rename from
 other place.

 The fix in this patch is broken, unfortunately.
 Will discard.

--------------------------------------------------
[Cooking]

* ew/normal-to-e (2016-05-02) 1 commit
  (merged to 'next' on 2016-05-06 at 65a2c52)
 + .mailmap: update to my shorter email address

 Will merge to 'master'.


* js/close-packs-before-gc (2016-05-02) 1 commit
  (merged to 'next' on 2016-05-06 at bfd39bf)
 + t5510: run auto-gc in the foreground

 Will merge to 'master'.


* ls/travis-submitting-patches (2016-05-02) 1 commit
  (merged to 'next' on 2016-05-06 at 467930e)
 + Documentation: add setup instructions for Travis CI

 Will merge to 'master'.


* rn/glossary-typofix (2016-05-02) 1 commit
  (merged to 'next' on 2016-05-06 at 1e73e76)
 + Documentation: fix typo 'In such these cases'

 Will merge to 'master'.


* jc/commit-tree-ignore-commit-gpgsign (2016-05-03) 1 commit
  (merged to 'next' on 2016-05-06 at 08eccb2)
 + commit-tree: do not pay attention to commit.gpgsign

 "git commit-tree" plumbing command required the user to always sign
 its result when the user sets the commit.gpgsign configuration
 variable, which was an ancient mistake.  Rework "git rebase" that
 relied on this mistake so that it reads commit.gpgsign and pass (or
 not pass) the -S option to "git commit-tree" to keep the end-user
 expectation the same, while teaching "git commit-tree" to ignore
 the configuration variable.  This will stop requiring the users to
 sign commit objects used internally as an implementation detail of
 "git stash".

 Will merge to 'master'.


* jk/push-client-deadlock-fix (2016-05-02) 1 commit
  (merged to 'next' on 2016-05-06 at e91626c)
 + Windows: add pthread_sigmask() that does nothing

 Will merge to 'master'.


* sb/clean-test-fix (2016-05-03) 1 commit
  (merged to 'next' on 2016-05-06 at d80c9c6)
 + t7300: mark test with SANITY

 Will merge to 'master'.


* sb/submodule-module-list-pathspec-fix (2016-05-03) 1 commit
  (merged to 'next' on 2016-05-06 at ab6dac3)
 + submodule deinit test: fix broken && chain in subshell

 Will merge to 'master'.


* sk/gitweb-highlight-encoding (2016-05-03) 1 commit
  (merged to 'next' on 2016-05-06 at 441302c)
 + gitweb: apply fallback encoding before highlight

 Some multi-byte encoding can have a backslash byte as a later part
 of one letter, which would confuse "highlight" filter used in
 gitweb.

 Will merge to 'master'.


* ab/hooks (2016-05-04) 4 commits
 - hooks: allow customizing where the hook directory is
 - githooks.txt: minor improvements to the grammar & phrasing
 - githooks.txt: amend dangerous advice about 'update' hook ACL
 - githooks.txt: improve the intro section

 A new configuration variable core.hooksPath allows customizing
 where the hook directory is.

 Will merge to 'next'.


* jc/merge-impossible-no-commit (2016-04-26) 2 commits
 - merge: warn --no-commit merge when no new commit is created
 - merge: do not contaminate option_commit with --squash

 "git merge --no-commit" silently succeeded when there is no need to
 create any commit, either when you are more recent than the commit
 you tried to merge, or you can fast-forward to the commit you tried
 to merge.  The command gives a warning message in such cases.

 Just tying loose ends in a discussion.  Unless somebody else
 champions this topic, I'll drop it.


* mh/split-under-lock (2016-05-06) 33 commits
 - lock_ref_sha1_basic(): only handle REF_NODEREF mode
 - commit_ref_update(): remove the flags parameter
 - lock_ref_for_update(): don't resolve symrefs
 - lock_ref_for_update(): don't re-read non-symbolic references
 - refs: resolve symbolic refs first
 - ref_transaction_update(): check refname_is_safe() at a minimum
 - unlock_ref(): move definition higher in the file
 - lock_ref_for_update(): new function
 - add_update(): initialize the whole ref_update
 - verify_refname_available(): adjust constness in declaration
 - refs: don't dereference on rename
 - refs: allow log-only updates
 - delete_branches(): use resolve_refdup()
 - ref_transaction_commit(): correctly report close_ref() failure
 - ref_transaction_create(): disallow recursive pruning
 - refs: make error messages more consistent
 - lock_ref_sha1_basic(): remove unneeded local variable
 - read_raw_ref(): move docstring to header file
 - read_raw_ref(): improve docstring
 - read_raw_ref(): rename symref argument to referent
 - read_raw_ref(): clear *type at start of function
 - read_raw_ref(): rename flags argument to type
 - ref_transaction_commit(): remove local variable n
 - rename_ref(): remove unneeded local variable
 - commit_ref_update(): write error message to *err, not stderr
 - refname_is_safe(): insist that the refname already be normalized
 - refname_is_safe(): don't allow the empty string
 - refname_is_safe(): use skip_prefix()
 - remove_dir_recursively(): add docstring
 - safe_create_leading_directories(): improve docstring
 - read_raw_ref(): don't get confused by an empty directory
 - commit_ref(): if there is an empty dir in the way, delete it
 - t1404: demonstrate a bug resolving references

 Further preparatory work on the refs API before the pluggable
 backend series can land.

 Updated.  Will wait for comments for the last time, and then
 merge to 'next'.


* bn/http-cookiefile-config (2016-05-04) 2 commits
 - http: expand http.cookieFile as a path
 - Documentation: config: improve word ordering for http.cookieFile

 "http.cookieFile" configuration variable clearly wants a pathname,
 but we forgot to treat it as such by e.g. applying tilde expansion.

 Will merge to 'next'.


* ew/doc-split-pack-disables-bitmap (2016-04-28) 1 commit
  (merged to 'next' on 2016-05-06 at 6343d1e)
 + pack-objects: warn on split packs disabling bitmaps

 Doc update.

 Will merge to 'master'.


* jc/config-pathname-type (2016-05-04) 1 commit
 - config: describe 'pathname' value type
 (this branch is used by bn/config-doc-tt-varnames.)

 Consolidate description of tilde-expansion that is done to
 configuration variables that take pathname to a single place.

 Will merge to 'next'.


* jk/submodule-c-credential (2016-05-06) 6 commits
 - submodule: stop sanitizing config options
 - submodule: use prepare_submodule_repo_env consistently
 - submodule--helper: move config-sanitizing to submodule.c
 - submodule: export sanitized GIT_CONFIG_PARAMETERS
 - t5550: break submodule config test into multiple sub-tests
 - t5550: fix typo in $HTTPD_URL

 An earlier addition of "sanitize_submodule_env" with 14111fc4 (git:
 submodule honor -c credential.* from command line, 2016-02-29)
 turned out to be a convoluted no-op; implement what it wanted to do
 correctly.

 Everybody happy?


* mh/connect-leak (2016-04-28) 1 commit
 - git_connect(): fix memory leak with CONNECT_DIAG_URL

 Is already made obsolete with a patch in flight under discussion.
 ($gmane/292962)

 Will discard.


* sb/misc-cleanups (2016-04-28) 2 commits
  (merged to 'next' on 2016-05-06 at 87bc8a5)
 + submodule-config: don't shadow `cache`
 + config.c: drop local variable

 Will merge to 'master'.


* ew/fast-import-unpack-limit (2016-04-24) 1 commit
 - fast-import: implement unpack limit

 "git fast-import" learned the same performance trick to avoid
 creating too small a packfile as "git fetch" and "git push" have,
 using *.unpackLimit configuration.

 Need to pick up the rerolled version.
 ($gmane/292562)


* ls/p4-lfs (2016-04-28) 3 commits
  (merged to 'next' on 2016-05-06 at 3e1354d)
 + git-p4: fix Git LFS pointer parsing
 + travis-ci: express Linux/OS X dependency versions more clearly
 + travis-ci: update Git-LFS and P4 to the latest version

 Recent update to Git LFS broke "git p4" by changing the output from
 its "lfs pointer" subcommand.

 Will merge to 'master'.


* tb/convert-eol-autocrlf (2016-04-29) 10 commits
 - ce_compare_data() did not respect conversion
 - t6038; use crlf on all platforms
 - convert.c: more safer crlf handling with text attribute
 - convert: unify the "auto" handling of CRLF
 - convert.c: stream and early out
 - read-cache: factor out get_sha1_from_index() helper
 - convert.c: ident + core.autocrlf didn't work
 - t0027: test cases for combined attributes
 - convert: allow core.autocrlf=input and core.eol=crlf
 - t0027: make commit_chk_wrnNNO() reliable

 The combination of text=auto & eol=crlf (or eol=lf for that matter)
 is taught to be much more useful; it used to be "auto detection"
 was defeated as if setting eol declares that the file _is_ text,
 but now text=auto is still in effect for such a path and the code
 refrains from applying eol conversion if it found the path is not
 text.  Also setting core.autocrlf to 'input' and core.eol to 'crlf'
 used to be rejected, but because the code gives precedence to
 core.autocrlf, there is no need to, hence we no longer reject the
 combination.

 Earlier steps looked alright, but it veers into a wrong direction
 in the middle.


* ep/http-curl-trace (2016-05-02) 2 commits
 . imap-send.c: introduce the GIT_TRACE_CURL environment variable
 . http.c: implement the GIT_TRACE_CURL environment variable

 HTTP transport gained an option to produce more detailed debugging
 trace.

 Still under discussion.
 ($gmane/292074, 293236)


* nd/worktree-various-heads (2016-04-22) 13 commits
 - branch: do not rename a branch under bisect or rebase
 - worktree.c: check whether branch is bisected in another worktree
 - wt-status.c: split bisect detection out of wt_status_get_state()
 - worktree.c: check whether branch is rebased in another worktree
 - worktree.c: avoid referencing to worktrees[i] multiple times
 - wt-status.c: make wt_status_check_rebase() work on any worktree
 - wt-status.c: split rebase detection out of wt_status_get_state()
 - path.c: refactor and add worktree_git_path()
 - worktree.c: mark current worktree
 - worktree.c: make find_shared_symref() return struct worktree *
 - worktree.c: store "id" instead of "git_dir"
 - path.c: add git_common_path() and strbuf_git_common_path()
 - dir.c: rename str(n)cmp_icase to fspath(n)cmp

 The experimental "multiple worktree" feature gains more safety to
 forbid operations on a branch that is checked out or being actively
 worked on elsewhere, by noticing that e.g. it is being rebased.

 Being reviewed.
 ($gmane/292189)


* pb/commit-verbose-config (2016-05-05) 8 commits
 - SQUASH???
 - commit: add a commit.verbose config variable
 - t7507-commit-verbose: improve test coverage by testing number of diffs
 - parse-options.c: make OPTION_COUNTUP respect "unspecified" values
 - t/t7507: improve test coverage
 - t0040-parse-options: improve test coverage
 - test-parse-options: print quiet as integer
 - t0040-test-parse-options.sh: fix style issues
 (this branch is used by jc/test-parse-options-expect.)

 "git commit" learned to pay attention to "commit.verbose"
 configuration variable and act as if "--verbose" option was
 given from the command line.

 Almost there.
 ($gmane/293663).


* jc/fsck-nul-in-commit (2016-04-14) 2 commits
 - fsck: detect and warn a commit with embedded NUL
 - fsck_commit_buffer(): do not special case the last validation

 "git fsck" learned to catch NUL byte in a commit object as
 potential error and warn.

 What was the status of this one?  Ready to proceed?


* jc/ll-merge-internal (2016-04-27) 3 commits
 - t6036: remove pointless test that expects failure
 - ll-merge: use a longer conflict marker for internal merge
 - ll-merge: fix typo in comment

 "git rerere" can get confused by conflict markers deliberately left
 by the inner merge step, because they are indistinguishable from
 the real conflict markers left by the outermost merge which are
 what the end user and "rerere" need to look at.  This was fixed by
 making the conflict markers left by the inner merges a bit longer.

 Will rebase to remove the comment after three-dash line and then merge.


* sb/submodule-init (2016-05-03) 7 commits
  (merged to 'next' on 2016-05-03 at 8a5fce4)
 + submodule init: redirect stdout to stderr
  (merged to 'next' on 2016-04-29 at 3e81ee88)
 + submodule--helper update-clone: abort gracefully on missing .gitmodules
 + submodule init: fail gracefully with a missing .gitmodules file
  (merged to 'next' on 2016-04-27 at afaad81)
 + submodule: port init from shell to C
 + submodule: port resolve_relative_url from shell to C
 + Merge branch 'sb/submodule-path-misc-bugs' into sb/submodule-init
 + Merge branch 'sb/submodule-helper-clone-regression-fix' into sb/submodule-init

 Update of "git submodule" to move pieces of logic to C continues.

 Will cook for a bit more in 'next'.


* jc/send-email-skip-backup (2016-04-12) 1 commit
 - send-email: detect and offer to skip backup files

 A careless invocation of "git send-email directory/" after editing
 0001-change.patch with an editor often ends up sending both
 0001-change.patch and its backup file, 0001-change.patch~, causing
 embarrassment and a minor confusion.  Detect such an input and
 offer to skip the backup files when sending the patches out.

 Needs review.


* va/i18n-misc-updates (2016-04-19) 9 commits
 - i18n: builtin/pull.c: split strings marked for translation
 - i18n: builtin/pull.c: mark placeholders for translation
 - i18n: git-parse-remote.sh: mark strings for translation
 - i18n: branch: move comment for translators
 - i18n: branch: unmark string for translation
 - i18n: builtin/rm.c: remove a comma ',' from string
 - i18n: unpack-trees: mark strings for translation
 - i18n: builtin/branch.c: mark option for translation
 - i18n: index-pack: use plural string instead of normal one

 Mark several messages for translation.

 Comments?  They looked all sensible to me.
 Does the lack of response mean lack of interest and support?


* kn/ref-filter-branch-list (2016-04-25) 17 commits
 - branch: implement '--format' option
 - branch: use ref-filter printing APIs
 - branch, tag: use porcelain output
 - ref-filter: allow porcelain to translate messages in the output
 - ref-filter: add `:dir` and `:base` options for ref printing atoms
 - ref-filter: make remote_ref_atom_parser() use refname_atom_parser_internal()
 - ref-filter: introduce symref_atom_parser() and refname_atom_parser()
 - ref-filter: introduce refname_atom_parser_internal()
 - ref-filter: make "%(symref)" atom work with the ':short' modifier
 - ref-filter: add support for %(upstream:track,nobracket)
 - ref-filter: make %(upstream:track) prints "[gone]" for invalid upstreams
 - ref-filter: introduce format_ref_array_item()
 - ref-filter: move get_head_description() from branch.c
 - ref-filter: modify "%(objectname:short)" to take length
 - ref-filter: implement %(if:equals=<string>) and %(if:notequals=<string>)
 - ref-filter: include reference to 'used_atom' within 'atom_value'
 - ref-filter: implement %(if), %(then), and %(else) atoms

 The code to list branches in "git branch" has been consolidated
 with the more generic ref-filter API.

 Needs review.


* xy/format-patch-base (2016-04-26) 4 commits
 - format-patch: introduce format.useAutoBase configuration
 - format-patch: introduce --base=auto option
 - format-patch: add '--base' option to record base tree info
 - patch-ids: make commit_patch_id() a public helper function

 "git format-patch" learned a new "--base" option to record what
 (public, well-known) commit the original series was built on in
 its output.

 Looking close to be ready.
 ($gmane/292622).


* dt/index-helper (2016-05-05) 19 commits
 - untracked-cache: config option
 - trace: measure where most of the time is spent
 - index-helper: optionally automatically run
 - index-helper: autorun mode
 - index-helper: don't run if already running
 - index-helper: kill mode
 - watchman: add a config option to enable the extension
 - unpack-trees: preserve index extensions
 - update-index: enable/disable watchman support
 - index-helper: use watchman to avoid refreshing index with lstat()
 - watchman: add support to watchman to reduce refresh cost
 - read-cache: add watchman 'WAMA' extension
 - index-helper: add --detach
 - daemonize(): set a flag before exiting the main process
 - index-helper: log warnings
 - index-helper: add --strict
 - index-helper: new daemon for caching index and related stuff
 - read-cache: allow to keep mmap'd memory after reading
 - read-cache.c: fix constness of verify_hdr()

 Needs review.  Reported to break its own tests.
 ($gmane/293687).


* jc/bundle (2016-03-03) 6 commits
 - index-pack: --clone-bundle option
 - Merge branch 'jc/index-pack' into jc/bundle
 - bundle v3: the beginning
 - bundle: keep a copy of bundle file name in the in-core bundle header
 - bundle: plug resource leak
 - bundle doc: 'verify' is not about verifying the bundle

 The beginning of "split bundle", which could be one of the
 ingredients to allow "git clone" traffic off of the core server
 network to CDN.


* jc/merge-drop-old-syntax (2015-04-29) 1 commit
 - merge: drop 'git merge <message> HEAD <commit>' syntax

 Stop supporting "git merge <message> HEAD <commit>" syntax that has
 been deprecated since October 2007, and issues a deprecation
 warning message since v2.5.0.

 It has been reported that git-gui still uses the deprecated syntax,
 which needs to be fixed before this final step can proceed.
 ($gmane/282594)

--------------------------------------------------
[Discarded]

* jc/diff-compact-always-use-blank-heuristics (2016-04-29) 1 commit
 . diff: enable "compaction heuristics" and lose experimentation knob

 Superseded by the tip commit on the jk/diff-compact-heuristic topic.

^ permalink raw reply	[relevance 3%]

* What's cooking in git.git (May 2016, #03; Mon, 9)
@ 2016-05-09 23:00  3% Junio C Hamano
  0 siblings, 0 replies; 200+ results
From: Junio C Hamano @ 2016-05-09 23:00 UTC (permalink / raw)
  To: git

Here are the topics that have been cooking.  Commits prefixed with
'-' are only in 'pu' (proposed updates) while commits prefixed with
'+' are in 'next'.  The ones marked with '.' do not appear in any of
the integration branches, but I am still holding onto them.

The 'master' branch now has the tenth batch of topics of this cycle.
On the 'maint' front, 2.8.2 is out and fixes that have been in
'master' accumulates on it for 2.8.3.

Ones with questionable status has a '?' character in their comments.

You can find the changes described here in the integration branches
of the repositories listed at

    http://git-blame.blogspot.com/p/git-public-repositories.html

--------------------------------------------------
[New Topics]

* ak/t4151-ls-files-could-be-empty (2016-05-09) 1 commit
 - t4151: make sure argument to 'test -z' is given

 Test fix.

 Will merge to 'next'.


* es/test-gpg-tags (2016-05-09) 1 commit
 - t6302: simplify non-gpg cases

 Test fix.

 Will merge to 'next'.


* jc/test-seq (2016-05-09) 2 commits
 - test-lib-functions.sh: rewrite test_seq without Perl
 - test-lib-functions.sh: remove misleading comment on test_seq

 Test fix.

 Will merge to 'next'.


* js/windows-dotgit (2016-05-09) 2 commits
 - mingw: remove unnecessary definition
 - mingw: introduce the 'core.hideDotFiles' setting

 On Windows, .git and optionally any files whose name starts with a
 dot are now marked as hidden, with a core.hideDotFiles knob to
 customize this behaviour.


* nd/error-errno (2016-05-09) 41 commits
 - wrapper.c: use warning_errno()
 - vcs-svn: use error_errno()
 - upload-pack.c: use error_errno()
 - unpack-trees.c: use error_errno()
 - transport-helper.c: use error_errno()
 - sha1_file.c: use {error,die,warning}_errno()
 - server-info.c: use error_errno()
 - sequencer.c: use error_errno()
 - run-command.c: use error_errno()
 - rerere.c: use error_errno() and warning_errno()
 - reachable.c: use error_errno()
 - mailmap.c: use error_errno()
 - ident.c: use warning_errno()
 - http.c: use error_errno() and warning_errno()
 - grep.c: use error_errno()
 - gpg-interface.c: use error_errno()
 - fast-import.c: use error_errno()
 - entry.c: use error_errno()
 - editor.c: use error_errno()
 - diff-no-index.c: use error_errno()
 - credential-cache--daemon.c: use warning_errno()
 - copy.c: use error_errno()
 - connected.c: use error_errno()
 - config.c: use error_errno()
 - compat/win32/syslog.c: use warning_errno()
 - combine-diff.c: use error_errno()
 - check-racy.c: use error_errno()
 - builtin/worktree.c: use error_errno()
 - builtin/upload-archive.c: use error_errno()
 - builtin/update-index.c: prefer "err" to "errno" in process_lstat_error
 - builtin/rm.c: use warning_errno()
 - builtin/pack-objects.c: use die_errno() and warning_errno()
 - builtin/merge-file.c: use error_errno()
 - builtin/mailsplit.c: use error_errno()
 - builtin/help.c: use warning_errno()
 - builtin/fetch.c: use error_errno()
 - builtin/branch.c: use error_errno()
 - builtin/am.c: use error_errno()
 - bisect.c: use die_errno() and warning_errno()
 - usage.c: add warning_errno() and error_errno()
 - usage.c: move format processing out of die_errno()

 The code for warning_errno/die_errno has been refactored and a new
 error_errno() reporting helper is introduced.

 Will merge to 'next'.


* nd/remote-plural-ours-plus-theirs (2016-05-06) 1 commit
 - remote.c: specify correct plural form in "commit diverge" message

 Message fix.

 Will merge to 'next'.


* nd/test-helpers (2016-05-09) 1 commit
 - wrap-for-bin.sh: handle t/helper/ paths internally

 Switching between 'master' and 'next', between which the paths to
 test helper binaries have changed, did not update bin-wrappers/*
 scripts used in tests, causing false test failures.

 Will merge to 'next'.


* tb/core-eol-fix (2016-04-25) 4 commits
 - convert.c: ident + core.autocrlf didn't work
 - t0027: test cases for combined attributes
 - convert: allow core.autocrlf=input and core.eol=crlf
 - t0027: make commit_chk_wrnNNO() reliable

 A couple of bugs around core.autocrlf have been fixed.

 Will merge to 'next'.


* tb/t5601-sed-fix (2016-05-09) 1 commit
 - t5601: Remove trailing space in sed expression

 Test fix.

 Will merge to 'next'.


* va/i18n-remote-comment-to-align (2016-05-09) 1 commit
 - i18n: remote: add comment for translators

 Message fix.

 Will merge to 'next'.


* jc/linkgit-fix (2016-05-09) 1 commit
 - Documentation: fix linkgit references

 Many 'linkgit:<git documentation page>' references were broken,
 which are all fixed with this.

 Will merge to 'next'.


* js/http-custom-headers (2016-05-09) 2 commits
 - t5551: make the test for extra HTTP headers more robust
 - tests: adjust the configuration for Apache 2.2

 Update tests for "http.extraHeaders=<header>" to be portable back
 to Apache 2.2 (the original depended on <RequireAll/> which is a
 more recent feature).

 Will merge to 'next'.


--------------------------------------------------
[Stalled]

* sb/bisect (2016-04-15) 22 commits
 - SQUASH???
 - bisect: get back halfway shortcut
 - bisect: compute best bisection in compute_relevant_weights()
 - bisect: use a bottom-up traversal to find relevant weights
 - bisect: prepare for different algorithms based on find_all
 - bisect: rename count_distance() to compute_weight()
 - bisect: make total number of commits global
 - bisect: introduce distance_direction()
 - bisect: extract get_distance() function from code duplication
 - bisect: use commit instead of commit list as arguments when appropriate
 - bisect: replace clear_distance() by unique markers
 - bisect: use struct node_data array instead of int array
 - bisect: get rid of recursion in count_distance()
 - bisect: make algorithm behavior independent of DEBUG_BISECT
 - bisect: make bisect compile if DEBUG_BISECT is set
 - bisect: plug the biggest memory leak
 - bisect: add test for the bisect algorithm
 - t6030: generalize test to not rely on current implementation
 - t: use test_cmp_rev() where appropriate
 - t/test-lib-functions.sh: generalize test_cmp_rev
 - bisect: allow 'bisect run' if no good commit is known
 - bisect: write about `bisect next` in documentation

 The internal algorithm used in "git bisect" to find the next commit
 to check has been optimized greatly.

 Expecting a reroll.
 ($gmane/291163)


* ar/diff-args-osx-precompose (2016-04-05) 1 commit
 - diff: run arguments through precompose_argv

 Many commands normalize command line arguments from NFD to NFC
 variant of UTF-8 on OSX, but commands in the "diff" family did
 not, causing "git diff $path" to complain that no such path is
 known to Git.  They have been taught to do the normalization.

 Will this be rerolled?
 ($gmane/290724)


* nd/shallow-deepen (2016-04-13) 26 commits
 - fetch, upload-pack: --deepen=N extends shallow boundary by N commits
 - upload-pack: add get_reachable_list()
 - upload-pack: split check_unreachable() in two, prep for get_reachable_list()
 - t5500, t5539: tests for shallow depth excluding a ref
 - clone: define shallow clone boundary with --shallow-exclude
 - fetch: define shallow boundary with --shallow-exclude
 - upload-pack: support define shallow boundary by excluding revisions
 - refs: add expand_ref()
 - t5500, t5539: tests for shallow depth since a specific date
 - clone: define shallow clone boundary based on time with --shallow-since
 - fetch: define shallow boundary with --shallow-since
 - upload-pack: add deepen-since to cut shallow repos based on time
 - shallow.c: implement a generic shallow boundary finder based on rev-list
 - fetch-pack: use a separate flag for fetch in deepening mode
 - fetch-pack.c: mark strings for translating
 - fetch-pack: use a common function for verbose printing
 - fetch-pack: use skip_prefix() instead of starts_with()
 - upload-pack: move rev-list code out of check_non_tip()
 - upload-pack: tighten number parsing at "deepen" lines
 - upload-pack: use skip_prefix() instead of starts_with()
 - upload-pack: move "unshallow" sending code out of deepen()
 - upload-pack: remove unused variable "backup"
 - upload-pack: move "shallow" sending code out of deepen()
 - upload-pack: move shallow deepen code out of receive_needs()
 - transport-helper.c: refactor set_helper_option()
 - remote-curl.c: convert fetch_git() to use argv_array

 The existing "git fetch --depth=<n>" option was hard to use
 correctly when making the history of an existing shallow clone
 deeper.  A new option, "--deepen=<n>", has been added to make this
 easier to use.  "git clone" also learned "--shallow-since=<date>"
 and "--shallow-exclude=<tag>" options to make it easier to specify
 "I am interested only in the recent N months worth of history" and
 "Give me only the history since that version".

 Needs review.


* sg/completion-updates (2016-02-28) 21 commits
 - completion: cache the path to the repository
 - completion: extract repository discovery from __gitdir()
 - completion: don't guard git executions with __gitdir()
 - completion: consolidate silencing errors from git commands
 - completion: don't use __gitdir() for git commands
 - completion: respect 'git -C <path>'
 - completion: fix completion after 'git -C <path>'
 - completion: don't offer commands when 'git --opt' needs an argument
 - rev-parse: add '--absolute-git-dir' option
 - completion: list short refs from a remote given as a URL
 - completion: don't list 'HEAD' when trying refs completion outside of a repo
 - completion: list refs from remote when remote's name matches a directory
 - completion: respect 'git --git-dir=<path>' when listing remote refs
 - completion: fix most spots not respecting 'git --git-dir=<path>'
 - completion: ensure that the repository path given on the command line exists
 - completion tests: add tests for the __git_refs() helper function
 - completion tests: check __gitdir()'s output in the error cases
 - completion tests: consolidate getting path of current working directory
 - completion tests: make the $cur variable local to the test helper functions
 - completion tests: don't add test cruft to the test repository
 - completion: improve __git_refs()'s in-code documentation

 Will be rerolled.
 ($gmane/287839)


* az/p4-bare-no-rebase (2016-02-19) 1 commit
 - git-p4.py: Don't try to rebase on submit from bare repository

 "git p4 submit" attempts to do a rebase, which would fail if done
 in a bare repository.  Not doing this rebase would paper over the
 failure, which is what this patch does, but it is unclear what the
 side effect of not rebasing is.

 Needs a better explanation.


* ss/commit-dry-run-resolve-merge-to-no-op (2016-02-17) 1 commit
 - wt-status.c: set commitable bit if there is a meaningful merge.

 "git commit --dry-run" reported "No, no, you cannot commit." in one
 case where "git commit" would have allowed you to commit, and this
 improves it a little bit ("git commit --dry-run --short" still does
 not give you the correct answer, for example).


* nd/icase (2016-02-15) 12 commits
 - grep.c: reuse "icase" variable
 - diffcore-pickaxe: support case insensitive match on non-ascii
 - diffcore-pickaxe: "share" regex error handling code
 - grep/pcre: support utf-8
 - gettext: add is_utf8_locale()
 - grep/pcre: prepare locale-dependent tables for icase matching
 - grep/icase: avoid kwsset when -F is specified
 - grep/icase: avoid kwsset on literal non-ascii strings
 - test-regex: expose full regcomp() to the command line
 - test-regex: isolate the bug test code
 - grep: break down an "if" stmt in preparation for next changes
 - grep: allow -F -i combination

 "git grep -i" has been taught to fold case in non-ascii locales.

 Needs review.
 ($gmane/286137)


* ec/annotate-deleted (2015-11-20) 1 commit
 - annotate: skip checking working tree if a revision is provided

 Usability fix for annotate-specific "<file> <rev>" syntax with deleted
 files.

 Waiting for review.


* dg/subtree-rebase-test (2016-01-19) 1 commit
 - contrib/subtree: Add a test for subtree rebase that loses commits

 Reviewed up to v5.
 Will be rerolled.
 ($gmane/284426)


* js/am-3-merge-recursive-direct (2015-10-12) 2 commits
 - am: make a direct call to merge_recursive
 - merge_recursive_options: introduce the "gently" flag

 The merge_recursive_generic() function has been made a bit safer to
 call from inside a process.  "git am -3" was taught to make a direct
 call to the function when falling back to three-way merge.

 Being able to make a direct call would be good in general, but as a
 performance thing, the change needs to be backed up by numbers.

 I haven't gone through the "gently" change with fine toothed comb;
 I can see that the change avoids calling die(), but I haven't made
 sure that the program states (e.g. what's in the in-core index) are
 adjusted sensibly when it returns to the caller instead of dying,
 or the codepaths that used to die() are free of resource leaks.
 The original code certainly did not care the program states at the
 point of dying exactly because it knew it is going to exit, but now
 they have to care, and they need to be audited.

 Will be rerolled.
 ($gmane/292205)


* dk/gc-more-wo-pack (2016-01-13) 4 commits
 - gc: clean garbage .bitmap files from pack dir
 - t5304: ensure non-garbage files are not deleted
 - t5304: test .bitmap garbage files
 - prepare_packed_git(): find more garbage

 Follow-on to dk/gc-idx-wo-pack topic, to clean up stale
 .bitmap and .keep files.

 Waiting for a reroll.
 ($gmane/284368).


* jc/diff-b-m (2015-02-23) 5 commits
 . WIPWIP
 . WIP: diff-b-m
 - diffcore-rename: allow easier debugging
 - diffcore-rename.c: add locate_rename_src()
 - diffcore-break: allow debugging

 "git diff -B -M" produced incorrect patch when the postimage of a
 completely rewritten file is similar to the preimage of a removed
 file; such a resulting file must not be expressed as a rename from
 other place.

 The fix in this patch is broken, unfortunately.
 Will discard.

--------------------------------------------------
[Cooking]

* sb/submodule-deinit-all (2016-05-05) 1 commit
  (merged to 'next' on 2016-05-09 at 0fd4518)
 + submodule deinit: require '--all' instead of '.' for all submodules

 Correct faulty recommendation to use "git submodule deinit ." when
 de-initialising all submodules, which would result in a strange
 error message in a pathological corner case.

 Will merge to 'master'.


* bn/config-doc-tt-varnames (2016-05-05) 1 commit
 - config: consistently format $variables in monospaced font
 (this branch uses jc/config-pathname-type.)

 Doc formatting fixes.

 Will merge to 'next'.


* lp/typofixes (2016-05-06) 1 commit
  (merged to 'next' on 2016-05-09 at 59683be)
 + typofix: assorted typofixes in comments, documentation and messages

 Will merge to 'master'.


* sb/z-is-gnutar-ism (2016-05-09) 2 commits
  (merged to 'next' on 2016-05-09 at 51d527d)
 + t6041: do not compress backup tar file
 + t3513: do not compress backup tar file

 Will merge to 'master'.


* jc/test-parse-options-expect (2016-05-06) 4 commits
 - t0040: convert a few tests to use test-parse-options --expect
 - t0040: remove unused test helpers
 - test-parse-options: --expect=<string> option to simplify tests
 - test-parse-options: fix output when callback option fails
 (this branch uses pb/commit-verbose-config.)

 t0040 had too many unnecessary repetitions in its test data.  Teach
 test-parse-options program so that a caller can tell what it
 expects in its output, so that these repetitions can be cleaned up.

 Will merge to 'next'.


* jc/doc-lint (2016-05-04) 1 commit
 - ci: validate "gitlink:" in documentation

 Find common mistakes when writing gitlink: in our documentation and
 drive the check from "make check-docs".



* ew/normal-to-e (2016-05-02) 1 commit
  (merged to 'next' on 2016-05-06 at 65a2c52)
 + .mailmap: update to my shorter email address

 Will merge to 'master'.


* js/close-packs-before-gc (2016-05-02) 1 commit
  (merged to 'next' on 2016-05-06 at bfd39bf)
 + t5510: run auto-gc in the foreground

 Will merge to 'master'.


* ls/travis-submitting-patches (2016-05-02) 1 commit
  (merged to 'next' on 2016-05-06 at 467930e)
 + Documentation: add setup instructions for Travis CI

 Will merge to 'master'.


* rn/glossary-typofix (2016-05-02) 1 commit
  (merged to 'next' on 2016-05-06 at 1e73e76)
 + Documentation: fix typo 'In such these cases'

 Will merge to 'master'.


* jc/commit-tree-ignore-commit-gpgsign (2016-05-03) 1 commit
  (merged to 'next' on 2016-05-06 at 08eccb2)
 + commit-tree: do not pay attention to commit.gpgsign

 "git commit-tree" plumbing command required the user to always sign
 its result when the user sets the commit.gpgsign configuration
 variable, which was an ancient mistake.  Rework "git rebase" that
 relied on this mistake so that it reads commit.gpgsign and pass (or
 not pass) the -S option to "git commit-tree" to keep the end-user
 expectation the same, while teaching "git commit-tree" to ignore
 the configuration variable.  This will stop requiring the users to
 sign commit objects used internally as an implementation detail of
 "git stash".

 Will merge to 'master'.


* jk/push-client-deadlock-fix (2016-05-02) 1 commit
  (merged to 'next' on 2016-05-06 at e91626c)
 + Windows: add pthread_sigmask() that does nothing

 Will merge to 'master'.


* sb/clean-test-fix (2016-05-03) 1 commit
  (merged to 'next' on 2016-05-06 at d80c9c6)
 + t7300: mark test with SANITY

 Will merge to 'master'.


* sb/submodule-module-list-pathspec-fix (2016-05-03) 1 commit
  (merged to 'next' on 2016-05-06 at ab6dac3)
 + submodule deinit test: fix broken && chain in subshell

 Will merge to 'master'.


* sk/gitweb-highlight-encoding (2016-05-03) 1 commit
  (merged to 'next' on 2016-05-06 at 441302c)
 + gitweb: apply fallback encoding before highlight

 Some multi-byte encoding can have a backslash byte as a later part
 of one letter, which would confuse "highlight" filter used in
 gitweb.

 Will merge to 'master'.


* ab/hooks (2016-05-04) 4 commits
  (merged to 'next' on 2016-05-09 at 23cf808)
 + hooks: allow customizing where the hook directory is
 + githooks.txt: minor improvements to the grammar & phrasing
 + githooks.txt: amend dangerous advice about 'update' hook ACL
 + githooks.txt: improve the intro section

 A new configuration variable core.hooksPath allows customizing
 where the hook directory is.

 Will merge to 'master'.


* jc/merge-impossible-no-commit (2016-04-26) 2 commits
 - merge: warn --no-commit merge when no new commit is created
 - merge: do not contaminate option_commit with --squash

 "git merge --no-commit" silently succeeded when there is no need to
 create any commit, either when you are more recent than the commit
 you tried to merge, or you can fast-forward to the commit you tried
 to merge.  The command gives a warning message in such cases.

 Just tying loose ends in a discussion.  Unless somebody else
 champions this topic, I'll drop it.


* mh/split-under-lock (2016-05-06) 33 commits
 - lock_ref_sha1_basic(): only handle REF_NODEREF mode
 - commit_ref_update(): remove the flags parameter
 - lock_ref_for_update(): don't resolve symrefs
 - lock_ref_for_update(): don't re-read non-symbolic references
 - refs: resolve symbolic refs first
 - ref_transaction_update(): check refname_is_safe() at a minimum
 - unlock_ref(): move definition higher in the file
 - lock_ref_for_update(): new function
 - add_update(): initialize the whole ref_update
 - verify_refname_available(): adjust constness in declaration
 - refs: don't dereference on rename
 - refs: allow log-only updates
 - delete_branches(): use resolve_refdup()
 - ref_transaction_commit(): correctly report close_ref() failure
 - ref_transaction_create(): disallow recursive pruning
 - refs: make error messages more consistent
 - lock_ref_sha1_basic(): remove unneeded local variable
 - read_raw_ref(): move docstring to header file
 - read_raw_ref(): improve docstring
 - read_raw_ref(): rename symref argument to referent
 - read_raw_ref(): clear *type at start of function
 - read_raw_ref(): rename flags argument to type
 - ref_transaction_commit(): remove local variable n
 - rename_ref(): remove unneeded local variable
 - commit_ref_update(): write error message to *err, not stderr
 - refname_is_safe(): insist that the refname already be normalized
 - refname_is_safe(): don't allow the empty string
 - refname_is_safe(): use skip_prefix()
 - remove_dir_recursively(): add docstring
 - safe_create_leading_directories(): improve docstring
 - read_raw_ref(): don't get confused by an empty directory
 - commit_ref(): if there is an empty dir in the way, delete it
 - t1404: demonstrate a bug resolving references

 Further preparatory work on the refs API before the pluggable
 backend series can land.

 Updated.  Will wait for comments for the last time, and then
 merge to 'next'.


* bn/http-cookiefile-config (2016-05-04) 2 commits
  (merged to 'next' on 2016-05-09 at d519b13)
 + http: expand http.cookieFile as a path
 + Documentation: config: improve word ordering for http.cookieFile

 "http.cookieFile" configuration variable clearly wants a pathname,
 but we forgot to treat it as such by e.g. applying tilde expansion.

 Will merge to 'master'.


* ew/doc-split-pack-disables-bitmap (2016-04-28) 1 commit
  (merged to 'next' on 2016-05-06 at 6343d1e)
 + pack-objects: warn on split packs disabling bitmaps

 Doc update.

 Will merge to 'master'.


* jc/config-pathname-type (2016-05-04) 1 commit
  (merged to 'next' on 2016-05-09 at 0876e55)
 + config: describe 'pathname' value type
 (this branch is used by bn/config-doc-tt-varnames.)

 Consolidate description of tilde-expansion that is done to
 configuration variables that take pathname to a single place.

 Will merge to 'master'.


* jk/submodule-c-credential (2016-05-06) 6 commits
 - submodule: stop sanitizing config options
 - submodule: use prepare_submodule_repo_env consistently
 - submodule--helper: move config-sanitizing to submodule.c
 - submodule: export sanitized GIT_CONFIG_PARAMETERS
 - t5550: break submodule config test into multiple sub-tests
 - t5550: fix typo in $HTTPD_URL

 An earlier addition of "sanitize_submodule_env" with 14111fc4 (git:
 submodule honor -c credential.* from command line, 2016-02-29)
 turned out to be a convoluted no-op; implement what it wanted to do
 correctly.

 Everybody happy?


* mh/connect-leak (2016-04-28) 1 commit
 - git_connect(): fix memory leak with CONNECT_DIAG_URL

 Is already made obsolete with a patch in flight under discussion.
 ($gmane/292962)

 Will discard.


* sb/misc-cleanups (2016-04-28) 2 commits
  (merged to 'next' on 2016-05-06 at 87bc8a5)
 + submodule-config: don't shadow `cache`
 + config.c: drop local variable

 Will merge to 'master'.


* ew/fast-import-unpack-limit (2016-04-24) 1 commit
 - fast-import: implement unpack limit

 "git fast-import" learned the same performance trick to avoid
 creating too small a packfile as "git fetch" and "git push" have,
 using *.unpackLimit configuration.

 Need to pick up the rerolled version.
 ($gmane/292562)


* ls/p4-lfs (2016-04-28) 3 commits
  (merged to 'next' on 2016-05-06 at 3e1354d)
 + git-p4: fix Git LFS pointer parsing
 + travis-ci: express Linux/OS X dependency versions more clearly
 + travis-ci: update Git-LFS and P4 to the latest version

 Recent update to Git LFS broke "git p4" by changing the output from
 its "lfs pointer" subcommand.

 Will merge to 'master'.


* ep/http-curl-trace (2016-05-02) 2 commits
 . imap-send.c: introduce the GIT_TRACE_CURL environment variable
 . http.c: implement the GIT_TRACE_CURL environment variable

 HTTP transport gained an option to produce more detailed debugging
 trace.

 Still under discussion.
 ($gmane/292074, 293236)


* nd/worktree-various-heads (2016-04-22) 13 commits
 - branch: do not rename a branch under bisect or rebase
 - worktree.c: check whether branch is bisected in another worktree
 - wt-status.c: split bisect detection out of wt_status_get_state()
 - worktree.c: check whether branch is rebased in another worktree
 - worktree.c: avoid referencing to worktrees[i] multiple times
 - wt-status.c: make wt_status_check_rebase() work on any worktree
 - wt-status.c: split rebase detection out of wt_status_get_state()
 - path.c: refactor and add worktree_git_path()
 - worktree.c: mark current worktree
 - worktree.c: make find_shared_symref() return struct worktree *
 - worktree.c: store "id" instead of "git_dir"
 - path.c: add git_common_path() and strbuf_git_common_path()
 - dir.c: rename str(n)cmp_icase to fspath(n)cmp

 The experimental "multiple worktree" feature gains more safety to
 forbid operations on a branch that is checked out or being actively
 worked on elsewhere, by noticing that e.g. it is being rebased.

 Will merge to 'next'.


* pb/commit-verbose-config (2016-05-05) 8 commits
 - SQUASH???
 - commit: add a commit.verbose config variable
 - t7507-commit-verbose: improve test coverage by testing number of diffs
 - parse-options.c: make OPTION_COUNTUP respect "unspecified" values
 - t/t7507: improve test coverage
 - t0040-parse-options: improve test coverage
 - test-parse-options: print quiet as integer
 - t0040-test-parse-options.sh: fix style issues
 (this branch is used by jc/test-parse-options-expect.)

 "git commit" learned to pay attention to "commit.verbose"
 configuration variable and act as if "--verbose" option was
 given from the command line.

 Almost there.
 ($gmane/293663).


* jc/fsck-nul-in-commit (2016-04-14) 2 commits
 - fsck: detect and warn a commit with embedded NUL
 - fsck_commit_buffer(): do not special case the last validation

 "git fsck" learned to catch NUL byte in a commit object as
 potential error and warn.

 What was the status of this one?  Ready to proceed?


* jc/ll-merge-internal (2016-05-09) 3 commits
 - t6036: remove pointless test that expects failure
 - ll-merge: use a longer conflict marker for internal merge
 - ll-merge: fix typo in comment

 "git rerere" can get confused by conflict markers deliberately left
 by the inner merge step, because they are indistinguishable from
 the real conflict markers left by the outermost merge which are
 what the end user and "rerere" need to look at.  This was fixed by
 making the conflict markers left by the inner merges a bit longer.

 Will merge to 'next'.


* sb/submodule-init (2016-05-03) 7 commits
  (merged to 'next' on 2016-05-03 at 8a5fce4)
 + submodule init: redirect stdout to stderr
  (merged to 'next' on 2016-04-29 at 3e81ee88)
 + submodule--helper update-clone: abort gracefully on missing .gitmodules
 + submodule init: fail gracefully with a missing .gitmodules file
  (merged to 'next' on 2016-04-27 at afaad81)
 + submodule: port init from shell to C
 + submodule: port resolve_relative_url from shell to C
 + Merge branch 'sb/submodule-path-misc-bugs' into sb/submodule-init
 + Merge branch 'sb/submodule-helper-clone-regression-fix' into sb/submodule-init

 Update of "git submodule" to move pieces of logic to C continues.

 Will cook for a bit more in 'next'.


* jc/send-email-skip-backup (2016-04-12) 1 commit
 - send-email: detect and offer to skip backup files

 A careless invocation of "git send-email directory/" after editing
 0001-change.patch with an editor often ends up sending both
 0001-change.patch and its backup file, 0001-change.patch~, causing
 embarrassment and a minor confusion.  Detect such an input and
 offer to skip the backup files when sending the patches out.

 Needs review.


* va/i18n-misc-updates (2016-04-19) 9 commits
 - i18n: builtin/pull.c: split strings marked for translation
 - i18n: builtin/pull.c: mark placeholders for translation
 - i18n: git-parse-remote.sh: mark strings for translation
 - i18n: branch: move comment for translators
 - i18n: branch: unmark string for translation
 - i18n: builtin/rm.c: remove a comma ',' from string
 - i18n: unpack-trees: mark strings for translation
 - i18n: builtin/branch.c: mark option for translation
 - i18n: index-pack: use plural string instead of normal one

 Mark several messages for translation.

 Will merge to 'next'.


* kn/ref-filter-branch-list (2016-04-25) 17 commits
 - branch: implement '--format' option
 - branch: use ref-filter printing APIs
 - branch, tag: use porcelain output
 - ref-filter: allow porcelain to translate messages in the output
 - ref-filter: add `:dir` and `:base` options for ref printing atoms
 - ref-filter: make remote_ref_atom_parser() use refname_atom_parser_internal()
 - ref-filter: introduce symref_atom_parser() and refname_atom_parser()
 - ref-filter: introduce refname_atom_parser_internal()
 - ref-filter: make "%(symref)" atom work with the ':short' modifier
 - ref-filter: add support for %(upstream:track,nobracket)
 - ref-filter: make %(upstream:track) prints "[gone]" for invalid upstreams
 - ref-filter: introduce format_ref_array_item()
 - ref-filter: move get_head_description() from branch.c
 - ref-filter: modify "%(objectname:short)" to take length
 - ref-filter: implement %(if:equals=<string>) and %(if:notequals=<string>)
 - ref-filter: include reference to 'used_atom' within 'atom_value'
 - ref-filter: implement %(if), %(then), and %(else) atoms

 The code to list branches in "git branch" has been consolidated
 with the more generic ref-filter API.

 Needs review.


* xy/format-patch-base (2016-04-26) 4 commits
 - format-patch: introduce format.useAutoBase configuration
 - format-patch: introduce --base=auto option
 - format-patch: add '--base' option to record base tree info
 - patch-ids: make commit_patch_id() a public helper function

 "git format-patch" learned a new "--base" option to record what
 (public, well-known) commit the original series was built on in
 its output.

 Will merge to 'next'.


* dt/index-helper (2016-05-09) 19 commits
 - untracked-cache: config option
 - trace: measure where the time is spent in the index-heavy operations
 - index-helper: optionally automatically run
 - index-helper: autorun mode
 - index-helper: don't run if already running
 - index-helper: kill mode
 - watchman: add a config option to enable the extension
 - unpack-trees: preserve index extensions
 - update-index: enable/disable watchman support
 - index-helper: use watchman to avoid refreshing index with lstat()
 - watchman: support watchman to reduce index refresh cost
 - read-cache: add watchman 'WAMA' extension
 - index-helper: add --detach
 - daemonize(): set a flag before exiting the main process
 - index-helper: log warnings
 - index-helper: add --strict
 - index-helper: new daemon for caching index and related stuff
 - read-cache: allow to keep mmap'd memory after reading
 - read-cache.c: fix constness of verify_hdr()

 Needs review.
 ($gmane/294056).


* jc/bundle (2016-03-03) 6 commits
 - index-pack: --clone-bundle option
 - Merge branch 'jc/index-pack' into jc/bundle
 - bundle v3: the beginning
 - bundle: keep a copy of bundle file name in the in-core bundle header
 - bundle: plug resource leak
 - bundle doc: 'verify' is not about verifying the bundle

 The beginning of "split bundle", which could be one of the
 ingredients to allow "git clone" traffic off of the core server
 network to CDN.


* jc/merge-drop-old-syntax (2015-04-29) 1 commit
 - merge: drop 'git merge <message> HEAD <commit>' syntax

 Stop supporting "git merge <message> HEAD <commit>" syntax that has
 been deprecated since October 2007, and issues a deprecation
 warning message since v2.5.0.

 It has been reported that git-gui still uses the deprecated syntax,
 which needs to be fixed before this final step can proceed.
 ($gmane/282594)

--------------------------------------------------
[Discarded]

* jc/diff-compact-always-use-blank-heuristics (2016-04-29) 1 commit
 . diff: enable "compaction heuristics" and lose experimentation knob

 Superseded by the tip commit on the jk/diff-compact-heuristic topic.

^ permalink raw reply	[relevance 3%]

* What's cooking in git.git (May 2016, #04; Wed, 11)
@ 2016-05-11 22:13  3% Junio C Hamano
  0 siblings, 0 replies; 200+ results
From: Junio C Hamano @ 2016-05-11 22:13 UTC (permalink / raw)
  To: git

Here are the topics that have been cooking.  Commits prefixed with
'-' are only in 'pu' (proposed updates) while commits prefixed with
'+' are in 'next'.  The ones marked with '.' do not appear in any of
the integration branches, but I am still holding onto them.

The 'master' branch now has the eleventh batch of topics of this
cycle.  On the 'maint' front, 2.8.2 is out and fixes that have been
in 'master' accumulates on it for 2.8.3.

You can find the changes described here in the integration branches
of the repositories listed at

    http://git-blame.blogspot.com/p/git-public-repositories.html

--------------------------------------------------
[Graduated to "master"]

* ew/doc-split-pack-disables-bitmap (2016-04-28) 1 commit
  (merged to 'next' on 2016-05-06 at 6343d1e)
 + pack-objects: warn on split packs disabling bitmaps

 Doc update.


* ew/normal-to-e (2016-05-02) 1 commit
  (merged to 'next' on 2016-05-06 at 65a2c52)
 + .mailmap: update to my shorter email address


* js/close-packs-before-gc (2016-05-02) 1 commit
  (merged to 'next' on 2016-05-06 at bfd39bf)
 + t5510: run auto-gc in the foreground


* ls/p4-lfs (2016-04-28) 3 commits
  (merged to 'next' on 2016-05-06 at 3e1354d)
 + git-p4: fix Git LFS pointer parsing
 + travis-ci: express Linux/OS X dependency versions more clearly
 + travis-ci: update Git-LFS and P4 to the latest version

 Recent update to Git LFS broke "git p4" by changing the output from
 its "lfs pointer" subcommand.


* ls/travis-submitting-patches (2016-05-02) 1 commit
  (merged to 'next' on 2016-05-06 at 467930e)
 + Documentation: add setup instructions for Travis CI


* rn/glossary-typofix (2016-05-02) 1 commit
  (merged to 'next' on 2016-05-06 at 1e73e76)
 + Documentation: fix typo 'In such these cases'


* sb/clean-test-fix (2016-05-03) 1 commit
  (merged to 'next' on 2016-05-06 at d80c9c6)
 + t7300: mark test with SANITY


* sb/misc-cleanups (2016-04-28) 2 commits
  (merged to 'next' on 2016-05-06 at 87bc8a5)
 + submodule-config: don't shadow `cache`
 + config.c: drop local variable


* sk/gitweb-highlight-encoding (2016-05-03) 1 commit
  (merged to 'next' on 2016-05-06 at 441302c)
 + gitweb: apply fallback encoding before highlight

 Some multi-byte encoding can have a backslash byte as a later part
 of one letter, which would confuse "highlight" filter used in
 gitweb.

--------------------------------------------------
[New Topics]

* es/t1500-modernize (2016-05-10) 7 commits
 - t1500: finish preparation upfront
 - t1500: be considerate to future potential tests
 - t1500: avoid setting environment variables outside of tests
 - t1500: avoid setting configuration options outside of tests
 - t1500: avoid changing working directory outside of tests
 - t1500: reduce dependence upon global state
 - t1500: test_rev_parse: facilitate future test enhancements

 test updates to make it more readable and maintainable.

 Will be rerolled.


* ls/travis-build-doc (2016-05-10) 1 commit
  (merged to 'next' on 2016-05-10 at 7f63497)
 + travis-ci: build documentation

 CI test was taught to build documentation pages.

 Will merge to 'master'.


* js/t3404-typofix (2016-05-10) 1 commit
  (merged to 'next' on 2016-05-10 at cbeabc0)
 + t3404: fix typo

 Will merge to 'master'.


* jk/rebase-interative-eval-fix (2016-05-10) 1 commit
  (merged to 'next' on 2016-05-11 at 4fdf387)
 + rebase--interactive: avoid empty list in shell for-loop

 Portability enhancement for "rebase -i" to help platforms whose
 shell does not like "for i in <empty>" (which is not POSIX-kosher).

 Will merge to 'master'.


* jk/test-send-sh-x-trace-elsewhere (2016-05-11) 1 commit
  (merged to 'next' on 2016-05-11 at 273a137)
 + test-lib: set BASH_XTRACEFD automatically

 Running tests with '-x' option to trace the individual command
 executions is a useful way to debug test scripts, but some tests
 that capture the standard error stream and check what the command
 said can be broken with the trace output mixed in.  When running
 our tests under "bash", however, we can redirect the trace output
 to another file descriptor to keep the standard error of programs
 being tested intact.

 Will merge to 'master'.


* js/perf-rebase-i (2016-05-11) 3 commits
 - Add a perf test for rebase -i
 - perf: make the tests work in worktrees
 - perf: let's disable symlinks when they are not available

 Add perf test for "rebase -i"


* nd/worktree-cleanup-post-head-protection (2016-05-10) 7 commits
 - worktree: simplify prefixing paths
 - worktree: avoid 0{40}, too many zeroes, hard to read
 - worktree.c: add clear_worktree()
 - worktree.c: use is_dot_or_dotdot()
 - git-worktree.txt: keep subcommand listing in alphabetical order
 - worktree.c: rewrite mark_current_worktree() to avoid strbuf
 - completion: support git-worktree
 (this branch uses nd/worktree-various-heads.)


* va/mailinfo-doc-typofix (2016-05-11) 1 commit
  (merged to 'next' on 2016-05-11 at 7180176)
 + Documentation/git-mailinfo: fix typo

 Typofix.

 Will merge to 'master'.

--------------------------------------------------
[Stalled]

* ep/http-curl-trace (2016-05-02) 2 commits
 . imap-send.c: introduce the GIT_TRACE_CURL environment variable
 . http.c: implement the GIT_TRACE_CURL environment variable

 HTTP transport gained an option to produce more detailed debugging
 trace.

 Expecting a reroll.
 ($gmane/292074, 293236)


* sb/bisect (2016-04-15) 22 commits
 - SQUASH???
 - bisect: get back halfway shortcut
 - bisect: compute best bisection in compute_relevant_weights()
 - bisect: use a bottom-up traversal to find relevant weights
 - bisect: prepare for different algorithms based on find_all
 - bisect: rename count_distance() to compute_weight()
 - bisect: make total number of commits global
 - bisect: introduce distance_direction()
 - bisect: extract get_distance() function from code duplication
 - bisect: use commit instead of commit list as arguments when appropriate
 - bisect: replace clear_distance() by unique markers
 - bisect: use struct node_data array instead of int array
 - bisect: get rid of recursion in count_distance()
 - bisect: make algorithm behavior independent of DEBUG_BISECT
 - bisect: make bisect compile if DEBUG_BISECT is set
 - bisect: plug the biggest memory leak
 - bisect: add test for the bisect algorithm
 - t6030: generalize test to not rely on current implementation
 - t: use test_cmp_rev() where appropriate
 - t/test-lib-functions.sh: generalize test_cmp_rev
 - bisect: allow 'bisect run' if no good commit is known
 - bisect: write about `bisect next` in documentation

 The internal algorithm used in "git bisect" to find the next commit
 to check has been optimized greatly.

 Expecting a reroll.
 ($gmane/291163)


* ar/diff-args-osx-precompose (2016-04-05) 1 commit
 - diff: run arguments through precompose_argv

 Many commands normalize command line arguments from NFD to NFC
 variant of UTF-8 on OSX, but commands in the "diff" family did
 not, causing "git diff $path" to complain that no such path is
 known to Git.  They have been taught to do the normalization.

 Will this be rerolled?
 ($gmane/290724)


* nd/shallow-deepen (2016-04-13) 26 commits
 - fetch, upload-pack: --deepen=N extends shallow boundary by N commits
 - upload-pack: add get_reachable_list()
 - upload-pack: split check_unreachable() in two, prep for get_reachable_list()
 - t5500, t5539: tests for shallow depth excluding a ref
 - clone: define shallow clone boundary with --shallow-exclude
 - fetch: define shallow boundary with --shallow-exclude
 - upload-pack: support define shallow boundary by excluding revisions
 - refs: add expand_ref()
 - t5500, t5539: tests for shallow depth since a specific date
 - clone: define shallow clone boundary based on time with --shallow-since
 - fetch: define shallow boundary with --shallow-since
 - upload-pack: add deepen-since to cut shallow repos based on time
 - shallow.c: implement a generic shallow boundary finder based on rev-list
 - fetch-pack: use a separate flag for fetch in deepening mode
 - fetch-pack.c: mark strings for translating
 - fetch-pack: use a common function for verbose printing
 - fetch-pack: use skip_prefix() instead of starts_with()
 - upload-pack: move rev-list code out of check_non_tip()
 - upload-pack: tighten number parsing at "deepen" lines
 - upload-pack: use skip_prefix() instead of starts_with()
 - upload-pack: move "unshallow" sending code out of deepen()
 - upload-pack: remove unused variable "backup"
 - upload-pack: move "shallow" sending code out of deepen()
 - upload-pack: move shallow deepen code out of receive_needs()
 - transport-helper.c: refactor set_helper_option()
 - remote-curl.c: convert fetch_git() to use argv_array

 The existing "git fetch --depth=<n>" option was hard to use
 correctly when making the history of an existing shallow clone
 deeper.  A new option, "--deepen=<n>", has been added to make this
 easier to use.  "git clone" also learned "--shallow-since=<date>"
 and "--shallow-exclude=<tag>" options to make it easier to specify
 "I am interested only in the recent N months worth of history" and
 "Give me only the history since that version".

 Needs review.


* sg/completion-updates (2016-02-28) 21 commits
 . completion: cache the path to the repository
 . completion: extract repository discovery from __gitdir()
 . completion: don't guard git executions with __gitdir()
 . completion: consolidate silencing errors from git commands
 . completion: don't use __gitdir() for git commands
 . completion: respect 'git -C <path>'
 . completion: fix completion after 'git -C <path>'
 . completion: don't offer commands when 'git --opt' needs an argument
 . rev-parse: add '--absolute-git-dir' option
 . completion: list short refs from a remote given as a URL
 . completion: don't list 'HEAD' when trying refs completion outside of a repo
 . completion: list refs from remote when remote's name matches a directory
 . completion: respect 'git --git-dir=<path>' when listing remote refs
 . completion: fix most spots not respecting 'git --git-dir=<path>'
 . completion: ensure that the repository path given on the command line exists
 . completion tests: add tests for the __git_refs() helper function
 . completion tests: check __gitdir()'s output in the error cases
 . completion tests: consolidate getting path of current working directory
 . completion tests: make the $cur variable local to the test helper functions
 . completion tests: don't add test cruft to the test repository
 . completion: improve __git_refs()'s in-code documentation

 Will be rerolled.
 ($gmane/287839)


* az/p4-bare-no-rebase (2016-02-19) 1 commit
 - git-p4.py: Don't try to rebase on submit from bare repository

 "git p4 submit" attempts to do a rebase, which would fail if done
 in a bare repository.  Not doing this rebase would paper over the
 failure, which is what this patch does, but it is unclear what the
 side effect of not rebasing is.

 Needs a better explanation.


* nd/icase (2016-02-15) 12 commits
 - grep.c: reuse "icase" variable
 - diffcore-pickaxe: support case insensitive match on non-ascii
 - diffcore-pickaxe: "share" regex error handling code
 - grep/pcre: support utf-8
 - gettext: add is_utf8_locale()
 - grep/pcre: prepare locale-dependent tables for icase matching
 - grep/icase: avoid kwsset when -F is specified
 - grep/icase: avoid kwsset on literal non-ascii strings
 - test-regex: expose full regcomp() to the command line
 - test-regex: isolate the bug test code
 - grep: break down an "if" stmt in preparation for next changes
 - grep: allow -F -i combination

 "git grep -i" has been taught to fold case in non-ascii locales.

 Needs review.
 ($gmane/286137)


* ec/annotate-deleted (2015-11-20) 1 commit
 - annotate: skip checking working tree if a revision is provided

 Usability fix for annotate-specific "<file> <rev>" syntax with deleted
 files.

 Waiting for review.


* dg/subtree-rebase-test (2016-01-19) 1 commit
 - contrib/subtree: Add a test for subtree rebase that loses commits

 Reviewed up to v5.
 Will be rerolled.
 ($gmane/284426)


* js/am-3-merge-recursive-direct (2015-10-12) 2 commits
 - am: make a direct call to merge_recursive
 - merge_recursive_options: introduce the "gently" flag

 The merge_recursive_generic() function has been made a bit safer to
 call from inside a process.  "git am -3" was taught to make a direct
 call to the function when falling back to three-way merge.

 Being able to make a direct call would be good in general, but as a
 performance thing, the change needs to be backed up by numbers.

 I haven't gone through the "gently" change with fine toothed comb;
 I can see that the change avoids calling die(), but I haven't made
 sure that the program states (e.g. what's in the in-core index) are
 adjusted sensibly when it returns to the caller instead of dying,
 or the codepaths that used to die() are free of resource leaks.
 The original code certainly did not care the program states at the
 point of dying exactly because it knew it is going to exit, but now
 they have to care, and they need to be audited.

 Will be rerolled.
 ($gmane/292205)


* dk/gc-more-wo-pack (2016-01-13) 4 commits
 - gc: clean garbage .bitmap files from pack dir
 - t5304: ensure non-garbage files are not deleted
 - t5304: test .bitmap garbage files
 - prepare_packed_git(): find more garbage

 Follow-on to dk/gc-idx-wo-pack topic, to clean up stale
 .bitmap and .keep files.

 Waiting for a reroll.
 ($gmane/284368).


* jc/diff-b-m (2015-02-23) 5 commits
 . WIPWIP
 . WIP: diff-b-m
 - diffcore-rename: allow easier debugging
 - diffcore-rename.c: add locate_rename_src()
 - diffcore-break: allow debugging

 "git diff -B -M" produced incorrect patch when the postimage of a
 completely rewritten file is similar to the preimage of a removed
 file; such a resulting file must not be expressed as a rename from
 other place.

 The fix in this patch is broken, unfortunately.
 Will discard.

--------------------------------------------------
[Cooking]

* ss/commit-dry-run-resolve-merge-to-no-op (2016-02-17) 1 commit
  (merged to 'next' on 2016-05-10 at 2ada404)
 + wt-status.c: set commitable bit if there is a meaningful merge.

 "git commit --dry-run" reported "No, no, you cannot commit." in one
 case where "git commit" would have allowed you to commit, and this
 improves it a little bit ("git commit --dry-run --short" still does
 not give you the correct answer, for example).  This is a stop-gap
 measure in that "commit --short --dry-run" still gives an incorrect
 result.

 Will merge to 'master'.


* ak/t4151-ls-files-could-be-empty (2016-05-09) 1 commit
  (merged to 'next' on 2016-05-10 at 36ae38c)
 + t4151: make sure argument to 'test -z' is given

 Test fix.

 Will merge to 'master'.


* es/test-gpg-tags (2016-05-09) 1 commit
  (merged to 'next' on 2016-05-10 at 9fcb98b)
 + t6302: simplify non-gpg cases

 Test fix.

 Will merge to 'master'.


* jc/test-seq (2016-05-09) 2 commits
  (merged to 'next' on 2016-05-10 at 1512890)
 + test-lib-functions.sh: rewrite test_seq without Perl
 + test-lib-functions.sh: remove misleading comment on test_seq

 Test fix.

 Will merge to 'master'.


* js/windows-dotgit (2016-05-11) 2 commits
  (merged to 'next' on 2016-05-11 at d10caa2)
 + mingw: remove unnecessary definition
 + mingw: introduce the 'core.hideDotFiles' setting

 On Windows, .git and optionally any files whose name starts with a
 dot are now marked as hidden, with a core.hideDotFiles knob to
 customize this behaviour.

 Will merge to 'master'.


* nd/error-errno (2016-05-09) 41 commits
  (merged to 'next' on 2016-05-10 at 1cdeda8)
 + wrapper.c: use warning_errno()
 + vcs-svn: use error_errno()
 + upload-pack.c: use error_errno()
 + unpack-trees.c: use error_errno()
 + transport-helper.c: use error_errno()
 + sha1_file.c: use {error,die,warning}_errno()
 + server-info.c: use error_errno()
 + sequencer.c: use error_errno()
 + run-command.c: use error_errno()
 + rerere.c: use error_errno() and warning_errno()
 + reachable.c: use error_errno()
 + mailmap.c: use error_errno()
 + ident.c: use warning_errno()
 + http.c: use error_errno() and warning_errno()
 + grep.c: use error_errno()
 + gpg-interface.c: use error_errno()
 + fast-import.c: use error_errno()
 + entry.c: use error_errno()
 + editor.c: use error_errno()
 + diff-no-index.c: use error_errno()
 + credential-cache--daemon.c: use warning_errno()
 + copy.c: use error_errno()
 + connected.c: use error_errno()
 + config.c: use error_errno()
 + compat/win32/syslog.c: use warning_errno()
 + combine-diff.c: use error_errno()
 + check-racy.c: use error_errno()
 + builtin/worktree.c: use error_errno()
 + builtin/upload-archive.c: use error_errno()
 + builtin/update-index.c: prefer "err" to "errno" in process_lstat_error
 + builtin/rm.c: use warning_errno()
 + builtin/pack-objects.c: use die_errno() and warning_errno()
 + builtin/merge-file.c: use error_errno()
 + builtin/mailsplit.c: use error_errno()
 + builtin/help.c: use warning_errno()
 + builtin/fetch.c: use error_errno()
 + builtin/branch.c: use error_errno()
 + builtin/am.c: use error_errno()
 + bisect.c: use die_errno() and warning_errno()
 + usage.c: add warning_errno() and error_errno()
 + usage.c: move format processing out of die_errno()

 The code for warning_errno/die_errno has been refactored and a new
 error_errno() reporting helper is introduced.

 Will merge to 'master'.


* nd/remote-plural-ours-plus-theirs (2016-05-06) 1 commit
  (merged to 'next' on 2016-05-10 at aea08dc)
 + remote.c: specify correct plural form in "commit diverge" message

 Message fix.

 Will merge to 'master'.


* nd/test-helpers (2016-05-10) 1 commit
  (merged to 'next' on 2016-05-10 at e8ad58d)
 + wrap-for-bin.sh: regenerate bin-wrappers when switching branches

 Switching between 'master' and 'next', between which the paths to
 test helper binaries have changed, did not update bin-wrappers/*
 scripts used in tests, causing false test failures.

 Will merge to 'master'.


* tb/core-eol-fix (2016-04-25) 4 commits
  (merged to 'next' on 2016-05-10 at fa8a200)
 + convert.c: ident + core.autocrlf didn't work
 + t0027: test cases for combined attributes
 + convert: allow core.autocrlf=input and core.eol=crlf
 + t0027: make commit_chk_wrnNNO() reliable

 A couple of bugs around core.autocrlf have been fixed.

 Will merge to 'master'.


* tb/t5601-sed-fix (2016-05-09) 1 commit
  (merged to 'next' on 2016-05-10 at d3e54e8)
 + t5601: Remove trailing space in sed expression

 Test fix.

 Will merge to 'master'.


* va/i18n-remote-comment-to-align (2016-05-09) 1 commit
  (merged to 'next' on 2016-05-10 at edbacbb)
 + i18n: remote: add comment for translators

 Message fix.

 Will merge to 'master'.


* jc/linkgit-fix (2016-05-09) 1 commit
  (merged to 'next' on 2016-05-10 at 0e5ba60)
 + Documentation: fix linkgit references

 Many 'linkgit:<git documentation page>' references were broken,
 which are all fixed with this.

 Will merge to 'master'.


* js/http-custom-headers (2016-05-10) 4 commits
  (merged to 'next' on 2016-05-10 at 7cf5cca)
 + submodule: ensure that -c http.extraheader is heeded
 + Merge branch 'jk/submodule-c-credential' into js/http-custom-headers
 + t5551: make the test for extra HTTP headers more robust
 + tests: adjust the configuration for Apache 2.2
 (this branch uses jk/submodule-c-credential.)

 Update tests for "http.extraHeaders=<header>" to be portable back
 to Apache 2.2 (the original depended on <RequireAll/> which is a
 more recent feature).

 Will merge to 'master'.


* sb/submodule-deinit-all (2016-05-05) 1 commit
  (merged to 'next' on 2016-05-09 at 0fd4518)
 + submodule deinit: require '--all' instead of '.' for all submodules

 Correct faulty recommendation to use "git submodule deinit ." when
 de-initialising all submodules, which would result in a strange
 error message in a pathological corner case.

 Will merge to 'master'.


* bn/config-doc-tt-varnames (2016-05-05) 1 commit
  (merged to 'next' on 2016-05-10 at aa7b834)
 + config: consistently format $variables in monospaced font
 (this branch uses jc/config-pathname-type.)

 Doc formatting fixes.

 Will merge to 'master'.


* lp/typofixes (2016-05-06) 1 commit
  (merged to 'next' on 2016-05-09 at 59683be)
 + typofix: assorted typofixes in comments, documentation and messages

 Will merge to 'master'.


* sb/z-is-gnutar-ism (2016-05-09) 2 commits
  (merged to 'next' on 2016-05-09 at 51d527d)
 + t6041: do not compress backup tar file
 + t3513: do not compress backup tar file

 Will merge to 'master'.


* jc/test-parse-options-expect (2016-05-10) 4 commits
  (merged to 'next' on 2016-05-10 at 3ca5783)
 + t0040: convert a few tests to use test-parse-options --expect
 + t0040: remove unused test helpers
 + test-parse-options: --expect=<string> option to simplify tests
 + test-parse-options: fix output when callback option fails
 (this branch uses pb/commit-verbose-config.)

 t0040 had too many unnecessary repetitions in its test data.  Teach
 test-parse-options program so that a caller can tell what it
 expects in its output, so that these repetitions can be cleaned up.

 Will merge to 'master'.


* jc/doc-lint (2016-05-10) 1 commit
 - ci: validate "linkgit:" in documentation

 Find common mistakes when writing gitlink: in our documentation and
 drive the check from "make check-docs".


* jc/commit-tree-ignore-commit-gpgsign (2016-05-03) 1 commit
  (merged to 'next' on 2016-05-06 at 08eccb2)
 + commit-tree: do not pay attention to commit.gpgsign

 "git commit-tree" plumbing command required the user to always sign
 its result when the user sets the commit.gpgsign configuration
 variable, which was an ancient mistake.  Rework "git rebase" that
 relied on this mistake so that it reads commit.gpgsign and pass (or
 not pass) the -S option to "git commit-tree" to keep the end-user
 expectation the same, while teaching "git commit-tree" to ignore
 the configuration variable.  This will stop requiring the users to
 sign commit objects used internally as an implementation detail of
 "git stash".

 Will merge to 'master'.


* jk/push-client-deadlock-fix (2016-05-11) 2 commits
  (merged to 'next' on 2016-05-11 at 8f4abf9)
 + Windows: only add a no-op pthread_sigmask() when needed
  (merged to 'next' on 2016-05-06 at e91626c)
 + Windows: add pthread_sigmask() that does nothing

 Some Windows SDK lacks pthread_sigmask() implementation and fails
 to compile the recently updated "git push" codepath that uses it.

 Will merge to 'master'.


* sb/submodule-module-list-pathspec-fix (2016-05-03) 1 commit
  (merged to 'next' on 2016-05-06 at ab6dac3)
 + submodule deinit test: fix broken && chain in subshell

 Will merge to 'master'.


* ab/hooks (2016-05-04) 4 commits
  (merged to 'next' on 2016-05-09 at 23cf808)
 + hooks: allow customizing where the hook directory is
 + githooks.txt: minor improvements to the grammar & phrasing
 + githooks.txt: amend dangerous advice about 'update' hook ACL
 + githooks.txt: improve the intro section

 A new configuration variable core.hooksPath allows customizing
 where the hook directory is.

 Will merge to 'master'.


* jc/merge-impossible-no-commit (2016-04-26) 2 commits
 - merge: warn --no-commit merge when no new commit is created
 - merge: do not contaminate option_commit with --squash

 "git merge --no-commit" silently succeeded when there is no need to
 create any commit, either when you are more recent than the commit
 you tried to merge, or you can fast-forward to the commit you tried
 to merge.  The command gives a warning message in such cases.

 Just tying loose ends in a discussion.  Unless somebody else
 champions this topic, I'll drop it.


* mh/split-under-lock (2016-05-06) 33 commits
 - lock_ref_sha1_basic(): only handle REF_NODEREF mode
 - commit_ref_update(): remove the flags parameter
 - lock_ref_for_update(): don't resolve symrefs
 - lock_ref_for_update(): don't re-read non-symbolic references
 - refs: resolve symbolic refs first
 - ref_transaction_update(): check refname_is_safe() at a minimum
 - unlock_ref(): move definition higher in the file
 - lock_ref_for_update(): new function
 - add_update(): initialize the whole ref_update
 - verify_refname_available(): adjust constness in declaration
 - refs: don't dereference on rename
 - refs: allow log-only updates
 - delete_branches(): use resolve_refdup()
 - ref_transaction_commit(): correctly report close_ref() failure
 - ref_transaction_create(): disallow recursive pruning
 - refs: make error messages more consistent
 - lock_ref_sha1_basic(): remove unneeded local variable
 - read_raw_ref(): move docstring to header file
 - read_raw_ref(): improve docstring
 - read_raw_ref(): rename symref argument to referent
 - read_raw_ref(): clear *type at start of function
 - read_raw_ref(): rename flags argument to type
 - ref_transaction_commit(): remove local variable n
 - rename_ref(): remove unneeded local variable
 - commit_ref_update(): write error message to *err, not stderr
 - refname_is_safe(): insist that the refname already be normalized
 - refname_is_safe(): don't allow the empty string
 - refname_is_safe(): use skip_prefix()
 - remove_dir_recursively(): add docstring
 - safe_create_leading_directories(): improve docstring
 - read_raw_ref(): don't get confused by an empty directory
 - commit_ref(): if there is an empty dir in the way, delete it
 - t1404: demonstrate a bug resolving references

 Further preparatory work on the refs API before the pluggable
 backend series can land.

 Updated.  Will wait for comments for the last time, and then
 merge to 'next'.


* bn/http-cookiefile-config (2016-05-04) 2 commits
  (merged to 'next' on 2016-05-09 at d519b13)
 + http: expand http.cookieFile as a path
 + Documentation: config: improve word ordering for http.cookieFile

 "http.cookieFile" configuration variable clearly wants a pathname,
 but we forgot to treat it as such by e.g. applying tilde expansion.

 Will merge to 'master'.


* jc/config-pathname-type (2016-05-04) 1 commit
  (merged to 'next' on 2016-05-09 at 0876e55)
 + config: describe 'pathname' value type
 (this branch is used by bn/config-doc-tt-varnames.)

 Consolidate description of tilde-expansion that is done to
 configuration variables that take pathname to a single place.

 Will merge to 'master'.


* jk/submodule-c-credential (2016-05-06) 6 commits
  (merged to 'next' on 2016-05-10 at 4abe871)
 + submodule: stop sanitizing config options
 + submodule: use prepare_submodule_repo_env consistently
 + submodule--helper: move config-sanitizing to submodule.c
 + submodule: export sanitized GIT_CONFIG_PARAMETERS
 + t5550: break submodule config test into multiple sub-tests
 + t5550: fix typo in $HTTPD_URL
 (this branch is used by js/http-custom-headers.)

 An earlier addition of "sanitize_submodule_env" with 14111fc4 (git:
 submodule honor -c credential.* from command line, 2016-02-29)
 turned out to be a convoluted no-op; implement what it wanted to do
 correctly, and stop filtering settings given via "git -c var=val".

 Will merge to 'master'.


* mh/connect-leak (2016-04-28) 1 commit
 - git_connect(): fix memory leak with CONNECT_DIAG_URL

 Is already made obsolete with a patch in flight under discussion.
 ($gmane/292962)

 Will discard.


* ew/fast-import-unpack-limit (2016-05-11) 1 commit
  (merged to 'next' on 2016-05-11 at ffd4efb)
 + fast-import: implement unpack limit

 "git fast-import" learned the same performance trick to avoid
 creating too small a packfile as "git fetch" and "git push" have,
 using *.unpackLimit configuration.

 Will merge to 'master'.


* nd/worktree-various-heads (2016-04-22) 13 commits
  (merged to 'next' on 2016-05-10 at 61d3415)
 + branch: do not rename a branch under bisect or rebase
 + worktree.c: check whether branch is bisected in another worktree
 + wt-status.c: split bisect detection out of wt_status_get_state()
 + worktree.c: check whether branch is rebased in another worktree
 + worktree.c: avoid referencing to worktrees[i] multiple times
 + wt-status.c: make wt_status_check_rebase() work on any worktree
 + wt-status.c: split rebase detection out of wt_status_get_state()
 + path.c: refactor and add worktree_git_path()
 + worktree.c: mark current worktree
 + worktree.c: make find_shared_symref() return struct worktree *
 + worktree.c: store "id" instead of "git_dir"
 + path.c: add git_common_path() and strbuf_git_common_path()
 + dir.c: rename str(n)cmp_icase to fspath(n)cmp
 (this branch is used by nd/worktree-cleanup-post-head-protection.)

 The experimental "multiple worktree" feature gains more safety to
 forbid operations on a branch that is checked out or being actively
 worked on elsewhere, by noticing that e.g. it is being rebased.

 Will merge to 'master'.


* pb/commit-verbose-config (2016-05-10) 7 commits
 + commit: add a commit.verbose config variable
 + t7507-commit-verbose: improve test coverage by testing number of diffs
 + parse-options.c: make OPTION_COUNTUP respect "unspecified" values
 + t/t7507: improve test coverage
 + t0040-parse-options: improve test coverage
 + test-parse-options: print quiet as integer
 + t0040-test-parse-options.sh: fix style issues
 (this branch is used by jc/test-parse-options-expect.)

 "git commit" learned to pay attention to "commit.verbose"
 configuration variable and act as if "--verbose" option was
 given from the command line.

 Will merge to 'master'.


* jc/fsck-nul-in-commit (2016-05-10) 2 commits
  (merged to 'next' on 2016-05-10 at 3bc3ca3)
 + fsck: detect and warn a commit with embedded NUL
 + fsck_commit_buffer(): do not special case the last validation

 "git fsck" learned to catch NUL byte in a commit object as
 potential error and warn.

 Will merge to 'master'.


* jc/ll-merge-internal (2016-05-09) 3 commits
  (merged to 'next' on 2016-05-10 at a6bf1d0)
 + t6036: remove pointless test that expects failure
 + ll-merge: use a longer conflict marker for internal merge
 + ll-merge: fix typo in comment

 "git rerere" can get confused by conflict markers deliberately left
 by the inner merge step, because they are indistinguishable from
 the real conflict markers left by the outermost merge which are
 what the end user and "rerere" need to look at.  This was fixed by
 making the conflict markers left by the inner merges a bit longer.

 Will merge to 'master'.


* sb/submodule-init (2016-05-03) 7 commits
  (merged to 'next' on 2016-05-03 at 8a5fce4)
 + submodule init: redirect stdout to stderr
  (merged to 'next' on 2016-04-29 at 3e81ee88)
 + submodule--helper update-clone: abort gracefully on missing .gitmodules
 + submodule init: fail gracefully with a missing .gitmodules file
  (merged to 'next' on 2016-04-27 at afaad81)
 + submodule: port init from shell to C
 + submodule: port resolve_relative_url from shell to C
 + Merge branch 'sb/submodule-path-misc-bugs' into sb/submodule-init
 + Merge branch 'sb/submodule-helper-clone-regression-fix' into sb/submodule-init

 Update of "git submodule" to move pieces of logic to C continues.

 Will cook for a bit more in 'next'.


* jc/send-email-skip-backup (2016-04-12) 1 commit
 - send-email: detect and offer to skip backup files

 A careless invocation of "git send-email directory/" after editing
 0001-change.patch with an editor often ends up sending both
 0001-change.patch and its backup file, 0001-change.patch~, causing
 embarrassment and a minor confusion.  Detect such an input and
 offer to skip the backup files when sending the patches out.

 Needs review.


* va/i18n-misc-updates (2016-04-19) 9 commits
  (merged to 'next' on 2016-05-10 at b5dbd0d)
 + i18n: builtin/pull.c: split strings marked for translation
 + i18n: builtin/pull.c: mark placeholders for translation
 + i18n: git-parse-remote.sh: mark strings for translation
 + i18n: branch: move comment for translators
 + i18n: branch: unmark string for translation
 + i18n: builtin/rm.c: remove a comma ',' from string
 + i18n: unpack-trees: mark strings for translation
 + i18n: builtin/branch.c: mark option for translation
 + i18n: index-pack: use plural string instead of normal one

 Mark several messages for translation.

 Will merge to 'master'.


* kn/ref-filter-branch-list (2016-04-25) 17 commits
 - branch: implement '--format' option
 - branch: use ref-filter printing APIs
 - branch, tag: use porcelain output
 - ref-filter: allow porcelain to translate messages in the output
 - ref-filter: add `:dir` and `:base` options for ref printing atoms
 - ref-filter: make remote_ref_atom_parser() use refname_atom_parser_internal()
 - ref-filter: introduce symref_atom_parser() and refname_atom_parser()
 - ref-filter: introduce refname_atom_parser_internal()
 - ref-filter: make "%(symref)" atom work with the ':short' modifier
 - ref-filter: add support for %(upstream:track,nobracket)
 - ref-filter: make %(upstream:track) prints "[gone]" for invalid upstreams
 - ref-filter: introduce format_ref_array_item()
 - ref-filter: move get_head_description() from branch.c
 - ref-filter: modify "%(objectname:short)" to take length
 - ref-filter: implement %(if:equals=<string>) and %(if:notequals=<string>)
 - ref-filter: include reference to 'used_atom' within 'atom_value'
 - ref-filter: implement %(if), %(then), and %(else) atoms

 The code to list branches in "git branch" has been consolidated
 with the more generic ref-filter API.

 Needs review.


* xy/format-patch-base (2016-04-26) 4 commits
  (merged to 'next' on 2016-05-10 at dd19e0a)
 + format-patch: introduce format.useAutoBase configuration
 + format-patch: introduce --base=auto option
 + format-patch: add '--base' option to record base tree info
 + patch-ids: make commit_patch_id() a public helper function

 "git format-patch" learned a new "--base" option to record what
 (public, well-known) commit the original series was built on in
 its output.

 Will merge to 'master'.


* dt/index-helper (2016-05-09) 19 commits
 - untracked-cache: config option
 - trace: measure where the time is spent in the index-heavy operations
 - index-helper: optionally automatically run
 - index-helper: autorun mode
 - index-helper: don't run if already running
 - index-helper: kill mode
 - watchman: add a config option to enable the extension
 - unpack-trees: preserve index extensions
 - update-index: enable/disable watchman support
 - index-helper: use watchman to avoid refreshing index with lstat()
 - watchman: support watchman to reduce index refresh cost
 - read-cache: add watchman 'WAMA' extension
 - index-helper: add --detach
 - daemonize(): set a flag before exiting the main process
 - index-helper: log warnings
 - index-helper: add --strict
 - index-helper: new daemon for caching index and related stuff
 - read-cache: allow to keep mmap'd memory after reading
 - read-cache.c: fix constness of verify_hdr()

 Needs review.
 ($gmane/294056).


* jc/bundle (2016-03-03) 6 commits
 - index-pack: --clone-bundle option
 - Merge branch 'jc/index-pack' into jc/bundle
 - bundle v3: the beginning
 - bundle: keep a copy of bundle file name in the in-core bundle header
 - bundle: plug resource leak
 - bundle doc: 'verify' is not about verifying the bundle

 The beginning of "split bundle", which could be one of the
 ingredients to allow "git clone" traffic off of the core server
 network to CDN.


* jc/merge-drop-old-syntax (2015-04-29) 1 commit
 - merge: drop 'git merge <message> HEAD <commit>' syntax

 Stop supporting "git merge <message> HEAD <commit>" syntax that has
 been deprecated since October 2007, and issues a deprecation
 warning message since v2.5.0.

 It has been reported that git-gui still uses the deprecated syntax,
 which needs to be fixed before this final step can proceed.
 ($gmane/282594)

--------------------------------------------------
[Discarded]

* jc/diff-compact-always-use-blank-heuristics (2016-04-29) 1 commit
 . diff: enable "compaction heuristics" and lose experimentation knob

 Superseded by the tip commit on the jk/diff-compact-heuristic topic.

^ permalink raw reply	[relevance 3%]

* What's cooking in git.git (May 2016, #05; Fri, 13)
@ 2016-05-13 22:11  3% Junio C Hamano
  0 siblings, 0 replies; 200+ results
From: Junio C Hamano @ 2016-05-13 22:11 UTC (permalink / raw)
  To: git

Here are the topics that have been cooking.  Commits prefixed with
'-' are only in 'pu' (proposed updates) while commits prefixed with
'+' are in 'next'.  The ones marked with '.' do not appear in any of
the integration branches, but I am still holding onto them.

The 'master' branch now has the eleventh batch of topics of this
cycle.  On the 'maint' front, 2.8.2 is out and fixes that have been
in 'master' accumulates on it for 2.8.3.

You can find the changes described here in the integration branches
of the repositories listed at

    http://git-blame.blogspot.com/p/git-public-repositories.html

--------------------------------------------------
[Graduated to "master"]

* jc/commit-tree-ignore-commit-gpgsign (2016-05-03) 1 commit
  (merged to 'next' on 2016-05-06 at 08eccb2)
 + commit-tree: do not pay attention to commit.gpgsign

 "git commit-tree" plumbing command required the user to always sign
 its result when the user sets the commit.gpgsign configuration
 variable, which was an ancient mistake.  Rework "git rebase" that
 relied on this mistake so that it reads commit.gpgsign and pass (or
 not pass) the -S option to "git commit-tree" to keep the end-user
 expectation the same, while teaching "git commit-tree" to ignore
 the configuration variable.  This will stop requiring the users to
 sign commit objects used internally as an implementation detail of
 "git stash".


* sb/submodule-module-list-pathspec-fix (2016-05-03) 1 commit
  (merged to 'next' on 2016-05-06 at ab6dac3)
 + submodule deinit test: fix broken && chain in subshell

--------------------------------------------------
[New Topics]

* jc/rerere-multi (2016-05-11) 1 commit
  (merged to 'next' on 2016-05-13 at f4d1d82)
 + rerere: plug memory leaks upon "rerere forget" failure

 Will merge to 'master'.


* cc/apply-introduce-state (2016-05-12) 48 commits
 - builtin/apply: rename 'prefix_' parameter to 'prefix'
 - builtin/apply: move applying patches into apply_all_patches()
 - builtin/apply: move 'state' check into check_apply_state()
 - builtin/apply: move 'symlink_changes' global into 'struct apply_state'
 - builtin/apply: move 'fn_table' global into 'struct apply_state'
 - builtin/apply: move 'state_linenr' global into 'struct apply_state'
 - builtin/apply: move 'max_change' and 'max_len' into 'struct apply_state'
 - builtin/apply: move 'ws_ignore_action' into 'struct apply_state'
 - builtin/apply: move 'ws_error_action' into 'struct apply_state'
 - builtin/apply: move 'applied_after_fixing_ws' into 'struct apply_state'
 - builtin/apply: move 'squelch_whitespace_errors' into 'struct apply_state'
 - builtin/apply: remove whitespace_option arg from set_default_whitespace_mode()
 - builtin/apply: move 'whitespace_option' into 'struct apply_state'
 - builtin/apply: move 'whitespace_error' global into 'struct apply_state'
 - builtin/apply: move 'root' global into 'struct apply_state'
 - builtin/apply: move 'p_value_known' global into 'struct apply_state'
 - builtin/apply: move 'p_value' global into 'struct apply_state'
 - builtin/apply: move 'has_include' global into 'struct apply_state'
 - builtin/apply: move 'limit_by_name' global into 'struct apply_state'
 - builtin/apply: move 'patch_input_file' global into 'struct apply_state'
 - builtin/apply: move 'apply' global into 'struct apply_state'
 - builtin/apply: move 'p_context' global into 'struct apply_state'
 - builtin/apply: move 'fake_ancestor' global into 'struct apply_state'
 - builtin/apply: move 'line_termination' global into 'struct apply_state'
 - builtin/apply: move 'unsafe_paths' global into 'struct apply_state'
 - builtin/apply: move 'no_add' global into 'struct apply_state'
 - builtin/apply: move 'threeway' global into 'struct apply_state'
 - builtin/apply: move 'summary' global into 'struct apply_state'
 - builtin/apply: move 'numstat' global into 'struct apply_state'
 - builtin/apply: move 'diffstat' global into 'struct apply_state'
 - builtin/apply: move 'cached' global into 'struct apply_state'
 - builtin/apply: move 'allow_overlap' global into 'struct apply_state'
 - builtin/apply: move 'update_index' global into 'struct apply_state'
 - builtin/apply: move 'apply_verbosely' global into 'struct apply_state'
 - builtin/apply: move 'apply_with_reject' global into 'struct apply_state'
 - builtin/apply: move 'apply_in_reverse' global into 'struct apply_state'
 - builtin/apply: move 'check_index' global into 'struct apply_state'
 - builtin/apply: move 'check' global into 'struct apply_state'
 - builtin/apply: move 'unidiff_zero' global into 'struct apply_state'
 - builtin/apply: move 'state' init into init_apply_state()
 - builtin/apply: introduce 'struct apply_state' to start libifying
 - builtin/apply: move 'read_stdin' global into cmd_apply()
 - builtin/apply: move 'options' variable into cmd_apply()
 - builtin/apply: extract line_by_line_fuzzy_match() from match_fragment()
 - builtin/apply: avoid local variable shadowing 'len' parameter
 - builtin/apply: avoid parameter shadowing 'linenr' global
 - builtin/apply: avoid parameter shadowing 'p_value' global
 - builtin/apply: make gitdiff_verify_name() return void

 The "git apply" standalone program is being libified; this is the
 first step to move many state variables into a structure that can
 be explicitly (re)initialized to make the machinery callable more
 than once.

 The next step that moves some remaining state variables into the
 structure and turns die()s into an error return that propagates up
 to the caller is not queued yet but in flight.  It would be good to
 review the above first and give the remainder of the series a solid
 base to build on.


* jk/test-z-n-unquoted (2016-05-13) 6 commits
 - always quote shell arguments to test -z/-n
 - t9103: modernize test style
 - t9107: switch inverted single/double quotes in test
 - t9107: use "return 1" instead of "exit 1"
 - t9100,t3419: enclose all test code in single-quotes
 - t/lib-git-svn: drop $remote_git_svn and $git_svn_id

 t9xxx series has been updated primarily for readability, while
 fixing small bugs in it.  A few scripted Porcelains have also been
 updated to fix possible bugs around their use of "test -z" and
 "test -n".

 Will merge to 'next'.


* kf/gpg-sig-verification-doc (2016-05-13) 1 commit
  (merged to 'next' on 2016-05-13 at 2cec353)
 + Documentation: clarify signature verification

 Documentation for "git merge --verify-signatures" has been updated
 to clarify that the signature of only the commit at the tip is
 verified.  Also the phrasing used for signature and key validity is
 adjusted to align with that used by OpenPGP.

 Will merge to 'master'.


* pb/bisect (2016-05-13) 4 commits
 - t6030: explicitly test for bisection cleanup
 - bisect--helper: `write_terms` shell function in C
 - bisect: rewrite `check_term_format` shell function in C
 - bisect--helper: use OPT_CMDMODE instead of OPT_BOOL

 Beginning of GSoC "git bisect" project.


* sb/pathspec-label (2016-05-12) 5 commits
 - pathspec: record labels
 - pathspec: move prefix check out of the inner loop
 - pathspec: move long magic parsing out of prefix_pathspec
 - Documentation: correct typo in example for querying attributes
 - Documentation: fix a typo

 The pathspec mechanism learned ":(label=X)$pattern" pathspec magic
 to limit paths that match $pattern further by labels defined by the
 attributes mechanism for the paths.

 (RFC/WIP)

--------------------------------------------------
[Stalled]

* es/t1500-modernize (2016-05-10) 7 commits
 - t1500: finish preparation upfront
 - t1500: be considerate to future potential tests
 - t1500: avoid setting environment variables outside of tests
 - t1500: avoid setting configuration options outside of tests
 - t1500: avoid changing working directory outside of tests
 - t1500: reduce dependence upon global state
 - t1500: test_rev_parse: facilitate future test enhancements

 test updates to make it more readable and maintainable.

 Will be rerolled.
 ($gmane/294181)


* ep/http-curl-trace (2016-05-02) 2 commits
 . imap-send.c: introduce the GIT_TRACE_CURL environment variable
 . http.c: implement the GIT_TRACE_CURL environment variable

 HTTP transport gained an option to produce more detailed debugging
 trace.

 Expecting a reroll.
 ($gmane/292074, 293236)


* sb/bisect (2016-04-15) 22 commits
 - SQUASH???
 - bisect: get back halfway shortcut
 - bisect: compute best bisection in compute_relevant_weights()
 - bisect: use a bottom-up traversal to find relevant weights
 - bisect: prepare for different algorithms based on find_all
 - bisect: rename count_distance() to compute_weight()
 - bisect: make total number of commits global
 - bisect: introduce distance_direction()
 - bisect: extract get_distance() function from code duplication
 - bisect: use commit instead of commit list as arguments when appropriate
 - bisect: replace clear_distance() by unique markers
 - bisect: use struct node_data array instead of int array
 - bisect: get rid of recursion in count_distance()
 - bisect: make algorithm behavior independent of DEBUG_BISECT
 - bisect: make bisect compile if DEBUG_BISECT is set
 - bisect: plug the biggest memory leak
 - bisect: add test for the bisect algorithm
 - t6030: generalize test to not rely on current implementation
 - t: use test_cmp_rev() where appropriate
 - t/test-lib-functions.sh: generalize test_cmp_rev
 - bisect: allow 'bisect run' if no good commit is known
 - bisect: write about `bisect next` in documentation

 The internal algorithm used in "git bisect" to find the next commit
 to check has been optimized greatly.

 Expecting a reroll.
 ($gmane/291163)


* nd/shallow-deepen (2016-04-13) 26 commits
 - fetch, upload-pack: --deepen=N extends shallow boundary by N commits
 - upload-pack: add get_reachable_list()
 - upload-pack: split check_unreachable() in two, prep for get_reachable_list()
 - t5500, t5539: tests for shallow depth excluding a ref
 - clone: define shallow clone boundary with --shallow-exclude
 - fetch: define shallow boundary with --shallow-exclude
 - upload-pack: support define shallow boundary by excluding revisions
 - refs: add expand_ref()
 - t5500, t5539: tests for shallow depth since a specific date
 - clone: define shallow clone boundary based on time with --shallow-since
 - fetch: define shallow boundary with --shallow-since
 - upload-pack: add deepen-since to cut shallow repos based on time
 - shallow.c: implement a generic shallow boundary finder based on rev-list
 - fetch-pack: use a separate flag for fetch in deepening mode
 - fetch-pack.c: mark strings for translating
 - fetch-pack: use a common function for verbose printing
 - fetch-pack: use skip_prefix() instead of starts_with()
 - upload-pack: move rev-list code out of check_non_tip()
 - upload-pack: tighten number parsing at "deepen" lines
 - upload-pack: use skip_prefix() instead of starts_with()
 - upload-pack: move "unshallow" sending code out of deepen()
 - upload-pack: remove unused variable "backup"
 - upload-pack: move "shallow" sending code out of deepen()
 - upload-pack: move shallow deepen code out of receive_needs()
 - transport-helper.c: refactor set_helper_option()
 - remote-curl.c: convert fetch_git() to use argv_array

 The existing "git fetch --depth=<n>" option was hard to use
 correctly when making the history of an existing shallow clone
 deeper.  A new option, "--deepen=<n>", has been added to make this
 easier to use.  "git clone" also learned "--shallow-since=<date>"
 and "--shallow-exclude=<tag>" options to make it easier to specify
 "I am interested only in the recent N months worth of history" and
 "Give me only the history since that version".

 Needs review.


* sg/completion-updates (2016-02-28) 21 commits
 . completion: cache the path to the repository
 . completion: extract repository discovery from __gitdir()
 . completion: don't guard git executions with __gitdir()
 . completion: consolidate silencing errors from git commands
 . completion: don't use __gitdir() for git commands
 . completion: respect 'git -C <path>'
 . completion: fix completion after 'git -C <path>'
 . completion: don't offer commands when 'git --opt' needs an argument
 . rev-parse: add '--absolute-git-dir' option
 . completion: list short refs from a remote given as a URL
 . completion: don't list 'HEAD' when trying refs completion outside of a repo
 . completion: list refs from remote when remote's name matches a directory
 . completion: respect 'git --git-dir=<path>' when listing remote refs
 . completion: fix most spots not respecting 'git --git-dir=<path>'
 . completion: ensure that the repository path given on the command line exists
 . completion tests: add tests for the __git_refs() helper function
 . completion tests: check __gitdir()'s output in the error cases
 . completion tests: consolidate getting path of current working directory
 . completion tests: make the $cur variable local to the test helper functions
 . completion tests: don't add test cruft to the test repository
 . completion: improve __git_refs()'s in-code documentation

 Will be rerolled.
 ($gmane/287839)


* az/p4-bare-no-rebase (2016-02-19) 1 commit
 - git-p4.py: Don't try to rebase on submit from bare repository

 "git p4 submit" attempts to do a rebase, which would fail if done
 in a bare repository.  Not doing this rebase would paper over the
 failure, which is what this patch does, but it is unclear what the
 side effect of not rebasing is.

 Needs a better explanation.


* nd/icase (2016-02-15) 12 commits
 - grep.c: reuse "icase" variable
 - diffcore-pickaxe: support case insensitive match on non-ascii
 - diffcore-pickaxe: "share" regex error handling code
 - grep/pcre: support utf-8
 - gettext: add is_utf8_locale()
 - grep/pcre: prepare locale-dependent tables for icase matching
 - grep/icase: avoid kwsset when -F is specified
 - grep/icase: avoid kwsset on literal non-ascii strings
 - test-regex: expose full regcomp() to the command line
 - test-regex: isolate the bug test code
 - grep: break down an "if" stmt in preparation for next changes
 - grep: allow -F -i combination

 "git grep -i" has been taught to fold case in non-ascii locales.

 Needs review.
 ($gmane/286137)


* ec/annotate-deleted (2015-11-20) 1 commit
 - annotate: skip checking working tree if a revision is provided

 Usability fix for annotate-specific "<file> <rev>" syntax with deleted
 files.

 Waiting for review.


* dg/subtree-rebase-test (2016-01-19) 1 commit
 - contrib/subtree: Add a test for subtree rebase that loses commits

 Reviewed up to v5.
 Will be rerolled.
 ($gmane/284426)


* js/am-3-merge-recursive-direct (2015-10-12) 2 commits
 - am: make a direct call to merge_recursive
 - merge_recursive_options: introduce the "gently" flag

 The merge_recursive_generic() function has been made a bit safer to
 call from inside a process.  "git am -3" was taught to make a direct
 call to the function when falling back to three-way merge.

 Being able to make a direct call would be good in general, but as a
 performance thing, the change needs to be backed up by numbers.

 I haven't gone through the "gently" change with fine toothed comb;
 I can see that the change avoids calling die(), but I haven't made
 sure that the program states (e.g. what's in the in-core index) are
 adjusted sensibly when it returns to the caller instead of dying,
 or the codepaths that used to die() are free of resource leaks.
 The original code certainly did not care the program states at the
 point of dying exactly because it knew it is going to exit, but now
 they have to care, and they need to be audited.

 Will be rerolled.
 ($gmane/292205)


* dk/gc-more-wo-pack (2016-01-13) 4 commits
 - gc: clean garbage .bitmap files from pack dir
 - t5304: ensure non-garbage files are not deleted
 - t5304: test .bitmap garbage files
 - prepare_packed_git(): find more garbage

 Follow-on to dk/gc-idx-wo-pack topic, to clean up stale
 .bitmap and .keep files.

 Waiting for a reroll.
 ($gmane/284368).


* jc/diff-b-m (2015-02-23) 5 commits
 . WIPWIP
 . WIP: diff-b-m
 - diffcore-rename: allow easier debugging
 - diffcore-rename.c: add locate_rename_src()
 - diffcore-break: allow debugging

 "git diff -B -M" produced incorrect patch when the postimage of a
 completely rewritten file is similar to the preimage of a removed
 file; such a resulting file must not be expressed as a rename from
 other place.

 The fix in this patch is broken, unfortunately.
 Will discard.


* jc/merge-impossible-no-commit (2016-04-26) 2 commits
 - merge: warn --no-commit merge when no new commit is created
 - merge: do not contaminate option_commit with --squash

 "git merge --no-commit" silently succeeded when there is no need to
 create any commit, either when you are more recent than the commit
 you tried to merge, or you can fast-forward to the commit you tried
 to merge.  The command gives a warning message in such cases.

 Just tying loose ends in a discussion.  Unless somebody else
 champions this topic, I'll drop it.

 Will discard.

--------------------------------------------------
[Cooking]

* ar/diff-args-osx-precompose (2016-05-13) 1 commit
 - diff: run arguments through precompose_argv

 Many commands normalize command line arguments from NFD to NFC
 variant of UTF-8 on OSX, but commands in the "diff" family did
 not, causing "git diff $path" to complain that no such path is
 known to Git.  They have been taught to do the normalization.

 Will merge to 'next'.


* ls/travis-build-doc (2016-05-10) 1 commit
  (merged to 'next' on 2016-05-10 at 7f63497)
 + travis-ci: build documentation

 CI test was taught to build documentation pages.

 Will merge to 'master'.


* js/t3404-typofix (2016-05-10) 1 commit
  (merged to 'next' on 2016-05-10 at cbeabc0)
 + t3404: fix typo

 Will merge to 'master'.


* jk/rebase-interative-eval-fix (2016-05-10) 1 commit
  (merged to 'next' on 2016-05-11 at 4fdf387)
 + rebase--interactive: avoid empty list in shell for-loop

 Portability enhancement for "rebase -i" to help platforms whose
 shell does not like "for i in <empty>" (which is not POSIX-kosher).

 Will merge to 'master'.


* jk/test-send-sh-x-trace-elsewhere (2016-05-11) 1 commit
  (merged to 'next' on 2016-05-11 at 273a137)
 + test-lib: set BASH_XTRACEFD automatically

 Running tests with '-x' option to trace the individual command
 executions is a useful way to debug test scripts, but some tests
 that capture the standard error stream and check what the command
 said can be broken with the trace output mixed in.  When running
 our tests under "bash", however, we can redirect the trace output
 to another file descriptor to keep the standard error of programs
 being tested intact.

 Will merge to 'master'.


* js/perf-rebase-i (2016-05-13) 3 commits
  (merged to 'next' on 2016-05-13 at eb51ddd)
 + perf: run "rebase -i" under perf
 + perf: make the tests work in worktrees
 + perf: let's disable symlinks when they are not available

 Add perf test for "rebase -i"

 Will merge to 'master'.


* nd/worktree-cleanup-post-head-protection (2016-05-10) 7 commits
 - worktree: simplify prefixing paths
 - worktree: avoid 0{40}, too many zeroes, hard to read
 - worktree.c: add clear_worktree()
 - worktree.c: use is_dot_or_dotdot()
 - git-worktree.txt: keep subcommand listing in alphabetical order
 - worktree.c: rewrite mark_current_worktree() to avoid strbuf
 - completion: support git-worktree
 (this branch uses nd/worktree-various-heads.)

 Further preparatory clean-up for "worktree" feature.

 Expecting a reroll.
 ($gmane/294136, etc.)


* va/mailinfo-doc-typofix (2016-05-11) 1 commit
  (merged to 'next' on 2016-05-11 at 7180176)
 + Documentation/git-mailinfo: fix typo

 Typofix.

 Will merge to 'master'.


* ss/commit-dry-run-resolve-merge-to-no-op (2016-02-17) 1 commit
  (merged to 'next' on 2016-05-10 at 2ada404)
 + wt-status.c: set commitable bit if there is a meaningful merge.

 "git commit --dry-run" reported "No, no, you cannot commit." in one
 case where "git commit" would have allowed you to commit, and this
 improves it a little bit ("git commit --dry-run --short" still does
 not give you the correct answer, for example).  This is a stop-gap
 measure in that "commit --short --dry-run" still gives an incorrect
 result.

 Will merge to 'master'.


* ak/t4151-ls-files-could-be-empty (2016-05-09) 1 commit
  (merged to 'next' on 2016-05-10 at 36ae38c)
 + t4151: make sure argument to 'test -z' is given

 Test fix.

 Will merge to 'master'.


* es/test-gpg-tags (2016-05-09) 1 commit
  (merged to 'next' on 2016-05-10 at 9fcb98b)
 + t6302: simplify non-gpg cases

 Test fix.

 Will merge to 'master'.


* jc/test-seq (2016-05-09) 2 commits
  (merged to 'next' on 2016-05-10 at 1512890)
 + test-lib-functions.sh: rewrite test_seq without Perl
 + test-lib-functions.sh: remove misleading comment on test_seq

 Test fix.

 Will merge to 'master'.


* js/windows-dotgit (2016-05-11) 2 commits
  (merged to 'next' on 2016-05-11 at d10caa2)
 + mingw: remove unnecessary definition
 + mingw: introduce the 'core.hideDotFiles' setting

 On Windows, .git and optionally any files whose name starts with a
 dot are now marked as hidden, with a core.hideDotFiles knob to
 customize this behaviour.

 Will merge to 'master'.


* nd/error-errno (2016-05-09) 41 commits
  (merged to 'next' on 2016-05-10 at 1cdeda8)
 + wrapper.c: use warning_errno()
 + vcs-svn: use error_errno()
 + upload-pack.c: use error_errno()
 + unpack-trees.c: use error_errno()
 + transport-helper.c: use error_errno()
 + sha1_file.c: use {error,die,warning}_errno()
 + server-info.c: use error_errno()
 + sequencer.c: use error_errno()
 + run-command.c: use error_errno()
 + rerere.c: use error_errno() and warning_errno()
 + reachable.c: use error_errno()
 + mailmap.c: use error_errno()
 + ident.c: use warning_errno()
 + http.c: use error_errno() and warning_errno()
 + grep.c: use error_errno()
 + gpg-interface.c: use error_errno()
 + fast-import.c: use error_errno()
 + entry.c: use error_errno()
 + editor.c: use error_errno()
 + diff-no-index.c: use error_errno()
 + credential-cache--daemon.c: use warning_errno()
 + copy.c: use error_errno()
 + connected.c: use error_errno()
 + config.c: use error_errno()
 + compat/win32/syslog.c: use warning_errno()
 + combine-diff.c: use error_errno()
 + check-racy.c: use error_errno()
 + builtin/worktree.c: use error_errno()
 + builtin/upload-archive.c: use error_errno()
 + builtin/update-index.c: prefer "err" to "errno" in process_lstat_error
 + builtin/rm.c: use warning_errno()
 + builtin/pack-objects.c: use die_errno() and warning_errno()
 + builtin/merge-file.c: use error_errno()
 + builtin/mailsplit.c: use error_errno()
 + builtin/help.c: use warning_errno()
 + builtin/fetch.c: use error_errno()
 + builtin/branch.c: use error_errno()
 + builtin/am.c: use error_errno()
 + bisect.c: use die_errno() and warning_errno()
 + usage.c: add warning_errno() and error_errno()
 + usage.c: move format processing out of die_errno()

 The code for warning_errno/die_errno has been refactored and a new
 error_errno() reporting helper is introduced.

 Will merge to 'master'.


* nd/remote-plural-ours-plus-theirs (2016-05-06) 1 commit
  (merged to 'next' on 2016-05-10 at aea08dc)
 + remote.c: specify correct plural form in "commit diverge" message

 Message fix.

 Will merge to 'master'.


* nd/test-helpers (2016-05-10) 1 commit
  (merged to 'next' on 2016-05-10 at e8ad58d)
 + wrap-for-bin.sh: regenerate bin-wrappers when switching branches

 Switching between 'master' and 'next', between which the paths to
 test helper binaries have changed, did not update bin-wrappers/*
 scripts used in tests, causing false test failures.

 Will merge to 'master'.


* tb/core-eol-fix (2016-04-25) 4 commits
  (merged to 'next' on 2016-05-10 at fa8a200)
 + convert.c: ident + core.autocrlf didn't work
 + t0027: test cases for combined attributes
 + convert: allow core.autocrlf=input and core.eol=crlf
 + t0027: make commit_chk_wrnNNO() reliable

 A couple of bugs around core.autocrlf have been fixed.

 Will merge to 'master'.


* tb/t5601-sed-fix (2016-05-09) 1 commit
  (merged to 'next' on 2016-05-10 at d3e54e8)
 + t5601: Remove trailing space in sed expression

 Test fix.

 Will merge to 'master'.


* va/i18n-remote-comment-to-align (2016-05-09) 1 commit
  (merged to 'next' on 2016-05-10 at edbacbb)
 + i18n: remote: add comment for translators

 Message fix.

 Will merge to 'master'.


* jc/linkgit-fix (2016-05-09) 1 commit
  (merged to 'next' on 2016-05-10 at 0e5ba60)
 + Documentation: fix linkgit references

 Many 'linkgit:<git documentation page>' references were broken,
 which are all fixed with this.

 Will merge to 'master'.


* js/http-custom-headers (2016-05-10) 4 commits
  (merged to 'next' on 2016-05-10 at 7cf5cca)
 + submodule: ensure that -c http.extraheader is heeded
 + Merge branch 'jk/submodule-c-credential' into js/http-custom-headers
 + t5551: make the test for extra HTTP headers more robust
 + tests: adjust the configuration for Apache 2.2
 (this branch uses jk/submodule-c-credential.)

 Update tests for "http.extraHeaders=<header>" to be portable back
 to Apache 2.2 (the original depended on <RequireAll/> which is a
 more recent feature).

 Will merge to 'master'.


* sb/submodule-deinit-all (2016-05-05) 1 commit
  (merged to 'next' on 2016-05-09 at 0fd4518)
 + submodule deinit: require '--all' instead of '.' for all submodules

 Correct faulty recommendation to use "git submodule deinit ." when
 de-initialising all submodules, which would result in a strange
 error message in a pathological corner case.

 Will merge to 'master'.


* bn/config-doc-tt-varnames (2016-05-05) 1 commit
  (merged to 'next' on 2016-05-10 at aa7b834)
 + config: consistently format $variables in monospaced font
 (this branch uses jc/config-pathname-type.)

 Doc formatting fixes.

 Will merge to 'master'.


* lp/typofixes (2016-05-06) 1 commit
  (merged to 'next' on 2016-05-09 at 59683be)
 + typofix: assorted typofixes in comments, documentation and messages

 Will merge to 'master'.


* sb/z-is-gnutar-ism (2016-05-09) 2 commits
  (merged to 'next' on 2016-05-09 at 51d527d)
 + t6041: do not compress backup tar file
 + t3513: do not compress backup tar file

 Will merge to 'master'.


* jc/test-parse-options-expect (2016-05-10) 4 commits
  (merged to 'next' on 2016-05-10 at 3ca5783)
 + t0040: convert a few tests to use test-parse-options --expect
 + t0040: remove unused test helpers
 + test-parse-options: --expect=<string> option to simplify tests
 + test-parse-options: fix output when callback option fails
 (this branch uses pb/commit-verbose-config.)

 t0040 had too many unnecessary repetitions in its test data.  Teach
 test-parse-options program so that a caller can tell what it
 expects in its output, so that these repetitions can be cleaned up.

 Will merge to 'master'.


* jc/doc-lint (2016-05-10) 1 commit
 - ci: validate "linkgit:" in documentation

 Find common mistakes when writing gitlink: in our documentation and
 drive the check from "make check-docs".

 I am not entirely happy with the way the script chooses what input
 file to validate, but it is not worse than not having anything, so
 let's move it forward and have the logic improved later when people
 care about it deeply.

 Will merge to 'next'.


* jk/push-client-deadlock-fix (2016-05-11) 2 commits
  (merged to 'next' on 2016-05-11 at 8f4abf9)
 + Windows: only add a no-op pthread_sigmask() when needed
  (merged to 'next' on 2016-05-06 at e91626c)
 + Windows: add pthread_sigmask() that does nothing

 Some Windows SDK lacks pthread_sigmask() implementation and fails
 to compile the recently updated "git push" codepath that uses it.

 Will merge to 'master'.


* ab/hooks (2016-05-04) 4 commits
  (merged to 'next' on 2016-05-09 at 23cf808)
 + hooks: allow customizing where the hook directory is
 + githooks.txt: minor improvements to the grammar & phrasing
 + githooks.txt: amend dangerous advice about 'update' hook ACL
 + githooks.txt: improve the intro section

 A new configuration variable core.hooksPath allows customizing
 where the hook directory is.

 Will merge to 'master'.


* mh/split-under-lock (2016-05-13) 33 commits
 - lock_ref_sha1_basic(): only handle REF_NODEREF mode
 - commit_ref_update(): remove the flags parameter
 - lock_ref_for_update(): don't resolve symrefs
 - lock_ref_for_update(): don't re-read non-symbolic references
 - refs: resolve symbolic refs first
 - ref_transaction_update(): check refname_is_safe() at a minimum
 - unlock_ref(): move definition higher in the file
 - lock_ref_for_update(): new function
 - add_update(): initialize the whole ref_update
 - verify_refname_available(): adjust constness in declaration
 - refs: don't dereference on rename
 - refs: allow log-only updates
 - delete_branches(): use resolve_refdup()
 - ref_transaction_commit(): correctly report close_ref() failure
 - ref_transaction_create(): disallow recursive pruning
 - refs: make error messages more consistent
 - lock_ref_sha1_basic(): remove unneeded local variable
 - read_raw_ref(): move docstring to header file
 - read_raw_ref(): improve docstring
 - read_raw_ref(): rename symref argument to referent
 - read_raw_ref(): clear *type at start of function
 - read_raw_ref(): rename flags argument to type
 - ref_transaction_commit(): remove local variable n
 - rename_ref(): remove unneeded local variable
 - commit_ref_update(): write error message to *err, not stderr
 - refname_is_safe(): insist that the refname already be normalized
 - refname_is_safe(): don't allow the empty string
 - refname_is_safe(): use skip_prefix()
 - remove_dir_recursively(): add docstring
 - safe_create_leading_directories(): improve docstring
 - read_raw_ref(): don't get confused by an empty directory
 - commit_ref(): if there is an empty dir in the way, delete it
 - t1404: demonstrate a bug resolving references

 Further preparatory work on the refs API before the pluggable
 backend series can land.

 Updated (again).  Will wait for comments for the last time, and
 then merge to 'next'.


* bn/http-cookiefile-config (2016-05-04) 2 commits
  (merged to 'next' on 2016-05-09 at d519b13)
 + http: expand http.cookieFile as a path
 + Documentation: config: improve word ordering for http.cookieFile

 "http.cookieFile" configuration variable clearly wants a pathname,
 but we forgot to treat it as such by e.g. applying tilde expansion.

 Will merge to 'master'.


* jc/config-pathname-type (2016-05-04) 1 commit
  (merged to 'next' on 2016-05-09 at 0876e55)
 + config: describe 'pathname' value type
 (this branch is used by bn/config-doc-tt-varnames.)

 Consolidate description of tilde-expansion that is done to
 configuration variables that take pathname to a single place.

 Will merge to 'master'.


* jk/submodule-c-credential (2016-05-06) 6 commits
  (merged to 'next' on 2016-05-10 at 4abe871)
 + submodule: stop sanitizing config options
 + submodule: use prepare_submodule_repo_env consistently
 + submodule--helper: move config-sanitizing to submodule.c
 + submodule: export sanitized GIT_CONFIG_PARAMETERS
 + t5550: break submodule config test into multiple sub-tests
 + t5550: fix typo in $HTTPD_URL
 (this branch is used by js/http-custom-headers.)

 An earlier addition of "sanitize_submodule_env" with 14111fc4 (git:
 submodule honor -c credential.* from command line, 2016-02-29)
 turned out to be a convoluted no-op; implement what it wanted to do
 correctly, and stop filtering settings given via "git -c var=val".

 Will merge to 'master'.


* mh/connect-leak (2016-04-28) 1 commit
 - git_connect(): fix memory leak with CONNECT_DIAG_URL

 Is already made obsolete with a patch in flight under discussion.
 ($gmane/292962)

 Will discard.


* ew/fast-import-unpack-limit (2016-05-11) 1 commit
  (merged to 'next' on 2016-05-11 at ffd4efb)
 + fast-import: implement unpack limit

 "git fast-import" learned the same performance trick to avoid
 creating too small a packfile as "git fetch" and "git push" have,
 using *.unpackLimit configuration.

 Will merge to 'master'.


* nd/worktree-various-heads (2016-04-22) 13 commits
  (merged to 'next' on 2016-05-10 at 61d3415)
 + branch: do not rename a branch under bisect or rebase
 + worktree.c: check whether branch is bisected in another worktree
 + wt-status.c: split bisect detection out of wt_status_get_state()
 + worktree.c: check whether branch is rebased in another worktree
 + worktree.c: avoid referencing to worktrees[i] multiple times
 + wt-status.c: make wt_status_check_rebase() work on any worktree
 + wt-status.c: split rebase detection out of wt_status_get_state()
 + path.c: refactor and add worktree_git_path()
 + worktree.c: mark current worktree
 + worktree.c: make find_shared_symref() return struct worktree *
 + worktree.c: store "id" instead of "git_dir"
 + path.c: add git_common_path() and strbuf_git_common_path()
 + dir.c: rename str(n)cmp_icase to fspath(n)cmp
 (this branch is used by nd/worktree-cleanup-post-head-protection.)

 The experimental "multiple worktree" feature gains more safety to
 forbid operations on a branch that is checked out or being actively
 worked on elsewhere, by noticing that e.g. it is being rebased.

 Will merge to 'master'.


* pb/commit-verbose-config (2016-05-10) 7 commits
 + commit: add a commit.verbose config variable
 + t7507-commit-verbose: improve test coverage by testing number of diffs
 + parse-options.c: make OPTION_COUNTUP respect "unspecified" values
 + t/t7507: improve test coverage
 + t0040-parse-options: improve test coverage
 + test-parse-options: print quiet as integer
 + t0040-test-parse-options.sh: fix style issues
 (this branch is used by jc/test-parse-options-expect.)

 "git commit" learned to pay attention to "commit.verbose"
 configuration variable and act as if "--verbose" option was
 given from the command line.

 Will merge to 'master'.


* jc/fsck-nul-in-commit (2016-05-10) 2 commits
  (merged to 'next' on 2016-05-10 at 3bc3ca3)
 + fsck: detect and warn a commit with embedded NUL
 + fsck_commit_buffer(): do not special case the last validation

 "git fsck" learned to catch NUL byte in a commit object as
 potential error and warn.

 Will merge to 'master'.


* jc/ll-merge-internal (2016-05-09) 3 commits
  (merged to 'next' on 2016-05-10 at a6bf1d0)
 + t6036: remove pointless test that expects failure
 + ll-merge: use a longer conflict marker for internal merge
 + ll-merge: fix typo in comment

 "git rerere" can get confused by conflict markers deliberately left
 by the inner merge step, because they are indistinguishable from
 the real conflict markers left by the outermost merge which are
 what the end user and "rerere" need to look at.  This was fixed by
 making the conflict markers left by the inner merges a bit longer.

 Will merge to 'master'.


* sb/submodule-init (2016-05-03) 7 commits
  (merged to 'next' on 2016-05-03 at 8a5fce4)
 + submodule init: redirect stdout to stderr
  (merged to 'next' on 2016-04-29 at 3e81ee88)
 + submodule--helper update-clone: abort gracefully on missing .gitmodules
 + submodule init: fail gracefully with a missing .gitmodules file
  (merged to 'next' on 2016-04-27 at afaad81)
 + submodule: port init from shell to C
 + submodule: port resolve_relative_url from shell to C
 + Merge branch 'sb/submodule-path-misc-bugs' into sb/submodule-init
 + Merge branch 'sb/submodule-helper-clone-regression-fix' into sb/submodule-init

 Update of "git submodule" to move pieces of logic to C continues.

 Will cook for a bit more in 'next'.


* jc/send-email-skip-backup (2016-04-12) 1 commit
 - send-email: detect and offer to skip backup files

 A careless invocation of "git send-email directory/" after editing
 0001-change.patch with an editor often ends up sending both
 0001-change.patch and its backup file, 0001-change.patch~, causing
 embarrassment and a minor confusion.  Detect such an input and
 offer to skip the backup files when sending the patches out.

 Needs review.


* va/i18n-misc-updates (2016-05-12) 10 commits
  (merged to 'next' on 2016-05-13 at 0361b16)
 + i18n: unpack-trees: avoid substituting only a verb in sentences
  (merged to 'next' on 2016-05-10 at b5dbd0d)
 + i18n: builtin/pull.c: split strings marked for translation
 + i18n: builtin/pull.c: mark placeholders for translation
 + i18n: git-parse-remote.sh: mark strings for translation
 + i18n: branch: move comment for translators
 + i18n: branch: unmark string for translation
 + i18n: builtin/rm.c: remove a comma ',' from string
 + i18n: unpack-trees: mark strings for translation
 + i18n: builtin/branch.c: mark option for translation
 + i18n: index-pack: use plural string instead of normal one

 Mark several messages for translation.

 Will merge to 'master'.


* kn/ref-filter-branch-list (2016-04-25) 17 commits
 - branch: implement '--format' option
 - branch: use ref-filter printing APIs
 - branch, tag: use porcelain output
 - ref-filter: allow porcelain to translate messages in the output
 - ref-filter: add `:dir` and `:base` options for ref printing atoms
 - ref-filter: make remote_ref_atom_parser() use refname_atom_parser_internal()
 - ref-filter: introduce symref_atom_parser() and refname_atom_parser()
 - ref-filter: introduce refname_atom_parser_internal()
 - ref-filter: make "%(symref)" atom work with the ':short' modifier
 - ref-filter: add support for %(upstream:track,nobracket)
 - ref-filter: make %(upstream:track) prints "[gone]" for invalid upstreams
 - ref-filter: introduce format_ref_array_item()
 - ref-filter: move get_head_description() from branch.c
 - ref-filter: modify "%(objectname:short)" to take length
 - ref-filter: implement %(if:equals=<string>) and %(if:notequals=<string>)
 - ref-filter: include reference to 'used_atom' within 'atom_value'
 - ref-filter: implement %(if), %(then), and %(else) atoms

 The code to list branches in "git branch" has been consolidated
 with the more generic ref-filter API.

 Needs review.


* xy/format-patch-base (2016-04-26) 4 commits
  (merged to 'next' on 2016-05-10 at dd19e0a)
 + format-patch: introduce format.useAutoBase configuration
 + format-patch: introduce --base=auto option
 + format-patch: add '--base' option to record base tree info
 + patch-ids: make commit_patch_id() a public helper function

 "git format-patch" learned a new "--base" option to record what
 (public, well-known) commit the original series was built on in
 its output.

 Will merge to 'master'.


* dt/index-helper (2016-05-13) 20 commits
 - untracked-cache: config option
 - trace: measure where the time is spent in the index-heavy operations
 - index-helper: optionally automatically run
 - index-helper: autorun mode
 - index-helper: don't run if already running
 - index-helper: kill mode
 - watchman: add a config option to enable the extension
 - unpack-trees: preserve index extensions
 - update-index: enable/disable watchman support
 - index-helper: use watchman to avoid refreshing index with lstat()
 - watchman: support watchman to reduce index refresh cost
 - read-cache: add watchman 'WAMA' extension
 - index-helper: log warnings
 - index-helper: add --detach
 - daemonize(): set a flag before exiting the main process
 - index-helper: add --strict
 - index-helper: new daemon for caching index and related stuff
 - pkt-line: add gentle version of packet_write
 - read-cache: allow to keep mmap'd memory after reading
 - read-cache.c: fix constness of verify_hdr()

 A new "index-helper" daemon has been introduced to give newly
 spawned Git process a quicker access to the data in the index, and
 optionally interface with the watchman daemon to further reduce the
 refresh cost.

 Under review.
 ($gmane/294470).


* jc/bundle (2016-03-03) 6 commits
 - index-pack: --clone-bundle option
 - Merge branch 'jc/index-pack' into jc/bundle
 - bundle v3: the beginning
 - bundle: keep a copy of bundle file name in the in-core bundle header
 - bundle: plug resource leak
 - bundle doc: 'verify' is not about verifying the bundle

 The beginning of "split bundle", which could be one of the
 ingredients to allow "git clone" traffic off of the core server
 network to CDN.


* jc/merge-drop-old-syntax (2015-04-29) 1 commit
 - merge: drop 'git merge <message> HEAD <commit>' syntax

 Stop supporting "git merge <message> HEAD <commit>" syntax that has
 been deprecated since October 2007, and issues a deprecation
 warning message since v2.5.0.

 It has been reported that git-gui still uses the deprecated syntax,
 which needs to be fixed before this final step can proceed.
 ($gmane/282594)


--------------------------------------------------
[Discarded]

* jc/diff-compact-always-use-blank-heuristics (2016-04-29) 1 commit
 . diff: enable "compaction heuristics" and lose experimentation knob

 Superseded by the tip commit on the jk/diff-compact-heuristic topic.

^ permalink raw reply	[relevance 3%]

* What's cooking in git.git (May 2016, #06; Tue, 17)
@ 2016-05-17 22:47  2% Junio C Hamano
  0 siblings, 0 replies; 200+ results
From: Junio C Hamano @ 2016-05-17 22:47 UTC (permalink / raw)
  To: git

Here are the topics that have been cooking.  Commits prefixed with
'-' are only in 'pu' (proposed updates) while commits prefixed with
'+' are in 'next'.  The ones marked with '.' do not appear in any of
the integration branches, but I am still holding onto them.

The 'master' branch now has 390 non-merge commits in this cycle.  On
the 'maint' front, 2.8.2 is out and fixes that have been in 'master'
accumulates on it for 2.8.3, which probably should be tagged sometime
late this week.

You can find the changes described here in the integration branches
of the repositories listed at

    http://git-blame.blogspot.com/p/git-public-repositories.html

--------------------------------------------------
[Graduated to "master"]

* ab/hooks (2016-05-04) 4 commits
  (merged to 'next' on 2016-05-09 at 23cf808)
 + hooks: allow customizing where the hook directory is
 + githooks.txt: minor improvements to the grammar & phrasing
 + githooks.txt: amend dangerous advice about 'update' hook ACL
 + githooks.txt: improve the intro section

 A new configuration variable core.hooksPath allows customizing
 where the hook directory is.


* ak/t4151-ls-files-could-be-empty (2016-05-09) 1 commit
  (merged to 'next' on 2016-05-10 at 36ae38c)
 + t4151: make sure argument to 'test -z' is given

 Test fix.


* bn/config-doc-tt-varnames (2016-05-05) 1 commit
  (merged to 'next' on 2016-05-10 at aa7b834)
 + config: consistently format $variables in monospaced font
 (this branch uses jc/config-pathname-type.)

 Doc formatting fixes.


* bn/http-cookiefile-config (2016-05-04) 2 commits
  (merged to 'next' on 2016-05-09 at d519b13)
 + http: expand http.cookieFile as a path
 + Documentation: config: improve word ordering for http.cookieFile

 "http.cookieFile" configuration variable clearly wants a pathname,
 but we forgot to treat it as such by e.g. applying tilde expansion.


* es/test-gpg-tags (2016-05-09) 1 commit
  (merged to 'next' on 2016-05-10 at 9fcb98b)
 + t6302: simplify non-gpg cases

 Test fix.


* jc/config-pathname-type (2016-05-04) 1 commit
  (merged to 'next' on 2016-05-09 at 0876e55)
 + config: describe 'pathname' value type
 (this branch is used by bn/config-doc-tt-varnames.)

 Consolidate description of tilde-expansion that is done to
 configuration variables that take pathname to a single place.


* jc/fsck-nul-in-commit (2016-05-10) 2 commits
  (merged to 'next' on 2016-05-10 at 3bc3ca3)
 + fsck: detect and warn a commit with embedded NUL
 + fsck_commit_buffer(): do not special case the last validation

 "git fsck" learned to catch NUL byte in a commit object as
 potential error and warn.


* jc/linkgit-fix (2016-05-09) 1 commit
  (merged to 'next' on 2016-05-10 at 0e5ba60)
 + Documentation: fix linkgit references

 Many 'linkgit:<git documentation page>' references were broken,
 which are all fixed with this.


* jc/ll-merge-internal (2016-05-09) 3 commits
  (merged to 'next' on 2016-05-10 at a6bf1d0)
 + t6036: remove pointless test that expects failure
 + ll-merge: use a longer conflict marker for internal merge
 + ll-merge: fix typo in comment

 "git rerere" can get confused by conflict markers deliberately left
 by the inner merge step, because they are indistinguishable from
 the real conflict markers left by the outermost merge which are
 what the end user and "rerere" need to look at.  This was fixed by
 making the conflict markers left by the inner merges a bit longer.


* jc/test-seq (2016-05-09) 2 commits
  (merged to 'next' on 2016-05-10 at 1512890)
 + test-lib-functions.sh: rewrite test_seq without Perl
 + test-lib-functions.sh: remove misleading comment on test_seq

 Test fix.


* jk/rebase-interative-eval-fix (2016-05-10) 1 commit
  (merged to 'next' on 2016-05-11 at 4fdf387)
 + rebase--interactive: avoid empty list in shell for-loop

 Portability enhancement for "rebase -i" to help platforms whose
 shell does not like "for i in <empty>" (which is not POSIX-kosher).


* jk/submodule-c-credential (2016-05-06) 6 commits
  (merged to 'next' on 2016-05-10 at 4abe871)
 + submodule: stop sanitizing config options
 + submodule: use prepare_submodule_repo_env consistently
 + submodule--helper: move config-sanitizing to submodule.c
 + submodule: export sanitized GIT_CONFIG_PARAMETERS
 + t5550: break submodule config test into multiple sub-tests
 + t5550: fix typo in $HTTPD_URL
 (this branch is used by js/http-custom-headers.)

 An earlier addition of "sanitize_submodule_env" with 14111fc4 (git:
 submodule honor -c credential.* from command line, 2016-02-29)
 turned out to be a convoluted no-op; implement what it wanted to do
 correctly, and stop filtering settings given via "git -c var=val".


* jk/test-send-sh-x-trace-elsewhere (2016-05-11) 1 commit
  (merged to 'next' on 2016-05-11 at 273a137)
 + test-lib: set BASH_XTRACEFD automatically

 Running tests with '-x' option to trace the individual command
 executions is a useful way to debug test scripts, but some tests
 that capture the standard error stream and check what the command
 said can be broken with the trace output mixed in.  When running
 our tests under "bash", however, we can redirect the trace output
 to another file descriptor to keep the standard error of programs
 being tested intact.


* js/http-custom-headers (2016-05-10) 4 commits
  (merged to 'next' on 2016-05-10 at 7cf5cca)
 + submodule: ensure that -c http.extraheader is heeded
 + Merge branch 'jk/submodule-c-credential' into js/http-custom-headers
 + t5551: make the test for extra HTTP headers more robust
 + tests: adjust the configuration for Apache 2.2
 (this branch uses jk/submodule-c-credential.)

 Update tests for "http.extraHeaders=<header>" to be portable back
 to Apache 2.2 (the original depended on <RequireAll/> which is a
 more recent feature).


* js/t3404-typofix (2016-05-10) 1 commit
  (merged to 'next' on 2016-05-10 at cbeabc0)
 + t3404: fix typo

 Test fix.


* js/windows-dotgit (2016-05-11) 2 commits
  (merged to 'next' on 2016-05-11 at d10caa2)
 + mingw: remove unnecessary definition
 + mingw: introduce the 'core.hideDotFiles' setting

 On Windows, .git and optionally any files whose name starts with a
 dot are now marked as hidden, with a core.hideDotFiles knob to
 customize this behaviour.


* kf/gpg-sig-verification-doc (2016-05-13) 1 commit
  (merged to 'next' on 2016-05-13 at 2cec353)
 + Documentation: clarify signature verification

 Documentation for "git merge --verify-signatures" has been updated
 to clarify that the signature of only the commit at the tip is
 verified.  Also the phrasing used for signature and key validity is
 adjusted to align with that used by OpenPGP.


* lp/typofixes (2016-05-06) 1 commit
  (merged to 'next' on 2016-05-09 at 59683be)
 + typofix: assorted typofixes in comments, documentation and messages

 Typofixes.


* ls/travis-build-doc (2016-05-10) 1 commit
  (merged to 'next' on 2016-05-10 at 7f63497)
 + travis-ci: build documentation

 CI test was taught to build documentation pages.


* nd/error-errno (2016-05-09) 41 commits
  (merged to 'next' on 2016-05-10 at 1cdeda8)
 + wrapper.c: use warning_errno()
 + vcs-svn: use error_errno()
 + upload-pack.c: use error_errno()
 + unpack-trees.c: use error_errno()
 + transport-helper.c: use error_errno()
 + sha1_file.c: use {error,die,warning}_errno()
 + server-info.c: use error_errno()
 + sequencer.c: use error_errno()
 + run-command.c: use error_errno()
 + rerere.c: use error_errno() and warning_errno()
 + reachable.c: use error_errno()
 + mailmap.c: use error_errno()
 + ident.c: use warning_errno()
 + http.c: use error_errno() and warning_errno()
 + grep.c: use error_errno()
 + gpg-interface.c: use error_errno()
 + fast-import.c: use error_errno()
 + entry.c: use error_errno()
 + editor.c: use error_errno()
 + diff-no-index.c: use error_errno()
 + credential-cache--daemon.c: use warning_errno()
 + copy.c: use error_errno()
 + connected.c: use error_errno()
 + config.c: use error_errno()
 + compat/win32/syslog.c: use warning_errno()
 + combine-diff.c: use error_errno()
 + check-racy.c: use error_errno()
 + builtin/worktree.c: use error_errno()
 + builtin/upload-archive.c: use error_errno()
 + builtin/update-index.c: prefer "err" to "errno" in process_lstat_error
 + builtin/rm.c: use warning_errno()
 + builtin/pack-objects.c: use die_errno() and warning_errno()
 + builtin/merge-file.c: use error_errno()
 + builtin/mailsplit.c: use error_errno()
 + builtin/help.c: use warning_errno()
 + builtin/fetch.c: use error_errno()
 + builtin/branch.c: use error_errno()
 + builtin/am.c: use error_errno()
 + bisect.c: use die_errno() and warning_errno()
 + usage.c: add warning_errno() and error_errno()
 + usage.c: move format processing out of die_errno()

 The code for warning_errno/die_errno has been refactored and a new
 error_errno() reporting helper is introduced.


* nd/remote-plural-ours-plus-theirs (2016-05-06) 1 commit
  (merged to 'next' on 2016-05-10 at aea08dc)
 + remote.c: specify correct plural form in "commit diverge" message

 Message fix.


* nd/test-helpers (2016-05-10) 1 commit
  (merged to 'next' on 2016-05-10 at e8ad58d)
 + wrap-for-bin.sh: regenerate bin-wrappers when switching branches

 Switching between 'master' and 'next', between which the paths to
 test helper binaries have changed, did not update bin-wrappers/*
 scripts used in tests, causing false test failures.


* sb/submodule-deinit-all (2016-05-05) 1 commit
  (merged to 'next' on 2016-05-09 at 0fd4518)
 + submodule deinit: require '--all' instead of '.' for all submodules

 Correct faulty recommendation to use "git submodule deinit ." when
 de-initialising all submodules, which would result in a strange
 error message in a pathological corner case.


* sb/submodule-init (2016-05-03) 7 commits
  (merged to 'next' on 2016-05-03 at 8a5fce4)
 + submodule init: redirect stdout to stderr
  (merged to 'next' on 2016-04-29 at 3e81ee88)
 + submodule--helper update-clone: abort gracefully on missing .gitmodules
 + submodule init: fail gracefully with a missing .gitmodules file
  (merged to 'next' on 2016-04-27 at afaad81)
 + submodule: port init from shell to C
 + submodule: port resolve_relative_url from shell to C
 + Merge branch 'sb/submodule-path-misc-bugs' into sb/submodule-init
 + Merge branch 'sb/submodule-helper-clone-regression-fix' into sb/submodule-init

 Update of "git submodule" to move pieces of logic to C continues.


* sb/z-is-gnutar-ism (2016-05-09) 2 commits
  (merged to 'next' on 2016-05-09 at 51d527d)
 + t6041: do not compress backup tar file
 + t3513: do not compress backup tar file

 Test fix.


* tb/t5601-sed-fix (2016-05-09) 1 commit
  (merged to 'next' on 2016-05-10 at d3e54e8)
 + t5601: Remove trailing space in sed expression

 Test fix.


* va/i18n-misc-updates (2016-05-12) 10 commits
  (merged to 'next' on 2016-05-13 at 0361b16)
 + i18n: unpack-trees: avoid substituting only a verb in sentences
  (merged to 'next' on 2016-05-10 at b5dbd0d)
 + i18n: builtin/pull.c: split strings marked for translation
 + i18n: builtin/pull.c: mark placeholders for translation
 + i18n: git-parse-remote.sh: mark strings for translation
 + i18n: branch: move comment for translators
 + i18n: branch: unmark string for translation
 + i18n: builtin/rm.c: remove a comma ',' from string
 + i18n: unpack-trees: mark strings for translation
 + i18n: builtin/branch.c: mark option for translation
 + i18n: index-pack: use plural string instead of normal one

 Mark several messages for translation.


* va/i18n-remote-comment-to-align (2016-05-09) 1 commit
  (merged to 'next' on 2016-05-10 at edbacbb)
 + i18n: remote: add comment for translators

 Message fix.


* va/mailinfo-doc-typofix (2016-05-11) 1 commit
  (merged to 'next' on 2016-05-11 at 7180176)
 + Documentation/git-mailinfo: fix typo

 Typofix.

--------------------------------------------------
[New Topics]

* da/difftool (2016-05-16) 2 commits
  (merged to 'next' on 2016-05-17 at ef5a435)
 + difftool: handle unmerged files in dir-diff mode
 + difftool: initialize variables for readability

 "git difftool" learned to handle unmerged paths correctly in
 dir-diff mode.

 Will merge to 'master'.


* jc/attr (2016-05-17) 14 commits
 - SQUASH???
 - attr: retire git_check_attrs() API
 - attr: convert git_check_attrs() callers to use the new API
 - attr: convert git_all_attrs() to use "struct git_attr_check"
 - attr: (re)introduce git_check_attr() and struct git_attr_check
 - attr: rename function and struct related to checking attributes
 - attr.c: tighten constness around "git_attr" structure
 - attr.c: simplify macroexpand_one()
 - attr.c: mark where #if DEBUG ends more clearly
 - attr.c: complete a sentence in a comment
 - attr.c: explain the lack of attr-name syntax check in parse_attr()
 - attr.c: update a stale comment on "struct match_attr"
 - attr.c: use strchrnul() to scan for one line
 - commit.c: use strchrnul() to scan for one line

 The attributes API has been updated so that it can later be
 optimized using the knowledge of which attributes are queried.


* fc/fast-import-broken-marks-file (2016-05-17) 1 commit
 - fast-import: do not truncate exported marks file

 "git fast-import --export-marks" would overwrite the existing marks
 file even when it makes a dump from its custom die routine.
 Prevent it from doing so when we have an import-marks file but
 haven't finished reading it. 

--------------------------------------------------
[Stalled]

* ep/http-curl-trace (2016-05-02) 2 commits
 . imap-send.c: introduce the GIT_TRACE_CURL environment variable
 . http.c: implement the GIT_TRACE_CURL environment variable

 HTTP transport gained an option to produce more detailed debugging
 trace.

 Expecting a reroll.
 ($gmane/292074, 293236)


* sb/bisect (2016-04-15) 22 commits
 - SQUASH???
 - bisect: get back halfway shortcut
 - bisect: compute best bisection in compute_relevant_weights()
 - bisect: use a bottom-up traversal to find relevant weights
 - bisect: prepare for different algorithms based on find_all
 - bisect: rename count_distance() to compute_weight()
 - bisect: make total number of commits global
 - bisect: introduce distance_direction()
 - bisect: extract get_distance() function from code duplication
 - bisect: use commit instead of commit list as arguments when appropriate
 - bisect: replace clear_distance() by unique markers
 - bisect: use struct node_data array instead of int array
 - bisect: get rid of recursion in count_distance()
 - bisect: make algorithm behavior independent of DEBUG_BISECT
 - bisect: make bisect compile if DEBUG_BISECT is set
 - bisect: plug the biggest memory leak
 - bisect: add test for the bisect algorithm
 - t6030: generalize test to not rely on current implementation
 - t: use test_cmp_rev() where appropriate
 - t/test-lib-functions.sh: generalize test_cmp_rev
 - bisect: allow 'bisect run' if no good commit is known
 - bisect: write about `bisect next` in documentation

 The internal algorithm used in "git bisect" to find the next commit
 to check has been optimized greatly.

 Expecting a reroll.
 ($gmane/291163)


* nd/shallow-deepen (2016-04-13) 26 commits
 - fetch, upload-pack: --deepen=N extends shallow boundary by N commits
 - upload-pack: add get_reachable_list()
 - upload-pack: split check_unreachable() in two, prep for get_reachable_list()
 - t5500, t5539: tests for shallow depth excluding a ref
 - clone: define shallow clone boundary with --shallow-exclude
 - fetch: define shallow boundary with --shallow-exclude
 - upload-pack: support define shallow boundary by excluding revisions
 - refs: add expand_ref()
 - t5500, t5539: tests for shallow depth since a specific date
 - clone: define shallow clone boundary based on time with --shallow-since
 - fetch: define shallow boundary with --shallow-since
 - upload-pack: add deepen-since to cut shallow repos based on time
 - shallow.c: implement a generic shallow boundary finder based on rev-list
 - fetch-pack: use a separate flag for fetch in deepening mode
 - fetch-pack.c: mark strings for translating
 - fetch-pack: use a common function for verbose printing
 - fetch-pack: use skip_prefix() instead of starts_with()
 - upload-pack: move rev-list code out of check_non_tip()
 - upload-pack: tighten number parsing at "deepen" lines
 - upload-pack: use skip_prefix() instead of starts_with()
 - upload-pack: move "unshallow" sending code out of deepen()
 - upload-pack: remove unused variable "backup"
 - upload-pack: move "shallow" sending code out of deepen()
 - upload-pack: move shallow deepen code out of receive_needs()
 - transport-helper.c: refactor set_helper_option()
 - remote-curl.c: convert fetch_git() to use argv_array

 The existing "git fetch --depth=<n>" option was hard to use
 correctly when making the history of an existing shallow clone
 deeper.  A new option, "--deepen=<n>", has been added to make this
 easier to use.  "git clone" also learned "--shallow-since=<date>"
 and "--shallow-exclude=<tag>" options to make it easier to specify
 "I am interested only in the recent N months worth of history" and
 "Give me only the history since that version".

 Needs review.


* sg/completion-updates (2016-02-28) 21 commits
 . completion: cache the path to the repository
 . completion: extract repository discovery from __gitdir()
 . completion: don't guard git executions with __gitdir()
 . completion: consolidate silencing errors from git commands
 . completion: don't use __gitdir() for git commands
 . completion: respect 'git -C <path>'
 . completion: fix completion after 'git -C <path>'
 . completion: don't offer commands when 'git --opt' needs an argument
 . rev-parse: add '--absolute-git-dir' option
 . completion: list short refs from a remote given as a URL
 . completion: don't list 'HEAD' when trying refs completion outside of a repo
 . completion: list refs from remote when remote's name matches a directory
 . completion: respect 'git --git-dir=<path>' when listing remote refs
 . completion: fix most spots not respecting 'git --git-dir=<path>'
 . completion: ensure that the repository path given on the command line exists
 . completion tests: add tests for the __git_refs() helper function
 . completion tests: check __gitdir()'s output in the error cases
 . completion tests: consolidate getting path of current working directory
 . completion tests: make the $cur variable local to the test helper functions
 . completion tests: don't add test cruft to the test repository
 . completion: improve __git_refs()'s in-code documentation

 Will be rerolled.
 ($gmane/287839)


* az/p4-bare-no-rebase (2016-02-19) 1 commit
 - git-p4.py: Don't try to rebase on submit from bare repository

 "git p4 submit" attempts to do a rebase, which would fail if done
 in a bare repository.  Not doing this rebase would paper over the
 failure, which is what this patch does, but it is unclear what the
 side effect of not rebasing is.

 Needs a better explanation.


* nd/icase (2016-02-15) 12 commits
 - grep.c: reuse "icase" variable
 - diffcore-pickaxe: support case insensitive match on non-ascii
 - diffcore-pickaxe: "share" regex error handling code
 - grep/pcre: support utf-8
 - gettext: add is_utf8_locale()
 - grep/pcre: prepare locale-dependent tables for icase matching
 - grep/icase: avoid kwsset when -F is specified
 - grep/icase: avoid kwsset on literal non-ascii strings
 - test-regex: expose full regcomp() to the command line
 - test-regex: isolate the bug test code
 - grep: break down an "if" stmt in preparation for next changes
 - grep: allow -F -i combination

 "git grep -i" has been taught to fold case in non-ascii locales.

 Needs review.
 ($gmane/286137)


* ec/annotate-deleted (2015-11-20) 1 commit
 - annotate: skip checking working tree if a revision is provided

 Usability fix for annotate-specific "<file> <rev>" syntax with deleted
 files.

 Waiting for review.


* dg/subtree-rebase-test (2016-01-19) 1 commit
 - contrib/subtree: Add a test for subtree rebase that loses commits

 Reviewed up to v5.
 Will be rerolled.
 ($gmane/284426)


* js/am-3-merge-recursive-direct (2015-10-12) 2 commits
 - am: make a direct call to merge_recursive
 - merge_recursive_options: introduce the "gently" flag

 The merge_recursive_generic() function has been made a bit safer to
 call from inside a process.  "git am -3" was taught to make a direct
 call to the function when falling back to three-way merge.

 Being able to make a direct call would be good in general, but as a
 performance thing, the change needs to be backed up by numbers.

 I haven't gone through the "gently" change with fine toothed comb;
 I can see that the change avoids calling die(), but I haven't made
 sure that the program states (e.g. what's in the in-core index) are
 adjusted sensibly when it returns to the caller instead of dying,
 or the codepaths that used to die() are free of resource leaks.
 The original code certainly did not care the program states at the
 point of dying exactly because it knew it is going to exit, but now
 they have to care, and they need to be audited.

 Will be rerolled.
 ($gmane/292205)


* dk/gc-more-wo-pack (2016-01-13) 4 commits
 - gc: clean garbage .bitmap files from pack dir
 - t5304: ensure non-garbage files are not deleted
 - t5304: test .bitmap garbage files
 - prepare_packed_git(): find more garbage

 Follow-on to dk/gc-idx-wo-pack topic, to clean up stale
 .bitmap and .keep files.

 Waiting for a reroll.
 ($gmane/284368).


* jc/diff-b-m (2015-02-23) 5 commits
 . WIPWIP
 . WIP: diff-b-m
 - diffcore-rename: allow easier debugging
 - diffcore-rename.c: add locate_rename_src()
 - diffcore-break: allow debugging

 "git diff -B -M" produced incorrect patch when the postimage of a
 completely rewritten file is similar to the preimage of a removed
 file; such a resulting file must not be expressed as a rename from
 other place.

 The fix in this patch is broken, unfortunately.
 Will discard.


* jc/merge-impossible-no-commit (2016-04-26) 2 commits
 - merge: warn --no-commit merge when no new commit is created
 - merge: do not contaminate option_commit with --squash

 "git merge --no-commit" silently succeeded when there is no need to
 create any commit, either when you are more recent than the commit
 you tried to merge, or you can fast-forward to the commit you tried
 to merge.  The command gives a warning message in such cases.

 Just tying loose ends in a discussion.  Unless somebody else
 champions this topic, I'll drop it.

 Will discard.

--------------------------------------------------
[Cooking]

* es/t1500-modernize (2016-05-17) 5 commits
 - t1500: avoid setting environment variables outside of tests
 - t1500: avoid setting configuration options outside of tests
 - t1500: avoid changing working directory outside of tests
 - t1500: test_rev_parse: facilitate future test enhancements
 - t1500: be considerate to future potential tests

 test updates to make it more readable and maintainable.


* jc/rerere-multi (2016-05-11) 1 commit
  (merged to 'next' on 2016-05-13 at f4d1d82)
 + rerere: plug memory leaks upon "rerere forget" failure

 Will merge to 'master'.


* cc/apply-introduce-state (2016-05-12) 48 commits
 - builtin/apply: rename 'prefix_' parameter to 'prefix'
 - builtin/apply: move applying patches into apply_all_patches()
 - builtin/apply: move 'state' check into check_apply_state()
 - builtin/apply: move 'symlink_changes' global into 'struct apply_state'
 - builtin/apply: move 'fn_table' global into 'struct apply_state'
 - builtin/apply: move 'state_linenr' global into 'struct apply_state'
 - builtin/apply: move 'max_change' and 'max_len' into 'struct apply_state'
 - builtin/apply: move 'ws_ignore_action' into 'struct apply_state'
 - builtin/apply: move 'ws_error_action' into 'struct apply_state'
 - builtin/apply: move 'applied_after_fixing_ws' into 'struct apply_state'
 - builtin/apply: move 'squelch_whitespace_errors' into 'struct apply_state'
 - builtin/apply: remove whitespace_option arg from set_default_whitespace_mode()
 - builtin/apply: move 'whitespace_option' into 'struct apply_state'
 - builtin/apply: move 'whitespace_error' global into 'struct apply_state'
 - builtin/apply: move 'root' global into 'struct apply_state'
 - builtin/apply: move 'p_value_known' global into 'struct apply_state'
 - builtin/apply: move 'p_value' global into 'struct apply_state'
 - builtin/apply: move 'has_include' global into 'struct apply_state'
 - builtin/apply: move 'limit_by_name' global into 'struct apply_state'
 - builtin/apply: move 'patch_input_file' global into 'struct apply_state'
 - builtin/apply: move 'apply' global into 'struct apply_state'
 - builtin/apply: move 'p_context' global into 'struct apply_state'
 - builtin/apply: move 'fake_ancestor' global into 'struct apply_state'
 - builtin/apply: move 'line_termination' global into 'struct apply_state'
 - builtin/apply: move 'unsafe_paths' global into 'struct apply_state'
 - builtin/apply: move 'no_add' global into 'struct apply_state'
 - builtin/apply: move 'threeway' global into 'struct apply_state'
 - builtin/apply: move 'summary' global into 'struct apply_state'
 - builtin/apply: move 'numstat' global into 'struct apply_state'
 - builtin/apply: move 'diffstat' global into 'struct apply_state'
 - builtin/apply: move 'cached' global into 'struct apply_state'
 - builtin/apply: move 'allow_overlap' global into 'struct apply_state'
 - builtin/apply: move 'update_index' global into 'struct apply_state'
 - builtin/apply: move 'apply_verbosely' global into 'struct apply_state'
 - builtin/apply: move 'apply_with_reject' global into 'struct apply_state'
 - builtin/apply: move 'apply_in_reverse' global into 'struct apply_state'
 - builtin/apply: move 'check_index' global into 'struct apply_state'
 - builtin/apply: move 'check' global into 'struct apply_state'
 - builtin/apply: move 'unidiff_zero' global into 'struct apply_state'
 - builtin/apply: move 'state' init into init_apply_state()
 - builtin/apply: introduce 'struct apply_state' to start libifying
 - builtin/apply: move 'read_stdin' global into cmd_apply()
 - builtin/apply: move 'options' variable into cmd_apply()
 - builtin/apply: extract line_by_line_fuzzy_match() from match_fragment()
 - builtin/apply: avoid local variable shadowing 'len' parameter
 - builtin/apply: avoid parameter shadowing 'linenr' global
 - builtin/apply: avoid parameter shadowing 'p_value' global
 - builtin/apply: make gitdiff_verify_name() return void

 The "git apply" standalone program is being libified; this is the
 first step to move many state variables into a structure that can
 be explicitly (re)initialized to make the machinery callable more
 than once.

 The next step that moves some remaining state variables into the
 structure and turns die()s into an error return that propagates up
 to the caller is not queued yet but in flight.  It would be good to
 review the above first and give the remainder of the series a solid
 base to build on.

 Will be rerolled.


* jk/test-z-n-unquoted (2016-05-14) 6 commits
  (merged to 'next' on 2016-05-17 at 65372cf)
 + always quote shell arguments to test -z/-n
 + t9103: modernize test style
 + t9107: switch inverted single/double quotes in test
 + t9107: use "return 1" instead of "exit 1"
 + t9100,t3419: enclose all test code in single-quotes
 + t/lib-git-svn: drop $remote_git_svn and $git_svn_id

 t9xxx series has been updated primarily for readability, while
 fixing small bugs in it.  A few scripted Porcelains have also been
 updated to fix possible bugs around their use of "test -z" and
 "test -n".

 Will merge to 'master'.


* pb/bisect (2016-05-13) 4 commits
 - t6030: explicitly test for bisection cleanup
 - bisect--helper: `write_terms` shell function in C
 - bisect: rewrite `check_term_format` shell function in C
 - bisect--helper: use OPT_CMDMODE instead of OPT_BOOL

 Beginning of GSoC "git bisect" project.


* sb/pathspec-label (2016-05-14) 5 commits
 . pathspec: record labels
 . pathspec: move prefix check out of the inner loop
 . pathspec: move long magic parsing out of prefix_pathspec
 . Documentation: correct typo in example for querying attributes
 . Documentation: fix a typo

 The pathspec mechanism learned ":(label=X)$pattern" pathspec magic
 to limit paths that match $pattern further by labels defined by the
 attributes mechanism for the paths.

 (RFC/WIP)


* ar/diff-args-osx-precompose (2016-05-13) 1 commit
  (merged to 'next' on 2016-05-17 at 7b59b79)
 + diff: run arguments through precompose_argv

 Many commands normalize command line arguments from NFD to NFC
 variant of UTF-8 on OSX, but commands in the "diff" family did
 not, causing "git diff $path" to complain that no such path is
 known to Git.  They have been taught to do the normalization.

 Will merge to 'master'.


* js/perf-rebase-i (2016-05-13) 3 commits
  (merged to 'next' on 2016-05-13 at eb51ddd)
 + perf: run "rebase -i" under perf
 + perf: make the tests work in worktrees
 + perf: let's disable symlinks when they are not available

 Add perf test for "rebase -i"

 Will merge to 'master'.


* nd/worktree-cleanup-post-head-protection (2016-05-10) 7 commits
 - worktree: simplify prefixing paths
 - worktree: avoid 0{40}, too many zeroes, hard to read
 - worktree.c: add clear_worktree()
 - worktree.c: use is_dot_or_dotdot()
 - git-worktree.txt: keep subcommand listing in alphabetical order
 - worktree.c: rewrite mark_current_worktree() to avoid strbuf
 - completion: support git-worktree
 (this branch uses nd/worktree-various-heads.)

 Further preparatory clean-up for "worktree" feature.

 Expecting a reroll.
 ($gmane/294136, etc.)


* ss/commit-dry-run-resolve-merge-to-no-op (2016-02-17) 1 commit
  (merged to 'next' on 2016-05-10 at 2ada404)
 + wt-status.c: set commitable bit if there is a meaningful merge.

 "git commit --dry-run" reported "No, no, you cannot commit." in one
 case where "git commit" would have allowed you to commit, and this
 improves it a little bit ("git commit --dry-run --short" still does
 not give you the correct answer, for example).  This is a stop-gap
 measure in that "commit --short --dry-run" still gives an incorrect
 result.

 Will merge to 'master'.


* tb/core-eol-fix (2016-04-25) 4 commits
  (merged to 'next' on 2016-05-10 at fa8a200)
 + convert.c: ident + core.autocrlf didn't work
 + t0027: test cases for combined attributes
 + convert: allow core.autocrlf=input and core.eol=crlf
 + t0027: make commit_chk_wrnNNO() reliable

 A couple of bugs around core.autocrlf have been fixed.

 Will merge to 'master'.


* jc/test-parse-options-expect (2016-05-10) 4 commits
  (merged to 'next' on 2016-05-10 at 3ca5783)
 + t0040: convert a few tests to use test-parse-options --expect
 + t0040: remove unused test helpers
 + test-parse-options: --expect=<string> option to simplify tests
 + test-parse-options: fix output when callback option fails
 (this branch uses pb/commit-verbose-config.)

 t0040 had too many unnecessary repetitions in its test data.  Teach
 test-parse-options program so that a caller can tell what it
 expects in its output, so that these repetitions can be cleaned up.

 Will merge to 'master'.


* jc/doc-lint (2016-05-10) 1 commit
  (merged to 'next' on 2016-05-17 at 9032aa5)
 + ci: validate "linkgit:" in documentation

 Find common mistakes when writing gitlink: in our documentation and
 drive the check from "make check-docs".

 I am not entirely happy with the way the script chooses what input
 file to validate, but it is not worse than not having anything, so
 let's move it forward and have the logic improved later when people
 care about it deeply.

 Will merge to 'master'.


* jk/push-client-deadlock-fix (2016-05-11) 2 commits
  (merged to 'next' on 2016-05-11 at 8f4abf9)
 + Windows: only add a no-op pthread_sigmask() when needed
  (merged to 'next' on 2016-05-06 at e91626c)
 + Windows: add pthread_sigmask() that does nothing

 Some Windows SDK lacks pthread_sigmask() implementation and fails
 to compile the recently updated "git push" codepath that uses it.

 Will merge to 'master'.


* mh/split-under-lock (2016-05-13) 33 commits
 - lock_ref_sha1_basic(): only handle REF_NODEREF mode
 - commit_ref_update(): remove the flags parameter
 - lock_ref_for_update(): don't resolve symrefs
 - lock_ref_for_update(): don't re-read non-symbolic references
 - refs: resolve symbolic refs first
 - ref_transaction_update(): check refname_is_safe() at a minimum
 - unlock_ref(): move definition higher in the file
 - lock_ref_for_update(): new function
 - add_update(): initialize the whole ref_update
 - verify_refname_available(): adjust constness in declaration
 - refs: don't dereference on rename
 - refs: allow log-only updates
 - delete_branches(): use resolve_refdup()
 - ref_transaction_commit(): correctly report close_ref() failure
 - ref_transaction_create(): disallow recursive pruning
 - refs: make error messages more consistent
 - lock_ref_sha1_basic(): remove unneeded local variable
 - read_raw_ref(): move docstring to header file
 - read_raw_ref(): improve docstring
 - read_raw_ref(): rename symref argument to referent
 - read_raw_ref(): clear *type at start of function
 - read_raw_ref(): rename flags argument to type
 - ref_transaction_commit(): remove local variable n
 - rename_ref(): remove unneeded local variable
 - commit_ref_update(): write error message to *err, not stderr
 - refname_is_safe(): insist that the refname already be normalized
 - refname_is_safe(): don't allow the empty string
 - refname_is_safe(): use skip_prefix()
 - remove_dir_recursively(): add docstring
 - safe_create_leading_directories(): improve docstring
 - read_raw_ref(): don't get confused by an empty directory
 - commit_ref(): if there is an empty dir in the way, delete it
 - t1404: demonstrate a bug resolving references

 Further preparatory work on the refs API before the pluggable
 backend series can land.

 Updated (again).  Will wait for comments for the last time, and
 then merge to 'next'.


* mh/connect-leak (2016-04-28) 1 commit
 - git_connect(): fix memory leak with CONNECT_DIAG_URL

 Is already made obsolete with a patch in flight under discussion.
 ($gmane/292962)

 Will discard.


* ew/fast-import-unpack-limit (2016-05-11) 1 commit
  (merged to 'next' on 2016-05-11 at ffd4efb)
 + fast-import: implement unpack limit

 "git fast-import" learned the same performance trick to avoid
 creating too small a packfile as "git fetch" and "git push" have,
 using *.unpackLimit configuration.

 Will merge to 'master'.


* nd/worktree-various-heads (2016-04-22) 13 commits
  (merged to 'next' on 2016-05-10 at 61d3415)
 + branch: do not rename a branch under bisect or rebase
 + worktree.c: check whether branch is bisected in another worktree
 + wt-status.c: split bisect detection out of wt_status_get_state()
 + worktree.c: check whether branch is rebased in another worktree
 + worktree.c: avoid referencing to worktrees[i] multiple times
 + wt-status.c: make wt_status_check_rebase() work on any worktree
 + wt-status.c: split rebase detection out of wt_status_get_state()
 + path.c: refactor and add worktree_git_path()
 + worktree.c: mark current worktree
 + worktree.c: make find_shared_symref() return struct worktree *
 + worktree.c: store "id" instead of "git_dir"
 + path.c: add git_common_path() and strbuf_git_common_path()
 + dir.c: rename str(n)cmp_icase to fspath(n)cmp
 (this branch is used by nd/worktree-cleanup-post-head-protection.)

 The experimental "multiple worktree" feature gains more safety to
 forbid operations on a branch that is checked out or being actively
 worked on elsewhere, by noticing that e.g. it is being rebased.

 Will merge to 'master'.


* pb/commit-verbose-config (2016-05-10) 7 commits
 + commit: add a commit.verbose config variable
 + t7507-commit-verbose: improve test coverage by testing number of diffs
 + parse-options.c: make OPTION_COUNTUP respect "unspecified" values
 + t/t7507: improve test coverage
 + t0040-parse-options: improve test coverage
 + test-parse-options: print quiet as integer
 + t0040-test-parse-options.sh: fix style issues
 (this branch is used by jc/test-parse-options-expect.)

 "git commit" learned to pay attention to "commit.verbose"
 configuration variable and act as if "--verbose" option was
 given from the command line.

 Will merge to 'master'.


* jc/send-email-skip-backup (2016-04-12) 1 commit
 - send-email: detect and offer to skip backup files

 A careless invocation of "git send-email directory/" after editing
 0001-change.patch with an editor often ends up sending both
 0001-change.patch and its backup file, 0001-change.patch~, causing
 embarrassment and a minor confusion.  Detect such an input and
 offer to skip the backup files when sending the patches out.

 Needs review.


* kn/ref-filter-branch-list (2016-05-17) 17 commits
 - branch: implement '--format' option
 - branch: use ref-filter printing APIs
 - branch, tag: use porcelain output
 - ref-filter: allow porcelain to translate messages in the output
 - ref-filter: add `:dir` and `:base` options for ref printing atoms
 - ref-filter: make remote_ref_atom_parser() use refname_atom_parser_internal()
 - ref-filter: introduce symref_atom_parser() and refname_atom_parser()
 - ref-filter: introduce refname_atom_parser_internal()
 - ref-filter: make "%(symref)" atom work with the ':short' modifier
 - ref-filter: add support for %(upstream:track,nobracket)
 - ref-filter: make %(upstream:track) prints "[gone]" for invalid upstreams
 - ref-filter: introduce format_ref_array_item()
 - ref-filter: move get_head_description() from branch.c
 - ref-filter: modify "%(objectname:short)" to take length
 - ref-filter: implement %(if:equals=<string>) and %(if:notequals=<string>)
 - ref-filter: include reference to 'used_atom' within 'atom_value'
 - ref-filter: implement %(if), %(then), and %(else) atoms

 The code to list branches in "git branch" has been consolidated
 with the more generic ref-filter API.

 Rerolled.
 Needs review.


* xy/format-patch-base (2016-04-26) 4 commits
  (merged to 'next' on 2016-05-10 at dd19e0a)
 + format-patch: introduce format.useAutoBase configuration
 + format-patch: introduce --base=auto option
 + format-patch: add '--base' option to record base tree info
 + patch-ids: make commit_patch_id() a public helper function

 "git format-patch" learned a new "--base" option to record what
 (public, well-known) commit the original series was built on in
 its output.

 Will merge to 'master'.


* dt/index-helper (2016-05-13) 20 commits
 - untracked-cache: config option
 - trace: measure where the time is spent in the index-heavy operations
 - index-helper: optionally automatically run
 - index-helper: autorun mode
 - index-helper: don't run if already running
 - index-helper: kill mode
 - watchman: add a config option to enable the extension
 - unpack-trees: preserve index extensions
 - update-index: enable/disable watchman support
 - index-helper: use watchman to avoid refreshing index with lstat()
 - watchman: support watchman to reduce index refresh cost
 - read-cache: add watchman 'WAMA' extension
 - index-helper: log warnings
 - index-helper: add --detach
 - daemonize(): set a flag before exiting the main process
 - index-helper: add --strict
 - index-helper: new daemon for caching index and related stuff
 - pkt-line: add gentle version of packet_write
 - read-cache: allow to keep mmap'd memory after reading
 - read-cache.c: fix constness of verify_hdr()

 A new "index-helper" daemon has been introduced to give newly
 spawned Git process a quicker access to the data in the index, and
 optionally interface with the watchman daemon to further reduce the
 refresh cost.

 Under review.
 ($gmane/294470).


* jc/bundle (2016-03-03) 6 commits
 - index-pack: --clone-bundle option
 - Merge branch 'jc/index-pack' into jc/bundle
 - bundle v3: the beginning
 - bundle: keep a copy of bundle file name in the in-core bundle header
 - bundle: plug resource leak
 - bundle doc: 'verify' is not about verifying the bundle

 The beginning of "split bundle", which could be one of the
 ingredients to allow "git clone" traffic off of the core server
 network to CDN.


* jc/merge-drop-old-syntax (2015-04-29) 1 commit
 - merge: drop 'git merge <message> HEAD <commit>' syntax

 Stop supporting "git merge <message> HEAD <commit>" syntax that has
 been deprecated since October 2007, and issues a deprecation
 warning message since v2.5.0.

 It has been reported that git-gui still uses the deprecated syntax,
 which needs to be fixed before this final step can proceed.
 ($gmane/282594)

--------------------------------------------------
[Discarded]

* jc/diff-compact-always-use-blank-heuristics (2016-04-29) 1 commit
 . diff: enable "compaction heuristics" and lose experimentation knob

 Superseded by the tip commit on the jk/diff-compact-heuristic topic.

^ permalink raw reply	[relevance 2%]

* [ANNOUNCE] Git v2.9.0-rc0
@ 2016-05-23 23:23  3% Junio C Hamano
  0 siblings, 0 replies; 200+ results
From: Junio C Hamano @ 2016-05-23 23:23 UTC (permalink / raw)
  To: git

An early preview release Git v2.9.0-rc0 is now available for
testing at the usual places.  It is comprised of 443 non-merge
commits since v2.8.0, contributed by 60 people, 24 of which are
new faces.

The tarballs are found at:

    https://www.kernel.org/pub/software/scm/git/testing/

The following public repositories all have a copy of the
'v2.9.0-rc0' tag and the 'master' branch that the tag points at:

  url = https://kernel.googlesource.com/pub/scm/git/git
  url = git://repo.or.cz/alt-git.git
  url = git://git.sourceforge.jp/gitroot/git-core/git.git
  url = git://git-core.git.sourceforge.net/gitroot/git-core/git-core
  url = https://github.com/gitster/git

New contributors whose contributions weren't in v2.8.0 are as follows.
Welcome to the Git development community!

  Alexander Rinass, Armin Kunaschik, Ben Woosley, Gabriel Souza
  Franco, Jacob Nisnevich, Jan Durovec, Jean-Noël Avila, Kazuki
  Yamaguchi, Keller Fuchs, Laurent Arnoud, Li Peng, Marios Titas,
  Mehul Jain, Michael Procter, Nikola Forró, Pranit Bauva, Ray
  Zhang, René Nyffenegger, Santiago Torres, Saurav Sachidanand,
  Shin Kojima, Sidhant Sharma [:tk], Stanislav Kolotinskiy,
  and Xiaolong Ye.

Returning contributors who helped this release are as follows.
Thanks for your continued support.

  Adam Dinwoodie, Ævar Arnfjörð Bjarmason, Alexander Kuleshov,
  brian m. carlson, Brian Norris, Christian Couder, David Aguilar,
  David Turner, Dennis Kaarsemaker, Elia Pinto, Elijah Newren,
  Eric Sunshine, Eric Wong, Jacob Keller, Jeff King, Jiang Xin,
  Johannes Schindelin, Johannes Sixt, John Keeping, Junio C Hamano,
  Lars Schneider, Linus Torvalds, Luke Diamand, Matthieu Moy,
  Michael Haggerty, Michael J Gruber, Nguyễn Thái Ngọc Duy,
  Ori Avtalion, Ralf Thielow, Ramsay Jones, Stefan Beller, Stephen
  P. Smith, Sven Strickroth, SZEDER Gábor, Torsten Bögershausen,
  and Vasco Almeida.

----------------------------------------------------------------

Git 2.9 Release Notes (draft)
=============================

Backward compatibility note
---------------------------

The end-user facing Porcelain level commands in the "git diff" and
"git log" by default enables the rename detection; you can still use
"diff.renames" configuration variable to disable this.

Merging two branches that have no common ancestor with "git merge" is
by default forbidden now to prevent creating such an unusual merge by
mistake.

The output formats of "git log" that indents the commit log message by
4 spaces now expands HT in the log message by default.  You can use
the "--no-expand-tabs" option to disable this.

"git commit-tree" plumbing command required the user to always sign
its result when the user sets the commit.gpgsign configuration
variable, which was an ancient mistake, which this release corrects.
A script that drives commit-tree, if it relies on this mistake, now
needs to read commit.gpgsign and pass the -S option as necessary.


Updates since v2.8
------------------

UI, Workflows & Features

 * Comes with git-multimail 1.3.1 (in contrib/).

 * The end-user facing Porcelain level commands like "diff" and "log"
   now enables the rename detection by default.

 * The credential.helper configuration variable is cumulative and
   there is no good way to override it from the command line.  As
   a special case, giving an empty string as its value now serves
   as the signal to clear the values specified in various files.

 * A new "interactive.diffFilter" configuration can be used to
   customize the diff shown in "git add -i" session.

 * "git p4" now allows P4 author names to be mapped to Git author
   names.

 * "git rebase -x" can be used without passing "-i" option.

 * "git -c credential.<var>=<value> submodule" can now be used to
   propagate configuration variables related to credential helper
   down to the submodules.

 * "git tag" can create an annotated tag without explicitly given an
   "-a" (or "-s") option (i.e. when a tag message is given).  A new
   configuration variable, tag.forceSignAnnotated, can be used to tell
   the command to create signed tag in such a situation.

 * "git merge" used to allow merging two branches that have no common
   base by default, which led to a brand new history of an existing
   project created and then get pulled by an unsuspecting maintainer,
   which allowed an unnecessary parallel history merged into the
   existing project.  The command has been taught not to allow this by
   default, with an escape hatch "--allow-unrelated-histories" option
   to be used in a rare event that merges histories of two projects
   that started their lives independently.

 * "git pull" has been taught to pass --allow-unrelated-histories
   option to underlying "git merge".

 * "git apply -v" learned to report paths in the patch that were
   skipped via --include/--exclude mechanism or being outside the
   current working directory.

 * Shell completion (in contrib/) updates.

 * The commit object name reported when "rebase -i" stops has been
   shortened.

 * "git worktree add" can be given "--no-checkout" option to only
   create an empty worktree without checking out the files.

 * "git mergetools" learned to drive ExamDiff.

 * "git pull --rebase" learned "--[no-]autostash" option, so that
   the rebase.autostash configuration variable set to true can be
   overridden from the command line.

 * When "git log" shows the log message indented by 4-spaces, the
   remainder of a line after a HT does not align in the way the author
   originally intended.  The command now expands tabs by default in
   such a case, and allows the users to override it with a new option,
   "--no-expand-tabs".

 * "git send-email" now uses a more readable timestamps when
   formulating a message ID.

 * "git rerere" can encounter two or more files with the same conflict
   signature that have to be resolved in different ways, but there was
   no way to record these separate resolutions.
   (merge d9d501b068 jc/rerere-multi later to maint).

 * "git p4" learned to record P4 jobs in Git commit that imports from
   the history in Perforce.

 * "git describe --contains" often made a hard-to-justify choice of
   tag to give name to a given commit, because it tried to come up
   with a name with smallest number of hops from a tag, causing an old
   commit whose close descendant that is recently tagged were not
   described with respect to an old tag but with a newer tag.  It did
   not help that its computation of "hop" count was further tweaked to
   penalize being on a side branch of a merge.  The logic has been
   updated to favor using the tag with the oldest tagger date, which
   is a lot easier to explain to the end users: "We describe a commit
   in terms of the (chronologically) oldest tag that contains the
   commit."
   (merge 7550424 js/name-rev-use-oldest-ref later to maint).

 * "git clone" learned "--shallow-submodules" option.

 * HTTP transport clients learned to throw extra HTTP headers at the
   server, specified via http.extraHeader configuration variable.

 * Patch output from "git diff" and friends has been tweaked to be
   more readable by using a blank line as a strong hint that the
   contents before and after it belong to a logically separate unit.

 * A new configuration variable core.hooksPath allows customizing
   where the hook directory is.

 * An earlier addition of "sanitize_submodule_env" with 14111fc4 (git:
   submodule honor -c credential.* from command line, 2016-02-29)
   turned out to be a convoluted no-op; implement what it wanted to do
   correctly, and stop filtering settings given via "git -c var=val".

 * "git commit --dry-run" reported "No, no, you cannot commit." in one
   case where "git commit" would have allowed you to commit, and this
   improves it a little bit ("git commit --dry-run --short" still does
   not give you the correct answer, for example).  This is a stop-gap
   measure in that "commit --short --dry-run" still gives an incorrect
   result.

 * The experimental "multiple worktree" feature gains more safety to
   forbid operations on a branch that is checked out or being actively
   worked on elsewhere, by noticing that e.g. it is being rebased.

 * "git format-patch" learned a new "--base" option to record what
   (public, well-known) commit the original series was built on in
   its output.

 * "git commit" learned to pay attention to "commit.verbose"
   configuration variable and act as if "--verbose" option was
   given from the command line.


Performance, Internal Implementation, Development Support etc.

 * The embedded args argv-array in the child process is used to build
   the command line to run pack-objects instead of using a separate
   array of strings.

 * A test for tags has been restructured so that more parts of it can
   easily be run on a platform without a working GnuPG.

 * The startup_info data, which records if we are working inside a
   repository (among other things), are now uniformly available to Git
   subcommand implementations, and Git avoids attempting to touch
   references when we are not in a repository.

 * The command line argument parser for "receive-pack" has been
   rewritten to use parse-options.

 * A major part of "git submodule update" has been ported to C to take
   advantage of the recently added framework to run download tasks in
   parallel.

 * Rename bunch of tests on "git clone" for better organization.

 * The tests that involve running httpd leaked the system-wide
   configuration in /etc/gitconfig to the tested environment.

 * Build updates for MSVC.

 * The repository set-up sequence has been streamlined (the biggest
   change is that there is no longer git_config_early()), so that we
   do not attempt to look into refs/* when we know we do not have a
   Git repository.

 * Code restructuring around the "refs" area to prepare for pluggable
   refs backends.

 * Sources to many test helper binaries (and the generated helpers)
   have been moved to t/helper/ subdirectory to reduce clutter at the
   top level of the tree.

 * Unify internal logic between "git tag -v" and "git verify-tag"
   commands by making one directly call into the other.
   (merge bef234b st/verify-tag later to maint).

 * "merge-recursive" strategy incorrectly checked if a path that is
   involved in its internal merge exists in the working tree.

 * The test scripts for "git p4" (but not "git p4" implementation
   itself) has been updated so that they would work even on a system
   where the installed version of Python is python 3.

 * As nobody maintains our in-tree git.spec.in and distros use their
   own spec file, we stopped pretending that we support "make rpm".

 * Move from unsigned char[20] to struct object_id continues.

 * Update of "git submodule" to move pieces of logic to C continues.

 * The code for warning_errno/die_errno has been refactored and a new
   error_errno() reporting helper is introduced.
   (merge 1da045f nd/error-errno later to maint).

 * Running tests with '-x' option to trace the individual command
   executions is a useful way to debug test scripts, but some tests
   that capture the standard error stream and check what the command
   said can be broken with the trace output mixed in.  When running
   our tests under "bash", however, we can redirect the trace output
   to another file descriptor to keep the standard error of programs
   being tested intact.
   (merge d88785e jk/test-send-sh-x-trace-elsewhere later to maint).

 * t0040 had too many unnecessary repetitions in its test data.  Teach
   test-parse-options program so that a caller can tell what it
   expects in its output, so that these repetitions can be cleaned up.

 * Add perf test for "rebase -i"

 * Common mistakes when writing gitlink: in our documentation are
   found by "make check-docs".

 * t9xxx series has been updated primarily for readability, while
   fixing small bugs in it.  A few scripted Porcelains have also been
   updated to fix possible bugs around their use of "test -z" and
   "test -n".

 * CI test was taught to run git-svn tests.


Also contains various documentation updates and code clean-ups.


Fixes since v2.8
----------------

Unless otherwise noted, all the fixes since v2.8 in the maintenance
track are contained in this release (see the maintenance releases'
notes for details).

 * "git config --get-urlmatch", unlike other variants of the "git
   config --get" family, did not signal error with its exit status
   when there was no matching configuration.

 * The "--local-env-vars" and "--resolve-git-dir" options of "git
   rev-parse" failed to work outside a repository when the command's
   option parsing was rewritten in 1.8.5 era.

 * "git index-pack --keep[=<msg>] pack-$name.pack" simply did not work.

 * Fetching of history by naming a commit object name directly didn't
   work across remote-curl transport.

 * A small memory leak in an error codepath has been plugged in xdiff
   code.

 * strbuf_getwholeline() did not NUL-terminate the buffer on certain
   corner cases in its error codepath.

 * "git mergetool" did not work well with conflicts that both sides
   deleted.

 * "git send-email" had trouble parsing alias file in mailrc format
   when lines in it had trailing whitespaces on them.

 * When "git merge --squash" stopped due to conflict, the concluding
   "git commit" failed to read in the SQUASH_MSG that shows the log
   messages from all the squashed commits.

 * "git merge FETCH_HEAD" dereferenced NULL pointer when merging
   nothing into an unborn history (which is arguably unusual usage,
   which perhaps was the reason why nobody noticed it).

 * When "git worktree" feature is in use, "git branch -d" allowed
   deletion of a branch that is checked out in another worktree,
   which was wrong.

 * When "git worktree" feature is in use, "git branch -m" renamed a
   branch that is checked out in another worktree without adjusting
   the HEAD symbolic ref for the worktree.

 * "git diff -M" used to work better when two originally identical
   files A and B got renamed to X/A and X/B by pairing A to X/A and B
   to X/B, but this was broken in the 2.0 timeframe.

 * "git send-pack --all <there>" was broken when its command line
   option parsing was written in the 2.6 timeframe.

 * "git format-patch --help" showed `-s` and `--no-patch` as if these
   are valid options to the command.  We already hide `--patch` option
   from the documentation, because format-patch is about showing the
   diff, and the documentation now hides these options as well.

 * When running "git blame $path" with unnormalized data in the index
   for the path, the data in the working tree was blamed, even though
   "git add" would not have changed what is already in the index, due
   to "safe crlf" that disables the line-end conversion.  It has been
   corrected.

 * A change back in version 2.7 to "git branch" broke display of a
   symbolic ref in a non-standard place in the refs/ hierarchy (we
   expect symbolic refs to appear in refs/remotes/*/HEAD to point at
   the primary branch the remote has, and as .git/HEAD to point at the
   branch we locally checked out).

 * A partial rewrite of "git submodule" in the 2.7 timeframe changed
   the way the gitdir: pointer in the submodules point at the real
   repository location to use absolute paths by accident.  This has
   been corrected.

 * "git commit" misbehaved in a few minor ways when an empty message
   is given via -m '', all of which has been corrected.

 * Support for CRAM-MD5 authentication method in "git imap-send" did
   not work well.

 * Upcoming OpenSSL 1.1.0 will break compilation b updating a few APIs
   we use in imap-send, which has been adjusted for the change.

 * The socks5:// proxy support added back in 2.6.4 days was not aware
   that socks5h:// proxies behave differently.

 * "git config" had a codepath that tried to pass a NULL to
   printf("%s"), which nobody seems to have noticed.

 * On Cygwin, object creation uses the "create a temporary and then
   rename it to the final name" pattern, not "create a temporary,
   hardlink it to the final name and then unlink the temporary"
   pattern.

   This is necessary to use Git on Windows shared directories, and is
   already enabled for the MinGW and plain Windows builds.  It also
   has been used in Cygwin packaged versions of Git for quite a while.
   See http://thread.gmane.org/gmane.comp.version-control.git/291853

 * "merge-octopus" strategy did not ensure that the index is clean
   when merge begins.

 * When "git merge" notices that the merge can be resolved purely at
   the tree level (without having to merge blobs) and the resulting
   tree happens to already exist in the object store, it forgot to
   update the index, which lead to an inconsistent state for later
   operations.

 * "git submodule" reports the paths of submodules the command
   recurses into, but this was incorrect when the command was not run
   from the root level of the superproject.

 * The "user.useConfigOnly" configuration variable makes it an error
   if users do not explicitly set user.name and user.email.  However,
   its check was not done early enough and allowed another error to
   trigger, reporting that the default value we guessed from the
   system setting was unusable.  This was a suboptimal end-user
   experience as we want the users to set user.name/user.email without
   relying on the auto-detection at all.

 * "git mv old new" did not adjust the path for a submodule that lives
   as a subdirectory inside old/ directory correctly.

 * "git replace -e" did not honour "core.editor" configuration.

 * "git push" from a corrupt repository that attempts to push a large
   number of refs deadlocked; the thread to relay rejection notices
   for these ref updates blocked on writing them to the main thread,
   after the main thread at the receiving end notices that the push
   failed and decides not to read these notices and return a failure.

 * mmap emulation on Windows has been optimized and work better without
   consuming paging store when not needed.

 * A question by "git send-email" to ask the identity of the sender
   has been updated.

 * UI consistency improvements for "git mergetool".

 * "git rebase -m" could be asked to rebase an entire branch starting
   from the root, but failed by assuming that there always is a parent
   commit to the first commit on the branch.
   (merge 79f4344 bw/rebase-merge-entire-branch later to maint).

 * Fix a broken "p4 lfs" test.

 * Recent update to Git LFS broke "git p4" by changing the output from
   its "lfs pointer" subcommand.

 * "git fetch" test t5510 was flaky while running a (forced) automagic
   garbage collection.

 * Documentation updates to help contributors setting up Travis CI
   test for their patches.

 * Some multi-byte encoding can have a backslash byte as a later part
   of one letter, which would confuse "highlight" filter used in
   gitweb.

 * "git commit-tree" plumbing command required the user to always sign
   its result when the user sets the commit.gpgsign configuration
   variable, which was an ancient mistake.  Rework "git rebase" that
   relied on this mistake so that it reads commit.gpgsign and pass (or
   not pass) the -S option to "git commit-tree" to keep the end-user
   expectation the same, while teaching "git commit-tree" to ignore
   the configuration variable.  This will stop requiring the users to
   sign commit objects used internally as an implementation detail of
   "git stash".
   (merge 6694856 jc/commit-tree-ignore-commit-gpgsign later to maint).

 * "http.cookieFile" configuration variable clearly wants a pathname,
   but we forgot to treat it as such by e.g. applying tilde expansion.
   (merge e5a39ad bn/http-cookiefile-config later to maint).

 * Consolidate description of tilde-expansion that is done to
   configuration variables that take pathname to a single place.
   (merge dca83ab jc/config-pathname-type later to maint).

 * Correct faulty recommendation to use "git submodule deinit ." when
   de-initialising all submodules, which would result in a strange
   error message in a pathological corner case.
   (merge f6a5279 sb/submodule-deinit-all later to maint).

 * Many 'linkgit:<git documentation page>' references were broken,
   which are all fixed with this.
   (merge 1cca17d jc/linkgit-fix later to maint).

 * "git rerere" can get confused by conflict markers deliberately left
   by the inner merge step, because they are indistinguishable from
   the real conflict markers left by the outermost merge which are
   what the end user and "rerere" need to look at.  This was fixed by
   making the conflict markers left by the inner merges a bit longer.
   (merge 0f9fd5c jc/ll-merge-internal later to maint).

 * CI test was taught to build documentation pages.
   (merge b98712b ls/travis-build-doc later to maint).

 * "git fsck" learned to catch NUL byte in a commit object as
   potential error and warn.
   (merge 6d2d780 jc/fsck-nul-in-commit later to maint).

 * Portability enhancement for "rebase -i" to help platforms whose
   shell does not like "for i in <empty>" (which is not POSIX-kosher).
   (merge 8e98b35 jk/rebase-interative-eval-fix later to maint).

 * On Windows, .git and optionally any files whose name starts with a
   dot are now marked as hidden, with a core.hideDotFiles knob to
   customize this behaviour.
   (merge ebf31e7 js/windows-dotgit later to maint).

 * Documentation for "git merge --verify-signatures" has been updated
   to clarify that the signature of only the commit at the tip is
   verified.  Also the phrasing used for signature and key validity is
   adjusted to align with that used by OpenPGP.
   (merge 05a5869 kf/gpg-sig-verification-doc later to maint).

 * A couple of bugs around core.autocrlf have been fixed.
   (merge caa47ad tb/core-eol-fix later to maint).

 * Many commands normalize command line arguments from NFD to NFC
   variant of UTF-8 on OSX, but commands in the "diff" family did
   not, causing "git diff $path" to complain that no such path is
   known to Git.  They have been taught to do the normalization.
   (merge 90a78b8 ar/diff-args-osx-precompose later to maint).

 * "git difftool" learned to handle unmerged paths correctly in
   dir-diff mode.
   (merge 366f9ce da/difftool later to maint).

 * Other minor clean-ups and documentation updates
   (merge 832c0e5 lp/typofixes later to maint).
   (merge f5ee54a sb/z-is-gnutar-ism later to maint).
   (merge 2e3926b va/i18n-misc-updates later to maint).
   (merge f212dcc bn/config-doc-tt-varnames later to maint).
   (merge f54bea4 nd/remote-plural-ours-plus-theirs later to maint).
   (merge 2bb0518 ak/t4151-ls-files-could-be-empty later to maint).
   (merge 4df4313 jc/test-seq later to maint).
   (merge a75a308 tb/t5601-sed-fix later to maint).
   (merge 6c1fbe1 va/i18n-remote-comment-to-align later to maint).
   (merge dee2303 va/mailinfo-doc-typofix later to maint).

----------------------------------------------------------------

Changes since v2.8.0 are as follows:

Adam Dinwoodie (2):
      config.mak.uname: Cygwin needs OBJECT_CREATION_USES_RENAMES
      commit: --amend -m '' silently fails to wipe message

Alexander Kuleshov (1):
      submodule-config: use hashmap_iter_first()

Alexander Rinass (1):
      diff: run arguments through precompose_argv

Armin Kunaschik (1):
      t4151: make sure argument to 'test -z' is given

Ben Woosley (1):
      git-rebase--merge: don't include absent parent as a base

Brian Norris (3):
      Documentation: config: improve word ordering for http.cookieFile
      http: expand http.cookieFile as a path
      config: consistently format $variables in monospaced font

Christian Couder (5):
      Documentation: talk about pager in api-trace.txt
      builtin/apply: get rid of useless 'name' variable
      builtin/apply: handle parse_binary() failure
      builtin/apply: free patch when parse_chunk() fails
      Git/SVN: die when there is no commit metadata

David Aguilar (4):
      mergetool: support delete/delete conflicts
      mergetool: honor tempfile configuration when resolving delete conflicts
      difftool: initialize variables for readability
      difftool: handle unmerged files in dir-diff mode

David Turner (5):
      refs: move head_ref{,_submodule} to the common code
      refs: move for_each_*ref* functions into common code
      files-backend: break out ref reading
      refs: move resolve_ref_unsafe into common code
      refs: on symref reflog expire, lock symref not referrent

Dennis Kaarsemaker (1):
      Makefile: remove dependency on git.spec

Elia Pinto (1):
      api-trace.txt: fix typo

Elijah Newren (6):
      merge-recursive: remove duplicate code
      merge-recursive: do not check working copy when creating a virtual merge base
      t7605: add a testcase demonstrating a bug with trivial merges
      builtin/merge.c: fix a bug with trivial merges
      t6044: new merge testcases for when index doesn't match HEAD
      merge-octopus: abort if index does not match HEAD

Eric Sunshine (5):
      lib-gpg: drop unnecessary "missing GPG" warning
      t6302: normalize names and descriptions of signed tags
      t6302: also test annotated in addition to signed tags
      t6302: skip only signed tags rather than all tests when GPG is missing
      git-format-patch.txt: don't show -s as shorthand for multiple options

Eric Wong (4):
      send-email: more meaningful Message-ID
      send-email: do not load Data::Dumper
      pack-objects: warn on split packs disabling bitmaps
      .mailmap: update to my shorter email address

Gabriel Souza Franco (2):
      fetch-pack: fix object_id of exact sha1
      fetch-pack: update the documentation for "<refs>..." arguments

Jacob Keller (7):
      submodule: don't pass empty string arguments to submodule--helper clone
      submodule: check argc count for git submodule--helper clone
      submodule: fix submodule--helper clone usage
      submodule: fix segmentation fault in submodule--helper clone
      quote: implement sq_quotef()
      git: submodule honor -c credential.* from command line
      xdiff: add recs_match helper function

Jacob Nisnevich (2):
      mergetools: create mergetool_find_win32_cmd() helper function for winmerge
      mergetools: add support for ExamDiff

Jan Durovec (2):
      git-p4: clean-up code style in tests
      git-p4: add P4 jobs to git commit message

Jeff King (52):
      credential: let empty credential specs reset helper list
      t1515: add tests for rev-parse out-of-repo helpers
      add--interactive: allow custom diff highlighting programs
      rev-parse: let some options run outside repository
      strbuf_getwholeline: NUL-terminate getdelim buffer on error
      setup: make startup_info available everywhere
      setup: set startup_info->have_repository more reliably
      remote: don't resolve HEAD in non-repository
      mailmap: do not resolve blobs in a non-repository
      grep: turn off gitlink detection for --no-index
      use setup_git_directory() in test-* programs
      setup: document check_repository_format()
      wrap shared_repository global in get/set accessors
      lazily load core.sharedrepository
      check_repository_format_gently: stop using git_config_early
      config: drop git_config_early
      setup: refactor repo format reading and verification
      init: use setup.c's repo version verification
      setup: unify repository version callbacks
      setup: drop repository_format_version global
      verify_repository_format: mark messages for translation
      send-email: ignore trailing whitespace in mailrc alias file
      credential-cache--daemon: clarify "exit" action semantics
      t/lib-httpd: pass through GIT_CONFIG_NOSYSTEM env
      git_config_push_parameter: handle empty GIT_CONFIG_PARAMETERS
      branch: fix shortening of non-remote symrefs
      commit: do not ignore an empty message given by -m ''
      config: lower-case first word of error strings
      git_config_set_multivar_in_file: all non-zero returns are errors
      git_config_set_multivar_in_file: handle "unset" errors
      t5532: use write_script
      send-pack: close demux pipe before finishing async process
      run-command: teach async threads to ignore SIGPIPE
      send-pack: isolate sigpipe in demuxer thread
      fetch-pack: isolate sigpipe in demuxer thread
      t5504: drop sigpipe=ok from push tests
      remote.c: spell __attribute__ correctly
      t5550: fix typo in $HTTPD_URL
      t5550: break submodule config test into multiple sub-tests
      submodule: export sanitized GIT_CONFIG_PARAMETERS
      submodule--helper: move config-sanitizing to submodule.c
      submodule: use prepare_submodule_repo_env consistently
      submodule: stop sanitizing config options
      t6302: simplify non-gpg cases
      rebase--interactive: avoid empty list in shell for-loop
      test-lib: set BASH_XTRACEFD automatically
      t/lib-git-svn: drop $remote_git_svn and $git_svn_id
      t9100,t3419: enclose all test code in single-quotes
      t9107: use "return 1" instead of "exit 1"
      t9107: switch inverted single/double quotes in test
      t9103: modernize test style
      always quote shell arguments to test -z/-n

Johannes Schindelin (16):
      replace --edit: respect core.editor
      name-rev: include taggerdate in considering the best name
      win32mmap: set errno appropriately
      mmap(win32): avoid copy-on-write when it is unnecessary
      mmap(win32): avoid expensive fstat() call
      http: support sending custom HTTP headers
      tests: adjust the configuration for Apache 2.2
      t5551: make the test for extra HTTP headers more robust
      t3404: fix typo
      submodule: ensure that -c http.extraheader is heeded
      mingw: introduce the 'core.hideDotFiles' setting
      mingw: remove unnecessary definition
      Windows: only add a no-op pthread_sigmask() when needed
      perf: let's disable symlinks when they are not available
      perf: make the tests work in worktrees
      perf: run "rebase -i" under perf

Johannes Sixt (2):
      Windows: shorten code by re-using convert_slashes()
      Windows: add pthread_sigmask() that does nothing

John Keeping (3):
      config: fail if --get-urlmatch finds no value
      Documentation/git-config: use bulleted list for exit codes
      Documentation/git-config: fix --get-all description

Junio C Hamano (69):
      rerere: split conflict ID further
      rerere: scan $GIT_DIR/rr-cache/$ID when instantiating a rerere_id
      index-pack: correct --keep[=<msg>]
      index-pack: add a helper function to derive .idx/.keep filename
      rerere: handle leftover rr-cache/$ID directory and postimage files
      rerere: delay the recording of preimage
      rerere: allow multiple variants to exist
      t4200: rerere a merge with two identical conflicts
      rerere: do use multiple variants
      apply: remove unused call to free() in gitdiff_{old,new}name()
      merge: fix NULL pointer dereference when merging nothing into void
      merge: refuse to create too cool a merge by default
      pretty: enable --expand-tabs by default for selected pretty formats
      pretty: allow tweaking tabwidth in --expand-tabs
      submodule--helper: do not borrow absolute_path() result for too long
      Git 2.8.1
      First batch for post 2.8 cycle
      pretty: test --expand-tabs
      Makefile: fix misdirected redirections
      Second batch for post 2.8 cycle
      Makefile: stop pretending to support rpmbuild
      rerere: gc and clear
      rerere: move code related to "forget" together
      rerere: split code to call ll_merge() further
      rerere: adjust 'forget' to multi-variant world order
      setup.c: do not feed NULL to "%.*s" even with precision 0
      Third batch for post 2.8 cycle
      http: differentiate socks5:// and socks5h://
      t1020: do not overuse printf and use write_script
      t3404: use write_script
      Fourth batch for post 2.8 cycle
      Start preparing for 2.8.2
      fsck_commit_buffer(): do not special case the last validation
      ll-merge: fix typo in comment
      Prepare for 2.8.2
      Makefile: clean *.o files we create
      Fifth batch for post 2.8 cycle
      t3033: avoid 'ambiguous refs' warning
      pull: pass --allow-unrelated-histories to "git merge"
      Sixth batch for post 2.8 cycle
      send-email: fix grammo in the prompt that asks e-mail recipients
      Seventh batch for post 2.8 cycle
      Git 2.8.2
      Eighth batch for 2.9
      diff: undocument the compaction heuristic knobs for experimentation
      Start preparing for 2.8.3
      commit-tree: do not pay attention to commit.gpgsign
      Ninth batch for 2.9
      config: describe 'pathname' value type
      Tenth batch for 2.9
      Almost ready for 2.8.3
      test-lib-functions.sh: remove misleading comment on test_seq
      test-lib-functions.sh: rewrite test_seq without Perl
      ll-merge: use a longer conflict marker for internal merge
      t6036: remove pointless test that expects failure
      Documentation: fix linkgit references
      fsck: detect and warn a commit with embedded NUL
      ci: validate "linkgit:" in documentation
      test-parse-options: fix output when callback option fails
      test-parse-options: --expect=<string> option to simplify tests
      t0040: remove unused test helpers
      t0040: convert a few tests to use test-parse-options --expect
      Eleventh batch for 2.9
      rerere: plug memory leaks upon "rerere forget" failure
      Twelfth batch for 2.9
      Thirteenth batch for 2.9
      Git 2.8.3
      rerere: remove an null statement
      Git 2.9-rc0

Kazuki Yamaguchi (10):
      branch -d: refuse deleting a branch which is currently checked out
      refs: add a new function set_worktree_head_symref
      branch -m: update all per-worktree HEADs
      set_worktree_head_symref(): fix error message
      imap-send: use HMAC() function provided by OpenSSL
      imap-send: check NULL return of SSL_CTX_new()
      imap-send: avoid deprecated TLSv1_method()
      configure: remove checking for HMAC_CTX_cleanup
      imap-send: check for NOLOGIN capability only when using LOGIN command
      imap-send: fix CRAM-MD5 response calculation

Keller Fuchs (1):
      Documentation: clarify signature verification

Lars Schneider (8):
      git-p4: map a P4 user to Git author name and email address
      travis-ci: update Git-LFS and P4 to the latest version
      travis-ci: express Linux/OS X dependency versions more clearly
      git-p4: fix Git LFS pointer parsing
      t9824: fix wrong reference value
      Documentation: add setup instructions for Travis CI
      travis-ci: build documentation
      travis-ci: enable Git SVN tests t91xx on Linux

Laurent Arnoud (1):
      tag: add the option to force signing of annotated tags

Li Peng (1):
      typofix: assorted typofixes in comments, documentation and messages

Linus Torvalds (1):
      pretty: expand tabs in indented logs to make things line up properly

Luke Diamand (3):
      git-p4 tests: cd to / before running python
      git-p4 tests: work with python3 as well as python2
      git-p4 tests: time_in_seconds should use $PYTHON_PATH

Marios Titas (2):
      ident: check for useConfigOnly before auto-detection of name/email
      ident: give "please tell me" message upon useConfigOnly error

Matthieu Moy (11):
      Documentation/diff-config: fix description of diff.renames
      t4001-diff-rename: wrap file creations in a test
      t: add tests for diff.renames (true/false/unset)
      log: introduce init_log_defaults()
      diff: activate diff.renames by default
      lockfile: mark strings for translation
      lockfile: improve error message when lockfile exists
      git.spec.in: use README.md, not README
      README.md: don't take 'commandname' literally
      git-multimail: update to release 1.3.0
      git-multimail: update to release 1.3.1

Mehul Jain (9):
      git-pull.c: introduce git_pull_config()
      pull --rebase: add --[no-]autostash flag
      t5520: use consistent capitalization in test titles
      t5520: ensure consistent test conditions
      t5520: use better test to check stderr output
      t5520: factor out common "successful autostash" code
      t5520: factor out common "failing autostash" code
      t5520: reduce commom lines of code
      t5520: test --[no-]autostash with pull.rebase=true

Michael Haggerty (19):
      t1430: test the output and error of some commands more carefully
      t1430: clean up broken refs/tags/shadow
      t1430: don't rely on symbolic-ref for creating broken symrefs
      t1430: test for-each-ref in the presence of badly-named refs
      t1430: improve test coverage of deletion of badly-named refs
      resolve_missing_loose_ref(): simplify semantics
      resolve_ref_unsafe(): use for loop to count up to MAXDEPTH
      resolve_ref_unsafe(): ensure flags is always set
      resolve_ref_1(): eliminate local variable
      resolve_ref_1(): reorder code
      resolve_ref_1(): eliminate local variable "bad_name"
      read_raw_ref(): manage own scratch space
      files-backend: inline resolve_ref_1() into resolve_ref_unsafe()
      read_raw_ref(): change flags parameter to unsigned int
      fsck_head_link(): remove unneeded flag variable
      cmd_merge(): remove unneeded flag variable
      checkout_paths(): remove unneeded flag variable
      check_aliased_update(): check that dst_name is non-NULL
      show_head_ref(): check the result of resolve_ref_namespace()

Michael J Gruber (1):
      completion: complete --cherry-mark for git log

Michael Procter (1):
      upload-pack: use argv_array for pack_objects

Nguyễn Thái Ngọc Duy (62):
      git-apply.txt: remove a space
      git-apply.txt: mention the behavior inside a subdir
      apply: report patch skipping in verbose mode
      test helpers: move test-* to t/helper/ subdirectory
      dir.c: remove dead function fnmatch_icase()
      wrapper.c: delete dead function git_mkstemps()
      dir.c: rename str(n)cmp_icase to fspath(n)cmp
      path.c: add git_common_path() and strbuf_git_common_path()
      worktree.c: store "id" instead of "git_dir"
      worktree.c: make find_shared_symref() return struct worktree *
      worktree.c: mark current worktree
      path.c: refactor and add worktree_git_path()
      wt-status.c: split rebase detection out of wt_status_get_state()
      wt-status.c: make wt_status_check_rebase() work on any worktree
      worktree.c: avoid referencing to worktrees[i] multiple times
      worktree.c: check whether branch is rebased in another worktree
      wt-status.c: split bisect detection out of wt_status_get_state()
      worktree.c: check whether branch is bisected in another worktree
      branch: do not rename a branch under bisect or rebase
      remote.c: specify correct plural form in "commit diverge" message
      usage.c: move format processing out of die_errno()
      usage.c: add warning_errno() and error_errno()
      bisect.c: use die_errno() and warning_errno()
      builtin/am.c: use error_errno()
      builtin/branch.c: use error_errno()
      builtin/fetch.c: use error_errno()
      builtin/help.c: use warning_errno()
      builtin/mailsplit.c: use error_errno()
      builtin/merge-file.c: use error_errno()
      builtin/pack-objects.c: use die_errno() and warning_errno()
      builtin/rm.c: use warning_errno()
      builtin/update-index.c: prefer "err" to "errno" in process_lstat_error
      builtin/upload-archive.c: use error_errno()
      builtin/worktree.c: use error_errno()
      check-racy.c: use error_errno()
      combine-diff.c: use error_errno()
      compat/win32/syslog.c: use warning_errno()
      config.c: use error_errno()
      connected.c: use error_errno()
      copy.c: use error_errno()
      credential-cache--daemon.c: use warning_errno()
      diff-no-index.c: use error_errno()
      editor.c: use error_errno()
      entry.c: use error_errno()
      fast-import.c: use error_errno()
      gpg-interface.c: use error_errno()
      grep.c: use error_errno()
      http.c: use error_errno() and warning_errno()
      ident.c: use warning_errno()
      mailmap.c: use error_errno()
      reachable.c: use error_errno()
      rerere.c: use error_errno() and warning_errno()
      run-command.c: use error_errno()
      sequencer.c: use error_errno()
      server-info.c: use error_errno()
      sha1_file.c: use {error,die,warning}_errno()
      transport-helper.c: use error_errno()
      unpack-trees.c: use error_errno()
      upload-pack.c: use error_errno()
      vcs-svn: use error_errno()
      wrapper.c: use warning_errno()
      wrap-for-bin.sh: regenerate bin-wrappers when switching branches

Nikola Forró (1):
      difftool/mergetool: make the form of yes/no questions consistent

Ori Avtalion (1):
      Documentation: git diff --check detects conflict markers

Pranit Bauva (9):
      t/t7502 : drop duplicate test
      api-parse-options.txt: document OPT_CMDMODE()
      t0040-test-parse-options.sh: fix style issues
      test-parse-options: print quiet as integer
      t0040-parse-options: improve test coverage
      t/t7507: improve test coverage
      parse-options.c: make OPTION_COUNTUP respect "unspecified" values
      t7507-commit-verbose: improve test coverage by testing number of diffs
      commit: add a commit.verbose config variable

Ralf Thielow (4):
      completion: add option '--guides' to 'git help'
      completion: add 'revisions' and 'everyday' to 'git help'
      rebase-i: print an abbreviated hash when stop for editing
      string_list: use string-list API in unsorted_string_list_lookup()

Ramsay Jones (2):
      xdiff/xprepare: use the XDF_DIFF_ALG() macro to access flag bits
      xdiff/xprepare: fix a memory leak

Ray Zhang (1):
      worktree: add: introduce --checkout option

René Nyffenegger (1):
      Documentation: fix typo 'In such these cases'

SZEDER Gábor (5):
      diffcore: fix iteration order of identical files during rename detection
      for-each-ref: fix description of '--contains' in manpage
      test-lib: simplify '--option=value' parsing
      t9824: fix broken &&-chain in a subshell
      t5510: run auto-gc in the foreground

Santiago Torres (6):
      builtin/verify-tag.c: ignore SIGPIPE in gpg-interface
      t7030: test verifying multiple tags
      verify-tag: update variable name and type
      verify-tag: prepare verify_tag for libification
      verify-tag: move tag verification code to tag.c
      tag -v: verify directly rather than exec-ing verify-tag

Saurav Sachidanand (1):
      dir: store EXC_FLAG_* values in unsigned integers

Shin Kojima (1):
      gitweb: apply fallback encoding before highlight

Sidhant Sharma [:tk] (1):
      builtin/receive-pack.c: use parse_options API

Stanislav Kolotinskiy (1):
      git-send-pack: fix --all option when used with directory

Stefan Beller (44):
      submodule-config: keep update strategy around
      submodule-config: drop check against NULL
      fetching submodules: respect `submodule.fetchJobs` config option
      submodule update: direct error message to stderr
      run_processes_parallel: treat output of children as byte array
      run_processes_parallel: rename parameters for the callbacks
      git submodule update: have a dedicated helper for cloning
      submodule helper: remove double 'fatal: ' prefix
      submodule update: expose parallelism to the user
      clone: allow an explicit argument for parallel submodule clones
      clone tests: rename t57* => t56*
      rebase: decouple --exec from --interactive
      t3404: cleanup double empty lines between tests
      submodule foreach: correct path display in recursive submodules
      submodule update --init: correct path handling in recursive submodules
      submodule status: correct path handling in recursive submodules
      submodule update: align reporting path for custom command execution
      submodule update: test recursive path reporting from subdirectory
      t7407: make expectation as clear as possible
      recursive submodules: test for relative paths
      submodule--helper: fix potential NULL-dereference
      submodule--helper clone: create the submodule path just once
      notes: don't leak memory in git_config_get_notes_strategy
      abbrev_sha1_in_line: don't leak memory
      bundle: don't leak an fd in case of early return
      credential-cache, send_request: close fd when done
      submodule--helper, module_clone: always operate on absolute paths
      submodule--helper, module_clone: catch fprintf failure
      submodule: port resolve_relative_url from shell to C
      submodule: port init from shell to C
      xdiff: implement empty line chunk heuristic
      mv: allow moving nested submodules
      clone: add `--shallow-submodules` flag
      config doc: improve exit code listing
      config.c: drop local variable
      submodule-config: don't shadow `cache`
      submodule init: fail gracefully with a missing .gitmodules file
      submodule--helper update-clone: abort gracefully on missing .gitmodules
      submodule deinit test: fix broken && chain in subshell
      submodule init: redirect stdout to stderr
      t7300: mark test with SANITY
      submodule deinit: require '--all' instead of '.' for all submodules
      t3513: do not compress backup tar file
      t6041: do not compress backup tar file

Stephen P. Smith (1):
      wt-status.c: set commitable bit if there is a meaningful merge.

Sven Strickroth (3):
      commit: do not lose SQUASH_MSG contents
      MSVC: vsnprintf in Visual Studio 2015 doesn't need SNPRINTF_SIZE_CORR any more
      MSVC: use shipped headers instead of fallback definitions

Torsten Bögershausen (6):
      correct blame for files commited with CRLF
      t0027: make commit_chk_wrnNNO() reliable
      convert: allow core.autocrlf=input and core.eol=crlf
      t0027: test cases for combined attributes
      convert.c: ident + core.autocrlf didn't work
      t5601: Remove trailing space in sed expression

Vasco Almeida (16):
      l10n: fr: fix transcation of "dir"
      l10n: fr: fix wrongly translated option name
      l10n: fr: change "id de clé" to match "id-clé"
      l10n: fr: don't translate "merge" as a parameter
      i18n: index-pack: use plural string instead of normal one
      i18n: builtin/branch.c: mark option for translation
      i18n: unpack-trees: mark strings for translation
      i18n: builtin/rm.c: remove a comma ',' from string
      i18n: branch: unmark string for translation
      i18n: branch: move comment for translators
      i18n: git-parse-remote.sh: mark strings for translation
      i18n: builtin/pull.c: mark placeholders for translation
      i18n: builtin/pull.c: split strings marked for translation
      i18n: remote: add comment for translators
      Documentation/git-mailinfo: fix typo
      i18n: unpack-trees: avoid substituting only a verb in sentences

Xiaolong Ye (4):
      patch-ids: make commit_patch_id() a public helper function
      format-patch: add '--base' option to record base tree info
      format-patch: introduce --base=auto option
      format-patch: introduce format.useAutoBase configuration

brian m. carlson (6):
      sha1-name: introduce a get_oid() function
      test-match-trees: convert to use struct object_id
      match-trees: convert shift_tree() and shift_tree_by() to use object_id
      struct name_entry: use struct object_id instead of unsigned char sha1[20]
      tree-walk: convert tree_entry_extract() to use struct object_id
      match-trees: convert several leaf functions to use struct object_id

Ævar Arnfjörð Bjarmason (4):
      githooks.txt: improve the intro section
      githooks.txt: amend dangerous advice about 'update' hook ACL
      githooks.txt: minor improvements to the grammar & phrasing
      hooks: allow customizing where the hook directory is

^ permalink raw reply	[relevance 3%]

* [ANNOUNCE] Git v2.9.0-rc1
@ 2016-05-31 21:53  3% Junio C Hamano
  0 siblings, 0 replies; 200+ results
From: Junio C Hamano @ 2016-05-31 21:53 UTC (permalink / raw)
  To: git; +Cc: Linux Kernel

A release candidate Git v2.9.0-rc1 is now available for testing
at the usual places.  It is comprised of 462 non-merge commits
since v2.8.0, contributed by 63 people, 24 of which are new faces.

There still are a few topics yet to be merged to 'master' for the
upcoming release, but otherwise this is pretty much "feature
complete".  One known brown-paper-bag breakage exists in t/perf/,
whose fix is still in 'next'.

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.9.0-rc1' tag and the 'master' branch that the tag points at:

  url = https://kernel.googlesource.com/pub/scm/git/git
  url = git://repo.or.cz/alt-git.git
  url = git://git.sourceforge.jp/gitroot/git-core/git.git
  url = git://git-core.git.sourceforge.net/gitroot/git-core/git-core
  url = https://github.com/gitster/git

New contributors whose contributions weren't in v2.8.0 are as follows.
Welcome to the Git development community!

  Alexander Rinass, Armin Kunaschik, Ben Woosley, Gabriel Souza
  Franco, Jacob Nisnevich, Jan Durovec, Jean-Noël Avila, Kazuki
  Yamaguchi, Keller Fuchs, Laurent Arnoud, Li Peng, Marios Titas,
  Mehul Jain, Michael Procter, Nikola Forró, Pranit Bauva, Ray
  Zhang, René Nyffenegger, Santiago Torres, Saurav Sachidanand,
  Shin Kojima, Sidhant Sharma [:tk], Stanislav Kolotinskiy,
  and Xiaolong Ye.

Returning contributors who helped this release are as follows.
Thanks for your continued support.

  Adam Dinwoodie, Ævar Arnfjörð Bjarmason, Alexander Kuleshov,
  brian m. carlson, Brian Norris, Christian Couder, David Aguilar,
  David Turner, Dennis Kaarsemaker, Elia Pinto, Elijah Newren,
  Eric Sunshine, Eric Wong, Felipe Contreras, Jacob Keller,
  Jeff King, Jiang Xin, Johannes Schindelin, Johannes Sixt,
  John Keeping, Junio C Hamano, Karsten Blees, Lars Schneider,
  Linus Torvalds, Luke Diamand, Matthieu Moy, Michael Haggerty,
  Michael J Gruber, Michael Rappazzo, Nguyễn Thái Ngọc Duy,
  Ori Avtalion, Ralf Thielow, Ramsay Jones, Stefan Beller, Stephen
  P. Smith, Sven Strickroth, SZEDER Gábor, Torsten Bögershausen,
  and Vasco Almeida.

----------------------------------------------------------------

Git 2.9 Release Notes (draft)
=============================

Backward compatibility notes
----------------------------

The end-user facing Porcelain level commands in the "git diff" and
"git log" family by default enable the rename detection; you can still
use "diff.renames" configuration variable to disable this.

Merging two branches that have no common ancestor with "git merge" is
by default forbidden now to prevent creating such an unusual merge by
mistake.

The output formats of "git log" that indents the commit log message by
4 spaces now expands HT in the log message by default.  You can use
the "--no-expand-tabs" option to disable this.

"git commit-tree" plumbing command required the user to always sign
its result when the user sets the commit.gpgsign configuration
variable, which was an ancient mistake, which this release corrects.
A script that drives commit-tree, if it relies on this mistake, now
needs to read commit.gpgsign and pass the -S option as necessary.


Updates since v2.8
------------------

UI, Workflows & Features

 * Comes with git-multimail 1.3.1 (in contrib/).

 * The end-user facing commands like "git diff" and "git log"
   now enable the rename detection by default.

 * The credential.helper configuration variable is cumulative and
   there is no good way to override it from the command line.  As
   a special case, giving an empty string as its value now serves
   as the signal to clear the values specified in various files.

 * A new "interactive.diffFilter" configuration can be used to
   customize the diff shown in "git add -i" sessions.

 * "git p4" now allows P4 author names to be mapped to Git author
   names.

 * "git rebase -x" can be used without passing "-i" option.

 * "git -c credential.<var>=<value> submodule" can now be used to
   propagate configuration variables related to credential helper
   down to the submodules.

 * "git tag" can create an annotated tag without explicitly given an
   "-a" (or "-s") option (i.e. when a tag message is given).  A new
   configuration variable, tag.forceSignAnnotated, can be used to tell
   the command to create signed tag in such a situation.

 * "git merge" used to allow merging two branches that have no common
   base by default, which led to a brand new history of an existing
   project created and then get pulled by an unsuspecting maintainer,
   which allowed an unnecessary parallel history merged into the
   existing project.  The command has been taught not to allow this by
   default, with an escape hatch "--allow-unrelated-histories" option
   to be used in a rare event that merges histories of two projects
   that started their lives independently.

 * "git pull" has been taught to pass the "--allow-unrelated-histories"
   option to underlying "git merge".

 * "git apply -v" learned to report paths in the patch that were
   skipped via --include/--exclude mechanism or being outside the
   current working directory.

 * Shell completion (in contrib/) updates.

 * The commit object name reported when "rebase -i" stops has been
   shortened.

 * "git worktree add" can be given "--no-checkout" option to only
   create an empty worktree without checking out the files.

 * "git mergetools" learned to drive ExamDiff.

 * "git pull --rebase" learned "--[no-]autostash" option, so that
   the rebase.autostash configuration variable set to true can be
   overridden from the command line.

 * When "git log" shows the log message indented by 4-spaces, the
   remainder of a line after a HT does not align in the way the author
   originally intended.  The command now expands tabs by default to help
   such a case, and allows the users to override it with a new option,
   "--no-expand-tabs".

 * "git send-email" now uses a more readable timestamps when
   formulating a message ID.

 * "git rerere" can encounter two or more files with the same conflict
   signature that have to be resolved in different ways, but there was
   no way to record these separate resolutions.

 * "git p4" learned to record P4 jobs in Git commit that imports from
   the history in Perforce.

 * "git describe --contains" often made a hard-to-justify choice of
   tag to name a given commit, because it tried to come up
   with a name with smallest number of hops from a tag, causing an old
   commit whose close descendant that is recently tagged were not
   described with respect to an old tag but with a newer tag.  It did
   not help that its computation of "hop" count was further tweaked to
   penalize being on a side branch of a merge.  The logic has been
   updated to favor using the tag with the oldest tagger date, which
   is a lot easier to explain to the end users: "We describe a commit
   in terms of the (chronologically) oldest tag that contains the
   commit."
   (merge 7550424 js/name-rev-use-oldest-ref later to maint).

 * "git clone" learned the "--shallow-submodules" option.

 * HTTP transport clients learned to throw extra HTTP headers at the
   server, specified via http.extraHeader configuration variable.

 * Patch output from "git diff" and friends has been tweaked to be
   more readable by using a blank line as a strong hint that the
   contents before and after it belong to logically separate units.

 * A new configuration variable core.hooksPath allows customizing
   where the hook directory is.

 * An earlier addition of "sanitize_submodule_env" with 14111fc4 (git:
   submodule honor -c credential.* from command line, 2016-02-29)
   turned out to be a convoluted no-op; implement what it wanted to do
   correctly, and stop filtering settings given via "git -c var=val".

 * "git commit --dry-run" reported "No, no, you cannot commit." in one
   case where "git commit" would have allowed you to commit, and this
   improves it a little bit ("git commit --dry-run --short" still does
   not give you the correct answer, for example).  This is a stop-gap
   measure in that "commit --short --dry-run" still gives an incorrect
   result.

 * The experimental "multiple worktree" feature gains more safety to
   forbid operations on a branch that is checked out or being actively
   worked on elsewhere, by noticing that e.g. it is being rebased.

 * "git format-patch" learned a new "--base" option to record what
   (public, well-known) commit the original series was built on in
   its output.

 * "git commit" learned to pay attention to the "commit.verbose"
   configuration variable and act as if the "--verbose" option
   was given from the command line.

 * Updated documentation gives hints to GMail users with two-factor
   auth enabled that they need app-specific-password when using
   "git send-email".


Performance, Internal Implementation, Development Support etc.

 * The embedded args argv-array in the child process is used to build
   the command line to run pack-objects instead of using a separate
   array of strings.

 * A test for tags has been restructured so that more parts of it can
   easily be run on a platform without a working GnuPG.

 * The startup_info data, which records if we are working inside a
   repository (among other things), are now uniformly available to Git
   subcommand implementations, and Git avoids attempting to touch
   references when we are not in a repository.

 * The command line argument parser for "receive-pack" has been
   rewritten to use parse-options.

 * A major part of "git submodule update" has been ported to C to take
   advantage of the recently added framework to run download tasks in
   parallel.  Other updates to "git submodule" that move pieces of
   logic to C continues.

 * Rename bunch of tests on "git clone" for better organization.

 * The tests that involve running httpd leaked the system-wide
   configuration in /etc/gitconfig to the tested environment.

 * Build updates for MSVC.

 * The repository set-up sequence has been streamlined (the biggest
   change is that there is no longer git_config_early()), so that we
   do not attempt to look into refs/* when we know we do not have a
   Git repository.

 * Code restructuring around the "refs" API to prepare for pluggable
   refs backends.

 * Sources to many test helper binaries and the generated helpers
   have been moved to t/helper/ subdirectory to reduce clutter at the
   top level of the tree.

 * Unify internal logic between "git tag -v" and "git verify-tag"
   commands by making one directly call into the other.

 * "merge-recursive" strategy incorrectly checked if a path that is
   involved in its internal merge exists in the working tree.

 * The test scripts for "git p4" (but not "git p4" implementation
   itself) has been updated so that they would work even on a system
   where the installed version of Python is python 3.

 * As nobody maintains our in-tree git.spec.in and distros use their
   own spec file, we stopped pretending that we support "make rpm".

 * Move from "unsigned char[20]" to "struct object_id" continues.

 * The code for warning_errno/die_errno has been refactored and a new
   error_errno() reporting helper is introduced.
   (merge 1da045f nd/error-errno later to maint).

 * Running tests with '-x' option to trace the individual command
   executions is a useful way to debug test scripts, but some tests
   that capture the standard error stream and check what the command
   said can be broken with the trace output mixed in.  When running
   our tests under "bash", however, we can redirect the trace output
   to another file descriptor to keep the standard error of programs
   being tested intact.
   (merge d88785e jk/test-send-sh-x-trace-elsewhere later to maint).

 * t0040 had too many unnecessary repetitions in its test data.  Teach
   test-parse-options program so that a caller can tell what it
   expects in its output, so that these repetitions can be cleaned up.

 * Add perf test for "rebase -i".

 * Common mistakes when writing gitlink: in our documentation are
   found by "make check-docs".

 * t9xxx series has been updated primarily for readability, while
   fixing small bugs in it.  A few scripted Porcelain commands have
   also been updated to fix possible bugs around their use of
   "test -z" and "test -n".

 * CI test was taught to run git-svn tests.

 * "git cat-file --batch-all" has been sped up, by taking advantage
   of the fact that it does not have to read a list of objects, in two
   ways.

 * test updates to make it more readable and maintainable.
   (merge e6273f4 es/t1500-modernize later to maint).


Also contains various documentation updates and code clean-ups.


Fixes since v2.8
----------------

Unless otherwise noted, all the fixes since v2.8 in the maintenance
track are contained in this release (see the maintenance releases'
notes for details).

 * "git config --get-urlmatch", unlike other variants of the "git
   config --get" family, did not signal error with its exit status
   when there was no matching configuration.

 * The "--local-env-vars" and "--resolve-git-dir" options of "git
   rev-parse" failed to work outside a repository when the command's
   option parsing was rewritten in 1.8.5 era.

 * "git index-pack --keep[=<msg>] pack-$name.pack" simply did not work.

 * Fetching of history by naming a commit object name directly didn't
   work across remote-curl transport.

 * A small memory leak in an error codepath has been plugged in xdiff
   code.

 * strbuf_getwholeline() did not NUL-terminate the buffer on certain
   corner cases in its error codepath.

 * "git mergetool" did not work well with conflicts that both sides
   deleted.

 * "git send-email" had trouble parsing alias file in mailrc format
   when lines in it had trailing whitespaces on them.

 * When "git merge --squash" stopped due to conflict, the concluding
   "git commit" failed to read in the SQUASH_MSG that shows the log
   messages from all the squashed commits.

 * "git merge FETCH_HEAD" dereferenced NULL pointer when merging
   nothing into an unborn history (which is arguably unusual usage,
   which perhaps was the reason why nobody noticed it).

 * When "git worktree" feature is in use, "git branch -d" allowed
   deletion of a branch that is checked out in another worktree,
   which was wrong.

 * When "git worktree" feature is in use, "git branch -m" renamed a
   branch that is checked out in another worktree without adjusting
   the HEAD symbolic ref for the worktree.

 * "git diff -M" used to work better when two originally identical
   files A and B got renamed to X/A and X/B by pairing A to X/A and B
   to X/B, but this was broken in the 2.0 timeframe.

 * "git send-pack --all <there>" was broken when its command line
   option parsing was written in the 2.6 timeframe.

 * "git format-patch --help" showed `-s` and `--no-patch` as if these
   are valid options to the command.  We already hide `--patch` option
   from the documentation, because format-patch is about showing the
   diff, and the documentation now hides these options as well.

 * When running "git blame $path" with unnormalized data in the index
   for the path, the data in the working tree was blamed, even though
   "git add" would not have changed what is already in the index, due
   to "safe crlf" that disables the line-end conversion.  It has been
   corrected.

 * A change back in version 2.7 to "git branch" broke display of a
   symbolic ref in a non-standard place in the refs/ hierarchy (we
   expect symbolic refs to appear in refs/remotes/*/HEAD to point at
   the primary branch the remote has, and as .git/HEAD to point at the
   branch we locally checked out).

 * A partial rewrite of "git submodule" in the 2.7 timeframe changed
   the way the gitdir: pointer in the submodules point at the real
   repository location to use absolute paths by accident.  This has
   been corrected.

 * "git commit" misbehaved in a few minor ways when an empty message
   is given via -m '', all of which has been corrected.

 * Support for CRAM-MD5 authentication method in "git imap-send" did
   not work well.

 * Upcoming OpenSSL 1.1.0 will break compilation by updating a few API
   elements we use in imap-send, which has been adjusted for the change.

 * The socks5:// proxy support added back in 2.6.4 days was not aware
   that socks5h:// proxies behave differently from socks5:// proxies.

 * "git config" had a codepath that tried to pass a NULL to
   printf("%s"), which nobody seems to have noticed.

 * On Cygwin, object creation uses the "create a temporary and then
   rename it to the final name" pattern, not "create a temporary,
   hardlink it to the final name and then unlink the temporary"
   pattern.

   This is necessary to use Git on Windows shared directories, and is
   already enabled for the MinGW and plain Windows builds.  It also
   has been used in Cygwin packaged versions of Git for quite a while.
   See http://thread.gmane.org/gmane.comp.version-control.git/291853

 * "merge-octopus" strategy did not ensure that the index is clean
   when merge begins.

 * When "git merge" notices that the merge can be resolved purely at
   the tree level (without having to merge blobs) and the resulting
   tree happens to already exist in the object store, it forgot to
   update the index, which left an inconsistent state that would
   break later operations.

 * "git submodule" reports the paths of submodules the command
   recurses into, but these paths were incorrectly reported when
   the command was not run from the root level of the superproject.

 * The "user.useConfigOnly" configuration variable makes it an error
   if users do not explicitly set user.name and user.email.  However,
   its check was not done early enough and allowed another error to
   trigger, reporting that the default value we guessed from the
   system setting was unusable.  This was a suboptimal end-user
   experience as we want the users to set user.name/user.email without
   relying on the auto-detection at all.

 * "git mv old new" did not adjust the path for a submodule that lives
   as a subdirectory inside old/ directory correctly.

 * "git replace -e" did not honour "core.editor" configuration.

 * "git push" from a corrupt repository that attempts to push a large
   number of refs deadlocked; the thread to relay rejection notices
   for these ref updates blocked on writing them to the main thread,
   after the main thread at the receiving end notices that the push
   failed and decides not to read these notices and return a failure.

 * mmap emulation on Windows has been optimized and work better without
   consuming paging store when not needed.

 * A question by "git send-email" to ask the identity of the sender
   has been updated.

 * UI consistency improvements for "git mergetool".

 * "git rebase -m" could be asked to rebase an entire branch starting
   from the root, but failed by assuming that there always is a parent
   commit to the first commit on the branch.

 * Fix a broken "p4 lfs" test.

 * Recent update to Git LFS broke "git p4" by changing the output from
   its "lfs pointer" subcommand.

 * "git fetch" test t5510 was flaky while running a (forced) automagic
   garbage collection.

 * Documentation updates to help contributors setting up Travis CI
   test for their patches.

 * Some multi-byte encoding can have a backslash byte as a later part
   of one letter, which would confuse "highlight" filter used in
   gitweb.

 * "git commit-tree" plumbing command required the user to always sign
   its result when the user sets the commit.gpgsign configuration
   variable, which was an ancient mistake.  Rework "git rebase" that
   relied on this mistake so that it reads commit.gpgsign and pass (or
   not pass) the -S option to "git commit-tree" to keep the end-user
   expectation the same, while teaching "git commit-tree" to ignore
   the configuration variable.  This will stop requiring the users to
   sign commit objects used internally as an implementation detail of
   "git stash".

 * "http.cookieFile" configuration variable clearly wants a pathname,
   but we forgot to treat it as such by e.g. applying tilde expansion.
   (merge e5a39ad bn/http-cookiefile-config later to maint).

 * Consolidate description of tilde-expansion that is done to
   configuration variables that take pathname to a single place.
   (merge dca83ab jc/config-pathname-type later to maint).

 * Correct faulty recommendation to use "git submodule deinit ." when
   de-initialising all submodules, which would result in a strange
   error message in a pathological corner case.
   (merge f6a5279 sb/submodule-deinit-all later to maint).

 * Many 'linkgit:<git documentation page>' references were broken,
   which are all fixed with this.
   (merge 1cca17d jc/linkgit-fix later to maint).

 * "git rerere" can get confused by conflict markers deliberately left
   by the inner merge step, because they are indistinguishable from
   the real conflict markers left by the outermost merge which are
   what the end user and "rerere" need to look at.  This was fixed by
   making the conflict markers left by the inner merges a bit longer.
   (merge 0f9fd5c jc/ll-merge-internal later to maint).

 * CI test was taught to build documentation pages.
   (merge b98712b ls/travis-build-doc later to maint).

 * "git fsck" learned to catch NUL byte in a commit object as
   potential error and warn.
   (merge 6d2d780 jc/fsck-nul-in-commit later to maint).

 * Portability enhancement for "rebase -i" to help platforms whose
   shell does not like "for i in <empty>" (which is not POSIX-kosher).
   (merge 8e98b35 jk/rebase-interactive-eval-fix later to maint).

 * On Windows, .git and optionally any files whose name starts with a
   dot are now marked as hidden, with a core.hideDotFiles knob to
   customize this behaviour.
   (merge ebf31e7 js/windows-dotgit later to maint).

 * Documentation for "git merge --verify-signatures" has been updated
   to clarify that the signature of only the commit at the tip is
   verified.  Also the phrasing used for signature and key validity is
   adjusted to align with that used by OpenPGP.
   (merge 05a5869 kf/gpg-sig-verification-doc later to maint).

 * A couple of bugs around core.autocrlf have been fixed.
   (merge caa47ad tb/core-eol-fix later to maint).

 * Many commands normalize command line arguments from NFD to NFC
   variant of UTF-8 on OSX, but commands in the "diff" family did
   not, causing "git diff $path" to complain that no such path is
   known to Git.  They have been taught to do the normalization.
   (merge 90a78b8 ar/diff-args-osx-precompose later to maint).

 * "git difftool" learned to handle unmerged paths correctly in
   dir-diff mode.
   (merge 366f9ce da/difftool later to maint).

 * The "are we talking with TTY, doing an interactive session?"
   detection has been updated to work better for "Git for Windows".
   (merge f7f90e0 kb/msys2-tty later to maint).

 * We forgot to add "git log --decorate=auto" to documentation when we
   added the feature back in v2.1.0 timeframe.
   (merge 462cbb4 rj/log-decorate-auto later to maint).

 * "git fast-import --export-marks" would overwrite the existing marks
   file even when it makes a dump from its custom die routine.
   Prevent it from doing so when we have an import-marks file but
   haven't finished reading it.
   (merge f4beed6 fc/fast-import-broken-marks-file later to maint).

 * Other minor clean-ups and documentation updates
   (merge 832c0e5 lp/typofixes later to maint).
   (merge f5ee54a sb/z-is-gnutar-ism later to maint).
   (merge 2e3926b va/i18n-misc-updates later to maint).
   (merge f212dcc bn/config-doc-tt-varnames later to maint).
   (merge f54bea4 nd/remote-plural-ours-plus-theirs later to maint).
   (merge 2bb0518 ak/t4151-ls-files-could-be-empty later to maint).
   (merge 4df4313 jc/test-seq later to maint).
   (merge a75a308 tb/t5601-sed-fix later to maint).
   (merge 6c1fbe1 va/i18n-remote-comment-to-align later to maint).
   (merge dee2303 va/mailinfo-doc-typofix later to maint).

----------------------------------------------------------------

Changes since v2.8.0 are as follows:

Adam Dinwoodie (2):
      config.mak.uname: Cygwin needs OBJECT_CREATION_USES_RENAMES
      commit: --amend -m '' silently fails to wipe message

Alexander Kuleshov (1):
      submodule-config: use hashmap_iter_first()

Alexander Rinass (1):
      diff: run arguments through precompose_argv

Armin Kunaschik (2):
      t4151: make sure argument to 'test -z' is given
      t0008: 4 tests fail with ksh88

Ben Woosley (1):
      git-rebase--merge: don't include absent parent as a base

Brian Norris (3):
      Documentation: config: improve word ordering for http.cookieFile
      http: expand http.cookieFile as a path
      config: consistently format $variables in monospaced font

Christian Couder (5):
      Documentation: talk about pager in api-trace.txt
      builtin/apply: get rid of useless 'name' variable
      builtin/apply: handle parse_binary() failure
      builtin/apply: free patch when parse_chunk() fails
      Git/SVN: die when there is no commit metadata

David Aguilar (4):
      mergetool: support delete/delete conflicts
      mergetool: honor tempfile configuration when resolving delete conflicts
      difftool: initialize variables for readability
      difftool: handle unmerged files in dir-diff mode

David Turner (5):
      refs: move head_ref{,_submodule} to the common code
      refs: move for_each_*ref* functions into common code
      files-backend: break out ref reading
      refs: move resolve_ref_unsafe into common code
      refs: on symref reflog expire, lock symref not referrent

Dennis Kaarsemaker (1):
      Makefile: remove dependency on git.spec

Elia Pinto (1):
      api-trace.txt: fix typo

Elijah Newren (6):
      merge-recursive: remove duplicate code
      merge-recursive: do not check working copy when creating a virtual merge base
      t7605: add a testcase demonstrating a bug with trivial merges
      builtin/merge.c: fix a bug with trivial merges
      merge-octopus: abort if index does not match HEAD
      t6044: new merge testcases for when index doesn't match HEAD

Eric Sunshine (10):
      lib-gpg: drop unnecessary "missing GPG" warning
      t6302: normalize names and descriptions of signed tags
      t6302: also test annotated in addition to signed tags
      t6302: skip only signed tags rather than all tests when GPG is missing
      git-format-patch.txt: don't show -s as shorthand for multiple options
      t1500: be considerate to future potential tests
      t1500: test_rev_parse: facilitate future test enhancements
      t1500: avoid changing working directory outside of tests
      t1500: avoid setting configuration options outside of tests
      t1500: avoid setting environment variables outside of tests

Eric Wong (4):
      send-email: more meaningful Message-ID
      send-email: do not load Data::Dumper
      pack-objects: warn on split packs disabling bitmaps
      .mailmap: update to my shorter email address

Felipe Contreras (1):
      fast-import: do not truncate exported marks file

Gabriel Souza Franco (2):
      fetch-pack: fix object_id of exact sha1
      fetch-pack: update the documentation for "<refs>..." arguments

Jacob Keller (7):
      submodule: don't pass empty string arguments to submodule--helper clone
      submodule: check argc count for git submodule--helper clone
      submodule: fix submodule--helper clone usage
      submodule: fix segmentation fault in submodule--helper clone
      quote: implement sq_quotef()
      git: submodule honor -c credential.* from command line
      xdiff: add recs_match helper function

Jacob Nisnevich (2):
      mergetools: create mergetool_find_win32_cmd() helper function for winmerge
      mergetools: add support for ExamDiff

Jan Durovec (2):
      git-p4: clean-up code style in tests
      git-p4: add P4 jobs to git commit message

Jeff King (55):
      credential: let empty credential specs reset helper list
      t1515: add tests for rev-parse out-of-repo helpers
      add--interactive: allow custom diff highlighting programs
      rev-parse: let some options run outside repository
      strbuf_getwholeline: NUL-terminate getdelim buffer on error
      setup: make startup_info available everywhere
      setup: set startup_info->have_repository more reliably
      remote: don't resolve HEAD in non-repository
      mailmap: do not resolve blobs in a non-repository
      grep: turn off gitlink detection for --no-index
      use setup_git_directory() in test-* programs
      setup: document check_repository_format()
      wrap shared_repository global in get/set accessors
      lazily load core.sharedrepository
      check_repository_format_gently: stop using git_config_early
      config: drop git_config_early
      setup: refactor repo format reading and verification
      init: use setup.c's repo version verification
      setup: unify repository version callbacks
      setup: drop repository_format_version global
      verify_repository_format: mark messages for translation
      send-email: ignore trailing whitespace in mailrc alias file
      credential-cache--daemon: clarify "exit" action semantics
      t/lib-httpd: pass through GIT_CONFIG_NOSYSTEM env
      git_config_push_parameter: handle empty GIT_CONFIG_PARAMETERS
      branch: fix shortening of non-remote symrefs
      commit: do not ignore an empty message given by -m ''
      config: lower-case first word of error strings
      git_config_set_multivar_in_file: all non-zero returns are errors
      git_config_set_multivar_in_file: handle "unset" errors
      t5532: use write_script
      send-pack: close demux pipe before finishing async process
      run-command: teach async threads to ignore SIGPIPE
      send-pack: isolate sigpipe in demuxer thread
      fetch-pack: isolate sigpipe in demuxer thread
      t5504: drop sigpipe=ok from push tests
      remote.c: spell __attribute__ correctly
      t5550: fix typo in $HTTPD_URL
      t5550: break submodule config test into multiple sub-tests
      submodule: export sanitized GIT_CONFIG_PARAMETERS
      submodule--helper: move config-sanitizing to submodule.c
      submodule: use prepare_submodule_repo_env consistently
      submodule: stop sanitizing config options
      t6302: simplify non-gpg cases
      rebase--interactive: avoid empty list in shell for-loop
      test-lib: set BASH_XTRACEFD automatically
      t/lib-git-svn: drop $remote_git_svn and $git_svn_id
      t9100,t3419: enclose all test code in single-quotes
      t9107: use "return 1" instead of "exit 1"
      t9107: switch inverted single/double quotes in test
      t9103: modernize test style
      always quote shell arguments to test -z/-n
      cat-file: avoid noop calls to sha1_object_info_extended
      cat-file: default to --buffer when --batch-all-objects is used
      archive-tar: convert snprintf to xsnprintf

Johannes Schindelin (16):
      replace --edit: respect core.editor
      name-rev: include taggerdate in considering the best name
      win32mmap: set errno appropriately
      mmap(win32): avoid copy-on-write when it is unnecessary
      mmap(win32): avoid expensive fstat() call
      http: support sending custom HTTP headers
      tests: adjust the configuration for Apache 2.2
      t5551: make the test for extra HTTP headers more robust
      t3404: fix typo
      submodule: ensure that -c http.extraheader is heeded
      mingw: introduce the 'core.hideDotFiles' setting
      mingw: remove unnecessary definition
      Windows: only add a no-op pthread_sigmask() when needed
      perf: let's disable symlinks when they are not available
      perf: make the tests work in worktrees
      perf: run "rebase -i" under perf

Johannes Sixt (3):
      Windows: shorten code by re-using convert_slashes()
      Windows: add pthread_sigmask() that does nothing
      t6044: replace seq by test_seq

John Keeping (3):
      config: fail if --get-urlmatch finds no value
      Documentation/git-config: use bulleted list for exit codes
      Documentation/git-config: fix --get-all description

Junio C Hamano (74):
      rerere: split conflict ID further
      rerere: scan $GIT_DIR/rr-cache/$ID when instantiating a rerere_id
      index-pack: correct --keep[=<msg>]
      index-pack: add a helper function to derive .idx/.keep filename
      rerere: handle leftover rr-cache/$ID directory and postimage files
      rerere: delay the recording of preimage
      rerere: allow multiple variants to exist
      t4200: rerere a merge with two identical conflicts
      rerere: do use multiple variants
      apply: remove unused call to free() in gitdiff_{old,new}name()
      merge: fix NULL pointer dereference when merging nothing into void
      merge: refuse to create too cool a merge by default
      pretty: enable --expand-tabs by default for selected pretty formats
      pretty: allow tweaking tabwidth in --expand-tabs
      submodule--helper: do not borrow absolute_path() result for too long
      Git 2.8.1
      First batch for post 2.8 cycle
      pretty: test --expand-tabs
      Makefile: fix misdirected redirections
      Second batch for post 2.8 cycle
      Makefile: stop pretending to support rpmbuild
      rerere: gc and clear
      rerere: move code related to "forget" together
      rerere: split code to call ll_merge() further
      rerere: adjust 'forget' to multi-variant world order
      setup.c: do not feed NULL to "%.*s" even with precision 0
      Third batch for post 2.8 cycle
      http: differentiate socks5:// and socks5h://
      t1020: do not overuse printf and use write_script
      t3404: use write_script
      Fourth batch for post 2.8 cycle
      Start preparing for 2.8.2
      fsck_commit_buffer(): do not special case the last validation
      ll-merge: fix typo in comment
      Prepare for 2.8.2
      Makefile: clean *.o files we create
      Fifth batch for post 2.8 cycle
      t3033: avoid 'ambiguous refs' warning
      pull: pass --allow-unrelated-histories to "git merge"
      Sixth batch for post 2.8 cycle
      send-email: fix grammo in the prompt that asks e-mail recipients
      Seventh batch for post 2.8 cycle
      Git 2.8.2
      Eighth batch for 2.9
      diff: undocument the compaction heuristic knobs for experimentation
      Start preparing for 2.8.3
      commit-tree: do not pay attention to commit.gpgsign
      Ninth batch for 2.9
      config: describe 'pathname' value type
      Tenth batch for 2.9
      Almost ready for 2.8.3
      test-lib-functions.sh: remove misleading comment on test_seq
      test-lib-functions.sh: rewrite test_seq without Perl
      ll-merge: use a longer conflict marker for internal merge
      t6036: remove pointless test that expects failure
      Documentation: fix linkgit references
      fsck: detect and warn a commit with embedded NUL
      ci: validate "linkgit:" in documentation
      test-parse-options: fix output when callback option fails
      test-parse-options: --expect=<string> option to simplify tests
      t0040: remove unused test helpers
      t0040: convert a few tests to use test-parse-options --expect
      Eleventh batch for 2.9
      rerere: plug memory leaks upon "rerere forget" failure
      Twelfth batch for 2.9
      Thirteenth batch for 2.9
      Git 2.8.3
      rerere: remove an null statement
      Git 2.9-rc0
      t4204: do not let $name variable clobbered
      Start preparing for 2.8.4
      Final batch before 2.9-rc1
      More topics for 2.8.4
      Git 2.9-rc1

Karsten Blees (1):
      mingw: make isatty() recognize MSYS2's pseudo terminals (/dev/pty*)

Kazuki Yamaguchi (10):
      branch -d: refuse deleting a branch which is currently checked out
      refs: add a new function set_worktree_head_symref
      branch -m: update all per-worktree HEADs
      set_worktree_head_symref(): fix error message
      imap-send: use HMAC() function provided by OpenSSL
      imap-send: check NULL return of SSL_CTX_new()
      imap-send: avoid deprecated TLSv1_method()
      configure: remove checking for HMAC_CTX_cleanup
      imap-send: check for NOLOGIN capability only when using LOGIN command
      imap-send: fix CRAM-MD5 response calculation

Keller Fuchs (1):
      Documentation: clarify signature verification

Lars Schneider (8):
      git-p4: map a P4 user to Git author name and email address
      travis-ci: update Git-LFS and P4 to the latest version
      travis-ci: express Linux/OS X dependency versions more clearly
      git-p4: fix Git LFS pointer parsing
      t9824: fix wrong reference value
      Documentation: add setup instructions for Travis CI
      travis-ci: build documentation
      travis-ci: enable Git SVN tests t91xx on Linux

Laurent Arnoud (1):
      tag: add the option to force signing of annotated tags

Li Peng (1):
      typofix: assorted typofixes in comments, documentation and messages

Linus Torvalds (1):
      pretty: expand tabs in indented logs to make things line up properly

Luke Diamand (3):
      git-p4 tests: cd to / before running python
      git-p4 tests: work with python3 as well as python2
      git-p4 tests: time_in_seconds should use $PYTHON_PATH

Marios Titas (2):
      ident: check for useConfigOnly before auto-detection of name/email
      ident: give "please tell me" message upon useConfigOnly error

Matthieu Moy (11):
      Documentation/diff-config: fix description of diff.renames
      t4001-diff-rename: wrap file creations in a test
      t: add tests for diff.renames (true/false/unset)
      log: introduce init_log_defaults()
      diff: activate diff.renames by default
      lockfile: mark strings for translation
      lockfile: improve error message when lockfile exists
      git.spec.in: use README.md, not README
      README.md: don't take 'commandname' literally
      git-multimail: update to release 1.3.0
      git-multimail: update to release 1.3.1

Mehul Jain (9):
      git-pull.c: introduce git_pull_config()
      pull --rebase: add --[no-]autostash flag
      t5520: use consistent capitalization in test titles
      t5520: ensure consistent test conditions
      t5520: use better test to check stderr output
      t5520: factor out common "successful autostash" code
      t5520: factor out common "failing autostash" code
      t5520: reduce commom lines of code
      t5520: test --[no-]autostash with pull.rebase=true

Michael Haggerty (19):
      t1430: test the output and error of some commands more carefully
      t1430: clean up broken refs/tags/shadow
      t1430: don't rely on symbolic-ref for creating broken symrefs
      t1430: test for-each-ref in the presence of badly-named refs
      t1430: improve test coverage of deletion of badly-named refs
      resolve_missing_loose_ref(): simplify semantics
      resolve_ref_unsafe(): use for loop to count up to MAXDEPTH
      resolve_ref_unsafe(): ensure flags is always set
      resolve_ref_1(): eliminate local variable
      resolve_ref_1(): reorder code
      resolve_ref_1(): eliminate local variable "bad_name"
      read_raw_ref(): manage own scratch space
      files-backend: inline resolve_ref_1() into resolve_ref_unsafe()
      read_raw_ref(): change flags parameter to unsigned int
      fsck_head_link(): remove unneeded flag variable
      cmd_merge(): remove unneeded flag variable
      checkout_paths(): remove unneeded flag variable
      check_aliased_update(): check that dst_name is non-NULL
      show_head_ref(): check the result of resolve_ref_namespace()

Michael J Gruber (1):
      completion: complete --cherry-mark for git log

Michael Procter (1):
      upload-pack: use argv_array for pack_objects

Michael Rappazzo (1):
      Documentation: add instructions to help setup gmail 2FA

Nguyễn Thái Ngọc Duy (62):
      git-apply.txt: remove a space
      git-apply.txt: mention the behavior inside a subdir
      apply: report patch skipping in verbose mode
      test helpers: move test-* to t/helper/ subdirectory
      dir.c: remove dead function fnmatch_icase()
      wrapper.c: delete dead function git_mkstemps()
      dir.c: rename str(n)cmp_icase to fspath(n)cmp
      path.c: add git_common_path() and strbuf_git_common_path()
      worktree.c: store "id" instead of "git_dir"
      worktree.c: make find_shared_symref() return struct worktree *
      worktree.c: mark current worktree
      path.c: refactor and add worktree_git_path()
      wt-status.c: split rebase detection out of wt_status_get_state()
      wt-status.c: make wt_status_check_rebase() work on any worktree
      worktree.c: avoid referencing to worktrees[i] multiple times
      worktree.c: check whether branch is rebased in another worktree
      wt-status.c: split bisect detection out of wt_status_get_state()
      worktree.c: check whether branch is bisected in another worktree
      branch: do not rename a branch under bisect or rebase
      remote.c: specify correct plural form in "commit diverge" message
      usage.c: move format processing out of die_errno()
      usage.c: add warning_errno() and error_errno()
      bisect.c: use die_errno() and warning_errno()
      builtin/am.c: use error_errno()
      builtin/branch.c: use error_errno()
      builtin/fetch.c: use error_errno()
      builtin/help.c: use warning_errno()
      builtin/mailsplit.c: use error_errno()
      builtin/merge-file.c: use error_errno()
      builtin/pack-objects.c: use die_errno() and warning_errno()
      builtin/rm.c: use warning_errno()
      builtin/update-index.c: prefer "err" to "errno" in process_lstat_error
      builtin/upload-archive.c: use error_errno()
      builtin/worktree.c: use error_errno()
      check-racy.c: use error_errno()
      combine-diff.c: use error_errno()
      compat/win32/syslog.c: use warning_errno()
      config.c: use error_errno()
      connected.c: use error_errno()
      copy.c: use error_errno()
      credential-cache--daemon.c: use warning_errno()
      diff-no-index.c: use error_errno()
      editor.c: use error_errno()
      entry.c: use error_errno()
      fast-import.c: use error_errno()
      gpg-interface.c: use error_errno()
      grep.c: use error_errno()
      http.c: use error_errno() and warning_errno()
      ident.c: use warning_errno()
      mailmap.c: use error_errno()
      reachable.c: use error_errno()
      rerere.c: use error_errno() and warning_errno()
      run-command.c: use error_errno()
      sequencer.c: use error_errno()
      server-info.c: use error_errno()
      sha1_file.c: use {error,die,warning}_errno()
      transport-helper.c: use error_errno()
      unpack-trees.c: use error_errno()
      upload-pack.c: use error_errno()
      vcs-svn: use error_errno()
      wrapper.c: use warning_errno()
      wrap-for-bin.sh: regenerate bin-wrappers when switching branches

Nikola Forró (1):
      difftool/mergetool: make the form of yes/no questions consistent

Ori Avtalion (1):
      Documentation: git diff --check detects conflict markers

Pranit Bauva (9):
      t/t7502 : drop duplicate test
      api-parse-options.txt: document OPT_CMDMODE()
      t0040-test-parse-options.sh: fix style issues
      test-parse-options: print quiet as integer
      t0040-parse-options: improve test coverage
      t/t7507: improve test coverage
      parse-options.c: make OPTION_COUNTUP respect "unspecified" values
      t7507-commit-verbose: improve test coverage by testing number of diffs
      commit: add a commit.verbose config variable

Ralf Thielow (4):
      completion: add option '--guides' to 'git help'
      completion: add 'revisions' and 'everyday' to 'git help'
      rebase-i: print an abbreviated hash when stop for editing
      string_list: use string-list API in unsorted_string_list_lookup()

Ramsay Jones (3):
      xdiff/xprepare: use the XDF_DIFF_ALG() macro to access flag bits
      xdiff/xprepare: fix a memory leak
      log: document the --decorate=auto option

Ray Zhang (1):
      worktree: add: introduce --checkout option

René Nyffenegger (1):
      Documentation: fix typo 'In such these cases'

SZEDER Gábor (5):
      diffcore: fix iteration order of identical files during rename detection
      for-each-ref: fix description of '--contains' in manpage
      test-lib: simplify '--option=value' parsing
      t9824: fix broken &&-chain in a subshell
      t5510: run auto-gc in the foreground

Santiago Torres (6):
      builtin/verify-tag.c: ignore SIGPIPE in gpg-interface
      t7030: test verifying multiple tags
      verify-tag: update variable name and type
      verify-tag: prepare verify_tag for libification
      verify-tag: move tag verification code to tag.c
      tag -v: verify directly rather than exec-ing verify-tag

Saurav Sachidanand (1):
      dir: store EXC_FLAG_* values in unsigned integers

Shin Kojima (1):
      gitweb: apply fallback encoding before highlight

Sidhant Sharma [:tk] (1):
      builtin/receive-pack.c: use parse_options API

Stanislav Kolotinskiy (1):
      git-send-pack: fix --all option when used with directory

Stefan Beller (44):
      submodule-config: keep update strategy around
      submodule-config: drop check against NULL
      fetching submodules: respect `submodule.fetchJobs` config option
      submodule update: direct error message to stderr
      run_processes_parallel: treat output of children as byte array
      run_processes_parallel: rename parameters for the callbacks
      git submodule update: have a dedicated helper for cloning
      submodule helper: remove double 'fatal: ' prefix
      submodule update: expose parallelism to the user
      clone: allow an explicit argument for parallel submodule clones
      clone tests: rename t57* => t56*
      rebase: decouple --exec from --interactive
      t3404: cleanup double empty lines between tests
      submodule foreach: correct path display in recursive submodules
      submodule update --init: correct path handling in recursive submodules
      submodule status: correct path handling in recursive submodules
      submodule update: align reporting path for custom command execution
      submodule update: test recursive path reporting from subdirectory
      t7407: make expectation as clear as possible
      recursive submodules: test for relative paths
      submodule--helper: fix potential NULL-dereference
      submodule--helper clone: create the submodule path just once
      notes: don't leak memory in git_config_get_notes_strategy
      abbrev_sha1_in_line: don't leak memory
      bundle: don't leak an fd in case of early return
      credential-cache, send_request: close fd when done
      submodule--helper, module_clone: always operate on absolute paths
      submodule--helper, module_clone: catch fprintf failure
      submodule: port resolve_relative_url from shell to C
      submodule: port init from shell to C
      xdiff: implement empty line chunk heuristic
      mv: allow moving nested submodules
      clone: add `--shallow-submodules` flag
      config doc: improve exit code listing
      config.c: drop local variable
      submodule-config: don't shadow `cache`
      submodule init: fail gracefully with a missing .gitmodules file
      submodule--helper update-clone: abort gracefully on missing .gitmodules
      submodule deinit test: fix broken && chain in subshell
      submodule init: redirect stdout to stderr
      t7300: mark test with SANITY
      submodule deinit: require '--all' instead of '.' for all submodules
      t3513: do not compress backup tar file
      t6041: do not compress backup tar file

Stephen P. Smith (1):
      wt-status.c: set commitable bit if there is a meaningful merge.

Sven Strickroth (3):
      commit: do not lose SQUASH_MSG contents
      MSVC: vsnprintf in Visual Studio 2015 doesn't need SNPRINTF_SIZE_CORR any more
      MSVC: use shipped headers instead of fallback definitions

Torsten Bögershausen (6):
      correct blame for files commited with CRLF
      t0027: make commit_chk_wrnNNO() reliable
      convert: allow core.autocrlf=input and core.eol=crlf
      t0027: test cases for combined attributes
      convert.c: ident + core.autocrlf didn't work
      t5601: Remove trailing space in sed expression

Vasco Almeida (16):
      l10n: fr: fix transcation of "dir"
      l10n: fr: fix wrongly translated option name
      l10n: fr: change "id de clé" to match "id-clé"
      l10n: fr: don't translate "merge" as a parameter
      i18n: index-pack: use plural string instead of normal one
      i18n: builtin/branch.c: mark option for translation
      i18n: unpack-trees: mark strings for translation
      i18n: builtin/rm.c: remove a comma ',' from string
      i18n: branch: unmark string for translation
      i18n: branch: move comment for translators
      i18n: git-parse-remote.sh: mark strings for translation
      i18n: builtin/pull.c: mark placeholders for translation
      i18n: builtin/pull.c: split strings marked for translation
      i18n: remote: add comment for translators
      Documentation/git-mailinfo: fix typo
      i18n: unpack-trees: avoid substituting only a verb in sentences

Xiaolong Ye (4):
      patch-ids: make commit_patch_id() a public helper function
      format-patch: add '--base' option to record base tree info
      format-patch: introduce --base=auto option
      format-patch: introduce format.useAutoBase configuration

brian m. carlson (6):
      sha1-name: introduce a get_oid() function
      test-match-trees: convert to use struct object_id
      match-trees: convert shift_tree() and shift_tree_by() to use object_id
      struct name_entry: use struct object_id instead of unsigned char sha1[20]
      tree-walk: convert tree_entry_extract() to use struct object_id
      match-trees: convert several leaf functions to use struct object_id

Ævar Arnfjörð Bjarmason (4):
      githooks.txt: improve the intro section
      githooks.txt: amend dangerous advice about 'update' hook ACL
      githooks.txt: minor improvements to the grammar & phrasing
      hooks: allow customizing where the hook directory is

^ permalink raw reply	[relevance 3%]

* [ANNOUNCE] Git v2.9.0-rc2
@ 2016-06-07  5:57  2% Junio C Hamano
  0 siblings, 0 replies; 200+ results
From: Junio C Hamano @ 2016-06-07  5:57 UTC (permalink / raw)
  To: git; +Cc: Linux Kernel

A release candidate Git v2.9.0-rc2 is now available for testing
at the usual places.  It is comprised of 477 non-merge commits
since v2.8.0, contributed by 67 people, 27 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.9.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 = git://git.sourceforge.jp/gitroot/git-core/git.git
  url = git://git-core.git.sourceforge.net/gitroot/git-core/git-core
  url = https://github.com/gitster/git

New contributors whose contributions weren't in v2.8.0 are as follows.
Welcome to the Git development community!

  Alexander Rinass, Armin Kunaschik, Benjamin Dopplinger,
  Ben Woosley, Erwan Mathoniere, Gabriel Souza Franco, Jacob
  Nisnevich, Jan Durovec, Jean-Noël Avila, Kazuki Yamaguchi,
  Keller Fuchs, Laurent Arnoud, Li Peng, Marios Titas, Mehul Jain,
  Michael Procter, Nikola Forró, Pablo Santiago Blum de Aguiar,
  Pranit Bauva, Ray Zhang, René Nyffenegger, Santiago Torres,
  Saurav Sachidanand, Shin Kojima, Sidhant Sharma [:tk], Stanislav
  Kolotinskiy, and Xiaolong Ye.

Returning contributors who helped this release are as follows.
Thanks for your continued support.

  Adam Dinwoodie, Ævar Arnfjörð Bjarmason, Alexander Kuleshov,
  brian m. carlson, Brian Norris, Christian Couder, David Aguilar,
  David Turner, Dennis Kaarsemaker, Elia Pinto, Elijah Newren,
  Eric Sunshine, Eric Wong, Felipe Contreras, Jacob Keller,
  Jeff King, Jiang Xin, Johannes Schindelin, Johannes Sixt,
  John Keeping, Junio C Hamano, Karsten Blees, Lars Schneider,
  Linus Torvalds, Luke Diamand, Matthieu Moy, Michael Haggerty,
  Michael J Gruber, Michael Rappazzo, Nguyễn Thái Ngọc
  Duy, Ori Avtalion, Ralf Thielow, Ramsay Jones, René Scharfe,
  Stefan Beller, Stephen P. Smith, Sven Strickroth, SZEDER Gábor,
  Torsten Bögershausen, and Vasco Almeida.

----------------------------------------------------------------

Git 2.9 Release Notes (draft)
=============================

Backward compatibility notes
----------------------------

The end-user facing Porcelain level commands in the "git diff" and
"git log" family by default enable the rename detection; you can still
use "diff.renames" configuration variable to disable this.

Merging two branches that have no common ancestor with "git merge" is
by default forbidden now to prevent creating such an unusual merge by
mistake.

The output formats of "git log" that indents the commit log message by
4 spaces now expands HT in the log message by default.  You can use
the "--no-expand-tabs" option to disable this.

"git commit-tree" plumbing command required the user to always sign
its result when the user sets the commit.gpgsign configuration
variable, which was an ancient mistake, which this release corrects.
A script that drives commit-tree, if it relies on this mistake, now
needs to read commit.gpgsign and pass the -S option as necessary.


Updates since v2.8
------------------

UI, Workflows & Features

 * Comes with git-multimail 1.3.1 (in contrib/).

 * The end-user facing commands like "git diff" and "git log"
   now enable the rename detection by default.

 * The credential.helper configuration variable is cumulative and
   there is no good way to override it from the command line.  As
   a special case, giving an empty string as its value now serves
   as the signal to clear the values specified in various files.

 * A new "interactive.diffFilter" configuration can be used to
   customize the diff shown in "git add -i" sessions.

 * "git p4" now allows P4 author names to be mapped to Git author
   names.

 * "git rebase -x" can be used without passing "-i" option.

 * "git -c credential.<var>=<value> submodule" can now be used to
   propagate configuration variables related to credential helper
   down to the submodules.

 * "git tag" can create an annotated tag without explicitly given an
   "-a" (or "-s") option (i.e. when a tag message is given).  A new
   configuration variable, tag.forceSignAnnotated, can be used to tell
   the command to create signed tag in such a situation.

 * "git merge" used to allow merging two branches that have no common
   base by default, which led to a brand new history of an existing
   project created and then get pulled by an unsuspecting maintainer,
   which allowed an unnecessary parallel history merged into the
   existing project.  The command has been taught not to allow this by
   default, with an escape hatch "--allow-unrelated-histories" option
   to be used in a rare event that merges histories of two projects
   that started their lives independently.

 * "git pull" has been taught to pass the "--allow-unrelated-histories"
   option to underlying "git merge".

 * "git apply -v" learned to report paths in the patch that were
   skipped via --include/--exclude mechanism or being outside the
   current working directory.

 * Shell completion (in contrib/) updates.

 * The commit object name reported when "rebase -i" stops has been
   shortened.

 * "git worktree add" can be given "--no-checkout" option to only
   create an empty worktree without checking out the files.

 * "git mergetools" learned to drive ExamDiff.

 * "git pull --rebase" learned "--[no-]autostash" option, so that
   the rebase.autostash configuration variable set to true can be
   overridden from the command line.

 * When "git log" shows the log message indented by 4-spaces, the
   remainder of a line after a HT does not align in the way the author
   originally intended.  The command now expands tabs by default to help
   such a case, and allows the users to override it with a new option,
   "--no-expand-tabs".

 * "git send-email" now uses a more readable timestamps when
   formulating a message ID.

 * "git rerere" can encounter two or more files with the same conflict
   signature that have to be resolved in different ways, but there was
   no way to record these separate resolutions.

 * "git p4" learned to record P4 jobs in Git commit that imports from
   the history in Perforce.

 * "git describe --contains" often made a hard-to-justify choice of
   tag to name a given commit, because it tried to come up
   with a name with smallest number of hops from a tag, causing an old
   commit whose close descendant that is recently tagged were not
   described with respect to an old tag but with a newer tag.  It did
   not help that its computation of "hop" count was further tweaked to
   penalize being on a side branch of a merge.  The logic has been
   updated to favor using the tag with the oldest tagger date, which
   is a lot easier to explain to the end users: "We describe a commit
   in terms of the (chronologically) oldest tag that contains the
   commit."

 * "git clone" learned the "--shallow-submodules" option.

 * HTTP transport clients learned to throw extra HTTP headers at the
   server, specified via http.extraHeader configuration variable.

 * Patch output from "git diff" and friends has been tweaked to be
   more readable by using a blank line as a strong hint that the
   contents before and after it belong to logically separate units.

 * A new configuration variable core.hooksPath allows customizing
   where the hook directory is.

 * An earlier addition of "sanitize_submodule_env" with 14111fc4 (git:
   submodule honor -c credential.* from command line, 2016-02-29)
   turned out to be a convoluted no-op; implement what it wanted to do
   correctly, and stop filtering settings given via "git -c var=val".

 * "git commit --dry-run" reported "No, no, you cannot commit." in one
   case where "git commit" would have allowed you to commit, and this
   improves it a little bit ("git commit --dry-run --short" still does
   not give you the correct answer, for example).  This is a stop-gap
   measure in that "commit --short --dry-run" still gives an incorrect
   result.

 * The experimental "multiple worktree" feature gains more safety to
   forbid operations on a branch that is checked out or being actively
   worked on elsewhere, by noticing that e.g. it is being rebased.

 * "git format-patch" learned a new "--base" option to record what
   (public, well-known) commit the original series was built on in
   its output.

 * "git commit" learned to pay attention to the "commit.verbose"
   configuration variable and act as if the "--verbose" option
   was given from the command line.

 * Updated documentation gives hints to GMail users with two-factor
   auth enabled that they need app-specific-password when using
   "git send-email".

 * The manpage output of our documentation did not render well in
   terminal; typeset literals in bold by default to make them stand
   out more.

 * The mark-up in the top-level README.md file has been updated to
   typeset CLI command names differently from the body text.


Performance, Internal Implementation, Development Support etc.

 * The embedded args argv-array in the child process is used to build
   the command line to run pack-objects instead of using a separate
   array of strings.

 * A test for tags has been restructured so that more parts of it can
   easily be run on a platform without a working GnuPG.

 * The startup_info data, which records if we are working inside a
   repository (among other things), are now uniformly available to Git
   subcommand implementations, and Git avoids attempting to touch
   references when we are not in a repository.

 * The command line argument parser for "receive-pack" has been
   rewritten to use parse-options.

 * A major part of "git submodule update" has been ported to C to take
   advantage of the recently added framework to run download tasks in
   parallel.  Other updates to "git submodule" that move pieces of
   logic to C continues.

 * Rename bunch of tests on "git clone" for better organization.

 * The tests that involve running httpd leaked the system-wide
   configuration in /etc/gitconfig to the tested environment.

 * Build updates for MSVC.

 * The repository set-up sequence has been streamlined (the biggest
   change is that there is no longer git_config_early()), so that we
   do not attempt to look into refs/* when we know we do not have a
   Git repository.

 * Code restructuring around the "refs" API to prepare for pluggable
   refs backends.

 * Sources to many test helper binaries and the generated helpers
   have been moved to t/helper/ subdirectory to reduce clutter at the
   top level of the tree.

 * Unify internal logic between "git tag -v" and "git verify-tag"
   commands by making one directly call into the other.

 * "merge-recursive" strategy incorrectly checked if a path that is
   involved in its internal merge exists in the working tree.

 * The test scripts for "git p4" (but not "git p4" implementation
   itself) has been updated so that they would work even on a system
   where the installed version of Python is python 3.

 * As nobody maintains our in-tree git.spec.in and distros use their
   own spec file, we stopped pretending that we support "make rpm".

 * Move from "unsigned char[20]" to "struct object_id" continues.

 * The code for warning_errno/die_errno has been refactored and a new
   error_errno() reporting helper is introduced.
   (merge 1da045f nd/error-errno later to maint).

 * Running tests with '-x' option to trace the individual command
   executions is a useful way to debug test scripts, but some tests
   that capture the standard error stream and check what the command
   said can be broken with the trace output mixed in.  When running
   our tests under "bash", however, we can redirect the trace output
   to another file descriptor to keep the standard error of programs
   being tested intact.

 * t0040 had too many unnecessary repetitions in its test data.  Teach
   test-parse-options program so that a caller can tell what it
   expects in its output, so that these repetitions can be cleaned up.

 * Add perf test for "rebase -i".

 * Common mistakes when writing gitlink: in our documentation are
   found by "make check-docs".

 * t9xxx series has been updated primarily for readability, while
   fixing small bugs in it.  A few scripted Porcelain commands have
   also been updated to fix possible bugs around their use of
   "test -z" and "test -n".

 * CI test was taught to run git-svn tests.

 * "git cat-file --batch-all" has been sped up, by taking advantage
   of the fact that it does not have to read a list of objects, in two
   ways.

 * test updates to make it more readable and maintainable.
   (merge e6273f4 es/t1500-modernize later to maint).

 * "make DEVELOPER=1" worked as expected; setting DEVELOPER=1 in
   config.mak didn't.
   (merge 51dd3e8 mm/makefile-developer-can-be-in-config-mak later to maint).

 * The way how "submodule--helper list" signals unmatch error to its
   callers has been updated.

 * A bash-ism "local" has been removed from "git submodule" scripted
   Porcelain.


Also contains various documentation updates and code clean-ups.


Fixes since v2.8
----------------

Unless otherwise noted, all the fixes since v2.8 in the maintenance
track are contained in this release (see the maintenance releases'
notes for details).

 * "git config --get-urlmatch", unlike other variants of the "git
   config --get" family, did not signal error with its exit status
   when there was no matching configuration.

 * The "--local-env-vars" and "--resolve-git-dir" options of "git
   rev-parse" failed to work outside a repository when the command's
   option parsing was rewritten in 1.8.5 era.

 * "git index-pack --keep[=<msg>] pack-$name.pack" simply did not work.

 * Fetching of history by naming a commit object name directly didn't
   work across remote-curl transport.

 * A small memory leak in an error codepath has been plugged in xdiff
   code.

 * strbuf_getwholeline() did not NUL-terminate the buffer on certain
   corner cases in its error codepath.

 * "git mergetool" did not work well with conflicts that both sides
   deleted.

 * "git send-email" had trouble parsing alias file in mailrc format
   when lines in it had trailing whitespaces on them.

 * When "git merge --squash" stopped due to conflict, the concluding
   "git commit" failed to read in the SQUASH_MSG that shows the log
   messages from all the squashed commits.

 * "git merge FETCH_HEAD" dereferenced NULL pointer when merging
   nothing into an unborn history (which is arguably unusual usage,
   which perhaps was the reason why nobody noticed it).

 * When "git worktree" feature is in use, "git branch -d" allowed
   deletion of a branch that is checked out in another worktree,
   which was wrong.

 * When "git worktree" feature is in use, "git branch -m" renamed a
   branch that is checked out in another worktree without adjusting
   the HEAD symbolic ref for the worktree.

 * "git diff -M" used to work better when two originally identical
   files A and B got renamed to X/A and X/B by pairing A to X/A and B
   to X/B, but this was broken in the 2.0 timeframe.

 * "git send-pack --all <there>" was broken when its command line
   option parsing was written in the 2.6 timeframe.

 * "git format-patch --help" showed `-s` and `--no-patch` as if these
   are valid options to the command.  We already hide `--patch` option
   from the documentation, because format-patch is about showing the
   diff, and the documentation now hides these options as well.

 * When running "git blame $path" with unnormalized data in the index
   for the path, the data in the working tree was blamed, even though
   "git add" would not have changed what is already in the index, due
   to "safe crlf" that disables the line-end conversion.  It has been
   corrected.

 * A change back in version 2.7 to "git branch" broke display of a
   symbolic ref in a non-standard place in the refs/ hierarchy (we
   expect symbolic refs to appear in refs/remotes/*/HEAD to point at
   the primary branch the remote has, and as .git/HEAD to point at the
   branch we locally checked out).

 * A partial rewrite of "git submodule" in the 2.7 timeframe changed
   the way the gitdir: pointer in the submodules point at the real
   repository location to use absolute paths by accident.  This has
   been corrected.

 * "git commit" misbehaved in a few minor ways when an empty message
   is given via -m '', all of which has been corrected.

 * Support for CRAM-MD5 authentication method in "git imap-send" did
   not work well.

 * Upcoming OpenSSL 1.1.0 will break compilation by updating a few API
   elements we use in imap-send, which has been adjusted for the change.

 * The socks5:// proxy support added back in 2.6.4 days was not aware
   that socks5h:// proxies behave differently from socks5:// proxies.

 * "git config" had a codepath that tried to pass a NULL to
   printf("%s"), which nobody seems to have noticed.

 * On Cygwin, object creation uses the "create a temporary and then
   rename it to the final name" pattern, not "create a temporary,
   hardlink it to the final name and then unlink the temporary"
   pattern.

   This is necessary to use Git on Windows shared directories, and is
   already enabled for the MinGW and plain Windows builds.  It also
   has been used in Cygwin packaged versions of Git for quite a while.
   See http://thread.gmane.org/gmane.comp.version-control.git/291853

 * "merge-octopus" strategy did not ensure that the index is clean
   when merge begins.

 * When "git merge" notices that the merge can be resolved purely at
   the tree level (without having to merge blobs) and the resulting
   tree happens to already exist in the object store, it forgot to
   update the index, which left an inconsistent state that would
   break later operations.

 * "git submodule" reports the paths of submodules the command
   recurses into, but these paths were incorrectly reported when
   the command was not run from the root level of the superproject.

 * The "user.useConfigOnly" configuration variable makes it an error
   if users do not explicitly set user.name and user.email.  However,
   its check was not done early enough and allowed another error to
   trigger, reporting that the default value we guessed from the
   system setting was unusable.  This was a suboptimal end-user
   experience as we want the users to set user.name/user.email without
   relying on the auto-detection at all.

 * "git mv old new" did not adjust the path for a submodule that lives
   as a subdirectory inside old/ directory correctly.

 * "git replace -e" did not honour "core.editor" configuration.

 * "git push" from a corrupt repository that attempts to push a large
   number of refs deadlocked; the thread to relay rejection notices
   for these ref updates blocked on writing them to the main thread,
   after the main thread at the receiving end notices that the push
   failed and decides not to read these notices and return a failure.

 * mmap emulation on Windows has been optimized and work better without
   consuming paging store when not needed.

 * A question by "git send-email" to ask the identity of the sender
   has been updated.

 * UI consistency improvements for "git mergetool".

 * "git rebase -m" could be asked to rebase an entire branch starting
   from the root, but failed by assuming that there always is a parent
   commit to the first commit on the branch.

 * Fix a broken "p4 lfs" test.

 * Recent update to Git LFS broke "git p4" by changing the output from
   its "lfs pointer" subcommand.

 * "git fetch" test t5510 was flaky while running a (forced) automagic
   garbage collection.

 * Documentation updates to help contributors setting up Travis CI
   test for their patches.

 * Some multi-byte encoding can have a backslash byte as a later part
   of one letter, which would confuse "highlight" filter used in
   gitweb.

 * "git commit-tree" plumbing command required the user to always sign
   its result when the user sets the commit.gpgsign configuration
   variable, which was an ancient mistake.  Rework "git rebase" that
   relied on this mistake so that it reads commit.gpgsign and pass (or
   not pass) the -S option to "git commit-tree" to keep the end-user
   expectation the same, while teaching "git commit-tree" to ignore
   the configuration variable.  This will stop requiring the users to
   sign commit objects used internally as an implementation detail of
   "git stash".

 * "http.cookieFile" configuration variable clearly wants a pathname,
   but we forgot to treat it as such by e.g. applying tilde expansion.

 * Consolidate description of tilde-expansion that is done to
   configuration variables that take pathname to a single place.

 * Correct faulty recommendation to use "git submodule deinit ." when
   de-initialising all submodules, which would result in a strange
   error message in a pathological corner case.

 * Many 'linkgit:<git documentation page>' references were broken,
   which are all fixed with this.

 * "git rerere" can get confused by conflict markers deliberately left
   by the inner merge step, because they are indistinguishable from
   the real conflict markers left by the outermost merge which are
   what the end user and "rerere" need to look at.  This was fixed by
   making the conflict markers left by the inner merges a bit longer.
   (merge 0f9fd5c jc/ll-merge-internal later to maint).

 * CI test was taught to build documentation pages.

 * "git fsck" learned to catch NUL byte in a commit object as
   potential error and warn.

 * Portability enhancement for "rebase -i" to help platforms whose
   shell does not like "for i in <empty>" (which is not POSIX-kosher).

 * On Windows, .git and optionally any files whose name starts with a
   dot are now marked as hidden, with a core.hideDotFiles knob to
   customize this behaviour.

 * Documentation for "git merge --verify-signatures" has been updated
   to clarify that the signature of only the commit at the tip is
   verified.  Also the phrasing used for signature and key validity is
   adjusted to align with that used by OpenPGP.

 * A couple of bugs around core.autocrlf have been fixed.

 * Many commands normalize command line arguments from NFD to NFC
   variant of UTF-8 on OSX, but commands in the "diff" family did
   not, causing "git diff $path" to complain that no such path is
   known to Git.  They have been taught to do the normalization.

 * "git difftool" learned to handle unmerged paths correctly in
   dir-diff mode.

 * The "are we talking with TTY, doing an interactive session?"
   detection has been updated to work better for "Git for Windows".

 * We forgot to add "git log --decorate=auto" to documentation when we
   added the feature back in v2.1.0 timeframe.
   (merge 462cbb4 rj/log-decorate-auto later to maint).

 * "git fast-import --export-marks" would overwrite the existing marks
   file even when it makes a dump from its custom die routine.
   Prevent it from doing so when we have an import-marks file but
   haven't finished reading it.
   (merge f4beed6 fc/fast-import-broken-marks-file later to maint).

 * "git rebase -i", after it fails to auto-resolve the conflict, had
   an unnecessary call to "git rerere" from its very early days, which
   was spotted recently; the call has been removed.
   (merge 7063693 js/rebase-i-dedup-call-to-rerere later to maint).

 * Other minor clean-ups and documentation updates
   (merge cd82b7a pa/cherry-pick-doc-typo later to maint).
   (merge 2bb73ae rs/patch-id-use-skip-prefix later to maint).
   (merge aa20cbc rs/apply-name-terminate later to maint).

----------------------------------------------------------------

Changes since v2.8.0 are as follows:

Adam Dinwoodie (2):
      config.mak.uname: Cygwin needs OBJECT_CREATION_USES_RENAMES
      commit: --amend -m '' silently fails to wipe message

Alexander Kuleshov (1):
      submodule-config: use hashmap_iter_first()

Alexander Rinass (1):
      diff: run arguments through precompose_argv

Armin Kunaschik (2):
      t4151: make sure argument to 'test -z' is given
      t0008: 4 tests fail with ksh88

Ben Woosley (1):
      git-rebase--merge: don't include absent parent as a base

Benjamin Dopplinger (1):
      README.md: format CLI commands with code syntax

Brian Norris (3):
      Documentation: config: improve word ordering for http.cookieFile
      http: expand http.cookieFile as a path
      config: consistently format $variables in monospaced font

Christian Couder (5):
      Documentation: talk about pager in api-trace.txt
      builtin/apply: get rid of useless 'name' variable
      builtin/apply: handle parse_binary() failure
      builtin/apply: free patch when parse_chunk() fails
      Git/SVN: die when there is no commit metadata

David Aguilar (4):
      mergetool: support delete/delete conflicts
      mergetool: honor tempfile configuration when resolving delete conflicts
      difftool: initialize variables for readability
      difftool: handle unmerged files in dir-diff mode

David Turner (5):
      refs: move head_ref{,_submodule} to the common code
      refs: move for_each_*ref* functions into common code
      files-backend: break out ref reading
      refs: move resolve_ref_unsafe into common code
      refs: on symref reflog expire, lock symref not referrent

Dennis Kaarsemaker (1):
      Makefile: remove dependency on git.spec

Elia Pinto (1):
      api-trace.txt: fix typo

Elijah Newren (6):
      merge-recursive: remove duplicate code
      merge-recursive: do not check working copy when creating a virtual merge base
      t7605: add a testcase demonstrating a bug with trivial merges
      builtin/merge.c: fix a bug with trivial merges
      merge-octopus: abort if index does not match HEAD
      t6044: new merge testcases for when index doesn't match HEAD

Eric Sunshine (10):
      lib-gpg: drop unnecessary "missing GPG" warning
      t6302: normalize names and descriptions of signed tags
      t6302: also test annotated in addition to signed tags
      t6302: skip only signed tags rather than all tests when GPG is missing
      git-format-patch.txt: don't show -s as shorthand for multiple options
      t1500: be considerate to future potential tests
      t1500: test_rev_parse: facilitate future test enhancements
      t1500: avoid changing working directory outside of tests
      t1500: avoid setting configuration options outside of tests
      t1500: avoid setting environment variables outside of tests

Eric Wong (4):
      send-email: more meaningful Message-ID
      send-email: do not load Data::Dumper
      pack-objects: warn on split packs disabling bitmaps
      .mailmap: update to my shorter email address

Erwan Mathoniere (1):
      Documentation: bold literals in man

Felipe Contreras (1):
      fast-import: do not truncate exported marks file

Gabriel Souza Franco (2):
      fetch-pack: fix object_id of exact sha1
      fetch-pack: update the documentation for "<refs>..." arguments

Jacob Keller (7):
      submodule: don't pass empty string arguments to submodule--helper clone
      submodule: check argc count for git submodule--helper clone
      submodule: fix submodule--helper clone usage
      submodule: fix segmentation fault in submodule--helper clone
      quote: implement sq_quotef()
      git: submodule honor -c credential.* from command line
      xdiff: add recs_match helper function

Jacob Nisnevich (2):
      mergetools: create mergetool_find_win32_cmd() helper function for winmerge
      mergetools: add support for ExamDiff

Jan Durovec (2):
      git-p4: clean-up code style in tests
      git-p4: add P4 jobs to git commit message

Jeff King (55):
      credential: let empty credential specs reset helper list
      t1515: add tests for rev-parse out-of-repo helpers
      add--interactive: allow custom diff highlighting programs
      rev-parse: let some options run outside repository
      strbuf_getwholeline: NUL-terminate getdelim buffer on error
      setup: make startup_info available everywhere
      setup: set startup_info->have_repository more reliably
      remote: don't resolve HEAD in non-repository
      mailmap: do not resolve blobs in a non-repository
      grep: turn off gitlink detection for --no-index
      use setup_git_directory() in test-* programs
      setup: document check_repository_format()
      wrap shared_repository global in get/set accessors
      lazily load core.sharedrepository
      check_repository_format_gently: stop using git_config_early
      config: drop git_config_early
      setup: refactor repo format reading and verification
      init: use setup.c's repo version verification
      setup: unify repository version callbacks
      setup: drop repository_format_version global
      verify_repository_format: mark messages for translation
      send-email: ignore trailing whitespace in mailrc alias file
      credential-cache--daemon: clarify "exit" action semantics
      t/lib-httpd: pass through GIT_CONFIG_NOSYSTEM env
      git_config_push_parameter: handle empty GIT_CONFIG_PARAMETERS
      branch: fix shortening of non-remote symrefs
      commit: do not ignore an empty message given by -m ''
      config: lower-case first word of error strings
      git_config_set_multivar_in_file: all non-zero returns are errors
      git_config_set_multivar_in_file: handle "unset" errors
      t5532: use write_script
      send-pack: close demux pipe before finishing async process
      run-command: teach async threads to ignore SIGPIPE
      send-pack: isolate sigpipe in demuxer thread
      fetch-pack: isolate sigpipe in demuxer thread
      t5504: drop sigpipe=ok from push tests
      remote.c: spell __attribute__ correctly
      t5550: fix typo in $HTTPD_URL
      t5550: break submodule config test into multiple sub-tests
      submodule: export sanitized GIT_CONFIG_PARAMETERS
      submodule--helper: move config-sanitizing to submodule.c
      submodule: use prepare_submodule_repo_env consistently
      submodule: stop sanitizing config options
      t6302: simplify non-gpg cases
      rebase--interactive: avoid empty list in shell for-loop
      test-lib: set BASH_XTRACEFD automatically
      t/lib-git-svn: drop $remote_git_svn and $git_svn_id
      t9100,t3419: enclose all test code in single-quotes
      t9107: use "return 1" instead of "exit 1"
      t9107: switch inverted single/double quotes in test
      t9103: modernize test style
      always quote shell arguments to test -z/-n
      cat-file: avoid noop calls to sha1_object_info_extended
      cat-file: default to --buffer when --batch-all-objects is used
      archive-tar: convert snprintf to xsnprintf

Johannes Schindelin (16):
      replace --edit: respect core.editor
      name-rev: include taggerdate in considering the best name
      win32mmap: set errno appropriately
      mmap(win32): avoid copy-on-write when it is unnecessary
      mmap(win32): avoid expensive fstat() call
      http: support sending custom HTTP headers
      tests: adjust the configuration for Apache 2.2
      t5551: make the test for extra HTTP headers more robust
      t3404: fix typo
      submodule: ensure that -c http.extraheader is heeded
      mingw: introduce the 'core.hideDotFiles' setting
      mingw: remove unnecessary definition
      Windows: only add a no-op pthread_sigmask() when needed
      perf: let's disable symlinks when they are not available
      perf: make the tests work in worktrees
      perf: run "rebase -i" under perf

Johannes Sixt (4):
      Windows: shorten code by re-using convert_slashes()
      Windows: add pthread_sigmask() that does nothing
      t6044: replace seq by test_seq
      rebase -i: remove an unnecessary 'rerere' invocation

John Keeping (3):
      config: fail if --get-urlmatch finds no value
      Documentation/git-config: use bulleted list for exit codes
      Documentation/git-config: fix --get-all description

Junio C Hamano (77):
      rerere: split conflict ID further
      rerere: scan $GIT_DIR/rr-cache/$ID when instantiating a rerere_id
      index-pack: correct --keep[=<msg>]
      index-pack: add a helper function to derive .idx/.keep filename
      rerere: handle leftover rr-cache/$ID directory and postimage files
      rerere: delay the recording of preimage
      rerere: allow multiple variants to exist
      t4200: rerere a merge with two identical conflicts
      rerere: do use multiple variants
      apply: remove unused call to free() in gitdiff_{old,new}name()
      merge: fix NULL pointer dereference when merging nothing into void
      merge: refuse to create too cool a merge by default
      pretty: enable --expand-tabs by default for selected pretty formats
      pretty: allow tweaking tabwidth in --expand-tabs
      submodule--helper: do not borrow absolute_path() result for too long
      Git 2.8.1
      First batch for post 2.8 cycle
      pretty: test --expand-tabs
      Makefile: fix misdirected redirections
      Second batch for post 2.8 cycle
      Makefile: stop pretending to support rpmbuild
      rerere: gc and clear
      rerere: move code related to "forget" together
      rerere: split code to call ll_merge() further
      rerere: adjust 'forget' to multi-variant world order
      setup.c: do not feed NULL to "%.*s" even with precision 0
      Third batch for post 2.8 cycle
      http: differentiate socks5:// and socks5h://
      t1020: do not overuse printf and use write_script
      t3404: use write_script
      Fourth batch for post 2.8 cycle
      Start preparing for 2.8.2
      fsck_commit_buffer(): do not special case the last validation
      ll-merge: fix typo in comment
      Prepare for 2.8.2
      Makefile: clean *.o files we create
      Fifth batch for post 2.8 cycle
      t3033: avoid 'ambiguous refs' warning
      pull: pass --allow-unrelated-histories to "git merge"
      Sixth batch for post 2.8 cycle
      send-email: fix grammo in the prompt that asks e-mail recipients
      Seventh batch for post 2.8 cycle
      Git 2.8.2
      Eighth batch for 2.9
      diff: undocument the compaction heuristic knobs for experimentation
      Start preparing for 2.8.3
      commit-tree: do not pay attention to commit.gpgsign
      Ninth batch for 2.9
      config: describe 'pathname' value type
      Tenth batch for 2.9
      Almost ready for 2.8.3
      test-lib-functions.sh: remove misleading comment on test_seq
      test-lib-functions.sh: rewrite test_seq without Perl
      ll-merge: use a longer conflict marker for internal merge
      t6036: remove pointless test that expects failure
      Documentation: fix linkgit references
      fsck: detect and warn a commit with embedded NUL
      ci: validate "linkgit:" in documentation
      test-parse-options: fix output when callback option fails
      test-parse-options: --expect=<string> option to simplify tests
      t0040: remove unused test helpers
      t0040: convert a few tests to use test-parse-options --expect
      Eleventh batch for 2.9
      rerere: plug memory leaks upon "rerere forget" failure
      Twelfth batch for 2.9
      Thirteenth batch for 2.9
      Git 2.8.3
      rerere: remove an null statement
      Git 2.9-rc0
      t4204: do not let $name variable clobbered
      Start preparing for 2.8.4
      Final batch before 2.9-rc1
      More topics for 2.8.4
      Git 2.9-rc1
      Almost ready for 2.9-rc2
      Git 2.8.4
      Git 2.9-rc2

Karsten Blees (1):
      mingw: make isatty() recognize MSYS2's pseudo terminals (/dev/pty*)

Kazuki Yamaguchi (10):
      branch -d: refuse deleting a branch which is currently checked out
      refs: add a new function set_worktree_head_symref
      branch -m: update all per-worktree HEADs
      set_worktree_head_symref(): fix error message
      imap-send: use HMAC() function provided by OpenSSL
      imap-send: check NULL return of SSL_CTX_new()
      imap-send: avoid deprecated TLSv1_method()
      configure: remove checking for HMAC_CTX_cleanup
      imap-send: check for NOLOGIN capability only when using LOGIN command
      imap-send: fix CRAM-MD5 response calculation

Keller Fuchs (1):
      Documentation: clarify signature verification

Lars Schneider (8):
      git-p4: map a P4 user to Git author name and email address
      travis-ci: update Git-LFS and P4 to the latest version
      travis-ci: express Linux/OS X dependency versions more clearly
      git-p4: fix Git LFS pointer parsing
      t9824: fix wrong reference value
      Documentation: add setup instructions for Travis CI
      travis-ci: build documentation
      travis-ci: enable Git SVN tests t91xx on Linux

Laurent Arnoud (1):
      tag: add the option to force signing of annotated tags

Li Peng (1):
      typofix: assorted typofixes in comments, documentation and messages

Linus Torvalds (1):
      pretty: expand tabs in indented logs to make things line up properly

Luke Diamand (3):
      git-p4 tests: cd to / before running python
      git-p4 tests: work with python3 as well as python2
      git-p4 tests: time_in_seconds should use $PYTHON_PATH

Marios Titas (2):
      ident: check for useConfigOnly before auto-detection of name/email
      ident: give "please tell me" message upon useConfigOnly error

Matthieu Moy (13):
      Documentation/diff-config: fix description of diff.renames
      t4001-diff-rename: wrap file creations in a test
      t: add tests for diff.renames (true/false/unset)
      log: introduce init_log_defaults()
      diff: activate diff.renames by default
      lockfile: mark strings for translation
      lockfile: improve error message when lockfile exists
      git.spec.in: use README.md, not README
      README.md: don't take 'commandname' literally
      git-multimail: update to release 1.3.0
      git-multimail: update to release 1.3.1
      Makefile: move 'ifdef DEVELOPER' after config.mak* inclusion
      Makefile: add $(DEVELOPER_CFLAGS) variable

Mehul Jain (9):
      git-pull.c: introduce git_pull_config()
      pull --rebase: add --[no-]autostash flag
      t5520: use consistent capitalization in test titles
      t5520: ensure consistent test conditions
      t5520: use better test to check stderr output
      t5520: factor out common "successful autostash" code
      t5520: factor out common "failing autostash" code
      t5520: reduce commom lines of code
      t5520: test --[no-]autostash with pull.rebase=true

Michael Haggerty (19):
      t1430: test the output and error of some commands more carefully
      t1430: clean up broken refs/tags/shadow
      t1430: don't rely on symbolic-ref for creating broken symrefs
      t1430: test for-each-ref in the presence of badly-named refs
      t1430: improve test coverage of deletion of badly-named refs
      resolve_missing_loose_ref(): simplify semantics
      resolve_ref_unsafe(): use for loop to count up to MAXDEPTH
      resolve_ref_unsafe(): ensure flags is always set
      resolve_ref_1(): eliminate local variable
      resolve_ref_1(): reorder code
      resolve_ref_1(): eliminate local variable "bad_name"
      read_raw_ref(): manage own scratch space
      files-backend: inline resolve_ref_1() into resolve_ref_unsafe()
      read_raw_ref(): change flags parameter to unsigned int
      fsck_head_link(): remove unneeded flag variable
      cmd_merge(): remove unneeded flag variable
      checkout_paths(): remove unneeded flag variable
      check_aliased_update(): check that dst_name is non-NULL
      show_head_ref(): check the result of resolve_ref_namespace()

Michael J Gruber (1):
      completion: complete --cherry-mark for git log

Michael Procter (1):
      upload-pack: use argv_array for pack_objects

Michael Rappazzo (1):
      Documentation: add instructions to help setup gmail 2FA

Nguyễn Thái Ngọc Duy (62):
      git-apply.txt: remove a space
      git-apply.txt: mention the behavior inside a subdir
      apply: report patch skipping in verbose mode
      test helpers: move test-* to t/helper/ subdirectory
      dir.c: remove dead function fnmatch_icase()
      wrapper.c: delete dead function git_mkstemps()
      dir.c: rename str(n)cmp_icase to fspath(n)cmp
      path.c: add git_common_path() and strbuf_git_common_path()
      worktree.c: store "id" instead of "git_dir"
      worktree.c: make find_shared_symref() return struct worktree *
      worktree.c: mark current worktree
      path.c: refactor and add worktree_git_path()
      wt-status.c: split rebase detection out of wt_status_get_state()
      wt-status.c: make wt_status_check_rebase() work on any worktree
      worktree.c: avoid referencing to worktrees[i] multiple times
      worktree.c: check whether branch is rebased in another worktree
      wt-status.c: split bisect detection out of wt_status_get_state()
      worktree.c: check whether branch is bisected in another worktree
      branch: do not rename a branch under bisect or rebase
      remote.c: specify correct plural form in "commit diverge" message
      usage.c: move format processing out of die_errno()
      usage.c: add warning_errno() and error_errno()
      bisect.c: use die_errno() and warning_errno()
      builtin/am.c: use error_errno()
      builtin/branch.c: use error_errno()
      builtin/fetch.c: use error_errno()
      builtin/help.c: use warning_errno()
      builtin/mailsplit.c: use error_errno()
      builtin/merge-file.c: use error_errno()
      builtin/pack-objects.c: use die_errno() and warning_errno()
      builtin/rm.c: use warning_errno()
      builtin/update-index.c: prefer "err" to "errno" in process_lstat_error
      builtin/upload-archive.c: use error_errno()
      builtin/worktree.c: use error_errno()
      check-racy.c: use error_errno()
      combine-diff.c: use error_errno()
      compat/win32/syslog.c: use warning_errno()
      config.c: use error_errno()
      connected.c: use error_errno()
      copy.c: use error_errno()
      credential-cache--daemon.c: use warning_errno()
      diff-no-index.c: use error_errno()
      editor.c: use error_errno()
      entry.c: use error_errno()
      fast-import.c: use error_errno()
      gpg-interface.c: use error_errno()
      grep.c: use error_errno()
      http.c: use error_errno() and warning_errno()
      ident.c: use warning_errno()
      mailmap.c: use error_errno()
      reachable.c: use error_errno()
      rerere.c: use error_errno() and warning_errno()
      run-command.c: use error_errno()
      sequencer.c: use error_errno()
      server-info.c: use error_errno()
      sha1_file.c: use {error,die,warning}_errno()
      transport-helper.c: use error_errno()
      unpack-trees.c: use error_errno()
      upload-pack.c: use error_errno()
      vcs-svn: use error_errno()
      wrapper.c: use warning_errno()
      wrap-for-bin.sh: regenerate bin-wrappers when switching branches

Nikola Forró (1):
      difftool/mergetool: make the form of yes/no questions consistent

Ori Avtalion (1):
      Documentation: git diff --check detects conflict markers

Pablo Santiago Blum de Aguiar (1):
      git-cherry-pick.txt: correct a small typo

Pranit Bauva (9):
      t/t7502 : drop duplicate test
      api-parse-options.txt: document OPT_CMDMODE()
      t0040-test-parse-options.sh: fix style issues
      test-parse-options: print quiet as integer
      t0040-parse-options: improve test coverage
      t/t7507: improve test coverage
      parse-options.c: make OPTION_COUNTUP respect "unspecified" values
      t7507-commit-verbose: improve test coverage by testing number of diffs
      commit: add a commit.verbose config variable

Ralf Thielow (4):
      completion: add option '--guides' to 'git help'
      completion: add 'revisions' and 'everyday' to 'git help'
      rebase-i: print an abbreviated hash when stop for editing
      string_list: use string-list API in unsorted_string_list_lookup()

Ramsay Jones (3):
      xdiff/xprepare: use the XDF_DIFF_ALG() macro to access flag bits
      xdiff/xprepare: fix a memory leak
      log: document the --decorate=auto option

Ray Zhang (1):
      worktree: add: introduce --checkout option

René Nyffenegger (1):
      Documentation: fix typo 'In such these cases'

René Scharfe (3):
      apply: remove unused parameters from name_terminate()
      patch-id: use starts_with() and skip_prefix()
      perf: make the tests work without a worktree

SZEDER Gábor (6):
      diffcore: fix iteration order of identical files during rename detection
      for-each-ref: fix description of '--contains' in manpage
      test-lib: simplify '--option=value' parsing
      t9824: fix broken &&-chain in a subshell
      t5510: run auto-gc in the foreground
      Documentation/git-send-email: fix typo in gmail 2FA section

Santiago Torres (6):
      builtin/verify-tag.c: ignore SIGPIPE in gpg-interface
      t7030: test verifying multiple tags
      verify-tag: update variable name and type
      verify-tag: prepare verify_tag for libification
      verify-tag: move tag verification code to tag.c
      tag -v: verify directly rather than exec-ing verify-tag

Saurav Sachidanand (1):
      dir: store EXC_FLAG_* values in unsigned integers

Shin Kojima (1):
      gitweb: apply fallback encoding before highlight

Sidhant Sharma [:tk] (1):
      builtin/receive-pack.c: use parse_options API

Stanislav Kolotinskiy (1):
      git-send-pack: fix --all option when used with directory

Stefan Beller (46):
      submodule-config: keep update strategy around
      submodule-config: drop check against NULL
      fetching submodules: respect `submodule.fetchJobs` config option
      submodule update: direct error message to stderr
      run_processes_parallel: treat output of children as byte array
      run_processes_parallel: rename parameters for the callbacks
      git submodule update: have a dedicated helper for cloning
      submodule helper: remove double 'fatal: ' prefix
      submodule update: expose parallelism to the user
      clone: allow an explicit argument for parallel submodule clones
      clone tests: rename t57* => t56*
      rebase: decouple --exec from --interactive
      t3404: cleanup double empty lines between tests
      submodule foreach: correct path display in recursive submodules
      submodule update --init: correct path handling in recursive submodules
      submodule status: correct path handling in recursive submodules
      submodule update: align reporting path for custom command execution
      submodule update: test recursive path reporting from subdirectory
      t7407: make expectation as clear as possible
      recursive submodules: test for relative paths
      submodule--helper: fix potential NULL-dereference
      submodule--helper clone: create the submodule path just once
      notes: don't leak memory in git_config_get_notes_strategy
      abbrev_sha1_in_line: don't leak memory
      bundle: don't leak an fd in case of early return
      credential-cache, send_request: close fd when done
      submodule--helper, module_clone: always operate on absolute paths
      submodule--helper, module_clone: catch fprintf failure
      submodule: port resolve_relative_url from shell to C
      submodule: port init from shell to C
      xdiff: implement empty line chunk heuristic
      mv: allow moving nested submodules
      clone: add `--shallow-submodules` flag
      config doc: improve exit code listing
      config.c: drop local variable
      submodule-config: don't shadow `cache`
      submodule init: fail gracefully with a missing .gitmodules file
      submodule--helper update-clone: abort gracefully on missing .gitmodules
      submodule deinit test: fix broken && chain in subshell
      submodule init: redirect stdout to stderr
      t7300: mark test with SANITY
      submodule deinit: require '--all' instead of '.' for all submodules
      t3513: do not compress backup tar file
      t6041: do not compress backup tar file
      submodule--helper: offer a consistent API
      submodule: remove bashism from shell script

Stephen P. Smith (1):
      wt-status.c: set commitable bit if there is a meaningful merge.

Sven Strickroth (3):
      commit: do not lose SQUASH_MSG contents
      MSVC: vsnprintf in Visual Studio 2015 doesn't need SNPRINTF_SIZE_CORR any more
      MSVC: use shipped headers instead of fallback definitions

Torsten Bögershausen (6):
      correct blame for files commited with CRLF
      t0027: make commit_chk_wrnNNO() reliable
      convert: allow core.autocrlf=input and core.eol=crlf
      t0027: test cases for combined attributes
      convert.c: ident + core.autocrlf didn't work
      t5601: Remove trailing space in sed expression

Vasco Almeida (16):
      l10n: fr: fix transcation of "dir"
      l10n: fr: fix wrongly translated option name
      l10n: fr: change "id de clé" to match "id-clé"
      l10n: fr: don't translate "merge" as a parameter
      i18n: index-pack: use plural string instead of normal one
      i18n: builtin/branch.c: mark option for translation
      i18n: unpack-trees: mark strings for translation
      i18n: builtin/rm.c: remove a comma ',' from string
      i18n: branch: unmark string for translation
      i18n: branch: move comment for translators
      i18n: git-parse-remote.sh: mark strings for translation
      i18n: builtin/pull.c: mark placeholders for translation
      i18n: builtin/pull.c: split strings marked for translation
      i18n: remote: add comment for translators
      Documentation/git-mailinfo: fix typo
      i18n: unpack-trees: avoid substituting only a verb in sentences

Xiaolong Ye (4):
      patch-ids: make commit_patch_id() a public helper function
      format-patch: add '--base' option to record base tree info
      format-patch: introduce --base=auto option
      format-patch: introduce format.useAutoBase configuration

brian m. carlson (6):
      sha1-name: introduce a get_oid() function
      test-match-trees: convert to use struct object_id
      match-trees: convert shift_tree() and shift_tree_by() to use object_id
      struct name_entry: use struct object_id instead of unsigned char sha1[20]
      tree-walk: convert tree_entry_extract() to use struct object_id
      match-trees: convert several leaf functions to use struct object_id

Ævar Arnfjörð Bjarmason (4):
      githooks.txt: improve the intro section
      githooks.txt: amend dangerous advice about 'update' hook ACL
      githooks.txt: minor improvements to the grammar & phrasing
      hooks: allow customizing where the hook directory is

^ permalink raw reply	[relevance 2%]

* [ANNOUNCE] Git v2.9.0
@ 2016-06-13 19:45  2% Junio C Hamano
  0 siblings, 0 replies; 200+ results
From: Junio C Hamano @ 2016-06-13 19:45 UTC (permalink / raw)
  To: git; +Cc: Linux Kernel

The latest feature release Git v2.9.0 is now available at the
usual places.  It is comprised of 497 non-merge commits since
v2.8.0, contributed by 75 people, 28 of which are new faces.

The tarballs are found at:

    https://www.kernel.org/pub/software/scm/git/

The following public repositories all have a copy of the 'v2.9.0'
tag and the 'master' branch that the tag points at:

  url = https://kernel.googlesource.com/pub/scm/git/git
  url = git://repo.or.cz/alt-git.git
  url = git://git.sourceforge.jp/gitroot/git-core/git.git
  url = git://git-core.git.sourceforge.net/gitroot/git-core/git-core
  url = https://github.com/gitster/git

New contributors whose contributions weren't in v2.8.0 are as follows.
Welcome to the Git development community!

  Alexander Rinass, Antonin, Armin Kunaschik, Benjamin Dopplinger,
  Ben Woosley, Erwan Mathoniere, Gabriel Souza Franco, Jacob
  Nisnevich, Jan Durovec, Jean-Noël Avila, Kazuki Yamaguchi,
  Keller Fuchs, Laurent Arnoud, Li Peng, Marios Titas, Mehul Jain,
  Michael Procter, Nikola Forró, Pablo Santiago Blum de Aguiar,
  Pranit Bauva, Ray Zhang, René Nyffenegger, Santiago Torres,
  Saurav Sachidanand, Shin Kojima, Sidhant Sharma [:tk], Stanislav
  Kolotinskiy, and Xiaolong Ye.

Returning contributors who helped this release are as follows.
Thanks for your continued support.

  Adam Dinwoodie, Ævar Arnfjörð Bjarmason, Alexander Kuleshov,
  Alexander Shopov, brian m. carlson, Brian Norris, Changwoo
  Ryu, Christian Couder, David Aguilar, David Turner, Dennis
  Kaarsemaker, Dimitriy Ryazantcev, Elia Pinto, Elijah Newren,
  Eric Sunshine, Eric Wong, Felipe Contreras, Jacob Keller,
  Jean-Noel Avila, Jeff King, Jiang Xin, Johannes Schindelin,
  Johannes Sixt, John Keeping, Junio C Hamano, Karsten Blees,
  Lars Schneider, Linus Torvalds, Luke Diamand, Matthieu Moy,
  Michael Haggerty, Michael J Gruber, Michael Rappazzo, Nguyễn
  Thái Ngọc Duy, Ori Avtalion, Peter Krefting, Ralf Thielow,
  Ramsay Jones, Ray Chen, René Scharfe, Stefan Beller, Stephen
  P. Smith, Sven Strickroth, SZEDER Gábor, Torsten Bögershausen,
  Trần Ngọc Quân, and Vasco Almeida.

----------------------------------------------------------------

Git 2.9 Release Notes
=====================

Backward compatibility notes
----------------------------

The end-user facing Porcelain level commands in the "git diff" and
"git log" family by default enable the rename detection; you can still
use "diff.renames" configuration variable to disable this.

Merging two branches that have no common ancestor with "git merge" is
by default forbidden now to prevent creating such an unusual merge by
mistake.

The output formats of "git log" that indents the commit log message by
4 spaces now expands HT in the log message by default.  You can use
the "--no-expand-tabs" option to disable this.

"git commit-tree" plumbing command required the user to always sign
its result when the user sets the commit.gpgsign configuration
variable, which was an ancient mistake, which this release corrects.
A script that drives commit-tree, if it relies on this mistake, now
needs to read commit.gpgsign and pass the -S option as necessary.


Updates since v2.8
------------------

UI, Workflows & Features

 * Comes with git-multimail 1.3.1 (in contrib/).

 * The end-user facing commands like "git diff" and "git log"
   now enable the rename detection by default.

 * The credential.helper configuration variable is cumulative and
   there is no good way to override it from the command line.  As
   a special case, giving an empty string as its value now serves
   as the signal to clear the values specified in various files.

 * A new "interactive.diffFilter" configuration can be used to
   customize the diff shown in "git add -i" sessions.

 * "git p4" now allows P4 author names to be mapped to Git author
   names.

 * "git rebase -x" can be used without passing "-i" option.

 * "git -c credential.<var>=<value> submodule" can now be used to
   propagate configuration variables related to credential helper
   down to the submodules.

 * "git tag" can create an annotated tag without explicitly given an
   "-a" (or "-s") option (i.e. when a tag message is given).  A new
   configuration variable, tag.forceSignAnnotated, can be used to tell
   the command to create signed tag in such a situation.

 * "git merge" used to allow merging two branches that have no common
   base by default, which led to a brand new history of an existing
   project created and then get pulled by an unsuspecting maintainer,
   which allowed an unnecessary parallel history merged into the
   existing project.  The command has been taught not to allow this by
   default, with an escape hatch "--allow-unrelated-histories" option
   to be used in a rare event that merges histories of two projects
   that started their lives independently.

 * "git pull" has been taught to pass the "--allow-unrelated-histories"
   option to underlying "git merge".

 * "git apply -v" learned to report paths in the patch that were
   skipped via --include/--exclude mechanism or being outside the
   current working directory.

 * Shell completion (in contrib/) updates.

 * The commit object name reported when "rebase -i" stops has been
   shortened.

 * "git worktree add" can be given "--no-checkout" option to only
   create an empty worktree without checking out the files.

 * "git mergetools" learned to drive ExamDiff.

 * "git pull --rebase" learned "--[no-]autostash" option, so that
   the rebase.autostash configuration variable set to true can be
   overridden from the command line.

 * When "git log" shows the log message indented by 4-spaces, the
   remainder of a line after a HT does not align in the way the author
   originally intended.  The command now expands tabs by default to help
   such a case, and allows the users to override it with a new option,
   "--no-expand-tabs".

 * "git send-email" now uses a more readable timestamps when
   formulating a message ID.

 * "git rerere" can encounter two or more files with the same conflict
   signature that have to be resolved in different ways, but there was
   no way to record these separate resolutions.

 * "git p4" learned to record P4 jobs in Git commit that imports from
   the history in Perforce.

 * "git describe --contains" often made a hard-to-justify choice of
   tag to name a given commit, because it tried to come up
   with a name with smallest number of hops from a tag, causing an old
   commit whose close descendant that is recently tagged were not
   described with respect to an old tag but with a newer tag.  It did
   not help that its computation of "hop" count was further tweaked to
   penalize being on a side branch of a merge.  The logic has been
   updated to favor using the tag with the oldest tagger date, which
   is a lot easier to explain to the end users: "We describe a commit
   in terms of the (chronologically) oldest tag that contains the
   commit."

 * "git clone" learned the "--shallow-submodules" option.

 * HTTP transport clients learned to throw extra HTTP headers at the
   server, specified via http.extraHeader configuration variable.

 * The "--compaction-heuristic" option to "git diff" family of
   commands enables a heuristic to make the patch output more readable
   by using a blank line as a strong hint that the contents before and
   after it belong to logically separate units.  It is still
   experimental.

 * A new configuration variable core.hooksPath allows customizing
   where the hook directory is.

 * An earlier addition of "sanitize_submodule_env" with 14111fc4 (git:
   submodule honor -c credential.* from command line, 2016-02-29)
   turned out to be a convoluted no-op; implement what it wanted to do
   correctly, and stop filtering settings given via "git -c var=val".

 * "git commit --dry-run" reported "No, no, you cannot commit." in one
   case where "git commit" would have allowed you to commit, and this
   improves it a little bit ("git commit --dry-run --short" still does
   not give you the correct answer, for example).  This is a stop-gap
   measure in that "commit --short --dry-run" still gives an incorrect
   result.

 * The experimental "multiple worktree" feature gains more safety to
   forbid operations on a branch that is checked out or being actively
   worked on elsewhere, by noticing that e.g. it is being rebased.

 * "git format-patch" learned a new "--base" option to record what
   (public, well-known) commit the original series was built on in
   its output.

 * "git commit" learned to pay attention to the "commit.verbose"
   configuration variable and act as if the "--verbose" option
   was given from the command line.

 * Updated documentation gives hints to GMail users with two-factor
   auth enabled that they need app-specific-password when using
   "git send-email".

 * The manpage output of our documentation did not render well in
   terminal; typeset literals in bold by default to make them stand
   out more.

 * The mark-up in the top-level README.md file has been updated to
   typeset CLI command names differently from the body text.


Performance, Internal Implementation, Development Support etc.

 * The embedded args argv-array in the child process is used to build
   the command line to run pack-objects instead of using a separate
   array of strings.

 * A test for tags has been restructured so that more parts of it can
   easily be run on a platform without a working GnuPG.

 * The startup_info data, which records if we are working inside a
   repository (among other things), are now uniformly available to Git
   subcommand implementations, and Git avoids attempting to touch
   references when we are not in a repository.

 * The command line argument parser for "receive-pack" has been
   rewritten to use parse-options.

 * A major part of "git submodule update" has been ported to C to take
   advantage of the recently added framework to run download tasks in
   parallel.  Other updates to "git submodule" that move pieces of
   logic to C continues.

 * Rename bunch of tests on "git clone" for better organization.

 * The tests that involve running httpd leaked the system-wide
   configuration in /etc/gitconfig to the tested environment.

 * Build updates for MSVC.

 * The repository set-up sequence has been streamlined (the biggest
   change is that there is no longer git_config_early()), so that we
   do not attempt to look into refs/* when we know we do not have a
   Git repository.

 * Code restructuring around the "refs" API to prepare for pluggable
   refs backends.

 * Sources to many test helper binaries and the generated helpers
   have been moved to t/helper/ subdirectory to reduce clutter at the
   top level of the tree.

 * Unify internal logic between "git tag -v" and "git verify-tag"
   commands by making one directly call into the other.

 * "merge-recursive" strategy incorrectly checked if a path that is
   involved in its internal merge exists in the working tree.

 * The test scripts for "git p4" (but not "git p4" implementation
   itself) has been updated so that they would work even on a system
   where the installed version of Python is python 3.

 * As nobody maintains our in-tree git.spec.in and distros use their
   own spec file, we stopped pretending that we support "make rpm".

 * Move from "unsigned char[20]" to "struct object_id" continues.

 * The code for warning_errno/die_errno has been refactored and a new
   error_errno() reporting helper is introduced.
   (merge 1da045f nd/error-errno later to maint).

 * Running tests with '-x' option to trace the individual command
   executions is a useful way to debug test scripts, but some tests
   that capture the standard error stream and check what the command
   said can be broken with the trace output mixed in.  When running
   our tests under "bash", however, we can redirect the trace output
   to another file descriptor to keep the standard error of programs
   being tested intact.

 * t0040 had too many unnecessary repetitions in its test data.  Teach
   test-parse-options program so that a caller can tell what it
   expects in its output, so that these repetitions can be cleaned up.

 * Add perf test for "rebase -i".

 * Common mistakes when writing gitlink: in our documentation are
   found by "make check-docs".

 * t9xxx series has been updated primarily for readability, while
   fixing small bugs in it.  A few scripted Porcelain commands have
   also been updated to fix possible bugs around their use of
   "test -z" and "test -n".

 * CI test was taught to run git-svn tests.

 * "git cat-file --batch-all" has been sped up, by taking advantage
   of the fact that it does not have to read a list of objects, in two
   ways.

 * test updates to make it more readable and maintainable.
   (merge e6273f4 es/t1500-modernize later to maint).

 * "make DEVELOPER=1" worked as expected; setting DEVELOPER=1 in
   config.mak didn't.
   (merge 51dd3e8 mm/makefile-developer-can-be-in-config-mak later to maint).

 * The way how "submodule--helper list" signals unmatch error to its
   callers has been updated.

 * A bash-ism "local" has been removed from "git submodule" scripted
   Porcelain.


Also contains various documentation updates and code clean-ups.


Fixes since v2.8
----------------

Unless otherwise noted, all the fixes since v2.8 in the maintenance
track are contained in this release (see the maintenance releases'
notes for details).

 * "git config --get-urlmatch", unlike other variants of the "git
   config --get" family, did not signal error with its exit status
   when there was no matching configuration.

 * The "--local-env-vars" and "--resolve-git-dir" options of "git
   rev-parse" failed to work outside a repository when the command's
   option parsing was rewritten in 1.8.5 era.

 * "git index-pack --keep[=<msg>] pack-$name.pack" simply did not work.

 * Fetching of history by naming a commit object name directly didn't
   work across remote-curl transport.

 * A small memory leak in an error codepath has been plugged in xdiff
   code.

 * strbuf_getwholeline() did not NUL-terminate the buffer on certain
   corner cases in its error codepath.

 * "git mergetool" did not work well with conflicts that both sides
   deleted.

 * "git send-email" had trouble parsing alias file in mailrc format
   when lines in it had trailing whitespaces on them.

 * When "git merge --squash" stopped due to conflict, the concluding
   "git commit" failed to read in the SQUASH_MSG that shows the log
   messages from all the squashed commits.

 * "git merge FETCH_HEAD" dereferenced NULL pointer when merging
   nothing into an unborn history (which is arguably unusual usage,
   which perhaps was the reason why nobody noticed it).

 * When "git worktree" feature is in use, "git branch -d" allowed
   deletion of a branch that is checked out in another worktree,
   which was wrong.

 * When "git worktree" feature is in use, "git branch -m" renamed a
   branch that is checked out in another worktree without adjusting
   the HEAD symbolic ref for the worktree.

 * "git diff -M" used to work better when two originally identical
   files A and B got renamed to X/A and X/B by pairing A to X/A and B
   to X/B, but this was broken in the 2.0 timeframe.

 * "git send-pack --all <there>" was broken when its command line
   option parsing was written in the 2.6 timeframe.

 * "git format-patch --help" showed `-s` and `--no-patch` as if these
   are valid options to the command.  We already hide `--patch` option
   from the documentation, because format-patch is about showing the
   diff, and the documentation now hides these options as well.

 * When running "git blame $path" with unnormalized data in the index
   for the path, the data in the working tree was blamed, even though
   "git add" would not have changed what is already in the index, due
   to "safe crlf" that disables the line-end conversion.  It has been
   corrected.

 * A change back in version 2.7 to "git branch" broke display of a
   symbolic ref in a non-standard place in the refs/ hierarchy (we
   expect symbolic refs to appear in refs/remotes/*/HEAD to point at
   the primary branch the remote has, and as .git/HEAD to point at the
   branch we locally checked out).

 * A partial rewrite of "git submodule" in the 2.7 timeframe changed
   the way the gitdir: pointer in the submodules point at the real
   repository location to use absolute paths by accident.  This has
   been corrected.

 * "git commit" misbehaved in a few minor ways when an empty message
   is given via -m '', all of which has been corrected.

 * Support for CRAM-MD5 authentication method in "git imap-send" did
   not work well.

 * Upcoming OpenSSL 1.1.0 will break compilation by updating a few API
   elements we use in imap-send, which has been adjusted for the change.

 * The socks5:// proxy support added back in 2.6.4 days was not aware
   that socks5h:// proxies behave differently from socks5:// proxies.

 * "git config" had a codepath that tried to pass a NULL to
   printf("%s"), which nobody seems to have noticed.

 * On Cygwin, object creation uses the "create a temporary and then
   rename it to the final name" pattern, not "create a temporary,
   hardlink it to the final name and then unlink the temporary"
   pattern.

   This is necessary to use Git on Windows shared directories, and is
   already enabled for the MinGW and plain Windows builds.  It also
   has been used in Cygwin packaged versions of Git for quite a while.
   See http://thread.gmane.org/gmane.comp.version-control.git/291853

 * "merge-octopus" strategy did not ensure that the index is clean
   when merge begins.

 * When "git merge" notices that the merge can be resolved purely at
   the tree level (without having to merge blobs) and the resulting
   tree happens to already exist in the object store, it forgot to
   update the index, which left an inconsistent state that would
   break later operations.

 * "git submodule" reports the paths of submodules the command
   recurses into, but these paths were incorrectly reported when
   the command was not run from the root level of the superproject.

 * The "user.useConfigOnly" configuration variable makes it an error
   if users do not explicitly set user.name and user.email.  However,
   its check was not done early enough and allowed another error to
   trigger, reporting that the default value we guessed from the
   system setting was unusable.  This was a suboptimal end-user
   experience as we want the users to set user.name/user.email without
   relying on the auto-detection at all.

 * "git mv old new" did not adjust the path for a submodule that lives
   as a subdirectory inside old/ directory correctly.

 * "git replace -e" did not honour "core.editor" configuration.

 * "git push" from a corrupt repository that attempts to push a large
   number of refs deadlocked; the thread to relay rejection notices
   for these ref updates blocked on writing them to the main thread,
   after the main thread at the receiving end notices that the push
   failed and decides not to read these notices and return a failure.

 * mmap emulation on Windows has been optimized and work better without
   consuming paging store when not needed.

 * A question by "git send-email" to ask the identity of the sender
   has been updated.

 * UI consistency improvements for "git mergetool".

 * "git rebase -m" could be asked to rebase an entire branch starting
   from the root, but failed by assuming that there always is a parent
   commit to the first commit on the branch.

 * Fix a broken "p4 lfs" test.

 * Recent update to Git LFS broke "git p4" by changing the output from
   its "lfs pointer" subcommand.

 * "git fetch" test t5510 was flaky while running a (forced) automagic
   garbage collection.

 * Documentation updates to help contributors setting up Travis CI
   test for their patches.

 * Some multi-byte encoding can have a backslash byte as a later part
   of one letter, which would confuse "highlight" filter used in
   gitweb.

 * "git commit-tree" plumbing command required the user to always sign
   its result when the user sets the commit.gpgsign configuration
   variable, which was an ancient mistake.  Rework "git rebase" that
   relied on this mistake so that it reads commit.gpgsign and pass (or
   not pass) the -S option to "git commit-tree" to keep the end-user
   expectation the same, while teaching "git commit-tree" to ignore
   the configuration variable.  This will stop requiring the users to
   sign commit objects used internally as an implementation detail of
   "git stash".

 * "http.cookieFile" configuration variable clearly wants a pathname,
   but we forgot to treat it as such by e.g. applying tilde expansion.

 * Consolidate description of tilde-expansion that is done to
   configuration variables that take pathname to a single place.

 * Correct faulty recommendation to use "git submodule deinit ." when
   de-initialising all submodules, which would result in a strange
   error message in a pathological corner case.

 * Many 'linkgit:<git documentation page>' references were broken,
   which are all fixed with this.

 * "git rerere" can get confused by conflict markers deliberately left
   by the inner merge step, because they are indistinguishable from
   the real conflict markers left by the outermost merge which are
   what the end user and "rerere" need to look at.  This was fixed by
   making the conflict markers left by the inner merges a bit longer.
   (merge 0f9fd5c jc/ll-merge-internal later to maint).

 * CI test was taught to build documentation pages.

 * "git fsck" learned to catch NUL byte in a commit object as
   potential error and warn.

 * Portability enhancement for "rebase -i" to help platforms whose
   shell does not like "for i in <empty>" (which is not POSIX-kosher).

 * On Windows, .git and optionally any files whose name starts with a
   dot are now marked as hidden, with a core.hideDotFiles knob to
   customize this behaviour.

 * Documentation for "git merge --verify-signatures" has been updated
   to clarify that the signature of only the commit at the tip is
   verified.  Also the phrasing used for signature and key validity is
   adjusted to align with that used by OpenPGP.

 * A couple of bugs around core.autocrlf have been fixed.

 * Many commands normalize command line arguments from NFD to NFC
   variant of UTF-8 on OSX, but commands in the "diff" family did
   not, causing "git diff $path" to complain that no such path is
   known to Git.  They have been taught to do the normalization.

 * "git difftool" learned to handle unmerged paths correctly in
   dir-diff mode.

 * The "are we talking with TTY, doing an interactive session?"
   detection has been updated to work better for "Git for Windows".

 * We forgot to add "git log --decorate=auto" to documentation when we
   added the feature back in v2.1.0 timeframe.
   (merge 462cbb4 rj/log-decorate-auto later to maint).

 * "git fast-import --export-marks" would overwrite the existing marks
   file even when it makes a dump from its custom die routine.
   Prevent it from doing so when we have an import-marks file but
   haven't finished reading it.
   (merge f4beed6 fc/fast-import-broken-marks-file later to maint).

 * "git rebase -i", after it fails to auto-resolve the conflict, had
   an unnecessary call to "git rerere" from its very early days, which
   was spotted recently; the call has been removed.
   (merge 7063693 js/rebase-i-dedup-call-to-rerere later to maint).

 * Other minor clean-ups and documentation updates
   (merge cd82b7a pa/cherry-pick-doc-typo later to maint).
   (merge 2bb73ae rs/patch-id-use-skip-prefix later to maint).
   (merge aa20cbc rs/apply-name-terminate later to maint).
   (merge fe17fc0 jc/t2300-setup later to maint).
   (merge e256eec jk/shell-portability later to maint).

----------------------------------------------------------------

Changes since v2.8.0 are as follows:

Adam Dinwoodie (2):
      config.mak.uname: Cygwin needs OBJECT_CREATION_USES_RENAMES
      commit: --amend -m '' silently fails to wipe message

Alexander Kuleshov (1):
      submodule-config: use hashmap_iter_first()

Alexander Rinass (1):
      diff: run arguments through precompose_argv

Alexander Shopov (1):
      l10n: Updated Bulgarian translation of git (2597t,0f,0u)

Antonin (1):
      l10n: fr.po Fixed grammar mistake

Armin Kunaschik (2):
      t4151: make sure argument to 'test -z' is given
      t0008: 4 tests fail with ksh88

Ben Woosley (1):
      git-rebase--merge: don't include absent parent as a base

Benjamin Dopplinger (1):
      README.md: format CLI commands with code syntax

Brian Norris (3):
      Documentation: config: improve word ordering for http.cookieFile
      http: expand http.cookieFile as a path
      config: consistently format $variables in monospaced font

Changwoo Ryu (1):
      l10n: ko.po: Update Korean translation

Christian Couder (5):
      Documentation: talk about pager in api-trace.txt
      builtin/apply: get rid of useless 'name' variable
      builtin/apply: handle parse_binary() failure
      builtin/apply: free patch when parse_chunk() fails
      Git/SVN: die when there is no commit metadata

David Aguilar (4):
      mergetool: support delete/delete conflicts
      mergetool: honor tempfile configuration when resolving delete conflicts
      difftool: initialize variables for readability
      difftool: handle unmerged files in dir-diff mode

David Turner (5):
      refs: move head_ref{,_submodule} to the common code
      refs: move for_each_*ref* functions into common code
      files-backend: break out ref reading
      refs: move resolve_ref_unsafe into common code
      refs: on symref reflog expire, lock symref not referrent

Dennis Kaarsemaker (1):
      Makefile: remove dependency on git.spec

Dimitriy Ryazantcev (1):
      l10n: ru.po: update Russian translation

Elia Pinto (1):
      api-trace.txt: fix typo

Elijah Newren (6):
      merge-recursive: remove duplicate code
      merge-recursive: do not check working copy when creating a virtual merge base
      t7605: add a testcase demonstrating a bug with trivial merges
      builtin/merge.c: fix a bug with trivial merges
      merge-octopus: abort if index does not match HEAD
      t6044: new merge testcases for when index doesn't match HEAD

Eric Sunshine (10):
      lib-gpg: drop unnecessary "missing GPG" warning
      t6302: normalize names and descriptions of signed tags
      t6302: also test annotated in addition to signed tags
      t6302: skip only signed tags rather than all tests when GPG is missing
      git-format-patch.txt: don't show -s as shorthand for multiple options
      t1500: be considerate to future potential tests
      t1500: test_rev_parse: facilitate future test enhancements
      t1500: avoid changing working directory outside of tests
      t1500: avoid setting configuration options outside of tests
      t1500: avoid setting environment variables outside of tests

Eric Wong (4):
      send-email: more meaningful Message-ID
      send-email: do not load Data::Dumper
      pack-objects: warn on split packs disabling bitmaps
      .mailmap: update to my shorter email address

Erwan Mathoniere (1):
      Documentation: bold literals in man

Felipe Contreras (1):
      fast-import: do not truncate exported marks file

Gabriel Souza Franco (2):
      fetch-pack: fix object_id of exact sha1
      fetch-pack: update the documentation for "<refs>..." arguments

Jacob Keller (7):
      submodule: don't pass empty string arguments to submodule--helper clone
      submodule: check argc count for git submodule--helper clone
      submodule: fix submodule--helper clone usage
      submodule: fix segmentation fault in submodule--helper clone
      quote: implement sq_quotef()
      git: submodule honor -c credential.* from command line
      xdiff: add recs_match helper function

Jacob Nisnevich (2):
      mergetools: create mergetool_find_win32_cmd() helper function for winmerge
      mergetools: add support for ExamDiff

Jan Durovec (2):
      git-p4: clean-up code style in tests
      git-p4: add P4 jobs to git commit message

Jean-Noel Avila (1):
      l10n: fr.po v2.9.0rnd1

Jeff King (56):
      credential: let empty credential specs reset helper list
      t1515: add tests for rev-parse out-of-repo helpers
      add--interactive: allow custom diff highlighting programs
      rev-parse: let some options run outside repository
      strbuf_getwholeline: NUL-terminate getdelim buffer on error
      setup: make startup_info available everywhere
      setup: set startup_info->have_repository more reliably
      remote: don't resolve HEAD in non-repository
      mailmap: do not resolve blobs in a non-repository
      grep: turn off gitlink detection for --no-index
      use setup_git_directory() in test-* programs
      setup: document check_repository_format()
      wrap shared_repository global in get/set accessors
      lazily load core.sharedrepository
      check_repository_format_gently: stop using git_config_early
      config: drop git_config_early
      setup: refactor repo format reading and verification
      init: use setup.c's repo version verification
      setup: unify repository version callbacks
      setup: drop repository_format_version global
      verify_repository_format: mark messages for translation
      send-email: ignore trailing whitespace in mailrc alias file
      credential-cache--daemon: clarify "exit" action semantics
      t/lib-httpd: pass through GIT_CONFIG_NOSYSTEM env
      git_config_push_parameter: handle empty GIT_CONFIG_PARAMETERS
      branch: fix shortening of non-remote symrefs
      commit: do not ignore an empty message given by -m ''
      config: lower-case first word of error strings
      git_config_set_multivar_in_file: all non-zero returns are errors
      git_config_set_multivar_in_file: handle "unset" errors
      t5532: use write_script
      send-pack: close demux pipe before finishing async process
      run-command: teach async threads to ignore SIGPIPE
      send-pack: isolate sigpipe in demuxer thread
      fetch-pack: isolate sigpipe in demuxer thread
      t5504: drop sigpipe=ok from push tests
      remote.c: spell __attribute__ correctly
      t5550: fix typo in $HTTPD_URL
      t5550: break submodule config test into multiple sub-tests
      submodule: export sanitized GIT_CONFIG_PARAMETERS
      submodule--helper: move config-sanitizing to submodule.c
      submodule: use prepare_submodule_repo_env consistently
      submodule: stop sanitizing config options
      t6302: simplify non-gpg cases
      rebase--interactive: avoid empty list in shell for-loop
      test-lib: set BASH_XTRACEFD automatically
      t/lib-git-svn: drop $remote_git_svn and $git_svn_id
      t9100,t3419: enclose all test code in single-quotes
      t9107: use "return 1" instead of "exit 1"
      t9107: switch inverted single/double quotes in test
      t9103: modernize test style
      always quote shell arguments to test -z/-n
      cat-file: avoid noop calls to sha1_object_info_extended
      cat-file: default to --buffer when --batch-all-objects is used
      archive-tar: convert snprintf to xsnprintf
      test-lib: add in-shell "env" replacement

Jiang Xin (2):
      l10n: git.pot: v2.9.0 round 1 (104 new, 37 removed)
      l10n: zh_CN: for git v2.9.0 l10n round 1

Johannes Schindelin (16):
      replace --edit: respect core.editor
      name-rev: include taggerdate in considering the best name
      win32mmap: set errno appropriately
      mmap(win32): avoid copy-on-write when it is unnecessary
      mmap(win32): avoid expensive fstat() call
      http: support sending custom HTTP headers
      tests: adjust the configuration for Apache 2.2
      t5551: make the test for extra HTTP headers more robust
      t3404: fix typo
      submodule: ensure that -c http.extraheader is heeded
      mingw: introduce the 'core.hideDotFiles' setting
      mingw: remove unnecessary definition
      Windows: only add a no-op pthread_sigmask() when needed
      perf: let's disable symlinks when they are not available
      perf: make the tests work in worktrees
      perf: run "rebase -i" under perf

Johannes Sixt (4):
      Windows: shorten code by re-using convert_slashes()
      Windows: add pthread_sigmask() that does nothing
      t6044: replace seq by test_seq
      rebase -i: remove an unnecessary 'rerere' invocation

John Keeping (3):
      config: fail if --get-urlmatch finds no value
      Documentation/git-config: use bulleted list for exit codes
      Documentation/git-config: fix --get-all description

Junio C Hamano (82):
      rerere: split conflict ID further
      rerere: scan $GIT_DIR/rr-cache/$ID when instantiating a rerere_id
      index-pack: correct --keep[=<msg>]
      index-pack: add a helper function to derive .idx/.keep filename
      rerere: handle leftover rr-cache/$ID directory and postimage files
      rerere: delay the recording of preimage
      rerere: allow multiple variants to exist
      t4200: rerere a merge with two identical conflicts
      rerere: do use multiple variants
      apply: remove unused call to free() in gitdiff_{old,new}name()
      merge: fix NULL pointer dereference when merging nothing into void
      merge: refuse to create too cool a merge by default
      pretty: enable --expand-tabs by default for selected pretty formats
      pretty: allow tweaking tabwidth in --expand-tabs
      submodule--helper: do not borrow absolute_path() result for too long
      Git 2.8.1
      First batch for post 2.8 cycle
      pretty: test --expand-tabs
      Makefile: fix misdirected redirections
      Second batch for post 2.8 cycle
      Makefile: stop pretending to support rpmbuild
      rerere: gc and clear
      rerere: move code related to "forget" together
      rerere: split code to call ll_merge() further
      rerere: adjust 'forget' to multi-variant world order
      setup.c: do not feed NULL to "%.*s" even with precision 0
      Third batch for post 2.8 cycle
      http: differentiate socks5:// and socks5h://
      t1020: do not overuse printf and use write_script
      t3404: use write_script
      Fourth batch for post 2.8 cycle
      Start preparing for 2.8.2
      fsck_commit_buffer(): do not special case the last validation
      ll-merge: fix typo in comment
      Prepare for 2.8.2
      Makefile: clean *.o files we create
      Fifth batch for post 2.8 cycle
      t3033: avoid 'ambiguous refs' warning
      pull: pass --allow-unrelated-histories to "git merge"
      Sixth batch for post 2.8 cycle
      send-email: fix grammo in the prompt that asks e-mail recipients
      Seventh batch for post 2.8 cycle
      Git 2.8.2
      Eighth batch for 2.9
      diff: undocument the compaction heuristic knobs for experimentation
      Start preparing for 2.8.3
      commit-tree: do not pay attention to commit.gpgsign
      Ninth batch for 2.9
      config: describe 'pathname' value type
      Tenth batch for 2.9
      Almost ready for 2.8.3
      test-lib-functions.sh: remove misleading comment on test_seq
      test-lib-functions.sh: rewrite test_seq without Perl
      ll-merge: use a longer conflict marker for internal merge
      t6036: remove pointless test that expects failure
      Documentation: fix linkgit references
      fsck: detect and warn a commit with embedded NUL
      ci: validate "linkgit:" in documentation
      test-parse-options: fix output when callback option fails
      test-parse-options: --expect=<string> option to simplify tests
      t0040: remove unused test helpers
      t0040: convert a few tests to use test-parse-options --expect
      Eleventh batch for 2.9
      rerere: plug memory leaks upon "rerere forget" failure
      Twelfth batch for 2.9
      Thirteenth batch for 2.9
      Git 2.8.3
      rerere: remove an null statement
      Git 2.9-rc0
      t4204: do not let $name variable clobbered
      Start preparing for 2.8.4
      Final batch before 2.9-rc1
      More topics for 2.8.4
      Git 2.9-rc1
      t5500 & t7403: lose bash-ism "local"
      t2300: run git-sh-setup in an environment that better mimics the real life
      Almost ready for 2.9-rc2
      Git 2.8.4
      Git 2.9-rc2
      diff: disable compaction heuristic for now
      Hopefully the final last-minute update before 2.9 final
      Git 2.9

Karsten Blees (1):
      mingw: make isatty() recognize MSYS2's pseudo terminals (/dev/pty*)

Kazuki Yamaguchi (10):
      branch -d: refuse deleting a branch which is currently checked out
      refs: add a new function set_worktree_head_symref
      branch -m: update all per-worktree HEADs
      set_worktree_head_symref(): fix error message
      imap-send: use HMAC() function provided by OpenSSL
      imap-send: check NULL return of SSL_CTX_new()
      imap-send: avoid deprecated TLSv1_method()
      configure: remove checking for HMAC_CTX_cleanup
      imap-send: check for NOLOGIN capability only when using LOGIN command
      imap-send: fix CRAM-MD5 response calculation

Keller Fuchs (1):
      Documentation: clarify signature verification

Lars Schneider (8):
      git-p4: map a P4 user to Git author name and email address
      travis-ci: update Git-LFS and P4 to the latest version
      travis-ci: express Linux/OS X dependency versions more clearly
      git-p4: fix Git LFS pointer parsing
      t9824: fix wrong reference value
      Documentation: add setup instructions for Travis CI
      travis-ci: build documentation
      travis-ci: enable Git SVN tests t91xx on Linux

Laurent Arnoud (1):
      tag: add the option to force signing of annotated tags

Li Peng (1):
      typofix: assorted typofixes in comments, documentation and messages

Linus Torvalds (1):
      pretty: expand tabs in indented logs to make things line up properly

Luke Diamand (3):
      git-p4 tests: cd to / before running python
      git-p4 tests: work with python3 as well as python2
      git-p4 tests: time_in_seconds should use $PYTHON_PATH

Marios Titas (2):
      ident: check for useConfigOnly before auto-detection of name/email
      ident: give "please tell me" message upon useConfigOnly error

Matthieu Moy (13):
      Documentation/diff-config: fix description of diff.renames
      t4001-diff-rename: wrap file creations in a test
      t: add tests for diff.renames (true/false/unset)
      log: introduce init_log_defaults()
      diff: activate diff.renames by default
      lockfile: mark strings for translation
      lockfile: improve error message when lockfile exists
      git.spec.in: use README.md, not README
      README.md: don't take 'commandname' literally
      git-multimail: update to release 1.3.0
      git-multimail: update to release 1.3.1
      Makefile: move 'ifdef DEVELOPER' after config.mak* inclusion
      Makefile: add $(DEVELOPER_CFLAGS) variable

Mehul Jain (9):
      git-pull.c: introduce git_pull_config()
      pull --rebase: add --[no-]autostash flag
      t5520: use consistent capitalization in test titles
      t5520: ensure consistent test conditions
      t5520: use better test to check stderr output
      t5520: factor out common "successful autostash" code
      t5520: factor out common "failing autostash" code
      t5520: reduce commom lines of code
      t5520: test --[no-]autostash with pull.rebase=true

Michael Haggerty (19):
      t1430: test the output and error of some commands more carefully
      t1430: clean up broken refs/tags/shadow
      t1430: don't rely on symbolic-ref for creating broken symrefs
      t1430: test for-each-ref in the presence of badly-named refs
      t1430: improve test coverage of deletion of badly-named refs
      resolve_missing_loose_ref(): simplify semantics
      resolve_ref_unsafe(): use for loop to count up to MAXDEPTH
      resolve_ref_unsafe(): ensure flags is always set
      resolve_ref_1(): eliminate local variable
      resolve_ref_1(): reorder code
      resolve_ref_1(): eliminate local variable "bad_name"
      read_raw_ref(): manage own scratch space
      files-backend: inline resolve_ref_1() into resolve_ref_unsafe()
      read_raw_ref(): change flags parameter to unsigned int
      fsck_head_link(): remove unneeded flag variable
      cmd_merge(): remove unneeded flag variable
      checkout_paths(): remove unneeded flag variable
      check_aliased_update(): check that dst_name is non-NULL
      show_head_ref(): check the result of resolve_ref_namespace()

Michael J Gruber (1):
      completion: complete --cherry-mark for git log

Michael Procter (1):
      upload-pack: use argv_array for pack_objects

Michael Rappazzo (1):
      Documentation: add instructions to help setup gmail 2FA

Nguyễn Thái Ngọc Duy (62):
      git-apply.txt: remove a space
      git-apply.txt: mention the behavior inside a subdir
      apply: report patch skipping in verbose mode
      test helpers: move test-* to t/helper/ subdirectory
      dir.c: remove dead function fnmatch_icase()
      wrapper.c: delete dead function git_mkstemps()
      dir.c: rename str(n)cmp_icase to fspath(n)cmp
      path.c: add git_common_path() and strbuf_git_common_path()
      worktree.c: store "id" instead of "git_dir"
      worktree.c: make find_shared_symref() return struct worktree *
      worktree.c: mark current worktree
      path.c: refactor and add worktree_git_path()
      wt-status.c: split rebase detection out of wt_status_get_state()
      wt-status.c: make wt_status_check_rebase() work on any worktree
      worktree.c: avoid referencing to worktrees[i] multiple times
      worktree.c: check whether branch is rebased in another worktree
      wt-status.c: split bisect detection out of wt_status_get_state()
      worktree.c: check whether branch is bisected in another worktree
      branch: do not rename a branch under bisect or rebase
      remote.c: specify correct plural form in "commit diverge" message
      usage.c: move format processing out of die_errno()
      usage.c: add warning_errno() and error_errno()
      bisect.c: use die_errno() and warning_errno()
      builtin/am.c: use error_errno()
      builtin/branch.c: use error_errno()
      builtin/fetch.c: use error_errno()
      builtin/help.c: use warning_errno()
      builtin/mailsplit.c: use error_errno()
      builtin/merge-file.c: use error_errno()
      builtin/pack-objects.c: use die_errno() and warning_errno()
      builtin/rm.c: use warning_errno()
      builtin/update-index.c: prefer "err" to "errno" in process_lstat_error
      builtin/upload-archive.c: use error_errno()
      builtin/worktree.c: use error_errno()
      check-racy.c: use error_errno()
      combine-diff.c: use error_errno()
      compat/win32/syslog.c: use warning_errno()
      config.c: use error_errno()
      connected.c: use error_errno()
      copy.c: use error_errno()
      credential-cache--daemon.c: use warning_errno()
      diff-no-index.c: use error_errno()
      editor.c: use error_errno()
      entry.c: use error_errno()
      fast-import.c: use error_errno()
      gpg-interface.c: use error_errno()
      grep.c: use error_errno()
      http.c: use error_errno() and warning_errno()
      ident.c: use warning_errno()
      mailmap.c: use error_errno()
      reachable.c: use error_errno()
      rerere.c: use error_errno() and warning_errno()
      run-command.c: use error_errno()
      sequencer.c: use error_errno()
      server-info.c: use error_errno()
      sha1_file.c: use {error,die,warning}_errno()
      transport-helper.c: use error_errno()
      unpack-trees.c: use error_errno()
      upload-pack.c: use error_errno()
      vcs-svn: use error_errno()
      wrapper.c: use warning_errno()
      wrap-for-bin.sh: regenerate bin-wrappers when switching branches

Nikola Forró (1):
      difftool/mergetool: make the form of yes/no questions consistent

Ori Avtalion (1):
      Documentation: git diff --check detects conflict markers

Pablo Santiago Blum de Aguiar (1):
      git-cherry-pick.txt: correct a small typo

Peter Krefting (1):
      l10n: sv.po: Update Swedish translation (2597t0f0u)

Pranit Bauva (9):
      t/t7502 : drop duplicate test
      api-parse-options.txt: document OPT_CMDMODE()
      t0040-test-parse-options.sh: fix style issues
      test-parse-options: print quiet as integer
      t0040-parse-options: improve test coverage
      t/t7507: improve test coverage
      parse-options.c: make OPTION_COUNTUP respect "unspecified" values
      t7507-commit-verbose: improve test coverage by testing number of diffs
      commit: add a commit.verbose config variable

Ralf Thielow (5):
      completion: add option '--guides' to 'git help'
      completion: add 'revisions' and 'everyday' to 'git help'
      rebase-i: print an abbreviated hash when stop for editing
      string_list: use string-list API in unsorted_string_list_lookup()
      l10n: de.po: translate 104 new messages

Ramsay Jones (3):
      xdiff/xprepare: use the XDF_DIFF_ALG() macro to access flag bits
      xdiff/xprepare: fix a memory leak
      log: document the --decorate=auto option

Ray Chen (1):
      l10n: zh_CN: review for git v2.9.0 l10n round 1

Ray Zhang (1):
      worktree: add: introduce --checkout option

René Nyffenegger (1):
      Documentation: fix typo 'In such these cases'

René Scharfe (3):
      apply: remove unused parameters from name_terminate()
      patch-id: use starts_with() and skip_prefix()
      perf: make the tests work without a worktree

SZEDER Gábor (6):
      diffcore: fix iteration order of identical files during rename detection
      for-each-ref: fix description of '--contains' in manpage
      test-lib: simplify '--option=value' parsing
      t9824: fix broken &&-chain in a subshell
      t5510: run auto-gc in the foreground
      Documentation/git-send-email: fix typo in gmail 2FA section

Santiago Torres (6):
      builtin/verify-tag.c: ignore SIGPIPE in gpg-interface
      t7030: test verifying multiple tags
      verify-tag: update variable name and type
      verify-tag: prepare verify_tag for libification
      verify-tag: move tag verification code to tag.c
      tag -v: verify directly rather than exec-ing verify-tag

Saurav Sachidanand (1):
      dir: store EXC_FLAG_* values in unsigned integers

Shin Kojima (1):
      gitweb: apply fallback encoding before highlight

Sidhant Sharma [:tk] (1):
      builtin/receive-pack.c: use parse_options API

Stanislav Kolotinskiy (1):
      git-send-pack: fix --all option when used with directory

Stefan Beller (46):
      submodule-config: keep update strategy around
      submodule-config: drop check against NULL
      fetching submodules: respect `submodule.fetchJobs` config option
      submodule update: direct error message to stderr
      run_processes_parallel: treat output of children as byte array
      run_processes_parallel: rename parameters for the callbacks
      git submodule update: have a dedicated helper for cloning
      submodule helper: remove double 'fatal: ' prefix
      submodule update: expose parallelism to the user
      clone: allow an explicit argument for parallel submodule clones
      clone tests: rename t57* => t56*
      rebase: decouple --exec from --interactive
      t3404: cleanup double empty lines between tests
      submodule foreach: correct path display in recursive submodules
      submodule update --init: correct path handling in recursive submodules
      submodule status: correct path handling in recursive submodules
      submodule update: align reporting path for custom command execution
      submodule update: test recursive path reporting from subdirectory
      t7407: make expectation as clear as possible
      recursive submodules: test for relative paths
      submodule--helper: fix potential NULL-dereference
      submodule--helper clone: create the submodule path just once
      notes: don't leak memory in git_config_get_notes_strategy
      abbrev_sha1_in_line: don't leak memory
      bundle: don't leak an fd in case of early return
      credential-cache, send_request: close fd when done
      submodule--helper, module_clone: always operate on absolute paths
      submodule--helper, module_clone: catch fprintf failure
      submodule: port resolve_relative_url from shell to C
      submodule: port init from shell to C
      xdiff: implement empty line chunk heuristic
      mv: allow moving nested submodules
      clone: add `--shallow-submodules` flag
      config doc: improve exit code listing
      config.c: drop local variable
      submodule-config: don't shadow `cache`
      submodule init: fail gracefully with a missing .gitmodules file
      submodule--helper update-clone: abort gracefully on missing .gitmodules
      submodule deinit test: fix broken && chain in subshell
      submodule init: redirect stdout to stderr
      t7300: mark test with SANITY
      submodule deinit: require '--all' instead of '.' for all submodules
      t3513: do not compress backup tar file
      t6041: do not compress backup tar file
      submodule--helper: offer a consistent API
      submodule: remove bashism from shell script

Stephen P. Smith (1):
      wt-status.c: set commitable bit if there is a meaningful merge.

Sven Strickroth (3):
      commit: do not lose SQUASH_MSG contents
      MSVC: vsnprintf in Visual Studio 2015 doesn't need SNPRINTF_SIZE_CORR any more
      MSVC: use shipped headers instead of fallback definitions

Torsten Bögershausen (6):
      correct blame for files commited with CRLF
      t0027: make commit_chk_wrnNNO() reliable
      convert: allow core.autocrlf=input and core.eol=crlf
      t0027: test cases for combined attributes
      convert.c: ident + core.autocrlf didn't work
      t5601: Remove trailing space in sed expression

Trần Ngọc Quân (1):
      l10n: Updated Vietnamese translation (2597t)

Vasco Almeida (19):
      l10n: fr: fix transcation of "dir"
      l10n: fr: fix wrongly translated option name
      l10n: fr: change "id de clé" to match "id-clé"
      l10n: fr: don't translate "merge" as a parameter
      i18n: index-pack: use plural string instead of normal one
      i18n: builtin/branch.c: mark option for translation
      i18n: unpack-trees: mark strings for translation
      i18n: builtin/rm.c: remove a comma ',' from string
      i18n: branch: unmark string for translation
      i18n: branch: move comment for translators
      i18n: git-parse-remote.sh: mark strings for translation
      i18n: builtin/pull.c: mark placeholders for translation
      i18n: builtin/pull.c: split strings marked for translation
      i18n: remote: add comment for translators
      Documentation/git-mailinfo: fix typo
      i18n: unpack-trees: avoid substituting only a verb in sentences
      l10n: pt_PT: merge git.pot file
      l10n: pt_PT: update according to git-gui glossary
      l10n: pt_PT: update Portuguese translation

Xiaolong Ye (4):
      patch-ids: make commit_patch_id() a public helper function
      format-patch: add '--base' option to record base tree info
      format-patch: introduce --base=auto option
      format-patch: introduce format.useAutoBase configuration

brian m. carlson (6):
      sha1-name: introduce a get_oid() function
      test-match-trees: convert to use struct object_id
      match-trees: convert shift_tree() and shift_tree_by() to use object_id
      struct name_entry: use struct object_id instead of unsigned char sha1[20]
      tree-walk: convert tree_entry_extract() to use struct object_id
      match-trees: convert several leaf functions to use struct object_id

Ævar Arnfjörð Bjarmason (4):
      githooks.txt: improve the intro section
      githooks.txt: amend dangerous advice about 'update' hook ACL
      githooks.txt: minor improvements to the grammar & phrasing
      hooks: allow customizing where the hook directory is

^ permalink raw reply	[relevance 2%]

* What's cooking in git.git (Mar 2017, #02; Fri, 3)
@ 2017-03-03 23:26  2% Junio C Hamano
  0 siblings, 0 replies; 200+ results
From: Junio C Hamano @ 2017-03-03 23:26 UTC (permalink / raw)
  To: git

Here are the topics that have been cooking.  Commits prefixed with
'-' are only in 'pu' (proposed updates) while commits prefixed with
'+' are in 'next'.  The ones marked with '.' do not appear in any of
the integration branches, but I am still holding onto them.

You can find the changes described here in the integration branches
of the repositories listed at

    http://git-blame.blogspot.com/p/git-public-repositories.html

--------------------------------------------------
[New Topics]

* ew/markdown-url-in-readme (2017-03-01) 1 commit
  (merged to 'next' on 2017-03-03 at 3d35e3a991)
 + README: create HTTP/HTTPS links from URLs in Markdown

 Doc update.

 Will merge to 'master'.


* jk/add-i-patch-do-prompt (2017-03-02) 1 commit
 - add--interactive: fix missing file prompt for patch mode with "-i"

 The patch subcommand of "git add -i" was meant to have paths
 selection prompt just like other subcommand, unlike "git add -p"
 directly jumps to hunk selection.  Recently, this was broken and
 "add -i" lost the paths selection dialog, but it now has been
 fixed.

 Will merge to 'next'.


* ax/line-log-range-merge-fix (2017-03-03) 1 commit
 - line-log.c: prevent crash during union of too many ranges

 The code to parse "git log -L..." command line was buggy when there
 are many ranges specified with -L; overrun of the allocated buffer
 has been fixed.

 Will merge to 'next'.


* js/early-config (2017-03-03) 11 commits
 - t1309: test read_early_config()
 - read_early_config(): really discover .git/
 - read_early_config(): avoid .git/config hack when unneeded
 - setup: make read_early_config() reusable
 - setup: export the discover_git_directory() function
 - SQUASH??? ERROR: trailing statements should be on next line
 - setup_git_directory_1(): avoid changing global state
 - setup: prepare setup_discovered_git_directory() the root directory
 - SQUASH??? ERROR: trailing statements should be on next line
 - setup_git_directory(): use is_dir_sep() helper
 - t7006: replace dubious test

 The start-up sequence of "git" needs to figure out some configured
 settings before it finds and set itself up in the location of the
 repository and was quite messy due to its "chicken-and-egg" nature.
 The code has been restructured.

 Will merge to 'next' after squashing niggle-fixes in.


* jt/perf-updates (2017-03-03) 3 commits
 - t/perf: add fallback for pre-bin-wrappers versions of git
 - t/perf: use $MODERN_GIT for all repo-copying steps
 - t/perf: export variable used in other blocks

 The t/perf performance test suite was not prepared to test not so
 old versions of Git, but now it covers versions of Git that are not
 so ancient.

 Will merge to 'next'.


* ss/remote-bzr-hg-placeholder-wo-python (2017-03-03) 1 commit
 - contrib: git-remote-{bzr,hg} placeholders don't need Python

 There is no need for Python only to give a few messages to the
 standard error stream, but we somehow did.

 Will merge to 'next'.

--------------------------------------------------
[Stalled]

* nd/worktree-move (2017-01-27) 7 commits
 . fixup! worktree move: new command
 . worktree remove: new command
 . worktree move: refuse to move worktrees with submodules
 . worktree move: accept destination as directory
 . worktree move: new command
 . worktree.c: add update_worktree_location()
 . worktree.c: add validate_worktree()

 "git worktree" learned move and remove subcommands.

 Tentatively ejected as it seems to break 'pu' when merged.


* pb/bisect (2017-02-18) 28 commits
 - fixup! bisect--helper: `bisect_next_check` & bisect_voc shell function in C
 - bisect--helper: remove the dequote in bisect_start()
 - bisect--helper: retire `--bisect-auto-next` subcommand
 - bisect--helper: retire `--bisect-autostart` subcommand
 - bisect--helper: retire `--bisect-write` subcommand
 - bisect--helper: `bisect_replay` shell function in C
 - bisect--helper: `bisect_log` shell function in C
 - bisect--helper: retire `--write-terms` subcommand
 - bisect--helper: retire `--check-expected-revs` subcommand
 - bisect--helper: `bisect_state` & `bisect_head` shell function in C
 - bisect--helper: `bisect_autostart` shell function in C
 - bisect--helper: retire `--next-all` subcommand
 - bisect--helper: retire `--bisect-clean-state` subcommand
 - bisect--helper: `bisect_next` and `bisect_auto_next` shell function in C
 - t6030: no cleanup with bad merge base
 - bisect--helper: `bisect_start` shell function partially in C
 - bisect--helper: `get_terms` & `bisect_terms` shell function in C
 - bisect--helper: `bisect_next_check` & bisect_voc shell function in C
 - bisect--helper: `check_and_set_terms` shell function in C
 - bisect--helper: `bisect_write` shell function in C
 - bisect--helper: `is_expected_rev` & `check_expected_revs` shell function in C
 - bisect--helper: `bisect_reset` shell function in C
 - wrapper: move is_empty_file() and rename it as is_empty_or_missing_file()
 - t6030: explicitly test for bisection cleanup
 - bisect--helper: `bisect_clean_state` shell function in C
 - bisect--helper: `write_terms` shell function in C
 - bisect: rewrite `check_term_format` shell function in C
 - bisect--helper: use OPT_CMDMODE instead of OPT_BOOL

 Move more parts of "git bisect" to C.

 Expecting a reroll.
 cf. <CAFZEwPPXPPHi8KiEGS9ggzNHDCGhuqMgH9Z8-Pf9GLshg8+LPA@mail.gmail.com>
 cf. <CAFZEwPM9RSTGN54dzaw9gO9iZmsYjJ_d1SjUD4EzSDDbmh-XuA@mail.gmail.com>
 cf. <CAFZEwPNUXcNY9Qdz=_B7q2kQuaecPzJtTMGdv8YMUPEz2vnp8A@mail.gmail.com>


* ls/filter-process-delayed (2017-01-08) 1 commit
 . convert: add "status=delayed" to filter process protocol

 Ejected, as does not build when merged to 'pu'.


* sh/grep-tree-obj-tweak-output (2017-01-20) 2 commits
 - grep: use '/' delimiter for paths
 - grep: only add delimiter if there isn't one already

 "git grep", when fed a tree-ish as an input, shows each hit
 prefixed with "<tree-ish>:<path>:<lineno>:".  As <tree-ish> is
 almost always either a commit or a tag that points at a commit, the
 early part of the output "<tree-ish>:<path>" can be used as the
 name of the blob and given to "git show".  When <tree-ish> is a
 tree given in the extended SHA-1 syntax (e.g. "<commit>:", or
 "<commit>:<dir>"), however, this results in a string that does not
 name a blob (e.g. "<commit>::<path>" or "<commit>:<dir>:<path>").
 "git grep" has been taught to be a bit more intelligent about these
 cases and omit a colon (in the former case) or use slash (in the
 latter case) to produce "<commit>:<path>" and
 "<commit>:<dir>/<path>" that can be used as the name of a blob.

 Expecting a reroll?  Is this good enough with known limitations?


* jc/diff-b-m (2015-02-23) 5 commits
 . WIPWIP
 . WIP: diff-b-m
 - diffcore-rename: allow easier debugging
 - diffcore-rename.c: add locate_rename_src()
 - diffcore-break: allow debugging

 "git diff -B -M" produced incorrect patch when the postimage of a
 completely rewritten file is similar to the preimage of a removed
 file; such a resulting file must not be expressed as a rename from
 other place.

 The fix in this patch is broken, unfortunately.

 Will discard.

--------------------------------------------------
[Cooking]

* jk/interpret-branch-name (2017-03-02) 9 commits
 - checkout: restrict @-expansions when finding branch
 - strbuf_check_ref_format(): expand only local branches
 - branch: restrict @-expansions when deleting
 - t3204: test git-branch @-expansion corner cases
 - interpret_branch_name: allow callers to restrict expansions
 - strbuf_branchname: add docstring
 - strbuf_branchname: drop return value
 - interpret_branch_name: move docstring to header file
 - interpret_branch_name(): handle auto-namelen for @{-1}

 "git branch @" created refs/heads/@ as a branch, and in general the
 code that handled @{-1} and @{upstream} was a bit too loose in
 disambiguating.

 Will merge to 'next'.


* jk/sha1dc (2017-03-01) 7 commits
 - Put sha1dc on a diet
 - sha1dc: avoid 'for' loop initial decl
 - sha1dc: resurrect LICENSE file
 - sha1dc: avoid c99 declaration-after-statement
 - Makefile: add USE_SHA1DC knob
 - sha1dc: adjust header includes for git
 - add collision-detecting sha1 implementation

 Borrow "detect attempt to create collisions" variant of SHA-1
 implementation by Marc Stevens (CWI) and Dan Shumow (Microsoft).

 Expecting a cleaned-up reroll after discussion settles.
 cf. <CA+55aFxTWqsTTiDKo4DBZT-8Z9t80bGMD3uijzKONa_bYEZABQ@mail.gmail.com>


* js/travis-32bit-linux (2017-03-03) 1 commit
 - Travis: also test on 32-bit Linux

 Add 32-bit Linux variant to the set of platforms to be tested with
 Travis CI.

 Will merge to 'next'.


* jt/http-base-url-update-upon-redirect (2017-02-28) 1 commit
  (merged to 'next' on 2017-03-03 at 5225bd3ef8)
 + http: attempt updating base URL only if no error

 When a redirected http transport gets an error during the
 redirected request, we ignored the error we got from the server,
 and ended up giving a not-so-useful error message.

 Will merge to 'master'.


* jt/mark-tree-uninteresting-for-uninteresting-commit (2017-02-28) 3 commits
 - upload-pack: compute blob reachability correctly
 - revision: exclude trees/blobs given commit
 - revision: unify {tree,blob}_objects in rev_info

 The revision/object traversal machinery did not mark all tree and
 blob objects that are contained in an uninteresting commit as
 uninteresting, because that is quite costly.  Instead, it only
 marked those that are contained in an uninteresting boundary commit
 as uninteresting.

 cf. <20170228215937.yd4juycjf7y3vish@sigill.intra.peff.net>


* ps/docs-diffcore (2017-02-28) 2 commits
  (merged to 'next' on 2017-03-03 at 9ca5691de2)
 + docs/diffcore: unquote "Complete Rewrites" in headers
 + docs/diffcore: fix grammar in diffcore-rename header

 Doc update.

 Will merge to 'master'.


* rj/remove-unused-mktemp (2017-02-28) 2 commits
  (merged to 'next' on 2017-03-03 at 4512f0c5ab)
 + wrapper.c: remove unused gitmkstemps() function
 + wrapper.c: remove unused git_mkstemp() function

 Code cleanup.

 Will merge to 'master'.


* sb/submodule-init-url-selection (2017-02-28) 1 commit
  (merged to 'next' on 2017-03-03 at 847d1f9a91)
 + submodule init: warn about falling back to a local path

 Give a warning when "git submodule init" decides that the submodule
 in the working tree is its upstream, as it is not a very common
 setup.

 Will merge to 'master'.


* jc/diff-populate-filespec-size-only-fix (2017-03-02) 1 commit
 - diff: do not short-cut CHECK_SIZE_ONLY check in diff_populate_filespec()

 "git diff --quiet" relies on the size field in diff_filespec to be
 correctly populated, but diff_populate_filespec() helper function
 made an incorrect short-cut when asked only to populate the size
 field for paths that need to go through convert_to_git() (e.g. CRLF
 conversion).

 Will merge to 'next'.


* nd/conditional-config-include (2017-03-03) 5 commits
 - SQUASH??? cond config include test
 - SQUASH???
 - config: add conditional include
 - config.txt: reflow the second include.path paragraph
 - config.txt: clarify multiple key values in include.path

 The configuration file learned a new "includeIf.<condition>.path"
 that includes the contents of the given path only when the
 condition holds.  This allows you to say "include this work-related
 bit only in the repositories under my ~/work/ directory".

 Will merge to 'next' after squashing niggle-fixes in.


* rs/log-email-subject (2017-03-01) 2 commits
  (merged to 'next' on 2017-03-03 at a2ecc84866)
 + pretty: use fmt_output_email_subject()
 + log-tree: factor out fmt_output_email_subject()

 Code clean-up.

 Will merge to 'master'.


* cc/split-index-config (2017-03-01) 22 commits
 - Documentation/git-update-index: explain splitIndex.*
 - Documentation/config: add splitIndex.sharedIndexExpire
 - read-cache: use freshen_shared_index() in read_index_from()
 - read-cache: refactor read_index_from()
 - t1700: test shared index file expiration
 - read-cache: unlink old sharedindex files
 - config: add git_config_get_expiry() from gc.c
 - read-cache: touch shared index files when used
 - sha1_file: make check_and_freshen_file() non static
 - Documentation/config: add splitIndex.maxPercentChange
 - t1700: add tests for splitIndex.maxPercentChange
 - read-cache: regenerate shared index if necessary
 - config: add git_config_get_max_percent_split_change()
 - Documentation/git-update-index: talk about core.splitIndex config var
 - Documentation/config: add information for core.splitIndex
 - t1700: add tests for core.splitIndex
 - update-index: warn in case of split-index incoherency
 - read-cache: add and then use tweak_split_index()
 - split-index: add {add,remove}_split_index() functions
 - config: add git_config_get_split_index()
 - t1700: change here document style
 - config: mark an error message up for translation

 The experimental "split index" feature has gained a few
 configuration variables to make it easier to use.

 I think this is almost ready for 'next'.


* dp/filter-branch-prune-empty (2017-03-03) 4 commits
 - p7000: add test for filter-branch with --prune-empty
 - filter-branch: fix --prune-empty on parentless commits
 - t7003: ensure --prune-empty removes entire branch when applicable
 - t7003: ensure --prune-empty can prune root commit

 "git filter-branch --prune-empty" drops a single-parent commit that
 becomes a no-op, but did not drop a root commit whose tree is empty.

 Will merge to 'next'.


* jc/config-case-cmdline-take-2 (2017-02-23) 2 commits
  (merged to 'next' on 2017-03-01 at 2e9920eeeb)
 + config: use git_config_parse_key() in git_config_parse_parameter()
 + config: move a few helper functions up

 The code to parse "git -c VAR=VAL cmd" and set configuration
 variable for the duration of cmd had two small bugs, which have
 been fixed.

 Will merge to 'master'.
 This supersedes jc/config-case-cmdline topic that has been discarded.


* ab/cond-skip-tests (2017-03-01) 3 commits
 - gitweb tests: skip tests when we don't have Time::HiRes
 - gitweb tests: change confusing "skip_all" phrasing
 - cvs tests: skip tests that call "cvs commit" when running as root

 A few tests were run conditionally under (rare) conditions where
 they cannot be run (like running cvs tests under 'root' account).

 Will merge to 'next'.


* jk/interop-test (2017-02-27) 2 commits
 - t/interop: add test of old clients against modern git-daemon
 - t: add an interoperability test harness

 Picking two versions of Git and running tests to make sure the
 older one and the newer one interoperate happily has now become
 possible.

 Needs review.


* jk/parse-config-key-cleanup (2017-02-24) 3 commits
  (merged to 'next' on 2017-03-01 at e531d8d3a9)
 + parse_hide_refs_config: tell parse_config_key we don't want a subsection
 + parse_config_key: allow matching single-level config
 + parse_config_key: use skip_prefix instead of starts_with
 (this branch uses sb/parse-hide-refs-config-cleanup.)

 The "parse_config_key()" API function has been cleaned up.

 Will merge to 'master'.


* jk/t6300-cleanup (2017-02-27) 1 commit
  (merged to 'next' on 2017-03-02 at 3087521bea)
 + t6300: avoid creating refs/heads/HEAD

 A test that creates a confusing branch whose name is HEAD has been
 corrected not to do so.

 Will merge to 'master'.


* rs/commit-parsing-optim (2017-02-27) 2 commits
  (merged to 'next' on 2017-03-02 at 22239f35df)
 + commit: don't check for space twice when looking for header
 + commit: be more precise when searching for headers

 The code that parses header fields in the commit object has been
 updated for (micro)performance and code hygiene.

 Will merge to 'master'.


* rs/sha1-file-plug-fallback-base-leak (2017-02-27) 1 commit
  (merged to 'next' on 2017-03-02 at 03344b1119)
 + sha1_file: release fallback base's memory in unpack_entry()

 A leak in a codepath to read from a packed object in (rare) cases
 has been plugged.

 Will merge to 'master'.


* rs/strbuf-add-real-path (2017-02-27) 2 commits
  (merged to 'next' on 2017-03-02 at 69191becd6)
 + strbuf: add strbuf_add_real_path()
 + cocci: use ALLOC_ARRAY

 An helper function to make it easier to append the result from
 real_path() to a strbuf has been added.

 Will merge to 'master'.


* sb/parse-hide-refs-config-cleanup (2017-02-24) 1 commit
  (merged to 'next' on 2017-03-01 at fd722ba039)
 + refs: parse_hide_refs_config to use parse_config_key
 (this branch is used by jk/parse-config-key-cleanup.)

 Code clean-up.

 Will merge to 'master'.


* sg/clone-refspec-from-command-line-config (2017-02-27) 1 commit
 - clone: respect configured fetch respecs during initial fetch

 Needs review.
 cf. <20170227211217.73gydlxb2qu2sp3m@sigill.intra.peff.net>


* sk/dash-is-previous (2017-03-01) 5 commits
 - revert.c: delegate handling of "-" shorthand to setup_revisions
 - sha1_name.c: teach get_sha1_1 "-" shorthand for "@{-1}"
 - revision.c: args starting with "-" might be a revision
 - revision.c: swap if/else blocks
 - revision.c: do not update argv with unknown option

 A dash "-" can be written to mean "the branch that was previously
 checked out" in more places.

 Needs review.
 cf. <1488007487-12965-1-git-send-email-kannan.siddharth12@gmail.com>


* jh/send-email-one-cc (2017-02-27) 1 commit
  (merged to 'next' on 2017-03-02 at 32c0e6ad88)
 + send-email: only allow one address per body tag

 "Cc:" on the trailer part does not have to conform to RFC strictly,
 unlike in the e-mail header.  "git send-email" has been updated to
 ignore anything after '>' when picking addresses, to allow non-address
 cruft like " # stable 4.4" after the address.

 Will merge to 'master'.


* jk/http-auth (2017-02-27) 2 commits
  (merged to 'next' on 2017-03-02 at 87f81b4395)
 + http: add an "auto" mode for http.emptyauth
 + http: restrict auth methods to what the server advertises

 Reduce authentication round-trip over HTTP when the server supports
 just a single authentication method.

 Will merge to 'master'.


* jk/ident-empty (2017-02-23) 4 commits
  (merged to 'next' on 2017-03-01 at ff80031ce6)
 + ident: do not ignore empty config name/email
 + ident: reject all-crud ident name
 + ident: handle NULL email when complaining of empty name
 + ident: mark error messages for translation

 user.email that consists of only cruft chars should consistently
 error out, but didn't.

 Will merge to 'master'.


* jt/upload-pack-error-report (2017-02-23) 1 commit
  (merged to 'next' on 2017-03-01 at aea583dbe5)
 + upload-pack: report "not our ref" to client

 "git upload-pack", which is a counter-part of "git fetch", did not
 report a request for a ref that was not advertised as invalid.
 This is generally not a problem (because "git fetch" will stop
 before making such a request), but is the right thing to do.

 Will merge to 'master'.


* ah/doc-ls-files-quotepath (2017-03-02) 1 commit
 - Documentation: improve description for core.quotePath

 Documentation for "git ls-files" did not refer to core.quotePath

 Will merge to 'next'.


* jh/memihash-opt (2017-02-17) 5 commits
 - name-hash: remember previous dir_entry during lazy_init_name_hash
 - name-hash: specify initial size for istate.dir_hash table
 - name-hash: precompute hash values during preload-index
 - hashmap: allow memihash computation to be continued
 - name-hash: eliminate duplicate memihash call

 Expecting an update for perf.
 cf. <MWHPR03MB29581B0EDDEDCA7D51EC396F8A280@MWHPR03MB2958.namprd03.prod.outlook.com>


* nd/prune-in-worktree (2017-02-19) 15 commits
 . rev-list: expose and document --single-worktree
 . revision.c: --reflog add HEAD reflog from all worktrees
 . files-backend: make reflog iterator go through per-worktree reflog
 . refs: add refs_for_each_reflog[_ent]()
 . revision.c: --all adds HEAD from all worktrees
 . refs: remove dead for_each_*_submodule()
 . revision.c: use refs_for_each*() instead of for_each_*_submodule()
 . refs: add a refs_for_each_in() and friends
 . refs: add refs_for_each_ref()
 . refs: add refs_head_ref()
 . refs: add refs_read_ref[_full]()
 . refs: move submodule slash stripping code to get_submodule_ref_store
 . revision.c: --indexed-objects add objects from all worktrees
 . revision.c: refactor add_index_objects_to_pending()
 . revision.h: new flag in struct rev_info wrt. worktree-related refs
 (this branch uses nd/worktree-kill-parse-ref; is tangled with nd/files-backend-git-dir.)

 "git gc" and friends when multiple worktrees are used off of a
 single repository did not consider the index and per-worktree refs
 of other worktrees as the root for reachability traversal, making
 objects that are in use only in other worktrees to be subject to
 garbage collection.


* mm/fetch-show-error-message-on-unadvertised-object (2017-03-02) 3 commits
 - fetch-pack: add specific error for fetching an unadvertised object
 - fetch_refs_via_pack: call report_unmatched_refs
 - fetch-pack: move code to report unmatched refs to a function

 "git fetch" that requests a commit by object name, when the other
 side does not allow such an request, failed without much
 explanation.

 Will merge to 'next'.


* nd/worktree-kill-parse-ref (2017-02-19) 22 commits
 . refs: kill set_worktree_head_symref()
 . refs: add refs_create_symref()
 . worktree.c: kill parse_ref() in favor of refs_resolve_ref_unsafe()
 . refs.c: add refs_resolve_ref_unsafe()
 . refs: introduce get_worktree_ref_store()
 . refs: rename get_ref_store() to get_submodule_ref_store() and make it public
 . files-backend: remove submodule_allowed from files_downcast()
 . refs: move submodule code out of files-backend.c
 . path.c: move some code out of strbuf_git_path_submodule()
 . refs.c: make get_main_ref_store() public and use it
 . refs.c: kill register_ref_store(), add register_submodule_ref_store()
 . refs.c: flatten get_ref_store() a bit
 . refs: rename lookup_ref_store() to lookup_submodule_ref_store()
 . refs.c: introduce get_main_ref_store()
 . files-backend: remove the use of git_path()
 . refs.c: share is_per_worktree_ref() to files-backend.c
 . files-backend: replace *git_path*() with files_path()
 . files-backend: add files_path()
 . files-backend: convert git_path() to strbuf_git_path()
 . refs-internal.c: make files_log_ref_write() static
 . Merge branch 'mh/ref-remove-empty-directory' into nd/files-backend-git-dir
 . Merge branch 'mh/submodule-hash' into nd/files-backend-git-dir
 (this branch is used by nd/prune-in-worktree; is tangled with nd/files-backend-git-dir.)

 (hopefully) a beginning of safer "git worktree" that is resistant
 to "gc".

 Waiting for nd/files-backend-git-dir to settle.


* nd/files-backend-git-dir (2017-02-22) 26 commits
 . t1406: new tests for submodule ref store
 . t1405: some basic tests on main ref store
 . t/helper: add test-ref-store to test ref-store functions
 . refs: delete pack_refs() in favor of refs_pack_refs()
 . files-backend: avoid ref api targetting main ref store
 . refs: new transaction related ref-store api
 . refs: add new ref-store api
 . refs: rename get_ref_store() to get_submodule_ref_store() and make it public
 . files-backend: replace submodule_allowed check in files_downcast()
 . refs: move submodule code out of files-backend.c
 . path.c: move some code out of strbuf_git_path_submodule()
 . refs.c: make get_main_ref_store() public and use it
 . refs.c: kill register_ref_store(), add register_submodule_ref_store()
 . refs.c: flatten get_ref_store() a bit
 . refs: rename lookup_ref_store() to lookup_submodule_ref_store()
 . refs.c: introduce get_main_ref_store()
 . files-backend: remove the use of git_path()
 . files-backend: add and use files_refname_path()
 . files-backend: add and use files_reflog_path()
 . files-backend: move "logs/" out of TMP_RENAMED_LOG
 . files-backend: convert git_path() to strbuf_git_path()
 . files-backend: add and use files_packed_refs_path()
 . files-backend: make files_log_ref_write() static
 . refs.h: add forward declaration for structs used in this file
 . Merge branch 'mh/ref-remove-empty-directory' into nd/files-backend-git-dir
 . Merge branch 'mh/submodule-hash' into nd/files-backend-git-dir
 (this branch is tangled with nd/prune-in-worktree and nd/worktree-kill-parse-ref.)

 The "submodule" specific field in the ref_store structure is
 replaced with a more generic "gitdir" that can later be used also
 when dealing with ref_store that represents the set of refs visible
 from the other worktrees.


* sb/checkout-recurse-submodules (2017-02-23) 15 commits
 - builtin/checkout: add --recurse-submodules switch
 - entry.c: update submodules when interesting
 - read-cache, remove_marked_cache_entries: wipe selected submodules.
 - unpack-trees: check if we can perform the operation for submodules
 - unpack-trees: pass old oid to verify_clean_submodule
 - update submodules: add submodule_move_head
 - update submodules: move up prepare_submodule_repo_env
 - submodules: introduce check to see whether to touch a submodule
 - update submodules: add a config option to determine if submodules are updated
 - update submodules: add submodule config parsing
 - connect_work_tree_and_git_dir: safely create leading directories
 - make is_submodule_populated gently
 - lib-submodule-update.sh: define tests for recursing into submodules
 - lib-submodule-update.sh: do not use ./. as submodule remote
 - lib-submodule-update.sh: reorder create_lib_submodule_repo

 "git checkout" is taught --recurse-submodules option.

 Reroll exists, but it appears it still needs minor work on top.
 cf. <20170302004759.27852-1-sbeller@google.com>


* tg/stash-push (2017-02-28) 6 commits
  (merged to 'next' on 2017-03-03 at b50fda0389)
 + stash: allow pathspecs in the no verb form
 + stash: use stash_push for no verb form
 + stash: teach 'push' (and 'create_stash') to honor pathspec
 + stash: refactor stash_create
 + stash: add test for the create command line arguments
 + stash: introduce push verb

 Allow "git stash" to take pathspec so that the local changes can be
 stashed away only partially.

 Will merge to 'master'.


* bc/object-id (2017-02-22) 19 commits
 - wt-status: convert to struct object_id
 - builtin/merge-base: convert to struct object_id
 - Convert object iteration callbacks to struct object_id
 - sha1_file: introduce an nth_packed_object_oid function
 - refs: simplify parsing of reflog entries
 - refs: convert each_reflog_ent_fn to struct object_id
 - reflog-walk: convert struct reflog_info to struct object_id
 - builtin/replace: convert to struct object_id
 - Convert remaining callers of resolve_refdup to object_id
 - builtin/merge: convert to struct object_id
 - builtin/clone: convert to struct object_id
 - builtin/branch: convert to struct object_id
 - builtin/grep: convert to struct object_id
 - builtin/fmt-merge-message: convert to struct object_id
 - builtin/fast-export: convert to struct object_id
 - builtin/describe: convert to struct object_id
 - builtin/diff-tree: convert to struct object_id
 - builtin/commit: convert to struct object_id
 - hex: introduce parse_oid_hex

 "uchar [40]" to "struct object_id" conversion continues.

 Now at v5.
 cf. <20170221234737.894681-1-sandals@crustytoothpaste.net>


* jh/mingw-openssl-sha1 (2017-02-09) 1 commit
 - mingw: use OpenSSL's SHA-1 routines

 Windows port wants to use OpenSSL's implementation of SHA-1
 routines, so let them.

 Will merge to 'next'.


* sg/completion-refs-speedup (2017-02-13) 13 commits
 - squash! completion: fill COMPREPLY directly when completing refs
 - completion: fill COMPREPLY directly when completing refs
 - completion: list only matching symbolic and pseudorefs when completing refs
 - completion: let 'for-each-ref' sort remote branches for 'checkout' DWIMery
 - completion: let 'for-each-ref' filter remote branches for 'checkout' DWIMery
 - completion: let 'for-each-ref' strip the remote name from remote branches
 - completion: let 'for-each-ref' and 'ls-remote' filter matching refs
 - completion: don't disambiguate short refs
 - completion: don't disambiguate tags and branches
 - completion: support excluding full refs
 - completion: support completing full refs after '--option=refs/<TAB>'
 - completion: wrap __git_refs() for better option parsing
 - completion: remove redundant __gitcomp_nl() options from _git_commit()

 The refs completion for large number of refs has been sped up,
 partly by giving up disambiguating ambiguous refs and partly by
 eliminating most of the shell processing between 'git for-each-ref'
 and 'ls-remote' and Bash's completion facility.

 What's the donness of this topic?


* jk/no-looking-at-dotgit-outside-repo-final (2016-10-26) 1 commit
  (merged to 'next' on 2017-02-27 at 7373a1b73d)
 + setup_git_env: avoid blind fall-back to ".git"

 This is the endgame of the topic to avoid blindly falling back to
 ".git" when the setup sequence said we are _not_ in Git repository.
 A corner case that happens to work right now may be broken by a
 call to die("BUG").

 Will cook in 'next'.


* jc/merge-drop-old-syntax (2015-04-29) 1 commit
  (merged to 'next' on 2017-02-27 at 2c0f5f73d8)
 + merge: drop 'git merge <message> HEAD <commit>' syntax

 Stop supporting "git merge <message> HEAD <commit>" syntax that has
 been deprecated since October 2007, and issues a deprecation
 warning message since v2.5.0.

 Will cook in 'next'.


* jc/bundle (2016-03-03) 6 commits
 - index-pack: --clone-bundle option
 - Merge branch 'jc/index-pack' into jc/bundle
 - bundle v3: the beginning
 - bundle: keep a copy of bundle file name in the in-core bundle header
 - bundle: plug resource leak
 - bundle doc: 'verify' is not about verifying the bundle

 The beginning of "split bundle", which could be one of the
 ingredients to allow "git clone" traffic off of the core server
 network to CDN.

--------------------------------------------------
[Discarded]

* jk/auto-namelen-in-interpret-branch-name (2017-02-27) 1 commit
 . interpret_branch_name(): handle auto-namelen for @{-1}

 A small bug in the code that parses @{...} has been fixed.

 This is now a part of jk/interpret-branch-name topic.

^ permalink raw reply	[relevance 2%]

* What's cooking in git.git (Mar 2017, #03; Wed, 8)
@ 2017-03-08 23:47  2% Junio C Hamano
  0 siblings, 0 replies; 200+ results
From: Junio C Hamano @ 2017-03-08 23:47 UTC (permalink / raw)
  To: git

Here are the topics that have been cooking.  Commits prefixed with
'-' are only in 'pu' (proposed updates) while commits prefixed with
'+' are in 'next'.  The ones marked with '.' do not appear in any of
the integration branches, but I am still holding onto them.

You can find the changes described here in the integration branches
of the repositories listed at

    http://git-blame.blogspot.com/p/git-public-repositories.html

--------------------------------------------------
[New Topics]

* ew/http-alternates-as-redirects-warning (2017-03-06) 2 commits
 - http: release strbuf on disabled alternates
 - http: inform about alternates-as-redirects behavior

 Recent versions of Git treats http alternates (used in dumb http
 transport) just like HTTP redirects and requires the client to
 enable following it, due to security concerns.  But we forgot to
 give a warning when we decide not to honor the alternates.

 Will merge to 'next'.


* jk/ewah-use-right-type-in-sizeof (2017-03-06) 1 commit
 - ewah: fix eword_t/uint64_t confusion

 Code clean-up.

 Will merge to 'next'.


* jk/push-deadlock-regression-fix (2017-03-07) 6 commits
 - send-pack: report signal death of pack-objects
 - send-pack: read "unpack" status even on pack-objects failure
 - send-pack: improve unpack-status error messages
 - send-pack: use skip_prefix for parsing unpack status
 - send-pack: extract parsing of "unpack" response
 - receive-pack: fix deadlock when we cannot create tmpdir

 "git push" had a handful of codepaths that could lead to a deadlock
 when unexpected error happened, which has been fixed.

 Will merge to 'next'.


* vn/line-log-memcpy-size-fix (2017-03-06) 1 commit
 - line-log: use COPY_ARRAY to fix mis-sized memcpy

 The command-line parsing of "git log -L" copied internal data
 structures using incorrect size on ILP32 systems.

 Will merge to 'next'.


* js/realpath-pathdup-fix (2017-03-08) 2 commits
 - real_pathdup(): fix callsites that wanted it to die on error
 - t1501: demonstrate NULL pointer access with invalid GIT_WORK_TREE

 Git v2.12 was shipped with an embarrassing breakage where various
 operations that verify paths given from the user stopped dying when
 seeing an issue, and instead later triggering segfault.

 Will merge to 'next' and then to 'master', eventually down to 'maint'.


* kn/ref-filter-branch-list (2017-03-08) 1 commit
 - branch: honor --abbrev/--no-abbrev in --list mode

 "git branch --list" takes the "--abbrev" and "--no-abbrev" options
 to control the output of the object name in its "-v"(erbose)
 output, but a recent update started ignoring them; this fixes it
 before the breakage reaches to any released version.

 Will merge to 'next'.


* sb/rev-parse-show-superproject-root (2017-03-08) 1 commit
 - rev-parse: add --show-superproject-working-tree

 From a working tree of a repository, a new option of "rev-parse"
 lets you ask if the repository is used as a submodule of another
 project, and where the root level of the working tree of that
 project (i.e. your superproject) is.

 Almost there, but documentation needs a bit more work.

--------------------------------------------------
[Stalled]

* nd/worktree-move (2017-01-27) 7 commits
 . fixup! worktree move: new command
 . worktree remove: new command
 . worktree move: refuse to move worktrees with submodules
 . worktree move: accept destination as directory
 . worktree move: new command
 . worktree.c: add update_worktree_location()
 . worktree.c: add validate_worktree()

 "git worktree" learned move and remove subcommands.

 Tentatively ejected as it seems to break 'pu' when merged.


* pb/bisect (2017-02-18) 28 commits
 - fixup! bisect--helper: `bisect_next_check` & bisect_voc shell function in C
 - bisect--helper: remove the dequote in bisect_start()
 - bisect--helper: retire `--bisect-auto-next` subcommand
 - bisect--helper: retire `--bisect-autostart` subcommand
 - bisect--helper: retire `--bisect-write` subcommand
 - bisect--helper: `bisect_replay` shell function in C
 - bisect--helper: `bisect_log` shell function in C
 - bisect--helper: retire `--write-terms` subcommand
 - bisect--helper: retire `--check-expected-revs` subcommand
 - bisect--helper: `bisect_state` & `bisect_head` shell function in C
 - bisect--helper: `bisect_autostart` shell function in C
 - bisect--helper: retire `--next-all` subcommand
 - bisect--helper: retire `--bisect-clean-state` subcommand
 - bisect--helper: `bisect_next` and `bisect_auto_next` shell function in C
 - t6030: no cleanup with bad merge base
 - bisect--helper: `bisect_start` shell function partially in C
 - bisect--helper: `get_terms` & `bisect_terms` shell function in C
 - bisect--helper: `bisect_next_check` & bisect_voc shell function in C
 - bisect--helper: `check_and_set_terms` shell function in C
 - bisect--helper: `bisect_write` shell function in C
 - bisect--helper: `is_expected_rev` & `check_expected_revs` shell function in C
 - bisect--helper: `bisect_reset` shell function in C
 - wrapper: move is_empty_file() and rename it as is_empty_or_missing_file()
 - t6030: explicitly test for bisection cleanup
 - bisect--helper: `bisect_clean_state` shell function in C
 - bisect--helper: `write_terms` shell function in C
 - bisect: rewrite `check_term_format` shell function in C
 - bisect--helper: use OPT_CMDMODE instead of OPT_BOOL

 Move more parts of "git bisect" to C.

 Expecting a reroll.
 cf. <CAFZEwPPXPPHi8KiEGS9ggzNHDCGhuqMgH9Z8-Pf9GLshg8+LPA@mail.gmail.com>
 cf. <CAFZEwPM9RSTGN54dzaw9gO9iZmsYjJ_d1SjUD4EzSDDbmh-XuA@mail.gmail.com>
 cf. <CAFZEwPNUXcNY9Qdz=_B7q2kQuaecPzJtTMGdv8YMUPEz2vnp8A@mail.gmail.com>


* sh/grep-tree-obj-tweak-output (2017-01-20) 2 commits
 - grep: use '/' delimiter for paths
 - grep: only add delimiter if there isn't one already

 "git grep", when fed a tree-ish as an input, shows each hit
 prefixed with "<tree-ish>:<path>:<lineno>:".  As <tree-ish> is
 almost always either a commit or a tag that points at a commit, the
 early part of the output "<tree-ish>:<path>" can be used as the
 name of the blob and given to "git show".  When <tree-ish> is a
 tree given in the extended SHA-1 syntax (e.g. "<commit>:", or
 "<commit>:<dir>"), however, this results in a string that does not
 name a blob (e.g. "<commit>::<path>" or "<commit>:<dir>:<path>").
 "git grep" has been taught to be a bit more intelligent about these
 cases and omit a colon (in the former case) or use slash (in the
 latter case) to produce "<commit>:<path>" and
 "<commit>:<dir>/<path>" that can be used as the name of a blob.

 Expecting a reroll?  Is this good enough with known limitations?


* jc/diff-b-m (2015-02-23) 5 commits
 . WIPWIP
 . WIP: diff-b-m
 - diffcore-rename: allow easier debugging
 - diffcore-rename.c: add locate_rename_src()
 - diffcore-break: allow debugging

 "git diff -B -M" produced incorrect patch when the postimage of a
 completely rewritten file is similar to the preimage of a removed
 file; such a resulting file must not be expressed as a rename from
 other place.

 The fix in this patch is broken, unfortunately.

 Will discard.

--------------------------------------------------
[Cooking]

* ls/filter-process-delayed (2017-03-06) 1 commit
 - convert: add "status=delayed" to filter process protocol

 cf. <xmqq60jmnmef.fsf@junio-linux.mtv.corp.google.com>


* ew/markdown-url-in-readme (2017-03-01) 1 commit
  (merged to 'next' on 2017-03-03 at 3d35e3a991)
 + README: create HTTP/HTTPS links from URLs in Markdown

 Doc update.

 Will merge to 'master'.


* jk/add-i-patch-do-prompt (2017-03-02) 1 commit
 - add--interactive: fix missing file prompt for patch mode with "-i"

 The patch subcommand of "git add -i" was meant to have paths
 selection prompt just like other subcommand, unlike "git add -p"
 directly jumps to hunk selection.  Recently, this was broken and
 "add -i" lost the paths selection dialog, but it now has been
 fixed.

 Will merge to 'next'.


* ax/line-log-range-merge-fix (2017-03-03) 1 commit
 - line-log.c: prevent crash during union of too many ranges

 The code to parse "git log -L..." command line was buggy when there
 are many ranges specified with -L; overrun of the allocated buffer
 has been fixed.

 Will merge to 'next'.


* js/early-config (2017-03-07) 10 commits
 - setup_git_directory_gently_1(): avoid die()ing
 - t1309: test read_early_config()
 - read_early_config(): really discover .git/
 - read_early_config(): avoid .git/config hack when unneeded
 - setup: make read_early_config() reusable
 - setup: introduce the discover_git_directory() function
 - setup_git_directory_1(): avoid changing global state
 - setup: prepare setup_discovered_git_directory() the root directory
 - setup_git_directory(): use is_dir_sep() helper
 - t7006: replace dubious test

 The start-up sequence of "git" needs to figure out some configured
 settings before it finds and set itself up in the location of the
 repository and was quite messy due to its "chicken-and-egg" nature.
 The code has been restructured.

 Will merge to 'next' after waiting for a few days.


* jt/perf-updates (2017-03-03) 3 commits
 - t/perf: add fallback for pre-bin-wrappers versions of git
 - t/perf: use $MODERN_GIT for all repo-copying steps
 - t/perf: export variable used in other blocks

 The t/perf performance test suite was not prepared to test not so
 old versions of Git, but now it covers versions of Git that are not
 so ancient.

 Will merge to 'next'.


* ss/remote-bzr-hg-placeholder-wo-python (2017-03-03) 1 commit
 - contrib: git-remote-{bzr,hg} placeholders don't need Python

 There is no need for Python only to give a few messages to the
 standard error stream, but we somehow did.

 Will merge to 'next'.


* jk/interpret-branch-name (2017-03-02) 9 commits
 - checkout: restrict @-expansions when finding branch
 - strbuf_check_ref_format(): expand only local branches
 - branch: restrict @-expansions when deleting
 - t3204: test git-branch @-expansion corner cases
 - interpret_branch_name: allow callers to restrict expansions
 - strbuf_branchname: add docstring
 - strbuf_branchname: drop return value
 - interpret_branch_name: move docstring to header file
 - interpret_branch_name(): handle auto-namelen for @{-1}

 "git branch @" created refs/heads/@ as a branch, and in general the
 code that handled @{-1} and @{upstream} was a bit too loose in
 disambiguating.

 Will merge to 'next'.


* jk/sha1dc (2017-03-01) 7 commits
 - Put sha1dc on a diet
 - sha1dc: avoid 'for' loop initial decl
 - sha1dc: resurrect LICENSE file
 - sha1dc: avoid c99 declaration-after-statement
 - Makefile: add USE_SHA1DC knob
 - sha1dc: adjust header includes for git
 - add collision-detecting sha1 implementation

 Borrow "detect attempt to create collisions" variant of SHA-1
 implementation by Marc Stevens (CWI) and Dan Shumow (Microsoft).

 Expecting a cleaned-up reroll after discussion settles.
 cf. <CA+55aFxTWqsTTiDKo4DBZT-8Z9t80bGMD3uijzKONa_bYEZABQ@mail.gmail.com>


* js/travis-32bit-linux (2017-03-06) 1 commit
 - Travis: also test on 32-bit Linux

 Add 32-bit Linux variant to the set of platforms to be tested with
 Travis CI.

 Will merge to 'next'.


* jt/http-base-url-update-upon-redirect (2017-02-28) 1 commit
  (merged to 'next' on 2017-03-03 at 5225bd3ef8)
 + http: attempt updating base URL only if no error

 When a redirected http transport gets an error during the
 redirected request, we ignored the error we got from the server,
 and ended up giving a not-so-useful error message.

 Will merge to 'master'.


* jt/mark-tree-uninteresting-for-uninteresting-commit (2017-02-28) 3 commits
 - upload-pack: compute blob reachability correctly
 - revision: exclude trees/blobs given commit
 - revision: unify {tree,blob}_objects in rev_info

 The revision/object traversal machinery did not mark all tree and
 blob objects that are contained in an uninteresting commit as
 uninteresting, because that is quite costly.  Instead, it only
 marked those that are contained in an uninteresting boundary commit
 as uninteresting.

 cf. <20170228215937.yd4juycjf7y3vish@sigill.intra.peff.net>


* ps/docs-diffcore (2017-02-28) 2 commits
  (merged to 'next' on 2017-03-03 at 9ca5691de2)
 + docs/diffcore: unquote "Complete Rewrites" in headers
 + docs/diffcore: fix grammar in diffcore-rename header

 Doc update.

 Will merge to 'master'.


* rj/remove-unused-mktemp (2017-02-28) 2 commits
  (merged to 'next' on 2017-03-03 at 4512f0c5ab)
 + wrapper.c: remove unused gitmkstemps() function
 + wrapper.c: remove unused git_mkstemp() function

 Code cleanup.

 Will merge to 'master'.


* sb/submodule-init-url-selection (2017-02-28) 1 commit
  (merged to 'next' on 2017-03-03 at 847d1f9a91)
 + submodule init: warn about falling back to a local path

 Give a warning when "git submodule init" decides that the submodule
 in the working tree is its upstream, as it is not a very common
 setup.

 Will merge to 'master'.


* jc/diff-populate-filespec-size-only-fix (2017-03-02) 1 commit
 - diff: do not short-cut CHECK_SIZE_ONLY check in diff_populate_filespec()

 "git diff --quiet" relies on the size field in diff_filespec to be
 correctly populated, but diff_populate_filespec() helper function
 made an incorrect short-cut when asked only to populate the size
 field for paths that need to go through convert_to_git() (e.g. CRLF
 conversion).

 Will merge to 'next'.


* nd/conditional-config-include (2017-03-03) 5 commits
 - SQUASH??? cond config include test
 - SQUASH???
 - config: add conditional include
 - config.txt: reflow the second include.path paragraph
 - config.txt: clarify multiple key values in include.path

 The configuration file learned a new "includeIf.<condition>.path"
 that includes the contents of the given path only when the
 condition holds.  This allows you to say "include this work-related
 bit only in the repositories under my ~/work/ directory".

 Will merge to 'next' after squashing niggle-fixes in.


* rs/log-email-subject (2017-03-01) 2 commits
  (merged to 'next' on 2017-03-03 at a2ecc84866)
 + pretty: use fmt_output_email_subject()
 + log-tree: factor out fmt_output_email_subject()

 Code clean-up.

 Will merge to 'master'.


* cc/split-index-config (2017-03-06) 22 commits
 - Documentation/git-update-index: explain splitIndex.*
 - Documentation/config: add splitIndex.sharedIndexExpire
 - read-cache: use freshen_shared_index() in read_index_from()
 - read-cache: refactor read_index_from()
 - t1700: test shared index file expiration
 - read-cache: unlink old sharedindex files
 - config: add git_config_get_expiry() from gc.c
 - read-cache: touch shared index files when used
 - sha1_file: make check_and_freshen_file() non static
 - Documentation/config: add splitIndex.maxPercentChange
 - t1700: add tests for splitIndex.maxPercentChange
 - read-cache: regenerate shared index if necessary
 - config: add git_config_get_max_percent_split_change()
 - Documentation/git-update-index: talk about core.splitIndex config var
 - Documentation/config: add information for core.splitIndex
 - t1700: add tests for core.splitIndex
 - update-index: warn in case of split-index incoherency
 - read-cache: add and then use tweak_split_index()
 - split-index: add {add,remove}_split_index() functions
 - config: add git_config_get_split_index()
 - t1700: change here document style
 - config: mark an error message up for translation

 The experimental "split index" feature has gained a few
 configuration variables to make it easier to use.

 I think this is almost ready for 'next'.


* dp/filter-branch-prune-empty (2017-03-03) 4 commits
 - p7000: add test for filter-branch with --prune-empty
 - filter-branch: fix --prune-empty on parentless commits
 - t7003: ensure --prune-empty removes entire branch when applicable
 - t7003: ensure --prune-empty can prune root commit

 "git filter-branch --prune-empty" drops a single-parent commit that
 becomes a no-op, but did not drop a root commit whose tree is empty.

 Will merge to 'next'.


* jc/config-case-cmdline-take-2 (2017-02-23) 2 commits
  (merged to 'next' on 2017-03-01 at 2e9920eeeb)
 + config: use git_config_parse_key() in git_config_parse_parameter()
 + config: move a few helper functions up

 The code to parse "git -c VAR=VAL cmd" and set configuration
 variable for the duration of cmd had two small bugs, which have
 been fixed.

 Will merge to 'master'.
 This supersedes jc/config-case-cmdline topic that has been discarded.


* ab/cond-skip-tests (2017-03-01) 3 commits
 - gitweb tests: skip tests when we don't have Time::HiRes
 - gitweb tests: change confusing "skip_all" phrasing
 - cvs tests: skip tests that call "cvs commit" when running as root

 A few tests were run conditionally under (rare) conditions where
 they cannot be run (like running cvs tests under 'root' account).

 Will merge to 'next'.


* jk/interop-test (2017-02-27) 2 commits
 - t/interop: add test of old clients against modern git-daemon
 - t: add an interoperability test harness

 Picking two versions of Git and running tests to make sure the
 older one and the newer one interoperate happily has now become
 possible.

 Needs review.


* jk/parse-config-key-cleanup (2017-02-24) 3 commits
  (merged to 'next' on 2017-03-01 at e531d8d3a9)
 + parse_hide_refs_config: tell parse_config_key we don't want a subsection
 + parse_config_key: allow matching single-level config
 + parse_config_key: use skip_prefix instead of starts_with
 (this branch uses sb/parse-hide-refs-config-cleanup.)

 The "parse_config_key()" API function has been cleaned up.

 Will merge to 'master'.


* jk/t6300-cleanup (2017-02-27) 1 commit
  (merged to 'next' on 2017-03-02 at 3087521bea)
 + t6300: avoid creating refs/heads/HEAD

 A test that creates a confusing branch whose name is HEAD has been
 corrected not to do so.

 Will merge to 'master'.


* rs/commit-parsing-optim (2017-02-27) 2 commits
  (merged to 'next' on 2017-03-02 at 22239f35df)
 + commit: don't check for space twice when looking for header
 + commit: be more precise when searching for headers

 The code that parses header fields in the commit object has been
 updated for (micro)performance and code hygiene.

 Will merge to 'master'.


* rs/sha1-file-plug-fallback-base-leak (2017-02-27) 1 commit
  (merged to 'next' on 2017-03-02 at 03344b1119)
 + sha1_file: release fallback base's memory in unpack_entry()

 A leak in a codepath to read from a packed object in (rare) cases
 has been plugged.

 Will merge to 'master'.


* rs/strbuf-add-real-path (2017-02-27) 2 commits
  (merged to 'next' on 2017-03-02 at 69191becd6)
 + strbuf: add strbuf_add_real_path()
 + cocci: use ALLOC_ARRAY

 An helper function to make it easier to append the result from
 real_path() to a strbuf has been added.

 Will merge to 'master'.


* sb/parse-hide-refs-config-cleanup (2017-02-24) 1 commit
  (merged to 'next' on 2017-03-01 at fd722ba039)
 + refs: parse_hide_refs_config to use parse_config_key
 (this branch is used by jk/parse-config-key-cleanup.)

 Code clean-up.

 Will merge to 'master'.


* sg/clone-refspec-from-command-line-config (2017-02-27) 1 commit
 - clone: respect configured fetch respecs during initial fetch

 Needs review.
 cf. <20170227211217.73gydlxb2qu2sp3m@sigill.intra.peff.net>


* sk/dash-is-previous (2017-03-01) 5 commits
 - revert.c: delegate handling of "-" shorthand to setup_revisions
 - sha1_name.c: teach get_sha1_1 "-" shorthand for "@{-1}"
 - revision.c: args starting with "-" might be a revision
 - revision.c: swap if/else blocks
 - revision.c: do not update argv with unknown option

 A dash "-" can be written to mean "the branch that was previously
 checked out" in more places.

 Needs review.
 cf. <1488007487-12965-1-git-send-email-kannan.siddharth12@gmail.com>


* jh/send-email-one-cc (2017-02-27) 1 commit
  (merged to 'next' on 2017-03-02 at 32c0e6ad88)
 + send-email: only allow one address per body tag

 "Cc:" on the trailer part does not have to conform to RFC strictly,
 unlike in the e-mail header.  "git send-email" has been updated to
 ignore anything after '>' when picking addresses, to allow non-address
 cruft like " # stable 4.4" after the address.

 Will merge to 'master'.


* jk/http-auth (2017-02-27) 2 commits
  (merged to 'next' on 2017-03-02 at 87f81b4395)
 + http: add an "auto" mode for http.emptyauth
 + http: restrict auth methods to what the server advertises

 Reduce authentication round-trip over HTTP when the server supports
 just a single authentication method.

 Will merge to 'master'.


* jk/ident-empty (2017-02-23) 4 commits
  (merged to 'next' on 2017-03-01 at ff80031ce6)
 + ident: do not ignore empty config name/email
 + ident: reject all-crud ident name
 + ident: handle NULL email when complaining of empty name
 + ident: mark error messages for translation

 user.email that consists of only cruft chars should consistently
 error out, but didn't.

 Will merge to 'master'.


* jt/upload-pack-error-report (2017-02-23) 1 commit
  (merged to 'next' on 2017-03-01 at aea583dbe5)
 + upload-pack: report "not our ref" to client

 "git upload-pack", which is a counter-part of "git fetch", did not
 report a request for a ref that was not advertised as invalid.
 This is generally not a problem (because "git fetch" will stop
 before making such a request), but is the right thing to do.

 Will merge to 'master'.


* ah/doc-ls-files-quotepath (2017-03-02) 1 commit
 - Documentation: improve description for core.quotePath

 Documentation for "git ls-files" did not refer to core.quotePath

 Will merge to 'next'.


* jh/memihash-opt (2017-02-17) 5 commits
 - name-hash: remember previous dir_entry during lazy_init_name_hash
 - name-hash: specify initial size for istate.dir_hash table
 - name-hash: precompute hash values during preload-index
 - hashmap: allow memihash computation to be continued
 - name-hash: eliminate duplicate memihash call

 Expecting an update for perf.
 cf. <MWHPR03MB29581B0EDDEDCA7D51EC396F8A280@MWHPR03MB2958.namprd03.prod.outlook.com>


* nd/prune-in-worktree (2017-02-19) 15 commits
 . rev-list: expose and document --single-worktree
 . revision.c: --reflog add HEAD reflog from all worktrees
 . files-backend: make reflog iterator go through per-worktree reflog
 . refs: add refs_for_each_reflog[_ent]()
 . revision.c: --all adds HEAD from all worktrees
 . refs: remove dead for_each_*_submodule()
 . revision.c: use refs_for_each*() instead of for_each_*_submodule()
 . refs: add a refs_for_each_in() and friends
 . refs: add refs_for_each_ref()
 . refs: add refs_head_ref()
 . refs: add refs_read_ref[_full]()
 . refs: move submodule slash stripping code to get_submodule_ref_store
 . revision.c: --indexed-objects add objects from all worktrees
 . revision.c: refactor add_index_objects_to_pending()
 . revision.h: new flag in struct rev_info wrt. worktree-related refs
 (this branch uses nd/worktree-kill-parse-ref; is tangled with nd/files-backend-git-dir.)

 "git gc" and friends when multiple worktrees are used off of a
 single repository did not consider the index and per-worktree refs
 of other worktrees as the root for reachability traversal, making
 objects that are in use only in other worktrees to be subject to
 garbage collection.


* mm/fetch-show-error-message-on-unadvertised-object (2017-03-02) 3 commits
 - fetch-pack: add specific error for fetching an unadvertised object
 - fetch_refs_via_pack: call report_unmatched_refs
 - fetch-pack: move code to report unmatched refs to a function

 "git fetch" that requests a commit by object name, when the other
 side does not allow such an request, failed without much
 explanation.

 Will merge to 'next'.


* nd/worktree-kill-parse-ref (2017-02-19) 22 commits
 . refs: kill set_worktree_head_symref()
 . refs: add refs_create_symref()
 . worktree.c: kill parse_ref() in favor of refs_resolve_ref_unsafe()
 . refs.c: add refs_resolve_ref_unsafe()
 . refs: introduce get_worktree_ref_store()
 . refs: rename get_ref_store() to get_submodule_ref_store() and make it public
 . files-backend: remove submodule_allowed from files_downcast()
 . refs: move submodule code out of files-backend.c
 . path.c: move some code out of strbuf_git_path_submodule()
 . refs.c: make get_main_ref_store() public and use it
 . refs.c: kill register_ref_store(), add register_submodule_ref_store()
 . refs.c: flatten get_ref_store() a bit
 . refs: rename lookup_ref_store() to lookup_submodule_ref_store()
 . refs.c: introduce get_main_ref_store()
 . files-backend: remove the use of git_path()
 . refs.c: share is_per_worktree_ref() to files-backend.c
 . files-backend: replace *git_path*() with files_path()
 . files-backend: add files_path()
 . files-backend: convert git_path() to strbuf_git_path()
 . refs-internal.c: make files_log_ref_write() static
 . Merge branch 'mh/ref-remove-empty-directory' into nd/files-backend-git-dir
 . Merge branch 'mh/submodule-hash' into nd/files-backend-git-dir
 (this branch is used by nd/prune-in-worktree; is tangled with nd/files-backend-git-dir.)

 (hopefully) a beginning of safer "git worktree" that is resistant
 to "gc".

 Waiting for nd/files-backend-git-dir to settle.


* nd/files-backend-git-dir (2017-02-22) 26 commits
 . t1406: new tests for submodule ref store
 . t1405: some basic tests on main ref store
 . t/helper: add test-ref-store to test ref-store functions
 . refs: delete pack_refs() in favor of refs_pack_refs()
 . files-backend: avoid ref api targetting main ref store
 . refs: new transaction related ref-store api
 . refs: add new ref-store api
 . refs: rename get_ref_store() to get_submodule_ref_store() and make it public
 . files-backend: replace submodule_allowed check in files_downcast()
 . refs: move submodule code out of files-backend.c
 . path.c: move some code out of strbuf_git_path_submodule()
 . refs.c: make get_main_ref_store() public and use it
 . refs.c: kill register_ref_store(), add register_submodule_ref_store()
 . refs.c: flatten get_ref_store() a bit
 . refs: rename lookup_ref_store() to lookup_submodule_ref_store()
 . refs.c: introduce get_main_ref_store()
 . files-backend: remove the use of git_path()
 . files-backend: add and use files_refname_path()
 . files-backend: add and use files_reflog_path()
 . files-backend: move "logs/" out of TMP_RENAMED_LOG
 . files-backend: convert git_path() to strbuf_git_path()
 . files-backend: add and use files_packed_refs_path()
 . files-backend: make files_log_ref_write() static
 . refs.h: add forward declaration for structs used in this file
 . Merge branch 'mh/ref-remove-empty-directory' into nd/files-backend-git-dir
 . Merge branch 'mh/submodule-hash' into nd/files-backend-git-dir
 (this branch is tangled with nd/prune-in-worktree and nd/worktree-kill-parse-ref.)

 The "submodule" specific field in the ref_store structure is
 replaced with a more generic "gitdir" that can later be used also
 when dealing with ref_store that represents the set of refs visible
 from the other worktrees.


* sb/checkout-recurse-submodules (2017-03-07) 18 commits
 - builtin/read-tree: add --recurse-submodules switch
 - builtin/checkout: add --recurse-submodules switch
 - entry.c: update submodules when interesting
 - read-cache, remove_marked_cache_entries: wipe selected submodules.
 - unpack-trees: check if we can perform the operation for submodules
 - unpack-trees: pass old oid to verify_clean_submodule
 - update submodules: add submodule_move_head
 - update submodules: move up prepare_submodule_repo_env
 - submodules: introduce check to see whether to touch a submodule
 - update submodules: add a config option to determine if submodules are updated
 - update submodules: add submodule config parsing
 - connect_work_tree_and_git_dir: safely create leading directories
 - make is_submodule_populated gently
 - lib-submodule-update.sh: define tests for recursing into submodules
 - lib-submodule-update.sh: replace sha1 by hash
 - lib-submodule-update: teach test_submodule_content the -C <dir> flag
 - lib-submodule-update.sh: do not use ./. as submodule remote
 - lib-submodule-update.sh: reorder create_lib_submodule_repo

 "git checkout" is taught --recurse-submodules option.


* tg/stash-push (2017-02-28) 6 commits
  (merged to 'next' on 2017-03-03 at b50fda0389)
 + stash: allow pathspecs in the no verb form
 + stash: use stash_push for no verb form
 + stash: teach 'push' (and 'create_stash') to honor pathspec
 + stash: refactor stash_create
 + stash: add test for the create command line arguments
 + stash: introduce push verb

 Allow "git stash" to take pathspec so that the local changes can be
 stashed away only partially.

 Will merge to 'master'.


* bc/object-id (2017-02-22) 19 commits
 - wt-status: convert to struct object_id
 - builtin/merge-base: convert to struct object_id
 - Convert object iteration callbacks to struct object_id
 - sha1_file: introduce an nth_packed_object_oid function
 - refs: simplify parsing of reflog entries
 - refs: convert each_reflog_ent_fn to struct object_id
 - reflog-walk: convert struct reflog_info to struct object_id
 - builtin/replace: convert to struct object_id
 - Convert remaining callers of resolve_refdup to object_id
 - builtin/merge: convert to struct object_id
 - builtin/clone: convert to struct object_id
 - builtin/branch: convert to struct object_id
 - builtin/grep: convert to struct object_id
 - builtin/fmt-merge-message: convert to struct object_id
 - builtin/fast-export: convert to struct object_id
 - builtin/describe: convert to struct object_id
 - builtin/diff-tree: convert to struct object_id
 - builtin/commit: convert to struct object_id
 - hex: introduce parse_oid_hex

 "uchar [40]" to "struct object_id" conversion continues.

 Now at v5.
 cf. <20170221234737.894681-1-sandals@crustytoothpaste.net>


* jh/mingw-openssl-sha1 (2017-02-09) 1 commit
 - mingw: use OpenSSL's SHA-1 routines

 Windows port wants to use OpenSSL's implementation of SHA-1
 routines, so let them.

 Will merge to 'next'.


* sg/completion-refs-speedup (2017-02-13) 13 commits
 - squash! completion: fill COMPREPLY directly when completing refs
 - completion: fill COMPREPLY directly when completing refs
 - completion: list only matching symbolic and pseudorefs when completing refs
 - completion: let 'for-each-ref' sort remote branches for 'checkout' DWIMery
 - completion: let 'for-each-ref' filter remote branches for 'checkout' DWIMery
 - completion: let 'for-each-ref' strip the remote name from remote branches
 - completion: let 'for-each-ref' and 'ls-remote' filter matching refs
 - completion: don't disambiguate short refs
 - completion: don't disambiguate tags and branches
 - completion: support excluding full refs
 - completion: support completing full refs after '--option=refs/<TAB>'
 - completion: wrap __git_refs() for better option parsing
 - completion: remove redundant __gitcomp_nl() options from _git_commit()

 The refs completion for large number of refs has been sped up,
 partly by giving up disambiguating ambiguous refs and partly by
 eliminating most of the shell processing between 'git for-each-ref'
 and 'ls-remote' and Bash's completion facility.

 What's the donness of this topic?


* jk/no-looking-at-dotgit-outside-repo-final (2016-10-26) 1 commit
  (merged to 'next' on 2017-02-27 at 7373a1b73d)
 + setup_git_env: avoid blind fall-back to ".git"

 This is the endgame of the topic to avoid blindly falling back to
 ".git" when the setup sequence said we are _not_ in Git repository.
 A corner case that happens to work right now may be broken by a
 call to die("BUG").

 Will cook in 'next'.


* jc/merge-drop-old-syntax (2015-04-29) 1 commit
  (merged to 'next' on 2017-02-27 at 2c0f5f73d8)
 + merge: drop 'git merge <message> HEAD <commit>' syntax

 Stop supporting "git merge <message> HEAD <commit>" syntax that has
 been deprecated since October 2007, and issues a deprecation
 warning message since v2.5.0.

 Will cook in 'next'.


* jc/bundle (2016-03-03) 6 commits
 - index-pack: --clone-bundle option
 - Merge branch 'jc/index-pack' into jc/bundle
 - bundle v3: the beginning
 - bundle: keep a copy of bundle file name in the in-core bundle header
 - bundle: plug resource leak
 - bundle doc: 'verify' is not about verifying the bundle

 The beginning of "split bundle", which could be one of the
 ingredients to allow "git clone" traffic off of the core server
 network to CDN.

--------------------------------------------------
[Discarded]

* jk/auto-namelen-in-interpret-branch-name (2017-02-27) 1 commit
 . interpret_branch_name(): handle auto-namelen for @{-1}

 A small bug in the code that parses @{...} has been fixed.

 This is now a part of jk/interpret-branch-name topic.

^ permalink raw reply	[relevance 2%]

* What's cooking in git.git (Mar 2017, #04; Fri, 10)
@ 2017-03-10 23:03  2% Junio C Hamano
  0 siblings, 0 replies; 200+ results
From: Junio C Hamano @ 2017-03-10 23:03 UTC (permalink / raw)
  To: git

Here are the topics that have been cooking.  Commits prefixed with
'-' are only in 'pu' (proposed updates) while commits prefixed with
'+' are in 'next'.  The ones marked with '.' do not appear in any of
the integration branches, but I am still holding onto them.

You can find the changes described here in the integration branches
of the repositories listed at

    http://git-blame.blogspot.com/p/git-public-repositories.html

--------------------------------------------------
[Graduated to "master"]

* ew/markdown-url-in-readme (2017-03-01) 1 commit
  (merged to 'next' on 2017-03-03 at 3d35e3a991)
 + README: create HTTP/HTTPS links from URLs in Markdown

 Doc update.


* jc/config-case-cmdline-take-2 (2017-02-23) 2 commits
  (merged to 'next' on 2017-03-01 at 2e9920eeeb)
 + config: use git_config_parse_key() in git_config_parse_parameter()
 + config: move a few helper functions up

 The code to parse "git -c VAR=VAL cmd" and set configuration
 variable for the duration of cmd had two small bugs, which have
 been fixed.
 This supersedes jc/config-case-cmdline topic that has been discarded.


* jh/send-email-one-cc (2017-02-27) 1 commit
  (merged to 'next' on 2017-03-02 at 32c0e6ad88)
 + send-email: only allow one address per body tag

 "Cc:" on the trailer part does not have to conform to RFC strictly,
 unlike in the e-mail header.  "git send-email" has been updated to
 ignore anything after '>' when picking addresses, to allow non-address
 cruft like " # stable 4.4" after the address.


* jk/http-auth (2017-02-27) 2 commits
  (merged to 'next' on 2017-03-02 at 87f81b4395)
 + http: add an "auto" mode for http.emptyauth
 + http: restrict auth methods to what the server advertises

 Reduce authentication round-trip over HTTP when the server supports
 just a single authentication method.


* jk/ident-empty (2017-02-23) 4 commits
  (merged to 'next' on 2017-03-01 at ff80031ce6)
 + ident: do not ignore empty config name/email
 + ident: reject all-crud ident name
 + ident: handle NULL email when complaining of empty name
 + ident: mark error messages for translation

 user.email that consists of only cruft chars should consistently
 error out, but didn't.


* jk/parse-config-key-cleanup (2017-02-24) 3 commits
  (merged to 'next' on 2017-03-01 at e531d8d3a9)
 + parse_hide_refs_config: tell parse_config_key we don't want a subsection
 + parse_config_key: allow matching single-level config
 + parse_config_key: use skip_prefix instead of starts_with
 (this branch uses sb/parse-hide-refs-config-cleanup.)

 The "parse_config_key()" API function has been cleaned up.


* jk/t6300-cleanup (2017-02-27) 1 commit
  (merged to 'next' on 2017-03-02 at 3087521bea)
 + t6300: avoid creating refs/heads/HEAD

 A test that creates a confusing branch whose name is HEAD has been
 corrected not to do so.


* jt/http-base-url-update-upon-redirect (2017-02-28) 1 commit
  (merged to 'next' on 2017-03-03 at 5225bd3ef8)
 + http: attempt updating base URL only if no error

 When a redirected http transport gets an error during the
 redirected request, we ignored the error we got from the server,
 and ended up giving a not-so-useful error message.


* jt/upload-pack-error-report (2017-02-23) 1 commit
  (merged to 'next' on 2017-03-01 at aea583dbe5)
 + upload-pack: report "not our ref" to client

 "git upload-pack", which is a counter-part of "git fetch", did not
 report a request for a ref that was not advertised as invalid.
 This is generally not a problem (because "git fetch" will stop
 before making such a request), but is the right thing to do.


* ps/docs-diffcore (2017-02-28) 2 commits
  (merged to 'next' on 2017-03-03 at 9ca5691de2)
 + docs/diffcore: unquote "Complete Rewrites" in headers
 + docs/diffcore: fix grammar in diffcore-rename header

 Doc update.


* rj/remove-unused-mktemp (2017-02-28) 2 commits
  (merged to 'next' on 2017-03-03 at 4512f0c5ab)
 + wrapper.c: remove unused gitmkstemps() function
 + wrapper.c: remove unused git_mkstemp() function

 Code cleanup.


* rs/commit-parsing-optim (2017-02-27) 2 commits
  (merged to 'next' on 2017-03-02 at 22239f35df)
 + commit: don't check for space twice when looking for header
 + commit: be more precise when searching for headers

 The code that parses header fields in the commit object has been
 updated for (micro)performance and code hygiene.


* rs/log-email-subject (2017-03-01) 2 commits
  (merged to 'next' on 2017-03-03 at a2ecc84866)
 + pretty: use fmt_output_email_subject()
 + log-tree: factor out fmt_output_email_subject()

 Code clean-up.


* rs/sha1-file-plug-fallback-base-leak (2017-02-27) 1 commit
  (merged to 'next' on 2017-03-02 at 03344b1119)
 + sha1_file: release fallback base's memory in unpack_entry()

 A leak in a codepath to read from a packed object in (rare) cases
 has been plugged.


* rs/strbuf-add-real-path (2017-02-27) 2 commits
  (merged to 'next' on 2017-03-02 at 69191becd6)
 + strbuf: add strbuf_add_real_path()
 + cocci: use ALLOC_ARRAY

 An helper function to make it easier to append the result from
 real_path() to a strbuf has been added.


* sb/parse-hide-refs-config-cleanup (2017-02-24) 1 commit
  (merged to 'next' on 2017-03-01 at fd722ba039)
 + refs: parse_hide_refs_config to use parse_config_key
 (this branch is used by jk/parse-config-key-cleanup.)

 Code clean-up.


* sb/submodule-init-url-selection (2017-02-28) 1 commit
  (merged to 'next' on 2017-03-03 at 847d1f9a91)
 + submodule init: warn about falling back to a local path

 When "git submodule init" decides that the submodule in the working
 tree is its upstream, it now gives a warning as it is not a very
 common setup.


* tg/stash-push (2017-02-28) 6 commits
  (merged to 'next' on 2017-03-03 at b50fda0389)
 + stash: allow pathspecs in the no verb form
 + stash: use stash_push for no verb form
 + stash: teach 'push' (and 'create_stash') to honor pathspec
 + stash: refactor stash_create
 + stash: add test for the create command line arguments
 + stash: introduce push verb

 "git stash save" takes a pathspec so that the local changes can be
 stashed away only partially.

--------------------------------------------------
[New Topics]

* jk/ref-filter-flags-cleanup (2017-03-10) 4 commits
 - ref-filter: use separate cache for contains_tag_algo
 - ref-filter: die on parse_commit errors
 - ref-filter: use contains_result enum consistently
 - ref-filter: move ref_cbdata definition into ref-filter.c

 "git tag --contains" used to (ab)use the object bits to keep track
 of the state of object reachability without clearing them after
 use; this has been cleaned up and made to use the newer commit-slab
 facility.

--------------------------------------------------
[Stalled]

* nd/prune-in-worktree (2017-02-19) 15 commits
 . rev-list: expose and document --single-worktree
 . revision.c: --reflog add HEAD reflog from all worktrees
 . files-backend: make reflog iterator go through per-worktree reflog
 . refs: add refs_for_each_reflog[_ent]()
 . revision.c: --all adds HEAD from all worktrees
 . refs: remove dead for_each_*_submodule()
 . revision.c: use refs_for_each*() instead of for_each_*_submodule()
 . refs: add a refs_for_each_in() and friends
 . refs: add refs_for_each_ref()
 . refs: add refs_head_ref()
 . refs: add refs_read_ref[_full]()
 . refs: move submodule slash stripping code to get_submodule_ref_store
 . revision.c: --indexed-objects add objects from all worktrees
 . revision.c: refactor add_index_objects_to_pending()
 . revision.h: new flag in struct rev_info wrt. worktree-related refs
 (this branch uses nd/worktree-kill-parse-ref; is tangled with nd/files-backend-git-dir.)

 "git gc" and friends when multiple worktrees are used off of a
 single repository did not consider the index and per-worktree refs
 of other worktrees as the root for reachability traversal, making
 objects that are in use only in other worktrees to be subject to
 garbage collection.


* nd/worktree-kill-parse-ref (2017-02-19) 22 commits
 . refs: kill set_worktree_head_symref()
 . refs: add refs_create_symref()
 . worktree.c: kill parse_ref() in favor of refs_resolve_ref_unsafe()
 . refs.c: add refs_resolve_ref_unsafe()
 . refs: introduce get_worktree_ref_store()
 . refs: rename get_ref_store() to get_submodule_ref_store() and make it public
 . files-backend: remove submodule_allowed from files_downcast()
 . refs: move submodule code out of files-backend.c
 . path.c: move some code out of strbuf_git_path_submodule()
 . refs.c: make get_main_ref_store() public and use it
 . refs.c: kill register_ref_store(), add register_submodule_ref_store()
 . refs.c: flatten get_ref_store() a bit
 . refs: rename lookup_ref_store() to lookup_submodule_ref_store()
 . refs.c: introduce get_main_ref_store()
 . files-backend: remove the use of git_path()
 . refs.c: share is_per_worktree_ref() to files-backend.c
 . files-backend: replace *git_path*() with files_path()
 . files-backend: add files_path()
 . files-backend: convert git_path() to strbuf_git_path()
 . refs-internal.c: make files_log_ref_write() static
 . Merge branch 'mh/ref-remove-empty-directory' into nd/files-backend-git-dir
 . Merge branch 'mh/submodule-hash' into nd/files-backend-git-dir
 (this branch is used by nd/prune-in-worktree; is tangled with nd/files-backend-git-dir.)

 (hopefully) a beginning of safer "git worktree" that is resistant
 to "gc".

 Waiting for nd/files-backend-git-dir to settle.


* nd/files-backend-git-dir (2017-02-22) 26 commits
 . t1406: new tests for submodule ref store
 . t1405: some basic tests on main ref store
 . t/helper: add test-ref-store to test ref-store functions
 . refs: delete pack_refs() in favor of refs_pack_refs()
 . files-backend: avoid ref api targetting main ref store
 . refs: new transaction related ref-store api
 . refs: add new ref-store api
 . refs: rename get_ref_store() to get_submodule_ref_store() and make it public
 . files-backend: replace submodule_allowed check in files_downcast()
 . refs: move submodule code out of files-backend.c
 . path.c: move some code out of strbuf_git_path_submodule()
 . refs.c: make get_main_ref_store() public and use it
 . refs.c: kill register_ref_store(), add register_submodule_ref_store()
 . refs.c: flatten get_ref_store() a bit
 . refs: rename lookup_ref_store() to lookup_submodule_ref_store()
 . refs.c: introduce get_main_ref_store()
 . files-backend: remove the use of git_path()
 . files-backend: add and use files_refname_path()
 . files-backend: add and use files_reflog_path()
 . files-backend: move "logs/" out of TMP_RENAMED_LOG
 . files-backend: convert git_path() to strbuf_git_path()
 . files-backend: add and use files_packed_refs_path()
 . files-backend: make files_log_ref_write() static
 . refs.h: add forward declaration for structs used in this file
 . Merge branch 'mh/ref-remove-empty-directory' into nd/files-backend-git-dir
 . Merge branch 'mh/submodule-hash' into nd/files-backend-git-dir
 (this branch is tangled with nd/prune-in-worktree and nd/worktree-kill-parse-ref.)

 The "submodule" specific field in the ref_store structure is
 replaced with a more generic "gitdir" that can later be used also
 when dealing with ref_store that represents the set of refs visible
 from the other worktrees.


* nd/worktree-move (2017-01-27) 7 commits
 . fixup! worktree move: new command
 . worktree remove: new command
 . worktree move: refuse to move worktrees with submodules
 . worktree move: accept destination as directory
 . worktree move: new command
 . worktree.c: add update_worktree_location()
 . worktree.c: add validate_worktree()

 "git worktree" learned move and remove subcommands.

 Tentatively ejected as it seems to break 'pu' when merged.


* pb/bisect (2017-02-18) 28 commits
 - fixup! bisect--helper: `bisect_next_check` & bisect_voc shell function in C
 - bisect--helper: remove the dequote in bisect_start()
 - bisect--helper: retire `--bisect-auto-next` subcommand
 - bisect--helper: retire `--bisect-autostart` subcommand
 - bisect--helper: retire `--bisect-write` subcommand
 - bisect--helper: `bisect_replay` shell function in C
 - bisect--helper: `bisect_log` shell function in C
 - bisect--helper: retire `--write-terms` subcommand
 - bisect--helper: retire `--check-expected-revs` subcommand
 - bisect--helper: `bisect_state` & `bisect_head` shell function in C
 - bisect--helper: `bisect_autostart` shell function in C
 - bisect--helper: retire `--next-all` subcommand
 - bisect--helper: retire `--bisect-clean-state` subcommand
 - bisect--helper: `bisect_next` and `bisect_auto_next` shell function in C
 - t6030: no cleanup with bad merge base
 - bisect--helper: `bisect_start` shell function partially in C
 - bisect--helper: `get_terms` & `bisect_terms` shell function in C
 - bisect--helper: `bisect_next_check` & bisect_voc shell function in C
 - bisect--helper: `check_and_set_terms` shell function in C
 - bisect--helper: `bisect_write` shell function in C
 - bisect--helper: `is_expected_rev` & `check_expected_revs` shell function in C
 - bisect--helper: `bisect_reset` shell function in C
 - wrapper: move is_empty_file() and rename it as is_empty_or_missing_file()
 - t6030: explicitly test for bisection cleanup
 - bisect--helper: `bisect_clean_state` shell function in C
 - bisect--helper: `write_terms` shell function in C
 - bisect: rewrite `check_term_format` shell function in C
 - bisect--helper: use OPT_CMDMODE instead of OPT_BOOL

 Move more parts of "git bisect" to C.

 Expecting a reroll.
 cf. <CAFZEwPPXPPHi8KiEGS9ggzNHDCGhuqMgH9Z8-Pf9GLshg8+LPA@mail.gmail.com>
 cf. <CAFZEwPM9RSTGN54dzaw9gO9iZmsYjJ_d1SjUD4EzSDDbmh-XuA@mail.gmail.com>
 cf. <CAFZEwPNUXcNY9Qdz=_B7q2kQuaecPzJtTMGdv8YMUPEz2vnp8A@mail.gmail.com>


* sh/grep-tree-obj-tweak-output (2017-01-20) 2 commits
 - grep: use '/' delimiter for paths
 - grep: only add delimiter if there isn't one already

 "git grep", when fed a tree-ish as an input, shows each hit
 prefixed with "<tree-ish>:<path>:<lineno>:".  As <tree-ish> is
 almost always either a commit or a tag that points at a commit, the
 early part of the output "<tree-ish>:<path>" can be used as the
 name of the blob and given to "git show".  When <tree-ish> is a
 tree given in the extended SHA-1 syntax (e.g. "<commit>:", or
 "<commit>:<dir>"), however, this results in a string that does not
 name a blob (e.g. "<commit>::<path>" or "<commit>:<dir>:<path>").
 "git grep" has been taught to be a bit more intelligent about these
 cases and omit a colon (in the former case) or use slash (in the
 latter case) to produce "<commit>:<path>" and
 "<commit>:<dir>/<path>" that can be used as the name of a blob.

 Expecting a reroll?  Is this good enough with known limitations?


* jc/diff-b-m (2015-02-23) 5 commits
 . WIPWIP
 . WIP: diff-b-m
 - diffcore-rename: allow easier debugging
 - diffcore-rename.c: add locate_rename_src()
 - diffcore-break: allow debugging

 "git diff -B -M" produced incorrect patch when the postimage of a
 completely rewritten file is similar to the preimage of a removed
 file; such a resulting file must not be expressed as a rename from
 other place.

 The fix in this patch is broken, unfortunately.

 Will discard.

--------------------------------------------------
[Cooking]

* ew/http-alternates-as-redirects-warning (2017-03-06) 2 commits
  (merged to 'next' on 2017-03-10 at 23be072a07)
 + http: release strbuf on disabled alternates
 + http: inform about alternates-as-redirects behavior

 Recent versions of Git treats http alternates (used in dumb http
 transport) just like HTTP redirects and requires the client to
 enable following it, due to security concerns.  But we forgot to
 give a warning when we decide not to honor the alternates.

 Will merge to 'master'.


* jk/ewah-use-right-type-in-sizeof (2017-03-06) 1 commit
  (merged to 'next' on 2017-03-10 at ad66adacda)
 + ewah: fix eword_t/uint64_t confusion

 Code clean-up.

 Will merge to 'master'.


* jk/push-deadlock-regression-fix (2017-03-07) 6 commits
  (merged to 'next' on 2017-03-10 at ceb0b819bf)
 + send-pack: report signal death of pack-objects
 + send-pack: read "unpack" status even on pack-objects failure
 + send-pack: improve unpack-status error messages
 + send-pack: use skip_prefix for parsing unpack status
 + send-pack: extract parsing of "unpack" response
 + receive-pack: fix deadlock when we cannot create tmpdir

 "git push" had a handful of codepaths that could lead to a deadlock
 when unexpected error happened, which has been fixed.

 Will merge to 'master'.


* vn/line-log-memcpy-size-fix (2017-03-06) 1 commit
  (merged to 'next' on 2017-03-10 at 2e65ff89b7)
 + line-log: use COPY_ARRAY to fix mis-sized memcpy

 The command-line parsing of "git log -L" copied internal data
 structures using incorrect size on ILP32 systems.

 Will merge to 'master'.


* js/realpath-pathdup-fix (2017-03-08) 2 commits
  (merged to 'next' on 2017-03-10 at 5a84dbbd1d)
 + real_pathdup(): fix callsites that wanted it to die on error
 + t1501: demonstrate NULL pointer access with invalid GIT_WORK_TREE

 Git v2.12 was shipped with an embarrassing breakage where various
 operations that verify paths given from the user stopped dying when
 seeing an issue, and instead later triggering segfault.

 Will merge to 'master'.
 ... and then to down to 'maint'.


* kn/ref-filter-branch-list (2017-03-10) 1 commit
  (merged to 'next' on 2017-03-10 at 73b43443f1)
 + branch: honor --abbrev/--no-abbrev in --list mode

 "git branch --list" takes the "--abbrev" and "--no-abbrev" options
 to control the output of the object name in its "-v"(erbose)
 output, but a recent update started ignoring them; this fixes it
 before the breakage reaches to any released version.

 Will merge to 'master'.


* sb/rev-parse-show-superproject-root (2017-03-08) 1 commit
 - rev-parse: add --show-superproject-working-tree

 From a working tree of a repository, a new option of "rev-parse"
 lets you ask if the repository is used as a submodule of another
 project, and where the root level of the working tree of that
 project (i.e. your superproject) is.

 Almost there, but documentation needs a bit more work.


* ls/filter-process-delayed (2017-03-06) 1 commit
 - convert: add "status=delayed" to filter process protocol

 cf. <xmqq60jmnmef.fsf@junio-linux.mtv.corp.google.com>


* jk/add-i-patch-do-prompt (2017-03-02) 1 commit
  (merged to 'next' on 2017-03-10 at 891ec6f5ba)
 + add--interactive: fix missing file prompt for patch mode with "-i"

 The patch subcommand of "git add -i" was meant to have paths
 selection prompt just like other subcommand, unlike "git add -p"
 directly jumps to hunk selection.  Recently, this was broken and
 "add -i" lost the paths selection dialog, but it now has been
 fixed.

 Will merge to 'master'.


* ax/line-log-range-merge-fix (2017-03-03) 1 commit
  (merged to 'next' on 2017-03-10 at 201073f113)
 + line-log.c: prevent crash during union of too many ranges

 The code to parse "git log -L..." command line was buggy when there
 are many ranges specified with -L; overrun of the allocated buffer
 has been fixed.

 Will merge to 'master'.


* js/early-config (2017-03-10) 11 commits
 - t1309: document cases where we would want early config not to die()
 - setup_git_directory_gently_1(): avoid die()ing
 - t1309: test read_early_config()
 - read_early_config(): really discover .git/
 - read_early_config(): avoid .git/config hack when unneeded
 - setup: make read_early_config() reusable
 - setup: introduce the discover_git_directory() function
 - setup_git_directory_1(): avoid changing global state
 - setup: prepare setup_discovered_git_directory() the root directory
 - setup_git_directory(): use is_dir_sep() helper
 - t7006: replace dubious test

 The start-up sequence of "git" needs to figure out some configured
 settings before it finds and set itself up in the location of the
 repository and was quite messy due to its "chicken-and-egg" nature.
 The code has been restructured.

 Almost perfect.
 cf. <xmqqefy5yn4k.fsf@gitster.mtv.corp.google.com>
 cf. <xmqq4lz1ylgv.fsf@gitster.mtv.corp.google.com>


* jt/perf-updates (2017-03-03) 3 commits
  (merged to 'next' on 2017-03-10 at 0c0b124ed4)
 + t/perf: add fallback for pre-bin-wrappers versions of git
 + t/perf: use $MODERN_GIT for all repo-copying steps
 + t/perf: export variable used in other blocks

 The t/perf performance test suite was not prepared to test not so
 old versions of Git, but now it covers versions of Git that are not
 so ancient.

 Will merge to 'master'.


* ss/remote-bzr-hg-placeholder-wo-python (2017-03-03) 1 commit
  (merged to 'next' on 2017-03-10 at c8c4bb78a2)
 + contrib: git-remote-{bzr,hg} placeholders don't need Python

 There is no need for Python only to give a few messages to the
 standard error stream, but we somehow did.

 Will merge to 'master'.


* jk/interpret-branch-name (2017-03-02) 9 commits
  (merged to 'next' on 2017-03-10 at 95cc55f9a3)
 + checkout: restrict @-expansions when finding branch
 + strbuf_check_ref_format(): expand only local branches
 + branch: restrict @-expansions when deleting
 + t3204: test git-branch @-expansion corner cases
 + interpret_branch_name: allow callers to restrict expansions
 + strbuf_branchname: add docstring
 + strbuf_branchname: drop return value
 + interpret_branch_name: move docstring to header file
 + interpret_branch_name(): handle auto-namelen for @{-1}

 "git branch @" created refs/heads/@ as a branch, and in general the
 code that handled @{-1} and @{upstream} was a bit too loose in
 disambiguating.

 Will merge to 'master'.


* jk/sha1dc (2017-03-01) 7 commits
 - Put sha1dc on a diet
 - sha1dc: avoid 'for' loop initial decl
 - sha1dc: resurrect LICENSE file
 - sha1dc: avoid c99 declaration-after-statement
 - Makefile: add USE_SHA1DC knob
 - sha1dc: adjust header includes for git
 - add collision-detecting sha1 implementation

 Borrow "detect attempt to create collisions" variant of SHA-1
 implementation by Marc Stevens (CWI) and Dan Shumow (Microsoft).

 Expecting a cleaned-up reroll after discussion settles.
 cf. <CA+55aFxTWqsTTiDKo4DBZT-8Z9t80bGMD3uijzKONa_bYEZABQ@mail.gmail.com>


* js/travis-32bit-linux (2017-03-06) 1 commit
  (merged to 'next' on 2017-03-10 at 4cb69d0f77)
 + Travis: also test on 32-bit Linux

 Add 32-bit Linux variant to the set of platforms to be tested with
 Travis CI.

 Will merge to 'master'.


* jt/mark-tree-uninteresting-for-uninteresting-commit (2017-02-28) 3 commits
 - upload-pack: compute blob reachability correctly
 - revision: exclude trees/blobs given commit
 - revision: unify {tree,blob}_objects in rev_info

 The revision/object traversal machinery did not mark all tree and
 blob objects that are contained in an uninteresting commit as
 uninteresting, because that is quite costly.  Instead, it only
 marked those that are contained in an uninteresting boundary commit
 as uninteresting.

 cf. <20170228215937.yd4juycjf7y3vish@sigill.intra.peff.net>


* jc/diff-populate-filespec-size-only-fix (2017-03-02) 1 commit
  (merged to 'next' on 2017-03-10 at 9b2d1ca50f)
 + diff: do not short-cut CHECK_SIZE_ONLY check in diff_populate_filespec()

 "git diff --quiet" relies on the size field in diff_filespec to be
 correctly populated, but diff_populate_filespec() helper function
 made an incorrect short-cut when asked only to populate the size
 field for paths that need to go through convert_to_git() (e.g. CRLF
 conversion).

 Will merge to 'master'.


* nd/conditional-config-include (2017-03-03) 5 commits
 - SQUASH??? cond config include test
 - SQUASH???
 - config: add conditional include
 - config.txt: reflow the second include.path paragraph
 - config.txt: clarify multiple key values in include.path

 The configuration file learned a new "includeIf.<condition>.path"
 that includes the contents of the given path only when the
 condition holds.  This allows you to say "include this work-related
 bit only in the repositories under my ~/work/ directory".

 Will merge to 'next' after squashing niggle-fixes in.


* cc/split-index-config (2017-03-06) 22 commits
 - Documentation/git-update-index: explain splitIndex.*
 - Documentation/config: add splitIndex.sharedIndexExpire
 - read-cache: use freshen_shared_index() in read_index_from()
 - read-cache: refactor read_index_from()
 - t1700: test shared index file expiration
 - read-cache: unlink old sharedindex files
 - config: add git_config_get_expiry() from gc.c
 - read-cache: touch shared index files when used
 - sha1_file: make check_and_freshen_file() non static
 - Documentation/config: add splitIndex.maxPercentChange
 - t1700: add tests for splitIndex.maxPercentChange
 - read-cache: regenerate shared index if necessary
 - config: add git_config_get_max_percent_split_change()
 - Documentation/git-update-index: talk about core.splitIndex config var
 - Documentation/config: add information for core.splitIndex
 - t1700: add tests for core.splitIndex
 - update-index: warn in case of split-index incoherency
 - read-cache: add and then use tweak_split_index()
 - split-index: add {add,remove}_split_index() functions
 - config: add git_config_get_split_index()
 - t1700: change here document style
 - config: mark an error message up for translation

 The experimental "split index" feature has gained a few
 configuration variables to make it easier to use.

 Will merge to 'next'.


* dp/filter-branch-prune-empty (2017-03-03) 4 commits
  (merged to 'next' on 2017-03-10 at 9317e24cd3)
 + p7000: add test for filter-branch with --prune-empty
 + filter-branch: fix --prune-empty on parentless commits
 + t7003: ensure --prune-empty removes entire branch when applicable
 + t7003: ensure --prune-empty can prune root commit

 "git filter-branch --prune-empty" drops a single-parent commit that
 becomes a no-op, but did not drop a root commit whose tree is empty.

 Will merge to 'master'.


* ab/cond-skip-tests (2017-03-01) 3 commits
  (merged to 'next' on 2017-03-10 at 38124fb5ce)
 + gitweb tests: skip tests when we don't have Time::HiRes
 + gitweb tests: change confusing "skip_all" phrasing
 + cvs tests: skip tests that call "cvs commit" when running as root

 A few tests were run conditionally under (rare) conditions where
 they cannot be run (like running cvs tests under 'root' account).

 Will merge to 'master'.


* jk/interop-test (2017-03-10) 2 commits
 - t/interop: add test of old clients against modern git-daemon
 - t: add an interoperability test harness

 Picking two versions of Git and running tests to make sure the
 older one and the newer one interoperate happily has now become
 possible.

 Will merge to 'next'.


* sg/clone-refspec-from-command-line-config (2017-02-27) 1 commit
 - clone: respect configured fetch respecs during initial fetch

 Needs review.
 cf. <20170227211217.73gydlxb2qu2sp3m@sigill.intra.peff.net>


* sk/dash-is-previous (2017-03-01) 5 commits
 - revert.c: delegate handling of "-" shorthand to setup_revisions
 - sha1_name.c: teach get_sha1_1 "-" shorthand for "@{-1}"
 - revision.c: args starting with "-" might be a revision
 - revision.c: swap if/else blocks
 - revision.c: do not update argv with unknown option

 A dash "-" can be written to mean "the branch that was previously
 checked out" in more places.

 Needs review.
 cf. <1488007487-12965-1-git-send-email-kannan.siddharth12@gmail.com>


* ah/doc-ls-files-quotepath (2017-03-02) 1 commit
  (merged to 'next' on 2017-03-10 at 5dfa78423a)
 + Documentation: improve description for core.quotePath

 Documentation for "git ls-files" did not refer to core.quotePath

 Will merge to 'master'.


* jh/memihash-opt (2017-02-17) 5 commits
 - name-hash: remember previous dir_entry during lazy_init_name_hash
 - name-hash: specify initial size for istate.dir_hash table
 - name-hash: precompute hash values during preload-index
 - hashmap: allow memihash computation to be continued
 - name-hash: eliminate duplicate memihash call

 Expecting an update for perf.
 cf. <MWHPR03MB29581B0EDDEDCA7D51EC396F8A280@MWHPR03MB2958.namprd03.prod.outlook.com>


* mm/fetch-show-error-message-on-unadvertised-object (2017-03-02) 3 commits
  (merged to 'next' on 2017-03-10 at 69e2023804)
 + fetch-pack: add specific error for fetching an unadvertised object
 + fetch_refs_via_pack: call report_unmatched_refs
 + fetch-pack: move code to report unmatched refs to a function

 "git fetch" that requests a commit by object name, when the other
 side does not allow such an request, failed without much
 explanation.

 Will merge to 'master'.


* sb/checkout-recurse-submodules (2017-03-10) 19 commits
 - submodule--helper.c: remove duplicate code
 - builtin/read-tree: add --recurse-submodules switch
 - builtin/checkout: add --recurse-submodules switch
 - entry.c: update submodules when interesting
 - read-cache, remove_marked_cache_entries: wipe selected submodules.
 - unpack-trees: check if we can perform the operation for submodules
 - unpack-trees: pass old oid to verify_clean_submodule
 - update submodules: add submodule_move_head
 - update submodules: move up prepare_submodule_repo_env
 - submodules: introduce check to see whether to touch a submodule
 - update submodules: add a config option to determine if submodules are updated
 - update submodules: add submodule config parsing
 - connect_work_tree_and_git_dir: safely create leading directories
 - make is_submodule_populated gently
 - lib-submodule-update.sh: define tests for recursing into submodules
 - lib-submodule-update.sh: replace sha1 by hash
 - lib-submodule-update: teach test_submodule_content the -C <dir> flag
 - lib-submodule-update.sh: do not use ./. as submodule remote
 - lib-submodule-update.sh: reorder create_lib_submodule_repo

 "git checkout" is taught --recurse-submodules option.


* bc/object-id (2017-02-22) 19 commits
 - wt-status: convert to struct object_id
 - builtin/merge-base: convert to struct object_id
 - Convert object iteration callbacks to struct object_id
 - sha1_file: introduce an nth_packed_object_oid function
 - refs: simplify parsing of reflog entries
 - refs: convert each_reflog_ent_fn to struct object_id
 - reflog-walk: convert struct reflog_info to struct object_id
 - builtin/replace: convert to struct object_id
 - Convert remaining callers of resolve_refdup to object_id
 - builtin/merge: convert to struct object_id
 - builtin/clone: convert to struct object_id
 - builtin/branch: convert to struct object_id
 - builtin/grep: convert to struct object_id
 - builtin/fmt-merge-message: convert to struct object_id
 - builtin/fast-export: convert to struct object_id
 - builtin/describe: convert to struct object_id
 - builtin/diff-tree: convert to struct object_id
 - builtin/commit: convert to struct object_id
 - hex: introduce parse_oid_hex

 "uchar [40]" to "struct object_id" conversion continues.

 Now at v5.
 cf. <20170221234737.894681-1-sandals@crustytoothpaste.net>


* jh/mingw-openssl-sha1 (2017-02-09) 1 commit
  (merged to 'next' on 2017-03-10 at 8a1aa07def)
 + mingw: use OpenSSL's SHA-1 routines

 Windows port wants to use OpenSSL's implementation of SHA-1
 routines, so let them.

 Will merge to 'master'.


* sg/completion-refs-speedup (2017-02-13) 13 commits
 - squash! completion: fill COMPREPLY directly when completing refs
 - completion: fill COMPREPLY directly when completing refs
 - completion: list only matching symbolic and pseudorefs when completing refs
 - completion: let 'for-each-ref' sort remote branches for 'checkout' DWIMery
 - completion: let 'for-each-ref' filter remote branches for 'checkout' DWIMery
 - completion: let 'for-each-ref' strip the remote name from remote branches
 - completion: let 'for-each-ref' and 'ls-remote' filter matching refs
 - completion: don't disambiguate short refs
 - completion: don't disambiguate tags and branches
 - completion: support excluding full refs
 - completion: support completing full refs after '--option=refs/<TAB>'
 - completion: wrap __git_refs() for better option parsing
 - completion: remove redundant __gitcomp_nl() options from _git_commit()

 The refs completion for large number of refs has been sped up,
 partly by giving up disambiguating ambiguous refs and partly by
 eliminating most of the shell processing between 'git for-each-ref'
 and 'ls-remote' and Bash's completion facility.

 What's the donness of this topic?


* jk/no-looking-at-dotgit-outside-repo-final (2016-10-26) 1 commit
  (merged to 'next' on 2017-02-27 at 7373a1b73d)
 + setup_git_env: avoid blind fall-back to ".git"

 This is the endgame of the topic to avoid blindly falling back to
 ".git" when the setup sequence said we are _not_ in Git repository.
 A corner case that happens to work right now may be broken by a
 call to die("BUG").

 Will cook in 'next'.


* jc/merge-drop-old-syntax (2015-04-29) 1 commit
  (merged to 'next' on 2017-02-27 at 2c0f5f73d8)
 + merge: drop 'git merge <message> HEAD <commit>' syntax

 Stop supporting "git merge <message> HEAD <commit>" syntax that has
 been deprecated since October 2007, and issues a deprecation
 warning message since v2.5.0.

 Will cook in 'next'.


* jc/bundle (2016-03-03) 6 commits
 - index-pack: --clone-bundle option
 - Merge branch 'jc/index-pack' into jc/bundle
 - bundle v3: the beginning
 - bundle: keep a copy of bundle file name in the in-core bundle header
 - bundle: plug resource leak
 - bundle doc: 'verify' is not about verifying the bundle

 The beginning of "split bundle", which could be one of the
 ingredients to allow "git clone" traffic off of the core server
 network to CDN.

--------------------------------------------------
[Discarded]

* jk/auto-namelen-in-interpret-branch-name (2017-02-27) 1 commit
 . interpret_branch_name(): handle auto-namelen for @{-1}

 A small bug in the code that parses @{...} has been fixed.

 This is now a part of jk/interpret-branch-name topic.

^ permalink raw reply	[relevance 2%]

* What's cooking in git.git (Mar 2017, #05; Mon, 13)
@ 2017-03-13 22:43  2% Junio C Hamano
  0 siblings, 0 replies; 200+ results
From: Junio C Hamano @ 2017-03-13 22:43 UTC (permalink / raw)
  To: git

Here are the topics that have been cooking.  Commits prefixed with
'-' are only in 'pu' (proposed updates) while commits prefixed with
'+' are in 'next'.  The ones marked with '.' do not appear in any of
the integration branches, but I am still holding onto them.

A handful of topics are ready to be merged to 'next'.  Giving them a
final round of reviewing and testing is greatly appreciated:

    - bc/object-id
    - bw/attr-pathspec
    - js/early-config

You can find the changes described here in the integration branches
of the repositories listed at

    http://git-blame.blogspot.com/p/git-public-repositories.html

--------------------------------------------------
[Graduated to "master"]

* ah/doc-ls-files-quotepath (2017-03-02) 1 commit
  (merged to 'next' on 2017-03-10 at 5dfa78423a)
 + Documentation: improve description for core.quotePath

 Documentation for "git ls-files" did not refer to core.quotePath


* ax/line-log-range-merge-fix (2017-03-03) 1 commit
  (merged to 'next' on 2017-03-10 at 201073f113)
 + line-log.c: prevent crash during union of too many ranges

 The code to parse "git log -L..." command line was buggy when there
 are many ranges specified with -L; overrun of the allocated buffer
 has been fixed.


* jc/diff-populate-filespec-size-only-fix (2017-03-02) 1 commit
  (merged to 'next' on 2017-03-10 at 9b2d1ca50f)
 + diff: do not short-cut CHECK_SIZE_ONLY check in diff_populate_filespec()

 "git diff --quiet" relies on the size field in diff_filespec to be
 correctly populated, but diff_populate_filespec() helper function
 made an incorrect short-cut when asked only to populate the size
 field for paths that need to go through convert_to_git() (e.g. CRLF
 conversion).


* jh/mingw-openssl-sha1 (2017-02-09) 1 commit
  (merged to 'next' on 2017-03-10 at 8a1aa07def)
 + mingw: use OpenSSL's SHA-1 routines

 Windows port wants to use OpenSSL's implementation of SHA-1
 routines, so let them.


* jk/add-i-patch-do-prompt (2017-03-02) 1 commit
  (merged to 'next' on 2017-03-10 at 891ec6f5ba)
 + add--interactive: fix missing file prompt for patch mode with "-i"

 The patch subcommand of "git add -i" was meant to have paths
 selection prompt just like other subcommand, unlike "git add -p"
 directly jumps to hunk selection.  Recently, this was broken and
 "add -i" lost the paths selection dialog, but it now has been
 fixed.


* jk/ewah-use-right-type-in-sizeof (2017-03-06) 1 commit
  (merged to 'next' on 2017-03-10 at ad66adacda)
 + ewah: fix eword_t/uint64_t confusion

 Code clean-up.


* js/realpath-pathdup-fix (2017-03-08) 2 commits
  (merged to 'next' on 2017-03-10 at 5a84dbbd1d)
 + real_pathdup(): fix callsites that wanted it to die on error
 + t1501: demonstrate NULL pointer access with invalid GIT_WORK_TREE

 Git v2.12 was shipped with an embarrassing breakage where various
 operations that verify paths given from the user stopped dying when
 seeing an issue, and instead later triggering segfault.
 ... and then to down to 'maint'.


* ss/remote-bzr-hg-placeholder-wo-python (2017-03-03) 1 commit
  (merged to 'next' on 2017-03-10 at c8c4bb78a2)
 + contrib: git-remote-{bzr,hg} placeholders don't need Python

 There is no need for Python only to give a few messages to the
 standard error stream, but we somehow did.


* vn/line-log-memcpy-size-fix (2017-03-06) 1 commit
  (merged to 'next' on 2017-03-10 at 2e65ff89b7)
 + line-log: use COPY_ARRAY to fix mis-sized memcpy

 The command-line parsing of "git log -L" copied internal data
 structures using incorrect size on ILP32 systems.

--------------------------------------------------
[New Topics]

* ab/ref-filter-no-contains (2017-03-11) 1 commit
 - ref-filter: add --no-contains option to tag/branch/for-each-ref
 (this branch uses jk/ref-filter-flags-cleanup.)

 "git tag/branch/for-each-ref" family of commands long allowed to
 filter the refs by "--contains X" (show only the refs that are
 descendants of X), "--merged X" (show only the refs that are
 ancestors of X), "--no-merged X" (show only the refs that are not
 ancestors of X).  One curious omission, "--no-contains X" (show
 only the refs that are not descendants of X) has been added to
 them.

 Expecting a reroll.
 cf. <CACBZZX4v49zfyGVpcxGSKsxbMfVaUcGHtitpfaZMUtG82YzW-g@mail.gmail.com>
 The topic is almost there.


* bc/sha1-header-selection-with-cpp-macros (2017-03-11) 1 commit
 - Move SHA-1 implementation selection into a header file

 Our source code has used the SHA1_HEADER cpp macro after "#include"
 in the C code to switch among the SHA-1 implementations. Instead,
 list the exact header file names and switch among implementations
 using "#ifdef BLK_SHA1/#include "block-sha1/sha1.h"/.../#endif";
 this helps some IDE tools.

 Expecting a reroll.


* bw/attr-pathspec (2017-03-13) 2 commits
 - pathspec: allow escaped query values
 - pathspec: allow querying for attributes

 The pathspec mechanism learned to further limit the paths that
 match the pattern to those that have specified attributes attached
 via the gitattributes mechanism.

 Will merge to 'next'.


* jk/http-walker-buffer-underflow-fix (2017-03-13) 1 commit
 - http-walker: fix buffer underflow processing remote alternates

 "Dumb http" transport used to misparse a nonsense http-alternates
 response, which has been fixed.

 Will merge to 'next'.


* rs/blame-code-cleanup (2017-03-11) 1 commit
  (merged to 'next' on 2017-03-12 at 8fd4bf325a)
 + blame: move blame_entry duplication to add_blame_entry()

 Code clean-up.

 Will merge to 'master'.


* dl/credential-cache-socket-in-xdg-cache (2017-03-13) 1 commit
 - path.c: add xdg_cache_home

 The default location "~/.git-credential-cache/socket" for the
 socket used to communicate with the credential-cache daemon has
 been moved to "~/.cache/git/credential/socket".

 Waiting for a reroll.
 The patches do not yet match the above description without
 the second one that is not queued here.

--------------------------------------------------
[Stalled]

* nd/prune-in-worktree (2017-02-19) 15 commits
 . rev-list: expose and document --single-worktree
 . revision.c: --reflog add HEAD reflog from all worktrees
 . files-backend: make reflog iterator go through per-worktree reflog
 . refs: add refs_for_each_reflog[_ent]()
 . revision.c: --all adds HEAD from all worktrees
 . refs: remove dead for_each_*_submodule()
 . revision.c: use refs_for_each*() instead of for_each_*_submodule()
 . refs: add a refs_for_each_in() and friends
 . refs: add refs_for_each_ref()
 . refs: add refs_head_ref()
 . refs: add refs_read_ref[_full]()
 . refs: move submodule slash stripping code to get_submodule_ref_store
 . revision.c: --indexed-objects add objects from all worktrees
 . revision.c: refactor add_index_objects_to_pending()
 . revision.h: new flag in struct rev_info wrt. worktree-related refs
 (this branch uses nd/worktree-kill-parse-ref; is tangled with nd/files-backend-git-dir.)

 "git gc" and friends when multiple worktrees are used off of a
 single repository did not consider the index and per-worktree refs
 of other worktrees as the root for reachability traversal, making
 objects that are in use only in other worktrees to be subject to
 garbage collection.


* nd/worktree-kill-parse-ref (2017-02-19) 22 commits
 . refs: kill set_worktree_head_symref()
 . refs: add refs_create_symref()
 . worktree.c: kill parse_ref() in favor of refs_resolve_ref_unsafe()
 . refs.c: add refs_resolve_ref_unsafe()
 . refs: introduce get_worktree_ref_store()
 . refs: rename get_ref_store() to get_submodule_ref_store() and make it public
 . files-backend: remove submodule_allowed from files_downcast()
 . refs: move submodule code out of files-backend.c
 . path.c: move some code out of strbuf_git_path_submodule()
 . refs.c: make get_main_ref_store() public and use it
 . refs.c: kill register_ref_store(), add register_submodule_ref_store()
 . refs.c: flatten get_ref_store() a bit
 . refs: rename lookup_ref_store() to lookup_submodule_ref_store()
 . refs.c: introduce get_main_ref_store()
 . files-backend: remove the use of git_path()
 . refs.c: share is_per_worktree_ref() to files-backend.c
 . files-backend: replace *git_path*() with files_path()
 . files-backend: add files_path()
 . files-backend: convert git_path() to strbuf_git_path()
 . refs-internal.c: make files_log_ref_write() static
 . Merge branch 'mh/ref-remove-empty-directory' into nd/files-backend-git-dir
 . Merge branch 'mh/submodule-hash' into nd/files-backend-git-dir
 (this branch is used by nd/prune-in-worktree; is tangled with nd/files-backend-git-dir.)

 (hopefully) a beginning of safer "git worktree" that is resistant
 to "gc".

 Waiting for nd/files-backend-git-dir to settle.


* nd/files-backend-git-dir (2017-02-22) 26 commits
 . t1406: new tests for submodule ref store
 . t1405: some basic tests on main ref store
 . t/helper: add test-ref-store to test ref-store functions
 . refs: delete pack_refs() in favor of refs_pack_refs()
 . files-backend: avoid ref api targetting main ref store
 . refs: new transaction related ref-store api
 . refs: add new ref-store api
 . refs: rename get_ref_store() to get_submodule_ref_store() and make it public
 . files-backend: replace submodule_allowed check in files_downcast()
 . refs: move submodule code out of files-backend.c
 . path.c: move some code out of strbuf_git_path_submodule()
 . refs.c: make get_main_ref_store() public and use it
 . refs.c: kill register_ref_store(), add register_submodule_ref_store()
 . refs.c: flatten get_ref_store() a bit
 . refs: rename lookup_ref_store() to lookup_submodule_ref_store()
 . refs.c: introduce get_main_ref_store()
 . files-backend: remove the use of git_path()
 . files-backend: add and use files_refname_path()
 . files-backend: add and use files_reflog_path()
 . files-backend: move "logs/" out of TMP_RENAMED_LOG
 . files-backend: convert git_path() to strbuf_git_path()
 . files-backend: add and use files_packed_refs_path()
 . files-backend: make files_log_ref_write() static
 . refs.h: add forward declaration for structs used in this file
 . Merge branch 'mh/ref-remove-empty-directory' into nd/files-backend-git-dir
 . Merge branch 'mh/submodule-hash' into nd/files-backend-git-dir
 (this branch is tangled with nd/prune-in-worktree and nd/worktree-kill-parse-ref.)

 The "submodule" specific field in the ref_store structure is
 replaced with a more generic "gitdir" that can later be used also
 when dealing with ref_store that represents the set of refs visible
 from the other worktrees.


* nd/worktree-move (2017-01-27) 7 commits
 . fixup! worktree move: new command
 . worktree remove: new command
 . worktree move: refuse to move worktrees with submodules
 . worktree move: accept destination as directory
 . worktree move: new command
 . worktree.c: add update_worktree_location()
 . worktree.c: add validate_worktree()

 "git worktree" learned move and remove subcommands.

 Tentatively ejected as it seems to break 'pu' when merged.


* pb/bisect (2017-02-18) 28 commits
 - fixup! bisect--helper: `bisect_next_check` & bisect_voc shell function in C
 - bisect--helper: remove the dequote in bisect_start()
 - bisect--helper: retire `--bisect-auto-next` subcommand
 - bisect--helper: retire `--bisect-autostart` subcommand
 - bisect--helper: retire `--bisect-write` subcommand
 - bisect--helper: `bisect_replay` shell function in C
 - bisect--helper: `bisect_log` shell function in C
 - bisect--helper: retire `--write-terms` subcommand
 - bisect--helper: retire `--check-expected-revs` subcommand
 - bisect--helper: `bisect_state` & `bisect_head` shell function in C
 - bisect--helper: `bisect_autostart` shell function in C
 - bisect--helper: retire `--next-all` subcommand
 - bisect--helper: retire `--bisect-clean-state` subcommand
 - bisect--helper: `bisect_next` and `bisect_auto_next` shell function in C
 - t6030: no cleanup with bad merge base
 - bisect--helper: `bisect_start` shell function partially in C
 - bisect--helper: `get_terms` & `bisect_terms` shell function in C
 - bisect--helper: `bisect_next_check` & bisect_voc shell function in C
 - bisect--helper: `check_and_set_terms` shell function in C
 - bisect--helper: `bisect_write` shell function in C
 - bisect--helper: `is_expected_rev` & `check_expected_revs` shell function in C
 - bisect--helper: `bisect_reset` shell function in C
 - wrapper: move is_empty_file() and rename it as is_empty_or_missing_file()
 - t6030: explicitly test for bisection cleanup
 - bisect--helper: `bisect_clean_state` shell function in C
 - bisect--helper: `write_terms` shell function in C
 - bisect: rewrite `check_term_format` shell function in C
 - bisect--helper: use OPT_CMDMODE instead of OPT_BOOL

 Move more parts of "git bisect" to C.

 Expecting a reroll.
 cf. <CAFZEwPPXPPHi8KiEGS9ggzNHDCGhuqMgH9Z8-Pf9GLshg8+LPA@mail.gmail.com>
 cf. <CAFZEwPM9RSTGN54dzaw9gO9iZmsYjJ_d1SjUD4EzSDDbmh-XuA@mail.gmail.com>
 cf. <CAFZEwPNUXcNY9Qdz=_B7q2kQuaecPzJtTMGdv8YMUPEz2vnp8A@mail.gmail.com>


* sh/grep-tree-obj-tweak-output (2017-01-20) 2 commits
 - grep: use '/' delimiter for paths
 - grep: only add delimiter if there isn't one already

 "git grep", when fed a tree-ish as an input, shows each hit
 prefixed with "<tree-ish>:<path>:<lineno>:".  As <tree-ish> is
 almost always either a commit or a tag that points at a commit, the
 early part of the output "<tree-ish>:<path>" can be used as the
 name of the blob and given to "git show".  When <tree-ish> is a
 tree given in the extended SHA-1 syntax (e.g. "<commit>:", or
 "<commit>:<dir>"), however, this results in a string that does not
 name a blob (e.g. "<commit>::<path>" or "<commit>:<dir>:<path>").
 "git grep" has been taught to be a bit more intelligent about these
 cases and omit a colon (in the former case) or use slash (in the
 latter case) to produce "<commit>:<path>" and
 "<commit>:<dir>/<path>" that can be used as the name of a blob.

 Expecting a reroll?  Is this good enough with known limitations?


* jc/diff-b-m (2015-02-23) 5 commits
 . WIPWIP
 . WIP: diff-b-m
 - diffcore-rename: allow easier debugging
 - diffcore-rename.c: add locate_rename_src()
 - diffcore-break: allow debugging

 "git diff -B -M" produced incorrect patch when the postimage of a
 completely rewritten file is similar to the preimage of a removed
 file; such a resulting file must not be expressed as a rename from
 other place.

 The fix in this patch is broken, unfortunately.

 Will discard.

--------------------------------------------------
[Cooking]

* jk/ref-filter-flags-cleanup (2017-03-10) 4 commits
 - ref-filter: use separate cache for contains_tag_algo
 - ref-filter: die on parse_commit errors
 - ref-filter: use contains_result enum consistently
 - ref-filter: move ref_cbdata definition into ref-filter.c
 (this branch is used by ab/ref-filter-no-contains.)

 "git tag --contains" used to (ab)use the object bits to keep track
 of the state of object reachability without clearing them after
 use; this has been cleaned up and made to use the newer commit-slab
 facility.

 Will merge to 'next'.


* ew/http-alternates-as-redirects-warning (2017-03-06) 2 commits
  (merged to 'next' on 2017-03-10 at 23be072a07)
 + http: release strbuf on disabled alternates
 + http: inform about alternates-as-redirects behavior

 Recent versions of Git treats http alternates (used in dumb http
 transport) just like HTTP redirects and requires the client to
 enable following it, due to security concerns.  But we forgot to
 give a warning when we decide not to honor the alternates.

 Will merge to 'master'.


* jk/push-deadlock-regression-fix (2017-03-07) 6 commits
  (merged to 'next' on 2017-03-10 at ceb0b819bf)
 + send-pack: report signal death of pack-objects
 + send-pack: read "unpack" status even on pack-objects failure
 + send-pack: improve unpack-status error messages
 + send-pack: use skip_prefix for parsing unpack status
 + send-pack: extract parsing of "unpack" response
 + receive-pack: fix deadlock when we cannot create tmpdir

 "git push" had a handful of codepaths that could lead to a deadlock
 when unexpected error happened, which has been fixed.

 Will merge to 'master'.


* kn/ref-filter-branch-list (2017-03-10) 1 commit
  (merged to 'next' on 2017-03-10 at 73b43443f1)
 + branch: honor --abbrev/--no-abbrev in --list mode

 "git branch --list" takes the "--abbrev" and "--no-abbrev" options
 to control the output of the object name in its "-v"(erbose)
 output, but a recent update started ignoring them; this fixes it
 before the breakage reaches to any released version.

 Will merge to 'master'.


* sb/rev-parse-show-superproject-root (2017-03-08) 1 commit
 - rev-parse: add --show-superproject-working-tree

 From a working tree of a repository, a new option of "rev-parse"
 lets you ask if the repository is used as a submodule of another
 project, and where the root level of the working tree of that
 project (i.e. your superproject) is.

 Almost there, but documentation needs a bit more work.


* ls/filter-process-delayed (2017-03-06) 1 commit
 - convert: add "status=delayed" to filter process protocol

 What's the status of this one???

 cf. <xmqq60jmnmef.fsf@junio-linux.mtv.corp.google.com>


* js/early-config (2017-03-13) 12 commits
 - setup.c: mention unresolved problems
 - t1309: document cases where we would want early config not to die()
 - setup_git_directory_gently_1(): avoid die()ing
 - t1309: test read_early_config()
 - read_early_config(): really discover .git/
 - read_early_config(): avoid .git/config hack when unneeded
 - setup: make read_early_config() reusable
 - setup: introduce the discover_git_directory() function
 - setup_git_directory_1(): avoid changing global state
 - setup: do not append '/' to root in setup_discovered_git_dir()
 - setup_git_directory(): use is_dir_sep() helper
 - t7006: replace dubious test

 The start-up sequence of "git" needs to figure out some configured
 settings before it finds and set itself up in the location of the
 repository and was quite messy due to its "chicken-and-egg" nature.
 The code has been restructured.

 Will merge to 'next'.


* jt/perf-updates (2017-03-03) 3 commits
  (merged to 'next' on 2017-03-10 at 0c0b124ed4)
 + t/perf: add fallback for pre-bin-wrappers versions of git
 + t/perf: use $MODERN_GIT for all repo-copying steps
 + t/perf: export variable used in other blocks

 The t/perf performance test suite was not prepared to test not so
 old versions of Git, but now it covers versions of Git that are not
 so ancient.

 Will merge to 'master'.


* jk/interpret-branch-name (2017-03-02) 9 commits
  (merged to 'next' on 2017-03-10 at 95cc55f9a3)
 + checkout: restrict @-expansions when finding branch
 + strbuf_check_ref_format(): expand only local branches
 + branch: restrict @-expansions when deleting
 + t3204: test git-branch @-expansion corner cases
 + interpret_branch_name: allow callers to restrict expansions
 + strbuf_branchname: add docstring
 + strbuf_branchname: drop return value
 + interpret_branch_name: move docstring to header file
 + interpret_branch_name(): handle auto-namelen for @{-1}

 "git branch @" created refs/heads/@ as a branch, and in general the
 code that handled @{-1} and @{upstream} was a bit too loose in
 disambiguating.

 Will merge to 'master'.


* jk/sha1dc (2017-03-01) 7 commits
 - Put sha1dc on a diet
 - sha1dc: avoid 'for' loop initial decl
 - sha1dc: resurrect LICENSE file
 - sha1dc: avoid c99 declaration-after-statement
 - Makefile: add USE_SHA1DC knob
 - sha1dc: adjust header includes for git
 - add collision-detecting sha1 implementation

 Borrow "detect attempt to create collisions" variant of SHA-1
 implementation by Marc Stevens (CWI) and Dan Shumow (Microsoft).

 Expecting a cleaned-up reroll after discussion settles.
 cf. <CA+55aFxTWqsTTiDKo4DBZT-8Z9t80bGMD3uijzKONa_bYEZABQ@mail.gmail.com>


* js/travis-32bit-linux (2017-03-06) 1 commit
  (merged to 'next' on 2017-03-10 at 4cb69d0f77)
 + Travis: also test on 32-bit Linux

 Add 32-bit Linux variant to the set of platforms to be tested with
 Travis CI.

 Will merge to 'master'.


* jt/mark-tree-uninteresting-for-uninteresting-commit (2017-02-28) 3 commits
 - upload-pack: compute blob reachability correctly
 - revision: exclude trees/blobs given commit
 - revision: unify {tree,blob}_objects in rev_info

 The revision/object traversal machinery did not mark all tree and
 blob objects that are contained in an uninteresting commit as
 uninteresting, because that is quite costly.  Instead, it only
 marked those that are contained in an uninteresting boundary commit
 as uninteresting.

 Retracted?
 cf. <20170228215937.yd4juycjf7y3vish@sigill.intra.peff.net>


* nd/conditional-config-include (2017-03-11) 3 commits
 - config: add conditional include
 - config.txt: reflow the second include.path paragraph
 - config.txt: clarify multiple key values in include.path

 The configuration file learned a new "includeIf.<condition>.path"
 that includes the contents of the given path only when the
 condition holds.  This allows you to say "include this work-related
 bit only in the repositories under my ~/work/ directory".

 Will merge to 'next' after squashing niggle-fixes in.


* cc/split-index-config (2017-03-06) 22 commits
  (merged to 'next' on 2017-03-12 at 53cdc2016d)
 + Documentation/git-update-index: explain splitIndex.*
 + Documentation/config: add splitIndex.sharedIndexExpire
 + read-cache: use freshen_shared_index() in read_index_from()
 + read-cache: refactor read_index_from()
 + t1700: test shared index file expiration
 + read-cache: unlink old sharedindex files
 + config: add git_config_get_expiry() from gc.c
 + read-cache: touch shared index files when used
 + sha1_file: make check_and_freshen_file() non static
 + Documentation/config: add splitIndex.maxPercentChange
 + t1700: add tests for splitIndex.maxPercentChange
 + read-cache: regenerate shared index if necessary
 + config: add git_config_get_max_percent_split_change()
 + Documentation/git-update-index: talk about core.splitIndex config var
 + Documentation/config: add information for core.splitIndex
 + t1700: add tests for core.splitIndex
 + update-index: warn in case of split-index incoherency
 + read-cache: add and then use tweak_split_index()
 + split-index: add {add,remove}_split_index() functions
 + config: add git_config_get_split_index()
 + t1700: change here document style
 + config: mark an error message up for translation

 The experimental "split index" feature has gained a few
 configuration variables to make it easier to use.

 Will merge to 'master'.


* dp/filter-branch-prune-empty (2017-03-03) 4 commits
  (merged to 'next' on 2017-03-10 at 9317e24cd3)
 + p7000: add test for filter-branch with --prune-empty
 + filter-branch: fix --prune-empty on parentless commits
 + t7003: ensure --prune-empty removes entire branch when applicable
 + t7003: ensure --prune-empty can prune root commit

 "git filter-branch --prune-empty" drops a single-parent commit that
 becomes a no-op, but did not drop a root commit whose tree is empty.

 Will merge to 'master'.


* ab/cond-skip-tests (2017-03-01) 3 commits
  (merged to 'next' on 2017-03-10 at 38124fb5ce)
 + gitweb tests: skip tests when we don't have Time::HiRes
 + gitweb tests: change confusing "skip_all" phrasing
 + cvs tests: skip tests that call "cvs commit" when running as root

 A few tests were run conditionally under (rare) conditions where
 they cannot be run (like running cvs tests under 'root' account).

 Will merge to 'master'.


* jk/interop-test (2017-03-10) 2 commits
  (merged to 'next' on 2017-03-12 at 704b328022)
 + t/interop: add test of old clients against modern git-daemon
 + t: add an interoperability test harness

 Picking two versions of Git and running tests to make sure the
 older one and the newer one interoperate happily has now become
 possible.

 Will merge to 'master'.


* sg/clone-refspec-from-command-line-config (2017-02-27) 1 commit
 - clone: respect configured fetch respecs during initial fetch

 Expecting a reroll.
 cf. <20170227211217.73gydlxb2qu2sp3m@sigill.intra.peff.net>
 cf. <CAM0VKj=rsAfKvVccOMOoo5==Q1yW1U0zJBbUV=faKppWFm-u+g@mail.gmail.com>


* sk/dash-is-previous (2017-03-01) 5 commits
 - revert.c: delegate handling of "-" shorthand to setup_revisions
 - sha1_name.c: teach get_sha1_1 "-" shorthand for "@{-1}"
 - revision.c: args starting with "-" might be a revision
 - revision.c: swap if/else blocks
 - revision.c: do not update argv with unknown option

 A dash "-" can be written to mean "the branch that was previously
 checked out" in more places.

 Needs review.
 cf. <1488007487-12965-1-git-send-email-kannan.siddharth12@gmail.com>


* jh/memihash-opt (2017-02-17) 5 commits
 - name-hash: remember previous dir_entry during lazy_init_name_hash
 - name-hash: specify initial size for istate.dir_hash table
 - name-hash: precompute hash values during preload-index
 - hashmap: allow memihash computation to be continued
 - name-hash: eliminate duplicate memihash call

 Expecting an update for perf.
 cf. <MWHPR03MB29581B0EDDEDCA7D51EC396F8A280@MWHPR03MB2958.namprd03.prod.outlook.com>


* mm/fetch-show-error-message-on-unadvertised-object (2017-03-02) 3 commits
  (merged to 'next' on 2017-03-10 at 69e2023804)
 + fetch-pack: add specific error for fetching an unadvertised object
 + fetch_refs_via_pack: call report_unmatched_refs
 + fetch-pack: move code to report unmatched refs to a function

 "git fetch" that requests a commit by object name, when the other
 side does not allow such an request, failed without much
 explanation.

 Will merge to 'master'.


* sb/checkout-recurse-submodules (2017-03-11) 18 commits
 - submodule--helper.c: remove duplicate code
 - builtin/read-tree: add --recurse-submodules switch
 - builtin/checkout: add --recurse-submodules switch
 - entry.c: create submodules when interesting
 - unpack-trees: check if we can perform the operation for submodules
 - unpack-trees: pass old oid to verify_clean_submodule
 - update submodules: add submodule_move_head
 - update submodules: move up prepare_submodule_repo_env
 - submodules: introduce check to see whether to touch a submodule
 - update submodules: add a config option to determine if submodules are updated
 - update submodules: add submodule config parsing
 - connect_work_tree_and_git_dir: safely create leading directories
 - make is_submodule_populated gently
 - lib-submodule-update.sh: define tests for recursing into submodules
 - lib-submodule-update.sh: replace sha1 by hash
 - lib-submodule-update: teach test_submodule_content the -C <dir> flag
 - lib-submodule-update.sh: do not use ./. as submodule remote
 - lib-submodule-update.sh: reorder create_lib_submodule_repo

 "git checkout" is taught --recurse-submodules option.


* bc/object-id (2017-02-22) 19 commits
 - wt-status: convert to struct object_id
 - builtin/merge-base: convert to struct object_id
 - Convert object iteration callbacks to struct object_id
 - sha1_file: introduce an nth_packed_object_oid function
 - refs: simplify parsing of reflog entries
 - refs: convert each_reflog_ent_fn to struct object_id
 - reflog-walk: convert struct reflog_info to struct object_id
 - builtin/replace: convert to struct object_id
 - Convert remaining callers of resolve_refdup to object_id
 - builtin/merge: convert to struct object_id
 - builtin/clone: convert to struct object_id
 - builtin/branch: convert to struct object_id
 - builtin/grep: convert to struct object_id
 - builtin/fmt-merge-message: convert to struct object_id
 - builtin/fast-export: convert to struct object_id
 - builtin/describe: convert to struct object_id
 - builtin/diff-tree: convert to struct object_id
 - builtin/commit: convert to struct object_id
 - hex: introduce parse_oid_hex

 "uchar [40]" to "struct object_id" conversion continues.

 Will merge to 'next'.


* sg/completion-refs-speedup (2017-02-13) 13 commits
 - squash! completion: fill COMPREPLY directly when completing refs
 - completion: fill COMPREPLY directly when completing refs
 - completion: list only matching symbolic and pseudorefs when completing refs
 - completion: let 'for-each-ref' sort remote branches for 'checkout' DWIMery
 - completion: let 'for-each-ref' filter remote branches for 'checkout' DWIMery
 - completion: let 'for-each-ref' strip the remote name from remote branches
 - completion: let 'for-each-ref' and 'ls-remote' filter matching refs
 - completion: don't disambiguate short refs
 - completion: don't disambiguate tags and branches
 - completion: support excluding full refs
 - completion: support completing full refs after '--option=refs/<TAB>'
 - completion: wrap __git_refs() for better option parsing
 - completion: remove redundant __gitcomp_nl() options from _git_commit()

 The refs completion for large number of refs has been sped up,
 partly by giving up disambiguating ambiguous refs and partly by
 eliminating most of the shell processing between 'git for-each-ref'
 and 'ls-remote' and Bash's completion facility.

 What's the donness of this topic?


* jk/no-looking-at-dotgit-outside-repo-final (2016-10-26) 1 commit
  (merged to 'next' on 2017-02-27 at 7373a1b73d)
 + setup_git_env: avoid blind fall-back to ".git"

 This is the endgame of the topic to avoid blindly falling back to
 ".git" when the setup sequence said we are _not_ in Git repository.
 A corner case that happens to work right now may be broken by a
 call to die("BUG").

 Will cook in 'next'.


* jc/merge-drop-old-syntax (2015-04-29) 1 commit
  (merged to 'next' on 2017-02-27 at 2c0f5f73d8)
 + merge: drop 'git merge <message> HEAD <commit>' syntax

 Stop supporting "git merge <message> HEAD <commit>" syntax that has
 been deprecated since October 2007, and issues a deprecation
 warning message since v2.5.0.

 Will cook in 'next'.


* jc/bundle (2016-03-03) 6 commits
 - index-pack: --clone-bundle option
 - Merge branch 'jc/index-pack' into jc/bundle
 - bundle v3: the beginning
 - bundle: keep a copy of bundle file name in the in-core bundle header
 - bundle: plug resource leak
 - bundle doc: 'verify' is not about verifying the bundle

 The beginning of "split bundle", which could be one of the
 ingredients to allow "git clone" traffic off of the core server
 network to CDN.

--------------------------------------------------
[Discarded]

* jk/auto-namelen-in-interpret-branch-name (2017-02-27) 1 commit
 . interpret_branch_name(): handle auto-namelen for @{-1}

 A small bug in the code that parses @{...} has been fixed.

 This is now a part of jk/interpret-branch-name topic.

^ permalink raw reply	[relevance 2%]

* Re: What's cooking in git.git (Mar 2017, #06; Tue, 14)
  @ 2017-03-14 23:39  2% ` Junio C Hamano
  0 siblings, 0 replies; 200+ results
From: Junio C Hamano @ 2017-03-14 23:39 UTC (permalink / raw)
  To: git

Junio C Hamano <gitster@pobox.com> writes:

> Among the topics merged to 'master' since v2.12 was tagged, 40+ of
> them could be also merged to 'maint' (some of these are new features
> and by default should not be, though).  Among them two are fixes for
> regressions found in v2.12:
>
>  * The patch subcommand of "git add -i" was meant to have paths
>    selection prompt just like other subcommand, unlike "git add -p"
>    directly jumps to hunk selection.  Recently, this was broken and
>    "add -i" lost the paths selection dialog, but it now has been
>    fixed.
>    (merge c852bd54bd jk/add-i-patch-do-prompt later to maint).
>
>  * Git v2.12 was shipped with an embarrassing breakage where various
>    operations that verify paths given from the user stopped dying when
>    seeing an issue, and instead later triggering segfault.
>    (merge ce83eadd9a js/realpath-pathdup-fix later to maint).
>
> These two have been merged to 'master' only a few days ago;
> additional tests on 'master' to make sure they fix the issues, and
> more importantly they do not introduce new regressions, are greatly
> appreciated.  I am hoping we can merge them (and probably others)
> to 'maint' to cut v2.12.1 by early next week.

Those who are curious what "probably others" are, a good place to
start is this list (refer to RelNotes on the 'master' for what they
are about):

jk/delta-chain-limit # 2 (2 weeks ago) 
jk/grep-no-index-fix # 7 (2 weeks ago) 
jn/remote-helpers-with-git-dir # 2 (2 weeks ago) 
jk/show-branch-lift-name-len-limit # 3 (2 weeks ago) 
jk/tempfile-ferror-fclose-confusion # 1 (2 weeks ago) 
rl/remote-allow-missing-branch-name-merge # 1 (2 weeks ago) 
dt/gc-ignore-old-gc-logs # 1 (2 weeks ago) 
jc/config-case-cmdline-take-2 # 2 (4 days ago) 
jk/ident-empty # 4 (4 days ago) 
jt/upload-pack-error-report # 1 (4 days ago) 
rs/sha1-file-plug-fallback-base-leak # 1 (4 days ago) 
jt/http-base-url-update-upon-redirect # 1 (4 days ago) 
jk/add-i-patch-do-prompt # 1 (2 days ago) 
js/realpath-pathdup-fix # 2 (2 days ago) 
ss/remote-bzr-hg-placeholder-wo-python # 1 (2 days ago) 
ax/line-log-range-merge-fix # 1 (2 days ago) 
vn/line-log-memcpy-size-fix # 1 (2 days ago) 
jc/diff-populate-filespec-size-only-fix # 1 (2 days ago) 
ab/cond-skip-tests # 3 (75 minutes ago) 
jk/interpret-branch-name # 9 (75 minutes ago) 
mm/fetch-show-error-message-on-unadvertised-object # 3 (75 minutes ago) 
dp/filter-branch-prune-empty # 4 (75 minutes ago) 
ew/http-alternates-as-redirects-warning # 2 (75 minutes ago) 
jk/push-deadlock-regression-fix # 6 (75 minutes ago) 
mm/two-more-xstrfmt # 2 (2 weeks ago) 
ps/docs-diffcore # 2 (4 days ago) 
ew/markdown-url-in-readme # 1 (4 days ago) 
rj/remove-unused-mktemp # 2 (4 days ago) 
jk/ewah-use-right-type-in-sizeof # 1 (2 days ago) 


^ permalink raw reply	[relevance 2%]

* [BUG] test suite broken with GIT_TEST_SPLIT_INDEX
@ 2017-04-20 20:52  2% Thomas Gummerer
  2017-04-20 21:03  0% ` Christian Couder
  0 siblings, 1 reply; 200+ results
From: Thomas Gummerer @ 2017-04-20 20:52 UTC (permalink / raw)
  To: Christian Couder; +Cc: git

Hi,

I just tried to run the test suite with GIT_TEST_SPLIT_INDEX=YesPlease
and noticed that a few tests are broken both in pu and master.

Below the test failures on master:

Test Summary Report
-------------------
t7009-filter-branch-null-sha1.sh                 (Wstat: 256 Tests: 5 Failed: 2)
  Failed tests:  4-5
  Non-zero exit status: 1
t3900-i18n-commit.sh                             (Wstat: 256 Tests: 34 Failed: 1)
  Failed test:  34
  Non-zero exit status: 1
t5407-post-rewrite-hook.sh                       (Wstat: 256 Tests: 14 Failed: 4)
  Failed tests:  11-14
  Non-zero exit status: 1
t3415-rebase-autosquash.sh                       (Wstat: 256 Tests: 19 Failed: 15)
  Failed tests:  4-17, 19
  Non-zero exit status: 1
t3404-rebase-interactive.sh                      (Wstat: 256 Tests: 95 Failed: 54)
  Failed tests:  18, 20, 22-24, 26-43, 45, 47-74, 84-85
  Non-zero exit status: 1

Bisecting between master and v2.10.0 leads me to the merge commit
94c9b5af70 ("Merge branch 'cc/split-index-config'", 2017-03-17).

Unfortunately I don't forsee myself having time to track the bug down
soon.  Sorry for not noticing this earlier in the cycle.

The bisect log is below if someone finds it helpful:

git bisect start
# bad: [6a2c2f8d34fa1e8f3bb85d159d354810ed63692e] Git 2.13-rc0
git bisect bad 6a2c2f8d34fa1e8f3bb85d159d354810ed63692e
# good: [6ebdac1bab966b720d776aa43ca188fe378b1f4b] Git 2.10
git bisect good 6ebdac1bab966b720d776aa43ca188fe378b1f4b
# good: [733671b0fd2fb03edb05273f36ec70bd624e544f] Merge branch 'maint'
git bisect good 733671b0fd2fb03edb05273f36ec70bd624e544f
# good: [04b4f7d579056cedaae2de0a019e5993b4d9c2d0] Merge branch 'sb/submodule-update-initial-runs-custom-script' into maint
git bisect good 04b4f7d579056cedaae2de0a019e5993b4d9c2d0
# bad: [af6865a7f1e1d915d3b63e998226028ca4abb6ee] submodule.c: convert is_submodule_modified to use strbuf_getwholeline
git bisect bad af6865a7f1e1d915d3b63e998226028ca4abb6ee
# good: [3f7ebc6ece46f1c23480d094688b8b5f24eb345c] Merge branch 'jk/tempfile-ferror-fclose-confusion'
git bisect good 3f7ebc6ece46f1c23480d094688b8b5f24eb345c
# bad: [94c9b5af703eb70adba349cfbfaaa3029849744c] Merge branch 'cc/split-index-config'
git bisect bad 94c9b5af703eb70adba349cfbfaaa3029849744c
# good: [36d5286f6815542761dae92fdcdce8db1556727f] Merge branch 'ax/line-log-range-merge-fix'
git bisect good 36d5286f6815542761dae92fdcdce8db1556727f
# good: [c3a008250272295271584c6303463ffb9b055cbc] read-cache: use freshen_shared_index() in read_index_from()
git bisect good c3a008250272295271584c6303463ffb9b055cbc
# good: [228b78752de9d759839665764391262c0ec156cf] Merge branch 'jt/perf-updates'
git bisect good 228b78752de9d759839665764391262c0ec156cf
# good: [073778017158ecf3153b050776029907bc75826f] Merge branch 'kn/ref-filter-branch-list'
git bisect good 073778017158ecf3153b050776029907bc75826f
# good: [b46013950aff31b6626af96ccbf2c48469e36c66] Documentation/git-update-index: explain splitIndex.*
git bisect good b46013950aff31b6626af96ccbf2c48469e36c66
# good: [32c43f595f93cdd4ed5305aef97a3f6aaa74ed72] Sync with 'maint'
git bisect good 32c43f595f93cdd4ed5305aef97a3f6aaa74ed72
# first bad commit: [94c9b5af703eb70adba349cfbfaaa3029849744c] Merge branch 'cc/split-index-config'


^ permalink raw reply	[relevance 2%]

* Re: [BUG] test suite broken with GIT_TEST_SPLIT_INDEX
  2017-04-20 20:52  2% [BUG] test suite broken with GIT_TEST_SPLIT_INDEX Thomas Gummerer
@ 2017-04-20 21:03  0% ` Christian Couder
  2017-04-20 21:24  0%   ` Thomas Gummerer
  0 siblings, 1 reply; 200+ results
From: Christian Couder @ 2017-04-20 21:03 UTC (permalink / raw)
  To: Thomas Gummerer; +Cc: git

Hi,

On Thu, Apr 20, 2017 at 10:52 PM, Thomas Gummerer <t.gummerer@gmail.com> wrote:
> Hi,
>
> I just tried to run the test suite with GIT_TEST_SPLIT_INDEX=YesPlease
> and noticed that a few tests are broken both in pu and master.
>
> Below the test failures on master:
>
> Test Summary Report
> -------------------
> t7009-filter-branch-null-sha1.sh                 (Wstat: 256 Tests: 5 Failed: 2)
>   Failed tests:  4-5
>   Non-zero exit status: 1
> t3900-i18n-commit.sh                             (Wstat: 256 Tests: 34 Failed: 1)
>   Failed test:  34
>   Non-zero exit status: 1
> t5407-post-rewrite-hook.sh                       (Wstat: 256 Tests: 14 Failed: 4)
>   Failed tests:  11-14
>   Non-zero exit status: 1
> t3415-rebase-autosquash.sh                       (Wstat: 256 Tests: 19 Failed: 15)
>   Failed tests:  4-17, 19
>   Non-zero exit status: 1
> t3404-rebase-interactive.sh                      (Wstat: 256 Tests: 95 Failed: 54)
>   Failed tests:  18, 20, 22-24, 26-43, 45, 47-74, 84-85
>   Non-zero exit status: 1
>
> Bisecting between master and v2.10.0 leads me to the merge commit
> 94c9b5af70 ("Merge branch 'cc/split-index-config'", 2017-03-17).
>
> Unfortunately I don't forsee myself having time to track the bug down
> soon.  Sorry for not noticing this earlier in the cycle.
>
> The bisect log is below if someone finds it helpful:
>
> git bisect start
> # bad: [6a2c2f8d34fa1e8f3bb85d159d354810ed63692e] Git 2.13-rc0
> git bisect bad 6a2c2f8d34fa1e8f3bb85d159d354810ed63692e
> # good: [6ebdac1bab966b720d776aa43ca188fe378b1f4b] Git 2.10
> git bisect good 6ebdac1bab966b720d776aa43ca188fe378b1f4b
> # good: [733671b0fd2fb03edb05273f36ec70bd624e544f] Merge branch 'maint'
> git bisect good 733671b0fd2fb03edb05273f36ec70bd624e544f
> # good: [04b4f7d579056cedaae2de0a019e5993b4d9c2d0] Merge branch 'sb/submodule-update-initial-runs-custom-script' into maint
> git bisect good 04b4f7d579056cedaae2de0a019e5993b4d9c2d0
> # bad: [af6865a7f1e1d915d3b63e998226028ca4abb6ee] submodule.c: convert is_submodule_modified to use strbuf_getwholeline
> git bisect bad af6865a7f1e1d915d3b63e998226028ca4abb6ee
> # good: [3f7ebc6ece46f1c23480d094688b8b5f24eb345c] Merge branch 'jk/tempfile-ferror-fclose-confusion'
> git bisect good 3f7ebc6ece46f1c23480d094688b8b5f24eb345c
> # bad: [94c9b5af703eb70adba349cfbfaaa3029849744c] Merge branch 'cc/split-index-config'
> git bisect bad 94c9b5af703eb70adba349cfbfaaa3029849744c
> # good: [36d5286f6815542761dae92fdcdce8db1556727f] Merge branch 'ax/line-log-range-merge-fix'
> git bisect good 36d5286f6815542761dae92fdcdce8db1556727f
> # good: [c3a008250272295271584c6303463ffb9b055cbc] read-cache: use freshen_shared_index() in read_index_from()
> git bisect good c3a008250272295271584c6303463ffb9b055cbc
> # good: [228b78752de9d759839665764391262c0ec156cf] Merge branch 'jt/perf-updates'
> git bisect good 228b78752de9d759839665764391262c0ec156cf
> # good: [073778017158ecf3153b050776029907bc75826f] Merge branch 'kn/ref-filter-branch-list'
> git bisect good 073778017158ecf3153b050776029907bc75826f
> # good: [b46013950aff31b6626af96ccbf2c48469e36c66] Documentation/git-update-index: explain splitIndex.*
> git bisect good b46013950aff31b6626af96ccbf2c48469e36c66
> # good: [32c43f595f93cdd4ed5305aef97a3f6aaa74ed72] Sync with 'maint'
> git bisect good 32c43f595f93cdd4ed5305aef97a3f6aaa74ed72
> # first bad commit: [94c9b5af703eb70adba349cfbfaaa3029849744c] Merge branch 'cc/split-index-config'

Could you try with the following patch:

http://public-inbox.org/git/20170330210354.20018-1-chriscool@tuxfamily.org/

Thanks,
Christian.

^ permalink raw reply	[relevance 0%]

* Re: [BUG] test suite broken with GIT_TEST_SPLIT_INDEX
  2017-04-20 21:03  0% ` Christian Couder
@ 2017-04-20 21:24  0%   ` Thomas Gummerer
  0 siblings, 0 replies; 200+ results
From: Thomas Gummerer @ 2017-04-20 21:24 UTC (permalink / raw)
  To: Christian Couder; +Cc: git

On 04/20, Christian Couder wrote:
> Hi,
> 
> On Thu, Apr 20, 2017 at 10:52 PM, Thomas Gummerer <t.gummerer@gmail.com> wrote:
> > Hi,
> >
> > I just tried to run the test suite with GIT_TEST_SPLIT_INDEX=YesPlease
> > and noticed that a few tests are broken both in pu and master.
> >
> > Below the test failures on master:
> >
> > Test Summary Report
> > -------------------
> > t7009-filter-branch-null-sha1.sh                 (Wstat: 256 Tests: 5 Failed: 2)
> >   Failed tests:  4-5
> >   Non-zero exit status: 1
> > t3900-i18n-commit.sh                             (Wstat: 256 Tests: 34 Failed: 1)
> >   Failed test:  34
> >   Non-zero exit status: 1
> > t5407-post-rewrite-hook.sh                       (Wstat: 256 Tests: 14 Failed: 4)
> >   Failed tests:  11-14
> >   Non-zero exit status: 1
> > t3415-rebase-autosquash.sh                       (Wstat: 256 Tests: 19 Failed: 15)
> >   Failed tests:  4-17, 19
> >   Non-zero exit status: 1
> > t3404-rebase-interactive.sh                      (Wstat: 256 Tests: 95 Failed: 54)
> >   Failed tests:  18, 20, 22-24, 26-43, 45, 47-74, 84-85
> >   Non-zero exit status: 1
> >
> > Bisecting between master and v2.10.0 leads me to the merge commit
> > 94c9b5af70 ("Merge branch 'cc/split-index-config'", 2017-03-17).
> >
> > Unfortunately I don't forsee myself having time to track the bug down
> > soon.  Sorry for not noticing this earlier in the cycle.
> >
> > The bisect log is below if someone finds it helpful:
> >
> > git bisect start
> > # bad: [6a2c2f8d34fa1e8f3bb85d159d354810ed63692e] Git 2.13-rc0
> > git bisect bad 6a2c2f8d34fa1e8f3bb85d159d354810ed63692e
> > # good: [6ebdac1bab966b720d776aa43ca188fe378b1f4b] Git 2.10
> > git bisect good 6ebdac1bab966b720d776aa43ca188fe378b1f4b
> > # good: [733671b0fd2fb03edb05273f36ec70bd624e544f] Merge branch 'maint'
> > git bisect good 733671b0fd2fb03edb05273f36ec70bd624e544f
> > # good: [04b4f7d579056cedaae2de0a019e5993b4d9c2d0] Merge branch 'sb/submodule-update-initial-runs-custom-script' into maint
> > git bisect good 04b4f7d579056cedaae2de0a019e5993b4d9c2d0
> > # bad: [af6865a7f1e1d915d3b63e998226028ca4abb6ee] submodule.c: convert is_submodule_modified to use strbuf_getwholeline
> > git bisect bad af6865a7f1e1d915d3b63e998226028ca4abb6ee
> > # good: [3f7ebc6ece46f1c23480d094688b8b5f24eb345c] Merge branch 'jk/tempfile-ferror-fclose-confusion'
> > git bisect good 3f7ebc6ece46f1c23480d094688b8b5f24eb345c
> > # bad: [94c9b5af703eb70adba349cfbfaaa3029849744c] Merge branch 'cc/split-index-config'
> > git bisect bad 94c9b5af703eb70adba349cfbfaaa3029849744c
> > # good: [36d5286f6815542761dae92fdcdce8db1556727f] Merge branch 'ax/line-log-range-merge-fix'
> > git bisect good 36d5286f6815542761dae92fdcdce8db1556727f
> > # good: [c3a008250272295271584c6303463ffb9b055cbc] read-cache: use freshen_shared_index() in read_index_from()
> > git bisect good c3a008250272295271584c6303463ffb9b055cbc
> > # good: [228b78752de9d759839665764391262c0ec156cf] Merge branch 'jt/perf-updates'
> > git bisect good 228b78752de9d759839665764391262c0ec156cf
> > # good: [073778017158ecf3153b050776029907bc75826f] Merge branch 'kn/ref-filter-branch-list'
> > git bisect good 073778017158ecf3153b050776029907bc75826f
> > # good: [b46013950aff31b6626af96ccbf2c48469e36c66] Documentation/git-update-index: explain splitIndex.*
> > git bisect good b46013950aff31b6626af96ccbf2c48469e36c66
> > # good: [32c43f595f93cdd4ed5305aef97a3f6aaa74ed72] Sync with 'maint'
> > git bisect good 32c43f595f93cdd4ed5305aef97a3f6aaa74ed72
> > # first bad commit: [94c9b5af703eb70adba349cfbfaaa3029849744c] Merge branch 'cc/split-index-config'
> 
> Could you try with the following patch:
> 
> http://public-inbox.org/git/20170330210354.20018-1-chriscool@tuxfamily.org/

Yeah, I tried with and without that patch with the same result.
Unless I'm screwing something up when testing I don't think this fixes
the issue unfortunately.

> Thanks,
> Christian.

^ permalink raw reply	[relevance 0%]

* Re: What's cooking in git.git (May 2017, #07; Tue, 23)
  @ 2017-05-25  3:42  2%       ` Junio C Hamano
  2017-05-25  5:42  0%         ` Stefan Beller
  0 siblings, 1 reply; 200+ results
From: Junio C Hamano @ 2017-05-25  3:42 UTC (permalink / raw)
  To: Ævar Arnfjörð Bjarmason; +Cc: Stefan Beller, git@vger.kernel.org

Ævar Arnfjörð Bjarmason <avarab@gmail.com> writes:

>> The tests added by grep rely on the old content of
>> test 2 'grep correctly finds patterns in a submodule'.
>
> Sorry about the fallout.
>
>> The (whitespace broken) diff below fixes it.

Ah, then, this was an example of maintainer not doing a good job.
When I see a topic that pass its own test that fails when merged to
'pu', I usually try to see where it goes wrong myself and come up
with a fix in an evil merge, but this time I didn't have enough time
to do so before sending out the "What's cooking" report.

Here is what I taught my merge-fix machinery to apply after
mechanical merge of the two topics.

 t/t7814-grep-recurse-submodules.sh | 8 ++++----
 1 file changed, 4 insertions(+), 4 deletions(-)

diff --git a/t/t7814-grep-recurse-submodules.sh b/t/t7814-grep-recurse-submodules.sh
index 14eeb54b4b..7184113b9b 100755
--- a/t/t7814-grep-recurse-submodules.sh
+++ b/t/t7814-grep-recurse-submodules.sh
@@ -36,18 +36,18 @@ test_expect_success 'grep correctly finds patterns in a submodule' '
 test_expect_success 'grep finds patterns in a submodule via config' '
 	test_config submodule.recurse true &&
 	# expect from previous test
-	git grep -e "bar" >actual &&
+	git grep -e "(3|4)" >actual &&
 	test_cmp expect actual
 '
 
 test_expect_success 'grep --no-recurse-submodules overrides config' '
 	test_config submodule.recurse true &&
 	cat >expect <<-\EOF &&
-	a:foobar
-	b/b:bar
+	a:(1|2)d(3|4)
+	b/b:(3|4)
 	EOF
 
-	git grep -e "bar" --no-recurse-submodules >actual &&
+	git grep -e "(3|4)" --no-recurse-submodules >actual &&
 	test_cmp expect actual
 '
 
-- 
2.13.0-491-g71cfeddc25


^ permalink raw reply related	[relevance 2%]

* Re: What's cooking in git.git (May 2017, #07; Tue, 23)
  2017-05-25  3:42  2%       ` Junio C Hamano
@ 2017-05-25  5:42  0%         ` Stefan Beller
  0 siblings, 0 replies; 200+ results
From: Stefan Beller @ 2017-05-25  5:42 UTC (permalink / raw)
  To: Junio C Hamano
  Cc: Ævar Arnfjörð Bjarmason, git@vger.kernel.org

On Wed, May 24, 2017 at 8:42 PM, Junio C Hamano <gitster@pobox.com> wrote:
> Ævar Arnfjörð Bjarmason <avarab@gmail.com> writes:
>
>>> The tests added by grep rely on the old content of
>>> test 2 'grep correctly finds patterns in a submodule'.
>>
>> Sorry about the fallout.
>>
>>> The (whitespace broken) diff below fixes it.
>
> Ah, then, this was an example of maintainer not doing a good job.
> When I see a topic that pass its own test that fails when merged to
> 'pu', I usually try to see where it goes wrong myself and come up
> with a fix in an evil merge, but this time I didn't have enough time
> to do so before sending out the "What's cooking" report.
>
> Here is what I taught my merge-fix machinery to apply after
> mechanical merge of the two topics.

Please evict (or stop paying attention to)
sb/submodule-blanket-recursive as it is fundamentally broken.

I hoped to resend a fixed version today, but it took me longer than expected
to figure out the config machinery playing with submodules.

The diff below looks correct to me.

Thanks,
Stefan
>
>  t/t7814-grep-recurse-submodules.sh | 8 ++++----
>  1 file changed, 4 insertions(+), 4 deletions(-)
>
> diff --git a/t/t7814-grep-recurse-submodules.sh b/t/t7814-grep-recurse-submodules.sh
> index 14eeb54b4b..7184113b9b 100755
> --- a/t/t7814-grep-recurse-submodules.sh
> +++ b/t/t7814-grep-recurse-submodules.sh
> @@ -36,18 +36,18 @@ test_expect_success 'grep correctly finds patterns in a submodule' '
>  test_expect_success 'grep finds patterns in a submodule via config' '
>         test_config submodule.recurse true &&
>         # expect from previous test
> -       git grep -e "bar" >actual &&
> +       git grep -e "(3|4)" >actual &&
>         test_cmp expect actual
>  '
>
>  test_expect_success 'grep --no-recurse-submodules overrides config' '
>         test_config submodule.recurse true &&
>         cat >expect <<-\EOF &&
> -       a:foobar
> -       b/b:bar
> +       a:(1|2)d(3|4)
> +       b/b:(3|4)
>         EOF
>
> -       git grep -e "bar" --no-recurse-submodules >actual &&
> +       git grep -e "(3|4)" --no-recurse-submodules >actual &&
>         test_cmp expect actual
>  '
>
> --
> 2.13.0-491-g71cfeddc25
>

^ permalink raw reply	[relevance 0%]

* Re: [PATCH 00/33] object id conversion (grep and diff)
  @ 2017-06-02 23:35  3%         ` Junio C Hamano
  2017-06-05 19:42  0%           ` Brandon Williams
  0 siblings, 1 reply; 200+ results
From: Junio C Hamano @ 2017-06-02 23:35 UTC (permalink / raw)
  To: Brandon Williams; +Cc: git, peff, sandals

Brandon Williams <bmwill@google.com> writes:

> On 06/02, Junio C Hamano wrote:
>> 
>> I lied.  This also conflicts somewhat with Peff's diff-blob topic.
>> I think I resolved them correctly (there needs evil merges applied
>> to two files when merging this topic), and hopefully can push out
>> the result by the end of the day.
>> 
>> Thanks.
>
> If it ends up being too much of a headache for you to deal with, let me
> know and I can rebase on top of those series.  That way you don't have to
> deal with the conflict resolutions.  Just let me know what you'd like me
> to do.

Sorry, I forgot to push the result out, even though I double checked
the conflict resolution I did last night.  Now it is in the public
repository.  I have one squash queued at the right place to update
SHA1s to OIDs in the comment Brian pointed out.

If you ever need to rebase this on top of future 'master' that
already has js/blame-lib topic, fetching from me and checking
the evil merge I did may turn out to be helpful:

 $ git fetch git://github.com/gitster/git refs/merge-fix/bw/object-id
 $ git show FETCH_HEAD

but I can take patches based on the same old 'master'; as long as
the evil merge above is correct, that would probably be preferrable,
as it makes it easier to compare the two iterations of your series.

Repeating some backstory of "merge-fix" might be beneficial, if a
reader is interested.  Otherwise the remainder of this message can
safely be skipped.

After a topic (i.e. js/blame-lib) moves a lot of code around (i.e. a
bulk of what used to be in builtin/blame.c is now in blame.c and
some in diff.c), merging a topic that touches places in the code
that was moved in-place (i.e. bw/object-id, which updates the code
in builtin/blame.c) will leave a conflict that looks like:

    <<<<<<< HEAD
    ... very little that is left after moving
    ... bunch of code out of this file
    ||||||| common
    ... a lot of
    ... stuff before
    ... your change from SHA1 to OID
    ... is here
    =======
    ... a lot of
    ... stuff after
    ... your change from SHA1 to OID
    ... is here
    >>>>>>> theirs

As far as builtin/blame.c is concerned, the resolution for this
set of conflicts is just to take the HEAD version, ignoring all of
your SHA1-to-OID changes.  Once it is resolved, "rerere" can help
us remember this resolution to builtin/blame.c

But the ignored changes need to go somewhere else.

What the user who is doing a merge does at this point is to compare
what is between ||||||| and ======= (i.e. common ancestor's version)
with what is between ======= and >>>>>>> (i.e. their version) to
figure out what the branch being merged did.  And the user needs to
know where the common code went in the version in HEAD.

 $ git log [--no-merges] -p MERGE_HEAD.. -- builtin/blame.c

is helpful to locate the commit that lost the common lines from the
file.  And "git show" on it will tell us that they mostly went to
blame.c while some migrating to diff.c; we found out what you did by
comparing "common" and "theirs" in the previous step and we apply
these changes to these "new" places.

And that is the diff you see in refs/merge-fix/bw/object-id.  The
script I use to re-build 'pu' every day (probably I use it three
times a day on average) knows about that ref.  The script starts
from the tip of 'master', and for each topic, (1) run "git merge"
into HEAD, (2) take resolution recorded by "rerere" and (3) if
merge/fix/$topic exists, cherry-pick it on top to squash into the
merge made in (2).

Once I have taught my rerere database and refs/merge-fix/ about this
merge, it is not too big a deal to redo the merge to adjust to an
updated 'master' or a new interation of your series because of the
above mechanism.  And that is why I say it is OK for an updated series
to be based on the same old 'master'.

Thanks.



^ permalink raw reply	[relevance 3%]

* Re: [PATCH 00/33] object id conversion (grep and diff)
  2017-06-02 23:35  3%         ` Junio C Hamano
@ 2017-06-05 19:42  0%           ` Brandon Williams
  0 siblings, 0 replies; 200+ results
From: Brandon Williams @ 2017-06-05 19:42 UTC (permalink / raw)
  To: Junio C Hamano; +Cc: git, peff, sandals

On 06/03, Junio C Hamano wrote:
> Brandon Williams <bmwill@google.com> writes:
> 
> > On 06/02, Junio C Hamano wrote:
> >> 
> >> I lied.  This also conflicts somewhat with Peff's diff-blob topic.
> >> I think I resolved them correctly (there needs evil merges applied
> >> to two files when merging this topic), and hopefully can push out
> >> the result by the end of the day.
> >> 
> >> Thanks.
> >
> > If it ends up being too much of a headache for you to deal with, let me
> > know and I can rebase on top of those series.  That way you don't have to
> > deal with the conflict resolutions.  Just let me know what you'd like me
> > to do.
> 
> Sorry, I forgot to push the result out, even though I double checked
> the conflict resolution I did last night.  Now it is in the public
> repository.  I have one squash queued at the right place to update
> SHA1s to OIDs in the comment Brian pointed out.
> 

What you have at 'bw/object-id' matches the changes I made locally
(changing SHA1 to OID) and looks good to me!

> If you ever need to rebase this on top of future 'master' that
> already has js/blame-lib topic, fetching from me and checking
> the evil merge I did may turn out to be helpful:
> 
>  $ git fetch git://github.com/gitster/git refs/merge-fix/bw/object-id
>  $ git show FETCH_HEAD
> 
> but I can take patches based on the same old 'master'; as long as
> the evil merge above is correct, that would probably be preferrable,
> as it makes it easier to compare the two iterations of your series.

Sounds like basing it on the original 'master' would work easiest for
you, so I'll continue to do that :)

> 
> Repeating some backstory of "merge-fix" might be beneficial, if a
> reader is interested.  Otherwise the remainder of this message can
> safely be skipped.
> 
> After a topic (i.e. js/blame-lib) moves a lot of code around (i.e. a
> bulk of what used to be in builtin/blame.c is now in blame.c and
> some in diff.c), merging a topic that touches places in the code
> that was moved in-place (i.e. bw/object-id, which updates the code
> in builtin/blame.c) will leave a conflict that looks like:
> 
>     <<<<<<< HEAD
>     ... very little that is left after moving
>     ... bunch of code out of this file
>     ||||||| common
>     ... a lot of
>     ... stuff before
>     ... your change from SHA1 to OID
>     ... is here
>     =======
>     ... a lot of
>     ... stuff after
>     ... your change from SHA1 to OID
>     ... is here
>     >>>>>>> theirs
> 
> As far as builtin/blame.c is concerned, the resolution for this
> set of conflicts is just to take the HEAD version, ignoring all of
> your SHA1-to-OID changes.  Once it is resolved, "rerere" can help
> us remember this resolution to builtin/blame.c
> 
> But the ignored changes need to go somewhere else.
> 
> What the user who is doing a merge does at this point is to compare
> what is between ||||||| and ======= (i.e. common ancestor's version)
> with what is between ======= and >>>>>>> (i.e. their version) to
> figure out what the branch being merged did.  And the user needs to
> know where the common code went in the version in HEAD.
> 
>  $ git log [--no-merges] -p MERGE_HEAD.. -- builtin/blame.c
> 
> is helpful to locate the commit that lost the common lines from the
> file.  And "git show" on it will tell us that they mostly went to
> blame.c while some migrating to diff.c; we found out what you did by
> comparing "common" and "theirs" in the previous step and we apply
> these changes to these "new" places.
> 
> And that is the diff you see in refs/merge-fix/bw/object-id.  The
> script I use to re-build 'pu' every day (probably I use it three
> times a day on average) knows about that ref.  The script starts
> from the tip of 'master', and for each topic, (1) run "git merge"
> into HEAD, (2) take resolution recorded by "rerere" and (3) if
> merge/fix/$topic exists, cherry-pick it on top to squash into the
> merge made in (2).
> 
> Once I have taught my rerere database and refs/merge-fix/ about this
> merge, it is not too big a deal to redo the merge to adjust to an
> updated 'master' or a new interation of your series because of the
> above mechanism.  And that is why I say it is OK for an updated series
> to be based on the same old 'master'.
> 
> Thanks.
> 
> 

-- 
Brandon Williams

^ permalink raw reply	[relevance 0%]

* Re: [PATCH v6 00/10] The final building block for a faster rebase -i
  @ 2017-07-20 21:38  2% ` Junio C Hamano
  2017-07-22 11:44  0%   ` Johannes Schindelin
  0 siblings, 1 reply; 200+ results
From: Junio C Hamano @ 2017-07-20 21:38 UTC (permalink / raw)
  To: Johannes Schindelin
  Cc: git, Philip Oakley, Jeff King, Phillip Wood, Liam Beguin

Johannes Schindelin <johannes.schindelin@gmx.de> writes:

> Changes since v5:
>
> - replaced a get_sha1() call by a get_oid() call already.
>
> - adjusted to hashmap API changes

Applying this to the tip of 'master' yields exactly the same result
as merging the previous round js/rebase-i-final to the tip of
'master' and then applying merge-fix/js/rebase-i-final to adjust to
the codebase, so the net effect of this reroll is none.  Which is a
good sign, as it means there wasn't any rebase mistake and the evil
merge we've been carrying was a good one.

But at the same time, I prefer to avoid rebasing to newer 'master'
until the codebase starts drifting too far apart, or until a new
feature release is made out of newer 'master'.  This is primarily
because I want dates on commits to mean something---namely, "this
change hasn't seen a need to be updated for 'oops, that was wrong'
since this date".  This use of commit dates as 'priority date'
matters much less for a topic not in 'next', but as a general
principle, my workflow tries to preserve commit dates for all
topics.

For the above reason, I may hold onto this patch series in my inbox
without actually updating js/rebase-i-final topic until the current
cycle is over; please do not mistake it as this new reroll being
ignored.

Thanks.

^ permalink raw reply	[relevance 2%]

* Re: [PATCH v6 00/10] The final building block for a faster rebase -i
  2017-07-20 21:38  2% ` Junio C Hamano
@ 2017-07-22 11:44  0%   ` Johannes Schindelin
  0 siblings, 0 replies; 200+ results
From: Johannes Schindelin @ 2017-07-22 11:44 UTC (permalink / raw)
  To: Junio C Hamano; +Cc: git, Philip Oakley, Jeff King, Phillip Wood, Liam Beguin

Hi Junio,

On Thu, 20 Jul 2017, Junio C Hamano wrote:

> Johannes Schindelin <johannes.schindelin@gmx.de> writes:
> 
> > Changes since v5:
> >
> > - replaced a get_sha1() call by a get_oid() call already.
> >
> > - adjusted to hashmap API changes
> 
> Applying this to the tip of 'master' yields exactly the same result
> as merging the previous round js/rebase-i-final to the tip of
> 'master' and then applying merge-fix/js/rebase-i-final to adjust to
> the codebase, so the net effect of this reroll is none.  Which is a
> good sign, as it means there wasn't any rebase mistake and the evil
> merge we've been carrying was a good one.

Good.

> But at the same time, I prefer to avoid rebasing to newer 'master'
> until the codebase starts drifting too far apart, or until a new
> feature release is made out of newer 'master'.  This is primarily
> because I want dates on commits to mean something---namely, "this
> change hasn't seen a need to be updated for 'oops, that was wrong'
> since this date".  This use of commit dates as 'priority date'
> matters much less for a topic not in 'next', but as a general
> principle, my workflow tries to preserve commit dates for all
> topics.

By that token, commit message updates would also be inappropriate, in
particular when they came from somebody else than the patch author ;-P

As to avoiding a rebase: we can add that to the growing list of things on
which we disagree.

If the author dates really meant anything, we would also have to avoid v2,
v3, v4, ... v226 of patch series. So that flies in the face of trying to
keep the meaning of author dates.

In addition, the development flow I prefer is one that is in harmony with
the modern Continuous Integration style, where topic branches are merged
into a single, always-ready-to-release integration branch.

That means that I always work off of `master`, unless there is a good
reason to base off of `next` or even `pu`. That's to avoid merge
conflicts, to see what really gets applied.

I am *especially* adamant about rebasing to a newer upstream commit when
there are merge conflicts.

Such as is the case here.

> For the above reason, I may hold onto this patch series in my inbox
> without actually updating js/rebase-i-final topic until the current
> cycle is over; please do not mistake it as this new reroll being
> ignored.

You do as you want, of course. But please note that I will not rebase my
topic branches to an ancient revision, especially if that would cause merge
conflicts with the current `master`.

And if there should be another iteration of this wallflower patch series,
I will rebase it to the then-current `master` again [*1*].

Ciao,
Dscho

Footnote *1*: in general, I try to abide by the wishes of maintainers when
contributing code, unless those wishes are contrary to what I consider
correct software development. Like, when in Rome, I will do as the Romans
do. Except when I see them looting a parking meter.

^ permalink raw reply	[relevance 0%]

* Re: [RFC] Git rerere and non-conflicting changes during conflict resolution
  @ 2017-07-25 20:26  3%   ` Junio C Hamano
  2017-07-25 20:40  2%     ` Junio C Hamano
  2017-07-25 20:58  2%     ` Jeff King
  0 siblings, 2 replies; 200+ results
From: Junio C Hamano @ 2017-07-25 20:26 UTC (permalink / raw)
  To: Jeff King; +Cc: Raman Gupta, git

Jeff King <peff@peff.net> writes:

>> 1) Is this a known limitation or is there a reason rerere works in
>> this manner?
>
> Yes, it's known. Rerere works by storing a mapping of conflicted hunks
> to their resolutions. If there's no conflicted hunk, I'm not sure how
> we'd decide what to feed into the mapping to see if there is some
> content to be replaced.

Correct.  

This is not even a limitation but is outside the scope of rerere.
Let's understand that first.

A semantic conflict that requires an evil merge that touches a file
that is not involved in any textual conflict during a merge will
happen even if there is *NO* textual merge conflict.  

Imagine that there is a global variable 'xyzzy' used in many places
in the code, and then a side branch forks from the mainline.  The
mainline renames the variable to 'frotz' in the entire codebase,
while the side branch adds one more place that the variable is used
under its original name.  Then you merge these two branches.  This
will textually merge cleanly if the place the side branch adds a new
mention of 'xyzzy' is textually far from any block of text in the
common ancestor that has been updated on the mainline while these
two branches diverged.

"git checkout mainline && git merge side" will cleanly automerge,
yet the result is not correct.  The new mention of 'xyzzy' added by
the merge needs to be corrected to 'frotz'.

Now we take that as the baseline and further imagine that during the
time these two branches diverged, the mainline also updated some
documentation of something totally unrelated to 'xyzzy' vs 'frotz'
variable.  Perhaps README was updated, or something.  The side
branch also updated the same file in a different way.  This time,
the changes to this same file may result in textual conflict.

"git checkout mainline && git merge side" will result in a conflict,
whose resolution may be recorded by rerere for that file.  It should
be crystal clear that this conflict does *not* have anything to do
with the semantic conflict between 'xyzzy' vs 'frotz'.  

The realization we must draw from the above observation is that what
the "merge-fix" machinery in the Reintegrate script you cited in
your message tries to help, which is the semantic conflict,
fundamentally cannot be tied to any textual merge conflict that may
(or may not) happen.  That is what makes the issue outside the scope
of rerere.

The above is not to say that the need to record and replay such evil
merges to solve semantic conflict does not exist.  Far from it.  It
is just clarifying that it is a wrong approach to try to "teach"
rerere to somehow handle that case as well.

If we wanted to port the "merge-fix" logic, and I do wish it would
happen some day, the update belongs to "git merge".

You were too kind to call the "merge-fix" logic in Reintegrate "the
state of the art", but I am not happy about its limitation.  Here
are the things I wish to have in an ideal version of the "merge-fix"
logic, which does not exist yet:

 * There is a database of "to be cherry-picked" commits, keyed by a
   pair of branch names.  That is, given branches A and B, the
   database will return 0 or more commits that can be cherry-picked.
   The order of branch names in the pair is immaterial, i.e. asking
   the database for cherry-pickable commits keyed by <A, B> and
   keyed by <B, A> will yield the identical set of commits.

 * When merging commit X to commit Y, "git merge" in the ideal world
   does the following:

   - It first does what it currently does, i.e. three-way merge with
     the merge strategy and applying rerere for re-application of an
     earlier resolution of textual conflicts.

   - Then, it looks up the database to find the keys <A, B> where
     A is in X but not in Y, and B is not in X but in Y.
     These commits are cherry-picked and squashed into the result of
     the above.

The intent is that a pair <A, B> represents the mainline and side
branch in the above example, where A renamed 'xyzzy' to 'frotz' and
B added new reference to 'xyzzy'.  And the cherry-pickable commit
found in the database is to tweak the 'xyzzy' B adds into 'frotz'.

I said A and B in the above are branch names, but in the ideal
world, they can be commit object names (possibly in the middle of a
branch), as long as we can reliable update the database's keys every
time "git rebase" etc. rewrites commits.

To populate the database, we'd need a reverse.

 * When merging branch B into branch A (or the other way around) for
   the first time, "git merge" would do what it currently does.

 * The user then concludes the merge to resolve *ONLY* the textual
   conflict, and commit the result.  It is important that no
   additional evil merge to correct for semantic conflicts is done
   in this step.  Note that if the auto-merge cleanly succeeds, this
   step may not even exist.

 * Then the user makes another commit to correct for semantic
   conflicts (aka "merge-fix").

 * Then the user tells Git that semantic conflicts were resolved and
   need to be recorded (just like running "git rerere" manually,
   before "git commit" automatically does it for them these days).
   This will result in the following:

   - The database is updated so that key <A, B> yields the
     "merge-fix" commit;

   - The head is detached at the tip of branch A before the merge;

   - "git merge B" is done again, which _should_ reproduce the state
     immediately after the user committed the "merge-fix";

   - The tip of branch A is reset to the result of the above.

The merge-fix logic in Reintegrate is a poor-man's emulation of the
above ideal.  A value its database yields is not a set of commits,
but a single commit, and instead of getting keyed by a pair of
branch names, the database is keyed by a single branch name
(i.e. recording "I had trouble when merging this branch" without
saying "... to the integration branch that already had this other
branch"), so the look-up does not have to do "A is in X but not in
Y, and B is not in X but in Y".  

It is still usable but the database need to be reorganized every
time the order of topics merged to 'pu' is changed.



^ permalink raw reply	[relevance 3%]

* Re: [RFC] Git rerere and non-conflicting changes during conflict resolution
  2017-07-25 20:26  3%   ` Junio C Hamano
@ 2017-07-25 20:40  2%     ` Junio C Hamano
  2017-07-25 20:58  2%     ` Jeff King
  1 sibling, 0 replies; 200+ results
From: Junio C Hamano @ 2017-07-25 20:40 UTC (permalink / raw)
  To: Jeff King; +Cc: Raman Gupta, git

Junio C Hamano <gitster@pobox.com> writes:

> To populate the database, we'd need a reverse.
> ...
>  * Then the user tells Git that semantic conflicts were resolved and
>    need to be recorded (just like running "git rerere" manually,
>    before "git commit" automatically does it for them these days).
>    This will result in the following:
>
>    - The database is updated so that key <A, B> yields the
>      "merge-fix" commit;
> ...

I probably should have been aiming for stars, as I were outlining
the ideal merge-fix logic.  The key <A, B> is merely a default, and
the worst one at that.  There should be a way for the user to tell
which exact pair of commits (i.e. another side branch that was
merged earlier to the mainline A that renamed 'xyzzy' to 'frotz'
wholesale, and the exact commit on the side branch B that added an
extra mention of 'xyzzy').  

If the logic can figure out what these two commits are without
user's help, mechanically by only looking at the merge-fix commit,
that would be even better.  But I do not believe in miracles, so...


^ permalink raw reply	[relevance 2%]

* Re: [RFC] Git rerere and non-conflicting changes during conflict resolution
  2017-07-25 20:26  3%   ` Junio C Hamano
  2017-07-25 20:40  2%     ` Junio C Hamano
@ 2017-07-25 20:58  2%     ` Jeff King
  2017-07-26  7:14  3%       ` Junio C Hamano
  2017-07-26  8:06  3%       ` Junio C Hamano
  1 sibling, 2 replies; 200+ results
From: Jeff King @ 2017-07-25 20:58 UTC (permalink / raw)
  To: Junio C Hamano; +Cc: Raman Gupta, git

On Tue, Jul 25, 2017 at 01:26:34PM -0700, Junio C Hamano wrote:

> This is not even a limitation but is outside the scope of rerere.
> Let's understand that first.
> [...]
> If we wanted to port the "merge-fix" logic, and I do wish it would
> happen some day, the update belongs to "git merge".

Looks like this crossed with my latest email. Overall I agree with you.

I almost said the same thing about scope initially, but I decided it
doesn't really matter. From the user's perspective there may be a tool X
that replays bits of a previous merge result. And that task can be
subdivided into replaying conflict resolution and replaying merge-fixes.

From the user's perspective, calling X "rerere" would probably be OK[1].
But from an implementation perspective (and to keep the existing
plumbing available and unchanged), it probably makes sense to call it
something else, and have it run both rerere and a new plumbing command
to do the merge-fix work (or call it nothing, and assume that users will
either touch the plumbing directly or will use "git merge" to trigger
both).

So if you want to shut down immediately the idea that this would be
bolted onto rerere, I can support that. There are ways of doing it that
would make sense to combine with rerere (like the "tying fixups to
conflict resolution" sketch I gave in the other email), but I agree they
will end up fundamentally hacky (because of the exact "you may not even
have textual conflicts" I mentioned).

The only part I'd disagree with above is that this belongs to git-merge.
I think it should be its own plumbing tool that merge calls alongside
rerere. ;)

>    - Then, it looks up the database to find the keys <A, B> where
>      A is in X but not in Y, and B is not in X but in Y.
>      These commits are cherry-picked and squashed into the result of
>      the above.

I think this is the crux of it. I mentioned in my other email that what
we really want is some way to say "this is roughly the same merge".
The Reintegrate script does it with the topic branch name and an
implicit "merging up to an integration branch".

Not having thought too hard about it yet, this containing relationship
seems like the right direction. I guess you'd do the lookup by computing
the merge-base M of <X,Y> (which we already know anyway), walking M..X
and looking for any entries which mention those commits (in either A or
B slots of the entry), and then similarly narrowing it according to
M..Y.

Hrm. That doesn't quite work, though. Because if your <A,B> are the
merge, then merging a topic to next will get an "A" that is a merge
commit from next. But that commit will never end up in master. What's
causing the conflict is really some "A" that is in the history between
the merge base and "A" (but we don't know which).

So you'd almost have to do an intersection of the left side of "$(git
merge-base A B)..A" with what's in X and Y (with respect to their merge
base). Err, maybe vice versa. But the point is that we're looking for
overlapping set unions, I think, not the presence of particular tips.

> I said A and B in the above are branch names, but in the ideal
> world, they can be commit object names (possibly in the middle of a
> branch), as long as we can reliable update the database's keys every
> time "git rebase" etc. rewrites commits.

What if instead of commit hashes we used patch ids?

There's one trick there, which is that merges don't have a well-defined
commit id. We could use its actual commit id in that case. That would
work OK in practice for a workflow like git.git's, because the merge
commits are never rewritten. But it would fall down if people do mixed
rebases and merges on their topic branches.

> To populate the database, we'd need a reverse.
> 
>  * When merging branch B into branch A (or the other way around) for
>    the first time, "git merge" would do what it currently does.
> 
>  * The user then concludes the merge to resolve *ONLY* the textual
>    conflict, and commit the result.  It is important that no
>    additional evil merge to correct for semantic conflicts is done
>    in this step.  Note that if the auto-merge cleanly succeeds, this
>    step may not even exist.
> 
>  * Then the user makes another commit to correct for semantic
>    conflicts (aka "merge-fix").

I think it's asking a lot for users to handle the textual conflicts and
semantic ones separately. It would be nice if we could tell them apart
automatically (and I think we can based on what isn't part of the
conflict resolution).

That still ends up with one giant "fixup" commit. But I don't know how
else you'd do it. I could make several commits, but we still don't know
how to attribute them to anything but the mass <A,B> merge. We don't
know which commits were responsible for which fixups (and I wouldn't
want to ask the user to figure it out), so the best we can do is apply
them all.

-Peff

^ permalink raw reply	[relevance 2%]

* Re: [RFC] Git rerere and non-conflicting changes during conflict resolution
  2017-07-25 20:58  2%     ` Jeff King
@ 2017-07-26  7:14  3%       ` Junio C Hamano
  2017-07-27 21:01  3%         ` Junio C Hamano
  2017-07-26  8:06  3%       ` Junio C Hamano
  1 sibling, 1 reply; 200+ results
From: Junio C Hamano @ 2017-07-26  7:14 UTC (permalink / raw)
  To: Jeff King; +Cc: Raman Gupta, git

Jeff King <peff@peff.net> writes:

> From the user's perspective, calling X "rerere" would probably be OK[1].
> But from an implementation perspective (and to keep the existing
> plumbing available and unchanged), it probably makes sense to call it
> something else, and have it run both rerere and a new plumbing command
> to do the merge-fix work (or call it nothing, and assume that users will
> either touch the plumbing directly or will use "git merge" to trigger
> both).
> ...
> I think it should be its own plumbing tool that merge calls alongside
> rerere. ;)

As long as we use the database keyed with <A,B> and take the merge
base into account, "git am" and "git cherry-pick" would not be able
to use the merge-fix machinery, so in that sense, calling X "rerere"
would not be OK, but I agree with your general sentiment about the
UI visible to the end users.  Just like "rerere" started with a
small step to avoid automating things too much and then later became
almost invisible for normal cases because we managed to automate it
reasonably well and integrate it into mergy operations, we may be
able to do the same for merge-fix machinery.  My "this belongs to
'merge'" is primarily coming from it---it might be reusable in other
mergy operations with some fundamental changes, but I envision that
the primarly and only user of that X would initially be 'merge'.

> Not having thought too hard about it yet, this containing relationship
> seems like the right direction. I guess you'd do the lookup by computing
> the merge-base M of <X,Y> (which we already know anyway), walking M..X
> and looking for any entries which mention those commits (in either A or
> B slots of the entry), and then similarly narrowing it according to
> M..Y.

Yes, every time I look at the Reintegrate script, I try to think of
an efficient implementation but do not find anything better than the
left-right walk over X...Y range, so that is my conclusion after
having thought about it very hard as well ;-)

> What if instead of commit hashes we used patch ids?

Now you may be onto something.  While we aim at the ultimately automated
ideal that would catch the maximal cases, for the earlier 'xyzzy
turns into frotz' example, the minimal cue to identify one side of
the pair that keys the "change this new instance of xyzzy into
frotz, too" merge-fix is a hunk like this:

    -const char *xyzzy;
    +const char *frotz;

It does not matter what other changes also appear in the same
commit, and my original "branch name" is way too broad, and my
previous "ideal" which is "a single problematic commit" is still
broader than necessary.  Well, patch-id identifies the entire change
contained in a single commit, so it is still too broad, but if we
can narrow it down to a single hunk like that, perhaps we can use it
as one side of the key.

And the other side of the key is naturally a hunk like this:

    +	printf("%s\n", xyzzy);

i.e. a new use of xyzzy appears where it didn't exist before.  And
when we merge two branches, one of which has one half of the key
(i.e. "const char *xyzzy;" turned into "const char *frotz"), and the
other has the other half of the key (i.e. "printf xyzzy" is added),
then we'd apply a patch that tells us to do this:

    -	printf("%s\n", xyzzy);
    +	printf("%s\n", frotz);

i.e. that patch would be the value in the database keyed by the pair
of two previous hunks.

> I think it's asking a lot for users to handle the textual conflicts and
> semantic ones separately. It would be nice if we could tell them apart
> automatically (and I think we can based on what isn't part of the
> conflict resolution).

After thinking about this a bit more, I realized that it is possible
to mechanically sift a human generated resolution that has both
textual conflict resolution (which will be handled by "rerere") and
semantic one (which needs the merge-fix machinery) into two, without
requiring the user to make two separate commits.

The key trick is that "rerere" is capable of recording and replaying
semantic conflict resolution made to a file that happens to have
textual conflict just fine.  Because rerere database records the
preimage (i.e. with conflict markers) and postimage (i.e. the final
resolution for the file) as an entire file contents, it can do 3-way
merge for parts of the same file that is away from any conflicted
region.

If you tell contrib/rerere-train.sh to learn from "pu^{/^Merge
branch 'bp/fsmonitor' into pu}", you'll see what I mean.

  $ git show "pu^{/^Merge branch 'bp/fsmonitor' into pu}" compat/bswap.h

shows the result of such resolution.  Early part of the combined
diff shown by the above command comes from textual conflict
resolution, but there is a new implementation of inline version of
get_be64 that has become necessary but did not exist in either of
the branches getting merged, which is shown as an evil merge.

So the way to automatically sift an existing merge into textual
conflict resolution (i.e. automatable with "rerere") and semantic
evil merge-fix is to first try to recreate the merge and enumerate
the paths that get conflicts.  Then resolve these paths by grabbing
the resolved result for these paths that get textual conflicts out
of the original merge.  That gives us the textual part (we can run
"git rerere" at this point to store the resolution away to the
rerere database---which is essentially what contrib/rerere-train
does).

There will be difference between the result of the above and the
original merge commit.  The paths that are different are all outside
these conflicted paths, and they are what we want in the second
commit, i.e. the semantic evil merge-fix, which will be the value
for the merge-fix database.

So that part is easily automatable.  

It is much harder to come up with a way to index into the merge-fix
database.  We can "punt" and use the same index scheme as the
Reintegrate script (i.e. key it with the name of the branch being
merged, which can be read from the original merge) as the initial
approximation, and that would already be much better than what
Reintegrate script currently does, in that the recording part is
much more automated (in the workflow I use the Reintegrate script,
the side that records a merge-fix initially is entirely manual).




^ permalink raw reply	[relevance 3%]

* Re: [RFC] Git rerere and non-conflicting changes during conflict resolution
  2017-07-25 20:58  2%     ` Jeff King
  2017-07-26  7:14  3%       ` Junio C Hamano
@ 2017-07-26  8:06  3%       ` Junio C Hamano
  1 sibling, 0 replies; 200+ results
From: Junio C Hamano @ 2017-07-26  8:06 UTC (permalink / raw)
  To: Jeff King; +Cc: Raman Gupta, git

Jeff King <peff@peff.net> writes:

> Hrm. That doesn't quite work, though. Because if your <A,B> are the
> merge, then merging a topic to next will get an "A" that is a merge
> commit from next. But that commit will never end up in master. What's
> causing the conflict is really some "A" that is in the history between
> the merge base and "A" (but we don't know which).

There may be a misunderstanding.  When I said the key <A,B> is a
pair of branch names, I didn't mean 'A' to be the name of an
integration branch (e.g. 'pu') and 'B' to be the name of a topic.
Rather, both 'A' and 'B' are the names of topic branches.  

IOW, instead of having refs/merge-fix/sd/branch-copy that says "I
know when I merge sd/branch-copy to pu or jch, there is a semantic
conflict with some unnamed topic that is likely to be already in
there", i.e. keying with only a single topic name, the ideal I
presented would say 'sd/branch-copy and mh/packed-ref-store topics
are both by themselves OK, but when merged together, the end result
of textual merge needs to be further fixed up by cherry-picking this
change', by keying a change with a pair of topic names,
sd/branch-copy (which introduces a new method in the ref backend
vtable) and mh/packed-ref-store (which adds a new ref backend).  The
latter does not know the need for the new method, and the former
does not know the need to implement its new method in a new backend,
so a merge needs a trivial implementation of the new method added to
the new backend, which is what refs/merge-fix/sd/branch-copy does.

And better yet, instead of A=sd/branch-copy B=mh/packed-ref-store,
we could point at the exact commit on each of these branches that
introduce the semantic conflict.  I would probably pick these two

  A=52d59cc6 ("branch: add a --copy (-c) option to go with --move (-m)", 2017-06-18)
  B=67be7c5a ("packed-backend: new module for handling packed references", 2017-06-23)

so when we are on commit X that has A but not B, and are trying to
merge branch Y that has B but not A, we want the merge-fix to kick
in.  Walking "rev-list --left-right X...Y" and noticing A and B in
the output would be a way to notice it.


[footnote]

*1* https://github.com/gitster/git/ should mirror these refs in the
    refs/merge-fix/ hierarchymentioned in the body of this article.



^ permalink raw reply	[relevance 3%]

* Re: [RFC] Git rerere and non-conflicting changes during conflict resolution
  2017-07-26  7:14  3%       ` Junio C Hamano
@ 2017-07-27 21:01  3%         ` Junio C Hamano
  0 siblings, 0 replies; 200+ results
From: Junio C Hamano @ 2017-07-27 21:01 UTC (permalink / raw)
  To: Jeff King; +Cc: Raman Gupta, git

Junio C Hamano <gitster@pobox.com> writes:

> Jeff King <peff@peff.net> writes:
>
>> From the user's perspective, calling X "rerere" would probably be OK[1].
>> But from an implementation perspective (and to keep the existing
>> plumbing available and unchanged), it probably makes sense to call it
>> something else, and have it run both rerere and a new plumbing command
>> to do the merge-fix work (or call it nothing, and assume that users will
>> either touch the plumbing directly or will use "git merge" to trigger
>> both).
>> ...
>> I think it should be its own plumbing tool that merge calls alongside
>> rerere. ;)
>
> As long as we use the database keyed with <A,B> and take the merge
> base into account, "git am" and "git cherry-pick" would not be able
> to use the merge-fix machinery, so in that sense, calling X "rerere"
> would not be OK, but I agree with your general sentiment about the
> UI visible to the end users.

Actually, I guess "cherry-pick" could use it if we think hard and
long enough and come up with an ideal scheme to compute the index
into the merge-fix database.

Imagine this topology:

       A---o---o---...        topic #1
      /
 o---o---o---...              mainline
      \
       o---B---o---C---...    topic #2

where topic #1 renames 'xyzzy' to 'frotz' at commit A, and topic #2
adds a new mention of 'xyzzy' in file F at commit B and another in
file E at commit C.

In the ideal world, we would have two merge-fix database entries,
one that turns 'xyzzy' in file F to 'frotz' that is keyed by the
pair of commits <A,B>, and the other that does the same in file E
that is keyed by <A,C>.  When merging the topic #1 and the topic #2
together, or when merging the topic #2 to a mainline that already
has merged the topic #1, the merge-fix machinery notices that one
side has A but not B nor C, and the other side has B and C but not
A, and finds these two merge-fixes and applies on top of the textual
merge.

If we are cherry-picking C to something that already has A, then, we
should be able to notice that the history that receives the cherry-pick
has A but not C, and C, which is being picked, does not have A, and
decide that merge-fix <A,C> is relevant.

If we do this purely with commit object name, it will still not work
if we cherry-pick A to mainline and then we cherry-pick C.  The
mainline may hae change from A but does not have the exact commit A.

Which brings us back to your earlier idea to use something like
patch-id to identify these individual changes.  I am not sure how we
can structure the merge-fix database so that we can efficiently find
which "changes" are already on a branch.

^ permalink raw reply	[relevance 3%]

* [PATCH] builtin/merge: honor commit-msg hook for merges
@ 2017-09-05 21:01  2% Stefan Beller
  2017-09-05 21:38  0% ` Junio C Hamano
  0 siblings, 1 reply; 200+ results
From: Stefan Beller @ 2017-09-05 21:01 UTC (permalink / raw)
  To: git; +Cc: Stefan Beller

Similar to 65969d43d1 (merge: honor prepare-commit-msg hook, 2011-02-14)
merge should also honor the commit-msg hook; the reason is the same as
in that commit: When a merge is stopped due to conflicts or --no-commit,
the subsequent commit calls the commit-msg hook.  However, it is not
called after a clean merge. Fix this inconsistency by invoking the hook
after clean merges as well.

This change is motivated by Gerrits commit-msg hook to install a change-id
trailer into the commit message. Without such a change id, Gerrit refuses
to accept (merge) commits by default, such that the inconsistency of
(not) running commit-msg hook between commit and merge leads to confusion
and might block people from getting their work done.

Signed-off-by: Stefan Beller <sbeller@google.com>
---
 builtin/merge.c            |  8 ++++++++
 t/t7504-commit-msg-hook.sh | 45 +++++++++++++++++++++++++++++++++++++++++----
 2 files changed, 49 insertions(+), 4 deletions(-)

diff --git a/builtin/merge.c b/builtin/merge.c
index 7df3fe3927..087efd560d 100644
--- a/builtin/merge.c
+++ b/builtin/merge.c
@@ -73,6 +73,7 @@ static int show_progress = -1;
 static int default_to_upstream = 1;
 static int signoff;
 static const char *sign_commit;
+static int no_verify;
 
 static struct strategy all_strategy[] = {
 	{ "recursive",  DEFAULT_TWOHEAD | NO_TRIVIAL },
@@ -236,6 +237,7 @@ static struct option builtin_merge_options[] = {
 	  N_("GPG sign commit"), PARSE_OPT_OPTARG, NULL, (intptr_t) "" },
 	OPT_BOOL(0, "overwrite-ignore", &overwrite_ignore, N_("update ignored files (default)")),
 	OPT_BOOL(0, "signoff", &signoff, N_("add Signed-off-by:")),
+	OPT_BOOL(0, "no-verify", &no_verify, N_("bypass pre-commit and commit-msg hooks")),
 	OPT_END()
 };
 
@@ -780,6 +782,12 @@ static void prepare_to_commit(struct commit_list *remoteheads)
 		if (launch_editor(git_path_merge_msg(), NULL, NULL))
 			abort_commit(remoteheads, NULL);
 	}
+
+	if (!no_verify && run_commit_hook(0 < option_edit, get_index_file(),
+					  "commit-msg",
+					  git_path_merge_msg(), NULL))
+		abort_commit(remoteheads, NULL);
+
 	read_merge_msg(&msg);
 	strbuf_stripspace(&msg, 0 < option_edit);
 	if (!msg.len)
diff --git a/t/t7504-commit-msg-hook.sh b/t/t7504-commit-msg-hook.sh
index 88d4cda299..1cd54af3cc 100755
--- a/t/t7504-commit-msg-hook.sh
+++ b/t/t7504-commit-msg-hook.sh
@@ -101,6 +101,10 @@ cat > "$HOOK" <<EOF
 exit 1
 EOF
 
+commit_msg_is () {
+	test "$(git log --pretty=format:%s%b -1)" = "$1"
+}
+
 test_expect_success 'with failing hook' '
 
 	echo "another" >> file &&
@@ -135,6 +139,32 @@ test_expect_success '--no-verify with failing hook (editor)' '
 
 '
 
+test_expect_success 'merge fails with failing hook' '
+
+	test_when_finished "git branch -D newbranch" &&
+	test_when_finished "git checkout -f master" &&
+	git checkout --orphan newbranch &&
+	: >file2 &&
+	git add file2 &&
+	git commit --no-verify file2 -m in-side-branch &&
+	test_must_fail git merge --allow-unrelated-histories master &&
+	commit_msg_is "in-side-branch" # HEAD before merge
+
+'
+
+test_expect_success 'merge bypasses failing hook with --no-verify' '
+
+	test_when_finished "git branch -D newbranch" &&
+	test_when_finished "git checkout -f master" &&
+	git checkout --orphan newbranch &&
+	: >file2 &&
+	git add file2 &&
+	git commit --no-verify file2 -m in-side-branch &&
+	git merge --no-verify --allow-unrelated-histories master &&
+	commit_msg_is "Merge branch '\''master'\'' into newbranch"
+'
+
+
 chmod -x "$HOOK"
 test_expect_success POSIXPERM 'with non-executable hook' '
 
@@ -178,10 +208,6 @@ exit 0
 EOF
 chmod +x "$HOOK"
 
-commit_msg_is () {
-	test "$(git log --pretty=format:%s%b -1)" = "$1"
-}
-
 test_expect_success 'hook edits commit message' '
 
 	echo "additional" >> file &&
@@ -217,7 +243,17 @@ test_expect_success "hook doesn't edit commit message (editor)" '
 	echo "more plus" > FAKE_MSG &&
 	GIT_EDITOR="\"\$FAKE_EDITOR\"" git commit --no-verify &&
 	commit_msg_is "more plus"
+'
 
+test_expect_success 'hook called in git-merge picks up commit message' '
+	test_when_finished "git branch -D newbranch" &&
+	test_when_finished "git checkout -f master" &&
+	git checkout --orphan newbranch &&
+	: >file2 &&
+	git add file2 &&
+	git commit --no-verify file2 -m in-side-branch &&
+	git merge --allow-unrelated-histories master &&
+	commit_msg_is "new message"
 '
 
 # set up fake editor to replace `pick` by `reword`
@@ -237,4 +273,5 @@ test_expect_success 'hook is called for reword during `rebase -i`' '
 
 '
 
+
 test_done
-- 
2.14.0.rc0.3.g6c2e499285


^ permalink raw reply related	[relevance 2%]

* Re: [PATCH] builtin/merge: honor commit-msg hook for merges
  2017-09-05 21:01  2% [PATCH] builtin/merge: honor commit-msg hook for merges Stefan Beller
@ 2017-09-05 21:38  0% ` Junio C Hamano
  2017-09-05 23:29  2%   ` [PATCHv2] " Stefan Beller
  2017-09-07 22:04  2%   ` [PATCHv3] " Stefan Beller
  0 siblings, 2 replies; 200+ results
From: Junio C Hamano @ 2017-09-05 21:38 UTC (permalink / raw)
  To: Stefan Beller; +Cc: git

Stefan Beller <sbeller@google.com> writes:

> Similar to 65969d43d1 (merge: honor prepare-commit-msg hook, 2011-02-14)
> merge should also honor the commit-msg hook; the reason is the same as
> in that commit: When a merge is stopped due to conflicts or --no-commit,
> the subsequent commit calls the commit-msg hook.  However, it is not
> called after a clean merge. Fix this inconsistency by invoking the hook
> after clean merges as well.

The above reads better without "; the reason is the same as in that
commit"---"Similar to", combined with the clean and concise
explanation after the colon you have, sufficiently justifies why
this is a good change.  

Excellent job spotting the precedent and making it consistent ;-).

> This change is motivated by Gerrits commit-msg hook to install a change-id

s/Gerrits/Gerrit's/ perhaps?

> trailer into the commit message. Without such a change id, Gerrit refuses

I do not live in Gerrit land and I do not know which one is the more
preferred one, but be consistent between "change-id" and "change
id".

> to accept (merge) commits by default, such that the inconsistency of
> (not) running commit-msg hook between commit and merge leads to confusion
> and might block people from getting their work done.

Yup.  Nicely explained.

I didn't check how "merge --continue" is implemented, but we need to
behave exactly the same way over there, too.  Making sure that it is
a case in t7504 may be a good idea, in addition to the test you
added.

> Signed-off-by: Stefan Beller <sbeller@google.com>
> ---
>  builtin/merge.c            |  8 ++++++++
>  t/t7504-commit-msg-hook.sh | 45 +++++++++++++++++++++++++++++++++++++++++----
>  2 files changed, 49 insertions(+), 4 deletions(-)
>
> diff --git a/builtin/merge.c b/builtin/merge.c
> index 7df3fe3927..087efd560d 100644
> --- a/builtin/merge.c
> +++ b/builtin/merge.c
> @@ -73,6 +73,7 @@ static int show_progress = -1;
>  static int default_to_upstream = 1;
>  static int signoff;
>  static const char *sign_commit;
> +static int no_verify;
>  
>  static struct strategy all_strategy[] = {
>  	{ "recursive",  DEFAULT_TWOHEAD | NO_TRIVIAL },
> @@ -236,6 +237,7 @@ static struct option builtin_merge_options[] = {
>  	  N_("GPG sign commit"), PARSE_OPT_OPTARG, NULL, (intptr_t) "" },
>  	OPT_BOOL(0, "overwrite-ignore", &overwrite_ignore, N_("update ignored files (default)")),
>  	OPT_BOOL(0, "signoff", &signoff, N_("add Signed-off-by:")),
> +	OPT_BOOL(0, "no-verify", &no_verify, N_("bypass pre-commit and commit-msg hooks")),

This allows "--no-no-verify", which may want to be eventually
addressed (either by changing the code not to accept, or declaring
that it is an intended behaviour); I do not offhand know for sure but I
strong suspect "commit" shares the same issue, in which case this
patch is perfectly fine and addressing "--no-no-verify" should be
done for both of them in a separate follow-up topic.  #leftoverbits

Thanks.  I'll be online starting today, but please expect slow
responses for a few days as there is significant backlog.


^ permalink raw reply	[relevance 0%]

* [PATCHv2] builtin/merge: honor commit-msg hook for merges
  2017-09-05 21:38  0% ` Junio C Hamano
@ 2017-09-05 23:29  2%   ` Stefan Beller
  2017-09-07 22:04  2%   ` [PATCHv3] " Stefan Beller
  1 sibling, 0 replies; 200+ results
From: Stefan Beller @ 2017-09-05 23:29 UTC (permalink / raw)
  To: gitster; +Cc: git, sbeller

Similar to 65969d43d1 (merge: honor prepare-commit-msg hook, 2011-02-14)
merge should also honor the commit-msg hook: When a merge is stopped due
to conflicts or --no-commit, the subsequent commit calls the commit-msg
hook.  However, it is not called after a clean merge. Fix this
inconsistency by invoking the hook after clean merges as well.

This change is motivated by Gerrit's commit-msg hook to install a ChangeId
trailer into the commit message. Without such a ChangeId, Gerrit refuses
to accept any commit by default, such that the inconsistency of (not)
running the commit-msg hook between commit and merge leads to confusion
and might block people from getting their work done.

As the githooks man page is very vocal about the possibility of skipping
the commit-msg hook via the --no-verify option, implement the option
in merge, too.

Signed-off-by: Stefan Beller <sbeller@google.com>
---

addressed all but one issues.

Junio writes:
> I didn't check how "merge --continue" is implemented, but we need to
> behave exactly the same way over there, too.  Making sure that it is
> a case in t7504 may be a good idea, in addition to the test you
> added.

After inspection of the code I do not think it is a good idea, because
(a) it clutters the test suite with something "obvious" for now,
    the call to cmd_commit will be the same as git-commit on the
    command line and
(b) piping through --[no-]verify would either introduce irregularities
    ("Why do we pipe through --no-verify, when --sign-off is more important?")
    or miss important options to pipe through: 

	static int continue_current_merge;
...
	OPT_BOOL(0, "continue", &continue_current_merge,
		N_("continue the current in-progress merge")),
...
	if (continue_current_merge) {
		int nargc = 1;
		const char *nargv[] = {"commit", NULL};

		if (orig_argc != 2)
			usage_msg_opt(_("--continue expects no arguments"),
			      builtin_merge_usage, builtin_merge_options);

		/* Invoke 'git commit' */
		ret = cmd_commit(nargc, nargv, prefix);
		goto done;
	}

Thanks,
Stefan

 builtin/merge.c            |  8 ++++++++
 t/t7504-commit-msg-hook.sh | 45 +++++++++++++++++++++++++++++++++++++++++----
 2 files changed, 49 insertions(+), 4 deletions(-)

diff --git a/builtin/merge.c b/builtin/merge.c
index 7df3fe3927..780435d7a1 100644
--- a/builtin/merge.c
+++ b/builtin/merge.c
@@ -73,6 +73,7 @@ static int show_progress = -1;
 static int default_to_upstream = 1;
 static int signoff;
 static const char *sign_commit;
+static int verify_msg = 1;
 
 static struct strategy all_strategy[] = {
 	{ "recursive",  DEFAULT_TWOHEAD | NO_TRIVIAL },
@@ -236,6 +237,7 @@ static struct option builtin_merge_options[] = {
 	  N_("GPG sign commit"), PARSE_OPT_OPTARG, NULL, (intptr_t) "" },
 	OPT_BOOL(0, "overwrite-ignore", &overwrite_ignore, N_("update ignored files (default)")),
 	OPT_BOOL(0, "signoff", &signoff, N_("add Signed-off-by:")),
+	OPT_BOOL(0, "verify", &verify_msg, N_("verify commit-msg hook")),
 	OPT_END()
 };
 
@@ -780,6 +782,12 @@ static void prepare_to_commit(struct commit_list *remoteheads)
 		if (launch_editor(git_path_merge_msg(), NULL, NULL))
 			abort_commit(remoteheads, NULL);
 	}
+
+	if (verify_msg && run_commit_hook(0 < option_edit, get_index_file(),
+					  "commit-msg",
+					  git_path_merge_msg(), NULL))
+		abort_commit(remoteheads, NULL);
+
 	read_merge_msg(&msg);
 	strbuf_stripspace(&msg, 0 < option_edit);
 	if (!msg.len)
diff --git a/t/t7504-commit-msg-hook.sh b/t/t7504-commit-msg-hook.sh
index 88d4cda299..1cd54af3cc 100755
--- a/t/t7504-commit-msg-hook.sh
+++ b/t/t7504-commit-msg-hook.sh
@@ -101,6 +101,10 @@ cat > "$HOOK" <<EOF
 exit 1
 EOF
 
+commit_msg_is () {
+	test "$(git log --pretty=format:%s%b -1)" = "$1"
+}
+
 test_expect_success 'with failing hook' '
 
 	echo "another" >> file &&
@@ -135,6 +139,32 @@ test_expect_success '--no-verify with failing hook (editor)' '
 
 '
 
+test_expect_success 'merge fails with failing hook' '
+
+	test_when_finished "git branch -D newbranch" &&
+	test_when_finished "git checkout -f master" &&
+	git checkout --orphan newbranch &&
+	: >file2 &&
+	git add file2 &&
+	git commit --no-verify file2 -m in-side-branch &&
+	test_must_fail git merge --allow-unrelated-histories master &&
+	commit_msg_is "in-side-branch" # HEAD before merge
+
+'
+
+test_expect_success 'merge bypasses failing hook with --no-verify' '
+
+	test_when_finished "git branch -D newbranch" &&
+	test_when_finished "git checkout -f master" &&
+	git checkout --orphan newbranch &&
+	: >file2 &&
+	git add file2 &&
+	git commit --no-verify file2 -m in-side-branch &&
+	git merge --no-verify --allow-unrelated-histories master &&
+	commit_msg_is "Merge branch '\''master'\'' into newbranch"
+'
+
+
 chmod -x "$HOOK"
 test_expect_success POSIXPERM 'with non-executable hook' '
 
@@ -178,10 +208,6 @@ exit 0
 EOF
 chmod +x "$HOOK"
 
-commit_msg_is () {
-	test "$(git log --pretty=format:%s%b -1)" = "$1"
-}
-
 test_expect_success 'hook edits commit message' '
 
 	echo "additional" >> file &&
@@ -217,7 +243,17 @@ test_expect_success "hook doesn't edit commit message (editor)" '
 	echo "more plus" > FAKE_MSG &&
 	GIT_EDITOR="\"\$FAKE_EDITOR\"" git commit --no-verify &&
 	commit_msg_is "more plus"
+'
 
+test_expect_success 'hook called in git-merge picks up commit message' '
+	test_when_finished "git branch -D newbranch" &&
+	test_when_finished "git checkout -f master" &&
+	git checkout --orphan newbranch &&
+	: >file2 &&
+	git add file2 &&
+	git commit --no-verify file2 -m in-side-branch &&
+	git merge --allow-unrelated-histories master &&
+	commit_msg_is "new message"
 '
 
 # set up fake editor to replace `pick` by `reword`
@@ -237,4 +273,5 @@ test_expect_success 'hook is called for reword during `rebase -i`' '
 
 '
 
+
 test_done
-- 
2.14.0.rc0.3.g6c2e499285


^ permalink raw reply related	[relevance 2%]

* [PATCHv3] builtin/merge: honor commit-msg hook for merges
  2017-09-05 21:38  0% ` Junio C Hamano
  2017-09-05 23:29  2%   ` [PATCHv2] " Stefan Beller
@ 2017-09-07 22:04  2%   ` Stefan Beller
  1 sibling, 0 replies; 200+ results
From: Stefan Beller @ 2017-09-07 22:04 UTC (permalink / raw)
  To: gitster; +Cc: git, sbeller

Similar to 65969d43d1 (merge: honor prepare-commit-msg hook, 2011-02-14)
merge should also honor the commit-msg hook: When a merge is stopped due
to conflicts or --no-commit, the subsequent commit calls the commit-msg
hook.  However, it is not called after a clean merge. Fix this
inconsistency by invoking the hook after clean merges as well.

This change is motivated by Gerrit's commit-msg hook to install a ChangeId
trailer into the commit message. Without such a ChangeId, Gerrit refuses
to accept any commit by default, such that the inconsistency of (not)
running the commit-msg hook between commit and merge leads to confusion
and might block people from getting their work done.

As the githooks man page is very vocal about the possibility of skipping
the commit-msg hook via the --no-verify option, implement the option
in merge, too.

'git merge --continue' is currently implemented as calling cmd_commit
with no further arguments. This works for most other merge related options,
such as demonstrated via the --allow-unrelated-histories flag in the
test. The --no-verify option however is not remembered across invocations
of git-merge. Originally the author assumed an alternative in which the
'git merge --continue' command accepts the --no-verify flag, but that
opens up the discussion which flags are allows to the continued merge
command and which must be given in the first invocation.

Signed-off-by: Stefan Beller <sbeller@google.com>
---

> I didn't check how "merge --continue" is implemented, but we need to
> behave exactly the same way over there, too.  Making sure that it is
> a case in t7504 may be a good idea, in addition to the test you
> added.

First I understood this as if we'd want to support
'git merge --continue --no-verify' eventually, but by now I think we want
to 'carry over' the meaning from the first invocation of git-merge.

For that I added a test.

Thanks,
Stefan

 builtin/merge.c            |  8 ++++++
 t/t7504-commit-msg-hook.sh | 64 +++++++++++++++++++++++++++++++++++++++++++---
 2 files changed, 68 insertions(+), 4 deletions(-)

diff --git a/builtin/merge.c b/builtin/merge.c
index 7df3fe3927..780435d7a1 100644
--- a/builtin/merge.c
+++ b/builtin/merge.c
@@ -73,6 +73,7 @@ static int show_progress = -1;
 static int default_to_upstream = 1;
 static int signoff;
 static const char *sign_commit;
+static int verify_msg = 1;
 
 static struct strategy all_strategy[] = {
 	{ "recursive",  DEFAULT_TWOHEAD | NO_TRIVIAL },
@@ -236,6 +237,7 @@ static struct option builtin_merge_options[] = {
 	  N_("GPG sign commit"), PARSE_OPT_OPTARG, NULL, (intptr_t) "" },
 	OPT_BOOL(0, "overwrite-ignore", &overwrite_ignore, N_("update ignored files (default)")),
 	OPT_BOOL(0, "signoff", &signoff, N_("add Signed-off-by:")),
+	OPT_BOOL(0, "verify", &verify_msg, N_("verify commit-msg hook")),
 	OPT_END()
 };
 
@@ -780,6 +782,12 @@ static void prepare_to_commit(struct commit_list *remoteheads)
 		if (launch_editor(git_path_merge_msg(), NULL, NULL))
 			abort_commit(remoteheads, NULL);
 	}
+
+	if (verify_msg && run_commit_hook(0 < option_edit, get_index_file(),
+					  "commit-msg",
+					  git_path_merge_msg(), NULL))
+		abort_commit(remoteheads, NULL);
+
 	read_merge_msg(&msg);
 	strbuf_stripspace(&msg, 0 < option_edit);
 	if (!msg.len)
diff --git a/t/t7504-commit-msg-hook.sh b/t/t7504-commit-msg-hook.sh
index 88d4cda299..302a3a2082 100755
--- a/t/t7504-commit-msg-hook.sh
+++ b/t/t7504-commit-msg-hook.sh
@@ -101,6 +101,10 @@ cat > "$HOOK" <<EOF
 exit 1
 EOF
 
+commit_msg_is () {
+	test "$(git log --pretty=format:%s%b -1)" = "$1"
+}
+
 test_expect_success 'with failing hook' '
 
 	echo "another" >> file &&
@@ -135,6 +139,32 @@ test_expect_success '--no-verify with failing hook (editor)' '
 
 '
 
+test_expect_success 'merge fails with failing hook' '
+
+	test_when_finished "git branch -D newbranch" &&
+	test_when_finished "git checkout -f master" &&
+	git checkout --orphan newbranch &&
+	: >file2 &&
+	git add file2 &&
+	git commit --no-verify file2 -m in-side-branch &&
+	test_must_fail git merge --allow-unrelated-histories master &&
+	commit_msg_is "in-side-branch" # HEAD before merge
+
+'
+
+test_expect_success 'merge bypasses failing hook with --no-verify' '
+
+	test_when_finished "git branch -D newbranch" &&
+	test_when_finished "git checkout -f master" &&
+	git checkout --orphan newbranch &&
+	: >file2 &&
+	git add file2 &&
+	git commit --no-verify file2 -m in-side-branch &&
+	git merge --no-verify --allow-unrelated-histories master &&
+	commit_msg_is "Merge branch '\''master'\'' into newbranch"
+'
+
+
 chmod -x "$HOOK"
 test_expect_success POSIXPERM 'with non-executable hook' '
 
@@ -178,10 +208,6 @@ exit 0
 EOF
 chmod +x "$HOOK"
 
-commit_msg_is () {
-	test "$(git log --pretty=format:%s%b -1)" = "$1"
-}
-
 test_expect_success 'hook edits commit message' '
 
 	echo "additional" >> file &&
@@ -217,7 +243,36 @@ test_expect_success "hook doesn't edit commit message (editor)" '
 	echo "more plus" > FAKE_MSG &&
 	GIT_EDITOR="\"\$FAKE_EDITOR\"" git commit --no-verify &&
 	commit_msg_is "more plus"
+'
 
+test_expect_success 'hook called in git-merge picks up commit message' '
+	test_when_finished "git branch -D newbranch" &&
+	test_when_finished "git checkout -f master" &&
+	git checkout --orphan newbranch &&
+	: >file2 &&
+	git add file2 &&
+	git commit --no-verify file2 -m in-side-branch &&
+	git merge --allow-unrelated-histories master &&
+	commit_msg_is "new message"
+'
+
+test_expect_failure 'merge --continue remembers --no-verify' '
+	test_when_finished "git branch -D newbranch" &&
+	test_when_finished "git checkout -f master" &&
+	git checkout master &&
+	echo a >file2 &&
+	git add file2 &&
+	git commit --no-verify -m "add file2 to master" &&
+	git checkout -b newbranch master^ &&
+	echo b >file2 &&
+	git add file2 &&
+	git commit --no-verify file2 -m in-side-branch &&
+	git merge --no-verify -m not-rewritten-by-hook master &&
+	# resolve conflict:
+	echo c >file2 &&
+	git add file2 &&
+	git merge --continue &&
+	commit_msg_is not-rewritten-by-hook
 '
 
 # set up fake editor to replace `pick` by `reword`
@@ -237,4 +292,5 @@ test_expect_success 'hook is called for reword during `rebase -i`' '
 
 '
 
+
 test_done
-- 
2.14.0.rc0.3.g6c2e499285


^ permalink raw reply related	[relevance 2%]

* [PATCH] notes: send "Automatic notes merge failed" messages to stderr
  @ 2017-11-14 16:17  2% ` Todd Zullinger
  2017-11-15 13:13  0%   ` Johan Herland
  0 siblings, 1 reply; 200+ results
From: Todd Zullinger @ 2017-11-14 16:17 UTC (permalink / raw)
  To: Johan Herland; +Cc: Junio C Hamano, Santiago Torres, git

All other error messages from notes use stderr.  Do the same when
alerting users of an unresolved notes merge.

Fix the output redirection in t3310 and t3320 as well.  Previously, the
tests directed output to a file, but stderr was either not captured or
not sent to the file due to the order of the redirection operators.

Signed-off-by: Todd Zullinger <tmz@pobox.com>
---

Johan Herland wrote:
> ACK :-)
> 
> Error messages should go to stderr, and redirection in the tests
> should be fixed.

Excellent, thanks Johan!

Here's what I came up with.  Hopefully I caught all the tests that need
adjustment.  The test suite passes for me, but it's always possible that I've
missed something.

Style-wise, I'm not sure about the re-wrapping of the error message text.  If
that should be avoided to make the patch's change from printf to fprintf
clearer or should be wrapped differently, let me know.

 builtin/notes.c                       | 8 ++++----
 t/t3310-notes-merge-manual-resolve.sh | 8 ++++----
 t/t3320-notes-merge-worktrees.sh      | 2 +-
 3 files changed, 9 insertions(+), 9 deletions(-)

diff --git a/builtin/notes.c b/builtin/notes.c
index 12afdf1907..4468adaf29 100644
--- a/builtin/notes.c
+++ b/builtin/notes.c
@@ -865,10 +865,10 @@ static int merge(int argc, const char **argv, const char *prefix)
 		if (create_symref("NOTES_MERGE_REF", default_notes_ref(), NULL))
 			die(_("failed to store link to current notes ref (%s)"),
 			    default_notes_ref());
-		printf(_("Automatic notes merge failed. Fix conflicts in %s and "
-			 "commit the result with 'git notes merge --commit', or "
-			 "abort the merge with 'git notes merge --abort'.\n"),
-		       git_path(NOTES_MERGE_WORKTREE));
+		fprintf(stderr, _("Automatic notes merge failed. Fix conflicts in %s "
+				  "and commit the result with 'git notes merge --commit', "
+				  "or abort the merge with 'git notes merge --abort'.\n"),
+			git_path(NOTES_MERGE_WORKTREE));
 	}
 
 	free_notes(t);
diff --git a/t/t3310-notes-merge-manual-resolve.sh b/t/t3310-notes-merge-manual-resolve.sh
index baef2d6924..9c1bf6eb3d 100755
--- a/t/t3310-notes-merge-manual-resolve.sh
+++ b/t/t3310-notes-merge-manual-resolve.sh
@@ -176,7 +176,7 @@ git rev-parse refs/notes/z > pre_merge_z
 test_expect_success 'merge z into m (== y) with default ("manual") resolver => Conflicting 3-way merge' '
 	git update-ref refs/notes/m refs/notes/y &&
 	git config core.notesRef refs/notes/m &&
-	test_must_fail git notes merge z >output &&
+	test_must_fail git notes merge z >output 2>&1 &&
 	# Output should point to where to resolve conflicts
 	test_i18ngrep "\\.git/NOTES_MERGE_WORKTREE" output &&
 	# Inspect merge conflicts
@@ -379,7 +379,7 @@ git rev-parse refs/notes/z > pre_merge_z
 test_expect_success 'redo merge of z into m (== y) with default ("manual") resolver => Conflicting 3-way merge' '
 	git update-ref refs/notes/m refs/notes/y &&
 	git config core.notesRef refs/notes/m &&
-	test_must_fail git notes merge z >output &&
+	test_must_fail git notes merge z >output 2>&1 &&
 	# Output should point to where to resolve conflicts
 	test_i18ngrep "\\.git/NOTES_MERGE_WORKTREE" output &&
 	# Inspect merge conflicts
@@ -413,7 +413,7 @@ git rev-parse refs/notes/y > pre_merge_y
 git rev-parse refs/notes/z > pre_merge_z
 
 test_expect_success 'redo merge of z into m (== y) with default ("manual") resolver => Conflicting 3-way merge' '
-	test_must_fail git notes merge z >output &&
+	test_must_fail git notes merge z >output 2>&1 &&
 	# Output should point to where to resolve conflicts
 	test_i18ngrep "\\.git/NOTES_MERGE_WORKTREE" output &&
 	# Inspect merge conflicts
@@ -494,7 +494,7 @@ cp expect_log_y expect_log_m
 
 test_expect_success 'redo merge of z into m (== y) with default ("manual") resolver => Conflicting 3-way merge' '
 	git update-ref refs/notes/m refs/notes/y &&
-	test_must_fail git notes merge z >output &&
+	test_must_fail git notes merge z >output 2>&1 &&
 	# Output should point to where to resolve conflicts
 	test_i18ngrep "\\.git/NOTES_MERGE_WORKTREE" output &&
 	# Inspect merge conflicts
diff --git a/t/t3320-notes-merge-worktrees.sh b/t/t3320-notes-merge-worktrees.sh
index b9c3bc2487..10bfc8b947 100755
--- a/t/t3320-notes-merge-worktrees.sh
+++ b/t/t3320-notes-merge-worktrees.sh
@@ -61,7 +61,7 @@ test_expect_success 'merge z into x while mid-merge on y succeeds' '
 	(
 		cd worktree2 &&
 		git config core.notesRef refs/notes/x &&
-		test_must_fail git notes merge z 2>&1 >out &&
+		test_must_fail git notes merge z >out 2>&1 &&
 		test_i18ngrep "Automatic notes merge failed" out &&
 		grep -v "A notes merge into refs/notes/x is already in-progress in" out
 	) &&
-- 
2.15.0


^ permalink raw reply related	[relevance 2%]

* Re: [PATCH] notes: send "Automatic notes merge failed" messages to stderr
  2017-11-14 16:17  2% ` [PATCH] notes: send "Automatic notes merge failed" messages to stderr Todd Zullinger
@ 2017-11-15 13:13  0%   ` Johan Herland
  2017-11-15 21:09  0%     ` Todd Zullinger
  0 siblings, 1 reply; 200+ results
From: Johan Herland @ 2017-11-15 13:13 UTC (permalink / raw)
  To: Todd Zullinger; +Cc: Junio C Hamano, Santiago Torres, Git mailing list

On Tue, Nov 14, 2017 at 5:17 PM, Todd Zullinger <tmz@pobox.com> wrote:
> All other error messages from notes use stderr.  Do the same when
> alerting users of an unresolved notes merge.
>
> Fix the output redirection in t3310 and t3320 as well.  Previously, the
> tests directed output to a file, but stderr was either not captured or
> not sent to the file due to the order of the redirection operators.
>
> Signed-off-by: Todd Zullinger <tmz@pobox.com>

Looks good to me.

...Johan

^ permalink raw reply	[relevance 0%]

* Re: [PATCH] notes: send "Automatic notes merge failed" messages to stderr
  2017-11-15 13:13  0%   ` Johan Herland
@ 2017-11-15 21:09  0%     ` Todd Zullinger
  0 siblings, 0 replies; 200+ results
From: Todd Zullinger @ 2017-11-15 21:09 UTC (permalink / raw)
  To: Johan Herland; +Cc: Junio C Hamano, Santiago Torres, Git mailing list

Johan Herland wrote:
> On Tue, Nov 14, 2017 at 5:17 PM, Todd Zullinger <tmz@pobox.com> wrote:
>> All other error messages from notes use stderr.  Do the same when 
>> alerting users of an unresolved notes merge.
>>
>> Fix the output redirection in t3310 and t3320 as well.  Previously, the 
>> tests directed output to a file, but stderr was either not captured or 
>> not sent to the file due to the order of the redirection operators.
>>
>> Signed-off-by: Todd Zullinger <tmz@pobox.com>
>
> Looks good to me.

Thanks Johan.

-- 
Todd
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Deliberation, n. The act of examining one's bread to determine which
side it is buttered on.
    -- Ambrose Bierce, "The Devil's Dictionary"


^ permalink raw reply	[relevance 0%]

* Re: [RFC] Rebasing merges: a jorney to the ultimate solution (Road Clear)
  @ 2018-03-06 16:56  2%                             ` Junio C Hamano
    0 siblings, 1 reply; 200+ results
From: Junio C Hamano @ 2018-03-06 16:56 UTC (permalink / raw)
  To: Phillip Wood
  Cc: Sergey Organov, Igor Djordjevic, phillip.wood, Git mailing list,
	Jacob Keller, Johannes Schindelin, Johannes Sixt

Phillip Wood <phillip.wood@talktalk.net> writes:

> I wonder if just having a predicable result rather than forcing the
> rebase to stop if the user just squashes a fixup commit into a topic
> branch that is the parent of a merge might be more convenient in practice.

Unless I am misunderstanding what you are saying, that is pretty
much what I have automated for my daily rebuild of the 'pu' branch

Non-textual semantic conflicts are made (in the best case just once)
as a separate commit on top of mechanical auto-merge whose focus is
predictability (rather than cleverness) done by Git, and then that
separate commit is kept outside the history.  When replaying these
merges to rebuild the 'pu' branch, after resetting the tip to
'master', each topic is merged mechanically, and if such a fix-up
commit is present, "cherry-pick --no-commit" applies it and then
"commit --amend --no-edit" to adjust the merge.  I find it quite
valuable to have a separate record of what "evil" non-mechanical
adjustment was done, which I know won't be lost in the noise when
these merges need to be redone daily or more often.

The Appendix in Documentation/howto/maintain-git.txt talks about
this process.  You can see what topics have such merge-fix defined
by peeking https://github.com/gitster/git/ repository.


^ permalink raw reply	[relevance 2%]

* Re: [RFC] Rebasing merges: a jorney to the ultimate solution (Road Clear)
  @ 2018-03-08  8:18  2%                                 ` Junio C Hamano
  2018-03-11 11:56  0%                                   ` Johannes Schindelin
  0 siblings, 1 reply; 200+ results
From: Junio C Hamano @ 2018-03-08  8:18 UTC (permalink / raw)
  To: Johannes Schindelin
  Cc: Phillip Wood, Sergey Organov, Igor Djordjevic, phillip.wood,
	Git mailing list, Jacob Keller, Johannes Sixt

Johannes Schindelin <Johannes.Schindelin@gmx.de> writes:

>> Non-textual semantic conflicts are made (in the best case just once)
>> as a separate commit on top of mechanical auto-merge whose focus is
>> predictability (rather than cleverness) done by Git, and then that
>> separate commit is kept outside the history.  When replaying these
>> merges to rebuild the 'pu' branch, after resetting the tip to
>> 'master', each topic is merged mechanically, and if such a fix-up
>> commit is present, "cherry-pick --no-commit" applies it and then
>> "commit --amend --no-edit" to adjust the merge.  I find it quite
>> valuable to have a separate record of what "evil" non-mechanical
>> adjustment was done, which I know won't be lost in the noise when
>> these merges need to be redone daily or more often.
>
> So essentially, you have something that `git rerere` would have learned,
> but as a commit?

You probably wouldn't be asking that if you read what you cut out
when you quoted above ;-) 

There are a collection of cherry-pickable commits in hierarchy under
refs/merge-fix.  They are indexed by the branch that will cause
semantic conflicts that do not involve textual conflicts at all (the
important implication of which is that 'rerere' fundamentally will
not trigger to help resolving them) [*1*], and are used to create
evil merge when a corresponding branch is merged to 'pu' (and down).

[Footnote]

*1* One topic adds an extra parameter to read_index_from() that has
been and still is defined in a file and merged to 'pu' first, while
another topic adds a new callsite for the same function in a file
that the former topic does not touch, hence a merge of the latter
topic has no textual conflict to the file with a new callsite, but
still needs adjusting.  That sort of think.

^ permalink raw reply	[relevance 2%]

* Re: [RFC] Rebasing merges: a jorney to the ultimate solution (Road Clear)
  2018-03-08  8:18  2%                                 ` Junio C Hamano
@ 2018-03-11 11:56  0%                                   ` Johannes Schindelin
  2018-03-13 18:24  3%                                     ` Junio C Hamano
  0 siblings, 1 reply; 200+ results
From: Johannes Schindelin @ 2018-03-11 11:56 UTC (permalink / raw)
  To: Junio C Hamano
  Cc: Phillip Wood, Sergey Organov, Igor Djordjevic, phillip.wood,
	Git mailing list, Jacob Keller, Johannes Sixt

Hi Junio,

On Thu, 8 Mar 2018, Junio C Hamano wrote:

> Johannes Schindelin <Johannes.Schindelin@gmx.de> writes:
> 
> >> Non-textual semantic conflicts are made (in the best case just once)
> >> as a separate commit on top of mechanical auto-merge whose focus is
> >> predictability (rather than cleverness) done by Git, and then that
> >> separate commit is kept outside the history.  When replaying these
> >> merges to rebuild the 'pu' branch, after resetting the tip to
> >> 'master', each topic is merged mechanically, and if such a fix-up
> >> commit is present, "cherry-pick --no-commit" applies it and then
> >> "commit --amend --no-edit" to adjust the merge.  I find it quite
> >> valuable to have a separate record of what "evil" non-mechanical
> >> adjustment was done, which I know won't be lost in the noise when
> >> these merges need to be redone daily or more often.
> >
> > So essentially, you have something that `git rerere` would have learned,
> > but as a commit?
> 
> You probably wouldn't be asking that if you read what you cut out
> when you quoted above ;-) 

Sorry to be so stupid, and no, the part I cut did not clarify it for me,
hence my question.

> There are a collection of cherry-pickable commits in hierarchy under
> refs/merge-fix.  They are indexed by the branch that will cause
> semantic conflicts that do not involve textual conflicts at all (the
> important implication of which is that 'rerere' fundamentally will
> not trigger to help resolving them) [*1*], and are used to create
> evil merge when a corresponding branch is merged to 'pu' (and down).

I see. My question was unclear, I agree. Please let me re-try:

So essentially, what your cherry-pick'able commits are is a way to store
what rerere would have stored (i.e. the set of merge conflicts together
with their resolution)?

If so, what tooling do you have to identify quickly what to cherry-pick,
given merge conflicts?

(I know I could spend some half hour to scour your `todo` branch and the
documentation you wrote about how you maintain Git, but you already know
the answer to this question, and it would probably be interesting to
others who are as eager to have better tools for handling merge conflicts
as I am, too, so it would save time overall to discuss this single
question here.)

> *1* One topic adds an extra parameter to read_index_from() that has
> been and still is defined in a file and merged to 'pu' first, while
> another topic adds a new callsite for the same function in a file
> that the former topic does not touch, hence a merge of the latter
> topic has no textual conflict to the file with a new callsite, but
> still needs adjusting.  That sort of think.

Okay, so it is even more intricate than `rerere`: it does not only store
the merge conflicts (by grace of using the "patch ID" of the merge
conflicts) together with their resolution, but instead it has some sort of
idea of what context needs to be met to require the resolution?

Color me intrigued.

If you really found a way to automate describing, say, that a function
signature changed in one branch, and a caller was introduced in another,
and that merging those requires adjusting the caller in a specific way, I
now *really* think that this should be made available more broadly.

Ciao,
Dscho

^ permalink raw reply	[relevance 0%]

* Re: [RFC] Rebasing merges: a jorney to the ultimate solution (Road Clear)
  2018-03-11 11:56  0%                                   ` Johannes Schindelin
@ 2018-03-13 18:24  3%                                     ` Junio C Hamano
  2018-03-26 13:17  0%                                       ` Johannes Schindelin
  0 siblings, 1 reply; 200+ results
From: Junio C Hamano @ 2018-03-13 18:24 UTC (permalink / raw)
  To: Johannes Schindelin
  Cc: Phillip Wood, Sergey Organov, Igor Djordjevic, phillip.wood,
	Git mailing list, Jacob Keller, Johannes Sixt

Johannes Schindelin <Johannes.Schindelin@gmx.de> writes:

> So essentially, what your cherry-pick'able commits are is a way to store
> what rerere would have stored (i.e. the set of merge conflicts together
> with their resolution)?

If rerere would have stored, I wouldn't have separate band-aid
system on top.  These fix-up commits are usually on parts that do
not get involved in textual conflicts; "rerere" which relies on
having textual conflicts (the "shape" of the text in the conflicted
region is what lets "rerere" index into its database to find the
recorded resolution) wouldn't have stored them and that is
fundamental.

> If so, what tooling do you have to identify quickly what to cherry-pick,
> given merge conflicts?

It exactly is the issue I've been trying to find ideal solution for
quite a while and not successfully.  Here is a sample thread

  https://public-inbox.org/git/xmqqeft3u0u5.fsf@gitster.mtv.corp.google.com/#t

and every message I mention "merge-fix" is relevant.

The current band-aid system punts and indexes the merge-fix changes
by merely a branch name.  When refs/merge-fix/X exists, what it
means is "When branch X is merged to an integration branch, it is
likely that the integration branch _already_ has merged an unnamed
topic that causes semantic conflicts and requires this fix-up".
This needs occasional manual adjustment---e.g. when the topic X
turns out to be a lot more stable than the other topic Y that was
causing us trouble with semantic conflicts, I may at some point
reorder the topics and have topic X advance to 'next' before topic Y
does.  And when that happens, when I merge X to 'next', because Y is
not yet in 'next', I shouldn't apply refs/merge-fix/X (often, an
attempt to cherry-pick it on top of a merge of X into 'next' would
fail, which would be a bit of safety, but not always).  What I
should do instead is to rename refs/merge-fix/X to refs/merge-fix/Y
immediately before merging X to 'next', so that the cherry-pick is
not applied.  When rebuilding 'master'->'jch'->'pu' chain, X (now in
'next') will be merged before Y (not in 'next') gets merged, and
when it is Y's turn to be merged, the merge-fix I used to apply when
merging topic X will be applied.

In the ideal world (I think I'm repeating the ideas raised in the
thread quoted), the merge-fix database should be indexed with a pair
of commit object names (e.g. a step in branch X that adds a new
callsite for function frotz() and a step in branch Y that changes
the function signature of frotz()), and teach the system to
cherry-pick refs/merge-fix/A-B to resolve semantic conflicts, when
both commits A and B appears in the integration branch for the first
time.  And make sure these are kept up-to-date across rebasing of
commits A and B.  After rebasing the topics X and Y that contained
the commits A and B, if they became C and D, the system somehow
needs to be able to locate the previous merge-fix that was valid for
A-B pair when C-D pair gets merged.


^ permalink raw reply	[relevance 3%]

* Re: [RFC] Rebasing merges: a jorney to the ultimate solution (Road Clear)
  2018-03-13 18:24  3%                                     ` Junio C Hamano
@ 2018-03-26 13:17  0%                                       ` Johannes Schindelin
  0 siblings, 0 replies; 200+ results
From: Johannes Schindelin @ 2018-03-26 13:17 UTC (permalink / raw)
  To: Junio C Hamano
  Cc: Phillip Wood, Sergey Organov, Igor Djordjevic, phillip.wood,
	Git mailing list, Jacob Keller, Johannes Sixt

Hi Junio,

On Tue, 13 Mar 2018, Junio C Hamano wrote:

> Johannes Schindelin <Johannes.Schindelin@gmx.de> writes:
> 
> > If so, what tooling do you have to identify quickly what to
> > cherry-pick, given merge conflicts?
> 
> It exactly is the issue I've been trying to find ideal solution for
> quite a while and not successfully.  Here is a sample thread
> 
>   https://public-inbox.org/git/xmqqeft3u0u5.fsf@gitster.mtv.corp.google.com/#t
> 
> and every message I mention "merge-fix" is relevant.
>
> [... detailed explanation of the current "band-aid" system...]

Thank you for the very thorough account. I have been struggling with this,
too, even chatting to Michael Haggerty about this at the Contributors'
Summit (where I missed you a lot). He pointed me to a blog post of his
about the very interesting concept of "obsolete markers" in Hg:

http://softwareswirl.blogspot.de/2013/05/obsolete-markers-in-mercurial.html

Granted, that concept really makes most sense for rebase, but I wonder
whether the concept could be extended to help your (and my) use case of
frequently-changing targets (for me, it is more rebase targets, for you it
is merge targets). It would probably be implemented using commit notes, to
allow for bidirectional mappings.

Ciao,
Dscho
> 
> The current band-aid system punts and indexes the merge-fix changes
> by merely a branch name.  When refs/merge-fix/X exists, what it
> means is "When branch X is merged to an integration branch, it is
> likely that the integration branch _already_ has merged an unnamed
> topic that causes semantic conflicts and requires this fix-up".
> This needs occasional manual adjustment---e.g. when the topic X
> turns out to be a lot more stable than the other topic Y that was
> causing us trouble with semantic conflicts, I may at some point
> reorder the topics and have topic X advance to 'next' before topic Y
> does.  And when that happens, when I merge X to 'next', because Y is
> not yet in 'next', I shouldn't apply refs/merge-fix/X (often, an
> attempt to cherry-pick it on top of a merge of X into 'next' would
> fail, which would be a bit of safety, but not always).  What I
> should do instead is to rename refs/merge-fix/X to refs/merge-fix/Y
> immediately before merging X to 'next', so that the cherry-pick is
> not applied.  When rebuilding 'master'->'jch'->'pu' chain, X (now in
> 'next') will be merged before Y (not in 'next') gets merged, and
> when it is Y's turn to be merged, the merge-fix I used to apply when
> merging topic X will be applied.
> 
> In the ideal world (I think I'm repeating the ideas raised in the
> thread quoted), the merge-fix database should be indexed with a pair
> of commit object names (e.g. a step in branch X that adds a new
> callsite for function frotz() and a step in branch Y that changes
> the function signature of frotz()), and teach the system to
> cherry-pick refs/merge-fix/A-B to resolve semantic conflicts, when
> both commits A and B appears in the integration branch for the first
> time.  And make sure these are kept up-to-date across rebasing of
> commits A and B.  After rebasing the topics X and Y that contained
> the commits A and B, if they became C and D, the system somehow
> needs to be able to locate the previous merge-fix that was valid for
> A-B pair when C-D pair gets merged.
> 
> 

^ permalink raw reply	[relevance 0%]

* [PATCH v10 00/36] Add directory rename detection to git
@ 2018-04-19 17:57  3% Elijah Newren
  0 siblings, 0 replies; 200+ results
From: Elijah Newren @ 2018-04-19 17:57 UTC (permalink / raw)
  To: git; +Cc: sbeller, gitster, torvalds, Elijah Newren

This series is a reboot of the directory rename detection series that was
merged to master and then reverted due to the final patch having a buggy
can-skip-update check, as noted at
  https://public-inbox.org/git/xmqqmuya43cs.fsf@gitster-ct.c.googlers.com/
This series based on top of master.

This updated series fixes the problem found with the previous series, and
also fixes Linus' issue with unnecessary rebuilds noted at
  https://public-inbox.org/git/CA+55aFzLZ3UkG5svqZwSnhNk75=fXJRkvU1m_RHBG54NOoaZPA@mail.gmail.com/

For the original details about design considerations surrounding
directory rename detection, see
  https://public-inbox.org/git/20171110190550.27059-1-newren@gmail.com/

Patches 1--28 are identical to what was previously merged to master,
modulo trivial compilation fixes due to the fact that I've rebased on
master which now includes commit 916bc35b29af ("tree-walk: convert tree
entry functions to object_id", 2018-03-12).  As such, I've retained the
Reviewed-by and Signed-off-by tags for these first 28 patches.  (The
final patch of the original series, patch 29, has been rewritten and
replaced in this series.)

The remaining eight patches are new; a brief summary:

  merge-recursive: improve add_cacheinfo error handling
  merge-recursive: move more is_dirty handling to merge_content
  merge-recursive: avoid triggering add_cacheinfo error with dirty mod

    When Junio was bit by the previous series, the code reached a
    detected error state that should not ever be hit in production.
    That was bad enough, but the problem compounded because the code
    simply printed a vague not-very-scary-sounding error, and returned
    an error code that the caller ignored (which not only proceeded to
    then handle other paths which might print messages causing the error
    to scroll off the screen, but could result in a "clean" merge).  Fix
    issues with the error handling...and then deal with the breakage of
    one particular test that was triggering this codepath.

  t6046: testcases checking whether updates can be skipped in a merge

    Add a fairly comprehensive set of tests for the skipability of
    working tree updates.

  merge-recursive: fix was_tracked() to quit lying with some renamed
    paths
  merge-recursive: fix remainder of was_dirty() to use original index

    Instead of using the current index as a (rather imperfect) proxy for
    the state of the index just before the merge, keep a copy of the
    original index around so we can get correct answers to whether
    certain paths were tracked or dirty before the merge.

  merge-recursive: make "Auto-merging" comment show for other merges
  merge-recursive: fix check for skipability of working tree updates

    Fix and simplify the skipability check.  Due to some tests being
    picky about output, the first of these two patches exists to avoid
    triggering the "Auto-merging $FILE" message too often with the
    simplified logic; in the process, it fixes a pair of existing issues
    with when those messages are shown, making it more accurate in
    general.

Additional testing:

  * I've re-merged all ~13k merge commits in git.git with both
    git-2.17.0 and this version of git, comparing the results to each
    other in detail.  (Including stdout & stderr, as well as the output
    of subsequent commands like `git status`, `git ls-files -s`, `git
    diff -M`, `git diff -M --staged`).  The only differences were in 23
    merges of either git-gui or gitk which involved directory renames
    (e.g. git-2.17.0's merge would result in files like 'lib/tools.tcl'
    or 'po/ru.po' instead of the expected 'git-gui/lib/tools.tcl' or
    'gitk-git/po/ru.po')

  * I'm trying to do the same with linux.git, but it looks like that will
    take nearly a week to complete...

My biggest question:

  * Is there any other testing others would like to see, in order to avoid
    a repeat of the pain from my previous series and allow us to safely
    merge this newer one?

Elijah Newren (36):
  directory rename detection: basic testcases
  directory rename detection: directory splitting testcases
  directory rename detection: testcases to avoid taking detection too
    far
  directory rename detection: partially renamed directory
    testcase/discussion
  directory rename detection: files/directories in the way of some
    renames
  directory rename detection: testcases checking which side did the
    rename
  directory rename detection: more involved edge/corner testcases
  directory rename detection: testcases exploring possibly suboptimal
    merges
  directory rename detection: miscellaneous testcases to complete
    coverage
  directory rename detection: tests for handling overwriting untracked
    files
  directory rename detection: tests for handling overwriting dirty files
  merge-recursive: move the get_renames() function
  merge-recursive: introduce new functions to handle rename logic
  merge-recursive: fix leaks of allocated renames and diff_filepairs
  merge-recursive: make !o->detect_rename codepath more obvious
  merge-recursive: split out code for determining diff_filepairs
  merge-recursive: make a helper function for cleanup for handle_renames
  merge-recursive: add get_directory_renames()
  merge-recursive: check for directory level conflicts
  merge-recursive: add computation of collisions due to dir rename &
    merging
  merge-recursive: check for file level conflicts then get new name
  merge-recursive: when comparing files, don't include trees
  merge-recursive: apply necessary modifications for directory renames
  merge-recursive: avoid clobbering untracked files with directory
    renames
  merge-recursive: fix overwriting dirty files involved in renames
  merge-recursive: fix remaining directory rename + dirty overwrite
    cases
  directory rename detection: new testcases showcasing a pair of bugs
  merge-recursive: avoid spurious rename/rename conflict from dir
    renames
  merge-recursive: improve add_cacheinfo error handling
  merge-recursive: move more is_dirty handling to merge_content
  merge-recursive: avoid triggering add_cacheinfo error with dirty mod
  t6046: testcases checking whether updates can be skipped in a merge
  merge-recursive: fix was_tracked() to quit lying with some renamed
    paths
  merge-recursive: fix remainder of was_dirty() to use original index
  merge-recursive: make "Auto-merging" comment show for other merges
  merge-recursive: fix check for skipability of working tree updates

 merge-recursive.c                      | 1432 ++++++++-
 merge-recursive.h                      |   28 +
 strbuf.c                               |   16 +
 strbuf.h                               |   16 +
 t/t3501-revert-cherry-pick.sh          |    7 +-
 t/t6022-merge-rename.sh                |    2 +-
 t/t6043-merge-rename-directories.sh    | 3998 ++++++++++++++++++++++++
 t/t6046-merge-skip-unneeded-updates.sh |  761 +++++
 t/t7607-merge-overwrite.sh             |    2 +-
 unpack-trees.c                         |    4 +-
 unpack-trees.h                         |    4 +
 11 files changed, 6092 insertions(+), 178 deletions(-)
 create mode 100755 t/t6043-merge-rename-directories.sh
 create mode 100755 t/t6046-merge-skip-unneeded-updates.sh

-- 
2.17.0.290.ge988e9ce2a


^ permalink raw reply	[relevance 3%]

* Re: [PATCH v1 0/5] Allocate cache entries from memory pool
    @ 2018-04-23 16:19  1%   ` Jameson Miller
  1 sibling, 0 replies; 200+ results
From: Jameson Miller @ 2018-04-23 16:19 UTC (permalink / raw)
  To: Junio C Hamano, Jameson Miller
  Cc: git@vger.kernel.org, pclouds@gmail.com, jonathantanmy@google.com



On 04/18/2018 12:49 AM, Junio C Hamano wrote:
> Jameson Miller <jamill@microsoft.com> writes:
>
>> This patch series improves the performance of loading indexes by
>> reducing the number of malloc() calls. ...
>>
>> Jameson Miller (5):
>>    read-cache: teach refresh_cache_entry to take istate
>>    Add an API creating / discarding cache_entry structs
>>    mem-pool: fill out functionality
>>    Allocate cache entries from memory pools
>>    Add optional memory validations around cache_entry lifecyle
>>
>>   apply.c                |  26 +++---
>>   blame.c                |   5 +-
>>   builtin/checkout.c     |   8 +-
>>   builtin/difftool.c     |   8 +-
>>   builtin/reset.c        |   6 +-
>>   builtin/update-index.c |  26 +++---
>>   cache.h                |  40 ++++++++-
>>   git.c                  |   3 +
>>   mem-pool.c             | 136 ++++++++++++++++++++++++++++-
>>   mem-pool.h             |  34 ++++++++
>>   merge-recursive.c      |   4 +-
>>   read-cache.c           | 229 +++++++++++++++++++++++++++++++++++++++----------
>>   resolve-undo.c         |   6 +-
>>   split-index.c          |  31 +++++--
>>   tree.c                 |   4 +-
>>   unpack-trees.c         |  27 +++---
>>   16 files changed, 476 insertions(+), 117 deletions(-)
>>
>>
>> base-commit: cafaccae98f749ebf33495aec42ea25060de8682
> I couldn't quite figure out what these five patches were based on,
> even with this line.  Basing on and referring to a commit that is
> not part of our published history with "base-commit" is not all that
> useful to others.
My apologies - this patch series should be applied to the 'next'
branch.  It applies cleanly on top of
b46fe60e1d ("merge-fix/ps/test-chmtime-get", 2018-04-20), which
is a commit in the 'next' branch.
> Offhand without applying these patches and viewing the changes in
> wider contexts, one thing that makes me wonder is how the two
> allocation schemes can be used with two implementations of free().
> Upon add_index_entry() that replaces an index entry for an existing
> path, we'd discard an entry that was originally read as part of
> read_cache().  If we do that again, the second add_index_entry()
> will be discading, in its call to replace_index_entry(), the entry
> that was allocated by the caller of the first add_index_entry()
> call.  And replace_index_entry() would not have a way to know from
> which allocation the entry's memory came from.
>
> Perhaps it is not how you are using the "transient" stuff, and from
> the comment in 2/5, it is for "entries that are not meant to go into
> the index", but then higher stage index entries in unpack_trees seem
> to be allocated via the "transient" stuff, so I am not sure what the
> plans are for things like merge_recursive() that uses unpack_trees()
> to prepare the index and then later "fix it up" by further futzing
> around the index to adjust for renames it finds, etc.

Good points. The intention with this logic is that any entries
that *could* go into an index are allocated from the memory
pool. The "transient" entries only exist for a short period of
time. These have a defined lifetime and we can always trace the
corresponding "free" call. make_transient_cache_entry() is only
used to construct a temporary cache_entry to pass to the
checkout_entry() / write_entry(). There is a note in checkout.c
indicating that write_entry() needs to be re-factored to not take
a cache_entry.

The cache_entry type could gain knowledge about where it was
allocated from. This would allow us to only have a
single "free()" function, which could inspect the cache_entry to
see if it was allocated from a mem_pool (and possibly which
mem_pool) and take the appropriate action. The downside of this
approach is that cache_entry would need to gain a field to track
this information, and I *think* all of the bit field spots are
taken.

> Let me read it fully once we know where these patches are to be
> applied, but before that I cannot say much about them X-<.
>
> Thanks.
>


^ permalink raw reply	[relevance 1%]

* Re: [PATCH v1 0/5] Allocate cache entries from memory pool
  @ 2018-04-23 16:44  2%     ` Jameson Miller
  0 siblings, 0 replies; 200+ results
From: Jameson Miller @ 2018-04-23 16:44 UTC (permalink / raw)
  To: Stefan Beller, Junio C Hamano
  Cc: Jameson Miller, git@vger.kernel.org, pclouds@gmail.com,
	jonathantanmy@google.com



On 04/20/2018 01:49 PM, Stefan Beller wrote:
>>> base-commit: cafaccae98f749ebf33495aec42ea25060de8682
>>
>> I couldn't quite figure out what these five patches were based on,
>> even with this line.  Basing on and referring to a commit that is
>> not part of our published history with "base-commit" is not all that
>> useful to others.
> 
> I'd like to second this. In the object store refactoring, I am at a point where
> I'd want to migrate the memory management of {object, tree, commit, tag}.c
> which currently is done in alloc.c to a memory pool, that has a dedicated
> pointer to it.
> 
> So I'd either have to refactor alloc.c to take the_repository[1] or
> I'd play around with the mem_pool to manage memory in the
> object layer. I guess this playing around can happen with
> what is at origin/jm/mem-pool, however the life cycle management
> part of the third patch[2] would allow for stopping memleaks there.
> So I am interested in this series as well.
>

Sorry about the confusion here. This patch series can be applied to the 
next branch. They apply cleanly on [3]. The lifecycle functions are 
re-introduced in [4], which we could incorporate sooner if useful. I 
didn't have a consumer for the calls in the original patch series, and 
so deferred them until there was a caller. I would be interested to 
understand how the mem_pool would fit your needs, and if it is 
sufficient or needs modification for your use cases.

> [1] proof of concept in patches nearby
> https://public-inbox.org/git/20180206001749.218943-31-sbeller@google.com/
> 
> [2] https://public-inbox.org/git/20180417163400.3875-5-jamill@microsoft.com/
> 
> Thanks,
> Stefan
> 

[3] b46fe60e1d ("merge-fix/ps/test-chmtime-get", 2018-04-20)

[4]
https://public-inbox.org/git/20180417163400.3875-5-jamill@microsoft.com/

^ permalink raw reply	[relevance 2%]

* What's cooking in git.git (Apr 2018, #03; Wed, 25)
@ 2018-04-25  8:37  3% Junio C Hamano
  0 siblings, 0 replies; 200+ results
From: Junio C Hamano @ 2018-04-25  8:37 UTC (permalink / raw)
  To: git

Here are the topics that have been cooking.  Commits prefixed with
'-' are only in 'pu' (proposed updates) while commits prefixed with
'+' are in 'next'.  The ones marked with '.' do not appear in any of
the integration branches, but I am still holding onto them.

You can find the changes described here in the integration branches
of the repositories listed at

    http://git-blame.blogspot.com/p/git-public-repositories.html

--------------------------------------------------
[Graduated to "master"]

* ak/bisect-doc-typofix (2018-04-07) 1 commit
  (merged to 'next' on 2018-04-17 at eafdeb0248)
 + Documentation/git-bisect.txt: git bisect term → git bisect terms

 Docfix.


* bb/git-gui-ssh-key-files (2018-03-02) 2 commits
  (merged to 'next' on 2018-04-17 at e439f0398d)
 + Merge branch 'bb/ssh-key-files' of git-gui into bb/git-gui-ssh-key-files
 + git-gui: search for all current SSH key types

 "git gui" learned that "~/.ssh/id_ecdsa.pub" and
 "~/.ssh/id_ed25519.pub" are also possible SSH key files.


* bp/fsmonitor-bufsize-fix (2018-04-11) 1 commit
  (merged to 'next' on 2018-04-17 at 70a7091e06)
 + fsmonitor: fix incorrect buffer size when printing version number

 Fix an unexploitable (because the oversized contents are not under
 attacker's control) buffer overflow.


* bp/fsmonitor-prime-index (2018-04-11) 1 commit
  (merged to 'next' on 2018-04-17 at 765edccdf0)
 + fsmonitor: force index write after full scan

 The index file is updated to record the fsmonitor section after a
 full scan was made, to avoid wasting the effort that has already
 spent.


* bp/git-gui-bind-kp-enter (2018-03-02) 2 commits
  (merged to 'next' on 2018-04-17 at 35828e90e2)
 + Merge branch 'bp/bind-kp-enter' of git-gui into bp/git-gui-bind-kp-enter
 + git-gui: bind CTRL/CMD+numpad ENTER to do_commit

 "git gui" performs commit upon CTRL/CMD+ENTER but the
 CTRL/CMD+KP_ENTER (i.e. enter key on the numpad) did not have the
 same key binding.  It now does.


* br/mergetools-guiffy (2018-04-06) 1 commit
  (merged to 'next' on 2018-04-17 at 8ec0697d5d)
 + mergetools: add support for guiffy

 "git mergetools" learned talking to guiffy.


* bw/commit-partial-from-subdirectory-fix (2018-04-05) 1 commit
  (merged to 'next' on 2018-04-17 at 1e56bbc14d)
 + commit: allow partial commits with relative paths

 "cd sub/dir && git commit ../path" ought to record the changes to
 the file "sub/path", but this regressed long time ago.


* cb/bash-completion-ls-files-processing (2018-04-10) 1 commit
  (merged to 'next' on 2018-04-17 at 956b155366)
 + completion: improve ls-files filter performance

 Shell completion (in contrib) that gives list of paths have been
 optimized somewhat.


* cb/git-gui-ttk-style (2018-03-05) 2 commits
  (merged to 'next' on 2018-04-17 at 1a4f677a0d)
 + Merge branch 'cb/ttk-style' of git-gui into cb/git-gui-ttk-style
 + git-gui: workaround ttk:style theme use

 "git gui" has been taught to work with old versions of tk (like
 8.5.7) that do not support "ttk::style theme use" as a way to query
 the current theme.


* cc/perf-bisect (2018-04-11) 2 commits
  (merged to 'next' on 2018-04-17 at 62a1498dd0)
 + t/perf: add scripts to bisect performance regressions
 + perf/run: add --subsection option

 Performance measuring framework in t/perf learned to help bisecting
 performance regressions.


* en/doc-typoes (2018-04-09) 2 commits
  (merged to 'next' on 2018-04-17 at 81e5c8da18)
 + Documentation: normalize spelling of 'normalised'
 + Documentation: fix several one-character-off spelling errors

 Docfix.


* es/fread-reads-dir-autoconf-fix (2018-04-09) 1 commit
  (merged to 'next' on 2018-04-17 at 538601fef3)
 + configure.ac: fix botched FREAD_READS_DIRECTORIES check

 Small fix to the autoconf build procedure.


* es/worktree-docs (2018-04-09) 2 commits
  (merged to 'next' on 2018-04-17 at 15a098e9b1)
 + git-worktree.txt: unify command-line prompt in example blocks
 + git-worktree.txt: recommend 'git worktree remove' over manual deletion
 (this branch uses nd/worktree-move.)

 Doc updates.


* jk/flockfile-stdio (2018-03-30) 1 commit
  (merged to 'next' on 2018-04-17 at e11bd565f4)
 + config: move flockfile() closer to unlocked functions

 Code clean-up.


* jk/ref-array-push (2018-04-09) 3 commits
  (merged to 'next' on 2018-04-17 at 61859b271b)
 + ref-filter: factor ref_array pushing into its own function
 + ref-filter: make ref_array_item allocation more consistent
 + ref-filter: use "struct object_id" consistently
 (this branch is used by hn/sort-ls-remote.)

 API clean-up aournd ref-filter code.


* jk/relative-directory-fix (2018-03-30) 5 commits
  (merged to 'next' on 2018-04-17 at 1b8cc9dcb4)
 + refs: use chdir_notify to update cached relative paths
 + set_work_tree: use chdir_notify
 + add chdir-notify API
 + trace.c: export trace_setup_key
 + set_git_dir: die when setenv() fails

 Some codepaths, including the refs API, get and keep relative
 paths, that go out of sync when the process does chdir(2).  The
 chdir-notify API is introduced to let these codepaths adjust these
 cached paths to the new current directory.


* jk/t5561-missing-curl (2018-04-05) 2 commits
  (merged to 'next' on 2018-04-17 at d8592fa6c2)
 + t5561: skip tests if curl is not available
 + t5561: drop curl stderr redirects

 Test fixes.


* jm/mem-pool (2018-04-12) 3 commits
  (merged to 'next' on 2018-04-17 at 8a3641ab3a)
 + mem-pool: move reusable parts of memory pool into its own file
 + fast-import: introduce mem_pool type
 + fast-import: rename mem_pool type to mp_block

 An reusable "memory pool" implementation has been extracted from
 fast-import.c, which in turn has become the first user of the
 mem-pool API.


* js/t5404-path-fix (2018-04-09) 1 commit
  (merged to 'next' on 2018-04-17 at 94092f2896)
 + t5404: relax overzealous test

 Test fix.


* ks/branch-list-detached-rebase-i (2018-04-05) 2 commits
  (merged to 'next' on 2018-04-17 at 5c2842c3f9)
 + t3200: verify "branch --list" sanity when rebasing from detached HEAD
 + branch --list: print useful info whilst interactive rebasing a detached HEAD

 "git branch --list" during an interrupted "rebase -i" now lets
 users distinguish the case where a detached HEAD is being rebased
 and a normal branch is being rebased.


* lw/daemon-log-destination (2018-04-09) 1 commit
  (merged to 'next' on 2018-04-17 at b06cdcc45e)
 + daemon.c: fix condition for redirecting stderr

 Recent introduction of "--log-destination" option to "git daemon"
 did not work well when the daemon was run under "--inetd" mode.


* mn/send-email-credential-doc (2018-04-08) 1 commit
  (merged to 'next' on 2018-04-17 at c4db21eb9b)
 + send-email: simplify Gmail example in the documentation

 Doc update.


* nd/worktree-move (2018-04-05) 1 commit
  (merged to 'next' on 2018-04-17 at 11ca393110)
 + t2028: tighten grep expression to make "move worktree" test more robust
 (this branch is used by es/worktree-docs.)

 Test update.


* ps/test-chmtime-get (2018-04-09) 1 commit
  (merged to 'next' on 2018-04-17 at dcb138d8b1)
 + t/helper: 'test-chmtime (--get|-g)' to print only the mtime

 Test cleanup.


* pw/rebase-keep-empty-fixes (2018-03-29) 3 commits
  (merged to 'next' on 2018-04-17 at 10a4d92060)
 + rebase: respect --no-keep-empty
 + rebase -i --keep-empty: don't prune empty commits
 + rebase --root: stop assuming squash_onto is unset
 (this branch is used by pw/rebase-signoff.)

 "git rebase --keep-empty" still removed an empty commit if the
 other side contained an empty commit (due to the "does an
 equivalent patch exist already?" check), which has been corrected.


* pw/rebase-signoff (2018-03-29) 4 commits
  (merged to 'next' on 2018-04-17 at fbdc16e20e)
 + rebase --keep-empty: always use interactive rebase
 + rebase -p: error out if --signoff is given
 + rebase: extend --signoff support
 + Merge branch 'pw/rebase-keep-empty-fixes' into pw/rebase-signoff
 (this branch uses pw/rebase-keep-empty-fixes.)

 "git rebase" has learned to honor "--signoff" option when using
 backends other than "am" (but not "--preserve-merges").


* sb/filenames-with-dashes (2018-04-11) 6 commits
  (merged to 'next' on 2018-04-17 at 45fdeb5cb1)
 + replace_object.c: rename to use dash in file name
 + sha1_file.c: rename to use dash in file name
 + sha1_name.c: rename to use dash in file name
 + exec_cmd: rename to use dash in file name
 + unicode_width.h: rename to use dash in file name
 + write_or_die.c: rename to use dashes in file name

 Rename bunch of source files to more consistently use dashes
 instead of underscores to connect words.


* tg/use-git-contacts (2018-04-12) 1 commit
  (merged to 'next' on 2018-04-17 at 26cf8c1d8c)
 + SubmittingPatches: mention the git contacts command

 Doc update.

--------------------------------------------------
[New Topics]

* ma/double-dashes-in-docs (2018-04-18) 4 commits
  (merged to 'next' on 2018-04-25 at aaac2dc63c)
 + git-submodule.txt: quote usage in monospace, drop backslash
 + git-[short]log.txt: unify quoted standalone --
 + doc: convert [\--] to [--]
 + doc: convert \--option to --option

 Doc formatting updates.

 Will merge to 'master'.


* sb/worktree-remove-opt-force (2018-04-18) 1 commit
  (merged to 'next' on 2018-04-25 at 0367d52a4b)
 + worktree: accept -f as short for --force for removal

 "git worktree remove" learned that "-f" is a shorthand for
 "--force" option, just like for "git worktree add".

 Will merge to 'master'.


* sg/completion-clear-cached (2018-04-18) 1 commit
  (merged to 'next' on 2018-04-25 at 9178da6c3d)
 + completion: reduce overhead of clearing cached --options

 The completion script (in contrib/) learned to clear cached list of
 command line options upon dot-sourcing it again in a more efficient
 way.

 Will merge to 'master'.


* sg/doc-gc-quote-mismatch-fix (2018-04-18) 1 commit
  (merged to 'next' on 2018-04-25 at bc3d1abf45)
 + docs/git-gc: fix minor rendering issue

 Doc formatting fix.

 Will merge to 'master'.


* js/ident-date-fix (2018-04-19) 1 commit
 - sequencer: reset the committer date before commits

 During a "rebase -i" session, the code could give older timestamp
 to commits created by later "pick" than an earlier "reword", which
 has been corrected.

 Will merge to 'next'.


* nd/submodule-status-fix (2018-04-19) 1 commit
 - submodule--helper: don't print null in 'submodule status'

 "git submodule status" did not check the symbolic revision name it
 computed for the submodule HEAD is not the NULL, and threw it at
 printf routines, which has been corrected.

 Will merge to 'next'.


* sa/send-email-dedup-some-headers (2018-04-19) 1 commit
 - send-email: avoid duplicate In-Reply-To/References

 When fed input that already has In-Reply-To: and/or References:
 headers and told to add the same information, "git send-email"
 added these headers separately, instead of appending to an existing
 one, which is a violation of the RFC.  This has been corrected.

 Will merge to 'next'.


* tg/demote-stash-save-in-completion (2018-04-20) 2 commits
 - completion: make stash -p and alias for stash push -p
 - completion: stop showing 'save' for stash by default

 THe command line completion (in contrib/) has been taught that "git
 stash save" has been deprecated ("git stash push" is the preferred
 spellingin the new world) and does not offer it as a possible
 completion candidate when "git stash push" can be.

 Will merge to 'next'.


* tz/doc-git-urls-reference (2018-04-20) 1 commit
 - doc/clone: update caption for GIT URLS cross-reference

 Doc fix.

 Will merge to 'next'.


* js/deprecate-grafts (2018-04-24) 11 commits
 - Remove obsolete script to convert grafts to replace refs
 - technical/shallow: describe why shallow cannot use replace refs
 - technical/shallow: describe the relationship with replace refs
 - filter-branch: stop suggesting to use grafts
 - Deprecate support for .git/info/grafts
 - Add a test for `git replace --convert-graft-file`
 - replace: introduce --convert-graft-file
 - replace: "libify" create_graft() and callees
 - replace: avoid using die() to indicate a bug
 - commit: Let the callback of for_each_mergetag return on error
 - argv_array: offer to split a string by whitespace

 The functionality of "$GIT_DIR/info/grafts" has been superseded by
 the "refs/replace/" mechanism for some time now, but the internal
 code had support for it in many places, which has been cleaned up
 in order to drop support of the "grafts" mechanism.


* js/rebase-i-clean-msg-after-fixup-continue (2018-04-24) 4 commits
 - rebase --skip: clean up commit message after a failed fixup/squash
 - sequencer: leave a tell-tale when a fixup/squash failed
 - rebase -i: Handle "combination of <n> commits" with GETTEXT_POISON
 - rebase -i: demonstrate bugs with fixup!/squash! commit messages

 "git rebase -i" sometimes left intermediate "# This is a
 combination of N commits" message meant for the human consumption
 inside an editor in the final result in certain corner cases, which
 has been fixed.

 Will merge to 'next'.


* ma/fast-export-skip-merge-fix (2018-04-21) 1 commit
 - fast-export: fix regression skipping some merge-commits

 "git fast-export" had a regression in v2.15.0 era where it skipped
 some merge commits in certain cases, which has been corrected.

 Will merge to 'next'.


* bw/server-options (2018-04-24) 4 commits
 - fetch: send server options when using protocol v2
 - ls-remote: send server options when using protocol v2
 - serve: introduce the server-option capability
 - Merge branch 'bw/protocol-v2' into HEAD
 (this branch uses bw/protocol-v2.)

 The transport protocol v2 is getting updated further.


* jc/parseopt-expiry-errors (2018-04-23) 2 commits
 - parseopt: handle malformed --expire arguments more nicely
 - gc: do not upcase error message shown with die()

 "git gc --prune=nonsense" spent long time repacking and then
 silently failed when underlying "git prune --expire=nonsense"
 failed to parse its command line.  This has been corrected.

 Will merge to 'next'.


* js/colored-push-errors (2018-04-24) 4 commits
 - config: document the settings to colorize push errors/hints
 - push: test to verify that push errors are colored
 - push: colorize errors
 - color: introduce support for colorizing stderr

 Error messages from "git push" can be painted for more visibility.

 Will merge to 'next'.


* js/runtime-prefix (2018-04-24) 8 commits
 - Avoid multiple PREFIX definitions
 - git_setup_gettext: plug memory leak
 - gettext: avoid initialization if the locale dir is not present
  (merged to 'next' on 2018-04-17 at a69aaa7a22)
 + mingw/msvc: use the new-style RUNTIME_PREFIX helper
 + exec_cmd: provide a new-style RUNTIME_PREFIX helper for Windows
 + exec_cmd: RUNTIME_PREFIX on some POSIX systems
 + Makefile: add Perl runtime prefix support
 + Makefile: generate Perl header from template file
 (this branch is tangled with dj/runtime-prefix.)

 Will merge to 'next'.


* ma/http-walker-no-partial (2018-04-24) 2 commits
 - walker: drop fields of `struct walker` which are always 1
 - http-fetch: make `-a` standard behaviour

 "git http-fetch" (deprecated) had an optional and experimental
 "feature" to fetch only commits and/or trees, which nobody used.
 This has been removed.

 Will merge to 'next'.


* bc/object-id (2018-04-24) 41 commits
 - merge-one-file: compute empty blob object ID
 - add--interactive: compute the empty tree value
 - Update shell scripts to compute empty tree object ID
 - sha1_file: only expose empty object constants through git_hash_algo
 - dir: use the_hash_algo for empty blob object ID
 - sequencer: use the_hash_algo for empty tree object ID
 - cache-tree: use is_empty_tree_oid
 - sha1_file: convert cached object code to struct object_id
 - builtin/reset: convert use of EMPTY_TREE_SHA1_BIN
 - builtin/receive-pack: convert one use of EMPTY_TREE_SHA1_HEX
 - wt-status: convert two uses of EMPTY_TREE_SHA1_HEX
 - submodule: convert several uses of EMPTY_TREE_SHA1_HEX
 - sequencer: convert one use of EMPTY_TREE_SHA1_HEX
 - merge: convert empty tree constant to the_hash_algo
 - builtin/merge: switch tree functions to use object_id
 - builtin/am: convert uses of EMPTY_TREE_SHA1_BIN to the_hash_algo
 - builtin/receive-pack: avoid hard-coded constants for push certs
 - diff: specify abbreviation size in terms of the_hash_algo
 - upload-pack: replace use of several hard-coded constants
 - revision: replace use of hard-coded constants
 - http: eliminate hard-coded constants
 - dir: convert struct untracked_cache_dir to object_id
 - commit: convert uses of get_sha1_hex to get_oid_hex
 - index-pack: abstract away hash function constant
 - pack-redundant: convert linked lists to use struct object_id
 - Update struct index_state to use struct object_id
 - split-index: convert struct split_index to object_id
 - submodule-config: convert structures to object_id
 - fsck: convert static functions to struct object_id
 - tree-walk: convert get_tree_entry_follow_symlinks to object_id
 - tree-walk: avoid hard-coded 20 constant
 - pack-redundant: abstract away hash algorithm
 - pack-objects: abstract away hash algorithm
 - packfile: abstract away hash constant values
 - packfile: convert find_pack_entry to object_id
 - sha1_file: convert freshen functions to object_id
 - packfile: convert has_sha1_pack to object_id
 - packfile: remove unused member from struct pack_entry
 - Remove unused member in struct object_context
 - server-info: remove unused members from struct pack_info
 - cache: add a function to read an object ID from a buffer

 Conversion from uchar[20] to struct object_id continues.


* sb/oid-object-info (2018-04-25) 9 commits
 - cache.h: allow oid_object_info to handle arbitrary repositories
 - packfile: add repository argument to cache_or_unpack_entry
 - packfile: add repository argument to unpack_entry
 - packfile: add repository argument to read_object
 - packfile: add repository argument to packed_object_info
 - packfile: add repository argument to packed_to_object_type
 - packfile: add repository argument to retry_bad_packed_offset
 - cache.h: add repository argument to oid_object_info
 - cache.h: add repository argument to oid_object_info_extended
 (this branch uses sb/object-store-replace.)

 The codepath around object-info API has been taught to take the
 repository object (which in turn tells the API which object store
 the objects are to be located).


* en/unpack-trees-split-index-fix (2018-04-24) 1 commit
 - unpack_trees: fix breakage when o->src_index != o->dst_index

 The split-index feature had a long-standing and dormant bug in
 certain use of the in-core merge machinery, which has been fixed.

 Will merge to 'next'.


* bp/merge-rename-config (2018-04-25) 2 commits
 - merge: add merge.aggressive config setting
 - merge: add merge.renames config setting


* en/git-debugger (2018-04-25) 1 commit
 - Make running git under other debugger-like programs easy


* js/no-pager-shorthand (2018-04-25) 1 commit
 - git: add -N as a short option for --no-pager

 "git --no-pager cmd" did not have short-and-sweet single letter
 option.


* sb/diff-color-move-more (2018-04-25) 7 commits
 - diff.c: add --color-moved-ignore-space-delta option
 - diff.c: decouple white space treatment from move detection algorithm
 - diff.c: add a blocks mode for moved code detection
 - diff.c: adjust hash function signature to match hashmap expectation
 - diff.c: do not pass diff options as keydata to hashmap
 - xdiff/xdiffi.c: remove unneeded function declarations
 - xdiff/xdiff.h: remove unused flags

 "git diff --color-moved" feature has further been tweaked.


--------------------------------------------------
[Stalled]

* fg/completion-external (2018-04-11) 1 commit
 - completion: load completion file for external subcommand

 The command line completion mechanism (in contrib/) learned to load
 custom completion file for "git $command" where $command is a
 custom "git-$command" that the end user has on the $PATH when using
 newer version of bash.

 Hold.
 cf. <CAM0VKj=pDVxfJtUZx7c6uCmPxwQFPBOQYdd7NH=YnVG86iK0Pw@mail.gmail.com>


* ld/p4-unshelve (2018-02-22) 1 commit
 - git-p4: add unshelve command

 "git p4" learned to "unshelve" shelved commit from P4.

 Will hold, perhaps drop and use format-change that uses a proper "diff".
 cf. <CAE5ih7_ooDMqVtTMoQ70s5XCkncr04HY0JkqSp1UmKQeG81oaA@mail.gmail.com>


* av/fsmonitor-updates (2018-01-04) 6 commits
 - fsmonitor: use fsmonitor data in `git diff`
 - fsmonitor: remove debugging lines from t/t7519-status-fsmonitor.sh
 - fsmonitor: make output of test-dump-fsmonitor more concise
 - fsmonitor: update helper tool, now that flags are filled later
 - fsmonitor: stop inline'ing mark_fsmonitor_valid / _invalid
 - dir.c: update comments to match argument name

 Code clean-up on fsmonitor integration, plus optional utilization
 of the fsmonitor data in diff-files.

 Waiting for an update.
 cf. <alpine.DEB.2.21.1.1801042335130.32@MININT-6BKU6QN.europe.corp.microsoft.com>


* pb/bisect-helper-2 (2017-10-28) 8 commits
 - t6030: make various test to pass GETTEXT_POISON tests
 - bisect--helper: `bisect_start` shell function partially in C
 - bisect--helper: `get_terms` & `bisect_terms` shell function in C
 - bisect--helper: `bisect_next_check` shell function in C
 - bisect--helper: `check_and_set_terms` shell function in C
 - wrapper: move is_empty_file() and rename it as is_empty_or_missing_file()
 - bisect--helper: `bisect_write` shell function in C
 - bisect--helper: `bisect_reset` shell function in C

 Expecting a reroll.
 cf. <0102015f5e5ee171-f30f4868-886f-47a1-a4e4-b4936afc545d-000000@eu-west-1.amazonses.com>


* mk/http-backend-content-length (2017-11-27) 4 commits
 - SQUASH???
 - t5560-http-backend-noserver.sh: add CONTENT_LENGTH cases
 - SQUASH???
 - http-backend: respect CONTENT_LENGTH as specified by rfc3875

 The http-backend (used for smart-http transport) used to slurp the
 whole input until EOF, without paying attention to CONTENT_LENGTH
 that is supplied in the environment and instead expecting the Web
 server to close the input stream.  This has been fixed.

 Expecting a reroll.
 Suggested fixes to be used when rerolling is queued, but I'd
 prefer _not_ squashing them myself.

 Also, it may be too complex solution for the problem.
 cf. <20171204171308.GA13332@sigill.intra.peff.net>


* jk/drop-ancient-curl (2017-08-09) 5 commits
 - http: #error on too-old curl
 - curl: remove ifdef'd code never used with curl >=7.19.4
 - http: drop support for curl < 7.19.4
 - http: drop support for curl < 7.16.0
 - http: drop support for curl < 7.11.1

 Some code in http.c that has bitrot is being removed.

 Expecting a reroll.


* mk/use-size-t-in-zlib (2017-08-10) 1 commit
 . zlib.c: use size_t for size

 The wrapper to call into zlib followed our long tradition to use
 "unsigned long" for sizes of regions in memory, which have been
 updated to use "size_t".

 Needs resurrecting by making sure the fix is good and still applies
 (or adjusted to today's codebase).

--------------------------------------------------
[Cooking]

* so/glossary-ancestor (2018-04-17) 1 commit
  (merged to 'next' on 2018-04-25 at 0a849fee00)
 + glossary: substitute "ancestor" for "direct ancestor" in 'push' description.

 Docfix.

 Will merge to 'master'.


* bt/gpg-interface (2018-04-16) 7 commits
 - gpg-interface: find the last gpg signature line
 - gpg-interface: extract gpg line matching helper
 - gpg-interface: fix const-correctness of "eol" pointer
 - gpg-interface: use size_t for signature buffer size
 - gpg-interface: modernize function declarations
 - gpg-interface: handle bool user.signingkey
 - t7004: fix mistaken tag name

 What is queued here is only the obviously correct and
 uncontroversial code clean-up part, which is an earlier 7 patches,
 of a larger series.

 The remainder that is not queued introuces a few configuration
 variables to deal with e-signature backends with different
 signature format.

 Will merge to 'next'.


* ds/generation-numbers (2018-04-11) 10 commits
 - commit: add short-circuit to paint_down_to_common()
 - commit: use generation numbers for in_merge_bases()
 - ref-filter: use generation number for --contains
 - commit-graph.txt: update future work
 - commit.c: use generation to halt paint walk
 - commit: use generations in paint_down_to_common()
 - commit-graph: compute generation numbers
 - commit: add generation number to struct commmit
 - merge: check config before loading commits
 - object.c: parse commit in graph first
 (this branch uses ds/commit-graph; is tangled with ds/lazy-load-trees.)

 A recently added "commit-graph" datafile has learned to store
 pre-computed generation numbers to speed up the decisions to stop
 history traversal.

 Expecting a reroll.
 cf. <cc58d8c1-f8de-4841-934f-56e4ad7729aa@gmail.com>


* en/rename-directory-detection-reboot (2018-04-25) 36 commits
 - merge-recursive: fix check for skipability of working tree updates
 - merge-recursive: make "Auto-merging" comment show for other merges
 - merge-recursive: fix remainder of was_dirty() to use original index
 - merge-recursive: fix was_tracked() to quit lying with some renamed paths
 - t6046: testcases checking whether updates can be skipped in a merge
 - merge-recursive: avoid triggering add_cacheinfo error with dirty mod
 - merge-recursive: move more is_dirty handling to merge_content
 - merge-recursive: improve add_cacheinfo error handling
 - merge-recursive: avoid spurious rename/rename conflict from dir renames
 - directory rename detection: new testcases showcasing a pair of bugs
 - merge-recursive: fix remaining directory rename + dirty overwrite cases
 - merge-recursive: fix overwriting dirty files involved in renames
 - merge-recursive: avoid clobbering untracked files with directory renames
 - merge-recursive: apply necessary modifications for directory renames
 - merge-recursive: when comparing files, don't include trees
 - merge-recursive: check for file level conflicts then get new name
 - merge-recursive: add computation of collisions due to dir rename & merging
 - merge-recursive: check for directory level conflicts
 - merge-recursive: add get_directory_renames()
 - merge-recursive: make a helper function for cleanup for handle_renames
 - merge-recursive: split out code for determining diff_filepairs
 - merge-recursive: make !o->detect_rename codepath more obvious
 - merge-recursive: fix leaks of allocated renames and diff_filepairs
 - merge-recursive: introduce new functions to handle rename logic
 - merge-recursive: move the get_renames() function
 - directory rename detection: tests for handling overwriting dirty files
 - directory rename detection: tests for handling overwriting untracked files
 - directory rename detection: miscellaneous testcases to complete coverage
 - directory rename detection: testcases exploring possibly suboptimal merges
 - directory rename detection: more involved edge/corner testcases
 - directory rename detection: testcases checking which side did the rename
 - directory rename detection: files/directories in the way of some renames
 - directory rename detection: partially renamed directory testcase/discussion
 - directory rename detection: testcases to avoid taking detection too far
 - directory rename detection: directory splitting testcases
 - directory rename detection: basic testcases

 Reboot of an attempt to detect wholesale directory renames and use
 it while merging.

 Expecting a reroll.
 cf. <CABPp-BHZ-agTY77iqe9BxLC2ijrcKO+UPk83Bn+0cckA3fJFYg@mail.gmail.com>


* nd/command-list (2018-04-24) 6 commits
 - help: use command-list.txt for the source of guides
 - help: add "-a --verbose" to list all commands with synopsis
 - git.c: implement --list-cmds=porcelain
 - generate-cmdlist.sh: keep all information in common-cmds.h
 - git.c: implement --list-cmds=all and use it in git-completion.bash
 - git.c: convert --list-*builtins to --list-cmds=*

 The list of commands with their various attributes were spread
 across a few places in the build procedure, but it now is getting a
 bit more consolidated to allow more automation.

 Expecting a reroll.
 Bash-isms and other things need to be fixed.


* sb/object-store-replace (2018-04-12) 15 commits
  (merged to 'next' on 2018-04-25 at 9a213fb505)
 + replace-object: allow lookup_replace_object to handle arbitrary repositories
 + replace-object: allow do_lookup_replace_object to handle arbitrary repositories
 + replace-object: allow prepare_replace_object to handle arbitrary repositories
 + refs: allow for_each_replace_ref to handle arbitrary repositories
 + refs: store the main ref store inside the repository struct
 + replace-object: add repository argument to lookup_replace_object
 + replace-object: add repository argument to do_lookup_replace_object
 + replace-object: add repository argument to prepare_replace_object
 + refs: add repository argument to for_each_replace_ref
 + refs: add repository argument to get_main_ref_store
 + replace-object: check_replace_refs is safe in multi repo environment
 + replace-object: eliminate replace objects prepared flag
 + object-store: move lookup_replace_object to replace-object.h
 + replace-object: move replace_map to object store
 + replace_object: use oidmap
 (this branch is used by sb/oid-object-info.)

 The effort to pass the repository in-core structure throughout the
 API continues.  This round deals with the code that implements the
 refs/replace/ mechanism.

 Will merge to 'master'.


* hn/bisect-first-parent (2018-04-21) 1 commit
 - bisect: create 'bisect_flags' parameter in find_bisection()

 Preliminary code update to allow passing more flags down the
 bisection codepath in the future.

 We do not add random code that does not have real users to our
 codebase, so let's have it wait until such a real code materializes
 before too long.


* sg/complete-paths (2018-04-17) 11 commits
 - completion: fill COMPREPLY directly when completing paths
 - completion: improve handling quoted paths in 'git ls-files's output
 - completion: remove repeated dirnames with 'awk' during path completion
 - t9902-completion: ignore COMPREPLY element order in some tests
 - completion: use 'awk' to strip trailing path components
 - completion: let 'ls-files' and 'diff-index' filter matching paths
 - completion: improve handling quoted paths on the command line
 - completion: support completing non-ASCII pathnames
 - completion: simplify prefix path component handling during path completion
 - completion: move __git_complete_index_file() next to its helpers
 - t9902-completion: add tests demonstrating issues with quoted pathnames

 Command line completion (in contrib/) learned to complete pathnames
 for various commands better.

 Will merge to 'next'.


* tq/t1510 (2018-04-17) 1 commit
  (merged to 'next' on 2018-04-25 at 5710c81979)
 + t1510-repo-setup.sh: remove useless mkdir

 Test cleanup.

 Will merge to 'master'.


* sb/blame-color (2018-04-24) 3 commits
 - builtin/blame: add new coloring scheme config
 - builtin/blame: highlight recently changed lines
 - builtin/blame: dim uninteresting metadata lines

 "git blame" learns to unhighlight uninteresting metadata from the
 originating commit on lines that are the same as the previous one,
 and also paint lines in different colors depending on the age of
 the commit.


* ab/simplify-perl-makefile (2018-04-19) 2 commits
  (merged to 'next' on 2018-04-25 at 906cf21682)
 + Makefile: mark perllibdir as a .PHONY target
  (merged to 'next' on 2018-04-17 at 4448756934)
 + perl: fix installing modules from contrib

 Recent simplification of build procedure forgot a bit of tweak to
 the build procedure of contrib/mw-to-git/

 Will merge to 'master'.


* ds/lazy-load-trees (2018-04-11) 5 commits
  (merged to 'next' on 2018-04-25 at b90813f421)
 + commit-graph: lazy-load trees for commits
 + treewide: replace maybe_tree with accessor methods
 + commit: create get_commit_tree() method
 + treewide: rename tree to maybe_tree
 + Merge branch 'bw/c-plus-plus' into ds/lazy-load-trees
 (this branch uses ds/commit-graph; is tangled with ds/generation-numbers.)

 The code has been taught to use the duplicated information stored
 in the commit-graph file to learn the tree object name for a commit
 to avoid opening and parsing the commit object when it makes sense
 to do so.

 Will merge to 'master'.


* ab/git-svn-get-record-typofix (2018-04-09) 1 commit
 - git-svn: avoid warning on undef readline()

 "git svn" had a minor thinko/typo which has been fixed.

 Will merge to 'next'.


* hn/sort-ls-remote (2018-04-09) 1 commit
 - ls-remote: create '--sort' option

 "git ls-remote" learned an option to allow sorting its output based
 on the refnames being shown.

 Will merge to 'next'.


* js/empty-config-section-fix (2018-04-09) 15 commits
  (merged to 'next' on 2018-04-25 at 1690df3e5f)
 + git_config_set: reuse empty sections
 + git config --unset: remove empty sections (in the common case)
 + git_config_set: make use of the config parser's event stream
 + git_config_set: do not use a state machine
 + config_set_store: rename some fields for consistency
 + config: avoid using the global variable `store`
 + config: introduce an optional event stream while parsing
 + t1300: `--unset-all` can leave an empty section behind (bug)
 + t1300: add a few more hairy examples of sections becoming empty
 + t1300: remove unreasonable expectation from TODO
 + t1300: avoid relying on a bug
 + config --replace-all: avoid extra line breaks
 + t1300: demonstrate that --replace-all can "invent" newlines
 + t1300: rename it to reflect that `repo-config` was deprecated
 + git_config_set: fix off-by-two

 "git config --unset a.b", when "a.b" is the last variable in an
 otherwise empty section "a", left an empty section "a" behind, and
 worse yet, a subsequent "git config a.c value" did not reuse that
 empty shell and instead created a new one.  These have been
 (partially) corrected.

 Will merge to 'master'.


* nd/warn-more-for-devs (2018-04-16) 4 commits
  (merged to 'next' on 2018-04-25 at 2978e61414)
 + Makefile: add a DEVOPTS to get all of -Wextra
 + Makefile: add a DEVOPTS to suppress -Werror under DEVELOPER
 + Makefile: detect compiler and enable more warnings in DEVELOPER=1
 + connect.c: mark die_initial_contact() NORETURN

 The build procedure "make DEVELOPER=YesPlease" learned to enable a
 bit more warning options depending on the compiler used to help
 developers more.  There also is "make DEVOPTS=tokens" knob
 available now, for those who want to help fixing warnings we
 usually ignore, for example.

 Will merge to 'master'.


* sb/submodule-move-nested (2018-03-29) 6 commits
  (merged to 'next' on 2018-04-25 at 86b177433a)
 + submodule: fixup nested submodules after moving the submodule
 + submodule-config: remove submodule_from_cache
 + submodule-config: add repository argument to submodule_from_{name, path}
 + submodule-config: allow submodule_free to handle arbitrary repositories
 + grep: remove "repo" arg from non-supporting funcs
 + submodule.h: drop declaration of connect_work_tree_and_git_dir

 Moving a submodule that itself has submodule in it with "git mv"
 forgot to make necessary adjustment to the nested sub-submodules;
 now the codepath learned to recurse into the submodules.

 Will merge to 'master'.


* tb/config-type (2018-04-19) 2 commits
  (merged to 'next' on 2018-04-25 at fe69e93c82)
 + builtin/config.c: support `--type=<type>` as preferred alias for `--<type>`
 + builtin/config.c: treat type specifiers singularly
 (this branch is used by tb/config-default.)

 The "git config" command uses separate options e.g. "--int",
 "--bool", etc. to specify what type the caller wants the value to
 be interpreted as.  A new "--type=<typename>" option has been
 introduced, which would make it cleaner to define new types.

 Expecting a final reroll.
 cf. <20180411034941.GA63158@syl.local>
 This looked more or less ready, IIRC


* tb/config-default (2018-04-23) 3 commits
  (merged to 'next' on 2018-04-25 at 59bb6beb2a)
 + builtin/config: introduce `color` type specifier
 + config.c: introduce 'git_config_color' to parse ANSI colors
 + builtin/config: introduce `--default`
 (this branch uses tb/config-type.)

 "git config --get" learned the "--default" option, to help the
 calling script.  Building on top of the tb/config-type topic, the
 "git config" learns "--type=color" type.  Taken together, you can
 do things like "git config --get foo.color --default blue" and get
 the ANSI color sequence for the color given to foo.color variable,
 or "blue" if the variable does not exist.

 Will wait on the tb/config-type topic.


* jh/json-writer (2018-03-28) 1 commit
 - json_writer: new routines to create data in JSON format

 Preparatory code to later add json output for unspecified telemetry
 data.

 We do not add random code that does not have real users to our
 codebase, so let's have it wait until such a real code materializes
 before too long.


* ot/libify-get-ref-atom-value (2018-03-29) 6 commits
  (merged to 'next' on 2018-04-25 at 056bcaa69c)
 + ref-filter: libify get_ref_atom_value()
 + ref-filter: add return value to parsers
 + ref-filter: change parsing function error handling
 + ref-filter: add return value && strbuf to handlers
 + ref-filter: start adding strbufs with errors
 + ref-filter: add shortcut to work with strbufs

 Code restructuring, in preparation for further work.

 Will merge to 'master'.


* jk/branch-l-0-deprecation (2018-03-26) 3 commits
  (merged to 'next' on 2018-04-11 at 9b2b0305dd)
 + branch: deprecate "-l" option
 + t: switch "branch -l" to "branch --create-reflog"
 + t3200: unset core.logallrefupdates when testing reflog creation
 (this branch is used by jk/branch-l-1-removal and jk/branch-l-2-reincarnation.)

 The "-l" option in "git branch -l" is an unfortunate short-hand for
 "--create-reflog", but many users, both old and new, somehow expect
 it to be something else, perhaps "--list".  This step deprecates
 the short-hand and warns about the future removal of the it when it
 is used.

 Will cook in 'next'.


* jk/branch-l-1-removal (2018-03-26) 1 commit
 - branch: drop deprecated "-l" option
 (this branch is used by jk/branch-l-2-reincarnation; uses jk/branch-l-0-deprecation.)

 Following the "git branch -l" deprecation, the short-hand is removed.

 Will keep in 'pu'.


* jk/branch-l-2-reincarnation (2018-03-26) 1 commit
 - branch: make "-l" a synonym for "--list"
 (this branch uses jk/branch-l-0-deprecation and jk/branch-l-1-removal.)

 Following the "git branch -l" removal, "-l" is resurrected as a
 short-hand for "--list".

 Will keep in 'pu'.


* dj/runtime-prefix (2018-04-24) 7 commits
  (merged to 'next' on 2018-04-25 at e7e635a70e)
 + Makefile: quote $INSTLIBDIR when passing it to sed
 + Makefile: remove unused @@PERLLIBDIR@@ substitution variable
  (merged to 'next' on 2018-04-17 at a69aaa7a22)
 + mingw/msvc: use the new-style RUNTIME_PREFIX helper
 + exec_cmd: provide a new-style RUNTIME_PREFIX helper for Windows
 + exec_cmd: RUNTIME_PREFIX on some POSIX systems
 + Makefile: add Perl runtime prefix support
 + Makefile: generate Perl header from template file
 (this branch is tangled with js/runtime-prefix.)

 A build-time option has been added to allow Git to be told to refer
 to its associated files relative to the main binary, in the same
 way that has been possible on Windows for quite some time, for
 Linux, BSDs and Darwin.

 Will merge to 'master'.


* ab/nuke-emacs-contrib (2018-04-16) 1 commit
  (merged to 'next' on 2018-04-25 at 9b133d8a65)
 + git{,-blame}.el: remove old bitrotting Emacs code

 The scripts in contrib/emacs/ have outlived their usefulness and
 have been replaced with a stub that errors out and tells the user
 there are replacements.

 Will merge to 'master'.


* nd/pack-objects-pack-struct (2018-04-16) 15 commits
 - ci: exercise the whole test suite with uncommon code in pack-objects
 - pack-objects: reorder members to shrink struct object_entry
 - pack-objects: shrink delta_size field in struct object_entry
 - pack-objects: shrink size field in struct object_entry
 - pack-objects: clarify the use of object_entry::size
 - pack-objects: don't check size when the object is bad
 - pack-objects: shrink z_delta_size field in struct object_entry
 - pack-objects: refer to delta objects by index instead of pointer
 - pack-objects: move in_pack out of struct object_entry
 - pack-objects: move in_pack_pos out of struct object_entry
 - pack-objects: use bitfield for object_entry::depth
 - pack-objects: use bitfield for object_entry::dfs_state
 - pack-objects: turn type and in_pack_type to bitfields
 - pack-objects: a bit of document about struct object_entry
 - read-cache.c: make $GIT_TEST_SPLIT_INDEX boolean

 "git pack-objects" needs to allocate tons of "struct object_entry"
 while doing its work, and shrinking its size helps the performance
 quite a bit.

 What's the doneness of this thing?  The interdiff since previous
 rounds looked reasonable, but I didn't see this round otherwise
 scrutinized by reviewers.  The numbers given in the commit near the
 tip do look impressive, though ;-)


* nd/repack-keep-pack (2018-04-16) 7 commits
 - pack-objects: show some progress when counting kept objects
 - gc --auto: exclude base pack if not enough mem to "repack -ad"
 - gc: handle a corner case in gc.bigPackThreshold
 - gc: add gc.bigPackThreshold config
 - gc: add --keep-largest-pack option
 - repack: add --keep-pack option
 - t7700: have closing quote of a test at the beginning of line

 "git gc" in a large repository takes a lot of time as it considers
 to repack all objects into one pack by default.  The command has
 been taught to pretend as if the largest existing packfile is
 marked with ".keep" so that it is left untouched while objects in
 other packs and loose ones are repacked.

 What's the doneness of this thing?  The interdiff since the earlier
 one looked reasonable, but I didn't see this round otherwise
 scrutinized by reviewers.


* pw/add-p-select (2018-03-16) 3 commits
 - add -p: optimize line selection for short hunks
 - add -p: allow line selection to be inverted
 - add -p: select individual hunk lines

 "git add -p" interactive interface learned to let users choose
 individual added/removed lines to be used in the operation, instead
 of accepting or rejecting a whole hunk.

 Expecting a reroll to reignite the discussion.
 cf. <9895c7b7-eac4-28c1-90c6-443acd1131b7@talktalk.net>


* ds/commit-graph (2018-04-11) 16 commits
  (merged to 'next' on 2018-04-25 at 18af3d28d9)
 + commit-graph: implement "--append" option
 + commit-graph: build graph from starting commits
 + commit-graph: read only from specific pack-indexes
 + commit: integrate commit graph with commit parsing
 + commit-graph: close under reachability
 + commit-graph: add core.commitGraph setting
 + commit-graph: implement git commit-graph read
 + commit-graph: implement git-commit-graph write
 + commit-graph: implement write_commit_graph()
 + commit-graph: create git-commit-graph builtin
 + graph: add commit graph design document
 + commit-graph: add format document
 + csum-file: refactor finalize_hashfile() method
 + csum-file: rename hashclose() to finalize_hashfile()
 + Merge branch 'jk/cached-commit-buffer' into HEAD
 + Merge branch 'jt/binsearch-with-fanout' into HEAD
 (this branch is used by ds/generation-numbers and ds/lazy-load-trees.)

 Precompute and store information necessary for ancestry traversal
 in a separate file to optimize graph walking.

 Will merge to 'master'.


* pc/submodule-helper-foreach (2018-02-02) 5 commits
 - submodule: port submodule subcommand 'foreach' from shell to C
 - submodule foreach: document variable '$displaypath'
 - submodule foreach: clarify the '$toplevel' variable documentation
 - submodule foreach: document '$sm_path' instead of '$path'
 - submodule foreach: correct '$path' in nested submodules from a subdirectory

 Expecting a response to review comments
 e.g. cf. <20180206150044.1bffbb573c088d38c8e44bf5@google.com>


* tg/worktree-add-existing-branch (2018-04-25) 4 commits
 - worktree: teach "add" to check out existing branches
 - worktree: factor out dwim_branch function
 - worktree: improve message when creating a new worktree
 - worktree: remove extra members from struct add_opts

 "git worktree add" learned to check out an existing branch.

 Is this ready for 'next'?


* js/rebase-recreate-merge (2018-04-24) 16 commits
 - rebase -i --rebase-merges: add a section to the man page
 - rebase -i: introduce --rebase-merges=[no-]rebase-cousins
 - pull: accept --rebase=merges to recreate the branch topology
 - rebase --rebase-merges: avoid "empty merges"
 - sequencer: handle post-rewrite for merge commands
 - sequencer: make refs generated by the `label` command worktree-local
 - rebase --rebase-merges: add test for --keep-empty
 - rebase: introduce the --rebase-merges option
 - rebase-helper --make-script: introduce a flag to rebase merges
 - sequencer: fast-forward `merge` commands, if possible
 - sequencer: introduce the `merge` command
 - git-rebase--interactive: clarify arguments
 - sequencer: offer helpful advice when a command was rescheduled
 - sequencer: refactor how original todo list lines are accessed
 - sequencer: make rearrange_squash() a bit more obvious
 - sequencer: avoid using errno clobbered by rollback_lock_file()

 "git rebase" learned "--rebase-merges" to transplant the whole
 topology of commit graph elsewhere.

 Was on hold.  What's the donness of this thing?
 cf. <nycvar.QRO.7.76.6.1804210017020.4241@ZVAVAG-6OXH6DA.rhebcr.pbec.zvpebfbsg.pbz>


* bw/protocol-v2 (2018-03-15) 35 commits
  (merged to 'next' on 2018-04-11 at 23ee234a2c)
 + remote-curl: don't request v2 when pushing
 + remote-curl: implement stateless-connect command
 + http: eliminate "# service" line when using protocol v2
 + http: don't always add Git-Protocol header
 + http: allow providing extra headers for http requests
 + remote-curl: store the protocol version the server responded with
 + remote-curl: create copy of the service name
 + pkt-line: add packet_buf_write_len function
 + transport-helper: introduce stateless-connect
 + transport-helper: refactor process_connect_service
 + transport-helper: remove name parameter
 + connect: don't request v2 when pushing
 + connect: refactor git_connect to only get the protocol version once
 + fetch-pack: support shallow requests
 + fetch-pack: perform a fetch using v2
 + upload-pack: introduce fetch server command
 + push: pass ref prefixes when pushing
 + fetch: pass ref prefixes when fetching
 + ls-remote: pass ref prefixes when requesting a remote's refs
 + transport: convert transport_get_remote_refs to take a list of ref prefixes
 + transport: convert get_refs_list to take a list of ref prefixes
 + connect: request remote refs using v2
 + ls-refs: introduce ls-refs server command
 + serve: introduce git-serve
 + test-pkt-line: introduce a packet-line test helper
 + protocol: introduce enum protocol_version value protocol_v2
 + transport: store protocol version
 + connect: discover protocol version outside of get_remote_heads
 + connect: convert get_remote_heads to use struct packet_reader
 + transport: use get_refs_via_connect to get refs
 + upload-pack: factor out processing lines
 + upload-pack: convert to a builtin
 + pkt-line: add delim packet support
 + pkt-line: allow peeking a packet line without consuming it
 + pkt-line: introduce packet_read_with_status
 (this branch is used by bw/server-options.)

 The beginning of the next-gen transfer protocol.

 Will cook in 'next'.


* ls/checkout-encoding (2018-04-16) 10 commits
  (merged to 'next' on 2018-04-25 at e0f8554b2a)
 + convert: add round trip check based on 'core.checkRoundtripEncoding'
 + convert: add tracing for 'working-tree-encoding' attribute
 + convert: check for detectable errors in UTF encodings
 + convert: add 'working-tree-encoding' attribute
 + utf8: add function to detect a missing UTF-16/32 BOM
 + utf8: add function to detect prohibited UTF-16/32 BOM
 + utf8: teach same_encoding() alternative UTF encoding names
 + strbuf: add a case insensitive starts_with()
 + strbuf: add xstrdup_toupper()
 + strbuf: remove unnecessary NUL assignment in xstrdup_tolower()

 The new "checkout-encoding" attribute can ask Git to convert the
 contents to the specified encoding when checking out to the working
 tree (and the other way around when checking in).

 Will merge to 'master'.
 This looked more or less ready for 'next'.  Please stop me if there
 are remaining issues I forgot about.

--------------------------------------------------
[Discarded]

* js/runtime-prefix-windows (2018-03-27) 5 commits
 . mingw/msvc: use the new-style RUNTIME_PREFIX helper
 . exec_cmd: provide a new-style RUNTIME_PREFIX helper for Windows
 . exec_cmd: RUNTIME_PREFIX on some POSIX systems
 . Makefile: add Perl runtime prefix support
 . Makefile: generate Perl header from template file

 The Windows port was the first that allowed Git to be installed
 anywhere by having its components refer to each other with relative
 pathnames.  The recent dj/runtime-prefix topic extends the idea to
 other platforms, and its approach has been adopted back in the
 Windows port.

 Ejected, as the parent topic dj/runtime-prefix covers Windows now.


* bp/fsexcludes (2018-04-16) 2 commits
 . fsmonitor: switch to use new fsexcludes logic and remove unused untracked cache based logic
 . fsexcludes: add a programmatic way to exclude files from git's working directory traversal logic

 Can we have a few lines summary here, just like we have for other
 topic ;-) I personally take the overlong title of these commits as
 a sign that they can further be simplified and cleaned up by
 splitting, focusing the scope, etc.

 Retracted.
 cf. <0de30972-b0a2-67e8-7cff-c19daf9ece8b@gmail.com>

^ permalink raw reply	[relevance 3%]

* What's cooking in git.git (Apr 2018, #04; Mon, 30)
@ 2018-04-30  3:25  3% Junio C Hamano
  0 siblings, 0 replies; 200+ results
From: Junio C Hamano @ 2018-04-30  3:25 UTC (permalink / raw)
  To: git


What's cooking in git.git (Apr 2018, #04; Mon, 30)
--------------------------------------------------

Here are the topics that have been cooking.  Commits prefixed with
'-' are only in 'pu' (proposed updates) while commits prefixed with
'+' are in 'next'.  The ones marked with '.' do not appear in any of
the integration branches, but I am still holding onto them.

You can find the changes described here in the integration branches
of the repositories listed at

    http://git-blame.blogspot.com/p/git-public-repositories.html

--------------------------------------------------
[New Topics]

* cc/perf-aggregate-unknown-option (2018-04-26) 1 commit
 - perf/aggregate: use Getopt::Long for option parsing

 Perf-test helper updates.

 Will merge to 'next'.


* ab/perl-python-attrs (2018-04-27) 3 commits
 - .gitattributes: add a diff driver for Python
 - .gitattributes: use the "perl" differ for Perl
 - .gitattributes: add *.pl extension for Perl

 We learned that our source files with ".pl" and ".py" extensions
 are Perl and Python files respectively and changes to them are
 better viewed as such with appropriate diff drivers.

 Will merge to 'next'.


* is/parsing-line-range (2018-04-27) 2 commits
 . log: prevent error if line range ends past end of file
 . blame: prevent error if range ends past end of file

 Parsing of -L[<N>][,[<M>]] parameters "git blame" and "git log"
 take has been tweaked.

 Seems to break a few tests.


* js/test-unset-prereq (2018-04-30) 1 commit
 - tests: introduce test_unset_prereq, for debugging

 Test debugging aid.

 Will merge to 'next'.

--------------------------------------------------
[Stalled]

* ld/p4-unshelve (2018-02-22) 1 commit
 - git-p4: add unshelve command

 "git p4" learned to "unshelve" shelved commit from P4.

 Will hold, perhaps drop and use format-change that uses a proper "diff".
 cf. <CAE5ih7_ooDMqVtTMoQ70s5XCkncr04HY0JkqSp1UmKQeG81oaA@mail.gmail.com>


* av/fsmonitor-updates (2018-01-04) 6 commits
 - fsmonitor: use fsmonitor data in `git diff`
 - fsmonitor: remove debugging lines from t/t7519-status-fsmonitor.sh
 - fsmonitor: make output of test-dump-fsmonitor more concise
 - fsmonitor: update helper tool, now that flags are filled later
 - fsmonitor: stop inline'ing mark_fsmonitor_valid / _invalid
 - dir.c: update comments to match argument name

 Code clean-up on fsmonitor integration, plus optional utilization
 of the fsmonitor data in diff-files.

 Waiting for an update.
 cf. <alpine.DEB.2.21.1.1801042335130.32@MININT-6BKU6QN.europe.corp.microsoft.com>


* pb/bisect-helper-2 (2017-10-28) 8 commits
 - t6030: make various test to pass GETTEXT_POISON tests
 - bisect--helper: `bisect_start` shell function partially in C
 - bisect--helper: `get_terms` & `bisect_terms` shell function in C
 - bisect--helper: `bisect_next_check` shell function in C
 - bisect--helper: `check_and_set_terms` shell function in C
 - wrapper: move is_empty_file() and rename it as is_empty_or_missing_file()
 - bisect--helper: `bisect_write` shell function in C
 - bisect--helper: `bisect_reset` shell function in C

 Expecting a reroll.
 cf. <0102015f5e5ee171-f30f4868-886f-47a1-a4e4-b4936afc545d-000000@eu-west-1.amazonses.com>


* mk/http-backend-content-length (2017-11-27) 4 commits
 - SQUASH???
 - t5560-http-backend-noserver.sh: add CONTENT_LENGTH cases
 - SQUASH???
 - http-backend: respect CONTENT_LENGTH as specified by rfc3875

 The http-backend (used for smart-http transport) used to slurp the
 whole input until EOF, without paying attention to CONTENT_LENGTH
 that is supplied in the environment and instead expecting the Web
 server to close the input stream.  This has been fixed.

 Expecting a reroll.
 Suggested fixes to be used when rerolling is queued, but I'd
 prefer _not_ squashing them myself.

 Also, it may be too complex solution for the problem.
 cf. <20171204171308.GA13332@sigill.intra.peff.net>


* jk/drop-ancient-curl (2017-08-09) 5 commits
 - http: #error on too-old curl
 - curl: remove ifdef'd code never used with curl >=7.19.4
 - http: drop support for curl < 7.19.4
 - http: drop support for curl < 7.16.0
 - http: drop support for curl < 7.11.1

 Some code in http.c that has bitrot is being removed.

 Expecting a reroll.


* mk/use-size-t-in-zlib (2017-08-10) 1 commit
 . zlib.c: use size_t for size

 The wrapper to call into zlib followed our long tradition to use
 "unsigned long" for sizes of regions in memory, which have been
 updated to use "size_t".

 Needs resurrecting by making sure the fix is good and still applies
 (or adjusted to today's codebase).

--------------------------------------------------
[Cooking]

* fg/completion-external (2018-04-30) 1 commit
 - completion: load completion file for external subcommand

 The command line completion mechanism (in contrib/) learned to load
 custom completion file for "git $command" where $command is a
 custom "git-$command" that the end user has on the $PATH when using
 newer version of bash.


* ma/double-dashes-in-docs (2018-04-18) 4 commits
  (merged to 'next' on 2018-04-25 at aaac2dc63c)
 + git-submodule.txt: quote usage in monospace, drop backslash
 + git-[short]log.txt: unify quoted standalone --
 + doc: convert [\--] to [--]
 + doc: convert \--option to --option

 Doc formatting updates.

 Will merge to 'master'.


* sb/worktree-remove-opt-force (2018-04-18) 1 commit
  (merged to 'next' on 2018-04-25 at 0367d52a4b)
 + worktree: accept -f as short for --force for removal

 "git worktree remove" learned that "-f" is a shorthand for
 "--force" option, just like for "git worktree add".

 Will merge to 'master'.


* sg/completion-clear-cached (2018-04-18) 1 commit
  (merged to 'next' on 2018-04-25 at 9178da6c3d)
 + completion: reduce overhead of clearing cached --options

 The completion script (in contrib/) learned to clear cached list of
 command line options upon dot-sourcing it again in a more efficient
 way.

 Will merge to 'master'.


* sg/doc-gc-quote-mismatch-fix (2018-04-18) 1 commit
  (merged to 'next' on 2018-04-25 at bc3d1abf45)
 + docs/git-gc: fix minor rendering issue

 Doc formatting fix.

 Will merge to 'master'.


* js/ident-date-fix (2018-04-19) 1 commit
  (merged to 'next' on 2018-04-30 at d50ec2f4c1)
 + sequencer: reset the committer date before commits

 During a "rebase -i" session, the code could give older timestamp
 to commits created by later "pick" than an earlier "reword", which
 has been corrected.

 Will merge to 'master'.


* nd/submodule-status-fix (2018-04-19) 1 commit
  (merged to 'next' on 2018-04-30 at 34d1f9ca83)
 + submodule--helper: don't print null in 'submodule status'

 "git submodule status" did not check the symbolic revision name it
 computed for the submodule HEAD is not the NULL, and threw it at
 printf routines, which has been corrected.

 Will merge to 'master'.


* sa/send-email-dedup-some-headers (2018-04-19) 1 commit
  (merged to 'next' on 2018-04-30 at 2a1fd8217e)
 + send-email: avoid duplicate In-Reply-To/References

 When fed input that already has In-Reply-To: and/or References:
 headers and told to add the same information, "git send-email"
 added these headers separately, instead of appending to an existing
 one, which is a violation of the RFC.  This has been corrected.

 Will merge to 'master'.


* tg/demote-stash-save-in-completion (2018-04-20) 2 commits
  (merged to 'next' on 2018-04-30 at 93d0af5375)
 + completion: make stash -p and alias for stash push -p
 + completion: stop showing 'save' for stash by default

 The command line completion (in contrib/) has been taught that "git
 stash save" has been deprecated ("git stash push" is the preferred
 spelling in the new world) and does not offer it as a possible
 completion candidate when "git stash push" can be.

 Will merge to 'master'.


* tz/doc-git-urls-reference (2018-04-20) 1 commit
  (merged to 'next' on 2018-04-30 at 39926c99fd)
 + doc/clone: update caption for GIT URLS cross-reference

 Doc fix.

 Will merge to 'master'.


* js/deprecate-grafts (2018-04-30) 12 commits
 - Remove obsolete script to convert grafts to replace refs
 - technical/shallow: describe why shallow cannot use replace refs
 - technical/shallow: stop referring to grafts
 - filter-branch: stop suggesting to use grafts
 - Deprecate support for .git/info/grafts
 - Add a test for `git replace --convert-graft-file`
 - replace: introduce --convert-graft-file
 - replace: prepare create_graft() for converting graft files wholesale
 - replace: "libify" create_graft() and callees
 - replace: avoid using die() to indicate a bug
 - commit: Let the callback of for_each_mergetag return on error
 - argv_array: offer to split a string by whitespace

 The functionality of "$GIT_DIR/info/grafts" has been superseded by
 the "refs/replace/" mechanism for some time now, but the internal
 code had support for it in many places, which has been cleaned up
 in order to drop support of the "grafts" mechanism.

 Will merge to 'next'.


* js/rebase-i-clean-msg-after-fixup-continue (2018-04-30) 4 commits
 - rebase --skip: clean up commit message after a failed fixup/squash
 - sequencer: always commit without editing when asked for
 - rebase -i: Handle "combination of <n> commits" with GETTEXT_POISON
 - rebase -i: demonstrate bugs with fixup!/squash! commit messages

 "git rebase -i" sometimes left intermediate "# This is a
 combination of N commits" message meant for the human consumption
 inside an editor in the final result in certain corner cases, which
 has been fixed.

 Will merge to 'next'.


* ma/fast-export-skip-merge-fix (2018-04-21) 1 commit
  (merged to 'next' on 2018-04-30 at f7fca02ab1)
 + fast-export: fix regression skipping some merge-commits

 "git fast-export" had a regression in v2.15.0 era where it skipped
 some merge commits in certain cases, which has been corrected.

 Will merge to 'master'.


* bw/server-options (2018-04-24) 4 commits
 - fetch: send server options when using protocol v2
 - ls-remote: send server options when using protocol v2
 - serve: introduce the server-option capability
 - Merge branch 'bw/protocol-v2' into HEAD
 (this branch uses bw/protocol-v2.)

 The transport protocol v2 is getting updated further.

 Will merge to 'next'.


* jc/parseopt-expiry-errors (2018-04-23) 2 commits
  (merged to 'next' on 2018-04-30 at 637085f3d8)
 + parseopt: handle malformed --expire arguments more nicely
 + gc: do not upcase error message shown with die()

 "git gc --prune=nonsense" spent long time repacking and then
 silently failed when underlying "git prune --expire=nonsense"
 failed to parse its command line.  This has been corrected.

 Will merge to 'master'.


* js/colored-push-errors (2018-04-24) 4 commits
  (merged to 'next' on 2018-04-30 at 31076c52a2)
 + config: document the settings to colorize push errors/hints
 + push: test to verify that push errors are colored
 + push: colorize errors
 + color: introduce support for colorizing stderr

 Error messages from "git push" can be painted for more visibility.

 Will merge to 'master'.


* js/runtime-prefix (2018-04-24) 8 commits
  (merged to 'next' on 2018-04-30 at c6cfccf40e)
 + Avoid multiple PREFIX definitions
 + git_setup_gettext: plug memory leak
 + gettext: avoid initialization if the locale dir is not present
  (merged to 'next' on 2018-04-17 at a69aaa7a22)
 + mingw/msvc: use the new-style RUNTIME_PREFIX helper
 + exec_cmd: provide a new-style RUNTIME_PREFIX helper for Windows
 + exec_cmd: RUNTIME_PREFIX on some POSIX systems
 + Makefile: add Perl runtime prefix support
 + Makefile: generate Perl header from template file
 (this branch is tangled with dj/runtime-prefix.)

 Will merge to 'master'.


* ma/http-walker-no-partial (2018-04-24) 2 commits
  (merged to 'next' on 2018-04-30 at 4582c99ba8)
 + walker: drop fields of `struct walker` which are always 1
 + http-fetch: make `-a` standard behaviour

 "git http-fetch" (deprecated) had an optional and experimental
 "feature" to fetch only commits and/or trees, which nobody used.
 This has been removed.

 Will merge to 'master'.


* bc/object-id (2018-04-24) 41 commits
 - merge-one-file: compute empty blob object ID
 - add--interactive: compute the empty tree value
 - Update shell scripts to compute empty tree object ID
 - sha1_file: only expose empty object constants through git_hash_algo
 - dir: use the_hash_algo for empty blob object ID
 - sequencer: use the_hash_algo for empty tree object ID
 - cache-tree: use is_empty_tree_oid
 - sha1_file: convert cached object code to struct object_id
 - builtin/reset: convert use of EMPTY_TREE_SHA1_BIN
 - builtin/receive-pack: convert one use of EMPTY_TREE_SHA1_HEX
 - wt-status: convert two uses of EMPTY_TREE_SHA1_HEX
 - submodule: convert several uses of EMPTY_TREE_SHA1_HEX
 - sequencer: convert one use of EMPTY_TREE_SHA1_HEX
 - merge: convert empty tree constant to the_hash_algo
 - builtin/merge: switch tree functions to use object_id
 - builtin/am: convert uses of EMPTY_TREE_SHA1_BIN to the_hash_algo
 - builtin/receive-pack: avoid hard-coded constants for push certs
 - diff: specify abbreviation size in terms of the_hash_algo
 - upload-pack: replace use of several hard-coded constants
 - revision: replace use of hard-coded constants
 - http: eliminate hard-coded constants
 - dir: convert struct untracked_cache_dir to object_id
 - commit: convert uses of get_sha1_hex to get_oid_hex
 - index-pack: abstract away hash function constant
 - pack-redundant: convert linked lists to use struct object_id
 - Update struct index_state to use struct object_id
 - split-index: convert struct split_index to object_id
 - submodule-config: convert structures to object_id
 - fsck: convert static functions to struct object_id
 - tree-walk: convert get_tree_entry_follow_symlinks to object_id
 - tree-walk: avoid hard-coded 20 constant
 - pack-redundant: abstract away hash algorithm
 - pack-objects: abstract away hash algorithm
 - packfile: abstract away hash constant values
 - packfile: convert find_pack_entry to object_id
 - sha1_file: convert freshen functions to object_id
 - packfile: convert has_sha1_pack to object_id
 - packfile: remove unused member from struct pack_entry
 - Remove unused member in struct object_context
 - server-info: remove unused members from struct pack_info
 - cache: add a function to read an object ID from a buffer

 Conversion from uchar[20] to struct object_id continues.

 Expecting a reroll.
 cf. <20180426011337.GA722934@genre.crustytoothpaste.net>


* sb/oid-object-info (2018-04-26) 9 commits
 - cache.h: allow oid_object_info to handle arbitrary repositories
 - packfile: add repository argument to cache_or_unpack_entry
 - packfile: add repository argument to unpack_entry
 - packfile: add repository argument to read_object
 - packfile: add repository argument to packed_object_info
 - packfile: add repository argument to packed_to_object_type
 - packfile: add repository argument to retry_bad_packed_offset
 - cache.h: add repository argument to oid_object_info
 - cache.h: add repository argument to oid_object_info_extended
 (this branch uses sb/object-store-replace.)

 The codepath around object-info API has been taught to take the
 repository object (which in turn tells the API which object store
 the objects are to be located).

 Will merge to 'next'.


* en/unpack-trees-split-index-fix (2018-04-24) 1 commit
 - unpack_trees: fix breakage when o->src_index != o->dst_index

 The split-index feature had a long-standing and dormant bug in
 certain use of the in-core merge machinery, which has been fixed.

 Hold.
 cf. <CACsJy8DyP_mXXJKn52Jzqe63N3GLpXePCr8ha97Lv9hr6u-M0w@mail.gmail.com>


* bp/merge-rename-config (2018-04-25) 2 commits
 - merge: add merge.aggressive config setting
 - merge: add merge.renames config setting


* en/git-debugger (2018-04-25) 1 commit
 - Make running git under other debugger-like programs easy

 Dev support.

 Will merge to 'next'.


* js/no-pager-shorthand (2018-04-25) 1 commit
 - git: add -N as a short option for --no-pager

 "git --no-pager cmd" did not have short-and-sweet single letter
 option. Now it does.

 Will merge to 'next'.


* sb/diff-color-move-more (2018-04-25) 7 commits
 - diff.c: add --color-moved-ignore-space-delta option
 - diff.c: decouple white space treatment from move detection algorithm
 - diff.c: add a blocks mode for moved code detection
 - diff.c: adjust hash function signature to match hashmap expectation
 - diff.c: do not pass diff options as keydata to hashmap
 - xdiff/xdiffi.c: remove unneeded function declarations
 - xdiff/xdiff.h: remove unused flags

 "git diff --color-moved" feature has further been tweaked.


* so/glossary-ancestor (2018-04-17) 1 commit
  (merged to 'next' on 2018-04-25 at 0a849fee00)
 + glossary: substitute "ancestor" for "direct ancestor" in 'push' description.

 Docfix.

 Will merge to 'master'.


* bt/gpg-interface (2018-04-16) 7 commits
  (merged to 'next' on 2018-04-30 at 50c507b7d8)
 + gpg-interface: find the last gpg signature line
 + gpg-interface: extract gpg line matching helper
 + gpg-interface: fix const-correctness of "eol" pointer
 + gpg-interface: use size_t for signature buffer size
 + gpg-interface: modernize function declarations
 + gpg-interface: handle bool user.signingkey
 + t7004: fix mistaken tag name

 What is queued here is only the obviously correct and
 uncontroversial code clean-up part, which is an earlier 7 patches,
 of a larger series.

 The remainder that is not queued introduces a few configuration
 variables to deal with e-signature backends with different
 signature format.

 Will merge to 'master'.


* ds/generation-numbers (2018-04-26) 10 commits
 - commit-graph.txt: update design document
 - merge: check config before loading commits
 - commit: add short-circuit to paint_down_to_common()
 - commit: use generation numbers for in_merge_bases()
 - ref-filter: use generation number for --contains
 - commit-graph: always load commit-graph information
 - commit: use generations in paint_down_to_common()
 - commit-graph: compute generation numbers
 - commit: add generation number to struct commmit
 - ref-filter: fix outdated comment on in_commit_list
 (this branch uses ds/commit-graph and ds/lazy-load-trees.)

 A recently added "commit-graph" datafile has learned to store
 pre-computed generation numbers to speed up the decisions to stop
 history traversal.


* en/rename-directory-detection-reboot (2018-04-25) 36 commits
 - merge-recursive: fix check for skipability of working tree updates
 - merge-recursive: make "Auto-merging" comment show for other merges
 - merge-recursive: fix remainder of was_dirty() to use original index
 - merge-recursive: fix was_tracked() to quit lying with some renamed paths
 - t6046: testcases checking whether updates can be skipped in a merge
 - merge-recursive: avoid triggering add_cacheinfo error with dirty mod
 - merge-recursive: move more is_dirty handling to merge_content
 - merge-recursive: improve add_cacheinfo error handling
 - merge-recursive: avoid spurious rename/rename conflict from dir renames
 - directory rename detection: new testcases showcasing a pair of bugs
 - merge-recursive: fix remaining directory rename + dirty overwrite cases
 - merge-recursive: fix overwriting dirty files involved in renames
 - merge-recursive: avoid clobbering untracked files with directory renames
 - merge-recursive: apply necessary modifications for directory renames
 - merge-recursive: when comparing files, don't include trees
 - merge-recursive: check for file level conflicts then get new name
 - merge-recursive: add computation of collisions due to dir rename & merging
 - merge-recursive: check for directory level conflicts
 - merge-recursive: add get_directory_renames()
 - merge-recursive: make a helper function for cleanup for handle_renames
 - merge-recursive: split out code for determining diff_filepairs
 - merge-recursive: make !o->detect_rename codepath more obvious
 - merge-recursive: fix leaks of allocated renames and diff_filepairs
 - merge-recursive: introduce new functions to handle rename logic
 - merge-recursive: move the get_renames() function
 - directory rename detection: tests for handling overwriting dirty files
 - directory rename detection: tests for handling overwriting untracked files
 - directory rename detection: miscellaneous testcases to complete coverage
 - directory rename detection: testcases exploring possibly suboptimal merges
 - directory rename detection: more involved edge/corner testcases
 - directory rename detection: testcases checking which side did the rename
 - directory rename detection: files/directories in the way of some renames
 - directory rename detection: partially renamed directory testcase/discussion
 - directory rename detection: testcases to avoid taking detection too far
 - directory rename detection: directory splitting testcases
 - directory rename detection: basic testcases

 Reboot of an attempt to detect wholesale directory renames and use
 it while merging.

 Will merge to 'next'.


* nd/command-list (2018-04-30) 10 commits
 - completion: let git provide the completable command list
 - help: use command-list.txt for the source of guides
 - help: add "-a --verbose" to list all commands with synopsis
 - git: support --list-cmds=list-<category>
 - completion: implement and use --list-cmds=main,others
 - git.c: convert --list-*builtins to --list-cmds=*
 - Remove common-cmds.h
 - help: use command-list.h for common command list
 - generate-cmds.sh: export all commands to command-list.h
 - generate-cmds.sh: factor out synopsis extract code

 The list of commands with their various attributes were spread
 across a few places in the build procedure, but it now is getting a
 bit more consolidated to allow more automation.


* sb/object-store-replace (2018-04-12) 15 commits
  (merged to 'next' on 2018-04-25 at 9a213fb505)
 + replace-object: allow lookup_replace_object to handle arbitrary repositories
 + replace-object: allow do_lookup_replace_object to handle arbitrary repositories
 + replace-object: allow prepare_replace_object to handle arbitrary repositories
 + refs: allow for_each_replace_ref to handle arbitrary repositories
 + refs: store the main ref store inside the repository struct
 + replace-object: add repository argument to lookup_replace_object
 + replace-object: add repository argument to do_lookup_replace_object
 + replace-object: add repository argument to prepare_replace_object
 + refs: add repository argument to for_each_replace_ref
 + refs: add repository argument to get_main_ref_store
 + replace-object: check_replace_refs is safe in multi repo environment
 + replace-object: eliminate replace objects prepared flag
 + object-store: move lookup_replace_object to replace-object.h
 + replace-object: move replace_map to object store
 + replace_object: use oidmap
 (this branch is used by sb/oid-object-info.)

 The effort to pass the repository in-core structure throughout the
 API continues.  This round deals with the code that implements the
 refs/replace/ mechanism.

 Will merge to 'master'.


* hn/bisect-first-parent (2018-04-21) 1 commit
 - bisect: create 'bisect_flags' parameter in find_bisection()

 Preliminary code update to allow passing more flags down the
 bisection codepath in the future.

 We do not add random code that does not have real users to our
 codebase, so let's have it wait until such a real code materializes
 before too long.


* sg/complete-paths (2018-04-17) 11 commits
 - completion: fill COMPREPLY directly when completing paths
 - completion: improve handling quoted paths in 'git ls-files's output
 - completion: remove repeated dirnames with 'awk' during path completion
 - t9902-completion: ignore COMPREPLY element order in some tests
 - completion: use 'awk' to strip trailing path components
 - completion: let 'ls-files' and 'diff-index' filter matching paths
 - completion: improve handling quoted paths on the command line
 - completion: support completing non-ASCII pathnames
 - completion: simplify prefix path component handling during path completion
 - completion: move __git_complete_index_file() next to its helpers
 - t9902-completion: add tests demonstrating issues with quoted pathnames

 Command line completion (in contrib/) learned to complete pathnames
 for various commands better.

 Will merge to 'next'.


* tq/t1510 (2018-04-17) 1 commit
  (merged to 'next' on 2018-04-25 at 5710c81979)
 + t1510-repo-setup.sh: remove useless mkdir

 Test cleanup.

 Will merge to 'master'.


* sb/blame-color (2018-04-24) 3 commits
 - builtin/blame: add new coloring scheme config
 - builtin/blame: highlight recently changed lines
 - builtin/blame: dim uninteresting metadata lines

 "git blame" learns to unhighlight uninteresting metadata from the
 originating commit on lines that are the same as the previous one,
 and also paint lines in different colors depending on the age of
 the commit.


* ab/simplify-perl-makefile (2018-04-19) 2 commits
  (merged to 'next' on 2018-04-25 at 906cf21682)
 + Makefile: mark perllibdir as a .PHONY target
  (merged to 'next' on 2018-04-17 at 4448756934)
 + perl: fix installing modules from contrib

 Recent simplification of build procedure forgot a bit of tweak to
 the build procedure of contrib/mw-to-git/

 Will merge to 'master'.


* ds/lazy-load-trees (2018-04-11) 5 commits
  (merged to 'next' on 2018-04-25 at b90813f421)
 + commit-graph: lazy-load trees for commits
 + treewide: replace maybe_tree with accessor methods
 + commit: create get_commit_tree() method
 + treewide: rename tree to maybe_tree
 + Merge branch 'bw/c-plus-plus' into ds/lazy-load-trees
 (this branch is used by ds/generation-numbers; uses ds/commit-graph.)

 The code has been taught to use the duplicated information stored
 in the commit-graph file to learn the tree object name for a commit
 to avoid opening and parsing the commit object when it makes sense
 to do so.

 Will merge to 'master'.


* ab/git-svn-get-record-typofix (2018-04-09) 1 commit
  (merged to 'next' on 2018-04-30 at 23f875f6b9)
 + git-svn: avoid warning on undef readline()

 "git svn" had a minor thinko/typo which has been fixed.

 Will merge to 'master'.


* hn/sort-ls-remote (2018-04-09) 1 commit
  (merged to 'next' on 2018-04-30 at 244ca5d30a)
 + ls-remote: create '--sort' option

 "git ls-remote" learned an option to allow sorting its output based
 on the refnames being shown.

 Will merge to 'master'.


* js/empty-config-section-fix (2018-04-09) 15 commits
  (merged to 'next' on 2018-04-25 at 1690df3e5f)
 + git_config_set: reuse empty sections
 + git config --unset: remove empty sections (in the common case)
 + git_config_set: make use of the config parser's event stream
 + git_config_set: do not use a state machine
 + config_set_store: rename some fields for consistency
 + config: avoid using the global variable `store`
 + config: introduce an optional event stream while parsing
 + t1300: `--unset-all` can leave an empty section behind (bug)
 + t1300: add a few more hairy examples of sections becoming empty
 + t1300: remove unreasonable expectation from TODO
 + t1300: avoid relying on a bug
 + config --replace-all: avoid extra line breaks
 + t1300: demonstrate that --replace-all can "invent" newlines
 + t1300: rename it to reflect that `repo-config` was deprecated
 + git_config_set: fix off-by-two

 "git config --unset a.b", when "a.b" is the last variable in an
 otherwise empty section "a", left an empty section "a" behind, and
 worse yet, a subsequent "git config a.c value" did not reuse that
 empty shell and instead created a new one.  These have been
 (partially) corrected.

 Will merge to 'master'.


* nd/warn-more-for-devs (2018-04-16) 4 commits
  (merged to 'next' on 2018-04-25 at 2978e61414)
 + Makefile: add a DEVOPTS to get all of -Wextra
 + Makefile: add a DEVOPTS to suppress -Werror under DEVELOPER
 + Makefile: detect compiler and enable more warnings in DEVELOPER=1
 + connect.c: mark die_initial_contact() NORETURN

 The build procedure "make DEVELOPER=YesPlease" learned to enable a
 bit more warning options depending on the compiler used to help
 developers more.  There also is "make DEVOPTS=tokens" knob
 available now, for those who want to help fixing warnings we
 usually ignore, for example.

 Will merge to 'master'.


* sb/submodule-move-nested (2018-03-29) 6 commits
  (merged to 'next' on 2018-04-25 at 86b177433a)
 + submodule: fixup nested submodules after moving the submodule
 + submodule-config: remove submodule_from_cache
 + submodule-config: add repository argument to submodule_from_{name, path}
 + submodule-config: allow submodule_free to handle arbitrary repositories
 + grep: remove "repo" arg from non-supporting funcs
 + submodule.h: drop declaration of connect_work_tree_and_git_dir

 Moving a submodule that itself has submodule in it with "git mv"
 forgot to make necessary adjustment to the nested sub-submodules;
 now the codepath learned to recurse into the submodules.

 Will merge to 'master'.


* tb/config-type (2018-04-19) 2 commits
  (merged to 'next' on 2018-04-25 at fe69e93c82)
 + builtin/config.c: support `--type=<type>` as preferred alias for `--<type>`
 + builtin/config.c: treat type specifiers singularly
 (this branch is used by tb/config-default.)

 The "git config" command uses separate options e.g. "--int",
 "--bool", etc. to specify what type the caller wants the value to
 be interpreted as.  A new "--type=<typename>" option has been
 introduced, which would make it cleaner to define new types.

 Will merge to 'master'.


* tb/config-default (2018-04-23) 3 commits
  (merged to 'next' on 2018-04-25 at 59bb6beb2a)
 + builtin/config: introduce `color` type specifier
 + config.c: introduce 'git_config_color' to parse ANSI colors
 + builtin/config: introduce `--default`
 (this branch uses tb/config-type.)

 "git config --get" learned the "--default" option, to help the
 calling script.  Building on top of the tb/config-type topic, the
 "git config" learns "--type=color" type.  Taken together, you can
 do things like "git config --get foo.color --default blue" and get
 the ANSI color sequence for the color given to foo.color variable,
 or "blue" if the variable does not exist.

 Will merge to 'master'.


* jh/json-writer (2018-03-28) 1 commit
 - json_writer: new routines to create data in JSON format

 Preparatory code to later add json output for unspecified telemetry
 data.

 We do not add random code that does not have real users to our
 codebase, so let's have it wait until such a real code materializes
 before too long.


* ot/libify-get-ref-atom-value (2018-03-29) 6 commits
  (merged to 'next' on 2018-04-25 at 056bcaa69c)
 + ref-filter: libify get_ref_atom_value()
 + ref-filter: add return value to parsers
 + ref-filter: change parsing function error handling
 + ref-filter: add return value && strbuf to handlers
 + ref-filter: start adding strbufs with errors
 + ref-filter: add shortcut to work with strbufs

 Code restructuring, in preparation for further work.

 Will merge to 'master'.


* jk/branch-l-0-deprecation (2018-03-26) 3 commits
  (merged to 'next' on 2018-04-11 at 9b2b0305dd)
 + branch: deprecate "-l" option
 + t: switch "branch -l" to "branch --create-reflog"
 + t3200: unset core.logallrefupdates when testing reflog creation
 (this branch is used by jk/branch-l-1-removal and jk/branch-l-2-reincarnation.)

 The "-l" option in "git branch -l" is an unfortunate short-hand for
 "--create-reflog", but many users, both old and new, somehow expect
 it to be something else, perhaps "--list".  This step deprecates
 the short-hand and warns about the future removal of the it when it
 is used.

 Will cook in 'next'.


* jk/branch-l-1-removal (2018-03-26) 1 commit
 - branch: drop deprecated "-l" option
 (this branch is used by jk/branch-l-2-reincarnation; uses jk/branch-l-0-deprecation.)

 Following the "git branch -l" deprecation, the short-hand is removed.

 Will keep in 'pu'.


* jk/branch-l-2-reincarnation (2018-03-26) 1 commit
 - branch: make "-l" a synonym for "--list"
 (this branch uses jk/branch-l-0-deprecation and jk/branch-l-1-removal.)

 Following the "git branch -l" removal, "-l" is resurrected as a
 short-hand for "--list".

 Will keep in 'pu'.


* dj/runtime-prefix (2018-04-24) 7 commits
  (merged to 'next' on 2018-04-25 at e7e635a70e)
 + Makefile: quote $INSTLIBDIR when passing it to sed
 + Makefile: remove unused @@PERLLIBDIR@@ substitution variable
  (merged to 'next' on 2018-04-17 at a69aaa7a22)
 + mingw/msvc: use the new-style RUNTIME_PREFIX helper
 + exec_cmd: provide a new-style RUNTIME_PREFIX helper for Windows
 + exec_cmd: RUNTIME_PREFIX on some POSIX systems
 + Makefile: add Perl runtime prefix support
 + Makefile: generate Perl header from template file
 (this branch is tangled with js/runtime-prefix.)

 A build-time option has been added to allow Git to be told to refer
 to its associated files relative to the main binary, in the same
 way that has been possible on Windows for quite some time, for
 Linux, BSDs and Darwin.

 Will merge to 'master'.


* ab/nuke-emacs-contrib (2018-04-16) 1 commit
  (merged to 'next' on 2018-04-25 at 9b133d8a65)
 + git{,-blame}.el: remove old bitrotting Emacs code

 The scripts in contrib/emacs/ have outlived their usefulness and
 have been replaced with a stub that errors out and tells the user
 there are replacements.

 Will merge to 'master'.


* nd/pack-objects-pack-struct (2018-04-16) 15 commits
 - ci: exercise the whole test suite with uncommon code in pack-objects
 - pack-objects: reorder members to shrink struct object_entry
 - pack-objects: shrink delta_size field in struct object_entry
 - pack-objects: shrink size field in struct object_entry
 - pack-objects: clarify the use of object_entry::size
 - pack-objects: don't check size when the object is bad
 - pack-objects: shrink z_delta_size field in struct object_entry
 - pack-objects: refer to delta objects by index instead of pointer
 - pack-objects: move in_pack out of struct object_entry
 - pack-objects: move in_pack_pos out of struct object_entry
 - pack-objects: use bitfield for object_entry::depth
 - pack-objects: use bitfield for object_entry::dfs_state
 - pack-objects: turn type and in_pack_type to bitfields
 - pack-objects: a bit of document about struct object_entry
 - read-cache.c: make $GIT_TEST_SPLIT_INDEX boolean

 "git pack-objects" needs to allocate tons of "struct object_entry"
 while doing its work, and shrinking its size helps the performance
 quite a bit.

 What's the doneness of this thing?  The interdiff since previous
 rounds looked reasonable, but I didn't see this round otherwise
 scrutinized by reviewers.  The numbers given in the commit near the
 tip do look impressive, though ;-)


* nd/repack-keep-pack (2018-04-16) 7 commits
 - pack-objects: show some progress when counting kept objects
 - gc --auto: exclude base pack if not enough mem to "repack -ad"
 - gc: handle a corner case in gc.bigPackThreshold
 - gc: add gc.bigPackThreshold config
 - gc: add --keep-largest-pack option
 - repack: add --keep-pack option
 - t7700: have closing quote of a test at the beginning of line

 "git gc" in a large repository takes a lot of time as it considers
 to repack all objects into one pack by default.  The command has
 been taught to pretend as if the largest existing packfile is
 marked with ".keep" so that it is left untouched while objects in
 other packs and loose ones are repacked.

 What's the doneness of this thing?  The interdiff since the earlier
 one looked reasonable, but I didn't see this round otherwise
 scrutinized by reviewers.


* pw/add-p-select (2018-03-16) 3 commits
 - add -p: optimize line selection for short hunks
 - add -p: allow line selection to be inverted
 - add -p: select individual hunk lines

 "git add -p" interactive interface learned to let users choose
 individual added/removed lines to be used in the operation, instead
 of accepting or rejecting a whole hunk.

 Expecting a reroll to reignite the discussion.
 cf. <9895c7b7-eac4-28c1-90c6-443acd1131b7@talktalk.net>


* ds/commit-graph (2018-04-11) 16 commits
  (merged to 'next' on 2018-04-25 at 18af3d28d9)
 + commit-graph: implement "--append" option
 + commit-graph: build graph from starting commits
 + commit-graph: read only from specific pack-indexes
 + commit: integrate commit graph with commit parsing
 + commit-graph: close under reachability
 + commit-graph: add core.commitGraph setting
 + commit-graph: implement git commit-graph read
 + commit-graph: implement git-commit-graph write
 + commit-graph: implement write_commit_graph()
 + commit-graph: create git-commit-graph builtin
 + graph: add commit graph design document
 + commit-graph: add format document
 + csum-file: refactor finalize_hashfile() method
 + csum-file: rename hashclose() to finalize_hashfile()
 + Merge branch 'jk/cached-commit-buffer' into HEAD
 + Merge branch 'jt/binsearch-with-fanout' into HEAD
 (this branch is used by ds/generation-numbers and ds/lazy-load-trees.)

 Precompute and store information necessary for ancestry traversal
 in a separate file to optimize graph walking.

 Will merge to 'master'.


* pc/submodule-helper-foreach (2018-02-02) 5 commits
 - submodule: port submodule subcommand 'foreach' from shell to C
 - submodule foreach: document variable '$displaypath'
 - submodule foreach: clarify the '$toplevel' variable documentation
 - submodule foreach: document '$sm_path' instead of '$path'
 - submodule foreach: correct '$path' in nested submodules from a subdirectory

 Expecting a response to review comments
 e.g. cf. <20180206150044.1bffbb573c088d38c8e44bf5@google.com>


* tg/worktree-add-existing-branch (2018-04-30) 4 commits
 - worktree: teach "add" to check out existing branches
 - worktree: factor out dwim_branch function
 - worktree: improve message when creating a new worktree
 - worktree: remove extra members from struct add_opts

 "git worktree add" learned to check out an existing branch.

 Will merge to 'next'.


* js/rebase-recreate-merge (2018-04-26) 17 commits
 - rebase -i --rebase-merges: add a section to the man page
 - rebase -i: introduce --rebase-merges=[no-]rebase-cousins
 - pull: accept --rebase=merges to recreate the branch topology
 - rebase --rebase-merges: avoid "empty merges"
 - sequencer: handle post-rewrite for merge commands
 - sequencer: make refs generated by the `label` command worktree-local
 - rebase --rebase-merges: add test for --keep-empty
 - rebase: introduce the --rebase-merges option
 - rebase-helper --make-script: introduce a flag to rebase merges
 - sequencer: fast-forward `merge` commands, if possible
 - sequencer: introduce the `merge` command
 - sequencer: introduce new commands to reset the revision
 - git-rebase--interactive: clarify arguments
 - sequencer: offer helpful advice when a command was rescheduled
 - sequencer: refactor how original todo list lines are accessed
 - sequencer: make rearrange_squash() a bit more obvious
 - sequencer: avoid using errno clobbered by rollback_lock_file()

 "git rebase" learned "--rebase-merges" to transplant the whole
 topology of commit graph elsewhere.


* bw/protocol-v2 (2018-03-15) 35 commits
  (merged to 'next' on 2018-04-11 at 23ee234a2c)
 + remote-curl: don't request v2 when pushing
 + remote-curl: implement stateless-connect command
 + http: eliminate "# service" line when using protocol v2
 + http: don't always add Git-Protocol header
 + http: allow providing extra headers for http requests
 + remote-curl: store the protocol version the server responded with
 + remote-curl: create copy of the service name
 + pkt-line: add packet_buf_write_len function
 + transport-helper: introduce stateless-connect
 + transport-helper: refactor process_connect_service
 + transport-helper: remove name parameter
 + connect: don't request v2 when pushing
 + connect: refactor git_connect to only get the protocol version once
 + fetch-pack: support shallow requests
 + fetch-pack: perform a fetch using v2
 + upload-pack: introduce fetch server command
 + push: pass ref prefixes when pushing
 + fetch: pass ref prefixes when fetching
 + ls-remote: pass ref prefixes when requesting a remote's refs
 + transport: convert transport_get_remote_refs to take a list of ref prefixes
 + transport: convert get_refs_list to take a list of ref prefixes
 + connect: request remote refs using v2
 + ls-refs: introduce ls-refs server command
 + serve: introduce git-serve
 + test-pkt-line: introduce a packet-line test helper
 + protocol: introduce enum protocol_version value protocol_v2
 + transport: store protocol version
 + connect: discover protocol version outside of get_remote_heads
 + connect: convert get_remote_heads to use struct packet_reader
 + transport: use get_refs_via_connect to get refs
 + upload-pack: factor out processing lines
 + upload-pack: convert to a builtin
 + pkt-line: add delim packet support
 + pkt-line: allow peeking a packet line without consuming it
 + pkt-line: introduce packet_read_with_status
 (this branch is used by bw/server-options.)

 The beginning of the next-gen transfer protocol.

 Will merge to 'master'.


* ls/checkout-encoding (2018-04-16) 10 commits
  (merged to 'next' on 2018-04-25 at e0f8554b2a)
 + convert: add round trip check based on 'core.checkRoundtripEncoding'
 + convert: add tracing for 'working-tree-encoding' attribute
 + convert: check for detectable errors in UTF encodings
 + convert: add 'working-tree-encoding' attribute
 + utf8: add function to detect a missing UTF-16/32 BOM
 + utf8: add function to detect prohibited UTF-16/32 BOM
 + utf8: teach same_encoding() alternative UTF encoding names
 + strbuf: add a case insensitive starts_with()
 + strbuf: add xstrdup_toupper()
 + strbuf: remove unnecessary NUL assignment in xstrdup_tolower()

 The new "checkout-encoding" attribute can ask Git to convert the
 contents to the specified encoding when checking out to the working
 tree (and the other way around when checking in).

 Will merge to 'master'.

--------------------------------------------------
[Discarded]

* js/runtime-prefix-windows (2018-03-27) 5 commits
 . mingw/msvc: use the new-style RUNTIME_PREFIX helper
 . exec_cmd: provide a new-style RUNTIME_PREFIX helper for Windows
 . exec_cmd: RUNTIME_PREFIX on some POSIX systems
 . Makefile: add Perl runtime prefix support
 . Makefile: generate Perl header from template file

 The Windows port was the first that allowed Git to be installed
 anywhere by having its components refer to each other with relative
 pathnames.  The recent dj/runtime-prefix topic extends the idea to
 other platforms, and its approach has been adopted back in the
 Windows port.

 Ejected, as the parent topic dj/runtime-prefix covers Windows now.


* bp/fsexcludes (2018-04-16) 2 commits
 . fsmonitor: switch to use new fsexcludes logic and remove unused untracked cache based logic
 . fsexcludes: add a programmatic way to exclude files from git's working directory traversal logic

 Can we have a few lines summary here, just like we have for other
 topic ;-) I personally take the overlong title of these commits as
 a sign that they can further be simplified and cleaned up by
 splitting, focusing the scope, etc.

 Retracted.
 cf. <0de30972-b0a2-67e8-7cff-c19daf9ece8b@gmail.com>

^ permalink raw reply	[relevance 3%]

* What's cooking in git.git (May 2018, #01; Mon, 7)
@ 2018-05-07 14:58  3% Junio C Hamano
  0 siblings, 0 replies; 200+ results
From: Junio C Hamano @ 2018-05-07 14:58 UTC (permalink / raw)
  To: git

Here are the topics that have been cooking.  Commits prefixed with
'-' are only in 'pu' (proposed updates) while commits prefixed with
'+' are in 'next'.  The ones marked with '.' do not appear in any of
the integration branches, but I am still holding onto them.

You can find the changes described here in the integration branches
of the repositories listed at

    http://git-blame.blogspot.com/p/git-public-repositories.html

--------------------------------------------------
[New Topics]

* tb/test-apfs-utf8-normalization (2018-05-02) 1 commit
 - test: correct detection of UTF8_NFD_TO_NFC for APFS

 A test to see if the filesystem normalizes UTF-8 filename has been
 updated to check what we need to know in a more direct way, i.e. a
 path created in NFC form can be accessed with NFD form (or vice
 versa) to cope with APFS as well as HFS.

 Will merge to 'next'.


* ab/get-short-oid (2018-05-02) 12 commits
 - get_short_oid: document & warn if we ignore the type selector
 - config doc: document core.disambiguate
 - get_short_oid / peel_onion: ^{commit} should be commit, not committish
 - get_short_oid / peel_onion: ^{tree} should be tree, not treeish
 - get_short_oid: learn to disambiguate by ^{blob}
 - get_short_oid: learn to disambiguate by ^{tag}
 - get_short_oid: sort ambiguous objects by type, then SHA-1
 - sha1-name.c: move around the collect_ambiguous() function
 - cache.h: add comment explaining the order in object_type
 - git-p4: change "commitish" typo to "committish"
 - sha1-array.h: align function arguments
 - sha1-name.c: remove stray newline


* ah/misc-doc-updates (2018-05-06) 7 commits
 - doc: normalize [--options] to [options] in git-diff
 - doc: add note about shell quoting to revision.txt
 - git-svn: remove ''--add-author-from' for 'commit-diff'
 - doc: add '-d' and '-o' for 'git push'
 - doc: clarify ignore rules for git ls-files
 - doc: align 'diff --no-index' in text and synopsis
 - doc: improve formatting in githooks.txt

 Misc doc fixes.

 Will merge to 'next'.


* bc/format-patch-cover-no-attach (2018-05-02) 1 commit
 - format-patch: make cover letters always text/plain

 "git format-patch --cover --attach" created a broken MIME multipart
 message for the cover letter, which has been fixed by keeping the
 cover letter as plain text file.

 Will merge to 'next'.


* bp/test-drop-caches (2018-05-04) 1 commit
 - test-drop-caches: simplify delay loading of NtSetSystemInformation

 Code simplification.

 Will merge to 'next'.


* cc/perf-bisect (2018-05-06) 1 commit
 - perf/bisect_run_script: disable codespeed

 Performance test updates.

 Will merge to 'next'.


* cf/submodule-progress-dissociate (2018-05-04) 3 commits
 - submodule: add --dissociate option to add/update commands
 - submodule: add --progress option to add command
 - submodule: clean up subsititions in script

 "git submodule update" and "git submodule add" supported the
 "--reference" option to borrow objects from a neighbouring local
 repository like "git clone" does, but lacked the more recent
 invention "--dissociate".  Also "git submodule add" has been taught
 to take the "--progress" option.

 Is this ready for 'next'?  Should "git submodule -h" list the new
 options in its short help?


* dd/send-email-reedit (2018-05-06) 1 commit
 - git-send-email: allow re-editing of message

 "git send-email" can sometimes offer confirmation dialog "Send this
 email?" with choices 'Yes', 'No', 'Quit', and 'All'.  A new action
 'Edit' has been added to this dialog's choice.
 
 Waiting briefly for an ack or two.
 cf. <xmqq4ljlsahj.fsf@gitster-ct.c.googlers.com>


* em/status-rename-config (2018-05-06) 1 commit
 - wt-status: use settings from git_diff_ui_config

 "git status" learned to pay attention to UI related diff
 configuration variables such as diff.renames.

 Will merge to 'next'.


* jm/cache-entry-from-mem-pool (2018-05-02) 5 commits
 - block alloc: add validations around cache_entry lifecyle
 - block alloc: allocate cache entries from mem_pool
 - mem-pool: fill out functionality
 - block alloc: add lifecycle APIs for cache_entry structs
 - read-cache: teach refresh_cache_entry() to take istate

 For a large tree, the index needs to hold many cache entries
 allocated on heap.  These cache entries are now allocated out of a
 dedicated memory pool to amortize malloc(3) overhead.

 Needs review.  
 Is the "caller always knows which pool an entry came from and calls
 the right kind of free" a feasible approach?


* js/branch-diff (2018-05-06) 18 commits
 - completion: support branch-diff
 - branch-diff: add a man page
 - branch-diff --dual-color: work around bogus white-space warning
 - branch-diff: offer to dual-color the diffs
 - diff: add an internal option to dual-color diffs of diffs
 - color: provide inverted colors, too
 - branch-diff: use color for the commit pairs
 - branch-diff: add tests
 - branch-diff: do not show "function names" in hunk headers
 - branch-diff: adjust the output of the commit pairs
 - branch-diff: suppress the diff headers
 - branch-diff: indent the diffs just like tbdiff
 - branch-diff: right-trim commit messages
 - branch-diff: also show the diff between patches
 - branch-diff: improve the order of the shown commits
 - branch-diff: first rudimentary implementation
 - Add a new builtin: branch-diff
 - Add a function to solve least-cost assignment problems

 "git tbdiff" that lets us compare individual patches in two
 iterations of a topic has been rewritten and made into a built-in
 command.

 Expecting a reroll.
 cf. <nycvar.QRO.7.76.6.1805052351560.77@tvgsbejvaqbjf.bet>


* js/sequencer-and-root-commits (2018-05-06) 6 commits
 - rebase --rebase-merges: root commits can be cousins, too
 - rebase --rebase-merges: a "merge" into a new root is a fast-forward
 - sequencer: allow introducing new root commits
 - rebase -i --root: let the sequencer handle even the initial part
 - sequencer: learn about the special "fake root commit" handling
 - sequencer: extract helper to update active_cache_tree
 (this branch uses js/rebase-recreate-merge.)

 The implementation of "git rebase -i --root" has been updaed to use
 the sequencer machinery more.

 Will merge to 'next'.


* js/use-bug-macro (2018-05-06) 4 commits
 - Convert remaining die*(BUG) messages
 - Replace all die("BUG: ...") calls by BUG() ones
 - run-command: use BUG() to report bugs, not die()
 - test-tool: help verifying BUG() code paths


* jt/partial-clone-proto-v2 (2018-05-06) 4 commits
 - {fetch,upload}-pack: support filter in protocol v2
 - upload-pack: read config when serving protocol v2
 - upload-pack: fix error message typo
 - Merge branch 'bw/protocol-v2' into jt/partial-clone-proto-v2
 (this branch uses bw/protocol-v2; is tangled with bw/server-options.)

 Transfer protocol v2 learned to support the partial clone.

 Will merge to 'next'.


* ma/doc-expand-tabs (2018-05-02) 1 commit
 - revisions.txt: expand tabs to spaces in diagram

 Fix one instance of asciidoctor's misformatting by expanding a tab
 into spaces in a literal block.

 Will discard.  This approach is less maintainable than the approach
 taken by bc/asciidoctor-tab-width topic.


* nd/completion-aliasfiletype-typofix (2018-05-06) 1 commit
 - completion: fix misspelled config key aliasesfiletype

 Typofix.

 Will merge to 'next'.


* nd/doc-header (2018-05-02) 1 commit
 - doc: keep first level section header in upper case

 Doc formatting fix.

 Will merge to 'next'.


* nd/pack-unreachable-objects-doc (2018-05-06) 1 commit
 - pack-objects: validation and documentation about unreachable options

 Doc update.

 Will merge to 'next'.


* sb/object-store-alloc (2018-05-02) 14 commits
 - alloc.c: include alloc.h
 - alloc: allow arbitrary repositories for alloc functions
 - object: allow create_object to handle arbitrary repositories
 - object: allow grow_object_hash to handle arbitrary repositories
 - alloc: add repository argument to alloc_commit_index
 - alloc: add repository argument to alloc_report
 - alloc: add repository argument to alloc_object_node
 - alloc: add repository argument to alloc_tag_node
 - alloc: add repository argument to alloc_commit_node
 - alloc: add repository argument to alloc_tree_node
 - alloc: add repository argument to alloc_blob_node
 - object: add repository argument to grow_object_hash
 - object: add repository argument to create_object
 - repository: introduce object parser field
 (this branch uses sb/object-store-replace and sb/oid-object-info.)

 The conversion to pass "the_repository" and then "a_repository"
 throughout the object access API continues.


* tb/grep-column (2018-05-06) 7 commits
 - contrib/git-jump/git-jump: jump to match column in addition to line
 - grep.c: add configuration variables to show matched option
 - builtin/grep.c: add '--column' option to 'git-grep(1)'
 - grep.c: display column number of first match
 - grep.[ch]: extend grep_opt to allow showing matched column
 - grep.c: expose matched column in match_line()
 - Documentation/config.txt: camel-case lineNumber for consistency

 "git grep" learned the "--column" option that gives not just the
 line number but the column number of the hit.


* bc/asciidoctor-tab-width (2018-05-07) 2 commits
 - Documentation: render revisions correctly under Asciidoctor
 - Documentation: use 8-space tabs with Asciidoctor

 Asciidoctor gives a reasonable imitation for AsciiDoc, but does not
 render illustration in a literal block correctly when indented with
 HT by default. The problem is fixed by forcing 8-space tabs.

 Will merge to 'next'.


* bc/mailmap-self (2018-05-07) 1 commit
 - mailmap: update brian m. carlson's email address

 Will merge to 'next'.

--------------------------------------------------
[Stalled]

* pc/submodule-helper-foreach (2018-02-02) 5 commits
 - submodule: port submodule subcommand 'foreach' from shell to C
 - submodule foreach: document variable '$displaypath'
 - submodule foreach: clarify the '$toplevel' variable documentation
 - submodule foreach: document '$sm_path' instead of '$path'
 - submodule foreach: correct '$path' in nested submodules from a subdirectory

 Expecting a response to review comments
 e.g. cf. <20180206150044.1bffbb573c088d38c8e44bf5@google.com>


* pw/add-p-select (2018-03-16) 3 commits
 - add -p: optimize line selection for short hunks
 - add -p: allow line selection to be inverted
 - add -p: select individual hunk lines

 "git add -p" interactive interface learned to let users choose
 individual added/removed lines to be used in the operation, instead
 of accepting or rejecting a whole hunk.

 Expecting a reroll to reignite the discussion.
 cf. <9895c7b7-eac4-28c1-90c6-443acd1131b7@talktalk.net>


* jh/json-writer (2018-03-28) 1 commit
 - json_writer: new routines to create data in JSON format

 Preparatory code to later add json output for unspecified telemetry
 data.

 We do not add random code that does not have real users to our
 codebase, so let's have it wait until such a real code materializes
 before too long.


* hn/bisect-first-parent (2018-04-21) 1 commit
 - bisect: create 'bisect_flags' parameter in find_bisection()

 Preliminary code update to allow passing more flags down the
 bisection codepath in the future.

 We do not add random code that does not have real users to our
 codebase, so let's have it wait until such a real code materializes
 before too long.


* is/parsing-line-range (2018-04-27) 2 commits
 . log: prevent error if line range ends past end of file
 . blame: prevent error if range ends past end of file

 Parsing of -L[<N>][,[<M>]] parameters "git blame" and "git log"
 take has been tweaked.

 Seems to break a few tests.


* ld/p4-unshelve (2018-02-22) 1 commit
 - git-p4: add unshelve command

 "git p4" learned to "unshelve" shelved commit from P4.

 Will hold, perhaps drop and use format-change that uses a proper "diff".
 cf. <CAE5ih7_ooDMqVtTMoQ70s5XCkncr04HY0JkqSp1UmKQeG81oaA@mail.gmail.com>


* av/fsmonitor-updates (2018-01-04) 6 commits
 - fsmonitor: use fsmonitor data in `git diff`
 - fsmonitor: remove debugging lines from t/t7519-status-fsmonitor.sh
 - fsmonitor: make output of test-dump-fsmonitor more concise
 - fsmonitor: update helper tool, now that flags are filled later
 - fsmonitor: stop inline'ing mark_fsmonitor_valid / _invalid
 - dir.c: update comments to match argument name

 Code clean-up on fsmonitor integration, plus optional utilization
 of the fsmonitor data in diff-files.

 Waiting for an update.
 cf. <alpine.DEB.2.21.1.1801042335130.32@MININT-6BKU6QN.europe.corp.microsoft.com>


* pb/bisect-helper-2 (2017-10-28) 8 commits
 - t6030: make various test to pass GETTEXT_POISON tests
 - bisect--helper: `bisect_start` shell function partially in C
 - bisect--helper: `get_terms` & `bisect_terms` shell function in C
 - bisect--helper: `bisect_next_check` shell function in C
 - bisect--helper: `check_and_set_terms` shell function in C
 - wrapper: move is_empty_file() and rename it as is_empty_or_missing_file()
 - bisect--helper: `bisect_write` shell function in C
 - bisect--helper: `bisect_reset` shell function in C

 Expecting a reroll.
 cf. <0102015f5e5ee171-f30f4868-886f-47a1-a4e4-b4936afc545d-000000@eu-west-1.amazonses.com>


* mk/http-backend-content-length (2017-11-27) 4 commits
 - SQUASH???
 - t5560-http-backend-noserver.sh: add CONTENT_LENGTH cases
 - SQUASH???
 - http-backend: respect CONTENT_LENGTH as specified by rfc3875

 The http-backend (used for smart-http transport) used to slurp the
 whole input until EOF, without paying attention to CONTENT_LENGTH
 that is supplied in the environment and instead expecting the Web
 server to close the input stream.  This has been fixed.

 Expecting a reroll.
 Suggested fixes to be used when rerolling is queued, but I'd
 prefer _not_ squashing them myself.

 Also, it may be too complex solution for the problem.
 cf. <20171204171308.GA13332@sigill.intra.peff.net>


* jk/drop-ancient-curl (2017-08-09) 5 commits
 - http: #error on too-old curl
 - curl: remove ifdef'd code never used with curl >=7.19.4
 - http: drop support for curl < 7.19.4
 - http: drop support for curl < 7.16.0
 - http: drop support for curl < 7.11.1

 Some code in http.c that has bitrot is being removed.

 Expecting a reroll.


* mk/use-size-t-in-zlib (2017-08-10) 1 commit
 . zlib.c: use size_t for size

 The wrapper to call into zlib followed our long tradition to use
 "unsigned long" for sizes of regions in memory, which have been
 updated to use "size_t".

 Needs resurrecting by making sure the fix is good and still applies
 (or adjusted to today's codebase).

--------------------------------------------------
[Cooking]

* cc/perf-aggregate-unknown-option (2018-04-26) 1 commit
 - perf/aggregate: use Getopt::Long for option parsing

 Perf-test helper updates.

 Will merge to 'next'.


* ab/perl-python-attrs (2018-04-27) 3 commits
 - .gitattributes: add a diff driver for Python
 - .gitattributes: use the "perl" differ for Perl
 - .gitattributes: add *.pl extension for Perl

 We learned that our source files with ".pl" and ".py" extensions
 are Perl and Python files respectively and changes to them are
 better viewed as such with appropriate diff drivers.

 Will merge to 'next'.


* js/test-unset-prereq (2018-04-30) 1 commit
 - tests: introduce test_unset_prereq, for debugging

 Test debugging aid.

 Will merge to 'next'.
 cf. <20180507115950.3887-1-szeder.dev@gmail.com>


* fg/completion-external (2018-04-30) 1 commit
 - completion: load completion file for external subcommand

 The command line completion mechanism (in contrib/) learned to load
 custom completion file for "git $command" where $command is a
 custom "git-$command" that the end user has on the $PATH when using
 newer version of bash.

 Will merge to 'next'.
 cf. <CAM0VKjkTu+OkLM3gvX73mWugxArCVmqRBmWGHiKuLiLRNkkNow@mail.gmail.com>


* ma/double-dashes-in-docs (2018-04-18) 4 commits
  (merged to 'next' on 2018-04-25 at aaac2dc63c)
 + git-submodule.txt: quote usage in monospace, drop backslash
 + git-[short]log.txt: unify quoted standalone --
 + doc: convert [\--] to [--]
 + doc: convert \--option to --option

 Doc formatting updates.

 Will merge to 'master'.


* sb/worktree-remove-opt-force (2018-04-18) 1 commit
  (merged to 'next' on 2018-04-25 at 0367d52a4b)
 + worktree: accept -f as short for --force for removal

 "git worktree remove" learned that "-f" is a shorthand for
 "--force" option, just like for "git worktree add".

 Will merge to 'master'.


* sg/completion-clear-cached (2018-04-18) 1 commit
  (merged to 'next' on 2018-04-25 at 9178da6c3d)
 + completion: reduce overhead of clearing cached --options

 The completion script (in contrib/) learned to clear cached list of
 command line options upon dot-sourcing it again in a more efficient
 way.

 Will merge to 'master'.


* sg/doc-gc-quote-mismatch-fix (2018-04-18) 1 commit
  (merged to 'next' on 2018-04-25 at bc3d1abf45)
 + docs/git-gc: fix minor rendering issue

 Doc formatting fix.

 Will merge to 'master'.


* js/ident-date-fix (2018-04-19) 1 commit
  (merged to 'next' on 2018-04-30 at d50ec2f4c1)
 + sequencer: reset the committer date before commits

 During a "rebase -i" session, the code could give older timestamp
 to commits created by later "pick" than an earlier "reword", which
 has been corrected.

 Will merge to 'master'.


* nd/submodule-status-fix (2018-04-19) 1 commit
  (merged to 'next' on 2018-04-30 at 34d1f9ca83)
 + submodule--helper: don't print null in 'submodule status'

 "git submodule status" did not check the symbolic revision name it
 computed for the submodule HEAD is not the NULL, and threw it at
 printf routines, which has been corrected.

 Will merge to 'master'.


* sa/send-email-dedup-some-headers (2018-04-19) 1 commit
  (merged to 'next' on 2018-04-30 at 2a1fd8217e)
 + send-email: avoid duplicate In-Reply-To/References

 When fed input that already has In-Reply-To: and/or References:
 headers and told to add the same information, "git send-email"
 added these headers separately, instead of appending to an existing
 one, which is a violation of the RFC.  This has been corrected.

 Will merge to 'master'.


* tg/demote-stash-save-in-completion (2018-04-20) 2 commits
  (merged to 'next' on 2018-04-30 at 93d0af5375)
 + completion: make stash -p and alias for stash push -p
 + completion: stop showing 'save' for stash by default

 The command line completion (in contrib/) has been taught that "git
 stash save" has been deprecated ("git stash push" is the preferred
 spelling in the new world) and does not offer it as a possible
 completion candidate when "git stash push" can be.

 Will merge to 'master'.


* tz/doc-git-urls-reference (2018-04-20) 1 commit
  (merged to 'next' on 2018-04-30 at 39926c99fd)
 + doc/clone: update caption for GIT URLS cross-reference

 Doc fix.

 Will merge to 'master'.


* js/deprecate-grafts (2018-04-30) 12 commits
 - Remove obsolete script to convert grafts to replace refs
 - technical/shallow: describe why shallow cannot use replace refs
 - technical/shallow: stop referring to grafts
 - filter-branch: stop suggesting to use grafts
 - Deprecate support for .git/info/grafts
 - Add a test for `git replace --convert-graft-file`
 - replace: introduce --convert-graft-file
 - replace: prepare create_graft() for converting graft files wholesale
 - replace: "libify" create_graft() and callees
 - replace: avoid using die() to indicate a bug
 - commit: Let the callback of for_each_mergetag return on error
 - argv_array: offer to split a string by whitespace

 The functionality of "$GIT_DIR/info/grafts" has been superseded by
 the "refs/replace/" mechanism for some time now, but the internal
 code had support for it in many places, which has been cleaned up
 in order to drop support of the "grafts" mechanism.

 Will merge to 'next'.


* js/rebase-i-clean-msg-after-fixup-continue (2018-05-02) 4 commits
 - rebase --skip: clean up commit message after a failed fixup/squash
 - sequencer: always commit without editing when asked for
 - rebase -i: Handle "combination of <n> commits" with GETTEXT_POISON
 - rebase -i: demonstrate bugs with fixup!/squash! commit messages

 "git rebase -i" sometimes left intermediate "# This is a
 combination of N commits" message meant for the human consumption
 inside an editor in the final result in certain corner cases, which
 has been fixed.

 Will merge to 'next'.


* ma/fast-export-skip-merge-fix (2018-04-21) 1 commit
  (merged to 'next' on 2018-04-30 at f7fca02ab1)
 + fast-export: fix regression skipping some merge-commits

 "git fast-export" had a regression in v2.15.0 era where it skipped
 some merge commits in certain cases, which has been corrected.

 Will merge to 'master'.


* bw/server-options (2018-04-24) 4 commits
 - fetch: send server options when using protocol v2
 - ls-remote: send server options when using protocol v2
 - serve: introduce the server-option capability
 - Merge branch 'bw/protocol-v2' into HEAD
 (this branch uses bw/protocol-v2; is tangled with jt/partial-clone-proto-v2.)

 The transport protocol v2 is getting updated further.

 Will merge to 'next'.


* jc/parseopt-expiry-errors (2018-04-23) 2 commits
  (merged to 'next' on 2018-04-30 at 637085f3d8)
 + parseopt: handle malformed --expire arguments more nicely
 + gc: do not upcase error message shown with die()

 "git gc --prune=nonsense" spent long time repacking and then
 silently failed when underlying "git prune --expire=nonsense"
 failed to parse its command line.  This has been corrected.

 Will merge to 'master'.


* js/colored-push-errors (2018-04-24) 4 commits
  (merged to 'next' on 2018-04-30 at 31076c52a2)
 + config: document the settings to colorize push errors/hints
 + push: test to verify that push errors are colored
 + push: colorize errors
 + color: introduce support for colorizing stderr

 Error messages from "git push" can be painted for more visibility.

 Will merge to 'master'.


* js/runtime-prefix (2018-04-24) 8 commits
  (merged to 'next' on 2018-04-30 at c6cfccf40e)
 + Avoid multiple PREFIX definitions
 + git_setup_gettext: plug memory leak
 + gettext: avoid initialization if the locale dir is not present
  (merged to 'next' on 2018-04-17 at a69aaa7a22)
 + mingw/msvc: use the new-style RUNTIME_PREFIX helper
 + exec_cmd: provide a new-style RUNTIME_PREFIX helper for Windows
 + exec_cmd: RUNTIME_PREFIX on some POSIX systems
 + Makefile: add Perl runtime prefix support
 + Makefile: generate Perl header from template file
 (this branch is tangled with dj/runtime-prefix.)

 Will merge to 'master'.


* ma/http-walker-no-partial (2018-04-24) 2 commits
  (merged to 'next' on 2018-04-30 at 4582c99ba8)
 + walker: drop fields of `struct walker` which are always 1
 + http-fetch: make `-a` standard behaviour

 "git http-fetch" (deprecated) had an optional and experimental
 "feature" to fetch only commits and/or trees, which nobody used.
 This has been removed.

 Will merge to 'master'.


* bc/object-id (2018-05-02) 42 commits
 - merge-one-file: compute empty blob object ID
 - add--interactive: compute the empty tree value
 - Update shell scripts to compute empty tree object ID
 - sha1_file: only expose empty object constants through git_hash_algo
 - dir: use the_hash_algo for empty blob object ID
 - sequencer: use the_hash_algo for empty tree object ID
 - cache-tree: use is_empty_tree_oid
 - sha1_file: convert cached object code to struct object_id
 - builtin/reset: convert use of EMPTY_TREE_SHA1_BIN
 - builtin/receive-pack: convert one use of EMPTY_TREE_SHA1_HEX
 - wt-status: convert two uses of EMPTY_TREE_SHA1_HEX
 - submodule: convert several uses of EMPTY_TREE_SHA1_HEX
 - sequencer: convert one use of EMPTY_TREE_SHA1_HEX
 - merge: convert empty tree constant to the_hash_algo
 - builtin/merge: switch tree functions to use object_id
 - builtin/am: convert uses of EMPTY_TREE_SHA1_BIN to the_hash_algo
 - sha1-file: add functions for hex empty tree and blob OIDs
 - builtin/receive-pack: avoid hard-coded constants for push certs
 - diff: specify abbreviation size in terms of the_hash_algo
 - upload-pack: replace use of several hard-coded constants
 - revision: replace use of hard-coded constants
 - http: eliminate hard-coded constants
 - dir: convert struct untracked_cache_dir to object_id
 - commit: convert uses of get_sha1_hex to get_oid_hex
 - index-pack: abstract away hash function constant
 - pack-redundant: convert linked lists to use struct object_id
 - Update struct index_state to use struct object_id
 - split-index: convert struct split_index to object_id
 - submodule-config: convert structures to object_id
 - fsck: convert static functions to struct object_id
 - tree-walk: convert get_tree_entry_follow_symlinks to object_id
 - tree-walk: avoid hard-coded 20 constant
 - pack-redundant: abstract away hash algorithm
 - pack-objects: abstract away hash algorithm
 - packfile: abstract away hash constant values
 - packfile: convert find_pack_entry to object_id
 - sha1-file: convert freshen functions to object_id
 - packfile: convert has_sha1_pack to object_id
 - packfile: remove unused member from struct pack_entry
 - Remove unused member in struct object_context
 - server-info: remove unused members from struct pack_info
 - cache: add a function to read an object ID from a buffer

 Conversion from uchar[20] to struct object_id continues.


* sb/oid-object-info (2018-04-26) 9 commits
 - cache.h: allow oid_object_info to handle arbitrary repositories
 - packfile: add repository argument to cache_or_unpack_entry
 - packfile: add repository argument to unpack_entry
 - packfile: add repository argument to read_object
 - packfile: add repository argument to packed_object_info
 - packfile: add repository argument to packed_to_object_type
 - packfile: add repository argument to retry_bad_packed_offset
 - cache.h: add repository argument to oid_object_info
 - cache.h: add repository argument to oid_object_info_extended
 (this branch is used by sb/object-store-alloc; uses sb/object-store-replace.)

 The codepath around object-info API has been taught to take the
 repository object (which in turn tells the API which object store
 the objects are to be located).

 Will merge to 'next'.


* en/unpack-trees-split-index-fix (2018-05-02) 1 commit
 - unpack_trees: fix breakage when o->src_index != o->dst_index

 The split-index feature had a long-standing and dormant bug in
 certain use of the in-core merge machinery, which has been fixed.

 Will merge to 'next'.
 cf. <CACsJy8CeDhrT9GXe9q5gqsAeq_sSQ8jyF2nMOFxzjwKtE31oPQ@mail.gmail.com>


* bp/merge-rename-config (2018-05-04) 3 commits
 - merge: pass aggressive when rename detection is turned off
 - merge: add merge.renames config setting
 - merge: update documentation for {merge,diff}.renameLimit
 (this branch uses en/rename-directory-detection-reboot.)


* en/git-debugger (2018-04-25) 1 commit
 - Make running git under other debugger-like programs easy

 Dev support.

 Will merge to 'next'.


* js/no-pager-shorthand (2018-05-04) 1 commit
 - git: add -P as a short option for --no-pager

 "git --no-pager cmd" did not have short-and-sweet single letter
 option. Now it does.

 Will merge to 'next'.


* sb/diff-color-move-more (2018-04-25) 7 commits
 - diff.c: add --color-moved-ignore-space-delta option
 - diff.c: decouple white space treatment from move detection algorithm
 - diff.c: add a blocks mode for moved code detection
 - diff.c: adjust hash function signature to match hashmap expectation
 - diff.c: do not pass diff options as keydata to hashmap
 - xdiff/xdiffi.c: remove unneeded function declarations
 - xdiff/xdiff.h: remove unused flags

 "git diff --color-moved" feature has further been tweaked.


* so/glossary-ancestor (2018-04-17) 1 commit
  (merged to 'next' on 2018-04-25 at 0a849fee00)
 + glossary: substitute "ancestor" for "direct ancestor" in 'push' description.

 Docfix.

 Will merge to 'master'.


* bt/gpg-interface (2018-04-16) 7 commits
  (merged to 'next' on 2018-04-30 at 50c507b7d8)
 + gpg-interface: find the last gpg signature line
 + gpg-interface: extract gpg line matching helper
 + gpg-interface: fix const-correctness of "eol" pointer
 + gpg-interface: use size_t for signature buffer size
 + gpg-interface: modernize function declarations
 + gpg-interface: handle bool user.signingkey
 + t7004: fix mistaken tag name

 What is queued here is only the obviously correct and
 uncontroversial code clean-up part, which is an earlier 7 patches,
 of a larger series.

 The remainder that is not queued introduces a few configuration
 variables to deal with e-signature backends with different
 signature format.

 Will merge to 'master'.


* ds/generation-numbers (2018-05-02) 11 commits
 - commit-graph.txt: update design document
 - merge: check config before loading commits
 - commit: use generation number in remove_redundant()
 - commit: add short-circuit to paint_down_to_common()
 - commit: use generation numbers for in_merge_bases()
 - ref-filter: use generation number for --contains
 - commit-graph: always load commit-graph information
 - commit: use generations in paint_down_to_common()
 - commit-graph: compute generation numbers
 - commit: add generation number to struct commmit
 - ref-filter: fix outdated comment on in_commit_list
 (this branch uses ds/commit-graph and ds/lazy-load-trees.)

 A recently added "commit-graph" datafile has learned to store
 pre-computed generation numbers to speed up the decisions to stop
 history traversal.

 Is this ready for 'next'?


* en/rename-directory-detection-reboot (2018-04-25) 36 commits
 - merge-recursive: fix check for skipability of working tree updates
 - merge-recursive: make "Auto-merging" comment show for other merges
 - merge-recursive: fix remainder of was_dirty() to use original index
 - merge-recursive: fix was_tracked() to quit lying with some renamed paths
 - t6046: testcases checking whether updates can be skipped in a merge
 - merge-recursive: avoid triggering add_cacheinfo error with dirty mod
 - merge-recursive: move more is_dirty handling to merge_content
 - merge-recursive: improve add_cacheinfo error handling
 - merge-recursive: avoid spurious rename/rename conflict from dir renames
 - directory rename detection: new testcases showcasing a pair of bugs
 - merge-recursive: fix remaining directory rename + dirty overwrite cases
 - merge-recursive: fix overwriting dirty files involved in renames
 - merge-recursive: avoid clobbering untracked files with directory renames
 - merge-recursive: apply necessary modifications for directory renames
 - merge-recursive: when comparing files, don't include trees
 - merge-recursive: check for file level conflicts then get new name
 - merge-recursive: add computation of collisions due to dir rename & merging
 - merge-recursive: check for directory level conflicts
 - merge-recursive: add get_directory_renames()
 - merge-recursive: make a helper function for cleanup for handle_renames
 - merge-recursive: split out code for determining diff_filepairs
 - merge-recursive: make !o->detect_rename codepath more obvious
 - merge-recursive: fix leaks of allocated renames and diff_filepairs
 - merge-recursive: introduce new functions to handle rename logic
 - merge-recursive: move the get_renames() function
 - directory rename detection: tests for handling overwriting dirty files
 - directory rename detection: tests for handling overwriting untracked files
 - directory rename detection: miscellaneous testcases to complete coverage
 - directory rename detection: testcases exploring possibly suboptimal merges
 - directory rename detection: more involved edge/corner testcases
 - directory rename detection: testcases checking which side did the rename
 - directory rename detection: files/directories in the way of some renames
 - directory rename detection: partially renamed directory testcase/discussion
 - directory rename detection: testcases to avoid taking detection too far
 - directory rename detection: directory splitting testcases
 - directory rename detection: basic testcases
 (this branch is used by bp/merge-rename-config.)

 Rename detection logic in "diff" family that is used in "merge" has
 learned to guess when all of x/a, x/b and x/c have moved to z/a,
 z/b and z/c, it is likely that x/d added in the meantime would also
 want to move to z/d by taking the hint that the entire directory
 'x' moved to 'z'.  Incidentally, this avoids updating a file in the
 working tree after a (non-trivial) merge whose result matches what
 our side originally had.

 Will merge to 'next'.


* nd/command-list (2018-04-30) 10 commits
 - completion: let git provide the completable command list
 - help: use command-list.txt for the source of guides
 - help: add "-a --verbose" to list all commands with synopsis
 - git: support --list-cmds=list-<category>
 - completion: implement and use --list-cmds=main,others
 - git.c: convert --list-*builtins to --list-cmds=*
 - Remove common-cmds.h
 - help: use command-list.h for common command list
 - generate-cmds.sh: export all commands to command-list.h
 - generate-cmds.sh: factor out synopsis extract code

 The list of commands with their various attributes were spread
 across a few places in the build procedure, but it now is getting a
 bit more consolidated to allow more automation.

 Is this ready for 'next'.


* sb/object-store-replace (2018-04-12) 15 commits
  (merged to 'next' on 2018-04-25 at 9a213fb505)
 + replace-object: allow lookup_replace_object to handle arbitrary repositories
 + replace-object: allow do_lookup_replace_object to handle arbitrary repositories
 + replace-object: allow prepare_replace_object to handle arbitrary repositories
 + refs: allow for_each_replace_ref to handle arbitrary repositories
 + refs: store the main ref store inside the repository struct
 + replace-object: add repository argument to lookup_replace_object
 + replace-object: add repository argument to do_lookup_replace_object
 + replace-object: add repository argument to prepare_replace_object
 + refs: add repository argument to for_each_replace_ref
 + refs: add repository argument to get_main_ref_store
 + replace-object: check_replace_refs is safe in multi repo environment
 + replace-object: eliminate replace objects prepared flag
 + object-store: move lookup_replace_object to replace-object.h
 + replace-object: move replace_map to object store
 + replace_object: use oidmap
 (this branch is used by sb/object-store-alloc and sb/oid-object-info.)

 The effort to pass the repository in-core structure throughout the
 API continues.  This round deals with the code that implements the
 refs/replace/ mechanism.

 Will merge to 'master'.


* sg/complete-paths (2018-04-17) 11 commits
 - completion: fill COMPREPLY directly when completing paths
 - completion: improve handling quoted paths in 'git ls-files's output
 - completion: remove repeated dirnames with 'awk' during path completion
 - t9902-completion: ignore COMPREPLY element order in some tests
 - completion: use 'awk' to strip trailing path components
 - completion: let 'ls-files' and 'diff-index' filter matching paths
 - completion: improve handling quoted paths on the command line
 - completion: support completing non-ASCII pathnames
 - completion: simplify prefix path component handling during path completion
 - completion: move __git_complete_index_file() next to its helpers
 - t9902-completion: add tests demonstrating issues with quoted pathnames

 Command line completion (in contrib/) learned to complete pathnames
 for various commands better.

 Will merge to 'next'.


* tq/t1510 (2018-04-17) 1 commit
  (merged to 'next' on 2018-04-25 at 5710c81979)
 + t1510-repo-setup.sh: remove useless mkdir

 Test cleanup.

 Will merge to 'master'.


* sb/blame-color (2018-04-24) 3 commits
 - builtin/blame: add new coloring scheme config
 - builtin/blame: highlight recently changed lines
 - builtin/blame: dim uninteresting metadata lines

 "git blame" learns to unhighlight uninteresting metadata from the
 originating commit on lines that are the same as the previous one,
 and also paint lines in different colors depending on the age of
 the commit.

 Is this ready for 'next'?


* ab/simplify-perl-makefile (2018-04-19) 2 commits
  (merged to 'next' on 2018-04-25 at 906cf21682)
 + Makefile: mark perllibdir as a .PHONY target
  (merged to 'next' on 2018-04-17 at 4448756934)
 + perl: fix installing modules from contrib

 Recent simplification of build procedure forgot a bit of tweak to
 the build procedure of contrib/mw-to-git/

 Will merge to 'master'.


* ds/lazy-load-trees (2018-05-02) 6 commits
  (merged to 'next' on 2018-05-02 at d54016d9e3)
 + coccinelle: avoid wrong transformation suggestions from commit.cocci
  (merged to 'next' on 2018-04-25 at b90813f421)
 + commit-graph: lazy-load trees for commits
 + treewide: replace maybe_tree with accessor methods
 + commit: create get_commit_tree() method
 + treewide: rename tree to maybe_tree
 + Merge branch 'bw/c-plus-plus' into ds/lazy-load-trees
 (this branch is used by ds/generation-numbers; uses ds/commit-graph.)

 The code has been taught to use the duplicated information stored
 in the commit-graph file to learn the tree object name for a commit
 to avoid opening and parsing the commit object when it makes sense
 to do so.

 Will merge to 'master'.


* ab/git-svn-get-record-typofix (2018-04-09) 1 commit
  (merged to 'next' on 2018-04-30 at 23f875f6b9)
 + git-svn: avoid warning on undef readline()

 "git svn" had a minor thinko/typo which has been fixed.

 Will merge to 'master'.


* hn/sort-ls-remote (2018-04-09) 1 commit
  (merged to 'next' on 2018-04-30 at 244ca5d30a)
 + ls-remote: create '--sort' option

 "git ls-remote" learned an option to allow sorting its output based
 on the refnames being shown.

 Will merge to 'master'.


* js/empty-config-section-fix (2018-04-09) 15 commits
  (merged to 'next' on 2018-04-25 at 1690df3e5f)
 + git_config_set: reuse empty sections
 + git config --unset: remove empty sections (in the common case)
 + git_config_set: make use of the config parser's event stream
 + git_config_set: do not use a state machine
 + config_set_store: rename some fields for consistency
 + config: avoid using the global variable `store`
 + config: introduce an optional event stream while parsing
 + t1300: `--unset-all` can leave an empty section behind (bug)
 + t1300: add a few more hairy examples of sections becoming empty
 + t1300: remove unreasonable expectation from TODO
 + t1300: avoid relying on a bug
 + config --replace-all: avoid extra line breaks
 + t1300: demonstrate that --replace-all can "invent" newlines
 + t1300: rename it to reflect that `repo-config` was deprecated
 + git_config_set: fix off-by-two

 "git config --unset a.b", when "a.b" is the last variable in an
 otherwise empty section "a", left an empty section "a" behind, and
 worse yet, a subsequent "git config a.c value" did not reuse that
 empty shell and instead created a new one.  These have been
 (partially) corrected.

 Will merge to 'master'.


* nd/warn-more-for-devs (2018-04-16) 4 commits
  (merged to 'next' on 2018-04-25 at 2978e61414)
 + Makefile: add a DEVOPTS to get all of -Wextra
 + Makefile: add a DEVOPTS to suppress -Werror under DEVELOPER
 + Makefile: detect compiler and enable more warnings in DEVELOPER=1
 + connect.c: mark die_initial_contact() NORETURN

 The build procedure "make DEVELOPER=YesPlease" learned to enable a
 bit more warning options depending on the compiler used to help
 developers more.  There also is "make DEVOPTS=tokens" knob
 available now, for those who want to help fixing warnings we
 usually ignore, for example.

 Will merge to 'master'.


* sb/submodule-move-nested (2018-03-29) 6 commits
  (merged to 'next' on 2018-04-25 at 86b177433a)
 + submodule: fixup nested submodules after moving the submodule
 + submodule-config: remove submodule_from_cache
 + submodule-config: add repository argument to submodule_from_{name, path}
 + submodule-config: allow submodule_free to handle arbitrary repositories
 + grep: remove "repo" arg from non-supporting funcs
 + submodule.h: drop declaration of connect_work_tree_and_git_dir

 Moving a submodule that itself has submodule in it with "git mv"
 forgot to make necessary adjustment to the nested sub-submodules;
 now the codepath learned to recurse into the submodules.

 Will merge to 'master'.


* tb/config-type (2018-04-19) 2 commits
  (merged to 'next' on 2018-04-25 at fe69e93c82)
 + builtin/config.c: support `--type=<type>` as preferred alias for `--<type>`
 + builtin/config.c: treat type specifiers singularly
 (this branch is used by tb/config-default.)

 The "git config" command uses separate options e.g. "--int",
 "--bool", etc. to specify what type the caller wants the value to
 be interpreted as.  A new "--type=<typename>" option has been
 introduced, which would make it cleaner to define new types.

 Will merge to 'master'.


* tb/config-default (2018-04-23) 3 commits
  (merged to 'next' on 2018-04-25 at 59bb6beb2a)
 + builtin/config: introduce `color` type specifier
 + config.c: introduce 'git_config_color' to parse ANSI colors
 + builtin/config: introduce `--default`
 (this branch uses tb/config-type.)

 "git config --get" learned the "--default" option, to help the
 calling script.  Building on top of the tb/config-type topic, the
 "git config" learns "--type=color" type.  Taken together, you can
 do things like "git config --get foo.color --default blue" and get
 the ANSI color sequence for the color given to foo.color variable,
 or "blue" if the variable does not exist.

 Will merge to 'master'.


* ot/libify-get-ref-atom-value (2018-03-29) 6 commits
  (merged to 'next' on 2018-04-25 at 056bcaa69c)
 + ref-filter: libify get_ref_atom_value()
 + ref-filter: add return value to parsers
 + ref-filter: change parsing function error handling
 + ref-filter: add return value && strbuf to handlers
 + ref-filter: start adding strbufs with errors
 + ref-filter: add shortcut to work with strbufs

 Code restructuring, in preparation for further work.

 Will merge to 'master'.


* jk/branch-l-0-deprecation (2018-03-26) 3 commits
  (merged to 'next' on 2018-04-11 at 9b2b0305dd)
 + branch: deprecate "-l" option
 + t: switch "branch -l" to "branch --create-reflog"
 + t3200: unset core.logallrefupdates when testing reflog creation
 (this branch is used by jk/branch-l-1-removal and jk/branch-l-2-reincarnation.)

 The "-l" option in "git branch -l" is an unfortunate short-hand for
 "--create-reflog", but many users, both old and new, somehow expect
 it to be something else, perhaps "--list".  This step deprecates
 the short-hand and warns about the future removal of the it when it
 is used.

 Will cook in 'next'.


* jk/branch-l-1-removal (2018-03-26) 1 commit
 - branch: drop deprecated "-l" option
 (this branch is used by jk/branch-l-2-reincarnation; uses jk/branch-l-0-deprecation.)

 Following the "git branch -l" deprecation, the short-hand is removed.

 Will keep in 'pu'.


* jk/branch-l-2-reincarnation (2018-03-26) 1 commit
 - branch: make "-l" a synonym for "--list"
 (this branch uses jk/branch-l-0-deprecation and jk/branch-l-1-removal.)

 Following the "git branch -l" removal, "-l" is resurrected as a
 short-hand for "--list".

 Will keep in 'pu'.


* dj/runtime-prefix (2018-04-24) 7 commits
  (merged to 'next' on 2018-04-25 at e7e635a70e)
 + Makefile: quote $INSTLIBDIR when passing it to sed
 + Makefile: remove unused @@PERLLIBDIR@@ substitution variable
  (merged to 'next' on 2018-04-17 at a69aaa7a22)
 + mingw/msvc: use the new-style RUNTIME_PREFIX helper
 + exec_cmd: provide a new-style RUNTIME_PREFIX helper for Windows
 + exec_cmd: RUNTIME_PREFIX on some POSIX systems
 + Makefile: add Perl runtime prefix support
 + Makefile: generate Perl header from template file
 (this branch is tangled with js/runtime-prefix.)

 A build-time option has been added to allow Git to be told to refer
 to its associated files relative to the main binary, in the same
 way that has been possible on Windows for quite some time, for
 Linux, BSDs and Darwin.

 Will merge to 'master'.


* ab/nuke-emacs-contrib (2018-04-16) 1 commit
  (merged to 'next' on 2018-04-25 at 9b133d8a65)
 + git{,-blame}.el: remove old bitrotting Emacs code

 The scripts in contrib/emacs/ have outlived their usefulness and
 have been replaced with a stub that errors out and tells the user
 there are replacements.

 Will merge to 'master'.


* nd/pack-objects-pack-struct (2018-04-16) 15 commits
 - ci: exercise the whole test suite with uncommon code in pack-objects
 - pack-objects: reorder members to shrink struct object_entry
 - pack-objects: shrink delta_size field in struct object_entry
 - pack-objects: shrink size field in struct object_entry
 - pack-objects: clarify the use of object_entry::size
 - pack-objects: don't check size when the object is bad
 - pack-objects: shrink z_delta_size field in struct object_entry
 - pack-objects: refer to delta objects by index instead of pointer
 - pack-objects: move in_pack out of struct object_entry
 - pack-objects: move in_pack_pos out of struct object_entry
 - pack-objects: use bitfield for object_entry::depth
 - pack-objects: use bitfield for object_entry::dfs_state
 - pack-objects: turn type and in_pack_type to bitfields
 - pack-objects: a bit of document about struct object_entry
 - read-cache.c: make $GIT_TEST_SPLIT_INDEX boolean

 "git pack-objects" needs to allocate tons of "struct object_entry"
 while doing its work, and shrinking its size helps the performance
 quite a bit.

 Will merge to 'next'.
 cf. <CACsJy8CuVRy4UPEwXJJYAjePEz5zjKMLhRjh9UFw0DPYTzobkw@mail.gmail.com>


* nd/repack-keep-pack (2018-04-16) 7 commits
 - pack-objects: show some progress when counting kept objects
 - gc --auto: exclude base pack if not enough mem to "repack -ad"
 - gc: handle a corner case in gc.bigPackThreshold
 - gc: add gc.bigPackThreshold config
 - gc: add --keep-largest-pack option
 - repack: add --keep-pack option
 - t7700: have closing quote of a test at the beginning of line

 "git gc" in a large repository takes a lot of time as it considers
 to repack all objects into one pack by default.  The command has
 been taught to pretend as if the largest existing packfile is
 marked with ".keep" so that it is left untouched while objects in
 other packs and loose ones are repacked.

 Will merge to 'next'.
 cf. <CACsJy8CuVRy4UPEwXJJYAjePEz5zjKMLhRjh9UFw0DPYTzobkw@mail.gmail.com>


* ds/commit-graph (2018-04-11) 16 commits
  (merged to 'next' on 2018-04-25 at 18af3d28d9)
 + commit-graph: implement "--append" option
 + commit-graph: build graph from starting commits
 + commit-graph: read only from specific pack-indexes
 + commit: integrate commit graph with commit parsing
 + commit-graph: close under reachability
 + commit-graph: add core.commitGraph setting
 + commit-graph: implement git commit-graph read
 + commit-graph: implement git-commit-graph write
 + commit-graph: implement write_commit_graph()
 + commit-graph: create git-commit-graph builtin
 + graph: add commit graph design document
 + commit-graph: add format document
 + csum-file: refactor finalize_hashfile() method
 + csum-file: rename hashclose() to finalize_hashfile()
 + Merge branch 'jk/cached-commit-buffer' into HEAD
 + Merge branch 'jt/binsearch-with-fanout' into HEAD
 (this branch is used by ds/generation-numbers and ds/lazy-load-trees.)

 Precompute and store information necessary for ancestry traversal
 in a separate file to optimize graph walking.

 Will merge to 'master'.


* tg/worktree-add-existing-branch (2018-04-30) 4 commits
 - worktree: teach "add" to check out existing branches
 - worktree: factor out dwim_branch function
 - worktree: improve message when creating a new worktree
 - worktree: remove extra members from struct add_opts

 "git worktree add" learned to check out an existing branch.

 Will merge to 'next'.


* js/rebase-recreate-merge (2018-04-26) 17 commits
 - rebase -i --rebase-merges: add a section to the man page
 - rebase -i: introduce --rebase-merges=[no-]rebase-cousins
 - pull: accept --rebase=merges to recreate the branch topology
 - rebase --rebase-merges: avoid "empty merges"
 - sequencer: handle post-rewrite for merge commands
 - sequencer: make refs generated by the `label` command worktree-local
 - rebase --rebase-merges: add test for --keep-empty
 - rebase: introduce the --rebase-merges option
 - rebase-helper --make-script: introduce a flag to rebase merges
 - sequencer: fast-forward `merge` commands, if possible
 - sequencer: introduce the `merge` command
 - sequencer: introduce new commands to reset the revision
 - git-rebase--interactive: clarify arguments
 - sequencer: offer helpful advice when a command was rescheduled
 - sequencer: refactor how original todo list lines are accessed
 - sequencer: make rearrange_squash() a bit more obvious
 - sequencer: avoid using errno clobbered by rollback_lock_file()
 (this branch is used by js/sequencer-and-root-commits.)

 "git rebase" learned "--rebase-merges" to transplant the whole
 topology of commit graph elsewhere.

 Will merge to 'next'.


* bw/protocol-v2 (2018-03-15) 35 commits
  (merged to 'next' on 2018-04-11 at 23ee234a2c)
 + remote-curl: don't request v2 when pushing
 + remote-curl: implement stateless-connect command
 + http: eliminate "# service" line when using protocol v2
 + http: don't always add Git-Protocol header
 + http: allow providing extra headers for http requests
 + remote-curl: store the protocol version the server responded with
 + remote-curl: create copy of the service name
 + pkt-line: add packet_buf_write_len function
 + transport-helper: introduce stateless-connect
 + transport-helper: refactor process_connect_service
 + transport-helper: remove name parameter
 + connect: don't request v2 when pushing
 + connect: refactor git_connect to only get the protocol version once
 + fetch-pack: support shallow requests
 + fetch-pack: perform a fetch using v2
 + upload-pack: introduce fetch server command
 + push: pass ref prefixes when pushing
 + fetch: pass ref prefixes when fetching
 + ls-remote: pass ref prefixes when requesting a remote's refs
 + transport: convert transport_get_remote_refs to take a list of ref prefixes
 + transport: convert get_refs_list to take a list of ref prefixes
 + connect: request remote refs using v2
 + ls-refs: introduce ls-refs server command
 + serve: introduce git-serve
 + test-pkt-line: introduce a packet-line test helper
 + protocol: introduce enum protocol_version value protocol_v2
 + transport: store protocol version
 + connect: discover protocol version outside of get_remote_heads
 + connect: convert get_remote_heads to use struct packet_reader
 + transport: use get_refs_via_connect to get refs
 + upload-pack: factor out processing lines
 + upload-pack: convert to a builtin
 + pkt-line: add delim packet support
 + pkt-line: allow peeking a packet line without consuming it
 + pkt-line: introduce packet_read_with_status
 (this branch is used by bw/server-options and jt/partial-clone-proto-v2.)

 The beginning of the next-gen transfer protocol.

 Will merge to 'master'.


* ls/checkout-encoding (2018-04-16) 10 commits
  (merged to 'next' on 2018-04-25 at e0f8554b2a)
 + convert: add round trip check based on 'core.checkRoundtripEncoding'
 + convert: add tracing for 'working-tree-encoding' attribute
 + convert: check for detectable errors in UTF encodings
 + convert: add 'working-tree-encoding' attribute
 + utf8: add function to detect a missing UTF-16/32 BOM
 + utf8: add function to detect prohibited UTF-16/32 BOM
 + utf8: teach same_encoding() alternative UTF encoding names
 + strbuf: add a case insensitive starts_with()
 + strbuf: add xstrdup_toupper()
 + strbuf: remove unnecessary NUL assignment in xstrdup_tolower()

 The new "checkout-encoding" attribute can ask Git to convert the
 contents to the specified encoding when checking out to the working
 tree (and the other way around when checking in).

 Will merge to 'master'.

--------------------------------------------------
[Discarded]

* js/runtime-prefix-windows (2018-03-27) 5 commits
 . mingw/msvc: use the new-style RUNTIME_PREFIX helper
 . exec_cmd: provide a new-style RUNTIME_PREFIX helper for Windows
 . exec_cmd: RUNTIME_PREFIX on some POSIX systems
 . Makefile: add Perl runtime prefix support
 . Makefile: generate Perl header from template file

 The Windows port was the first that allowed Git to be installed
 anywhere by having its components refer to each other with relative
 pathnames.  The recent dj/runtime-prefix topic extends the idea to
 other platforms, and its approach has been adopted back in the
 Windows port.

 Ejected, as the parent topic dj/runtime-prefix covers Windows now.


* bp/fsexcludes (2018-04-16) 2 commits
 . fsmonitor: switch to use new fsexcludes logic and remove unused untracked cache based logic
 . fsexcludes: add a programmatic way to exclude files from git's working directory traversal logic

 Can we have a few lines summary here, just like we have for other
 topic ;-) I personally take the overlong title of these commits as
 a sign that they can further be simplified and cleaned up by
 splitting, focusing the scope, etc.

 Retracted.
 cf. <0de30972-b0a2-67e8-7cff-c19daf9ece8b@gmail.com>

^ permalink raw reply	[relevance 3%]

* What's cooking in git.git (May 2018, #02; Thu, 17)
@ 2018-05-17  6:01  3% Junio C Hamano
  0 siblings, 0 replies; 200+ results
From: Junio C Hamano @ 2018-05-17  6:01 UTC (permalink / raw)
  To: git

Here are the topics that have been cooking.  Commits prefixed with
'-' are only in 'pu' (proposed updates) while commits prefixed with
'+' are in 'next'.  The ones marked with '.' do not appear in any of
the integration branches, but I am still holding onto them.

You can find the changes described here in the integration branches
of the repositories listed at

    http://git-blame.blogspot.com/p/git-public-repositories.html

--------------------------------------------------
[Graduated to "master"]

* hn/sort-ls-remote (2018-04-09) 1 commit
  (merged to 'next' on 2018-04-30 at 244ca5d30a)
 + ls-remote: create '--sort' option

 "git ls-remote" learned an option to allow sorting its output based
 on the refnames being shown.


* sb/object-store-replace (2018-04-12) 15 commits
  (merged to 'next' on 2018-04-25 at 9a213fb505)
 + replace-object: allow lookup_replace_object to handle arbitrary repositories
 + replace-object: allow do_lookup_replace_object to handle arbitrary repositories
 + replace-object: allow prepare_replace_object to handle arbitrary repositories
 + refs: allow for_each_replace_ref to handle arbitrary repositories
 + refs: store the main ref store inside the repository struct
 + replace-object: add repository argument to lookup_replace_object
 + replace-object: add repository argument to do_lookup_replace_object
 + replace-object: add repository argument to prepare_replace_object
 + refs: add repository argument to for_each_replace_ref
 + refs: add repository argument to get_main_ref_store
 + replace-object: check_replace_refs is safe in multi repo environment
 + replace-object: eliminate replace objects prepared flag
 + object-store: move lookup_replace_object to replace-object.h
 + replace-object: move replace_map to object store
 + replace_object: use oidmap
 (this branch is used by sb/object-store-alloc and sb/oid-object-info.)

 The effort to pass the repository in-core structure throughout the
 API continues.  This round deals with the code that implements the
 refs/replace/ mechanism.


* ab/git-svn-get-record-typofix (2018-04-09) 1 commit
  (merged to 'next' on 2018-04-30 at 23f875f6b9)
 + git-svn: avoid warning on undef readline()

 "git svn" had a minor thinko/typo which has been fixed.


* ab/nuke-emacs-contrib (2018-04-16) 1 commit
  (merged to 'next' on 2018-04-25 at 9b133d8a65)
 + git{,-blame}.el: remove old bitrotting Emacs code

 The scripts in contrib/emacs/ have outlived their usefulness and
 have been replaced with a stub that errors out and tells the user
 there are replacements.


* ab/simplify-perl-makefile (2018-04-19) 2 commits
  (merged to 'next' on 2018-04-25 at 906cf21682)
 + Makefile: mark perllibdir as a .PHONY target
  (merged to 'next' on 2018-04-17 at 4448756934)
 + perl: fix installing modules from contrib

 Recent simplification of build procedure forgot a bit of tweak to
 the build procedure of contrib/mw-to-git/


* bt/gpg-interface (2018-04-16) 7 commits
  (merged to 'next' on 2018-04-30 at 50c507b7d8)
 + gpg-interface: find the last gpg signature line
 + gpg-interface: extract gpg line matching helper
 + gpg-interface: fix const-correctness of "eol" pointer
 + gpg-interface: use size_t for signature buffer size
 + gpg-interface: modernize function declarations
 + gpg-interface: handle bool user.signingkey
 + t7004: fix mistaken tag name

 What is queued here is only the obviously correct and
 uncontroversial code clean-up part, which is an earlier 7 patches,
 of a larger series.

 The remainder that is not queued introduces a few configuration
 variables to deal with e-signature backends with different
 signature format.


* bw/protocol-v2 (2018-03-15) 35 commits
  (merged to 'next' on 2018-04-11 at 23ee234a2c)
 + remote-curl: don't request v2 when pushing
 + remote-curl: implement stateless-connect command
 + http: eliminate "# service" line when using protocol v2
 + http: don't always add Git-Protocol header
 + http: allow providing extra headers for http requests
 + remote-curl: store the protocol version the server responded with
 + remote-curl: create copy of the service name
 + pkt-line: add packet_buf_write_len function
 + transport-helper: introduce stateless-connect
 + transport-helper: refactor process_connect_service
 + transport-helper: remove name parameter
 + connect: don't request v2 when pushing
 + connect: refactor git_connect to only get the protocol version once
 + fetch-pack: support shallow requests
 + fetch-pack: perform a fetch using v2
 + upload-pack: introduce fetch server command
 + push: pass ref prefixes when pushing
 + fetch: pass ref prefixes when fetching
 + ls-remote: pass ref prefixes when requesting a remote's refs
 + transport: convert transport_get_remote_refs to take a list of ref prefixes
 + transport: convert get_refs_list to take a list of ref prefixes
 + connect: request remote refs using v2
 + ls-refs: introduce ls-refs server command
 + serve: introduce git-serve
 + test-pkt-line: introduce a packet-line test helper
 + protocol: introduce enum protocol_version value protocol_v2
 + transport: store protocol version
 + connect: discover protocol version outside of get_remote_heads
 + connect: convert get_remote_heads to use struct packet_reader
 + transport: use get_refs_via_connect to get refs
 + upload-pack: factor out processing lines
 + upload-pack: convert to a builtin
 + pkt-line: add delim packet support
 + pkt-line: allow peeking a packet line without consuming it
 + pkt-line: introduce packet_read_with_status
 (this branch is used by bw/server-options and jt/partial-clone-proto-v2.)

 The beginning of the next-gen transfer protocol.


* dj/runtime-prefix (2018-04-24) 7 commits
  (merged to 'next' on 2018-04-25 at e7e635a70e)
 + Makefile: quote $INSTLIBDIR when passing it to sed
 + Makefile: remove unused @@PERLLIBDIR@@ substitution variable
  (merged to 'next' on 2018-04-17 at a69aaa7a22)
 + mingw/msvc: use the new-style RUNTIME_PREFIX helper
 + exec_cmd: provide a new-style RUNTIME_PREFIX helper for Windows
 + exec_cmd: RUNTIME_PREFIX on some POSIX systems
 + Makefile: add Perl runtime prefix support
 + Makefile: generate Perl header from template file
 (this branch is tangled with js/runtime-prefix.)

 A build-time option has been added to allow Git to be told to refer
 to its associated files relative to the main binary, in the same
 way that has been possible on Windows for quite some time, for
 Linux, BSDs and Darwin.


* ds/commit-graph (2018-04-11) 16 commits
  (merged to 'next' on 2018-04-25 at 18af3d28d9)
 + commit-graph: implement "--append" option
 + commit-graph: build graph from starting commits
 + commit-graph: read only from specific pack-indexes
 + commit: integrate commit graph with commit parsing
 + commit-graph: close under reachability
 + commit-graph: add core.commitGraph setting
 + commit-graph: implement git commit-graph read
 + commit-graph: implement git-commit-graph write
 + commit-graph: implement write_commit_graph()
 + commit-graph: create git-commit-graph builtin
 + graph: add commit graph design document
 + commit-graph: add format document
 + csum-file: refactor finalize_hashfile() method
 + csum-file: rename hashclose() to finalize_hashfile()
 + Merge branch 'jk/cached-commit-buffer' into HEAD
 + Merge branch 'jt/binsearch-with-fanout' into HEAD
 (this branch is used by ds/generation-numbers and ds/lazy-load-trees.)

 Precompute and store information necessary for ancestry traversal
 in a separate file to optimize graph walking.

 Will merge to 'master'.


* jc/parseopt-expiry-errors (2018-04-23) 2 commits
  (merged to 'next' on 2018-04-30 at 637085f3d8)
 + parseopt: handle malformed --expire arguments more nicely
 + gc: do not upcase error message shown with die()

 "git gc --prune=nonsense" spent long time repacking and then
 silently failed when underlying "git prune --expire=nonsense"
 failed to parse its command line.  This has been corrected.


* js/colored-push-errors (2018-04-24) 4 commits
  (merged to 'next' on 2018-04-30 at 31076c52a2)
 + config: document the settings to colorize push errors/hints
 + push: test to verify that push errors are colored
 + push: colorize errors
 + color: introduce support for colorizing stderr

 Error messages from "git push" can be painted for more visibility.


* js/empty-config-section-fix (2018-04-09) 15 commits
  (merged to 'next' on 2018-04-25 at 1690df3e5f)
 + git_config_set: reuse empty sections
 + git config --unset: remove empty sections (in the common case)
 + git_config_set: make use of the config parser's event stream
 + git_config_set: do not use a state machine
 + config_set_store: rename some fields for consistency
 + config: avoid using the global variable `store`
 + config: introduce an optional event stream while parsing
 + t1300: `--unset-all` can leave an empty section behind (bug)
 + t1300: add a few more hairy examples of sections becoming empty
 + t1300: remove unreasonable expectation from TODO
 + t1300: avoid relying on a bug
 + config --replace-all: avoid extra line breaks
 + t1300: demonstrate that --replace-all can "invent" newlines
 + t1300: rename it to reflect that `repo-config` was deprecated
 + git_config_set: fix off-by-two

 "git config --unset a.b", when "a.b" is the last variable in an
 otherwise empty section "a", left an empty section "a" behind, and
 worse yet, a subsequent "git config a.c value" did not reuse that
 empty shell and instead created a new one.  These have been
 (partially) corrected.


* js/ident-date-fix (2018-04-19) 1 commit
  (merged to 'next' on 2018-04-30 at d50ec2f4c1)
 + sequencer: reset the committer date before commits

 During a "rebase -i" session, the code could give older timestamp
 to commits created by later "pick" than an earlier "reword", which
 has been corrected.


* js/runtime-prefix (2018-04-24) 8 commits
  (merged to 'next' on 2018-04-30 at c6cfccf40e)
 + Avoid multiple PREFIX definitions
 + git_setup_gettext: plug memory leak
 + gettext: avoid initialization if the locale dir is not present
  (merged to 'next' on 2018-04-17 at a69aaa7a22)
 + mingw/msvc: use the new-style RUNTIME_PREFIX helper
 + exec_cmd: provide a new-style RUNTIME_PREFIX helper for Windows
 + exec_cmd: RUNTIME_PREFIX on some POSIX systems
 + Makefile: add Perl runtime prefix support
 + Makefile: generate Perl header from template file
 (this branch is tangled with dj/runtime-prefix.)


* ls/checkout-encoding (2018-04-16) 10 commits
  (merged to 'next' on 2018-04-25 at e0f8554b2a)
 + convert: add round trip check based on 'core.checkRoundtripEncoding'
 + convert: add tracing for 'working-tree-encoding' attribute
 + convert: check for detectable errors in UTF encodings
 + convert: add 'working-tree-encoding' attribute
 + utf8: add function to detect a missing UTF-16/32 BOM
 + utf8: add function to detect prohibited UTF-16/32 BOM
 + utf8: teach same_encoding() alternative UTF encoding names
 + strbuf: add a case insensitive starts_with()
 + strbuf: add xstrdup_toupper()
 + strbuf: remove unnecessary NUL assignment in xstrdup_tolower()

 The new "checkout-encoding" attribute can ask Git to convert the
 contents to the specified encoding when checking out to the working
 tree (and the other way around when checking in).


* ma/double-dashes-in-docs (2018-04-18) 4 commits
  (merged to 'next' on 2018-04-25 at aaac2dc63c)
 + git-submodule.txt: quote usage in monospace, drop backslash
 + git-[short]log.txt: unify quoted standalone --
 + doc: convert [\--] to [--]
 + doc: convert \--option to --option

 Doc formatting updates.


* ma/fast-export-skip-merge-fix (2018-04-21) 1 commit
  (merged to 'next' on 2018-04-30 at f7fca02ab1)
 + fast-export: fix regression skipping some merge-commits

 "git fast-export" had a regression in v2.15.0 era where it skipped
 some merge commits in certain cases, which has been corrected.


* ma/http-walker-no-partial (2018-04-24) 2 commits
  (merged to 'next' on 2018-04-30 at 4582c99ba8)
 + walker: drop fields of `struct walker` which are always 1
 + http-fetch: make `-a` standard behavior

 "git http-fetch" (deprecated) had an optional and experimental
 "feature" to fetch only commits and/or trees, which nobody used.
 This has been removed.


* nd/submodule-status-fix (2018-04-19) 1 commit
  (merged to 'next' on 2018-04-30 at 34d1f9ca83)
 + submodule--helper: don't print null in 'submodule status'

 "git submodule status" did not check the symbolic revision name it
 computed for the submodule HEAD is not the NULL, and threw it at
 printf routines, which has been corrected.


* nd/warn-more-for-devs (2018-04-16) 4 commits
  (merged to 'next' on 2018-04-25 at 2978e61414)
 + Makefile: add a DEVOPTS to get all of -Wextra
 + Makefile: add a DEVOPTS to suppress -Werror under DEVELOPER
 + Makefile: detect compiler and enable more warnings in DEVELOPER=1
 + connect.c: mark die_initial_contact() NORETURN

 The build procedure "make DEVELOPER=YesPlease" learned to enable a
 bit more warning options depending on the compiler used to help
 developers more.  There also is "make DEVOPTS=tokens" knob
 available now, for those who want to help fixing warnings we
 usually ignore, for example.


* ot/libify-get-ref-atom-value (2018-03-29) 6 commits
  (merged to 'next' on 2018-04-25 at 056bcaa69c)
 + ref-filter: libify get_ref_atom_value()
 + ref-filter: add return value to parsers
 + ref-filter: change parsing function error handling
 + ref-filter: add return value && strbuf to handlers
 + ref-filter: start adding strbufs with errors
 + ref-filter: add shortcut to work with strbufs

 Code restructuring, in preparation for further work.


* sa/send-email-dedup-some-headers (2018-04-19) 1 commit
  (merged to 'next' on 2018-04-30 at 2a1fd8217e)
 + send-email: avoid duplicate In-Reply-To/References

 When fed input that already has In-Reply-To: and/or References:
 headers and told to add the same information, "git send-email"
 added these headers separately, instead of appending to an existing
 one, which is a violation of the RFC.  This has been corrected.


* sb/submodule-move-nested (2018-03-29) 6 commits
  (merged to 'next' on 2018-04-25 at 86b177433a)
 + submodule: fixup nested submodules after moving the submodule
 + submodule-config: remove submodule_from_cache
 + submodule-config: add repository argument to submodule_from_{name, path}
 + submodule-config: allow submodule_free to handle arbitrary repositories
 + grep: remove "repo" arg from non-supporting funcs
 + submodule.h: drop declaration of connect_work_tree_and_git_dir

 Moving a submodule that itself has submodule in it with "git mv"
 forgot to make necessary adjustment to the nested sub-submodules;
 now the codepath learned to recurse into the submodules.


* sb/worktree-remove-opt-force (2018-04-18) 1 commit
  (merged to 'next' on 2018-04-25 at 0367d52a4b)
 + worktree: accept -f as short for --force for removal

 "git worktree remove" learned that "-f" is a shorthand for
 "--force" option, just like for "git worktree add".


* sg/completion-clear-cached (2018-04-18) 1 commit
  (merged to 'next' on 2018-04-25 at 9178da6c3d)
 + completion: reduce overhead of clearing cached --options

 The completion script (in contrib/) learned to clear cached list of
 command line options upon dot-sourcing it again in a more efficient
 way.


* sg/doc-gc-quote-mismatch-fix (2018-04-18) 1 commit
  (merged to 'next' on 2018-04-25 at bc3d1abf45)
 + docs/git-gc: fix minor rendering issue

 Doc formatting fix.


* so/glossary-ancestor (2018-04-17) 1 commit
  (merged to 'next' on 2018-04-25 at 0a849fee00)
 + glossary: substitute "ancestor" for "direct ancestor" in 'push' description.

 Docfix.


* tb/config-default (2018-04-23) 3 commits
  (merged to 'next' on 2018-04-25 at 59bb6beb2a)
 + builtin/config: introduce `color` type specifier
 + config.c: introduce 'git_config_color' to parse ANSI colors
 + builtin/config: introduce `--default`
 (this branch uses tb/config-type.)

 "git config --get" learned the "--default" option, to help the
 calling script.  Building on top of the tb/config-type topic, the
 "git config" learns "--type=color" type.  Taken together, you can
 do things like "git config --get foo.color --default blue" and get
 the ANSI color sequence for the color given to foo.color variable,
 or "blue" if the variable does not exist.


* tb/config-type (2018-04-19) 2 commits
  (merged to 'next' on 2018-04-25 at fe69e93c82)
 + builtin/config.c: support `--type=<type>` as preferred alias for `--<type>`
 + builtin/config.c: treat type specifiers singularly
 (this branch is used by tb/config-default.)

 The "git config" command uses separate options e.g. "--int",
 "--bool", etc. to specify what type the caller wants the value to
 be interpreted as.  A new "--type=<typename>" option has been
 introduced, which would make it cleaner to define new types.


* tg/demote-stash-save-in-completion (2018-04-20) 2 commits
  (merged to 'next' on 2018-04-30 at 93d0af5375)
 + completion: make stash -p and alias for stash push -p
 + completion: stop showing 'save' for stash by default

 The command line completion (in contrib/) has been taught that "git
 stash save" has been deprecated ("git stash push" is the preferred
 spelling in the new world) and does not offer it as a possible
 completion candidate when "git stash push" can be.


* tq/t1510 (2018-04-17) 1 commit
  (merged to 'next' on 2018-04-25 at 5710c81979)
 + t1510-repo-setup.sh: remove useless mkdir

 Test cleanup.


* tz/doc-git-urls-reference (2018-04-20) 1 commit
  (merged to 'next' on 2018-04-30 at 39926c99fd)
 + doc/clone: update caption for GIT URLS cross-reference

 Doc fix.

--------------------------------------------------
[New Topics]

* hn/sort-ls-remote (2018-05-14) 1 commit
  (merged to 'next' on 2018-05-16 at 64336850f2)
 + t5512: run git fetch inside test

 Hotfix.

 Will merge to 'master'.


* sb/object-store-replace (2018-05-10) 2 commits
  (merged to 'next' on 2018-05-16 at 41bbedcc81)
 + replace-object.c: remove the_repository from prepare_replace_object
 + object.c: free replace map in raw_object_store_clear

 Hotfix.

 Will merge to 'master'.


* sg/t6500-no-redirect-of-stdin (2018-05-09) 1 commit
 - t6050-replace: don't disable stdin for the whole test script

 Test cleanup.

 Will merge to 'next'.


* ao/config-api-doc (2018-05-11) 1 commit
 - doc: fix config API documentation about config_with_options

 Doc update.

 Will merge to 'next'.


* bc/hash-independent-tests (2018-05-16) 28 commits
 - t5300: abstract away SHA-1-specific constants
 - t4208: abstract away SHA-1-specific constants
 - t4045: abstract away SHA-1-specific constants
 - t4042: abstract away SHA-1-specific constants
 - t4205: sort log output in a hash-independent way
 - t/lib-diff-alternative: abstract away SHA-1-specific constants
 - t4030: abstract away SHA-1-specific constants
 - t4029: abstract away SHA-1-specific constants
 - t4029: fix test indentation
 - t4022: abstract away SHA-1-specific constants
 - t4020: abstract away SHA-1-specific constants
 - t4014: abstract away SHA-1-specific constants
 - t4008: abstract away SHA-1-specific constants
 - t4007: abstract away SHA-1-specific constants
 - t3905: abstract away SHA-1-specific constants
 - t3702: abstract away SHA-1-specific constants
 - t3103: abstract away SHA-1-specific constants
 - t2203: abstract away SHA-1-specific constants
 - t: skip pack tests if not using SHA-1
 - t4044: skip test if not using SHA-1
 - t1512: skip test if not using SHA-1
 - t1007: annotate with SHA1 prerequisite
 - t0000: annotate with SHA1 prerequisite
 - t: switch $_x40 to $OID_REGEX
 - t/test-lib: introduce OID_REGEX
 - t: switch $_z40 to $ZERO_OID
 - t/test-lib: introduce ZERO_OID
 - t/test-lib: add an SHA1 prerequisite

 Many tests hardcode the raw object names, which would change once
 we migrate away from SHA-1.  While some of them must test against
 exact object names, most of them do not have to use hardcoded
 constants in the test.  The latter kind of tests have been updated
 to test the moral equivalent of the original without hardcoding the
 actual object names.

 Will merge to 'next'.


* bp/status-rename-config (2018-05-13) 1 commit
 - add status config and command line options for rename detection
 (this branch uses em/status-rename-config.)

 "git status" learned to honor a new status.renames configuration to
 skip rename detection, which could be useful for those who want to
 do so without disabling the default rename detection done by the
 "git diff" command.

 Will merge to 'next'.


* bw/refspec-api (2018-05-16) 35 commits
 - submodule: convert push_unpushed_submodules to take a struct refspec
 - remote: convert check_push_refs to take a struct refspec
 - remote: convert match_push_refs to take a struct refspec
 - http-push: store refspecs in a struct refspec
 - transport: remove transport_verify_remote_names
 - send-pack: store refspecs in a struct refspec
 - transport: convert transport_push to take a struct refspec
 - push: convert to use struct refspec
 - push: check for errors earlier
 - remote: convert match_explicit_refs to take a struct refspec
 - remote: convert get_ref_match to take a struct refspec
 - remote: convert query_refspecs to take a struct refspec
 - remote: convert apply_refspecs to take a struct refspec
 - remote: convert get_stale_heads to take a struct refspec
 - fetch: convert prune_refs to take a struct refspec
 - fetch: convert get_ref_map to take a struct refspec
 - fetch: convert do_fetch to take a struct refspec
 - refspec: remove the deprecated functions
 - fetch: convert refmap to use struct refspec
 - fetch: convert fetch_one to use struct refspec
 - transport-helper: convert to use struct refspec
 - remote: convert fetch refspecs to struct refspec
 - remote: convert push refspecs to struct refspec
 - fast-export: convert to use struct refspec
 - clone: convert cmd_clone to use refspec_item_init
 - remote: convert match_push_refs to use struct refspec
 - remote: convert check_push_refs to use struct refspec
 - transport: convert transport_push to use struct refspec
 - pull: convert get_tracking_branch to use refspec_item_init
 - submodule--helper: convert push_check to use struct refspec
 - refspec: convert valid_fetch_refspec to use parse_refspec
 - refspec: introduce struct refspec
 - refspec: rename struct refspec to struct refspec_item
 - refspec: factor out parsing a single refspec
 - refspec: move refspec parsing logic into its own file

 An API update for handling of refspecs used by fetch & push
 codepath.

 Will merge to 'next'.


* ds/commit-graph-lockfile-fix (2018-05-11) 1 commit
 - commit-graph: fix UX issue when .lock file exists
 (this branch uses ds/generation-numbers and ds/lazy-load-trees.)

 Update to ds/generation-numbers topic.


* jk/apply-p-doc (2018-05-11) 1 commit
 - apply: clarify "-p" documentation

 Doc update.

 Will merge to 'next'.


* jk/unavailable-can-be-missing (2018-05-13) 4 commits
 - mark_parents_uninteresting(): avoid most allocation
 - mark_parents_uninteresting(): replace list with stack
 - mark_parents_uninteresting(): drop missing object check
 - mark_tree_contents_uninteresting(): drop missing object check

 Code clean-up to turn history traversal more robust in a
 semi-corrupt repository.

 Will merge to 'next'.


* lm/credential-netrc (2018-05-14) 2 commits
 - git-credential-netrc: accept gpg option
 - git-credential-netrc: adapt to test framework for git

 Update credential-netrc helper (in contrib/) to allow customizing
 the GPG used to decrypt the encrypted .netrc file.

 Will merge to 'next'.


* ma/create-pseudoref-with-null-old-oid (2018-05-13) 3 commits
 - refs: handle zero oid for pseudorefs
 - t1400: add tests around adding/deleting pseudorefs
 - refs.c: refer to "object ID", not "sha1", in error messages

 "git update-ref A B" is supposed to ensure that ref A does not yet
 exist when B is a NULL OID, but this check was not done correctly
 for pseudo-refs outside refs/ hierarchy, e.g. MERGE_HEAD.

 Will merge to 'next'.


* ma/lockfile-cleanup (2018-05-10) 5 commits
 - lock_file: move static locks into functions
 - lock_file: make function-local locks non-static
 - refs.c: do not die if locking fails in `delete_pseudoref()`
 - refs.c: do not die if locking fails in `write_pseudoref()`
 - t/helper/test-write-cache: clean up lock-handling

 Code clean-up to adjust to a more recent lockfile API convention that
 allows lockfile instances kept on the stack.

 Will merge to 'next'.


* nd/commit-util-to-slab (2018-05-14) 14 commits
 - commit.h: delete 'util' field in struct commit
 - merge: use commit-slab in merge remote desc instead of commit->util
 - log: use commit-slab in prepare_bases() instead of commit->util
 - show-branch: use commit-slab for commit-name instead of commit->util
 - name-rev: use commit-slab for rev-name instead of commit->util
 - bisect.c: use commit-slab for commit weight instead of commit->util
 - revision.c: use commit-slab for show_source
 - sequencer.c: use commit-slab to associate todo items to commits
 - sequencer.c: use commit-slab to mark seen commits
 - shallow.c: use commit-slab for commit depth instead of commit->util
 - describe: use commit-slab for commit names instead of commit->util
 - blame: use commit-slab for blame suspects instead of commit->util
 - commit-slab: support shared commit-slab
 - commit-slab.h: code split

 The in-core "commit" object had an all-purpose "void *util" field,
 which was tricky to use especially in library-ish part of the
 code.  All of the existing uses of the field has been migrated to a
 more dedicated "commit-slab" mechanism and the field is eliminated.

 Will merge to 'next'.


* nd/diff-apply-ita (2018-05-14) 2 commits
 - apply: add --intent-to-add
 - diff: turn --ita-invisible-in-index on by default

 "git diff" compares the index and the working tree.  For paths
 added with intent-to-add bit, the command shows the full contents
 of them as added, but the paths themselves were not marked as new
 files.  They are now shown as new by default.

 "git apply" learned the "--intent-to-add" option so that an
 otherwise working-tree-only application of a patch will add new
 paths to the index marked with the "intent-to-add" bit.

 Will merge to and cook in 'next'.


* nd/pack-format-doc (2018-05-13) 1 commit
 - pack-format.txt: more details on pack file format

 Doc update.

 Will merge to 'next'.


* nd/pack-struct-commit (2018-05-13) 1 commit
 - commit.h: rearrange 'index' to shrink struct commit

 Memory optimization.

 Will merge to 'next'.


* nd/repo-clear-keep-the-index (2018-05-10) 1 commit
 - repository: fix free problem with repo_clear(the_repository)

 the_repository->index is not a allocated piece of memory but
 repo_clear() indiscriminately attempted to free(3) it, which has
 been corrected.

 Will merge to 'next'.


* nd/term-columns (2018-05-13) 2 commits
 - column: fix off-by-one default width
 - pager: set COLUMNS to term_columns()

 The code did not propagate the terminal width to subprocesses via
 COLUMNS environment variable, which it now does.  This caused
 trouble to "git column" helper subprocess when "git tag --column=row"
 tried to list the existing tags on a display with non-default width.

 Will merge to 'next'.


* nd/travis-gcc-7 (2018-05-14) 1 commit
 - travis-ci: run gcc-7 on linux-gcc jobs

 Developer support.  Use newer GCC on one of the builds done at
 TravisCI.org to get more warnings and errors diagnosed.

 Will merge to 'next'.


* rs/no-null-ptr-arith-in-fast-export (2018-05-10) 1 commit
 - fast-export: avoid NULL pointer arithmetic

 Code clean-up to avoid non-standard-conformant pointer arithmetic.

 Will merge to 'next'.


* sb/grep-die-on-unreadable-index (2018-05-16) 1 commit
 - grep: handle corrupt index files early


* sb/object-store-grafts (2018-05-16) 19 commits
 - commit: allow lookup_commit_graft to handle arbitrary repositories
 - commit: allow prepare_commit_graft to handle arbitrary repositories
 - shallow: migrate shallow information into the object parser
 - path.c: migrate git_path_ to take a repository argument
 - cache: convert get_graft_file to handle arbitrary repositories
 - commit: convert read_graft_file to handle arbitrary repositories
 - commit: convert register_commit_graft to handle arbitrary repositories
 - commit: convert commit_graft_pos() to handle arbitrary repositories
 - shallow: add repository argument to is_repository_shallow
 - shallow: add repository argument to check_shallow_file_for_update
 - shallow: add repository argument to register_shallow
 - shallow: add repository argument to set_alternate_shallow_file
 - commit: add repository argument to lookup_commit_graft
 - commit: add repository argument to prepare_commit_graft
 - commit: add repository argument to read_graft_file
 - commit: add repository argument to register_commit_graft
 - commit: add repository argument to commit_graft_pos
 - object: move grafts to object parser
 - object-store: move object access functions to object-store.h
 (this branch uses sb/object-store-alloc and sb/oid-object-info.)


* sb/submodule-merge-in-merge-recursive (2018-05-16) 3 commits
 - merge-recursive: give notice when submodule commit gets fast-forwarded
 - merge-recursive: i18n submodule merge output and respect verbosity
 - submodule.c: move submodule merging to merge-recursive.c

 By code restructuring of submodule merge in merge-recursive,
 informational messages from the codepath are now given using the
 same mechanism as other output, and honor the merge.verbosity
 configuration.  The code also learned to give a few new messages
 when a submodule three-way merge resolves cleanly when one side
 records a descendant of the commit chosen by the other side.

 Will merge to 'next'.


* sb/submodule-update-try-harder (2018-05-16) 1 commit
 - git-submodule.sh: try harder to fetch a submodule

 "git submodule update" attempts two different kinds of "git fetch"
 against the upstream repository to grab a commit bound at the
 submodule's path, but it incorrectly gave up if the first kind
 (i.e. a normal fetch) failed, making the second "last resort" one
 (i.e. fetching an exact commit object by object name) ineffective.
 This has been corrected.

 Will merge to 'next'.


* sg/t5310-jgit-bitmap-test (2018-05-11) 1 commit
 - t5310-pack-bitmaps: make JGit tests work with GIT_TEST_SPLIT_INDEX

 Test update.

 Will merge to 'next'.


* sg/t5516-fixes (2018-05-11) 2 commits
 - t5516-fetch-push: fix broken &&-chain
 - t5516-fetch-push: fix 'push with dry-run' test

 Test fixes.

 Will merge to 'next'.


* sg/t7005-spaces-in-filenames-cleanup (2018-05-15) 1 commit
 - t7005-editor: get rid of the SPACES_IN_FILENAMES prereq

 Test update.

 Will merge to 'next'.


* tb/grep-only-matching (2018-05-14) 2 commits
 - builtin/grep.c: teach '-o', '--only-matching' to 'git-grep'
 - grep.c: extract show_line_header()
 (this branch uses tb/grep-column.)

--------------------------------------------------
[Stalled]

* jm/cache-entry-from-mem-pool (2018-05-02) 5 commits
 - block alloc: add validations around cache_entry lifecyle
 - block alloc: allocate cache entries from mem_pool
 - mem-pool: fill out functionality
 - block alloc: add lifecycle APIs for cache_entry structs
 - read-cache: teach refresh_cache_entry() to take istate

 For a large tree, the index needs to hold many cache entries
 allocated on heap.  These cache entries are now allocated out of a
 dedicated memory pool to amortize malloc(3) overhead.

 Needs review.
 Is the "caller always knows which pool an entry came from and calls
 the right kind of free" a feasible approach?
 Oh, another thing, there is "lifecyle" typo in the title.


* ab/fetch-tags-noclobber (2018-05-16) 9 commits
 - fixup! push tests: assert re-pushing annotated tags
 - fetch: stop clobbering existing tags without --force
 - fetch tests: add a test clobbering tag behavior
 - fetch tests: correct a comment "remove it" -> "remove them"
 - push doc: correct lies about how push refspecs work
 - push tests: assert re-pushing annotated tags
 - push tests: add more testing for forced tag pushing
 - push tests: fix logic error in "push" test assertion
 - push tests: remove redundant 'git push' invocation

 Expecting a reboot of the discussion to take it to some conclusion
 and then a reroll.
 cf. <f3b891c3-381f-de42-51d8-24fdfbca91d2@gmail.com>
 cf. <xmqq603yn50l.fsf@gitster-ct.c.googlers.com>
 cf. <xmqqzi1alodz.fsf@gitster-ct.c.googlers.com>
 cf. <xmqqvabylnbi.fsf@gitster-ct.c.googlers.com>


* pw/add-p-select (2018-03-16) 3 commits
 - add -p: optimize line selection for short hunks
 - add -p: allow line selection to be inverted
 - add -p: select individual hunk lines

 "git add -p" interactive interface learned to let users choose
 individual added/removed lines to be used in the operation, instead
 of accepting or rejecting a whole hunk.

 Expecting a reroll to reignite the discussion.
 cf. <9895c7b7-eac4-28c1-90c6-443acd1131b7@talktalk.net>


* jh/json-writer (2018-03-28) 1 commit
 - json_writer: new routines to create data in JSON format

 Preparatory code to later add json output for unspecified telemetry
 data.

 We do not add random code that does not have real users to our
 codebase, so let's have it wait until such a real code materializes
 before too long.


* hn/bisect-first-parent (2018-04-21) 1 commit
 - bisect: create 'bisect_flags' parameter in find_bisection()

 Preliminary code update to allow passing more flags down the
 bisection codepath in the future.

 We do not add random code that does not have real users to our
 codebase, so let's have it wait until such a real code materializes
 before too long.


* is/parsing-line-range (2018-04-27) 2 commits
 . log: prevent error if line range ends past end of file
 . blame: prevent error if range ends past end of file

 Parsing of -L[<N>][,[<M>]] parameters "git blame" and "git log"
 take has been tweaked.

 Seems to break a few tests.


* av/fsmonitor-updates (2018-01-04) 6 commits
 - fsmonitor: use fsmonitor data in `git diff`
 - fsmonitor: remove debugging lines from t/t7519-status-fsmonitor.sh
 - fsmonitor: make output of test-dump-fsmonitor more concise
 - fsmonitor: update helper tool, now that flags are filled later
 - fsmonitor: stop inline'ing mark_fsmonitor_valid / _invalid
 - dir.c: update comments to match argument name

 Code clean-up on fsmonitor integration, plus optional utilization
 of the fsmonitor data in diff-files.

 Waiting for an update.
 cf. <alpine.DEB.2.21.1.1801042335130.32@MININT-6BKU6QN.europe.corp.microsoft.com>


* pb/bisect-helper-2 (2017-10-28) 8 commits
 - t6030: make various test to pass GETTEXT_POISON tests
 - bisect--helper: `bisect_start` shell function partially in C
 - bisect--helper: `get_terms` & `bisect_terms` shell function in C
 - bisect--helper: `bisect_next_check` shell function in C
 - bisect--helper: `check_and_set_terms` shell function in C
 - wrapper: move is_empty_file() and rename it as is_empty_or_missing_file()
 - bisect--helper: `bisect_write` shell function in C
 - bisect--helper: `bisect_reset` shell function in C

 Expecting a reroll.
 cf. <0102015f5e5ee171-f30f4868-886f-47a1-a4e4-b4936afc545d-000000@eu-west-1.amazonses.com>


* mk/http-backend-content-length (2017-11-27) 4 commits
 - SQUASH???
 - t5560-http-backend-noserver.sh: add CONTENT_LENGTH cases
 - SQUASH???
 - http-backend: respect CONTENT_LENGTH as specified by rfc3875

 The http-backend (used for smart-http transport) used to slurp the
 whole input until EOF, without paying attention to CONTENT_LENGTH
 that is supplied in the environment and instead expecting the Web
 server to close the input stream.  This has been fixed.

 Expecting a reroll.
 Suggested fixes to be used when rerolling is queued, but I'd
 prefer _not_ squashing them myself.

 Also, it may be too complex solution for the problem.
 cf. <20171204171308.GA13332@sigill.intra.peff.net>


* jk/drop-ancient-curl (2017-08-09) 5 commits
 - http: #error on too-old curl
 - curl: remove ifdef'd code never used with curl >=7.19.4
 - http: drop support for curl < 7.19.4
 - http: drop support for curl < 7.16.0
 - http: drop support for curl < 7.11.1

 Some code in http.c that has bitrot is being removed.

 Expecting a reroll.


* mk/use-size-t-in-zlib (2017-08-10) 1 commit
 . zlib.c: use size_t for size

 The wrapper to call into zlib followed our long tradition to use
 "unsigned long" for sizes of regions in memory, which have been
 updated to use "size_t".

 Needs resurrecting by making sure the fix is good and still applies
 (or adjusted to today's codebase).

--------------------------------------------------
[Cooking]

* ld/p4-unshelve (2018-05-16) 1 commit
 - git-p4: add unshelve command

 "git p4" learned to "unshelve" shelved commit from P4.

 Will merge to 'next'.


* pc/submodule-helper-foreach (2018-05-11) 4 commits
 - submodule: port submodule subcommand 'foreach' from shell to C
 - submodule foreach: document variable '$displaypath'
 - submodule foreach: document '$sm_path' instead of '$path'
 - submodule foreach: correct '$path' in nested submodules from a subdirectory

 The bulk of "git submodule foreach" has been rewritten in C.

 Will merge to and cook in 'next'.


* tb/test-apfs-utf8-normalization (2018-05-02) 1 commit
  (merged to 'next' on 2018-05-16 at feabe72b42)
 + test: correct detection of UTF8_NFD_TO_NFC for APFS

 A test to see if the filesystem normalizes UTF-8 filename has been
 updated to check what we need to know in a more direct way, i.e. a
 path created in NFC form can be accessed with NFD form (or vice
 versa) to cope with APFS as well as HFS.

 Will merge to 'master'.


* ab/get-short-oid (2018-05-11) 5 commits
 - get_short_oid: sort ambiguous objects by type, then SHA-1
 - sha1-name.c: move around the collect_ambiguous() function
 - git-p4: change "commitish" typo to "committish"
 - sha1-array.h: align function arguments
 - sha1-name.c: remove stray newline

 When a short hexadecimal string is used to name an object but there
 are multiple objects that share the string as the prefix of their
 names, the code lists these ambiguous candidates in a help message.
 These object names are now sorted according to their types for
 easier eyeballing.

 Will merge to 'next'.


* ah/misc-doc-updates (2018-05-06) 7 commits
  (merged to 'next' on 2018-05-16 at e2e3b68a66)
 + doc: normalize [--options] to [options] in git-diff
 + doc: add note about shell quoting to revision.txt
 + git-svn: remove ''--add-author-from' for 'commit-diff'
 + doc: add '-d' and '-o' for 'git push'
 + doc: clarify ignore rules for git ls-files
 + doc: align 'diff --no-index' in text and synopsis
 + doc: improve formatting in githooks.txt

 Misc doc fixes.

 Will merge to 'master'.


* bc/format-patch-cover-no-attach (2018-05-02) 1 commit
  (merged to 'next' on 2018-05-16 at fa1ffeb3fe)
 + format-patch: make cover letters always text/plain

 "git format-patch --cover --attach" created a broken MIME multipart
 message for the cover letter, which has been fixed by keeping the
 cover letter as plain text file.

 Will merge to 'master'.


* bp/test-drop-caches (2018-05-04) 1 commit
  (merged to 'next' on 2018-05-16 at 0e40ab2408)
 + test-drop-caches: simplify delay loading of NtSetSystemInformation

 Code simplification.

 Will merge to 'master'.


* cc/perf-bisect (2018-05-06) 1 commit
  (merged to 'next' on 2018-05-16 at 5a078a2fdf)
 + perf/bisect_run_script: disable codespeed

 Performance test updates.

 Will merge to 'master'.


* cf/submodule-progress-dissociate (2018-05-04) 3 commits
 - submodule: add --dissociate option to add/update commands
 - submodule: add --progress option to add command
 - submodule: clean up subsititions in script

 "git submodule update" and "git submodule add" supported the
 "--reference" option to borrow objects from a neighbouring local
 repository like "git clone" does, but lacked the more recent
 invention "--dissociate".  Also "git submodule add" has been taught
 to take the "--progress" option.

 Will merge to 'next'..
 "subsititions" needs to be typofixed ;-)
 


* dd/send-email-reedit (2018-05-06) 1 commit
 - git-send-email: allow re-editing of message

 "git send-email" can sometimes offer confirmation dialog "Send this
 email?" with choices 'Yes', 'No', 'Quit', and 'All'.  A new action
 'Edit' has been added to this dialog's choice.

 Will merge to 'next'.


* em/status-rename-config (2018-05-06) 1 commit
  (merged to 'next' on 2018-05-16 at 33c1cc093c)
 + wt-status: use settings from git_diff_ui_config
 (this branch is used by bp/status-rename-config.)

 "git status" learned to pay attention to UI related diff
 configuration variables such as diff.renames.

 Will merge to 'master'.


* js/branch-diff (2018-05-16) 19 commits
 - fixup! Add a function to solve least-cost assignment problems
 - completion: support branch-diff
 - branch-diff: add a man page
 - branch-diff --dual-color: work around bogus white-space warning
 - branch-diff: offer to dual-color the diffs
 - diff: add an internal option to dual-color diffs of diffs
 - color: provide inverted colors, too
 - branch-diff: use color for the commit pairs
 - branch-diff: add tests
 - branch-diff: do not show "function names" in hunk headers
 - branch-diff: adjust the output of the commit pairs
 - branch-diff: suppress the diff headers
 - branch-diff: indent the diffs just like tbdiff
 - branch-diff: right-trim commit messages
 - branch-diff: also show the diff between patches
 - branch-diff: improve the order of the shown commits
 - branch-diff: first rudimentary implementation
 - Add a new builtin: branch-diff
 - Add a function to solve least-cost assignment problems

 "git tbdiff" that lets us compare individual patches in two
 iterations of a topic has been rewritten and made into a built-in
 command.

 Expecting a reroll.
 cf. <nycvar.QRO.7.76.6.1805052351560.77@tvgsbejvaqbjf.bet>


* js/sequencer-and-root-commits (2018-05-06) 6 commits
 - rebase --rebase-merges: root commits can be cousins, too
 - rebase --rebase-merges: a "merge" into a new root is a fast-forward
 - sequencer: allow introducing new root commits
 - rebase -i --root: let the sequencer handle even the initial part
 - sequencer: learn about the special "fake root commit" handling
 - sequencer: extract helper to update active_cache_tree
 (this branch uses js/rebase-recreate-merge.)

 The implementation of "git rebase -i --root" has been updated to use
 the sequencer machinery more.

 Will merge to 'next'.


* js/use-bug-macro (2018-05-10) 5 commits
 - BUG_exit_code: fix sparse "symbol not declared" warning
 - Convert remaining die*(BUG) messages
 - Replace all die("BUG: ...") calls by BUG() ones
 - run-command: use BUG() to report bugs, not die()
 - test-tool: help verifying BUG() code paths

 Developer support update, by using BUG() macro instead of die() to
 mark codepaths that should not happen more clearly.

 Will merge to 'next'.
 Further updates can come on top later.
 cf. <20180507090109.GA367@sigill.intra.peff.net>


* jt/partial-clone-proto-v2 (2018-05-06) 4 commits
 - {fetch,upload}-pack: support filter in protocol v2
 - upload-pack: read config when serving protocol v2
 - upload-pack: fix error message typo
 - Merge branch 'bw/protocol-v2' into jt/partial-clone-proto-v2

 Transfer protocol v2 learned to support the partial clone.

 Will merge to 'next'.


* ma/doc-expand-tabs (2018-05-02) 1 commit
 - revisions.txt: expand tabs to spaces in diagram

 Fix one instance of asciidoctor's misformatting by expanding a tab
 into spaces in a literal block.

 Will discard.  This approach is less maintainable than the approach
 taken by bc/asciidoctor-tab-width topic.


* nd/completion-aliasfiletype-typofix (2018-05-06) 1 commit
  (merged to 'next' on 2018-05-16 at 045e4ac190)
 + completion: fix misspelled config key aliasesfiletype

 Typofix.

 Will merge to 'master'.


* nd/doc-header (2018-05-02) 1 commit
  (merged to 'next' on 2018-05-16 at 0599eb3ec9)
 + doc: keep first level section header in upper case

 Doc formatting fix.

 Will merge to 'master'.


* nd/pack-unreachable-objects-doc (2018-05-06) 1 commit
  (merged to 'next' on 2018-05-16 at c4bf977564)
 + pack-objects: validation and documentation about unreachable options

 Doc update.

 Will merge to 'master'.


* sb/object-store-alloc (2018-05-16) 13 commits
 - alloc: allow arbitrary repositories for alloc functions
 - object: allow create_object to handle arbitrary repositories
 - object: allow grow_object_hash to handle arbitrary repositories
 - alloc: add repository argument to alloc_commit_index
 - alloc: add repository argument to alloc_report
 - alloc: add repository argument to alloc_object_node
 - alloc: add repository argument to alloc_tag_node
 - alloc: add repository argument to alloc_commit_node
 - alloc: add repository argument to alloc_tree_node
 - alloc: add repository argument to alloc_blob_node
 - object: add repository argument to grow_object_hash
 - object: add repository argument to create_object
 - repository: introduce parsed objects field
 (this branch is used by sb/object-store-grafts; uses sb/oid-object-info.)

 The conversion to pass "the_repository" and then "a_repository"
 throughout the object access API continues.


* tb/grep-column (2018-05-14) 7 commits
 - contrib/git-jump/git-jump: jump to match column in addition to line
 - grep.c: add configuration variables to show matched option
 - builtin/grep.c: add '--column' option to 'git-grep(1)'
 - grep.c: display column number of first match
 - grep.[ch]: extend grep_opt to allow showing matched column
 - grep.c: expose matched column in match_line()
 - Documentation/config.txt: camel-case lineNumber for consistency
 (this branch is used by tb/grep-only-matching.)

 "git grep" learned the "--column" option that gives not just the
 line number but the column number of the hit.


* bc/asciidoctor-tab-width (2018-05-07) 2 commits
  (merged to 'next' on 2018-05-16 at be2a42c473)
 + Documentation: render revisions correctly under Asciidoctor
 + Documentation: use 8-space tabs with Asciidoctor

 Asciidoctor gives a reasonable imitation for AsciiDoc, but does not
 render illustration in a literal block correctly when indented with
 HT by default. The problem is fixed by forcing 8-space tabs.

 Will merge to 'master'.


* bc/mailmap-self (2018-05-08) 1 commit
  (merged to 'next' on 2018-05-16 at a009c64bd2)
 + mailmap: update brian m. carlson's email address

 Will merge to 'master'.


* cc/perf-aggregate-unknown-option (2018-04-26) 1 commit
  (merged to 'next' on 2018-05-08 at db7d2870f8)
 + perf/aggregate: use Getopt::Long for option parsing

 Perf-test helper updates.

 Will merge to 'master'.


* ab/perl-python-attrs (2018-04-27) 3 commits
  (merged to 'next' on 2018-05-08 at b440e9bbb9)
 + .gitattributes: add a diff driver for Python
 + .gitattributes: use the "perl" differ for Perl
 + .gitattributes: add *.pl extension for Perl

 We learned that our source files with ".pl" and ".py" extensions
 are Perl and Python files respectively and changes to them are
 better viewed as such with appropriate diff drivers.

 Will merge to 'master'.


* js/test-unset-prereq (2018-04-30) 1 commit
  (merged to 'next' on 2018-05-08 at 3aecbf25a3)
 + tests: introduce test_unset_prereq, for debugging

 Test debugging aid.

 Will merge to 'master'.
 cf. <20180507115950.3887-1-szeder.dev@gmail.com>


* fg/completion-external (2018-05-07) 1 commit
  (merged to 'next' on 2018-05-16 at 5d83f92caf)
 + completion: load completion file for external subcommand

 The command line completion mechanism (in contrib/) learned to load
 custom completion file for "git $command" where $command is a
 custom "git-$command" that the end user has on the $PATH when using
 newer version of bash.

 Will merge to 'master'.
 cf. <CAM0VKjkTu+OkLM3gvX73mWugxArCVmqRBmWGHiKuLiLRNkkNow@mail.gmail.com>


* js/deprecate-grafts (2018-04-30) 12 commits
  (merged to 'next' on 2018-05-08 at 1d7b31d179)
 + Remove obsolete script to convert grafts to replace refs
 + technical/shallow: describe why shallow cannot use replace refs
 + technical/shallow: stop referring to grafts
 + filter-branch: stop suggesting to use grafts
 + Deprecate support for .git/info/grafts
 + Add a test for `git replace --convert-graft-file`
 + replace: introduce --convert-graft-file
 + replace: prepare create_graft() for converting graft files wholesale
 + replace: "libify" create_graft() and callees
 + replace: avoid using die() to indicate a bug
 + commit: Let the callback of for_each_mergetag return on error
 + argv_array: offer to split a string by whitespace

 The functionality of "$GIT_DIR/info/grafts" has been superseded by
 the "refs/replace/" mechanism for some time now, but the internal
 code had support for it in many places, which has been cleaned up
 in order to drop support of the "grafts" mechanism.

 Will merge to 'master'.


* js/rebase-i-clean-msg-after-fixup-continue (2018-05-02) 4 commits
  (merged to 'next' on 2018-05-08 at 7e684c153d)
 + rebase --skip: clean up commit message after a failed fixup/squash
 + sequencer: always commit without editing when asked for
 + rebase -i: Handle "combination of <n> commits" with GETTEXT_POISON
 + rebase -i: demonstrate bugs with fixup!/squash! commit messages

 "git rebase -i" sometimes left intermediate "# This is a
 combination of N commits" message meant for the human consumption
 inside an editor in the final result in certain corner cases, which
 has been fixed.

 Will merge to 'master'.


* bw/server-options (2018-04-24) 4 commits
  (merged to 'next' on 2018-05-08 at a18ce56f3c)
 + fetch: send server options when using protocol v2
 + ls-remote: send server options when using protocol v2
 + serve: introduce the server-option capability
 + Merge branch 'bw/protocol-v2' into HEAD

 The transport protocol v2 is getting updated further.

 Will merge to 'master'.


* bc/object-id (2018-05-02) 42 commits
 - merge-one-file: compute empty blob object ID
 - add--interactive: compute the empty tree value
 - Update shell scripts to compute empty tree object ID
 - sha1_file: only expose empty object constants through git_hash_algo
 - dir: use the_hash_algo for empty blob object ID
 - sequencer: use the_hash_algo for empty tree object ID
 - cache-tree: use is_empty_tree_oid
 - sha1_file: convert cached object code to struct object_id
 - builtin/reset: convert use of EMPTY_TREE_SHA1_BIN
 - builtin/receive-pack: convert one use of EMPTY_TREE_SHA1_HEX
 - wt-status: convert two uses of EMPTY_TREE_SHA1_HEX
 - submodule: convert several uses of EMPTY_TREE_SHA1_HEX
 - sequencer: convert one use of EMPTY_TREE_SHA1_HEX
 - merge: convert empty tree constant to the_hash_algo
 - builtin/merge: switch tree functions to use object_id
 - builtin/am: convert uses of EMPTY_TREE_SHA1_BIN to the_hash_algo
 - sha1-file: add functions for hex empty tree and blob OIDs
 - builtin/receive-pack: avoid hard-coded constants for push certs
 - diff: specify abbreviation size in terms of the_hash_algo
 - upload-pack: replace use of several hard-coded constants
 - revision: replace use of hard-coded constants
 - http: eliminate hard-coded constants
 - dir: convert struct untracked_cache_dir to object_id
 - commit: convert uses of get_sha1_hex to get_oid_hex
 - index-pack: abstract away hash function constant
 - pack-redundant: convert linked lists to use struct object_id
 - Update struct index_state to use struct object_id
 - split-index: convert struct split_index to object_id
 - submodule-config: convert structures to object_id
 - fsck: convert static functions to struct object_id
 - tree-walk: convert get_tree_entry_follow_symlinks to object_id
 - tree-walk: avoid hard-coded 20 constant
 - pack-redundant: abstract away hash algorithm
 - pack-objects: abstract away hash algorithm
 - packfile: abstract away hash constant values
 - packfile: convert find_pack_entry to object_id
 - sha1-file: convert freshen functions to object_id
 - packfile: convert has_sha1_pack to object_id
 - packfile: remove unused member from struct pack_entry
 - Remove unused member in struct object_context
 - server-info: remove unused members from struct pack_info
 - cache: add a function to read an object ID from a buffer

 Conversion from uchar[20] to struct object_id continues.

 Will merge to 'next'.


* sb/oid-object-info (2018-04-26) 9 commits
  (merged to 'next' on 2018-05-08 at f3c08f298e)
 + cache.h: allow oid_object_info to handle arbitrary repositories
 + packfile: add repository argument to cache_or_unpack_entry
 + packfile: add repository argument to unpack_entry
 + packfile: add repository argument to read_object
 + packfile: add repository argument to packed_object_info
 + packfile: add repository argument to packed_to_object_type
 + packfile: add repository argument to retry_bad_packed_offset
 + cache.h: add repository argument to oid_object_info
 + cache.h: add repository argument to oid_object_info_extended
 (this branch is used by sb/object-store-alloc and sb/object-store-grafts.)

 The codepath around object-info API has been taught to take the
 repository object (which in turn tells the API which object store
 the objects are to be located).

 Will merge to 'master'.


* en/unpack-trees-split-index-fix (2018-05-02) 1 commit
  (merged to 'next' on 2018-05-16 at 1adff065b2)
 + unpack_trees: fix breakage when o->src_index != o->dst_index

 The split-index feature had a long-standing and dormant bug in
 certain use of the in-core merge machinery, which has been fixed.

 Will merge to 'master'.
 cf. <CACsJy8CeDhrT9GXe9q5gqsAeq_sSQ8jyF2nMOFxzjwKtE31oPQ@mail.gmail.com>


* bp/merge-rename-config (2018-05-08) 3 commits
 - merge: pass aggressive when rename detection is turned off
 - merge: add merge.renames config setting
 - merge: update documentation for {merge,diff}.renameLimit
 (this branch uses en/rename-directory-detection-reboot.)

 With merge.renames configuration set to false, the recursive merge
 strategy can be told not to spend cycles trying to find renamed
 paths and merge them accordingly.

 Will merge to 'next'.


* en/git-debugger (2018-04-25) 1 commit
  (merged to 'next' on 2018-05-08 at 73369cd1e5)
 + Make running git under other debugger-like programs easy

 Dev support.

 Will merge to 'master'.


* js/no-pager-shorthand (2018-05-04) 1 commit
  (merged to 'next' on 2018-05-08 at 10e6031dd1)
 + git: add -P as a short option for --no-pager

 "git --no-pager cmd" did not have short-and-sweet single letter
 option. Now it does.

 Will merge to 'master'.


* sb/diff-color-move-more (2018-04-25) 7 commits
 - diff.c: add --color-moved-ignore-space-delta option
 - diff.c: decouple white space treatment from move detection algorithm
 - diff.c: add a blocks mode for moved code detection
 - diff.c: adjust hash function signature to match hashmap expectation
 - diff.c: do not pass diff options as keydata to hashmap
 - xdiff/xdiffi.c: remove unneeded function declarations
 - xdiff/xdiff.h: remove unused flags

 "git diff --color-moved" feature has further been tweaked.

 Will merge to 'next'.


* ds/generation-numbers (2018-05-02) 11 commits
 - commit-graph.txt: update design document
 - merge: check config before loading commits
 - commit: use generation number in remove_redundant()
 - commit: add short-circuit to paint_down_to_common()
 - commit: use generation numbers for in_merge_bases()
 - ref-filter: use generation number for --contains
 - commit-graph: always load commit-graph information
 - commit: use generations in paint_down_to_common()
 - commit-graph: compute generation numbers
 - commit: add generation number to struct commmit
 - ref-filter: fix outdated comment on in_commit_list
 (this branch is used by ds/commit-graph-lockfile-fix; uses ds/lazy-load-trees.)

 A recently added "commit-graph" datafile has learned to store
 pre-computed generation numbers to speed up the decisions to stop
 history traversal.

 Is this ready for 'next' with ds/commit-graph-lockfile-fix?
 A commit with triple 'm' needs its title amended, though.


* en/rename-directory-detection-reboot (2018-05-08) 36 commits
  (merged to 'next' on 2018-05-08 at be350ebc17)
 + merge-recursive: fix check for skipability of working tree updates
 + merge-recursive: make "Auto-merging" comment show for other merges
 + merge-recursive: fix remainder of was_dirty() to use original index
 + merge-recursive: fix was_tracked() to quit lying with some renamed paths
 + t6046: testcases checking whether updates can be skipped in a merge
 + merge-recursive: avoid triggering add_cacheinfo error with dirty mod
 + merge-recursive: move more is_dirty handling to merge_content
 + merge-recursive: improve add_cacheinfo error handling
 + merge-recursive: avoid spurious rename/rename conflict from dir renames
 + directory rename detection: new testcases showcasing a pair of bugs
 + merge-recursive: fix remaining directory rename + dirty overwrite cases
 + merge-recursive: fix overwriting dirty files involved in renames
 + merge-recursive: avoid clobbering untracked files with directory renames
 + merge-recursive: apply necessary modifications for directory renames
 + merge-recursive: when comparing files, don't include trees
 + merge-recursive: check for file level conflicts then get new name
 + merge-recursive: add computation of collisions due to dir rename & merging
 + merge-recursive: check for directory level conflicts
 + merge-recursive: add get_directory_renames()
 + merge-recursive: make a helper function for cleanup for handle_renames
 + merge-recursive: split out code for determining diff_filepairs
 + merge-recursive: make !o->detect_rename codepath more obvious
 + merge-recursive: fix leaks of allocated renames and diff_filepairs
 + merge-recursive: introduce new functions to handle rename logic
 + merge-recursive: move the get_renames() function
 + directory rename detection: tests for handling overwriting dirty files
 + directory rename detection: tests for handling overwriting untracked files
 + directory rename detection: miscellaneous testcases to complete coverage
 + directory rename detection: testcases exploring possibly suboptimal merges
 + directory rename detection: more involved edge/corner testcases
 + directory rename detection: testcases checking which side did the rename
 + directory rename detection: files/directories in the way of some renames
 + directory rename detection: partially renamed directory testcase/discussion
 + directory rename detection: testcases to avoid taking detection too far
 + directory rename detection: directory splitting testcases
 + directory rename detection: basic testcases
 (this branch is used by bp/merge-rename-config.)

 Rename detection logic in "diff" family that is used in "merge" has
 learned to guess when all of x/a, x/b and x/c have moved to z/a,
 z/b and z/c, it is likely that x/d added in the meantime would also
 want to move to z/d by taking the hint that the entire directory
 'x' moved to 'z'.  A bug causing dirty files involved in a rename
 to be overwritten during merge has also been fixed as part of this
 work.  Incidentally, this also avoids updating a file in the
 working tree after a (non-trivial) merge whose result matches what
 our side originally had.

 Will merge to 'master'.


* nd/command-list (2018-05-10) 13 commits
 - completion: allow to customize the completable command list
 - completion: let git provide the completable command list
 - command-list.txt: documentation and guide line
 - help: use command-list.txt for the source of guides
 - help: add "-a --verbose" to list all commands with synopsis
 - git: support --list-cmds=list-<category>
 - completion: implement and use --list-cmds=main,others
 - git --list-cmds: collect command list in a string_list
 - git.c: convert --list-* to --list-cmds=*
 - Remove common-cmds.h
 - help: use command-list.h for common command list
 - generate-cmds.sh: export all commands to command-list.h
 - generate-cmds.sh: factor out synopsis extract code

 The list of commands with their various attributes were spread
 across a few places in the build procedure, but it now is getting a
 bit more consolidated to allow more automation.

 Will merge to 'next'.


* sg/complete-paths (2018-04-17) 11 commits
  (merged to 'next' on 2018-05-08 at 2a11444f90)
 + completion: fill COMPREPLY directly when completing paths
 + completion: improve handling quoted paths in 'git ls-files's output
 + completion: remove repeated dirnames with 'awk' during path completion
 + t9902-completion: ignore COMPREPLY element order in some tests
 + completion: use 'awk' to strip trailing path components
 + completion: let 'ls-files' and 'diff-index' filter matching paths
 + completion: improve handling quoted paths on the command line
 + completion: support completing non-ASCII pathnames
 + completion: simplify prefix path component handling during path completion
 + completion: move __git_complete_index_file() next to its helpers
 + t9902-completion: add tests demonstrating issues with quoted pathnames

 Command line completion (in contrib/) learned to complete pathnames
 for various commands better.

 Will merge to 'master'.


* sb/blame-color (2018-04-24) 3 commits
 - builtin/blame: add new coloring scheme config
 - builtin/blame: highlight recently changed lines
 - builtin/blame: dim uninteresting metadata lines

 "git blame" learns to unhighlight uninteresting metadata from the
 originating commit on lines that are the same as the previous one,
 and also paint lines in different colors depending on the age of
 the commit.

 Will merge to 'next'.


* ds/lazy-load-trees (2018-05-02) 6 commits
  (merged to 'next' on 2018-05-02 at d54016d9e3)
 + coccinelle: avoid wrong transformation suggestions from commit.cocci
  (merged to 'next' on 2018-04-25 at b90813f421)
 + commit-graph: lazy-load trees for commits
 + treewide: replace maybe_tree with accessor methods
 + commit: create get_commit_tree() method
 + treewide: rename tree to maybe_tree
 + Merge branch 'bw/c-plus-plus' into ds/lazy-load-trees
 (this branch is used by ds/commit-graph-lockfile-fix and ds/generation-numbers.)

 The code has been taught to use the duplicated information stored
 in the commit-graph file to learn the tree object name for a commit
 to avoid opening and parsing the commit object when it makes sense
 to do so.

 Will merge to 'master'.


* jk/branch-l-0-deprecation (2018-03-26) 3 commits
  (merged to 'next' on 2018-04-11 at 9b2b0305dd)
 + branch: deprecate "-l" option
 + t: switch "branch -l" to "branch --create-reflog"
 + t3200: unset core.logallrefupdates when testing reflog creation
 (this branch is used by jk/branch-l-1-removal and jk/branch-l-2-reincarnation.)

 The "-l" option in "git branch -l" is an unfortunate short-hand for
 "--create-reflog", but many users, both old and new, somehow expect
 it to be something else, perhaps "--list".  This step deprecates
 the short-hand and warns about the future removal of the it when it
 is used.

 Will cook in 'next'.
 Perhaps merge to 'master' immediately after 2.18 release?


* jk/branch-l-1-removal (2018-03-26) 1 commit
 - branch: drop deprecated "-l" option
 (this branch is used by jk/branch-l-2-reincarnation; uses jk/branch-l-0-deprecation.)

 Following the "git branch -l" deprecation, the short-hand is removed.

 Will keep in 'pu'.


* jk/branch-l-2-reincarnation (2018-03-26) 1 commit
 - branch: make "-l" a synonym for "--list"
 (this branch uses jk/branch-l-0-deprecation and jk/branch-l-1-removal.)

 Following the "git branch -l" removal, "-l" is resurrected as a
 short-hand for "--list".

 Will keep in 'pu'.


* nd/pack-objects-pack-struct (2018-04-16) 15 commits
  (merged to 'next' on 2018-05-16 at 171459475d)
 + ci: exercise the whole test suite with uncommon code in pack-objects
 + pack-objects: reorder members to shrink struct object_entry
 + pack-objects: shrink delta_size field in struct object_entry
 + pack-objects: shrink size field in struct object_entry
 + pack-objects: clarify the use of object_entry::size
 + pack-objects: don't check size when the object is bad
 + pack-objects: shrink z_delta_size field in struct object_entry
 + pack-objects: refer to delta objects by index instead of pointer
 + pack-objects: move in_pack out of struct object_entry
 + pack-objects: move in_pack_pos out of struct object_entry
 + pack-objects: use bitfield for object_entry::depth
 + pack-objects: use bitfield for object_entry::dfs_state
 + pack-objects: turn type and in_pack_type to bitfields
 + pack-objects: a bit of document about struct object_entry
 + read-cache.c: make $GIT_TEST_SPLIT_INDEX boolean

 "git pack-objects" needs to allocate tons of "struct object_entry"
 while doing its work, and shrinking its size helps the performance
 quite a bit.

 Will merge to 'master'.
 cf. <CACsJy8CuVRy4UPEwXJJYAjePEz5zjKMLhRjh9UFw0DPYTzobkw@mail.gmail.com>


* nd/repack-keep-pack (2018-04-16) 7 commits
  (merged to 'next' on 2018-05-08 at ab906be358)
 + pack-objects: show some progress when counting kept objects
 + gc --auto: exclude base pack if not enough mem to "repack -ad"
 + gc: handle a corner case in gc.bigPackThreshold
 + gc: add gc.bigPackThreshold config
 + gc: add --keep-largest-pack option
 + repack: add --keep-pack option
 + t7700: have closing quote of a test at the beginning of line

 "git gc" in a large repository takes a lot of time as it considers
 to repack all objects into one pack by default.  The command has
 been taught to pretend as if the largest existing packfile is
 marked with ".keep" so that it is left untouched while objects in
 other packs and loose ones are repacked.

 Will merge to 'master'.
 cf. <CACsJy8CuVRy4UPEwXJJYAjePEz5zjKMLhRjh9UFw0DPYTzobkw@mail.gmail.com>


* tg/worktree-add-existing-branch (2018-04-30) 4 commits
  (merged to 'next' on 2018-05-08 at 8b76505192)
 + worktree: teach "add" to check out existing branches
 + worktree: factor out dwim_branch function
 + worktree: improve message when creating a new worktree
 + worktree: remove extra members from struct add_opts

 "git worktree add" learned to check out an existing branch.

 Will merge to 'master'.


* js/rebase-recreate-merge (2018-04-26) 17 commits
  (merged to 'next' on 2018-05-16 at f1aeea2879)
 + rebase -i --rebase-merges: add a section to the man page
 + rebase -i: introduce --rebase-merges=[no-]rebase-cousins
 + pull: accept --rebase=merges to recreate the branch topology
 + rebase --rebase-merges: avoid "empty merges"
 + sequencer: handle post-rewrite for merge commands
 + sequencer: make refs generated by the `label` command worktree-local
 + rebase --rebase-merges: add test for --keep-empty
 + rebase: introduce the --rebase-merges option
 + rebase-helper --make-script: introduce a flag to rebase merges
 + sequencer: fast-forward `merge` commands, if possible
 + sequencer: introduce the `merge` command
 + sequencer: introduce new commands to reset the revision
 + git-rebase--interactive: clarify arguments
 + sequencer: offer helpful advice when a command was rescheduled
 + sequencer: refactor how original todo list lines are accessed
 + sequencer: make rearrange_squash() a bit more obvious
 + sequencer: avoid using errno clobbered by rollback_lock_file()
 (this branch is used by js/sequencer-and-root-commits.)

 "git rebase" learned "--rebase-merges" to transplant the whole
 topology of commit graph elsewhere.

 Will merge to 'master'.

--------------------------------------------------
[Discarded]

* js/runtime-prefix-windows (2018-03-27) 5 commits
 . mingw/msvc: use the new-style RUNTIME_PREFIX helper
 . exec_cmd: provide a new-style RUNTIME_PREFIX helper for Windows
 . exec_cmd: RUNTIME_PREFIX on some POSIX systems
 . Makefile: add Perl runtime prefix support
 . Makefile: generate Perl header from template file

 The Windows port was the first that allowed Git to be installed
 anywhere by having its components refer to each other with relative
 pathnames.  The recent dj/runtime-prefix topic extends the idea to
 other platforms, and its approach has been adopted back in the
 Windows port.

 Ejected, as the parent topic dj/runtime-prefix covers Windows now.


* bp/fsexcludes (2018-04-16) 2 commits
 . fsmonitor: switch to use new fsexcludes logic and remove unused untracked cache based logic
 . fsexcludes: add a programmatic way to exclude files from git's working directory traversal logic

 Can we have a few lines summary here, just like we have for other
 topic ;-) I personally take the overlong title of these commits as
 a sign that they can further be simplified and cleaned up by
 splitting, focusing the scope, etc.

 Retracted.
 cf. <0de30972-b0a2-67e8-7cff-c19daf9ece8b@gmail.com>

^ permalink raw reply	[relevance 3%]

* [ANNOUNCE] Git v2.18.0-rc0
@ 2018-05-30 22:47  3% Junio C Hamano
  0 siblings, 0 replies; 200+ results
From: Junio C Hamano @ 2018-05-30 22:47 UTC (permalink / raw)
  To: git; +Cc: Linux Kernel, git-packagers

An early preview release Git v2.18.0-rc0 is now available for
testing at the usual places.  It is comprised of 802 non-merge
commits since v2.17.0, contributed by 60 people, 19 of which are
new faces.

As the above numbers show, especially the non-merge commit count, it
turned out that 2.18 is relatively sizeable cycle.  Let's plan to
start cooling down and giving it a bit of extra polish to make sure
there is no/little regression.  I am tagging the preview now as I
want to do the -rc1 before I go offline early next week for a few
days for travelling.  I may go offline for the rest of the day as I
seem to have caught something X-<, but plan to spend the next 48
hours re-reviewing what is in (or close to be in) 'next' to see which
ones should be in -rc1.

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.18.0-rc0' tag and the 'master' branch that the tag points at:

  url = https://kernel.googlesource.com/pub/scm/git/git
  url = git://repo.or.cz/alt-git.git
  url = https://github.com/gitster/git

New contributors whose contributions weren't in v2.17.0 are as follows.
Welcome to the Git development community!

  Bill Ritcher, Birger Skogeng Pedersen, Casey Fitzpatrick,
  Dan Jacques, Drew DeVault, Eckhard S. Maaß, Erik E Brady,
  Florian Gamböck, Harald Nordgren, Leif Middelschulte, Loganaden
  Velvindron, Luis Marsano, Paul-Sebastian Ungureanu, Pratik
  Karki, Ryan Dammrose, Takuto Ikuta, Tao Qingyun, Wink Saville,
  and Yuki Kokubun.

Returning contributors who helped this release are as follows.
Thanks for your continued support.

  Ævar Arnfjörð Bjarmason, Anders Kaseorg, Andreas Heiduk,
  Antonio Ospite, Beat Bolli, Ben Peart, Brandon Williams, brian
  m. carlson, Christian Couder, Christian Hesse, Clemens Buchacher,
  Derrick Stolee, Elijah Newren, Eric Sunshine, Jameson Miller,
  Jeff King, Johannes Schindelin, Johannes Sixt, Jonathan Nieder,
  Jonathan Tan, Junio C Hamano, Kaartic Sivaraam, Lars Schneider,
  Lucas Werkmeister, Martin Ågren, Michal Nazarewicz, Michele
  Locati, Nguyễn Thái Ngọc Duy, Olga Telezhnaya, Philip
  Oakley, Phillip Wood, Ramsay Jones, René Scharfe, Sergey
  Organov, Stefan Agner, Stefan Beller, SZEDER Gábor, Taylor Blau,
  Thomas Gummerer, Todd Zullinger, and Torsten Bögershausen.

----------------------------------------------------------------

Git 2.18 Release Notes (draft)
==============================

Updates since v2.17
-------------------

UI, Workflows & Features

 * Rename detection logic in "diff" family that is used in "merge" has
   learned to guess when all of x/a, x/b and x/c have moved to z/a,
   z/b and z/c, it is likely that x/d added in the meantime would also
   want to move to z/d by taking the hint that the entire directory
   'x' moved to 'z'.  A bug causing dirty files involved in a rename
   to be overwritten during merge has also been fixed as part of this
   work.

 * "git filter-branch" learned to use a different exit code to allow
   the callers to tell the case where there was no new commits to
   rewrite from other error cases.

 * When built with more recent cURL, GIT_SSL_VERSION can now specify
   "tlsv1.3" as its value.

 * "git gui" learned that "~/.ssh/id_ecdsa.pub" and
   "~/.ssh/id_ed25519.pub" are also possible SSH key files.
   (merge 2e2f0288ef bb/git-gui-ssh-key-files later to maint).

 * "git gui" performs commit upon CTRL/CMD+ENTER but the
   CTRL/CMD+KP_ENTER (i.e. enter key on the numpad) did not have the
   same key binding.  It now does.
   (merge 28a1d94a06 bp/git-gui-bind-kp-enter later to maint).

 * "git gui" has been taught to work with old versions of tk (like
   8.5.7) that do not support "ttk::style theme use" as a way to query
   the current theme.
   (merge 4891961105 cb/git-gui-ttk-style later to maint).

 * "git rebase" has learned to honor "--signoff" option when using
   backends other than "am" (but not "--preserve-merges").

 * "git branch --list" during an interrupted "rebase -i" now lets
   users distinguish the case where a detached HEAD is being rebased
   and a normal branch is being rebased.

 * "git mergetools" learned talking to guiffy.

 * The scripts in contrib/emacs/ have outlived their usefulness and
   have been replaced with a stub that errors out and tells the user
   there are replacements.

 * The new "checkout-encoding" attribute can ask Git to convert the
   contents to the specified encoding when checking out to the working
   tree (and the other way around when checking in).

 * The "git config" command uses separate options e.g. "--int",
   "--bool", etc. to specify what type the caller wants the value to
   be interpreted as.  A new "--type=<typename>" option has been
   introduced, which would make it cleaner to define new types.

 * "git config --get" learned the "--default" option, to help the
   calling script.  Building on top of the above changes, the
   "git config" learns "--type=color" type.  Taken together, you can
   do things like "git config --get foo.color --default blue" and get
   the ANSI color sequence for the color given to foo.color variable,
   or "blue" if the variable does not exist.

 * "git ls-remote" learned an option to allow sorting its output based
   on the refnames being shown.

 * The command line completion (in contrib/) has been taught that "git
   stash save" has been deprecated ("git stash push" is the preferred
   spelling in the new world) and does not offer it as a possible
   completion candidate when "git stash push" can be.

 * "git gc --prune=nonsense" spent long time repacking and then
   silently failed when underlying "git prune --expire=nonsense"
   failed to parse its command line.  This has been corrected.

 * Error messages from "git push" can be painted for more visibility.

 * "git http-fetch" (deprecated) had an optional and experimental
   "feature" to fetch only commits and/or trees, which nobody used.
   This has been removed.

 * The functionality of "$GIT_DIR/info/grafts" has been superseded by
   the "refs/replace/" mechanism for some time now, but the internal
   code had support for it in many places, which has been cleaned up
   in order to drop support of the "grafts" mechanism.

 * "git worktree add" learned to check out an existing branch.

 * "git --no-pager cmd" did not have short-and-sweet single letter
   option. Now it does as "-P".
   (merge 7213c28818 js/no-pager-shorthand later to maint).

 * "git rebase" learned "--rebase-merges" to transplant the whole
   topology of commit graph elsewhere.

 * "git status" learned to pay attention to UI related diff
   configuration variables such as diff.renames.

 * The command line completion mechanism (in contrib/) learned to load
   custom completion file for "git $command" where $command is a
   custom "git-$command" that the end user has on the $PATH when using
   newer version of bash.

 * "git send-email" can sometimes offer confirmation dialog "Send this
   email?" with choices 'Yes', 'No', 'Quit', and 'All'.  A new action
   'Edit' has been added to this dialog's choice.

 * With merge.renames configuration set to false, the recursive merge
   strategy can be told not to spend cycles trying to find renamed
   paths and merge them accordingly.

 * "git status" learned to honor a new status.renames configuration to
   skip rename detection, which could be useful for those who want to
   do so without disabling the default rename detection done by the
   "git diff" command.

 * Command line completion (in contrib/) learned to complete pathnames
   for various commands better.

 * "git blame" learns to unhighlight uninteresting metadata from the
   originating commit on lines that are the same as the previous one,
   and also paint lines in different colors depending on the age of
   the commit.

 * Transfer protocol v2 learned to support the partial clone.

 * When a short hexadecimal string is used to name an object but there
   are multiple objects that share the string as the prefix of their
   names, the code lists these ambiguous candidates in a help message.
   These object names are now sorted according to their types for
   easier eyeballing.

 * "git fetch $there $refspec" that talks over protocol v2 can take
   advantage of server-side ref filtering; the code has been extended
   so that this mechanism triggers also when fetching with configured
   refspec.

 * Our HTTP client code used to advertise that we accept gzip encoding
   from the other side; instead, just let cURL library to advertise
   and negotiate the best one.


Performance, Internal Implementation, Development Support etc.

 * A "git fetch" from a repository with insane number of refs into a
   repository that is already up-to-date still wasted too many cycles
   making many lstat(2) calls to see if these objects at the tips
   exist as loose objects locally.  These lstat(2) calls are optimized
   away by enumerating all loose objects beforehand.
   It is unknown if the new strategy negatively affects existing use
   cases, fetching into a repository with many loose objects from a
   repository with small number of refs.

 * Git can be built to use either v1 or v2 of the PCRE library, and so
   far, the build-time configuration USE_LIBPCRE=YesPlease instructed
   the build procedure to use v1, but now it means v2.  USE_LIBPCRE1
   and USE_LIBPCRE2 can be used to explicitly choose which version to
   use, as before.

 * The build procedure learned to optionally use symbolic links
   (instead of hardlinks and copies) to install "git-foo" for built-in
   commands, whose binaries are all identical.

 * Conversion from uchar[20] to struct object_id continues.

 * The way "git worktree prune" worked internally has been simplified,
   by assuming how "git worktree move" moves an existing worktree to a
   different place.

 * Code clean-up for the "repository" abstraction.
   (merge 00a3da2a13 nd/remove-ignore-env-field later to maint).

 * Code to find the length to uniquely abbreviate object names based
   on packfile content, which is a relatively recent addtion, has been
   optimized to use the same fan-out table.

 * The mechanism to use parse-options API to automate the command line
   completion continues to get extended and polished.

 * Copies of old scripted Porcelain commands in contrib/examples/ have
   been removed.

 * Some tests that rely on the exact hardcoded values of object names
   have been updated in preparation for hash function migration.

 * Perf-test update.

 * Test helper update.

 * The effort continues to refactor the internal global data structure
   to make it possible to open multiple repositories, work with and
   then close them,

 * Small test-helper programs have been consolidated into a single
   binary.

 * API clean-up around ref-filter code.

 * Shell completion (in contrib) that gives list of paths have been
   optimized somewhat.

 * The index file is updated to record the fsmonitor section after a
   full scan was made, to avoid wasting the effort that has already
   spent.

 * Performance measuring framework in t/perf learned to help bisecting
   performance regressions.

 * Some multi-word source filenames are being renamed to separate
   words with dashes instead of underscores.

 * An reusable "memory pool" implementation has been extracted from
   fast-import.c, which in turn has become the first user of the
   mem-pool API.

 * A build-time option has been added to allow Git to be told to refer
   to its associated files relative to the main binary, in the same
   way that has been possible on Windows for quite some time, for
   Linux, BSDs and Darwin.

 * Precompute and store information necessary for ancestry traversal
   in a separate file to optimize graph walking.

 * The effort to pass the repository in-core structure throughout the
   API continues.  This round deals with the code that implements the
   refs/replace/ mechanism.

 * The build procedure "make DEVELOPER=YesPlease" learned to enable a
   bit more warning options depending on the compiler used to help
   developers more.  There also is "make DEVOPTS=tokens" knob
   available now, for those who want to help fixing warnings we
   usually ignore, for example.

 * A new version of the transport protocol is being worked on.

 * The code to interface to GPG has been restructured somewhat to make
   it cleaner to integrate with other types of signature systems later.

 * The code has been taught to use the duplicated information stored
   in the commit-graph file to learn the tree object name for a commit
   to avoid opening and parsing the commit object when it makes sense
   to do so.

 * "git gc" in a large repository takes a lot of time as it considers
   to repack all objects into one pack by default.  The command has
   been taught to pretend as if the largest existing packfile is
   marked with ".keep" so that it is left untouched while objects in
   other packs and loose ones are repacked.

 * The transport protocol v2 is getting updated further.

 * The codepath around object-info API has been taught to take the
   repository object (which in turn tells the API which object store
   the objects are to be located).

 * Rename detection logic in "diff" family that is used in "merge" has
   learned to guess when all of x/a, x/b and x/c have moved to z/a,
   z/b and z/c, it is likely that x/d added in the meantime would also
   want to move to z/d by taking the hint that the entire directory
   'x' moved to 'z'.  A bug causing dirty files involved in a rename
   to be overwritten during merge has also been fixed as part of this
   work.  Incidentally, this also avoids updating a file in the
   working tree after a (non-trivial) merge whose result matches what
   our side originally had.

 * "git pack-objects" needs to allocate tons of "struct object_entry"
   while doing its work, and shrinking its size helps the performance
   quite a bit.

 * The implementation of "git rebase -i --root" has been updated to use
   the sequencer machinery more.

 * Developer support update, by using BUG() macro instead of die() to
   mark codepaths that should not happen more clearly.

 * Developer support.  Use newer GCC on one of the builds done at
   TravisCI.org to get more warnings and errors diagnosed.

 * Conversion from uchar[20] to struct object_id continues.

 * By code restructuring of submodule merge in merge-recursive,
   informational messages from the codepath are now given using the
   same mechanism as other output, and honor the merge.verbosity
   configuration.  The code also learned to give a few new messages
   when a submodule three-way merge resolves cleanly when one side
   records a descendant of the commit chosen by the other side.

 * Avoid unchecked snprintf() to make future code auditing easier.
   (merge ac4896f007 jk/snprintf-truncation later to maint).

 * Many tests hardcode the raw object names, which would change once
   we migrate away from SHA-1.  While some of them must test against
   exact object names, most of them do not have to use hardcoded
   constants in the test.  The latter kind of tests have been updated
   to test the moral equivalent of the original without hardcoding the
   actual object names.


Also contains various documentation updates and code clean-ups.


Fixes since v2.17
-----------------

 * "git shortlog cruft" aborted with a BUG message when run outside a
   Git repository.  The command has been taught to complain about
   extra and unwanted arguments on its command line instead in such a
   case.
   (merge 4aa0161e83 ma/shortlog-revparse later to maint).

 * "git stash push -u -- <pathspec>" gave an unnecessary and confusing
   error message when there was no tracked files that match the
   <pathspec>, which has been fixed.
   (merge 353278687e tg/stash-untracked-with-pathspec-fix later to maint).

 * "git tag --contains no-such-commit" gave a full list of options
   after giving an error message.
   (merge 3bb0923f06 ps/contains-id-error-message later to maint).

 * "diff-highlight" filter (in contrib/) learned to undertand "git log
   --graph" output better.
   (merge 4551fbba14 jk/diff-highlight-graph-fix later to maint).

 * when refs that do not point at committish are given, "git
   filter-branch" gave a misleading error messages.  This has been
   corrected.
   (merge f78ab355e7 yk/filter-branch-non-committish-refs later to maint).

 * "git submodule status" misbehaved on a submodule that has been
   removed from the working tree.
   (merge 74b6bda32f rs/status-with-removed-submodule later to maint).

 * When credential helper exits very quickly without reading its
   input, it used to cause Git to die with SIGPIPE, which has been
   fixed.
   (merge a0d51e8d0e eb/cred-helper-ignore-sigpipe later to maint).

 * "git rebase --keep-empty" still removed an empty commit if the
   other side contained an empty commit (due to the "does an
   equivalent patch exist already?" check), which has been corrected.
   (merge 3d946165e1 pw/rebase-keep-empty-fixes later to maint).

 * Some codepaths, including the refs API, get and keep relative
   paths, that go out of sync when the process does chdir(2).  The
   chdir-notify API is introduced to let these codepaths adjust these
   cached paths to the new current directory.
   (merge fb9c2d2703 jk/relative-directory-fix later to maint).

 * "cd sub/dir && git commit ../path" ought to record the changes to
   the file "sub/path", but this regressed long time ago.
   (merge 86238e07ef bw/commit-partial-from-subdirectory-fix later to maint).

 * Recent introduction of "--log-destination" option to "git daemon"
   did not work well when the daemon was run under "--inetd" mode.
   (merge e67d906d73 lw/daemon-log-destination later to maint).

 * Small fix to the autoconf build procedure.
   (merge 249482daf0 es/fread-reads-dir-autoconf-fix later to maint).

 * Fix an unexploitable (because the oversized contents are not under
   attacker's control) buffer overflow.
   (merge d8579accfa bp/fsmonitor-bufsize-fix later to maint).

 * Recent simplification of build procedure forgot a bit of tweak to
   the build procedure of contrib/mw-to-git/
   (merge d8698987f3 ab/simplify-perl-makefile later to maint).

 * Moving a submodule that itself has submodule in it with "git mv"
   forgot to make necessary adjustment to the nested sub-submodules;
   now the codepath learned to recurse into the submodules.

 * "git config --unset a.b", when "a.b" is the last variable in an
   otherwise empty section "a", left an empty section "a" behind, and
   worse yet, a subsequent "git config a.c value" did not reuse that
   empty shell and instead created a new one.  These have been
   (partially) corrected.
   (merge c71d8bb38a js/empty-config-section-fix later to maint).

 * "git worktree remove" learned that "-f" is a shorthand for
   "--force" option, just like for "git worktree add".
   (merge d228eea514 sb/worktree-remove-opt-force later to maint).

 * The completion script (in contrib/) learned to clear cached list of
   command line options upon dot-sourcing it again in a more efficient
   way.
   (merge 94408dc71c sg/completion-clear-cached later to maint).

 * "git svn" had a minor thinko/typo which has been fixed.
   (merge 51db271587 ab/git-svn-get-record-typofix later to maint).

 * During a "rebase -i" session, the code could give older timestamp
   to commits created by later "pick" than an earlier "reword", which
   has been corrected.
   (merge 12f7babd6b js/ident-date-fix later to maint).

 * "git submodule status" did not check the symbolic revision name it
   computed for the submodule HEAD is not the NULL, and threw it at
   printf routines, which has been corrected.
   (merge 0b5e2ea7cf nd/submodule-status-fix later to maint).

 * When fed input that already has In-Reply-To: and/or References:
   headers and told to add the same information, "git send-email"
   added these headers separately, instead of appending to an existing
   one, which is a violation of the RFC.  This has been corrected.
   (merge 256be1d3f0 sa/send-email-dedup-some-headers later to maint).

 * "git fast-export" had a regression in v2.15.0 era where it skipped
   some merge commits in certain cases, which has been corrected.
   (merge be011bbe00 ma/fast-export-skip-merge-fix later to maint).

 * The code did not propagate the terminal width to subprocesses via
   COLUMNS environment variable, which it now does.  This caused
   trouble to "git column" helper subprocess when "git tag --column=row"
   tried to list the existing tags on a display with non-default width.
   (merge b5d5a567fb nd/term-columns later to maint).

 * We learned that our source files with ".pl" and ".py" extensions
   are Perl and Python files respectively and changes to them are
   better viewed as such with appropriate diff drivers.
   (merge 7818b619e2 ab/perl-python-attrs later to maint).

 * "git rebase -i" sometimes left intermediate "# This is a
   combination of N commits" message meant for the human consumption
   inside an editor in the final result in certain corner cases, which
   has been fixed.
   (merge 15ef69314d js/rebase-i-clean-msg-after-fixup-continue later to maint).

 * A test to see if the filesystem normalizes UTF-8 filename has been
   updated to check what we need to know in a more direct way, i.e. a
   path created in NFC form can be accessed with NFD form (or vice
   versa) to cope with APFS as well as HFS.
   (merge 742ae10e35 tb/test-apfs-utf8-normalization later to maint).

 * "git format-patch --cover --attach" created a broken MIME multipart
   message for the cover letter, which has been fixed by keeping the
   cover letter as plain text file.
   (merge 50cd54ef4e bc/format-patch-cover-no-attach later to maint).

 * The split-index feature had a long-standing and dormant bug in
   certain use of the in-core merge machinery, which has been fixed.
   (merge 7db118303a en/unpack-trees-split-index-fix later to maint).

 * Asciidoctor gives a reasonable imitation for AsciiDoc, but does not
   render illustration in a literal block correctly when indented with
   HT by default. The problem is fixed by forcing 8-space tabs.
   (merge 379805051d bc/asciidoctor-tab-width later to maint).

 * Code clean-up to adjust to a more recent lockfile API convention that
   allows lockfile instances kept on the stack.
   (merge 0fa5a2ed8d ma/lockfile-cleanup later to maint).

 * the_repository->index is not a allocated piece of memory but
   repo_clear() indiscriminately attempted to free(3) it, which has
   been corrected.
   (merge 74373b5f10 nd/repo-clear-keep-the-index later to maint).

 * Code clean-up to avoid non-standard-conformant pointer arithmetic.
   (merge c112084af9 rs/no-null-ptr-arith-in-fast-export later to maint).

 * Code clean-up to turn history traversal more robust in a
   semi-corrupt repository.
   (merge 8702b30fd7 jk/unavailable-can-be-missing later to maint).

 * "git update-ref A B" is supposed to ensure that ref A does not yet
   exist when B is a NULL OID, but this check was not done correctly
   for pseudo-refs outside refs/ hierarchy, e.g. MERGE_HEAD.

 * "git submodule update" and "git submodule add" supported the
   "--reference" option to borrow objects from a neighbouring local
   repository like "git clone" does, but lacked the more recent
   invention "--dissociate".  Also "git submodule add" has been taught
   to take the "--progress" option.
   (merge a0ef29341a cf/submodule-progress-dissociate later to maint).

 * Update credential-netrc helper (in contrib/) to allow customizing
   the GPG used to decrypt the encrypted .netrc file.
   (merge 786ef50a23 lm/credential-netrc later to maint).

 * "git submodule update" attempts two different kinds of "git fetch"
   against the upstream repository to grab a commit bound at the
   submodule's path, but it incorrectly gave up if the first kind
   (i.e. a normal fetch) failed, making the second "last resort" one
   (i.e. fetching an exact commit object by object name) ineffective.
   This has been corrected.
   (merge e30d833671 sb/submodule-update-try-harder later to maint).

 * Error behaviour of "git grep" when it cannot read the index was
   inconsistent with other commands that uses the index, which has
   been corrected to error out early.
   (merge b2aa84c789 sb/grep-die-on-unreadable-index later to maint).

 * We used to call regfree() after regcomp() failed in some codepaths,
   which have been corrected.
   (merge 17154b1576 ma/regex-no-regfree-after-comp-fail later to maint).

 * Other minor doc, test and build updates and code cleanups.
   (merge 248f66ed8e nd/trace-with-env later to maint).
   (merge 14ced5562c ys/bisect-object-id-missing-conversion-fix later to maint).
   (merge 5988eb631a ab/doc-hash-brokenness later to maint).
   (merge a4d4e32a70 pk/test-avoid-pipe-hiding-exit-status later to maint).
   (merge 05e293c1ac jk/flockfile-stdio later to maint).
   (merge e9184b0789 jk/t5561-missing-curl later to maint).
   (merge b1801b85a3 nd/worktree-move later to maint).
   (merge bbd374dd20 ak/bisect-doc-typofix later to maint).
   (merge 4855f06fb3 mn/send-email-credential-doc later to maint).
   (merge 8523b1e355 en/doc-typoes later to maint).
   (merge 43b44ccfe7 js/t5404-path-fix later to maint).
   (merge decf711fc1 ps/test-chmtime-get later to maint).
   (merge 22d11a6e8e es/worktree-docs later to maint).
   (merge 92a5dbbc22 tg/use-git-contacts later to maint).
   (merge adc887221f tq/t1510 later to maint).
   (merge bed21a8ad6 sg/doc-gc-quote-mismatch-fix later to maint).
   (merge 73364e4f10 tz/doc-git-urls-reference later to maint).
   (merge cd1e606bad bc/mailmap-self later to maint).
   (merge f7997e3682 ao/config-api-doc later to maint).
   (merge ee930754d8 jk/apply-p-doc later to maint).
   (merge 011b648646 nd/pack-format-doc later to maint).
   (merge 87a6bb701a sg/t5310-jgit-bitmap-test later to maint).
   (merge f6b82970aa sg/t5516-fixes later to maint).
   (merge 4362da078e sg/t7005-spaces-in-filenames-cleanup later to maint).
   (merge 7d0ee47c11 js/test-unset-prereq later to maint).
   (merge 5356a3c354 ah/misc-doc-updates later to maint).
   (merge 92c4a7a129 nd/completion-aliasfiletype-typofix later to maint).
   (merge 58bd77b66a nd/pack-unreachable-objects-doc later to maint).
   (merge 4ed79d5203 sg/t6500-no-redirect-of-stdin later to maint).
   (merge 17b8a2d6cd jk/config-blob-sans-repo later to maint).

----------------------------------------------------------------

Changes since v2.17.0 are as follows:

Anders Kaseorg (1):
      Documentation/git-bisect.txt: git bisect term → git bisect terms

Andreas Heiduk (9):
      git-svn: search --authors-prog in PATH too
      git-svn: allow empty email-address using authors-prog and authors-file
      doc: improve formatting in githooks.txt
      doc: align 'diff --no-index' in text and synopsis
      doc: clarify ignore rules for git ls-files
      doc: add '-d' and '-o' for 'git push'
      git-svn: remove ''--add-author-from' for 'commit-diff'
      doc: add note about shell quoting to revision.txt
      doc: normalize [--options] to [options] in git-diff

Antonio Ospite (1):
      doc: fix config API documentation about config_with_options

Beat Bolli (1):
      git-gui: search for all current SSH key types

Ben Peart (7):
      fsmonitor: fix incorrect buffer size when printing version number
      fsmonitor: force index write after full scan
      test-drop-caches: simplify delay loading of NtSetSystemInformation
      merge: update documentation for {merge,diff}.renameLimit
      merge: add merge.renames config setting
      merge: pass aggressive when rename detection is turned off
      add status config and command line options for rename detection

Bill Ritcher (1):
      mergetools: add support for guiffy

Birger Skogeng Pedersen (1):
      git-gui: bind CTRL/CMD+numpad ENTER to do_commit

Brandon Williams (79):
      pkt-line: introduce packet_read_with_status
      pkt-line: allow peeking a packet line without consuming it
      pkt-line: add delim packet support
      upload-pack: convert to a builtin
      upload-pack: factor out processing lines
      transport: use get_refs_via_connect to get refs
      connect: convert get_remote_heads to use struct packet_reader
      connect: discover protocol version outside of get_remote_heads
      transport: store protocol version
      protocol: introduce enum protocol_version value protocol_v2
      test-pkt-line: introduce a packet-line test helper
      serve: introduce git-serve
      ls-refs: introduce ls-refs server command
      connect: request remote refs using v2
      transport: convert get_refs_list to take a list of ref prefixes
      transport: convert transport_get_remote_refs to take a list of ref prefixes
      ls-remote: pass ref prefixes when requesting a remote's refs
      fetch: pass ref prefixes when fetching
      push: pass ref prefixes when pushing
      upload-pack: introduce fetch server command
      fetch-pack: perform a fetch using v2
      fetch-pack: support shallow requests
      connect: refactor git_connect to only get the protocol version once
      connect: don't request v2 when pushing
      transport-helper: remove name parameter
      transport-helper: refactor process_connect_service
      transport-helper: introduce stateless-connect
      pkt-line: add packet_buf_write_len function
      remote-curl: create copy of the service name
      remote-curl: store the protocol version the server responded with
      http: allow providing extra headers for http requests
      http: don't always add Git-Protocol header
      http: eliminate "# service" line when using protocol v2
      remote-curl: implement stateless-connect command
      remote-curl: don't request v2 when pushing
      commit: allow partial commits with relative paths
      serve: introduce the server-option capability
      ls-remote: send server options when using protocol v2
      fetch: send server options when using protocol v2
      refspec: move refspec parsing logic into its own file
      refspec: rename struct refspec to struct refspec_item
      refspec: factor out parsing a single refspec
      refspec: introduce struct refspec
      refspec: convert valid_fetch_refspec to use parse_refspec
      submodule--helper: convert push_check to use struct refspec
      pull: convert get_tracking_branch to use refspec_item_init
      transport: convert transport_push to use struct refspec
      remote: convert check_push_refs to use struct refspec
      remote: convert match_push_refs to use struct refspec
      clone: convert cmd_clone to use refspec_item_init
      fast-export: convert to use struct refspec
      remote: convert push refspecs to struct refspec
      remote: convert fetch refspecs to struct refspec
      remote: remove add_prune_tags_to_fetch_refspec
      transport-helper: convert to use struct refspec
      fetch: convert fetch_one to use struct refspec
      fetch: convert refmap to use struct refspec
      refspec: remove the deprecated functions
      fetch: convert do_fetch to take a struct refspec
      fetch: convert get_ref_map to take a struct refspec
      fetch: convert prune_refs to take a struct refspec
      remote: convert get_stale_heads to take a struct refspec
      remote: convert apply_refspecs to take a struct refspec
      remote: convert query_refspecs to take a struct refspec
      remote: convert get_ref_match to take a struct refspec
      remote: convert match_explicit_refs to take a struct refspec
      push: check for errors earlier
      push: convert to use struct refspec
      transport: convert transport_push to take a struct refspec
      send-pack: store refspecs in a struct refspec
      transport: remove transport_verify_remote_names
      http-push: store refspecs in a struct refspec
      remote: convert match_push_refs to take a struct refspec
      remote: convert check_push_refs to take a struct refspec
      submodule: convert push_unpushed_submodules to take a struct refspec
      refspec: consolidate ref-prefix generation logic
      fetch: generate ref-prefixes when using a configured refspec
      remote-curl: accept all encodings supported by curl
      remote-curl: accept compressed responses with protocol v2

Casey Fitzpatrick (3):
      submodule: clean up substitutions in script
      submodule: add --progress option to add command
      submodule: add --dissociate option to add/update commands

Christian Couder (6):
      perf/aggregate: add display_dir()
      perf/aggregate: add --sort-by=regression option
      perf/run: add --subsection option
      t/perf: add scripts to bisect performance regressions
      perf/aggregate: use Getopt::Long for option parsing
      perf/bisect_run_script: disable codespeed

Christian Hesse (2):
      perl: fix installing modules from contrib
      Makefile: mark perllibdir as a .PHONY target

Clemens Buchacher (2):
      git-gui: workaround ttk:style theme use
      completion: improve ls-files filter performance

Dan Jacques (3):
      Makefile: generate Perl header from template file
      Makefile: add Perl runtime prefix support
      exec_cmd: RUNTIME_PREFIX on some POSIX systems

Derrick Stolee (20):
      packfile: define and use bsearch_pack()
      sha1_name: use bsearch_pack() for abbreviations
      csum-file: rename hashclose() to finalize_hashfile()
      csum-file: refactor finalize_hashfile() method
      commit-graph: add format document
      graph: add commit graph design document
      commit-graph: create git-commit-graph builtin
      commit-graph: implement write_commit_graph()
      commit-graph: implement git-commit-graph write
      commit-graph: implement git commit-graph read
      commit-graph: add core.commitGraph setting
      commit-graph: close under reachability
      commit: integrate commit graph with commit parsing
      commit-graph: read only from specific pack-indexes
      commit-graph: build graph from starting commits
      commit-graph: implement "--append" option
      treewide: rename tree to maybe_tree
      commit: create get_commit_tree() method
      treewide: replace maybe_tree with accessor methods
      commit-graph: lazy-load trees for commits

Drew DeVault (1):
      git-send-email: allow re-editing of message

Eckhard S. Maaß (1):
      wt-status: use settings from git_diff_ui_config

Elijah Newren (70):
      directory rename detection: basic testcases
      directory rename detection: directory splitting testcases
      directory rename detection: testcases to avoid taking detection too far
      directory rename detection: partially renamed directory testcase/discussion
      directory rename detection: files/directories in the way of some renames
      directory rename detection: testcases checking which side did the rename
      directory rename detection: more involved edge/corner testcases
      directory rename detection: testcases exploring possibly suboptimal merges
      directory rename detection: miscellaneous testcases to complete coverage
      directory rename detection: tests for handling overwriting untracked files
      directory rename detection: tests for handling overwriting dirty files
      merge-recursive: move the get_renames() function
      merge-recursive: introduce new functions to handle rename logic
      merge-recursive: fix leaks of allocated renames and diff_filepairs
      merge-recursive: make !o->detect_rename codepath more obvious
      merge-recursive: split out code for determining diff_filepairs
      merge-recursive: make a helper function for cleanup for handle_renames
      merge-recursive: add get_directory_renames()
      merge-recursive: check for directory level conflicts
      merge-recursive: add computation of collisions due to dir rename & merging
      merge-recursive: check for file level conflicts then get new name
      merge-recursive: when comparing files, don't include trees
      merge-recursive: apply necessary modifications for directory renames
      merge-recursive: avoid clobbering untracked files with directory renames
      merge-recursive: fix overwriting dirty files involved in renames
      merge-recursive: fix remaining directory rename + dirty overwrite cases
      directory rename detection: new testcases showcasing a pair of bugs
      merge-recursive: avoid spurious rename/rename conflict from dir renames
      merge-recursive: ensure we write updates for directory-renamed file
      Documentation: fix several one-character-off spelling errors
      Documentation: normalize spelling of 'normalised'
      directory rename detection: basic testcases
      directory rename detection: directory splitting testcases
      directory rename detection: testcases to avoid taking detection too far
      directory rename detection: partially renamed directory testcase/discussion
      directory rename detection: files/directories in the way of some renames
      directory rename detection: testcases checking which side did the rename
      directory rename detection: more involved edge/corner testcases
      directory rename detection: testcases exploring possibly suboptimal merges
      directory rename detection: miscellaneous testcases to complete coverage
      directory rename detection: tests for handling overwriting untracked files
      directory rename detection: tests for handling overwriting dirty files
      merge-recursive: move the get_renames() function
      merge-recursive: introduce new functions to handle rename logic
      merge-recursive: fix leaks of allocated renames and diff_filepairs
      merge-recursive: make !o->detect_rename codepath more obvious
      merge-recursive: split out code for determining diff_filepairs
      merge-recursive: make a helper function for cleanup for handle_renames
      Make running git under other debugger-like programs easy
      unpack_trees: fix breakage when o->src_index != o->dst_index
      merge-recursive: add get_directory_renames()
      merge-recursive: check for directory level conflicts
      merge-recursive: add computation of collisions due to dir rename & merging
      merge-recursive: check for file level conflicts then get new name
      merge-recursive: when comparing files, don't include trees
      merge-recursive: apply necessary modifications for directory renames
      merge-recursive: avoid clobbering untracked files with directory renames
      merge-recursive: fix overwriting dirty files involved in renames
      merge-recursive: fix remaining directory rename + dirty overwrite cases
      directory rename detection: new testcases showcasing a pair of bugs
      merge-recursive: avoid spurious rename/rename conflict from dir renames
      merge-recursive: improve add_cacheinfo error handling
      merge-recursive: move more is_dirty handling to merge_content
      merge-recursive: avoid triggering add_cacheinfo error with dirty mod
      t6046: testcases checking whether updates can be skipped in a merge
      merge-recursive: fix was_tracked() to quit lying with some renamed paths
      merge-recursive: fix remainder of was_dirty() to use original index
      merge-recursive: make "Auto-merging" comment show for other merges
      merge-recursive: fix check for skipability of working tree updates
      merge-recursive: provide pair of `unpack_trees_{start,finish}()`

Eric Sunshine (5):
      t3200: verify "branch --list" sanity when rebasing from detached HEAD
      t2028: tighten grep expression to make "move worktree" test more robust
      git-worktree.txt: recommend 'git worktree remove' over manual deletion
      git-worktree.txt: unify command-line prompt in example blocks
      configure.ac: fix botched FREAD_READS_DIRECTORIES check

Erik E Brady (1):
      credential: ignore SIGPIPE when writing to credential helpers

Florian Gamböck (1):
      completion: load completion file for external subcommand

Harald Nordgren (1):
      ls-remote: create '--sort' option

Jameson Miller (3):
      fast-import: rename mem_pool type to mp_block
      fast-import: introduce mem_pool type
      mem-pool: move reusable parts of memory pool into its own file

Jeff King (54):
      diff-highlight: correct test graph diagram
      diff-highlight: use test_tick in graph test
      diff-highlight: prefer "echo" to "cat" in tests
      diff-highlight: test interleaved parallel lines of history
      diff-highlight: test graphs with --color
      diff-highlight: use flush() helper consistently
      diff-highlight: detect --graph by indent
      set_git_dir: die when setenv() fails
      add chdir-notify API
      set_work_tree: use chdir_notify
      refs: use chdir_notify to update cached relative paths
      config: move flockfile() closer to unlocked functions
      t5561: drop curl stderr redirects
      t5561: skip tests if curl is not available
      ref-filter: use "struct object_id" consistently
      ref-filter: make ref_array_item allocation more consistent
      ref-filter: factor ref_array pushing into its own function
      t7004: fix mistaken tag name
      gpg-interface: handle bool user.signingkey
      gpg-interface: modernize function declarations
      gpg-interface: use size_t for signature buffer size
      gpg-interface: fix const-correctness of "eol" pointer
      gpg-interface: extract gpg line matching helper
      gpg-interface: find the last gpg signature line
      apply: clarify "-p" documentation
      pager: set COLUMNS to term_columns()
      mark_tree_contents_uninteresting(): drop missing object check
      mark_parents_uninteresting(): drop missing object check
      mark_parents_uninteresting(): replace list with stack
      mark_parents_uninteresting(): avoid most allocation
      get_main_ref_store: BUG() when outside a repository
      config: die when --blob is used outside a repository
      http: use strbufs instead of fixed buffers
      log_write_email_headers: use strbufs
      shorten_unambiguous_ref: use xsnprintf
      fmt_with_err: add a comment that truncation is OK
      submodule-config: verify submodule names as paths
      is_ntfs_dotgit: use a size_t for traversing string
      is_hfs_dotgit: match other .git files
      skip_prefix: add case-insensitive variant
      verify_path: drop clever fallthrough
      verify_dotfile: mention case-insensitivity in comment
      update-index: stat updated files earlier
      verify_path: disallow symlinks in .gitmodules
      index-pack: make fsck error message more specific
      fsck: simplify ".git" check
      fsck: actually fsck blob data
      fsck: detect gitmodules files
      fsck: handle promisor objects in .gitmodules check
      fsck: check .gitmodules content
      fsck: call fsck_finish() after fscking objects
      unpack-objects: call fsck_finish() after fscking objects
      index-pack: check .gitmodules files with --strict
      fsck: complain when .gitmodules is a symlink

Johannes Schindelin (68):
      git_config_set: fix off-by-two
      t1300: rename it to reflect that `repo-config` was deprecated
      t1300: demonstrate that --replace-all can "invent" newlines
      config --replace-all: avoid extra line breaks
      t1300: avoid relying on a bug
      t1300: remove unreasonable expectation from TODO
      t5404: relax overzealous test
      t1300: add a few more hairy examples of sections becoming empty
      t1300: `--unset-all` can leave an empty section behind (bug)
      config: introduce an optional event stream while parsing
      config: avoid using the global variable `store`
      config_set_store: rename some fields for consistency
      git_config_set: do not use a state machine
      git_config_set: make use of the config parser's event stream
      git config --unset: remove empty sections (in the common case)
      git_config_set: reuse empty sections
      exec_cmd: provide a new-style RUNTIME_PREFIX helper for Windows
      mingw/msvc: use the new-style RUNTIME_PREFIX helper
      color: introduce support for colorizing stderr
      push: test to verify that push errors are colored
      config: document the settings to colorize push errors/hints
      gettext: avoid initialization if the locale dir is not present
      git_setup_gettext: plug memory leak
      sequencer: avoid using errno clobbered by rollback_lock_file()
      sequencer: make rearrange_squash() a bit more obvious
      sequencer: refactor how original todo list lines are accessed
      sequencer: offer helpful advice when a command was rescheduled
      sequencer: introduce new commands to reset the revision
      sequencer: introduce the `merge` command
      sequencer: fast-forward `merge` commands, if possible
      rebase-helper --make-script: introduce a flag to rebase merges
      rebase: introduce the --rebase-merges option
      sequencer: make refs generated by the `label` command worktree-local
      sequencer: handle post-rewrite for merge commands
      rebase --rebase-merges: avoid "empty merges"
      pull: accept --rebase=merges to recreate the branch topology
      rebase -i: introduce --rebase-merges=[no-]rebase-cousins
      rebase -i --rebase-merges: add a section to the man page
      argv_array: offer to split a string by whitespace
      commit: Let the callback of for_each_mergetag return on error
      replace: avoid using die() to indicate a bug
      tests: introduce test_unset_prereq, for debugging
      replace: "libify" create_graft() and callees
      replace: prepare create_graft() for converting graft files wholesale
      replace: introduce --convert-graft-file
      Add a test for `git replace --convert-graft-file`
      Deprecate support for .git/info/grafts
      filter-branch: stop suggesting to use grafts
      technical/shallow: stop referring to grafts
      technical/shallow: describe why shallow cannot use replace refs
      Remove obsolete script to convert grafts to replace refs
      rebase -i: demonstrate bugs with fixup!/squash! commit messages
      rebase -i: Handle "combination of <n> commits" with GETTEXT_POISON
      sequencer: always commit without editing when asked for
      rebase --skip: clean up commit message after a failed fixup/squash
      sequencer: extract helper to update active_cache_tree
      sequencer: learn about the special "fake root commit" handling
      rebase -i --root: let the sequencer handle even the initial part
      sequencer: allow introducing new root commits
      rebase --rebase-merges: a "merge" into a new root is a fast-forward
      rebase --rebase-merges: root commits can be cousins, too
      test-tool: help verifying BUG() code paths
      run-command: use BUG() to report bugs, not die()
      Replace all die("BUG: ...") calls by BUG() ones
      Convert remaining die*(BUG) messages
      config: a user-provided invalid section is not a BUG
      is_ntfs_dotgit: match other .git files
      is_{hfs,ntfs}_dotgitmodules: add tests

Johannes Sixt (2):
      sequencer: reset the committer date before commits
      git: add -P as a short option for --no-pager

Jonathan Nieder (5):
      sha1_file: allow map_sha1_file_1 to handle arbitrary repositories
      sha1_file: allow sha1_loose_object_info to handle arbitrary repositories
      Makefile: remove unused @@PERLLIBDIR@@ substitution variable
      Makefile: quote $INSTLIBDIR when passing it to sed
      packfile: add repository argument to packed_object_info

Jonathan Tan (4):
      grep: remove "repo" arg from non-supporting funcs
      upload-pack: fix error message typo
      upload-pack: read config when serving protocol v2
      {fetch,upload}-pack: support filter in protocol v2

Junio C Hamano (18):
      stash: fix nonsense pipeline
      The first batch for 2.18 cycle
      The second batch for 2.18
      The third batch for 2.18
      Revert "Merge branch 'en/rename-directory-detection'"
      gc: do not upcase error message shown with die()
      parseopt: handle malformed --expire arguments more nicely
      The fourth batch for 2.18
      The fifth batch for 2.18
      argv-array: return the pushed string from argv_push*()
      Git 2.13.7
      Git 2.14.4
      Git 2.15.2
      Git 2.16.4
      Git 2.17.1
      The sixth batch for 2.18
      The seventh batch for 2.18
      Git 2.18-rc0

Kaartic Sivaraam (1):
      branch --list: print useful info whilst interactive rebasing a detached HEAD

Lars Schneider (10):
      strbuf: remove unnecessary NUL assignment in xstrdup_tolower()
      strbuf: add xstrdup_toupper()
      strbuf: add a case insensitive starts_with()
      utf8: teach same_encoding() alternative UTF encoding names
      utf8: add function to detect prohibited UTF-16/32 BOM
      utf8: add function to detect a missing UTF-16/32 BOM
      convert: add 'working-tree-encoding' attribute
      convert: check for detectable errors in UTF encodings
      convert: add tracing for 'working-tree-encoding' attribute
      convert: add round trip check based on 'core.checkRoundtripEncoding'

Leif Middelschulte (1):
      merge-recursive: give notice when submodule commit gets fast-forwarded

Loganaden Velvindron (1):
      http: allow use of TLS 1.3

Lucas Werkmeister (1):
      daemon.c: fix condition for redirecting stderr

Luis Marsano (2):
      git-credential-netrc: adapt to test framework for git
      git-credential-netrc: accept gpg option

Martin Ågren (24):
      git-shortlog.txt: reorder usages
      shortlog: add usage-string for stdin-reading
      shortlog: disallow left-over arguments outside repo
      doc: convert \--option to --option
      doc: convert [\--] to [--]
      git-[short]log.txt: unify quoted standalone --
      git-submodule.txt: quote usage in monospace, drop backslash
      fast-export: fix regression skipping some merge-commits
      http-fetch: make `-a` standard behaviour
      walker: drop fields of `struct walker` which are always 1
      t/helper/test-write-cache: clean up lock-handling
      refs.c: do not die if locking fails in `write_pseudoref()`
      refs.c: do not die if locking fails in `delete_pseudoref()`
      lock_file: make function-local locks non-static
      lock_file: move static locks into functions
      refs.c: refer to "object ID", not "sha1", in error messages
      t1400: add tests around adding/deleting pseudorefs
      refs: handle zero oid for pseudorefs
      merge: setup `opts` later in `checkout_fast_forward()`
      config: free resources of `struct config_store_data`
      config: let `config_store_data_clear()` handle `value_regex`
      config: let `config_store_data_clear()` handle `key`
      regex: do not call `regfree()` if compilation fails
      unpack_trees_options: free messages when done

Michal Nazarewicz (1):
      send-email: simplify Gmail example in the documentation

Michele Locati (1):
      filter-branch: return 2 when nothing to rewrite

Nguyễn Thái Ngọc Duy (88):
      repository: initialize the_repository in main()
      repository.c: move env-related setup code back to environment.c
      repository.c: delete dead functions
      sha1_file.c: move delayed getenv(altdb) back to setup_git_env()
      repository: delete ignore_env member
      gc.txt: more details about what gc does
      worktree: delete dead code
      worktree prune: improve prune logic when worktree is moved
      repository.h: add comment and clarify repo_set_gitdir
      git.c: move cmd_struct declaration up
      git.c: add hidden option --list-parseopt-builtins
      completion: mention the oldest version we need to support
      completion: factor out _git_xxx calling code
      completion: add --option completion for most builtin commands
      completion: delete option-only completion commands
      completion: use __gitcomp_builtin in _git_ls_tree
      completion: use __gitcomp_builtin in _git_cherry
      packfile: keep prepare_packed_git() private
      t/helper: add an empty test-tool program
      t/helper: merge test-chmtime into test-tool
      t/helper: merge test-sha1 into test-tool
      t/helper: merge test-lazy-init-name-hash into test-tool
      t/helper: merge test-config into test-tool
      t/helper: merge test-ctype into test-tool
      t/helper: merge test-date into test-tool
      t/helper: merge (unused) test-delta into test-tool
      t/helper: merge test-drop-caches into test-tool
      t/helper: merge test-dump-cache-tree into test-tool
      t/helper: merge test-dump-split-index into test-tool
      t/helper: merge test-example-decorate into test-tool
      t/helper: merge test-genrandom into test-tool
      t/helper: merge test-hashmap into test-tool
      t/helper: merge test-index-version into test-tool
      t/helper: merge (unused) test-match-trees into test-tool
      t/helper: merge (unused) test-mergesort into test-tool
      t/helper: merge test-mktemp into test-tool
      t/helper: merge test-online-cpus into test-tool
      t/helper: merge test-path-utils into test-tool
      t/helper: merge test-prio-queue into test-tool
      t/helper: merge test-read-cache into test-tool
      t/helper: merge test-ref-store into test-tool
      t/helper: merge test-regex into test-tool
      t/helper: merge test-revision-walking into test-tool
      t/helper: merge test-run-command into test-tool
      t/helper: merge test-scrap-cache-tree into test-tool
      t/helper: merge test-sha1-array into test-tool
      t/helper: merge test-sigchain into test-tool
      t/helper: merge test-strcmp-offset into test-tool
      t/helper: merge test-string-list into test-tool
      t/helper: merge test-submodule-config into test-tool
      t/helper: merge test-subprocess into test-tool
      t/helper: merge test-urlmatch-normalization into test-tool
      t/helper: merge test-wildmatch into test-tool
      t/helper: merge test-write-cache into test-tool
      trace.c: export trace_setup_key
      read-cache.c: make $GIT_TEST_SPLIT_INDEX boolean
      pack-objects: a bit of document about struct object_entry
      pack-objects: turn type and in_pack_type to bitfields
      pack-objects: use bitfield for object_entry::dfs_state
      pack-objects: use bitfield for object_entry::depth
      pack-objects: move in_pack_pos out of struct object_entry
      pack-objects: move in_pack out of struct object_entry
      pack-objects: refer to delta objects by index instead of pointer
      pack-objects: shrink z_delta_size field in struct object_entry
      pack-objects: don't check size when the object is bad
      pack-objects: clarify the use of object_entry::size
      pack-objects: shrink size field in struct object_entry
      pack-objects: shrink delta_size field in struct object_entry
      pack-objects: reorder members to shrink struct object_entry
      ci: exercise the whole test suite with uncommon code in pack-objects
      t7700: have closing quote of a test at the beginning of line
      repack: add --keep-pack option
      gc: add --keep-largest-pack option
      gc: add gc.bigPackThreshold config
      gc: handle a corner case in gc.bigPackThreshold
      gc --auto: exclude base pack if not enough mem to "repack -ad"
      pack-objects: show some progress when counting kept objects
      connect.c: mark die_initial_contact() NORETURN
      Makefile: detect compiler and enable more warnings in DEVELOPER=1
      submodule--helper: don't print null in 'submodule status'
      doc: keep first level section header in upper case
      pack-objects: validation and documentation about unreachable options
      completion: fix misspelled config key aliasesfiletype
      repository: fix free problem with repo_clear(the_repository)
      pack-format.txt: more details on pack file format
      column: fix off-by-one default width
      commit.h: rearrange 'index' to shrink struct commit
      travis-ci: run gcc-8 on linux-gcc jobs

Olga Telezhnaya (6):
      ref-filter: add shortcut to work with strbufs
      ref-filter: start adding strbufs with errors
      ref-filter: add return value && strbuf to handlers
      ref-filter: change parsing function error handling
      ref-filter: add return value to parsers
      ref-filter: libify get_ref_atom_value()

Paul-Sebastian Ungureanu (2):
      parse-options: do not show usage upon invalid option value
      t/helper: 'test-chmtime (--get|-g)' to print only the mtime

Philip Oakley (1):
      Avoid multiple PREFIX definitions

Phillip Wood (7):
      rebase --root: stop assuming squash_onto is unset
      rebase -i --keep-empty: don't prune empty commits
      rebase: respect --no-keep-empty
      rebase: extend --signoff support
      rebase -p: error out if --signoff is given
      rebase --keep-empty: always use interactive rebase
      rebase --rebase-merges: add test for --keep-empty

Pratik Karki (1):
      test: avoid pipes in git related commands for test

Ramsay Jones (1):
      BUG_exit_code: fix sparse "symbol not declared" warning

René Scharfe (8):
      sha1_name: use bsearch_pack() in unique_in_pack()
      bisect: use oid_to_hex() for converting object_id hashes to hex strings
      run-command: use strbuf_addstr() for adding a string to a strbuf
      submodule: check for NULL return of get_submodule_ref_store()
      replace_object: use oidmap
      fast-export: avoid NULL pointer arithmetic
      t5512: run git fetch inside test
      fsmonitor: use internal argv_array of struct child_process

Ryan Dammrose (1):
      push: colorize errors

SZEDER Gábor (22):
      test_must_be_empty: simplify file existence check
      t9902-completion: add tests demonstrating issues with quoted pathnames
      completion: move __git_complete_index_file() next to its helpers
      completion: simplify prefix path component handling during path completion
      completion: support completing non-ASCII pathnames
      completion: improve handling quoted paths on the command line
      completion: let 'ls-files' and 'diff-index' filter matching paths
      completion: use 'awk' to strip trailing path components
      t9902-completion: ignore COMPREPLY element order in some tests
      completion: remove repeated dirnames with 'awk' during path completion
      completion: improve handling quoted paths in 'git ls-files's output
      completion: fill COMPREPLY directly when completing paths
      completion: reduce overhead of clearing cached --options
      docs/git-gc: fix minor rendering issue
      coccinelle: avoid wrong transformation suggestions from commit.cocci
      t6050-replace: don't disable stdin for the whole test script
      t5310-pack-bitmaps: make JGit tests work with GIT_TEST_SPLIT_INDEX
      t5516-fetch-push: fix 'push with dry-run' test
      t5516-fetch-push: fix broken &&-chain
      t7005-editor: get rid of the SPACES_IN_FILENAMES prereq
      completion: don't return with error from __gitcomp_file_direct()
      t9902-completion: exercise __git_complete_index_file() directly

Sergey Organov (1):
      glossary: substitute "ancestor" for "direct ancestor" in 'push' description.

Stefan Agner (1):
      send-email: avoid duplicate In-Reply-To/References

Stefan Beller (81):
      repository: introduce raw object store field
      object-store: migrate alternates struct and functions from cache.h
      object-store: move alt_odb_list and alt_odb_tail to object store
      object-store: free alt_odb_list
      object-store: move packed_git and packed_git_mru to object store
      object-store: close all packs upon clearing the object store
      pack: move prepare_packed_git_run_once to object store
      pack: move approximate object count to object store
      sha1_file: add raw_object_store argument to alt_odb_usable
      sha1_file: add repository argument to link_alt_odb_entry
      sha1_file: add repository argument to read_info_alternates
      sha1_file: add repository argument to link_alt_odb_entries
      sha1_file: add repository argument to prepare_alt_odb
      sha1_file: allow link_alt_odb_entries to handle arbitrary repositories
      sha1_file: allow prepare_alt_odb to handle arbitrary repositories
      sha1_file: add repository argument to sha1_file_name
      sha1_file: add repository argument to stat_sha1_file
      sha1_file: add repository argument to open_sha1_file
      sha1_file: add repository argument to map_sha1_file_1
      sha1_file: add repository argument to map_sha1_file
      sha1_file: add repository argument to sha1_loose_object_info
      sha1_file: allow sha1_file_name to handle arbitrary repositories
      sha1_file: allow stat_sha1_file to handle arbitrary repositories
      sha1_file: allow open_sha1_file to handle arbitrary repositories
      sha1_file: allow map_sha1_file to handle arbitrary repositories
      packfile: allow prepare_packed_git_mru to handle arbitrary repositories
      packfile: allow rearrange_packed_git to handle arbitrary repositories
      packfile: allow install_packed_git to handle arbitrary repositories
      packfile: add repository argument to prepare_packed_git_one
      packfile: add repository argument to prepare_packed_git
      packfile: add repository argument to reprepare_packed_git
      packfile: allow prepare_packed_git_one to handle arbitrary repositories
      packfile: allow prepare_packed_git to handle arbitrary repositories
      packfile: allow reprepare_packed_git to handle arbitrary repositories
      packfile: add repository argument to find_pack_entry
      packfile: allow find_pack_entry to handle arbitrary repositories
      submodule.h: drop declaration of connect_work_tree_and_git_dir
      submodule-config: allow submodule_free to handle arbitrary repositories
      submodule-config: add repository argument to submodule_from_{name, path}
      submodule-config: remove submodule_from_cache
      submodule: fixup nested submodules after moving the submodule
      write_or_die.c: rename to use dashes in file name
      unicode_width.h: rename to use dash in file name
      exec_cmd: rename to use dash in file name
      sha1_name.c: rename to use dash in file name
      sha1_file.c: rename to use dash in file name
      replace_object.c: rename to use dash in file name
      replace-object: move replace_map to object store
      object-store: move lookup_replace_object to replace-object.h
      replace-object: eliminate replace objects prepared flag
      replace-object: check_replace_refs is safe in multi repo environment
      refs: add repository argument to get_main_ref_store
      refs: add repository argument to for_each_replace_ref
      replace-object: add repository argument to prepare_replace_object
      replace-object: add repository argument to do_lookup_replace_object
      replace-object: add repository argument to lookup_replace_object
      refs: store the main ref store inside the repository struct
      refs: allow for_each_replace_ref to handle arbitrary repositories
      replace-object: allow prepare_replace_object to handle arbitrary repositories
      replace-object: allow do_lookup_replace_object to handle arbitrary repositories
      replace-object: allow lookup_replace_object to handle arbitrary repositories
      worktree: accept -f as short for --force for removal
      builtin/blame: dim uninteresting metadata lines
      builtin/blame: highlight recently changed lines
      builtin/blame: add new coloring scheme config
      cache.h: add repository argument to oid_object_info_extended
      cache.h: add repository argument to oid_object_info
      packfile: add repository argument to retry_bad_packed_offset
      packfile: add repository argument to packed_to_object_type
      packfile: add repository argument to read_object
      packfile: add repository argument to unpack_entry
      packfile: add repository argument to cache_or_unpack_entry
      cache.h: allow oid_object_info to handle arbitrary repositories
      git-rebase--interactive: clarify arguments
      object.c: free replace map in raw_object_store_clear
      replace-object.c: remove the_repository from prepare_replace_object
      grep: handle corrupt index files early
      git-submodule.sh: try harder to fetch a submodule
      submodule.c: move submodule merging to merge-recursive.c
      merge-recursive: i18n submodule merge output and respect verbosity
      object.c: clear replace map before freeing it

Takuto Ikuta (1):
      fetch-pack.c: use oidset to check existence of loose object

Tao Qingyun (1):
      t1510-repo-setup.sh: remove useless mkdir

Taylor Blau (5):
      builtin/config.c: treat type specifiers singularly
      builtin/config.c: support `--type=<type>` as preferred alias for `--<type>`
      builtin/config: introduce `--default`
      config.c: introduce 'git_config_color' to parse ANSI colors
      builtin/config: introduce `color` type specifier

Thomas Gummerer (10):
      stash push: avoid printing errors
      stash push -u: don't create empty stash
      stash: drop superfluos pathspec parameter
      SubmittingPatches: mention the git contacts command
      completion: stop showing 'save' for stash by default
      completion: make stash -p and alias for stash push -p
      worktree: remove extra members from struct add_opts
      worktree: improve message when creating a new worktree
      worktree: factor out dwim_branch function
      worktree: teach "add" to check out existing branches

Todd Zullinger (1):
      doc/clone: update caption for GIT URLS cross-reference

Torsten Bögershausen (1):
      test: correct detection of UTF8_NFD_TO_NFC for APFS

Wink Saville (8):
      rebase-interactive: simplify pick_on_preserving_merges
      rebase: update invocation of rebase dot-sourced scripts
      rebase: reindent function git_rebase__interactive
      rebase: extract functions out of git_rebase__interactive
      rebase: add and use git_rebase__interactive__preserve_merges
      rebase: remove unused code paths from git_rebase__interactive
      rebase: remove unused code paths from git_rebase__interactive__preserve_merges
      rebase: remove merges_option and a blank line

Yuki Kokubun (1):
      filter-branch: fix errors caused by refs that point at non-committish

brian m. carlson (121):
      bulk-checkin: convert index_bulk_checkin to struct object_id
      builtin/write-tree: convert to struct object_id
      cache-tree: convert write_*_as_tree to object_id
      cache-tree: convert remnants to struct object_id
      resolve-undo: convert struct resolve_undo_info to object_id
      tree: convert read_tree_recursive to struct object_id
      ref-filter: convert grab_objectname to struct object_id
      strbuf: convert strbuf_add_unique_abbrev to use struct object_id
      wt-status: convert struct wt_status_state to object_id
      Convert find_unique_abbrev* to struct object_id
      http-walker: convert struct object_request to use struct object_id
      send-pack: convert remaining functions to struct object_id
      replace_object: convert struct replace_object to object_id
      builtin/mktag: convert to struct object_id
      archive: convert write_archive_entry_fn_t to object_id
      archive: convert sha1_file_to_archive to struct object_id
      builtin/index-pack: convert struct ref_delta_entry to object_id
      sha1_file: convert read_loose_object to use struct object_id
      sha1_file: convert check_sha1_signature to struct object_id
      streaming: convert open_istream to use struct object_id
      builtin/mktree: convert to struct object_id
      sha1_file: convert assert_sha1_type to object_id
      sha1_file: convert retry_bad_packed_offset to struct object_id
      packfile: convert unpack_entry to struct object_id
      Convert remaining callers of sha1_object_info_extended to object_id
      sha1_file: convert sha1_object_info* to object_id
      builtin/fmt-merge-msg: convert remaining code to object_id
      builtin/notes: convert static functions to object_id
      tree-walk: convert get_tree_entry_follow_symlinks internals to object_id
      streaming: convert istream internals to struct object_id
      tree-walk: convert tree entry functions to object_id
      sha1_file: convert read_object_with_reference to object_id
      sha1_file: convert read_sha1_file to struct object_id
      Convert lookup_replace_object to struct object_id
      sha1_file: introduce a constant for max header length
      convert: convert to struct object_id
      sha1_name: convert struct min_abbrev_data to object_id
      t1011: abstract away SHA-1-specific constants
      t1304: abstract away SHA-1-specific constants
      t1300: abstract away SHA-1-specific constants
      t1405: sort reflog entries in a hash-independent way
      t1411: abstract away SHA-1-specific constants
      t1507: abstract away SHA-1-specific constants
      t2020: abstract away SHA-1 specific constants
      t2101: modernize test style
      t2101: abstract away SHA-1-specific constants
      t2107: abstract away SHA-1-specific constants
      format-patch: make cover letters always text/plain
      cache: add a function to read an object ID from a buffer
      server-info: remove unused members from struct pack_info
      Remove unused member in struct object_context
      packfile: remove unused member from struct pack_entry
      packfile: convert has_sha1_pack to object_id
      sha1-file: convert freshen functions to object_id
      packfile: convert find_pack_entry to object_id
      packfile: abstract away hash constant values
      pack-objects: abstract away hash algorithm
      pack-redundant: abstract away hash algorithm
      tree-walk: avoid hard-coded 20 constant
      tree-walk: convert get_tree_entry_follow_symlinks to object_id
      fsck: convert static functions to struct object_id
      submodule-config: convert structures to object_id
      split-index: convert struct split_index to object_id
      Update struct index_state to use struct object_id
      pack-redundant: convert linked lists to use struct object_id
      index-pack: abstract away hash function constant
      commit: convert uses of get_sha1_hex to get_oid_hex
      dir: convert struct untracked_cache_dir to object_id
      http: eliminate hard-coded constants
      revision: replace use of hard-coded constants
      upload-pack: replace use of several hard-coded constants
      diff: specify abbreviation size in terms of the_hash_algo
      builtin/receive-pack: avoid hard-coded constants for push certs
      sha1-file: add functions for hex empty tree and blob OIDs
      builtin/am: convert uses of EMPTY_TREE_SHA1_BIN to the_hash_algo
      builtin/merge: switch tree functions to use object_id
      merge: convert empty tree constant to the_hash_algo
      sequencer: convert one use of EMPTY_TREE_SHA1_HEX
      submodule: convert several uses of EMPTY_TREE_SHA1_HEX
      wt-status: convert two uses of EMPTY_TREE_SHA1_HEX
      builtin/receive-pack: convert one use of EMPTY_TREE_SHA1_HEX
      builtin/reset: convert use of EMPTY_TREE_SHA1_BIN
      sha1_file: convert cached object code to struct object_id
      cache-tree: use is_empty_tree_oid
      sequencer: use the_hash_algo for empty tree object ID
      dir: use the_hash_algo for empty blob object ID
      sha1_file: only expose empty object constants through git_hash_algo
      Update shell scripts to compute empty tree object ID
      add--interactive: compute the empty tree value
      merge-one-file: compute empty blob object ID
      Documentation: use 8-space tabs with Asciidoctor
      Documentation: render revisions correctly under Asciidoctor
      mailmap: update brian m. carlson's email address
      t/test-lib: add an SHA1 prerequisite
      t/test-lib: introduce ZERO_OID
      t: switch $_z40 to $ZERO_OID
      t/test-lib: introduce OID_REGEX
      t: switch $_x40 to $OID_REGEX
      t0000: annotate with SHA1 prerequisite
      t1007: annotate with SHA1 prerequisite
      t1512: skip test if not using SHA-1
      t4044: skip test if not using SHA-1
      t: skip pack tests if not using SHA-1
      t2203: abstract away SHA-1-specific constants
      t3103: abstract away SHA-1-specific constants
      t3702: abstract away SHA-1-specific constants
      t3905: abstract away SHA-1-specific constants
      t4007: abstract away SHA-1-specific constants
      t4008: abstract away SHA-1-specific constants
      t4014: abstract away SHA-1-specific constants
      t4020: abstract away SHA-1-specific constants
      t4022: abstract away SHA-1-specific constants
      t4029: fix test indentation
      t4029: abstract away SHA-1-specific constants
      t4030: abstract away SHA-1-specific constants
      t/lib-diff-alternative: abstract away SHA-1-specific constants
      t4205: sort log output in a hash-independent way
      t4042: abstract away SHA-1-specific constants
      t4045: abstract away SHA-1-specific constants
      t4208: abstract away SHA-1-specific constants
      t5300: abstract away SHA-1-specific constants

Ævar Arnfjörð Bjarmason (21):
      configure: fix a regression in PCRE v1 detection
      configure: detect redundant --with-libpcre & --with-libpcre1
      Makefile: make USE_LIBPCRE=YesPlease mean v2, not v1
      Makefile: fix broken bindir_relative variable
      Makefile: add a gitexecdir_relative variable
      Makefile: optionally symlink libexec/git-core binaries to bin/git
      Remove contrib/examples/*
      doc hash-function-transition: clarify how older gits die on NewHash
      doc hash-function-transition: clarify what SHAttered means
      git-svn: avoid warning on undef readline()
      Makefile: add a DEVOPTS to suppress -Werror under DEVELOPER
      Makefile: add a DEVOPTS to get all of -Wextra
      git{,-blame}.el: remove old bitrotting Emacs code
      .gitattributes: add *.pl extension for Perl
      .gitattributes: use the "perl" differ for Perl
      .gitattributes: add a diff driver for Python
      sha1-name.c: remove stray newline
      sha1-array.h: align function arguments
      git-p4: change "commitish" typo to "committish"
      sha1-name.c: move around the collect_ambiguous() function
      get_short_oid: sort ambiguous objects by type, then SHA-1


^ permalink raw reply	[relevance 3%]

* [RFC PATCH 0/7] merge requirement: index matches head
@ 2018-06-03  6:58  3% Elijah Newren
  2018-06-03  6:58  1% ` [RFC PATCH 7/7] merge: fix misleading pre-merge check documentation Elijah Newren
  2018-07-01  1:24  3% ` [PATCH v2 0/9] Fix merge issues with index not matching HEAD Elijah Newren
  0 siblings, 2 replies; 200+ results
From: Elijah Newren @ 2018-06-03  6:58 UTC (permalink / raw)
  To: git; +Cc: jrnieder, Elijah Newren

Between working on some other things, I happened to be reading
Documentation/git-merge.txt and ran across the part that says:

    ...[merge will] abort if there are any changes registered in the
    index relative to the `HEAD` commit.  (One exception is when the
    changed index entries are in the state that would result from the
    merge already.)

I was pretty sure this statement was wrong, but did some digging to
uncover the details and the history.  What I thought would turn into a
simple three-line documentation fix, ballooned into this patch series.

This series might be best read in a different order; I'm not yet sure
the right way to structure it.  But:

  * Patch 5 demonstrates one of the ways that the parenthetical
    sentence is wrong (desirable perhaps, but not what is implemented)

  * Patch 7 explains the history, the trade-offs, the three ways the
    parenthetical sentence is wrong, and the many pitfalls we've run
    into trying to allow for such an exception.  Very small
    documentation fix with a huge commit message.

  * Patch 6 fixes the breakage demonstrated in patch 5, but if I only
    submitted patches 5-7, then the testsuite wouldn't pass because
    this fix uncovered multiple other bugs.  That's where patches 1-4
    came in.  This fix is also kind of opinionated; it takes the stance
    that allowing the exceptions isn't worth it.

Elijah Newren (7):
  t6044: verify that merges expected to abort actually abort
  t6044: add a testcase for index matching head, when head doesn't match HEAD
  merge-recursive: make sure when we say we abort that we actually abort
  merge-recursive: fix assumption that head tree being merged is HEAD
  t6044: add more testcases with staged changes before a merge is invoked
  merge-recursive: enforce rule that index matches head before merging
  merge: fix misleading pre-merge check documentation

 Documentation/git-merge.txt              |   6 +-
 builtin/am.c                             |   6 +-
 cache.h                                  |   8 --
 merge-recursive.c                        |  14 +--
 merge.c                                  |  10 +-
 t/t6044-merge-unrelated-index-changes.sh |  67 +++++++++++--
 t/t7504-commit-msg-hook.sh               |   4 +-
 t/t7611-merge-abort.sh                   | 118 -----------------------
 tree.h                                   |   8 ++
 9 files changed, 87 insertions(+), 154 deletions(-)

-- 
2.18.0.rc0.49.g3c08dc0fef


^ permalink raw reply	[relevance 3%]

* [RFC PATCH 7/7] merge: fix misleading pre-merge check documentation
  2018-06-03  6:58  3% [RFC PATCH 0/7] merge requirement: index matches head Elijah Newren
@ 2018-06-03  6:58  1% ` Elijah Newren
  2018-06-07  5:27  3%   ` Elijah Newren
  2018-07-01  1:24  3% ` [PATCH v2 0/9] Fix merge issues with index not matching HEAD Elijah Newren
  1 sibling, 1 reply; 200+ results
From: Elijah Newren @ 2018-06-03  6:58 UTC (permalink / raw)
  To: git; +Cc: jrnieder, Elijah Newren

builtin/merge.c contains this important requirement for merge strategies:

    ...the index must be in sync with the head commit.  The strategies are
    responsible to ensure this.

However, Documentation/git-merge.txt says:

    ...[merge will] abort if there are any changes registered in the index
    relative to the `HEAD` commit.  (One exception is when the changed
    index entries are in the state that would result from the merge
    already.)

Interestingly, prior to commit c0be8aa06b85 ("Documentation/git-merge.txt:
Partial rewrite of How Merge Works", 2008-07-19),
Documentation/git-merge.txt said much more:

    ...the index file must match the tree of `HEAD` commit...
    [NOTE]
    This is a bit of a lite.  In certain special cases [explained
    in detail]...
    Otherwise, merge will refuse to do any harm to your repository
    (that is...your working tree...and index are left intact).

So, this suggests that the exceptions existed because there were special
cases where it would case no harm, and potentially be slightly more
convenient for the user.  While the current text in git-merge.txt does
list a condition under which it would be safe to proceed despite the index
not matching HEAD, it does not match what is actually implemented, in
three different ways:

    * The exception is written to describe what unpack-trees allows.  Not
      all merge strategies allow such an exception, though, making this
      description misleading.  'ours' and 'octopus' merges have strictly
      enforced index==HEAD for a while, and the commit previous to this
      one made 'recursive' do so as well.

    * If someone did a three-way content merge on a specific file using
      versions from the relevant commits and staged it prior to running
      merge, then that path would technically satisfy the exception listed
      in git-merge.txt.  unpack-trees.c would still error out on the path,
      though, because it defers the three-way content merge logic to other
      parts of the code (resolve, octopus, or recursive) and has no way of
      checking whether the index entry from before the merge will match
      the end result of the merge.

    * The exception as implemented in unpack-trees actually only checked
      that the index matched the MERGE_HEAD version of the file and that
      HEAD matched the merge base.  Assuming no renames, that would indeed
      provide cases where the index matches the end result we'd get from a
      merge.  But renames means unpack-trees is checking that it instead
      matches something other than what the final result will be, risking
      either erroring out when we shouldn't need to, or not erroring out
      when we should and overwriting the user's staged changes.

In addition to the wording behind this exception being misleading, it is
also somewhat surprising to see how many times the code for the special
cases were wrong or the check to make sure the index matched head was
forgotten altogether:

* Prior to commit ee6566e8d70d ("[PATCH] Rewrite read-tree", 2005-09-05),
  there were many cases where an unclean index entry was allowed (look for
  merged_entry_allow_dirty()); it appears that in those cases, the merge
  would have simply overwritten staged changes with the result of the
  merge.  Thus, the merge result would have been correct, but the user's
  uncommitted changes could be thrown away without warning.

* Prior to commit 160252f81626 ("git-merge-ours: make sure our index
  matches HEAD", 2005-11-03), the 'ours' merge strategy did not check
  whether the index matched HEAD.  If it didn't, the resulting merge
  would include all the staged changes, and thus wasn't really an 'ours'
  strategy.

* Prior to commit 3ec62ad9ffba ("merge-octopus: abort if index does not
  match HEAD", 2016-04-09), 'octopus' merges did not check whether the
  index matched HEAD, also resulting in any staged changes from before
  the commit silently being folded into the resulting merge.  commit
  a6ee883b8eb5 ("t6044: new merge testcases for when index doesn't match
  HEAD", 2016-04-09) was also added at the same time to try to test to
  make sure all strategies did the necessary checking for the requirement
  that the index match HEAD.  Sadly, it didn't catch all the cases, as
  evidenced by the remainder of this list...

* Prior to commit 65170c07d466 ("merge-recursive: avoid incorporating
  uncommitted changes in a merge", 2017-12-21), merge-recursive simply
  relied on unpack_trees() to do the necessary check, but in one special
  case it avoided calling unpack_trees() entirely and accidentally ended
  up silently including any staged changes from before the merge in the
  resulting merge commit.

* The commit immediately before this one in this series noted that the
  exceptions were written in a way that assumed no renames, making it
  unsafe for merge-recursive to use.  merge-recursive was modified to
  use its own check to enforce that index==HEAD.

This history makes it very tempting to go into builtin/merge.c and replace
the comment that strategies must enforce that index matches HEAD with code
that just enforces it.  At this point, that would only affect the
'resolve' strategy; all other strategies have each been modified to
manually enforce it.  (However, note that index==HEAD is not strictly
enforced for fast-forward merges, as those are not considered a merge
strategy and they trigger in builtin/merge.c before the section in the
code where the relevant comment is found.)

But, even if we don't take the step of just fixing these problems by
enforcing index==HEAD for all strategies, we at least need to update this
misleading documentation in git-merge.txt.  For now, just modify the claim
in Documentation/git-merge.txt to fix the error.  The precise details
around combination of merges strategies and special cases probably is not
relevant to most users, so simply state that exceptions may exist but are
narrow and vary depending upon which merge strategy is in use.

Signed-off-by: Elijah Newren <newren@gmail.com>
---
 Documentation/git-merge.txt | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/Documentation/git-merge.txt b/Documentation/git-merge.txt
index d5dfd8430f..141bd72284 100644
--- a/Documentation/git-merge.txt
+++ b/Documentation/git-merge.txt
@@ -122,9 +122,9 @@ merge' may need to update.
 
 To avoid recording unrelated changes in the merge commit,
 'git pull' and 'git merge' will also abort if there are any changes
-registered in the index relative to the `HEAD` commit.  (One
-exception is when the changed index entries are in the state that
-would result from the merge already.)
+registered in the index relative to the `HEAD` commit.  (Special
+narrow exceptions to this rule may exist depending on which merge
+strategy is in use, but generally, the index must match HEAD.)
 
 If all named commits are already ancestors of `HEAD`, 'git merge'
 will exit early with the message "Already up to date."
-- 
2.18.0.rc0.49.g3c08dc0fef


^ permalink raw reply related	[relevance 1%]

* [ANNOUNCE] Git v2.18.0-rc1
@ 2018-06-04 13:53  3% Junio C Hamano
  0 siblings, 0 replies; 200+ results
From: Junio C Hamano @ 2018-06-04 13:53 UTC (permalink / raw)
  To: git; +Cc: Linux Kernel, git-packagers

A release candidate Git v2.18.0-rc1 is now available for testing
at the usual places.  It is comprised of 842 non-merge commits
since v2.17.0, contributed by 65 people, 20 of which are new faces.

I plan to go offline for most of the remainder of the week, and then
tag (hopefully) the last -rc early next week, with any urgent
regression fix accumulated on the list during this week.  Happy bug
hunting ;-)

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.18.0-rc1' tag and the 'master' branch that the tag points at:

  url = https://kernel.googlesource.com/pub/scm/git/git
  url = git://repo.or.cz/alt-git.git
  url = https://github.com/gitster/git

New contributors whose contributions weren't in v2.17.0 are as follows.
Welcome to the Git development community!

  Bill Ritcher, Birger Skogeng Pedersen, Casey Fitzpatrick,
  Dan Jacques, Drew DeVault, Eckhard S. Maaß, Erik E Brady,
  Florian Gamböck, Harald Nordgren, Leif Middelschulte,
  Loganaden Velvindron, Luis Marsano, Paul-Sebastian Ungureanu,
  Pedro Alvarez Piedehierro, Pratik Karki, Ryan Dammrose, Takuto
  Ikuta, Tao Qingyun, Wink Saville, and Yuki Kokubun.

Returning contributors who helped this release are as follows.
Thanks for your continued support.

  Ævar Arnfjörð Bjarmason, Anders Kaseorg, Andreas Heiduk,
  Antonio Ospite, Beat Bolli, Ben Peart, Brandon Williams, brian
  m. carlson, Christian Couder, Christian Hesse, Clemens Buchacher,
  David Turner, Derrick Stolee, Elijah Newren, Eric Sunshine,
  Jameson Miller, Jeff King, Johannes Schindelin, Johannes Sixt,
  Jonathan Nieder, Jonathan Tan, Junio C Hamano, Kaartic Sivaraam,
  Lars Schneider, Lucas Werkmeister, Luke Diamand, Martin Ågren,
  Michal Nazarewicz, Michele Locati, Nguyễn Thái Ngọc Duy,
  Olga Telezhnaya, Orgad Shaneh, Philip Oakley, Phillip Wood,
  Ramsay Jones, René Scharfe, Robert P. J. Day, Sergey Organov,
  Stefan Agner, Stefan Beller, SZEDER Gábor, Taylor Blau, Thomas
  Gummerer, Todd Zullinger, and Torsten Bögershausen.

----------------------------------------------------------------

Git 2.18 Release Notes (draft)
==============================

Updates since v2.17
-------------------

UI, Workflows & Features

 * Rename detection logic in "diff" family that is used in "merge" has
   learned to guess when all of x/a, x/b and x/c have moved to z/a,
   z/b and z/c, it is likely that x/d added in the meantime would also
   want to move to z/d by taking the hint that the entire directory
   'x' moved to 'z'.  A bug causing dirty files involved in a rename
   to be overwritten during merge has also been fixed as part of this
   work.  Incidentally, this also avoids updating a file in the
   working tree after a (non-trivial) merge whose result matches what
   our side originally had.

 * "git filter-branch" learned to use a different exit code to allow
   the callers to tell the case where there was no new commits to
   rewrite from other error cases.

 * When built with more recent cURL, GIT_SSL_VERSION can now specify
   "tlsv1.3" as its value.

 * "git gui" learned that "~/.ssh/id_ecdsa.pub" and
   "~/.ssh/id_ed25519.pub" are also possible SSH key files.
   (merge 2e2f0288ef bb/git-gui-ssh-key-files later to maint).

 * "git gui" performs commit upon CTRL/CMD+ENTER but the
   CTRL/CMD+KP_ENTER (i.e. enter key on the numpad) did not have the
   same key binding.  It now does.
   (merge 28a1d94a06 bp/git-gui-bind-kp-enter later to maint).

 * "git gui" has been taught to work with old versions of tk (like
   8.5.7) that do not support "ttk::style theme use" as a way to query
   the current theme.
   (merge 4891961105 cb/git-gui-ttk-style later to maint).

 * "git rebase" has learned to honor "--signoff" option when using
   backends other than "am" (but not "--preserve-merges").

 * "git branch --list" during an interrupted "rebase -i" now lets
   users distinguish the case where a detached HEAD is being rebased
   and a normal branch is being rebased.

 * "git mergetools" learned talking to guiffy.

 * The scripts in contrib/emacs/ have outlived their usefulness and
   have been replaced with a stub that errors out and tells the user
   there are replacements.

 * The new "checkout-encoding" attribute can ask Git to convert the
   contents to the specified encoding when checking out to the working
   tree (and the other way around when checking in).

 * The "git config" command uses separate options e.g. "--int",
   "--bool", etc. to specify what type the caller wants the value to
   be interpreted as.  A new "--type=<typename>" option has been
   introduced, which would make it cleaner to define new types.

 * "git config --get" learned the "--default" option, to help the
   calling script.  Building on top of the above changes, the
   "git config" learns "--type=color" type.  Taken together, you can
   do things like "git config --get foo.color --default blue" and get
   the ANSI color sequence for the color given to foo.color variable,
   or "blue" if the variable does not exist.

 * "git ls-remote" learned an option to allow sorting its output based
   on the refnames being shown.

 * The command line completion (in contrib/) has been taught that "git
   stash save" has been deprecated ("git stash push" is the preferred
   spelling in the new world) and does not offer it as a possible
   completion candidate when "git stash push" can be.

 * "git gc --prune=nonsense" spent long time repacking and then
   silently failed when underlying "git prune --expire=nonsense"
   failed to parse its command line.  This has been corrected.

 * Error messages from "git push" can be painted for more visibility.

 * "git http-fetch" (deprecated) had an optional and experimental
   "feature" to fetch only commits and/or trees, which nobody used.
   This has been removed.

 * The functionality of "$GIT_DIR/info/grafts" has been superseded by
   the "refs/replace/" mechanism for some time now, but the internal
   code had support for it in many places, which has been cleaned up
   in order to drop support of the "grafts" mechanism.

 * "git worktree add" learned to check out an existing branch.

 * "git --no-pager cmd" did not have short-and-sweet single letter
   option. Now it does as "-P".
   (merge 7213c28818 js/no-pager-shorthand later to maint).

 * "git rebase" learned "--rebase-merges" to transplant the whole
   topology of commit graph elsewhere.

 * "git status" learned to pay attention to UI related diff
   configuration variables such as diff.renames.

 * The command line completion mechanism (in contrib/) learned to load
   custom completion file for "git $command" where $command is a
   custom "git-$command" that the end user has on the $PATH when using
   newer version of bash.

 * "git send-email" can sometimes offer confirmation dialog "Send this
   email?" with choices 'Yes', 'No', 'Quit', and 'All'.  A new action
   'Edit' has been added to this dialog's choice.

 * With merge.renames configuration set to false, the recursive merge
   strategy can be told not to spend cycles trying to find renamed
   paths and merge them accordingly.

 * "git status" learned to honor a new status.renames configuration to
   skip rename detection, which could be useful for those who want to
   do so without disabling the default rename detection done by the
   "git diff" command.

 * Command line completion (in contrib/) learned to complete pathnames
   for various commands better.

 * "git blame" learns to unhighlight uninteresting metadata from the
   originating commit on lines that are the same as the previous one,
   and also paint lines in different colors depending on the age of
   the commit.

 * Transfer protocol v2 learned to support the partial clone.

 * When a short hexadecimal string is used to name an object but there
   are multiple objects that share the string as the prefix of their
   names, the code lists these ambiguous candidates in a help message.
   These object names are now sorted according to their types for
   easier eyeballing.

 * "git fetch $there $refspec" that talks over protocol v2 can take
   advantage of server-side ref filtering; the code has been extended
   so that this mechanism triggers also when fetching with configured
   refspec.

 * Our HTTP client code used to advertise that we accept gzip encoding
   from the other side; instead, just let cURL library to advertise
   and negotiate the best one.

 * "git p4" learned to "unshelve" shelved commit from P4.
   (merge 123f631761 ld/p4-unshelve later to maint).


Performance, Internal Implementation, Development Support etc.

 * A "git fetch" from a repository with insane number of refs into a
   repository that is already up-to-date still wasted too many cycles
   making many lstat(2) calls to see if these objects at the tips
   exist as loose objects locally.  These lstat(2) calls are optimized
   away by enumerating all loose objects beforehand.
   It is unknown if the new strategy negatively affects existing use
   cases, fetching into a repository with many loose objects from a
   repository with small number of refs.

 * Git can be built to use either v1 or v2 of the PCRE library, and so
   far, the build-time configuration USE_LIBPCRE=YesPlease instructed
   the build procedure to use v1, but now it means v2.  USE_LIBPCRE1
   and USE_LIBPCRE2 can be used to explicitly choose which version to
   use, as before.

 * The build procedure learned to optionally use symbolic links
   (instead of hardlinks and copies) to install "git-foo" for built-in
   commands, whose binaries are all identical.

 * Conversion from uchar[20] to struct object_id continues.

 * The way "git worktree prune" worked internally has been simplified,
   by assuming how "git worktree move" moves an existing worktree to a
   different place.

 * Code clean-up for the "repository" abstraction.
   (merge 00a3da2a13 nd/remove-ignore-env-field later to maint).

 * Code to find the length to uniquely abbreviate object names based
   on packfile content, which is a relatively recent addtion, has been
   optimized to use the same fan-out table.

 * The mechanism to use parse-options API to automate the command line
   completion continues to get extended and polished.

 * Copies of old scripted Porcelain commands in contrib/examples/ have
   been removed.

 * Some tests that rely on the exact hardcoded values of object names
   have been updated in preparation for hash function migration.

 * Perf-test update.

 * Test helper update.

 * The effort continues to refactor the internal global data structure
   to make it possible to open multiple repositories, work with and
   then close them,

 * Small test-helper programs have been consolidated into a single
   binary.

 * API clean-up around ref-filter code.

 * Shell completion (in contrib) that gives list of paths have been
   optimized somewhat.

 * The index file is updated to record the fsmonitor section after a
   full scan was made, to avoid wasting the effort that has already
   spent.

 * Performance measuring framework in t/perf learned to help bisecting
   performance regressions.

 * Some multi-word source filenames are being renamed to separate
   words with dashes instead of underscores.

 * An reusable "memory pool" implementation has been extracted from
   fast-import.c, which in turn has become the first user of the
   mem-pool API.

 * A build-time option has been added to allow Git to be told to refer
   to its associated files relative to the main binary, in the same
   way that has been possible on Windows for quite some time, for
   Linux, BSDs and Darwin.

 * Precompute and store information necessary for ancestry traversal
   in a separate file to optimize graph walking.

 * The effort to pass the repository in-core structure throughout the
   API continues.  This round deals with the code that implements the
   refs/replace/ mechanism.

 * The build procedure "make DEVELOPER=YesPlease" learned to enable a
   bit more warning options depending on the compiler used to help
   developers more.  There also is "make DEVOPTS=tokens" knob
   available now, for those who want to help fixing warnings we
   usually ignore, for example.

 * A new version of the transport protocol is being worked on.

 * The code to interface to GPG has been restructured somewhat to make
   it cleaner to integrate with other types of signature systems later.

 * The code has been taught to use the duplicated information stored
   in the commit-graph file to learn the tree object name for a commit
   to avoid opening and parsing the commit object when it makes sense
   to do so.

 * "git gc" in a large repository takes a lot of time as it considers
   to repack all objects into one pack by default.  The command has
   been taught to pretend as if the largest existing packfile is
   marked with ".keep" so that it is left untouched while objects in
   other packs and loose ones are repacked.

 * The transport protocol v2 is getting updated further.

 * The codepath around object-info API has been taught to take the
   repository object (which in turn tells the API which object store
   the objects are to be located).

 * "git pack-objects" needs to allocate tons of "struct object_entry"
   while doing its work, and shrinking its size helps the performance
   quite a bit.

 * The implementation of "git rebase -i --root" has been updated to use
   the sequencer machinery more.

 * Developer support update, by using BUG() macro instead of die() to
   mark codepaths that should not happen more clearly.

 * Developer support.  Use newer GCC on one of the builds done at
   TravisCI.org to get more warnings and errors diagnosed.

 * Conversion from uchar[20] to struct object_id continues.

 * By code restructuring of submodule merge in merge-recursive,
   informational messages from the codepath are now given using the
   same mechanism as other output, and honor the merge.verbosity
   configuration.  The code also learned to give a few new messages
   when a submodule three-way merge resolves cleanly when one side
   records a descendant of the commit chosen by the other side.

 * Avoid unchecked snprintf() to make future code auditing easier.
   (merge ac4896f007 jk/snprintf-truncation later to maint).

 * Many tests hardcode the raw object names, which would change once
   we migrate away from SHA-1.  While some of them must test against
   exact object names, most of them do not have to use hardcoded
   constants in the test.  The latter kind of tests have been updated
   to test the moral equivalent of the original without hardcoding the
   actual object names.

 * The list of commands with their various attributes were spread
   across a few places in the build procedure, but it now is getting a
   bit more consolidated to allow more automation.

 * Quite a many tests assumed that newly created refs are made as
   loose refs using the files backend, which have been updated to use
   proper plumbing like rev-parse and update-ref, to avoid breakage
   once we start using different ref backends.


Also contains various documentation updates and code clean-ups.


Fixes since v2.17
-----------------

 * "git shortlog cruft" aborted with a BUG message when run outside a
   Git repository.  The command has been taught to complain about
   extra and unwanted arguments on its command line instead in such a
   case.
   (merge 4aa0161e83 ma/shortlog-revparse later to maint).

 * "git stash push -u -- <pathspec>" gave an unnecessary and confusing
   error message when there was no tracked files that match the
   <pathspec>, which has been fixed.
   (merge 353278687e tg/stash-untracked-with-pathspec-fix later to maint).

 * "git tag --contains no-such-commit" gave a full list of options
   after giving an error message.
   (merge 3bb0923f06 ps/contains-id-error-message later to maint).

 * "diff-highlight" filter (in contrib/) learned to undertand "git log
   --graph" output better.
   (merge 4551fbba14 jk/diff-highlight-graph-fix later to maint).

 * when refs that do not point at committish are given, "git
   filter-branch" gave a misleading error messages.  This has been
   corrected.
   (merge f78ab355e7 yk/filter-branch-non-committish-refs later to maint).

 * "git submodule status" misbehaved on a submodule that has been
   removed from the working tree.
   (merge 74b6bda32f rs/status-with-removed-submodule later to maint).

 * When credential helper exits very quickly without reading its
   input, it used to cause Git to die with SIGPIPE, which has been
   fixed.
   (merge a0d51e8d0e eb/cred-helper-ignore-sigpipe later to maint).

 * "git rebase --keep-empty" still removed an empty commit if the
   other side contained an empty commit (due to the "does an
   equivalent patch exist already?" check), which has been corrected.
   (merge 3d946165e1 pw/rebase-keep-empty-fixes later to maint).

 * Some codepaths, including the refs API, get and keep relative
   paths, that go out of sync when the process does chdir(2).  The
   chdir-notify API is introduced to let these codepaths adjust these
   cached paths to the new current directory.
   (merge fb9c2d2703 jk/relative-directory-fix later to maint).

 * "cd sub/dir && git commit ../path" ought to record the changes to
   the file "sub/path", but this regressed long time ago.
   (merge 86238e07ef bw/commit-partial-from-subdirectory-fix later to maint).

 * Recent introduction of "--log-destination" option to "git daemon"
   did not work well when the daemon was run under "--inetd" mode.
   (merge e67d906d73 lw/daemon-log-destination later to maint).

 * Small fix to the autoconf build procedure.
   (merge 249482daf0 es/fread-reads-dir-autoconf-fix later to maint).

 * Fix an unexploitable (because the oversized contents are not under
   attacker's control) buffer overflow.
   (merge d8579accfa bp/fsmonitor-bufsize-fix later to maint).

 * Recent simplification of build procedure forgot a bit of tweak to
   the build procedure of contrib/mw-to-git/
   (merge d8698987f3 ab/simplify-perl-makefile later to maint).

 * Moving a submodule that itself has submodule in it with "git mv"
   forgot to make necessary adjustment to the nested sub-submodules;
   now the codepath learned to recurse into the submodules.

 * "git config --unset a.b", when "a.b" is the last variable in an
   otherwise empty section "a", left an empty section "a" behind, and
   worse yet, a subsequent "git config a.c value" did not reuse that
   empty shell and instead created a new one.  These have been
   (partially) corrected.
   (merge c71d8bb38a js/empty-config-section-fix later to maint).

 * "git worktree remove" learned that "-f" is a shorthand for
   "--force" option, just like for "git worktree add".
   (merge d228eea514 sb/worktree-remove-opt-force later to maint).

 * The completion script (in contrib/) learned to clear cached list of
   command line options upon dot-sourcing it again in a more efficient
   way.
   (merge 94408dc71c sg/completion-clear-cached later to maint).

 * "git svn" had a minor thinko/typo which has been fixed.
   (merge 51db271587 ab/git-svn-get-record-typofix later to maint).

 * During a "rebase -i" session, the code could give older timestamp
   to commits created by later "pick" than an earlier "reword", which
   has been corrected.
   (merge 12f7babd6b js/ident-date-fix later to maint).

 * "git submodule status" did not check the symbolic revision name it
   computed for the submodule HEAD is not the NULL, and threw it at
   printf routines, which has been corrected.
   (merge 0b5e2ea7cf nd/submodule-status-fix later to maint).

 * When fed input that already has In-Reply-To: and/or References:
   headers and told to add the same information, "git send-email"
   added these headers separately, instead of appending to an existing
   one, which is a violation of the RFC.  This has been corrected.
   (merge 256be1d3f0 sa/send-email-dedup-some-headers later to maint).

 * "git fast-export" had a regression in v2.15.0 era where it skipped
   some merge commits in certain cases, which has been corrected.
   (merge be011bbe00 ma/fast-export-skip-merge-fix later to maint).

 * The code did not propagate the terminal width to subprocesses via
   COLUMNS environment variable, which it now does.  This caused
   trouble to "git column" helper subprocess when "git tag --column=row"
   tried to list the existing tags on a display with non-default width.
   (merge b5d5a567fb nd/term-columns later to maint).

 * We learned that our source files with ".pl" and ".py" extensions
   are Perl and Python files respectively and changes to them are
   better viewed as such with appropriate diff drivers.
   (merge 7818b619e2 ab/perl-python-attrs later to maint).

 * "git rebase -i" sometimes left intermediate "# This is a
   combination of N commits" message meant for the human consumption
   inside an editor in the final result in certain corner cases, which
   has been fixed.
   (merge 15ef69314d js/rebase-i-clean-msg-after-fixup-continue later to maint).

 * A test to see if the filesystem normalizes UTF-8 filename has been
   updated to check what we need to know in a more direct way, i.e. a
   path created in NFC form can be accessed with NFD form (or vice
   versa) to cope with APFS as well as HFS.
   (merge 742ae10e35 tb/test-apfs-utf8-normalization later to maint).

 * "git format-patch --cover --attach" created a broken MIME multipart
   message for the cover letter, which has been fixed by keeping the
   cover letter as plain text file.
   (merge 50cd54ef4e bc/format-patch-cover-no-attach later to maint).

 * The split-index feature had a long-standing and dormant bug in
   certain use of the in-core merge machinery, which has been fixed.
   (merge 7db118303a en/unpack-trees-split-index-fix later to maint).

 * Asciidoctor gives a reasonable imitation for AsciiDoc, but does not
   render illustration in a literal block correctly when indented with
   HT by default. The problem is fixed by forcing 8-space tabs.
   (merge 379805051d bc/asciidoctor-tab-width later to maint).

 * Code clean-up to adjust to a more recent lockfile API convention that
   allows lockfile instances kept on the stack.
   (merge 0fa5a2ed8d ma/lockfile-cleanup later to maint).

 * the_repository->index is not a allocated piece of memory but
   repo_clear() indiscriminately attempted to free(3) it, which has
   been corrected.
   (merge 74373b5f10 nd/repo-clear-keep-the-index later to maint).

 * Code clean-up to avoid non-standard-conformant pointer arithmetic.
   (merge c112084af9 rs/no-null-ptr-arith-in-fast-export later to maint).

 * Code clean-up to turn history traversal more robust in a
   semi-corrupt repository.
   (merge 8702b30fd7 jk/unavailable-can-be-missing later to maint).

 * "git update-ref A B" is supposed to ensure that ref A does not yet
   exist when B is a NULL OID, but this check was not done correctly
   for pseudo-refs outside refs/ hierarchy, e.g. MERGE_HEAD.

 * "git submodule update" and "git submodule add" supported the
   "--reference" option to borrow objects from a neighbouring local
   repository like "git clone" does, but lacked the more recent
   invention "--dissociate".  Also "git submodule add" has been taught
   to take the "--progress" option.
   (merge a0ef29341a cf/submodule-progress-dissociate later to maint).

 * Update credential-netrc helper (in contrib/) to allow customizing
   the GPG used to decrypt the encrypted .netrc file.
   (merge 786ef50a23 lm/credential-netrc later to maint).

 * "git submodule update" attempts two different kinds of "git fetch"
   against the upstream repository to grab a commit bound at the
   submodule's path, but it incorrectly gave up if the first kind
   (i.e. a normal fetch) failed, making the second "last resort" one
   (i.e. fetching an exact commit object by object name) ineffective.
   This has been corrected.
   (merge e30d833671 sb/submodule-update-try-harder later to maint).

 * Error behaviour of "git grep" when it cannot read the index was
   inconsistent with other commands that uses the index, which has
   been corrected to error out early.
   (merge b2aa84c789 sb/grep-die-on-unreadable-index later to maint).

 * We used to call regfree() after regcomp() failed in some codepaths,
   which have been corrected.
   (merge 17154b1576 ma/regex-no-regfree-after-comp-fail later to maint).

 * The import-tars script (in contrib/) has been taught to handle
   tarballs with overly long paths that use PAX extended headers.
   (merge 12ecea46e3 pa/import-tars-long-names later to maint).

 * "git rev-parse Y..." etc. misbehaved when given endpoints were
   not committishes.
   (merge 0ed556d38f en/rev-parse-invalid-range later to maint).

 * "git pull -recurse-submodules --rebase", when the submodule
   repository's history did not have anything common between ours and
   the upstream's, failed to execute.  We need to fetch from them to
   continue even in such a case.
   (merge 4d36f88be7 jt/submodule-pull-recurse-rebase later to maint).

 * "git remote update" can take both a single remote nickname and a
   nickname for remote groups, but only one of them was documented.
   (merge a97447a42a nd/remote-update-doc later to maint).

 * Other minor doc, test and build updates and code cleanups.
   (merge 248f66ed8e nd/trace-with-env later to maint).
   (merge 14ced5562c ys/bisect-object-id-missing-conversion-fix later to maint).
   (merge 5988eb631a ab/doc-hash-brokenness later to maint).
   (merge a4d4e32a70 pk/test-avoid-pipe-hiding-exit-status later to maint).
   (merge 05e293c1ac jk/flockfile-stdio later to maint).
   (merge e9184b0789 jk/t5561-missing-curl later to maint).
   (merge b1801b85a3 nd/worktree-move later to maint).
   (merge bbd374dd20 ak/bisect-doc-typofix later to maint).
   (merge 4855f06fb3 mn/send-email-credential-doc later to maint).
   (merge 8523b1e355 en/doc-typoes later to maint).
   (merge 43b44ccfe7 js/t5404-path-fix later to maint).
   (merge decf711fc1 ps/test-chmtime-get later to maint).
   (merge 22d11a6e8e es/worktree-docs later to maint).
   (merge 92a5dbbc22 tg/use-git-contacts later to maint).
   (merge adc887221f tq/t1510 later to maint).
   (merge bed21a8ad6 sg/doc-gc-quote-mismatch-fix later to maint).
   (merge 73364e4f10 tz/doc-git-urls-reference later to maint).
   (merge cd1e606bad bc/mailmap-self later to maint).
   (merge f7997e3682 ao/config-api-doc later to maint).
   (merge ee930754d8 jk/apply-p-doc later to maint).
   (merge 011b648646 nd/pack-format-doc later to maint).
   (merge 87a6bb701a sg/t5310-jgit-bitmap-test later to maint).
   (merge f6b82970aa sg/t5516-fixes later to maint).
   (merge 4362da078e sg/t7005-spaces-in-filenames-cleanup later to maint).
   (merge 7d0ee47c11 js/test-unset-prereq later to maint).
   (merge 5356a3c354 ah/misc-doc-updates later to maint).
   (merge 92c4a7a129 nd/completion-aliasfiletype-typofix later to maint).
   (merge 58bd77b66a nd/pack-unreachable-objects-doc later to maint).
   (merge 4ed79d5203 sg/t6500-no-redirect-of-stdin later to maint).
   (merge 17b8a2d6cd jk/config-blob-sans-repo later to maint).
   (merge 590551ca2c rd/tag-doc-lightweight later to maint).
   (merge 44f560fc16 rd/init-typo later to maint).
   (merge f156a0934a rd/p4-doc-markup-env later to maint).
   (merge 2a00502b14 tg/doc-sec-list later to maint).

----------------------------------------------------------------

Changes since v2.17.0 are as follows:

Anders Kaseorg (1):
      Documentation/git-bisect.txt: git bisect term → git bisect terms

Andreas Heiduk (9):
      git-svn: search --authors-prog in PATH too
      git-svn: allow empty email-address using authors-prog and authors-file
      doc: improve formatting in githooks.txt
      doc: align 'diff --no-index' in text and synopsis
      doc: clarify ignore rules for git ls-files
      doc: add '-d' and '-o' for 'git push'
      git-svn: remove ''--add-author-from' for 'commit-diff'
      doc: add note about shell quoting to revision.txt
      doc: normalize [--options] to [options] in git-diff

Antonio Ospite (1):
      doc: fix config API documentation about config_with_options

Beat Bolli (1):
      git-gui: search for all current SSH key types

Ben Peart (7):
      fsmonitor: fix incorrect buffer size when printing version number
      fsmonitor: force index write after full scan
      test-drop-caches: simplify delay loading of NtSetSystemInformation
      merge: update documentation for {merge,diff}.renameLimit
      merge: add merge.renames config setting
      merge: pass aggressive when rename detection is turned off
      add status config and command line options for rename detection

Bill Ritcher (1):
      mergetools: add support for guiffy

Birger Skogeng Pedersen (1):
      git-gui: bind CTRL/CMD+numpad ENTER to do_commit

Brandon Williams (79):
      pkt-line: introduce packet_read_with_status
      pkt-line: allow peeking a packet line without consuming it
      pkt-line: add delim packet support
      upload-pack: convert to a builtin
      upload-pack: factor out processing lines
      transport: use get_refs_via_connect to get refs
      connect: convert get_remote_heads to use struct packet_reader
      connect: discover protocol version outside of get_remote_heads
      transport: store protocol version
      protocol: introduce enum protocol_version value protocol_v2
      test-pkt-line: introduce a packet-line test helper
      serve: introduce git-serve
      ls-refs: introduce ls-refs server command
      connect: request remote refs using v2
      transport: convert get_refs_list to take a list of ref prefixes
      transport: convert transport_get_remote_refs to take a list of ref prefixes
      ls-remote: pass ref prefixes when requesting a remote's refs
      fetch: pass ref prefixes when fetching
      push: pass ref prefixes when pushing
      upload-pack: introduce fetch server command
      fetch-pack: perform a fetch using v2
      fetch-pack: support shallow requests
      connect: refactor git_connect to only get the protocol version once
      connect: don't request v2 when pushing
      transport-helper: remove name parameter
      transport-helper: refactor process_connect_service
      transport-helper: introduce stateless-connect
      pkt-line: add packet_buf_write_len function
      remote-curl: create copy of the service name
      remote-curl: store the protocol version the server responded with
      http: allow providing extra headers for http requests
      http: don't always add Git-Protocol header
      http: eliminate "# service" line when using protocol v2
      remote-curl: implement stateless-connect command
      remote-curl: don't request v2 when pushing
      commit: allow partial commits with relative paths
      serve: introduce the server-option capability
      ls-remote: send server options when using protocol v2
      fetch: send server options when using protocol v2
      refspec: move refspec parsing logic into its own file
      refspec: rename struct refspec to struct refspec_item
      refspec: factor out parsing a single refspec
      refspec: introduce struct refspec
      refspec: convert valid_fetch_refspec to use parse_refspec
      submodule--helper: convert push_check to use struct refspec
      pull: convert get_tracking_branch to use refspec_item_init
      transport: convert transport_push to use struct refspec
      remote: convert check_push_refs to use struct refspec
      remote: convert match_push_refs to use struct refspec
      clone: convert cmd_clone to use refspec_item_init
      fast-export: convert to use struct refspec
      remote: convert push refspecs to struct refspec
      remote: convert fetch refspecs to struct refspec
      remote: remove add_prune_tags_to_fetch_refspec
      transport-helper: convert to use struct refspec
      fetch: convert fetch_one to use struct refspec
      fetch: convert refmap to use struct refspec
      refspec: remove the deprecated functions
      fetch: convert do_fetch to take a struct refspec
      fetch: convert get_ref_map to take a struct refspec
      fetch: convert prune_refs to take a struct refspec
      remote: convert get_stale_heads to take a struct refspec
      remote: convert apply_refspecs to take a struct refspec
      remote: convert query_refspecs to take a struct refspec
      remote: convert get_ref_match to take a struct refspec
      remote: convert match_explicit_refs to take a struct refspec
      push: check for errors earlier
      push: convert to use struct refspec
      transport: convert transport_push to take a struct refspec
      send-pack: store refspecs in a struct refspec
      transport: remove transport_verify_remote_names
      http-push: store refspecs in a struct refspec
      remote: convert match_push_refs to take a struct refspec
      remote: convert check_push_refs to take a struct refspec
      submodule: convert push_unpushed_submodules to take a struct refspec
      refspec: consolidate ref-prefix generation logic
      fetch: generate ref-prefixes when using a configured refspec
      remote-curl: accept all encodings supported by curl
      remote-curl: accept compressed responses with protocol v2

Casey Fitzpatrick (3):
      submodule: clean up substitutions in script
      submodule: add --progress option to add command
      submodule: add --dissociate option to add/update commands

Christian Couder (7):
      perf/aggregate: add display_dir()
      perf/aggregate: add --sort-by=regression option
      perf/run: add --subsection option
      t/perf: add scripts to bisect performance regressions
      perf/aggregate: use Getopt::Long for option parsing
      perf/bisect_run_script: disable codespeed
      t990X: use '.git/objects' as 'deep inside .git' path

Christian Hesse (2):
      perl: fix installing modules from contrib
      Makefile: mark perllibdir as a .PHONY target

Clemens Buchacher (2):
      git-gui: workaround ttk:style theme use
      completion: improve ls-files filter performance

Dan Jacques (3):
      Makefile: generate Perl header from template file
      Makefile: add Perl runtime prefix support
      exec_cmd: RUNTIME_PREFIX on some POSIX systems

David Turner (1):
      t: make many tests depend less on the refs being files

Derrick Stolee (20):
      packfile: define and use bsearch_pack()
      sha1_name: use bsearch_pack() for abbreviations
      csum-file: rename hashclose() to finalize_hashfile()
      csum-file: refactor finalize_hashfile() method
      commit-graph: add format document
      graph: add commit graph design document
      commit-graph: create git-commit-graph builtin
      commit-graph: implement write_commit_graph()
      commit-graph: implement git-commit-graph write
      commit-graph: implement git commit-graph read
      commit-graph: add core.commitGraph setting
      commit-graph: close under reachability
      commit: integrate commit graph with commit parsing
      commit-graph: read only from specific pack-indexes
      commit-graph: build graph from starting commits
      commit-graph: implement "--append" option
      treewide: rename tree to maybe_tree
      commit: create get_commit_tree() method
      treewide: replace maybe_tree with accessor methods
      commit-graph: lazy-load trees for commits

Drew DeVault (1):
      git-send-email: allow re-editing of message

Eckhard S. Maaß (1):
      wt-status: use settings from git_diff_ui_config

Elijah Newren (72):
      directory rename detection: basic testcases
      directory rename detection: directory splitting testcases
      directory rename detection: testcases to avoid taking detection too far
      directory rename detection: partially renamed directory testcase/discussion
      directory rename detection: files/directories in the way of some renames
      directory rename detection: testcases checking which side did the rename
      directory rename detection: more involved edge/corner testcases
      directory rename detection: testcases exploring possibly suboptimal merges
      directory rename detection: miscellaneous testcases to complete coverage
      directory rename detection: tests for handling overwriting untracked files
      directory rename detection: tests for handling overwriting dirty files
      merge-recursive: move the get_renames() function
      merge-recursive: introduce new functions to handle rename logic
      merge-recursive: fix leaks of allocated renames and diff_filepairs
      merge-recursive: make !o->detect_rename codepath more obvious
      merge-recursive: split out code for determining diff_filepairs
      merge-recursive: make a helper function for cleanup for handle_renames
      merge-recursive: add get_directory_renames()
      merge-recursive: check for directory level conflicts
      merge-recursive: add computation of collisions due to dir rename & merging
      merge-recursive: check for file level conflicts then get new name
      merge-recursive: when comparing files, don't include trees
      merge-recursive: apply necessary modifications for directory renames
      merge-recursive: avoid clobbering untracked files with directory renames
      merge-recursive: fix overwriting dirty files involved in renames
      merge-recursive: fix remaining directory rename + dirty overwrite cases
      directory rename detection: new testcases showcasing a pair of bugs
      merge-recursive: avoid spurious rename/rename conflict from dir renames
      merge-recursive: ensure we write updates for directory-renamed file
      Documentation: fix several one-character-off spelling errors
      Documentation: normalize spelling of 'normalised'
      directory rename detection: basic testcases
      directory rename detection: directory splitting testcases
      directory rename detection: testcases to avoid taking detection too far
      directory rename detection: partially renamed directory testcase/discussion
      directory rename detection: files/directories in the way of some renames
      directory rename detection: testcases checking which side did the rename
      directory rename detection: more involved edge/corner testcases
      directory rename detection: testcases exploring possibly suboptimal merges
      directory rename detection: miscellaneous testcases to complete coverage
      directory rename detection: tests for handling overwriting untracked files
      directory rename detection: tests for handling overwriting dirty files
      merge-recursive: move the get_renames() function
      merge-recursive: introduce new functions to handle rename logic
      merge-recursive: fix leaks of allocated renames and diff_filepairs
      merge-recursive: make !o->detect_rename codepath more obvious
      merge-recursive: split out code for determining diff_filepairs
      merge-recursive: make a helper function for cleanup for handle_renames
      Make running git under other debugger-like programs easy
      unpack_trees: fix breakage when o->src_index != o->dst_index
      merge-recursive: add get_directory_renames()
      merge-recursive: check for directory level conflicts
      merge-recursive: add computation of collisions due to dir rename & merging
      merge-recursive: check for file level conflicts then get new name
      merge-recursive: when comparing files, don't include trees
      merge-recursive: apply necessary modifications for directory renames
      merge-recursive: avoid clobbering untracked files with directory renames
      merge-recursive: fix overwriting dirty files involved in renames
      merge-recursive: fix remaining directory rename + dirty overwrite cases
      directory rename detection: new testcases showcasing a pair of bugs
      merge-recursive: avoid spurious rename/rename conflict from dir renames
      merge-recursive: improve add_cacheinfo error handling
      merge-recursive: move more is_dirty handling to merge_content
      merge-recursive: avoid triggering add_cacheinfo error with dirty mod
      t6046: testcases checking whether updates can be skipped in a merge
      merge-recursive: fix was_tracked() to quit lying with some renamed paths
      merge-recursive: fix remainder of was_dirty() to use original index
      merge-recursive: make "Auto-merging" comment show for other merges
      merge-recursive: fix check for skipability of working tree updates
      merge-recursive: provide pair of `unpack_trees_{start,finish}()`
      rev-parse: check lookup'ed commit references for NULL
      RelNotes: remove duplicate release note

Eric Sunshine (5):
      t3200: verify "branch --list" sanity when rebasing from detached HEAD
      t2028: tighten grep expression to make "move worktree" test more robust
      git-worktree.txt: recommend 'git worktree remove' over manual deletion
      git-worktree.txt: unify command-line prompt in example blocks
      configure.ac: fix botched FREAD_READS_DIRECTORIES check

Erik E Brady (1):
      credential: ignore SIGPIPE when writing to credential helpers

Florian Gamböck (1):
      completion: load completion file for external subcommand

Harald Nordgren (1):
      ls-remote: create '--sort' option

Jameson Miller (3):
      fast-import: rename mem_pool type to mp_block
      fast-import: introduce mem_pool type
      mem-pool: move reusable parts of memory pool into its own file

Jeff King (54):
      diff-highlight: correct test graph diagram
      diff-highlight: use test_tick in graph test
      diff-highlight: prefer "echo" to "cat" in tests
      diff-highlight: test interleaved parallel lines of history
      diff-highlight: test graphs with --color
      diff-highlight: use flush() helper consistently
      diff-highlight: detect --graph by indent
      set_git_dir: die when setenv() fails
      add chdir-notify API
      set_work_tree: use chdir_notify
      refs: use chdir_notify to update cached relative paths
      config: move flockfile() closer to unlocked functions
      t5561: drop curl stderr redirects
      t5561: skip tests if curl is not available
      ref-filter: use "struct object_id" consistently
      ref-filter: make ref_array_item allocation more consistent
      ref-filter: factor ref_array pushing into its own function
      t7004: fix mistaken tag name
      gpg-interface: handle bool user.signingkey
      gpg-interface: modernize function declarations
      gpg-interface: use size_t for signature buffer size
      gpg-interface: fix const-correctness of "eol" pointer
      gpg-interface: extract gpg line matching helper
      gpg-interface: find the last gpg signature line
      apply: clarify "-p" documentation
      pager: set COLUMNS to term_columns()
      mark_tree_contents_uninteresting(): drop missing object check
      mark_parents_uninteresting(): drop missing object check
      mark_parents_uninteresting(): replace list with stack
      mark_parents_uninteresting(): avoid most allocation
      get_main_ref_store: BUG() when outside a repository
      config: die when --blob is used outside a repository
      http: use strbufs instead of fixed buffers
      log_write_email_headers: use strbufs
      shorten_unambiguous_ref: use xsnprintf
      fmt_with_err: add a comment that truncation is OK
      submodule-config: verify submodule names as paths
      is_ntfs_dotgit: use a size_t for traversing string
      is_hfs_dotgit: match other .git files
      skip_prefix: add case-insensitive variant
      verify_path: drop clever fallthrough
      verify_dotfile: mention case-insensitivity in comment
      update-index: stat updated files earlier
      verify_path: disallow symlinks in .gitmodules
      index-pack: make fsck error message more specific
      fsck: simplify ".git" check
      fsck: actually fsck blob data
      fsck: detect gitmodules files
      fsck: handle promisor objects in .gitmodules check
      fsck: check .gitmodules content
      fsck: call fsck_finish() after fscking objects
      unpack-objects: call fsck_finish() after fscking objects
      index-pack: check .gitmodules files with --strict
      fsck: complain when .gitmodules is a symlink

Johannes Schindelin (68):
      git_config_set: fix off-by-two
      t1300: rename it to reflect that `repo-config` was deprecated
      t1300: demonstrate that --replace-all can "invent" newlines
      config --replace-all: avoid extra line breaks
      t1300: avoid relying on a bug
      t1300: remove unreasonable expectation from TODO
      t5404: relax overzealous test
      t1300: add a few more hairy examples of sections becoming empty
      t1300: `--unset-all` can leave an empty section behind (bug)
      config: introduce an optional event stream while parsing
      config: avoid using the global variable `store`
      config_set_store: rename some fields for consistency
      git_config_set: do not use a state machine
      git_config_set: make use of the config parser's event stream
      git config --unset: remove empty sections (in the common case)
      git_config_set: reuse empty sections
      exec_cmd: provide a new-style RUNTIME_PREFIX helper for Windows
      mingw/msvc: use the new-style RUNTIME_PREFIX helper
      color: introduce support for colorizing stderr
      push: test to verify that push errors are colored
      config: document the settings to colorize push errors/hints
      gettext: avoid initialization if the locale dir is not present
      git_setup_gettext: plug memory leak
      sequencer: avoid using errno clobbered by rollback_lock_file()
      sequencer: make rearrange_squash() a bit more obvious
      sequencer: refactor how original todo list lines are accessed
      sequencer: offer helpful advice when a command was rescheduled
      sequencer: introduce new commands to reset the revision
      sequencer: introduce the `merge` command
      sequencer: fast-forward `merge` commands, if possible
      rebase-helper --make-script: introduce a flag to rebase merges
      rebase: introduce the --rebase-merges option
      sequencer: make refs generated by the `label` command worktree-local
      sequencer: handle post-rewrite for merge commands
      rebase --rebase-merges: avoid "empty merges"
      pull: accept --rebase=merges to recreate the branch topology
      rebase -i: introduce --rebase-merges=[no-]rebase-cousins
      rebase -i --rebase-merges: add a section to the man page
      argv_array: offer to split a string by whitespace
      commit: Let the callback of for_each_mergetag return on error
      replace: avoid using die() to indicate a bug
      tests: introduce test_unset_prereq, for debugging
      replace: "libify" create_graft() and callees
      replace: prepare create_graft() for converting graft files wholesale
      replace: introduce --convert-graft-file
      Add a test for `git replace --convert-graft-file`
      Deprecate support for .git/info/grafts
      filter-branch: stop suggesting to use grafts
      technical/shallow: stop referring to grafts
      technical/shallow: describe why shallow cannot use replace refs
      Remove obsolete script to convert grafts to replace refs
      rebase -i: demonstrate bugs with fixup!/squash! commit messages
      rebase -i: Handle "combination of <n> commits" with GETTEXT_POISON
      sequencer: always commit without editing when asked for
      rebase --skip: clean up commit message after a failed fixup/squash
      sequencer: extract helper to update active_cache_tree
      sequencer: learn about the special "fake root commit" handling
      rebase -i --root: let the sequencer handle even the initial part
      sequencer: allow introducing new root commits
      rebase --rebase-merges: a "merge" into a new root is a fast-forward
      rebase --rebase-merges: root commits can be cousins, too
      test-tool: help verifying BUG() code paths
      run-command: use BUG() to report bugs, not die()
      Replace all die("BUG: ...") calls by BUG() ones
      Convert remaining die*(BUG) messages
      config: a user-provided invalid section is not a BUG
      is_ntfs_dotgit: match other .git files
      is_{hfs,ntfs}_dotgitmodules: add tests

Johannes Sixt (2):
      sequencer: reset the committer date before commits
      git: add -P as a short option for --no-pager

Jonathan Nieder (6):
      sha1_file: allow map_sha1_file_1 to handle arbitrary repositories
      sha1_file: allow sha1_loose_object_info to handle arbitrary repositories
      Makefile: remove unused @@PERLLIBDIR@@ substitution variable
      Makefile: quote $INSTLIBDIR when passing it to sed
      packfile: add repository argument to packed_object_info
      fetch: do not pass ref-prefixes for fetch by exact SHA1

Jonathan Tan (5):
      grep: remove "repo" arg from non-supporting funcs
      upload-pack: fix error message typo
      upload-pack: read config when serving protocol v2
      {fetch,upload}-pack: support filter in protocol v2
      submodule: do not pass null OID to setup_revisions

Junio C Hamano (21):
      stash: fix nonsense pipeline
      The first batch for 2.18 cycle
      The second batch for 2.18
      The third batch for 2.18
      Revert "Merge branch 'en/rename-directory-detection'"
      gc: do not upcase error message shown with die()
      parseopt: handle malformed --expire arguments more nicely
      The fourth batch for 2.18
      The fifth batch for 2.18
      argv-array: return the pushed string from argv_push*()
      Git 2.13.7
      Git 2.14.4
      Git 2.15.2
      Git 2.16.4
      Git 2.17.1
      The sixth batch for 2.18
      The seventh batch for 2.18
      Git 2.18-rc0
      refspec-api: avoid uninitialized field in refspec item
      A bit more topics before -rc1
      Git 2.18-rc1

Kaartic Sivaraam (1):
      branch --list: print useful info whilst interactive rebasing a detached HEAD

Lars Schneider (10):
      strbuf: remove unnecessary NUL assignment in xstrdup_tolower()
      strbuf: add xstrdup_toupper()
      strbuf: add a case insensitive starts_with()
      utf8: teach same_encoding() alternative UTF encoding names
      utf8: add function to detect prohibited UTF-16/32 BOM
      utf8: add function to detect a missing UTF-16/32 BOM
      convert: add 'working-tree-encoding' attribute
      convert: check for detectable errors in UTF encodings
      convert: add tracing for 'working-tree-encoding' attribute
      convert: add round trip check based on 'core.checkRoundtripEncoding'

Leif Middelschulte (1):
      merge-recursive: give notice when submodule commit gets fast-forwarded

Loganaden Velvindron (1):
      http: allow use of TLS 1.3

Lucas Werkmeister (1):
      daemon.c: fix condition for redirecting stderr

Luis Marsano (2):
      git-credential-netrc: adapt to test framework for git
      git-credential-netrc: accept gpg option

Luke Diamand (1):
      git-p4: add unshelve command

Martin Ågren (24):
      git-shortlog.txt: reorder usages
      shortlog: add usage-string for stdin-reading
      shortlog: disallow left-over arguments outside repo
      doc: convert \--option to --option
      doc: convert [\--] to [--]
      git-[short]log.txt: unify quoted standalone --
      git-submodule.txt: quote usage in monospace, drop backslash
      fast-export: fix regression skipping some merge-commits
      http-fetch: make `-a` standard behaviour
      walker: drop fields of `struct walker` which are always 1
      t/helper/test-write-cache: clean up lock-handling
      refs.c: do not die if locking fails in `write_pseudoref()`
      refs.c: do not die if locking fails in `delete_pseudoref()`
      lock_file: make function-local locks non-static
      lock_file: move static locks into functions
      refs.c: refer to "object ID", not "sha1", in error messages
      t1400: add tests around adding/deleting pseudorefs
      refs: handle zero oid for pseudorefs
      merge: setup `opts` later in `checkout_fast_forward()`
      config: free resources of `struct config_store_data`
      config: let `config_store_data_clear()` handle `value_regex`
      config: let `config_store_data_clear()` handle `key`
      regex: do not call `regfree()` if compilation fails
      unpack_trees_options: free messages when done

Michal Nazarewicz (1):
      send-email: simplify Gmail example in the documentation

Michele Locati (1):
      filter-branch: return 2 when nothing to rewrite

Nguyễn Thái Ngọc Duy (108):
      repository: initialize the_repository in main()
      repository.c: move env-related setup code back to environment.c
      repository.c: delete dead functions
      sha1_file.c: move delayed getenv(altdb) back to setup_git_env()
      repository: delete ignore_env member
      gc.txt: more details about what gc does
      worktree: delete dead code
      worktree prune: improve prune logic when worktree is moved
      repository.h: add comment and clarify repo_set_gitdir
      git.c: move cmd_struct declaration up
      git.c: add hidden option --list-parseopt-builtins
      completion: mention the oldest version we need to support
      completion: factor out _git_xxx calling code
      completion: add --option completion for most builtin commands
      completion: delete option-only completion commands
      completion: use __gitcomp_builtin in _git_ls_tree
      completion: use __gitcomp_builtin in _git_cherry
      packfile: keep prepare_packed_git() private
      t/helper: add an empty test-tool program
      t/helper: merge test-chmtime into test-tool
      t/helper: merge test-sha1 into test-tool
      t/helper: merge test-lazy-init-name-hash into test-tool
      t/helper: merge test-config into test-tool
      t/helper: merge test-ctype into test-tool
      t/helper: merge test-date into test-tool
      t/helper: merge (unused) test-delta into test-tool
      t/helper: merge test-drop-caches into test-tool
      t/helper: merge test-dump-cache-tree into test-tool
      t/helper: merge test-dump-split-index into test-tool
      t/helper: merge test-example-decorate into test-tool
      t/helper: merge test-genrandom into test-tool
      t/helper: merge test-hashmap into test-tool
      t/helper: merge test-index-version into test-tool
      t/helper: merge (unused) test-match-trees into test-tool
      t/helper: merge (unused) test-mergesort into test-tool
      t/helper: merge test-mktemp into test-tool
      t/helper: merge test-online-cpus into test-tool
      t/helper: merge test-path-utils into test-tool
      t/helper: merge test-prio-queue into test-tool
      t/helper: merge test-read-cache into test-tool
      t/helper: merge test-ref-store into test-tool
      t/helper: merge test-regex into test-tool
      t/helper: merge test-revision-walking into test-tool
      t/helper: merge test-run-command into test-tool
      t/helper: merge test-scrap-cache-tree into test-tool
      t/helper: merge test-sha1-array into test-tool
      t/helper: merge test-sigchain into test-tool
      t/helper: merge test-strcmp-offset into test-tool
      t/helper: merge test-string-list into test-tool
      t/helper: merge test-submodule-config into test-tool
      t/helper: merge test-subprocess into test-tool
      t/helper: merge test-urlmatch-normalization into test-tool
      t/helper: merge test-wildmatch into test-tool
      t/helper: merge test-write-cache into test-tool
      trace.c: export trace_setup_key
      read-cache.c: make $GIT_TEST_SPLIT_INDEX boolean
      pack-objects: a bit of document about struct object_entry
      pack-objects: turn type and in_pack_type to bitfields
      pack-objects: use bitfield for object_entry::dfs_state
      pack-objects: use bitfield for object_entry::depth
      pack-objects: move in_pack_pos out of struct object_entry
      pack-objects: move in_pack out of struct object_entry
      pack-objects: refer to delta objects by index instead of pointer
      pack-objects: shrink z_delta_size field in struct object_entry
      pack-objects: don't check size when the object is bad
      pack-objects: clarify the use of object_entry::size
      pack-objects: shrink size field in struct object_entry
      pack-objects: shrink delta_size field in struct object_entry
      pack-objects: reorder members to shrink struct object_entry
      ci: exercise the whole test suite with uncommon code in pack-objects
      t7700: have closing quote of a test at the beginning of line
      repack: add --keep-pack option
      gc: add --keep-largest-pack option
      gc: add gc.bigPackThreshold config
      gc: handle a corner case in gc.bigPackThreshold
      gc --auto: exclude base pack if not enough mem to "repack -ad"
      pack-objects: show some progress when counting kept objects
      connect.c: mark die_initial_contact() NORETURN
      Makefile: detect compiler and enable more warnings in DEVELOPER=1
      submodule--helper: don't print null in 'submodule status'
      doc: keep first level section header in upper case
      pack-objects: validation and documentation about unreachable options
      completion: fix misspelled config key aliasesfiletype
      repository: fix free problem with repo_clear(the_repository)
      generate-cmds.sh: factor out synopsis extract code
      generate-cmds.sh: export all commands to command-list.h
      help: use command-list.h for common command list
      Remove common-cmds.h
      pack-format.txt: more details on pack file format
      column: fix off-by-one default width
      commit.h: rearrange 'index' to shrink struct commit
      git.c: convert --list-* to --list-cmds=*
      git --list-cmds: collect command list in a string_list
      completion: implement and use --list-cmds=main,others
      git: support --list-cmds=list-<category>
      help: add "-a --verbose" to list all commands with synopsis
      help: use command-list.txt for the source of guides
      command-list.txt: documentation and guide line
      completion: let git provide the completable command list
      completion: reduce completable command list
      Move declaration for alias.c to alias.h
      completion: add and use --list-cmds=nohelpers
      completion: add and use --list-cmds=alias
      completion: allow to customize the completable command list
      travis-ci: run gcc-8 on linux-gcc jobs
      Use OPT_SET_INT_F() for cmdline option specification
      remote.txt: update documentation for 'update' command
      remote: doc typofix

Olga Telezhnaya (6):
      ref-filter: add shortcut to work with strbufs
      ref-filter: start adding strbufs with errors
      ref-filter: add return value && strbuf to handlers
      ref-filter: change parsing function error handling
      ref-filter: add return value to parsers
      ref-filter: libify get_ref_atom_value()

Orgad Shaneh (1):
      git-rebase--interactive: fix copy-paste mistake

Paul-Sebastian Ungureanu (2):
      parse-options: do not show usage upon invalid option value
      t/helper: 'test-chmtime (--get|-g)' to print only the mtime

Pedro Alvarez Piedehierro (1):
      import-tars: read overlong names from pax extended header

Philip Oakley (1):
      Avoid multiple PREFIX definitions

Phillip Wood (7):
      rebase --root: stop assuming squash_onto is unset
      rebase -i --keep-empty: don't prune empty commits
      rebase: respect --no-keep-empty
      rebase: extend --signoff support
      rebase -p: error out if --signoff is given
      rebase --keep-empty: always use interactive rebase
      rebase --rebase-merges: add test for --keep-empty

Pratik Karki (1):
      test: avoid pipes in git related commands for test

Ramsay Jones (1):
      BUG_exit_code: fix sparse "symbol not declared" warning

René Scharfe (8):
      sha1_name: use bsearch_pack() in unique_in_pack()
      bisect: use oid_to_hex() for converting object_id hashes to hex strings
      run-command: use strbuf_addstr() for adding a string to a strbuf
      submodule: check for NULL return of get_submodule_ref_store()
      replace_object: use oidmap
      fast-export: avoid NULL pointer arithmetic
      t5512: run git fetch inside test
      fsmonitor: use internal argv_array of struct child_process

Robert P. J. Day (4):
      Use proper syntax for replaceables in command docs
      tag: clarify in the doc that a tag can refer to a non-commit object
      init: fix grammar in "templates not found" msg
      p4.txt: Use backquotes for variable names

Ryan Dammrose (1):
      push: colorize errors

SZEDER Gábor (22):
      test_must_be_empty: simplify file existence check
      t9902-completion: add tests demonstrating issues with quoted pathnames
      completion: move __git_complete_index_file() next to its helpers
      completion: simplify prefix path component handling during path completion
      completion: support completing non-ASCII pathnames
      completion: improve handling quoted paths on the command line
      completion: let 'ls-files' and 'diff-index' filter matching paths
      completion: use 'awk' to strip trailing path components
      t9902-completion: ignore COMPREPLY element order in some tests
      completion: remove repeated dirnames with 'awk' during path completion
      completion: improve handling quoted paths in 'git ls-files's output
      completion: fill COMPREPLY directly when completing paths
      completion: reduce overhead of clearing cached --options
      docs/git-gc: fix minor rendering issue
      coccinelle: avoid wrong transformation suggestions from commit.cocci
      t6050-replace: don't disable stdin for the whole test script
      t5310-pack-bitmaps: make JGit tests work with GIT_TEST_SPLIT_INDEX
      t5516-fetch-push: fix 'push with dry-run' test
      t5516-fetch-push: fix broken &&-chain
      t7005-editor: get rid of the SPACES_IN_FILENAMES prereq
      completion: don't return with error from __gitcomp_file_direct()
      t9902-completion: exercise __git_complete_index_file() directly

Sergey Organov (1):
      glossary: substitute "ancestor" for "direct ancestor" in 'push' description.

Stefan Agner (1):
      send-email: avoid duplicate In-Reply-To/References

Stefan Beller (81):
      repository: introduce raw object store field
      object-store: migrate alternates struct and functions from cache.h
      object-store: move alt_odb_list and alt_odb_tail to object store
      object-store: free alt_odb_list
      object-store: move packed_git and packed_git_mru to object store
      object-store: close all packs upon clearing the object store
      pack: move prepare_packed_git_run_once to object store
      pack: move approximate object count to object store
      sha1_file: add raw_object_store argument to alt_odb_usable
      sha1_file: add repository argument to link_alt_odb_entry
      sha1_file: add repository argument to read_info_alternates
      sha1_file: add repository argument to link_alt_odb_entries
      sha1_file: add repository argument to prepare_alt_odb
      sha1_file: allow link_alt_odb_entries to handle arbitrary repositories
      sha1_file: allow prepare_alt_odb to handle arbitrary repositories
      sha1_file: add repository argument to sha1_file_name
      sha1_file: add repository argument to stat_sha1_file
      sha1_file: add repository argument to open_sha1_file
      sha1_file: add repository argument to map_sha1_file_1
      sha1_file: add repository argument to map_sha1_file
      sha1_file: add repository argument to sha1_loose_object_info
      sha1_file: allow sha1_file_name to handle arbitrary repositories
      sha1_file: allow stat_sha1_file to handle arbitrary repositories
      sha1_file: allow open_sha1_file to handle arbitrary repositories
      sha1_file: allow map_sha1_file to handle arbitrary repositories
      packfile: allow prepare_packed_git_mru to handle arbitrary repositories
      packfile: allow rearrange_packed_git to handle arbitrary repositories
      packfile: allow install_packed_git to handle arbitrary repositories
      packfile: add repository argument to prepare_packed_git_one
      packfile: add repository argument to prepare_packed_git
      packfile: add repository argument to reprepare_packed_git
      packfile: allow prepare_packed_git_one to handle arbitrary repositories
      packfile: allow prepare_packed_git to handle arbitrary repositories
      packfile: allow reprepare_packed_git to handle arbitrary repositories
      packfile: add repository argument to find_pack_entry
      packfile: allow find_pack_entry to handle arbitrary repositories
      submodule.h: drop declaration of connect_work_tree_and_git_dir
      submodule-config: allow submodule_free to handle arbitrary repositories
      submodule-config: add repository argument to submodule_from_{name, path}
      submodule-config: remove submodule_from_cache
      submodule: fixup nested submodules after moving the submodule
      write_or_die.c: rename to use dashes in file name
      unicode_width.h: rename to use dash in file name
      exec_cmd: rename to use dash in file name
      sha1_name.c: rename to use dash in file name
      sha1_file.c: rename to use dash in file name
      replace_object.c: rename to use dash in file name
      replace-object: move replace_map to object store
      object-store: move lookup_replace_object to replace-object.h
      replace-object: eliminate replace objects prepared flag
      replace-object: check_replace_refs is safe in multi repo environment
      refs: add repository argument to get_main_ref_store
      refs: add repository argument to for_each_replace_ref
      replace-object: add repository argument to prepare_replace_object
      replace-object: add repository argument to do_lookup_replace_object
      replace-object: add repository argument to lookup_replace_object
      refs: store the main ref store inside the repository struct
      refs: allow for_each_replace_ref to handle arbitrary repositories
      replace-object: allow prepare_replace_object to handle arbitrary repositories
      replace-object: allow do_lookup_replace_object to handle arbitrary repositories
      replace-object: allow lookup_replace_object to handle arbitrary repositories
      worktree: accept -f as short for --force for removal
      builtin/blame: dim uninteresting metadata lines
      builtin/blame: highlight recently changed lines
      builtin/blame: add new coloring scheme config
      cache.h: add repository argument to oid_object_info_extended
      cache.h: add repository argument to oid_object_info
      packfile: add repository argument to retry_bad_packed_offset
      packfile: add repository argument to packed_to_object_type
      packfile: add repository argument to read_object
      packfile: add repository argument to unpack_entry
      packfile: add repository argument to cache_or_unpack_entry
      cache.h: allow oid_object_info to handle arbitrary repositories
      git-rebase--interactive: clarify arguments
      object.c: free replace map in raw_object_store_clear
      replace-object.c: remove the_repository from prepare_replace_object
      grep: handle corrupt index files early
      git-submodule.sh: try harder to fetch a submodule
      submodule.c: move submodule merging to merge-recursive.c
      merge-recursive: i18n submodule merge output and respect verbosity
      object.c: clear replace map before freeing it

Takuto Ikuta (1):
      fetch-pack.c: use oidset to check existence of loose object

Tao Qingyun (1):
      t1510-repo-setup.sh: remove useless mkdir

Taylor Blau (5):
      builtin/config.c: treat type specifiers singularly
      builtin/config.c: support `--type=<type>` as preferred alias for `--<type>`
      builtin/config: introduce `--default`
      config.c: introduce 'git_config_color' to parse ANSI colors
      builtin/config: introduce `color` type specifier

Thomas Gummerer (12):
      stash push: avoid printing errors
      stash push -u: don't create empty stash
      stash: drop superfluos pathspec parameter
      SubmittingPatches: mention the git contacts command
      completion: stop showing 'save' for stash by default
      completion: make stash -p and alias for stash push -p
      worktree: remove extra members from struct add_opts
      worktree: improve message when creating a new worktree
      worktree: factor out dwim_branch function
      worktree: teach "add" to check out existing branches
      SubmittingPatches: replace numbered attributes with names
      note git-security@googlegroups.com in more places

Todd Zullinger (1):
      doc/clone: update caption for GIT URLS cross-reference

Torsten Bögershausen (1):
      test: correct detection of UTF8_NFD_TO_NFC for APFS

Wink Saville (8):
      rebase-interactive: simplify pick_on_preserving_merges
      rebase: update invocation of rebase dot-sourced scripts
      rebase: reindent function git_rebase__interactive
      rebase: extract functions out of git_rebase__interactive
      rebase: add and use git_rebase__interactive__preserve_merges
      rebase: remove unused code paths from git_rebase__interactive
      rebase: remove unused code paths from git_rebase__interactive__preserve_merges
      rebase: remove merges_option and a blank line

Yuki Kokubun (1):
      filter-branch: fix errors caused by refs that point at non-committish

brian m. carlson (123):
      bulk-checkin: convert index_bulk_checkin to struct object_id
      builtin/write-tree: convert to struct object_id
      cache-tree: convert write_*_as_tree to object_id
      cache-tree: convert remnants to struct object_id
      resolve-undo: convert struct resolve_undo_info to object_id
      tree: convert read_tree_recursive to struct object_id
      ref-filter: convert grab_objectname to struct object_id
      strbuf: convert strbuf_add_unique_abbrev to use struct object_id
      wt-status: convert struct wt_status_state to object_id
      Convert find_unique_abbrev* to struct object_id
      http-walker: convert struct object_request to use struct object_id
      send-pack: convert remaining functions to struct object_id
      replace_object: convert struct replace_object to object_id
      builtin/mktag: convert to struct object_id
      archive: convert write_archive_entry_fn_t to object_id
      archive: convert sha1_file_to_archive to struct object_id
      builtin/index-pack: convert struct ref_delta_entry to object_id
      sha1_file: convert read_loose_object to use struct object_id
      sha1_file: convert check_sha1_signature to struct object_id
      streaming: convert open_istream to use struct object_id
      builtin/mktree: convert to struct object_id
      sha1_file: convert assert_sha1_type to object_id
      sha1_file: convert retry_bad_packed_offset to struct object_id
      packfile: convert unpack_entry to struct object_id
      Convert remaining callers of sha1_object_info_extended to object_id
      sha1_file: convert sha1_object_info* to object_id
      builtin/fmt-merge-msg: convert remaining code to object_id
      builtin/notes: convert static functions to object_id
      tree-walk: convert get_tree_entry_follow_symlinks internals to object_id
      streaming: convert istream internals to struct object_id
      tree-walk: convert tree entry functions to object_id
      sha1_file: convert read_object_with_reference to object_id
      sha1_file: convert read_sha1_file to struct object_id
      Convert lookup_replace_object to struct object_id
      sha1_file: introduce a constant for max header length
      convert: convert to struct object_id
      sha1_name: convert struct min_abbrev_data to object_id
      t1011: abstract away SHA-1-specific constants
      t1304: abstract away SHA-1-specific constants
      t1300: abstract away SHA-1-specific constants
      t1405: sort reflog entries in a hash-independent way
      t1411: abstract away SHA-1-specific constants
      t1507: abstract away SHA-1-specific constants
      t2020: abstract away SHA-1 specific constants
      t2101: modernize test style
      t2101: abstract away SHA-1-specific constants
      t2107: abstract away SHA-1-specific constants
      format-patch: make cover letters always text/plain
      cache: add a function to read an object ID from a buffer
      server-info: remove unused members from struct pack_info
      Remove unused member in struct object_context
      packfile: remove unused member from struct pack_entry
      packfile: convert has_sha1_pack to object_id
      sha1-file: convert freshen functions to object_id
      packfile: convert find_pack_entry to object_id
      packfile: abstract away hash constant values
      pack-objects: abstract away hash algorithm
      pack-redundant: abstract away hash algorithm
      tree-walk: avoid hard-coded 20 constant
      tree-walk: convert get_tree_entry_follow_symlinks to object_id
      fsck: convert static functions to struct object_id
      submodule-config: convert structures to object_id
      split-index: convert struct split_index to object_id
      Update struct index_state to use struct object_id
      pack-redundant: convert linked lists to use struct object_id
      index-pack: abstract away hash function constant
      commit: convert uses of get_sha1_hex to get_oid_hex
      dir: convert struct untracked_cache_dir to object_id
      http: eliminate hard-coded constants
      revision: replace use of hard-coded constants
      upload-pack: replace use of several hard-coded constants
      diff: specify abbreviation size in terms of the_hash_algo
      builtin/receive-pack: avoid hard-coded constants for push certs
      sha1-file: add functions for hex empty tree and blob OIDs
      builtin/am: convert uses of EMPTY_TREE_SHA1_BIN to the_hash_algo
      builtin/merge: switch tree functions to use object_id
      merge: convert empty tree constant to the_hash_algo
      sequencer: convert one use of EMPTY_TREE_SHA1_HEX
      submodule: convert several uses of EMPTY_TREE_SHA1_HEX
      wt-status: convert two uses of EMPTY_TREE_SHA1_HEX
      builtin/receive-pack: convert one use of EMPTY_TREE_SHA1_HEX
      builtin/reset: convert use of EMPTY_TREE_SHA1_BIN
      sha1_file: convert cached object code to struct object_id
      cache-tree: use is_empty_tree_oid
      sequencer: use the_hash_algo for empty tree object ID
      dir: use the_hash_algo for empty blob object ID
      sha1_file: only expose empty object constants through git_hash_algo
      Update shell scripts to compute empty tree object ID
      add--interactive: compute the empty tree value
      merge-one-file: compute empty blob object ID
      Documentation: use 8-space tabs with Asciidoctor
      Documentation: render revisions correctly under Asciidoctor
      mailmap: update brian m. carlson's email address
      t/test-lib: add an SHA1 prerequisite
      t/test-lib: introduce ZERO_OID
      t: switch $_z40 to $ZERO_OID
      t/test-lib: introduce OID_REGEX
      t: switch $_x40 to $OID_REGEX
      t0000: annotate with SHA1 prerequisite
      t1007: annotate with SHA1 prerequisite
      t1512: skip test if not using SHA-1
      t4044: skip test if not using SHA-1
      t: skip pack tests if not using SHA-1
      t2203: abstract away SHA-1-specific constants
      t3103: abstract away SHA-1-specific constants
      t3702: abstract away SHA-1-specific constants
      t3905: abstract away SHA-1-specific constants
      t4007: abstract away SHA-1-specific constants
      t4008: abstract away SHA-1-specific constants
      t4014: abstract away SHA-1-specific constants
      t4020: abstract away SHA-1-specific constants
      t4022: abstract away SHA-1-specific constants
      t4029: fix test indentation
      t4029: abstract away SHA-1-specific constants
      t4030: abstract away SHA-1-specific constants
      t/lib-diff-alternative: abstract away SHA-1-specific constants
      t4205: sort log output in a hash-independent way
      t4042: abstract away SHA-1-specific constants
      t4045: abstract away SHA-1-specific constants
      t4208: abstract away SHA-1-specific constants
      t5300: abstract away SHA-1-specific constants
      sequencer: ensure labels that are object IDs are rewritten
      t3430: test clean-up

Ævar Arnfjörð Bjarmason (21):
      configure: fix a regression in PCRE v1 detection
      configure: detect redundant --with-libpcre & --with-libpcre1
      Makefile: make USE_LIBPCRE=YesPlease mean v2, not v1
      Makefile: fix broken bindir_relative variable
      Makefile: add a gitexecdir_relative variable
      Makefile: optionally symlink libexec/git-core binaries to bin/git
      Remove contrib/examples/*
      doc hash-function-transition: clarify how older gits die on NewHash
      doc hash-function-transition: clarify what SHAttered means
      git-svn: avoid warning on undef readline()
      Makefile: add a DEVOPTS to suppress -Werror under DEVELOPER
      Makefile: add a DEVOPTS to get all of -Wextra
      git{,-blame}.el: remove old bitrotting Emacs code
      .gitattributes: add *.pl extension for Perl
      .gitattributes: use the "perl" differ for Perl
      .gitattributes: add a diff driver for Python
      sha1-name.c: remove stray newline
      sha1-array.h: align function arguments
      git-p4: change "commitish" typo to "committish"
      sha1-name.c: move around the collect_ambiguous() function
      get_short_oid: sort ambiguous objects by type, then SHA-1


^ permalink raw reply	[relevance 3%]

* Re: [RFC PATCH 7/7] merge: fix misleading pre-merge check documentation
  2018-06-03  6:58  1% ` [RFC PATCH 7/7] merge: fix misleading pre-merge check documentation Elijah Newren
@ 2018-06-07  5:27  3%   ` Elijah Newren
  0 siblings, 0 replies; 200+ results
From: Elijah Newren @ 2018-06-07  5:27 UTC (permalink / raw)
  To: Git Mailing List; +Cc: Jonathan Nieder, Elijah Newren

On Sat, Jun 2, 2018 at 11:58 PM, Elijah Newren <newren@gmail.com> wrote:
> builtin/merge.c contains this important requirement for merge strategies:
>
>     ...the index must be in sync with the head commit.  The strategies are
>     responsible to ensure this.
>
> However, Documentation/git-merge.txt says:
>
>     ...[merge will] abort if there are any changes registered in the index
>     relative to the `HEAD` commit.  (One exception is when the changed
>     index entries are in the state that would result from the merge
>     already.)
>
> Interestingly, prior to commit c0be8aa06b85 ("Documentation/git-merge.txt:
> Partial rewrite of How Merge Works", 2008-07-19),
> Documentation/git-merge.txt said much more:
>
>     ...the index file must match the tree of `HEAD` commit...
>     [NOTE]
>     This is a bit of a lite.  In certain special cases [explained
>     in detail]...
>     Otherwise, merge will refuse to do any harm to your repository
>     (that is...your working tree...and index are left intact).
>
> So, this suggests that the exceptions existed because there were special
> cases where it would case no harm, and potentially be slightly more
> convenient for the user.  While the current text in git-merge.txt does
> list a condition under which it would be safe to proceed despite the index
> not matching HEAD, it does not match what is actually implemented, in
> three different ways:
>
>     * The exception is written to describe what unpack-trees allows.  Not
>       all merge strategies allow such an exception, though, making this
>       description misleading.  'ours' and 'octopus' merges have strictly
>       enforced index==HEAD for a while, and the commit previous to this
>       one made 'recursive' do so as well.
>
>     * If someone did a three-way content merge on a specific file using
>       versions from the relevant commits and staged it prior to running
>       merge, then that path would technically satisfy the exception listed
>       in git-merge.txt.  unpack-trees.c would still error out on the path,
>       though, because it defers the three-way content merge logic to other
>       parts of the code (resolve, octopus, or recursive) and has no way of
>       checking whether the index entry from before the merge will match
>       the end result of the merge.
>
>     * The exception as implemented in unpack-trees actually only checked
>       that the index matched the MERGE_HEAD version of the file and that
>       HEAD matched the merge base.  Assuming no renames, that would indeed
>       provide cases where the index matches the end result we'd get from a
>       merge.  But renames means unpack-trees is checking that it instead
>       matches something other than what the final result will be, risking
>       either erroring out when we shouldn't need to, or not erroring out
>       when we should and overwriting the user's staged changes.
>
> In addition to the wording behind this exception being misleading, it is
> also somewhat surprising to see how many times the code for the special
> cases were wrong or the check to make sure the index matched head was
> forgotten altogether:
>
> * Prior to commit ee6566e8d70d ("[PATCH] Rewrite read-tree", 2005-09-05),
>   there were many cases where an unclean index entry was allowed (look for
>   merged_entry_allow_dirty()); it appears that in those cases, the merge
>   would have simply overwritten staged changes with the result of the
>   merge.  Thus, the merge result would have been correct, but the user's
>   uncommitted changes could be thrown away without warning.
>
> * Prior to commit 160252f81626 ("git-merge-ours: make sure our index
>   matches HEAD", 2005-11-03), the 'ours' merge strategy did not check
>   whether the index matched HEAD.  If it didn't, the resulting merge
>   would include all the staged changes, and thus wasn't really an 'ours'
>   strategy.
>
> * Prior to commit 3ec62ad9ffba ("merge-octopus: abort if index does not
>   match HEAD", 2016-04-09), 'octopus' merges did not check whether the
>   index matched HEAD, also resulting in any staged changes from before
>   the commit silently being folded into the resulting merge.  commit
>   a6ee883b8eb5 ("t6044: new merge testcases for when index doesn't match
>   HEAD", 2016-04-09) was also added at the same time to try to test to
>   make sure all strategies did the necessary checking for the requirement
>   that the index match HEAD.  Sadly, it didn't catch all the cases, as
>   evidenced by the remainder of this list...
>
> * Prior to commit 65170c07d466 ("merge-recursive: avoid incorporating
>   uncommitted changes in a merge", 2017-12-21), merge-recursive simply
>   relied on unpack_trees() to do the necessary check, but in one special
>   case it avoided calling unpack_trees() entirely and accidentally ended
>   up silently including any staged changes from before the merge in the
>   resulting merge commit.
>
> * The commit immediately before this one in this series noted that the
>   exceptions were written in a way that assumed no renames, making it
>   unsafe for merge-recursive to use.  merge-recursive was modified to
>   use its own check to enforce that index==HEAD.
>
> This history makes it very tempting to go into builtin/merge.c and replace
> the comment that strategies must enforce that index matches HEAD with code
> that just enforces it.  At this point, that would only affect the
> 'resolve' strategy; all other strategies have each been modified to
> manually enforce it.

I'm curious if anyone has comments on this last paragraph above.
Would anyone object to strictly enforcing index matches HEAD before
all types of merges?

^ permalink raw reply	[relevance 3%]

* [ANNOUNCE] Git v2.18.0-rc2
@ 2018-06-13 22:12  3% Junio C Hamano
  0 siblings, 0 replies; 200+ results
From: Junio C Hamano @ 2018-06-13 22:12 UTC (permalink / raw)
  To: git; +Cc: Linux Kernel, git-packagers

A release candidate Git v2.18.0-rc2 is now available for testing
at the usual places.  It is comprised of 852 non-merge commits
since v2.17.0, contributed by 65 people, 20 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.18.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.17.0 are as follows.
Welcome to the Git development community!

  Bill Ritcher, Birger Skogeng Pedersen, Casey Fitzpatrick,
  Dan Jacques, Drew DeVault, Eckhard S. Maaß, Erik E Brady,
  Florian Gamböck, Harald Nordgren, Leif Middelschulte,
  Loganaden Velvindron, Luis Marsano, Paul-Sebastian Ungureanu,
  Pedro Alvarez Piedehierro, Pratik Karki, Ryan Dammrose, Takuto
  Ikuta, Tao Qingyun, Wink Saville, and Yuki Kokubun.

Returning contributors who helped this release are as follows.
Thanks for your continued support.

  Ævar Arnfjörð Bjarmason, Anders Kaseorg, Andreas Heiduk,
  Antonio Ospite, Beat Bolli, Ben Peart, Brandon Williams, brian
  m. carlson, Christian Couder, Christian Hesse, Clemens Buchacher,
  David Turner, Derrick Stolee, Elijah Newren, Eric Sunshine,
  Jameson Miller, Jeff King, Johannes Schindelin, Johannes Sixt,
  Jonathan Nieder, Jonathan Tan, Junio C Hamano, Kaartic Sivaraam,
  Lars Schneider, Lucas Werkmeister, Luke Diamand, Martin Ågren,
  Michal Nazarewicz, Michele Locati, Nguyễn Thái Ngọc Duy,
  Olga Telezhnaya, Orgad Shaneh, Philip Oakley, Phillip Wood,
  Ramsay Jones, René Scharfe, Robert P. J. Day, Sergey Organov,
  Stefan Agner, Stefan Beller, SZEDER Gábor, Taylor Blau, Thomas
  Gummerer, Todd Zullinger, and Torsten Bögershausen.

----------------------------------------------------------------

Git 2.18 Release Notes (draft)
==============================

Updates since v2.17
-------------------

UI, Workflows & Features

 * Rename detection logic that is used in "merge" and "cherry-pick" has
   learned to guess when all of x/a, x/b and x/c have moved to z/a,
   z/b and z/c, it is likely that x/d added in the meantime would also
   want to move to z/d by taking the hint that the entire directory
   'x' moved to 'z'.  A bug causing dirty files involved in a rename
   to be overwritten during merge has also been fixed as part of this
   work.  Incidentally, this also avoids updating a file in the
   working tree after a (non-trivial) merge whose result matches what
   our side originally had.

 * "git filter-branch" learned to use a different exit code to allow
   the callers to tell the case where there was no new commits to
   rewrite from other error cases.

 * When built with more recent cURL, GIT_SSL_VERSION can now specify
   "tlsv1.3" as its value.

 * "git gui" learned that "~/.ssh/id_ecdsa.pub" and
   "~/.ssh/id_ed25519.pub" are also possible SSH key files.
   (merge 2e2f0288ef bb/git-gui-ssh-key-files later to maint).

 * "git gui" performs commit upon CTRL/CMD+ENTER but the
   CTRL/CMD+KP_ENTER (i.e. enter key on the numpad) did not have the
   same key binding.  It now does.
   (merge 28a1d94a06 bp/git-gui-bind-kp-enter later to maint).

 * "git gui" has been taught to work with old versions of tk (like
   8.5.7) that do not support "ttk::style theme use" as a way to query
   the current theme.
   (merge 4891961105 cb/git-gui-ttk-style later to maint).

 * "git rebase" has learned to honor "--signoff" option when using
   backends other than "am" (but not "--preserve-merges").

 * "git branch --list" during an interrupted "rebase -i" now lets
   users distinguish the case where a detached HEAD is being rebased
   and a normal branch is being rebased.

 * "git mergetools" learned talking to guiffy.

 * The scripts in contrib/emacs/ have outlived their usefulness and
   have been replaced with a stub that errors out and tells the user
   there are replacements.

 * The new "working-tree-encoding" attribute can ask Git to convert the
   contents to the specified encoding when checking out to the working
   tree (and the other way around when checking in).

 * The "git config" command uses separate options e.g. "--int",
   "--bool", etc. to specify what type the caller wants the value to
   be interpreted as.  A new "--type=<typename>" option has been
   introduced, which would make it cleaner to define new types.

 * "git config --get" learned the "--default" option, to help the
   calling script.  Building on top of the above changes, the
   "git config" learns "--type=color" type.  Taken together, you can
   do things like "git config --get foo.color --default blue" and get
   the ANSI color sequence for the color given to foo.color variable,
   or "blue" if the variable does not exist.

 * "git ls-remote" learned an option to allow sorting its output based
   on the refnames being shown.

 * The command line completion (in contrib/) has been taught that "git
   stash save" has been deprecated ("git stash push" is the preferred
   spelling in the new world) and does not offer it as a possible
   completion candidate when "git stash push" can be.

 * "git gc --prune=nonsense" spent long time repacking and then
   silently failed when underlying "git prune --expire=nonsense"
   failed to parse its command line.  This has been corrected.

 * Error messages from "git push" can be painted for more visibility.

 * "git http-fetch" (deprecated) had an optional and experimental
   "feature" to fetch only commits and/or trees, which nobody used.
   This has been removed.

 * The functionality of "$GIT_DIR/info/grafts" has been superseded by
   the "refs/replace/" mechanism for some time now, but the internal
   code had support for it in many places, which has been cleaned up
   in order to drop support of the "grafts" mechanism.

 * "git worktree add" learned to check out an existing branch.

 * "git --no-pager cmd" did not have short-and-sweet single letter
   option. Now it does as "-P".
   (merge 7213c28818 js/no-pager-shorthand later to maint).

 * "git rebase" learned "--rebase-merges" to transplant the whole
   topology of commit graph elsewhere.

 * "git status" learned to pay attention to UI related diff
   configuration variables such as diff.renames.

 * The command line completion mechanism (in contrib/) learned to load
   custom completion file for "git $command" where $command is a
   custom "git-$command" that the end user has on the $PATH when using
   newer version of bash.

 * "git send-email" can sometimes offer confirmation dialog "Send this
   email?" with choices 'Yes', 'No', 'Quit', and 'All'.  A new action
   'Edit' has been added to this dialog's choice.

 * With merge.renames configuration set to false, the recursive merge
   strategy can be told not to spend cycles trying to find renamed
   paths and merge them accordingly.

 * "git status" learned to honor a new status.renames configuration to
   skip rename detection, which could be useful for those who want to
   do so without disabling the default rename detection done by the
   "git diff" command.

 * Command line completion (in contrib/) learned to complete pathnames
   for various commands better.

 * "git blame" learns to unhighlight uninteresting metadata from the
   originating commit on lines that are the same as the previous one,
   and also paint lines in different colors depending on the age of
   the commit.

 * Transfer protocol v2 learned to support the partial clone.

 * When a short hexadecimal string is used to name an object but there
   are multiple objects that share the string as the prefix of their
   names, the code lists these ambiguous candidates in a help message.
   These object names are now sorted according to their types for
   easier eyeballing.

 * "git fetch $there $refspec" that talks over protocol v2 can take
   advantage of server-side ref filtering; the code has been extended
   so that this mechanism triggers also when fetching with configured
   refspec.

 * Our HTTP client code used to advertise that we accept gzip encoding
   from the other side; instead, just let cURL library to advertise
   and negotiate the best one.

 * "git p4" learned to "unshelve" shelved commit from P4.
   (merge 123f631761 ld/p4-unshelve later to maint).


Performance, Internal Implementation, Development Support etc.

 * A "git fetch" from a repository with insane number of refs into a
   repository that is already up-to-date still wasted too many cycles
   making many lstat(2) calls to see if these objects at the tips
   exist as loose objects locally.  These lstat(2) calls are optimized
   away by enumerating all loose objects beforehand.
   It is unknown if the new strategy negatively affects existing use
   cases, fetching into a repository with many loose objects from a
   repository with small number of refs.

 * Git can be built to use either v1 or v2 of the PCRE library, and so
   far, the build-time configuration USE_LIBPCRE=YesPlease instructed
   the build procedure to use v1, but now it means v2.  USE_LIBPCRE1
   and USE_LIBPCRE2 can be used to explicitly choose which version to
   use, as before.

 * The build procedure learned to optionally use symbolic links
   (instead of hardlinks and copies) to install "git-foo" for built-in
   commands, whose binaries are all identical.

 * Conversion from uchar[20] to struct object_id continues.

 * The way "git worktree prune" worked internally has been simplified,
   by assuming how "git worktree move" moves an existing worktree to a
   different place.

 * Code clean-up for the "repository" abstraction.
   (merge 00a3da2a13 nd/remove-ignore-env-field later to maint).

 * Code to find the length to uniquely abbreviate object names based
   on packfile content, which is a relatively recent addtion, has been
   optimized to use the same fan-out table.

 * The mechanism to use parse-options API to automate the command line
   completion continues to get extended and polished.

 * Copies of old scripted Porcelain commands in contrib/examples/ have
   been removed.

 * Some tests that rely on the exact hardcoded values of object names
   have been updated in preparation for hash function migration.

 * Perf-test update.

 * Test helper update.

 * The effort continues to refactor the internal global data structure
   to make it possible to open multiple repositories, work with and
   then close them,

 * Small test-helper programs have been consolidated into a single
   binary.

 * API clean-up around ref-filter code.

 * Shell completion (in contrib) that gives list of paths have been
   optimized somewhat.

 * The index file is updated to record the fsmonitor section after a
   full scan was made, to avoid wasting the effort that has already
   spent.

 * Performance measuring framework in t/perf learned to help bisecting
   performance regressions.

 * Some multi-word source filenames are being renamed to separate
   words with dashes instead of underscores.

 * An reusable "memory pool" implementation has been extracted from
   fast-import.c, which in turn has become the first user of the
   mem-pool API.

 * A build-time option has been added to allow Git to be told to refer
   to its associated files relative to the main binary, in the same
   way that has been possible on Windows for quite some time, for
   Linux, BSDs and Darwin.

 * Precompute and store information necessary for ancestry traversal
   in a separate file to optimize graph walking.

 * The effort to pass the repository in-core structure throughout the
   API continues.  This round deals with the code that implements the
   refs/replace/ mechanism.

 * The build procedure "make DEVELOPER=YesPlease" learned to enable a
   bit more warning options depending on the compiler used to help
   developers more.  There also is "make DEVOPTS=tokens" knob
   available now, for those who want to help fixing warnings we
   usually ignore, for example.

 * A new version of the transport protocol is being worked on.

 * The code to interface to GPG has been restructured somewhat to make
   it cleaner to integrate with other types of signature systems later.

 * The code has been taught to use the duplicated information stored
   in the commit-graph file to learn the tree object name for a commit
   to avoid opening and parsing the commit object when it makes sense
   to do so.

 * "git gc" in a large repository takes a lot of time as it considers
   to repack all objects into one pack by default.  The command has
   been taught to pretend as if the largest existing packfile is
   marked with ".keep" so that it is left untouched while objects in
   other packs and loose ones are repacked.

 * The transport protocol v2 is getting updated further.

 * The codepath around object-info API has been taught to take the
   repository object (which in turn tells the API which object store
   the objects are to be located).

 * "git pack-objects" needs to allocate tons of "struct object_entry"
   while doing its work, and shrinking its size helps the performance
   quite a bit.

 * The implementation of "git rebase -i --root" has been updated to use
   the sequencer machinery more.

 * Developer support update, by using BUG() macro instead of die() to
   mark codepaths that should not happen more clearly.

 * Developer support.  Use newer GCC on one of the builds done at
   TravisCI.org to get more warnings and errors diagnosed.

 * Conversion from uchar[20] to struct object_id continues.

 * By code restructuring of submodule merge in merge-recursive,
   informational messages from the codepath are now given using the
   same mechanism as other output, and honor the merge.verbosity
   configuration.  The code also learned to give a few new messages
   when a submodule three-way merge resolves cleanly when one side
   records a descendant of the commit chosen by the other side.

 * Avoid unchecked snprintf() to make future code auditing easier.
   (merge ac4896f007 jk/snprintf-truncation later to maint).

 * Many tests hardcode the raw object names, which would change once
   we migrate away from SHA-1.  While some of them must test against
   exact object names, most of them do not have to use hardcoded
   constants in the test.  The latter kind of tests have been updated
   to test the moral equivalent of the original without hardcoding the
   actual object names.

 * The list of commands with their various attributes were spread
   across a few places in the build procedure, but it now is getting a
   bit more consolidated to allow more automation.

 * Quite a many tests assumed that newly created refs are made as
   loose refs using the files backend, which have been updated to use
   proper plumbing like rev-parse and update-ref, to avoid breakage
   once we start using different ref backends.


Also contains various documentation updates and code clean-ups.


Fixes since v2.17
-----------------

 * "git shortlog cruft" aborted with a BUG message when run outside a
   Git repository.  The command has been taught to complain about
   extra and unwanted arguments on its command line instead in such a
   case.
   (merge 4aa0161e83 ma/shortlog-revparse later to maint).

 * "git stash push -u -- <pathspec>" gave an unnecessary and confusing
   error message when there was no tracked files that match the
   <pathspec>, which has been fixed.
   (merge 353278687e tg/stash-untracked-with-pathspec-fix later to maint).

 * "git tag --contains no-such-commit" gave a full list of options
   after giving an error message.
   (merge 3bb0923f06 ps/contains-id-error-message later to maint).

 * "diff-highlight" filter (in contrib/) learned to undertand "git log
   --graph" output better.
   (merge 4551fbba14 jk/diff-highlight-graph-fix later to maint).

 * when refs that do not point at committish are given, "git
   filter-branch" gave a misleading error messages.  This has been
   corrected.
   (merge f78ab355e7 yk/filter-branch-non-committish-refs later to maint).

 * "git submodule status" misbehaved on a submodule that has been
   removed from the working tree.
   (merge 74b6bda32f rs/status-with-removed-submodule later to maint).

 * When credential helper exits very quickly without reading its
   input, it used to cause Git to die with SIGPIPE, which has been
   fixed.
   (merge a0d51e8d0e eb/cred-helper-ignore-sigpipe later to maint).

 * "git rebase --keep-empty" still removed an empty commit if the
   other side contained an empty commit (due to the "does an
   equivalent patch exist already?" check), which has been corrected.
   (merge 3d946165e1 pw/rebase-keep-empty-fixes later to maint).

 * Some codepaths, including the refs API, get and keep relative
   paths, that go out of sync when the process does chdir(2).  The
   chdir-notify API is introduced to let these codepaths adjust these
   cached paths to the new current directory.
   (merge fb9c2d2703 jk/relative-directory-fix later to maint).

 * "cd sub/dir && git commit ../path" ought to record the changes to
   the file "sub/path", but this regressed long time ago.
   (merge 86238e07ef bw/commit-partial-from-subdirectory-fix later to maint).

 * Recent introduction of "--log-destination" option to "git daemon"
   did not work well when the daemon was run under "--inetd" mode.
   (merge e67d906d73 lw/daemon-log-destination later to maint).

 * Small fix to the autoconf build procedure.
   (merge 249482daf0 es/fread-reads-dir-autoconf-fix later to maint).

 * Fix an unexploitable (because the oversized contents are not under
   attacker's control) buffer overflow.
   (merge d8579accfa bp/fsmonitor-bufsize-fix later to maint).

 * Recent simplification of build procedure forgot a bit of tweak to
   the build procedure of contrib/mw-to-git/
   (merge d8698987f3 ab/simplify-perl-makefile later to maint).

 * Moving a submodule that itself has submodule in it with "git mv"
   forgot to make necessary adjustment to the nested sub-submodules;
   now the codepath learned to recurse into the submodules.

 * "git config --unset a.b", when "a.b" is the last variable in an
   otherwise empty section "a", left an empty section "a" behind, and
   worse yet, a subsequent "git config a.c value" did not reuse that
   empty shell and instead created a new one.  These have been
   (partially) corrected.
   (merge c71d8bb38a js/empty-config-section-fix later to maint).

 * "git worktree remove" learned that "-f" is a shorthand for
   "--force" option, just like for "git worktree add".
   (merge d228eea514 sb/worktree-remove-opt-force later to maint).

 * The completion script (in contrib/) learned to clear cached list of
   command line options upon dot-sourcing it again in a more efficient
   way.
   (merge 94408dc71c sg/completion-clear-cached later to maint).

 * "git svn" had a minor thinko/typo which has been fixed.
   (merge 51db271587 ab/git-svn-get-record-typofix later to maint).

 * During a "rebase -i" session, the code could give older timestamp
   to commits created by later "pick" than an earlier "reword", which
   has been corrected.
   (merge 12f7babd6b js/ident-date-fix later to maint).

 * "git submodule status" did not check the symbolic revision name it
   computed for the submodule HEAD is not the NULL, and threw it at
   printf routines, which has been corrected.
   (merge 0b5e2ea7cf nd/submodule-status-fix later to maint).

 * When fed input that already has In-Reply-To: and/or References:
   headers and told to add the same information, "git send-email"
   added these headers separately, instead of appending to an existing
   one, which is a violation of the RFC.  This has been corrected.
   (merge 256be1d3f0 sa/send-email-dedup-some-headers later to maint).

 * "git fast-export" had a regression in v2.15.0 era where it skipped
   some merge commits in certain cases, which has been corrected.
   (merge be011bbe00 ma/fast-export-skip-merge-fix later to maint).

 * The code did not propagate the terminal width to subprocesses via
   COLUMNS environment variable, which it now does.  This caused
   trouble to "git column" helper subprocess when "git tag --column=row"
   tried to list the existing tags on a display with non-default width.
   (merge b5d5a567fb nd/term-columns later to maint).

 * We learned that our source files with ".pl" and ".py" extensions
   are Perl and Python files respectively and changes to them are
   better viewed as such with appropriate diff drivers.
   (merge 7818b619e2 ab/perl-python-attrs later to maint).

 * "git rebase -i" sometimes left intermediate "# This is a
   combination of N commits" message meant for the human consumption
   inside an editor in the final result in certain corner cases, which
   has been fixed.
   (merge 15ef69314d js/rebase-i-clean-msg-after-fixup-continue later to maint).

 * A test to see if the filesystem normalizes UTF-8 filename has been
   updated to check what we need to know in a more direct way, i.e. a
   path created in NFC form can be accessed with NFD form (or vice
   versa) to cope with APFS as well as HFS.
   (merge 742ae10e35 tb/test-apfs-utf8-normalization later to maint).

 * "git format-patch --cover --attach" created a broken MIME multipart
   message for the cover letter, which has been fixed by keeping the
   cover letter as plain text file.
   (merge 50cd54ef4e bc/format-patch-cover-no-attach later to maint).

 * The split-index feature had a long-standing and dormant bug in
   certain use of the in-core merge machinery, which has been fixed.
   (merge 7db118303a en/unpack-trees-split-index-fix later to maint).

 * Asciidoctor gives a reasonable imitation for AsciiDoc, but does not
   render illustration in a literal block correctly when indented with
   HT by default. The problem is fixed by forcing 8-space tabs.
   (merge 379805051d bc/asciidoctor-tab-width later to maint).

 * Code clean-up to adjust to a more recent lockfile API convention that
   allows lockfile instances kept on the stack.
   (merge 0fa5a2ed8d ma/lockfile-cleanup later to maint).

 * the_repository->index is not a allocated piece of memory but
   repo_clear() indiscriminately attempted to free(3) it, which has
   been corrected.
   (merge 74373b5f10 nd/repo-clear-keep-the-index later to maint).

 * Code clean-up to avoid non-standard-conformant pointer arithmetic.
   (merge c112084af9 rs/no-null-ptr-arith-in-fast-export later to maint).

 * Code clean-up to turn history traversal more robust in a
   semi-corrupt repository.
   (merge 8702b30fd7 jk/unavailable-can-be-missing later to maint).

 * "git update-ref A B" is supposed to ensure that ref A does not yet
   exist when B is a NULL OID, but this check was not done correctly
   for pseudo-refs outside refs/ hierarchy, e.g. MERGE_HEAD.

 * "git submodule update" and "git submodule add" supported the
   "--reference" option to borrow objects from a neighbouring local
   repository like "git clone" does, but lacked the more recent
   invention "--dissociate".  Also "git submodule add" has been taught
   to take the "--progress" option.
   (merge a0ef29341a cf/submodule-progress-dissociate later to maint).

 * Update credential-netrc helper (in contrib/) to allow customizing
   the GPG used to decrypt the encrypted .netrc file.
   (merge 786ef50a23 lm/credential-netrc later to maint).

 * "git submodule update" attempts two different kinds of "git fetch"
   against the upstream repository to grab a commit bound at the
   submodule's path, but it incorrectly gave up if the first kind
   (i.e. a normal fetch) failed, making the second "last resort" one
   (i.e. fetching an exact commit object by object name) ineffective.
   This has been corrected.
   (merge e30d833671 sb/submodule-update-try-harder later to maint).

 * Error behaviour of "git grep" when it cannot read the index was
   inconsistent with other commands that uses the index, which has
   been corrected to error out early.
   (merge b2aa84c789 sb/grep-die-on-unreadable-index later to maint).

 * We used to call regfree() after regcomp() failed in some codepaths,
   which have been corrected.
   (merge 17154b1576 ma/regex-no-regfree-after-comp-fail later to maint).

 * The import-tars script (in contrib/) has been taught to handle
   tarballs with overly long paths that use PAX extended headers.
   (merge 12ecea46e3 pa/import-tars-long-names later to maint).

 * "git rev-parse Y..." etc. misbehaved when given endpoints were
   not committishes.
   (merge 0ed556d38f en/rev-parse-invalid-range later to maint).

 * "git pull --recurse-submodules --rebase", when the submodule
   repository's history did not have anything common between ours and
   the upstream's, failed to execute.  We need to fetch from them to
   continue even in such a case.
   (merge 4d36f88be7 jt/submodule-pull-recurse-rebase later to maint).

 * "git remote update" can take both a single remote nickname and a
   nickname for remote groups, but only one of them was documented.
   (merge a97447a42a nd/remote-update-doc later to maint).

 * "index-pack --strict" has been taught to make sure that it runs the
   final object integrity checks after making the freshly indexed
   packfile available to itself.
   (merge 3737746120 jk/index-pack-maint later to maint).

 * Other minor doc, test and build updates and code cleanups.
   (merge 248f66ed8e nd/trace-with-env later to maint).
   (merge 14ced5562c ys/bisect-object-id-missing-conversion-fix later to maint).
   (merge 5988eb631a ab/doc-hash-brokenness later to maint).
   (merge a4d4e32a70 pk/test-avoid-pipe-hiding-exit-status later to maint).
   (merge 05e293c1ac jk/flockfile-stdio later to maint).
   (merge e9184b0789 jk/t5561-missing-curl later to maint).
   (merge b1801b85a3 nd/worktree-move later to maint).
   (merge bbd374dd20 ak/bisect-doc-typofix later to maint).
   (merge 4855f06fb3 mn/send-email-credential-doc later to maint).
   (merge 8523b1e355 en/doc-typoes later to maint).
   (merge 43b44ccfe7 js/t5404-path-fix later to maint).
   (merge decf711fc1 ps/test-chmtime-get later to maint).
   (merge 22d11a6e8e es/worktree-docs later to maint).
   (merge 92a5dbbc22 tg/use-git-contacts later to maint).
   (merge adc887221f tq/t1510 later to maint).
   (merge bed21a8ad6 sg/doc-gc-quote-mismatch-fix later to maint).
   (merge 73364e4f10 tz/doc-git-urls-reference later to maint).
   (merge cd1e606bad bc/mailmap-self later to maint).
   (merge f7997e3682 ao/config-api-doc later to maint).
   (merge ee930754d8 jk/apply-p-doc later to maint).
   (merge 011b648646 nd/pack-format-doc later to maint).
   (merge 87a6bb701a sg/t5310-jgit-bitmap-test later to maint).
   (merge f6b82970aa sg/t5516-fixes later to maint).
   (merge 4362da078e sg/t7005-spaces-in-filenames-cleanup later to maint).
   (merge 7d0ee47c11 js/test-unset-prereq later to maint).
   (merge 5356a3c354 ah/misc-doc-updates later to maint).
   (merge 92c4a7a129 nd/completion-aliasfiletype-typofix later to maint).
   (merge 58bd77b66a nd/pack-unreachable-objects-doc later to maint).
   (merge 4ed79d5203 sg/t6500-no-redirect-of-stdin later to maint).
   (merge 17b8a2d6cd jk/config-blob-sans-repo later to maint).
   (merge 590551ca2c rd/tag-doc-lightweight later to maint).
   (merge 44f560fc16 rd/init-typo later to maint).
   (merge f156a0934a rd/p4-doc-markup-env later to maint).
   (merge 2a00502b14 tg/doc-sec-list later to maint).
   (merge 47cc91310a jk/submodule-fsck-loose-fixup later to maint).

^ permalink raw reply	[relevance 3%]

* [ANNOUNCE] Git v2.18.0
@ 2018-06-21 19:27  3% Junio C Hamano
  0 siblings, 0 replies; 200+ results
From: Junio C Hamano @ 2018-06-21 19:27 UTC (permalink / raw)
  To: git; +Cc: Linux Kernel, git-packagers

The latest feature release Git v2.18.0 is now available at the
usual places.  It is comprised of 903 non-merge commits since
v2.17.0, contributed by 80 people, 24 of which are new faces.

The tarballs are found at:

    https://www.kernel.org/pub/software/scm/git/

The following public repositories all have a copy of the 'v2.18.0'
tag and the 'master' branch that the tag points at:

  url = https://kernel.googlesource.com/pub/scm/git/git
  url = git://repo.or.cz/alt-git.git
  url = https://github.com/gitster/git

New contributors whose contributions weren't in v2.17.0 are as follows.
Welcome to the Git development community!

  Bill Ritcher, Birger Skogeng Pedersen, Casey Fitzpatrick,
  Dan Jacques, Drew DeVault, Eckhard S. Maaß, Erik E Brady,
  Florian Gamböck, Harald Nordgren, Jeremy Linton, Karthikeyan
  Singaravelan, Leif Middelschulte, Loganaden Velvindron, Luis
  Marsano, Meng-Sung Wu, Paul-Sebastian Ungureanu, Pedro Alvarez
  Piedehierro, Pratik Karki, Romain Merland, Ryan Dammrose,
  Takuto Ikuta, Tao Qingyun, Wink Saville, and Yuki Kokubun.

Returning contributors who helped this release are as follows.
Thanks for your continued support.

  Ævar Arnfjörð Bjarmason, Alexander Shopov, Anders Kaseorg,
  Andreas Heiduk, Andre Hinrichs, Antonio Ospite, Beat Bolli,
  Ben Peart, Brandon Williams, brian m. carlson, Changwoo Ryu,
  Christian Couder, Christian Hesse, Christopher Diaz Riveros,
  Clemens Buchacher, David Turner, Derrick Stolee, Elijah Newren,
  Eric Sunshine, Jameson Miller, Jean-Noël Avila, Jeff King,
  Jiang Xin, Johannes Schindelin, Johannes Sixt, Jonathan Nieder,
  Jonathan Tan, Jordi Mas, Junio C Hamano, Kaartic Sivaraam,
  Kyle Meyer, Lars Schneider, Lucas Werkmeister, Luke Diamand,
  Martin Ågren, Michal Nazarewicz, Michele Locati, Nguyễn Thái
  Ngọc Duy, Olga Telezhnaya, Orgad Shaneh, Peter Krefting, Philip
  Oakley, Phillip Wood, Ralf Thielow, Ramsay Jones, René Scharfe,
  Robert P. J. Day, Sergey Organov, Stefan Agner, Stefan Beller,
  SZEDER Gábor, Taylor Blau, Thomas Gummerer, Todd Zullinger,
  Torsten Bögershausen, and Trần Ngọc Quân.

----------------------------------------------------------------

Git 2.18 Release Notes
======================

Updates since v2.17
-------------------

UI, Workflows & Features

 * Rename detection logic that is used in "merge" and "cherry-pick" has
   learned to guess when all of x/a, x/b and x/c have moved to z/a,
   z/b and z/c, it is likely that x/d added in the meantime would also
   want to move to z/d by taking the hint that the entire directory
   'x' moved to 'z'.  A bug causing dirty files involved in a rename
   to be overwritten during merge has also been fixed as part of this
   work.  Incidentally, this also avoids updating a file in the
   working tree after a (non-trivial) merge whose result matches what
   our side originally had.

 * "git filter-branch" learned to use a different exit code to allow
   the callers to tell the case where there was no new commits to
   rewrite from other error cases.

 * When built with more recent cURL, GIT_SSL_VERSION can now specify
   "tlsv1.3" as its value.

 * "git gui" learned that "~/.ssh/id_ecdsa.pub" and
   "~/.ssh/id_ed25519.pub" are also possible SSH key files.
   (merge 2e2f0288ef bb/git-gui-ssh-key-files later to maint).

 * "git gui" performs commit upon CTRL/CMD+ENTER but the
   CTRL/CMD+KP_ENTER (i.e. enter key on the numpad) did not have the
   same key binding.  It now does.
   (merge 28a1d94a06 bp/git-gui-bind-kp-enter later to maint).

 * "git gui" has been taught to work with old versions of tk (like
   8.5.7) that do not support "ttk::style theme use" as a way to query
   the current theme.
   (merge 4891961105 cb/git-gui-ttk-style later to maint).

 * "git rebase" has learned to honor "--signoff" option when using
   backends other than "am" (but not "--preserve-merges").

 * "git branch --list" during an interrupted "rebase -i" now lets
   users distinguish the case where a detached HEAD is being rebased
   and a normal branch is being rebased.

 * "git mergetools" learned talking to guiffy.

 * The scripts in contrib/emacs/ have outlived their usefulness and
   have been replaced with a stub that errors out and tells the user
   there are replacements.

 * The new "working-tree-encoding" attribute can ask Git to convert the
   contents to the specified encoding when checking out to the working
   tree (and the other way around when checking in).

 * The "git config" command uses separate options e.g. "--int",
   "--bool", etc. to specify what type the caller wants the value to
   be interpreted as.  A new "--type=<typename>" option has been
   introduced, which would make it cleaner to define new types.

 * "git config --get" learned the "--default" option, to help the
   calling script.  Building on top of the above changes, the
   "git config" learns "--type=color" type.  Taken together, you can
   do things like "git config --get foo.color --default blue" and get
   the ANSI color sequence for the color given to foo.color variable,
   or "blue" if the variable does not exist.

 * "git ls-remote" learned an option to allow sorting its output based
   on the refnames being shown.

 * The command line completion (in contrib/) has been taught that "git
   stash save" has been deprecated ("git stash push" is the preferred
   spelling in the new world) and does not offer it as a possible
   completion candidate when "git stash push" can be.

 * "git gc --prune=nonsense" spent long time repacking and then
   silently failed when underlying "git prune --expire=nonsense"
   failed to parse its command line.  This has been corrected.

 * Error messages from "git push" can be painted for more visibility.

 * "git http-fetch" (deprecated) had an optional and experimental
   "feature" to fetch only commits and/or trees, which nobody used.
   This has been removed.

 * The functionality of "$GIT_DIR/info/grafts" has been superseded by
   the "refs/replace/" mechanism for some time now, but the internal
   code had support for it in many places, which has been cleaned up
   in order to drop support of the "grafts" mechanism.

 * "git worktree add" learned to check out an existing branch.

 * "git --no-pager cmd" did not have short-and-sweet single letter
   option. Now it does as "-P".
   (merge 7213c28818 js/no-pager-shorthand later to maint).

 * "git rebase" learned "--rebase-merges" to transplant the whole
   topology of commit graph elsewhere.

 * "git status" learned to pay attention to UI related diff
   configuration variables such as diff.renames.

 * The command line completion mechanism (in contrib/) learned to load
   custom completion file for "git $command" where $command is a
   custom "git-$command" that the end user has on the $PATH when using
   newer version of bash-completion.

 * "git send-email" can sometimes offer confirmation dialog "Send this
   email?" with choices 'Yes', 'No', 'Quit', and 'All'.  A new action
   'Edit' has been added to this dialog's choice.

 * With merge.renames configuration set to false, the recursive merge
   strategy can be told not to spend cycles trying to find renamed
   paths and merge them accordingly.

 * "git status" learned to honor a new status.renames configuration to
   skip rename detection, which could be useful for those who want to
   do so without disabling the default rename detection done by the
   "git diff" command.

 * Command line completion (in contrib/) learned to complete pathnames
   for various commands better.

 * "git blame" learns to unhighlight uninteresting metadata from the
   originating commit on lines that are the same as the previous one,
   and also paint lines in different colors depending on the age of
   the commit.

 * Transfer protocol v2 learned to support the partial clone.

 * When a short hexadecimal string is used to name an object but there
   are multiple objects that share the string as the prefix of their
   names, the code lists these ambiguous candidates in a help message.
   These object names are now sorted according to their types for
   easier eyeballing.

 * "git fetch $there $refspec" that talks over protocol v2 can take
   advantage of server-side ref filtering; the code has been extended
   so that this mechanism triggers also when fetching with configured
   refspec.

 * Our HTTP client code used to advertise that we accept gzip encoding
   from the other side; instead, just let cURL library to advertise
   and negotiate the best one.

 * "git p4" learned to "unshelve" shelved commit from P4.
   (merge 123f631761 ld/p4-unshelve later to maint).


Performance, Internal Implementation, Development Support etc.

 * A "git fetch" from a repository with insane number of refs into a
   repository that is already up-to-date still wasted too many cycles
   making many lstat(2) calls to see if these objects at the tips
   exist as loose objects locally.  These lstat(2) calls are optimized
   away by enumerating all loose objects beforehand.
   It is unknown if the new strategy negatively affects existing use
   cases, fetching into a repository with many loose objects from a
   repository with small number of refs.

 * Git can be built to use either v1 or v2 of the PCRE library, and so
   far, the build-time configuration USE_LIBPCRE=YesPlease instructed
   the build procedure to use v1, but now it means v2.  USE_LIBPCRE1
   and USE_LIBPCRE2 can be used to explicitly choose which version to
   use, as before.

 * The build procedure learned to optionally use symbolic links
   (instead of hardlinks and copies) to install "git-foo" for built-in
   commands, whose binaries are all identical.

 * Conversion from uchar[20] to struct object_id continues.

 * The way "git worktree prune" worked internally has been simplified,
   by assuming how "git worktree move" moves an existing worktree to a
   different place.

 * Code clean-up for the "repository" abstraction.
   (merge 00a3da2a13 nd/remove-ignore-env-field later to maint).

 * Code to find the length to uniquely abbreviate object names based
   on packfile content, which is a relatively recent addtion, has been
   optimized to use the same fan-out table.

 * The mechanism to use parse-options API to automate the command line
   completion continues to get extended and polished.

 * Copies of old scripted Porcelain commands in contrib/examples/ have
   been removed.

 * Some tests that rely on the exact hardcoded values of object names
   have been updated in preparation for hash function migration.

 * Perf-test update.

 * Test helper update.

 * The effort continues to refactor the internal global data structure
   to make it possible to open multiple repositories, work with and
   then close them,

 * Small test-helper programs have been consolidated into a single
   binary.

 * API clean-up around ref-filter code.

 * Shell completion (in contrib) that gives list of paths have been
   optimized somewhat.

 * The index file is updated to record the fsmonitor section after a
   full scan was made, to avoid wasting the effort that has already
   spent.

 * Performance measuring framework in t/perf learned to help bisecting
   performance regressions.

 * Some multi-word source filenames are being renamed to separate
   words with dashes instead of underscores.

 * An reusable "memory pool" implementation has been extracted from
   fast-import.c, which in turn has become the first user of the
   mem-pool API.

 * A build-time option has been added to allow Git to be told to refer
   to its associated files relative to the main binary, in the same
   way that has been possible on Windows for quite some time, for
   Linux, BSDs and Darwin.

 * Precompute and store information necessary for ancestry traversal
   in a separate file to optimize graph walking.

 * The effort to pass the repository in-core structure throughout the
   API continues.  This round deals with the code that implements the
   refs/replace/ mechanism.

 * The build procedure "make DEVELOPER=YesPlease" learned to enable a
   bit more warning options depending on the compiler used to help
   developers more.  There also is "make DEVOPTS=tokens" knob
   available now, for those who want to help fixing warnings we
   usually ignore, for example.

 * A new version of the transport protocol is being worked on.

 * The code to interface to GPG has been restructured somewhat to make
   it cleaner to integrate with other types of signature systems later.

 * The code has been taught to use the duplicated information stored
   in the commit-graph file to learn the tree object name for a commit
   to avoid opening and parsing the commit object when it makes sense
   to do so.

 * "git gc" in a large repository takes a lot of time as it considers
   to repack all objects into one pack by default.  The command has
   been taught to pretend as if the largest existing packfile is
   marked with ".keep" so that it is left untouched while objects in
   other packs and loose ones are repacked.

 * The transport protocol v2 is getting updated further.

 * The codepath around object-info API has been taught to take the
   repository object (which in turn tells the API which object store
   the objects are to be located).

 * "git pack-objects" needs to allocate tons of "struct object_entry"
   while doing its work, and shrinking its size helps the performance
   quite a bit.

 * The implementation of "git rebase -i --root" has been updated to use
   the sequencer machinery more.

 * Developer support update, by using BUG() macro instead of die() to
   mark codepaths that should not happen more clearly.

 * Developer support.  Use newer GCC on one of the builds done at
   TravisCI.org to get more warnings and errors diagnosed.

 * Conversion from uchar[20] to struct object_id continues.

 * By code restructuring of submodule merge in merge-recursive,
   informational messages from the codepath are now given using the
   same mechanism as other output, and honor the merge.verbosity
   configuration.  The code also learned to give a few new messages
   when a submodule three-way merge resolves cleanly when one side
   records a descendant of the commit chosen by the other side.

 * Avoid unchecked snprintf() to make future code auditing easier.
   (merge ac4896f007 jk/snprintf-truncation later to maint).

 * Many tests hardcode the raw object names, which would change once
   we migrate away from SHA-1.  While some of them must test against
   exact object names, most of them do not have to use hardcoded
   constants in the test.  The latter kind of tests have been updated
   to test the moral equivalent of the original without hardcoding the
   actual object names.

 * The list of commands with their various attributes were spread
   across a few places in the build procedure, but it now is getting a
   bit more consolidated to allow more automation.

 * Quite a many tests assumed that newly created refs are made as
   loose refs using the files backend, which have been updated to use
   proper plumbing like rev-parse and update-ref, to avoid breakage
   once we start using different ref backends.


Also contains various documentation updates and code clean-ups.


Fixes since v2.17
-----------------

 * "git shortlog cruft" aborted with a BUG message when run outside a
   Git repository.  The command has been taught to complain about
   extra and unwanted arguments on its command line instead in such a
   case.
   (merge 4aa0161e83 ma/shortlog-revparse later to maint).

 * "git stash push -u -- <pathspec>" gave an unnecessary and confusing
   error message when there was no tracked files that match the
   <pathspec>, which has been fixed.
   (merge 353278687e tg/stash-untracked-with-pathspec-fix later to maint).

 * "git tag --contains no-such-commit" gave a full list of options
   after giving an error message.
   (merge 3bb0923f06 ps/contains-id-error-message later to maint).

 * "diff-highlight" filter (in contrib/) learned to understand "git log
   --graph" output better.
   (merge 4551fbba14 jk/diff-highlight-graph-fix later to maint).

 * when refs that do not point at committish are given, "git
   filter-branch" gave a misleading error messages.  This has been
   corrected.
   (merge f78ab355e7 yk/filter-branch-non-committish-refs later to maint).

 * "git submodule status" misbehaved on a submodule that has been
   removed from the working tree.
   (merge 74b6bda32f rs/status-with-removed-submodule later to maint).

 * When credential helper exits very quickly without reading its
   input, it used to cause Git to die with SIGPIPE, which has been
   fixed.
   (merge a0d51e8d0e eb/cred-helper-ignore-sigpipe later to maint).

 * "git rebase --keep-empty" still removed an empty commit if the
   other side contained an empty commit (due to the "does an
   equivalent patch exist already?" check), which has been corrected.
   (merge 3d946165e1 pw/rebase-keep-empty-fixes later to maint).

 * Some codepaths, including the refs API, get and keep relative
   paths, that go out of sync when the process does chdir(2).  The
   chdir-notify API is introduced to let these codepaths adjust these
   cached paths to the new current directory.
   (merge fb9c2d2703 jk/relative-directory-fix later to maint).

 * "cd sub/dir && git commit ../path" ought to record the changes to
   the file "sub/path", but this regressed long time ago.
   (merge 86238e07ef bw/commit-partial-from-subdirectory-fix later to maint).

 * Recent introduction of "--log-destination" option to "git daemon"
   did not work well when the daemon was run under "--inetd" mode.
   (merge e67d906d73 lw/daemon-log-destination later to maint).

 * Small fix to the autoconf build procedure.
   (merge 249482daf0 es/fread-reads-dir-autoconf-fix later to maint).

 * Fix an unexploitable (because the oversized contents are not under
   attacker's control) buffer overflow.
   (merge d8579accfa bp/fsmonitor-bufsize-fix later to maint).

 * Recent simplification of build procedure forgot a bit of tweak to
   the build procedure of contrib/mw-to-git/
   (merge d8698987f3 ab/simplify-perl-makefile later to maint).

 * Moving a submodule that itself has submodule in it with "git mv"
   forgot to make necessary adjustment to the nested sub-submodules;
   now the codepath learned to recurse into the submodules.

 * "git config --unset a.b", when "a.b" is the last variable in an
   otherwise empty section "a", left an empty section "a" behind, and
   worse yet, a subsequent "git config a.c value" did not reuse that
   empty shell and instead created a new one.  These have been
   (partially) corrected.
   (merge c71d8bb38a js/empty-config-section-fix later to maint).

 * "git worktree remove" learned that "-f" is a shorthand for
   "--force" option, just like for "git worktree add".
   (merge d228eea514 sb/worktree-remove-opt-force later to maint).

 * The completion script (in contrib/) learned to clear cached list of
   command line options upon dot-sourcing it again in a more efficient
   way.
   (merge 94408dc71c sg/completion-clear-cached later to maint).

 * "git svn" had a minor thinko/typo which has been fixed.
   (merge 51db271587 ab/git-svn-get-record-typofix later to maint).

 * During a "rebase -i" session, the code could give older timestamp
   to commits created by later "pick" than an earlier "reword", which
   has been corrected.
   (merge 12f7babd6b js/ident-date-fix later to maint).

 * "git submodule status" did not check the symbolic revision name it
   computed for the submodule HEAD is not the NULL, and threw it at
   printf routines, which has been corrected.
   (merge 0b5e2ea7cf nd/submodule-status-fix later to maint).

 * When fed input that already has In-Reply-To: and/or References:
   headers and told to add the same information, "git send-email"
   added these headers separately, instead of appending to an existing
   one, which is a violation of the RFC.  This has been corrected.
   (merge 256be1d3f0 sa/send-email-dedup-some-headers later to maint).

 * "git fast-export" had a regression in v2.15.0 era where it skipped
   some merge commits in certain cases, which has been corrected.
   (merge be011bbe00 ma/fast-export-skip-merge-fix later to maint).

 * The code did not propagate the terminal width to subprocesses via
   COLUMNS environment variable, which it now does.  This caused
   trouble to "git column" helper subprocess when "git tag --column=row"
   tried to list the existing tags on a display with non-default width.
   (merge b5d5a567fb nd/term-columns later to maint).

 * We learned that our source files with ".pl" and ".py" extensions
   are Perl and Python files respectively and changes to them are
   better viewed as such with appropriate diff drivers.
   (merge 7818b619e2 ab/perl-python-attrs later to maint).

 * "git rebase -i" sometimes left intermediate "# This is a
   combination of N commits" message meant for the human consumption
   inside an editor in the final result in certain corner cases, which
   has been fixed.
   (merge 15ef69314d js/rebase-i-clean-msg-after-fixup-continue later to maint).

 * A test to see if the filesystem normalizes UTF-8 filename has been
   updated to check what we need to know in a more direct way, i.e. a
   path created in NFC form can be accessed with NFD form (or vice
   versa) to cope with APFS as well as HFS.
   (merge 742ae10e35 tb/test-apfs-utf8-normalization later to maint).

 * "git format-patch --cover --attach" created a broken MIME multipart
   message for the cover letter, which has been fixed by keeping the
   cover letter as plain text file.
   (merge 50cd54ef4e bc/format-patch-cover-no-attach later to maint).

 * The split-index feature had a long-standing and dormant bug in
   certain use of the in-core merge machinery, which has been fixed.
   (merge 7db118303a en/unpack-trees-split-index-fix later to maint).

 * Asciidoctor gives a reasonable imitation for AsciiDoc, but does not
   render illustration in a literal block correctly when indented with
   HT by default. The problem is fixed by forcing 8-space tabs.
   (merge 379805051d bc/asciidoctor-tab-width later to maint).

 * Code clean-up to adjust to a more recent lockfile API convention that
   allows lockfile instances kept on the stack.
   (merge 0fa5a2ed8d ma/lockfile-cleanup later to maint).

 * the_repository->index is not a allocated piece of memory but
   repo_clear() indiscriminately attempted to free(3) it, which has
   been corrected.
   (merge 74373b5f10 nd/repo-clear-keep-the-index later to maint).

 * Code clean-up to avoid non-standard-conformant pointer arithmetic.
   (merge c112084af9 rs/no-null-ptr-arith-in-fast-export later to maint).

 * Code clean-up to turn history traversal more robust in a
   semi-corrupt repository.
   (merge 8702b30fd7 jk/unavailable-can-be-missing later to maint).

 * "git update-ref A B" is supposed to ensure that ref A does not yet
   exist when B is a NULL OID, but this check was not done correctly
   for pseudo-refs outside refs/ hierarchy, e.g. MERGE_HEAD.

 * "git submodule update" and "git submodule add" supported the
   "--reference" option to borrow objects from a neighbouring local
   repository like "git clone" does, but lacked the more recent
   invention "--dissociate".  Also "git submodule add" has been taught
   to take the "--progress" option.
   (merge a0ef29341a cf/submodule-progress-dissociate later to maint).

 * Update credential-netrc helper (in contrib/) to allow customizing
   the GPG used to decrypt the encrypted .netrc file.
   (merge 786ef50a23 lm/credential-netrc later to maint).

 * "git submodule update" attempts two different kinds of "git fetch"
   against the upstream repository to grab a commit bound at the
   submodule's path, but it incorrectly gave up if the first kind
   (i.e. a normal fetch) failed, making the second "last resort" one
   (i.e. fetching an exact commit object by object name) ineffective.
   This has been corrected.
   (merge e30d833671 sb/submodule-update-try-harder later to maint).

 * Error behaviour of "git grep" when it cannot read the index was
   inconsistent with other commands that uses the index, which has
   been corrected to error out early.
   (merge b2aa84c789 sb/grep-die-on-unreadable-index later to maint).

 * We used to call regfree() after regcomp() failed in some codepaths,
   which have been corrected.
   (merge 17154b1576 ma/regex-no-regfree-after-comp-fail later to maint).

 * The import-tars script (in contrib/) has been taught to handle
   tarballs with overly long paths that use PAX extended headers.
   (merge 12ecea46e3 pa/import-tars-long-names later to maint).

 * "git rev-parse Y..." etc. misbehaved when given endpoints were
   not committishes.
   (merge 0ed556d38f en/rev-parse-invalid-range later to maint).

 * "git pull --recurse-submodules --rebase", when the submodule
   repository's history did not have anything common between ours and
   the upstream's, failed to execute.  We need to fetch from them to
   continue even in such a case.
   (merge 4d36f88be7 jt/submodule-pull-recurse-rebase later to maint).

 * "git remote update" can take both a single remote nickname and a
   nickname for remote groups, but only one of them was documented.
   (merge a97447a42a nd/remote-update-doc later to maint).

 * "index-pack --strict" has been taught to make sure that it runs the
   final object integrity checks after making the freshly indexed
   packfile available to itself.
   (merge 3737746120 jk/index-pack-maint later to maint).

 * Make zlib inflate codepath more robust against versions of zlib
   that clobber unused portion of outbuf.
   (merge b611396e97 jl/zlib-restore-nul-termination later to maint).

 * Fix old merge glitch in Documentation during v2.13-rc0 era.
   (merge 28cb06020b mw/doc-merge-enumfix later to maint).

 * The code to read compressed bitmap was not careful to avoid reading
   past the end of the file, which has been corrected.
   (merge 1140bf01ec jk/ewah-bounds-check later to maint).

 * "make NO_ICONV=NoThanks" did not override NEEDS_LIBICONV
   (i.e. linkage of -lintl, -liconv, etc. that are platform-specific
   tweaks), which has been corrected.
   (merge fdb1fbbc7d es/make-no-iconv later to maint).

 * Other minor doc, test and build updates and code cleanups.
   (merge 248f66ed8e nd/trace-with-env later to maint).
   (merge 14ced5562c ys/bisect-object-id-missing-conversion-fix later to maint).
   (merge 5988eb631a ab/doc-hash-brokenness later to maint).
   (merge a4d4e32a70 pk/test-avoid-pipe-hiding-exit-status later to maint).
   (merge 05e293c1ac jk/flockfile-stdio later to maint).
   (merge e9184b0789 jk/t5561-missing-curl later to maint).
   (merge b1801b85a3 nd/worktree-move later to maint).
   (merge bbd374dd20 ak/bisect-doc-typofix later to maint).
   (merge 4855f06fb3 mn/send-email-credential-doc later to maint).
   (merge 8523b1e355 en/doc-typoes later to maint).
   (merge 43b44ccfe7 js/t5404-path-fix later to maint).
   (merge decf711fc1 ps/test-chmtime-get later to maint).
   (merge 22d11a6e8e es/worktree-docs later to maint).
   (merge 92a5dbbc22 tg/use-git-contacts later to maint).
   (merge adc887221f tq/t1510 later to maint).
   (merge bed21a8ad6 sg/doc-gc-quote-mismatch-fix later to maint).
   (merge 73364e4f10 tz/doc-git-urls-reference later to maint).
   (merge cd1e606bad bc/mailmap-self later to maint).
   (merge f7997e3682 ao/config-api-doc later to maint).
   (merge ee930754d8 jk/apply-p-doc later to maint).
   (merge 011b648646 nd/pack-format-doc later to maint).
   (merge 87a6bb701a sg/t5310-jgit-bitmap-test later to maint).
   (merge f6b82970aa sg/t5516-fixes later to maint).
   (merge 4362da078e sg/t7005-spaces-in-filenames-cleanup later to maint).
   (merge 7d0ee47c11 js/test-unset-prereq later to maint).
   (merge 5356a3c354 ah/misc-doc-updates later to maint).
   (merge 92c4a7a129 nd/completion-aliasfiletype-typofix later to maint).
   (merge 58bd77b66a nd/pack-unreachable-objects-doc later to maint).
   (merge 4ed79d5203 sg/t6500-no-redirect-of-stdin later to maint).
   (merge 17b8a2d6cd jk/config-blob-sans-repo later to maint).
   (merge 590551ca2c rd/tag-doc-lightweight later to maint).
   (merge 44f560fc16 rd/init-typo later to maint).
   (merge f156a0934a rd/p4-doc-markup-env later to maint).
   (merge 2a00502b14 tg/doc-sec-list later to maint).
   (merge 47cc91310a jk/submodule-fsck-loose-fixup later to maint).
   (merge efde7b725c rd/comment-typofix-in-sha1-file later to maint).
   (merge 7eedad15df rd/diff-options-typofix later to maint).
   (merge 58ebd936cc km/doc-workflows-typofix later to maint).
   (merge 30aa96cdf8 rd/doc-remote-tracking-with-hyphen later to maint).
   (merge cf317877e3 ks/branch-set-upstream later to maint).
   (merge 8de19d6be8 sg/t7406-chain-fix later to maint).

----------------------------------------------------------------

Changes since v2.17.0 are as follows:

Alexander Shopov (2):
      l10n: bg.po: Updated Bulgarian translation (3608t)
      l10n: bg.po: Updated Bulgarian translation (3608t)

Anders Kaseorg (1):
      Documentation/git-bisect.txt: git bisect term → git bisect terms

Andre Hinrichs (1):
      l10n: de.po: fix typos

Andreas Heiduk (9):
      git-svn: search --authors-prog in PATH too
      git-svn: allow empty email-address using authors-prog and authors-file
      doc: improve formatting in githooks.txt
      doc: align 'diff --no-index' in text and synopsis
      doc: clarify ignore rules for git ls-files
      doc: add '-d' and '-o' for 'git push'
      git-svn: remove ''--add-author-from' for 'commit-diff'
      doc: add note about shell quoting to revision.txt
      doc: normalize [--options] to [options] in git-diff

Antonio Ospite (1):
      doc: fix config API documentation about config_with_options

Beat Bolli (1):
      git-gui: search for all current SSH key types

Ben Peart (7):
      fsmonitor: fix incorrect buffer size when printing version number
      fsmonitor: force index write after full scan
      test-drop-caches: simplify delay loading of NtSetSystemInformation
      merge: update documentation for {merge,diff}.renameLimit
      merge: add merge.renames config setting
      merge: pass aggressive when rename detection is turned off
      add status config and command line options for rename detection

Bill Ritcher (1):
      mergetools: add support for guiffy

Birger Skogeng Pedersen (1):
      git-gui: bind CTRL/CMD+numpad ENTER to do_commit

Brandon Williams (79):
      pkt-line: introduce packet_read_with_status
      pkt-line: allow peeking a packet line without consuming it
      pkt-line: add delim packet support
      upload-pack: convert to a builtin
      upload-pack: factor out processing lines
      transport: use get_refs_via_connect to get refs
      connect: convert get_remote_heads to use struct packet_reader
      connect: discover protocol version outside of get_remote_heads
      transport: store protocol version
      protocol: introduce enum protocol_version value protocol_v2
      test-pkt-line: introduce a packet-line test helper
      serve: introduce git-serve
      ls-refs: introduce ls-refs server command
      connect: request remote refs using v2
      transport: convert get_refs_list to take a list of ref prefixes
      transport: convert transport_get_remote_refs to take a list of ref prefixes
      ls-remote: pass ref prefixes when requesting a remote's refs
      fetch: pass ref prefixes when fetching
      push: pass ref prefixes when pushing
      upload-pack: introduce fetch server command
      fetch-pack: perform a fetch using v2
      fetch-pack: support shallow requests
      connect: refactor git_connect to only get the protocol version once
      connect: don't request v2 when pushing
      transport-helper: remove name parameter
      transport-helper: refactor process_connect_service
      transport-helper: introduce stateless-connect
      pkt-line: add packet_buf_write_len function
      remote-curl: create copy of the service name
      remote-curl: store the protocol version the server responded with
      http: allow providing extra headers for http requests
      http: don't always add Git-Protocol header
      http: eliminate "# service" line when using protocol v2
      remote-curl: implement stateless-connect command
      remote-curl: don't request v2 when pushing
      commit: allow partial commits with relative paths
      serve: introduce the server-option capability
      ls-remote: send server options when using protocol v2
      fetch: send server options when using protocol v2
      refspec: move refspec parsing logic into its own file
      refspec: rename struct refspec to struct refspec_item
      refspec: factor out parsing a single refspec
      refspec: introduce struct refspec
      refspec: convert valid_fetch_refspec to use parse_refspec
      submodule--helper: convert push_check to use struct refspec
      pull: convert get_tracking_branch to use refspec_item_init
      transport: convert transport_push to use struct refspec
      remote: convert check_push_refs to use struct refspec
      remote: convert match_push_refs to use struct refspec
      clone: convert cmd_clone to use refspec_item_init
      fast-export: convert to use struct refspec
      remote: convert push refspecs to struct refspec
      remote: convert fetch refspecs to struct refspec
      remote: remove add_prune_tags_to_fetch_refspec
      transport-helper: convert to use struct refspec
      fetch: convert fetch_one to use struct refspec
      fetch: convert refmap to use struct refspec
      refspec: remove the deprecated functions
      fetch: convert do_fetch to take a struct refspec
      fetch: convert get_ref_map to take a struct refspec
      fetch: convert prune_refs to take a struct refspec
      remote: convert get_stale_heads to take a struct refspec
      remote: convert apply_refspecs to take a struct refspec
      remote: convert query_refspecs to take a struct refspec
      remote: convert get_ref_match to take a struct refspec
      remote: convert match_explicit_refs to take a struct refspec
      push: check for errors earlier
      push: convert to use struct refspec
      transport: convert transport_push to take a struct refspec
      send-pack: store refspecs in a struct refspec
      transport: remove transport_verify_remote_names
      http-push: store refspecs in a struct refspec
      remote: convert match_push_refs to take a struct refspec
      remote: convert check_push_refs to take a struct refspec
      submodule: convert push_unpushed_submodules to take a struct refspec
      refspec: consolidate ref-prefix generation logic
      fetch: generate ref-prefixes when using a configured refspec
      remote-curl: accept all encodings supported by curl
      remote-curl: accept compressed responses with protocol v2

Casey Fitzpatrick (3):
      submodule: clean up substitutions in script
      submodule: add --progress option to add command
      submodule: add --dissociate option to add/update commands

Changwoo Ryu (1):
      l10n: ko.po: Update Korean translation

Christian Couder (7):
      perf/aggregate: add display_dir()
      perf/aggregate: add --sort-by=regression option
      perf/run: add --subsection option
      t/perf: add scripts to bisect performance regressions
      perf/aggregate: use Getopt::Long for option parsing
      perf/bisect_run_script: disable codespeed
      t990X: use '.git/objects' as 'deep inside .git' path

Christian Hesse (2):
      perl: fix installing modules from contrib
      Makefile: mark perllibdir as a .PHONY target

Christopher Diaz Riveros (3):
      l10n: es.po: Spanish update for v2.18.0 round 1
      l10n: es.po: Spanish update for v2.18.0 round 2
      l10n: es.po: Spanish update for v2.18.0 round 3

Clemens Buchacher (2):
      git-gui: workaround ttk:style theme use
      completion: improve ls-files filter performance

Dan Jacques (3):
      Makefile: generate Perl header from template file
      Makefile: add Perl runtime prefix support
      exec_cmd: RUNTIME_PREFIX on some POSIX systems

David Turner (1):
      t: make many tests depend less on the refs being files

Derrick Stolee (20):
      packfile: define and use bsearch_pack()
      sha1_name: use bsearch_pack() for abbreviations
      csum-file: rename hashclose() to finalize_hashfile()
      csum-file: refactor finalize_hashfile() method
      commit-graph: add format document
      graph: add commit graph design document
      commit-graph: create git-commit-graph builtin
      commit-graph: implement write_commit_graph()
      commit-graph: implement git-commit-graph write
      commit-graph: implement git commit-graph read
      commit-graph: add core.commitGraph setting
      commit-graph: close under reachability
      commit: integrate commit graph with commit parsing
      commit-graph: read only from specific pack-indexes
      commit-graph: build graph from starting commits
      commit-graph: implement "--append" option
      treewide: rename tree to maybe_tree
      commit: create get_commit_tree() method
      treewide: replace maybe_tree with accessor methods
      commit-graph: lazy-load trees for commits

Drew DeVault (1):
      git-send-email: allow re-editing of message

Eckhard S. Maaß (1):
      wt-status: use settings from git_diff_ui_config

Elijah Newren (73):
      directory rename detection: basic testcases
      directory rename detection: directory splitting testcases
      directory rename detection: testcases to avoid taking detection too far
      directory rename detection: partially renamed directory testcase/discussion
      directory rename detection: files/directories in the way of some renames
      directory rename detection: testcases checking which side did the rename
      directory rename detection: more involved edge/corner testcases
      directory rename detection: testcases exploring possibly suboptimal merges
      directory rename detection: miscellaneous testcases to complete coverage
      directory rename detection: tests for handling overwriting untracked files
      directory rename detection: tests for handling overwriting dirty files
      merge-recursive: move the get_renames() function
      merge-recursive: introduce new functions to handle rename logic
      merge-recursive: fix leaks of allocated renames and diff_filepairs
      merge-recursive: make !o->detect_rename codepath more obvious
      merge-recursive: split out code for determining diff_filepairs
      merge-recursive: make a helper function for cleanup for handle_renames
      merge-recursive: add get_directory_renames()
      merge-recursive: check for directory level conflicts
      merge-recursive: add computation of collisions due to dir rename & merging
      merge-recursive: check for file level conflicts then get new name
      merge-recursive: when comparing files, don't include trees
      merge-recursive: apply necessary modifications for directory renames
      merge-recursive: avoid clobbering untracked files with directory renames
      merge-recursive: fix overwriting dirty files involved in renames
      merge-recursive: fix remaining directory rename + dirty overwrite cases
      directory rename detection: new testcases showcasing a pair of bugs
      merge-recursive: avoid spurious rename/rename conflict from dir renames
      merge-recursive: ensure we write updates for directory-renamed file
      Documentation: fix several one-character-off spelling errors
      Documentation: normalize spelling of 'normalised'
      directory rename detection: basic testcases
      directory rename detection: directory splitting testcases
      directory rename detection: testcases to avoid taking detection too far
      directory rename detection: partially renamed directory testcase/discussion
      directory rename detection: files/directories in the way of some renames
      directory rename detection: testcases checking which side did the rename
      directory rename detection: more involved edge/corner testcases
      directory rename detection: testcases exploring possibly suboptimal merges
      directory rename detection: miscellaneous testcases to complete coverage
      directory rename detection: tests for handling overwriting untracked files
      directory rename detection: tests for handling overwriting dirty files
      merge-recursive: move the get_renames() function
      merge-recursive: introduce new functions to handle rename logic
      merge-recursive: fix leaks of allocated renames and diff_filepairs
      merge-recursive: make !o->detect_rename codepath more obvious
      merge-recursive: split out code for determining diff_filepairs
      merge-recursive: make a helper function for cleanup for handle_renames
      Make running git under other debugger-like programs easy
      unpack_trees: fix breakage when o->src_index != o->dst_index
      merge-recursive: add get_directory_renames()
      merge-recursive: check for directory level conflicts
      merge-recursive: add computation of collisions due to dir rename & merging
      merge-recursive: check for file level conflicts then get new name
      merge-recursive: when comparing files, don't include trees
      merge-recursive: apply necessary modifications for directory renames
      merge-recursive: avoid clobbering untracked files with directory renames
      merge-recursive: fix overwriting dirty files involved in renames
      merge-recursive: fix remaining directory rename + dirty overwrite cases
      directory rename detection: new testcases showcasing a pair of bugs
      merge-recursive: avoid spurious rename/rename conflict from dir renames
      merge-recursive: improve add_cacheinfo error handling
      merge-recursive: move more is_dirty handling to merge_content
      merge-recursive: avoid triggering add_cacheinfo error with dirty mod
      t6046: testcases checking whether updates can be skipped in a merge
      merge-recursive: fix was_tracked() to quit lying with some renamed paths
      merge-recursive: fix remainder of was_dirty() to use original index
      merge-recursive: make "Auto-merging" comment show for other merges
      merge-recursive: fix check for skipability of working tree updates
      merge-recursive: provide pair of `unpack_trees_{start,finish}()`
      rev-parse: check lookup'ed commit references for NULL
      RelNotes: remove duplicate release note
      RelNotes 2.18: clarify where directory rename detection applies

Eric Sunshine (6):
      t3200: verify "branch --list" sanity when rebasing from detached HEAD
      t2028: tighten grep expression to make "move worktree" test more robust
      git-worktree.txt: recommend 'git worktree remove' over manual deletion
      git-worktree.txt: unify command-line prompt in example blocks
      configure.ac: fix botched FREAD_READS_DIRECTORIES check
      Makefile: make NO_ICONV really mean "no iconv"

Erik E Brady (1):
      credential: ignore SIGPIPE when writing to credential helpers

Florian Gamböck (1):
      completion: load completion file for external subcommand

Harald Nordgren (1):
      ls-remote: create '--sort' option

Jameson Miller (3):
      fast-import: rename mem_pool type to mp_block
      fast-import: introduce mem_pool type
      mem-pool: move reusable parts of memory pool into its own file

Jean-Noël Avila (2):
      l10n: fr.po v2.18 round 1
      l10n: fr.po v2.18.0 round 3

Jeff King (60):
      diff-highlight: correct test graph diagram
      diff-highlight: use test_tick in graph test
      diff-highlight: prefer "echo" to "cat" in tests
      diff-highlight: test interleaved parallel lines of history
      diff-highlight: test graphs with --color
      diff-highlight: use flush() helper consistently
      diff-highlight: detect --graph by indent
      set_git_dir: die when setenv() fails
      add chdir-notify API
      set_work_tree: use chdir_notify
      refs: use chdir_notify to update cached relative paths
      config: move flockfile() closer to unlocked functions
      t5561: drop curl stderr redirects
      t5561: skip tests if curl is not available
      ref-filter: use "struct object_id" consistently
      ref-filter: make ref_array_item allocation more consistent
      ref-filter: factor ref_array pushing into its own function
      t7004: fix mistaken tag name
      gpg-interface: handle bool user.signingkey
      gpg-interface: modernize function declarations
      gpg-interface: use size_t for signature buffer size
      gpg-interface: fix const-correctness of "eol" pointer
      gpg-interface: extract gpg line matching helper
      gpg-interface: find the last gpg signature line
      apply: clarify "-p" documentation
      pager: set COLUMNS to term_columns()
      mark_tree_contents_uninteresting(): drop missing object check
      mark_parents_uninteresting(): drop missing object check
      mark_parents_uninteresting(): replace list with stack
      mark_parents_uninteresting(): avoid most allocation
      get_main_ref_store: BUG() when outside a repository
      config: die when --blob is used outside a repository
      http: use strbufs instead of fixed buffers
      log_write_email_headers: use strbufs
      shorten_unambiguous_ref: use xsnprintf
      fmt_with_err: add a comment that truncation is OK
      submodule-config: verify submodule names as paths
      is_ntfs_dotgit: use a size_t for traversing string
      is_hfs_dotgit: match other .git files
      skip_prefix: add case-insensitive variant
      verify_path: drop clever fallthrough
      verify_dotfile: mention case-insensitivity in comment
      update-index: stat updated files earlier
      verify_path: disallow symlinks in .gitmodules
      index-pack: make fsck error message more specific
      fsck: simplify ".git" check
      fsck: actually fsck blob data
      fsck: detect gitmodules files
      fsck: handle promisor objects in .gitmodules check
      fsck: check .gitmodules content
      fsck: call fsck_finish() after fscking objects
      unpack-objects: call fsck_finish() after fscking objects
      index-pack: check .gitmodules files with --strict
      fsck: complain when .gitmodules is a symlink
      prepare_commit_graft: treat non-repository as a noop
      index-pack: handle --strict checks of non-repo packs
      t7415: don't bother creating commit for symlink test
      fsck: avoid looking at NULL blob->object
      ewah_read_mmap: bounds-check mmap reads
      ewah: adjust callers of ewah_read_mmap()

Jeremy Linton (1):
      packfile: correct zlib buffer handling

Jiang Xin (4):
      l10n: git.pot: v2.18.0 round 1 (108 new, 14 removed)
      l10n: git.pot: v2.18.0 round 2 (144 new, 6 removed)
      l10n: git.pot: v2.18.0 round 3 (1 new, 1 removed)
      l10n: zh_CN: for git v2.18.0 l10n round 1 to 3

Johannes Schindelin (69):
      git_config_set: fix off-by-two
      t1300: rename it to reflect that `repo-config` was deprecated
      t1300: demonstrate that --replace-all can "invent" newlines
      config --replace-all: avoid extra line breaks
      t1300: avoid relying on a bug
      t1300: remove unreasonable expectation from TODO
      t5404: relax overzealous test
      t1300: add a few more hairy examples of sections becoming empty
      t1300: `--unset-all` can leave an empty section behind (bug)
      config: introduce an optional event stream while parsing
      config: avoid using the global variable `store`
      config_set_store: rename some fields for consistency
      git_config_set: do not use a state machine
      git_config_set: make use of the config parser's event stream
      git config --unset: remove empty sections (in the common case)
      git_config_set: reuse empty sections
      exec_cmd: provide a new-style RUNTIME_PREFIX helper for Windows
      mingw/msvc: use the new-style RUNTIME_PREFIX helper
      color: introduce support for colorizing stderr
      push: test to verify that push errors are colored
      config: document the settings to colorize push errors/hints
      gettext: avoid initialization if the locale dir is not present
      git_setup_gettext: plug memory leak
      sequencer: avoid using errno clobbered by rollback_lock_file()
      sequencer: make rearrange_squash() a bit more obvious
      sequencer: refactor how original todo list lines are accessed
      sequencer: offer helpful advice when a command was rescheduled
      sequencer: introduce new commands to reset the revision
      sequencer: introduce the `merge` command
      sequencer: fast-forward `merge` commands, if possible
      rebase-helper --make-script: introduce a flag to rebase merges
      rebase: introduce the --rebase-merges option
      sequencer: make refs generated by the `label` command worktree-local
      sequencer: handle post-rewrite for merge commands
      rebase --rebase-merges: avoid "empty merges"
      pull: accept --rebase=merges to recreate the branch topology
      rebase -i: introduce --rebase-merges=[no-]rebase-cousins
      rebase -i --rebase-merges: add a section to the man page
      argv_array: offer to split a string by whitespace
      commit: Let the callback of for_each_mergetag return on error
      replace: avoid using die() to indicate a bug
      tests: introduce test_unset_prereq, for debugging
      replace: "libify" create_graft() and callees
      replace: prepare create_graft() for converting graft files wholesale
      replace: introduce --convert-graft-file
      Add a test for `git replace --convert-graft-file`
      Deprecate support for .git/info/grafts
      filter-branch: stop suggesting to use grafts
      technical/shallow: stop referring to grafts
      technical/shallow: describe why shallow cannot use replace refs
      Remove obsolete script to convert grafts to replace refs
      rebase -i: demonstrate bugs with fixup!/squash! commit messages
      rebase -i: Handle "combination of <n> commits" with GETTEXT_POISON
      sequencer: always commit without editing when asked for
      rebase --skip: clean up commit message after a failed fixup/squash
      sequencer: extract helper to update active_cache_tree
      sequencer: allow introducing new root commits
      rebase --rebase-merges: a "merge" into a new root is a fast-forward
      sequencer: learn about the special "fake root commit" handling
      rebase --rebase-merges: root commits can be cousins, too
      rebase -i --root: let the sequencer handle even the initial part
      test-tool: help verifying BUG() code paths
      run-command: use BUG() to report bugs, not die()
      Replace all die("BUG: ...") calls by BUG() ones
      Convert remaining die*(BUG) messages
      config: a user-provided invalid section is not a BUG
      is_ntfs_dotgit: match other .git files
      is_{hfs,ntfs}_dotgitmodules: add tests
      rebase --root: fix amending root commit messages

Johannes Sixt (2):
      sequencer: reset the committer date before commits
      git: add -P as a short option for --no-pager

Jonathan Nieder (6):
      sha1_file: allow map_sha1_file_1 to handle arbitrary repositories
      sha1_file: allow sha1_loose_object_info to handle arbitrary repositories
      Makefile: remove unused @@PERLLIBDIR@@ substitution variable
      Makefile: quote $INSTLIBDIR when passing it to sed
      packfile: add repository argument to packed_object_info
      fetch: do not pass ref-prefixes for fetch by exact SHA1

Jonathan Tan (5):
      grep: remove "repo" arg from non-supporting funcs
      upload-pack: fix error message typo
      upload-pack: read config when serving protocol v2
      {fetch,upload}-pack: support filter in protocol v2
      submodule: do not pass null OID to setup_revisions

Jordi Mas (1):
      l10n: Update Catalan translation

Junio C Hamano (27):
      stash: fix nonsense pipeline
      The first batch for 2.18 cycle
      The second batch for 2.18
      The third batch for 2.18
      Revert "Merge branch 'en/rename-directory-detection'"
      gc: do not upcase error message shown with die()
      parseopt: handle malformed --expire arguments more nicely
      The fourth batch for 2.18
      The fifth batch for 2.18
      argv-array: return the pushed string from argv_push*()
      Git 2.13.7
      Git 2.14.4
      Git 2.15.2
      Git 2.16.4
      Git 2.17.1
      The sixth batch for 2.18
      The seventh batch for 2.18
      Git 2.18-rc0
      refspec-api: avoid uninitialized field in refspec item
      A bit more topics before -rc1
      Git 2.18-rc1
      RelNotes 2.18: typofixes
      index-pack: correct install_packed_git() args
      Git 2.18-rc2
      A bunch of micro-fixes before going 2.18 final
      Almost 2.18 final
      Git 2.18

Kaartic Sivaraam (2):
      branch --list: print useful info whilst interactive rebasing a detached HEAD
      t3200: clarify description of --set-upstream test

Karthikeyan Singaravelan (1):
      doc: fix typos in documentation and release notes

Kyle Meyer (1):
      gitworkflows: fix grammar in 'Merge upwards' rule

Lars Schneider (10):
      strbuf: remove unnecessary NUL assignment in xstrdup_tolower()
      strbuf: add xstrdup_toupper()
      strbuf: add a case insensitive starts_with()
      utf8: teach same_encoding() alternative UTF encoding names
      utf8: add function to detect prohibited UTF-16/32 BOM
      utf8: add function to detect a missing UTF-16/32 BOM
      convert: add 'working-tree-encoding' attribute
      convert: check for detectable errors in UTF encodings
      convert: add tracing for 'working-tree-encoding' attribute
      convert: add round trip check based on 'core.checkRoundtripEncoding'

Leif Middelschulte (2):
      merge-recursive: give notice when submodule commit gets fast-forwarded
      merge-submodule: reduce output verbosity

Loganaden Velvindron (1):
      http: allow use of TLS 1.3

Lucas Werkmeister (1):
      daemon.c: fix condition for redirecting stderr

Luis Marsano (2):
      git-credential-netrc: adapt to test framework for git
      git-credential-netrc: accept gpg option

Luke Diamand (7):
      git-p4: add unshelve command
      git-p4: disable-rebase: allow setting this via configuration
      git-p4: add option to disable syncing of p4/master with p4
      git-p4: better error reporting when p4 fails
      git-p4: raise exceptions from p4CmdList based on error from p4 server
      git-p4: narrow the scope of exceptions caught when parsing an int
      git-p4: auto-size the block

Martin Ågren (24):
      git-shortlog.txt: reorder usages
      shortlog: add usage-string for stdin-reading
      shortlog: disallow left-over arguments outside repo
      doc: convert \--option to --option
      doc: convert [\--] to [--]
      git-[short]log.txt: unify quoted standalone --
      git-submodule.txt: quote usage in monospace, drop backslash
      fast-export: fix regression skipping some merge-commits
      http-fetch: make `-a` standard behaviour
      walker: drop fields of `struct walker` which are always 1
      t/helper/test-write-cache: clean up lock-handling
      refs.c: do not die if locking fails in `write_pseudoref()`
      refs.c: do not die if locking fails in `delete_pseudoref()`
      lock_file: make function-local locks non-static
      lock_file: move static locks into functions
      refs.c: refer to "object ID", not "sha1", in error messages
      t1400: add tests around adding/deleting pseudorefs
      refs: handle zero oid for pseudorefs
      merge: setup `opts` later in `checkout_fast_forward()`
      config: free resources of `struct config_store_data`
      config: let `config_store_data_clear()` handle `value_regex`
      config: let `config_store_data_clear()` handle `key`
      regex: do not call `regfree()` if compilation fails
      unpack_trees_options: free messages when done

Meng-Sung Wu (1):
      doc: update the order of the syntax `git merge --continue`

Michal Nazarewicz (1):
      send-email: simplify Gmail example in the documentation

Michele Locati (1):
      filter-branch: return 2 when nothing to rewrite

Nguyễn Thái Ngọc Duy (108):
      repository: initialize the_repository in main()
      repository.c: move env-related setup code back to environment.c
      repository.c: delete dead functions
      sha1_file.c: move delayed getenv(altdb) back to setup_git_env()
      repository: delete ignore_env member
      gc.txt: more details about what gc does
      worktree: delete dead code
      worktree prune: improve prune logic when worktree is moved
      repository.h: add comment and clarify repo_set_gitdir
      git.c: move cmd_struct declaration up
      git.c: add hidden option --list-parseopt-builtins
      completion: mention the oldest version we need to support
      completion: factor out _git_xxx calling code
      completion: add --option completion for most builtin commands
      completion: delete option-only completion commands
      completion: use __gitcomp_builtin in _git_ls_tree
      completion: use __gitcomp_builtin in _git_cherry
      packfile: keep prepare_packed_git() private
      t/helper: add an empty test-tool program
      t/helper: merge test-chmtime into test-tool
      t/helper: merge test-sha1 into test-tool
      t/helper: merge test-lazy-init-name-hash into test-tool
      t/helper: merge test-config into test-tool
      t/helper: merge test-ctype into test-tool
      t/helper: merge test-date into test-tool
      t/helper: merge (unused) test-delta into test-tool
      t/helper: merge test-drop-caches into test-tool
      t/helper: merge test-dump-cache-tree into test-tool
      t/helper: merge test-dump-split-index into test-tool
      t/helper: merge test-example-decorate into test-tool
      t/helper: merge test-genrandom into test-tool
      t/helper: merge test-hashmap into test-tool
      t/helper: merge test-index-version into test-tool
      t/helper: merge (unused) test-match-trees into test-tool
      t/helper: merge (unused) test-mergesort into test-tool
      t/helper: merge test-mktemp into test-tool
      t/helper: merge test-online-cpus into test-tool
      t/helper: merge test-path-utils into test-tool
      t/helper: merge test-prio-queue into test-tool
      t/helper: merge test-read-cache into test-tool
      t/helper: merge test-ref-store into test-tool
      t/helper: merge test-regex into test-tool
      t/helper: merge test-revision-walking into test-tool
      t/helper: merge test-run-command into test-tool
      t/helper: merge test-scrap-cache-tree into test-tool
      t/helper: merge test-sha1-array into test-tool
      t/helper: merge test-sigchain into test-tool
      t/helper: merge test-strcmp-offset into test-tool
      t/helper: merge test-string-list into test-tool
      t/helper: merge test-submodule-config into test-tool
      t/helper: merge test-subprocess into test-tool
      t/helper: merge test-urlmatch-normalization into test-tool
      t/helper: merge test-wildmatch into test-tool
      t/helper: merge test-write-cache into test-tool
      trace.c: export trace_setup_key
      read-cache.c: make $GIT_TEST_SPLIT_INDEX boolean
      pack-objects: a bit of document about struct object_entry
      pack-objects: turn type and in_pack_type to bitfields
      pack-objects: use bitfield for object_entry::dfs_state
      pack-objects: use bitfield for object_entry::depth
      pack-objects: move in_pack_pos out of struct object_entry
      pack-objects: move in_pack out of struct object_entry
      pack-objects: refer to delta objects by index instead of pointer
      pack-objects: shrink z_delta_size field in struct object_entry
      pack-objects: don't check size when the object is bad
      pack-objects: clarify the use of object_entry::size
      pack-objects: shrink size field in struct object_entry
      pack-objects: shrink delta_size field in struct object_entry
      pack-objects: reorder members to shrink struct object_entry
      ci: exercise the whole test suite with uncommon code in pack-objects
      t7700: have closing quote of a test at the beginning of line
      repack: add --keep-pack option
      gc: add --keep-largest-pack option
      gc: add gc.bigPackThreshold config
      gc: handle a corner case in gc.bigPackThreshold
      gc --auto: exclude base pack if not enough mem to "repack -ad"
      pack-objects: show some progress when counting kept objects
      connect.c: mark die_initial_contact() NORETURN
      Makefile: detect compiler and enable more warnings in DEVELOPER=1
      submodule--helper: don't print null in 'submodule status'
      doc: keep first level section header in upper case
      pack-objects: validation and documentation about unreachable options
      completion: fix misspelled config key aliasesfiletype
      repository: fix free problem with repo_clear(the_repository)
      generate-cmds.sh: factor out synopsis extract code
      generate-cmds.sh: export all commands to command-list.h
      help: use command-list.h for common command list
      Remove common-cmds.h
      pack-format.txt: more details on pack file format
      column: fix off-by-one default width
      commit.h: rearrange 'index' to shrink struct commit
      git.c: convert --list-* to --list-cmds=*
      git --list-cmds: collect command list in a string_list
      completion: implement and use --list-cmds=main,others
      git: support --list-cmds=list-<category>
      help: add "-a --verbose" to list all commands with synopsis
      help: use command-list.txt for the source of guides
      command-list.txt: documentation and guide line
      completion: let git provide the completable command list
      completion: reduce completable command list
      Move declaration for alias.c to alias.h
      completion: add and use --list-cmds=nohelpers
      completion: add and use --list-cmds=alias
      completion: allow to customize the completable command list
      travis-ci: run gcc-8 on linux-gcc jobs
      Use OPT_SET_INT_F() for cmdline option specification
      remote.txt: update documentation for 'update' command
      remote: doc typofix

Olga Telezhnaya (6):
      ref-filter: add shortcut to work with strbufs
      ref-filter: start adding strbufs with errors
      ref-filter: add return value && strbuf to handlers
      ref-filter: change parsing function error handling
      ref-filter: add return value to parsers
      ref-filter: libify get_ref_atom_value()

Orgad Shaneh (1):
      git-rebase--interactive: fix copy-paste mistake

Paul-Sebastian Ungureanu (2):
      parse-options: do not show usage upon invalid option value
      t/helper: 'test-chmtime (--get|-g)' to print only the mtime

Pedro Alvarez Piedehierro (1):
      import-tars: read overlong names from pax extended header

Peter Krefting (2):
      l10n: sv.po: Update Swedish translation (3470t0f0u)
      l10n: sv.po: Update Swedish translation (3608t0f0u)

Philip Oakley (1):
      Avoid multiple PREFIX definitions

Phillip Wood (7):
      rebase --root: stop assuming squash_onto is unset
      rebase -i --keep-empty: don't prune empty commits
      rebase: respect --no-keep-empty
      rebase: extend --signoff support
      rebase -p: error out if --signoff is given
      rebase --keep-empty: always use interactive rebase
      rebase --rebase-merges: add test for --keep-empty

Pratik Karki (1):
      test: avoid pipes in git related commands for test

Ralf Thielow (1):
      l10n: TEAMS: remove inactive de team members

Ramsay Jones (1):
      BUG_exit_code: fix sparse "symbol not declared" warning

René Scharfe (11):
      sha1_name: use bsearch_pack() in unique_in_pack()
      bisect: use oid_to_hex() for converting object_id hashes to hex strings
      run-command: use strbuf_addstr() for adding a string to a strbuf
      submodule: check for NULL return of get_submodule_ref_store()
      replace_object: use oidmap
      fast-export: avoid NULL pointer arithmetic
      t5512: run git fetch inside test
      fsmonitor: use internal argv_array of struct child_process
      merge-recursive: use xstrdup() instead of fixed buffer
      blame: release string_list after use in parse_color_fields()
      merge-recursive: use xstrdup() instead of fixed buffer

Robert P. J. Day (7):
      Use proper syntax for replaceables in command docs
      tag: clarify in the doc that a tag can refer to a non-commit object
      init: fix grammar in "templates not found" msg
      p4.txt: Use backquotes for variable names
      sha1-file.c: correct $GITDIR to $GIT_DIR in a comment
      diff-options.txt: fix minor typos, font inconsistencies, in docs
      Use hyphenated "remote-tracking branch" (docs and comments)

Romain Merland (1):
      git-p4: add options --commit and --disable-rebase

Ryan Dammrose (1):
      push: colorize errors

SZEDER Gábor (25):
      test_must_be_empty: simplify file existence check
      t9902-completion: add tests demonstrating issues with quoted pathnames
      completion: move __git_complete_index_file() next to its helpers
      completion: simplify prefix path component handling during path completion
      completion: support completing non-ASCII pathnames
      completion: improve handling quoted paths on the command line
      completion: let 'ls-files' and 'diff-index' filter matching paths
      completion: use 'awk' to strip trailing path components
      t9902-completion: ignore COMPREPLY element order in some tests
      completion: remove repeated dirnames with 'awk' during path completion
      completion: improve handling quoted paths in 'git ls-files's output
      completion: fill COMPREPLY directly when completing paths
      completion: reduce overhead of clearing cached --options
      docs/git-gc: fix minor rendering issue
      coccinelle: avoid wrong transformation suggestions from commit.cocci
      t6050-replace: don't disable stdin for the whole test script
      t5310-pack-bitmaps: make JGit tests work with GIT_TEST_SPLIT_INDEX
      t5516-fetch-push: fix 'push with dry-run' test
      t5516-fetch-push: fix broken &&-chain
      t7005-editor: get rid of the SPACES_IN_FILENAMES prereq
      completion: don't return with error from __gitcomp_file_direct()
      t9902-completion: exercise __git_complete_index_file() directly
      completion: correct zsh detection when run from git-completion.zsh
      t7406-submodule-update: fix broken &&-chains
      RelNotes 2.18: minor fix to entry about dynamically loading completions

Sergey Organov (1):
      glossary: substitute "ancestor" for "direct ancestor" in 'push' description.

Stefan Agner (1):
      send-email: avoid duplicate In-Reply-To/References

Stefan Beller (82):
      repository: introduce raw object store field
      object-store: migrate alternates struct and functions from cache.h
      object-store: move alt_odb_list and alt_odb_tail to object store
      object-store: free alt_odb_list
      object-store: move packed_git and packed_git_mru to object store
      object-store: close all packs upon clearing the object store
      pack: move prepare_packed_git_run_once to object store
      pack: move approximate object count to object store
      sha1_file: add raw_object_store argument to alt_odb_usable
      sha1_file: add repository argument to link_alt_odb_entry
      sha1_file: add repository argument to read_info_alternates
      sha1_file: add repository argument to link_alt_odb_entries
      sha1_file: add repository argument to prepare_alt_odb
      sha1_file: allow link_alt_odb_entries to handle arbitrary repositories
      sha1_file: allow prepare_alt_odb to handle arbitrary repositories
      sha1_file: add repository argument to sha1_file_name
      sha1_file: add repository argument to stat_sha1_file
      sha1_file: add repository argument to open_sha1_file
      sha1_file: add repository argument to map_sha1_file_1
      sha1_file: add repository argument to map_sha1_file
      sha1_file: add repository argument to sha1_loose_object_info
      sha1_file: allow sha1_file_name to handle arbitrary repositories
      sha1_file: allow stat_sha1_file to handle arbitrary repositories
      sha1_file: allow open_sha1_file to handle arbitrary repositories
      sha1_file: allow map_sha1_file to handle arbitrary repositories
      packfile: allow prepare_packed_git_mru to handle arbitrary repositories
      packfile: allow rearrange_packed_git to handle arbitrary repositories
      packfile: allow install_packed_git to handle arbitrary repositories
      packfile: add repository argument to prepare_packed_git_one
      packfile: add repository argument to prepare_packed_git
      packfile: add repository argument to reprepare_packed_git
      packfile: allow prepare_packed_git_one to handle arbitrary repositories
      packfile: allow prepare_packed_git to handle arbitrary repositories
      packfile: allow reprepare_packed_git to handle arbitrary repositories
      packfile: add repository argument to find_pack_entry
      packfile: allow find_pack_entry to handle arbitrary repositories
      submodule.h: drop declaration of connect_work_tree_and_git_dir
      submodule-config: allow submodule_free to handle arbitrary repositories
      submodule-config: add repository argument to submodule_from_{name, path}
      submodule-config: remove submodule_from_cache
      submodule: fixup nested submodules after moving the submodule
      write_or_die.c: rename to use dashes in file name
      unicode_width.h: rename to use dash in file name
      exec_cmd: rename to use dash in file name
      sha1_name.c: rename to use dash in file name
      sha1_file.c: rename to use dash in file name
      replace_object.c: rename to use dash in file name
      replace-object: move replace_map to object store
      object-store: move lookup_replace_object to replace-object.h
      replace-object: eliminate replace objects prepared flag
      replace-object: check_replace_refs is safe in multi repo environment
      refs: add repository argument to get_main_ref_store
      refs: add repository argument to for_each_replace_ref
      replace-object: add repository argument to prepare_replace_object
      replace-object: add repository argument to do_lookup_replace_object
      replace-object: add repository argument to lookup_replace_object
      refs: store the main ref store inside the repository struct
      refs: allow for_each_replace_ref to handle arbitrary repositories
      replace-object: allow prepare_replace_object to handle arbitrary repositories
      replace-object: allow do_lookup_replace_object to handle arbitrary repositories
      replace-object: allow lookup_replace_object to handle arbitrary repositories
      worktree: accept -f as short for --force for removal
      builtin/blame: dim uninteresting metadata lines
      builtin/blame: highlight recently changed lines
      builtin/blame: add new coloring scheme config
      cache.h: add repository argument to oid_object_info_extended
      cache.h: add repository argument to oid_object_info
      packfile: add repository argument to retry_bad_packed_offset
      packfile: add repository argument to packed_to_object_type
      packfile: add repository argument to read_object
      packfile: add repository argument to unpack_entry
      packfile: add repository argument to cache_or_unpack_entry
      cache.h: allow oid_object_info to handle arbitrary repositories
      git-rebase--interactive: clarify arguments
      object.c: free replace map in raw_object_store_clear
      replace-object.c: remove the_repository from prepare_replace_object
      grep: handle corrupt index files early
      git-submodule.sh: try harder to fetch a submodule
      submodule.c: move submodule merging to merge-recursive.c
      merge-recursive: i18n submodule merge output and respect verbosity
      object.c: clear replace map before freeing it
      t7400: encapsulate setup code in test_expect_success

Takuto Ikuta (1):
      fetch-pack.c: use oidset to check existence of loose object

Tao Qingyun (1):
      t1510-repo-setup.sh: remove useless mkdir

Taylor Blau (5):
      builtin/config.c: treat type specifiers singularly
      builtin/config.c: support `--type=<type>` as preferred alias for `--<type>`
      builtin/config: introduce `--default`
      config.c: introduce 'git_config_color' to parse ANSI colors
      builtin/config: introduce `color` type specifier

Thomas Gummerer (12):
      stash push: avoid printing errors
      stash push -u: don't create empty stash
      stash: drop superfluos pathspec parameter
      SubmittingPatches: mention the git contacts command
      completion: stop showing 'save' for stash by default
      completion: make stash -p and alias for stash push -p
      worktree: remove extra members from struct add_opts
      worktree: improve message when creating a new worktree
      worktree: factor out dwim_branch function
      worktree: teach "add" to check out existing branches
      SubmittingPatches: replace numbered attributes with names
      note git-security@googlegroups.com in more places

Todd Zullinger (3):
      doc/clone: update caption for GIT URLS cross-reference
      rebase --root: demonstrate a bug while amending root commit messages
      t3404: check root commit in 'rebase -i --root reword root commit'

Torsten Bögershausen (1):
      test: correct detection of UTF8_NFD_TO_NFC for APFS

Trần Ngọc Quân (3):
      l10n: vi(3470t): Updated Vietnamese translation for v2.18.0
      l10n: vi.po(3608t): Update Vietnamese translation for v2.18.0 round2
      l10n: vi.po(3608t): Update Vietnamese translation for v2.18.0 round 3

Wink Saville (8):
      rebase-interactive: simplify pick_on_preserving_merges
      rebase: update invocation of rebase dot-sourced scripts
      rebase: reindent function git_rebase__interactive
      rebase: extract functions out of git_rebase__interactive
      rebase: add and use git_rebase__interactive__preserve_merges
      rebase: remove unused code paths from git_rebase__interactive
      rebase: remove unused code paths from git_rebase__interactive__preserve_merges
      rebase: remove merges_option and a blank line

Yuki Kokubun (1):
      filter-branch: fix errors caused by refs that point at non-committish

brian m. carlson (123):
      bulk-checkin: convert index_bulk_checkin to struct object_id
      builtin/write-tree: convert to struct object_id
      cache-tree: convert write_*_as_tree to object_id
      cache-tree: convert remnants to struct object_id
      resolve-undo: convert struct resolve_undo_info to object_id
      tree: convert read_tree_recursive to struct object_id
      ref-filter: convert grab_objectname to struct object_id
      strbuf: convert strbuf_add_unique_abbrev to use struct object_id
      wt-status: convert struct wt_status_state to object_id
      Convert find_unique_abbrev* to struct object_id
      http-walker: convert struct object_request to use struct object_id
      send-pack: convert remaining functions to struct object_id
      replace_object: convert struct replace_object to object_id
      builtin/mktag: convert to struct object_id
      archive: convert write_archive_entry_fn_t to object_id
      archive: convert sha1_file_to_archive to struct object_id
      builtin/index-pack: convert struct ref_delta_entry to object_id
      sha1_file: convert read_loose_object to use struct object_id
      sha1_file: convert check_sha1_signature to struct object_id
      streaming: convert open_istream to use struct object_id
      builtin/mktree: convert to struct object_id
      sha1_file: convert assert_sha1_type to object_id
      sha1_file: convert retry_bad_packed_offset to struct object_id
      packfile: convert unpack_entry to struct object_id
      Convert remaining callers of sha1_object_info_extended to object_id
      sha1_file: convert sha1_object_info* to object_id
      builtin/fmt-merge-msg: convert remaining code to object_id
      builtin/notes: convert static functions to object_id
      tree-walk: convert get_tree_entry_follow_symlinks internals to object_id
      streaming: convert istream internals to struct object_id
      tree-walk: convert tree entry functions to object_id
      sha1_file: convert read_object_with_reference to object_id
      sha1_file: convert read_sha1_file to struct object_id
      Convert lookup_replace_object to struct object_id
      sha1_file: introduce a constant for max header length
      convert: convert to struct object_id
      sha1_name: convert struct min_abbrev_data to object_id
      t1011: abstract away SHA-1-specific constants
      t1304: abstract away SHA-1-specific constants
      t1300: abstract away SHA-1-specific constants
      t1405: sort reflog entries in a hash-independent way
      t1411: abstract away SHA-1-specific constants
      t1507: abstract away SHA-1-specific constants
      t2020: abstract away SHA-1 specific constants
      t2101: modernize test style
      t2101: abstract away SHA-1-specific constants
      t2107: abstract away SHA-1-specific constants
      format-patch: make cover letters always text/plain
      cache: add a function to read an object ID from a buffer
      server-info: remove unused members from struct pack_info
      Remove unused member in struct object_context
      packfile: remove unused member from struct pack_entry
      packfile: convert has_sha1_pack to object_id
      sha1-file: convert freshen functions to object_id
      packfile: convert find_pack_entry to object_id
      packfile: abstract away hash constant values
      pack-objects: abstract away hash algorithm
      pack-redundant: abstract away hash algorithm
      tree-walk: avoid hard-coded 20 constant
      tree-walk: convert get_tree_entry_follow_symlinks to object_id
      fsck: convert static functions to struct object_id
      submodule-config: convert structures to object_id
      split-index: convert struct split_index to object_id
      Update struct index_state to use struct object_id
      pack-redundant: convert linked lists to use struct object_id
      index-pack: abstract away hash function constant
      commit: convert uses of get_sha1_hex to get_oid_hex
      dir: convert struct untracked_cache_dir to object_id
      http: eliminate hard-coded constants
      revision: replace use of hard-coded constants
      upload-pack: replace use of several hard-coded constants
      diff: specify abbreviation size in terms of the_hash_algo
      builtin/receive-pack: avoid hard-coded constants for push certs
      sha1-file: add functions for hex empty tree and blob OIDs
      builtin/am: convert uses of EMPTY_TREE_SHA1_BIN to the_hash_algo
      builtin/merge: switch tree functions to use object_id
      merge: convert empty tree constant to the_hash_algo
      sequencer: convert one use of EMPTY_TREE_SHA1_HEX
      submodule: convert several uses of EMPTY_TREE_SHA1_HEX
      wt-status: convert two uses of EMPTY_TREE_SHA1_HEX
      builtin/receive-pack: convert one use of EMPTY_TREE_SHA1_HEX
      builtin/reset: convert use of EMPTY_TREE_SHA1_BIN
      sha1_file: convert cached object code to struct object_id
      cache-tree: use is_empty_tree_oid
      sequencer: use the_hash_algo for empty tree object ID
      dir: use the_hash_algo for empty blob object ID
      sha1_file: only expose empty object constants through git_hash_algo
      Update shell scripts to compute empty tree object ID
      add--interactive: compute the empty tree value
      merge-one-file: compute empty blob object ID
      Documentation: use 8-space tabs with Asciidoctor
      Documentation: render revisions correctly under Asciidoctor
      mailmap: update brian m. carlson's email address
      t/test-lib: add an SHA1 prerequisite
      t/test-lib: introduce ZERO_OID
      t: switch $_z40 to $ZERO_OID
      t/test-lib: introduce OID_REGEX
      t: switch $_x40 to $OID_REGEX
      t0000: annotate with SHA1 prerequisite
      t1007: annotate with SHA1 prerequisite
      t1512: skip test if not using SHA-1
      t4044: skip test if not using SHA-1
      t: skip pack tests if not using SHA-1
      t2203: abstract away SHA-1-specific constants
      t3103: abstract away SHA-1-specific constants
      t3702: abstract away SHA-1-specific constants
      t3905: abstract away SHA-1-specific constants
      t4007: abstract away SHA-1-specific constants
      t4008: abstract away SHA-1-specific constants
      t4014: abstract away SHA-1-specific constants
      t4020: abstract away SHA-1-specific constants
      t4022: abstract away SHA-1-specific constants
      t4029: fix test indentation
      t4029: abstract away SHA-1-specific constants
      t4030: abstract away SHA-1-specific constants
      t/lib-diff-alternative: abstract away SHA-1-specific constants
      t4205: sort log output in a hash-independent way
      t4042: abstract away SHA-1-specific constants
      t4045: abstract away SHA-1-specific constants
      t4208: abstract away SHA-1-specific constants
      t5300: abstract away SHA-1-specific constants
      sequencer: ensure labels that are object IDs are rewritten
      t3430: test clean-up

Ævar Arnfjörð Bjarmason (22):
      configure: fix a regression in PCRE v1 detection
      configure: detect redundant --with-libpcre & --with-libpcre1
      Makefile: make USE_LIBPCRE=YesPlease mean v2, not v1
      Makefile: fix broken bindir_relative variable
      Makefile: add a gitexecdir_relative variable
      Makefile: optionally symlink libexec/git-core binaries to bin/git
      Remove contrib/examples/*
      doc hash-function-transition: clarify how older gits die on NewHash
      doc hash-function-transition: clarify what SHAttered means
      git-svn: avoid warning on undef readline()
      Makefile: add a DEVOPTS to suppress -Werror under DEVELOPER
      Makefile: add a DEVOPTS to get all of -Wextra
      git{,-blame}.el: remove old bitrotting Emacs code
      .gitattributes: add *.pl extension for Perl
      .gitattributes: use the "perl" differ for Perl
      .gitattributes: add a diff driver for Python
      sha1-name.c: remove stray newline
      sha1-array.h: align function arguments
      git-p4: change "commitish" typo to "committish"
      sha1-name.c: move around the collect_ambiguous() function
      get_short_oid: sort ambiguous objects by type, then SHA-1
      git-credential-netrc: remove use of "autodie"


^ permalink raw reply	[relevance 3%]

* Re: [PATCH v3 00/32] object-store: lookup_commit
  @ 2018-06-29 18:03  2%   ` Junio C Hamano
  2018-06-29 18:34  0%     ` Stefan Beller
  0 siblings, 1 reply; 200+ results
From: Junio C Hamano @ 2018-06-29 18:03 UTC (permalink / raw)
  To: Stefan Beller; +Cc: git

Junio C Hamano <gitster@pobox.com> writes:

> One technique these (not just this) recent efforts seem to be
> forgetting is to introduce "new" names that take a_repo and then
> make the existing one a thin wrapper that calls the new one with
> &the_repo as the argument.

FWIW, here is how I am resolving semantic conflicts that I found so
far while merging this topic to 'pu', which is stored in the
merge-fix/ mechanism so that I can reuse it while rebuilding 'pu'.

-- >8 --
Subject: [PATCH] merge-fix/sb/object-store-lookup

---
 builtin/bisect--helper.c | 2 +-
 builtin/branch-diff.c    | 2 +-
 commit-graph.c           | 4 ++--
 negotiator/default.c     | 3 ++-
 4 files changed, 6 insertions(+), 5 deletions(-)

diff --git a/builtin/bisect--helper.c b/builtin/bisect--helper.c
index fc02f889e6..b27f645744 100644
--- a/builtin/bisect--helper.c
+++ b/builtin/bisect--helper.c
@@ -231,7 +231,7 @@ static int bisect_write(const char *state, const char *rev,
 		goto fail;
 	}
 
-	commit = lookup_commit_reference(&oid);
+	commit = lookup_commit_reference(the_repository, &oid);
 	log_commit(fp, "%s", state, commit);
 
 	if (!nolog)
diff --git a/builtin/branch-diff.c b/builtin/branch-diff.c
index 8a16352e3a..b8604e3fec 100644
--- a/builtin/branch-diff.c
+++ b/builtin/branch-diff.c
@@ -329,7 +329,7 @@ static void output_pair_header(struct diff_options *diffopt, struct strbuf *buf,
 		strbuf_addf(buf, " %d:  %s", j + 1,
 			    find_unique_abbrev(&b_util->oid, DEFAULT_ABBREV));
 
-	commit = lookup_commit_reference(oid);
+	commit = lookup_commit_reference(the_repository, oid);
 	if (commit) {
 		const char *commit_buffer = get_commit_buffer(commit, NULL);
 		const char *subject;
diff --git a/commit-graph.c b/commit-graph.c
index e4dee03679..41a0133ff7 100644
--- a/commit-graph.c
+++ b/commit-graph.c
@@ -924,7 +924,7 @@ int verify_commit_graph(struct repository *r, struct commit_graph *g)
 			cur_fanout_pos++;
 		}
 
-		graph_commit = lookup_commit(&cur_oid);
+		graph_commit = lookup_commit(r, &cur_oid);
 		if (!parse_commit_in_graph_one(g, graph_commit))
 			graph_report("failed to parse %s from commit-graph",
 				     oid_to_hex(&cur_oid));
@@ -950,7 +950,7 @@ int verify_commit_graph(struct repository *r, struct commit_graph *g)
 
 		hashcpy(cur_oid.hash, g->chunk_oid_lookup + g->hash_len * i);
 
-		graph_commit = lookup_commit(&cur_oid);
+		graph_commit = lookup_commit(r, &cur_oid);
 		odb_commit = (struct commit *)create_object(r, cur_oid.hash, alloc_commit_node(r));
 		if (parse_commit_internal(odb_commit, 0, 0)) {
 			graph_report("failed to parse %s from object database",
diff --git a/negotiator/default.c b/negotiator/default.c
index 382fc77722..d8c92281bb 100644
--- a/negotiator/default.c
+++ b/negotiator/default.c
@@ -38,7 +38,8 @@ static void rev_list_push(struct negotiation_state *ns,
 static int clear_marks(const char *refname, const struct object_id *oid,
 		       int flag, void *cb_data)
 {
-	struct object *o = deref_tag(parse_object(oid), refname, 0);
+	struct object *o = deref_tag(the_repository,
+				     parse_object(the_repository, oid), refname, 0);
 
 	if (o && o->type == OBJ_COMMIT)
 		clear_commit_marks((struct commit *)o,
-- 
2.18.0-129-ge3331758f1




^ permalink raw reply related	[relevance 2%]

* Re: [PATCH v3 00/32] object-store: lookup_commit
  2018-06-29 18:03  2%   ` Junio C Hamano
@ 2018-06-29 18:34  0%     ` Stefan Beller
  0 siblings, 0 replies; 200+ results
From: Stefan Beller @ 2018-06-29 18:34 UTC (permalink / raw)
  To: Junio C Hamano; +Cc: git

On Fri, Jun 29, 2018 at 11:03 AM Junio C Hamano <gitster@pobox.com> wrote:
>
> Junio C Hamano <gitster@pobox.com> writes:
>
> > One technique these (not just this) recent efforts seem to be
> > forgetting is to introduce "new" names that take a_repo and then
> > make the existing one a thin wrapper that calls the new one with
> > &the_repo as the argument.

So you'd rather want to see it less invasive done similar to
NO_THE_INDEX_COMPATIBILITY_MACROS ? Someone (jrnieder?)
called that a failed experiment, as now we need to carry that baggage
for quite some time and never cleaned up the started migration;
only recently Duy started to kill off the_index, which would finish
that migration?



> FWIW, here is how I am resolving semantic conflicts that I found so
> far while merging this topic to 'pu', which is stored in the
> merge-fix/ mechanism so that I can reuse it while rebuilding 'pu'.
>
> -- >8 --
> Subject: [PATCH] merge-fix/sb/object-store-lookup
>
> ---
>  builtin/bisect--helper.c | 2 +-
>  builtin/branch-diff.c    | 2 +-
>  negotiator/default.c     | 3 ++-

These look as if we can just use the_repository
(as you did below).

>  commit-graph.c           | 4 ++--

That is what I want to tackle next, and apparently you already did
by using the repository *r in there.

Thanks,
Stefan

^ permalink raw reply	[relevance 0%]

* [PATCH v2 0/9] Fix merge issues with index not matching HEAD
  2018-06-03  6:58  3% [RFC PATCH 0/7] merge requirement: index matches head Elijah Newren
  2018-06-03  6:58  1% ` [RFC PATCH 7/7] merge: fix misleading pre-merge check documentation Elijah Newren
@ 2018-07-01  1:24  3% ` Elijah Newren
  2018-07-01  1:25  1%   ` [PATCH v2 9/9] merge: fix misleading pre-merge check documentation Elijah Newren
  1 sibling, 1 reply; 200+ results
From: Elijah Newren @ 2018-07-01  1:24 UTC (permalink / raw)
  To: git; +Cc: gitster, pclouds, Elijah Newren

This series exists to fix problems for merges when the index doesn't
match HEAD.  We've had an almost comical number of these types of
problems in our history, as thoroughly documented in the commit
message for the final patch.

v1 can be found here:
  https://public-inbox.org/git/20180603065810.23841-1-newren@gmail.com/

Changes since v1 (full branch-diff below):
  * Minor wording tweaks to a few commit messages (fixing typos,
    rewrapping, etc.)
    
  * Move index_has_changes() to read-cache.c, and (partially) lift the
    assumption that we're always operating on the_index -- as
    suggested by Junio.  A full lift of the assumption would conflict
    with and duplicate work Duy is doing, so there is a simple BUG()
    check in place for now.
    
  * Add two new patches to the _beginning_ of the series, to implement
    the last point.  Reason: Since this series will probably conflict
    slightly with Duy's not-yet-submitted work to remove assumption of
    the_index throughout the codebase, I figured this would make it
    the clearest and easiest for him to fix up small conflicts.
    (Alternatively, if folks would rather that my series wait for his
    to go through, it should make it much easier for me to rebase my
    series on top of his work by having these placeholders at the
    beginning.)

Questions I'm particularly interested in reviewers addressing:

  * Do my two patches at the beginning make sense?  In particular, is
    the BUG() a reasonable way to limit conflicts with Duy for now,
    while he works on more thoroughly stamping out assumed the_index
    usage?

  * Does the series flow well?  I was curious if I should reorder the
    series when I submitted v1, but no one commented on that question.

  * The second to last patch points out that current git incorrectly
    implements what would be a safe exception to the index matching
    HEAD before a merge rule.  Would it be more desireable to
    correctly implement the safe exception (even though it would be
    somewhat difficult), rather than just disallow the exception for
    merge-recursive as I did in that patch?

  * Given the large number of problems we've had in this area -- as
    documented in the final commit message -- should we be more
    defensive and disallow all merge strategies from having even
    so-called safe exceptions?  We could do this in a single place,
    which would have prevented all the current and most if not all
    historical problems in this area, by just enforcing that the index
    match HEAD in builtin/merge.c.  (See the second to last paragraph
    of the last commit message for more details.)

Elijah Newren (9):
  read-cache.c: move index_has_changes() from merge.c
  index_has_changes(): avoid assuming operating on the_index
  t6044: verify that merges expected to abort actually abort
  t6044: add a testcase for index matching head, when head doesn't match
    HEAD
  merge-recursive: make sure when we say we abort that we actually abort
  merge-recursive: fix assumption that head tree being merged is HEAD
  t6044: add more testcases with staged changes before a merge is
    invoked
  merge-recursive: enforce rule that index matches head before merging
  merge: fix misleading pre-merge check documentation

 Documentation/git-merge.txt              |   6 +-
 builtin/am.c                             |   7 +-
 cache.h                                  |  16 +--
 merge-recursive.c                        |  14 +--
 merge.c                                  |  31 ------
 read-cache.c                             |  40 ++++++++
 t/t6044-merge-unrelated-index-changes.sh |  67 +++++++++++--
 t/t7504-commit-msg-hook.sh               |   4 +-
 t/t7611-merge-abort.sh                   | 118 -----------------------
 9 files changed, 124 insertions(+), 179 deletions(-)

-:  --------- > 1:  ff2501ac4 read-cache.c: move index_has_changes() from merge.c
-:  --------- > 2:  5813ca722 index_has_changes(): avoid assuming operating on the_index
1:  730e5e483 = 3:  ca11503bd t6044: verify that merges expected to abort actually abort
2:  36f7cc0a3 = 4:  386390899 t6044: add a testcase for index matching head, when head doesn't match HEAD
3:  70899afa3 ! 5:  8a900d2ee merge-recursive: make sure when we say we abort that we actually abort
    @@ -19,7 +19,7 @@
     @@
      		struct strbuf sb = STRBUF_INIT;
      
    - 		if (!o->call_depth && index_has_changes(&sb)) {
    + 		if (!o->call_depth && index_has_changes(&the_index, &sb)) {
     -			err(o, _("Dirty index: cannot merge (dirty: %s)"),
     +			err(o, _("Your local changes to the following files would be overwritten by merge:\n  %s"),
      			    sb.buf);
4:  eab2f36a4 ! 6:  2564b29e9 merge-recursive: fix assumption that head tree being merged is HEAD
    @@ -6,10 +6,9 @@
         base, head, and remote.  Since the user is allowed to specify head, we can
         not necesarily assume that head == HEAD.
     
    -    We modify index_has_changes() to take an extra argument specifying the
    -    tree to compare the index to.  If NULL, it will compare to HEAD.  We then
    -    use this from merge-recursive to make sure we compare to the
    -    user-specified head.
    +    Modify index_has_changes() to take an extra argument specifying the tree
    +    to compare against.  If NULL, it will compare to HEAD.  We then use this
    +    from merge-recursive to make sure we compare to the user-specified head.
     
         Signed-off-by: Elijah Newren <newren@gmail.com>
     
    @@ -20,8 +19,8 @@
      
      	refresh_and_write_cache();
      
    --	if (index_has_changes(&sb)) {
    -+	if (index_has_changes(&sb, NULL)) {
    +-	if (index_has_changes(&the_index, &sb)) {
    ++	if (index_has_changes(&the_index, NULL, &sb)) {
      		write_state_bool(state, "dirtyindex", 1);
      		die(_("Dirty index: cannot apply patches (dirty: %s)"), sb.buf);
      	}
    @@ -29,8 +28,9 @@
      			 * Applying the patch to an earlier tree and merging
      			 * the result may have produced the same tree as ours.
      			 */
    --			if (!apply_status && !index_has_changes(NULL)) {
    -+			if (!apply_status && !index_has_changes(NULL, NULL)) {
    +-			if (!apply_status && !index_has_changes(&the_index, NULL)) {
    ++			if (!apply_status &&
    ++			    !index_has_changes(&the_index, NULL, NULL)) {
      				say(state, stdout, _("No changes -- Patch already applied."));
      				goto next;
      			}
    @@ -38,8 +38,8 @@
      
      	say(state, stdout, _("Applying: %.*s"), linelen(state->msg), state->msg);
      
    --	if (!index_has_changes(NULL)) {
    -+	if (!index_has_changes(NULL, NULL)) {
    +-	if (!index_has_changes(&the_index, NULL)) {
    ++	if (!index_has_changes(&the_index, NULL, NULL)) {
      		printf_ln(_("No changes - did you forget to use 'git add'?\n"
      			"If there is nothing left to stage, chances are that something else\n"
      			"already introduced the same changes; you might want to skip this patch."));
    @@ -48,20 +48,32 @@
     --- a/cache.h
     +++ b/cache.h
     @@
    - extern void move_index_extensions(struct index_state *dst, struct index_state *src);
    + /* Forward structure decls */
    + struct pathspec;
    + struct child_process;
    ++struct tree;
    + 
    + /*
    +  * Copy the sha1 and stat state of a cache entry from one to
    +@@
      extern int unmerged_index(const struct index_state *);
      
    --/**
    -- * Returns 1 if the index differs from HEAD, 0 otherwise. When on an unborn
    -- * branch, returns 1 if there are entries in the index, 0 otherwise. If an
    -- * strbuf is provided, the space-separated list of files that differ will be
    -- * appended to it.
    -- */
    --extern int index_has_changes(struct strbuf *sb);
    --
    + /**
    +- * Returns 1 if istate differs from HEAD, 0 otherwise.  When on an unborn
    +- * branch, returns 1 if there are entries in istate, 0 otherwise.  If an
    +- * strbuf is provided, the space-separated list of files that differ will
    +- * be appended to it.
    ++ * Returns 1 if istate differs from tree, 0 otherwise.  If tree is NULL,
    ++ * compares istate to HEAD.  If tree is NULL and on an unborn branch,
    ++ * returns 1 if there are entries in istate, 0 otherwise.  If an strbuf is
    ++ * provided, the space-separated list of files that differ will be appended
    ++ * to it.
    +  */
    + extern int index_has_changes(const struct index_state *istate,
    ++			     struct tree *tree,
    + 			     struct strbuf *sb);
    + 
      extern int verify_path(const char *path, unsigned mode);
    - extern int strcmp_offset(const char *s1, const char *s2, size_t *first_change);
    - extern int index_dir_exists(struct index_state *istate, const char *name, int namelen);
     
     diff --git a/merge-recursive.c b/merge-recursive.c
     --- a/merge-recursive.c
    @@ -70,26 +82,31 @@
      	if (oid_eq(&common->object.oid, &merge->object.oid)) {
      		struct strbuf sb = STRBUF_INIT;
      
    --		if (!o->call_depth && index_has_changes(&sb)) {
    -+		if (!o->call_depth && index_has_changes(&sb, head)) {
    +-		if (!o->call_depth && index_has_changes(&the_index, &sb)) {
    ++		if (!o->call_depth && index_has_changes(&the_index, head, &sb)) {
      			err(o, _("Your local changes to the following files would be overwritten by merge:\n  %s"),
      			    sb.buf);
      			return -1;
     
    -diff --git a/merge.c b/merge.c
    ---- a/merge.c
    -+++ b/merge.c
    +diff --git a/read-cache.c b/read-cache.c
    +--- a/read-cache.c
    ++++ b/read-cache.c
     @@
    - 	return oid_to_hex(commit ? &commit->object.oid : the_hash_algo->empty_tree);
    + 	return 0;
      }
      
    --int index_has_changes(struct strbuf *sb)
    -+int index_has_changes(struct strbuf *sb, struct tree *tree)
    +-int index_has_changes(const struct index_state *istate, struct strbuf *sb)
    ++int index_has_changes(const struct index_state *istate,
    ++		      struct tree *tree,
    ++		      struct strbuf *sb)
      {
     -	struct object_id head;
     +	struct object_id cmp;
      	int i;
      
    + 	if (istate != &the_index) {
    + 		BUG("index_has_changes cannot yet accept istate != &the_index; do_diff_cache needs updating first.");
    + 	}
     -	if (!get_oid_tree("HEAD", &head)) {
     +	if (tree)
     +		cmp = tree->object.oid;
    @@ -118,20 +135,3 @@
      	git reset --hard &&
      	git checkout C^0 &&
      
    -
    -diff --git a/tree.h b/tree.h
    ---- a/tree.h
    -+++ b/tree.h
    -@@
    - extern int read_tree(struct tree *tree, int stage, struct pathspec *pathspec,
    - 		     struct index_state *istate);
    - 
    -+/**
    -+ * Returns 1 if the index differs from tree, 0 otherwise.  If tree is NULL,
    -+ * compares to HEAD.  If tree is NULL and on an unborn branch, returns 1 if
    -+ * there are entries in the index, 0 otherwise. If an strbuf is provided,
    -+ * the space-separated list of files that differ will be appended to it.
    -+ */
    -+extern int index_has_changes(struct strbuf *sb, struct tree *tree);
    -+
    - #endif /* TREE_H */
5:  4aa0684c0 ! 7:  88a8e44a2 t6044: add more testcases with staged changes before a merge is invoked
    @@ -5,8 +5,9 @@
         According to Documentation/git-merge.txt,
     
             ...[merge will] abort if there are any changes registered in the index
    -        relative to the `HEAD` commit.  (One exception is when the changed index
    -        entries are in the state that would result from the merge already.)
    +        relative to the `HEAD` commit.  (One exception is when the changed
    +        index entries are in the state that would result from the merge
    +        already.)
     
         Add some tests showing that this exception, while it does accurately state
         what would be a safe condition under which we could allow the merge to
6:  905f2683f ! 8:  c0049b788 merge-recursive: enforce rule that index matches head before merging
    @@ -48,16 +48,16 @@
         commit, just like the 'ours' and 'octopus' strategies do.
     
         Some testcase fixups were in order:
    -      t6044: We no longer expect stray staged changes to sometimes result
    -             in the merge continuing.  Also, fixes a case where a merge
    -             didn't abort but should have.
    -      t7504: had a few tests that had stray staged changes that were not
    -             actually part of the test under consideration
           t7611: had many tests designed to show that `git merge --abort` could
                  not always restore the index and working tree to the state they
                  were in before the merge started.  The tests that were associated
                  with having changes in the index before the merge started are no
                  longer applicable, so they have been removed.
    +      t7504: had a few tests that had stray staged changes that were not
    +             actually part of the test under consideration
    +      t6044: We no longer expect stray staged changes to sometimes result
    +             in the merge continuing.  Also, fix a case where a merge
    +             didn't abort but should have.
     
         Signed-off-by: Elijah Newren <newren@gmail.com>
     
    @@ -70,7 +70,7 @@
      	int code, clean;
     +	struct strbuf sb = STRBUF_INIT;
     +
    -+	if (!o->call_depth && index_has_changes(&sb, head)) {
    ++	if (!o->call_depth && index_has_changes(&the_index, head, &sb)) {
     +		err(o, _("Your local changes to the following files would be overwritten by merge:\n  %s"),
     +		    sb.buf);
     +		return -1;
    @@ -84,7 +84,7 @@
      	if (oid_eq(&common->object.oid, &merge->object.oid)) {
     -		struct strbuf sb = STRBUF_INIT;
     -
    --		if (!o->call_depth && index_has_changes(&sb, head)) {
    +-		if (!o->call_depth && index_has_changes(&the_index, head, &sb)) {
     -			err(o, _("Your local changes to the following files would be overwritten by merge:\n  %s"),
     -			    sb.buf);
     -			return -1;
7:  69f6fe8b1 ! 9:  557c5d94c merge: fix misleading pre-merge check documentation
    @@ -20,7 +20,7 @@
     
             ...the index file must match the tree of `HEAD` commit...
             [NOTE]
    -        This is a bit of a lite.  In certain special cases [explained
    +        This is a bit of a lie.  In certain special cases [explained
             in detail]...
             Otherwise, merge will refuse to do any harm to your repository
             (that is...your working tree...and index are left intact).

-- 
2.18.0.137.g2a11d05a6.dirty

^ permalink raw reply	[relevance 3%]

* [PATCH v2 9/9] merge: fix misleading pre-merge check documentation
  2018-07-01  1:24  3% ` [PATCH v2 0/9] Fix merge issues with index not matching HEAD Elijah Newren
@ 2018-07-01  1:25  1%   ` Elijah Newren
  0 siblings, 0 replies; 200+ results
From: Elijah Newren @ 2018-07-01  1:25 UTC (permalink / raw)
  To: git; +Cc: gitster, pclouds, Elijah Newren

builtin/merge.c contains this important requirement for merge strategies:

    ...the index must be in sync with the head commit.  The strategies are
    responsible to ensure this.

However, Documentation/git-merge.txt says:

    ...[merge will] abort if there are any changes registered in the index
    relative to the `HEAD` commit.  (One exception is when the changed
    index entries are in the state that would result from the merge
    already.)

Interestingly, prior to commit c0be8aa06b85 ("Documentation/git-merge.txt:
Partial rewrite of How Merge Works", 2008-07-19),
Documentation/git-merge.txt said much more:

    ...the index file must match the tree of `HEAD` commit...
    [NOTE]
    This is a bit of a lie.  In certain special cases [explained
    in detail]...
    Otherwise, merge will refuse to do any harm to your repository
    (that is...your working tree...and index are left intact).

So, this suggests that the exceptions existed because there were special
cases where it would case no harm, and potentially be slightly more
convenient for the user.  While the current text in git-merge.txt does
list a condition under which it would be safe to proceed despite the index
not matching HEAD, it does not match what is actually implemented, in
three different ways:

    * The exception is written to describe what unpack-trees allows.  Not
      all merge strategies allow such an exception, though, making this
      description misleading.  'ours' and 'octopus' merges have strictly
      enforced index==HEAD for a while, and the commit previous to this
      one made 'recursive' do so as well.

    * If someone did a three-way content merge on a specific file using
      versions from the relevant commits and staged it prior to running
      merge, then that path would technically satisfy the exception listed
      in git-merge.txt.  unpack-trees.c would still error out on the path,
      though, because it defers the three-way content merge logic to other
      parts of the code (resolve, octopus, or recursive) and has no way of
      checking whether the index entry from before the merge will match
      the end result of the merge.

    * The exception as implemented in unpack-trees actually only checked
      that the index matched the MERGE_HEAD version of the file and that
      HEAD matched the merge base.  Assuming no renames, that would indeed
      provide cases where the index matches the end result we'd get from a
      merge.  But renames means unpack-trees is checking that it instead
      matches something other than what the final result will be, risking
      either erroring out when we shouldn't need to, or not erroring out
      when we should and overwriting the user's staged changes.

In addition to the wording behind this exception being misleading, it is
also somewhat surprising to see how many times the code for the special
cases were wrong or the check to make sure the index matched head was
forgotten altogether:

* Prior to commit ee6566e8d70d ("[PATCH] Rewrite read-tree", 2005-09-05),
  there were many cases where an unclean index entry was allowed (look for
  merged_entry_allow_dirty()); it appears that in those cases, the merge
  would have simply overwritten staged changes with the result of the
  merge.  Thus, the merge result would have been correct, but the user's
  uncommitted changes could be thrown away without warning.

* Prior to commit 160252f81626 ("git-merge-ours: make sure our index
  matches HEAD", 2005-11-03), the 'ours' merge strategy did not check
  whether the index matched HEAD.  If it didn't, the resulting merge
  would include all the staged changes, and thus wasn't really an 'ours'
  strategy.

* Prior to commit 3ec62ad9ffba ("merge-octopus: abort if index does not
  match HEAD", 2016-04-09), 'octopus' merges did not check whether the
  index matched HEAD, also resulting in any staged changes from before
  the commit silently being folded into the resulting merge.  commit
  a6ee883b8eb5 ("t6044: new merge testcases for when index doesn't match
  HEAD", 2016-04-09) was also added at the same time to try to test to
  make sure all strategies did the necessary checking for the requirement
  that the index match HEAD.  Sadly, it didn't catch all the cases, as
  evidenced by the remainder of this list...

* Prior to commit 65170c07d466 ("merge-recursive: avoid incorporating
  uncommitted changes in a merge", 2017-12-21), merge-recursive simply
  relied on unpack_trees() to do the necessary check, but in one special
  case it avoided calling unpack_trees() entirely and accidentally ended
  up silently including any staged changes from before the merge in the
  resulting merge commit.

* The commit immediately before this one in this series noted that the
  exceptions were written in a way that assumed no renames, making it
  unsafe for merge-recursive to use.  merge-recursive was modified to
  use its own check to enforce that index==HEAD.

This history makes it very tempting to go into builtin/merge.c and replace
the comment that strategies must enforce that index matches HEAD with code
that just enforces it.  At this point, that would only affect the
'resolve' strategy; all other strategies have each been modified to
manually enforce it.  (However, note that index==HEAD is not strictly
enforced for fast-forward merges, as those are not considered a merge
strategy and they trigger in builtin/merge.c before the section in the
code where the relevant comment is found.)

But, even if we don't take the step of just fixing these problems by
enforcing index==HEAD for all strategies, we at least need to update this
misleading documentation in git-merge.txt.  For now, just modify the claim
in Documentation/git-merge.txt to fix the error.  The precise details
around combination of merges strategies and special cases probably is not
relevant to most users, so simply state that exceptions may exist but are
narrow and vary depending upon which merge strategy is in use.

Signed-off-by: Elijah Newren <newren@gmail.com>
---
 Documentation/git-merge.txt | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/Documentation/git-merge.txt b/Documentation/git-merge.txt
index 6a5c00e2c..b050c8c2e 100644
--- a/Documentation/git-merge.txt
+++ b/Documentation/git-merge.txt
@@ -122,9 +122,9 @@ merge' may need to update.
 
 To avoid recording unrelated changes in the merge commit,
 'git pull' and 'git merge' will also abort if there are any changes
-registered in the index relative to the `HEAD` commit.  (One
-exception is when the changed index entries are in the state that
-would result from the merge already.)
+registered in the index relative to the `HEAD` commit.  (Special
+narrow exceptions to this rule may exist depending on which merge
+strategy is in use, but generally, the index must match HEAD.)
 
 If all named commits are already ancestors of `HEAD`, 'git merge'
 will exit early with the message "Already up to date."
-- 
2.18.0.137.g2a11d05a6.dirty


^ permalink raw reply related	[relevance 1%]

* [PATCH 2/2] read-cache: fix directory/file conflict handling in read_index_unmerged()
  @ 2018-07-11  5:18  2% ` Elijah Newren
    1 sibling, 0 replies; 200+ results
From: Elijah Newren @ 2018-07-11  5:18 UTC (permalink / raw)
  To: git; +Cc: gitster, Elijah Newren

read_index_unmerged() has two intended purposes:
  * return 1 if there are any unmerged entries, 0 otherwise
  * drops any higher-stage entries down to stage #0

There are several callers of read_index_unmerged() that check the return
value to see if it is non-zero, all of which then die() if that condition
is met.  For these callers, dropping higher-stage entries down to stage #0
is a waste of resources, and returning immediately on first unmerged entry
would be better.  But it's probably only a very minor difference and isn't
the focus of this series.

The remaining callers ignore the return value and call this function for
the side effect of dropping higher-stage entries down to stage #0.  As
mentioned in commit e11d7b596970 ("'reset --merge': fix unmerged case",
2009-12-31),

    The _only_ reason we want to keep a previously unmerged entry in the
    index at stage #0 is so that we don't forget the fact that we have
    corresponding file in the work tree in order to be able to remove it
    when the tree we are resetting to does not have the path.

In fact, prior to commit d1a43f2aa4bf ("reset --hard/read-tree --reset -u:
remove unmerged new paths", 2008-10-15), read_index_unmerged() did just
remove unmerged entries from the cache immediately but that had the
unwanted effect of leaving around new untracked files in the tree from
aborted merges.

So, that's the intended purpose of this function.  The problem is that
when directory/files conflicts are present, trying to add the file to the
index at stage 0 fails (because there is still a directory in the way),
and the function returns early with a -1 return code to signify the error.
As noted above, none of the callers who want the drop-to-stage-0 behavior
check the return status, though, so this means all remaining unmerged
entries remain in the index and the callers proceed assuming otherwise.
Users then see errors of the form:

    error: 'DIR-OR-FILE' appears as both a file and as a directory
    error: DIR-OR-FILE: cannot drop to stage #0

and potentially also messages about other unmerged entries which came
lexicographically later than whatever pathname was both a file and a
directory.  Google finds a few hits searching for those messages,
suggesting there were probably a couple people who hit this besides me.
Luckily, calling `git reset --hard` multiple times would workaround
this bug.

Since the whole purpose here is to just put the entry *temporarily* into
the index so that any associated file in the working copy can be removed,
we can just skip the DFCHECK and allow both the file and directory to
appear in the index.  The temporary simultaneous appearance of the
directory and file entries in the index will be removed by the callers
before they attempt to write the index anywhere.

Signed-off-by: Elijah Newren <newren@gmail.com>
---
 read-cache.c                         | 13 ++++++++-----
 t/t1015-read-index-unmerged.sh       |  8 ++++----
 t/t6020-merge-df.sh                  |  3 ---
 t/t6042-merge-rename-corner-cases.sh |  1 -
 4 files changed, 12 insertions(+), 13 deletions(-)

diff --git a/read-cache.c b/read-cache.c
index 372588260..666d295a5 100644
--- a/read-cache.c
+++ b/read-cache.c
@@ -2632,10 +2632,13 @@ int write_locked_index(struct index_state *istate, struct lock_file *lock,
 
 /*
  * Read the index file that is potentially unmerged into given
- * index_state, dropping any unmerged entries.  Returns true if
- * the index is unmerged.  Callers who want to refuse to work
- * from an unmerged state can call this and check its return value,
- * instead of calling read_cache().
+ * index_state, dropping any unmerged entries to stage #0 (potentially
+ * resulting in a path appearing as both a file and a directory in the
+ * index; the caller is responsible to clear out the extra entries
+ * before writing the index to a tree).  Returns true if the index is
+ * unmerged.  Callers who want to refuse to work from an unmerged
+ * state can call this and check its return value, instead of calling
+ * read_cache().
  */
 int read_index_unmerged(struct index_state *istate)
 {
@@ -2658,7 +2661,7 @@ int read_index_unmerged(struct index_state *istate)
 		new_ce->ce_flags = create_ce_flags(0) | CE_CONFLICTED;
 		new_ce->ce_namelen = len;
 		new_ce->ce_mode = ce->ce_mode;
-		if (add_index_entry(istate, new_ce, 0))
+		if (add_index_entry(istate, new_ce, ADD_CACHE_SKIP_DFCHECK))
 			return error("%s: cannot drop to stage #0",
 				     new_ce->name);
 	}
diff --git a/t/t1015-read-index-unmerged.sh b/t/t1015-read-index-unmerged.sh
index bbd64587c..5034ed931 100755
--- a/t/t1015-read-index-unmerged.sh
+++ b/t/t1015-read-index-unmerged.sh
@@ -30,7 +30,7 @@ test_expect_success 'setup modify/delete + directory/file conflict' '
 	)
 '
 
-test_expect_failure 'read-tree --reset cleans unmerged entries' '
+test_expect_success 'read-tree --reset cleans unmerged entries' '
 	test_when_finished "git -C df_plus_modify_delete clean -f" &&
 	test_when_finished "git -C df_plus_modify_delete reset --hard" &&
 	(
@@ -45,7 +45,7 @@ test_expect_failure 'read-tree --reset cleans unmerged entries' '
 	)
 '
 
-test_expect_failure 'One reset --hard cleans unmerged entries' '
+test_expect_success 'One reset --hard cleans unmerged entries' '
 	test_when_finished "git -C df_plus_modify_delete clean -f" &&
 	test_when_finished "git -C df_plus_modify_delete reset --hard" &&
 	(
@@ -87,7 +87,7 @@ test_expect_success 'setup directory/file conflict + simple edit/edit' '
 	)
 '
 
-test_expect_failure 'git merge --abort succeeds despite D/F conflict' '
+test_expect_success 'git merge --abort succeeds despite D/F conflict' '
 	test_when_finished "git -C df_plus_edit_edit clean -f" &&
 	test_when_finished "git -C df_plus_edit_edit reset --hard" &&
 	(
@@ -103,7 +103,7 @@ test_expect_failure 'git merge --abort succeeds despite D/F conflict' '
 	)
 '
 
-test_expect_failure 'git am --skip succeeds despite D/F conflict' '
+test_expect_success 'git am --skip succeeds despite D/F conflict' '
 	test_when_finished "git -C df_plus_edit_edit clean -f" &&
 	test_when_finished "git -C df_plus_edit_edit reset --hard" &&
 	(
diff --git a/t/t6020-merge-df.sh b/t/t6020-merge-df.sh
index 2af1beec5..46b506b3b 100755
--- a/t/t6020-merge-df.sh
+++ b/t/t6020-merge-df.sh
@@ -89,9 +89,6 @@ test_expect_success 'modify/delete + directory/file conflict' '
 '
 
 test_expect_success 'modify/delete + directory/file conflict; other way' '
-	# Yes, we really need the double reset since "letters" appears as
-	# both a file and a directory.
-	git reset --hard &&
 	git reset --hard &&
 	git clean -f &&
 	git checkout modify^0 &&
diff --git a/t/t6042-merge-rename-corner-cases.sh b/t/t6042-merge-rename-corner-cases.sh
index 1cbd946fc..583e68997 100755
--- a/t/t6042-merge-rename-corner-cases.sh
+++ b/t/t6042-merge-rename-corner-cases.sh
@@ -323,7 +323,6 @@ test_expect_success 'rename/directory conflict + content merge conflict' '
 	(
 		cd rename-directory-1 &&
 
-		git reset --hard &&
 		git reset --hard &&
 		git clean -fdqx &&
 
-- 
2.18.0.138.g557c5d94c.dirty


^ permalink raw reply related	[relevance 2%]

* What's cooking in git.git (Jul 2018, #01; Wed, 11)
@ 2018-07-11 19:02  3% Junio C Hamano
  0 siblings, 0 replies; 200+ results
From: Junio C Hamano @ 2018-07-11 19:02 UTC (permalink / raw)
  To: git

Here are the topics that have been cooking.  Commits prefixed with
'-' are only in 'pu' (proposed updates) while commits prefixed with
'+' are in 'next'.  The ones marked with '.' do not appear in any of
the integration branches, but I am still holding onto them.

The tip of 'next' has been rewound and it currently has only 4
topics.  Quite a many topics are cooking in 'pu' and need to be
sifted into good bins (for 'next') and the remainder.  Help is
appreciated in that area ;-)

You can find the changes described here in the integration branches
of the repositories listed at

    http://git-blame.blogspot.com/p/git-public-repositories.html

--------------------------------------------------
[New Topics]

* ag/rebase-i-in-c (2018-07-10) 13 commits
 - rebase -i: rewrite the rest of init_revisions_and_shortrevisions in C
 - rebase -i: implement the logic to initialize the variable $revision in C
 - rebase--interactive: remove unused modes and functions
 - rebase--interactive: rewrite complete_action() in C
 - sequencer: change the way skip_unnecessary_picks() returns its result
 - sequencer: refactor append_todo_help() to write its message to a buffer
 - rebase -i: rewrite checkout_onto() in C
 - rebase -i: rewrite setup_reflog_action() in C
 - sequencer: add a new function to silence a command, except if it fails
 - rebase-interactive: rewrite the edit-todo functionality in C
 - editor: add a function to launch the sequence editor
 - rebase--interactive: rewrite append_todo_help() in C
 - sequencer: make two functions and an enum from sequencer.c public

 Piecemeal rewrite of the remaining "rebase -i" machinery in C.  

 Expecting a reroll.

 The early parts of the series seem solidifying; perhaps with a
 reroll or two, they become 'next' material?


* en/apply-comment-fix (2018-06-28) 1 commit
 - apply: fix grammar error in comment

 Will merge to 'next'.


* en/t5407-rebase-m-fix (2018-06-28) 1 commit
 - t5407: fix test to cover intended arguments

 Will merge to 'next'.


* sb/mailmap (2018-06-29) 1 commit
  (merged to 'next' on 2018-07-11 at d9dc53e374)
 + .mailmap: merge different spellings of names

 Will merge to 'master'.


* sb/object-store-lookup (2018-06-29) 33 commits
 - commit.c: allow lookup_commit_reference to handle arbitrary repositories
 - commit.c: allow lookup_commit_reference_gently to handle arbitrary repositories
 - tag.c: allow deref_tag to handle arbitrary repositories
 - object.c: allow parse_object to handle arbitrary repositories
 - object.c: allow parse_object_buffer to handle arbitrary repositories
 - commit.c: allow get_cached_commit_buffer to handle arbitrary repositories
 - commit.c: allow set_commit_buffer to handle arbitrary repositories
 - commit.c: migrate the commit buffer to the parsed object store
 - commit-slabs: remove realloc counter outside of slab struct
 - commit.c: allow parse_commit_buffer to handle arbitrary repositories
 - tag: allow parse_tag_buffer to handle arbitrary repositories
 - tag: allow lookup_tag to handle arbitrary repositories
 - commit: allow lookup_commit to handle arbitrary repositories
 - tree: allow lookup_tree to handle arbitrary repositories
 - blob: allow lookup_blob to handle arbitrary repositories
 - object: allow lookup_object to handle arbitrary repositories
 - object: allow object_as_type to handle arbitrary repositories
 - tag: add repository argument to deref_tag
 - tag: add repository argument to parse_tag_buffer
 - tag: add repository argument to lookup_tag
 - commit: add repository argument to get_cached_commit_buffer
 - commit: add repository argument to set_commit_buffer
 - commit: add repository argument to parse_commit_buffer
 - commit: add repository argument to lookup_commit
 - commit: add repository argument to lookup_commit_reference
 - commit: add repository argument to lookup_commit_reference_gently
 - tree: add repository argument to lookup_tree
 - blob: add repository argument to lookup_blob
 - object: add repository argument to object_as_type
 - object: add repository argument to parse_object_buffer
 - object: add repository argument to lookup_object
 - object: add repository argument to parse_object
 - Merge branch 'sb/object-store-grafts' into sb/object-store-lookup
 (this branch uses sb/object-store-grafts.)

 lookup_commit_reference() and friends have been updated to find
 in-core object for a specific in-core repository instance.

 Will merge to 'next'.


* ag/rebase-p (2018-07-06) 1 commit
 - git-rebase--preserve-merges: fix formatting of todo help message

 The help message shown in the editor to edit todo list in "rebase -p"
 has regressed recently, which has been corrected.

 Will merge to 'next'.


* bb/pedantic (2018-07-09) 8 commits
 - utf8.c: avoid char overflow
 - string-list.c: avoid conversion from void * to function pointer
 - sequencer.c: avoid empty statements at top level
 - convert.c: replace "\e" escapes with "\033".
 - fixup! refs/refs-internal.h: avoid forward declaration of an enum
 - refs/refs-internal.h: avoid forward declaration of an enum
 - fixup! connect.h: avoid forward declaration of an enum
 - connect.h: avoid forward declaration of an enum

 The codebase has been updated to compile cleanly with -pedantic
 option.

 Will merge to 'next'.


* bb/unicode-11-width (2018-07-09) 1 commit
 - unicode: update the width tables to Unicode 11

 The character display width table has been updated to match the
 latest Unicode standard.

 Will merge to 'next'.


* bc/object-id (2018-07-09) 17 commits
 - pretty: switch hard-coded constants to the_hash_algo
 - sha1-file: convert constants to uses of the_hash_algo
 - log-tree: switch GIT_SHA1_HEXSZ to the_hash_algo->hexsz
 - diff: switch GIT_SHA1_HEXSZ to use the_hash_algo
 - builtin/merge-recursive: make hash independent
 - builtin/merge: switch to use the_hash_algo
 - builtin/fmt-merge-msg: make hash independent
 - builtin/update-index: simplify parsing of cacheinfo
 - builtin/update-index: convert to using the_hash_algo
 - refs/files-backend: use the_hash_algo for writing refs
 - commit: increase commit message buffer size
 - sha1-name: use the_hash_algo when parsing object names
 - strbuf: allocate space with GIT_MAX_HEXSZ
 - commit: express tree entry constants in terms of the_hash_algo
 - hex: switch to using the_hash_algo
 - tree-walk: replace hard-coded constants with the_hash_algo
 - cache: update object ID functions for the_hash_algo

 Conversion from uchar[40] to struct object_id continues.

 Expecting a reroll.
 cf. <20180709232656.GA535220@genre.crustytoothpaste.net>


* bc/send-email-auto-cte (2018-07-09) 4 commits
 - docs: correct RFC specifying email line length
 - send-email: automatically determine transfer-encoding
 - send-email: accept long lines with suitable transfer encoding
 - send-email: add an auto option for transfer encoding

 The content-transfer-encoding of the message "git send-email" sends
 out by default was 8bit, which can cause trouble when there is an
 overlong line to bust RFC 5322/2822 limit.  A new option 'auto' to
 automatically switch to quoted-printable when there is such a line
 in the payload has been introduced and is made the default.

 Will merge to 'next'.


* en/dirty-merge-fixes (2018-07-11) 9 commits
 - merge: fix misleading pre-merge check documentation
 - merge-recursive: enforce rule that index matches head before merging
 - t6044: add more testcases with staged changes before a merge is invoked
 - merge-recursive: fix assumption that head tree being merged is HEAD
 - merge-recursive: make sure when we say we abort that we actually abort
 - t6044: add a testcase for index matching head, when head doesn't match HEAD
 - t6044: verify that merges expected to abort actually abort
 - index_has_changes(): avoid assuming operating on the_index
 - read-cache.c: move index_has_changes() from merge.c

 The recursive merge strategy did not properly ensure there was no
 change between HEAD and the index before performing its operation,
 which has been corrected.

 Will merge to 'next'.


* en/t6036-merge-recursive-tests (2018-07-11) 6 commits
 - t6036: add a failed conflict detection case: regular files, different modes
 - t6036: add a failed conflict detection case with conflicting types
 - t6036: add a failed conflict detection case with submodule add/add
 - t6036: add a failed conflict detection case with submodule modify/modify
 - t6036: add a failed conflict detection case with symlink add/add
 - t6036: add a failed conflict detection case with symlink modify/modify

 Tests to cover various conflicting cases have been added for
 merge-recursive.

 Will merge to 'next'.


* en/t6036-recursive-corner-cases (2018-07-06) 1 commit
 - t6036: add lots of detail for directory/file conflicts in recursive case

 Tests to cover more D/F conflict cases have been added for
 merge-recursive.

 Will merge to 'next'.


* en/t6042-insane-merge-rename-testcases (2018-07-03) 3 commits
 - t6042: add testcase covering long chains of rename conflicts
 - t6042: add testcase covering rename/rename(2to1)/delete/delete conflict
 - t6042: add testcase covering rename/add/delete conflict type

 Various glitches in the heuristics of merge-recursive strategy have
 been documented in new tests.

 Will merge to 'next'.

 I am not sure if there is a single "correct" answer everybody can
 agree on for each of these "insane" cases, though.


* en/t7405-recursive-submodule-conflicts (2018-07-11) 3 commits
 - t7405: verify 'merge --abort' works after submodule/path conflicts
 - t7405: add a directory/submodule conflict
 - t7405: add a file/submodule conflict

 Tests to cover conflict cases that involve submodules have been
 added for merge-recursive.

 Will merge to 'next'.


* es/test-fixes (2018-07-03) 25 commits
 - t9119: fix broken &&-chains
 - t9000-t9999: fix broken &&-chains
 - t7000-t7999: fix broken &&-chains
 - t6000-t6999: fix broken &&-chains
 - t5000-t5999: fix broken &&-chains
 - t4000-t4999: fix broken &&-chains
 - t3030: fix broken &&-chains
 - t3000-t3999: fix broken &&-chains
 - t2000-t2999: fix broken &&-chains
 - t1000-t1999: fix broken &&-chains
 - t0000-t0999: fix broken &&-chains
 - t9814: simplify convoluted check that command correctly errors out
 - t9001: fix broken "invoke hook" test
 - t7810: use test_expect_code() instead of hand-rolled comparison
 - t7400: fix broken "submodule add/reconfigure --force" test
 - t7201: drop pointless "exit 0" at end of subshell
 - t6036: fix broken "merge fails but has appropriate contents" tests
 - t5505: modernize and simplify hard-to-digest test
 - t5406: use write_script() instead of birthing shell script manually
 - t5405: use test_must_fail() instead of checking exit code manually
 - t/lib-submodule-update: fix "absorbing" test
 - t: drop unnecessary terminating semicolon in subshell
 - t: use sane_unset() rather than 'unset' with broken &&-chain
 - t: use test_write_lines() instead of series of 'echo' commands
 - t: use test_might_fail() instead of manipulating exit code manually

 Test clean-up and corrections.

 Will merge to 'next'.


* jk/empty-pick-fix (2018-07-11) 2 commits
 - sequencer: don't say BUG on bogus input
 - sequencer: handle empty-set cases consistently

 Handling of an empty range by "git cherry-pick" was inconsistent
 depending on how the range ended up to be empty, which has been
 corrected.

 Will merge to 'next'.


* jk/fetch-all-peeled-fix (2018-07-06) 1 commit
 - t5500: prettify non-commit tag tests

 Test modernization.

 Will merge to 'next'.


* jk/for-each-ref-icase (2018-07-03) 3 commits
 - ref-filter: avoid backend filtering with --ignore-case
 - for-each-ref: consistently pass WM_IGNORECASE flag
 - t6300: add a test for --ignore-case

 The "--ignore-case" option of "git for-each-ref" (and its friends)
 did not work correctly, which has been fixed.

 Will merge to 'next'.


* jk/fsck-gitmodules-gently (2018-07-03) 5 commits
 - fsck: silence stderr when parsing .gitmodules
 - fsck: silence stderr when parsing .gitmodules
 - config: add options parameter to git_config_from_mem
 - config: add CONFIG_ERROR_SILENT handler
 - config: turn die_on_error into caller-facing enum

 What's the status of this one?


* js/range-diff (2018-07-09) 20 commits
 - range-diff: make --dual-color the default mode
 - range-diff: left-pad patch numbers
 - completion: support `git range-diff`
 - range-diff: add a man page
 - range-diff --dual-color: work around bogus white-space warning
 - range-diff: offer to dual-color the diffs
 - diff: add an internal option to dual-color diffs of diffs
 - color: add the meta color GIT_COLOR_REVERSE
 - range-diff: use color for the commit pairs
 - range-diff: add tests
 - range-diff: do not show "function names" in hunk headers
 - range-diff: adjust the output of the commit pairs
 - range-diff: suppress the diff headers
 - range-diff: indent the diffs just like tbdiff
 - range-diff: right-trim commit messages
 - range-diff: also show the diff between patches
 - range-diff: improve the order of the shown commits
 - range-diff: first rudimentary implementation
 - Introduce `range-diff` to compare iterations of a topic branch
 - linear-assignment: a function to solve least-cost assignment problems

 "git tbdiff" that lets us compare individual patches in two
 iterations of a topic has been rewritten and made into a built-in
 command.

 Supersedes js/branch-diff topic that added a similar command under
 a different name.


* jt/commit-graph-per-object-store (2018-07-09) 6 commits
 . commit-graph: add repo arg to graph readers
 . commit-graph: store graph in struct object_store
 . commit-graph: add free_commit_graph
 . commit-graph: add missing forward declaration
 . object-store: add missing include
 . commit-graph: refactor preparing commit graph
 (this branch uses ds/commit-graph-fsck.)

 The singleton commit-graph in-core instance is made per in-core
 repository instance.

 Expecting a reroll, as it breaks 32-bit build.
 cf. https://travis-ci.org/git/git/jobs/402422108
 

* jt/partial-clone-fsck-connectivity (2018-07-09) 2 commits
 - clone: check connectivity even if clone is partial
 - upload-pack: send refs' objects despite "filter"
 (this branch uses bw/ref-in-want and jt/connectivity-check-after-unshallow.)

 Partial clone support of "git clone" has been updated to correctly
 validate the objects it receives from the other side.  The server
 side has been corrected to send objects that are directly
 requested, even if they may match the filtering criteria (e.g. when
 doing a "lazy blob" partial clone).

 Will merge to 'next'.


* kg/gc-auto-windows-workaround (2018-07-09) 1 commit
 - gc --auto: release pack files before auto packing

 "git gc --auto" opens file descriptors for the packfiles before
 spawning "git repack/prune", which would upset Windows that does
 not want a process to work on a file that is open by another
 process.  The issue has been worked around.

 Will merge to 'next'.


* kn/userdiff-php (2018-07-06) 2 commits
 - userdiff: support new keywords in PHP hunk header
 - t4018: add missing test cases for PHP

 The userdiff pattern for .php has been updated.

 Will merge to 'next'.


* lt/date-human (2018-07-09) 1 commit
 - Add 'human' date format


* mh/fast-import-no-diff-delta-empty (2018-07-06) 1 commit
 - fast-import: do not call diff_delta() with empty buffer

 "git fast-import" has been updated to avoid attempting to create
 delta against a zero-byte-long string, which is pointless.

 Will merge to 'next'.


* ot/ref-filter-object-info (2018-07-09) 4 commits
 . ref-filter: use oid_object_info() to get object
 . ref-filter: merge get_obj and get_object
 . ref-filter: add empty values to technical fields
 . ref-filter: add info_source to valid_atom

 Expecting a reroll, as it breaks compilation with uninitialized var.
 cf. https://travis-ci.org/git/git/jobs/402422102


* pk/rebase-in-c (2018-07-09) 4 commits
 - builtin/rebase: support running "git rebase <upstream>"
 - sequencer: refactor the code to detach HEAD to checkout.c
 - rebase: refactor common shell functions into their own file
 - rebase: start implementing it as a builtin

 Piecemeal rewrite of the "rebase" machinery in C.  

 Expecting a reroll, but it seems that this is getting quite close.
 cf. <CAOZc8M8YmLwJOzG-1jyz8ft4W_tJMwNs6kSV8inX1q_zmDW8Sg@mail.gmail.com>


* tb/config-default (2018-07-06) 1 commit
 - builtin/config: work around an unsized array forward declaration

 Compilation fix.

 Will merge to 'next'.


* bp/log-ref-write-fd-with-strbuf (2018-07-10) 1 commit
 - convert log_ref_write_fd() to use strbuf

 Code clean-up.

 Will merge to 'next'.


* hs/push-cert-check-cleanup (2018-07-11) 2 commits
 - gpg-interface: make parse_gpg_output static and remove from interface header
 - builtin/receive-pack: use check_signature from gpg-interface

 Code clean-up.

 Will merge to 'next'.


* mk/merge-in-sparse-checkout (2018-07-11) 1 commit
 - unpack-trees: do not fail reset because of unmerged skipped entry

 "git reset --merge" (hence "git merge ---abort") and "git reset --hard"
 had trouble working correctly in a sparsely checked out working
 tree after a conflict, which has been corrected.

 Will merge to 'next'.

--------------------------------------------------
[Stalled]

* pw/add-p-select (2018-03-16) 3 commits
 - add -p: optimize line selection for short hunks
 - add -p: allow line selection to be inverted
 - add -p: select individual hunk lines

 "git add -p" interactive interface learned to let users choose
 individual added/removed lines to be used in the operation, instead
 of accepting or rejecting a whole hunk.

 Expecting a reroll to reignite the discussion.
 cf. <9895c7b7-eac4-28c1-90c6-443acd1131b7@talktalk.net>


* jh/json-writer (2018-06-13) 1 commit
 - json_writer: new routines to create JSON data

 Preparatory code to later add json output for unspecified telemetry
 data.

 We do not add random code that does not have real users to our
 codebase, so let's have it wait until such a real code materializes
 before too long.


* hn/bisect-first-parent (2018-04-21) 1 commit
 - bisect: create 'bisect_flags' parameter in find_bisection()

 Preliminary code update to allow passing more flags down the
 bisection codepath in the future.

 We do not add random code that does not have real users to our
 codebase, so let's have it wait until such a real code materializes
 before too long.


* av/fsmonitor-updates (2018-01-04) 6 commits
 - fsmonitor: use fsmonitor data in `git diff`
 - fsmonitor: remove debugging lines from t/t7519-status-fsmonitor.sh
 - fsmonitor: make output of test-dump-fsmonitor more concise
 - fsmonitor: update helper tool, now that flags are filled later
 - fsmonitor: stop inline'ing mark_fsmonitor_valid / _invalid
 - dir.c: update comments to match argument name

 Code clean-up on fsmonitor integration, plus optional utilization
 of the fsmonitor data in diff-files.

 Waiting for an update.
 cf. <alpine.DEB.2.21.1.1801042335130.32@MININT-6BKU6QN.europe.corp.microsoft.com>


* pb/bisect-helper-2 (2018-06-13) 8 commits
 - t6030: make various test to pass GETTEXT_POISON tests
 - bisect--helper: `bisect_start` shell function partially in C
 - bisect--helper: `get_terms` & `bisect_terms` shell function in C
 - bisect--helper: `bisect_next_check` shell function in C
 - bisect--helper: `check_and_set_terms` shell function in C
 - wrapper: move is_empty_file() and rename it as is_empty_or_missing_file()
 - bisect--helper: `bisect_write` shell function in C
 - bisect--helper: `bisect_reset` shell function in C

 Expecting a reroll.
 cf. <0102015f5e5ee171-f30f4868-886f-47a1-a4e4-b4936afc545d-000000@eu-west-1.amazonses.com>

 I just rebased the topic to a newer base as it did not build
 standalone with the base I originally queued the topic on, but
 otherwise there is no update to address any of the review comments
 in the thread above---we are still waiting for a reroll.


* mk/http-backend-content-length (2018-06-11) 3 commits
 - http-backend: respect CONTENT_LENGTH for receive-pack
 - http-backend: respect CONTENT_LENGTH as specified by rfc3875
 - http-backend: cleanup writing to child process

 The http-backend (used for smart-http transport) used to slurp the
 whole input until EOF, without paying attention to CONTENT_LENGTH
 that is supplied in the environment and instead expecting the Web
 server to close the input stream.  This has been fixed.


* jk/drop-ancient-curl (2017-08-09) 5 commits
 - http: #error on too-old curl
 - curl: remove ifdef'd code never used with curl >=7.19.4
 - http: drop support for curl < 7.19.4
 - http: drop support for curl < 7.16.0
 - http: drop support for curl < 7.11.1

 Some code in http.c that has bitrot is being removed.

 Expecting a reroll.


* mk/use-size-t-in-zlib (2017-08-10) 1 commit
 . zlib.c: use size_t for size

 The wrapper to call into zlib followed our long tradition to use
 "unsigned long" for sizes of regions in memory, which have been
 updated to use "size_t".

 Needs resurrecting by making sure the fix is good and still applies
 (or adjusted to today's codebase).

--------------------------------------------------
[Cooking]

* ao/config-from-gitmodules (2018-06-26) 6 commits
  (merged to 'next' on 2018-07-11 at 5d88dc6fb7)
 + submodule-config: reuse config_from_gitmodules in repo_read_gitmodules
 + submodule-config: pass repository as argument to config_from_gitmodules
 + submodule-config: make 'config_from_gitmodules' private
 + submodule-config: add helper to get 'update-clone' config from .gitmodules
 + submodule-config: add helper function to get 'fetch' config from .gitmodules
 + config: move config_from_gitmodules to submodule-config.c

 Tighten the API to make it harder to misuse in-tree .gitmodules
 file, even though it shares the same syntax with configuration
 files, to read random configuration items from it.

 Will merge to 'master'.


* as/sequencer-customizable-comment-char (2018-06-28) 1 commit
 - sequencer: use configured comment character

 Honor core.commentchar when preparing the list of commits to replay
 in "rebase -i".

 Needs inter-contributor coordination.
 cf. <e8973797-fc5f-2ca5-1881-5ee66fc8279b@living180.net>


* dj/runtime-prefix (2018-06-26) 1 commit
  (merged to 'next' on 2018-07-11 at 27d99fef94)
 + Makefile: tweak sed invocation

 POSIX portability fix in Makefile to fix a glitch introduced a few
 releases ago.

 Will merge to 'master'.


* ds/commit-graph (2018-06-28) 1 commit
  (merged to 'next' on 2018-07-11 at d579f733ed)
 + commit-graph: fix documentation inconsistencies

 Docfix.

 Will merge to 'master'.


* en/rebase-i-microfixes (2018-06-27) 3 commits
  (merged to 'next' on 2018-07-11 at d913ca0f77)
 + git-rebase--merge: modernize "git-$cmd" to "git $cmd"
 + Fix use of strategy options with interactive rebases
 + t3418: add testcase showing problems with rebase -i and strategy options

 Will merge to 'master'.


* js/enhanced-version-info (2018-06-29) 1 commit
  (merged to 'next' on 2018-07-11 at 815b2ea2bc)
 + Makefile: fix the "built from commit" code

 Build fix.

 Will merge to 'master'.


* js/rebase-recreate-merge (2018-06-27) 1 commit
  (merged to 'next' on 2018-07-11 at eb8f33aaef)
 + rebase: fix documentation formatting

 Docfix.

 Will merge to 'master'.


* jt/connectivity-check-after-unshallow (2018-07-03) 1 commit
 - fetch-pack: write shallow, then check connectivity
 (this branch is used by jt/partial-clone-fsck-connectivity; uses bw/ref-in-want.)

 "git fetch" failed to correctly validate the set of objects it
 received when making a shallow history deeper, which has been
 corrected.

 Will merge to 'next'.


* jt/fetch-nego-tip (2018-07-03) 1 commit
 - fetch-pack: support negotiation tip whitelist
 (this branch uses jt/fetch-pack-negotiator.)

 "git fetch" learned a new option "--negotiation-tip" to limit the
 set of commits it tells the other end as "have", to reduce wasted
 bandwidth and cycles, which would be helpful when the receiving
 repository has a lot of refs that have little to do with the
 history at the remote it is fetching from.

 Will merge to 'next'.


* mb/filter-branch-optim (2018-06-26) 1 commit
  (merged to 'next' on 2018-07-11 at e43a0136c2)
 + filter-branch: skip commits present on --state-branch

 "git filter-branch" when used with the "--state-branch" option
 still attempted to rewrite the commits whose filtered result is
 known from the previous attempt (which is recorded on the state
 branch); the command has been corrected not to waste cycles doing
 so.

 Will merge to 'master'.


* ms/core-icase-doc (2018-06-28) 1 commit
  (merged to 'next' on 2018-07-11 at 8f0d71c32d)
 + Documentation: declare "core.ignoreCase" as internal variable

 Clarify that setting core.ignoreCase to deviate from reality would
 not turn a case-incapable filesystem into a case-capable one.

 Will merge to 'master'.


* rj/submodule-fsck-skip (2018-07-03) 1 commit
  (merged to 'next' on 2018-07-11 at 985f88cf7e)
 + fsck: check skiplist for object in fsck_blob()

 "fsck.skipList" did not prevent a blob object listed there from
 being inspected for is contents (e.g. we recently started to
 inspect the contents of ".gitmodules" for certain malicious
 patterns), which has been corrected.

 Will merge to 'master'.


* tb/grep-only-matching (2018-07-09) 2 commits
 - grep.c: teach 'git grep --only-matching'
 - grep.c: extract show_line_header()
 (this branch uses tb/grep-column.)

 "git grep" learned the "--only-matching" option.

 Will merge to 'next'.


* tz/exclude-doc-smallfixes (2018-06-27) 2 commits
  (merged to 'next' on 2018-07-11 at 5134f1ca72)
 + dir.c: fix typos in core.excludesfile comment
 + gitignore.txt: clarify default core.excludesfile path

 Doc updates.

 Will merge to 'master'.


* ld/p423 (2018-06-19) 6 commits
  (merged to 'next' on 2018-06-29 at af76acb664)
 + git-p4: python3: fix octal constants
 + git-p4: python3: use print() function
 + git-p4: python3: basestring workaround
 + git-p4: python3: remove backticks
 + git-p4: python3: replace dict.has_key(k) with "k in dict"
 + git-p4: python3: replace <> with !=

 Code preparation to make "git p4" closer to be usable with Python 3.

 Will merge to 'master'.


* pw/rebase-i-keep-reword-after-conflict (2018-06-19) 1 commit
  (merged to 'next' on 2018-06-29 at 538337be74)
 + sequencer: do not squash 'reword' commits when we hit conflicts

 Bugfix for "rebase -i" corner case regression.

 Will merge to 'master'.


* xy/format-patch-prereq-patch-id-fix (2018-06-19) 1 commit
  (merged to 'next' on 2018-06-29 at 0dffc46ce2)
 + format-patch: clear UNINTERESTING flag before prepare_bases

 Recently added "--base" option to "git format-patch" command did
 not correctly generate prereq patch ids.

 Will merge to 'master'.


* bw/config-refer-to-gitsubmodules-doc (2018-06-21) 1 commit
  (merged to 'next' on 2018-06-29 at da6f49d292)
 + docs: link to gitsubmodules

 Docfix.

 Will merge to 'master'.


* bw/ref-in-want (2018-06-28) 8 commits
 - fetch-pack: implement ref-in-want
 - fetch-pack: put shallow info in output parameter
 - fetch: refactor to make function args narrower
 - fetch: refactor fetch_refs into two functions
 - fetch: refactor the population of peer ref OIDs
 - upload-pack: test negotiation with changing repository
 - upload-pack: implement ref-in-want
 - test-pkt-line: add unpack-sideband subcommand
 (this branch is used by jt/connectivity-check-after-unshallow and jt/partial-clone-fsck-connectivity.)

 Protocol v2 has been updated to allow slightly out-of-sync set of
 servers to work together to serve a single client, which would be
 useful with load-balanced servers that talk smart HTTP transport.

 Will merge to 'next'.


* en/rebase-consistency (2018-06-27) 9 commits
 - git-rebase: make --allow-empty-message the default
 - t3401: add directory rename testcases for rebase and am
 - git-rebase.txt: document behavioral differences between modes
 - directory-rename-detection.txt: technical docs on abilities and limitations
 - git-rebase.txt: address confusion between --no-ff vs --force-rebase
 - git-rebase: error out when incompatible options passed
 - t3422: new testcases for checking when incompatible options passed
 - git-rebase.sh: update help messages a bit
 - git-rebase.txt: document incompatible options

 "git rebase" behaved slightly differently depending on which one of
 the three backends gets used; this has been documented and an
 effort to make them more uniform has begun.

 Will merge to 'next'.


* jt/remove-pack-bitmap-global (2018-06-21) 2 commits
  (merged to 'next' on 2018-06-29 at 852857b04e)
 + pack-bitmap: add free function
 + pack-bitmap: remove bitmap_git global variable

 The effort to move globals to per-repository in-core structure
 continues.

 Will merge to 'master'.


* sb/submodule-move-head-error-msg (2018-06-25) 1 commit
 - submodule.c: report the submodule that an error occurs in

 Will merge to 'next'.


* bw/protocol-v2 (2018-06-22) 1 commit
  (merged to 'next' on 2018-06-29 at 78090cc343)
 + protocol-v2 doc: put HTTP headers after request

 Doc fix.

 Will merge to 'master'.


* jk/branch-l-1-repurpose (2018-06-22) 1 commit
 - branch: make "-l" a synonym for "--list"
 (this branch uses jk/branch-l-0-deprecation.)

 Updated plan to repurpose the "-l" option to "git branch".

 Will hold in 'pu' until jk/branch-l-0-deprecation progresses sufficiently.


* vs/typofixes (2018-06-22) 1 commit
  (merged to 'next' on 2018-06-29 at 665c8db2f7)
 + Documentation: spelling and grammar fixes

 Doc fix.

 Will merge to 'master'.


* cc/remote-odb (2018-07-06) 10 commits
 - SQUASH??? error: unused variable 'o' [-Werror=unused-variable]
 - Documentation/config: add odb.<name>.promisorRemote
 - t0410: test fetching from many promisor remotes
 - Use odb.origin.partialclonefilter instead of core.partialclonefilter
 - Use remote_odb_get_direct() and has_remote_odb()
 - remote-odb: add remote_odb_reinit()
 - remote-odb: implement remote_odb_get_many_direct()
 - remote-odb: implement remote_odb_get_direct()
 - Add initial remote odb support
 - fetch-object: make functions return an error code

 Needs a reroll.


* ds/multi-pack-index (2018-07-09) 24 commits
 . midx: clear midx on repack
 . packfile: skip loading index if in multi-pack-index
 . midx: prevent duplicate packfile loads
 . midx: use midx in approximate_object_count
 . midx: use existing midx when writing new one
 . midx: use midx in abbreviation calculations
 . midx: read objects from multi-pack-index
 . midx: prepare midxed_git struct
 . config: create core.multiPackIndex setting
 . midx: write object offsets
 . midx: write object id fanout chunk
 . midx: write object ids in a chunk
 . midx: sort and deduplicate objects from packfiles
 . midx: read pack names into array
 . multi-pack-index: write pack names in chunk
 . multi-pack-index: read packfile list
 . packfile: generalize pack directory list
 . multi-pack-index: expand test data
 . multi-pack-index: load into memory
 . midx: write header information to lockfile
 . multi-pack-index: add 'write' verb
 . multi-pack-index: add builtin
 . multi-pack-index: add format details
 . multi-pack-index: add design document

 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.

 Expecting a reroll to fix documentation build.
 cf. https://travis-ci.org/git/git/jobs/402422110


* tb/grep-column (2018-06-22) 7 commits
  (merged to 'next' on 2018-06-29 at 25dc70426e)
 + contrib/git-jump/git-jump: jump to exact location
 + grep.c: add configuration variables to show matched option
 + builtin/grep.c: add '--column' option to 'git-grep(1)'
 + grep.c: display column number of first match
 + grep.[ch]: extend grep_opt to allow showing matched column
 + grep.c: expose {,inverted} match column in match_line()
 + Documentation/config.txt: camel-case lineNumber for consistency
 (this branch is used by tb/grep-only-matching.)

 "git grep" learned the "--column" option that gives not just the
 line number but the column number of the hit.

 Will merge to 'master'.


* jt/fetch-pack-negotiator (2018-06-15) 7 commits
 - fetch-pack: introduce negotiator API
 - fetch-pack: move common check and marking together
 - fetch-pack: make negotiation-related vars local
 - fetch-pack: use ref adv. to prune "have" sent
 - fetch-pack: directly end negotiation if ACK ready
 - fetch-pack: clear marks before re-marking
 - fetch-pack: split up everything_local()
 (this branch is used by jt/fetch-nego-tip.)

 Code restructuring and a small fix to transport protocol v2 during
 fetching.

 Will merge to 'next'.


* sb/submodule-core-worktree (2018-06-19) 3 commits
  (merged to 'next' on 2018-06-28 at 96e1a8dbd1)
 + submodule deinit: unset core.worktree
 + submodule: ensure core.worktree is set after update
 + submodule: unset core.worktree if no working tree is present

 Originally merged to 'next' on 2018-06-22

 "git submodule" did not correctly adjust core.worktree setting that
 indicates whether/where a submodule repository has its associated
 working tree across various state transitions, which has been
 corrected.

 Will merge to 'master'.


* ds/ewah-cleanup (2018-06-21) 10 commits
  (merged to 'next' on 2018-06-28 at 9cd7c0d54a)
 + ewah: delete unused 'rlwit_discharge_empty()'
 + ewah: drop ewah_serialize_native function
 + ewah: drop ewah_deserialize function
 + ewah_io: delete unused 'ewah_serialize()'
 + ewah_bitmap: delete unused 'ewah_or()'
 + ewah_bitmap: delete unused 'ewah_not()'
 + ewah_bitmap: delete unused 'ewah_and_not()'
 + ewah_bitmap: delete unused 'ewah_and()'
 + ewah/bitmap.c: delete unused 'bitmap_each_bit()'
 + ewah/bitmap.c: delete unused 'bitmap_clear()'

 Originally merged to 'next' on 2018-06-22

 Remove unused function definitions and declarations from ewah
 bitmap subsystem.

 Will merge to 'master'.


* is/parsing-line-range (2018-06-15) 2 commits
 - log: prevent error if line range ends past end of file
 - blame: prevent error if range ends past end of file

 Parsing of -L[<N>][,[<M>]] parameters "git blame" and "git log"
 take has been tweaked.

 Will merge to 'next'.


* en/merge-recursive-cleanup (2018-06-12) 6 commits
  (merged to 'next' on 2018-06-28 at 1a3646eb7d)
 + merge-recursive: add pointer about unduly complex looking code
 + merge-recursive: rename conflict_rename_*() family of functions
 + merge-recursive: clarify the rename_dir/RENAME_DIR meaning
 + merge-recursive: align labels with their respective code blocks
 + merge-recursive: fix numerous argument alignment issues
 + merge-recursive: fix miscellaneous grammar error in comment

 Originally merged to 'next' on 2018-06-19

 Code cleanup.

 Will merge to 'master'.


* ab/checkout-default-remote (2018-06-11) 8 commits
 - checkout & worktree: introduce checkout.defaultRemote
 - checkout: add advice for ambiguous "checkout <branch>"
 - builtin/checkout.c: use "ret" variable for return
 - checkout: pass the "num_matches" up to callers
 - checkout.c: change "unique" member to "num_matches"
 - checkout.c: introduce an *_INIT macro
 - checkout.h: wrap the arguments to unique_tracking_name()
 - checkout tests: index should be clean after dwim checkout

 "git checkout" and "git worktree add" learned to honor
 checkout.defaultRemote when auto-vivifying a local branch out of a
 remote tracking branch in a repository with multiple remotes that
 have tracking branches that share the same names.

 Will merge to 'next'.


* ds/commit-graph-fsck (2018-06-27) 22 commits
 - commit-graph: update design document
 - gc: automatically write commit-graph files
 - commit-graph: add '--reachable' option
 - commit-graph: use string-list API for input
 - fsck: verify commit-graph
 - commit-graph: verify contents match checksum
 - commit-graph: test for corrupted octopus edge
 - commit-graph: verify commit date
 - commit-graph: verify generation number
 - commit-graph: verify parent list
 - commit-graph: verify root tree OIDs
 - commit-graph: verify objects exist
 - commit-graph: verify corrupt OID fanout and lookup
 - commit-graph: verify required chunks are present
 - commit-graph: verify catches corrupt signature
 - commit-graph: add 'verify' subcommand
 - commit-graph: load a root tree from specific graph
 - commit: force commit to parse from object database
 - commit-graph: parse commit from chosen graph
 - commit-graph: fix GRAPH_MIN_SIZE
 - commit-graph: UNLEAK before die()
 - t5318-commit-graph.sh: use core.commitGraph
 (this branch is used by jt/commit-graph-per-object-store.)

 "git fsck" learns to make sure the optional commit-graph file is in
 a sane state.

 Will merge to 'next'.


* ma/wrapped-info (2018-05-28) 2 commits
 - usage: prefix all lines in `vreportf()`, not just the first
 - usage: extract `prefix_suffix_lines()` from `advise()`

 An attempt to help making multi-line messages fed to warning(),
 error(), and friends more easily translatable.

 Will discard and wait for a cleaned-up rewrite.
 cf. <20180529213957.GF7964@sigill.intra.peff.net>


* jm/cache-entry-from-mem-pool (2018-07-03) 8 commits
 - block alloc: add validations around cache_entry lifecyle
 - block alloc: allocate cache entries from mem_pool
 - mem-pool: fill out functionality
 - mem-pool: add life cycle management functions
 - mem-pool: only search head block for available space
 - block alloc: add lifecycle APIs for cache_entry structs
 - read-cache: teach make_cache_entry to take object_id
 - read-cache: teach refresh_cache_entry to take istate

 For a large tree, the index needs to hold many cache entries
 allocated on heap.  These cache entries are now allocated out of a
 dedicated memory pool to amortize malloc(3) overhead.

 Will merge to 'next'.

 This makes each cache-entry larger by either 4 or 8 bytes, which is
 a bit sad, though.


* sb/object-store-grafts (2018-05-18) 19 commits
  (merged to 'next' on 2018-06-28 at 02f70d6302)
 + commit: allow lookup_commit_graft to handle arbitrary repositories
 + commit: allow prepare_commit_graft to handle arbitrary repositories
 + shallow: migrate shallow information into the object parser
 + path.c: migrate global git_path_* to take a repository argument
 + cache: convert get_graft_file to handle arbitrary repositories
 + commit: convert read_graft_file to handle arbitrary repositories
 + commit: convert register_commit_graft to handle arbitrary repositories
 + commit: convert commit_graft_pos() to handle arbitrary repositories
 + shallow: add repository argument to is_repository_shallow
 + shallow: add repository argument to check_shallow_file_for_update
 + shallow: add repository argument to register_shallow
 + shallow: add repository argument to set_alternate_shallow_file
 + commit: add repository argument to lookup_commit_graft
 + commit: add repository argument to prepare_commit_graft
 + commit: add repository argument to read_graft_file
 + commit: add repository argument to register_commit_graft
 + commit: add repository argument to commit_graft_pos
 + object: move grafts to object parser
 + object-store: move object access functions to object-store.h
 (this branch is used by sb/object-store-lookup.)

 Originally merged to 'next' on 2018-06-22

 The conversion to pass "the_repository" and then "a_repository"
 throughout the object access API continues.

 Will merge to 'master'.


* sb/diff-color-move-more (2018-06-29) 9 commits
 - diff.c: add white space mode to move detection that allows indent changes
 - diff.c: factor advance_or_nullify out of mark_color_as_moved
 - diff.c: decouple white space treatment from move detection algorithm
 - diff.c: add a blocks mode for moved code detection
 - diff.c: adjust hash function signature to match hashmap expectation
 - diff.c: do not pass diff options as keydata to hashmap
 - t4015: avoid git as a pipe input
 - xdiff/xdiffi.c: remove unneeded function declarations
 - xdiff/xdiff.h: remove unused flags

 "git diff --color-moved" feature has further been tweaked.

 Will merge to 'next'.


* jk/branch-l-0-deprecation (2018-06-22) 3 commits
  (merged to 'next' on 2018-06-29 at fac676dfb9)
 + branch: deprecate "-l" option
 + t: switch "branch -l" to "branch --create-reflog"
 + t3200: unset core.logallrefupdates when testing reflog creation
 (this branch is used by jk/branch-l-1-repurpose.)

 The "-l" option in "git branch -l" is an unfortunate short-hand for
 "--create-reflog", but many users, both old and new, somehow expect
 it to be something else, perhaps "--list".  This step warns when "-l"
 is used as a short-hand for "--create-reflog" and warns about the
 future repurposing of the it when it is used.

 Will merge to 'master'.

--------------------------------------------------
[Discarded]

* ag/rebase-i-append-todo-help (2018-06-14) 2 commits
 . rebase--interactive: rewrite append_todo_help() in C
 . Merge branch 'ag/rebase-p' into ag/rebase-i-append-todo-help
 (this branch is used by ag/rebase-i-rewrite-todo.)

 Stepwise rewriting of the machinery of "rebase -i" into C continues.

 Now part of ag/rebase-i-in-c


* ag/rebase-i-rewrite-todo (2018-06-15) 3 commits
 . rebase--interactive: rewrite the edit-todo functionality in C
 . editor: add a function to launch the sequence editor
 . Merge branch 'bc/t3430-fixup' into ag/rebase-i-rewrite-todo
 (this branch uses ag/rebase-i-append-todo-help.)

 Stepwise rewriting of the machinery of "rebase -i" into C continues.

 Now part of ag/rebase-i-in-c


* ab/fetch-tags-noclobber (2018-05-16) 9 commits
 - fixup! push tests: assert re-pushing annotated tags
 - fetch: stop clobbering existing tags without --force
 - fetch tests: add a test clobbering tag behavior
 - fetch tests: correct a comment "remove it" -> "remove them"
 - push doc: correct lies about how push refspecs work
 - push tests: assert re-pushing annotated tags
 - push tests: add more testing for forced tag pushing
 - push tests: fix logic error in "push" test assertion
 - push tests: remove redundant 'git push' invocation

 Discarded per request.
 cf. <87po09cnir.fsf@evledraar.gmail.com>


* nd/use-the-index-compat-less (2018-06-25) 13 commits
 . wt-status.c: stop using index compat macros
 . sha1-name.c: stop using index compat macros
 . sequencer.c: stop using index compat macros
 . revision.c: stop using index compat macros
 . rerere.c: stop using index compat macros
 . merge.c: stop using index compat macros
 . merge-recursive.c: stop using index compat macros
 . entry.c: stop using index compat macros
 . diff.c: stop using index compat macros
 . diff-lib.c: stop using index compat macros
 . check-racy.c: stop using index compat macros
 . blame.c: stop using index compat macros
 . apply.c: stop using index compat macros

 Retracted to be replaced with a more vertical approach where the
 lower-level helper functions are taught to be capable of working on
 an istate instance that is not the_index first, and then upwards to
 support the application layer that wants to work on an arbitrary
 istate instance, as the goal is not a mechanical replacement of
 foo_cache(...) to foo_index(&the_index, ...).


* js/branch-diff (2018-05-16) 19 commits
 . fixup! Add a function to solve least-cost assignment problems
 . completion: support branch-diff
 . branch-diff: add a man page
 . branch-diff --dual-color: work around bogus white-space warning
 . branch-diff: offer to dual-color the diffs
 . diff: add an internal option to dual-color diffs of diffs
 . color: provide inverted colors, too
 . branch-diff: use color for the commit pairs
 . branch-diff: add tests
 . branch-diff: do not show "function names" in hunk headers
 . branch-diff: adjust the output of the commit pairs
 . branch-diff: suppress the diff headers
 . branch-diff: indent the diffs just like tbdiff
 . branch-diff: right-trim commit messages
 . branch-diff: also show the diff between patches
 . branch-diff: improve the order of the shown commits
 . branch-diff: first rudimentary implementation
 . Add a new builtin: branch-diff
 . Add a function to solve least-cost assignment problems

 "git tbdiff" that lets us compare individual patches in two
 iterations of a topic has been rewritten and made into a built-in
 command.

^ permalink raw reply	[relevance 3%]

* [PATCH v2 2/2] read-cache: fix directory/file conflict handling in read_index_unmerged()
  @ 2018-07-13 16:33  2%   ` Elijah Newren
    1 sibling, 0 replies; 200+ results
From: Elijah Newren @ 2018-07-13 16:33 UTC (permalink / raw)
  To: gitster; +Cc: git, sunshine, Elijah Newren

read_index_unmerged() has two intended purposes:
  * return 1 if there are any unmerged entries, 0 otherwise
  * drops any higher-stage entries down to stage #0

There are several callers of read_index_unmerged() that check the return
value to see if it is non-zero, all of which then die() if that condition
is met.  For these callers, dropping higher-stage entries down to stage #0
is a waste of resources, and returning immediately on first unmerged entry
would be better.  But it's probably only a very minor difference and isn't
the focus of this series.

The remaining callers ignore the return value and call this function for
the side effect of dropping higher-stage entries down to stage #0.  As
mentioned in commit e11d7b596970 ("'reset --merge': fix unmerged case",
2009-12-31),

    The _only_ reason we want to keep a previously unmerged entry in the
    index at stage #0 is so that we don't forget the fact that we have
    corresponding file in the work tree in order to be able to remove it
    when the tree we are resetting to does not have the path.

In fact, prior to commit d1a43f2aa4bf ("reset --hard/read-tree --reset -u:
remove unmerged new paths", 2008-10-15), read_index_unmerged() did just
remove unmerged entries from the cache immediately but that had the
unwanted effect of leaving around new untracked files in the tree from
aborted merges.

So, that's the intended purpose of this function.  The problem is that
when directory/files conflicts are present, trying to add the file to the
index at stage 0 fails (because there is still a directory in the way),
and the function returns early with a -1 return code to signify the error.
As noted above, none of the callers who want the drop-to-stage-0 behavior
check the return status, though, so this means all remaining unmerged
entries remain in the index and the callers proceed assuming otherwise.
Users then see errors of the form:

    error: 'DIR-OR-FILE' appears as both a file and as a directory
    error: DIR-OR-FILE: cannot drop to stage #0

and potentially also messages about other unmerged entries which came
lexicographically later than whatever pathname was both a file and a
directory.  Google finds a few hits searching for those messages,
suggesting there were probably a couple people who hit this besides me.
Luckily, calling `git reset --hard` multiple times would workaround
this bug.

Since the whole purpose here is to just put the entry *temporarily* into
the index so that any associated file in the working copy can be removed,
we can just skip the DFCHECK and allow both the file and directory to
appear in the index.  The temporary simultaneous appearance of the
directory and file entries in the index will be removed by the callers
by calling unpack_trees(), which excludes these unmerged entries marked
with CE_CONFLICTED flag from the resulting index, before they attempt to
write the index anywhere.

Signed-off-by: Elijah Newren <newren@gmail.com>
---
 read-cache.c                         | 13 ++++++++-----
 t/t1015-read-index-unmerged.sh       |  8 ++++----
 t/t6020-merge-df.sh                  |  3 ---
 t/t6042-merge-rename-corner-cases.sh |  1 -
 4 files changed, 12 insertions(+), 13 deletions(-)

diff --git a/read-cache.c b/read-cache.c
index 372588260e..666d295a5a 100644
--- a/read-cache.c
+++ b/read-cache.c
@@ -2632,10 +2632,13 @@ int write_locked_index(struct index_state *istate, struct lock_file *lock,
 
 /*
  * Read the index file that is potentially unmerged into given
- * index_state, dropping any unmerged entries.  Returns true if
- * the index is unmerged.  Callers who want to refuse to work
- * from an unmerged state can call this and check its return value,
- * instead of calling read_cache().
+ * index_state, dropping any unmerged entries to stage #0 (potentially
+ * resulting in a path appearing as both a file and a directory in the
+ * index; the caller is responsible to clear out the extra entries
+ * before writing the index to a tree).  Returns true if the index is
+ * unmerged.  Callers who want to refuse to work from an unmerged
+ * state can call this and check its return value, instead of calling
+ * read_cache().
  */
 int read_index_unmerged(struct index_state *istate)
 {
@@ -2658,7 +2661,7 @@ int read_index_unmerged(struct index_state *istate)
 		new_ce->ce_flags = create_ce_flags(0) | CE_CONFLICTED;
 		new_ce->ce_namelen = len;
 		new_ce->ce_mode = ce->ce_mode;
-		if (add_index_entry(istate, new_ce, 0))
+		if (add_index_entry(istate, new_ce, ADD_CACHE_SKIP_DFCHECK))
 			return error("%s: cannot drop to stage #0",
 				     new_ce->name);
 	}
diff --git a/t/t1015-read-index-unmerged.sh b/t/t1015-read-index-unmerged.sh
index 32ef6bdcfa..55d22da32c 100755
--- a/t/t1015-read-index-unmerged.sh
+++ b/t/t1015-read-index-unmerged.sh
@@ -30,7 +30,7 @@ test_expect_success 'setup modify/delete + directory/file conflict' '
 	)
 '
 
-test_expect_failure 'read-tree --reset cleans unmerged entries' '
+test_expect_success 'read-tree --reset cleans unmerged entries' '
 	test_when_finished "git -C df_plus_modify_delete clean -f" &&
 	test_when_finished "git -C df_plus_modify_delete reset --hard" &&
 	(
@@ -45,7 +45,7 @@ test_expect_failure 'read-tree --reset cleans unmerged entries' '
 	)
 '
 
-test_expect_failure 'One reset --hard cleans unmerged entries' '
+test_expect_success 'One reset --hard cleans unmerged entries' '
 	test_when_finished "git -C df_plus_modify_delete clean -f" &&
 	test_when_finished "git -C df_plus_modify_delete reset --hard" &&
 	(
@@ -87,7 +87,7 @@ test_expect_success 'setup directory/file conflict + simple edit/edit' '
 	)
 '
 
-test_expect_failure 'git merge --abort succeeds despite D/F conflict' '
+test_expect_success 'git merge --abort succeeds despite D/F conflict' '
 	test_when_finished "git -C df_plus_edit_edit clean -f" &&
 	test_when_finished "git -C df_plus_edit_edit reset --hard" &&
 	(
@@ -103,7 +103,7 @@ test_expect_failure 'git merge --abort succeeds despite D/F conflict' '
 	)
 '
 
-test_expect_failure 'git am --skip succeeds despite D/F conflict' '
+test_expect_success 'git am --skip succeeds despite D/F conflict' '
 	test_when_finished "git -C df_plus_edit_edit clean -f" &&
 	test_when_finished "git -C df_plus_edit_edit reset --hard" &&
 	(
diff --git a/t/t6020-merge-df.sh b/t/t6020-merge-df.sh
index 2af1beec5f..46b506b3b7 100755
--- a/t/t6020-merge-df.sh
+++ b/t/t6020-merge-df.sh
@@ -89,9 +89,6 @@ test_expect_success 'modify/delete + directory/file conflict' '
 '
 
 test_expect_success 'modify/delete + directory/file conflict; other way' '
-	# Yes, we really need the double reset since "letters" appears as
-	# both a file and a directory.
-	git reset --hard &&
 	git reset --hard &&
 	git clean -f &&
 	git checkout modify^0 &&
diff --git a/t/t6042-merge-rename-corner-cases.sh b/t/t6042-merge-rename-corner-cases.sh
index 1cbd946fc2..583e68997e 100755
--- a/t/t6042-merge-rename-corner-cases.sh
+++ b/t/t6042-merge-rename-corner-cases.sh
@@ -323,7 +323,6 @@ test_expect_success 'rename/directory conflict + content merge conflict' '
 	(
 		cd rename-directory-1 &&
 
-		git reset --hard &&
 		git reset --hard &&
 		git clean -fdqx &&
 
-- 
2.18.0.645.g72fe132ec2


^ permalink raw reply related	[relevance 2%]

* What's cooking in git.git (Jul 2018, #02; Wed, 18)
@ 2018-07-18 22:03  3% Junio C Hamano
  0 siblings, 0 replies; 200+ results
From: Junio C Hamano @ 2018-07-18 22:03 UTC (permalink / raw)
  To: git

Here are the topics that have been cooking.  Commits prefixed with
'-' are only in 'pu' (proposed updates) while commits prefixed with
'+' are in 'next'.  The ones marked with '.' do not appear in any of
the integration branches, but I am still holding onto them.

Many topics have moved to 'master' and 'next' from 'next' to 'pu'
respectively.  As I needed to re-resolve semantic merge conflicts
while reordering some topics (i.e. some that were merged earlier in
'pu' are left in 'pu' while another topic that had interactions with
them and required evil merge to resolve semantic conflicts
leapfrogged to 'next'---the semantic conflict resolution then need
to happen at a different merge than done earlier in 'pu' while
rebuilding today's integration), I didn't have enough time to spend
on new topics posted to the list in the past few days.

You can find the changes described here in the integration branches
of the repositories listed at

    http://git-blame.blogspot.com/p/git-public-repositories.html

--------------------------------------------------
[Graduated to "master"]

* ao/config-from-gitmodules (2018-06-26) 6 commits
  (merged to 'next' on 2018-07-11 at 5d88dc6fb7)
 + submodule-config: reuse config_from_gitmodules in repo_read_gitmodules
 + submodule-config: pass repository as argument to config_from_gitmodules
 + submodule-config: make 'config_from_gitmodules' private
 + submodule-config: add helper to get 'update-clone' config from .gitmodules
 + submodule-config: add helper function to get 'fetch' config from .gitmodules
 + config: move config_from_gitmodules to submodule-config.c

 Tighten the API to make it harder to misuse in-tree .gitmodules
 file, even though it shares the same syntax with configuration
 files, to read random configuration items from it.


* bw/config-refer-to-gitsubmodules-doc (2018-06-21) 1 commit
  (merged to 'next' on 2018-06-29 at da6f49d292)
 + docs: link to gitsubmodules

 Docfix.


* bw/protocol-v2 (2018-06-22) 1 commit
  (merged to 'next' on 2018-06-29 at 78090cc343)
 + protocol-v2 doc: put HTTP headers after request

 Doc fix.


* dj/runtime-prefix (2018-06-26) 1 commit
  (merged to 'next' on 2018-07-11 at 27d99fef94)
 + Makefile: tweak sed invocation

 POSIX portability fix in Makefile to fix a glitch introduced a few
 releases ago.


* ds/commit-graph (2018-06-28) 1 commit
  (merged to 'next' on 2018-07-11 at d579f733ed)
 + commit-graph: fix documentation inconsistencies

 Docfix.


* ds/ewah-cleanup (2018-06-21) 10 commits
  (merged to 'next' on 2018-06-28 at 9cd7c0d54a)
 + ewah: delete unused 'rlwit_discharge_empty()'
 + ewah: drop ewah_serialize_native function
 + ewah: drop ewah_deserialize function
 + ewah_io: delete unused 'ewah_serialize()'
 + ewah_bitmap: delete unused 'ewah_or()'
 + ewah_bitmap: delete unused 'ewah_not()'
 + ewah_bitmap: delete unused 'ewah_and_not()'
 + ewah_bitmap: delete unused 'ewah_and()'
 + ewah/bitmap.c: delete unused 'bitmap_each_bit()'
 + ewah/bitmap.c: delete unused 'bitmap_clear()'

 Originally merged to 'next' on 2018-06-22

 Remove unused function definitions and declarations from ewah
 bitmap subsystem.


* en/merge-recursive-cleanup (2018-06-12) 6 commits
  (merged to 'next' on 2018-06-28 at 1a3646eb7d)
 + merge-recursive: add pointer about unduly complex looking code
 + merge-recursive: rename conflict_rename_*() family of functions
 + merge-recursive: clarify the rename_dir/RENAME_DIR meaning
 + merge-recursive: align labels with their respective code blocks
 + merge-recursive: fix numerous argument alignment issues
 + merge-recursive: fix miscellaneous grammar error in comment

 Originally merged to 'next' on 2018-06-19

 Code cleanup.


* en/rebase-i-microfixes (2018-06-27) 3 commits
  (merged to 'next' on 2018-07-11 at d913ca0f77)
 + git-rebase--merge: modernize "git-$cmd" to "git $cmd"
 + Fix use of strategy options with interactive rebases
 + t3418: add testcase showing problems with rebase -i and strategy options

 Will merge to 'master'.


* jk/branch-l-0-deprecation (2018-06-22) 3 commits
  (merged to 'next' on 2018-06-29 at fac676dfb9)
 + branch: deprecate "-l" option
 + t: switch "branch -l" to "branch --create-reflog"
 + t3200: unset core.logallrefupdates when testing reflog creation
 (this branch is used by jk/branch-l-1-repurpose.)

 The "-l" option in "git branch -l" is an unfortunate short-hand for
 "--create-reflog", but many users, both old and new, somehow expect
 it to be something else, perhaps "--list".  This step warns when "-l"
 is used as a short-hand for "--create-reflog" and warns about the
 future repurposing of the it when it is used.


* js/enhanced-version-info (2018-06-29) 1 commit
  (merged to 'next' on 2018-07-11 at 815b2ea2bc)
 + Makefile: fix the "built from commit" code

 Build fix.


* js/rebase-recreate-merge (2018-06-27) 1 commit
  (merged to 'next' on 2018-07-11 at eb8f33aaef)
 + rebase: fix documentation formatting

 Docfix.


* jt/remove-pack-bitmap-global (2018-06-21) 2 commits
  (merged to 'next' on 2018-06-29 at 852857b04e)
 + pack-bitmap: add free function
 + pack-bitmap: remove bitmap_git global variable

 The effort to move globals to per-repository in-core structure
 continues.


* ld/p423 (2018-06-19) 6 commits
  (merged to 'next' on 2018-06-29 at af76acb664)
 + git-p4: python3: fix octal constants
 + git-p4: python3: use print() function
 + git-p4: python3: basestring workaround
 + git-p4: python3: remove backticks
 + git-p4: python3: replace dict.has_key(k) with "k in dict"
 + git-p4: python3: replace <> with !=

 Code preparation to make "git p4" closer to be usable with Python 3.


* mb/filter-branch-optim (2018-06-26) 1 commit
  (merged to 'next' on 2018-07-11 at e43a0136c2)
 + filter-branch: skip commits present on --state-branch

 "git filter-branch" when used with the "--state-branch" option
 still attempted to rewrite the commits whose filtered result is
 known from the previous attempt (which is recorded on the state
 branch); the command has been corrected not to waste cycles doing
 so.


* ms/core-icase-doc (2018-06-28) 1 commit
  (merged to 'next' on 2018-07-11 at 8f0d71c32d)
 + Documentation: declare "core.ignoreCase" as internal variable

 Clarify that setting core.ignoreCase to deviate from reality would
 not turn a case-incapable filesystem into a case-capable one.


* pw/rebase-i-keep-reword-after-conflict (2018-06-19) 1 commit
  (merged to 'next' on 2018-06-29 at 538337be74)
 + sequencer: do not squash 'reword' commits when we hit conflicts

 Bugfix for "rebase -i" corner case regression.


* sb/mailmap (2018-06-29) 1 commit
  (merged to 'next' on 2018-07-11 at d9dc53e374)
 + .mailmap: merge different spellings of names

 Will merge to 'master'.


* sb/object-store-grafts (2018-05-18) 19 commits
  (merged to 'next' on 2018-06-28 at 02f70d6302)
 + commit: allow lookup_commit_graft to handle arbitrary repositories
 + commit: allow prepare_commit_graft to handle arbitrary repositories
 + shallow: migrate shallow information into the object parser
 + path.c: migrate global git_path_* to take a repository argument
 + cache: convert get_graft_file to handle arbitrary repositories
 + commit: convert read_graft_file to handle arbitrary repositories
 + commit: convert register_commit_graft to handle arbitrary repositories
 + commit: convert commit_graft_pos() to handle arbitrary repositories
 + shallow: add repository argument to is_repository_shallow
 + shallow: add repository argument to check_shallow_file_for_update
 + shallow: add repository argument to register_shallow
 + shallow: add repository argument to set_alternate_shallow_file
 + commit: add repository argument to lookup_commit_graft
 + commit: add repository argument to prepare_commit_graft
 + commit: add repository argument to read_graft_file
 + commit: add repository argument to register_commit_graft
 + commit: add repository argument to commit_graft_pos
 + object: move grafts to object parser
 + object-store: move object access functions to object-store.h
 (this branch is used by jt/commit-graph-per-object-store and sb/object-store-lookup.)

 Originally merged to 'next' on 2018-06-22

 The conversion to pass "the_repository" and then "a_repository"
 throughout the object access API continues.


* sb/submodule-core-worktree (2018-06-19) 3 commits
  (merged to 'next' on 2018-06-28 at 96e1a8dbd1)
 + submodule deinit: unset core.worktree
 + submodule: ensure core.worktree is set after update
 + submodule: unset core.worktree if no working tree is present

 Originally merged to 'next' on 2018-06-22

 "git submodule" did not correctly adjust core.worktree setting that
 indicates whether/where a submodule repository has its associated
 working tree across various state transitions, which has been
 corrected.


* tb/grep-column (2018-06-22) 7 commits
  (merged to 'next' on 2018-06-29 at 25dc70426e)
 + contrib/git-jump/git-jump: jump to exact location
 + grep.c: add configuration variables to show matched option
 + builtin/grep.c: add '--column' option to 'git-grep(1)'
 + grep.c: display column number of first match
 + grep.[ch]: extend grep_opt to allow showing matched column
 + grep.c: expose {,inverted} match column in match_line()
 + Documentation/config.txt: camel-case lineNumber for consistency
 (this branch is used by tb/grep-only-matching.)

 "git grep" learned the "--column" option that gives not just the
 line number but the column number of the hit.


* tz/exclude-doc-smallfixes (2018-06-27) 2 commits
  (merged to 'next' on 2018-07-11 at 5134f1ca72)
 + dir.c: fix typos in core.excludesfile comment
 + gitignore.txt: clarify default core.excludesfile path

 Doc updates.


* vs/typofixes (2018-06-22) 1 commit
  (merged to 'next' on 2018-06-29 at 665c8db2f7)
 + Documentation: spelling and grammar fixes

 Doc fix.


* xy/format-patch-prereq-patch-id-fix (2018-06-19) 1 commit
  (merged to 'next' on 2018-06-29 at 0dffc46ce2)
 + format-patch: clear UNINTERESTING flag before prepare_bases

 Recently added "--base" option to "git format-patch" command did
 not correctly generate prereq patch ids.

--------------------------------------------------
[New Topics]

* am/sequencer-author-script-fix (2018-07-18) 1 commit
 - sequencer.c: terminate the last line of author-script properly

 The author-script that records the author information created by
 the sequencer machinery lacked the closing single quote on the last
 entry.

 Fixing this alone may or may not break the reader that may have
 been compensating for this bogus writer.  I think I saw another fix
 to the same source file posted today---if we are fixing, we should
 fix them all at the same time to keep the reader and the writer in
 sync.


* bc/sequencer-export-work-tree-as-well (2018-07-16) 1 commit
 - sequencer: pass absolute GIT_WORK_TREE to exec commands

 "git rebase" started exporting GIT_DIR environment variable and
 exposing it to hook scripts when part of it got rewritten in C.
 Instead of matching the old scripted Porcelains' behaviour,
 compensate by also exporting GIT_WORK_TREE environment as well to
 lessen the damage.  This can harm existing hooks that want to
 operate on different repository, but the current behaviour is
 already broken for them anyway.

 Will merge to 'next'.


* bp/test-drop-caches-for-windows (2018-07-12) 1 commit
 - handle lower case drive letters on Windows

 A test helper update for Windows.

 Will merge to 'next'.


* en/abort-df-conflict-fixes (2018-07-16) 2 commits
 - read-cache: fix directory/file conflict handling in read_index_unmerged()
 - t1015: demonstrate directory/file conflict recovery failures

 "git merge --abort" etc. did not clean things up properly when
 there were conflicted entries in certain order that are involved
 in D/F conflicts.  This has been corrected.

 This may have to be rebased on an older maintenance track before
 moving forward.


* es/chain-lint-in-subshell (2018-07-17) 10 commits
 - t/chainlint: add chainlint "specialized" test cases
 - t/chainlint: add chainlint "complex" test cases
 - t/chainlint: add chainlint "cuddled" test cases
 - t/chainlint: add chainlint "loop" and "conditional" test cases
 - t/chainlint: add chainlint "nested subshell" test cases
 - t/chainlint: add chainlint "one-liner" test cases
 - t/chainlint: add chainlint "whitespace" test cases
 - t/chainlint: add chainlint "basic" test cases
 - t/Makefile: add machinery to check correctness of chainlint.sed
 - t/test-lib: teach --chain-lint to detect broken &&-chains in subshells
 (this branch uses es/test-fixes.)

 Look for broken "&&" chains that are hidden in subshell, many of
 which have been found and corrected.

 Will merge to 'next'.


* es/test-lint-one-shot-export (2018-07-16) 5 commits
  (merged to 'next' on 2018-07-18 at 26a6124963)
 + t/check-non-portable-shell: detect "FOO=bar shell_func"
 + t/check-non-portable-shell: make error messages more compact
 + t/check-non-portable-shell: stop being so polite
 + t6046/t9833: fix use of "VAR=VAL cmd" with a shell function
 + Merge branch 'jc/t3404-one-shot-export-fix' into es/test-lint-one-shot-export
 (this branch uses jc/t3404-one-shot-export-fix.)

 Look for broken use of "vAR=VAL shell_func" in test scripts as part
 of test-lint.

 Will merge to 'master'.


* hs/gpgsm (2018-07-18) 7 commits
 - gpg-interface t: extend the existing GPG tests with GPGSM
 - gpg-interface: introduce new signature format "x509" using gpgsm
 - gpg-interface: introduce new config to select per gpg format program
 - gpg-interface: do not hardcode the key string len anymore
 - gpg-interface: introduce an abstraction for multiple gpg formats
 - t/t7510: check the validation of the new config gpg.format
 - gpg-interface: add new config to select how to sign a commit
 (this branch uses hs/push-cert-check-cleanup.)

 Teach "git tag -s" etc. a few configuration varaibles (gpg.format
 that can be set to "openpgp" or "x509", and gpg.<format>.program
 that is used to specify what program to use to deal with the format)
 to allow x.509 certs with CMS via "gpgsm" to be used instead of
 openpgp via "gnupg".

 I think this round is mostly ready, except for a minor nit in the
 last step.  I do not mind merging this to 'next' and leave fixing
 of the test to a later clean-up.


* jc/t3404-one-shot-export-fix (2018-07-12) 1 commit
  (merged to 'next' on 2018-07-18 at e15a79dca7)
 + t3404: fix use of "VAR=VAL cmd" with a shell function
 (this branch is used by es/test-lint-one-shot-export.)

 Correct a broken use of "VAR=VAL shell_func" in a test.

 Will merge to 'master'.


* jk/has-uncommitted-changes-fix (2018-07-11) 1 commit
 - has_uncommitted_changes(): fall back to empty tree

 "git pull --rebase" on a corrupt HEAD caused a segfault.  In
 general we substitute an empty tree object when running the in-core
 equivalent of the diff-index command, and the codepath has been
 corrected to do so as well to fix this issue.

 Will merge to 'next'.


* jm/send-email-tls-auth-on-batch (2018-07-16) 1 commit
 - send-email: fix tls AUTH when sending batch

 "git send-email" when using in a batched mode that limits the
 number of messages sent in a single SMTP session lost the contents
 of the variable used to choose between tls/ssl, unable to send the
 second and later batches, which has been fixed.

 Will merge to 'next'.

 This is marked to be merged to 'next' already, but I do not mind
 getting an updated version with an improved log message before that
 happens.


* jn/gc-auto (2018-07-17) 3 commits
 - gc: do not return error for prior errors in daemonized mode
 - gc: exit with status 128 on failure
 - gc: improve handling of errors reading gc.log

 "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.

 Under discussion.
 cf. <20180717201348.GD26218@sigill.intra.peff.net>


* js/rebase-merge-octopus (2018-07-11) 3 commits
 - rebase --rebase-merges: adjust man page for octopus support
 - rebase --rebase-merges: add support for octopus merges
 - merge: allow reading the merge commit message from a file

 "git rebase --rebase-merges" mode now handles octopus merges as
 well.

 Will merge to 'next'.


* jt/fetch-negotiator-skipping (2018-07-16) 1 commit
 - negotiator/skipping: skip commits during fetch
 (this branch uses jt/fetch-pack-negotiator; is tangled with jt/fetch-nego-tip.)

 Add a server-side knob to skip commits in exponential/fibbonacci
 stride in an attempt to cover wider swath of history with a smaller
 number of iterations, potentially accepting a larger packfile
 transfer, instead of going back one commit a time during common
 ancestor discovery during the "git fetch" transaction.

 Will merge to 'next'.


* jt/tags-to-promised-blobs-fix (2018-07-16) 2 commits
 - tag: don't warn if target is missing but promised
 - revision: tolerate promised targets of tags
 (this branch uses bw/ref-in-want, jt/connectivity-check-after-unshallow and jt/partial-clone-fsck-connectivity.)

 The lazy clone support had a few places where missing but promised
 objects were not correctly tolerated, which have been fixed.

 Will merge to 'next'.


* nd/command-list (2018-07-16) 1 commit
  (merged to 'next' on 2018-07-18 at 77ed2a3914)
 + vcbuild/README: update to accommodate for missing common-cmds.h

 Build doc update for Windows.

 Will merge to 'master'.


* sb/blame-color (2018-07-16) 1 commit
  (merged to 'next' on 2018-07-18 at c319268502)
 + blame: prefer xsnprintf to strcpy for colors

 Code clean-up.

 Will merge to 'master'.


* sb/submodule-update-in-c (2018-07-17) 6 commits
 - submodule--helper: introduce new update-module-mode helper
 - builtin/submodule--helper: factor out method to update a single submodule
 - builtin/submodule--helper: store update_clone information in a struct
 - builtin/submodule--helper: factor out submodule updating
 - git-submodule.sh: rename unused variables
 - git-submodule.sh: align error reporting for update mode to use path

 "git submodule update" is getting rewritten piece-by-piece into C.

 It seems to pass its own self-tests standalone, but seems to break
 horribly when merged to 'pu'.


* sg/httpd-test-unflake (2018-07-12) 3 commits
 - t/lib-httpd: avoid occasional failures when checking access.log
 - t/lib-httpd: add the strip_access_log() helper function
 - t5541: clean up truncating access log

 httpd tests saw occasional breakage due to the way its access log
 gets inspected by the tests, which has been updated to make them
 less flaky.

 Will merge to 'next'.


* sl/commit-dry-run-with-short-output-fix (2018-07-17) 3 commits
 - commit: fix exit code for --short/--porcelain
 - wt-status: teach wt_status_collect about merges in progress
 - t7501: add merge conflict tests for dry run

 Under discussion.
 cf. <xmqqpnzlpyux.fsf@gitster-ct.c.googlers.com>


* tg/rerere (2018-07-16) 11 commits
 - rerere: recalculate conflict ID when unresolved conflict is committed
 - rerere: teach rerere to handle nested conflicts
 - rerere: return strbuf from handle path
 - rerere: factor out handle_conflict function
 - rerere: only return whether a path has conflicts or not
 - rerere: fix crash when conflict goes unresolved
 - rerere: add documentation for conflict normalization
 - rerere: mark strings for translation
 - rerere: wrap paths in output in sq
 - rerere: lowercase error messages
 - rerere: unify error messages when read_cache fails


* wc/find-commit-with-pattern-on-detached-head (2018-07-12) 1 commit
  (merged to 'next' on 2018-07-18 at 334d2420c0)
 + sha1-name.c: for ":/", find detached HEAD commits

 "git rev-parse ':/substring'" did not consider the history leading
 only to HEAD when looking for a commit with the given substring,
 when the HEAD is detached.  This has been fixed.

 Will merge to 'master'.


* jk/ui-color-always-to-auto (2018-07-18) 1 commit
 - Documentation: fix --color option formatting

--------------------------------------------------
[Stalled]

* pw/add-p-select (2018-03-16) 3 commits
 - add -p: optimize line selection for short hunks
 - add -p: allow line selection to be inverted
 - add -p: select individual hunk lines

 "git add -p" interactive interface learned to let users choose
 individual added/removed lines to be used in the operation, instead
 of accepting or rejecting a whole hunk.

 Expecting a reroll to reignite the discussion.
 cf. <9895c7b7-eac4-28c1-90c6-443acd1131b7@talktalk.net>


* hn/bisect-first-parent (2018-04-21) 1 commit
 - bisect: create 'bisect_flags' parameter in find_bisection()

 Preliminary code update to allow passing more flags down the
 bisection codepath in the future.

 We do not add random code that does not have real users to our
 codebase, so let's have it wait until such a real code materializes
 before too long.


* av/fsmonitor-updates (2018-01-04) 6 commits
 - fsmonitor: use fsmonitor data in `git diff`
 - fsmonitor: remove debugging lines from t/t7519-status-fsmonitor.sh
 - fsmonitor: make output of test-dump-fsmonitor more concise
 - fsmonitor: update helper tool, now that flags are filled later
 - fsmonitor: stop inline'ing mark_fsmonitor_valid / _invalid
 - dir.c: update comments to match argument name

 Code clean-up on fsmonitor integration, plus optional utilization
 of the fsmonitor data in diff-files.

 Waiting for an update.
 cf. <alpine.DEB.2.21.1.1801042335130.32@MININT-6BKU6QN.europe.corp.microsoft.com>


* pb/bisect-helper-2 (2018-06-13) 8 commits
 - t6030: make various test to pass GETTEXT_POISON tests
 - bisect--helper: `bisect_start` shell function partially in C
 - bisect--helper: `get_terms` & `bisect_terms` shell function in C
 - bisect--helper: `bisect_next_check` shell function in C
 - bisect--helper: `check_and_set_terms` shell function in C
 - wrapper: move is_empty_file() and rename it as is_empty_or_missing_file()
 - bisect--helper: `bisect_write` shell function in C
 - bisect--helper: `bisect_reset` shell function in C

 Expecting a reroll.
 cf. <0102015f5e5ee171-f30f4868-886f-47a1-a4e4-b4936afc545d-000000@eu-west-1.amazonses.com>

 I just rebased the topic to a newer base as it did not build
 standalone with the base I originally queued the topic on, but
 otherwise there is no update to address any of the review comments
 in the thread above---we are still waiting for a reroll.


* mk/http-backend-content-length (2018-06-11) 3 commits
 - http-backend: respect CONTENT_LENGTH for receive-pack
 - http-backend: respect CONTENT_LENGTH as specified by rfc3875
 - http-backend: cleanup writing to child process

 The http-backend (used for smart-http transport) used to slurp the
 whole input until EOF, without paying attention to CONTENT_LENGTH
 that is supplied in the environment and instead expecting the Web
 server to close the input stream.  This has been fixed.


* jk/drop-ancient-curl (2017-08-09) 5 commits
 - http: #error on too-old curl
 - curl: remove ifdef'd code never used with curl >=7.19.4
 - http: drop support for curl < 7.19.4
 - http: drop support for curl < 7.16.0
 - http: drop support for curl < 7.11.1

 Some code in http.c that has bitrot is being removed.

 Expecting a reroll.


* mk/use-size-t-in-zlib (2017-08-10) 1 commit
 . zlib.c: use size_t for size

 The wrapper to call into zlib followed our long tradition to use
 "unsigned long" for sizes of regions in memory, which have been
 updated to use "size_t".

 Needs resurrecting by making sure the fix is good and still applies
 (or adjusted to today's codebase).

--------------------------------------------------
[Cooking]

* jh/json-writer (2018-07-16) 1 commit
 - json_writer: new routines to create JSON data

 Preparatory code to later add json output for telemetry data.

 A series on top that adds telemetry data exists but hasn't been
 picked up yet.


* ag/rebase-i-in-c (2018-07-10) 13 commits
 - rebase -i: rewrite the rest of init_revisions_and_shortrevisions in C
 - rebase -i: implement the logic to initialize the variable $revision in C
 - rebase--interactive: remove unused modes and functions
 - rebase--interactive: rewrite complete_action() in C
 - sequencer: change the way skip_unnecessary_picks() returns its result
 - sequencer: refactor append_todo_help() to write its message to a buffer
 - rebase -i: rewrite checkout_onto() in C
 - rebase -i: rewrite setup_reflog_action() in C
 - sequencer: add a new function to silence a command, except if it fails
 - rebase-interactive: rewrite the edit-todo functionality in C
 - editor: add a function to launch the sequence editor
 - rebase--interactive: rewrite append_todo_help() in C
 - sequencer: make two functions and an enum from sequencer.c public

 Piecemeal rewrite of the remaining "rebase -i" machinery in C.

 Expecting a reroll.

 The early parts of the series seem solidifying; perhaps with a
 reroll or two, they become 'next' material?


* en/apply-comment-fix (2018-06-28) 1 commit
  (merged to 'next' on 2018-07-18 at 31d818f17d)
 + apply: fix grammar error in comment

 Will merge to 'master'.


* en/t5407-rebase-m-fix (2018-06-28) 1 commit
  (merged to 'next' on 2018-07-18 at 459875daeb)
 + t5407: fix test to cover intended arguments

 Will merge to 'master'.


* sb/object-store-lookup (2018-06-29) 33 commits
 - commit.c: allow lookup_commit_reference to handle arbitrary repositories
 - commit.c: allow lookup_commit_reference_gently to handle arbitrary repositories
 - tag.c: allow deref_tag to handle arbitrary repositories
 - object.c: allow parse_object to handle arbitrary repositories
 - object.c: allow parse_object_buffer to handle arbitrary repositories
 - commit.c: allow get_cached_commit_buffer to handle arbitrary repositories
 - commit.c: allow set_commit_buffer to handle arbitrary repositories
 - commit.c: migrate the commit buffer to the parsed object store
 - commit-slabs: remove realloc counter outside of slab struct
 - commit.c: allow parse_commit_buffer to handle arbitrary repositories
 - tag: allow parse_tag_buffer to handle arbitrary repositories
 - tag: allow lookup_tag to handle arbitrary repositories
 - commit: allow lookup_commit to handle arbitrary repositories
 - tree: allow lookup_tree to handle arbitrary repositories
 - blob: allow lookup_blob to handle arbitrary repositories
 - object: allow lookup_object to handle arbitrary repositories
 - object: allow object_as_type to handle arbitrary repositories
 - tag: add repository argument to deref_tag
 - tag: add repository argument to parse_tag_buffer
 - tag: add repository argument to lookup_tag
 - commit: add repository argument to get_cached_commit_buffer
 - commit: add repository argument to set_commit_buffer
 - commit: add repository argument to parse_commit_buffer
 - commit: add repository argument to lookup_commit
 - commit: add repository argument to lookup_commit_reference
 - commit: add repository argument to lookup_commit_reference_gently
 - tree: add repository argument to lookup_tree
 - blob: add repository argument to lookup_blob
 - object: add repository argument to object_as_type
 - object: add repository argument to parse_object_buffer
 - object: add repository argument to lookup_object
 - object: add repository argument to parse_object
 - Merge branch 'sb/object-store-grafts' into sb/object-store-lookup
 (this branch is used by jt/commit-graph-per-object-store.)

 lookup_commit_reference() and friends have been updated to find
 in-core object for a specific in-core repository instance.

 Will merge to 'next'.


* ag/rebase-p (2018-07-06) 1 commit
  (merged to 'next' on 2018-07-18 at c36ebba99b)
 + git-rebase--preserve-merges: fix formatting of todo help message

 The help message shown in the editor to edit todo list in "rebase -p"
 has regressed recently, which has been corrected.

 Will merge to 'master'.


* bb/pedantic (2018-07-09) 8 commits
  (merged to 'next' on 2018-07-18 at e9d075e8ed)
 + utf8.c: avoid char overflow
 + string-list.c: avoid conversion from void * to function pointer
 + sequencer.c: avoid empty statements at top level
 + convert.c: replace "\e" escapes with "\033".
 + fixup! refs/refs-internal.h: avoid forward declaration of an enum
 + refs/refs-internal.h: avoid forward declaration of an enum
 + fixup! connect.h: avoid forward declaration of an enum
 + connect.h: avoid forward declaration of an enum

 The codebase has been updated to compile cleanly with -pedantic
 option.

 Will merge to 'master'.


* bb/unicode-11-width (2018-07-09) 1 commit
  (merged to 'next' on 2018-07-18 at 075648ed37)
 + unicode: update the width tables to Unicode 11

 The character display width table has been updated to match the
 latest Unicode standard.

 Will merge to 'master'.


* bc/object-id (2018-07-16) 16 commits
 - pretty: switch hard-coded constants to the_hash_algo
 - sha1-file: convert constants to uses of the_hash_algo
 - log-tree: switch GIT_SHA1_HEXSZ to the_hash_algo->hexsz
 - diff: switch GIT_SHA1_HEXSZ to use the_hash_algo
 - builtin/merge-recursive: make hash independent
 - builtin/merge: switch to use the_hash_algo
 - builtin/fmt-merge-msg: make hash independent
 - builtin/update-index: simplify parsing of cacheinfo
 - builtin/update-index: convert to using the_hash_algo
 - refs/files-backend: use the_hash_algo for writing refs
 - sha1-name: use the_hash_algo when parsing object names
 - strbuf: allocate space with GIT_MAX_HEXSZ
 - commit: express tree entry constants in terms of the_hash_algo
 - hex: switch to using the_hash_algo
 - tree-walk: replace hard-coded constants with the_hash_algo
 - cache: update object ID functions for the_hash_algo

 Conversion from uchar[40] to struct object_id continues.

 Will merge to 'next'.


* bc/send-email-auto-cte (2018-07-09) 4 commits
  (merged to 'next' on 2018-07-18 at d16c2a301a)
 + docs: correct RFC specifying email line length
 + send-email: automatically determine transfer-encoding
 + send-email: accept long lines with suitable transfer encoding
 + send-email: add an auto option for transfer encoding

 The content-transfer-encoding of the message "git send-email" sends
 out by default was 8bit, which can cause trouble when there is an
 overlong line to bust RFC 5322/2822 limit.  A new option 'auto' to
 automatically switch to quoted-printable when there is such a line
 in the payload has been introduced and is made the default.

 Will merge to 'master'.


* en/dirty-merge-fixes (2018-07-11) 9 commits
 - merge: fix misleading pre-merge check documentation
 - merge-recursive: enforce rule that index matches head before merging
 - t6044: add more testcases with staged changes before a merge is invoked
 - merge-recursive: fix assumption that head tree being merged is HEAD
 - merge-recursive: make sure when we say we abort that we actually abort
 - t6044: add a testcase for index matching head, when head doesn't match HEAD
 - t6044: verify that merges expected to abort actually abort
 - index_has_changes(): avoid assuming operating on the_index
 - read-cache.c: move index_has_changes() from merge.c

 The recursive merge strategy did not properly ensure there was no
 change between HEAD and the index before performing its operation,
 which has been corrected.

 Will merge to 'next'.


* en/t6036-merge-recursive-tests (2018-07-11) 6 commits
 - t6036: add a failed conflict detection case: regular files, different modes
 - t6036: add a failed conflict detection case with conflicting types
 - t6036: add a failed conflict detection case with submodule add/add
 - t6036: add a failed conflict detection case with submodule modify/modify
 - t6036: add a failed conflict detection case with symlink add/add
 - t6036: add a failed conflict detection case with symlink modify/modify

 Tests to cover various conflicting cases have been added for
 merge-recursive.

 Will merge to 'next'.


* en/t6036-recursive-corner-cases (2018-07-12) 2 commits
 - t6036: fix broken && chain in sub-shell
 - t6036: add lots of detail for directory/file conflicts in recursive case

 Tests to cover more D/F conflict cases have been added for
 merge-recursive.

 Will merge to 'next'.


* en/t6042-insane-merge-rename-testcases (2018-07-03) 3 commits
 - t6042: add testcase covering long chains of rename conflicts
 - t6042: add testcase covering rename/rename(2to1)/delete/delete conflict
 - t6042: add testcase covering rename/add/delete conflict type

 Various glitches in the heuristics of merge-recursive strategy have
 been documented in new tests.

 Will merge to 'next'.

 I am not sure if there is a single "correct" answer everybody can
 agree on for each of these "insane" cases, though.


* en/t7405-recursive-submodule-conflicts (2018-07-11) 3 commits
 - t7405: verify 'merge --abort' works after submodule/path conflicts
 - t7405: add a directory/submodule conflict
 - t7405: add a file/submodule conflict

 Tests to cover conflict cases that involve submodules have been
 added for merge-recursive.

 Will merge to 'next'.


* es/test-fixes (2018-07-17) 26 commits
 - t5608: fix broken &&-chain
 - t9119: fix broken &&-chains
 - t9000-t9999: fix broken &&-chains
 - t7000-t7999: fix broken &&-chains
 - t6000-t6999: fix broken &&-chains
 - t5000-t5999: fix broken &&-chains
 - t4000-t4999: fix broken &&-chains
 - t3030: fix broken &&-chains
 - t3000-t3999: fix broken &&-chains
 - t2000-t2999: fix broken &&-chains
 - t1000-t1999: fix broken &&-chains
 - t0000-t0999: fix broken &&-chains
 - t9814: simplify convoluted check that command correctly errors out
 - t9001: fix broken "invoke hook" test
 - t7810: use test_expect_code() instead of hand-rolled comparison
 - t7400: fix broken "submodule add/reconfigure --force" test
 - t7201: drop pointless "exit 0" at end of subshell
 - t6036: fix broken "merge fails but has appropriate contents" tests
 - t5505: modernize and simplify hard-to-digest test
 - t5406: use write_script() instead of birthing shell script manually
 - t5405: use test_must_fail() instead of checking exit code manually
 - t/lib-submodule-update: fix "absorbing" test
 - t: drop unnecessary terminating semicolon in subshell
 - t: use sane_unset() rather than 'unset' with broken &&-chain
 - t: use test_write_lines() instead of series of 'echo' commands
 - t: use test_might_fail() instead of manipulating exit code manually
 (this branch is used by es/chain-lint-in-subshell.)

 Test clean-up and corrections.

 Will merge to 'next'.


* jk/empty-pick-fix (2018-07-11) 2 commits
  (merged to 'next' on 2018-07-18 at 43bfa862f2)
 + sequencer: don't say BUG on bogus input
 + sequencer: handle empty-set cases consistently

 Handling of an empty range by "git cherry-pick" was inconsistent
 depending on how the range ended up to be empty, which has been
 corrected.

 Will merge to 'master'.


* jk/fetch-all-peeled-fix (2018-07-06) 1 commit
  (merged to 'next' on 2018-07-18 at d06c6f1665)
 + t5500: prettify non-commit tag tests

 Test modernization.

 Will merge to 'master'.


* jk/for-each-ref-icase (2018-07-03) 3 commits
  (merged to 'next' on 2018-07-18 at 4c86d62adb)
 + ref-filter: avoid backend filtering with --ignore-case
 + for-each-ref: consistently pass WM_IGNORECASE flag
 + t6300: add a test for --ignore-case

 The "--ignore-case" option of "git for-each-ref" (and its friends)
 did not work correctly, which has been fixed.

 Will merge to 'master'.


* jk/fsck-gitmodules-gently (2018-07-16) 6 commits
 - fsck: downgrade gitmodulesParse default to "info"
 - fsck: split ".gitmodules too large" error from parse failure
 - fsck: silence stderr when parsing .gitmodules
 - config: add options parameter to git_config_from_mem
 - config: add CONFIG_ERROR_SILENT handler
 - config: turn die_on_error into caller-facing enum

 Recent "security fix" to pay attention to contents of ".gitmodules"
 while accepting "git push" was a bit overly strict than necessary,
 which has been adjusted.

 Will merge to 'next'.


* js/range-diff (2018-07-09) 20 commits
 - range-diff: make --dual-color the default mode
 - range-diff: left-pad patch numbers
 - completion: support `git range-diff`
 - range-diff: add a man page
 - range-diff --dual-color: work around bogus white-space warning
 - range-diff: offer to dual-color the diffs
 - diff: add an internal option to dual-color diffs of diffs
 - color: add the meta color GIT_COLOR_REVERSE
 - range-diff: use color for the commit pairs
 - range-diff: add tests
 - range-diff: do not show "function names" in hunk headers
 - range-diff: adjust the output of the commit pairs
 - range-diff: suppress the diff headers
 - range-diff: indent the diffs just like tbdiff
 - range-diff: right-trim commit messages
 - range-diff: also show the diff between patches
 - range-diff: improve the order of the shown commits
 - range-diff: first rudimentary implementation
 - Introduce `range-diff` to compare iterations of a topic branch
 - linear-assignment: a function to solve least-cost assignment problems

 "git tbdiff" that lets us compare individual patches in two
 iterations of a topic has been rewritten and made into a built-in
 command.

 Supersedes js/branch-diff topic that added a similar command under
 a different name.


* jt/commit-graph-per-object-store (2018-07-17) 7 commits
 - commit-graph: add repo arg to graph readers
 - commit-graph: store graph in struct object_store
 - commit-graph: add free_commit_graph
 - commit-graph: add missing forward declaration
 - object-store: add missing include
 - commit-graph: refactor preparing commit graph
 - Merge branch 'ds/commit-graph-fsck' into jt/commit-graph-per-object-store
 (this branch uses ds/commit-graph-fsck and sb/object-store-lookup.)

 The singleton commit-graph in-core instance is made per in-core
 repository instance.

 Will merge to 'next'.


* jt/partial-clone-fsck-connectivity (2018-07-09) 2 commits
  (merged to 'next' on 2018-07-18 at 968fd9c9f0)
 + clone: check connectivity even if clone is partial
 + upload-pack: send refs' objects despite "filter"
 (this branch is used by jt/tags-to-promised-blobs-fix; uses bw/ref-in-want and jt/connectivity-check-after-unshallow.)

 Partial clone support of "git clone" has been updated to correctly
 validate the objects it receives from the other side.  The server
 side has been corrected to send objects that are directly
 requested, even if they may match the filtering criteria (e.g. when
 doing a "lazy blob" partial clone).

 Will merge to 'master'.


* kg/gc-auto-windows-workaround (2018-07-09) 1 commit
 - gc --auto: release pack files before auto packing

 "git gc --auto" opens file descriptors for the packfiles before
 spawning "git repack/prune", which would upset Windows that does
 not want a process to work on a file that is open by another
 process.  The issue has been worked around.

 Will merge to 'next'.


* kn/userdiff-php (2018-07-06) 2 commits
  (merged to 'next' on 2018-07-18 at 9a533dc33a)
 + userdiff: support new keywords in PHP hunk header
 + t4018: add missing test cases for PHP

 The userdiff pattern for .php has been updated.

 Will merge to 'master'.


* lt/date-human (2018-07-09) 1 commit
 - Add 'human' date format


* mh/fast-import-no-diff-delta-empty (2018-07-06) 1 commit
  (merged to 'next' on 2018-07-18 at eb393871f4)
 + fast-import: do not call diff_delta() with empty buffer

 "git fast-import" has been updated to avoid attempting to create
 delta against a zero-byte-long string, which is pointless.

 Will merge to 'master'.


* ot/ref-filter-object-info (2018-07-17) 5 commits
 - ref-filter: use oid_object_info() to get object
 - ref-filter: merge get_obj and get_object
 - ref-filter: initialize eaten variable
 - ref-filter: fill empty fields with empty values
 - ref-filter: add info_source to valid_atom

 A few atoms like %(objecttype) and %(objectsize) in the format
 specifier of "for-each-ref --format=<format>" can be filled without
 getting the full contents of the object, but just with the object
 header.  These cases have been optimzied by calling
 oid_object_info() API.

 What's the doneness of this one?


* pk/rebase-in-c (2018-07-09) 4 commits
 - builtin/rebase: support running "git rebase <upstream>"
 - sequencer: refactor the code to detach HEAD to checkout.c
 - rebase: refactor common shell functions into their own file
 - rebase: start implementing it as a builtin

 Piecemeal rewrite of the "rebase" machinery in C.

 Expecting a reroll, but it seems that this is getting quite close.
 cf. <CAOZc8M8YmLwJOzG-1jyz8ft4W_tJMwNs6kSV8inX1q_zmDW8Sg@mail.gmail.com>


* tb/config-default (2018-07-06) 1 commit
  (merged to 'next' on 2018-07-18 at 7994476f6f)
 + builtin/config: work around an unsized array forward declaration

 Compilation fix.

 Will merge to 'master'.


* bp/log-ref-write-fd-with-strbuf (2018-07-10) 1 commit
  (merged to 'next' on 2018-07-18 at 25a3a99528)
 + convert log_ref_write_fd() to use strbuf

 Code clean-up.

 Will merge to 'master'.


* hs/push-cert-check-cleanup (2018-07-11) 2 commits
  (merged to 'next' on 2018-07-18 at 1ed25fbd77)
 + gpg-interface: make parse_gpg_output static and remove from interface header
 + builtin/receive-pack: use check_signature from gpg-interface
 (this branch is used by hs/gpgsm.)

 Code clean-up.

 Will merge to 'master'.


* mk/merge-in-sparse-checkout (2018-07-11) 1 commit
  (merged to 'next' on 2018-07-18 at d2a6d2684d)
 + unpack-trees: do not fail reset because of unmerged skipped entry

 "git reset --merge" (hence "git merge ---abort") and "git reset --hard"
 had trouble working correctly in a sparsely checked out working
 tree after a conflict, which has been corrected.

 Will merge to 'master'.


* as/sequencer-customizable-comment-char (2018-07-16) 1 commit
  (merged to 'next' on 2018-07-18 at 4163e23f29)
 + sequencer: use configured comment character

 Honor core.commentchar when preparing the list of commits to replay
 in "rebase -i".

 Will merge to 'master'.


* jt/connectivity-check-after-unshallow (2018-07-03) 1 commit
  (merged to 'next' on 2018-07-18 at 8e7ee889c3)
 + fetch-pack: write shallow, then check connectivity
 (this branch is used by jt/partial-clone-fsck-connectivity and jt/tags-to-promised-blobs-fix; uses bw/ref-in-want.)

 "git fetch" failed to correctly validate the set of objects it
 received when making a shallow history deeper, which has been
 corrected.

 Will merge to 'master'.


* jt/fetch-nego-tip (2018-07-03) 1 commit
 - fetch-pack: support negotiation tip whitelist
 (this branch uses jt/fetch-pack-negotiator; is tangled with jt/fetch-negotiator-skipping.)

 "git fetch" learned a new option "--negotiation-tip" to limit the
 set of commits it tells the other end as "have", to reduce wasted
 bandwidth and cycles, which would be helpful when the receiving
 repository has a lot of refs that have little to do with the
 history at the remote it is fetching from.

 Will merge to 'next'.


* rj/submodule-fsck-skip (2018-07-03) 1 commit
  (merged to 'next' on 2018-07-11 at 985f88cf7e)
 + fsck: check skiplist for object in fsck_blob()

 "fsck.skipList" did not prevent a blob object listed there from
 being inspected for is contents (e.g. we recently started to
 inspect the contents of ".gitmodules" for certain malicious
 patterns), which has been corrected.

 Will merge to 'master'.


* tb/grep-only-matching (2018-07-09) 2 commits
 - grep.c: teach 'git grep --only-matching'
 - grep.c: extract show_line_header()

 "git grep" learned the "--only-matching" option.

 Will merge to 'next'.


* bw/ref-in-want (2018-06-28) 8 commits
  (merged to 'next' on 2018-07-18 at 7e9f8db37c)
 + fetch-pack: implement ref-in-want
 + fetch-pack: put shallow info in output parameter
 + fetch: refactor to make function args narrower
 + fetch: refactor fetch_refs into two functions
 + fetch: refactor the population of peer ref OIDs
 + upload-pack: test negotiation with changing repository
 + upload-pack: implement ref-in-want
 + test-pkt-line: add unpack-sideband subcommand
 (this branch is used by jt/connectivity-check-after-unshallow, jt/partial-clone-fsck-connectivity and jt/tags-to-promised-blobs-fix.)

 Protocol v2 has been updated to allow slightly out-of-sync set of
 servers to work together to serve a single client, which would be
 useful with load-balanced servers that talk smart HTTP transport.

 Will merge to 'master'.


* en/rebase-consistency (2018-06-27) 9 commits
  (merged to 'next' on 2018-07-18 at d597206c79)
 + git-rebase: make --allow-empty-message the default
 + t3401: add directory rename testcases for rebase and am
 + git-rebase.txt: document behavioral differences between modes
 + directory-rename-detection.txt: technical docs on abilities and limitations
 + git-rebase.txt: address confusion between --no-ff vs --force-rebase
 + git-rebase: error out when incompatible options passed
 + t3422: new testcases for checking when incompatible options passed
 + git-rebase.sh: update help messages a bit
 + git-rebase.txt: document incompatible options

 "git rebase" behaved slightly differently depending on which one of
 the three backends gets used; this has been documented and an
 effort to make them more uniform has begun.

 Will merge to 'master'.


* sb/submodule-move-head-error-msg (2018-06-25) 1 commit
  (merged to 'next' on 2018-07-18 at 9e213ad1aa)
 + submodule.c: report the submodule that an error occurs in

 Will merge to 'master'.


* jk/branch-l-1-repurpose (2018-06-22) 1 commit
 - branch: make "-l" a synonym for "--list"

 Updated plan to repurpose the "-l" option to "git branch".

 Will hold in 'pu' until jk/branch-l-0-deprecation progresses sufficiently.


* cc/remote-odb (2018-07-16) 9 commits
 - Documentation/config: add odb.<name>.promisorRemote
 - t0410: test fetching from many promisor remotes
 - Use odb.origin.partialclonefilter instead of core.partialclonefilter
 - Use remote_odb_get_direct() and has_remote_odb()
 - remote-odb: add remote_odb_reinit()
 - remote-odb: implement remote_odb_get_many_direct()
 - remote-odb: implement remote_odb_get_direct()
 - Add initial remote odb support
 - fetch-object: make functions return an error code


* ds/multi-pack-index (2018-07-12) 23 commits
 - midx: clear midx on repack
 - packfile: skip loading index if in multi-pack-index
 - midx: prevent duplicate packfile loads
 - midx: use midx in approximate_object_count
 - midx: use existing midx when writing new one
 - midx: use midx in abbreviation calculations
 - midx: read objects from multi-pack-index
 - config: create core.multiPackIndex setting
 - midx: write object offsets
 - midx: write object id fanout chunk
 - midx: write object ids in a chunk
 - midx: sort and deduplicate objects from packfiles
 - midx: read pack names into array
 - multi-pack-index: write pack names in chunk
 - multi-pack-index: read packfile list
 - packfile: generalize pack directory list
 - t5319: expand test data
 - multi-pack-index: load into memory
 - midx: write header information to lockfile
 - multi-pack-index: add 'write' verb
 - multi-pack-index: add builtin
 - multi-pack-index: add format details
 - multi-pack-index: add design document

 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.

 What's the doneness of this one?  I vaguely recall that there was
 an objection against the concept as a whole (i.e. there is a way
 with less damage to gain the same object-abbrev performance); has
 it (and if anything else, they) been resolved in satisfactory
 fashion?


* jt/fetch-pack-negotiator (2018-06-15) 7 commits
 - fetch-pack: introduce negotiator API
 - fetch-pack: move common check and marking together
 - fetch-pack: make negotiation-related vars local
 - fetch-pack: use ref adv. to prune "have" sent
 - fetch-pack: directly end negotiation if ACK ready
 - fetch-pack: clear marks before re-marking
 - fetch-pack: split up everything_local()
 (this branch is used by jt/fetch-nego-tip and jt/fetch-negotiator-skipping.)

 Code restructuring and a small fix to transport protocol v2 during
 fetching.

 Will merge to 'next'.


* is/parsing-line-range (2018-06-15) 2 commits
 - log: prevent error if line range ends past end of file
 - blame: prevent error if range ends past end of file

 Parsing of -L[<N>][,[<M>]] parameters "git blame" and "git log"
 take has been tweaked.

 Will merge to 'next'.


* ab/checkout-default-remote (2018-06-11) 8 commits
 - checkout & worktree: introduce checkout.defaultRemote
 - checkout: add advice for ambiguous "checkout <branch>"
 - builtin/checkout.c: use "ret" variable for return
 - checkout: pass the "num_matches" up to callers
 - checkout.c: change "unique" member to "num_matches"
 - checkout.c: introduce an *_INIT macro
 - checkout.h: wrap the arguments to unique_tracking_name()
 - checkout tests: index should be clean after dwim checkout

 "git checkout" and "git worktree add" learned to honor
 checkout.defaultRemote when auto-vivifying a local branch out of a
 remote tracking branch in a repository with multiple remotes that
 have tracking branches that share the same names.

 Will merge to 'next'.


* ds/commit-graph-fsck (2018-07-16) 23 commits
 - coccinelle: update commit.cocci
 - commit-graph: update design document
 - gc: automatically write commit-graph files
 - commit-graph: add '--reachable' option
 - commit-graph: use string-list API for input
 - fsck: verify commit-graph
 - commit-graph: verify contents match checksum
 - commit-graph: test for corrupted octopus edge
 - commit-graph: verify commit date
 - commit-graph: verify generation number
 - commit-graph: verify parent list
 - commit-graph: verify root tree OIDs
 - commit-graph: verify objects exist
 - commit-graph: verify corrupt OID fanout and lookup
 - commit-graph: verify required chunks are present
 - commit-graph: verify catches corrupt signature
 - commit-graph: add 'verify' subcommand
 - commit-graph: load a root tree from specific graph
 - commit: force commit to parse from object database
 - commit-graph: parse commit from chosen graph
 - commit-graph: fix GRAPH_MIN_SIZE
 - commit-graph: UNLEAK before die()
 - t5318-commit-graph.sh: use core.commitGraph
 (this branch is used by jt/commit-graph-per-object-store.)

 "git fsck" learns to make sure the optional commit-graph file is in
 a sane state.

 Will merge to 'next'.


* ma/wrapped-info (2018-05-28) 2 commits
 - usage: prefix all lines in `vreportf()`, not just the first
 - usage: extract `prefix_suffix_lines()` from `advise()`

 An attempt to help making multi-line messages fed to warning(),
 error(), and friends more easily translatable.

 Will discard and wait for a cleaned-up rewrite.
 cf. <20180529213957.GF7964@sigill.intra.peff.net>


* jm/cache-entry-from-mem-pool (2018-07-03) 8 commits
 - block alloc: add validations around cache_entry lifecyle
 - block alloc: allocate cache entries from mem_pool
 - mem-pool: fill out functionality
 - mem-pool: add life cycle management functions
 - mem-pool: only search head block for available space
 - block alloc: add lifecycle APIs for cache_entry structs
 - read-cache: teach make_cache_entry to take object_id
 - read-cache: teach refresh_cache_entry to take istate

 For a large tree, the index needs to hold many cache entries
 allocated on heap.  These cache entries are now allocated out of a
 dedicated memory pool to amortize malloc(3) overhead.

 Will merge to 'next'.

 This makes each cache-entry larger by either 4 or 8 bytes, which is
 a bit sad, though.


* sb/diff-color-move-more (2018-07-17) 9 commits
 - diff.c: add white space mode to move detection that allows indent changes
 - diff.c: factor advance_or_nullify out of mark_color_as_moved
 - diff.c: decouple white space treatment from move detection algorithm
 - diff.c: add a blocks mode for moved code detection
 - diff.c: adjust hash function signature to match hashmap expectation
 - diff.c: do not pass diff options as keydata to hashmap
 - t4015: avoid git as a pipe input
 - xdiff/xdiffi.c: remove unneeded function declarations
 - xdiff/xdiff.h: remove unused flags

 "git diff --color-moved" feature has further been tweaked.

 Will merge to 'next'.

--------------------------------------------------
[Discarded]

* ag/rebase-i-append-todo-help (2018-06-14) 2 commits
 . rebase--interactive: rewrite append_todo_help() in C
 . Merge branch 'ag/rebase-p' into ag/rebase-i-append-todo-help
 (this branch is used by ag/rebase-i-rewrite-todo.)

 Stepwise rewriting of the machinery of "rebase -i" into C continues.

 Now part of ag/rebase-i-in-c


* ag/rebase-i-rewrite-todo (2018-06-15) 3 commits
 . rebase--interactive: rewrite the edit-todo functionality in C
 . editor: add a function to launch the sequence editor
 . Merge branch 'bc/t3430-fixup' into ag/rebase-i-rewrite-todo
 (this branch uses ag/rebase-i-append-todo-help.)

 Stepwise rewriting of the machinery of "rebase -i" into C continues.

 Now part of ag/rebase-i-in-c


* ab/fetch-tags-noclobber (2018-05-16) 9 commits
 - fixup! push tests: assert re-pushing annotated tags
 - fetch: stop clobbering existing tags without --force
 - fetch tests: add a test clobbering tag behavior
 - fetch tests: correct a comment "remove it" -> "remove them"
 - push doc: correct lies about how push refspecs work
 - push tests: assert re-pushing annotated tags
 - push tests: add more testing for forced tag pushing
 - push tests: fix logic error in "push" test assertion
 - push tests: remove redundant 'git push' invocation

 Discarded per request.
 cf. <87po09cnir.fsf@evledraar.gmail.com>


* nd/use-the-index-compat-less (2018-06-25) 13 commits
 . wt-status.c: stop using index compat macros
 . sha1-name.c: stop using index compat macros
 . sequencer.c: stop using index compat macros
 . revision.c: stop using index compat macros
 . rerere.c: stop using index compat macros
 . merge.c: stop using index compat macros
 . merge-recursive.c: stop using index compat macros
 . entry.c: stop using index compat macros
 . diff.c: stop using index compat macros
 . diff-lib.c: stop using index compat macros
 . check-racy.c: stop using index compat macros
 . blame.c: stop using index compat macros
 . apply.c: stop using index compat macros

 Retracted to be replaced with a more vertical approach where the
 lower-level helper functions are taught to be capable of working on
 an istate instance that is not the_index first, and then upwards to
 support the application layer that wants to work on an arbitrary
 istate instance, as the goal is not a mechanical replacement of
 foo_cache(...) to foo_index(&the_index, ...).


* js/branch-diff (2018-05-16) 19 commits
 . fixup! Add a function to solve least-cost assignment problems
 . completion: support branch-diff
 . branch-diff: add a man page
 . branch-diff --dual-color: work around bogus white-space warning
 . branch-diff: offer to dual-color the diffs
 . diff: add an internal option to dual-color diffs of diffs
 . color: provide inverted colors, too
 . branch-diff: use color for the commit pairs
 . branch-diff: add tests
 . branch-diff: do not show "function names" in hunk headers
 . branch-diff: adjust the output of the commit pairs
 . branch-diff: suppress the diff headers
 . branch-diff: indent the diffs just like tbdiff
 . branch-diff: right-trim commit messages
 . branch-diff: also show the diff between patches
 . branch-diff: improve the order of the shown commits
 . branch-diff: first rudimentary implementation
 . Add a new builtin: branch-diff
 . Add a function to solve least-cost assignment problems

 "git tbdiff" that lets us compare individual patches in two
 iterations of a topic has been rewritten and made into a built-in
 command.

^ permalink raw reply	[relevance 3%]

* What's cooking in git.git (Jul 2018, #03; Wed, 25)
@ 2018-07-25 22:13  3% Junio C Hamano
  0 siblings, 0 replies; 200+ results
From: Junio C Hamano @ 2018-07-25 22:13 UTC (permalink / raw)
  To: git

Here are the topics that have been cooking.  Commits prefixed with
'-' are only in 'pu' (proposed updates) while commits prefixed with
'+' are in 'next'.  The ones marked with '.' do not appear in any of
the integration branches, but I am still holding onto them.

Many topics have moved to 'master' and 'next' from 'next' to 'pu'
respectively.

You can find the changes described here in the integration branches
of the repositories listed at

    http://git-blame.blogspot.com/p/git-public-repositories.html

--------------------------------------------------
[Graduated to "master"]

* ag/rebase-p (2018-07-06) 1 commit
  (merged to 'next' on 2018-07-18 at c36ebba99b)
 + git-rebase--preserve-merges: fix formatting of todo help message

 The help message shown in the editor to edit todo list in "rebase -p"
 has regressed recently, which has been corrected.


* as/sequencer-customizable-comment-char (2018-07-16) 1 commit
  (merged to 'next' on 2018-07-18 at 4163e23f29)
 + sequencer: use configured comment character

 Honor core.commentchar when preparing the list of commits to replay
 in "rebase -i".


* bb/pedantic (2018-07-09) 8 commits
  (merged to 'next' on 2018-07-18 at e9d075e8ed)
 + utf8.c: avoid char overflow
 + string-list.c: avoid conversion from void * to function pointer
 + sequencer.c: avoid empty statements at top level
 + convert.c: replace "\e" escapes with "\033".
 + fixup! refs/refs-internal.h: avoid forward declaration of an enum
 + refs/refs-internal.h: avoid forward declaration of an enum
 + fixup! connect.h: avoid forward declaration of an enum
 + connect.h: avoid forward declaration of an enum
 (this branch is used by bb/make-developer-pedantic.)

 The codebase has been updated to compile cleanly with -pedantic
 option.


* bb/unicode-11-width (2018-07-09) 1 commit
  (merged to 'next' on 2018-07-18 at 075648ed37)
 + unicode: update the width tables to Unicode 11

 The character display width table has been updated to match the
 latest Unicode standard.


* bc/send-email-auto-cte (2018-07-09) 4 commits
  (merged to 'next' on 2018-07-18 at d16c2a301a)
 + docs: correct RFC specifying email line length
 + send-email: automatically determine transfer-encoding
 + send-email: accept long lines with suitable transfer encoding
 + send-email: add an auto option for transfer encoding

 The content-transfer-encoding of the message "git send-email" sends
 out by default was 8bit, which can cause trouble when there is an
 overlong line to bust RFC 5322/2822 limit.  A new option 'auto' to
 automatically switch to quoted-printable when there is such a line
 in the payload has been introduced and is made the default.


* bp/log-ref-write-fd-with-strbuf (2018-07-10) 1 commit
  (merged to 'next' on 2018-07-18 at 25a3a99528)
 + convert log_ref_write_fd() to use strbuf

 Code clean-up.


* bw/ref-in-want (2018-06-28) 8 commits
  (merged to 'next' on 2018-07-18 at 7e9f8db37c)
 + fetch-pack: implement ref-in-want
 + fetch-pack: put shallow info in output parameter
 + fetch: refactor to make function args narrower
 + fetch: refactor fetch_refs into two functions
 + fetch: refactor the population of peer ref OIDs
 + upload-pack: test negotiation with changing repository
 + upload-pack: implement ref-in-want
 + test-pkt-line: add unpack-sideband subcommand
 (this branch is used by bw/fetch-pack-i18n, jt/connectivity-check-after-unshallow, jt/partial-clone-fsck-connectivity and jt/tags-to-promised-blobs-fix.)

 Protocol v2 has been updated to allow slightly out-of-sync set of
 servers to work together to serve a single client, which would be
 useful with load-balanced servers that talk smart HTTP transport.


* en/apply-comment-fix (2018-06-28) 1 commit
  (merged to 'next' on 2018-07-18 at 31d818f17d)
 + apply: fix grammar error in comment


* en/rebase-consistency (2018-06-27) 9 commits
  (merged to 'next' on 2018-07-18 at d597206c79)
 + git-rebase: make --allow-empty-message the default
 + t3401: add directory rename testcases for rebase and am
 + git-rebase.txt: document behavioral differences between modes
 + directory-rename-detection.txt: technical docs on abilities and limitations
 + git-rebase.txt: address confusion between --no-ff vs --force-rebase
 + git-rebase: error out when incompatible options passed
 + t3422: new testcases for checking when incompatible options passed
 + git-rebase.sh: update help messages a bit
 + git-rebase.txt: document incompatible options

 "git rebase" behaved slightly differently depending on which one of
 the three backends gets used; this has been documented and an
 effort to make them more uniform has begun.


* en/t5407-rebase-m-fix (2018-06-28) 1 commit
  (merged to 'next' on 2018-07-18 at 459875daeb)
 + t5407: fix test to cover intended arguments


* es/test-lint-one-shot-export (2018-07-16) 5 commits
  (merged to 'next' on 2018-07-18 at 26a6124963)
 + t/check-non-portable-shell: detect "FOO=bar shell_func"
 + t/check-non-portable-shell: make error messages more compact
 + t/check-non-portable-shell: stop being so polite
 + t6046/t9833: fix use of "VAR=VAL cmd" with a shell function
 + Merge branch 'jc/t3404-one-shot-export-fix' into es/test-lint-one-shot-export
 (this branch uses jc/t3404-one-shot-export-fix.)

 Look for broken use of "VAR=VAL shell_func" in test scripts as part
 of test-lint.


* hs/push-cert-check-cleanup (2018-07-11) 2 commits
  (merged to 'next' on 2018-07-18 at 1ed25fbd77)
 + gpg-interface: make parse_gpg_output static and remove from interface header
 + builtin/receive-pack: use check_signature from gpg-interface
 (this branch is used by hs/gpgsm.)

 Code clean-up.


* jc/t3404-one-shot-export-fix (2018-07-12) 1 commit
  (merged to 'next' on 2018-07-18 at e15a79dca7)
 + t3404: fix use of "VAR=VAL cmd" with a shell function
 (this branch is used by es/test-lint-one-shot-export.)

 Correct a broken use of "VAR=VAL shell_func" in a test.


* jk/empty-pick-fix (2018-07-11) 2 commits
  (merged to 'next' on 2018-07-18 at 43bfa862f2)
 + sequencer: don't say BUG on bogus input
 + sequencer: handle empty-set cases consistently

 Handling of an empty range by "git cherry-pick" was inconsistent
 depending on how the range ended up to be empty, which has been
 corrected.


* jk/fetch-all-peeled-fix (2018-07-06) 1 commit
  (merged to 'next' on 2018-07-18 at d06c6f1665)
 + t5500: prettify non-commit tag tests

 Test modernization.


* jk/for-each-ref-icase (2018-07-03) 3 commits
  (merged to 'next' on 2018-07-18 at 4c86d62adb)
 + ref-filter: avoid backend filtering with --ignore-case
 + for-each-ref: consistently pass WM_IGNORECASE flag
 + t6300: add a test for --ignore-case

 The "--ignore-case" option of "git for-each-ref" (and its friends)
 did not work correctly, which has been fixed.


* jt/connectivity-check-after-unshallow (2018-07-03) 1 commit
  (merged to 'next' on 2018-07-18 at 8e7ee889c3)
 + fetch-pack: write shallow, then check connectivity
 (this branch is used by jt/partial-clone-fsck-connectivity and jt/tags-to-promised-blobs-fix; uses bw/ref-in-want; is tangled with bw/fetch-pack-i18n.)

 "git fetch" failed to correctly validate the set of objects it
 received when making a shallow history deeper, which has been
 corrected.


* jt/partial-clone-fsck-connectivity (2018-07-09) 2 commits
  (merged to 'next' on 2018-07-18 at 968fd9c9f0)
 + clone: check connectivity even if clone is partial
 + upload-pack: send refs' objects despite "filter"
 (this branch is used by jt/tags-to-promised-blobs-fix; uses bw/ref-in-want and jt/connectivity-check-after-unshallow; is tangled with bw/fetch-pack-i18n.)

 Partial clone support of "git clone" has been updated to correctly
 validate the objects it receives from the other side.  The server
 side has been corrected to send objects that are directly
 requested, even if they may match the filtering criteria (e.g. when
 doing a "lazy blob" partial clone).


* kn/userdiff-php (2018-07-06) 2 commits
  (merged to 'next' on 2018-07-18 at 9a533dc33a)
 + userdiff: support new keywords in PHP hunk header
 + t4018: add missing test cases for PHP

 The userdiff pattern for .php has been updated.


* mh/fast-import-no-diff-delta-empty (2018-07-06) 1 commit
  (merged to 'next' on 2018-07-18 at eb393871f4)
 + fast-import: do not call diff_delta() with empty buffer

 "git fast-import" has been updated to avoid attempting to create
 delta against a zero-byte-long string, which is pointless.


* mk/merge-in-sparse-checkout (2018-07-11) 1 commit
  (merged to 'next' on 2018-07-18 at d2a6d2684d)
 + unpack-trees: do not fail reset because of unmerged skipped entry

 "git reset --merge" (hence "git merge ---abort") and "git reset --hard"
 had trouble working correctly in a sparsely checked out working
 tree after a conflict, which has been corrected.


* nd/command-list (2018-07-16) 1 commit
  (merged to 'next' on 2018-07-18 at 77ed2a3914)
 + vcbuild/README: update to accommodate for missing common-cmds.h

 Build doc update for Windows.


* rj/submodule-fsck-skip (2018-07-03) 1 commit
  (merged to 'next' on 2018-07-11 at 985f88cf7e)
 + fsck: check skiplist for object in fsck_blob()

 "fsck.skipList" did not prevent a blob object listed there from
 being inspected for is contents (e.g. we recently started to
 inspect the contents of ".gitmodules" for certain malicious
 patterns), which has been corrected.


* sb/blame-color (2018-07-16) 1 commit
  (merged to 'next' on 2018-07-18 at c319268502)
 + blame: prefer xsnprintf to strcpy for colors
 (this branch is used by jk/banned-function.)

 Code clean-up.


* sb/submodule-move-head-error-msg (2018-06-25) 1 commit
  (merged to 'next' on 2018-07-18 at 9e213ad1aa)
 + submodule.c: report the submodule that an error occurs in

 "git checkout --recurse-submodules another-branch" did not report
 in which submodule it failed to update the working tree, which
 resulted in an unhelpful error message.


* tb/config-default (2018-07-06) 1 commit
  (merged to 'next' on 2018-07-18 at 7994476f6f)
 + builtin/config: work around an unsized array forward declaration

 Compilation fix.


* wc/find-commit-with-pattern-on-detached-head (2018-07-12) 1 commit
  (merged to 'next' on 2018-07-18 at 334d2420c0)
 + sha1-name.c: for ":/", find detached HEAD commits

 "git rev-parse ':/substring'" did not consider the history leading
 only to HEAD when looking for a commit with the given substring,
 when the HEAD is detached.  This has been fixed.

--------------------------------------------------
[New Topics]

* ds/commit-graph-with-grafts (2018-07-19) 8 commits
 - commit-graph: close_commit_graph before shallow walk
 - commit-graph: not compatible with uninitialized repo
 - commit-graph: not compatible with grafts
 - commit-graph: not compatible with replace objects
 - test-repository: properly init repo
 - commit-graph: update design document
 - refs.c: upgrade for_each_replace_ref to be a each_repo_ref_fn callback
 - refs.c: migrate internal ref iteration to pass thru repository argument
 (this branch uses ds/commit-graph-fsck, jt/commit-graph-per-object-store and sb/object-store-lookup; is tangled with ds/reachable.)

 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.

 Will merge to 'next'.


* jk/core-use-replace-refs (2018-07-18) 3 commits
 - add core.usereplacerefs config option
 - check_replace_refs: rename to read_replace_refs
 - check_replace_refs: fix outdated comment

 A new configuration variable core.usereplacerefs has been added,
 primarily to help server installations that want to ignore the
 replace mechanism altogether.

 Will merge to 'next'.


* nd/i18n (2018-07-23) 23 commits
 - transport-helper.c: mark more strings for translation
 - transport.c: mark more strings for translation
 - sha1-file.c: mark more strings for translation
 - sequencer.c: mark more strings for translation
 - replace-object.c: mark more strings for translation
 - refspec.c: mark more strings for translation
 - refs.c: mark more strings for translation
 - pkt-line.c: mark more strings for translation
 - object.c: mark more strings for translation
 - exec-cmd.c: mark more strings for translation
 - environment.c: mark more strings for translation
 - dir.c: mark more strings for translation
 - convert.c: mark more strings for translation
 - connect.c: mark more strings for translation
 - config.c: mark more strings for translation
 - commit-graph.c: mark more strings for translation
 - builtin/replace.c: mark more strings for translation
 - builtin/pack-objects.c: mark more strings for translation
 - builtin/grep.c: mark strings for translation
 - builtin/config.c: mark more strings for translation
 - archive-zip.c: mark more strings for translation
 - archive-tar.c: mark more strings for translation
 - Update messages in preparation for i18n

 Many more strings are prepared for l10n.

 Will merge to 'next'.


* sb/histogram-less-memory (2018-07-23) 4 commits
 - xdiff/histogram: remove tail recursion
 - xdiff/xhistogram: move index allocation into find_lcs
 - xdiff/xhistogram: factor out memory cleanup into free_index()
 - xdiff/xhistogram: pass arguments directly to fall_back_to_classic_diff

 "git diff --histogram" had a bad memory usage pattern, which has
 been rearranged to reduce the peak usage.

 Will merge to 'next'.


* bb/make-developer-pedantic (2018-07-25) 1 commit
 - Makefile: add a DEVOPTS flag to get pedantic compilation

 "make DEVELOPER=1 DEVOPTS=pedantic" allows developers to compile
 with -pedantic option, which may catch more problematic program
 constructs and potential bugs.

 Will merge to 'next' and then to 'master'.


* bw/clone-ref-prefixes (2018-07-20) 1 commit
 - clone: send ref-prefixes when using protocol v2

 The wire-protocol v2 relies on the client to send "ref prefixes" to
 limit the bandwidth spent on the initial ref advertisement.  "git
 clone" when learned to speak v2 forgot to do so, which has been
 corrected.

 Will merge to 'next'.


* bw/fetch-pack-i18n (2018-07-23) 1 commit
 - fetch-pack: mark die strings for translation

 i18n updates.

 Will merge to 'next' and then to 'master'.


* bw/protocol-v2 (2018-07-24) 1 commit
 - pack-protocol: mention and point to docs for protocol v2

 Doc update.

 Will merge to 'next' and then to 'master'.


* ds/reachable (2018-07-20) 18 commits
 - commit-reach: use can_all_from_reach
 - commit-reach: make can_all_from_reach... linear
 - commit-reach: replace ref_newer logic
 - test-reach: test commit_contains
 - test-reach: test can_all_from_reach_with_flags
 - test-reach: test reduce_heads
 - test-reach: test get_merge_bases_many
 - test-reach: test is_descendant_of
 - test-reach: test in_merge_bases
 - test-reach: create new test tool for ref_newer
 - commit-reach: move can_all_from_reach_with_flags
 - upload-pack: generalize commit date cutoff
 - upload-pack: refactor ok_to_give_up()
 - upload-pack: make reachable() more generic
 - commit-reach: move commit_contains from ref-filter
 - commit-reach: move ref_newer from remote.c
 - commit.h: remove method declarations
 - commit-reach: move walk methods from commit.c
 (this branch uses ds/commit-graph-fsck, jt/commit-graph-per-object-store and sb/object-store-lookup; is tangled with ds/commit-graph-with-grafts.)

 The code for computing history reachability has been shuffled,
 obtained a bunch of new tests to cover them, and then being
 improved.

 Stuck in review?
 cf. <20180723203500.231932-1-jonathantanmy@google.com>
 cf. <20180723204112.233274-1-jonathantanmy@google.com>
 cf. <CAGZ79kb7tWV=cmboA+nsChAUaiC+fVVM-GBCuWfsypC+-wyaVg@mail.gmail.com>


* en/merge-recursive-skip-fix (2018-07-23) 2 commits
 - merge-recursive: preserve skip_worktree bit when necessary
 - t3507: add a testcase showing failure with sparse checkout

 When the sparse checkout feature is in use, "git cherry-pick" and
 other mergy operations lost the skip_worktree bit when a path that
 is excluded from checkout requires content level merge, which is
 resolved as the same as the HEAD version, without materializing the
 merge result in the working tree, which made the path appear as
 deleted.  This has been corrected by preserving the skip_worktree
 bit (and not materializing the file in the working tree).

 Stuck in review?
 cf. <75aa297e-4857-d92a-7041-618ff3b0b77a@gmail.com>


* es/format-patch-interdiff (2018-07-23) 6 commits
 - format-patch: allow --interdiff to apply to a lone-patch
 - log-tree: show_log: make commentary block delimiting reusable
 - interdiff: teach show_interdiff() to indent interdiff
 - format-patch: teach --interdiff to respect -v/--reroll-count
 - format-patch: add --interdiff option to embed diff in cover letter
 - format-patch: allow additional generated content in make_cover_letter()
 (this branch is used by es/format-patch-rangediff.)

 "git format-patch" learned a new "--interdiff" option to explain
 the difference between this version and the previous atttempt in
 the cover letter (or after the tree-dashes as a comment).

 Stuck in review?
 cf. <CAPig+cSuYUYSPTuKx08wcmQM-G12_-W2T4BS07fA=6grM1b8Gw@mail.gmail.com>


* es/format-patch-rangediff (2018-07-25) 10 commits
 - format-patch: allow --range-diff to apply to a lone-patch
 - format-patch: add --creation-factor tweak for --range-diff
 - format-patch: teach --range-diff to respect -v/--reroll-count
 - format-patch: extend --range-diff to accept revision range
 - format-patch: add --range-diff option to embed diff in cover letter
 - range-diff: relieve callers of low-level configuration burden
 - range-diff: publish default creation factor
 - range-diff: respect diff_option.file rather than assuming 'stdout'
 - Merge branch 'es/format-patch-interdiff' into es/format-patch-rangediff
 - Merge branch 'js/range-diff' into es/format-patch-rangediff
 (this branch uses es/format-patch-interdiff and js/range-diff.)

 "git format-patch" learned a new "--range-diff" option to explain
 the difference between this version and the previous atttempt in
 the cover letter (or after the tree-dashes as a comment).

 Need to wait for the prereq topics to solidify a bit more.


* jk/banned-function (2018-07-24) 5 commits
 - banned.h: mark strncpy() as banned
 - banned.h: mark sprintf() as banned
 - banned.h: mark strcat() as banned
 - automatically ban strcpy()
 - Merge branch 'sb/blame-color' into jk/banned-function

 It is too easy to misuse system API functions such as strcat();
 these selected functions are now forbidden in this codebase and
 will cause a compilation failure.

 Will merge to 'next'.


* jk/size-t (2018-07-24) 6 commits
 - strbuf_humanise: use unsigned variables
 - pass st.st_size as hint for strbuf_readlink()
 - strbuf_readlink: use ssize_t
 - strbuf: use size_t for length in intermediate variables
 - reencode_string: use size_t for string lengths
 - reencode_string: use st_add/st_mult helpers

 Code clean-up to use size_t/ssize_t when they are the right type.

 Will merge to 'next'.


* js/t7406-recursive-submodule-update-order-fix (2018-07-23) 1 commit
 - t7406: avoid failures solely due to timing issues

 Test fix.

 Will merge to 'next' and then to 'master'.


* js/vscode (2018-07-23) 9 commits
 - vscode: let cSpell work on commit messages, too
 - vscode: add a dictionary for cSpell
 - vscode: use 8-space tabs, no trailing ws, etc for Git's source code
 - vscode: wrap commit messages at column 72 by default
 - vscode: only overwrite C/C++ settings
 - mingw: define WIN32 explicitly
 - cache.h: extract enum declaration from inside a struct declaration
 - vscode: hard-code a couple defines
 - contrib: add a script to initialize VS Code configuration

 Add a script (in contrib/) to help users of VSCode work better with
 our codebase.

 Stuck in review?
 cf. <20180723165719.GA16420@aiede.svl.corp.google.com>
 cf. <20180723174108.GA9285@aiede.svl.corp.google.com>


* jt/tag-following-with-proto-v2-fix (2018-07-24) 2 commits
 - fetch: send "refs/tags/" prefix upon CLI refspecs
 - t5702: test fetch with multiple refspecs at a time

 The wire-protocol v2 relies on the client to send "ref prefixes" to
 limit the bandwidth spent on the initial ref advertisement.  "git
 fetch $remote branch:branch" that asks tags that point into the
 history leading to the "branch" automatically followed sent to
 narrow prefix and broke the tag following, which has been fixed.

 Will merge to 'next'.


* nd/pack-deltify-regression-fix (2018-07-23) 1 commit
 - pack-objects: fix performance issues on packing large deltas

 In a recent update in 2.18 era, "git pack-objects" started
 producing a larger than necessary packfiles by missing
 opportunities to use large deltas.

 Will merge to and cook in 'next'.


* sb/trailers-docfix (2018-07-20) 1 commit
 - Documentation/git-interpret-trailers: explain possible values

 Doc update.

 Will merge to 'next' and then to 'master'.


* sg/coccicheck-updates (2018-07-23) 5 commits
 - coccinelle: extract dedicated make target to clean Coccinelle's results
 - coccinelle: put sane filenames into output patches
 - coccinelle: exclude sha1dc source files from static analysis
 - coccinelle: use $(addsuffix) in 'coccicheck' make target
 - coccinelle: mark the 'coccicheck' make target as .PHONY

 Update the way we use Coccinelle to find out-of-style code that
 need to be modernised.

 Will merge to 'next'.


* sg/fast-import-dump-refs-on-checkpoint-fix (2018-07-20) 1 commit
 - t9300: wait for background fast-import process to die after killing it

 Test update.

 Will merge to 'next' and then to 'master'.


* sg/travis-cocci-diagnose-failure (2018-07-23) 2 commits
 - travis-ci: fail if Coccinelle static analysis found something to transform
 - travis-ci: run Coccinelle static analysis with two parallel jobs

 Update the way we run static analysis tool at TravisCI to make it
 easier to use its findings.

 Will merge to 'next' and then to 'master'.


* ab/newhash-is-sha256 (2018-07-25) 1 commit
 - doc hash-function-transition: note the lack of a changelog

 Documentation update.

 Waiting for another attempt for the second part.


* bb/redecl-enum-fix (2018-07-25) 1 commit
 - packfile: drop a repeated enum declaration

 Compilation fix.


* es/diff-color-move-fix (2018-07-25) 1 commit
 - diff: --color-moved: rename "dimmed_zebra" to "dimmed-zebra"

 One of the "diff --color-moved" mode "dimmed_zebra" that was named
 in an unusual way has been deprecated and replaced by
 "dimmed-zebra".

 Will merge to 'next' and then to 'master'.


* jh/structured-logging (2018-07-25) 25 commits
 - structured-logging: add config data facility
 - structured-logging: t0420 tests for interacitve child_summary
 - structured-logging: t0420 tests for child process detail events
 - structured-logging: add child process classification
 - structured-logging: add detail-events for child processes
 - structured-logging: add structured logging to remote-curl
 - structured-logging: t0420 tests for aux-data
 - structured-logging: add aux-data for size of sparse-checkout file
 - structured-logging: add aux-data for index size
 - structured-logging: add aux-data facility
 - structured-logging: t0420 tests for timers
 - structured-logging: add timer around preload_index
 - structured-logging: add timer around wt-status functions
 - structured-logging: add timer around do_write_index
 - structured-logging: add timer around do_read_index
 - structured-logging: add timer facility
 - structured-logging: add detail-event for lazy_init_name_hash
 - structured-logging: add detail-event facility
 - structured-logging: t0420 basic tests
 - structured-logging: set sub_command field for checkout command
 - structured-logging: set sub_command field for branch command
 - structured-logging: add session-id to log events
 - structured-logging: add structured logging framework
 - structured-logging: add STRUCTURED_LOGGING=1 to Makefile
 - structured-logging: design document
 (this branch uses jh/json-writer.)

 X-Gah.

--------------------------------------------------
[Stalled]

* pw/add-p-select (2018-03-16) 3 commits
 - add -p: optimize line selection for short hunks
 - add -p: allow line selection to be inverted
 - add -p: select individual hunk lines

 "git add -p" interactive interface learned to let users choose
 individual added/removed lines to be used in the operation, instead
 of accepting or rejecting a whole hunk.

 Expecting a reroll to reignite the discussion.
 cf. <9895c7b7-eac4-28c1-90c6-443acd1131b7@talktalk.net>


* hn/bisect-first-parent (2018-04-21) 1 commit
 - bisect: create 'bisect_flags' parameter in find_bisection()

 Preliminary code update to allow passing more flags down the
 bisection codepath in the future.

 We do not add random code that does not have real users to our
 codebase, so let's have it wait until such a real code materializes
 before too long.


* av/fsmonitor-updates (2018-01-04) 6 commits
 - fsmonitor: use fsmonitor data in `git diff`
 - fsmonitor: remove debugging lines from t/t7519-status-fsmonitor.sh
 - fsmonitor: make output of test-dump-fsmonitor more concise
 - fsmonitor: update helper tool, now that flags are filled later
 - fsmonitor: stop inline'ing mark_fsmonitor_valid / _invalid
 - dir.c: update comments to match argument name

 Code clean-up on fsmonitor integration, plus optional utilization
 of the fsmonitor data in diff-files.

 Waiting for an update.
 cf. <alpine.DEB.2.21.1.1801042335130.32@MININT-6BKU6QN.europe.corp.microsoft.com>


* pb/bisect-helper-2 (2018-07-23) 8 commits
 - t6030: make various test to pass GETTEXT_POISON tests
 - bisect--helper: `bisect_start` shell function partially in C
 - bisect--helper: `get_terms` & `bisect_terms` shell function in C
 - bisect--helper: `bisect_next_check` shell function in C
 - bisect--helper: `check_and_set_terms` shell function in C
 - wrapper: move is_empty_file() and rename it as is_empty_or_missing_file()
 - bisect--helper: `bisect_write` shell function in C
 - bisect--helper: `bisect_reset` shell function in C

 Expecting a reroll.
 cf. <0102015f5e5ee171-f30f4868-886f-47a1-a4e4-b4936afc545d-000000@eu-west-1.amazonses.com>

 I just rebased the topic to a newer base as it did not build
 standalone with the base I originally queued the topic on, but
 otherwise there is no update to address any of the review comments
 in the thread above---we are still waiting for a reroll.


* mk/http-backend-content-length (2018-06-11) 3 commits
 - http-backend: respect CONTENT_LENGTH for receive-pack
 - http-backend: respect CONTENT_LENGTH as specified by rfc3875
 - http-backend: cleanup writing to child process

 The http-backend (used for smart-http transport) used to slurp the
 whole input until EOF, without paying attention to CONTENT_LENGTH
 that is supplied in the environment and instead expecting the Web
 server to close the input stream.  This has been fixed.


* jk/drop-ancient-curl (2017-08-09) 5 commits
 - http: #error on too-old curl
 - curl: remove ifdef'd code never used with curl >=7.19.4
 - http: drop support for curl < 7.19.4
 - http: drop support for curl < 7.16.0
 - http: drop support for curl < 7.11.1

 Some code in http.c that has bitrot is being removed.

 Expecting a reroll.


* mk/use-size-t-in-zlib (2017-08-10) 1 commit
 . zlib.c: use size_t for size

 The wrapper to call into zlib followed our long tradition to use
 "unsigned long" for sizes of regions in memory, which have been
 updated to use "size_t".

 Needs resurrecting by making sure the fix is good and still applies
 (or adjusted to today's codebase).

--------------------------------------------------
[Cooking]

* am/sequencer-author-script-fix (2018-07-18) 1 commit
 - sequencer.c: terminate the last line of author-script properly

 The author-script that records the author information created by
 the sequencer machinery lacked the closing single quote on the last
 entry.

 Fixing this alone may or may not break the reader that may have
 been compensating for this bogus writer.  I think I saw another fix
 to the same source file posted today---if we are fixing, we should
 fix them all at the same time to keep the reader and the writer in
 sync.


* bc/sequencer-export-work-tree-as-well (2018-07-16) 1 commit
  (merged to 'next' on 2018-07-24 at 0b83ade721)
 + sequencer: pass absolute GIT_WORK_TREE to exec commands

 "git rebase" started exporting GIT_DIR environment variable and
 exposing it to hook scripts when part of it got rewritten in C.
 Instead of matching the old scripted Porcelains' behaviour,
 compensate by also exporting GIT_WORK_TREE environment as well to
 lessen the damage.  This can harm existing hooks that want to
 operate on different repository, but the current behaviour is
 already broken for them anyway.

 Will merge to 'master'.


* bp/test-drop-caches-for-windows (2018-07-12) 1 commit
  (merged to 'next' on 2018-07-24 at 257bb336c6)
 + handle lower case drive letters on Windows

 A test helper update for Windows.

 Will merge to 'master'.


* en/abort-df-conflict-fixes (2018-07-16) 2 commits
 - read-cache: fix directory/file conflict handling in read_index_unmerged()
 - t1015: demonstrate directory/file conflict recovery failures

 "git merge --abort" etc. did not clean things up properly when
 there were conflicted entries in certain order that are involved
 in D/F conflicts.  This has been corrected.

 This may have to be rebased on an older maintenance track before
 moving forward.


* es/chain-lint-in-subshell (2018-07-17) 10 commits
  (merged to 'next' on 2018-07-24 at 9370bbdfaf)
 + t/chainlint: add chainlint "specialized" test cases
 + t/chainlint: add chainlint "complex" test cases
 + t/chainlint: add chainlint "cuddled" test cases
 + t/chainlint: add chainlint "loop" and "conditional" test cases
 + t/chainlint: add chainlint "nested subshell" test cases
 + t/chainlint: add chainlint "one-liner" test cases
 + t/chainlint: add chainlint "whitespace" test cases
 + t/chainlint: add chainlint "basic" test cases
 + t/Makefile: add machinery to check correctness of chainlint.sed
 + t/test-lib: teach --chain-lint to detect broken &&-chains in subshells
 (this branch uses es/test-fixes.)

 Look for broken "&&" chains that are hidden in subshell, many of
 which have been found and corrected.

 Will merge to 'master'.


* hs/gpgsm (2018-07-20) 7 commits
 - gpg-interface t: extend the existing GPG tests with GPGSM
 - gpg-interface: introduce new signature format "x509" using gpgsm
 - gpg-interface: introduce new config to select per gpg format program
 - gpg-interface: do not hardcode the key string len anymore
 - gpg-interface: introduce an abstraction for multiple gpg formats
 - t/t7510: check the validation of the new config gpg.format
 - gpg-interface: add new config to select how to sign a commit

 Teach "git tag -s" etc. a few configuration varaibles (gpg.format
 that can be set to "openpgp" or "x509", and gpg.<format>.program
 that is used to specify what program to use to deal with the format)
 to allow x.509 certs with CMS via "gpgsm" to be used instead of
 openpgp via "gnupg".

 Will merge to 'next'.


* jk/has-uncommitted-changes-fix (2018-07-11) 1 commit
  (merged to 'next' on 2018-07-24 at 2ea14c0afb)
 + has_uncommitted_changes(): fall back to empty tree

 "git pull --rebase" on a corrupt HEAD caused a segfault.  In
 general we substitute an empty tree object when running the in-core
 equivalent of the diff-index command, and the codepath has been
 corrected to do so as well to fix this issue.

 Will merge to 'master'.


* jm/send-email-tls-auth-on-batch (2018-07-16) 1 commit
  (merged to 'next' on 2018-07-24 at fb3e653f44)
 + send-email: fix tls AUTH when sending batch

 "git send-email" when using in a batched mode that limits the
 number of messages sent in a single SMTP session lost the contents
 of the variable used to choose between tls/ssl, unable to send the
 second and later batches, which has been fixed.

 Will merge to 'master'.

 This is marked to be merged to 'next' already, but I do not mind
 getting an updated version with an improved log message before that
 happens.


* jn/gc-auto (2018-07-17) 3 commits
 - gc: do not return error for prior errors in daemonized mode
 - gc: exit with status 128 on failure
 - gc: improve handling of errors reading gc.log

 "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.

 Stuck in review?
 cf. <20180717201348.GD26218@sigill.intra.peff.net>


* js/rebase-merge-octopus (2018-07-11) 3 commits
  (merged to 'next' on 2018-07-24 at 14ad8699de)
 + rebase --rebase-merges: adjust man page for octopus support
 + rebase --rebase-merges: add support for octopus merges
 + merge: allow reading the merge commit message from a file

 "git rebase --rebase-merges" mode now handles octopus merges as
 well.

 Will merge to 'master'.


* jt/fetch-negotiator-skipping (2018-07-16) 1 commit
  (merged to 'next' on 2018-07-24 at 8e25a49405)
 + negotiator/skipping: skip commits during fetch
 (this branch uses jt/fetch-pack-negotiator; is tangled with jt/fetch-nego-tip.)

 Add a server-side knob to skip commits in exponential/fibbonacci
 stride in an attempt to cover wider swath of history with a smaller
 number of iterations, potentially accepting a larger packfile
 transfer, instead of going back one commit a time during common
 ancestor discovery during the "git fetch" transaction.

 Will merge to 'master'.


* jt/tags-to-promised-blobs-fix (2018-07-16) 2 commits
  (merged to 'next' on 2018-07-24 at 8d7e78a671)
 + tag: don't warn if target is missing but promised
 + revision: tolerate promised targets of tags

 The lazy clone support had a few places where missing but promised
 objects were not correctly tolerated, which have been fixed.

 Will merge to 'master'.


* sb/submodule-update-in-c (2018-07-18) 6 commits
 - submodule--helper: introduce new update-module-mode helper
 - builtin/submodule--helper: factor out method to update a single submodule
 - builtin/submodule--helper: store update_clone information in a struct
 - builtin/submodule--helper: factor out submodule updating
 - git-submodule.sh: rename unused variables
 - git-submodule.sh: align error reporting for update mode to use path

 "git submodule update" is getting rewritten piece-by-piece into C.

 It seems to pass its own self-tests standalone, but seems to break
 horribly when merged to 'pu'.


* sg/httpd-test-unflake (2018-07-12) 3 commits
  (merged to 'next' on 2018-07-24 at b7df820256)
 + t/lib-httpd: avoid occasional failures when checking access.log
 + t/lib-httpd: add the strip_access_log() helper function
 + t5541: clean up truncating access log

 httpd tests saw occasional breakage due to the way its access log
 gets inspected by the tests, which has been updated to make them
 less flaky.

 Will merge to 'master'.


* sl/commit-dry-run-with-short-output-fix (2018-07-17) 3 commits
 - commit: fix exit code for --short/--porcelain
 - wt-status: teach wt_status_collect about merges in progress
 - t7501: add merge conflict tests for dry run

 "git commit --dry-run" gave a correct exit status even during a
 conflict resolution toward a merge, but it did not with the
 "--short" option, which has been corrected.

 Will merge to 'next'.


* tg/rerere (2018-07-16) 11 commits
 - rerere: recalculate conflict ID when unresolved conflict is committed
 - rerere: teach rerere to handle nested conflicts
 - rerere: return strbuf from handle path
 - rerere: factor out handle_conflict function
 - rerere: only return whether a path has conflicts or not
 - rerere: fix crash when conflict goes unresolved
 - rerere: add documentation for conflict normalization
 - rerere: mark strings for translation
 - rerere: wrap paths in output in sq
 - rerere: lowercase error messages
 - rerere: unify error messages when read_cache fails


* jk/ui-color-always-to-auto (2018-07-18) 1 commit
 - Documentation: fix --color option formatting

 Doc formatting fix.

 Will merge to 'next' and then to 'master'.


* jh/json-writer (2018-07-16) 1 commit
 - json_writer: new routines to create JSON data
 (this branch is used by jh/structured-logging.)

 Preparatory code to later add json output for telemetry data.

 Will merge to 'next'.


* ag/rebase-i-in-c (2018-07-10) 13 commits
 - rebase -i: rewrite the rest of init_revisions_and_shortrevisions in C
 - rebase -i: implement the logic to initialize the variable $revision in C
 - rebase--interactive: remove unused modes and functions
 - rebase--interactive: rewrite complete_action() in C
 - sequencer: change the way skip_unnecessary_picks() returns its result
 - sequencer: refactor append_todo_help() to write its message to a buffer
 - rebase -i: rewrite checkout_onto() in C
 - rebase -i: rewrite setup_reflog_action() in C
 - sequencer: add a new function to silence a command, except if it fails
 - rebase-interactive: rewrite the edit-todo functionality in C
 - editor: add a function to launch the sequence editor
 - rebase--interactive: rewrite append_todo_help() in C
 - sequencer: make two functions and an enum from sequencer.c public

 Piecemeal rewrite of the remaining "rebase -i" machinery in C.

 A reroll (which is rumored to be quite good) exists, but hasn't
 been picked up yet.


* sb/object-store-lookup (2018-06-29) 33 commits
  (merged to 'next' on 2018-07-24 at dd96e29376)
 + commit.c: allow lookup_commit_reference to handle arbitrary repositories
 + commit.c: allow lookup_commit_reference_gently to handle arbitrary repositories
 + tag.c: allow deref_tag to handle arbitrary repositories
 + object.c: allow parse_object to handle arbitrary repositories
 + object.c: allow parse_object_buffer to handle arbitrary repositories
 + commit.c: allow get_cached_commit_buffer to handle arbitrary repositories
 + commit.c: allow set_commit_buffer to handle arbitrary repositories
 + commit.c: migrate the commit buffer to the parsed object store
 + commit-slabs: remove realloc counter outside of slab struct
 + commit.c: allow parse_commit_buffer to handle arbitrary repositories
 + tag: allow parse_tag_buffer to handle arbitrary repositories
 + tag: allow lookup_tag to handle arbitrary repositories
 + commit: allow lookup_commit to handle arbitrary repositories
 + tree: allow lookup_tree to handle arbitrary repositories
 + blob: allow lookup_blob to handle arbitrary repositories
 + object: allow lookup_object to handle arbitrary repositories
 + object: allow object_as_type to handle arbitrary repositories
 + tag: add repository argument to deref_tag
 + tag: add repository argument to parse_tag_buffer
 + tag: add repository argument to lookup_tag
 + commit: add repository argument to get_cached_commit_buffer
 + commit: add repository argument to set_commit_buffer
 + commit: add repository argument to parse_commit_buffer
 + commit: add repository argument to lookup_commit
 + commit: add repository argument to lookup_commit_reference
 + commit: add repository argument to lookup_commit_reference_gently
 + tree: add repository argument to lookup_tree
 + blob: add repository argument to lookup_blob
 + object: add repository argument to object_as_type
 + object: add repository argument to parse_object_buffer
 + object: add repository argument to lookup_object
 + object: add repository argument to parse_object
 + Merge branch 'sb/object-store-grafts' into sb/object-store-lookup
 (this branch is used by ds/commit-graph-with-grafts, ds/reachable and jt/commit-graph-per-object-store.)

 lookup_commit_reference() and friends have been updated to find
 in-core object for a specific in-core repository instance.

 Will merge to 'master'.


* bc/object-id (2018-07-16) 16 commits
  (merged to 'next' on 2018-07-24 at 23680778a9)
 + pretty: switch hard-coded constants to the_hash_algo
 + sha1-file: convert constants to uses of the_hash_algo
 + log-tree: switch GIT_SHA1_HEXSZ to the_hash_algo->hexsz
 + diff: switch GIT_SHA1_HEXSZ to use the_hash_algo
 + builtin/merge-recursive: make hash independent
 + builtin/merge: switch to use the_hash_algo
 + builtin/fmt-merge-msg: make hash independent
 + builtin/update-index: simplify parsing of cacheinfo
 + builtin/update-index: convert to using the_hash_algo
 + refs/files-backend: use the_hash_algo for writing refs
 + sha1-name: use the_hash_algo when parsing object names
 + strbuf: allocate space with GIT_MAX_HEXSZ
 + commit: express tree entry constants in terms of the_hash_algo
 + hex: switch to using the_hash_algo
 + tree-walk: replace hard-coded constants with the_hash_algo
 + cache: update object ID functions for the_hash_algo

 Conversion from uchar[40] to struct object_id continues.

 Will merge to 'master'.


* en/dirty-merge-fixes (2018-07-11) 9 commits
  (merged to 'next' on 2018-07-24 at 7b6ca3507c)
 + merge: fix misleading pre-merge check documentation
 + merge-recursive: enforce rule that index matches head before merging
 + t6044: add more testcases with staged changes before a merge is invoked
 + merge-recursive: fix assumption that head tree being merged is HEAD
 + merge-recursive: make sure when we say we abort that we actually abort
 + t6044: add a testcase for index matching head, when head doesn't match HEAD
 + t6044: verify that merges expected to abort actually abort
 + index_has_changes(): avoid assuming operating on the_index
 + read-cache.c: move index_has_changes() from merge.c

 The recursive merge strategy did not properly ensure there was no
 change between HEAD and the index before performing its operation,
 which has been corrected.

 Will merge to 'master'.


* en/t6036-merge-recursive-tests (2018-07-11) 6 commits
  (merged to 'next' on 2018-07-24 at 75055cb6e1)
 + t6036: add a failed conflict detection case: regular files, different modes
 + t6036: add a failed conflict detection case with conflicting types
 + t6036: add a failed conflict detection case with submodule add/add
 + t6036: add a failed conflict detection case with submodule modify/modify
 + t6036: add a failed conflict detection case with symlink add/add
 + t6036: add a failed conflict detection case with symlink modify/modify

 Tests to cover various conflicting cases have been added for
 merge-recursive.

 Will merge to 'master'.


* en/t6036-recursive-corner-cases (2018-07-12) 2 commits
  (merged to 'next' on 2018-07-24 at b7b3514ef4)
 + t6036: fix broken && chain in sub-shell
 + t6036: add lots of detail for directory/file conflicts in recursive case

 Tests to cover more D/F conflict cases have been added for
 merge-recursive.

 Will merge to 'master'.


* en/t6042-insane-merge-rename-testcases (2018-07-03) 3 commits
  (merged to 'next' on 2018-07-24 at 65c80f72da)
 + t6042: add testcase covering long chains of rename conflicts
 + t6042: add testcase covering rename/rename(2to1)/delete/delete conflict
 + t6042: add testcase covering rename/add/delete conflict type

 Various glitches in the heuristics of merge-recursive strategy have
 been documented in new tests.

 Will merge to 'master'.

 I am not sure if there is a single "correct" answer everybody can
 agree on for each of these "insane" cases, though.


* en/t7405-recursive-submodule-conflicts (2018-07-11) 3 commits
  (merged to 'next' on 2018-07-24 at 6cb7d02298)
 + t7405: verify 'merge --abort' works after submodule/path conflicts
 + t7405: add a directory/submodule conflict
 + t7405: add a file/submodule conflict

 Tests to cover conflict cases that involve submodules have been
 added for merge-recursive.

 Will merge to 'master'.


* es/test-fixes (2018-07-17) 26 commits
  (merged to 'next' on 2018-07-24 at fd6796a3ef)
 + t5608: fix broken &&-chain
 + t9119: fix broken &&-chains
 + t9000-t9999: fix broken &&-chains
 + t7000-t7999: fix broken &&-chains
 + t6000-t6999: fix broken &&-chains
 + t5000-t5999: fix broken &&-chains
 + t4000-t4999: fix broken &&-chains
 + t3030: fix broken &&-chains
 + t3000-t3999: fix broken &&-chains
 + t2000-t2999: fix broken &&-chains
 + t1000-t1999: fix broken &&-chains
 + t0000-t0999: fix broken &&-chains
 + t9814: simplify convoluted check that command correctly errors out
 + t9001: fix broken "invoke hook" test
 + t7810: use test_expect_code() instead of hand-rolled comparison
 + t7400: fix broken "submodule add/reconfigure --force" test
 + t7201: drop pointless "exit 0" at end of subshell
 + t6036: fix broken "merge fails but has appropriate contents" tests
 + t5505: modernize and simplify hard-to-digest test
 + t5406: use write_script() instead of birthing shell script manually
 + t5405: use test_must_fail() instead of checking exit code manually
 + t/lib-submodule-update: fix "absorbing" test
 + t: drop unnecessary terminating semicolon in subshell
 + t: use sane_unset() rather than 'unset' with broken &&-chain
 + t: use test_write_lines() instead of series of 'echo' commands
 + t: use test_might_fail() instead of manipulating exit code manually
 (this branch is used by es/chain-lint-in-subshell.)

 Test clean-up and corrections.

 Will merge to 'master'.


* jk/fsck-gitmodules-gently (2018-07-16) 6 commits
  (merged to 'next' on 2018-07-24 at 5b15c800db)
 + fsck: downgrade gitmodulesParse default to "info"
 + fsck: split ".gitmodules too large" error from parse failure
 + fsck: silence stderr when parsing .gitmodules
 + config: add options parameter to git_config_from_mem
 + config: add CONFIG_ERROR_SILENT handler
 + config: turn die_on_error into caller-facing enum

 Recent "security fix" to pay attention to contents of ".gitmodules"
 while accepting "git push" was a bit overly strict than necessary,
 which has been adjusted.

 Will merge to 'master'.


* js/range-diff (2018-07-25) 21 commits
 - range-diff: use dim/bold cues to improve dual color mode
 - range-diff: make --dual-color the default mode
 - range-diff: left-pad patch numbers
 - completion: support `git range-diff`
 - range-diff: populate the man page
 - range-diff --dual-color: fix bogus white-space warning
 - range-diff: offer to dual-color the diffs
 - diff: add an internal option to dual-color diffs of diffs
 - color: add the meta color GIT_COLOR_REVERSE
 - range-diff: use color for the commit pairs
 - range-diff: add tests
 - range-diff: do not show "function names" in hunk headers
 - range-diff: adjust the output of the commit pairs
 - range-diff: suppress the diff headers
 - range-diff: indent the diffs just like tbdiff
 - range-diff: right-trim commit messages
 - range-diff: also show the diff between patches
 - range-diff: improve the order of the shown commits
 - range-diff: first rudimentary implementation
 - Introduce `range-diff` to compare iterations of a topic branch
 - linear-assignment: a function to solve least-cost assignment problems
 (this branch is used by es/format-patch-rangediff.)

 "git tbdiff" that lets us compare individual patches in two
 iterations of a topic has been rewritten and made into a built-in
 command.

 Undecided.  

 Many "The feature is useful" comments without much real review; we
 know the feature is great as this mimicks tbdiff already so that is
 not news.

 I've squashed an obvious documentation fix in before rebasing the
 other topic that depends on it.  I _think_ we would probably be
 better off to _disable_ whitespace-error coloring altogether when
 showing diff-of-diff, and get rid of the workaround that only is
 applicable to the context lines of the outer diff (unless we first
 define how whitespace errors in diff-of-diff should be colored and
 implement it correctly, that is, but after seeing these two
 attempts, it seems that is harder than it is worth).


* jt/commit-graph-per-object-store (2018-07-17) 7 commits
  (merged to 'next' on 2018-07-24 at 090d1a4d59)
 + commit-graph: add repo arg to graph readers
 + commit-graph: store graph in struct object_store
 + commit-graph: add free_commit_graph
 + commit-graph: add missing forward declaration
 + object-store: add missing include
 + commit-graph: refactor preparing commit graph
 + Merge branch 'ds/commit-graph-fsck' into jt/commit-graph-per-object-store
 (this branch is used by ds/commit-graph-with-grafts and ds/reachable; uses ds/commit-graph-fsck and sb/object-store-lookup.)

 The singleton commit-graph in-core instance is made per in-core
 repository instance.

 Will merge to 'master'.


* kg/gc-auto-windows-workaround (2018-07-09) 1 commit
  (merged to 'next' on 2018-07-24 at 71c05d27b6)
 + gc --auto: release pack files before auto packing

 "git gc --auto" opens file descriptors for the packfiles before
 spawning "git repack/prune", which would upset Windows that does
 not want a process to work on a file that is open by another
 process.  The issue has been worked around.

 Will merge to 'master'.


* lt/date-human (2018-07-09) 1 commit
 - Add 'human' date format

 A new date format "--date=human" that morphs its output depending
 on how far the time is from the current time has been introduced.
 "--date=auto" can be used to use this new format when the output is
 goint to the pager or to the terminal and otherwise the default
 format.


* ot/ref-filter-object-info (2018-07-17) 5 commits
 - ref-filter: use oid_object_info() to get object
 - ref-filter: merge get_obj and get_object
 - ref-filter: initialize eaten variable
 - ref-filter: fill empty fields with empty values
 - ref-filter: add info_source to valid_atom

 A few atoms like %(objecttype) and %(objectsize) in the format
 specifier of "for-each-ref --format=<format>" can be filled without
 getting the full contents of the object, but just with the object
 header.  These cases have been optimzied by calling
 oid_object_info() API.

 What's the doneness of this one?


* pk/rebase-in-c (2018-07-23) 4 commits
 - builtin/rebase: support running "git rebase <upstream>"
 - sequencer: refactor the code to detach HEAD to checkout.c
 - rebase: refactor common shell functions into their own file
 - rebase: start implementing it as a builtin

 Piecemeal rewrite of the "rebase" machinery in C.
 Expecting a reroll, but it seems that this is getting quite close.
 cf. <CAOZc8M8YmLwJOzG-1jyz8ft4W_tJMwNs6kSV8inX1q_zmDW8Sg@mail.gmail.com>


* jt/fetch-nego-tip (2018-07-03) 1 commit
  (merged to 'next' on 2018-07-24 at a9e299006d)
 + fetch-pack: support negotiation tip whitelist
 (this branch uses jt/fetch-pack-negotiator; is tangled with jt/fetch-negotiator-skipping.)

 "git fetch" learned a new option "--negotiation-tip" to limit the
 set of commits it tells the other end as "have", to reduce wasted
 bandwidth and cycles, which would be helpful when the receiving
 repository has a lot of refs that have little to do with the
 history at the remote it is fetching from.

 Will merge to 'master'.


* tb/grep-only-matching (2018-07-09) 2 commits
  (merged to 'next' on 2018-07-24 at 7e878b9d95)
 + grep.c: teach 'git grep --only-matching'
 + grep.c: extract show_line_header()

 "git grep" learned the "--only-matching" option.

 Will merge to 'master'.


* jk/branch-l-1-repurpose (2018-06-22) 1 commit
 - branch: make "-l" a synonym for "--list"

 Updated plan to repurpose the "-l" option to "git branch".

 Will hold in 'pu' until jk/branch-l-0-deprecation progresses sufficiently.


* cc/remote-odb (2018-07-16) 9 commits
 - Documentation/config: add odb.<name>.promisorRemote
 - t0410: test fetching from many promisor remotes
 - Use odb.origin.partialclonefilter instead of core.partialclonefilter
 - Use remote_odb_get_direct() and has_remote_odb()
 - remote-odb: add remote_odb_reinit()
 - remote-odb: implement remote_odb_get_many_direct()
 - remote-odb: implement remote_odb_get_direct()
 - Add initial remote odb support
 - fetch-object: make functions return an error code


* ds/multi-pack-index (2018-07-20) 23 commits
 - midx: clear midx on repack
 - packfile: skip loading index if in multi-pack-index
 - midx: prevent duplicate packfile loads
 - midx: use midx in approximate_object_count
 - midx: use existing midx when writing new one
 - midx: use midx in abbreviation calculations
 - midx: read objects from multi-pack-index
 - config: create core.multiPackIndex setting
 - midx: write object offsets
 - midx: write object id fanout chunk
 - midx: write object ids in a chunk
 - midx: sort and deduplicate objects from packfiles
 - midx: read pack names into array
 - multi-pack-index: write pack names in chunk
 - multi-pack-index: read packfile list
 - packfile: generalize pack directory list
 - t5319: expand test data
 - multi-pack-index: load into memory
 - midx: write header information to lockfile
 - multi-pack-index: add 'write' verb
 - multi-pack-index: add builtin
 - multi-pack-index: add format details
 - multi-pack-index: add design document

 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.

 Ready to move to 'next', with some known issues to be followed up?
 cf. <xmqqefg8uplg.fsf@gitster-ct.c.googlers.com>
 cf. <CAPig+cTU--KrGcv4C_CwBZEuec4dgm_tJqL=CFWKT6vxxR016w@mail.gmail.com>


* jt/fetch-pack-negotiator (2018-06-15) 7 commits
  (merged to 'next' on 2018-07-24 at 438efcd6b1)
 + fetch-pack: introduce negotiator API
 + fetch-pack: move common check and marking together
 + fetch-pack: make negotiation-related vars local
 + fetch-pack: use ref adv. to prune "have" sent
 + fetch-pack: directly end negotiation if ACK ready
 + fetch-pack: clear marks before re-marking
 + fetch-pack: split up everything_local()
 (this branch is used by jt/fetch-nego-tip and jt/fetch-negotiator-skipping.)

 Code restructuring and a small fix to transport protocol v2 during
 fetching.

 Will merge to 'master'.


* is/parsing-line-range (2018-06-15) 2 commits
  (merged to 'next' on 2018-07-24 at a06b453f32)
 + log: prevent error if line range ends past end of file
 + blame: prevent error if range ends past end of file

 Parsing of -L[<N>][,[<M>]] parameters "git blame" and "git log"
 take has been tweaked.

 Will merge to 'master'.


* ab/checkout-default-remote (2018-06-11) 8 commits
  (merged to 'next' on 2018-07-24 at 6ef645f485)
 + checkout & worktree: introduce checkout.defaultRemote
 + checkout: add advice for ambiguous "checkout <branch>"
 + builtin/checkout.c: use "ret" variable for return
 + checkout: pass the "num_matches" up to callers
 + checkout.c: change "unique" member to "num_matches"
 + checkout.c: introduce an *_INIT macro
 + checkout.h: wrap the arguments to unique_tracking_name()
 + checkout tests: index should be clean after dwim checkout

 "git checkout" and "git worktree add" learned to honor
 checkout.defaultRemote when auto-vivifying a local branch out of a
 remote tracking branch in a repository with multiple remotes that
 have tracking branches that share the same names.

 Will merge to 'master'.


* ds/commit-graph-fsck (2018-07-16) 23 commits
  (merged to 'next' on 2018-07-24 at 6a802adc7a)
 + coccinelle: update commit.cocci
 + commit-graph: update design document
 + gc: automatically write commit-graph files
 + commit-graph: add '--reachable' option
 + commit-graph: use string-list API for input
 + fsck: verify commit-graph
 + commit-graph: verify contents match checksum
 + commit-graph: test for corrupted octopus edge
 + commit-graph: verify commit date
 + commit-graph: verify generation number
 + commit-graph: verify parent list
 + commit-graph: verify root tree OIDs
 + commit-graph: verify objects exist
 + commit-graph: verify corrupt OID fanout and lookup
 + commit-graph: verify required chunks are present
 + commit-graph: verify catches corrupt signature
 + commit-graph: add 'verify' subcommand
 + commit-graph: load a root tree from specific graph
 + commit: force commit to parse from object database
 + commit-graph: parse commit from chosen graph
 + commit-graph: fix GRAPH_MIN_SIZE
 + commit-graph: UNLEAK before die()
 + t5318-commit-graph.sh: use core.commitGraph
 (this branch is used by ds/commit-graph-with-grafts, ds/reachable and jt/commit-graph-per-object-store.)

 "git fsck" learns to make sure the optional commit-graph file is in
 a sane state.

 Will merge to 'master'.


* ma/wrapped-info (2018-05-28) 2 commits
 - usage: prefix all lines in `vreportf()`, not just the first
 - usage: extract `prefix_suffix_lines()` from `advise()`

 An attempt to help making multi-line messages fed to warning(),
 error(), and friends more easily translatable.

 Will discard and wait for a cleaned-up rewrite.
 cf. <20180529213957.GF7964@sigill.intra.peff.net>


* jm/cache-entry-from-mem-pool (2018-07-03) 8 commits
  (merged to 'next' on 2018-07-24 at 9be51a88dc)
 + block alloc: add validations around cache_entry lifecyle
 + block alloc: allocate cache entries from mem_pool
 + mem-pool: fill out functionality
 + mem-pool: add life cycle management functions
 + mem-pool: only search head block for available space
 + block alloc: add lifecycle APIs for cache_entry structs
 + read-cache: teach make_cache_entry to take object_id
 + read-cache: teach refresh_cache_entry to take istate

 For a large tree, the index needs to hold many cache entries
 allocated on heap.  These cache entries are now allocated out of a
 dedicated memory pool to amortize malloc(3) overhead.

 Will merge to 'master'.

 This makes each cache-entry larger by either 4 or 8 bytes, which is
 a bit sad, though.


* sb/diff-color-move-more (2018-07-19) 10 commits
  (merged to 'next' on 2018-07-24 at 89c893cab2)
 + diff.c: offer config option to control ws handling in move detection
 + diff.c: add white space mode to move detection that allows indent changes
 + diff.c: factor advance_or_nullify out of mark_color_as_moved
 + diff.c: decouple white space treatment from move detection algorithm
 + diff.c: add a blocks mode for moved code detection
 + diff.c: adjust hash function signature to match hashmap expectation
 + diff.c: do not pass diff options as keydata to hashmap
 + t4015: avoid git as a pipe input
 + xdiff/xdiffi.c: remove unneeded function declarations
 + xdiff/xdiff.h: remove unused flags

 "git diff --color-moved" feature has further been tweaked.

 Will merge to 'master'.

^ permalink raw reply	[relevance 3%]

* [PATCH v3 2/2] read-cache: fix directory/file conflict handling in read_index_unmerged()
  @ 2018-07-31 17:12  2%     ` Elijah Newren
  0 siblings, 0 replies; 200+ results
From: Elijah Newren @ 2018-07-31 17:12 UTC (permalink / raw)
  To: gitster; +Cc: git, sunshine, Elijah Newren

read_index_unmerged() has two intended purposes:
  * return 1 if there are any unmerged entries, 0 otherwise
  * drops any higher-stage entries down to stage #0

There are several callers of read_index_unmerged() that check the return
value to see if it is non-zero, all of which then die() if that condition
is met.  For these callers, dropping higher-stage entries down to stage #0
is a waste of resources, and returning immediately on first unmerged entry
would be better.  But it's probably only a very minor difference and isn't
the focus of this series.

The remaining callers ignore the return value and call this function for
the side effect of dropping higher-stage entries down to stage #0.  As
mentioned in commit e11d7b596970 ("'reset --merge': fix unmerged case",
2009-12-31),

    The _only_ reason we want to keep a previously unmerged entry in the
    index at stage #0 is so that we don't forget the fact that we have
    corresponding file in the work tree in order to be able to remove it
    when the tree we are resetting to does not have the path.

In fact, prior to commit d1a43f2aa4bf ("reset --hard/read-tree --reset -u:
remove unmerged new paths", 2008-10-15), read_index_unmerged() did just
remove unmerged entries from the cache immediately but that had the
unwanted effect of leaving around new untracked files in the tree from
aborted merges.

So, that's the intended purpose of this function.  The problem is that
when directory/files conflicts are present, trying to add the file to the
index at stage 0 fails (because there is still a directory in the way),
and the function returns early with a -1 return code to signify the error.
As noted above, none of the callers who want the drop-to-stage-0 behavior
check the return status, though, so this means all remaining unmerged
entries remain in the index and the callers proceed assuming otherwise.
Users then see errors of the form:

    error: 'DIR-OR-FILE' appears as both a file and as a directory
    error: DIR-OR-FILE: cannot drop to stage #0

and potentially also messages about other unmerged entries which came
lexicographically later than whatever pathname was both a file and a
directory.  Google finds a few hits searching for those messages,
suggesting there were probably a couple people who hit this besides me.
Luckily, calling `git reset --hard` multiple times would workaround
this bug.

Since the whole purpose here is to just put the entry *temporarily* into
the index so that any associated file in the working copy can be removed,
we can just skip the DFCHECK and allow both the file and directory to
appear in the index.  The temporary simultaneous appearance of the
directory and file entries in the index will be removed by the callers
by calling unpack_trees(), which excludes these unmerged entries marked
with CE_CONFLICTED flag from the resulting index, before they attempt to
write the index anywhere.

Signed-off-by: Elijah Newren <newren@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
---
 read-cache.c                         | 13 ++++++++-----
 t/t1015-read-index-unmerged.sh       |  8 ++++----
 t/t6020-merge-df.sh                  |  3 ---
 t/t6042-merge-rename-corner-cases.sh |  2 --
 4 files changed, 12 insertions(+), 14 deletions(-)

diff --git a/read-cache.c b/read-cache.c
index 372588260e..666d295a5a 100644
--- a/read-cache.c
+++ b/read-cache.c
@@ -2632,10 +2632,13 @@ int write_locked_index(struct index_state *istate, struct lock_file *lock,
 
 /*
  * Read the index file that is potentially unmerged into given
- * index_state, dropping any unmerged entries.  Returns true if
- * the index is unmerged.  Callers who want to refuse to work
- * from an unmerged state can call this and check its return value,
- * instead of calling read_cache().
+ * index_state, dropping any unmerged entries to stage #0 (potentially
+ * resulting in a path appearing as both a file and a directory in the
+ * index; the caller is responsible to clear out the extra entries
+ * before writing the index to a tree).  Returns true if the index is
+ * unmerged.  Callers who want to refuse to work from an unmerged
+ * state can call this and check its return value, instead of calling
+ * read_cache().
  */
 int read_index_unmerged(struct index_state *istate)
 {
@@ -2658,7 +2661,7 @@ int read_index_unmerged(struct index_state *istate)
 		new_ce->ce_flags = create_ce_flags(0) | CE_CONFLICTED;
 		new_ce->ce_namelen = len;
 		new_ce->ce_mode = ce->ce_mode;
-		if (add_index_entry(istate, new_ce, 0))
+		if (add_index_entry(istate, new_ce, ADD_CACHE_SKIP_DFCHECK))
 			return error("%s: cannot drop to stage #0",
 				     new_ce->name);
 	}
diff --git a/t/t1015-read-index-unmerged.sh b/t/t1015-read-index-unmerged.sh
index 32ef6bdcfa..55d22da32c 100755
--- a/t/t1015-read-index-unmerged.sh
+++ b/t/t1015-read-index-unmerged.sh
@@ -30,7 +30,7 @@ test_expect_success 'setup modify/delete + directory/file conflict' '
 	)
 '
 
-test_expect_failure 'read-tree --reset cleans unmerged entries' '
+test_expect_success 'read-tree --reset cleans unmerged entries' '
 	test_when_finished "git -C df_plus_modify_delete clean -f" &&
 	test_when_finished "git -C df_plus_modify_delete reset --hard" &&
 	(
@@ -45,7 +45,7 @@ test_expect_failure 'read-tree --reset cleans unmerged entries' '
 	)
 '
 
-test_expect_failure 'One reset --hard cleans unmerged entries' '
+test_expect_success 'One reset --hard cleans unmerged entries' '
 	test_when_finished "git -C df_plus_modify_delete clean -f" &&
 	test_when_finished "git -C df_plus_modify_delete reset --hard" &&
 	(
@@ -87,7 +87,7 @@ test_expect_success 'setup directory/file conflict + simple edit/edit' '
 	)
 '
 
-test_expect_failure 'git merge --abort succeeds despite D/F conflict' '
+test_expect_success 'git merge --abort succeeds despite D/F conflict' '
 	test_when_finished "git -C df_plus_edit_edit clean -f" &&
 	test_when_finished "git -C df_plus_edit_edit reset --hard" &&
 	(
@@ -103,7 +103,7 @@ test_expect_failure 'git merge --abort succeeds despite D/F conflict' '
 	)
 '
 
-test_expect_failure 'git am --skip succeeds despite D/F conflict' '
+test_expect_success 'git am --skip succeeds despite D/F conflict' '
 	test_when_finished "git -C df_plus_edit_edit clean -f" &&
 	test_when_finished "git -C df_plus_edit_edit reset --hard" &&
 	(
diff --git a/t/t6020-merge-df.sh b/t/t6020-merge-df.sh
index 2af1beec5f..46b506b3b7 100755
--- a/t/t6020-merge-df.sh
+++ b/t/t6020-merge-df.sh
@@ -89,9 +89,6 @@ test_expect_success 'modify/delete + directory/file conflict' '
 '
 
 test_expect_success 'modify/delete + directory/file conflict; other way' '
-	# Yes, we really need the double reset since "letters" appears as
-	# both a file and a directory.
-	git reset --hard &&
 	git reset --hard &&
 	git clean -f &&
 	git checkout modify^0 &&
diff --git a/t/t6042-merge-rename-corner-cases.sh b/t/t6042-merge-rename-corner-cases.sh
index 411550d2b6..de77bfaf4f 100755
--- a/t/t6042-merge-rename-corner-cases.sh
+++ b/t/t6042-merge-rename-corner-cases.sh
@@ -235,7 +235,6 @@ test_expect_success 'setup content merge + rename/directory conflict' '
 '
 
 test_expect_success 'rename/directory conflict + clean content merge' '
-	git reset --hard &&
 	git reset --hard &&
 	git clean -fdqx &&
 
@@ -259,7 +258,6 @@ test_expect_success 'rename/directory conflict + clean content merge' '
 '
 
 test_expect_success 'rename/directory conflict + content merge conflict' '
-	git reset --hard &&
 	git reset --hard &&
 	git clean -fdqx &&
 
-- 
2.18.0.2.gf4c50c7885


^ permalink raw reply related	[relevance 2%]

* What's cooking in git.git (Aug 2018, #01; Thu, 2)
@ 2018-08-02 23:02  3% Junio C Hamano
  0 siblings, 0 replies; 200+ results
From: Junio C Hamano @ 2018-08-02 23:02 UTC (permalink / raw)
  To: git

Here are the topics that have been cooking.  Commits prefixed with
'-' are only in 'pu' (proposed updates) while commits prefixed with
'+' are in 'next'.  The ones marked with '.' do not appear in any of
the integration branches, but I am still holding onto them.

Many topics have moved to 'master' and 'next' from 'next' to 'pu'
respectively.

You can find the changes described here in the integration branches
of the repositories listed at

    http://git-blame.blogspot.com/p/git-public-repositories.html

--------------------------------------------------
[Graduated to "master"]

* ab/checkout-default-remote (2018-06-11) 8 commits
  (merged to 'next' on 2018-07-24 at 6ef645f485)
 + checkout & worktree: introduce checkout.defaultRemote
 + checkout: add advice for ambiguous "checkout <branch>"
 + builtin/checkout.c: use "ret" variable for return
 + checkout: pass the "num_matches" up to callers
 + checkout.c: change "unique" member to "num_matches"
 + checkout.c: introduce an *_INIT macro
 + checkout.h: wrap the arguments to unique_tracking_name()
 + checkout tests: index should be clean after dwim checkout
 (this branch is used by ab/test-must-be-empty.)

 "git checkout" and "git worktree add" learned to honor
 checkout.defaultRemote when auto-vivifying a local branch out of a
 remote tracking branch in a repository with multiple remotes that
 have tracking branches that share the same names.


* bc/object-id (2018-07-16) 16 commits
  (merged to 'next' on 2018-07-24 at 23680778a9)
 + pretty: switch hard-coded constants to the_hash_algo
 + sha1-file: convert constants to uses of the_hash_algo
 + log-tree: switch GIT_SHA1_HEXSZ to the_hash_algo->hexsz
 + diff: switch GIT_SHA1_HEXSZ to use the_hash_algo
 + builtin/merge-recursive: make hash independent
 + builtin/merge: switch to use the_hash_algo
 + builtin/fmt-merge-msg: make hash independent
 + builtin/update-index: simplify parsing of cacheinfo
 + builtin/update-index: convert to using the_hash_algo
 + refs/files-backend: use the_hash_algo for writing refs
 + sha1-name: use the_hash_algo when parsing object names
 + strbuf: allocate space with GIT_MAX_HEXSZ
 + commit: express tree entry constants in terms of the_hash_algo
 + hex: switch to using the_hash_algo
 + tree-walk: replace hard-coded constants with the_hash_algo
 + cache: update object ID functions for the_hash_algo

 Conversion from uchar[40] to struct object_id continues.


* bc/sequencer-export-work-tree-as-well (2018-07-16) 1 commit
  (merged to 'next' on 2018-07-24 at 0b83ade721)
 + sequencer: pass absolute GIT_WORK_TREE to exec commands

 "git rebase" started exporting GIT_DIR environment variable and
 exposing it to hook scripts when part of it got rewritten in C.
 Instead of matching the old scripted Porcelains' behaviour,
 compensate by also exporting GIT_WORK_TREE environment as well to
 lessen the damage.  This can harm existing hooks that want to
 operate on different repository, but the current behaviour is
 already broken for them anyway.


* bp/test-drop-caches-for-windows (2018-07-12) 1 commit
  (merged to 'next' on 2018-07-24 at 257bb336c6)
 + handle lower case drive letters on Windows

 A test helper update for Windows.


* ds/commit-graph-fsck (2018-07-16) 23 commits
  (merged to 'next' on 2018-07-24 at 6a802adc7a)
 + coccinelle: update commit.cocci
 + commit-graph: update design document
 + gc: automatically write commit-graph files
 + commit-graph: add '--reachable' option
 + commit-graph: use string-list API for input
 + fsck: verify commit-graph
 + commit-graph: verify contents match checksum
 + commit-graph: test for corrupted octopus edge
 + commit-graph: verify commit date
 + commit-graph: verify generation number
 + commit-graph: verify parent list
 + commit-graph: verify root tree OIDs
 + commit-graph: verify objects exist
 + commit-graph: verify corrupt OID fanout and lookup
 + commit-graph: verify required chunks are present
 + commit-graph: verify catches corrupt signature
 + commit-graph: add 'verify' subcommand
 + commit-graph: load a root tree from specific graph
 + commit: force commit to parse from object database
 + commit-graph: parse commit from chosen graph
 + commit-graph: fix GRAPH_MIN_SIZE
 + commit-graph: UNLEAK before die()
 + t5318-commit-graph.sh: use core.commitGraph
 (this branch is used by ds/commit-graph-with-grafts, ds/reachable and jt/commit-graph-per-object-store.)

 "git fsck" learns to make sure the optional commit-graph file is in
 a sane state.


* en/dirty-merge-fixes (2018-07-11) 9 commits
  (merged to 'next' on 2018-07-24 at 7b6ca3507c)
 + merge: fix misleading pre-merge check documentation
 + merge-recursive: enforce rule that index matches head before merging
 + t6044: add more testcases with staged changes before a merge is invoked
 + merge-recursive: fix assumption that head tree being merged is HEAD
 + merge-recursive: make sure when we say we abort that we actually abort
 + t6044: add a testcase for index matching head, when head doesn't match HEAD
 + t6044: verify that merges expected to abort actually abort
 + index_has_changes(): avoid assuming operating on the_index
 + read-cache.c: move index_has_changes() from merge.c

 The recursive merge strategy did not properly ensure there was no
 change between HEAD and the index before performing its operation,
 which has been corrected.


* en/t6036-merge-recursive-tests (2018-07-11) 6 commits
  (merged to 'next' on 2018-07-24 at 75055cb6e1)
 + t6036: add a failed conflict detection case: regular files, different modes
 + t6036: add a failed conflict detection case with conflicting types
 + t6036: add a failed conflict detection case with submodule add/add
 + t6036: add a failed conflict detection case with submodule modify/modify
 + t6036: add a failed conflict detection case with symlink add/add
 + t6036: add a failed conflict detection case with symlink modify/modify

 Tests to cover various conflicting cases have been added for
 merge-recursive.


* en/t6036-recursive-corner-cases (2018-07-12) 2 commits
  (merged to 'next' on 2018-07-24 at b7b3514ef4)
 + t6036: fix broken && chain in sub-shell
 + t6036: add lots of detail for directory/file conflicts in recursive case

 Tests to cover more D/F conflict cases have been added for
 merge-recursive.


* en/t6042-insane-merge-rename-testcases (2018-07-03) 3 commits
  (merged to 'next' on 2018-07-24 at 65c80f72da)
 + t6042: add testcase covering long chains of rename conflicts
 + t6042: add testcase covering rename/rename(2to1)/delete/delete conflict
 + t6042: add testcase covering rename/add/delete conflict type

 Various glitches in the heuristics of merge-recursive strategy have
 been documented in new tests.

 I am not sure if there is a single "correct" answer everybody can
 agree on for each of these "insane" cases, though.


* en/t7405-recursive-submodule-conflicts (2018-07-11) 3 commits
  (merged to 'next' on 2018-07-24 at 6cb7d02298)
 + t7405: verify 'merge --abort' works after submodule/path conflicts
 + t7405: add a directory/submodule conflict
 + t7405: add a file/submodule conflict

 Tests to cover conflict cases that involve submodules have been
 added for merge-recursive.


* es/chain-lint-in-subshell (2018-07-31) 11 commits
  (merged to 'next' on 2018-07-31 at 4ce2a8faa4)
 + t/chainlint.sed: drop extra spaces from regex character class
  (merged to 'next' on 2018-07-24 at 9370bbdfaf)
 + t/chainlint: add chainlint "specialized" test cases
 + t/chainlint: add chainlint "complex" test cases
 + t/chainlint: add chainlint "cuddled" test cases
 + t/chainlint: add chainlint "loop" and "conditional" test cases
 + t/chainlint: add chainlint "nested subshell" test cases
 + t/chainlint: add chainlint "one-liner" test cases
 + t/chainlint: add chainlint "whitespace" test cases
 + t/chainlint: add chainlint "basic" test cases
 + t/Makefile: add machinery to check correctness of chainlint.sed
 + t/test-lib: teach --chain-lint to detect broken &&-chains in subshells
 (this branch uses es/test-fixes.)

 Look for broken "&&" chains that are hidden in subshell, many of
 which have been found and corrected.


* es/test-fixes (2018-07-17) 26 commits
  (merged to 'next' on 2018-07-24 at fd6796a3ef)
 + t5608: fix broken &&-chain
 + t9119: fix broken &&-chains
 + t9000-t9999: fix broken &&-chains
 + t7000-t7999: fix broken &&-chains
 + t6000-t6999: fix broken &&-chains
 + t5000-t5999: fix broken &&-chains
 + t4000-t4999: fix broken &&-chains
 + t3030: fix broken &&-chains
 + t3000-t3999: fix broken &&-chains
 + t2000-t2999: fix broken &&-chains
 + t1000-t1999: fix broken &&-chains
 + t0000-t0999: fix broken &&-chains
 + t9814: simplify convoluted check that command correctly errors out
 + t9001: fix broken "invoke hook" test
 + t7810: use test_expect_code() instead of hand-rolled comparison
 + t7400: fix broken "submodule add/reconfigure --force" test
 + t7201: drop pointless "exit 0" at end of subshell
 + t6036: fix broken "merge fails but has appropriate contents" tests
 + t5505: modernize and simplify hard-to-digest test
 + t5406: use write_script() instead of birthing shell script manually
 + t5405: use test_must_fail() instead of checking exit code manually
 + t/lib-submodule-update: fix "absorbing" test
 + t: drop unnecessary terminating semicolon in subshell
 + t: use sane_unset() rather than 'unset' with broken &&-chain
 + t: use test_write_lines() instead of series of 'echo' commands
 + t: use test_might_fail() instead of manipulating exit code manually
 (this branch is used by es/chain-lint-in-subshell.)

 Test clean-up and corrections.


* is/parsing-line-range (2018-06-15) 2 commits
  (merged to 'next' on 2018-07-24 at a06b453f32)
 + log: prevent error if line range ends past end of file
 + blame: prevent error if range ends past end of file

 Parsing of -L[<N>][,[<M>]] parameters "git blame" and "git log"
 take has been tweaked.


* jk/fsck-gitmodules-gently (2018-07-16) 6 commits
  (merged to 'next' on 2018-07-24 at 5b15c800db)
 + fsck: downgrade gitmodulesParse default to "info"
 + fsck: split ".gitmodules too large" error from parse failure
 + fsck: silence stderr when parsing .gitmodules
 + config: add options parameter to git_config_from_mem
 + config: add CONFIG_ERROR_SILENT handler
 + config: turn die_on_error into caller-facing enum

 Recent "security fix" to pay attention to contents of ".gitmodules"
 while accepting "git push" was a bit overly strict than necessary,
 which has been adjusted.


* jk/has-uncommitted-changes-fix (2018-07-11) 1 commit
  (merged to 'next' on 2018-07-24 at 2ea14c0afb)
 + has_uncommitted_changes(): fall back to empty tree

 "git pull --rebase" on a corrupt HEAD caused a segfault.  In
 general we substitute an empty tree object when running the in-core
 equivalent of the diff-index command, and the codepath has been
 corrected to do so as well to fix this issue.


* jm/cache-entry-from-mem-pool (2018-07-03) 8 commits
  (merged to 'next' on 2018-07-24 at 9be51a88dc)
 + block alloc: add validations around cache_entry lifecyle
 + block alloc: allocate cache entries from mem_pool
 + mem-pool: fill out functionality
 + mem-pool: add life cycle management functions
 + mem-pool: only search head block for available space
 + block alloc: add lifecycle APIs for cache_entry structs
 + read-cache: teach make_cache_entry to take object_id
 + read-cache: teach refresh_cache_entry to take istate

 For a large tree, the index needs to hold many cache entries
 allocated on heap.  These cache entries are now allocated out of a
 dedicated memory pool to amortize malloc(3) overhead.

 This makes each cache-entry larger by either 4 or 8 bytes, which is
 a bit sad, though.


* jm/send-email-tls-auth-on-batch (2018-07-16) 1 commit
  (merged to 'next' on 2018-07-24 at fb3e653f44)
 + send-email: fix tls AUTH when sending batch

 "git send-email" when using in a batched mode that limits the
 number of messages sent in a single SMTP session lost the contents
 of the variable used to choose between tls/ssl, unable to send the
 second and later batches, which has been fixed.

 This is marked to be merged to 'next' already, but I do not mind
 getting an updated version with an improved log message before that
 happens.


* js/rebase-merge-octopus (2018-07-11) 3 commits
  (merged to 'next' on 2018-07-24 at 14ad8699de)
 + rebase --rebase-merges: adjust man page for octopus support
 + rebase --rebase-merges: add support for octopus merges
 + merge: allow reading the merge commit message from a file

 "git rebase --rebase-merges" mode now handles octopus merges as
 well.


* jt/commit-graph-per-object-store (2018-07-17) 7 commits
  (merged to 'next' on 2018-07-24 at 090d1a4d59)
 + commit-graph: add repo arg to graph readers
 + commit-graph: store graph in struct object_store
 + commit-graph: add free_commit_graph
 + commit-graph: add missing forward declaration
 + object-store: add missing include
 + commit-graph: refactor preparing commit graph
 + Merge branch 'ds/commit-graph-fsck' into jt/commit-graph-per-object-store
 (this branch is used by ds/commit-graph-with-grafts and ds/reachable; uses ds/commit-graph-fsck and sb/object-store-lookup.)

 The singleton commit-graph in-core instance is made per in-core
 repository instance.


* jt/fetch-nego-tip (2018-07-03) 1 commit
  (merged to 'next' on 2018-07-24 at a9e299006d)
 + fetch-pack: support negotiation tip whitelist
 (this branch is used by ab/fetch-nego; uses jt/fetch-pack-negotiator; is tangled with jt/fetch-negotiator-skipping.)

 "git fetch" learned a new option "--negotiation-tip" to limit the
 set of commits it tells the other end as "have", to reduce wasted
 bandwidth and cycles, which would be helpful when the receiving
 repository has a lot of refs that have little to do with the
 history at the remote it is fetching from.


* jt/fetch-negotiator-skipping (2018-07-16) 1 commit
  (merged to 'next' on 2018-07-24 at 8e25a49405)
 + negotiator/skipping: skip commits during fetch
 (this branch is used by ab/fetch-nego; uses jt/fetch-pack-negotiator; is tangled with jt/fetch-nego-tip.)

 Add a server-side knob to skip commits in exponential/fibbonacci
 stride in an attempt to cover wider swath of history with a smaller
 number of iterations, potentially accepting a larger packfile
 transfer, instead of going back one commit a time during common
 ancestor discovery during the "git fetch" transaction.


* jt/fetch-pack-negotiator (2018-06-15) 7 commits
  (merged to 'next' on 2018-07-24 at 438efcd6b1)
 + fetch-pack: introduce negotiator API
 + fetch-pack: move common check and marking together
 + fetch-pack: make negotiation-related vars local
 + fetch-pack: use ref adv. to prune "have" sent
 + fetch-pack: directly end negotiation if ACK ready
 + fetch-pack: clear marks before re-marking
 + fetch-pack: split up everything_local()
 (this branch is used by ab/fetch-nego, jt/fetch-nego-tip and jt/fetch-negotiator-skipping.)

 Code restructuring and a small fix to transport protocol v2 during
 fetching.


* jt/tags-to-promised-blobs-fix (2018-07-16) 2 commits
  (merged to 'next' on 2018-07-24 at 8d7e78a671)
 + tag: don't warn if target is missing but promised
 + revision: tolerate promised targets of tags

 The lazy clone support had a few places where missing but promised
 objects were not correctly tolerated, which have been fixed.


* kg/gc-auto-windows-workaround (2018-07-09) 1 commit
  (merged to 'next' on 2018-07-24 at 71c05d27b6)
 + gc --auto: release pack files before auto packing

 "git gc --auto" opens file descriptors for the packfiles before
 spawning "git repack/prune", which would upset Windows that does
 not want a process to work on a file that is open by another
 process.  The issue has been worked around.


* sb/diff-color-move-more (2018-07-19) 10 commits
  (merged to 'next' on 2018-07-24 at 89c893cab2)
 + diff.c: offer config option to control ws handling in move detection
 + diff.c: add white space mode to move detection that allows indent changes
 + diff.c: factor advance_or_nullify out of mark_color_as_moved
 + diff.c: decouple white space treatment from move detection algorithm
 + diff.c: add a blocks mode for moved code detection
 + diff.c: adjust hash function signature to match hashmap expectation
 + diff.c: do not pass diff options as keydata to hashmap
 + t4015: avoid git as a pipe input
 + xdiff/xdiffi.c: remove unneeded function declarations
 + xdiff/xdiff.h: remove unused flags

 "git diff --color-moved" feature has further been tweaked.


* sb/object-store-lookup (2018-06-29) 33 commits
  (merged to 'next' on 2018-07-24 at dd96e29376)
 + commit.c: allow lookup_commit_reference to handle arbitrary repositories
 + commit.c: allow lookup_commit_reference_gently to handle arbitrary repositories
 + tag.c: allow deref_tag to handle arbitrary repositories
 + object.c: allow parse_object to handle arbitrary repositories
 + object.c: allow parse_object_buffer to handle arbitrary repositories
 + commit.c: allow get_cached_commit_buffer to handle arbitrary repositories
 + commit.c: allow set_commit_buffer to handle arbitrary repositories
 + commit.c: migrate the commit buffer to the parsed object store
 + commit-slabs: remove realloc counter outside of slab struct
 + commit.c: allow parse_commit_buffer to handle arbitrary repositories
 + tag: allow parse_tag_buffer to handle arbitrary repositories
 + tag: allow lookup_tag to handle arbitrary repositories
 + commit: allow lookup_commit to handle arbitrary repositories
 + tree: allow lookup_tree to handle arbitrary repositories
 + blob: allow lookup_blob to handle arbitrary repositories
 + object: allow lookup_object to handle arbitrary repositories
 + object: allow object_as_type to handle arbitrary repositories
 + tag: add repository argument to deref_tag
 + tag: add repository argument to parse_tag_buffer
 + tag: add repository argument to lookup_tag
 + commit: add repository argument to get_cached_commit_buffer
 + commit: add repository argument to set_commit_buffer
 + commit: add repository argument to parse_commit_buffer
 + commit: add repository argument to lookup_commit
 + commit: add repository argument to lookup_commit_reference
 + commit: add repository argument to lookup_commit_reference_gently
 + tree: add repository argument to lookup_tree
 + blob: add repository argument to lookup_blob
 + object: add repository argument to object_as_type
 + object: add repository argument to parse_object_buffer
 + object: add repository argument to lookup_object
 + object: add repository argument to parse_object
 + Merge branch 'sb/object-store-grafts' into sb/object-store-lookup
 (this branch is used by ds/commit-graph-with-grafts, ds/reachable and jt/commit-graph-per-object-store.)

 lookup_commit_reference() and friends have been updated to find
 in-core object for a specific in-core repository instance.


* sg/httpd-test-unflake (2018-07-12) 3 commits
  (merged to 'next' on 2018-07-24 at b7df820256)
 + t/lib-httpd: avoid occasional failures when checking access.log
 + t/lib-httpd: add the strip_access_log() helper function
 + t5541: clean up truncating access log

 httpd tests saw occasional breakage due to the way its access log
 gets inspected by the tests, which has been updated to make them
 less flaky.


* tb/grep-only-matching (2018-07-09) 2 commits
  (merged to 'next' on 2018-07-24 at 7e878b9d95)
 + grep.c: teach 'git grep --only-matching'
 + grep.c: extract show_line_header()

 "git grep" learned the "--only-matching" option.

--------------------------------------------------
[New Topics]

* ab/fsck-transfer-updates (2018-07-27) 10 commits
 - fsck: test and document unknown fsck.<msg-id> values
 - fsck: add stress tests for fsck.skipList
 - fsck: test & document {fetch,receive}.fsck.* config fallback
 - fetch: implement fetch.fsck.*
 - transfer.fsckObjects tests: untangle confusing setup
 - config doc: elaborate on fetch.fsckObjects security
 - config doc: elaborate on what transfer.fsckObjects does
 - config doc: unify the description of fsck.* and receive.fsck.*
 - config doc: don't describe *.fetchObjects twice
 - receive.fsck.<msg-id> tests: remove dead code

 The test performed at the receiving end of "git push" to prevent
 bad objects from entering repository can be customized via
 receive.fsck.* configuration variables; we now have gained a
 counterpart to do the same on the "git fetch" side, with
 fetch.fsck.* configuration variables.

 Will merge to 'next'.


* ab/test-must-be-empty (2018-07-30) 1 commit
 - tests: make use of the test_must_be_empty function

 Test updates.

 Will merge to 'next'.


* ab/test-must-be-empty-for-master (2018-07-30) 1 commit
 - tests: make use of the test_must_be_empty function

 Test updates.

 Did anybody spot incorrect conversion in this yet?


* cb/p4-pre-submit-hook (2018-08-01) 1 commit
 - git-p4: add the `p4-pre-submit` hook

 "git p4 submit" learns to ask its own pre-submit hook if it should
 continue with submitting.

 Will merge to 'next'.


* es/rebase-i-author-script-fix (2018-07-31) 4 commits
 - sequencer: don't die() on bogus user-edited timestamp
 - sequencer: fix "rebase -i --root" corrupting author header timestamp
 - sequencer: fix "rebase -i --root" corrupting author header timezone
 - sequencer: fix "rebase -i --root" corrupting author header
 (this branch is used by pw/rebase-i-author-script-fix.)

 The "author-script" file "git rebase -i" creates got broken when
 we started to move the command away from shell script, which is
 getting fixed now.

 Will merge to 'next'.


* hn/highlight-sideband-keywords (2018-07-31) 1 commit
 - sideband: highlight keywords in remote output

 The sideband code learned to optionally paint selected keywords at
 the beginning of incoming lines on the receiving end.


* jn/subtree-test-fixes (2018-07-30) 2 commits
 - subtree test: simplify preparation of expected results
 - subtree test: add missing && to &&-chain

 Test fix.

 Will merge to 'next'.


* ms/http-proto-doc (2018-07-30) 1 commit
 - doc: fix want-capability separator

 Doc fix.

 Will merge to 'next'.


* nd/pack-objects-threading-doc (2018-07-30) 1 commit
 - pack-objects: document about thread synchronization

 Doc fix.

 Will merge to 'next'.


* sb/indent-heuristic-optim (2018-08-01) 1 commit
 - xdiff: reduce indent heuristic overhead

 "git diff --indent-heuristic" had a bad corner case performance.

 Will merge to 'next'.


* ab/fetch-nego (2018-08-01) 3 commits
 - fetch doc: cross-link two new negotiation options
 - negotiator: unknown fetch.negotiationAlgorithm should error out
 - Merge branch 'jt/fetch-nego-tip' into ab/fetch-nego

 Update to a few other topics.

 Will merge to 'next'.


* ab/fetch-tags-noclobber (2018-07-31) 10 commits
 - fetch: stop clobbering existing tags without --force
 - pull doc: fix a long-standing grammar error
 - fetch tests: add a test clobbering tag behavior
 - fetch tests: correct a comment "remove it" -> "remove them"
 - push doc: correct lies about how push refspecs work
 - push tests: assert re-pushing annotated tags
 - push tests: add more testing for forced tag pushing
 - push tests: fix logic error in "push" test assertion
 - push tests: remove redundant 'git push' invocation
 - fetch tests: change "Tag" test tag to "testTag"

 "git fetch" used to apply the same "fast-forward" rule and allow
 tags to move without "--force" option, which made little sense,
 which has been corrected.

 Expecting a reroll.
 cf. <xmqq4lgfcn5a.fsf@gitster-ct.c.googlers.com>
 cf. <xmqqzhy7b7v9.fsf@gitster-ct.c.googlers.com>


* bp/checkout-new-branch-optim (2018-07-31) 1 commit
 - checkout: optimize "git checkout -b <new_branch>"

 "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.

 Waiting for review comments to be responded.
 cf. <CACsJy8DMEMsDnKZc65K-0EJcm2udXZ7OKY=xoFmX4COM0dSH=g@mail.gmail.com>


* es/mw-to-git-chain-fix (2018-07-31) 1 commit
 - mw-to-git/t9360: fix broken &&-chain

 Test fix.

 Will merge to 'next'.


* jk/merge-subtree-heuristics (2018-08-02) 1 commit
 - score_trees(): fix iteration over trees with missing entries

 The automatic tree-matching in "git merge -s subtree" was broken 5
 years ago and nobody has noticed since then, which is now fixed.

 Will merge to 'next'.


* jt/connectivity-check-after-unshallow (2018-08-01) 1 commit
 - fetch-pack: unify ref in and out param

 Recent update to the transport layer broke ref updates after "git
 fetch", which is now fixed.

 Will merge to 'next'.


* jt/refspec-dwim-precedence-fix (2018-08-02) 1 commit
 - remote: make refspec follow the same disambiguation rule as local refs

 "git fetch $there refs/heads/s" ought to fetch the tip of the
 branch 's', but when "refs/heads/refs/heads/s", i.e. a branch whose
 name is "refs/heads/s" exists at the same time, fetched that one
 instead by mistake.  This has been corrected to honor the usual
 disambiguation rules for abbreviated refnames.

 Will merge to 'next'.


* nd/clone-case-smashing-warning (2018-07-31) 1 commit
 - clone: report duplicate entries on case-insensitive filesystems

 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.

 Discussion getting petered out.
 Doing this portably and extending it to UTF-8 normalization issue
 HFS+ has would be costly.

 cf. <20180728095659.GA21450@sigill.intra.peff.net>
 cf. <xmqq1sbh7phx.fsf@gitster-ct.c.googlers.com>


* nd/unpack-trees-with-cache-tree (2018-07-31) 4 commits
 - unpack-trees: cheaper index update when walking by cache-tree
 - unpack-trees: reduce malloc in cache-tree walk
 - unpack-trees: optimize walking same trees with cache-tree
 - unpack-trees.c: add performance tracing

 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 is done in this topic.


* rs/remote-mv-leakfix (2018-08-01) 1 commit
 - remote: clear string_list after use in mv()

 Leakfix.

 Will merge to 'next'.


* sb/config-write-fix (2018-08-01) 3 commits
 - git-config: document accidental multi-line setting in deprecated syntax
 - config: fix case sensitive subsection names on writing
 - t1300: document current behavior of setting options

 Recent update to "git config" broke updating variable in a
 subsection, which has been corrected.

 Not quite?
 cf. <xmqq4lgc1rbv.fsf@gitster-ct.c.googlers.com>


* sb/range-diff-colors (2018-08-01) 9 commits
 - fixup! t3206: add color test for range-diff --dual-color
 - diff.c: rewrite emit_line_0 more understandably
 - diff.c: compute reverse locally in emit_line_0
 - diff: use emit_line_0 once per line
 - diff.c: add set_sign to emit_line_0
 - diff.c: reorder arguments for emit_line_ws_markup
 - diff.c: simplify caller of emit_line_0
 - t3206: add color test for range-diff --dual-color
 - test_decode_color: understand FAINT and ITALIC
 (this branch uses js/range-diff; is tangled with es/format-patch-rangediff.)


* sg/t1404-update-ref-test-timeout (2018-08-01) 1 commit
 - t1404: increase core.packedRefsTimeout to avoid occasional test failure

 An attempt to unflake a test a bit.


* sg/travis-retrieve-trash-upon-failure (2018-08-01) 1 commit
 - travis-ci: include the trash directories of failed tests in the trace log

 The Travis CI scripts were taught to ship back the test data from
 failed tests.

 Will merge to 'next'.


* jt/fetch-follow-fix (2018-08-01) 1 commit
 - fetch-pack: unify ref in and out param

 "git fetch" sometimes failed to update the remote-tracking refs,
 which has been corrected.

 Will merge to 'next'.


* ab/sha1dc (2018-08-02) 1 commit
 - sha1dc: update from upstream

 AIX portability update for SHADC hash, imported from upstream.

 Will merge to 'next'.


* es/want-color-fd-defensive (2018-08-02) 1 commit
 - color: protect against out-of-bounds array access/assignment

 Futureproofing a helper function that can easily misused.

 Will merge to 'next'.


* pw/rebase-i-author-script-fix (2018-08-02) 2 commits
 - sequencer: fix quoting in write_author_script
 - sequencer: handle errors in read_author_ident()
 (this branch uses es/rebase-i-author-script-fix.)

 Recent "git rebase -i" update started to write bogusly formatted
 author-script, with a matching broken reading code.  These are
 being fixed.

 Undecided.
 Is it the list consensus to favor this "with extra code, read the
 script written by bad writer" approach?


* rs/parse-opt-lithelp (2018-08-02) 6 commits
 - parse-options: automatically infer PARSE_OPT_LITERAL_ARGHELP
 - shortlog: correct option help for -w
 - send-pack: specify --force-with-lease argument help explicitly
 - pack-objects: specify --index-version argument help explicitly
 - difftool: remove angular brackets from argument help
 - add, update-index: fix --chmod argument help

 The parse-options machinery learned to refrain from enclosing
 placeholder string inside a "<bra" and "ket>" pair automatically
 without PARSE_OPT_LITERAL_ARGHELP.  Existing help text for option
 arguments that are not formatted correctly have been identified and
 fixed.

 Will merge to 'next'.

--------------------------------------------------
[Stalled]

* ma/wrapped-info (2018-05-28) 2 commits
 - usage: prefix all lines in `vreportf()`, not just the first
 - usage: extract `prefix_suffix_lines()` from `advise()`

 An attempt to help making multi-line messages fed to warning(),
 error(), and friends more easily translatable.

 Will discard and wait for a cleaned-up rewrite.
 cf. <20180529213957.GF7964@sigill.intra.peff.net>

* hn/bisect-first-parent (2018-04-21) 1 commit
 - bisect: create 'bisect_flags' parameter in find_bisection()

 Preliminary code update to allow passing more flags down the
 bisection codepath in the future.

 We do not add random code that does not have real users to our
 codebase, so let's have it wait until such a real code materializes
 before too long.


* av/fsmonitor-updates (2018-01-04) 6 commits
 - fsmonitor: use fsmonitor data in `git diff`
 - fsmonitor: remove debugging lines from t/t7519-status-fsmonitor.sh
 - fsmonitor: make output of test-dump-fsmonitor more concise
 - fsmonitor: update helper tool, now that flags are filled later
 - fsmonitor: stop inline'ing mark_fsmonitor_valid / _invalid
 - dir.c: update comments to match argument name

 Code clean-up on fsmonitor integration, plus optional utilization
 of the fsmonitor data in diff-files.

 Waiting for an update.
 cf. <alpine.DEB.2.21.1.1801042335130.32@MININT-6BKU6QN.europe.corp.microsoft.com>


* pb/bisect-helper-2 (2018-07-23) 8 commits
 - t6030: make various test to pass GETTEXT_POISON tests
 - bisect--helper: `bisect_start` shell function partially in C
 - bisect--helper: `get_terms` & `bisect_terms` shell function in C
 - bisect--helper: `bisect_next_check` shell function in C
 - bisect--helper: `check_and_set_terms` shell function in C
 - wrapper: move is_empty_file() and rename it as is_empty_or_missing_file()
 - bisect--helper: `bisect_write` shell function in C
 - bisect--helper: `bisect_reset` shell function in C

 Expecting a reroll.
 cf. <0102015f5e5ee171-f30f4868-886f-47a1-a4e4-b4936afc545d-000000@eu-west-1.amazonses.com>

 I just rebased the topic to a newer base as it did not build
 standalone with the base I originally queued the topic on, but
 otherwise there is no update to address any of the review comments
 in the thread above---we are still waiting for a reroll.


* jk/drop-ancient-curl (2017-08-09) 5 commits
 - http: #error on too-old curl
 - curl: remove ifdef'd code never used with curl >=7.19.4
 - http: drop support for curl < 7.19.4
 - http: drop support for curl < 7.16.0
 - http: drop support for curl < 7.11.1

 Some code in http.c that has bitrot is being removed.

 Expecting a reroll.


* mk/use-size-t-in-zlib (2017-08-10) 1 commit
 . zlib.c: use size_t for size

 The wrapper to call into zlib followed our long tradition to use
 "unsigned long" for sizes of regions in memory, which have been
 updated to use "size_t".

 Needs resurrecting by making sure the fix is good and still applies
 (or adjusted to today's codebase).

--------------------------------------------------
[Cooking]

* es/diff-color-moved-fix (2018-07-25) 1 commit
  (merged to 'next' on 2018-08-02 at 233bccfbfb)
 + diff: --color-moved: rename "dimmed_zebra" to "dimmed-zebra"

 One of the "diff --color-moved" mode "dimmed_zebra" that was named
 in an unusual way has been deprecated and replaced by
 "dimmed-zebra".

 Will merge to 'master'.


* pw/add-p-select (2018-07-26) 4 commits
 - add -p: optimize line selection for short hunks
 - add -p: allow line selection to be inverted
 - add -p: select modified lines correctly
 - add -p: select individual hunk lines

 "git add -p" interactive interface learned to let users choose
 individual added/removed lines to be used in the operation, instead
 of accepting or rejecting a whole hunk.

 Will merge to and cook in 'next'.

 I found the feature to be hard to explain, and may result in more
 end-user complaints, but let's see.


* mk/http-backend-content-length (2018-07-30) 4 commits
 - t5562: avoid non-portable "export FOO=bar" construct
 - http-backend: respect CONTENT_LENGTH for receive-pack
 - http-backend: respect CONTENT_LENGTH as specified by rfc3875
 - http-backend: cleanup writing to child process

 The http-backend (used for smart-http transport) used to slurp the
 whole input until EOF, without paying attention to CONTENT_LENGTH
 that is supplied in the environment and instead expecting the Web
 server to close the input stream.  This has been fixed.

 Will merge to 'next'.


* ds/commit-graph-with-grafts (2018-07-19) 8 commits
  (merged to 'next' on 2018-08-02 at 0ee624e329)
 + commit-graph: close_commit_graph before shallow walk
 + commit-graph: not compatible with uninitialized repo
 + commit-graph: not compatible with grafts
 + commit-graph: not compatible with replace objects
 + test-repository: properly init repo
 + commit-graph: update design document
 + refs.c: upgrade for_each_replace_ref to be a each_repo_ref_fn callback
 + refs.c: migrate internal ref iteration to pass thru repository argument

 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.

 Will merge to 'master'.


* jk/core-use-replace-refs (2018-07-18) 3 commits
  (merged to 'next' on 2018-08-02 at 90fb6b1056)
 + add core.usereplacerefs config option
 + check_replace_refs: rename to read_replace_refs
 + check_replace_refs: fix outdated comment

 A new configuration variable core.usereplacerefs has been added,
 primarily to help server installations that want to ignore the
 replace mechanism altogether.

 Will merge to 'master'.


* nd/i18n (2018-07-23) 23 commits
  (merged to 'next' on 2018-08-02 at 904a22a5d1)
 + transport-helper.c: mark more strings for translation
 + transport.c: mark more strings for translation
 + sha1-file.c: mark more strings for translation
 + sequencer.c: mark more strings for translation
 + replace-object.c: mark more strings for translation
 + refspec.c: mark more strings for translation
 + refs.c: mark more strings for translation
 + pkt-line.c: mark more strings for translation
 + object.c: mark more strings for translation
 + exec-cmd.c: mark more strings for translation
 + environment.c: mark more strings for translation
 + dir.c: mark more strings for translation
 + convert.c: mark more strings for translation
 + connect.c: mark more strings for translation
 + config.c: mark more strings for translation
 + commit-graph.c: mark more strings for translation
 + builtin/replace.c: mark more strings for translation
 + builtin/pack-objects.c: mark more strings for translation
 + builtin/grep.c: mark strings for translation
 + builtin/config.c: mark more strings for translation
 + archive-zip.c: mark more strings for translation
 + archive-tar.c: mark more strings for translation
 + Update messages in preparation for i18n

 Many more strings are prepared for l10n.

 Will merge to 'master'.


* sb/histogram-less-memory (2018-07-23) 4 commits
  (merged to 'next' on 2018-08-02 at cfb02aa3b5)
 + xdiff/histogram: remove tail recursion
 + xdiff/xhistogram: move index allocation into find_lcs
 + xdiff/xhistogram: factor out memory cleanup into free_index()
 + xdiff/xhistogram: pass arguments directly to fall_back_to_classic_diff

 "git diff --histogram" had a bad memory usage pattern, which has
 been rearranged to reduce the peak usage.

 Will merge to 'master'.


* bb/make-developer-pedantic (2018-07-25) 1 commit
  (merged to 'next' on 2018-08-02 at c738a84b7e)
 + Makefile: add a DEVOPTS flag to get pedantic compilation

 "make DEVELOPER=1 DEVOPTS=pedantic" allows developers to compile
 with -pedantic option, which may catch more problematic program
 constructs and potential bugs.

 Will merge to 'master'.


* bw/clone-ref-prefixes (2018-07-20) 1 commit
  (merged to 'next' on 2018-08-02 at c8ad140ab0)
 + clone: send ref-prefixes when using protocol v2

 The wire-protocol v2 relies on the client to send "ref prefixes" to
 limit the bandwidth spent on the initial ref advertisement.  "git
 clone" when learned to speak v2 forgot to do so, which has been
 corrected.

 Will merge to 'master'.


* bw/fetch-pack-i18n (2018-07-23) 1 commit
  (merged to 'next' on 2018-08-02 at df72001755)
 + fetch-pack: mark die strings for translation

 i18n updates.

 Will merge to 'master'.


* bw/protocol-v2 (2018-07-24) 1 commit
  (merged to 'next' on 2018-08-02 at f4076b3e94)
 + pack-protocol: mention and point to docs for protocol v2

 Doc update.

 Will merge to 'master'.


* ds/reachable (2018-07-20) 18 commits
 - commit-reach: use can_all_from_reach
 - commit-reach: make can_all_from_reach... linear
 - commit-reach: replace ref_newer logic
 - test-reach: test commit_contains
 - test-reach: test can_all_from_reach_with_flags
 - test-reach: test reduce_heads
 - test-reach: test get_merge_bases_many
 - test-reach: test is_descendant_of
 - test-reach: test in_merge_bases
 - test-reach: create new test tool for ref_newer
 - commit-reach: move can_all_from_reach_with_flags
 - upload-pack: generalize commit date cutoff
 - upload-pack: refactor ok_to_give_up()
 - upload-pack: make reachable() more generic
 - commit-reach: move commit_contains from ref-filter
 - commit-reach: move ref_newer from remote.c
 - commit.h: remove method declarations
 - commit-reach: move walk methods from commit.c

 The code for computing history reachability has been shuffled,
 obtained a bunch of new tests to cover them, and then being
 improved.

 Will merge to and cook in 'next'.


* en/merge-recursive-skip-fix (2018-07-27) 2 commits
 - merge-recursive: preserve skip_worktree bit when necessary
 - t3507: add a testcase showing failure with sparse checkout

 When the sparse checkout feature is in use, "git cherry-pick" and
 other mergy operations lost the skip_worktree bit when a path that
 is excluded from checkout requires content level merge, which is
 resolved as the same as the HEAD version, without materializing the
 merge result in the working tree, which made the path appear as
 deleted.  This has been corrected by preserving the skip_worktree
 bit (and not materializing the file in the working tree).

 Will merge to 'next'.


* es/format-patch-interdiff (2018-07-23) 6 commits
 - format-patch: allow --interdiff to apply to a lone-patch
 - log-tree: show_log: make commentary block delimiting reusable
 - interdiff: teach show_interdiff() to indent interdiff
 - format-patch: teach --interdiff to respect -v/--reroll-count
 - format-patch: add --interdiff option to embed diff in cover letter
 - format-patch: allow additional generated content in make_cover_letter()
 (this branch is used by es/format-patch-rangediff.)

 "git format-patch" learned a new "--interdiff" option to explain
 the difference between this version and the previous atttempt in
 the cover letter (or after the tree-dashes as a comment).

 Stuck in review?
 cf. <CAPig+cSuYUYSPTuKx08wcmQM-G12_-W2T4BS07fA=6grM1b8Gw@mail.gmail.com>


* es/format-patch-rangediff (2018-07-30) 10 commits
 - format-patch: allow --range-diff to apply to a lone-patch
 - format-patch: add --creation-factor tweak for --range-diff
 - format-patch: teach --range-diff to respect -v/--reroll-count
 - format-patch: extend --range-diff to accept revision range
 - format-patch: add --range-diff option to embed diff in cover letter
 - range-diff: relieve callers of low-level configuration burden
 - range-diff: publish default creation factor
 - range-diff: respect diff_option.file rather than assuming 'stdout'
 - Merge branch 'es/format-patch-interdiff' into es/format-patch-rangediff
 - Merge branch 'js/range-diff' into es/format-patch-rangediff
 (this branch uses es/format-patch-interdiff and js/range-diff; is tangled with sb/range-diff-colors.)

 "git format-patch" learned a new "--range-diff" option to explain
 the difference between this version and the previous atttempt in
 the cover letter (or after the tree-dashes as a comment).

 Need to wait for the prereq topics to solidify a bit more.


* jk/banned-function (2018-07-26) 5 commits
 - banned.h: mark strncpy() as banned
 - banned.h: mark sprintf() as banned
 - banned.h: mark strcat() as banned
 - automatically ban strcpy()
 - Merge branch 'sb/blame-color' into jk/banned-function

 It is too easy to misuse system API functions such as strcat();
 these selected functions are now forbidden in this codebase and
 will cause a compilation failure.

 Will merge to 'next'.


* jk/size-t (2018-07-24) 6 commits
  (merged to 'next' on 2018-08-02 at 6f861e05f0)
 + strbuf_humanise: use unsigned variables
 + pass st.st_size as hint for strbuf_readlink()
 + strbuf_readlink: use ssize_t
 + strbuf: use size_t for length in intermediate variables
 + reencode_string: use size_t for string lengths
 + reencode_string: use st_add/st_mult helpers

 Code clean-up to use size_t/ssize_t when they are the right type.

 Will merge to 'master'.


* js/t7406-recursive-submodule-update-order-fix (2018-07-23) 1 commit
  (merged to 'next' on 2018-08-02 at 217ea36a37)
 + t7406: avoid failures solely due to timing issues

 Test fix.

 Will merge to 'master'.


* js/vscode (2018-07-30) 9 commits
 - vscode: let cSpell work on commit messages, too
 - vscode: add a dictionary for cSpell
 - vscode: use 8-space tabs, no trailing ws, etc for Git's source code
 - vscode: wrap commit messages at column 72 by default
 - vscode: only overwrite C/C++ settings
 - mingw: define WIN32 explicitly
 - cache.h: extract enum declaration from inside a struct declaration
 - vscode: hard-code a couple defines
 - contrib: add a script to initialize VS Code configuration

 Add a script (in contrib/) to help users of VSCode work better with
 our codebase.

 Will merge to 'next'.


* jt/tag-following-with-proto-v2-fix (2018-07-24) 2 commits
  (merged to 'next' on 2018-08-02 at d9eabdea95)
 + fetch: send "refs/tags/" prefix upon CLI refspecs
 + t5702: test fetch with multiple refspecs at a time

 The wire-protocol v2 relies on the client to send "ref prefixes" to
 limit the bandwidth spent on the initial ref advertisement.  "git
 fetch $remote branch:branch" that asks tags that point into the
 history leading to the "branch" automatically followed sent to
 narrow prefix and broke the tag following, which has been fixed.

 Will merge to 'master'.


* nd/pack-deltify-regression-fix (2018-07-23) 1 commit
  (merged to 'next' on 2018-08-02 at f3b2bf0fef)
 + pack-objects: fix performance issues on packing large deltas

 In a recent update in 2.18 era, "git pack-objects" started
 producing a larger than necessary packfiles by missing
 opportunities to use large deltas.

 Will cook in 'next'.


* sb/trailers-docfix (2018-07-20) 1 commit
  (merged to 'next' on 2018-08-02 at ba348fafcd)
 + Documentation/git-interpret-trailers: explain possible values

 Doc update.

 Will merge to 'master'.


* sg/coccicheck-updates (2018-07-23) 5 commits
  (merged to 'next' on 2018-08-02 at b5548ff3a9)
 + coccinelle: extract dedicated make target to clean Coccinelle's results
 + coccinelle: put sane filenames into output patches
 + coccinelle: exclude sha1dc source files from static analysis
 + coccinelle: use $(addsuffix) in 'coccicheck' make target
 + coccinelle: mark the 'coccicheck' make target as .PHONY

 Update the way we use Coccinelle to find out-of-style code that
 need to be modernised.

 Will merge to 'master'.


* sg/fast-import-dump-refs-on-checkpoint-fix (2018-07-20) 1 commit
  (merged to 'next' on 2018-08-02 at f5c05b5a2c)
 + t9300: wait for background fast-import process to die after killing it

 Test update.

 Will merge to 'master'.


* sg/travis-cocci-diagnose-failure (2018-07-23) 2 commits
  (merged to 'next' on 2018-08-02 at 54808a8778)
 + travis-ci: fail if Coccinelle static analysis found something to transform
 + travis-ci: run Coccinelle static analysis with two parallel jobs

 Update the way we run static analysis tool at TravisCI to make it
 easier to use its findings.

 Will merge to 'master'.


* ab/newhash-is-sha256 (2018-07-26) 2 commits
 - doc hash-function-transition: pick SHA-256 as NewHash
 - doc hash-function-transition: note the lack of a changelog

 Documentation update.

 Will merge to 'next'.


* bb/redecl-enum-fix (2018-07-26) 1 commit
 - packfile: ensure that enum object_type is defined

 Compilation fix.

 Will merge to 'next'.


* jh/structured-logging (2018-07-25) 25 commits
 - structured-logging: add config data facility
 - structured-logging: t0420 tests for interacitve child_summary
 - structured-logging: t0420 tests for child process detail events
 - structured-logging: add child process classification
 - structured-logging: add detail-events for child processes
 - structured-logging: add structured logging to remote-curl
 - structured-logging: t0420 tests for aux-data
 - structured-logging: add aux-data for size of sparse-checkout file
 - structured-logging: add aux-data for index size
 - structured-logging: add aux-data facility
 - structured-logging: t0420 tests for timers
 - structured-logging: add timer around preload_index
 - structured-logging: add timer around wt-status functions
 - structured-logging: add timer around do_write_index
 - structured-logging: add timer around do_read_index
 - structured-logging: add timer facility
 - structured-logging: add detail-event for lazy_init_name_hash
 - structured-logging: add detail-event facility
 - structured-logging: t0420 basic tests
 - structured-logging: set sub_command field for checkout command
 - structured-logging: set sub_command field for branch command
 - structured-logging: add session-id to log events
 - structured-logging: add structured logging framework
 - structured-logging: add STRUCTURED_LOGGING=1 to Makefile
 - structured-logging: design document
 (this branch uses jh/json-writer.)

 Will merge to 'next'.


* en/abort-df-conflict-fixes (2018-07-31) 2 commits
 - read-cache: fix directory/file conflict handling in read_index_unmerged()
 - t1015: demonstrate directory/file conflict recovery failures

 "git merge --abort" etc. did not clean things up properly when
 there were conflicted entries in certain order that are involved
 in D/F conflicts.  This has been corrected.

 Will merge to 'next'.


* hs/gpgsm (2018-07-20) 7 commits
  (merged to 'next' on 2018-08-02 at db28bffe4f)
 + gpg-interface t: extend the existing GPG tests with GPGSM
 + gpg-interface: introduce new signature format "x509" using gpgsm
 + gpg-interface: introduce new config to select per gpg format program
 + gpg-interface: do not hardcode the key string len anymore
 + gpg-interface: introduce an abstraction for multiple gpg formats
 + t/t7510: check the validation of the new config gpg.format
 + gpg-interface: add new config to select how to sign a commit

 Teach "git tag -s" etc. a few configuration varaibles (gpg.format
 that can be set to "openpgp" or "x509", and gpg.<format>.program
 that is used to specify what program to use to deal with the format)
 to allow x.509 certs with CMS via "gpgsm" to be used instead of
 openpgp via "gnupg".

 Will merge to 'master'.


* jn/gc-auto (2018-07-17) 3 commits
 - gc: do not return error for prior errors in daemonized mode
 - gc: exit with status 128 on failure
 - gc: improve handling of errors reading gc.log

 "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.

 Stuck in review?
 cf. <20180717201348.GD26218@sigill.intra.peff.net>


* sb/submodule-update-in-c (2018-07-18) 6 commits
 - submodule--helper: introduce new update-module-mode helper
 - builtin/submodule--helper: factor out method to update a single submodule
 - builtin/submodule--helper: store update_clone information in a struct
 - builtin/submodule--helper: factor out submodule updating
 - git-submodule.sh: rename unused variables
 - git-submodule.sh: align error reporting for update mode to use path

 "git submodule update" is getting rewritten piece-by-piece into C.

 Will merge to 'next'.


* sl/commit-dry-run-with-short-output-fix (2018-07-30) 4 commits
 . commit: fix exit code when doing a dry run
 . wt-status: teach wt_status_collect about merges in progress
 . wt-status: rename commitable to committable
 . t7501: add coverage for flags which imply dry runs

 "git commit --dry-run" gave a correct exit status even during a
 conflict resolution toward a merge, but it did not with the
 "--short" option, which has been corrected.

 Seems to break 7512, 3404 and 7060 in 'pu'.


* tg/rerere (2018-07-16) 11 commits
 - rerere: recalculate conflict ID when unresolved conflict is committed
 - rerere: teach rerere to handle nested conflicts
 - rerere: return strbuf from handle path
 - rerere: factor out handle_conflict function
 - rerere: only return whether a path has conflicts or not
 - rerere: fix crash when conflict goes unresolved
 - rerere: add documentation for conflict normalization
 - rerere: mark strings for translation
 - rerere: wrap paths in output in sq
 - rerere: lowercase error messages
 - rerere: unify error messages when read_cache fails

 Fixes to "git rerere" corner cases, especially when conflict
 markers cannot be parsed in the file.

 I am not sure about the "nested" stuff, though.


* jk/ui-color-always-to-auto (2018-07-18) 1 commit
  (merged to 'next' on 2018-08-02 at 1a054baf0e)
 + Documentation: fix --color option formatting

 Doc formatting fix.

 Will merge to 'master'.


* jh/json-writer (2018-07-16) 1 commit
  (merged to 'next' on 2018-08-02 at d841450c7d)
 + json_writer: new routines to create JSON data
 (this branch is used by jh/structured-logging.)

 Preparatory code to later add json output for telemetry data.

 Will merge to 'master'.


* ag/rebase-i-in-c (2018-07-31) 20 commits
 - rebase -i: move rebase--helper modes to rebase--interactive
 - rebase -i: remove git-rebase--interactive.sh
 - rebase--interactive2: rewrite the submodes of interactive rebase in C
 - rebase -i: implement the main part of interactive rebase as a builtin
 - rebase -i: rewrite init_basic_state() in C
 - rebase -i: rewrite write_basic_state() in C
 - rebase -i: rewrite the rest of init_revisions_and_shortrevisions() in C
 - rebase -i: implement the logic to initialize $revisions in C
 - rebase -i: remove unused modes and functions
 - rebase -i: rewrite complete_action() in C
 - t3404: todo list with commented-out commands only aborts
 - sequencer: change the way skip_unnecessary_picks() returns its result
 - sequencer: refactor append_todo_help() to write its message to a buffer
 - rebase -i: rewrite checkout_onto() in C
 - rebase -i: rewrite setup_reflog_action() in C
 - sequencer: add a new function to silence a command, except if it fails
 - rebase -i: rewrite the edit-todo functionality in C
 - editor: add a function to launch the sequence editor
 - rebase -i: rewrite append_todo_help() in C
 - sequencer: make two functions and an enum from sequencer.c public

 Rewrite of the remaining "rebase -i" machinery in C.

 Will merge to 'next'.


* js/range-diff (2018-07-30) 21 commits
 - range-diff: use dim/bold cues to improve dual color mode
 - range-diff: make --dual-color the default mode
 - range-diff: left-pad patch numbers
 - completion: support `git range-diff`
 - range-diff: populate the man page
 - range-diff --dual-color: fix bogus white-space warning
 - range-diff: offer to dual-color the diffs
 - diff: add an internal option to dual-color diffs of diffs
 - color: add the meta color GIT_COLOR_REVERSE
 - range-diff: use color for the commit pairs
 - range-diff: add tests
 - range-diff: do not show "function names" in hunk headers
 - range-diff: adjust the output of the commit pairs
 - range-diff: suppress the diff headers
 - range-diff: indent the diffs just like tbdiff
 - range-diff: right-trim commit messages
 - range-diff: also show the diff between patches
 - range-diff: improve the order of the shown commits
 - range-diff: first rudimentary implementation
 - Introduce `range-diff` to compare iterations of a topic branch
 - linear-assignment: a function to solve least-cost assignment problems
 (this branch is used by es/format-patch-rangediff and sb/range-diff-colors.)

 "git tbdiff" that lets us compare individual patches in two
 iterations of a topic has been rewritten and made into a built-in
 command.

 It seems there will another hopefully the final reroll coming.
 cf. <nycvar.QRO.7.76.6.1808011800570.71@tvgsbejvaqbjf.bet>


* lt/date-human (2018-07-09) 1 commit
 - Add 'human' date format

 A new date format "--date=human" that morphs its output depending
 on how far the time is from the current time has been introduced.
 "--date=auto" can be used to use this new format when the output is
 goint to the pager or to the terminal and otherwise the default
 format.


* ot/ref-filter-object-info (2018-07-17) 5 commits
 - ref-filter: use oid_object_info() to get object
 - ref-filter: merge get_obj and get_object
 - ref-filter: initialize eaten variable
 - ref-filter: fill empty fields with empty values
 - ref-filter: add info_source to valid_atom

 A few atoms like %(objecttype) and %(objectsize) in the format
 specifier of "for-each-ref --format=<format>" can be filled without
 getting the full contents of the object, but just with the object
 header.  These cases have been optimzied by calling
 oid_object_info() API.

 Will merge to 'next'.


* pk/rebase-in-c (2018-07-30) 3 commits
 - builtin/rebase: support running "git rebase <upstream>"
 - rebase: refactor common shell functions into their own file
 - rebase: start implementing it as a builtin

 Rewrite of the "rebase" machinery in C.

 Will merge to 'next'.


* jk/branch-l-1-repurpose (2018-06-22) 1 commit
 - branch: make "-l" a synonym for "--list"

 Updated plan to repurpose the "-l" option to "git branch".

 Will hold in 'pu' until jk/branch-l-0-deprecation progresses sufficiently.


* cc/remote-odb (2018-08-02) 9 commits
 - Documentation/config: add odb.<name>.promisorRemote
 - t0410: test fetching from many promisor remotes
 - Use odb.origin.partialclonefilter instead of core.partialclonefilter
 - Use remote_odb_get_direct() and has_remote_odb()
 - remote-odb: add remote_odb_reinit()
 - remote-odb: implement remote_odb_get_many_direct()
 - remote-odb: implement remote_odb_get_direct()
 - Add initial remote odb support
 - fetch-object: make functions return an error code

 Implement lazy fetches of missing objects to complement the
 experimental partial clone feature.

 I haven't seen much interest in this topic on list.  What's the
 doneness of this thing?

 I do not particularly mind adding code to support a niche feature
 as long as it is cleanly made and it is clear that the feature
 won't negatively affect those who do not use it, so a review from
 that point of view may also be appropriate.


* ds/multi-pack-index (2018-07-20) 23 commits
 - midx: clear midx on repack
 - packfile: skip loading index if in multi-pack-index
 - midx: prevent duplicate packfile loads
 - midx: use midx in approximate_object_count
 - midx: use existing midx when writing new one
 - midx: use midx in abbreviation calculations
 - midx: read objects from multi-pack-index
 - config: create core.multiPackIndex setting
 - midx: write object offsets
 - midx: write object id fanout chunk
 - midx: write object ids in a chunk
 - midx: sort and deduplicate objects from packfiles
 - midx: read pack names into array
 - multi-pack-index: write pack names in chunk
 - multi-pack-index: read packfile list
 - packfile: generalize pack directory list
 - t5319: expand test data
 - multi-pack-index: load into memory
 - midx: write header information to lockfile
 - multi-pack-index: add 'write' verb
 - multi-pack-index: add builtin
 - multi-pack-index: add format details
 - multi-pack-index: add design document

 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.

 Will merge to and cook in 'next'.


--------------------------------------------------
[Discarded]

* am/sequencer-author-script-fix (2018-07-18) 1 commit
 . sequencer.c: terminate the last line of author-script properly

 The author-script that records the author information created by
 the sequencer machinery lacked the closing single quote on the last
 entry.

 Superseded by another topic.


* jc/push-cas-opt-comment (2018-08-01) 1 commit
 . push: comment on a funny unbalanced option help

 Code clarification.

 Superseded by another topic.

^ permalink raw reply	[relevance 3%]

* [ANNOUNCE] Git v2.19.0-rc0
@ 2018-08-20 22:13  3% Junio C Hamano
  0 siblings, 0 replies; 200+ results
From: Junio C Hamano @ 2018-08-20 22:13 UTC (permalink / raw)
  To: git; +Cc: Linux Kernel, git-packagers

An early preview release Git v2.19.0-rc0 is now available for
testing at the usual places.  It is comprised of 707 non-merge
commits since v2.18.0, contributed by 60 people, 14 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.19.0-rc0' tag and the 'master' branch that the tag points at:

  url = https://kernel.googlesource.com/pub/scm/git/git
  url = git://repo.or.cz/alt-git.git
  url = https://github.com/gitster/git

New contributors whose contributions weren't in v2.18.0 are as follows.
Welcome to the Git development community!

  Aleksandr Makarov, Andrei Rybak, Chen Bin, Henning Schild,
  Isabella Stephens, Josh Steadmon, Jules Maselbas, Kana Natsuno,
  Marc Strapetz, Masaya Suzuki, Nicholas Guriev, Sebastian Kisela,
  Vladimir Parfinenko, and William Chargin.

Returning contributors who helped this release are as follows.
Thanks for your continued support.

  Aaron Schrab, Ævar Arnfjörð Bjarmason, Alban Gruin, Alejandro
  R. Sedeño, Anthony Sottile, Antonio Ospite, Beat Bolli, Ben
  Peart, Brandon Williams, brian m. carlson, Christian Couder,
  Derrick Stolee, Elijah Newren, Eric Sunshine, Han-Wen Nienhuys,
  Jameson Miller, Jeff Hostetler, Jeff King, Johannes Schindelin,
  Johannes Sixt, Jonathan Nieder, Jonathan Tan, Junio C Hamano,
  Kim Gybels, Kirill Smelkov, Luis Marsano, Łukasz Stelmach,
  Luke Diamand, Martin Ågren, Max Kirillov, Michael Barabanov,
  Mike Hommey, Nguyễn Thái Ngọc Duy, Olga Telezhnaya,
  Phillip Wood, Prathamesh Chavan, Ramsay Jones, René Scharfe,
  Stefan Beller, SZEDER Gábor, Taylor Blau, Thomas Rast, Tobias
  Klauser, Todd Zullinger, Ville Skyttä, and Xiaolong Ye.

----------------------------------------------------------------

Git 2.19 Release Notes (draft)
==============================

Updates since v2.18
-------------------

UI, Workflows & Features

 * "git diff" compares the index and the working tree.  For paths
   added with intent-to-add bit, the command shows the full contents
   of them as added, but the paths themselves were not marked as new
   files.  They are now shown as new by default.

   "git apply" learned the "--intent-to-add" option so that an
   otherwise working-tree-only application of a patch will add new
   paths to the index marked with the "intent-to-add" bit.

 * "git grep" learned the "--column" option that gives not just the
   line number but the column number of the hit.

 * The "-l" option in "git branch -l" is an unfortunate short-hand for
   "--create-reflog", but many users, both old and new, somehow expect
   it to be something else, perhaps "--list".  This step warns when "-l"
   is used as a short-hand for "--create-reflog" and warns about the
   future repurposing of the it when it is used.

 * The userdiff pattern for .php has been updated.

 * The content-transfer-encoding of the message "git send-email" sends
   out by default was 8bit, which can cause trouble when there is an
   overlong line to bust RFC 5322/2822 limit.  A new option 'auto' to
   automatically switch to quoted-printable when there is such a line
   in the payload has been introduced and is made the default.

 * "git checkout" and "git worktree add" learned to honor
   checkout.defaultRemote when auto-vivifying a local branch out of a
   remote tracking branch in a repository with multiple remotes that
   have tracking branches that share the same names.
   (merge 8d7b558bae ab/checkout-default-remote later to maint).

 * "git grep" learned the "--only-matching" option.

 * "git rebase --rebase-merges" mode now handles octopus merges as
   well.

 * Add a server-side knob to skip commits in exponential/fibbonacci
   stride in an attempt to cover wider swath of history with a smaller
   number of iterations, potentially accepting a larger packfile
   transfer, instead of going back one commit a time during common
   ancestor discovery during the "git fetch" transaction.
   (merge 42cc7485a2 jt/fetch-negotiator-skipping later to maint).

 * A new configuration variable core.usereplacerefs has been added,
   primarily to help server installations that want to ignore the
   replace mechanism altogether.

 * Teach "git tag -s" etc. a few configuration variables (gpg.format
   that can be set to "openpgp" or "x509", and gpg.<format>.program
   that is used to specify what program to use to deal with the format)
   to allow x.509 certs with CMS via "gpgsm" to be used instead of
   openpgp via "gnupg".

 * Many more strings are prepared for l10n.

 * "git p4 submit" learns to ask its own pre-submit hook if it should
   continue with submitting.

 * The test performed at the receiving end of "git push" to prevent
   bad objects from entering repository can be customized via
   receive.fsck.* configuration variables; we now have gained a
   counterpart to do the same on the "git fetch" side, with
   fetch.fsck.* configuration variables.

 * "git pull --rebase=interactive" learned "i" as a short-hand for
   "interactive".

 * "git instaweb" has been adjusted to run better with newer Apache on
   RedHat based distros.

 * "git range-diff" is a reimplementation of "git tbdiff" that lets us
   compare individual patches in two iterations of a topic.

 * The sideband code learned to optionally paint selected keywords at
   the beginning of incoming lines on the receiving end.


Performance, Internal Implementation, Development Support etc.

 * The bulk of "git submodule foreach" has been rewritten in C.

 * The in-core "commit" object had an all-purpose "void *util" field,
   which was tricky to use especially in library-ish part of the
   code.  All of the existing uses of the field has been migrated to a
   more dedicated "commit-slab" mechanism and the field is eliminated.

 * A less often used command "git show-index" has been modernized.
   (merge fb3010c31f jk/show-index later to maint).

 * The conversion to pass "the_repository" and then "a_repository"
   throughout the object access API continues.

 * Continuing with the idea to programatically enumerate various
   pieces of data required for command line completion, teach the
   codebase to report the list of configuration variables
   subcommands care about to help complete them.

 * Separate "rebase -p" codepath out of "rebase -i" implementation to
   slim down the latter and make it easier to manage.

 * Make refspec parsing codepath more robust.

 * Some flaky tests have been fixed.

 * Continuing with the idea to programmatically enumerate various
   pieces of data required for command line completion, the codebase
   has been taught to enumerate options prefixed with "--no-" to
   negate them.

 * Build and test procedure for netrc credential helper (in contrib/)
   has been updated.

 * The conversion to pass "the_repository" and then "a_repository"
   throughout the object access API continues.

 * Remove unused function definitions and declarations from ewah
   bitmap subsystem.

 * Code preparation to make "git p4" closer to be usable with Python 3.

 * Tighten the API to make it harder to misuse in-tree .gitmodules
   file, even though it shares the same syntax with configuration
   files, to read random configuration items from it.

 * "git fast-import" has been updated to avoid attempting to create
   delta against a zero-byte-long string, which is pointless.

 * The codebase has been updated to compile cleanly with -pedantic
   option.
   (merge 2b647a05d7 bb/pedantic later to maint).

 * The character display width table has been updated to match the
   latest Unicode standard.
   (merge 570951eea2 bb/unicode-11-width later to maint).

 * test-lint now looks for broken use of "VAR=VAL shell_func" in test
   scripts.

 * Conversion from uchar[40] to struct object_id continues.

 * Recent "security fix" to pay attention to contents of ".gitmodules"
   while accepting "git push" was a bit overly strict than necessary,
   which has been adjusted.

 * "git fsck" learns to make sure the optional commit-graph file is in
   a sane state.

 * "git diff --color-moved" feature has further been tweaked.

 * Code restructuring and a small fix to transport protocol v2 during
   fetching.

 * Parsing of -L[<N>][,[<M>]] parameters "git blame" and "git log"
   take has been tweaked.

 * lookup_commit_reference() and friends have been updated to find
   in-core object for a specific in-core repository instance.

 * Various glitches in the heuristics of merge-recursive strategy have
   been documented in new tests.

 * "git fetch" learned a new option "--negotiation-tip" to limit the
   set of commits it tells the other end as "have", to reduce wasted
   bandwidth and cycles, which would be helpful when the receiving
   repository has a lot of refs that have little to do with the
   history at the remote it is fetching from.

 * For a large tree, the index needs to hold many cache entries
   allocated on heap.  These cache entries are now allocated out of a
   dedicated memory pool to amortize malloc(3) overhead.

 * Tests to cover various conflicting cases have been added for
   merge-recursive.

 * Tests to cover conflict cases that involve submodules have been
   added for merge-recursive.

 * Look for broken "&&" chains that are hidden in subshell, many of
   which have been found and corrected.

 * The singleton commit-graph in-core instance is made per in-core
   repository instance.

 * "make DEVELOPER=1 DEVOPTS=pedantic" allows developers to compile
   with -pedantic option, which may catch more problematic program
   constructs and potential bugs.

 * Preparatory code to later add json output for telemetry data has
   been added.

 * Update the way we use Coccinelle to find out-of-style code that
   need to be modernised.

 * It is too easy to misuse system API functions such as strcat();
   these selected functions are now forbidden in this codebase and
   will cause a compilation failure.

 * Add a script (in contrib/) to help users of VSCode work better with
   our codebase.

 * The Travis CI scripts were taught to ship back the test data from
   failed tests.
   (merge aea8879a6a sg/travis-retrieve-trash-upon-failure later to maint).

 * The parse-options machinery learned to refrain from enclosing
   placeholder string inside a "<bra" and "ket>" pair automatically
   without PARSE_OPT_LITERAL_ARGHELP.  Existing help text for option
   arguments that are not formatted correctly have been identified and
   fixed.
   (merge 5f0df44cd7 rs/parse-opt-lithelp later to maint).

 * Noiseword "extern" has been removed from function decls in the
   header files.

 * A few atoms like %(objecttype) and %(objectsize) in the format
   specifier of "for-each-ref --format=<format>" can be filled without
   getting the full contents of the object, but just with the object
   header.  These cases have been optimized by calling
   oid_object_info() API (instead of reading and inspecting the data).

 * The end result of documentation update has been made to be
   inspected more easily to help developers.

 * The API to iterate over all objects learned to optionally list
   objects in the order they appear in packfiles, which helps locality
   of access if the caller accesses these objects while as objects are
   enumerated.

 * Improve built-in facility to catch broken &&-chain in the tests.

 * The more library-ish parts of the codebase learned to work on the
   in-core index-state instance that is passed in by their callers,
   instead of always working on the singleton "the_index" instance.

 * A test prerequisite defined by various test scripts with slightly
   different semantics has been consolidated into a single copy and
   made into a lazily defined one.
   (merge 6ec633059a wc/make-funnynames-shared-lazy-prereq later to maint).

 * After a partial clone, repeated fetches from promisor remote would
   have accumulated many packfiles marked with .promisor bit without
   getting them coalesced into fewer packfiles, hurting performance.
   "git repack" now learned to repack them.


Fixes since v2.18
-----------------

 * "git remote update" can take both a single remote nickname and a
   nickname for remote groups, and the completion script (in contrib/)
   has been taught about it.
   (merge 9cd4382ad5 ls/complete-remote-update-names later to maint).

 * "git fetch --shallow-since=<cutoff>" that specifies the cut-off
   point that is newer than the existing history used to end up
   grabbing the entire history.  Such a request now errors out.
   (merge e34de73c56 nd/reject-empty-shallow-request later to maint).

 * Fix for 2.17-era regression around `core.safecrlf`.
   (merge 6cb09125be as/safecrlf-quiet-fix later to maint).

 * The recent addition of "partial clone" experimental feature kicked
   in when it shouldn't, namely, when there is no partial-clone filter
   defined even if extensions.partialclone is set.
   (merge cac1137dc4 jh/partial-clone later to maint).

 * "git send-pack --signed" (hence "git push --signed" over the http
   transport) did not read user ident from the config mechanism to
   determine whom to sign the push certificate as, which has been
   corrected.
   (merge d067d98887 ms/send-pack-honor-config later to maint).

 * "git fetch-pack --all" used to unnecessarily fail upon seeing an
   annotated tag that points at an object other than a commit.
   (merge c12c9df527 jk/fetch-all-peeled-fix later to maint).

 * When user edits the patch in "git add -p" and the user's editor is
   set to strip trailing whitespaces indiscriminately, an empty line
   that is unchanged in the patch would become completely empty
   (instead of a line with a sole SP on it).  The code introduced in
   Git 2.17 timeframe failed to parse such a patch, but now it learned
   to notice the situation and cope with it.
   (merge f4d35a6b49 pw/add-p-recount later to maint).

 * The code to try seeing if a fetch is necessary in a submodule
   during a fetch with --recurse-submodules got confused when the path
   to the submodule was changed in the range of commits in the
   superproject, sometimes showing "(null)".  This has been corrected.

 * "git submodule" did not correctly adjust core.worktree setting that
   indicates whether/where a submodule repository has its associated
   working tree across various state transitions, which has been
   corrected.
   (merge 984cd77ddb sb/submodule-core-worktree later to maint).

 * Bugfix for "rebase -i" corner case regression.
   (merge a9279c6785 pw/rebase-i-keep-reword-after-conflict later to maint).

 * Recently added "--base" option to "git format-patch" command did
   not correctly generate prereq patch ids.
   (merge 15b76c1fb3 xy/format-patch-prereq-patch-id-fix later to maint).

 * POSIX portability fix in Makefile to fix a glitch introduced a few
   releases ago.
   (merge 6600054e9b dj/runtime-prefix later to maint).

 * "git filter-branch" when used with the "--state-branch" option
   still attempted to rewrite the commits whose filtered result is
   known from the previous attempt (which is recorded on the state
   branch); the command has been corrected not to waste cycles doing
   so.
   (merge 709cfe848a mb/filter-branch-optim later to maint).

 * Clarify that setting core.ignoreCase to deviate from reality would
   not turn a case-incapable filesystem into a case-capable one.
   (merge 48294b512a ms/core-icase-doc later to maint).

 * "fsck.skipList" did not prevent a blob object listed there from
   being inspected for is contents (e.g. we recently started to
   inspect the contents of ".gitmodules" for certain malicious
   patterns), which has been corrected.
   (merge fb16287719 rj/submodule-fsck-skip later to maint).

 * "git checkout --recurse-submodules another-branch" did not report
   in which submodule it failed to update the working tree, which
   resulted in an unhelpful error message.
   (merge ba95d4e4bd sb/submodule-move-head-error-msg later to maint).

 * "git rebase" behaved slightly differently depending on which one of
   the three backends gets used; this has been documented and an
   effort to make them more uniform has begun.
   (merge b00bf1c9a8 en/rebase-consistency later to maint).

 * The "--ignore-case" option of "git for-each-ref" (and its friends)
   did not work correctly, which has been fixed.
   (merge e674eb2528 jk/for-each-ref-icase later to maint).

 * "git fetch" failed to correctly validate the set of objects it
   received when making a shallow history deeper, which has been
   corrected.
   (merge cf1e7c0770 jt/connectivity-check-after-unshallow later to maint).

 * Partial clone support of "git clone" has been updated to correctly
   validate the objects it receives from the other side.  The server
   side has been corrected to send objects that are directly
   requested, even if they may match the filtering criteria (e.g. when
   doing a "lazy blob" partial clone).
   (merge a7e67c11b8 jt/partial-clone-fsck-connectivity later to maint).

 * Handling of an empty range by "git cherry-pick" was inconsistent
   depending on how the range ended up to be empty, which has been
   corrected.
   (merge c5e358d073 jk/empty-pick-fix later to maint).

 * "git reset --merge" (hence "git merge ---abort") and "git reset --hard"
   had trouble working correctly in a sparsely checked out working
   tree after a conflict, which has been corrected.
   (merge b33fdfc34c mk/merge-in-sparse-checkout later to maint).

 * Correct a broken use of "VAR=VAL shell_func" in a test.
   (merge 650161a277 jc/t3404-one-shot-export-fix later to maint).

 * "git rev-parse ':/substring'" did not consider the history leading
   only to HEAD when looking for a commit with the given substring,
   when the HEAD is detached.  This has been fixed.
   (merge 6b3351e799 wc/find-commit-with-pattern-on-detached-head later to maint).

 * Build doc update for Windows.
   (merge ede8d89bb1 nd/command-list later to maint).

 * core.commentchar is now honored when preparing the list of commits
   to replay in "rebase -i".

 * "git pull --rebase" on a corrupt HEAD caused a segfault.  In
   general we substitute an empty tree object when running the in-core
   equivalent of the diff-index command, and the codepath has been
   corrected to do so as well to fix this issue.
   (merge 3506dc9445 jk/has-uncommitted-changes-fix later to maint).

 * httpd tests saw occasional breakage due to the way its access log
   gets inspected by the tests, which has been updated to make them
   less flaky.
   (merge e8b3b2e275 sg/httpd-test-unflake later to maint).

 * Tests to cover more D/F conflict cases have been added for
   merge-recursive.

 * "git gc --auto" opens file descriptors for the packfiles before
   spawning "git repack/prune", which would upset Windows that does
   not want a process to work on a file that is open by another
   process.  The issue has been worked around.
   (merge 12e73a3ce4 kg/gc-auto-windows-workaround later to maint).

 * The recursive merge strategy did not properly ensure there was no
   change between HEAD and the index before performing its operation,
   which has been corrected.
   (merge 55f39cf755 en/dirty-merge-fixes later to maint).

 * "git rebase" started exporting GIT_DIR environment variable and
   exposing it to hook scripts when part of it got rewritten in C.
   Instead of matching the old scripted Porcelains' behaviour,
   compensate by also exporting GIT_WORK_TREE environment as well to
   lessen the damage.  This can harm existing hooks that want to
   operate on different repository, but the current behaviour is
   already broken for them anyway.
   (merge ab5e67d751 bc/sequencer-export-work-tree-as-well later to maint).

 * "git send-email" when using in a batched mode that limits the
   number of messages sent in a single SMTP session lost the contents
   of the variable used to choose between tls/ssl, unable to send the
   second and later batches, which has been fixed.
   (merge 636f3d7ac5 jm/send-email-tls-auth-on-batch later to maint).

 * The lazy clone support had a few places where missing but promised
   objects were not correctly tolerated, which have been fixed.

 * One of the "diff --color-moved" mode "dimmed_zebra" that was named
   in an unusual way has been deprecated and replaced by
   "dimmed-zebra".
   (merge e3f2f5f9cd es/diff-color-moved-fix later to maint).

 * The wire-protocol v2 relies on the client to send "ref prefixes" to
   limit the bandwidth spent on the initial ref advertisement.  "git
   clone" when learned to speak v2 forgot to do so, which has been
   corrected.
   (merge 402c47d939 bw/clone-ref-prefixes later to maint).

 * "git diff --histogram" had a bad memory usage pattern, which has
   been rearranged to reduce the peak usage.
   (merge 79cb2ebb92 sb/histogram-less-memory later to maint).

 * Code clean-up to use size_t/ssize_t when they are the right type.
   (merge 7726d360b5 jk/size-t later to maint).

 * The wire-protocol v2 relies on the client to send "ref prefixes" to
   limit the bandwidth spent on the initial ref advertisement.  "git
   fetch $remote branch:branch" that asks tags that point into the
   history leading to the "branch" automatically followed sent to
   narrow prefix and broke the tag following, which has been fixed.
   (merge 2b554353a5 jt/tag-following-with-proto-v2-fix later to maint).

 * When the sparse checkout feature is in use, "git cherry-pick" and
   other mergy operations lost the skip_worktree bit when a path that
   is excluded from checkout requires content level merge, which is
   resolved as the same as the HEAD version, without materializing the
   merge result in the working tree, which made the path appear as
   deleted.  This has been corrected by preserving the skip_worktree
   bit (and not materializing the file in the working tree).
   (merge 2b75fb601c en/merge-recursive-skip-fix later to maint).

 * The "author-script" file "git rebase -i" creates got broken when
   we started to move the command away from shell script, which is
   getting fixed now.
   (merge 5522bbac20 es/rebase-i-author-script-fix later to maint).

 * The automatic tree-matching in "git merge -s subtree" was broken 5
   years ago and nobody has noticed since then, which is now fixed.
   (merge 2ec4150713 jk/merge-subtree-heuristics later to maint).

 * "git fetch $there refs/heads/s" ought to fetch the tip of the
   branch 's', but when "refs/heads/refs/heads/s", i.e. a branch whose
   name is "refs/heads/s" exists at the same time, fetched that one
   instead by mistake.  This has been corrected to honor the usual
   disambiguation rules for abbreviated refnames.
   (merge 60650a48c0 jt/refspec-dwim-precedence-fix later to maint).

 * Futureproofing a helper function that can easily be misused.
   (merge 65bb21e77e es/want-color-fd-defensive later to maint).

 * The http-backend (used for smart-http transport) used to slurp the
   whole input until EOF, without paying attention to CONTENT_LENGTH
   that is supplied in the environment and instead expecting the Web
   server to close the input stream.  This has been fixed.
   (merge eebfe40962 mk/http-backend-content-length later to maint).

 * "git merge --abort" etc. did not clean things up properly when
   there were conflicted entries in the index in certain order that
   are involved in D/F conflicts.  This has been corrected.
   (merge ad3762042a en/abort-df-conflict-fixes later to maint).

 * "git diff --indent-heuristic" had a bad corner case performance.
   (merge 301ef85401 sb/indent-heuristic-optim later to maint).

 * The "--exec" option to "git rebase --rebase-merges" placed the exec
   commands at wrong places, which has been corrected.

 * "git verify-tag" and "git verify-commit" have been taught to use
   the exit status of underlying "gpg --verify" to signal bad or
   untrusted signature they found.
   (merge 4e5dc9ca17 jc/gpg-status later to maint).

 * "git mergetool" stopped and gave an extra prompt to continue after
   the last path has been handled, which did not make much sense.
   (merge d651a54b8a ng/mergetool-lose-final-prompt later to maint).

 * Among the three codepaths we use O_APPEND to open a file for
   appending, one used for writing GIT_TRACE output requires O_APPEND
   implementation that behaves sensibly when multiple processes are
   writing to the same file.  POSIX emulation used in the Windows port
   has been updated to improve in this area.
   (merge d641097589 js/mingw-o-append later to maint).

 * "git pull --rebase -v" in a repository with a submodule barfed as
   an intermediate process did not understand what "-v(erbose)" flag
   meant, which has been fixed.
   (merge e84c3cf3dc sb/pull-rebase-submodule later to maint).

 * Recent update to "git config" broke updating variable in a
   subsection, which has been corrected.
   (merge bff7df7a87 sb/config-write-fix later to maint).

 * When "git rebase -i" is told to squash two or more commits into
   one, it labeled the log message for each commit with its number.
   It correctly called the first one "1st commit", but the next one
   was "commit #1", which was off-by-one.  This has been corrected.
   (merge dd2e36ebac pw/rebase-i-squash-number-fix later to maint).

 * "git rebase -i", when a 'merge <branch>' insn in its todo list
   fails, segfaulted, which has been (minimally) corrected.
   (merge bc9238bb09 pw/rebase-i-merge-segv-fix later to maint).

 * "git cherry-pick --quit" failed to remove CHERRY_PICK_HEAD even
   though we won't be in a cherry-pick session after it returns, which
   has been corrected.
   (merge 3e7dd99208 nd/cherry-pick-quit-fix later to maint).

 * Code cleanup, docfix, build fix, etc.
   (merge aee9be2ebe sg/update-ref-stdin-cleanup later to maint).
   (merge 037714252f jc/clean-after-sanity-tests later to maint).
   (merge 5b26c3c941 en/merge-recursive-cleanup later to maint).
   (merge 0dcbc0392e bw/config-refer-to-gitsubmodules-doc later to maint).
   (merge bb4d000e87 bw/protocol-v2 later to maint).
   (merge 928f0ab4ba vs/typofixes later to maint).
   (merge d7f590be84 en/rebase-i-microfixes later to maint).
   (merge 81d395cc85 js/rebase-recreate-merge later to maint).
   (merge 51d1863168 tz/exclude-doc-smallfixes later to maint).
   (merge a9aa3c0927 ds/commit-graph later to maint).
   (merge 5cf8e06474 js/enhanced-version-info later to maint).
   (merge 6aaded5509 tb/config-default later to maint).
   (merge 022d2ac1f3 sb/blame-color later to maint).
   (merge 5a06a20e0c bp/test-drop-caches-for-windows later to maint).
   (merge dd61cc1c2e jk/ui-color-always-to-auto later to maint).
   (merge 1e83b9bfdd sb/trailers-docfix later to maint).
   (merge ab29f1b329 sg/fast-import-dump-refs-on-checkpoint-fix later to maint).
   (merge 6a8ad880f0 jn/subtree-test-fixes later to maint).
   (merge ffbd51cc60 nd/pack-objects-threading-doc later to maint).
   (merge e9dac7be60 es/mw-to-git-chain-fix later to maint).
   (merge fe583c6c7a rs/remote-mv-leakfix later to maint).
   (merge 69885ab015 en/t3031-title-fix later to maint).
   (merge 8578037bed nd/config-blame-sort later to maint).
   (merge 8ad169c4ba hn/config-in-code-comment later to maint).
   (merge b7446fcfdf ar/t4150-am-scissors-test-fix later to maint).
   (merge a8132410ee js/typofixes later to maint).
   (merge 388d0ff6e5 en/update-index-doc later to maint).
   (merge e05aa688dd jc/update-index-doc later to maint).
   (merge 10c600172c sg/t5310-empty-input-fix later to maint).
   (merge 5641eb9465 jh/partial-clone-doc later to maint).
   (merge 2711b1ad5e ab/submodule-relative-url-tests later to maint).

----------------------------------------------------------------

Changes since v2.18.0 are as follows:

Aaron Schrab (1):
      sequencer: use configured comment character

Alban Gruin (4):
      rebase: introduce a dedicated backend for --preserve-merges
      rebase: strip unused code in git-rebase--preserve-merges.sh
      rebase: use the new git-rebase--preserve-merges.sh
      rebase: remove -p code from git-rebase--interactive.sh

Alejandro R. Sedeño (1):
      Makefile: tweak sed invocation

Aleksandr Makarov (1):
      for-each-ref: consistently pass WM_IGNORECASE flag

Andrei Rybak (2):
      Documentation: fix --color option formatting
      t4150: fix broken test for am --scissors

Anthony Sottile (1):
      config.c: fix regression for core.safecrlf false

Antonio Ospite (6):
      config: move config_from_gitmodules to submodule-config.c
      submodule-config: add helper function to get 'fetch' config from .gitmodules
      submodule-config: add helper to get 'update-clone' config from .gitmodules
      submodule-config: make 'config_from_gitmodules' private
      submodule-config: pass repository as argument to config_from_gitmodules
      submodule-config: reuse config_from_gitmodules in repo_read_gitmodules

Beat Bolli (10):
      builtin/config: work around an unsized array forward declaration
      unicode: update the width tables to Unicode 11
      connect.h: avoid forward declaration of an enum
      refs/refs-internal.h: avoid forward declaration of an enum
      convert.c: replace "\e" escapes with "\033".
      sequencer.c: avoid empty statements at top level
      string-list.c: avoid conversion from void * to function pointer
      utf8.c: avoid char overflow
      Makefile: add a DEVOPTS flag to get pedantic compilation
      packfile: ensure that enum object_type is defined

Ben Peart (3):
      convert log_ref_write_fd() to use strbuf
      handle lower case drive letters on Windows
      t3507: add a testcase showing failure with sparse checkout

Brandon Williams (15):
      commit: convert commit_graft_pos() to handle arbitrary repositories
      commit: convert register_commit_graft to handle arbitrary repositories
      commit: convert read_graft_file to handle arbitrary repositories
      test-pkt-line: add unpack-sideband subcommand
      docs: link to gitsubmodules
      upload-pack: implement ref-in-want
      upload-pack: test negotiation with changing repository
      fetch: refactor the population of peer ref OIDs
      fetch: refactor fetch_refs into two functions
      fetch: refactor to make function args narrower
      fetch-pack: put shallow info in output parameter
      fetch-pack: implement ref-in-want
      clone: send ref-prefixes when using protocol v2
      fetch-pack: mark die strings for translation
      pack-protocol: mention and point to docs for protocol v2

Chen Bin (1):
      git-p4: add the `p4-pre-submit` hook

Christian Couder (1):
      t9104: kosherly remove remote refs

Derrick Stolee (43):
      ref-filter: fix outdated comment on in_commit_list
      commit: add generation number to struct commit
      commit-graph: compute generation numbers
      commit: use generations in paint_down_to_common()
      commit-graph: always load commit-graph information
      ref-filter: use generation number for --contains
      commit: use generation numbers for in_merge_bases()
      commit: add short-circuit to paint_down_to_common()
      commit: use generation number in remove_redundant()
      merge: check config before loading commits
      commit-graph.txt: update design document
      commit-graph: fix UX issue when .lock file exists
      ewah/bitmap.c: delete unused 'bitmap_clear()'
      ewah/bitmap.c: delete unused 'bitmap_each_bit()'
      ewah_bitmap: delete unused 'ewah_and()'
      ewah_bitmap: delete unused 'ewah_and_not()'
      ewah_bitmap: delete unused 'ewah_not()'
      ewah_bitmap: delete unused 'ewah_or()'
      ewah_io: delete unused 'ewah_serialize()'
      t5318-commit-graph.sh: use core.commitGraph
      commit-graph: UNLEAK before die()
      commit-graph: fix GRAPH_MIN_SIZE
      commit-graph: parse commit from chosen graph
      commit: force commit to parse from object database
      commit-graph: load a root tree from specific graph
      commit-graph: add 'verify' subcommand
      commit-graph: verify catches corrupt signature
      commit-graph: verify required chunks are present
      commit-graph: verify corrupt OID fanout and lookup
      commit-graph: verify objects exist
      commit-graph: verify root tree OIDs
      commit-graph: verify parent list
      commit-graph: verify generation number
      commit-graph: verify commit date
      commit-graph: test for corrupted octopus edge
      commit-graph: verify contents match checksum
      fsck: verify commit-graph
      commit-graph: use string-list API for input
      commit-graph: add '--reachable' option
      gc: automatically write commit-graph files
      commit-graph: update design document
      commit-graph: fix documentation inconsistencies
      coccinelle: update commit.cocci

Elijah Newren (63):
      t6036, t6042: use test_create_repo to keep tests independent
      t6036, t6042: use test_line_count instead of wc -l
      t6036, t6042: prefer test_path_is_file, test_path_is_missing
      t6036, t6042: prefer test_cmp to sequences of test
      t6036: prefer test_when_finished to manual cleanup in following test
      merge-recursive: fix miscellaneous grammar error in comment
      merge-recursive: fix numerous argument alignment issues
      merge-recursive: align labels with their respective code blocks
      merge-recursive: clarify the rename_dir/RENAME_DIR meaning
      merge-recursive: rename conflict_rename_*() family of functions
      merge-recursive: add pointer about unduly complex looking code
      git-rebase.txt: document incompatible options
      git-rebase.sh: update help messages a bit
      t3422: new testcases for checking when incompatible options passed
      git-rebase: error out when incompatible options passed
      git-rebase.txt: address confusion between --no-ff vs --force-rebase
      directory-rename-detection.txt: technical docs on abilities and limitations
      git-rebase.txt: document behavioral differences between modes
      t3401: add directory rename testcases for rebase and am
      git-rebase: make --allow-empty-message the default
      t3418: add testcase showing problems with rebase -i and strategy options
      Fix use of strategy options with interactive rebases
      git-rebase--merge: modernize "git-$cmd" to "git $cmd"
      apply: fix grammar error in comment
      t5407: fix test to cover intended arguments
      read-cache.c: move index_has_changes() from merge.c
      index_has_changes(): avoid assuming operating on the_index
      t6044: verify that merges expected to abort actually abort
      t6036: add a failed conflict detection case with symlink modify/modify
      t6036: add a failed conflict detection case with symlink add/add
      t6036: add a failed conflict detection case with submodule modify/modify
      t6036: add a failed conflict detection case with submodule add/add
      t6036: add a failed conflict detection case with conflicting types
      t6042: add testcase covering rename/add/delete conflict type
      t6042: add testcase covering rename/rename(2to1)/delete/delete conflict
      t6042: add testcase covering long chains of rename conflicts
      t6036: add lots of detail for directory/file conflicts in recursive case
      t6036: add a failed conflict detection case: regular files, different modes
      t6044: add a testcase for index matching head, when head doesn't match HEAD
      merge-recursive: make sure when we say we abort that we actually abort
      merge-recursive: fix assumption that head tree being merged is HEAD
      t6044: add more testcases with staged changes before a merge is invoked
      merge-recursive: enforce rule that index matches head before merging
      merge: fix misleading pre-merge check documentation
      t7405: add a file/submodule conflict
      t7405: add a directory/submodule conflict
      t7405: verify 'merge --abort' works after submodule/path conflicts
      merge-recursive: preserve skip_worktree bit when necessary
      t1015: demonstrate directory/file conflict recovery failures
      read-cache: fix directory/file conflict handling in read_index_unmerged()
      t3031: update test description to mention desired behavior
      t7406: fix call that was failing for the wrong reason
      t7406: simplify by using diff --name-only instead of diff --raw
      t7406: avoid having git commands upstream of a pipe
      t7406: prefer test_* helper functions to test -[feds]
      t7406: avoid using test_must_fail for commands other than git
      git-update-index.txt: reword possibly confusing example
      Add missing includes and forward declarations
      alloc: make allocate_alloc_state and clear_alloc_state more consistent
      Move definition of enum branch_track from cache.h to branch.h
      urlmatch.h: fix include guard
      compat/precompose_utf8.h: use more common include guard style
      Remove forward declaration of an enum

Eric Sunshine (53):
      t: use test_might_fail() instead of manipulating exit code manually
      t: use test_write_lines() instead of series of 'echo' commands
      t: use sane_unset() rather than 'unset' with broken &&-chain
      t: drop unnecessary terminating semicolon in subshell
      t/lib-submodule-update: fix "absorbing" test
      t5405: use test_must_fail() instead of checking exit code manually
      t5406: use write_script() instead of birthing shell script manually
      t5505: modernize and simplify hard-to-digest test
      t6036: fix broken "merge fails but has appropriate contents" tests
      t7201: drop pointless "exit 0" at end of subshell
      t7400: fix broken "submodule add/reconfigure --force" test
      t7810: use test_expect_code() instead of hand-rolled comparison
      t9001: fix broken "invoke hook" test
      t9814: simplify convoluted check that command correctly errors out
      t0000-t0999: fix broken &&-chains
      t1000-t1999: fix broken &&-chains
      t2000-t2999: fix broken &&-chains
      t3000-t3999: fix broken &&-chains
      t3030: fix broken &&-chains
      t4000-t4999: fix broken &&-chains
      t5000-t5999: fix broken &&-chains
      t6000-t6999: fix broken &&-chains
      t7000-t7999: fix broken &&-chains
      t9000-t9999: fix broken &&-chains
      t9119: fix broken &&-chains
      t6046/t9833: fix use of "VAR=VAL cmd" with a shell function
      t/check-non-portable-shell: stop being so polite
      t/check-non-portable-shell: make error messages more compact
      t/check-non-portable-shell: detect "FOO=bar shell_func"
      t/test-lib: teach --chain-lint to detect broken &&-chains in subshells
      t/Makefile: add machinery to check correctness of chainlint.sed
      t/chainlint: add chainlint "basic" test cases
      t/chainlint: add chainlint "whitespace" test cases
      t/chainlint: add chainlint "one-liner" test cases
      t/chainlint: add chainlint "nested subshell" test cases
      t/chainlint: add chainlint "loop" and "conditional" test cases
      t/chainlint: add chainlint "cuddled" test cases
      t/chainlint: add chainlint "complex" test cases
      t/chainlint: add chainlint "specialized" test cases
      diff: --color-moved: rename "dimmed_zebra" to "dimmed-zebra"
      mw-to-git/t9360: fix broken &&-chain
      t/chainlint.sed: drop extra spaces from regex character class
      sequencer: fix "rebase -i --root" corrupting author header
      sequencer: fix "rebase -i --root" corrupting author header timezone
      sequencer: fix "rebase -i --root" corrupting author header timestamp
      sequencer: don't die() on bogus user-edited timestamp
      color: protect against out-of-bounds reads and writes
      chainlint: match arbitrary here-docs tags rather than hard-coded names
      chainlint: match 'quoted' here-doc tags
      chainlint: recognize multi-line $(...) when command cuddled with "$("
      chainlint: let here-doc and multi-line string commence on same line
      chainlint: recognize multi-line quoted strings more robustly
      chainlint: add test of pathological case which triggered false positive

Han-Wen Nienhuys (2):
      config: document git config getter return value
      sideband: highlight keywords in remote sideband output

Henning Schild (9):
      builtin/receive-pack: use check_signature from gpg-interface
      gpg-interface: make parse_gpg_output static and remove from interface header
      gpg-interface: add new config to select how to sign a commit
      t/t7510: check the validation of the new config gpg.format
      gpg-interface: introduce an abstraction for multiple gpg formats
      gpg-interface: do not hardcode the key string len anymore
      gpg-interface: introduce new config to select per gpg format program
      gpg-interface: introduce new signature format "x509" using gpgsm
      gpg-interface t: extend the existing GPG tests with GPGSM

Isabella Stephens (2):
      blame: prevent error if range ends past end of file
      log: prevent error if line range ends past end of file

Jameson Miller (8):
      read-cache: teach refresh_cache_entry to take istate
      read-cache: teach make_cache_entry to take object_id
      block alloc: add lifecycle APIs for cache_entry structs
      mem-pool: only search head block for available space
      mem-pool: add life cycle management functions
      mem-pool: fill out functionality
      block alloc: allocate cache entries from mem_pool
      block alloc: add validations around cache_entry lifecyle

Jeff Hostetler (1):
      json_writer: new routines to create JSON data

Jeff King (48):
      make show-index a builtin
      show-index: update documentation for index v2
      fetch-pack: don't try to fetch peel values with --all
      ewah: drop ewah_deserialize function
      ewah: drop ewah_serialize_native function
      t3200: unset core.logallrefupdates when testing reflog creation
      t: switch "branch -l" to "branch --create-reflog"
      branch: deprecate "-l" option
      config: turn die_on_error into caller-facing enum
      config: add CONFIG_ERROR_SILENT handler
      config: add options parameter to git_config_from_mem
      fsck: silence stderr when parsing .gitmodules
      t6300: add a test for --ignore-case
      ref-filter: avoid backend filtering with --ignore-case
      t5500: prettify non-commit tag tests
      sequencer: handle empty-set cases consistently
      sequencer: don't say BUG on bogus input
      has_uncommitted_changes(): fall back to empty tree
      fsck: split ".gitmodules too large" error from parse failure
      fsck: downgrade gitmodulesParse default to "info"
      blame: prefer xsnprintf to strcpy for colors
      check_replace_refs: fix outdated comment
      check_replace_refs: rename to read_replace_refs
      add core.usereplacerefs config option
      reencode_string: use st_add/st_mult helpers
      reencode_string: use size_t for string lengths
      strbuf: use size_t for length in intermediate variables
      strbuf_readlink: use ssize_t
      pass st.st_size as hint for strbuf_readlink()
      strbuf_humanise: use unsigned variables
      automatically ban strcpy()
      banned.h: mark strcat() as banned
      banned.h: mark sprintf() as banned
      banned.h: mark strncpy() as banned
      score_trees(): fix iteration over trees with missing entries
      add a script to diff rendered documentation
      t5552: suppress upload-pack trace output
      for_each_*_object: store flag definitions in a single location
      for_each_*_object: take flag arguments as enum
      for_each_*_object: give more comprehensive docstrings
      for_each_packed_object: support iterating in pack-order
      t1006: test cat-file --batch-all-objects with duplicates
      cat-file: rename batch_{loose,packed}_object callbacks
      cat-file: support "unordered" output for --batch-all-objects
      cat-file: use oidset check-and-insert
      cat-file: split batch "buf" into two variables
      cat-file: use a single strbuf for all output
      for_each_*_object: move declarations to object-store.h

Johannes Schindelin (41):
      Makefile: fix the "built from commit" code
      merge: allow reading the merge commit message from a file
      rebase --rebase-merges: add support for octopus merges
      rebase --rebase-merges: adjust man page for octopus support
      vcbuild/README: update to accommodate for missing common-cmds.h
      t7406: avoid failures solely due to timing issues
      contrib: add a script to initialize VS Code configuration
      vscode: hard-code a couple defines
      cache.h: extract enum declaration from inside a struct declaration
      mingw: define WIN32 explicitly
      vscode: only overwrite C/C++ settings
      vscode: wrap commit messages at column 72 by default
      vscode: use 8-space tabs, no trailing ws, etc for Git's source code
      vscode: add a dictionary for cSpell
      vscode: let cSpell work on commit messages, too
      pull --rebase=<type>: allow single-letter abbreviations for the type
      t3430: demonstrate what -r, --autosquash & --exec should do
      git-compat-util.h: fix typo
      remote-curl: remove spurious period
      rebase --exec: make it work with --rebase-merges
      linear-assignment: a function to solve least-cost assignment problems
      Introduce `range-diff` to compare iterations of a topic branch
      range-diff: first rudimentary implementation
      range-diff: improve the order of the shown commits
      range-diff: also show the diff between patches
      range-diff: right-trim commit messages
      range-diff: indent the diffs just like tbdiff
      range-diff: suppress the diff headers
      range-diff: adjust the output of the commit pairs
      range-diff: do not show "function names" in hunk headers
      range-diff: use color for the commit pairs
      color: add the meta color GIT_COLOR_REVERSE
      diff: add an internal option to dual-color diffs of diffs
      range-diff: offer to dual-color the diffs
      range-diff --dual-color: skip white-space warnings
      range-diff: populate the man page
      completion: support `git range-diff`
      range-diff: left-pad patch numbers
      range-diff: make --dual-color the default mode
      range-diff: use dim/bold cues to improve dual color mode
      chainlint: fix for core.autocrlf=true

Johannes Sixt (1):
      mingw: enable atomic O_APPEND

Jonathan Nieder (11):
      object: add repository argument to grow_object_hash
      object: move grafts to object parser
      commit: add repository argument to commit_graft_pos
      commit: add repository argument to register_commit_graft
      commit: add repository argument to read_graft_file
      commit: add repository argument to prepare_commit_graft
      commit: add repository argument to lookup_commit_graft
      subtree test: add missing && to &&-chain
      subtree test: simplify preparation of expected results
      doc hash-function-transition: pick SHA-256 as NewHash
      partial-clone: render design doc using asciidoc

Jonathan Tan (28):
      list-objects: check if filter is NULL before using
      fetch-pack: split up everything_local()
      fetch-pack: clear marks before re-marking
      fetch-pack: directly end negotiation if ACK ready
      fetch-pack: use ref adv. to prune "have" sent
      fetch-pack: make negotiation-related vars local
      fetch-pack: move common check and marking together
      fetch-pack: introduce negotiator API
      pack-bitmap: remove bitmap_git global variable
      pack-bitmap: add free function
      fetch-pack: write shallow, then check connectivity
      fetch-pack: support negotiation tip whitelist
      upload-pack: send refs' objects despite "filter"
      clone: check connectivity even if clone is partial
      revision: tolerate promised targets of tags
      tag: don't warn if target is missing but promised
      negotiator/skipping: skip commits during fetch
      commit-graph: refactor preparing commit graph
      object-store: add missing include
      commit-graph: add missing forward declaration
      commit-graph: add free_commit_graph
      commit-graph: store graph in struct object_store
      commit-graph: add repo arg to graph readers
      t5702: test fetch with multiple refspecs at a time
      fetch: send "refs/tags/" prefix upon CLI refspecs
      fetch-pack: unify ref in and out param
      repack: refactor setup of pack-objects cmd
      repack: repack promisor objects if -a or -A is set

Josh Steadmon (1):
      protocol-v2 doc: put HTTP headers after request

Jules Maselbas (1):
      send-email: fix tls AUTH when sending batch

Junio C Hamano (18):
      tests: clean after SANITY tests
      ewah: delete unused 'rlwit_discharge_empty()'
      Prepare to start 2.19 cycle
      First batch for 2.19 cycle
      Second batch for 2.19 cycle
      fixup! connect.h: avoid forward declaration of an enum
      fixup! refs/refs-internal.h: avoid forward declaration of an enum
      t3404: fix use of "VAR=VAL cmd" with a shell function
      Third batch for 2.19 cycle
      Fourth batch for 2.19 cycle
      remote: make refspec follow the same disambiguation rule as local refs
      Fifth batch for 2.19 cycle
      update-index: there no longer is `apply --index-info`
      gpg-interface: propagate exit status from gpg back to the callers
      Sixth batch for 2.19 cycle
      Seventh batch for 2.19 cycle
      sideband: do not read beyond the end of input
      Git 2.19-rc0

Kana Natsuno (2):
      t4018: add missing test cases for PHP
      userdiff: support new keywords in PHP hunk header

Kim Gybels (1):
      gc --auto: release pack files before auto packing

Kirill Smelkov (1):
      fetch-pack: test explicitly that --all can fetch tag references pointing to non-commits

Luis Marsano (2):
      git-credential-netrc: use in-tree Git.pm for tests
      git-credential-netrc: fix exit status when tests fail

Luke Diamand (6):
      git-p4: python3: replace <> with !=
      git-p4: python3: replace dict.has_key(k) with "k in dict"
      git-p4: python3: remove backticks
      git-p4: python3: basestring workaround
      git-p4: python3: use print() function
      git-p4: python3: fix octal constants

Marc Strapetz (1):
      Documentation: declare "core.ignoreCase" as internal variable

Martin Ågren (1):
      refspec: initalize `refspec_item` in `valid_fetch_refspec()`

Masaya Suzuki (2):
      builtin/send-pack: populate the default configs
      doc: fix want-capability separator

Max Kirillov (4):
      http-backend: cleanup writing to child process
      http-backend: respect CONTENT_LENGTH as specified by rfc3875
      unpack-trees: do not fail reset because of unmerged skipped entry
      http-backend: respect CONTENT_LENGTH for receive-pack

Michael Barabanov (1):
      filter-branch: skip commits present on --state-branch

Mike Hommey (1):
      fast-import: do not call diff_delta() with empty buffer

Nguyễn Thái Ngọc Duy (98):
      commit-slab.h: code split
      commit-slab: support shared commit-slab
      blame: use commit-slab for blame suspects instead of commit->util
      describe: use commit-slab for commit names instead of commit->util
      shallow.c: use commit-slab for commit depth instead of commit->util
      sequencer.c: use commit-slab to mark seen commits
      sequencer.c: use commit-slab to associate todo items to commits
      revision.c: use commit-slab for show_source
      bisect.c: use commit-slab for commit weight instead of commit->util
      name-rev: use commit-slab for rev-name instead of commit->util
      show-branch: use commit-slab for commit-name instead of commit->util
      show-branch: note about its object flags usage
      log: use commit-slab in prepare_bases() instead of commit->util
      merge: use commit-slab in merge remote desc instead of commit->util
      commit.h: delete 'util' field in struct commit
      diff: ignore --ita-[in]visible-in-index when diffing worktree-to-tree
      diff: turn --ita-invisible-in-index on by default
      t2203: add a test about "diff HEAD" case
      apply: add --intent-to-add
      parse-options: option to let --git-completion-helper show negative form
      completion: suppress some -no- options
      Add and use generic name->id mapping code for color slot parsing
      grep: keep all colors in an array
      fsck: factor out msg_id_info[] lazy initialization code
      help: add --config to list all available config
      fsck: produce camelCase config key names
      advice: keep config name in camelCase in advice_config[]
      am: move advice.amWorkDir parsing back to advice.c
      completion: drop the hard coded list of config vars
      completion: keep other config var completion in camelCase
      completion: support case-insensitive config vars
      log-tree: allow to customize 'grafted' color
      completion: complete general config vars in two steps
      upload-pack: reject shallow requests that would return nothing
      completion: collapse extra --no-.. options
      Update messages in preparation for i18n
      archive-tar.c: mark more strings for translation
      archive-zip.c: mark more strings for translation
      builtin/config.c: mark more strings for translation
      builtin/grep.c: mark strings for translation
      builtin/pack-objects.c: mark more strings for translation
      builtin/replace.c: mark more strings for translation
      commit-graph.c: mark more strings for translation
      config.c: mark more strings for translation
      connect.c: mark more strings for translation
      convert.c: mark more strings for translation
      dir.c: mark more strings for translation
      environment.c: mark more strings for translation
      exec-cmd.c: mark more strings for translation
      object.c: mark more strings for translation
      pkt-line.c: mark more strings for translation
      refs.c: mark more strings for translation
      refspec.c: mark more strings for translation
      replace-object.c: mark more strings for translation
      sequencer.c: mark more strings for translation
      sha1-file.c: mark more strings for translation
      transport.c: mark more strings for translation
      transport-helper.c: mark more strings for translation
      pack-objects: document about thread synchronization
      apply.h: drop extern on func declaration
      attr.h: drop extern from function declaration
      blame.h: drop extern on func declaration
      cache-tree.h: drop extern from function declaration
      convert.h: drop 'extern' from function declaration
      diffcore.h: drop extern from function declaration
      diff.h: remove extern from function declaration
      line-range.h: drop extern from function declaration
      rerere.h: drop extern from function declaration
      repository.h: drop extern from function declaration
      revision.h: drop extern from function declaration
      submodule.h: drop extern from function declaration
      config.txt: reorder blame stuff to keep config keys sorted
      Makefile: add missing dependency for command-list.h
      diff.c: move read_index() code back to the caller
      cache-tree: wrap the_index based wrappers with #ifdef
      attr: remove an implicit dependency on the_index
      convert.c: remove an implicit dependency on the_index
      dir.c: remove an implicit dependency on the_index in pathspec code
      preload-index.c: use the right index instead of the_index
      ls-files: correct index argument to get_convert_attr_ascii()
      unpack-trees: remove 'extern' on function declaration
      unpack-trees: add a note about path invalidation
      unpack-trees: don't shadow global var the_index
      unpack-trees: convert clear_ce_flags* to avoid the_index
      unpack-trees: avoid the_index in verify_absent()
      pathspec.c: use the right index instead of the_index
      submodule.c: use the right index instead of the_index
      entry.c: use the right index instead of the_index
      attr: remove index from git_attr_set_direction()
      grep: use the right index instead of the_index
      archive.c: avoid access to the_index
      archive-*.c: use the right repository
      resolve-undo.c: use the right index instead of the_index
      apply.c: pass struct apply_state to more functions
      apply.c: make init_apply_state() take a struct repository
      apply.c: remove implicit dependency on the_index
      blame.c: remove implicit dependency on the_index
      cherry-pick: fix --quit not deleting CHERRY_PICK_HEAD

Nicholas Guriev (1):
      mergetool: don't suggest to continue after last file

Olga Telezhnaya (5):
      ref-filter: add info_source to valid_atom
      ref-filter: fill empty fields with empty values
      ref-filter: initialize eaten variable
      ref-filter: merge get_obj and get_object
      ref-filter: use oid_object_info() to get object

Phillip Wood (5):
      add -p: fix counting empty context lines in edited patches
      sequencer: do not squash 'reword' commits when we hit conflicts
      rebase -i: fix numbering in squash message
      t3430: add conflicting commit
      rebase -i: fix SIGSEGV when 'merge <branch>' fails

Prathamesh Chavan (4):
      submodule foreach: correct '$path' in nested submodules from a subdirectory
      submodule foreach: document '$sm_path' instead of '$path'
      submodule foreach: document variable '$displaypath'
      submodule: port submodule subcommand 'foreach' from shell to C

Ramsay Jones (3):
      fsck: check skiplist for object in fsck_blob()
      t6036: fix broken && chain in sub-shell
      t5562: avoid non-portable "export FOO=bar" construct

René Scharfe (7):
      remote: clear string_list after use in mv()
      add, update-index: fix --chmod argument help
      difftool: remove angular brackets from argument help
      pack-objects: specify --index-version argument help explicitly
      send-pack: specify --force-with-lease argument help explicitly
      shortlog: correct option help for -w
      parse-options: automatically infer PARSE_OPT_LITERAL_ARGHELP

SZEDER Gábor (19):
      update-ref --stdin: use skip_prefix()
      t7510-signed-commit: use 'test_must_fail'
      tests: make forging GPG signed commits and tags more robust
      t5541: clean up truncating access log
      t/lib-httpd: add the strip_access_log() helper function
      t/lib-httpd: avoid occasional failures when checking access.log
      t5608: fix broken &&-chain
      t9300: wait for background fast-import process to die after killing it
      travis-ci: run Coccinelle static analysis with two parallel jobs
      travis-ci: fail if Coccinelle static analysis found something to transform
      coccinelle: mark the 'coccicheck' make target as .PHONY
      coccinelle: use $(addsuffix) in 'coccicheck' make target
      coccinelle: exclude sha1dc source files from static analysis
      coccinelle: put sane filenames into output patches
      coccinelle: extract dedicated make target to clean Coccinelle's results
      travis-ci: include the trash directories of failed tests in the trace log
      t5318: use 'test_cmp_bin' to compare commit-graph files
      t5318: avoid unnecessary command substitutions
      t5310-pack-bitmaps: fix bogus 'pack-objects to file can use bitmap' test

Sebastian Kisela (2):
      git-instaweb: support Fedora/Red Hat apache module path
      git-instaweb: fix apache2 config with apache >= 2.4

Stefan Beller (87):
      repository: introduce parsed objects field
      object: add repository argument to create_object
      alloc: add repository argument to alloc_blob_node
      alloc: add repository argument to alloc_tree_node
      alloc: add repository argument to alloc_commit_node
      alloc: add repository argument to alloc_tag_node
      alloc: add repository argument to alloc_object_node
      alloc: add repository argument to alloc_report
      alloc: add repository argument to alloc_commit_index
      object: allow grow_object_hash to handle arbitrary repositories
      object: allow create_object to handle arbitrary repositories
      alloc: allow arbitrary repositories for alloc functions
      object-store: move object access functions to object-store.h
      shallow: add repository argument to set_alternate_shallow_file
      shallow: add repository argument to register_shallow
      shallow: add repository argument to check_shallow_file_for_update
      shallow: add repository argument to is_repository_shallow
      cache: convert get_graft_file to handle arbitrary repositories
      path.c: migrate global git_path_* to take a repository argument
      shallow: migrate shallow information into the object parser
      commit: allow prepare_commit_graft to handle arbitrary repositories
      commit: allow lookup_commit_graft to handle arbitrary repositories
      refs/packed-backend.c: close fd of empty file
      submodule--helper: plug mem leak in print_default_remote
      sequencer.c: plug leaks in do_pick_commit
      submodule: fix NULL correctness in renamed broken submodules
      t5526: test recursive submodules when fetching moved submodules
      submodule: unset core.worktree if no working tree is present
      submodule: ensure core.worktree is set after update
      submodule deinit: unset core.worktree
      submodule.c: report the submodule that an error occurs in
      sequencer.c: plug mem leak in git_sequencer_config
      .mailmap: merge different spellings of names
      object: add repository argument to parse_object
      object: add repository argument to lookup_object
      object: add repository argument to parse_object_buffer
      object: add repository argument to object_as_type
      blob: add repository argument to lookup_blob
      tree: add repository argument to lookup_tree
      commit: add repository argument to lookup_commit_reference_gently
      commit: add repository argument to lookup_commit_reference
      commit: add repository argument to lookup_commit
      commit: add repository argument to parse_commit_buffer
      commit: add repository argument to set_commit_buffer
      commit: add repository argument to get_cached_commit_buffer
      tag: add repository argument to lookup_tag
      tag: add repository argument to parse_tag_buffer
      tag: add repository argument to deref_tag
      object: allow object_as_type to handle arbitrary repositories
      object: allow lookup_object to handle arbitrary repositories
      blob: allow lookup_blob to handle arbitrary repositories
      tree: allow lookup_tree to handle arbitrary repositories
      commit: allow lookup_commit to handle arbitrary repositories
      tag: allow lookup_tag to handle arbitrary repositories
      tag: allow parse_tag_buffer to handle arbitrary repositories
      commit.c: allow parse_commit_buffer to handle arbitrary repositories
      commit-slabs: remove realloc counter outside of slab struct
      commit.c: migrate the commit buffer to the parsed object store
      commit.c: allow set_commit_buffer to handle arbitrary repositories
      commit.c: allow get_cached_commit_buffer to handle arbitrary repositories
      object.c: allow parse_object_buffer to handle arbitrary repositories
      object.c: allow parse_object to handle arbitrary repositories
      tag.c: allow deref_tag to handle arbitrary repositories
      commit.c: allow lookup_commit_reference_gently to handle arbitrary repositories
      commit.c: allow lookup_commit_reference to handle arbitrary repositories
      xdiff/xdiff.h: remove unused flags
      xdiff/xdiffi.c: remove unneeded function declarations
      t4015: avoid git as a pipe input
      diff.c: do not pass diff options as keydata to hashmap
      diff.c: adjust hash function signature to match hashmap expectation
      diff.c: add a blocks mode for moved code detection
      diff.c: decouple white space treatment from move detection algorithm
      diff.c: factor advance_or_nullify out of mark_color_as_moved
      diff.c: add white space mode to move detection that allows indent changes
      diff.c: offer config option to control ws handling in move detection
      xdiff/xhistogram: pass arguments directly to fall_back_to_classic_diff
      xdiff/xhistogram: factor out memory cleanup into free_index()
      xdiff/xhistogram: move index allocation into find_lcs
      Documentation/git-interpret-trailers: explain possible values
      xdiff/histogram: remove tail recursion
      t1300: document current behavior of setting options
      xdiff: reduce indent heuristic overhead
      config: fix case sensitive subsection names on writing
      git-config: document accidental multi-line setting in deprecated syntax
      git-submodule.sh: accept verbose flag in cmd_update to be non-quiet
      t7410: update to new style
      builtin/submodule--helper: remove stray new line

Taylor Blau (9):
      Documentation/config.txt: camel-case lineNumber for consistency
      grep.c: expose {,inverted} match column in match_line()
      grep.[ch]: extend grep_opt to allow showing matched column
      grep.c: display column number of first match
      builtin/grep.c: add '--column' option to 'git-grep(1)'
      grep.c: add configuration variables to show matched option
      contrib/git-jump/git-jump: jump to exact location
      grep.c: extract show_line_header()
      grep.c: teach 'git grep --only-matching'

Thomas Rast (1):
      range-diff: add tests

Tobias Klauser (1):
      git-rebase--preserve-merges: fix formatting of todo help message

Todd Zullinger (4):
      git-credential-netrc: minor whitespace cleanup in test script
      git-credential-netrc: make "all" default target of Makefile
      gitignore.txt: clarify default core.excludesfile path
      dir.c: fix typos in core.excludesfile comment

Ville Skyttä (1):
      Documentation: spelling and grammar fixes

Vladimir Parfinenko (1):
      rebase: fix documentation formatting

William Chargin (2):
      sha1-name.c: for ":/", find detached HEAD commits
      t: factor out FUNNYNAMES as shared lazy prereq

Xiaolong Ye (1):
      format-patch: clear UNINTERESTING flag before prepare_bases

brian m. carlson (21):
      send-email: add an auto option for transfer encoding
      send-email: accept long lines with suitable transfer encoding
      send-email: automatically determine transfer-encoding
      docs: correct RFC specifying email line length
      sequencer: pass absolute GIT_WORK_TREE to exec commands
      cache: update object ID functions for the_hash_algo
      tree-walk: replace hard-coded constants with the_hash_algo
      hex: switch to using the_hash_algo
      commit: express tree entry constants in terms of the_hash_algo
      strbuf: allocate space with GIT_MAX_HEXSZ
      sha1-name: use the_hash_algo when parsing object names
      refs/files-backend: use the_hash_algo for writing refs
      builtin/update-index: convert to using the_hash_algo
      builtin/update-index: simplify parsing of cacheinfo
      builtin/fmt-merge-msg: make hash independent
      builtin/merge: switch to use the_hash_algo
      builtin/merge-recursive: make hash independent
      diff: switch GIT_SHA1_HEXSZ to use the_hash_algo
      log-tree: switch GIT_SHA1_HEXSZ to the_hash_algo->hexsz
      sha1-file: convert constants to uses of the_hash_algo
      pretty: switch hard-coded constants to the_hash_algo

Ævar Arnfjörð Bjarmason (36):
      checkout tests: index should be clean after dwim checkout
      checkout.h: wrap the arguments to unique_tracking_name()
      checkout.c: introduce an *_INIT macro
      checkout.c: change "unique" member to "num_matches"
      checkout: pass the "num_matches" up to callers
      builtin/checkout.c: use "ret" variable for return
      checkout: add advice for ambiguous "checkout <branch>"
      checkout & worktree: introduce checkout.defaultRemote
      refspec: s/refspec_item_init/&_or_die/g
      refspec: add back a refspec_item_init() function
      doc hash-function-transition: note the lack of a changelog
      receive.fsck.<msg-id> tests: remove dead code
      config doc: don't describe *.fetchObjects twice
      config doc: unify the description of fsck.* and receive.fsck.*
      config doc: elaborate on what transfer.fsckObjects does
      config doc: elaborate on fetch.fsckObjects security
      transfer.fsckObjects tests: untangle confusing setup
      fetch: implement fetch.fsck.*
      fsck: test & document {fetch,receive}.fsck.* config fallback
      fsck: add stress tests for fsck.skipList
      fsck: test and document unknown fsck.<msg-id> values
      tests: make use of the test_must_be_empty function
      tests: make use of the test_must_be_empty function
      fetch tests: change "Tag" test tag to "testTag"
      push tests: remove redundant 'git push' invocation
      push tests: fix logic error in "push" test assertion
      push tests: add more testing for forced tag pushing
      push tests: assert re-pushing annotated tags
      negotiator: unknown fetch.negotiationAlgorithm should error out
      fetch doc: cross-link two new negotiation options
      sha1dc: update from upstream
      push: use PARSE_OPT_LITERAL_ARGHELP instead of unbalanced brackets
      fetch tests: correct a comment "remove it" -> "remove them"
      pull doc: fix a long-standing grammar error
      submodule: add more exhaustive up-path testing
      t2024: mark test using "checkout -p" with PERL prerequisite

Łukasz Stelmach (1):
      completion: complete remote names too


^ permalink raw reply	[relevance 3%]

* [ANNOUNCE] Git v2.19.0
@ 2018-09-10 20:11  3% Junio C Hamano
  0 siblings, 0 replies; 200+ results
From: Junio C Hamano @ 2018-09-10 20:11 UTC (permalink / raw)
  To: git; +Cc: Linux Kernel, git-packagers

The latest feature release Git v2.19.0 is now available at the
usual places.  It is comprised of 769 non-merge commits since
v2.18.0, contributed by 72 people, 16 of which are new faces.

The tarballs are found at:

    https://www.kernel.org/pub/software/scm/git/

The following public repositories all have a copy of the 'v2.19.0'
tag and the 'master' branch that the tag points at:

  url = https://kernel.googlesource.com/pub/scm/git/git
  url = git://repo.or.cz/alt-git.git
  url = https://github.com/gitster/git

New contributors whose contributions weren't in v2.18.0 are as follows.
Welcome to the Git development community!

  Aleksandr Makarov, Andrei Rybak, Chen Bin, Henning Schild,
  Isabella Stephens, Josh Steadmon, Jules Maselbas, Kana Natsuno,
  Marc Strapetz, Masaya Suzuki, Nicholas Guriev, Raphaël Hertzog,
  Samuel Maftoul, Sebastian Kisela, Vladimir Parfinenko, and
  William Chargin.

Returning contributors who helped this release are as follows.
Thanks for your continued support.

  Aaron Schrab, Ævar Arnfjörð Bjarmason, Alban Gruin, Alejandro
  R. Sedeño, Alexander Shopov, Anthony Sottile, Antonio Ospite,
  Beat Bolli, Ben Peart, Brandon Williams, brian m. carlson,
  Christian Couder, Christopher Díaz Riveros, Derrick Stolee,
  Dimitriy Ryazantcev, Elia Pinto, Elijah Newren, Eric Sunshine,
  Han-Wen Nienhuys, Jameson Miller, Jean-Noël Avila, Jeff
  Hostetler, Jeff King, Jiang Xin, Johannes Schindelin, Johannes
  Sixt, Jonathan Nieder, Jonathan Tan, Junio C Hamano, Kim Gybels,
  Kirill Smelkov, Kyle Meyer, Luis Marsano, Łukasz Stelmach,
  Luke Diamand, Martin Ågren, Max Kirillov, Michael Barabanov,
  Mike Hommey, Nguyễn Thái Ngọc Duy, Olga Telezhnaya, Peter
  Krefting, Phillip Wood, Prathamesh Chavan, Ralf Thielow, Ramsay
  Jones, René Scharfe, Stefan Beller, SZEDER Gábor, Taylor Blau,
  Thomas Rast, Tobias Klauser, Todd Zullinger, Trần Ngọc Quân,
  Ville Skyttä, and Xiaolong Ye.

----------------------------------------------------------------

Git 2.19 Release Notes
======================

Updates since v2.18
-------------------

UI, Workflows & Features

 * "git diff" compares the index and the working tree.  For paths
   added with intent-to-add bit, the command shows the full contents
   of them as added, but the paths themselves were not marked as new
   files.  They are now shown as new by default.

   "git apply" learned the "--intent-to-add" option so that an
   otherwise working-tree-only application of a patch will add new
   paths to the index marked with the "intent-to-add" bit.

 * "git grep" learned the "--column" option that gives not just the
   line number but the column number of the hit.

 * The "-l" option in "git branch -l" is an unfortunate short-hand for
   "--create-reflog", but many users, both old and new, somehow expect
   it to be something else, perhaps "--list".  This step warns when "-l"
   is used as a short-hand for "--create-reflog" and warns about the
   future repurposing of the it when it is used.

 * The userdiff pattern for .php has been updated.

 * The content-transfer-encoding of the message "git send-email" sends
   out by default was 8bit, which can cause trouble when there is an
   overlong line to bust RFC 5322/2822 limit.  A new option 'auto' to
   automatically switch to quoted-printable when there is such a line
   in the payload has been introduced and is made the default.

 * "git checkout" and "git worktree add" learned to honor
   checkout.defaultRemote when auto-vivifying a local branch out of a
   remote tracking branch in a repository with multiple remotes that
   have tracking branches that share the same names.
   (merge 8d7b558bae ab/checkout-default-remote later to maint).

 * "git grep" learned the "--only-matching" option.

 * "git rebase --rebase-merges" mode now handles octopus merges as
   well.

 * Add a server-side knob to skip commits in exponential/fibbonacci
   stride in an attempt to cover wider swath of history with a smaller
   number of iterations, potentially accepting a larger packfile
   transfer, instead of going back one commit a time during common
   ancestor discovery during the "git fetch" transaction.
   (merge 42cc7485a2 jt/fetch-negotiator-skipping later to maint).

 * A new configuration variable core.usereplacerefs has been added,
   primarily to help server installations that want to ignore the
   replace mechanism altogether.

 * Teach "git tag -s" etc. a few configuration variables (gpg.format
   that can be set to "openpgp" or "x509", and gpg.<format>.program
   that is used to specify what program to use to deal with the format)
   to allow x.509 certs with CMS via "gpgsm" to be used instead of
   openpgp via "gnupg".

 * Many more strings are prepared for l10n.

 * "git p4 submit" learns to ask its own pre-submit hook if it should
   continue with submitting.

 * The test performed at the receiving end of "git push" to prevent
   bad objects from entering repository can be customized via
   receive.fsck.* configuration variables; we now have gained a
   counterpart to do the same on the "git fetch" side, with
   fetch.fsck.* configuration variables.

 * "git pull --rebase=interactive" learned "i" as a short-hand for
   "interactive".

 * "git instaweb" has been adjusted to run better with newer Apache on
   RedHat based distros.

 * "git range-diff" is a reimplementation of "git tbdiff" that lets us
   compare individual patches in two iterations of a topic.

 * The sideband code learned to optionally paint selected keywords at
   the beginning of incoming lines on the receiving end.

 * "git branch --list" learned to take the default sort order from the
   'branch.sort' configuration variable, just like "git tag --list"
   pays attention to 'tag.sort'.

 * "git worktree" command learned "--quiet" option to make it less
   verbose.


Performance, Internal Implementation, Development Support etc.

 * The bulk of "git submodule foreach" has been rewritten in C.

 * The in-core "commit" object had an all-purpose "void *util" field,
   which was tricky to use especially in library-ish part of the
   code.  All of the existing uses of the field has been migrated to a
   more dedicated "commit-slab" mechanism and the field is eliminated.

 * A less often used command "git show-index" has been modernized.
   (merge fb3010c31f jk/show-index later to maint).

 * The conversion to pass "the_repository" and then "a_repository"
   throughout the object access API continues.

 * Continuing with the idea to programatically enumerate various
   pieces of data required for command line completion, teach the
   codebase to report the list of configuration variables
   subcommands care about to help complete them.

 * Separate "rebase -p" codepath out of "rebase -i" implementation to
   slim down the latter and make it easier to manage.

 * Make refspec parsing codepath more robust.

 * Some flaky tests have been fixed.

 * Continuing with the idea to programmatically enumerate various
   pieces of data required for command line completion, the codebase
   has been taught to enumerate options prefixed with "--no-" to
   negate them.

 * Build and test procedure for netrc credential helper (in contrib/)
   has been updated.

 * Remove unused function definitions and declarations from ewah
   bitmap subsystem.

 * Code preparation to make "git p4" closer to be usable with Python 3.

 * Tighten the API to make it harder to misuse in-tree .gitmodules
   file, even though it shares the same syntax with configuration
   files, to read random configuration items from it.

 * "git fast-import" has been updated to avoid attempting to create
   delta against a zero-byte-long string, which is pointless.

 * The codebase has been updated to compile cleanly with -pedantic
   option.
   (merge 2b647a05d7 bb/pedantic later to maint).

 * The character display width table has been updated to match the
   latest Unicode standard.
   (merge 570951eea2 bb/unicode-11-width later to maint).

 * test-lint now looks for broken use of "VAR=VAL shell_func" in test
   scripts.

 * Conversion from uchar[40] to struct object_id continues.

 * Recent "security fix" to pay attention to contents of ".gitmodules"
   while accepting "git push" was a bit overly strict than necessary,
   which has been adjusted.

 * "git fsck" learns to make sure the optional commit-graph file is in
   a sane state.

 * "git diff --color-moved" feature has further been tweaked.

 * Code restructuring and a small fix to transport protocol v2 during
   fetching.

 * Parsing of -L[<N>][,[<M>]] parameters "git blame" and "git log"
   take has been tweaked.

 * lookup_commit_reference() and friends have been updated to find
   in-core object for a specific in-core repository instance.

 * Various glitches in the heuristics of merge-recursive strategy have
   been documented in new tests.

 * "git fetch" learned a new option "--negotiation-tip" to limit the
   set of commits it tells the other end as "have", to reduce wasted
   bandwidth and cycles, which would be helpful when the receiving
   repository has a lot of refs that have little to do with the
   history at the remote it is fetching from.

 * For a large tree, the index needs to hold many cache entries
   allocated on heap.  These cache entries are now allocated out of a
   dedicated memory pool to amortize malloc(3) overhead.

 * Tests to cover various conflicting cases have been added for
   merge-recursive.

 * Tests to cover conflict cases that involve submodules have been
   added for merge-recursive.

 * Look for broken "&&" chains that are hidden in subshell, many of
   which have been found and corrected.

 * The singleton commit-graph in-core instance is made per in-core
   repository instance.

 * "make DEVELOPER=1 DEVOPTS=pedantic" allows developers to compile
   with -pedantic option, which may catch more problematic program
   constructs and potential bugs.

 * Preparatory code to later add json output for telemetry data has
   been added.

 * Update the way we use Coccinelle to find out-of-style code that
   need to be modernised.

 * It is too easy to misuse system API functions such as strcat();
   these selected functions are now forbidden in this codebase and
   will cause a compilation failure.

 * Add a script (in contrib/) to help users of VSCode work better with
   our codebase.

 * The Travis CI scripts were taught to ship back the test data from
   failed tests.
   (merge aea8879a6a sg/travis-retrieve-trash-upon-failure later to maint).

 * The parse-options machinery learned to refrain from enclosing
   placeholder string inside a "<bra" and "ket>" pair automatically
   without PARSE_OPT_LITERAL_ARGHELP.  Existing help text for option
   arguments that are not formatted correctly have been identified and
   fixed.
   (merge 5f0df44cd7 rs/parse-opt-lithelp later to maint).

 * Noiseword "extern" has been removed from function decls in the
   header files.

 * A few atoms like %(objecttype) and %(objectsize) in the format
   specifier of "for-each-ref --format=<format>" can be filled without
   getting the full contents of the object, but just with the object
   header.  These cases have been optimized by calling
   oid_object_info() API (instead of reading and inspecting the data).

 * The end result of documentation update has been made to be
   inspected more easily to help developers.

 * The API to iterate over all objects learned to optionally list
   objects in the order they appear in packfiles, which helps locality
   of access if the caller accesses these objects while as objects are
   enumerated.

 * Improve built-in facility to catch broken &&-chain in the tests.

 * The more library-ish parts of the codebase learned to work on the
   in-core index-state instance that is passed in by their callers,
   instead of always working on the singleton "the_index" instance.

 * A test prerequisite defined by various test scripts with slightly
   different semantics has been consolidated into a single copy and
   made into a lazily defined one.
   (merge 6ec633059a wc/make-funnynames-shared-lazy-prereq later to maint).

 * After a partial clone, repeated fetches from promisor remote would
   have accumulated many packfiles marked with .promisor bit without
   getting them coalesced into fewer packfiles, hurting performance.
   "git repack" now learned to repack them.

 * Partially revert the support for multiple hash functions to regain
   hash comparison performance; we'd think of a way to do this better
   in the next cycle.

 * "git help --config" (which is used in command line completion)
   missed the configuration variables not described in the main
   config.txt file but are described in another file that is included
   by it, which has been corrected.

 * The test linter code has learned that the end of here-doc mark
   "EOF" can be quoted in a double-quote pair, not just in a
   single-quote pair.


Fixes since v2.18
-----------------

 * "git remote update" can take both a single remote nickname and a
   nickname for remote groups, and the completion script (in contrib/)
   has been taught about it.
   (merge 9cd4382ad5 ls/complete-remote-update-names later to maint).

 * "git fetch --shallow-since=<cutoff>" that specifies the cut-off
   point that is newer than the existing history used to end up
   grabbing the entire history.  Such a request now errors out.
   (merge e34de73c56 nd/reject-empty-shallow-request later to maint).

 * Fix for 2.17-era regression around `core.safecrlf`.
   (merge 6cb09125be as/safecrlf-quiet-fix later to maint).

 * The recent addition of "partial clone" experimental feature kicked
   in when it shouldn't, namely, when there is no partial-clone filter
   defined even if extensions.partialclone is set.
   (merge cac1137dc4 jh/partial-clone later to maint).

 * "git send-pack --signed" (hence "git push --signed" over the http
   transport) did not read user ident from the config mechanism to
   determine whom to sign the push certificate as, which has been
   corrected.
   (merge d067d98887 ms/send-pack-honor-config later to maint).

 * "git fetch-pack --all" used to unnecessarily fail upon seeing an
   annotated tag that points at an object other than a commit.
   (merge c12c9df527 jk/fetch-all-peeled-fix later to maint).

 * When user edits the patch in "git add -p" and the user's editor is
   set to strip trailing whitespaces indiscriminately, an empty line
   that is unchanged in the patch would become completely empty
   (instead of a line with a sole SP on it).  The code introduced in
   Git 2.17 timeframe failed to parse such a patch, but now it learned
   to notice the situation and cope with it.
   (merge f4d35a6b49 pw/add-p-recount later to maint).

 * The code to try seeing if a fetch is necessary in a submodule
   during a fetch with --recurse-submodules got confused when the path
   to the submodule was changed in the range of commits in the
   superproject, sometimes showing "(null)".  This has been corrected.

 * Bugfix for "rebase -i" corner case regression.
   (merge a9279c6785 pw/rebase-i-keep-reword-after-conflict later to maint).

 * Recently added "--base" option to "git format-patch" command did
   not correctly generate prereq patch ids.
   (merge 15b76c1fb3 xy/format-patch-prereq-patch-id-fix later to maint).

 * POSIX portability fix in Makefile to fix a glitch introduced a few
   releases ago.
   (merge 6600054e9b dj/runtime-prefix later to maint).

 * "git filter-branch" when used with the "--state-branch" option
   still attempted to rewrite the commits whose filtered result is
   known from the previous attempt (which is recorded on the state
   branch); the command has been corrected not to waste cycles doing
   so.
   (merge 709cfe848a mb/filter-branch-optim later to maint).

 * Clarify that setting core.ignoreCase to deviate from reality would
   not turn a case-incapable filesystem into a case-capable one.
   (merge 48294b512a ms/core-icase-doc later to maint).

 * "fsck.skipList" did not prevent a blob object listed there from
   being inspected for is contents (e.g. we recently started to
   inspect the contents of ".gitmodules" for certain malicious
   patterns), which has been corrected.
   (merge fb16287719 rj/submodule-fsck-skip later to maint).

 * "git checkout --recurse-submodules another-branch" did not report
   in which submodule it failed to update the working tree, which
   resulted in an unhelpful error message.
   (merge ba95d4e4bd sb/submodule-move-head-error-msg later to maint).

 * "git rebase" behaved slightly differently depending on which one of
   the three backends gets used; this has been documented and an
   effort to make them more uniform has begun.
   (merge b00bf1c9a8 en/rebase-consistency later to maint).

 * The "--ignore-case" option of "git for-each-ref" (and its friends)
   did not work correctly, which has been fixed.
   (merge e674eb2528 jk/for-each-ref-icase later to maint).

 * "git fetch" failed to correctly validate the set of objects it
   received when making a shallow history deeper, which has been
   corrected.
   (merge cf1e7c0770 jt/connectivity-check-after-unshallow later to maint).

 * Partial clone support of "git clone" has been updated to correctly
   validate the objects it receives from the other side.  The server
   side has been corrected to send objects that are directly
   requested, even if they may match the filtering criteria (e.g. when
   doing a "lazy blob" partial clone).
   (merge a7e67c11b8 jt/partial-clone-fsck-connectivity later to maint).

 * Handling of an empty range by "git cherry-pick" was inconsistent
   depending on how the range ended up to be empty, which has been
   corrected.
   (merge c5e358d073 jk/empty-pick-fix later to maint).

 * "git reset --merge" (hence "git merge ---abort") and "git reset --hard"
   had trouble working correctly in a sparsely checked out working
   tree after a conflict, which has been corrected.
   (merge b33fdfc34c mk/merge-in-sparse-checkout later to maint).

 * Correct a broken use of "VAR=VAL shell_func" in a test.
   (merge 650161a277 jc/t3404-one-shot-export-fix later to maint).

 * "git rev-parse ':/substring'" did not consider the history leading
   only to HEAD when looking for a commit with the given substring,
   when the HEAD is detached.  This has been fixed.
   (merge 6b3351e799 wc/find-commit-with-pattern-on-detached-head later to maint).

 * Build doc update for Windows.
   (merge ede8d89bb1 nd/command-list later to maint).

 * core.commentchar is now honored when preparing the list of commits
   to replay in "rebase -i".

 * "git pull --rebase" on a corrupt HEAD caused a segfault.  In
   general we substitute an empty tree object when running the in-core
   equivalent of the diff-index command, and the codepath has been
   corrected to do so as well to fix this issue.
   (merge 3506dc9445 jk/has-uncommitted-changes-fix later to maint).

 * httpd tests saw occasional breakage due to the way its access log
   gets inspected by the tests, which has been updated to make them
   less flaky.
   (merge e8b3b2e275 sg/httpd-test-unflake later to maint).

 * Tests to cover more D/F conflict cases have been added for
   merge-recursive.

 * "git gc --auto" opens file descriptors for the packfiles before
   spawning "git repack/prune", which would upset Windows that does
   not want a process to work on a file that is open by another
   process.  The issue has been worked around.
   (merge 12e73a3ce4 kg/gc-auto-windows-workaround later to maint).

 * The recursive merge strategy did not properly ensure there was no
   change between HEAD and the index before performing its operation,
   which has been corrected.
   (merge 55f39cf755 en/dirty-merge-fixes later to maint).

 * "git rebase" started exporting GIT_DIR environment variable and
   exposing it to hook scripts when part of it got rewritten in C.
   Instead of matching the old scripted Porcelains' behaviour,
   compensate by also exporting GIT_WORK_TREE environment as well to
   lessen the damage.  This can harm existing hooks that want to
   operate on different repository, but the current behaviour is
   already broken for them anyway.
   (merge ab5e67d751 bc/sequencer-export-work-tree-as-well later to maint).

 * "git send-email" when using in a batched mode that limits the
   number of messages sent in a single SMTP session lost the contents
   of the variable used to choose between tls/ssl, unable to send the
   second and later batches, which has been fixed.
   (merge 636f3d7ac5 jm/send-email-tls-auth-on-batch later to maint).

 * The lazy clone support had a few places where missing but promised
   objects were not correctly tolerated, which have been fixed.

 * One of the "diff --color-moved" mode "dimmed_zebra" that was named
   in an unusual way has been deprecated and replaced by
   "dimmed-zebra".
   (merge e3f2f5f9cd es/diff-color-moved-fix later to maint).

 * The wire-protocol v2 relies on the client to send "ref prefixes" to
   limit the bandwidth spent on the initial ref advertisement.  "git
   clone" when learned to speak v2 forgot to do so, which has been
   corrected.
   (merge 402c47d939 bw/clone-ref-prefixes later to maint).

 * "git diff --histogram" had a bad memory usage pattern, which has
   been rearranged to reduce the peak usage.
   (merge 79cb2ebb92 sb/histogram-less-memory later to maint).

 * Code clean-up to use size_t/ssize_t when they are the right type.
   (merge 7726d360b5 jk/size-t later to maint).

 * The wire-protocol v2 relies on the client to send "ref prefixes" to
   limit the bandwidth spent on the initial ref advertisement.  "git
   fetch $remote branch:branch" that asks tags that point into the
   history leading to the "branch" automatically followed sent to
   narrow prefix and broke the tag following, which has been fixed.
   (merge 2b554353a5 jt/tag-following-with-proto-v2-fix later to maint).

 * When the sparse checkout feature is in use, "git cherry-pick" and
   other mergy operations lost the skip_worktree bit when a path that
   is excluded from checkout requires content level merge, which is
   resolved as the same as the HEAD version, without materializing the
   merge result in the working tree, which made the path appear as
   deleted.  This has been corrected by preserving the skip_worktree
   bit (and not materializing the file in the working tree).
   (merge 2b75fb601c en/merge-recursive-skip-fix later to maint).

 * The "author-script" file "git rebase -i" creates got broken when
   we started to move the command away from shell script, which is
   getting fixed now.
   (merge 5522bbac20 es/rebase-i-author-script-fix later to maint).

 * The automatic tree-matching in "git merge -s subtree" was broken 5
   years ago and nobody has noticed since then, which is now fixed.
   (merge 2ec4150713 jk/merge-subtree-heuristics later to maint).

 * "git fetch $there refs/heads/s" ought to fetch the tip of the
   branch 's', but when "refs/heads/refs/heads/s", i.e. a branch whose
   name is "refs/heads/s" exists at the same time, fetched that one
   instead by mistake.  This has been corrected to honor the usual
   disambiguation rules for abbreviated refnames.
   (merge 60650a48c0 jt/refspec-dwim-precedence-fix later to maint).

 * Futureproofing a helper function that can easily be misused.
   (merge 65bb21e77e es/want-color-fd-defensive later to maint).

 * The http-backend (used for smart-http transport) used to slurp the
   whole input until EOF, without paying attention to CONTENT_LENGTH
   that is supplied in the environment and instead expecting the Web
   server to close the input stream.  This has been fixed.
   (merge eebfe40962 mk/http-backend-content-length later to maint).

 * "git merge --abort" etc. did not clean things up properly when
   there were conflicted entries in the index in certain order that
   are involved in D/F conflicts.  This has been corrected.
   (merge ad3762042a en/abort-df-conflict-fixes later to maint).

 * "git diff --indent-heuristic" had a bad corner case performance.
   (merge 301ef85401 sb/indent-heuristic-optim later to maint).

 * The "--exec" option to "git rebase --rebase-merges" placed the exec
   commands at wrong places, which has been corrected.

 * "git verify-tag" and "git verify-commit" have been taught to use
   the exit status of underlying "gpg --verify" to signal bad or
   untrusted signature they found.
   (merge 4e5dc9ca17 jc/gpg-status later to maint).

 * "git mergetool" stopped and gave an extra prompt to continue after
   the last path has been handled, which did not make much sense.
   (merge d651a54b8a ng/mergetool-lose-final-prompt later to maint).

 * Among the three codepaths we use O_APPEND to open a file for
   appending, one used for writing GIT_TRACE output requires O_APPEND
   implementation that behaves sensibly when multiple processes are
   writing to the same file.  POSIX emulation used in the Windows port
   has been updated to improve in this area.
   (merge d641097589 js/mingw-o-append later to maint).

 * "git pull --rebase -v" in a repository with a submodule barfed as
   an intermediate process did not understand what "-v(erbose)" flag
   meant, which has been fixed.
   (merge e84c3cf3dc sb/pull-rebase-submodule later to maint).

 * Recent update to "git config" broke updating variable in a
   subsection, which has been corrected.
   (merge bff7df7a87 sb/config-write-fix later to maint).

 * When "git rebase -i" is told to squash two or more commits into
   one, it labeled the log message for each commit with its number.
   It correctly called the first one "1st commit", but the next one
   was "commit #1", which was off-by-one.  This has been corrected.
   (merge dd2e36ebac pw/rebase-i-squash-number-fix later to maint).

 * "git rebase -i", when a 'merge <branch>' insn in its todo list
   fails, segfaulted, which has been (minimally) corrected.
   (merge bc9238bb09 pw/rebase-i-merge-segv-fix later to maint).

 * "git cherry-pick --quit" failed to remove CHERRY_PICK_HEAD even
   though we won't be in a cherry-pick session after it returns, which
   has been corrected.
   (merge 3e7dd99208 nd/cherry-pick-quit-fix later to maint).

 * In a recent update in 2.18 era, "git pack-objects" started
   producing a larger than necessary packfiles by missing
   opportunities to use large deltas.  This has been corrected.

 * The meaning of the possible values the "core.checkStat"
   configuration variable can take were not adequately documented,
   which has been fixed.
   (merge 9bf5d4c4e2 nd/config-core-checkstat-doc later to maint).

 * Recent "git rebase -i" update started to write bogusly formatted
   author-script, with a matching broken reading code.  These are
   fixed.

 * Recent addition of "directory rename" heuristics to the
   merge-recursive backend makes the command susceptible to false
   positives and false negatives.  In the context of "git am -3",
   which does not know about surrounding unmodified paths and thus
   cannot inform the merge machinery about the full trees involved,
   this risk is particularly severe.  As such, the heuristic is
   disabled for "git am -3" to keep the machinery "more stupid but
   predictable".

 * "git merge-base" in 2.19-rc1 has performance regression when the
   (experimental) commit-graph feature is in use, which has been
   mitigated.

 * Code cleanup, docfix, build fix, etc.
   (merge aee9be2ebe sg/update-ref-stdin-cleanup later to maint).
   (merge 037714252f jc/clean-after-sanity-tests later to maint).
   (merge 5b26c3c941 en/merge-recursive-cleanup later to maint).
   (merge 0dcbc0392e bw/config-refer-to-gitsubmodules-doc later to maint).
   (merge bb4d000e87 bw/protocol-v2 later to maint).
   (merge 928f0ab4ba vs/typofixes later to maint).
   (merge d7f590be84 en/rebase-i-microfixes later to maint).
   (merge 81d395cc85 js/rebase-recreate-merge later to maint).
   (merge 51d1863168 tz/exclude-doc-smallfixes later to maint).
   (merge a9aa3c0927 ds/commit-graph later to maint).
   (merge 5cf8e06474 js/enhanced-version-info later to maint).
   (merge 6aaded5509 tb/config-default later to maint).
   (merge 022d2ac1f3 sb/blame-color later to maint).
   (merge 5a06a20e0c bp/test-drop-caches-for-windows later to maint).
   (merge dd61cc1c2e jk/ui-color-always-to-auto later to maint).
   (merge 1e83b9bfdd sb/trailers-docfix later to maint).
   (merge ab29f1b329 sg/fast-import-dump-refs-on-checkpoint-fix later to maint).
   (merge 6a8ad880f0 jn/subtree-test-fixes later to maint).
   (merge ffbd51cc60 nd/pack-objects-threading-doc later to maint).
   (merge e9dac7be60 es/mw-to-git-chain-fix later to maint).
   (merge fe583c6c7a rs/remote-mv-leakfix later to maint).
   (merge 69885ab015 en/t3031-title-fix later to maint).
   (merge 8578037bed nd/config-blame-sort later to maint).
   (merge 8ad169c4ba hn/config-in-code-comment later to maint).
   (merge b7446fcfdf ar/t4150-am-scissors-test-fix later to maint).
   (merge a8132410ee js/typofixes later to maint).
   (merge 388d0ff6e5 en/update-index-doc later to maint).
   (merge e05aa688dd jc/update-index-doc later to maint).
   (merge 10c600172c sg/t5310-empty-input-fix later to maint).
   (merge 5641eb9465 jh/partial-clone-doc later to maint).
   (merge 2711b1ad5e ab/submodule-relative-url-tests later to maint).
   (merge ce528de023 ab/unconditional-free-and-null later to maint).
   (merge bbc072f5d8 rs/opt-updates later to maint).
   (merge 69d846f053 jk/use-compat-util-in-test-tool later to maint).
   (merge 1820703045 js/larger-timestamps later to maint).
   (merge c8b35b95e1 sg/t4051-fix later to maint).
   (merge 30612cb670 sg/t0020-conversion-fix later to maint).
   (merge 15da753709 sg/t7501-thinkofix later to maint).
   (merge 79b04f9b60 sg/t3903-missing-fix later to maint).
   (merge 2745817028 sg/t3420-autostash-fix later to maint).
   (merge 7afb0d6777 sg/test-rebase-editor-fix later to maint).
   (merge 6c6ce21baa es/freebsd-iconv-portability later to maint).

----------------------------------------------------------------

Changes since v2.18.0 are as follows:

Aaron Schrab (1):
      sequencer: use configured comment character

Alban Gruin (4):
      rebase: introduce a dedicated backend for --preserve-merges
      rebase: strip unused code in git-rebase--preserve-merges.sh
      rebase: use the new git-rebase--preserve-merges.sh
      rebase: remove -p code from git-rebase--interactive.sh

Alejandro R. Sedeño (1):
      Makefile: tweak sed invocation

Aleksandr Makarov (1):
      for-each-ref: consistently pass WM_IGNORECASE flag

Alexander Shopov (1):
      l10n: bg.po: Updated Bulgarian translation (3958t)

Andrei Rybak (2):
      Documentation: fix --color option formatting
      t4150: fix broken test for am --scissors

Anthony Sottile (1):
      config.c: fix regression for core.safecrlf false

Antonio Ospite (6):
      config: move config_from_gitmodules to submodule-config.c
      submodule-config: add helper function to get 'fetch' config from .gitmodules
      submodule-config: add helper to get 'update-clone' config from .gitmodules
      submodule-config: make 'config_from_gitmodules' private
      submodule-config: pass repository as argument to config_from_gitmodules
      submodule-config: reuse config_from_gitmodules in repo_read_gitmodules

Beat Bolli (10):
      builtin/config: work around an unsized array forward declaration
      unicode: update the width tables to Unicode 11
      connect.h: avoid forward declaration of an enum
      refs/refs-internal.h: avoid forward declaration of an enum
      convert.c: replace "\e" escapes with "\033".
      sequencer.c: avoid empty statements at top level
      string-list.c: avoid conversion from void * to function pointer
      utf8.c: avoid char overflow
      Makefile: add a DEVOPTS flag to get pedantic compilation
      packfile: ensure that enum object_type is defined

Ben Peart (3):
      convert log_ref_write_fd() to use strbuf
      handle lower case drive letters on Windows
      t3507: add a testcase showing failure with sparse checkout

Brandon Williams (15):
      commit: convert commit_graft_pos() to handle arbitrary repositories
      commit: convert register_commit_graft to handle arbitrary repositories
      commit: convert read_graft_file to handle arbitrary repositories
      test-pkt-line: add unpack-sideband subcommand
      docs: link to gitsubmodules
      upload-pack: implement ref-in-want
      upload-pack: test negotiation with changing repository
      fetch: refactor the population of peer ref OIDs
      fetch: refactor fetch_refs into two functions
      fetch: refactor to make function args narrower
      fetch-pack: put shallow info in output parameter
      fetch-pack: implement ref-in-want
      clone: send ref-prefixes when using protocol v2
      fetch-pack: mark die strings for translation
      pack-protocol: mention and point to docs for protocol v2

Chen Bin (1):
      git-p4: add the `p4-pre-submit` hook

Christian Couder (1):
      t9104: kosherly remove remote refs

Christopher Díaz Riveros (1):
      l10n: es.po v2.19.0 round 2

Derrick Stolee (46):
      ref-filter: fix outdated comment on in_commit_list
      commit: add generation number to struct commit
      commit-graph: compute generation numbers
      commit: use generations in paint_down_to_common()
      commit-graph: always load commit-graph information
      ref-filter: use generation number for --contains
      commit: use generation numbers for in_merge_bases()
      commit: add short-circuit to paint_down_to_common()
      commit: use generation number in remove_redundant()
      merge: check config before loading commits
      commit-graph.txt: update design document
      commit-graph: fix UX issue when .lock file exists
      ewah/bitmap.c: delete unused 'bitmap_clear()'
      ewah/bitmap.c: delete unused 'bitmap_each_bit()'
      ewah_bitmap: delete unused 'ewah_and()'
      ewah_bitmap: delete unused 'ewah_and_not()'
      ewah_bitmap: delete unused 'ewah_not()'
      ewah_bitmap: delete unused 'ewah_or()'
      ewah_io: delete unused 'ewah_serialize()'
      t5318-commit-graph.sh: use core.commitGraph
      commit-graph: UNLEAK before die()
      commit-graph: fix GRAPH_MIN_SIZE
      commit-graph: parse commit from chosen graph
      commit: force commit to parse from object database
      commit-graph: load a root tree from specific graph
      commit-graph: add 'verify' subcommand
      commit-graph: verify catches corrupt signature
      commit-graph: verify required chunks are present
      commit-graph: verify corrupt OID fanout and lookup
      commit-graph: verify objects exist
      commit-graph: verify root tree OIDs
      commit-graph: verify parent list
      commit-graph: verify generation number
      commit-graph: verify commit date
      commit-graph: test for corrupted octopus edge
      commit-graph: verify contents match checksum
      fsck: verify commit-graph
      commit-graph: use string-list API for input
      commit-graph: add '--reachable' option
      gc: automatically write commit-graph files
      commit-graph: update design document
      commit-graph: fix documentation inconsistencies
      coccinelle: update commit.cocci
      commit: use timestamp_t for author_date_slab
      config: fix commit-graph related config docs
      commit: don't use generation numbers if not needed

Dimitriy Ryazantcev (1):
      l10n: ru.po: update Russian translation

Elia Pinto (1):
      worktree: add --quiet option

Elijah Newren (66):
      t6036, t6042: use test_create_repo to keep tests independent
      t6036, t6042: use test_line_count instead of wc -l
      t6036, t6042: prefer test_path_is_file, test_path_is_missing
      t6036, t6042: prefer test_cmp to sequences of test
      t6036: prefer test_when_finished to manual cleanup in following test
      merge-recursive: fix miscellaneous grammar error in comment
      merge-recursive: fix numerous argument alignment issues
      merge-recursive: align labels with their respective code blocks
      merge-recursive: clarify the rename_dir/RENAME_DIR meaning
      merge-recursive: rename conflict_rename_*() family of functions
      merge-recursive: add pointer about unduly complex looking code
      git-rebase.txt: document incompatible options
      git-rebase.sh: update help messages a bit
      t3422: new testcases for checking when incompatible options passed
      git-rebase: error out when incompatible options passed
      git-rebase.txt: address confusion between --no-ff vs --force-rebase
      directory-rename-detection.txt: technical docs on abilities and limitations
      git-rebase.txt: document behavioral differences between modes
      t3401: add directory rename testcases for rebase and am
      git-rebase: make --allow-empty-message the default
      t3418: add testcase showing problems with rebase -i and strategy options
      Fix use of strategy options with interactive rebases
      git-rebase--merge: modernize "git-$cmd" to "git $cmd"
      apply: fix grammar error in comment
      t5407: fix test to cover intended arguments
      read-cache.c: move index_has_changes() from merge.c
      index_has_changes(): avoid assuming operating on the_index
      t6044: verify that merges expected to abort actually abort
      t6036: add a failed conflict detection case with symlink modify/modify
      t6036: add a failed conflict detection case with symlink add/add
      t6036: add a failed conflict detection case with submodule modify/modify
      t6036: add a failed conflict detection case with submodule add/add
      t6036: add a failed conflict detection case with conflicting types
      t6042: add testcase covering rename/add/delete conflict type
      t6042: add testcase covering rename/rename(2to1)/delete/delete conflict
      t6042: add testcase covering long chains of rename conflicts
      t6036: add lots of detail for directory/file conflicts in recursive case
      t6036: add a failed conflict detection case: regular files, different modes
      t6044: add a testcase for index matching head, when head doesn't match HEAD
      merge-recursive: make sure when we say we abort that we actually abort
      merge-recursive: fix assumption that head tree being merged is HEAD
      t6044: add more testcases with staged changes before a merge is invoked
      merge-recursive: enforce rule that index matches head before merging
      merge: fix misleading pre-merge check documentation
      t7405: add a file/submodule conflict
      t7405: add a directory/submodule conflict
      t7405: verify 'merge --abort' works after submodule/path conflicts
      merge-recursive: preserve skip_worktree bit when necessary
      t1015: demonstrate directory/file conflict recovery failures
      read-cache: fix directory/file conflict handling in read_index_unmerged()
      t3031: update test description to mention desired behavior
      t7406: fix call that was failing for the wrong reason
      t7406: simplify by using diff --name-only instead of diff --raw
      t7406: avoid having git commands upstream of a pipe
      t7406: prefer test_* helper functions to test -[feds]
      t7406: avoid using test_must_fail for commands other than git
      git-update-index.txt: reword possibly confusing example
      Add missing includes and forward declarations
      alloc: make allocate_alloc_state and clear_alloc_state more consistent
      Move definition of enum branch_track from cache.h to branch.h
      urlmatch.h: fix include guard
      compat/precompose_utf8.h: use more common include guard style
      Remove forward declaration of an enum
      t3401: add another directory rename testcase for rebase and am
      merge-recursive: add ability to turn off directory rename detection
      am: avoid directory rename detection when calling recursive merge machinery

Eric Sunshine (55):
      t: use test_might_fail() instead of manipulating exit code manually
      t: use test_write_lines() instead of series of 'echo' commands
      t: use sane_unset() rather than 'unset' with broken &&-chain
      t: drop unnecessary terminating semicolon in subshell
      t/lib-submodule-update: fix "absorbing" test
      t5405: use test_must_fail() instead of checking exit code manually
      t5406: use write_script() instead of birthing shell script manually
      t5505: modernize and simplify hard-to-digest test
      t6036: fix broken "merge fails but has appropriate contents" tests
      t7201: drop pointless "exit 0" at end of subshell
      t7400: fix broken "submodule add/reconfigure --force" test
      t7810: use test_expect_code() instead of hand-rolled comparison
      t9001: fix broken "invoke hook" test
      t9814: simplify convoluted check that command correctly errors out
      t0000-t0999: fix broken &&-chains
      t1000-t1999: fix broken &&-chains
      t2000-t2999: fix broken &&-chains
      t3000-t3999: fix broken &&-chains
      t3030: fix broken &&-chains
      t4000-t4999: fix broken &&-chains
      t5000-t5999: fix broken &&-chains
      t6000-t6999: fix broken &&-chains
      t7000-t7999: fix broken &&-chains
      t9000-t9999: fix broken &&-chains
      t9119: fix broken &&-chains
      t6046/t9833: fix use of "VAR=VAL cmd" with a shell function
      t/check-non-portable-shell: stop being so polite
      t/check-non-portable-shell: make error messages more compact
      t/check-non-portable-shell: detect "FOO=bar shell_func"
      t/test-lib: teach --chain-lint to detect broken &&-chains in subshells
      t/Makefile: add machinery to check correctness of chainlint.sed
      t/chainlint: add chainlint "basic" test cases
      t/chainlint: add chainlint "whitespace" test cases
      t/chainlint: add chainlint "one-liner" test cases
      t/chainlint: add chainlint "nested subshell" test cases
      t/chainlint: add chainlint "loop" and "conditional" test cases
      t/chainlint: add chainlint "cuddled" test cases
      t/chainlint: add chainlint "complex" test cases
      t/chainlint: add chainlint "specialized" test cases
      diff: --color-moved: rename "dimmed_zebra" to "dimmed-zebra"
      mw-to-git/t9360: fix broken &&-chain
      t/chainlint.sed: drop extra spaces from regex character class
      sequencer: fix "rebase -i --root" corrupting author header
      sequencer: fix "rebase -i --root" corrupting author header timezone
      sequencer: fix "rebase -i --root" corrupting author header timestamp
      sequencer: don't die() on bogus user-edited timestamp
      color: protect against out-of-bounds reads and writes
      chainlint: match arbitrary here-docs tags rather than hard-coded names
      chainlint: match 'quoted' here-doc tags
      chainlint: recognize multi-line $(...) when command cuddled with "$("
      chainlint: let here-doc and multi-line string commence on same line
      chainlint: recognize multi-line quoted strings more robustly
      chainlint: add test of pathological case which triggered false positive
      chainlint: match "quoted" here-doc tags
      config.mak.uname: resolve FreeBSD iconv-related compilation warning

Han-Wen Nienhuys (2):
      config: document git config getter return value
      sideband: highlight keywords in remote sideband output

Henning Schild (9):
      builtin/receive-pack: use check_signature from gpg-interface
      gpg-interface: make parse_gpg_output static and remove from interface header
      gpg-interface: add new config to select how to sign a commit
      t/t7510: check the validation of the new config gpg.format
      gpg-interface: introduce an abstraction for multiple gpg formats
      gpg-interface: do not hardcode the key string len anymore
      gpg-interface: introduce new config to select per gpg format program
      gpg-interface: introduce new signature format "x509" using gpgsm
      gpg-interface t: extend the existing GPG tests with GPGSM

Isabella Stephens (2):
      blame: prevent error if range ends past end of file
      log: prevent error if line range ends past end of file

Jameson Miller (8):
      read-cache: teach refresh_cache_entry to take istate
      read-cache: teach make_cache_entry to take object_id
      block alloc: add lifecycle APIs for cache_entry structs
      mem-pool: only search head block for available space
      mem-pool: add life cycle management functions
      mem-pool: fill out functionality
      block alloc: allocate cache entries from mem_pool
      block alloc: add validations around cache_entry lifecyle

Jean-Noël Avila (3):
      i18n: fix mistakes in translated strings
      l10n: fr.po v2.19.0 rnd 1
      l10n: fr.po v2.19.0 rnd 2

Jeff Hostetler (1):
      json_writer: new routines to create JSON data

Jeff King (50):
      make show-index a builtin
      show-index: update documentation for index v2
      fetch-pack: don't try to fetch peel values with --all
      ewah: drop ewah_deserialize function
      ewah: drop ewah_serialize_native function
      t3200: unset core.logallrefupdates when testing reflog creation
      t: switch "branch -l" to "branch --create-reflog"
      branch: deprecate "-l" option
      config: turn die_on_error into caller-facing enum
      config: add CONFIG_ERROR_SILENT handler
      config: add options parameter to git_config_from_mem
      fsck: silence stderr when parsing .gitmodules
      t6300: add a test for --ignore-case
      ref-filter: avoid backend filtering with --ignore-case
      t5500: prettify non-commit tag tests
      sequencer: handle empty-set cases consistently
      sequencer: don't say BUG on bogus input
      has_uncommitted_changes(): fall back to empty tree
      fsck: split ".gitmodules too large" error from parse failure
      fsck: downgrade gitmodulesParse default to "info"
      blame: prefer xsnprintf to strcpy for colors
      check_replace_refs: fix outdated comment
      check_replace_refs: rename to read_replace_refs
      add core.usereplacerefs config option
      reencode_string: use st_add/st_mult helpers
      reencode_string: use size_t for string lengths
      strbuf: use size_t for length in intermediate variables
      strbuf_readlink: use ssize_t
      pass st.st_size as hint for strbuf_readlink()
      strbuf_humanise: use unsigned variables
      automatically ban strcpy()
      banned.h: mark strcat() as banned
      banned.h: mark sprintf() as banned
      banned.h: mark strncpy() as banned
      score_trees(): fix iteration over trees with missing entries
      add a script to diff rendered documentation
      t5552: suppress upload-pack trace output
      for_each_*_object: store flag definitions in a single location
      for_each_*_object: take flag arguments as enum
      for_each_*_object: give more comprehensive docstrings
      for_each_packed_object: support iterating in pack-order
      t1006: test cat-file --batch-all-objects with duplicates
      cat-file: rename batch_{loose,packed}_object callbacks
      cat-file: support "unordered" output for --batch-all-objects
      cat-file: use oidset check-and-insert
      cat-file: split batch "buf" into two variables
      cat-file: use a single strbuf for all output
      for_each_*_object: move declarations to object-store.h
      test-tool.h: include git-compat-util.h
      hashcmp: assert constant hash size

Jiang Xin (4):
      l10n: zh_CN: review for git 2.18.0
      l10n: git.pot: v2.19.0 round 1 (382 new, 30 removed)
      l10n: git.pot: v2.19.0 round 2 (3 new, 5 removed)
      l10n: zh_CN: for git v2.19.0 l10n round 1 to 2

Johannes Schindelin (41):
      Makefile: fix the "built from commit" code
      merge: allow reading the merge commit message from a file
      rebase --rebase-merges: add support for octopus merges
      rebase --rebase-merges: adjust man page for octopus support
      vcbuild/README: update to accommodate for missing common-cmds.h
      t7406: avoid failures solely due to timing issues
      contrib: add a script to initialize VS Code configuration
      vscode: hard-code a couple defines
      cache.h: extract enum declaration from inside a struct declaration
      mingw: define WIN32 explicitly
      vscode: only overwrite C/C++ settings
      vscode: wrap commit messages at column 72 by default
      vscode: use 8-space tabs, no trailing ws, etc for Git's source code
      vscode: add a dictionary for cSpell
      vscode: let cSpell work on commit messages, too
      pull --rebase=<type>: allow single-letter abbreviations for the type
      t3430: demonstrate what -r, --autosquash & --exec should do
      git-compat-util.h: fix typo
      remote-curl: remove spurious period
      rebase --exec: make it work with --rebase-merges
      linear-assignment: a function to solve least-cost assignment problems
      Introduce `range-diff` to compare iterations of a topic branch
      range-diff: first rudimentary implementation
      range-diff: improve the order of the shown commits
      range-diff: also show the diff between patches
      range-diff: right-trim commit messages
      range-diff: indent the diffs just like tbdiff
      range-diff: suppress the diff headers
      range-diff: adjust the output of the commit pairs
      range-diff: do not show "function names" in hunk headers
      range-diff: use color for the commit pairs
      color: add the meta color GIT_COLOR_REVERSE
      diff: add an internal option to dual-color diffs of diffs
      range-diff: offer to dual-color the diffs
      range-diff --dual-color: skip white-space warnings
      range-diff: populate the man page
      completion: support `git range-diff`
      range-diff: left-pad patch numbers
      range-diff: make --dual-color the default mode
      range-diff: use dim/bold cues to improve dual color mode
      chainlint: fix for core.autocrlf=true

Johannes Sixt (1):
      mingw: enable atomic O_APPEND

Jonathan Nieder (12):
      object: add repository argument to grow_object_hash
      object: move grafts to object parser
      commit: add repository argument to commit_graft_pos
      commit: add repository argument to register_commit_graft
      commit: add repository argument to read_graft_file
      commit: add repository argument to prepare_commit_graft
      commit: add repository argument to lookup_commit_graft
      subtree test: add missing && to &&-chain
      subtree test: simplify preparation of expected results
      doc hash-function-transition: pick SHA-256 as NewHash
      partial-clone: render design doc using asciidoc
      Revert "Merge branch 'sb/submodule-core-worktree'"

Jonathan Tan (28):
      list-objects: check if filter is NULL before using
      fetch-pack: split up everything_local()
      fetch-pack: clear marks before re-marking
      fetch-pack: directly end negotiation if ACK ready
      fetch-pack: use ref adv. to prune "have" sent
      fetch-pack: make negotiation-related vars local
      fetch-pack: move common check and marking together
      fetch-pack: introduce negotiator API
      pack-bitmap: remove bitmap_git global variable
      pack-bitmap: add free function
      fetch-pack: write shallow, then check connectivity
      fetch-pack: support negotiation tip whitelist
      upload-pack: send refs' objects despite "filter"
      clone: check connectivity even if clone is partial
      revision: tolerate promised targets of tags
      tag: don't warn if target is missing but promised
      negotiator/skipping: skip commits during fetch
      commit-graph: refactor preparing commit graph
      object-store: add missing include
      commit-graph: add missing forward declaration
      commit-graph: add free_commit_graph
      commit-graph: store graph in struct object_store
      commit-graph: add repo arg to graph readers
      t5702: test fetch with multiple refspecs at a time
      fetch: send "refs/tags/" prefix upon CLI refspecs
      fetch-pack: unify ref in and out param
      repack: refactor setup of pack-objects cmd
      repack: repack promisor objects if -a or -A is set

Josh Steadmon (1):
      protocol-v2 doc: put HTTP headers after request

Jules Maselbas (1):
      send-email: fix tls AUTH when sending batch

Junio C Hamano (23):
      tests: clean after SANITY tests
      ewah: delete unused 'rlwit_discharge_empty()'
      Prepare to start 2.19 cycle
      First batch for 2.19 cycle
      Second batch for 2.19 cycle
      fixup! connect.h: avoid forward declaration of an enum
      fixup! refs/refs-internal.h: avoid forward declaration of an enum
      t3404: fix use of "VAR=VAL cmd" with a shell function
      Third batch for 2.19 cycle
      Fourth batch for 2.19 cycle
      remote: make refspec follow the same disambiguation rule as local refs
      Fifth batch for 2.19 cycle
      update-index: there no longer is `apply --index-info`
      gpg-interface: propagate exit status from gpg back to the callers
      Sixth batch for 2.19 cycle
      config.txt: clarify core.checkStat
      Seventh batch for 2.19 cycle
      sideband: do not read beyond the end of input
      Git 2.19-rc0
      Getting ready for -rc1
      Git 2.19-rc1
      Git 2.19-rc2
      Git 2.19

Kana Natsuno (2):
      t4018: add missing test cases for PHP
      userdiff: support new keywords in PHP hunk header

Kim Gybels (1):
      gc --auto: release pack files before auto packing

Kirill Smelkov (1):
      fetch-pack: test explicitly that --all can fetch tag references pointing to non-commits

Kyle Meyer (1):
      range-diff: update stale summary of --no-dual-color

Luis Marsano (2):
      git-credential-netrc: use in-tree Git.pm for tests
      git-credential-netrc: fix exit status when tests fail

Luke Diamand (6):
      git-p4: python3: replace <> with !=
      git-p4: python3: replace dict.has_key(k) with "k in dict"
      git-p4: python3: remove backticks
      git-p4: python3: basestring workaround
      git-p4: python3: use print() function
      git-p4: python3: fix octal constants

Marc Strapetz (1):
      Documentation: declare "core.ignoreCase" as internal variable

Martin Ågren (1):
      refspec: initalize `refspec_item` in `valid_fetch_refspec()`

Masaya Suzuki (2):
      builtin/send-pack: populate the default configs
      doc: fix want-capability separator

Max Kirillov (5):
      http-backend: cleanup writing to child process
      http-backend: respect CONTENT_LENGTH as specified by rfc3875
      unpack-trees: do not fail reset because of unmerged skipped entry
      http-backend: respect CONTENT_LENGTH for receive-pack
      http-backend: allow empty CONTENT_LENGTH

Michael Barabanov (1):
      filter-branch: skip commits present on --state-branch

Mike Hommey (1):
      fast-import: do not call diff_delta() with empty buffer

Nguyễn Thái Ngọc Duy (100):
      commit-slab.h: code split
      commit-slab: support shared commit-slab
      blame: use commit-slab for blame suspects instead of commit->util
      describe: use commit-slab for commit names instead of commit->util
      shallow.c: use commit-slab for commit depth instead of commit->util
      sequencer.c: use commit-slab to mark seen commits
      sequencer.c: use commit-slab to associate todo items to commits
      revision.c: use commit-slab for show_source
      bisect.c: use commit-slab for commit weight instead of commit->util
      name-rev: use commit-slab for rev-name instead of commit->util
      show-branch: use commit-slab for commit-name instead of commit->util
      show-branch: note about its object flags usage
      log: use commit-slab in prepare_bases() instead of commit->util
      merge: use commit-slab in merge remote desc instead of commit->util
      commit.h: delete 'util' field in struct commit
      diff: ignore --ita-[in]visible-in-index when diffing worktree-to-tree
      diff: turn --ita-invisible-in-index on by default
      t2203: add a test about "diff HEAD" case
      apply: add --intent-to-add
      parse-options: option to let --git-completion-helper show negative form
      completion: suppress some -no- options
      Add and use generic name->id mapping code for color slot parsing
      grep: keep all colors in an array
      fsck: factor out msg_id_info[] lazy initialization code
      help: add --config to list all available config
      fsck: produce camelCase config key names
      advice: keep config name in camelCase in advice_config[]
      am: move advice.amWorkDir parsing back to advice.c
      completion: drop the hard coded list of config vars
      completion: keep other config var completion in camelCase
      completion: support case-insensitive config vars
      log-tree: allow to customize 'grafted' color
      completion: complete general config vars in two steps
      upload-pack: reject shallow requests that would return nothing
      completion: collapse extra --no-.. options
      pack-objects: fix performance issues on packing large deltas
      Update messages in preparation for i18n
      archive-tar.c: mark more strings for translation
      archive-zip.c: mark more strings for translation
      builtin/config.c: mark more strings for translation
      builtin/grep.c: mark strings for translation
      builtin/pack-objects.c: mark more strings for translation
      builtin/replace.c: mark more strings for translation
      commit-graph.c: mark more strings for translation
      config.c: mark more strings for translation
      connect.c: mark more strings for translation
      convert.c: mark more strings for translation
      dir.c: mark more strings for translation
      environment.c: mark more strings for translation
      exec-cmd.c: mark more strings for translation
      object.c: mark more strings for translation
      pkt-line.c: mark more strings for translation
      refs.c: mark more strings for translation
      refspec.c: mark more strings for translation
      replace-object.c: mark more strings for translation
      sequencer.c: mark more strings for translation
      sha1-file.c: mark more strings for translation
      transport.c: mark more strings for translation
      transport-helper.c: mark more strings for translation
      pack-objects: document about thread synchronization
      apply.h: drop extern on func declaration
      attr.h: drop extern from function declaration
      blame.h: drop extern on func declaration
      cache-tree.h: drop extern from function declaration
      convert.h: drop 'extern' from function declaration
      diffcore.h: drop extern from function declaration
      diff.h: remove extern from function declaration
      line-range.h: drop extern from function declaration
      rerere.h: drop extern from function declaration
      repository.h: drop extern from function declaration
      revision.h: drop extern from function declaration
      submodule.h: drop extern from function declaration
      config.txt: reorder blame stuff to keep config keys sorted
      Makefile: add missing dependency for command-list.h
      diff.c: move read_index() code back to the caller
      cache-tree: wrap the_index based wrappers with #ifdef
      attr: remove an implicit dependency on the_index
      convert.c: remove an implicit dependency on the_index
      dir.c: remove an implicit dependency on the_index in pathspec code
      preload-index.c: use the right index instead of the_index
      ls-files: correct index argument to get_convert_attr_ascii()
      unpack-trees: remove 'extern' on function declaration
      unpack-trees: add a note about path invalidation
      unpack-trees: don't shadow global var the_index
      unpack-trees: convert clear_ce_flags* to avoid the_index
      unpack-trees: avoid the_index in verify_absent()
      pathspec.c: use the right index instead of the_index
      submodule.c: use the right index instead of the_index
      entry.c: use the right index instead of the_index
      attr: remove index from git_attr_set_direction()
      grep: use the right index instead of the_index
      archive.c: avoid access to the_index
      archive-*.c: use the right repository
      resolve-undo.c: use the right index instead of the_index
      apply.c: pass struct apply_state to more functions
      apply.c: make init_apply_state() take a struct repository
      apply.c: remove implicit dependency on the_index
      blame.c: remove implicit dependency on the_index
      cherry-pick: fix --quit not deleting CHERRY_PICK_HEAD
      generate-cmdlist.sh: collect config from all config.txt files

Nicholas Guriev (1):
      mergetool: don't suggest to continue after last file

Olga Telezhnaya (5):
      ref-filter: add info_source to valid_atom
      ref-filter: fill empty fields with empty values
      ref-filter: initialize eaten variable
      ref-filter: merge get_obj and get_object
      ref-filter: use oid_object_info() to get object

Peter Krefting (2):
      l10n: sv.po: Update Swedish translation(3608t0f0u)
      l10n: sv.po: Update Swedish translation (3958t0f0u)

Phillip Wood (7):
      add -p: fix counting empty context lines in edited patches
      sequencer: do not squash 'reword' commits when we hit conflicts
      sequencer: handle errors from read_author_ident()
      sequencer: fix quoting in write_author_script
      rebase -i: fix numbering in squash message
      t3430: add conflicting commit
      rebase -i: fix SIGSEGV when 'merge <branch>' fails

Prathamesh Chavan (4):
      submodule foreach: correct '$path' in nested submodules from a subdirectory
      submodule foreach: document '$sm_path' instead of '$path'
      submodule foreach: document variable '$displaypath'
      submodule: port submodule subcommand 'foreach' from shell to C

Ralf Thielow (1):
      l10n: de.po: translate 108 new messages

Ramsay Jones (3):
      fsck: check skiplist for object in fsck_blob()
      t6036: fix broken && chain in sub-shell
      t5562: avoid non-portable "export FOO=bar" construct

Raphaël Hertzog (1):
      l10n: fr: fix a message seen in git bisect

René Scharfe (10):
      remote: clear string_list after use in mv()
      add, update-index: fix --chmod argument help
      difftool: remove angular brackets from argument help
      pack-objects: specify --index-version argument help explicitly
      send-pack: specify --force-with-lease argument help explicitly
      shortlog: correct option help for -w
      parse-options: automatically infer PARSE_OPT_LITERAL_ARGHELP
      checkout-index: improve argument help for --stage
      remote: improve argument help for add --mirror
      parseopt: group literal string alternatives in argument help

SZEDER Gábor (30):
      update-ref --stdin: use skip_prefix()
      t7510-signed-commit: use 'test_must_fail'
      tests: make forging GPG signed commits and tags more robust
      t5541: clean up truncating access log
      t/lib-httpd: add the strip_access_log() helper function
      t/lib-httpd: avoid occasional failures when checking access.log
      t5608: fix broken &&-chain
      t9300: wait for background fast-import process to die after killing it
      travis-ci: run Coccinelle static analysis with two parallel jobs
      travis-ci: fail if Coccinelle static analysis found something to transform
      coccinelle: mark the 'coccicheck' make target as .PHONY
      coccinelle: use $(addsuffix) in 'coccicheck' make target
      coccinelle: exclude sha1dc source files from static analysis
      coccinelle: put sane filenames into output patches
      coccinelle: extract dedicated make target to clean Coccinelle's results
      travis-ci: include the trash directories of failed tests in the trace log
      t5318: use 'test_cmp_bin' to compare commit-graph files
      t5318: avoid unnecessary command substitutions
      t5310-pack-bitmaps: fix bogus 'pack-objects to file can use bitmap' test
      tests: use 'test_must_be_empty' instead of '! test -s'
      tests: use 'test_must_be_empty' instead of 'test ! -s'
      tests: use 'test_must_be_empty' instead of 'test_cmp /dev/null <out>'
      tests: use 'test_must_be_empty' instead of 'test_cmp <empty> <out>'
      t7501-commit: drop silly command substitution
      t0020-crlf: check the right file
      t4051-diff-function-context: read the right file
      t6018-rev-list-glob: fix 'empty stdin' test
      t3903-stash: don't try to grep non-existing file
      t3420-rebase-autostash: don't try to grep non-existing files
      t/lib-rebase.sh: support explicit 'pick' commands in 'fake_editor.sh'

Samuel Maftoul (1):
      branch: support configuring --sort via .gitconfig

Sebastian Kisela (2):
      git-instaweb: support Fedora/Red Hat apache module path
      git-instaweb: fix apache2 config with apache >= 2.4

Stefan Beller (87):
      repository: introduce parsed objects field
      object: add repository argument to create_object
      alloc: add repository argument to alloc_blob_node
      alloc: add repository argument to alloc_tree_node
      alloc: add repository argument to alloc_commit_node
      alloc: add repository argument to alloc_tag_node
      alloc: add repository argument to alloc_object_node
      alloc: add repository argument to alloc_report
      alloc: add repository argument to alloc_commit_index
      object: allow grow_object_hash to handle arbitrary repositories
      object: allow create_object to handle arbitrary repositories
      alloc: allow arbitrary repositories for alloc functions
      object-store: move object access functions to object-store.h
      shallow: add repository argument to set_alternate_shallow_file
      shallow: add repository argument to register_shallow
      shallow: add repository argument to check_shallow_file_for_update
      shallow: add repository argument to is_repository_shallow
      cache: convert get_graft_file to handle arbitrary repositories
      path.c: migrate global git_path_* to take a repository argument
      shallow: migrate shallow information into the object parser
      commit: allow prepare_commit_graft to handle arbitrary repositories
      commit: allow lookup_commit_graft to handle arbitrary repositories
      refs/packed-backend.c: close fd of empty file
      submodule--helper: plug mem leak in print_default_remote
      sequencer.c: plug leaks in do_pick_commit
      submodule: fix NULL correctness in renamed broken submodules
      t5526: test recursive submodules when fetching moved submodules
      submodule: unset core.worktree if no working tree is present
      submodule: ensure core.worktree is set after update
      submodule deinit: unset core.worktree
      submodule.c: report the submodule that an error occurs in
      sequencer.c: plug mem leak in git_sequencer_config
      .mailmap: merge different spellings of names
      object: add repository argument to parse_object
      object: add repository argument to lookup_object
      object: add repository argument to parse_object_buffer
      object: add repository argument to object_as_type
      blob: add repository argument to lookup_blob
      tree: add repository argument to lookup_tree
      commit: add repository argument to lookup_commit_reference_gently
      commit: add repository argument to lookup_commit_reference
      commit: add repository argument to lookup_commit
      commit: add repository argument to parse_commit_buffer
      commit: add repository argument to set_commit_buffer
      commit: add repository argument to get_cached_commit_buffer
      tag: add repository argument to lookup_tag
      tag: add repository argument to parse_tag_buffer
      tag: add repository argument to deref_tag
      object: allow object_as_type to handle arbitrary repositories
      object: allow lookup_object to handle arbitrary repositories
      blob: allow lookup_blob to handle arbitrary repositories
      tree: allow lookup_tree to handle arbitrary repositories
      commit: allow lookup_commit to handle arbitrary repositories
      tag: allow lookup_tag to handle arbitrary repositories
      tag: allow parse_tag_buffer to handle arbitrary repositories
      commit.c: allow parse_commit_buffer to handle arbitrary repositories
      commit-slabs: remove realloc counter outside of slab struct
      commit.c: migrate the commit buffer to the parsed object store
      commit.c: allow set_commit_buffer to handle arbitrary repositories
      commit.c: allow get_cached_commit_buffer to handle arbitrary repositories
      object.c: allow parse_object_buffer to handle arbitrary repositories
      object.c: allow parse_object to handle arbitrary repositories
      tag.c: allow deref_tag to handle arbitrary repositories
      commit.c: allow lookup_commit_reference_gently to handle arbitrary repositories
      commit.c: allow lookup_commit_reference to handle arbitrary repositories
      xdiff/xdiff.h: remove unused flags
      xdiff/xdiffi.c: remove unneeded function declarations
      t4015: avoid git as a pipe input
      diff.c: do not pass diff options as keydata to hashmap
      diff.c: adjust hash function signature to match hashmap expectation
      diff.c: add a blocks mode for moved code detection
      diff.c: decouple white space treatment from move detection algorithm
      diff.c: factor advance_or_nullify out of mark_color_as_moved
      diff.c: add white space mode to move detection that allows indent changes
      diff.c: offer config option to control ws handling in move detection
      xdiff/xhistogram: pass arguments directly to fall_back_to_classic_diff
      xdiff/xhistogram: factor out memory cleanup into free_index()
      xdiff/xhistogram: move index allocation into find_lcs
      Documentation/git-interpret-trailers: explain possible values
      xdiff/histogram: remove tail recursion
      t1300: document current behavior of setting options
      xdiff: reduce indent heuristic overhead
      config: fix case sensitive subsection names on writing
      git-config: document accidental multi-line setting in deprecated syntax
      git-submodule.sh: accept verbose flag in cmd_update to be non-quiet
      t7410: update to new style
      builtin/submodule--helper: remove stray new line

Taylor Blau (9):
      Documentation/config.txt: camel-case lineNumber for consistency
      grep.c: expose {,inverted} match column in match_line()
      grep.[ch]: extend grep_opt to allow showing matched column
      grep.c: display column number of first match
      builtin/grep.c: add '--column' option to 'git-grep(1)'
      grep.c: add configuration variables to show matched option
      contrib/git-jump/git-jump: jump to exact location
      grep.c: extract show_line_header()
      grep.c: teach 'git grep --only-matching'

Thomas Rast (1):
      range-diff: add tests

Tobias Klauser (1):
      git-rebase--preserve-merges: fix formatting of todo help message

Todd Zullinger (4):
      git-credential-netrc: minor whitespace cleanup in test script
      git-credential-netrc: make "all" default target of Makefile
      gitignore.txt: clarify default core.excludesfile path
      dir.c: fix typos in core.excludesfile comment

Trần Ngọc Quân (1):
      l10n: vi.po(3958t): updated Vietnamese translation v2.19.0 round 2

Ville Skyttä (1):
      Documentation: spelling and grammar fixes

Vladimir Parfinenko (1):
      rebase: fix documentation formatting

William Chargin (2):
      sha1-name.c: for ":/", find detached HEAD commits
      t: factor out FUNNYNAMES as shared lazy prereq

Xiaolong Ye (1):
      format-patch: clear UNINTERESTING flag before prepare_bases

brian m. carlson (21):
      send-email: add an auto option for transfer encoding
      send-email: accept long lines with suitable transfer encoding
      send-email: automatically determine transfer-encoding
      docs: correct RFC specifying email line length
      sequencer: pass absolute GIT_WORK_TREE to exec commands
      cache: update object ID functions for the_hash_algo
      tree-walk: replace hard-coded constants with the_hash_algo
      hex: switch to using the_hash_algo
      commit: express tree entry constants in terms of the_hash_algo
      strbuf: allocate space with GIT_MAX_HEXSZ
      sha1-name: use the_hash_algo when parsing object names
      refs/files-backend: use the_hash_algo for writing refs
      builtin/update-index: convert to using the_hash_algo
      builtin/update-index: simplify parsing of cacheinfo
      builtin/fmt-merge-msg: make hash independent
      builtin/merge: switch to use the_hash_algo
      builtin/merge-recursive: make hash independent
      diff: switch GIT_SHA1_HEXSZ to use the_hash_algo
      log-tree: switch GIT_SHA1_HEXSZ to the_hash_algo->hexsz
      sha1-file: convert constants to uses of the_hash_algo
      pretty: switch hard-coded constants to the_hash_algo

Ævar Arnfjörð Bjarmason (45):
      checkout tests: index should be clean after dwim checkout
      checkout.h: wrap the arguments to unique_tracking_name()
      checkout.c: introduce an *_INIT macro
      checkout.c: change "unique" member to "num_matches"
      checkout: pass the "num_matches" up to callers
      builtin/checkout.c: use "ret" variable for return
      checkout: add advice for ambiguous "checkout <branch>"
      checkout & worktree: introduce checkout.defaultRemote
      refspec: s/refspec_item_init/&_or_die/g
      refspec: add back a refspec_item_init() function
      doc hash-function-transition: note the lack of a changelog
      receive.fsck.<msg-id> tests: remove dead code
      config doc: don't describe *.fetchObjects twice
      config doc: unify the description of fsck.* and receive.fsck.*
      config doc: elaborate on what transfer.fsckObjects does
      config doc: elaborate on fetch.fsckObjects security
      transfer.fsckObjects tests: untangle confusing setup
      fetch: implement fetch.fsck.*
      fsck: test & document {fetch,receive}.fsck.* config fallback
      fsck: add stress tests for fsck.skipList
      fsck: test and document unknown fsck.<msg-id> values
      tests: make use of the test_must_be_empty function
      tests: make use of the test_must_be_empty function
      fetch tests: change "Tag" test tag to "testTag"
      push tests: remove redundant 'git push' invocation
      push tests: fix logic error in "push" test assertion
      push tests: add more testing for forced tag pushing
      push tests: assert re-pushing annotated tags
      negotiator: unknown fetch.negotiationAlgorithm should error out
      fetch doc: cross-link two new negotiation options
      sha1dc: update from upstream
      push: use PARSE_OPT_LITERAL_ARGHELP instead of unbalanced brackets
      fetch tests: correct a comment "remove it" -> "remove them"
      pull doc: fix a long-standing grammar error
      submodule: add more exhaustive up-path testing
      refactor various if (x) FREE_AND_NULL(x) to just FREE_AND_NULL(x)
      t2024: mark test using "checkout -p" with PERL prerequisite
      tests: fix and add lint for non-portable head -c N
      tests: fix and add lint for non-portable seq
      tests: fix comment syntax in chainlint.sed for AIX sed
      tests: use shorter labels in chainlint.sed for AIX sed
      tests: fix version-specific portability issue in Perl JSON
      tests: fix and add lint for non-portable grep --file
      tests: fix non-portable "${var:-"str"}" construct
      tests: fix non-portable iconv invocation

Łukasz Stelmach (1):
      completion: complete remote names too


^ permalink raw reply	[relevance 3%]

* Re: What's cooking in git.git (Sep 2018, #04; Thu, 20)
  @ 2018-09-21 17:17  3%   ` Junio C Hamano
  0 siblings, 0 replies; 200+ results
From: Junio C Hamano @ 2018-09-21 17:17 UTC (permalink / raw)
  To: Johannes Sixt; +Cc: git

Johannes Sixt <j6t@kdbg.org> writes:

> Am 21.09.18 um 07:22 schrieb Junio C Hamano:
>> The tip of 'next' hasn't been rewound yet.  The three GSoC "rewrite
>> in C" topics are still unclassified in this "What's cooking" report,
>> but I am hoping that we can have them in 'next' sooner rather than
>> later.  I got an impression that Dscho wanted a chance for the final
>> clean-up on some of them, so I am not doing anything hasty yet at
>> this moment, though.
>
> While playing around with those topics in my own build on Windows, I
> noticed a small glitch in your merge commits.
>
> When I compile 59085279e6, which is today's jch~11, I see
>
>     CC builtin/rebase.o
> builtin/rebase.c: In function 'can_fast_forward':
> builtin/rebase.c:443:2: warning: implicit declaration of function 'get_merge_bases' [-Wimplicit-function-declaration]
>   merge_bases = get_merge_bases(onto, head);
>   ^
> builtin/rebase.c:443:14: warning: assignment makes pointer from integer without a cast [enabled by default]
>   merge_bases = get_merge_bases(onto, head);
>               ^
>
> I notice that you fixed it in the next merge, jch~10 aka d311e29abe,
> by adding
>
> #include "commit-reach.h"
>
> in builtin/rebase.c; this line is obviously required one merge
> commit earlier, jch~11.

Thanks.  Near the problematic merges are

    41e89b1c02 Merge branch 'pk/rebase-in-c-6-final' into jch
    a9794eb0fe Merge branch 'js/rebase-in-c-5.5-work-with-rebase-i-in-c' into jch
    d348159563 Merge branch 'pk/rebase-in-c-5-test' into jch
    d311e29abe Merge branch 'pk/rebase-in-c-4-opts' into jch
    59085279e6 Merge branch 'pk/rebase-in-c-3-acts' into jch
    88091f8941 Merge branch 'pk/rebase-in-c-2-basic' into jch
    38a693a042 Merge branch 'ps/stash-in-c' into jch
    488f36e338 Merge branch 'ag/rebase-i-in-c' into jch

Actually 88091f8941 is already broken.  The merge-fix must go there.

Thanks for letting me know (even though it is very unlikely that
2-basic would graduate without any of these other topics---in a
sense there is not much point for these patches to be spread across
this many topics).

commit a581ba92f4f4e112a7d7e0c84c0ced1af271b7dc
Author: Junio C Hamano <gitster@pobox.com>
Date:   Fri Sep 21 10:14:43 2018 -0700

    merge-fix/pk/rebase-in-c-2-basic

diff --git a/builtin/rebase.c b/builtin/rebase.c
index e817956d96..71367c8530 100644
--- a/builtin/rebase.c
+++ b/builtin/rebase.c
@@ -21,6 +21,7 @@
 #include "diff.h"
 #include "wt-status.h"
 #include "revision.h"
+#include "commit-reach.h"
 
 static char const * const builtin_rebase_usage[] = {
 	N_("git rebase [-i] [options] [--exec <cmd>] [--onto <newbase>] "

^ permalink raw reply related	[relevance 3%]

* Re: [PATCH v2 1/2] commit-graph write: add progress output
  @ 2018-09-21 21:57  2%       ` Junio C Hamano
  0 siblings, 0 replies; 200+ results
From: Junio C Hamano @ 2018-09-21 21:57 UTC (permalink / raw)
  To: Derrick Stolee
  Cc: Ævar Arnfjörð Bjarmason, git, Jeff King,
	Eric Sunshine, Nguyễn Thái Ngọc Duy

Junio C Hamano <gitster@pobox.com> writes:

>> The above prototype change seems to have created a semantic conflict
>> with ds/commit-graph-tests (859fdc "commit-graph: define
>> GIT_TEST_COMMIT_GRAPH") because when GIT_TEST_COMMIT_GRAPH is set, we
>> call write_commit_graph_reachable() but the final parameter was
>> resolved to be "1" instead of "0".
>
> Hmph.  That's unfortunate.
>
> Perhaps one of the topics should have yielded and waited until the
> other one passes through.

Nah, I see where things went wrong.  I'll queue a single-liner
"mismerge fix" to 'next', and then correct the seed for the evil
merge kept in merge-fix/ab/commit-graph-progress, and rebuild 'pu'.
Things will straighten out by themselves after that happens.

Thanks for noticing.

^ permalink raw reply	[relevance 2%]

* Re: What's cooking in git.git (Nov 2018, #03; Wed, 7)
  @ 2018-11-07 22:09  2%     ` Junio C Hamano
  2018-11-08  6:09  1%       ` Junio C Hamano
  0 siblings, 1 reply; 200+ results
From: Junio C Hamano @ 2018-11-07 22:09 UTC (permalink / raw)
  To: Duy Nguyen; +Cc: SZEDER Gábor, Git Mailing List

Duy Nguyen <pclouds@gmail.com> writes:

> On Wed, Nov 7, 2018 at 2:09 PM SZEDER Gábor <szeder.dev@gmail.com> wrote:
>>
>> On Wed, Nov 07, 2018 at 06:41:45PM +0900, Junio C Hamano wrote:
>> > * nd/i18n (2018-11-06) 16 commits
>> >  - fsck: mark strings for translation
>> >  - fsck: reduce word legos to help i18n
>> > ...
>> >  More _("i18n") markings.
>>
>> When this patch is merged into 'pu' all four tests added to
>> 't1450-fsck.sh' in b29759d89a (fsck: check HEAD and reflog from other
>> worktrees, 2018-10-21) as part of 'nd/per-worktree-ref-iteration'
>> below fail when run with GETTEXT_POISON=y.  The test suite passes in
>> both of these topics on their own, even with GETTEXT_POISON, it's
>> their merge that is somehow problematic.
>
> Not surprising. The i18n series makes fsck output localized strings
> and without updating grep to test_i18ngrep, new tests will fail. If
> 'pu' was passing before, I'm ok with just ejecting this series for
> now. Then I wait for the other to land, rebase, fixup and resubmit.

Let me first see if I can come up with a merge-fix that can be
carried around during the time this topic cooks, before talking
about dropping and reattempting the series.

For a change like this, a time-window in which the codebase is
quiescent enough may never come, and because the changes go all over
the place, mostly but not entirely repetitive, it costs a lot, not
just to write but also to review them.

^ permalink raw reply	[relevance 2%]

* Re: What's cooking in git.git (Nov 2018, #03; Wed, 7)
  2018-11-07 22:09  2%     ` Junio C Hamano
@ 2018-11-08  6:09  1%       ` Junio C Hamano
  0 siblings, 0 replies; 200+ results
From: Junio C Hamano @ 2018-11-08  6:09 UTC (permalink / raw)
  To: Duy Nguyen; +Cc: SZEDER Gábor, Git Mailing List

Junio C Hamano <gitster@pobox.com> writes:

>> Not surprising. The i18n series makes fsck output localized strings
>> and without updating grep to test_i18ngrep, new tests will fail. If
>> 'pu' was passing before, I'm ok with just ejecting this series for
>> now. Then I wait for the other to land, rebase, fixup and resubmit.
>
> Let me first see if I can come up with a merge-fix that can be
> carried around during the time this topic cooks, before talking
> about dropping and reattempting the series.
>
> For a change like this, a time-window in which the codebase is
> quiescent enough may never come, and because the changes go all over
> the place, mostly but not entirely repetitive, it costs a lot, not
> just to write but also to review them.

I have configured the machinery used to rebuild integration branches
so that the following is squashed in when the nd/i18n topic is
merged.

The part that touches t1450 needs to be split out and squashed when
nd/per-worktree-ref-iteration gets merged, *if* the nd/i18n topic
needs to jump over the other topic, but I'll worry about it when it
happens---I think per-worktree ref iteration series that is in next
should be ready enough that we do not mind having nd/i18n waiting
for it.

Anyway, here is what is in refs/merge-fix/nd/i18n, which gets
cherry-picked and squashed into the merge when nd/i18n is merged.

 t/t1450-fsck.sh                    | 8 ++++----
 t/t5616-partial-clone.sh           | 2 +-
 t/t5703-upload-pack-ref-in-want.sh | 4 ++--
 3 files changed, 7 insertions(+), 7 deletions(-)

diff --git a/t/t1450-fsck.sh b/t/t1450-fsck.sh
index 8a5f4c7189..2e5e979336 100755
--- a/t/t1450-fsck.sh
+++ b/t/t1450-fsck.sh
@@ -109,7 +109,7 @@ test_expect_success 'HEAD link pointing at a funny object (from different wt)' '
 	echo $ZERO_OID >.git/HEAD &&
 	# avoid corrupt/broken HEAD from interfering with repo discovery
 	test_must_fail git -C wt fsck 2>out &&
-	grep "main-worktree/HEAD: detached HEAD points" out
+	test_i18ngrep "main-worktree/HEAD: detached HEAD points" out
 '
 
 test_expect_success 'other worktree HEAD link pointing at a funny object' '
@@ -117,7 +117,7 @@ test_expect_success 'other worktree HEAD link pointing at a funny object' '
 	git worktree add other &&
 	echo $ZERO_OID >.git/worktrees/other/HEAD &&
 	test_must_fail git fsck 2>out &&
-	grep "worktrees/other/HEAD: detached HEAD points" out
+	test_i18ngrep "worktrees/other/HEAD: detached HEAD points" out
 '
 
 test_expect_success 'other worktree HEAD link pointing at missing object' '
@@ -125,7 +125,7 @@ test_expect_success 'other worktree HEAD link pointing at missing object' '
 	git worktree add other &&
 	echo "Contents missing from repo" | git hash-object --stdin >.git/worktrees/other/HEAD &&
 	test_must_fail git fsck 2>out &&
-	grep "worktrees/other/HEAD: invalid sha1 pointer" out
+	test_i18ngrep "worktrees/other/HEAD: invalid sha1 pointer" out
 '
 
 test_expect_success 'other worktree HEAD link pointing at a funny place' '
@@ -133,7 +133,7 @@ test_expect_success 'other worktree HEAD link pointing at a funny place' '
 	git worktree add other &&
 	echo "ref: refs/funny/place" >.git/worktrees/other/HEAD &&
 	test_must_fail git fsck 2>out &&
-	grep "worktrees/other/HEAD points to something strange" out
+	test_i18ngrep "worktrees/other/HEAD points to something strange" out
 '
 
 test_expect_success 'email without @ is okay' '
diff --git a/t/t5616-partial-clone.sh b/t/t5616-partial-clone.sh
index 336f02a41a..9643acb161 100755
--- a/t/t5616-partial-clone.sh
+++ b/t/t5616-partial-clone.sh
@@ -281,7 +281,7 @@ test_expect_success 'upon cloning, check that all refs point to objects' '
 	test_must_fail git -c protocol.version=2 clone \
 		--filter=blob:none $HTTPD_URL/one_time_sed/server repo 2>err &&
 
-	grep "did not send all necessary objects" err &&
+	test_i18ngrep "did not send all necessary objects" err &&
 
 	# Ensure that the one-time-sed script was used.
 	! test -e "$HTTPD_ROOT_PATH/one-time-sed"
diff --git a/t/t5703-upload-pack-ref-in-want.sh b/t/t5703-upload-pack-ref-in-want.sh
index 3f58f05cbb..7053899cb5 100755
--- a/t/t5703-upload-pack-ref-in-want.sh
+++ b/t/t5703-upload-pack-ref-in-want.sh
@@ -208,7 +208,7 @@ test_expect_success 'server is initially ahead - no ref in want' '
 	cp -r "$LOCAL_PRISTINE" local &&
 	inconsistency master 1234567890123456789012345678901234567890 &&
 	test_must_fail git -C local fetch 2>err &&
-	grep "ERR upload-pack: not our ref" err
+	test_i18ngrep "ERR upload-pack: not our ref" err
 '
 
 test_expect_success 'server is initially ahead - ref in want' '
@@ -254,7 +254,7 @@ test_expect_success 'server loses a ref - ref in want' '
 	echo "s/master/raster/" >"$HTTPD_ROOT_PATH/one-time-sed" &&
 	test_must_fail git -C local fetch 2>err &&
 
-	grep "ERR unknown ref refs/heads/raster" err
+	test_i18ngrep "ERR unknown ref refs/heads/raster" err
 '
 
 stop_httpd
-- 
2.19.1-856-g8858448bb4


^ permalink raw reply related	[relevance 1%]

* Git Test Coverage Report (Tuesday, Nov 13)
@ 2018-11-13 18:05  1% Derrick Stolee
  0 siblings, 0 replies; 200+ results
From: Derrick Stolee @ 2018-11-13 18:05 UTC (permalink / raw)
  To: Git List

Here is the test coverage report for today.

Thanks,
-Stolee

[1] https://dev.azure.com/git/git/_build/results?buildId=256&view=logs

---

pu: a849d4c48bb308cdf3f9d7dc84251d92b4d7ff03
jch: e3cb78b4131db2f98330ff110525db31c6abff16
next: 17fedb746fde9e40924a6ce11c0976a097eb126b
master: d166e6afe5f257217836ef24a73764eba390c58d
master@{1}: 8858448bb49332d353febc078ce4a3abcc962efe

Uncovered code in 'pu' not in 'jch'
--------------------------------------

builtin/blame.c
a849d4c48b builtin/blame.c    200) 
repo_unuse_commit_buffer(the_repository, commit, message);
74e8221b52 builtin/blame.c    928) blame_date_width = sizeof("Thu Oct 19 
16:00");
74e8221b52 builtin/blame.c    929) break;

builtin/describe.c
a849d4c48b builtin/describe.c 257) repo_parse_commit(the_repository, p);

builtin/pack-objects.c
a849d4c48b builtin/pack-objects.c 2832) if 
(!repo_has_object_file(the_repository, &obj->oid) && 
is_promisor_object(&obj->oid))

builtin/remote.c
b7f4e371e7 builtin/remote.c 1551) die(_("--save-to-push cannot be used 
with other options"));
b7f4e371e7 builtin/remote.c 1575) die(_("--save-to-push can only be used 
when only one url is defined"));

date.c
74e8221b52  113) die("Timestamp too large for this system: %"PRItime, time);
74e8221b52  216) if (tm->tm_mon == human_tm->tm_mon) {
74e8221b52  217) if (tm->tm_mday > human_tm->tm_mday) {
74e8221b52  219) } else if (tm->tm_mday == human_tm->tm_mday) {
74e8221b52  220) hide.date = hide.wday = 1;
74e8221b52  221) } else if (tm->tm_mday + 5 > human_tm->tm_mday) {
74e8221b52  223) hide.date = 1;
74e8221b52  231) gettimeofday(&now, NULL);
74e8221b52  232) show_date_relative(time, tz, &now, buf);
74e8221b52  233) return;
74e8221b52  246) hide.seconds = 1;
74e8221b52  247) hide.tz |= !hide.date;
74e8221b52  248) hide.wday = hide.time = !hide.year;
74e8221b52  262) strbuf_rtrim(buf);
74e8221b52  287) gettimeofday(&now, NULL);
74e8221b52  290) human_tz = local_time_tzoffset(now.tv_sec, &human_tm);
74e8221b52  886) static int auto_date_style(void)
74e8221b52  888) return (isatty(1) || pager_in_use()) ? DATE_HUMAN : 
DATE_NORMAL;
74e8221b52  909) return DATE_HUMAN;
74e8221b52  911) return auto_date_style();

diff.c
b613de67c4  316) ret |= COLOR_MOVED_WS_ERROR;
b613de67c4  348) unsigned cm = parse_color_moved_ws(value);
b613de67c4  349) if (cm & COLOR_MOVED_WS_ERROR)

fast-import.c
a849d4c48b 2935) buf = repo_read_object_file(the_repository, oid, &type, 
&size);
a849d4c48b 3041) buf = repo_read_object_file(the_repository, oid, &unused,

fsck.c
a849d4c48b  858) repo_unuse_commit_buffer(the_repository, commit, buffer);
a849d4c48b  878) repo_read_object_file(the_repository,
a849d4c48b  879)       &tag->object.oid, &type, &size);

http-push.c
a849d4c48b 1635) if (!repo_has_object_file(the_repository, &head_oid))
a849d4c48b 1642) if (!repo_has_object_file(the_repository, 
&remote_ref->old_oid))

negotiator/default.c
a849d4c48b  71) if (repo_parse_commit(the_repository, commit))

remote.c
879b6a9e6f 1140) return error(_("dst ref %s receives from more than one 
src."),

revision.c
a849d4c48b  726) if (repo_parse_commit(the_repository, p) < 0)

sequencer.c
a849d4c48b 1643) repo_unuse_commit_buffer(the_repository, head_commit,
a849d4c48b 3914) repo_unuse_commit_buffer(the_repository,

sha1-array.c
bba406749a 91) oidcpy(&oids[dst], &oids[src]);

submodule.c
b303ef65e7  524) the_repository->submodule_prefix :
e2419f7e30 1378) strbuf_release(&gitdir);
7454fe5cb6 1501) struct get_next_submodule_task *task = task_cb;
7454fe5cb6 1505) get_next_submodule_task_release(task);
7454fe5cb6 1532) return 0;
7454fe5cb6 1536) goto out;
7454fe5cb6 1551) return 0;

tree.c
a849d4c48b 108) if (repo_parse_commit(the_repository, commit))

wrapper.c
5efde212fc  70) die("Out of memory, malloc failed (tried to allocate %" 
PRIuMAX " bytes)",
5efde212fc  73) error("Out of memory, malloc failed (tried to allocate 
%" PRIuMAX " bytes)",

Commits introducing uncovered code:
Ævar Arnfjörð Bjarmason      879b6a9e6: i18n: remote.c: mark error(...) 
messages for translation
Denton Liu      b7f4e371e: remote: add --save-to-push option to git 
remote set-url
Junio C Hamano      a849d4c48: merge-fix/dl/remote-save-to-push
Linus Torvalds      74e8221b5: Add 'human' date format
Martin Koegler      5efde212f: zlib.c: use size_t for size
Stefan Beller      7454fe5cb: fetch: try fetching submodules if needed 
objects were not fetched
Stefan Beller      b303ef65e: submodule: use submodule repos for object 
lookup
Stefan Beller      b613de67c: diff: differentiate error handling in 
parse_color_moved_ws
Stefan Beller      bba406749: sha1-array: provide oid_array_filter
Stefan Beller      e2419f7e3: submodule: migrate get_next_submodule to 
use repository structs



Uncovered code in 'jch' not in 'next'
----------------------------------------

archive.c
c6e7965ddf 399) die(_("not a valid object name: %s"), name);
c6e7965ddf 412) die(_("not a tree object: %s"), oid_to_hex(&oid));
c6e7965ddf 422) die(_("current working directory is untracked"));

attr.c
ad8f8f4aed  369) fprintf_ln(stderr, _("%s not allowed: %s:%d"),

blame.c
fb998eae6c 1717) obj = deref_tag(revs->repo, obj, NULL, 0);
fb998eae6c 1724) head_commit = lookup_commit_reference_gently(revs->repo,

builtin/branch.c
0ecb1fc726 builtin/branch.c 456) die(_("could not resolve HEAD"));
0ecb1fc726 builtin/branch.c 462) die(_("HEAD (%s) points outside of 
refs/heads/"), refname);

builtin/bundle.c
74ae4b638d builtin/bundle.c 64) return !!unbundle(the_repository, 
&header, bundle_fd, 0) ||

builtin/fsck.c
674ba34038 builtin/fsck.c  87) ret = _("unknown");
674ba34038 builtin/fsck.c 167) objerror(parent, _("wrong object type in 
link"));
674ba34038 builtin/fsck.c 278) printf_ln(_("unreachable %s %s"), 
printable_type(obj),
674ba34038 builtin/fsck.c 306) error(_("could not create lost-found"));
674ba34038 builtin/fsck.c 313) die_errno(_("could not write '%s'"), 
filename);
674ba34038 builtin/fsck.c 317) die_errno(_("could not finish '%s'"),
674ba34038 builtin/fsck.c 334) fprintf_ln(stderr, _("Checking %s"), 
describe_object(obj));
674ba34038 builtin/fsck.c 352) fprintf_ln(stderr, _("Checking 
connectivity (%d objects)"), max);
674ba34038 builtin/fsck.c 371) fprintf_ln(stderr, _("Checking %s %s"),
674ba34038 builtin/fsck.c 384) printf_ln(_("root %s"),
674ba34038 builtin/fsck.c 420) return error(_("%s: object corrupt or 
missing"),
674ba34038 builtin/fsck.c 459) fprintf_ln(stderr, _("Checking reflog 
%s->%s"),
674ba34038 builtin/fsck.c 583) error(_("%s: object could not be parsed: 
%s"),
674ba34038 builtin/fsck.c 618) fprintf_ln(stderr, _("Checking object 
directory"));
287d68a44b builtin/fsck.c 636) fprintf_ln(stderr, _("Checking %s link"), 
head_ref_name);
287d68a44b builtin/fsck.c 641) return error(_("invalid %s"), head_ref_name);
674ba34038 builtin/fsck.c 670) fprintf_ln(stderr, _("Checking cache tree"));
674ba34038 builtin/fsck.c 686) err |= objerror(obj, _("non-tree in 
cache-tree"));

builtin/merge.c
9440b831ad builtin/merge.c  131) return error(_("option `%s' requires a 
value"), opt->long_name);

builtin/pack-objects.c
ca473cef91 builtin/pack-objects.c 2086) die(_("object %s inconsistent 
object length (%"PRIuMAX" vs %"PRIuMAX")"),
ca473cef91 builtin/pack-objects.c 2087) oid_to_hex(&trg_entry->idx.oid), 
(uintmax_t)sz,
ca473cef91 builtin/pack-objects.c 2113) die(_("object %s inconsistent 
object length (%"PRIuMAX" vs %"PRIuMAX")"),
ca473cef91 builtin/pack-objects.c 2114) oid_to_hex(&src_entry->idx.oid), 
(uintmax_t)sz,

builtin/rebase--interactive.c
005af339c9 builtin/rebase--interactive.c  262) ret = 
rearrange_squash(the_repository);
005af339c9 builtin/rebase--interactive.c  265) ret = 
sequencer_add_exec_commands(the_repository, cmd);

builtin/rebase.c
3249c1251e  544) ret = -1;
3249c1251e  545) goto leave_reset_head;
bac2a1e36f  549) ret = error(_("could not determine HEAD revision"));
bac2a1e36f  550) goto leave_reset_head;
3249c1251e  568) ret = error(_("could not read index"));
3249c1251e  569) goto leave_reset_head;
bac2a1e36f  573) ret = error(_("failed to find tree of %s"), 
oid_to_hex(oid));
bac2a1e36f  574) goto leave_reset_head;
3249c1251e  578) ret = error(_("failed to find tree of %s"), 
oid_to_hex(oid));
3249c1251e  579) goto leave_reset_head;
3249c1251e  592) goto leave_reset_head;

builtin/reflog.c
dd509db342 builtin/reflog.c 592) usage(_(reflog_expire_usage));
dd509db342 builtin/reflog.c 643) status |= error(_("%s points 
nowhere!"), argv[i]);
dd509db342 builtin/reflog.c 689) usage(_(reflog_delete_usage));
dd509db342 builtin/reflog.c 695) return error(_("no reflog specified to 
delete"));
dd509db342 builtin/reflog.c 704) status |= error(_("not a reflog: %s"), 
argv[i]);
dd509db342 builtin/reflog.c 709) status |= error(_("no reflog for 
'%s'"), argv[i]);
dd509db342 builtin/reflog.c 744) usage(_(reflog_exists_usage));
dd509db342 builtin/reflog.c 752) usage(_(reflog_exists_usage));
dd509db342 builtin/reflog.c 755) die(_("invalid ref format: %s"), 
argv[start]);

builtin/repack.c
c83d950e59 200) die(_("could not start pack-objects to repack promisor 
objects"));
287d68a44b 239) die(_("repack: Expecting full hex object ID lines only 
from pack-objects."));
c83d950e59 250) die_errno(_("unable to create '%s'"), promisor_name);
287d68a44b 411) die(_("repack: Expecting full hex object ID lines only 
from pack-objects."));

builtin/stash.c
3d5ec65ce8 builtin/stash--helper.c  126) error(_("'%s' is not a 
stash-like commit"), revision);
3d5ec65ce8 builtin/stash--helper.c  127) free_stash_info(info);
3d5ec65ce8 builtin/stash--helper.c  128) exit(128);
3d5ec65ce8 builtin/stash--helper.c  161) free_stash_info(info);
3d5ec65ce8 builtin/stash--helper.c  162) fprintf_ln(stderr, _("No stash 
entries found."));
3d5ec65ce8 builtin/stash--helper.c  163) return -1;
3d5ec65ce8 builtin/stash--helper.c  198) free_stash_info(info);
7005771171 builtin/stash--helper.c  225) return error(_("git stash clear 
with parameters is "
3d5ec65ce8 builtin/stash--helper.c  241) return -1;
3d5ec65ce8 builtin/stash--helper.c  249) return -1;
3d5ec65ce8 builtin/stash--helper.c  262) return -1;
3d5ec65ce8 builtin/stash--helper.c  265) return error(_("unable to write 
new index file"));
3d5ec65ce8 builtin/stash--helper.c  377) remove_path(stash_index_path.buf);
3d5ec65ce8 builtin/stash--helper.c  378) return -1;
3d5ec65ce8 builtin/stash--helper.c  405) return -1;
3d5ec65ce8 builtin/stash--helper.c  408) return error(_("cannot apply a 
stash in the middle of a merge"));
3d5ec65ce8 builtin/stash--helper.c  418) strbuf_release(&out);
3d5ec65ce8 builtin/stash--helper.c  419) return error(_("Could not 
generate diff %s^!."),
3d5ec65ce8 builtin/stash--helper.c  426) return error(_("Conflicts in 
index."
3d5ec65ce8 builtin/stash--helper.c  432) return error(_("Could not save 
index tree"));
3d5ec65ce8 builtin/stash--helper.c  439) return error(_("could not 
restore untracked files from stash"));
3d5ec65ce8 builtin/stash--helper.c  470) return -1;
3d5ec65ce8 builtin/stash--helper.c  475) strbuf_release(&out);
3d5ec65ce8 builtin/stash--helper.c  480) strbuf_release(&out);
3d5ec65ce8 builtin/stash--helper.c  481) return -1;
7005771171 builtin/stash--helper.c  557) return error(_("%s: Could not 
drop stash entry"),
5bf62a19c0 builtin/stash--helper.c  632) printf_ln(_("The stash entry is 
kept in case "
104eb50d14 builtin/stash--helper.c  766) free_stash_info(&info);
193c3e3516 builtin/stash.c          767) 
usage_with_options(git_stash_show_usage, options);
813904a0ce builtin/stash--helper.c  783) stash_msg = "Created via \"git 
stash store\".";
813904a0ce builtin/stash--helper.c  789) if (!quiet) {
813904a0ce builtin/stash--helper.c  790) fprintf_ln(stderr, _("Cannot 
update %s with %s"),
813904a0ce builtin/stash--helper.c  793) return -1;
813904a0ce builtin/stash--helper.c  817) if (!quiet)
813904a0ce builtin/stash--helper.c  818) fprintf_ln(stderr, _("\"git 
stash store\" requires one "
813904a0ce builtin/stash--helper.c  820) return -1;
9f630e7480 builtin/stash--helper.c  902) return -1;
9f630e7480 builtin/stash--helper.c  962) ret = -1;
9f630e7480 builtin/stash--helper.c  963) goto done;
9f630e7480 builtin/stash--helper.c  968) ret = -1;
9f630e7480 builtin/stash--helper.c  969) goto done;
9f630e7480 builtin/stash--helper.c  974) ret = -1;
9f630e7480 builtin/stash--helper.c  975) goto done;
9f630e7480 builtin/stash--helper.c 1001) ret = -1;
9f630e7480 builtin/stash--helper.c 1002) goto done;
9f630e7480 builtin/stash--helper.c 1013) ret = -1;
9f630e7480 builtin/stash--helper.c 1014) goto done;
9f630e7480 builtin/stash--helper.c 1020) ret = -1;
9f630e7480 builtin/stash--helper.c 1021) goto done;
9f630e7480 builtin/stash--helper.c 1028) ret = -1;
9f630e7480 builtin/stash--helper.c 1029) goto done;
9f630e7480 builtin/stash--helper.c 1054) ret = -1;
9f630e7480 builtin/stash--helper.c 1055) goto done;
9f630e7480 builtin/stash--helper.c 1067) ret = -1;
9f630e7480 builtin/stash--helper.c 1068) goto done;
9f630e7480 builtin/stash--helper.c 1074) ret = -1;
9f630e7480 builtin/stash--helper.c 1075) goto done;
9f630e7480 builtin/stash--helper.c 1086) ret = -1;
9f630e7480 builtin/stash--helper.c 1087) goto done;
9f630e7480 builtin/stash--helper.c 1092) ret = -1;
9f630e7480 builtin/stash--helper.c 1093) goto done;
c2cc69f192 builtin/stash--helper.c 1128) fprintf_ln(stderr, _("You do 
not have "
9f630e7480 builtin/stash--helper.c 1137) ret = 1;
9f630e7480 builtin/stash--helper.c 1138) goto done;
c2cc69f192 builtin/stash--helper.c 1154) if (!quiet)
c2cc69f192 builtin/stash--helper.c 1155) fprintf_ln(stderr, _("Cannot 
save the current "
9f630e7480 builtin/stash--helper.c 1157) ret = -1;
9f630e7480 builtin/stash--helper.c 1158) goto done;
c2cc69f192 builtin/stash--helper.c 1163) if (!quiet)
c2cc69f192 builtin/stash--helper.c 1164) fprintf_ln(stderr, _("Cannot save "
9f630e7480 builtin/stash--helper.c 1166) ret = -1;
9f630e7480 builtin/stash--helper.c 1167) goto done;
c2cc69f192 builtin/stash--helper.c 1174) if (!quiet)
c2cc69f192 builtin/stash--helper.c 1175) fprintf_ln(stderr, _("Cannot 
save the current "
9f630e7480 builtin/stash--helper.c 1177) goto done;
c2cc69f192 builtin/stash--helper.c 1183) if (!quiet)
c2cc69f192 builtin/stash--helper.c 1184) fprintf_ln(stderr, _("Cannot 
save the current "
9f630e7480 builtin/stash--helper.c 1186) ret = -1;
9f630e7480 builtin/stash--helper.c 1187) goto done;
c2cc69f192 builtin/stash--helper.c 1213) if (!quiet)
c2cc69f192 builtin/stash--helper.c 1214) fprintf_ln(stderr, _("Cannot 
record "
9f630e7480 builtin/stash--helper.c 1216) ret = -1;
9f630e7480 builtin/stash--helper.c 1217) goto done;
1a0f0409a7 builtin/stash--helper.c 1289) ret = -1;
1a0f0409a7 builtin/stash--helper.c 1290) goto done;
1a0f0409a7 builtin/stash--helper.c 1300) ret = -1;
c2cc69f192 builtin/stash--helper.c 1301) if (!quiet)
c2cc69f192 builtin/stash--helper.c 1302) fprintf_ln(stderr, _("Cannot 
initialize stash"));
1a0f0409a7 builtin/stash--helper.c 1303) goto done;
1a0f0409a7 builtin/stash--helper.c 1313) ret = -1;
c2cc69f192 builtin/stash--helper.c 1314) if (!quiet)
c2cc69f192 builtin/stash--helper.c 1315) fprintf_ln(stderr, _("Cannot 
save the current status"));
1a0f0409a7 builtin/stash--helper.c 1316) goto done;
1a0f0409a7 builtin/stash--helper.c 1333) ret = -1;
1a0f0409a7 builtin/stash--helper.c 1352) ret = -1;
1a0f0409a7 builtin/stash--helper.c 1353) goto done;
1a0f0409a7 builtin/stash--helper.c 1362) ret = -1;
1a0f0409a7 builtin/stash--helper.c 1363) goto done;
1a0f0409a7 builtin/stash--helper.c 1371) ret = -1;
1a0f0409a7 builtin/stash--helper.c 1380) ret = -1;
1a0f0409a7 builtin/stash--helper.c 1391) ret = -1;
1a0f0409a7 builtin/stash--helper.c 1392) goto done;
1a0f0409a7 builtin/stash--helper.c 1401) ret = -1;
1a0f0409a7 builtin/stash--helper.c 1402) goto done;
1a0f0409a7 builtin/stash--helper.c 1410) ret = -1;
1a0f0409a7 builtin/stash--helper.c 1436) ret = -1;
193c3e3516 builtin/stash.c         1568) 
usage_msg_opt(xstrfmt(_("unknown subcommand: %s"), argv[0]),
193c3e3516 builtin/stash.c         1596) continue;

bundle.c
74ae4b638d 380) struct commit *one = lookup_commit_reference(revs->repo, 
&oid);

delta-islands.c
385cb64ff3 216) parse_object(r, &obj->oid);

fast-import.c
ca473cef91 2958) strbuf_addf(&line, "%s %s %"PRIuMAX"\n", oid_to_hex(oid),

git.c
8aa8c14097 341) die_errno(_("while expanding alias '%s': '%s'"),
8aa8c14097 350) die(_("alias '%s' changes environment variables.\n"
8aa8c14097 358) die(_("empty alias for %s"), alias_command);
8aa8c14097 361) die(_("recursive alias: %s"), alias_command);
8aa8c14097 412) die(_("%s doesn't support --super-prefix"), p->cmd);
8aa8c14097 436) die_errno(_("write failure on standard output"));
8aa8c14097 438) die(_("unknown write failure on standard output"));
8aa8c14097 440) die_errno(_("close failed on standard output"));
8aa8c14097 658) die(_("%s doesn't support --super-prefix"), argv[0]);
8aa8c14097 770) die(_("cannot handle %s as a builtin"), cmd);

hex.c
b3a41547ce  93) char *sha1_to_hex_r(char *buffer, const unsigned char *sha1)
b3a41547ce  95) return hash_to_hex_algop_r(buffer, sha1, 
&hash_algos[GIT_HASH_SHA1]);
b3a41547ce 116) char *hash_to_hex(const unsigned char *hash)
b3a41547ce 118) return hash_to_hex_algop(hash, the_hash_algo);

http-walker.c
b69fb867b4 http-walker.c 550) loose_object_path(the_repository, &buf, 
req->sha1);

http.c
d73019feb4  289) return git_config_string(&curl_http_version, var, value);
d73019feb4  797) static int get_curl_http_version_opt(const char 
*version_string, long *opt)
d73019feb4  808) for (i = 0; i < ARRAY_SIZE(choice); i++) {
d73019feb4  809) if (!strcmp(version_string, choice[i].name)) {
d73019feb4  810) *opt = choice[i].opt_token;
d73019feb4  811) return 0;
d73019feb4  815) warning("unknown value given to http.version: '%s'", 
version_string);
d73019feb4  816) return -1; /* not found */
d73019feb4  841) if (!get_curl_http_version_opt(curl_http_version, &opt)) {
d73019feb4  843) curl_easy_setopt(result, CURLOPT_HTTP_VERSION, opt);

merge-recursive.c
37b65ce36b 1584) return -1;
37b65ce36b 1587) return -1;
37b65ce36b 1593) return -1;
37b65ce36b 1596) return -1;
37b65ce36b 1663) return -1;
37b65ce36b 1666) return -1;
37b65ce36b 1669) return -1;
7f8671656f 1702) return -1;
48c9cb9d6d 1758) return -1;
48c9cb9d6d 1806) return -1;
48c9cb9d6d 1812) return -1;
48c9cb9d6d 1815) return -1;
48c9cb9d6d 1825) return -1;
48c9cb9d6d 1831) return -1;
48c9cb9d6d 1834) return -1;

parse-options-cb.c
9440b831ad  21) return error(_("option `%s' expects a numerical value"),
9440b831ad  51) return error(_("option `%s' expects \"always\", 
\"auto\", or \"never\""),

parse-options.c
9440b831ad  88) return error(_("%s takes no value"), optname(opt, flags));
9440b831ad  90) return error(_("%s isn't available"), optname(opt, flags));
9440b831ad  92) return error(_("%s takes no value"), optname(opt, flags));
9440b831ad 178) return error(_("%s expects a numerical value"),
9440b831ad 194) return error(_("%s expects a non-negative integer value"
8900342628 356) error(_("did you mean `--%s` (with two dashes ?)"), arg);
8900342628 651) error(_("unknown non-ascii option in string: `%s'"),
9440b831ad 785) strbuf_addf(&sb, "option `no-%s'", opt->long_name);

protocol.c
c95f252809  37) die(_("Unrecognized protocol version"));
c95f252809  39) die(_("Unrecognized protocol_version"));

read-cache.c
9d0a9e9089  675) die(_("will not add file alias '%s' ('%s' already 
exists in index)"),
9d0a9e9089  676)     ce->name, alias->name);
9d0a9e9089  691) die(_("cannot create an empty blob in the object 
database"));
9d0a9e9089  712) return error(_("%s: can only add regular files, 
symbolic links or git-directories"), path);
9d0a9e9089  786) return error(_("unable to add '%s' to index"), path);
9d0a9e9089  822) error(_("invalid path '%s'"), path);
9d0a9e9089  848) error(_("invalid path '%s'"), path);
9d0a9e9089 1686) return error(_("bad signature 0x%08x"), 
hdr->hdr_signature);
9d0a9e9089 1689) return error(_("bad index version %d"), hdr_version);
9d0a9e9089 1728) return error(_("index uses %.4s extension, which we do 
not understand"),
9d0a9e9089 1730) fprintf_ln(stderr, _("ignoring %.4s extension"), ext);
9d0a9e9089 1777) die(_("unknown index entry format 0x%08x"), 
extended_flags);
9d0a9e9089 1848) die(_("unordered stage entries in index"));
9d0a9e9089 1851) die(_("multiple stage entries for merged file '%s'"),
9d0a9e9089 1854) die(_("unordered stage entries for '%s'"),
9d0a9e9089 2148) die_errno(_("%s: index file open failed"), path);
9d0a9e9089 2152) die_errno(_("%s: cannot stat the open index"), path);
9d0a9e9089 2156) die(_("%s: index file smaller than expected"), path);
9d0a9e9089 2160) die_errno(_("%s: unable to map index file"), path);
9d0a9e9089 2250) warning(_("could not freshen shared index '%s'"), 
shared_index);
9d0a9e9089 2285) die(_("broken index, expect %s in %s, got %s"),
9d0a9e9089 3071) error(_("cannot fix permission bits on '%s'"), 
get_tempfile_path(*temp));
9d0a9e9089 3217) return error(_("%s: cannot drop to stage #0"),

ref-filter.c
bbfc042ef9  238) oi_deref.info.sizep = &oi_deref.size;
bbfc042ef9  247) return strbuf_addf_ret(err, -1, _("unrecognized 
%%(objectsize) argument: %s"), arg);
ab0e367154  255) return strbuf_addf_ret(err, -1, _("%%(deltabase) does 
not take arguments"));
9440b831ad 2380) return error(_("option `%s' is incompatible with 
--no-merged"),

remote.c
0b9c3afdbf  362) warning(_("config remote shorthand cannot begin with 
'/': %s"),
0b9c3afdbf  417) error(_("more than one uploadpack given, using the 
first"));
0b9c3afdbf  683) die(_("key '%s' of pattern had no '*'"), key);
0b9c3afdbf  693) die(_("value '%s' of pattern has no '*'"), value);
0b9c3afdbf 1044) error(_("unable to delete '%s': remote ref does not 
exist"),
0b9c3afdbf 1066) return error(_("dst ref %s receives from more than one 
src"),
0b9c3afdbf 1785) die(_("couldn't find remote ref %s"), name);
0b9c3afdbf 1798) error(_("* Ignoring funny ref '%s' locally"),
0b9c3afdbf 1893) die(_("revision walk setup failed"));
0b9c3afdbf 2166) return error(_("cannot parse expected object name '%s'"),

sequencer.c
f11c958054  593) istate->cache_tree = cache_tree();
18e711a162 2387) opts->quiet = 1;
f11c958054 3977) res = error_dirty_index(r->index, opts);

sha1-file.c
2f90b9d9b4 sha1-file.c  172) int hash_algo_by_name(const char *name)
2f90b9d9b4 sha1-file.c  175) if (!name)
2f90b9d9b4 sha1-file.c  176) return GIT_HASH_UNKNOWN;
2f90b9d9b4 sha1-file.c  177) for (i = 1; i < GIT_HASH_NALGOS; i++)
2f90b9d9b4 sha1-file.c  178) if (!strcmp(name, hash_algos[i].name))
2f90b9d9b4 sha1-file.c  179) return i;
2f90b9d9b4 sha1-file.c  180) return GIT_HASH_UNKNOWN;
2f90b9d9b4 sha1-file.c  183) int hash_algo_by_id(uint32_t format_id)
2f90b9d9b4 sha1-file.c  186) for (i = 1; i < GIT_HASH_NALGOS; i++)
2f90b9d9b4 sha1-file.c  187) if (format_id == hash_algos[i].format_id)
2f90b9d9b4 sha1-file.c  188) return i;
2f90b9d9b4 sha1-file.c  189) return GIT_HASH_UNKNOWN;
f0eaf63819 sha1-file.c 2207) return r;

Commits introducing uncovered code:
brian m. carlson      2f90b9d9b: sha1-file: provide functions to look up 
hash algorithms
brian m. carlson      b3a41547c: hex: introduce functions to print 
arbitrary hashes
Daniels Umanovskis      0ecb1fc72: branch: introduce --show-current 
display option
Elijah Newren      18e711a16: git-rebase, sequencer: extend --quiet 
option for the interactive machinery
Elijah Newren      37b65ce36: merge-recursive: new function for better 
colliding conflict resolutions
Elijah Newren      48c9cb9d6: merge-recursive: improve 
rename/rename(1to2)/add[/add] handling
Elijah Newren      7f8671656: merge-recursive: fix rename/add conflict 
handling
Force Charlie      d73019feb: http: add support selecting http version
Jeff King      b69fb867b: sha1_file_name(): overwrite buffer instead of 
appending
Jeff King      f0eaf6381: sha1-file: use an object_directory for the 
main object dir
Joel Teichroeb      3d5ec65ce: stash: convert apply to builtin
Joel Teichroeb      5bf62a19c: stash: convert pop to builtin
Joel Teichroeb      700577117: stash: convert drop and clear to builtin
Johannes Schindelin      3249c1251: rebase: consolidate clean-up code 
before leaving reset_head()
Johannes Schindelin      bac2a1e36: built-in rebase: reinstate `checkout 
-q` behavior where appropriate
Josh Steadmon      c95f25280: protocol: advertise multiple supported 
versions
Junio C Hamano      287d68a44: Merge branch 'nd/i18n' into jch
Nguyễn Thái Ngọc Duy      005af339c: sequencer.c: remove implicit 
dependency on the_repository
Nguyễn Thái Ngọc Duy      0b9c3afdb: remote.c: mark messages for translation
Nguyễn Thái Ngọc Duy      385cb64ff: delta-islands.c: remove 
the_repository references
Nguyễn Thái Ngọc Duy      674ba3403: fsck: mark strings for translation
Nguyễn Thái Ngọc Duy      74ae4b638: bundle.c: remove the_repository 
references
Nguyễn Thái Ngọc Duy      890034262: parse-options.c: mark more strings 
for translation
Nguyễn Thái Ngọc Duy      8aa8c1409: git.c: mark more strings for 
translation
Nguyễn Thái Ngọc Duy      9440b831a: parse-options: replace opterror() 
with optname()
Nguyễn Thái Ngọc Duy      9d0a9e908: read-cache.c: mark more strings for 
translation
Nguyễn Thái Ngọc Duy      ad8f8f4ae: attr.c: mark more string for 
translation
Nguyễn Thái Ngọc Duy      c6e7965dd: archive.c: mark more strings for 
translation
Nguyễn Thái Ngọc Duy      c83d950e5: repack: mark more strings for 
translation
Nguyễn Thái Ngọc Duy      dd509db34: reflog: mark strings for translation
Nguyễn Thái Ngọc Duy      f11c95805: sequencer.c: remove implicit 
dependency on the_index
Nguyễn Thái Ngọc Duy      fb998eae6: blame.c: remove implicit dependency 
the_repository
Olga Telezhnaya      ab0e36715: ref-filter: add deltabase option
Olga Telezhnaya      bbfc042ef: ref-filter: add objectsize:disk option
Paul-Sebastian Ungureanu      104eb50d1: stash: convert show to builtin
Paul-Sebastian Ungureanu      193c3e351: stash: convert 
`stash--helper.c` into `stash.c`
Paul-Sebastian Ungureanu      1a0f0409a: stash: convert push to builtin
Paul-Sebastian Ungureanu      813904a0c: stash: convert store to builtin
Paul-Sebastian Ungureanu      9f630e748: stash: convert create to builtin
Paul-Sebastian Ungureanu      c2cc69f19: stash: make push -q quiet
Torsten Bögershausen      ca473cef9: Upcast size_t variables to 
uintmax_t when printing



Uncovered code in 'next' not in 'master'
--------------------------------------------

apply.c
517fe807d6 4776) BUG_ON_OPT_NEG(unset);
735ca208c5 4830) return -1;

builtin/am.c
fce5664805 2117) *opt_value = PATCH_FORMAT_UNKNOWN;

builtin/archive.c
e001fd3a50 builtin/archive.c  78) die(_("git archive: expected ACK/NAK, 
got a flush packet"));
e001fd3a50 builtin/archive.c  80) if (starts_with(reader.line, "NACK "))
e001fd3a50 builtin/archive.c  81) die(_("git archive: NACK %s"), 
reader.line + 5);
e001fd3a50 builtin/archive.c  82) if (starts_with(reader.line, "ERR "))
e001fd3a50 builtin/archive.c  83) die(_("remote error: %s"), reader.line 
+ 4);
e001fd3a50 builtin/archive.c  84) die(_("git archive: protocol error"));
e001fd3a50 builtin/archive.c  89) die(_("git archive: expected a flush"));
fb19d32f05 builtin/archive.c  99) if (version != discover_version(&reader))
fb19d32f05 builtin/archive.c 100) die(_("git archive: received different 
protocol versions in subsequent requests"));

builtin/blame.c
517fe807d6 builtin/blame.c    759) BUG_ON_OPT_NEG(unset);

builtin/cat-file.c
0eb8d3767c builtin/cat-file.c 609) return error(_("only one batch option 
may be specified"));

builtin/grep.c
fd6263fb73 builtin/grep.c 1051) warning(_("invalid option combination, 
ignoring --threads"));
fd6263fb73 builtin/grep.c 1057) die(_("invalid number of threads 
specified (%d)"), num_threads);

builtin/log.c
517fe807d6 builtin/log.c 1196) BUG_ON_OPT_NEG(unset);

builtin/pull.c
01a31f3bca 565) die(_("unable to access commit %s"),

builtin/show-branch.c
517fe807d6 builtin/show-branch.c 607) BUG_ON_OPT_NEG(unset);

builtin/show-ref.c
517fe807d6 builtin/show-ref.c 154) BUG_ON_OPT_NEG(unset);

builtin/upload-archive.c
e001fd3a50 builtin/upload-archive.c 113) if (version == protocol_v0 || 
version == protocol_v1)
e001fd3a50 builtin/upload-archive.c 114) packet_write_fmt(1, "NACK 
unable to spawn subprocess\n");
e001fd3a50 builtin/upload-archive.c 115) else if (version == protocol_v2)
e001fd3a50 builtin/upload-archive.c 116) error_clnt("unable to spawn 
subprocess\n");

http-backend.c
fb19d32f05 646) argv[1] = ".";
fb19d32f05 647) argv[2] = NULL;

midx.c
name-hash.c
2179045fd0 532) die(_("unable to create lazy_dir thread: %s"), 
strerror(err));
2179045fd0 554) die(_("unable to create lazy_name thread: %s"), 
strerror(err));
2179045fd0 560) die(_("unable to join lazy_name thread: %s"), 
strerror(err));

preload-index.c
2179045fd0 137) die(_("unable to create threaded lstat: %s"), 
strerror(err));

revision.c
b45424181e 2942) return;
b45424181e 2945) return;
b45424181e 2951) c->object.flags |= UNINTERESTING;
b45424181e 2954) return;
b45424181e 2957) mark_parents_uninteresting(c);
b45424181e 2980) return;
b45424181e 2983) return;
b45424181e 3048) continue;
f0d9cc4196 3097) if (!revs->ignore_missing_links)
f0d9cc4196 3098) die("Failed to traverse parents of commit %s",
f0d9cc4196 3099)     oid_to_hex(&commit->object.oid));
b45424181e 3107) continue;

run-command.c
2179045fd0 1229) error(_("cannot create async thread: %s"), strerror(err));

send-pack.c
c0e40a2d66 207) close(fd[1]);

transport-helper.c
fb19d32f05  643) if (!data->connect && !data->stateless_connect)

Commits introducing uncovered code:
Derrick Stolee      b45424181: revision.c: generation-based topo-order 
algorithm
Derrick Stolee      f0d9cc419: revision.c: begin refactoring 
--topo-order logic
Jeff King      01a31f3bc: pull: handle --verify-signatures for unborn branch
Jeff King      0eb8d3767: cat-file: report an error on multiple --batch 
options
Jeff King      517fe807d: assert NOARG/NONEG behavior of parse-options 
callbacks
Jeff King      735ca208c: apply: return -1 from option callback instead 
of calling exit(1)
Jeff King      fce566480: am: handle --no-patch-format option
Josh Steadmon      e001fd3a5: archive: implement protocol v2 archive command
Josh Steadmon      fb19d32f0: archive: allow archive over HTTP(S) with 
proto v2
Nguyễn Thái Ngọc Duy      2179045fd: Clean up pthread_create() error 
handling
Nguyễn Thái Ngọc Duy      c0e40a2d6: send-pack.c: move async's #ifdef 
NO_PTHREADS back to run-command.c
Nguyễn Thái Ngọc Duy      fd6263fb7: grep: clean up num_threads handling



Uncovered code in 'master' not in 'master@{1}'
----------------------------------------------------

builtin/add.c
d1664e73ad builtin/add.c 458) die(_("index file corrupt"));

builtin/cat-file.c
98f425b453 builtin/cat-file.c  56) die("unable to stream %s to stdout", 
oid_to_hex(oid));

builtin/fetch.c
builtin/fsck.c
b29759d89a builtin/fsck.c 613) fprintf(stderr, "Checking %s link\n", 
head_ref_name);
b29759d89a builtin/fsck.c 618) return error("Invalid %s", head_ref_name);

builtin/grep.c
76e9bdc437 builtin/grep.c  439) grep_read_unlock();

builtin/reflog.c
c9ef0d95eb builtin/reflog.c 580) all_worktrees = 0;
c9ef0d95eb builtin/reflog.c 616) continue;

combine-diff.c
0074c9110d  377) state->sline[state->nb-1].p_lno =
0074c9110d  378) xcalloc(state->num_parent, sizeof(unsigned long));

date.c
c27cc94fad  904) tm->tm_mon = number-1;
c27cc94fad  908) else if (number > 69 && number < 100)
c27cc94fad  909) tm->tm_year = number;
c27cc94fad  910) else if (number < 38)
c27cc94fad  911) tm->tm_year = 100 + number;
c27cc94fad  952) pending_number(tm, num);

dir.c
8a2c174677  287) name = to_free = xmemdupz(name, namelen);

midx.c
1dcd9f2043  184) return;

refs.c
3a3b9d8cde  657) return 0;

refs/files-backend.c
remote.c
85daa01f6b 1219) continue;
85daa01f6b 1225) continue;

sequencer.c
bcd33ec25f  683) np = strchrnul(buf, '\n');
bcd33ec25f  684) return error(_("no key present in '%.*s'"),
bcd33ec25f  695) return error(_("unable to dequote value of '%s'"),
bcd33ec25f  737) goto finish;
bcd33ec25f  742) name_i = error(_("'GIT_AUTHOR_NAME' already given"));
bcd33ec25f  747) email_i = error(_("'GIT_AUTHOR_EMAIL' already given"));
bcd33ec25f  752) date_i = error(_("'GIT_AUTHOR_DATE' already given"));
bcd33ec25f  756) err = error(_("unknown variable '%s'"),
bcd33ec25f  761) error(_("missing 'GIT_AUTHOR_NAME'"));
bcd33ec25f  763) error(_("missing 'GIT_AUTHOR_EMAIL'"));
bcd33ec25f  765) error(_("missing 'GIT_AUTHOR_DATE'"));

setup.c
58b284a2e9  413) return config_error_nonbool(var);

submodule-config.c
bcbc780d14 739) return CONFIG_INVALID_KEY;
45f5ef3d77 754) warning(_("Could not update .gitmodules entry %s"), key);

worktree.c
3a3b9d8cde 495) return -1;
3a3b9d8cde 508) return -1;
3a3b9d8cde 517) return -1;
ab3e1f78ae 537) break;

xdiff-interface.c
xdiff/xutils.c
611e42a598 405) return -1;

Commits introducing uncovered code:
Antonio Ospite      45f5ef3d7: submodule: factor out a 
config_set_in_gitmodules_file_gently function
Antonio Ospite      76e9bdc43: submodule: support reading .gitmodules 
when it's not in the working tree
Antonio Ospite      bcbc780d1: submodule: add a 
print_config_from_gitmodules() helper
Ben Peart      d1664e73a: add: speed up cmd_add() by utilizing 
read_cache_preload()
Derrick Stolee      1dcd9f204: midx: close multi-pack-index on repack
Derrick Stolee      85daa01f6: remote: make add_missing_tags() linear
Jeff King      0074c9110: combine-diff: use an xdiff hunk callback
Jeff King      611e42a59: xdiff: provide a separate emit callback for hunks
Jeff King      8a2c17467: pathspec: handle non-terminated strings with 
:(attr)
Jeff King      98f425b45: cat-file: handle streaming failures consistently
Jeff King      c27cc94fa: approxidate: handle pending number for "specials"
Nguyễn Thái Ngọc Duy      3a3b9d8cd: refs: new ref types to make 
per-worktree refs visible to all worktrees
Nguyễn Thái Ngọc Duy      58b284a2e: worktree: add per-worktree config files
Nguyễn Thái Ngọc Duy      ab3e1f78a: revision.c: better error reporting 
on ref from different worktrees
Nguyễn Thái Ngọc Duy      b29759d89: fsck: check HEAD and reflog from 
other worktrees
Nguyễn Thái Ngọc Duy      c9ef0d95e: reflog expire: cover reflog from 
all worktrees
Phillip Wood      bcd33ec25: add read_author_script() to libgit


^ permalink raw reply	[relevance 1%]

* Re: [PATCH 1/1] fixup! Merge branch 'js/vsts-ci' into pu
  @ 2019-01-29 17:50  2%   ` Junio C Hamano
  0 siblings, 0 replies; 200+ results
From: Junio C Hamano @ 2019-01-29 17:50 UTC (permalink / raw)
  To: Johannes Schindelin via GitGitGadget; +Cc: git, Johannes Schindelin

"Johannes Schindelin via GitGitGadget" <gitgitgadget@gmail.com>
writes:

> From: Johannes Schindelin <johannes.schindelin@gmx.de>
>
> The js/vsts-ci and sg/travis-specific-cc branches do not interact so
> well... While Travis has the Homebrew package gcc@8 installed in their
> Xcode 10.1 images, Azure Pipelines' agents do not.
>
> Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
> ---
>  ci/lib.sh | 2 +-
>  1 file changed, 1 insertion(+), 1 deletion(-)

Thanks; will use as a merge-fix/ recipe (assuming that sg/travis
would graduate before vsts-ci).

> diff --git a/ci/lib.sh b/ci/lib.sh
> index 276b99693d..16f4ecbc67 100755
> --- a/ci/lib.sh
> +++ b/ci/lib.sh
> @@ -123,7 +123,7 @@ then
>  		echo "$SYSTEM_TASKDEFINITIONSURI$SYSTEM_TEAMPROJECT/_build/results?buildId=$1"
>  	}
>  
> -	BREW_INSTALL_PACKAGES=
> +	BREW_INSTALL_PACKAGES=gcc@8
>  	export GIT_PROVE_OPTS="--timer --jobs 10 --state=failed,slow,save"
>  	export GIT_TEST_OPTS="--verbose-log -x --write-junit-xml"
>  	export MAKEFLAGS="--jobs=10"

^ permalink raw reply	[relevance 2%]

* [PATCH 00/52] fix some -Wmissing-field-initializer warnings
@ 2019-05-24 20:28  3% Ramsay Jones
  0 siblings, 0 replies; 200+ results
From: Ramsay Jones @ 2019-05-24 20:28 UTC (permalink / raw)
  To: Junio C Hamano; +Cc: Jeff King, Nguyen Thai Ngoc Duy, GIT Mailing-list


[No, I won't be sending 52 patches to the list!]

This series, started last year, has been hanging around because the
time never seemed right to send it to the list. It may still not be
the right time ... :-D

I would like to be able to compile git using '-Wall -Wextra -Werror'
compiler options. In order to see how far away we are from that
possibility, you can build with DEVELOPER=1 along with the additional
settings: 'DEVOPTS=extra-all no-error pedantic'.

That leads to many warnings:

      $ git describe
      v2.22.0-rc1
      $ make >out 2>&1
      $ grep warning out | sed -e 's/.*\[-W/\[-W/' | sort | uniq -c
            9 [-Wempty-body]
         1694 [-Wmissing-field-initializers]
          159 [-Wpedantic]
          945 [-Wsign-compare]
         2821 [-Wunused-parameter]
      $

Note that at the beginning of this cycle, the numbers were quite a bit
smaller (and this series was only 37 patches, rather than 52):

      $ git describe
      v2.21.0
      $ make >out 2>&1
      $ grep warning out | sed -e 's/.*\[-W/\[-W/' | sort | uniq -c
            9 [-Wempty-body]
          759 [-Wmissing-field-initializers]
          925 [-Wsign-compare]
         2732 [-Wunused-parameter]
      $

This series removes the, newly introduced, pedantic warnings and
eliminates all 1371 'missing-field-initializers' warnings that
relate to 'struct option':

      $ cat out-warn-master.stats
            9 [-Wempty-body]
          323 [-Wmissing-field-initializers]
          945 [-Wsign-compare]
         2821 [-Wunused-parameter]
      $ 

Thus, after about six months, I am further away from my target than
when I started! ;-)

This series does not fix any problems or add any new features, so it
is not important (hence the tendency to 'slip'). I don't want to
flood the mailing list with patches that nobody wants, so: is there
any interest in these kinds of patches? If not, I will stop now!
(I have a 2-3 year old branch that addressed the '-Wsign-compare'
warnings, but that is probably beyond salvaging by now :( ).

This series is available from: git://repo.or.cz/git/raj.git with the
branch name 'warn-master'. A trial merge to current 'next' and 'pu'
branches can be found at 'warn-next' and 'warn-pu' branches. (The
merge to 'next' went without problem, and 'pu' only required a fixup
to the builtin/commit patch).

[The 'warn-v2.21' branch shows the previous version of the series.]

What do you think?

Thanks!

ATB,
Ramsay Jones

Ramsay Jones (52):
  parse-options: reformat the OPT_X() macros
  parse-options: move some one-line OPT_X() macros
  parse-options: rename callback parameter from 'f' to 'cb'
  parse-options: add missing field initializers
  list-objects-filter-options: add missing initializer
  ref-filter.h: add missing field initializers
  parse-options: add an OPT_LL_CALLBACK() macro
  parse-options.h: add 'd' parameter to OPT_INTEGER_F()
  parse-options.h: fix some -Wpedantic warnings
  builtin/update-index: fix some -Wmissing-field-initializers warnings
  builtin/log: fix some -Wmissing-field-initializers warnings
  builtin/notes: fix some -Wmissing-field-initializers warnings
  builtin/grep: fix some -Wmissing-field-initializers warnings
  builtin/commit: fix some -Wmissing-field-initializers warnings
  apply.c: fix some -Wmissing-field-initializers warnings
  builtin/rebase: fix some -Wmissing-field-initializers warnings
  builtin/config: add missing field initializers
  test-parse-options: fix some -Wmissing-field-initializers warnings
  builtin/read-tree: fix some -Wmissing-field-initializers warnings
  builtin/merge: fix some -Wmissing-field-initializers warnings
  builtin/fetch: fix some -Wmissing-field-initializers warnings
  builtin/commit-tree: fix some -Wmissing-field-initializers warnings
  builtin/tag: fix an -Wmissing-field-initializers warning
  builtin/push: fix some -Wmissing-field-initializers warnings
  builtin/pack-objects: fix some -Wmissing-field-initializers warnings
  builtin/ls-files: fix some -Wmissing-field-initializers warnings
  builtin/blame: fix some -Wmissing-field-initializers warnings
  builtin/show-ref: fix some -Wmissing-field-initializers warnings
  builtin/show-branch: fix an -Wmissing-field-initializers warning
  builtin/send-pack: fix some -Wmissing-field-initializers warnings
  builtin/pull: fix some -Wmissing-field-initializers warnings
  builtin/fmt-merge-msg: fix some -Wmissing-field-initializers warnings
  builtin/describe: fix some -Wmissing-field-initializers warnings
  builtin/cat-file: fix some -Wmissing-field-initializers warnings
  builtin/shortlog: fix an -Wmissing-field-initializers warning
  builtin/reset: fix an -Wmissing-field-initializers warning
  builtin/remote: fix an -Wmissing-field-initializers warning
  builtin/ls-remote: fix an -Wmissing-field-initializers warning
  builtin/interpret-trailers: fix an -Wmissing-field-initializers warning
  builtin/clean: fix an -Wmissing-field-initializers warning
  builtin/checkout-index: fix an -Wmissing-field-initializers warning
  builtin/checkout: fix an -Wmissing-field-initializers warning
  builtin/branch: fix an -Wmissing-field-initializers warning
  builtin/add: fix an -Wmissing-field-initializers warning
  builtin/write-tree: fix an -Wmissing-field-initializers warning
  builtin/revert: fix an -Wmissing-field-initializers warning
  builtin/name-rev: fix an -Wmissing-field-initializers warning
  builtin/init-db: fix an -Wmissing-field-initializers warning
  builtin/gc: fix an -Wmissing-field-initializers warning
  builtin/clone: fix an -Wmissing-field-initializers warning
  builtin/am: fix an -Wmissing-field-initializers warning
  diff.c: fix an -Wmissing-field-initializers warning

 apply.c                       |  28 ++---
 builtin/add.c                 |   4 +-
 builtin/am.c                  |   6 +-
 builtin/blame.c               |   6 +-
 builtin/branch.c              |   7 +-
 builtin/cat-file.c            |   8 +-
 builtin/checkout-index.c      |   4 +-
 builtin/checkout.c            |   7 +-
 builtin/clean.c               |   5 +-
 builtin/clone.c               |   2 +-
 builtin/commit-tree.c         |  24 ++--
 builtin/commit.c              |  21 ++--
 builtin/config.c              |   2 +-
 builtin/describe.c            |   8 +-
 builtin/fetch.c               |  17 +--
 builtin/fmt-merge-msg.c       |  10 +-
 builtin/gc.c                  |   3 +-
 builtin/grep.c                |  24 ++--
 builtin/init-db.c             |   4 +-
 builtin/interpret-trailers.c  |   4 +-
 builtin/log.c                 |  56 ++++-----
 builtin/ls-files.c            |  12 +-
 builtin/ls-remote.c           |   4 +-
 builtin/merge.c               |  17 +--
 builtin/name-rev.c            |   8 +-
 builtin/notes.c               |  32 ++---
 builtin/pack-objects.c        |  12 +-
 builtin/pull.c                |  16 +--
 builtin/push.c                |  22 ++--
 builtin/read-tree.c           |  19 +--
 builtin/rebase.c              |  69 ++++++-----
 builtin/remote.c              |   5 +-
 builtin/reset.c               |   5 +-
 builtin/revert.c              |   5 +-
 builtin/send-pack.c           |  11 +-
 builtin/shortlog.c            |   4 +-
 builtin/show-branch.c         |  10 +-
 builtin/show-ref.c            |  11 +-
 builtin/tag.c                 |  19 ++-
 builtin/update-index.c        |  61 +++++-----
 builtin/write-tree.c          |   6 +-
 diff.c                        |   4 +-
 list-objects-filter-options.h |   2 +-
 parse-options.h               | 216 ++++++++++++++++++++++------------
 ref-filter.h                  |   2 +-
 t/helper/test-parse-options.c |  16 +--
 46 files changed, 458 insertions(+), 380 deletions(-)

-- 
2.21.0

^ permalink raw reply	[relevance 3%]

* Re: [PATCH v6 07/27] checkout: inform the user when removing branch state
  @ 2019-07-02 17:51  2%         ` Junio C Hamano
  2019-07-04 23:57  0%           ` Duy Nguyen
  0 siblings, 1 reply; 200+ results
From: Junio C Hamano @ 2019-07-02 17:51 UTC (permalink / raw)
  To: Duy Nguyen
  Cc: SZEDER Gábor, eckhard.s.maass, git, jacob.keller,
	martin.agren, newren, phillip.wood123, rybak.a.v, sunshine

Duy Nguyen <pclouds@gmail.com> writes:

> I agree, this is not "canceling". I think this series causes conflicts
> with pw/clean-sequencer-state-upon-final-commit and the warning is
> accidentally enabled (partly my fault since I named the argument
> "verbose").
>
> Junio, in this conflict resolution (merging nd/switch-and-restore to
> next), we should pass '0' instead of 'verbose' to
> sequencer_post_commit_cleanup().

Thanks for an update to the merge-fix.  What should the name of the
parameter to the sequencer_post_commit_cleanup() funcion be then,
though?  Perhaps we'd want an update after the topic graduates to
the 'master' branch.

>
> diff --cc builtin/commit.c
> index 1921401117,fa5982cc86..145d50caf0
> --- a/builtin/commit.c
> +++ b/builtin/commit.c
> @@@ -1658,7 -1666,8 +1658,7 @@@ int cmd_commit(int argc, const char **a
>   		die("%s", err.buf);
>   	}
>   
> - 	sequencer_post_commit_cleanup(the_repository);
>  -	unlink(git_path_cherry_pick_head(the_repository));
>  -	unlink(git_path_revert_head(the_repository));
> ++	sequencer_post_commit_cleanup(the_repository, verbose);
>   	unlink(git_path_merge_head(the_repository));
>   	unlink(git_path_merge_msg(the_repository));
>   	unlink(git_path_merge_mode(the_repository));
> --
> Duy

^ permalink raw reply	[relevance 2%]

* Re: [PATCH v6 07/27] checkout: inform the user when removing branch state
  2019-07-02 17:51  2%         ` Junio C Hamano
@ 2019-07-04 23:57  0%           ` Duy Nguyen
  0 siblings, 0 replies; 200+ results
From: Duy Nguyen @ 2019-07-04 23:57 UTC (permalink / raw)
  To: Junio C Hamano
  Cc: SZEDER Gábor, Eckhard Maaß, Git Mailing List,
	Jacob Keller, Martin Ågren, Elijah Newren, Phillip Wood,
	Andrei Rybak, Eric Sunshine

On Wed, Jul 3, 2019 at 12:51 AM Junio C Hamano <gitster@pobox.com> wrote:
>
> Duy Nguyen <pclouds@gmail.com> writes:
>
> > I agree, this is not "canceling". I think this series causes conflicts
> > with pw/clean-sequencer-state-upon-final-commit and the warning is
> > accidentally enabled (partly my fault since I named the argument
> > "verbose").
> >
> > Junio, in this conflict resolution (merging nd/switch-and-restore to
> > next), we should pass '0' instead of 'verbose' to
> > sequencer_post_commit_cleanup().
>
> Thanks for an update to the merge-fix.  What should the name of the
> parameter to the sequencer_post_commit_cleanup() funcion be then,
> though?  Perhaps we'd want an update after the topic graduates to
> the 'master' branch.

Definitely. I was thinking something with "warn" and "cancel", which
is more the the point. Probably warn_cancel_in_progress, or something.
-- 
Duy

^ permalink raw reply	[relevance 0%]

* [PATCH 03/19] Ensure index matches head before invoking merge machinery, round N
  @ 2019-07-25 17:45  3% ` Elijah Newren
  2019-07-25 19:41  0%   ` Johannes Schindelin
    1 sibling, 1 reply; 200+ results
From: Elijah Newren @ 2019-07-25 17:45 UTC (permalink / raw)
  To: git; +Cc: Junio C Hamano, Elijah Newren

This is the bug that just won't die; there always seems to be another
form of it somewhere.  See the commit message of 55f39cf7551b ("merge:
fix misleading pre-merge check documentation", 2018-06-30) for a more
detailed explanation), but in short:

<quick summary>

builtin/merge.c contains this important requirement for merge
strategies:

    ...the index must be in sync with the head commit.  The strategies are
    responsible to ensure this.

This condition is important to enforce because there are two likely
failure cases when the index isn't in sync with the head commit:

  * we silently throw away changes the user had staged before the merge

  * we accidentally (and silently) include changes in the merge that
    were not part of either of the branches/trees being merged

Discarding users' work and mis-merging are both bad outcomes, especially
when done silently, so naturally this rule was stated sternly -- but,
unfortunately totally ignored in practice unless and until actual bugs
were found.  But, fear not: the bugs from this were fixed in commit
  ee6566e8d70d ("[PATCH] Rewrite read-tree", 2005-09-05)
through a rewrite of read-tree (again, commit 55f39cf7551b has a more
detailed explanation of how this affected merge).  And it was fixed
again in commit
  160252f81626 ("git-merge-ours: make sure our index matches HEAD", 2005-11-03)
...and it was fixed again in commit
  3ec62ad9ffba ("merge-octopus: abort if index does not match HEAD", 2016-04-09)
...and again in commit
  65170c07d466 ("merge-recursive: avoid incorporating uncommitted changes in a merge", 2017-12-21)
...and again in commit
  eddd1a411d93 ("merge-recursive: enforce rule that index matches head before merging", 2018-06-30)

...with multiple testcases added to the testsuite that could be
enumerated in even more commits.

Then, finally, in a patch in the same series as the last fix above, the
documentation about this requirement was fixed in commit 55f39cf7551b
("merge: fix misleading pre-merge check documentation", 2018-06-30), and
we all lived happily ever after...

</quick summary>

Unfortunately, "ever after" apparently denotes a limited time and it
expired today.  The merge-recursive rule to enforce that index matches
head was at the beginning of merge_trees() and would only trigger when
opt->call_depth was 0.  Since merge_recursive() doesn't call
merge_trees() until after returning from recursing, this meant that the
check wasn't triggered by merge_recursive() until it had first finished
all the intermediate merges to create virtual merge bases.  That is a
potentially HUGE amount of computation (and writing of intermediate
merge results into the .git/objects directory) before it errors out and
says, in effect, "Sorry, I can't do any merging because you have some
local changes that would be overwritten."

Trying to enforce that all of merge_trees(), merge_recursive(), and
merge_recursive_generic() checked the index == head condition earlier
resulted in a bunch of broken tests.  It turns out that
merge_recursive() has code to drop and reload the cache while recursing
to create intermediate virtual merge bases, but unfortunately that code
runs even when no recursion is necessary.  This unconditional dropping
and reloading of the cache masked a few bugs:

  * builtin/merge-recursive.c: didn't even bother loading the index.

  * builtin/stash.c: feels like a fake 'builtin' because it repeatedly
    invokes git subprocesses all over the place, mixed with other
    operations.  In particular, invoking "git reset" will reset the
    index on disk, but the parent process that invoked it won't
    automatically have its in-memory index updated.

  * t3030-merge-recursive.h: this test has always been broken in that it
    didn't make sure to make index match head before running.  But, it
    didn't care about the index or even the merge result, just the
    verbose output while running.  While commit eddd1a411d93
    ("merge-recursive: enforce rule that index matches head before
    merging", 2018-06-30) should have uncovered this broken test, it
    used a test_must_fail wrapper around the merge-recursive call
    because it was known that the merge resulted in a rename/rename
    conflict.  Thus, that fix only made this test fail for a different
    reason, and since the index == head check didn't happen until after
    coming all the way back out of the recursion, the testcase had
    enough information to pass the one check that it did perform.

So, load the index in builtin/merge-recursive.c, reload the in-memory
index in builtin/stash.c, and modify the t3030 testcase to correctly
setup the index and make sure that the test fails in the expected way
(meaning it reports a rename/rename conflict).

Signed-off-by: Elijah Newren <newren@gmail.com>
---
 builtin/merge-recursive.c  | 4 ++++
 builtin/stash.c            | 2 ++
 t/t3030-merge-recursive.sh | 9 ++++++++-
 3 files changed, 14 insertions(+), 1 deletion(-)

diff --git a/builtin/merge-recursive.c b/builtin/merge-recursive.c
index 5b910e351e..a4bfd8fc51 100644
--- a/builtin/merge-recursive.c
+++ b/builtin/merge-recursive.c
@@ -1,3 +1,4 @@
+#include "cache.h"
 #include "builtin.h"
 #include "commit.h"
 #include "tag.h"
@@ -63,6 +64,9 @@ int cmd_merge_recursive(int argc, const char **argv, const char *prefix)
 	if (argc - i != 3) /* "--" "<head>" "<remote>" */
 		die(_("not handling anything other than two heads merge."));
 
+	if (repo_read_index_unmerged(the_repository))
+		die_resolve_conflict("merge");
+
 	o.branch1 = argv[++i];
 	o.branch2 = argv[++i];
 
diff --git a/builtin/stash.c b/builtin/stash.c
index fde6397caa..bec011c1bb 100644
--- a/builtin/stash.c
+++ b/builtin/stash.c
@@ -427,6 +427,8 @@ static int do_apply_stash(const char *prefix, struct stash_info *info,
 				return error(_("could not save index tree"));
 
 			reset_head();
+			discard_cache();
+			read_cache();
 		}
 	}
 
diff --git a/t/t3030-merge-recursive.sh b/t/t3030-merge-recursive.sh
index ff641b348a..a37bcc58a0 100755
--- a/t/t3030-merge-recursive.sh
+++ b/t/t3030-merge-recursive.sh
@@ -667,15 +667,22 @@ test_expect_success 'merging with triple rename across D/F conflict' '
 test_expect_success 'merge-recursive remembers the names of all base trees' '
 	git reset --hard HEAD &&
 
+	# make the index match $c1 so that merge-recursive below does not
+	# fail early
+	git diff --binary HEAD $c1 -- | git apply --cached &&
+
 	# more trees than static slots used by oid_to_hex()
 	for commit in $c0 $c2 $c4 $c5 $c6 $c7
 	do
 		git rev-parse "$commit^{tree}"
 	done >trees &&
 
-	# ignore the return code -- it only fails because the input is weird
+	# ignore the return code; it only fails because the input is weird...
 	test_must_fail git -c merge.verbosity=5 merge-recursive $(cat trees) -- $c1 $c3 >out &&
 
+	# ...but make sure it fails in the expected way
+	test_i18ngrep CONFLICT.*rename/rename out &&
+
 	# merge-recursive prints in reverse order, but we do not care
 	sort <trees >expect &&
 	sed -n "s/^virtual //p" out | sort >actual &&
-- 
2.22.0.559.g28a8880890.dirty


^ permalink raw reply related	[relevance 3%]

* Re: [PATCH 03/19] Ensure index matches head before invoking merge machinery, round N
  2019-07-25 17:45  3% ` [PATCH 03/19] Ensure index matches head before invoking merge machinery, round N Elijah Newren
@ 2019-07-25 19:41  0%   ` Johannes Schindelin
  2019-07-25 19:58  0%     ` Elijah Newren
  0 siblings, 1 reply; 200+ results
From: Johannes Schindelin @ 2019-07-25 19:41 UTC (permalink / raw)
  To: Elijah Newren; +Cc: git, Junio C Hamano

Hi Elijah,

On Thu, 25 Jul 2019, Elijah Newren wrote:

> This is the bug that just won't die; there always seems to be another
> form of it somewhere.  See the commit message of 55f39cf7551b ("merge:
> fix misleading pre-merge check documentation", 2018-06-30) for a more
> detailed explanation), but in short:
>
> <quick summary>
>
> builtin/merge.c contains this important requirement for merge
> strategies:
>
>     ...the index must be in sync with the head commit.  The strategies are
>     responsible to ensure this.
>
> This condition is important to enforce because there are two likely
> failure cases when the index isn't in sync with the head commit:
>
>   * we silently throw away changes the user had staged before the merge
>
>   * we accidentally (and silently) include changes in the merge that
>     were not part of either of the branches/trees being merged
>
> Discarding users' work and mis-merging are both bad outcomes, especially
> when done silently, so naturally this rule was stated sternly -- but,
> unfortunately totally ignored in practice unless and until actual bugs
> were found.  But, fear not: the bugs from this were fixed in commit
>   ee6566e8d70d ("[PATCH] Rewrite read-tree", 2005-09-05)
> through a rewrite of read-tree (again, commit 55f39cf7551b has a more
> detailed explanation of how this affected merge).  And it was fixed
> again in commit
>   160252f81626 ("git-merge-ours: make sure our index matches HEAD", 2005-11-03)
> ...and it was fixed again in commit
>   3ec62ad9ffba ("merge-octopus: abort if index does not match HEAD", 2016-04-09)
> ...and again in commit
>   65170c07d466 ("merge-recursive: avoid incorporating uncommitted changes in a merge", 2017-12-21)
> ...and again in commit
>   eddd1a411d93 ("merge-recursive: enforce rule that index matches head before merging", 2018-06-30)
>
> ...with multiple testcases added to the testsuite that could be
> enumerated in even more commits.
>
> Then, finally, in a patch in the same series as the last fix above, the
> documentation about this requirement was fixed in commit 55f39cf7551b
> ("merge: fix misleading pre-merge check documentation", 2018-06-30), and
> we all lived happily ever after...
>
> </quick summary>

Whoa. What a story.

> Unfortunately, "ever after" apparently denotes a limited time and it
> expired today.  The merge-recursive rule to enforce that index matches
> head was at the beginning of merge_trees() and would only trigger when
> opt->call_depth was 0.  Since merge_recursive() doesn't call
> merge_trees() until after returning from recursing, this meant that the
> check wasn't triggered by merge_recursive() until it had first finished
> all the intermediate merges to create virtual merge bases.  That is a
> potentially HUGE amount of computation (and writing of intermediate
> merge results into the .git/objects directory) before it errors out and
> says, in effect, "Sorry, I can't do any merging because you have some
> local changes that would be overwritten."
>
> Trying to enforce that all of merge_trees(), merge_recursive(), and
> merge_recursive_generic() checked the index == head condition earlier
> resulted in a bunch of broken tests.  It turns out that
> merge_recursive() has code to drop and reload the cache while recursing
> to create intermediate virtual merge bases, but unfortunately that code
> runs even when no recursion is necessary.  This unconditional dropping
> and reloading of the cache masked a few bugs:
>
>   * builtin/merge-recursive.c: didn't even bother loading the index.
>
>   * builtin/stash.c: feels like a fake 'builtin' because it repeatedly
>     invokes git subprocesses all over the place, mixed with other
>     operations.  In particular, invoking "git reset" will reset the
>     index on disk, but the parent process that invoked it won't
>     automatically have its in-memory index updated.

Yep, the idea was to move fast to a built-in, and then continue by
converting all those process spawns to proper calls to libgit "API"
functions.

Sadly, that did not happen yet.

And you're absolutely right that failing to re-read the index after
spawning a `reset --hard` causes problems. IIRC I fixed them all,
though, see
https://public-inbox.org/git/nycvar.QRO.7.76.6.1902191127420.41@tvgsbejvaqbjf.bet/

> So, load the index in builtin/merge-recursive.c, reload the in-memory
> index in builtin/stash.c, and modify the t3030 testcase to correctly
> setup the index and make sure that the test fails in the expected way
> (meaning it reports a rename/rename conflict).

Makes sense to me.

> diff --git a/builtin/merge-recursive.c b/builtin/merge-recursive.c
> index 5b910e351e..a4bfd8fc51 100644
> --- a/builtin/merge-recursive.c
> +++ b/builtin/merge-recursive.c
> @@ -1,3 +1,4 @@
> +#include "cache.h"
>  #include "builtin.h"
>  #include "commit.h"
>  #include "tag.h"
> @@ -63,6 +64,9 @@ int cmd_merge_recursive(int argc, const char **argv, const char *prefix)
>  	if (argc - i != 3) /* "--" "<head>" "<remote>" */
>  		die(_("not handling anything other than two heads merge."));
>
> +	if (repo_read_index_unmerged(the_repository))
> +		die_resolve_conflict("merge");

For a moment I was unsure whether `_unmerged()` is the right thing to do
here, as it specifically allows to read the index even when there are
conflict stages. But I guess it does not matter too much here. I
probably would have opted for `repo_read_index()` instead, though.

> +
>  	o.branch1 = argv[++i];
>  	o.branch2 = argv[++i];
>
> diff --git a/builtin/stash.c b/builtin/stash.c
> index fde6397caa..bec011c1bb 100644
> --- a/builtin/stash.c
> +++ b/builtin/stash.c
> @@ -427,6 +427,8 @@ static int do_apply_stash(const char *prefix, struct stash_info *info,
>  				return error(_("could not save index tree"));
>
>  			reset_head();
> +			discard_cache();
> +			read_cache();

I was honestly puzzled why this is necessary, at first. The preceding
context expands to this:

                        discard_cache();
                        read_cache();
                        if (write_cache_as_tree(&index_tree, 0, NULL))
                                return error(_("could not save index tree"));

So basically, we already discard the index, read it again, then write it
as a tree, then reset and then we have to discard the index again?

But of course, if there are uncommitted changes, this would write a tree
different from HEAD, then reset the index to match HEAD, so indeed, this
discard/read dance is necessary.

So this hunk is good.

>  		}
>  	}
>
> diff --git a/t/t3030-merge-recursive.sh b/t/t3030-merge-recursive.sh
> index ff641b348a..a37bcc58a0 100755
> --- a/t/t3030-merge-recursive.sh
> +++ b/t/t3030-merge-recursive.sh
> @@ -667,15 +667,22 @@ test_expect_success 'merging with triple rename across D/F conflict' '
>  test_expect_success 'merge-recursive remembers the names of all base trees' '
>  	git reset --hard HEAD &&
>
> +	# make the index match $c1 so that merge-recursive below does not
> +	# fail early
> +	git diff --binary HEAD $c1 -- | git apply --cached &&
> +
>  	# more trees than static slots used by oid_to_hex()
>  	for commit in $c0 $c2 $c4 $c5 $c6 $c7
>  	do
>  		git rev-parse "$commit^{tree}"
>  	done >trees &&
>
> -	# ignore the return code -- it only fails because the input is weird
> +	# ignore the return code; it only fails because the input is weird...
>  	test_must_fail git -c merge.verbosity=5 merge-recursive $(cat trees) -- $c1 $c3 >out &&
>
> +	# ...but make sure it fails in the expected way
> +	test_i18ngrep CONFLICT.*rename/rename out &&
> +

This is obviously a good change: it strengthens the test case by fixing
a subtle bug.

Thanks,
Dscho

>  	# merge-recursive prints in reverse order, but we do not care
>  	sort <trees >expect &&
>  	sed -n "s/^virtual //p" out | sort >actual &&
> --
> 2.22.0.559.g28a8880890.dirty
>
>

^ permalink raw reply	[relevance 0%]

* Re: [PATCH 03/19] Ensure index matches head before invoking merge machinery, round N
  2019-07-25 19:41  0%   ` Johannes Schindelin
@ 2019-07-25 19:58  0%     ` Elijah Newren
  0 siblings, 0 replies; 200+ results
From: Elijah Newren @ 2019-07-25 19:58 UTC (permalink / raw)
  To: Johannes Schindelin; +Cc: Git Mailing List, Junio C Hamano

Hi Dscho,

On Thu, Jul 25, 2019 at 12:41 PM Johannes Schindelin
<Johannes.Schindelin@gmx.de> wrote:
>
> Hi Elijah,
>
> On Thu, 25 Jul 2019, Elijah Newren wrote:
>
<snip>
> > ...And it was fixed again in commit
> >   160252f81626 ("git-merge-ours: make sure our index matches HEAD", 2005-11-03)
> > ...and it was fixed again in commit
> >   3ec62ad9ffba ("merge-octopus: abort if index does not match HEAD", 2016-04-09)
> > ...and again in commit
> >   65170c07d466 ("merge-recursive: avoid incorporating uncommitted changes in a merge", 2017-12-21)
> > ...and again in commit
> >   eddd1a411d93 ("merge-recursive: enforce rule that index matches head before merging", 2018-06-30)
> >
> > ...with multiple testcases added to the testsuite that could be
> > enumerated in even more commits.
> >
> > Then, finally, in a patch in the same series as the last fix above, the
> > documentation about this requirement was fixed in commit 55f39cf7551b
> > ("merge: fix misleading pre-merge check documentation", 2018-06-30), and
> > we all lived happily ever after...
> >
> > </quick summary>
>
> Whoa. What a story.

I know, right?

> > diff --git a/builtin/merge-recursive.c b/builtin/merge-recursive.c
> > index 5b910e351e..a4bfd8fc51 100644
> > --- a/builtin/merge-recursive.c
> > +++ b/builtin/merge-recursive.c
> > @@ -1,3 +1,4 @@
> > +#include "cache.h"
> >  #include "builtin.h"
> >  #include "commit.h"
> >  #include "tag.h"
> > @@ -63,6 +64,9 @@ int cmd_merge_recursive(int argc, const char **argv, const char *prefix)
> >       if (argc - i != 3) /* "--" "<head>" "<remote>" */
> >               die(_("not handling anything other than two heads merge."));
> >
> > +     if (repo_read_index_unmerged(the_repository))
> > +             die_resolve_conflict("merge");
>
> For a moment I was unsure whether `_unmerged()` is the right thing to do
> here, as it specifically allows to read the index even when there are
> conflict stages. But I guess it does not matter too much here. I
> probably would have opted for `repo_read_index()` instead, though.

The names repo_read_index() and repo_read_index_unmerged() actually
seem slightly misleading to me; they seem to do the opposite of what
you'd think they do.

repo_read_index() reads in an index and allows unmerged entries and
returns istate->cache_nr.

repo_read_index_unmerged() calls repo_read_index(), then checks to see
if any of the entries are unmerged and returns whether or not any
unmerged entries were found.

So, the way to disallow conflict stages isn't to use
repo_read_index(), but to use repo_read_index_unmerged(), as I did.
Counter-intuitive, I know.

<snip>

> But of course, if there are uncommitted changes, this would write a tree
> different from HEAD, then reset the index to match HEAD, so indeed, this
> discard/read dance is necessary.
>
> So this hunk is good.
>
<snip>
>
> This is obviously a good change: it strengthens the test case by fixing
> a subtle bug.
>
> Thanks,
> Dscho


Thanks for taking a look!

^ permalink raw reply	[relevance 0%]

* [PATCH v2 03/20] Ensure index matches head before invoking merge machinery, round N
  @ 2019-07-26 15:52  2%   ` Elijah Newren
    1 sibling, 0 replies; 200+ results
From: Elijah Newren @ 2019-07-26 15:52 UTC (permalink / raw)
  To: git; +Cc: Junio C Hamano, Johannes Schindelin, Elijah Newren

This is the bug that just won't die; there always seems to be another
form of it somewhere.  See the commit message of 55f39cf7551b ("merge:
fix misleading pre-merge check documentation", 2018-06-30) for a more
detailed explanation), but in short:

<quick summary>

builtin/merge.c contains this important requirement for merge
strategies:

    ...the index must be in sync with the head commit.  The strategies are
    responsible to ensure this.

This condition is important to enforce because there are two likely
failure cases when the index isn't in sync with the head commit:

  * we silently throw away changes the user had staged before the merge

  * we accidentally (and silently) include changes in the merge that
    were not part of either of the branches/trees being merged

Discarding users' work and mis-merging are both bad outcomes, especially
when done silently, so naturally this rule was stated sternly -- but,
unfortunately totally ignored in practice unless and until actual bugs
were found.  But, fear not: the bugs from this were fixed in commit
  ee6566e8d70d ("[PATCH] Rewrite read-tree", 2005-09-05)
through a rewrite of read-tree (again, commit 55f39cf7551b has a more
detailed explanation of how this affected merge).  And it was fixed
again in commit
  160252f81626 ("git-merge-ours: make sure our index matches HEAD", 2005-11-03)
...and it was fixed again in commit
  3ec62ad9ffba ("merge-octopus: abort if index does not match HEAD", 2016-04-09)
...and again in commit
  65170c07d466 ("merge-recursive: avoid incorporating uncommitted changes in a merge", 2017-12-21)
...and again in commit
  eddd1a411d93 ("merge-recursive: enforce rule that index matches head before merging", 2018-06-30)

...with multiple testcases added to the testsuite that could be
enumerated in even more commits.

Then, finally, in a patch in the same series as the last fix above, the
documentation about this requirement was fixed in commit 55f39cf7551b
("merge: fix misleading pre-merge check documentation", 2018-06-30), and
we all lived happily ever after...

</quick summary>

Unfortunately, "ever after" apparently denotes a limited time and it
expired today.  The merge-recursive rule to enforce that index matches
head was at the beginning of merge_trees() and would only trigger when
opt->call_depth was 0.  Since merge_recursive() doesn't call
merge_trees() until after returning from recursing, this meant that the
check wasn't triggered by merge_recursive() until it had first finished
all the intermediate merges to create virtual merge bases.  That is a
potentially HUGE amount of computation (and writing of intermediate
merge results into the .git/objects directory) before it errors out and
says, in effect, "Sorry, I can't do any merging because you have some
local changes that would be overwritten."

Trying to enforce that all of merge_trees(), merge_recursive(), and
merge_recursive_generic() checked the index == head condition earlier
resulted in a bunch of broken tests.  It turns out that
merge_recursive() has code to drop and reload the cache while recursing
to create intermediate virtual merge bases, but unfortunately that code
runs even when no recursion is necessary.  This unconditional dropping
and reloading of the cache masked a few bugs:

  * builtin/merge-recursive.c: didn't even bother loading the index.

  * builtin/stash.c: feels like a fake 'builtin' because it repeatedly
    invokes git subprocesses all over the place, mixed with other
    operations.  In particular, invoking "git reset" will reset the
    index on disk, but the parent process that invoked it won't
    automatically have its in-memory index updated.

  * t3030-merge-recursive.h: this test has always been broken in that it
    didn't make sure to make index match head before running.  But, it
    didn't care about the index or even the merge result, just the
    verbose output while running.  While commit eddd1a411d93
    ("merge-recursive: enforce rule that index matches head before
    merging", 2018-06-30) should have uncovered this broken test, it
    used a test_must_fail wrapper around the merge-recursive call
    because it was known that the merge resulted in a rename/rename
    conflict.  Thus, that fix only made this test fail for a different
    reason, and since the index == head check didn't happen until after
    coming all the way back out of the recursion, the testcase had
    enough information to pass the one check that it did perform.

So, load the index in builtin/merge-recursive.c, reload the in-memory
index in builtin/stash.c, and modify the t3030 testcase to correctly
setup the index and make sure that the test fails in the expected way
(meaning it reports a rename/rename conflict).

Signed-off-by: Elijah Newren <newren@gmail.com>
---
 builtin/merge-recursive.c  | 4 ++++
 builtin/stash.c            | 2 ++
 t/t3030-merge-recursive.sh | 9 ++++++++-
 3 files changed, 14 insertions(+), 1 deletion(-)

diff --git a/builtin/merge-recursive.c b/builtin/merge-recursive.c
index 5b910e351e..a4bfd8fc51 100644
--- a/builtin/merge-recursive.c
+++ b/builtin/merge-recursive.c
@@ -1,3 +1,4 @@
+#include "cache.h"
 #include "builtin.h"
 #include "commit.h"
 #include "tag.h"
@@ -63,6 +64,9 @@ int cmd_merge_recursive(int argc, const char **argv, const char *prefix)
 	if (argc - i != 3) /* "--" "<head>" "<remote>" */
 		die(_("not handling anything other than two heads merge."));
 
+	if (repo_read_index_unmerged(the_repository))
+		die_resolve_conflict("merge");
+
 	o.branch1 = argv[++i];
 	o.branch2 = argv[++i];
 
diff --git a/builtin/stash.c b/builtin/stash.c
index b5a301f24d..4aa47785f9 100644
--- a/builtin/stash.c
+++ b/builtin/stash.c
@@ -427,6 +427,8 @@ static int do_apply_stash(const char *prefix, struct stash_info *info,
 				return error(_("could not save index tree"));
 
 			reset_head();
+			discard_cache();
+			read_cache();
 		}
 	}
 
diff --git a/t/t3030-merge-recursive.sh b/t/t3030-merge-recursive.sh
index ff641b348a..a37bcc58a0 100755
--- a/t/t3030-merge-recursive.sh
+++ b/t/t3030-merge-recursive.sh
@@ -667,15 +667,22 @@ test_expect_success 'merging with triple rename across D/F conflict' '
 test_expect_success 'merge-recursive remembers the names of all base trees' '
 	git reset --hard HEAD &&
 
+	# make the index match $c1 so that merge-recursive below does not
+	# fail early
+	git diff --binary HEAD $c1 -- | git apply --cached &&
+
 	# more trees than static slots used by oid_to_hex()
 	for commit in $c0 $c2 $c4 $c5 $c6 $c7
 	do
 		git rev-parse "$commit^{tree}"
 	done >trees &&
 
-	# ignore the return code -- it only fails because the input is weird
+	# ignore the return code; it only fails because the input is weird...
 	test_must_fail git -c merge.verbosity=5 merge-recursive $(cat trees) -- $c1 $c3 >out &&
 
+	# ...but make sure it fails in the expected way
+	test_i18ngrep CONFLICT.*rename/rename out &&
+
 	# merge-recursive prints in reverse order, but we do not care
 	sort <trees >expect &&
 	sed -n "s/^virtual //p" out | sort >actual &&
-- 
2.22.0.550.g71c37a0928.dirty


^ permalink raw reply related	[relevance 2%]

* [PATCH v3 08/24] Ensure index matches head before invoking merge machinery, round N
  @ 2019-08-15 21:40  2%     ` Elijah Newren
    1 sibling, 0 replies; 200+ results
From: Elijah Newren @ 2019-08-15 21:40 UTC (permalink / raw)
  To: git; +Cc: Junio C Hamano, Johannes Schindelin, Derrick Stolee,
	Elijah Newren

This is the bug that just won't die; there always seems to be another
form of it somewhere.  See the commit message of 55f39cf7551b ("merge:
fix misleading pre-merge check documentation", 2018-06-30) for a more
detailed explanation), but in short:

<quick summary>

builtin/merge.c contains this important requirement for merge
strategies:

    ...the index must be in sync with the head commit.  The strategies are
    responsible to ensure this.

This condition is important to enforce because there are two likely
failure cases when the index isn't in sync with the head commit:

  * we silently throw away changes the user had staged before the merge

  * we accidentally (and silently) include changes in the merge that
    were not part of either of the branches/trees being merged

Discarding users' work and mis-merging are both bad outcomes, especially
when done silently, so naturally this rule was stated sternly -- but,
unfortunately totally ignored in practice unless and until actual bugs
were found.  But, fear not: the bugs from this were fixed in commit
  ee6566e8d70d ("[PATCH] Rewrite read-tree", 2005-09-05)
through a rewrite of read-tree (again, commit 55f39cf7551b has a more
detailed explanation of how this affected merge).  And it was fixed
again in commit
  160252f81626 ("git-merge-ours: make sure our index matches HEAD", 2005-11-03)
...and it was fixed again in commit
  3ec62ad9ffba ("merge-octopus: abort if index does not match HEAD", 2016-04-09)
...and again in commit
  65170c07d466 ("merge-recursive: avoid incorporating uncommitted changes in a merge", 2017-12-21)
...and again in commit
  eddd1a411d93 ("merge-recursive: enforce rule that index matches head before merging", 2018-06-30)

...with multiple testcases added to the testsuite that could be
enumerated in even more commits.

Then, finally, in a patch in the same series as the last fix above, the
documentation about this requirement was fixed in commit 55f39cf7551b
("merge: fix misleading pre-merge check documentation", 2018-06-30), and
we all lived happily ever after...

</quick summary>

Unfortunately, "ever after" apparently denotes a limited time and it
expired today.  The merge-recursive rule to enforce that index matches
head was at the beginning of merge_trees() and would only trigger when
opt->call_depth was 0.  Since merge_recursive() doesn't call
merge_trees() until after returning from recursing, this meant that the
check wasn't triggered by merge_recursive() until it had first finished
all the intermediate merges to create virtual merge bases.  That is a
potentially HUGE amount of computation (and writing of intermediate
merge results into the .git/objects directory) before it errors out and
says, in effect, "Sorry, I can't do any merging because you have some
local changes that would be overwritten."

Trying to enforce that all of merge_trees(), merge_recursive(), and
merge_recursive_generic() checked the index == head condition earlier
resulted in a bunch of broken tests.  It turns out that
merge_recursive() has code to drop and reload the cache while recursing
to create intermediate virtual merge bases, but unfortunately that code
runs even when no recursion is necessary.  This unconditional dropping
and reloading of the cache masked a few bugs:

  * builtin/merge-recursive.c: didn't even bother loading the index.

  * builtin/stash.c: feels like a fake 'builtin' because it repeatedly
    invokes git subprocesses all over the place, mixed with other
    operations.  In particular, invoking "git reset" will reset the
    index on disk, but the parent process that invoked it won't
    automatically have its in-memory index updated.

  * t3030-merge-recursive.h: this test has always been broken in that it
    didn't make sure to make index match head before running.  But, it
    didn't care about the index or even the merge result, just the
    verbose output while running.  While commit eddd1a411d93
    ("merge-recursive: enforce rule that index matches head before
    merging", 2018-06-30) should have uncovered this broken test, it
    used a test_must_fail wrapper around the merge-recursive call
    because it was known that the merge resulted in a rename/rename
    conflict.  Thus, that fix only made this test fail for a different
    reason, and since the index == head check didn't happen until after
    coming all the way back out of the recursion, the testcase had
    enough information to pass the one check that it did perform.

So, load the index in builtin/merge-recursive.c, reload the in-memory
index in builtin/stash.c, and modify the t3030 testcase to correctly
setup the index and make sure that the test fails in the expected way
(meaning it reports a rename/rename conflict).  This makes sure that
all callers actually make the index match head.  The next commit will
then enforce the condition that index matches head earlier so this
problem doesn't return in the future.

Signed-off-by: Elijah Newren <newren@gmail.com>
---
 builtin/merge-recursive.c  | 4 ++++
 builtin/stash.c            | 2 ++
 t/t3030-merge-recursive.sh | 9 ++++++++-
 3 files changed, 14 insertions(+), 1 deletion(-)

diff --git a/builtin/merge-recursive.c b/builtin/merge-recursive.c
index 5b910e351e..a4bfd8fc51 100644
--- a/builtin/merge-recursive.c
+++ b/builtin/merge-recursive.c
@@ -1,3 +1,4 @@
+#include "cache.h"
 #include "builtin.h"
 #include "commit.h"
 #include "tag.h"
@@ -63,6 +64,9 @@ int cmd_merge_recursive(int argc, const char **argv, const char *prefix)
 	if (argc - i != 3) /* "--" "<head>" "<remote>" */
 		die(_("not handling anything other than two heads merge."));
 
+	if (repo_read_index_unmerged(the_repository))
+		die_resolve_conflict("merge");
+
 	o.branch1 = argv[++i];
 	o.branch2 = argv[++i];
 
diff --git a/builtin/stash.c b/builtin/stash.c
index b5a301f24d..4aa47785f9 100644
--- a/builtin/stash.c
+++ b/builtin/stash.c
@@ -427,6 +427,8 @@ static int do_apply_stash(const char *prefix, struct stash_info *info,
 				return error(_("could not save index tree"));
 
 			reset_head();
+			discard_cache();
+			read_cache();
 		}
 	}
 
diff --git a/t/t3030-merge-recursive.sh b/t/t3030-merge-recursive.sh
index ff641b348a..a37bcc58a0 100755
--- a/t/t3030-merge-recursive.sh
+++ b/t/t3030-merge-recursive.sh
@@ -667,15 +667,22 @@ test_expect_success 'merging with triple rename across D/F conflict' '
 test_expect_success 'merge-recursive remembers the names of all base trees' '
 	git reset --hard HEAD &&
 
+	# make the index match $c1 so that merge-recursive below does not
+	# fail early
+	git diff --binary HEAD $c1 -- | git apply --cached &&
+
 	# more trees than static slots used by oid_to_hex()
 	for commit in $c0 $c2 $c4 $c5 $c6 $c7
 	do
 		git rev-parse "$commit^{tree}"
 	done >trees &&
 
-	# ignore the return code -- it only fails because the input is weird
+	# ignore the return code; it only fails because the input is weird...
 	test_must_fail git -c merge.verbosity=5 merge-recursive $(cat trees) -- $c1 $c3 >out &&
 
+	# ...but make sure it fails in the expected way
+	test_i18ngrep CONFLICT.*rename/rename out &&
+
 	# merge-recursive prints in reverse order, but we do not care
 	sort <trees >expect &&
 	sed -n "s/^virtual //p" out | sort >actual &&
-- 
2.23.0.rc2.32.g2123e9e4e4


^ permalink raw reply related	[relevance 2%]

* [PATCH v4 08/24] Ensure index matches head before invoking merge machinery, round N
  @ 2019-08-17 18:41  2%       ` Elijah Newren
  0 siblings, 0 replies; 200+ results
From: Elijah Newren @ 2019-08-17 18:41 UTC (permalink / raw)
  To: git
  Cc: Junio C Hamano, Johannes Schindelin, Derrick Stolee,
	SZEDER Gábor, Elijah Newren

This is the bug that just won't die; there always seems to be another
form of it somewhere.  See the commit message of 55f39cf7551b ("merge:
fix misleading pre-merge check documentation", 2018-06-30) for a more
detailed explanation), but in short:

<quick summary>

builtin/merge.c contains this important requirement for merge
strategies:

    ...the index must be in sync with the head commit.  The strategies are
    responsible to ensure this.

This condition is important to enforce because there are two likely
failure cases when the index isn't in sync with the head commit:

  * we silently throw away changes the user had staged before the merge

  * we accidentally (and silently) include changes in the merge that
    were not part of either of the branches/trees being merged

Discarding users' work and mis-merging are both bad outcomes, especially
when done silently, so naturally this rule was stated sternly -- but,
unfortunately totally ignored in practice unless and until actual bugs
were found.  But, fear not: the bugs from this were fixed in commit
  ee6566e8d70d ("[PATCH] Rewrite read-tree", 2005-09-05)
through a rewrite of read-tree (again, commit 55f39cf7551b has a more
detailed explanation of how this affected merge).  And it was fixed
again in commit
  160252f81626 ("git-merge-ours: make sure our index matches HEAD", 2005-11-03)
...and it was fixed again in commit
  3ec62ad9ffba ("merge-octopus: abort if index does not match HEAD", 2016-04-09)
...and again in commit
  65170c07d466 ("merge-recursive: avoid incorporating uncommitted changes in a merge", 2017-12-21)
...and again in commit
  eddd1a411d93 ("merge-recursive: enforce rule that index matches head before merging", 2018-06-30)

...with multiple testcases added to the testsuite that could be
enumerated in even more commits.

Then, finally, in a patch in the same series as the last fix above, the
documentation about this requirement was fixed in commit 55f39cf7551b
("merge: fix misleading pre-merge check documentation", 2018-06-30), and
we all lived happily ever after...

</quick summary>

Unfortunately, "ever after" apparently denotes a limited time and it
expired today.  The merge-recursive rule to enforce that index matches
head was at the beginning of merge_trees() and would only trigger when
opt->call_depth was 0.  Since merge_recursive() doesn't call
merge_trees() until after returning from recursing, this meant that the
check wasn't triggered by merge_recursive() until it had first finished
all the intermediate merges to create virtual merge bases.  That is a
potentially HUGE amount of computation (and writing of intermediate
merge results into the .git/objects directory) before it errors out and
says, in effect, "Sorry, I can't do any merging because you have some
local changes that would be overwritten."

Trying to enforce that all of merge_trees(), merge_recursive(), and
merge_recursive_generic() checked the index == head condition earlier
resulted in a bunch of broken tests.  It turns out that
merge_recursive() has code to drop and reload the cache while recursing
to create intermediate virtual merge bases, but unfortunately that code
runs even when no recursion is necessary.  This unconditional dropping
and reloading of the cache masked a few bugs:

  * builtin/merge-recursive.c: didn't even bother loading the index.

  * builtin/stash.c: feels like a fake 'builtin' because it repeatedly
    invokes git subprocesses all over the place, mixed with other
    operations.  In particular, invoking "git reset" will reset the
    index on disk, but the parent process that invoked it won't
    automatically have its in-memory index updated.

  * t3030-merge-recursive.h: this test has always been broken in that it
    didn't make sure to make index match head before running.  But, it
    didn't care about the index or even the merge result, just the
    verbose output while running.  While commit eddd1a411d93
    ("merge-recursive: enforce rule that index matches head before
    merging", 2018-06-30) should have uncovered this broken test, it
    used a test_must_fail wrapper around the merge-recursive call
    because it was known that the merge resulted in a rename/rename
    conflict.  Thus, that fix only made this test fail for a different
    reason, and since the index == head check didn't happen until after
    coming all the way back out of the recursion, the testcase had
    enough information to pass the one check that it did perform.

So, load the index in builtin/merge-recursive.c, reload the in-memory
index in builtin/stash.c, and modify the t3030 testcase to correctly
setup the index and make sure that the test fails in the expected way
(meaning it reports a rename/rename conflict).  This makes sure that
all callers actually make the index match head.  The next commit will
then enforce the condition that index matches head earlier so this
problem doesn't return in the future.

Signed-off-by: Elijah Newren <newren@gmail.com>
---
 builtin/merge-recursive.c  | 4 ++++
 builtin/stash.c            | 2 ++
 t/t3030-merge-recursive.sh | 9 ++++++++-
 3 files changed, 14 insertions(+), 1 deletion(-)

diff --git a/builtin/merge-recursive.c b/builtin/merge-recursive.c
index 5b910e351e..a4bfd8fc51 100644
--- a/builtin/merge-recursive.c
+++ b/builtin/merge-recursive.c
@@ -1,3 +1,4 @@
+#include "cache.h"
 #include "builtin.h"
 #include "commit.h"
 #include "tag.h"
@@ -63,6 +64,9 @@ int cmd_merge_recursive(int argc, const char **argv, const char *prefix)
 	if (argc - i != 3) /* "--" "<head>" "<remote>" */
 		die(_("not handling anything other than two heads merge."));
 
+	if (repo_read_index_unmerged(the_repository))
+		die_resolve_conflict("merge");
+
 	o.branch1 = argv[++i];
 	o.branch2 = argv[++i];
 
diff --git a/builtin/stash.c b/builtin/stash.c
index b5a301f24d..4aa47785f9 100644
--- a/builtin/stash.c
+++ b/builtin/stash.c
@@ -427,6 +427,8 @@ static int do_apply_stash(const char *prefix, struct stash_info *info,
 				return error(_("could not save index tree"));
 
 			reset_head();
+			discard_cache();
+			read_cache();
 		}
 	}
 
diff --git a/t/t3030-merge-recursive.sh b/t/t3030-merge-recursive.sh
index ff641b348a..a37bcc58a0 100755
--- a/t/t3030-merge-recursive.sh
+++ b/t/t3030-merge-recursive.sh
@@ -667,15 +667,22 @@ test_expect_success 'merging with triple rename across D/F conflict' '
 test_expect_success 'merge-recursive remembers the names of all base trees' '
 	git reset --hard HEAD &&
 
+	# make the index match $c1 so that merge-recursive below does not
+	# fail early
+	git diff --binary HEAD $c1 -- | git apply --cached &&
+
 	# more trees than static slots used by oid_to_hex()
 	for commit in $c0 $c2 $c4 $c5 $c6 $c7
 	do
 		git rev-parse "$commit^{tree}"
 	done >trees &&
 
-	# ignore the return code -- it only fails because the input is weird
+	# ignore the return code; it only fails because the input is weird...
 	test_must_fail git -c merge.verbosity=5 merge-recursive $(cat trees) -- $c1 $c3 >out &&
 
+	# ...but make sure it fails in the expected way
+	test_i18ngrep CONFLICT.*rename/rename out &&
+
 	# merge-recursive prints in reverse order, but we do not care
 	sort <trees >expect &&
 	sed -n "s/^virtual //p" out | sort >actual &&
-- 
2.23.0.rc2.28.g5f89f15d7b.dirty


^ permalink raw reply related	[relevance 2%]

* Re: [PATCH 04/11] hashmap_entry: detect improper initialization
  @ 2019-08-27 22:16  1%       ` Junio C Hamano
  2019-08-28 15:04  0%         ` Johannes Schindelin
  0 siblings, 1 reply; 200+ results
From: Junio C Hamano @ 2019-08-27 22:16 UTC (permalink / raw)
  To: Eric Wong; +Cc: Johannes Schindelin, git

Eric Wong <e@80x24.org> writes:

> I renamed it to intentionally break my build.

This cuts both ways.  If you work without any throw-away merges, it
is GOOD to make sure any new use other people added will be spotted
by the compiler by breaking the build.  It will force you to resolve
all such breakages until you can move on to other topics, and it
will also force you to commit to your topic that deliberately breaks
the build by renaming.

If you want to avoid committing to the current iteration of topic,
however, then that would mean you'd need a reliable way to rebuild
evil merges (aka resolution of semantic conflicts) so that you can
keep parts of more recent history more flexible (similar to how 'pu'
is managed).

My plan is to have ew/hashmap topic for a few days while ejecting
the js/add-i topic which semantically conflicts with the changed way
hashmaps ought to be used temporarily, and when I have enough time
and concentration, try to see if I can come up with a good semantic
conflict resolution that I can keep reusing (aka refs/merge-fix/).
If it happens, we'll see both topics, and if it doesn't, I'll then
drop ew/hashmap and queue js/add-i and rinse and repeat from there
;-)

^ permalink raw reply	[relevance 1%]

* Re: [PATCH 04/11] hashmap_entry: detect improper initialization
  2019-08-27 22:16  1%       ` Junio C Hamano
@ 2019-08-28 15:04  0%         ` Johannes Schindelin
  0 siblings, 0 replies; 200+ results
From: Johannes Schindelin @ 2019-08-28 15:04 UTC (permalink / raw)
  To: Junio C Hamano; +Cc: Eric Wong, git

Hi Junio,

On Tue, 27 Aug 2019, Junio C Hamano wrote:

> My plan is to have ew/hashmap topic for a few days while ejecting
> the js/add-i topic which semantically conflicts with the changed way
> hashmaps ought to be used temporarily, and when I have enough time
> and concentration, try to see if I can come up with a good semantic
> conflict resolution that I can keep reusing (aka refs/merge-fix/).
> If it happens, we'll see both topics, and if it doesn't, I'll then
> drop ew/hashmap and queue js/add-i and rinse and repeat from there
> ;-)

FWIW I crafted my latest iteration such that you would only need to do
the `hash` => `_hash` rename in one line to merge `js/builtin-add-i`.

Ciao,
Dscho

^ permalink raw reply	[relevance 0%]

* Re: [PATCH] submodule add: show 'add --dry-run' stderr when aborting
  @ 2020-01-16 20:23  2%   ` Junio C Hamano
  0 siblings, 0 replies; 200+ results
From: Junio C Hamano @ 2020-01-16 20:23 UTC (permalink / raw)
  To: Johannes Schindelin; +Cc: Kyle Meyer, git, Yaroslav O Halchenko

Johannes Schindelin <Johannes.Schindelin@gmx.de> writes:

> I think this got mis-merged when merging down `km/submodule-add-errmsg`:
> it needs to be prefixed with `hint:` because of `hw/advice-add-nothing`,
> i.e.
>
> -- snipsnap --
> diff --git a/t/t7400-submodule-basic.sh b/t/t7400-submodule-basic.sh
> index 42a00f95b9d..a6973a3003c 100755
> --- a/t/t7400-submodule-basic.sh
> +++ b/t/t7400-submodule-basic.sh
> @@ -158,7 +158,7 @@ test_expect_success 'submodule add to .gitignored path fails' '
>  		cat <<-\EOF >expect &&
>  		The following paths are ignored by one of your .gitignore files:
>  		submod
> -		Use -f if you really want to add them.
> +		hint: Use -f if you really want to add them.
>  		EOF
>  		# Does not use test_commit due to the ignore
>  		echo "*" > .gitignore &&

Thanks, will prepare merge-fix material for this.



^ permalink raw reply	[relevance 2%]

* [PATCH v1 0/2] rebase --merge: fix fast forwarding when `rebase.abbreviateCommands' is set
  @ 2020-03-30 12:42  2% ` Alban Gruin
  0 siblings, 0 replies; 200+ results
From: Alban Gruin @ 2020-03-30 12:42 UTC (permalink / raw)
  To: git
  Cc: Johannes Schindelin, Elijah Newren, Phillip Wood, Junio C Hamano,
	jan.steffens, Alban Gruin

Jan Alexander Steffens reported that when `rebase.abbreviateCommands' is
set, the merge backend fails to fast forward.  This is because the
backend generates a todo list with only a `noop', and since this command
has no abbreviated form, it is replaced by a comment mark.  The
sequencer then interprets it as if there is nothing to do, and fails.

This patch series fixes this issue by teaching the sequencer not to
abbreviate a command if it does not have a short form, and adds a bunch
of regression tests.

This series is based on 9fadedd637 ("Merge branch
'ds/default-pack-use-sparse-to-true'", 2020-03-29).

The tip of this series is tagged as "rebase-dont-abbreviate-v1" at
https://github.com/agrn/git.

Alban Gruin (2):
  sequencer: don't abbreviate a command if it doesn't have a short form
  t3432: test `--merge' with `rebase.abbreviateCommands = true', too

 sequencer.c                    |  9 ++++++---
 t/t3432-rebase-fast-forward.sh | 24 +++++++++++++++++++-----
 2 files changed, 25 insertions(+), 8 deletions(-)

-- 
2.25.0


^ permalink raw reply	[relevance 2%]

* Re: Collaborative conflict resolution feature request
  @ 2020-06-13 16:44  2%       ` Junio C Hamano
    1 sibling, 0 replies; 200+ results
From: Junio C Hamano @ 2020-06-13 16:44 UTC (permalink / raw)
  To: Philip Oakley
  Cc: Curtin, Eric, Christian Couder, git@vger.kernel.org, Geary, Niall,
	rowlands, scott, Michael Haggerty

Philip Oakley <philipoakley@iee.email> writes:

> Maybe have a parallel 'merge' branch that is used (say weekly) to do
> trial merges and will essentially record the conflict resolutions while
> they are fresh in folks memories. That branch is distinct from, either
> of the two main branches, but will act as a filter and a hand rail to
> highlight future difficulties."

An aside that probably would not directly help Eric, but I know the
above workflow helps reasonably well.  The 'pu' branch is rebuilt
not on top of 'next', but is rebuilt with all topics (including
those already in 'next') in flight directly on top of 'master',
which serves as a way to anticipate conflicts that will require
resolution in the future before the topics can enter 'next' branch.
And these resolutions are ...

> Also look at 'rerere'.

... remembered in the rerere database (and even trickier ones that
rerere cannot handle are recorded in the merge-fix commits, but that
is a separate story).  When topics are ready to be merged to 'next'
and to 'master', the correct resolutions are likely to be known and
the result tested in 'pu' and 'next', respectively, for some time
already.

^ permalink raw reply	[relevance 2%]

* Re: Collaborative conflict resolution feature request
  @ 2020-06-17 18:32  2%             ` Curtin, Eric
  0 siblings, 0 replies; 200+ results
From: Curtin, Eric @ 2020-06-17 18:32 UTC (permalink / raw)
  To: Stefan Moch, Philip Oakley
  Cc: Sergey Organov, Christian Couder, git@vger.kernel.org,
	Geary, Niall, rowlands, scott, Michael Haggerty

Hi Guys,

Yes I think you all understand the conundrum well. Conflict resolution
by definition is a collaborative effort, but git doesn't support it as a,
collaborative effort, only one user can resolve it in git. It will be hard to
change my whole orgs thinking around avoiding conflicts or making
them easier conflicts to solve. There will always be some conflicts.

>  * developers do test merges on temporary branches between their
>    feature branch and the main development – or other feature
>    branches if necessary (maybe create test merges on a regular
>    basis to minimize the new conflicts)
>  * these temporary branches get pushed, but not merged to other
>    branches
>  * the branch manager fetches these branches and uses
>    `rerere-train.sh` to fill the local rerere database with
>    conflict resolutions from the test merges
>  * the temporary branches get deleted
>  * the recorded resolutions get reused when needed (keep in mind
>    rerere's gc config, see gc.rerereResolved and gc.rerereUnresolved)

I certainly want to play around with rere and see if it helps things. I
suspect if I shared a technique like this with the 100 or so developers
on the project this will be deemed too complex though.

A per file solution isn't great either as some files can be large.
Per-conflict (between <<<< >>>> in a plain old text editor) is
reasonable.

What would be most ideal is a:

git merge
fix some conflicts, not others
git push

so someone else can work on it kind of solution....

We don't do plaintext email patches, we do typically merge
things via git cli/protocol or via GitHub Pull Request.

Regards,

Eric Curtin

Software Engineer
Ovens Campus,
Cork,
Ireland

Dell EMC

^ permalink raw reply	[relevance 2%]

* [PATCH] Doc: reference 'seen' instead of 'pu' in meta docs
@ 2020-06-23 10:58  8% Denton Liu
  2020-06-23 15:09  0% ` Johannes Schindelin
  0 siblings, 1 reply; 200+ results
From: Denton Liu @ 2020-06-23 10:58 UTC (permalink / raw)
  To: Git Mailing List; +Cc: Junio C Hamano

As of 2020-06-22, the name of git.git's integration branch has been
renamed from 'pu' to 'seen'.[0] Update git.git-specific documentation to
refer to the new branch name. In particular, update documents that refer
to the workflow and also "how to contribute"-type docs.

There still remains other uses of 'pu' in the docs. In these cases, it
is generally used as an example and there isn't much value in updating
these examples since they aren't git.git specific.

[0]: https://lore.kernel.org/git/xmqqimfid2l1.fsf@gitster.c.googlers.com/

Signed-off-by: Denton Liu <liu.denton@gmail.com>
---
 Documentation/MyFirstContribution.txt |  4 +--
 Documentation/SubmittingPatches       | 10 +++---
 Documentation/giteveryday.txt         | 10 +++---
 Documentation/gitworkflows.txt        | 12 +++----
 Documentation/howto/maintain-git.txt  | 52 +++++++++++++--------------
 5 files changed, 44 insertions(+), 44 deletions(-)

diff --git a/Documentation/MyFirstContribution.txt b/Documentation/MyFirstContribution.txt
index 427274df4d..d85c9b5143 100644
--- a/Documentation/MyFirstContribution.txt
+++ b/Documentation/MyFirstContribution.txt
@@ -1179,8 +1179,8 @@ look at the section below this one for some context.)
 [[after-approval]]
 === After Review Approval
 
-The Git project has four integration branches: `pu`, `next`, `master`, and
-`maint`. Your change will be placed into `pu` fairly early on by the maintainer
+The Git project has four integration branches: `seen`, `next`, `master`, and
+`maint`. Your change will be placed into `seen` fairly early on by the maintainer
 while it is still in the review process; from there, when it is ready for wider
 testing, it will be merged into `next`. Plenty of early testers use `next` and
 may report issues. Eventually, changes in `next` will make it to `master`,
diff --git a/Documentation/SubmittingPatches b/Documentation/SubmittingPatches
index ecf9438cf0..291b61e262 100644
--- a/Documentation/SubmittingPatches
+++ b/Documentation/SubmittingPatches
@@ -19,7 +19,7 @@ change is relevant to.
   base your work on the tip of the topic.
 
 * A new feature should be based on `master` in general. If the new
-  feature depends on a topic that is in `pu`, but not in `master`,
+  feature depends on a topic that is in `seen`, but not in `master`,
   base your work on the tip of that topic.
 
 * Corrections and enhancements to a topic not yet in `master` should
@@ -28,7 +28,7 @@ change is relevant to.
   into the series.
 
 * In the exceptional case that a new feature depends on several topics
-  not in `master`, start working on `next` or `pu` privately and send
+  not in `master`, start working on `next` or `seen` privately and send
   out patches for discussion. Before the final merge, you may have to
   wait until some of the dependent topics graduate to `master`, and
   rebase your work.
@@ -38,7 +38,7 @@ change is relevant to.
   these parts should be based on their trees.
 
 To find the tip of a topic branch, run `git log --first-parent
-master..pu` and look for the merge commit. The second parent of this
+master..seen` and look for the merge commit. The second parent of this
 commit is the tip of the topic branch.
 
 [[separate-commits]]
@@ -424,7 +424,7 @@ help you find out who they are.
   and cooked further and eventually graduates to `master`.
 
 In any time between the (2)-(3) cycle, the maintainer may pick it up
-from the list and queue it to `pu`, in order to make it easier for
+from the list and queue it to `seen`, in order to make it easier for
 people play with it without having to pick up and apply the patch to
 their trees themselves.
 
@@ -435,7 +435,7 @@ their trees themselves.
   master. `git pull --rebase` will automatically skip already-applied
   patches, and will let you know. This works only if you rebase on top
   of the branch in which your patch has been merged (i.e. it will not
-  tell you if your patch is merged in pu if you rebase on top of
+  tell you if your patch is merged in `seen` if you rebase on top of
   master).
 
 * Read the Git mailing list, the maintainer regularly posts messages
diff --git a/Documentation/giteveryday.txt b/Documentation/giteveryday.txt
index 1bd919f92b..faba2ef088 100644
--- a/Documentation/giteveryday.txt
+++ b/Documentation/giteveryday.txt
@@ -278,13 +278,13 @@ $ git am -3 -i -s ./+to-apply <4>
 $ compile/test
 $ git switch -c hold/linus && git am -3 -i -s ./+hold-linus <5>
 $ git switch topic/one && git rebase master <6>
-$ git switch -C pu next <7>
+$ git switch -C seen next <7>
 $ git merge topic/one topic/two && git merge hold/linus <8>
 $ git switch maint
 $ git cherry-pick master~4 <9>
 $ compile/test
 $ git tag -s -m "GIT 0.99.9x" v0.99.9x <10>
-$ git fetch ko && for branch in master maint next pu <11>
+$ git fetch ko && for branch in master maint next seen <11>
     do
 	git show-branch ko/$branch $branch <12>
     done
@@ -294,14 +294,14 @@ $ git push --follow-tags ko <13>
 <1> see what you were in the middle of doing, if anything.
 <2> see which branches haven't been merged into `master` yet.
 Likewise for any other integration branches e.g. `maint`, `next`
-and `pu` (potential updates).
+and `seen`.
 <3> read mails, save ones that are applicable, and save others
 that are not quite ready (other mail readers are available).
 <4> apply them, interactively, with your sign-offs.
 <5> create topic branch as needed and apply, again with sign-offs.
 <6> rebase internal topic branch that has not been merged to the
 master or exposed as a part of a stable branch.
-<7> restart `pu` every time from the next.
+<7> restart `seen` every time from the next.
 <8> and bundle topic branches still cooking.
 <9> backport a critical fix.
 <10> create a signed tag.
@@ -323,7 +323,7 @@ repository at kernel.org, and looks like this:
 	fetch = refs/heads/*:refs/remotes/ko/*
 	push = refs/heads/master
 	push = refs/heads/next
-	push = +refs/heads/pu
+	push = +refs/heads/seen
 	push = refs/heads/maint
 ------------
 
diff --git a/Documentation/gitworkflows.txt b/Documentation/gitworkflows.txt
index abc0dc6bc7..ae38ff3fed 100644
--- a/Documentation/gitworkflows.txt
+++ b/Documentation/gitworkflows.txt
@@ -85,7 +85,7 @@ As a given feature goes from experimental to stable, it also
 
 There is a fourth official branch that is used slightly differently:
 
-* 'pu' (proposed updates) is an integration branch for things that are
+* 'seen' is an integration branch for things that are
   not quite ready for inclusion yet (see "Integration Branches"
   below).
 
@@ -93,7 +93,7 @@ Each of the four branches is usually a direct descendant of the one
 above it.
 
 Conceptually, the feature enters at an unstable branch (usually 'next'
-or 'pu'), and "graduates" to 'master' for the next release once it is
+or 'seen'), and "graduates" to 'master' for the next release once it is
 considered stable enough.
 
 
@@ -207,7 +207,7 @@ If you make it (very) clear that this branch is going to be deleted
 right after the testing, you can even publish this branch, for example
 to give the testers a chance to work with it, or other developers a
 chance to see if their in-progress work will be compatible.  `git.git`
-has such an official throw-away integration branch called 'pu'.
+has such an official throw-away integration branch called 'seen'.
 
 
 Branch management for a release
@@ -291,7 +291,7 @@ This will not happen if the content of the branches was verified as
 described in the previous section.
 
 
-Branch management for next and pu after a feature release
+Branch management for next and seen after a feature release
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 
 After a feature release, the integration branch 'next' may optionally be
@@ -319,8 +319,8 @@ so.
 If you do this, then you should make a public announcement indicating
 that 'next' was rewound and rebuilt.
 
-The same rewind and rebuild process may be followed for 'pu'. A public
-announcement is not necessary since 'pu' is a throw-away branch, as
+The same rewind and rebuild process may be followed for 'seen'. A public
+announcement is not necessary since 'seen' is a throw-away branch, as
 described above.
 
 
diff --git a/Documentation/howto/maintain-git.txt b/Documentation/howto/maintain-git.txt
index 73be8b49f8..a67130debb 100644
--- a/Documentation/howto/maintain-git.txt
+++ b/Documentation/howto/maintain-git.txt
@@ -66,7 +66,7 @@ this mailing list after each feature release is made.
    demonstrated to be regression free.  New changes are tested
    in 'next' before merged to 'master'.
 
- - 'pu' branch is used to publish other proposed changes that do
+ - 'seen' branch is used to publish other proposed changes that do
    not yet pass the criteria set for 'next'.
 
  - The tips of 'master' and 'maint' branches will not be rewound to
@@ -76,7 +76,7 @@ this mailing list after each feature release is made.
    of the cycle.
 
  - Usually 'master' contains all of 'maint' and 'next' contains all
-   of 'master'.  'pu' contains all the topics merged to 'next', but
+   of 'master'.  'seen' contains all the topics merged to 'next', but
    is rebuilt directly on 'master'.
 
  - The tip of 'master' is meant to be more stable than any
@@ -229,12 +229,12 @@ by doing the following:
    series?)
 
  - Prepare 'jch' branch, which is used to represent somewhere
-   between 'master' and 'pu' and often is slightly ahead of 'next'.
+   between 'master' and 'seen' and often is slightly ahead of 'next'.
 
-     $ Meta/Reintegrate master..pu >Meta/redo-jch.sh
+     $ Meta/Reintegrate master..seen >Meta/redo-jch.sh
 
    The result is a script that lists topics to be merged in order to
-   rebuild 'pu' as the input to Meta/Reintegrate script.  Remove
+   rebuild 'seen' as the input to Meta/Reintegrate script.  Remove
    later topics that should not be in 'jch' yet.  Add a line that
    consists of '### match next' before the name of the first topic
    in the output that should be in 'jch' but not in 'next' yet.
@@ -291,29 +291,29 @@ by doing the following:
    merged to 'master'.  This may lose '### match next' marker;
    add it again to the appropriate place when it happens.
 
- - Rebuild 'pu'.
+ - Rebuild 'seen'.
 
-     $ Meta/Reintegrate master..pu >Meta/redo-pu.sh
+     $ Meta/Reintegrate master..seen >Meta/redo-seen.sh
 
-   Edit the result by adding new topics that are not still in 'pu'
+   Edit the result by adding new topics that are not still in 'seen'
    in the script.  Then
 
-     $ git checkout -B pu jch
-     $ sh Meta/redo-pu.sh
+     $ git checkout -B seen jch
+     $ sh Meta/redo-seen.sh
 
-   When all is well, clean up the redo-pu.sh script with
+   When all is well, clean up the redo-seen.sh script with
 
-     $ sh Meta/redo-pu.sh -u
+     $ sh Meta/redo-seen.sh -u
 
    Double check by running
 
-     $ git branch --no-merged pu
+     $ git branch --no-merged seen
 
    to see there is no unexpected leftover topics.
 
    At this point, build-test the result for semantic conflicts, and
    if there are, prepare an appropriate merge-fix first (see
-   appendix), and rebuild the 'pu' branch from scratch, starting at
+   appendix), and rebuild the 'seen' branch from scratch, starting at
    the tip of 'jch'.
 
  - Update "What's cooking" message to review the updates to
@@ -323,14 +323,14 @@ by doing the following:
 
      $ Meta/cook
 
-   This script inspects the history between master..pu, finds tips
+   This script inspects the history between master..seen, finds tips
    of topic branches, compares what it found with the current
    contents in Meta/whats-cooking.txt, and updates that file.
-   Topics not listed in the file but are found in master..pu are
+   Topics not listed in the file but are found in master..seen are
    added to the "New topics" section, topics listed in the file that
-   are no longer found in master..pu are moved to the "Graduated to
+   are no longer found in master..seen are moved to the "Graduated to
    master" section, and topics whose commits changed their states
-   (e.g. used to be only in 'pu', now merged to 'next') are updated
+   (e.g. used to be only in 'seen', now merged to 'next') are updated
    with change markers "<<" and ">>".
 
    Look for lines enclosed in "<<" and ">>"; they hold contents from
@@ -360,7 +360,7 @@ Observations
 Some observations to be made.
 
  * Each topic is tested individually, and also together with other
-   topics cooking first in 'pu', then in 'jch' and then in 'next'.
+   topics cooking first in 'seen', then in 'jch' and then in 'next'.
    Until it matures, no part of it is merged to 'master'.
 
  * A topic already in 'next' can get fixes while still in
@@ -411,7 +411,7 @@ new use of the variable under its old name. When these two topics
 are merged together, the reference to the variable newly added by
 the latter topic will still use the old name in the result.
 
-The Meta/Reintegrate script that is used by redo-jch and redo-pu
+The Meta/Reintegrate script that is used by redo-jch and redo-seen
 scripts implements a crude but usable way to work this issue around.
 When the script merges branch $X, it checks if "refs/merge-fix/$X"
 exists, and if so, the effect of it is squashed into the result of
@@ -431,14 +431,14 @@ commit that can be squashed into a result of mechanical merge to
 correct semantic conflicts.
 
 After finding that the result of merging branch "ai/topic" to an
-integration branch had such a semantic conflict, say pu~4, check the
+integration branch had such a semantic conflict, say seen~4, check the
 problematic merge out on a detached HEAD, edit the working tree to
 fix the semantic conflict, and make a separate commit to record the
 fix-up:
 
-     $ git checkout pu~4
+     $ git checkout seen~4
      $ git show -s --pretty=%s ;# double check
-     Merge branch 'ai/topic' to pu
+     Merge branch 'ai/topic' to seen
      $ edit
      $ git commit -m 'merge-fix/ai/topic' -a
 
@@ -450,9 +450,9 @@ result:
 Then double check the result by asking Meta/Reintegrate to redo the
 merge:
 
-     $ git checkout pu~5 ;# the parent of the problem merge
+     $ git checkout seen~5 ;# the parent of the problem merge
      $ echo ai/topic | Meta/Reintegrate
-     $ git diff pu~4
+     $ git diff seen~4
 
 This time, because you prepared refs/merge-fix/ai/topic, the
 resulting merge should have been tweaked to include the fix for the
@@ -464,7 +464,7 @@ branch needs this merge-fix is because another branch merged earlier
 to the integration branch changed the underlying assumption ai/topic
 branch made (e.g. ai/topic branch added a site to refer to a
 variable, while the other branch renamed that variable and adjusted
-existing use sites), and if you changed redo-jch (or redo-pu) script
+existing use sites), and if you changed redo-jch (or redo-seen) script
 to merge ai/topic branch before the other branch, then the above
 merge-fix should not be applied while merging ai/topic, but should
 instead be applied while merging the other branch.  You would need
-- 
2.27.0.307.g7979e895e7


^ permalink raw reply related	[relevance 8%]

* [PATCH 2/3] docs: adjust the technical overview for the rename `pu` -> `seen`
  @ 2020-06-23 15:04  8% ` Johannes Schindelin via GitGitGadget
    1 sibling, 0 replies; 200+ results
From: Johannes Schindelin via GitGitGadget @ 2020-06-23 15:04 UTC (permalink / raw)
  To: git; +Cc: Johannes Schindelin, Johannes Schindelin

From: Johannes Schindelin <johannes.schindelin@gmx.de>

This patch tries to rewrite history a bit: the mail contents that have
been added to Git's source code are actually fixed, we cannot change
them in hindsight.

But as the `pu` branch _was_ renamed, and as the documents were added to
Git's source code not so much as historical record, but to describe the
status quo, let's pretend that we have a time machine and adjust the
provided information accordingly.

Where appropriate, quotes were added for readability.

Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
---
 Documentation/howto/maintain-git.txt          | 52 +++++++++----------
 .../howto/rebase-from-internal-branch.txt     | 32 ++++++------
 Documentation/howto/revert-branch-rebase.txt  | 32 ++++++------
 Documentation/howto/update-hook-example.txt   |  6 +--
 4 files changed, 61 insertions(+), 61 deletions(-)

diff --git a/Documentation/howto/maintain-git.txt b/Documentation/howto/maintain-git.txt
index 73be8b49f84..a67130debb6 100644
--- a/Documentation/howto/maintain-git.txt
+++ b/Documentation/howto/maintain-git.txt
@@ -66,7 +66,7 @@ this mailing list after each feature release is made.
    demonstrated to be regression free.  New changes are tested
    in 'next' before merged to 'master'.
 
- - 'pu' branch is used to publish other proposed changes that do
+ - 'seen' branch is used to publish other proposed changes that do
    not yet pass the criteria set for 'next'.
 
  - The tips of 'master' and 'maint' branches will not be rewound to
@@ -76,7 +76,7 @@ this mailing list after each feature release is made.
    of the cycle.
 
  - Usually 'master' contains all of 'maint' and 'next' contains all
-   of 'master'.  'pu' contains all the topics merged to 'next', but
+   of 'master'.  'seen' contains all the topics merged to 'next', but
    is rebuilt directly on 'master'.
 
  - The tip of 'master' is meant to be more stable than any
@@ -229,12 +229,12 @@ by doing the following:
    series?)
 
  - Prepare 'jch' branch, which is used to represent somewhere
-   between 'master' and 'pu' and often is slightly ahead of 'next'.
+   between 'master' and 'seen' and often is slightly ahead of 'next'.
 
-     $ Meta/Reintegrate master..pu >Meta/redo-jch.sh
+     $ Meta/Reintegrate master..seen >Meta/redo-jch.sh
 
    The result is a script that lists topics to be merged in order to
-   rebuild 'pu' as the input to Meta/Reintegrate script.  Remove
+   rebuild 'seen' as the input to Meta/Reintegrate script.  Remove
    later topics that should not be in 'jch' yet.  Add a line that
    consists of '### match next' before the name of the first topic
    in the output that should be in 'jch' but not in 'next' yet.
@@ -291,29 +291,29 @@ by doing the following:
    merged to 'master'.  This may lose '### match next' marker;
    add it again to the appropriate place when it happens.
 
- - Rebuild 'pu'.
+ - Rebuild 'seen'.
 
-     $ Meta/Reintegrate master..pu >Meta/redo-pu.sh
+     $ Meta/Reintegrate master..seen >Meta/redo-seen.sh
 
-   Edit the result by adding new topics that are not still in 'pu'
+   Edit the result by adding new topics that are not still in 'seen'
    in the script.  Then
 
-     $ git checkout -B pu jch
-     $ sh Meta/redo-pu.sh
+     $ git checkout -B seen jch
+     $ sh Meta/redo-seen.sh
 
-   When all is well, clean up the redo-pu.sh script with
+   When all is well, clean up the redo-seen.sh script with
 
-     $ sh Meta/redo-pu.sh -u
+     $ sh Meta/redo-seen.sh -u
 
    Double check by running
 
-     $ git branch --no-merged pu
+     $ git branch --no-merged seen
 
    to see there is no unexpected leftover topics.
 
    At this point, build-test the result for semantic conflicts, and
    if there are, prepare an appropriate merge-fix first (see
-   appendix), and rebuild the 'pu' branch from scratch, starting at
+   appendix), and rebuild the 'seen' branch from scratch, starting at
    the tip of 'jch'.
 
  - Update "What's cooking" message to review the updates to
@@ -323,14 +323,14 @@ by doing the following:
 
      $ Meta/cook
 
-   This script inspects the history between master..pu, finds tips
+   This script inspects the history between master..seen, finds tips
    of topic branches, compares what it found with the current
    contents in Meta/whats-cooking.txt, and updates that file.
-   Topics not listed in the file but are found in master..pu are
+   Topics not listed in the file but are found in master..seen are
    added to the "New topics" section, topics listed in the file that
-   are no longer found in master..pu are moved to the "Graduated to
+   are no longer found in master..seen are moved to the "Graduated to
    master" section, and topics whose commits changed their states
-   (e.g. used to be only in 'pu', now merged to 'next') are updated
+   (e.g. used to be only in 'seen', now merged to 'next') are updated
    with change markers "<<" and ">>".
 
    Look for lines enclosed in "<<" and ">>"; they hold contents from
@@ -360,7 +360,7 @@ Observations
 Some observations to be made.
 
  * Each topic is tested individually, and also together with other
-   topics cooking first in 'pu', then in 'jch' and then in 'next'.
+   topics cooking first in 'seen', then in 'jch' and then in 'next'.
    Until it matures, no part of it is merged to 'master'.
 
  * A topic already in 'next' can get fixes while still in
@@ -411,7 +411,7 @@ new use of the variable under its old name. When these two topics
 are merged together, the reference to the variable newly added by
 the latter topic will still use the old name in the result.
 
-The Meta/Reintegrate script that is used by redo-jch and redo-pu
+The Meta/Reintegrate script that is used by redo-jch and redo-seen
 scripts implements a crude but usable way to work this issue around.
 When the script merges branch $X, it checks if "refs/merge-fix/$X"
 exists, and if so, the effect of it is squashed into the result of
@@ -431,14 +431,14 @@ commit that can be squashed into a result of mechanical merge to
 correct semantic conflicts.
 
 After finding that the result of merging branch "ai/topic" to an
-integration branch had such a semantic conflict, say pu~4, check the
+integration branch had such a semantic conflict, say seen~4, check the
 problematic merge out on a detached HEAD, edit the working tree to
 fix the semantic conflict, and make a separate commit to record the
 fix-up:
 
-     $ git checkout pu~4
+     $ git checkout seen~4
      $ git show -s --pretty=%s ;# double check
-     Merge branch 'ai/topic' to pu
+     Merge branch 'ai/topic' to seen
      $ edit
      $ git commit -m 'merge-fix/ai/topic' -a
 
@@ -450,9 +450,9 @@ result:
 Then double check the result by asking Meta/Reintegrate to redo the
 merge:
 
-     $ git checkout pu~5 ;# the parent of the problem merge
+     $ git checkout seen~5 ;# the parent of the problem merge
      $ echo ai/topic | Meta/Reintegrate
-     $ git diff pu~4
+     $ git diff seen~4
 
 This time, because you prepared refs/merge-fix/ai/topic, the
 resulting merge should have been tweaked to include the fix for the
@@ -464,7 +464,7 @@ branch needs this merge-fix is because another branch merged earlier
 to the integration branch changed the underlying assumption ai/topic
 branch made (e.g. ai/topic branch added a site to refer to a
 variable, while the other branch renamed that variable and adjusted
-existing use sites), and if you changed redo-jch (or redo-pu) script
+existing use sites), and if you changed redo-jch (or redo-seen) script
 to merge ai/topic branch before the other branch, then the above
 merge-fix should not be applied while merging ai/topic, but should
 instead be applied while merging the other branch.  You would need
diff --git a/Documentation/howto/rebase-from-internal-branch.txt b/Documentation/howto/rebase-from-internal-branch.txt
index 02cb5f758d6..ece51ddddce 100644
--- a/Documentation/howto/rebase-from-internal-branch.txt
+++ b/Documentation/howto/rebase-from-internal-branch.txt
@@ -4,7 +4,7 @@ Cc:	Petr Baudis <pasky@suse.cz>, Linus Torvalds <torvalds@osdl.org>
 Subject: Re: sending changesets from the middle of a git tree
 Date:	Sun, 14 Aug 2005 18:37:39 -0700
 Abstract: In this article, JC talks about how he rebases the
- public "pu" branch using the core Git tools when he updates
+ public "seen" branch using the core Git tools when he updates
  the "master" branch, and how "rebase" works.  Also discussed
  is how this applies to individual developers who sends patches
  upstream.
@@ -20,8 +20,8 @@ Petr Baudis <pasky@suse.cz> writes:
 > where Junio C Hamano <junkio@cox.net> told me that...
 >> Linus Torvalds <torvalds@osdl.org> writes:
 >>
->> > Junio, maybe you want to talk about how you move patches from your "pu"
->> > branch to the real branches.
+>> > Junio, maybe you want to talk about how you move patches from your
+>> > "seen" branch to the real branches.
 >>
 > Actually, wouldn't this be also precisely for what StGIT is intended to?
 --------------------------------------
@@ -33,12 +33,12 @@ the kind of task StGIT is designed to do.
 I just have done a simpler one, this time using only the core
 Git tools.
 
-I had a handful of commits that were ahead of master in pu, and I
+I had a handful of commits that were ahead of master in 'seen', and I
 wanted to add some documentation bypassing my usual habit of
-placing new things in pu first.  At the beginning, the commit
+placing new things in 'seen' first.  At the beginning, the commit
 ancestry graph looked like this:
 
-                             *"pu" head
+                             *"seen" head
     master --> #1 --> #2 --> #3
 
 So I started from master, made a bunch of edits, and committed:
@@ -50,7 +50,7 @@ So I started from master, made a bunch of edits, and committed:
 
 After the commit, the ancestry graph would look like this:
 
-                              *"pu" head
+                              *"seen" head
     master^ --> #1 --> #2 --> #3
           \
             \---> master
@@ -58,31 +58,31 @@ After the commit, the ancestry graph would look like this:
 The old master is now master^ (the first parent of the master).
 The new master commit holds my documentation updates.
 
-Now I have to deal with "pu" branch.
+Now I have to deal with "seen" branch.
 
 This is the kind of situation I used to have all the time when
 Linus was the maintainer and I was a contributor, when you look
-at "master" branch being the "maintainer" branch, and "pu"
+at "master" branch being the "maintainer" branch, and "seen"
 branch being the "contributor" branch.  Your work started at the
 tip of the "maintainer" branch some time ago, you made a lot of
 progress in the meantime, and now the maintainer branch has some
 other commits you do not have yet.  And "git rebase" was written
 with the explicit purpose of helping to maintain branches like
-"pu".  You _could_ merge master to pu and keep going, but if you
+"seen".  You _could_ merge master to 'seen' and keep going, but if you
 eventually want to cherrypick and merge some but not necessarily
 all changes back to the master branch, it often makes later
 operations for _you_ easier if you rebase (i.e. carry forward
-your changes) "pu" rather than merge.  So I ran "git rebase":
+your changes) "seen" rather than merge.  So I ran "git rebase":
 
-    $ git checkout pu
-    $ git rebase master pu
+    $ git checkout seen
+    $ git rebase master seen
 
 What this does is to pick all the commits since the current
-branch (note that I now am on "pu" branch) forked from the
+branch (note that I now am on "seen" branch) forked from the
 master branch, and forward port these changes.
 
     master^ --> #1 --> #2 --> #3
-          \                                  *"pu" head
+          \                                  *"seen" head
             \---> master --> #1' --> #2' --> #3'
 
 The diff between master^ and #1 is applied to master and
@@ -92,7 +92,7 @@ commits are made similarly out of #2 and #3 commits.
 
 Old #3 is not recorded in any of the .git/refs/heads/ file
 anymore, so after doing this you will have dangling commit if
-you ran fsck-cache, which is normal.  After testing "pu", you
+you ran fsck-cache, which is normal.  After testing "seen", you
 can run "git prune" to get rid of those original three commits.
 
 While I am talking about "git rebase", I should talk about how
diff --git a/Documentation/howto/revert-branch-rebase.txt b/Documentation/howto/revert-branch-rebase.txt
index 149508e13bd..a3e5595a569 100644
--- a/Documentation/howto/revert-branch-rebase.txt
+++ b/Documentation/howto/revert-branch-rebase.txt
@@ -15,7 +15,7 @@ One of the changes I pulled into the 'master' branch turns out to
 break building Git with GCC 2.95.  While they were well-intentioned
 portability fixes, keeping things working with gcc-2.95 was also
 important.  Here is what I did to revert the change in the 'master'
-branch and to adjust the 'pu' branch, using core Git tools and
+branch and to adjust the 'seen' branch, using core Git tools and
 barebone Porcelain.
 
 First, prepare a throw-away branch in case I screw things up.
@@ -104,11 +104,11 @@ $ git diff master..revert-c99
 
 says nothing.
 
-Then we rebase the 'pu' branch as usual.
+Then we rebase the 'seen' branch as usual.
 
 ------------------------------------------------
-$ git checkout pu
-$ git tag pu-anchor pu
+$ git checkout seen
+$ git tag seen-anchor seen
 $ git rebase master
 * Applying: Redo "revert" using three-way merge machinery.
 First trying simple merge strategy to cherry-pick.
@@ -127,11 +127,11 @@ First trying simple merge strategy to cherry-pick.
 First trying simple merge strategy to cherry-pick.
 ------------------------------------------------
 
-The temporary tag 'pu-anchor' is me just being careful, in case 'git
+The temporary tag 'seen-anchor' is me just being careful, in case 'git
 rebase' screws up.  After this, I can do these for sanity check:
 
 ------------------------------------------------
-$ git diff pu-anchor..pu ;# make sure we got the master fix.
+$ git diff seen-anchor..seen ;# make sure we got the master fix.
 $ make CC=gcc-2.95 clean test ;# make sure it fixed the breakage.
 $ make clean test ;# make sure it did not cause other breakage.
 ------------------------------------------------
@@ -140,7 +140,7 @@ Everything is in the good order.  I do not need the temporary branch
 or tag anymore, so remove them:
 
 ------------------------------------------------
-$ rm -f .git/refs/tags/pu-anchor
+$ rm -f .git/refs/tags/seen-anchor
 $ git branch -d revert-c99
 ------------------------------------------------
 
@@ -168,18 +168,18 @@ Committed merge 7fb9b7262a1d1e0a47bbfdcbbcf50ce0635d3f8f
 And the final repository status looks like this:
 
 ------------------------------------------------
-$ git show-branch --more=1 master pu rc
+$ git show-branch --more=1 master seen rc
 ! [master] Revert "Replace zero-length array decls with []."
- ! [pu] git-repack: Add option to repack all objects.
+ ! [seen] git-repack: Add option to repack all objects.
   * [rc] Merge refs/heads/master from .
 ---
- +  [pu] git-repack: Add option to repack all objects.
- +  [pu~1] More documentation updates.
- +  [pu~2] Show commits in topo order and name all commits.
- +  [pu~3] mailinfo and applymbox updates
- +  [pu~4] Document "git cherry-pick" and "git revert"
- +  [pu~5] Remove git-apply-patch-script.
- +  [pu~6] Redo "revert" using three-way merge machinery.
+ +  [seen] git-repack: Add option to repack all objects.
+ +  [seen~1] More documentation updates.
+ +  [seen~2] Show commits in topo order and name all commits.
+ +  [seen~3] mailinfo and applymbox updates
+ +  [seen~4] Document "git cherry-pick" and "git revert"
+ +  [seen~5] Remove git-apply-patch-script.
+ +  [seen~6] Redo "revert" using three-way merge machinery.
   - [rc] Merge refs/heads/master from .
 ++* [master] Revert "Replace zero-length array decls with []."
   - [rc~1] Merge refs/heads/master from .
diff --git a/Documentation/howto/update-hook-example.txt b/Documentation/howto/update-hook-example.txt
index 89821ec74fe..151ee84cebc 100644
--- a/Documentation/howto/update-hook-example.txt
+++ b/Documentation/howto/update-hook-example.txt
@@ -179,7 +179,7 @@ allowed-groups, to describe which heads can be pushed into by
 whom.  The format of each file would look like this:
 
     refs/heads/master   junio
-    +refs/heads/pu      junio
+    +refs/heads/seen    junio
     refs/heads/cogito$  pasky
     refs/heads/bw/.*    linus
     refs/heads/tmp/.*   .*
@@ -187,6 +187,6 @@ whom.  The format of each file would look like this:
 
 With this, Linus can push or create "bw/penguin" or "bw/zebra"
 or "bw/panda" branches, Pasky can do only "cogito", and JC can
-do master and pu branches and make versioned tags.  And anybody
-can do tmp/blah branches. The '+' sign at the pu record means
+do master and "seen" branches and make versioned tags.  And anybody
+can do tmp/blah branches. The '+' sign at the "seen" record means
 that JC can make non-fast-forward pushes on it.
-- 
gitgitgadget


^ permalink raw reply related	[relevance 8%]

* Re: [PATCH] Doc: reference 'seen' instead of 'pu' in meta docs
  2020-06-23 10:58  8% [PATCH] Doc: reference 'seen' instead of 'pu' in meta docs Denton Liu
@ 2020-06-23 15:09  0% ` Johannes Schindelin
  0 siblings, 0 replies; 200+ results
From: Johannes Schindelin @ 2020-06-23 15:09 UTC (permalink / raw)
  To: Denton Liu; +Cc: Git Mailing List, Junio C Hamano

Hi Denton,

On Tue, 23 Jun 2020, Denton Liu wrote:

> As of 2020-06-22, the name of git.git's integration branch has been
> renamed from 'pu' to 'seen'.[0] Update git.git-specific documentation to
> refer to the new branch name. In particular, update documents that refer
> to the workflow and also "how to contribute"-type docs.
>
> There still remains other uses of 'pu' in the docs. In these cases, it
> is generally used as an example and there isn't much value in updating
> these examples since they aren't git.git specific.
>
> [0]: https://lore.kernel.org/git/xmqqimfid2l1.fsf@gitster.c.googlers.com/

Whoops, I only saw this now. In the meantime I submitted what I hope is a
more complete version of this patch.

Sorry for duplicating your work,
Dscho

>
> Signed-off-by: Denton Liu <liu.denton@gmail.com>
> ---
>  Documentation/MyFirstContribution.txt |  4 +--
>  Documentation/SubmittingPatches       | 10 +++---
>  Documentation/giteveryday.txt         | 10 +++---
>  Documentation/gitworkflows.txt        | 12 +++----
>  Documentation/howto/maintain-git.txt  | 52 +++++++++++++--------------
>  5 files changed, 44 insertions(+), 44 deletions(-)
>
> diff --git a/Documentation/MyFirstContribution.txt b/Documentation/MyFirstContribution.txt
> index 427274df4d..d85c9b5143 100644
> --- a/Documentation/MyFirstContribution.txt
> +++ b/Documentation/MyFirstContribution.txt
> @@ -1179,8 +1179,8 @@ look at the section below this one for some context.)
>  [[after-approval]]
>  === After Review Approval
>
> -The Git project has four integration branches: `pu`, `next`, `master`, and
> -`maint`. Your change will be placed into `pu` fairly early on by the maintainer
> +The Git project has four integration branches: `seen`, `next`, `master`, and
> +`maint`. Your change will be placed into `seen` fairly early on by the maintainer
>  while it is still in the review process; from there, when it is ready for wider
>  testing, it will be merged into `next`. Plenty of early testers use `next` and
>  may report issues. Eventually, changes in `next` will make it to `master`,
> diff --git a/Documentation/SubmittingPatches b/Documentation/SubmittingPatches
> index ecf9438cf0..291b61e262 100644
> --- a/Documentation/SubmittingPatches
> +++ b/Documentation/SubmittingPatches
> @@ -19,7 +19,7 @@ change is relevant to.
>    base your work on the tip of the topic.
>
>  * A new feature should be based on `master` in general. If the new
> -  feature depends on a topic that is in `pu`, but not in `master`,
> +  feature depends on a topic that is in `seen`, but not in `master`,
>    base your work on the tip of that topic.
>
>  * Corrections and enhancements to a topic not yet in `master` should
> @@ -28,7 +28,7 @@ change is relevant to.
>    into the series.
>
>  * In the exceptional case that a new feature depends on several topics
> -  not in `master`, start working on `next` or `pu` privately and send
> +  not in `master`, start working on `next` or `seen` privately and send
>    out patches for discussion. Before the final merge, you may have to
>    wait until some of the dependent topics graduate to `master`, and
>    rebase your work.
> @@ -38,7 +38,7 @@ change is relevant to.
>    these parts should be based on their trees.
>
>  To find the tip of a topic branch, run `git log --first-parent
> -master..pu` and look for the merge commit. The second parent of this
> +master..seen` and look for the merge commit. The second parent of this
>  commit is the tip of the topic branch.
>
>  [[separate-commits]]
> @@ -424,7 +424,7 @@ help you find out who they are.
>    and cooked further and eventually graduates to `master`.
>
>  In any time between the (2)-(3) cycle, the maintainer may pick it up
> -from the list and queue it to `pu`, in order to make it easier for
> +from the list and queue it to `seen`, in order to make it easier for
>  people play with it without having to pick up and apply the patch to
>  their trees themselves.
>
> @@ -435,7 +435,7 @@ their trees themselves.
>    master. `git pull --rebase` will automatically skip already-applied
>    patches, and will let you know. This works only if you rebase on top
>    of the branch in which your patch has been merged (i.e. it will not
> -  tell you if your patch is merged in pu if you rebase on top of
> +  tell you if your patch is merged in `seen` if you rebase on top of
>    master).
>
>  * Read the Git mailing list, the maintainer regularly posts messages
> diff --git a/Documentation/giteveryday.txt b/Documentation/giteveryday.txt
> index 1bd919f92b..faba2ef088 100644
> --- a/Documentation/giteveryday.txt
> +++ b/Documentation/giteveryday.txt
> @@ -278,13 +278,13 @@ $ git am -3 -i -s ./+to-apply <4>
>  $ compile/test
>  $ git switch -c hold/linus && git am -3 -i -s ./+hold-linus <5>
>  $ git switch topic/one && git rebase master <6>
> -$ git switch -C pu next <7>
> +$ git switch -C seen next <7>
>  $ git merge topic/one topic/two && git merge hold/linus <8>
>  $ git switch maint
>  $ git cherry-pick master~4 <9>
>  $ compile/test
>  $ git tag -s -m "GIT 0.99.9x" v0.99.9x <10>
> -$ git fetch ko && for branch in master maint next pu <11>
> +$ git fetch ko && for branch in master maint next seen <11>
>      do
>  	git show-branch ko/$branch $branch <12>
>      done
> @@ -294,14 +294,14 @@ $ git push --follow-tags ko <13>
>  <1> see what you were in the middle of doing, if anything.
>  <2> see which branches haven't been merged into `master` yet.
>  Likewise for any other integration branches e.g. `maint`, `next`
> -and `pu` (potential updates).
> +and `seen`.
>  <3> read mails, save ones that are applicable, and save others
>  that are not quite ready (other mail readers are available).
>  <4> apply them, interactively, with your sign-offs.
>  <5> create topic branch as needed and apply, again with sign-offs.
>  <6> rebase internal topic branch that has not been merged to the
>  master or exposed as a part of a stable branch.
> -<7> restart `pu` every time from the next.
> +<7> restart `seen` every time from the next.
>  <8> and bundle topic branches still cooking.
>  <9> backport a critical fix.
>  <10> create a signed tag.
> @@ -323,7 +323,7 @@ repository at kernel.org, and looks like this:
>  	fetch = refs/heads/*:refs/remotes/ko/*
>  	push = refs/heads/master
>  	push = refs/heads/next
> -	push = +refs/heads/pu
> +	push = +refs/heads/seen
>  	push = refs/heads/maint
>  ------------
>
> diff --git a/Documentation/gitworkflows.txt b/Documentation/gitworkflows.txt
> index abc0dc6bc7..ae38ff3fed 100644
> --- a/Documentation/gitworkflows.txt
> +++ b/Documentation/gitworkflows.txt
> @@ -85,7 +85,7 @@ As a given feature goes from experimental to stable, it also
>
>  There is a fourth official branch that is used slightly differently:
>
> -* 'pu' (proposed updates) is an integration branch for things that are
> +* 'seen' is an integration branch for things that are
>    not quite ready for inclusion yet (see "Integration Branches"
>    below).
>
> @@ -93,7 +93,7 @@ Each of the four branches is usually a direct descendant of the one
>  above it.
>
>  Conceptually, the feature enters at an unstable branch (usually 'next'
> -or 'pu'), and "graduates" to 'master' for the next release once it is
> +or 'seen'), and "graduates" to 'master' for the next release once it is
>  considered stable enough.
>
>
> @@ -207,7 +207,7 @@ If you make it (very) clear that this branch is going to be deleted
>  right after the testing, you can even publish this branch, for example
>  to give the testers a chance to work with it, or other developers a
>  chance to see if their in-progress work will be compatible.  `git.git`
> -has such an official throw-away integration branch called 'pu'.
> +has such an official throw-away integration branch called 'seen'.
>
>
>  Branch management for a release
> @@ -291,7 +291,7 @@ This will not happen if the content of the branches was verified as
>  described in the previous section.
>
>
> -Branch management for next and pu after a feature release
> +Branch management for next and seen after a feature release
>  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>
>  After a feature release, the integration branch 'next' may optionally be
> @@ -319,8 +319,8 @@ so.
>  If you do this, then you should make a public announcement indicating
>  that 'next' was rewound and rebuilt.
>
> -The same rewind and rebuild process may be followed for 'pu'. A public
> -announcement is not necessary since 'pu' is a throw-away branch, as
> +The same rewind and rebuild process may be followed for 'seen'. A public
> +announcement is not necessary since 'seen' is a throw-away branch, as
>  described above.
>
>
> diff --git a/Documentation/howto/maintain-git.txt b/Documentation/howto/maintain-git.txt
> index 73be8b49f8..a67130debb 100644
> --- a/Documentation/howto/maintain-git.txt
> +++ b/Documentation/howto/maintain-git.txt
> @@ -66,7 +66,7 @@ this mailing list after each feature release is made.
>     demonstrated to be regression free.  New changes are tested
>     in 'next' before merged to 'master'.
>
> - - 'pu' branch is used to publish other proposed changes that do
> + - 'seen' branch is used to publish other proposed changes that do
>     not yet pass the criteria set for 'next'.
>
>   - The tips of 'master' and 'maint' branches will not be rewound to
> @@ -76,7 +76,7 @@ this mailing list after each feature release is made.
>     of the cycle.
>
>   - Usually 'master' contains all of 'maint' and 'next' contains all
> -   of 'master'.  'pu' contains all the topics merged to 'next', but
> +   of 'master'.  'seen' contains all the topics merged to 'next', but
>     is rebuilt directly on 'master'.
>
>   - The tip of 'master' is meant to be more stable than any
> @@ -229,12 +229,12 @@ by doing the following:
>     series?)
>
>   - Prepare 'jch' branch, which is used to represent somewhere
> -   between 'master' and 'pu' and often is slightly ahead of 'next'.
> +   between 'master' and 'seen' and often is slightly ahead of 'next'.
>
> -     $ Meta/Reintegrate master..pu >Meta/redo-jch.sh
> +     $ Meta/Reintegrate master..seen >Meta/redo-jch.sh
>
>     The result is a script that lists topics to be merged in order to
> -   rebuild 'pu' as the input to Meta/Reintegrate script.  Remove
> +   rebuild 'seen' as the input to Meta/Reintegrate script.  Remove
>     later topics that should not be in 'jch' yet.  Add a line that
>     consists of '### match next' before the name of the first topic
>     in the output that should be in 'jch' but not in 'next' yet.
> @@ -291,29 +291,29 @@ by doing the following:
>     merged to 'master'.  This may lose '### match next' marker;
>     add it again to the appropriate place when it happens.
>
> - - Rebuild 'pu'.
> + - Rebuild 'seen'.
>
> -     $ Meta/Reintegrate master..pu >Meta/redo-pu.sh
> +     $ Meta/Reintegrate master..seen >Meta/redo-seen.sh
>
> -   Edit the result by adding new topics that are not still in 'pu'
> +   Edit the result by adding new topics that are not still in 'seen'
>     in the script.  Then
>
> -     $ git checkout -B pu jch
> -     $ sh Meta/redo-pu.sh
> +     $ git checkout -B seen jch
> +     $ sh Meta/redo-seen.sh
>
> -   When all is well, clean up the redo-pu.sh script with
> +   When all is well, clean up the redo-seen.sh script with
>
> -     $ sh Meta/redo-pu.sh -u
> +     $ sh Meta/redo-seen.sh -u
>
>     Double check by running
>
> -     $ git branch --no-merged pu
> +     $ git branch --no-merged seen
>
>     to see there is no unexpected leftover topics.
>
>     At this point, build-test the result for semantic conflicts, and
>     if there are, prepare an appropriate merge-fix first (see
> -   appendix), and rebuild the 'pu' branch from scratch, starting at
> +   appendix), and rebuild the 'seen' branch from scratch, starting at
>     the tip of 'jch'.
>
>   - Update "What's cooking" message to review the updates to
> @@ -323,14 +323,14 @@ by doing the following:
>
>       $ Meta/cook
>
> -   This script inspects the history between master..pu, finds tips
> +   This script inspects the history between master..seen, finds tips
>     of topic branches, compares what it found with the current
>     contents in Meta/whats-cooking.txt, and updates that file.
> -   Topics not listed in the file but are found in master..pu are
> +   Topics not listed in the file but are found in master..seen are
>     added to the "New topics" section, topics listed in the file that
> -   are no longer found in master..pu are moved to the "Graduated to
> +   are no longer found in master..seen are moved to the "Graduated to
>     master" section, and topics whose commits changed their states
> -   (e.g. used to be only in 'pu', now merged to 'next') are updated
> +   (e.g. used to be only in 'seen', now merged to 'next') are updated
>     with change markers "<<" and ">>".
>
>     Look for lines enclosed in "<<" and ">>"; they hold contents from
> @@ -360,7 +360,7 @@ Observations
>  Some observations to be made.
>
>   * Each topic is tested individually, and also together with other
> -   topics cooking first in 'pu', then in 'jch' and then in 'next'.
> +   topics cooking first in 'seen', then in 'jch' and then in 'next'.
>     Until it matures, no part of it is merged to 'master'.
>
>   * A topic already in 'next' can get fixes while still in
> @@ -411,7 +411,7 @@ new use of the variable under its old name. When these two topics
>  are merged together, the reference to the variable newly added by
>  the latter topic will still use the old name in the result.
>
> -The Meta/Reintegrate script that is used by redo-jch and redo-pu
> +The Meta/Reintegrate script that is used by redo-jch and redo-seen
>  scripts implements a crude but usable way to work this issue around.
>  When the script merges branch $X, it checks if "refs/merge-fix/$X"
>  exists, and if so, the effect of it is squashed into the result of
> @@ -431,14 +431,14 @@ commit that can be squashed into a result of mechanical merge to
>  correct semantic conflicts.
>
>  After finding that the result of merging branch "ai/topic" to an
> -integration branch had such a semantic conflict, say pu~4, check the
> +integration branch had such a semantic conflict, say seen~4, check the
>  problematic merge out on a detached HEAD, edit the working tree to
>  fix the semantic conflict, and make a separate commit to record the
>  fix-up:
>
> -     $ git checkout pu~4
> +     $ git checkout seen~4
>       $ git show -s --pretty=%s ;# double check
> -     Merge branch 'ai/topic' to pu
> +     Merge branch 'ai/topic' to seen
>       $ edit
>       $ git commit -m 'merge-fix/ai/topic' -a
>
> @@ -450,9 +450,9 @@ result:
>  Then double check the result by asking Meta/Reintegrate to redo the
>  merge:
>
> -     $ git checkout pu~5 ;# the parent of the problem merge
> +     $ git checkout seen~5 ;# the parent of the problem merge
>       $ echo ai/topic | Meta/Reintegrate
> -     $ git diff pu~4
> +     $ git diff seen~4
>
>  This time, because you prepared refs/merge-fix/ai/topic, the
>  resulting merge should have been tweaked to include the fix for the
> @@ -464,7 +464,7 @@ branch needs this merge-fix is because another branch merged earlier
>  to the integration branch changed the underlying assumption ai/topic
>  branch made (e.g. ai/topic branch added a site to refer to a
>  variable, while the other branch renamed that variable and adjusted
> -existing use sites), and if you changed redo-jch (or redo-pu) script
> +existing use sites), and if you changed redo-jch (or redo-seen) script
>  to merge ai/topic branch before the other branch, then the above
>  merge-fix should not be applied while merging ai/topic, but should
>  instead be applied while merging the other branch.  You would need
> --
> 2.27.0.307.g7979e895e7
>
>

^ permalink raw reply	[relevance 0%]

* [PATCH v2 2/3] docs: adjust the technical overview for the rename `pu` -> `seen`
  @ 2020-06-24 14:48  8%   ` Johannes Schindelin via GitGitGadget
    1 sibling, 0 replies; 200+ results
From: Johannes Schindelin via GitGitGadget @ 2020-06-24 14:48 UTC (permalink / raw)
  To: git; +Cc: Denton Liu, Johannes Schindelin, Johannes Schindelin

From: Johannes Schindelin <johannes.schindelin@gmx.de>

This patch tries to rewrite history a bit: the mail contents that have
been added to Git's source code are actually fixed, we cannot change
them in hindsight.

But as the `pu` branch _was_ renamed, and as the documents were added to
Git's source code not so much as historical record, but to describe the
status quo, let's pretend that we have a time machine and adjust the
provided information accordingly.

Where appropriate, quotes were added for readability.

Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
---
 Documentation/howto/maintain-git.txt          | 52 +++++++++----------
 .../howto/rebase-from-internal-branch.txt     | 32 ++++++------
 Documentation/howto/revert-branch-rebase.txt  | 32 ++++++------
 Documentation/howto/update-hook-example.txt   |  6 +--
 4 files changed, 61 insertions(+), 61 deletions(-)

diff --git a/Documentation/howto/maintain-git.txt b/Documentation/howto/maintain-git.txt
index 73be8b49f8..a67130debb 100644
--- a/Documentation/howto/maintain-git.txt
+++ b/Documentation/howto/maintain-git.txt
@@ -66,7 +66,7 @@ this mailing list after each feature release is made.
    demonstrated to be regression free.  New changes are tested
    in 'next' before merged to 'master'.
 
- - 'pu' branch is used to publish other proposed changes that do
+ - 'seen' branch is used to publish other proposed changes that do
    not yet pass the criteria set for 'next'.
 
  - The tips of 'master' and 'maint' branches will not be rewound to
@@ -76,7 +76,7 @@ this mailing list after each feature release is made.
    of the cycle.
 
  - Usually 'master' contains all of 'maint' and 'next' contains all
-   of 'master'.  'pu' contains all the topics merged to 'next', but
+   of 'master'.  'seen' contains all the topics merged to 'next', but
    is rebuilt directly on 'master'.
 
  - The tip of 'master' is meant to be more stable than any
@@ -229,12 +229,12 @@ by doing the following:
    series?)
 
  - Prepare 'jch' branch, which is used to represent somewhere
-   between 'master' and 'pu' and often is slightly ahead of 'next'.
+   between 'master' and 'seen' and often is slightly ahead of 'next'.
 
-     $ Meta/Reintegrate master..pu >Meta/redo-jch.sh
+     $ Meta/Reintegrate master..seen >Meta/redo-jch.sh
 
    The result is a script that lists topics to be merged in order to
-   rebuild 'pu' as the input to Meta/Reintegrate script.  Remove
+   rebuild 'seen' as the input to Meta/Reintegrate script.  Remove
    later topics that should not be in 'jch' yet.  Add a line that
    consists of '### match next' before the name of the first topic
    in the output that should be in 'jch' but not in 'next' yet.
@@ -291,29 +291,29 @@ by doing the following:
    merged to 'master'.  This may lose '### match next' marker;
    add it again to the appropriate place when it happens.
 
- - Rebuild 'pu'.
+ - Rebuild 'seen'.
 
-     $ Meta/Reintegrate master..pu >Meta/redo-pu.sh
+     $ Meta/Reintegrate master..seen >Meta/redo-seen.sh
 
-   Edit the result by adding new topics that are not still in 'pu'
+   Edit the result by adding new topics that are not still in 'seen'
    in the script.  Then
 
-     $ git checkout -B pu jch
-     $ sh Meta/redo-pu.sh
+     $ git checkout -B seen jch
+     $ sh Meta/redo-seen.sh
 
-   When all is well, clean up the redo-pu.sh script with
+   When all is well, clean up the redo-seen.sh script with
 
-     $ sh Meta/redo-pu.sh -u
+     $ sh Meta/redo-seen.sh -u
 
    Double check by running
 
-     $ git branch --no-merged pu
+     $ git branch --no-merged seen
 
    to see there is no unexpected leftover topics.
 
    At this point, build-test the result for semantic conflicts, and
    if there are, prepare an appropriate merge-fix first (see
-   appendix), and rebuild the 'pu' branch from scratch, starting at
+   appendix), and rebuild the 'seen' branch from scratch, starting at
    the tip of 'jch'.
 
  - Update "What's cooking" message to review the updates to
@@ -323,14 +323,14 @@ by doing the following:
 
      $ Meta/cook
 
-   This script inspects the history between master..pu, finds tips
+   This script inspects the history between master..seen, finds tips
    of topic branches, compares what it found with the current
    contents in Meta/whats-cooking.txt, and updates that file.
-   Topics not listed in the file but are found in master..pu are
+   Topics not listed in the file but are found in master..seen are
    added to the "New topics" section, topics listed in the file that
-   are no longer found in master..pu are moved to the "Graduated to
+   are no longer found in master..seen are moved to the "Graduated to
    master" section, and topics whose commits changed their states
-   (e.g. used to be only in 'pu', now merged to 'next') are updated
+   (e.g. used to be only in 'seen', now merged to 'next') are updated
    with change markers "<<" and ">>".
 
    Look for lines enclosed in "<<" and ">>"; they hold contents from
@@ -360,7 +360,7 @@ Observations
 Some observations to be made.
 
  * Each topic is tested individually, and also together with other
-   topics cooking first in 'pu', then in 'jch' and then in 'next'.
+   topics cooking first in 'seen', then in 'jch' and then in 'next'.
    Until it matures, no part of it is merged to 'master'.
 
  * A topic already in 'next' can get fixes while still in
@@ -411,7 +411,7 @@ new use of the variable under its old name. When these two topics
 are merged together, the reference to the variable newly added by
 the latter topic will still use the old name in the result.
 
-The Meta/Reintegrate script that is used by redo-jch and redo-pu
+The Meta/Reintegrate script that is used by redo-jch and redo-seen
 scripts implements a crude but usable way to work this issue around.
 When the script merges branch $X, it checks if "refs/merge-fix/$X"
 exists, and if so, the effect of it is squashed into the result of
@@ -431,14 +431,14 @@ commit that can be squashed into a result of mechanical merge to
 correct semantic conflicts.
 
 After finding that the result of merging branch "ai/topic" to an
-integration branch had such a semantic conflict, say pu~4, check the
+integration branch had such a semantic conflict, say seen~4, check the
 problematic merge out on a detached HEAD, edit the working tree to
 fix the semantic conflict, and make a separate commit to record the
 fix-up:
 
-     $ git checkout pu~4
+     $ git checkout seen~4
      $ git show -s --pretty=%s ;# double check
-     Merge branch 'ai/topic' to pu
+     Merge branch 'ai/topic' to seen
      $ edit
      $ git commit -m 'merge-fix/ai/topic' -a
 
@@ -450,9 +450,9 @@ result:
 Then double check the result by asking Meta/Reintegrate to redo the
 merge:
 
-     $ git checkout pu~5 ;# the parent of the problem merge
+     $ git checkout seen~5 ;# the parent of the problem merge
      $ echo ai/topic | Meta/Reintegrate
-     $ git diff pu~4
+     $ git diff seen~4
 
 This time, because you prepared refs/merge-fix/ai/topic, the
 resulting merge should have been tweaked to include the fix for the
@@ -464,7 +464,7 @@ branch needs this merge-fix is because another branch merged earlier
 to the integration branch changed the underlying assumption ai/topic
 branch made (e.g. ai/topic branch added a site to refer to a
 variable, while the other branch renamed that variable and adjusted
-existing use sites), and if you changed redo-jch (or redo-pu) script
+existing use sites), and if you changed redo-jch (or redo-seen) script
 to merge ai/topic branch before the other branch, then the above
 merge-fix should not be applied while merging ai/topic, but should
 instead be applied while merging the other branch.  You would need
diff --git a/Documentation/howto/rebase-from-internal-branch.txt b/Documentation/howto/rebase-from-internal-branch.txt
index 02cb5f758d..ece51ddddc 100644
--- a/Documentation/howto/rebase-from-internal-branch.txt
+++ b/Documentation/howto/rebase-from-internal-branch.txt
@@ -4,7 +4,7 @@ Cc:	Petr Baudis <pasky@suse.cz>, Linus Torvalds <torvalds@osdl.org>
 Subject: Re: sending changesets from the middle of a git tree
 Date:	Sun, 14 Aug 2005 18:37:39 -0700
 Abstract: In this article, JC talks about how he rebases the
- public "pu" branch using the core Git tools when he updates
+ public "seen" branch using the core Git tools when he updates
  the "master" branch, and how "rebase" works.  Also discussed
  is how this applies to individual developers who sends patches
  upstream.
@@ -20,8 +20,8 @@ Petr Baudis <pasky@suse.cz> writes:
 > where Junio C Hamano <junkio@cox.net> told me that...
 >> Linus Torvalds <torvalds@osdl.org> writes:
 >>
->> > Junio, maybe you want to talk about how you move patches from your "pu"
->> > branch to the real branches.
+>> > Junio, maybe you want to talk about how you move patches from your
+>> > "seen" branch to the real branches.
 >>
 > Actually, wouldn't this be also precisely for what StGIT is intended to?
 --------------------------------------
@@ -33,12 +33,12 @@ the kind of task StGIT is designed to do.
 I just have done a simpler one, this time using only the core
 Git tools.
 
-I had a handful of commits that were ahead of master in pu, and I
+I had a handful of commits that were ahead of master in 'seen', and I
 wanted to add some documentation bypassing my usual habit of
-placing new things in pu first.  At the beginning, the commit
+placing new things in 'seen' first.  At the beginning, the commit
 ancestry graph looked like this:
 
-                             *"pu" head
+                             *"seen" head
     master --> #1 --> #2 --> #3
 
 So I started from master, made a bunch of edits, and committed:
@@ -50,7 +50,7 @@ So I started from master, made a bunch of edits, and committed:
 
 After the commit, the ancestry graph would look like this:
 
-                              *"pu" head
+                              *"seen" head
     master^ --> #1 --> #2 --> #3
           \
             \---> master
@@ -58,31 +58,31 @@ After the commit, the ancestry graph would look like this:
 The old master is now master^ (the first parent of the master).
 The new master commit holds my documentation updates.
 
-Now I have to deal with "pu" branch.
+Now I have to deal with "seen" branch.
 
 This is the kind of situation I used to have all the time when
 Linus was the maintainer and I was a contributor, when you look
-at "master" branch being the "maintainer" branch, and "pu"
+at "master" branch being the "maintainer" branch, and "seen"
 branch being the "contributor" branch.  Your work started at the
 tip of the "maintainer" branch some time ago, you made a lot of
 progress in the meantime, and now the maintainer branch has some
 other commits you do not have yet.  And "git rebase" was written
 with the explicit purpose of helping to maintain branches like
-"pu".  You _could_ merge master to pu and keep going, but if you
+"seen".  You _could_ merge master to 'seen' and keep going, but if you
 eventually want to cherrypick and merge some but not necessarily
 all changes back to the master branch, it often makes later
 operations for _you_ easier if you rebase (i.e. carry forward
-your changes) "pu" rather than merge.  So I ran "git rebase":
+your changes) "seen" rather than merge.  So I ran "git rebase":
 
-    $ git checkout pu
-    $ git rebase master pu
+    $ git checkout seen
+    $ git rebase master seen
 
 What this does is to pick all the commits since the current
-branch (note that I now am on "pu" branch) forked from the
+branch (note that I now am on "seen" branch) forked from the
 master branch, and forward port these changes.
 
     master^ --> #1 --> #2 --> #3
-          \                                  *"pu" head
+          \                                  *"seen" head
             \---> master --> #1' --> #2' --> #3'
 
 The diff between master^ and #1 is applied to master and
@@ -92,7 +92,7 @@ commits are made similarly out of #2 and #3 commits.
 
 Old #3 is not recorded in any of the .git/refs/heads/ file
 anymore, so after doing this you will have dangling commit if
-you ran fsck-cache, which is normal.  After testing "pu", you
+you ran fsck-cache, which is normal.  After testing "seen", you
 can run "git prune" to get rid of those original three commits.
 
 While I am talking about "git rebase", I should talk about how
diff --git a/Documentation/howto/revert-branch-rebase.txt b/Documentation/howto/revert-branch-rebase.txt
index 149508e13b..a3e5595a56 100644
--- a/Documentation/howto/revert-branch-rebase.txt
+++ b/Documentation/howto/revert-branch-rebase.txt
@@ -15,7 +15,7 @@ One of the changes I pulled into the 'master' branch turns out to
 break building Git with GCC 2.95.  While they were well-intentioned
 portability fixes, keeping things working with gcc-2.95 was also
 important.  Here is what I did to revert the change in the 'master'
-branch and to adjust the 'pu' branch, using core Git tools and
+branch and to adjust the 'seen' branch, using core Git tools and
 barebone Porcelain.
 
 First, prepare a throw-away branch in case I screw things up.
@@ -104,11 +104,11 @@ $ git diff master..revert-c99
 
 says nothing.
 
-Then we rebase the 'pu' branch as usual.
+Then we rebase the 'seen' branch as usual.
 
 ------------------------------------------------
-$ git checkout pu
-$ git tag pu-anchor pu
+$ git checkout seen
+$ git tag seen-anchor seen
 $ git rebase master
 * Applying: Redo "revert" using three-way merge machinery.
 First trying simple merge strategy to cherry-pick.
@@ -127,11 +127,11 @@ First trying simple merge strategy to cherry-pick.
 First trying simple merge strategy to cherry-pick.
 ------------------------------------------------
 
-The temporary tag 'pu-anchor' is me just being careful, in case 'git
+The temporary tag 'seen-anchor' is me just being careful, in case 'git
 rebase' screws up.  After this, I can do these for sanity check:
 
 ------------------------------------------------
-$ git diff pu-anchor..pu ;# make sure we got the master fix.
+$ git diff seen-anchor..seen ;# make sure we got the master fix.
 $ make CC=gcc-2.95 clean test ;# make sure it fixed the breakage.
 $ make clean test ;# make sure it did not cause other breakage.
 ------------------------------------------------
@@ -140,7 +140,7 @@ Everything is in the good order.  I do not need the temporary branch
 or tag anymore, so remove them:
 
 ------------------------------------------------
-$ rm -f .git/refs/tags/pu-anchor
+$ rm -f .git/refs/tags/seen-anchor
 $ git branch -d revert-c99
 ------------------------------------------------
 
@@ -168,18 +168,18 @@ Committed merge 7fb9b7262a1d1e0a47bbfdcbbcf50ce0635d3f8f
 And the final repository status looks like this:
 
 ------------------------------------------------
-$ git show-branch --more=1 master pu rc
+$ git show-branch --more=1 master seen rc
 ! [master] Revert "Replace zero-length array decls with []."
- ! [pu] git-repack: Add option to repack all objects.
+ ! [seen] git-repack: Add option to repack all objects.
   * [rc] Merge refs/heads/master from .
 ---
- +  [pu] git-repack: Add option to repack all objects.
- +  [pu~1] More documentation updates.
- +  [pu~2] Show commits in topo order and name all commits.
- +  [pu~3] mailinfo and applymbox updates
- +  [pu~4] Document "git cherry-pick" and "git revert"
- +  [pu~5] Remove git-apply-patch-script.
- +  [pu~6] Redo "revert" using three-way merge machinery.
+ +  [seen] git-repack: Add option to repack all objects.
+ +  [seen~1] More documentation updates.
+ +  [seen~2] Show commits in topo order and name all commits.
+ +  [seen~3] mailinfo and applymbox updates
+ +  [seen~4] Document "git cherry-pick" and "git revert"
+ +  [seen~5] Remove git-apply-patch-script.
+ +  [seen~6] Redo "revert" using three-way merge machinery.
   - [rc] Merge refs/heads/master from .
 ++* [master] Revert "Replace zero-length array decls with []."
   - [rc~1] Merge refs/heads/master from .
diff --git a/Documentation/howto/update-hook-example.txt b/Documentation/howto/update-hook-example.txt
index 89821ec74f..151ee84ceb 100644
--- a/Documentation/howto/update-hook-example.txt
+++ b/Documentation/howto/update-hook-example.txt
@@ -179,7 +179,7 @@ allowed-groups, to describe which heads can be pushed into by
 whom.  The format of each file would look like this:
 
     refs/heads/master   junio
-    +refs/heads/pu      junio
+    +refs/heads/seen    junio
     refs/heads/cogito$  pasky
     refs/heads/bw/.*    linus
     refs/heads/tmp/.*   .*
@@ -187,6 +187,6 @@ whom.  The format of each file would look like this:
 
 With this, Linus can push or create "bw/penguin" or "bw/zebra"
 or "bw/panda" branches, Pasky can do only "cogito", and JC can
-do master and pu branches and make versioned tags.  And anybody
-can do tmp/blah branches. The '+' sign at the pu record means
+do master and "seen" branches and make versioned tags.  And anybody
+can do tmp/blah branches. The '+' sign at the "seen" record means
 that JC can make non-fast-forward pushes on it.
-- 
gitgitgadget


^ permalink raw reply related	[relevance 8%]

* [PATCH v3 2/3] docs: adjust the technical overview for the rename `pu` -> `seen`
  @ 2020-06-25 12:18  8%     ` Johannes Schindelin via GitGitGadget
  0 siblings, 0 replies; 200+ results
From: Johannes Schindelin via GitGitGadget @ 2020-06-25 12:18 UTC (permalink / raw)
  To: git; +Cc: Denton Liu, Johannes Schindelin, Johannes Schindelin

From: Johannes Schindelin <johannes.schindelin@gmx.de>

This patch tries to rewrite history a bit: the mail contents that have
been added to Git's source code are actually fixed, we cannot change
them in hindsight.

But as the `pu` branch _was_ renamed, and as the documents were added to
Git's source code not so much as historical record, but to describe the
status quo, let's pretend that we have a time machine and adjust the
provided information accordingly.

Where appropriate, quotes were added for readability.

Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
---
 Documentation/howto/maintain-git.txt          | 52 +++++++++----------
 .../howto/rebase-from-internal-branch.txt     | 32 ++++++------
 Documentation/howto/revert-branch-rebase.txt  | 32 ++++++------
 Documentation/howto/update-hook-example.txt   |  6 +--
 4 files changed, 61 insertions(+), 61 deletions(-)

diff --git a/Documentation/howto/maintain-git.txt b/Documentation/howto/maintain-git.txt
index ca4378740c..3c3030bfd5 100644
--- a/Documentation/howto/maintain-git.txt
+++ b/Documentation/howto/maintain-git.txt
@@ -66,7 +66,7 @@ this mailing list after each feature release is made.
    demonstrated to be regression free.  New changes are tested
    in 'next' before merged to 'master'.
 
- - 'pu' branch is used to publish other proposed changes that do
+ - 'seen' branch is used to publish other proposed changes that do
    not yet pass the criteria set for 'next'.
 
  - The tips of 'master' and 'maint' branches will not be rewound to
@@ -76,7 +76,7 @@ this mailing list after each feature release is made.
    of the cycle.
 
  - Usually 'master' contains all of 'maint' and 'next' contains all
-   of 'master'.  'pu' contains all the topics merged to 'next', but
+   of 'master'.  'seen' contains all the topics merged to 'next', but
    is rebuilt directly on 'master'.
 
  - The tip of 'master' is meant to be more stable than any
@@ -211,12 +211,12 @@ by doing the following:
    series?)
 
  - Prepare 'jch' branch, which is used to represent somewhere
-   between 'master' and 'pu' and often is slightly ahead of 'next'.
+   between 'master' and 'seen' and often is slightly ahead of 'next'.
 
-     $ Meta/Reintegrate master..pu >Meta/redo-jch.sh
+     $ Meta/Reintegrate master..seen >Meta/redo-jch.sh
 
    The result is a script that lists topics to be merged in order to
-   rebuild 'pu' as the input to Meta/Reintegrate script.  Remove
+   rebuild 'seen' as the input to Meta/Reintegrate script.  Remove
    later topics that should not be in 'jch' yet.  Add a line that
    consists of '### match next' before the name of the first topic
    in the output that should be in 'jch' but not in 'next' yet.
@@ -273,29 +273,29 @@ by doing the following:
    merged to 'master'.  This may lose '### match next' marker;
    add it again to the appropriate place when it happens.
 
- - Rebuild 'pu'.
+ - Rebuild 'seen'.
 
-     $ Meta/Reintegrate master..pu >Meta/redo-pu.sh
+     $ Meta/Reintegrate master..seen >Meta/redo-seen.sh
 
-   Edit the result by adding new topics that are not still in 'pu'
+   Edit the result by adding new topics that are not still in 'seen'
    in the script.  Then
 
-     $ git checkout -B pu jch
-     $ sh Meta/redo-pu.sh
+     $ git checkout -B seen jch
+     $ sh Meta/redo-seen.sh
 
-   When all is well, clean up the redo-pu.sh script with
+   When all is well, clean up the redo-seen.sh script with
 
-     $ sh Meta/redo-pu.sh -u
+     $ sh Meta/redo-seen.sh -u
 
    Double check by running
 
-     $ git branch --no-merged pu
+     $ git branch --no-merged seen
 
    to see there is no unexpected leftover topics.
 
    At this point, build-test the result for semantic conflicts, and
    if there are, prepare an appropriate merge-fix first (see
-   appendix), and rebuild the 'pu' branch from scratch, starting at
+   appendix), and rebuild the 'seen' branch from scratch, starting at
    the tip of 'jch'.
 
  - Update "What's cooking" message to review the updates to
@@ -305,14 +305,14 @@ by doing the following:
 
      $ Meta/cook
 
-   This script inspects the history between master..pu, finds tips
+   This script inspects the history between master..seen, finds tips
    of topic branches, compares what it found with the current
    contents in Meta/whats-cooking.txt, and updates that file.
-   Topics not listed in the file but are found in master..pu are
+   Topics not listed in the file but are found in master..seen are
    added to the "New topics" section, topics listed in the file that
-   are no longer found in master..pu are moved to the "Graduated to
+   are no longer found in master..seen are moved to the "Graduated to
    master" section, and topics whose commits changed their states
-   (e.g. used to be only in 'pu', now merged to 'next') are updated
+   (e.g. used to be only in 'seen', now merged to 'next') are updated
    with change markers "<<" and ">>".
 
    Look for lines enclosed in "<<" and ">>"; they hold contents from
@@ -342,7 +342,7 @@ Observations
 Some observations to be made.
 
  * Each topic is tested individually, and also together with other
-   topics cooking first in 'pu', then in 'jch' and then in 'next'.
+   topics cooking first in 'seen', then in 'jch' and then in 'next'.
    Until it matures, no part of it is merged to 'master'.
 
  * A topic already in 'next' can get fixes while still in
@@ -385,7 +385,7 @@ new use of the variable under its old name. When these two topics
 are merged together, the reference to the variable newly added by
 the latter topic will still use the old name in the result.
 
-The Meta/Reintegrate script that is used by redo-jch and redo-pu
+The Meta/Reintegrate script that is used by redo-jch and redo-seen
 scripts implements a crude but usable way to work this issue around.
 When the script merges branch $X, it checks if "refs/merge-fix/$X"
 exists, and if so, the effect of it is squashed into the result of
@@ -405,14 +405,14 @@ commit that can be squashed into a result of mechanical merge to
 correct semantic conflicts.
 
 After finding that the result of merging branch "ai/topic" to an
-integration branch had such a semantic conflict, say pu~4, check the
+integration branch had such a semantic conflict, say seen~4, check the
 problematic merge out on a detached HEAD, edit the working tree to
 fix the semantic conflict, and make a separate commit to record the
 fix-up:
 
-     $ git checkout pu~4
+     $ git checkout seen~4
      $ git show -s --pretty=%s ;# double check
-     Merge branch 'ai/topic' to pu
+     Merge branch 'ai/topic' to seen
      $ edit
      $ git commit -m 'merge-fix/ai/topic' -a
 
@@ -424,9 +424,9 @@ result:
 Then double check the result by asking Meta/Reintegrate to redo the
 merge:
 
-     $ git checkout pu~5 ;# the parent of the problem merge
+     $ git checkout seen~5 ;# the parent of the problem merge
      $ echo ai/topic | Meta/Reintegrate
-     $ git diff pu~4
+     $ git diff seen~4
 
 This time, because you prepared refs/merge-fix/ai/topic, the
 resulting merge should have been tweaked to include the fix for the
@@ -438,7 +438,7 @@ branch needs this merge-fix is because another branch merged earlier
 to the integration branch changed the underlying assumption ai/topic
 branch made (e.g. ai/topic branch added a site to refer to a
 variable, while the other branch renamed that variable and adjusted
-existing use sites), and if you changed redo-jch (or redo-pu) script
+existing use sites), and if you changed redo-jch (or redo-seen) script
 to merge ai/topic branch before the other branch, then the above
 merge-fix should not be applied while merging ai/topic, but should
 instead be applied while merging the other branch.  You would need
diff --git a/Documentation/howto/rebase-from-internal-branch.txt b/Documentation/howto/rebase-from-internal-branch.txt
index 02cb5f758d..ece51ddddc 100644
--- a/Documentation/howto/rebase-from-internal-branch.txt
+++ b/Documentation/howto/rebase-from-internal-branch.txt
@@ -4,7 +4,7 @@ Cc:	Petr Baudis <pasky@suse.cz>, Linus Torvalds <torvalds@osdl.org>
 Subject: Re: sending changesets from the middle of a git tree
 Date:	Sun, 14 Aug 2005 18:37:39 -0700
 Abstract: In this article, JC talks about how he rebases the
- public "pu" branch using the core Git tools when he updates
+ public "seen" branch using the core Git tools when he updates
  the "master" branch, and how "rebase" works.  Also discussed
  is how this applies to individual developers who sends patches
  upstream.
@@ -20,8 +20,8 @@ Petr Baudis <pasky@suse.cz> writes:
 > where Junio C Hamano <junkio@cox.net> told me that...
 >> Linus Torvalds <torvalds@osdl.org> writes:
 >>
->> > Junio, maybe you want to talk about how you move patches from your "pu"
->> > branch to the real branches.
+>> > Junio, maybe you want to talk about how you move patches from your
+>> > "seen" branch to the real branches.
 >>
 > Actually, wouldn't this be also precisely for what StGIT is intended to?
 --------------------------------------
@@ -33,12 +33,12 @@ the kind of task StGIT is designed to do.
 I just have done a simpler one, this time using only the core
 Git tools.
 
-I had a handful of commits that were ahead of master in pu, and I
+I had a handful of commits that were ahead of master in 'seen', and I
 wanted to add some documentation bypassing my usual habit of
-placing new things in pu first.  At the beginning, the commit
+placing new things in 'seen' first.  At the beginning, the commit
 ancestry graph looked like this:
 
-                             *"pu" head
+                             *"seen" head
     master --> #1 --> #2 --> #3
 
 So I started from master, made a bunch of edits, and committed:
@@ -50,7 +50,7 @@ So I started from master, made a bunch of edits, and committed:
 
 After the commit, the ancestry graph would look like this:
 
-                              *"pu" head
+                              *"seen" head
     master^ --> #1 --> #2 --> #3
           \
             \---> master
@@ -58,31 +58,31 @@ After the commit, the ancestry graph would look like this:
 The old master is now master^ (the first parent of the master).
 The new master commit holds my documentation updates.
 
-Now I have to deal with "pu" branch.
+Now I have to deal with "seen" branch.
 
 This is the kind of situation I used to have all the time when
 Linus was the maintainer and I was a contributor, when you look
-at "master" branch being the "maintainer" branch, and "pu"
+at "master" branch being the "maintainer" branch, and "seen"
 branch being the "contributor" branch.  Your work started at the
 tip of the "maintainer" branch some time ago, you made a lot of
 progress in the meantime, and now the maintainer branch has some
 other commits you do not have yet.  And "git rebase" was written
 with the explicit purpose of helping to maintain branches like
-"pu".  You _could_ merge master to pu and keep going, but if you
+"seen".  You _could_ merge master to 'seen' and keep going, but if you
 eventually want to cherrypick and merge some but not necessarily
 all changes back to the master branch, it often makes later
 operations for _you_ easier if you rebase (i.e. carry forward
-your changes) "pu" rather than merge.  So I ran "git rebase":
+your changes) "seen" rather than merge.  So I ran "git rebase":
 
-    $ git checkout pu
-    $ git rebase master pu
+    $ git checkout seen
+    $ git rebase master seen
 
 What this does is to pick all the commits since the current
-branch (note that I now am on "pu" branch) forked from the
+branch (note that I now am on "seen" branch) forked from the
 master branch, and forward port these changes.
 
     master^ --> #1 --> #2 --> #3
-          \                                  *"pu" head
+          \                                  *"seen" head
             \---> master --> #1' --> #2' --> #3'
 
 The diff between master^ and #1 is applied to master and
@@ -92,7 +92,7 @@ commits are made similarly out of #2 and #3 commits.
 
 Old #3 is not recorded in any of the .git/refs/heads/ file
 anymore, so after doing this you will have dangling commit if
-you ran fsck-cache, which is normal.  After testing "pu", you
+you ran fsck-cache, which is normal.  After testing "seen", you
 can run "git prune" to get rid of those original three commits.
 
 While I am talking about "git rebase", I should talk about how
diff --git a/Documentation/howto/revert-branch-rebase.txt b/Documentation/howto/revert-branch-rebase.txt
index 149508e13b..a3e5595a56 100644
--- a/Documentation/howto/revert-branch-rebase.txt
+++ b/Documentation/howto/revert-branch-rebase.txt
@@ -15,7 +15,7 @@ One of the changes I pulled into the 'master' branch turns out to
 break building Git with GCC 2.95.  While they were well-intentioned
 portability fixes, keeping things working with gcc-2.95 was also
 important.  Here is what I did to revert the change in the 'master'
-branch and to adjust the 'pu' branch, using core Git tools and
+branch and to adjust the 'seen' branch, using core Git tools and
 barebone Porcelain.
 
 First, prepare a throw-away branch in case I screw things up.
@@ -104,11 +104,11 @@ $ git diff master..revert-c99
 
 says nothing.
 
-Then we rebase the 'pu' branch as usual.
+Then we rebase the 'seen' branch as usual.
 
 ------------------------------------------------
-$ git checkout pu
-$ git tag pu-anchor pu
+$ git checkout seen
+$ git tag seen-anchor seen
 $ git rebase master
 * Applying: Redo "revert" using three-way merge machinery.
 First trying simple merge strategy to cherry-pick.
@@ -127,11 +127,11 @@ First trying simple merge strategy to cherry-pick.
 First trying simple merge strategy to cherry-pick.
 ------------------------------------------------
 
-The temporary tag 'pu-anchor' is me just being careful, in case 'git
+The temporary tag 'seen-anchor' is me just being careful, in case 'git
 rebase' screws up.  After this, I can do these for sanity check:
 
 ------------------------------------------------
-$ git diff pu-anchor..pu ;# make sure we got the master fix.
+$ git diff seen-anchor..seen ;# make sure we got the master fix.
 $ make CC=gcc-2.95 clean test ;# make sure it fixed the breakage.
 $ make clean test ;# make sure it did not cause other breakage.
 ------------------------------------------------
@@ -140,7 +140,7 @@ Everything is in the good order.  I do not need the temporary branch
 or tag anymore, so remove them:
 
 ------------------------------------------------
-$ rm -f .git/refs/tags/pu-anchor
+$ rm -f .git/refs/tags/seen-anchor
 $ git branch -d revert-c99
 ------------------------------------------------
 
@@ -168,18 +168,18 @@ Committed merge 7fb9b7262a1d1e0a47bbfdcbbcf50ce0635d3f8f
 And the final repository status looks like this:
 
 ------------------------------------------------
-$ git show-branch --more=1 master pu rc
+$ git show-branch --more=1 master seen rc
 ! [master] Revert "Replace zero-length array decls with []."
- ! [pu] git-repack: Add option to repack all objects.
+ ! [seen] git-repack: Add option to repack all objects.
   * [rc] Merge refs/heads/master from .
 ---
- +  [pu] git-repack: Add option to repack all objects.
- +  [pu~1] More documentation updates.
- +  [pu~2] Show commits in topo order and name all commits.
- +  [pu~3] mailinfo and applymbox updates
- +  [pu~4] Document "git cherry-pick" and "git revert"
- +  [pu~5] Remove git-apply-patch-script.
- +  [pu~6] Redo "revert" using three-way merge machinery.
+ +  [seen] git-repack: Add option to repack all objects.
+ +  [seen~1] More documentation updates.
+ +  [seen~2] Show commits in topo order and name all commits.
+ +  [seen~3] mailinfo and applymbox updates
+ +  [seen~4] Document "git cherry-pick" and "git revert"
+ +  [seen~5] Remove git-apply-patch-script.
+ +  [seen~6] Redo "revert" using three-way merge machinery.
   - [rc] Merge refs/heads/master from .
 ++* [master] Revert "Replace zero-length array decls with []."
   - [rc~1] Merge refs/heads/master from .
diff --git a/Documentation/howto/update-hook-example.txt b/Documentation/howto/update-hook-example.txt
index 89821ec74f..151ee84ceb 100644
--- a/Documentation/howto/update-hook-example.txt
+++ b/Documentation/howto/update-hook-example.txt
@@ -179,7 +179,7 @@ allowed-groups, to describe which heads can be pushed into by
 whom.  The format of each file would look like this:
 
     refs/heads/master   junio
-    +refs/heads/pu      junio
+    +refs/heads/seen    junio
     refs/heads/cogito$  pasky
     refs/heads/bw/.*    linus
     refs/heads/tmp/.*   .*
@@ -187,6 +187,6 @@ whom.  The format of each file would look like this:
 
 With this, Linus can push or create "bw/penguin" or "bw/zebra"
 or "bw/panda" branches, Pasky can do only "cogito", and JC can
-do master and pu branches and make versioned tags.  And anybody
-can do tmp/blah branches. The '+' sign at the pu record means
+do master and "seen" branches and make versioned tags.  And anybody
+can do tmp/blah branches. The '+' sign at the "seen" record means
 that JC can make non-fast-forward pushes on it.
-- 
gitgitgadget


^ permalink raw reply related	[relevance 8%]

* Re: [PATCH 10/11] strvec: drop argv_array compatibility layer
  @ 2020-07-29  0:44  2%         ` Junio C Hamano
  2020-07-29 16:22  0%           ` Jeff King
  0 siblings, 1 reply; 200+ results
From: Junio C Hamano @ 2020-07-29  0:44 UTC (permalink / raw)
  To: Jeff King; +Cc: git

Jeff King <peff@peff.net> writes:

> Worse than the resolutions are all the new calls which needed to be
> fixed up. I know your scripts keep a fix-up commit for this, but I don't
> think you publish it.

They are found in refs/merge-fix/$topicname, and the broken-out
mirror repository https://github.com/gitster/git/ should have them.

^ permalink raw reply	[relevance 2%]

* Re: [PATCH 10/11] strvec: drop argv_array compatibility layer
  2020-07-29  0:44  2%         ` Junio C Hamano
@ 2020-07-29 16:22  0%           ` Jeff King
  0 siblings, 0 replies; 200+ results
From: Jeff King @ 2020-07-29 16:22 UTC (permalink / raw)
  To: Junio C Hamano; +Cc: git

On Tue, Jul 28, 2020 at 05:44:22PM -0700, Junio C Hamano wrote:

> Jeff King <peff@peff.net> writes:
> 
> > Worse than the resolutions are all the new calls which needed to be
> > fixed up. I know your scripts keep a fix-up commit for this, but I don't
> > think you publish it.
> 
> They are found in refs/merge-fix/$topicname, and the broken-out
> mirror repository https://github.com/gitster/git/ should have them.

Oh indeed. I stupidly looked in my refs/remotes, but of course I didn't
set up a refspec to fetch them. :)

-Peff

^ permalink raw reply	[relevance 0%]

* Re: [PATCH v3 00/20] Maintenance builtin, allowing 'gc --auto' customization
  @ 2020-07-31  2:58  2%     ` Junio C Hamano
  0 siblings, 0 replies; 200+ results
From: Junio C Hamano @ 2020-07-31  2:58 UTC (permalink / raw)
  To: Derrick Stolee via GitGitGadget
  Cc: git, Johannes.Schindelin, sandals, steadmon, jrnieder, peff,
	congdanhqx, phillip.wood123, emilyshaffer, sluongng,
	jonathantanmy, Derrick Stolee

Junio C Hamano <gitster@pobox.com> writes:

> "Derrick Stolee via GitGitGadget" <gitgitgadget@gmail.com> writes:
>
>>  * This series is now based on jk/strvec, as there are several places where
>>    I was adding new callers to argv_array_push* and run_command_v_opt()
>>    which have been replaced with strvec_push*() and run_command(), using a
>>    'struct child_process'.
>
> It probably has been a good way to gain experience with the renamed
> API for you to rebase this series, but I think we'd have to spend a
> similar amount of effort yet again, as I expect that the jk/strvec
> series would be rerolled at least once more, with the items[] array
> renamed to something else, like v[].
>
> Let's see how it goes.

So, ... jk/strvec got updated, and just applying these twenty
patches on top no longer compiles, so I rebased them ;-)

I also adjusted the merge-fix for the 6 patches on es/config-hooks
topic before making tonight's final push-out of 'seen'.

Thanks.

^ permalink raw reply	[relevance 2%]

* [PATCH 1/4] t6038: make tests fail for the right reason
  @ 2020-08-02  6:33  2% ` Elijah Newren via GitGitGadget
  2020-08-02 18:17  0%   ` Junio C Hamano
  2020-08-02 19:10  0%   ` Eric Sunshine
    1 sibling, 2 replies; 200+ results
From: Elijah Newren via GitGitGadget @ 2020-08-02  6:33 UTC (permalink / raw)
  To: git; +Cc: Elijah Newren, Elijah Newren

From: Elijah Newren <newren@gmail.com>

t6038 had a pair of tests that were expected to fail, but weren't
failing for the expected reason.  Both were meant to do a merge that
could be done cleanly after renormalization, but were supposed to fail
for lack of renormalization.  Unfortunately, both tests has staged
changes, and checkout -m would abort due to the presence of those staged
changes before even attempting a merge.

Fix this first issue by utilizing git-restore instead of git-checkout,
so that the index is left alone and just the working directory gets the
changes we want.

However, there is a second issue with these tests.  Technically, they
just wanted to verify that after renormalization, no conflicts would be
present.  This could have been checked for by grepping for a lack of
conflict markers, but the test instead tried to compare the working
directory files to an expected result.  Unfortunately, the setting of
"text=auto" without setting core.eol to any value meant that the content
of the file (in particular, the line endings) would be
platform-dependent and the tests could only pass on some platforms.
Replace the existing comparison with a call to 'git diff --no-index
--ignore-cr-at-eol' to verify that the contents, other than possible
carriage returns in the file, match the expected results and in
particular that the file has no conflicts from the checkout -m
operation.

Signed-off-by: Elijah Newren <newren@gmail.com>
---
 t/t6038-merge-text-auto.sh | 8 ++++----
 1 file changed, 4 insertions(+), 4 deletions(-)

diff --git a/t/t6038-merge-text-auto.sh b/t/t6038-merge-text-auto.sh
index 5e8d5fa50c..27cea15533 100755
--- a/t/t6038-merge-text-auto.sh
+++ b/t/t6038-merge-text-auto.sh
@@ -168,9 +168,9 @@ test_expect_failure 'checkout -m after setting text=auto' '
 	git rm -fr . &&
 	rm -f .gitattributes &&
 	git reset --hard initial &&
-	git checkout a -- . &&
+	git restore --source=a -- . &&
 	git checkout -m b &&
-	compare_files expected file
+	git diff --no-index --ignore-cr-at-eol expected file
 '
 
 test_expect_failure 'checkout -m addition of text=auto' '
@@ -183,9 +183,9 @@ test_expect_failure 'checkout -m addition of text=auto' '
 	git rm -fr . &&
 	rm -f .gitattributes file &&
 	git reset --hard initial &&
-	git checkout b -- . &&
+	git restore --source=b -- . &&
 	git checkout -m a &&
-	compare_files expected file
+	git diff --no-index --ignore-cr-at-eol expected file
 '
 
 test_expect_failure 'cherry-pick patch from after text=auto was added' '
-- 
gitgitgadget


^ permalink raw reply related	[relevance 2%]

* Re: [PATCH 1/4] t6038: make tests fail for the right reason
  2020-08-02  6:33  2% ` [PATCH 1/4] t6038: make tests fail for the right reason Elijah Newren via GitGitGadget
@ 2020-08-02 18:17  0%   ` Junio C Hamano
  2020-08-02 19:10  0%   ` Eric Sunshine
  1 sibling, 0 replies; 200+ results
From: Junio C Hamano @ 2020-08-02 18:17 UTC (permalink / raw)
  To: Elijah Newren via GitGitGadget; +Cc: git, Elijah Newren

"Elijah Newren via GitGitGadget" <gitgitgadget@gmail.com> writes:

> t6038 had a pair of tests that were expected to fail, but weren't
> failing for the expected reason.  Both were meant to do a merge that
> could be done cleanly after renormalization, but were supposed to fail
> for lack of renormalization.  Unfortunately, both tests has staged
> changes, and checkout -m would abort due to the presence of those staged
> changes before even attempting a merge.
>
> Fix this first issue by utilizing git-restore instead of git-checkout,
> so that the index is left alone and just the working directory gets the
> changes we want.

Nicely analysed.

> However, there is a second issue with these tests.  Technically, they
> just wanted to verify that after renormalization, no conflicts would be
> present.  This could have been checked for by grepping for a lack of
> conflict markers, but the test instead tried to compare the working
> directory files to an expected result.  Unfortunately, the setting of
> "text=auto" without setting core.eol to any value meant that the content
> of the file (in particular, the line endings) would be
> platform-dependent and the tests could only pass on some platforms.

OK.

> Replace the existing comparison with a call to 'git diff --no-index
> --ignore-cr-at-eol' to verify that the contents, other than possible
> carriage returns in the file, match the expected results and in
> particular that the file has no conflicts from the checkout -m
> operation.

Makes sense.

Thanks.

> Signed-off-by: Elijah Newren <newren@gmail.com>
> ---
>  t/t6038-merge-text-auto.sh | 8 ++++----
>  1 file changed, 4 insertions(+), 4 deletions(-)
>
> diff --git a/t/t6038-merge-text-auto.sh b/t/t6038-merge-text-auto.sh
> index 5e8d5fa50c..27cea15533 100755
> --- a/t/t6038-merge-text-auto.sh
> +++ b/t/t6038-merge-text-auto.sh
> @@ -168,9 +168,9 @@ test_expect_failure 'checkout -m after setting text=auto' '
>  	git rm -fr . &&
>  	rm -f .gitattributes &&
>  	git reset --hard initial &&
> -	git checkout a -- . &&
> +	git restore --source=a -- . &&
>  	git checkout -m b &&
> -	compare_files expected file
> +	git diff --no-index --ignore-cr-at-eol expected file
>  '
>  
>  test_expect_failure 'checkout -m addition of text=auto' '
> @@ -183,9 +183,9 @@ test_expect_failure 'checkout -m addition of text=auto' '
>  	git rm -fr . &&
>  	rm -f .gitattributes file &&
>  	git reset --hard initial &&
> -	git checkout b -- . &&
> +	git restore --source=b -- . &&
>  	git checkout -m a &&
> -	compare_files expected file
> +	git diff --no-index --ignore-cr-at-eol expected file
>  '
>  
>  test_expect_failure 'cherry-pick patch from after text=auto was added' '

^ permalink raw reply	[relevance 0%]

* Re: [PATCH 1/4] t6038: make tests fail for the right reason
  2020-08-02  6:33  2% ` [PATCH 1/4] t6038: make tests fail for the right reason Elijah Newren via GitGitGadget
  2020-08-02 18:17  0%   ` Junio C Hamano
@ 2020-08-02 19:10  0%   ` Eric Sunshine
  1 sibling, 0 replies; 200+ results
From: Eric Sunshine @ 2020-08-02 19:10 UTC (permalink / raw)
  To: Elijah Newren via GitGitGadget; +Cc: Git List, Elijah Newren

On Sun, Aug 2, 2020 at 2:33 AM Elijah Newren via GitGitGadget
<gitgitgadget@gmail.com> wrote:
> t6038 had a pair of tests that were expected to fail, but weren't
> failing for the expected reason.  Both were meant to do a merge that
> could be done cleanly after renormalization, but were supposed to fail
> for lack of renormalization.  Unfortunately, both tests has staged

s/has/had/
...or...
s/has/have/

> changes, and checkout -m would abort due to the presence of those staged
> changes before even attempting a merge.
>
> Fix this first issue by utilizing git-restore instead of git-checkout,
> so that the index is left alone and just the working directory gets the
> changes we want.
>
> However, there is a second issue with these tests.  Technically, they
> just wanted to verify that after renormalization, no conflicts would be
> present.  This could have been checked for by grepping for a lack of
> conflict markers, but the test instead tried to compare the working
> directory files to an expected result.  Unfortunately, the setting of
> "text=auto" without setting core.eol to any value meant that the content
> of the file (in particular, the line endings) would be
> platform-dependent and the tests could only pass on some platforms.
> Replace the existing comparison with a call to 'git diff --no-index
> --ignore-cr-at-eol' to verify that the contents, other than possible
> carriage returns in the file, match the expected results and in
> particular that the file has no conflicts from the checkout -m
> operation.
>
> Signed-off-by: Elijah Newren <newren@gmail.com>

^ permalink raw reply	[relevance 0%]

* [PATCH v2 1/4] t6038: make tests fail for the right reason
  @ 2020-08-03 18:41  2%   ` Elijah Newren via GitGitGadget
  0 siblings, 0 replies; 200+ results
From: Elijah Newren via GitGitGadget @ 2020-08-03 18:41 UTC (permalink / raw)
  To: git; +Cc: Elijah Newren, Elijah Newren

From: Elijah Newren <newren@gmail.com>

t6038 had a pair of tests that were expected to fail, but weren't
failing for the expected reason.  Both were meant to do a merge that
could be done cleanly after renormalization, but were supposed to fail
for lack of renormalization.  Unfortunately, both tests had staged
changes, and checkout -m would abort due to the presence of those staged
changes before even attempting a merge.

Fix this first issue by utilizing git-restore instead of git-checkout,
so that the index is left alone and just the working directory gets the
changes we want.

However, there is a second issue with these tests.  Technically, they
just wanted to verify that after renormalization, no conflicts would be
present.  This could have been checked for by grepping for a lack of
conflict markers, but the test instead tried to compare the working
directory files to an expected result.  Unfortunately, the setting of
"text=auto" without setting core.eol to any value meant that the content
of the file (in particular, the line endings) would be
platform-dependent and the tests could only pass on some platforms.
Replace the existing comparison with a call to 'git diff --no-index
--ignore-cr-at-eol' to verify that the contents, other than possible
carriage returns in the file, match the expected results and in
particular that the file has no conflicts from the checkout -m
operation.

Signed-off-by: Elijah Newren <newren@gmail.com>
---
 t/t6038-merge-text-auto.sh | 8 ++++----
 1 file changed, 4 insertions(+), 4 deletions(-)

diff --git a/t/t6038-merge-text-auto.sh b/t/t6038-merge-text-auto.sh
index 5e8d5fa50c..27cea15533 100755
--- a/t/t6038-merge-text-auto.sh
+++ b/t/t6038-merge-text-auto.sh
@@ -168,9 +168,9 @@ test_expect_failure 'checkout -m after setting text=auto' '
 	git rm -fr . &&
 	rm -f .gitattributes &&
 	git reset --hard initial &&
-	git checkout a -- . &&
+	git restore --source=a -- . &&
 	git checkout -m b &&
-	compare_files expected file
+	git diff --no-index --ignore-cr-at-eol expected file
 '
 
 test_expect_failure 'checkout -m addition of text=auto' '
@@ -183,9 +183,9 @@ test_expect_failure 'checkout -m addition of text=auto' '
 	git rm -fr . &&
 	rm -f .gitattributes file &&
 	git reset --hard initial &&
-	git checkout b -- . &&
+	git restore --source=b -- . &&
 	git checkout -m a &&
-	compare_files expected file
+	git diff --no-index --ignore-cr-at-eol expected file
 '
 
 test_expect_failure 'cherry-pick patch from after text=auto was added' '
-- 
gitgitgadget


^ permalink raw reply related	[relevance 2%]

* Re: [PATCH v4 0/9] propose config-based hooks
  @ 2020-09-09 21:04  2% ` Junio C Hamano
  0 siblings, 0 replies; 200+ results
From: Junio C Hamano @ 2020-09-09 21:04 UTC (permalink / raw)
  To: Emily Shaffer
  Cc: git, Jeff King, James Ramsay, Jonathan Nieder, brian m. carlson,
	Ævar Arnfjörð Bjarmason, Phillip Wood,
	Josh Steadmon, Johannes Schindelin

Emily Shaffer <emilyshaffer@google.com> writes:

> Since v3, the biggest change is the conversion of commit hooks to use the new
> hook machinery. The first change ("commit: use config-based hooks") is the
> important part; the second change ("run_commit_hook: take strvec instead of varargs")
> is probably subjective, but I thought it was a decent tech debt reduction.
>
> I wanted to send this reroll quickly since I had promised it in standup last
> week, but I've got pretty good progress locally on the patch for configuring
> "hook.runHookDir"; I'm planning to send that soon, probably this week.

I've had the attached merge-fix patch as a way to adjust argv_array
to strvec transition [*1*], but now *most* but not all parts of this
series have been migrated to the strvec API, you should apply some
parts in the merge-fix patch to your copy.  I think the changes in
the old "merge-fix" patch to *.c and *.h are already in your series
that has been rebased on a newer 'master' that has strvec, but
documentation and possibly in-code comments may need to be adjusted.

Another way to sanity check the result would be to run this:

    $ git diff master..es/config-hooks | grep -i argv.array

Thanks.  

[Footnote]

*1* The way I work with a topic that causes conflicts with other
    topics is to merge a new version of topic and letting the rerere
    records I created while resolving the conflicts with the
    previous round.  After textual conflicts are thusly resolved, if
    there are further changes that do not cause textual conflict
    that are necessary, they are written in the form of a
    "merge-fix" patch like the attached.

-- >8 --

 Documentation/technical/api-parse-options.txt  |  4 ++--
 Documentation/technical/config-based-hooks.txt |  4 ++--
 builtin/hook.c                                 | 16 ++++++++--------
 hook.c                                         |  6 +++---
 hook.h                                         |  4 ++--
 parse-options-cb.c                             |  8 ++++----
 parse-options.h                                |  6 +++---
 7 files changed, 24 insertions(+), 24 deletions(-)

diff --git a/Documentation/technical/api-parse-options.txt b/Documentation/technical/api-parse-options.txt
index b4f1fc4a1a..679bd98629 100644
--- a/Documentation/technical/api-parse-options.txt
+++ b/Documentation/technical/api-parse-options.txt
@@ -173,9 +173,9 @@ There are some macros to easily define options:
 	The string argument is stored as an element in `string_list`.
 	Use of `--no-option` will clear the list of preceding values.
 
-`OPT_ARGV_ARRAY(short, long, &struct argv_array, arg_str, description)`::
+`OPT_STRVEC(short, long, &struct strvec, arg_str, description)`::
 	Introduce an option with a string argument.
-	The string argument is stored as an element in `argv_array`.
+	The string argument is stored as an element in `strvec`.
 	Use of `--no-option` will clear the list of preceding values.
 
 `OPT_INTEGER(short, long, &int_var, description)`::
diff --git a/Documentation/technical/config-based-hooks.txt b/Documentation/technical/config-based-hooks.txt
index c6e762b192..4443f70ded 100644
--- a/Documentation/technical/config-based-hooks.txt
+++ b/Documentation/technical/config-based-hooks.txt
@@ -106,10 +106,10 @@ a concise config afterwards. It may take a form similar to `git rebase
 `hook.c` and `hook.h` are responsible for interacting with the config files. In
 the case when the code generating a hook event doesn't have special concerns
 about how to run the hooks, the hook library will provide a basic API to call
-all hooks in config order with an `argv_array` provided by the code which
+all hooks in config order with an `strvec` provided by the code which
 generates the hook event:
 
-*`int run_hooks(const char *hookname, struct argv_array *args)`*
+*`int run_hooks(const char *hookname, struct strvec *args)`*
 
 This call includes the hook command provided by `run-command.h:find_hook()`;
 eventually, this legacy hook will be gated by a config `hook.runHookDir`. The
diff --git a/builtin/hook.c b/builtin/hook.c
index cd61fad5fb..debcb5a77a 100644
--- a/builtin/hook.c
+++ b/builtin/hook.c
@@ -5,7 +5,7 @@
 #include "hook.h"
 #include "parse-options.h"
 #include "strbuf.h"
-#include "argv-array.h"
+#include "strvec.h"
 
 static const char * const builtin_hook_usage[] = {
 	N_("git hook list <hookname>"),
@@ -67,14 +67,14 @@ static int list(int argc, const char **argv, const char *prefix)
 static int run(int argc, const char **argv, const char *prefix)
 {
 	struct strbuf hookname = STRBUF_INIT;
-	struct argv_array env_argv = ARGV_ARRAY_INIT;
-	struct argv_array arg_argv = ARGV_ARRAY_INIT;
+	struct strvec env_argv = STRVEC_INIT;
+	struct strvec arg_argv = STRVEC_INIT;
 
 	struct option run_options[] = {
-		OPT_ARGV_ARRAY('e', "env", &env_argv, N_("var"),
-			       N_("environment variables for hook to use")),
-		OPT_ARGV_ARRAY('a', "arg", &arg_argv, N_("args"),
-			       N_("argument to pass to hook")),
+		OPT_STRVEC('e', "env", &env_argv, N_("var"),
+			   N_("environment variables for hook to use")),
+		OPT_STRVEC('a', "arg", &arg_argv, N_("args"),
+			   N_("argument to pass to hook")),
 		OPT_END(),
 	};
 
@@ -87,7 +87,7 @@ static int run(int argc, const char **argv, const char *prefix)
 
 	strbuf_addstr(&hookname, argv[0]);
 
-	return run_hooks(env_argv.argv, &hookname, &arg_argv);
+	return run_hooks(env_argv.v, &hookname, &arg_argv);
 }
 
 int cmd_hook(int argc, const char **argv, const char *prefix)
diff --git a/hook.c b/hook.c
index 902e213173..40d319adb1 100644
--- a/hook.c
+++ b/hook.c
@@ -98,7 +98,7 @@ struct list_head* hook_list(const struct strbuf* hookname)
 }
 
 int run_hooks(const char *const *env, const struct strbuf *hookname,
-	      const struct argv_array *args)
+	      const struct strvec *args)
 {
 	struct list_head *to_run, *pos = NULL, *tmp = NULL;
 	int rc = 0;
@@ -110,14 +110,14 @@ int run_hooks(const char *const *env, const struct strbuf *hookname,
 		struct hook *hook = list_entry(pos, struct hook, list);
 
 		/* add command */
-		argv_array_push(&hook_proc.args, hook->command.buf);
+		strvec_push(&hook_proc.args, hook->command.buf);
 
 		/*
 		 * add passed-in argv, without expanding - let the user get back
 		 * exactly what they put in
 		 */
 		if (args)
-			argv_array_pushv(&hook_proc.args, args->argv);
+			strvec_pushv(&hook_proc.args, args->v);
 
 		hook_proc.env = env;
 		hook_proc.no_stdin = 1;
diff --git a/hook.h b/hook.h
index cf598d6ccb..d020788a6b 100644
--- a/hook.h
+++ b/hook.h
@@ -1,7 +1,7 @@
 #include "config.h"
 #include "list.h"
 #include "strbuf.h"
-#include "argv-array.h"
+#include "strvec.h"
 
 struct hook
 {
@@ -12,7 +12,7 @@ struct hook
 
 struct list_head* hook_list(const struct strbuf *hookname);
 int run_hooks(const char *const *env, const struct strbuf *hookname,
-	      const struct argv_array *args);
+	      const struct strvec *args);
 
 void free_hook(struct hook *ptr);
 void clear_hook_list(void);
diff --git a/parse-options-cb.c b/parse-options-cb.c
index 4f993cd734..d2b8b7b98a 100644
--- a/parse-options-cb.c
+++ b/parse-options-cb.c
@@ -205,19 +205,19 @@ int parse_opt_string_list(const struct option *opt, const char *arg, int unset)
 	return 0;
 }
 
-int parse_opt_argv_array(const struct option *opt, const char *arg, int unset)
+int parse_opt_strvec(const struct option *opt, const char *arg, int unset)
 {
-	struct argv_array *v = opt->value;
+	struct strvec *v = opt->value;
 
 	if (unset) {
-		argv_array_clear(v);
+		strvec_clear(v);
 		return 0;
 	}
 
 	if (!arg)
 		return -1;
 
-	argv_array_push(v, arg);
+	strvec_push(v, arg);
 	return 0;
 }
 
diff --git a/parse-options.h b/parse-options.h
index e2e2de75c8..177259488b 100644
--- a/parse-options.h
+++ b/parse-options.h
@@ -177,9 +177,9 @@ struct option {
 #define OPT_STRING_LIST(s, l, v, a, h) \
 				    { OPTION_CALLBACK, (s), (l), (v), (a), \
 				      (h), 0, &parse_opt_string_list }
-#define OPT_ARGV_ARRAY(s, l, v, a, h) \
+#define OPT_STRVEC(s, l, v, a, h) \
 				    { OPTION_CALLBACK, (s), (l), (v), (a), \
-				      (h), 0, &parse_opt_argv_array }
+				      (h), 0, &parse_opt_strvec }
 #define OPT_UYN(s, l, v, h)         { OPTION_CALLBACK, (s), (l), (v), NULL, \
 				      (h), PARSE_OPT_NOARG, &parse_opt_tertiary }
 #define OPT_EXPIRY_DATE(s, l, v, h) \
@@ -299,7 +299,7 @@ int parse_opt_commits(const struct option *, const char *, int);
 int parse_opt_commit(const struct option *, const char *, int);
 int parse_opt_tertiary(const struct option *, const char *, int);
 int parse_opt_string_list(const struct option *, const char *, int);
-int parse_opt_argv_array(const struct option *, const char *, int);
+int parse_opt_strvec(const struct option *, const char *, int);
 int parse_opt_noop_cb(const struct option *, const char *, int);
 enum parse_opt_result parse_opt_unknown_cb(struct parse_opt_ctx_t *ctx,
 					   const struct option *,
-- 
2.28.0-558-g7a0184fd7b


^ permalink raw reply related	[relevance 2%]

* Re: What's cooking in git.git (Jan 2021, #02; Fri, 8)
  @ 2021-01-15 19:44  2%           ` Junio C Hamano
  0 siblings, 0 replies; 200+ results
From: Junio C Hamano @ 2021-01-15 19:44 UTC (permalink / raw)
  To: Derrick Stolee; +Cc: Emily Shaffer, git

Derrick Stolee <stolee@gmail.com> writes:

> Thanks for dealing with this fallout. Sorry for the mixup.
>
>> Helped-by: Emily Shaffer <emilyshaffer@google.com>
>
> Would it be appropriate to convert this to a Co-authored-by?

Or more like "Inspired-by-a-patch-by".  Also you three have about
the same amount of input and deserve credit.

Sorry, but it already is on 'next', which will be discarded in a few
months when the new cycle begins, so I am not sure if it is worth
reverting and reapplying with updated credit trailers.

FWIW, I ended up redoing the merge and did "checkout -m" to recreate
conflicts, and then looked for "config.*pwd" in the block of text
that came from the "part-4" topic and fixed them up manually.  I
then compared the result of this new merge with the earlier merge
that had the issue.  The resulting diff is what went into the patch
you are responding to.  It is good that we had Emily's input as a
comparison material to see that both of us independently touched the
same places to fix.

By the way, the merge into 'master' will directly reuse the conflict
resolution of e47c3632 (Merge branch 'ds/maintenance-part-4' into
jch, 2021-01-14) from the rerere database, without any separate
"merge fix" commit.

Thanks.

^ permalink raw reply	[relevance 2%]

* Re: What's cooking in git.git (Mar 2021, #06; Sat, 20)
  @ 2021-03-22 18:41  2%   ` Junio C Hamano
  0 siblings, 0 replies; 200+ results
From: Junio C Hamano @ 2021-03-22 18:41 UTC (permalink / raw)
  To: Matheus Tavares Bernardino; +Cc: git

Matheus Tavares Bernardino <matheus.bernardino@usp.br> writes:

> Hi, Junio
>
> On Sat, Mar 20, 2021 at 6:40 PM Junio C Hamano <gitster@pobox.com> wrote:
>>
>> * mt/parallel-checkout-part-1 (2021-03-18) 9 commits
>>   (merged to 'next' on 2021-03-19 at a1bc83ad8e)
>>  + entry: add checkout_entry_ca() taking preloaded conv_attrs
>>  + entry: move conv_attrs lookup up to checkout_entry()
>>  + entry: extract update_ce_after_write() from write_entry()
>>  + entry: make fstat_output() and read_blob_entry() public
>>  + entry: extract a header file for entry.c functions
>>  + convert: add classification for conv_attrs struct
>>  + convert: add get_stream_filter_ca() variant
>>  + convert: add [async_]convert_to_working_tree_ca() variants
>>  + convert: make convert_attrs() and convert structs public
>>  (this branch is used by mt/parallel-checkout-part-2.)
>>
>>  Preparatory API changes for parallel checkout.
>>
>>  Will merge to 'master'.
>
> Sorry for my confusion, but are you going to squash the `#include
> "entry.h"` fix [1] or do you want me to re-roll this series with it?

I was planning to merge that down to 'master' as-is, with exactly
the same merge-fix to deal with the entry.h fallout that we have
been successfully using while merging the topic to 'seen' and
'next', without any need to have an explicit "oops, entry.h needs to
be included these days", but I think you are right---it would be
cleaner to keep the rebased series build by itself.

As we'll be rewinding and rebuilding 'next' soonish, let's kick the
topic out of 'next' when it happens, so that we can replace it (and
the part-2 topic that depends on it) with a reroll.

Thanks.

^ permalink raw reply	[relevance 2%]

* [RFC PATCH v1 02/13] doc: typeset branches and remotes in monospace
  @ 2021-04-09  4:02  2% ` Firmin Martin
  0 siblings, 0 replies; 200+ results
From: Firmin Martin @ 2021-04-09  4:02 UTC (permalink / raw)
  To: git; +Cc: Firmin Martin

Wrap branch and remote names with backticks as indicated in the
CodingGuidelines.

Signed-off-by: Firmin Martin <firminmartin24@gmail.com>
---
 Documentation/diff-options.txt         |  2 +-
 Documentation/git-add.txt              | 10 +--
 Documentation/git-am.txt               |  4 +-
 Documentation/git-archimport.txt       |  2 +-
 Documentation/git-bisect-lk2009.txt    | 10 +--
 Documentation/git-bisect.txt           |  6 +-
 Documentation/git-branch.txt           | 22 +++---
 Documentation/git-bundle.txt           |  6 +-
 Documentation/git-check-ref-format.txt |  2 +-
 Documentation/git-checkout.txt         |  2 +-
 Documentation/git-cherry-pick.txt      | 22 +++---
 Documentation/git-cherry.txt           |  4 +-
 Documentation/git-clone.txt            | 16 ++---
 Documentation/git-commit-tree.txt      |  2 +-
 Documentation/git-commit.txt           |  6 +-
 Documentation/git-config.txt           |  2 +-
 Documentation/git-cvsimport.txt        |  8 +--
 Documentation/git-cvsserver.txt        |  2 +-
 Documentation/git-describe.txt         |  6 +-
 Documentation/git-diff-index.txt       |  6 +-
 Documentation/git-diff.txt             | 20 +++---
 Documentation/git-fast-export.txt      | 16 ++---
 Documentation/git-fetch-pack.txt       |  2 +-
 Documentation/git-fetch.txt            |  4 +-
 Documentation/git-filter-branch.txt    |  2 +-
 Documentation/git-fmt-merge-msg.txt    |  4 +-
 Documentation/git-for-each-ref.txt     | 12 ++--
 Documentation/git-format-patch.txt     |  4 +-
 Documentation/git-http-push.txt        |  6 +-
 Documentation/git-log.txt              |  8 +--
 Documentation/git-ls-remote.txt        |  2 +-
 Documentation/git-merge.txt            |  2 +-
 Documentation/git-notes.txt            | 12 ++--
 Documentation/git-p4.txt               |  4 +-
 Documentation/git-pull.txt             |  4 +-
 Documentation/git-push.txt             |  8 +--
 Documentation/git-read-tree.txt        |  4 +-
 Documentation/git-rebase.txt           | 92 +++++++++++++-------------
 Documentation/git-reflog.txt           |  4 +-
 Documentation/git-request-pull.txt     |  2 +-
 Documentation/git-rerere.txt           | 34 +++++-----
 Documentation/git-reset.txt            |  6 +-
 Documentation/git-rev-parse.txt        |  4 +-
 Documentation/git-revert.txt           |  8 +--
 Documentation/git-rm.txt               |  2 +-
 Documentation/git-show-ref.txt         |  2 +-
 Documentation/git-show.txt             |  2 +-
 Documentation/git-stash.txt            |  8 +--
 Documentation/git-status.txt           | 12 ++--
 Documentation/git-submodule.txt        | 28 ++++----
 Documentation/git-svn.txt              | 20 +++---
 Documentation/git-switch.txt           | 10 +--
 Documentation/git-symbolic-ref.txt     |  2 +-
 Documentation/git-tag.txt              |  2 +-
 Documentation/git-update-ref.txt       |  4 +-
 Documentation/git-worktree.txt         |  2 +-
 Documentation/git.txt                  |  4 +-
 Documentation/gitcli.txt               |  2 +-
 Documentation/gitcore-tutorial.txt     | 36 +++++-----
 Documentation/giteveryday.txt          | 16 ++---
 Documentation/githooks.txt             |  8 +--
 Documentation/gitk.txt                 |  2 +-
 Documentation/gitnamespaces.txt        |  2 +-
 Documentation/gitremote-helpers.txt    |  6 +-
 Documentation/gitrepository-layout.txt |  4 +-
 Documentation/gittutorial-2.txt        |  2 +-
 Documentation/gittutorial.txt          | 44 ++++++------
 Documentation/gitweb.txt               |  4 +-
 Documentation/gitworkflows.txt         | 70 ++++++++++----------
 Documentation/glossary-content.txt     | 12 ++--
 Documentation/rev-list-options.txt     |  2 +-
 Documentation/revisions.txt            | 52 +++++++--------
 Documentation/user-manual.txt          | 78 +++++++++++-----------
 73 files changed, 421 insertions(+), 421 deletions(-)

diff --git a/Documentation/diff-options.txt b/Documentation/diff-options.txt
index 13e0753862..e4ac746428 100644
--- a/Documentation/diff-options.txt
+++ b/Documentation/diff-options.txt
@@ -803,7 +803,7 @@ endif::git-format-patch[]
 	Ignore changes to submodules in the diff generation. <when> can be
 	either "none", "untracked", "dirty" or "all", which is the default.
 	Using "none" will consider the submodule modified when it either contains
-	untracked or modified files or its HEAD differs from the commit recorded
+	untracked or modified files or its `HEAD` differs from the commit recorded
 	in the superproject and can be used to override any settings of the
 	'ignore' option in linkgit:git-config[1] or linkgit:gitmodules[5]. When
 	"untracked" is used submodules are not considered dirty when they only
diff --git a/Documentation/git-add.txt b/Documentation/git-add.txt
index 6a7cb07a8a..8ec99c5c12 100644
--- a/Documentation/git-add.txt
+++ b/Documentation/git-add.txt
@@ -256,7 +256,7 @@ The main command loop has 6 subcommands (plus help and quit).
 
 status::
 
-   This shows the change between HEAD and index (i.e. what will be
+   This shows the change between `HEAD` and index (i.e. what will be
    committed if you say `git commit`), and between index and
    working tree files (i.e. what you could stage further before
    `git commit` using `git add`) for each path.  A sample output
@@ -268,7 +268,7 @@ status::
      2:     +403/-35        +1/-1 git-add--interactive.perl
 ------------
 +
-It shows that foo.png has differences from HEAD (but that is
+It shows that foo.png has differences from `HEAD` (but that is
 binary so line count cannot be shown) and there is no
 difference between indexed copy and the working tree
 version (if the working tree version were also different,
@@ -311,7 +311,7 @@ revert::
 
   This has a very similar UI to 'update', and the staged
   information for selected paths are reverted to that of the
-  HEAD version.  Reverting new paths makes them untracked.
+  `HEAD` version.  Reverting new paths makes them untracked.
 
 add untracked::
 
@@ -350,7 +350,7 @@ variable `interactive.singleKey` to `true`.
 diff::
 
   This lets you review what will be committed (i.e. between
-  HEAD and index).
+  `HEAD` and index).
 
 
 EDITING PATCHES
@@ -389,7 +389,7 @@ There are also more complex operations that can be performed. But beware
 that because the patch is applied only to the index and not the working
 tree, the working tree will appear to "undo" the change in the index.
 For example, introducing a new line into the index that is in neither
-the HEAD nor the working tree will stage the new line for commit, but
+the `HEAD` nor the working tree will stage the new line for commit, but
 the line will appear to be reverted in the working tree.
 
 Avoid using these constructs, or do so with extreme caution.
diff --git a/Documentation/git-am.txt b/Documentation/git-am.txt
index decd8ae122..cd56054be0 100644
--- a/Documentation/git-am.txt
+++ b/Documentation/git-am.txt
@@ -176,7 +176,7 @@ default.   You can use `--no-utf8` to override this.
 	Restore the original branch and abort the patching operation.
 
 --quit::
-	Abort the patching operation but keep HEAD and the index
+	Abort the patching operation but keep `HEAD` and the index
 	untouched.
 
 --show-current-patch[=(diff|raw)]::
@@ -229,7 +229,7 @@ operation is finished, so if you decide to start over from scratch,
 run `git am --abort` before running the command with mailbox
 names.
 
-Before any patches are applied, ORIG_HEAD is set to the tip of the
+Before any patches are applied, `ORIG_HEAD` is set to the tip of the
 current branch.  This is useful if you have problems with multiple
 commits, like running 'git am' on the wrong branch or an error in the
 commits that is more easily fixed by changing the mailbox (e.g.
diff --git a/Documentation/git-archimport.txt b/Documentation/git-archimport.txt
index b477e3c495..6e2dec5ef1 100644
--- a/Documentation/git-archimport.txt
+++ b/Documentation/git-archimport.txt
@@ -45,7 +45,7 @@ archives that it imports, it is also possible to specify Git branch names
 manually.  To do so, write a Git branch name after each <archive/branch>
 parameter, separated by a colon.  This way, you can shorten the Arch
 branch names and convert Arch jargon to Git jargon, for example mapping a
-"PROJECT{litdd}devo{litdd}VERSION" branch to "master".
+"PROJECT{litdd}devo{litdd}VERSION" branch to `master`.
 
 Associating multiple Arch branches to one Git branch is possible; the
 result will make the most sense only if no commits are made to the first
diff --git a/Documentation/git-bisect-lk2009.txt b/Documentation/git-bisect-lk2009.txt
index f3d9566c89..1276424d65 100644
--- a/Documentation/git-bisect-lk2009.txt
+++ b/Documentation/git-bisect-lk2009.txt
@@ -767,8 +767,8 @@ They cannot be on a branch that has no link with the branch of the
 bad commit and yet not be neither one of its ancestor nor one of its
 descendants.
 
-For example, there can be a "main" branch, and a "dev" branch that was
-forked of the main branch at a commit named "D" like this:
+For example, there can be a `main` branch, and a `dev` branch that was
+forked of the `main` branch at a commit named "D" like this:
 
 -------------
 A-B-C-D-E-F-G  <--main
@@ -776,7 +776,7 @@ A-B-C-D-E-F-G  <--main
         H-I-J  <--dev
 -------------
 
-The commit "D" is called a "merge base" for branch "main" and "dev"
+The commit "D" is called a "merge base" for branch `main` and `dev`
 because it's the best common ancestor for these branches for a merge.
 
 Now let's suppose that commit J is bad and commit G is good and that
@@ -794,7 +794,7 @@ H-I-J
 -------------
 
 But what happens if the first bad commit is "B" and if it has been
-fixed in the "main" branch by commit "F"?
+fixed in the `main` branch by commit "F"?
 
 The result of such a bisection would be that we would find that H is
 the first bad commit, when in fact it's B. So that would be wrong!
@@ -1229,7 +1229,7 @@ message or the author. And it can also be used instead of git "grafts"
 to link a repository with another old repository.
 
 In fact it's this last feature that "sold" it to the Git community, so
-it is now in the "master" branch of Git's Git repository and it should
+it is now in the `master` branch of Git's Git repository and it should
 be released in Git 1.6.5 in October or November 2009.
 
 One problem with "git replace" is that currently it stores all the
diff --git a/Documentation/git-bisect.txt b/Documentation/git-bisect.txt
index fbb39fbdf5..ff50c66e29 100644
--- a/Documentation/git-bisect.txt
+++ b/Documentation/git-bisect.txt
@@ -98,7 +98,7 @@ Bisect reset
 ~~~~~~~~~~~~
 
 After a bisect session, to clean up the bisection state and return to
-the original HEAD, issue the following command:
+the original `HEAD`, issue the following command:
 
 ------------------------------------------------
 $ git bisect reset
@@ -379,7 +379,7 @@ branch contained broken or non-buildable commits, but the merge itself was OK.
 EXAMPLES
 --------
 
-* Automatically bisect a broken build between v1.2 and HEAD:
+* Automatically bisect a broken build between v1.2 and `HEAD`:
 +
 ------------
 $ git bisect start HEAD v1.2 --      # HEAD is bad, v1.2 is good
@@ -387,7 +387,7 @@ $ git bisect run make                # "make" builds the app
 $ git bisect reset                   # quit the bisect session
 ------------
 
-* Automatically bisect a test failure between origin and HEAD:
+* Automatically bisect a test failure between `origin` and `HEAD`:
 +
 ------------
 $ git bisect start HEAD origin --    # HEAD is bad, origin is good
diff --git a/Documentation/git-branch.txt b/Documentation/git-branch.txt
index 271b4ee34e..fa38fa4dc1 100644
--- a/Documentation/git-branch.txt
+++ b/Documentation/git-branch.txt
@@ -175,7 +175,7 @@ This option is only applicable in non-verbose mode.
 	the pattern(s).
 
 --show-current::
-	Print the name of the current branch. In detached HEAD state,
+	Print the name of the current branch. In detached `HEAD` state,
 	nothing is printed.
 
 -v::
@@ -186,7 +186,7 @@ This option is only applicable in non-verbose mode.
 	relationship to upstream branch (if any). If given twice, print
 	the path of the linked worktree (if any) and the name of the upstream
 	branch, as well (see also `git remote show <remote>`).  Note that the
-	current worktree's HEAD will not have its path printed (it will always
+	current worktree's `HEAD` will not have its path printed (it will always
 	be your current directory).
 
 -q::
@@ -250,15 +250,15 @@ start-point is either a local or remote-tracking branch.
 
 --no-contains [<commit>]::
 	Only list branches which don't contain the specified commit
-	(HEAD if not specified). Implies `--list`.
+	(`HEAD` if not specified). Implies `--list`.
 
 --merged [<commit>]::
 	Only list branches whose tips are reachable from the
-	specified commit (HEAD if not specified). Implies `--list`.
+	specified commit (`HEAD` if not specified). Implies `--list`.
 
 --no-merged [<commit>]::
 	Only list branches whose tips are not reachable from the
-	specified commit (HEAD if not specified). Implies `--list`.
+	specified commit (`HEAD` if not specified). Implies `--list`.
 
 <branchname>::
 	The name of the branch to create or delete.
@@ -269,7 +269,7 @@ start-point is either a local or remote-tracking branch.
 <start-point>::
 	The new branch head will point to this commit.  It may be
 	given as a branch name, a commit-id, or a tag.  If this
-	option is omitted, the current HEAD will be used instead.
+	option is omitted, the current `HEAD` will be used instead.
 
 <oldbranch>::
 	The name of an existing branch to rename.
@@ -286,7 +286,7 @@ start-point is either a local or remote-tracking branch.
 	for-each-ref`. Sort order defaults to the value configured for the
 	`branch.sort` variable if exists, or to sorting based on the
 	full refname (including `refs/...` prefix). This lists
-	detached HEAD (if present) first, then local branches and
+	detached `HEAD` (if present) first, then local branches and
 	finally remote-tracking branches. See linkgit:git-config[1].
 
 
@@ -328,10 +328,10 @@ $ git branch -d -r origin/todo origin/html origin/man   <1>
 $ git branch -D test                                    <2>
 ------------
 +
-<1> Delete the remote-tracking branches "todo", "html" and "man". The next
+<1> Delete the remote-tracking branches `todo`, `html` and `man`. The next
     'fetch' or 'pull' will create them again unless you configure them not to.
     See linkgit:git-fetch[1].
-<2> Delete the "test" branch even if the "master" branch (or whichever branch
+<2> Delete the `test` branch even if the `master` branch (or whichever branch
     is currently checked out) does not have all commits from the test branch.
 
 Listing branches from a specific remote::
@@ -365,10 +365,10 @@ serve four related but different purposes:
   contain the specified <commit>.
 
 - `--merged` is used to find all branches which can be safely deleted,
-  since those branches are fully contained by HEAD.
+  since those branches are fully contained by `HEAD`.
 
 - `--no-merged` is used to find branches which are candidates for merging
-  into HEAD, since those branches are not fully contained by HEAD.
+  into `HEAD`, since those branches are not fully contained by `HEAD`.
 
 include::ref-reachability-filters.txt[]
 
diff --git a/Documentation/git-bundle.txt b/Documentation/git-bundle.txt
index 4f1e59a3b2..20da47cbd6 100644
--- a/Documentation/git-bundle.txt
+++ b/Documentation/git-bundle.txt
@@ -68,7 +68,7 @@ unbundle <file>::
 	'git rev-list' (and containing a named ref, see SPECIFYING REFERENCES
 	below), that specifies the specific objects and references
 	to transport.  For example, `master~10..master` causes the
-	current master reference to be packaged along with all objects
+	current `master` reference to be packaged along with all objects
 	added since its 10th ancestor commit.  There is no explicit
 	limit to the number of references and objects that may be
 	packaged.
@@ -146,7 +146,7 @@ Assume you want to transfer the history from a repository R1 on machine A
 to another repository R2 on machine B.
 For whatever reason, direct connection between A and B is not allowed,
 but we can move data from A to B via some mechanism (CD, email, etc.).
-We want to update R2 with development made on the branch master in R1.
+We want to update R2 with development made on the branch `master` in R1.
 
 To bootstrap the process, you can first create a bundle that does not have
 any basis. You can use a tag to remember up to what commit you last
@@ -167,7 +167,7 @@ create a new repository on machine B by cloning from it:
 machineB$ git clone -b master /home/me/tmp/file.bundle R2
 ----------------
 
-This will define a remote called "origin" in the resulting repository that
+This will define a remote called `origin` in the resulting repository that
 lets you fetch and pull from the bundle. The $GIT_DIR/config file in R2 will
 have an entry like this:
 
diff --git a/Documentation/git-check-ref-format.txt b/Documentation/git-check-ref-format.txt
index ee6a4144fb..f39622c0da 100644
--- a/Documentation/git-check-ref-format.txt
+++ b/Documentation/git-check-ref-format.txt
@@ -80,7 +80,7 @@ reference name expressions (see linkgit:gitrevisions[7]):
 With the `--branch` option, the command takes a name and checks if
 it can be used as a valid branch name (e.g. when creating a new
 branch). But be cautious when using the
-previous checkout syntax that may refer to a detached HEAD state.
+previous checkout syntax that may refer to a detached `HEAD` state.
 The rule `git check-ref-format --branch $name` implements
 may be stricter than what `git check-ref-format refs/heads/$name`
 says (e.g. a dash may appear at the beginning of a ref component,
diff --git a/Documentation/git-checkout.txt b/Documentation/git-checkout.txt
index 3336b8dace..192dbfe9b0 100644
--- a/Documentation/git-checkout.txt
+++ b/Documentation/git-checkout.txt
@@ -189,7 +189,7 @@ one for the purposes of disambiguation, even if the `<branch>` isn't
 unique across all remotes. Set it to
 e.g. `checkout.defaultRemote=origin` to always checkout remote
 branches from there if `<branch>` is ambiguous but exists on the
-'origin' remote. See also `checkout.defaultRemote` in
+`origin` remote. See also `checkout.defaultRemote` in
 linkgit:git-config[1].
 +
 `--guess` is the default behavior. Use `--no-guess` to disable it.
diff --git a/Documentation/git-cherry-pick.txt b/Documentation/git-cherry-pick.txt
index 0127f56204..6069cc77a0 100644
--- a/Documentation/git-cherry-pick.txt
+++ b/Documentation/git-cherry-pick.txt
@@ -17,7 +17,7 @@ DESCRIPTION
 
 Given one or more existing commits, apply the change each one
 introduces, recording a new commit for each.  This requires your
-working tree to be clean (no modifications from the HEAD commit).
+working tree to be clean (no modifications from the `HEAD` commit).
 
 When it is not obvious how to apply a change, the following
 happens:
@@ -96,7 +96,7 @@ OPTIONS
 	each named commit to your working tree and the index,
 	without making any commit.  In addition, when this
 	option is used, your index does not have to match the
-	HEAD commit.  The cherry-pick is done against the
+	`HEAD` commit.  The cherry-pick is done against the
 	beginning state of your index.
 +
 This is useful when cherry-picking more than one commits'
@@ -117,7 +117,7 @@ effect to your index in a row.
 	earlier `--gpg-sign`.
 
 --ff::
-	If the current HEAD is the same as the parent of the
+	If the current `HEAD` is the same as the parent of the
 	cherry-pick'ed commit, then a fast forward to this commit will
 	be performed.
 
@@ -176,13 +176,13 @@ EXAMPLES
 `git cherry-pick ^HEAD master`::
 
 	Apply the changes introduced by all commits that are ancestors
-	of master but not of HEAD to produce new commits.
+	of `master` but not of `HEAD` to produce new commits.
 
 `git cherry-pick maint next ^master`::
 `git cherry-pick maint master..next`::
 
 	Apply the changes introduced by all commits that are
-	ancestors of maint or next, but not master or any of its
+	ancestors of `maint` or `next`, but not `master` or any of its
 	ancestors.  Note that the latter does not mean `maint` and
 	everything between `master` and `next`; specifically,
 	`maint` will not be used if it is included in `master`.
@@ -190,27 +190,27 @@ EXAMPLES
 `git cherry-pick master~4 master~2`::
 
 	Apply the changes introduced by the fifth and third last
-	commits pointed to by master and create 2 new commits with
+	commits pointed to by `master` and create 2 new commits with
 	these changes.
 
 `git cherry-pick -n master~1 next`::
 
 	Apply to the working tree and the index the changes introduced
-	by the second last commit pointed to by master and by the last
+	by the second last commit pointed to by `master` and by the last
 	commit pointed to by next, but do not create any commit with
 	these changes.
 
 `git cherry-pick --ff ..next`::
 
-	If history is linear and HEAD is an ancestor of next, update
-	the working tree and advance the HEAD pointer to match next.
+	If history is linear and `HEAD` is an ancestor of next, update
+	the working tree and advance the `HEAD` pointer to match next.
 	Otherwise, apply the changes introduced by those commits that
-	are in next but not HEAD to the current branch, creating a new
+	are in next but not `HEAD` to the current branch, creating a new
 	commit for each new change.
 
 `git rev-list --reverse master -- README | git cherry-pick -n --stdin`::
 
-	Apply the changes introduced by all commits on the master
+	Apply the changes introduced by all commits on the `master`
 	branch that touched README to the working tree and index,
 	so the result can be inspected and made into a single new
 	commit if suitable.
diff --git a/Documentation/git-cherry.txt b/Documentation/git-cherry.txt
index 0ea921a593..4374f398fa 100644
--- a/Documentation/git-cherry.txt
+++ b/Documentation/git-cherry.txt
@@ -31,10 +31,10 @@ OPTIONS
 
 <upstream>::
 	Upstream branch to search for equivalent commits.
-	Defaults to the upstream branch of HEAD.
+	Defaults to the upstream branch of `HEAD`.
 
 <head>::
-	Working branch; defaults to HEAD.
+	Working branch; defaults to `HEAD`.
 
 <limit>::
 	Do not report commits up to (and including) limit.
diff --git a/Documentation/git-clone.txt b/Documentation/git-clone.txt
index 22334771d1..8cd602a852 100644
--- a/Documentation/git-clone.txt
+++ b/Documentation/git-clone.txt
@@ -30,8 +30,8 @@ currently active branch.
 
 After the clone, a plain `git fetch` without arguments will update
 all the remote-tracking branches, and a `git pull` without
-arguments will in addition merge the remote master branch into the
-current master branch, if any (this is untrue when `--single-branch`
+arguments will in addition merge the remote `master` branch into the
+current `master` branch, if any (this is untrue when `--single-branch`
 is given; see below).
 
 This default configuration is achieved by creating references to
@@ -147,7 +147,7 @@ objects from the source repository into a pack in the cloned repository.
 
 -n::
 --no-checkout::
-	No checkout of HEAD is performed after the clone is complete.
+	No checkout of `HEAD` is performed after the clone is complete.
 
 --[no-]reject-shallow::
 	Fail if the source repository is a shallow repository.
@@ -198,11 +198,11 @@ objects from the source repository into a pack in the cloned repository.
 
 -b <name>::
 --branch <name>::
-	Instead of pointing the newly created HEAD to the branch pointed
-	to by the cloned repository's HEAD, point to `<name>` branch
+	Instead of pointing the newly created `HEAD` to the branch pointed
+	to by the cloned repository's `HEAD`, point to `<name>` branch
 	instead. In a non-bare repository, this is the branch that will
 	be checked out.
-	`--branch` can also take tags and detaches the HEAD at that commit
+	`--branch` can also take tags and detaches the `HEAD` at that commit
 	in the resulting repository.
 
 -u <upload-pack>::
@@ -224,7 +224,7 @@ objects from the source repository into a pack in the cloned repository.
 	linkgit:git-config[1] (e.g., `core.eol=true`). If multiple
 	values are given for the same key, each value will be written to
 	the config file. This makes it safe, for example, to add
-	additional fetch refspecs to the origin remote.
+	additional fetch refspecs to the `origin` remote.
 +
 Due to limitations of the current implementation, some configuration
 variables do not take effect until after the initial fetch and checkout.
@@ -253,7 +253,7 @@ corresponding `--mirror` and `--no-tags` options instead.
 	branch remote's `HEAD` points at.
 	Further fetches into the resulting repository will only update the
 	remote-tracking branch for the branch this option was used for the
-	initial cloning.  If the HEAD at the remote did not point at any
+	initial cloning.  If the `HEAD` at the remote did not point at any
 	branch when `--single-branch` clone was made, no remote-tracking
 	branch is created.
 
diff --git a/Documentation/git-commit-tree.txt b/Documentation/git-commit-tree.txt
index 2e2c581098..b76a825c94 100644
--- a/Documentation/git-commit-tree.txt
+++ b/Documentation/git-commit-tree.txt
@@ -36,7 +36,7 @@ While a tree represents a particular directory state of a working
 directory, a commit represents that state in "time", and explains how
 to get there.
 
-Normally a commit would identify a new "HEAD" state, and while Git
+Normally a commit would identify a new `HEAD` state, and while Git
 doesn't care where you save the note about that state, in practice we
 tend to just write the result to the file that is pointed at by
 `.git/HEAD`, so that we can always see what the last committed
diff --git a/Documentation/git-commit.txt b/Documentation/git-commit.txt
index 6d0d663b50..f507ae00a1 100644
--- a/Documentation/git-commit.txt
+++ b/Documentation/git-commit.txt
@@ -21,9 +21,9 @@ DESCRIPTION
 -----------
 Create a new commit containing the current contents of the index and
 the given log message describing the changes. The new commit is a
-direct child of HEAD, usually the tip of the current branch, and the
+direct child of `HEAD`, usually the tip of the current branch, and the
 branch is updated to point to it (unless no branch is associated with
-the working tree, in which case HEAD is "detached" as described in
+the working tree, in which case `HEAD` is "detached" as described in
 linkgit:git-checkout[1]).
 
 The content to be committed can be specified in several ways:
@@ -352,7 +352,7 @@ configuration variable documented in linkgit:git-config[1].
 
 -v::
 --verbose::
-	Show unified diff between the HEAD commit and what
+	Show unified diff between the `HEAD` commit and what
 	would be committed at the bottom of the commit message
 	template to help the user describe the commit by reminding
 	what changes the commit has.
diff --git a/Documentation/git-config.txt b/Documentation/git-config.txt
index b93394ea45..e6d70ffda1 100644
--- a/Documentation/git-config.txt
+++ b/Documentation/git-config.txt
@@ -148,7 +148,7 @@ See also <<FILES>>.
 --blob blob::
 	Similar to `--file` but use the given blob instead of a file. E.g.
 	you can use 'master:.gitmodules' to read values from the file
-	'.gitmodules' in the master branch. See "SPECIFYING REVISIONS"
+	'.gitmodules' in the `master` branch. See "SPECIFYING REVISIONS"
 	section in linkgit:gitrevisions[7] for a more complete list of
 	ways to spell blob names.
 
diff --git a/Documentation/git-cvsimport.txt b/Documentation/git-cvsimport.txt
index 143c726511..95fa94de74 100644
--- a/Documentation/git-cvsimport.txt
+++ b/Documentation/git-cvsimport.txt
@@ -35,7 +35,7 @@ Please see the section <<issues,ISSUES>> for further reference.
 
 You should *never* do any work of your own on the branches that are
 created by 'git cvsimport'.  By default initial import will create and populate a
-"master" branch from the CVS repository's main branch which you're free
+`master` branch from the CVS repository's main branch which you're free
 to work with; after that, you need to 'git merge' incremental imports, or
 any CVS branches, yourself.  It is advisable to specify a named remote via
 `-r` to separate and protect the incoming branches.
@@ -71,11 +71,11 @@ OPTIONS
 -r <remote>::
 	The Git remote to import this CVS repository into.
 	Moves all CVS branches into remotes/<remote>/<branch>
-	akin to the way 'git clone' uses 'origin' by default.
+	akin to the way 'git clone' uses `origin` by default.
 
 -o <branch-for-HEAD>::
 	When no remote is specified (via `-r`) the `HEAD` branch
-	from CVS is imported to the 'origin' branch within the Git
+	from CVS is imported to the `origin` branch within the Git
 	repository, as `HEAD` already has a special meaning for Git.
 	When a remote is specified the `HEAD` branch is named
 	remotes/<remote>/master mirroring 'git clone' behaviour.
@@ -200,7 +200,7 @@ Problems related to timestamps:
    to be used for ordering commits changes may show up in the wrong
    order.
  * If any files were ever "cvs import"ed more than once (e.g., import of
-   more than one vendor release) the HEAD contains the wrong content.
+   more than one vendor release) the `HEAD` contains the wrong content.
  * If the timestamp order of different files cross the revision order
    within the commit matching time window the order of commits may be
    wrong.
diff --git a/Documentation/git-cvsserver.txt b/Documentation/git-cvsserver.txt
index 955bae46c9..c6a926d8d2 100644
--- a/Documentation/git-cvsserver.txt
+++ b/Documentation/git-cvsserver.txt
@@ -199,7 +199,7 @@ allowing access over SSH.
 5. Clients should now be able to check out the project. Use the CVS 'module'
    name to indicate what Git 'head' you want to check out.  This also sets the
    name of your newly checked-out directory, unless you tell it otherwise with
-   `-d <dir_name>`.  For example, this checks out 'master' branch to the
+   `-d <dir_name>`.  For example, this checks out `master` branch to the
    `project-master` directory:
 +
 ------
diff --git a/Documentation/git-describe.txt b/Documentation/git-describe.txt
index a3f015743b..7d2649c477 100644
--- a/Documentation/git-describe.txt
+++ b/Documentation/git-describe.txt
@@ -30,17 +30,17 @@ If the given object refers to a blob, it will be described
 as `<commit-ish>:<path>`, such that the blob can be found
 at `<path>` in the `<commit-ish>`, which itself describes the
 first commit in which this blob occurs in a reverse revision walk
-from HEAD.
+from `HEAD`.
 
 OPTIONS
 -------
 <commit-ish>...::
-	Commit-ish object names to describe.  Defaults to HEAD if omitted.
+	Commit-ish object names to describe.  Defaults to `HEAD` if omitted.
 
 --dirty[=<mark>]::
 --broken[=<mark>]::
 	Describe the state of the working tree.  When the working
-	tree matches HEAD, the output is the same as "git describe
+	tree matches `HEAD`, the output is the same as "git describe
 	HEAD".  If the working tree has local modification "-dirty"
 	is appended to it.  If a repository is corrupt and Git
 	cannot determine if there is local modification, Git will
diff --git a/Documentation/git-diff-index.txt b/Documentation/git-diff-index.txt
index 27acb31cbf..10e79a29aa 100644
--- a/Documentation/git-diff-index.txt
+++ b/Documentation/git-diff-index.txt
@@ -31,7 +31,7 @@ include::diff-options.txt[]
 
 --merge-base::
 	Instead of comparing <tree-ish> directly, use the merge base
-	between <tree-ish> and HEAD instead.  <tree-ish> must be a
+	between <tree-ish> and `HEAD` instead.  <tree-ish> must be a
 	commit.
 
 -m::
@@ -53,7 +53,7 @@ CACHED MODE
 -----------
 If `--cached` is specified, it allows you to ask:
 
-	show me the differences between HEAD and the current index
+	show me the differences between `HEAD` and the current index
 	contents (the ones I'd write using 'git write-tree')
 
 For example, let's say that you have worked on your working directory, updated
@@ -89,7 +89,7 @@ the more useful of the two in that what it does can't be emulated with
 a 'git write-tree' + 'git diff-tree'. Thus that's the default mode.
 The non-cached version asks the question:
 
-  show me the differences between HEAD and the currently checked out
+  show me the differences between `HEAD` and the currently checked out
   tree - index contents _and_ files that aren't up to date
 
 which is obviously a very useful question too, since that tells you what
diff --git a/Documentation/git-diff.txt b/Documentation/git-diff.txt
index 9f4b46c910..33a47958bc 100644
--- a/Documentation/git-diff.txt
+++ b/Documentation/git-diff.txt
@@ -45,20 +45,20 @@ files on disk.
 	This form is to view the changes you staged for the next
 	commit relative to the named <commit>.  Typically you
 	would want comparison with the latest commit, so if you
-	do not give <commit>, it defaults to HEAD.
-	If HEAD does not exist (e.g. unborn branches) and
+	do not give <commit>, it defaults to `HEAD`.
+	If `HEAD` does not exist (e.g. unborn branches) and
 	<commit> is not given, it shows all staged changes.
 	`--staged` is a synonym of `--cached`.
 +
 If `--merge-base` is given, instead of using <commit>, use the merge base
-of <commit> and HEAD.  `git diff --merge-base A` is equivalent to
+of <commit> and `HEAD`.  `git diff --merge-base A` is equivalent to
 `git diff $(git merge-base A HEAD)`.
 
 'git diff' [<options>] <commit> [--] [<path>...]::
 
 	This form is to view the changes you have in your
 	working tree relative to the named <commit>.  You can
-	use HEAD to compare it with the latest commit, or a
+	use `HEAD` to compare it with the latest commit, or a
 	branch name to compare with the tip of a different
 	branch.
 
@@ -85,7 +85,7 @@ If `--merge-base` is given, use the merge base of the two commits for the
 	This is synonymous to the earlier form (without the `..`) for
 	viewing the changes between two arbitrary <commit>.  If <commit> on
 	one side is omitted, it will have the same effect as
-	using HEAD instead.
+	using `HEAD` instead.
 
 'git diff' [<options>] <commit>\...<commit> [--] [<path>...]::
 
@@ -93,7 +93,7 @@ If `--merge-base` is given, use the merge base of the two commits for the
 	and up to the second <commit>, starting at a common ancestor
 	of both <commit>.  `git diff A...B` is equivalent to
 	`git diff $(git merge-base A B) B`.  You can omit any one
-	of <commit>, which has the same effect as using HEAD instead.
+	of <commit>, which has the same effect as using `HEAD` instead.
 
 Just in case you are doing something exotic, it should be
 noted that all of the <commit> in the above description, except
@@ -165,8 +165,8 @@ $ git diff HEAD^ HEAD      <3>
 ------------
 +
 <1> Instead of using the tip of the current branch, compare with the
-    tip of "test" branch.
-<2> Instead of comparing with the tip of "test" branch, compare with
+    tip of `test` branch.
+<2> Instead of comparing with the tip of `test` branch, compare with
     the tip of the current branch, but limit the comparison to the
     file "test".
 <3> Compare the version before the last commit and the last commit.
@@ -179,9 +179,9 @@ $ git diff topic..master   <2>
 $ git diff topic...master  <3>
 ------------
 +
-<1> Changes between the tips of the topic and the master branches.
+<1> Changes between the tips of the `topic` and the `master` branches.
 <2> Same as above.
-<3> Changes that occurred on the master branch since when the topic
+<3> Changes that occurred on the `master` branch since when the `topic`
     branch was started off it.
 
 Limiting the diff output::
diff --git a/Documentation/git-fast-export.txt b/Documentation/git-fast-export.txt
index a1c02918f9..3a6a77abac 100644
--- a/Documentation/git-fast-export.txt
+++ b/Documentation/git-fast-export.txt
@@ -126,10 +126,10 @@ by keeping the marks the same across runs.
 
 --reference-excluded-parents::
 	By default, running a command such as `git fast-export
-	master~5..master` will not include the commit master{tilde}5
-	and will make master{tilde}4 no longer have master{tilde}5 as
-	a parent (though both the old master{tilde}4 and new
-	master{tilde}4 will have all the same files).  Use
+	master~5..master` will not include the commit `master~5`
+	and will make `master~4` no longer have `master~5` as
+	a parent (though both the old `master~4` and new
+	`master~4` will have all the same files).  Use
 	`--reference-excluded-parents` to instead have the stream
 	refer to commits in the excluded range of history by their
 	sha1sum.  Note that the resulting stream can only be used by a
@@ -158,10 +158,10 @@ by keeping the marks the same across runs.
 	A list of arguments, acceptable to 'git rev-parse' and
 	'git rev-list', that specifies the specific objects and references
 	to export.  For example, `master~10..master` causes the
-	current master reference to be exported along with all objects
+	current `master` reference to be exported along with all objects
 	added since its 10th ancestor commit and (unless the
 	`--reference-excluded-parents` option is specified) all files
-	common to master{tilde}9 and master{tilde}10.
+	common to `master~9` and `master~10`.
 
 EXAMPLES
 --------
@@ -180,8 +180,8 @@ $ git fast-export master~5..master |
 	git fast-import
 -----------------------------------------------------
 
-This makes a new branch called 'other' from 'master~5..master'
-(i.e. if 'master' has linear history, it will take the last 5 commits).
+This makes a new branch called `other` from `master~5`..`master`
+(i.e. if `master` has linear history, it will take the last 5 commits).
 
 Note that this assumes that none of the blobs and commit messages
 referenced by that revision range contains the string
diff --git a/Documentation/git-fetch-pack.txt b/Documentation/git-fetch-pack.txt
index 88c2b9d426..1f48f89e3e 100644
--- a/Documentation/git-fetch-pack.txt
+++ b/Documentation/git-fetch-pack.txt
@@ -116,7 +116,7 @@ be in a separate packet, and the list must end with a flush packet.
 
 <refs>...::
 	The remote heads to update from. This is relative to
-	$GIT_DIR (e.g. "HEAD", "refs/heads/master").  When
+	$GIT_DIR (e.g. `HEAD`, "refs/heads/master").  When
 	unspecified, update from all heads the remote side has.
 +
 If the remote has enabled the options `uploadpack.allowTipSHA1InWant`,
diff --git a/Documentation/git-fetch.txt b/Documentation/git-fetch.txt
index 85b073a61a..a5ecf00db3 100644
--- a/Documentation/git-fetch.txt
+++ b/Documentation/git-fetch.txt
@@ -87,10 +87,10 @@ This configuration is used in two ways:
   <refspec>s given on the command line determine what are to be
   fetched (e.g. `master` in the example,
   which is a short-hand for `master:`, which in turn means
-  "fetch the 'master' branch but I do not explicitly say what
+  "fetch the `master` branch but I do not explicitly say what
   remote-tracking branch to update with it from the command line"),
   and the example command will
-  fetch _only_ the 'master' branch.  The `remote.<repository>.fetch`
+  fetch _only_ the `master` branch.  The `remote.<repository>.fetch`
   values determine which
   remote-tracking branch, if any, is updated.  When used in this
   way, the `remote.<repository>.fetch` values do not have any
diff --git a/Documentation/git-filter-branch.txt b/Documentation/git-filter-branch.txt
index 2de3511459..e2955bc648 100644
--- a/Documentation/git-filter-branch.txt
+++ b/Documentation/git-filter-branch.txt
@@ -267,7 +267,7 @@ history, so we also add `--ignore-unmatch`:
 git filter-branch --index-filter 'git rm --cached --ignore-unmatch filename' HEAD
 --------------------------------------------------------------------------
 
-Now, you will get the rewritten history saved in HEAD.
+Now, you will get the rewritten history saved in `HEAD`.
 
 To rewrite the repository to look as if `foodir/` had been its project
 root, and discard all other history:
diff --git a/Documentation/git-fmt-merge-msg.txt b/Documentation/git-fmt-merge-msg.txt
index 9004861eae..86fb26dcea 100644
--- a/Documentation/git-fmt-merge-msg.txt
+++ b/Documentation/git-fmt-merge-msg.txt
@@ -65,8 +65,8 @@ $ git fetch origin master
 $ git fmt-merge-msg --log <$GIT_DIR/FETCH_HEAD
 ---------
 
-Print a log message describing a merge of the "master" branch from
-the "origin" remote.
+Print a log message describing a merge of the `master` branch from
+the `origin` remote.
 
 
 SEE ALSO
diff --git a/Documentation/git-for-each-ref.txt b/Documentation/git-for-each-ref.txt
index e035edf11d..4bde4f9d05 100644
--- a/Documentation/git-for-each-ref.txt
+++ b/Documentation/git-for-each-ref.txt
@@ -76,18 +76,18 @@ OPTIONS
 
 --merged[=<object>]::
 	Only list refs whose tips are reachable from the
-	specified commit (HEAD if not specified).
+	specified commit (`HEAD` if not specified).
 
 --no-merged[=<object>]::
 	Only list refs whose tips are not reachable from the
-	specified commit (HEAD if not specified).
+	specified commit (`HEAD` if not specified).
 
 --contains[=<object>]::
-	Only list refs which contain the specified commit (HEAD if not
+	Only list refs which contain the specified commit (`HEAD` if not
 	specified).
 
 --no-contains[=<object>]::
-	Only list refs which don't contain the specified commit (HEAD
+	Only list refs which don't contain the specified commit (`HEAD`
 	if not specified).
 
 --ignore-case::
@@ -169,7 +169,7 @@ push::
 	ref is configured.
 
 HEAD::
-	'*' if HEAD matches current ref (the checked out branch), ' '
+	'*' if `HEAD` matches current ref (the checked out branch), ' '
 	otherwise.
 
 color::
@@ -201,7 +201,7 @@ if::
 	everything after %(else) is printed. We ignore space when
 	evaluating the string before %(then), this is useful when we
 	use the %(HEAD) atom which prints either "*" or " " and we
-	want to apply the 'if' condition only on the 'HEAD' ref.
+	want to apply the 'if' condition only on the `HEAD` ref.
 	Append ":equals=<string>" or ":notequals=<string>" to compare
 	the value between the %(if:...) and %(then) atoms with the
 	given string.
diff --git a/Documentation/git-format-patch.txt b/Documentation/git-format-patch.txt
index ca500ba72c..fd7c6c705b 100644
--- a/Documentation/git-format-patch.txt
+++ b/Documentation/git-format-patch.txt
@@ -706,7 +706,7 @@ $ git format-patch -k --stdout R1..R2 | git am -3 -k
 ------------
 
 * Extract all commits which are in the current branch but not in the
-  origin branch:
+  `origin` branch:
 +
 ------------
 $ git format-patch origin
@@ -714,7 +714,7 @@ $ git format-patch origin
 +
 For each commit a separate file is created in the current directory.
 
-* Extract all commits that lead to 'origin' since the inception of the
+* Extract all commits that lead to `origin` since the inception of the
   project:
 +
 ------------
diff --git a/Documentation/git-http-push.txt b/Documentation/git-http-push.txt
index 5dd4d2b63a..7ba8ea2383 100644
--- a/Documentation/git-http-push.txt
+++ b/Documentation/git-http-push.txt
@@ -44,12 +44,12 @@ OPTIONS
 -d::
 -D::
 	Remove <ref> from remote repository.  The specified branch
-	cannot be the remote HEAD.  If `-d` is specified the following
+	cannot be the remote `HEAD`.  If `-d` is specified the following
 	other conditions must also be met:
 
-	- Remote HEAD must resolve to an object that exists locally
+	- Remote `HEAD` must resolve to an object that exists locally
 	- Specified branch resolves to an object that exists locally
-	- Specified branch is an ancestor of the remote HEAD
+	- Specified branch is an ancestor of the remote `HEAD`
 
 <ref>...::
 	The remote refs to update.
diff --git a/Documentation/git-log.txt b/Documentation/git-log.txt
index 1bbf865a1b..b306dced1c 100644
--- a/Documentation/git-log.txt
+++ b/Documentation/git-log.txt
@@ -152,13 +152,13 @@ EXAMPLES
 `git log --branches --not --remotes=origin`::
 
 	Shows all commits that are in any of local branches but not in
-	any of remote-tracking branches for 'origin' (what you have that
-	origin doesn't).
+	any of remote-tracking branches for `origin` (what you have that
+	`origin` doesn't).
 
 `git log master --not --remotes=*/master`::
 
-	Shows all commits that are in local master but not in any remote
-	repository master branches.
+	Shows all commits that are in local `master` but not in any remote
+	repository `master` branches.
 
 `git log -p -m --first-parent`::
 
diff --git a/Documentation/git-ls-remote.txt b/Documentation/git-ls-remote.txt
index 4cb4e2fd5d..af005ece9a 100644
--- a/Documentation/git-ls-remote.txt
+++ b/Documentation/git-ls-remote.txt
@@ -59,7 +59,7 @@ OPTIONS
 --symref::
 	In addition to the object pointed by it, show the underlying
 	ref pointed by it when showing a symbolic ref.  Currently,
-	upload-pack only shows the symref HEAD, so it will be the only
+	upload-pack only shows the symref `HEAD`, so it will be the only
 	one shown by ls-remote.
 
 --sort=<key>::
diff --git a/Documentation/git-merge.txt b/Documentation/git-merge.txt
index 3819fadac1..58fd091d73 100644
--- a/Documentation/git-merge.txt
+++ b/Documentation/git-merge.txt
@@ -146,7 +146,7 @@ To avoid recording unrelated changes in the merge commit,
 'git pull' and 'git merge' will also abort if there are any changes
 registered in the index relative to the `HEAD` commit.  (Special
 narrow exceptions to this rule may exist depending on which merge
-strategy is in use, but generally, the index must match HEAD.)
+strategy is in use, but generally, the index must match `HEAD`.)
 
 If all named commits are already ancestors of `HEAD`, 'git merge'
 will exit early with the message "Already up to date."
diff --git a/Documentation/git-notes.txt b/Documentation/git-notes.txt
index b0a5ab9a72..ef04e3a8ff 100644
--- a/Documentation/git-notes.txt
+++ b/Documentation/git-notes.txt
@@ -60,7 +60,7 @@ list::
 	This is the default subcommand if no subcommand is given.
 
 add::
-	Add notes for a given object (defaults to HEAD). Abort if the
+	Add notes for a given object (defaults to `HEAD`). Abort if the
 	object already has notes (use `-f` to overwrite existing notes).
 	However, if you're using `add` interactively (using an editor
 	to supply the notes contents), then - instead of aborting -
@@ -69,7 +69,7 @@ add::
 
 copy::
 	Copy the notes for the first object onto the second object (defaults to
-	HEAD). Abort if the second object already has notes, or if the first
+	`HEAD`). Abort if the second object already has notes, or if the first
 	object has none (use -f to overwrite existing notes to the
 	second object). This subcommand is equivalent to:
 	`git notes add [-f] -C $(git notes list <from-object>) <to-object>`
@@ -85,14 +85,14 @@ corresponding <to-object>.  (The optional `<rest>` is ignored so that
 the command can read the input given to the `post-rewrite` hook.)
 
 append::
-	Append to the notes of an existing object (defaults to HEAD).
+	Append to the notes of an existing object (defaults to `HEAD`).
 	Creates a new notes object if needed.
 
 edit::
-	Edit the notes for a given object (defaults to HEAD).
+	Edit the notes for a given object (defaults to `HEAD`).
 
 show::
-	Show the notes for a given object (defaults to HEAD).
+	Show the notes for a given object (defaults to `HEAD`).
 
 merge::
 	Merge the given notes ref into the current notes ref.
@@ -110,7 +110,7 @@ When done, the user can either finalize the merge with
 'git notes merge --abort'.
 
 remove::
-	Remove the notes for given objects (defaults to HEAD). When
+	Remove the notes for given objects (defaults to `HEAD`). When
 	giving zero or one object from the command line, this is
 	equivalent to specifying an empty note message to
 	the `edit` subcommand.
diff --git a/Documentation/git-p4.txt b/Documentation/git-p4.txt
index d9d29a5efa..ec23ab7d96 100644
--- a/Documentation/git-p4.txt
+++ b/Documentation/git-p4.txt
@@ -76,7 +76,7 @@ This:
 2. Imports the full contents of the head revision from the given p4
    depot path into a single commit in the Git branch 'refs/remotes/p4/master'.
 +
-3. Creates a local branch, 'master' from this remote and checks it out.
+3. Creates a local branch, `master` from this remote and checks it out.
 
 To reproduce the entire p4 history in Git, use the '@all' modifier on
 the depot path:
@@ -176,7 +176,7 @@ Unshelve
 Unshelving will take a shelved P4 changelist, and produce the equivalent git commit
 in the branch refs/remotes/p4-unshelved/<changelist>.
 
-The git commit is created relative to the current origin revision (HEAD by default).
+The git commit is created relative to the current origin revision (`HEAD` by default).
 A parent commit is created based on the origin, and then the unshelve commit is
 created based on that.
 
diff --git a/Documentation/git-pull.txt b/Documentation/git-pull.txt
index edecf393d3..d9a5507195 100644
--- a/Documentation/git-pull.txt
+++ b/Documentation/git-pull.txt
@@ -211,7 +211,7 @@ $ git pull
 $ git pull origin
 ------------------------------------------------
 +
-Normally the branch merged in is the HEAD of the remote repository,
+Normally the branch merged in is the `HEAD` of the remote repository,
 but the choice is determined by the branch.<name>.remote and
 branch.<name>.merge options; see linkgit:git-config[1] for details.
 
@@ -221,7 +221,7 @@ branch.<name>.merge options; see linkgit:git-config[1] for details.
 $ git pull origin next
 ------------------------------------------------
 +
-This leaves a copy of `next` temporarily in FETCH_HEAD, and
+This leaves a copy of `next` temporarily in `FETCH_HEAD`, and
 updates the remote-tracking branch `origin/next`.
 The same can be done by invoking fetch and merge:
 +
diff --git a/Documentation/git-push.txt b/Documentation/git-push.txt
index fc91d41ce0..91dcaa108c 100644
--- a/Documentation/git-push.txt
+++ b/Documentation/git-push.txt
@@ -667,9 +667,9 @@ made on `satellite`.
 	(e.g. `refs/heads/experimental`), and delete it.
 
 `git push origin +dev:master`::
-	Update the origin repository's master branch with the dev branch,
+	Update the `origin` repository's `master` branch with the `dev` branch,
 	allowing non-fast-forward updates.  *This can leave unreferenced
-	commits dangling in the origin repository.*  Consider the
+	commits dangling in the `origin` repository.*  Consider the
 	following situation, where a fast-forward is not possible:
 +
 ----
@@ -678,7 +678,7 @@ made on `satellite`.
 		      X---Y---Z  dev
 ----
 +
-The above command would change the origin repository to
+The above command would change the `origin` repository to
 +
 ----
 		      A---B  (unnamed branch)
@@ -688,7 +688,7 @@ The above command would change the origin repository to
 +
 Commits A and B would no longer belong to a branch with a symbolic name,
 and so would be unreachable.  As such, these commits would be removed by
-a `git gc` command on the origin repository.
+a `git gc` command on the `origin` repository.
 
 include::transfer-data-leaks.txt[]
 
diff --git a/Documentation/git-read-tree.txt b/Documentation/git-read-tree.txt
index 3f53688170..d22d3855d1 100644
--- a/Documentation/git-read-tree.txt
+++ b/Documentation/git-read-tree.txt
@@ -118,7 +118,7 @@ OPTIONS
 --[no-]recurse-submodules::
 	Using `--recurse-submodules` will update the content of all active
 	submodules according to the commit recorded in the superproject by
-	calling read-tree recursively, also setting the submodules' HEAD to be
+	calling read-tree recursively, also setting the submodules' `HEAD` to be
 	detached at that commit.
 
 --no-sparse-checkout::
@@ -356,7 +356,7 @@ $ git fetch git://.... linus
 $ LT=`git rev-parse FETCH_HEAD`
 ----------------
 
-Your work tree is still based on your HEAD ($JC), but you have
+Your work tree is still based on your `HEAD` ($JC), but you have
 some edits since.  Three-way merge makes sure that you have not
 added or modified index entries since $JC, and if you haven't,
 then does the right thing.  So with the following sequence:
diff --git a/Documentation/git-rebase.txt b/Documentation/git-rebase.txt
index f063d54623..bd9f15ea26 100644
--- a/Documentation/git-rebase.txt
+++ b/Documentation/git-rebase.txt
@@ -35,13 +35,13 @@ description on `--fork-point` below); or by `git log HEAD`, if the
 
 The current branch is reset to <upstream>, or <newbase> if the
 `--onto` option was supplied.  This has the exact same effect as
-`git reset --hard <upstream>` (or <newbase>).  ORIG_HEAD is set
+`git reset --hard <upstream>` (or <newbase>).  `ORIG_HEAD` is set
 to point at the tip of the branch before the reset.
 
 The commits that were previously saved into the temporary area are
 then reapplied to the current branch, one by one, in order. Note that
-any commits in HEAD which introduce the same textual changes as a commit
-in HEAD..<upstream> are omitted (i.e., a patch already accepted upstream
+any commits in `HEAD` which introduce the same textual changes as a commit
+in `HEAD`..<upstream> are omitted (i.e., a patch already accepted upstream
 with a different commit message or timestamp will be skipped).
 
 It is possible that a merge failure will prevent this process from being
@@ -51,7 +51,7 @@ that caused the merge failure with `git rebase --skip`.  To check out the
 original <branch> and remove the .git/rebase-apply working files, use the
 command `git rebase --abort` instead.
 
-Assume the following history exists and the current branch is "topic":
+Assume the following history exists and the current branch is `topic`:
 
 ------------
           A---B---C topic
@@ -101,9 +101,9 @@ Here is how you would transplant a topic branch based on one
 branch to another, to pretend that you forked the topic branch
 from the latter branch, using `rebase --onto`.
 
-First let's assume your 'topic' is based on branch 'next'.
-For example, a feature developed in 'topic' depends on some
-functionality which is found in 'next'.
+First let's assume your `topic` is based on branch `next`.
+For example, a feature developed in `topic` depends on some
+functionality which is found in `next'.
 
 ------------
     o---o---o---o---o  master
@@ -113,9 +113,9 @@ functionality which is found in 'next'.
                             o---o---o  topic
 ------------
 
-We want to make 'topic' forked from branch 'master'; for example,
-because the functionality on which 'topic' depends was merged into the
-more stable 'master' branch. We want our tree to look like this:
+We want to make `topic` forked from branch `master`; for example,
+because the functionality on which `topic` depends was merged into the
+more stable `master` branch. We want our tree to look like this:
 
 ------------
     o---o---o---o---o  master
@@ -216,7 +216,7 @@ OPTIONS
 +
 As a special case, you may use "A\...B" as a shortcut for the
 merge base of A and B if there is exactly one merge base. You can
-leave out at most one of A and B, in which case it defaults to HEAD.
+leave out at most one of A and B, in which case it defaults to `HEAD`.
 
 --keep-base::
 	Set the starting point at which to create the new commits to the
@@ -242,20 +242,20 @@ See also INCOMPATIBLE OPTIONS below.
 	upstream for the current branch.
 
 <branch>::
-	Working branch; defaults to HEAD.
+	Working branch; defaults to `HEAD`.
 
 --continue::
 	Restart the rebasing process after having resolved a merge conflict.
 
 --abort::
-	Abort the rebase operation and reset HEAD to the original
+	Abort the rebase operation and reset `HEAD` to the original
 	branch. If <branch> was provided when the rebase operation was
-	started, then HEAD will be reset to <branch>. Otherwise HEAD
+	started, then `HEAD` will be reset to <branch>. Otherwise `HEAD`
 	will be reset to where it was when the rebase operation was
 	started.
 
 --quit::
-	Abort the rebase operation but HEAD is not reset back to the
+	Abort the rebase operation but `HEAD` is not reset back to the
 	original branch. The index and working tree are also left
 	unchanged as a result. If a temporary stash entry was created
 	using `--autostash`, it will be saved to the stash list.
@@ -905,7 +905,7 @@ when a command fails due to merge errors. When you are done editing
 and/or resolving conflicts you can continue with `git rebase --continue`.
 
 For example, if you want to reorder the last 5 commits, such that what
-was HEAD~4 becomes the new HEAD. To achieve that, you would call
+was `HEAD~4` becomes the new `HEAD`. To achieve that, you would call
 'git rebase' like this:
 
 ----------------------
@@ -925,8 +925,8 @@ like this:
 ---o---O---P---Q
 ------------------
 
-Suppose you want to rebase the side branch starting at "A" to "Q". Make
-sure that the current HEAD is "B", and call
+Suppose you want to rebase the side branch starting at `A` to `Q`. Make
+sure that the current `HEAD` is `B`, and call
 
 -----------------------------
 $ git rebase -i -r --onto Q O
@@ -990,7 +990,7 @@ add other commits.  This can be used to split a commit into two:
 - Mark the commit you want to split with the action "edit".
 
 - When it comes to editing that commit, execute `git reset HEAD^`.  The
-  effect is that the HEAD is rewound by one, and the index follows suit.
+  effect is that the `HEAD` is rewound by one, and the index follows suit.
   However, the working tree stays the same.
 
 - Now add the changes to the index that you want to have in the first
@@ -1020,8 +1020,8 @@ from the downstream's point of view.  The real fix, however, would be
 to avoid rebasing the upstream in the first place.
 
 To illustrate, suppose you are in a situation where someone develops a
-'subsystem' branch, and you are working on a 'topic' that is dependent
-on this 'subsystem'.  You might end up with a history like the
+`subsystem` branch, and you are working on a `topic` that is dependent
+on this `subsystem`.  You might end up with a history like the
 following:
 
 ------------
@@ -1032,7 +1032,7 @@ following:
 			    *---*---*  topic
 ------------
 
-If 'subsystem' is rebased against 'master', the following happens:
+If `subsystem` is rebased against `master`, the following happens:
 
 ------------
     o---o---o---o---o---o---o---o  master
@@ -1042,8 +1042,8 @@ If 'subsystem' is rebased against 'master', the following happens:
 			    *---*---*  topic
 ------------
 
-If you now continue development as usual, and eventually merge 'topic'
-to 'subsystem', the commits from 'subsystem' will remain duplicated forever:
+If you now continue development as usual, and eventually merge `topic`
+to `subsystem`, the commits from `subsystem` will remain duplicated forever:
 
 ------------
     o---o---o---o---o---o---o---o  master
@@ -1055,20 +1055,20 @@ to 'subsystem', the commits from 'subsystem' will remain duplicated forever:
 
 Such duplicates are generally frowned upon because they clutter up
 history, making it harder to follow.  To clean things up, you need to
-transplant the commits on 'topic' to the new 'subsystem' tip, i.e.,
-rebase 'topic'.  This becomes a ripple effect: anyone downstream from
-'topic' is forced to rebase too, and so on!
+transplant the commits on `topic` to the new `subsystem` tip, i.e.,
+rebase `topic`.  This becomes a ripple effect: anyone downstream from
+`topic` is forced to rebase too, and so on!
 
 There are two kinds of fixes, discussed in the following subsections:
 
 Easy case: The changes are literally the same.::
 
-	This happens if the 'subsystem' rebase was a simple rebase and
+	This happens if the `subsystem` rebase was a simple rebase and
 	had no conflicts.
 
 Hard case: The changes are not the same.::
 
-	This happens if the 'subsystem' rebase had conflicts, or used
+	This happens if the `subsystem` rebase had conflicts, or used
 	`--interactive` to omit, edit, squash, or fixup commits; or
 	if the upstream used one of `commit --amend`, `reset`, or
 	a full history rewriting command like
@@ -1079,13 +1079,13 @@ The easy case
 ~~~~~~~~~~~~~
 
 Only works if the changes (patch IDs based on the diff contents) on
-'subsystem' are literally the same before and after the rebase
-'subsystem' did.
+`subsystem` are literally the same before and after the rebase
+`subsystem` did.
 
 In that case, the fix is easy because 'git rebase' knows to skip
 changes that are already present in the new upstream (unless
 `--reapply-cherry-picks` is given). So if you say
-(assuming you're on 'topic')
+(assuming you're on `topic`)
 ------------
     $ git rebase subsystem
 ------------
@@ -1102,7 +1102,7 @@ you will end up with the fixed history
 The hard case
 ~~~~~~~~~~~~~
 
-Things get more complicated if the 'subsystem' changes do not exactly
+Things get more complicated if the `subsystem` changes do not exactly
 correspond to the ones before the rebase.
 
 NOTE: While an "easy case recovery" sometimes appears to be successful
@@ -1110,26 +1110,26 @@ NOTE: While an "easy case recovery" sometimes appears to be successful
       example, a commit that was removed via `git rebase
       --interactive` will be **resurrected**!
 
-The idea is to manually tell 'git rebase' "where the old 'subsystem'
-ended and your 'topic' began", that is, what the old merge base
+The idea is to manually tell 'git rebase' "where the old `subsystem`
+ended and your `topic` began", that is, what the old merge base
 between them was.  You will have to find a way to name the last commit
-of the old 'subsystem', for example:
+of the old `subsystem`, for example:
 
-* With the 'subsystem' reflog: after 'git fetch', the old tip of
-  'subsystem' is at `subsystem@{1}`.  Subsequent fetches will
+* With the `subsystem` reflog: after 'git fetch', the old tip of
+  `subsystem` is at `subsystem@{1}`.  Subsequent fetches will
   increase the number.  (See linkgit:git-reflog[1].)
 
-* Relative to the tip of 'topic': knowing that your 'topic' has three
-  commits, the old tip of 'subsystem' must be `topic~3`.
+* Relative to the tip of `topic`: knowing that your `topic` has three
+  commits, the old tip of `subsystem` must be `topic~3`.
 
-You can then transplant the old `subsystem..topic` to the new tip by
-saying (for the reflog case, and assuming you are on 'topic' already):
+You can then transplant the old `subsystem`..`topic` to the new tip by
+saying (for the reflog case, and assuming you are on `topic` already):
 ------------
     $ git rebase --onto subsystem subsystem@{1}
 ------------
 
 The ripple effect of a "hard case" recovery is especially bad:
-'everyone' downstream from 'topic' will now have to perform a "hard
+'everyone' downstream from `topic` will now have to perform a "hard
 case" recovery too!
 
 REBASING MERGES
@@ -1193,7 +1193,7 @@ merge -C 6f5e4d report-a-bug # Merge 'report-a-bug'
 In contrast to a regular interactive rebase, there are `label`, `reset`
 and `merge` commands in addition to `pick` ones.
 
-The `label` command associates a label with the current HEAD when that
+The `label` command associates a label with the current `HEAD` when that
 command is executed. These labels are created as worktree-local refs
 (`refs/rewritten/<label>`) that will be deleted when the rebase
 finishes. That way, rebase operations in multiple worktrees linked to
@@ -1201,7 +1201,7 @@ the same repository do not interfere with one another. If the `label`
 command fails, it is rescheduled immediately, with a helpful message how
 to proceed.
 
-The `reset` command resets the HEAD, index and worktree to the specified
+The `reset` command resets the `HEAD`, index and worktree to the specified
 revision. It is similar to an `exec git reset --hard <label>`, but
 refuses to overwrite untracked files. If the `reset` command fails, it is
 rescheduled immediately, with a helpful message how to edit the todo list
@@ -1209,7 +1209,7 @@ rescheduled immediately, with a helpful message how to edit the todo list
 list manually and contains a typo).
 
 The `merge` command will merge the specified revision(s) into whatever
-is HEAD at that time. With `-C <original-commit>`, the commit message of
+is `HEAD` at that time. With `-C <original-commit>`, the commit message of
 the specified merge commit will be used. When the `-C` is changed to
 a lower-case `-c`, the message will be opened in an editor after a
 successful merge so that the user can edit the message.
diff --git a/Documentation/git-reflog.txt b/Documentation/git-reflog.txt
index ff487ff77d..cf1d7e0810 100644
--- a/Documentation/git-reflog.txt
+++ b/Documentation/git-reflog.txt
@@ -28,8 +28,8 @@ depending on the subcommand:
 Reference logs, or "reflogs", record when the tips of branches and
 other references were updated in the local repository. Reflogs are
 useful in various Git commands, to specify the old value of a
-reference. For example, `HEAD@{2}` means "where HEAD used to be two
-moves ago", `master@{one.week.ago}` means "where master used to point
+reference. For example, `HEAD@{2}` means "where `HEAD` used to be two
+moves ago", `master@{one.week.ago}` means "where `master` used to point
 to one week ago in this local repository", and so on. See
 linkgit:gitrevisions[7] for more details.
 
diff --git a/Documentation/git-request-pull.txt b/Documentation/git-request-pull.txt
index 4d4392d0f8..f58164aee1 100644
--- a/Documentation/git-request-pull.txt
+++ b/Documentation/git-request-pull.txt
@@ -37,7 +37,7 @@ OPTIONS
 	The repository URL to be pulled from.
 
 <end>::
-	Commit to end at (defaults to HEAD).  This names the commit
+	Commit to end at (defaults to `HEAD`).  This names the commit
 	at the tip of the history you are asking to be pulled.
 +
 When the repository named by `<url>` has the commit at a tip of a
diff --git a/Documentation/git-rerere.txt b/Documentation/git-rerere.txt
index 4cfc883378..c5c6be5202 100644
--- a/Documentation/git-rerere.txt
+++ b/Documentation/git-rerere.txt
@@ -76,10 +76,10 @@ variables respectively.
 DISCUSSION
 ----------
 
-When your topic branch modifies an overlapping area that your
-master branch (or upstream) touched since your topic branch
-forked from it, you may want to test it with the latest master,
-even before your topic branch is ready to be pushed upstream:
+When your `topic` branch modifies an overlapping area that your
+`master` branch (or upstream) touched since your `topic` branch
+forked from it, you may want to test it with the latest `master`,
+even before your `topic` branch is ready to be pushed upstream:
 
 ------------
               o---*---o topic
@@ -87,8 +87,8 @@ even before your topic branch is ready to be pushed upstream:
     o---o---o---*---o---o master
 ------------
 
-For such a test, you need to merge master and topic somehow.
-One way to do it is to pull master into the topic branch:
+For such a test, you need to merge `master` and `topic` somehow.
+One way to do it is to pull `master` into the `topic` branch:
 
 ------------
 	$ git switch topic
@@ -106,9 +106,9 @@ work-in-progress still works with what is in the latest master.
 
 After this test merge, there are two ways to continue your work
 on the topic.  The easiest is to build on top of the test merge
-commit `+`, and when your work in the topic branch is finally
-ready, pull the topic branch into master, and/or ask the
-upstream to pull from you.  By that time, however, the master or
+commit `+`, and when your work in the `topic` branch is finally
+ready, pull the `topic` branch into `master`, and/or ask the
+upstream to pull from you.  By that time, however, the `master` or
 the upstream might have been advanced since the test merge `+`,
 in which case the final commit graph would look like this:
 
@@ -124,14 +124,14 @@ in which case the final commit graph would look like this:
     o---o---o---*---o---o---o---o---+ master
 ------------
 
-When your topic branch is long-lived, however, your topic branch
-would end up having many such "Merge from master" commits on it,
+When your `topic` branch is long-lived, however, your `topic` branch
+would end up having many such "Merge from `master`" commits on it,
 which would unnecessarily clutter the development history.
 Readers of the Linux kernel mailing list may remember that Linus
 complained about such too frequent test merges when a subsystem
 maintainer asked to pull from a branch full of "useless merges".
 
-As an alternative, to keep the topic branch clean of test
+As an alternative, to keep the `topic` branch clean of test
 merges, you could blow away the test merge, and keep building on
 top of the tip before the test merge:
 
@@ -148,8 +148,8 @@ top of the tip before the test merge:
     o---o---o---*---o---o---o---o---+ master
 ------------
 
-This would leave only one merge commit when your topic branch is
-finally ready and merged into the master branch.  This merge
+This would leave only one merge commit when your `topic` branch is
+finally ready and merged into the `master` branch.  This merge
 would require you to resolve the conflict, introduced by the
 commits marked with `*`.  However, this conflict is often the
 same conflict you resolved when you created the test merge you
@@ -163,7 +163,7 @@ usual conflict markers `<<<<<<<`, `=======`, and `>>>>>>>` in
 them.  Later, after you are done resolving the conflicts,
 running 'git rerere' again will record the resolved state of these
 files.  Suppose you did this when you created the test merge of
-master into the topic branch.
+`master` into the `topic` branch.
 
 Next time, after seeing the same conflicted automerge,
 running 'git rerere' will perform a three-way merge between the
@@ -185,12 +185,12 @@ the rerere.enabled config variable).
 
 In our example, when you do the test merge, the manual
 resolution is recorded, and it will be reused when you do the
-actual merge later with the updated master and topic branch, as long
+actual merge later with the updated `master` and `topic` branch, as long
 as the recorded resolution is still applicable.
 
 The information 'git rerere' records is also used when running
 'git rebase'.  After blowing away the test merge and continuing
-development on the topic branch:
+development on the `topic` branch:
 
 ------------
               o---*---o-------o---o topic
diff --git a/Documentation/git-reset.txt b/Documentation/git-reset.txt
index e9e816a986..4a55d1f1ac 100644
--- a/Documentation/git-reset.txt
+++ b/Documentation/git-reset.txt
@@ -3,7 +3,7 @@ git-reset(1)
 
 NAME
 ----
-git-reset - Reset current HEAD to the specified state
+git-reset - Reset current `HEAD` to the specified state
 
 SYNOPSIS
 --------
@@ -92,7 +92,7 @@ but carries forward unmerged index entries.
 	When the working tree is updated, using `--recurse-submodules` will
 	also recursively reset the working tree of all active submodules
 	according to the commit recorded in the superproject, also setting
-	the submodules' HEAD to be detached at that commit.
+	the submodules' `HEAD` to be detached at that commit.
 --
 
 See "Reset, restore and revert" in linkgit:git[1] for the differences
@@ -187,7 +187,7 @@ $ git switch topic/wip          <3>
     to be in the `master` branch.  You want to continue polishing
     them in a topic branch, so create `topic/wip` branch off of the
     current `HEAD`.
-<2> Rewind the master branch to get rid of those three commits.
+<2> Rewind the `master` branch to get rid of those three commits.
 <3> Switch to `topic/wip` branch and keep working.
 
 Undo commits permanently::
diff --git a/Documentation/git-rev-parse.txt b/Documentation/git-rev-parse.txt
index 4b1af8c5a6..7c3c0e0007 100644
--- a/Documentation/git-rev-parse.txt
+++ b/Documentation/git-rev-parse.txt
@@ -155,7 +155,7 @@ for another option.
 	This is similar to `--symbolic`, but it omits input that
 	are not refs (i.e. branch or tag names; or more
 	explicitly disambiguating "heads/master" form, when you
-	want to name the "master" branch when there is an
+	want to name the `master` branch when there is an
 	unfortunately named tag "master"), and show them as full
 	refnames (e.g. "refs/heads/master").
 
@@ -475,7 +475,7 @@ This will error out if $REV is empty or not a valid revision.
 $ git rev-parse --default master --verify --end-of-options $REV
 ------------
 +
-but if $REV is empty, the commit object name from master will be printed.
+but if $REV is empty, the commit object name from `master` will be printed.
 
 GIT
 ---
diff --git a/Documentation/git-revert.txt b/Documentation/git-revert.txt
index bb92a4a451..a232db1d98 100644
--- a/Documentation/git-revert.txt
+++ b/Documentation/git-revert.txt
@@ -17,7 +17,7 @@ DESCRIPTION
 Given one or more existing commits, revert the changes that the
 related patches introduce, and record some new commits that record
 them.  This requires your working tree to be clean (no modifications
-from the HEAD commit).
+from the `HEAD` commit).
 
 Note: 'git revert' is used to record some new commits to reverse the
 effect of some earlier commits (often only a faulty one).  If you want to
@@ -82,7 +82,7 @@ more details.
 	to revert the named commits to your working tree
 	and the index, but does not make the commits.  In addition,
 	when this option is used, your index does not have to match
-	the HEAD commit.  The revert is done against the
+	the `HEAD` commit.  The revert is done against the
 	beginning state of your index.
 +
 This is useful when reverting more than one commits'
@@ -125,13 +125,13 @@ EXAMPLES
 --------
 `git revert HEAD~3`::
 
-	Revert the changes specified by the fourth last commit in HEAD
+	Revert the changes specified by the fourth last commit in `HEAD`
 	and create a new commit with the reverted changes.
 
 `git revert -n master~5..master~2`::
 
 	Revert the changes done by commits from the fifth last commit
-	in master (included) to the third last commit in master
+	in `master` (included) to the third last commit in `master`
 	(included), but do not create any commit with the reverted
 	changes. The revert only modifies the working tree and the
 	index.
diff --git a/Documentation/git-rm.txt b/Documentation/git-rm.txt
index e7ff1b5fbd..ea1f349a87 100644
--- a/Documentation/git-rm.txt
+++ b/Documentation/git-rm.txt
@@ -153,7 +153,7 @@ the submodule's history. If it exists the submodule.<name> section
 in the linkgit:gitmodules[5] file will also be removed and that file
 will be staged (unless `--cached` or `-n` are used).
 
-A submodule is considered up to date when the HEAD is the same as
+A submodule is considered up to date when the `HEAD` is the same as
 recorded in the index, no tracked files are modified and no untracked
 files that aren't ignored are present in the submodules work tree.
 Ignored files are deemed expendable and won't stop a submodule's work
diff --git a/Documentation/git-show-ref.txt b/Documentation/git-show-ref.txt
index 8c739adc70..9d7ba22603 100644
--- a/Documentation/git-show-ref.txt
+++ b/Documentation/git-show-ref.txt
@@ -35,7 +35,7 @@ OPTIONS
 
 --head::
 
-	Show the HEAD reference, even if it would normally be filtered out.
+	Show the `HEAD` reference, even if it would normally be filtered out.
 
 --heads::
 --tags::
diff --git a/Documentation/git-show.txt b/Documentation/git-show.txt
index 2b1bc7288d..b7a6f9b544 100644
--- a/Documentation/git-show.txt
+++ b/Documentation/git-show.txt
@@ -35,7 +35,7 @@ This manual page describes only the most frequently used options.
 OPTIONS
 -------
 <object>...::
-	The names of objects to show (defaults to 'HEAD').
+	The names of objects to show (defaults to `HEAD`).
 	For a more complete list of ways to spell object names, see
 	"SPECIFYING REVISIONS" section in linkgit:gitrevisions[7].
 
diff --git a/Documentation/git-stash.txt b/Documentation/git-stash.txt
index a8c8c32f1e..a2b69ae00f 100644
--- a/Documentation/git-stash.txt
+++ b/Documentation/git-stash.txt
@@ -50,7 +50,7 @@ COMMANDS
 push [-p|--patch] [-k|--[no-]keep-index] [-u|--include-untracked] [-a|--all] [-q|--quiet] [-m|--message <message>] [--pathspec-from-file=<file> [--pathspec-file-nul]] [--] [<pathspec>...]::
 
 	Save your local modifications to a new 'stash entry' and roll them
-	back to HEAD (in the working tree and in the index).
+	back to `HEAD` (in the working tree and in the index).
 	The <message> part is optional and gives
 	the description along with the stashed state.
 +
@@ -121,7 +121,7 @@ branch <branchname> [<stash>]::
 +
 This is useful if the branch on which you ran `git stash push` has
 changed enough that `git stash apply` fails due to conflicts. Since
-the stash entry is applied on top of the commit that was HEAD at the
+the stash entry is applied on top of the commit that was `HEAD` at the
 time `git stash` was run, it restores the originally stashed state
 with no conflicts.
 
@@ -192,7 +192,7 @@ All changes already added to the index are left intact.
 --patch::
 	This option is only valid for `push` and `save` commands.
 +
-Interactively select hunks from the diff between HEAD and the
+Interactively select hunks from the diff between `HEAD` and the
 working tree to be stashed.  The stash entry is constructed such
 that its index state is the same as the index state of your
 repository, and its worktree contains only the changes you selected
@@ -237,7 +237,7 @@ Separates pathspec from options for disambiguation purposes.
 +
 The new stash entry records the modified states only for the files
 that match the pathspec.  The index entries and working tree files
-are then rolled back to the state in HEAD only for these files,
+are then rolled back to the state in `HEAD` only for these files,
 too, leaving files that do not match the pathspec intact.
 +
 For more details, see the 'pathspec' entry in linkgit:gitglossary[7].
diff --git a/Documentation/git-status.txt b/Documentation/git-status.txt
index 2fa3bc58f7..4b1951c5ce 100644
--- a/Documentation/git-status.txt
+++ b/Documentation/git-status.txt
@@ -14,7 +14,7 @@ SYNOPSIS
 DESCRIPTION
 -----------
 Displays paths that have differences between the index file and the
-current HEAD commit, paths that have differences between the working
+current `HEAD` commit, paths that have differences between the working
 tree and the index file, and paths in the working tree that are not
 tracked by Git (and are not ignored by linkgit:gitignore[5]). The first
 are what you _would_ commit by running `git commit`; the second and
@@ -88,7 +88,7 @@ configuration variable documented in linkgit:git-config[1].
 	Ignore changes to submodules when looking for changes. <when> can be
 	either "none", "untracked", "dirty" or "all", which is the default.
 	Using "none" will consider the submodule modified when it either contains
-	untracked or modified files or its HEAD differs from the commit recorded
+	untracked or modified files or its `HEAD` differs from the commit recorded
 	in the superproject and can be used to override any settings of the
 	'ignore' option in linkgit:git-config[1] or linkgit:gitmodules[5]. When
 	"untracked" is used submodules are not considered dirty when they only
@@ -242,7 +242,7 @@ U           U    unmerged, both modified
 ....
 
 Submodules have more state and instead report
-		M    the submodule has a different HEAD than
+		M    the submodule has a different `HEAD` than
 		     recorded in the index
 		m    the submodule has modified content
 		?    the submodule has untracked files
@@ -341,10 +341,10 @@ Field       Meaning
 	    <c> is "C" if the commit changed; otherwise ".".
 	    <m> is "M" if it has tracked changes; otherwise ".".
 	    <u> is "U" if there are untracked changes; otherwise ".".
-<mH>        The octal file mode in HEAD.
+<mH>        The octal file mode in `HEAD`.
 <mI>        The octal file mode in the index.
 <mW>        The octal file mode in the worktree.
-<hH>        The object name in HEAD.
+<hH>        The object name in `HEAD`.
 <hI>        The object name in the index.
 <X><score>  The rename or copy score (denoting the percentage
 	    of similarity between the source and target of the
@@ -354,7 +354,7 @@ Field       Meaning
 <sep>       When the `-z` option is used, the 2 pathnames are separated
 	    with a NUL (ASCII 0x00) byte; otherwise, a tab (ASCII 0x09)
 	    byte separates them.
-<origPath>  The pathname in the commit at HEAD or in the index.
+<origPath>  The pathname in the commit at `HEAD` or in the index.
 	    This is only present in a renamed/copied entry, and
 	    tells where the renamed/copied contents came from.
 --------------------------------------------------------
diff --git a/Documentation/git-submodule.txt b/Documentation/git-submodule.txt
index 1bcde161ca..891c9e48e5 100644
--- a/Documentation/git-submodule.txt
+++ b/Documentation/git-submodule.txt
@@ -39,7 +39,7 @@ add [-b <branch>] [-f|--force] [--name <name>] [--reference <repository>] [--dep
 	to the changeset to be committed next to the current
 	project: the current project is termed the "superproject".
 +
-<repository> is the URL of the new submodule's origin repository.
+<repository> is the URL of the new submodule's `origin` repository.
 This may be either an absolute URL, or (if it begins with ./
 or ../), the location relative to the superproject's default remote
 repository (Please note that to specify a repository 'foo.git'
@@ -50,7 +50,7 @@ of relative URLs in Git is identical to that of relative directories).
 +
 The default remote is the remote of the remote-tracking branch
 of the current branch. If no such remote-tracking branch exists or
-the HEAD is detached, "origin" is assumed to be the default remote.
+the `HEAD` is detached, `origin` is assumed to be the default remote.
 If the superproject doesn't have a default remote configured
 the superproject is its own authoritative upstream and the current
 working directory is used instead.
@@ -88,7 +88,7 @@ If `--recursive` is specified, this command will recurse into nested
 submodules, and show their status as well.
 +
 If you are only interested in changes of the currently initialized
-submodules with respect to the commit recorded in the index or the HEAD,
+submodules with respect to the commit recorded in the index or the `HEAD`,
 linkgit:git-status[1] and linkgit:git-diff[1] will provide that information
 too (and can also report changes to a submodule's work tree).
 
@@ -147,7 +147,7 @@ The 'update' procedures supported both from the command line as well as
 through the `submodule.<name>.update` configuration are:
 
 	checkout;; the commit recorded in the superproject will be
-	    checked out in the submodule on a detached HEAD.
+	    checked out in the submodule on a detached `HEAD`.
 +
 If `--force` is specified, the submodule will be checked out (using
 `git checkout --force`), even if the commit specified
@@ -183,7 +183,7 @@ set-branch (-d|--default) [--] <path>::
 	Sets the default remote tracking branch for the submodule. The
 	`--branch` option allows the remote branch to be specified. The
 	`--default` option removes the submodule.<name>.branch configuration
-	key, which causes the tracking branch to default to the remote 'HEAD'.
+	key, which causes the tracking branch to default to the remote `HEAD`.
 
 set-url [--] <path> <newurl>::
 	Sets the URL of the specified submodule to <newurl>. Then, it will
@@ -191,7 +191,7 @@ set-url [--] <path> <newurl>::
 	configuration.
 
 summary [--cached|--files] [(-n|--summary-limit) <n>] [commit] [--] [<path>...]::
-	Show commit summary between the given commit (defaults to HEAD) and
+	Show commit summary between the given commit (defaults to `HEAD`) and
 	working tree/index. For a submodule in question, a series of commits
 	in the submodule between the given super project commit and the
 	index or working tree (switched by `--cached`) are shown. If the option
@@ -284,7 +284,7 @@ OPTIONS
 	`.gitmodules` for `update --remote`.  A special value of `.` is used to
 	indicate that the name of the branch in the submodule should be the
 	same name as the current branch in the current repository.  If the
-	option is not specified, it defaults to the remote 'HEAD'.
+	option is not specified, it defaults to the remote `HEAD`.
 
 -f::
 --force::
@@ -301,12 +301,12 @@ OPTIONS
 
 --cached::
 	This option is only valid for status and summary commands.  These
-	commands typically use the commit found in the submodule HEAD, but
+	commands typically use the commit found in the submodule `HEAD`, but
 	with this option, the commit stored in the index is used instead.
 
 --files::
 	This option is only valid for the summary command. This command
-	compares the commit in the index with that in the submodule HEAD
+	compares the commit in the index with that in the submodule `HEAD`
 	when this option is used.
 
 -n::
@@ -339,7 +339,7 @@ SHA-1.  If you don't want to fetch, you should use `submodule update
 --remote --no-fetch`.
 +
 Use this option to integrate changes from the upstream subproject with
-your submodule's current HEAD.  Alternatively, you can run `git pull`
+your submodule's current `HEAD`.  Alternatively, you can run `git pull`
 from the submodule, which is equivalent except for the remote branch
 name: `update --remote` uses the default upstream repository and
 `submodule.<name>.branch`, while `git pull` uses the submodule's
@@ -355,7 +355,7 @@ the submodule itself.
 
 --checkout::
 	This option is only valid for the update command.
-	Checkout the commit recorded in the superproject on a detached HEAD
+	Checkout the commit recorded in the superproject on a detached `HEAD`
 	in the submodule. This is the default behavior, the main use of
 	this option is to override `submodule.$name.update` when set to
 	a value other than `checkout`.
@@ -365,7 +365,7 @@ the submodule itself.
 --merge::
 	This option is only valid for the update command.
 	Merge the commit recorded in the superproject into the current branch
-	of the submodule. If this option is given, the submodule's HEAD will
+	of the submodule. If this option is given, the submodule's `HEAD` will
 	not be detached. If a merge failure prevents this process, you will
 	have to resolve the resulting conflicts within the submodule with the
 	usual conflict resolution tools.
@@ -375,7 +375,7 @@ the submodule itself.
 --rebase::
 	This option is only valid for the update command.
 	Rebase the current branch onto the commit recorded in the
-	superproject. If this option is given, the submodule's HEAD will not
+	superproject. If this option is given, the submodule's `HEAD` will not
 	be detached. If a merge failure prevents this process, you will have
 	to resolve these failures with linkgit:git-rebase[1].
 	If the key `submodule.$name.update` is set to `rebase`, this option is
@@ -432,7 +432,7 @@ options carefully.
 
 --[no-]single-branch::
 	This option is only valid for the update command.
-	Clone only one branch during update: HEAD or one specified by `--branch`.
+	Clone only one branch during update: `HEAD` or one specified by `--branch`.
 
 <path>...::
 	Paths to submodule(s). When specified this will restrict the command
diff --git a/Documentation/git-svn.txt b/Documentation/git-svn.txt
index 3f55e9c419..f316b7dfc4 100644
--- a/Documentation/git-svn.txt
+++ b/Documentation/git-svn.txt
@@ -140,7 +140,7 @@ repository, either don't use this option or you should both use it in
 the same local time zone.
 
 --parent;;
-	Fetch only from the SVN parent of the current HEAD.
+	Fetch only from the SVN parent of the current `HEAD`.
 
 --ignore-refs=<regex>;;
 	Ignore refs for branches or tags matching the Perl regular
@@ -224,7 +224,7 @@ config key: svn-remote.<name>.include-paths
 	Default: ".gitignore"
 
 'rebase'::
-	This fetches revisions from the SVN parent of the current HEAD
+	This fetches revisions from the SVN parent of the current `HEAD`
 	and rebases the current (uncommitted to SVN) work against it.
 +
 This works similarly to `svn update` or 'git pull' except that
@@ -394,7 +394,7 @@ Any other arguments are passed directly to 'git log'
 	output of this mode is format-compatible with the output of
 	`svn blame' by default. Like the SVN blame command,
 	local uncommitted changes in the working tree are ignored;
-	the version of the file in the HEAD revision is annotated. Unknown
+	the version of the file in the `HEAD` revision is annotated. Unknown
 	arguments are passed directly to 'git blame'.
 +
 --git-format;;
@@ -558,7 +558,7 @@ git svn fetch
        r2---r3---A---B master
 ------------
 +
-Then fixup "master" with 'git rebase'.
+Then fixup `master` with 'git rebase'.
 Do NOT use 'git merge' or your history will not be compatible with a
 future 'dcommit'!
 +
@@ -954,7 +954,7 @@ HANDLING OF SVN BRANCHES
 If 'git svn' is configured to fetch branches (and `--follow-branches`
 is in effect), it sometimes creates multiple Git branches for one
 SVN branch, where the additional branches have names of the form
-'branchname@nnn' (with nnn an SVN revision number).  These additional
+`branchname@nnn` (with nnn an SVN revision number).  These additional
 branches are created if 'git svn' cannot find a parent commit for the
 first commit in an SVN branch, to connect the branch to the history of
 the other branches.
@@ -976,7 +976,7 @@ branch was copied from and create appropriate Git commits.  This is
 indicated by the message "Initializing parent: <branchname>".
 
 Additionally, it will create a special branch named
-'<branchname>@<SVN-Revision>', where <SVN-Revision> is the SVN revision
+`<branchname>@<SVN-Revision>`, where <SVN-Revision> is the SVN revision
 number the branch was copied from.  This branch will point to the newly
 created parent commit of the branch.  If in SVN the branch was deleted
 and later recreated from a different version, there will be multiple
@@ -988,12 +988,12 @@ single SVN revision.
 An example: in an SVN repository with a standard
 trunk/tags/branches layout, a directory trunk/sub is created in r.100.
 In r.200, trunk/sub is branched by copying it to branches/. 'git svn
-clone -s' will then create a branch 'sub'. It will also create new Git
+clone -s' will then create a branch `sub`. It will also create new Git
 commits for r.100 through r.199 and use these as the history of branch
-'sub'. Thus there will be two Git commits for each revision from r.100
+`sub`. Thus there will be two Git commits for each revision from r.100
 to r.199 (one containing trunk/, one containing trunk/sub/). Finally,
-it will create a branch 'sub@200' pointing to the new parent commit of
-branch 'sub' (i.e. the commit for r.200 and trunk/sub/).
+it will create a branch `sub@200` pointing to the new parent commit of
+branch `sub` (i.e. the commit for r.200 and trunk/sub/).
 
 CAVEATS
 -------
diff --git a/Documentation/git-switch.txt b/Documentation/git-switch.txt
index 5c438cd505..5737f25cf6 100644
--- a/Documentation/git-switch.txt
+++ b/Documentation/git-switch.txt
@@ -42,7 +42,7 @@ OPTIONS
 <start-point>::
 	The starting point for the new branch. Specifying a
 	`<start-point>` allows you to create a branch based on some
-	other point in history than where HEAD currently points. (Or,
+	other point in history than where `HEAD` currently points. (Or,
 	in the case of `--detach`, allows you to inspect and detach
 	from some other point.)
 +
@@ -99,7 +99,7 @@ the `checkout.defaultRemote` configuration variable, we'll use that
 one for the purposes of disambiguation, even if the `<branch>` isn't
 unique across all remotes. Set it to e.g. `checkout.defaultRemote=origin`
 to always checkout remote branches from there if `<branch>` is
-ambiguous but exists on the 'origin' remote. See also
+ambiguous but exists on the `origin` remote. See also
 `checkout.defaultRemote` in linkgit:git-config[1].
 +
 `--guess` is the default behavior. Use `--no-guess` to disable it.
@@ -193,7 +193,7 @@ name, the guessing is aborted.  You can explicitly give a name with
 EXAMPLES
 --------
 
-The following command switches to the "master" branch:
+The following command switches to the `master` branch:
 
 ------------
 $ git switch master
@@ -228,14 +228,14 @@ registered in your index file, so `git diff` would show you what
 changes you made since the tip of the new branch.
 
 To switch back to the previous branch before we switched to mytopic
-(i.e. "master" branch):
+(i.e. `master` branch):
 
 ------------
 $ git switch -
 ------------
 
 You can grow a new branch from any commit. For example, switch to
-"HEAD~3" and create branch "fixup":
+`HEAD~3` and create branch `fixup`:
 
 ------------
 $ git switch -c fixup HEAD~3
diff --git a/Documentation/git-symbolic-ref.txt b/Documentation/git-symbolic-ref.txt
index ef68ad2b71..2cbec2d033 100644
--- a/Documentation/git-symbolic-ref.txt
+++ b/Documentation/git-symbolic-ref.txt
@@ -39,7 +39,7 @@ OPTIONS
 -q::
 --quiet::
 	Do not issue an error message if the <name> is not a
-	symbolic ref but a detached HEAD; instead exit with
+	symbolic ref but a detached `HEAD`; instead exit with
 	non-zero status silently.
 
 --short::
diff --git a/Documentation/git-tag.txt b/Documentation/git-tag.txt
index b802972bb2..13a0d2abbb 100644
--- a/Documentation/git-tag.txt
+++ b/Documentation/git-tag.txt
@@ -209,7 +209,7 @@ This option is only applicable when listing tags without annotation lines.
 <commit>::
 <object>::
 	The object that the new tag will refer to, usually a commit.
-	Defaults to HEAD.
+	Defaults to `HEAD`.
 
 CONFIGURATION
 -------------
diff --git a/Documentation/git-update-ref.txt b/Documentation/git-update-ref.txt
index 3c3da97c29..be48daa825 100644
--- a/Documentation/git-update-ref.txt
+++ b/Documentation/git-update-ref.txt
@@ -20,7 +20,7 @@ Given three arguments, stores the <newvalue> in the <ref>,
 possibly dereferencing the symbolic refs, after verifying that
 the current value of the <ref> matches <oldvalue>.
 E.g. `git update-ref refs/heads/master <newvalue> <oldvalue>`
-updates the master branch head to <newvalue> only if its current
+updates the `master` branch head to <newvalue> only if its current
 value is <oldvalue>.  You can specify 40 "0" or an empty string
 as <oldvalue> to make sure that the ref you are creating does
 not exist.
@@ -151,7 +151,7 @@ LOGGING UPDATES
 ---------------
 If config parameter "core.logAllRefUpdates" is true and the ref is one
 under "refs/heads/", "refs/remotes/", "refs/notes/", or a pseudoref
-like HEAD or ORIG_HEAD; or the file "$GIT_DIR/logs/<ref>" exists then
+like `HEAD` or `ORIG_HEAD`; or the file "$GIT_DIR/logs/<ref>" exists then
 `git update-ref` will append a line to the log file
 "$GIT_DIR/logs/<ref>" (dereferencing all symbolic refs before creating
 the log name) describing the change in ref value.  Log lines are
diff --git a/Documentation/git-worktree.txt b/Documentation/git-worktree.txt
index f1bb1fa5f5..35bb1bb120 100644
--- a/Documentation/git-worktree.txt
+++ b/Documentation/git-worktree.txt
@@ -97,7 +97,7 @@ list::
 List details of each working tree.  The main working tree is listed first,
 followed by each of the linked working trees.  The output details include
 whether the working tree is bare, the revision currently checked out, the
-branch currently checked out (or "detached HEAD" if none), "locked" if
+branch currently checked out (or "detached `HEAD`" if none), "locked" if
 the worktree is locked, "prunable" if the worktree can be pruned by `prune`
 command.
 
diff --git a/Documentation/git.txt b/Documentation/git.txt
index fc49a4fd42..dcc52adff6 100644
--- a/Documentation/git.txt
+++ b/Documentation/git.txt
@@ -516,7 +516,7 @@ double-quotes and respecting backslash escapes. E.g., the value
 `GIT_COMMON_DIR`::
 	If this variable is set to a path, non-worktree files that are
 	normally in $GIT_DIR will be taken from this path
-	instead. Worktree-specific files such as HEAD or index are
+	instead. Worktree-specific files such as `HEAD` or index are
 	taken from $GIT_DIR. See linkgit:gitrepository-layout[5] and
 	linkgit:git-worktree[1] for
 	details. This variable has lower precedence than other path
@@ -914,7 +914,7 @@ standard output.
 `GIT_PRINT_SHA1_ELLIPSIS` (deprecated)::
 	If set to `yes`, print an ellipsis following an
 	(abbreviated) SHA-1 value.  This affects indications of
-	detached HEADs (linkgit:git-checkout[1]) and the raw
+	detached `HEAD`s (linkgit:git-checkout[1]) and the raw
 	diff output (linkgit:git-diff[1]).  Printing an
 	ellipsis in the cases mentioned is no longer considered
 	adequate and support for it is likely to be removed in the
diff --git a/Documentation/gitcli.txt b/Documentation/gitcli.txt
index 92e4ba6a2f..0fb18e3f35 100644
--- a/Documentation/gitcli.txt
+++ b/Documentation/gitcli.txt
@@ -29,7 +29,7 @@ arguments.  Here are the rules:
    E.g. `git diff -- HEAD` is, "I have a file called HEAD in my work
    tree.  Please show changes between the version I staged in the index
    and what I have in the work tree for that file", not "show difference
-   between the HEAD commit and the work tree as a whole".  You can say
+   between the `HEAD` commit and the work tree as a whole".  You can say
    `git diff HEAD --` to ask for the latter.
 
  * Without disambiguating `--`, Git makes a reasonable guess, but errors
diff --git a/Documentation/gitcore-tutorial.txt b/Documentation/gitcore-tutorial.txt
index 633439702f..77573c813c 100644
--- a/Documentation/gitcore-tutorial.txt
+++ b/Documentation/gitcore-tutorial.txt
@@ -330,7 +330,7 @@ object name for the commit to its standard output.
 
 And this is where we create the `.git/refs/heads/master` file
 which is pointed at by `HEAD`. This file is supposed to contain
-the reference to the top-of-tree of the master branch, and since
+the reference to the top-of-tree of the `master` branch, and since
 that's exactly what 'git commit-tree' spits out, we can do this
 all with a sequence of simple shell commands:
 
@@ -402,7 +402,7 @@ In other words, 'git diff-index' normally compares a tree against the
 working tree, but when given the `--cached` flag, it is told to
 instead compare against just the index cache contents, and ignore the
 current working tree state entirely. Since we just wrote the index
-file to HEAD, doing `git diff-index --cached -p HEAD` should thus return
+file to `HEAD`, doing `git diff-index --cached -p HEAD` should thus return
 an empty set of differences, and that's exactly what it does.
 
 [NOTE]
@@ -446,7 +446,7 @@ flag or not, since now the index is coherent with the working tree.
 Now, since we've updated `hello` in the index, we can commit the new
 version. We could do it by writing the tree by hand again, and
 committing the tree (this time we'd have to use the `-p HEAD` flag to
-tell commit that the HEAD was the *parent* of the new commit, and that
+tell commit that the `HEAD` was the *parent* of the new commit, and that
 this wasn't an initial commit any more), but you've done that once
 already, so let's just use the helpful script this time:
 
@@ -822,7 +822,7 @@ commit log message from the command line.
 
 Now, to make it a bit more interesting, let's assume that somebody else
 does some work in the original branch, and simulate that by going back
-to the master branch, and editing the same file differently there:
+to the `master` branch, and editing the same file differently there:
 
 ------------
 $ git switch master
@@ -838,7 +838,7 @@ $ echo "Lots of fun" >>example
 $ git commit -m "Some fun." -i hello example
 ------------
 
-since the master branch is obviously in a much better mood.
+since the `master` branch is obviously in a much better mood.
 
 Now, you've got two branches, and you decide that you want to merge the
 work done. Before we do that, let's introduce a cool graphical tool that
@@ -933,21 +933,21 @@ shows an ordinary commit on the current branch, `-` is a merge commit), which
 means they are now part of the `master` branch. Only the "Some
 work" commit has the plus `+` character in the second column,
 because `mybranch` has not been merged to incorporate these
-commits from the master branch.  The string inside brackets
+commits from the `master` branch.  The string inside brackets
 before the commit log message is a short name you can use to
-name the commit.  In the above example, 'master' and 'mybranch'
-are branch heads.  'master^' is the first parent of 'master'
+name the commit.  In the above example, `master` and `mybranch`
+are branch heads.  `master^` is the first parent of `master`
 branch head.  Please see linkgit:gitrevisions[7] if you want to
 see more complex cases.
 
 [NOTE]
 Without the `--more=1` option, 'git show-branch' would not output the
 '[master^]' commit, as '[mybranch]' commit is a common ancestor of
-both 'master' and 'mybranch' tips.  Please see linkgit:git-show-branch[1]
+both `master` and `mybranch` tips.  Please see linkgit:git-show-branch[1]
 for details.
 
 [NOTE]
-If there were more commits on the 'master' branch after the merge, the
+If there were more commits on the `master` branch after the merge, the
 merge commit itself would not be shown by 'git show-branch' by
 default.  You would need to provide `--sparse` option to make the
 merge commit visible in this case.
@@ -1523,7 +1523,7 @@ like this:
    the initial cloning is stored in the remote.origin.url
    configuration variable.
 
-2. Do your work in your repository on 'master' branch.
+2. Do your work in your repository on `master` branch.
 
 3. Run `git fetch origin` from the public repository of your
    upstream every once in a while. This does only the first
@@ -1559,9 +1559,9 @@ using branches with Git.
 We have already seen how branches work previously,
 with "fun and work" example using two branches.  The idea is the
 same if there are more than two branches.  Let's say you started
-out from "master" head, and have some new code in the "master"
-branch, and two independent fixes in the "commit-fix" and
-"diff-fix" branches:
+out from `master` head, and have some new code in the `master`
+branch, and two independent fixes in the `commit-fix` and
+`diff-fix` branches:
 
 ------------
 $ git show-branch
@@ -1577,8 +1577,8 @@ $ git show-branch
 ------------
 
 Both fixes are tested well, and at this point, you want to merge
-in both of them.  You could merge in 'diff-fix' first and then
-'commit-fix' next, like this:
+in both of them.  You could merge in `diff-fix` first and then
+`commit-fix` next, like this:
 
 ------------
 $ git merge -m "Merge fix in diff-fix" diff-fix
@@ -1607,8 +1607,8 @@ first and the other next, when what you have are a set of truly
 independent changes (if the order mattered, then they are not
 independent by definition).  You could instead merge those two
 branches into the current branch at once.  First let's undo what
-we just did and start over.  We would want to get the master
-branch before these two merges by resetting it to 'master~2':
+we just did and start over.  We would want to get the `master`
+branch before these two merges by resetting it to `master~2`:
 
 ------------
 $ git reset --hard master~2
diff --git a/Documentation/giteveryday.txt b/Documentation/giteveryday.txt
index faba2ef088..03c9e5e8d5 100644
--- a/Documentation/giteveryday.txt
+++ b/Documentation/giteveryday.txt
@@ -104,8 +104,8 @@ modification will be caught if you do `git commit -a` later.
 <6> look at all your changes including the previous commit.
 <7> amend the previous commit, adding all your new changes,
 using your original message.
-<8> switch to the master branch.
-<9> merge a topic branch into your master branch.
+<8> switch to the `master` branch.
+<9> merge a topic branch into your `master` branch.
 <10> review commit logs; other forms to limit output can be
 combined and include `-10` (to show up to 10 commits),
 `--until=2005-12-10`, etc.
@@ -123,7 +123,7 @@ addition to the ones needed by a standalone developer.
   * linkgit:git-clone[1] from the upstream to prime your local
     repository.
 
-  * linkgit:git-pull[1] and linkgit:git-fetch[1] from "origin"
+  * linkgit:git-pull[1] and linkgit:git-fetch[1] from `origin`
     to keep up-to-date with the upstream.
 
   * linkgit:git-push[1] to shared repository, if you adopt CVS
@@ -160,9 +160,9 @@ $ git reset --hard ORIG_HEAD <10>
 $ git gc <11>
 ------------
 +
-<1> checkout a new branch `mine` from master.
+<1> checkout a new branch `mine` from `master`.
 <2> repeat as needed.
-<3> extract patches from your branch, relative to master,
+<3> extract patches from your branch, relative to `master`,
 <4> and email them.
 <5> return to `master`, ready to see what's new
 <6> `git pull` fetches from `origin` by default and merges into the
@@ -210,7 +210,7 @@ remote-tracking branches on the mothership machine.  You could use this
 as a back-up method. Likewise, you can pretend that mothership
 "fetched" from you (useful when access is one sided).
 <5> on mothership machine, merge the work done on the satellite
-machine into the master branch.
+machine into the `master` branch.
 
 Branch off of a specific tag.::
 +
@@ -305,7 +305,7 @@ master or exposed as a part of a stable branch.
 <8> and bundle topic branches still cooking.
 <9> backport a critical fix.
 <10> create a signed tag.
-<11> make sure master was not accidentally rewound beyond that
+<11> make sure `master` was not accidentally rewound beyond that
 already pushed out.
 <12> In the output from `git show-branch`, `master` should have
 everything `ko/master` has, and `next` should have
@@ -446,7 +446,7 @@ refs/tags/v[0-9]*	david
 <2> and make the shared repository writable by the group.
 <3> use update-hook example by Carl from Documentation/howto/
 for branch policy control.
-<4> alice and cindy can push into master, only bob can push into doc-update.
+<4> alice and cindy can push into `master`, only bob can push into `doc-update`.
 david is the release manager and is the only person who can
 create and push version tags.
 
diff --git a/Documentation/githooks.txt b/Documentation/githooks.txt
index b51959ff94..5e87987882 100644
--- a/Documentation/githooks.txt
+++ b/Documentation/githooks.txt
@@ -189,8 +189,8 @@ post-checkout
 
 This hook is invoked when a linkgit:git-checkout[1] or
 linkgit:git-switch[1] is run after having updated the
-worktree.  The hook is given three parameters: the ref of the previous HEAD,
-the ref of the new HEAD (which may or may not have changed), and a flag
+worktree.  The hook is given three parameters: the ref of the previous `HEAD`,
+the ref of the new `HEAD` (which may or may not have changed), and a flag
 indicating whether the checkout was a branch checkout (changing branches,
 flag=1) or a file checkout (retrieving a file from the index, flag=0).
 This hook cannot affect the outcome of `git switch` or `git checkout`,
@@ -199,11 +199,11 @@ these two commands.
 
 It is also run after linkgit:git-clone[1], unless the `--no-checkout` (`-n`) option is
 used. The first parameter given to the hook is the null-ref, the second the
-ref of the new HEAD and the flag is always 1. Likewise for `git worktree add`
+ref of the new `HEAD` and the flag is always 1. Likewise for `git worktree add`
 unless `--no-checkout` is used.
 
 This hook can be used to perform repository validity checks, auto-display
-differences from the previous HEAD if different, or set working dir metadata
+differences from the previous `HEAD` if different, or set working dir metadata
 properties.
 
 post-merge
diff --git a/Documentation/gitk.txt b/Documentation/gitk.txt
index 6ceeae227c..29bd307bb9 100644
--- a/Documentation/gitk.txt
+++ b/Documentation/gitk.txt
@@ -64,7 +64,7 @@ linkgit:git-rev-list[1] for a complete list.
 --merge::
 
 	After an attempt to merge stops with conflicts, show the commits on
-	the history between two branches (i.e. the HEAD and the MERGE_HEAD)
+	the history between two branches (i.e. the `HEAD` and the `MERGE_HEAD`)
 	that modify the conflicted files and do not exist on all the heads
 	being merged.
 
diff --git a/Documentation/gitnamespaces.txt b/Documentation/gitnamespaces.txt
index b614969ad2..29bac9e1bf 100644
--- a/Documentation/gitnamespaces.txt
+++ b/Documentation/gitnamespaces.txt
@@ -16,7 +16,7 @@ DESCRIPTION
 -----------
 
 Git supports dividing the refs of a single repository into multiple
-namespaces, each of which has its own branches, tags, and HEAD.  Git can
+namespaces, each of which has its own branches, tags, and `HEAD`.  Git can
 expose each namespace as an independent repository to pull from and push
 to, while sharing the object store, and exposing all the refs to
 operations such as linkgit:git-gc[1].
diff --git a/Documentation/gitremote-helpers.txt b/Documentation/gitremote-helpers.txt
index 6f1e269ae4..f5ac7ae7ca 100644
--- a/Documentation/gitremote-helpers.txt
+++ b/Documentation/gitremote-helpers.txt
@@ -322,9 +322,9 @@ Supported if the helper has the "fetch" capability.
 	(if there is only one reference to push, a single 'push' command
 	is followed by a blank line). For example, the following would
 	be two batches of 'push', the first asking the remote-helper
-	to push the local ref 'master' to the remote ref 'master' and
-	the local `HEAD` to the remote 'branch', and the second
-	asking to push ref 'foo' to ref 'bar' (forced update requested
+	to push the local ref `master` to the remote ref `master` and
+	the local `HEAD` to the remote `branch`, and the second
+	asking to push ref `foo` to ref `bar` (forced update requested
 	by the '+').
 +
 ------------
diff --git a/Documentation/gitrepository-layout.txt b/Documentation/gitrepository-layout.txt
index 1a2ef4c150..e174a28360 100644
--- a/Documentation/gitrepository-layout.txt
+++ b/Documentation/gitrepository-layout.txt
@@ -128,7 +128,7 @@ HEAD::
 	describing the currently active branch.  It does not mean
 	much if the repository is not associated with any working tree
 	(i.e. a 'bare' repository), but a valid Git repository
-	*must* have the HEAD file; some porcelains may use it to
+	*must* have the `HEAD` file; some porcelains may use it to
 	guess the designated "default" branch of the repository
 	(usually 'master').  It is legal if the named branch
 	'name' does not (yet) exist.  In some legacy setups, it is
@@ -137,7 +137,7 @@ HEAD::
 +
 HEAD can also record a specific commit directly, instead of
 being a symref to point at the current branch.  Such a state
-is often called 'detached HEAD.'  See linkgit:git-checkout[1]
+is often called 'detached `HEAD`.'  See linkgit:git-checkout[1]
 for details.
 
 config::
diff --git a/Documentation/gittutorial-2.txt b/Documentation/gittutorial-2.txt
index e1e09070ad..2b3cba8ae3 100644
--- a/Documentation/gittutorial-2.txt
+++ b/Documentation/gittutorial-2.txt
@@ -132,7 +132,7 @@ and the contents of these files is just the compressed data plus a
 header identifying their length and their type.  The type is either a
 blob, a tree, a commit, or a tag.
 
-The simplest commit to find is the HEAD commit, which we can find
+The simplest commit to find is the `HEAD` commit, which we can find
 from .git/HEAD:
 
 ------------------------------------------------
diff --git a/Documentation/gittutorial.txt b/Documentation/gittutorial.txt
index ff366cc752..089a89f776 100644
--- a/Documentation/gittutorial.txt
+++ b/Documentation/gittutorial.txt
@@ -182,7 +182,7 @@ Managing branches
 -----------------
 
 A single Git repository can maintain multiple branches of
-development.  To create a new branch named "experimental", use
+development.  To create a new branch named `experimental`, use
 
 ------------------------------------------------
 $ git branch experimental
@@ -201,8 +201,8 @@ you'll get a list of all existing branches:
 * master
 ------------------------------------------------
 
-The "experimental" branch is the one you just created, and the
-"master" branch is a default branch that was created for you
+The `experimental` branch is the one you just created, and the
+`master` branch is a default branch that was created for you
 automatically.  The asterisk marks the branch you are currently on;
 type
 
@@ -211,7 +211,7 @@ $ git switch experimental
 ------------------------------------------------
 
 to switch to the experimental branch.  Now edit a file, commit the
-change, and switch back to the master branch:
+change, and switch back to the `master` branch:
 
 ------------------------------------------------
 (edit file)
@@ -220,9 +220,9 @@ $ git switch master
 ------------------------------------------------
 
 Check that the change you made is no longer visible, since it was
-made on the experimental branch and you're back on the master branch.
+made on the experimental branch and you're back on the `master` branch.
 
-You can make a different change on the master branch:
+You can make a different change on the `master` branch:
 
 ------------------------------------------------
 (edit file)
@@ -230,7 +230,7 @@ $ git commit -a
 ------------------------------------------------
 
 at this point the two branches have diverged, with different changes
-made in each.  To merge the changes made in experimental into master, run
+made in each.  To merge the changes made in `experimental` into `master`, run
 
 ------------------------------------------------
 $ git merge experimental
@@ -310,7 +310,7 @@ alice$ cd /home/alice/project
 alice$ git pull /home/bob/myrepo master
 ------------------------------------------------
 
-This merges the changes from Bob's "master" branch into Alice's
+This merges the changes from Bob's `master` branch into Alice's
 current branch.  If Alice has made her own changes in the meantime,
 then she may need to manually fix any conflicts.
 
@@ -327,7 +327,7 @@ some way and pull again when this happens).
 
 Alice can peek at what Bob did without merging first, using the "fetch"
 command; this allows Alice to inspect what Bob did, using a special
-symbol "FETCH_HEAD", in order to determine if he has anything worth
+symbol `FETCH_HEAD`, in order to determine if he has anything worth
 pulling, like this:
 
 ------------------------------------------------
@@ -336,10 +336,10 @@ alice$ git log -p HEAD..FETCH_HEAD
 ------------------------------------------------
 
 This operation is safe even if Alice has uncommitted local changes.
-The range notation "HEAD..FETCH_HEAD" means "show everything that is reachable
-from the FETCH_HEAD but exclude anything that is reachable from HEAD".
-Alice already knows everything that leads to her current state (HEAD),
-and reviews what Bob has in his state (FETCH_HEAD) that she has not
+The range notation "`HEAD`..`FETCH_HEAD`" means "show everything that is reachable
+from the `FETCH_HEAD` but exclude anything that is reachable from `HEAD`".
+Alice already knows everything that leads to her current state (`HEAD`),
+and reviews what Bob has in his state (`FETCH_HEAD`) that she has not
 seen with this command.
 
 If Alice wants to visualize what Bob did since their histories forked
@@ -397,10 +397,10 @@ alice$ git log -p master..bob/master
 -------------------------------------
 
 shows a list of all the changes that Bob made since he branched from
-Alice's master branch.
+Alice's `master` branch.
 
 After examining those changes, Alice
-could merge the changes into her master branch:
+could merge the changes into her `master` branch:
 
 -------------------------------------
 alice$ git merge bob/master
@@ -436,8 +436,8 @@ bob$ git config --get remote.origin.url
 `git config -l`, and the linkgit:git-config[1] man page
 explains the meaning of each option.)
 
-Git also keeps a pristine copy of Alice's master branch under the
-name "origin/master":
+Git also keeps a pristine copy of Alice's `master` branch under the
+name `origin/master`:
 
 -------------------------------------
 bob$ git branch -r
@@ -570,22 +570,22 @@ $ git log v2.5.. Makefile       # commits since v2.5 which modify
 
 You can also give 'git log' a "range" of commits where the first is not
 necessarily an ancestor of the second; for example, if the tips of
-the branches "stable" and "master" diverged from a common
+the branches `stable` and `master` diverged from a common
 commit some time ago, then
 
 -------------------------------------
 $ git log stable..master
 -------------------------------------
 
-will list commits made in the master branch but not in the
-stable branch, while
+will list commits made in the `master` branch but not in the
+`stable` branch, while
 
 -------------------------------------
 $ git log master..stable
 -------------------------------------
 
-will show the list of commits made on the stable branch but not
-the master branch.
+will show the list of commits made on the `stable` branch but not
+the `master` branch.
 
 The 'git log' command has a weakness: it must present commits in a
 list.  When the history has lines of development that diverged and
diff --git a/Documentation/gitweb.txt b/Documentation/gitweb.txt
index 3cc9b034c4..ee6e6a30fd 100644
--- a/Documentation/gitweb.txt
+++ b/Documentation/gitweb.txt
@@ -291,7 +291,7 @@ action::
 	is not set, and to 'summary' otherwise.
 
 revision::
-	Revision shown.  Defaults to HEAD.
+	Revision shown.  Defaults to `HEAD`.
 
 path::
 	The path within the <repository> that the action is performed on,
@@ -385,7 +385,7 @@ The 'shortlog' view is more compact; it shows one commit per line.
 
 history::
 	Shows history of the file or directory in a given repository path,
-	starting from given revision (defaults to HEAD, i.e. default branch).
+	starting from given revision (defaults to `HEAD`, i.e. default branch).
 +
 This view is similar to 'shortlog' view.
 
diff --git a/Documentation/gitworkflows.txt b/Documentation/gitworkflows.txt
index 47cf97f9be..07344bf85a 100644
--- a/Documentation/gitworkflows.txt
+++ b/Documentation/gitworkflows.txt
@@ -75,25 +75,25 @@ As a given feature goes from experimental to stable, it also
 "graduates" between the corresponding branches of the software.
 `git.git` uses the following 'integration branches':
 
-* 'maint' tracks the commits that should go into the next "maintenance
+* `maint` tracks the commits that should go into the next "maintenance
   release", i.e., update of the last released stable version;
 
-* 'master' tracks the commits that should go into the next release;
+* `master` tracks the commits that should go into the next release;
 
-* 'next' is intended as a testing branch for topics being tested for
-  stability for master.
+* `next` is intended as a testing branch for topics being tested for
+  stability for `master`.
 
 There is a fourth official branch that is used slightly differently:
 
-* 'seen' (patches seen by the maintainer) is an integration branch for
+* `seen` (patches seen by the maintainer) is an integration branch for
   things that are not quite ready for inclusion yet (see "Integration
   Branches" below).
 
 Each of the four branches is usually a direct descendant of the one
 above it.
 
-Conceptually, the feature enters at an unstable branch (usually 'next'
-or 'seen'), and "graduates" to 'master' for the next release once it is
+Conceptually, the feature enters at an unstable branch (usually `next`
+or `seen`), and "graduates" to `master` for the next release once it is
 considered stable enough.
 
 
@@ -113,7 +113,7 @@ other.
 =====================================
 
 This gives a very controlled flow of fixes.  If you notice that you
-have applied a fix to e.g. 'master' that is also required in 'maint',
+have applied a fix to e.g. `master` that is also required in `maint`,
 you will need to cherry-pick it (using linkgit:git-cherry-pick[1])
 downwards.  This will happen a few times and is nothing to worry about
 unless you do it very frequently.
@@ -149,11 +149,11 @@ Many things can then be done very naturally:
   it.  If the topic has evolved further in the meantime, merge again.
   (Note that you do not necessarily have to merge it to the oldest
   integration branch first.  For example, you can first merge a bugfix
-  to 'next', give it some testing time, and merge to 'maint' when you
+  to `next`, give it some testing time, and merge to `maint` when you
   know it is stable.)
 
-* If you find you need new features from the branch 'other' to continue
-  working on your topic, merge 'other' to 'topic'.  (However, do not
+* If you find you need new features from the branch `other` to continue
+  working on your topic, merge `other` to `topic`.  (However, do not
   do this "just habitually", see below.)
 
 * If you find you forked off the wrong branch and want to move it
@@ -207,7 +207,7 @@ If you make it (very) clear that this branch is going to be deleted
 right after the testing, you can even publish this branch, for example
 to give the testers a chance to work with it, or other developers a
 chance to see if their in-progress work will be compatible.  `git.git`
-has such an official throw-away integration branch called 'seen'.
+has such an official throw-away integration branch called `seen`.
 
 
 Branch management for a release
@@ -217,27 +217,27 @@ Assuming you are using the merge approach discussed above, when you
 are releasing your project you will need to do some additional branch
 management work.
 
-A feature release is created from the 'master' branch, since 'master'
+A feature release is created from the `master` branch, since `master`
 tracks the commits that should go into the next feature release.
 
-The 'master' branch is supposed to be a superset of 'maint'. If this
-condition does not hold, then 'maint' contains some commits that
-are not included on 'master'. The fixes represented by those commits
+The `master` branch is supposed to be a superset of `maint`. If this
+condition does not hold, then `maint` contains some commits that
+are not included on `master`. The fixes represented by those commits
 will therefore not be included in your feature release.
 
-To verify that 'master' is indeed a superset of 'maint', use git log:
+To verify that `master` is indeed a superset of `maint`, use git log:
 
-.Verify 'master' is a superset of 'maint'
+.Verify `master` is a superset of `maint`
 [caption="Recipe: "]
 =====================================
 `git log master..maint`
 =====================================
 
 This command should not list any commits.  Otherwise, check out
-'master' and merge 'maint' into it.
+`master` and merge `maint` into it.
 
 Now you can proceed with the creation of the feature release. Apply a
-tag to the tip of 'master' indicating the release version:
+tag to the tip of `master` indicating the release version:
 
 .Release tagging
 [caption="Recipe: "]
@@ -251,9 +251,9 @@ others tracking your project. The push could also trigger a
 post-update hook to perform release-related items such as building
 release tarballs and preformatted documentation pages.
 
-Similarly, for a maintenance release, 'maint' is tracking the commits
+Similarly, for a maintenance release, `maint` is tracking the commits
 to be released. Therefore, in the steps above simply tag and push
-'maint' rather than 'master'.
+`maint` rather than `master`.
 
 
 Maintenance branch management after a feature release
@@ -275,10 +275,10 @@ where X.Y.Z is the current release).
 `git branch maint-X.Y.(Z-1) maint`
 =====================================
 
-The 'maint' branch should now be fast-forwarded to the newly released
+The `maint` branch should now be fast-forwarded to the newly released
 code so that maintenance fixes can be tracked for the current release:
 
-.Update maint to new release
+.Update `maint` to new release
 [caption="Recipe: "]
 =====================================
 * `git checkout maint`
@@ -286,7 +286,7 @@ code so that maintenance fixes can be tracked for the current release:
 =====================================
 
 If the merge fails because it is not a fast-forward, then it is
-possible some fixes on 'maint' were missed in the feature release.
+possible some fixes on `maint` were missed in the feature release.
 This will not happen if the content of the branches was verified as
 described in the previous section.
 
@@ -294,9 +294,9 @@ described in the previous section.
 Branch management for next and seen after a feature release
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 
-After a feature release, the integration branch 'next' may optionally be
-rewound and rebuilt from the tip of 'master' using the surviving
-topics on 'next':
+After a feature release, the integration branch `next` may optionally be
+rewound and rebuilt from the tip of `master` using the surviving
+topics on `next`:
 
 .Rewind and rebuild next
 [caption="Recipe: "]
@@ -307,20 +307,20 @@ topics on 'next':
 * ...
 =====================================
 
-The advantage of doing this is that the history of 'next' will be
-clean. For example, some topics merged into 'next' may have initially
+The advantage of doing this is that the history of `next` will be
+clean. For example, some topics merged into `next` may have initially
 looked promising, but were later found to be undesirable or premature.
-In such a case, the topic is reverted out of 'next' but the fact
+In such a case, the topic is reverted out of `next` but the fact
 remains in the history that it was once merged and reverted. By
-recreating 'next', you give another incarnation of such topics a clean
+recreating `next`, you give another incarnation of such topics a clean
 slate to retry, and a feature release is a good point in history to do
 so.
 
 If you do this, then you should make a public announcement indicating
-that 'next' was rewound and rebuilt.
+that `next` was rewound and rebuilt.
 
-The same rewind and rebuild process may be followed for 'seen'. A public
-announcement is not necessary since 'seen' is a throw-away branch, as
+The same rewind and rebuild process may be followed for `seen`. A public
+announcement is not necessary since `seen` is a throw-away branch, as
 described above.
 
 
diff --git a/Documentation/glossary-content.txt b/Documentation/glossary-content.txt
index 67c7a50b96..88ee109fdf 100644
--- a/Documentation/glossary-content.txt
+++ b/Documentation/glossary-content.txt
@@ -113,16 +113,16 @@ to point at the new commit.
 [[def_detached_HEAD]]detached HEAD::
 	Normally the <<def_HEAD,HEAD>> stores the name of a
 	<<def_branch,branch>>, and commands that operate on the
-	history HEAD represents operate on the history leading to the
-	tip of the branch the HEAD points at.  However, Git also
+	history `HEAD` represents operate on the history leading to the
+	tip of the branch the `HEAD` points at.  However, Git also
 	allows you to <<def_checkout,check out>> an arbitrary
 	<<def_commit,commit>> that isn't necessarily the tip of any
-	particular branch.  The HEAD in such a state is called
+	particular branch.  The `HEAD` in such a state is called
 	"detached".
 +
 Note that commands that operate on the history of the current branch
 (e.g. `git commit` to build a new history on top of it) still work
-while the HEAD is detached. They update the HEAD to point at the tip
+while the `HEAD` is detached. They update the `HEAD` to point at the tip
 of the updated history without affecting any branch.  Commands that
 update or inquire information _about_ the current branch (e.g. `git
 branch --set-upstream-to` that sets what remote-tracking branch the
@@ -193,7 +193,7 @@ for a more flexible and robust system to do the same thing.
 [[def_HEAD]]HEAD::
 	The current <<def_branch,branch>>.  In more detail: Your <<def_working_tree,
 	working tree>> is normally derived from the state of the tree
-	referred to by HEAD.  HEAD is a reference to one of the
+	referred to by `HEAD`.  `HEAD` is a reference to one of the
 	<<def_head,heads>> in your repository, except when using a
 	<<def_detached_HEAD,detached HEAD>>, in which case it directly
 	references an arbitrary commit.
@@ -456,7 +456,7 @@ exclude;;
 	like refs for the purposes of rev-parse, but which are treated
 	specially by git.  Pseudorefs both have names that are all-caps,
 	and always start with a line consisting of a
-	<<def_SHA1,SHA-1>> followed by whitespace.  So, HEAD is not a
+	<<def_SHA1,SHA-1>> followed by whitespace.  So, `HEAD` is not a
 	pseudoref, because it is sometimes a symbolic ref.  They might
 	optionally contain some additional data.  `MERGE_HEAD` and
 	`CHERRY_PICK_HEAD` are examples.  Unlike
diff --git a/Documentation/rev-list-options.txt b/Documentation/rev-list-options.txt
index 965cb32f9c..e6e9669f68 100644
--- a/Documentation/rev-list-options.txt
+++ b/Documentation/rev-list-options.txt
@@ -252,7 +252,7 @@ to list all commits on only one side of them is with
 `--left-right` (see the example below in the description of
 the `--left-right` option). However, it shows the commits that were
 cherry-picked from the other branch (for example, ``3rd on b'' may be
-cherry-picked from branch A). With this option, such pairs of commits are
+cherry-picked from branch `A`). With this option, such pairs of commits are
 excluded from the output.
 
 --left-only::
diff --git a/Documentation/revisions.txt b/Documentation/revisions.txt
index d9169c062e..33f30b62eb 100644
--- a/Documentation/revisions.txt
+++ b/Documentation/revisions.txt
@@ -23,8 +23,8 @@ characters and to avoid word splitting.
   followed by a dash and a number of commits, followed by a dash, a
   'g', and an abbreviated object name.
 
-'<refname>', e.g. 'master', 'heads/master', 'refs/heads/master'::
-  A symbolic ref name.  E.g. 'master' typically means the commit
+'<refname>', e.g. `master`, 'heads/master', 'refs/heads/master'::
+  A symbolic ref name.  E.g. `master` typically means the commit
   object referenced by 'refs/heads/master'.  If you
   happen to have both 'heads/master' and 'tags/master', you can
   explicitly say 'heads/master' to tell Git which one you mean.
@@ -65,7 +65,7 @@ some output processing may assume ref names in UTF-8.
 '@'::
   '@' alone is a shortcut for `HEAD`.
 
-'[<refname>]@{<date>}', e.g. 'master@\{yesterday\}', 'HEAD@{5 minutes ago}'::
+'[<refname>]@{<date>}', e.g. `master@{yesterday}`, `HEAD@{5 minutes ago}`::
   A ref followed by the suffix '@' with a date specification
   enclosed in a brace
   pair (e.g. '\{yesterday\}', '{1 month 2 weeks 3 days 1 hour 1
@@ -74,28 +74,28 @@ some output processing may assume ref names in UTF-8.
   used immediately following a ref name and the ref must have an
   existing log ('$GIT_DIR/logs/<ref>'). Note that this looks up the state
   of your *local* ref at a given time; e.g., what was in your local
-  'master' branch last week. If you want to look at commits made during
+  `master` branch last week. If you want to look at commits made during
   certain times, see `--since` and `--until`.
 
-'<refname>@{<n>}', e.g. 'master@\{1\}'::
+'<refname>@{<n>}', e.g. `master@{1}`::
   A ref followed by the suffix '@' with an ordinal specification
   enclosed in a brace pair (e.g. '\{1\}', '\{15\}') specifies
-  the n-th prior value of that ref.  For example 'master@\{1\}'
-  is the immediate prior value of 'master' while 'master@\{5\}'
-  is the 5th prior value of 'master'. This suffix may only be used
+  the n-th prior value of that ref.  For example `master@{1}`
+  is the immediate prior value of `master` while `master@{5}`
+  is the 5th prior value of `master`. This suffix may only be used
   immediately following a ref name and the ref must have an existing
   log ('$GIT_DIR/logs/<refname>').
 
 '@{<n>}', e.g. '@\{1\}'::
   You can use the '@' construct with an empty ref part to get at a
   reflog entry of the current branch. For example, if you are on
-  branch 'blabla' then '@\{1\}' means the same as 'blabla@\{1\}'.
+  branch `blabla` then `@{1}` means the same as `blabla@{1}`.
 
 '@{-<n>}', e.g. '@{-1}'::
   The construct '@{-<n>}' means the <n>th branch/commit checked out
   before the current one.
 
-'[<branchname>]@\{upstream\}', e.g. 'master@\{upstream\}', '@\{u\}'::
+'[<branchname>]@\{upstream\}', e.g. `master@{upstream}`, '@\{u\}'::
   The suffix '@\{upstream\}' to a branchname (short form '<branchname>@\{u\}')
   refers to the branch that the branch specified by branchname is set to build on
   top of (configured with `branch.<name>.remote` and
@@ -103,7 +103,7 @@ some output processing may assume ref names in UTF-8.
   current one. These suffixes are also accepted when spelled in uppercase, and
   they mean the same thing no matter the case.
 
-'[<branchname>]@\{push\}', e.g. 'master@\{push\}', '@\{push\}'::
+'[<branchname>]@\{push\}', e.g. `master@{push}`, '@\{push\}'::
   The suffix '@\{push}' reports the branch "where we would push to" if
   `git push` were run while `branchname` was checked out (or the current
   `HEAD` if no branchname is specified). Since our push destination is
@@ -131,7 +131,7 @@ from one location and push to another. In a non-triangular workflow,
 This suffix is also accepted when spelled in uppercase, and means the same
 thing no matter the case.
 
-'<rev>{caret}[<n>]', e.g. 'HEAD{caret}, v1.5.1{caret}0'::
+'<rev>{caret}[<n>]', e.g. `HEAD^`, 'v1.5.1{caret}0'::
   A suffix '{caret}' to a revision parameter means the first parent of
   that commit object.  '{caret}<n>' means the <n>th parent (i.e.
   '<rev>{caret}'
@@ -139,7 +139,7 @@ thing no matter the case.
   '<rev>{caret}0' means the commit itself and is used when '<rev>' is the
   object name of a tag object that refers to a commit object.
 
-'<rev>{tilde}[<n>]', e.g. 'HEAD{tilde}, master{tilde}3'::
+'<rev>{tilde}[<n>]', e.g. `HEAD~`, `master~3`::
   A suffix '{tilde}' to a revision parameter means the first parent of
   that commit object.
   A suffix '{tilde}<n>' to a revision parameter means the commit
@@ -175,7 +175,7 @@ existing tag object.
   and dereference the tag recursively until a non-tag object is
   found.
 
-'<rev>{caret}{/<text>}', e.g. 'HEAD^{/fix nasty bug}'::
+'<rev>{caret}{/<text>}', e.g. `HEAD^{/fix nasty bug}`::
   A suffix '{caret}' to a revision parameter, followed by a brace
   pair that contains a text led by a slash,
   is the same as the ':/fix nasty bug' syntax below except that
@@ -186,7 +186,7 @@ existing tag object.
   A colon, followed by a slash, followed by a text, names
   a commit whose commit message matches the specified regular expression.
   This name returns the youngest matching commit which is
-  reachable from any ref, including HEAD.
+  reachable from any ref, including `HEAD`.
   The regular expression can match any part of the
   commit message. To match messages starting with a string, one can use
   e.g. ':/^foo'. The special sequence ':/!' is reserved for modifiers to what
@@ -196,7 +196,7 @@ existing tag object.
   Depending on the given text, the shell's word splitting rules might
   require additional quoting.
 
-'<rev>:<path>', e.g. 'HEAD:README', 'master:./README'::
+'<rev>:<path>', e.g. `HEAD:README`, `master:./README`::
   A suffix ':' followed by a path names the blob or tree
   at the given path in the tree-ish object named by the part
   before the colon.
@@ -287,12 +287,12 @@ The '...' (three-dot) Symmetric Difference Notation::
  It is the set of commits that are reachable from either one of
  'r1' (left side) or 'r2' (right side) but not from both.
 
-In these two shorthand notations, you can omit one end and let it default to HEAD.
-For example, 'origin..' is a shorthand for 'origin..HEAD' and asks "What
-did I do since I forked from the origin branch?"  Similarly, '..origin'
-is a shorthand for 'HEAD..origin' and asks "What did the origin do since
-I forked from them?"  Note that '..' would mean 'HEAD..HEAD' which is an
-empty range that is both reachable and unreachable from HEAD.
+In these two shorthand notations, you can omit one end and let it default to `HEAD`.
+For example, '`origin`..' is a shorthand for '`origin`..`HEAD`' and asks "What
+did I do since I forked from the `origin` branch?"  Similarly, '..`origin`'
+is a shorthand for '`HEAD`..`origin`' and asks "What did the `origin` do since
+I forked from them?"  Note that '..' would mean '`HEAD`..`HEAD`' which is an
+empty range that is both reachable and unreachable from `HEAD`.
 
 Other <rev>{caret} Parent Shorthand Notations
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
@@ -313,7 +313,7 @@ itself).
 
 While '<rev>{caret}<n>' was about specifying a single commit parent, these
 three notations also consider its parents. For example you can say
-'HEAD{caret}2{caret}@', however you cannot say 'HEAD{caret}@{caret}2'.
+`HEAD^2^@`, however you cannot say `HEAD^@^2`.
 
 Revision Range Summary
 ----------------------
@@ -336,17 +336,17 @@ Revision Range Summary
 	<rev2> but exclude those that are reachable from both.  When
 	either <rev1> or <rev2> is omitted, it defaults to `HEAD`.
 
-'<rev>{caret}@', e.g. 'HEAD{caret}@'::
+'<rev>{caret}@', e.g. `HEAD^@`::
   A suffix '{caret}' followed by an at sign is the same as listing
   all parents of '<rev>' (meaning, include anything reachable from
   its parents, but not the commit itself).
 
-'<rev>{caret}!', e.g. 'HEAD{caret}!'::
+'<rev>{caret}!', e.g. `HEAD^!`::
   A suffix '{caret}' followed by an exclamation mark is the same
   as giving commit '<rev>' and then all its parents prefixed with
   '{caret}' to exclude them (and their ancestors).
 
-'<rev>{caret}-<n>', e.g. 'HEAD{caret}-, HEAD{caret}-2'::
+'<rev>{caret}-<n>', e.g. `HEAD^-`, `HEAD^-2`::
 	Equivalent to '<rev>{caret}<n>..<rev>', with '<n>' = 1 if not
 	given.
 
diff --git a/Documentation/user-manual.txt b/Documentation/user-manual.txt
index 0f9a699c09..62ddf41e75 100644
--- a/Documentation/user-manual.txt
+++ b/Documentation/user-manual.txt
@@ -280,7 +280,7 @@ a summary of the commands:
 	create a new branch `<new>` referencing `<start-point>`, and
 	check it out.
 
-The special symbol "HEAD" can always be used to refer to the current
+The special symbol `HEAD` can always be used to refer to the current
 branch.  In fact, Git uses a file named `HEAD` in the `.git` directory
 to remember which branch is current:
 
@@ -300,7 +300,7 @@ you can check out the commit referenced by a tag:
 $ git switch --detach v2.6.17
 Note: checking out 'v2.6.17'.
 
-You are in 'detached HEAD' state. You can look around, make experimental
+You are in 'detached `HEAD`' state. You can look around, make experimental
 changes and commit them, and you can discard any commits you make in this
 state without impacting any branches by performing another switch.
 
@@ -309,10 +309,10 @@ do so (now or later) by using `-c` with the switch command again. Example:
 
   git switch -c new_branch_name
 
-HEAD is now at 427abfa Linux v2.6.17
+`HEAD` is now at 427abfa Linux v2.6.17
 ------------------------------------------------
 
-The HEAD then refers to the SHA-1 of the commit instead of to a branch,
+The `HEAD` then refers to the SHA-1 of the commit instead of to a branch,
 and git branch shows that you are no longer on a branch:
 
 ------------------------------------------------
@@ -323,7 +323,7 @@ $ git branch
   master
 ------------------------------------------------
 
-In this case we say that the HEAD is "detached".
+In this case we say that the `HEAD` is "detached".
 
 This is an easy way to check out a particular version without having to
 make up a name for the new branch.   You can still create a new branch
@@ -332,8 +332,8 @@ make up a name for the new branch.   You can still create a new branch
 [[examining-remote-branches]]
 === Examining branches from a remote repository
 
-The "master" branch that was created at the time you cloned is a copy
-of the HEAD in the repository that you cloned from.  That repository
+The `master` branch that was created at the time you cloned is a copy
+of the `HEAD` in the repository that you cloned from.  That repository
 may also have had other branches, though, and your local repository
 keeps branches which track each of those remote branches, called
 remote-tracking branches, which you
@@ -351,7 +351,7 @@ $ git branch -r
   origin/todo
 ------------------------------------------------
 
-In this example, "origin" is called a remote repository, or "remote"
+In this example, `origin` is called a remote repository, or "remote"
 for short. The branches of this repository are called "remote
 branches" from our point of view. The remote-tracking branches listed
 above were created based on the remote branches at clone time and will
@@ -368,7 +368,7 @@ $ git switch -c my-todo-copy origin/todo
 You can also check out `origin/todo` directly to examine it or
 write a one-off patch.  See <<detached-head,detached head>>.
 
-Note that the name "origin" is just the name that Git uses by default
+Note that the name `origin` is just the name that Git uses by default
 to refer to the repository that you cloned from.
 
 [[how-git-stores-references]]
@@ -391,9 +391,9 @@ under the path given by their name.  However, for efficiency reasons
 they may also be packed together in a single file; see
 linkgit:git-pack-refs[1]).
 
-As another useful shortcut, the "HEAD" of a repository can be referred
-to just using the name of that repository.  So, for example, "origin"
-is usually a shortcut for the HEAD branch in the repository "origin".
+As another useful shortcut, the `HEAD` of a repository can be referred
+to just using the name of that repository.  So, for example, `origin`
+is usually a shortcut for the HEAD branch in the repository `origin`.
 
 For the complete list of paths which Git checks for references, and
 the order it uses to decide which to choose when there are multiple
@@ -491,9 +491,9 @@ Bisecting: 3537 revisions left to test after this
 -------------------------------------------------
 
 If you run `git branch` at this point, you'll see that Git has
-temporarily moved you in "(no branch)". HEAD is now detached from any
+temporarily moved you in "(no branch)". `HEAD` is now detached from any
 branch and points directly to a commit (with commit id 65934) that
-is reachable from "master" but not from v2.6.18. Compile and test it,
+is reachable from `master` but not from v2.6.18. Compile and test it,
 and see whether it crashes. Assume it does crash. Then:
 
 -------------------------------------------------
@@ -566,7 +566,7 @@ We have seen several ways of naming commits already:
 	- tag name: refers to the commit pointed to by the given tag
 	  (we've seen branches and tags are special cases of
 	  <<how-git-stores-references,references>>).
-	- HEAD: refers to the head of the current branch
+	- `HEAD`: refers to the head of the current branch
 
 There are many more; see the "SPECIFYING REVISIONS" section of the
 linkgit:gitrevisions[7] man page for the complete list of ways to
@@ -589,24 +589,24 @@ $ git show HEAD^1   # show the first parent of HEAD
 $ git show HEAD^2   # show the second parent of HEAD
 -------------------------------------------------
 
-In addition to HEAD, there are several other special names for
+In addition to `HEAD`, there are several other special names for
 commits:
 
 Merges (to be discussed later), as well as operations such as
 `git reset`, which change the currently checked-out commit, generally
-set ORIG_HEAD to the value HEAD had before the current operation.
+set `ORIG_HEAD` to the value `HEAD` had before the current operation.
 
 The `git fetch` operation always stores the head of the last fetched
-branch in FETCH_HEAD.  For example, if you run `git fetch` without
+branch in `FETCH_HEAD`.  For example, if you run `git fetch` without
 specifying a local branch as the target of the operation
 
 -------------------------------------------------
 $ git fetch git://example.com/proj.git theirbranch
 -------------------------------------------------
 
-the fetched commits will still be available from FETCH_HEAD.
+the fetched commits will still be available from `FETCH_HEAD`.
 
-When we discuss merges we'll also see the special name MERGE_HEAD,
+When we discuss merges we'll also see the special name `MERGE_HEAD`,
 which refers to the other branch that we're merging in to the current
 branch.
 
@@ -914,7 +914,7 @@ any version of a project; for example:
 $ git archive -o latest.tar.gz --prefix=project/ HEAD
 -------------------------------------------------
 
-will use HEAD to produce a gzipped tar archive in which each filename
+will use `HEAD` to produce a gzipped tar archive in which each filename
 is preceded by `project/`.  The output file format is inferred from
 the output file extension if possible, see linkgit:git-archive[1] for
 details.
@@ -1037,8 +1037,8 @@ at step 3, Git maintains a snapshot of the tree's contents in a
 special staging area called "the index."
 
 At the beginning, the content of the index will be identical to
-that of the HEAD.  The command `git diff --cached`, which shows
-the difference between the HEAD and the index, should therefore
+that of the `HEAD`.  The command `git diff --cached`, which shows
+the difference between the `HEAD` and the index, should therefore
 produce no output at that point.
 
 Modifying the index is easy:
@@ -1061,7 +1061,7 @@ After each step you can verify that
 $ git diff --cached
 -------------------------------------------------
 
-always shows the difference between the HEAD and the index file--this
+always shows the difference between the `HEAD` and the index file--this
 is what you'd commit if you created the commit now--and that
 
 -------------------------------------------------
@@ -1283,8 +1283,8 @@ index 802992c,2b60207..0000000
 
 Recall that the commit which will be committed after we resolve this
 conflict will have two parents instead of the usual one: one parent
-will be HEAD, the tip of the current branch; the other will be the
-tip of the other branch, which is stored temporarily in MERGE_HEAD.
+will be `HEAD`, the tip of the current branch; the other will be the
+tip of the other branch, which is stored temporarily in `MERGE_HEAD`.
 
 During the merge, the index holds three versions of each file.  Each of
 these three "file stages" represents a different version of the file:
@@ -1348,8 +1348,8 @@ $ git log --merge
 $ gitk --merge
 -------------------------------------------------
 
-These will display all commits which exist only on HEAD or on
-MERGE_HEAD, and which touch an unmerged file.
+These will display all commits which exist only on `HEAD` or on
+`MERGE_HEAD`, and which touch an unmerged file.
 
 You may also use linkgit:git-mergetool[1], which lets you merge the
 unmerged files using external tools such as Emacs or kdiff3.
@@ -1433,7 +1433,7 @@ commit; for example, to revert the most recent commit:
 $ git revert HEAD
 -------------------------------------------------
 
-This will create a new commit which undoes the change in HEAD.  You
+This will create a new commit which undoes the change in `HEAD`.  You
 will be given a chance to edit the commit message for the new commit.
 
 You can also revert an earlier change, for example, the next-to-last:
@@ -1486,7 +1486,7 @@ linkgit:git-restore[1]. The command
 $ git restore --source=HEAD^ path/to/file
 -------------------------------------------------
 
-replaces path/to/file by the contents it had in the commit HEAD^, and
+replaces path/to/file by the contents it had in the commit `HEAD^`, and
 also updates the index to match.  It does not change branches.
 
 If you just want to look at an old version of the file, without
@@ -1600,13 +1600,13 @@ $ gitk master@{"1 week ago"}	# ... or last week
 $ git log --walk-reflogs master	# show reflog entries for master
 -------------------------------------------------
 
-A separate reflog is kept for the HEAD, so
+A separate reflog is kept for the `HEAD`, so
 
 -------------------------------------------------
 $ git show HEAD@{"1 week ago"}
 -------------------------------------------------
 
-will show what HEAD pointed to one week ago, not what the current branch
+will show what `HEAD` pointed to one week ago, not what the current branch
 pointed to one week ago.  This allows you to see the history of what
 you've checked out.
 
@@ -1677,7 +1677,7 @@ into your own work.
 We have already seen <<Updating-a-repository-With-git-fetch,how to
 keep remote-tracking branches up to date>> with linkgit:git-fetch[1],
 and how to merge two branches.  So you can merge in changes from the
-original repository's master branch with:
+original repository's `master` branch with:
 
 -------------------------------------------------
 $ git fetch
@@ -1692,7 +1692,7 @@ $ git pull origin master
 -------------------------------------------------
 
 In fact, if you have `master` checked out, then this branch has been
-configured by `git clone` to get changes from the HEAD branch of the
+configured by `git clone` to get changes from the `HEAD` branch of the
 origin repository.  So often you can
 accomplish the above with just a simple
 
@@ -2568,7 +2568,7 @@ You can also edit a patch series with an interactive rebase.  This is
 the same as <<reordering-patch-series,reordering a patch series using
 `format-patch`>>, so use whichever interface you like best.
 
-Rebase your current HEAD on the last commit you want to retain as-is.
+Rebase your current `HEAD` on the last commit you want to retain as-is.
 For example, if you want to reorder the last 5 commits, use:
 
 -------------------------------------------------
@@ -2980,7 +2980,7 @@ file data at changing paths suggests a rename.  (See, for example, the
 `-M` option to linkgit:git-diff[1]).
 
 A commit is usually created by linkgit:git-commit[1], which creates a
-commit whose parent is normally the current HEAD, and whose tree is
+commit whose parent is normally the current `HEAD`, and whose tree is
 taken from the content currently stored in the index.
 
 [[tree-object]]
@@ -3507,7 +3507,7 @@ $ ls -a
 The `git submodule add <repo> <path>` command does a couple of things:
 
 - It clones the submodule from `<repo>` to the given `<path>` under the
-  current directory and by default checks out the master branch.
+  current directory and by default checks out the `master` branch.
 - It adds the submodule's clone path to the linkgit:gitmodules[5] file and
   adds this file to the index, ready to be committed.
 - It adds the submodule's current commit ID to the index, ready to be
@@ -3540,7 +3540,7 @@ $ git submodule status
 -------------------------------------------------
 
 NOTE: The commit object names shown above would be different for you, but they
-should match the HEAD commit object names of your repositories.  You can check
+should match the `HEAD` commit object names of your repositories.  You can check
 it by running `git ls-remote ../a`.
 
 Pulling down the submodules is a two-step process. First run `git submodule
@@ -4334,7 +4334,7 @@ $ git branch new		# create branch "new" starting at current HEAD
 $ git branch -d new		# delete branch "new"
 -----------------------------------------------
 
-Instead of basing a new branch on current HEAD (the default), use:
+Instead of basing a new branch on current `HEAD` (the default), use:
 
 -----------------------------------------------
 $ git branch new test    # branch named "test"
-- 
2.31.1.133.g84d06cdc06


^ permalink raw reply related	[relevance 2%]

* [PATCH v4 0/2] normalize & fix merge "up to date" messages
  @ 2021-05-02  5:14  3% ` Eric Sunshine
  2021-05-02  5:14  2%   ` [PATCH v4 2/2] merge: fix swapped "up to date" message components Eric Sunshine
  0 siblings, 1 reply; 200+ results
From: Eric Sunshine @ 2021-05-02  5:14 UTC (permalink / raw)
  To: git; +Cc: Josh Soref, Junio C Hamano, Elijah Newren, Eric Sunshine

This is a re-roll of Josh Soref's v3[1] which fixes swapped components
of an "Already up to date" message emitted by builtin/merge. This
re-roll additionally normalizes punctuation of "Already up to date"
messages throughout the project.

I kept Josh as author of patch [2/2] but completely rewrote the commit
message to refocus it is a simple fix for a nearly 13 year old bug.

[1]: https://lore.kernel.org/git/pull.934.v3.git.1619052906768.gitgitgadget@gmail.com/

Eric Sunshine (1):
  merge(s): apply consistent punctuation to "up to date" messages

Josh Soref (1):
  merge: fix swapped "up to date" message components

 builtin/merge.c      | 14 +++++++++-----
 merge-ort-wrappers.c |  2 +-
 merge-recursive.c    |  2 +-
 notes-merge.c        |  2 +-
 4 files changed, 12 insertions(+), 8 deletions(-)

Range-diff against v3:
-:  ---------- > 1:  3f96947e3a merge(s): apply consistent punctuation to "up to date" messages
1:  8cd2b8c335 ! 2:  5885b18b7f git-merge: rewrite already up to date message
    @@ Metadata
     Author: Josh Soref <jsoref@gmail.com>
     
      ## Commit message ##
    -    git-merge: rewrite already up to date message
    +    merge: fix swapped "up to date" message components
     
    -    Usually, it is easier to read a message if it makes its primary
    -    point first, before giving a parenthetical note.
    +    The rewrite of git-merge from shell to C in 1c7b76be7d (Build in merge,
    +    2008-07-07) accidentally transformed the message:
     
    -    Possible messages before include:
    -    ` (nothing to squash)Already up to date.
    -    `
    -    and
    -    `Already up to date. Yeeah!
    -    `
    +        Already up-to-date. (nothing to squash)
     
    -    After:
    -    `Already up to date (nothing to squash).
    -    `
    -    and
    -    `Already up to date.
    -    `
    +    to:
     
    -    Localizations now have two easy to understand translatable strings.
    -    (All localizations of the previous strings are broken.)
    +        (nothing to squash)Already up-to-date.
    +
    +    due to reversed printf() arguments. This problem has gone unnoticed
    +    despite being touched over the years by 7f87aff22c (Teach/Fix pull/fetch
    +    -q/-v options, 2008-11-15) and bacec47845 (i18n: git-merge basic
    +    messages, 2011-02-22), and tangentially by bef4830e88 (i18n: merge: mark
    +    messages for translation, 2016-06-17) and 7560f547e6 (treewide: correct
    +    several "up-to-date" to "up to date", 2017-08-23).
    +
    +    Fix it by restoring the message to its intended order. While at it, help
    +    translators out by avoiding "sentence Lego".
    +
    +    [es: rewrote commit message]
     
         Co-authored-by: Eric Sunshine <sunshine@sunshineco.com>
         Signed-off-by: Josh Soref <jsoref@gmail.com>
    +    Signed-off-by: Eric Sunshine <sunshine@sunshineco.com>
     
      ## builtin/merge.c ##
     @@ builtin/merge.c: static void restore_state(const struct object_id *head,
    @@ builtin/merge.c: static void restore_state(const struct object_id *head,
     -		printf("%s%s\n", squash ? _(" (nothing to squash)") : "", msg);
     +	if (verbosity >= 0) {
     +		if (squash)
    -+			puts(_("Already up to date (nothing to squash)."));
    ++			puts(_("Already up to date. (nothing to squash)"));
     +		else
     +			puts(_("Already up to date."));
     +	}
    @@ builtin/merge.c: int cmd_merge(int argc, const char **argv, const char *prefix)
      			}
      		}
      		if (up_to_date) {
    --			finish_up_to_date(_("Already up to date. Yeeah!"));
    +-			finish_up_to_date(_("Already up to date."));
     +			finish_up_to_date();
      			goto done;
      		}
-- 
2.31.1.607.g51e8a6a459


^ permalink raw reply	[relevance 3%]

* [PATCH v4 2/2] merge: fix swapped "up to date" message components
  2021-05-02  5:14  3% ` [PATCH v4 0/2] normalize & fix merge "up to date" messages Eric Sunshine
@ 2021-05-02  5:14  2%   ` Eric Sunshine
  2021-05-03  5:21  2%     ` Junio C Hamano
  0 siblings, 1 reply; 200+ results
From: Eric Sunshine @ 2021-05-02  5:14 UTC (permalink / raw)
  To: git; +Cc: Josh Soref, Junio C Hamano, Elijah Newren, Eric Sunshine

From: Josh Soref <jsoref@gmail.com>

The rewrite of git-merge from shell to C in 1c7b76be7d (Build in merge,
2008-07-07) accidentally transformed the message:

    Already up-to-date. (nothing to squash)

to:

    (nothing to squash)Already up-to-date.

due to reversed printf() arguments. This problem has gone unnoticed
despite being touched over the years by 7f87aff22c (Teach/Fix pull/fetch
-q/-v options, 2008-11-15) and bacec47845 (i18n: git-merge basic
messages, 2011-02-22), and tangentially by bef4830e88 (i18n: merge: mark
messages for translation, 2016-06-17) and 7560f547e6 (treewide: correct
several "up-to-date" to "up to date", 2017-08-23).

Fix it by restoring the message to its intended order. While at it, help
translators out by avoiding "sentence Lego".

[es: rewrote commit message]

Co-authored-by: Eric Sunshine <sunshine@sunshineco.com>
Signed-off-by: Josh Soref <jsoref@gmail.com>
Signed-off-by: Eric Sunshine <sunshine@sunshineco.com>
---
 builtin/merge.c | 14 +++++++++-----
 1 file changed, 9 insertions(+), 5 deletions(-)

diff --git a/builtin/merge.c b/builtin/merge.c
index 3472a0ce3b..eddb8ae70d 100644
--- a/builtin/merge.c
+++ b/builtin/merge.c
@@ -393,10 +393,14 @@ static void restore_state(const struct object_id *head,
 }
 
 /* This is called when no merge was necessary. */
-static void finish_up_to_date(const char *msg)
+static void finish_up_to_date(void)
 {
-	if (verbosity >= 0)
-		printf("%s%s\n", squash ? _(" (nothing to squash)") : "", msg);
+	if (verbosity >= 0) {
+		if (squash)
+			puts(_("Already up to date. (nothing to squash)"));
+		else
+			puts(_("Already up to date."));
+	}
 	remove_merge_branch_state(the_repository);
 }
 
@@ -1522,7 +1526,7 @@ int cmd_merge(int argc, const char **argv, const char *prefix)
 		 * If head can reach all the merge then we are up to date.
 		 * but first the most common case of merging one remote.
 		 */
-		finish_up_to_date(_("Already up to date."));
+		finish_up_to_date();
 		goto done;
 	} else if (fast_forward != FF_NO && !remoteheads->next &&
 			!common->next &&
@@ -1610,7 +1614,7 @@ int cmd_merge(int argc, const char **argv, const char *prefix)
 			}
 		}
 		if (up_to_date) {
-			finish_up_to_date(_("Already up to date."));
+			finish_up_to_date();
 			goto done;
 		}
 	}
-- 
2.31.1.607.g51e8a6a459


^ permalink raw reply related	[relevance 2%]

* Re: [PATCH v4 2/2] merge: fix swapped "up to date" message components
  2021-05-02  5:14  2%   ` [PATCH v4 2/2] merge: fix swapped "up to date" message components Eric Sunshine
@ 2021-05-03  5:21  2%     ` Junio C Hamano
  2021-05-03  5:50  2%       ` Eric Sunshine
  0 siblings, 1 reply; 200+ results
From: Junio C Hamano @ 2021-05-03  5:21 UTC (permalink / raw)
  To: Eric Sunshine; +Cc: git, Josh Soref, Elijah Newren

Eric Sunshine <sunshine@sunshineco.com> writes:

> +	if (verbosity >= 0) {
> +		if (squash)
> +			puts(_("Already up to date. (nothing to squash)"));

The original scripted Porcelain may have said so, but the placement
of full-stop in the above feels a bit strange.  Should we rephrase
it to

	Already up to date (nothing to squash).

as we are fixing the phrasing now?

^ permalink raw reply	[relevance 2%]

* Re: [PATCH v4 2/2] merge: fix swapped "up to date" message components
  2021-05-03  5:21  2%     ` Junio C Hamano
@ 2021-05-03  5:50  2%       ` Eric Sunshine
  2021-05-03  6:28  2%         ` Junio C Hamano
  0 siblings, 1 reply; 200+ results
From: Eric Sunshine @ 2021-05-03  5:50 UTC (permalink / raw)
  To: Junio C Hamano; +Cc: Git List, Josh Soref, Elijah Newren

On Mon, May 3, 2021 at 1:21 AM Junio C Hamano <gitster@pobox.com> wrote:
> Eric Sunshine <sunshine@sunshineco.com> writes:
> > +     if (verbosity >= 0) {
> > +             if (squash)
> > +                     puts(_("Already up to date. (nothing to squash)"));
>
> The original scripted Porcelain may have said so, but the placement
> of full-stop in the above feels a bit strange.  Should we rephrase
> it to
>
>         Already up to date (nothing to squash).
>
> as we are fixing the phrasing now?

I don't have a strong opinion about it, and can go either way with it.
Josh's patch did place the full-stop after the closing parenthesis. I
can re-roll if people think that would be preferable (unless you want
to change it locally while queuing).

^ permalink raw reply	[relevance 2%]

* Re: [PATCH v4 2/2] merge: fix swapped "up to date" message components
  2021-05-03  5:50  2%       ` Eric Sunshine
@ 2021-05-03  6:28  2%         ` Junio C Hamano
  0 siblings, 0 replies; 200+ results
From: Junio C Hamano @ 2021-05-03  6:28 UTC (permalink / raw)
  To: Eric Sunshine; +Cc: Git List, Josh Soref, Elijah Newren

Eric Sunshine <sunshine@sunshineco.com> writes:

> On Mon, May 3, 2021 at 1:21 AM Junio C Hamano <gitster@pobox.com> wrote:
>> Eric Sunshine <sunshine@sunshineco.com> writes:
>> > +     if (verbosity >= 0) {
>> > +             if (squash)
>> > +                     puts(_("Already up to date. (nothing to squash)"));
>>
>> The original scripted Porcelain may have said so, but the placement
>> of full-stop in the above feels a bit strange.  Should we rephrase
>> it to
>>
>>         Already up to date (nothing to squash).
>>
>> as we are fixing the phrasing now?
>
> I don't have a strong opinion about it, and can go either way with it.
> Josh's patch did place the full-stop after the closing parenthesis. I
> can re-roll if people think that would be preferable (unless you want
> to change it locally while queuing).

I am fine to leave this outisde the topic.

^ permalink raw reply	[relevance 2%]

* What's cooking in git.git (May 2021, #01; Thu, 6)
@ 2021-05-06  5:37  3% Junio C Hamano
  0 siblings, 0 replies; 200+ results
From: Junio C Hamano @ 2021-05-06  5:37 UTC (permalink / raw)
  To: git

Here are the topics that have been cooking.  Commits prefixed with '-' are
only in 'seen' (formerly 'pu'---proposed updates) while commits prefixed
with '+' are in 'next'.  The ones marked with '.' do not appear in any of
the integration branches, but I am still holding onto them.

Copies of the source code to Git live in many repositories, and the
following is a list of the ones I push into or their mirrors.  Some
repositories have only a subset of branches.

With maint, master, next, seen, todo:

	git://git.kernel.org/pub/scm/git/git.git/
	git://repo.or.cz/alt-git.git/
	https://kernel.googlesource.com/pub/scm/git/git/
	https://github.com/git/git/
	https://gitlab.com/git-vcs/git/

With all the integration branches and topics broken out:

	https://github.com/gitster/git/

Even though the preformatted documentation in HTML and man format
are not sources, they are published in these repositories for
convenience (replace "htmldocs" with "manpages" for the manual
pages):

	git://git.kernel.org/pub/scm/git/git-htmldocs.git/
	https://github.com/gitster/git-htmldocs.git/

Release tarballs are available at:

	https://www.kernel.org/pub/software/scm/git/

--------------------------------------------------
[Graduated to 'master']

* ab/pathname-encoding-doc (2021-04-20) 1 commit
  (merged to 'next' on 2021-04-20 at a90562c59f)
 + doc: clarify the filename encoding in git diff

 Clarify that pathnames recorded in Git trees are most often (but
 not necessarily) encoded in UTF-8.


* ds/maintenance-prefetch-fix (2021-04-16) 4 commits
  (merged to 'next' on 2021-04-16 at 0a1818e235)
 + maintenance: respect remote.*.skipFetchAll
 + maintenance: use 'git fetch --prefetch'
 + fetch: add --prefetch option
 + maintenance: simplify prefetch logic

 The prefetch task in "git maintenance" assumed that "git fetch"
 from any remote would fetch all its local branches, which would
 fetch too much if the user is interested in only a subset of
 branches there.


* ds/sparse-index (2021-03-30) 21 commits
  (merged to 'next' on 2021-04-07 at f1290a7929)
 + p2000: add sparse-index repos
 + sparse-index: loose integration with cache_tree_verify()
 + cache-tree: integrate with sparse directory entries
 + sparse-checkout: disable sparse-index
 + sparse-checkout: toggle sparse index from builtin
 + sparse-index: add index.sparse config option
 + sparse-index: check index conversion happens
 + unpack-trees: allow sparse directories
 + submodule: sparse-index should not collapse links
 + sparse-index: convert from full to sparse
 + sparse-index: add 'sdir' index extension
 + sparse-checkout: hold pattern list in index
 + unpack-trees: ensure full index
 + test-tool: don't force full index
 + test-read-cache: print cache entries with --table
 + t1092: compare sparse-checkout to sparse-index
 + sparse-index: implement ensure_full_index()
 + sparse-index: add guard to ensure full index
 + t1092: clean up script quoting
 + t/perf: add performance test for sparse operations
 + sparse-index: design doc and format update
 (this branch is used by ds/sparse-index-protections and ds/status-with-sparse-index.)

 Both in-core and on-disk index has been updated to optionally omit
 individual entries and replace them with the tree object that
 corresponds to the directory that contains them when the "cone"
 mode of sparse checkout is in use.


* ds/sparse-index-protections (2021-04-14) 26 commits
  (merged to 'next' on 2021-04-17 at f1c40f89ba)
 + name-hash: use expand_to_path()
 + sparse-index: expand_to_path()
 + name-hash: don't add directories to name_hash
 + revision: ensure full index
 + resolve-undo: ensure full index
 + read-cache: ensure full index
 + pathspec: ensure full index
 + merge-recursive: ensure full index
 + entry: ensure full index
 + dir: ensure full index
 + update-index: ensure full index
 + stash: ensure full index
 + rm: ensure full index
 + merge-index: ensure full index
 + ls-files: ensure full index
 + grep: ensure full index
 + fsck: ensure full index
 + difftool: ensure full index
 + commit: ensure full index
 + checkout: ensure full index
 + checkout-index: ensure full index
 + add: ensure full index
 + cache: move ensure_full_index() to cache.h
 + read-cache: expand on query into sparse-directory entry
 + *: remove 'const' qualifier for struct index_state
 + sparse-index: API protection strategy
 (this branch is used by ds/status-with-sparse-index; uses ds/sparse-index.)

 Builds on top of the sparse-index infrastructure to mark operations
 that are not ready to mark with the sparse index, causing them to
 fall back on fully-populated index that they always have worked with.


* hn/refs-trace-errno (2021-04-12) 1 commit
  (merged to 'next' on 2021-04-20 at 0816e49d22)
 + refs: print errno for read_raw_ref if GIT_TRACE_REFS is set

 Show errno in the trace output in the error codepath that calls
 read_raw_ref method.


* jk/promisor-optim (2021-04-13) 3 commits
  (merged to 'next' on 2021-04-15 at 41f303ef9b)
 + revision: avoid parsing with --exclude-promisor-objects
 + lookup_unknown_object(): take a repository argument
 + is_promisor_object(): free tree buffer after parsing
 (this branch is used by rs/repack-without-loosening-promised-objects.)

 Handling of "promisor packs" that allows certain objects to be
 missing and lazily retrievable has been optimized (a bit).


* mt/parallel-checkout-part-2 (2021-04-19) 5 commits
  (merged to 'next' on 2021-04-20 at d4779b8864)
 + parallel-checkout: add design documentation
 + parallel-checkout: support progress displaying
 + parallel-checkout: add configuration options
 + parallel-checkout: make it truly parallel
 + unpack-trees: add basic support for parallel checkout
 (this branch is used by mt/parallel-checkout-part-3.)

 The checkout machinery has been taught to perform the actual
 write-out of the files in parallel when able.


* mt/pkt-write-errors (2021-04-15) 1 commit
  (merged to 'next' on 2021-04-16 at 4a82d89ff3)
 + pkt-line: do not report packet write errors twice

 When packet_write() fails, we gave an extra error message
 unnecessarily, which has been corrected.


* ow/push-quiet-set-upstream (2021-04-15) 1 commit
  (merged to 'next' on 2021-04-16 at 9466d4ef38)
 + transport: respect verbosity when setting upstream

 "git push --quiet --set-upstream" was not quiet when setting the
 upstream branch configuration, which has been corrected.


* so/log-diff-merge (2021-04-16) 5 commits
  (merged to 'next' on 2021-04-17 at 6c1eba8ee3)
 + doc/diff-options: document new --diff-merges features
 + diff-merges: introduce log.diffMerges config variable
 + diff-merges: adapt -m to enable default diff format
 + diff-merges: refactor set_diff_merges()
 + diff-merges: introduce --diff-merges=on

 "git log" learned "--diff-merges=<style>" option, with an
 associated configuration variable log.diffMerges.


* vs/completion-with-set-u (2021-04-16) 1 commit
  (merged to 'next' on 2021-04-20 at 179933f961)
 + completion: avoid aliased command lookup error in nounset mode

 Effort to make the command line completion (in contrib/) safe with
 "set -u" continues.

--------------------------------------------------
[New Topics]

* ad/cygwin-no-backslashes-in-paths (2021-04-30) 1 commit
  (merged to 'next' on 2021-04-30 at e2cf03a8aa)
 + cygwin: disallow backslashes in file names

 Cygwin pathname handling fix.

 Will merge to 'master'.


* hn/refs-errno-cleanup (2021-04-30) 8 commits
 - refs: explicitly propagate errno from refs_read_raw_ref
 - refs: stop setting EINVAL and ELOOP in symref resolution
 - refs: clear errno return in refs_resolve_ref_unsafe()
 - refs: add failure_errno to refs_read_raw_ref() signature
 - refs: make errno output explicit for refs_resolve_ref_unsafe
 - refs: make errno output explicit for read_raw_ref_fn
 - refs/files-backend: stop setting errno from lock_ref_oid_basic
 - refs: remove EINVAL specification from the errno sideband in read_raw_ref_fn

 Futz with the way 'errno' is relied on in the refs API to carry the
 failure modes up the callchain.

 Waiting for reviews.


* jc/test-allows-local (2021-05-03) 1 commit
  (merged to 'next' on 2021-05-04 at 768071c554)
 + CodingGuidelines: explicitly allow "local" for test scripts

 Document that our test can use "local" keyword.

 Will merge to 'master'.


* jk/doc-format-patch-skips-merges (2021-05-03) 1 commit
  (merged to 'next' on 2021-05-04 at cac68f7193)
 + docs/format-patch: mention handling of merges

 Document that "format-patch" skips merges.

 Will merge to 'master'.


* jk/pack-objects-negative-options-fix (2021-05-03) 5 commits
  (merged to 'next' on 2021-05-04 at 4a61f68cf0)
 + pack-objects: clamp negative depth to 0
 + t5316: check behavior of pack-objects --depth=0
 + pack-objects: clamp negative window size to 0
 + t5300: check that we produced expected number of deltas
 + t5300: modernize basic tests

 Options to "git pack-objects" that take numeric values like
 --window and --depth should not accept negative values; the input
 validation has been tightened.

 Will merge to 'master'.


* jk/symlinked-dotgitx-cleanup (2021-05-04) 9 commits
  (merged to 'next' on 2021-05-04 at deca6ca662)
 + docs: document symlink restrictions for dot-files
 + fsck: warn about symlinked dotfiles we'll open with O_NOFOLLOW
 + t0060: test ntfs/hfs-obscured dotfiles
 + t7450: test .gitmodules symlink matching against obscured names
 + t7450: test verify_path() handling of gitmodules
 + t7415: rename to expand scope
 + fsck_tree(): wrap some long lines
 + fsck_tree(): fix shadowed variable
 + t7415: remove out-dated comment about translation

 Various test and documentation updates about .gitsomething paths
 that are symlinks.

 Will merge to 'master'.


* nc/submodule-update-quiet (2021-05-03) 1 commit
  (merged to 'next' on 2021-05-04 at 09bed89b60)
 + submodule update: silence underlying fetch with "--quiet"

 "git submodule update --quiet" did not propagate the quiet option
 down to underlying "git fetch", which has been corrected.

 Will merge to 'master'.


* en/ort-perf-batch-11 (2021-05-04) 13 commits
 - merge-ort, diffcore-rename: employ cached renames when possible
 - merge-ort: handle interactions of caching and rename/rename(1to1) cases
 - merge-ort: add helper functions for using cached renames
 - merge-ort: preserve cached renames for the appropriate side
 - merge-ort: avoid accidental API mis-use
 - merge-ort: add code to check for whether cached renames can be reused
 - merge-ort: populate caches of rename detection results
 - merge-ort: add data structures for in-memory caching of rename detection
 - t6429: testcases for remembering renames
 - fast-rebase: write conflict state to working tree, index, and HEAD
 - fast-rebase: change assert() to BUG()
 - Documentation/technical: describe remembering renames optimization
 - t6423: rename file within directory that other side renamed

 Optimize out repeated rename detection in a sequence of mergy
 operations.

 Waiting for reviews.


* si/zsh-complete-comment-fix (2021-05-04) 1 commit
  (merged to 'next' on 2021-05-04 at a15c1ea590)
 + work around zsh comment in __git_complete_worktree_paths

 Portability fix for command line completion script (in contrib/).

 Will merge to 'master'.


* dd/mailinfo-quoted-cr (2021-05-05) 5 commits
 - am: learn to process quoted lines that ends with CRLF
 - mailinfo: strip quoted CR on users' wish
 - mailinfo: skip quoted CR on user's wish
 - mailinfo: warn if CR found in base64/quoted-printable email
 - mailinfo: avoid magic number in option parsing

 "git mailinfo" (hence "git am") learned the "--quoted-cr" option to
 control how lines ending with CRLF wrapped in base64 or qp are
 handled.

 Expecting a reroll.
 cf. <YJK/ieA7fzB+h01t@danh.dev>


* ll/clone-reject-shallow (2021-05-05) 1 commit
  (merged to 'next' on 2021-05-06 at 4a165ffc96)
 + t5601: mark protocol v2-only test

 Fix tests when forced to use v0 protocol.

 Will merge to 'master'.


* ab/perl-makefile-cleanup (2021-05-06) 4 commits
 - perl: use mock i18n functions under NO_GETTEXT=Y
 - Makefile: regenerate *.pm on NO_PERL_CPAN_FALLBACKS change
 - Makefile: regenerate perl/build/* if GIT-PERL-DEFINES changes
 - Makefile: don't re-define PERL_DEFINES

 Build procedure clean-up.

 Will merge to 'next'.


* ab/sparse-index-cleanup (2021-05-06) 1 commit
 - sparse-index.c: remove set_index_sparse_config()

 Code clean-up.

 Will merge to 'next'.


* ab/streaming-simplify (2021-05-06) 5 commits
 - streaming.c: move {open,close,read} from vtable to "struct git_istream"
 - streaming.c: stop passing around "object_info *" to open()
 - streaming.c: remove {open,close,read}_method_decl() macros
 - streaming.c: remove enum/function/vtbl indirection
 - streaming.c: avoid forward declarations

 Code clean-up.

 Will merge to 'next'.


* ab/trace2-squelch-bcc-warning (2021-05-05) 1 commit
 - trace2: refactor to avoid gcc warning under -O3

 Workaround compiler warnings.


* jk/p4-locate-branch-point-optim (2021-05-06) 2 commits
 - git-p4: speed up search for branch parent
 - git-p4: ensure complex branches are cloned correctly

 "git p4" learned to find branch points more efficiently.

 Will merge to 'next'.


* ow/no-dryrun-in-add-i (2021-05-06) 1 commit
 - add: die if both --dry-run and --interactive are given

 "git add -i --dry-run" does not dry-run, which was surprising.  The
 combination of options has taught to error out.

 Will merge to 'next'.


* pw/patience-diff-clean-up (2021-05-05) 2 commits
  (merged to 'next' on 2021-05-06 at 1ce651569c)
 + patience diff: remove unused variable
 + patience diff: remove unnecessary string comparisons

 Code clean-up.

 Will merge to 'master'.


* pw/word-diff-zero-width-matches (2021-05-05) 1 commit
  (merged to 'next' on 2021-05-06 at e5653da568)
 + word diff: handle zero length matches

 The word-diff mode has been taught to work better with a word
 regexp that can match an empty string.

 Will merge to 'master'.

--------------------------------------------------
[Stalled]

* jh/rfc-builtin-fsmonitor (2021-05-04) 24 commits
 - fsmonitor: only enable it in non-bare repositories
 - t7527: test status with untracked-cache and fsmonitor--daemon
 - p7519: add fsmonitor--daemon
 - t7527: create test for fsmonitor--daemon
 - fsmonitor: force update index when fsmonitor token advances
 - fsmonitor--daemon: use a cookie file to sync with file system
 - fsmonitor--daemon:: introduce client delay for testing
 - fsmonitor--daemon: periodically truncate list of modified files
 - fsmonitor--daemon: implement handle_client callback
 - fsmonitor-fs-listen-macos: implement FSEvent listener on MacOS
 - fsmonitor-fs-listen-macos: add macos header files for FSEvent
 - fsmonitor-fs-listen-win32: implement FSMonitor backend on Windows
 - fsmonitor--daemon: create token-based changed path cache
 - fsmonitor--daemon: define token-ids
 - fsmonitor--daemon: add pathname classification
 - fsmonitor--daemon: implement daemon command options
 - fsmonitor-fs-listen-macos: stub in backend for MacOS
 - fsmonitor-fs-listen-win32: stub in backend for Windows
 - fsmonitor--daemon: implement client command options
 - fsmonitor--daemon: add a built-in fsmonitor daemon
 - fsmonitor: introduce `core.useBuiltinFSMonitor` to call the daemon via IPC
 - config: FSMonitor is repository-specific
 - fsmonitor-ipc: create client routines for git-fsmonitor--daemon
 - Merge branch 'jh/simple-ipc' into jh/rfc-builtin-fsmonitor

 An attempt to write and ship with a watchman equivalent tailored
 for our use.


* ag/merge-strategies-in-c (2021-03-17) 15 commits
 - sequencer: use the "octopus" merge strategy without forking
 - sequencer: use the "resolve" strategy without forking
 - merge: use the "octopus" strategy without forking
 - merge: use the "resolve" strategy without forking
 - merge-octopus: rewrite in C
 - merge-recursive: move better_branch_name() to merge.c
 - merge-resolve: rewrite in C
 - merge-one-file: rewrite in C
 - update-index: move add_cacheinfo() to read-cache.c
 - merge-index: add a new way to invoke `git-merge-one-file'
 - merge-index: drop the index
 - merge-index: libify merge_one_path() and merge_all()
 - t6060: add tests for removed files
 - t6060: modify multiple files to expose a possible issue with merge-index
 - t6407: modernise tests

 The resolve and octopus merge strategy backends have been rewritten
 in C.

 Expecting a (hopefully final) reroll.
 cf. <nycvar.QRO.7.76.6.2103241142220.50@tvgsbejvaqbjf.bet>


* ab/describe-tests-fix (2021-04-29) 5 commits
 - describe tests: support -C in "check_describe"
 - describe tests: fix nested "test_expect_success" call
 - describe tests: don't rely on err.actual from "check_describe"
 - describe tests: refactor away from glob matching
 - describe tests: improve test for --work-tree & --dirty
 (this branch uses ab/test-lib-updates.)

 Various updates to tests around "git describe"

 Waiting for the base topic to solidify.


* ab/pickaxe-pcre2 (2021-04-29) 22 commits
 - xdiff-interface: replace discard_hunk_line() with a flag
 - xdiff users: use designated initializers for out_line
 - pickaxe -G: don't special-case create/delete
 - pickaxe -G: terminate early on matching lines
 - xdiff-interface: allow early return from xdiff_emit_line_fn
 - xdiff-interface: prepare for allowing early return
 - pickaxe -S: slightly optimize contains()
 - pickaxe: rename variables in has_changes() for brevity
 - pickaxe -S: support content with NULs under --pickaxe-regex
 - pickaxe: assert that we must have a needle under -G or -S
 - pickaxe: refactor function selection in diffcore-pickaxe()
 - perf: add performance test for pickaxe
 - pickaxe/style: consolidate declarations and assignments
 - diff.h: move pickaxe fields together again
 - pickaxe: die when --find-object and --pickaxe-all are combined
 - pickaxe: die when -G and --pickaxe-regex are combined
 - pickaxe tests: add missing test for --no-pickaxe-regex being an error
 - pickaxe tests: test for -G, -S and --find-object incompatibility
 - pickaxe tests: add test for "log -S" not being a regex
 - pickaxe tests: add test for diffgrep_consume() internals
 - pickaxe tests: refactor to use test_commit --append --printf
 - grep/pcre2 tests: reword comments referring to kwset
 (this branch uses ab/test-lib-updates.)

 Rewrite the backend for "diff -G/-S" to use pcre2 engine when
 available.

 Waiting for the base topic to solidify.


* es/config-hooks (2021-03-10) 36 commits
 . run-command: stop thinking about hooks
 . git-send-email: use 'git hook run' for 'sendemail-validate'
 . bugreport: use hook_exists instead of find_hook
 . receive-pack: convert receive hooks to hook.h
 . post-update: use hook.h library
 . proc-receive: acquire hook list from hook.h
 . receive-pack: convert 'update' hook to hook.h
 . reference-transaction: look for hooks in config
 . transport: convert pre-push hook to use config
 . hook: convert 'post-rewrite' hook to config
 . hooks: convert 'post-checkout' hook to hook library
 . git-p4: use 'git hook' to run hooks
 . receive-pack: convert push-to-checkout hook to hook.h
 . read-cache: convert post-index-change hook to use config
 . rebase: teach pre-rebase to use hook.h
 . gc: use hook library for pre-auto-gc hook
 . merge: use config-based hooks for post-merge hook
 . am: convert applypatch hooks to use config
 . commit: use config-based hooks
 . hooks: allow callers to capture output
 . run-command: allow capturing of collated output
 . hook: provide stdin by string_list or callback
 . run-command: add stdin callback for parallelization
 . hook: allow specifying working directory for hooks
 . hook: allow parallel hook execution
 . run-command: allow stdin for run_processes_parallel
 . hook: support passing stdin to hooks
 . hook: introduce hook_exists()
 . hook: add 'run' subcommand
 . parse-options: parse into strvec
 . hook: implement hookcmd.<name>.skip
 . hook: teach hook.runHookDir
 . hook: include hookdir hook in list
 . hook: add list command
 . hook: scaffolding for git-hook subcommand
 . doc: propose hooks managed by the config

 The "hooks defined in config" topic.

--------------------------------------------------
[Cooking]

* dl/complete-stash-updates (2021-04-27) 4 commits
  (merged to 'next' on 2021-05-03 at 8901a9c431)
 + git-completion.bash: consolidate cases in _git_stash()
 + git-completion.bash: use $__git_cmd_idx in more places
 + git-completion.bash: rename to $__git_cmd_idx
 + git-completion.bash: separate some commands onto their own line
 (this branch uses dl/complete-stash.)

 Further update the command line completion (in contrib/) for "git
 stash".

 Will merge to 'master'.


* ab/pretty-date-format-tests (2021-04-27) 2 commits
  (merged to 'next' on 2021-04-30 at bd2d680c23)
 + pretty tests: give --date/format tests a better description
 + pretty tests: simplify %aI/%cI date format test
 (this branch is used by zh/pretty-date-human.)

 Tweak a few tests for "log --format=..." that show timestamps in
 various formats.

 Will merge to 'master'.


* ds/status-with-sparse-index (2021-04-28) 10 commits
 - fsmonitor: test with sparse index
 - status: use sparse-index throughout
 - status: skip sparse-checkout percentage with sparse-index
 - dir.c: accept a directory as part of cone-mode patterns
 - unpack-trees: stop recursing into sparse directories
 - unpack-trees: compare sparse directories correctly
 - unpack-trees: preserve cache_bottom
 - t1092: add tests for status/add and sparse files
 - Merge branch 'mt/add-rm-in-sparse-checkout' into ds/status-with-sparse-index
 - Merge branch 'ds/sparse-index-protections' into ds/status-with-sparse-index
 (this branch uses mt/add-rm-in-sparse-checkout.)

 "git status" codepath learned to work with sparsely populated index
 without hydrating it fully.


* hn/trace-reflog-expiry (2021-04-27) 1 commit
  (merged to 'next' on 2021-04-30 at 6bc9a79b61)
 + refs/debug: trace into reflog expiry too

 The reflog expiry machinery has been taught to emit trace events.

 Will merge to 'master'.


* jk/prune-with-bitmap-fix (2021-04-29) 2 commits
  (merged to 'next' on 2021-04-30 at bede558f31)
 + prune: save reachable-from-recent objects with bitmaps
 + pack-bitmap: clean up include_check after use

 When the reachability bitmap is in effect, the "do not lose
 recently created objects and those that are reachable from them"
 safety to protect us from races were disabled by mistake, which has
 been corrected.

 Will merge to 'master'.


* js/merge-already-up-to-date-message-reword (2021-05-03) 2 commits
  (merged to 'next' on 2021-05-04 at b2e696ecd7)
 + merge: fix swapped "up to date" message components
 + merge(s): apply consistent punctuation to "up to date" messages

 A few variants of informational message "Already up-to-date" has
 been rephrased.

 Will merge to 'master'.


* jz/apply-3way-first-message-fix (2021-04-29) 1 commit
  (merged to 'next' on 2021-04-30 at 829167e135)
 + apply: adjust messages to account for --3way changes

 When we swapped the order of --3way fallback, we forgot to adjust
 the message we give when the first method fails and the second
 method is attempted (which used to be "direct application failed
 hence we try 3way", now it is the other way around).

 Will merge to 'master'.


* ls/fast-export-signed (2021-05-03) 5 commits
 - fast-export, fast-import: add support for signed-commits
 - fast-export: do not modify memory from get_commit_buffer
 - git-fast-export.txt: clarify why 'verbatim' may not be a good idea
 - fast-export: rename --signed-tags='warn' to 'warn-verbatim'
 - git-fast-import.txt: add missing LF in the BNF

 "git fast-export" offers a way to control how signed tags are
 handled; the mechanism has been extended to allow specifying how
 signed commits are handled as well.

 Expecting a reroll.
 cf. <xmqqa6pca0pv.fsf@gitster.g>, <xmqq1rao9zev.fsf@gitster.g>


* ls/subtree (2021-04-28) 30 commits
  (merged to 'next' on 2021-05-03 at 12c5fe8677)
 + subtree: be stricter about validating flags
 + subtree: push: allow specifying a local rev other than HEAD
 + subtree: allow 'split' flags to be passed to 'push'
 + subtree: allow --squash to be used with --rejoin
 + subtree: give the docs a once-over
 + subtree: have $indent actually affect indentation
 + subtree: don't let debug and progress output clash
 + subtree: add comments and sanity checks
 + subtree: remove duplicate check
 + subtree: parse revs in individual cmd_ functions
 + subtree: use "^{commit}" instead of "^0"
 + subtree: don't fuss with PATH
 + subtree: use "$*" instead of "$@" as appropriate
 + subtree: use more explicit variable names for cmdline args
 + subtree: use git-sh-setup's `say`
 + subtree: use `git merge-base --is-ancestor`
 + subtree: drop support for git < 1.7
 + subtree: more consistent error propagation
 + subtree: don't have loose code outside of a function
 + subtree: t7900: add porcelain tests for 'pull' and 'push'
 + subtree: t7900: add a test for the -h flag
 + subtree: t7900: rename last_commit_message to last_commit_subject
 + subtree: t7900: fix 'verify one file change per commit'
 + subtree: t7900: delete some dead code
 + subtree: t7900: use 'test' for string equality
 + subtree: t7900: comment subtree_test_create_repo
 + subtree: t7900: use consistent formatting
 + subtree: t7900: use test-lib.sh's test_count
 + subtree: t7900: update for having the default branch name be 'main'
 + .gitignore: ignore 'git-subtree' as a build artifact

 "git subtree" updates.

 Will merge to 'master'.


* mt/parallel-checkout-part-3 (2021-05-05) 8 commits
 - ci: run test round with parallel-checkout enabled
 - parallel-checkout: add tests related to .gitattributes
 - t0028: extract encoding helpers to lib-encoding.sh
 - parallel-checkout: add tests related to path collisions
 - parallel-checkout: add tests for basic operations
 - checkout-index: add parallel checkout support
 - builtin/checkout.c: complete parallel checkout support
 - make_transient_cache_entry(): optionally alloc from mem_pool

 The final part of "parallel checkout".

 Will merge to 'next'.


* po/diff-patch-doc (2021-04-28) 1 commit
  (merged to 'next' on 2021-04-30 at 58af0f4b5e)
 + doc: point to diff attribute in patch format docs

 Doc update.

 Will merge to 'master'.


* rj/bisect-skip-honor-terms (2021-04-30) 1 commit
  (merged to 'next' on 2021-05-04 at f7c11bba06)
 + bisect--helper: use BISECT_TERMS in 'bisect skip' command

 "git bisect skip" when custom words are used for new/old did not
 work, which has been corrected.

 Will merge to 'master'.


* tv/p4-fallback-encoding (2021-04-30) 1 commit
 - git-p4: git-p4.fallbackEncoding to specify non UTF-8 charset

 "git p4" learns the fallbackEncoding configuration variable to
 safely accept changeset descriptions that aren't written in UTF-8.


* zh/pretty-date-human (2021-04-27) 1 commit
  (merged to 'next' on 2021-04-30 at 2320ad8fb0)
 + pretty: provide human date format
 (this branch uses ab/pretty-date-format-tests.)

 "git log --format=..." placeholders learned %ah/%ch placeholders to
 request the --date=human output.

 Will merge to 'master'.


* dl/complete-stash (2021-03-24) 3 commits
  (merged to 'next' on 2021-03-24 at ce573a99cc)
 + git-completion.bash: use __gitcomp_builtin() in _git_stash()
 + git-completion.bash: extract from else in _git_stash()
 + git-completion.bash: pass $__git_subcommand_idx from __git_main()
 (this branch is used by dl/complete-stash-updates.)

 The command line completion (in contrib/) for "git stash" has been
 updated.

 Will merge to 'master'.


* ba/object-info (2021-04-20) 1 commit
 - object-info: support for retrieving object info

 Over-the-wire protocol learns a new request type to ask for object
 sizes given a list of object names.

 Will merge to 'next'.


* zh/format-ref-array-optim (2021-04-20) 2 commits
  (merged to 'next' on 2021-04-30 at b6c835cc51)
 + ref-filter: reuse output buffer
 + ref-filter: get rid of show_ref_array_item

 "git (branch|tag) --format=..." has been micro-optimized.

 Will merge to 'master'.


* hn/prep-tests-for-reftable (2021-04-28) 21 commits
 - t1415: set REFFILES for test specific to storage format
 - t4202: mark bogus head hash test with REFFILES
 - t7003: check reflog existence only for REFFILES
 - t7900: mark pack-refs tests as REFFILES
 - t1404: mark tests that muck with .git directly as REFFILES.
 - t2017: mark --orphan/logAllRefUpdates=false test as REFFILES
 - t1414: mark corruption test with REFFILES
 - t1407: require REFFILES for for_each_reflog test
 - test-lib: provide test prereq REFFILES
 - t5304: use "reflog expire --all" to clear the reflog
 - t5304: restyle: trim empty lines, drop ':' before >
 - t7003: use rev-parse rather than FS inspection
 - t5000: inspect HEAD using git-rev-parse
 - t5000: reformat indentation to the latest fashion
 - t1301: fix typo in error message
 - t1413: use tar to save and restore entire .git directory
 - t1401-symbolic-ref: avoid direct filesystem access
 - t5601: read HEAD using rev-parse
 - t9300: check ref existence using test-helper rather than a file system check
 - t/helper/ref-store: initialize oid in resolve-ref
 - t4202: split testcase for invalid HEAD symref and HEAD hash

 Preliminary clean-up of tests before the main reftable changes
 hits the codebase.

 Waiting for reviews.


* ps/config-env-option-with-separate-value (2021-04-30) 2 commits
  (merged to 'next' on 2021-04-30 at 46fbcd08c1)
 + git: support separate arg for `--config-env`'s value
 + git.txt: fix synopsis of `--config-env` missing the equals sign

 "git --config-env var=val cmd" weren't accepted (only
 --config-env=var=val was).

 Will merge to 'master'.


* rs/repack-without-loosening-promised-objects (2021-04-28) 1 commit
  (merged to 'next' on 2021-05-03 at 6681b49209)
 + repack: avoid loosening promisor objects in partial clones

 "git repack -A -d" in a partial clone unnecessarily loosened
 objects in promisor pack.

 Will merge to 'master'.


* jt/push-negotiation (2021-05-05) 6 commits
  (merged to 'next' on 2021-05-06 at 644a1bc4ee)
 + send-pack: support push negotiation
 + fetch: teach independent negotiation (no packfile)
 + fetch-pack: refactor command and capability write
 + fetch-pack: refactor add_haves()
 + fetch-pack: refactor process_acks()
 + Merge branch 'jt/fetch-pack-request-fix' into jt/push-negotiation

 "git push" learns to discover common ancestor with the receiving
 end over protocol v2.

 Will merge to 'master'.


* ab/doc-lint (2021-04-10) 7 commits
  (merged to 'next' on 2021-04-30 at 285b9c4d64)
 + docs: fix linting issues due to incorrect relative section order
 + doc lint: lint relative section order
 + doc lint: lint and fix missing "GIT" end sections
 + doc lint: fix bugs in, simplify and improve lint script
 + doc lint: Perl "strict" and "warnings" in lint-gitlink.perl
 + Documentation/Makefile: make doc.dep dependencies a variable again
 + Documentation/Makefile: make $(wildcard howto/*.txt) a var

 Dev support.

 Will merge to 'master'.


* ab/rebase-no-reschedule-failed-exec (2021-04-10) 2 commits
  (merged to 'next' on 2021-04-30 at 97d56cc674)
 + rebase: don't override --no-reschedule-failed-exec with config
 + rebase tests: camel-case rebase.rescheduleFailedExec consistently

 "git rebase --[no-]reschedule-failed-exec" did not work well with
 its configuration variable, which has been corrected.

 Will merge to 'master'.


* ah/plugleaks (2021-04-28) 12 commits
  (merged to 'next' on 2021-04-30 at ccb3984029)
 + builtin/rm: avoid leaking pathspec and seen
 + builtin/rebase: release git_format_patch_opt too
 + builtin/for-each-ref: free filter and UNLEAK sorting.
 + mailinfo: also free strbuf lists when clearing mailinfo
 + builtin/checkout: clear pending objects after diffing
 + builtin/check-ignore: clear_pathspec before returning
 + builtin/bugreport: don't leak prefixed filename
 + branch: FREE_AND_NULL instead of NULL'ing real_ref
 + bloom: clear each bloom_key after use
 + ls-files: free max_prefix when done
 + wt-status: fix multiple small leaks
 + revision: free remainder of old commit list in limit_list

 Plug various leans reported by LSAN.

 Will merge to 'master'.


* bc/hash-transition-interop-part-1 (2021-04-27) 13 commits
  (merged to 'next' on 2021-05-03 at 19dba33d17)
 + hex: print objects using the hash algorithm member
 + hex: default to the_hash_algo on zero algorithm value
 + builtin/pack-objects: avoid using struct object_id for pack hash
 + commit-graph: don't store file hashes as struct object_id
 + builtin/show-index: set the algorithm for object IDs
 + hash: provide per-algorithm null OIDs
 + hash: set, copy, and use algo field in struct object_id
 + builtin/pack-redundant: avoid casting buffers to struct object_id
 + Use the final_oid_fn to finalize hashing of object IDs
 + hash: add a function to finalize object IDs
 + http-push: set algorithm when reading object ID
 + Always use oidread to read into struct object_id
 + hash: add an algo member to struct object_id

 SHA-256 transition.

 Will merge to 'master'.


* ps/rev-list-object-type-filter (2021-04-19) 8 commits
  (merged to 'next' on 2021-04-30 at fa0ceacde4)
 + rev-list: allow filtering of provided items
 + pack-bitmap: implement combined filter
 + pack-bitmap: implement object type filter
 + list-objects: implement object type filter
 + list-objects: support filtering by tag and commit
 + list-objects: move tag processing into its own function
 + revision: mark commit parents as NOT_USER_GIVEN
 + uploadpack.txt: document implication of `uploadpackfilter.allow`

 "git rev-list" learns the "--filter=object:type=<type>" option,
 which can be used to exclude objects of the given kind from the
 packfile generated by pack-objects.

 Will merge to 'master'.


* tb/multi-pack-bitmaps (2021-04-10) 23 commits
 - p5326: perf tests for MIDX bitmaps
 - p5310: extract full and partial bitmap tests
 - midx: respect 'GIT_TEST_MULTI_PACK_INDEX_WRITE_BITMAP'
 - t7700: update to work with MIDX bitmap test knob
 - t5319: don't write MIDX bitmaps in t5319
 - t5310: disable GIT_TEST_MULTI_PACK_INDEX_WRITE_BITMAP
 - t5326: test multi-pack bitmap behavior
 - t/helper/test-read-midx.c: add --checksum mode
 - t5310: move some tests to lib-bitmap.sh
 - pack-bitmap: write multi-pack bitmaps
 - pack-bitmap: read multi-pack bitmaps
 - pack-bitmap.c: introduce 'bitmap_is_preferred_refname()'
 - pack-bitmap.c: introduce 'nth_bitmap_object_oid()'
 - pack-bitmap.c: introduce 'bitmap_num_objects()'
 - midx: respect 'core.multiPackIndex' when writing
 - midx: clear auxiliary .rev after replacing the MIDX
 - midx: make a number of functions non-static
 - Documentation: describe MIDX-based bitmaps
 - Documentation: build 'technical/bitmap-format' by default
 - pack-bitmap-write.c: free existing bitmaps
 - pack-bitmap-write.c: gracefully fail to write non-closed bitmaps
 - pack-bitmap.c: harden 'test_bitmap_walk()' to check type bitmaps
 - Merge branch 'tb/pack-preferred-tips-to-give-bitmap' into tb/multi-pack-bitmaps

 The reachability bitmap file used to be generated only for a single
 pack, but now we've learned to generate bitmaps for history that
 span across multiple packfiles.

 Waiting for reviews.
 cf. <cover.1617991824.git.me@ttaylorr.com>


* ab/svn-tests-set-e-fix (2021-04-12) 2 commits
  (merged to 'next' on 2021-04-30 at 41f7907187)
 + svn tests: refactor away a "set -e" in test body
 + svn tests: remove legacy re-setup from init-clone test

 Test clean-up.

 Will merge to 'master'.


* ab/test-lib-updates (2021-04-29) 11 commits
 - test-lib: split up and deprecate test_create_repo()
 - test-lib: do not show advice about init.defaultBranch under --verbose
 - test-lib: reformat argument list in test_create_repo()
 - submodule tests: use symbolic-ref --short to discover branch name
 - test-lib functions: add --printf option to test_commit
 - describe tests: convert setup to use test_commit
 - test-lib functions: add an --annotated option to "test_commit"
 - test-lib-functions: document test_commit --no-tag
 - test-lib-functions: reword "test_commit --append" docs
 - test-lib tests: remove dead GIT_TEST_FRAMEWORK_SELFTEST variable
 - test-lib: bring $remove_trash out of retirement
 (this branch is used by ab/describe-tests-fix and ab/pickaxe-pcre2.)

 Test clean-up.


* ao/p4-avoid-decoding (2021-04-12) 2 commits
 - git-p4: do not decode data from perforce by default
 - git-p4: avoid decoding more data from perforce

 "git p4" in Python-2 days used to accept a lot more kinds of data
 from Perforce server as uninterrupted byte sequence, but after
 switching to Python-3, too many things are expected to be in UTF-8,
 which broke traditional use cases.

 Waiting for reviews.


* ma/t0091-bugreport-fix (2021-04-12) 1 commit
 - t0091-bugreport.sh: actually verify some content of report

 Test fix.

 Expecting a reroll.
 cf. <YHYZTLl90rkWWVOr@google.com>, <87a6q22dei.fsf@evledraar.gmail.com>


* ps/config-global-override (2021-04-27) 4 commits
  (merged to 'next' on 2021-04-30 at 5ce435d98f)
 + t1300: fix unset of GIT_CONFIG_NOSYSTEM leaking into subsequent tests
  (merged to 'next' on 2021-04-20 at 82578c696d)
 + config: allow overriding of global and system configuration
 + config: unify code paths to get global config paths
 + config: rename `git_etc_config()`

 Replace GIT_CONFIG_NOSYSTEM mechanism to decline from reading the
 system-wide configuration file with GIT_CONFIG_SYSTEM that lets
 users specify from which file to read the system-wide configuration
 (setting it to an empty file would essentially be the same as
 setting NOSYSTEM), and introduce GIT_CONFIG_GLOBAL to override the
 per-user configuration in $HOME/.gitconfig.

 Will merge to 'master'.


* mr/bisect-in-c-4 (2021-04-11) 4 commits
 - bisect--helper: retire `--bisect-next-check` subcommand
 - bisect--helper: reimplement `bisect_run` shell function in C
 - bisect--helper: reimplement `bisect_visualize()`shell function in C
 - run-command: make `exists_in_PATH()` non-static

 The codepaths involved in running "git bisect visualize" and "git
 bisect run" has been rewritten in C.

 Expecting a reroll.
 cf. <xmqq35vwh8qk.fsf@gitster.g>, <xmqqy2doftrj.fsf@gitster.g>,
 <CAP8UFD3X24F3qgefHpi00PM-KUk+vcqxwy2Dbngbyj7ciavCVQ@mail.gmail.com>
 May want to boost the test coverage.


* mt/add-rm-in-sparse-checkout (2021-04-08) 7 commits
  (merged to 'next' on 2021-04-30 at ddead90eaf)
 + rm: honor sparse checkout patterns
 + add: warn when asked to update SKIP_WORKTREE entries
 + refresh_index(): add flag to ignore SKIP_WORKTREE entries
 + pathspec: allow to ignore SKIP_WORKTREE entries on index matching
 + add: make --chmod and --renormalize honor sparse checkouts
 + t3705: add tests for `git add` in sparse checkouts
 + add: include magic part of pathspec on --refresh error
 (this branch is used by ds/status-with-sparse-index.)

 "git add" and "git rm" learned not to touch those paths that are
 outside of sparse checkout.

 Will merge to 'master'.


* zh/trailer-cmd (2021-05-04) 2 commits
  (merged to 'next' on 2021-05-04 at fb677877f7)
 + trailer: add new .cmd config option
 + docs: correct descript of trailer.<token>.command

 The way the command line specified by the trailer.<token>.command
 configuration variable receives the end-user supplied value was
 both error prone and misleading.  An alternative to achieve the
 same goal in a safer and more intuitive way has been added, as
 the trailer.<token>.cmd configuration variable, to replace it.

 Will merge to 'master'.


* hn/reftable (2021-04-20) 28 commits
 - t1404: annotate test cases with REFFILES
 - t1401,t2011: parameterize HEAD.lock for REFTABLE
 - t1301: document what needs to be done for REFTABLE
 - Add "test-tool dump-reftable" command.
 - git-prompt: prepare for reftable refs backend
 - Reftable support for git-core
 - reftable: add dump utility
 - reftable: implement stack, a mutable database of reftable files.
 - reftable: implement refname validation
 - reftable: add merged table view
 - reftable: add a heap-based priority queue for reftable records
 - reftable: reftable file level tests
 - reftable: read reftable files
 - reftable: generic interface to tables
 - reftable: write reftable files
 - reftable: a generic binary tree implementation
 - reftable: reading/writing blocks
 - Provide zlib's uncompress2 from compat/zlib-compat.c
 - reftable: (de)serialization for the polymorphic record type.
 - reftable: add blocksource, an abstraction for random access reads
 - reftable: utility functions
 - reftable: add error related functionality
 - reftable: add LICENSE
 - init-db: set the_repository->hash_algo early on
 - hash.h: provide constants for the hash IDs
 - refs/debug: trace into reflog expiry too
 - refs: document reflog_expire_fn's flag argument
 - refs: ref_iterator_peel returns boolean, rather than peel_status

 The "reftable" backend for the refs API.

 Waiting for reviews.

--------------------------------------------------
[Discarded]

* ab/fsck-unexpected-type (2021-04-13) 6 commits
 . fsck: report invalid object type-path combinations
 . fsck: report invalid types recorded in objects
 . object-store.h: move read_loose_object() below 'struct object_info'
 . fsck: don't hard die on invalid object types
 . fsck tests: refactor one test to use a sub-repo
 . cache.h: move object functions to object-store.h

 "git fsck" has been taught to report mismatch between expected and
 actual types of an object better.

 Retracted for now.
 cf. <cover-0.5-00000000000-20210505T122816Z-avarab@gmail.com>

^ permalink raw reply	[relevance 3%]

* What's cooking in git.git (May 2021, #02; Wed, 12)
@ 2021-05-12  7:46  3% Junio C Hamano
  0 siblings, 0 replies; 200+ results
From: Junio C Hamano @ 2021-05-12  7:46 UTC (permalink / raw)
  To: git

Here are the topics that have been cooking.  Commits prefixed with '-' are
only in 'seen' (formerly 'pu'---proposed updates) while commits prefixed
with '+' are in 'next'.  The ones marked with '.' do not appear in any of
the integration branches, but I am still holding onto them.

Copies of the source code to Git live in many repositories, and the
following is a list of the ones I push into or their mirrors.  Some
repositories have only a subset of branches.

With maint, master, next, seen, todo:

	git://git.kernel.org/pub/scm/git/git.git/
	git://repo.or.cz/alt-git.git/
	https://kernel.googlesource.com/pub/scm/git/git/
	https://github.com/git/git/
	https://gitlab.com/git-vcs/git/

With all the integration branches and topics broken out:

	https://github.com/gitster/git/

Even though the preformatted documentation in HTML and man format
are not sources, they are published in these repositories for
convenience (replace "htmldocs" with "manpages" for the manual
pages):

	git://git.kernel.org/pub/scm/git/git-htmldocs.git/
	https://github.com/gitster/git-htmldocs.git/

Release tarballs are available at:

	https://www.kernel.org/pub/software/scm/git/

--------------------------------------------------
[Graduated to 'master']

* ab/doc-lint (2021-04-10) 7 commits
  (merged to 'next' on 2021-04-30 at 285b9c4d64)
 + docs: fix linting issues due to incorrect relative section order
 + doc lint: lint relative section order
 + doc lint: lint and fix missing "GIT" end sections
 + doc lint: fix bugs in, simplify and improve lint script
 + doc lint: Perl "strict" and "warnings" in lint-gitlink.perl
 + Documentation/Makefile: make doc.dep dependencies a variable again
 + Documentation/Makefile: make $(wildcard howto/*.txt) a var

 Dev support.


* ab/pretty-date-format-tests (2021-04-27) 2 commits
  (merged to 'next' on 2021-04-30 at bd2d680c23)
 + pretty tests: give --date/format tests a better description
 + pretty tests: simplify %aI/%cI date format test
 (this branch is used by zh/pretty-date-human.)

 Tweak a few tests for "log --format=..." that show timestamps in
 various formats.


* ab/rebase-no-reschedule-failed-exec (2021-04-10) 2 commits
  (merged to 'next' on 2021-04-30 at 97d56cc674)
 + rebase: don't override --no-reschedule-failed-exec with config
 + rebase tests: camel-case rebase.rescheduleFailedExec consistently

 "git rebase --[no-]reschedule-failed-exec" did not work well with
 its configuration variable, which has been corrected.


* ab/svn-tests-set-e-fix (2021-04-12) 2 commits
  (merged to 'next' on 2021-04-30 at 41f7907187)
 + svn tests: refactor away a "set -e" in test body
 + svn tests: remove legacy re-setup from init-clone test

 Test clean-up.


* ad/cygwin-no-backslashes-in-paths (2021-04-30) 1 commit
  (merged to 'next' on 2021-04-30 at e2cf03a8aa)
 + cygwin: disallow backslashes in file names

 Cygwin pathname handling fix.


* ah/plugleaks (2021-04-28) 12 commits
  (merged to 'next' on 2021-04-30 at ccb3984029)
 + builtin/rm: avoid leaking pathspec and seen
 + builtin/rebase: release git_format_patch_opt too
 + builtin/for-each-ref: free filter and UNLEAK sorting.
 + mailinfo: also free strbuf lists when clearing mailinfo
 + builtin/checkout: clear pending objects after diffing
 + builtin/check-ignore: clear_pathspec before returning
 + builtin/bugreport: don't leak prefixed filename
 + branch: FREE_AND_NULL instead of NULL'ing real_ref
 + bloom: clear each bloom_key after use
 + ls-files: free max_prefix when done
 + wt-status: fix multiple small leaks
 + revision: free remainder of old commit list in limit_list

 Plug various leans reported by LSAN.


* bc/hash-transition-interop-part-1 (2021-04-27) 13 commits
  (merged to 'next' on 2021-05-03 at 19dba33d17)
 + hex: print objects using the hash algorithm member
 + hex: default to the_hash_algo on zero algorithm value
 + builtin/pack-objects: avoid using struct object_id for pack hash
 + commit-graph: don't store file hashes as struct object_id
 + builtin/show-index: set the algorithm for object IDs
 + hash: provide per-algorithm null OIDs
 + hash: set, copy, and use algo field in struct object_id
 + builtin/pack-redundant: avoid casting buffers to struct object_id
 + Use the final_oid_fn to finalize hashing of object IDs
 + hash: add a function to finalize object IDs
 + http-push: set algorithm when reading object ID
 + Always use oidread to read into struct object_id
 + hash: add an algo member to struct object_id

 SHA-256 transition.


* dl/complete-stash (2021-03-24) 3 commits
  (merged to 'next' on 2021-03-24 at ce573a99cc)
 + git-completion.bash: use __gitcomp_builtin() in _git_stash()
 + git-completion.bash: extract from else in _git_stash()
 + git-completion.bash: pass $__git_subcommand_idx from __git_main()
 (this branch is used by dl/complete-stash-updates.)

 The command line completion (in contrib/) for "git stash" has been
 updated.


* dl/complete-stash-updates (2021-04-27) 4 commits
  (merged to 'next' on 2021-05-03 at 8901a9c431)
 + git-completion.bash: consolidate cases in _git_stash()
 + git-completion.bash: use $__git_cmd_idx in more places
 + git-completion.bash: rename to $__git_cmd_idx
 + git-completion.bash: separate some commands onto their own line
 (this branch uses dl/complete-stash.)

 Further update the command line completion (in contrib/) for "git
 stash".


* hn/trace-reflog-expiry (2021-04-27) 1 commit
  (merged to 'next' on 2021-04-30 at 6bc9a79b61)
 + refs/debug: trace into reflog expiry too

 The reflog expiry machinery has been taught to emit trace events.


* jc/test-allows-local (2021-05-03) 1 commit
  (merged to 'next' on 2021-05-04 at 768071c554)
 + CodingGuidelines: explicitly allow "local" for test scripts

 Document that our test can use "local" keyword.


* jk/doc-format-patch-skips-merges (2021-05-03) 1 commit
  (merged to 'next' on 2021-05-04 at cac68f7193)
 + docs/format-patch: mention handling of merges

 Document that "format-patch" skips merges.


* jk/pack-objects-negative-options-fix (2021-05-03) 5 commits
  (merged to 'next' on 2021-05-04 at 4a61f68cf0)
 + pack-objects: clamp negative depth to 0
 + t5316: check behavior of pack-objects --depth=0
 + pack-objects: clamp negative window size to 0
 + t5300: check that we produced expected number of deltas
 + t5300: modernize basic tests

 Options to "git pack-objects" that take numeric values like
 --window and --depth should not accept negative values; the input
 validation has been tightened.


* jk/prune-with-bitmap-fix (2021-04-29) 2 commits
  (merged to 'next' on 2021-04-30 at bede558f31)
 + prune: save reachable-from-recent objects with bitmaps
 + pack-bitmap: clean up include_check after use

 When the reachability bitmap is in effect, the "do not lose
 recently created objects and those that are reachable from them"
 safety to protect us from races were disabled by mistake, which has
 been corrected.


* jk/symlinked-dotgitx-cleanup (2021-05-04) 9 commits
  (merged to 'next' on 2021-05-04 at deca6ca662)
 + docs: document symlink restrictions for dot-files
 + fsck: warn about symlinked dotfiles we'll open with O_NOFOLLOW
 + t0060: test ntfs/hfs-obscured dotfiles
 + t7450: test .gitmodules symlink matching against obscured names
 + t7450: test verify_path() handling of gitmodules
 + t7415: rename to expand scope
 + fsck_tree(): wrap some long lines
 + fsck_tree(): fix shadowed variable
 + t7415: remove out-dated comment about translation

 Various test and documentation updates about .gitsomething paths
 that are symlinks.


* js/merge-already-up-to-date-message-reword (2021-05-03) 2 commits
  (merged to 'next' on 2021-05-04 at b2e696ecd7)
 + merge: fix swapped "up to date" message components
 + merge(s): apply consistent punctuation to "up to date" messages

 A few variants of informational message "Already up-to-date" has
 been rephrased.


* jz/apply-3way-first-message-fix (2021-04-29) 1 commit
  (merged to 'next' on 2021-04-30 at 829167e135)
 + apply: adjust messages to account for --3way changes

 When we swapped the order of --3way fallback, we forgot to adjust
 the message we give when the first method fails and the second
 method is attempted (which used to be "direct application failed
 hence we try 3way", now it is the other way around).


* ll/clone-reject-shallow (2021-05-05) 1 commit
  (merged to 'next' on 2021-05-06 at 4a165ffc96)
 + t5601: mark protocol v2-only test

 Fix tests when forced to use v0 protocol.


* ls/subtree (2021-04-28) 30 commits
  (merged to 'next' on 2021-05-03 at 12c5fe8677)
 + subtree: be stricter about validating flags
 + subtree: push: allow specifying a local rev other than HEAD
 + subtree: allow 'split' flags to be passed to 'push'
 + subtree: allow --squash to be used with --rejoin
 + subtree: give the docs a once-over
 + subtree: have $indent actually affect indentation
 + subtree: don't let debug and progress output clash
 + subtree: add comments and sanity checks
 + subtree: remove duplicate check
 + subtree: parse revs in individual cmd_ functions
 + subtree: use "^{commit}" instead of "^0"
 + subtree: don't fuss with PATH
 + subtree: use "$*" instead of "$@" as appropriate
 + subtree: use more explicit variable names for cmdline args
 + subtree: use git-sh-setup's `say`
 + subtree: use `git merge-base --is-ancestor`
 + subtree: drop support for git < 1.7
 + subtree: more consistent error propagation
 + subtree: don't have loose code outside of a function
 + subtree: t7900: add porcelain tests for 'pull' and 'push'
 + subtree: t7900: add a test for the -h flag
 + subtree: t7900: rename last_commit_message to last_commit_subject
 + subtree: t7900: fix 'verify one file change per commit'
 + subtree: t7900: delete some dead code
 + subtree: t7900: use 'test' for string equality
 + subtree: t7900: comment subtree_test_create_repo
 + subtree: t7900: use consistent formatting
 + subtree: t7900: use test-lib.sh's test_count
 + subtree: t7900: update for having the default branch name be 'main'
 + .gitignore: ignore 'git-subtree' as a build artifact

 "git subtree" updates.


* mt/add-rm-in-sparse-checkout (2021-04-08) 7 commits
  (merged to 'next' on 2021-04-30 at ddead90eaf)
 + rm: honor sparse checkout patterns
 + add: warn when asked to update SKIP_WORKTREE entries
 + refresh_index(): add flag to ignore SKIP_WORKTREE entries
 + pathspec: allow to ignore SKIP_WORKTREE entries on index matching
 + add: make --chmod and --renormalize honor sparse checkouts
 + t3705: add tests for `git add` in sparse checkouts
 + add: include magic part of pathspec on --refresh error
 (this branch is used by ds/status-with-sparse-index.)

 "git add" and "git rm" learned not to touch those paths that are
 outside of sparse checkout.


* nc/submodule-update-quiet (2021-05-03) 1 commit
  (merged to 'next' on 2021-05-04 at 09bed89b60)
 + submodule update: silence underlying fetch with "--quiet"

 "git submodule update --quiet" did not propagate the quiet option
 down to underlying "git fetch", which has been corrected.


* po/diff-patch-doc (2021-04-28) 1 commit
  (merged to 'next' on 2021-04-30 at 58af0f4b5e)
 + doc: point to diff attribute in patch format docs

 Doc update.


* ps/config-env-option-with-separate-value (2021-04-30) 2 commits
  (merged to 'next' on 2021-04-30 at 46fbcd08c1)
 + git: support separate arg for `--config-env`'s value
 + git.txt: fix synopsis of `--config-env` missing the equals sign

 "git --config-env var=val cmd" weren't accepted (only
 --config-env=var=val was).


* ps/config-global-override (2021-04-27) 4 commits
  (merged to 'next' on 2021-04-30 at 5ce435d98f)
 + t1300: fix unset of GIT_CONFIG_NOSYSTEM leaking into subsequent tests
  (merged to 'next' on 2021-04-20 at 82578c696d)
 + config: allow overriding of global and system configuration
 + config: unify code paths to get global config paths
 + config: rename `git_etc_config()`

 Replace GIT_CONFIG_NOSYSTEM mechanism to decline from reading the
 system-wide configuration file with GIT_CONFIG_SYSTEM that lets
 users specify from which file to read the system-wide configuration
 (setting it to an empty file would essentially be the same as
 setting NOSYSTEM), and introduce GIT_CONFIG_GLOBAL to override the
 per-user configuration in $HOME/.gitconfig.


* ps/rev-list-object-type-filter (2021-04-19) 8 commits
  (merged to 'next' on 2021-04-30 at fa0ceacde4)
 + rev-list: allow filtering of provided items
 + pack-bitmap: implement combined filter
 + pack-bitmap: implement object type filter
 + list-objects: implement object type filter
 + list-objects: support filtering by tag and commit
 + list-objects: move tag processing into its own function
 + revision: mark commit parents as NOT_USER_GIVEN
 + uploadpack.txt: document implication of `uploadpackfilter.allow`

 "git rev-list" learns the "--filter=object:type=<type>" option,
 which can be used to exclude objects of the given kind from the
 packfile generated by pack-objects.


* rj/bisect-skip-honor-terms (2021-04-30) 1 commit
  (merged to 'next' on 2021-05-04 at f7c11bba06)
 + bisect--helper: use BISECT_TERMS in 'bisect skip' command

 "git bisect skip" when custom words are used for new/old did not
 work, which has been corrected.


* rs/repack-without-loosening-promised-objects (2021-04-28) 1 commit
  (merged to 'next' on 2021-05-03 at 6681b49209)
 + repack: avoid loosening promisor objects in partial clones

 "git repack -A -d" in a partial clone unnecessarily loosened
 objects in promisor pack.


* si/zsh-complete-comment-fix (2021-05-04) 1 commit
  (merged to 'next' on 2021-05-04 at a15c1ea590)
 + work around zsh comment in __git_complete_worktree_paths

 Portability fix for command line completion script (in contrib/).


* zh/format-ref-array-optim (2021-04-20) 2 commits
  (merged to 'next' on 2021-04-30 at b6c835cc51)
 + ref-filter: reuse output buffer
 + ref-filter: get rid of show_ref_array_item

 "git (branch|tag) --format=..." has been micro-optimized.


* zh/pretty-date-human (2021-04-27) 1 commit
  (merged to 'next' on 2021-04-30 at 2320ad8fb0)
 + pretty: provide human date format
 (this branch uses ab/pretty-date-format-tests.)

 "git log --format=..." placeholders learned %ah/%ch placeholders to
 request the --date=human output.


* zh/trailer-cmd (2021-05-04) 2 commits
  (merged to 'next' on 2021-05-04 at fb677877f7)
 + trailer: add new .cmd config option
 + docs: correct descript of trailer.<token>.command

 The way the command line specified by the trailer.<token>.command
 configuration variable receives the end-user supplied value was
 both error prone and misleading.  An alternative to achieve the
 same goal in a safer and more intuitive way has been added, as
 the trailer.<token>.cmd configuration variable, to replace it.

--------------------------------------------------
[New Topics]

* mt/clean-clean (2021-05-07) 1 commit
  (merged to 'next' on 2021-05-07 at 51e40b7ddd)
 + clean: remove unnecessary variable

 Code clean-up.

 Will merge to 'master'.


* ah/merge-ort-i18n (2021-05-11) 1 commit
  (merged to 'next' on 2021-05-12 at bda497af01)
 + merge-ort: split "distinct types" message into two translatable messages

 An i18n fix.

 Will merge to 'master'.


* en/dir-traversal (2021-05-12) 8 commits
 - dir: update stale description of treat_directory()
 - dir: traverse into untracked directories if they may have ignored subfiles
 - dir: avoid unnecessary traversal into ignored directory
 - t3001, t7300: add testcase showcasing missed directory traversal
 - t7300: add testcase showing unnecessary traversal into ignored directory
 - ls-files: error out on -i unless -o or -c are specified
 - dir: report number of visited directories and paths with trace2
 - dir: convert trace calls to trace2 equivalents

 "git clean" and "git ls-files -i" had confusion around working on
 or showing ignored paths inside an ignored directory, which has
 been corrected.

 Will merge to 'next'?


* ma/typofixes (2021-05-10) 2 commits
  (merged to 'next' on 2021-05-12 at 99cc0d265e)
 + pretty-formats.txt: add missing space
 + git-repack.txt: remove spurious ")"

 A couple of trivial typofixes.

 Will merge to 'master'.


* zh/ref-filter-push-remote-fix (2021-05-12) 1 commit
 - ref-filter: fix read invalid union member bug

 The handling of "%(push)" formatting element of "for-each-ref" and
 friends was broken when the same codepath started handling
 "%(push:<what>)", which has been corrected.

 Will merge to 'next'?


* lh/maintenance-leakfix (2021-05-12) 1 commit
 - maintenance: fix two memory leaks

 Will merge to 'next'.


* so/log-m-implies-p (2021-05-11) 7 commits
 - diff-merges: let -m imply -p
 - diff-merges: rename "combined_imply_patch" to "merges_imply_patch"
 - stash list: stop passing "-m" to "git list"
 - git-svn: stop passing "-m" to "git rev-list"
 - t4062: diff-index -S can take its string as a separate arg
 - diff-merges: move specific diff-index "-m" handling to diff-index
 - t4013: add test for "git diff-index -m"

 The "-m" option in "git log -m" that does not specify which format,
 if any, of diff is desired did not have any visible effect; it now
 implies some form of diff (by default "--patch") is produced.

 Expecting a reroll.
 cf. <871radwfl7.fsf@osv.gnss.ru>


* wc/packed-ref-removal-cleanup (2021-05-11) 1 commit
 - refs: cleanup directories when deleting packed ref

 When "git update-ref -d" removes a ref that is packed, it left
 empty directories under $GIT_DIR/refs/ for 

 Will merge to 'next'.


* ew/sha256-clone-remote-curl-fix (2021-05-12) 1 commit
 - remote-curl: fix clone on sha256 repos

 "git clone" from SHA256 repository by Git built with SHA-1 as the
 default hash algorithm over the dumb HTTP protocol did not
 correctly set up the resulting repository, which has been corrected.

 Will merge to 'next'.


* bc/doc-asciidoctor-to-man-wo-xmlto (2021-05-12) 2 commits
 - doc: remove GNU_ROFF option
 - doc: add an option to have Asciidoctor build man pages directly

 An option to render the manual pages via AsciiDoctor bypassing
 xmlto has been introduced.

 Will merge to 'next'?

--------------------------------------------------
[Stalled]

* ag/merge-strategies-in-c (2021-03-17) 15 commits
 - sequencer: use the "octopus" merge strategy without forking
 - sequencer: use the "resolve" strategy without forking
 - merge: use the "octopus" strategy without forking
 - merge: use the "resolve" strategy without forking
 - merge-octopus: rewrite in C
 - merge-recursive: move better_branch_name() to merge.c
 - merge-resolve: rewrite in C
 - merge-one-file: rewrite in C
 - update-index: move add_cacheinfo() to read-cache.c
 - merge-index: add a new way to invoke `git-merge-one-file'
 - merge-index: drop the index
 - merge-index: libify merge_one_path() and merge_all()
 - t6060: add tests for removed files
 - t6060: modify multiple files to expose a possible issue with merge-index
 - t6407: modernise tests

 The resolve and octopus merge strategy backends have been rewritten
 in C.

 Expecting a (hopefully final) reroll.
 cf. <nycvar.QRO.7.76.6.2103241142220.50@tvgsbejvaqbjf.bet>


* tv/p4-fallback-encoding (2021-04-30) 1 commit
 - git-p4: git-p4.fallbackEncoding to specify non UTF-8 charset

 "git p4" learns the fallbackEncoding configuration variable to
 safely accept changeset descriptions that aren't written in UTF-8.


* ds/status-with-sparse-index (2021-04-28) 10 commits
 - fsmonitor: test with sparse index
 - status: use sparse-index throughout
 - status: skip sparse-checkout percentage with sparse-index
 - dir.c: accept a directory as part of cone-mode patterns
 - unpack-trees: stop recursing into sparse directories
 - unpack-trees: compare sparse directories correctly
 - unpack-trees: preserve cache_bottom
 - t1092: add tests for status/add and sparse files
 - Merge branch 'mt/add-rm-in-sparse-checkout' into ds/status-with-sparse-index
 - Merge branch 'ds/sparse-index-protections' into ds/status-with-sparse-index

 "git status" codepath learned to work with sparsely populated index
 without hydrating it fully.

 What's the status of this thing?


* jh/rfc-builtin-fsmonitor (2021-05-04) 24 commits
 - fsmonitor: only enable it in non-bare repositories
 - t7527: test status with untracked-cache and fsmonitor--daemon
 - p7519: add fsmonitor--daemon
 - t7527: create test for fsmonitor--daemon
 - fsmonitor: force update index when fsmonitor token advances
 - fsmonitor--daemon: use a cookie file to sync with file system
 - fsmonitor--daemon:: introduce client delay for testing
 - fsmonitor--daemon: periodically truncate list of modified files
 - fsmonitor--daemon: implement handle_client callback
 - fsmonitor-fs-listen-macos: implement FSEvent listener on MacOS
 - fsmonitor-fs-listen-macos: add macos header files for FSEvent
 - fsmonitor-fs-listen-win32: implement FSMonitor backend on Windows
 - fsmonitor--daemon: create token-based changed path cache
 - fsmonitor--daemon: define token-ids
 - fsmonitor--daemon: add pathname classification
 - fsmonitor--daemon: implement daemon command options
 - fsmonitor-fs-listen-macos: stub in backend for MacOS
 - fsmonitor-fs-listen-win32: stub in backend for Windows
 - fsmonitor--daemon: implement client command options
 - fsmonitor--daemon: add a built-in fsmonitor daemon
 - fsmonitor: introduce `core.useBuiltinFSMonitor` to call the daemon via IPC
 - config: FSMonitor is repository-specific
 - fsmonitor-ipc: create client routines for git-fsmonitor--daemon
 - Merge branch 'jh/simple-ipc' into jh/rfc-builtin-fsmonitor

 An attempt to write and ship with a watchman equivalent tailored
 for our use.


* ab/describe-tests-fix (2021-05-11) 5 commits
 - describe tests: support -C in "check_describe"
 - describe tests: fix nested "test_expect_success" call
 - describe tests: don't rely on err.actual from "check_describe"
 - describe tests: refactor away from glob matching
 - describe tests: improve test for --work-tree & --dirty
 (this branch uses ab/test-lib-updates.)

 Various updates to tests around "git describe"

 Waiting for the base topic to solidify.


* ab/pickaxe-pcre2 (2021-05-11) 22 commits
 - xdiff-interface: replace discard_hunk_line() with a flag
 - xdiff users: use designated initializers for out_line
 - pickaxe -G: don't special-case create/delete
 - pickaxe -G: terminate early on matching lines
 - xdiff-interface: allow early return from xdiff_emit_line_fn
 - xdiff-interface: prepare for allowing early return
 - pickaxe -S: slightly optimize contains()
 - pickaxe: rename variables in has_changes() for brevity
 - pickaxe -S: support content with NULs under --pickaxe-regex
 - pickaxe: assert that we must have a needle under -G or -S
 - pickaxe: refactor function selection in diffcore-pickaxe()
 - perf: add performance test for pickaxe
 - pickaxe/style: consolidate declarations and assignments
 - diff.h: move pickaxe fields together again
 - pickaxe: die when --find-object and --pickaxe-all are combined
 - pickaxe: die when -G and --pickaxe-regex are combined
 - pickaxe tests: add missing test for --no-pickaxe-regex being an error
 - pickaxe tests: test for -G, -S and --find-object incompatibility
 - pickaxe tests: add test for "log -S" not being a regex
 - pickaxe tests: add test for diffgrep_consume() internals
 - pickaxe tests: refactor to use test_commit --append --printf
 - grep/pcre2 tests: reword comments referring to kwset
 (this branch uses ab/test-lib-updates.)

 Rewrite the backend for "diff -G/-S" to use pcre2 engine when
 available.

 Waiting for the base topic to solidify.


* es/config-hooks (2021-03-10) 36 commits
 . run-command: stop thinking about hooks
 . git-send-email: use 'git hook run' for 'sendemail-validate'
 . bugreport: use hook_exists instead of find_hook
 . receive-pack: convert receive hooks to hook.h
 . post-update: use hook.h library
 . proc-receive: acquire hook list from hook.h
 . receive-pack: convert 'update' hook to hook.h
 . reference-transaction: look for hooks in config
 . transport: convert pre-push hook to use config
 . hook: convert 'post-rewrite' hook to config
 . hooks: convert 'post-checkout' hook to hook library
 . git-p4: use 'git hook' to run hooks
 . receive-pack: convert push-to-checkout hook to hook.h
 . read-cache: convert post-index-change hook to use config
 . rebase: teach pre-rebase to use hook.h
 . gc: use hook library for pre-auto-gc hook
 . merge: use config-based hooks for post-merge hook
 . am: convert applypatch hooks to use config
 . commit: use config-based hooks
 . hooks: allow callers to capture output
 . run-command: allow capturing of collated output
 . hook: provide stdin by string_list or callback
 . run-command: add stdin callback for parallelization
 . hook: allow specifying working directory for hooks
 . hook: allow parallel hook execution
 . run-command: allow stdin for run_processes_parallel
 . hook: support passing stdin to hooks
 . hook: introduce hook_exists()
 . hook: add 'run' subcommand
 . parse-options: parse into strvec
 . hook: implement hookcmd.<name>.skip
 . hook: teach hook.runHookDir
 . hook: include hookdir hook in list
 . hook: add list command
 . hook: scaffolding for git-hook subcommand
 . doc: propose hooks managed by the config

 The "hooks defined in config" topic.

--------------------------------------------------
[Cooking]

* ab/trace2-squelch-gcc-warning (2021-05-11) 1 commit
 - trace2: refactor to avoid gcc warning under -O3

 Workaround compiler warnings.

 cf. <YJrIMbr6VkYGQMfs@coredump.intra.peff.net>


* hn/refs-errno-cleanup (2021-04-30) 8 commits
 - refs: explicitly propagate errno from refs_read_raw_ref
 - refs: stop setting EINVAL and ELOOP in symref resolution
 - refs: clear errno return in refs_resolve_ref_unsafe()
 - refs: add failure_errno to refs_read_raw_ref() signature
 - refs: make errno output explicit for refs_resolve_ref_unsafe
 - refs: make errno output explicit for read_raw_ref_fn
 - refs/files-backend: stop setting errno from lock_ref_oid_basic
 - refs: remove EINVAL specification from the errno sideband in read_raw_ref_fn

 Futz with the way 'errno' is relied on in the refs API to carry the
 failure modes up the callchain.

 Waiting for reviews.


* en/ort-perf-batch-11 (2021-05-04) 13 commits
 - merge-ort, diffcore-rename: employ cached renames when possible
 - merge-ort: handle interactions of caching and rename/rename(1to1) cases
 - merge-ort: add helper functions for using cached renames
 - merge-ort: preserve cached renames for the appropriate side
 - merge-ort: avoid accidental API mis-use
 - merge-ort: add code to check for whether cached renames can be reused
 - merge-ort: populate caches of rename detection results
 - merge-ort: add data structures for in-memory caching of rename detection
 - t6429: testcases for remembering renames
 - fast-rebase: write conflict state to working tree, index, and HEAD
 - fast-rebase: change assert() to BUG()
 - Documentation/technical: describe remembering renames optimization
 - t6423: rename file within directory that other side renamed

 Optimize out repeated rename detection in a sequence of mergy
 operations.

 Waiting for reviews.


* dd/mailinfo-quoted-cr (2021-05-10) 6 commits
  (merged to 'next' on 2021-05-12 at a4bcfd18b9)
 + am: learn to process quoted lines that ends with CRLF
 + mailinfo: allow stripping quoted CR without warning
 + mailinfo: allow squelching quoted CRLF warning
 + mailinfo: warn if CRLF found in decoded base64/QP email
 + mailinfo: stop parsing options manually
 + mailinfo: load default metainfo_charset lazily

 "git mailinfo" (hence "git am") learned the "--quoted-cr" option to
 control how lines ending with CRLF wrapped in base64 or qp are
 handled.

 Will merge to 'master'.


* ab/perl-makefile-cleanup (2021-05-06) 4 commits
  (merged to 'next' on 2021-05-10 at 23b48398e6)
 + perl: use mock i18n functions under NO_GETTEXT=Y
 + Makefile: regenerate *.pm on NO_PERL_CPAN_FALLBACKS change
 + Makefile: regenerate perl/build/* if GIT-PERL-DEFINES changes
 + Makefile: don't re-define PERL_DEFINES

 Build procedure clean-up.

 Will merge to 'master'.


* ab/sparse-index-cleanup (2021-05-06) 1 commit
  (merged to 'next' on 2021-05-10 at bbb0239571)
 + sparse-index.c: remove set_index_sparse_config()

 Code clean-up.

 Will merge to 'master'.


* ab/streaming-simplify (2021-05-06) 5 commits
  (merged to 'next' on 2021-05-07 at 0992a78c75)
 + streaming.c: move {open,close,read} from vtable to "struct git_istream"
 + streaming.c: stop passing around "object_info *" to open()
 + streaming.c: remove {open,close,read}_method_decl() macros
 + streaming.c: remove enum/function/vtbl indirection
 + streaming.c: avoid forward declarations

 Code clean-up.

 Will merge to 'master'.


* jk/p4-locate-branch-point-optim (2021-05-06) 2 commits
  (merged to 'next' on 2021-05-07 at 0fa60c3af3)
 + git-p4: speed up search for branch parent
 + git-p4: ensure complex branches are cloned correctly

 "git p4" learned to find branch points more efficiently.

 Will merge to 'master'.


* ow/no-dryrun-in-add-i (2021-05-07) 1 commit
  (merged to 'next' on 2021-05-07 at e822750e3a)
 + add: die if both --dry-run and --interactive are given

 "git add -i --dry-run" does not dry-run, which was surprising.  The
 combination of options has taught to error out.

 Will merge to 'master'.


* pw/patience-diff-clean-up (2021-05-05) 2 commits
  (merged to 'next' on 2021-05-06 at 1ce651569c)
 + patience diff: remove unused variable
 + patience diff: remove unnecessary string comparisons

 Code clean-up.

 Will merge to 'master'.


* pw/word-diff-zero-width-matches (2021-05-05) 1 commit
  (merged to 'next' on 2021-05-06 at e5653da568)
 + word diff: handle zero length matches

 The word-diff mode has been taught to work better with a word
 regexp that can match an empty string.

 Will merge to 'master'.


* ls/fast-export-signed (2021-05-03) 5 commits
 - fast-export, fast-import: add support for signed-commits
 - fast-export: do not modify memory from get_commit_buffer
 - git-fast-export.txt: clarify why 'verbatim' may not be a good idea
 - fast-export: rename --signed-tags='warn' to 'warn-verbatim'
 - git-fast-import.txt: add missing LF in the BNF

 "git fast-export" offers a way to control how signed tags are
 handled; the mechanism has been extended to allow specifying how
 signed commits are handled as well.

 Expecting a reroll.
 cf. <xmqqa6pca0pv.fsf@gitster.g>, <xmqq1rao9zev.fsf@gitster.g>


* mt/parallel-checkout-part-3 (2021-05-05) 8 commits
  (merged to 'next' on 2021-05-07 at 0393d61c0c)
 + ci: run test round with parallel-checkout enabled
 + parallel-checkout: add tests related to .gitattributes
 + t0028: extract encoding helpers to lib-encoding.sh
 + parallel-checkout: add tests related to path collisions
 + parallel-checkout: add tests for basic operations
 + checkout-index: add parallel checkout support
 + builtin/checkout.c: complete parallel checkout support
 + make_transient_cache_entry(): optionally alloc from mem_pool

 The final part of "parallel checkout".

 Will merge to 'master'.


* ba/object-info (2021-04-20) 1 commit
  (merged to 'next' on 2021-05-07 at e2cb0e4ef1)
 + object-info: support for retrieving object info

 Over-the-wire protocol learns a new request type to ask for object
 sizes given a list of object names.

 Will merge to 'master'.


* hn/prep-tests-for-reftable (2021-04-28) 21 commits
 - t1415: set REFFILES for test specific to storage format
 - t4202: mark bogus head hash test with REFFILES
 - t7003: check reflog existence only for REFFILES
 - t7900: mark pack-refs tests as REFFILES
 - t1404: mark tests that muck with .git directly as REFFILES.
 - t2017: mark --orphan/logAllRefUpdates=false test as REFFILES
 - t1414: mark corruption test with REFFILES
 - t1407: require REFFILES for for_each_reflog test
 - test-lib: provide test prereq REFFILES
 - t5304: use "reflog expire --all" to clear the reflog
 - t5304: restyle: trim empty lines, drop ':' before >
 - t7003: use rev-parse rather than FS inspection
 - t5000: inspect HEAD using git-rev-parse
 - t5000: reformat indentation to the latest fashion
 - t1301: fix typo in error message
 - t1413: use tar to save and restore entire .git directory
 - t1401-symbolic-ref: avoid direct filesystem access
 - t5601: read HEAD using rev-parse
 - t9300: check ref existence using test-helper rather than a file system check
 - t/helper/ref-store: initialize oid in resolve-ref
 - t4202: split testcase for invalid HEAD symref and HEAD hash

 Preliminary clean-up of tests before the main reftable changes
 hits the codebase.

 Waiting for reviews.


* jt/push-negotiation (2021-05-05) 6 commits
  (merged to 'next' on 2021-05-06 at 644a1bc4ee)
 + send-pack: support push negotiation
 + fetch: teach independent negotiation (no packfile)
 + fetch-pack: refactor command and capability write
 + fetch-pack: refactor add_haves()
 + fetch-pack: refactor process_acks()
 + Merge branch 'jt/fetch-pack-request-fix' into jt/push-negotiation

 "git push" learns to discover common ancestor with the receiving
 end over protocol v2.

 Will merge to 'master'.


* tb/multi-pack-bitmaps (2021-04-10) 23 commits
 - p5326: perf tests for MIDX bitmaps
 - p5310: extract full and partial bitmap tests
 - midx: respect 'GIT_TEST_MULTI_PACK_INDEX_WRITE_BITMAP'
 - t7700: update to work with MIDX bitmap test knob
 - t5319: don't write MIDX bitmaps in t5319
 - t5310: disable GIT_TEST_MULTI_PACK_INDEX_WRITE_BITMAP
 - t5326: test multi-pack bitmap behavior
 - t/helper/test-read-midx.c: add --checksum mode
 - t5310: move some tests to lib-bitmap.sh
 - pack-bitmap: write multi-pack bitmaps
 - pack-bitmap: read multi-pack bitmaps
 - pack-bitmap.c: introduce 'bitmap_is_preferred_refname()'
 - pack-bitmap.c: introduce 'nth_bitmap_object_oid()'
 - pack-bitmap.c: introduce 'bitmap_num_objects()'
 - midx: respect 'core.multiPackIndex' when writing
 - midx: clear auxiliary .rev after replacing the MIDX
 - midx: make a number of functions non-static
 - Documentation: describe MIDX-based bitmaps
 - Documentation: build 'technical/bitmap-format' by default
 - pack-bitmap-write.c: free existing bitmaps
 - pack-bitmap-write.c: gracefully fail to write non-closed bitmaps
 - pack-bitmap.c: harden 'test_bitmap_walk()' to check type bitmaps
 - Merge branch 'tb/pack-preferred-tips-to-give-bitmap' into tb/multi-pack-bitmaps

 The reachability bitmap file used to be generated only for a single
 pack, but now we've learned to generate bitmaps for history that
 span across multiple packfiles.

 Waiting for reviews.
 cf. <cover.1617991824.git.me@ttaylorr.com>


* ab/test-lib-updates (2021-05-11) 11 commits
 - test-lib: split up and deprecate test_create_repo()
 - test-lib: do not show advice about init.defaultBranch under --verbose
 - test-lib: reformat argument list in test_create_repo()
 - submodule tests: use symbolic-ref --short to discover branch name
 - test-lib functions: add --printf option to test_commit
 - describe tests: convert setup to use test_commit
 - test-lib functions: add an --annotated option to "test_commit"
 - test-lib-functions: document test_commit --no-tag
 - test-lib-functions: reword "test_commit --append" docs
 - test-lib tests: remove dead GIT_TEST_FRAMEWORK_SELFTEST variable
 - test-lib: bring $remove_trash out of retirement
 (this branch is used by ab/describe-tests-fix and ab/pickaxe-pcre2.)

 Test clean-up.


* ao/p4-avoid-decoding (2021-04-12) 2 commits
 - git-p4: do not decode data from perforce by default
 - git-p4: avoid decoding more data from perforce

 "git p4" in Python-2 days used to accept a lot more kinds of data
 from Perforce server as uninterrupted byte sequence, but after
 switching to Python-3, too many things are expected to be in UTF-8,
 which broke traditional use cases.

 Waiting for reviews.


* ma/t0091-bugreport-fix (2021-04-12) 1 commit
 - t0091-bugreport.sh: actually verify some content of report

 Test fix.

 Expecting a reroll.
 cf. <YHYZTLl90rkWWVOr@google.com>, <87a6q22dei.fsf@evledraar.gmail.com>


* mr/bisect-in-c-4 (2021-04-11) 4 commits
 - bisect--helper: retire `--bisect-next-check` subcommand
 - bisect--helper: reimplement `bisect_run` shell function in C
 - bisect--helper: reimplement `bisect_visualize()`shell function in C
 - run-command: make `exists_in_PATH()` non-static

 The codepaths involved in running "git bisect visualize" and "git
 bisect run" has been rewritten in C.

 Expecting a reroll.
 cf. <xmqq35vwh8qk.fsf@gitster.g>, <xmqqy2doftrj.fsf@gitster.g>,
 <CAP8UFD3X24F3qgefHpi00PM-KUk+vcqxwy2Dbngbyj7ciavCVQ@mail.gmail.com>
 May want to boost the test coverage.


* hn/reftable (2021-04-20) 28 commits
 - t1404: annotate test cases with REFFILES
 - t1401,t2011: parameterize HEAD.lock for REFTABLE
 - t1301: document what needs to be done for REFTABLE
 - Add "test-tool dump-reftable" command.
 - git-prompt: prepare for reftable refs backend
 - Reftable support for git-core
 - reftable: add dump utility
 - reftable: implement stack, a mutable database of reftable files.
 - reftable: implement refname validation
 - reftable: add merged table view
 - reftable: add a heap-based priority queue for reftable records
 - reftable: reftable file level tests
 - reftable: read reftable files
 - reftable: generic interface to tables
 - reftable: write reftable files
 - reftable: a generic binary tree implementation
 - reftable: reading/writing blocks
 - Provide zlib's uncompress2 from compat/zlib-compat.c
 - reftable: (de)serialization for the polymorphic record type.
 - reftable: add blocksource, an abstraction for random access reads
 - reftable: utility functions
 - reftable: add error related functionality
 - reftable: add LICENSE
 - init-db: set the_repository->hash_algo early on
 - hash.h: provide constants for the hash IDs
 - refs/debug: trace into reflog expiry too
 - refs: document reflog_expire_fn's flag argument
 - refs: ref_iterator_peel returns boolean, rather than peel_status

 The "reftable" backend for the refs API.

 Waiting for reviews.

--------------------------------------------------
[Discarded]

* ab/fsck-unexpected-type (2021-04-13) 6 commits
 . fsck: report invalid object type-path combinations
 . fsck: report invalid types recorded in objects
 . object-store.h: move read_loose_object() below 'struct object_info'
 . fsck: don't hard die on invalid object types
 . fsck tests: refactor one test to use a sub-repo
 . cache.h: move object functions to object-store.h

 "git fsck" has been taught to report mismatch between expected and
 actual types of an object better.

 Retracted for now.
 cf. <cover-0.5-00000000000-20210505T122816Z-avarab@gmail.com>

^ permalink raw reply	[relevance 3%]

* [ANNOUNCE] Git v2.32.0-rc0
@ 2021-05-17  7:06  3% Junio C Hamano
  0 siblings, 0 replies; 200+ results
From: Junio C Hamano @ 2021-05-17  7:06 UTC (permalink / raw)
  To: git; +Cc: Linux Kernel, git-packagers

An early preview release Git v2.32.0-rc0 is now available for
testing at the usual places.  It is comprised of 545 non-merge
commits since v2.31.0, contributed by 76 people, 29 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.32.0-rc0' tag and the 'master' branch that the tag points at:

  url = https://git.kernel.org/pub/scm/git/git
  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.31.0 are as follows.
Welcome to the Git development community!

  Adam Sharafeddine, Andrey Bienkowski, Atharva Raykar, Bruno
  Albuquerque, Chinmoy Chakraborty, Christopher Schenk, Dan
  Moseley, David Emett, Dmitry Torilov, Fabien Terrani, Firmin
  Martin, Georgios Kontaxis, Jerry Zhang, Joachim Kuebart, Joseph
  Vusich, Josh Soref, Julien Richard, Li Linchao, Louis Sautier,
  Luke Shumaker, Nicholas Clark, Peter Oliver, Renato Botelho,
  Robert Foss, RyotaK, Sardorbek Imomaliev, Tom Saeger, Will
  Chandler, and Yiyuan guo.

Returning contributors who helped this release are as follows.
Thanks for your continued support.

  Adam Dinwoodie, Ævar Arnfjörð Bjarmason, Alex Henrie, Andrzej
  Hunt, Bagas Sanjaya, brian m. carlson, Charvi Mendiratta,
  Christian Couder, Dennis Ameling, Denton Liu, Derrick Stolee,
  Đoàn Trần Công Danh, Elijah Newren, Eric Sunshine,
  Han-Wen Nienhuys, Han Xin, Jeff Hostetler, Jeff King, Johannes
  Schindelin, John Szakmeister, Jonathan Nieder, Jonathan Tan,
  Junio C Hamano, Kyle Meyer, Lénaïc Huard, Luke Diamand,
  Marc Branchaud, Martin Ågren, Matheus Tavares, Nguyễn Thái
  Ngọc Duy, Nipunn Koorapati, Øystein Walle, Patrick Steinhardt,
  Phillip Wood, Rafael Silva, Ramkumar Ramachandra, Ramsay Jones,
  René Scharfe, Sergey Organov, Shubham Verma, Son Luong Ngoc,
  SZEDER Gábor, Taylor Blau, Torsten Bögershausen, Trygve
  Aaberge, Ville Skyttä, and ZheNing Hu.

[*] We are counting not just the authorship contribution but
    issue reporting, testing and reviewing that are recorded
    in the commit trailers.

----------------------------------------------------------------

Git 2.32 Release Notes (draft)
==============================

Backward compatibility notes
----------------------------

 * ".gitattributes", ".gitignore", and ".mailmap" files that are
   symbolic links are ignored.

 * "git apply --3way" used to first attempt a straight application,
   and only fell back to the 3-way merge algorithm when the stright
   application failed.  Starting with this version, the command will
   first try the 3-way merge algorithm and only when it fails (either
   resulting with conflict or the base versions of blobs are missing),
   falls back to the usual patch application.


Updates since v2.31
-------------------

UI, Workflows & Features

 * It does not make sense to make ".gitattributes", ".gitignore" and
   ".mailmap" symlinks, as they are supposed to be usable from the
   object store (think: bare repositories where HEAD:.mailmap etc. are
   used).  When these files are symbolic links, we used to read the
   contents of the files pointed by them by mistake, which has been
   corrected.

 * "git stash show" learned to optionally show untracked part of the
   stash.

 * "git log --format='...'" learned "%(describe)" placeholder.

 * "git repack" so far has been only capable of repacking everything
   under the sun into a single pack (or split by size).  A cleverer
   strategy to reduce the cost of repacking a repository has been
   introduced.

 * The http codepath learned to let the credential layer to cache the
   password used to unlock a certificate that has successfully been
   used.

 * "git commit --fixup=<commit>", which was to tweak the changes made
   to the contents while keeping the original log message intact,
   learned "--fixup=(amend|reword):<commit>", that can be used to
   tweak both the message and the contents, and only the message,
   respectively.

 * When accessing a server with a URL like https://user:pass@site/, we
   did not to fall back to the basic authentication with the
   credential material embedded in the URL after the "Negotiate"
   authentication failed.  Now we do.

 * "git send-email" learned to honor the core.hooksPath configuration.

 * "git format-patch -v<n>" learned to allow a reroll count that is
   not an integer.

 * "git commit" learned "--trailer <key>[=<value>]" option; together
   with the interpret-trailers command, this will make it easier to
   support custom trailers.

 * "git clone --reject-shallow" option fails the clone as soon as we
   notice that we are cloning from a shallow repository.

 * A configuration variable has been added to force tips of certain
   refs to be given a reachability bitmap.

 * "gitweb" learned "e-mail privacy" feature to redact strings that
   look like e-mail addresses on various pages.

 * "git apply --3way" has always been "to fall back to 3-way merge
   only when straight application fails". Swap the order of falling
   back so that 3-way is always attempted first (only when the option
   is given, of course) and then straight patch application is used as
   a fallback when it fails.

 * "git apply" now takes "--3way" and "--cached" at the same time, and
   work and record results only in the index.

 * The command line completion (in contrib/) has learned that
   CHERRY_PICK_HEAD is a possible pseudo-ref.

 * Userdiff patterns for "Scheme" has been added.

 * "git log" learned "--diff-merges=<style>" option, with an
   associated configuration variable log.diffMerges.

 * "git log --format=..." placeholders learned %ah/%ch placeholders to
   request the --date=human output.

 * Replace GIT_CONFIG_NOSYSTEM mechanism to decline from reading the
   system-wide configuration file with GIT_CONFIG_SYSTEM that lets
   users specify from which file to read the system-wide configuration
   (setting it to an empty file would essentially be the same as
   setting NOSYSTEM), and introduce GIT_CONFIG_GLOBAL to override the
   per-user configuration in $HOME/.gitconfig.

 * "git add" and "git rm" learned not to touch those paths that are
   outside of sparse checkout.

 * "git rev-list" learns the "--filter=object:type=<type>" option,
   which can be used to exclude objects of the given kind from the
   packfile generated by pack-objects.

 * The command line completion (in contrib/) for "git stash" has been
   updated.

 * "git subtree" updates.

 * It is now documented that "format-patch" skips merges.

 * Options to "git pack-objects" that take numeric values like
   --window and --depth should not accept negative values; the input
   validation has been tightened.

 * The way the command line specified by the trailer.<token>.command
   configuration variable receives the end-user supplied value was
   both error prone and misleading.  An alternative to achieve the
   same goal in a safer and more intuitive way has been added, as
   the trailer.<token>.cmd configuration variable, to replace it.

 * "git add -i --dry-run" does not dry-run, which was surprising.  The
   combination of options has taught to error out.

 * "git push" learns to discover common ancestor with the receiving
   end over protocol v2.  This will hopefully make "git push" as
   efficient as "git fetch" in avoiding objects from getting
   transferred unnecessarily.

 * "git mailinfo" (hence "git am") learned the "--quoted-cr" option to
   control how lines ending with CRLF wrapped in base64 or qp are
   handled.


Performance, Internal Implementation, Development Support etc.

 * Rename detection rework continues.

 * GIT_TEST_FAIL_PREREQS is a mechanism to skip test pieces with
   prerequisites to catch broken tests that depend on the side effects
   of optional pieces, but did not work at all when negative
   prerequisites were involved.
   (merge 27d578d904 jk/fail-prereq-testfix later to maint).

 * "git diff-index" codepath has been taught to trust fsmonitor status
   to reduce number of lstat() calls.
   (merge 7e5aa13d2c nk/diff-index-fsmonitor later to maint).

 * Reorganize Makefile to allow building git.o and other essential
   objects without extra stuff needed only for testing.

 * Preparatory API changes for parallel checkout.

 * A simple IPC interface gets introduced to build services like
   fsmonitor on top.

 * Fsck API clean-up.

 * SECURITY.md that is facing individual contributors and end users
   has been introduced.  Also a procedure to follow when preparing
   embargoed releases has been spelled out.
   (merge 09420b7648 js/security-md later to maint).

 * Optimize "rev-list --use-bitmap-index --objects" corner case that
   uses negative tags as the stopping points.

 * CMake update for vsbuild.

 * An on-disk reverse-index to map the in-pack location of an object
   back to its object name across multiple packfiles is introduced.

 * Generate [ec]tags under $(QUIET_GEN).

 * Clean-up codepaths that implements "git send-email --validate"
   option and improves the message from it.

 * The last remnant of gettext-poison has been removed.

 * The test framework has been taught to optionally turn the default
   merge strategy to "ort" throughout the system where we use
   three-way merges internally, like cherry-pick, rebase etc.,
   primarily to enhance its test coverage (the strategy has been
   available as an explicit "-s ort" choice).

 * A bit of code clean-up and a lot of test clean-up around userdiff
   area.

 * Handling of "promisor packs" that allows certain objects to be
   missing and lazily retrievable has been optimized (a bit).

 * When packet_write() fails, we gave an extra error message
   unnecessarily, which has been corrected.

 * The checkout machinery has been taught to perform the actual
   write-out of the files in parallel when able.

 * Show errno in the trace output in the error codepath that calls
   read_raw_ref method.

 * Effort to make the command line completion (in contrib/) safe with
   "set -u" continues.

 * Tweak a few tests for "log --format=..." that show timestamps in
   various formats.

 * The reflog expiry machinery has been taught to emit trace events.

 * Over-the-wire protocol learns a new request type to ask for object
   sizes given a list of object names.


Fixes since v2.31
-----------------

 * The fsmonitor interface read from its input without making sure
   there is something to read from.  This bug is new in 2.31
   timeframe.

 * The data structure used by fsmonitor interface was not properly
   duplicated during an in-core merge, leading to use-after-free etc.

 * "git bisect" reimplemented more in C during 2.30 timeframe did not
   take an annotated tag as a good/bad endpoint well.  This regression
   has been corrected.

 * Fix macros that can silently inject unintended null-statements.

 * CALLOC_ARRAY() macro replaces many uses of xcalloc().

 * Update insn in Makefile comments to run fuzz-all target.

 * Fix a corner case bug in "git mv" on case insensitive systems,
   which was introduced in 2.29 timeframe.

 * We had a code to diagnose and die cleanly when a required
   clean/smudge filter is missing, but an assert before that
   unnecessarily fired, hiding the end-user facing die() message.
   (merge 6fab35f748 mt/cleanly-die-upon-missing-required-filter later to maint).

 * Update C code that sets a few configuration variables when a remote
   is configured so that it spells configuration variable names in the
   canonical camelCase.
   (merge 0f1da600e6 ab/remote-write-config-in-camel-case later to maint).

 * A new configuration variable has been introduced to allow choosing
   which version of the generation number gets used in the
   commit-graph file.
   (merge 702110aac6 ds/commit-graph-generation-config later to maint).

 * Perf test update to work better in secondary worktrees.
   (merge 36e834abc1 jk/perf-in-worktrees later to maint).

 * Updates to memory allocation code around the use of pcre2 library.
   (merge c1760352e0 ab/grep-pcre2-allocfix later to maint).

 * "git -c core.bare=false clone --bare ..." would have segfaulted,
   which has been corrected.
   (merge 75555676ad bc/clone-bare-with-conflicting-config later to maint).

 * When "git checkout" removes a path that does not exist in the
   commit it is checking out, it wasn't careful enough not to follow
   symbolic links, which has been corrected.
   (merge fab78a0c3d mt/checkout-remove-nofollow later to maint).

 * A few option description strings started with capital letters,
   which were corrected.
   (merge 5ee90326dc cc/downcase-opt-help later to maint).

 * Plug or annotate remaining leaks that trigger while running the
   very basic set of tests.
   (merge 68ffe095a2 ah/plugleaks later to maint).

 * The hashwrite() API uses a buffering mechanism to avoid calling
   write(2) too frequently. This logic has been refactored to be
   easier to understand.
   (merge ddaf1f62e3 ds/clarify-hashwrite later to maint).

 * "git cherry-pick/revert" with or without "--[no-]edit" did not spawn
   the editor as expected (e.g. "revert --no-edit" after a conflict
   still asked to edit the message), which has been corrected.
   (merge 39edfd5cbc en/sequencer-edit-upon-conflict-fix later to maint).

 * "git daemon" has been tightened against systems that take backslash
   as directory separator.
   (merge 9a7f1ce8b7 rs/daemon-sanitize-dir-sep later to maint).

 * A NULL-dereference bug has been corrected in an error codepath in
   "git for-each-ref", "git branch --list" etc.
   (merge c685450880 jk/ref-filter-segfault-fix later to maint).

 * Streamline the codepath to fix the UTF-8 encoding issues in the
   argv[] and the prefix on macOS.
   (merge c7d0e61016 tb/precompose-prefix-simplify later to maint).

 * The command-line completion script (in contrib/) had a couple of
   references that would have given a warning under the "-u" (nounset)
   option.
   (merge c5c0548d79 vs/completion-with-set-u later to maint).

 * When "git pack-objects" makes a literal copy of a part of existing
   packfile using the reachability bitmaps, its update to the progress
   meter was broken.
   (merge 8e118e8490 jk/pack-objects-bitmap-progress-fix later to maint).

 * The dependencies for config-list.h and command-list.h were broken
   when the former was split out of the latter, which has been
   corrected.
   (merge 56550ea718 sg/bugreport-fixes later to maint).

 * "git push --quiet --set-upstream" was not quiet when setting the
   upstream branch configuration, which has been corrected.
   (merge f3cce896a8 ow/push-quiet-set-upstream later to maint).

 * The prefetch task in "git maintenance" assumed that "git fetch"
   from any remote would fetch all its local branches, which would
   fetch too much if the user is interested in only a subset of
   branches there.
   (merge 32f67888d8 ds/maintenance-prefetch-fix later to maint).

 * Clarify that pathnames recorded in Git trees are most often (but
   not necessarily) encoded in UTF-8.
   (merge 9364bf465d ab/pathname-encoding-doc later to maint).

 * "git --config-env var=val cmd" weren't accepted (only
   --config-env=var=val was).
   (merge c331551ccf ps/config-env-option-with-separate-value later to maint).

 * When the reachability bitmap is in effect, the "do not lose
   recently created objects and those that are reachable from them"
   safety to protect us from races were disabled by mistake, which has
   been corrected.
   (merge 2ba582ba4c jk/prune-with-bitmap-fix later to maint).

 * Cygwin pathname handling fix.
   (merge bccc37fdc7 ad/cygwin-no-backslashes-in-paths later to maint).

 * "git rebase --[no-]reschedule-failed-exec" did not work well with
   its configuration variable, which has been corrected.
   (merge e5b32bffd1 ab/rebase-no-reschedule-failed-exec later to maint).

 * Portability fix for command line completion script (in contrib/).
   (merge f2acf763e2 si/zsh-complete-comment-fix later to maint).

 * "git repack -A -d" in a partial clone unnecessarily loosened
   objects in promisor pack.

 * "git bisect skip" when custom words are used for new/old did not
   work, which has been corrected.

 * A few variants of informational message "Already up-to-date" has
   been rephrased.
   (merge ad9322da03 js/merge-already-up-to-date-message-reword later to maint).

 * "git submodule update --quiet" did not propagate the quiet option
   down to underlying "git fetch", which has been corrected.
   (merge 62af4bdd42 nc/submodule-update-quiet later to maint).

 * Document that our test can use "local" keyword.
   (merge a84fd3bcc6 jc/test-allows-local later to maint).

 * The word-diff mode has been taught to work better with a word
   regexp that can match an empty string.
   (merge 0324e8fc6b pw/word-diff-zero-width-matches later to maint).

 * "git p4" learned to find branch points more efficiently.
   (merge 6b79818bfb jk/p4-locate-branch-point-optim later to maint).

 * When "git update-ref -d" removes a ref that is packed, it left
   empty directories under $GIT_DIR/refs/ for
   (merge 5f03e5126d wc/packed-ref-removal-cleanup later to maint).

 * Other code cleanup, docfix, build fix, etc.
   (merge f451960708 dl/cat-file-doc-cleanup later to maint).
   (merge 12604a8d0c sv/t9801-test-path-is-file-cleanup later to maint).
   (merge ea7e63921c jr/doc-ignore-typofix later to maint).
   (merge 23c781f173 ps/update-ref-trans-hook-doc later to maint).
   (merge 42efa1231a jk/filter-branch-sha256 later to maint).
   (merge 4c8e3dca6e tb/push-simple-uses-branch-merge-config later to maint).
   (merge 6534d436a2 bs/asciidoctor-installation-hints later to maint).
   (merge 47957485b3 ab/read-tree later to maint).
   (merge 2be927f3d1 ab/diff-no-index-tests later to maint).
   (merge 76593c09bb ab/detox-gettext-tests later to maint).
   (merge 28e29ee38b jc/doc-format-patch-clarify later to maint).
   (merge fc12b6fdde fm/user-manual-use-preface later to maint).
   (merge dba94e3a85 cc/test-helper-bloom-usage-fix later to maint).
   (merge 61a7660516 hn/reftable-tables-doc-update later to maint).
   (merge 81ed96a9b2 jt/fetch-pack-request-fix later to maint).
   (merge 151b6c2dd7 jc/doc-do-not-capitalize-clarification later to maint).
   (merge 9160068ac6 js/access-nul-emulation-on-windows later to maint).
   (merge 7a14acdbe6 po/diff-patch-doc later to maint).
   (merge f91371b948 pw/patience-diff-clean-up later to maint).
   (merge 3a7f0908b6 mt/clean-clean later to maint).
   (merge d4e2d15a8b ab/streaming-simplify later to maint).
   (merge 0e59f7ad67 ah/merge-ort-i18n later to maint).
   (merge e6f68f62e0 ls/typofix later to maint).

----------------------------------------------------------------

Changes since v2.31.0 are as follows:

Adam Dinwoodie (1):
      cygwin: disallow backslashes in file names

Alex Henrie (1):
      merge-ort: split "distinct types" message into two translatable messages

Andrey Bienkowski (1):
      doc: clarify the filename encoding in git diff

Andrzej Hunt (24):
      Makefile: update 'make fuzz-all' docs to reflect modern clang
      symbolic-ref: don't leak shortened refname in check_symref()
      reset: free instead of leaking unneeded ref
      clone: free or UNLEAK further pointers when finished
      worktree: fix leak in dwim_branch()
      init: remove git_init_db_config() while fixing leaks
      init-db: silence template_dir leak when converting to absolute path
      fsmonitor: avoid global-buffer-overflow READ when checking trivial response
      parse-options: convert bitfield values to use binary shift
      parse-options: don't leak alias help messages
      transport: also free remote_refs in transport_disconnect()
      merge-ort: only do pointer arithmetic for non-empty lists
      revision: free remainder of old commit list in limit_list
      wt-status: fix multiple small leaks
      ls-files: free max_prefix when done
      bloom: clear each bloom_key after use
      branch: FREE_AND_NULL instead of NULL'ing real_ref
      builtin/bugreport: don't leak prefixed filename
      builtin/check-ignore: clear_pathspec before returning
      builtin/checkout: clear pending objects after diffing
      mailinfo: also free strbuf lists when clearing mailinfo
      builtin/for-each-ref: free filter and UNLEAK sorting.
      builtin/rebase: release git_format_patch_opt too
      builtin/rm: avoid leaking pathspec and seen

Atharva Raykar (1):
      userdiff: add support for Scheme

Bagas Sanjaya (1):
      INSTALL: note on using Asciidoctor to build doc

Bruno Albuquerque (1):
      object-info: support for retrieving object info

Charvi Mendiratta (23):
      sequencer: pass todo_item to do_pick_commit()
      sequencer: use const variable for commit message comments
      rebase -i: add fixup [-C | -c] command
      t3437: test script for fixup [-C|-c] options in interactive rebase
      rebase -i: teach --autosquash to work with amend!
      doc/git-rebase: add documentation for fixup [-C|-c] options
      sequencer: fixup the datatype of the 'flag' argument
      sequencer: rename a few functions
      rebase -i: clarify and fix 'fixup -c' rebase-todo help
      t/lib-rebase: update the documentation of FAKE_LINES
      t/t3437: fixup here-docs in the 'setup' test
      t/t3437: remove the dependency of 'expected-message' file from tests
      t/t3437: check the author date of fixed up commit
      t/t3437: simplify and document the test helpers
      t/t3437: use named commits in the tests
      t/t3437: fixup the test 'multiple fixup -c opens editor once'
      doc/rebase -i: fix typo in the documentation of 'fixup' command
      sequencer: export and rename subject_length()
      commit: add amend suboption to --fixup to create amend! commit
      commit: add a reword suboption to --fixup
      t7500: add tests for --fixup=[amend|reword] options
      t3437: use --fixup with options to create amend! commit
      doc/git-commit: add documentation for fixup=[amend|reword] options

Chinmoy Chakraborty (1):
      column, range-diff: downcase option description

Christian Couder (1):
      test-bloom: fix missing 'bloom' from usage string

Christopher Schenk (1):
      remote-curl: fall back to basic auth if Negotiate fails

Dennis Ameling (2):
      cmake(install): fix double .exe suffixes
      cmake(install): include vcpkg dlls

Denton Liu (13):
      git-cat-file.txt: monospace args, placeholders and filenames
      git-cat-file.txt: remove references to "sha1"
      stash show: teach --include-untracked and --only-untracked
      stash show: learn stash.showIncludeUntracked
      git-completion.bash: pass $__git_subcommand_idx from __git_main()
      git-completion.bash: extract from else in _git_stash()
      git-completion.bash: use __gitcomp_builtin() in _git_stash()
      git-completion.bash: separate some commands onto their own line
      git-completion.bash: rename to $__git_cmd_idx
      git-completion.bash: use $__git_cmd_idx in more places
      git-completion.bash: consolidate cases in _git_stash()
      t3905: correct test title
      stash show: fix segfault with --{include,only}-untracked

Derrick Stolee (54):
      commit-graph: create local repository pointer
      commit-graph: use config to specify generation type
      csum-file: make hashwrite() more readable
      sparse-index: design doc and format update
      t/perf: add performance test for sparse operations
      t1092: clean up script quoting
      sparse-index: add guard to ensure full index
      sparse-index: implement ensure_full_index()
      t1092: compare sparse-checkout to sparse-index
      test-read-cache: print cache entries with --table
      test-tool: don't force full index
      unpack-trees: ensure full index
      sparse-checkout: hold pattern list in index
      sparse-index: add 'sdir' index extension
      sparse-index: convert from full to sparse
      submodule: sparse-index should not collapse links
      unpack-trees: allow sparse directories
      sparse-index: check index conversion happens
      sparse-index: add index.sparse config option
      sparse-checkout: toggle sparse index from builtin
      sparse-checkout: disable sparse-index
      cache-tree: integrate with sparse directory entries
      sparse-index: loose integration with cache_tree_verify()
      p2000: add sparse-index repos
      maintenance: simplify prefetch logic
      sparse-index: API protection strategy
      *: remove 'const' qualifier for struct index_state
      read-cache: expand on query into sparse-directory entry
      cache: move ensure_full_index() to cache.h
      add: ensure full index
      checkout-index: ensure full index
      checkout: ensure full index
      commit: ensure full index
      difftool: ensure full index
      fsck: ensure full index
      grep: ensure full index
      ls-files: ensure full index
      merge-index: ensure full index
      rm: ensure full index
      stash: ensure full index
      update-index: ensure full index
      dir: ensure full index
      entry: ensure full index
      merge-recursive: ensure full index
      pathspec: ensure full index
      read-cache: ensure full index
      resolve-undo: ensure full index
      revision: ensure full index
      name-hash: don't add directories to name_hash
      sparse-index: expand_to_path()
      name-hash: use expand_to_path()
      fetch: add --prefetch option
      maintenance: use 'git fetch --prefetch'
      maintenance: respect remote.*.skipFetchAll

Elijah Newren (40):
      diffcore-rename: use directory rename guided basename comparisons
      diffcore-rename: provide basic implementation of idx_possible_rename()
      diffcore-rename: add a mapping of destination names to their indices
      Move computation of dir_rename_count from merge-ort to diffcore-rename
      diffcore-rename: add function for clearing dir_rename_count
      diffcore-rename: move dir_rename_counts into dir_rename_info struct
      diffcore-rename: extend cleanup_dir_rename_info()
      diffcore-rename: compute dir_rename_counts in stages
      diffcore-rename: limit dir_rename_counts computation to relevant dirs
      diffcore-rename: compute dir_rename_guess from dir_rename_counts
      diffcore-rename: enable filtering possible rename sources
      merge-ort: precompute subset of sources for which we need rename detection
      merge-ort: add data structures for an alternate tree traversal
      merge-ort: introduce wrappers for alternate tree traversal
      merge-ort: precompute whether directory rename detection is needed
      merge-ort: use relevant_sources to filter possible rename sources
      merge-ort: skip rename detection entirely if possible
      diffcore-rename: avoid doing basename comparisons for irrelevant sources
      diffcore-rename: take advantage of "majority rules" to skip more renames
      merge-ort, diffcore-rename: tweak dirs_removed and relevant_source type
      merge-ort: record the reason that we want a rename for a directory
      diffcore-rename: only compute dir_rename_count for relevant directories
      diffcore-rename: check if we have enough renames for directories early on
      diffcore-rename: add computation of number of unknown renames
      merge-ort: record the reason that we want a rename for a file
      diffcore-rename: determine which relevant_sources are no longer relevant
      merge-ort: use STABLE_QSORT instead of QSORT where required
      merge-ort: add a special minimal index just for renormalization
      merge-ort: have ll_merge() use a special attr_index for renormalization
      merge-ort: let renormalization change modify/delete into clean delete
      merge-ort: support subtree shifting
      t6428: new test for SKIP_WORKTREE handling and conflicts
      merge-ort: implement CE_SKIP_WORKTREE handling with conflicted entries
      t: mark several submodule merging tests as fixed under merge-ort
      merge-ort: write $GIT_DIR/AUTO_MERGE whenever we hit a conflict
      merge-recursive: add a bunch of FIXME comments documenting known bugs
      Revert "merge-ort: ignore the directory rename split conflict for now"
      t6423: mark remaining expected failure under merge-ort as such
      Add testing with merge-ort merge strategy
      sequencer: fix edit handling for cherry-pick and revert messages

Eric Sunshine (1):
      merge(s): apply consistent punctuation to "up to date" messages

Firmin Martin (1):
      user-manual.txt: assign preface an id and a title

Georgios Kontaxis (1):
      gitweb: add "e-mail privacy" feature to redact e-mail addresses

Han Xin (1):
      pack-objects: fix comment of reused_chunk.difference

Han-Wen Nienhuys (3):
      reftable: document an alternate cleanup method on Windows
      refs: print errno for read_raw_ref if GIT_TRACE_REFS is set
      refs/debug: trace into reflog expiry too

Jeff Hostetler (13):
      pkt-line: eliminate the need for static buffer in packet_write_gently()
      simple-ipc: design documentation for new IPC mechanism
      simple-ipc: add win32 implementation
      unix-socket: eliminate static unix_stream_socket() helper function
      unix-socket: add backlog size option to unix_stream_listen()
      unix-socket: disallow chdir() when creating unix domain sockets
      unix-stream-server: create unix domain socket under lock
      convert: make convert_attrs() and convert structs public
      convert: add [async_]convert_to_working_tree_ca() variants
      convert: add get_stream_filter_ca() variant
      convert: add classification for conv_attrs struct
      simple-ipc: add Unix domain socket implementation
      t0052: add simple-ipc tests and t/helper/test-simple-ipc tool

Jeff King (40):
      add open_nofollow() helper
      attr: convert "macro_ok" into a flags field
      exclude: add flags parameter to add_patterns()
      attr: do not respect symlinks for in-tree .gitattributes
      exclude: do not respect symlinks for in-tree .gitignore
      mailmap: do not respect symlinks for in-tree .mailmap
      p5303: add missing &&-chains
      p5303: measure time to repack with keep
      builtin/pack-objects.c: rewrite honor-pack-keep logic
      packfile: add kept-pack cache for find_kept_pack_entry()
      t/perf: handle worktrees as test repos
      t/perf: avoid copying worktree files from test repo
      t7003: test ref rewriting explicitly
      filter-branch: drop multiple-ancestor warning
      filter-branch: drop $_x40 glob
      bisect: peel annotated tags to commits
      t: annotate !PTHREADS tests with !FAIL_PREREQS
      ref-filter: fix NULL check for parse object failure
      midx.c: improve cache locality in midx_pack_order_cmp()
      pack-objects: update "nr_seen" progress based on pack-reused count
      is_promisor_object(): free tree buffer after parsing
      lookup_unknown_object(): take a repository argument
      revision: avoid parsing with --exclude-promisor-objects
      pack-bitmap: clean up include_check after use
      prune: save reachable-from-recent objects with bitmaps
      t5300: modernize basic tests
      t5300: check that we produced expected number of deltas
      pack-objects: clamp negative window size to 0
      t5316: check behavior of pack-objects --depth=0
      pack-objects: clamp negative depth to 0
      docs/format-patch: mention handling of merges
      t7415: remove out-dated comment about translation
      fsck_tree(): fix shadowed variable
      fsck_tree(): wrap some long lines
      t7415: rename to expand scope
      t7450: test verify_path() handling of gitmodules
      t7450: test .gitmodules symlink matching against obscured names
      t0060: test ntfs/hfs-obscured dotfiles
      fsck: warn about symlinked dotfiles we'll open with O_NOFOLLOW
      docs: document symlink restrictions for dot-files

Jerry Zhang (3):
      git-apply: try threeway first when "--3way" is used
      git-apply: allow simultaneous --cached and --3way options
      apply: adjust messages to account for --3way changes

Joachim Kuebart (2):
      git-p4: ensure complex branches are cloned correctly
      git-p4: speed up search for branch parent

Johannes Schindelin (10):
      pkt-line: do not issue flush packets in write_packetized_*()
      pkt-line: add PACKET_READ_GENTLE_ON_READ_ERROR option
      pkt-line: add options argument to read_packetized_to_strbuf()
      fsmonitor: fix memory corruption in some corner cases
      fsmonitor: do not forget to release the token in `discard_index()`
      SECURITY: describe how to report vulnerabilities
      Document how we do embargoed releases
      cmake: support SKIP_DASHED_BUILT_INS
      cmake: add a preparatory work-around to accommodate `vcpkg`
      msvc: avoid calling `access("NUL", flags)`

John Szakmeister (2):
      http: store credential when PKI auth is used
      http: drop the check for an empty proxy password before approving

Jonathan Tan (8):
      t5606: run clone branch name test with protocol v2
      fetch-pack: buffer object-format with other args
      fetch-pack: refactor process_acks()
      fetch-pack: refactor add_haves()
      fetch-pack: refactor command and capability write
      fetch: teach independent negotiation (no packfile)
      send-pack: support push negotiation
      t5601: mark protocol v2-only test

Josh Soref (1):
      merge: fix swapped "up to date" message components

Julien Richard (1):
      doc: .gitignore documentation typofix

Junio C Hamano (25):
      builtin/repack.c: reword comment around pack-objects flags
      xcalloc: use CALLOC_ARRAY() when applicable
      cocci: allow xcalloc(1, size)
      The first batch in 2.32 cycle
      The second batch
      format-patch: give an overview of what a "patch" message is
      The third patch
      Git 2.31.1
      The fourth batch
      The fifth batch
      The sixth batch
      The seventh batch
      The eighth batch
      The ninth batch
      doc: clarify "do not capitalize the first word" rule
      The tenth batch
      The eleventh (aka "ort") batch
      The twelfth batch
      The thirteenth batch
      CodingGuidelines: explicitly allow "local" for test scripts
      The fourteenth batch
      The fifteenth batch
      The sixteenth batch
      The seventeenth batch
      Git 2.32-rc0

Kyle Meyer (1):
      config.txt: add missing period

Li Linchao (1):
      builtin/clone.c: add --reject-shallow option

Louis Sautier (1):
      pretty: fix a typo in the documentation for %(trailers)

Luke Shumaker (30):
      .gitignore: ignore 'git-subtree' as a build artifact
      subtree: t7900: update for having the default branch name be 'main'
      subtree: t7900: use test-lib.sh's test_count
      subtree: t7900: use consistent formatting
      subtree: t7900: comment subtree_test_create_repo
      subtree: t7900: use 'test' for string equality
      subtree: t7900: delete some dead code
      subtree: t7900: fix 'verify one file change per commit'
      subtree: t7900: rename last_commit_message to last_commit_subject
      subtree: t7900: add a test for the -h flag
      subtree: t7900: add porcelain tests for 'pull' and 'push'
      subtree: don't have loose code outside of a function
      subtree: more consistent error propagation
      subtree: drop support for git < 1.7
      subtree: use `git merge-base --is-ancestor`
      subtree: use git-sh-setup's `say`
      subtree: use more explicit variable names for cmdline args
      subtree: use "$*" instead of "$@" as appropriate
      subtree: don't fuss with PATH
      subtree: use "^{commit}" instead of "^0"
      subtree: parse revs in individual cmd_ functions
      subtree: remove duplicate check
      subtree: add comments and sanity checks
      subtree: don't let debug and progress output clash
      subtree: have $indent actually affect indentation
      subtree: give the docs a once-over
      subtree: allow --squash to be used with --rejoin
      subtree: allow 'split' flags to be passed to 'push'
      subtree: push: allow specifying a local rev other than HEAD
      subtree: be stricter about validating flags

Lénaïc Huard (1):
      maintenance: fix two memory leaks

Martin Ågren (2):
      git-repack.txt: remove spurious ")"
      pretty-formats.txt: add missing space

Matheus Tavares (30):
      convert: fail gracefully upon missing clean cmd on required filter
      symlinks: update comment on threaded_check_leading_path()
      checkout: don't follow symlinks when removing entries
      entry: extract a header file for entry.c functions
      entry: make fstat_output() and read_blob_entry() public
      entry: extract update_ce_after_write() from write_entry()
      entry: move conv_attrs lookup up to checkout_entry()
      entry: add checkout_entry_ca() taking preloaded conv_attrs
      add: include magic part of pathspec on --refresh error
      t3705: add tests for `git add` in sparse checkouts
      add: make --chmod and --renormalize honor sparse checkouts
      pathspec: allow to ignore SKIP_WORKTREE entries on index matching
      refresh_index(): add flag to ignore SKIP_WORKTREE entries
      add: warn when asked to update SKIP_WORKTREE entries
      rm: honor sparse checkout patterns
      pkt-line: do not report packet write errors twice
      unpack-trees: add basic support for parallel checkout
      parallel-checkout: make it truly parallel
      parallel-checkout: add configuration options
      parallel-checkout: support progress displaying
      parallel-checkout: add design documentation
      make_transient_cache_entry(): optionally alloc from mem_pool
      builtin/checkout.c: complete parallel checkout support
      checkout-index: add parallel checkout support
      parallel-checkout: add tests for basic operations
      parallel-checkout: add tests related to path collisions
      t0028: extract encoding helpers to lib-encoding.sh
      parallel-checkout: add tests related to .gitattributes
      ci: run test round with parallel-checkout enabled
      clean: remove unnecessary variable

Nicholas Clark (1):
      submodule update: silence underlying fetch with "--quiet"

Nipunn Koorapati (3):
      fsmonitor: skip lstat deletion check during git diff-index
      fsmonitor: add assertion that fsmonitor is valid to check_removed
      fsmonitor: add perf test for git diff HEAD

Patrick Steinhardt (17):
      githooks.txt: replace mentions of SHA-1 specific properties
      githooks.txt: clarify documentation on reference-transaction hook
      pack-bitmap: avoid traversal of objects referenced by uninteresting tag
      uploadpack.txt: document implication of `uploadpackfilter.allow`
      revision: mark commit parents as NOT_USER_GIVEN
      list-objects: move tag processing into its own function
      list-objects: support filtering by tag and commit
      list-objects: implement object type filter
      pack-bitmap: implement object type filter
      pack-bitmap: implement combined filter
      rev-list: allow filtering of provided items
      config: rename `git_etc_config()`
      config: unify code paths to get global config paths
      config: allow overriding of global and system configuration
      t1300: fix unset of GIT_CONFIG_NOSYSTEM leaking into subsequent tests
      git.txt: fix synopsis of `--config-env` missing the equals sign
      git: support separate arg for `--config-env`'s value

Peter Oliver (1):
      doc: point to diff attribute in patch format docs

Phillip Wood (6):
      rebase -i: only write fixup-message when it's needed
      sequencer: factor out code to append squash message
      rebase -i: comment out squash!/fixup! subjects from squash message
      word diff: handle zero length matches
      patience diff: remove unnecessary string comparisons
      patience diff: remove unused variable

Rafael Silva (1):
      repack: avoid loosening promisor objects in partial clones

Ramkumar Ramachandra (1):
      Add entry for Ramkumar Ramachandra

Ramsay Jones (1):
      bisect--helper: use BISECT_TERMS in 'bisect skip' command

René Scharfe (12):
      pretty: add %(describe)
      pretty: add merge and exclude options to %(describe)
      t4205: assert %(describe) test coverage
      pretty: document multiple %(describe) being inconsistent
      fix xcalloc() argument order
      archive: expand only a single %(describe) per archive
      git-compat-util.h: drop trailing semicolon from macro definition
      use CALLOC_ARRAY
      vcs-svn: remove header files as well
      block-sha1: drop trailing semicolon from macro definition
      mem-pool: drop trailing semicolon from macro definition
      daemon: sanitize all directory separators

Robert Foss (1):
      git-send-email: Respect core.hooksPath setting

SZEDER Gábor (1):
      Makefile: add missing dependencies of 'config-list.h'

Sardorbek Imomaliev (1):
      work around zsh comment in __git_complete_worktree_paths

Sergey Organov (5):
      diff-merges: introduce --diff-merges=on
      diff-merges: refactor set_diff_merges()
      diff-merges: adapt -m to enable default diff format
      diff-merges: introduce log.diffMerges config variable
      doc/diff-options: document new --diff-merges features

Shubham Verma (1):
      t9801: replace test -f with test_path_is_file

Taylor Blau (28):
      packfile: introduce 'find_kept_pack_entry()'
      revision: learn '--no-kept-objects'
      builtin/pack-objects.c: add '--stdin-packs' option
      builtin/repack.c: add '--geometric' option
      builtin/repack.c: do not repack single packs with --geometric
      t7703: test --geometric repack with loose objects
      builtin/repack.c: assign pack split later
      builtin/repack.c: be more conservative with unsigned overflows
      Documentation/git-push.txt: correct configuration typo
      builtin/pack-objects.c: ignore missing links with --stdin-packs
      builtin/multi-pack-index.c: inline 'flags' with options
      builtin/multi-pack-index.c: don't handle 'progress' separately
      builtin/multi-pack-index.c: define common usage with a macro
      builtin/multi-pack-index.c: split sub-commands
      builtin/multi-pack-index.c: don't enter bogus cmd_mode
      builtin/multi-pack-index.c: display usage on unrecognized command
      t/helper/test-read-midx.c: add '--show-objects'
      pack-bitmap: add 'test_bitmap_commits()' helper
      t/helper/test-bitmap.c: initial commit
      builtin/pack-objects.c: respect 'pack.preferBitmapTips'
      midx: allow marking a pack as preferred
      midx: don't free midx_name early
      midx: keep track of the checksum
      midx: make some functions non-static
      Documentation/technical: describe multi-pack reverse indexes
      pack-revindex: read multi-pack reverse indexes
      pack-write.c: extract 'write_rev_file_order'
      pack-revindex: write multi-pack reverse indexes

Torsten Bögershausen (3):
      git mv foo FOO ; git mv foo bar gave an assert
      precompose_utf8: make precompose_string_if_needed() public
      macOS: precompose startup_info->prefix

Ville Skyttä (2):
      completion: audit and guard $GIT_* against unset use
      completion: avoid aliased command lookup error in nounset mode

Will Chandler (1):
      refs: cleanup directories when deleting packed ref

ZheNing Hu (7):
      commit: add --trailer option
      format-patch: allow a non-integral version numbers
      ref-filter: get rid of show_ref_array_item
      ref-filter: reuse output buffer
      pretty: provide human date format
      docs: correct descript of trailer.<token>.command
      trailer: add new .cmd config option

brian m. carlson (14):
      builtin/init-db: handle bare clones when core.bare set to false
      hash: add an algo member to struct object_id
      Always use oidread to read into struct object_id
      http-push: set algorithm when reading object ID
      hash: add a function to finalize object IDs
      Use the final_oid_fn to finalize hashing of object IDs
      builtin/pack-redundant: avoid casting buffers to struct object_id
      hash: set, copy, and use algo field in struct object_id
      hash: provide per-algorithm null OIDs
      builtin/show-index: set the algorithm for object IDs
      commit-graph: don't store file hashes as struct object_id
      builtin/pack-objects: avoid using struct object_id for pack hash
      hex: default to the_hash_algo on zero algorithm value
      hex: print objects using the hash algorithm member

Ævar Arnfjörð Bjarmason (87):
      grep/pcre2: drop needless assignment + assert() on opt->pcre2
      grep/pcre2: drop needless assignment to NULL
      grep/pcre2: correct reference to grep_init() in comment
      grep/pcre2: prepare to add debugging to pcre2_malloc()
      grep/pcre2: add GREP_PCRE2_DEBUG_MALLOC debug mode
      grep/pcre2: use compile-time PCREv2 version test
      grep/pcre2: use pcre2_maketables_free() function
      grep/pcre2: actually make pcre2 use custom allocator
      grep/pcre2: move back to thread-only PCREv2 structures
      grep/pcre2: move definitions of pcre2_{malloc,free}
      Makefile: guard against TEST_OBJS in the environment
      Makefile: split up long OBJECTS line
      Makefile: sort OBJECTS assignment for subsequent change
      Makefile: split OBJECTS into OBJECTS and GIT_OBJS
      Makefile: add {program,xdiff,test,git,fuzz}-objs & objects targets
      remote: add camel-cased *.tagOpt key, like clone
      remote: write camel-cased *.pushRemote on rename
      fsck.c: refactor and rename common config callback
      show tests: add test for "git show <tree>"
      ls-files tests: add meaningful --with-tree tests
      tree.c API: move read_tree() into builtin/ls-files.c
      ls-files: don't needlessly pass around stage variable
      ls-files: refactor away read_tree()
      archive: stop passing "stage" through read_tree_recursive()
      tree.h API: expose read_tree_1() as read_tree_at()
      tree.h API: simplify read_tree_recursive() signature
      diff --no-index tests: add test for --exit-code
      diff --no-index tests: test mode normalization
      rebase: remove transitory rebase.useBuiltin setting & env
      mktag tests: fix broken "&&" chain
      fsck.h: use designed initializers for FSCK_OPTIONS_{DEFAULT,STRICT}
      fsck.h: use "enum object_type" instead of "int"
      fsck.c: rename variables in fsck_set_msg_type() for less confusion
      fsck.c: remove (mostly) redundant append_msg_id() function
      fsck.c: rename remaining fsck_msg_id "id" to "msg_id"
      fsck.c: refactor fsck_msg_type() to limit scope of "int msg_type"
      fsck.h: move FSCK_{FATAL,INFO,ERROR,WARN,IGNORE} into an enum
      fsck.h: re-order and re-assign "enum fsck_msg_type"
      fsck.c: call parse_msg_type() early in fsck_set_msg_type()
      fsck.c: undefine temporary STR macro after use
      fsck.c: give "FOREACH_MSG_ID" a more specific name
      fsck.[ch]: move FOREACH_FSCK_MSG_ID & fsck_msg_id from *.c to *.h
      fsck.c: pass along the fsck_msg_id in the fsck_error callback
      fsck.c: add an fsck_set_msg_type() API that takes enums
      fsck.c: move gitmodules_{found,done} into fsck_options
      fetch-pack: don't needlessly copy fsck_options
      fetch-pack: use file-scope static struct for fsck_options
      fetch-pack: use new fsck API to printing dangling submodules
      Makefile: add QUIET_GEN to "tags" and "TAGS" targets
      git-send-email: replace "map" in void context with "for"
      git-send-email: test full --validate output
      git-send-email: refactor duplicate $? checks into a function
      git-send-email: improve --validate error output
      bash completion: complete CHERRY_PICK_HEAD
      config.c: remove last remnant of GIT_TEST_GETTEXT_POISON
      userdiff style: re-order drivers in alphabetical order
      userdiff style: declare patterns with consistent style
      userdiff style: normalize pascal regex declaration
      userdiff: add and use for_each_userdiff_driver()
      userdiff tests: explicitly test "default" pattern
      userdiff tests: list builtin drivers via test-tool
      userdiff: remove support for "broken" tests
      blame tests: don't rely on t/t4018/ directory
      blame tests: simplify userdiff driver test
      rebase tests: camel-case rebase.rescheduleFailedExec consistently
      rebase: don't override --no-reschedule-failed-exec with config
      Documentation/Makefile: make $(wildcard howto/*.txt) a var
      Documentation/Makefile: make doc.dep dependencies a variable again
      doc lint: Perl "strict" and "warnings" in lint-gitlink.perl
      doc lint: fix bugs in, simplify and improve lint script
      doc lint: lint and fix missing "GIT" end sections
      doc lint: lint relative section order
      docs: fix linting issues due to incorrect relative section order
      svn tests: remove legacy re-setup from init-clone test
      svn tests: refactor away a "set -e" in test body
      tests: remove all uses of test_i18cmp
      usage.c: don't copy/paste the same comment three times
      api docs: document BUG() in api-error-handling.txt
      api docs: document that BUG() emits a trace2 error event
      pretty tests: simplify %aI/%cI date format test
      pretty tests: give --date/format tests a better description
      sparse-index.c: remove set_index_sparse_config()
      streaming.c: avoid forward declarations
      streaming.c: remove enum/function/vtbl indirection
      streaming.c: remove {open,close,read}_method_decl() macros
      streaming.c: stop passing around "object_info *" to open()
      streaming.c: move {open,close,read} from vtable to "struct git_istream"

Øystein Walle (2):
      transport: respect verbosity when setting upstream
      add: die if both --dry-run and --interactive are given

Đoàn Trần Công Danh (6):
      mailinfo: load default metainfo_charset lazily
      mailinfo: stop parsing options manually
      mailinfo: warn if CRLF found in decoded base64/QP email
      mailinfo: allow squelching quoted CRLF warning
      mailinfo: allow stripping quoted CR without warning
      am: learn to process quoted lines that ends with CRLF


^ permalink raw reply	[relevance 3%]

* [ANNOUNCE] Git v2.32.0-rc1
@ 2021-05-22 14:21  3% Junio C Hamano
  0 siblings, 0 replies; 200+ results
From: Junio C Hamano @ 2021-05-22 14:21 UTC (permalink / raw)
  To: git

A release candidate Git v2.32.0-rc1 is now available for testing at
the usual places.  It is comprised of 572 non-merge commits since
v2.31.0, contributed by 82 people, 31 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.32.0-rc1' tag and the 'master' branch that the tag points at:

  url = https://git.kernel.org/pub/scm/git/git
  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.31.0 are as follows.
Welcome to the Git development community!

  Adam Sharafeddine, Andrey Bienkowski, Atharva Raykar, Bruno
  Albuquerque, Chinmoy Chakraborty, Christopher Schenk, Dan
  Moseley, David Emett, Dmitry Torilov, Fabien Terrani, Firmin
  Martin, Georgios Kontaxis, Jason Gore, Jerry Zhang, Joachim
  Kuebart, Joseph Vusich, Josh Soref, Julien Richard, Li Linchao,
  Louis Sautier, Luke Shumaker, Nicholas Clark, Peter Oliver,
  Renato Botelho, Robert Foss, RyotaK, Sardorbek Imomaliev,
  Tom Saeger, Will Chandler, Wolfgang Müller, and Yiyuan guo.

Returning contributors who helped this release are as follows.
Thanks for your continued support.

  Adam Dinwoodie, Ævar Arnfjörð Bjarmason, Alex Henrie,
  Andrzej Hunt, Bagas Sanjaya, Ben Humphreys, brian m. carlson,
  Charvi Mendiratta, Christian Couder, Dennis Ameling, Denton
  Liu, Derrick Stolee, Đoàn Trần Công Danh, Elijah Newren,
  Eric Sunshine, Eric Wong, Han-Wen Nienhuys, Han Xin, Jeff
  Hostetler, Jeff King, Johannes Schindelin, John Szakmeister,
  Jonathan Nieder, Jonathan Tan, Junio C Hamano, Kyle Meyer,
  Lénaïc Huard, Luke Diamand, Marc Branchaud, Martin Ågren,
  Matheus Tavares, Nguyễn Thái Ngọc Duy, Nipunn Koorapati,
  Øystein Walle, Patrick Steinhardt, Phillip Wood, Rafael Silva,
  Ramkumar Ramachandra, Ramsay Jones, Randall S. Becker, René
  Scharfe, Sergey Organov, Shubham Verma, Son Luong Ngoc, SZEDER
  Gábor, Taylor Blau, Todd Zullinger, Torsten Bögershausen,
  Trygve Aaberge, Ville Skyttä, and ZheNing Hu.

[*] We are counting not just the authorship contribution but
    issue reporting, testing and reviewing that are recorded
    in the commit trailers.

----------------------------------------------------------------

Git 2.32 Release Notes (draft)
==============================

Backward compatibility notes
----------------------------

 * ".gitattributes", ".gitignore", and ".mailmap" files that are
   symbolic links are ignored.

 * "git apply --3way" used to first attempt a straight application,
   and only fell back to the 3-way merge algorithm when the stright
   application failed.  Starting with this version, the command will
   first try the 3-way merge algorithm and only when it fails (either
   resulting with conflict or the base versions of blobs are missing),
   falls back to the usual patch application.


Updates since v2.31
-------------------

UI, Workflows & Features

 * It does not make sense to make ".gitattributes", ".gitignore" and
   ".mailmap" symlinks, as they are supposed to be usable from the
   object store (think: bare repositories where HEAD:.mailmap etc. are
   used).  When these files are symbolic links, we used to read the
   contents of the files pointed by them by mistake, which has been
   corrected.

 * "git stash show" learned to optionally show untracked part of the
   stash.

 * "git log --format='...'" learned "%(describe)" placeholder.

 * "git repack" so far has been only capable of repacking everything
   under the sun into a single pack (or split by size).  A cleverer
   strategy to reduce the cost of repacking a repository has been
   introduced.

 * The http codepath learned to let the credential layer to cache the
   password used to unlock a certificate that has successfully been
   used.

 * "git commit --fixup=<commit>", which was to tweak the changes made
   to the contents while keeping the original log message intact,
   learned "--fixup=(amend|reword):<commit>", that can be used to
   tweak both the message and the contents, and only the message,
   respectively.

 * "git send-email" learned to honor the core.hooksPath configuration.

 * "git format-patch -v<n>" learned to allow a reroll count that is
   not an integer.

 * "git commit" learned "--trailer <key>[=<value>]" option; together
   with the interpret-trailers command, this will make it easier to
   support custom trailers.

 * "git clone --reject-shallow" option fails the clone as soon as we
   notice that we are cloning from a shallow repository.

 * A configuration variable has been added to force tips of certain
   refs to be given a reachability bitmap.

 * "gitweb" learned "e-mail privacy" feature to redact strings that
   look like e-mail addresses on various pages.

 * "git apply --3way" has always been "to fall back to 3-way merge
   only when straight application fails". Swap the order of falling
   back so that 3-way is always attempted first (only when the option
   is given, of course) and then straight patch application is used as
   a fallback when it fails.

 * "git apply" now takes "--3way" and "--cached" at the same time, and
   work and record results only in the index.

 * The command line completion (in contrib/) has learned that
   CHERRY_PICK_HEAD is a possible pseudo-ref.

 * Userdiff patterns for "Scheme" has been added.

 * "git log" learned "--diff-merges=<style>" option, with an
   associated configuration variable log.diffMerges.

 * "git log --format=..." placeholders learned %ah/%ch placeholders to
   request the --date=human output.

 * Replace GIT_CONFIG_NOSYSTEM mechanism to decline from reading the
   system-wide configuration file with GIT_CONFIG_SYSTEM that lets
   users specify from which file to read the system-wide configuration
   (setting it to an empty file would essentially be the same as
   setting NOSYSTEM), and introduce GIT_CONFIG_GLOBAL to override the
   per-user configuration in $HOME/.gitconfig.

 * "git add" and "git rm" learned not to touch those paths that are
   outside of sparse checkout.

 * "git rev-list" learns the "--filter=object:type=<type>" option,
   which can be used to exclude objects of the given kind from the
   packfile generated by pack-objects.

 * The command line completion (in contrib/) for "git stash" has been
   updated.

 * "git subtree" updates.

 * It is now documented that "format-patch" skips merges.

 * Options to "git pack-objects" that take numeric values like
   --window and --depth should not accept negative values; the input
   validation has been tightened.

 * The way the command line specified by the trailer.<token>.command
   configuration variable receives the end-user supplied value was
   both error prone and misleading.  An alternative to achieve the
   same goal in a safer and more intuitive way has been added, as
   the trailer.<token>.cmd configuration variable, to replace it.

 * "git add -i --dry-run" does not dry-run, which was surprising.  The
   combination of options has taught to error out.

 * "git push" learns to discover common ancestor with the receiving
   end over protocol v2.  This will hopefully make "git push" as
   efficient as "git fetch" in avoiding objects from getting
   transferred unnecessarily.

 * "git mailinfo" (hence "git am") learned the "--quoted-cr" option to
   control how lines ending with CRLF wrapped in base64 or qp are
   handled.


Performance, Internal Implementation, Development Support etc.

 * Rename detection rework continues.

 * GIT_TEST_FAIL_PREREQS is a mechanism to skip test pieces with
   prerequisites to catch broken tests that depend on the side effects
   of optional pieces, but did not work at all when negative
   prerequisites were involved.
   (merge 27d578d904 jk/fail-prereq-testfix later to maint).

 * "git diff-index" codepath has been taught to trust fsmonitor status
   to reduce number of lstat() calls.
   (merge 7e5aa13d2c nk/diff-index-fsmonitor later to maint).

 * Reorganize Makefile to allow building git.o and other essential
   objects without extra stuff needed only for testing.

 * Preparatory API changes for parallel checkout.

 * A simple IPC interface gets introduced to build services like
   fsmonitor on top.

 * Fsck API clean-up.

 * SECURITY.md that is facing individual contributors and end users
   has been introduced.  Also a procedure to follow when preparing
   embargoed releases has been spelled out.
   (merge 09420b7648 js/security-md later to maint).

 * Optimize "rev-list --use-bitmap-index --objects" corner case that
   uses negative tags as the stopping points.

 * CMake update for vsbuild.

 * An on-disk reverse-index to map the in-pack location of an object
   back to its object name across multiple packfiles is introduced.

 * Generate [ec]tags under $(QUIET_GEN).

 * Clean-up codepaths that implements "git send-email --validate"
   option and improves the message from it.

 * The last remnant of gettext-poison has been removed.

 * The test framework has been taught to optionally turn the default
   merge strategy to "ort" throughout the system where we use
   three-way merges internally, like cherry-pick, rebase etc.,
   primarily to enhance its test coverage (the strategy has been
   available as an explicit "-s ort" choice).

 * A bit of code clean-up and a lot of test clean-up around userdiff
   area.

 * Handling of "promisor packs" that allows certain objects to be
   missing and lazily retrievable has been optimized (a bit).

 * When packet_write() fails, we gave an extra error message
   unnecessarily, which has been corrected.

 * The checkout machinery has been taught to perform the actual
   write-out of the files in parallel when able.

 * Show errno in the trace output in the error codepath that calls
   read_raw_ref method.

 * Effort to make the command line completion (in contrib/) safe with
   "set -u" continues.

 * Tweak a few tests for "log --format=..." that show timestamps in
   various formats.

 * The reflog expiry machinery has been taught to emit trace events.

 * Over-the-wire protocol learns a new request type to ask for object
   sizes given a list of object names.


Fixes since v2.31
-----------------

 * The fsmonitor interface read from its input without making sure
   there is something to read from.  This bug is new in 2.31
   timeframe.

 * The data structure used by fsmonitor interface was not properly
   duplicated during an in-core merge, leading to use-after-free etc.

 * "git bisect" reimplemented more in C during 2.30 timeframe did not
   take an annotated tag as a good/bad endpoint well.  This regression
   has been corrected.

 * Fix macros that can silently inject unintended null-statements.

 * CALLOC_ARRAY() macro replaces many uses of xcalloc().

 * Update insn in Makefile comments to run fuzz-all target.

 * Fix a corner case bug in "git mv" on case insensitive systems,
   which was introduced in 2.29 timeframe.

 * We had a code to diagnose and die cleanly when a required
   clean/smudge filter is missing, but an assert before that
   unnecessarily fired, hiding the end-user facing die() message.
   (merge 6fab35f748 mt/cleanly-die-upon-missing-required-filter later to maint).

 * Update C code that sets a few configuration variables when a remote
   is configured so that it spells configuration variable names in the
   canonical camelCase.
   (merge 0f1da600e6 ab/remote-write-config-in-camel-case later to maint).

 * A new configuration variable has been introduced to allow choosing
   which version of the generation number gets used in the
   commit-graph file.
   (merge 702110aac6 ds/commit-graph-generation-config later to maint).

 * Perf test update to work better in secondary worktrees.
   (merge 36e834abc1 jk/perf-in-worktrees later to maint).

 * Updates to memory allocation code around the use of pcre2 library.
   (merge c1760352e0 ab/grep-pcre2-allocfix later to maint).

 * "git -c core.bare=false clone --bare ..." would have segfaulted,
   which has been corrected.
   (merge 75555676ad bc/clone-bare-with-conflicting-config later to maint).

 * When "git checkout" removes a path that does not exist in the
   commit it is checking out, it wasn't careful enough not to follow
   symbolic links, which has been corrected.
   (merge fab78a0c3d mt/checkout-remove-nofollow later to maint).

 * A few option description strings started with capital letters,
   which were corrected.
   (merge 5ee90326dc cc/downcase-opt-help later to maint).

 * Plug or annotate remaining leaks that trigger while running the
   very basic set of tests.
   (merge 68ffe095a2 ah/plugleaks later to maint).

 * The hashwrite() API uses a buffering mechanism to avoid calling
   write(2) too frequently. This logic has been refactored to be
   easier to understand.
   (merge ddaf1f62e3 ds/clarify-hashwrite later to maint).

 * "git cherry-pick/revert" with or without "--[no-]edit" did not spawn
   the editor as expected (e.g. "revert --no-edit" after a conflict
   still asked to edit the message), which has been corrected.
   (merge 39edfd5cbc en/sequencer-edit-upon-conflict-fix later to maint).

 * "git daemon" has been tightened against systems that take backslash
   as directory separator.
   (merge 9a7f1ce8b7 rs/daemon-sanitize-dir-sep later to maint).

 * A NULL-dereference bug has been corrected in an error codepath in
   "git for-each-ref", "git branch --list" etc.
   (merge c685450880 jk/ref-filter-segfault-fix later to maint).

 * Streamline the codepath to fix the UTF-8 encoding issues in the
   argv[] and the prefix on macOS.
   (merge c7d0e61016 tb/precompose-prefix-simplify later to maint).

 * The command-line completion script (in contrib/) had a couple of
   references that would have given a warning under the "-u" (nounset)
   option.
   (merge c5c0548d79 vs/completion-with-set-u later to maint).

 * When "git pack-objects" makes a literal copy of a part of existing
   packfile using the reachability bitmaps, its update to the progress
   meter was broken.
   (merge 8e118e8490 jk/pack-objects-bitmap-progress-fix later to maint).

 * The dependencies for config-list.h and command-list.h were broken
   when the former was split out of the latter, which has been
   corrected.
   (merge 56550ea718 sg/bugreport-fixes later to maint).

 * "git push --quiet --set-upstream" was not quiet when setting the
   upstream branch configuration, which has been corrected.
   (merge f3cce896a8 ow/push-quiet-set-upstream later to maint).

 * The prefetch task in "git maintenance" assumed that "git fetch"
   from any remote would fetch all its local branches, which would
   fetch too much if the user is interested in only a subset of
   branches there.
   (merge 32f67888d8 ds/maintenance-prefetch-fix later to maint).

 * Clarify that pathnames recorded in Git trees are most often (but
   not necessarily) encoded in UTF-8.
   (merge 9364bf465d ab/pathname-encoding-doc later to maint).

 * "git --config-env var=val cmd" weren't accepted (only
   --config-env=var=val was).
   (merge c331551ccf ps/config-env-option-with-separate-value later to maint).

 * When the reachability bitmap is in effect, the "do not lose
   recently created objects and those that are reachable from them"
   safety to protect us from races were disabled by mistake, which has
   been corrected.
   (merge 2ba582ba4c jk/prune-with-bitmap-fix later to maint).

 * Cygwin pathname handling fix.
   (merge bccc37fdc7 ad/cygwin-no-backslashes-in-paths later to maint).

 * "git rebase --[no-]reschedule-failed-exec" did not work well with
   its configuration variable, which has been corrected.
   (merge e5b32bffd1 ab/rebase-no-reschedule-failed-exec later to maint).

 * Portability fix for command line completion script (in contrib/).
   (merge f2acf763e2 si/zsh-complete-comment-fix later to maint).

 * "git repack -A -d" in a partial clone unnecessarily loosened
   objects in promisor pack.

 * "git bisect skip" when custom words are used for new/old did not
   work, which has been corrected.

 * A few variants of informational message "Already up-to-date" has
   been rephrased.
   (merge ad9322da03 js/merge-already-up-to-date-message-reword later to maint).

 * "git submodule update --quiet" did not propagate the quiet option
   down to underlying "git fetch", which has been corrected.
   (merge 62af4bdd42 nc/submodule-update-quiet later to maint).

 * Document that our test can use "local" keyword.
   (merge a84fd3bcc6 jc/test-allows-local later to maint).

 * The word-diff mode has been taught to work better with a word
   regexp that can match an empty string.
   (merge 0324e8fc6b pw/word-diff-zero-width-matches later to maint).

 * "git p4" learned to find branch points more efficiently.
   (merge 6b79818bfb jk/p4-locate-branch-point-optim later to maint).

 * When "git update-ref -d" removes a ref that is packed, it left
   empty directories under $GIT_DIR/refs/ for
   (merge 5f03e5126d wc/packed-ref-removal-cleanup later to maint).

 * "git clean" and "git ls-files -i" had confusion around working on
   or showing ignored paths inside an ignored directory, which has
   been corrected.
   (merge b548f0f156 en/dir-traversal later to maint).

 * The handling of "%(push)" formatting element of "for-each-ref" and
   friends was broken when the same codepath started handling
   "%(push:<what>)", which has been corrected.
   (merge 1e1c4c5eac zh/ref-filter-push-remote-fix later to maint).

 * The bash prompt script (in contrib/) did not work under "set -u".
   (merge 5c0cbdb107 en/prompt-under-set-u later to maint).

 * The "chainlint" feature in the test framework is a handy way to
   catch common mistakes in writing new tests, but tends to get
   expensive.  An knob to selectively disable it has been introduced
   to help running tests that the developer has not modified.
   (merge 2d86a96220 jk/test-chainlint-softer later to maint).

 * The "rev-parse" command did not diagnose the lack of argument to
   "--path-format" option, which was introduced in v2.31 era, which
   has been corrected.
   (merge 99fc555188 wm/rev-parse-path-format-wo-arg later to maint).

 * Other code cleanup, docfix, build fix, etc.
   (merge f451960708 dl/cat-file-doc-cleanup later to maint).
   (merge 12604a8d0c sv/t9801-test-path-is-file-cleanup later to maint).
   (merge ea7e63921c jr/doc-ignore-typofix later to maint).
   (merge 23c781f173 ps/update-ref-trans-hook-doc later to maint).
   (merge 42efa1231a jk/filter-branch-sha256 later to maint).
   (merge 4c8e3dca6e tb/push-simple-uses-branch-merge-config later to maint).
   (merge 6534d436a2 bs/asciidoctor-installation-hints later to maint).
   (merge 47957485b3 ab/read-tree later to maint).
   (merge 2be927f3d1 ab/diff-no-index-tests later to maint).
   (merge 76593c09bb ab/detox-gettext-tests later to maint).
   (merge 28e29ee38b jc/doc-format-patch-clarify later to maint).
   (merge fc12b6fdde fm/user-manual-use-preface later to maint).
   (merge dba94e3a85 cc/test-helper-bloom-usage-fix later to maint).
   (merge 61a7660516 hn/reftable-tables-doc-update later to maint).
   (merge 81ed96a9b2 jt/fetch-pack-request-fix later to maint).
   (merge 151b6c2dd7 jc/doc-do-not-capitalize-clarification later to maint).
   (merge 9160068ac6 js/access-nul-emulation-on-windows later to maint).
   (merge 7a14acdbe6 po/diff-patch-doc later to maint).
   (merge f91371b948 pw/patience-diff-clean-up later to maint).
   (merge 3a7f0908b6 mt/clean-clean later to maint).
   (merge d4e2d15a8b ab/streaming-simplify later to maint).
   (merge 0e59f7ad67 ah/merge-ort-i18n later to maint).
   (merge e6f68f62e0 ls/typofix later to maint).

----------------------------------------------------------------

Changes since v2.31.0 are as follows:

Adam Dinwoodie (1):
      cygwin: disallow backslashes in file names

Alex Henrie (1):
      merge-ort: split "distinct types" message into two translatable messages

Andrey Bienkowski (1):
      doc: clarify the filename encoding in git diff

Andrzej Hunt (24):
      Makefile: update 'make fuzz-all' docs to reflect modern clang
      symbolic-ref: don't leak shortened refname in check_symref()
      reset: free instead of leaking unneeded ref
      clone: free or UNLEAK further pointers when finished
      worktree: fix leak in dwim_branch()
      init: remove git_init_db_config() while fixing leaks
      init-db: silence template_dir leak when converting to absolute path
      fsmonitor: avoid global-buffer-overflow READ when checking trivial response
      parse-options: convert bitfield values to use binary shift
      parse-options: don't leak alias help messages
      transport: also free remote_refs in transport_disconnect()
      merge-ort: only do pointer arithmetic for non-empty lists
      revision: free remainder of old commit list in limit_list
      wt-status: fix multiple small leaks
      ls-files: free max_prefix when done
      bloom: clear each bloom_key after use
      branch: FREE_AND_NULL instead of NULL'ing real_ref
      builtin/bugreport: don't leak prefixed filename
      builtin/check-ignore: clear_pathspec before returning
      builtin/checkout: clear pending objects after diffing
      mailinfo: also free strbuf lists when clearing mailinfo
      builtin/for-each-ref: free filter and UNLEAK sorting.
      builtin/rebase: release git_format_patch_opt too
      builtin/rm: avoid leaking pathspec and seen

Atharva Raykar (1):
      userdiff: add support for Scheme

Bagas Sanjaya (1):
      INSTALL: note on using Asciidoctor to build doc

Bruno Albuquerque (1):
      object-info: support for retrieving object info

Charvi Mendiratta (23):
      sequencer: pass todo_item to do_pick_commit()
      sequencer: use const variable for commit message comments
      rebase -i: add fixup [-C | -c] command
      t3437: test script for fixup [-C|-c] options in interactive rebase
      rebase -i: teach --autosquash to work with amend!
      doc/git-rebase: add documentation for fixup [-C|-c] options
      sequencer: fixup the datatype of the 'flag' argument
      sequencer: rename a few functions
      rebase -i: clarify and fix 'fixup -c' rebase-todo help
      t/lib-rebase: update the documentation of FAKE_LINES
      t/t3437: fixup here-docs in the 'setup' test
      t/t3437: remove the dependency of 'expected-message' file from tests
      t/t3437: check the author date of fixed up commit
      t/t3437: simplify and document the test helpers
      t/t3437: use named commits in the tests
      t/t3437: fixup the test 'multiple fixup -c opens editor once'
      doc/rebase -i: fix typo in the documentation of 'fixup' command
      sequencer: export and rename subject_length()
      commit: add amend suboption to --fixup to create amend! commit
      commit: add a reword suboption to --fixup
      t7500: add tests for --fixup=[amend|reword] options
      t3437: use --fixup with options to create amend! commit
      doc/git-commit: add documentation for fixup=[amend|reword] options

Chinmoy Chakraborty (1):
      column, range-diff: downcase option description

Christian Couder (1):
      test-bloom: fix missing 'bloom' from usage string

Christopher Schenk (1):
      remote-curl: fall back to basic auth if Negotiate fails

Dennis Ameling (2):
      cmake(install): fix double .exe suffixes
      cmake(install): include vcpkg dlls

Denton Liu (14):
      git-cat-file.txt: monospace args, placeholders and filenames
      git-cat-file.txt: remove references to "sha1"
      stash show: teach --include-untracked and --only-untracked
      stash show: learn stash.showIncludeUntracked
      git-completion.bash: pass $__git_subcommand_idx from __git_main()
      git-completion.bash: extract from else in _git_stash()
      git-completion.bash: use __gitcomp_builtin() in _git_stash()
      git-completion.bash: separate some commands onto their own line
      git-completion.bash: rename to $__git_cmd_idx
      git-completion.bash: use $__git_cmd_idx in more places
      git-completion.bash: consolidate cases in _git_stash()
      t3905: correct test title
      stash show: fix segfault with --{include,only}-untracked
      stash show: use stash.showIncludeUntracked even when diff options given

Derrick Stolee (56):
      commit-graph: create local repository pointer
      commit-graph: use config to specify generation type
      csum-file: make hashwrite() more readable
      sparse-index: design doc and format update
      t/perf: add performance test for sparse operations
      t1092: clean up script quoting
      sparse-index: add guard to ensure full index
      sparse-index: implement ensure_full_index()
      t1092: compare sparse-checkout to sparse-index
      test-read-cache: print cache entries with --table
      test-tool: don't force full index
      unpack-trees: ensure full index
      sparse-checkout: hold pattern list in index
      sparse-index: add 'sdir' index extension
      sparse-index: convert from full to sparse
      submodule: sparse-index should not collapse links
      unpack-trees: allow sparse directories
      sparse-index: check index conversion happens
      sparse-index: add index.sparse config option
      sparse-checkout: toggle sparse index from builtin
      sparse-checkout: disable sparse-index
      cache-tree: integrate with sparse directory entries
      sparse-index: loose integration with cache_tree_verify()
      p2000: add sparse-index repos
      maintenance: simplify prefetch logic
      sparse-index: API protection strategy
      *: remove 'const' qualifier for struct index_state
      read-cache: expand on query into sparse-directory entry
      cache: move ensure_full_index() to cache.h
      add: ensure full index
      checkout-index: ensure full index
      checkout: ensure full index
      commit: ensure full index
      difftool: ensure full index
      fsck: ensure full index
      grep: ensure full index
      ls-files: ensure full index
      merge-index: ensure full index
      rm: ensure full index
      stash: ensure full index
      update-index: ensure full index
      dir: ensure full index
      entry: ensure full index
      merge-recursive: ensure full index
      pathspec: ensure full index
      read-cache: ensure full index
      resolve-undo: ensure full index
      revision: ensure full index
      name-hash: don't add directories to name_hash
      sparse-index: expand_to_path()
      name-hash: use expand_to_path()
      fetch: add --prefetch option
      maintenance: use 'git fetch --prefetch'
      maintenance: respect remote.*.skipFetchAll
      dir: update stale description of treat_directory()
      sparse-index: fix uninitialized jump

Elijah Newren (49):
      diffcore-rename: use directory rename guided basename comparisons
      diffcore-rename: provide basic implementation of idx_possible_rename()
      diffcore-rename: add a mapping of destination names to their indices
      Move computation of dir_rename_count from merge-ort to diffcore-rename
      diffcore-rename: add function for clearing dir_rename_count
      diffcore-rename: move dir_rename_counts into dir_rename_info struct
      diffcore-rename: extend cleanup_dir_rename_info()
      diffcore-rename: compute dir_rename_counts in stages
      diffcore-rename: limit dir_rename_counts computation to relevant dirs
      diffcore-rename: compute dir_rename_guess from dir_rename_counts
      diffcore-rename: enable filtering possible rename sources
      merge-ort: precompute subset of sources for which we need rename detection
      merge-ort: add data structures for an alternate tree traversal
      merge-ort: introduce wrappers for alternate tree traversal
      merge-ort: precompute whether directory rename detection is needed
      merge-ort: use relevant_sources to filter possible rename sources
      merge-ort: skip rename detection entirely if possible
      diffcore-rename: avoid doing basename comparisons for irrelevant sources
      diffcore-rename: take advantage of "majority rules" to skip more renames
      merge-ort, diffcore-rename: tweak dirs_removed and relevant_source type
      merge-ort: record the reason that we want a rename for a directory
      diffcore-rename: only compute dir_rename_count for relevant directories
      diffcore-rename: check if we have enough renames for directories early on
      diffcore-rename: add computation of number of unknown renames
      merge-ort: record the reason that we want a rename for a file
      diffcore-rename: determine which relevant_sources are no longer relevant
      merge-ort: use STABLE_QSORT instead of QSORT where required
      merge-ort: add a special minimal index just for renormalization
      merge-ort: have ll_merge() use a special attr_index for renormalization
      merge-ort: let renormalization change modify/delete into clean delete
      merge-ort: support subtree shifting
      t6428: new test for SKIP_WORKTREE handling and conflicts
      merge-ort: implement CE_SKIP_WORKTREE handling with conflicted entries
      t: mark several submodule merging tests as fixed under merge-ort
      merge-ort: write $GIT_DIR/AUTO_MERGE whenever we hit a conflict
      merge-recursive: add a bunch of FIXME comments documenting known bugs
      Revert "merge-ort: ignore the directory rename split conflict for now"
      t6423: mark remaining expected failure under merge-ort as such
      Add testing with merge-ort merge strategy
      sequencer: fix edit handling for cherry-pick and revert messages
      dir: convert trace calls to trace2 equivalents
      dir: report number of visited directories and paths with trace2
      ls-files: error out on -i unless -o or -c are specified
      t7300: add testcase showing unnecessary traversal into ignored directory
      t3001, t7300: add testcase showcasing missed directory traversal
      dir: avoid unnecessary traversal into ignored directory
      dir: traverse into untracked directories if they may have ignored subfiles
      dir: introduce readdir_skip_dot_and_dotdot() helper
      git-prompt: work under set -u

Eric Sunshine (1):
      merge(s): apply consistent punctuation to "up to date" messages

Eric Wong (1):
      remote-curl: fix clone on sha256 repos

Firmin Martin (1):
      user-manual.txt: assign preface an id and a title

Georgios Kontaxis (1):
      gitweb: add "e-mail privacy" feature to redact e-mail addresses

Han Xin (1):
      pack-objects: fix comment of reused_chunk.difference

Han-Wen Nienhuys (3):
      reftable: document an alternate cleanup method on Windows
      refs: print errno for read_raw_ref if GIT_TRACE_REFS is set
      refs/debug: trace into reflog expiry too

Jeff Hostetler (14):
      pkt-line: eliminate the need for static buffer in packet_write_gently()
      simple-ipc: design documentation for new IPC mechanism
      simple-ipc: add win32 implementation
      unix-socket: eliminate static unix_stream_socket() helper function
      unix-socket: add backlog size option to unix_stream_listen()
      unix-socket: disallow chdir() when creating unix domain sockets
      unix-stream-server: create unix domain socket under lock
      convert: make convert_attrs() and convert structs public
      convert: add [async_]convert_to_working_tree_ca() variants
      convert: add get_stream_filter_ca() variant
      convert: add classification for conv_attrs struct
      simple-ipc: add Unix domain socket implementation
      t0052: add simple-ipc tests and t/helper/test-simple-ipc tool
      simple-ipc: correct ifdefs when NO_PTHREADS is defined

Jeff King (43):
      add open_nofollow() helper
      attr: convert "macro_ok" into a flags field
      exclude: add flags parameter to add_patterns()
      attr: do not respect symlinks for in-tree .gitattributes
      exclude: do not respect symlinks for in-tree .gitignore
      mailmap: do not respect symlinks for in-tree .mailmap
      p5303: add missing &&-chains
      p5303: measure time to repack with keep
      builtin/pack-objects.c: rewrite honor-pack-keep logic
      packfile: add kept-pack cache for find_kept_pack_entry()
      t/perf: handle worktrees as test repos
      t/perf: avoid copying worktree files from test repo
      t7003: test ref rewriting explicitly
      filter-branch: drop multiple-ancestor warning
      filter-branch: drop $_x40 glob
      bisect: peel annotated tags to commits
      t: annotate !PTHREADS tests with !FAIL_PREREQS
      ref-filter: fix NULL check for parse object failure
      midx.c: improve cache locality in midx_pack_order_cmp()
      pack-objects: update "nr_seen" progress based on pack-reused count
      is_promisor_object(): free tree buffer after parsing
      lookup_unknown_object(): take a repository argument
      revision: avoid parsing with --exclude-promisor-objects
      pack-bitmap: clean up include_check after use
      prune: save reachable-from-recent objects with bitmaps
      t5300: modernize basic tests
      t5300: check that we produced expected number of deltas
      pack-objects: clamp negative window size to 0
      t5316: check behavior of pack-objects --depth=0
      pack-objects: clamp negative depth to 0
      docs/format-patch: mention handling of merges
      t7415: remove out-dated comment about translation
      fsck_tree(): fix shadowed variable
      fsck_tree(): wrap some long lines
      t7415: rename to expand scope
      t7450: test verify_path() handling of gitmodules
      t7450: test .gitmodules symlink matching against obscured names
      t0060: test ntfs/hfs-obscured dotfiles
      fsck: warn about symlinked dotfiles we'll open with O_NOFOLLOW
      docs: document symlink restrictions for dot-files
      t: avoid sed-based chain-linting in some expensive cases
      t5551: test http interaction with credential helpers
      Revert "remote-curl: fall back to basic auth if Negotiate fails"

Jerry Zhang (3):
      git-apply: try threeway first when "--3way" is used
      git-apply: allow simultaneous --cached and --3way options
      apply: adjust messages to account for --3way changes

Joachim Kuebart (2):
      git-p4: ensure complex branches are cloned correctly
      git-p4: speed up search for branch parent

Johannes Schindelin (10):
      pkt-line: do not issue flush packets in write_packetized_*()
      pkt-line: add PACKET_READ_GENTLE_ON_READ_ERROR option
      pkt-line: add options argument to read_packetized_to_strbuf()
      fsmonitor: fix memory corruption in some corner cases
      fsmonitor: do not forget to release the token in `discard_index()`
      SECURITY: describe how to report vulnerabilities
      Document how we do embargoed releases
      cmake: support SKIP_DASHED_BUILT_INS
      cmake: add a preparatory work-around to accommodate `vcpkg`
      msvc: avoid calling `access("NUL", flags)`

John Szakmeister (2):
      http: store credential when PKI auth is used
      http: drop the check for an empty proxy password before approving

Jonathan Tan (8):
      t5606: run clone branch name test with protocol v2
      fetch-pack: buffer object-format with other args
      fetch-pack: refactor process_acks()
      fetch-pack: refactor add_haves()
      fetch-pack: refactor command and capability write
      fetch: teach independent negotiation (no packfile)
      send-pack: support push negotiation
      t5601: mark protocol v2-only test

Josh Soref (1):
      merge: fix swapped "up to date" message components

Julien Richard (1):
      doc: .gitignore documentation typofix

Junio C Hamano (27):
      builtin/repack.c: reword comment around pack-objects flags
      xcalloc: use CALLOC_ARRAY() when applicable
      cocci: allow xcalloc(1, size)
      The first batch in 2.32 cycle
      The second batch
      format-patch: give an overview of what a "patch" message is
      The third patch
      Git 2.31.1
      The fourth batch
      The fifth batch
      The sixth batch
      The seventh batch
      The eighth batch
      The ninth batch
      doc: clarify "do not capitalize the first word" rule
      The tenth batch
      The eleventh (aka "ort") batch
      The twelfth batch
      The thirteenth batch
      CodingGuidelines: explicitly allow "local" for test scripts
      The fourteenth batch
      The fifteenth batch
      The sixteenth batch
      The seventeenth batch
      Git 2.32-rc0
      A handful more topics before -rc1
      Git 2.32-rc1

Kyle Meyer (1):
      config.txt: add missing period

Li Linchao (1):
      builtin/clone.c: add --reject-shallow option

Louis Sautier (1):
      pretty: fix a typo in the documentation for %(trailers)

Luke Shumaker (30):
      .gitignore: ignore 'git-subtree' as a build artifact
      subtree: t7900: update for having the default branch name be 'main'
      subtree: t7900: use test-lib.sh's test_count
      subtree: t7900: use consistent formatting
      subtree: t7900: comment subtree_test_create_repo
      subtree: t7900: use 'test' for string equality
      subtree: t7900: delete some dead code
      subtree: t7900: fix 'verify one file change per commit'
      subtree: t7900: rename last_commit_message to last_commit_subject
      subtree: t7900: add a test for the -h flag
      subtree: t7900: add porcelain tests for 'pull' and 'push'
      subtree: don't have loose code outside of a function
      subtree: more consistent error propagation
      subtree: drop support for git < 1.7
      subtree: use `git merge-base --is-ancestor`
      subtree: use git-sh-setup's `say`
      subtree: use more explicit variable names for cmdline args
      subtree: use "$*" instead of "$@" as appropriate
      subtree: don't fuss with PATH
      subtree: use "^{commit}" instead of "^0"
      subtree: parse revs in individual cmd_ functions
      subtree: remove duplicate check
      subtree: add comments and sanity checks
      subtree: don't let debug and progress output clash
      subtree: have $indent actually affect indentation
      subtree: give the docs a once-over
      subtree: allow --squash to be used with --rejoin
      subtree: allow 'split' flags to be passed to 'push'
      subtree: push: allow specifying a local rev other than HEAD
      subtree: be stricter about validating flags

Lénaïc Huard (1):
      maintenance: fix two memory leaks

Martin Ågren (2):
      git-repack.txt: remove spurious ")"
      pretty-formats.txt: add missing space

Matheus Tavares (30):
      convert: fail gracefully upon missing clean cmd on required filter
      symlinks: update comment on threaded_check_leading_path()
      checkout: don't follow symlinks when removing entries
      entry: extract a header file for entry.c functions
      entry: make fstat_output() and read_blob_entry() public
      entry: extract update_ce_after_write() from write_entry()
      entry: move conv_attrs lookup up to checkout_entry()
      entry: add checkout_entry_ca() taking preloaded conv_attrs
      add: include magic part of pathspec on --refresh error
      t3705: add tests for `git add` in sparse checkouts
      add: make --chmod and --renormalize honor sparse checkouts
      pathspec: allow to ignore SKIP_WORKTREE entries on index matching
      refresh_index(): add flag to ignore SKIP_WORKTREE entries
      add: warn when asked to update SKIP_WORKTREE entries
      rm: honor sparse checkout patterns
      pkt-line: do not report packet write errors twice
      unpack-trees: add basic support for parallel checkout
      parallel-checkout: make it truly parallel
      parallel-checkout: add configuration options
      parallel-checkout: support progress displaying
      parallel-checkout: add design documentation
      make_transient_cache_entry(): optionally alloc from mem_pool
      builtin/checkout.c: complete parallel checkout support
      checkout-index: add parallel checkout support
      parallel-checkout: add tests for basic operations
      parallel-checkout: add tests related to path collisions
      t0028: extract encoding helpers to lib-encoding.sh
      parallel-checkout: add tests related to .gitattributes
      ci: run test round with parallel-checkout enabled
      clean: remove unnecessary variable

Nicholas Clark (1):
      submodule update: silence underlying fetch with "--quiet"

Nipunn Koorapati (3):
      fsmonitor: skip lstat deletion check during git diff-index
      fsmonitor: add assertion that fsmonitor is valid to check_removed
      fsmonitor: add perf test for git diff HEAD

Patrick Steinhardt (17):
      githooks.txt: replace mentions of SHA-1 specific properties
      githooks.txt: clarify documentation on reference-transaction hook
      pack-bitmap: avoid traversal of objects referenced by uninteresting tag
      uploadpack.txt: document implication of `uploadpackfilter.allow`
      revision: mark commit parents as NOT_USER_GIVEN
      list-objects: move tag processing into its own function
      list-objects: support filtering by tag and commit
      list-objects: implement object type filter
      pack-bitmap: implement object type filter
      pack-bitmap: implement combined filter
      rev-list: allow filtering of provided items
      config: rename `git_etc_config()`
      config: unify code paths to get global config paths
      config: allow overriding of global and system configuration
      t1300: fix unset of GIT_CONFIG_NOSYSTEM leaking into subsequent tests
      git.txt: fix synopsis of `--config-env` missing the equals sign
      git: support separate arg for `--config-env`'s value

Peter Oliver (1):
      doc: point to diff attribute in patch format docs

Phillip Wood (6):
      rebase -i: only write fixup-message when it's needed
      sequencer: factor out code to append squash message
      rebase -i: comment out squash!/fixup! subjects from squash message
      word diff: handle zero length matches
      patience diff: remove unnecessary string comparisons
      patience diff: remove unused variable

Rafael Silva (1):
      repack: avoid loosening promisor objects in partial clones

Ramkumar Ramachandra (1):
      Add entry for Ramkumar Ramachandra

Ramsay Jones (1):
      bisect--helper: use BISECT_TERMS in 'bisect skip' command

René Scharfe (12):
      pretty: add %(describe)
      pretty: add merge and exclude options to %(describe)
      t4205: assert %(describe) test coverage
      pretty: document multiple %(describe) being inconsistent
      fix xcalloc() argument order
      archive: expand only a single %(describe) per archive
      git-compat-util.h: drop trailing semicolon from macro definition
      use CALLOC_ARRAY
      vcs-svn: remove header files as well
      block-sha1: drop trailing semicolon from macro definition
      mem-pool: drop trailing semicolon from macro definition
      daemon: sanitize all directory separators

Robert Foss (1):
      git-send-email: Respect core.hooksPath setting

SZEDER Gábor (1):
      Makefile: add missing dependencies of 'config-list.h'

Sardorbek Imomaliev (1):
      work around zsh comment in __git_complete_worktree_paths

Sergey Organov (5):
      diff-merges: introduce --diff-merges=on
      diff-merges: refactor set_diff_merges()
      diff-merges: adapt -m to enable default diff format
      diff-merges: introduce log.diffMerges config variable
      doc/diff-options: document new --diff-merges features

Shubham Verma (1):
      t9801: replace test -f with test_path_is_file

Taylor Blau (28):
      packfile: introduce 'find_kept_pack_entry()'
      revision: learn '--no-kept-objects'
      builtin/pack-objects.c: add '--stdin-packs' option
      builtin/repack.c: add '--geometric' option
      builtin/repack.c: do not repack single packs with --geometric
      t7703: test --geometric repack with loose objects
      builtin/repack.c: assign pack split later
      builtin/repack.c: be more conservative with unsigned overflows
      Documentation/git-push.txt: correct configuration typo
      builtin/pack-objects.c: ignore missing links with --stdin-packs
      builtin/multi-pack-index.c: inline 'flags' with options
      builtin/multi-pack-index.c: don't handle 'progress' separately
      builtin/multi-pack-index.c: define common usage with a macro
      builtin/multi-pack-index.c: split sub-commands
      builtin/multi-pack-index.c: don't enter bogus cmd_mode
      builtin/multi-pack-index.c: display usage on unrecognized command
      t/helper/test-read-midx.c: add '--show-objects'
      pack-bitmap: add 'test_bitmap_commits()' helper
      t/helper/test-bitmap.c: initial commit
      builtin/pack-objects.c: respect 'pack.preferBitmapTips'
      midx: allow marking a pack as preferred
      midx: don't free midx_name early
      midx: keep track of the checksum
      midx: make some functions non-static
      Documentation/technical: describe multi-pack reverse indexes
      pack-revindex: read multi-pack reverse indexes
      pack-write.c: extract 'write_rev_file_order'
      pack-revindex: write multi-pack reverse indexes

Todd Zullinger (1):
      t7500: remove non-existant C_LOCALE_OUTPUT prereq

Torsten Bögershausen (3):
      git mv foo FOO ; git mv foo bar gave an assert
      precompose_utf8: make precompose_string_if_needed() public
      macOS: precompose startup_info->prefix

Ville Skyttä (2):
      completion: audit and guard $GIT_* against unset use
      completion: avoid aliased command lookup error in nounset mode

Will Chandler (1):
      refs: cleanup directories when deleting packed ref

Wolfgang Müller (1):
      rev-parse: fix segfault with missing --path-format argument

ZheNing Hu (8):
      commit: add --trailer option
      format-patch: allow a non-integral version numbers
      ref-filter: get rid of show_ref_array_item
      ref-filter: reuse output buffer
      pretty: provide human date format
      docs: correct descript of trailer.<token>.command
      trailer: add new .cmd config option
      ref-filter: fix read invalid union member bug

brian m. carlson (14):
      builtin/init-db: handle bare clones when core.bare set to false
      hash: add an algo member to struct object_id
      Always use oidread to read into struct object_id
      http-push: set algorithm when reading object ID
      hash: add a function to finalize object IDs
      Use the final_oid_fn to finalize hashing of object IDs
      builtin/pack-redundant: avoid casting buffers to struct object_id
      hash: set, copy, and use algo field in struct object_id
      hash: provide per-algorithm null OIDs
      builtin/show-index: set the algorithm for object IDs
      commit-graph: don't store file hashes as struct object_id
      builtin/pack-objects: avoid using struct object_id for pack hash
      hex: default to the_hash_algo on zero algorithm value
      hex: print objects using the hash algorithm member

Ævar Arnfjörð Bjarmason (92):
      grep/pcre2: drop needless assignment + assert() on opt->pcre2
      grep/pcre2: drop needless assignment to NULL
      grep/pcre2: correct reference to grep_init() in comment
      grep/pcre2: prepare to add debugging to pcre2_malloc()
      grep/pcre2: add GREP_PCRE2_DEBUG_MALLOC debug mode
      grep/pcre2: use compile-time PCREv2 version test
      grep/pcre2: use pcre2_maketables_free() function
      grep/pcre2: actually make pcre2 use custom allocator
      grep/pcre2: move back to thread-only PCREv2 structures
      grep/pcre2: move definitions of pcre2_{malloc,free}
      Makefile: guard against TEST_OBJS in the environment
      Makefile: split up long OBJECTS line
      Makefile: sort OBJECTS assignment for subsequent change
      Makefile: split OBJECTS into OBJECTS and GIT_OBJS
      Makefile: add {program,xdiff,test,git,fuzz}-objs & objects targets
      remote: add camel-cased *.tagOpt key, like clone
      remote: write camel-cased *.pushRemote on rename
      fsck.c: refactor and rename common config callback
      show tests: add test for "git show <tree>"
      ls-files tests: add meaningful --with-tree tests
      tree.c API: move read_tree() into builtin/ls-files.c
      ls-files: don't needlessly pass around stage variable
      ls-files: refactor away read_tree()
      archive: stop passing "stage" through read_tree_recursive()
      tree.h API: expose read_tree_1() as read_tree_at()
      tree.h API: simplify read_tree_recursive() signature
      diff --no-index tests: add test for --exit-code
      diff --no-index tests: test mode normalization
      rebase: remove transitory rebase.useBuiltin setting & env
      mktag tests: fix broken "&&" chain
      fsck.h: use designed initializers for FSCK_OPTIONS_{DEFAULT,STRICT}
      fsck.h: use "enum object_type" instead of "int"
      fsck.c: rename variables in fsck_set_msg_type() for less confusion
      fsck.c: remove (mostly) redundant append_msg_id() function
      fsck.c: rename remaining fsck_msg_id "id" to "msg_id"
      fsck.c: refactor fsck_msg_type() to limit scope of "int msg_type"
      fsck.h: move FSCK_{FATAL,INFO,ERROR,WARN,IGNORE} into an enum
      fsck.h: re-order and re-assign "enum fsck_msg_type"
      fsck.c: call parse_msg_type() early in fsck_set_msg_type()
      fsck.c: undefine temporary STR macro after use
      fsck.c: give "FOREACH_MSG_ID" a more specific name
      fsck.[ch]: move FOREACH_FSCK_MSG_ID & fsck_msg_id from *.c to *.h
      fsck.c: pass along the fsck_msg_id in the fsck_error callback
      fsck.c: add an fsck_set_msg_type() API that takes enums
      fsck.c: move gitmodules_{found,done} into fsck_options
      fetch-pack: don't needlessly copy fsck_options
      fetch-pack: use file-scope static struct for fsck_options
      fetch-pack: use new fsck API to printing dangling submodules
      Makefile: add QUIET_GEN to "tags" and "TAGS" targets
      git-send-email: replace "map" in void context with "for"
      git-send-email: test full --validate output
      git-send-email: refactor duplicate $? checks into a function
      git-send-email: improve --validate error output
      bash completion: complete CHERRY_PICK_HEAD
      config.c: remove last remnant of GIT_TEST_GETTEXT_POISON
      userdiff style: re-order drivers in alphabetical order
      userdiff style: declare patterns with consistent style
      userdiff style: normalize pascal regex declaration
      userdiff: add and use for_each_userdiff_driver()
      userdiff tests: explicitly test "default" pattern
      userdiff tests: list builtin drivers via test-tool
      userdiff: remove support for "broken" tests
      blame tests: don't rely on t/t4018/ directory
      blame tests: simplify userdiff driver test
      rebase tests: camel-case rebase.rescheduleFailedExec consistently
      rebase: don't override --no-reschedule-failed-exec with config
      Documentation/Makefile: make $(wildcard howto/*.txt) a var
      Documentation/Makefile: make doc.dep dependencies a variable again
      doc lint: Perl "strict" and "warnings" in lint-gitlink.perl
      doc lint: fix bugs in, simplify and improve lint script
      doc lint: lint and fix missing "GIT" end sections
      doc lint: lint relative section order
      docs: fix linting issues due to incorrect relative section order
      svn tests: remove legacy re-setup from init-clone test
      svn tests: refactor away a "set -e" in test body
      tests: remove all uses of test_i18cmp
      usage.c: don't copy/paste the same comment three times
      api docs: document BUG() in api-error-handling.txt
      api docs: document that BUG() emits a trace2 error event
      pretty tests: simplify %aI/%cI date format test
      pretty tests: give --date/format tests a better description
      sparse-index.c: remove set_index_sparse_config()
      streaming.c: avoid forward declarations
      streaming.c: remove enum/function/vtbl indirection
      streaming.c: remove {open,close,read}_method_decl() macros
      streaming.c: stop passing around "object_info *" to open()
      streaming.c: move {open,close,read} from vtable to "struct git_istream"
      Makefile: don't re-define PERL_DEFINES
      Makefile: regenerate perl/build/* if GIT-PERL-DEFINES changes
      Makefile: regenerate *.pm on NO_PERL_CPAN_FALLBACKS change
      perl: use mock i18n functions under NO_GETTEXT=Y
      Makefile: make PERL_DEFINES recursively expanded

Øystein Walle (2):
      transport: respect verbosity when setting upstream
      add: die if both --dry-run and --interactive are given

Đoàn Trần Công Danh (6):
      mailinfo: load default metainfo_charset lazily
      mailinfo: stop parsing options manually
      mailinfo: warn if CRLF found in decoded base64/QP email
      mailinfo: allow squelching quoted CRLF warning
      mailinfo: allow stripping quoted CR without warning
      am: learn to process quoted lines that ends with CRLF


^ permalink raw reply	[relevance 3%]

* [ANNOUNCE] Git v2.32.0-rc2
@ 2021-05-28  6:13  3% Junio C Hamano
  0 siblings, 0 replies; 200+ results
From: Junio C Hamano @ 2021-05-28  6:13 UTC (permalink / raw)
  To: git; +Cc: Linux Kernel, git-packagers, lwn

A release candidate Git v2.32.0-rc2 is now available for testing at
the usual places.  It is comprised of 586 non-merge commits since
v2.31.0, contributed by 83 people, 31 of which are new faces [*].

There have been a handful of regression found since v2.32.0-rc0 was
tagged, and this has fixes to them.  https://tinyurl.com/gitCal says
that we plan to have another release candidate mid next week, but we
may go straight to the final 2.32 instead.  Let's see how this one
fares before deciding.

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.32.0-rc2' tag and the 'master' branch that the tag points at:

  url = https://git.kernel.org/pub/scm/git/git
  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.31.0 are as follows.
Welcome to the Git development community!

  Adam Sharafeddine, Andrey Bienkowski, Atharva Raykar, Bruno
  Albuquerque, Chinmoy Chakraborty, Christopher Schenk, Dan
  Moseley, David Emett, Dmitry Torilov, Fabien Terrani, Firmin
  Martin, Georgios Kontaxis, Jason Gore, Jerry Zhang, Joachim
  Kuebart, Joseph Vusich, Josh Soref, Julien Richard, Li Linchao,
  Louis Sautier, Luke Shumaker, Nicholas Clark, Peter Oliver,
  Renato Botelho, Robert Foss, RyotaK, Sardorbek Imomaliev,
  Tom Saeger, Will Chandler, Wolfgang Müller, and Yiyuan guo.

Returning contributors who helped this release are as follows.
Thanks for your continued support.

  Adam Dinwoodie, Ævar Arnfjörð Bjarmason, Alex Henrie,
  Andrzej Hunt, Bagas Sanjaya, Ben Humphreys, brian m. carlson,
  Charvi Mendiratta, Christian Couder, Dennis Ameling, Denton Liu,
  Derrick Stolee, Đoàn Trần Công Danh, Elijah Newren, Eric
  Sunshine, Eric Wong, Han-Wen Nienhuys, Han Xin, Jeff Hostetler,
  Jeff King, Johannes Schindelin, Johannes Sixt, John Szakmeister,
  Jonathan Nieder, Jonathan Tan, Junio C Hamano, Kyle Meyer,
  Lénaïc Huard, Luke Diamand, Marc Branchaud, Martin Ågren,
  Matheus Tavares, Nguyễn Thái Ngọc Duy, Nipunn Koorapati,
  Øystein Walle, Patrick Steinhardt, Phillip Wood, Rafael Silva,
  Ramkumar Ramachandra, Ramsay Jones, Randall S. Becker, René
  Scharfe, Sergey Organov, Shubham Verma, Son Luong Ngoc, SZEDER
  Gábor, Taylor Blau, Todd Zullinger, Torsten Bögershausen,
  Trygve Aaberge, Ville Skyttä, and ZheNing Hu.

[*] We are counting not just the authorship contribution but
    issue reporting, testing and reviewing that are recorded
    in the commit trailers.

----------------------------------------------------------------

Git 2.32 Release Notes (draft)
==============================

Backward compatibility notes
----------------------------

 * ".gitattributes", ".gitignore", and ".mailmap" files that are
   symbolic links are ignored.

 * "git apply --3way" used to first attempt a straight application,
   and only fell back to the 3-way merge algorithm when the stright
   application failed.  Starting with this version, the command will
   first try the 3-way merge algorithm and only when it fails (either
   resulting with conflict or the base versions of blobs are missing),
   falls back to the usual patch application.


Updates since v2.31
-------------------

UI, Workflows & Features

 * It does not make sense to make ".gitattributes", ".gitignore" and
   ".mailmap" symlinks, as they are supposed to be usable from the
   object store (think: bare repositories where HEAD:.mailmap etc. are
   used).  When these files are symbolic links, we used to read the
   contents of the files pointed by them by mistake, which has been
   corrected.

 * "git stash show" learned to optionally show untracked part of the
   stash.

 * "git log --format='...'" learned "%(describe)" placeholder.

 * "git repack" so far has been only capable of repacking everything
   under the sun into a single pack (or split by size).  A cleverer
   strategy to reduce the cost of repacking a repository has been
   introduced.

 * The http codepath learned to let the credential layer to cache the
   password used to unlock a certificate that has successfully been
   used.

 * "git commit --fixup=<commit>", which was to tweak the changes made
   to the contents while keeping the original log message intact,
   learned "--fixup=(amend|reword):<commit>", that can be used to
   tweak both the message and the contents, and only the message,
   respectively.

 * "git send-email" learned to honor the core.hooksPath configuration.

 * "git format-patch -v<n>" learned to allow a reroll count that is
   not an integer.

 * "git commit" learned "--trailer <key>[=<value>]" option; together
   with the interpret-trailers command, this will make it easier to
   support custom trailers.

 * "git clone --reject-shallow" option fails the clone as soon as we
   notice that we are cloning from a shallow repository.

 * A configuration variable has been added to force tips of certain
   refs to be given a reachability bitmap.

 * "gitweb" learned "e-mail privacy" feature to redact strings that
   look like e-mail addresses on various pages.

 * "git apply --3way" has always been "to fall back to 3-way merge
   only when straight application fails". Swap the order of falling
   back so that 3-way is always attempted first (only when the option
   is given, of course) and then straight patch application is used as
   a fallback when it fails.

 * "git apply" now takes "--3way" and "--cached" at the same time, and
   work and record results only in the index.

 * The command line completion (in contrib/) has learned that
   CHERRY_PICK_HEAD is a possible pseudo-ref.

 * Userdiff patterns for "Scheme" has been added.

 * "git log" learned "--diff-merges=<style>" option, with an
   associated configuration variable log.diffMerges.

 * "git log --format=..." placeholders learned %ah/%ch placeholders to
   request the --date=human output.

 * Replace GIT_CONFIG_NOSYSTEM mechanism to decline from reading the
   system-wide configuration file with GIT_CONFIG_SYSTEM that lets
   users specify from which file to read the system-wide configuration
   (setting it to an empty file would essentially be the same as
   setting NOSYSTEM), and introduce GIT_CONFIG_GLOBAL to override the
   per-user configuration in $HOME/.gitconfig.

 * "git add" and "git rm" learned not to touch those paths that are
   outside of sparse checkout.

 * "git rev-list" learns the "--filter=object:type=<type>" option,
   which can be used to exclude objects of the given kind from the
   packfile generated by pack-objects.

 * The command line completion (in contrib/) for "git stash" has been
   updated.

 * "git subtree" updates.

 * It is now documented that "format-patch" skips merges.

 * Options to "git pack-objects" that take numeric values like
   --window and --depth should not accept negative values; the input
   validation has been tightened.

 * The way the command line specified by the trailer.<token>.command
   configuration variable receives the end-user supplied value was
   both error prone and misleading.  An alternative to achieve the
   same goal in a safer and more intuitive way has been added, as
   the trailer.<token>.cmd configuration variable, to replace it.

 * "git add -i --dry-run" does not dry-run, which was surprising.  The
   combination of options has taught to error out.

 * "git push" learns to discover common ancestor with the receiving
   end over protocol v2.  This will hopefully make "git push" as
   efficient as "git fetch" in avoiding objects from getting
   transferred unnecessarily.

 * "git mailinfo" (hence "git am") learned the "--quoted-cr" option to
   control how lines ending with CRLF wrapped in base64 or qp are
   handled.


Performance, Internal Implementation, Development Support etc.

 * Rename detection rework continues.

 * GIT_TEST_FAIL_PREREQS is a mechanism to skip test pieces with
   prerequisites to catch broken tests that depend on the side effects
   of optional pieces, but did not work at all when negative
   prerequisites were involved.
   (merge 27d578d904 jk/fail-prereq-testfix later to maint).

 * "git diff-index" codepath has been taught to trust fsmonitor status
   to reduce number of lstat() calls.
   (merge 7e5aa13d2c nk/diff-index-fsmonitor later to maint).

 * Reorganize Makefile to allow building git.o and other essential
   objects without extra stuff needed only for testing.

 * Preparatory API changes for parallel checkout.

 * A simple IPC interface gets introduced to build services like
   fsmonitor on top.

 * Fsck API clean-up.

 * SECURITY.md that is facing individual contributors and end users
   has been introduced.  Also a procedure to follow when preparing
   embargoed releases has been spelled out.
   (merge 09420b7648 js/security-md later to maint).

 * Optimize "rev-list --use-bitmap-index --objects" corner case that
   uses negative tags as the stopping points.

 * CMake update for vsbuild.

 * An on-disk reverse-index to map the in-pack location of an object
   back to its object name across multiple packfiles is introduced.

 * Generate [ec]tags under $(QUIET_GEN).

 * Clean-up codepaths that implements "git send-email --validate"
   option and improves the message from it.

 * The last remnant of gettext-poison has been removed.

 * The test framework has been taught to optionally turn the default
   merge strategy to "ort" throughout the system where we use
   three-way merges internally, like cherry-pick, rebase etc.,
   primarily to enhance its test coverage (the strategy has been
   available as an explicit "-s ort" choice).

 * A bit of code clean-up and a lot of test clean-up around userdiff
   area.

 * Handling of "promisor packs" that allows certain objects to be
   missing and lazily retrievable has been optimized (a bit).

 * When packet_write() fails, we gave an extra error message
   unnecessarily, which has been corrected.

 * The checkout machinery has been taught to perform the actual
   write-out of the files in parallel when able.

 * Show errno in the trace output in the error codepath that calls
   read_raw_ref method.

 * Effort to make the command line completion (in contrib/) safe with
   "set -u" continues.

 * Tweak a few tests for "log --format=..." that show timestamps in
   various formats.

 * The reflog expiry machinery has been taught to emit trace events.

 * Over-the-wire protocol learns a new request type to ask for object
   sizes given a list of object names.


Fixes since v2.31
-----------------

 * The fsmonitor interface read from its input without making sure
   there is something to read from.  This bug is new in 2.31
   timeframe.

 * The data structure used by fsmonitor interface was not properly
   duplicated during an in-core merge, leading to use-after-free etc.

 * "git bisect" reimplemented more in C during 2.30 timeframe did not
   take an annotated tag as a good/bad endpoint well.  This regression
   has been corrected.

 * Fix macros that can silently inject unintended null-statements.

 * CALLOC_ARRAY() macro replaces many uses of xcalloc().

 * Update insn in Makefile comments to run fuzz-all target.

 * Fix a corner case bug in "git mv" on case insensitive systems,
   which was introduced in 2.29 timeframe.

 * We had a code to diagnose and die cleanly when a required
   clean/smudge filter is missing, but an assert before that
   unnecessarily fired, hiding the end-user facing die() message.
   (merge 6fab35f748 mt/cleanly-die-upon-missing-required-filter later to maint).

 * Update C code that sets a few configuration variables when a remote
   is configured so that it spells configuration variable names in the
   canonical camelCase.
   (merge 0f1da600e6 ab/remote-write-config-in-camel-case later to maint).

 * A new configuration variable has been introduced to allow choosing
   which version of the generation number gets used in the
   commit-graph file.
   (merge 702110aac6 ds/commit-graph-generation-config later to maint).

 * Perf test update to work better in secondary worktrees.
   (merge 36e834abc1 jk/perf-in-worktrees later to maint).

 * Updates to memory allocation code around the use of pcre2 library.
   (merge c1760352e0 ab/grep-pcre2-allocfix later to maint).

 * "git -c core.bare=false clone --bare ..." would have segfaulted,
   which has been corrected.
   (merge 75555676ad bc/clone-bare-with-conflicting-config later to maint).

 * When "git checkout" removes a path that does not exist in the
   commit it is checking out, it wasn't careful enough not to follow
   symbolic links, which has been corrected.
   (merge fab78a0c3d mt/checkout-remove-nofollow later to maint).

 * A few option description strings started with capital letters,
   which were corrected.
   (merge 5ee90326dc cc/downcase-opt-help later to maint).

 * Plug or annotate remaining leaks that trigger while running the
   very basic set of tests.
   (merge 68ffe095a2 ah/plugleaks later to maint).

 * The hashwrite() API uses a buffering mechanism to avoid calling
   write(2) too frequently. This logic has been refactored to be
   easier to understand.
   (merge ddaf1f62e3 ds/clarify-hashwrite later to maint).

 * "git cherry-pick/revert" with or without "--[no-]edit" did not spawn
   the editor as expected (e.g. "revert --no-edit" after a conflict
   still asked to edit the message), which has been corrected.
   (merge 39edfd5cbc en/sequencer-edit-upon-conflict-fix later to maint).

 * "git daemon" has been tightened against systems that take backslash
   as directory separator.
   (merge 9a7f1ce8b7 rs/daemon-sanitize-dir-sep later to maint).

 * A NULL-dereference bug has been corrected in an error codepath in
   "git for-each-ref", "git branch --list" etc.
   (merge c685450880 jk/ref-filter-segfault-fix later to maint).

 * Streamline the codepath to fix the UTF-8 encoding issues in the
   argv[] and the prefix on macOS.
   (merge c7d0e61016 tb/precompose-prefix-simplify later to maint).

 * The command-line completion script (in contrib/) had a couple of
   references that would have given a warning under the "-u" (nounset)
   option.
   (merge c5c0548d79 vs/completion-with-set-u later to maint).

 * When "git pack-objects" makes a literal copy of a part of existing
   packfile using the reachability bitmaps, its update to the progress
   meter was broken.
   (merge 8e118e8490 jk/pack-objects-bitmap-progress-fix later to maint).

 * The dependencies for config-list.h and command-list.h were broken
   when the former was split out of the latter, which has been
   corrected.
   (merge 56550ea718 sg/bugreport-fixes later to maint).

 * "git push --quiet --set-upstream" was not quiet when setting the
   upstream branch configuration, which has been corrected.
   (merge f3cce896a8 ow/push-quiet-set-upstream later to maint).

 * The prefetch task in "git maintenance" assumed that "git fetch"
   from any remote would fetch all its local branches, which would
   fetch too much if the user is interested in only a subset of
   branches there.
   (merge 32f67888d8 ds/maintenance-prefetch-fix later to maint).

 * Clarify that pathnames recorded in Git trees are most often (but
   not necessarily) encoded in UTF-8.
   (merge 9364bf465d ab/pathname-encoding-doc later to maint).

 * "git --config-env var=val cmd" weren't accepted (only
   --config-env=var=val was).
   (merge c331551ccf ps/config-env-option-with-separate-value later to maint).

 * When the reachability bitmap is in effect, the "do not lose
   recently created objects and those that are reachable from them"
   safety to protect us from races were disabled by mistake, which has
   been corrected.
   (merge 2ba582ba4c jk/prune-with-bitmap-fix later to maint).

 * Cygwin pathname handling fix.
   (merge bccc37fdc7 ad/cygwin-no-backslashes-in-paths later to maint).

 * "git rebase --[no-]reschedule-failed-exec" did not work well with
   its configuration variable, which has been corrected.
   (merge e5b32bffd1 ab/rebase-no-reschedule-failed-exec later to maint).

 * Portability fix for command line completion script (in contrib/).
   (merge f2acf763e2 si/zsh-complete-comment-fix later to maint).

 * "git repack -A -d" in a partial clone unnecessarily loosened
   objects in promisor pack.

 * "git bisect skip" when custom words are used for new/old did not
   work, which has been corrected.

 * A few variants of informational message "Already up-to-date" has
   been rephrased.
   (merge ad9322da03 js/merge-already-up-to-date-message-reword later to maint).

 * "git submodule update --quiet" did not propagate the quiet option
   down to underlying "git fetch", which has been corrected.
   (merge 62af4bdd42 nc/submodule-update-quiet later to maint).

 * Document that our test can use "local" keyword.
   (merge a84fd3bcc6 jc/test-allows-local later to maint).

 * The word-diff mode has been taught to work better with a word
   regexp that can match an empty string.
   (merge 0324e8fc6b pw/word-diff-zero-width-matches later to maint).

 * "git p4" learned to find branch points more efficiently.
   (merge 6b79818bfb jk/p4-locate-branch-point-optim later to maint).

 * When "git update-ref -d" removes a ref that is packed, it left
   empty directories under $GIT_DIR/refs/ for
   (merge 5f03e5126d wc/packed-ref-removal-cleanup later to maint).

 * "git clean" and "git ls-files -i" had confusion around working on
   or showing ignored paths inside an ignored directory, which has
   been corrected.
   (merge b548f0f156 en/dir-traversal later to maint).

 * The handling of "%(push)" formatting element of "for-each-ref" and
   friends was broken when the same codepath started handling
   "%(push:<what>)", which has been corrected.
   (merge 1e1c4c5eac zh/ref-filter-push-remote-fix later to maint).

 * The bash prompt script (in contrib/) did not work under "set -u".
   (merge 5c0cbdb107 en/prompt-under-set-u later to maint).

 * The "chainlint" feature in the test framework is a handy way to
   catch common mistakes in writing new tests, but tends to get
   expensive.  An knob to selectively disable it has been introduced
   to help running tests that the developer has not modified.
   (merge 2d86a96220 jk/test-chainlint-softer later to maint).

 * The "rev-parse" command did not diagnose the lack of argument to
   "--path-format" option, which was introduced in v2.31 era, which
   has been corrected.
   (merge 99fc555188 wm/rev-parse-path-format-wo-arg later to maint).

 * Other code cleanup, docfix, build fix, etc.
   (merge f451960708 dl/cat-file-doc-cleanup later to maint).
   (merge 12604a8d0c sv/t9801-test-path-is-file-cleanup later to maint).
   (merge ea7e63921c jr/doc-ignore-typofix later to maint).
   (merge 23c781f173 ps/update-ref-trans-hook-doc later to maint).
   (merge 42efa1231a jk/filter-branch-sha256 later to maint).
   (merge 4c8e3dca6e tb/push-simple-uses-branch-merge-config later to maint).
   (merge 6534d436a2 bs/asciidoctor-installation-hints later to maint).
   (merge 47957485b3 ab/read-tree later to maint).
   (merge 2be927f3d1 ab/diff-no-index-tests later to maint).
   (merge 76593c09bb ab/detox-gettext-tests later to maint).
   (merge 28e29ee38b jc/doc-format-patch-clarify later to maint).
   (merge fc12b6fdde fm/user-manual-use-preface later to maint).
   (merge dba94e3a85 cc/test-helper-bloom-usage-fix later to maint).
   (merge 61a7660516 hn/reftable-tables-doc-update later to maint).
   (merge 81ed96a9b2 jt/fetch-pack-request-fix later to maint).
   (merge 151b6c2dd7 jc/doc-do-not-capitalize-clarification later to maint).
   (merge 9160068ac6 js/access-nul-emulation-on-windows later to maint).
   (merge 7a14acdbe6 po/diff-patch-doc later to maint).
   (merge f91371b948 pw/patience-diff-clean-up later to maint).
   (merge 3a7f0908b6 mt/clean-clean later to maint).
   (merge d4e2d15a8b ab/streaming-simplify later to maint).
   (merge 0e59f7ad67 ah/merge-ort-i18n later to maint).
   (merge e6f68f62e0 ls/typofix later to maint).

----------------------------------------------------------------

Changes since v2.31.0 are as follows:

Adam Dinwoodie (1):
      cygwin: disallow backslashes in file names

Alex Henrie (1):
      merge-ort: split "distinct types" message into two translatable messages

Andrey Bienkowski (1):
      doc: clarify the filename encoding in git diff

Andrzej Hunt (24):
      Makefile: update 'make fuzz-all' docs to reflect modern clang
      symbolic-ref: don't leak shortened refname in check_symref()
      reset: free instead of leaking unneeded ref
      clone: free or UNLEAK further pointers when finished
      worktree: fix leak in dwim_branch()
      init: remove git_init_db_config() while fixing leaks
      init-db: silence template_dir leak when converting to absolute path
      fsmonitor: avoid global-buffer-overflow READ when checking trivial response
      parse-options: convert bitfield values to use binary shift
      parse-options: don't leak alias help messages
      transport: also free remote_refs in transport_disconnect()
      merge-ort: only do pointer arithmetic for non-empty lists
      revision: free remainder of old commit list in limit_list
      wt-status: fix multiple small leaks
      ls-files: free max_prefix when done
      bloom: clear each bloom_key after use
      branch: FREE_AND_NULL instead of NULL'ing real_ref
      builtin/bugreport: don't leak prefixed filename
      builtin/check-ignore: clear_pathspec before returning
      builtin/checkout: clear pending objects after diffing
      mailinfo: also free strbuf lists when clearing mailinfo
      builtin/for-each-ref: free filter and UNLEAK sorting.
      builtin/rebase: release git_format_patch_opt too
      builtin/rm: avoid leaking pathspec and seen

Atharva Raykar (1):
      userdiff: add support for Scheme

Bagas Sanjaya (1):
      INSTALL: note on using Asciidoctor to build doc

Bruno Albuquerque (1):
      object-info: support for retrieving object info

Charvi Mendiratta (23):
      sequencer: pass todo_item to do_pick_commit()
      sequencer: use const variable for commit message comments
      rebase -i: add fixup [-C | -c] command
      t3437: test script for fixup [-C|-c] options in interactive rebase
      rebase -i: teach --autosquash to work with amend!
      doc/git-rebase: add documentation for fixup [-C|-c] options
      sequencer: fixup the datatype of the 'flag' argument
      sequencer: rename a few functions
      rebase -i: clarify and fix 'fixup -c' rebase-todo help
      t/lib-rebase: update the documentation of FAKE_LINES
      t/t3437: fixup here-docs in the 'setup' test
      t/t3437: remove the dependency of 'expected-message' file from tests
      t/t3437: check the author date of fixed up commit
      t/t3437: simplify and document the test helpers
      t/t3437: use named commits in the tests
      t/t3437: fixup the test 'multiple fixup -c opens editor once'
      doc/rebase -i: fix typo in the documentation of 'fixup' command
      sequencer: export and rename subject_length()
      commit: add amend suboption to --fixup to create amend! commit
      commit: add a reword suboption to --fixup
      t7500: add tests for --fixup=[amend|reword] options
      t3437: use --fixup with options to create amend! commit
      doc/git-commit: add documentation for fixup=[amend|reword] options

Chinmoy Chakraborty (1):
      column, range-diff: downcase option description

Christian Couder (1):
      test-bloom: fix missing 'bloom' from usage string

Christopher Schenk (1):
      remote-curl: fall back to basic auth if Negotiate fails

Dennis Ameling (2):
      cmake(install): fix double .exe suffixes
      cmake(install): include vcpkg dlls

Denton Liu (14):
      git-cat-file.txt: monospace args, placeholders and filenames
      git-cat-file.txt: remove references to "sha1"
      stash show: teach --include-untracked and --only-untracked
      stash show: learn stash.showIncludeUntracked
      git-completion.bash: pass $__git_subcommand_idx from __git_main()
      git-completion.bash: extract from else in _git_stash()
      git-completion.bash: use __gitcomp_builtin() in _git_stash()
      git-completion.bash: separate some commands onto their own line
      git-completion.bash: rename to $__git_cmd_idx
      git-completion.bash: use $__git_cmd_idx in more places
      git-completion.bash: consolidate cases in _git_stash()
      t3905: correct test title
      stash show: fix segfault with --{include,only}-untracked
      stash show: use stash.showIncludeUntracked even when diff options given

Derrick Stolee (58):
      commit-graph: create local repository pointer
      commit-graph: use config to specify generation type
      csum-file: make hashwrite() more readable
      sparse-index: design doc and format update
      t/perf: add performance test for sparse operations
      t1092: clean up script quoting
      sparse-index: add guard to ensure full index
      sparse-index: implement ensure_full_index()
      t1092: compare sparse-checkout to sparse-index
      test-read-cache: print cache entries with --table
      test-tool: don't force full index
      unpack-trees: ensure full index
      sparse-checkout: hold pattern list in index
      sparse-index: add 'sdir' index extension
      sparse-index: convert from full to sparse
      submodule: sparse-index should not collapse links
      unpack-trees: allow sparse directories
      sparse-index: check index conversion happens
      sparse-index: add index.sparse config option
      sparse-checkout: toggle sparse index from builtin
      sparse-checkout: disable sparse-index
      cache-tree: integrate with sparse directory entries
      sparse-index: loose integration with cache_tree_verify()
      p2000: add sparse-index repos
      maintenance: simplify prefetch logic
      sparse-index: API protection strategy
      *: remove 'const' qualifier for struct index_state
      read-cache: expand on query into sparse-directory entry
      cache: move ensure_full_index() to cache.h
      add: ensure full index
      checkout-index: ensure full index
      checkout: ensure full index
      commit: ensure full index
      difftool: ensure full index
      fsck: ensure full index
      grep: ensure full index
      ls-files: ensure full index
      merge-index: ensure full index
      rm: ensure full index
      stash: ensure full index
      update-index: ensure full index
      dir: ensure full index
      entry: ensure full index
      merge-recursive: ensure full index
      pathspec: ensure full index
      read-cache: ensure full index
      resolve-undo: ensure full index
      revision: ensure full index
      name-hash: don't add directories to name_hash
      sparse-index: expand_to_path()
      name-hash: use expand_to_path()
      fetch: add --prefetch option
      maintenance: use 'git fetch --prefetch'
      maintenance: respect remote.*.skipFetchAll
      dir: update stale description of treat_directory()
      sparse-index: fix uninitialized jump
      t1092: use GIT_PROGRESS_DELAY for consistent results
      dir: update stale description of treat_directory()

Elijah Newren (50):
      diffcore-rename: use directory rename guided basename comparisons
      diffcore-rename: provide basic implementation of idx_possible_rename()
      diffcore-rename: add a mapping of destination names to their indices
      Move computation of dir_rename_count from merge-ort to diffcore-rename
      diffcore-rename: add function for clearing dir_rename_count
      diffcore-rename: move dir_rename_counts into dir_rename_info struct
      diffcore-rename: extend cleanup_dir_rename_info()
      diffcore-rename: compute dir_rename_counts in stages
      diffcore-rename: limit dir_rename_counts computation to relevant dirs
      diffcore-rename: compute dir_rename_guess from dir_rename_counts
      diffcore-rename: enable filtering possible rename sources
      merge-ort: precompute subset of sources for which we need rename detection
      merge-ort: add data structures for an alternate tree traversal
      merge-ort: introduce wrappers for alternate tree traversal
      merge-ort: precompute whether directory rename detection is needed
      merge-ort: use relevant_sources to filter possible rename sources
      merge-ort: skip rename detection entirely if possible
      diffcore-rename: avoid doing basename comparisons for irrelevant sources
      diffcore-rename: take advantage of "majority rules" to skip more renames
      merge-ort, diffcore-rename: tweak dirs_removed and relevant_source type
      merge-ort: record the reason that we want a rename for a directory
      diffcore-rename: only compute dir_rename_count for relevant directories
      diffcore-rename: check if we have enough renames for directories early on
      diffcore-rename: add computation of number of unknown renames
      merge-ort: record the reason that we want a rename for a file
      diffcore-rename: determine which relevant_sources are no longer relevant
      merge-ort: use STABLE_QSORT instead of QSORT where required
      merge-ort: add a special minimal index just for renormalization
      merge-ort: have ll_merge() use a special attr_index for renormalization
      merge-ort: let renormalization change modify/delete into clean delete
      merge-ort: support subtree shifting
      t6428: new test for SKIP_WORKTREE handling and conflicts
      merge-ort: implement CE_SKIP_WORKTREE handling with conflicted entries
      t: mark several submodule merging tests as fixed under merge-ort
      merge-ort: write $GIT_DIR/AUTO_MERGE whenever we hit a conflict
      merge-recursive: add a bunch of FIXME comments documenting known bugs
      Revert "merge-ort: ignore the directory rename split conflict for now"
      t6423: mark remaining expected failure under merge-ort as such
      Add testing with merge-ort merge strategy
      sequencer: fix edit handling for cherry-pick and revert messages
      dir: convert trace calls to trace2 equivalents
      dir: report number of visited directories and paths with trace2
      ls-files: error out on -i unless -o or -c are specified
      t7300: add testcase showing unnecessary traversal into ignored directory
      t3001, t7300: add testcase showcasing missed directory traversal
      dir: avoid unnecessary traversal into ignored directory
      dir: traverse into untracked directories if they may have ignored subfiles
      dir: introduce readdir_skip_dot_and_dotdot() helper
      git-prompt: work under set -u
      dir: introduce readdir_skip_dot_and_dotdot() helper

Eric Sunshine (1):
      merge(s): apply consistent punctuation to "up to date" messages

Eric Wong (1):
      remote-curl: fix clone on sha256 repos

Firmin Martin (1):
      user-manual.txt: assign preface an id and a title

Georgios Kontaxis (1):
      gitweb: add "e-mail privacy" feature to redact e-mail addresses

Han Xin (1):
      pack-objects: fix comment of reused_chunk.difference

Han-Wen Nienhuys (3):
      reftable: document an alternate cleanup method on Windows
      refs: print errno for read_raw_ref if GIT_TRACE_REFS is set
      refs/debug: trace into reflog expiry too

Jeff Hostetler (14):
      pkt-line: eliminate the need for static buffer in packet_write_gently()
      simple-ipc: design documentation for new IPC mechanism
      simple-ipc: add win32 implementation
      unix-socket: eliminate static unix_stream_socket() helper function
      unix-socket: add backlog size option to unix_stream_listen()
      unix-socket: disallow chdir() when creating unix domain sockets
      unix-stream-server: create unix domain socket under lock
      convert: make convert_attrs() and convert structs public
      convert: add [async_]convert_to_working_tree_ca() variants
      convert: add get_stream_filter_ca() variant
      convert: add classification for conv_attrs struct
      simple-ipc: add Unix domain socket implementation
      t0052: add simple-ipc tests and t/helper/test-simple-ipc tool
      simple-ipc: correct ifdefs when NO_PTHREADS is defined

Jeff King (43):
      add open_nofollow() helper
      attr: convert "macro_ok" into a flags field
      exclude: add flags parameter to add_patterns()
      attr: do not respect symlinks for in-tree .gitattributes
      exclude: do not respect symlinks for in-tree .gitignore
      mailmap: do not respect symlinks for in-tree .mailmap
      p5303: add missing &&-chains
      p5303: measure time to repack with keep
      builtin/pack-objects.c: rewrite honor-pack-keep logic
      packfile: add kept-pack cache for find_kept_pack_entry()
      t/perf: handle worktrees as test repos
      t/perf: avoid copying worktree files from test repo
      t7003: test ref rewriting explicitly
      filter-branch: drop multiple-ancestor warning
      filter-branch: drop $_x40 glob
      bisect: peel annotated tags to commits
      t: annotate !PTHREADS tests with !FAIL_PREREQS
      ref-filter: fix NULL check for parse object failure
      midx.c: improve cache locality in midx_pack_order_cmp()
      pack-objects: update "nr_seen" progress based on pack-reused count
      is_promisor_object(): free tree buffer after parsing
      lookup_unknown_object(): take a repository argument
      revision: avoid parsing with --exclude-promisor-objects
      pack-bitmap: clean up include_check after use
      prune: save reachable-from-recent objects with bitmaps
      t5300: modernize basic tests
      t5300: check that we produced expected number of deltas
      pack-objects: clamp negative window size to 0
      t5316: check behavior of pack-objects --depth=0
      pack-objects: clamp negative depth to 0
      docs/format-patch: mention handling of merges
      t7415: remove out-dated comment about translation
      fsck_tree(): fix shadowed variable
      fsck_tree(): wrap some long lines
      t7415: rename to expand scope
      t7450: test verify_path() handling of gitmodules
      t7450: test .gitmodules symlink matching against obscured names
      t0060: test ntfs/hfs-obscured dotfiles
      fsck: warn about symlinked dotfiles we'll open with O_NOFOLLOW
      docs: document symlink restrictions for dot-files
      t: avoid sed-based chain-linting in some expensive cases
      t5551: test http interaction with credential helpers
      Revert "remote-curl: fall back to basic auth if Negotiate fails"

Jerry Zhang (3):
      git-apply: try threeway first when "--3way" is used
      git-apply: allow simultaneous --cached and --3way options
      apply: adjust messages to account for --3way changes

Joachim Kuebart (2):
      git-p4: ensure complex branches are cloned correctly
      git-p4: speed up search for branch parent

Johannes Schindelin (10):
      pkt-line: do not issue flush packets in write_packetized_*()
      pkt-line: add PACKET_READ_GENTLE_ON_READ_ERROR option
      pkt-line: add options argument to read_packetized_to_strbuf()
      fsmonitor: fix memory corruption in some corner cases
      fsmonitor: do not forget to release the token in `discard_index()`
      SECURITY: describe how to report vulnerabilities
      Document how we do embargoed releases
      cmake: support SKIP_DASHED_BUILT_INS
      cmake: add a preparatory work-around to accommodate `vcpkg`
      msvc: avoid calling `access("NUL", flags)`

Johannes Sixt (1):
      t9001-send-email.sh: fix expected absolute paths on Windows

John Szakmeister (2):
      http: store credential when PKI auth is used
      http: drop the check for an empty proxy password before approving

Jonathan Tan (8):
      t5606: run clone branch name test with protocol v2
      fetch-pack: buffer object-format with other args
      fetch-pack: refactor process_acks()
      fetch-pack: refactor add_haves()
      fetch-pack: refactor command and capability write
      fetch: teach independent negotiation (no packfile)
      send-pack: support push negotiation
      t5601: mark protocol v2-only test

Josh Soref (1):
      merge: fix swapped "up to date" message components

Julien Richard (1):
      doc: .gitignore documentation typofix

Junio C Hamano (31):
      builtin/repack.c: reword comment around pack-objects flags
      xcalloc: use CALLOC_ARRAY() when applicable
      cocci: allow xcalloc(1, size)
      The first batch in 2.32 cycle
      The second batch
      format-patch: give an overview of what a "patch" message is
      The third patch
      Git 2.31.1
      The fourth batch
      The fifth batch
      The sixth batch
      The seventh batch
      The eighth batch
      The ninth batch
      doc: clarify "do not capitalize the first word" rule
      The tenth batch
      The eleventh (aka "ort") batch
      The twelfth batch
      The thirteenth batch
      CodingGuidelines: explicitly allow "local" for test scripts
      The fourteenth batch
      The fifteenth batch
      The sixteenth batch
      The seventeenth batch
      Git 2.32-rc0
      A handful more topics before -rc1
      Git 2.32-rc1
      t1092: revert the "-1" hack for emulating "no progress meter"
      Revert "dir: introduce readdir_skip_dot_and_dotdot() helper"
      Revert "dir: update stale description of treat_directory()"
      Git 2.32-rc2

Kyle Meyer (1):
      config.txt: add missing period

Li Linchao (1):
      builtin/clone.c: add --reject-shallow option

Louis Sautier (1):
      pretty: fix a typo in the documentation for %(trailers)

Luke Shumaker (30):
      .gitignore: ignore 'git-subtree' as a build artifact
      subtree: t7900: update for having the default branch name be 'main'
      subtree: t7900: use test-lib.sh's test_count
      subtree: t7900: use consistent formatting
      subtree: t7900: comment subtree_test_create_repo
      subtree: t7900: use 'test' for string equality
      subtree: t7900: delete some dead code
      subtree: t7900: fix 'verify one file change per commit'
      subtree: t7900: rename last_commit_message to last_commit_subject
      subtree: t7900: add a test for the -h flag
      subtree: t7900: add porcelain tests for 'pull' and 'push'
      subtree: don't have loose code outside of a function
      subtree: more consistent error propagation
      subtree: drop support for git < 1.7
      subtree: use `git merge-base --is-ancestor`
      subtree: use git-sh-setup's `say`
      subtree: use more explicit variable names for cmdline args
      subtree: use "$*" instead of "$@" as appropriate
      subtree: don't fuss with PATH
      subtree: use "^{commit}" instead of "^0"
      subtree: parse revs in individual cmd_ functions
      subtree: remove duplicate check
      subtree: add comments and sanity checks
      subtree: don't let debug and progress output clash
      subtree: have $indent actually affect indentation
      subtree: give the docs a once-over
      subtree: allow --squash to be used with --rejoin
      subtree: allow 'split' flags to be passed to 'push'
      subtree: push: allow specifying a local rev other than HEAD
      subtree: be stricter about validating flags

Lénaïc Huard (1):
      maintenance: fix two memory leaks

Martin Ågren (2):
      git-repack.txt: remove spurious ")"
      pretty-formats.txt: add missing space

Matheus Tavares (32):
      convert: fail gracefully upon missing clean cmd on required filter
      symlinks: update comment on threaded_check_leading_path()
      checkout: don't follow symlinks when removing entries
      entry: extract a header file for entry.c functions
      entry: make fstat_output() and read_blob_entry() public
      entry: extract update_ce_after_write() from write_entry()
      entry: move conv_attrs lookup up to checkout_entry()
      entry: add checkout_entry_ca() taking preloaded conv_attrs
      add: include magic part of pathspec on --refresh error
      t3705: add tests for `git add` in sparse checkouts
      add: make --chmod and --renormalize honor sparse checkouts
      pathspec: allow to ignore SKIP_WORKTREE entries on index matching
      refresh_index(): add flag to ignore SKIP_WORKTREE entries
      add: warn when asked to update SKIP_WORKTREE entries
      rm: honor sparse checkout patterns
      pkt-line: do not report packet write errors twice
      unpack-trees: add basic support for parallel checkout
      parallel-checkout: make it truly parallel
      parallel-checkout: add configuration options
      parallel-checkout: support progress displaying
      parallel-checkout: add design documentation
      make_transient_cache_entry(): optionally alloc from mem_pool
      builtin/checkout.c: complete parallel checkout support
      parallel-checkout: add tests related to path collisions
      t0028: extract encoding helpers to lib-encoding.sh
      checkout-index: add parallel checkout support
      parallel-checkout: add tests related to .gitattributes
      parallel-checkout: add tests for basic operations
      ci: run test round with parallel-checkout enabled
      clean: remove unnecessary variable
      init: fix bug regarding ~/ expansion in init.templateDir
      t2080: fix cp invocation to copy symlinks instead of following them

Nicholas Clark (1):
      submodule update: silence underlying fetch with "--quiet"

Nipunn Koorapati (3):
      fsmonitor: skip lstat deletion check during git diff-index
      fsmonitor: add assertion that fsmonitor is valid to check_removed
      fsmonitor: add perf test for git diff HEAD

Patrick Steinhardt (17):
      githooks.txt: replace mentions of SHA-1 specific properties
      githooks.txt: clarify documentation on reference-transaction hook
      pack-bitmap: avoid traversal of objects referenced by uninteresting tag
      uploadpack.txt: document implication of `uploadpackfilter.allow`
      revision: mark commit parents as NOT_USER_GIVEN
      list-objects: move tag processing into its own function
      list-objects: support filtering by tag and commit
      list-objects: implement object type filter
      pack-bitmap: implement object type filter
      pack-bitmap: implement combined filter
      rev-list: allow filtering of provided items
      config: rename `git_etc_config()`
      config: unify code paths to get global config paths
      config: allow overriding of global and system configuration
      t1300: fix unset of GIT_CONFIG_NOSYSTEM leaking into subsequent tests
      git.txt: fix synopsis of `--config-env` missing the equals sign
      git: support separate arg for `--config-env`'s value

Peter Oliver (1):
      doc: point to diff attribute in patch format docs

Phillip Wood (6):
      rebase -i: only write fixup-message when it's needed
      sequencer: factor out code to append squash message
      rebase -i: comment out squash!/fixup! subjects from squash message
      word diff: handle zero length matches
      patience diff: remove unnecessary string comparisons
      patience diff: remove unused variable

Rafael Silva (1):
      repack: avoid loosening promisor objects in partial clones

Ramkumar Ramachandra (1):
      Add entry for Ramkumar Ramachandra

Ramsay Jones (1):
      bisect--helper: use BISECT_TERMS in 'bisect skip' command

René Scharfe (12):
      pretty: add %(describe)
      pretty: add merge and exclude options to %(describe)
      t4205: assert %(describe) test coverage
      pretty: document multiple %(describe) being inconsistent
      fix xcalloc() argument order
      archive: expand only a single %(describe) per archive
      git-compat-util.h: drop trailing semicolon from macro definition
      use CALLOC_ARRAY
      vcs-svn: remove header files as well
      block-sha1: drop trailing semicolon from macro definition
      mem-pool: drop trailing semicolon from macro definition
      daemon: sanitize all directory separators

Robert Foss (1):
      git-send-email: Respect core.hooksPath setting

SZEDER Gábor (1):
      Makefile: add missing dependencies of 'config-list.h'

Sardorbek Imomaliev (1):
      work around zsh comment in __git_complete_worktree_paths

Sergey Organov (5):
      diff-merges: introduce --diff-merges=on
      diff-merges: refactor set_diff_merges()
      diff-merges: adapt -m to enable default diff format
      diff-merges: introduce log.diffMerges config variable
      doc/diff-options: document new --diff-merges features

Shubham Verma (1):
      t9801: replace test -f with test_path_is_file

Taylor Blau (28):
      packfile: introduce 'find_kept_pack_entry()'
      revision: learn '--no-kept-objects'
      builtin/pack-objects.c: add '--stdin-packs' option
      builtin/repack.c: add '--geometric' option
      builtin/repack.c: do not repack single packs with --geometric
      t7703: test --geometric repack with loose objects
      builtin/repack.c: assign pack split later
      builtin/repack.c: be more conservative with unsigned overflows
      Documentation/git-push.txt: correct configuration typo
      builtin/pack-objects.c: ignore missing links with --stdin-packs
      builtin/multi-pack-index.c: inline 'flags' with options
      builtin/multi-pack-index.c: don't handle 'progress' separately
      builtin/multi-pack-index.c: define common usage with a macro
      builtin/multi-pack-index.c: split sub-commands
      builtin/multi-pack-index.c: don't enter bogus cmd_mode
      builtin/multi-pack-index.c: display usage on unrecognized command
      t/helper/test-read-midx.c: add '--show-objects'
      pack-bitmap: add 'test_bitmap_commits()' helper
      t/helper/test-bitmap.c: initial commit
      builtin/pack-objects.c: respect 'pack.preferBitmapTips'
      midx: allow marking a pack as preferred
      midx: don't free midx_name early
      midx: keep track of the checksum
      midx: make some functions non-static
      Documentation/technical: describe multi-pack reverse indexes
      pack-revindex: read multi-pack reverse indexes
      pack-write.c: extract 'write_rev_file_order'
      pack-revindex: write multi-pack reverse indexes

Todd Zullinger (1):
      t7500: remove non-existant C_LOCALE_OUTPUT prereq

Torsten Bögershausen (3):
      git mv foo FOO ; git mv foo bar gave an assert
      precompose_utf8: make precompose_string_if_needed() public
      macOS: precompose startup_info->prefix

Ville Skyttä (2):
      completion: audit and guard $GIT_* against unset use
      completion: avoid aliased command lookup error in nounset mode

Will Chandler (1):
      refs: cleanup directories when deleting packed ref

Wolfgang Müller (1):
      rev-parse: fix segfault with missing --path-format argument

ZheNing Hu (8):
      commit: add --trailer option
      format-patch: allow a non-integral version numbers
      ref-filter: get rid of show_ref_array_item
      ref-filter: reuse output buffer
      pretty: provide human date format
      docs: correct descript of trailer.<token>.command
      trailer: add new .cmd config option
      ref-filter: fix read invalid union member bug

brian m. carlson (14):
      builtin/init-db: handle bare clones when core.bare set to false
      hash: add an algo member to struct object_id
      Always use oidread to read into struct object_id
      http-push: set algorithm when reading object ID
      hash: add a function to finalize object IDs
      Use the final_oid_fn to finalize hashing of object IDs
      builtin/pack-redundant: avoid casting buffers to struct object_id
      hash: set, copy, and use algo field in struct object_id
      hash: provide per-algorithm null OIDs
      builtin/show-index: set the algorithm for object IDs
      commit-graph: don't store file hashes as struct object_id
      builtin/pack-objects: avoid using struct object_id for pack hash
      hex: default to the_hash_algo on zero algorithm value
      hex: print objects using the hash algorithm member

Ævar Arnfjörð Bjarmason (96):
      grep/pcre2: drop needless assignment + assert() on opt->pcre2
      grep/pcre2: drop needless assignment to NULL
      grep/pcre2: correct reference to grep_init() in comment
      grep/pcre2: prepare to add debugging to pcre2_malloc()
      grep/pcre2: add GREP_PCRE2_DEBUG_MALLOC debug mode
      grep/pcre2: use compile-time PCREv2 version test
      grep/pcre2: use pcre2_maketables_free() function
      grep/pcre2: actually make pcre2 use custom allocator
      grep/pcre2: move back to thread-only PCREv2 structures
      grep/pcre2: move definitions of pcre2_{malloc,free}
      Makefile: guard against TEST_OBJS in the environment
      Makefile: split up long OBJECTS line
      Makefile: sort OBJECTS assignment for subsequent change
      Makefile: split OBJECTS into OBJECTS and GIT_OBJS
      Makefile: add {program,xdiff,test,git,fuzz}-objs & objects targets
      remote: add camel-cased *.tagOpt key, like clone
      remote: write camel-cased *.pushRemote on rename
      fsck.c: refactor and rename common config callback
      show tests: add test for "git show <tree>"
      ls-files tests: add meaningful --with-tree tests
      tree.c API: move read_tree() into builtin/ls-files.c
      ls-files: don't needlessly pass around stage variable
      ls-files: refactor away read_tree()
      archive: stop passing "stage" through read_tree_recursive()
      tree.h API: expose read_tree_1() as read_tree_at()
      tree.h API: simplify read_tree_recursive() signature
      diff --no-index tests: add test for --exit-code
      diff --no-index tests: test mode normalization
      rebase: remove transitory rebase.useBuiltin setting & env
      mktag tests: fix broken "&&" chain
      fsck.h: use designed initializers for FSCK_OPTIONS_{DEFAULT,STRICT}
      fsck.h: use "enum object_type" instead of "int"
      fsck.c: rename variables in fsck_set_msg_type() for less confusion
      fsck.c: remove (mostly) redundant append_msg_id() function
      fsck.c: rename remaining fsck_msg_id "id" to "msg_id"
      fsck.c: refactor fsck_msg_type() to limit scope of "int msg_type"
      fsck.h: move FSCK_{FATAL,INFO,ERROR,WARN,IGNORE} into an enum
      fsck.h: re-order and re-assign "enum fsck_msg_type"
      fsck.c: call parse_msg_type() early in fsck_set_msg_type()
      fsck.c: undefine temporary STR macro after use
      fsck.c: give "FOREACH_MSG_ID" a more specific name
      fsck.[ch]: move FOREACH_FSCK_MSG_ID & fsck_msg_id from *.c to *.h
      fsck.c: pass along the fsck_msg_id in the fsck_error callback
      fsck.c: add an fsck_set_msg_type() API that takes enums
      fsck.c: move gitmodules_{found,done} into fsck_options
      fetch-pack: don't needlessly copy fsck_options
      fetch-pack: use file-scope static struct for fsck_options
      fetch-pack: use new fsck API to printing dangling submodules
      Makefile: add QUIET_GEN to "tags" and "TAGS" targets
      git-send-email: replace "map" in void context with "for"
      git-send-email: test full --validate output
      git-send-email: refactor duplicate $? checks into a function
      git-send-email: improve --validate error output
      bash completion: complete CHERRY_PICK_HEAD
      config.c: remove last remnant of GIT_TEST_GETTEXT_POISON
      userdiff style: re-order drivers in alphabetical order
      userdiff style: declare patterns with consistent style
      userdiff style: normalize pascal regex declaration
      userdiff: add and use for_each_userdiff_driver()
      userdiff tests: explicitly test "default" pattern
      userdiff tests: list builtin drivers via test-tool
      userdiff: remove support for "broken" tests
      blame tests: don't rely on t/t4018/ directory
      blame tests: simplify userdiff driver test
      rebase tests: camel-case rebase.rescheduleFailedExec consistently
      rebase: don't override --no-reschedule-failed-exec with config
      Documentation/Makefile: make $(wildcard howto/*.txt) a var
      Documentation/Makefile: make doc.dep dependencies a variable again
      doc lint: Perl "strict" and "warnings" in lint-gitlink.perl
      doc lint: fix bugs in, simplify and improve lint script
      doc lint: lint and fix missing "GIT" end sections
      doc lint: lint relative section order
      docs: fix linting issues due to incorrect relative section order
      svn tests: remove legacy re-setup from init-clone test
      svn tests: refactor away a "set -e" in test body
      tests: remove all uses of test_i18cmp
      usage.c: don't copy/paste the same comment three times
      api docs: document BUG() in api-error-handling.txt
      api docs: document that BUG() emits a trace2 error event
      pretty tests: simplify %aI/%cI date format test
      pretty tests: give --date/format tests a better description
      sparse-index.c: remove set_index_sparse_config()
      streaming.c: avoid forward declarations
      streaming.c: remove enum/function/vtbl indirection
      streaming.c: remove {open,close,read}_method_decl() macros
      streaming.c: stop passing around "object_info *" to open()
      streaming.c: move {open,close,read} from vtable to "struct git_istream"
      Makefile: don't re-define PERL_DEFINES
      Makefile: regenerate perl/build/* if GIT-PERL-DEFINES changes
      Makefile: regenerate *.pm on NO_PERL_CPAN_FALLBACKS change
      perl: use mock i18n functions under NO_GETTEXT=Y
      Makefile: make PERL_DEFINES recursively expanded
      send-email: fix missing error message regression
      send-email: don't needlessly abs_path() the core.hooksPath
      send-email: move "hooks_path" invocation to git-send-email.perl
      pack-objects: move static inline from a header to the sole consumer

Øystein Walle (2):
      transport: respect verbosity when setting upstream
      add: die if both --dry-run and --interactive are given

Đoàn Trần Công Danh (6):
      mailinfo: load default metainfo_charset lazily
      mailinfo: stop parsing options manually
      mailinfo: warn if CRLF found in decoded base64/QP email
      mailinfo: allow squelching quoted CRLF warning
      mailinfo: allow stripping quoted CR without warning
      am: learn to process quoted lines that ends with CRLF


^ permalink raw reply	[relevance 3%]

* [ANNOUNCE] Git v2.32.0-rc3
@ 2021-06-02  8:29  3% Junio C Hamano
  0 siblings, 0 replies; 200+ results
From: Junio C Hamano @ 2021-06-02  8:29 UTC (permalink / raw)
  To: git; +Cc: Linux Kernel, git-packagers

A release candidate Git v2.32.0-rc3 is now available for testing at
the usual places.  It is comprised of 589 non-merge commits since
v2.31.0, contributed by 84 people, 31 of which are new faces [*].

A couple of small last-minute regression fixes are in, relative to
the previouss release candidate.  Hopefully we can tag the final
this weekend.

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.32.0-rc3' tag and the 'master' branch that the tag points at:

  url = https://git.kernel.org/pub/scm/git/git
  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.31.0 are as follows.
Welcome to the Git development community!

  Adam Sharafeddine, Andrey Bienkowski, Atharva Raykar, Bruno
  Albuquerque, Chinmoy Chakraborty, Christopher Schenk, Dan
  Moseley, David Emett, Dmitry Torilov, Fabien Terrani, Firmin
  Martin, Georgios Kontaxis, Jason Gore, Jerry Zhang, Joachim
  Kuebart, Joseph Vusich, Josh Soref, Julien Richard, Li Linchao,
  Louis Sautier, Luke Shumaker, Nicholas Clark, Peter Oliver,
  Renato Botelho, Robert Foss, RyotaK, Sardorbek Imomaliev,
  Tom Saeger, Will Chandler, Wolfgang Müller, and Yiyuan guo.

Returning contributors who helped this release are as follows.
Thanks for your continued support.

  Adam Dinwoodie, Ævar Arnfjörð Bjarmason, Alex Henrie, Andrzej
  Hunt, Bagas Sanjaya, Ben Humphreys, brian m. carlson, Charvi
  Mendiratta, Christian Couder, David Aguilar, Dennis Ameling,
  Denton Liu, Derrick Stolee, Đoàn Trần Công Danh, Elijah
  Newren, Eric Sunshine, Eric Wong, Han-Wen Nienhuys, Han Xin,
  Jeff Hostetler, Jeff King, Johannes Schindelin, Johannes Sixt,
  John Szakmeister, Jonathan Nieder, Jonathan Tan, Junio C Hamano,
  Kyle Meyer, Lénaïc Huard, Luke Diamand, Marc Branchaud,
  Martin Ågren, Matheus Tavares, Nguyễn Thái Ngọc Duy,
  Nipunn Koorapati, Øystein Walle, Patrick Steinhardt, Phillip
  Wood, Rafael Silva, Ramkumar Ramachandra, Ramsay Jones, Randall
  S. Becker, René Scharfe, Sergey Organov, Shubham Verma, Son
  Luong Ngoc, SZEDER Gábor, Taylor Blau, Todd Zullinger, Torsten
  Bögershausen, Trygve Aaberge, Ville Skyttä, and ZheNing Hu.

[*] We are counting not just the authorship contribution but
    issue reporting, testing and reviewing that are recorded
    in the commit trailers.

----------------------------------------------------------------

Git 2.32 Release Notes (draft)
==============================

Backward compatibility notes
----------------------------

 * ".gitattributes", ".gitignore", and ".mailmap" files that are
   symbolic links are ignored.

 * "git apply --3way" used to first attempt a straight application,
   and only fell back to the 3-way merge algorithm when the stright
   application failed.  Starting with this version, the command will
   first try the 3-way merge algorithm and only when it fails (either
   resulting with conflict or the base versions of blobs are missing),
   falls back to the usual patch application.


Updates since v2.31
-------------------

UI, Workflows & Features

 * It does not make sense to make ".gitattributes", ".gitignore" and
   ".mailmap" symlinks, as they are supposed to be usable from the
   object store (think: bare repositories where HEAD:.mailmap etc. are
   used).  When these files are symbolic links, we used to read the
   contents of the files pointed by them by mistake, which has been
   corrected.

 * "git stash show" learned to optionally show untracked part of the
   stash.

 * "git log --format='...'" learned "%(describe)" placeholder.

 * "git repack" so far has been only capable of repacking everything
   under the sun into a single pack (or split by size).  A cleverer
   strategy to reduce the cost of repacking a repository has been
   introduced.

 * The http codepath learned to let the credential layer to cache the
   password used to unlock a certificate that has successfully been
   used.

 * "git commit --fixup=<commit>", which was to tweak the changes made
   to the contents while keeping the original log message intact,
   learned "--fixup=(amend|reword):<commit>", that can be used to
   tweak both the message and the contents, and only the message,
   respectively.

 * "git send-email" learned to honor the core.hooksPath configuration.

 * "git format-patch -v<n>" learned to allow a reroll count that is
   not an integer.

 * "git commit" learned "--trailer <key>[=<value>]" option; together
   with the interpret-trailers command, this will make it easier to
   support custom trailers.

 * "git clone --reject-shallow" option fails the clone as soon as we
   notice that we are cloning from a shallow repository.

 * A configuration variable has been added to force tips of certain
   refs to be given a reachability bitmap.

 * "gitweb" learned "e-mail privacy" feature to redact strings that
   look like e-mail addresses on various pages.

 * "git apply --3way" has always been "to fall back to 3-way merge
   only when straight application fails". Swap the order of falling
   back so that 3-way is always attempted first (only when the option
   is given, of course) and then straight patch application is used as
   a fallback when it fails.

 * "git apply" now takes "--3way" and "--cached" at the same time, and
   work and record results only in the index.

 * The command line completion (in contrib/) has learned that
   CHERRY_PICK_HEAD is a possible pseudo-ref.

 * Userdiff patterns for "Scheme" has been added.

 * "git log" learned "--diff-merges=<style>" option, with an
   associated configuration variable log.diffMerges.

 * "git log --format=..." placeholders learned %ah/%ch placeholders to
   request the --date=human output.

 * Replace GIT_CONFIG_NOSYSTEM mechanism to decline from reading the
   system-wide configuration file with GIT_CONFIG_SYSTEM that lets
   users specify from which file to read the system-wide configuration
   (setting it to an empty file would essentially be the same as
   setting NOSYSTEM), and introduce GIT_CONFIG_GLOBAL to override the
   per-user configuration in $HOME/.gitconfig.

 * "git add" and "git rm" learned not to touch those paths that are
   outside of sparse checkout.

 * "git rev-list" learns the "--filter=object:type=<type>" option,
   which can be used to exclude objects of the given kind from the
   packfile generated by pack-objects.

 * The command line completion (in contrib/) for "git stash" has been
   updated.

 * "git subtree" updates.

 * It is now documented that "format-patch" skips merges.

 * Options to "git pack-objects" that take numeric values like
   --window and --depth should not accept negative values; the input
   validation has been tightened.

 * The way the command line specified by the trailer.<token>.command
   configuration variable receives the end-user supplied value was
   both error prone and misleading.  An alternative to achieve the
   same goal in a safer and more intuitive way has been added, as
   the trailer.<token>.cmd configuration variable, to replace it.

 * "git add -i --dry-run" does not dry-run, which was surprising.  The
   combination of options has taught to error out.

 * "git push" learns to discover common ancestor with the receiving
   end over protocol v2.  This will hopefully make "git push" as
   efficient as "git fetch" in avoiding objects from getting
   transferred unnecessarily.

 * "git mailinfo" (hence "git am") learned the "--quoted-cr" option to
   control how lines ending with CRLF wrapped in base64 or qp are
   handled.


Performance, Internal Implementation, Development Support etc.

 * Rename detection rework continues.

 * GIT_TEST_FAIL_PREREQS is a mechanism to skip test pieces with
   prerequisites to catch broken tests that depend on the side effects
   of optional pieces, but did not work at all when negative
   prerequisites were involved.
   (merge 27d578d904 jk/fail-prereq-testfix later to maint).

 * "git diff-index" codepath has been taught to trust fsmonitor status
   to reduce number of lstat() calls.
   (merge 7e5aa13d2c nk/diff-index-fsmonitor later to maint).

 * Reorganize Makefile to allow building git.o and other essential
   objects without extra stuff needed only for testing.

 * Preparatory API changes for parallel checkout.

 * A simple IPC interface gets introduced to build services like
   fsmonitor on top.

 * Fsck API clean-up.

 * SECURITY.md that is facing individual contributors and end users
   has been introduced.  Also a procedure to follow when preparing
   embargoed releases has been spelled out.
   (merge 09420b7648 js/security-md later to maint).

 * Optimize "rev-list --use-bitmap-index --objects" corner case that
   uses negative tags as the stopping points.

 * CMake update for vsbuild.

 * An on-disk reverse-index to map the in-pack location of an object
   back to its object name across multiple packfiles is introduced.

 * Generate [ec]tags under $(QUIET_GEN).

 * Clean-up codepaths that implements "git send-email --validate"
   option and improves the message from it.

 * The last remnant of gettext-poison has been removed.

 * The test framework has been taught to optionally turn the default
   merge strategy to "ort" throughout the system where we use
   three-way merges internally, like cherry-pick, rebase etc.,
   primarily to enhance its test coverage (the strategy has been
   available as an explicit "-s ort" choice).

 * A bit of code clean-up and a lot of test clean-up around userdiff
   area.

 * Handling of "promisor packs" that allows certain objects to be
   missing and lazily retrievable has been optimized (a bit).

 * When packet_write() fails, we gave an extra error message
   unnecessarily, which has been corrected.

 * The checkout machinery has been taught to perform the actual
   write-out of the files in parallel when able.

 * Show errno in the trace output in the error codepath that calls
   read_raw_ref method.

 * Effort to make the command line completion (in contrib/) safe with
   "set -u" continues.

 * Tweak a few tests for "log --format=..." that show timestamps in
   various formats.

 * The reflog expiry machinery has been taught to emit trace events.

 * Over-the-wire protocol learns a new request type to ask for object
   sizes given a list of object names.


Fixes since v2.31
-----------------

 * The fsmonitor interface read from its input without making sure
   there is something to read from.  This bug is new in 2.31
   timeframe.

 * The data structure used by fsmonitor interface was not properly
   duplicated during an in-core merge, leading to use-after-free etc.

 * "git bisect" reimplemented more in C during 2.30 timeframe did not
   take an annotated tag as a good/bad endpoint well.  This regression
   has been corrected.

 * Fix macros that can silently inject unintended null-statements.

 * CALLOC_ARRAY() macro replaces many uses of xcalloc().

 * Update insn in Makefile comments to run fuzz-all target.

 * Fix a corner case bug in "git mv" on case insensitive systems,
   which was introduced in 2.29 timeframe.

 * We had a code to diagnose and die cleanly when a required
   clean/smudge filter is missing, but an assert before that
   unnecessarily fired, hiding the end-user facing die() message.
   (merge 6fab35f748 mt/cleanly-die-upon-missing-required-filter later to maint).

 * Update C code that sets a few configuration variables when a remote
   is configured so that it spells configuration variable names in the
   canonical camelCase.
   (merge 0f1da600e6 ab/remote-write-config-in-camel-case later to maint).

 * A new configuration variable has been introduced to allow choosing
   which version of the generation number gets used in the
   commit-graph file.
   (merge 702110aac6 ds/commit-graph-generation-config later to maint).

 * Perf test update to work better in secondary worktrees.
   (merge 36e834abc1 jk/perf-in-worktrees later to maint).

 * Updates to memory allocation code around the use of pcre2 library.
   (merge c1760352e0 ab/grep-pcre2-allocfix later to maint).

 * "git -c core.bare=false clone --bare ..." would have segfaulted,
   which has been corrected.
   (merge 75555676ad bc/clone-bare-with-conflicting-config later to maint).

 * When "git checkout" removes a path that does not exist in the
   commit it is checking out, it wasn't careful enough not to follow
   symbolic links, which has been corrected.
   (merge fab78a0c3d mt/checkout-remove-nofollow later to maint).

 * A few option description strings started with capital letters,
   which were corrected.
   (merge 5ee90326dc cc/downcase-opt-help later to maint).

 * Plug or annotate remaining leaks that trigger while running the
   very basic set of tests.
   (merge 68ffe095a2 ah/plugleaks later to maint).

 * The hashwrite() API uses a buffering mechanism to avoid calling
   write(2) too frequently. This logic has been refactored to be
   easier to understand.
   (merge ddaf1f62e3 ds/clarify-hashwrite later to maint).

 * "git cherry-pick/revert" with or without "--[no-]edit" did not spawn
   the editor as expected (e.g. "revert --no-edit" after a conflict
   still asked to edit the message), which has been corrected.
   (merge 39edfd5cbc en/sequencer-edit-upon-conflict-fix later to maint).

 * "git daemon" has been tightened against systems that take backslash
   as directory separator.
   (merge 9a7f1ce8b7 rs/daemon-sanitize-dir-sep later to maint).

 * A NULL-dereference bug has been corrected in an error codepath in
   "git for-each-ref", "git branch --list" etc.
   (merge c685450880 jk/ref-filter-segfault-fix later to maint).

 * Streamline the codepath to fix the UTF-8 encoding issues in the
   argv[] and the prefix on macOS.
   (merge c7d0e61016 tb/precompose-prefix-simplify later to maint).

 * The command-line completion script (in contrib/) had a couple of
   references that would have given a warning under the "-u" (nounset)
   option.
   (merge c5c0548d79 vs/completion-with-set-u later to maint).

 * When "git pack-objects" makes a literal copy of a part of existing
   packfile using the reachability bitmaps, its update to the progress
   meter was broken.
   (merge 8e118e8490 jk/pack-objects-bitmap-progress-fix later to maint).

 * The dependencies for config-list.h and command-list.h were broken
   when the former was split out of the latter, which has been
   corrected.
   (merge 56550ea718 sg/bugreport-fixes later to maint).

 * "git push --quiet --set-upstream" was not quiet when setting the
   upstream branch configuration, which has been corrected.
   (merge f3cce896a8 ow/push-quiet-set-upstream later to maint).

 * The prefetch task in "git maintenance" assumed that "git fetch"
   from any remote would fetch all its local branches, which would
   fetch too much if the user is interested in only a subset of
   branches there.
   (merge 32f67888d8 ds/maintenance-prefetch-fix later to maint).

 * Clarify that pathnames recorded in Git trees are most often (but
   not necessarily) encoded in UTF-8.
   (merge 9364bf465d ab/pathname-encoding-doc later to maint).

 * "git --config-env var=val cmd" weren't accepted (only
   --config-env=var=val was).
   (merge c331551ccf ps/config-env-option-with-separate-value later to maint).

 * When the reachability bitmap is in effect, the "do not lose
   recently created objects and those that are reachable from them"
   safety to protect us from races were disabled by mistake, which has
   been corrected.
   (merge 2ba582ba4c jk/prune-with-bitmap-fix later to maint).

 * Cygwin pathname handling fix.
   (merge bccc37fdc7 ad/cygwin-no-backslashes-in-paths later to maint).

 * "git rebase --[no-]reschedule-failed-exec" did not work well with
   its configuration variable, which has been corrected.
   (merge e5b32bffd1 ab/rebase-no-reschedule-failed-exec later to maint).

 * Portability fix for command line completion script (in contrib/).
   (merge f2acf763e2 si/zsh-complete-comment-fix later to maint).

 * "git repack -A -d" in a partial clone unnecessarily loosened
   objects in promisor pack.

 * "git bisect skip" when custom words are used for new/old did not
   work, which has been corrected.

 * A few variants of informational message "Already up-to-date" has
   been rephrased.
   (merge ad9322da03 js/merge-already-up-to-date-message-reword later to maint).

 * "git submodule update --quiet" did not propagate the quiet option
   down to underlying "git fetch", which has been corrected.
   (merge 62af4bdd42 nc/submodule-update-quiet later to maint).

 * Document that our test can use "local" keyword.
   (merge a84fd3bcc6 jc/test-allows-local later to maint).

 * The word-diff mode has been taught to work better with a word
   regexp that can match an empty string.
   (merge 0324e8fc6b pw/word-diff-zero-width-matches later to maint).

 * "git p4" learned to find branch points more efficiently.
   (merge 6b79818bfb jk/p4-locate-branch-point-optim later to maint).

 * When "git update-ref -d" removes a ref that is packed, it left
   empty directories under $GIT_DIR/refs/ for
   (merge 5f03e5126d wc/packed-ref-removal-cleanup later to maint).

 * "git clean" and "git ls-files -i" had confusion around working on
   or showing ignored paths inside an ignored directory, which has
   been corrected.
   (merge b548f0f156 en/dir-traversal later to maint).

 * The handling of "%(push)" formatting element of "for-each-ref" and
   friends was broken when the same codepath started handling
   "%(push:<what>)", which has been corrected.
   (merge 1e1c4c5eac zh/ref-filter-push-remote-fix later to maint).

 * The bash prompt script (in contrib/) did not work under "set -u".
   (merge 5c0cbdb107 en/prompt-under-set-u later to maint).

 * The "chainlint" feature in the test framework is a handy way to
   catch common mistakes in writing new tests, but tends to get
   expensive.  An knob to selectively disable it has been introduced
   to help running tests that the developer has not modified.
   (merge 2d86a96220 jk/test-chainlint-softer later to maint).

 * The "rev-parse" command did not diagnose the lack of argument to
   "--path-format" option, which was introduced in v2.31 era, which
   has been corrected.
   (merge 99fc555188 wm/rev-parse-path-format-wo-arg later to maint).

 * Other code cleanup, docfix, build fix, etc.
   (merge f451960708 dl/cat-file-doc-cleanup later to maint).
   (merge 12604a8d0c sv/t9801-test-path-is-file-cleanup later to maint).
   (merge ea7e63921c jr/doc-ignore-typofix later to maint).
   (merge 23c781f173 ps/update-ref-trans-hook-doc later to maint).
   (merge 42efa1231a jk/filter-branch-sha256 later to maint).
   (merge 4c8e3dca6e tb/push-simple-uses-branch-merge-config later to maint).
   (merge 6534d436a2 bs/asciidoctor-installation-hints later to maint).
   (merge 47957485b3 ab/read-tree later to maint).
   (merge 2be927f3d1 ab/diff-no-index-tests later to maint).
   (merge 76593c09bb ab/detox-gettext-tests later to maint).
   (merge 28e29ee38b jc/doc-format-patch-clarify later to maint).
   (merge fc12b6fdde fm/user-manual-use-preface later to maint).
   (merge dba94e3a85 cc/test-helper-bloom-usage-fix later to maint).
   (merge 61a7660516 hn/reftable-tables-doc-update later to maint).
   (merge 81ed96a9b2 jt/fetch-pack-request-fix later to maint).
   (merge 151b6c2dd7 jc/doc-do-not-capitalize-clarification later to maint).
   (merge 9160068ac6 js/access-nul-emulation-on-windows later to maint).
   (merge 7a14acdbe6 po/diff-patch-doc later to maint).
   (merge f91371b948 pw/patience-diff-clean-up later to maint).
   (merge 3a7f0908b6 mt/clean-clean later to maint).
   (merge d4e2d15a8b ab/streaming-simplify later to maint).
   (merge 0e59f7ad67 ah/merge-ort-i18n later to maint).
   (merge e6f68f62e0 ls/typofix later to maint).

----------------------------------------------------------------

Changes since v2.31.0 are as follows:

Adam Dinwoodie (1):
      cygwin: disallow backslashes in file names

Alex Henrie (1):
      merge-ort: split "distinct types" message into two translatable messages

Andrey Bienkowski (1):
      doc: clarify the filename encoding in git diff

Andrzej Hunt (24):
      Makefile: update 'make fuzz-all' docs to reflect modern clang
      symbolic-ref: don't leak shortened refname in check_symref()
      reset: free instead of leaking unneeded ref
      clone: free or UNLEAK further pointers when finished
      worktree: fix leak in dwim_branch()
      init: remove git_init_db_config() while fixing leaks
      init-db: silence template_dir leak when converting to absolute path
      fsmonitor: avoid global-buffer-overflow READ when checking trivial response
      parse-options: convert bitfield values to use binary shift
      parse-options: don't leak alias help messages
      transport: also free remote_refs in transport_disconnect()
      merge-ort: only do pointer arithmetic for non-empty lists
      revision: free remainder of old commit list in limit_list
      wt-status: fix multiple small leaks
      ls-files: free max_prefix when done
      bloom: clear each bloom_key after use
      branch: FREE_AND_NULL instead of NULL'ing real_ref
      builtin/bugreport: don't leak prefixed filename
      builtin/check-ignore: clear_pathspec before returning
      builtin/checkout: clear pending objects after diffing
      mailinfo: also free strbuf lists when clearing mailinfo
      builtin/for-each-ref: free filter and UNLEAK sorting.
      builtin/rebase: release git_format_patch_opt too
      builtin/rm: avoid leaking pathspec and seen

Atharva Raykar (1):
      userdiff: add support for Scheme

Bagas Sanjaya (1):
      INSTALL: note on using Asciidoctor to build doc

Bruno Albuquerque (1):
      object-info: support for retrieving object info

Charvi Mendiratta (23):
      sequencer: pass todo_item to do_pick_commit()
      sequencer: use const variable for commit message comments
      rebase -i: add fixup [-C | -c] command
      t3437: test script for fixup [-C|-c] options in interactive rebase
      rebase -i: teach --autosquash to work with amend!
      doc/git-rebase: add documentation for fixup [-C|-c] options
      sequencer: fixup the datatype of the 'flag' argument
      sequencer: rename a few functions
      rebase -i: clarify and fix 'fixup -c' rebase-todo help
      t/lib-rebase: update the documentation of FAKE_LINES
      t/t3437: fixup here-docs in the 'setup' test
      t/t3437: remove the dependency of 'expected-message' file from tests
      t/t3437: check the author date of fixed up commit
      t/t3437: simplify and document the test helpers
      t/t3437: use named commits in the tests
      t/t3437: fixup the test 'multiple fixup -c opens editor once'
      doc/rebase -i: fix typo in the documentation of 'fixup' command
      sequencer: export and rename subject_length()
      commit: add amend suboption to --fixup to create amend! commit
      commit: add a reword suboption to --fixup
      t7500: add tests for --fixup=[amend|reword] options
      t3437: use --fixup with options to create amend! commit
      doc/git-commit: add documentation for fixup=[amend|reword] options

Chinmoy Chakraborty (1):
      column, range-diff: downcase option description

Christian Couder (1):
      test-bloom: fix missing 'bloom' from usage string

Christopher Schenk (1):
      remote-curl: fall back to basic auth if Negotiate fails

David Aguilar (1):
      contrib/completion: fix zsh completion regression from 59d85a2a05

Dennis Ameling (2):
      cmake(install): fix double .exe suffixes
      cmake(install): include vcpkg dlls

Denton Liu (14):
      git-cat-file.txt: monospace args, placeholders and filenames
      git-cat-file.txt: remove references to "sha1"
      stash show: teach --include-untracked and --only-untracked
      stash show: learn stash.showIncludeUntracked
      git-completion.bash: pass $__git_subcommand_idx from __git_main()
      git-completion.bash: extract from else in _git_stash()
      git-completion.bash: use __gitcomp_builtin() in _git_stash()
      git-completion.bash: separate some commands onto their own line
      git-completion.bash: rename to $__git_cmd_idx
      git-completion.bash: use $__git_cmd_idx in more places
      git-completion.bash: consolidate cases in _git_stash()
      t3905: correct test title
      stash show: fix segfault with --{include,only}-untracked
      stash show: use stash.showIncludeUntracked even when diff options given

Derrick Stolee (58):
      commit-graph: create local repository pointer
      commit-graph: use config to specify generation type
      csum-file: make hashwrite() more readable
      sparse-index: design doc and format update
      t/perf: add performance test for sparse operations
      t1092: clean up script quoting
      sparse-index: add guard to ensure full index
      sparse-index: implement ensure_full_index()
      t1092: compare sparse-checkout to sparse-index
      test-read-cache: print cache entries with --table
      test-tool: don't force full index
      unpack-trees: ensure full index
      sparse-checkout: hold pattern list in index
      sparse-index: add 'sdir' index extension
      sparse-index: convert from full to sparse
      submodule: sparse-index should not collapse links
      unpack-trees: allow sparse directories
      sparse-index: check index conversion happens
      sparse-index: add index.sparse config option
      sparse-checkout: toggle sparse index from builtin
      sparse-checkout: disable sparse-index
      cache-tree: integrate with sparse directory entries
      sparse-index: loose integration with cache_tree_verify()
      p2000: add sparse-index repos
      maintenance: simplify prefetch logic
      sparse-index: API protection strategy
      *: remove 'const' qualifier for struct index_state
      read-cache: expand on query into sparse-directory entry
      cache: move ensure_full_index() to cache.h
      add: ensure full index
      checkout-index: ensure full index
      checkout: ensure full index
      commit: ensure full index
      difftool: ensure full index
      fsck: ensure full index
      grep: ensure full index
      ls-files: ensure full index
      merge-index: ensure full index
      rm: ensure full index
      stash: ensure full index
      update-index: ensure full index
      dir: ensure full index
      entry: ensure full index
      merge-recursive: ensure full index
      pathspec: ensure full index
      read-cache: ensure full index
      resolve-undo: ensure full index
      revision: ensure full index
      name-hash: don't add directories to name_hash
      sparse-index: expand_to_path()
      name-hash: use expand_to_path()
      fetch: add --prefetch option
      maintenance: use 'git fetch --prefetch'
      maintenance: respect remote.*.skipFetchAll
      dir: update stale description of treat_directory()
      sparse-index: fix uninitialized jump
      t1092: use GIT_PROGRESS_DELAY for consistent results
      dir: update stale description of treat_directory()

Elijah Newren (50):
      diffcore-rename: use directory rename guided basename comparisons
      diffcore-rename: provide basic implementation of idx_possible_rename()
      diffcore-rename: add a mapping of destination names to their indices
      Move computation of dir_rename_count from merge-ort to diffcore-rename
      diffcore-rename: add function for clearing dir_rename_count
      diffcore-rename: move dir_rename_counts into dir_rename_info struct
      diffcore-rename: extend cleanup_dir_rename_info()
      diffcore-rename: compute dir_rename_counts in stages
      diffcore-rename: limit dir_rename_counts computation to relevant dirs
      diffcore-rename: compute dir_rename_guess from dir_rename_counts
      diffcore-rename: enable filtering possible rename sources
      merge-ort: precompute subset of sources for which we need rename detection
      merge-ort: add data structures for an alternate tree traversal
      merge-ort: introduce wrappers for alternate tree traversal
      merge-ort: precompute whether directory rename detection is needed
      merge-ort: use relevant_sources to filter possible rename sources
      merge-ort: skip rename detection entirely if possible
      diffcore-rename: avoid doing basename comparisons for irrelevant sources
      diffcore-rename: take advantage of "majority rules" to skip more renames
      merge-ort, diffcore-rename: tweak dirs_removed and relevant_source type
      merge-ort: record the reason that we want a rename for a directory
      diffcore-rename: only compute dir_rename_count for relevant directories
      diffcore-rename: check if we have enough renames for directories early on
      diffcore-rename: add computation of number of unknown renames
      merge-ort: record the reason that we want a rename for a file
      diffcore-rename: determine which relevant_sources are no longer relevant
      merge-ort: use STABLE_QSORT instead of QSORT where required
      merge-ort: add a special minimal index just for renormalization
      merge-ort: have ll_merge() use a special attr_index for renormalization
      merge-ort: let renormalization change modify/delete into clean delete
      merge-ort: support subtree shifting
      t6428: new test for SKIP_WORKTREE handling and conflicts
      merge-ort: implement CE_SKIP_WORKTREE handling with conflicted entries
      t: mark several submodule merging tests as fixed under merge-ort
      merge-ort: write $GIT_DIR/AUTO_MERGE whenever we hit a conflict
      merge-recursive: add a bunch of FIXME comments documenting known bugs
      Revert "merge-ort: ignore the directory rename split conflict for now"
      t6423: mark remaining expected failure under merge-ort as such
      Add testing with merge-ort merge strategy
      sequencer: fix edit handling for cherry-pick and revert messages
      dir: convert trace calls to trace2 equivalents
      dir: report number of visited directories and paths with trace2
      ls-files: error out on -i unless -o or -c are specified
      t7300: add testcase showing unnecessary traversal into ignored directory
      t3001, t7300: add testcase showcasing missed directory traversal
      dir: avoid unnecessary traversal into ignored directory
      dir: traverse into untracked directories if they may have ignored subfiles
      dir: introduce readdir_skip_dot_and_dotdot() helper
      git-prompt: work under set -u
      dir: introduce readdir_skip_dot_and_dotdot() helper

Eric Sunshine (1):
      merge(s): apply consistent punctuation to "up to date" messages

Eric Wong (1):
      remote-curl: fix clone on sha256 repos

Firmin Martin (1):
      user-manual.txt: assign preface an id and a title

Georgios Kontaxis (1):
      gitweb: add "e-mail privacy" feature to redact e-mail addresses

Han Xin (1):
      pack-objects: fix comment of reused_chunk.difference

Han-Wen Nienhuys (3):
      reftable: document an alternate cleanup method on Windows
      refs: print errno for read_raw_ref if GIT_TRACE_REFS is set
      refs/debug: trace into reflog expiry too

Jeff Hostetler (14):
      pkt-line: eliminate the need for static buffer in packet_write_gently()
      simple-ipc: design documentation for new IPC mechanism
      simple-ipc: add win32 implementation
      unix-socket: eliminate static unix_stream_socket() helper function
      unix-socket: add backlog size option to unix_stream_listen()
      unix-socket: disallow chdir() when creating unix domain sockets
      unix-stream-server: create unix domain socket under lock
      convert: make convert_attrs() and convert structs public
      convert: add [async_]convert_to_working_tree_ca() variants
      convert: add get_stream_filter_ca() variant
      convert: add classification for conv_attrs struct
      simple-ipc: add Unix domain socket implementation
      t0052: add simple-ipc tests and t/helper/test-simple-ipc tool
      simple-ipc: correct ifdefs when NO_PTHREADS is defined

Jeff King (43):
      add open_nofollow() helper
      attr: convert "macro_ok" into a flags field
      exclude: add flags parameter to add_patterns()
      attr: do not respect symlinks for in-tree .gitattributes
      exclude: do not respect symlinks for in-tree .gitignore
      mailmap: do not respect symlinks for in-tree .mailmap
      p5303: add missing &&-chains
      p5303: measure time to repack with keep
      builtin/pack-objects.c: rewrite honor-pack-keep logic
      packfile: add kept-pack cache for find_kept_pack_entry()
      t/perf: handle worktrees as test repos
      t/perf: avoid copying worktree files from test repo
      t7003: test ref rewriting explicitly
      filter-branch: drop multiple-ancestor warning
      filter-branch: drop $_x40 glob
      bisect: peel annotated tags to commits
      t: annotate !PTHREADS tests with !FAIL_PREREQS
      ref-filter: fix NULL check for parse object failure
      midx.c: improve cache locality in midx_pack_order_cmp()
      pack-objects: update "nr_seen" progress based on pack-reused count
      is_promisor_object(): free tree buffer after parsing
      lookup_unknown_object(): take a repository argument
      revision: avoid parsing with --exclude-promisor-objects
      pack-bitmap: clean up include_check after use
      prune: save reachable-from-recent objects with bitmaps
      t5300: modernize basic tests
      t5300: check that we produced expected number of deltas
      pack-objects: clamp negative window size to 0
      t5316: check behavior of pack-objects --depth=0
      pack-objects: clamp negative depth to 0
      docs/format-patch: mention handling of merges
      t7415: remove out-dated comment about translation
      fsck_tree(): fix shadowed variable
      fsck_tree(): wrap some long lines
      t7415: rename to expand scope
      t7450: test verify_path() handling of gitmodules
      t7450: test .gitmodules symlink matching against obscured names
      t0060: test ntfs/hfs-obscured dotfiles
      fsck: warn about symlinked dotfiles we'll open with O_NOFOLLOW
      docs: document symlink restrictions for dot-files
      t: avoid sed-based chain-linting in some expensive cases
      t5551: test http interaction with credential helpers
      Revert "remote-curl: fall back to basic auth if Negotiate fails"

Jerry Zhang (3):
      git-apply: try threeway first when "--3way" is used
      git-apply: allow simultaneous --cached and --3way options
      apply: adjust messages to account for --3way changes

Joachim Kuebart (2):
      git-p4: ensure complex branches are cloned correctly
      git-p4: speed up search for branch parent

Johannes Schindelin (10):
      pkt-line: do not issue flush packets in write_packetized_*()
      pkt-line: add PACKET_READ_GENTLE_ON_READ_ERROR option
      pkt-line: add options argument to read_packetized_to_strbuf()
      fsmonitor: fix memory corruption in some corner cases
      fsmonitor: do not forget to release the token in `discard_index()`
      SECURITY: describe how to report vulnerabilities
      Document how we do embargoed releases
      cmake: support SKIP_DASHED_BUILT_INS
      cmake: add a preparatory work-around to accommodate `vcpkg`
      msvc: avoid calling `access("NUL", flags)`

Johannes Sixt (1):
      t9001-send-email.sh: fix expected absolute paths on Windows

John Szakmeister (2):
      http: store credential when PKI auth is used
      http: drop the check for an empty proxy password before approving

Jonathan Tan (8):
      t5606: run clone branch name test with protocol v2
      fetch-pack: buffer object-format with other args
      fetch-pack: refactor process_acks()
      fetch-pack: refactor add_haves()
      fetch-pack: refactor command and capability write
      fetch: teach independent negotiation (no packfile)
      send-pack: support push negotiation
      t5601: mark protocol v2-only test

Josh Soref (1):
      merge: fix swapped "up to date" message components

Julien Richard (1):
      doc: .gitignore documentation typofix

Junio C Hamano (32):
      builtin/repack.c: reword comment around pack-objects flags
      xcalloc: use CALLOC_ARRAY() when applicable
      cocci: allow xcalloc(1, size)
      The first batch in 2.32 cycle
      The second batch
      format-patch: give an overview of what a "patch" message is
      The third patch
      Git 2.31.1
      The fourth batch
      The fifth batch
      The sixth batch
      The seventh batch
      The eighth batch
      The ninth batch
      doc: clarify "do not capitalize the first word" rule
      The tenth batch
      The eleventh (aka "ort") batch
      The twelfth batch
      The thirteenth batch
      CodingGuidelines: explicitly allow "local" for test scripts
      The fourteenth batch
      The fifteenth batch
      The sixteenth batch
      The seventeenth batch
      Git 2.32-rc0
      A handful more topics before -rc1
      Git 2.32-rc1
      t1092: revert the "-1" hack for emulating "no progress meter"
      Revert "dir: introduce readdir_skip_dot_and_dotdot() helper"
      Revert "dir: update stale description of treat_directory()"
      Git 2.32-rc2
      Git 2.32-rc3

Kyle Meyer (1):
      config.txt: add missing period

Li Linchao (1):
      builtin/clone.c: add --reject-shallow option

Louis Sautier (1):
      pretty: fix a typo in the documentation for %(trailers)

Luke Shumaker (30):
      .gitignore: ignore 'git-subtree' as a build artifact
      subtree: t7900: update for having the default branch name be 'main'
      subtree: t7900: use test-lib.sh's test_count
      subtree: t7900: use consistent formatting
      subtree: t7900: comment subtree_test_create_repo
      subtree: t7900: use 'test' for string equality
      subtree: t7900: delete some dead code
      subtree: t7900: fix 'verify one file change per commit'
      subtree: t7900: rename last_commit_message to last_commit_subject
      subtree: t7900: add a test for the -h flag
      subtree: t7900: add porcelain tests for 'pull' and 'push'
      subtree: don't have loose code outside of a function
      subtree: more consistent error propagation
      subtree: drop support for git < 1.7
      subtree: use `git merge-base --is-ancestor`
      subtree: use git-sh-setup's `say`
      subtree: use more explicit variable names for cmdline args
      subtree: use "$*" instead of "$@" as appropriate
      subtree: don't fuss with PATH
      subtree: use "^{commit}" instead of "^0"
      subtree: parse revs in individual cmd_ functions
      subtree: remove duplicate check
      subtree: add comments and sanity checks
      subtree: don't let debug and progress output clash
      subtree: have $indent actually affect indentation
      subtree: give the docs a once-over
      subtree: allow --squash to be used with --rejoin
      subtree: allow 'split' flags to be passed to 'push'
      subtree: push: allow specifying a local rev other than HEAD
      subtree: be stricter about validating flags

Lénaïc Huard (1):
      maintenance: fix two memory leaks

Martin Ågren (2):
      git-repack.txt: remove spurious ")"
      pretty-formats.txt: add missing space

Matheus Tavares (32):
      convert: fail gracefully upon missing clean cmd on required filter
      symlinks: update comment on threaded_check_leading_path()
      checkout: don't follow symlinks when removing entries
      entry: extract a header file for entry.c functions
      entry: make fstat_output() and read_blob_entry() public
      entry: extract update_ce_after_write() from write_entry()
      entry: move conv_attrs lookup up to checkout_entry()
      entry: add checkout_entry_ca() taking preloaded conv_attrs
      add: include magic part of pathspec on --refresh error
      t3705: add tests for `git add` in sparse checkouts
      add: make --chmod and --renormalize honor sparse checkouts
      pathspec: allow to ignore SKIP_WORKTREE entries on index matching
      refresh_index(): add flag to ignore SKIP_WORKTREE entries
      add: warn when asked to update SKIP_WORKTREE entries
      rm: honor sparse checkout patterns
      pkt-line: do not report packet write errors twice
      unpack-trees: add basic support for parallel checkout
      parallel-checkout: make it truly parallel
      parallel-checkout: add configuration options
      parallel-checkout: support progress displaying
      parallel-checkout: add design documentation
      make_transient_cache_entry(): optionally alloc from mem_pool
      builtin/checkout.c: complete parallel checkout support
      parallel-checkout: add tests related to path collisions
      t0028: extract encoding helpers to lib-encoding.sh
      checkout-index: add parallel checkout support
      parallel-checkout: add tests related to .gitattributes
      parallel-checkout: add tests for basic operations
      ci: run test round with parallel-checkout enabled
      clean: remove unnecessary variable
      init: fix bug regarding ~/ expansion in init.templateDir
      t2080: fix cp invocation to copy symlinks instead of following them

Nicholas Clark (1):
      submodule update: silence underlying fetch with "--quiet"

Nipunn Koorapati (3):
      fsmonitor: skip lstat deletion check during git diff-index
      fsmonitor: add assertion that fsmonitor is valid to check_removed
      fsmonitor: add perf test for git diff HEAD

Patrick Steinhardt (17):
      githooks.txt: replace mentions of SHA-1 specific properties
      githooks.txt: clarify documentation on reference-transaction hook
      pack-bitmap: avoid traversal of objects referenced by uninteresting tag
      uploadpack.txt: document implication of `uploadpackfilter.allow`
      revision: mark commit parents as NOT_USER_GIVEN
      list-objects: move tag processing into its own function
      list-objects: support filtering by tag and commit
      list-objects: implement object type filter
      pack-bitmap: implement object type filter
      pack-bitmap: implement combined filter
      rev-list: allow filtering of provided items
      config: rename `git_etc_config()`
      config: unify code paths to get global config paths
      config: allow overriding of global and system configuration
      t1300: fix unset of GIT_CONFIG_NOSYSTEM leaking into subsequent tests
      git.txt: fix synopsis of `--config-env` missing the equals sign
      git: support separate arg for `--config-env`'s value

Peter Oliver (1):
      doc: point to diff attribute in patch format docs

Phillip Wood (6):
      rebase -i: only write fixup-message when it's needed
      sequencer: factor out code to append squash message
      rebase -i: comment out squash!/fixup! subjects from squash message
      word diff: handle zero length matches
      patience diff: remove unnecessary string comparisons
      patience diff: remove unused variable

Rafael Silva (1):
      repack: avoid loosening promisor objects in partial clones

Ramkumar Ramachandra (1):
      Add entry for Ramkumar Ramachandra

Ramsay Jones (1):
      bisect--helper: use BISECT_TERMS in 'bisect skip' command

René Scharfe (12):
      pretty: add %(describe)
      pretty: add merge and exclude options to %(describe)
      t4205: assert %(describe) test coverage
      pretty: document multiple %(describe) being inconsistent
      fix xcalloc() argument order
      archive: expand only a single %(describe) per archive
      git-compat-util.h: drop trailing semicolon from macro definition
      use CALLOC_ARRAY
      vcs-svn: remove header files as well
      block-sha1: drop trailing semicolon from macro definition
      mem-pool: drop trailing semicolon from macro definition
      daemon: sanitize all directory separators

Robert Foss (1):
      git-send-email: Respect core.hooksPath setting

SZEDER Gábor (1):
      Makefile: add missing dependencies of 'config-list.h'

Sardorbek Imomaliev (1):
      work around zsh comment in __git_complete_worktree_paths

Sergey Organov (5):
      diff-merges: introduce --diff-merges=on
      diff-merges: refactor set_diff_merges()
      diff-merges: adapt -m to enable default diff format
      diff-merges: introduce log.diffMerges config variable
      doc/diff-options: document new --diff-merges features

Shubham Verma (1):
      t9801: replace test -f with test_path_is_file

Taylor Blau (28):
      packfile: introduce 'find_kept_pack_entry()'
      revision: learn '--no-kept-objects'
      builtin/pack-objects.c: add '--stdin-packs' option
      builtin/repack.c: add '--geometric' option
      builtin/repack.c: do not repack single packs with --geometric
      t7703: test --geometric repack with loose objects
      builtin/repack.c: assign pack split later
      builtin/repack.c: be more conservative with unsigned overflows
      Documentation/git-push.txt: correct configuration typo
      builtin/pack-objects.c: ignore missing links with --stdin-packs
      builtin/multi-pack-index.c: inline 'flags' with options
      builtin/multi-pack-index.c: don't handle 'progress' separately
      builtin/multi-pack-index.c: define common usage with a macro
      builtin/multi-pack-index.c: split sub-commands
      builtin/multi-pack-index.c: don't enter bogus cmd_mode
      builtin/multi-pack-index.c: display usage on unrecognized command
      t/helper/test-read-midx.c: add '--show-objects'
      pack-bitmap: add 'test_bitmap_commits()' helper
      t/helper/test-bitmap.c: initial commit
      builtin/pack-objects.c: respect 'pack.preferBitmapTips'
      midx: allow marking a pack as preferred
      midx: don't free midx_name early
      midx: keep track of the checksum
      midx: make some functions non-static
      Documentation/technical: describe multi-pack reverse indexes
      pack-revindex: read multi-pack reverse indexes
      pack-write.c: extract 'write_rev_file_order'
      pack-revindex: write multi-pack reverse indexes

Todd Zullinger (1):
      t7500: remove non-existant C_LOCALE_OUTPUT prereq

Torsten Bögershausen (3):
      git mv foo FOO ; git mv foo bar gave an assert
      precompose_utf8: make precompose_string_if_needed() public
      macOS: precompose startup_info->prefix

Ville Skyttä (2):
      completion: audit and guard $GIT_* against unset use
      completion: avoid aliased command lookup error in nounset mode

Will Chandler (1):
      refs: cleanup directories when deleting packed ref

Wolfgang Müller (1):
      rev-parse: fix segfault with missing --path-format argument

ZheNing Hu (8):
      commit: add --trailer option
      format-patch: allow a non-integral version numbers
      ref-filter: get rid of show_ref_array_item
      ref-filter: reuse output buffer
      pretty: provide human date format
      docs: correct descript of trailer.<token>.command
      trailer: add new .cmd config option
      ref-filter: fix read invalid union member bug

brian m. carlson (14):
      builtin/init-db: handle bare clones when core.bare set to false
      hash: add an algo member to struct object_id
      Always use oidread to read into struct object_id
      http-push: set algorithm when reading object ID
      hash: add a function to finalize object IDs
      Use the final_oid_fn to finalize hashing of object IDs
      builtin/pack-redundant: avoid casting buffers to struct object_id
      hash: set, copy, and use algo field in struct object_id
      hash: provide per-algorithm null OIDs
      builtin/show-index: set the algorithm for object IDs
      commit-graph: don't store file hashes as struct object_id
      builtin/pack-objects: avoid using struct object_id for pack hash
      hex: default to the_hash_algo on zero algorithm value
      hex: print objects using the hash algorithm member

Ævar Arnfjörð Bjarmason (97):
      grep/pcre2: drop needless assignment + assert() on opt->pcre2
      grep/pcre2: drop needless assignment to NULL
      grep/pcre2: correct reference to grep_init() in comment
      grep/pcre2: prepare to add debugging to pcre2_malloc()
      grep/pcre2: add GREP_PCRE2_DEBUG_MALLOC debug mode
      grep/pcre2: use compile-time PCREv2 version test
      grep/pcre2: use pcre2_maketables_free() function
      grep/pcre2: actually make pcre2 use custom allocator
      grep/pcre2: move back to thread-only PCREv2 structures
      grep/pcre2: move definitions of pcre2_{malloc,free}
      Makefile: guard against TEST_OBJS in the environment
      Makefile: split up long OBJECTS line
      Makefile: sort OBJECTS assignment for subsequent change
      Makefile: split OBJECTS into OBJECTS and GIT_OBJS
      Makefile: add {program,xdiff,test,git,fuzz}-objs & objects targets
      remote: add camel-cased *.tagOpt key, like clone
      remote: write camel-cased *.pushRemote on rename
      fsck.c: refactor and rename common config callback
      show tests: add test for "git show <tree>"
      ls-files tests: add meaningful --with-tree tests
      tree.c API: move read_tree() into builtin/ls-files.c
      ls-files: don't needlessly pass around stage variable
      ls-files: refactor away read_tree()
      archive: stop passing "stage" through read_tree_recursive()
      tree.h API: expose read_tree_1() as read_tree_at()
      tree.h API: simplify read_tree_recursive() signature
      diff --no-index tests: add test for --exit-code
      diff --no-index tests: test mode normalization
      rebase: remove transitory rebase.useBuiltin setting & env
      mktag tests: fix broken "&&" chain
      fsck.h: use designed initializers for FSCK_OPTIONS_{DEFAULT,STRICT}
      fsck.h: use "enum object_type" instead of "int"
      fsck.c: rename variables in fsck_set_msg_type() for less confusion
      fsck.c: remove (mostly) redundant append_msg_id() function
      fsck.c: rename remaining fsck_msg_id "id" to "msg_id"
      fsck.c: refactor fsck_msg_type() to limit scope of "int msg_type"
      fsck.h: move FSCK_{FATAL,INFO,ERROR,WARN,IGNORE} into an enum
      fsck.h: re-order and re-assign "enum fsck_msg_type"
      fsck.c: call parse_msg_type() early in fsck_set_msg_type()
      fsck.c: undefine temporary STR macro after use
      fsck.c: give "FOREACH_MSG_ID" a more specific name
      fsck.[ch]: move FOREACH_FSCK_MSG_ID & fsck_msg_id from *.c to *.h
      fsck.c: pass along the fsck_msg_id in the fsck_error callback
      fsck.c: add an fsck_set_msg_type() API that takes enums
      fsck.c: move gitmodules_{found,done} into fsck_options
      fetch-pack: don't needlessly copy fsck_options
      fetch-pack: use file-scope static struct for fsck_options
      fetch-pack: use new fsck API to printing dangling submodules
      Makefile: add QUIET_GEN to "tags" and "TAGS" targets
      git-send-email: replace "map" in void context with "for"
      git-send-email: test full --validate output
      git-send-email: refactor duplicate $? checks into a function
      git-send-email: improve --validate error output
      bash completion: complete CHERRY_PICK_HEAD
      config.c: remove last remnant of GIT_TEST_GETTEXT_POISON
      userdiff style: re-order drivers in alphabetical order
      userdiff style: declare patterns with consistent style
      userdiff style: normalize pascal regex declaration
      userdiff: add and use for_each_userdiff_driver()
      userdiff tests: explicitly test "default" pattern
      userdiff tests: list builtin drivers via test-tool
      userdiff: remove support for "broken" tests
      blame tests: don't rely on t/t4018/ directory
      blame tests: simplify userdiff driver test
      rebase tests: camel-case rebase.rescheduleFailedExec consistently
      rebase: don't override --no-reschedule-failed-exec with config
      Documentation/Makefile: make $(wildcard howto/*.txt) a var
      Documentation/Makefile: make doc.dep dependencies a variable again
      doc lint: Perl "strict" and "warnings" in lint-gitlink.perl
      doc lint: fix bugs in, simplify and improve lint script
      doc lint: lint and fix missing "GIT" end sections
      doc lint: lint relative section order
      docs: fix linting issues due to incorrect relative section order
      svn tests: remove legacy re-setup from init-clone test
      svn tests: refactor away a "set -e" in test body
      tests: remove all uses of test_i18cmp
      usage.c: don't copy/paste the same comment three times
      api docs: document BUG() in api-error-handling.txt
      api docs: document that BUG() emits a trace2 error event
      pretty tests: simplify %aI/%cI date format test
      pretty tests: give --date/format tests a better description
      sparse-index.c: remove set_index_sparse_config()
      streaming.c: avoid forward declarations
      streaming.c: remove enum/function/vtbl indirection
      streaming.c: remove {open,close,read}_method_decl() macros
      streaming.c: stop passing around "object_info *" to open()
      streaming.c: move {open,close,read} from vtable to "struct git_istream"
      Makefile: don't re-define PERL_DEFINES
      Makefile: regenerate perl/build/* if GIT-PERL-DEFINES changes
      Makefile: regenerate *.pm on NO_PERL_CPAN_FALLBACKS change
      perl: use mock i18n functions under NO_GETTEXT=Y
      Makefile: make PERL_DEFINES recursively expanded
      send-email: fix missing error message regression
      send-email: don't needlessly abs_path() the core.hooksPath
      send-email: move "hooks_path" invocation to git-send-email.perl
      pack-objects: move static inline from a header to the sole consumer
      builtin/fsck.c: don't conflate "int" and "enum" in callback

Øystein Walle (2):
      transport: respect verbosity when setting upstream
      add: die if both --dry-run and --interactive are given

Đoàn Trần Công Danh (6):
      mailinfo: load default metainfo_charset lazily
      mailinfo: stop parsing options manually
      mailinfo: warn if CRLF found in decoded base64/QP email
      mailinfo: allow squelching quoted CRLF warning
      mailinfo: allow stripping quoted CR without warning
      am: learn to process quoted lines that ends with CRLF


^ permalink raw reply	[relevance 3%]

* [ANNOUNCE] Git v2.32.0
@ 2021-06-06 12:40  3% Junio C Hamano
  0 siblings, 0 replies; 200+ results
From: Junio C Hamano @ 2021-06-06 12:40 UTC (permalink / raw)
  To: git; +Cc: Linux Kernel, git-packagers

The latest feature release Git v2.32.0 is now available at the
usual places.  It is comprised of 617 non-merge commits since
v2.31.0, contributed by 100 people, 35 of which are new faces [*].

The tarballs are found at:

    https://www.kernel.org/pub/software/scm/git/

The following public repositories all have a copy of the 'v2.32.0'
tag and the 'master' branch that the tag points at:

  url = https://git.kernel.org/pub/scm/git/git
  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.31.0 are as
follows.  Welcome to the Git development community!

  Adam Sharafeddine, Alexey Roslyakov, Andrey Bienkowski,
  Atharva Raykar, Bruno Albuquerque, Chinmoy Chakraborty,
  Christopher Schenk, Dan Moseley, David Emett, Dmitry Torilov,
  Fabien Terrani, Firmin Martin, Georgios Kontaxis, Jason Gore,
  Jerry Zhang, Joachim Kuebart, Joseph Vusich, Josh Soref,
  Julien Richard, Li Linchao, Louis Sautier, Luke Shumaker,
  Matheus Tavares Bernardino, Nicholas Clark, Peter Oliver,
  Renato Botelho, rlespinasse, Robert Foss, RyotaK, Sardorbek
  Imomaliev, Tom Saeger, Vincent Tam, Will Chandler, Wolfgang
  Müller, and Yiyuan guo.

Returning contributors who helped this release are as follows.
Thanks for your continued support.

  Adam Dinwoodie, Ævar Arnfjörð Bjarmason, Alexander Shopov,
  Alex Henrie, Andrzej Hunt, Bagas Sanjaya, Ben Humphreys, brian
  m. carlson, Charvi Mendiratta, Christian Couder, Christopher Diaz
  Riveros, Daniel Santos, David Aguilar, Dennis Ameling, Denton
  Liu, Derrick Stolee, Đoàn Trần Công Danh, Elijah Newren,
  Emir Sarı, Eric Sunshine, Eric Wong, Han-Wen Nienhuys, Han Xin,
  Jean-Noël Avila, Jeff Hostetler, Jeff King, Jiang Xin, Johannes
  Schindelin, Johannes Sixt, John Szakmeister, Jonathan Nieder,
  Jonathan Tan, Jordi Mas, Junio C Hamano, Kyle Meyer, Lénaïc
  Huard, Luke Diamand, Marc Branchaud, Martin Ågren, Matheus
  Tavares, Matthias Rüster, Nguyễn Thái Ngọc Duy, Nipunn
  Koorapati, Øystein Walle, Patrick Steinhardt, Peter Krefting,
  Phillip Wood, Rafael Silva, Ralf Thielow, Ramkumar Ramachandra,
  Ramsay Jones, Randall S. Becker, René Scharfe, Sergey Organov,
  Shubham Verma, Son Luong Ngoc, SZEDER Gábor, Taylor Blau,
  Todd Zullinger, Torsten Bögershausen, Trần Ngọc Quân,
  Trygve Aaberge, Ville Skyttä, Yi-Jyun Pan, and ZheNing Hu.

[*] We are counting not just the authorship contribution but issue
    reporting, mentoring, helping and reviewing that are recorded in
    the commit trailers.

----------------------------------------------------------------

Git 2.32 Release Notes
======================

Backward compatibility notes
----------------------------

 * ".gitattributes", ".gitignore", and ".mailmap" files that are
   symbolic links are ignored.

 * "git apply --3way" used to first attempt a straight application,
   and only fell back to the 3-way merge algorithm when the stright
   application failed.  Starting with this version, the command will
   first try the 3-way merge algorithm and only when it fails (either
   resulting with conflict or the base versions of blobs are missing),
   falls back to the usual patch application.


Updates since v2.31
-------------------

UI, Workflows & Features

 * It does not make sense to make ".gitattributes", ".gitignore" and
   ".mailmap" symlinks, as they are supposed to be usable from the
   object store (think: bare repositories where HEAD:.mailmap etc. are
   used).  When these files are symbolic links, we used to read the
   contents of the files pointed by them by mistake, which has been
   corrected.

 * "git stash show" learned to optionally show untracked part of the
   stash.

 * "git log --format='...'" learned "%(describe)" placeholder.

 * "git repack" so far has been only capable of repacking everything
   under the sun into a single pack (or split by size).  A cleverer
   strategy to reduce the cost of repacking a repository has been
   introduced.

 * The http codepath learned to let the credential layer to cache the
   password used to unlock a certificate that has successfully been
   used.

 * "git commit --fixup=<commit>", which was to tweak the changes made
   to the contents while keeping the original log message intact,
   learned "--fixup=(amend|reword):<commit>", that can be used to
   tweak both the message and the contents, and only the message,
   respectively.

 * "git send-email" learned to honor the core.hooksPath configuration.

 * "git format-patch -v<n>" learned to allow a reroll count that is
   not an integer.

 * "git commit" learned "--trailer <key>[=<value>]" option; together
   with the interpret-trailers command, this will make it easier to
   support custom trailers.

 * "git clone --reject-shallow" option fails the clone as soon as we
   notice that we are cloning from a shallow repository.

 * A configuration variable has been added to force tips of certain
   refs to be given a reachability bitmap.

 * "gitweb" learned "e-mail privacy" feature to redact strings that
   look like e-mail addresses on various pages.

 * "git apply --3way" has always been "to fall back to 3-way merge
   only when straight application fails". Swap the order of falling
   back so that 3-way is always attempted first (only when the option
   is given, of course) and then straight patch application is used as
   a fallback when it fails.

 * "git apply" now takes "--3way" and "--cached" at the same time, and
   work and record results only in the index.

 * The command line completion (in contrib/) has learned that
   CHERRY_PICK_HEAD is a possible pseudo-ref.

 * Userdiff patterns for "Scheme" has been added.

 * "git log" learned "--diff-merges=<style>" option, with an
   associated configuration variable log.diffMerges.

 * "git log --format=..." placeholders learned %ah/%ch placeholders to
   request the --date=human output.

 * Replace GIT_CONFIG_NOSYSTEM mechanism to decline from reading the
   system-wide configuration file with GIT_CONFIG_SYSTEM that lets
   users specify from which file to read the system-wide configuration
   (setting it to an empty file would essentially be the same as
   setting NOSYSTEM), and introduce GIT_CONFIG_GLOBAL to override the
   per-user configuration in $HOME/.gitconfig.

 * "git add" and "git rm" learned not to touch those paths that are
   outside of sparse checkout.

 * "git rev-list" learns the "--filter=object:type=<type>" option,
   which can be used to exclude objects of the given kind from the
   packfile generated by pack-objects.

 * The command line completion (in contrib/) for "git stash" has been
   updated.

 * "git subtree" updates.

 * It is now documented that "format-patch" skips merges.

 * Options to "git pack-objects" that take numeric values like
   --window and --depth should not accept negative values; the input
   validation has been tightened.

 * The way the command line specified by the trailer.<token>.command
   configuration variable receives the end-user supplied value was
   both error prone and misleading.  An alternative to achieve the
   same goal in a safer and more intuitive way has been added, as
   the trailer.<token>.cmd configuration variable, to replace it.

 * "git add -i --dry-run" does not dry-run, which was surprising.  The
   combination of options has taught to error out.

 * "git push" learns to discover common ancestor with the receiving
   end over protocol v2.  This will hopefully make "git push" as
   efficient as "git fetch" in avoiding objects from getting
   transferred unnecessarily.

 * "git mailinfo" (hence "git am") learned the "--quoted-cr" option to
   control how lines ending with CRLF wrapped in base64 or qp are
   handled.


Performance, Internal Implementation, Development Support etc.

 * Rename detection rework continues.

 * GIT_TEST_FAIL_PREREQS is a mechanism to skip test pieces with
   prerequisites to catch broken tests that depend on the side effects
   of optional pieces, but did not work at all when negative
   prerequisites were involved.
   (merge 27d578d904 jk/fail-prereq-testfix later to maint).

 * "git diff-index" codepath has been taught to trust fsmonitor status
   to reduce number of lstat() calls.
   (merge 7e5aa13d2c nk/diff-index-fsmonitor later to maint).

 * Reorganize Makefile to allow building git.o and other essential
   objects without extra stuff needed only for testing.

 * Preparatory API changes for parallel checkout.

 * A simple IPC interface gets introduced to build services like
   fsmonitor on top.

 * Fsck API clean-up.

 * SECURITY.md that is facing individual contributors and end users
   has been introduced.  Also a procedure to follow when preparing
   embargoed releases has been spelled out.
   (merge 09420b7648 js/security-md later to maint).

 * Optimize "rev-list --use-bitmap-index --objects" corner case that
   uses negative tags as the stopping points.

 * CMake update for vsbuild.

 * An on-disk reverse-index to map the in-pack location of an object
   back to its object name across multiple packfiles is introduced.

 * Generate [ec]tags under $(QUIET_GEN).

 * Clean-up codepaths that implements "git send-email --validate"
   option and improves the message from it.

 * The last remnant of gettext-poison has been removed.

 * The test framework has been taught to optionally turn the default
   merge strategy to "ort" throughout the system where we use
   three-way merges internally, like cherry-pick, rebase etc.,
   primarily to enhance its test coverage (the strategy has been
   available as an explicit "-s ort" choice).

 * A bit of code clean-up and a lot of test clean-up around userdiff
   area.

 * Handling of "promisor packs" that allows certain objects to be
   missing and lazily retrievable has been optimized (a bit).

 * When packet_write() fails, we gave an extra error message
   unnecessarily, which has been corrected.

 * The checkout machinery has been taught to perform the actual
   write-out of the files in parallel when able.

 * Show errno in the trace output in the error codepath that calls
   read_raw_ref method.

 * Effort to make the command line completion (in contrib/) safe with
   "set -u" continues.

 * Tweak a few tests for "log --format=..." that show timestamps in
   various formats.

 * The reflog expiry machinery has been taught to emit trace events.

 * Over-the-wire protocol learns a new request type to ask for object
   sizes given a list of object names.


Fixes since v2.31
-----------------

 * The fsmonitor interface read from its input without making sure
   there is something to read from.  This bug is new in 2.31
   timeframe.

 * The data structure used by fsmonitor interface was not properly
   duplicated during an in-core merge, leading to use-after-free etc.

 * "git bisect" reimplemented more in C during 2.30 timeframe did not
   take an annotated tag as a good/bad endpoint well.  This regression
   has been corrected.

 * Fix macros that can silently inject unintended null-statements.

 * CALLOC_ARRAY() macro replaces many uses of xcalloc().

 * Update insn in Makefile comments to run fuzz-all target.

 * Fix a corner case bug in "git mv" on case insensitive systems,
   which was introduced in 2.29 timeframe.

 * We had a code to diagnose and die cleanly when a required
   clean/smudge filter is missing, but an assert before that
   unnecessarily fired, hiding the end-user facing die() message.
   (merge 6fab35f748 mt/cleanly-die-upon-missing-required-filter later to maint).

 * Update C code that sets a few configuration variables when a remote
   is configured so that it spells configuration variable names in the
   canonical camelCase.
   (merge 0f1da600e6 ab/remote-write-config-in-camel-case later to maint).

 * A new configuration variable has been introduced to allow choosing
   which version of the generation number gets used in the
   commit-graph file.
   (merge 702110aac6 ds/commit-graph-generation-config later to maint).

 * Perf test update to work better in secondary worktrees.
   (merge 36e834abc1 jk/perf-in-worktrees later to maint).

 * Updates to memory allocation code around the use of pcre2 library.
   (merge c1760352e0 ab/grep-pcre2-allocfix later to maint).

 * "git -c core.bare=false clone --bare ..." would have segfaulted,
   which has been corrected.
   (merge 75555676ad bc/clone-bare-with-conflicting-config later to maint).

 * When "git checkout" removes a path that does not exist in the
   commit it is checking out, it wasn't careful enough not to follow
   symbolic links, which has been corrected.
   (merge fab78a0c3d mt/checkout-remove-nofollow later to maint).

 * A few option description strings started with capital letters,
   which were corrected.
   (merge 5ee90326dc cc/downcase-opt-help later to maint).

 * Plug or annotate remaining leaks that trigger while running the
   very basic set of tests.
   (merge 68ffe095a2 ah/plugleaks later to maint).

 * The hashwrite() API uses a buffering mechanism to avoid calling
   write(2) too frequently. This logic has been refactored to be
   easier to understand.
   (merge ddaf1f62e3 ds/clarify-hashwrite later to maint).

 * "git cherry-pick/revert" with or without "--[no-]edit" did not spawn
   the editor as expected (e.g. "revert --no-edit" after a conflict
   still asked to edit the message), which has been corrected.
   (merge 39edfd5cbc en/sequencer-edit-upon-conflict-fix later to maint).

 * "git daemon" has been tightened against systems that take backslash
   as directory separator.
   (merge 9a7f1ce8b7 rs/daemon-sanitize-dir-sep later to maint).

 * A NULL-dereference bug has been corrected in an error codepath in
   "git for-each-ref", "git branch --list" etc.
   (merge c685450880 jk/ref-filter-segfault-fix later to maint).

 * Streamline the codepath to fix the UTF-8 encoding issues in the
   argv[] and the prefix on macOS.
   (merge c7d0e61016 tb/precompose-prefix-simplify later to maint).

 * The command-line completion script (in contrib/) had a couple of
   references that would have given a warning under the "-u" (nounset)
   option.
   (merge c5c0548d79 vs/completion-with-set-u later to maint).

 * When "git pack-objects" makes a literal copy of a part of existing
   packfile using the reachability bitmaps, its update to the progress
   meter was broken.
   (merge 8e118e8490 jk/pack-objects-bitmap-progress-fix later to maint).

 * The dependencies for config-list.h and command-list.h were broken
   when the former was split out of the latter, which has been
   corrected.
   (merge 56550ea718 sg/bugreport-fixes later to maint).

 * "git push --quiet --set-upstream" was not quiet when setting the
   upstream branch configuration, which has been corrected.
   (merge f3cce896a8 ow/push-quiet-set-upstream later to maint).

 * The prefetch task in "git maintenance" assumed that "git fetch"
   from any remote would fetch all its local branches, which would
   fetch too much if the user is interested in only a subset of
   branches there.
   (merge 32f67888d8 ds/maintenance-prefetch-fix later to maint).

 * Clarify that pathnames recorded in Git trees are most often (but
   not necessarily) encoded in UTF-8.
   (merge 9364bf465d ab/pathname-encoding-doc later to maint).

 * "git --config-env var=val cmd" weren't accepted (only
   --config-env=var=val was).
   (merge c331551ccf ps/config-env-option-with-separate-value later to maint).

 * When the reachability bitmap is in effect, the "do not lose
   recently created objects and those that are reachable from them"
   safety to protect us from races were disabled by mistake, which has
   been corrected.
   (merge 2ba582ba4c jk/prune-with-bitmap-fix later to maint).

 * Cygwin pathname handling fix.
   (merge bccc37fdc7 ad/cygwin-no-backslashes-in-paths later to maint).

 * "git rebase --[no-]reschedule-failed-exec" did not work well with
   its configuration variable, which has been corrected.
   (merge e5b32bffd1 ab/rebase-no-reschedule-failed-exec later to maint).

 * Portability fix for command line completion script (in contrib/).
   (merge f2acf763e2 si/zsh-complete-comment-fix later to maint).

 * "git repack -A -d" in a partial clone unnecessarily loosened
   objects in promisor pack.

 * "git bisect skip" when custom words are used for new/old did not
   work, which has been corrected.

 * A few variants of informational message "Already up-to-date" has
   been rephrased.
   (merge ad9322da03 js/merge-already-up-to-date-message-reword later to maint).

 * "git submodule update --quiet" did not propagate the quiet option
   down to underlying "git fetch", which has been corrected.
   (merge 62af4bdd42 nc/submodule-update-quiet later to maint).

 * Document that our test can use "local" keyword.
   (merge a84fd3bcc6 jc/test-allows-local later to maint).

 * The word-diff mode has been taught to work better with a word
   regexp that can match an empty string.
   (merge 0324e8fc6b pw/word-diff-zero-width-matches later to maint).

 * "git p4" learned to find branch points more efficiently.
   (merge 6b79818bfb jk/p4-locate-branch-point-optim later to maint).

 * When "git update-ref -d" removes a ref that is packed, it left
   empty directories under $GIT_DIR/refs/ for
   (merge 5f03e5126d wc/packed-ref-removal-cleanup later to maint).

 * "git clean" and "git ls-files -i" had confusion around working on
   or showing ignored paths inside an ignored directory, which has
   been corrected.
   (merge b548f0f156 en/dir-traversal later to maint).

 * The handling of "%(push)" formatting element of "for-each-ref" and
   friends was broken when the same codepath started handling
   "%(push:<what>)", which has been corrected.
   (merge 1e1c4c5eac zh/ref-filter-push-remote-fix later to maint).

 * The bash prompt script (in contrib/) did not work under "set -u".
   (merge 5c0cbdb107 en/prompt-under-set-u later to maint).

 * The "chainlint" feature in the test framework is a handy way to
   catch common mistakes in writing new tests, but tends to get
   expensive.  An knob to selectively disable it has been introduced
   to help running tests that the developer has not modified.
   (merge 2d86a96220 jk/test-chainlint-softer later to maint).

 * The "rev-parse" command did not diagnose the lack of argument to
   "--path-format" option, which was introduced in v2.31 era, which
   has been corrected.
   (merge 99fc555188 wm/rev-parse-path-format-wo-arg later to maint).

 * Other code cleanup, docfix, build fix, etc.
   (merge f451960708 dl/cat-file-doc-cleanup later to maint).
   (merge 12604a8d0c sv/t9801-test-path-is-file-cleanup later to maint).
   (merge ea7e63921c jr/doc-ignore-typofix later to maint).
   (merge 23c781f173 ps/update-ref-trans-hook-doc later to maint).
   (merge 42efa1231a jk/filter-branch-sha256 later to maint).
   (merge 4c8e3dca6e tb/push-simple-uses-branch-merge-config later to maint).
   (merge 6534d436a2 bs/asciidoctor-installation-hints later to maint).
   (merge 47957485b3 ab/read-tree later to maint).
   (merge 2be927f3d1 ab/diff-no-index-tests later to maint).
   (merge 76593c09bb ab/detox-gettext-tests later to maint).
   (merge 28e29ee38b jc/doc-format-patch-clarify later to maint).
   (merge fc12b6fdde fm/user-manual-use-preface later to maint).
   (merge dba94e3a85 cc/test-helper-bloom-usage-fix later to maint).
   (merge 61a7660516 hn/reftable-tables-doc-update later to maint).
   (merge 81ed96a9b2 jt/fetch-pack-request-fix later to maint).
   (merge 151b6c2dd7 jc/doc-do-not-capitalize-clarification later to maint).
   (merge 9160068ac6 js/access-nul-emulation-on-windows later to maint).
   (merge 7a14acdbe6 po/diff-patch-doc later to maint).
   (merge f91371b948 pw/patience-diff-clean-up later to maint).
   (merge 3a7f0908b6 mt/clean-clean later to maint).
   (merge d4e2d15a8b ab/streaming-simplify later to maint).
   (merge 0e59f7ad67 ah/merge-ort-i18n later to maint).
   (merge e6f68f62e0 ls/typofix later to maint).

----------------------------------------------------------------

Changes since v2.31.0 are as follows:

Adam Dinwoodie (1):
      cygwin: disallow backslashes in file names

Alex Henrie (2):
      merge-ort: split "distinct types" message into two translatable messages
      l10n: Update Catalan translation

Alexander Shopov (1):
      l10n: bg.po: Updated Bulgarian translation (5204t)

Alexey Roslyakov (1):
      l10n: ru.po: fix typo in Russian translation

Andrey Bienkowski (1):
      doc: clarify the filename encoding in git diff

Andrzej Hunt (24):
      Makefile: update 'make fuzz-all' docs to reflect modern clang
      symbolic-ref: don't leak shortened refname in check_symref()
      reset: free instead of leaking unneeded ref
      clone: free or UNLEAK further pointers when finished
      worktree: fix leak in dwim_branch()
      init: remove git_init_db_config() while fixing leaks
      init-db: silence template_dir leak when converting to absolute path
      fsmonitor: avoid global-buffer-overflow READ when checking trivial response
      parse-options: convert bitfield values to use binary shift
      parse-options: don't leak alias help messages
      transport: also free remote_refs in transport_disconnect()
      merge-ort: only do pointer arithmetic for non-empty lists
      revision: free remainder of old commit list in limit_list
      wt-status: fix multiple small leaks
      ls-files: free max_prefix when done
      bloom: clear each bloom_key after use
      branch: FREE_AND_NULL instead of NULL'ing real_ref
      builtin/bugreport: don't leak prefixed filename
      builtin/check-ignore: clear_pathspec before returning
      builtin/checkout: clear pending objects after diffing
      mailinfo: also free strbuf lists when clearing mailinfo
      builtin/for-each-ref: free filter and UNLEAK sorting.
      builtin/rebase: release git_format_patch_opt too
      builtin/rm: avoid leaking pathspec and seen

Atharva Raykar (1):
      userdiff: add support for Scheme

Bagas Sanjaya (6):
      INSTALL: note on using Asciidoctor to build doc
      l10n: id: po-id for 2.32.0 (round 1)
      l10n: README: document git-po-helper
      l10n: README: document "core translation"
      l10n: README: document l10n conventions
      l10n: README: note on fuzzy translations

Bruno Albuquerque (1):
      object-info: support for retrieving object info

Charvi Mendiratta (23):
      sequencer: pass todo_item to do_pick_commit()
      sequencer: use const variable for commit message comments
      rebase -i: add fixup [-C | -c] command
      t3437: test script for fixup [-C|-c] options in interactive rebase
      rebase -i: teach --autosquash to work with amend!
      doc/git-rebase: add documentation for fixup [-C|-c] options
      sequencer: fixup the datatype of the 'flag' argument
      sequencer: rename a few functions
      rebase -i: clarify and fix 'fixup -c' rebase-todo help
      t/lib-rebase: update the documentation of FAKE_LINES
      t/t3437: fixup here-docs in the 'setup' test
      t/t3437: remove the dependency of 'expected-message' file from tests
      t/t3437: check the author date of fixed up commit
      t/t3437: simplify and document the test helpers
      t/t3437: use named commits in the tests
      t/t3437: fixup the test 'multiple fixup -c opens editor once'
      doc/rebase -i: fix typo in the documentation of 'fixup' command
      sequencer: export and rename subject_length()
      commit: add amend suboption to --fixup to create amend! commit
      commit: add a reword suboption to --fixup
      t7500: add tests for --fixup=[amend|reword] options
      t3437: use --fixup with options to create amend! commit
      doc/git-commit: add documentation for fixup=[amend|reword] options

Chinmoy Chakraborty (1):
      column, range-diff: downcase option description

Christian Couder (1):
      test-bloom: fix missing 'bloom' from usage string

Christopher Diaz Riveros (1):
      l10n: es: 2.32.0 round 1

Christopher Schenk (1):
      remote-curl: fall back to basic auth if Negotiate fails

Daniel Santos (2):
      l10n: pt_PT: add Portuguese translations part 2
      l10n: pt_PT: add Portuguese translations part 3

David Aguilar (1):
      contrib/completion: fix zsh completion regression from 59d85a2a05

Dennis Ameling (2):
      cmake(install): fix double .exe suffixes
      cmake(install): include vcpkg dlls

Denton Liu (14):
      git-cat-file.txt: monospace args, placeholders and filenames
      git-cat-file.txt: remove references to "sha1"
      stash show: teach --include-untracked and --only-untracked
      stash show: learn stash.showIncludeUntracked
      git-completion.bash: pass $__git_subcommand_idx from __git_main()
      git-completion.bash: extract from else in _git_stash()
      git-completion.bash: use __gitcomp_builtin() in _git_stash()
      git-completion.bash: separate some commands onto their own line
      git-completion.bash: rename to $__git_cmd_idx
      git-completion.bash: use $__git_cmd_idx in more places
      git-completion.bash: consolidate cases in _git_stash()
      t3905: correct test title
      stash show: fix segfault with --{include,only}-untracked
      stash show: use stash.showIncludeUntracked even when diff options given

Derrick Stolee (58):
      commit-graph: create local repository pointer
      commit-graph: use config to specify generation type
      csum-file: make hashwrite() more readable
      sparse-index: design doc and format update
      t/perf: add performance test for sparse operations
      t1092: clean up script quoting
      sparse-index: add guard to ensure full index
      sparse-index: implement ensure_full_index()
      t1092: compare sparse-checkout to sparse-index
      test-read-cache: print cache entries with --table
      test-tool: don't force full index
      unpack-trees: ensure full index
      sparse-checkout: hold pattern list in index
      sparse-index: add 'sdir' index extension
      sparse-index: convert from full to sparse
      submodule: sparse-index should not collapse links
      unpack-trees: allow sparse directories
      sparse-index: check index conversion happens
      sparse-index: add index.sparse config option
      sparse-checkout: toggle sparse index from builtin
      sparse-checkout: disable sparse-index
      cache-tree: integrate with sparse directory entries
      sparse-index: loose integration with cache_tree_verify()
      p2000: add sparse-index repos
      maintenance: simplify prefetch logic
      sparse-index: API protection strategy
      *: remove 'const' qualifier for struct index_state
      read-cache: expand on query into sparse-directory entry
      cache: move ensure_full_index() to cache.h
      add: ensure full index
      checkout-index: ensure full index
      checkout: ensure full index
      commit: ensure full index
      difftool: ensure full index
      fsck: ensure full index
      grep: ensure full index
      ls-files: ensure full index
      merge-index: ensure full index
      rm: ensure full index
      stash: ensure full index
      update-index: ensure full index
      dir: ensure full index
      entry: ensure full index
      merge-recursive: ensure full index
      pathspec: ensure full index
      read-cache: ensure full index
      resolve-undo: ensure full index
      revision: ensure full index
      name-hash: don't add directories to name_hash
      sparse-index: expand_to_path()
      name-hash: use expand_to_path()
      fetch: add --prefetch option
      maintenance: use 'git fetch --prefetch'
      maintenance: respect remote.*.skipFetchAll
      dir: update stale description of treat_directory()
      sparse-index: fix uninitialized jump
      t1092: use GIT_PROGRESS_DELAY for consistent results
      dir: update stale description of treat_directory()

Elijah Newren (50):
      diffcore-rename: use directory rename guided basename comparisons
      diffcore-rename: provide basic implementation of idx_possible_rename()
      diffcore-rename: add a mapping of destination names to their indices
      Move computation of dir_rename_count from merge-ort to diffcore-rename
      diffcore-rename: add function for clearing dir_rename_count
      diffcore-rename: move dir_rename_counts into dir_rename_info struct
      diffcore-rename: extend cleanup_dir_rename_info()
      diffcore-rename: compute dir_rename_counts in stages
      diffcore-rename: limit dir_rename_counts computation to relevant dirs
      diffcore-rename: compute dir_rename_guess from dir_rename_counts
      diffcore-rename: enable filtering possible rename sources
      merge-ort: precompute subset of sources for which we need rename detection
      merge-ort: add data structures for an alternate tree traversal
      merge-ort: introduce wrappers for alternate tree traversal
      merge-ort: precompute whether directory rename detection is needed
      merge-ort: use relevant_sources to filter possible rename sources
      merge-ort: skip rename detection entirely if possible
      diffcore-rename: avoid doing basename comparisons for irrelevant sources
      diffcore-rename: take advantage of "majority rules" to skip more renames
      merge-ort, diffcore-rename: tweak dirs_removed and relevant_source type
      merge-ort: record the reason that we want a rename for a directory
      diffcore-rename: only compute dir_rename_count for relevant directories
      diffcore-rename: check if we have enough renames for directories early on
      diffcore-rename: add computation of number of unknown renames
      merge-ort: record the reason that we want a rename for a file
      diffcore-rename: determine which relevant_sources are no longer relevant
      merge-ort: use STABLE_QSORT instead of QSORT where required
      merge-ort: add a special minimal index just for renormalization
      merge-ort: have ll_merge() use a special attr_index for renormalization
      merge-ort: let renormalization change modify/delete into clean delete
      merge-ort: support subtree shifting
      t6428: new test for SKIP_WORKTREE handling and conflicts
      merge-ort: implement CE_SKIP_WORKTREE handling with conflicted entries
      t: mark several submodule merging tests as fixed under merge-ort
      merge-ort: write $GIT_DIR/AUTO_MERGE whenever we hit a conflict
      merge-recursive: add a bunch of FIXME comments documenting known bugs
      Revert "merge-ort: ignore the directory rename split conflict for now"
      t6423: mark remaining expected failure under merge-ort as such
      Add testing with merge-ort merge strategy
      sequencer: fix edit handling for cherry-pick and revert messages
      dir: convert trace calls to trace2 equivalents
      dir: report number of visited directories and paths with trace2
      ls-files: error out on -i unless -o or -c are specified
      t7300: add testcase showing unnecessary traversal into ignored directory
      t3001, t7300: add testcase showcasing missed directory traversal
      dir: avoid unnecessary traversal into ignored directory
      dir: traverse into untracked directories if they may have ignored subfiles
      dir: introduce readdir_skip_dot_and_dotdot() helper
      git-prompt: work under set -u
      dir: introduce readdir_skip_dot_and_dotdot() helper

Emir Sarı (1):
      l10n: tr: v2.32.0-r1

Eric Sunshine (1):
      merge(s): apply consistent punctuation to "up to date" messages

Eric Wong (1):
      remote-curl: fix clone on sha256 repos

Firmin Martin (1):
      user-manual.txt: assign preface an id and a title

Georgios Kontaxis (1):
      gitweb: add "e-mail privacy" feature to redact e-mail addresses

Han Xin (1):
      pack-objects: fix comment of reused_chunk.difference

Han-Wen Nienhuys (3):
      reftable: document an alternate cleanup method on Windows
      refs: print errno for read_raw_ref if GIT_TRACE_REFS is set
      refs/debug: trace into reflog expiry too

Jean-Noël Avila (1):
      l10n: fr: v2.32.0 round 1

Jeff Hostetler (14):
      pkt-line: eliminate the need for static buffer in packet_write_gently()
      simple-ipc: design documentation for new IPC mechanism
      simple-ipc: add win32 implementation
      unix-socket: eliminate static unix_stream_socket() helper function
      unix-socket: add backlog size option to unix_stream_listen()
      unix-socket: disallow chdir() when creating unix domain sockets
      unix-stream-server: create unix domain socket under lock
      convert: make convert_attrs() and convert structs public
      convert: add [async_]convert_to_working_tree_ca() variants
      convert: add get_stream_filter_ca() variant
      convert: add classification for conv_attrs struct
      simple-ipc: add Unix domain socket implementation
      t0052: add simple-ipc tests and t/helper/test-simple-ipc tool
      simple-ipc: correct ifdefs when NO_PTHREADS is defined

Jeff King (43):
      add open_nofollow() helper
      attr: convert "macro_ok" into a flags field
      exclude: add flags parameter to add_patterns()
      attr: do not respect symlinks for in-tree .gitattributes
      exclude: do not respect symlinks for in-tree .gitignore
      mailmap: do not respect symlinks for in-tree .mailmap
      p5303: add missing &&-chains
      p5303: measure time to repack with keep
      builtin/pack-objects.c: rewrite honor-pack-keep logic
      packfile: add kept-pack cache for find_kept_pack_entry()
      t/perf: handle worktrees as test repos
      t/perf: avoid copying worktree files from test repo
      t7003: test ref rewriting explicitly
      filter-branch: drop multiple-ancestor warning
      filter-branch: drop $_x40 glob
      bisect: peel annotated tags to commits
      t: annotate !PTHREADS tests with !FAIL_PREREQS
      ref-filter: fix NULL check for parse object failure
      midx.c: improve cache locality in midx_pack_order_cmp()
      pack-objects: update "nr_seen" progress based on pack-reused count
      is_promisor_object(): free tree buffer after parsing
      lookup_unknown_object(): take a repository argument
      revision: avoid parsing with --exclude-promisor-objects
      pack-bitmap: clean up include_check after use
      prune: save reachable-from-recent objects with bitmaps
      t5300: modernize basic tests
      t5300: check that we produced expected number of deltas
      pack-objects: clamp negative window size to 0
      t5316: check behavior of pack-objects --depth=0
      pack-objects: clamp negative depth to 0
      docs/format-patch: mention handling of merges
      t7415: remove out-dated comment about translation
      fsck_tree(): fix shadowed variable
      fsck_tree(): wrap some long lines
      t7415: rename to expand scope
      t7450: test verify_path() handling of gitmodules
      t7450: test .gitmodules symlink matching against obscured names
      t0060: test ntfs/hfs-obscured dotfiles
      fsck: warn about symlinked dotfiles we'll open with O_NOFOLLOW
      docs: document symlink restrictions for dot-files
      t: avoid sed-based chain-linting in some expensive cases
      t5551: test http interaction with credential helpers
      Revert "remote-curl: fall back to basic auth if Negotiate fails"

Jerry Zhang (3):
      git-apply: try threeway first when "--3way" is used
      git-apply: allow simultaneous --cached and --3way options
      apply: adjust messages to account for --3way changes

Jiang Xin (4):
      l10n: git.pot: v2.32.0 round 1 (126 new, 26 removed)
      l10n: fix typos in po/TEAMS
      l10n: README: add file extention ".md"
      l10n: zh_CN: for git v2.32.0 l10n round 1

Joachim Kuebart (2):
      git-p4: ensure complex branches are cloned correctly
      git-p4: speed up search for branch parent

Johannes Schindelin (10):
      pkt-line: do not issue flush packets in write_packetized_*()
      pkt-line: add PACKET_READ_GENTLE_ON_READ_ERROR option
      pkt-line: add options argument to read_packetized_to_strbuf()
      fsmonitor: fix memory corruption in some corner cases
      fsmonitor: do not forget to release the token in `discard_index()`
      SECURITY: describe how to report vulnerabilities
      Document how we do embargoed releases
      cmake: support SKIP_DASHED_BUILT_INS
      cmake: add a preparatory work-around to accommodate `vcpkg`
      msvc: avoid calling `access("NUL", flags)`

Johannes Sixt (1):
      t9001-send-email.sh: fix expected absolute paths on Windows

John Szakmeister (2):
      http: store credential when PKI auth is used
      http: drop the check for an empty proxy password before approving

Jonathan Tan (8):
      t5606: run clone branch name test with protocol v2
      fetch-pack: buffer object-format with other args
      fetch-pack: refactor process_acks()
      fetch-pack: refactor add_haves()
      fetch-pack: refactor command and capability write
      fetch: teach independent negotiation (no packfile)
      send-pack: support push negotiation
      t5601: mark protocol v2-only test

Jordi Mas (1):
      l10n: Update Catalan translation

Josh Soref (1):
      merge: fix swapped "up to date" message components

Julien Richard (1):
      doc: .gitignore documentation typofix

Junio C Hamano (34):
      builtin/repack.c: reword comment around pack-objects flags
      xcalloc: use CALLOC_ARRAY() when applicable
      cocci: allow xcalloc(1, size)
      The first batch in 2.32 cycle
      The second batch
      format-patch: give an overview of what a "patch" message is
      The third patch
      Git 2.31.1
      The fourth batch
      The fifth batch
      The sixth batch
      The seventh batch
      The eighth batch
      The ninth batch
      doc: clarify "do not capitalize the first word" rule
      The tenth batch
      The eleventh (aka "ort") batch
      The twelfth batch
      The thirteenth batch
      CodingGuidelines: explicitly allow "local" for test scripts
      The fourteenth batch
      The fifteenth batch
      The sixteenth batch
      The seventeenth batch
      Git 2.32-rc0
      A handful more topics before -rc1
      Git 2.32-rc1
      t1092: revert the "-1" hack for emulating "no progress meter"
      Revert "dir: introduce readdir_skip_dot_and_dotdot() helper"
      Revert "dir: update stale description of treat_directory()"
      Git 2.32-rc2
      Git 2.32-rc3
      fsync(): be prepared to see EINTR
      Git 2.32

Kyle Meyer (1):
      config.txt: add missing period

Li Linchao (1):
      builtin/clone.c: add --reject-shallow option

Louis Sautier (1):
      pretty: fix a typo in the documentation for %(trailers)

Luke Shumaker (30):
      .gitignore: ignore 'git-subtree' as a build artifact
      subtree: t7900: update for having the default branch name be 'main'
      subtree: t7900: use test-lib.sh's test_count
      subtree: t7900: use consistent formatting
      subtree: t7900: comment subtree_test_create_repo
      subtree: t7900: use 'test' for string equality
      subtree: t7900: delete some dead code
      subtree: t7900: fix 'verify one file change per commit'
      subtree: t7900: rename last_commit_message to last_commit_subject
      subtree: t7900: add a test for the -h flag
      subtree: t7900: add porcelain tests for 'pull' and 'push'
      subtree: don't have loose code outside of a function
      subtree: more consistent error propagation
      subtree: drop support for git < 1.7
      subtree: use `git merge-base --is-ancestor`
      subtree: use git-sh-setup's `say`
      subtree: use more explicit variable names for cmdline args
      subtree: use "$*" instead of "$@" as appropriate
      subtree: don't fuss with PATH
      subtree: use "^{commit}" instead of "^0"
      subtree: parse revs in individual cmd_ functions
      subtree: remove duplicate check
      subtree: add comments and sanity checks
      subtree: don't let debug and progress output clash
      subtree: have $indent actually affect indentation
      subtree: give the docs a once-over
      subtree: allow --squash to be used with --rejoin
      subtree: allow 'split' flags to be passed to 'push'
      subtree: push: allow specifying a local rev other than HEAD
      subtree: be stricter about validating flags

Lénaïc Huard (1):
      maintenance: fix two memory leaks

Martin Ågren (2):
      git-repack.txt: remove spurious ")"
      pretty-formats.txt: add missing space

Matheus Tavares (32):
      convert: fail gracefully upon missing clean cmd on required filter
      symlinks: update comment on threaded_check_leading_path()
      checkout: don't follow symlinks when removing entries
      entry: extract a header file for entry.c functions
      entry: make fstat_output() and read_blob_entry() public
      entry: extract update_ce_after_write() from write_entry()
      entry: move conv_attrs lookup up to checkout_entry()
      entry: add checkout_entry_ca() taking preloaded conv_attrs
      add: include magic part of pathspec on --refresh error
      t3705: add tests for `git add` in sparse checkouts
      add: make --chmod and --renormalize honor sparse checkouts
      pathspec: allow to ignore SKIP_WORKTREE entries on index matching
      refresh_index(): add flag to ignore SKIP_WORKTREE entries
      add: warn when asked to update SKIP_WORKTREE entries
      rm: honor sparse checkout patterns
      pkt-line: do not report packet write errors twice
      unpack-trees: add basic support for parallel checkout
      parallel-checkout: make it truly parallel
      parallel-checkout: add configuration options
      parallel-checkout: support progress displaying
      parallel-checkout: add design documentation
      make_transient_cache_entry(): optionally alloc from mem_pool
      builtin/checkout.c: complete parallel checkout support
      parallel-checkout: add tests related to path collisions
      t0028: extract encoding helpers to lib-encoding.sh
      checkout-index: add parallel checkout support
      parallel-checkout: add tests related to .gitattributes
      parallel-checkout: add tests for basic operations
      ci: run test round with parallel-checkout enabled
      clean: remove unnecessary variable
      init: fix bug regarding ~/ expansion in init.templateDir
      t2080: fix cp invocation to copy symlinks instead of following them

Matthias Rüster (1):
      l10n: de.po: Update German translation for Git v2.32.0

Nicholas Clark (1):
      submodule update: silence underlying fetch with "--quiet"

Nipunn Koorapati (3):
      fsmonitor: skip lstat deletion check during git diff-index
      fsmonitor: add assertion that fsmonitor is valid to check_removed
      fsmonitor: add perf test for git diff HEAD

Patrick Steinhardt (17):
      githooks.txt: replace mentions of SHA-1 specific properties
      githooks.txt: clarify documentation on reference-transaction hook
      pack-bitmap: avoid traversal of objects referenced by uninteresting tag
      uploadpack.txt: document implication of `uploadpackfilter.allow`
      revision: mark commit parents as NOT_USER_GIVEN
      list-objects: move tag processing into its own function
      list-objects: support filtering by tag and commit
      list-objects: implement object type filter
      pack-bitmap: implement object type filter
      pack-bitmap: implement combined filter
      rev-list: allow filtering of provided items
      config: rename `git_etc_config()`
      config: unify code paths to get global config paths
      config: allow overriding of global and system configuration
      t1300: fix unset of GIT_CONFIG_NOSYSTEM leaking into subsequent tests
      git.txt: fix synopsis of `--config-env` missing the equals sign
      git: support separate arg for `--config-env`'s value

Peter Krefting (1):
      l10n: sv.po: Update Swedish translation (5204t0f0u)

Peter Oliver (1):
      doc: point to diff attribute in patch format docs

Phillip Wood (6):
      rebase -i: only write fixup-message when it's needed
      sequencer: factor out code to append squash message
      rebase -i: comment out squash!/fixup! subjects from squash message
      word diff: handle zero length matches
      patience diff: remove unnecessary string comparisons
      patience diff: remove unused variable

Rafael Silva (1):
      repack: avoid loosening promisor objects in partial clones

Ramkumar Ramachandra (1):
      Add entry for Ramkumar Ramachandra

Ramsay Jones (1):
      bisect--helper: use BISECT_TERMS in 'bisect skip' command

René Scharfe (13):
      pretty: add %(describe)
      pretty: add merge and exclude options to %(describe)
      t4205: assert %(describe) test coverage
      pretty: document multiple %(describe) being inconsistent
      fix xcalloc() argument order
      archive: expand only a single %(describe) per archive
      git-compat-util.h: drop trailing semicolon from macro definition
      use CALLOC_ARRAY
      vcs-svn: remove header files as well
      block-sha1: drop trailing semicolon from macro definition
      mem-pool: drop trailing semicolon from macro definition
      daemon: sanitize all directory separators
      parallel-checkout: avoid dash local bug in tests

Robert Foss (1):
      git-send-email: Respect core.hooksPath setting

SZEDER Gábor (1):
      Makefile: add missing dependencies of 'config-list.h'

Sardorbek Imomaliev (1):
      work around zsh comment in __git_complete_worktree_paths

Sergey Organov (5):
      diff-merges: introduce --diff-merges=on
      diff-merges: refactor set_diff_merges()
      diff-merges: adapt -m to enable default diff format
      diff-merges: introduce log.diffMerges config variable
      doc/diff-options: document new --diff-merges features

Shubham Verma (1):
      t9801: replace test -f with test_path_is_file

Taylor Blau (28):
      packfile: introduce 'find_kept_pack_entry()'
      revision: learn '--no-kept-objects'
      builtin/pack-objects.c: add '--stdin-packs' option
      builtin/repack.c: add '--geometric' option
      builtin/repack.c: do not repack single packs with --geometric
      t7703: test --geometric repack with loose objects
      builtin/repack.c: assign pack split later
      builtin/repack.c: be more conservative with unsigned overflows
      Documentation/git-push.txt: correct configuration typo
      builtin/pack-objects.c: ignore missing links with --stdin-packs
      builtin/multi-pack-index.c: inline 'flags' with options
      builtin/multi-pack-index.c: don't handle 'progress' separately
      builtin/multi-pack-index.c: define common usage with a macro
      builtin/multi-pack-index.c: split sub-commands
      builtin/multi-pack-index.c: don't enter bogus cmd_mode
      builtin/multi-pack-index.c: display usage on unrecognized command
      t/helper/test-read-midx.c: add '--show-objects'
      pack-bitmap: add 'test_bitmap_commits()' helper
      t/helper/test-bitmap.c: initial commit
      builtin/pack-objects.c: respect 'pack.preferBitmapTips'
      midx: allow marking a pack as preferred
      midx: don't free midx_name early
      midx: keep track of the checksum
      midx: make some functions non-static
      Documentation/technical: describe multi-pack reverse indexes
      pack-revindex: read multi-pack reverse indexes
      pack-write.c: extract 'write_rev_file_order'
      pack-revindex: write multi-pack reverse indexes

Todd Zullinger (1):
      t7500: remove non-existant C_LOCALE_OUTPUT prereq

Torsten Bögershausen (3):
      git mv foo FOO ; git mv foo bar gave an assert
      precompose_utf8: make precompose_string_if_needed() public
      macOS: precompose startup_info->prefix

Trần Ngọc Quân (1):
      l10n: vi.po(5204t): Updated Vietnamese translation for v2.32.0

Ville Skyttä (2):
      completion: audit and guard $GIT_* against unset use
      completion: avoid aliased command lookup error in nounset mode

Vincent Tam (1):
      l10n: fr.po fixed inconsistencies

Will Chandler (1):
      refs: cleanup directories when deleting packed ref

Wolfgang Müller (1):
      rev-parse: fix segfault with missing --path-format argument

Yi-Jyun Pan (2):
      l10n: zh_TW.po: v2.32.0 round 1 (11 untranslated)
      l10n: zh_TW.po: localized

ZheNing Hu (8):
      commit: add --trailer option
      format-patch: allow a non-integral version numbers
      ref-filter: get rid of show_ref_array_item
      ref-filter: reuse output buffer
      pretty: provide human date format
      docs: correct descript of trailer.<token>.command
      trailer: add new .cmd config option
      ref-filter: fix read invalid union member bug

brian m. carlson (14):
      builtin/init-db: handle bare clones when core.bare set to false
      hash: add an algo member to struct object_id
      Always use oidread to read into struct object_id
      http-push: set algorithm when reading object ID
      hash: add a function to finalize object IDs
      Use the final_oid_fn to finalize hashing of object IDs
      builtin/pack-redundant: avoid casting buffers to struct object_id
      hash: set, copy, and use algo field in struct object_id
      hash: provide per-algorithm null OIDs
      builtin/show-index: set the algorithm for object IDs
      commit-graph: don't store file hashes as struct object_id
      builtin/pack-objects: avoid using struct object_id for pack hash
      hex: default to the_hash_algo on zero algorithm value
      hex: print objects using the hash algorithm member

rlespinasse (1):
      l10n: fr: fixed inconsistencies

Ævar Arnfjörð Bjarmason (97):
      grep/pcre2: drop needless assignment + assert() on opt->pcre2
      grep/pcre2: drop needless assignment to NULL
      grep/pcre2: correct reference to grep_init() in comment
      grep/pcre2: prepare to add debugging to pcre2_malloc()
      grep/pcre2: add GREP_PCRE2_DEBUG_MALLOC debug mode
      grep/pcre2: use compile-time PCREv2 version test
      grep/pcre2: use pcre2_maketables_free() function
      grep/pcre2: actually make pcre2 use custom allocator
      grep/pcre2: move back to thread-only PCREv2 structures
      grep/pcre2: move definitions of pcre2_{malloc,free}
      Makefile: guard against TEST_OBJS in the environment
      Makefile: split up long OBJECTS line
      Makefile: sort OBJECTS assignment for subsequent change
      Makefile: split OBJECTS into OBJECTS and GIT_OBJS
      Makefile: add {program,xdiff,test,git,fuzz}-objs & objects targets
      remote: add camel-cased *.tagOpt key, like clone
      remote: write camel-cased *.pushRemote on rename
      fsck.c: refactor and rename common config callback
      show tests: add test for "git show <tree>"
      ls-files tests: add meaningful --with-tree tests
      tree.c API: move read_tree() into builtin/ls-files.c
      ls-files: don't needlessly pass around stage variable
      ls-files: refactor away read_tree()
      archive: stop passing "stage" through read_tree_recursive()
      tree.h API: expose read_tree_1() as read_tree_at()
      tree.h API: simplify read_tree_recursive() signature
      diff --no-index tests: add test for --exit-code
      diff --no-index tests: test mode normalization
      rebase: remove transitory rebase.useBuiltin setting & env
      mktag tests: fix broken "&&" chain
      fsck.h: use designed initializers for FSCK_OPTIONS_{DEFAULT,STRICT}
      fsck.h: use "enum object_type" instead of "int"
      fsck.c: rename variables in fsck_set_msg_type() for less confusion
      fsck.c: remove (mostly) redundant append_msg_id() function
      fsck.c: rename remaining fsck_msg_id "id" to "msg_id"
      fsck.c: refactor fsck_msg_type() to limit scope of "int msg_type"
      fsck.h: move FSCK_{FATAL,INFO,ERROR,WARN,IGNORE} into an enum
      fsck.h: re-order and re-assign "enum fsck_msg_type"
      fsck.c: call parse_msg_type() early in fsck_set_msg_type()
      fsck.c: undefine temporary STR macro after use
      fsck.c: give "FOREACH_MSG_ID" a more specific name
      fsck.[ch]: move FOREACH_FSCK_MSG_ID & fsck_msg_id from *.c to *.h
      fsck.c: pass along the fsck_msg_id in the fsck_error callback
      fsck.c: add an fsck_set_msg_type() API that takes enums
      fsck.c: move gitmodules_{found,done} into fsck_options
      fetch-pack: don't needlessly copy fsck_options
      fetch-pack: use file-scope static struct for fsck_options
      fetch-pack: use new fsck API to printing dangling submodules
      Makefile: add QUIET_GEN to "tags" and "TAGS" targets
      git-send-email: replace "map" in void context with "for"
      git-send-email: test full --validate output
      git-send-email: refactor duplicate $? checks into a function
      git-send-email: improve --validate error output
      bash completion: complete CHERRY_PICK_HEAD
      config.c: remove last remnant of GIT_TEST_GETTEXT_POISON
      userdiff style: re-order drivers in alphabetical order
      userdiff style: declare patterns with consistent style
      userdiff style: normalize pascal regex declaration
      userdiff: add and use for_each_userdiff_driver()
      userdiff tests: explicitly test "default" pattern
      userdiff tests: list builtin drivers via test-tool
      userdiff: remove support for "broken" tests
      blame tests: don't rely on t/t4018/ directory
      blame tests: simplify userdiff driver test
      rebase tests: camel-case rebase.rescheduleFailedExec consistently
      rebase: don't override --no-reschedule-failed-exec with config
      Documentation/Makefile: make $(wildcard howto/*.txt) a var
      Documentation/Makefile: make doc.dep dependencies a variable again
      doc lint: Perl "strict" and "warnings" in lint-gitlink.perl
      doc lint: fix bugs in, simplify and improve lint script
      doc lint: lint and fix missing "GIT" end sections
      doc lint: lint relative section order
      docs: fix linting issues due to incorrect relative section order
      svn tests: remove legacy re-setup from init-clone test
      svn tests: refactor away a "set -e" in test body
      tests: remove all uses of test_i18cmp
      usage.c: don't copy/paste the same comment three times
      api docs: document BUG() in api-error-handling.txt
      api docs: document that BUG() emits a trace2 error event
      pretty tests: simplify %aI/%cI date format test
      pretty tests: give --date/format tests a better description
      sparse-index.c: remove set_index_sparse_config()
      streaming.c: avoid forward declarations
      streaming.c: remove enum/function/vtbl indirection
      streaming.c: remove {open,close,read}_method_decl() macros
      streaming.c: stop passing around "object_info *" to open()
      streaming.c: move {open,close,read} from vtable to "struct git_istream"
      Makefile: don't re-define PERL_DEFINES
      Makefile: regenerate perl/build/* if GIT-PERL-DEFINES changes
      Makefile: regenerate *.pm on NO_PERL_CPAN_FALLBACKS change
      perl: use mock i18n functions under NO_GETTEXT=Y
      Makefile: make PERL_DEFINES recursively expanded
      send-email: fix missing error message regression
      send-email: don't needlessly abs_path() the core.hooksPath
      send-email: move "hooks_path" invocation to git-send-email.perl
      pack-objects: move static inline from a header to the sole consumer
      builtin/fsck.c: don't conflate "int" and "enum" in callback

Øystein Walle (2):
      transport: respect verbosity when setting upstream
      add: die if both --dry-run and --interactive are given

Đoàn Trần Công Danh (6):
      mailinfo: load default metainfo_charset lazily
      mailinfo: stop parsing options manually
      mailinfo: warn if CRLF found in decoded base64/QP email
      mailinfo: allow squelching quoted CRLF warning
      mailinfo: allow stripping quoted CR without warning
      am: learn to process quoted lines that ends with CRLF


^ permalink raw reply	[relevance 3%]

* [PATCH] add_pending_object_with_path(): work around "gcc -O3" complaint
@ 2021-06-10 13:06  1% Jeff King
  0 siblings, 0 replies; 200+ results
From: Jeff King @ 2021-06-10 13:06 UTC (permalink / raw)
  To: git; +Cc: Ævar Arnfjörð Bjarmason

When compiling with -O3, some gcc versions (10.2.1 here) complain about
an out-of-bounds subscript:

  revision.c: In function ‘do_add_index_objects_to_pending’:
  revision.c:321:22: error: array subscript [1, 2147483647] is outside array bounds of ‘char[1]’ [-Werror=array-bounds]
    321 |   if (0 < len && name[len] && buf.len)
        |                  ~~~~^~~~~

The "len" parameter here comes from calling interpret_branch_name(),
which intends to return the number of characters of "name" it parsed.

But the compiler doesn't realize this. It knows the size of the empty
string "name" passed in from do_add_index_objects_to_pending(), but it
has no clue that the "len" we get back will be constrained to "0" in
that case.

And I don't think the warning is telling us about some subtle or clever
bug. The implementation of interpret_branch_name() is in another file
entirely, and the compiler can't see it (you can even verify there is no
clever LTO going on by replacing it with "return 0" and still getting
the warning).

We can work around this by replacing our "did we hit the trailing NUL"
subscript dereference with a length check. We do not even have to pay
the cost for an extra strlen(), as we can pass our new length into
interpret_branch_name(), which was converting our "0" into a call to
strlen() anyway.

Signed-off-by: Jeff King <peff@peff.net>
---
Together with ab/trace2-squelch-gcc-warning and the ll-merge fix I
posted in [0], this makes the whole project compile cleanly with "-O3"
for me.

I suspect after this patch we could drop the "if len is 0, call strlen()
as a courtesy" code from interpret_branch_name() entirely. But the call
stack gets pretty hairy (some of these len values come directly from
the get_oid functions directly!) so I wasn't brave enough to follow
through on that.

It's even possible the current code in interpret_branch_name() could be
buggy here, if some caller is using a non-NUL-terminated buffer or a
portion of a string, and we mistake a true "0" size for a request to
call strlen(). That might be worth poking at, but I didn't want to spend
time on it just now.

[0] https://lore.kernel.org/git/YMIKwsEFnkqz6PWa@coredump.intra.peff.net/

 revision.c | 5 +++--
 1 file changed, 3 insertions(+), 2 deletions(-)

diff --git a/revision.c b/revision.c
index 8140561b6c..cddd0542a6 100644
--- a/revision.c
+++ b/revision.c
@@ -316,9 +316,10 @@ static void add_pending_object_with_path(struct rev_info *revs,
 		revs->no_walk = 0;
 	if (revs->reflog_info && obj->type == OBJ_COMMIT) {
 		struct strbuf buf = STRBUF_INIT;
-		int len = interpret_branch_name(name, 0, &buf, &options);
+		size_t namelen = strlen(name);
+		int len = interpret_branch_name(name, namelen, &buf, &options);
 
-		if (0 < len && name[len] && buf.len)
+		if (0 < len && len < namelen && buf.len)
 			strbuf_addstr(&buf, name + len);
 		add_reflog_for_walk(revs->reflog_info,
 				    (struct commit *)obj,
-- 
2.32.0.529.g079a794268

^ permalink raw reply related	[relevance 1%]

* [PATCH 0/4] merge: cleanups and fix
@ 2021-06-13 22:58  3% Felipe Contreras
  2021-06-13 22:58  2% ` [PATCH 2/4] merge: fix Yoda conditions Felipe Contreras
  0 siblings, 1 reply; 200+ results
From: Felipe Contreras @ 2021-06-13 22:58 UTC (permalink / raw)
  To: git; +Cc: Jeff King, Junio C Hamano, Felipe Contreras

Investigating a crash with the proposed zdiff3 [1] I found some easy
improvements in the merge/xmerge code and one crash fix.

These should not cause any functional changes, even the fix doesn't
affect any current code-paths.

[1] https://lore.kernel.org/git/YMYnVWSEgxvKRU9j@coredump.intra.peff.net/

Felipe Contreras (4):
  merge: simplify initialization
  merge: fix Yoda conditions
  xdiff/xmerge: simplify xdl_recs_copy_0
  xdiff/xmerge: fix chg0 initialization

 builtin/merge-file.c |  8 ++------
 xdiff/xmerge.c       | 30 ++++++++++++++++--------------
 2 files changed, 18 insertions(+), 20 deletions(-)

-- 
2.32.0


^ permalink raw reply	[relevance 3%]

* [PATCH 2/4] merge: fix Yoda conditions
  2021-06-13 22:58  3% [PATCH 0/4] merge: cleanups and fix Felipe Contreras
@ 2021-06-13 22:58  2% ` Felipe Contreras
  0 siblings, 0 replies; 200+ results
From: Felipe Contreras @ 2021-06-13 22:58 UTC (permalink / raw)
  To: git; +Cc: Jeff King, Junio C Hamano, Felipe Contreras

Signed-off-by: Felipe Contreras <felipe.contreras@gmail.com>
---
 builtin/merge-file.c | 2 +-
 xdiff/xmerge.c       | 6 +++---
 2 files changed, 4 insertions(+), 4 deletions(-)

diff --git a/builtin/merge-file.c b/builtin/merge-file.c
index 0186f4156a..6affccaf19 100644
--- a/builtin/merge-file.c
+++ b/builtin/merge-file.c
@@ -51,7 +51,7 @@ int cmd_merge_file(int argc, const char **argv, const char *prefix)
 	if (startup_info->have_repository) {
 		/* Read the configuration file */
 		git_config(git_xmerge_config, NULL);
-		if (0 <= git_xmerge_style)
+		if (git_xmerge_style >= 0)
 			xmp.style = git_xmerge_style;
 	}
 
diff --git a/xdiff/xmerge.c b/xdiff/xmerge.c
index 1659edb453..ab3448ca88 100644
--- a/xdiff/xmerge.c
+++ b/xdiff/xmerge.c
@@ -487,7 +487,7 @@ static int xdl_do_merge(xdfenv_t *xe1, xdchange_t *xscr1,
 		 * "diff3 -m" output does not make sense for anything
 		 * more aggressive than XDL_MERGE_EAGER.
 		 */
-		if (XDL_MERGE_EAGER < level)
+		if (level > XDL_MERGE_EAGER)
 			level = XDL_MERGE_EAGER;
 	}
 
@@ -603,10 +603,10 @@ static int xdl_do_merge(xdfenv_t *xe1, xdchange_t *xscr1,
 	if (!changes)
 		changes = c;
 	/* refine conflicts */
-	if (XDL_MERGE_ZEALOUS <= level &&
+	if (level >= XDL_MERGE_ZEALOUS &&
 	    (xdl_refine_conflicts(xe1, xe2, changes, xpp) < 0 ||
 	     xdl_simplify_non_conflicts(xe1, changes,
-					XDL_MERGE_ZEALOUS < level) < 0)) {
+					level > XDL_MERGE_ZEALOUS) < 0)) {
 		xdl_cleanup_merge(changes);
 		return -1;
 	}
-- 
2.32.0


^ permalink raw reply related	[relevance 2%]

* Re: 'git pull' complains that a locally resurrected directory would be overwritten by merge when no pulled changes are affecting that directory
  @ 2021-08-25 15:42  3%   ` Elijah Newren
  0 siblings, 0 replies; 200+ results
From: Elijah Newren @ 2021-08-25 15:42 UTC (permalink / raw)
  To: Jeff King; +Cc: Yuri, Git Mailing List

On Tue, Aug 24, 2021 at 6:09 PM Jeff King <peff@peff.net> wrote:
>
> On Tue, Aug 24, 2021 at 09:41:49AM -0700, Yuri wrote:
>
> > In the FreeBSD ports repository I resurrected the directory (that was
> > removed a long time ago) with the command:
> >
> > > $ git checkout {hash}~1 -- math/polymake
> >
> >
> > I made local changes to this directory and called 'git add math/polymake'.
> >
> > Then 'git pull' complained:
> >
> > > $ git pull
> > > error: Your local changes to the following files would be overwritten by
> > merge:
> > >   math/polymake/Makefile math/polymake/distinfo
> > math/polymake/files/patch-Makefile
> > math/polymake/files/patch-support_install.pl math/polymake/pkg-descr
> > math/polymake/pkg-plist
> >
> >
> > No incoming changes affect math/polymake. Nobody has created this directory
> > simultaneously with me. There is no intersection with incoming changes.
> >
> >
> > Why does 'git pull' complain then?
>
> It's hard to say without seeing a full example. The merge machinery is
> supposed to handle this situation (and indeed, in a simple reproduction
> example it does). So presumably it thinks the other side may have
> touched those files for some reason. Perhaps it's confused by rename
> detection?
>
> Is it possible to give us a more complete example, including:
>
>   - a url for the repository
>   - the commit at HEAD when you ran "git checkout"
>   - the {hash} commit from which you rescued the files
>   - the state of the remote branch (i.e., what we attempted to merge
>     with "git pull")
>
> ?

The `git checkout {hash}~1 -- math/polymake` is enough to highlight
that Yuri doesn't just have local changes (which the merge machinery
should allow if the incoming changes don't touch the same files), but
local *staged* changes.  As per the merge manpage:

"""
To avoid recording unrelated changes in the merge commit, git pull and
git merge will also abort if there are any changes registered in the
index relative to the HEAD commit.
"""

While this particular example could theoretically be handled by the
merge machinery without requiring the index match HEAD, at least with
the new ort backend (it'd be way too complex with the recursive
backend, see below), in practice I'm so sick of index != HEAD bugs
that I have zero motivation to even consider it and I might even NAK
patches from others who attempted it.  For why, let me quote from the
commit message of 9822175d2b ("Ensure index matches head before
invoking merge machinery, round N", 2019-08-17), which also references
another commit that I'm tempted to also quote:

"""
Ensure index matches head before invoking merge machinery, round N

This is the bug that just won't die; there always seems to be another
form of it somewhere.  See the commit message of 55f39cf7551b ("merge:
fix misleading pre-merge check documentation", 2018-06-30) for a more
detailed explanation), but in short:

<quick summary>

builtin/merge.c contains this important requirement for merge
strategies:

    ...the index must be in sync with the head commit.  The strategies are
    responsible to ensure this.

This condition is important to enforce because there are two likely
failure cases when the index isn't in sync with the head commit:

  * we silently throw away changes the user had staged before the merge

  * we accidentally (and silently) include changes in the merge that
    were not part of either of the branches/trees being merged

Discarding users' work and mis-merging are both bad outcomes, especially
when done silently, so naturally this rule was stated sternly -- but,
unfortunately totally ignored in practice unless and until actual bugs
were found.  But, fear not: the bugs from this were fixed in commit
  ee6566e8d70d ("[PATCH] Rewrite read-tree", 2005-09-05)
through a rewrite of read-tree (again, commit 55f39cf7551b has a more
detailed explanation of how this affected merge).  And it was fixed
again in commit
  160252f81626 ("git-merge-ours: make sure our index matches HEAD", 2005-11-03)
...and it was fixed again in commit
  3ec62ad9ffba ("merge-octopus: abort if index does not match HEAD", 2016-04-09)
...and again in commit
  65170c07d466 ("merge-recursive: avoid incorporating uncommitted
changes in a merge", 2017-12-21)
...and again in commit
  eddd1a411d93 ("merge-recursive: enforce rule that index matches head
before merging", 2018-06-30)

...with multiple testcases added to the testsuite that could be
enumerated in even more commits.

Then, finally, in a patch in the same series as the last fix above, the
documentation about this requirement was fixed in commit 55f39cf7551b
("merge: fix misleading pre-merge check documentation", 2018-06-30), and
we all lived happily ever after...

</quick summary>

Unfortunately, "ever after" apparently denotes a limited time and it
expired today.
"""

and then the commit message goes on to explain multiple other bugs
found and fixed due to not strictly enforcing that the index needs to
match HEAD before starting a merge.

^ permalink raw reply	[relevance 3%]

* Re: [PATCH] t7900: add '--scheduler=launchctl' parameter to fix test
  @ 2021-08-31 15:59  2%     ` Junio C Hamano
  0 siblings, 0 replies; 200+ results
From: Junio C Hamano @ 2021-08-31 15:59 UTC (permalink / raw)
  To: Ramsay Jones; +Cc: Derrick Stolee, Lénaïc Huard, GIT Mailing-list

Ramsay Jones <ramsay@ramsayjones.plus.com> writes:

> On 30/08/2021 17:02, Junio C Hamano wrote:
>> Ramsay Jones <ramsay@ramsayjones.plus.com> writes:
>> 
> [snip]
>> 
>> This test comes from outside Lénaïc's series.  I guess I am seeing a
>> botched semantic merge conflict resolution of mine where the two
>> topics met.
>
> Oops! :( My apologies to you both.
>
> My build of 'seen' had two test failures (t5319.19 and this one), and
> I had to be somewhere else in about 30 mins ...
>
> I should know by now not to rush out a patch ... Sorry to have wasted
> your time.

No, the input was very valuable to me.  Neither topic has enough to
solve the issue because the new test got created in the topic that
does not yet have the --scheduler option in the "git maintenance"
command, and the other topic that added the option does not yet have
the test yet.

Unless one topic is made to build on the other, it is a semantic
context for me to resolve.

Hopefully what is near the tip of 'seen' now has the merge fix.

THanks.


^ permalink raw reply	[relevance 2%]

* [PATCH 0/2] Fix some old memory leaks in merge-ort and builtin/merge
@ 2022-01-20  7:47  3% Elijah Newren via GitGitGadget
  2022-01-20  7:47  2% ` [PATCH 2/2] merge: fix memory leaks in cmd_merge() Elijah Newren via GitGitGadget
  0 siblings, 1 reply; 200+ results
From: Elijah Newren via GitGitGadget @ 2022-01-20  7:47 UTC (permalink / raw)
  To: git; +Cc: Ævar Arnfjörð Bjarmason, Elijah Newren

This series fixes three memory leaks.

The first comes from a report at [1]. It's a leak in merge-ort that
pre-dates the remerge-diff topic (technically traceable back 15.5 years ago
across merge-recursive.c history) and is triggerable from a variety of
testcases. I think I may have overlooked it previously just because there's
other leaks in revision walking and this looks like one of those.

The next two leaks were ones in builtin/merge.c found while fixing the above
leak; they are fixed together in the second patch.

[1] https://lore.kernel.org/git/220119.86pmonn2mb.gmgdl@evledraar.gmail.com/

Elijah Newren (2):
  merge-ort: fix memory leak in merge_ort_internal()
  merge: fix memory leaks in cmd_merge()

 builtin/merge.c |  6 +++++-
 merge-ort.c     | 10 +++++-----
 2 files changed, 10 insertions(+), 6 deletions(-)


base-commit: af4e5f569bc89f356eb34a9373d7f82aca6faa8a
Published-As: https://github.com/gitgitgadget/git/releases/tag/pr-git-1200%2Fnewren%2Fmerge-leaks-v1
Fetch-It-Via: git fetch https://github.com/gitgitgadget/git pr-git-1200/newren/merge-leaks-v1
Pull-Request: https://github.com/git/git/pull/1200
-- 
gitgitgadget

^ permalink raw reply	[relevance 3%]

* [PATCH 2/2] merge: fix memory leaks in cmd_merge()
  2022-01-20  7:47  3% [PATCH 0/2] Fix some old memory leaks in merge-ort and builtin/merge Elijah Newren via GitGitGadget
@ 2022-01-20  7:47  2% ` Elijah Newren via GitGitGadget
  2022-01-22  0:05  2%   ` Junio C Hamano
  0 siblings, 1 reply; 200+ results
From: Elijah Newren via GitGitGadget @ 2022-01-20  7:47 UTC (permalink / raw)
  To: git; +Cc: Ævar Arnfjörð Bjarmason, Elijah Newren,
	Elijah Newren

From: Elijah Newren <newren@gmail.com>

There were two commit_lists created in cmd_merge() that were only
conditionally free()'d.  Add a quick conditional call to
free_commit_list() for each of them at the end of the function.

Testing this commit against t6404 under valgrind shows that this patch
fixes the following two leaks:

    16 bytes in 1 blocks are definitely lost in loss record 16 of 126
       at 0x484086F: malloc (vg_replace_malloc.c:380)
       by 0x69FFEB: do_xmalloc (wrapper.c:41)
       by 0x6A0073: xmalloc (wrapper.c:62)
       by 0x52A72D: commit_list_insert (commit.c:556)
       by 0x47FC93: reduce_parents (merge.c:1114)
       by 0x4801EE: collect_parents (merge.c:1214)
       by 0x480B56: cmd_merge (merge.c:1465)
       by 0x40686E: run_builtin (git.c:464)
       by 0x406C51: handle_builtin (git.c:716)
       by 0x406E96: run_argv (git.c:783)
       by 0x40730A: cmd_main (git.c:914)
       by 0x4E7DFA: main (common-main.c:56)

    8 (16 direct, 32 indirect) bytes in 1 blocks are definitely lost in \
    loss record 61 of 126
       at 0x484086F: malloc (vg_replace_malloc.c:380)
       by 0x69FFEB: do_xmalloc (wrapper.c:41)
       by 0x6A0073: xmalloc (wrapper.c:62)
       by 0x52A72D: commit_list_insert (commit.c:556)
       by 0x52A8F2: commit_list_insert_by_date (commit.c:620)
       by 0x5270AC: get_merge_bases_many_0 (commit-reach.c:413)
       by 0x52716C: repo_get_merge_bases (commit-reach.c:438)
       by 0x480E5A: cmd_merge (merge.c:1520)
       by 0x40686E: run_builtin (git.c:464)
       by 0x406C51: handle_builtin (git.c:716)
       by 0x406E96: run_argv (git.c:783)
       by 0x40730A: cmd_main (git.c:914)

There are still 3 leaks in chdir_notify_register() after this, but
chdir_notify_register() has been brought up on the list before and folks
were not a fan of fixing those, so I'm not touching them.

Signed-off-by: Elijah Newren <newren@gmail.com>
---
 builtin/merge.c | 6 +++++-
 1 file changed, 5 insertions(+), 1 deletion(-)

diff --git a/builtin/merge.c b/builtin/merge.c
index 74e53cf20a7..bd8fff9b223 100644
--- a/builtin/merge.c
+++ b/builtin/merge.c
@@ -1273,7 +1273,7 @@ int cmd_merge(int argc, const char **argv, const char *prefix)
 	int best_cnt = -1, merge_was_ok = 0, automerge_was_ok = 0;
 	struct commit_list *common = NULL;
 	const char *best_strategy = NULL, *wt_strategy = NULL;
-	struct commit_list *remoteheads, *p;
+	struct commit_list *remoteheads = NULL, *p;
 	void *branch_to_free;
 	int orig_argc = argc;
 
@@ -1752,6 +1752,10 @@ int cmd_merge(int argc, const char **argv, const char *prefix)
 		ret = suggest_conflicts();
 
 done:
+	if (!automerge_was_ok) {
+		free_commit_list(common);
+		free_commit_list(remoteheads);
+	}
 	strbuf_release(&buf);
 	free(branch_to_free);
 	return ret;
-- 
gitgitgadget

^ permalink raw reply related	[relevance 2%]

* Re: [PATCH 2/2] merge: fix memory leaks in cmd_merge()
  2022-01-20  7:47  2% ` [PATCH 2/2] merge: fix memory leaks in cmd_merge() Elijah Newren via GitGitGadget
@ 2022-01-22  0:05  2%   ` Junio C Hamano
  0 siblings, 0 replies; 200+ results
From: Junio C Hamano @ 2022-01-22  0:05 UTC (permalink / raw)
  To: Elijah Newren via GitGitGadget
  Cc: git, Ævar Arnfjörð Bjarmason, Elijah Newren

"Elijah Newren via GitGitGadget" <gitgitgadget@gmail.com> writes:

>  done:
> +	if (!automerge_was_ok) {
> +		free_commit_list(common);
> +		free_commit_list(remoteheads);
> +	}

I wondered what happens upon a successful automerge.

We call finish_automerge() and come here, and I do see a call to
free_commit_list(common) in finish_automerge(), but the way
remoteheads is used looked a bit iffy.

In finish_automerge(), we use a temporary variable parents to point
remoteheads at it, and conditionally prepend the current HEAD at the
beginning of the parents list.  This is passed to commit_tree(),
which does pop_commit() to consume all commits on the list.

So after commit_tree() returns, all commit_list instances on
remoteheads list, and possibly the one finish_automerge() prepended
for the current HEAD, are all consumed, and there is no need to
call, and it would be wrong to call, free_commit_list(), at this
point.

So, I agree that this conditional freeing is correct.  It was just
it was a bit hard to see.

Thanks.



^ permalink raw reply	[relevance 2%]

* What's cooking in git.git (Jan 2022, #06; Fri, 21)
@ 2022-01-22  5:16  3% Junio C Hamano
  0 siblings, 0 replies; 200+ results
From: Junio C Hamano @ 2022-01-22  5:16 UTC (permalink / raw)
  To: git

Possibly a few more last-minute fixes may want to be on 'master'
before the final:

 - ab/checkout-branch-info-leakfix is to stop "git checkout -f
   <ref>" from triggering BUG() when <ref> is a symbolic ref that
   points at a strange place.

 - en/merge-ort-restart-optim-fix is to avoid triggering assertion
   failure when merge.renameLimit is set to a value that is too low.

 - js/test-unset-trace2-parents is to help those developers who run
   "make test" inside a git that is being traced via GIT_TRACE2
   mechanism.

 - ab/auto-detect-zlib-compress2 is to automate use of replacement
   uncompress2() implementation on platforms with zlib that is too
   old.

 - pb/pull-rebase-autostash-fix is to fix the remaining case where
   "git pull --rebase" that reused the merge machinery when the
   update can be fast-forwarded did not behave well.

but we can probably do without many of them.

Here are the topics that have been cooking in my tree.  Commits
prefixed with '+' are in 'next' (being in 'next' is a sign that a
topic is stable enough to be used and are candidate to be in a
future release).  Commits prefixed with '-' are only in 'seen',
which means nothing more than that I have found them of interest for
some reason (like "it may have hard-to-resolve conflicts with
another topic already in flight" or "this may turn out to be
useful").  Do not read too much into a topic being in (or not in)
'seen'.  The ones marked with '.' do not appear in any of the
integration branches, but I am still holding onto them.

Copies of the source code to Git live in many repositories, and the
following is a list of the ones I push into or their mirrors.  Some
repositories have only a subset of branches.

With maint, master, next, seen, todo:

	git://git.kernel.org/pub/scm/git/git.git/
	git://repo.or.cz/alt-git.git/
	https://kernel.googlesource.com/pub/scm/git/git/
	https://github.com/git/git/
	https://gitlab.com/git-vcs/git/

With all the integration branches and topics broken out:

	https://github.com/gitster/git/

Even though the preformatted documentation in HTML and man format
are not sources, they are published in these repositories for
convenience (replace "htmldocs" with "manpages" for the manual
pages):

	git://git.kernel.org/pub/scm/git/git-htmldocs.git/
	https://github.com/gitster/git-htmldocs.git/

Release tarballs are available at:

	https://www.kernel.org/pub/software/scm/git/

--------------------------------------------------
[New Topics]

* ab/auto-detect-zlib-compress2 (2022-01-21) 1 commit
 - cache.h: auto-detect if zlib has uncompress2()

 Notice older zlib to enable our replacement uncompress2()
 automatically.

 Will merge to 'next'.
 source: <patch-v3-1.1-e9cb8763fd4-20220120T011414Z-avarab@gmail.com>


* ab/checkout-branch-info-leakfix (2022-01-21) 1 commit
 - checkout: avoid BUG() when hitting a broken repository

 We added an unrelated sanity checking that leads to a BUG() while
 plugging a leak, which triggered in a repository with symrefs in
 the local branch namespace that point at a ref outside.  Partially
 revert the change to avoid triggering the BUG().

 Will merge to 'next' and then to 'master'?
 source: <xmqqbl04d1s9.fsf_-_@gitster.g>


* en/plug-leaks-in-merge (2022-01-21) 2 commits
 - merge: fix memory leaks in cmd_merge()
 - merge-ort: fix memory leak in merge_ort_internal()

 Leakfix.

 Will merge to 'next'.
 source: <pull.1200.git.git.1642664835.gitgitgadget@gmail.com>


* js/apply-partial-clone-filters-recursively (2022-01-21) 1 commit
 - clone, submodule: pass partial clone filters to submodules

 "git clone --filter=... --recurse-submodules" only makes the
 top-level a partial clone, while submodules are fully cloned.  This
 behaviour is changed to pass the same filter down to the submodules.

 source: <50ebf7bd39adf34fa4ada27cd433d81b5381abe5.1642735881.git.steadmon@google.com>


* js/sparse-vs-split-index (2022-01-21) 3 commits
 - split-index: it really is incompatible with the sparse index
 - t1091: disable split index
 - sparse-index: sparse index is disallowed when split index is active

 Mark in various places in the code that the sparse index and the
 split index features are mutually incompatible.

 source: <pull.1119.git.1642613379.gitgitgadget@gmail.com>


* js/test-unset-trace2-parents (2022-01-20) 1 commit
  (merged to 'next' on 2022-01-20 at ebb085e3e4)
 + test-lib: unset trace2 parent envvars

 Avoid tests that are run under GIT_TRACE2 set from failing
 unnecessarily.

 Will cook in 'next'.
 source: <82e51a52e20fbe13a5a898a0a2f6dbe1188e3fa3.1642116539.git.steadmon@google.com>


* jt/sparse-checkout-leading-dir-fix (2022-01-21) 1 commit
 - sparse-checkout: create leading directory

 "git sparse-checkout init" failed to write into $GIT_DIR/info
 directory when the repository was created without one, which has
 been corrected to auto-create it.

 Will merge to 'next'.
 source: <20220121174441.3991963-1-jonathantanmy@google.com>


* rs/parse-options-lithelp-help (2022-01-20) 1 commit
 - parse-options: document bracketing of argh

 Comment update.

 source: <c6ab4408-1091-4d14-849e-afe5f3053e8b@web.de>

--------------------------------------------------
[Stalled]

* je/http-better-error-output (2021-12-03) 1 commit
 . http-backend: give a hint that web browser access is not supported

 When the http-backend program, which is the server-side component
 for the smart HTTP transport, sends a "404 Not found" error, we
 deliberately did not say anything to the requesting client.  We now
 send a message back to the browser to tell the user that they do
 not want to visit the URL via their browser, instead of a totally
 blank page.

 Expecting a reroll.
 Breaks its self tests.
 cf. <7r23s082-o3q0-479o-srqn-r45q778s5nq7@vanv.qr>
 source: <20211202102855.23907-1-jengelh@inai.de>


* cb/save-term-across-editor-invocation (2021-12-01) 3 commits
 - fixup! editor: allow for saving/restoring terminal state
 - editor: allow for saving/restoring terminal state
 - terminal: teach save_term to fail when not foreground

 Some editors are reported to leave the terminal in funny state
 after they exit on Windows.  Work it around by saving and restoring
 the terminal state when needed.

 Expecting a reroll.
 cf. <CAPUEsphktbdxeV7hvF52Or3CVHS8oOk5-WV=xfEZa8kfCVVnVg@mail.gmail.com>
 source: <20211202035446.1154-1-carenas@gmail.com>


* ar/submodule-update (2021-10-13) 9 commits
 . submodule--helper: rename helper functions
 . submodule--helper: remove unused helpers
 . submodule: move core cmd_update() logic to C
 . submodule--helper: run update using child process struct
 . submodule--helper: allow setting superprefix for init_submodule()
 . submodule--helper: refactor get_submodule_displaypath()
 . submodule--helper: rename helpers for update-clone
 . submodule--helper: get remote names from any repository
 . submodule--helper: split up ensure_core_worktree()

 Rewrite of "git submodule update" in C.

 Expecting a reroll?
 cf. <YWiXL+plA7GHfuVv@google.com>
 source: <20211013051805.45662-10-raykar.ath@gmail.com>

--------------------------------------------------
[Cooking]

* en/merge-ort-restart-optim-fix (2022-01-17) 1 commit
  (merged to 'next' on 2022-01-19 at 84da10b057)
 + merge-ort: avoid assuming all renames detected

 The merge-ort misbehaved when merge.renameLimit configuration is
 set too low and failed to find all renames.

 Will cook in 'next'.
 source: <pull.1194.v2.git.git.1642443955836.gitgitgadget@gmail.com>


* jh/p4-various-fixups (2022-01-16) 23 commits
 . git-p4: seperate multiple statements onto seperate lines
 . git-p4: move inline comments to line above
 . git-p4: only seperate code blocks by a single empty line
 . git-p4: compare to singletons with "is" and "is not"
 . git-p4: normalize indentation of lines in conditionals
 . git-p4: ensure there is a single space around all operators
 . git-p4: ensure every comment has a single #
 . git-p4: remove spaces between dictionary keys and colons
 . git-p4: remove redundant backslash-continuations inside brackets
 . git-p4: remove extraneous spaces before function arguments
 . git-p4: place a single space after every comma
 . git-p4: removed brackets when assigning multiple return values
 . git-p4: remove spaces around default arguments
 . git-p4: remove padding from lists, tuples and function arguments
 . git-p4: sort and de-duplcate pylint disable list
 . git-p4: remove commented code
 . git-p4: convert descriptive class and function comments into docstrings
 . git-p4: improve consistency of docstring formatting
 . git-p4: indent with 4-spaces
 . git-p4: remove unneeded semicolons from statements
 . git-p4: add blank lines between functions and class definitions
 . Merge branch 'jh/p4-spawning-external-commands-cleanup' into jh/p4-various-fixups
 . Merge branch 'jh/p4-fix-use-of-process-error-exception' into jh/p4-various-fixups
 (this branch uses jh/p4-fix-use-of-process-error-exception and jh/p4-spawning-external-commands-cleanup.)

 Various cleanups to "git p4".

 Breaks its own test suite.
 source: <20220116160550.514637-1-jholdsworth@nvidia.com>


* po/readme-mention-contributor-hints (2022-01-17) 1 commit
  (merged to 'next' on 2022-01-19 at 7e14690eb9)
 + README.md: add CodingGuidelines and a link for Translators

 Doc update.

 Will cook in 'next'.
 source: <pull.1115.v3.git.1642443491609.gitgitgadget@gmail.com>


* tl/doc-cli-options-first (2022-01-17) 1 commit
  (merged to 'next' on 2022-01-19 at 9ec14cfe73)
 + git-cli.txt: clarify "options first and then args"

 We explain that revs come first before the pathspec among command
 line arguments, but did not spell out that dashed options come
 before other args, which has been corrected.

 Will cook in 'next'.
 source: <fe748304d94e0ae25fd3549aadc49cf951ff2d64.1642405806.git.dyroneteng@gmail.com>


* rs/bisect-executable-not-found (2022-01-19) 4 commits
 - bisect--helper: double-check run command on exit code 126 and 127
 - bisect: document run behavior with exit codes 126 and 127
 - bisect--helper: release strbuf and strvec on run error
 - bisect--helper: report actual bisect_state() argument on error

 source: <fead25d6-6f5f-487a-ad4c-0657fe9785fd@www.fastmail.com>


* ds/sparse-checkout-requires-per-worktree-config (2022-01-14) 6 commits
 . worktree: copy sparse-checkout patterns and config on add
 . sparse-checkout: use repo_config_set_worktree_gently()
 . config: add repo_config_set_worktree_gently()
 . worktree: add 'init-worktree-config' subcommand
 . config: make some helpers repo-aware
 . setup: use a repository when upgrading format

 "git sparse-checkout" wants to work with per-worktree configration,
 but did not work well in a worktree attached to a bare repository.

 Expecting an update.
 cf. <1db0f601-4769-15c0-cd58-ecddfa1fc9d5@gmail.com>
 Introduces new leaks.
 cf. https://github.com/git/git/runs/4823667255?check_suite_focus=true
 source: <pull.1101.v3.git.1640727143.gitgitgadget@gmail.com>


* pw/add-p-hunk-split-fix (2022-01-12) 2 commits
  (merged to 'next' on 2022-01-19 at ea57b2c9a6)
 + builtin add -p: fix hunk splitting
 + t3701: clean up hunk splitting tests

 "git add -p" rewritten in C regressed hunk splitting in some cases,
 which has been corrected.

 Will cook in 'next'.
 source: <pull.1100.v2.git.1641899530.gitgitgadget@gmail.com>


* gc/fetch-negotiate-only-early-return (2022-01-20) 4 commits
  (merged to 'next' on 2022-01-20 at e7616428eb)
 + fetch: help translators by reusing the same message template
  (merged to 'next' on 2022-01-19 at 0f15147cfa)
 + fetch --negotiate-only: do not update submodules
 + fetch: skip tasks related to fetching objects
 + fetch: use goto cleanup in cmd_fetch()

 "git fetch --negotiate-only" is an internal command used by "git
 push" to figure out which part of our history is missing from the
 other side.  It should never recurse into submodules even when
 fetch.recursesubmodules configuration variable is set, nor it
 should trigger "gc".  The code has been tightened up to ensure it
 only does common ancestry discovery and nothing else.

 Will cook in 'next'.
 source: <20220119000056.58503-1-chooglen@google.com>


* jh/p4-fix-use-of-process-error-exception (2022-01-06) 1 commit
  (merged to 'next' on 2022-01-10 at 49d529bfd7)
 + git-p4: fix instantiation of CalledProcessError
 (this branch is used by jh/p4-various-fixups.)

 Will cook in 'next'.
 source: <20220106214156.90967-1-jholdsworth@nvidia.com>


* jh/p4-spawning-external-commands-cleanup (2022-01-06) 3 commits
  (merged to 'next' on 2022-01-10 at 54b36b4e66)
 + git-p4: don't print shell commands as python lists
 + git-p4: pass command arguments as lists instead of using shell
 + git-p4: don't select shell mode using the type of the command argument
 (this branch is used by jh/p4-various-fixups.)

 Will cook in 'next'.
 source: <20220106214035.90725-1-jholdsworth@nvidia.com>


* pb/pull-rebase-autostash-fix (2022-01-14) 1 commit
  (merged to 'next' on 2022-01-14 at 83a388a7e2)
 + pull --rebase: honor rebase.autostash when fast-forwarding

 "git pull --rebase" ignored the rebase.autostash configuration
 variable when the remote history is a descendant of our history,
 which has been corrected.

 Will cook in 'next'.
 source: <xmqqr19aayxp.fsf@gitster.g>


* rs/grep-expr-cleanup (2022-01-06) 4 commits
  (merged to 'next' on 2022-01-10 at b70a3bb0fa)
 + grep: use grep_and_expr() in compile_pattern_and()
 + grep: extract grep_binexp() from grep_or_expr()
 + grep: use grep_not_expr() in compile_pattern_not()
 + grep: use grep_or_expr() in compile_pattern_or()

 Code clean-up.

 Will cook in 'next'.
 source: <cover.1641498525.git.me@ttaylorr.com>


* fs/ssh-signing-crlf (2022-01-07) 1 commit
  (merged to 'next' on 2022-01-19 at 76b86faafb)
 + gpg-interface: trim CR from ssh-keygen

 The code path that verifies signatures made with ssh were made to
 work better on a system with CRLF line endings.

 Will cook in 'next'.
 source: <20220107090735.580225-1-fs@gigacodes.de>


* jc/qsort-s-alignment-fix (2022-01-07) 2 commits
  (merged to 'next' on 2022-01-10 at 329fd6e09a)
 + stable-qsort: avoid using potentially unaligned access
 + compat/qsort_s.c: avoid using potentially unaligned access

 Fix a hand-rolled alloca() imitation that may have violated
 alignment requirement of data being sorted in compatibility
 implementation of qsort_s() and stable qsort().

 Will cook in 'next'.
 source: <f40c1b47-9aad-2dcc-ceeb-5dee2b517cd8@web.de>
 source: <xmqqzgo76xpj.fsf@gitster.g>


* ps/avoid-unnecessary-hook-invocation-with-packed-refs (2022-01-17) 6 commits
 - refs: skip hooks when deleting uncovered packed refs
 - refs: do not execute reference-transaction hook on packing refs
 - refs: demonstrate excessive execution of the reference-transaction hook
 - refs: allow skipping the reference-transaction hook
 - refs: allow passing flags when beginning transactions
 - refs: extract packed_refs_delete_refs() to allow control of transaction

 Because a deletion of ref would need to remove it from both the
 loose ref store and the packed ref store, a delete-ref operation
 that logically removes one ref may end up invoking ref-transaction
 hook twice, which has been corrected.

 Introduces new leaks when merged to 'seen'.
 source: <cover.1642406989.git.ps@pks.im>


* rs/apply-symlinks-use-strset (2022-01-07) 1 commit
  (merged to 'next' on 2022-01-10 at 32497a67d5)
 + apply: use strsets to track symlinks

 "git apply" (ab)used the util pointer of the string-list to keep
 track of how each symbolic link needs to be handled, which has been
 simplified by using strset.

 Will cook in 'next'.
 source: <8739caad-aa3d-1f0f-b5dd-6174a8e059f6@web.de>


* ld/sparse-index-bash-completion (2022-01-10) 3 commits
 - sparse-checkout: limit tab completion to a single level
 - sparse-checkout: custom tab completion
 - sparse-checkout: custom tab completion tests

 The command line completion (in contrib/) learns to complete
 arguments give to "git sparse-checkout" command.
 source: <pull.1108.v3.git.1641841193.gitgitgadget@gmail.com>


* bc/clarify-eol-attr (2022-01-12) 2 commits
 - docs: correct documentation about eol attribute
 - t0027: add tests for eol without text in .gitattributes

 Doc and test update around the eol attribute.
 source: <20220111021507.531736-1-sandals@crustytoothpaste.net>


* jz/rev-list-exclude-first-parent-only (2022-01-12) 1 commit
 - git-rev-list: add --exclude-first-parent-only flag

 "git log" and friends learned an option --exclude-first-parent-only
 to propagate UNINTERESTING bit down only along the first-parent
 chain, just like --first-parent option shows commits that lack the
 UNINTERESTING bit only along the first-parent chain.
 source: <20220111213941.30129-1-jerry@skydio.com>


* en/present-despite-skipped (2022-01-14) 6 commits
 - Accelerate clear_skip_worktree_from_present_files() by caching
 - Update documentation related to sparsity and the skip-worktree bit
 - repo_read_index: clear SKIP_WORKTREE bit from files present in worktree
 - unpack-trees: fix accidental loss of user changes
 - t1011: add testcase demonstrating accidental loss of user modifications
 - Merge branch 'vd/sparse-clean-etc' into en/present-despite-skipped
 (this branch uses vd/sparse-clean-etc.)

 In sparse-checkouts, files mis-marked as missing from the working tree
 could lead to later problems.  Such files were hard to discover, and
 harder to correct.  Automatically detecting and correcting the marking
 of such files has been added to avoid these problems.
 source: <pull.1114.v2.git.1642175983.gitgitgadget@gmail.com>


* bc/csprng-mktemps (2022-01-17) 2 commits
 - wrapper: use a CSPRNG to generate random file names
 - wrapper: add a helper to generate numbers from a CSPRNG

 Pick a better random number generator and use it when we prepare
 temporary filenames.

 Are we solving the right problem?
 cf. <220118.86zgntpegy.gmgdl@evledraar.gmail.com>
 source: <20220117215617.843190-1-sandals@crustytoothpaste.net>


* jc/reflog-parse-options (2022-01-10) 2 commits
  (merged to 'next' on 2022-01-12 at 1659e49c4b)
 + builtin/reflog.c: use parse-options api for expire, delete subcommands
 + Merge branch 'ab/reflog-prep' into jc/reflog-parse-options

 Use the parse-options API in "git reflog" command.

 Will cook in 'next'.
 source: <pull.1175.v5.git.git.1641495981650.gitgitgadget@gmail.com>


* vd/sparse-clean-etc (2022-01-13) 9 commits
 - update-index: reduce scope of index expansion in do_reupdate
 - update-index: integrate with sparse index
 - update-index: add tests for sparse-checkout compatibility
 - checkout-index: integrate with sparse index
 - checkout-index: add --ignore-skip-worktree-bits option
 - checkout-index: expand sparse checkout compatibility tests
 - clean: integrate with sparse index
 - reset: reorder wildcard pathspec conditions
 - reset: fix validation in sparse index test
 (this branch is used by en/present-despite-skipped.)

 "git update-index", "git checkout-index", and "git clean" are
 taught to work better with the sparse checkout feature.
 source: <pull.1109.v2.git.1641924306.gitgitgadget@gmail.com>


* ms/update-index-racy (2022-01-07) 4 commits
  (merged to 'next' on 2022-01-14 at 705a33f63b)
 + update-index: refresh should rewrite index in case of racy timestamps
 + t7508: add tests capturing racy timestamp handling
 + t7508: fix bogus mtime verification
 + test-lib: introduce API for verifying file mtime

 "git update-index --refresh" has been taught to deal better with
 racy timestamps (just like "git status" already does).

 Will cook in 'next'.
 source: <pull.1105.v4.git.1641554252.gitgitgadget@gmail.com>


* jc/find-header (2022-01-06) 1 commit
  (merged to 'next' on 2022-01-10 at 8a13b4f0b3)
 + receive-pack.c: consolidate find header logic

 Code clean-up.

 Will cook in 'next'.
 source: <pull.1125.v6.git.git.1641499655700.gitgitgadget@gmail.com>


* jc/name-rev-stdin (2022-01-10) 2 commits
  (merged to 'next' on 2022-01-19 at a58e05fabe)
 + name-rev.c: use strbuf_getline instead of limited size buffer
 + name-rev: deprecate --stdin in favor of --annotate-stdin

 "git name-rev --stdin" does not behave like usual "--stdin" at
 all.  Start the process of renaming it to "--annotate-stdin".

 Will cook in 'next'.
 source: <pull.1171.v7.git.git.1641425372.gitgitgadget@gmail.com>


* en/remerge-diff (2022-01-21) 11 commits
 - diff-merges: avoid history simplifications when diffing merges
 - merge-ort: mark conflict/warning messages from inner merges as omittable
 - show, log: include conflict/warning messages in --remerge-diff headers
 - diff: add ability to insert additional headers for paths
 - merge-ort: format messages slightly different for use in headers
 - merge-ort: mark a few more conflict messages as omittable
 - merge-ort: capture and print ll-merge warnings in our preferred fashion
 - ll-merge: make callers responsible for showing warnings
 - log: clean unneeded objects during `log --remerge-diff`
 - show, log: provide a --remerge-diff capability
 - Merge branch 'ns/tmp-objdir' into en/remerge-diff

 "git log --remerge-diff" shows the difference from mechanical merge
 result and the merge result that is actually recorded.

 Will merge to 'next'?
 source: <pull.1103.v4.git.1642792341.gitgitgadget@gmail.com>


* bs/forbid-i18n-of-protocol-token-in-fetch-pack (2021-12-22) 2 commits
 - fixup! fetch-pack: parameterize message containing 'ready' keyword
 - fetch-pack: parameterize message containing 'ready' keyword

 L10n support for a few error messages.

 Expecting an ack for fixup.
 source: <20211222075805.19027-1-bagasdotme@gmail.com>


* gc/branch-recurse-submodules (2022-01-10) 6 commits
 - branch: add --recurse-submodules option for branch creation
 - builtin/branch: clean up action-picking logic in cmd_branch()
 - branch: add a dry_run parameter to create_branch()
 - branch: make create_branch() always create a branch
 - branch: move --set-upstream-to behavior to dwim_and_setup_tracking()
 - Merge branch 'js/branch-track-inherit' into gc/branch-recurse-submodules

 "git branch" learned the "--recurse-submodules" option.

 Expecting a reroll.
 cf. <kl6l7db6kvp2.fsf@chooglen-macbookpro.roam.corp.google.com>
 source: <20211220233459.45739-1-chooglen@google.com>


* hn/reftable-coverity-fixes (2022-01-20) 17 commits
 - reftable: add print functions to the record types
 - reftable: make reftable_record a tagged union
 - reftable: remove outdated file reftable.c
 - reftable: implement record equality generically
 - reftable: make reftable-record.h function signatures const correct
 - reftable: handle null refnames in reftable_ref_record_equal
 - reftable: drop stray printf in readwrite_test
 - reftable: order unittests by complexity
 - reftable: all xxx_free() functions accept NULL arguments
 - reftable: fix resource warning
 - reftable: ignore remove() return value in stack_test.c
 - reftable: check reftable_stack_auto_compact() return value
 - reftable: fix resource leak blocksource.c
 - reftable: fix resource leak in block.c error path
 - reftable: fix OOB stack write in print functions
 - Merge branch 'hn/create-reflog-simplify' into hn/reftable-coverity-fixes
 - Merge branch 'hn/reftable' into hn/reftable-coverity-fixes

 Problems identified by Coverity in the reftable code have been
 corrected.

 Will merge to 'next'.
 source: <pull.1152.v6.git.git.1642691534.gitgitgadget@gmail.com>


* tb/midx-bitmap-corruption-fix (2022-01-04) 9 commits
 - pack-bitmap.c: gracefully fallback after opening pack/MIDX
 - midx: read `RIDX` chunk when present
 - t/lib-bitmap.sh: parameterize tests over reverse index source
 - t5326: move tests to t/lib-bitmap.sh
 - t5326: extract `test_rev_exists`
 - t5326: drop unnecessary setup
 - pack-revindex.c: instrument loading on-disk reverse index
 - midx.c: make changing the preferred pack safe
 - t5326: demonstrate bitmap corruption after permutation

 A bug that made multi-pack bitmap and the object order out-of-sync
 (hence the .midx data gets corrupted) has been fixed.

 Waiting for a hopefully final review.
 cf. <Ydceeo33Yt4N%2FbrN@nand.local>
 source: <cover.1641320129.git.me@ttaylorr.com>


* pw/fix-some-issues-in-reset-head (2021-12-08) 14 commits
 - rebase -m: don't fork git checkout
 - rebase --apply: set ORIG_HEAD correctly
 - rebase --apply: fix reflog
 - reset_head(): take struct rebase_head_opts
 - rebase: cleanup reset_head() calls
 - reset_head(): make default_reflog_action optional
 - reset_head(): factor out ref updates
 - create_autostash(): remove unneeded parameter
 - reset_head(): remove action parameter
 - rebase --apply: don't run post-checkout hook if there is an error
 - rebase: do not remove untracked files on checkout
 - rebase: pass correct arguments to post-checkout hook
 - t5403: refactor rebase post-checkout hook tests
 - rebase: factor out checkout for up to date branch

 Fix "some issues" in a helper function reset_head().

 Expecting a reroll.
 cf. <xmqqk0gdskkh.fsf@gitster.g>
 cf. <xmqqwnkdr3xb.fsf@gitster.g>
 cf. <xmqqpmq5r3j9.fsf@gitster.g>
 cf. <xmqqczm5r34h.fsf@gitster.g>
 cf. <CABPp-BEHW4VLG18twcM_8iOco1jZ2iuGT+KN8aS+-sAAnBhTnw@mail.gmail.com>
 source: <pull.1049.v2.git.1638975481.gitgitgadget@gmail.com>


* ab/cat-file (2022-01-12) 12 commits
  (merged to 'next' on 2022-01-12 at ee4d43041d)
 + cat-file: s/_/-/ in typo'd usage_msg_optf() message
 + cat-file: don't whitespace-pad "(...)" in SYNOPSIS and usage output
  (merged to 'next' on 2022-01-05 at e145efa605)
 + cat-file: use GET_OID_ONLY_TO_DIE in --(textconv|filters)
 + object-name.c: don't have GET_OID_ONLY_TO_DIE imply *_QUIETLY
 + cat-file: correct and improve usage information
 + cat-file: fix remaining usage bugs
 + cat-file: make --batch-all-objects a CMDMODE
 + cat-file: move "usage" variable to cmd_cat_file()
 + cat-file docs: fix SYNOPSIS and "-h" output
 + parse-options API: add a usage_msg_optf()
 + cat-file tests: test messaging on bad objects/paths
 + cat-file tests: test bad usage

 Assorted updates to "git cat-file", especially "-h".

 Will cook in 'next'.
 source: <cover-v6-00.10-00000000000-20211228T132637Z-avarab@gmail.com>
 source: <cover-0.2-00000000000-20220110T220553Z-avarab@gmail.com>


* ab/grep-patterntype (2022-01-18) 10 commits
 - grep.[ch]: remove GREP_PATTERN_TYPE_UNSPECIFIED
 - grep: simplify config parsing and option parsing
 - grep.c: do "if (bool && memchr())" not "if (memchr() && bool)"
 - grep.h: make "grep_opt.pattern_type_option" use its enum
 - grep API: call grep_config() after grep_init()
 - grep.c: don't pass along NULL callback value
 - built-ins: trust the "prefix" from run_builtin()
 - grep tests: add missing "grep.patternType" config tests
 - log tests: check if grep_config() is called by "log"-like cmds
 - grep.h: remove unused "regex_t regexp" from grep_opt

 Some code clean-up in the "git grep" machinery.

 Looking good, except for the last two steps.
 source: <cover-v8-00.10-00000000000-20220118T155211Z-avarab@gmail.com>


* js/use-builtin-add-i (2021-12-01) 2 commits
 - add -i: default to the built-in implementation
 - t2016: require the PERL prereq only when necessary

 "git add -i" was rewritten in C some time ago and has been in
 testing; the reimplementation is now exposed to general public by
 default.

 On hold.
 There are known breakages on macOS.
 cf. <nycvar.QRO.7.76.6.2112021832060.63@tvgsbejvaqbjf.bet>
 source: <pull.1087.git.1638281655.gitgitgadget@gmail.com>


* jt/conditional-config-on-remote-url (2022-01-18) 2 commits
  (merged to 'next' on 2022-01-19 at 3c2df266eb)
 + config: include file if remote URL matches a glob
 + config: make git_config_include() static

 The conditional inclusion mechanism of configuration files using
 "[includeIf <condition>]" learns to base its decision on the
 URL of the remote repository the repository interacts with.

 Will cook in 'next'.
 source: <cover.1642527965.git.jonathantanmy@google.com>


* ab/ambiguous-object-name (2022-01-13) 6 commits
 - object-name: re-use "struct strbuf" in show_ambiguous_object()
 - object-name: iterate ambiguous objects before showing header
 - object-name: show date for ambiguous tag objects
 - object-name: make ambiguous object output translatable
 - object-name: explicitly handle OBJ_BAD in show_ambiguous_object()
 - object-name tests: add tests for ambiguous object blind spots

 Error output given in response to an ambiguous object name has been
 improved.
 source: <cover-v7-0.6-00000000000-20220111T130811Z-avarab@gmail.com>


* tl/ls-tree-oid-only (2022-01-13) 9 commits
 - ls-tree.c: introduce "--format" option
 - cocci: allow padding with `strbuf_addf()`
 - ls-tree.c: introduce struct "show_tree_data"
 - ls-tree.c: support --object-only option for "git-ls-tree"
 - ls-tree: optimize naming and handling of "return" in show_tree()
 - ls-tree: use "size_t", not "int" for "struct strbuf"'s "len"
 - ls-tree: use "enum object_type", not {blob,tree,commit}_type
 - ls-tree: add missing braces to "else" arms
 - ls-tree: remove commented-out code

 "git ls-tree" learns "--oid-only" option, similar to "--name-only",
 and more generalized "--format" option.
 source: <cover.1641978175.git.dyroneteng@gmail.com>


* ab/config-based-hooks-2 (2022-01-07) 17 commits
  (merged to 'next' on 2022-01-19 at 594b6da22c)
 + run-command: remove old run_hook_{le,ve}() hook API
 + receive-pack: convert push-to-checkout hook to hook.h
 + read-cache: convert post-index-change to use hook.h
 + commit: convert {pre-commit,prepare-commit-msg} hook to hook.h
 + git-p4: use 'git hook' to run hooks
 + send-email: use 'git hook run' for 'sendemail-validate'
 + git hook run: add an --ignore-missing flag
 + hooks: convert worktree 'post-checkout' hook to hook library
 + hooks: convert non-worktree 'post-checkout' hook to hook library
 + merge: convert post-merge to use hook.h
 + am: convert applypatch-msg to use hook.h
 + rebase: convert pre-rebase to use hook.h
 + hook API: add a run_hooks_l() wrapper
 + am: convert {pre,post}-applypatch to use hook.h
 + gc: use hook library for pre-auto-gc hook
 + hook API: add a run_hooks() wrapper
 + hook: add 'run' subcommand

 More "config-based hooks".

 Will cook in 'next'.
 source: <cover-v6-00.17-00000000000-20211222T035755Z-avarab@gmail.com>


* jh/builtin-fsmonitor-part2 (2021-12-25) 31 commits
 - fixup! t7527: create test for fsmonitor--daemon
 - fixup! t/perf/p7519: speed up test on Windows
 - t7527: test status with untracked-cache and fsmonitor--daemon
 - fsmonitor: force update index after large responses
 - fsmonitor--daemon: use a cookie file to sync with file system
 - fsmonitor--daemon: periodically truncate list of modified files
 - t/perf/p7519: add fsmonitor--daemon test cases
 - t/perf/p7519: speed up test on Windows
 - t/helper/test-chmtime: skip directories on Windows
 - t/perf: avoid copying builtin fsmonitor files into test repo
 - t7527: create test for fsmonitor--daemon
 - t/helper/fsmonitor-client: create IPC client to talk to FSMonitor Daemon
 - help: include fsmonitor--daemon feature flag in version info
 - fsmonitor--daemon: implement handle_client callback
 - compat/fsmonitor/fsm-listen-darwin: implement FSEvent listener on MacOS
 - compat/fsmonitor/fsm-listen-darwin: add macos header files for FSEvent
 - compat/fsmonitor/fsm-listen-win32: implement FSMonitor backend on Windows
 - fsmonitor--daemon: create token-based changed path cache
 - fsmonitor--daemon: define token-ids
 - fsmonitor--daemon: add pathname classification
 - fsmonitor--daemon: implement 'start' command
 - fsmonitor--daemon: implement 'run' command
 - compat/fsmonitor/fsm-listen-darwin: stub in backend for Darwin
 - compat/fsmonitor/fsm-listen-win32: stub in backend for Windows
 - fsmonitor--daemon: implement 'stop' and 'status' commands
 - fsmonitor--daemon: add a built-in fsmonitor daemon
 - fsmonitor: document builtin fsmonitor
 - fsmonitor: use IPC to query the builtin FSMonitor daemon
 - fsmonitor: config settings are repository-specific
 - fsmonitor-ipc: create client routines for git-fsmonitor--daemon
 - fsmonitor: enhance existing comments

 Built-in fsmonitor (part 2).

 Expecting a reroll.
 Seems that the discussion stalled.
 cf. <d9c3ef61-768c-3560-2858-3438c355a742@jeffhostetler.com>
 source: <pull.1041.v4.git.1634826309.gitgitgadget@gmail.com>


* es/superproject-aware-submodules (2021-11-18) 5 commits
 - submodule: use config to find superproject worktree
 - submodule: record superproject gitdir during 'update'
 - submodule: record superproject gitdir during absorbgitdirs
 - introduce submodule.superprojectGitDir record
 - t7400-submodule-basic: modernize inspect() helper

 A configuration variable in a submodule points at the location of
 the superproject it is bound to (RFC).

 Expecting a reroll.
 cf. <20211117234300.2598132-1-jonathantanmy@google.com>
 source: <20211117005701.371808-1-emilyshaffer@google.com>


* ab/only-single-progress-at-once (2022-01-07) 7 commits
 - *.c: use isatty(0|2), not isatty(STDIN_FILENO|STDERR_FILENO)
 - pack-bitmap-write.c: don't return without stop_progress()
 - progress.c: add temporary variable from progress struct
 - progress.c tests: test some invalid usage
 - progress.c tests: make start/stop commands on stdin
 - progress.c test helper: add missing braces
 - leak tests: fix a memory leak in "test-progress" helper

 Further tweaks on progress API.

 Getting there.
 source: <cover-v8-0.7-00000000000-20211228T150728Z-avarab@gmail.com>

^ permalink raw reply	[relevance 3%]

* What's cooking in git.git (Jan 2022, #07; Mon, 24)
@ 2022-01-24 19:39  2% Junio C Hamano
  0 siblings, 0 replies; 200+ results
From: Junio C Hamano @ 2022-01-24 19:39 UTC (permalink / raw)
  To: git

Git 2.35 final has been tagged.  Let's wait for a few days to see if
there are regressions that needs brown-paper-bag fixes before we
start moving topics from 'next' to 'master' for the new cycle.

Here are the topics that have been cooking in my tree.  Commits
prefixed with '+' are in 'next' (being in 'next' is a sign that a
topic is stable enough to be used and are candidate to be in a
future release).  Commits prefixed with '-' are only in 'seen',
which means nothing more than that I have found them of interest for
some reason (like "it may have hard-to-resolve conflicts with
another topic already in flight" or "this may turn out to be
useful").  Do not read too much into a topic being in (or not in)
'seen'.  The ones marked with '.' do not appear in any of the
integration branches, but I am still holding onto them.

Copies of the source code to Git live in many repositories, and the
following is a list of the ones I push into or their mirrors.  Some
repositories have only a subset of branches.

With maint, master, next, seen, todo:

	git://git.kernel.org/pub/scm/git/git.git/
	git://repo.or.cz/alt-git.git/
	https://kernel.googlesource.com/pub/scm/git/git/
	https://github.com/git/git/
	https://gitlab.com/git-vcs/git/

With all the integration branches and topics broken out:

	https://github.com/gitster/git/

Even though the preformatted documentation in HTML and man format
are not sources, they are published in these repositories for
convenience (replace "htmldocs" with "manpages" for the manual
pages):

	git://git.kernel.org/pub/scm/git/git-htmldocs.git/
	https://github.com/gitster/git-htmldocs.git/

Release tarballs are available at:

	https://www.kernel.org/pub/software/scm/git/

--------------------------------------------------
[Graduated to 'master']

* ab/checkout-branch-info-leakfix (2022-01-21) 1 commit
  (merged to 'next' on 2022-01-23 at 8bbb082509)
 + checkout: avoid BUG() when hitting a broken repository

 We added an unrelated sanity checking that leads to a BUG() while
 plugging a leak, which triggered in a repository with symrefs in
 the local branch namespace that point at a ref outside.  Partially
 revert the change to avoid triggering the BUG().
 source: <xmqqbl04d1s9.fsf_-_@gitster.g>

--------------------------------------------------
[New Topics]

* jc/mem-pool-alignment (2022-01-24) 1 commit
 - mem-pool: don't assume uintmax_t is aligned enough for all types

 Update the logic to compute alignment requirement for our mem-pool.

 Will merge to 'next'?
 source: <20220123203347.74869-1-jrtc27@jrtc27.com>

--------------------------------------------------
[Stalled]

* je/http-better-error-output (2021-12-03) 1 commit
 . http-backend: give a hint that web browser access is not supported

 When the http-backend program, which is the server-side component
 for the smart HTTP transport, sends a "404 Not found" error, we
 deliberately did not say anything to the requesting client.  We now
 send a message back to the browser to tell the user that they do
 not want to visit the URL via their browser, instead of a totally
 blank page.

 Expecting a reroll.
 Breaks its self tests.
 cf. <7r23s082-o3q0-479o-srqn-r45q778s5nq7@vanv.qr>
 source: <20211202102855.23907-1-jengelh@inai.de>


* cb/save-term-across-editor-invocation (2021-12-01) 3 commits
 - fixup! editor: allow for saving/restoring terminal state
 - editor: allow for saving/restoring terminal state
 - terminal: teach save_term to fail when not foreground

 Some editors are reported to leave the terminal in funny state
 after they exit on Windows.  Work it around by saving and restoring
 the terminal state when needed.

 Expecting a reroll.
 cf. <CAPUEsphktbdxeV7hvF52Or3CVHS8oOk5-WV=xfEZa8kfCVVnVg@mail.gmail.com>
 source: <20211202035446.1154-1-carenas@gmail.com>


* ar/submodule-update (2021-10-13) 9 commits
 . submodule--helper: rename helper functions
 . submodule--helper: remove unused helpers
 . submodule: move core cmd_update() logic to C
 . submodule--helper: run update using child process struct
 . submodule--helper: allow setting superprefix for init_submodule()
 . submodule--helper: refactor get_submodule_displaypath()
 . submodule--helper: rename helpers for update-clone
 . submodule--helper: get remote names from any repository
 . submodule--helper: split up ensure_core_worktree()

 Rewrite of "git submodule update" in C.

 Expecting a reroll?
 cf. <YWiXL+plA7GHfuVv@google.com>
 source: <20211013051805.45662-10-raykar.ath@gmail.com>

--------------------------------------------------
[Cooking]

* ab/auto-detect-zlib-compress2 (2022-01-24) 1 commit
 - compat: auto-detect if zlib has uncompress2()

 Notice older zlib to enable our replacement uncompress2()
 automatically.

 Will merge to 'next'?
 source: <xmqqr18x3s5s.fsf@gitster.g>


* en/plug-leaks-in-merge (2022-01-21) 2 commits
 - merge: fix memory leaks in cmd_merge()
 - merge-ort: fix memory leak in merge_ort_internal()

 Leakfix.

 Will merge to 'next'.
 source: <pull.1200.git.git.1642664835.gitgitgadget@gmail.com>


* js/apply-partial-clone-filters-recursively (2022-01-21) 1 commit
 - clone, submodule: pass partial clone filters to submodules

 "git clone --filter=... --recurse-submodules" only makes the
 top-level a partial clone, while submodules are fully cloned.  This
 behaviour is changed to pass the same filter down to the submodules.
 source: <50ebf7bd39adf34fa4ada27cd433d81b5381abe5.1642735881.git.steadmon@google.com>


* js/sparse-vs-split-index (2022-01-23) 3 commits
 - split-index: it really is incompatible with the sparse index
 - t1091: disable split index
 - sparse-index: sparse index is disallowed when split index is active

 Mark in various places in the code that the sparse index and the
 split index features are mutually incompatible.

 Will merge to 'next'.
 source: <pull.1119.git.1642613379.gitgitgadget@gmail.com>


* js/test-unset-trace2-parents (2022-01-20) 1 commit
  (merged to 'next' on 2022-01-20 at ebb085e3e4)
 + test-lib: unset trace2 parent envvars

 Avoid tests that are run under GIT_TRACE2 set from failing
 unnecessarily.

 Will cook in 'next'.
 source: <82e51a52e20fbe13a5a898a0a2f6dbe1188e3fa3.1642116539.git.steadmon@google.com>


* jt/sparse-checkout-leading-dir-fix (2022-01-21) 1 commit
 - sparse-checkout: create leading directory

 "git sparse-checkout init" failed to write into $GIT_DIR/info
 directory when the repository was created without one, which has
 been corrected to auto-create it.

 Will merge to 'next'.
 source: <20220121174441.3991963-1-jonathantanmy@google.com>


* rs/parse-options-lithelp-help (2022-01-20) 1 commit
 - parse-options: document bracketing of argh

 Comment update.
 source: <c6ab4408-1091-4d14-849e-afe5f3053e8b@web.de>


* en/merge-ort-restart-optim-fix (2022-01-17) 1 commit
  (merged to 'next' on 2022-01-19 at 84da10b057)
 + merge-ort: avoid assuming all renames detected

 The merge-ort misbehaved when merge.renameLimit configuration is
 set too low and failed to find all renames.

 Will cook in 'next'.
 source: <pull.1194.v2.git.git.1642443955836.gitgitgadget@gmail.com>


* jh/p4-various-fixups (2022-01-16) 23 commits
 . git-p4: seperate multiple statements onto seperate lines
 . git-p4: move inline comments to line above
 . git-p4: only seperate code blocks by a single empty line
 . git-p4: compare to singletons with "is" and "is not"
 . git-p4: normalize indentation of lines in conditionals
 . git-p4: ensure there is a single space around all operators
 . git-p4: ensure every comment has a single #
 . git-p4: remove spaces between dictionary keys and colons
 . git-p4: remove redundant backslash-continuations inside brackets
 . git-p4: remove extraneous spaces before function arguments
 . git-p4: place a single space after every comma
 . git-p4: removed brackets when assigning multiple return values
 . git-p4: remove spaces around default arguments
 . git-p4: remove padding from lists, tuples and function arguments
 . git-p4: sort and de-duplcate pylint disable list
 . git-p4: remove commented code
 . git-p4: convert descriptive class and function comments into docstrings
 . git-p4: improve consistency of docstring formatting
 . git-p4: indent with 4-spaces
 . git-p4: remove unneeded semicolons from statements
 . git-p4: add blank lines between functions and class definitions
 . Merge branch 'jh/p4-spawning-external-commands-cleanup' into jh/p4-various-fixups
 . Merge branch 'jh/p4-fix-use-of-process-error-exception' into jh/p4-various-fixups
 (this branch uses jh/p4-fix-use-of-process-error-exception and jh/p4-spawning-external-commands-cleanup.)

 Various cleanups to "git p4".

 Breaks its own test suite.
 source: <20220116160550.514637-1-jholdsworth@nvidia.com>


* po/readme-mention-contributor-hints (2022-01-17) 1 commit
  (merged to 'next' on 2022-01-19 at 7e14690eb9)
 + README.md: add CodingGuidelines and a link for Translators

 Doc update.

 Will cook in 'next'.
 source: <pull.1115.v3.git.1642443491609.gitgitgadget@gmail.com>


* tl/doc-cli-options-first (2022-01-17) 1 commit
  (merged to 'next' on 2022-01-19 at 9ec14cfe73)
 + git-cli.txt: clarify "options first and then args"

 We explain that revs come first before the pathspec among command
 line arguments, but did not spell out that dashed options come
 before other args, which has been corrected.

 Will cook in 'next'.
 source: <fe748304d94e0ae25fd3549aadc49cf951ff2d64.1642405806.git.dyroneteng@gmail.com>


* rs/bisect-executable-not-found (2022-01-19) 4 commits
 - bisect--helper: double-check run command on exit code 126 and 127
 - bisect: document run behavior with exit codes 126 and 127
 - bisect--helper: release strbuf and strvec on run error
 - bisect--helper: report actual bisect_state() argument on error

 source: <fead25d6-6f5f-487a-ad4c-0657fe9785fd@www.fastmail.com>


* ds/sparse-checkout-requires-per-worktree-config (2022-01-14) 6 commits
 . worktree: copy sparse-checkout patterns and config on add
 . sparse-checkout: use repo_config_set_worktree_gently()
 . config: add repo_config_set_worktree_gently()
 . worktree: add 'init-worktree-config' subcommand
 . config: make some helpers repo-aware
 . setup: use a repository when upgrading format

 "git sparse-checkout" wants to work with per-worktree configration,
 but did not work well in a worktree attached to a bare repository.

 Expecting an update.
 cf. <1db0f601-4769-15c0-cd58-ecddfa1fc9d5@gmail.com>
 Introduces new leaks.
 cf. https://github.com/git/git/runs/4823667255?check_suite_focus=true
 source: <pull.1101.v3.git.1640727143.gitgitgadget@gmail.com>


* pw/add-p-hunk-split-fix (2022-01-12) 2 commits
  (merged to 'next' on 2022-01-19 at ea57b2c9a6)
 + builtin add -p: fix hunk splitting
 + t3701: clean up hunk splitting tests

 "git add -p" rewritten in C regressed hunk splitting in some cases,
 which has been corrected.

 Will cook in 'next'.
 source: <pull.1100.v2.git.1641899530.gitgitgadget@gmail.com>


* gc/fetch-negotiate-only-early-return (2022-01-20) 4 commits
  (merged to 'next' on 2022-01-20 at e7616428eb)
 + fetch: help translators by reusing the same message template
  (merged to 'next' on 2022-01-19 at 0f15147cfa)
 + fetch --negotiate-only: do not update submodules
 + fetch: skip tasks related to fetching objects
 + fetch: use goto cleanup in cmd_fetch()

 "git fetch --negotiate-only" is an internal command used by "git
 push" to figure out which part of our history is missing from the
 other side.  It should never recurse into submodules even when
 fetch.recursesubmodules configuration variable is set, nor it
 should trigger "gc".  The code has been tightened up to ensure it
 only does common ancestry discovery and nothing else.

 Will cook in 'next'.
 source: <20220119000056.58503-1-chooglen@google.com>


* jh/p4-fix-use-of-process-error-exception (2022-01-06) 1 commit
  (merged to 'next' on 2022-01-10 at 49d529bfd7)
 + git-p4: fix instantiation of CalledProcessError
 (this branch is used by jh/p4-various-fixups.)

 Will cook in 'next'.
 source: <20220106214156.90967-1-jholdsworth@nvidia.com>


* jh/p4-spawning-external-commands-cleanup (2022-01-06) 3 commits
  (merged to 'next' on 2022-01-10 at 54b36b4e66)
 + git-p4: don't print shell commands as python lists
 + git-p4: pass command arguments as lists instead of using shell
 + git-p4: don't select shell mode using the type of the command argument
 (this branch is used by jh/p4-various-fixups.)

 Will cook in 'next'.
 source: <20220106214035.90725-1-jholdsworth@nvidia.com>


* pb/pull-rebase-autostash-fix (2022-01-14) 1 commit
  (merged to 'next' on 2022-01-14 at 83a388a7e2)
 + pull --rebase: honor rebase.autostash when fast-forwarding

 "git pull --rebase" ignored the rebase.autostash configuration
 variable when the remote history is a descendant of our history,
 which has been corrected.

 Will cook in 'next'.
 source: <xmqqr19aayxp.fsf@gitster.g>


* rs/grep-expr-cleanup (2022-01-06) 4 commits
  (merged to 'next' on 2022-01-10 at b70a3bb0fa)
 + grep: use grep_and_expr() in compile_pattern_and()
 + grep: extract grep_binexp() from grep_or_expr()
 + grep: use grep_not_expr() in compile_pattern_not()
 + grep: use grep_or_expr() in compile_pattern_or()

 Code clean-up.

 Will cook in 'next'.
 source: <cover.1641498525.git.me@ttaylorr.com>


* fs/ssh-signing-crlf (2022-01-07) 1 commit
  (merged to 'next' on 2022-01-19 at 76b86faafb)
 + gpg-interface: trim CR from ssh-keygen

 The code path that verifies signatures made with ssh were made to
 work better on a system with CRLF line endings.

 Will cook in 'next'.
 source: <20220107090735.580225-1-fs@gigacodes.de>


* jc/qsort-s-alignment-fix (2022-01-07) 2 commits
  (merged to 'next' on 2022-01-10 at 329fd6e09a)
 + stable-qsort: avoid using potentially unaligned access
 + compat/qsort_s.c: avoid using potentially unaligned access

 Fix a hand-rolled alloca() imitation that may have violated
 alignment requirement of data being sorted in compatibility
 implementation of qsort_s() and stable qsort().

 Will cook in 'next'.
 source: <f40c1b47-9aad-2dcc-ceeb-5dee2b517cd8@web.de>
 source: <xmqqzgo76xpj.fsf@gitster.g>


* ps/avoid-unnecessary-hook-invocation-with-packed-refs (2022-01-17) 6 commits
 - refs: skip hooks when deleting uncovered packed refs
 - refs: do not execute reference-transaction hook on packing refs
 - refs: demonstrate excessive execution of the reference-transaction hook
 - refs: allow skipping the reference-transaction hook
 - refs: allow passing flags when beginning transactions
 - refs: extract packed_refs_delete_refs() to allow control of transaction

 Because a deletion of ref would need to remove it from both the
 loose ref store and the packed ref store, a delete-ref operation
 that logically removes one ref may end up invoking ref-transaction
 hook twice, which has been corrected.

 Introduces new leaks when merged to 'seen'.
 source: <cover.1642406989.git.ps@pks.im>


* rs/apply-symlinks-use-strset (2022-01-07) 1 commit
  (merged to 'next' on 2022-01-10 at 32497a67d5)
 + apply: use strsets to track symlinks

 "git apply" (ab)used the util pointer of the string-list to keep
 track of how each symbolic link needs to be handled, which has been
 simplified by using strset.

 Will cook in 'next'.
 source: <8739caad-aa3d-1f0f-b5dd-6174a8e059f6@web.de>


* ld/sparse-index-bash-completion (2022-01-10) 3 commits
 - sparse-checkout: limit tab completion to a single level
 - sparse-checkout: custom tab completion
 - sparse-checkout: custom tab completion tests

 The command line completion (in contrib/) learns to complete
 arguments give to "git sparse-checkout" command.
 source: <pull.1108.v3.git.1641841193.gitgitgadget@gmail.com>


* bc/clarify-eol-attr (2022-01-12) 2 commits
 - docs: correct documentation about eol attribute
 - t0027: add tests for eol without text in .gitattributes

 Doc and test update around the eol attribute.
 source: <20220111021507.531736-1-sandals@crustytoothpaste.net>


* jz/rev-list-exclude-first-parent-only (2022-01-12) 1 commit
 - git-rev-list: add --exclude-first-parent-only flag

 "git log" and friends learned an option --exclude-first-parent-only
 to propagate UNINTERESTING bit down only along the first-parent
 chain, just like --first-parent option shows commits that lack the
 UNINTERESTING bit only along the first-parent chain.
 source: <20220111213941.30129-1-jerry@skydio.com>


* en/present-despite-skipped (2022-01-14) 6 commits
 - Accelerate clear_skip_worktree_from_present_files() by caching
 - Update documentation related to sparsity and the skip-worktree bit
 - repo_read_index: clear SKIP_WORKTREE bit from files present in worktree
 - unpack-trees: fix accidental loss of user changes
 - t1011: add testcase demonstrating accidental loss of user modifications
 - Merge branch 'vd/sparse-clean-etc' into en/present-despite-skipped
 (this branch uses vd/sparse-clean-etc.)

 In sparse-checkouts, files mis-marked as missing from the working tree
 could lead to later problems.  Such files were hard to discover, and
 harder to correct.  Automatically detecting and correcting the marking
 of such files has been added to avoid these problems.
 source: <pull.1114.v2.git.1642175983.gitgitgadget@gmail.com>


* bc/csprng-mktemps (2022-01-17) 2 commits
 - wrapper: use a CSPRNG to generate random file names
 - wrapper: add a helper to generate numbers from a CSPRNG

 Pick a better random number generator and use it when we prepare
 temporary filenames.

 Are we solving the right problem?
 cf. <220118.86zgntpegy.gmgdl@evledraar.gmail.com>
 source: <20220117215617.843190-1-sandals@crustytoothpaste.net>


* jc/reflog-parse-options (2022-01-10) 2 commits
  (merged to 'next' on 2022-01-12 at 1659e49c4b)
 + builtin/reflog.c: use parse-options api for expire, delete subcommands
 + Merge branch 'ab/reflog-prep' into jc/reflog-parse-options

 Use the parse-options API in "git reflog" command.

 Will cook in 'next'.
 source: <pull.1175.v5.git.git.1641495981650.gitgitgadget@gmail.com>


* vd/sparse-clean-etc (2022-01-13) 9 commits
 - update-index: reduce scope of index expansion in do_reupdate
 - update-index: integrate with sparse index
 - update-index: add tests for sparse-checkout compatibility
 - checkout-index: integrate with sparse index
 - checkout-index: add --ignore-skip-worktree-bits option
 - checkout-index: expand sparse checkout compatibility tests
 - clean: integrate with sparse index
 - reset: reorder wildcard pathspec conditions
 - reset: fix validation in sparse index test
 (this branch is used by en/present-despite-skipped.)

 "git update-index", "git checkout-index", and "git clean" are
 taught to work better with the sparse checkout feature.
 source: <pull.1109.v2.git.1641924306.gitgitgadget@gmail.com>


* ms/update-index-racy (2022-01-07) 4 commits
  (merged to 'next' on 2022-01-14 at 705a33f63b)
 + update-index: refresh should rewrite index in case of racy timestamps
 + t7508: add tests capturing racy timestamp handling
 + t7508: fix bogus mtime verification
 + test-lib: introduce API for verifying file mtime

 "git update-index --refresh" has been taught to deal better with
 racy timestamps (just like "git status" already does).

 Will cook in 'next'.
 source: <pull.1105.v4.git.1641554252.gitgitgadget@gmail.com>


* jc/find-header (2022-01-06) 1 commit
  (merged to 'next' on 2022-01-10 at 8a13b4f0b3)
 + receive-pack.c: consolidate find header logic

 Code clean-up.

 Will cook in 'next'.
 source: <pull.1125.v6.git.git.1641499655700.gitgitgadget@gmail.com>


* jc/name-rev-stdin (2022-01-10) 2 commits
  (merged to 'next' on 2022-01-19 at a58e05fabe)
 + name-rev.c: use strbuf_getline instead of limited size buffer
 + name-rev: deprecate --stdin in favor of --annotate-stdin

 "git name-rev --stdin" does not behave like usual "--stdin" at
 all.  Start the process of renaming it to "--annotate-stdin".

 Will cook in 'next'.
 source: <pull.1171.v7.git.git.1641425372.gitgitgadget@gmail.com>


* en/remerge-diff (2022-01-21) 11 commits
 - diff-merges: avoid history simplifications when diffing merges
 - merge-ort: mark conflict/warning messages from inner merges as omittable
 - show, log: include conflict/warning messages in --remerge-diff headers
 - diff: add ability to insert additional headers for paths
 - merge-ort: format messages slightly different for use in headers
 - merge-ort: mark a few more conflict messages as omittable
 - merge-ort: capture and print ll-merge warnings in our preferred fashion
 - ll-merge: make callers responsible for showing warnings
 - log: clean unneeded objects during `log --remerge-diff`
 - show, log: provide a --remerge-diff capability
 - Merge branch 'ns/tmp-objdir' into en/remerge-diff

 "git log --remerge-diff" shows the difference from mechanical merge
 result and the merge result that is actually recorded.

 Will merge to 'next'?
 source: <pull.1103.v4.git.1642792341.gitgitgadget@gmail.com>


* bs/forbid-i18n-of-protocol-token-in-fetch-pack (2021-12-22) 2 commits
 - fixup! fetch-pack: parameterize message containing 'ready' keyword
 - fetch-pack: parameterize message containing 'ready' keyword

 L10n support for a few error messages.

 Expecting an ack for fixup.
 source: <20211222075805.19027-1-bagasdotme@gmail.com>


* gc/branch-recurse-submodules (2022-01-10) 6 commits
 - branch: add --recurse-submodules option for branch creation
 - builtin/branch: clean up action-picking logic in cmd_branch()
 - branch: add a dry_run parameter to create_branch()
 - branch: make create_branch() always create a branch
 - branch: move --set-upstream-to behavior to dwim_and_setup_tracking()
 - Merge branch 'js/branch-track-inherit' into gc/branch-recurse-submodules

 "git branch" learned the "--recurse-submodules" option.

 Expecting a reroll.
 cf. <kl6l7db6kvp2.fsf@chooglen-macbookpro.roam.corp.google.com>
 source: <20211220233459.45739-1-chooglen@google.com>


* hn/reftable-coverity-fixes (2022-01-20) 17 commits
 - reftable: add print functions to the record types
 - reftable: make reftable_record a tagged union
 - reftable: remove outdated file reftable.c
 - reftable: implement record equality generically
 - reftable: make reftable-record.h function signatures const correct
 - reftable: handle null refnames in reftable_ref_record_equal
 - reftable: drop stray printf in readwrite_test
 - reftable: order unittests by complexity
 - reftable: all xxx_free() functions accept NULL arguments
 - reftable: fix resource warning
 - reftable: ignore remove() return value in stack_test.c
 - reftable: check reftable_stack_auto_compact() return value
 - reftable: fix resource leak blocksource.c
 - reftable: fix resource leak in block.c error path
 - reftable: fix OOB stack write in print functions
 - Merge branch 'hn/create-reflog-simplify' into hn/reftable-coverity-fixes
 - Merge branch 'hn/reftable' into hn/reftable-coverity-fixes

 Problems identified by Coverity in the reftable code have been
 corrected.

 Will merge to 'next'.
 source: <pull.1152.v6.git.git.1642691534.gitgitgadget@gmail.com>


* tb/midx-bitmap-corruption-fix (2022-01-04) 9 commits
 - pack-bitmap.c: gracefully fallback after opening pack/MIDX
 - midx: read `RIDX` chunk when present
 - t/lib-bitmap.sh: parameterize tests over reverse index source
 - t5326: move tests to t/lib-bitmap.sh
 - t5326: extract `test_rev_exists`
 - t5326: drop unnecessary setup
 - pack-revindex.c: instrument loading on-disk reverse index
 - midx.c: make changing the preferred pack safe
 - t5326: demonstrate bitmap corruption after permutation

 A bug that made multi-pack bitmap and the object order out-of-sync
 (hence the .midx data gets corrupted) has been fixed.

 Waiting for a hopefully final review.
 cf. <Ydceeo33Yt4N%2FbrN@nand.local>
 source: <cover.1641320129.git.me@ttaylorr.com>


* pw/fix-some-issues-in-reset-head (2021-12-08) 14 commits
 - rebase -m: don't fork git checkout
 - rebase --apply: set ORIG_HEAD correctly
 - rebase --apply: fix reflog
 - reset_head(): take struct rebase_head_opts
 - rebase: cleanup reset_head() calls
 - reset_head(): make default_reflog_action optional
 - reset_head(): factor out ref updates
 - create_autostash(): remove unneeded parameter
 - reset_head(): remove action parameter
 - rebase --apply: don't run post-checkout hook if there is an error
 - rebase: do not remove untracked files on checkout
 - rebase: pass correct arguments to post-checkout hook
 - t5403: refactor rebase post-checkout hook tests
 - rebase: factor out checkout for up to date branch

 Fix "some issues" in a helper function reset_head().

 Expecting a reroll.
 cf. <xmqqk0gdskkh.fsf@gitster.g>
 cf. <xmqqwnkdr3xb.fsf@gitster.g>
 cf. <xmqqpmq5r3j9.fsf@gitster.g>
 cf. <xmqqczm5r34h.fsf@gitster.g>
 cf. <CABPp-BEHW4VLG18twcM_8iOco1jZ2iuGT+KN8aS+-sAAnBhTnw@mail.gmail.com>
 source: <pull.1049.v2.git.1638975481.gitgitgadget@gmail.com>


* ab/cat-file (2022-01-12) 12 commits
  (merged to 'next' on 2022-01-12 at ee4d43041d)
 + cat-file: s/_/-/ in typo'd usage_msg_optf() message
 + cat-file: don't whitespace-pad "(...)" in SYNOPSIS and usage output
  (merged to 'next' on 2022-01-05 at e145efa605)
 + cat-file: use GET_OID_ONLY_TO_DIE in --(textconv|filters)
 + object-name.c: don't have GET_OID_ONLY_TO_DIE imply *_QUIETLY
 + cat-file: correct and improve usage information
 + cat-file: fix remaining usage bugs
 + cat-file: make --batch-all-objects a CMDMODE
 + cat-file: move "usage" variable to cmd_cat_file()
 + cat-file docs: fix SYNOPSIS and "-h" output
 + parse-options API: add a usage_msg_optf()
 + cat-file tests: test messaging on bad objects/paths
 + cat-file tests: test bad usage

 Assorted updates to "git cat-file", especially "-h".

 Will cook in 'next'.
 source: <cover-v6-00.10-00000000000-20211228T132637Z-avarab@gmail.com>
 source: <cover-0.2-00000000000-20220110T220553Z-avarab@gmail.com>


* ab/grep-patterntype (2022-01-18) 10 commits
 - grep.[ch]: remove GREP_PATTERN_TYPE_UNSPECIFIED
 - grep: simplify config parsing and option parsing
 - grep.c: do "if (bool && memchr())" not "if (memchr() && bool)"
 - grep.h: make "grep_opt.pattern_type_option" use its enum
 - grep API: call grep_config() after grep_init()
 - grep.c: don't pass along NULL callback value
 - built-ins: trust the "prefix" from run_builtin()
 - grep tests: add missing "grep.patternType" config tests
 - log tests: check if grep_config() is called by "log"-like cmds
 - grep.h: remove unused "regex_t regexp" from grep_opt

 Some code clean-up in the "git grep" machinery.

 Looking good, except for the last two steps.
 source: <cover-v8-00.10-00000000000-20220118T155211Z-avarab@gmail.com>


* js/use-builtin-add-i (2021-12-01) 2 commits
 - add -i: default to the built-in implementation
 - t2016: require the PERL prereq only when necessary

 "git add -i" was rewritten in C some time ago and has been in
 testing; the reimplementation is now exposed to general public by
 default.

 On hold.
 There are known breakages on macOS.
 cf. <nycvar.QRO.7.76.6.2112021832060.63@tvgsbejvaqbjf.bet>
 source: <pull.1087.git.1638281655.gitgitgadget@gmail.com>


* jt/conditional-config-on-remote-url (2022-01-18) 2 commits
  (merged to 'next' on 2022-01-19 at 3c2df266eb)
 + config: include file if remote URL matches a glob
 + config: make git_config_include() static

 The conditional inclusion mechanism of configuration files using
 "[includeIf <condition>]" learns to base its decision on the
 URL of the remote repository the repository interacts with.

 Will cook in 'next'.
 source: <cover.1642527965.git.jonathantanmy@google.com>


* ab/ambiguous-object-name (2022-01-13) 6 commits
 - object-name: re-use "struct strbuf" in show_ambiguous_object()
 - object-name: iterate ambiguous objects before showing header
 - object-name: show date for ambiguous tag objects
 - object-name: make ambiguous object output translatable
 - object-name: explicitly handle OBJ_BAD in show_ambiguous_object()
 - object-name tests: add tests for ambiguous object blind spots

 Error output given in response to an ambiguous object name has been
 improved.
 source: <cover-v7-0.6-00000000000-20220111T130811Z-avarab@gmail.com>


* tl/ls-tree-oid-only (2022-01-13) 9 commits
 - ls-tree.c: introduce "--format" option
 - cocci: allow padding with `strbuf_addf()`
 - ls-tree.c: introduce struct "show_tree_data"
 - ls-tree.c: support --object-only option for "git-ls-tree"
 - ls-tree: optimize naming and handling of "return" in show_tree()
 - ls-tree: use "size_t", not "int" for "struct strbuf"'s "len"
 - ls-tree: use "enum object_type", not {blob,tree,commit}_type
 - ls-tree: add missing braces to "else" arms
 - ls-tree: remove commented-out code

 "git ls-tree" learns "--oid-only" option, similar to "--name-only",
 and more generalized "--format" option.
 source: <cover.1641978175.git.dyroneteng@gmail.com>


* ab/config-based-hooks-2 (2022-01-07) 17 commits
  (merged to 'next' on 2022-01-19 at 594b6da22c)
 + run-command: remove old run_hook_{le,ve}() hook API
 + receive-pack: convert push-to-checkout hook to hook.h
 + read-cache: convert post-index-change to use hook.h
 + commit: convert {pre-commit,prepare-commit-msg} hook to hook.h
 + git-p4: use 'git hook' to run hooks
 + send-email: use 'git hook run' for 'sendemail-validate'
 + git hook run: add an --ignore-missing flag
 + hooks: convert worktree 'post-checkout' hook to hook library
 + hooks: convert non-worktree 'post-checkout' hook to hook library
 + merge: convert post-merge to use hook.h
 + am: convert applypatch-msg to use hook.h
 + rebase: convert pre-rebase to use hook.h
 + hook API: add a run_hooks_l() wrapper
 + am: convert {pre,post}-applypatch to use hook.h
 + gc: use hook library for pre-auto-gc hook
 + hook API: add a run_hooks() wrapper
 + hook: add 'run' subcommand

 More "config-based hooks".

 Will cook in 'next'.
 source: <cover-v6-00.17-00000000000-20211222T035755Z-avarab@gmail.com>


* jh/builtin-fsmonitor-part2 (2021-12-25) 31 commits
 - fixup! t7527: create test for fsmonitor--daemon
 - fixup! t/perf/p7519: speed up test on Windows
 - t7527: test status with untracked-cache and fsmonitor--daemon
 - fsmonitor: force update index after large responses
 - fsmonitor--daemon: use a cookie file to sync with file system
 - fsmonitor--daemon: periodically truncate list of modified files
 - t/perf/p7519: add fsmonitor--daemon test cases
 - t/perf/p7519: speed up test on Windows
 - t/helper/test-chmtime: skip directories on Windows
 - t/perf: avoid copying builtin fsmonitor files into test repo
 - t7527: create test for fsmonitor--daemon
 - t/helper/fsmonitor-client: create IPC client to talk to FSMonitor Daemon
 - help: include fsmonitor--daemon feature flag in version info
 - fsmonitor--daemon: implement handle_client callback
 - compat/fsmonitor/fsm-listen-darwin: implement FSEvent listener on MacOS
 - compat/fsmonitor/fsm-listen-darwin: add macos header files for FSEvent
 - compat/fsmonitor/fsm-listen-win32: implement FSMonitor backend on Windows
 - fsmonitor--daemon: create token-based changed path cache
 - fsmonitor--daemon: define token-ids
 - fsmonitor--daemon: add pathname classification
 - fsmonitor--daemon: implement 'start' command
 - fsmonitor--daemon: implement 'run' command
 - compat/fsmonitor/fsm-listen-darwin: stub in backend for Darwin
 - compat/fsmonitor/fsm-listen-win32: stub in backend for Windows
 - fsmonitor--daemon: implement 'stop' and 'status' commands
 - fsmonitor--daemon: add a built-in fsmonitor daemon
 - fsmonitor: document builtin fsmonitor
 - fsmonitor: use IPC to query the builtin FSMonitor daemon
 - fsmonitor: config settings are repository-specific
 - fsmonitor-ipc: create client routines for git-fsmonitor--daemon
 - fsmonitor: enhance existing comments

 Built-in fsmonitor (part 2).

 Expecting a reroll.
 Seems that the discussion stalled.
 cf. <d9c3ef61-768c-3560-2858-3438c355a742@jeffhostetler.com>
 source: <pull.1041.v4.git.1634826309.gitgitgadget@gmail.com>


* es/superproject-aware-submodules (2021-11-18) 5 commits
 - submodule: use config to find superproject worktree
 - submodule: record superproject gitdir during 'update'
 - submodule: record superproject gitdir during absorbgitdirs
 - introduce submodule.superprojectGitDir record
 - t7400-submodule-basic: modernize inspect() helper

 A configuration variable in a submodule points at the location of
 the superproject it is bound to (RFC).

 Expecting a reroll.
 cf. <20211117234300.2598132-1-jonathantanmy@google.com>
 source: <20211117005701.371808-1-emilyshaffer@google.com>


* ab/only-single-progress-at-once (2022-01-07) 7 commits
 - *.c: use isatty(0|2), not isatty(STDIN_FILENO|STDERR_FILENO)
 - pack-bitmap-write.c: don't return without stop_progress()
 - progress.c: add temporary variable from progress struct
 - progress.c tests: test some invalid usage
 - progress.c tests: make start/stop commands on stdin
 - progress.c test helper: add missing braces
 - leak tests: fix a memory leak in "test-progress" helper

 Further tweaks on progress API.

 Getting there.
 source: <cover-v8-0.7-00000000000-20211228T150728Z-avarab@gmail.com>

^ permalink raw reply	[relevance 2%]

* What's cooking in git.git (Feb 2022, #01; Thu, 3)
@ 2022-02-04  5:22  3% Junio C Hamano
  0 siblings, 0 replies; 200+ results
From: Junio C Hamano @ 2022-02-04  5:22 UTC (permalink / raw)
  To: git

Here are the topics that have been cooking in my tree.  Commits
prefixed with '+' are in 'next' (being in 'next' is a sign that a
topic is stable enough to be used and are candidate to be in a
future release).  Commits prefixed with '-' are only in 'seen',
which means nothing more than that I have found them of interest for
some reason (like "it may have hard-to-resolve conflicts with
another topic already in flight" or "this may turn out to be
useful").  Do not read too much into a topic being in (or not in)
'seen'.  The ones marked with '.' do not appear in any of the
integration branches, but I am still holding onto them.

Will merge a bunch of topics as the first batch in this cycle down
to 'master' (aka 'main'), hopefully tomorrow.

Many topics have sketchy or even empty topic description in the list
below; help to fill them in is very much appreciated ;-)

Copies of the source code to Git live in many repositories, and the
following is a list of the ones I push into or their mirrors.  Some
repositories have only a subset of branches.

With maint, master, next, seen, todo:

	git://git.kernel.org/pub/scm/git/git.git/
	git://repo.or.cz/alt-git.git/
	https://kernel.googlesource.com/pub/scm/git/git/
	https://github.com/git/git/
	https://gitlab.com/git-vcs/git/

With all the integration branches and topics broken out:

	https://github.com/gitster/git/

Even though the preformatted documentation in HTML and man format
are not sources, they are published in these repositories for
convenience (replace "htmldocs" with "manpages" for the manual
pages):

	git://git.kernel.org/pub/scm/git/git-htmldocs.git/
	https://github.com/gitster/git-htmldocs.git/

Release tarballs are available at:

	https://www.kernel.org/pub/software/scm/git/

--------------------------------------------------
[Graduated to 'master']

* en/keep-cwd (2022-01-26) 1 commit
  (merged to 'next' on 2022-01-26 at b2518a683c)
 + sequencer, stash: fix running from worktree subdir

 Fix a regression in 2.35 that roke the use of "rebase" and "stash"
 in a secondary worktree.
 source: <pull.1205.git.git.1643161426138.gitgitgadget@gmail.com>

--------------------------------------------------
[New Topics]

* jt/clone-not-quite-empty (2022-01-26) 1 commit
  (merged to 'next' on 2022-01-26 at c3bb39676e)
 + clone: support unusual remote ref configurations

 Cloning from a repository that does not yet have any branches or
 tags but has other refs resulted in a "remote transport reported
 error", which has been corrected.

 Will merge to 'master'.
 source: <20220124180909.2437002-1-jonathantanmy@google.com>


* ab/no-errno-from-resolve-ref-unsafe (2022-01-26) 2 commits
 - refs API: remove "failure_errno" from refs_resolve_ref_unsafe()
 - sequencer: don't use die_errno() on refs_resolve_ref_unsafe() failure

 Remaining code-clean-up.

 Will merge to 'next'. 
 source: <cover-v4-0.2-00000000000-20220126T143427Z-avarab@gmail.com>


* gh/doc-typos (2022-01-26) 2 commits
 - Documentation/config/pgp.txt: add missing apostrophe
 - Documentation/config/pgp.txt: replace stray <TAB> character with <SPC>

 Typofix.

 Will merge to 'next'.
 source: <20220126121426.53799-1-greg@hurrell.net>


* jc/doc-log-messages (2022-01-27) 3 commits
 - SubmittingPatches: explain why we care about log messages
 - CodingGuidelines: hint why we value clearly written log messages
 - SubmittingPatches: write problem statement in the log in the present tense

 Update the contributor-facing documents on proposed log messages.

 Will merge to 'next'?
 source: <20220126234205.2923388-1-gitster@pobox.com>


* en/fetch-negotiation-default-fix (2022-02-02) 3 commits
 - repo-settings: rename the traditional default fetch.negotiationAlgorithm
 - repo-settings: fix error handling for unknown values
 - repo-settings: fix checking for fetch.negotiationAlgorithm=default

 Fix interaction between fetch.negotiationAlgorithm and
 feature.experimental configuration variables.

 Will merge to 'next'.
 source: <pull.1131.v4.git.1643773361.gitgitgadget@gmail.com>


* en/sparse-checkout-leakfix (2022-01-28) 1 commit
 - sparse-checkout: fix a couple minor memory leaks

 Leakfix.

 Will merge to 'next'.
 source: <pull.1189.git.git.1643335098710.gitgitgadget@gmail.com>


* js/diff-filter-negation-fix (2022-01-28) 3 commits
 - diff-filter: be more careful when looking for negative bits
 - diff.c: move the diff filter bits definitions up a bit
 - docs(diff): lose incorrect claim about `diff-files --diff-filter=A`

 "git diff --diff-filter=aR" is now parsed correctly.

 Will merge to 'next'.
 source: <pull.1127.v3.git.1643371370.gitgitgadget@gmail.com>


* js/no-more-legacy-stash (2022-01-27) 4 commits
 - stash: stop warning about the obsolete `stash.useBuiltin` config setting
 - stash: remove documentation for `stash.useBuiltin`
 - add: remove support for `git-legacy-stash`
 - git-sh-setup: remove remnant bits referring to `git-legacy-stash`

 Removal of unused code and doc.

 Will merge to 'next'.
 source: <pull.1133.git.1643321031.gitgitgadget@gmail.com>


* js/scalar-global-options (2022-01-28) 1 commit
 - scalar: accept -C and -c options before the subcommand

 Scalar update.

 Will merge to 'next'.
 source: <pull.1130.v2.git.1643380317358.gitgitgadget@gmail.com>


* rc/negotiate-only-typofix (2022-01-28) 1 commit
 - fetch: fix negotiate-only error message

 Typofix.

 Will merge to 'next'.
 source: <20220128143602.31842-1-robert@coup.net.nz>


* rj/receive-pack-abort-upon-disconnect (2022-01-28) 1 commit
 - receive-pack: check if client is alive before completing the push

 "git push" may be killed by the user when the server side has
 finished receiving all data and is about to commit the result.
 Give the latter a better chance to notice such situation and abort
 processing the ref updates.

 Will merge to 'next'?
 source: <20220128194811.3396281-1-robin.jarry@6wind.com>


* jz/patch-id-hunk-header-parsing-fix (2022-02-02) 2 commits
 - patch-id: fix scan_hunk_header on diffs with 1 line of before/after
 - patch-id: fix antipatterns in tests

 Unlike "git apply", "git patch-id" did not handle patches with
 hunks that has only 1 line in either preimage or postimage, which
 has been corrected.

 Will merge to 'next'.
 source: <20220202041945.10077-1-jerry@skydio.com>
 source: <20220202042015.10115-1-jerry@skydio.com>


* tg/fetch-prune-exit-code-fix (2022-01-31) 1 commit
 - fetch --prune: exit with error if pruning fails

 When "git fetch --prune" failed to prune the refs it wanted to
 prune, the command issued error messages but exited with exit
 status 0, which has been corrected.

 Will merge to 'next'.
 source: <20220131133047.1885074-1-t.gummerer@gmail.com>


* ab/do-not-hide-failures-in-git-dot-pm (2022-02-01) 1 commit
 - perl Git.pm: don't ignore signalled failure in _cmd_close()

 Git.pm update.

 Will merge to 'next'.
 source: <patch-1.1-86353c3b366-20220201T205218Z-avarab@gmail.com>


* ab/object-file-api-updates (2022-02-01) 10 commits
 - object-file API: pass an enum to read_object_with_reference()
 - object-file.c: add a literal version of write_object_file_prepare()
 - object-file API: replace check_object_signature() with stream_*
 - object-file API: have hash_object_file() take "enum object_type"
 - object-file API: replace some use of check_object_signature()
 - object-file API: provide a hash_object_file_oideq()
 - object-file API: have write_object_file() take "enum object_type"
 - object-file API: add a format_object_header() function
 - object-file API: return "void", not "int" from hash_object_file()
 - object-file.c: split up declaration of unrelated variables

 source: <cover-00.10-00000000000-20220201T144803Z-avarab@gmail.com>


* cb/clear-quarantine-early-on-all-ref-update-errors (2022-02-01) 1 commit
 - receive-pack: purge temporary data if no command is ready to run

 Check if "receive-pack" will do any ref updates (various conditions
 could reject a push) before received objects are taken out of the
 temporary directory used for quarantine purposes, so that a push
 that is known-to-fail will not leave crufts that a future "gc"
 needs to clean up.

 Will merge to 'next'?
 source: <20220129063538.24038-1-bojun.cbj@gmail.com>


* hn/reftable-tests (2022-01-31) 3 commits
 - t5312: prepare for reftable
 - t1405: mark test that checks existence as REFFILES
 - t1405: explictly delete reflogs for reftable

 Prepare more test scripts for the introduction of reftable.

 Will merge to 'next'.
 source: <pull.1209.git.git.1643651420.gitgitgadget@gmail.com>


* ja/i18n-common-messages (2022-01-31) 5 commits
 - i18n: fix some misformated placeholders in command synopsis
 - i18n: remove from i18n strings that do not hold translatable parts
 - i18n: factorize "invalid value" messages
 - SQUASH???
 - i18n: factorize more 'incompatible options' messages

 Unify more messages to help l10n.

 Will merge to 'next' after squashing the fix-up in.
 source: <pull.1123.v4.git.1643666870.gitgitgadget@gmail.com>


* tk/subtree-merge-not-ff-only (2022-02-01) 1 commit
 - subtree: force merge commit

 When "git subtree" wants to create a merge, it used "git merge" and
 let it be affected by end-user's "merge.ff" configuration, which
 has been corrected.

 Will merge to 'next'.
 source: <20220201172601.262718-1-aclopte@gmail.com>


* ab/complete-show-all-commands (2022-02-02) 2 commits
 - completion: add a GIT_COMPLETION_SHOW_ALL_COMMANDS
 - completion tests: re-source git-completion.bash in a subshell

 The command line completion script (in contrib/) learns an option
 to complete all Git subcommands, including the ones that are
 normally hidden.

 Will merge to 'next'.
 source: <cover-v2-0.2-00000000000-20220202T111228Z-avarab@gmail.com>


* en/merge-tree (2022-02-02) 16 commits
 - git-merge-tree.txt: add a section on potentional usage mistakes
 - merge-tree: add a --allow-unrelated-histories flag
 - merge-tree: allow `ls-files -u` style info to be NUL terminated
 - merge-tree: provide easy access to `ls-files -u` style info
 - merge-tree: provide a list of which files have conflicts
 - merge-ort: provide a merge_get_conflicted_files() helper function
 - merge-tree: support including merge messages in output
 - merge-ort: allow update messages to be written to different file stream
 - merge-ort: split out a separate display_update_messages() function
 - diff: allow diff_warn_rename_limit to write somewhere besides stderr
 - Introduce a variant of the `warning()` function that takes a `FILE *`
 - merge-tree: implement real merges
 - merge-tree: add option parsing and initial shell for real merge function
 - merge-tree: move logic for existing merge into new function
 - merge-tree: rename merge_trees() to trivial_merge_trees()
 - Merge branch 'en/remerge-diff' into en/merge-trees
 (this branch uses en/remerge-diff.)

 A new command is introduced that takes two commits and computes a
 tree that would be contained in the resulting merge commit, if the
 histories leading to these two commits were to be merged, and is
 added as a new mode of "git merge-tree" subcommand.

 source: <pull.1122.v3.git.1643787281.gitgitgadget@gmail.com>


* ll/doc-mktree-typofix (2022-02-02) 1 commit
 - fix typo in git-mktree.txt

 Typofix.

 Will merge to 'next'.
 source: <pull.1207.git.git.1643792450866.gitgitgadget@gmail.com>

* po/doc-check-ignore-markup-fix (2022-02-03) 1 commit
 - doc: check-ignore: code-quote an exclamation mark

 Typofix.

 Will merge to 'next'.
 source: <20220203101643.1987-1-philipoakley@iee.email>


* sy/diff-usage-typofix (2022-02-02) 1 commit
 - builtin/diff.c: fix "git-diff" usage string typo

 Typofix.

 Will merge to 'next'.
 source: <20220202072844.35545-1-shaoxuan.yuan02@gmail.com>


* sy/modernize-t-lib-read-tree-m-3way (2022-02-02) 2 commits
 - t/lib-read-tree-m-3way: indent with tabs
 - t/lib-read-tree-m-3way: modernize style

 Style updates on a test script helper.

 Will merge to 'next'.
 source: <20220123060318.471414-1-shaoxuan.yuan02@gmail.com>

--------------------------------------------------
[Stalled]

* je/http-better-error-output (2021-12-03) 1 commit
 . http-backend: give a hint that web browser access is not supported

 When the http-backend program, which is the server-side component
 for the smart HTTP transport, sends a "404 Not found" error, we
 deliberately did not say anything to the requesting client.  We now
 send a message back to the browser to tell the user that they do
 not want to visit the URL via their browser, instead of a totally
 blank page.

 Expecting a reroll.
 Breaks its self tests.
 cf. <7r23s082-o3q0-479o-srqn-r45q778s5nq7@vanv.qr>
 source: <20211202102855.23907-1-jengelh@inai.de>


* cb/save-term-across-editor-invocation (2021-12-01) 3 commits
 - fixup! editor: allow for saving/restoring terminal state
 - editor: allow for saving/restoring terminal state
 - terminal: teach save_term to fail when not foreground

 Some editors are reported to leave the terminal in funny state
 after they exit on Windows.  Work it around by saving and restoring
 the terminal state when needed.

 Expecting a reroll.
 cf. <CAPUEsphktbdxeV7hvF52Or3CVHS8oOk5-WV=xfEZa8kfCVVnVg@mail.gmail.com>
 source: <20211202035446.1154-1-carenas@gmail.com>


* ar/submodule-update (2022-01-28) 9 commits
 . submodule: move core cmd_update() logic to C
 . submodule tests: test for init and update failure output
 . submodule--helper: don't use bitfield indirection for parse_options()
 . builtin/submodule--helper.c: rename option variables to "opt"
 . builtin/submodule--helper.c: reformat designated initializers
 . submodule--helper: run update using child process struct
 . submodule--helper: allow setting superprefix for init_submodule()
 . submodule--helper: refactor get_submodule_displaypath()
 . submodule--helper: get remote names from any repository

 Rewrite of "git submodule update" in C.
 source: <cover-v5-0.9-00000000000-20220128T125206Z-avarab@gmail.com>

--------------------------------------------------
[Cooking]

* jc/mem-pool-alignment (2022-01-24) 1 commit
  (merged to 'next' on 2022-01-26 at 057b6a78f5)
 + mem-pool: don't assume uintmax_t is aligned enough for all types

 Update the logic to compute alignment requirement for our mem-pool.

 Will merge to 'master'.
 source: <20220123203347.74869-1-jrtc27@jrtc27.com>


* ab/auto-detect-zlib-compress2 (2022-01-26) 1 commit
 - compat: auto-detect if zlib has uncompress2()

 Notice older zlib to enable our replacement uncompress2()
 automatically.

 Will merge to 'next'.
 source: <xmqqr18x3s5s.fsf@gitster.g>


* en/plug-leaks-in-merge (2022-01-21) 2 commits
  (merged to 'next' on 2022-01-26 at 0cf6aa0a2b)
 + merge: fix memory leaks in cmd_merge()
 + merge-ort: fix memory leak in merge_ort_internal()

 Leakfix.

 Will merge to 'master'.
 source: <pull.1200.git.git.1642664835.gitgitgadget@gmail.com>


* js/apply-partial-clone-filters-recursively (2022-01-21) 1 commit
 - clone, submodule: pass partial clone filters to submodules

 "git clone --filter=... --recurse-submodules" only makes the
 top-level a partial clone, while submodules are fully cloned.  This
 behaviour is changed to pass the same filter down to the submodules.

 It is unclear passing all filters down is a good idea.  It
 definitely is contrary to the project norm to flip the default
 instead of starting the new behaviour as an optional behaviour.
 cf. <xmqqsftgbkvm.fsf@gitster.g>
 source: <50ebf7bd39adf34fa4ada27cd433d81b5381abe5.1642735881.git.steadmon@google.com>


* js/sparse-vs-split-index (2022-01-23) 3 commits
  (merged to 'next' on 2022-01-26 at 7443487955)
 + split-index: it really is incompatible with the sparse index
 + t1091: disable split index
 + sparse-index: sparse index is disallowed when split index is active

 Mark in various places in the code that the sparse index and the
 split index features are mutually incompatible.

 Will merge to 'master'.
 source: <pull.1119.git.1642613379.gitgitgadget@gmail.com>


* js/test-unset-trace2-parents (2022-01-20) 1 commit
  (merged to 'next' on 2022-01-20 at ebb085e3e4)
 + test-lib: unset trace2 parent envvars

 Avoid tests that are run under GIT_TRACE2 set from failing
 unnecessarily.

 Will merge to 'master'.
 source: <82e51a52e20fbe13a5a898a0a2f6dbe1188e3fa3.1642116539.git.steadmon@google.com>


* jt/sparse-checkout-leading-dir-fix (2022-01-21) 1 commit
  (merged to 'next' on 2022-01-26 at 5611ce9047)
 + sparse-checkout: create leading directory

 "git sparse-checkout init" failed to write into $GIT_DIR/info
 directory when the repository was created without one, which has
 been corrected to auto-create it.

 Will merge to 'master'.
 source: <20220121174441.3991963-1-jonathantanmy@google.com>


* rs/parse-options-lithelp-help (2022-01-20) 1 commit
 - parse-options: document bracketing of argh

 Comment update.

 Will merge to 'next'.
 source: <c6ab4408-1091-4d14-849e-afe5f3053e8b@web.de>


* en/merge-ort-restart-optim-fix (2022-01-17) 1 commit
  (merged to 'next' on 2022-01-19 at 84da10b057)
 + merge-ort: avoid assuming all renames detected

 The merge-ort misbehaved when merge.renameLimit configuration is
 set too low and failed to find all renames.

 Will merge to 'master'.
 source: <pull.1194.v2.git.git.1642443955836.gitgitgadget@gmail.com>


* jh/p4-various-fixups (2022-01-16) 23 commits
 . git-p4: seperate multiple statements onto seperate lines
 . git-p4: move inline comments to line above
 . git-p4: only seperate code blocks by a single empty line
 . git-p4: compare to singletons with "is" and "is not"
 . git-p4: normalize indentation of lines in conditionals
 . git-p4: ensure there is a single space around all operators
 . git-p4: ensure every comment has a single #
 . git-p4: remove spaces between dictionary keys and colons
 . git-p4: remove redundant backslash-continuations inside brackets
 . git-p4: remove extraneous spaces before function arguments
 . git-p4: place a single space after every comma
 . git-p4: removed brackets when assigning multiple return values
 . git-p4: remove spaces around default arguments
 . git-p4: remove padding from lists, tuples and function arguments
 . git-p4: sort and de-duplcate pylint disable list
 . git-p4: remove commented code
 . git-p4: convert descriptive class and function comments into docstrings
 . git-p4: improve consistency of docstring formatting
 . git-p4: indent with 4-spaces
 . git-p4: remove unneeded semicolons from statements
 . git-p4: add blank lines between functions and class definitions
 . Merge branch 'jh/p4-spawning-external-commands-cleanup' into jh/p4-various-fixups
 . Merge branch 'jh/p4-fix-use-of-process-error-exception' into jh/p4-various-fixups
 (this branch uses jh/p4-fix-use-of-process-error-exception and jh/p4-spawning-external-commands-cleanup.)

 Various cleanups to "git p4".

 Breaks its own test suite.
 source: <20220116160550.514637-1-jholdsworth@nvidia.com>


* po/readme-mention-contributor-hints (2022-01-17) 1 commit
  (merged to 'next' on 2022-01-19 at 7e14690eb9)
 + README.md: add CodingGuidelines and a link for Translators

 Doc update.

 Will merge to 'master'.
 source: <pull.1115.v3.git.1642443491609.gitgitgadget@gmail.com>


* tl/doc-cli-options-first (2022-01-17) 1 commit
  (merged to 'next' on 2022-01-19 at 9ec14cfe73)
 + git-cli.txt: clarify "options first and then args"

 We explain that revs come first before the pathspec among command
 line arguments, but did not spell out that dashed options come
 before other args, which has been corrected.

 Will merge to 'master'.
 source: <fe748304d94e0ae25fd3549aadc49cf951ff2d64.1642405806.git.dyroneteng@gmail.com>


* rs/bisect-executable-not-found (2022-01-19) 4 commits
 - bisect--helper: double-check run command on exit code 126 and 127
 - bisect: document run behavior with exit codes 126 and 127
 - bisect--helper: release strbuf and strvec on run error
 - bisect--helper: report actual bisect_state() argument on error

 A not-so-common mistake is to write a script to feed "git bisect
 run" without making it executable, in which case all tests will
 exit with 126 or 127 error codes, even on revisions that are marked
 as good.  Try to recoginse this situation and stop iteration early.

 Will merge to 'next'?
 source: <fead25d6-6f5f-487a-ad4c-0657fe9785fd@www.fastmail.com>


* ds/sparse-checkout-requires-per-worktree-config (2022-01-31) 5 commits
 - worktree: copy sparse-checkout patterns and config on add
 - sparse-checkout: set worktree-config correctly
 - config: add repo_config_set_worktree_gently()
 - worktree: create init_worktree_config()
 - Documentation: add extensions.worktreeConfig details

 "git sparse-checkout" wants to work with per-worktree configration,
 but did not work well in a worktree attached to a bare repository.

 What's the doneness of this one?
 source: <pull.1101.v5.git.1643641259.gitgitgadget@gmail.com>


* pw/add-p-hunk-split-fix (2022-01-12) 2 commits
  (merged to 'next' on 2022-01-19 at ea57b2c9a6)
 + builtin add -p: fix hunk splitting
 + t3701: clean up hunk splitting tests

 "git add -p" rewritten in C regressed hunk splitting in some cases,
 which has been corrected.

 Will merge to 'master'.
 source: <pull.1100.v2.git.1641899530.gitgitgadget@gmail.com>


* gc/fetch-negotiate-only-early-return (2022-01-20) 4 commits
  (merged to 'next' on 2022-01-20 at e7616428eb)
 + fetch: help translators by reusing the same message template
  (merged to 'next' on 2022-01-19 at 0f15147cfa)
 + fetch --negotiate-only: do not update submodules
 + fetch: skip tasks related to fetching objects
 + fetch: use goto cleanup in cmd_fetch()

 "git fetch --negotiate-only" is an internal command used by "git
 push" to figure out which part of our history is missing from the
 other side.  It should never recurse into submodules even when
 fetch.recursesubmodules configuration variable is set, nor it
 should trigger "gc".  The code has been tightened up to ensure it
 only does common ancestry discovery and nothing else.

 Will merge to 'master'.
 source: <20220119000056.58503-1-chooglen@google.com>


* jh/p4-fix-use-of-process-error-exception (2022-01-06) 1 commit
  (merged to 'next' on 2022-01-10 at 49d529bfd7)
 + git-p4: fix instantiation of CalledProcessError
 (this branch is used by jh/p4-various-fixups.)

 Will merge to 'master'.
 source: <20220106214156.90967-1-jholdsworth@nvidia.com>


* jh/p4-spawning-external-commands-cleanup (2022-01-06) 3 commits
  (merged to 'next' on 2022-01-10 at 54b36b4e66)
 + git-p4: don't print shell commands as python lists
 + git-p4: pass command arguments as lists instead of using shell
 + git-p4: don't select shell mode using the type of the command argument
 (this branch is used by jh/p4-various-fixups.)

 Will merge to 'master'.
 source: <20220106214035.90725-1-jholdsworth@nvidia.com>


* pb/pull-rebase-autostash-fix (2022-01-14) 1 commit
  (merged to 'next' on 2022-01-14 at 83a388a7e2)
 + pull --rebase: honor rebase.autostash when fast-forwarding

 "git pull --rebase" ignored the rebase.autostash configuration
 variable when the remote history is a descendant of our history,
 which has been corrected.

 Will merge to 'master'.
 source: <xmqqr19aayxp.fsf@gitster.g>


* rs/grep-expr-cleanup (2022-01-06) 4 commits
  (merged to 'next' on 2022-01-10 at b70a3bb0fa)
 + grep: use grep_and_expr() in compile_pattern_and()
 + grep: extract grep_binexp() from grep_or_expr()
 + grep: use grep_not_expr() in compile_pattern_not()
 + grep: use grep_or_expr() in compile_pattern_or()

 Code clean-up.

 Will merge to 'master'.
 source: <cover.1641498525.git.me@ttaylorr.com>


* fs/ssh-signing-crlf (2022-01-07) 1 commit
  (merged to 'next' on 2022-01-19 at 76b86faafb)
 + gpg-interface: trim CR from ssh-keygen

 The code path that verifies signatures made with ssh were made to
 work better on a system with CRLF line endings.

 Will merge to 'master'.
 source: <20220107090735.580225-1-fs@gigacodes.de>


* jc/qsort-s-alignment-fix (2022-01-07) 2 commits
  (merged to 'next' on 2022-01-10 at 329fd6e09a)
 + stable-qsort: avoid using potentially unaligned access
 + compat/qsort_s.c: avoid using potentially unaligned access

 Fix a hand-rolled alloca() imitation that may have violated
 alignment requirement of data being sorted in compatibility
 implementation of qsort_s() and stable qsort().

 Will merge to 'master'.
 source: <f40c1b47-9aad-2dcc-ceeb-5dee2b517cd8@web.de>
 source: <xmqqzgo76xpj.fsf@gitster.g>


* ps/avoid-unnecessary-hook-invocation-with-packed-refs (2022-01-17) 6 commits
 - refs: skip hooks when deleting uncovered packed refs
 - refs: do not execute reference-transaction hook on packing refs
 - refs: demonstrate excessive execution of the reference-transaction hook
 - refs: allow skipping the reference-transaction hook
 - refs: allow passing flags when beginning transactions
 - refs: extract packed_refs_delete_refs() to allow control of transaction

 Because a deletion of ref would need to remove it from both the
 loose ref store and the packed ref store, a delete-ref operation
 that logically removes one ref may end up invoking ref-transaction
 hook twice, which has been corrected.

 Will merge to 'next'?
 source: <cover.1642406989.git.ps@pks.im>


* rs/apply-symlinks-use-strset (2022-01-07) 1 commit
  (merged to 'next' on 2022-01-10 at 32497a67d5)
 + apply: use strsets to track symlinks

 "git apply" (ab)used the util pointer of the string-list to keep
 track of how each symbolic link needs to be handled, which has been
 simplified by using strset.

 Will merge to 'master'.
 source: <8739caad-aa3d-1f0f-b5dd-6174a8e059f6@web.de>


* ld/sparse-index-bash-completion (2022-02-03) 3 commits
 . completion: handle unusual characters for sparse-checkout
 . completion: improve sparse-checkout cone mode directory completion
 . completion: address sparse-checkout issues

 The command line completion (in contrib/) learns to complete
 arguments give to "git sparse-checkout" command.

 Seems to break CI.
 source: <pull.1108.v5.git.1643921091.gitgitgadget@gmail.com>


* bc/clarify-eol-attr (2022-01-12) 2 commits
 - docs: correct documentation about eol attribute
 - t0027: add tests for eol without text in .gitattributes

 Doc and test update around the eol attribute.

 Will merge to 'next'.
 source: <20220111021507.531736-1-sandals@crustytoothpaste.net>


* jz/rev-list-exclude-first-parent-only (2022-01-12) 1 commit
 - git-rev-list: add --exclude-first-parent-only flag

 "git log" and friends learned an option --exclude-first-parent-only
 to propagate UNINTERESTING bit down only along the first-parent
 chain, just like --first-parent option shows commits that lack the
 UNINTERESTING bit only along the first-parent chain.

 Will merge to 'next'.
 source: <20220111213941.30129-1-jerry@skydio.com>


* en/present-despite-skipped (2022-01-14) 6 commits
 - Accelerate clear_skip_worktree_from_present_files() by caching
 - Update documentation related to sparsity and the skip-worktree bit
 - repo_read_index: clear SKIP_WORKTREE bit from files present in worktree
 - unpack-trees: fix accidental loss of user changes
 - t1011: add testcase demonstrating accidental loss of user modifications
 - Merge branch 'vd/sparse-clean-etc' into en/present-despite-skipped
 (this branch uses vd/sparse-clean-etc.)

 In sparse-checkouts, files mis-marked as missing from the working tree
 could lead to later problems.  Such files were hard to discover, and
 harder to correct.  Automatically detecting and correcting the marking
 of such files has been added to avoid these problems.

 Will merge to 'next'?
 source: <pull.1114.v2.git.1642175983.gitgitgadget@gmail.com>


* bc/csprng-mktemps (2022-01-17) 2 commits
 - wrapper: use a CSPRNG to generate random file names
 - wrapper: add a helper to generate numbers from a CSPRNG

 Pick a better random number generator and use it when we prepare
 temporary filenames.

 Will merge to 'next'?
 Are we solving the right problem?
 cf. <220118.86zgntpegy.gmgdl@evledraar.gmail.com>
 source: <20220117215617.843190-1-sandals@crustytoothpaste.net>


* jc/reflog-parse-options (2022-01-10) 2 commits
  (merged to 'next' on 2022-01-12 at 1659e49c4b)
 + builtin/reflog.c: use parse-options api for expire, delete subcommands
 + Merge branch 'ab/reflog-prep' into jc/reflog-parse-options

 Use the parse-options API in "git reflog" command.

 Will merge to 'master'.
 source: <pull.1175.v5.git.git.1641495981650.gitgitgadget@gmail.com>


* vd/sparse-clean-etc (2022-01-13) 9 commits
 - update-index: reduce scope of index expansion in do_reupdate
 - update-index: integrate with sparse index
 - update-index: add tests for sparse-checkout compatibility
 - checkout-index: integrate with sparse index
 - checkout-index: add --ignore-skip-worktree-bits option
 - checkout-index: expand sparse checkout compatibility tests
 - clean: integrate with sparse index
 - reset: reorder wildcard pathspec conditions
 - reset: fix validation in sparse index test
 (this branch is used by en/present-despite-skipped.)

 "git update-index", "git checkout-index", and "git clean" are
 taught to work better with the sparse checkout feature.

 Will merge to 'next'.
 source: <pull.1109.v2.git.1641924306.gitgitgadget@gmail.com>


* ms/update-index-racy (2022-01-07) 4 commits
  (merged to 'next' on 2022-01-14 at 705a33f63b)
 + update-index: refresh should rewrite index in case of racy timestamps
 + t7508: add tests capturing racy timestamp handling
 + t7508: fix bogus mtime verification
 + test-lib: introduce API for verifying file mtime

 "git update-index --refresh" has been taught to deal better with
 racy timestamps (just like "git status" already does).

 Will merge to 'master'.
 source: <pull.1105.v4.git.1641554252.gitgitgadget@gmail.com>


* jc/find-header (2022-01-06) 1 commit
  (merged to 'next' on 2022-01-10 at 8a13b4f0b3)
 + receive-pack.c: consolidate find header logic

 Code clean-up.

 Will merge to 'master'.
 source: <pull.1125.v6.git.git.1641499655700.gitgitgadget@gmail.com>


* jc/name-rev-stdin (2022-01-10) 2 commits
  (merged to 'next' on 2022-01-19 at a58e05fabe)
 + name-rev.c: use strbuf_getline instead of limited size buffer
 + name-rev: deprecate --stdin in favor of --annotate-stdin

 "git name-rev --stdin" does not behave like usual "--stdin" at
 all.  Start the process of renaming it to "--annotate-stdin".

 Will merge to 'master'.
 source: <pull.1171.v7.git.git.1641425372.gitgitgadget@gmail.com>


* en/remerge-diff (2022-02-02) 11 commits
 - diff-merges: avoid history simplifications when diffing merges
 - merge-ort: mark conflict/warning messages from inner merges as omittable
 - show, log: include conflict/warning messages in --remerge-diff headers
 - diff: add ability to insert additional headers for paths
 - merge-ort: format messages slightly different for use in headers
 - merge-ort: mark a few more conflict messages as omittable
 - merge-ort: capture and print ll-merge warnings in our preferred fashion
 - ll-merge: make callers responsible for showing warnings
 - log: clean unneeded objects during `log --remerge-diff`
 - show, log: provide a --remerge-diff capability
 - Merge branch 'ns/tmp-objdir' into en/remerge-diff
 (this branch is used by en/merge-tree.)

 "git log --remerge-diff" shows the difference from mechanical merge
 result and the merge result that is actually recorded.

 Will merge to 'next'?
 source: <pull.1103.v5.git.1643769457.gitgitgadget@gmail.com>


* bs/forbid-i18n-of-protocol-token-in-fetch-pack (2021-12-22) 2 commits
 - fixup! fetch-pack: parameterize message containing 'ready' keyword
 - fetch-pack: parameterize message containing 'ready' keyword

 L10n support for a few error messages.

 Expecting an ack for fixup.
 source: <20211222075805.19027-1-bagasdotme@gmail.com>


* gc/branch-recurse-submodules (2022-02-01) 7 commits
 - branch.c: use 'goto cleanup' in setup_tracking() to fix memory leaks
 - branch: add --recurse-submodules option for branch creation
 - builtin/branch: consolidate action-picking logic in cmd_branch()
 - branch: add a dry_run parameter to create_branch()
 - branch: make create_branch() always create a branch
 - branch: move --set-upstream-to behavior to dwim_and_setup_tracking()
 - Merge branch 'js/branch-track-inherit' into gc/branch-recurse-submodules

 "git branch" learned the "--recurse-submodules" option.

 Will merge to 'next'.
 source: <20220129000446.99261-1-chooglen@google.com>


* hn/reftable-coverity-fixes (2022-01-20) 17 commits
 - reftable: add print functions to the record types
 - reftable: make reftable_record a tagged union
 - reftable: remove outdated file reftable.c
 - reftable: implement record equality generically
 - reftable: make reftable-record.h function signatures const correct
 - reftable: handle null refnames in reftable_ref_record_equal
 - reftable: drop stray printf in readwrite_test
 - reftable: order unittests by complexity
 - reftable: all xxx_free() functions accept NULL arguments
 - reftable: fix resource warning
 - reftable: ignore remove() return value in stack_test.c
 - reftable: check reftable_stack_auto_compact() return value
 - reftable: fix resource leak blocksource.c
 - reftable: fix resource leak in block.c error path
 - reftable: fix OOB stack write in print functions
 - Merge branch 'hn/create-reflog-simplify' into hn/reftable-coverity-fixes
 - Merge branch 'hn/reftable' into hn/reftable-coverity-fixes

 Problems identified by Coverity in the reftable code have been
 corrected.

 Will merge to 'next'.
 source: <pull.1152.v6.git.git.1642691534.gitgitgadget@gmail.com>


* tb/midx-bitmap-corruption-fix (2022-01-27) 9 commits
 - pack-bitmap.c: gracefully fallback after opening pack/MIDX
 - midx: read `RIDX` chunk when present
 - t/lib-bitmap.sh: parameterize tests over reverse index source
 - t5326: move tests to t/lib-bitmap.sh
 - t5326: extract `test_rev_exists`
 - t5326: drop unnecessary setup
 - pack-revindex.c: instrument loading on-disk reverse index
 - midx.c: make changing the preferred pack safe
 - t5326: demonstrate bitmap corruption after permutation

 A bug that made multi-pack bitmap and the object order out-of-sync
 (hence the .midx data gets corrupted) has been fixed.

 Will merge to 'next'.
 source: <cover.1643150456.git.me@ttaylorr.com>


* pw/fix-some-issues-in-reset-head (2022-01-26) 14 commits
 - rebase -m: don't fork git checkout
 - rebase --apply: set ORIG_HEAD correctly
 - rebase --apply: fix reflog
 - reset_head(): take struct rebase_head_opts
 - rebase: cleanup reset_head() calls
 - create_autostash(): remove unneeded parameter
 - reset_head(): make default_reflog_action optional
 - reset_head(): factor out ref updates
 - reset_head(): remove action parameter
 - rebase --apply: don't run post-checkout hook if there is an error
 - rebase: do not remove untracked files on checkout
 - rebase: pass correct arguments to post-checkout hook
 - t5403: refactor rebase post-checkout hook tests
 - rebase: factor out checkout for up to date branch

 Use an internal call to reset_head() helper function instead of
 spawning "git checkout" in "rebase", and update code paths that are
 involved in the change.

 Will merge to 'next'?
 May want to rename the topic branch to "pw/use-in-process-checkout-in-rebase"
 or something before doing so.
 source: <pull.1049.v3.git.1643202349.gitgitgadget@gmail.com>


* ab/cat-file (2022-01-12) 12 commits
  (merged to 'next' on 2022-01-12 at ee4d43041d)
 + cat-file: s/_/-/ in typo'd usage_msg_optf() message
 + cat-file: don't whitespace-pad "(...)" in SYNOPSIS and usage output
  (merged to 'next' on 2022-01-05 at e145efa605)
 + cat-file: use GET_OID_ONLY_TO_DIE in --(textconv|filters)
 + object-name.c: don't have GET_OID_ONLY_TO_DIE imply *_QUIETLY
 + cat-file: correct and improve usage information
 + cat-file: fix remaining usage bugs
 + cat-file: make --batch-all-objects a CMDMODE
 + cat-file: move "usage" variable to cmd_cat_file()
 + cat-file docs: fix SYNOPSIS and "-h" output
 + parse-options API: add a usage_msg_optf()
 + cat-file tests: test messaging on bad objects/paths
 + cat-file tests: test bad usage

 Assorted updates to "git cat-file", especially "-h".

 Will merge to 'master'.
 source: <cover-v6-00.10-00000000000-20211228T132637Z-avarab@gmail.com>
 source: <cover-0.2-00000000000-20220110T220553Z-avarab@gmail.com>


* ab/grep-patterntype (2022-01-27) 10 commits
 - SQUASH???
 - grep: simplify config parsing and option parsing
 - grep.c: do "if (bool && memchr())" not "if (memchr() && bool)"
 - grep.h: make "grep_opt.pattern_type_option" use its enum
 - grep API: call grep_config() after grep_init()
 - grep.c: don't pass along NULL callback value
 - built-ins: trust the "prefix" from run_builtin()
 - grep tests: add missing "grep.patternType" config tests
 - log tests: check if grep_config() is called by "log"-like cmds
 - grep.h: remove unused "regex_t regexp" from grep_opt

 Some code clean-up in the "git grep" machinery.

 Looking good, except for the last step.
 Code-wise, it is tempted to call it a victory after squashing the
 fix-up in, but that does not fix the proposed log message, so...
 source: <cover-v9-0.9-00000000000-20220127T115058Z-avarab@gmail.com>


* js/use-builtin-add-i (2021-12-01) 2 commits
 - add -i: default to the built-in implementation
 - t2016: require the PERL prereq only when necessary

 "git add -i" was rewritten in C some time ago and has been in
 testing; the reimplementation is now exposed to general public by
 default.

 On hold.
 There are known breakages on macOS.
 cf. <nycvar.QRO.7.76.6.2112021832060.63@tvgsbejvaqbjf.bet>
 source: <pull.1087.git.1638281655.gitgitgadget@gmail.com>


* jt/conditional-config-on-remote-url (2022-01-18) 2 commits
  (merged to 'next' on 2022-01-19 at 3c2df266eb)
 + config: include file if remote URL matches a glob
 + config: make git_config_include() static

 The conditional inclusion mechanism of configuration files using
 "[includeIf <condition>]" learns to base its decision on the
 URL of the remote repository the repository interacts with.

 Will merge to 'master'.
 source: <cover.1642527965.git.jonathantanmy@google.com>


* ab/ambiguous-object-name (2022-01-27) 7 commits
 - object-name: re-use "struct strbuf" in show_ambiguous_object()
 - object-name: iterate ambiguous objects before showing header
 - object-name: show date for ambiguous tag objects
 - object-name: make ambiguous object output translatable
 - object-name: explicitly handle bad tags in show_ambiguous_object()
 - object-name: explicitly handle OBJ_BAD in show_ambiguous_object()
 - object-name tests: add tests for ambiguous object blind spots

 Error output given in response to an ambiguous object name has been
 improved.

 What's the doneness of this thing?
 source: <cover-v8-0.7-00000000000-20220127T052116Z-avarab@gmail.com>


* tl/ls-tree-oid-only (2022-01-13) 9 commits
 - ls-tree.c: introduce "--format" option
 - cocci: allow padding with `strbuf_addf()`
 - ls-tree.c: introduce struct "show_tree_data"
 - ls-tree.c: support --object-only option for "git-ls-tree"
 - ls-tree: optimize naming and handling of "return" in show_tree()
 - ls-tree: use "size_t", not "int" for "struct strbuf"'s "len"
 - ls-tree: use "enum object_type", not {blob,tree,commit}_type
 - ls-tree: add missing braces to "else" arms
 - ls-tree: remove commented-out code

 "git ls-tree" learns "--oid-only" option, similar to "--name-only",
 and more generalized "--format" option.

 Will merge to 'next'?
 source: <cover.1641978175.git.dyroneteng@gmail.com>


* ab/config-based-hooks-2 (2022-01-07) 17 commits
  (merged to 'next' on 2022-01-19 at 594b6da22c)
 + run-command: remove old run_hook_{le,ve}() hook API
 + receive-pack: convert push-to-checkout hook to hook.h
 + read-cache: convert post-index-change to use hook.h
 + commit: convert {pre-commit,prepare-commit-msg} hook to hook.h
 + git-p4: use 'git hook' to run hooks
 + send-email: use 'git hook run' for 'sendemail-validate'
 + git hook run: add an --ignore-missing flag
 + hooks: convert worktree 'post-checkout' hook to hook library
 + hooks: convert non-worktree 'post-checkout' hook to hook library
 + merge: convert post-merge to use hook.h
 + am: convert applypatch-msg to use hook.h
 + rebase: convert pre-rebase to use hook.h
 + hook API: add a run_hooks_l() wrapper
 + am: convert {pre,post}-applypatch to use hook.h
 + gc: use hook library for pre-auto-gc hook
 + hook API: add a run_hooks() wrapper
 + hook: add 'run' subcommand

 More "config-based hooks".

 Will merge to 'master'.
 source: <cover-v6-00.17-00000000000-20211222T035755Z-avarab@gmail.com>


* jh/builtin-fsmonitor-part2 (2021-12-25) 31 commits
 - fixup! t7527: create test for fsmonitor--daemon
 - fixup! t/perf/p7519: speed up test on Windows
 - t7527: test status with untracked-cache and fsmonitor--daemon
 - fsmonitor: force update index after large responses
 - fsmonitor--daemon: use a cookie file to sync with file system
 - fsmonitor--daemon: periodically truncate list of modified files
 - t/perf/p7519: add fsmonitor--daemon test cases
 - t/perf/p7519: speed up test on Windows
 - t/helper/test-chmtime: skip directories on Windows
 - t/perf: avoid copying builtin fsmonitor files into test repo
 - t7527: create test for fsmonitor--daemon
 - t/helper/fsmonitor-client: create IPC client to talk to FSMonitor Daemon
 - help: include fsmonitor--daemon feature flag in version info
 - fsmonitor--daemon: implement handle_client callback
 - compat/fsmonitor/fsm-listen-darwin: implement FSEvent listener on MacOS
 - compat/fsmonitor/fsm-listen-darwin: add macos header files for FSEvent
 - compat/fsmonitor/fsm-listen-win32: implement FSMonitor backend on Windows
 - fsmonitor--daemon: create token-based changed path cache
 - fsmonitor--daemon: define token-ids
 - fsmonitor--daemon: add pathname classification
 - fsmonitor--daemon: implement 'start' command
 - fsmonitor--daemon: implement 'run' command
 - compat/fsmonitor/fsm-listen-darwin: stub in backend for Darwin
 - compat/fsmonitor/fsm-listen-win32: stub in backend for Windows
 - fsmonitor--daemon: implement 'stop' and 'status' commands
 - fsmonitor--daemon: add a built-in fsmonitor daemon
 - fsmonitor: document builtin fsmonitor
 - fsmonitor: use IPC to query the builtin FSMonitor daemon
 - fsmonitor: config settings are repository-specific
 - fsmonitor-ipc: create client routines for git-fsmonitor--daemon
 - fsmonitor: enhance existing comments

 Built-in fsmonitor (part 2).

 Expecting a reroll.
 Seems that the discussion stalled.
 cf. <d9c3ef61-768c-3560-2858-3438c355a742@jeffhostetler.com>
 source: <pull.1041.v4.git.1634826309.gitgitgadget@gmail.com>


* es/superproject-aware-submodules (2021-11-18) 5 commits
 - submodule: use config to find superproject worktree
 - submodule: record superproject gitdir during 'update'
 - submodule: record superproject gitdir during absorbgitdirs
 - introduce submodule.superprojectGitDir record
 - t7400-submodule-basic: modernize inspect() helper

 A configuration variable in a submodule points at the location of
 the superproject it is bound to (RFC).

 Expecting a reroll.
 cf. <20211117234300.2598132-1-jonathantanmy@google.com>
 source: <20211117005701.371808-1-emilyshaffer@google.com>


* ab/only-single-progress-at-once (2022-01-07) 7 commits
 - *.c: use isatty(0|2), not isatty(STDIN_FILENO|STDERR_FILENO)
 - pack-bitmap-write.c: don't return without stop_progress()
 - progress.c: add temporary variable from progress struct
 - progress.c tests: test some invalid usage
 - progress.c tests: make start/stop commands on stdin
 - progress.c test helper: add missing braces
 - leak tests: fix a memory leak in "test-progress" helper

 Further tweaks on progress API.

 Getting there.
 source: <cover-v8-0.7-00000000000-20211228T150728Z-avarab@gmail.com>

^ permalink raw reply	[relevance 3%]

* What's cooking in git.git (Feb 2022, #02; Wed, 9)
@ 2022-02-10  0:12  3% Junio C Hamano
  0 siblings, 0 replies; 200+ results
From: Junio C Hamano @ 2022-02-10  0:12 UTC (permalink / raw)
  To: git

Here are the topics that have been cooking in my tree.  Commits
prefixed with '+' are in 'next' (being in 'next' is a sign that a
topic is stable enough to be used and are candidate to be in a
future release).  Commits prefixed with '-' are only in 'seen',
which means nothing more than that I have found them of interest for
some reason (like "it may have hard-to-resolve conflicts with
another topic already in flight" or "this may turn out to be
useful").  Do not read too much into a topic being in (or not in)
'seen'.  The ones marked with '.' do not appear in any of the
integration branches, but I am still holding onto them.

The second batch of topics have been merged.

Copies of the source code to Git live in many repositories, and the
following is a list of the ones I push into or their mirrors.  Some
repositories have only a subset of branches.

With maint, master, next, seen, todo:

	git://git.kernel.org/pub/scm/git/git.git/
	git://repo.or.cz/alt-git.git/
	https://kernel.googlesource.com/pub/scm/git/git/
	https://github.com/git/git/
	https://gitlab.com/git-vcs/git/

With all the integration branches and topics broken out:

	https://github.com/gitster/git/

Even though the preformatted documentation in HTML and man format
are not sources, they are published in these repositories for
convenience (replace "htmldocs" with "manpages" for the manual
pages):

	git://git.kernel.org/pub/scm/git/git-htmldocs.git/
	https://github.com/gitster/git-htmldocs.git/

Release tarballs are available at:

	https://www.kernel.org/pub/software/scm/git/

--------------------------------------------------
[Graduated to 'master']

* ab/cat-file (2022-01-12) 12 commits
  (merged to 'next' on 2022-01-12 at ee4d43041d)
 + cat-file: s/_/-/ in typo'd usage_msg_optf() message
 + cat-file: don't whitespace-pad "(...)" in SYNOPSIS and usage output
  (merged to 'next' on 2022-01-05 at e145efa605)
 + cat-file: use GET_OID_ONLY_TO_DIE in --(textconv|filters)
 + object-name.c: don't have GET_OID_ONLY_TO_DIE imply *_QUIETLY
 + cat-file: correct and improve usage information
 + cat-file: fix remaining usage bugs
 + cat-file: make --batch-all-objects a CMDMODE
 + cat-file: move "usage" variable to cmd_cat_file()
 + cat-file docs: fix SYNOPSIS and "-h" output
 + parse-options API: add a usage_msg_optf()
 + cat-file tests: test messaging on bad objects/paths
 + cat-file tests: test bad usage

 Assorted updates to "git cat-file", especially "-h".
 source: <cover-v6-00.10-00000000000-20211228T132637Z-avarab@gmail.com>
 source: <cover-0.2-00000000000-20220110T220553Z-avarab@gmail.com>


* ab/config-based-hooks-2 (2022-01-07) 17 commits
  (merged to 'next' on 2022-01-19 at 594b6da22c)
 + run-command: remove old run_hook_{le,ve}() hook API
 + receive-pack: convert push-to-checkout hook to hook.h
 + read-cache: convert post-index-change to use hook.h
 + commit: convert {pre-commit,prepare-commit-msg} hook to hook.h
 + git-p4: use 'git hook' to run hooks
 + send-email: use 'git hook run' for 'sendemail-validate'
 + git hook run: add an --ignore-missing flag
 + hooks: convert worktree 'post-checkout' hook to hook library
 + hooks: convert non-worktree 'post-checkout' hook to hook library
 + merge: convert post-merge to use hook.h
 + am: convert applypatch-msg to use hook.h
 + rebase: convert pre-rebase to use hook.h
 + hook API: add a run_hooks_l() wrapper
 + am: convert {pre,post}-applypatch to use hook.h
 + gc: use hook library for pre-auto-gc hook
 + hook API: add a run_hooks() wrapper
 + hook: add 'run' subcommand

 More "config-based hooks".
 source: <cover-v6-00.17-00000000000-20211222T035755Z-avarab@gmail.com>


* en/merge-ort-restart-optim-fix (2022-01-17) 1 commit
  (merged to 'next' on 2022-01-19 at 84da10b057)
 + merge-ort: avoid assuming all renames detected

 The merge-ort misbehaved when merge.renameLimit configuration is
 set too low and failed to find all renames.
 source: <pull.1194.v2.git.git.1642443955836.gitgitgadget@gmail.com>


* en/plug-leaks-in-merge (2022-01-21) 2 commits
  (merged to 'next' on 2022-01-26 at 0cf6aa0a2b)
 + merge: fix memory leaks in cmd_merge()
 + merge-ort: fix memory leak in merge_ort_internal()

 Leakfix.
 source: <pull.1200.git.git.1642664835.gitgitgadget@gmail.com>


* fs/ssh-signing-crlf (2022-01-07) 1 commit
  (merged to 'next' on 2022-01-19 at 76b86faafb)
 + gpg-interface: trim CR from ssh-keygen

 The code path that verifies signatures made with ssh were made to
 work better on a system with CRLF line endings.
 source: <20220107090735.580225-1-fs@gigacodes.de>


* gc/fetch-negotiate-only-early-return (2022-01-20) 4 commits
  (merged to 'next' on 2022-01-20 at e7616428eb)
 + fetch: help translators by reusing the same message template
  (merged to 'next' on 2022-01-19 at 0f15147cfa)
 + fetch --negotiate-only: do not update submodules
 + fetch: skip tasks related to fetching objects
 + fetch: use goto cleanup in cmd_fetch()

 "git fetch --negotiate-only" is an internal command used by "git
 push" to figure out which part of our history is missing from the
 other side.  It should never recurse into submodules even when
 fetch.recursesubmodules configuration variable is set, nor it
 should trigger "gc".  The code has been tightened up to ensure it
 only does common ancestry discovery and nothing else.
 source: <20220119000056.58503-1-chooglen@google.com>


* jc/find-header (2022-01-06) 1 commit
  (merged to 'next' on 2022-01-10 at 8a13b4f0b3)
 + receive-pack.c: consolidate find header logic

 Code clean-up.
 source: <pull.1125.v6.git.git.1641499655700.gitgitgadget@gmail.com>


* jc/mem-pool-alignment (2022-01-24) 1 commit
  (merged to 'next' on 2022-01-26 at 057b6a78f5)
 + mem-pool: don't assume uintmax_t is aligned enough for all types

 Update the logic to compute alignment requirement for our mem-pool.
 source: <20220123203347.74869-1-jrtc27@jrtc27.com>


* jc/name-rev-stdin (2022-01-10) 2 commits
  (merged to 'next' on 2022-01-19 at a58e05fabe)
 + name-rev.c: use strbuf_getline instead of limited size buffer
 + name-rev: deprecate --stdin in favor of --annotate-stdin

 "git name-rev --stdin" does not behave like usual "--stdin" at
 all.  Start the process of renaming it to "--annotate-stdin".
 source: <pull.1171.v7.git.git.1641425372.gitgitgadget@gmail.com>


* jc/qsort-s-alignment-fix (2022-01-07) 2 commits
  (merged to 'next' on 2022-01-10 at 329fd6e09a)
 + stable-qsort: avoid using potentially unaligned access
 + compat/qsort_s.c: avoid using potentially unaligned access

 Fix a hand-rolled alloca() imitation that may have violated
 alignment requirement of data being sorted in compatibility
 implementation of qsort_s() and stable qsort().
 source: <f40c1b47-9aad-2dcc-ceeb-5dee2b517cd8@web.de>
 source: <xmqqzgo76xpj.fsf@gitster.g>


* jc/reflog-parse-options (2022-01-10) 2 commits
  (merged to 'next' on 2022-01-12 at 1659e49c4b)
 + builtin/reflog.c: use parse-options api for expire, delete subcommands
 + Merge branch 'ab/reflog-prep' into jc/reflog-parse-options

 Use the parse-options API in "git reflog" command.
 source: <pull.1175.v5.git.git.1641495981650.gitgitgadget@gmail.com>


* jh/p4-fix-use-of-process-error-exception (2022-01-06) 1 commit
  (merged to 'next' on 2022-01-10 at 49d529bfd7)
 + git-p4: fix instantiation of CalledProcessError
 (this branch is used by jh/p4-various-fixups.)

 source: <20220106214156.90967-1-jholdsworth@nvidia.com>


* jh/p4-spawning-external-commands-cleanup (2022-01-06) 3 commits
  (merged to 'next' on 2022-01-10 at 54b36b4e66)
 + git-p4: don't print shell commands as python lists
 + git-p4: pass command arguments as lists instead of using shell
 + git-p4: don't select shell mode using the type of the command argument
 (this branch is used by jh/p4-various-fixups.)

 source: <20220106214035.90725-1-jholdsworth@nvidia.com>


* js/sparse-vs-split-index (2022-01-23) 3 commits
  (merged to 'next' on 2022-01-26 at 7443487955)
 + split-index: it really is incompatible with the sparse index
 + t1091: disable split index
 + sparse-index: sparse index is disallowed when split index is active

 Mark in various places in the code that the sparse index and the
 split index features are mutually incompatible.
 source: <pull.1119.git.1642613379.gitgitgadget@gmail.com>


* js/test-unset-trace2-parents (2022-01-20) 1 commit
  (merged to 'next' on 2022-01-20 at ebb085e3e4)
 + test-lib: unset trace2 parent envvars

 Avoid tests that are run under GIT_TRACE2 set from failing
 unnecessarily.
 source: <82e51a52e20fbe13a5a898a0a2f6dbe1188e3fa3.1642116539.git.steadmon@google.com>


* jt/clone-not-quite-empty (2022-01-26) 1 commit
  (merged to 'next' on 2022-01-26 at c3bb39676e)
 + clone: support unusual remote ref configurations

 Cloning from a repository that does not yet have any branches or
 tags but has other refs resulted in a "remote transport reported
 error", which has been corrected.
 source: <20220124180909.2437002-1-jonathantanmy@google.com>


* jt/conditional-config-on-remote-url (2022-01-18) 2 commits
  (merged to 'next' on 2022-01-19 at 3c2df266eb)
 + config: include file if remote URL matches a glob
 + config: make git_config_include() static

 The conditional inclusion mechanism of configuration files using
 "[includeIf <condition>]" learns to base its decision on the
 URL of the remote repository the repository interacts with.
 source: <cover.1642527965.git.jonathantanmy@google.com>


* jt/sparse-checkout-leading-dir-fix (2022-01-21) 1 commit
  (merged to 'next' on 2022-01-26 at 5611ce9047)
 + sparse-checkout: create leading directory

 "git sparse-checkout init" failed to write into $GIT_DIR/info
 directory when the repository was created without one, which has
 been corrected to auto-create it.
 source: <20220121174441.3991963-1-jonathantanmy@google.com>


* ms/update-index-racy (2022-01-07) 4 commits
  (merged to 'next' on 2022-01-14 at 705a33f63b)
 + update-index: refresh should rewrite index in case of racy timestamps
 + t7508: add tests capturing racy timestamp handling
 + t7508: fix bogus mtime verification
 + test-lib: introduce API for verifying file mtime

 "git update-index --refresh" has been taught to deal better with
 racy timestamps (just like "git status" already does).
 source: <pull.1105.v4.git.1641554252.gitgitgadget@gmail.com>


* pb/pull-rebase-autostash-fix (2022-01-14) 1 commit
  (merged to 'next' on 2022-01-14 at 83a388a7e2)
 + pull --rebase: honor rebase.autostash when fast-forwarding

 "git pull --rebase" ignored the rebase.autostash configuration
 variable when the remote history is a descendant of our history,
 which has been corrected.
 source: <xmqqr19aayxp.fsf@gitster.g>


* po/readme-mention-contributor-hints (2022-01-17) 1 commit
  (merged to 'next' on 2022-01-19 at 7e14690eb9)
 + README.md: add CodingGuidelines and a link for Translators

 Doc update.
 source: <pull.1115.v3.git.1642443491609.gitgitgadget@gmail.com>


* pw/add-p-hunk-split-fix (2022-01-12) 2 commits
  (merged to 'next' on 2022-01-19 at ea57b2c9a6)
 + builtin add -p: fix hunk splitting
 + t3701: clean up hunk splitting tests

 "git add -p" rewritten in C regressed hunk splitting in some cases,
 which has been corrected.
 source: <pull.1100.v2.git.1641899530.gitgitgadget@gmail.com>


* rs/apply-symlinks-use-strset (2022-01-07) 1 commit
  (merged to 'next' on 2022-01-10 at 32497a67d5)
 + apply: use strsets to track symlinks

 "git apply" (ab)used the util pointer of the string-list to keep
 track of how each symbolic link needs to be handled, which has been
 simplified by using strset.
 source: <8739caad-aa3d-1f0f-b5dd-6174a8e059f6@web.de>


* rs/grep-expr-cleanup (2022-01-06) 4 commits
  (merged to 'next' on 2022-01-10 at b70a3bb0fa)
 + grep: use grep_and_expr() in compile_pattern_and()
 + grep: extract grep_binexp() from grep_or_expr()
 + grep: use grep_not_expr() in compile_pattern_not()
 + grep: use grep_or_expr() in compile_pattern_or()

 Code clean-up.
 source: <cover.1641498525.git.me@ttaylorr.com>


* tl/doc-cli-options-first (2022-01-17) 1 commit
  (merged to 'next' on 2022-01-19 at 9ec14cfe73)
 + git-cli.txt: clarify "options first and then args"

 We explain that revs come first before the pathspec among command
 line arguments, but did not spell out that dashed options come
 before other args, which has been corrected.
 source: <fe748304d94e0ae25fd3549aadc49cf951ff2d64.1642405806.git.dyroneteng@gmail.com>

--------------------------------------------------
[New Topics]

* ab/t0051-skip-on-non-windows (2022-02-04) 1 commit
 - t0051: use "skip_all" under !MINGW in single-test file

 Conditional test update.

 Will merge to 'next'.
 source: <patch-v2-1.1-1bc93bcba4b-20220204T134208Z-avarab@gmail.com>


* ab/hash-object-leakfix (2022-02-06) 1 commit
 - hash-object: fix a trivial leak in --path

 Trivial leakfix.

 Will merge to 'next'.
 source: <patch-1.1-53863df1455-20220205T000422Z-avarab@gmail.com>


* ab/release-transport-ls-refs-options (2022-02-06) 1 commit
 - ls-remote & transport API: release "struct transport_ls_refs_options"

 Will merge to 'next'.
 source: <patch-1.1-e80e8f64eae-20220205T000809Z-avarab@gmail.com>


* js/bisect-in-c (2022-02-09) 11 commits
 - bisect: no longer try to clean up left-over `.git/head-name` files
 - bisect: remove Cogito-related code
 - Turn `git bisect` into a full built-in.
 - bisect--helper: using `--bisect-state` without an argument is a bug
 - bisect: move even the option parsing to `bisect--helper`
 - bisect--helper: make `--bisect-state` optional
 - bisect--helper: align the sub-command order with git-bisect.sh
 - bisect--helper: really retire `--bisect-autostart`
 - bisect--helper: really retire --bisect-next-check
 - bisect--helper: retire the --no-log option
 - bisect run: fix the error message

 Final bits of "git bisect.sh" have been rewritten in C.
 source: <pull.1132.git.1643328752.gitgitgadget@gmail.com>


* js/scalar-diagnose (2022-02-06) 6 commits
 - scalar: teach `diagnose` to gather loose objects information
 - scalar: teach `diagnose` to gather packfile info
 - scalar diagnose: include disk space information
 - scalar: add `diagnose`
 - scalar: validate the optional enlistment argument
 - archive: optionally add "virtual" files

 source: <pull.1128.v2.git.1644187146.gitgitgadget@gmail.com>


* js/short-help-outside-repo-fix (2022-02-08) 2 commits
 - t0012: verify that built-ins handle `-h` even without gitdir
 - checkout/fetch/pull/pack-objects: allow `-h` outside a repository

 "git cmd -h" outside a repository should error out cleanly for many
 commands, but instead it hit a BUG(), which has been corrected.

 Will merge to 'next'.
 source: <pull.1139.v2.git.1644319314.gitgitgadget@gmail.com>


* tb/midx-no-bitmap-for-no-objects (2022-02-09) 1 commit
 - midx: prevent writing a .bitmap without any objects

 When there is no object to write .bitmap file for, "git
 multi-pack-index" triggered an error, instead of just skipping,
 which has been corrected.

 Will merge to 'next'.
 source: <abc67d757cb6b244cf54b7b030985180ce134724.1644434802.git.me@ttaylorr.com>


* jc/cat-file-batch-commands (2022-02-08) 3 commits
 . cat-file: add --batch-command mode
 . cat-file: introduce batch_command enum to replace print_contents
 . cat-file: rename cmdmode to transform_mode


 Seems to make tests hang.
 source: <pull.1212.v3.git.git.1644353884.gitgitgadget@gmail.com>

--------------------------------------------------
[Stalled]

* je/http-better-error-output (2021-12-03) 1 commit
 . http-backend: give a hint that web browser access is not supported

 When the http-backend program, which is the server-side component
 for the smart HTTP transport, sends a "404 Not found" error, we
 deliberately did not say anything to the requesting client.  We now
 send a message back to the browser to tell the user that they do
 not want to visit the URL via their browser, instead of a totally
 blank page.

 Expecting a reroll.
 Breaks its self tests.
 cf. <7r23s082-o3q0-479o-srqn-r45q778s5nq7@vanv.qr>
 source: <20211202102855.23907-1-jengelh@inai.de>


* cb/save-term-across-editor-invocation (2021-12-01) 3 commits
 - fixup! editor: allow for saving/restoring terminal state
 - editor: allow for saving/restoring terminal state
 - terminal: teach save_term to fail when not foreground

 Some editors are reported to leave the terminal in funny state
 after they exit on Windows.  Work it around by saving and restoring
 the terminal state when needed.

 Expecting a reroll.
 cf. <CAPUEsphktbdxeV7hvF52Or3CVHS8oOk5-WV=xfEZa8kfCVVnVg@mail.gmail.com>
 source: <20211202035446.1154-1-carenas@gmail.com>

--------------------------------------------------
[Cooking]

* ar/submodule-update (2022-02-08) 16 commits
 . submodule: move core cmd_update() logic to C
 . submodule--helper: move functions around
 . submodule--helper update-clone: learn --init
 . submodule--helper: remove ensure-core-worktree
 . submodule--helper run-update-procedure: learn --remote
 . submodule--helper run-update-procedure: remove --suboid
 . submodule--helper: reorganize code for sh to C conversion
 . submodule--helper: remove update-module-mode
 . submodule tests: test for init and update failure output
 . submodule--helper: don't use bitfield indirection for parse_options()
 . builtin/submodule--helper.c: rename option variables to "opt"
 . builtin/submodule--helper.c: reformat designated initializers
 . submodule--helper: run update using child process struct
 . submodule--helper: allow setting superprefix for init_submodule()
 . submodule--helper: refactor get_submodule_displaypath()
 . submodule--helper: get remote names from any repository

 Rewrite of "git submodule update" in C.

 Does not seem to play well with other topics in flight.
 source: <20220208083952.35036-1-chooglen@google.com>


* pw/use-in-process-checkout-in-rebase (2022-01-26) 14 commits
 - rebase -m: don't fork git checkout
 - rebase --apply: set ORIG_HEAD correctly
 - rebase --apply: fix reflog
 - reset_head(): take struct rebase_head_opts
 - rebase: cleanup reset_head() calls
 - create_autostash(): remove unneeded parameter
 - reset_head(): make default_reflog_action optional
 - reset_head(): factor out ref updates
 - reset_head(): remove action parameter
 - rebase --apply: don't run post-checkout hook if there is an error
 - rebase: do not remove untracked files on checkout
 - rebase: pass correct arguments to post-checkout hook
 - t5403: refactor rebase post-checkout hook tests
 - rebase: factor out checkout for up to date branch

 Use an internal call to reset_head() helper function instead of
 spawning "git checkout" in "rebase", and update code paths that are
 involved in the change.

 Will merge to 'next'.
 source: <pull.1049.v3.git.1643202349.gitgitgadget@gmail.com>


* ab/no-errno-from-resolve-ref-unsafe (2022-01-26) 2 commits
  (merged to 'next' on 2022-02-04 at d98254efe0)
 + refs API: remove "failure_errno" from refs_resolve_ref_unsafe()
 + sequencer: don't use die_errno() on refs_resolve_ref_unsafe() failure

 Remaining code-clean-up.

 Will merge to 'master'.
 source: <cover-v4-0.2-00000000000-20220126T143427Z-avarab@gmail.com>


* gh/doc-typos (2022-01-26) 2 commits
  (merged to 'next' on 2022-02-04 at b71e1bc746)
 + Documentation/config/pgp.txt: add missing apostrophe
 + Documentation/config/pgp.txt: replace stray <TAB> character with <SPC>

 Typofix.

 Will merge to 'master'.
 source: <20220126121426.53799-1-greg@hurrell.net>


* jc/doc-log-messages (2022-01-27) 3 commits
  (merged to 'next' on 2022-02-04 at cf136572ce)
 + SubmittingPatches: explain why we care about log messages
 + CodingGuidelines: hint why we value clearly written log messages
 + SubmittingPatches: write problem statement in the log in the present tense

 Update the contributor-facing documents on proposed log messages.

 Will merge to 'master'.
 source: <20220126234205.2923388-1-gitster@pobox.com>


* en/fetch-negotiation-default-fix (2022-02-02) 3 commits
  (merged to 'next' on 2022-02-08 at 95a8a91e97)
 + repo-settings: rename the traditional default fetch.negotiationAlgorithm
 + repo-settings: fix error handling for unknown values
 + repo-settings: fix checking for fetch.negotiationAlgorithm=default

 Fix interaction between fetch.negotiationAlgorithm and
 feature.experimental configuration variables.

 Will merge to 'master'.
 source: <pull.1131.v4.git.1643773361.gitgitgadget@gmail.com>


* en/sparse-checkout-leakfix (2022-01-28) 1 commit
  (merged to 'next' on 2022-02-04 at 10ca176008)
 + sparse-checkout: fix a couple minor memory leaks

 Leakfix.

 Will merge to 'master'.
 source: <pull.1189.git.git.1643335098710.gitgitgadget@gmail.com>


* js/diff-filter-negation-fix (2022-01-28) 3 commits
  (merged to 'next' on 2022-02-08 at fe004a4c2c)
 + diff-filter: be more careful when looking for negative bits
 + diff.c: move the diff filter bits definitions up a bit
 + docs(diff): lose incorrect claim about `diff-files --diff-filter=A`

 "git diff --diff-filter=aR" is now parsed correctly.

 Will merge to 'master'.
 source: <f1f027ad61beb1bd0dee73acbffdee5c0f967e9a.1643371370.git.gitgitgadget@gmail.com>


* js/no-more-legacy-stash (2022-01-27) 4 commits
  (merged to 'next' on 2022-02-08 at 5cecfdbd58)
 + stash: stop warning about the obsolete `stash.useBuiltin` config setting
 + stash: remove documentation for `stash.useBuiltin`
 + add: remove support for `git-legacy-stash`
 + git-sh-setup: remove remnant bits referring to `git-legacy-stash`

 Removal of unused code and doc.

 Will merge to 'master'.
 source: <pull.1133.git.1643321031.gitgitgadget@gmail.com>


* js/scalar-global-options (2022-01-28) 1 commit
  (merged to 'next' on 2022-02-09 at 8af744524c)
 + scalar: accept -C and -c options before the subcommand

 Scalar update.

 Will merge to 'master'.
 source: <pull.1130.v2.git.1643380317358.gitgitgadget@gmail.com>


* rc/negotiate-only-typofix (2022-01-28) 1 commit
  (merged to 'next' on 2022-02-04 at 62b947ddbf)
 + fetch: fix negotiate-only error message

 Typofix.

 Will merge to 'master'.
 source: <20220128143602.31842-1-robert@coup.net.nz>


* rj/receive-pack-abort-upon-disconnect (2022-01-28) 1 commit
 - receive-pack: check if client is alive before completing the push

 "git push" may be killed by the user when the server side has
 finished receiving all data and is about to commit the result.
 Give the latter a better chance to notice such situation and abort
 processing the ref updates.

 Needs more work?
 cf. <220204.864k5e4yvf.gmgdl@evledraar.gmail.com>
 source: <20220128194811.3396281-1-robin.jarry@6wind.com>


* jz/patch-id-hunk-header-parsing-fix (2022-02-02) 2 commits
  (merged to 'next' on 2022-02-09 at 8665cb204a)
 + patch-id: fix scan_hunk_header on diffs with 1 line of before/after
 + patch-id: fix antipatterns in tests

 Unlike "git apply", "git patch-id" did not handle patches with
 hunks that has only 1 line in either preimage or postimage, which
 has been corrected.

 Will merge to 'master'.
 source: <20220202041945.10077-1-jerry@skydio.com>
 source: <20220202042015.10115-1-jerry@skydio.com>


* tg/fetch-prune-exit-code-fix (2022-01-31) 1 commit
  (merged to 'next' on 2022-02-04 at 8af6ab286d)
 + fetch --prune: exit with error if pruning fails

 When "git fetch --prune" failed to prune the refs it wanted to
 prune, the command issued error messages but exited with exit
 status 0, which has been corrected.

 Will merge to 'master'.
 source: <20220131133047.1885074-1-t.gummerer@gmail.com>


* ab/do-not-hide-failures-in-git-dot-pm (2022-02-01) 1 commit
  (merged to 'next' on 2022-02-08 at 1a8001f83e)
 + perl Git.pm: don't ignore signalled failure in _cmd_close()

 Git.pm update.

 Will merge to 'master'.
 source: <patch-1.1-86353c3b366-20220201T205218Z-avarab@gmail.com>


* ab/object-file-api-updates (2022-02-04) 11 commits
 - object-file API: pass an enum to read_object_with_reference()
 - object-file.c: add a literal version of write_object_file_prepare()
 - object-file API: have hash_object_file() take "enum object_type"
 - object API: rename hash_object_file_literally() to write_*()
 - object-file API: split up and simplify check_object_signature()
 - object API: make check_object_signature() oideq()-like, move docs
 - object API: correct "buf" v.s. "map" mismatch in *.c and *.h
 - object-file API: have write_object_file() take "enum object_type"
 - object-file API: add a format_object_header() function
 - object-file API: return "void", not "int" from hash_object_file()
 - object-file.c: split up declaration of unrelated variables

 Object-file API shuffling.
 source: <cover-v2-00.11-00000000000-20220204T135005Z-avarab@gmail.com>


* cb/clear-quarantine-early-on-all-ref-update-errors (2022-02-01) 1 commit
 - receive-pack: purge temporary data if no command is ready to run

 Check if "receive-pack" will do any ref updates (various conditions
 could reject a push) before received objects are taken out of the
 temporary directory used for quarantine purposes, so that a push
 that is known-to-fail will not leave crufts that a future "gc"
 needs to clean up.

 Will merge to 'next'.
 source: <20220129063538.24038-1-bojun.cbj@gmail.com>


* hn/reftable-tests (2022-01-31) 3 commits
  (merged to 'next' on 2022-02-09 at 5e22946a1f)
 + t5312: prepare for reftable
 + t1405: mark test that checks existence as REFFILES
 + t1405: explictly delete reflogs for reftable

 Prepare more test scripts for the introduction of reftable.

 Will merge to 'master'.
 source: <pull.1209.git.git.1643651420.gitgitgadget@gmail.com>


* ja/i18n-common-messages (2022-02-04) 4 commits
 - i18n: fix some misformated placeholders in command synopsis
 - i18n: remove from i18n strings that do not hold translatable parts
 - i18n: factorize "invalid value" messages
 - i18n: factorize more 'incompatible options' messages

 Unify more messages to help l10n.

 Will merge to 'next'?
 source: <pull.1123.v4.git.1643666870.gitgitgadget@gmail.com>


* tk/subtree-merge-not-ff-only (2022-02-01) 1 commit
  (merged to 'next' on 2022-02-09 at 849450010e)
 + subtree: force merge commit

 When "git subtree" wants to create a merge, it used "git merge" and
 let it be affected by end-user's "merge.ff" configuration, which
 has been corrected.

 Will merge to 'master'.
 source: <20220201172601.262718-1-aclopte@gmail.com>


* ab/complete-show-all-commands (2022-02-02) 2 commits
  (merged to 'next' on 2022-02-09 at be3b7cf4e4)
 + completion: add a GIT_COMPLETION_SHOW_ALL_COMMANDS
 + completion tests: re-source git-completion.bash in a subshell

 The command line completion script (in contrib/) learns an option
 to complete all Git subcommands, including the ones that are
 normally hidden.

 Will merge to 'master'.
 source: <cover-v2-0.2-00000000000-20220202T111228Z-avarab@gmail.com>


* en/merge-tree (2022-02-02) 16 commits
 - git-merge-tree.txt: add a section on potentional usage mistakes
 - merge-tree: add a --allow-unrelated-histories flag
 - merge-tree: allow `ls-files -u` style info to be NUL terminated
 - merge-tree: provide easy access to `ls-files -u` style info
 - merge-tree: provide a list of which files have conflicts
 - merge-ort: provide a merge_get_conflicted_files() helper function
 - merge-tree: support including merge messages in output
 - merge-ort: allow update messages to be written to different file stream
 - merge-ort: split out a separate display_update_messages() function
 - diff: allow diff_warn_rename_limit to write somewhere besides stderr
 - Introduce a variant of the `warning()` function that takes a `FILE *`
 - merge-tree: implement real merges
 - merge-tree: add option parsing and initial shell for real merge function
 - merge-tree: move logic for existing merge into new function
 - merge-tree: rename merge_trees() to trivial_merge_trees()
 - Merge branch 'en/remerge-diff' into en/merge-trees
 (this branch uses en/remerge-diff.)

 A new command is introduced that takes two commits and computes a
 tree that would be contained in the resulting merge commit, if the
 histories leading to these two commits were to be merged, and is
 added as a new mode of "git merge-tree" subcommand.
 source: <pull.1122.v3.git.1643787281.gitgitgadget@gmail.com>


* ll/doc-mktree-typofix (2022-02-02) 1 commit
  (merged to 'next' on 2022-02-08 at fe98063f1a)
 + fix typo in git-mktree.txt

 Typofix.

 Will merge to 'master'.
 source: <pull.1207.git.git.1643792450866.gitgitgadget@gmail.com>


* po/doc-check-ignore-markup-fix (2022-02-03) 1 commit
  (merged to 'next' on 2022-02-09 at 47631df376)
 + doc: check-ignore: code-quote an exclamation mark

 Typofix.

 Will merge to 'master'.
 source: <20220203101643.1987-1-philipoakley@iee.email>


* sy/diff-usage-typofix (2022-02-02) 1 commit
  (merged to 'next' on 2022-02-04 at 28a4186a44)
 + builtin/diff.c: fix "git-diff" usage string typo

 Typofix.

 Will merge to 'master'.
 source: <20220202072844.35545-1-shaoxuan.yuan02@gmail.com>


* sy/modernize-t-lib-read-tree-m-3way (2022-02-02) 2 commits
  (merged to 'next' on 2022-02-09 at 8b7ecb4e99)
 + t/lib-read-tree-m-3way: indent with tabs
 + t/lib-read-tree-m-3way: modernize style

 Style updates on a test script helper.

 Will merge to 'master'.
 source: <20220123060318.471414-1-shaoxuan.yuan02@gmail.com>


* ab/auto-detect-zlib-compress2 (2022-01-26) 1 commit
  (merged to 'next' on 2022-02-08 at 9922938a6a)
 + compat: auto-detect if zlib has uncompress2()

 Notice older zlib to enable our replacement uncompress2()
 automatically.

 Will merge to 'master'.
 source: <xmqqr18x3s5s.fsf@gitster.g>


* js/apply-partial-clone-filters-recursively (2022-02-09) 1 commit
 - clone, submodule: pass partial clone filters to submodules

 "git clone --filter=... --recurse-submodules" only makes the
 top-level a partial clone, while submodules are fully cloned.  This
 behaviour is changed to pass the same filter down to the submodules.

 Will merge to 'next'?
 source: <690d2316ad518ea4551821b2b3aa652996858475.1644034886.git.steadmon@google.com>


* rs/parse-options-lithelp-help (2022-01-20) 1 commit
  (merged to 'next' on 2022-02-04 at 74bc57e8fa)
 + parse-options: document bracketing of argh

 Comment update.

 Will merge to 'master'.
 source: <c6ab4408-1091-4d14-849e-afe5f3053e8b@web.de>


* jh/p4-various-fixups (2022-01-16) 23 commits
 . git-p4: seperate multiple statements onto seperate lines
 . git-p4: move inline comments to line above
 . git-p4: only seperate code blocks by a single empty line
 . git-p4: compare to singletons with "is" and "is not"
 . git-p4: normalize indentation of lines in conditionals
 . git-p4: ensure there is a single space around all operators
 . git-p4: ensure every comment has a single #
 . git-p4: remove spaces between dictionary keys and colons
 . git-p4: remove redundant backslash-continuations inside brackets
 . git-p4: remove extraneous spaces before function arguments
 . git-p4: place a single space after every comma
 . git-p4: removed brackets when assigning multiple return values
 . git-p4: remove spaces around default arguments
 . git-p4: remove padding from lists, tuples and function arguments
 . git-p4: sort and de-duplcate pylint disable list
 . git-p4: remove commented code
 . git-p4: convert descriptive class and function comments into docstrings
 . git-p4: improve consistency of docstring formatting
 . git-p4: indent with 4-spaces
 . git-p4: remove unneeded semicolons from statements
 . git-p4: add blank lines between functions and class definitions
 . Merge branch 'jh/p4-spawning-external-commands-cleanup' into jh/p4-various-fixups
 . Merge branch 'jh/p4-fix-use-of-process-error-exception' into jh/p4-various-fixups

 Various cleanups to "git p4".

 Breaks its own test suite.
 source: <20220116160550.514637-1-jholdsworth@nvidia.com>


* rs/bisect-executable-not-found (2022-01-19) 4 commits
 - bisect--helper: double-check run command on exit code 126 and 127
 - bisect: document run behavior with exit codes 126 and 127
 - bisect--helper: release strbuf and strvec on run error
 - bisect--helper: report actual bisect_state() argument on error

 A not-so-common mistake is to write a script to feed "git bisect
 run" without making it executable, in which case all tests will
 exit with 126 or 127 error codes, even on revisions that are marked
 as good.  Try to recoginse this situation and stop iteration early.

 Will merge to 'next'?
 source: <fead25d6-6f5f-487a-ad4c-0657fe9785fd@www.fastmail.com>


* ds/sparse-checkout-requires-per-worktree-config (2022-02-08) 6 commits
 - config: make git_configset_get_string_tmp() private
 - worktree: copy sparse-checkout patterns and config on add
 - sparse-checkout: set worktree-config correctly
 - config: add repo_config_set_worktree_gently()
 - worktree: create init_worktree_config()
 - Documentation: add extensions.worktreeConfig details

 "git sparse-checkout" wants to work with per-worktree configration,
 but did not work well in a worktree attached to a bare repository.

 Will merge to 'next'?
 cf. <20220204081336.3194538-1-newren@gmail.com>
 cf. <CAPig+cRrRxuTeByhKkLs_KDaWY8-r4+jrwT83A-r+sBQsmebMw@mail.gmail.com>
 source: <pull.1101.v6.git.1644269583.gitgitgadget@gmail.com>


* ps/avoid-unnecessary-hook-invocation-with-packed-refs (2022-01-17) 6 commits
 - refs: skip hooks when deleting uncovered packed refs
 - refs: do not execute reference-transaction hook on packing refs
 - refs: demonstrate excessive execution of the reference-transaction hook
 - refs: allow skipping the reference-transaction hook
 - refs: allow passing flags when beginning transactions
 - refs: extract packed_refs_delete_refs() to allow control of transaction

 Because a deletion of ref would need to remove it from both the
 loose ref store and the packed ref store, a delete-ref operation
 that logically removes one ref may end up invoking ref-transaction
 hook twice, which has been corrected.

 Will merge to 'next'.
 source: <cover.1642406989.git.ps@pks.im>


* ld/sparse-index-bash-completion (2022-02-08) 3 commits
  (merged to 'next' on 2022-02-08 at ac1e968ab8)
 + completion: handle unusual characters for sparse-checkout
 + completion: improve sparse-checkout cone mode directory completion
 + completion: address sparse-checkout issues

 The command line completion (in contrib/) learns to complete
 arguments give to "git sparse-checkout" command.

 Will merge to 'master'.
 source: <pull.1108.v7.git.1644255105.gitgitgadget@gmail.com>


* bc/clarify-eol-attr (2022-01-12) 2 commits
  (merged to 'next' on 2022-02-04 at dc1db4bd21)
 + docs: correct documentation about eol attribute
 + t0027: add tests for eol without text in .gitattributes

 Doc and test update around the eol attribute.

 Will merge to 'master'.
 source: <20220111021507.531736-1-sandals@crustytoothpaste.net>


* jz/rev-list-exclude-first-parent-only (2022-01-12) 1 commit
  (merged to 'next' on 2022-02-09 at f26a82c66a)
 + git-rev-list: add --exclude-first-parent-only flag

 "git log" and friends learned an option --exclude-first-parent-only
 to propagate UNINTERESTING bit down only along the first-parent
 chain, just like --first-parent option shows commits that lack the
 UNINTERESTING bit only along the first-parent chain.

 Will merge to 'master'.
 source: <20220111213941.30129-1-jerry@skydio.com>


* en/present-despite-skipped (2022-01-14) 6 commits
 - Accelerate clear_skip_worktree_from_present_files() by caching
 - Update documentation related to sparsity and the skip-worktree bit
 - repo_read_index: clear SKIP_WORKTREE bit from files present in worktree
 - unpack-trees: fix accidental loss of user changes
 - t1011: add testcase demonstrating accidental loss of user modifications
 - Merge branch 'vd/sparse-clean-etc' into en/present-despite-skipped
 (this branch uses vd/sparse-clean-etc.)

 In sparse-checkouts, files mis-marked as missing from the working tree
 could lead to later problems.  Such files were hard to discover, and
 harder to correct.  Automatically detecting and correcting the marking
 of such files has been added to avoid these problems.

 Will merge to 'next'?
 cf. <20220204081336.3194538-1-newren@gmail.com>
 source: <pull.1114.v2.git.1642175983.gitgitgadget@gmail.com>


* bc/csprng-mktemps (2022-01-17) 2 commits
  (merged to 'next' on 2022-02-04 at 2e32375c73)
 + wrapper: use a CSPRNG to generate random file names
 + wrapper: add a helper to generate numbers from a CSPRNG

 Pick a better random number generator and use it when we prepare
 temporary filenames.

 Will merge to 'master'.
 source: <20220117215617.843190-1-sandals@crustytoothpaste.net>


* vd/sparse-clean-etc (2022-01-13) 9 commits
  (merged to 'next' on 2022-02-09 at 5928dbd25e)
 + update-index: reduce scope of index expansion in do_reupdate
 + update-index: integrate with sparse index
 + update-index: add tests for sparse-checkout compatibility
 + checkout-index: integrate with sparse index
 + checkout-index: add --ignore-skip-worktree-bits option
 + checkout-index: expand sparse checkout compatibility tests
 + clean: integrate with sparse index
 + reset: reorder wildcard pathspec conditions
 + reset: fix validation in sparse index test
 (this branch is used by en/present-despite-skipped.)

 "git update-index", "git checkout-index", and "git clean" are
 taught to work better with the sparse checkout feature.

 Will merge to 'master'.
 source: <pull.1109.v2.git.1641924306.gitgitgadget@gmail.com>


* en/remerge-diff (2022-02-02) 11 commits
  (merged to 'next' on 2022-02-08 at 68b9a8a38b)
 + diff-merges: avoid history simplifications when diffing merges
 + merge-ort: mark conflict/warning messages from inner merges as omittable
 + show, log: include conflict/warning messages in --remerge-diff headers
 + diff: add ability to insert additional headers for paths
 + merge-ort: format messages slightly different for use in headers
 + merge-ort: mark a few more conflict messages as omittable
 + merge-ort: capture and print ll-merge warnings in our preferred fashion
 + ll-merge: make callers responsible for showing warnings
 + log: clean unneeded objects during `log --remerge-diff`
 + show, log: provide a --remerge-diff capability
 + Merge branch 'ns/tmp-objdir' into en/remerge-diff
 (this branch is used by en/merge-tree.)

 "git log --remerge-diff" shows the difference from mechanical merge
 result and the merge result that is actually recorded.

 Will merge to 'master'.
 source: <pull.1103.v5.git.1643769457.gitgitgadget@gmail.com>


* bs/forbid-i18n-of-protocol-token-in-fetch-pack (2021-12-22) 2 commits
 - fixup! fetch-pack: parameterize message containing 'ready' keyword
 - fetch-pack: parameterize message containing 'ready' keyword

 L10n support for a few error messages.

 Expecting an ack for fixup.
 source: <20211222075805.19027-1-bagasdotme@gmail.com>


* gc/branch-recurse-submodules (2022-02-04) 7 commits
 - branch.c: use 'goto cleanup' in setup_tracking() to fix memory leaks
 - branch: add --recurse-submodules option for branch creation
 - builtin/branch: consolidate action-picking logic in cmd_branch()
 - branch: add a dry_run parameter to create_branch()
 - branch: make create_branch() always create a branch
 - branch: move --set-upstream-to behavior to dwim_and_setup_tracking()
 - Merge branch 'js/branch-track-inherit' into gc/branch-recurse-submodules

 "git branch" learned the "--recurse-submodules" option.

 Will merge to 'next'.
 source: <20220129000446.99261-1-chooglen@google.com>


* hn/reftable-coverity-fixes (2022-01-20) 17 commits
  (merged to 'next' on 2022-02-08 at 1baf327a66)
 + reftable: add print functions to the record types
 + reftable: make reftable_record a tagged union
 + reftable: remove outdated file reftable.c
 + reftable: implement record equality generically
 + reftable: make reftable-record.h function signatures const correct
 + reftable: handle null refnames in reftable_ref_record_equal
 + reftable: drop stray printf in readwrite_test
 + reftable: order unittests by complexity
 + reftable: all xxx_free() functions accept NULL arguments
 + reftable: fix resource warning
 + reftable: ignore remove() return value in stack_test.c
 + reftable: check reftable_stack_auto_compact() return value
 + reftable: fix resource leak blocksource.c
 + reftable: fix resource leak in block.c error path
 + reftable: fix OOB stack write in print functions
 + Merge branch 'hn/create-reflog-simplify' into hn/reftable-coverity-fixes
 + Merge branch 'hn/reftable' into hn/reftable-coverity-fixes

 Problems identified by Coverity in the reftable code have been
 corrected.

 Will merge to 'master'.
 source: <pull.1152.v6.git.git.1642691534.gitgitgadget@gmail.com>


* tb/midx-bitmap-corruption-fix (2022-01-27) 9 commits
  (merged to 'next' on 2022-02-08 at a8cc333d78)
 + pack-bitmap.c: gracefully fallback after opening pack/MIDX
 + midx: read `RIDX` chunk when present
 + t/lib-bitmap.sh: parameterize tests over reverse index source
 + t5326: move tests to t/lib-bitmap.sh
 + t5326: extract `test_rev_exists`
 + t5326: drop unnecessary setup
 + pack-revindex.c: instrument loading on-disk reverse index
 + midx.c: make changing the preferred pack safe
 + t5326: demonstrate bitmap corruption after permutation

 A bug that made multi-pack bitmap and the object order out-of-sync
 (hence the .midx data gets corrupted) has been fixed.

 Will merge to 'master'.
 source: <cover.1643150456.git.me@ttaylorr.com>


* ab/grep-patterntype (2022-02-04) 9 commits
 - grep: simplify config parsing and option parsing
 - grep.c: do "if (bool && memchr())" not "if (memchr() && bool)"
 - grep.h: make "grep_opt.pattern_type_option" use its enum
 - grep API: call grep_config() after grep_init()
 - grep.c: don't pass along NULL callback value
 - built-ins: trust the "prefix" from run_builtin()
 - grep tests: add missing "grep.patternType" config tests
 - log tests: check if grep_config() is called by "log"-like cmds
 - grep.h: remove unused "regex_t regexp" from grep_opt

 Some code clean-up in the "git grep" machinery.

 Looking good, except for the last step.
 Code-wise, it is tempted to call it a victory after squashing the
 fix-up in, but that does not fix the proposed log message, so...

 Expecting a reroll to update its tests, but otherwise looks ready.
 cf. <xmqqv8xui5ah.fsf@gitster.g>
 cf. <xmqqmtj6jkuk.fsf@gitster.g>
 source: <cover-v10-0.9-00000000000-20220204T211534Z-avarab@gmail.com>


* js/use-builtin-add-i (2021-12-01) 2 commits
 - add -i: default to the built-in implementation
 - t2016: require the PERL prereq only when necessary

 "git add -i" was rewritten in C some time ago and has been in
 testing; the reimplementation is now exposed to general public by
 default.

 On hold.

 What's the status of the "known breakage"?
 Are we ready to switch if we wanted to?
 There are known breakages on macOS.
 cf. <nycvar.QRO.7.76.6.2112021832060.63@tvgsbejvaqbjf.bet>
 source: <pull.1087.git.1638281655.gitgitgadget@gmail.com>


* ab/ambiguous-object-name (2022-01-27) 7 commits
 - object-name: re-use "struct strbuf" in show_ambiguous_object()
 - object-name: iterate ambiguous objects before showing header
 - object-name: show date for ambiguous tag objects
 - object-name: make ambiguous object output translatable
 - object-name: explicitly handle bad tags in show_ambiguous_object()
 - object-name: explicitly handle OBJ_BAD in show_ambiguous_object()
 - object-name tests: add tests for ambiguous object blind spots

 Error output given in response to an ambiguous object name has been
 improved.

 Will merge to 'next'?
 source: <cover-v8-0.7-00000000000-20220127T052116Z-avarab@gmail.com>


* tl/ls-tree-oid-only (2022-02-08) 13 commits
 - ls-tree.c: support --object-only option for "git-ls-tree"
 - ls-tree: introduce function "fast_path()"
 - ls-tree.c: introduce "--format" option
 - cocci: allow padding with `strbuf_addf()`
 - ls-tree: introduce struct "show_tree_data"
 - ls-tree: slightly refactor `show_tree()`
 - ls-tree: fix "--name-only" and "--long" combined use bug
 - ls-tree: simplify nesting if/else logic in "show_tree()"
 - ls-tree: rename "retval" to "recurse" in "show_tree()"
 - ls-tree: use "size_t", not "int" for "struct strbuf"'s "len"
 - ls-tree: use "enum object_type", not {blob,tree,commit}_type
 - ls-tree: add missing braces to "else" arms
 - ls-tree: remove commented-out code

 "git ls-tree" learns "--oid-only" option, similar to "--name-only",
 and more generalized "--format" option.
 source: <cover.1644319434.git.dyroneteng@gmail.com>


* jh/builtin-fsmonitor-part2 (2021-12-25) 31 commits
 - fixup! t7527: create test for fsmonitor--daemon
 - fixup! t/perf/p7519: speed up test on Windows
 - t7527: test status with untracked-cache and fsmonitor--daemon
 - fsmonitor: force update index after large responses
 - fsmonitor--daemon: use a cookie file to sync with file system
 - fsmonitor--daemon: periodically truncate list of modified files
 - t/perf/p7519: add fsmonitor--daemon test cases
 - t/perf/p7519: speed up test on Windows
 - t/helper/test-chmtime: skip directories on Windows
 - t/perf: avoid copying builtin fsmonitor files into test repo
 - t7527: create test for fsmonitor--daemon
 - t/helper/fsmonitor-client: create IPC client to talk to FSMonitor Daemon
 - help: include fsmonitor--daemon feature flag in version info
 - fsmonitor--daemon: implement handle_client callback
 - compat/fsmonitor/fsm-listen-darwin: implement FSEvent listener on MacOS
 - compat/fsmonitor/fsm-listen-darwin: add macos header files for FSEvent
 - compat/fsmonitor/fsm-listen-win32: implement FSMonitor backend on Windows
 - fsmonitor--daemon: create token-based changed path cache
 - fsmonitor--daemon: define token-ids
 - fsmonitor--daemon: add pathname classification
 - fsmonitor--daemon: implement 'start' command
 - fsmonitor--daemon: implement 'run' command
 - compat/fsmonitor/fsm-listen-darwin: stub in backend for Darwin
 - compat/fsmonitor/fsm-listen-win32: stub in backend for Windows
 - fsmonitor--daemon: implement 'stop' and 'status' commands
 - fsmonitor--daemon: add a built-in fsmonitor daemon
 - fsmonitor: document builtin fsmonitor
 - fsmonitor: use IPC to query the builtin FSMonitor daemon
 - fsmonitor: config settings are repository-specific
 - fsmonitor-ipc: create client routines for git-fsmonitor--daemon
 - fsmonitor: enhance existing comments

 Built-in fsmonitor (part 2).

 Expecting a reroll.
 Seems that the discussion stalled.
 cf. <d9c3ef61-768c-3560-2858-3438c355a742@jeffhostetler.com>
 source: <pull.1041.v4.git.1634826309.gitgitgadget@gmail.com>


* es/superproject-aware-submodules (2022-02-03) 4 commits
 - submodule: record superproject gitdir during 'update'
 - submodule: record superproject gitdir during absorbgitdirs
 - introduce submodule.superprojectGitDir record
 - t7400-submodule-basic: modernize inspect() helper

 A configuration variable in a submodule points at the location of
 the superproject it is bound to (RFC).
 source: <20220203215914.683922-1-emilyshaffer@google.com>


* ab/only-single-progress-at-once (2022-02-03) 9 commits
 - pack-bitmap-write.c: don't return without stop_progress()
 - progress API: unify stop_progress{,_msg}(), fix trace2 bug
 - progress.c: refactor stop_progress{,_msg}() to use helpers
 - progress.c: use dereferenced "progress" variable, not "(*p_progress)"
 - progress.h: format and be consistent with progress.c naming
 - progress.c tests: test some invalid usage
 - progress.c tests: make start/stop commands on stdin
 - progress.c test helper: add missing braces
 - leak tests: fix a memory leak in "test-progress" helper

 Further tweaks on progress API.

 Will merge to 'next'?
 source: <cover-v9-0.9-00000000000-20220203T213350Z-avarab@gmail.com>

^ permalink raw reply	[relevance 3%]

* [PATCH 0/7] rebase: make reflog messages independent of the backend
@ 2022-02-21 11:10  3% Phillip Wood via GitGitGadget
  2022-02-21 11:10  1% ` [PATCH 2/7] rebase --merge: fix reflog when continuing Phillip Wood via GitGitGadget
                   ` (4 more replies)
  0 siblings, 5 replies; 200+ results
From: Phillip Wood via GitGitGadget @ 2022-02-21 11:10 UTC (permalink / raw)
  To: git; +Cc: Phillip Wood

This is a series of rebase reflog related patches with the aim of unifying
the reflog messages from the two rebase backends.

 * improve rebase reflog test coverage
 * rebase --merge: fix reflog messages for --continue and --skip
 * rebase --apply: respect GIT_REFLOG_ACTION
 * rebase --abort: improve reflog message
 * unify reflog messages between the two rebase backends

This series is based on pw/use-inprocess-checkout-in-rebase

Phillip Wood (7):
  rebase --apply: remove duplicated code
  rebase --merge: fix reflog when continuing
  rebase --merge: fix reflog message after skipping
  rebase --apply: respect GIT_REFLOG_ACTION
  rebase --apply: make reflog messages match rebase --merge
  rebase --abort: improve reflog message
  rebase: cleanup action handling

 builtin/rebase.c          | 144 ++++++++++++-----------------
 sequencer.c               |   5 ++
 t/t3406-rebase-message.sh | 185 +++++++++++++++++++++++++++++++-------
 3 files changed, 214 insertions(+), 120 deletions(-)


base-commit: 38c541ce94048cf72aa4f465be9314423a57f445
Published-As: https://github.com/gitgitgadget/git/releases/tag/pr-1150%2Fphillipwood%2Fwip%2Frebase-reflog-fixes-v1
Fetch-It-Via: git fetch https://github.com/gitgitgadget/git pr-1150/phillipwood/wip/rebase-reflog-fixes-v1
Pull-Request: https://github.com/gitgitgadget/git/pull/1150
-- 
gitgitgadget

^ permalink raw reply	[relevance 3%]

* [PATCH 2/7] rebase --merge: fix reflog when continuing
  2022-02-21 11:10  3% [PATCH 0/7] rebase: make reflog messages independent of the backend Phillip Wood via GitGitGadget
@ 2022-02-21 11:10  1% ` Phillip Wood via GitGitGadget
  2022-04-07 13:49  2%   ` Christian Couder
  2022-02-21 11:10  2% ` [PATCH 3/7] rebase --merge: fix reflog message after skipping Phillip Wood via GitGitGadget
                   ` (3 subsequent siblings)
  4 siblings, 1 reply; 200+ results
From: Phillip Wood via GitGitGadget @ 2022-02-21 11:10 UTC (permalink / raw)
  To: git; +Cc: Phillip Wood, Phillip Wood

From: Phillip Wood <phillip.wood@dunelm.org.uk>

The reflog message for a conflict resolution committed by "rebase
--continue" looks like

	rebase (continue): commit subject line

Unfortunately the reflog message each subsequent pick look like

	rebase (continue) (pick): commit subject line

Fix this by setting the reflog message for "rebase --continue" in
sequencer_continue() so it does not affect subsequent commits. This
introduces a memory leak similar to the one leaking GIT_REFLOG_ACTION
in pick_commits(). Both of these will be fixed in a future series that
stops the sequencer calling setenv().

Signed-off-by: Phillip Wood <phillip.wood@dunelm.org.uk>
---
 builtin/rebase.c          |   2 -
 sequencer.c               |   5 ++
 t/t3406-rebase-message.sh | 120 +++++++++++++++++++++++++-------------
 3 files changed, 86 insertions(+), 41 deletions(-)

diff --git a/builtin/rebase.c b/builtin/rebase.c
index 4832f16e675..cd9a4f3e2f1 100644
--- a/builtin/rebase.c
+++ b/builtin/rebase.c
@@ -1247,8 +1247,6 @@ int cmd_rebase(int argc, const char **argv, const char *prefix)
 		int fd;
 
 		options.action = "continue";
-		set_reflog_action(&options);
-
 		/* Sanity check */
 		if (get_oid("HEAD", &head))
 			die(_("Cannot read HEAD"));
diff --git a/sequencer.c b/sequencer.c
index bdd66b4b67a..3634ad5baa9 100644
--- a/sequencer.c
+++ b/sequencer.c
@@ -4777,6 +4777,8 @@ int sequencer_continue(struct repository *r, struct replay_opts *opts)
 	if (read_populate_opts(opts))
 		return -1;
 	if (is_rebase_i(opts)) {
+		char *previous_reflog_action;
+
 		if ((res = read_populate_todo(r, &todo_list, opts)))
 			goto release_todo_list;
 
@@ -4787,10 +4789,13 @@ int sequencer_continue(struct repository *r, struct replay_opts *opts)
 			unlink(rebase_path_dropped());
 		}
 
+		previous_reflog_action = xstrdup(getenv(GIT_REFLOG_ACTION));
+		setenv(GIT_REFLOG_ACTION, reflog_message(opts, "continue", NULL), 1);
 		if (commit_staged_changes(r, opts, &todo_list)) {
 			res = -1;
 			goto release_todo_list;
 		}
+		setenv(GIT_REFLOG_ACTION, previous_reflog_action, 1);
 	} else if (!file_exists(get_todo_path(opts)))
 		return continue_single_pick(r, opts);
 	else if ((res = read_populate_todo(r, &todo_list, opts)))
diff --git a/t/t3406-rebase-message.sh b/t/t3406-rebase-message.sh
index d17b450e811..3ca2fbb0d59 100755
--- a/t/t3406-rebase-message.sh
+++ b/t/t3406-rebase-message.sh
@@ -10,10 +10,16 @@ export GIT_TEST_DEFAULT_INITIAL_BRANCH_NAME
 test_expect_success 'setup' '
 	test_commit O fileO &&
 	test_commit X fileX &&
+	git branch fast-forward &&
 	test_commit A fileA &&
 	test_commit B fileB &&
 	test_commit Y fileY &&
 
+	git checkout -b conflicts O &&
+	test_commit P &&
+	test_commit conflict-X fileX &&
+	test_commit Q &&
+
 	git checkout -b topic O &&
 	git cherry-pick A B &&
 	test_commit Z fileZ &&
@@ -79,54 +85,90 @@ test_expect_success 'error out early upon -C<n> or --whitespace=<bad>' '
 	test_i18ngrep "Invalid whitespace option" err
 '
 
-test_expect_success 'GIT_REFLOG_ACTION' '
-	git checkout start &&
-	test_commit reflog-onto &&
-	git checkout -b reflog-topic start &&
-	test_commit reflog-to-rebase &&
-
-	git rebase reflog-onto &&
-	git log -g --format=%gs -3 >actual &&
-	cat >expect <<-\EOF &&
-	rebase (finish): returning to refs/heads/reflog-topic
-	rebase (pick): reflog-to-rebase
-	rebase (start): checkout reflog-onto
+write_reflog_expect () {
+	if test $mode = --apply
+	then
+		sed 's/.*(finish)/rebase finished/; s/ ([^)]*)//'
+	else
+		cat
+	fi >expect
+}
+
+test_reflog () {
+	mode=$1
+	reflog_action="$2"
+
+	test_expect_success "rebase $mode reflog${reflog_action:+ GIT_REFLOG_ACTION=$reflog_action}" '
+	git checkout conflicts &&
+	test_when_finished "git reset --hard Q" &&
+
+	(
+		if test -n "$reflog_action"
+		then
+			GIT_REFLOG_ACTION="$reflog_action" &&
+			export GIT_REFLOG_ACTION
+		fi &&
+		test_must_fail git rebase $mode main &&
+		echo resolved >fileX &&
+		git add fileX &&
+		git rebase --continue
+	) &&
+
+	git log -g --format=%gs -5 >actual &&
+	write_reflog_expect <<-EOF &&
+	${reflog_action:-rebase} (finish): returning to refs/heads/conflicts
+	${reflog_action:-rebase} (pick): Q
+	${reflog_action:-rebase} (continue): conflict-X
+	${reflog_action:-rebase} (pick): P
+	${reflog_action:-rebase} (start): checkout main
 	EOF
 	test_cmp expect actual &&
 
-	git checkout -b reflog-prefix reflog-to-rebase &&
-	GIT_REFLOG_ACTION=change-the-reflog git rebase reflog-onto &&
-	git log -g --format=%gs -3 >actual &&
-	cat >expect <<-\EOF &&
-	change-the-reflog (finish): returning to refs/heads/reflog-prefix
-	change-the-reflog (pick): reflog-to-rebase
-	change-the-reflog (start): checkout reflog-onto
+	git log -g --format=%gs -1 conflicts >actual &&
+	write_reflog_expect <<-EOF &&
+	${reflog_action:-rebase} (finish): refs/heads/conflicts onto $(git rev-parse main)
 	EOF
-	test_cmp expect actual
-'
-
-test_expect_success 'rebase --apply reflog' '
-	git checkout -b reflog-apply start &&
-	old_head_reflog="$(git log -g --format=%gs -1 HEAD)" &&
-
-	git rebase --apply Y &&
+	test_cmp expect actual &&
 
-	git log -g --format=%gs -4 HEAD >actual &&
-	cat >expect <<-EOF &&
-	rebase finished: returning to refs/heads/reflog-apply
-	rebase: Z
-	rebase: checkout Y
-	$old_head_reflog
+	# check there is only one new entry in the branch reflog
+	test_cmp_rev conflicts@{1} Q
+	'
+
+	test_expect_success "rebase $mode fast-forward reflog${reflog_action:+ GIT_REFLOG_ACTION=$reflog_action}" '
+	git checkout fast-forward &&
+	test_when_finished "git reset --hard X" &&
+
+	(
+		if test -n "$reflog_action"
+		then
+			GIT_REFLOG_ACTION="$reflog_action" &&
+			export GIT_REFLOG_ACTION
+		fi &&
+		git rebase $mode main
+	) &&
+
+	git log -g --format=%gs -2 >actual &&
+	write_reflog_expect <<-EOF &&
+	${reflog_action:-rebase} (finish): returning to refs/heads/fast-forward
+	${reflog_action:-rebase} (start): checkout main
 	EOF
 	test_cmp expect actual &&
 
-	git log -g --format=%gs -2 reflog-apply >actual &&
-	cat >expect <<-EOF &&
-	rebase finished: refs/heads/reflog-apply onto $(git rev-parse Y)
-	branch: Created from start
+	git log -g --format=%gs -1 fast-forward >actual &&
+	write_reflog_expect <<-EOF &&
+	${reflog_action:-rebase} (finish): refs/heads/fast-forward onto $(git rev-parse main)
 	EOF
-	test_cmp expect actual
-'
+	test_cmp expect actual &&
+
+	# check there is only one new entry in the branch reflog
+	test_cmp_rev fast-forward@{1} X
+	'
+}
+
+test_reflog --merge
+test_reflog --merge my-reflog-action
+test_reflog --apply
+test_reflog --apply my-reflog-action
 
 test_expect_success 'rebase -i onto unrelated history' '
 	git init unrelated &&
-- 
gitgitgadget


^ permalink raw reply related	[relevance 1%]

* [PATCH 3/7] rebase --merge: fix reflog message after skipping
  2022-02-21 11:10  3% [PATCH 0/7] rebase: make reflog messages independent of the backend Phillip Wood via GitGitGadget
  2022-02-21 11:10  1% ` [PATCH 2/7] rebase --merge: fix reflog when continuing Phillip Wood via GitGitGadget
@ 2022-02-21 11:10  2% ` Phillip Wood via GitGitGadget
  2022-04-17  1:58  2%   ` Elijah Newren
  2022-04-04 15:34  0% ` Review Request (was Re: [PATCH 0/7] rebase: make reflog messages independent of the backend) Phillip Wood
                   ` (2 subsequent siblings)
  4 siblings, 1 reply; 200+ results
From: Phillip Wood via GitGitGadget @ 2022-02-21 11:10 UTC (permalink / raw)
  To: git; +Cc: Phillip Wood, Phillip Wood

From: Phillip Wood <phillip.wood@dunelm.org.uk>

The reflog message for every pick after running "rebase --skip" looks
like

	rebase (skip) (pick): commit subject line

Fix this by not appending " (skip)" to the reflog action.

Signed-off-by: Phillip Wood <phillip.wood@dunelm.org.uk>
---
 builtin/rebase.c          |  2 --
 t/t3406-rebase-message.sh | 24 ++++++++++++++++++++++++
 2 files changed, 24 insertions(+), 2 deletions(-)

diff --git a/builtin/rebase.c b/builtin/rebase.c
index cd9a4f3e2f1..36863117fba 100644
--- a/builtin/rebase.c
+++ b/builtin/rebase.c
@@ -1273,8 +1273,6 @@ int cmd_rebase(int argc, const char **argv, const char *prefix)
 		struct string_list merge_rr = STRING_LIST_INIT_DUP;
 
 		options.action = "skip";
-		set_reflog_action(&options);
-
 		rerere_clear(the_repository, &merge_rr);
 		string_list_clear(&merge_rr, 1);
 		ropts.flags = RESET_HEAD_HARD;
diff --git a/t/t3406-rebase-message.sh b/t/t3406-rebase-message.sh
index 3ca2fbb0d59..8aa6a79acc1 100755
--- a/t/t3406-rebase-message.sh
+++ b/t/t3406-rebase-message.sh
@@ -163,6 +163,30 @@ test_reflog () {
 	# check there is only one new entry in the branch reflog
 	test_cmp_rev fast-forward@{1} X
 	'
+
+	test_expect_success "rebase $mode --skip reflog${reflog_action:+ GIT_REFLOG_ACTION=$reflog_action}" '
+	git checkout conflicts &&
+	test_when_finished "git reset --hard Q" &&
+
+	(
+		if test -n "$reflog_action"
+		then
+			GIT_REFLOG_ACTION="$reflog_action" &&
+			export GIT_REFLOG_ACTION
+		fi &&
+		test_must_fail git rebase $mode main &&
+		git rebase --skip
+	) &&
+
+	git log -g --format=%gs -4 >actual &&
+	write_reflog_expect <<-EOF &&
+	${reflog_action:-rebase} (finish): returning to refs/heads/conflicts
+	${reflog_action:-rebase} (pick): Q
+	${reflog_action:-rebase} (pick): P
+	${reflog_action:-rebase} (start): checkout main
+	EOF
+	test_cmp expect actual
+	'
 }
 
 test_reflog --merge
-- 
gitgitgadget


^ permalink raw reply related	[relevance 2%]

* Review Request (was Re: [PATCH 0/7] rebase: make reflog messages independent of the backend)
  2022-02-21 11:10  3% [PATCH 0/7] rebase: make reflog messages independent of the backend Phillip Wood via GitGitGadget
  2022-02-21 11:10  1% ` [PATCH 2/7] rebase --merge: fix reflog when continuing Phillip Wood via GitGitGadget
  2022-02-21 11:10  2% ` [PATCH 3/7] rebase --merge: fix reflog message after skipping Phillip Wood via GitGitGadget
@ 2022-04-04 15:34  0% ` Phillip Wood
  2022-04-17  2:13  0%   ` Elijah Newren
  2022-04-17  2:09  0% ` [PATCH 0/7] rebase: make reflog messages independent of the backend Elijah Newren
  2022-04-20  9:56  3% ` [PATCH v2 0/8] " Phillip Wood via GitGitGadget
  4 siblings, 1 reply; 200+ results
From: Phillip Wood @ 2022-04-04 15:34 UTC (permalink / raw)
  To: Phillip Wood via GitGitGadget, git
  Cc: Johannes Schindelin, Elijah Newren,
	Ævar Arnfjörð Bjarmason

If anyone has time to review these patches I'd be very grateful. I've 
cc'd this message to some list regulars who have reviewed rebase patches 
before but if anyone else fancies taking a look at them that would be great.

Thanks

Phillip

On 21/02/2022 11:10, Phillip Wood via GitGitGadget wrote:
> This is a series of rebase reflog related patches with the aim of unifying
> the reflog messages from the two rebase backends.
> 
>   * improve rebase reflog test coverage
>   * rebase --merge: fix reflog messages for --continue and --skip
>   * rebase --apply: respect GIT_REFLOG_ACTION
>   * rebase --abort: improve reflog message
>   * unify reflog messages between the two rebase backends
> 
> This series is based on pw/use-inprocess-checkout-in-rebase
> 
> Phillip Wood (7):
>    rebase --apply: remove duplicated code
>    rebase --merge: fix reflog when continuing
>    rebase --merge: fix reflog message after skipping
>    rebase --apply: respect GIT_REFLOG_ACTION
>    rebase --apply: make reflog messages match rebase --merge
>    rebase --abort: improve reflog message
>    rebase: cleanup action handling
> 
>   builtin/rebase.c          | 144 ++++++++++++-----------------
>   sequencer.c               |   5 ++
>   t/t3406-rebase-message.sh | 185 +++++++++++++++++++++++++++++++-------
>   3 files changed, 214 insertions(+), 120 deletions(-)
> 
> 
> base-commit: 38c541ce94048cf72aa4f465be9314423a57f445
> Published-As: https://github.com/gitgitgadget/git/releases/tag/pr-1150%2Fphillipwood%2Fwip%2Frebase-reflog-fixes-v1
> Fetch-It-Via: git fetch https://github.com/gitgitgadget/git pr-1150/phillipwood/wip/rebase-reflog-fixes-v1
> Pull-Request: https://github.com/gitgitgadget/git/pull/1150

^ permalink raw reply	[relevance 0%]

* [ANNOUNCE] Git v2.36.0-rc0
@ 2022-04-04 20:43  3% Junio C Hamano
  0 siblings, 0 replies; 200+ results
From: Junio C Hamano @ 2022-04-04 20:43 UTC (permalink / raw)
  To: git; +Cc: git-packagers

An early preview release Git v2.36.0-rc0 is now available for
testing at the usual places.  It is comprised of 661 non-merge
commits since v2.35.0, contributed by 80 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.36.0-rc0' tag and the 'master' branch that the tag points at:

  url = https://git.kernel.org/pub/scm/git/git
  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.35.0 are as follows.
Welcome to the Git development community!

  Abhradeep Chakraborty, BRESSAT Jonathan, Chen Bojun,
  COGONI Guillaume, David Cantrell, Des Preston, Hongyi Zhao,
  Jason Yundt, Jayati Shrivastava, Jaydeep Das, Jaydeep P Das,
  Jose Lopes, Justin Donnelly, Kraymer, Liginity Lee, Matheus
  Felipe, Maximilian Reichel, Michael McClimon, Nihal Jere,
  Pedro Martelletto, Robert Coup, Sean Allred, Shaoxuan Yuan,
  Shubham Mishra, and Waleed Khan.

Returning contributors who helped this release are as follows.
Thanks for your continued support.

  Ævar Arnfjörð Bjarmason, Alex Henrie, Atharva Raykar,
  Bagas Sanjaya, Beat Bolli, brian m. carlson, Christian Couder,
  Daniel Hahler, Derrick Stolee, Elia Pinto, Elijah Newren,
  Emily Shaffer, Eric Sunshine, Fabian Stelzer, Glen Choo, Greg
  Hurrell, Han-Wen Nienhuys, Jacob Keller, Jean-Noël Avila, Jeff
  Hostetler, Jeff King, Jerry Zhang, Jessica Clarke, Jiang Xin,
  Joel Holdsworth, Johannes Altmanninger, Johannes Schindelin,
  Johannes Sixt, John Cai, Jonathan Nieder, Jonathan Tan, Josh
  Steadmon, Junio C Hamano, Kevin Willford, Lessley Dennington,
  Marc Strapetz, Matt Cooper, Michael J Gruber, Neeraj Singh,
  Patrick Steinhardt, Philip Oakley, Philippe Blain, Phillip Wood,
  Ramkumar Ramachandra, René Scharfe, Shourya Shukla, SZEDER
  Gábor, Tao Klerks, Taylor Blau, Teng Long, Thomas Gummerer,
  Thomas Koutcher, Tilman Vogel, Todd Zullinger, and Victoria Dye.

[*] We are counting not just the authorship contribution but issue
    reporting, mentoring, helping and reviewing that are recorded in
    the commit trailers.

----------------------------------------------------------------

Git 2.36 Release Notes (draft)
==============================

Updates since Git 2.35
----------------------

Backward compatibility warts

 * "git name-rev --stdin" has been deprecated and issues a warning
   when used; use "git name-rev --annotate-stdin" instead.

 * "git clone --filter=... --recurse-submodules" only makes the
   top-level a partial clone, while submodules are fully cloned.  This
   behaviour is changed to pass the same filter down to the submodules.


Note to those who build from the source

 * Since Git 2.31, our source assumed that the compiler you use to
   build Git supports variadic macros, with an easy-to-use escape
   hatch to allow compilation without variadic macros with an request
   to report that you had to use the escape hatch to the list.
   Because we haven't heard from anybody who actually needed to use
   the escape hatch, it has been removed, making support of variadic
   macros a hard requirement.


UI, Workflows & Features

 * Assorted updates to "git cat-file", especially "-h".

 * The command line completion (in contrib/) learns to complete
   arguments to give to "git sparse-checkout" command.

 * "git log --remerge-diff" shows the difference from mechanical merge
   result and the result that is actually recorded in a merge commit.

 * "git log" and friends learned an option --exclude-first-parent-only
   to propagate UNINTERESTING bit down only along the first-parent
   chain, just like --first-parent option shows commits that lack the
   UNINTERESTING bit only along the first-parent chain.

 * The command line completion script (in contrib/) learned to
   complete all Git subcommands, including the ones that are normally
   hidden, when GIT_COMPLETION_SHOW_ALL_COMMANDS is used.

 * "git branch" learned the "--recurse-submodules" option.

 * A not-so-common mistake is to write a script to feed "git bisect
   run" without making it executable, in which case all tests will
   exit with 126 or 127 error codes, even on revisions that are marked
   as good.  Try to recognize this situation and stop iteration early.

 * When "index-pack" dies due to incoming data exceeding the maximum
   allowed input size, include the value of the limit in the error
   message.

 * The error message given by "git switch HEAD~4" has been clarified
   to suggest the "--detach" option that is required.

 * In sparse-checkouts, files mis-marked as missing from the working tree
   could lead to later problems.  Such files were hard to discover, and
   harder to correct.  Automatically detecting and correcting the marking
   of such files has been added to avoid these problems.

 * "git cat-file" learns "--batch-command" mode, which is a more
   flexible interface than the existing "--batch" or "--batch-check"
   modes, to allow different kinds of inquiries made.

 * The level of verbose output from the ort backend during inner merge
   has been aligned to that of the recursive backend.

 * "git remote rename A B", depending on the number of remote-tracking
   refs involved, takes long time renaming them.  The command has been
   taught to show progress bar while making the user wait.

 * Bundle file format gets extended to allow a partial bundle,
   filtered by similar criteria you would give when making a
   partial/lazy clone.

 * A new built-in userdiff driver for kotlin has been added.

 * "git repack" learned a new configuration to disable triggering of
   age-old "update-server-info" command, which is rarely useful these
   days.

 * "git stash" does not allow subcommands it internally runs as its
   implementation detail, except for "git reset", to emit messages;
   now "git reset" part has also been squelched.

 * "git ls-tree" learns "--oid-only" option, similar to "--name-only",
   and more generalized "--format" option.

 * "git fetch --refetch" learned to fetch everything without telling
   the other side what we already have, which is useful when you
   cannot trust what you have in the local object store.

 * "git branch" gives hint when branch tracking cannot be established
   because fetch refspecs from multiple remote repositories overlap.

 * "git worktree list --porcelain" did not c-quote pathnames and lock
   reasons with unsafe bytes correctly, which is worked around by
   introducing NUL terminated output format with "-z".


Performance, Internal Implementation, Development Support etc.

 * "git apply" (ab)used the util pointer of the string-list to keep
   track of how each symbolic link needs to be handled, which has been
   simplified by using strset.

 * Fix a hand-rolled alloca() imitation that may have violated
   alignment requirement of data being sorted in compatibility
   implementation of qsort_s() and stable qsort().

 * Use the parse-options API in "git reflog" command.

 * The conditional inclusion mechanism of configuration files using
   "[includeIf <condition>]" learns to base its decision on the
   URL of the remote repository the repository interacts with.
   (merge 399b198489 jt/conditional-config-on-remote-url later to maint).

 * "git name-rev --stdin" does not behave like usual "--stdin" at
   all.  Start the process of renaming it to "--annotate-stdin".
   (merge a2585719b3 jc/name-rev-stdin later to maint).

 * "git update-index", "git checkout-index", and "git clean" are
   taught to work better with the sparse checkout feature.

 * Use an internal call to reset_head() helper function instead of
   spawning "git checkout" in "rebase", and update code paths that are
   involved in the change.

 * Messages "ort" merge backend prepares while dealing with conflicted
   paths were unnecessarily confusing since it did not differentiate
   inner merges and outer merges.

 * Small modernization of the rerere-train script (in contrib/).

 * Use designated initializers we started using in mid 2017 in more
   parts of the codebase that are relatively quiescent.

 * Improve failure case behaviour of xdiff library when memory
   allocation fails.

 * General clean-up in reftable implementation, including
   clarification of the API documentation, tightening the code to
   honor documented length limit, etc.

 * Remove the escape hatch we added when we introduced the weather
   balloon to use variadic macros unconditionally, to make it official
   that we now have a hard dependency on the feature.

 * Makefile refactoring with a bit of suffixes rule stripping to
   optimize the runtime overhead.

 * "git stash drop" is reimplemented as an internal call to
   reflog_delete() function, instead of invoking "git reflog delete"
   via run_command() API.

 * Count string_list items in size_t, not "unsigned int".

 * The single-key interactive operation used by "git add -p" has been
   made more robust.

 * Remove unneeded <meta http-equiv=content-type...> from gitweb
   output.

 * "git name-rev" learned to use the generation numbers when setting
   the lower bound of searching commits used to explain the revision,
   when available, instead of committer time.

 * Replace core.fsyncObjectFiles with two new configuration variables,
   core.fsync and core.fsyncMethod.

 * Updates to refs traditionally weren't fsync'ed, but we can
   configure using core.fsync variable to do so.

 * "git reflog" command now uses parse-options API to parse its
   command line options.


Fixes since v2.35
-----------------

 * "rebase" and "stash" in secondary worktrees are broken in
   Git 2.35.0, which has been corrected.

 * "git pull --rebase" ignored the rebase.autostash configuration
   variable when the remote history is a descendant of our history,
   which has been corrected.
   (merge 3013d98d7a pb/pull-rebase-autostash-fix later to maint).

 * "git update-index --refresh" has been taught to deal better with
   racy timestamps (just like "git status" already does).
   (merge 2ede073fd2 ms/update-index-racy later to maint).

 * Avoid tests that are run under GIT_TRACE2 set from failing
   unnecessarily.
   (merge 944d808e42 js/test-unset-trace2-parents later to maint).

 * The merge-ort misbehaved when merge.renameLimit configuration is
   set too low and failed to find all renames.
   (merge 9ae39fef7f en/merge-ort-restart-optim-fix later to maint).

 * We explain that revs come first before the pathspec among command
   line arguments, but did not spell out that dashed options come
   before other args, which has been corrected.
   (merge c11f95010c tl/doc-cli-options-first later to maint).

 * "git add -p" rewritten in C regressed hunk splitting in some cases,
   which has been corrected.
   (merge 7008ddc645 pw/add-p-hunk-split-fix later to maint).

 * "git fetch --negotiate-only" is an internal command used by "git
   push" to figure out which part of our history is missing from the
   other side.  It should never recurse into submodules even when
   fetch.recursesubmodules configuration variable is set, nor it
   should trigger "gc".  The code has been tightened up to ensure it
   only does common ancestry discovery and nothing else.
   (merge de4eaae63a gc/fetch-negotiate-only-early-return later to maint).

 * The code path that verifies signatures made with ssh were made to
   work better on a system with CRLF line endings.
   (merge caeef01ea7 fs/ssh-signing-crlf later to maint).

 * "git sparse-checkout init" failed to write into $GIT_DIR/info
   directory when the repository was created without one, which has
   been corrected to auto-create it.
   (merge 7f44842ac1 jt/sparse-checkout-leading-dir-fix later to maint).

 * Cloning from a repository that does not yet have any branches or
   tags but has other refs resulted in a "remote transport reported
   error", which has been corrected.
   (merge dccea605b6 jt/clone-not-quite-empty later to maint).

 * Mark in various places in the code that the sparse index and the
   split index features are mutually incompatible.
   (merge 451b66c533 js/sparse-vs-split-index later to maint).

 * Update the logic to compute alignment requirement for our mem-pool.
   (merge e38bcc66d8 jc/mem-pool-alignment later to maint).

 * Pick a better random number generator and use it when we prepare
   temporary filenames.
   (merge 47efda967c bc/csprng-mktemps later to maint).

 * Update the contributor-facing documents on proposed log messages.
   (merge cdba0295b0 jc/doc-log-messages later to maint).

 * When "git fetch --prune" failed to prune the refs it wanted to
   prune, the command issued error messages but exited with exit
   status 0, which has been corrected.
   (merge c9e04d905e tg/fetch-prune-exit-code-fix later to maint).

 * Problems identified by Coverity in the reftable code have been
   corrected.
   (merge 01033de49f hn/reftable-coverity-fixes later to maint).

 * A bug that made multi-pack bitmap and the object order out-of-sync,
   making the .midx data corrupt, has been fixed.
   (merge f8b60cf99b tb/midx-bitmap-corruption-fix later to maint).

 * The build procedure has been taught to notice older version of zlib
   and enable our replacement uncompress2() automatically.
   (merge 07564773c2 ab/auto-detect-zlib-compress2 later to maint).

 * Interaction between fetch.negotiationAlgorithm and
   feature.experimental configuration variables has been corrected.
   (merge 714edc620c en/fetch-negotiation-default-fix later to maint).

 * "git diff --diff-filter=aR" is now parsed correctly.
   (merge 75408ca949 js/diff-filter-negation-fix later to maint).

 * When "git subtree" wants to create a merge, it used "git merge" and
   let it be affected by end-user's "merge.ff" configuration, which
   has been corrected.
   (merge 9158a3564a tk/subtree-merge-not-ff-only later to maint).

 * Unlike "git apply", "git patch-id" did not handle patches with
   hunks that has only 1 line in either preimage or postimage, which
   has been corrected.
   (merge 757e75c81e jz/patch-id-hunk-header-parsing-fix later to maint).

 * "receive-pack" checks if it will do any ref updates (various
   conditions could reject a push) before received objects are taken
   out of the temporary directory used for quarantine purposes, so
   that a push that is known-to-fail will not leave crufts that a
   future "gc" needs to clean up.
   (merge 5407764069 cb/clear-quarantine-early-on-all-ref-update-errors later to maint).

 * Because a deletion of ref would need to remove it from both the
   loose ref store and the packed ref store, a delete-ref operation
   that logically removes one ref may end up invoking ref-transaction
   hook twice, which has been corrected.
   (merge 2ed1b64ebd ps/avoid-unnecessary-hook-invocation-with-packed-refs later to maint).

 * When there is no object to write .bitmap file for, "git
   multi-pack-index" triggered an error, instead of just skipping,
   which has been corrected.
   (merge eb57277ba3 tb/midx-no-bitmap-for-no-objects later to maint).

 * "git cmd -h" outside a repository should error out cleanly for many
   commands, but instead it hit a BUG(), which has been corrected.
   (merge 87ad07d735 js/short-help-outside-repo-fix later to maint).

 * "working tree" and "per-worktree ref" were in glossary, but
   "worktree" itself wasn't, which has been corrected.
   (merge 2df5387ed0 jc/glossary-worktree later to maint).

 * L10n support for a few error messages.
   (merge 3d3c23b3a7 bs/forbid-i18n-of-protocol-token-in-fetch-pack later to maint).

 * Test modernization.
   (merge d4fe066e4b sy/t0001-use-path-is-helper later to maint).

 * "git log --graph --graph" used to leak a graph structure, and there
   was no way to countermand "--graph" that appear earlier on the
   command line.  A "--no-graph" option has been added and resource
   leakage has been plugged.

 * Error output given in response to an ambiguous object name has been
   improved.
   (merge 3a73c1dfaf ab/ambiguous-object-name later to maint).

 * "git sparse-checkout" wants to work with per-worktree configuration,
   but did not work well in a worktree attached to a bare repository.
   (merge 3ce1138272 ds/sparse-checkout-requires-per-worktree-config later to maint).

 * Setting core.untrackedCache to true failed to add the untracked
   cache extension to the index.

 * Workaround we have for versions of PCRE2 before their version 10.36
   were in effect only for their versions newer than 10.36 by mistake,
   which has been corrected.
   (merge 97169fc361 rs/pcre-invalid-utf8-fix-fix later to maint).

 * Document Taylor as a new member of Git PLC at SFC.  Welcome.
   (merge e8d56ca863 tb/coc-plc-update later to maint).

 * "git checkout -b branch/with/multi/level/name && git stash" only
   recorded the last level component of the branch name, which has
   been corrected.

 * "git fetch" can make two separate fetches, but ref updates coming
   from them were in two separate ref transactions under "--atomic",
   which has been corrected.

 * Check the return value from parse_tree_indirect() to turn segfaults
   into calls to die().
   (merge 8d2eaf649a gc/parse-tree-indirect-errors later to maint).

 * Newer version of GPGSM changed its output in a backward
   incompatible way to break our code that parses its output.  It also
   added more processes our tests need to kill when cleaning up.
   Adjustments have been made to accommodate these changes.
   (merge b0b70d54c4 fs/gpgsm-update later to maint).

 * The untracked cache newly computed weren't written back to the
   on-disk index file when there is no other change to the index,
   which has been corrected.

 * "git config -h" did not describe the "--type" option correctly.
   (merge 5445124fad mf/fix-type-in-config-h later to maint).

 * The way generation number v2 in the commit-graph files are
   (not) handled has been corrected.
   (merge 6dbf4b8172 ds/commit-graph-gen-v2-fixes later to maint).

 * The method to trigger malloc check used in our tests no longer work
   with newer versions of glibc.
   (merge baedc59543 ep/test-malloc-check-with-glibc-2.34 later to maint).

 * When "git fetch --recurse-submodules" grabbed submodule commits
   that would be needed to recursively check out newly fetched commits
   in the superproject, it only paid attention to submodules that are
   in the current checkout of the superproject.  We now do so for all
   submodules that have been run "git submodule init" on.

 * "git rebase $base $non_branch_commit", when $base is an ancestor or
   the $non_branch_commit, modified the current branch, which has been
   corrected.

 * When "shallow" information is updated, we forgot to update the
   in-core equivalent, which has been corrected.

 * When creating a loose object file, we didn't report the exact
   filename of the file we failed to fsync, even though the
   information was readily available, which has been corrected.

 * "git am" can read from the standard input when no mailbox is given
   on the command line, but the end-user gets no indication when it
   happens, making Git appear stuck.
   (merge 7b20af6a06 jc/mailsplit-warn-on-tty later to maint).

 * "git mv" failed to refresh the cached stat information for the
   entry it moved.
   (merge b7f9130a06 vd/mv-refresh-stat later to maint).

 * Other code cleanup, docfix, build fix, etc.
   (merge cfc5cf428b jc/find-header later to maint).
   (merge 40e7cfdd46 jh/p4-fix-use-of-process-error-exception later to maint).
   (merge 727e6ea350 jh/p4-spawning-external-commands-cleanup later to maint).
   (merge 0a6adc26e2 rs/grep-expr-cleanup later to maint).
   (merge 4ed7dfa713 po/readme-mention-contributor-hints later to maint).
   (merge 6046f7a91c en/plug-leaks-in-merge later to maint).
   (merge 8c591dbfce bc/clarify-eol-attr later to maint).
   (merge 518e15db74 rs/parse-options-lithelp-help later to maint).
   (merge cbac0076ef gh/doc-typos later to maint).
   (merge ce14de03db ab/no-errno-from-resolve-ref-unsafe later to maint).
   (merge 2826ffad8c rc/negotiate-only-typofix later to maint).
   (merge 0f03f04c5c en/sparse-checkout-leakfix later to maint).
   (merge 74f3390dde sy/diff-usage-typofix later to maint).
   (merge 45d0212a71 ll/doc-mktree-typofix later to maint).
   (merge e9b272e4c1 js/no-more-legacy-stash later to maint).
   (merge 6798b08e84 ab/do-not-hide-failures-in-git-dot-pm later to maint).
   (merge 9325285df4 po/doc-check-ignore-markup-fix later to maint).
   (merge cd26cd6c7c sy/modernize-t-lib-read-tree-m-3way later to maint).
   (merge d17294a05e ab/hash-object-leakfix later to maint).
   (merge b8403129d3 jd/t0015-modernize later to maint).
   (merge 332acc248d ds/mailmap later to maint).
   (merge 04bf052eef ab/grep-patterntype later to maint).
   (merge 6ee36364eb ab/diff-free-more later to maint).
   (merge 63a36017fe nj/read-tree-doc-reffix later to maint).
   (merge eed36fce38 sm/no-git-in-upstream-of-pipe-in-tests later to maint).
   (merge c614beb933 ep/t6423-modernize later to maint).
   (merge 57be9c6dee ab/reflog-prep-fix later to maint).
   (merge 5327d8982a js/in-place-reverse-in-sequencer later to maint).
   (merge 2e2c0be51e dp/worktree-repair-in-usage later to maint).
   (merge 6563706568 jc/coding-guidelines-decl-in-for-loop later to maint).

----------------------------------------------------------------

Changes since v2.35.0 are as follows:

Abhradeep Chakraborty (2):
      amend remaining usage strings according to style guide
      partial-clone: add a partial-clone test case

Alex Henrie (3):
      log: fix memory leak if --graph is passed multiple times
      log: add a --no-graph option
      switch: mention the --detach option when dying due to lack of a branch

Atharva Raykar (5):
      submodule--helper: get remote names from any repository
      submodule--helper: refactor get_submodule_displaypath()
      submodule--helper: allow setting superprefix for init_submodule()
      submodule--helper: run update using child process struct
      submodule: move core cmd_update() logic to C

Bagas Sanjaya (1):
      fetch-pack: parameterize message containing 'ready' keyword

COGONI Guillaume (3):
      t/t3903-stash.sh: replace test [-d|-f] with test_path_is_*
      tests: allow testing if a path is truly a file or a directory
      tests: make the code more readable

Chen Bojun (1):
      receive-pack: purge temporary data if no command is ready to run

David Cantrell (1):
      completion: tab completion of filenames for 'git restore'

Derrick Stolee (45):
      Documentation: add extensions.worktreeConfig details
      worktree: create init_worktree_config()
      config: add repo_config_set_worktree_gently()
      sparse-checkout: set worktree-config correctly
      worktree: copy sparse-checkout patterns and config on add
      config: make git_configset_get_string_tmp() private
      mailmap: change primary address for Derrick Stolee
      dir: force untracked cache with core.untrackedCache
      worktree: combine two translatable messages
      worktree: extract copy_filtered_worktree_config()
      worktree: extract copy_sparse_checkout()
      worktree: extract checkout_worktree()
      worktree: use 'worktree' over 'working tree'
      worktree: use 'worktree' over 'working tree'
      worktree: use 'worktree' over 'working tree'
      worktree: use 'worktree' over 'working tree'
      worktree: use 'worktree' over 'working tree'
      worktree: use 'worktree' over 'working tree'
      worktree: use 'worktree' over 'working tree'
      test-read-graph: include extra post-parse info
      t5318: extract helpers to lib-commit-graph.sh
      commit-graph: fix ordering bug in generation numbers
      commit-graph: start parsing generation v2 (again)
      commit-graph: fix generation number v2 overflow values
      commit-graph: declare bankruptcy on GDAT chunks
      index-pack: document and test the --promisor option
      list-objects-filter-options: create copy helper
      revision: put object filter into struct rev_info
      pack-objects: use rev.filter when possible
      pack-bitmap: drop filter in prepare_bitmap_walk()
      list-objects: consolidate traverse_commit_list[_filtered]
      MyFirstObjectWalk: update recommended usage
      bundle: parse filter capability
      rev-list: move --filter parsing into revision.c
      bundle: create filtered bundles
      bundle: unbundle promisor packs
      clone: fail gracefully when cloning filtered bundle
      maintenance: fix synopsis in documentation
      list-objects-filter: remove CL_ARG__FILTER
      pack-objects: move revs out of get_object_list()
      pack-objects: parse --filter directly into revs.filter
      bundle: move capabilities to end of 'verify'
      bundle: output hash information in 'verify'
      t7700: check post-condition in kept-pack test
      test-lib-functions: remove test_subcommand_inexact

Des Preston (1):
      worktree: include repair cmd in usage

Elia Pinto (8):
      test-lib.sh: Use GLIBC_TUNABLES instead of MALLOC_CHECK_ on glibc >= 2.34
      t6423-merge-rename-directories.sh: use the $(...) construct
      attr.c: delete duplicate include
      builtin/gc.c: delete duplicate include
      builtin/sparse-checkout.c: delete duplicate include
      builtin/stash.c: delete duplicate include
      t/helper/test-run-command.c: delete duplicate include
      attr.h: remove duplicate struct definition

Elijah Newren (33):
      t1011: add testcase demonstrating accidental loss of user modifications
      unpack-trees: fix accidental loss of user changes
      repo_read_index: clear SKIP_WORKTREE bit from files present in worktree
      Update documentation related to sparsity and the skip-worktree bit
      Accelerate clear_skip_worktree_from_present_files() by caching
      merge-ort: avoid assuming all renames detected
      merge-ort: fix memory leak in merge_ort_internal()
      merge: fix memory leaks in cmd_merge()
      sequencer, stash: fix running from worktree subdir
      sparse-checkout: fix a couple minor memory leaks
      repo-settings: fix checking for fetch.negotiationAlgorithm=default
      repo-settings: fix error handling for unknown values
      repo-settings: rename the traditional default fetch.negotiationAlgorithm
      show, log: provide a --remerge-diff capability
      log: clean unneeded objects during `log --remerge-diff`
      ll-merge: make callers responsible for showing warnings
      merge-ort: capture and print ll-merge warnings in our preferred fashion
      merge-ort: mark a few more conflict messages as omittable
      merge-ort: format messages slightly different for use in headers
      diff: add ability to insert additional headers for paths
      show, log: include conflict/warning messages in --remerge-diff headers
      merge-ort: mark conflict/warning messages from inner merges as omittable
      diff-merges: avoid history simplifications when diffing merges
      merge-ort: make informational messages from recursive merges clearer
      sparse-checkout: correct reapply's handling of options
      sparse-checkout: correctly set non-cone mode when expected
      sparse-checkout: pay attention to prefix for {set, add}
      sparse-checkout: error or warn when given individual files
      sparse-checkout: reject arguments in cone-mode that look like patterns
      merge-ort: fix small memory leak in detect_and_process_renames()
      merge-ort: fix small memory leak in unique_path()
      merge-ort: exclude messages from inner merges by default
      repo_read_index: add config to expect files outside sparse patterns

Emily Shaffer (14):
      hook: add 'run' subcommand
      gc: use hook library for pre-auto-gc hook
      am: convert {pre,post}-applypatch to use hook.h
      rebase: convert pre-rebase to use hook.h
      am: convert applypatch-msg to use hook.h
      merge: convert post-merge to use hook.h
      hooks: convert non-worktree 'post-checkout' hook to hook library
      hooks: convert worktree 'post-checkout' hook to hook library
      send-email: use 'git hook run' for 'sendemail-validate'
      git-p4: use 'git hook' to run hooks
      commit: convert {pre-commit,prepare-commit-msg} hook to hook.h
      read-cache: convert post-index-change to use hook.h
      receive-pack: convert push-to-checkout hook to hook.h
      run-command: remove old run_hook_{le,ve}() hook API

Fabian Stelzer (2):
      gpg-interface: trim CR from ssh-keygen
      gpg-interface/gpgsm: fix for v2.3

Glen Choo (39):
      fetch: use goto cleanup in cmd_fetch()
      fetch: skip tasks related to fetching objects
      fetch --negotiate-only: do not update submodules
      branch: move --set-upstream-to behavior to dwim_and_setup_tracking()
      branch: make create_branch() always create a branch
      branch: add a dry_run parameter to create_branch()
      builtin/branch: consolidate action-picking logic in cmd_branch()
      branch: add --recurse-submodules option for branch creation
      branch.c: use 'goto cleanup' in setup_tracking() to fix memory leaks
      stash: strip "refs/heads/" with skip_prefix
      checkout, clone: die if tree cannot be parsed
      submodule--helper: remove update-module-mode
      submodule--helper: reorganize code for sh to C conversion
      submodule--helper run-update-procedure: remove --suboid
      submodule--helper run-update-procedure: learn --remote
      submodule--helper update-clone: learn --init
      submodule--helper: remove ensure-core-worktree
      submodule update: add tests for --filter
      submodule--helper update-clone: check for --filter and --init
      t5526: introduce test helper to assert on fetches
      t5526: stop asserting on stderr literally
      t5526: create superproject commits with test helper
      submodule: make static functions read submodules from commits
      submodule: inline submodule_commits() into caller
      submodule: store new submodule commits oid_array in a struct
      submodule: extract get_fetch_task()
      submodule: move logic into fetch_task_create()
      submodule update: use die_message()
      submodule--helper: teach update_data more options
      submodule--helper: reduce logic in run_update_procedure()
      submodule--helper: remove forward declaration
      fetch: fetch unpopulated, changed submodules
      submodule: fix latent check_has_commit() bug
      branch: support more tracking modes when recursing
      branch: give submodule updating advice before exit
      branch --set-upstream-to: be consistent when advising
      branch: remove negative exit code
      branch: rework comments for future developers
      branch.c: simplify advice-and-die sequence

Greg Hurrell (2):
      Documentation/config/pgp.txt: replace stray <TAB> character with <SPC>
      Documentation/config/pgp.txt: add missing apostrophe

Han-Wen Nienhuys (27):
      reftable: fix OOB stack write in print functions
      reftable: fix resource leak in block.c error path
      reftable: fix resource leak blocksource.c
      reftable: check reftable_stack_auto_compact() return value
      reftable: ignore remove() return value in stack_test.c
      reftable: fix resource warning
      reftable: all xxx_free() functions accept NULL arguments
      reftable: order unittests by complexity
      reftable: drop stray printf in readwrite_test
      reftable: handle null refnames in reftable_ref_record_equal
      reftable: make reftable-record.h function signatures const correct
      reftable: implement record equality generically
      reftable: remove outdated file reftable.c
      reftable: make reftable_record a tagged union
      reftable: add print functions to the record types
      t1405: explictly delete reflogs for reftable
      t1405: mark test that checks existence as REFFILES
      t5312: prepare for reftable
      t1410: use test-tool ref-store to inspect reflogs
      t1410: mark bufsize boundary test as REFFILES
      Documentation: object_id_len goes up to 31
      reftable: reject 0 object_id_len
      reftable: add a test that verifies that writing empty keys fails
      reftable: avoid writing empty keys at the block layer
      reftable: ensure that obj_id_len is >= 2 on writing
      reftable: add test for length of disambiguating prefix
      reftable: rename writer_stats to reftable_writer_stats

Jacob Keller (1):
      name-rev: use generation numbers if available

Jason Yundt (2):
      comment: fix typo
      gitweb: remove invalid http-equiv="content-type"

Jayati Shrivastava (1):
      sequencer: use reverse_commit_list() helper

Jaydeep Das (1):
      t/t0015-hash.sh: remove unnecessary '\' at line end

Jaydeep P Das (1):
      userdiff: add builtin diff driver for kotlin language.

Jean-Noël Avila (4):
      i18n: factorize more 'incompatible options' messages
      i18n: factorize "invalid value" messages
      i18n: remove from i18n strings that do not hold translatable parts
      i18n: fix some misformated placeholders in command synopsis

Jeff Hostetler (30):
      fsmonitor: enhance existing comments, clarify trivial response handling
      fsmonitor-ipc: create client routines for git-fsmonitor--daemon
      fsmonitor: config settings are repository-specific
      fsmonitor: use IPC to query the builtin FSMonitor daemon
      fsmonitor: document builtin fsmonitor
      fsmonitor--daemon: add a built-in fsmonitor daemon
      fsmonitor--daemon: implement 'stop' and 'status' commands
      compat/fsmonitor/fsm-listen-win32: stub in backend for Windows
      compat/fsmonitor/fsm-listen-darwin: stub in backend for Darwin
      fsmonitor--daemon: implement 'run' command
      fsmonitor--daemon: implement 'start' command
      fsmonitor--daemon: add pathname classification
      fsmonitor--daemon: define token-ids
      fsmonitor--daemon: create token-based changed path cache
      compat/fsmonitor/fsm-listen-win32: implement FSMonitor backend on Windows
      compat/fsmonitor/fsm-listen-darwin: add MacOS header files for FSEvent
      compat/fsmonitor/fsm-listen-darwin: implement FSEvent listener on MacOS
      fsmonitor--daemon: implement handle_client callback
      help: include fsmonitor--daemon feature flag in version info
      t/helper/fsmonitor-client: create IPC client to talk to FSMonitor Daemon
      t7527: create test for fsmonitor--daemon
      t/perf: avoid copying builtin fsmonitor files into test repo
      t/helper/test-chmtime: skip directories on Windows
      t/perf/p7519: fix coding style
      t/perf/p7519: speed up test on Windows
      t/perf/p7519: add fsmonitor--daemon test cases
      fsmonitor--daemon: periodically truncate list of modified files
      fsmonitor--daemon: use a cookie file to sync with file system
      fsmonitor: force update index after large responses
      t7527: test status with untracked-cache and fsmonitor--daemon

Jerry Zhang (3):
      git-rev-list: add --exclude-first-parent-only flag
      patch-id: fix antipatterns in tests
      patch-id: fix scan_hunk_header on diffs with 1 line of before/after

Jessica Clarke (1):
      mem-pool: don't assume uintmax_t is aligned enough for all types

Joel Holdsworth (4):
      git-p4: don't select shell mode using the type of the command argument
      git-p4: pass command arguments as lists instead of using shell
      git-p4: don't print shell commands as python lists
      git-p4: fix instantiation of CalledProcessError

Johannes Schindelin (14):
      sparse-index: sparse index is disallowed when split index is active
      t1091: disable split index
      split-index: it really is incompatible with the sparse index
      git-sh-setup: remove remnant bits referring to `git-legacy-stash`
      add: remove support for `git-legacy-stash`
      stash: remove documentation for `stash.useBuiltin`
      stash: stop warning about the obsolete `stash.useBuiltin` config setting
      docs(diff): lose incorrect claim about `diff-files --diff-filter=A`
      diff.c: move the diff filter bits definitions up a bit
      diff-filter: be more careful when looking for negative bits
      scalar: accept -C and -c options before the subcommand
      checkout/fetch/pull/pack-objects: allow `-h` outside a repository
      t0012: verify that built-ins handle `-h` even without gitdir
      cocci: allow padding with `strbuf_addf()`

John Cai (15):
      receive-pack.c: consolidate find header logic
      name-rev: deprecate --stdin in favor of --annotate-stdin
      name-rev.c: use strbuf_getline instead of limited size buffer
      builtin/reflog.c: use parse-options api for expire, delete subcommands
      name-rev: replace --stdin with --annotate-stdin in synopsis
      cat-file: rename cmdmode to transform_mode
      cat-file: introduce batch_mode enum to replace print_contents
      cat-file: add remove_timestamp helper
      cat-file: add --batch-command mode
      stash: add tests to ensure reflog --rewrite --updatref behavior
      reflog: libify delete reflog function and helpers
      stash: call reflog_delete() in reflog.c
      cat-file: skip expanding default format
      rebase: use test_commit helper in setup
      rebase: set REF_HEAD_DETACH in checkout_up_to_date()

Jonathan Tan (6):
      config: make git_config_include() static
      config: include file if remote URL matches a glob
      sparse-checkout: create leading directory
      clone: support unusual remote ref configurations
      ls-files: support --recurse-submodules --stage
      shallow: reset commit grafts when shallow is reset

Josh Steadmon (2):
      test-lib: unset trace2 parent envvars
      clone, submodule: pass partial clone filters to submodules

Junio C Hamano (31):
      compat/qsort_s.c: avoid using potentially unaligned access
      fetch: help translators by reusing the same message template
      Start post 2.35 cycle
      SubmittingPatches: write problem statement in the log in the present tense
      CodingGuidelines: hint why we value clearly written log messages
      SubmittingPatches: explain why we care about log messages
      Git 2.35.1
      Name the next one 2.36 to prepare for 2.35.1
      The first batch
      The second batch for 2.36
      glossary: describe "worktree"
      The third batch
      The fourth batch
      The fifth batch
      The sixth batch
      The seventh batch
      The eighth batch
      rerere-train: two fixes to the use of "git show -s"
      am/apply: warn if we end up reading patches from terminal
      The ninth batch
      The tenth batch
      The eleventh batch
      The twelfth batch
      The thirteenth batch
      The 14th batch
      reset: show --no-refresh in the short-help
      The 15th batch
      The 16th batch
      The 17th batch
      CodingGuidelines: give deadline for "for (int i = 0; ..."
      Git 2.36-rc0

Justin Donnelly (4):
      git-prompt: rename `upstream` to `upstream_type`
      git-prompt: make upstream state indicator location consistent
      git-prompt: make long upstream state indicator consistent
      git-prompt: put upstream comments together

Lessley Dennington (3):
      completion: address sparse-checkout issues
      completion: improve sparse-checkout cone mode directory completion
      completion: handle unusual characters for sparse-checkout

Liginity Lee (1):
      fix typo in git-mktree.txt

Marc Strapetz (4):
      test-lib: introduce API for verifying file mtime
      t7508: fix bogus mtime verification
      t7508: add tests capturing racy timestamp handling
      update-index: refresh should rewrite index in case of racy timestamps

Matheus Felipe (1):
      config: correct "--type" option in "git config -h" output

Matt Cooper (1):
      index-pack: clarify the breached limit

Michael J Gruber (2):
      test-lib: declare local variables as local
      tests: demonstrate "show --word-diff --color-moved" regression

Neeraj Singh (10):
      wrapper: make inclusion of Windows csprng header tightly scoped
      core.fsyncmethod: add writeout-only mode
      core.fsync: introduce granular fsync control infrastructure
      core.fsync: add configuration parsing
      core.fsync: new option to harden the index
      core.fsync: documentation and user-friendly aggregate options
      core.fsync: fix incorrect expression for default configuration
      trace2: add stats for fsync operations
      core.fsyncmethod: correctly camel-case warning message
      object-file: pass filename to fsync_or_die

Nihal Jere (1):
      Documentation: git-read-tree: separate links using commas

Patrick Steinhardt (24):
      refs: extract packed_refs_delete_refs() to allow control of transaction
      refs: allow passing flags when beginning transactions
      refs: allow skipping the reference-transaction hook
      refs: demonstrate excessive execution of the reference-transaction hook
      refs: do not execute reference-transaction hook on packing refs
      refs: skip hooks when deleting uncovered packed refs
      fetch-pack: use commit-graph when computing cutoff
      fetch: skip computing output width when not printing anything
      fetch: increase test coverage of fetches
      fetch: backfill tags before setting upstream
      fetch: control lifecycle of FETCH_HEAD in a single place
      fetch: report errors when backfilling tags fails
      refs: add interface to iterate over queued transactional updates
      fetch: make `--atomic` flag cover backfilling of tags
      fetch: make `--atomic` flag cover pruning of refs
      upload-pack: look up "want" lines via commit-graph
      fetch: avoid lookup of commits when not appending to FETCH_HEAD
      refs: add ability for backends to special-case reading of symbolic refs
      remote: read symbolic refs via `refs_read_symbolic_ref()`
      refs/files-backend: optimize reading of symbolic refs
      t5503: simplify setup of test which exercises failure of backfill
      repack: refactor to avoid double-negation of update-server-info
      repack: add config to skip updating server info
      core.fsync: new option to harden references

Philip Oakley (2):
      README.md: add CodingGuidelines and a link for Translators
      doc: check-ignore: code-quote an exclamation mark

Philippe Blain (1):
      pull --rebase: honor rebase.autostash when fast-forwarding

Phillip Wood (29):
      t3701: clean up hunk splitting tests
      builtin add -p: fix hunk splitting
      rebase: factor out checkout for up to date branch
      t5403: refactor rebase post-checkout hook tests
      rebase: pass correct arguments to post-checkout hook
      rebase: do not remove untracked files on checkout
      rebase --apply: don't run post-checkout hook if there is an error
      reset_head(): remove action parameter
      reset_head(): factor out ref updates
      reset_head(): make default_reflog_action optional
      create_autostash(): remove unneeded parameter
      rebase: cleanup reset_head() calls
      reset_head(): take struct rebase_head_opts
      rebase --apply: fix reflog
      rebase --apply: set ORIG_HEAD correctly
      rebase -m: don't fork git checkout
      xdiff: fix a memory leak
      xdiff: handle allocation failure in patience diff
      xdiff: refactor a function
      xdiff: handle allocation failure when merging
      terminal: always reset terminal when reading without echo
      terminal: pop signal handler when terminal is restored
      terminal: set VMIN and VTIME in non-canonical mode
      add -p: disable stdin buffering when interactive.singlekey is set
      terminal: use flags for save_term()
      terminal: don't assume stdin is /dev/tty
      terminal: work around macos poll() bug
      terminal: restore settings on SIGTSTP
      worktree: add -z option for list subcommand

René Scharfe (10):
      grep: use grep_or_expr() in compile_pattern_or()
      grep: use grep_not_expr() in compile_pattern_not()
      apply: use strsets to track symlinks
      stable-qsort: avoid using potentially unaligned access
      bisect--helper: report actual bisect_state() argument on error
      bisect--helper: release strbuf and strvec on run error
      bisect: document run behavior with exit codes 126 and 127
      bisect--helper: double-check run command on exit code 126 and 127
      parse-options: document bracketing of argh
      grep: fix triggering PCRE2_NO_START_OPTIMIZE workaround

Robert Coup (8):
      fetch: fix negotiate-only error message
      fetch-negotiator: add specific noop initializer
      fetch-pack: add refetch
      builtin/fetch-pack: add --refetch option
      fetch: add --refetch option
      t5615-partial-clone: add test for fetch --refetch
      fetch: after refetch, encourage auto gc repacking
      docs: mention --refetch fetch option

SZEDER Gábor (1):
      reflog: fix 'show' subcommand's argv

Shaoxuan Yuan (4):
      builtin/diff.c: fix "git-diff" usage string typo
      t/lib-read-tree-m-3way: modernize style
      t/lib-read-tree-m-3way: indent with tabs
      t0001: replace "test [-d|-f]" with test_path_is_* functions

Shubham Mishra (3):
      t0003: avoid pipes with Git on LHS
      t0001-t0028: avoid pipes with Git on LHS
      t0030-t0050: avoid pipes with Git on LHS

Tao Klerks (6):
      t7519: avoid file to index mtime race for untracked cache
      t7519: populate untracked cache before test
      untracked-cache: write index when populating empty untracked cache
      t/helper/test-chmtime: update mingw to support chmtime on directories
      t7063: mtime-mangling instead of delays in untracked cache testing
      tracking branches: add advice to ambiguous refspec error

Taylor Blau (15):
      grep: extract grep_binexp() from grep_or_expr()
      grep: use grep_and_expr() in compile_pattern_and()
      t5326: demonstrate bitmap corruption after permutation
      midx.c: make changing the preferred pack safe
      pack-revindex.c: instrument loading on-disk reverse index
      t5326: drop unnecessary setup
      t5326: extract `test_rev_exists`
      t5326: move tests to t/lib-bitmap.sh
      t/lib-bitmap.sh: parameterize tests over reverse index source
      midx: read `RIDX` chunk when present
      pack-bitmap.c: gracefully fallback after opening pack/MIDX
      midx: prevent writing a .bitmap without any objects
      CODE_OF_CONDUCT.md: update PLC members list
      builtin/remote.c: parse options in 'rename'
      builtin/remote.c: show progress when renaming remote references

Teng Long (6):
      git-cli.txt: clarify "options first and then args"
      ls-tree: rename "retval" to "recurse" in "show_tree()"
      ls-tree: simplify nesting if/else logic in "show_tree()"
      ls-tree: fix "--name-only" and "--long" combined use bug
      ls-tree: slightly refactor `show_tree()`
      ls-tree: support --object-only option for "git-ls-tree"

Thomas Gummerer (1):
      fetch --prune: exit with error if pruning fails

Thomas Koutcher (1):
      subtree: force merge commit

Todd Zullinger (2):
      t/lib-gpg: reload gpg components after updating trustlist
      t/lib-gpg: kill all gpg components, not just gpg-agent

Victoria Dye (29):
      reset: fix validation in sparse index test
      reset: reorder wildcard pathspec conditions
      clean: integrate with sparse index
      checkout-index: expand sparse checkout compatibility tests
      checkout-index: add --ignore-skip-worktree-bits option
      checkout-index: integrate with sparse index
      update-index: add tests for sparse-checkout compatibility
      update-index: integrate with sparse index
      update-index: reduce scope of index expansion in do_reupdate
      sparse-index: prevent repo root from becoming sparse
      status: fix nested sparse directory diff in sparse index
      read-tree: explicitly disallow prefixes with a leading '/'
      read-tree: expand sparse checkout test coverage
      read-tree: integrate with sparse index
      read-tree: narrow scope of index expansion for '--prefix'
      read-tree: make two-way merge sparse-aware
      read-tree: make three-way merge sparse-aware
      reset: revise index refresh advice
      reset: introduce --[no-]refresh option to --mixed
      reset: replace '--quiet' with '--no-refresh' in performance advice
      reset: suppress '--no-refresh' advice if logging is silenced
      stash: make internal resets quiet and refresh index
      t1092: add sparse directory before cone in test repo
      unpack-trees: increment cache_bottom for sparse directories
      Revert "unpack-trees: improve performance of next_cache_entry"
      reset: do not make '--quiet' disable index refresh
      reset: remove 'reset.quiet' config option
      reset: remove 'reset.refresh' config option
      mv: refresh stat info for moved entry

brian m. carlson (6):
      t0027: add tests for eol without text in .gitattributes
      docs: correct documentation about eol attribute
      wrapper: add a helper to generate numbers from a CSPRNG
      wrapper: use a CSPRNG to generate random file names
      doc: clarify interaction between 'eol' and text=auto
      block-sha1: remove use of obsolete x86 assembly

Ævar Arnfjörð Bjarmason (183):
      cat-file tests: test bad usage
      cat-file tests: test messaging on bad objects/paths
      parse-options API: add a usage_msg_optf()
      cat-file docs: fix SYNOPSIS and "-h" output
      cat-file: move "usage" variable to cmd_cat_file()
      cat-file: make --batch-all-objects a CMDMODE
      cat-file: fix remaining usage bugs
      cat-file: correct and improve usage information
      object-name.c: don't have GET_OID_ONLY_TO_DIE imply *_QUIETLY
      cat-file: use GET_OID_ONLY_TO_DIE in --(textconv|filters)
      hook API: add a run_hooks() wrapper
      hook API: add a run_hooks_l() wrapper
      git hook run: add an --ignore-missing flag
      cat-file: don't whitespace-pad "(...)" in SYNOPSIS and usage output
      cat-file: s/_/-/ in typo'd usage_msg_optf() message
      compat: auto-detect if zlib has uncompress2()
      sequencer: don't use die_errno() on refs_resolve_ref_unsafe() failure
      refs API: remove "failure_errno" from refs_resolve_ref_unsafe()
      object-name tests: add tests for ambiguous object blind spots
      object-name: explicitly handle OBJ_BAD in show_ambiguous_object()
      object-name: explicitly handle bad tags in show_ambiguous_object()
      object-name: make ambiguous object output translatable
      object-name: show date for ambiguous tag objects
      object-name: iterate ambiguous objects before showing header
      object-name: re-use "struct strbuf" in show_ambiguous_object()
      perl Git.pm: don't ignore signalled failure in _cmd_close()
      completion tests: re-source git-completion.bash in a subshell
      completion: add a GIT_COMPLETION_SHOW_ALL_COMMANDS
      leak tests: fix a memory leak in "test-progress" helper
      progress.c test helper: add missing braces
      progress.c tests: make start/stop commands on stdin
      progress.c tests: test some invalid usage
      progress.h: format and be consistent with progress.c naming
      progress.c: use dereferenced "progress" variable, not "(*p_progress)"
      progress.c: refactor stop_progress{,_msg}() to use helpers
      progress API: unify stop_progress{,_msg}(), fix trace2 bug
      pack-bitmap-write.c: don't return without stop_progress()
      t0051: use "skip_all" under !MINGW in single-test file
      hash-object: fix a trivial leak in --path
      ls-remote & transport API: release "struct transport_ls_refs_options"
      grep.h: remove unused "regex_t regexp" from grep_opt
      log tests: check if grep_config() is called by "log"-like cmds
      grep tests: create a helper function for "BRE" or "ERE"
      grep tests: add missing "grep.patternType" config tests
      built-ins: trust the "prefix" from run_builtin()
      grep.c: don't pass along NULL callback value
      grep API: call grep_config() after grep_init()
      grep.h: make "grep_opt.pattern_type_option" use its enum
      grep.c: do "if (bool && memchr())" not "if (memchr() && bool)"
      grep: simplify config parsing and option parsing
      cache.h: remove always unused show_date_human() declaration
      date API: create a date.h, split from cache.h
      date API: provide and use a DATE_MODE_INIT
      date API: add basic API docs
      date API: add and use a date_mode_release()
      diff.[ch]: have diff_free() call clear_pathspec(opts.pathspec)
      diff.[ch]: have diff_free() free options->parseopts
      hook tests: test for exact "pre-push" hook input
      hook tests: use a modern style for "pre-push" tests
      git-compat-util.h: clarify GCC v.s. C99-specific in comment
      C99: remove hardcoded-out !HAVE_VARIADIC_MACROS code
      help doc: add missing "]" to "[-a|--all]"
      help.c: use puts() instead of printf{,_ln}() for consistency
      help tests: test "git" and "git help [-a|-g] spacing
      help.c: split up list_all_cmds_help() function
      help: note the option name on option incompatibility
      help: correct usage & behavior of "git help --all"
      help: error if [-a|-g|-c] and [-i|-m|-w] are combined
      help: add --no-[external-commands|aliases] for use with --all
      help: don't print "\n" before single-section output
      imap-send.c: use designated initializers for "struct imap_server_conf"
      trace2: use designated initializers for "struct tr2_tgt"
      trace2: use designated initializers for "struct tr2_dst"
      object-file: use designated initializers for "struct git_hash_algo"
      archive-*.c: use designated initializers for "struct archiver"
      userdiff.c: use designated initializers for "struct userdiff_driver"
      convert.c: use designated initializers for "struct stream_filter*"
      refspec.c: use designated initializers for "struct refspec_item"
      fast-import.c: use designated initializers for "partial" struct assignments
      object-file.c: split up declaration of unrelated variables
      object-file API: return "void", not "int" from hash_object_file()
      object-file API: add a format_object_header() function
      object-file API: have write_object_file() take "enum object_type"
      object API: correct "buf" v.s. "map" mismatch in *.c and *.h
      object API docs: move check_object_signature() docs to cache.h
      object API users + docs: check <0, not !0 with check_object_signature()
      object-file API: split up and simplify check_object_signature()
      object API: rename hash_object_file_literally() to write_*()
      object-file API: have hash_object_file() take "enum object_type"
      object-file.c: add a literal version of write_object_file_prepare()
      object-file API: pass an enum to read_object_with_reference()
      test-lib: add GIT_SAN_OPTIONS, inherit [AL]SAN_OPTIONS
      test-lib: correct and assert TEST_DIRECTORY overriding
      test-lib: make $GIT_BUILD_DIR an absolute path
      test-lib: add "fast_unwind_on_malloc=0" to LSAN_OPTIONS
      scalar Makefile: use "The default target of..." pattern
      Makefiles: add "shared.mak", move ".DELETE_ON_ERROR" to it
      Makefile: disable GNU make built-in wildcard rules
      Makefile: define $(LIB_H) in terms of $(FIND_SOURCE_FILES)
      Makefile: move ".SUFFIXES" rule to shared.mak
      Makefile: move $(comma), $(empty) and $(space) to shared.mak
      Makefile: add "$(QUIET)" boilerplate to shared.mak
      Makefiles: add and use wildcard "mkdir -p" template
      log tests: fix "abort tests early" regression in ff37a60c369
      index-pack: fix memory leaks
      merge-base: free() allocated "struct commit **" list
      diff.c: free "buf" in diff_words_flush()
      urlmatch.c: add and use a *_release() function
      remote-curl.c: free memory in cmd_main()
      bundle: call strvec_clear() on allocated strvec
      transport: stop needlessly copying bundle header references
      submodule--helper: fix trivial leak in module_add()
      commit-graph: fix memory leak in misused string_list API
      commit-graph: stop fill_oids_from_packs() progress on error and free()
      lockfile API users: simplify and don't leak "path"
      range-diff: plug memory leak in common invocation
      range-diff: plug memory leak in read_patches()
      repository.c: free the "path cache" in repo_clear()
      submodule tests: test for init and update failure output
      submodule--helper: don't use bitfield indirection for parse_options()
      gettext API users: don't explicitly cast ngettext()'s "n"
      string-list API: change "nr" and "alloc" to "size_t"
      merge: don't run post-hook logic on --no-verify
      hooks: fix an obscure TOCTOU "did we just run a hook?" race
      tests: change some 'test $(git) = "x"' to test_cmp
      tests: use "test_stdout_line_count", not "test $(git [...] | wc -l)"
      read-tree tests: check "diff-files" exit code on failure
      diff tests: don't ignore "git diff" exit code
      diff tests: don't ignore "git diff" exit code in "read" loop
      apply tests: use "test_must_fail" instead of ad-hoc pattern
      merge tests: use "test_must_fail" instead of ad-hoc pattern
      rev-parse tests: don't ignore "git reflog" exit code
      notes tests: don't ignore "git" exit code
      diff tests: don't ignore "git rev-list" exit code
      rev-list tests: don't hide abort() in "test_expect_failure"
      gettext tests: don't ignore "test-tool regex" exit code
      apply tests: don't ignore "git ls-files" exit code, drop sub-shell
      checkout tests: don't ignore "git <cmd>" exit code
      rev-list simplify tests: don't ignore "git" exit code
      list-objects: handle NULL function pointers
      reflog: don't be noisy on empty reflogs
      builtin/submodule--helper.c: rename option struct to "opt"
      test-lib-functions: add and use a "test_hook" wrapper
      hook tests: turn exit code assertions into a loop
      http tests: don't rely on "hook/post-update.sample"
      tests: assume the hooks are disabled by default
      bugreport tests: tighten up "git bugreport -s hooks" test
      fetch+push tests: use "test_hook" and "test_when_finished" pattern
      gc + p4 tests: use "test_hook", remove sub-shells
      tests: change "cat && chmod +x" to use "test_hook"
      tests: change "mkdir -p && write_script" to use "test_hook"
      tests: use "test_hook" for misc "mkdir -p" and "chmod" cases
      diff.c: fix a double-free regression in a18d66cefb
      refs: use designated initializers for "struct ref_storage_be"
      refs: use designated initializers for "struct ref_iterator_vtable"
      misc *.c: use designated initializers for struct assignments
      packed-backend: remove stub BUG(...) functions
      refs debug: add a wrapper for "read_symbolic_ref"
      tests: extend "test_hook" for "rm" and "chmod -x", convert "$HOOK"
      proc-receive hook tests: use "test_hook" instead of "write_script"
      http tests: use "test_hook" for "smart" and "dumb" http tests
      reflog.c: indent argument lists
      reflog: refactor cmd_reflog() to "if" branches
      reflog tests: add missing "git reflog exists" tests
      reflog: move "usage" variables and use macros
      git reflog [expire|delete]: make -h output consistent with SYNOPSIS
      reflog exists: use parse_options() API
      Makefile: use ' ', not non-existing $(wspfx_SQ)
      ls-tree tests: add tests for --name-status
      ls-tree: remove commented-out code
      ls-tree: add missing braces to "else" arms
      ls-tree: use "enum object_type", not {blob,tree,commit}_type
      ls-tree: use "size_t", not "int" for "struct strbuf"'s "len"
      ls-tree: introduce struct "show_tree_data"
      ls-tree: introduce "--format" option
      ls-tree: detect and error on --name-only --name-status
      ls-tree: split up "fast path" callbacks
      hooks: fix "invoked hook" regression in a8cc5943338
      reflog: convert to parse_options() API
      reflog [show]: display sensible -h output
      test-lib: have --immediate emit valid TAP on failure
      pack-objects: lazily set up "struct rev_info", don't leak
      reftable: make assignments portable to AIX xlc v12.01


^ permalink raw reply	[relevance 3%]

* Re: [PATCH 2/7] rebase --merge: fix reflog when continuing
  2022-02-21 11:10  1% ` [PATCH 2/7] rebase --merge: fix reflog when continuing Phillip Wood via GitGitGadget
@ 2022-04-07 13:49  2%   ` Christian Couder
  2022-04-15 14:00  2%     ` Phillip Wood
  0 siblings, 1 reply; 200+ results
From: Christian Couder @ 2022-04-07 13:49 UTC (permalink / raw)
  To: Phillip Wood via GitGitGadget; +Cc: git, Phillip Wood

On Tue, Feb 22, 2022 at 6:12 AM Phillip Wood via GitGitGadget
<gitgitgadget@gmail.com> wrote:
>
> From: Phillip Wood <phillip.wood@dunelm.org.uk>
>
> The reflog message for a conflict resolution committed by "rebase
> --continue" looks like
>
>         rebase (continue): commit subject line
>
> Unfortunately the reflog message each subsequent pick look like
>
>         rebase (continue) (pick): commit subject line
>
> Fix this by setting the reflog message for "rebase --continue" in
> sequencer_continue() so it does not affect subsequent commits. This
> introduces a memory leak similar to the one leaking GIT_REFLOG_ACTION
> in pick_commits(). Both of these will be fixed in a future series that
> stops the sequencer calling setenv().

Yeah, it looks like we will leak only a small string.

> Signed-off-by: Phillip Wood <phillip.wood@dunelm.org.uk>
> ---
>  builtin/rebase.c          |   2 -
>  sequencer.c               |   5 ++
>  t/t3406-rebase-message.sh | 120 +++++++++++++++++++++++++-------------

The changes to the test script look a bit involved and aren't
explained in the commit message. I wonder if some of those changes
could have been made in a preparatory commit.


>  3 files changed, 86 insertions(+), 41 deletions(-)

^ permalink raw reply	[relevance 2%]

* [ANNOUNCE] Git v2.36.0-rc1
@ 2022-04-08 23:30  3% Junio C Hamano
  0 siblings, 0 replies; 200+ results
From: Junio C Hamano @ 2022-04-08 23:30 UTC (permalink / raw)
  To: git; +Cc: git-packagers

A release candidate Git v2.36.0-rc1 is now available for testing at
the usual places.  It is comprised of 673 non-merge commits since
v2.35.0, contributed by 85 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.36.0-rc1' tag and the 'master' branch that the tag points at:

  url = https://git.kernel.org/pub/scm/git/git
  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.35.0 are as follows.
Welcome to the Git development community!

  Abhradeep Chakraborty, BRESSAT Jonathan, Chen Bojun,
  COGONI Guillaume, David Cantrell, Des Preston, Hongyi Zhao,
  Jason Yundt, Jayati Shrivastava, Jaydeep Das, Jaydeep P Das,
  Jose Lopes, Justin Donnelly, Kraymer, Liginity Lee, Matheus
  Felipe, Maximilian Reichel, Michael McClimon, Nihal Jere,
  Pedro Martelletto, Robert Coup, Sean Allred, Shaoxuan Yuan,
  Shubham Mishra, and Waleed Khan.

Returning contributors who helped this release are as follows.
Thanks for your continued support.

  Adam Dinwoodie, Ævar Arnfjörð Bjarmason, Alex Henrie,
  Atharva Raykar, Bagas Sanjaya, Beat Bolli, brian m. carlson,
  Carlo Marcelo Arenas Belón, Christian Couder, Daniel Hahler,
  Derrick Stolee, Elia Pinto, Elijah Newren, Emily Shaffer,
  Eric Sunshine, Fabian Stelzer, Fangyi Zhou, Glen Choo, Greg
  Hurrell, Han-Wen Nienhuys, Jacob Keller, Jean-Noël Avila, Jeff
  Hostetler, Jeff King, Jerry Zhang, Jessica Clarke, Jiang Xin,
  Joel Holdsworth, Johannes Altmanninger, Johannes Schindelin,
  Johannes Sixt, John Cai, Jonathan Nieder, Jonathan Tan, Josh
  Steadmon, Junio C Hamano, Kevin Willford, Lessley Dennington,
  Marc Strapetz, Martin Ågren, Matt Cooper, Michael J Gruber,
  Neeraj Singh, Patrick Steinhardt, Philip Oakley, Philippe Blain,
  Phillip Wood, Ramkumar Ramachandra, Randall S. Becker, René
  Scharfe, Shourya Shukla, SZEDER Gábor, Tao Klerks, Taylor Blau,
  Teng Long, Thomas Gummerer, Thomas Koutcher, Tilman Vogel,
  Todd Zullinger, and Victoria Dye.

[*] We are counting not just the authorship contribution but issue
    reporting, mentoring, helping and reviewing that are recorded in
    the commit trailers.

----------------------------------------------------------------

Git 2.36 Release Notes (draft)
==============================

Updates since Git 2.35
----------------------

Backward compatibility warts

 * "git name-rev --stdin" has been deprecated and issues a warning
   when used; use "git name-rev --annotate-stdin" instead.

 * "git clone --filter=... --recurse-submodules" only makes the
   top-level a partial clone, while submodules are fully cloned.  This
   behaviour is changed to pass the same filter down to the submodules.


Note to those who build from the source

 * Since Git 2.31, our source assumed that the compiler you use to
   build Git supports variadic macros, with an easy-to-use escape
   hatch to allow compilation without variadic macros with an request
   to report that you had to use the escape hatch to the list.
   Because we haven't heard from anybody who actually needed to use
   the escape hatch, it has been removed, making support of variadic
   macros a hard requirement.


UI, Workflows & Features

 * Assorted updates to "git cat-file", especially "-h".

 * The command line completion (in contrib/) learns to complete
   arguments to give to "git sparse-checkout" command.

 * "git log --remerge-diff" shows the difference from mechanical merge
   result and the result that is actually recorded in a merge commit.

 * "git log" and friends learned an option --exclude-first-parent-only
   to propagate UNINTERESTING bit down only along the first-parent
   chain, just like --first-parent option shows commits that lack the
   UNINTERESTING bit only along the first-parent chain.

 * The command line completion script (in contrib/) learned to
   complete all Git subcommands, including the ones that are normally
   hidden, when GIT_COMPLETION_SHOW_ALL_COMMANDS is used.

 * "git branch" learned the "--recurse-submodules" option.

 * A not-so-common mistake is to write a script to feed "git bisect
   run" without making it executable, in which case all tests will
   exit with 126 or 127 error codes, even on revisions that are marked
   as good.  Try to recognize this situation and stop iteration early.

 * When "index-pack" dies due to incoming data exceeding the maximum
   allowed input size, include the value of the limit in the error
   message.

 * The error message given by "git switch HEAD~4" has been clarified
   to suggest the "--detach" option that is required.

 * In sparse-checkouts, files mis-marked as missing from the working tree
   could lead to later problems.  Such files were hard to discover, and
   harder to correct.  Automatically detecting and correcting the marking
   of such files has been added to avoid these problems.

 * "git cat-file" learns "--batch-command" mode, which is a more
   flexible interface than the existing "--batch" or "--batch-check"
   modes, to allow different kinds of inquiries made.

 * The level of verbose output from the ort backend during inner merge
   has been aligned to that of the recursive backend.

 * "git remote rename A B", depending on the number of remote-tracking
   refs involved, takes long time renaming them.  The command has been
   taught to show progress bar while making the user wait.

 * Bundle file format gets extended to allow a partial bundle,
   filtered by similar criteria you would give when making a
   partial/lazy clone.

 * A new built-in userdiff driver for kotlin has been added.

 * "git repack" learned a new configuration to disable triggering of
   age-old "update-server-info" command, which is rarely useful these
   days.

 * "git stash" does not allow subcommands it internally runs as its
   implementation detail, except for "git reset", to emit messages;
   now "git reset" part has also been squelched.

 * "git ls-tree" learns "--oid-only" option, similar to "--name-only",
   and more generalized "--format" option.

 * "git fetch --refetch" learned to fetch everything without telling
   the other side what we already have, which is useful when you
   cannot trust what you have in the local object store.

 * "git branch" gives hint when branch tracking cannot be established
   because fetch refspecs from multiple remote repositories overlap.

 * "git worktree list --porcelain" did not c-quote pathnames and lock
   reasons with unsafe bytes correctly, which is worked around by
   introducing NUL terminated output format with "-z".


Performance, Internal Implementation, Development Support etc.

 * "git apply" (ab)used the util pointer of the string-list to keep
   track of how each symbolic link needs to be handled, which has been
   simplified by using strset.

 * Fix a hand-rolled alloca() imitation that may have violated
   alignment requirement of data being sorted in compatibility
   implementation of qsort_s() and stable qsort().

 * Use the parse-options API in "git reflog" command.

 * The conditional inclusion mechanism of configuration files using
   "[includeIf <condition>]" learns to base its decision on the
   URL of the remote repository the repository interacts with.
   (merge 399b198489 jt/conditional-config-on-remote-url later to maint).

 * "git name-rev --stdin" does not behave like usual "--stdin" at
   all.  Start the process of renaming it to "--annotate-stdin".
   (merge a2585719b3 jc/name-rev-stdin later to maint).

 * "git update-index", "git checkout-index", and "git clean" are
   taught to work better with the sparse checkout feature.

 * Use an internal call to reset_head() helper function instead of
   spawning "git checkout" in "rebase", and update code paths that are
   involved in the change.

 * Messages "ort" merge backend prepares while dealing with conflicted
   paths were unnecessarily confusing since it did not differentiate
   inner merges and outer merges.

 * Small modernization of the rerere-train script (in contrib/).

 * Use designated initializers we started using in mid 2017 in more
   parts of the codebase that are relatively quiescent.

 * Improve failure case behaviour of xdiff library when memory
   allocation fails.

 * General clean-up in reftable implementation, including
   clarification of the API documentation, tightening the code to
   honor documented length limit, etc.

 * Remove the escape hatch we added when we introduced the weather
   balloon to use variadic macros unconditionally, to make it official
   that we now have a hard dependency on the feature.

 * Makefile refactoring with a bit of suffixes rule stripping to
   optimize the runtime overhead.

 * "git stash drop" is reimplemented as an internal call to
   reflog_delete() function, instead of invoking "git reflog delete"
   via run_command() API.

 * Count string_list items in size_t, not "unsigned int".

 * The single-key interactive operation used by "git add -p" has been
   made more robust.

 * Remove unneeded <meta http-equiv=content-type...> from gitweb
   output.

 * "git name-rev" learned to use the generation numbers when setting
   the lower bound of searching commits used to explain the revision,
   when available, instead of committer time.

 * Replace core.fsyncObjectFiles with two new configuration variables,
   core.fsync and core.fsyncMethod.

 * Updates to refs traditionally weren't fsync'ed, but we can
   configure using core.fsync variable to do so.

 * "git reflog" command now uses parse-options API to parse its
   command line options.


Fixes since v2.35
-----------------

 * "rebase" and "stash" in secondary worktrees are broken in
   Git 2.35.0, which has been corrected.

 * "git pull --rebase" ignored the rebase.autostash configuration
   variable when the remote history is a descendant of our history,
   which has been corrected.
   (merge 3013d98d7a pb/pull-rebase-autostash-fix later to maint).

 * "git update-index --refresh" has been taught to deal better with
   racy timestamps (just like "git status" already does).
   (merge 2ede073fd2 ms/update-index-racy later to maint).

 * Avoid tests that are run under GIT_TRACE2 set from failing
   unnecessarily.
   (merge 944d808e42 js/test-unset-trace2-parents later to maint).

 * The merge-ort misbehaved when merge.renameLimit configuration is
   set too low and failed to find all renames.
   (merge 9ae39fef7f en/merge-ort-restart-optim-fix later to maint).

 * We explain that revs come first before the pathspec among command
   line arguments, but did not spell out that dashed options come
   before other args, which has been corrected.
   (merge c11f95010c tl/doc-cli-options-first later to maint).

 * "git add -p" rewritten in C regressed hunk splitting in some cases,
   which has been corrected.
   (merge 7008ddc645 pw/add-p-hunk-split-fix later to maint).

 * "git fetch --negotiate-only" is an internal command used by "git
   push" to figure out which part of our history is missing from the
   other side.  It should never recurse into submodules even when
   fetch.recursesubmodules configuration variable is set, nor it
   should trigger "gc".  The code has been tightened up to ensure it
   only does common ancestry discovery and nothing else.
   (merge de4eaae63a gc/fetch-negotiate-only-early-return later to maint).

 * The code path that verifies signatures made with ssh were made to
   work better on a system with CRLF line endings.
   (merge caeef01ea7 fs/ssh-signing-crlf later to maint).

 * "git sparse-checkout init" failed to write into $GIT_DIR/info
   directory when the repository was created without one, which has
   been corrected to auto-create it.
   (merge 7f44842ac1 jt/sparse-checkout-leading-dir-fix later to maint).

 * Cloning from a repository that does not yet have any branches or
   tags but has other refs resulted in a "remote transport reported
   error", which has been corrected.
   (merge dccea605b6 jt/clone-not-quite-empty later to maint).

 * Mark in various places in the code that the sparse index and the
   split index features are mutually incompatible.
   (merge 451b66c533 js/sparse-vs-split-index later to maint).

 * Update the logic to compute alignment requirement for our mem-pool.
   (merge e38bcc66d8 jc/mem-pool-alignment later to maint).

 * Pick a better random number generator and use it when we prepare
   temporary filenames.
   (merge 47efda967c bc/csprng-mktemps later to maint).

 * Update the contributor-facing documents on proposed log messages.
   (merge cdba0295b0 jc/doc-log-messages later to maint).

 * When "git fetch --prune" failed to prune the refs it wanted to
   prune, the command issued error messages but exited with exit
   status 0, which has been corrected.
   (merge c9e04d905e tg/fetch-prune-exit-code-fix later to maint).

 * Problems identified by Coverity in the reftable code have been
   corrected.
   (merge 01033de49f hn/reftable-coverity-fixes later to maint).

 * A bug that made multi-pack bitmap and the object order out-of-sync,
   making the .midx data corrupt, has been fixed.
   (merge f8b60cf99b tb/midx-bitmap-corruption-fix later to maint).

 * The build procedure has been taught to notice older version of zlib
   and enable our replacement uncompress2() automatically.
   (merge 07564773c2 ab/auto-detect-zlib-compress2 later to maint).

 * Interaction between fetch.negotiationAlgorithm and
   feature.experimental configuration variables has been corrected.
   (merge 714edc620c en/fetch-negotiation-default-fix later to maint).

 * "git diff --diff-filter=aR" is now parsed correctly.
   (merge 75408ca949 js/diff-filter-negation-fix later to maint).

 * When "git subtree" wants to create a merge, it used "git merge" and
   let it be affected by end-user's "merge.ff" configuration, which
   has been corrected.
   (merge 9158a3564a tk/subtree-merge-not-ff-only later to maint).

 * Unlike "git apply", "git patch-id" did not handle patches with
   hunks that has only 1 line in either preimage or postimage, which
   has been corrected.
   (merge 757e75c81e jz/patch-id-hunk-header-parsing-fix later to maint).

 * "receive-pack" checks if it will do any ref updates (various
   conditions could reject a push) before received objects are taken
   out of the temporary directory used for quarantine purposes, so
   that a push that is known-to-fail will not leave crufts that a
   future "gc" needs to clean up.
   (merge 5407764069 cb/clear-quarantine-early-on-all-ref-update-errors later to maint).

 * Because a deletion of ref would need to remove it from both the
   loose ref store and the packed ref store, a delete-ref operation
   that logically removes one ref may end up invoking ref-transaction
   hook twice, which has been corrected.
   (merge 2ed1b64ebd ps/avoid-unnecessary-hook-invocation-with-packed-refs later to maint).

 * When there is no object to write .bitmap file for, "git
   multi-pack-index" triggered an error, instead of just skipping,
   which has been corrected.
   (merge eb57277ba3 tb/midx-no-bitmap-for-no-objects later to maint).

 * "git cmd -h" outside a repository should error out cleanly for many
   commands, but instead it hit a BUG(), which has been corrected.
   (merge 87ad07d735 js/short-help-outside-repo-fix later to maint).

 * "working tree" and "per-worktree ref" were in glossary, but
   "worktree" itself wasn't, which has been corrected.
   (merge 2df5387ed0 jc/glossary-worktree later to maint).

 * L10n support for a few error messages.
   (merge 3d3c23b3a7 bs/forbid-i18n-of-protocol-token-in-fetch-pack later to maint).

 * Test modernization.
   (merge d4fe066e4b sy/t0001-use-path-is-helper later to maint).

 * "git log --graph --graph" used to leak a graph structure, and there
   was no way to countermand "--graph" that appear earlier on the
   command line.  A "--no-graph" option has been added and resource
   leakage has been plugged.

 * Error output given in response to an ambiguous object name has been
   improved.
   (merge 3a73c1dfaf ab/ambiguous-object-name later to maint).

 * "git sparse-checkout" wants to work with per-worktree configuration,
   but did not work well in a worktree attached to a bare repository.
   (merge 3ce1138272 ds/sparse-checkout-requires-per-worktree-config later to maint).

 * Setting core.untrackedCache to true failed to add the untracked
   cache extension to the index.

 * Workaround we have for versions of PCRE2 before their version 10.36
   were in effect only for their versions newer than 10.36 by mistake,
   which has been corrected.
   (merge 97169fc361 rs/pcre-invalid-utf8-fix-fix later to maint).

 * Document Taylor as a new member of Git PLC at SFC.  Welcome.
   (merge e8d56ca863 tb/coc-plc-update later to maint).

 * "git checkout -b branch/with/multi/level/name && git stash" only
   recorded the last level component of the branch name, which has
   been corrected.

 * "git fetch" can make two separate fetches, but ref updates coming
   from them were in two separate ref transactions under "--atomic",
   which has been corrected.

 * Check the return value from parse_tree_indirect() to turn segfaults
   into calls to die().
   (merge 8d2eaf649a gc/parse-tree-indirect-errors later to maint).

 * Newer version of GPGSM changed its output in a backward
   incompatible way to break our code that parses its output.  It also
   added more processes our tests need to kill when cleaning up.
   Adjustments have been made to accommodate these changes.
   (merge b0b70d54c4 fs/gpgsm-update later to maint).

 * The untracked cache newly computed weren't written back to the
   on-disk index file when there is no other change to the index,
   which has been corrected.

 * "git config -h" did not describe the "--type" option correctly.
   (merge 5445124fad mf/fix-type-in-config-h later to maint).

 * The way generation number v2 in the commit-graph files are
   (not) handled has been corrected.
   (merge 6dbf4b8172 ds/commit-graph-gen-v2-fixes later to maint).

 * The method to trigger malloc check used in our tests no longer work
   with newer versions of glibc.
   (merge baedc59543 ep/test-malloc-check-with-glibc-2.34 later to maint).

 * When "git fetch --recurse-submodules" grabbed submodule commits
   that would be needed to recursively check out newly fetched commits
   in the superproject, it only paid attention to submodules that are
   in the current checkout of the superproject.  We now do so for all
   submodules that have been run "git submodule init" on.

 * "git rebase $base $non_branch_commit", when $base is an ancestor or
   the $non_branch_commit, modified the current branch, which has been
   corrected.

 * When "shallow" information is updated, we forgot to update the
   in-core equivalent, which has been corrected.

 * When creating a loose object file, we didn't report the exact
   filename of the file we failed to fsync, even though the
   information was readily available, which has been corrected.

 * "git am" can read from the standard input when no mailbox is given
   on the command line, but the end-user gets no indication when it
   happens, making Git appear stuck.
   (merge 7b20af6a06 jc/mailsplit-warn-on-tty later to maint).

 * "git mv" failed to refresh the cached stat information for the
   entry it moved.
   (merge b7f9130a06 vd/mv-refresh-stat later to maint).

 * Other code cleanup, docfix, build fix, etc.
   (merge cfc5cf428b jc/find-header later to maint).
   (merge 40e7cfdd46 jh/p4-fix-use-of-process-error-exception later to maint).
   (merge 727e6ea350 jh/p4-spawning-external-commands-cleanup later to maint).
   (merge 0a6adc26e2 rs/grep-expr-cleanup later to maint).
   (merge 4ed7dfa713 po/readme-mention-contributor-hints later to maint).
   (merge 6046f7a91c en/plug-leaks-in-merge later to maint).
   (merge 8c591dbfce bc/clarify-eol-attr later to maint).
   (merge 518e15db74 rs/parse-options-lithelp-help later to maint).
   (merge cbac0076ef gh/doc-typos later to maint).
   (merge ce14de03db ab/no-errno-from-resolve-ref-unsafe later to maint).
   (merge 2826ffad8c rc/negotiate-only-typofix later to maint).
   (merge 0f03f04c5c en/sparse-checkout-leakfix later to maint).
   (merge 74f3390dde sy/diff-usage-typofix later to maint).
   (merge 45d0212a71 ll/doc-mktree-typofix later to maint).
   (merge e9b272e4c1 js/no-more-legacy-stash later to maint).
   (merge 6798b08e84 ab/do-not-hide-failures-in-git-dot-pm later to maint).
   (merge 9325285df4 po/doc-check-ignore-markup-fix later to maint).
   (merge cd26cd6c7c sy/modernize-t-lib-read-tree-m-3way later to maint).
   (merge d17294a05e ab/hash-object-leakfix later to maint).
   (merge b8403129d3 jd/t0015-modernize later to maint).
   (merge 332acc248d ds/mailmap later to maint).
   (merge 04bf052eef ab/grep-patterntype later to maint).
   (merge 6ee36364eb ab/diff-free-more later to maint).
   (merge 63a36017fe nj/read-tree-doc-reffix later to maint).
   (merge eed36fce38 sm/no-git-in-upstream-of-pipe-in-tests later to maint).
   (merge c614beb933 ep/t6423-modernize later to maint).
   (merge 57be9c6dee ab/reflog-prep-fix later to maint).
   (merge 5327d8982a js/in-place-reverse-in-sequencer later to maint).
   (merge 2e2c0be51e dp/worktree-repair-in-usage later to maint).
   (merge 6563706568 jc/coding-guidelines-decl-in-for-loop later to maint).

----------------------------------------------------------------

Changes since v2.35.0 are as follows:

Abhradeep Chakraborty (2):
      amend remaining usage strings according to style guide
      partial-clone: add a partial-clone test case

Adam Dinwoodie (2):
      configure.ac: fix HAVE_SYNC_FILE_RANGE definition
      t9902: split test to run on appropriate systems

Alex Henrie (3):
      log: fix memory leak if --graph is passed multiple times
      log: add a --no-graph option
      switch: mention the --detach option when dying due to lack of a branch

Atharva Raykar (5):
      submodule--helper: get remote names from any repository
      submodule--helper: refactor get_submodule_displaypath()
      submodule--helper: allow setting superprefix for init_submodule()
      submodule--helper: run update using child process struct
      submodule: move core cmd_update() logic to C

Bagas Sanjaya (1):
      fetch-pack: parameterize message containing 'ready' keyword

COGONI Guillaume (3):
      t/t3903-stash.sh: replace test [-d|-f] with test_path_is_*
      tests: allow testing if a path is truly a file or a directory
      tests: make the code more readable

Carlo Marcelo Arenas Belón (1):
      git-compat-util: really support openssl as a source of entropy

Chen Bojun (1):
      receive-pack: purge temporary data if no command is ready to run

David Cantrell (1):
      completion: tab completion of filenames for 'git restore'

Derrick Stolee (45):
      Documentation: add extensions.worktreeConfig details
      worktree: create init_worktree_config()
      config: add repo_config_set_worktree_gently()
      sparse-checkout: set worktree-config correctly
      worktree: copy sparse-checkout patterns and config on add
      config: make git_configset_get_string_tmp() private
      mailmap: change primary address for Derrick Stolee
      dir: force untracked cache with core.untrackedCache
      worktree: combine two translatable messages
      worktree: extract copy_filtered_worktree_config()
      worktree: extract copy_sparse_checkout()
      worktree: extract checkout_worktree()
      worktree: use 'worktree' over 'working tree'
      worktree: use 'worktree' over 'working tree'
      worktree: use 'worktree' over 'working tree'
      worktree: use 'worktree' over 'working tree'
      worktree: use 'worktree' over 'working tree'
      worktree: use 'worktree' over 'working tree'
      worktree: use 'worktree' over 'working tree'
      test-read-graph: include extra post-parse info
      t5318: extract helpers to lib-commit-graph.sh
      commit-graph: fix ordering bug in generation numbers
      commit-graph: start parsing generation v2 (again)
      commit-graph: fix generation number v2 overflow values
      commit-graph: declare bankruptcy on GDAT chunks
      index-pack: document and test the --promisor option
      list-objects-filter-options: create copy helper
      revision: put object filter into struct rev_info
      pack-objects: use rev.filter when possible
      pack-bitmap: drop filter in prepare_bitmap_walk()
      list-objects: consolidate traverse_commit_list[_filtered]
      MyFirstObjectWalk: update recommended usage
      bundle: parse filter capability
      rev-list: move --filter parsing into revision.c
      bundle: create filtered bundles
      bundle: unbundle promisor packs
      clone: fail gracefully when cloning filtered bundle
      maintenance: fix synopsis in documentation
      list-objects-filter: remove CL_ARG__FILTER
      pack-objects: move revs out of get_object_list()
      pack-objects: parse --filter directly into revs.filter
      bundle: move capabilities to end of 'verify'
      bundle: output hash information in 'verify'
      t7700: check post-condition in kept-pack test
      test-lib-functions: remove test_subcommand_inexact

Des Preston (1):
      worktree: include repair cmd in usage

Elia Pinto (8):
      test-lib.sh: Use GLIBC_TUNABLES instead of MALLOC_CHECK_ on glibc >= 2.34
      t6423-merge-rename-directories.sh: use the $(...) construct
      attr.c: delete duplicate include
      builtin/gc.c: delete duplicate include
      builtin/sparse-checkout.c: delete duplicate include
      builtin/stash.c: delete duplicate include
      t/helper/test-run-command.c: delete duplicate include
      attr.h: remove duplicate struct definition

Elijah Newren (33):
      t1011: add testcase demonstrating accidental loss of user modifications
      unpack-trees: fix accidental loss of user changes
      repo_read_index: clear SKIP_WORKTREE bit from files present in worktree
      Update documentation related to sparsity and the skip-worktree bit
      Accelerate clear_skip_worktree_from_present_files() by caching
      merge-ort: avoid assuming all renames detected
      merge-ort: fix memory leak in merge_ort_internal()
      merge: fix memory leaks in cmd_merge()
      sequencer, stash: fix running from worktree subdir
      sparse-checkout: fix a couple minor memory leaks
      repo-settings: fix checking for fetch.negotiationAlgorithm=default
      repo-settings: fix error handling for unknown values
      repo-settings: rename the traditional default fetch.negotiationAlgorithm
      show, log: provide a --remerge-diff capability
      log: clean unneeded objects during `log --remerge-diff`
      ll-merge: make callers responsible for showing warnings
      merge-ort: capture and print ll-merge warnings in our preferred fashion
      merge-ort: mark a few more conflict messages as omittable
      merge-ort: format messages slightly different for use in headers
      diff: add ability to insert additional headers for paths
      show, log: include conflict/warning messages in --remerge-diff headers
      merge-ort: mark conflict/warning messages from inner merges as omittable
      diff-merges: avoid history simplifications when diffing merges
      merge-ort: make informational messages from recursive merges clearer
      sparse-checkout: correct reapply's handling of options
      sparse-checkout: correctly set non-cone mode when expected
      sparse-checkout: pay attention to prefix for {set, add}
      sparse-checkout: error or warn when given individual files
      sparse-checkout: reject arguments in cone-mode that look like patterns
      merge-ort: fix small memory leak in detect_and_process_renames()
      merge-ort: fix small memory leak in unique_path()
      merge-ort: exclude messages from inner merges by default
      repo_read_index: add config to expect files outside sparse patterns

Emily Shaffer (14):
      hook: add 'run' subcommand
      gc: use hook library for pre-auto-gc hook
      am: convert {pre,post}-applypatch to use hook.h
      rebase: convert pre-rebase to use hook.h
      am: convert applypatch-msg to use hook.h
      merge: convert post-merge to use hook.h
      hooks: convert non-worktree 'post-checkout' hook to hook library
      hooks: convert worktree 'post-checkout' hook to hook library
      send-email: use 'git hook run' for 'sendemail-validate'
      git-p4: use 'git hook' to run hooks
      commit: convert {pre-commit,prepare-commit-msg} hook to hook.h
      read-cache: convert post-index-change to use hook.h
      receive-pack: convert push-to-checkout hook to hook.h
      run-command: remove old run_hook_{le,ve}() hook API

Fabian Stelzer (2):
      gpg-interface: trim CR from ssh-keygen
      gpg-interface/gpgsm: fix for v2.3

Fangyi Zhou (1):
      submodule-helper: fix usage string

Glen Choo (39):
      fetch: use goto cleanup in cmd_fetch()
      fetch: skip tasks related to fetching objects
      fetch --negotiate-only: do not update submodules
      branch: move --set-upstream-to behavior to dwim_and_setup_tracking()
      branch: make create_branch() always create a branch
      branch: add a dry_run parameter to create_branch()
      builtin/branch: consolidate action-picking logic in cmd_branch()
      branch: add --recurse-submodules option for branch creation
      branch.c: use 'goto cleanup' in setup_tracking() to fix memory leaks
      stash: strip "refs/heads/" with skip_prefix
      checkout, clone: die if tree cannot be parsed
      submodule--helper: remove update-module-mode
      submodule--helper: reorganize code for sh to C conversion
      submodule--helper run-update-procedure: remove --suboid
      submodule--helper run-update-procedure: learn --remote
      submodule--helper update-clone: learn --init
      submodule--helper: remove ensure-core-worktree
      submodule update: add tests for --filter
      submodule--helper update-clone: check for --filter and --init
      t5526: introduce test helper to assert on fetches
      t5526: stop asserting on stderr literally
      t5526: create superproject commits with test helper
      submodule: make static functions read submodules from commits
      submodule: inline submodule_commits() into caller
      submodule: store new submodule commits oid_array in a struct
      submodule: extract get_fetch_task()
      submodule: move logic into fetch_task_create()
      submodule update: use die_message()
      submodule--helper: teach update_data more options
      submodule--helper: reduce logic in run_update_procedure()
      submodule--helper: remove forward declaration
      fetch: fetch unpopulated, changed submodules
      submodule: fix latent check_has_commit() bug
      branch: support more tracking modes when recursing
      branch: give submodule updating advice before exit
      branch --set-upstream-to: be consistent when advising
      branch: remove negative exit code
      branch: rework comments for future developers
      branch.c: simplify advice-and-die sequence

Greg Hurrell (2):
      Documentation/config/pgp.txt: replace stray <TAB> character with <SPC>
      Documentation/config/pgp.txt: add missing apostrophe

Han-Wen Nienhuys (27):
      reftable: fix OOB stack write in print functions
      reftable: fix resource leak in block.c error path
      reftable: fix resource leak blocksource.c
      reftable: check reftable_stack_auto_compact() return value
      reftable: ignore remove() return value in stack_test.c
      reftable: fix resource warning
      reftable: all xxx_free() functions accept NULL arguments
      reftable: order unittests by complexity
      reftable: drop stray printf in readwrite_test
      reftable: handle null refnames in reftable_ref_record_equal
      reftable: make reftable-record.h function signatures const correct
      reftable: implement record equality generically
      reftable: remove outdated file reftable.c
      reftable: make reftable_record a tagged union
      reftable: add print functions to the record types
      t1405: explictly delete reflogs for reftable
      t1405: mark test that checks existence as REFFILES
      t5312: prepare for reftable
      t1410: use test-tool ref-store to inspect reflogs
      t1410: mark bufsize boundary test as REFFILES
      Documentation: object_id_len goes up to 31
      reftable: reject 0 object_id_len
      reftable: add a test that verifies that writing empty keys fails
      reftable: avoid writing empty keys at the block layer
      reftable: ensure that obj_id_len is >= 2 on writing
      reftable: add test for length of disambiguating prefix
      reftable: rename writer_stats to reftable_writer_stats

Jacob Keller (1):
      name-rev: use generation numbers if available

Jason Yundt (2):
      comment: fix typo
      gitweb: remove invalid http-equiv="content-type"

Jayati Shrivastava (1):
      sequencer: use reverse_commit_list() helper

Jaydeep Das (1):
      t/t0015-hash.sh: remove unnecessary '\' at line end

Jaydeep P Das (1):
      userdiff: add builtin diff driver for kotlin language.

Jean-Noël Avila (4):
      i18n: factorize more 'incompatible options' messages
      i18n: factorize "invalid value" messages
      i18n: remove from i18n strings that do not hold translatable parts
      i18n: fix some misformated placeholders in command synopsis

Jeff Hostetler (30):
      fsmonitor: enhance existing comments, clarify trivial response handling
      fsmonitor-ipc: create client routines for git-fsmonitor--daemon
      fsmonitor: config settings are repository-specific
      fsmonitor: use IPC to query the builtin FSMonitor daemon
      fsmonitor: document builtin fsmonitor
      fsmonitor--daemon: add a built-in fsmonitor daemon
      fsmonitor--daemon: implement 'stop' and 'status' commands
      compat/fsmonitor/fsm-listen-win32: stub in backend for Windows
      compat/fsmonitor/fsm-listen-darwin: stub in backend for Darwin
      fsmonitor--daemon: implement 'run' command
      fsmonitor--daemon: implement 'start' command
      fsmonitor--daemon: add pathname classification
      fsmonitor--daemon: define token-ids
      fsmonitor--daemon: create token-based changed path cache
      compat/fsmonitor/fsm-listen-win32: implement FSMonitor backend on Windows
      compat/fsmonitor/fsm-listen-darwin: add MacOS header files for FSEvent
      compat/fsmonitor/fsm-listen-darwin: implement FSEvent listener on MacOS
      fsmonitor--daemon: implement handle_client callback
      help: include fsmonitor--daemon feature flag in version info
      t/helper/fsmonitor-client: create IPC client to talk to FSMonitor Daemon
      t7527: create test for fsmonitor--daemon
      t/perf: avoid copying builtin fsmonitor files into test repo
      t/helper/test-chmtime: skip directories on Windows
      t/perf/p7519: fix coding style
      t/perf/p7519: speed up test on Windows
      t/perf/p7519: add fsmonitor--daemon test cases
      fsmonitor--daemon: periodically truncate list of modified files
      fsmonitor--daemon: use a cookie file to sync with file system
      fsmonitor: force update index after large responses
      t7527: test status with untracked-cache and fsmonitor--daemon

Jerry Zhang (3):
      git-rev-list: add --exclude-first-parent-only flag
      patch-id: fix antipatterns in tests
      patch-id: fix scan_hunk_header on diffs with 1 line of before/after

Jessica Clarke (1):
      mem-pool: don't assume uintmax_t is aligned enough for all types

Joel Holdsworth (4):
      git-p4: don't select shell mode using the type of the command argument
      git-p4: pass command arguments as lists instead of using shell
      git-p4: don't print shell commands as python lists
      git-p4: fix instantiation of CalledProcessError

Johannes Schindelin (14):
      sparse-index: sparse index is disallowed when split index is active
      t1091: disable split index
      split-index: it really is incompatible with the sparse index
      git-sh-setup: remove remnant bits referring to `git-legacy-stash`
      add: remove support for `git-legacy-stash`
      stash: remove documentation for `stash.useBuiltin`
      stash: stop warning about the obsolete `stash.useBuiltin` config setting
      docs(diff): lose incorrect claim about `diff-files --diff-filter=A`
      diff.c: move the diff filter bits definitions up a bit
      diff-filter: be more careful when looking for negative bits
      scalar: accept -C and -c options before the subcommand
      checkout/fetch/pull/pack-objects: allow `-h` outside a repository
      t0012: verify that built-ins handle `-h` even without gitdir
      cocci: allow padding with `strbuf_addf()`

John Cai (15):
      receive-pack.c: consolidate find header logic
      name-rev: deprecate --stdin in favor of --annotate-stdin
      name-rev.c: use strbuf_getline instead of limited size buffer
      builtin/reflog.c: use parse-options api for expire, delete subcommands
      name-rev: replace --stdin with --annotate-stdin in synopsis
      cat-file: rename cmdmode to transform_mode
      cat-file: introduce batch_mode enum to replace print_contents
      cat-file: add remove_timestamp helper
      cat-file: add --batch-command mode
      stash: add tests to ensure reflog --rewrite --updatref behavior
      reflog: libify delete reflog function and helpers
      stash: call reflog_delete() in reflog.c
      cat-file: skip expanding default format
      rebase: use test_commit helper in setup
      rebase: set REF_HEAD_DETACH in checkout_up_to_date()

Jonathan Tan (6):
      config: make git_config_include() static
      config: include file if remote URL matches a glob
      sparse-checkout: create leading directory
      clone: support unusual remote ref configurations
      ls-files: support --recurse-submodules --stage
      shallow: reset commit grafts when shallow is reset

Josh Steadmon (3):
      test-lib: unset trace2 parent envvars
      clone, submodule: pass partial clone filters to submodules
      ls-tree: `-l` should not imply recursive listing

Junio C Hamano (32):
      compat/qsort_s.c: avoid using potentially unaligned access
      fetch: help translators by reusing the same message template
      Start post 2.35 cycle
      SubmittingPatches: write problem statement in the log in the present tense
      CodingGuidelines: hint why we value clearly written log messages
      SubmittingPatches: explain why we care about log messages
      Git 2.35.1
      Name the next one 2.36 to prepare for 2.35.1
      The first batch
      The second batch for 2.36
      glossary: describe "worktree"
      The third batch
      The fourth batch
      The fifth batch
      The sixth batch
      The seventh batch
      The eighth batch
      rerere-train: two fixes to the use of "git show -s"
      am/apply: warn if we end up reading patches from terminal
      The ninth batch
      The tenth batch
      The eleventh batch
      The twelfth batch
      The thirteenth batch
      The 14th batch
      reset: show --no-refresh in the short-help
      The 15th batch
      The 16th batch
      The 17th batch
      CodingGuidelines: give deadline for "for (int i = 0; ..."
      Git 2.36-rc0
      Git 2.36-rc1

Justin Donnelly (4):
      git-prompt: rename `upstream` to `upstream_type`
      git-prompt: make upstream state indicator location consistent
      git-prompt: make long upstream state indicator consistent
      git-prompt: put upstream comments together

Lessley Dennington (3):
      completion: address sparse-checkout issues
      completion: improve sparse-checkout cone mode directory completion
      completion: handle unusual characters for sparse-checkout

Liginity Lee (1):
      fix typo in git-mktree.txt

Marc Strapetz (4):
      test-lib: introduce API for verifying file mtime
      t7508: fix bogus mtime verification
      t7508: add tests capturing racy timestamp handling
      update-index: refresh should rewrite index in case of racy timestamps

Martin Ågren (1):
      git-ls-tree.txt: fix the name of "%(objectsize:padded)"

Matheus Felipe (1):
      config: correct "--type" option in "git config -h" output

Matt Cooper (1):
      index-pack: clarify the breached limit

Michael J Gruber (2):
      test-lib: declare local variables as local
      tests: demonstrate "show --word-diff --color-moved" regression

Neeraj Singh (10):
      wrapper: make inclusion of Windows csprng header tightly scoped
      core.fsyncmethod: add writeout-only mode
      core.fsync: introduce granular fsync control infrastructure
      core.fsync: add configuration parsing
      core.fsync: new option to harden the index
      core.fsync: documentation and user-friendly aggregate options
      core.fsync: fix incorrect expression for default configuration
      trace2: add stats for fsync operations
      core.fsyncmethod: correctly camel-case warning message
      object-file: pass filename to fsync_or_die

Nihal Jere (1):
      Documentation: git-read-tree: separate links using commas

Patrick Steinhardt (24):
      refs: extract packed_refs_delete_refs() to allow control of transaction
      refs: allow passing flags when beginning transactions
      refs: allow skipping the reference-transaction hook
      refs: demonstrate excessive execution of the reference-transaction hook
      refs: do not execute reference-transaction hook on packing refs
      refs: skip hooks when deleting uncovered packed refs
      fetch-pack: use commit-graph when computing cutoff
      fetch: skip computing output width when not printing anything
      fetch: increase test coverage of fetches
      fetch: backfill tags before setting upstream
      fetch: control lifecycle of FETCH_HEAD in a single place
      fetch: report errors when backfilling tags fails
      refs: add interface to iterate over queued transactional updates
      fetch: make `--atomic` flag cover backfilling of tags
      fetch: make `--atomic` flag cover pruning of refs
      upload-pack: look up "want" lines via commit-graph
      fetch: avoid lookup of commits when not appending to FETCH_HEAD
      refs: add ability for backends to special-case reading of symbolic refs
      remote: read symbolic refs via `refs_read_symbolic_ref()`
      refs/files-backend: optimize reading of symbolic refs
      t5503: simplify setup of test which exercises failure of backfill
      repack: refactor to avoid double-negation of update-server-info
      repack: add config to skip updating server info
      core.fsync: new option to harden references

Philip Oakley (2):
      README.md: add CodingGuidelines and a link for Translators
      doc: check-ignore: code-quote an exclamation mark

Philippe Blain (1):
      pull --rebase: honor rebase.autostash when fast-forwarding

Phillip Wood (29):
      t3701: clean up hunk splitting tests
      builtin add -p: fix hunk splitting
      rebase: factor out checkout for up to date branch
      t5403: refactor rebase post-checkout hook tests
      rebase: pass correct arguments to post-checkout hook
      rebase: do not remove untracked files on checkout
      rebase --apply: don't run post-checkout hook if there is an error
      reset_head(): remove action parameter
      reset_head(): factor out ref updates
      reset_head(): make default_reflog_action optional
      create_autostash(): remove unneeded parameter
      rebase: cleanup reset_head() calls
      reset_head(): take struct rebase_head_opts
      rebase --apply: fix reflog
      rebase --apply: set ORIG_HEAD correctly
      rebase -m: don't fork git checkout
      xdiff: fix a memory leak
      xdiff: handle allocation failure in patience diff
      xdiff: refactor a function
      xdiff: handle allocation failure when merging
      terminal: always reset terminal when reading without echo
      terminal: pop signal handler when terminal is restored
      terminal: set VMIN and VTIME in non-canonical mode
      add -p: disable stdin buffering when interactive.singlekey is set
      terminal: use flags for save_term()
      terminal: don't assume stdin is /dev/tty
      terminal: work around macos poll() bug
      terminal: restore settings on SIGTSTP
      worktree: add -z option for list subcommand

René Scharfe (10):
      grep: use grep_or_expr() in compile_pattern_or()
      grep: use grep_not_expr() in compile_pattern_not()
      apply: use strsets to track symlinks
      stable-qsort: avoid using potentially unaligned access
      bisect--helper: report actual bisect_state() argument on error
      bisect--helper: release strbuf and strvec on run error
      bisect: document run behavior with exit codes 126 and 127
      bisect--helper: double-check run command on exit code 126 and 127
      parse-options: document bracketing of argh
      grep: fix triggering PCRE2_NO_START_OPTIMIZE workaround

Robert Coup (8):
      fetch: fix negotiate-only error message
      fetch-negotiator: add specific noop initializer
      fetch-pack: add refetch
      builtin/fetch-pack: add --refetch option
      fetch: add --refetch option
      t5615-partial-clone: add test for fetch --refetch
      fetch: after refetch, encourage auto gc repacking
      docs: mention --refetch fetch option

SZEDER Gábor (1):
      reflog: fix 'show' subcommand's argv

Shaoxuan Yuan (4):
      builtin/diff.c: fix "git-diff" usage string typo
      t/lib-read-tree-m-3way: modernize style
      t/lib-read-tree-m-3way: indent with tabs
      t0001: replace "test [-d|-f]" with test_path_is_* functions

Shubham Mishra (3):
      t0003: avoid pipes with Git on LHS
      t0001-t0028: avoid pipes with Git on LHS
      t0030-t0050: avoid pipes with Git on LHS

Tao Klerks (6):
      t7519: avoid file to index mtime race for untracked cache
      t7519: populate untracked cache before test
      untracked-cache: write index when populating empty untracked cache
      t/helper/test-chmtime: update mingw to support chmtime on directories
      t7063: mtime-mangling instead of delays in untracked cache testing
      tracking branches: add advice to ambiguous refspec error

Taylor Blau (15):
      grep: extract grep_binexp() from grep_or_expr()
      grep: use grep_and_expr() in compile_pattern_and()
      t5326: demonstrate bitmap corruption after permutation
      midx.c: make changing the preferred pack safe
      pack-revindex.c: instrument loading on-disk reverse index
      t5326: drop unnecessary setup
      t5326: extract `test_rev_exists`
      t5326: move tests to t/lib-bitmap.sh
      t/lib-bitmap.sh: parameterize tests over reverse index source
      midx: read `RIDX` chunk when present
      pack-bitmap.c: gracefully fallback after opening pack/MIDX
      midx: prevent writing a .bitmap without any objects
      CODE_OF_CONDUCT.md: update PLC members list
      builtin/remote.c: parse options in 'rename'
      builtin/remote.c: show progress when renaming remote references

Teng Long (6):
      git-cli.txt: clarify "options first and then args"
      ls-tree: rename "retval" to "recurse" in "show_tree()"
      ls-tree: simplify nesting if/else logic in "show_tree()"
      ls-tree: fix "--name-only" and "--long" combined use bug
      ls-tree: slightly refactor `show_tree()`
      ls-tree: support --object-only option for "git-ls-tree"

Thomas Gummerer (1):
      fetch --prune: exit with error if pruning fails

Thomas Koutcher (1):
      subtree: force merge commit

Todd Zullinger (3):
      t/lib-gpg: reload gpg components after updating trustlist
      t/lib-gpg: kill all gpg components, not just gpg-agent
      doc: replace "--" with {litdd} in credential-cache/fsmonitor

Victoria Dye (30):
      reset: fix validation in sparse index test
      reset: reorder wildcard pathspec conditions
      clean: integrate with sparse index
      checkout-index: expand sparse checkout compatibility tests
      checkout-index: add --ignore-skip-worktree-bits option
      checkout-index: integrate with sparse index
      update-index: add tests for sparse-checkout compatibility
      update-index: integrate with sparse index
      update-index: reduce scope of index expansion in do_reupdate
      sparse-index: prevent repo root from becoming sparse
      status: fix nested sparse directory diff in sparse index
      read-tree: explicitly disallow prefixes with a leading '/'
      read-tree: expand sparse checkout test coverage
      read-tree: integrate with sparse index
      read-tree: narrow scope of index expansion for '--prefix'
      read-tree: make two-way merge sparse-aware
      read-tree: make three-way merge sparse-aware
      reset: revise index refresh advice
      reset: introduce --[no-]refresh option to --mixed
      reset: replace '--quiet' with '--no-refresh' in performance advice
      reset: suppress '--no-refresh' advice if logging is silenced
      stash: make internal resets quiet and refresh index
      t1092: add sparse directory before cone in test repo
      unpack-trees: increment cache_bottom for sparse directories
      Revert "unpack-trees: improve performance of next_cache_entry"
      reset: do not make '--quiet' disable index refresh
      reset: remove 'reset.quiet' config option
      reset: remove 'reset.refresh' config option
      mv: refresh stat info for moved entry
      contrib/scalar: fix 'all' target in Makefile

brian m. carlson (6):
      t0027: add tests for eol without text in .gitattributes
      docs: correct documentation about eol attribute
      wrapper: add a helper to generate numbers from a CSPRNG
      wrapper: use a CSPRNG to generate random file names
      doc: clarify interaction between 'eol' and text=auto
      block-sha1: remove use of obsolete x86 assembly

Ævar Arnfjörð Bjarmason (186):
      cat-file tests: test bad usage
      cat-file tests: test messaging on bad objects/paths
      parse-options API: add a usage_msg_optf()
      cat-file docs: fix SYNOPSIS and "-h" output
      cat-file: move "usage" variable to cmd_cat_file()
      cat-file: make --batch-all-objects a CMDMODE
      cat-file: fix remaining usage bugs
      cat-file: correct and improve usage information
      object-name.c: don't have GET_OID_ONLY_TO_DIE imply *_QUIETLY
      cat-file: use GET_OID_ONLY_TO_DIE in --(textconv|filters)
      hook API: add a run_hooks() wrapper
      hook API: add a run_hooks_l() wrapper
      git hook run: add an --ignore-missing flag
      cat-file: don't whitespace-pad "(...)" in SYNOPSIS and usage output
      cat-file: s/_/-/ in typo'd usage_msg_optf() message
      compat: auto-detect if zlib has uncompress2()
      sequencer: don't use die_errno() on refs_resolve_ref_unsafe() failure
      refs API: remove "failure_errno" from refs_resolve_ref_unsafe()
      object-name tests: add tests for ambiguous object blind spots
      object-name: explicitly handle OBJ_BAD in show_ambiguous_object()
      object-name: explicitly handle bad tags in show_ambiguous_object()
      object-name: make ambiguous object output translatable
      object-name: show date for ambiguous tag objects
      object-name: iterate ambiguous objects before showing header
      object-name: re-use "struct strbuf" in show_ambiguous_object()
      perl Git.pm: don't ignore signalled failure in _cmd_close()
      completion tests: re-source git-completion.bash in a subshell
      completion: add a GIT_COMPLETION_SHOW_ALL_COMMANDS
      leak tests: fix a memory leak in "test-progress" helper
      progress.c test helper: add missing braces
      progress.c tests: make start/stop commands on stdin
      progress.c tests: test some invalid usage
      progress.h: format and be consistent with progress.c naming
      progress.c: use dereferenced "progress" variable, not "(*p_progress)"
      progress.c: refactor stop_progress{,_msg}() to use helpers
      progress API: unify stop_progress{,_msg}(), fix trace2 bug
      pack-bitmap-write.c: don't return without stop_progress()
      t0051: use "skip_all" under !MINGW in single-test file
      hash-object: fix a trivial leak in --path
      ls-remote & transport API: release "struct transport_ls_refs_options"
      grep.h: remove unused "regex_t regexp" from grep_opt
      log tests: check if grep_config() is called by "log"-like cmds
      grep tests: create a helper function for "BRE" or "ERE"
      grep tests: add missing "grep.patternType" config tests
      built-ins: trust the "prefix" from run_builtin()
      grep.c: don't pass along NULL callback value
      grep API: call grep_config() after grep_init()
      grep.h: make "grep_opt.pattern_type_option" use its enum
      grep.c: do "if (bool && memchr())" not "if (memchr() && bool)"
      grep: simplify config parsing and option parsing
      cache.h: remove always unused show_date_human() declaration
      date API: create a date.h, split from cache.h
      date API: provide and use a DATE_MODE_INIT
      date API: add basic API docs
      date API: add and use a date_mode_release()
      diff.[ch]: have diff_free() call clear_pathspec(opts.pathspec)
      diff.[ch]: have diff_free() free options->parseopts
      hook tests: test for exact "pre-push" hook input
      hook tests: use a modern style for "pre-push" tests
      git-compat-util.h: clarify GCC v.s. C99-specific in comment
      C99: remove hardcoded-out !HAVE_VARIADIC_MACROS code
      help doc: add missing "]" to "[-a|--all]"
      help.c: use puts() instead of printf{,_ln}() for consistency
      help tests: test "git" and "git help [-a|-g] spacing
      help.c: split up list_all_cmds_help() function
      help: note the option name on option incompatibility
      help: correct usage & behavior of "git help --all"
      help: error if [-a|-g|-c] and [-i|-m|-w] are combined
      help: add --no-[external-commands|aliases] for use with --all
      help: don't print "\n" before single-section output
      imap-send.c: use designated initializers for "struct imap_server_conf"
      trace2: use designated initializers for "struct tr2_tgt"
      trace2: use designated initializers for "struct tr2_dst"
      object-file: use designated initializers for "struct git_hash_algo"
      archive-*.c: use designated initializers for "struct archiver"
      userdiff.c: use designated initializers for "struct userdiff_driver"
      convert.c: use designated initializers for "struct stream_filter*"
      refspec.c: use designated initializers for "struct refspec_item"
      fast-import.c: use designated initializers for "partial" struct assignments
      object-file.c: split up declaration of unrelated variables
      object-file API: return "void", not "int" from hash_object_file()
      object-file API: add a format_object_header() function
      object-file API: have write_object_file() take "enum object_type"
      object API: correct "buf" v.s. "map" mismatch in *.c and *.h
      object API docs: move check_object_signature() docs to cache.h
      object API users + docs: check <0, not !0 with check_object_signature()
      object-file API: split up and simplify check_object_signature()
      object API: rename hash_object_file_literally() to write_*()
      object-file API: have hash_object_file() take "enum object_type"
      object-file.c: add a literal version of write_object_file_prepare()
      object-file API: pass an enum to read_object_with_reference()
      test-lib: add GIT_SAN_OPTIONS, inherit [AL]SAN_OPTIONS
      test-lib: correct and assert TEST_DIRECTORY overriding
      test-lib: make $GIT_BUILD_DIR an absolute path
      test-lib: add "fast_unwind_on_malloc=0" to LSAN_OPTIONS
      scalar Makefile: use "The default target of..." pattern
      Makefiles: add "shared.mak", move ".DELETE_ON_ERROR" to it
      Makefile: disable GNU make built-in wildcard rules
      Makefile: define $(LIB_H) in terms of $(FIND_SOURCE_FILES)
      Makefile: move ".SUFFIXES" rule to shared.mak
      Makefile: move $(comma), $(empty) and $(space) to shared.mak
      Makefile: add "$(QUIET)" boilerplate to shared.mak
      Makefiles: add and use wildcard "mkdir -p" template
      log tests: fix "abort tests early" regression in ff37a60c369
      index-pack: fix memory leaks
      merge-base: free() allocated "struct commit **" list
      diff.c: free "buf" in diff_words_flush()
      urlmatch.c: add and use a *_release() function
      remote-curl.c: free memory in cmd_main()
      bundle: call strvec_clear() on allocated strvec
      transport: stop needlessly copying bundle header references
      submodule--helper: fix trivial leak in module_add()
      commit-graph: fix memory leak in misused string_list API
      commit-graph: stop fill_oids_from_packs() progress on error and free()
      lockfile API users: simplify and don't leak "path"
      range-diff: plug memory leak in common invocation
      range-diff: plug memory leak in read_patches()
      repository.c: free the "path cache" in repo_clear()
      submodule tests: test for init and update failure output
      submodule--helper: don't use bitfield indirection for parse_options()
      gettext API users: don't explicitly cast ngettext()'s "n"
      string-list API: change "nr" and "alloc" to "size_t"
      merge: don't run post-hook logic on --no-verify
      hooks: fix an obscure TOCTOU "did we just run a hook?" race
      tests: change some 'test $(git) = "x"' to test_cmp
      tests: use "test_stdout_line_count", not "test $(git [...] | wc -l)"
      read-tree tests: check "diff-files" exit code on failure
      diff tests: don't ignore "git diff" exit code
      diff tests: don't ignore "git diff" exit code in "read" loop
      apply tests: use "test_must_fail" instead of ad-hoc pattern
      merge tests: use "test_must_fail" instead of ad-hoc pattern
      rev-parse tests: don't ignore "git reflog" exit code
      notes tests: don't ignore "git" exit code
      diff tests: don't ignore "git rev-list" exit code
      rev-list tests: don't hide abort() in "test_expect_failure"
      gettext tests: don't ignore "test-tool regex" exit code
      apply tests: don't ignore "git ls-files" exit code, drop sub-shell
      checkout tests: don't ignore "git <cmd>" exit code
      rev-list simplify tests: don't ignore "git" exit code
      list-objects: handle NULL function pointers
      reflog: don't be noisy on empty reflogs
      builtin/submodule--helper.c: rename option struct to "opt"
      test-lib-functions: add and use a "test_hook" wrapper
      hook tests: turn exit code assertions into a loop
      http tests: don't rely on "hook/post-update.sample"
      tests: assume the hooks are disabled by default
      bugreport tests: tighten up "git bugreport -s hooks" test
      fetch+push tests: use "test_hook" and "test_when_finished" pattern
      gc + p4 tests: use "test_hook", remove sub-shells
      tests: change "cat && chmod +x" to use "test_hook"
      tests: change "mkdir -p && write_script" to use "test_hook"
      tests: use "test_hook" for misc "mkdir -p" and "chmod" cases
      diff.c: fix a double-free regression in a18d66cefb
      refs: use designated initializers for "struct ref_storage_be"
      refs: use designated initializers for "struct ref_iterator_vtable"
      misc *.c: use designated initializers for struct assignments
      packed-backend: remove stub BUG(...) functions
      refs debug: add a wrapper for "read_symbolic_ref"
      tests: extend "test_hook" for "rm" and "chmod -x", convert "$HOOK"
      proc-receive hook tests: use "test_hook" instead of "write_script"
      http tests: use "test_hook" for "smart" and "dumb" http tests
      reflog.c: indent argument lists
      reflog: refactor cmd_reflog() to "if" branches
      reflog tests: add missing "git reflog exists" tests
      reflog: move "usage" variables and use macros
      git reflog [expire|delete]: make -h output consistent with SYNOPSIS
      reflog exists: use parse_options() API
      Makefile: use ' ', not non-existing $(wspfx_SQ)
      ls-tree tests: add tests for --name-status
      ls-tree: remove commented-out code
      ls-tree: add missing braces to "else" arms
      ls-tree: use "enum object_type", not {blob,tree,commit}_type
      ls-tree: use "size_t", not "int" for "struct strbuf"'s "len"
      ls-tree: introduce struct "show_tree_data"
      ls-tree: introduce "--format" option
      ls-tree: detect and error on --name-only --name-status
      ls-tree: split up "fast path" callbacks
      hooks: fix "invoked hook" regression in a8cc5943338
      reflog: convert to parse_options() API
      reflog [show]: display sensible -h output
      test-lib: have --immediate emit valid TAP on failure
      pack-objects: lazily set up "struct rev_info", don't leak
      reftable: make assignments portable to AIX xlc v12.01
      Documentation/Makefile: fix "make info" regression in dad9cd7d518
      Documentation: add --batch-command to cat-file synopsis
      ls-tree doc: document interaction with submodules


^ permalink raw reply	[relevance 3%]

* [ANNOUNCE] Git v2.36.0-rc2
@ 2022-04-12 17:03  3% Junio C Hamano
  0 siblings, 0 replies; 200+ results
From: Junio C Hamano @ 2022-04-12 17:03 UTC (permalink / raw)
  To: git; +Cc: git-packagers

A release candidate Git v2.36.0-rc2 is now available for testing at
the usual places.  It is comprised of 673 non-merge commits since
v2.35.2, contributed by 85 people, 25 of which are new faces [*].

It is a day earlier than scheduled; it contains the same fix for
CVE-2022-24765 in the maintenance releases released today.

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.36.0-rc2' tag and the 'master' branch that the tag points at:

  url = https://git.kernel.org/pub/scm/git/git
  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.35.2 are as follows.
Welcome to the Git development community!

  Abhradeep Chakraborty, BRESSAT Jonathan, Chen Bojun,
  COGONI Guillaume, David Cantrell, Des Preston, Hongyi Zhao,
  Jason Yundt, Jayati Shrivastava, Jaydeep Das, Jaydeep P Das,
  Jose Lopes, Justin Donnelly, Kraymer, Liginity Lee, Matheus
  Felipe, Maximilian Reichel, Michael McClimon, Nihal Jere,
  Pedro Martelletto, Robert Coup, Sean Allred, Shaoxuan Yuan,
  Shubham Mishra, and Waleed Khan.

Returning contributors who helped this release are as follows.
Thanks for your continued support.

  Adam Dinwoodie, Ævar Arnfjörð Bjarmason, Alex Henrie,
  Atharva Raykar, Bagas Sanjaya, Beat Bolli, brian m. carlson,
  Carlo Marcelo Arenas Belón, Christian Couder, Daniel Hahler,
  Derrick Stolee, Elia Pinto, Elijah Newren, Emily Shaffer,
  Eric Sunshine, Fabian Stelzer, Fangyi Zhou, Glen Choo, Greg
  Hurrell, Han-Wen Nienhuys, Jacob Keller, Jean-Noël Avila, Jeff
  Hostetler, Jeff King, Jerry Zhang, Jessica Clarke, Jiang Xin,
  Joel Holdsworth, Johannes Altmanninger, Johannes Schindelin,
  Johannes Sixt, John Cai, Jonathan Nieder, Jonathan Tan, Josh
  Steadmon, Junio C Hamano, Kevin Willford, Lessley Dennington,
  Marc Strapetz, Martin Ågren, Matt Cooper, Michael J Gruber,
  Neeraj Singh, Patrick Steinhardt, Philip Oakley, Philippe Blain,
  Phillip Wood, Ramkumar Ramachandra, Randall S. Becker, René
  Scharfe, Shourya Shukla, SZEDER Gábor, Tao Klerks, Taylor Blau,
  Teng Long, Thomas Gummerer, Thomas Koutcher, Tilman Vogel,
  Todd Zullinger, and Victoria Dye.

[*] We are counting not just the authorship contribution but issue
    reporting, mentoring, helping and reviewing that are recorded in
    the commit trailers.

----------------------------------------------------------------

Git 2.36 Release Notes (draft)
==============================

Updates since Git 2.35
----------------------

Backward compatibility warts

 * "git name-rev --stdin" has been deprecated and issues a warning
   when used; use "git name-rev --annotate-stdin" instead.

 * "git clone --filter=... --recurse-submodules" only makes the
   top-level a partial clone, while submodules are fully cloned.  This
   behaviour is changed to pass the same filter down to the submodules.


Note to those who build from the source

 * Since Git 2.31, our source assumed that the compiler you use to
   build Git supports variadic macros, with an easy-to-use escape
   hatch to allow compilation without variadic macros with an request
   to report that you had to use the escape hatch to the list.
   Because we haven't heard from anybody who actually needed to use
   the escape hatch, it has been removed, making support of variadic
   macros a hard requirement.


UI, Workflows & Features

 * Assorted updates to "git cat-file", especially "-h".

 * The command line completion (in contrib/) learns to complete
   arguments to give to "git sparse-checkout" command.

 * "git log --remerge-diff" shows the difference from mechanical merge
   result and the result that is actually recorded in a merge commit.

 * "git log" and friends learned an option --exclude-first-parent-only
   to propagate UNINTERESTING bit down only along the first-parent
   chain, just like --first-parent option shows commits that lack the
   UNINTERESTING bit only along the first-parent chain.

 * The command line completion script (in contrib/) learned to
   complete all Git subcommands, including the ones that are normally
   hidden, when GIT_COMPLETION_SHOW_ALL_COMMANDS is used.

 * "git branch" learned the "--recurse-submodules" option.

 * A not-so-common mistake is to write a script to feed "git bisect
   run" without making it executable, in which case all tests will
   exit with 126 or 127 error codes, even on revisions that are marked
   as good.  Try to recognize this situation and stop iteration early.

 * When "index-pack" dies due to incoming data exceeding the maximum
   allowed input size, include the value of the limit in the error
   message.

 * The error message given by "git switch HEAD~4" has been clarified
   to suggest the "--detach" option that is required.

 * In sparse-checkouts, files mis-marked as missing from the working tree
   could lead to later problems.  Such files were hard to discover, and
   harder to correct.  Automatically detecting and correcting the marking
   of such files has been added to avoid these problems.

 * "git cat-file" learns "--batch-command" mode, which is a more
   flexible interface than the existing "--batch" or "--batch-check"
   modes, to allow different kinds of inquiries made.

 * The level of verbose output from the ort backend during inner merge
   has been aligned to that of the recursive backend.

 * "git remote rename A B", depending on the number of remote-tracking
   refs involved, takes long time renaming them.  The command has been
   taught to show progress bar while making the user wait.

 * Bundle file format gets extended to allow a partial bundle,
   filtered by similar criteria you would give when making a
   partial/lazy clone.

 * A new built-in userdiff driver for kotlin has been added.

 * "git repack" learned a new configuration to disable triggering of
   age-old "update-server-info" command, which is rarely useful these
   days.

 * "git stash" does not allow subcommands it internally runs as its
   implementation detail, except for "git reset", to emit messages;
   now "git reset" part has also been squelched.

 * "git ls-tree" learns "--oid-only" option, similar to "--name-only",
   and more generalized "--format" option.

 * "git fetch --refetch" learned to fetch everything without telling
   the other side what we already have, which is useful when you
   cannot trust what you have in the local object store.

 * "git branch" gives hint when branch tracking cannot be established
   because fetch refspecs from multiple remote repositories overlap.

 * "git worktree list --porcelain" did not c-quote pathnames and lock
   reasons with unsafe bytes correctly, which is worked around by
   introducing NUL terminated output format with "-z".


Performance, Internal Implementation, Development Support etc.

 * "git apply" (ab)used the util pointer of the string-list to keep
   track of how each symbolic link needs to be handled, which has been
   simplified by using strset.

 * Fix a hand-rolled alloca() imitation that may have violated
   alignment requirement of data being sorted in compatibility
   implementation of qsort_s() and stable qsort().

 * Use the parse-options API in "git reflog" command.

 * The conditional inclusion mechanism of configuration files using
   "[includeIf <condition>]" learns to base its decision on the
   URL of the remote repository the repository interacts with.
   (merge 399b198489 jt/conditional-config-on-remote-url later to maint).

 * "git name-rev --stdin" does not behave like usual "--stdin" at
   all.  Start the process of renaming it to "--annotate-stdin".
   (merge a2585719b3 jc/name-rev-stdin later to maint).

 * "git update-index", "git checkout-index", and "git clean" are
   taught to work better with the sparse checkout feature.

 * Use an internal call to reset_head() helper function instead of
   spawning "git checkout" in "rebase", and update code paths that are
   involved in the change.

 * Messages "ort" merge backend prepares while dealing with conflicted
   paths were unnecessarily confusing since it did not differentiate
   inner merges and outer merges.

 * Small modernization of the rerere-train script (in contrib/).

 * Use designated initializers we started using in mid 2017 in more
   parts of the codebase that are relatively quiescent.

 * Improve failure case behaviour of xdiff library when memory
   allocation fails.

 * General clean-up in reftable implementation, including
   clarification of the API documentation, tightening the code to
   honor documented length limit, etc.

 * Remove the escape hatch we added when we introduced the weather
   balloon to use variadic macros unconditionally, to make it official
   that we now have a hard dependency on the feature.

 * Makefile refactoring with a bit of suffixes rule stripping to
   optimize the runtime overhead.

 * "git stash drop" is reimplemented as an internal call to
   reflog_delete() function, instead of invoking "git reflog delete"
   via run_command() API.

 * Count string_list items in size_t, not "unsigned int".

 * The single-key interactive operation used by "git add -p" has been
   made more robust.

 * Remove unneeded <meta http-equiv=content-type...> from gitweb
   output.

 * "git name-rev" learned to use the generation numbers when setting
   the lower bound of searching commits used to explain the revision,
   when available, instead of committer time.

 * Replace core.fsyncObjectFiles with two new configuration variables,
   core.fsync and core.fsyncMethod.

 * Updates to refs traditionally weren't fsync'ed, but we can
   configure using core.fsync variable to do so.

 * "git reflog" command now uses parse-options API to parse its
   command line options.


Fixes since v2.35
-----------------

 * "rebase" and "stash" in secondary worktrees are broken in
   Git 2.35.0, which has been corrected.

 * "git pull --rebase" ignored the rebase.autostash configuration
   variable when the remote history is a descendant of our history,
   which has been corrected.
   (merge 3013d98d7a pb/pull-rebase-autostash-fix later to maint).

 * "git update-index --refresh" has been taught to deal better with
   racy timestamps (just like "git status" already does).
   (merge 2ede073fd2 ms/update-index-racy later to maint).

 * Avoid tests that are run under GIT_TRACE2 set from failing
   unnecessarily.
   (merge 944d808e42 js/test-unset-trace2-parents later to maint).

 * The merge-ort misbehaved when merge.renameLimit configuration is
   set too low and failed to find all renames.
   (merge 9ae39fef7f en/merge-ort-restart-optim-fix later to maint).

 * We explain that revs come first before the pathspec among command
   line arguments, but did not spell out that dashed options come
   before other args, which has been corrected.
   (merge c11f95010c tl/doc-cli-options-first later to maint).

 * "git add -p" rewritten in C regressed hunk splitting in some cases,
   which has been corrected.
   (merge 7008ddc645 pw/add-p-hunk-split-fix later to maint).

 * "git fetch --negotiate-only" is an internal command used by "git
   push" to figure out which part of our history is missing from the
   other side.  It should never recurse into submodules even when
   fetch.recursesubmodules configuration variable is set, nor it
   should trigger "gc".  The code has been tightened up to ensure it
   only does common ancestry discovery and nothing else.
   (merge de4eaae63a gc/fetch-negotiate-only-early-return later to maint).

 * The code path that verifies signatures made with ssh were made to
   work better on a system with CRLF line endings.
   (merge caeef01ea7 fs/ssh-signing-crlf later to maint).

 * "git sparse-checkout init" failed to write into $GIT_DIR/info
   directory when the repository was created without one, which has
   been corrected to auto-create it.
   (merge 7f44842ac1 jt/sparse-checkout-leading-dir-fix later to maint).

 * Cloning from a repository that does not yet have any branches or
   tags but has other refs resulted in a "remote transport reported
   error", which has been corrected.
   (merge dccea605b6 jt/clone-not-quite-empty later to maint).

 * Mark in various places in the code that the sparse index and the
   split index features are mutually incompatible.
   (merge 451b66c533 js/sparse-vs-split-index later to maint).

 * Update the logic to compute alignment requirement for our mem-pool.
   (merge e38bcc66d8 jc/mem-pool-alignment later to maint).

 * Pick a better random number generator and use it when we prepare
   temporary filenames.
   (merge 47efda967c bc/csprng-mktemps later to maint).

 * Update the contributor-facing documents on proposed log messages.
   (merge cdba0295b0 jc/doc-log-messages later to maint).

 * When "git fetch --prune" failed to prune the refs it wanted to
   prune, the command issued error messages but exited with exit
   status 0, which has been corrected.
   (merge c9e04d905e tg/fetch-prune-exit-code-fix later to maint).

 * Problems identified by Coverity in the reftable code have been
   corrected.
   (merge 01033de49f hn/reftable-coverity-fixes later to maint).

 * A bug that made multi-pack bitmap and the object order out-of-sync,
   making the .midx data corrupt, has been fixed.
   (merge f8b60cf99b tb/midx-bitmap-corruption-fix later to maint).

 * The build procedure has been taught to notice older version of zlib
   and enable our replacement uncompress2() automatically.
   (merge 07564773c2 ab/auto-detect-zlib-compress2 later to maint).

 * Interaction between fetch.negotiationAlgorithm and
   feature.experimental configuration variables has been corrected.
   (merge 714edc620c en/fetch-negotiation-default-fix later to maint).

 * "git diff --diff-filter=aR" is now parsed correctly.
   (merge 75408ca949 js/diff-filter-negation-fix later to maint).

 * When "git subtree" wants to create a merge, it used "git merge" and
   let it be affected by end-user's "merge.ff" configuration, which
   has been corrected.
   (merge 9158a3564a tk/subtree-merge-not-ff-only later to maint).

 * Unlike "git apply", "git patch-id" did not handle patches with
   hunks that has only 1 line in either preimage or postimage, which
   has been corrected.
   (merge 757e75c81e jz/patch-id-hunk-header-parsing-fix later to maint).

 * "receive-pack" checks if it will do any ref updates (various
   conditions could reject a push) before received objects are taken
   out of the temporary directory used for quarantine purposes, so
   that a push that is known-to-fail will not leave crufts that a
   future "gc" needs to clean up.
   (merge 5407764069 cb/clear-quarantine-early-on-all-ref-update-errors later to maint).

 * Because a deletion of ref would need to remove it from both the
   loose ref store and the packed ref store, a delete-ref operation
   that logically removes one ref may end up invoking ref-transaction
   hook twice, which has been corrected.
   (merge 2ed1b64ebd ps/avoid-unnecessary-hook-invocation-with-packed-refs later to maint).

 * When there is no object to write .bitmap file for, "git
   multi-pack-index" triggered an error, instead of just skipping,
   which has been corrected.
   (merge eb57277ba3 tb/midx-no-bitmap-for-no-objects later to maint).

 * "git cmd -h" outside a repository should error out cleanly for many
   commands, but instead it hit a BUG(), which has been corrected.
   (merge 87ad07d735 js/short-help-outside-repo-fix later to maint).

 * "working tree" and "per-worktree ref" were in glossary, but
   "worktree" itself wasn't, which has been corrected.
   (merge 2df5387ed0 jc/glossary-worktree later to maint).

 * L10n support for a few error messages.
   (merge 3d3c23b3a7 bs/forbid-i18n-of-protocol-token-in-fetch-pack later to maint).

 * Test modernization.
   (merge d4fe066e4b sy/t0001-use-path-is-helper later to maint).

 * "git log --graph --graph" used to leak a graph structure, and there
   was no way to countermand "--graph" that appear earlier on the
   command line.  A "--no-graph" option has been added and resource
   leakage has been plugged.

 * Error output given in response to an ambiguous object name has been
   improved.
   (merge 3a73c1dfaf ab/ambiguous-object-name later to maint).

 * "git sparse-checkout" wants to work with per-worktree configuration,
   but did not work well in a worktree attached to a bare repository.
   (merge 3ce1138272 ds/sparse-checkout-requires-per-worktree-config later to maint).

 * Setting core.untrackedCache to true failed to add the untracked
   cache extension to the index.

 * Workaround we have for versions of PCRE2 before their version 10.36
   were in effect only for their versions newer than 10.36 by mistake,
   which has been corrected.
   (merge 97169fc361 rs/pcre-invalid-utf8-fix-fix later to maint).

 * Document Taylor as a new member of Git PLC at SFC.  Welcome.
   (merge e8d56ca863 tb/coc-plc-update later to maint).

 * "git checkout -b branch/with/multi/level/name && git stash" only
   recorded the last level component of the branch name, which has
   been corrected.

 * "git fetch" can make two separate fetches, but ref updates coming
   from them were in two separate ref transactions under "--atomic",
   which has been corrected.

 * Check the return value from parse_tree_indirect() to turn segfaults
   into calls to die().
   (merge 8d2eaf649a gc/parse-tree-indirect-errors later to maint).

 * Newer version of GPGSM changed its output in a backward
   incompatible way to break our code that parses its output.  It also
   added more processes our tests need to kill when cleaning up.
   Adjustments have been made to accommodate these changes.
   (merge b0b70d54c4 fs/gpgsm-update later to maint).

 * The untracked cache newly computed weren't written back to the
   on-disk index file when there is no other change to the index,
   which has been corrected.

 * "git config -h" did not describe the "--type" option correctly.
   (merge 5445124fad mf/fix-type-in-config-h later to maint).

 * The way generation number v2 in the commit-graph files are
   (not) handled has been corrected.
   (merge 6dbf4b8172 ds/commit-graph-gen-v2-fixes later to maint).

 * The method to trigger malloc check used in our tests no longer work
   with newer versions of glibc.
   (merge baedc59543 ep/test-malloc-check-with-glibc-2.34 later to maint).

 * When "git fetch --recurse-submodules" grabbed submodule commits
   that would be needed to recursively check out newly fetched commits
   in the superproject, it only paid attention to submodules that are
   in the current checkout of the superproject.  We now do so for all
   submodules that have been run "git submodule init" on.

 * "git rebase $base $non_branch_commit", when $base is an ancestor or
   the $non_branch_commit, modified the current branch, which has been
   corrected.

 * When "shallow" information is updated, we forgot to update the
   in-core equivalent, which has been corrected.

 * When creating a loose object file, we didn't report the exact
   filename of the file we failed to fsync, even though the
   information was readily available, which has been corrected.

 * "git am" can read from the standard input when no mailbox is given
   on the command line, but the end-user gets no indication when it
   happens, making Git appear stuck.
   (merge 7b20af6a06 jc/mailsplit-warn-on-tty later to maint).

 * "git mv" failed to refresh the cached stat information for the
   entry it moved.
   (merge b7f9130a06 vd/mv-refresh-stat later to maint).

 * Fix for CVE-2022-24765 has been merged up from 2.35.2 and others.

 * Other code cleanup, docfix, build fix, etc.
   (merge cfc5cf428b jc/find-header later to maint).
   (merge 40e7cfdd46 jh/p4-fix-use-of-process-error-exception later to maint).
   (merge 727e6ea350 jh/p4-spawning-external-commands-cleanup later to maint).
   (merge 0a6adc26e2 rs/grep-expr-cleanup later to maint).
   (merge 4ed7dfa713 po/readme-mention-contributor-hints later to maint).
   (merge 6046f7a91c en/plug-leaks-in-merge later to maint).
   (merge 8c591dbfce bc/clarify-eol-attr later to maint).
   (merge 518e15db74 rs/parse-options-lithelp-help later to maint).
   (merge cbac0076ef gh/doc-typos later to maint).
   (merge ce14de03db ab/no-errno-from-resolve-ref-unsafe later to maint).
   (merge 2826ffad8c rc/negotiate-only-typofix later to maint).
   (merge 0f03f04c5c en/sparse-checkout-leakfix later to maint).
   (merge 74f3390dde sy/diff-usage-typofix later to maint).
   (merge 45d0212a71 ll/doc-mktree-typofix later to maint).
   (merge e9b272e4c1 js/no-more-legacy-stash later to maint).
   (merge 6798b08e84 ab/do-not-hide-failures-in-git-dot-pm later to maint).
   (merge 9325285df4 po/doc-check-ignore-markup-fix later to maint).
   (merge cd26cd6c7c sy/modernize-t-lib-read-tree-m-3way later to maint).
   (merge d17294a05e ab/hash-object-leakfix later to maint).
   (merge b8403129d3 jd/t0015-modernize later to maint).
   (merge 332acc248d ds/mailmap later to maint).
   (merge 04bf052eef ab/grep-patterntype later to maint).
   (merge 6ee36364eb ab/diff-free-more later to maint).
   (merge 63a36017fe nj/read-tree-doc-reffix later to maint).
   (merge eed36fce38 sm/no-git-in-upstream-of-pipe-in-tests later to maint).
   (merge c614beb933 ep/t6423-modernize later to maint).
   (merge 57be9c6dee ab/reflog-prep-fix later to maint).
   (merge 5327d8982a js/in-place-reverse-in-sequencer later to maint).
   (merge 2e2c0be51e dp/worktree-repair-in-usage later to maint).
   (merge 6563706568 jc/coding-guidelines-decl-in-for-loop later to maint).

----------------------------------------------------------------

Changes since v2.35.2 are as follows:

Abhradeep Chakraborty (2):
      amend remaining usage strings according to style guide
      partial-clone: add a partial-clone test case

Adam Dinwoodie (2):
      configure.ac: fix HAVE_SYNC_FILE_RANGE definition
      t9902: split test to run on appropriate systems

Alex Henrie (3):
      log: fix memory leak if --graph is passed multiple times
      log: add a --no-graph option
      switch: mention the --detach option when dying due to lack of a branch

Atharva Raykar (5):
      submodule--helper: get remote names from any repository
      submodule--helper: refactor get_submodule_displaypath()
      submodule--helper: allow setting superprefix for init_submodule()
      submodule--helper: run update using child process struct
      submodule: move core cmd_update() logic to C

Bagas Sanjaya (1):
      fetch-pack: parameterize message containing 'ready' keyword

COGONI Guillaume (3):
      t/t3903-stash.sh: replace test [-d|-f] with test_path_is_*
      tests: allow testing if a path is truly a file or a directory
      tests: make the code more readable

Carlo Marcelo Arenas Belón (1):
      git-compat-util: really support openssl as a source of entropy

Chen Bojun (1):
      receive-pack: purge temporary data if no command is ready to run

David Cantrell (1):
      completion: tab completion of filenames for 'git restore'

Derrick Stolee (45):
      Documentation: add extensions.worktreeConfig details
      worktree: create init_worktree_config()
      config: add repo_config_set_worktree_gently()
      sparse-checkout: set worktree-config correctly
      worktree: copy sparse-checkout patterns and config on add
      config: make git_configset_get_string_tmp() private
      mailmap: change primary address for Derrick Stolee
      dir: force untracked cache with core.untrackedCache
      worktree: combine two translatable messages
      worktree: extract copy_filtered_worktree_config()
      worktree: extract copy_sparse_checkout()
      worktree: extract checkout_worktree()
      worktree: use 'worktree' over 'working tree'
      worktree: use 'worktree' over 'working tree'
      worktree: use 'worktree' over 'working tree'
      worktree: use 'worktree' over 'working tree'
      worktree: use 'worktree' over 'working tree'
      worktree: use 'worktree' over 'working tree'
      worktree: use 'worktree' over 'working tree'
      test-read-graph: include extra post-parse info
      t5318: extract helpers to lib-commit-graph.sh
      commit-graph: fix ordering bug in generation numbers
      commit-graph: start parsing generation v2 (again)
      commit-graph: fix generation number v2 overflow values
      commit-graph: declare bankruptcy on GDAT chunks
      index-pack: document and test the --promisor option
      list-objects-filter-options: create copy helper
      revision: put object filter into struct rev_info
      pack-objects: use rev.filter when possible
      pack-bitmap: drop filter in prepare_bitmap_walk()
      list-objects: consolidate traverse_commit_list[_filtered]
      MyFirstObjectWalk: update recommended usage
      bundle: parse filter capability
      rev-list: move --filter parsing into revision.c
      bundle: create filtered bundles
      bundle: unbundle promisor packs
      clone: fail gracefully when cloning filtered bundle
      maintenance: fix synopsis in documentation
      list-objects-filter: remove CL_ARG__FILTER
      pack-objects: move revs out of get_object_list()
      pack-objects: parse --filter directly into revs.filter
      bundle: move capabilities to end of 'verify'
      bundle: output hash information in 'verify'
      t7700: check post-condition in kept-pack test
      test-lib-functions: remove test_subcommand_inexact

Des Preston (1):
      worktree: include repair cmd in usage

Elia Pinto (8):
      test-lib.sh: Use GLIBC_TUNABLES instead of MALLOC_CHECK_ on glibc >= 2.34
      t6423-merge-rename-directories.sh: use the $(...) construct
      attr.c: delete duplicate include
      builtin/gc.c: delete duplicate include
      builtin/sparse-checkout.c: delete duplicate include
      builtin/stash.c: delete duplicate include
      t/helper/test-run-command.c: delete duplicate include
      attr.h: remove duplicate struct definition

Elijah Newren (32):
      t1011: add testcase demonstrating accidental loss of user modifications
      unpack-trees: fix accidental loss of user changes
      repo_read_index: clear SKIP_WORKTREE bit from files present in worktree
      Update documentation related to sparsity and the skip-worktree bit
      Accelerate clear_skip_worktree_from_present_files() by caching
      merge-ort: avoid assuming all renames detected
      merge-ort: fix memory leak in merge_ort_internal()
      merge: fix memory leaks in cmd_merge()
      sparse-checkout: fix a couple minor memory leaks
      repo-settings: fix checking for fetch.negotiationAlgorithm=default
      repo-settings: fix error handling for unknown values
      repo-settings: rename the traditional default fetch.negotiationAlgorithm
      show, log: provide a --remerge-diff capability
      log: clean unneeded objects during `log --remerge-diff`
      ll-merge: make callers responsible for showing warnings
      merge-ort: capture and print ll-merge warnings in our preferred fashion
      merge-ort: mark a few more conflict messages as omittable
      merge-ort: format messages slightly different for use in headers
      diff: add ability to insert additional headers for paths
      show, log: include conflict/warning messages in --remerge-diff headers
      merge-ort: mark conflict/warning messages from inner merges as omittable
      diff-merges: avoid history simplifications when diffing merges
      merge-ort: make informational messages from recursive merges clearer
      sparse-checkout: correct reapply's handling of options
      sparse-checkout: correctly set non-cone mode when expected
      sparse-checkout: pay attention to prefix for {set, add}
      sparse-checkout: error or warn when given individual files
      sparse-checkout: reject arguments in cone-mode that look like patterns
      merge-ort: fix small memory leak in detect_and_process_renames()
      merge-ort: fix small memory leak in unique_path()
      merge-ort: exclude messages from inner merges by default
      repo_read_index: add config to expect files outside sparse patterns

Emily Shaffer (14):
      hook: add 'run' subcommand
      gc: use hook library for pre-auto-gc hook
      am: convert {pre,post}-applypatch to use hook.h
      rebase: convert pre-rebase to use hook.h
      am: convert applypatch-msg to use hook.h
      merge: convert post-merge to use hook.h
      hooks: convert non-worktree 'post-checkout' hook to hook library
      hooks: convert worktree 'post-checkout' hook to hook library
      send-email: use 'git hook run' for 'sendemail-validate'
      git-p4: use 'git hook' to run hooks
      commit: convert {pre-commit,prepare-commit-msg} hook to hook.h
      read-cache: convert post-index-change to use hook.h
      receive-pack: convert push-to-checkout hook to hook.h
      run-command: remove old run_hook_{le,ve}() hook API

Fabian Stelzer (2):
      gpg-interface: trim CR from ssh-keygen
      gpg-interface/gpgsm: fix for v2.3

Fangyi Zhou (1):
      submodule-helper: fix usage string

Glen Choo (39):
      fetch: use goto cleanup in cmd_fetch()
      fetch: skip tasks related to fetching objects
      fetch --negotiate-only: do not update submodules
      branch: move --set-upstream-to behavior to dwim_and_setup_tracking()
      branch: make create_branch() always create a branch
      branch: add a dry_run parameter to create_branch()
      builtin/branch: consolidate action-picking logic in cmd_branch()
      branch: add --recurse-submodules option for branch creation
      branch.c: use 'goto cleanup' in setup_tracking() to fix memory leaks
      stash: strip "refs/heads/" with skip_prefix
      checkout, clone: die if tree cannot be parsed
      submodule--helper: remove update-module-mode
      submodule--helper: reorganize code for sh to C conversion
      submodule--helper run-update-procedure: remove --suboid
      submodule--helper run-update-procedure: learn --remote
      submodule--helper update-clone: learn --init
      submodule--helper: remove ensure-core-worktree
      submodule update: add tests for --filter
      submodule--helper update-clone: check for --filter and --init
      t5526: introduce test helper to assert on fetches
      t5526: stop asserting on stderr literally
      t5526: create superproject commits with test helper
      submodule: make static functions read submodules from commits
      submodule: inline submodule_commits() into caller
      submodule: store new submodule commits oid_array in a struct
      submodule: extract get_fetch_task()
      submodule: move logic into fetch_task_create()
      submodule update: use die_message()
      submodule--helper: teach update_data more options
      submodule--helper: reduce logic in run_update_procedure()
      submodule--helper: remove forward declaration
      fetch: fetch unpopulated, changed submodules
      submodule: fix latent check_has_commit() bug
      branch: support more tracking modes when recursing
      branch: give submodule updating advice before exit
      branch --set-upstream-to: be consistent when advising
      branch: remove negative exit code
      branch: rework comments for future developers
      branch.c: simplify advice-and-die sequence

Greg Hurrell (2):
      Documentation/config/pgp.txt: replace stray <TAB> character with <SPC>
      Documentation/config/pgp.txt: add missing apostrophe

Han-Wen Nienhuys (27):
      reftable: fix OOB stack write in print functions
      reftable: fix resource leak in block.c error path
      reftable: fix resource leak blocksource.c
      reftable: check reftable_stack_auto_compact() return value
      reftable: ignore remove() return value in stack_test.c
      reftable: fix resource warning
      reftable: all xxx_free() functions accept NULL arguments
      reftable: order unittests by complexity
      reftable: drop stray printf in readwrite_test
      reftable: handle null refnames in reftable_ref_record_equal
      reftable: make reftable-record.h function signatures const correct
      reftable: implement record equality generically
      reftable: remove outdated file reftable.c
      reftable: make reftable_record a tagged union
      reftable: add print functions to the record types
      t1405: explictly delete reflogs for reftable
      t1405: mark test that checks existence as REFFILES
      t5312: prepare for reftable
      t1410: use test-tool ref-store to inspect reflogs
      t1410: mark bufsize boundary test as REFFILES
      Documentation: object_id_len goes up to 31
      reftable: reject 0 object_id_len
      reftable: add a test that verifies that writing empty keys fails
      reftable: avoid writing empty keys at the block layer
      reftable: ensure that obj_id_len is >= 2 on writing
      reftable: add test for length of disambiguating prefix
      reftable: rename writer_stats to reftable_writer_stats

Jacob Keller (1):
      name-rev: use generation numbers if available

Jason Yundt (2):
      comment: fix typo
      gitweb: remove invalid http-equiv="content-type"

Jayati Shrivastava (1):
      sequencer: use reverse_commit_list() helper

Jaydeep Das (1):
      t/t0015-hash.sh: remove unnecessary '\' at line end

Jaydeep P Das (1):
      userdiff: add builtin diff driver for kotlin language.

Jean-Noël Avila (5):
      i18n: factorize more 'incompatible options' messages
      i18n: factorize "invalid value" messages
      i18n: remove from i18n strings that do not hold translatable parts
      i18n: fix some misformated placeholders in command synopsis
      i18n: fix some badly formatted i18n strings

Jeff Hostetler (30):
      fsmonitor: enhance existing comments, clarify trivial response handling
      fsmonitor-ipc: create client routines for git-fsmonitor--daemon
      fsmonitor: config settings are repository-specific
      fsmonitor: use IPC to query the builtin FSMonitor daemon
      fsmonitor: document builtin fsmonitor
      fsmonitor--daemon: add a built-in fsmonitor daemon
      fsmonitor--daemon: implement 'stop' and 'status' commands
      compat/fsmonitor/fsm-listen-win32: stub in backend for Windows
      compat/fsmonitor/fsm-listen-darwin: stub in backend for Darwin
      fsmonitor--daemon: implement 'run' command
      fsmonitor--daemon: implement 'start' command
      fsmonitor--daemon: add pathname classification
      fsmonitor--daemon: define token-ids
      fsmonitor--daemon: create token-based changed path cache
      compat/fsmonitor/fsm-listen-win32: implement FSMonitor backend on Windows
      compat/fsmonitor/fsm-listen-darwin: add MacOS header files for FSEvent
      compat/fsmonitor/fsm-listen-darwin: implement FSEvent listener on MacOS
      fsmonitor--daemon: implement handle_client callback
      help: include fsmonitor--daemon feature flag in version info
      t/helper/fsmonitor-client: create IPC client to talk to FSMonitor Daemon
      t7527: create test for fsmonitor--daemon
      t/perf: avoid copying builtin fsmonitor files into test repo
      t/helper/test-chmtime: skip directories on Windows
      t/perf/p7519: fix coding style
      t/perf/p7519: speed up test on Windows
      t/perf/p7519: add fsmonitor--daemon test cases
      fsmonitor--daemon: periodically truncate list of modified files
      fsmonitor--daemon: use a cookie file to sync with file system
      fsmonitor: force update index after large responses
      t7527: test status with untracked-cache and fsmonitor--daemon

Jerry Zhang (3):
      git-rev-list: add --exclude-first-parent-only flag
      patch-id: fix antipatterns in tests
      patch-id: fix scan_hunk_header on diffs with 1 line of before/after

Jessica Clarke (1):
      mem-pool: don't assume uintmax_t is aligned enough for all types

Joel Holdsworth (4):
      git-p4: don't select shell mode using the type of the command argument
      git-p4: pass command arguments as lists instead of using shell
      git-p4: don't print shell commands as python lists
      git-p4: fix instantiation of CalledProcessError

Johannes Schindelin (14):
      sparse-index: sparse index is disallowed when split index is active
      t1091: disable split index
      split-index: it really is incompatible with the sparse index
      git-sh-setup: remove remnant bits referring to `git-legacy-stash`
      add: remove support for `git-legacy-stash`
      stash: remove documentation for `stash.useBuiltin`
      stash: stop warning about the obsolete `stash.useBuiltin` config setting
      docs(diff): lose incorrect claim about `diff-files --diff-filter=A`
      diff.c: move the diff filter bits definitions up a bit
      diff-filter: be more careful when looking for negative bits
      scalar: accept -C and -c options before the subcommand
      checkout/fetch/pull/pack-objects: allow `-h` outside a repository
      t0012: verify that built-ins handle `-h` even without gitdir
      cocci: allow padding with `strbuf_addf()`

John Cai (15):
      receive-pack.c: consolidate find header logic
      name-rev: deprecate --stdin in favor of --annotate-stdin
      name-rev.c: use strbuf_getline instead of limited size buffer
      builtin/reflog.c: use parse-options api for expire, delete subcommands
      name-rev: replace --stdin with --annotate-stdin in synopsis
      cat-file: rename cmdmode to transform_mode
      cat-file: introduce batch_mode enum to replace print_contents
      cat-file: add remove_timestamp helper
      cat-file: add --batch-command mode
      stash: add tests to ensure reflog --rewrite --updatref behavior
      reflog: libify delete reflog function and helpers
      stash: call reflog_delete() in reflog.c
      cat-file: skip expanding default format
      rebase: use test_commit helper in setup
      rebase: set REF_HEAD_DETACH in checkout_up_to_date()

Jonathan Tan (6):
      config: make git_config_include() static
      config: include file if remote URL matches a glob
      sparse-checkout: create leading directory
      clone: support unusual remote ref configurations
      ls-files: support --recurse-submodules --stage
      shallow: reset commit grafts when shallow is reset

Josh Steadmon (3):
      test-lib: unset trace2 parent envvars
      clone, submodule: pass partial clone filters to submodules
      ls-tree: `-l` should not imply recursive listing

Junio C Hamano (32):
      compat/qsort_s.c: avoid using potentially unaligned access
      fetch: help translators by reusing the same message template
      Start post 2.35 cycle
      SubmittingPatches: write problem statement in the log in the present tense
      CodingGuidelines: hint why we value clearly written log messages
      SubmittingPatches: explain why we care about log messages
      Name the next one 2.36 to prepare for 2.35.1
      The first batch
      The second batch for 2.36
      glossary: describe "worktree"
      The third batch
      The fourth batch
      The fifth batch
      The sixth batch
      The seventh batch
      The eighth batch
      rerere-train: two fixes to the use of "git show -s"
      am/apply: warn if we end up reading patches from terminal
      The ninth batch
      The tenth batch
      The eleventh batch
      The twelfth batch
      The thirteenth batch
      The 14th batch
      reset: show --no-refresh in the short-help
      The 15th batch
      The 16th batch
      The 17th batch
      CodingGuidelines: give deadline for "for (int i = 0; ..."
      Git 2.36-rc0
      Git 2.36-rc1
      Git 2.36-rc2

Justin Donnelly (4):
      git-prompt: rename `upstream` to `upstream_type`
      git-prompt: make upstream state indicator location consistent
      git-prompt: make long upstream state indicator consistent
      git-prompt: put upstream comments together

Lessley Dennington (3):
      completion: address sparse-checkout issues
      completion: improve sparse-checkout cone mode directory completion
      completion: handle unusual characters for sparse-checkout

Liginity Lee (1):
      fix typo in git-mktree.txt

Marc Strapetz (4):
      test-lib: introduce API for verifying file mtime
      t7508: fix bogus mtime verification
      t7508: add tests capturing racy timestamp handling
      update-index: refresh should rewrite index in case of racy timestamps

Martin Ågren (1):
      git-ls-tree.txt: fix the name of "%(objectsize:padded)"

Matheus Felipe (1):
      config: correct "--type" option in "git config -h" output

Matt Cooper (1):
      index-pack: clarify the breached limit

Michael J Gruber (2):
      test-lib: declare local variables as local
      tests: demonstrate "show --word-diff --color-moved" regression

Neeraj Singh (10):
      wrapper: make inclusion of Windows csprng header tightly scoped
      core.fsyncmethod: add writeout-only mode
      core.fsync: introduce granular fsync control infrastructure
      core.fsync: add configuration parsing
      core.fsync: new option to harden the index
      core.fsync: documentation and user-friendly aggregate options
      core.fsync: fix incorrect expression for default configuration
      trace2: add stats for fsync operations
      core.fsyncmethod: correctly camel-case warning message
      object-file: pass filename to fsync_or_die

Nihal Jere (1):
      Documentation: git-read-tree: separate links using commas

Patrick Steinhardt (24):
      refs: extract packed_refs_delete_refs() to allow control of transaction
      refs: allow passing flags when beginning transactions
      refs: allow skipping the reference-transaction hook
      refs: demonstrate excessive execution of the reference-transaction hook
      refs: do not execute reference-transaction hook on packing refs
      refs: skip hooks when deleting uncovered packed refs
      fetch-pack: use commit-graph when computing cutoff
      fetch: skip computing output width when not printing anything
      fetch: increase test coverage of fetches
      fetch: backfill tags before setting upstream
      fetch: control lifecycle of FETCH_HEAD in a single place
      fetch: report errors when backfilling tags fails
      refs: add interface to iterate over queued transactional updates
      fetch: make `--atomic` flag cover backfilling of tags
      fetch: make `--atomic` flag cover pruning of refs
      upload-pack: look up "want" lines via commit-graph
      fetch: avoid lookup of commits when not appending to FETCH_HEAD
      refs: add ability for backends to special-case reading of symbolic refs
      remote: read symbolic refs via `refs_read_symbolic_ref()`
      refs/files-backend: optimize reading of symbolic refs
      t5503: simplify setup of test which exercises failure of backfill
      repack: refactor to avoid double-negation of update-server-info
      repack: add config to skip updating server info
      core.fsync: new option to harden references

Philip Oakley (2):
      README.md: add CodingGuidelines and a link for Translators
      doc: check-ignore: code-quote an exclamation mark

Philippe Blain (1):
      pull --rebase: honor rebase.autostash when fast-forwarding

Phillip Wood (29):
      t3701: clean up hunk splitting tests
      builtin add -p: fix hunk splitting
      rebase: factor out checkout for up to date branch
      t5403: refactor rebase post-checkout hook tests
      rebase: pass correct arguments to post-checkout hook
      rebase: do not remove untracked files on checkout
      rebase --apply: don't run post-checkout hook if there is an error
      reset_head(): remove action parameter
      reset_head(): factor out ref updates
      reset_head(): make default_reflog_action optional
      create_autostash(): remove unneeded parameter
      rebase: cleanup reset_head() calls
      reset_head(): take struct rebase_head_opts
      rebase --apply: fix reflog
      rebase --apply: set ORIG_HEAD correctly
      rebase -m: don't fork git checkout
      xdiff: fix a memory leak
      xdiff: handle allocation failure in patience diff
      xdiff: refactor a function
      xdiff: handle allocation failure when merging
      terminal: always reset terminal when reading without echo
      terminal: pop signal handler when terminal is restored
      terminal: set VMIN and VTIME in non-canonical mode
      add -p: disable stdin buffering when interactive.singlekey is set
      terminal: use flags for save_term()
      terminal: don't assume stdin is /dev/tty
      terminal: work around macos poll() bug
      terminal: restore settings on SIGTSTP
      worktree: add -z option for list subcommand

René Scharfe (10):
      grep: use grep_or_expr() in compile_pattern_or()
      grep: use grep_not_expr() in compile_pattern_not()
      apply: use strsets to track symlinks
      stable-qsort: avoid using potentially unaligned access
      bisect--helper: report actual bisect_state() argument on error
      bisect--helper: release strbuf and strvec on run error
      bisect: document run behavior with exit codes 126 and 127
      bisect--helper: double-check run command on exit code 126 and 127
      parse-options: document bracketing of argh
      grep: fix triggering PCRE2_NO_START_OPTIMIZE workaround

Robert Coup (8):
      fetch: fix negotiate-only error message
      fetch-negotiator: add specific noop initializer
      fetch-pack: add refetch
      builtin/fetch-pack: add --refetch option
      fetch: add --refetch option
      t5615-partial-clone: add test for fetch --refetch
      fetch: after refetch, encourage auto gc repacking
      docs: mention --refetch fetch option

SZEDER Gábor (1):
      reflog: fix 'show' subcommand's argv

Shaoxuan Yuan (4):
      builtin/diff.c: fix "git-diff" usage string typo
      t/lib-read-tree-m-3way: modernize style
      t/lib-read-tree-m-3way: indent with tabs
      t0001: replace "test [-d|-f]" with test_path_is_* functions

Shubham Mishra (3):
      t0003: avoid pipes with Git on LHS
      t0001-t0028: avoid pipes with Git on LHS
      t0030-t0050: avoid pipes with Git on LHS

Tao Klerks (6):
      t7519: avoid file to index mtime race for untracked cache
      t7519: populate untracked cache before test
      untracked-cache: write index when populating empty untracked cache
      t/helper/test-chmtime: update mingw to support chmtime on directories
      t7063: mtime-mangling instead of delays in untracked cache testing
      tracking branches: add advice to ambiguous refspec error

Taylor Blau (15):
      grep: extract grep_binexp() from grep_or_expr()
      grep: use grep_and_expr() in compile_pattern_and()
      t5326: demonstrate bitmap corruption after permutation
      midx.c: make changing the preferred pack safe
      pack-revindex.c: instrument loading on-disk reverse index
      t5326: drop unnecessary setup
      t5326: extract `test_rev_exists`
      t5326: move tests to t/lib-bitmap.sh
      t/lib-bitmap.sh: parameterize tests over reverse index source
      midx: read `RIDX` chunk when present
      pack-bitmap.c: gracefully fallback after opening pack/MIDX
      midx: prevent writing a .bitmap without any objects
      CODE_OF_CONDUCT.md: update PLC members list
      builtin/remote.c: parse options in 'rename'
      builtin/remote.c: show progress when renaming remote references

Teng Long (6):
      git-cli.txt: clarify "options first and then args"
      ls-tree: rename "retval" to "recurse" in "show_tree()"
      ls-tree: simplify nesting if/else logic in "show_tree()"
      ls-tree: fix "--name-only" and "--long" combined use bug
      ls-tree: slightly refactor `show_tree()`
      ls-tree: support --object-only option for "git-ls-tree"

Thomas Gummerer (1):
      fetch --prune: exit with error if pruning fails

Thomas Koutcher (1):
      subtree: force merge commit

Todd Zullinger (3):
      t/lib-gpg: reload gpg components after updating trustlist
      t/lib-gpg: kill all gpg components, not just gpg-agent
      doc: replace "--" with {litdd} in credential-cache/fsmonitor

Victoria Dye (30):
      reset: fix validation in sparse index test
      reset: reorder wildcard pathspec conditions
      clean: integrate with sparse index
      checkout-index: expand sparse checkout compatibility tests
      checkout-index: add --ignore-skip-worktree-bits option
      checkout-index: integrate with sparse index
      update-index: add tests for sparse-checkout compatibility
      update-index: integrate with sparse index
      update-index: reduce scope of index expansion in do_reupdate
      sparse-index: prevent repo root from becoming sparse
      status: fix nested sparse directory diff in sparse index
      read-tree: explicitly disallow prefixes with a leading '/'
      read-tree: expand sparse checkout test coverage
      read-tree: integrate with sparse index
      read-tree: narrow scope of index expansion for '--prefix'
      read-tree: make two-way merge sparse-aware
      read-tree: make three-way merge sparse-aware
      reset: revise index refresh advice
      reset: introduce --[no-]refresh option to --mixed
      reset: replace '--quiet' with '--no-refresh' in performance advice
      reset: suppress '--no-refresh' advice if logging is silenced
      stash: make internal resets quiet and refresh index
      t1092: add sparse directory before cone in test repo
      unpack-trees: increment cache_bottom for sparse directories
      Revert "unpack-trees: improve performance of next_cache_entry"
      reset: do not make '--quiet' disable index refresh
      reset: remove 'reset.quiet' config option
      reset: remove 'reset.refresh' config option
      mv: refresh stat info for moved entry
      contrib/scalar: fix 'all' target in Makefile

brian m. carlson (6):
      t0027: add tests for eol without text in .gitattributes
      docs: correct documentation about eol attribute
      wrapper: add a helper to generate numbers from a CSPRNG
      wrapper: use a CSPRNG to generate random file names
      doc: clarify interaction between 'eol' and text=auto
      block-sha1: remove use of obsolete x86 assembly

Ævar Arnfjörð Bjarmason (186):
      cat-file tests: test bad usage
      cat-file tests: test messaging on bad objects/paths
      parse-options API: add a usage_msg_optf()
      cat-file docs: fix SYNOPSIS and "-h" output
      cat-file: move "usage" variable to cmd_cat_file()
      cat-file: make --batch-all-objects a CMDMODE
      cat-file: fix remaining usage bugs
      cat-file: correct and improve usage information
      object-name.c: don't have GET_OID_ONLY_TO_DIE imply *_QUIETLY
      cat-file: use GET_OID_ONLY_TO_DIE in --(textconv|filters)
      hook API: add a run_hooks() wrapper
      hook API: add a run_hooks_l() wrapper
      git hook run: add an --ignore-missing flag
      cat-file: don't whitespace-pad "(...)" in SYNOPSIS and usage output
      cat-file: s/_/-/ in typo'd usage_msg_optf() message
      compat: auto-detect if zlib has uncompress2()
      sequencer: don't use die_errno() on refs_resolve_ref_unsafe() failure
      refs API: remove "failure_errno" from refs_resolve_ref_unsafe()
      object-name tests: add tests for ambiguous object blind spots
      object-name: explicitly handle OBJ_BAD in show_ambiguous_object()
      object-name: explicitly handle bad tags in show_ambiguous_object()
      object-name: make ambiguous object output translatable
      object-name: show date for ambiguous tag objects
      object-name: iterate ambiguous objects before showing header
      object-name: re-use "struct strbuf" in show_ambiguous_object()
      perl Git.pm: don't ignore signalled failure in _cmd_close()
      completion tests: re-source git-completion.bash in a subshell
      completion: add a GIT_COMPLETION_SHOW_ALL_COMMANDS
      leak tests: fix a memory leak in "test-progress" helper
      progress.c test helper: add missing braces
      progress.c tests: make start/stop commands on stdin
      progress.c tests: test some invalid usage
      progress.h: format and be consistent with progress.c naming
      progress.c: use dereferenced "progress" variable, not "(*p_progress)"
      progress.c: refactor stop_progress{,_msg}() to use helpers
      progress API: unify stop_progress{,_msg}(), fix trace2 bug
      pack-bitmap-write.c: don't return without stop_progress()
      t0051: use "skip_all" under !MINGW in single-test file
      hash-object: fix a trivial leak in --path
      ls-remote & transport API: release "struct transport_ls_refs_options"
      grep.h: remove unused "regex_t regexp" from grep_opt
      log tests: check if grep_config() is called by "log"-like cmds
      grep tests: create a helper function for "BRE" or "ERE"
      grep tests: add missing "grep.patternType" config tests
      built-ins: trust the "prefix" from run_builtin()
      grep.c: don't pass along NULL callback value
      grep API: call grep_config() after grep_init()
      grep.h: make "grep_opt.pattern_type_option" use its enum
      grep.c: do "if (bool && memchr())" not "if (memchr() && bool)"
      grep: simplify config parsing and option parsing
      cache.h: remove always unused show_date_human() declaration
      date API: create a date.h, split from cache.h
      date API: provide and use a DATE_MODE_INIT
      date API: add basic API docs
      date API: add and use a date_mode_release()
      diff.[ch]: have diff_free() call clear_pathspec(opts.pathspec)
      diff.[ch]: have diff_free() free options->parseopts
      hook tests: test for exact "pre-push" hook input
      hook tests: use a modern style for "pre-push" tests
      git-compat-util.h: clarify GCC v.s. C99-specific in comment
      C99: remove hardcoded-out !HAVE_VARIADIC_MACROS code
      help doc: add missing "]" to "[-a|--all]"
      help.c: use puts() instead of printf{,_ln}() for consistency
      help tests: test "git" and "git help [-a|-g] spacing
      help.c: split up list_all_cmds_help() function
      help: note the option name on option incompatibility
      help: correct usage & behavior of "git help --all"
      help: error if [-a|-g|-c] and [-i|-m|-w] are combined
      help: add --no-[external-commands|aliases] for use with --all
      help: don't print "\n" before single-section output
      imap-send.c: use designated initializers for "struct imap_server_conf"
      trace2: use designated initializers for "struct tr2_tgt"
      trace2: use designated initializers for "struct tr2_dst"
      object-file: use designated initializers for "struct git_hash_algo"
      archive-*.c: use designated initializers for "struct archiver"
      userdiff.c: use designated initializers for "struct userdiff_driver"
      convert.c: use designated initializers for "struct stream_filter*"
      refspec.c: use designated initializers for "struct refspec_item"
      fast-import.c: use designated initializers for "partial" struct assignments
      object-file.c: split up declaration of unrelated variables
      object-file API: return "void", not "int" from hash_object_file()
      object-file API: add a format_object_header() function
      object-file API: have write_object_file() take "enum object_type"
      object API: correct "buf" v.s. "map" mismatch in *.c and *.h
      object API docs: move check_object_signature() docs to cache.h
      object API users + docs: check <0, not !0 with check_object_signature()
      object-file API: split up and simplify check_object_signature()
      object API: rename hash_object_file_literally() to write_*()
      object-file API: have hash_object_file() take "enum object_type"
      object-file.c: add a literal version of write_object_file_prepare()
      object-file API: pass an enum to read_object_with_reference()
      test-lib: add GIT_SAN_OPTIONS, inherit [AL]SAN_OPTIONS
      test-lib: correct and assert TEST_DIRECTORY overriding
      test-lib: make $GIT_BUILD_DIR an absolute path
      test-lib: add "fast_unwind_on_malloc=0" to LSAN_OPTIONS
      scalar Makefile: use "The default target of..." pattern
      Makefiles: add "shared.mak", move ".DELETE_ON_ERROR" to it
      Makefile: disable GNU make built-in wildcard rules
      Makefile: define $(LIB_H) in terms of $(FIND_SOURCE_FILES)
      Makefile: move ".SUFFIXES" rule to shared.mak
      Makefile: move $(comma), $(empty) and $(space) to shared.mak
      Makefile: add "$(QUIET)" boilerplate to shared.mak
      Makefiles: add and use wildcard "mkdir -p" template
      log tests: fix "abort tests early" regression in ff37a60c369
      index-pack: fix memory leaks
      merge-base: free() allocated "struct commit **" list
      diff.c: free "buf" in diff_words_flush()
      urlmatch.c: add and use a *_release() function
      remote-curl.c: free memory in cmd_main()
      bundle: call strvec_clear() on allocated strvec
      transport: stop needlessly copying bundle header references
      submodule--helper: fix trivial leak in module_add()
      commit-graph: fix memory leak in misused string_list API
      commit-graph: stop fill_oids_from_packs() progress on error and free()
      lockfile API users: simplify and don't leak "path"
      range-diff: plug memory leak in common invocation
      range-diff: plug memory leak in read_patches()
      repository.c: free the "path cache" in repo_clear()
      submodule tests: test for init and update failure output
      submodule--helper: don't use bitfield indirection for parse_options()
      gettext API users: don't explicitly cast ngettext()'s "n"
      string-list API: change "nr" and "alloc" to "size_t"
      merge: don't run post-hook logic on --no-verify
      hooks: fix an obscure TOCTOU "did we just run a hook?" race
      tests: change some 'test $(git) = "x"' to test_cmp
      tests: use "test_stdout_line_count", not "test $(git [...] | wc -l)"
      read-tree tests: check "diff-files" exit code on failure
      diff tests: don't ignore "git diff" exit code
      diff tests: don't ignore "git diff" exit code in "read" loop
      apply tests: use "test_must_fail" instead of ad-hoc pattern
      merge tests: use "test_must_fail" instead of ad-hoc pattern
      rev-parse tests: don't ignore "git reflog" exit code
      notes tests: don't ignore "git" exit code
      diff tests: don't ignore "git rev-list" exit code
      rev-list tests: don't hide abort() in "test_expect_failure"
      gettext tests: don't ignore "test-tool regex" exit code
      apply tests: don't ignore "git ls-files" exit code, drop sub-shell
      checkout tests: don't ignore "git <cmd>" exit code
      rev-list simplify tests: don't ignore "git" exit code
      list-objects: handle NULL function pointers
      reflog: don't be noisy on empty reflogs
      builtin/submodule--helper.c: rename option struct to "opt"
      test-lib-functions: add and use a "test_hook" wrapper
      hook tests: turn exit code assertions into a loop
      http tests: don't rely on "hook/post-update.sample"
      tests: assume the hooks are disabled by default
      bugreport tests: tighten up "git bugreport -s hooks" test
      fetch+push tests: use "test_hook" and "test_when_finished" pattern
      gc + p4 tests: use "test_hook", remove sub-shells
      tests: change "cat && chmod +x" to use "test_hook"
      tests: change "mkdir -p && write_script" to use "test_hook"
      tests: use "test_hook" for misc "mkdir -p" and "chmod" cases
      diff.c: fix a double-free regression in a18d66cefb
      refs: use designated initializers for "struct ref_storage_be"
      refs: use designated initializers for "struct ref_iterator_vtable"
      misc *.c: use designated initializers for struct assignments
      packed-backend: remove stub BUG(...) functions
      refs debug: add a wrapper for "read_symbolic_ref"
      tests: extend "test_hook" for "rm" and "chmod -x", convert "$HOOK"
      proc-receive hook tests: use "test_hook" instead of "write_script"
      http tests: use "test_hook" for "smart" and "dumb" http tests
      reflog.c: indent argument lists
      reflog: refactor cmd_reflog() to "if" branches
      reflog tests: add missing "git reflog exists" tests
      reflog: move "usage" variables and use macros
      git reflog [expire|delete]: make -h output consistent with SYNOPSIS
      reflog exists: use parse_options() API
      Makefile: use ' ', not non-existing $(wspfx_SQ)
      ls-tree tests: add tests for --name-status
      ls-tree: remove commented-out code
      ls-tree: add missing braces to "else" arms
      ls-tree: use "enum object_type", not {blob,tree,commit}_type
      ls-tree: use "size_t", not "int" for "struct strbuf"'s "len"
      ls-tree: introduce struct "show_tree_data"
      ls-tree: introduce "--format" option
      ls-tree: detect and error on --name-only --name-status
      ls-tree: split up "fast path" callbacks
      hooks: fix "invoked hook" regression in a8cc5943338
      reflog: convert to parse_options() API
      reflog [show]: display sensible -h output
      test-lib: have --immediate emit valid TAP on failure
      pack-objects: lazily set up "struct rev_info", don't leak
      reftable: make assignments portable to AIX xlc v12.01
      Documentation/Makefile: fix "make info" regression in dad9cd7d518
      Documentation: add --batch-command to cat-file synopsis
      ls-tree doc: document interaction with submodules



^ permalink raw reply	[relevance 3%]

* Re: [PATCH 2/7] rebase --merge: fix reflog when continuing
  2022-04-07 13:49  2%   ` Christian Couder
@ 2022-04-15 14:00  2%     ` Phillip Wood
  2022-04-17  1:57  2%       ` Elijah Newren
  0 siblings, 1 reply; 200+ results
From: Phillip Wood @ 2022-04-15 14:00 UTC (permalink / raw)
  To: Christian Couder, Phillip Wood via GitGitGadget; +Cc: git, Phillip Wood

Hi Chirstian

Thanks for taking a look at this series

On 07/04/2022 14:49, Christian Couder wrote:
> On Tue, Feb 22, 2022 at 6:12 AM Phillip Wood via GitGitGadget
> <gitgitgadget@gmail.com> wrote:
>>
>> From: Phillip Wood <phillip.wood@dunelm.org.uk>
>>
>> The reflog message for a conflict resolution committed by "rebase
>> --continue" looks like
>>
>>          rebase (continue): commit subject line
>>
>> Unfortunately the reflog message each subsequent pick look like
>>
>>          rebase (continue) (pick): commit subject line
>>
>> Fix this by setting the reflog message for "rebase --continue" in
>> sequencer_continue() so it does not affect subsequent commits. This
>> introduces a memory leak similar to the one leaking GIT_REFLOG_ACTION
>> in pick_commits(). Both of these will be fixed in a future series that
>> stops the sequencer calling setenv().
> 
> Yeah, it looks like we will leak only a small string.
> 
>> Signed-off-by: Phillip Wood <phillip.wood@dunelm.org.uk>
>> ---
>>   builtin/rebase.c          |   2 -
>>   sequencer.c               |   5 ++
>>   t/t3406-rebase-message.sh | 120 +++++++++++++++++++++++++-------------
> 
> The changes to the test script look a bit involved and aren't
> explained in the commit message. I wonder if some of those changes
> could have been made in a preparatory commit.

That's a good point. For some reason when I put the series together I 
thought it would be tricky to do that without the fixes in this commit 
but that is not actually the case so I'll split the test changes out.

Best Wishes

Phillip

> 
>>   3 files changed, 86 insertions(+), 41 deletions(-)

^ permalink raw reply	[relevance 2%]

* Re: [PATCH 3/7] rebase --merge: fix reflog message after skipping
  2022-02-21 11:10  2% ` [PATCH 3/7] rebase --merge: fix reflog message after skipping Phillip Wood via GitGitGadget
@ 2022-04-17  1:58  2%   ` Elijah Newren
  0 siblings, 0 replies; 200+ results
From: Elijah Newren @ 2022-04-17  1:58 UTC (permalink / raw)
  To: Phillip Wood via GitGitGadget; +Cc: Git Mailing List, Phillip Wood

On Mon, Feb 21, 2022 at 3:19 PM Phillip Wood via GitGitGadget
<gitgitgadget@gmail.com> wrote:
>
> From: Phillip Wood <phillip.wood@dunelm.org.uk>
>
> The reflog message for every pick after running "rebase --skip" looks
> like
>
>         rebase (skip) (pick): commit subject line
>
> Fix this by not appending " (skip)" to the reflog action.

Nice catch, and cool that the fix was so simple.

> Signed-off-by: Phillip Wood <phillip.wood@dunelm.org.uk>
> ---
>  builtin/rebase.c          |  2 --
>  t/t3406-rebase-message.sh | 24 ++++++++++++++++++++++++
>  2 files changed, 24 insertions(+), 2 deletions(-)
>
> diff --git a/builtin/rebase.c b/builtin/rebase.c
> index cd9a4f3e2f1..36863117fba 100644
> --- a/builtin/rebase.c
> +++ b/builtin/rebase.c
> @@ -1273,8 +1273,6 @@ int cmd_rebase(int argc, const char **argv, const char *prefix)
>                 struct string_list merge_rr = STRING_LIST_INIT_DUP;
>
>                 options.action = "skip";
> -               set_reflog_action(&options);
> -
>                 rerere_clear(the_repository, &merge_rr);
>                 string_list_clear(&merge_rr, 1);
>                 ropts.flags = RESET_HEAD_HARD;
> diff --git a/t/t3406-rebase-message.sh b/t/t3406-rebase-message.sh
> index 3ca2fbb0d59..8aa6a79acc1 100755
> --- a/t/t3406-rebase-message.sh
> +++ b/t/t3406-rebase-message.sh
> @@ -163,6 +163,30 @@ test_reflog () {
>         # check there is only one new entry in the branch reflog
>         test_cmp_rev fast-forward@{1} X
>         '
> +
> +       test_expect_success "rebase $mode --skip reflog${reflog_action:+ GIT_REFLOG_ACTION=$reflog_action}" '
> +       git checkout conflicts &&
> +       test_when_finished "git reset --hard Q" &&
> +
> +       (
> +               if test -n "$reflog_action"
> +               then
> +                       GIT_REFLOG_ACTION="$reflog_action" &&
> +                       export GIT_REFLOG_ACTION
> +               fi &&
> +               test_must_fail git rebase $mode main &&
> +               git rebase --skip
> +       ) &&
> +
> +       git log -g --format=%gs -4 >actual &&
> +       write_reflog_expect <<-EOF &&
> +       ${reflog_action:-rebase} (finish): returning to refs/heads/conflicts
> +       ${reflog_action:-rebase} (pick): Q
> +       ${reflog_action:-rebase} (pick): P
> +       ${reflog_action:-rebase} (start): checkout main
> +       EOF
> +       test_cmp expect actual
> +       '
>  }
>
>  test_reflog --merge
> --
> gitgitgadget
>

^ permalink raw reply	[relevance 2%]

* Re: [PATCH 2/7] rebase --merge: fix reflog when continuing
  2022-04-15 14:00  2%     ` Phillip Wood
@ 2022-04-17  1:57  2%       ` Elijah Newren
  0 siblings, 0 replies; 200+ results
From: Elijah Newren @ 2022-04-17  1:57 UTC (permalink / raw)
  To: Phillip Wood; +Cc: Christian Couder, Phillip Wood via GitGitGadget, git

On Fri, Apr 15, 2022 at 5:23 PM Phillip Wood <phillip.wood123@gmail.com> wrote:
>
> Hi Chirstian
>
> Thanks for taking a look at this series
>
> On 07/04/2022 14:49, Christian Couder wrote:
> > On Tue, Feb 22, 2022 at 6:12 AM Phillip Wood via GitGitGadget
> > <gitgitgadget@gmail.com> wrote:
> >>
> >> From: Phillip Wood <phillip.wood@dunelm.org.uk>
> >>
> >> The reflog message for a conflict resolution committed by "rebase
> >> --continue" looks like
> >>
> >>          rebase (continue): commit subject line
> >>
> >> Unfortunately the reflog message each subsequent pick look like
> >>
> >>          rebase (continue) (pick): commit subject line
> >>
> >> Fix this by setting the reflog message for "rebase --continue" in
> >> sequencer_continue() so it does not affect subsequent commits. This
> >> introduces a memory leak similar to the one leaking GIT_REFLOG_ACTION
> >> in pick_commits(). Both of these will be fixed in a future series that
> >> stops the sequencer calling setenv().
> >
> > Yeah, it looks like we will leak only a small string.
> >
> >> Signed-off-by: Phillip Wood <phillip.wood@dunelm.org.uk>
> >> ---
> >>   builtin/rebase.c          |   2 -
> >>   sequencer.c               |   5 ++
> >>   t/t3406-rebase-message.sh | 120 +++++++++++++++++++++++++-------------
> >
> > The changes to the test script look a bit involved and aren't
> > explained in the commit message. I wonder if some of those changes
> > could have been made in a preparatory commit.
>
> That's a good point. For some reason when I put the series together I
> thought it would be tricky to do that without the fixes in this commit
> but that is not actually the case so I'll split the test changes out.

That would be very nice; I'd like to see it split out too.

^ permalink raw reply	[relevance 2%]

* Re: [PATCH 0/7] rebase: make reflog messages independent of the backend
  2022-02-21 11:10  3% [PATCH 0/7] rebase: make reflog messages independent of the backend Phillip Wood via GitGitGadget
                   ` (2 preceding siblings ...)
  2022-04-04 15:34  0% ` Review Request (was Re: [PATCH 0/7] rebase: make reflog messages independent of the backend) Phillip Wood
@ 2022-04-17  2:09  0% ` Elijah Newren
  2022-04-20  9:56  3% ` [PATCH v2 0/8] " Phillip Wood via GitGitGadget
  4 siblings, 0 replies; 200+ results
From: Elijah Newren @ 2022-04-17  2:09 UTC (permalink / raw)
  To: Phillip Wood via GitGitGadget; +Cc: Git Mailing List, Phillip Wood

On Mon, Feb 21, 2022 at 9:04 PM Phillip Wood via GitGitGadget
<gitgitgadget@gmail.com> wrote:
>
> This is a series of rebase reflog related patches with the aim of unifying
> the reflog messages from the two rebase backends.
>
>  * improve rebase reflog test coverage
>  * rebase --merge: fix reflog messages for --continue and --skip
>  * rebase --apply: respect GIT_REFLOG_ACTION
>  * rebase --abort: improve reflog message
>  * unify reflog messages between the two rebase backends
>
> This series is based on pw/use-inprocess-checkout-in-rebase
>
> Phillip Wood (7):
>   rebase --apply: remove duplicated code
>   rebase --merge: fix reflog when continuing
>   rebase --merge: fix reflog message after skipping
>   rebase --apply: respect GIT_REFLOG_ACTION
>   rebase --apply: make reflog messages match rebase --merge
>   rebase --abort: improve reflog message
>   rebase: cleanup action handling
>
>  builtin/rebase.c          | 144 ++++++++++++-----------------
>  sequencer.c               |   5 ++
>  t/t3406-rebase-message.sh | 185 +++++++++++++++++++++++++++++++-------
>  3 files changed, 214 insertions(+), 120 deletions(-)
>
>
> base-commit: 38c541ce94048cf72aa4f465be9314423a57f445
> Published-As: https://github.com/gitgitgadget/git/releases/tag/pr-1150%2Fphillipwood%2Fwip%2Frebase-reflog-fixes-v1
> Fetch-It-Via: git fetch https://github.com/gitgitgadget/git pr-1150/phillipwood/wip/rebase-reflog-fixes-v1
> Pull-Request: https://github.com/gitgitgadget/git/pull/1150

I read through the seven patches, then went back and commented on all
of them.  Hard to find problems really, looks nicely written.  I would
second Christian's request to have the second patch split with a
preparatory testcase cleanup, which it appears you already plan to do.
Other than patch, the series looks good to me.

^ permalink raw reply	[relevance 0%]

* Re: Review Request (was Re: [PATCH 0/7] rebase: make reflog messages independent of the backend)
  2022-04-04 15:34  0% ` Review Request (was Re: [PATCH 0/7] rebase: make reflog messages independent of the backend) Phillip Wood
@ 2022-04-17  2:13  0%   ` Elijah Newren
  2022-04-18 18:56  0%     ` Phillip Wood
  0 siblings, 1 reply; 200+ results
From: Elijah Newren @ 2022-04-17  2:13 UTC (permalink / raw)
  To: Phillip Wood
  Cc: Phillip Wood via GitGitGadget, Git Mailing List,
	Johannes Schindelin, Ævar Arnfjörð Bjarmason

On Mon, Apr 4, 2022 at 8:34 AM Phillip Wood <phillip.wood123@gmail.com> wrote:
>
> If anyone has time to review these patches I'd be very grateful. I've
> cc'd this message to some list regulars who have reviewed rebase patches
> before but if anyone else fancies taking a look at them that would be great.

I apologize for the delay here...especially when it came after you had
already waited a month and a half.  (This is the first git thing I've
done in over a month, sadly.)  Anyway, I just read through the series
and left some comments; mostly looks good but I second the request to
split up one of the patches.


> On 21/02/2022 11:10, Phillip Wood via GitGitGadget wrote:
> > This is a series of rebase reflog related patches with the aim of unifying
> > the reflog messages from the two rebase backends.
> >
> >   * improve rebase reflog test coverage
> >   * rebase --merge: fix reflog messages for --continue and --skip
> >   * rebase --apply: respect GIT_REFLOG_ACTION
> >   * rebase --abort: improve reflog message
> >   * unify reflog messages between the two rebase backends
> >
> > This series is based on pw/use-inprocess-checkout-in-rebase
> >
> > Phillip Wood (7):
> >    rebase --apply: remove duplicated code
> >    rebase --merge: fix reflog when continuing
> >    rebase --merge: fix reflog message after skipping
> >    rebase --apply: respect GIT_REFLOG_ACTION
> >    rebase --apply: make reflog messages match rebase --merge
> >    rebase --abort: improve reflog message
> >    rebase: cleanup action handling
> >
> >   builtin/rebase.c          | 144 ++++++++++++-----------------
> >   sequencer.c               |   5 ++
> >   t/t3406-rebase-message.sh | 185 +++++++++++++++++++++++++++++++-------
> >   3 files changed, 214 insertions(+), 120 deletions(-)
> >
> >
> > base-commit: 38c541ce94048cf72aa4f465be9314423a57f445
> > Published-As: https://github.com/gitgitgadget/git/releases/tag/pr-1150%2Fphillipwood%2Fwip%2Frebase-reflog-fixes-v1
> > Fetch-It-Via: git fetch https://github.com/gitgitgadget/git pr-1150/phillipwood/wip/rebase-reflog-fixes-v1
> > Pull-Request: https://github.com/gitgitgadget/git/pull/1150

^ permalink raw reply	[relevance 0%]

* [ANNOUNCE] Git v2.36.0
@ 2022-04-18 16:27  3% Junio C Hamano
  0 siblings, 0 replies; 200+ results
From: Junio C Hamano @ 2022-04-18 16:27 UTC (permalink / raw)
  To: git; +Cc: git-packagers

The latest feature release Git v2.36.0 is now available at the
usual places.  It is comprised of 717 non-merge commits since
v2.35.0, contributed by 96 people, 26 of which are new faces [*].

This release contains the same fixes as the recent maintenance
releases to address CVE-2022-24765 as well.

The tarballs are found at:

    https://www.kernel.org/pub/software/scm/git/

The following public repositories all have a copy of the 'v2.36.0'
tag and the 'master' branch that the tag points at:

  url = https://git.kernel.org/pub/scm/git/git
  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.35.0 are as follows.
Welcome to the Git development community!

  Abhradeep Chakraborty, BRESSAT Jonathan, Chen Bojun, COGONI
  Guillaume, David Cantrell, Des Preston, Hongyi Zhao, Jason Yundt,
  Jayati Shrivastava, Jaydeep Das, Jaydeep P Das, Jose Lopes,
  Justin Donnelly, Kraymer, Liginity Lee, Matheus Felipe, Matheus
  Valadares, Maximilian Reichel, Michael McClimon, Nihal Jere,
  Pedro Martelletto, Robert Coup, Sean Allred, Shaoxuan Yuan,
  Shubham Mishra, and Waleed Khan.

Returning contributors who helped this release are as follows.
Thanks for your continued support.

  Adam Dinwoodie, Ævar Arnfjörð Bjarmason, Alex Henrie,
  Atharva Raykar, Bagas Sanjaya, Beat Bolli, brian m. carlson,
  Carlo Marcelo Arenas Belón, Christian Couder, Daniel Hahler,
  Daniel Santos, Derrick Stolee, Elia Pinto, Elijah Newren,
  Emily Shaffer, Emir SARI, Eric Sunshine, Fabian Stelzer,
  Fangyi Zhou, Glen Choo, Greg Hurrell, Han-Wen Nienhuys, Jacob
  Keller, Jean-Noël Avila, Jeff Hostetler, Jeff King, Jerry
  Zhang, Jessica Clarke, Jiang Xin, Joel Holdsworth, Johannes
  Altmanninger, Johannes Schindelin, Johannes Sixt, John Cai,
  Jonathan Nieder, Jonathan Tan, Jordi Mas, Josh Steadmon, Junio
  C Hamano, Kevin Willford, Lessley Dennington, Marc Strapetz,
  Martin Ågren, Matt Cooper, Matthias Rüster, Michael J Gruber,
  Neeraj Singh, Patrick Steinhardt, Peter Krefting, Philip Oakley,
  Philippe Blain, Phillip Szelat, Phillip Wood, Ralf Thielow,
  Ramkumar Ramachandra, Randall S. Becker, René Scharfe, Shourya
  Shukla, SZEDER Gábor, Tao Klerks, Taylor Blau, Teng Long,
  Thomas Gummerer, Thomas Koutcher, Tilman Vogel, Todd Zullinger,
  Trần Ngọc Quân, Victoria Dye, Yi-Jyun Pan, and 依云.

[*] We are counting not just the authorship contribution but issue
    reporting, mentoring, helping and reviewing that are recorded in
    the commit trailers.

----------------------------------------------------------------

Git 2.36 Release Notes
======================

Updates since Git 2.35
----------------------

Backward compatibility warts

 * "git name-rev --stdin" has been deprecated and issues a warning
   when used; use "git name-rev --annotate-stdin" instead.

 * "git clone --filter=... --recurse-submodules" only makes the
   top-level a partial clone, while submodules are fully cloned.  This
   behaviour is changed to pass the same filter down to the submodules.

 * With the fixes for CVE-2022-24765 that are common with versions of
   Git 2.30.4, 2.31.3, 2.32.2, 2.33.3, 2.34.3, and 2.35.3, Git has
   been taught not to recognise repositories owned by other users, in
   order to avoid getting affected by their config files and hooks.
   You can list the path to the safe/trusted repositories that may be
   owned by others on a multi-valued configuration variable
   `safe.directory` to override this behaviour, or use '*' to declare
   that you trust anything.


Note to those who build from the source

 * Since Git 2.31, our source assumed that the compiler you use to
   build Git supports variadic macros, with an easy-to-use escape
   hatch to allow compilation without variadic macros with an request
   to report that you had to use the escape hatch to the list.
   Because we haven't heard from anybody who actually needed to use
   the escape hatch, it has been removed, making support of variadic
   macros a hard requirement.


UI, Workflows & Features

 * Assorted updates to "git cat-file", especially "-h".

 * The command line completion (in contrib/) learns to complete
   arguments to give to "git sparse-checkout" command.

 * "git log --remerge-diff" shows the difference from mechanical merge
   result and the result that is actually recorded in a merge commit.

 * "git log" and friends learned an option --exclude-first-parent-only
   to propagate UNINTERESTING bit down only along the first-parent
   chain, just like --first-parent option shows commits that lack the
   UNINTERESTING bit only along the first-parent chain.

 * The command line completion script (in contrib/) learned to
   complete all Git subcommands, including the ones that are normally
   hidden, when GIT_COMPLETION_SHOW_ALL_COMMANDS is used.

 * "git branch" learned the "--recurse-submodules" option.

 * A user can forget to make a script file executable before giving
   it to "git bisect run".  In such a case, all tests will exit with
   126 or 127 error codes, even on revisions that are marked as good.
   Try to recognize this situation and stop iteration early.

 * When "index-pack" dies due to incoming data exceeding the maximum
   allowed input size, include the value of the limit in the error
   message.

 * The error message given by "git switch HEAD~4" has been clarified
   to suggest the "--detach" option that is required.

 * In sparse-checkouts, files mis-marked as missing from the working tree
   could lead to later problems.  Such files were hard to discover, and
   harder to correct.  Automatically detecting and correcting the marking
   of such files has been added to avoid these problems.

 * "git cat-file" learns "--batch-command" mode, which is a more
   flexible interface than the existing "--batch" or "--batch-check"
   modes, to allow different kinds of inquiries made.

 * The level of verbose output from the ort backend during inner merge
   has been aligned to that of the recursive backend.

 * "git remote rename A B", depending on the number of remote-tracking
   refs involved, takes long time renaming them.  The command has been
   taught to show progress bar while making the user wait.

 * Bundle file format gets extended to allow a partial bundle,
   filtered by similar criteria you would give when making a
   partial/lazy clone.

 * A new built-in userdiff driver for kotlin has been added.

 * "git repack" learned a new configuration to disable triggering of
   age-old "update-server-info" command, which is rarely useful these
   days.

 * "git stash" does not allow subcommands it internally runs as its
   implementation detail, except for "git reset", to emit messages;
   now "git reset" part has also been squelched.

 * "git ls-tree" learns "--oid-only" option, similar to "--name-only",
   and more generalized "--format" option.

 * "git fetch --refetch" learned to fetch everything without telling
   the other side what we already have, which is useful when you
   cannot trust what you have in the local object store.

 * "git branch" gives hint when branch tracking cannot be established
   because fetch refspecs from multiple remote repositories overlap.

 * "git worktree list --porcelain" did not c-quote pathnames and lock
   reasons with unsafe bytes correctly, which is worked around by
   introducing NUL terminated output format with "-z".


Performance, Internal Implementation, Development Support etc.

 * "git apply" (ab)used the util pointer of the string-list to keep
   track of how each symbolic link needs to be handled, which has been
   simplified by using strset.

 * Fix a hand-rolled alloca() imitation that may have violated
   alignment requirement of data being sorted in compatibility
   implementation of qsort_s() and stable qsort().

 * Use the parse-options API in "git reflog" command.

 * The conditional inclusion mechanism of configuration files using
   "[includeIf <condition>]" learns to base its decision on the
   URL of the remote repository the repository interacts with.
   (merge 399b198489 jt/conditional-config-on-remote-url later to maint).

 * "git name-rev --stdin" does not behave like usual "--stdin" at
   all.  Start the process of renaming it to "--annotate-stdin".
   (merge a2585719b3 jc/name-rev-stdin later to maint).

 * "git update-index", "git checkout-index", and "git clean" are
   taught to work better with the sparse checkout feature.

 * Use an internal call to reset_head() helper function instead of
   spawning "git checkout" in "rebase", and update code paths that are
   involved in the change.

 * Messages "ort" merge backend prepares while dealing with conflicted
   paths were unnecessarily confusing since it did not differentiate
   inner merges and outer merges.

 * Small modernization of the rerere-train script (in contrib/).

 * Use designated initializers we started using in mid 2017 in more
   parts of the codebase that are relatively quiescent.

 * Improve failure case behaviour of xdiff library when memory
   allocation fails.

 * General clean-up in reftable implementation, including
   clarification of the API documentation, tightening the code to
   honor documented length limit, etc.

 * Remove the escape hatch we added when we introduced the weather
   balloon to use variadic macros unconditionally, to make it official
   that we now have a hard dependency on the feature.

 * Makefile refactoring with a bit of suffixes rule stripping to
   optimize the runtime overhead.

 * "git stash drop" is reimplemented as an internal call to
   reflog_delete() function, instead of invoking "git reflog delete"
   via run_command() API.

 * Count string_list items in size_t, not "unsigned int".

 * The single-key interactive operation used by "git add -p" has been
   made more robust.

 * Remove unneeded <meta http-equiv=content-type...> from gitweb
   output.

 * "git name-rev" learned to use the generation numbers when setting
   the lower bound of searching commits used to explain the revision,
   when available, instead of committer time.

 * Replace core.fsyncObjectFiles with two new configuration variables,
   core.fsync and core.fsyncMethod.

 * Updates to refs traditionally weren't fsync'ed, but we can
   configure using core.fsync variable to do so.

 * "git reflog" command now uses parse-options API to parse its
   command line options.


Fixes since v2.35
-----------------

 * "rebase" and "stash" in secondary worktrees are broken in
   Git 2.35.0, which has been corrected.

 * "git pull --rebase" ignored the rebase.autostash configuration
   variable when the remote history is a descendant of our history,
   which has been corrected.
   (merge 3013d98d7a pb/pull-rebase-autostash-fix later to maint).

 * "git update-index --refresh" has been taught to deal better with
   racy timestamps (just like "git status" already does).
   (merge 2ede073fd2 ms/update-index-racy later to maint).

 * Avoid tests that are run under GIT_TRACE2 set from failing
   unnecessarily.
   (merge 944d808e42 js/test-unset-trace2-parents later to maint).

 * The merge-ort misbehaved when merge.renameLimit configuration is
   set too low and failed to find all renames.
   (merge 9ae39fef7f en/merge-ort-restart-optim-fix later to maint).

 * We explain that revs come first before the pathspec among command
   line arguments, but did not spell out that dashed options come
   before other args, which has been corrected.
   (merge c11f95010c tl/doc-cli-options-first later to maint).

 * "git add -p" rewritten in C regressed hunk splitting in some cases,
   which has been corrected.
   (merge 7008ddc645 pw/add-p-hunk-split-fix later to maint).

 * "git fetch --negotiate-only" is an internal command used by "git
   push" to figure out which part of our history is missing from the
   other side.  It should never recurse into submodules even when
   fetch.recursesubmodules configuration variable is set, nor it
   should trigger "gc".  The code has been tightened up to ensure it
   only does common ancestry discovery and nothing else.
   (merge de4eaae63a gc/fetch-negotiate-only-early-return later to maint).

 * The code path that verifies signatures made with ssh were made to
   work better on a system with CRLF line endings.
   (merge caeef01ea7 fs/ssh-signing-crlf later to maint).

 * "git sparse-checkout init" failed to write into $GIT_DIR/info
   directory when the repository was created without one, which has
   been corrected to auto-create it.
   (merge 7f44842ac1 jt/sparse-checkout-leading-dir-fix later to maint).

 * Cloning from a repository that does not yet have any branches or
   tags but has other refs resulted in a "remote transport reported
   error", which has been corrected.
   (merge dccea605b6 jt/clone-not-quite-empty later to maint).

 * Mark in various places in the code that the sparse index and the
   split index features are mutually incompatible.
   (merge 451b66c533 js/sparse-vs-split-index later to maint).

 * Update the logic to compute alignment requirement for our mem-pool.
   (merge e38bcc66d8 jc/mem-pool-alignment later to maint).

 * Pick a better random number generator and use it when we prepare
   temporary filenames.
   (merge 47efda967c bc/csprng-mktemps later to maint).

 * Update the contributor-facing documents on proposed log messages.
   (merge cdba0295b0 jc/doc-log-messages later to maint).

 * When "git fetch --prune" failed to prune the refs it wanted to
   prune, the command issued error messages but exited with exit
   status 0, which has been corrected.
   (merge c9e04d905e tg/fetch-prune-exit-code-fix later to maint).

 * Problems identified by Coverity in the reftable code have been
   corrected.
   (merge 01033de49f hn/reftable-coverity-fixes later to maint).

 * A bug that made multi-pack bitmap and the object order out-of-sync,
   making the .midx data corrupt, has been fixed.
   (merge f8b60cf99b tb/midx-bitmap-corruption-fix later to maint).

 * The build procedure has been taught to notice older version of zlib
   and enable our replacement uncompress2() automatically.
   (merge 07564773c2 ab/auto-detect-zlib-compress2 later to maint).

 * Interaction between fetch.negotiationAlgorithm and
   feature.experimental configuration variables has been corrected.
   (merge 714edc620c en/fetch-negotiation-default-fix later to maint).

 * "git diff --diff-filter=aR" is now parsed correctly.
   (merge 75408ca949 js/diff-filter-negation-fix later to maint).

 * When "git subtree" wants to create a merge, it used "git merge" and
   let it be affected by end-user's "merge.ff" configuration, which
   has been corrected.
   (merge 9158a3564a tk/subtree-merge-not-ff-only later to maint).

 * Unlike "git apply", "git patch-id" did not handle patches with
   hunks that has only 1 line in either preimage or postimage, which
   has been corrected.
   (merge 757e75c81e jz/patch-id-hunk-header-parsing-fix later to maint).

 * "receive-pack" checks if it will do any ref updates (various
   conditions could reject a push) before received objects are taken
   out of the temporary directory used for quarantine purposes, so
   that a push that is known-to-fail will not leave crufts that a
   future "gc" needs to clean up.
   (merge 5407764069 cb/clear-quarantine-early-on-all-ref-update-errors later to maint).

 * When there is no object to write .bitmap file for, "git
   multi-pack-index" triggered an error, instead of just skipping,
   which has been corrected.
   (merge eb57277ba3 tb/midx-no-bitmap-for-no-objects later to maint).

 * "git cmd -h" outside a repository should error out cleanly for many
   commands, but instead it hit a BUG(), which has been corrected.
   (merge 87ad07d735 js/short-help-outside-repo-fix later to maint).

 * "working tree" and "per-worktree ref" were in glossary, but
   "worktree" itself wasn't, which has been corrected.
   (merge 2df5387ed0 jc/glossary-worktree later to maint).

 * L10n support for a few error messages.
   (merge 3d3c23b3a7 bs/forbid-i18n-of-protocol-token-in-fetch-pack later to maint).

 * Test modernization.
   (merge d4fe066e4b sy/t0001-use-path-is-helper later to maint).

 * "git log --graph --graph" used to leak a graph structure, and there
   was no way to countermand "--graph" that appear earlier on the
   command line.  A "--no-graph" option has been added and resource
   leakage has been plugged.

 * Error output given in response to an ambiguous object name has been
   improved.
   (merge 3a73c1dfaf ab/ambiguous-object-name later to maint).

 * "git sparse-checkout" wants to work with per-worktree configuration,
   but did not work well in a worktree attached to a bare repository.
   (merge 3ce1138272 ds/sparse-checkout-requires-per-worktree-config later to maint).

 * Setting core.untrackedCache to true failed to add the untracked
   cache extension to the index.

 * Workaround we have for versions of PCRE2 before their version 10.36
   were in effect only for their versions newer than 10.36 by mistake,
   which has been corrected.
   (merge 97169fc361 rs/pcre-invalid-utf8-fix-fix later to maint).

 * Document Taylor as a new member of Git PLC at SFC.  Welcome.
   (merge e8d56ca863 tb/coc-plc-update later to maint).

 * "git checkout -b branch/with/multi/level/name && git stash" only
   recorded the last level component of the branch name, which has
   been corrected.

 * Check the return value from parse_tree_indirect() to turn segfaults
   into calls to die().
   (merge 8d2eaf649a gc/parse-tree-indirect-errors later to maint).

 * Newer version of GPGSM changed its output in a backward
   incompatible way to break our code that parses its output.  It also
   added more processes our tests need to kill when cleaning up.
   Adjustments have been made to accommodate these changes.
   (merge b0b70d54c4 fs/gpgsm-update later to maint).

 * The untracked cache newly computed weren't written back to the
   on-disk index file when there is no other change to the index,
   which has been corrected.

 * "git config -h" did not describe the "--type" option correctly.
   (merge 5445124fad mf/fix-type-in-config-h later to maint).

 * The way generation number v2 in the commit-graph files are
   (not) handled has been corrected.
   (merge 6dbf4b8172 ds/commit-graph-gen-v2-fixes later to maint).

 * The method to trigger malloc check used in our tests no longer work
   with newer versions of glibc.
   (merge baedc59543 ep/test-malloc-check-with-glibc-2.34 later to maint).

 * When "git fetch --recurse-submodules" grabbed submodule commits
   that would be needed to recursively check out newly fetched commits
   in the superproject, it only paid attention to submodules that are
   in the current checkout of the superproject.  We now do so for all
   submodules that have been run "git submodule init" on.

 * "git rebase $base $non_branch_commit", when $base is an ancestor or
   the $non_branch_commit, modified the current branch, which has been
   corrected.

 * When "shallow" information is updated, we forgot to update the
   in-core equivalent, which has been corrected.

 * When creating a loose object file, we didn't report the exact
   filename of the file we failed to fsync, even though the
   information was readily available, which has been corrected.

 * "git am" can read from the standard input when no mailbox is given
   on the command line, but the end-user gets no indication when it
   happens, making Git appear stuck.
   (merge 7b20af6a06 jc/mailsplit-warn-on-tty later to maint).

 * "git mv" failed to refresh the cached stat information for the
   entry it moved.
   (merge b7f9130a06 vd/mv-refresh-stat later to maint).

 * Other code cleanup, docfix, build fix, etc.
   (merge cfc5cf428b jc/find-header later to maint).
   (merge 40e7cfdd46 jh/p4-fix-use-of-process-error-exception later to maint).
   (merge 727e6ea350 jh/p4-spawning-external-commands-cleanup later to maint).
   (merge 0a6adc26e2 rs/grep-expr-cleanup later to maint).
   (merge 4ed7dfa713 po/readme-mention-contributor-hints later to maint).
   (merge 6046f7a91c en/plug-leaks-in-merge later to maint).
   (merge 8c591dbfce bc/clarify-eol-attr later to maint).
   (merge 518e15db74 rs/parse-options-lithelp-help later to maint).
   (merge cbac0076ef gh/doc-typos later to maint).
   (merge ce14de03db ab/no-errno-from-resolve-ref-unsafe later to maint).
   (merge 2826ffad8c rc/negotiate-only-typofix later to maint).
   (merge 0f03f04c5c en/sparse-checkout-leakfix later to maint).
   (merge 74f3390dde sy/diff-usage-typofix later to maint).
   (merge 45d0212a71 ll/doc-mktree-typofix later to maint).
   (merge e9b272e4c1 js/no-more-legacy-stash later to maint).
   (merge 6798b08e84 ab/do-not-hide-failures-in-git-dot-pm later to maint).
   (merge 9325285df4 po/doc-check-ignore-markup-fix later to maint).
   (merge cd26cd6c7c sy/modernize-t-lib-read-tree-m-3way later to maint).
   (merge d17294a05e ab/hash-object-leakfix later to maint).
   (merge b8403129d3 jd/t0015-modernize later to maint).
   (merge 332acc248d ds/mailmap later to maint).
   (merge 04bf052eef ab/grep-patterntype later to maint).
   (merge 6ee36364eb ab/diff-free-more later to maint).
   (merge 63a36017fe nj/read-tree-doc-reffix later to maint).
   (merge eed36fce38 sm/no-git-in-upstream-of-pipe-in-tests later to maint).
   (merge c614beb933 ep/t6423-modernize later to maint).
   (merge 57be9c6dee ab/reflog-prep-fix later to maint).
   (merge 5327d8982a js/in-place-reverse-in-sequencer later to maint).
   (merge 2e2c0be51e dp/worktree-repair-in-usage later to maint).
   (merge 6563706568 jc/coding-guidelines-decl-in-for-loop later to maint).

----------------------------------------------------------------

Changes since v2.35.0 are as follows:

Abhradeep Chakraborty (2):
      amend remaining usage strings according to style guide
      partial-clone: add a partial-clone test case

Adam Dinwoodie (2):
      configure.ac: fix HAVE_SYNC_FILE_RANGE definition
      t9902: split test to run on appropriate systems

Alex Henrie (3):
      log: fix memory leak if --graph is passed multiple times
      log: add a --no-graph option
      switch: mention the --detach option when dying due to lack of a branch

Atharva Raykar (5):
      submodule--helper: get remote names from any repository
      submodule--helper: refactor get_submodule_displaypath()
      submodule--helper: allow setting superprefix for init_submodule()
      submodule--helper: run update using child process struct
      submodule: move core cmd_update() logic to C

Bagas Sanjaya (3):
      fetch-pack: parameterize message containing 'ready' keyword
      l10n: po-id for 2.36 (round 1)
      l10n: po-id for 2.36 (round 2)

COGONI Guillaume (3):
      t/t3903-stash.sh: replace test [-d|-f] with test_path_is_*
      tests: allow testing if a path is truly a file or a directory
      tests: make the code more readable

Carlo Marcelo Arenas Belón (4):
      mingw: avoid fallback for {local,gm}time_r()
      git-compat-util: really support openssl as a source of entropy
      config.mak.dev: workaround gcc 12 bug affecting "pedantic" CI job
      config.mak.dev: alternative workaround to gcc 12 warning in http.c

Chen Bojun (1):
      receive-pack: purge temporary data if no command is ready to run

Daniel Santos (3):
      l10n: pt_PT: update Portuguese translation
      l10n: pt_PT: update TEAMS file
      l10n: pt_PT: update Portuguese translation

David Cantrell (1):
      completion: tab completion of filenames for 'git restore'

Derrick Stolee (47):
      Documentation: add extensions.worktreeConfig details
      worktree: create init_worktree_config()
      config: add repo_config_set_worktree_gently()
      sparse-checkout: set worktree-config correctly
      worktree: copy sparse-checkout patterns and config on add
      config: make git_configset_get_string_tmp() private
      mailmap: change primary address for Derrick Stolee
      dir: force untracked cache with core.untrackedCache
      worktree: combine two translatable messages
      worktree: extract copy_filtered_worktree_config()
      worktree: extract copy_sparse_checkout()
      worktree: extract checkout_worktree()
      worktree: use 'worktree' over 'working tree'
      worktree: use 'worktree' over 'working tree'
      worktree: use 'worktree' over 'working tree'
      worktree: use 'worktree' over 'working tree'
      worktree: use 'worktree' over 'working tree'
      worktree: use 'worktree' over 'working tree'
      worktree: use 'worktree' over 'working tree'
      test-read-graph: include extra post-parse info
      t5318: extract helpers to lib-commit-graph.sh
      commit-graph: fix ordering bug in generation numbers
      commit-graph: start parsing generation v2 (again)
      commit-graph: fix generation number v2 overflow values
      commit-graph: declare bankruptcy on GDAT chunks
      index-pack: document and test the --promisor option
      list-objects-filter-options: create copy helper
      revision: put object filter into struct rev_info
      pack-objects: use rev.filter when possible
      pack-bitmap: drop filter in prepare_bitmap_walk()
      list-objects: consolidate traverse_commit_list[_filtered]
      MyFirstObjectWalk: update recommended usage
      bundle: parse filter capability
      rev-list: move --filter parsing into revision.c
      bundle: create filtered bundles
      bundle: unbundle promisor packs
      clone: fail gracefully when cloning filtered bundle
      maintenance: fix synopsis in documentation
      list-objects-filter: remove CL_ARG__FILTER
      pack-objects: move revs out of get_object_list()
      pack-objects: parse --filter directly into revs.filter
      bundle: move capabilities to end of 'verify'
      bundle: output hash information in 'verify'
      t7700: check post-condition in kept-pack test
      test-lib-functions: remove test_subcommand_inexact
      t0033: add tests for safe.directory
      setup: opt-out of check with safe.directory=*

Des Preston (1):
      worktree: include repair cmd in usage

Elia Pinto (8):
      test-lib.sh: Use GLIBC_TUNABLES instead of MALLOC_CHECK_ on glibc >= 2.34
      t6423-merge-rename-directories.sh: use the $(...) construct
      attr.c: delete duplicate include
      builtin/gc.c: delete duplicate include
      builtin/sparse-checkout.c: delete duplicate include
      builtin/stash.c: delete duplicate include
      t/helper/test-run-command.c: delete duplicate include
      attr.h: remove duplicate struct definition

Elijah Newren (33):
      t1011: add testcase demonstrating accidental loss of user modifications
      unpack-trees: fix accidental loss of user changes
      repo_read_index: clear SKIP_WORKTREE bit from files present in worktree
      Update documentation related to sparsity and the skip-worktree bit
      Accelerate clear_skip_worktree_from_present_files() by caching
      merge-ort: avoid assuming all renames detected
      merge-ort: fix memory leak in merge_ort_internal()
      merge: fix memory leaks in cmd_merge()
      sequencer, stash: fix running from worktree subdir
      sparse-checkout: fix a couple minor memory leaks
      repo-settings: fix checking for fetch.negotiationAlgorithm=default
      repo-settings: fix error handling for unknown values
      repo-settings: rename the traditional default fetch.negotiationAlgorithm
      show, log: provide a --remerge-diff capability
      log: clean unneeded objects during `log --remerge-diff`
      ll-merge: make callers responsible for showing warnings
      merge-ort: capture and print ll-merge warnings in our preferred fashion
      merge-ort: mark a few more conflict messages as omittable
      merge-ort: format messages slightly different for use in headers
      diff: add ability to insert additional headers for paths
      show, log: include conflict/warning messages in --remerge-diff headers
      merge-ort: mark conflict/warning messages from inner merges as omittable
      diff-merges: avoid history simplifications when diffing merges
      merge-ort: make informational messages from recursive merges clearer
      sparse-checkout: correct reapply's handling of options
      sparse-checkout: correctly set non-cone mode when expected
      sparse-checkout: pay attention to prefix for {set, add}
      sparse-checkout: error or warn when given individual files
      sparse-checkout: reject arguments in cone-mode that look like patterns
      merge-ort: fix small memory leak in detect_and_process_renames()
      merge-ort: fix small memory leak in unique_path()
      merge-ort: exclude messages from inner merges by default
      repo_read_index: add config to expect files outside sparse patterns

Emily Shaffer (14):
      hook: add 'run' subcommand
      gc: use hook library for pre-auto-gc hook
      am: convert {pre,post}-applypatch to use hook.h
      rebase: convert pre-rebase to use hook.h
      am: convert applypatch-msg to use hook.h
      merge: convert post-merge to use hook.h
      hooks: convert non-worktree 'post-checkout' hook to hook library
      hooks: convert worktree 'post-checkout' hook to hook library
      send-email: use 'git hook run' for 'sendemail-validate'
      git-p4: use 'git hook' to run hooks
      commit: convert {pre-commit,prepare-commit-msg} hook to hook.h
      read-cache: convert post-index-change to use hook.h
      receive-pack: convert push-to-checkout hook to hook.h
      run-command: remove old run_hook_{le,ve}() hook API

Emir SARI (2):
      l10n: tr: v2.36.0 round 1
      l10n: tr: v2.36.0 round 2

Fabian Stelzer (2):
      gpg-interface: trim CR from ssh-keygen
      gpg-interface/gpgsm: fix for v2.3

Fangyi Zhou (4):
      submodule-helper: fix usage string
      l10n: Update zh_CN repo link
      l10n: zh_CN v2.36.0 round 1
      l10n: zh_CN v2.36.0 round 2

Glen Choo (39):
      fetch: use goto cleanup in cmd_fetch()
      fetch: skip tasks related to fetching objects
      fetch --negotiate-only: do not update submodules
      branch: move --set-upstream-to behavior to dwim_and_setup_tracking()
      branch: make create_branch() always create a branch
      branch: add a dry_run parameter to create_branch()
      builtin/branch: consolidate action-picking logic in cmd_branch()
      branch: add --recurse-submodules option for branch creation
      branch.c: use 'goto cleanup' in setup_tracking() to fix memory leaks
      stash: strip "refs/heads/" with skip_prefix
      checkout, clone: die if tree cannot be parsed
      submodule--helper: remove update-module-mode
      submodule--helper: reorganize code for sh to C conversion
      submodule--helper run-update-procedure: remove --suboid
      submodule--helper run-update-procedure: learn --remote
      submodule--helper update-clone: learn --init
      submodule--helper: remove ensure-core-worktree
      submodule update: add tests for --filter
      submodule--helper update-clone: check for --filter and --init
      t5526: introduce test helper to assert on fetches
      t5526: stop asserting on stderr literally
      t5526: create superproject commits with test helper
      submodule: make static functions read submodules from commits
      submodule: inline submodule_commits() into caller
      submodule: store new submodule commits oid_array in a struct
      submodule: extract get_fetch_task()
      submodule: move logic into fetch_task_create()
      submodule update: use die_message()
      submodule--helper: teach update_data more options
      submodule--helper: reduce logic in run_update_procedure()
      submodule--helper: remove forward declaration
      fetch: fetch unpopulated, changed submodules
      submodule: fix latent check_has_commit() bug
      branch: support more tracking modes when recursing
      branch: give submodule updating advice before exit
      branch --set-upstream-to: be consistent when advising
      branch: remove negative exit code
      branch: rework comments for future developers
      branch.c: simplify advice-and-die sequence

Greg Hurrell (2):
      Documentation/config/pgp.txt: replace stray <TAB> character with <SPC>
      Documentation/config/pgp.txt: add missing apostrophe

Han-Wen Nienhuys (27):
      reftable: fix OOB stack write in print functions
      reftable: fix resource leak in block.c error path
      reftable: fix resource leak blocksource.c
      reftable: check reftable_stack_auto_compact() return value
      reftable: ignore remove() return value in stack_test.c
      reftable: fix resource warning
      reftable: all xxx_free() functions accept NULL arguments
      reftable: order unittests by complexity
      reftable: drop stray printf in readwrite_test
      reftable: handle null refnames in reftable_ref_record_equal
      reftable: make reftable-record.h function signatures const correct
      reftable: implement record equality generically
      reftable: remove outdated file reftable.c
      reftable: make reftable_record a tagged union
      reftable: add print functions to the record types
      t1405: explictly delete reflogs for reftable
      t1405: mark test that checks existence as REFFILES
      t5312: prepare for reftable
      t1410: use test-tool ref-store to inspect reflogs
      t1410: mark bufsize boundary test as REFFILES
      Documentation: object_id_len goes up to 31
      reftable: reject 0 object_id_len
      reftable: add a test that verifies that writing empty keys fails
      reftable: avoid writing empty keys at the block layer
      reftable: ensure that obj_id_len is >= 2 on writing
      reftable: add test for length of disambiguating prefix
      reftable: rename writer_stats to reftable_writer_stats

Jacob Keller (1):
      name-rev: use generation numbers if available

Jason Yundt (2):
      comment: fix typo
      gitweb: remove invalid http-equiv="content-type"

Jayati Shrivastava (1):
      sequencer: use reverse_commit_list() helper

Jaydeep Das (1):
      t/t0015-hash.sh: remove unnecessary '\' at line end

Jaydeep P Das (1):
      userdiff: add builtin diff driver for kotlin language.

Jean-Noël Avila (7):
      i18n: factorize more 'incompatible options' messages
      i18n: factorize "invalid value" messages
      i18n: remove from i18n strings that do not hold translatable parts
      i18n: fix some misformated placeholders in command synopsis
      l10n: fr: v2.36 round 1
      i18n: fix some badly formatted i18n strings
      l10n: fr: v2.36 round 2

Jeff Hostetler (30):
      fsmonitor: enhance existing comments, clarify trivial response handling
      fsmonitor-ipc: create client routines for git-fsmonitor--daemon
      fsmonitor: config settings are repository-specific
      fsmonitor: use IPC to query the builtin FSMonitor daemon
      fsmonitor: document builtin fsmonitor
      fsmonitor--daemon: add a built-in fsmonitor daemon
      fsmonitor--daemon: implement 'stop' and 'status' commands
      compat/fsmonitor/fsm-listen-win32: stub in backend for Windows
      compat/fsmonitor/fsm-listen-darwin: stub in backend for Darwin
      fsmonitor--daemon: implement 'run' command
      fsmonitor--daemon: implement 'start' command
      fsmonitor--daemon: add pathname classification
      fsmonitor--daemon: define token-ids
      fsmonitor--daemon: create token-based changed path cache
      compat/fsmonitor/fsm-listen-win32: implement FSMonitor backend on Windows
      compat/fsmonitor/fsm-listen-darwin: add MacOS header files for FSEvent
      compat/fsmonitor/fsm-listen-darwin: implement FSEvent listener on MacOS
      fsmonitor--daemon: implement handle_client callback
      help: include fsmonitor--daemon feature flag in version info
      t/helper/fsmonitor-client: create IPC client to talk to FSMonitor Daemon
      t7527: create test for fsmonitor--daemon
      t/perf: avoid copying builtin fsmonitor files into test repo
      t/helper/test-chmtime: skip directories on Windows
      t/perf/p7519: fix coding style
      t/perf/p7519: speed up test on Windows
      t/perf/p7519: add fsmonitor--daemon test cases
      fsmonitor--daemon: periodically truncate list of modified files
      fsmonitor--daemon: use a cookie file to sync with file system
      fsmonitor: force update index after large responses
      t7527: test status with untracked-cache and fsmonitor--daemon

Jerry Zhang (3):
      git-rev-list: add --exclude-first-parent-only flag
      patch-id: fix antipatterns in tests
      patch-id: fix scan_hunk_header on diffs with 1 line of before/after

Jessica Clarke (1):
      mem-pool: don't assume uintmax_t is aligned enough for all types

Jiang Xin (2):
      l10n: git.pot: v2.36.0 round 1 (192 new, 106 removed)
      l10n: git.pot: v2.36.0 round 2 (4 new, 3 removed)

Joel Holdsworth (4):
      git-p4: don't select shell mode using the type of the command argument
      git-p4: pass command arguments as lists instead of using shell
      git-p4: don't print shell commands as python lists
      git-p4: fix instantiation of CalledProcessError

Johannes Schindelin (24):
      sparse-index: sparse index is disallowed when split index is active
      t1091: disable split index
      split-index: it really is incompatible with the sparse index
      git-sh-setup: remove remnant bits referring to `git-legacy-stash`
      add: remove support for `git-legacy-stash`
      stash: remove documentation for `stash.useBuiltin`
      stash: stop warning about the obsolete `stash.useBuiltin` config setting
      docs(diff): lose incorrect claim about `diff-files --diff-filter=A`
      diff.c: move the diff filter bits definitions up a bit
      diff-filter: be more careful when looking for negative bits
      scalar: accept -C and -c options before the subcommand
      checkout/fetch/pull/pack-objects: allow `-h` outside a repository
      t0012: verify that built-ins handle `-h` even without gitdir
      GIT-VERSION-GEN: bump to v2.33.1
      Add a function to determine whether a path is owned by the current user
      setup_git_directory(): add an owner check for the top-level directory
      cocci: allow padding with `strbuf_addf()`
      Fix `GIT_CEILING_DIRECTORIES` with `C:\` and the likes
      Git 2.30.3
      Git 2.31.2
      Git 2.32.1
      Git 2.33.2
      Git 2.34.2
      Git 2.35.2

John Cai (15):
      receive-pack.c: consolidate find header logic
      name-rev: deprecate --stdin in favor of --annotate-stdin
      name-rev.c: use strbuf_getline instead of limited size buffer
      builtin/reflog.c: use parse-options api for expire, delete subcommands
      name-rev: replace --stdin with --annotate-stdin in synopsis
      cat-file: rename cmdmode to transform_mode
      cat-file: introduce batch_mode enum to replace print_contents
      cat-file: add remove_timestamp helper
      cat-file: add --batch-command mode
      stash: add tests to ensure reflog --rewrite --updatref behavior
      reflog: libify delete reflog function and helpers
      stash: call reflog_delete() in reflog.c
      cat-file: skip expanding default format
      rebase: use test_commit helper in setup
      rebase: set REF_HEAD_DETACH in checkout_up_to_date()

Jonathan Tan (6):
      config: make git_config_include() static
      config: include file if remote URL matches a glob
      sparse-checkout: create leading directory
      clone: support unusual remote ref configurations
      ls-files: support --recurse-submodules --stage
      shallow: reset commit grafts when shallow is reset

Jordi Mas (1):
      l10n: Update Catalan translation

Josh Steadmon (3):
      test-lib: unset trace2 parent envvars
      clone, submodule: pass partial clone filters to submodules
      ls-tree: `-l` should not imply recursive listing

Junio C Hamano (40):
      compat/qsort_s.c: avoid using potentially unaligned access
      fetch: help translators by reusing the same message template
      Start post 2.35 cycle
      SubmittingPatches: write problem statement in the log in the present tense
      CodingGuidelines: hint why we value clearly written log messages
      SubmittingPatches: explain why we care about log messages
      Git 2.35.1
      Name the next one 2.36 to prepare for 2.35.1
      The first batch
      The second batch for 2.36
      glossary: describe "worktree"
      The third batch
      The fourth batch
      The fifth batch
      The sixth batch
      The seventh batch
      The eighth batch
      rerere-train: two fixes to the use of "git show -s"
      am/apply: warn if we end up reading patches from terminal
      The ninth batch
      The tenth batch
      The eleventh batch
      The twelfth batch
      The thirteenth batch
      The 14th batch
      reset: show --no-refresh in the short-help
      The 15th batch
      The 16th batch
      The 17th batch
      CodingGuidelines: give deadline for "for (int i = 0; ..."
      Git 2.36-rc0
      Git 2.36-rc1
      Git 2.36-rc2
      Git 2.30.4
      Revert "Merge branch 'ps/avoid-unnecessary-hook-invocation-with-packed-refs'"
      Revert "fetch: increase test coverage of fetches"
      RelNotes: clarify "bisect run unexecutable" tweak
      RelNotes: mention safe.directory
      RelNotes: revert the description on the reverted topics
      Git 2.36

Justin Donnelly (4):
      git-prompt: rename `upstream` to `upstream_type`
      git-prompt: make upstream state indicator location consistent
      git-prompt: make long upstream state indicator consistent
      git-prompt: put upstream comments together

Lessley Dennington (3):
      completion: address sparse-checkout issues
      completion: improve sparse-checkout cone mode directory completion
      completion: handle unusual characters for sparse-checkout

Liginity Lee (1):
      fix typo in git-mktree.txt

Marc Strapetz (4):
      test-lib: introduce API for verifying file mtime
      t7508: fix bogus mtime verification
      t7508: add tests capturing racy timestamp handling
      update-index: refresh should rewrite index in case of racy timestamps

Martin Ågren (1):
      git-ls-tree.txt: fix the name of "%(objectsize:padded)"

Matheus Felipe (1):
      config: correct "--type" option in "git config -h" output

Matheus Valadares (1):
      setup: fix safe.directory key not being checked

Matt Cooper (1):
      index-pack: clarify the breached limit

Matthias Rüster (1):
      l10n: de.po: Update German translation

Michael J Gruber (2):
      test-lib: declare local variables as local
      tests: demonstrate "show --word-diff --color-moved" regression

Neeraj Singh (10):
      wrapper: make inclusion of Windows csprng header tightly scoped
      core.fsyncmethod: add writeout-only mode
      core.fsync: introduce granular fsync control infrastructure
      core.fsync: add configuration parsing
      core.fsync: new option to harden the index
      core.fsync: documentation and user-friendly aggregate options
      core.fsync: fix incorrect expression for default configuration
      trace2: add stats for fsync operations
      core.fsyncmethod: correctly camel-case warning message
      object-file: pass filename to fsync_or_die

Nihal Jere (1):
      Documentation: git-read-tree: separate links using commas

Patrick Steinhardt (24):
      refs: extract packed_refs_delete_refs() to allow control of transaction
      refs: allow passing flags when beginning transactions
      refs: allow skipping the reference-transaction hook
      refs: demonstrate excessive execution of the reference-transaction hook
      refs: do not execute reference-transaction hook on packing refs
      refs: skip hooks when deleting uncovered packed refs
      fetch-pack: use commit-graph when computing cutoff
      fetch: skip computing output width when not printing anything
      fetch: increase test coverage of fetches
      fetch: backfill tags before setting upstream
      fetch: control lifecycle of FETCH_HEAD in a single place
      fetch: report errors when backfilling tags fails
      refs: add interface to iterate over queued transactional updates
      fetch: make `--atomic` flag cover backfilling of tags
      fetch: make `--atomic` flag cover pruning of refs
      upload-pack: look up "want" lines via commit-graph
      fetch: avoid lookup of commits when not appending to FETCH_HEAD
      refs: add ability for backends to special-case reading of symbolic refs
      remote: read symbolic refs via `refs_read_symbolic_ref()`
      refs/files-backend: optimize reading of symbolic refs
      t5503: simplify setup of test which exercises failure of backfill
      repack: refactor to avoid double-negation of update-server-info
      repack: add config to skip updating server info
      core.fsync: new option to harden references

Peter Krefting (1):
      l10n: sv.po: Update Swedish translation (5282t0f0u)

Philip Oakley (2):
      README.md: add CodingGuidelines and a link for Translators
      doc: check-ignore: code-quote an exclamation mark

Philippe Blain (1):
      pull --rebase: honor rebase.autostash when fast-forwarding

Phillip Wood (29):
      t3701: clean up hunk splitting tests
      builtin add -p: fix hunk splitting
      rebase: factor out checkout for up to date branch
      t5403: refactor rebase post-checkout hook tests
      rebase: pass correct arguments to post-checkout hook
      rebase: do not remove untracked files on checkout
      rebase --apply: don't run post-checkout hook if there is an error
      reset_head(): remove action parameter
      reset_head(): factor out ref updates
      reset_head(): make default_reflog_action optional
      create_autostash(): remove unneeded parameter
      rebase: cleanup reset_head() calls
      reset_head(): take struct rebase_head_opts
      rebase --apply: fix reflog
      rebase --apply: set ORIG_HEAD correctly
      rebase -m: don't fork git checkout
      xdiff: fix a memory leak
      xdiff: handle allocation failure in patience diff
      xdiff: refactor a function
      xdiff: handle allocation failure when merging
      terminal: always reset terminal when reading without echo
      terminal: pop signal handler when terminal is restored
      terminal: set VMIN and VTIME in non-canonical mode
      add -p: disable stdin buffering when interactive.singlekey is set
      terminal: use flags for save_term()
      terminal: don't assume stdin is /dev/tty
      terminal: work around macos poll() bug
      terminal: restore settings on SIGTSTP
      worktree: add -z option for list subcommand

René Scharfe (10):
      grep: use grep_or_expr() in compile_pattern_or()
      grep: use grep_not_expr() in compile_pattern_not()
      apply: use strsets to track symlinks
      stable-qsort: avoid using potentially unaligned access
      bisect--helper: report actual bisect_state() argument on error
      bisect--helper: release strbuf and strvec on run error
      bisect: document run behavior with exit codes 126 and 127
      bisect--helper: double-check run command on exit code 126 and 127
      parse-options: document bracketing of argh
      grep: fix triggering PCRE2_NO_START_OPTIMIZE workaround

Robert Coup (8):
      fetch: fix negotiate-only error message
      fetch-negotiator: add specific noop initializer
      fetch-pack: add refetch
      builtin/fetch-pack: add --refetch option
      fetch: add --refetch option
      t5615-partial-clone: add test for fetch --refetch
      fetch: after refetch, encourage auto gc repacking
      docs: mention --refetch fetch option

SZEDER Gábor (1):
      reflog: fix 'show' subcommand's argv

Shaoxuan Yuan (4):
      builtin/diff.c: fix "git-diff" usage string typo
      t/lib-read-tree-m-3way: modernize style
      t/lib-read-tree-m-3way: indent with tabs
      t0001: replace "test [-d|-f]" with test_path_is_* functions

Shubham Mishra (3):
      t0003: avoid pipes with Git on LHS
      t0001-t0028: avoid pipes with Git on LHS
      t0030-t0050: avoid pipes with Git on LHS

Tao Klerks (6):
      t7519: avoid file to index mtime race for untracked cache
      t7519: populate untracked cache before test
      untracked-cache: write index when populating empty untracked cache
      t/helper/test-chmtime: update mingw to support chmtime on directories
      t7063: mtime-mangling instead of delays in untracked cache testing
      tracking branches: add advice to ambiguous refspec error

Taylor Blau (15):
      grep: extract grep_binexp() from grep_or_expr()
      grep: use grep_and_expr() in compile_pattern_and()
      t5326: demonstrate bitmap corruption after permutation
      midx.c: make changing the preferred pack safe
      pack-revindex.c: instrument loading on-disk reverse index
      t5326: drop unnecessary setup
      t5326: extract `test_rev_exists`
      t5326: move tests to t/lib-bitmap.sh
      t/lib-bitmap.sh: parameterize tests over reverse index source
      midx: read `RIDX` chunk when present
      pack-bitmap.c: gracefully fallback after opening pack/MIDX
      midx: prevent writing a .bitmap without any objects
      CODE_OF_CONDUCT.md: update PLC members list
      builtin/remote.c: parse options in 'rename'
      builtin/remote.c: show progress when renaming remote references

Teng Long (6):
      git-cli.txt: clarify "options first and then args"
      ls-tree: rename "retval" to "recurse" in "show_tree()"
      ls-tree: simplify nesting if/else logic in "show_tree()"
      ls-tree: fix "--name-only" and "--long" combined use bug
      ls-tree: slightly refactor `show_tree()`
      ls-tree: support --object-only option for "git-ls-tree"

Thomas Gummerer (1):
      fetch --prune: exit with error if pruning fails

Thomas Koutcher (1):
      subtree: force merge commit

Todd Zullinger (3):
      t/lib-gpg: reload gpg components after updating trustlist
      t/lib-gpg: kill all gpg components, not just gpg-agent
      doc: replace "--" with {litdd} in credential-cache/fsmonitor

Trần Ngọc Quân (1):
      l10n: vi(5285t): v2.36.0 round 2

Victoria Dye (30):
      reset: fix validation in sparse index test
      reset: reorder wildcard pathspec conditions
      clean: integrate with sparse index
      checkout-index: expand sparse checkout compatibility tests
      checkout-index: add --ignore-skip-worktree-bits option
      checkout-index: integrate with sparse index
      update-index: add tests for sparse-checkout compatibility
      update-index: integrate with sparse index
      update-index: reduce scope of index expansion in do_reupdate
      sparse-index: prevent repo root from becoming sparse
      status: fix nested sparse directory diff in sparse index
      read-tree: explicitly disallow prefixes with a leading '/'
      read-tree: expand sparse checkout test coverage
      read-tree: integrate with sparse index
      read-tree: narrow scope of index expansion for '--prefix'
      read-tree: make two-way merge sparse-aware
      read-tree: make three-way merge sparse-aware
      reset: revise index refresh advice
      reset: introduce --[no-]refresh option to --mixed
      reset: replace '--quiet' with '--no-refresh' in performance advice
      reset: suppress '--no-refresh' advice if logging is silenced
      stash: make internal resets quiet and refresh index
      t1092: add sparse directory before cone in test repo
      unpack-trees: increment cache_bottom for sparse directories
      Revert "unpack-trees: improve performance of next_cache_entry"
      reset: do not make '--quiet' disable index refresh
      reset: remove 'reset.quiet' config option
      reset: remove 'reset.refresh' config option
      mv: refresh stat info for moved entry
      contrib/scalar: fix 'all' target in Makefile

Yi-Jyun Pan (1):
      l10n: zh_TW: v2.36.0 round 2

brian m. carlson (6):
      t0027: add tests for eol without text in .gitattributes
      docs: correct documentation about eol attribute
      wrapper: add a helper to generate numbers from a CSPRNG
      wrapper: use a CSPRNG to generate random file names
      doc: clarify interaction between 'eol' and text=auto
      block-sha1: remove use of obsolete x86 assembly

Ævar Arnfjörð Bjarmason (186):
      cat-file tests: test bad usage
      cat-file tests: test messaging on bad objects/paths
      parse-options API: add a usage_msg_optf()
      cat-file docs: fix SYNOPSIS and "-h" output
      cat-file: move "usage" variable to cmd_cat_file()
      cat-file: make --batch-all-objects a CMDMODE
      cat-file: fix remaining usage bugs
      cat-file: correct and improve usage information
      object-name.c: don't have GET_OID_ONLY_TO_DIE imply *_QUIETLY
      cat-file: use GET_OID_ONLY_TO_DIE in --(textconv|filters)
      hook API: add a run_hooks() wrapper
      hook API: add a run_hooks_l() wrapper
      git hook run: add an --ignore-missing flag
      cat-file: don't whitespace-pad "(...)" in SYNOPSIS and usage output
      cat-file: s/_/-/ in typo'd usage_msg_optf() message
      compat: auto-detect if zlib has uncompress2()
      sequencer: don't use die_errno() on refs_resolve_ref_unsafe() failure
      refs API: remove "failure_errno" from refs_resolve_ref_unsafe()
      object-name tests: add tests for ambiguous object blind spots
      object-name: explicitly handle OBJ_BAD in show_ambiguous_object()
      object-name: explicitly handle bad tags in show_ambiguous_object()
      object-name: make ambiguous object output translatable
      object-name: show date for ambiguous tag objects
      object-name: iterate ambiguous objects before showing header
      object-name: re-use "struct strbuf" in show_ambiguous_object()
      perl Git.pm: don't ignore signalled failure in _cmd_close()
      completion tests: re-source git-completion.bash in a subshell
      completion: add a GIT_COMPLETION_SHOW_ALL_COMMANDS
      leak tests: fix a memory leak in "test-progress" helper
      progress.c test helper: add missing braces
      progress.c tests: make start/stop commands on stdin
      progress.c tests: test some invalid usage
      progress.h: format and be consistent with progress.c naming
      progress.c: use dereferenced "progress" variable, not "(*p_progress)"
      progress.c: refactor stop_progress{,_msg}() to use helpers
      progress API: unify stop_progress{,_msg}(), fix trace2 bug
      pack-bitmap-write.c: don't return without stop_progress()
      t0051: use "skip_all" under !MINGW in single-test file
      hash-object: fix a trivial leak in --path
      ls-remote & transport API: release "struct transport_ls_refs_options"
      grep.h: remove unused "regex_t regexp" from grep_opt
      log tests: check if grep_config() is called by "log"-like cmds
      grep tests: create a helper function for "BRE" or "ERE"
      grep tests: add missing "grep.patternType" config tests
      built-ins: trust the "prefix" from run_builtin()
      grep.c: don't pass along NULL callback value
      grep API: call grep_config() after grep_init()
      grep.h: make "grep_opt.pattern_type_option" use its enum
      grep.c: do "if (bool && memchr())" not "if (memchr() && bool)"
      grep: simplify config parsing and option parsing
      cache.h: remove always unused show_date_human() declaration
      date API: create a date.h, split from cache.h
      date API: provide and use a DATE_MODE_INIT
      date API: add basic API docs
      date API: add and use a date_mode_release()
      diff.[ch]: have diff_free() call clear_pathspec(opts.pathspec)
      diff.[ch]: have diff_free() free options->parseopts
      hook tests: test for exact "pre-push" hook input
      hook tests: use a modern style for "pre-push" tests
      git-compat-util.h: clarify GCC v.s. C99-specific in comment
      C99: remove hardcoded-out !HAVE_VARIADIC_MACROS code
      help doc: add missing "]" to "[-a|--all]"
      help.c: use puts() instead of printf{,_ln}() for consistency
      help tests: test "git" and "git help [-a|-g] spacing
      help.c: split up list_all_cmds_help() function
      help: note the option name on option incompatibility
      help: correct usage & behavior of "git help --all"
      help: error if [-a|-g|-c] and [-i|-m|-w] are combined
      help: add --no-[external-commands|aliases] for use with --all
      help: don't print "\n" before single-section output
      imap-send.c: use designated initializers for "struct imap_server_conf"
      trace2: use designated initializers for "struct tr2_tgt"
      trace2: use designated initializers for "struct tr2_dst"
      object-file: use designated initializers for "struct git_hash_algo"
      archive-*.c: use designated initializers for "struct archiver"
      userdiff.c: use designated initializers for "struct userdiff_driver"
      convert.c: use designated initializers for "struct stream_filter*"
      refspec.c: use designated initializers for "struct refspec_item"
      fast-import.c: use designated initializers for "partial" struct assignments
      object-file.c: split up declaration of unrelated variables
      object-file API: return "void", not "int" from hash_object_file()
      object-file API: add a format_object_header() function
      object-file API: have write_object_file() take "enum object_type"
      object API: correct "buf" v.s. "map" mismatch in *.c and *.h
      object API docs: move check_object_signature() docs to cache.h
      object API users + docs: check <0, not !0 with check_object_signature()
      object-file API: split up and simplify check_object_signature()
      object API: rename hash_object_file_literally() to write_*()
      object-file API: have hash_object_file() take "enum object_type"
      object-file.c: add a literal version of write_object_file_prepare()
      object-file API: pass an enum to read_object_with_reference()
      test-lib: add GIT_SAN_OPTIONS, inherit [AL]SAN_OPTIONS
      test-lib: correct and assert TEST_DIRECTORY overriding
      test-lib: make $GIT_BUILD_DIR an absolute path
      test-lib: add "fast_unwind_on_malloc=0" to LSAN_OPTIONS
      scalar Makefile: use "The default target of..." pattern
      Makefiles: add "shared.mak", move ".DELETE_ON_ERROR" to it
      Makefile: disable GNU make built-in wildcard rules
      Makefile: define $(LIB_H) in terms of $(FIND_SOURCE_FILES)
      Makefile: move ".SUFFIXES" rule to shared.mak
      Makefile: move $(comma), $(empty) and $(space) to shared.mak
      Makefile: add "$(QUIET)" boilerplate to shared.mak
      Makefiles: add and use wildcard "mkdir -p" template
      log tests: fix "abort tests early" regression in ff37a60c369
      index-pack: fix memory leaks
      merge-base: free() allocated "struct commit **" list
      diff.c: free "buf" in diff_words_flush()
      urlmatch.c: add and use a *_release() function
      remote-curl.c: free memory in cmd_main()
      bundle: call strvec_clear() on allocated strvec
      transport: stop needlessly copying bundle header references
      submodule--helper: fix trivial leak in module_add()
      commit-graph: fix memory leak in misused string_list API
      commit-graph: stop fill_oids_from_packs() progress on error and free()
      lockfile API users: simplify and don't leak "path"
      range-diff: plug memory leak in common invocation
      range-diff: plug memory leak in read_patches()
      repository.c: free the "path cache" in repo_clear()
      submodule tests: test for init and update failure output
      submodule--helper: don't use bitfield indirection for parse_options()
      gettext API users: don't explicitly cast ngettext()'s "n"
      string-list API: change "nr" and "alloc" to "size_t"
      merge: don't run post-hook logic on --no-verify
      hooks: fix an obscure TOCTOU "did we just run a hook?" race
      tests: change some 'test $(git) = "x"' to test_cmp
      tests: use "test_stdout_line_count", not "test $(git [...] | wc -l)"
      read-tree tests: check "diff-files" exit code on failure
      diff tests: don't ignore "git diff" exit code
      diff tests: don't ignore "git diff" exit code in "read" loop
      apply tests: use "test_must_fail" instead of ad-hoc pattern
      merge tests: use "test_must_fail" instead of ad-hoc pattern
      rev-parse tests: don't ignore "git reflog" exit code
      notes tests: don't ignore "git" exit code
      diff tests: don't ignore "git rev-list" exit code
      rev-list tests: don't hide abort() in "test_expect_failure"
      gettext tests: don't ignore "test-tool regex" exit code
      apply tests: don't ignore "git ls-files" exit code, drop sub-shell
      checkout tests: don't ignore "git <cmd>" exit code
      rev-list simplify tests: don't ignore "git" exit code
      list-objects: handle NULL function pointers
      reflog: don't be noisy on empty reflogs
      builtin/submodule--helper.c: rename option struct to "opt"
      test-lib-functions: add and use a "test_hook" wrapper
      hook tests: turn exit code assertions into a loop
      http tests: don't rely on "hook/post-update.sample"
      tests: assume the hooks are disabled by default
      bugreport tests: tighten up "git bugreport -s hooks" test
      fetch+push tests: use "test_hook" and "test_when_finished" pattern
      gc + p4 tests: use "test_hook", remove sub-shells
      tests: change "cat && chmod +x" to use "test_hook"
      tests: change "mkdir -p && write_script" to use "test_hook"
      tests: use "test_hook" for misc "mkdir -p" and "chmod" cases
      diff.c: fix a double-free regression in a18d66cefb
      refs: use designated initializers for "struct ref_storage_be"
      refs: use designated initializers for "struct ref_iterator_vtable"
      misc *.c: use designated initializers for struct assignments
      packed-backend: remove stub BUG(...) functions
      refs debug: add a wrapper for "read_symbolic_ref"
      tests: extend "test_hook" for "rm" and "chmod -x", convert "$HOOK"
      proc-receive hook tests: use "test_hook" instead of "write_script"
      http tests: use "test_hook" for "smart" and "dumb" http tests
      reflog.c: indent argument lists
      reflog: refactor cmd_reflog() to "if" branches
      reflog tests: add missing "git reflog exists" tests
      reflog: move "usage" variables and use macros
      git reflog [expire|delete]: make -h output consistent with SYNOPSIS
      reflog exists: use parse_options() API
      Makefile: use ' ', not non-existing $(wspfx_SQ)
      ls-tree tests: add tests for --name-status
      ls-tree: remove commented-out code
      ls-tree: add missing braces to "else" arms
      ls-tree: use "enum object_type", not {blob,tree,commit}_type
      ls-tree: use "size_t", not "int" for "struct strbuf"'s "len"
      ls-tree: introduce struct "show_tree_data"
      ls-tree: introduce "--format" option
      ls-tree: detect and error on --name-only --name-status
      ls-tree: split up "fast path" callbacks
      hooks: fix "invoked hook" regression in a8cc5943338
      reflog: convert to parse_options() API
      reflog [show]: display sensible -h output
      test-lib: have --immediate emit valid TAP on failure
      pack-objects: lazily set up "struct rev_info", don't leak
      reftable: make assignments portable to AIX xlc v12.01
      Documentation/Makefile: fix "make info" regression in dad9cd7d518
      Documentation: add --batch-command to cat-file synopsis
      ls-tree doc: document interaction with submodules


^ permalink raw reply	[relevance 3%]

* Re: Review Request (was Re: [PATCH 0/7] rebase: make reflog messages independent of the backend)
  2022-04-17  2:13  0%   ` Elijah Newren
@ 2022-04-18 18:56  0%     ` Phillip Wood
  0 siblings, 0 replies; 200+ results
From: Phillip Wood @ 2022-04-18 18:56 UTC (permalink / raw)
  To: Elijah Newren, Phillip Wood
  Cc: Phillip Wood via GitGitGadget, Git Mailing List,
	Johannes Schindelin, Ævar Arnfjörð Bjarmason

Hi Elijah

On 17/04/2022 03:13, Elijah Newren wrote:
> On Mon, Apr 4, 2022 at 8:34 AM Phillip Wood <phillip.wood123@gmail.com> wrote:
>>
>> If anyone has time to review these patches I'd be very grateful. I've
>> cc'd this message to some list regulars who have reviewed rebase patches
>> before but if anyone else fancies taking a look at them that would be great.
> 
> I apologize for the delay here...especially when it came after you had
> already waited a month and a half.  (This is the first git thing I've
> done in over a month, sadly.)  Anyway, I just read through the series
> and left some comments; mostly looks good but I second the request to
> split up one of the patches.

There's no need to apologize, I'm very grateful for you comments. I'll 
re-roll with that patch split up.

Thanks

Phillip

> 
>> On 21/02/2022 11:10, Phillip Wood via GitGitGadget wrote:
>>> This is a series of rebase reflog related patches with the aim of unifying
>>> the reflog messages from the two rebase backends.
>>>
>>>    * improve rebase reflog test coverage
>>>    * rebase --merge: fix reflog messages for --continue and --skip
>>>    * rebase --apply: respect GIT_REFLOG_ACTION
>>>    * rebase --abort: improve reflog message
>>>    * unify reflog messages between the two rebase backends
>>>
>>> This series is based on pw/use-inprocess-checkout-in-rebase
>>>
>>> Phillip Wood (7):
>>>     rebase --apply: remove duplicated code
>>>     rebase --merge: fix reflog when continuing
>>>     rebase --merge: fix reflog message after skipping
>>>     rebase --apply: respect GIT_REFLOG_ACTION
>>>     rebase --apply: make reflog messages match rebase --merge
>>>     rebase --abort: improve reflog message
>>>     rebase: cleanup action handling
>>>
>>>    builtin/rebase.c          | 144 ++++++++++++-----------------
>>>    sequencer.c               |   5 ++
>>>    t/t3406-rebase-message.sh | 185 +++++++++++++++++++++++++++++++-------
>>>    3 files changed, 214 insertions(+), 120 deletions(-)
>>>
>>>
>>> base-commit: 38c541ce94048cf72aa4f465be9314423a57f445
>>> Published-As: https://github.com/gitgitgadget/git/releases/tag/pr-1150%2Fphillipwood%2Fwip%2Frebase-reflog-fixes-v1
>>> Fetch-It-Via: git fetch https://github.com/gitgitgadget/git pr-1150/phillipwood/wip/rebase-reflog-fixes-v1
>>> Pull-Request: https://github.com/gitgitgadget/git/pull/1150

^ permalink raw reply	[relevance 0%]

* [PATCH v2 4/8] rebase --merge: fix reflog message after skipping
  2022-04-20  9:56  3% ` [PATCH v2 0/8] " Phillip Wood via GitGitGadget
  2022-04-20  9:56  2%   ` [PATCH v2 3/8] rebase --merge: fix reflog when continuing Phillip Wood via GitGitGadget
@ 2022-04-20  9:56  2%   ` Phillip Wood via GitGitGadget
  1 sibling, 0 replies; 200+ results
From: Phillip Wood via GitGitGadget @ 2022-04-20  9:56 UTC (permalink / raw)
  To: git
  Cc: Phillip Wood, Christian Couder, Elijah Newren, Phillip Wood,
	Phillip Wood

From: Phillip Wood <phillip.wood@dunelm.org.uk>

The reflog message for every pick after running "rebase --skip" looks
like

	rebase (skip) (pick): commit subject line

Fix this by not appending " (skip)" to the reflog action.

Signed-off-by: Phillip Wood <phillip.wood@dunelm.org.uk>
---
 builtin/rebase.c          |  2 --
 t/t3406-rebase-message.sh | 24 ++++++++++++++++++++++++
 2 files changed, 24 insertions(+), 2 deletions(-)

diff --git a/builtin/rebase.c b/builtin/rebase.c
index cd9a4f3e2f1..36863117fba 100644
--- a/builtin/rebase.c
+++ b/builtin/rebase.c
@@ -1273,8 +1273,6 @@ int cmd_rebase(int argc, const char **argv, const char *prefix)
 		struct string_list merge_rr = STRING_LIST_INIT_DUP;
 
 		options.action = "skip";
-		set_reflog_action(&options);
-
 		rerere_clear(the_repository, &merge_rr);
 		string_list_clear(&merge_rr, 1);
 		ropts.flags = RESET_HEAD_HARD;
diff --git a/t/t3406-rebase-message.sh b/t/t3406-rebase-message.sh
index 3ca2fbb0d59..8aa6a79acc1 100755
--- a/t/t3406-rebase-message.sh
+++ b/t/t3406-rebase-message.sh
@@ -163,6 +163,30 @@ test_reflog () {
 	# check there is only one new entry in the branch reflog
 	test_cmp_rev fast-forward@{1} X
 	'
+
+	test_expect_success "rebase $mode --skip reflog${reflog_action:+ GIT_REFLOG_ACTION=$reflog_action}" '
+	git checkout conflicts &&
+	test_when_finished "git reset --hard Q" &&
+
+	(
+		if test -n "$reflog_action"
+		then
+			GIT_REFLOG_ACTION="$reflog_action" &&
+			export GIT_REFLOG_ACTION
+		fi &&
+		test_must_fail git rebase $mode main &&
+		git rebase --skip
+	) &&
+
+	git log -g --format=%gs -4 >actual &&
+	write_reflog_expect <<-EOF &&
+	${reflog_action:-rebase} (finish): returning to refs/heads/conflicts
+	${reflog_action:-rebase} (pick): Q
+	${reflog_action:-rebase} (pick): P
+	${reflog_action:-rebase} (start): checkout main
+	EOF
+	test_cmp expect actual
+	'
 }
 
 test_reflog --merge
-- 
gitgitgadget


^ permalink raw reply related	[relevance 2%]

* [PATCH v2 3/8] rebase --merge: fix reflog when continuing
  2022-04-20  9:56  3% ` [PATCH v2 0/8] " Phillip Wood via GitGitGadget
@ 2022-04-20  9:56  2%   ` Phillip Wood via GitGitGadget
  2022-04-20  9:56  2%   ` [PATCH v2 4/8] rebase --merge: fix reflog message after skipping Phillip Wood via GitGitGadget
  1 sibling, 0 replies; 200+ results
From: Phillip Wood via GitGitGadget @ 2022-04-20  9:56 UTC (permalink / raw)
  To: git
  Cc: Phillip Wood, Christian Couder, Elijah Newren, Phillip Wood,
	Phillip Wood

From: Phillip Wood <phillip.wood@dunelm.org.uk>

The reflog message for a conflict resolution committed by "rebase
--continue" looks like

	rebase (continue): commit subject line

Unfortunately the reflog message each subsequent pick look like

	rebase (continue) (pick): commit subject line

Fix this by setting the reflog message for "rebase --continue" in
sequencer_continue() so it does not affect subsequent commits. This
introduces a memory leak similar to the one leaking GIT_REFLOG_ACTION
in pick_commits(). Both of these will be fixed in a future series that
stops the sequencer calling setenv().

Signed-off-by: Phillip Wood <phillip.wood@dunelm.org.uk>
---
 builtin/rebase.c          | 2 --
 sequencer.c               | 5 +++++
 t/t3406-rebase-message.sh | 9 +++++++--
 3 files changed, 12 insertions(+), 4 deletions(-)

diff --git a/builtin/rebase.c b/builtin/rebase.c
index 4832f16e675..cd9a4f3e2f1 100644
--- a/builtin/rebase.c
+++ b/builtin/rebase.c
@@ -1247,8 +1247,6 @@ int cmd_rebase(int argc, const char **argv, const char *prefix)
 		int fd;
 
 		options.action = "continue";
-		set_reflog_action(&options);
-
 		/* Sanity check */
 		if (get_oid("HEAD", &head))
 			die(_("Cannot read HEAD"));
diff --git a/sequencer.c b/sequencer.c
index bdd66b4b67a..3634ad5baa9 100644
--- a/sequencer.c
+++ b/sequencer.c
@@ -4777,6 +4777,8 @@ int sequencer_continue(struct repository *r, struct replay_opts *opts)
 	if (read_populate_opts(opts))
 		return -1;
 	if (is_rebase_i(opts)) {
+		char *previous_reflog_action;
+
 		if ((res = read_populate_todo(r, &todo_list, opts)))
 			goto release_todo_list;
 
@@ -4787,10 +4789,13 @@ int sequencer_continue(struct repository *r, struct replay_opts *opts)
 			unlink(rebase_path_dropped());
 		}
 
+		previous_reflog_action = xstrdup(getenv(GIT_REFLOG_ACTION));
+		setenv(GIT_REFLOG_ACTION, reflog_message(opts, "continue", NULL), 1);
 		if (commit_staged_changes(r, opts, &todo_list)) {
 			res = -1;
 			goto release_todo_list;
 		}
+		setenv(GIT_REFLOG_ACTION, previous_reflog_action, 1);
 	} else if (!file_exists(get_todo_path(opts)))
 		return continue_single_pick(r, opts);
 	else if ((res = read_populate_todo(r, &todo_list, opts)))
diff --git a/t/t3406-rebase-message.sh b/t/t3406-rebase-message.sh
index 5253dd1551d..3ca2fbb0d59 100755
--- a/t/t3406-rebase-message.sh
+++ b/t/t3406-rebase-message.sh
@@ -17,6 +17,7 @@ test_expect_success 'setup' '
 
 	git checkout -b conflicts O &&
 	test_commit P &&
+	test_commit conflict-X fileX &&
 	test_commit Q &&
 
 	git checkout -b topic O &&
@@ -107,13 +108,17 @@ test_reflog () {
 			GIT_REFLOG_ACTION="$reflog_action" &&
 			export GIT_REFLOG_ACTION
 		fi &&
-		git rebase $mode main
+		test_must_fail git rebase $mode main &&
+		echo resolved >fileX &&
+		git add fileX &&
+		git rebase --continue
 	) &&
 
-	git log -g --format=%gs -4 >actual &&
+	git log -g --format=%gs -5 >actual &&
 	write_reflog_expect <<-EOF &&
 	${reflog_action:-rebase} (finish): returning to refs/heads/conflicts
 	${reflog_action:-rebase} (pick): Q
+	${reflog_action:-rebase} (continue): conflict-X
 	${reflog_action:-rebase} (pick): P
 	${reflog_action:-rebase} (start): checkout main
 	EOF
-- 
gitgitgadget


^ permalink raw reply related	[relevance 2%]

* [PATCH v2 0/8] rebase: make reflog messages independent of the backend
  2022-02-21 11:10  3% [PATCH 0/7] rebase: make reflog messages independent of the backend Phillip Wood via GitGitGadget
                   ` (3 preceding siblings ...)
  2022-04-17  2:09  0% ` [PATCH 0/7] rebase: make reflog messages independent of the backend Elijah Newren
@ 2022-04-20  9:56  3% ` Phillip Wood via GitGitGadget
  2022-04-20  9:56  2%   ` [PATCH v2 3/8] rebase --merge: fix reflog when continuing Phillip Wood via GitGitGadget
  2022-04-20  9:56  2%   ` [PATCH v2 4/8] rebase --merge: fix reflog message after skipping Phillip Wood via GitGitGadget
  4 siblings, 2 replies; 200+ results
From: Phillip Wood via GitGitGadget @ 2022-04-20  9:56 UTC (permalink / raw)
  To: git; +Cc: Phillip Wood, Christian Couder, Elijah Newren, Phillip Wood

Thanks to Christian and Elijah for their comments on V1.

I've updated commit message for patch 1 to try and be clearer about the
removal of a call to strbuf_release() and spilt out the test changes from
the old patch 2 into a separate preparatory patch.

V1 Cover Letter:

This is a series of rebase reflog related patches with the aim of unifying
the reflog messages from the two rebase backends.

 * improve rebase reflog test coverage
 * rebase --merge: fix reflog messages for --continue and --skip
 * rebase --apply: respect GIT_REFLOG_ACTION
 * rebase --abort: improve reflog message
 * unify reflog messages between the two rebase backends

This series is based on pw/use-inprocess-checkout-in-rebase

Phillip Wood (8):
  rebase --apply: remove duplicated code
  t3406: rework rebase reflog tests
  rebase --merge: fix reflog when continuing
  rebase --merge: fix reflog message after skipping
  rebase --apply: respect GIT_REFLOG_ACTION
  rebase --apply: make reflog messages match rebase --merge
  rebase --abort: improve reflog message
  rebase: cleanup action handling

 builtin/rebase.c          | 144 ++++++++++++-----------------
 sequencer.c               |   5 ++
 t/t3406-rebase-message.sh | 185 +++++++++++++++++++++++++++++++-------
 3 files changed, 214 insertions(+), 120 deletions(-)


base-commit: 38c541ce94048cf72aa4f465be9314423a57f445
Published-As: https://github.com/gitgitgadget/git/releases/tag/pr-1150%2Fphillipwood%2Fwip%2Frebase-reflog-fixes-v2
Fetch-It-Via: git fetch https://github.com/gitgitgadget/git pr-1150/phillipwood/wip/rebase-reflog-fixes-v2
Pull-Request: https://github.com/gitgitgadget/git/pull/1150

Range-diff vs v1:

 1:  243e7b0c372 ! 1:  a4320f2fcf3 rebase --apply: remove duplicated code
     @@ Commit message
          to do as we have already updated HEAD.
      
          Note that the removal of "strbuf_release(&msg)" is safe as there is an
     -    identical call just above this hunk.
     +    identical call just above this hunk which can be seen by viewing the
     +    diff with -U6.
      
          Signed-off-by: Phillip Wood <phillip.wood@dunelm.org.uk>
      
 2:  493254ffbb8 ! 2:  0904b50a377 rebase --merge: fix reflog when continuing
     @@ Metadata
      Author: Phillip Wood <phillip.wood@dunelm.org.uk>
      
       ## Commit message ##
     -    rebase --merge: fix reflog when continuing
     +    t3406: rework rebase reflog tests
      
     -    The reflog message for a conflict resolution committed by "rebase
     -    --continue" looks like
     +    Refactor the tests in preparation for adding more tests in the next
     +    few commits. The reworked tests use the same function for testing both
     +    the "merge" and "apply" backends. The test coverage for the "apply"
     +    backend now includes setting GIT_REFLOG_ACTION.
      
     -            rebase (continue): commit subject line
     -
     -    Unfortunately the reflog message each subsequent pick look like
     -
     -            rebase (continue) (pick): commit subject line
     -
     -    Fix this by setting the reflog message for "rebase --continue" in
     -    sequencer_continue() so it does not affect subsequent commits. This
     -    introduces a memory leak similar to the one leaking GIT_REFLOG_ACTION
     -    in pick_commits(). Both of these will be fixed in a future series that
     -    stops the sequencer calling setenv().
     +    Note that rebasing the "conflicts" branch does not create any
     +    conflicts yet. A commit to do that will be added in the next commit
     +    and the diff ends up smaller if we have don't rename the branch when
     +    it is added.
      
          Signed-off-by: Phillip Wood <phillip.wood@dunelm.org.uk>
      
     - ## builtin/rebase.c ##
     -@@ builtin/rebase.c: int cmd_rebase(int argc, const char **argv, const char *prefix)
     - 		int fd;
     - 
     - 		options.action = "continue";
     --		set_reflog_action(&options);
     --
     - 		/* Sanity check */
     - 		if (get_oid("HEAD", &head))
     - 			die(_("Cannot read HEAD"));
     -
     - ## sequencer.c ##
     -@@ sequencer.c: int sequencer_continue(struct repository *r, struct replay_opts *opts)
     - 	if (read_populate_opts(opts))
     - 		return -1;
     - 	if (is_rebase_i(opts)) {
     -+		char *previous_reflog_action;
     -+
     - 		if ((res = read_populate_todo(r, &todo_list, opts)))
     - 			goto release_todo_list;
     - 
     -@@ sequencer.c: int sequencer_continue(struct repository *r, struct replay_opts *opts)
     - 			unlink(rebase_path_dropped());
     - 		}
     - 
     -+		previous_reflog_action = xstrdup(getenv(GIT_REFLOG_ACTION));
     -+		setenv(GIT_REFLOG_ACTION, reflog_message(opts, "continue", NULL), 1);
     - 		if (commit_staged_changes(r, opts, &todo_list)) {
     - 			res = -1;
     - 			goto release_todo_list;
     - 		}
     -+		setenv(GIT_REFLOG_ACTION, previous_reflog_action, 1);
     - 	} else if (!file_exists(get_todo_path(opts)))
     - 		return continue_single_pick(r, opts);
     - 	else if ((res = read_populate_todo(r, &todo_list, opts)))
     -
       ## t/t3406-rebase-message.sh ##
      @@ t/t3406-rebase-message.sh: export GIT_TEST_DEFAULT_INITIAL_BRANCH_NAME
       test_expect_success 'setup' '
     @@ t/t3406-rebase-message.sh: export GIT_TEST_DEFAULT_INITIAL_BRANCH_NAME
       
      +	git checkout -b conflicts O &&
      +	test_commit P &&
     -+	test_commit conflict-X fileX &&
      +	test_commit Q &&
      +
       	git checkout -b topic O &&
     @@ t/t3406-rebase-message.sh: test_expect_success 'error out early upon -C<n> or --
      +			GIT_REFLOG_ACTION="$reflog_action" &&
      +			export GIT_REFLOG_ACTION
      +		fi &&
     -+		test_must_fail git rebase $mode main &&
     -+		echo resolved >fileX &&
     -+		git add fileX &&
     -+		git rebase --continue
     ++		git rebase $mode main
      +	) &&
      +
     -+	git log -g --format=%gs -5 >actual &&
     ++	git log -g --format=%gs -4 >actual &&
      +	write_reflog_expect <<-EOF &&
      +	${reflog_action:-rebase} (finish): returning to refs/heads/conflicts
      +	${reflog_action:-rebase} (pick): Q
     -+	${reflog_action:-rebase} (continue): conflict-X
      +	${reflog_action:-rebase} (pick): P
      +	${reflog_action:-rebase} (start): checkout main
       	EOF
 -:  ----------- > 3:  6c15f00e170 rebase --merge: fix reflog when continuing
 3:  f4e6e94bc2c = 4:  d3afa85ffc5 rebase --merge: fix reflog message after skipping
 4:  58c560d0e19 = 5:  afa67abe01a rebase --apply: respect GIT_REFLOG_ACTION
 5:  1c3ec165422 = 6:  95161f21e00 rebase --apply: make reflog messages match rebase --merge
 6:  c863cebbdc8 = 7:  d2c1dfbcd5e rebase --abort: improve reflog message
 7:  d26a221a79d = 8:  b0d21affa78 rebase: cleanup action handling

-- 
gitgitgadget

^ permalink raw reply	[relevance 3%]

* [PATCH v2 0/6] Fix merge restore state
  @ 2022-06-19  6:50  3% ` Elijah Newren via GitGitGadget
  2022-06-19  6:50  2%   ` [PATCH v2 3/6] merge: fix save_state() to work when there are racy-dirty files Elijah Newren via GitGitGadget
                     ` (2 more replies)
  0 siblings, 3 replies; 200+ results
From: Elijah Newren via GitGitGadget @ 2022-06-19  6:50 UTC (permalink / raw)
  To: git; +Cc: ZheNing Hu, Elijah Newren

MAINTAINER NOTE: Rebased on latest main/master. (In particular, needs
vd/sparse-stash; otherwise, the changes made here regress a
ensure-full-index testcase in t1092). Also, this fixes issues that predate
the v2.37 cycle, so this series can wait until v2.38 opens up.

Other note: If this rounds needs updates, ZheNing Hu may be the one to
respond and make any necessary updates, as per [1].

----------------------------------------------------------------------------

This is a simple series to fix restore_state() in builtin/merge.c, fixing
the issue reported by ZheNing Hu over here:
https://lore.kernel.org/git/CAOLTT8R7QmpvaFPTRs3xTpxr7eiuxF-ZWtvUUSC0-JOo9Y+SqA@mail.gmail.com/

Changes since v1:

 * Rebased
 * Included Junio's patch providing more testcases from
   https://lore.kernel.org/git/xmqqbkvtnyae.fsf@gitster.g/
 * Added three new patches to fix issues highlighted by Junio's testcases,
   in particular to (a) fix stashing with racy-dirty files present, (b) fix
   restoring staged state in restore_state(), and (c) ensure we can restore
   pre-merge state. All three were long-standing issues that we just hadn't
   noticed yet and thus are useful fixes on their own. However, my fix from
   v1 (which still remains as the final patch) does make it easier to notice
   these issues, and in particular that combined with Junio's new testcases
   unearthed those problems.

[1]
https://lore.kernel.org/git/CAOLTT8RpGGioOyaMw5tkeWXmHpOaBW9UH8JghUvBRQ50ZcDdYQ@mail.gmail.com/

Elijah Newren (5):
  merge: remove unused variable
  merge: fix save_state() to work when there are racy-dirty files
  merge: make restore_state() restore staged state too
  merge: ensure we can actually restore pre-merge state
  merge: do not exit restore_state() prematurely

Junio C Hamano (1):
  t6424: make sure a failed merge preserves local changes

 builtin/merge.c                          | 32 ++++++++++++++----------
 t/t6424-merge-unrelated-index-changes.sh | 32 ++++++++++++++++++++++--
 t/t7607-merge-state.sh                   | 25 ++++++++++++++++++
 3 files changed, 74 insertions(+), 15 deletions(-)
 create mode 100755 t/t7607-merge-state.sh


base-commit: 8ddf593a250e07d388059f7e3f471078e1d2ed5c
Published-As: https://github.com/gitgitgadget/git/releases/tag/pr-1231%2Fnewren%2Ffix-merge-restore-state-v2
Fetch-It-Via: git fetch https://github.com/gitgitgadget/git pr-1231/newren/fix-merge-restore-state-v2
Pull-Request: https://github.com/gitgitgadget/git/pull/1231

Range-diff vs v1:

 -:  ----------- > 1:  6147e72c309 t6424: make sure a failed merge preserves local changes
 1:  042d624b815 = 2:  230d84f09c8 merge: remove unused variable
 -:  ----------- > 3:  89e5e633241 merge: fix save_state() to work when there are racy-dirty files
 -:  ----------- > 4:  4a8b7c9e06d merge: make restore_state() restore staged state too
 -:  ----------- > 5:  a03075167c1 merge: ensure we can actually restore pre-merge state
 2:  88bdca72a78 ! 6:  0783b48c121 merge: make restore_state() do as its name says
     @@ Metadata
      Author: Elijah Newren <newren@gmail.com>
      
       ## Commit message ##
     -    merge: make restore_state() do as its name says
     +    merge: do not exit restore_state() prematurely
      
          Previously, if the user:
      
     @@ Commit message
       ## builtin/merge.c ##
      @@ builtin/merge.c: static void restore_state(const struct object_id *head,
       {
     - 	const char *args[] = { "stash", "apply", NULL, NULL };
     + 	const char *args[] = { "stash", "apply", "--index", NULL, NULL };
       
      -	if (is_null_oid(stash))
      -		return;
     @@ builtin/merge.c: static void restore_state(const struct object_id *head,
      +	if (is_null_oid(stash))
      +		goto refresh_cache;
      +
     - 	args[2] = oid_to_hex(stash);
     + 	args[3] = oid_to_hex(stash);
       
       	/*
      @@ builtin/merge.c: static void restore_state(const struct object_id *head,

-- 
gitgitgadget

^ permalink raw reply	[relevance 3%]

* [PATCH v2 3/6] merge: fix save_state() to work when there are racy-dirty files
  2022-06-19  6:50  3% ` [PATCH v2 0/6] " Elijah Newren via GitGitGadget
@ 2022-06-19  6:50  2%   ` Elijah Newren via GitGitGadget
  2022-07-17 16:28  2%     ` ZheNing Hu
  2022-07-19 22:43  2%     ` Junio C Hamano
    2022-07-21  8:16  3%   ` [PATCH v3 0/7] Fix merge restore state Elijah Newren via GitGitGadget
  2 siblings, 2 replies; 200+ results
From: Elijah Newren via GitGitGadget @ 2022-06-19  6:50 UTC (permalink / raw)
  To: git; +Cc: ZheNing Hu, Elijah Newren, Elijah Newren

From: Elijah Newren <newren@gmail.com>

When there are racy-dirty files, but no files are modified,
`git stash create` exits with unsuccessful status.  This causes merge
to fail.  Refresh the index first to avoid this problem.

Signed-off-by: Elijah Newren <newren@gmail.com>
---
 builtin/merge.c | 8 ++++++++
 1 file changed, 8 insertions(+)

diff --git a/builtin/merge.c b/builtin/merge.c
index 00de224a2da..8ce4336dd3f 100644
--- a/builtin/merge.c
+++ b/builtin/merge.c
@@ -313,8 +313,16 @@ static int save_state(struct object_id *stash)
 	int len;
 	struct child_process cp = CHILD_PROCESS_INIT;
 	struct strbuf buffer = STRBUF_INIT;
+	struct lock_file lock_file = LOCK_INIT;
+	int fd;
 	int rc = -1;
 
+	fd = repo_hold_locked_index(the_repository, &lock_file, 0);
+	refresh_cache(REFRESH_QUIET);
+	if (0 <= fd)
+		repo_update_index_if_able(the_repository, &lock_file);
+	rollback_lock_file(&lock_file);
+
 	strvec_pushl(&cp.args, "stash", "create", NULL);
 	cp.out = -1;
 	cp.git_cmd = 1;
-- 
gitgitgadget


^ permalink raw reply related	[relevance 2%]

* What's cooking in git.git (Jun 2022, #07; Wed, 22)
@ 2022-06-22 19:32  3% Junio C Hamano
  0 siblings, 0 replies; 200+ results
From: Junio C Hamano @ 2022-06-22 19:32 UTC (permalink / raw)
  To: git

Here are the topics that have been cooking in my tree.  Commits
prefixed with '+' are in 'next' (being in 'next' is a sign that a
topic is stable enough to be used and are candidate to be in a
future release).  Commits prefixed with '-' are only in 'seen',
and aren't considered "accepted" at all.

Git 2.37-rc2 has been tagged.  Due to summer vacation season in the
northern hemisphere, this cycle is shorter than usual.  We expect to
tag the final 2.37 release early next week.  Hopefully we fixed all
the known regressions in 2.36 without adding too many new ones.

Some new topics are still marked for 'next', but the merges of them
obviously will happen in the next cycle---they will not be in the
upcoming release.

Copies of the source code to Git live in many repositories, and the
following is a list of the ones I push into or their mirrors.  Some
repositories have only a subset of branches.

With maint, master, next, seen, todo:

	git://git.kernel.org/pub/scm/git/git.git/
	git://repo.or.cz/alt-git.git/
	https://kernel.googlesource.com/pub/scm/git/git/
	https://github.com/git/git/
	https://gitlab.com/git-vcs/git/

With all the integration branches and topics broken out:

	https://github.com/gitster/git/

Even though the preformatted documentation in HTML and man format
are not sources, they are published in these repositories for
convenience (replace "htmldocs" with "manpages" for the manual
pages):

	git://git.kernel.org/pub/scm/git/git-htmldocs.git/
	https://github.com/gitster/git-htmldocs.git/

Release tarballs are available at:

	https://www.kernel.org/pub/software/scm/git/

--------------------------------------------------
[New Topics]

* dr/i18n-die-warn-error-usage (2022-06-21) 1 commit
 - i18n: mark message helpers prefix for translation

 Give _() markings to fatal/warning/usage: that is shown in front of
 these messages.

 Will merge to 'next'?
 source: <pull.1279.v2.git.git.1655819877758.gitgitgadget@gmail.com>


* ds/t5510-brokequote (2022-06-21) 1 commit
 - t5510: replace 'origin' with URL more carefully

 Test fix.
 source: <484a330e-0902-6e1b-8189-63c72dcea494@github.com>


* en/merge-restore-to-pristine (2022-06-21) 6 commits
 - merge: do not exit restore_state() prematurely
 - merge: ensure we can actually restore pre-merge state
 - merge: make restore_state() restore staged state too
 - merge: fix save_state() to work when there are racy-dirty files
 - merge: remove unused variable
 - t6424: make sure a failed merge preserves local changes

 When "git merge" finds that it cannot perform a merge, it should
 restore the working tree to the state before the command was
 initiated, but in some corner cases it didn't.

 Needs review.
 source: <pull.1231.v2.git.1655621424.gitgitgadget@gmail.com>


* rs/combine-diff-with-incompatible-options (2022-06-21) 2 commits
 - combine-diff: abort if --output is given
 - combine-diff: abort if --ignore-matching-lines is given

 Certain diff options are currently ignored when combined-diff is
 shown; mark them as incompatible with the feature.

 Will merge to 'next'?
 source: <220524.86v8tuvfl1.gmgdl@evledraar.gmail.com>


* tk/apply-case-insensitive (2022-06-21) 3 commits
 - apply: support case-only renames in case-insensitive filesystems
 - reset: new failing test for reset of case-insensitive duplicate in index
 - t4141: test "git apply" with core.ignorecase

 "git apply" barfed on a patch that makes a case-only rename on a
 case-insensitive filesystem.

 Needs review.
 source: <pull.1257.v2.git.1655655027.gitgitgadget@gmail.com>


* zh/ls-files-format (2022-06-21) 1 commit
 - ls-files: introduce "--format" option

 "git ls-files" learns the "--format" option to tweak its output.

 Needs review.
 source: <pull.1262.v3.git.1655777140231.gitgitgadget@gmail.com>


* ab/test-quoting-fix (2022-06-21) 3 commits
 - config tests: fix harmless but broken "rm -r" cleanup
 - test-lib.sh: fix prepend_var() quoting issue
 - tests: add missing double quotes to included library paths

 Fixes for tests when the source directory has unusual characters in
 its path, e.g. whitespaces, double-quotes, etc.

 Expecting a reroll.
 source: <cover-0.3-00000000000-20220621T221928Z-avarab@gmail.com>


* en/merge-dual-dir-renames-fix (2022-06-21) 3 commits
 - merge-ort: fix issue with dual rename and add/add conflict
 - merge-ort: shuffle the computation and cleanup of potential collisions
 - t6423: add tests of dual directory rename plus add/add conflict

 Fixes a long-standing corner case bug around directory renames in
 the merge-ort strategy.

 Needs review.
 source: <pull.1268.git.1655871651.gitgitgadget@gmail.com>

--------------------------------------------------
[Graduated to 'master']

* jp/prompt-clear-before-upstream-mark (2022-06-10) 2 commits
  (merged to 'next' on 2022-06-15 at e580db03e9)
 + git-prompt: fix expansion of branch colour codes
  (merged to 'next' on 2022-06-08 at 201a84ad63)
 + git-prompt: make colourization consistent

 Bash command line prompt (in contrib/) update.
 source: <20220607115024.64724-1-joak-pet@online.no>


* tb/cruft-packs (2022-06-21) 1 commit
  (merged to 'next' on 2022-06-21 at 0703251124)
 + gc: simplify --cruft description

 Docfix.
 source: <157741e2-cd06-9304-bb21-c67c2cbd923e@web.de>

--------------------------------------------------
[Stalled]

* en/merge-tree (2022-02-23) 13 commits
 - git-merge-tree.txt: add a section on potentional usage mistakes
 - merge-tree: add a --allow-unrelated-histories flag
 - merge-tree: allow `ls-files -u` style info to be NUL terminated
 - merge-tree: provide easy access to `ls-files -u` style info
 - merge-tree: provide a list of which files have conflicts
 - merge-ort: provide a merge_get_conflicted_files() helper function
 - merge-tree: support including merge messages in output
 - merge-ort: split out a separate display_update_messages() function
 - merge-tree: implement real merges
 - merge-tree: add option parsing and initial shell for real merge function
 - merge-tree: move logic for existing merge into new function
 - merge-tree: rename merge_trees() to trivial_merge_trees()
 - Merge branch 'en/remerge-diff' into en/merge-trees

 A new command is introduced that takes two commits and computes a
 tree that would be contained in the resulting merge commit, if the
 histories leading to these two commits were to be merged, and is
 added as a new mode of "git merge-tree" subcommand.

 On hold.
 cf. <CABPp-BGZ7OAYRR5YKRsxJSo-C=ho+qcNAkqwkim8CkhCfCeHsA@mail.gmail.com>
 source: <pull.1122.v6.git.1645602413.gitgitgadget@gmail.com>


* bc/stash-export (2022-04-08) 4 commits
 - builtin/stash: provide a way to import stashes from a ref
 - builtin/stash: provide a way to export stashes to a ref
 - builtin/stash: factor out revision parsing into a function
 - object-name: make get_oid quietly return an error

 A mechanism to export and import stash entries to and from a normal
 commit to transfer it across repositories has been introduced.

 Expecting a reroll.
 cf. <YnL2d4Vr9Vr7W4Hj@camp.crustytoothpaste.net>
 source: <20220407215352.3491567-1-sandals@crustytoothpaste.net>


* cw/remote-object-info (2022-05-06) 11 commits
 - SQUASH??? coccicheck
 - SQUASH??? ensure that coccicheck is happy
 - SQUASH??? compilation fix
 - cat-file: add --batch-command remote-object-info command
 - cat-file: move parse_cmd and DEFAULT_FORMAT up
 - transport: add object-info fallback to fetch
 - transport: add client side capability to request object-info
 - object-info: send attribute packet regardless of object ids
 - object-store: add function to free object_info contents
 - fetch-pack: move fetch default settings
 - fetch-pack: refactor packet writing

 A client component to talk with the object-info endpoint.

 Expecting a reroll.
 source: <20220502170904.2770649-1-calvinwan@google.com>

--------------------------------------------------
[Cooking]

* cr/setup-bug-typo (2022-06-17) 1 commit
  (merged to 'next' on 2022-06-17 at 8834ffe0ab)
 + setup: fix function name in a BUG() message

 Typofix in a BUG() message.

 Will cook in 'next'.
 source: <pull.1255.git.1654782920256.gitgitgadget@gmail.com>


* zk/push-use-bitmaps (2022-06-17) 1 commit
 - send-pack.c: add config push.useBitmaps

 "git push" sometimes perform poorly when reachability bitmaps are
 used, even in a repository where other operations are helped by
 bitmaps.  The push.useBitmaps configuration variable is introduced
 to allow disabling use of reachability bitmaps only for "git push".

 Will merge to 'next'?
 source: <pull.1263.v4.git.1655492779228.gitgitgadget@gmail.com>


* jk/remote-show-with-negative-refspecs (2022-06-17) 1 commit
 - remote: handle negative refspecs in git remote show
 (this branch is used by jk/t5505-restructure.)

 "git remote show [-n] frotz" now pays attention to negative
 pathspecs.

 Will merge to 'next'?
 source: <20220617002036.1577-2-jacob.keller@gmail.com>


* js/commit-graph-parsing-without-repo-settings (2022-06-15) 1 commit
 - commit-graph: refactor to avoid prepare_repo_settings

 source: <9b56496b0809cc8a25af877ea97042e2cb7f2af6.1655246092.git.steadmon@google.com>


* jk/optim-promisor-object-enumeration (2022-06-16) 1 commit
  (merged to 'next' on 2022-06-16 at ce0712a74c)
 + is_promisor_object(): walk promisor packs in pack-order

 Collection of what is referenced by objects in promisor packs have
 been optimized to inspect these objects in the in-pack order.

 Will cook in 'next'.
 source: <YqrTsbXbEjx0Pabn@coredump.intra.peff.net>


* ro/mktree-allow-missing-fix (2022-06-21) 1 commit
 - mktree: do not check type of remote objects

 "git mktree --missing" lazily fetched objects that are missing from
 the local object store, which was totally unnecessary.

 Will merge to 'next'?
 source: <748f39a9-65aa-2110-cf92-7ddf81b5f507@roku.com>


* ll/curl-accept-language (2022-06-13) 2 commits
 - PREP??? give initializer to rpc_state
 - remote-curl: send Accept-Language header to server

 source: <pull.1251.v3.git.1655054421697.gitgitgadget@gmail.com>


* pb/diff-doc-raw-format (2022-06-13) 3 commits
 - diff-index.txt: update raw output format in examples
 - diff-format.txt: correct misleading wording
 - diff-format.txt: dst can be 0* SHA-1 when path is deleted, too

 source: <pull.1259.git.1655123383.gitgitgadget@gmail.com>


* rs/archive-with-internal-gzip (2022-06-15) 6 commits
  (merged to 'next' on 2022-06-17 at ab5af6acd1)
 + archive-tar: use internal gzip by default
 + archive-tar: use OS_CODE 3 (Unix) for internal gzip
 + archive-tar: add internal gzip implementation
 + archive-tar: factor out write_block()
 + archive: rename archiver data field to filter_command
 + archive: update format documentation

 Teach "git archive" to (optionally and then by default) avoid
 spawning an external "gzip" process when creating ".tar.gz" (and
 ".tgz") archives.

 Will cook in 'next'.
 source: <9df761c3-355a-ede9-7971-b32687fe9abb@web.de>


* ds/branch-checked-out (2022-06-21) 7 commits
  (merged to 'next' on 2022-06-21 at e42bc4566f)
 + branch: drop unused worktrees variable
 + fetch: stop passing around unused worktrees variable
  (merged to 'next' on 2022-06-17 at c881874257)
 + branch: fix branch_checked_out() leaks
 + branch: use branch_checked_out() when deleting refs
 + fetch: use new branch_checked_out() and add tests
 + branch: check for bisects and rebases
 + branch: add branch_checked_out() helper

 Introduce a helper to see if a branch is already being worked on
 (hence should not be newly checked out in a working tree), which
 performs much better than the existing find_shared_symref() to
 replace many uses of the latter.

 Will cook in 'next'.
 source: <pull.1254.v2.git.1655234853.gitgitgadget@gmail.com>


* jt/connected-show-missing-from-which-side (2022-06-10) 1 commit
 - fetch,fetch-pack: clarify connectivity check error

 We may find an object missing after a "git fetch" stores the
 objects it obtained from the other side, but it is not necessarily
 because the remote failed to send necessary objects.  Reword the
 messages in an attempt to help users explore other possibilities
 when they hit this error.

 Expecting a reroll.
 source: <20220610195247.1177549-1-jonathantanmy@google.com>


* gc/submodule-update (2022-06-15) 12 commits
 - git-sh-setup.sh: remove "say" function, change last users
 - git-submodule.sh: use "$quiet", not "$GIT_QUIET"
 - submodule--helper: eliminate internal "--update" option
 - submodule--helper: understand --checkout, --merge and --rebase synonyms
 - submodule--helper: report "submodule" as our name in "-h" output
 - submodule--helper: rename "absorb-git-dirs" to "absorbgitdirs"
 - submodule update: remove "-v" option
 - submodule--helper: have --require-init imply --init
 - git-submodule.sh: remove unused top-level "--branch" argument
 - git-submodule.sh: make "$cached" variable a boolean
 - git-submodule.sh: remove unused $prefix var and --super-prefix
 - git-submodule.sh: remove unused sanitize_submodule_env()

 More work on "git submodule update".

 Needs review.
 source: <cover-v2-00.12-00000000000-20220613T220150Z-avarab@gmail.com>


* jc/resolve-undo (2022-06-09) 1 commit
  (merged to 'next' on 2022-06-15 at c195e5a2d9)
 + revision: mark blobs needed for resolve-undo as reachable

 The resolve-undo information in the index was not protected against
 GC, which has been corrected.

 Will cook in 'next'.
 source: <xmqqfskdieqz.fsf@gitster.g>


* ab/build-gitweb (2022-06-02) 7 commits
 - Makefile: build 'gitweb' in the default target
 - gitweb/Makefile: include in top-level Makefile
 - gitweb: remove "test" and "test-installed" targets
 - gitweb/Makefile: prepare to merge into top-level Makefile
 - gitweb/Makefile: clear up and de-duplicate the gitweb.{css,js} vars
 - gitweb/Makefile: add a $(GITWEB_ALL) variable
 - gitweb/Makefile: define all .PHONY prerequisites inline

 Teach "make all" to build gitweb as well.

 Needs review.
 source: <cover-v2-0.7-00000000000-20220531T173805Z-avarab@gmail.com>


* ab/test-without-templates (2022-06-06) 7 commits
 - tests: don't assume a .git/info for .git/info/sparse-checkout
 - tests: don't assume a .git/info for .git/info/exclude
 - tests: don't assume a .git/info for .git/info/refs
 - tests: don't assume a .git/info for .git/info/attributes
 - tests: don't assume a .git/info for .git/info/grafts
 - tests: don't depend on template-created .git/branches
 - t0008: don't rely on default ".git/info/exclude"

 Tweak tests so that they still work when the "git init" template
 did not create .git/info directory.

 Will merge to 'next'?
 source: <cover-v2-0.7-00000000000-20220603T110506Z-avarab@gmail.com>


* ac/bitmap-format-doc (2022-06-16) 3 commits
  (merged to 'next' on 2022-06-16 at 5591d11601)
 + bitmap-format.txt: add information for trailing checksum
 + bitmap-format.txt: fix some formatting issues
 + bitmap-format.txt: feed the file to asciidoc to generate html

 Adjust technical/bitmap-format to be formatted by AsciiDoc, and
 add some missing information to the documentation.

 Will cook in 'next'.
 source: <pull.1246.v4.git.1655355834.gitgitgadget@gmail.com>


* hx/unpack-streaming (2022-06-13) 6 commits
 - unpack-objects: use stream_loose_object() to unpack large objects
 - core doc: modernize core.bigFileThreshold documentation
 - object-file.c: add "stream_loose_object()" to handle large object
 - object-file.c: factor out deflate part of write_loose_object()
 - object-file.c: refactor write_loose_object() to several steps
 - unpack-objects: low memory footprint for get_data() in dry_run mode

 Allow large objects read from a packstream to be streamed into a
 loose object file straight, without having to keep it in-core as a
 whole.

 Will merge to 'next'?
 source: <cover.1654914555.git.chiyutianyi@gmail.com>


* tb/show-ref-count (2022-06-06) 2 commits
 - builtin/show-ref.c: limit output with `--count`
 - builtin/show-ref.c: rename `found_match` to `matches_nr`

 "git show-ref" learned to stop after emitting N refs with the new
 "--count=N" option.

 Expecting a reroll.
 cf. <xmqqczfl4ce1.fsf@gitster.g>
 source: <cover.1654552560.git.me@ttaylorr.com>


* ds/bundle-uri-more (2022-06-06) 6 commits
 - fetch: add 'refs/bundle/' to log.excludeDecoration
 - bundle-uri: add support for http(s):// and file://
 - fetch: add --bundle-uri option
 - bundle-uri: create basic file-copy logic
 - remote-curl: add 'get' capability
 - docs: document bundle URI standard

 The "bundle URI" topic.

 Needs review.
 source: <pull.1248.git.1654545325.gitgitgadget@gmail.com>


* js/bisect-in-c (2022-05-21) 15 commits
 - bisect: no longer try to clean up left-over `.git/head-name` files
 - bisect: remove Cogito-related code
 - Turn `git bisect` into a full built-in
 - bisect: teach the `bisect--helper` command to show the correct usage strings
 - bisect: move even the command-line parsing to `bisect--helper`
 - bisect--helper: return only correct exit codes in `cmd_*()`
 - bisect--helper: move the `BISECT_STATE` case to the end
 - bisect--helper: make `--bisect-state` optional
 - bisect--helper: align the sub-command order with git-bisect.sh
 - bisect--helper: using `--bisect-state` without an argument is a bug
 - bisect--helper: really retire `--bisect-autostart`
 - bisect--helper: really retire --bisect-next-check
 - bisect--helper: retire the --no-log option
 - bisect: avoid double-quoting when printing the failed command
 - bisect run: fix the error message

 Final bits of "git bisect.sh" have been rewritten in C.

 The command line parsing is reported to be still broken.
 cf. <220521.86zgjazuy4.gmgdl@evledraar.gmail.com>
 source: <pull.1132.v3.git.1653144546.gitgitgadget@gmail.com>


* gc/bare-repo-discovery (2022-06-07) 5 commits
 - setup.c: create `discovery.bare`
 - safe.directory: use git_protected_config()
 - config: read protected config with `git_protected_config()`
 - Documentation: define protected configuration
 - Documentation/git-config.txt: add SCOPES section

 Introduce a discovery.barerepository configuration variable that
 allows users to forbid discovery of bare repositories.

 Expecting a reroll.
 cf. <xmqqbkv4t7gp.fsf@gitster.g>
 source: <29053d029f8ec61095a2ad557be38b1d485a158f.1654635432.git.gitgitgadget@gmail.com>


* gg/worktree-from-the-above (2022-06-21) 2 commits
 - dir: minor refactoring / clean-up
 - dir: traverse into repository

 With a non-bare repository, with core.worktree pointing at a
 directory that has the repository as its subdirectory, regressed in
 Git 2.27 days.

 Will merge to 'next'.
 source: <20220616234433.225-1-gg.oss@outlook.com>
 source: <20220616231956.154-1-gg.oss@outlook.com>


* ar/send-email-confirm-by-default (2022-04-22) 1 commit
 - send-email: always confirm by default

 "git send-email" is changed so that by default it asks for
 confirmation before sending each message out.

 Will discard.

 I wanted to like this, and had it in the version of Git I use
 myself for daily work, but the prompting turned out to be somewhat
 distracting.

 Thoughts?
 source: <20220422083629.1404989-1-hi@alyssa.is>

--------------------------------------------------
[Discarded]

* jc/apply-icase-tests (2022-06-13) 1 commit
 . t4141: test "git apply" with core.ignorecase

 Now a part of tk/apply-case-insensitive topic.
 source: <xmqqo7yw77qo.fsf@gitster.g>


* tl/pack-bitmap-trace (2022-06-21) 5 commits
 . bitmap: add trace2 outputs during open "bitmap" file
 . pack-bitmap.c: using error() instead of silently returning -1
 . pack-bitmap.c: make warnings support i18N when opening bitmap
 . pack-bitmap.c: rename "idx_name" to "bitmap_name"
 . pack-bitmap.c: continue looping when first MIDX bitmap is found

 Add trace2 traces in code paths involving the pack bitmaps.

 source: <cover.1655817253.git.dyroneteng@gmail.com>



^ permalink raw reply	[relevance 3%]

* What's cooking in git.git (Jun 2022, #08; Mon, 27)
@ 2022-06-27 18:22  3% Junio C Hamano
  0 siblings, 0 replies; 200+ results
From: Junio C Hamano @ 2022-06-27 18:22 UTC (permalink / raw)
  To: git

Here are the topics that have been cooking in my tree.  Commits
prefixed with '+' are in 'next' (being in 'next' is a sign that a
topic is stable enough to be used and are candidate to be in a
future release).  Commits prefixed with '-' are only in 'seen',
and aren't considered "accepted" at all.

Git 2.37 (final) has been tagged.

Copies of the source code to Git live in many repositories, and the
following is a list of the ones I push into or their mirrors.  Some
repositories have only a subset of branches.

With maint, master, next, seen, todo:

	git://git.kernel.org/pub/scm/git/git.git/
	git://repo.or.cz/alt-git.git/
	https://kernel.googlesource.com/pub/scm/git/git/
	https://github.com/git/git/
	https://gitlab.com/git-vcs/git/

With all the integration branches and topics broken out:

	https://github.com/gitster/git/

Even though the preformatted documentation in HTML and man format
are not sources, they are published in these repositories for
convenience (replace "htmldocs" with "manpages" for the manual
pages):

	git://git.kernel.org/pub/scm/git/git-htmldocs.git/
	https://github.com/gitster/git-htmldocs.git/

Release tarballs are available at:

	https://www.kernel.org/pub/software/scm/git/

--------------------------------------------------
[Graduated to 'master']

* ab/credentials-in-url-more (2022-06-23) 1 commit
  (merged to 'next' on 2022-06-23 at 11d700111c)
 + Documentation/config/transfer.txt: fix typo

 Typofix.
 source: <68c1c3648c51f6298eea4d58286b20e0c770a270.1656010900.git.me@ttaylorr.com>


* jc/revert-show-parent-info (2022-06-27) 1 commit
  (merged to 'next' on 2022-06-27 at 9a7cc59c69)
 + revert: config documentation fixes

 Typofix.
 source: <6727daf1-f077-7319-187e-ab4e55de3b2d@web.de>

--------------------------------------------------
[New Topics]

* ab/squelch-empty-fsync-traces (2022-06-23) 1 commit
 - trace2: don't include "fsync" events in all trace2 logs

 Omit fsync-related trace2 entries when their values are all zero.

 Expecting a reroll.
 cf. <xmqqh74byy19.fsf@gitster.g>
 source: <patch-1.1-df87e515efd-20220623T154943Z-avarab@gmail.com>


* cl/grep-max-count (2022-06-22) 1 commit
 - grep: add --max-count command line option

 "git grep -m<max-hits>" is a way to limit the hits shown per file.

 Will merge to 'next'.
 source: <pull.1278.v4.git.git.1655927252899.gitgitgadget@gmail.com>


* jk/revisions-doc-markup-fix (2022-06-22) 1 commit
 - revisions.txt: escape "..." to avoid asciidoc horizontal ellipsis

 Documentation mark-up fix.

 Will merge to 'next'.
 source: <YrOmsA04FZae89be@coredump.intra.peff.net>


* tk/rev-parse-doc-clarify-at-u (2022-06-23) 1 commit
 - rev-parse: documentation adjustment - mention remote tracking with @{u}

 Doc update.

 Will merge to 'next'.
 source: <pull.1265.v2.git.1655960512385.gitgitgadget@gmail.com>

--------------------------------------------------
[Stalled]

* bc/stash-export (2022-04-08) 4 commits
 - builtin/stash: provide a way to import stashes from a ref
 - builtin/stash: provide a way to export stashes to a ref
 - builtin/stash: factor out revision parsing into a function
 - object-name: make get_oid quietly return an error

 A mechanism to export and import stash entries to and from a normal
 commit to transfer it across repositories has been introduced.

 Expecting a reroll.
 cf. <YnL2d4Vr9Vr7W4Hj@camp.crustytoothpaste.net>
 source: <20220407215352.3491567-1-sandals@crustytoothpaste.net>


* cw/remote-object-info (2022-05-06) 11 commits
 - SQUASH??? coccicheck
 - SQUASH??? ensure that coccicheck is happy
 - SQUASH??? compilation fix
 - cat-file: add --batch-command remote-object-info command
 - cat-file: move parse_cmd and DEFAULT_FORMAT up
 - transport: add object-info fallback to fetch
 - transport: add client side capability to request object-info
 - object-info: send attribute packet regardless of object ids
 - object-store: add function to free object_info contents
 - fetch-pack: move fetch default settings
 - fetch-pack: refactor packet writing

 A client component to talk with the object-info endpoint.

 Expecting a reroll.
 source: <20220502170904.2770649-1-calvinwan@google.com>

--------------------------------------------------
[Cooking]

* en/merge-tree (2022-06-22) 17 commits
 - git-merge-tree.txt: add a section on potentional usage mistakes
 - merge-tree: add a --allow-unrelated-histories flag
 - merge-tree: allow `ls-files -u` style info to be NUL terminated
 - merge-ort: optionally produce machine-readable output
 - merge-ort: store more specific conflict information
 - merge-ort: make `path_messages` a strmap to a string_list
 - merge-ort: store messages in a list, not in a single strbuf
 - merge-tree: provide easy access to `ls-files -u` style info
 - merge-tree: provide a list of which files have conflicts
 - merge-ort: remove command-line-centric submodule message from merge-ort
 - merge-ort: provide a merge_get_conflicted_files() helper function
 - merge-tree: support including merge messages in output
 - merge-ort: split out a separate display_update_messages() function
 - merge-tree: implement real merges
 - merge-tree: add option parsing and initial shell for real merge function
 - merge-tree: move logic for existing merge into new function
 - merge-tree: rename merge_trees() to trivial_merge_trees()

 A new command is introduced that takes two commits and computes a
 tree that would be contained in the resulting merge commit, if the
 histories leading to these two commits were to be merged, and is
 added as a new mode of "git merge-tree" subcommand.

 Will merge to 'next'.
 source: <pull.1122.v7.git.1655511660.gitgitgadget@gmail.com>


* dr/i18n-die-warn-error-usage (2022-06-21) 1 commit
 - i18n: mark message helpers prefix for translation

 Give _() markings to fatal/warning/usage: that is shown in front of
 these messages.

 Will merge to 'next'.
 source: <pull.1279.v2.git.git.1655819877758.gitgitgadget@gmail.com>


* ds/t5510-brokequote (2022-06-21) 1 commit
 - t5510: replace 'origin' with URL more carefully

 Test fix.
 source: <484a330e-0902-6e1b-8189-63c72dcea494@github.com>


* en/merge-restore-to-pristine (2022-06-21) 6 commits
 - merge: do not exit restore_state() prematurely
 - merge: ensure we can actually restore pre-merge state
 - merge: make restore_state() restore staged state too
 - merge: fix save_state() to work when there are racy-dirty files
 - merge: remove unused variable
 - t6424: make sure a failed merge preserves local changes

 When "git merge" finds that it cannot perform a merge, it should
 restore the working tree to the state before the command was
 initiated, but in some corner cases it didn't.

 Needs review.
 source: <pull.1231.v2.git.1655621424.gitgitgadget@gmail.com>


* rs/combine-diff-with-incompatible-options (2022-06-21) 2 commits
 - combine-diff: abort if --output is given
 - combine-diff: abort if --ignore-matching-lines is given

 Certain diff options are currently ignored when combined-diff is
 shown; mark them as incompatible with the feature.

 Will merge to 'next'.
 source: <220524.86v8tuvfl1.gmgdl@evledraar.gmail.com>


* tk/apply-case-insensitive (2022-06-21) 3 commits
 - apply: support case-only renames in case-insensitive filesystems
 - reset: new failing test for reset of case-insensitive duplicate in index
 - t4141: test "git apply" with core.ignorecase

 "git apply" barfed on a patch that makes a case-only rename on a
 case-insensitive filesystem.

 Needs review.
 source: <pull.1257.v2.git.1655655027.gitgitgadget@gmail.com>


* zh/ls-files-format (2022-06-27) 1 commit
 - ls-files: introduce "--format" option

 "git ls-files" learns the "--format" option to tweak its output.

 Expecting a reroll.
 cf. <CAOLTT8Tc95-aUE+uN2d8QjTJpGpGw6cBJfG+bpmyE55OcXTSRA@mail.gmail.com>
 source: <pull.1262.v4.git.1656257376109.gitgitgadget@gmail.com>


* ab/test-quoting-fix (2022-06-21) 3 commits
 - config tests: fix harmless but broken "rm -r" cleanup
 - test-lib.sh: fix prepend_var() quoting issue
 - tests: add missing double quotes to included library paths

 Fixes for tests when the source directory has unusual characters in
 its path, e.g. whitespaces, double-quotes, etc.

 Expecting a reroll.
 source: <cover-0.3-00000000000-20220621T221928Z-avarab@gmail.com>


* en/merge-dual-dir-renames-fix (2022-06-21) 3 commits
 - merge-ort: fix issue with dual rename and add/add conflict
 - merge-ort: shuffle the computation and cleanup of potential collisions
 - t6423: add tests of dual directory rename plus add/add conflict

 Fixes a long-standing corner case bug around directory renames in
 the merge-ort strategy.

 Needs review.
 source: <pull.1268.git.1655871651.gitgitgadget@gmail.com>


* cr/setup-bug-typo (2022-06-17) 1 commit
  (merged to 'next' on 2022-06-17 at 8834ffe0ab)
 + setup: fix function name in a BUG() message

 Typofix in a BUG() message.

 Will cook in 'next'.
 source: <pull.1255.git.1654782920256.gitgitgadget@gmail.com>


* zk/push-use-bitmaps (2022-06-17) 1 commit
 - send-pack.c: add config push.useBitmaps

 "git push" sometimes perform poorly when reachability bitmaps are
 used, even in a repository where other operations are helped by
 bitmaps.  The push.useBitmaps configuration variable is introduced
 to allow disabling use of reachability bitmaps only for "git push".

 Will merge to 'next'.
 source: <pull.1263.v4.git.1655492779228.gitgitgadget@gmail.com>


* jk/remote-show-with-negative-refspecs (2022-06-17) 1 commit
 - remote: handle negative refspecs in git remote show
 (this branch is used by jk/t5505-restructure.)

 "git remote show [-n] frotz" now pays attention to negative
 pathspecs.

 Will merge to 'next'.
 source: <20220617002036.1577-2-jacob.keller@gmail.com>


* js/commit-graph-parsing-without-repo-settings (2022-06-15) 1 commit
 - commit-graph: refactor to avoid prepare_repo_settings

 Expecting a reroll.
 source: <9b56496b0809cc8a25af877ea97042e2cb7f2af6.1655246092.git.steadmon@google.com>


* jk/optim-promisor-object-enumeration (2022-06-16) 1 commit
  (merged to 'next' on 2022-06-16 at ce0712a74c)
 + is_promisor_object(): walk promisor packs in pack-order

 Collection of what is referenced by objects in promisor packs have
 been optimized to inspect these objects in the in-pack order.

 Will cook in 'next'.
 source: <YqrTsbXbEjx0Pabn@coredump.intra.peff.net>


* ro/mktree-allow-missing-fix (2022-06-21) 1 commit
 - mktree: do not check type of remote objects

 "git mktree --missing" lazily fetched objects that are missing from
 the local object store, which was totally unnecessary.

 Will merge to 'next'.
 source: <748f39a9-65aa-2110-cf92-7ddf81b5f507@roku.com>


* ll/curl-accept-language (2022-06-13) 2 commits
 - PREP??? give initializer to rpc_state
 - remote-curl: send Accept-Language header to server

 source: <pull.1251.v3.git.1655054421697.gitgitgadget@gmail.com>


* pb/diff-doc-raw-format (2022-06-13) 3 commits
 - diff-index.txt: update raw output format in examples
 - diff-format.txt: correct misleading wording
 - diff-format.txt: dst can be 0* SHA-1 when path is deleted, too

 source: <pull.1259.git.1655123383.gitgitgadget@gmail.com>


* rs/archive-with-internal-gzip (2022-06-15) 6 commits
  (merged to 'next' on 2022-06-17 at ab5af6acd1)
 + archive-tar: use internal gzip by default
 + archive-tar: use OS_CODE 3 (Unix) for internal gzip
 + archive-tar: add internal gzip implementation
 + archive-tar: factor out write_block()
 + archive: rename archiver data field to filter_command
 + archive: update format documentation

 Teach "git archive" to (optionally and then by default) avoid
 spawning an external "gzip" process when creating ".tar.gz" (and
 ".tgz") archives.

 Will cook in 'next'.
 source: <9df761c3-355a-ede9-7971-b32687fe9abb@web.de>


* ds/branch-checked-out (2022-06-21) 7 commits
  (merged to 'next' on 2022-06-21 at e42bc4566f)
 + branch: drop unused worktrees variable
 + fetch: stop passing around unused worktrees variable
  (merged to 'next' on 2022-06-17 at c881874257)
 + branch: fix branch_checked_out() leaks
 + branch: use branch_checked_out() when deleting refs
 + fetch: use new branch_checked_out() and add tests
 + branch: check for bisects and rebases
 + branch: add branch_checked_out() helper

 Introduce a helper to see if a branch is already being worked on
 (hence should not be newly checked out in a working tree), which
 performs much better than the existing find_shared_symref() to
 replace many uses of the latter.

 Will cook in 'next'.
 source: <pull.1254.v2.git.1655234853.gitgitgadget@gmail.com>


* jt/connected-show-missing-from-which-side (2022-06-10) 1 commit
 - fetch,fetch-pack: clarify connectivity check error

 We may find an object missing after a "git fetch" stores the
 objects it obtained from the other side, but it is not necessarily
 because the remote failed to send necessary objects.  Reword the
 messages in an attempt to help users explore other possibilities
 when they hit this error.

 Expecting a reroll.
 source: <20220610195247.1177549-1-jonathantanmy@google.com>


* ab/submodule-cleanup (2022-06-15) 12 commits
 - git-sh-setup.sh: remove "say" function, change last users
 - git-submodule.sh: use "$quiet", not "$GIT_QUIET"
 - submodule--helper: eliminate internal "--update" option
 - submodule--helper: understand --checkout, --merge and --rebase synonyms
 - submodule--helper: report "submodule" as our name in "-h" output
 - submodule--helper: rename "absorb-git-dirs" to "absorbgitdirs"
 - submodule update: remove "-v" option
 - submodule--helper: have --require-init imply --init
 - git-submodule.sh: remove unused top-level "--branch" argument
 - git-submodule.sh: make "$cached" variable a boolean
 - git-submodule.sh: remove unused $prefix var and --super-prefix
 - git-submodule.sh: remove unused sanitize_submodule_env()

 Further preparation to turn git-submodule.sh into a builtin.

 Will merge to 'next'?
 source: <cover-v2-00.12-00000000000-20220613T220150Z-avarab@gmail.com>


* jc/resolve-undo (2022-06-09) 1 commit
  (merged to 'next' on 2022-06-15 at c195e5a2d9)
 + revision: mark blobs needed for resolve-undo as reachable

 The resolve-undo information in the index was not protected against
 GC, which has been corrected.

 Will cook in 'next'.
 source: <xmqqfskdieqz.fsf@gitster.g>


* ab/build-gitweb (2022-06-02) 7 commits
 - Makefile: build 'gitweb' in the default target
 - gitweb/Makefile: include in top-level Makefile
 - gitweb: remove "test" and "test-installed" targets
 - gitweb/Makefile: prepare to merge into top-level Makefile
 - gitweb/Makefile: clear up and de-duplicate the gitweb.{css,js} vars
 - gitweb/Makefile: add a $(GITWEB_ALL) variable
 - gitweb/Makefile: define all .PHONY prerequisites inline

 Teach "make all" to build gitweb as well.

 Needs review.
 source: <cover-v2-0.7-00000000000-20220531T173805Z-avarab@gmail.com>


* ab/test-without-templates (2022-06-06) 7 commits
 - tests: don't assume a .git/info for .git/info/sparse-checkout
 - tests: don't assume a .git/info for .git/info/exclude
 - tests: don't assume a .git/info for .git/info/refs
 - tests: don't assume a .git/info for .git/info/attributes
 - tests: don't assume a .git/info for .git/info/grafts
 - tests: don't depend on template-created .git/branches
 - t0008: don't rely on default ".git/info/exclude"

 Tweak tests so that they still work when the "git init" template
 did not create .git/info directory.

 Will merge to 'next'?
 source: <cover-v2-0.7-00000000000-20220603T110506Z-avarab@gmail.com>


* ac/bitmap-format-doc (2022-06-16) 3 commits
  (merged to 'next' on 2022-06-16 at 5591d11601)
 + bitmap-format.txt: add information for trailing checksum
 + bitmap-format.txt: fix some formatting issues
 + bitmap-format.txt: feed the file to asciidoc to generate html

 Adjust technical/bitmap-format to be formatted by AsciiDoc, and
 add some missing information to the documentation.

 Will cook in 'next'.
 source: <pull.1246.v4.git.1655355834.gitgitgadget@gmail.com>


* hx/unpack-streaming (2022-06-13) 6 commits
 - unpack-objects: use stream_loose_object() to unpack large objects
 - core doc: modernize core.bigFileThreshold documentation
 - object-file.c: add "stream_loose_object()" to handle large object
 - object-file.c: factor out deflate part of write_loose_object()
 - object-file.c: refactor write_loose_object() to several steps
 - unpack-objects: low memory footprint for get_data() in dry_run mode

 Allow large objects read from a packstream to be streamed into a
 loose object file straight, without having to keep it in-core as a
 whole.

 Will merge to 'next'.
 source: <cover.1654914555.git.chiyutianyi@gmail.com>


* tb/show-ref-count (2022-06-06) 2 commits
 - builtin/show-ref.c: limit output with `--count`
 - builtin/show-ref.c: rename `found_match` to `matches_nr`

 "git show-ref" learned to stop after emitting N refs with the new
 "--count=N" option.

 Expecting a reroll.
 cf. <xmqqczfl4ce1.fsf@gitster.g>
 source: <cover.1654552560.git.me@ttaylorr.com>


* ds/bundle-uri-more (2022-06-06) 6 commits
 - fetch: add 'refs/bundle/' to log.excludeDecoration
 - bundle-uri: add support for http(s):// and file://
 - fetch: add --bundle-uri option
 - bundle-uri: create basic file-copy logic
 - remote-curl: add 'get' capability
 - docs: document bundle URI standard

 The "bundle URI" topic.

 Needs review.
 source: <pull.1248.git.1654545325.gitgitgadget@gmail.com>


* js/bisect-in-c (2022-05-21) 15 commits
 - bisect: no longer try to clean up left-over `.git/head-name` files
 - bisect: remove Cogito-related code
 - Turn `git bisect` into a full built-in
 - bisect: teach the `bisect--helper` command to show the correct usage strings
 - bisect: move even the command-line parsing to `bisect--helper`
 - bisect--helper: return only correct exit codes in `cmd_*()`
 - bisect--helper: move the `BISECT_STATE` case to the end
 - bisect--helper: make `--bisect-state` optional
 - bisect--helper: align the sub-command order with git-bisect.sh
 - bisect--helper: using `--bisect-state` without an argument is a bug
 - bisect--helper: really retire `--bisect-autostart`
 - bisect--helper: really retire --bisect-next-check
 - bisect--helper: retire the --no-log option
 - bisect: avoid double-quoting when printing the failed command
 - bisect run: fix the error message

 Final bits of "git bisect.sh" have been rewritten in C.

 The command line parsing is reported to be still broken.
 cf. <220521.86zgjazuy4.gmgdl@evledraar.gmail.com>
 source: <pull.1132.v3.git.1653144546.gitgitgadget@gmail.com>


* gc/bare-repo-discovery (2022-06-07) 5 commits
 - setup.c: create `discovery.bare`
 - safe.directory: use git_protected_config()
 - config: read protected config with `git_protected_config()`
 - Documentation: define protected configuration
 - Documentation/git-config.txt: add SCOPES section

 Introduce a discovery.barerepository configuration variable that
 allows users to forbid discovery of bare repositories.

 Expecting a reroll.
 cf. <xmqqbkv4t7gp.fsf@gitster.g>
 source: <29053d029f8ec61095a2ad557be38b1d485a158f.1654635432.git.gitgitgadget@gmail.com>


* gg/worktree-from-the-above (2022-06-21) 2 commits
 - dir: minor refactoring / clean-up
 - dir: traverse into repository

 With a non-bare repository, with core.worktree pointing at a
 directory that has the repository as its subdirectory, regressed in
 Git 2.27 days.

 Will merge to 'next'.
 source: <20220616234433.225-1-gg.oss@outlook.com>
 source: <20220616231956.154-1-gg.oss@outlook.com>


* ar/send-email-confirm-by-default (2022-04-22) 1 commit
 - send-email: always confirm by default

 "git send-email" is changed so that by default it asks for
 confirmation before sending each message out.

 Will discard.

 I wanted to like this, and had it in the version of Git I use
 myself for daily work, but the prompting turned out to be somewhat
 distracting.

 Thoughts?
 source: <20220422083629.1404989-1-hi@alyssa.is>

^ permalink raw reply	[relevance 3%]

* What's cooking in git.git (Jul 2022, #01; Fri, 1)
@ 2022-07-01 23:08  3% Junio C Hamano
  0 siblings, 0 replies; 200+ results
From: Junio C Hamano @ 2022-07-01 23:08 UTC (permalink / raw)
  To: git

Here are the topics that have been cooking in my tree.  Commits
prefixed with '+' are in 'next' (being in 'next' is a sign that a
topic is stable enough to be used and are candidate to be in a
future release).  Commits prefixed with '-' are only in 'seen',
and aren't considered "accepted" at all.

Git 2.37 final was released, many in the northan hemisphere are
about to be in summer vacation week.  We probably will have a small
update 2.37.1 near mid July to deal with a small "regression" in
2.37 but otherwise things are expected to be slow, and slow is good
;-)

Copies of the source code to Git live in many repositories, and the
following is a list of the ones I push into or their mirrors.  Some
repositories have only a subset of branches.

With maint, master, next, seen, todo:

	git://git.kernel.org/pub/scm/git/git.git/
	git://repo.or.cz/alt-git.git/
	https://kernel.googlesource.com/pub/scm/git/git/
	https://github.com/git/git/
	https://gitlab.com/git-vcs/git/

With all the integration branches and topics broken out:

	https://github.com/gitster/git/

Even though the preformatted documentation in HTML and man format
are not sources, they are published in these repositories for
convenience (replace "htmldocs" with "manpages" for the manual
pages):

	git://git.kernel.org/pub/scm/git/git-htmldocs.git/
	https://github.com/gitster/git-htmldocs.git/

Release tarballs are available at:

	https://www.kernel.org/pub/software/scm/git/

--------------------------------------------------
[New Topics]

* ds/git-rebase-doc-markup (2022-06-30) 1 commit
 - git-rebase.txt: use back-ticks consistently

 Correct "git rebase" documentation mark-up.

 Will merge to 'next'.
 source: <pull.1270.v3.git.1656508868146.gitgitgadget@gmail.com>


* ds/rebase-update-ref (2022-06-28) 8 commits
 - rebase: add rebase.updateRefs config option
 - rebase: update refs from 'update-ref' commands
 - rebase: add --update-refs option
 - sequencer: add update-ref command
 - sequencer: define array with enum values
 - rebase-interactive: update 'merge' description
 - branch: consider refs under 'update-refs'
 - t2407: test branches currently using apply backend
 (this branch uses ds/branch-checked-out.)

 "git rebase -i" learns to update branches whose tip appear in the
 rebased range.

 Will merge to 'next'?
 source: <pull.1247.v3.git.1656422759.gitgitgadget@gmail.com>


* ds/vscode-settings (2022-06-27) 1 commit
 - vscode: improve tab size and wrapping

 source: <pull.1271.git.1656354587496.gitgitgadget@gmail.com>


* js/add-i-delete (2022-06-28) 1 commit
  (merged to 'next' on 2022-06-28 at 8ac04bfd24)
 + add --interactive: allow `update` to stage deleted files

 Rewrite of "git add -i" in C that appeared in Git 2.25 didn't
 correctly record a removed file to the index, which was fixed.

 Will merge to 'master'.
 source: <pull.1273.git.1656454964378.gitgitgadget@gmail.com>


* tb/pack-objects-remove-pahole-comment (2022-06-28) 1 commit
 - pack-objects.h: remove outdated pahole results

 Comment fix.

 Will merge to 'next'.
 source: <1379af2e9d271b501ef3942398e7f159a9c77973.1656440978.git.me@ttaylorr.com>


* ab/leakfix (2022-07-01) 11 commits
 - pull: fix a "struct oid_array" memory leak
 - cat-file: fix a common "struct object_context" memory leak
 - gc: fix a memory leak
 - checkout: avoid "struct unpack_trees_options" leak
 - merge-file: fix memory leaks on error path
 - merge-file: refactor for subsequent memory leak fix
 - cat-file: fix a memory leak in --batch-command mode
 - revert: free "struct replay_opts" members
 - submodule.c: free() memory from xgetcwd()
 - clone: fix memory leak in wanted_peer_refs()
 - check-ref-format: fix trivial memory leak

 Plug various memory leaks.

 source: <cover-v2-00.11-00000000000-20220701T104017Z-avarab@gmail.com>


* ab/test-tool-leakfix (2022-07-01) 9 commits
 - test-tool delta: fix a memory leak
 - test-tool ref-store: fix a memory leak
 - test-tool bloom: fix memory leaks
 - test-tool json-writer: fix memory leaks
 - test-tool regex: call regfree(), fix memory leaks
 - test-tool urlmatch-normalization: fix a memory leak
 - test-tool {dump,scrap}-cache-tree: fix memory leaks
 - test-tool path-utils: fix a memory leak
 - test-tool test-hash: fix a memory leak

 Plug various memory leaks in test-tool commands.

 source: <cover-v2-0.9-00000000000-20220701T103503Z-avarab@gmail.com>


* en/t6429-test-must-be-empty-fix (2022-06-30) 1 commit
 - t6429: fix use of non-existent function

 A test fix.

 Will merge to 'next'.
 source: <pull.1276.git.1656652799863.gitgitgadget@gmail.com>


* gc/submodule-use-super-prefix (2022-06-30) 8 commits
 - submodule--helper: remove display path helper
 - submodule--helper update: use --super-prefix
 - submodule--helper: remove unused SUPPORT_SUPER_PREFIX flags
 - submodule--helper: use correct display path helper
 - submodule--helper: don't recreate recursive prefix
 - submodule--helper update: use display path helper
 - submodule--helper tests: add missing "display path" coverage
 - Merge branch 'ab/submodule-cleanup' into gc/submodule-use-super-prefix
 (this branch uses ab/submodule-cleanup.)

 Another step to rewrite more parts of "git submodule" in C.

 Will merge to 'next'?
 source: <20220701021157.88858-1-chooglen@google.com>


* hx/lookup-commit-in-graph-fix (2022-06-30) 1 commit
 - commit-graph.c: no lazy fetch in lookup_commit_in_graph()

 A corner case bug where lazily fetching objects from a promisor
 remote resulted in infinite recursion has been corrected.

 Will merge to 'next'.
 source: <96d4bb71505d87ed501c058bbd89bfc13d08b24a.1656593279.git.hanxin.hx@bytedance.com>


* ll/ls-files-tests-update (2022-07-01) 1 commit
 - ls-files: update test style

 Test update.

 Will merge to 'next'.
 source: <pull.1269.v5.git.1656673435357.gitgitgadget@gmail.com>


* pw/xdiff-alloc (2022-06-30) 3 commits
 - xdiff: introduce XDL_ALLOC_GROW()
 - xdiff: introduce XDL_CALLOC_ARRAY()
 - xdiff: introduce XDL_ALLOC_ARRAY()

 Add a level of redirection to array allocation API in xdiff part,
 to make it easier to share with the libgit2 project.

 Waiting for review responses.
 source: <pull.1272.git.1656516334.gitgitgadget@gmail.com>


* sy/mv-out-of-cone (2022-07-01) 8 commits
 - mv: add check_dir_in_index() and solve general dir check issue
 - mv: use flags mode for update_mode
 - mv: check if <destination> exists in index to handle overwriting
 - mv: check if out-of-cone file exists in index with SKIP_WORKTREE bit
 - mv: decouple if/else-if checks using goto
 - mv: update sparsity after moving from out-of-cone to in-cone
 - t1092: mv directory from out-of-cone to in-cone
 - t7002: add tests for moving out-of-cone file/directory

 "git mv A B" in a sparsely populated working tree can be asked to
 move a path between directories that are "in cone" (i.e. expected
 to be materialized in the working tree) and "out of cone"
 (i.e. expected to be hidden).  The handling of such cases has been
 improved.

 Will merge to 'next'.
 source: <20220630023737.473690-1-shaoxuan.yuan02@gmail.com>

--------------------------------------------------
[Stalled]

* bc/stash-export (2022-04-08) 4 commits
 - builtin/stash: provide a way to import stashes from a ref
 - builtin/stash: provide a way to export stashes to a ref
 - builtin/stash: factor out revision parsing into a function
 - object-name: make get_oid quietly return an error

 A mechanism to export and import stash entries to and from a normal
 commit to transfer it across repositories has been introduced.

 Expecting a reroll.
 cf. <YnL2d4Vr9Vr7W4Hj@camp.crustytoothpaste.net>
 source: <20220407215352.3491567-1-sandals@crustytoothpaste.net>


* cw/remote-object-info (2022-05-06) 11 commits
 - SQUASH??? coccicheck
 - SQUASH??? ensure that coccicheck is happy
 - SQUASH??? compilation fix
 - cat-file: add --batch-command remote-object-info command
 - cat-file: move parse_cmd and DEFAULT_FORMAT up
 - transport: add object-info fallback to fetch
 - transport: add client side capability to request object-info
 - object-info: send attribute packet regardless of object ids
 - object-store: add function to free object_info contents
 - fetch-pack: move fetch default settings
 - fetch-pack: refactor packet writing

 A client component to talk with the object-info endpoint.

 Expecting a reroll.
 source: <20220502170904.2770649-1-calvinwan@google.com>

--------------------------------------------------
[Cooking]

* ab/squelch-empty-fsync-traces (2022-06-30) 1 commit
 . trace2: don't include "fsync" events in all trace2 logs

 Omit fsync-related trace2 entries when their values are all zero.

 Breaks tests in hx/unpack-streaming with an interesting interaction.
 source: <patch-v2-1.1-a1fc37de947-20220630T084607Z-avarab@gmail.com>


* cl/grep-max-count (2022-06-22) 1 commit
 - grep: add --max-count command line option

 "git grep -m<max-hits>" is a way to limit the hits shown per file.

 Will merge to 'next'.
 source: <pull.1278.v4.git.git.1655927252899.gitgitgadget@gmail.com>


* jk/revisions-doc-markup-fix (2022-06-22) 1 commit
 - revisions.txt: escape "..." to avoid asciidoc horizontal ellipsis

 Documentation mark-up fix.

 Will merge to 'next'.
 source: <YrOmsA04FZae89be@coredump.intra.peff.net>


* tk/rev-parse-doc-clarify-at-u (2022-06-23) 1 commit
 - rev-parse: documentation adjustment - mention remote tracking with @{u}

 Doc update.

 Will merge to 'next'.
 source: <pull.1265.v2.git.1655960512385.gitgitgadget@gmail.com>


* en/merge-tree (2022-06-22) 17 commits
 - git-merge-tree.txt: add a section on potentional usage mistakes
 - merge-tree: add a --allow-unrelated-histories flag
 - merge-tree: allow `ls-files -u` style info to be NUL terminated
 - merge-ort: optionally produce machine-readable output
 - merge-ort: store more specific conflict information
 - merge-ort: make `path_messages` a strmap to a string_list
 - merge-ort: store messages in a list, not in a single strbuf
 - merge-tree: provide easy access to `ls-files -u` style info
 - merge-tree: provide a list of which files have conflicts
 - merge-ort: remove command-line-centric submodule message from merge-ort
 - merge-ort: provide a merge_get_conflicted_files() helper function
 - merge-tree: support including merge messages in output
 - merge-ort: split out a separate display_update_messages() function
 - merge-tree: implement real merges
 - merge-tree: add option parsing and initial shell for real merge function
 - merge-tree: move logic for existing merge into new function
 - merge-tree: rename merge_trees() to trivial_merge_trees()

 A new command is introduced that takes two commits and computes a
 tree that would be contained in the resulting merge commit, if the
 histories leading to these two commits were to be merged, and is
 added as a new mode of "git merge-tree" subcommand.

 Will merge to 'next'.
 source: <pull.1122.v7.git.1655511660.gitgitgadget@gmail.com>


* dr/i18n-die-warn-error-usage (2022-06-21) 1 commit
 - i18n: mark message helpers prefix for translation

 Give _() markings to fatal/warning/usage: that is shown in front of
 these messages.

 Will merge to 'next'.
 source: <pull.1279.v2.git.git.1655819877758.gitgitgadget@gmail.com>


* ds/t5510-brokequote (2022-06-21) 1 commit
 - t5510: replace 'origin' with URL more carefully

 Test fix.
 source: <484a330e-0902-6e1b-8189-63c72dcea494@github.com>


* en/merge-restore-to-pristine (2022-06-21) 6 commits
 - merge: do not exit restore_state() prematurely
 - merge: ensure we can actually restore pre-merge state
 - merge: make restore_state() restore staged state too
 - merge: fix save_state() to work when there are racy-dirty files
 - merge: remove unused variable
 - t6424: make sure a failed merge preserves local changes

 When "git merge" finds that it cannot perform a merge, it should
 restore the working tree to the state before the command was
 initiated, but in some corner cases it didn't.

 Needs review.
 source: <pull.1231.v2.git.1655621424.gitgitgadget@gmail.com>


* rs/combine-diff-with-incompatible-options (2022-06-21) 2 commits
 - combine-diff: abort if --output is given
 - combine-diff: abort if --ignore-matching-lines is given

 Certain diff options are currently ignored when combined-diff is
 shown; mark them as incompatible with the feature.

 Will merge to 'next'.
 source: <220524.86v8tuvfl1.gmgdl@evledraar.gmail.com>


* tk/apply-case-insensitive (2022-06-21) 3 commits
 - apply: support case-only renames in case-insensitive filesystems
 - reset: new failing test for reset of case-insensitive duplicate in index
 - t4141: test "git apply" with core.ignorecase

 "git apply" barfed on a patch that makes a case-only rename on a
 case-insensitive filesystem.

 Needs review.
 source: <pull.1257.v2.git.1655655027.gitgitgadget@gmail.com>


* zh/ls-files-format (2022-06-27) 1 commit
 - ls-files: introduce "--format" option

 "git ls-files" learns the "--format" option to tweak its output.

 Expecting a reroll.
 cf. <CAOLTT8Tc95-aUE+uN2d8QjTJpGpGw6cBJfG+bpmyE55OcXTSRA@mail.gmail.com>
 source: <pull.1262.v4.git.1656257376109.gitgitgadget@gmail.com>


* ab/test-quoting-fix (2022-06-30) 3 commits
 - config tests: fix harmless but broken "rm -r" cleanup
 - test-lib.sh: fix prepend_var() quoting issue
 - tests: add missing double quotes to included library paths

 Fixes for tests when the source directory has unusual characters in
 its path, e.g. whitespaces, double-quotes, etc.

 Will merge to 'next'.
 source: <cover-v2-0.3-00000000000-20220630T101646Z-avarab@gmail.com>


* en/merge-dual-dir-renames-fix (2022-06-30) 5 commits
 - merge-ort: fix issue with dual rename and add/add conflict
 - merge-ort: shuffle the computation and cleanup of potential collisions
 - merge-ort: make a separate function for freeing struct collisions
 - merge-ort: small cleanups of check_for_directory_rename
 - t6423: add tests of dual directory rename plus add/add conflict

 Fixes a long-standing corner case bug around directory renames in
 the merge-ort strategy.

 Will merge to 'next'?
 source: <pull.1268.v3.git.1656653000.gitgitgadget@gmail.com>


* cr/setup-bug-typo (2022-06-17) 1 commit
  (merged to 'next' on 2022-06-17 at 8834ffe0ab)
 + setup: fix function name in a BUG() message

 Typofix in a BUG() message.

 Will cook in 'next'.
 source: <pull.1255.git.1654782920256.gitgitgadget@gmail.com>


* zk/push-use-bitmaps (2022-06-17) 1 commit
 - send-pack.c: add config push.useBitmaps

 "git push" sometimes perform poorly when reachability bitmaps are
 used, even in a repository where other operations are helped by
 bitmaps.  The push.useBitmaps configuration variable is introduced
 to allow disabling use of reachability bitmaps only for "git push".

 Will merge to 'next'.
 source: <pull.1263.v4.git.1655492779228.gitgitgadget@gmail.com>


* jk/remote-show-with-negative-refspecs (2022-06-17) 1 commit
 - remote: handle negative refspecs in git remote show
 (this branch is used by jk/t5505-restructure.)

 "git remote show [-n] frotz" now pays attention to negative
 pathspecs.

 Will merge to 'next'.
 source: <20220617002036.1577-2-jacob.keller@gmail.com>


* js/commit-graph-parsing-without-repo-settings (2022-06-15) 1 commit
 - commit-graph: refactor to avoid prepare_repo_settings

 Expecting a reroll.
 source: <9b56496b0809cc8a25af877ea97042e2cb7f2af6.1655246092.git.steadmon@google.com>


* jk/optim-promisor-object-enumeration (2022-06-16) 1 commit
  (merged to 'next' on 2022-06-16 at ce0712a74c)
 + is_promisor_object(): walk promisor packs in pack-order

 Collection of what is referenced by objects in promisor packs have
 been optimized to inspect these objects in the in-pack order.

 Will cook in 'next'.
 source: <YqrTsbXbEjx0Pabn@coredump.intra.peff.net>


* ro/mktree-allow-missing-fix (2022-06-21) 1 commit
 - mktree: do not check type of remote objects

 "git mktree --missing" lazily fetched objects that are missing from
 the local object store, which was totally unnecessary.

 Will merge to 'next'.
 source: <748f39a9-65aa-2110-cf92-7ddf81b5f507@roku.com>


* ll/curl-accept-language (2022-06-13) 2 commits
 - PREP??? give initializer to rpc_state
 - remote-curl: send Accept-Language header to server

 source: <pull.1251.v3.git.1655054421697.gitgitgadget@gmail.com>


* pb/diff-doc-raw-format (2022-06-13) 3 commits
 - diff-index.txt: update raw output format in examples
 - diff-format.txt: correct misleading wording
 - diff-format.txt: dst can be 0* SHA-1 when path is deleted, too

 source: <pull.1259.git.1655123383.gitgitgadget@gmail.com>


* rs/archive-with-internal-gzip (2022-06-15) 6 commits
  (merged to 'next' on 2022-06-17 at ab5af6acd1)
 + archive-tar: use internal gzip by default
 + archive-tar: use OS_CODE 3 (Unix) for internal gzip
 + archive-tar: add internal gzip implementation
 + archive-tar: factor out write_block()
 + archive: rename archiver data field to filter_command
 + archive: update format documentation

 Teach "git archive" to (optionally and then by default) avoid
 spawning an external "gzip" process when creating ".tar.gz" (and
 ".tgz") archives.

 Will cook in 'next'.
 source: <9df761c3-355a-ede9-7971-b32687fe9abb@web.de>


* ds/branch-checked-out (2022-06-21) 7 commits
  (merged to 'next' on 2022-06-21 at e42bc4566f)
 + branch: drop unused worktrees variable
 + fetch: stop passing around unused worktrees variable
  (merged to 'next' on 2022-06-17 at c881874257)
 + branch: fix branch_checked_out() leaks
 + branch: use branch_checked_out() when deleting refs
 + fetch: use new branch_checked_out() and add tests
 + branch: check for bisects and rebases
 + branch: add branch_checked_out() helper
 (this branch is used by ds/rebase-update-ref.)

 Introduce a helper to see if a branch is already being worked on
 (hence should not be newly checked out in a working tree), which
 performs much better than the existing find_shared_symref() to
 replace many uses of the latter.

 Will cook in 'next'.
 source: <pull.1254.v2.git.1655234853.gitgitgadget@gmail.com>


* jt/connected-show-missing-from-which-side (2022-06-10) 1 commit
 - fetch,fetch-pack: clarify connectivity check error

 We may find an object missing after a "git fetch" stores the
 objects it obtained from the other side, but it is not necessarily
 because the remote failed to send necessary objects.  Reword the
 messages in an attempt to help users explore other possibilities
 when they hit this error.

 Expecting a reroll.
 source: <20220610195247.1177549-1-jonathantanmy@google.com>


* ab/submodule-cleanup (2022-06-28) 12 commits
 - git-sh-setup.sh: remove "say" function, change last users
 - git-submodule.sh: use "$quiet", not "$GIT_QUIET"
 - submodule--helper: eliminate internal "--update" option
 - submodule--helper: understand --checkout, --merge and --rebase synonyms
 - submodule--helper: report "submodule" as our name in some "-h" output
 - submodule--helper: rename "absorb-git-dirs" to "absorbgitdirs"
 - submodule update: remove "-v" option
 - submodule--helper: have --require-init imply --init
 - git-submodule.sh: remove unused top-level "--branch" argument
 - git-submodule.sh: make the "$cached" variable a boolean
 - git-submodule.sh: remove unused $prefix variable
 - git-submodule.sh: remove unused sanitize_submodule_env()
 (this branch is used by gc/submodule-use-super-prefix.)

 Further preparation to turn git-submodule.sh into a builtin.

 Will merge to 'next'.
 source: <cover-v4-00.12-00000000000-20220628T095914Z-avarab@gmail.com>


* jc/resolve-undo (2022-06-09) 1 commit
  (merged to 'next' on 2022-06-15 at c195e5a2d9)
 + revision: mark blobs needed for resolve-undo as reachable

 The resolve-undo information in the index was not protected against
 GC, which has been corrected.

 Will cook in 'next'.
 source: <xmqqfskdieqz.fsf@gitster.g>


* ab/build-gitweb (2022-06-28) 8 commits
 - gitweb/Makefile: add a "NO_GITWEB" parameter
 - Makefile: build 'gitweb' in the default target
 - gitweb/Makefile: include in top-level Makefile
 - gitweb: remove "test" and "test-installed" targets
 - gitweb/Makefile: prepare to merge into top-level Makefile
 - gitweb/Makefile: clear up and de-duplicate the gitweb.{css,js} vars
 - gitweb/Makefile: add a $(GITWEB_ALL) variable
 - gitweb/Makefile: define all .PHONY prerequisites inline

 Teach "make all" to build gitweb as well.
 source: <cover-v3-0.8-00000000000-20220628T100936Z-avarab@gmail.com>


* ab/test-without-templates (2022-06-06) 7 commits
 - tests: don't assume a .git/info for .git/info/sparse-checkout
 - tests: don't assume a .git/info for .git/info/exclude
 - tests: don't assume a .git/info for .git/info/refs
 - tests: don't assume a .git/info for .git/info/attributes
 - tests: don't assume a .git/info for .git/info/grafts
 - tests: don't depend on template-created .git/branches
 - t0008: don't rely on default ".git/info/exclude"

 Tweak tests so that they still work when the "git init" template
 did not create .git/info directory.

 Will merge to 'next'?
 source: <cover-v2-0.7-00000000000-20220603T110506Z-avarab@gmail.com>


* ac/bitmap-format-doc (2022-06-16) 3 commits
  (merged to 'next' on 2022-06-16 at 5591d11601)
 + bitmap-format.txt: add information for trailing checksum
 + bitmap-format.txt: fix some formatting issues
 + bitmap-format.txt: feed the file to asciidoc to generate html

 Adjust technical/bitmap-format to be formatted by AsciiDoc, and
 add some missing information to the documentation.

 Will cook in 'next'.
 source: <pull.1246.v4.git.1655355834.gitgitgadget@gmail.com>


* hx/unpack-streaming (2022-06-13) 6 commits
 - unpack-objects: use stream_loose_object() to unpack large objects
 - core doc: modernize core.bigFileThreshold documentation
 - object-file.c: add "stream_loose_object()" to handle large object
 - object-file.c: factor out deflate part of write_loose_object()
 - object-file.c: refactor write_loose_object() to several steps
 - unpack-objects: low memory footprint for get_data() in dry_run mode

 Allow large objects read from a packstream to be streamed into a
 loose object file straight, without having to keep it in-core as a
 whole.

 Will merge to 'next'.
 source: <cover.1654914555.git.chiyutianyi@gmail.com>


* tb/show-ref-count (2022-06-06) 2 commits
 - builtin/show-ref.c: limit output with `--count`
 - builtin/show-ref.c: rename `found_match` to `matches_nr`

 "git show-ref" learned to stop after emitting N refs with the new
 "--count=N" option.

 Expecting a reroll.
 cf. <xmqqczfl4ce1.fsf@gitster.g>
 source: <cover.1654552560.git.me@ttaylorr.com>


* ds/bundle-uri-more (2022-06-06) 6 commits
 - fetch: add 'refs/bundle/' to log.excludeDecoration
 - bundle-uri: add support for http(s):// and file://
 - fetch: add --bundle-uri option
 - bundle-uri: create basic file-copy logic
 - remote-curl: add 'get' capability
 - docs: document bundle URI standard

 The "bundle URI" topic.

 Needs review.
 source: <pull.1248.git.1654545325.gitgitgadget@gmail.com>


* js/bisect-in-c (2022-06-27) 16 commits
 - bisect: no longer try to clean up left-over `.git/head-name` files
 - bisect: remove Cogito-related code
 - Turn `git bisect` into a full built-in
 - bisect: move even the command-line parsing to `bisect--helper`
 - bisect: teach the `bisect--helper` command to show the correct usage strings
 - bisect--helper: return only correct exit codes in `cmd_*()`
 - bisect--helper: move the `BISECT_STATE` case to the end
 - bisect--helper: make `--bisect-state` optional
 - bisect--helper: align the sub-command order with git-bisect.sh
 - bisect--helper: using `--bisect-state` without an argument is a bug
 - bisect--helper: really retire `--bisect-autostart`
 - bisect--helper: really retire --bisect-next-check
 - bisect--helper: retire the --no-log option
 - bisect: avoid double-quoting when printing the failed command
 - bisect run: fix the error message
 - bisect: verify that a bogus option won't try to start a bisection

 Final bits of "git bisect.sh" have been rewritten in C.
 source: <pull.1132.v4.git.1656354677.gitgitgadget@gmail.com>


* gc/bare-repo-discovery (2022-06-30) 5 commits
 - setup.c: create `discovery.bare`
 - safe.directory: use git_protected_config()
 - config: learn `git_protected_config()`
 - Documentation: define protected configuration
 - Documentation/git-config.txt: add SCOPES section

 Introduce a discovery.barerepository configuration variable that
 allows users to forbid discovery of bare repositories.

 Will merge to 'next'?
 source: <pull.1261.v6.git.git.1656612839.gitgitgadget@gmail.com>


* gg/worktree-from-the-above (2022-06-21) 2 commits
 - dir: minor refactoring / clean-up
 - dir: traverse into repository

 With a non-bare repository, with core.worktree pointing at a
 directory that has the repository as its subdirectory, regressed in
 Git 2.27 days.

 Will merge to 'next'.
 source: <20220616234433.225-1-gg.oss@outlook.com>
 source: <20220616231956.154-1-gg.oss@outlook.com>


* ar/send-email-confirm-by-default (2022-04-22) 1 commit
 - send-email: always confirm by default

 "git send-email" is changed so that by default it asks for
 confirmation before sending each message out.

 Will discard.

 I wanted to like this, and had it in the version of Git I use
 myself for daily work, but the prompting turned out to be somewhat
 distracting.

 Thoughts?
 source: <20220422083629.1404989-1-hi@alyssa.is>

^ permalink raw reply	[relevance 3%]

* What's cooking in git.git (Jul 2022, #02; Fri, 8)
@ 2022-07-09 20:36  3% Junio C Hamano
  0 siblings, 0 replies; 200+ results
From: Junio C Hamano @ 2022-07-09 20:36 UTC (permalink / raw)
  To: git

Here are the topics that have been cooking in my tree.  Commits
prefixed with '+' are in 'next' (being in 'next' is a sign that a
topic is stable enough to be used and are candidate to be in a
future release).  Commits prefixed with '-' are only in 'seen',
and aren't considered "accepted" at all.

Copies of the source code to Git live in many repositories, and the
following is a list of the ones I push into or their mirrors.  Some
repositories have only a subset of branches.

With maint, master, next, seen, todo:

	git://git.kernel.org/pub/scm/git/git.git/
	git://repo.or.cz/alt-git.git/
	https://kernel.googlesource.com/pub/scm/git/git/
	https://github.com/git/git/
	https://gitlab.com/git-vcs/git/

With all the integration branches and topics broken out:

	https://github.com/gitster/git/

Even though the preformatted documentation in HTML and man format
are not sources, they are published in these repositories for
convenience (replace "htmldocs" with "manpages" for the manual
pages):

	git://git.kernel.org/pub/scm/git/git-htmldocs.git/
	https://github.com/gitster/git-htmldocs.git/

Release tarballs are available at:

	https://www.kernel.org/pub/software/scm/git/

--------------------------------------------------
[New Topics]

* ab/cocci-unused (2022-07-06) 6 commits
 - cocci: generalize "unused" rule to cover more than "strbuf"
 - cocci: add and apply a rule to find "unused" strbufs
 - cocci: have "coccicheck{,-pending}" depend on "coccicheck-test"
 - cocci: add a "coccicheck-test" target and test *.cocci rules
 - Makefile & .gitignore: ignore & clean "git.res", not "*.res"
 - Makefile: remove mandatory "spatch" arguments from SPATCH_FLAGS

 Add Coccinelle rules to detect the pattern of initializing and then
 finalizing a structure without using it in between at all, which
 happens after code restructuring and the compilers fail to
 recognize as an unused varilable.

 Will merge to 'next'.
 source: <cover-v4-0.6-00000000000-20220705T134033Z-avarab@gmail.com>


* jk/clone-unborn-confusion (2022-07-07) 3 commits
 - clone: use remote branch if it matches default HEAD
 - clone: propagate empty remote HEAD even with other branches
 - clone: drop extra newline from warning message

 "git clone" from a repository with some ref whose HEAD is unborn
 did not set the HEAD in the resulting repository correctly, which
 has been corrected.

 Will merge to 'next'?
 source: <YsdyLS4UFzj0j/wB@coredump.intra.peff.net>


* ac/bitmap-lookup-table (2022-07-06) 6 commits
 - p5310-pack-bitmaps.sh: remove pack.writeReverseIndex
 - bitmap-lookup-table: add performance tests for lookup table
 - pack-bitmap: prepare to read lookup table extension
 - pack-bitmap-write: learn pack.writeBitmapLookupTable and add tests
 - pack-bitmap-write.c: write lookup table extension
 - Documentation/technical: describe bitmap lookup table extension

 The pack bitmap file gained a bitmap-lookup table to speed up
 locating the necessary bitmap for a given commit.

 Will merge to 'next'?
 source: <pull.1266.v3.git.1656924376.gitgitgadget@gmail.com>


* bc/nettle-sha256 (2022-07-07) 1 commit
 - sha256: add support for Nettle

 Support for libnettle as SHA256 implementation has been added.

 Expecting a reroll.
 cf. <YsTgmv+h2SFFFMga@tapette.crustytoothpaste.net>
 source: <20220705230518.713218-1-sandals@crustytoothpaste.net>


* jc/builtin-mv-move-array (2022-07-06) 1 commit
 - builtin/mv.c: use the MOVE_ARRAY() macro instead of memmove()

 Apply Coccinelle rule to turn raw memmove() into MOVE_ARRAY() cpp
 macro, which would improve maintainability and readability.

 Will merge to 'next'?
 source: <xmqqy1x531vp.fsf@gitster.g>


* jd/gpg-interface-trust-level-string (2022-07-08) 1 commit
 - gpg-interface: add function for converting trust level to string

 The code to convert between GPG trust level strings and internal
 constants we use to represent them have been cleaned up.

 Will merge to 'next'.
 source: <pull.1281.v2.git.1657279447515.gitgitgadget@gmail.com>


* kk/p4-client-name-encoding-fix (2022-07-08) 1 commit
 - git-p4: fix bug with encoding of p4 client name

 "git p4" did not handle non-ASCII client name well, which has been
 corrected.

 Will merge to 'next'.
 source: <pull.1285.git.git.1657267260405.gitgitgadget@gmail.com>


* sa/cat-file-mailmap (2022-07-07) 5 commits
 - SQUASH???
 - cat-file: add mailmap support
 - ident: rename commit_rewrite_person() to apply_mailmap_to_header()
 - ident: move commit_rewrite_person() to ident.c
 - revision: improve commit_rewrite_person()

 source: <20220707161554.6900-1-siddharthasthana31@gmail.com>


* fr/vimdiff-layout-fix (2022-07-08) 1 commit
 - vimdiff: make layout engine more robust against user vim settings

 source: <20220708181024.45839-1-greenfoo@u92.eu>

--------------------------------------------------
[Graduated to 'master']

* js/add-i-delete (2022-06-28) 1 commit
  (merged to 'next' on 2022-06-28 at 8ac04bfd24)
 + add --interactive: allow `update` to stage deleted files

 Rewrite of "git add -i" in C that appeared in Git 2.25 didn't
 correctly record a removed file to the index, which was fixed.
 source: <pull.1273.git.1656454964378.gitgitgadget@gmail.com>

--------------------------------------------------
[Stalled]

* ll/curl-accept-language (2022-06-13) 2 commits
 - PREP??? give initializer to rpc_state
 - remote-curl: send Accept-Language header to server

 source: <pull.1251.v3.git.1655054421697.gitgitgadget@gmail.com>


* bc/stash-export (2022-04-08) 4 commits
 - builtin/stash: provide a way to import stashes from a ref
 - builtin/stash: provide a way to export stashes to a ref
 - builtin/stash: factor out revision parsing into a function
 - object-name: make get_oid quietly return an error

 A mechanism to export and import stash entries to and from a normal
 commit to transfer it across repositories has been introduced.

 Expecting a reroll.
 cf. <YnL2d4Vr9Vr7W4Hj@camp.crustytoothpaste.net>
 source: <20220407215352.3491567-1-sandals@crustytoothpaste.net>


* cw/remote-object-info (2022-05-06) 11 commits
 - SQUASH??? coccicheck
 - SQUASH??? ensure that coccicheck is happy
 - SQUASH??? compilation fix
 - cat-file: add --batch-command remote-object-info command
 - cat-file: move parse_cmd and DEFAULT_FORMAT up
 - transport: add object-info fallback to fetch
 - transport: add client side capability to request object-info
 - object-info: send attribute packet regardless of object ids
 - object-store: add function to free object_info contents
 - fetch-pack: move fetch default settings
 - fetch-pack: refactor packet writing

 A client component to talk with the object-info endpoint.

 Expecting a reroll.
 source: <20220502170904.2770649-1-calvinwan@google.com>

--------------------------------------------------
[Cooking]

* ds/git-rebase-doc-markup (2022-06-30) 1 commit
  (merged to 'next' on 2022-07-08 at 24a0b80b71)
 + git-rebase.txt: use back-ticks consistently

 References to commands-to-be-typed-literally in "git rebase"
 documentation mark-up have been corrected.

 Will merge to 'master'.
 source: <pull.1270.v3.git.1656508868146.gitgitgadget@gmail.com>


* ds/rebase-update-ref (2022-06-28) 8 commits
 - rebase: add rebase.updateRefs config option
 - rebase: update refs from 'update-ref' commands
 - rebase: add --update-refs option
 - sequencer: add update-ref command
 - sequencer: define array with enum values
 - rebase-interactive: update 'merge' description
 - branch: consider refs under 'update-refs'
 - t2407: test branches currently using apply backend
 (this branch uses ds/branch-checked-out.)

 "git rebase -i" learns to update branches whose tip appear in the
 rebased range.

 Expecting a reroll.
 cf. <15631ea2-6722-fd24-c8a6-0cee638b0602@github.com>
 source: <pull.1247.v3.git.1656422759.gitgitgadget@gmail.com>


* ds/vscode-settings (2022-06-27) 1 commit
  (merged to 'next' on 2022-07-02 at fcbd2e7aca)
 + vscode: improve tab size and wrapping

 Will merge to 'master'.
 source: <pull.1271.git.1656354587496.gitgitgadget@gmail.com>


* tb/pack-objects-remove-pahole-comment (2022-06-28) 1 commit
  (merged to 'next' on 2022-07-06 at d7494fbdef)
 + pack-objects.h: remove outdated pahole results

 Comment fix.

 Will merge to 'master'.
 source: <1379af2e9d271b501ef3942398e7f159a9c77973.1656440978.git.me@ttaylorr.com>


* ab/leakfix (2022-07-01) 11 commits
 - pull: fix a "struct oid_array" memory leak
 - cat-file: fix a common "struct object_context" memory leak
 - gc: fix a memory leak
 - checkout: avoid "struct unpack_trees_options" leak
 - merge-file: fix memory leaks on error path
 - merge-file: refactor for subsequent memory leak fix
 - cat-file: fix a memory leak in --batch-command mode
 - revert: free "struct replay_opts" members
 - submodule.c: free() memory from xgetcwd()
 - clone: fix memory leak in wanted_peer_refs()
 - check-ref-format: fix trivial memory leak

 Plug various memory leaks.

 Will merge to 'next'.
 source: <cover-v2-00.11-00000000000-20220701T104017Z-avarab@gmail.com>


* ab/test-tool-leakfix (2022-07-01) 9 commits
 - test-tool delta: fix a memory leak
 - test-tool ref-store: fix a memory leak
 - test-tool bloom: fix memory leaks
 - test-tool json-writer: fix memory leaks
 - test-tool regex: call regfree(), fix memory leaks
 - test-tool urlmatch-normalization: fix a memory leak
 - test-tool {dump,scrap}-cache-tree: fix memory leaks
 - test-tool path-utils: fix a memory leak
 - test-tool test-hash: fix a memory leak

 Plug various memory leaks in test-tool commands.

 Will merge to 'next'.
 source: <cover-v2-0.9-00000000000-20220701T103503Z-avarab@gmail.com>


* en/t6429-test-must-be-empty-fix (2022-06-30) 1 commit
  (merged to 'next' on 2022-07-06 at 627c51773c)
 + t6429: fix use of non-existent function

 A test fix.

 Will merge to 'master'.
 source: <pull.1276.git.1656652799863.gitgitgadget@gmail.com>


* gc/submodule-use-super-prefix (2022-06-30) 8 commits
 - submodule--helper: remove display path helper
 - submodule--helper update: use --super-prefix
 - submodule--helper: remove unused SUPPORT_SUPER_PREFIX flags
 - submodule--helper: use correct display path helper
 - submodule--helper: don't recreate recursive prefix
 - submodule--helper update: use display path helper
 - submodule--helper tests: add missing "display path" coverage
 - Merge branch 'ab/submodule-cleanup' into gc/submodule-use-super-prefix
 (this branch uses ab/submodule-cleanup.)

 Another step to rewrite more parts of "git submodule" in C.

 Will merge to 'next'.
 source: <20220701021157.88858-1-chooglen@google.com>


* hx/lookup-commit-in-graph-fix (2022-06-30) 1 commit
  (merged to 'next' on 2022-07-08 at cef32db0b6)
 + commit-graph.c: no lazy fetch in lookup_commit_in_graph()

 A corner case bug where lazily fetching objects from a promisor
 remote resulted in infinite recursion has been corrected.

 Will merge to 'master'.
 source: <96d4bb71505d87ed501c058bbd89bfc13d08b24a.1656593279.git.hanxin.hx@bytedance.com>


* ll/ls-files-tests-update (2022-07-06) 1 commit
  (merged to 'next' on 2022-07-06 at 444d1eabd0)
 + ls-files: update test style

 Test update.

 Will merge to 'master'.
 source: <pull.1269.v6.git.1656863349926.gitgitgadget@gmail.com>


* pw/xdiff-alloc (2022-07-08) 4 commits
 - xdiff: introduce XDL_ALLOC_GROW()
 - xdiff: introduce XDL_CALLOC_ARRAY()
 - xdiff: introduce xdl_calloc
 - xdiff: introduce XDL_ALLOC_ARRAY()

 Add a level of redirection to array allocation API in xdiff part,
 to make it easier to share with the libgit2 project.

 Will merge to 'next'?
 source: <pull.1272.v2.git.1657297519.gitgitgadget@gmail.com>


* sy/mv-out-of-cone (2022-07-01) 8 commits
  (merged to 'next' on 2022-07-08 at 654970fdb7)
 + mv: add check_dir_in_index() and solve general dir check issue
 + mv: use flags mode for update_mode
 + mv: check if <destination> exists in index to handle overwriting
 + mv: check if out-of-cone file exists in index with SKIP_WORKTREE bit
 + mv: decouple if/else-if checks using goto
 + mv: update sparsity after moving from out-of-cone to in-cone
 + t1092: mv directory from out-of-cone to in-cone
 + t7002: add tests for moving out-of-cone file/directory

 "git mv A B" in a sparsely populated working tree can be asked to
 move a path between directories that are "in cone" (i.e. expected
 to be materialized in the working tree) and "out of cone"
 (i.e. expected to be hidden).  The handling of such cases has been
 improved.

 Will merge to 'master'.
 source: <20220630023737.473690-1-shaoxuan.yuan02@gmail.com>


* ab/squelch-empty-fsync-traces (2022-06-30) 1 commit
 . trace2: don't include "fsync" events in all trace2 logs

 Omit fsync-related trace2 entries when their values are all zero.

 Breaks tests in hx/unpack-streaming with an interesting interaction.
 source: <patch-v2-1.1-a1fc37de947-20220630T084607Z-avarab@gmail.com>


* cl/grep-max-count (2022-06-22) 1 commit
  (merged to 'next' on 2022-07-08 at 646199ab4c)
 + grep: add --max-count command line option

 "git grep -m<max-hits>" is a way to limit the hits shown per file.

 Will merge to 'master'.
 source: <pull.1278.v4.git.git.1655927252899.gitgitgadget@gmail.com>


* jk/revisions-doc-markup-fix (2022-06-22) 1 commit
  (merged to 'next' on 2022-07-02 at e25dbe8cfb)
 + revisions.txt: escape "..." to avoid asciidoc horizontal ellipsis

 Documentation mark-up fix.

 Will merge to 'master'.
 source: <YrOmsA04FZae89be@coredump.intra.peff.net>


* tk/rev-parse-doc-clarify-at-u (2022-06-23) 1 commit
  (merged to 'next' on 2022-07-08 at 1075452f32)
 + rev-parse: documentation adjustment - mention remote tracking with @{u}

 Doc update.

 Will merge to 'master'.
 source: <pull.1265.v2.git.1655960512385.gitgitgadget@gmail.com>


* en/merge-tree (2022-06-22) 17 commits
  (merged to 'next' on 2022-07-08 at a29b4896ab)
 + git-merge-tree.txt: add a section on potentional usage mistakes
 + merge-tree: add a --allow-unrelated-histories flag
 + merge-tree: allow `ls-files -u` style info to be NUL terminated
 + merge-ort: optionally produce machine-readable output
 + merge-ort: store more specific conflict information
 + merge-ort: make `path_messages` a strmap to a string_list
 + merge-ort: store messages in a list, not in a single strbuf
 + merge-tree: provide easy access to `ls-files -u` style info
 + merge-tree: provide a list of which files have conflicts
 + merge-ort: remove command-line-centric submodule message from merge-ort
 + merge-ort: provide a merge_get_conflicted_files() helper function
 + merge-tree: support including merge messages in output
 + merge-ort: split out a separate display_update_messages() function
 + merge-tree: implement real merges
 + merge-tree: add option parsing and initial shell for real merge function
 + merge-tree: move logic for existing merge into new function
 + merge-tree: rename merge_trees() to trivial_merge_trees()

 A new command is introduced that takes two commits and computes a
 tree that would be contained in the resulting merge commit, if the
 histories leading to these two commits were to be merged, and is
 added as a new mode of "git merge-tree" subcommand.

 Will merge to 'master'.
 source: <pull.1122.v7.git.1655511660.gitgitgadget@gmail.com>


* dr/i18n-die-warn-error-usage (2022-06-21) 1 commit
  (merged to 'next' on 2022-07-08 at 6f639750a1)
 + i18n: mark message helpers prefix for translation

 Give _() markings to fatal/warning/usage: labels that are shown in
 front of these messages.

 Will merge to 'master'.
 source: <pull.1279.v2.git.git.1655819877758.gitgitgadget@gmail.com>


* ds/t5510-brokequote (2022-06-21) 1 commit
  (merged to 'next' on 2022-07-06 at 2776bed385)
 + t5510: replace 'origin' with URL more carefully

 Test fix.

 Will merge to 'master'.
 source: <484a330e-0902-6e1b-8189-63c72dcea494@github.com>


* en/merge-restore-to-pristine (2022-06-21) 6 commits
 - merge: do not exit restore_state() prematurely
 - merge: ensure we can actually restore pre-merge state
 - merge: make restore_state() restore staged state too
 - merge: fix save_state() to work when there are racy-dirty files
 - merge: remove unused variable
 - t6424: make sure a failed merge preserves local changes

 When "git merge" finds that it cannot perform a merge, it should
 restore the working tree to the state before the command was
 initiated, but in some corner cases it didn't.

 Needs review.
 source: <pull.1231.v2.git.1655621424.gitgitgadget@gmail.com>


* rs/combine-diff-with-incompatible-options (2022-06-21) 2 commits
  (merged to 'next' on 2022-07-02 at 0fe8b80a3e)
 + combine-diff: abort if --output is given
 + combine-diff: abort if --ignore-matching-lines is given

 Certain diff options are currently ignored when combined-diff is
 shown; mark them as incompatible with the feature.

 Will merge to 'master'.
 source: <220524.86v8tuvfl1.gmgdl@evledraar.gmail.com>


* tk/apply-case-insensitive (2022-06-21) 3 commits
 - apply: support case-only renames in case-insensitive filesystems
 - reset: new failing test for reset of case-insensitive duplicate in index
 - t4141: test "git apply" with core.ignorecase

 "git apply" barfed on a patch that makes a case-only rename on a
 case-insensitive filesystem.

 Needs review.
 source: <pull.1257.v2.git.1655655027.gitgitgadget@gmail.com>


* zh/ls-files-format (2022-07-06) 1 commit
 - ls-files: introduce "--format" option

 "git ls-files" learns the "--format" option to tweak its output.

 Getting closer to finish?
 cf. <220705.86sfng9c5a.gmgdl@evledraar.gmail.com>
 source: <pull.1262.v5.git.1657002760815.gitgitgadget@gmail.com>


* ab/test-quoting-fix (2022-06-30) 3 commits
  (merged to 'next' on 2022-07-06 at 0aa78fd9db)
 + config tests: fix harmless but broken "rm -r" cleanup
 + test-lib.sh: fix prepend_var() quoting issue
 + tests: add missing double quotes to included library paths

 Fixes for tests when the source directory has unusual characters in
 its path, e.g. whitespaces, double-quotes, etc.

 Will merge to 'master'.
 source: <cover-v2-0.3-00000000000-20220630T101646Z-avarab@gmail.com>


* en/merge-dual-dir-renames-fix (2022-07-06) 5 commits
 - merge-ort: fix issue with dual rename and add/add conflict
 - merge-ort: shuffle the computation and cleanup of potential collisions
 - merge-ort: make a separate function for freeing struct collisions
 - merge-ort: small cleanups of check_for_directory_rename
 - t6423: add tests of dual directory rename plus add/add conflict

 Fixes a long-standing corner case bug around directory renames in
 the merge-ort strategy.

 Will merge to 'next'.
 source: <pull.1268.v4.git.1656984823.gitgitgadget@gmail.com>


* cr/setup-bug-typo (2022-06-17) 1 commit
  (merged to 'next' on 2022-06-17 at 8834ffe0ab)
 + setup: fix function name in a BUG() message

 Typofix in a BUG() message.

 Will cook in 'next'.
 source: <pull.1255.git.1654782920256.gitgitgadget@gmail.com>


* zk/push-use-bitmaps (2022-06-17) 1 commit
  (merged to 'next' on 2022-07-08 at 8aa1f94fad)
 + send-pack.c: add config push.useBitmaps

 "git push" sometimes perform poorly when reachability bitmaps are
 used, even in a repository where other operations are helped by
 bitmaps.  The push.useBitmaps configuration variable is introduced
 to allow disabling use of reachability bitmaps only for "git push".

 Will merge to 'master'.
 source: <pull.1263.v4.git.1655492779228.gitgitgadget@gmail.com>


* jk/remote-show-with-negative-refspecs (2022-06-17) 1 commit
  (merged to 'next' on 2022-07-08 at d4e49ad22a)
 + remote: handle negative refspecs in git remote show
 (this branch is used by jk/t5505-restructure.)

 "git remote show [-n] frotz" now pays attention to negative
 pathspecs.

 Will merge to 'master'.
 source: <20220617002036.1577-2-jacob.keller@gmail.com>


* js/commit-graph-parsing-without-repo-settings (2022-06-15) 1 commit
 - commit-graph: refactor to avoid prepare_repo_settings

 Expecting a reroll.
 source: <9b56496b0809cc8a25af877ea97042e2cb7f2af6.1655246092.git.steadmon@google.com>


* jk/optim-promisor-object-enumeration (2022-06-16) 1 commit
  (merged to 'next' on 2022-06-16 at ce0712a74c)
 + is_promisor_object(): walk promisor packs in pack-order

 Collection of what is referenced by objects in promisor packs have
 been optimized to inspect these objects in the in-pack order.

 Will cook in 'next'.
 source: <YqrTsbXbEjx0Pabn@coredump.intra.peff.net>


* ro/mktree-allow-missing-fix (2022-06-21) 1 commit
  (merged to 'next' on 2022-07-08 at 599ed6fb84)
 + mktree: do not check type of remote objects

 "git mktree --missing" lazily fetched objects that are missing from
 the local object store, which was totally unnecessary for the purpose
 of creating the tree object(s) from its input.

 Will merge to 'master'.
 source: <748f39a9-65aa-2110-cf92-7ddf81b5f507@roku.com>


* pb/diff-doc-raw-format (2022-06-13) 3 commits
  (merged to 'next' on 2022-07-02 at 198480cbc6)
 + diff-index.txt: update raw output format in examples
 + diff-format.txt: correct misleading wording
 + diff-format.txt: dst can be 0* SHA-1 when path is deleted, too

 Update "git diff/log --raw" format documentation.

 Will merge to 'master'.
 source: <pull.1259.git.1655123383.gitgitgadget@gmail.com>


* rs/archive-with-internal-gzip (2022-06-15) 6 commits
  (merged to 'next' on 2022-06-17 at ab5af6acd1)
 + archive-tar: use internal gzip by default
 + archive-tar: use OS_CODE 3 (Unix) for internal gzip
 + archive-tar: add internal gzip implementation
 + archive-tar: factor out write_block()
 + archive: rename archiver data field to filter_command
 + archive: update format documentation

 Teach "git archive" to (optionally and then by default) avoid
 spawning an external "gzip" process when creating ".tar.gz" (and
 ".tgz") archives.

 Will cook in 'next'.
 source: <9df761c3-355a-ede9-7971-b32687fe9abb@web.de>


* ds/branch-checked-out (2022-06-21) 7 commits
  (merged to 'next' on 2022-06-21 at e42bc4566f)
 + branch: drop unused worktrees variable
 + fetch: stop passing around unused worktrees variable
  (merged to 'next' on 2022-06-17 at c881874257)
 + branch: fix branch_checked_out() leaks
 + branch: use branch_checked_out() when deleting refs
 + fetch: use new branch_checked_out() and add tests
 + branch: check for bisects and rebases
 + branch: add branch_checked_out() helper
 (this branch is used by ds/rebase-update-ref.)

 Introduce a helper to see if a branch is already being worked on
 (hence should not be newly checked out in a working tree), which
 performs much better than the existing find_shared_symref() to
 replace many uses of the latter.

 Will cook in 'next'.
 source: <pull.1254.v2.git.1655234853.gitgitgadget@gmail.com>


* jt/connected-show-missing-from-which-side (2022-06-10) 1 commit
 - fetch,fetch-pack: clarify connectivity check error

 We may find an object missing after a "git fetch" stores the
 objects it obtained from the other side, but it is not necessarily
 because the remote failed to send necessary objects.  Reword the
 messages in an attempt to help users explore other possibilities
 when they hit this error.

 Expecting a reroll.
 source: <20220610195247.1177549-1-jonathantanmy@google.com>


* ab/submodule-cleanup (2022-06-28) 12 commits
  (merged to 'next' on 2022-07-08 at 6f3886aa03)
 + git-sh-setup.sh: remove "say" function, change last users
 + git-submodule.sh: use "$quiet", not "$GIT_QUIET"
 + submodule--helper: eliminate internal "--update" option
 + submodule--helper: understand --checkout, --merge and --rebase synonyms
 + submodule--helper: report "submodule" as our name in some "-h" output
 + submodule--helper: rename "absorb-git-dirs" to "absorbgitdirs"
 + submodule update: remove "-v" option
 + submodule--helper: have --require-init imply --init
 + git-submodule.sh: remove unused top-level "--branch" argument
 + git-submodule.sh: make the "$cached" variable a boolean
 + git-submodule.sh: remove unused $prefix variable
 + git-submodule.sh: remove unused sanitize_submodule_env()
 (this branch is used by gc/submodule-use-super-prefix.)

 Further preparation to turn git-submodule.sh into a builtin.

 Will merge to 'master'.
 source: <cover-v4-00.12-00000000000-20220628T095914Z-avarab@gmail.com>


* jc/resolve-undo (2022-06-09) 1 commit
  (merged to 'next' on 2022-06-15 at c195e5a2d9)
 + revision: mark blobs needed for resolve-undo as reachable

 The resolve-undo information in the index was not protected against
 GC, which has been corrected.

 Will cook in 'next'.
 source: <xmqqfskdieqz.fsf@gitster.g>


* ab/build-gitweb (2022-06-28) 8 commits
 - gitweb/Makefile: add a "NO_GITWEB" parameter
 - Makefile: build 'gitweb' in the default target
 - gitweb/Makefile: include in top-level Makefile
 - gitweb: remove "test" and "test-installed" targets
 - gitweb/Makefile: prepare to merge into top-level Makefile
 - gitweb/Makefile: clear up and de-duplicate the gitweb.{css,js} vars
 - gitweb/Makefile: add a $(GITWEB_ALL) variable
 - gitweb/Makefile: define all .PHONY prerequisites inline

 Teach "make all" to build gitweb as well.

 Will merge to 'next'?
 source: <cover-v3-0.8-00000000000-20220628T100936Z-avarab@gmail.com>


* ab/test-without-templates (2022-06-06) 7 commits
 - tests: don't assume a .git/info for .git/info/sparse-checkout
 - tests: don't assume a .git/info for .git/info/exclude
 - tests: don't assume a .git/info for .git/info/refs
 - tests: don't assume a .git/info for .git/info/attributes
 - tests: don't assume a .git/info for .git/info/grafts
 - tests: don't depend on template-created .git/branches
 - t0008: don't rely on default ".git/info/exclude"

 Tweak tests so that they still work when the "git init" template
 did not create .git/info directory.

 Will merge to 'next'?
 source: <cover-v2-0.7-00000000000-20220603T110506Z-avarab@gmail.com>


* ac/bitmap-format-doc (2022-06-16) 3 commits
  (merged to 'next' on 2022-06-16 at 5591d11601)
 + bitmap-format.txt: add information for trailing checksum
 + bitmap-format.txt: fix some formatting issues
 + bitmap-format.txt: feed the file to asciidoc to generate html

 Adjust technical/bitmap-format to be formatted by AsciiDoc, and
 add some missing information to the documentation.

 Will cook in 'next'.
 source: <pull.1246.v4.git.1655355834.gitgitgadget@gmail.com>


* hx/unpack-streaming (2022-06-13) 6 commits
  (merged to 'next' on 2022-07-08 at 4eb375ec2f)
 + unpack-objects: use stream_loose_object() to unpack large objects
 + core doc: modernize core.bigFileThreshold documentation
 + object-file.c: add "stream_loose_object()" to handle large object
 + object-file.c: factor out deflate part of write_loose_object()
 + object-file.c: refactor write_loose_object() to several steps
 + unpack-objects: low memory footprint for get_data() in dry_run mode

 Allow large objects read from a packstream to be streamed into a
 loose object file straight, without having to keep it in-core as a
 whole.

 Will merge to 'master'.
 source: <cover.1654914555.git.chiyutianyi@gmail.com>


* tb/show-ref-count (2022-06-06) 2 commits
 - builtin/show-ref.c: limit output with `--count`
 - builtin/show-ref.c: rename `found_match` to `matches_nr`

 "git show-ref" learned to stop after emitting N refs with the new
 "--count=N" option.

 Expecting a reroll.
 cf. <xmqqczfl4ce1.fsf@gitster.g>
 source: <cover.1654552560.git.me@ttaylorr.com>


* ds/bundle-uri-more (2022-06-06) 6 commits
 - fetch: add 'refs/bundle/' to log.excludeDecoration
 - bundle-uri: add support for http(s):// and file://
 - fetch: add --bundle-uri option
 - bundle-uri: create basic file-copy logic
 - remote-curl: add 'get' capability
 - docs: document bundle URI standard

 The "bundle URI" topic.

 Needs review.
 source: <pull.1248.git.1654545325.gitgitgadget@gmail.com>


* js/bisect-in-c (2022-06-27) 16 commits
 - bisect: no longer try to clean up left-over `.git/head-name` files
 - bisect: remove Cogito-related code
 - Turn `git bisect` into a full built-in
 - bisect: move even the command-line parsing to `bisect--helper`
 - bisect: teach the `bisect--helper` command to show the correct usage strings
 - bisect--helper: return only correct exit codes in `cmd_*()`
 - bisect--helper: move the `BISECT_STATE` case to the end
 - bisect--helper: make `--bisect-state` optional
 - bisect--helper: align the sub-command order with git-bisect.sh
 - bisect--helper: using `--bisect-state` without an argument is a bug
 - bisect--helper: really retire `--bisect-autostart`
 - bisect--helper: really retire --bisect-next-check
 - bisect--helper: retire the --no-log option
 - bisect: avoid double-quoting when printing the failed command
 - bisect run: fix the error message
 - bisect: verify that a bogus option won't try to start a bisection

 Final bits of "git bisect.sh" have been rewritten in C.

 Expecting a (hopefully final) reroll.
 cf. <20627.86ilolhnnn.gmgdl@evledraar.gmail.com>
 source: <pull.1132.v4.git.1656354677.gitgitgadget@gmail.com>


* gc/bare-repo-discovery (2022-07-07) 5 commits
 - setup.c: create `discovery.bare`
 - safe.directory: use git_protected_config()
 - config: learn `git_protected_config()`
 - Documentation: define protected configuration
 - Documentation/git-config.txt: add SCOPES section

 Introduce a discovery.barerepository configuration variable that
 allows users to forbid discovery of bare repositories.
 source: <pull.1261.v7.git.git.1657234914.gitgitgadget@gmail.com>


* gg/worktree-from-the-above (2022-06-21) 2 commits
  (merged to 'next' on 2022-07-08 at fa0e71ba39)
 + dir: minor refactoring / clean-up
 + dir: traverse into repository

 In a non-bare repository, the behavior of Git when the
 core.worktree configuration variable points at a directory that has
 a repository as its subdirectory, regressed in Git 2.27 days.

 Will merge to 'master'.
 source: <20220616234433.225-1-gg.oss@outlook.com>
 source: <20220616231956.154-1-gg.oss@outlook.com>

--------------------------------------------------
[Discarded]

* ar/send-email-confirm-by-default (2022-04-22) 1 commit
 . send-email: always confirm by default

 "git send-email" is changed so that by default it asks for
 confirmation before sending each message out.

 Discarded.
 I wanted to like this, and had it in the version of Git I use
 myself for daily work, but the prompting turned out to be somewhat
 distracting.
 source: <20220422083629.1404989-1-hi@alyssa.is>

^ permalink raw reply	[relevance 3%]

* What's cooking in git.git (Jul 2022, #03; Mon, 11)
@ 2022-07-12 17:07  3% Junio C Hamano
  0 siblings, 0 replies; 200+ results
From: Junio C Hamano @ 2022-07-12 17:07 UTC (permalink / raw)
  To: git

Here are the topics that have been cooking in my tree.  Commits
prefixed with '+' are in 'next' (being in 'next' is a sign that a
topic is stable enough to be used and are candidate to be in a
future release).  Commits prefixed with '-' are only in 'seen',
and aren't considered "accepted" at all.

Maintenance releases v2.37.1 and others have been tagged.  They are
to address CVE-2022-29187, a vulnerability related to CVE-2022-24765
that was fixed earlier.  Big thanks to Carlo Arenas and Johannes
Schindelin for fixing the issue and helping the releases out.

Copies of the source code to Git live in many repositories, and the
following is a list of the ones I push into or their mirrors.  Some
repositories have only a subset of branches.

With maint, master, next, seen, todo:

	git://git.kernel.org/pub/scm/git/git.git/
	git://repo.or.cz/alt-git.git/
	https://kernel.googlesource.com/pub/scm/git/git/
	https://github.com/git/git/
	https://gitlab.com/git-vcs/git/

With all the integration branches and topics broken out:

	https://github.com/gitster/git/

Even though the preformatted documentation in HTML and man format
are not sources, they are published in these repositories for
convenience (replace "htmldocs" with "manpages" for the manual
pages):

	git://git.kernel.org/pub/scm/git/git-htmldocs.git/
	https://github.com/gitster/git-htmldocs.git/

Release tarballs are available at:

	https://www.kernel.org/pub/software/scm/git/

--------------------------------------------------
[Graduated to 'master']

* ac/bitmap-format-doc (2022-06-16) 3 commits
  (merged to 'next' on 2022-06-16 at 5591d11601)
 + bitmap-format.txt: add information for trailing checksum
 + bitmap-format.txt: fix some formatting issues
 + bitmap-format.txt: feed the file to asciidoc to generate html

 Adjust technical/bitmap-format to be formatted by AsciiDoc, and
 add some missing information to the documentation.
 source: <pull.1246.v4.git.1655355834.gitgitgadget@gmail.com>


* cr/setup-bug-typo (2022-06-17) 1 commit
  (merged to 'next' on 2022-06-17 at 8834ffe0ab)
 + setup: fix function name in a BUG() message

 Typofix in a BUG() message.
 source: <pull.1255.git.1654782920256.gitgitgadget@gmail.com>


* ds/branch-checked-out (2022-06-21) 7 commits
  (merged to 'next' on 2022-06-21 at e42bc4566f)
 + branch: drop unused worktrees variable
 + fetch: stop passing around unused worktrees variable
  (merged to 'next' on 2022-06-17 at c881874257)
 + branch: fix branch_checked_out() leaks
 + branch: use branch_checked_out() when deleting refs
 + fetch: use new branch_checked_out() and add tests
 + branch: check for bisects and rebases
 + branch: add branch_checked_out() helper
 (this branch is used by ds/rebase-update-ref.)

 Introduce a helper to see if a branch is already being worked on
 (hence should not be newly checked out in a working tree), which
 performs much better than the existing find_shared_symref() to
 replace many uses of the latter.
 source: <pull.1254.v2.git.1655234853.gitgitgadget@gmail.com>


* ds/vscode-settings (2022-06-27) 1 commit
  (merged to 'next' on 2022-07-02 at fcbd2e7aca)
 + vscode: improve tab size and wrapping

 Will merge to 'master'.
 source: <pull.1271.git.1656354587496.gitgitgadget@gmail.com>


* jk/optim-promisor-object-enumeration (2022-06-16) 1 commit
  (merged to 'next' on 2022-06-16 at ce0712a74c)
 + is_promisor_object(): walk promisor packs in pack-order

 Collection of what is referenced by objects in promisor packs have
 been optimized to inspect these objects in the in-pack order.
 source: <YqrTsbXbEjx0Pabn@coredump.intra.peff.net>


* jk/revisions-doc-markup-fix (2022-06-22) 1 commit
  (merged to 'next' on 2022-07-02 at e25dbe8cfb)
 + revisions.txt: escape "..." to avoid asciidoc horizontal ellipsis

 Documentation mark-up fix.
 source: <YrOmsA04FZae89be@coredump.intra.peff.net>


* pb/diff-doc-raw-format (2022-06-13) 3 commits
  (merged to 'next' on 2022-07-02 at 198480cbc6)
 + diff-index.txt: update raw output format in examples
 + diff-format.txt: correct misleading wording
 + diff-format.txt: dst can be 0* SHA-1 when path is deleted, too

 Update "git diff/log --raw" format documentation.
 source: <pull.1259.git.1655123383.gitgitgadget@gmail.com>


* rs/archive-with-internal-gzip (2022-06-15) 6 commits
  (merged to 'next' on 2022-06-17 at ab5af6acd1)
 + archive-tar: use internal gzip by default
 + archive-tar: use OS_CODE 3 (Unix) for internal gzip
 + archive-tar: add internal gzip implementation
 + archive-tar: factor out write_block()
 + archive: rename archiver data field to filter_command
 + archive: update format documentation

 Teach "git archive" to (optionally and then by default) avoid
 spawning an external "gzip" process when creating ".tar.gz" (and
 ".tgz") archives.
 source: <9df761c3-355a-ede9-7971-b32687fe9abb@web.de>


* rs/combine-diff-with-incompatible-options (2022-06-21) 2 commits
  (merged to 'next' on 2022-07-02 at 0fe8b80a3e)
 + combine-diff: abort if --output is given
 + combine-diff: abort if --ignore-matching-lines is given

 Certain diff options are currently ignored when combined-diff is
 shown; mark them as incompatible with the feature.
 source: <220524.86v8tuvfl1.gmgdl@evledraar.gmail.com>

--------------------------------------------------
[New Topics]

* po/doc-add-renormalize (2022-07-09) 1 commit
 - doc add: renormalize is not idempotent for CRCRLF

 Documentation for "git add --renormalize" has been improved.

 Will merge to 'next'?
 source: <d3b8ed97a105ea1d7e656c964b7eee378e11ede6.1657385781.git.gitgitgadget@gmail.com>


* po/glossary-around-traversal (2022-07-09) 3 commits
 - glossary: add reachability bitmap description
 - glossary: add commit graph description
 - glossary: add Object DataBase (ODB) abbreviation

 The glossary entries for "commit-graph file" and "reachability
 bitmap" have been added.

 Will merge to 'next'?
 source: <pull.1282.git.1657385781.gitgitgadget@gmail.com>


* rs/cocci-array-copy (2022-07-10) 1 commit
 - cocci: avoid normalization rules for memcpy

 A coccinelle rule (in contrib/) to encourage use of COPY_ARRAY
 macro has been improved.

 Will merge to 'next'.
 source: <ded153d4-4aea-d4da-11cb-ec66d181e4c9@web.de>


* sg/multi-pack-index-parse-options-fix (2022-07-10) 1 commit
  (merged to 'next' on 2022-07-11 at 1e14685680)
 + multi-pack-index: simplify handling of unknown --options

 The way "git multi-pack" uses parse-options API has been improved.

 Will merge to 'master'.
 source: <20220710151645.GA2038@szeder.dev>


* jk/ref-filter-discard-commit-buffer (2022-07-11) 1 commit
 - ref-filter: disable save_commit_buffer while traversing

 source: <Ysw4JtoHW1vWmqhz@coredump.intra.peff.net>

--------------------------------------------------
[Stalled]

* ll/curl-accept-language (2022-07-11) 1 commit
 - remote-curl: send Accept-Language header to server

 Earlier, HTTP transport clients learned to tell the server side
 what locale they are in by sending Accept-Language HTTP header, but
 this was done only for some requests but not others.

 Will merge to 'next'.
 source: <pull.1251.v4.git.1657519134336.gitgitgadget@gmail.com>


* bc/stash-export (2022-04-08) 4 commits
 - builtin/stash: provide a way to import stashes from a ref
 - builtin/stash: provide a way to export stashes to a ref
 - builtin/stash: factor out revision parsing into a function
 - object-name: make get_oid quietly return an error

 A mechanism to export and import stash entries to and from a normal
 commit to transfer it across repositories has been introduced.

 Expecting a reroll.
 cf. <YnL2d4Vr9Vr7W4Hj@camp.crustytoothpaste.net>
 source: <20220407215352.3491567-1-sandals@crustytoothpaste.net>


* cw/remote-object-info (2022-05-06) 11 commits
 - SQUASH??? coccicheck
 - SQUASH??? ensure that coccicheck is happy
 - SQUASH??? compilation fix
 - cat-file: add --batch-command remote-object-info command
 - cat-file: move parse_cmd and DEFAULT_FORMAT up
 - transport: add object-info fallback to fetch
 - transport: add client side capability to request object-info
 - object-info: send attribute packet regardless of object ids
 - object-store: add function to free object_info contents
 - fetch-pack: move fetch default settings
 - fetch-pack: refactor packet writing

 A client component to talk with the object-info endpoint.

 Expecting a reroll.
 source: <20220502170904.2770649-1-calvinwan@google.com>

--------------------------------------------------
[Cooking]

* ab/cocci-unused (2022-07-06) 6 commits
  (merged to 'next' on 2022-07-11 at 7fa60d2a5b)
 + cocci: generalize "unused" rule to cover more than "strbuf"
 + cocci: add and apply a rule to find "unused" strbufs
 + cocci: have "coccicheck{,-pending}" depend on "coccicheck-test"
 + cocci: add a "coccicheck-test" target and test *.cocci rules
 + Makefile & .gitignore: ignore & clean "git.res", not "*.res"
 + Makefile: remove mandatory "spatch" arguments from SPATCH_FLAGS

 Add Coccinelle rules to detect the pattern of initializing and then
 finalizing a structure without using it in between at all, which
 happens after code restructuring and the compilers fail to
 recognize as an unused varilable.

 Will merge to 'master'.
 source: <cover-v4-0.6-00000000000-20220705T134033Z-avarab@gmail.com>


* jk/clone-unborn-confusion (2022-07-11) 4 commits
 - clone: move unborn head creation to update_head()
 - clone: use remote branch if it matches default HEAD
 - clone: propagate empty remote HEAD even with other branches
 - clone: drop extra newline from warning message

 "git clone" from a repository with some ref whose HEAD is unborn
 did not set the HEAD in the resulting repository correctly, which
 has been corrected.

 Will merge to 'next'.
 source: <YsdyLS4UFzj0j/wB@coredump.intra.peff.net>
 source: <YsvrsOH1jg559yVt@coredump.intra.peff.net>


* ac/bitmap-lookup-table (2022-07-06) 6 commits
 - p5310-pack-bitmaps.sh: remove pack.writeReverseIndex
 - bitmap-lookup-table: add performance tests for lookup table
 - pack-bitmap: prepare to read lookup table extension
 - pack-bitmap-write: learn pack.writeBitmapLookupTable and add tests
 - pack-bitmap-write.c: write lookup table extension
 - Documentation/technical: describe bitmap lookup table extension

 The pack bitmap file gained a bitmap-lookup table to speed up
 locating the necessary bitmap for a given commit.

 Will merge to 'next'?
 source: <pull.1266.v3.git.1656924376.gitgitgadget@gmail.com>


* bc/nettle-sha256 (2022-07-10) 1 commit
  (merged to 'next' on 2022-07-11 at cf9595d8ca)
 + sha256: add support for Nettle

 Support for libnettle as SHA256 implementation has been added.

 Will merge to 'master'.
 source: <20220710132907.1499365-1-sandals@crustytoothpaste.net>


* jc/builtin-mv-move-array (2022-07-09) 1 commit
  (merged to 'next' on 2022-07-09 at 0d3b3f62e5)
 + builtin/mv.c: use the MOVE_ARRAY() macro instead of memmove()

 Apply Coccinelle rule to turn raw memmove() into MOVE_ARRAY() cpp
 macro, which would improve maintainability and readability.

 Will merge to 'master'.
 source: <xmqq4jzpu4xp.fsf_-_@gitster.g>


* jd/gpg-interface-trust-level-string (2022-07-10) 1 commit
  (merged to 'next' on 2022-07-11 at 7b3cca73a8)
 + gpg-interface: add function for converting trust level to string

 The code to convert between GPG trust level strings and internal
 constants we use to represent them have been cleaned up.

 Will merge to 'master'.
 source: <pull.1281.v4.git.1657515650587.gitgitgadget@gmail.com>


* kk/p4-client-name-encoding-fix (2022-07-08) 1 commit
  (merged to 'next' on 2022-07-11 at 9c18616f76)
 + git-p4: fix bug with encoding of p4 client name

 "git p4" did not handle non-ASCII client name well, which has been
 corrected.

 Will merge to 'master'.
 source: <pull.1285.git.git.1657267260405.gitgitgadget@gmail.com>


* sa/cat-file-mailmap (2022-07-09) 4 commits
 - cat-file: add mailmap support
 - ident: rename commit_rewrite_person() to apply_mailmap_to_header()
 - ident: move commit_rewrite_person() to ident.c
 - revision: improve commit_rewrite_person()

 "git cat-file" learned an option to use the mailmap when showing
 commit and tag objects.
 source: <20220709154149.165524-1-siddharthasthana31@gmail.com>


* fr/vimdiff-layout-fix (2022-07-08) 1 commit
  (merged to 'next' on 2022-07-09 at d8461bd236)
 + vimdiff: make layout engine more robust against user vim settings

 Recent update to vimdiff layout code has been made more robust
 against different end-user vim settings.

 Will merge to 'master'.
 source: <20220708181024.45839-1-greenfoo@u92.eu>


* ds/git-rebase-doc-markup (2022-06-30) 1 commit
  (merged to 'next' on 2022-07-08 at 24a0b80b71)
 + git-rebase.txt: use back-ticks consistently

 References to commands-to-be-typed-literally in "git rebase"
 documentation mark-up have been corrected.

 Will merge to 'master'.
 source: <pull.1270.v3.git.1656508868146.gitgitgadget@gmail.com>


* ds/rebase-update-ref (2022-06-28) 8 commits
 - rebase: add rebase.updateRefs config option
 - rebase: update refs from 'update-ref' commands
 - rebase: add --update-refs option
 - sequencer: add update-ref command
 - sequencer: define array with enum values
 - rebase-interactive: update 'merge' description
 - branch: consider refs under 'update-refs'
 - t2407: test branches currently using apply backend

 "git rebase -i" learns to update branches whose tip appear in the
 rebased range.

 Expecting a reroll.
 cf. <15631ea2-6722-fd24-c8a6-0cee638b0602@github.com>
 source: <pull.1247.v3.git.1656422759.gitgitgadget@gmail.com>


* tb/pack-objects-remove-pahole-comment (2022-06-28) 1 commit
  (merged to 'next' on 2022-07-06 at d7494fbdef)
 + pack-objects.h: remove outdated pahole results

 Comment fix.

 Will merge to 'master'.
 source: <1379af2e9d271b501ef3942398e7f159a9c77973.1656440978.git.me@ttaylorr.com>


* ab/leakfix (2022-07-01) 11 commits
  (merged to 'next' on 2022-07-11 at 0b107fffcf)
 + pull: fix a "struct oid_array" memory leak
 + cat-file: fix a common "struct object_context" memory leak
 + gc: fix a memory leak
 + checkout: avoid "struct unpack_trees_options" leak
 + merge-file: fix memory leaks on error path
 + merge-file: refactor for subsequent memory leak fix
 + cat-file: fix a memory leak in --batch-command mode
 + revert: free "struct replay_opts" members
 + submodule.c: free() memory from xgetcwd()
 + clone: fix memory leak in wanted_peer_refs()
 + check-ref-format: fix trivial memory leak

 Plug various memory leaks.

 Will merge to 'master'.
 source: <cover-v2-00.11-00000000000-20220701T104017Z-avarab@gmail.com>


* ab/test-tool-leakfix (2022-07-01) 9 commits
  (merged to 'next' on 2022-07-11 at db7a724694)
 + test-tool delta: fix a memory leak
 + test-tool ref-store: fix a memory leak
 + test-tool bloom: fix memory leaks
 + test-tool json-writer: fix memory leaks
 + test-tool regex: call regfree(), fix memory leaks
 + test-tool urlmatch-normalization: fix a memory leak
 + test-tool {dump,scrap}-cache-tree: fix memory leaks
 + test-tool path-utils: fix a memory leak
 + test-tool test-hash: fix a memory leak

 Plug various memory leaks in test-tool commands.

 Will merge to 'master'.
 source: <cover-v2-0.9-00000000000-20220701T103503Z-avarab@gmail.com>


* en/t6429-test-must-be-empty-fix (2022-06-30) 1 commit
  (merged to 'next' on 2022-07-06 at 627c51773c)
 + t6429: fix use of non-existent function

 A test fix.

 Will merge to 'master'.
 source: <pull.1276.git.1656652799863.gitgitgadget@gmail.com>


* gc/submodule-use-super-prefix (2022-06-30) 8 commits
  (merged to 'next' on 2022-07-11 at 0d9cf172f9)
 + submodule--helper: remove display path helper
 + submodule--helper update: use --super-prefix
 + submodule--helper: remove unused SUPPORT_SUPER_PREFIX flags
 + submodule--helper: use correct display path helper
 + submodule--helper: don't recreate recursive prefix
 + submodule--helper update: use display path helper
 + submodule--helper tests: add missing "display path" coverage
 + Merge branch 'ab/submodule-cleanup' into gc/submodule-use-super-prefix
 (this branch uses ab/submodule-cleanup.)

 Another step to rewrite more parts of "git submodule" in C.

 Will merge to 'master'.
 source: <20220701021157.88858-1-chooglen@google.com>


* hx/lookup-commit-in-graph-fix (2022-06-30) 1 commit
  (merged to 'next' on 2022-07-08 at cef32db0b6)
 + commit-graph.c: no lazy fetch in lookup_commit_in_graph()

 A corner case bug where lazily fetching objects from a promisor
 remote resulted in infinite recursion has been corrected.

 Will merge to 'master'.
 source: <96d4bb71505d87ed501c058bbd89bfc13d08b24a.1656593279.git.hanxin.hx@bytedance.com>


* ll/ls-files-tests-update (2022-07-06) 1 commit
  (merged to 'next' on 2022-07-06 at 444d1eabd0)
 + ls-files: update test style

 Test update.

 Will merge to 'master'.
 source: <pull.1269.v6.git.1656863349926.gitgitgadget@gmail.com>


* pw/xdiff-alloc (2022-07-08) 4 commits
 - xdiff: introduce XDL_ALLOC_GROW()
 - xdiff: introduce XDL_CALLOC_ARRAY()
 - xdiff: introduce xdl_calloc
 - xdiff: introduce XDL_ALLOC_ARRAY()

 Add a level of redirection to array allocation API in xdiff part,
 to make it easier to share with the libgit2 project.

 Will merge to 'next'?
 source: <pull.1272.v2.git.1657297519.gitgitgadget@gmail.com>


* sy/mv-out-of-cone (2022-07-01) 8 commits
  (merged to 'next' on 2022-07-08 at 654970fdb7)
 + mv: add check_dir_in_index() and solve general dir check issue
 + mv: use flags mode for update_mode
 + mv: check if <destination> exists in index to handle overwriting
 + mv: check if out-of-cone file exists in index with SKIP_WORKTREE bit
 + mv: decouple if/else-if checks using goto
 + mv: update sparsity after moving from out-of-cone to in-cone
 + t1092: mv directory from out-of-cone to in-cone
 + t7002: add tests for moving out-of-cone file/directory

 "git mv A B" in a sparsely populated working tree can be asked to
 move a path between directories that are "in cone" (i.e. expected
 to be materialized in the working tree) and "out of cone"
 (i.e. expected to be hidden).  The handling of such cases has been
 improved.

 Will merge to 'master'.
 source: <20220630023737.473690-1-shaoxuan.yuan02@gmail.com>


* ab/squelch-empty-fsync-traces (2022-06-30) 1 commit
 . trace2: don't include "fsync" events in all trace2 logs

 Omit fsync-related trace2 entries when their values are all zero.

 Breaks tests in hx/unpack-streaming with an interesting interaction.
 source: <patch-v2-1.1-a1fc37de947-20220630T084607Z-avarab@gmail.com>


* cl/grep-max-count (2022-06-22) 1 commit
  (merged to 'next' on 2022-07-08 at 646199ab4c)
 + grep: add --max-count command line option

 "git grep -m<max-hits>" is a way to limit the hits shown per file.

 Will merge to 'master'.
 source: <pull.1278.v4.git.git.1655927252899.gitgitgadget@gmail.com>


* tk/rev-parse-doc-clarify-at-u (2022-06-23) 1 commit
  (merged to 'next' on 2022-07-08 at 1075452f32)
 + rev-parse: documentation adjustment - mention remote tracking with @{u}

 Doc update.

 Will merge to 'master'.
 source: <pull.1265.v2.git.1655960512385.gitgitgadget@gmail.com>


* en/merge-tree (2022-06-22) 17 commits
  (merged to 'next' on 2022-07-08 at a29b4896ab)
 + git-merge-tree.txt: add a section on potentional usage mistakes
 + merge-tree: add a --allow-unrelated-histories flag
 + merge-tree: allow `ls-files -u` style info to be NUL terminated
 + merge-ort: optionally produce machine-readable output
 + merge-ort: store more specific conflict information
 + merge-ort: make `path_messages` a strmap to a string_list
 + merge-ort: store messages in a list, not in a single strbuf
 + merge-tree: provide easy access to `ls-files -u` style info
 + merge-tree: provide a list of which files have conflicts
 + merge-ort: remove command-line-centric submodule message from merge-ort
 + merge-ort: provide a merge_get_conflicted_files() helper function
 + merge-tree: support including merge messages in output
 + merge-ort: split out a separate display_update_messages() function
 + merge-tree: implement real merges
 + merge-tree: add option parsing and initial shell for real merge function
 + merge-tree: move logic for existing merge into new function
 + merge-tree: rename merge_trees() to trivial_merge_trees()

 A new command is introduced that takes two commits and computes a
 tree that would be contained in the resulting merge commit, if the
 histories leading to these two commits were to be merged, and is
 added as a new mode of "git merge-tree" subcommand.

 Will merge to 'master'.
 source: <pull.1122.v7.git.1655511660.gitgitgadget@gmail.com>


* dr/i18n-die-warn-error-usage (2022-06-21) 1 commit
  (merged to 'next' on 2022-07-08 at 6f639750a1)
 + i18n: mark message helpers prefix for translation

 Give _() markings to fatal/warning/usage: labels that are shown in
 front of these messages.

 Will merge to 'master'.
 source: <pull.1279.v2.git.git.1655819877758.gitgitgadget@gmail.com>


* ds/t5510-brokequote (2022-06-21) 1 commit
  (merged to 'next' on 2022-07-06 at 2776bed385)
 + t5510: replace 'origin' with URL more carefully

 Test fix.

 Will merge to 'master'.
 source: <484a330e-0902-6e1b-8189-63c72dcea494@github.com>


* en/merge-restore-to-pristine (2022-06-21) 6 commits
 - merge: do not exit restore_state() prematurely
 - merge: ensure we can actually restore pre-merge state
 - merge: make restore_state() restore staged state too
 - merge: fix save_state() to work when there are racy-dirty files
 - merge: remove unused variable
 - t6424: make sure a failed merge preserves local changes

 When "git merge" finds that it cannot perform a merge, it should
 restore the working tree to the state before the command was
 initiated, but in some corner cases it didn't.

 Needs review.
 source: <pull.1231.v2.git.1655621424.gitgitgadget@gmail.com>


* tk/apply-case-insensitive (2022-06-21) 3 commits
 - apply: support case-only renames in case-insensitive filesystems
 - reset: new failing test for reset of case-insensitive duplicate in index
 - t4141: test "git apply" with core.ignorecase

 "git apply" barfed on a patch that makes a case-only rename on a
 case-insensitive filesystem.

 Needs review.
 source: <pull.1257.v2.git.1655655027.gitgitgadget@gmail.com>


* zh/ls-files-format (2022-07-11) 1 commit
 - ls-files: introduce "--format" option

 "git ls-files" learns the "--format" option to tweak its output.

 Getting closer to finish?
 cf. <xmqqleszl2p0.fsf@gitster.g>
 source: <pull.1262.v6.git.1657558435532.gitgitgadget@gmail.com>


* ab/test-quoting-fix (2022-06-30) 3 commits
  (merged to 'next' on 2022-07-06 at 0aa78fd9db)
 + config tests: fix harmless but broken "rm -r" cleanup
 + test-lib.sh: fix prepend_var() quoting issue
 + tests: add missing double quotes to included library paths

 Fixes for tests when the source directory has unusual characters in
 its path, e.g. whitespaces, double-quotes, etc.

 Will merge to 'master'.
 source: <cover-v2-0.3-00000000000-20220630T101646Z-avarab@gmail.com>


* en/merge-dual-dir-renames-fix (2022-07-06) 5 commits
  (merged to 'next' on 2022-07-11 at 5f8dadf87b)
 + merge-ort: fix issue with dual rename and add/add conflict
 + merge-ort: shuffle the computation and cleanup of potential collisions
 + merge-ort: make a separate function for freeing struct collisions
 + merge-ort: small cleanups of check_for_directory_rename
 + t6423: add tests of dual directory rename plus add/add conflict

 Fixes a long-standing corner case bug around directory renames in
 the merge-ort strategy.

 Will merge to 'master'.
 source: <pull.1268.v4.git.1656984823.gitgitgadget@gmail.com>


* zk/push-use-bitmaps (2022-06-17) 1 commit
  (merged to 'next' on 2022-07-08 at 8aa1f94fad)
 + send-pack.c: add config push.useBitmaps

 "git push" sometimes perform poorly when reachability bitmaps are
 used, even in a repository where other operations are helped by
 bitmaps.  The push.useBitmaps configuration variable is introduced
 to allow disabling use of reachability bitmaps only for "git push".

 Will merge to 'master'.
 source: <pull.1263.v4.git.1655492779228.gitgitgadget@gmail.com>


* jk/remote-show-with-negative-refspecs (2022-06-17) 1 commit
  (merged to 'next' on 2022-07-08 at d4e49ad22a)
 + remote: handle negative refspecs in git remote show
 (this branch is used by jk/t5505-restructure.)

 "git remote show [-n] frotz" now pays attention to negative
 pathspecs.

 Will merge to 'master'.
 source: <20220617002036.1577-2-jacob.keller@gmail.com>


* js/commit-graph-parsing-without-repo-settings (2022-06-15) 1 commit
 - commit-graph: refactor to avoid prepare_repo_settings

 Expecting a reroll.
 source: <9b56496b0809cc8a25af877ea97042e2cb7f2af6.1655246092.git.steadmon@google.com>


* ro/mktree-allow-missing-fix (2022-06-21) 1 commit
  (merged to 'next' on 2022-07-08 at 599ed6fb84)
 + mktree: do not check type of remote objects

 "git mktree --missing" lazily fetched objects that are missing from
 the local object store, which was totally unnecessary for the purpose
 of creating the tree object(s) from its input.

 Will merge to 'master'.
 source: <748f39a9-65aa-2110-cf92-7ddf81b5f507@roku.com>


* jt/connected-show-missing-from-which-side (2022-06-10) 1 commit
 - fetch,fetch-pack: clarify connectivity check error

 We may find an object missing after a "git fetch" stores the
 objects it obtained from the other side, but it is not necessarily
 because the remote failed to send necessary objects.  Reword the
 messages in an attempt to help users explore other possibilities
 when they hit this error.

 Expecting a reroll.
 source: <20220610195247.1177549-1-jonathantanmy@google.com>


* ab/submodule-cleanup (2022-06-28) 12 commits
  (merged to 'next' on 2022-07-08 at 6f3886aa03)
 + git-sh-setup.sh: remove "say" function, change last users
 + git-submodule.sh: use "$quiet", not "$GIT_QUIET"
 + submodule--helper: eliminate internal "--update" option
 + submodule--helper: understand --checkout, --merge and --rebase synonyms
 + submodule--helper: report "submodule" as our name in some "-h" output
 + submodule--helper: rename "absorb-git-dirs" to "absorbgitdirs"
 + submodule update: remove "-v" option
 + submodule--helper: have --require-init imply --init
 + git-submodule.sh: remove unused top-level "--branch" argument
 + git-submodule.sh: make the "$cached" variable a boolean
 + git-submodule.sh: remove unused $prefix variable
 + git-submodule.sh: remove unused sanitize_submodule_env()
 (this branch is used by gc/submodule-use-super-prefix.)

 Further preparation to turn git-submodule.sh into a builtin.

 Will merge to 'master'.
 source: <cover-v4-00.12-00000000000-20220628T095914Z-avarab@gmail.com>


* jc/resolve-undo (2022-07-11) 2 commits
 - fsck: do not dereference NULL while checking resolve-undo data
  (merged to 'next' on 2022-06-15 at c195e5a2d9)
 + revision: mark blobs needed for resolve-undo as reachable

 The resolve-undo information in the index was not protected against
 GC, which has been corrected.

 Will merge to 'next'.
 source: <xmqqfskdieqz.fsf@gitster.g>


* ab/build-gitweb (2022-06-28) 8 commits
  (merged to 'next' on 2022-07-11 at 731e354ff0)
 + gitweb/Makefile: add a "NO_GITWEB" parameter
 + Makefile: build 'gitweb' in the default target
 + gitweb/Makefile: include in top-level Makefile
 + gitweb: remove "test" and "test-installed" targets
 + gitweb/Makefile: prepare to merge into top-level Makefile
 + gitweb/Makefile: clear up and de-duplicate the gitweb.{css,js} vars
 + gitweb/Makefile: add a $(GITWEB_ALL) variable
 + gitweb/Makefile: define all .PHONY prerequisites inline

 Teach "make all" to build gitweb as well.

 Will merge to 'master'.
 source: <cover-v3-0.8-00000000000-20220628T100936Z-avarab@gmail.com>


* ab/test-without-templates (2022-06-06) 7 commits
  (merged to 'next' on 2022-07-11 at afab6c1918)
 + tests: don't assume a .git/info for .git/info/sparse-checkout
 + tests: don't assume a .git/info for .git/info/exclude
 + tests: don't assume a .git/info for .git/info/refs
 + tests: don't assume a .git/info for .git/info/attributes
 + tests: don't assume a .git/info for .git/info/grafts
 + tests: don't depend on template-created .git/branches
 + t0008: don't rely on default ".git/info/exclude"

 Tweak tests so that they still work when the "git init" template
 did not create .git/info directory.

 Will merge to 'master'.
 source: <cover-v2-0.7-00000000000-20220603T110506Z-avarab@gmail.com>


* hx/unpack-streaming (2022-06-13) 6 commits
  (merged to 'next' on 2022-07-08 at 4eb375ec2f)
 + unpack-objects: use stream_loose_object() to unpack large objects
 + core doc: modernize core.bigFileThreshold documentation
 + object-file.c: add "stream_loose_object()" to handle large object
 + object-file.c: factor out deflate part of write_loose_object()
 + object-file.c: refactor write_loose_object() to several steps
 + unpack-objects: low memory footprint for get_data() in dry_run mode

 Allow large objects read from a packstream to be streamed into a
 loose object file straight, without having to keep it in-core as a
 whole.

 Will merge to 'master'.
 source: <cover.1654914555.git.chiyutianyi@gmail.com>


* tb/show-ref-count (2022-06-06) 2 commits
 - builtin/show-ref.c: limit output with `--count`
 - builtin/show-ref.c: rename `found_match` to `matches_nr`

 "git show-ref" learned to stop after emitting N refs with the new
 "--count=N" option.

 Expecting a reroll.
 cf. <xmqqczfl4ce1.fsf@gitster.g>
 source: <cover.1654552560.git.me@ttaylorr.com>


* ds/bundle-uri-more (2022-06-06) 6 commits
 - fetch: add 'refs/bundle/' to log.excludeDecoration
 - bundle-uri: add support for http(s):// and file://
 - fetch: add --bundle-uri option
 - bundle-uri: create basic file-copy logic
 - remote-curl: add 'get' capability
 - docs: document bundle URI standard

 The "bundle URI" topic.

 Needs review.
 source: <pull.1248.git.1654545325.gitgitgadget@gmail.com>


* js/bisect-in-c (2022-06-27) 16 commits
 - bisect: no longer try to clean up left-over `.git/head-name` files
 - bisect: remove Cogito-related code
 - Turn `git bisect` into a full built-in
 - bisect: move even the command-line parsing to `bisect--helper`
 - bisect: teach the `bisect--helper` command to show the correct usage strings
 - bisect--helper: return only correct exit codes in `cmd_*()`
 - bisect--helper: move the `BISECT_STATE` case to the end
 - bisect--helper: make `--bisect-state` optional
 - bisect--helper: align the sub-command order with git-bisect.sh
 - bisect--helper: using `--bisect-state` without an argument is a bug
 - bisect--helper: really retire `--bisect-autostart`
 - bisect--helper: really retire --bisect-next-check
 - bisect--helper: retire the --no-log option
 - bisect: avoid double-quoting when printing the failed command
 - bisect run: fix the error message
 - bisect: verify that a bogus option won't try to start a bisection

 Final bits of "git bisect.sh" have been rewritten in C.

 Expecting a (hopefully final) reroll.
 cf. <20627.86ilolhnnn.gmgdl@evledraar.gmail.com>
 source: <pull.1132.v4.git.1656354677.gitgitgadget@gmail.com>


* gc/bare-repo-discovery (2022-07-07) 5 commits
 - setup.c: create `discovery.bare`
 - safe.directory: use git_protected_config()
 - config: learn `git_protected_config()`
 - Documentation: define protected configuration
 - Documentation/git-config.txt: add SCOPES section

 Introduce a discovery.barerepository configuration variable that
 allows users to forbid discovery of bare repositories.

 Will merge to 'next'?
 source: <pull.1261.v7.git.git.1657234914.gitgitgadget@gmail.com>


* gg/worktree-from-the-above (2022-06-21) 2 commits
  (merged to 'next' on 2022-07-08 at fa0e71ba39)
 + dir: minor refactoring / clean-up
 + dir: traverse into repository

 In a non-bare repository, the behavior of Git when the
 core.worktree configuration variable points at a directory that has
 a repository as its subdirectory, regressed in Git 2.27 days.

 Will merge to 'master'.
 source: <20220616234433.225-1-gg.oss@outlook.com>
 source: <20220616231956.154-1-gg.oss@outlook.com>

--------------------------------------------------
[Discarded]

* ar/send-email-confirm-by-default (2022-04-22) 1 commit
 . send-email: always confirm by default

 "git send-email" is changed so that by default it asks for
 confirmation before sending each message out.

 Discarded.
 I wanted to like this, and had it in the version of Git I use
 myself for daily work, but the prompting turned out to be somewhat
 distracting.
 source: <20220422083629.1404989-1-hi@alyssa.is>

^ permalink raw reply	[relevance 3%]

* What's cooking in git.git (Jul 2022, #04; Wed, 13)
@ 2022-07-14  1:32  3% Junio C Hamano
  2022-07-17  3:46  0% ` en/merge-restore-to-pristine (Was: Re: What's cooking in git.git (Jul 2022, #04; Wed, 13)) Elijah Newren
  0 siblings, 1 reply; 200+ results
From: Junio C Hamano @ 2022-07-14  1:32 UTC (permalink / raw)
  To: git

Here are the topics that have been cooking in my tree.  Commits
prefixed with '+' are in 'next' (being in 'next' is a sign that a
topic is stable enough to be used and are candidate to be in a
future release).  Commits prefixed with '-' are only in 'seen',
and aren't considered "accepted" at all.

Copies of the source code to Git live in many repositories, and the
following is a list of the ones I push into or their mirrors.  Some
repositories have only a subset of branches.

With maint, master, next, seen, todo:

	git://git.kernel.org/pub/scm/git/git.git/
	git://repo.or.cz/alt-git.git/
	https://kernel.googlesource.com/pub/scm/git/git/
	https://github.com/git/git/
	https://gitlab.com/git-vcs/git/

With all the integration branches and topics broken out:

	https://github.com/gitster/git/

Even though the preformatted documentation in HTML and man format
are not sources, they are published in these repositories for
convenience (replace "htmldocs" with "manpages" for the manual
pages):

	git://git.kernel.org/pub/scm/git/git-htmldocs.git/
	https://github.com/gitster/git-htmldocs.git/

Release tarballs are available at:

	https://www.kernel.org/pub/software/scm/git/

--------------------------------------------------
[Graduated to 'master']

* ab/test-quoting-fix (2022-06-30) 3 commits
  (merged to 'next' on 2022-07-06 at 0aa78fd9db)
 + config tests: fix harmless but broken "rm -r" cleanup
 + test-lib.sh: fix prepend_var() quoting issue
 + tests: add missing double quotes to included library paths

 Fixes for tests when the source directory has unusual characters in
 its path, e.g. whitespaces, double-quotes, etc.
 source: <cover-v2-0.3-00000000000-20220630T101646Z-avarab@gmail.com>


* cl/grep-max-count (2022-06-22) 1 commit
  (merged to 'next' on 2022-07-08 at 646199ab4c)
 + grep: add --max-count command line option

 "git grep -m<max-hits>" is a way to limit the hits shown per file.
 source: <pull.1278.v4.git.git.1655927252899.gitgitgadget@gmail.com>


* dr/i18n-die-warn-error-usage (2022-06-21) 1 commit
  (merged to 'next' on 2022-07-08 at 6f639750a1)
 + i18n: mark message helpers prefix for translation

 Give _() markings to fatal/warning/usage: labels that are shown in
 front of these messages.
 source: <pull.1279.v2.git.git.1655819877758.gitgitgadget@gmail.com>


* ds/git-rebase-doc-markup (2022-06-30) 1 commit
  (merged to 'next' on 2022-07-08 at 24a0b80b71)
 + git-rebase.txt: use back-ticks consistently

 References to commands-to-be-typed-literally in "git rebase"
 documentation mark-up have been corrected.
 source: <pull.1270.v3.git.1656508868146.gitgitgadget@gmail.com>


* ds/t5510-brokequote (2022-06-21) 1 commit
  (merged to 'next' on 2022-07-06 at 2776bed385)
 + t5510: replace 'origin' with URL more carefully

 Test fix.
 source: <484a330e-0902-6e1b-8189-63c72dcea494@github.com>


* en/t6429-test-must-be-empty-fix (2022-06-30) 1 commit
  (merged to 'next' on 2022-07-06 at 627c51773c)
 + t6429: fix use of non-existent function

 A test fix.
 source: <pull.1276.git.1656652799863.gitgitgadget@gmail.com>


* jk/remote-show-with-negative-refspecs (2022-06-17) 1 commit
  (merged to 'next' on 2022-07-08 at d4e49ad22a)
 + remote: handle negative refspecs in git remote show
 (this branch is used by jk/t5505-restructure.)

 "git remote show [-n] frotz" now pays attention to negative
 pathspec.
 source: <20220617002036.1577-2-jacob.keller@gmail.com>


* ll/ls-files-tests-update (2022-07-06) 1 commit
  (merged to 'next' on 2022-07-06 at 444d1eabd0)
 + ls-files: update test style

 Test update.
 source: <pull.1269.v6.git.1656863349926.gitgitgadget@gmail.com>


* ro/mktree-allow-missing-fix (2022-06-21) 1 commit
  (merged to 'next' on 2022-07-08 at 599ed6fb84)
 + mktree: do not check type of remote objects

 "git mktree --missing" lazily fetched objects that are missing from
 the local object store, which was totally unnecessary for the purpose
 of creating the tree object(s) from its input.
 source: <748f39a9-65aa-2110-cf92-7ddf81b5f507@roku.com>


* tb/pack-objects-remove-pahole-comment (2022-06-28) 1 commit
  (merged to 'next' on 2022-07-06 at d7494fbdef)
 + pack-objects.h: remove outdated pahole results

 Comment fix.
 source: <1379af2e9d271b501ef3942398e7f159a9c77973.1656440978.git.me@ttaylorr.com>


* tk/rev-parse-doc-clarify-at-u (2022-06-23) 1 commit
  (merged to 'next' on 2022-07-08 at 1075452f32)
 + rev-parse: documentation adjustment - mention remote tracking with @{u}

 Doc update.
 source: <pull.1265.v2.git.1655960512385.gitgitgadget@gmail.com>


* zk/push-use-bitmaps (2022-06-17) 1 commit
  (merged to 'next' on 2022-07-08 at 8aa1f94fad)
 + send-pack.c: add config push.useBitmaps

 "git push" sometimes perform poorly when reachability bitmaps are
 used, even in a repository where other operations are helped by
 bitmaps.  The push.useBitmaps configuration variable is introduced
 to allow disabling use of reachability bitmaps only for "git push".
 source: <pull.1263.v4.git.1655492779228.gitgitgadget@gmail.com>

--------------------------------------------------
[New Topics]

* jk/diff-files-cleanup-fix (2022-07-12) 1 commit
  (merged to 'next' on 2022-07-13 at 9db5235d01)
 + diff-files: move misplaced cleanup label

 An earlier attempt to plug leaks placed a clean-up label to jump to
 at a bogus place, which as been corrected.

 Will merge to 'master'.
 source: <Ys0c0ePxPOqZ/5ck@coredump.intra.peff.net>


* cw/submodule-merge-messages (2022-07-13) 1 commit
 - submodule merge: update conflict error message

 Update the message given when "git merge" sees conflicts at a path
 with a submodule while merging a superproject.

 Needs review.
 source: <20220712231935.2979727-1-calvinwan@google.com>


* ds/doc-allowlist (2022-07-13) 3 commits
 - *: use allowlist and denylist
 - t/*: use allowlist
 - Documentation: use allowlist and denylist

 Mechanical replacement of s/whitelist/allowlist/.

 Expecting a reroll.
 source: <pull.1274.git.1657718450.gitgitgadget@gmail.com>


* js/vimdiff-quotepath-fix (2022-07-13) 2 commits
 - SQUASH???
 - mergetool(vimdiff): allow paths to contain spaces again

 Variable quoting fix in the vimdiff driver of "git mergetool"

 Expecting a reroll.
 cf. <xmqqa69cabhq.fsf@gitster.g>
 source: <pull.1287.git.1657726969774.gitgitgadget@gmail.com>


* mt/checkout-count-fix (2022-07-13) 3 commits
 - checkout: fix two bugs on the final count of updated entries
 - checkout: show bug about failed entries being included in final report
 - checkout: document bug where delayed checkout counts entries twice

 "git checkout" miscounted the paths it updated, which has been
 corrected.

 Will merge to 'next'?
 source: <cover.1657685948.git.matheus.bernardino@usp.br>


* tb/commit-graph-genv2-upgrade-fix (2022-07-13) 3 commits
 - commit-graph: fix corrupt upgrade from generation v1 to v2
 - commit-graph: introduce `repo_find_commit_pos_in_graph()`
 - t5318: demonstrate commit-graph generation v2 corruption

 There was a bug in the codepath to upgrade generation information
 in commit-graph from v1 to v2 format, which has been corrected.

 Needs review.
 source: <cover.1657667404.git.me@ttaylorr.com>


* js/safe-directory-plus (2022-07-13) 3 commits
 - mingw: be more informative when ownership check fails on FAT32
 - mingw: handle a file owned by the Administrators group correctly
 - Allow debugging unsafe directories' ownership

 Needs review.
 source: <pull.1286.git.1657700238.gitgitgadget@gmail.com>

--------------------------------------------------
[Stalled]

* ll/curl-accept-language (2022-07-11) 1 commit
  (merged to 'next' on 2022-07-13 at 076aba7421)
 + remote-curl: send Accept-Language header to server

 Earlier, HTTP transport clients learned to tell the server side
 what locale they are in by sending Accept-Language HTTP header, but
 this was done only for some requests but not others.

 Will merge to 'master'.
 source: <pull.1251.v4.git.1657519134336.gitgitgadget@gmail.com>


* bc/stash-export (2022-04-08) 4 commits
 - builtin/stash: provide a way to import stashes from a ref
 - builtin/stash: provide a way to export stashes to a ref
 - builtin/stash: factor out revision parsing into a function
 - object-name: make get_oid quietly return an error

 A mechanism to export and import stash entries to and from a normal
 commit to transfer it across repositories has been introduced.

 Expecting a reroll.
 cf. <YnL2d4Vr9Vr7W4Hj@camp.crustytoothpaste.net>
 source: <20220407215352.3491567-1-sandals@crustytoothpaste.net>


* cw/remote-object-info (2022-05-06) 11 commits
 - SQUASH??? coccicheck
 - SQUASH??? ensure that coccicheck is happy
 - SQUASH??? compilation fix
 - cat-file: add --batch-command remote-object-info command
 - cat-file: move parse_cmd and DEFAULT_FORMAT up
 - transport: add object-info fallback to fetch
 - transport: add client side capability to request object-info
 - object-info: send attribute packet regardless of object ids
 - object-store: add function to free object_info contents
 - fetch-pack: move fetch default settings
 - fetch-pack: refactor packet writing

 A client component to talk with the object-info endpoint.

 Expecting a reroll.
 source: <20220502170904.2770649-1-calvinwan@google.com>

--------------------------------------------------
[Cooking]

* po/doc-add-renormalize (2022-07-09) 1 commit
 - doc add: renormalize is not idempotent for CRCRLF

 Documentation for "git add --renormalize" has been improved.

 Expecting a reroll.
 cf. <dfe0c1ab-33f8-f13e-71ce-1829bb0d2d7f@iee.email>
 source: <d3b8ed97a105ea1d7e656c964b7eee378e11ede6.1657385781.git.gitgitgadget@gmail.com>


* po/glossary-around-traversal (2022-07-09) 3 commits
 - glossary: add reachability bitmap description
 - glossary: add commit graph description
 - glossary: add Object DataBase (ODB) abbreviation

 The glossary entries for "commit-graph file" and "reachability
 bitmap" have been added.

 Expecting a reroll.
 cf. <dfe0c1ab-33f8-f13e-71ce-1829bb0d2d7f@iee.email>
 source: <pull.1282.git.1657385781.gitgitgadget@gmail.com>


* rs/cocci-array-copy (2022-07-10) 1 commit
  (merged to 'next' on 2022-07-13 at f21dec0f71)
 + cocci: avoid normalization rules for memcpy

 A coccinelle rule (in contrib/) to encourage use of COPY_ARRAY
 macro has been improved.

 Will merge to 'master'.
 source: <ded153d4-4aea-d4da-11cb-ec66d181e4c9@web.de>


* sg/multi-pack-index-parse-options-fix (2022-07-10) 1 commit
  (merged to 'next' on 2022-07-11 at 1e14685680)
 + multi-pack-index: simplify handling of unknown --options

 The way "git multi-pack" uses parse-options API has been improved.

 Will merge to 'master'.
 source: <20220710151645.GA2038@szeder.dev>


* jk/ref-filter-discard-commit-buffer (2022-07-11) 1 commit
  (merged to 'next' on 2022-07-13 at d1521724db)
 + ref-filter: disable save_commit_buffer while traversing

 Will merge to 'master'.
 source: <Ysw4JtoHW1vWmqhz@coredump.intra.peff.net>


* ab/cocci-unused (2022-07-06) 6 commits
  (merged to 'next' on 2022-07-11 at 7fa60d2a5b)
 + cocci: generalize "unused" rule to cover more than "strbuf"
 + cocci: add and apply a rule to find "unused" strbufs
 + cocci: have "coccicheck{,-pending}" depend on "coccicheck-test"
 + cocci: add a "coccicheck-test" target and test *.cocci rules
 + Makefile & .gitignore: ignore & clean "git.res", not "*.res"
 + Makefile: remove mandatory "spatch" arguments from SPATCH_FLAGS

 Add Coccinelle rules to detect the pattern of initializing and then
 finalizing a structure without using it in between at all, which
 happens after code restructuring and the compilers fail to
 recognize as an unused varilable.

 Will merge to 'master'.
 source: <cover-v4-0.6-00000000000-20220705T134033Z-avarab@gmail.com>


* jk/clone-unborn-confusion (2022-07-11) 4 commits
  (merged to 'next' on 2022-07-13 at a7ae8cb4b5)
 + clone: move unborn head creation to update_head()
 + clone: use remote branch if it matches default HEAD
 + clone: propagate empty remote HEAD even with other branches
 + clone: drop extra newline from warning message

 "git clone" from a repository with some ref whose HEAD is unborn
 did not set the HEAD in the resulting repository correctly, which
 has been corrected.

 Will merge to 'master'.
 source: <YsdyLS4UFzj0j/wB@coredump.intra.peff.net>


* ac/bitmap-lookup-table (2022-07-06) 6 commits
 - p5310-pack-bitmaps.sh: remove pack.writeReverseIndex
 - bitmap-lookup-table: add performance tests for lookup table
 - pack-bitmap: prepare to read lookup table extension
 - pack-bitmap-write: learn pack.writeBitmapLookupTable and add tests
 - pack-bitmap-write.c: write lookup table extension
 - Documentation/technical: describe bitmap lookup table extension

 The pack bitmap file gained a bitmap-lookup table to speed up
 locating the necessary bitmap for a given commit.

 Waiting for a more thorough review.
 cf. <Ys4DjW9JjQFx5Bhb@nand.local>
 source: <pull.1266.v3.git.1656924376.gitgitgadget@gmail.com>


* bc/nettle-sha256 (2022-07-10) 1 commit
  (merged to 'next' on 2022-07-11 at cf9595d8ca)
 + sha256: add support for Nettle

 Support for libnettle as SHA256 implementation has been added.

 Will merge to 'master'.
 source: <20220710132907.1499365-1-sandals@crustytoothpaste.net>


* jc/builtin-mv-move-array (2022-07-09) 1 commit
  (merged to 'next' on 2022-07-09 at 0d3b3f62e5)
 + builtin/mv.c: use the MOVE_ARRAY() macro instead of memmove()

 Apply Coccinelle rule to turn raw memmove() into MOVE_ARRAY() cpp
 macro, which would improve maintainability and readability.

 Will merge to 'master'.
 source: <xmqq4jzpu4xp.fsf_-_@gitster.g>


* jd/gpg-interface-trust-level-string (2022-07-10) 1 commit
  (merged to 'next' on 2022-07-11 at 7b3cca73a8)
 + gpg-interface: add function for converting trust level to string

 The code to convert between GPG trust level strings and internal
 constants we use to represent them have been cleaned up.

 Will merge to 'master'.
 source: <pull.1281.v4.git.1657515650587.gitgitgadget@gmail.com>


* kk/p4-client-name-encoding-fix (2022-07-08) 1 commit
  (merged to 'next' on 2022-07-11 at 9c18616f76)
 + git-p4: fix bug with encoding of p4 client name

 "git p4" did not handle non-ASCII client name well, which has been
 corrected.

 Will merge to 'master'.
 source: <pull.1285.git.git.1657267260405.gitgitgadget@gmail.com>


* sa/cat-file-mailmap (2022-07-13) 4 commits
 - cat-file: add mailmap support
 - ident: rename commit_rewrite_person() to apply_mailmap_to_header()
 - ident: move commit_rewrite_person() to ident.c
 - revision: improve commit_rewrite_person()

 "git cat-file" learned an option to use the mailmap when showing
 commit and tag objects.

 Will merge to 'next'?
 source: <20220712160634.213956-1-siddharthasthana31@gmail.com>


* fr/vimdiff-layout-fix (2022-07-08) 1 commit
  (merged to 'next' on 2022-07-09 at d8461bd236)
 + vimdiff: make layout engine more robust against user vim settings

 Recent update to vimdiff layout code has been made more robust
 against different end-user vim settings.

 Will merge to 'master'.
 source: <20220708181024.45839-1-greenfoo@u92.eu>


* ds/rebase-update-ref (2022-07-12) 13 commits
 - sequencer: notify user of --update-refs activity
 - sequencer: ignore HEAD ref under --update-refs
 - rebase: add rebase.updateRefs config option
 - sequencer: rewrite update-refs as user edits todo list
 - rebase: update refs from 'update-ref' commands
 - rebase: add --update-refs option
 - sequencer: add update-ref command
 - sequencer: define array with enum values
 - rebase-interactive: update 'merge' description
 - branch: consider refs under 'update-refs'
 - t2407: test branches currently using apply backend
 - t2407: test bisect and rebase as black-boxes
 - Merge branch 'ds/branch-checked-out' into ds/rebase-update-ref

 "git rebase -i" learns to update branches whose tip appear in the
 rebased range.

 Expecting a reroll.
 cf. <15631ea2-6722-fd24-c8a6-0cee638b0602@github.com>
 source: <pull.1247.v4.git.1657631225.gitgitgadget@gmail.com>


* ab/leakfix (2022-07-01) 11 commits
  (merged to 'next' on 2022-07-11 at 0b107fffcf)
 + pull: fix a "struct oid_array" memory leak
 + cat-file: fix a common "struct object_context" memory leak
 + gc: fix a memory leak
 + checkout: avoid "struct unpack_trees_options" leak
 + merge-file: fix memory leaks on error path
 + merge-file: refactor for subsequent memory leak fix
 + cat-file: fix a memory leak in --batch-command mode
 + revert: free "struct replay_opts" members
 + submodule.c: free() memory from xgetcwd()
 + clone: fix memory leak in wanted_peer_refs()
 + check-ref-format: fix trivial memory leak

 Plug various memory leaks.

 Will merge to 'master'.
 source: <cover-v2-00.11-00000000000-20220701T104017Z-avarab@gmail.com>


* ab/test-tool-leakfix (2022-07-01) 9 commits
  (merged to 'next' on 2022-07-11 at db7a724694)
 + test-tool delta: fix a memory leak
 + test-tool ref-store: fix a memory leak
 + test-tool bloom: fix memory leaks
 + test-tool json-writer: fix memory leaks
 + test-tool regex: call regfree(), fix memory leaks
 + test-tool urlmatch-normalization: fix a memory leak
 + test-tool {dump,scrap}-cache-tree: fix memory leaks
 + test-tool path-utils: fix a memory leak
 + test-tool test-hash: fix a memory leak

 Plug various memory leaks in test-tool commands.

 Will merge to 'master'.
 source: <cover-v2-0.9-00000000000-20220701T103503Z-avarab@gmail.com>


* gc/submodule-use-super-prefix (2022-06-30) 8 commits
  (merged to 'next' on 2022-07-11 at 0d9cf172f9)
 + submodule--helper: remove display path helper
 + submodule--helper update: use --super-prefix
 + submodule--helper: remove unused SUPPORT_SUPER_PREFIX flags
 + submodule--helper: use correct display path helper
 + submodule--helper: don't recreate recursive prefix
 + submodule--helper update: use display path helper
 + submodule--helper tests: add missing "display path" coverage
 + Merge branch 'ab/submodule-cleanup' into gc/submodule-use-super-prefix
 (this branch uses ab/submodule-cleanup.)

 Another step to rewrite more parts of "git submodule" in C.

 Will merge to 'master'.
 source: <20220701021157.88858-1-chooglen@google.com>


* hx/lookup-commit-in-graph-fix (2022-07-12) 2 commits
  (merged to 'next' on 2022-07-13 at 4489696814)
 + t5330: remove run_with_limited_processses()
  (merged to 'next' on 2022-07-08 at cef32db0b6)
 + commit-graph.c: no lazy fetch in lookup_commit_in_graph()

 A corner case bug where lazily fetching objects from a promisor
 remote resulted in infinite recursion has been corrected.

 Will merge to 'master'.
 source: <cover.1656593279.git.hanxin.hx@bytedance.com>


* pw/xdiff-alloc (2022-07-08) 4 commits
 - xdiff: introduce XDL_ALLOC_GROW()
 - xdiff: introduce XDL_CALLOC_ARRAY()
 - xdiff: introduce xdl_calloc
 - xdiff: introduce XDL_ALLOC_ARRAY()

 Add a level of redirection to array allocation API in xdiff part,
 to make it easier to share with the libgit2 project.

 Will merge to 'next'?
 source: <pull.1272.v2.git.1657297519.gitgitgadget@gmail.com>


* sy/mv-out-of-cone (2022-07-01) 8 commits
  (merged to 'next' on 2022-07-08 at 654970fdb7)
 + mv: add check_dir_in_index() and solve general dir check issue
 + mv: use flags mode for update_mode
 + mv: check if <destination> exists in index to handle overwriting
 + mv: check if out-of-cone file exists in index with SKIP_WORKTREE bit
 + mv: decouple if/else-if checks using goto
 + mv: update sparsity after moving from out-of-cone to in-cone
 + t1092: mv directory from out-of-cone to in-cone
 + t7002: add tests for moving out-of-cone file/directory

 "git mv A B" in a sparsely populated working tree can be asked to
 move a path between directories that are "in cone" (i.e. expected
 to be materialized in the working tree) and "out of cone"
 (i.e. expected to be hidden).  The handling of such cases has been
 improved.

 Will merge to 'master'.
 source: <20220630023737.473690-1-shaoxuan.yuan02@gmail.com>


* ab/squelch-empty-fsync-traces (2022-06-30) 1 commit
 . trace2: don't include "fsync" events in all trace2 logs

 Omit fsync-related trace2 entries when their values are all zero.

 Breaks tests in hx/unpack-streaming with an interesting interaction.
 source: <patch-v2-1.1-a1fc37de947-20220630T084607Z-avarab@gmail.com>


* en/merge-tree (2022-06-22) 17 commits
  (merged to 'next' on 2022-07-08 at a29b4896ab)
 + git-merge-tree.txt: add a section on potentional usage mistakes
 + merge-tree: add a --allow-unrelated-histories flag
 + merge-tree: allow `ls-files -u` style info to be NUL terminated
 + merge-ort: optionally produce machine-readable output
 + merge-ort: store more specific conflict information
 + merge-ort: make `path_messages` a strmap to a string_list
 + merge-ort: store messages in a list, not in a single strbuf
 + merge-tree: provide easy access to `ls-files -u` style info
 + merge-tree: provide a list of which files have conflicts
 + merge-ort: remove command-line-centric submodule message from merge-ort
 + merge-ort: provide a merge_get_conflicted_files() helper function
 + merge-tree: support including merge messages in output
 + merge-ort: split out a separate display_update_messages() function
 + merge-tree: implement real merges
 + merge-tree: add option parsing and initial shell for real merge function
 + merge-tree: move logic for existing merge into new function
 + merge-tree: rename merge_trees() to trivial_merge_trees()

 A new command is introduced that takes two commits and computes a
 tree that would be contained in the resulting merge commit, if the
 histories leading to these two commits were to be merged, and is
 added as a new mode of "git merge-tree" subcommand.

 Will merge to 'master'.
 source: <pull.1122.v7.git.1655511660.gitgitgadget@gmail.com>


* en/merge-restore-to-pristine (2022-06-21) 6 commits
 - merge: do not exit restore_state() prematurely
 - merge: ensure we can actually restore pre-merge state
 - merge: make restore_state() restore staged state too
 - merge: fix save_state() to work when there are racy-dirty files
 - merge: remove unused variable
 - t6424: make sure a failed merge preserves local changes

 When "git merge" finds that it cannot perform a merge, it should
 restore the working tree to the state before the command was
 initiated, but in some corner cases it didn't.

 Needs review.
 source: <pull.1231.v2.git.1655621424.gitgitgadget@gmail.com>


* tk/apply-case-insensitive (2022-06-21) 3 commits
 - apply: support case-only renames in case-insensitive filesystems
 - reset: new failing test for reset of case-insensitive duplicate in index
 - t4141: test "git apply" with core.ignorecase

 "git apply" barfed on a patch that makes a case-only rename on a
 case-insensitive filesystem.

 Needs review.
 source: <pull.1257.v2.git.1655655027.gitgitgadget@gmail.com>


* zh/ls-files-format (2022-07-13) 1 commit
 - ls-files: introduce "--format" option

 "git ls-files" learns the "--format" option to tweak its output.

 Will merge to 'next'?
 source: <pull.1262.v7.git.1657692472994.gitgitgadget@gmail.com>


* en/merge-dual-dir-renames-fix (2022-07-06) 5 commits
  (merged to 'next' on 2022-07-11 at 5f8dadf87b)
 + merge-ort: fix issue with dual rename and add/add conflict
 + merge-ort: shuffle the computation and cleanup of potential collisions
 + merge-ort: make a separate function for freeing struct collisions
 + merge-ort: small cleanups of check_for_directory_rename
 + t6423: add tests of dual directory rename plus add/add conflict

 Fixes a long-standing corner case bug around directory renames in
 the merge-ort strategy.

 Will merge to 'master'.
 source: <pull.1268.v4.git.1656984823.gitgitgadget@gmail.com>


* js/commit-graph-parsing-without-repo-settings (2022-06-15) 1 commit
 - commit-graph: refactor to avoid prepare_repo_settings

 Expecting a reroll.
 source: <9b56496b0809cc8a25af877ea97042e2cb7f2af6.1655246092.git.steadmon@google.com>


* jt/connected-show-missing-from-which-side (2022-06-10) 1 commit
 - fetch,fetch-pack: clarify connectivity check error

 We may find an object missing after a "git fetch" stores the
 objects it obtained from the other side, but it is not necessarily
 because the remote failed to send necessary objects.  Reword the
 messages in an attempt to help users explore other possibilities
 when they hit this error.

 Expecting a reroll.
 source: <20220610195247.1177549-1-jonathantanmy@google.com>


* ab/submodule-cleanup (2022-06-28) 12 commits
  (merged to 'next' on 2022-07-08 at 6f3886aa03)
 + git-sh-setup.sh: remove "say" function, change last users
 + git-submodule.sh: use "$quiet", not "$GIT_QUIET"
 + submodule--helper: eliminate internal "--update" option
 + submodule--helper: understand --checkout, --merge and --rebase synonyms
 + submodule--helper: report "submodule" as our name in some "-h" output
 + submodule--helper: rename "absorb-git-dirs" to "absorbgitdirs"
 + submodule update: remove "-v" option
 + submodule--helper: have --require-init imply --init
 + git-submodule.sh: remove unused top-level "--branch" argument
 + git-submodule.sh: make the "$cached" variable a boolean
 + git-submodule.sh: remove unused $prefix variable
 + git-submodule.sh: remove unused sanitize_submodule_env()
 (this branch is used by gc/submodule-use-super-prefix.)

 Further preparation to turn git-submodule.sh into a builtin.

 Will merge to 'master'.
 source: <cover-v4-00.12-00000000000-20220628T095914Z-avarab@gmail.com>


* jc/resolve-undo (2022-07-11) 2 commits
  (merged to 'next' on 2022-07-13 at b9ef9482e8)
 + fsck: do not dereference NULL while checking resolve-undo data
  (merged to 'next' on 2022-06-15 at c195e5a2d9)
 + revision: mark blobs needed for resolve-undo as reachable

 The resolve-undo information in the index was not protected against
 GC, which has been corrected.

 Will merge to 'master'.
 source: <xmqq35f7kzad.fsf@gitster.g>


* ab/build-gitweb (2022-06-28) 8 commits
  (merged to 'next' on 2022-07-11 at 731e354ff0)
 + gitweb/Makefile: add a "NO_GITWEB" parameter
 + Makefile: build 'gitweb' in the default target
 + gitweb/Makefile: include in top-level Makefile
 + gitweb: remove "test" and "test-installed" targets
 + gitweb/Makefile: prepare to merge into top-level Makefile
 + gitweb/Makefile: clear up and de-duplicate the gitweb.{css,js} vars
 + gitweb/Makefile: add a $(GITWEB_ALL) variable
 + gitweb/Makefile: define all .PHONY prerequisites inline

 Teach "make all" to build gitweb as well.

 Will merge to 'master'.
 source: <cover-v3-0.8-00000000000-20220628T100936Z-avarab@gmail.com>


* ab/test-without-templates (2022-06-06) 7 commits
  (merged to 'next' on 2022-07-11 at afab6c1918)
 + tests: don't assume a .git/info for .git/info/sparse-checkout
 + tests: don't assume a .git/info for .git/info/exclude
 + tests: don't assume a .git/info for .git/info/refs
 + tests: don't assume a .git/info for .git/info/attributes
 + tests: don't assume a .git/info for .git/info/grafts
 + tests: don't depend on template-created .git/branches
 + t0008: don't rely on default ".git/info/exclude"

 Tweak tests so that they still work when the "git init" template
 did not create .git/info directory.

 Will merge to 'master'.
 source: <cover-v2-0.7-00000000000-20220603T110506Z-avarab@gmail.com>


* hx/unpack-streaming (2022-06-13) 6 commits
  (merged to 'next' on 2022-07-08 at 4eb375ec2f)
 + unpack-objects: use stream_loose_object() to unpack large objects
 + core doc: modernize core.bigFileThreshold documentation
 + object-file.c: add "stream_loose_object()" to handle large object
 + object-file.c: factor out deflate part of write_loose_object()
 + object-file.c: refactor write_loose_object() to several steps
 + unpack-objects: low memory footprint for get_data() in dry_run mode

 Allow large objects read from a packstream to be streamed into a
 loose object file straight, without having to keep it in-core as a
 whole.

 Will merge to 'master'.
 source: <cover.1654914555.git.chiyutianyi@gmail.com>


* tb/show-ref-count (2022-06-06) 2 commits
 - builtin/show-ref.c: limit output with `--count`
 - builtin/show-ref.c: rename `found_match` to `matches_nr`

 "git show-ref" learned to stop after emitting N refs with the new
 "--count=N" option.

 Expecting a reroll.
 cf. <xmqqczfl4ce1.fsf@gitster.g>
 source: <cover.1654552560.git.me@ttaylorr.com>


* ds/bundle-uri-more (2022-06-06) 6 commits
 - fetch: add 'refs/bundle/' to log.excludeDecoration
 - bundle-uri: add support for http(s):// and file://
 - fetch: add --bundle-uri option
 - bundle-uri: create basic file-copy logic
 - remote-curl: add 'get' capability
 - docs: document bundle URI standard

 The "bundle URI" topic.

 Needs review.
 source: <pull.1248.git.1654545325.gitgitgadget@gmail.com>


* js/bisect-in-c (2022-06-27) 16 commits
 - bisect: no longer try to clean up left-over `.git/head-name` files
 - bisect: remove Cogito-related code
 - Turn `git bisect` into a full built-in
 - bisect: move even the command-line parsing to `bisect--helper`
 - bisect: teach the `bisect--helper` command to show the correct usage strings
 - bisect--helper: return only correct exit codes in `cmd_*()`
 - bisect--helper: move the `BISECT_STATE` case to the end
 - bisect--helper: make `--bisect-state` optional
 - bisect--helper: align the sub-command order with git-bisect.sh
 - bisect--helper: using `--bisect-state` without an argument is a bug
 - bisect--helper: really retire `--bisect-autostart`
 - bisect--helper: really retire --bisect-next-check
 - bisect--helper: retire the --no-log option
 - bisect: avoid double-quoting when printing the failed command
 - bisect run: fix the error message
 - bisect: verify that a bogus option won't try to start a bisection

 Final bits of "git bisect.sh" have been rewritten in C.

 Expecting a (hopefully final) reroll.
 cf. <20627.86ilolhnnn.gmgdl@evledraar.gmail.com>
 source: <pull.1132.v4.git.1656354677.gitgitgadget@gmail.com>


* gc/bare-repo-discovery (2022-07-07) 5 commits
 - setup.c: create `discovery.bare`
 - safe.directory: use git_protected_config()
 - config: learn `git_protected_config()`
 - Documentation: define protected configuration
 - Documentation/git-config.txt: add SCOPES section

 Introduce a discovery.barerepository configuration variable that
 allows users to forbid discovery of bare repositories.

 Expecting a reroll.
 cf. <kl6lpmia55ys.fsf@chooglen-macbookpro.roam.corp.google.com>
 source: <pull.1261.v7.git.git.1657234914.gitgitgadget@gmail.com>


* gg/worktree-from-the-above (2022-06-21) 2 commits
  (merged to 'next' on 2022-07-08 at fa0e71ba39)
 + dir: minor refactoring / clean-up
 + dir: traverse into repository

 In a non-bare repository, the behavior of Git when the
 core.worktree configuration variable points at a directory that has
 a repository as its subdirectory, regressed in Git 2.27 days.

 Will merge to 'master'.
 source: <20220616234433.225-1-gg.oss@outlook.com>
 source: <20220616231956.154-1-gg.oss@outlook.com>

--------------------------------------------------
[Discarded]

* ar/send-email-confirm-by-default (2022-04-22) 1 commit
 . send-email: always confirm by default

 "git send-email" is changed so that by default it asks for
 confirmation before sending each message out.

 Discarded.
 I wanted to like this, and had it in the version of Git I use
 myself for daily work, but the prompting turned out to be somewhat
 distracting.
 source: <20220422083629.1404989-1-hi@alyssa.is>

^ permalink raw reply	[relevance 3%]

* en/merge-restore-to-pristine (Was: Re: What's cooking in git.git (Jul 2022, #04; Wed, 13))
  2022-07-14  1:32  3% What's cooking in git.git (Jul 2022, #04; Wed, 13) Junio C Hamano
@ 2022-07-17  3:46  0% ` Elijah Newren
  2022-07-17 16:58  0%   ` ZheNing Hu
  0 siblings, 1 reply; 200+ results
From: Elijah Newren @ 2022-07-17  3:46 UTC (permalink / raw)
  To: ZheNing Hu; +Cc: Git Mailing List, Junio C Hamano

Hi ZheNing,

On Wed, Jul 13, 2022 at 7:36 PM Junio C Hamano <gitster@pobox.com> wrote:
>
> * en/merge-restore-to-pristine (2022-06-21) 6 commits
>  - merge: do not exit restore_state() prematurely
>  - merge: ensure we can actually restore pre-merge state
>  - merge: make restore_state() restore staged state too
>  - merge: fix save_state() to work when there are racy-dirty files
>  - merge: remove unused variable
>  - t6424: make sure a failed merge preserves local changes
>
>  When "git merge" finds that it cannot perform a merge, it should
>  restore the working tree to the state before the command was
>  initiated, but in some corner cases it didn't.
>
>  Needs review.
>  source: <pull.1231.v2.git.1655621424.gitgitgadget@gmail.com>

Looks like other reviewers aren't stepping forward (this has been in
"Needs review" for the last 6 "What's cooking" reports), which may
suggest others aren't as interested in this fix.  Since this was for
an issue you reported, and which you even volunteered to help
shepherd[1], perhaps you could step forward as a reviewer even if
you're not that familiar with the code?  Some things to look at and
report on:

  * Does it fix the issue?  (You reported that v1 did, again at [1],
but perhaps you could retest for v2?)
  * Does it appear I've addressed the issues Junio brought up about v1?
  * Even if you can't analyze the changes deeply, you can respond to
my patches with a "walk through" where you try to explain what the
different hunks of the patches are doing in your own words.  Even
folks unfamiliar with code areas can sometimes catch simple mistakes
that way, and even if you catch nothing, it means there's another
person more familiar with that code area.

I've had a little more time lately, so if you or someone does catch
something in the review, I can try to update the series.

[1] https://lore.kernel.org/git/CAOLTT8RpGGioOyaMw5tkeWXmHpOaBW9UH8JghUvBRQ50ZcDdYQ@mail.gmail.com/

^ permalink raw reply	[relevance 0%]

* Re: [PATCH v2 3/6] merge: fix save_state() to work when there are racy-dirty files
  2022-06-19  6:50  2%   ` [PATCH v2 3/6] merge: fix save_state() to work when there are racy-dirty files Elijah Newren via GitGitGadget
@ 2022-07-17 16:28  2%     ` ZheNing Hu
  2022-07-19 22:49  2%       ` Junio C Hamano
  2022-07-19 22:43  2%     ` Junio C Hamano
  1 sibling, 1 reply; 200+ results
From: ZheNing Hu @ 2022-07-17 16:28 UTC (permalink / raw)
  To: Elijah Newren via GitGitGadget; +Cc: Git List, Elijah Newren

Elijah Newren via GitGitGadget <gitgitgadget@gmail.com> 于2022年6月19日周日 14:50写道:
>
> From: Elijah Newren <newren@gmail.com>
>
> When there are racy-dirty files, but no files are modified,
> `git stash create` exits with unsuccessful status.  This causes merge
> to fail.  Refresh the index first to avoid this problem.
>
> Signed-off-by: Elijah Newren <newren@gmail.com>
> ---
>  builtin/merge.c | 8 ++++++++
>  1 file changed, 8 insertions(+)
>
> diff --git a/builtin/merge.c b/builtin/merge.c
> index 00de224a2da..8ce4336dd3f 100644
> --- a/builtin/merge.c
> +++ b/builtin/merge.c
> @@ -313,8 +313,16 @@ static int save_state(struct object_id *stash)
>         int len;
>         struct child_process cp = CHILD_PROCESS_INIT;
>         struct strbuf buffer = STRBUF_INIT;
> +       struct lock_file lock_file = LOCK_INIT;
> +       int fd;
>         int rc = -1;
>
> +       fd = repo_hold_locked_index(the_repository, &lock_file, 0);
> +       refresh_cache(REFRESH_QUIET);
> +       if (0 <= fd)
> +               repo_update_index_if_able(the_repository, &lock_file);
> +       rollback_lock_file(&lock_file);
> +
>         strvec_pushl(&cp.args, "stash", "create", NULL);
>         cp.out = -1;
>         cp.git_cmd = 1;
> --
> gitgitgadget
>

I just want to show what sence will meet this errors:

1. touch file
2. git add file
3. git stash push (user may do it before git merge)
4. touch file (update file but not update its content)
5. git merge (call git stash create and return 1)

So I have knew about what's the meaning of this patch:

If user do the git stash manually and update file timestamp
before git merge, it may make next git stash failed. And
refresh index can make index entry sync with the work tree
file status.

Thanks.

ZheNing Hu

^ permalink raw reply	[relevance 2%]

* Re: en/merge-restore-to-pristine (Was: Re: What's cooking in git.git (Jul 2022, #04; Wed, 13))
  2022-07-17  3:46  0% ` en/merge-restore-to-pristine (Was: Re: What's cooking in git.git (Jul 2022, #04; Wed, 13)) Elijah Newren
@ 2022-07-17 16:58  0%   ` ZheNing Hu
  0 siblings, 0 replies; 200+ results
From: ZheNing Hu @ 2022-07-17 16:58 UTC (permalink / raw)
  To: Elijah Newren; +Cc: Git Mailing List, Junio C Hamano

Elijah Newren <newren@gmail.com> 于2022年7月17日周日 11:46写道:
>
> Hi ZheNing,
>
> On Wed, Jul 13, 2022 at 7:36 PM Junio C Hamano <gitster@pobox.com> wrote:
> >
> > * en/merge-restore-to-pristine (2022-06-21) 6 commits
> >  - merge: do not exit restore_state() prematurely
> >  - merge: ensure we can actually restore pre-merge state
> >  - merge: make restore_state() restore staged state too
> >  - merge: fix save_state() to work when there are racy-dirty files
> >  - merge: remove unused variable
> >  - t6424: make sure a failed merge preserves local changes
> >
> >  When "git merge" finds that it cannot perform a merge, it should
> >  restore the working tree to the state before the command was
> >  initiated, but in some corner cases it didn't.
> >
> >  Needs review.
> >  source: <pull.1231.v2.git.1655621424.gitgitgadget@gmail.com>
>
> Looks like other reviewers aren't stepping forward (this has been in
> "Needs review" for the last 6 "What's cooking" reports), which may
> suggest others aren't as interested in this fix.  Since this was for
> an issue you reported, and which you even volunteered to help
> shepherd[1], perhaps you could step forward as a reviewer even if
> you're not that familiar with the code?  Some things to look at and
> report on:
>

Sorry that I missed patch update before. And this is my first time
as a reviewer. I may leak some experience :)

>   * Does it fix the issue?  (You reported that v1 did, again at [1],
> but perhaps you could retest for v2?)

Yes, I have checked the test, it is good enough to solve my problem.

>   * Does it appear I've addressed the issues Junio brought up about v1?

Yes, Junio said restore_state() will not be called correctly because
we are using
only one merge strategy, which has been solved by the patch: "merge:
ensure we can
actually restore pre-merge state".

>   * Even if you can't analyze the changes deeply, you can respond to
> my patches with a "walk through" where you try to explain what the
> different hunks of the patches are doing in your own words.  Even
> folks unfamiliar with code areas can sometimes catch simple mistakes
> that way, and even if you catch nothing, it means there's another
> person more familiar with that code area.
>

I have checked(walk through) them carefully. Look at them :)

> I've had a little more time lately, so if you or someone does catch
> something in the review, I can try to update the series.
>
> [1] https://lore.kernel.org/git/CAOLTT8RpGGioOyaMw5tkeWXmHpOaBW9UH8JghUvBRQ50ZcDdYQ@mail.gmail.com/

Thanks

ZheNing Hu

^ permalink raw reply	[relevance 0%]

* What's cooking in git.git (Jul 2022, #05; Sun, 17)
@ 2022-07-18  3:14  3% Junio C Hamano
  0 siblings, 0 replies; 200+ results
From: Junio C Hamano @ 2022-07-18  3:14 UTC (permalink / raw)
  To: git

Here are the topics that have been cooking in my tree.  Commits
prefixed with '+' are in 'next' (being in 'next' is a sign that a
topic is stable enough to be used and are candidate to be in a
future release).  Commits prefixed with '-' are only in 'seen',
and aren't considered "accepted" at all.

Copies of the source code to Git live in many repositories, and the
following is a list of the ones I push into or their mirrors.  Some
repositories have only a subset of branches.

With maint, master, next, seen, todo:

	git://git.kernel.org/pub/scm/git/git.git/
	git://repo.or.cz/alt-git.git/
	https://kernel.googlesource.com/pub/scm/git/git/
	https://github.com/git/git/
	https://gitlab.com/git-vcs/git/

With all the integration branches and topics broken out:

	https://github.com/gitster/git/

Even though the preformatted documentation in HTML and man format
are not sources, they are published in these repositories for
convenience (replace "htmldocs" with "manpages" for the manual
pages):

	git://git.kernel.org/pub/scm/git/git-htmldocs.git/
	https://github.com/gitster/git-htmldocs.git/

Release tarballs are available at:

	https://www.kernel.org/pub/software/scm/git/

--------------------------------------------------
[Graduated to 'master']

* ab/submodule-cleanup (2022-06-28) 12 commits
  (merged to 'next' on 2022-07-08 at 6f3886aa03)
 + git-sh-setup.sh: remove "say" function, change last users
 + git-submodule.sh: use "$quiet", not "$GIT_QUIET"
 + submodule--helper: eliminate internal "--update" option
 + submodule--helper: understand --checkout, --merge and --rebase synonyms
 + submodule--helper: report "submodule" as our name in some "-h" output
 + submodule--helper: rename "absorb-git-dirs" to "absorbgitdirs"
 + submodule update: remove "-v" option
 + submodule--helper: have --require-init imply --init
 + git-submodule.sh: remove unused top-level "--branch" argument
 + git-submodule.sh: make the "$cached" variable a boolean
 + git-submodule.sh: remove unused $prefix variable
 + git-submodule.sh: remove unused sanitize_submodule_env()
 (this branch is used by gc/submodule-use-super-prefix.)

 Further preparation to turn git-submodule.sh into a builtin.
 source: <cover-v4-00.12-00000000000-20220628T095914Z-avarab@gmail.com>


* en/merge-tree (2022-06-22) 17 commits
  (merged to 'next' on 2022-07-08 at a29b4896ab)
 + git-merge-tree.txt: add a section on potentional usage mistakes
 + merge-tree: add a --allow-unrelated-histories flag
 + merge-tree: allow `ls-files -u` style info to be NUL terminated
 + merge-ort: optionally produce machine-readable output
 + merge-ort: store more specific conflict information
 + merge-ort: make `path_messages` a strmap to a string_list
 + merge-ort: store messages in a list, not in a single strbuf
 + merge-tree: provide easy access to `ls-files -u` style info
 + merge-tree: provide a list of which files have conflicts
 + merge-ort: remove command-line-centric submodule message from merge-ort
 + merge-ort: provide a merge_get_conflicted_files() helper function
 + merge-tree: support including merge messages in output
 + merge-ort: split out a separate display_update_messages() function
 + merge-tree: implement real merges
 + merge-tree: add option parsing and initial shell for real merge function
 + merge-tree: move logic for existing merge into new function
 + merge-tree: rename merge_trees() to trivial_merge_trees()

 "git merge-tree" learned a new mode where it takes two commits and
 computes a tree that would result in the merge commit, if the
 histories leading to these two commits were to be merged.
 source: <pull.1122.v7.git.1655511660.gitgitgadget@gmail.com>


* gg/worktree-from-the-above (2022-06-21) 2 commits
  (merged to 'next' on 2022-07-08 at fa0e71ba39)
 + dir: minor refactoring / clean-up
 + dir: traverse into repository

 In a non-bare repository, the behavior of Git when the
 core.worktree configuration variable points at a directory that has
 a repository as its subdirectory, regressed in Git 2.27 days.
 source: <20220616234433.225-1-gg.oss@outlook.com>
 source: <20220616231956.154-1-gg.oss@outlook.com>


* hx/unpack-streaming (2022-06-13) 6 commits
  (merged to 'next' on 2022-07-08 at 4eb375ec2f)
 + unpack-objects: use stream_loose_object() to unpack large objects
 + core doc: modernize core.bigFileThreshold documentation
 + object-file.c: add "stream_loose_object()" to handle large object
 + object-file.c: factor out deflate part of write_loose_object()
 + object-file.c: refactor write_loose_object() to several steps
 + unpack-objects: low memory footprint for get_data() in dry_run mode

 Allow large objects read from a packstream to be streamed into a
 loose object file straight, without having to keep it in-core as a
 whole.
 source: <cover.1654914555.git.chiyutianyi@gmail.com>


* sy/mv-out-of-cone (2022-07-01) 8 commits
  (merged to 'next' on 2022-07-08 at 654970fdb7)
 + mv: add check_dir_in_index() and solve general dir check issue
 + mv: use flags mode for update_mode
 + mv: check if <destination> exists in index to handle overwriting
 + mv: check if out-of-cone file exists in index with SKIP_WORKTREE bit
 + mv: decouple if/else-if checks using goto
 + mv: update sparsity after moving from out-of-cone to in-cone
 + t1092: mv directory from out-of-cone to in-cone
 + t7002: add tests for moving out-of-cone file/directory

 "git mv A B" in a sparsely populated working tree can be asked to
 move a path between directories that are "in cone" (i.e. expected
 to be materialized in the working tree) and "out of cone"
 (i.e. expected to be hidden).  The handling of such cases has been
 improved.
 source: <20220630023737.473690-1-shaoxuan.yuan02@gmail.com>

--------------------------------------------------
[New Topics]

* js/ci-github-workflow-markup (2022-07-14) 1 commit
  (merged to 'next' on 2022-07-15 at 196166f671)
 + tests: fix incorrect --write-junit-xml code

 A fix for a regression in test framework.

 Will merge to 'master'.
 source: <pull.1288.git.1657789234416.gitgitgadget@gmail.com>


* js/shortlog-sort-stably (2022-07-14) 1 commit
  (merged to 'next' on 2022-07-15 at 75e4efe678)
 + shortlog: use a stable sort

 "git shortlog -n" relied on the underlying qsort() to be stable,
 which shouldn't have.  Fixed.

 Will merge to 'master'.
 source: <pull.1290.git.1657813429221.gitgitgadget@gmail.com>


* mt/doc-config (2022-07-14) 3 commits
 - doc: notes: unify configuration variables definitions
 - doc: apply: unify configuration variables definitions
 - doc: grep: unify configuration variables definitions

 Unify description of configuration variables used by individual
 commands in the documentation of the commands and the documentation
 of the "git config".

 Retracted?.
 cf. <CAHd-oW4zHA1YLX-5B1vYTA1f8PocziUCi0WxvSEkFUuf2GqKxg@mail.gmail.com>
 source: <cover.1657819649.git.matheus.bernardino@usp.br>


* rs/mingw-tighten-mkstemp (2022-07-14) 1 commit
  (merged to 'next' on 2022-07-15 at 4dd4a117ec)
 + mingw: avoid mktemp() in mkstemp() implementation

 mkstemp() emulation on Windows has been improved.

 Will merge to 'master'.
 source: <7265e37f-fd29-3579-b840-19a1df52a59f@web.de>


* jt/fetch-pack-trace2-filter-spec (2022-07-15) 1 commit
 - fetch-pack: write effective filter to trace2

 "git fetch" client logs the partial clone filter used in the trace2
 output.

 Will merge to 'next'?
 source: <20220715172943.2681492-1-jonathantanmy@google.com>


* mb/doc-rerere-autoupdate (2022-07-15) 1 commit
 - cherry-pick doc: clarify no-rerere-autoupdate still allows rerere

 Clarifies that the "--no-rerere-autoupdate" option does not disable
 the "rerere" mechanism (nor does "--rerere-autoupdate" enable it).

 Will merge to 'next'?
 source: <20220715092527.1567837-1-mail@beyermatthias.de>


* rs/mergesort (2022-07-17) 10 commits
 - mergesort: remove llist_mergesort()
 - packfile: use DEFINE_LIST_SORT
 - fetch-pack: use DEFINE_LIST_SORT
 - commit: use DEFINE_LIST_SORT
 - blame: use DEFINE_LIST_SORT
 - test-mergesort: use DEFINE_LIST_SORT
 - test-mergesort: use DEFINE_LIST_SORT_DEBUG
 - mergesort: add macros for typed sort of linked lists
 - mergesort: tighten merge loop
 - mergesort: unify ranks loops

 source: <4d7cd286-398e-215c-f2bd-aa7e8207be4f@web.de>

--------------------------------------------------
[Stalled]

* ll/curl-accept-language (2022-07-11) 1 commit
  (merged to 'next' on 2022-07-13 at 076aba7421)
 + remote-curl: send Accept-Language header to server

 Earlier, HTTP transport clients learned to tell the server side
 what locale they are in by sending Accept-Language HTTP header, but
 this was done only for some requests but not others.

 Will merge to 'master'.
 source: <pull.1251.v4.git.1657519134336.gitgitgadget@gmail.com>


* bc/stash-export (2022-04-08) 4 commits
 - builtin/stash: provide a way to import stashes from a ref
 - builtin/stash: provide a way to export stashes to a ref
 - builtin/stash: factor out revision parsing into a function
 - object-name: make get_oid quietly return an error

 A mechanism to export and import stash entries to and from a normal
 commit to transfer it across repositories has been introduced.

 Expecting a reroll.
 cf. <YnL2d4Vr9Vr7W4Hj@camp.crustytoothpaste.net>
 source: <20220407215352.3491567-1-sandals@crustytoothpaste.net>


* cw/remote-object-info (2022-05-06) 11 commits
 - SQUASH??? coccicheck
 - SQUASH??? ensure that coccicheck is happy
 - SQUASH??? compilation fix
 - cat-file: add --batch-command remote-object-info command
 - cat-file: move parse_cmd and DEFAULT_FORMAT up
 - transport: add object-info fallback to fetch
 - transport: add client side capability to request object-info
 - object-info: send attribute packet regardless of object ids
 - object-store: add function to free object_info contents
 - fetch-pack: move fetch default settings
 - fetch-pack: refactor packet writing

 A client component to talk with the object-info endpoint.

 Expecting a reroll.
 source: <20220502170904.2770649-1-calvinwan@google.com>

--------------------------------------------------
[Cooking]

* jk/diff-files-cleanup-fix (2022-07-12) 1 commit
  (merged to 'next' on 2022-07-13 at 9db5235d01)
 + diff-files: move misplaced cleanup label

 An earlier attempt to plug leaks placed a clean-up label to jump to
 at a bogus place, which as been corrected.

 Will merge to 'master'.
 source: <Ys0c0ePxPOqZ/5ck@coredump.intra.peff.net>


* cw/submodule-merge-messages (2022-07-13) 1 commit
 - submodule merge: update conflict error message

 Update the message given when "git merge" sees conflicts at a path
 with a submodule while merging a superproject.

 Needs review.
 source: <20220712231935.2979727-1-calvinwan@google.com>


* ds/doc-wo-whitelist (2022-07-14) 3 commits
 - *: avoid "whitelist"
 - t/*: avoid "whitelist"
 - Documentation: remove use of whitelist

 Avoid "white/black-list" in documentation and code comments.

 Will merge to 'next'?
 source: <pull.1274.v2.git.1657852722.gitgitgadget@gmail.com>


* js/vimdiff-quotepath-fix (2022-07-14) 1 commit
  (merged to 'next' on 2022-07-15 at 4273bbd4b4)
 + mergetool(vimdiff): allow paths to contain spaces again

 Variable quoting fix in the vimdiff driver of "git mergetool"

 Will merge to 'master'.
 source: <pull.1287.v2.git.1657809063728.gitgitgadget@gmail.com>


* mt/checkout-count-fix (2022-07-14) 3 commits
 - checkout: fix two bugs on the final count of updated entries
 - checkout: show bug about failed entries being included in final report
 - checkout: document bug where delayed checkout counts entries twice

 "git checkout" miscounted the paths it updated, which has been
 corrected.

 Will merge to 'next'?
 source: <cover.1657799213.git.matheus.bernardino@usp.br>


* tb/commit-graph-genv2-upgrade-fix (2022-07-15) 3 commits
 - commit-graph: fix corrupt upgrade from generation v1 to v2
 - commit-graph: introduce `repo_find_commit_pos_in_graph()`
 - t5318: demonstrate commit-graph generation v2 corruption

 There was a bug in the codepath to upgrade generation information
 in commit-graph from v1 to v2 format, which has been corrected.

 Will merge to 'next'?
 source: <cover.1657667404.git.me@ttaylorr.com>


* js/safe-directory-plus (2022-07-13) 3 commits
 - mingw: be more informative when ownership check fails on FAT32
 - mingw: handle a file owned by the Administrators group correctly
 - Allow debugging unsafe directories' ownership

 Needs review.
 source: <pull.1286.git.1657700238.gitgitgadget@gmail.com>


* po/doc-add-renormalize (2022-07-09) 1 commit
 - doc add: renormalize is not idempotent for CRCRLF

 Documentation for "git add --renormalize" has been improved.

 Expecting a reroll.
 cf. <dfe0c1ab-33f8-f13e-71ce-1829bb0d2d7f@iee.email>
 source: <d3b8ed97a105ea1d7e656c964b7eee378e11ede6.1657385781.git.gitgitgadget@gmail.com>


* po/glossary-around-traversal (2022-07-09) 3 commits
 - glossary: add reachability bitmap description
 - glossary: add commit graph description
 - glossary: add Object DataBase (ODB) abbreviation

 The glossary entries for "commit-graph file" and "reachability
 bitmap" have been added.

 Expecting a reroll.
 cf. <dfe0c1ab-33f8-f13e-71ce-1829bb0d2d7f@iee.email>
 source: <pull.1282.git.1657385781.gitgitgadget@gmail.com>


* rs/cocci-array-copy (2022-07-10) 1 commit
  (merged to 'next' on 2022-07-13 at f21dec0f71)
 + cocci: avoid normalization rules for memcpy

 A coccinelle rule (in contrib/) to encourage use of COPY_ARRAY
 macro has been improved.

 Will merge to 'master'.
 source: <ded153d4-4aea-d4da-11cb-ec66d181e4c9@web.de>


* sg/multi-pack-index-parse-options-fix (2022-07-10) 1 commit
  (merged to 'next' on 2022-07-11 at 1e14685680)
 + multi-pack-index: simplify handling of unknown --options

 The way "git multi-pack" uses parse-options API has been improved.

 Will merge to 'master'.
 source: <20220710151645.GA2038@szeder.dev>


* jk/ref-filter-discard-commit-buffer (2022-07-11) 1 commit
  (merged to 'next' on 2022-07-13 at d1521724db)
 + ref-filter: disable save_commit_buffer while traversing

 Will merge to 'master'.
 source: <Ysw4JtoHW1vWmqhz@coredump.intra.peff.net>


* ab/cocci-unused (2022-07-06) 6 commits
  (merged to 'next' on 2022-07-11 at 7fa60d2a5b)
 + cocci: generalize "unused" rule to cover more than "strbuf"
 + cocci: add and apply a rule to find "unused" strbufs
 + cocci: have "coccicheck{,-pending}" depend on "coccicheck-test"
 + cocci: add a "coccicheck-test" target and test *.cocci rules
 + Makefile & .gitignore: ignore & clean "git.res", not "*.res"
 + Makefile: remove mandatory "spatch" arguments from SPATCH_FLAGS

 Add Coccinelle rules to detect the pattern of initializing and then
 finalizing a structure without using it in between at all, which
 happens after code restructuring and the compilers fail to
 recognize as an unused varilable.

 Will merge to 'master'.
 source: <cover-v4-0.6-00000000000-20220705T134033Z-avarab@gmail.com>


* jk/clone-unborn-confusion (2022-07-11) 4 commits
  (merged to 'next' on 2022-07-13 at a7ae8cb4b5)
 + clone: move unborn head creation to update_head()
 + clone: use remote branch if it matches default HEAD
 + clone: propagate empty remote HEAD even with other branches
 + clone: drop extra newline from warning message

 "git clone" from a repository with some ref whose HEAD is unborn
 did not set the HEAD in the resulting repository correctly, which
 has been corrected.

 Will merge to 'master'.
 source: <YsdyLS4UFzj0j/wB@coredump.intra.peff.net>


* ac/bitmap-lookup-table (2022-07-06) 6 commits
 - p5310-pack-bitmaps.sh: remove pack.writeReverseIndex
 - bitmap-lookup-table: add performance tests for lookup table
 - pack-bitmap: prepare to read lookup table extension
 - pack-bitmap-write: learn pack.writeBitmapLookupTable and add tests
 - pack-bitmap-write.c: write lookup table extension
 - Documentation/technical: describe bitmap lookup table extension

 The pack bitmap file gained a bitmap-lookup table to speed up
 locating the necessary bitmap for a given commit.

 Waiting for a more thorough review.
 cf. <Ys4DjW9JjQFx5Bhb@nand.local>
 source: <pull.1266.v3.git.1656924376.gitgitgadget@gmail.com>


* bc/nettle-sha256 (2022-07-10) 1 commit
  (merged to 'next' on 2022-07-11 at cf9595d8ca)
 + sha256: add support for Nettle

 Support for libnettle as SHA256 implementation has been added.

 Will merge to 'master'.
 source: <20220710132907.1499365-1-sandals@crustytoothpaste.net>


* jc/builtin-mv-move-array (2022-07-09) 1 commit
  (merged to 'next' on 2022-07-09 at 0d3b3f62e5)
 + builtin/mv.c: use the MOVE_ARRAY() macro instead of memmove()

 Apply Coccinelle rule to turn raw memmove() into MOVE_ARRAY() cpp
 macro, which would improve maintainability and readability.

 Will merge to 'master'.
 source: <xmqq4jzpu4xp.fsf_-_@gitster.g>


* jd/gpg-interface-trust-level-string (2022-07-10) 1 commit
  (merged to 'next' on 2022-07-11 at 7b3cca73a8)
 + gpg-interface: add function for converting trust level to string

 The code to convert between GPG trust level strings and internal
 constants we use to represent them have been cleaned up.

 Will merge to 'master'.
 source: <pull.1281.v4.git.1657515650587.gitgitgadget@gmail.com>


* kk/p4-client-name-encoding-fix (2022-07-08) 1 commit
  (merged to 'next' on 2022-07-11 at 9c18616f76)
 + git-p4: fix bug with encoding of p4 client name

 "git p4" did not handle non-ASCII client name well, which has been
 corrected.

 Will merge to 'master'.
 source: <pull.1285.git.git.1657267260405.gitgitgadget@gmail.com>


* sa/cat-file-mailmap (2022-07-17) 4 commits
 - cat-file: add mailmap support
 - ident: rename commit_rewrite_person() to apply_mailmap_to_header()
 - ident: move commit_rewrite_person() to ident.c
 - revision: improve commit_rewrite_person()

 "git cat-file" learned an option to use the mailmap when showing
 commit and tag objects.

 Expecting a reroll; I think this is almost there.
 cf. <xmqqo7xnv17x.fsf@gitster.g>
 source: <20220716074055.1786231-1-siddharthasthana31@gmail.com>


* fr/vimdiff-layout-fix (2022-07-08) 1 commit
  (merged to 'next' on 2022-07-09 at d8461bd236)
 + vimdiff: make layout engine more robust against user vim settings

 Recent update to vimdiff layout code has been made more robust
 against different end-user vim settings.

 Will merge to 'master'.
 source: <20220708181024.45839-1-greenfoo@u92.eu>


* ds/rebase-update-ref (2022-07-12) 13 commits
 - sequencer: notify user of --update-refs activity
 - sequencer: ignore HEAD ref under --update-refs
 - rebase: add rebase.updateRefs config option
 - sequencer: rewrite update-refs as user edits todo list
 - rebase: update refs from 'update-ref' commands
 - rebase: add --update-refs option
 - sequencer: add update-ref command
 - sequencer: define array with enum values
 - rebase-interactive: update 'merge' description
 - branch: consider refs under 'update-refs'
 - t2407: test branches currently using apply backend
 - t2407: test bisect and rebase as black-boxes
 - Merge branch 'ds/branch-checked-out' into ds/rebase-update-ref

 "git rebase -i" learns to update branches whose tip appear in the
 rebased range.

 Will merge to 'next'?
 source: <pull.1247.v4.git.1657631225.gitgitgadget@gmail.com>


* ab/leakfix (2022-07-01) 11 commits
  (merged to 'next' on 2022-07-11 at 0b107fffcf)
 + pull: fix a "struct oid_array" memory leak
 + cat-file: fix a common "struct object_context" memory leak
 + gc: fix a memory leak
 + checkout: avoid "struct unpack_trees_options" leak
 + merge-file: fix memory leaks on error path
 + merge-file: refactor for subsequent memory leak fix
 + cat-file: fix a memory leak in --batch-command mode
 + revert: free "struct replay_opts" members
 + submodule.c: free() memory from xgetcwd()
 + clone: fix memory leak in wanted_peer_refs()
 + check-ref-format: fix trivial memory leak

 Plug various memory leaks.

 Will merge to 'master'.
 source: <cover-v2-00.11-00000000000-20220701T104017Z-avarab@gmail.com>


* ab/test-tool-leakfix (2022-07-01) 9 commits
  (merged to 'next' on 2022-07-11 at db7a724694)
 + test-tool delta: fix a memory leak
 + test-tool ref-store: fix a memory leak
 + test-tool bloom: fix memory leaks
 + test-tool json-writer: fix memory leaks
 + test-tool regex: call regfree(), fix memory leaks
 + test-tool urlmatch-normalization: fix a memory leak
 + test-tool {dump,scrap}-cache-tree: fix memory leaks
 + test-tool path-utils: fix a memory leak
 + test-tool test-hash: fix a memory leak

 Plug various memory leaks in test-tool commands.

 Will merge to 'master'.
 source: <cover-v2-0.9-00000000000-20220701T103503Z-avarab@gmail.com>


* gc/submodule-use-super-prefix (2022-06-30) 8 commits
  (merged to 'next' on 2022-07-11 at 0d9cf172f9)
 + submodule--helper: remove display path helper
 + submodule--helper update: use --super-prefix
 + submodule--helper: remove unused SUPPORT_SUPER_PREFIX flags
 + submodule--helper: use correct display path helper
 + submodule--helper: don't recreate recursive prefix
 + submodule--helper update: use display path helper
 + submodule--helper tests: add missing "display path" coverage
 + Merge branch 'ab/submodule-cleanup' into gc/submodule-use-super-prefix

 Another step to rewrite more parts of "git submodule" in C.

 Will merge to 'master'.
 source: <20220701021157.88858-1-chooglen@google.com>


* hx/lookup-commit-in-graph-fix (2022-07-12) 2 commits
  (merged to 'next' on 2022-07-13 at 4489696814)
 + t5330: remove run_with_limited_processses()
  (merged to 'next' on 2022-07-08 at cef32db0b6)
 + commit-graph.c: no lazy fetch in lookup_commit_in_graph()

 A corner case bug where lazily fetching objects from a promisor
 remote resulted in infinite recursion has been corrected.

 Will merge to 'master'.
 source: <cover.1656593279.git.hanxin.hx@bytedance.com>


* pw/xdiff-alloc (2022-07-08) 4 commits
 - xdiff: introduce XDL_ALLOC_GROW()
 - xdiff: introduce XDL_CALLOC_ARRAY()
 - xdiff: introduce xdl_calloc
 - xdiff: introduce XDL_ALLOC_ARRAY()

 Add a level of redirection to array allocation API in xdiff part,
 to make it easier to share with the libgit2 project.

 Will merge to 'next'?
 source: <pull.1272.v2.git.1657297519.gitgitgadget@gmail.com>


* ab/squelch-empty-fsync-traces (2022-06-30) 1 commit
 . trace2: don't include "fsync" events in all trace2 logs

 Omit fsync-related trace2 entries when their values are all zero.

 Breaks tests in hx/unpack-streaming with an interesting interaction.
 source: <patch-v2-1.1-a1fc37de947-20220630T084607Z-avarab@gmail.com>


* en/merge-restore-to-pristine (2022-06-21) 6 commits
 - merge: do not exit restore_state() prematurely
 - merge: ensure we can actually restore pre-merge state
 - merge: make restore_state() restore staged state too
 - merge: fix save_state() to work when there are racy-dirty files
 - merge: remove unused variable
 - t6424: make sure a failed merge preserves local changes

 When "git merge" finds that it cannot perform a merge, it should
 restore the working tree to the state before the command was
 initiated, but in some corner cases it didn't.

 Needs review.
 source: <pull.1231.v2.git.1655621424.gitgitgadget@gmail.com>


* tk/apply-case-insensitive (2022-06-21) 3 commits
 - apply: support case-only renames in case-insensitive filesystems
 - reset: new failing test for reset of case-insensitive duplicate in index
 - t4141: test "git apply" with core.ignorecase

 "git apply" barfed on a patch that makes a case-only rename on a
 case-insensitive filesystem.

 Needs review.
 source: <pull.1257.v2.git.1655655027.gitgitgadget@gmail.com>


* zh/ls-files-format (2022-07-13) 1 commit
 - ls-files: introduce "--format" option

 "git ls-files" learns the "--format" option to tweak its output.

 Will merge to 'next'?
 source: <pull.1262.v7.git.1657692472994.gitgitgadget@gmail.com>


* en/merge-dual-dir-renames-fix (2022-07-06) 5 commits
  (merged to 'next' on 2022-07-11 at 5f8dadf87b)
 + merge-ort: fix issue with dual rename and add/add conflict
 + merge-ort: shuffle the computation and cleanup of potential collisions
 + merge-ort: make a separate function for freeing struct collisions
 + merge-ort: small cleanups of check_for_directory_rename
 + t6423: add tests of dual directory rename plus add/add conflict

 Fixes a long-standing corner case bug around directory renames in
 the merge-ort strategy.

 Will merge to 'master'.
 source: <pull.1268.v4.git.1656984823.gitgitgadget@gmail.com>


* js/commit-graph-parsing-without-repo-settings (2022-07-14) 1 commit
 - commit-graph: pass repo_settings instead of repository

 API tweak to make it easier to run fuzz testing on commit-graph parser.

 Will merge to 'next'.
 source: <fd70b6119153b165a62ee4f693dbe47031cfb2be.1657834657.git.steadmon@google.com>


* jt/connected-show-missing-from-which-side (2022-06-10) 1 commit
 - fetch,fetch-pack: clarify connectivity check error

 We may find an object missing after a "git fetch" stores the
 objects it obtained from the other side, but it is not necessarily
 because the remote failed to send necessary objects.  Reword the
 messages in an attempt to help users explore other possibilities
 when they hit this error.

 Expecting a reroll.
 source: <20220610195247.1177549-1-jonathantanmy@google.com>


* jc/resolve-undo (2022-07-11) 2 commits
  (merged to 'next' on 2022-07-13 at b9ef9482e8)
 + fsck: do not dereference NULL while checking resolve-undo data
  (merged to 'next' on 2022-06-15 at c195e5a2d9)
 + revision: mark blobs needed for resolve-undo as reachable

 The resolve-undo information in the index was not protected against
 GC, which has been corrected.

 Will merge to 'master'.
 source: <xmqq35f7kzad.fsf@gitster.g>


* ab/build-gitweb (2022-06-28) 8 commits
  (merged to 'next' on 2022-07-11 at 731e354ff0)
 + gitweb/Makefile: add a "NO_GITWEB" parameter
 + Makefile: build 'gitweb' in the default target
 + gitweb/Makefile: include in top-level Makefile
 + gitweb: remove "test" and "test-installed" targets
 + gitweb/Makefile: prepare to merge into top-level Makefile
 + gitweb/Makefile: clear up and de-duplicate the gitweb.{css,js} vars
 + gitweb/Makefile: add a $(GITWEB_ALL) variable
 + gitweb/Makefile: define all .PHONY prerequisites inline

 Teach "make all" to build gitweb as well.

 Will merge to 'master'.
 source: <cover-v3-0.8-00000000000-20220628T100936Z-avarab@gmail.com>


* ab/test-without-templates (2022-06-06) 7 commits
  (merged to 'next' on 2022-07-11 at afab6c1918)
 + tests: don't assume a .git/info for .git/info/sparse-checkout
 + tests: don't assume a .git/info for .git/info/exclude
 + tests: don't assume a .git/info for .git/info/refs
 + tests: don't assume a .git/info for .git/info/attributes
 + tests: don't assume a .git/info for .git/info/grafts
 + tests: don't depend on template-created .git/branches
 + t0008: don't rely on default ".git/info/exclude"

 Tweak tests so that they still work when the "git init" template
 did not create .git/info directory.

 Will merge to 'master'.
 source: <cover-v2-0.7-00000000000-20220603T110506Z-avarab@gmail.com>


* tb/show-ref-count (2022-06-06) 2 commits
 - builtin/show-ref.c: limit output with `--count`
 - builtin/show-ref.c: rename `found_match` to `matches_nr`

 "git show-ref" learned to stop after emitting N refs with the new
 "--count=N" option.

 Expecting a reroll.
 cf. <xmqqczfl4ce1.fsf@gitster.g>
 source: <cover.1654552560.git.me@ttaylorr.com>


* ds/bundle-uri-more (2022-06-06) 6 commits
 - fetch: add 'refs/bundle/' to log.excludeDecoration
 - bundle-uri: add support for http(s):// and file://
 - fetch: add --bundle-uri option
 - bundle-uri: create basic file-copy logic
 - remote-curl: add 'get' capability
 - docs: document bundle URI standard

 The "bundle URI" topic.

 Needs review.
 source: <pull.1248.git.1654545325.gitgitgadget@gmail.com>


* js/bisect-in-c (2022-06-27) 16 commits
 - bisect: no longer try to clean up left-over `.git/head-name` files
 - bisect: remove Cogito-related code
 - Turn `git bisect` into a full built-in
 - bisect: move even the command-line parsing to `bisect--helper`
 - bisect: teach the `bisect--helper` command to show the correct usage strings
 - bisect--helper: return only correct exit codes in `cmd_*()`
 - bisect--helper: move the `BISECT_STATE` case to the end
 - bisect--helper: make `--bisect-state` optional
 - bisect--helper: align the sub-command order with git-bisect.sh
 - bisect--helper: using `--bisect-state` without an argument is a bug
 - bisect--helper: really retire `--bisect-autostart`
 - bisect--helper: really retire --bisect-next-check
 - bisect--helper: retire the --no-log option
 - bisect: avoid double-quoting when printing the failed command
 - bisect run: fix the error message
 - bisect: verify that a bogus option won't try to start a bisection

 Final bits of "git bisect.sh" have been rewritten in C.

 Expecting a (hopefully final) reroll.
 cf. <20627.86ilolhnnn.gmgdl@evledraar.gmail.com>
 source: <pull.1132.v4.git.1656354677.gitgitgadget@gmail.com>


* gc/bare-repo-discovery (2022-07-14) 5 commits
  (merged to 'next' on 2022-07-15 at 5206577852)
 + setup.c: create `safe.bareRepository`
 + safe.directory: use git_protected_config()
 + config: learn `git_protected_config()`
 + Documentation: define protected configuration
 + Documentation/git-config.txt: add SCOPES section

 Introduce a discovery.barerepository configuration variable that
 allows users to forbid discovery of bare repositories.

 Will merge to 'master'.
 source: <pull.1261.v8.git.git.1657834081.gitgitgadget@gmail.com>

--------------------------------------------------
[Discarded]

* ar/send-email-confirm-by-default (2022-04-22) 1 commit
 . send-email: always confirm by default

 "git send-email" is changed so that by default it asks for
 confirmation before sending each message out.

 Discarded.
 I wanted to like this, and had it in the version of Git I use
 myself for daily work, but the prompting turned out to be somewhat
 distracting.
 source: <20220422083629.1404989-1-hi@alyssa.is>

^ permalink raw reply	[relevance 3%]

* Re: [PATCH v2 3/6] merge: fix save_state() to work when there are racy-dirty files
  2022-06-19  6:50  2%   ` [PATCH v2 3/6] merge: fix save_state() to work when there are racy-dirty files Elijah Newren via GitGitGadget
  2022-07-17 16:28  2%     ` ZheNing Hu
@ 2022-07-19 22:43  2%     ` Junio C Hamano
  1 sibling, 0 replies; 200+ results
From: Junio C Hamano @ 2022-07-19 22:43 UTC (permalink / raw)
  To: Elijah Newren via GitGitGadget; +Cc: git, ZheNing Hu, Elijah Newren

"Elijah Newren via GitGitGadget" <gitgitgadget@gmail.com> writes:

> From: Elijah Newren <newren@gmail.com>
>
> When there are racy-dirty files, but no files are modified,
> `git stash create` exits with unsuccessful status.  This causes merge
> to fail.  Refresh the index first to avoid this problem.
>
> Signed-off-by: Elijah Newren <newren@gmail.com>
> ---
>  builtin/merge.c | 8 ++++++++
>  1 file changed, 8 insertions(+)
>
> diff --git a/builtin/merge.c b/builtin/merge.c
> index 00de224a2da..8ce4336dd3f 100644
> --- a/builtin/merge.c
> +++ b/builtin/merge.c
> @@ -313,8 +313,16 @@ static int save_state(struct object_id *stash)
>  	int len;
>  	struct child_process cp = CHILD_PROCESS_INIT;
>  	struct strbuf buffer = STRBUF_INIT;
> +	struct lock_file lock_file = LOCK_INIT;
> +	int fd;
>  	int rc = -1;
>  
> +	fd = repo_hold_locked_index(the_repository, &lock_file, 0);
> +	refresh_cache(REFRESH_QUIET);
> +	if (0 <= fd)
> +		repo_update_index_if_able(the_repository, &lock_file);
> +	rollback_lock_file(&lock_file);

I might have added "else" but rolling back a lock file that was
already committed or rolled back is a safe no-op, so this is OK.
The pattern already appears elsewhere twice, anyway.

Is it sufficient to be opportunistic?  IOW, if we fail to refresh
the index or write the refreshed result to disk, can we be silent
here and rely on "stash create" and things that follow to safely
fail as necessary, or should we also be detecting errors?

>  	strvec_pushl(&cp.args, "stash", "create", NULL);
>  	cp.out = -1;
>  	cp.git_cmd = 1;

^ permalink raw reply	[relevance 2%]

* Re: [PATCH v2 3/6] merge: fix save_state() to work when there are racy-dirty files
  2022-07-17 16:28  2%     ` ZheNing Hu
@ 2022-07-19 22:49  2%       ` Junio C Hamano
  2022-07-21  1:09  2%         ` Elijah Newren
  0 siblings, 1 reply; 200+ results
From: Junio C Hamano @ 2022-07-19 22:49 UTC (permalink / raw)
  To: ZheNing Hu; +Cc: Elijah Newren via GitGitGadget, Git List, Elijah Newren

ZheNing Hu <adlternative@gmail.com> writes:

> Elijah Newren via GitGitGadget <gitgitgadget@gmail.com> 于2022年6月19日周日 14:50写道:
>>
>> From: Elijah Newren <newren@gmail.com>
>>
>> When there are racy-dirty files, but no files are modified,
>> `git stash create` exits with unsuccessful status.  This causes merge
>> to fail.  Refresh the index first to avoid this problem.

Racily dirty?  Or just being stat-dirty is sufficient to cause the
"stash create" to fail?

> I just want to show what sence will meet this errors:
>
> 1. touch file
> 2. git add file
> 3. git stash push (user may do it before git merge)
> 4. touch file (update file but not update its content)
> 5. git merge (call git stash create and return 1)

I think, from the above reproduction recipe, that the breakage does
not depend on racily-clean index entries (i.e. file touched within
the same timestamp as the last write of the index without changing
their size).  So s/racy-dirty/stat-dirty/ (both on the title and the
body) would be a sufficient fix.

Thanks.

^ permalink raw reply	[relevance 2%]

* What's cooking in git.git (Jul 2022, #06; Tue, 19)
@ 2022-07-20  1:20  3% Junio C Hamano
  0 siblings, 0 replies; 200+ results
From: Junio C Hamano @ 2022-07-20  1:20 UTC (permalink / raw)
  To: git

Here are the topics that have been cooking in my tree.  Commits
prefixed with '+' are in 'next' (being in 'next' is a sign that a
topic is stable enough to be used and are candidate to be in a
future release).  Commits prefixed with '-' are only in 'seen',
and aren't considered "accepted" at all.

Copies of the source code to Git live in many repositories, and the
following is a list of the ones I push into or their mirrors.  Some
repositories have only a subset of branches.

With maint, master, next, seen, todo:

	git://git.kernel.org/pub/scm/git/git.git/
	git://repo.or.cz/alt-git.git/
	https://kernel.googlesource.com/pub/scm/git/git/
	https://github.com/git/git/
	https://gitlab.com/git-vcs/git/

With all the integration branches and topics broken out:

	https://github.com/gitster/git/

Even though the preformatted documentation in HTML and man format
are not sources, they are published in these repositories for
convenience (replace "htmldocs" with "manpages" for the manual
pages):

	git://git.kernel.org/pub/scm/git/git-htmldocs.git/
	https://github.com/gitster/git-htmldocs.git/

Release tarballs are available at:

	https://www.kernel.org/pub/software/scm/git/

--------------------------------------------------
[New Topics]

* ds/midx-with-less-memory (2022-07-19) 3 commits
 - midx: reduce memory pressure while writing bitmaps
 - midx: extract bitmap write setup
 - pack-bitmap-write: use const for hashes

 The codepath to write multi-pack index has been taught to release a
 large chunk of memory that holds an array of objects in the packs,
 as soon as it is done with the array, to reduce memory consumption.

 Will merge to 'next'?
 source: <pull.1292.v2.git.1658244366.gitgitgadget@gmail.com>


* ma/sparse-checkout-cone-doc-fix (2022-07-18) 1 commit
  (merged to 'next' on 2022-07-19 at c259b61b0e)
 + config/core.txt: fix minor issues for `core.sparseCheckoutCone`

 Docfix.

 Will merge to 'master'.
 source: <20220718100530.2068354-1-martin.agren@gmail.com>


* ma/t4200-update (2022-07-18) 1 commit
  (merged to 'next' on 2022-07-19 at 710d0cafd9)
 + t4200: drop irrelevant code

 Test fix.

 Will merge to 'master'.
 source: <20220718154322.2177166-1-martin.agren@gmail.com>


* mb/config-document-include (2022-07-17) 1 commit
  (merged to 'next' on 2022-07-19 at 8267b80aa2)
 + config.txt: document include, includeIf

 Add missing documentation for "include" and "includeIf" features in
 "git config" file format, which incidentally teachs the command
 line completion to include them in its offerings.

 Will merge to 'master'.
 source: <pull.1285.v2.git.1658002423864.gitgitgadget@gmail.com>


* sg/index-format-doc-update (2022-07-18) 1 commit
  (merged to 'next' on 2022-07-19 at ccc384be5e)
 + index-format.txt: remove outdated list of supported extensions

 Docfix.

 Will merge to 'master'.
 source: <20220718085640.7395-1-szeder.dev@gmail.com>


* tl/pack-bitmap-error-messages (2022-07-18) 6 commits
  (merged to 'next' on 2022-07-19 at 3f9565653a)
 + pack-bitmap.c: continue looping when first MIDX bitmap is found
 + pack-bitmap.c: using error() instead of silently returning -1
 + pack-bitmap.c: do not ignore error when opening a bitmap file
 + pack-bitmap.c: rename "idx_name" to "bitmap_name"
 + pack-bitmap.c: mark more strings for translations
 + pack-bitmap.c: fix formatting of error messages

 Tweak various messages that come from the pack-bitmap codepaths.

 Will merge to 'master'.
 source: <cover.1658159745.git.dyroneteng@gmail.com>


* tl/trace2-config-scope (2022-07-18) 1 commit
 - tr2: dump names if config exist in multiple scopes

 Tweak trace2 output about configuration variables.

 Expecting a reroll.
 cf. <20220719074053.37282-1-tenglong.tl@tenglongtldeMacBook-Pro.local>
 source: <a01ae8478d3a8545241c5b064b6d369a330ee59f.1658159746.git.dyroneteng@gmail.com>


* vd/scalar-doc (2022-07-18) 2 commits
 - scalar: convert README.md into a technical design doc
 - scalar: reword command documentation to clarify purpose

 Doc update.

 Will merge to 'next'.
 source: <pull.1275.v2.git.1657584367.gitgitgadget@gmail.com>


* cl/rerere-train-with-no-sign (2022-07-19) 1 commit
 - contrib/rerere-train: avoid useless gpg sign in training

 "rerere-train" script (in contrib/) used to honor commit.gpgSign
 while recreating the throw-away merges.

 Will merge to 'next'.
 source: <PH7PR14MB5594A27B9295E95ACA4D6A69CE8F9@PH7PR14MB5594.namprd14.prod.outlook.com>


* ds/win-syslog-compiler-fix (2022-07-19) 1 commit
 - compat/win32: correct for incorrect compiler warning

 Workaround for a false positive compiler warning.

 Will merge to 'next'.
 source: <pull.1294.git.1658256354725.gitgitgadget@gmail.com>


* ld/osx-keychain-usage-fix (2022-07-19) 1 commit
 - osx-keychain: fix compiler warning

 Workaround for a compiler warning against use of die() in
 osx-keychain (in contrib/).

 Will merge to 'next'.
 source: <pull.1293.git.1658251503775.gitgitgadget@gmail.com>


* ab/submodule-helper-leakfix (2022-07-19) 24 commits
 - submodule--helper: fix a configure_added_submodule() leak
 - submodule--helper: fix bad config API usage
 - submodule--helper: free rest of "displaypath" in "struct update_data"
 - submodule--helper: don't exit() on failure, return
 - submodule--helper: add skeleton "goto cleanup" to update_submodule()
 - submodule--helper: rename "int res" to "int ret"
 - submodule--helper: free some "displaypath" in "struct update_data"
 - submodule--helper: fix a memory leak in print_status()
 - submodule--helper: fix a leak in module_add()
 - submodule--helper: fix obscure leak in module_add()
 - submodule--helper: fix "reference" leak is "module_clone_data"
 - submodule--helper: fix a memory leak in get_default_remote_submodule()
 - submodule--helper: fix a leak with repo_clear()
 - submodule--helper: fix "sm_path" and other "module_cb_list" leaks
 - submodule--helper: fix "errmsg_str" memory leak
 - submodule--helper: refactor "errmsg_str" to be a "struct strbuf"
 - submodule--helper: add and use *_release() functions
 - submodule--helper: add "const" to copy of "update_data"
 - submodule--helper: don't leak {run,capture}_command() cp.dir argument
 - submodule--helper: "struct pathspec" memory leak in module_update()
 - submodule--helper: fix most "struct pathspec" memory leaks
 - submodule--helper: fix trivial get_default_remote_submodule() leak
 - submodule--helper: fix a leak in "clone_submodule"
 - submodule--helper: replace memset() with { 0 }-initialization

 Plugging leaks in submodule--helper.

 Needs review.
 source: <cover-v2-00.24-00000000000-20220719T204458Z-avarab@gmail.com>

--------------------------------------------------
[Graduated to 'master']

* ab/build-gitweb (2022-06-28) 8 commits
  (merged to 'next' on 2022-07-11 at 731e354ff0)
 + gitweb/Makefile: add a "NO_GITWEB" parameter
 + Makefile: build 'gitweb' in the default target
 + gitweb/Makefile: include in top-level Makefile
 + gitweb: remove "test" and "test-installed" targets
 + gitweb/Makefile: prepare to merge into top-level Makefile
 + gitweb/Makefile: clear up and de-duplicate the gitweb.{css,js} vars
 + gitweb/Makefile: add a $(GITWEB_ALL) variable
 + gitweb/Makefile: define all .PHONY prerequisites inline

 Teach "make all" to build gitweb as well.
 source: <cover-v3-0.8-00000000000-20220628T100936Z-avarab@gmail.com>


* ab/cocci-unused (2022-07-06) 6 commits
  (merged to 'next' on 2022-07-11 at 7fa60d2a5b)
 + cocci: generalize "unused" rule to cover more than "strbuf"
 + cocci: add and apply a rule to find "unused" strbufs
 + cocci: have "coccicheck{,-pending}" depend on "coccicheck-test"
 + cocci: add a "coccicheck-test" target and test *.cocci rules
 + Makefile & .gitignore: ignore & clean "git.res", not "*.res"
 + Makefile: remove mandatory "spatch" arguments from SPATCH_FLAGS

 Add Coccinelle rules to detect the pattern of initializing and then
 finalizing a structure without using it in between at all, which
 happens after code restructuring and the compilers fail to
 recognize as an unused variable.
 source: <cover-v4-0.6-00000000000-20220705T134033Z-avarab@gmail.com>


* ab/leakfix (2022-07-01) 11 commits
  (merged to 'next' on 2022-07-11 at 0b107fffcf)
 + pull: fix a "struct oid_array" memory leak
 + cat-file: fix a common "struct object_context" memory leak
 + gc: fix a memory leak
 + checkout: avoid "struct unpack_trees_options" leak
 + merge-file: fix memory leaks on error path
 + merge-file: refactor for subsequent memory leak fix
 + cat-file: fix a memory leak in --batch-command mode
 + revert: free "struct replay_opts" members
 + submodule.c: free() memory from xgetcwd()
 + clone: fix memory leak in wanted_peer_refs()
 + check-ref-format: fix trivial memory leak

 Plug various memory leaks.
 source: <cover-v2-00.11-00000000000-20220701T104017Z-avarab@gmail.com>


* ab/test-tool-leakfix (2022-07-01) 9 commits
  (merged to 'next' on 2022-07-11 at db7a724694)
 + test-tool delta: fix a memory leak
 + test-tool ref-store: fix a memory leak
 + test-tool bloom: fix memory leaks
 + test-tool json-writer: fix memory leaks
 + test-tool regex: call regfree(), fix memory leaks
 + test-tool urlmatch-normalization: fix a memory leak
 + test-tool {dump,scrap}-cache-tree: fix memory leaks
 + test-tool path-utils: fix a memory leak
 + test-tool test-hash: fix a memory leak

 Plug various memory leaks in test-tool commands.
 source: <cover-v2-0.9-00000000000-20220701T103503Z-avarab@gmail.com>


* ab/test-without-templates (2022-06-06) 7 commits
  (merged to 'next' on 2022-07-11 at afab6c1918)
 + tests: don't assume a .git/info for .git/info/sparse-checkout
 + tests: don't assume a .git/info for .git/info/exclude
 + tests: don't assume a .git/info for .git/info/refs
 + tests: don't assume a .git/info for .git/info/attributes
 + tests: don't assume a .git/info for .git/info/grafts
 + tests: don't depend on template-created .git/branches
 + t0008: don't rely on default ".git/info/exclude"

 Tweak tests so that they still work when the "git init" template
 did not create .git/info directory.
 source: <cover-v2-0.7-00000000000-20220603T110506Z-avarab@gmail.com>


* bc/nettle-sha256 (2022-07-10) 1 commit
  (merged to 'next' on 2022-07-11 at cf9595d8ca)
 + sha256: add support for Nettle

 Support for libnettle as SHA256 implementation has been added.
 source: <20220710132907.1499365-1-sandals@crustytoothpaste.net>


* en/merge-dual-dir-renames-fix (2022-07-06) 5 commits
  (merged to 'next' on 2022-07-11 at 5f8dadf87b)
 + merge-ort: fix issue with dual rename and add/add conflict
 + merge-ort: shuffle the computation and cleanup of potential collisions
 + merge-ort: make a separate function for freeing struct collisions
 + merge-ort: small cleanups of check_for_directory_rename
 + t6423: add tests of dual directory rename plus add/add conflict

 Fixes a long-standing corner case bug around directory renames in
 the merge-ort strategy.
 source: <pull.1268.v4.git.1656984823.gitgitgadget@gmail.com>


* fr/vimdiff-layout-fix (2022-07-08) 1 commit
  (merged to 'next' on 2022-07-09 at d8461bd236)
 + vimdiff: make layout engine more robust against user vim settings

 Recent update to vimdiff layout code has been made more robust
 against different end-user vim settings.
 source: <20220708181024.45839-1-greenfoo@u92.eu>


* gc/submodule-use-super-prefix (2022-06-30) 8 commits
  (merged to 'next' on 2022-07-11 at 0d9cf172f9)
 + submodule--helper: remove display path helper
 + submodule--helper update: use --super-prefix
 + submodule--helper: remove unused SUPPORT_SUPER_PREFIX flags
 + submodule--helper: use correct display path helper
 + submodule--helper: don't recreate recursive prefix
 + submodule--helper update: use display path helper
 + submodule--helper tests: add missing "display path" coverage
 + Merge branch 'ab/submodule-cleanup' into gc/submodule-use-super-prefix

 Another step to rewrite more parts of "git submodule" in C.
 source: <20220701021157.88858-1-chooglen@google.com>


* hx/lookup-commit-in-graph-fix (2022-07-12) 2 commits
  (merged to 'next' on 2022-07-13 at 4489696814)
 + t5330: remove run_with_limited_processses()
  (merged to 'next' on 2022-07-08 at cef32db0b6)
 + commit-graph.c: no lazy fetch in lookup_commit_in_graph()

 A corner case bug where lazily fetching objects from a promisor
 remote resulted in infinite recursion has been corrected.
 source: <cover.1656593279.git.hanxin.hx@bytedance.com>


* jc/builtin-mv-move-array (2022-07-09) 1 commit
  (merged to 'next' on 2022-07-09 at 0d3b3f62e5)
 + builtin/mv.c: use the MOVE_ARRAY() macro instead of memmove()

 Apply Coccinelle rule to turn raw memmove() into MOVE_ARRAY() cpp
 macro, which would improve maintainability and readability.
 source: <xmqq4jzpu4xp.fsf_-_@gitster.g>


* jc/resolve-undo (2022-07-11) 2 commits
  (merged to 'next' on 2022-07-13 at b9ef9482e8)
 + fsck: do not dereference NULL while checking resolve-undo data
  (merged to 'next' on 2022-06-15 at c195e5a2d9)
 + revision: mark blobs needed for resolve-undo as reachable

 The resolve-undo information in the index was not protected against
 GC, which has been corrected.
 source: <xmqq35f7kzad.fsf@gitster.g>


* jd/gpg-interface-trust-level-string (2022-07-10) 1 commit
  (merged to 'next' on 2022-07-11 at 7b3cca73a8)
 + gpg-interface: add function for converting trust level to string

 The code to convert between GPG trust level strings and internal
 constants we use to represent them have been cleaned up.
 source: <pull.1281.v4.git.1657515650587.gitgitgadget@gmail.com>


* jk/clone-unborn-confusion (2022-07-11) 4 commits
  (merged to 'next' on 2022-07-13 at a7ae8cb4b5)
 + clone: move unborn head creation to update_head()
 + clone: use remote branch if it matches default HEAD
 + clone: propagate empty remote HEAD even with other branches
 + clone: drop extra newline from warning message

 "git clone" from a repository with some ref whose HEAD is unborn
 did not set the HEAD in the resulting repository correctly, which
 has been corrected.
 source: <YsdyLS4UFzj0j/wB@coredump.intra.peff.net>


* jk/diff-files-cleanup-fix (2022-07-12) 1 commit
  (merged to 'next' on 2022-07-13 at 9db5235d01)
 + diff-files: move misplaced cleanup label

 An earlier attempt to plug leaks placed a clean-up label to jump to
 at a bogus place, which as been corrected.
 source: <Ys0c0ePxPOqZ/5ck@coredump.intra.peff.net>


* jk/ref-filter-discard-commit-buffer (2022-07-11) 1 commit
  (merged to 'next' on 2022-07-13 at d1521724db)
 + ref-filter: disable save_commit_buffer while traversing

 Will merge to 'master'.
 source: <Ysw4JtoHW1vWmqhz@coredump.intra.peff.net>


* ll/curl-accept-language (2022-07-11) 1 commit
  (merged to 'next' on 2022-07-13 at 076aba7421)
 + remote-curl: send Accept-Language header to server

 Earlier, HTTP transport clients learned to tell the server side
 what locale they are in by sending Accept-Language HTTP header, but
 this was done only for some requests but not others.
 source: <pull.1251.v4.git.1657519134336.gitgitgadget@gmail.com>


* rs/cocci-array-copy (2022-07-10) 1 commit
  (merged to 'next' on 2022-07-13 at f21dec0f71)
 + cocci: avoid normalization rules for memcpy

 A coccinelle rule (in contrib/) to encourage use of COPY_ARRAY
 macro has been improved.
 source: <ded153d4-4aea-d4da-11cb-ec66d181e4c9@web.de>


* sg/multi-pack-index-parse-options-fix (2022-07-10) 1 commit
  (merged to 'next' on 2022-07-11 at 1e14685680)
 + multi-pack-index: simplify handling of unknown --options

 The way "git multi-pack" uses parse-options API has been improved.
 source: <20220710151645.GA2038@szeder.dev>

--------------------------------------------------
[Stalled]

* bc/stash-export (2022-04-08) 4 commits
 - builtin/stash: provide a way to import stashes from a ref
 - builtin/stash: provide a way to export stashes to a ref
 - builtin/stash: factor out revision parsing into a function
 - object-name: make get_oid quietly return an error

 A mechanism to export and import stash entries to and from a normal
 commit to transfer it across repositories has been introduced.

 Expecting a reroll.
 cf. <YnL2d4Vr9Vr7W4Hj@camp.crustytoothpaste.net>
 source: <20220407215352.3491567-1-sandals@crustytoothpaste.net>


* cw/remote-object-info (2022-05-06) 11 commits
 - SQUASH??? coccicheck
 - SQUASH??? ensure that coccicheck is happy
 - SQUASH??? compilation fix
 - cat-file: add --batch-command remote-object-info command
 - cat-file: move parse_cmd and DEFAULT_FORMAT up
 - transport: add object-info fallback to fetch
 - transport: add client side capability to request object-info
 - object-info: send attribute packet regardless of object ids
 - object-store: add function to free object_info contents
 - fetch-pack: move fetch default settings
 - fetch-pack: refactor packet writing

 A client component to talk with the object-info endpoint.

 Expecting a reroll.
 source: <20220502170904.2770649-1-calvinwan@google.com>

--------------------------------------------------
[Cooking]

* js/ci-github-workflow-markup (2022-07-14) 1 commit
  (merged to 'next' on 2022-07-15 at 196166f671)
 + tests: fix incorrect --write-junit-xml code

 A fix for a regression in test framework.

 Will merge to 'master'.
 source: <pull.1288.git.1657789234416.gitgitgadget@gmail.com>


* js/shortlog-sort-stably (2022-07-14) 1 commit
  (merged to 'next' on 2022-07-15 at 75e4efe678)
 + shortlog: use a stable sort

 "git shortlog -n" relied on the underlying qsort() to be stable,
 which shouldn't have.  Fixed.

 Will merge to 'master'.
 source: <pull.1290.git.1657813429221.gitgitgadget@gmail.com>


* mt/doc-config (2022-07-14) 3 commits
 - doc: notes: unify configuration variables definitions
 - doc: apply: unify configuration variables definitions
 - doc: grep: unify configuration variables definitions

 Unify description of configuration variables used by individual
 commands in the documentation of the commands and the documentation
 of the "git config".

 Will discard (Retracted?).
 cf. <CAHd-oW4zHA1YLX-5B1vYTA1f8PocziUCi0WxvSEkFUuf2GqKxg@mail.gmail.com>
 source: <cover.1657819649.git.matheus.bernardino@usp.br>


* rs/mingw-tighten-mkstemp (2022-07-14) 1 commit
  (merged to 'next' on 2022-07-15 at 4dd4a117ec)
 + mingw: avoid mktemp() in mkstemp() implementation

 mkstemp() emulation on Windows has been improved.

 Will merge to 'master'.
 source: <7265e37f-fd29-3579-b840-19a1df52a59f@web.de>


* jt/fetch-pack-trace2-filter-spec (2022-07-18) 1 commit
 - fetch-pack: write effective filter to trace2

 "git fetch" client logs the partial clone filter used in the trace2
 output.

 Will merge to 'next'?
 source: <20220718170027.3993042-1-jonathantanmy@google.com>


* mb/doc-rerere-autoupdate (2022-07-15) 1 commit
 - cherry-pick doc: clarify no-rerere-autoupdate still allows rerere

 Clarifies that the "--no-rerere-autoupdate" option does not disable
 the "rerere" mechanism (nor does "--rerere-autoupdate" enable it).

 Will merge to 'next'?
 source: <20220715092527.1567837-1-mail@beyermatthias.de>


* rs/mergesort (2022-07-17) 10 commits
 - mergesort: remove llist_mergesort()
 - packfile: use DEFINE_LIST_SORT
 - fetch-pack: use DEFINE_LIST_SORT
 - commit: use DEFINE_LIST_SORT
 - blame: use DEFINE_LIST_SORT
 - test-mergesort: use DEFINE_LIST_SORT
 - test-mergesort: use DEFINE_LIST_SORT_DEBUG
 - mergesort: add macros for typed sort of linked lists
 - mergesort: tighten merge loop
 - mergesort: unify ranks loops

 Make our mergesort implementation type-safe.

 Will merge to 'next'?
 source: <4d7cd286-398e-215c-f2bd-aa7e8207be4f@web.de>


* cw/submodule-merge-messages (2022-07-18) 1 commit
 - submodule merge: update conflict error message

 Update the message given when "git merge" sees conflicts at a path
 with a submodule while merging a superproject.

 Needs review.
 source: <20220718214349.3379328-1-calvinwan@google.com>


* ds/doc-wo-whitelist (2022-07-19) 5 commits
 - transport.c: avoid "whitelist"
 - t: avoid "whitelist"
 - git.txt: remove redundant language
 - git-cvsserver: clarify directory list
 - daemon: clarify directory arguments

 Avoid "white/black-list" in documentation and code comments.

 Will merge to 'next'.
 source: <pull.1274.v3.git.1658255537.gitgitgadget@gmail.com>


* js/vimdiff-quotepath-fix (2022-07-14) 1 commit
  (merged to 'next' on 2022-07-15 at 4273bbd4b4)
 + mergetool(vimdiff): allow paths to contain spaces again

 Variable quoting fix in the vimdiff driver of "git mergetool"

 Will merge to 'master'.
 source: <pull.1287.v2.git.1657809063728.gitgitgadget@gmail.com>


* mt/checkout-count-fix (2022-07-14) 3 commits
 - checkout: fix two bugs on the final count of updated entries
 - checkout: show bug about failed entries being included in final report
 - checkout: document bug where delayed checkout counts entries twice

 "git checkout" miscounted the paths it updated, which has been
 corrected.

 Will merge to 'next'?
 source: <cover.1657799213.git.matheus.bernardino@usp.br>


* tb/commit-graph-genv2-upgrade-fix (2022-07-15) 3 commits
 - commit-graph: fix corrupt upgrade from generation v1 to v2
 - commit-graph: introduce `repo_find_commit_pos_in_graph()`
 - t5318: demonstrate commit-graph generation v2 corruption

 There was a bug in the codepath to upgrade generation information
 in commit-graph from v1 to v2 format, which has been corrected.

 Will merge to 'next'?
 source: <cover.1657667404.git.me@ttaylorr.com>


* js/safe-directory-plus (2022-07-13) 3 commits
 - mingw: be more informative when ownership check fails on FAT32
 - mingw: handle a file owned by the Administrators group correctly
 - Allow debugging unsafe directories' ownership

 Needs review.
 source: <pull.1286.git.1657700238.gitgitgadget@gmail.com>


* po/doc-add-renormalize (2022-07-09) 1 commit
 - doc add: renormalize is not idempotent for CRCRLF

 Documentation for "git add --renormalize" has been improved.

 Expecting a reroll.
 cf. <dfe0c1ab-33f8-f13e-71ce-1829bb0d2d7f@iee.email>
 source: <d3b8ed97a105ea1d7e656c964b7eee378e11ede6.1657385781.git.gitgitgadget@gmail.com>


* po/glossary-around-traversal (2022-07-09) 3 commits
 - glossary: add reachability bitmap description
 - glossary: add commit graph description
 - glossary: add Object DataBase (ODB) abbreviation

 The glossary entries for "commit-graph file" and "reachability
 bitmap" have been added.

 Expecting a reroll.
 cf. <dfe0c1ab-33f8-f13e-71ce-1829bb0d2d7f@iee.email>
 source: <pull.1282.git.1657385781.gitgitgadget@gmail.com>


* ac/bitmap-lookup-table (2022-07-06) 6 commits
 - p5310-pack-bitmaps.sh: remove pack.writeReverseIndex
 - bitmap-lookup-table: add performance tests for lookup table
 - pack-bitmap: prepare to read lookup table extension
 - pack-bitmap-write: learn pack.writeBitmapLookupTable and add tests
 - pack-bitmap-write.c: write lookup table extension
 - Documentation/technical: describe bitmap lookup table extension

 The pack bitmap file gained a bitmap-lookup table to speed up
 locating the necessary bitmap for a given commit.

 Waiting for a more thorough review.
 cf. <Ys4DjW9JjQFx5Bhb@nand.local>
 source: <pull.1266.v3.git.1656924376.gitgitgadget@gmail.com>


* kk/p4-client-name-encoding-fix (2022-07-08) 1 commit
  (merged to 'next' on 2022-07-11 at 9c18616f76)
 + git-p4: fix bug with encoding of p4 client name

 "git p4" did not handle non-ASCII client name well, which has been
 corrected.

 On hold, waiting for a follow-up.
 cf. <xmqqcze2s7h0.fsf@gitster.g>
 source: <pull.1285.git.git.1657267260405.gitgitgadget@gmail.com>


* sa/cat-file-mailmap (2022-07-18) 4 commits
 - cat-file: add mailmap support
 - ident: rename commit_rewrite_person() to apply_mailmap_to_header()
 - ident: move commit_rewrite_person() to ident.c
 - revision: improve commit_rewrite_person()

 "git cat-file" learned an option to use the mailmap when showing
 commit and tag objects.

 Will merge to 'next'?
 source: <20220718195102.66321-1-siddharthasthana31@gmail.com>


* ds/rebase-update-ref (2022-07-19) 13 commits
 - sequencer: notify user of --update-refs activity
 - sequencer: ignore HEAD ref under --update-refs
 - rebase: add rebase.updateRefs config option
 - sequencer: rewrite update-refs as user edits todo list
 - rebase: update refs from 'update-ref' commands
 - rebase: add --update-refs option
 - sequencer: add update-ref command
 - sequencer: define array with enum values
 - rebase-interactive: update 'merge' description
 - branch: consider refs under 'update-refs'
 - t2407: test branches currently using apply backend
 - t2407: test bisect and rebase as black-boxes
 - Merge branch 'ds/branch-checked-out' into ds/rebase-update-ref

 "git rebase -i" learns to update branches whose tip appear in the
 rebased range.

 Will merge to 'next'?
 source: <pull.1247.v5.git.1658255624.gitgitgadget@gmail.com>


* pw/xdiff-alloc (2022-07-08) 4 commits
 - xdiff: introduce XDL_ALLOC_GROW()
 - xdiff: introduce XDL_CALLOC_ARRAY()
 - xdiff: introduce xdl_calloc
 - xdiff: introduce XDL_ALLOC_ARRAY()

 Add a level of redirection to array allocation API in xdiff part,
 to make it easier to share with the libgit2 project.

 Will merge to 'next'?
 source: <pull.1272.v2.git.1657297519.gitgitgadget@gmail.com>


* ab/squelch-empty-fsync-traces (2022-07-18) 1 commit
  (merged to 'next' on 2022-07-19 at f77cd40c29)
 + trace2: only include "fsync" events if we git_fsync()

 Omit fsync-related trace2 entries when their values are all zero.

 Will merge to 'master'.
 source: <patch-v3-1.1-979dea5956a-20220718T102747Z-avarab@gmail.com>


* en/merge-restore-to-pristine (2022-06-21) 6 commits
 - merge: do not exit restore_state() prematurely
 - merge: ensure we can actually restore pre-merge state
 - merge: make restore_state() restore staged state too
 - merge: fix save_state() to work when there are racy-dirty files
 - merge: remove unused variable
 - t6424: make sure a failed merge preserves local changes

 When "git merge" finds that it cannot perform a merge, it should
 restore the working tree to the state before the command was
 initiated, but in some corner cases it didn't.

 Under review.
 source: <pull.1231.v2.git.1655621424.gitgitgadget@gmail.com>


* tk/apply-case-insensitive (2022-06-21) 3 commits
 - apply: support case-only renames in case-insensitive filesystems
 - reset: new failing test for reset of case-insensitive duplicate in index
 - t4141: test "git apply" with core.ignorecase

 "git apply" barfed on a patch that makes a case-only rename on a
 case-insensitive filesystem.

 Needs review.
 source: <pull.1257.v2.git.1655655027.gitgitgadget@gmail.com>


* zh/ls-files-format (2022-07-13) 1 commit
 - ls-files: introduce "--format" option

 "git ls-files" learns the "--format" option to tweak its output.

 Will merge to 'next'?
 source: <pull.1262.v7.git.1657692472994.gitgitgadget@gmail.com>


* js/commit-graph-parsing-without-repo-settings (2022-07-14) 1 commit
  (merged to 'next' on 2022-07-19 at bcc29d823d)
 + commit-graph: pass repo_settings instead of repository

 API tweak to make it easier to run fuzz testing on commit-graph parser.

 Will merge to 'master'.
 source: <fd70b6119153b165a62ee4f693dbe47031cfb2be.1657834657.git.steadmon@google.com>


* jt/connected-show-missing-from-which-side (2022-06-10) 1 commit
 - fetch,fetch-pack: clarify connectivity check error

 We may find an object missing after a "git fetch" stores the
 objects it obtained from the other side, but it is not necessarily
 because the remote failed to send necessary objects.  Reword the
 messages in an attempt to help users explore other possibilities
 when they hit this error.

 Expecting a reroll.
 source: <20220610195247.1177549-1-jonathantanmy@google.com>


* tb/show-ref-count (2022-06-06) 2 commits
 - builtin/show-ref.c: limit output with `--count`
 - builtin/show-ref.c: rename `found_match` to `matches_nr`

 "git show-ref" learned to stop after emitting N refs with the new
 "--count=N" option.

 Expecting a reroll.
 cf. <xmqqczfl4ce1.fsf@gitster.g>
 source: <cover.1654552560.git.me@ttaylorr.com>


* ds/bundle-uri-more (2022-06-06) 6 commits
 - fetch: add 'refs/bundle/' to log.excludeDecoration
 - bundle-uri: add support for http(s):// and file://
 - fetch: add --bundle-uri option
 - bundle-uri: create basic file-copy logic
 - remote-curl: add 'get' capability
 - docs: document bundle URI standard

 The "bundle URI" topic.

 Needs review.
 source: <pull.1248.git.1654545325.gitgitgadget@gmail.com>


* js/bisect-in-c (2022-06-27) 16 commits
 - bisect: no longer try to clean up left-over `.git/head-name` files
 - bisect: remove Cogito-related code
 - Turn `git bisect` into a full built-in
 - bisect: move even the command-line parsing to `bisect--helper`
 - bisect: teach the `bisect--helper` command to show the correct usage strings
 - bisect--helper: return only correct exit codes in `cmd_*()`
 - bisect--helper: move the `BISECT_STATE` case to the end
 - bisect--helper: make `--bisect-state` optional
 - bisect--helper: align the sub-command order with git-bisect.sh
 - bisect--helper: using `--bisect-state` without an argument is a bug
 - bisect--helper: really retire `--bisect-autostart`
 - bisect--helper: really retire --bisect-next-check
 - bisect--helper: retire the --no-log option
 - bisect: avoid double-quoting when printing the failed command
 - bisect run: fix the error message
 - bisect: verify that a bogus option won't try to start a bisection

 Final bits of "git bisect.sh" have been rewritten in C.

 Expecting a (hopefully final) reroll.
 cf. <20627.86ilolhnnn.gmgdl@evledraar.gmail.com>
 source: <pull.1132.v4.git.1656354677.gitgitgadget@gmail.com>


* gc/bare-repo-discovery (2022-07-14) 5 commits
  (merged to 'next' on 2022-07-15 at 5206577852)
 + setup.c: create `safe.bareRepository`
 + safe.directory: use git_protected_config()
 + config: learn `git_protected_config()`
 + Documentation: define protected configuration
 + Documentation/git-config.txt: add SCOPES section

 Introduce a discovery.barerepository configuration variable that
 allows users to forbid discovery of bare repositories.

 Will merge to 'master'.
 source: <pull.1261.v8.git.git.1657834081.gitgitgadget@gmail.com>

--------------------------------------------------
[Discarded]

* ar/send-email-confirm-by-default (2022-04-22) 1 commit
 . send-email: always confirm by default

 "git send-email" is changed so that by default it asks for
 confirmation before sending each message out.

 Discarded.
 I wanted to like this, and had it in the version of Git I use
 myself for daily work, but the prompting turned out to be somewhat
 distracting.
 source: <20220422083629.1404989-1-hi@alyssa.is>

^ permalink raw reply	[relevance 3%]

* Re: [PATCH v2 3/6] merge: fix save_state() to work when there are racy-dirty files
  2022-07-19 22:49  2%       ` Junio C Hamano
@ 2022-07-21  1:09  2%         ` Elijah Newren
  0 siblings, 0 replies; 200+ results
From: Elijah Newren @ 2022-07-21  1:09 UTC (permalink / raw)
  To: Junio C Hamano; +Cc: ZheNing Hu, Elijah Newren via GitGitGadget, Git List

On Tue, Jul 19, 2022 at 3:49 PM Junio C Hamano <gitster@pobox.com> wrote:
>
> ZheNing Hu <adlternative@gmail.com> writes:
>
> > Elijah Newren via GitGitGadget <gitgitgadget@gmail.com> 于2022年6月19日周日 14:50写道:
> >>
> >> From: Elijah Newren <newren@gmail.com>
> >>
> >> When there are racy-dirty files, but no files are modified,
> >> `git stash create` exits with unsuccessful status.  This causes merge
> >> to fail.  Refresh the index first to avoid this problem.
>
> Racily dirty?  Or just being stat-dirty is sufficient to cause the
> "stash create" to fail?
>
> > I just want to show what sence will meet this errors:
> >
> > 1. touch file
> > 2. git add file
> > 3. git stash push (user may do it before git merge)
> > 4. touch file (update file but not update its content)
> > 5. git merge (call git stash create and return 1)
>
> I think, from the above reproduction recipe, that the breakage does
> not depend on racily-clean index entries (i.e. file touched within
> the same timestamp as the last write of the index without changing
> their size).  So s/racy-dirty/stat-dirty/ (both on the title and the
> body) would be a sufficient fix.

Yep, stat-dirty.  I'll fix up the title and body; thanks.

^ permalink raw reply	[relevance 2%]

* Re: [PATCH v2 4/6] merge: make restore_state() restore staged state too
  @ 2022-07-21  1:37  3%         ` Elijah Newren
  0 siblings, 0 replies; 200+ results
From: Elijah Newren @ 2022-07-21  1:37 UTC (permalink / raw)
  To: Junio C Hamano
  Cc: Elijah Newren via GitGitGadget, Git Mailing List, ZheNing Hu

On Tue, Jul 19, 2022 at 4:28 PM Junio C Hamano <gitster@pobox.com> wrote:
>
> Junio C Hamano <gitster@pobox.com> writes:
>
> > "Elijah Newren via GitGitGadget" <gitgitgadget@gmail.com> writes:
> >
> >> From: Elijah Newren <newren@gmail.com>
> >>
> >> merge can be invoked with uncommitted changes, including staged changes.
> >> merge is responsible for restoring this state if some of the merge
> >> strategies make changes.  However, it was not restoring staged changes
> >> due to the lack of the "--index" option to "git stash apply".  Add the
> >> option to fix this shortcoming.
> >
> > Shouldn't this be testable?

Yes, I will add a test.

> I actually take this part (which implied that the change is a good
> idea) back. I think we have clearly documented for the past 17
> years that you can have local changes but your index must match the
> HEAD before you start your merge.

Actually, we don't enforce that the index must match HEAD in all
cases, as noted in commit 55f39cf755 ("merge: fix misleading pre-merge
check documentation", 2018-06-30).  That commit also pointed out how
the documentation was a bit unclear in this area.

We also apparently fail to enforce the condition in at least two cases
that weren't a valid exception, which I just found while working on a
testcase for this patch.  (Thus, we have one more sordid tale to add
to the saga in commit 9822175d2b ("Ensure index matches head before
invoking merge machinery, round N", 2019-08-17))

However, the failed enforcement and the "valid" special exceptions
aren't too relevant here, so...

> If "stash apply" vs "stash apply --index" makes any difference,
> there is something wrong.  We should be aborting the "git merge"
> even before we even start mucking with the working tree and the
> index with strategies, no?  I think it is the bug, if this change
> makes any difference, to be fixed---we shouldn't be proceeding to
> even create a stash with index changes to begin with.

I agree with you that generally if the index does not match HEAD, then
(A) we should abort the merge, and (B) the working tree and index need
to be left intact when the merge aborts.

But I don't think your conclusion follows from those two items,
because of the last sentence of this comment:

   /*
    * At this point, we need a real merge.  No matter what strategy
    * we use, it would operate on the index, possibly affecting the
    * working tree, and when resolved cleanly, have the desired
    * tree in the index -- this means that the index must be in
    * sync with the head commit.  The strategies are responsible
    * to ensure this.
    */

Due to this requirement, if a user has staged changes before starting
the merge, builtin/merge.c will:

   * stash the changes
   * try all the merge strategies in turn, each of which report they
cannot function due to index not matching HEAD
   * restore the changes via "git stash apply"

This sequence has the net effect of not quite cleanly aborting the
merge -- it also unstashes the user's changes.

One way to fix this problem is the simple patch I proposed.  An
alternative fix would be to rip out the extra code from all the merge
strategies that enforces the index matches HEAD requirement, and then
adding enforcement of that condition early in builtin/merge.c.  That
alternative fix probably would have saved us from a lot of the
headache detailed in commit 9822175d2b above, but it may also make
recursive and ort a bit slower (which had relied on unpack-trees to do
some of this checking, and thus they'd have some redundant checks).

^ permalink raw reply	[relevance 3%]

* [PATCH v3 0/7] Fix merge restore state
  2022-06-19  6:50  3% ` [PATCH v2 0/6] " Elijah Newren via GitGitGadget
  2022-06-19  6:50  2%   ` [PATCH v2 3/6] merge: fix save_state() to work when there are racy-dirty files Elijah Newren via GitGitGadget
  @ 2022-07-21  8:16  3%   ` Elijah Newren via GitGitGadget
  2022-07-21  8:16  2%     ` [PATCH v3 2/7] merge-resolve: abort if index does not match HEAD Elijah Newren via GitGitGadget
                       ` (3 more replies)
  2 siblings, 4 replies; 200+ results
From: Elijah Newren via GitGitGadget @ 2022-07-21  8:16 UTC (permalink / raw)
  To: git
  Cc: ZheNing Hu, Eric Sunshine, Junio C Hamano,
	Ævar Arnfjörð Bjarmason, Elijah Newren,
	Elijah Newren

NOTE: Rebased on master, yet again, because (1) Junio merged his commit to
master separately, and (2) Ævar's intentional duplication of my second
patch[1] later conflicted with other changes I had to make in the same area.
(Which isn't a big deal, but for future reference, it would be nicer to
avoid conflicts by omitting the fixup I had already submitted[2] instead of
intentionally duplicating it).

This started as a simple series to fix restore_state() in builtin/merge.c,
fixing an issue reported by ZheNing Hu[3]. It's grown so much it's hard to
call it simple. Anyway...

Changes since v2:

 * Removed the first two patches, as noted above in the comment about
   rebasing.
 * Inserted new patches 3, 4, and 5 to fix some related bugs. Folks are more
   likely to object to patch 5 than the others; people should probably take
   a look at that one if they have limited time.
 * Dramatically reworded commit messages given the misunderstandings of what
   was being addressed and done. Hopefully it is much clearer what the last
   three patches are doing and what they are not doing, and why.
 * Added several new testcases

[1]
https://lore.kernel.org/git/patch-1.1-7d90f26b73f-20220520T115426Z-avarab@gmail.com/
[2] https://lore.kernel.org/git/xmqqedyyghsc.fsf@gitster.g/ [3]
https://lore.kernel.org/git/CAOLTT8R7QmpvaFPTRs3xTpxr7eiuxF-ZWtvUUSC0-JOo9Y+SqA@mail.gmail.com/

Elijah Newren (7):
  merge-ort-wrappers: make printed message match the one from recursive
  merge-resolve: abort if index does not match HEAD
  merge: do not abort early if one strategy fails to handle the merge
  merge: fix save_state() to work when there are stat-dirty files
  merge: make restore_state() restore staged state too
  merge: ensure we can actually restore pre-merge state
  merge: do not exit restore_state() prematurely

 builtin/merge.c                          | 59 ++++++++++++++++++------
 git-merge-resolve.sh                     | 10 ++++
 merge-ort-wrappers.c                     |  7 ++-
 t/t6402-merge-rename.sh                  |  2 +-
 t/t6424-merge-unrelated-index-changes.sh | 58 +++++++++++++++++++++++
 t/t6439-merge-co-error-msgs.sh           |  1 +
 t/t7607-merge-state.sh                   | 32 +++++++++++++
 7 files changed, 154 insertions(+), 15 deletions(-)
 create mode 100755 t/t7607-merge-state.sh


base-commit: e72d93e88cb20b06e88e6e7d81bd1dc4effe453f
Published-As: https://github.com/gitgitgadget/git/releases/tag/pr-1231%2Fnewren%2Ffix-merge-restore-state-v3
Fetch-It-Via: git fetch https://github.com/gitgitgadget/git pr-1231/newren/fix-merge-restore-state-v3
Pull-Request: https://github.com/gitgitgadget/git/pull/1231

Range-diff vs v2:

 1:  6147e72c309 < -:  ----------- t6424: make sure a failed merge preserves local changes
 2:  230d84f09c8 < -:  ----------- merge: remove unused variable
 -:  ----------- > 1:  e39b2e15ece merge-ort-wrappers: make printed message match the one from recursive
 -:  ----------- > 2:  2810dec7608 merge-resolve: abort if index does not match HEAD
 -:  ----------- > 3:  b41853e3f99 merge: do not abort early if one strategy fails to handle the merge
 3:  89e5e633241 ! 4:  64700338a28 merge: fix save_state() to work when there are racy-dirty files
     @@ Metadata
      Author: Elijah Newren <newren@gmail.com>
      
       ## Commit message ##
     -    merge: fix save_state() to work when there are racy-dirty files
     +    merge: fix save_state() to work when there are stat-dirty files
      
     -    When there are racy-dirty files, but no files are modified,
     +    When there are stat-dirty files, but no files are modified,
          `git stash create` exits with unsuccessful status.  This causes merge
     -    to fail.  Refresh the index first to avoid this problem.
     +    to fail.  Copy some code from sequencer.c's create_autostash to refresh
     +    the index first to avoid this problem.
      
          Signed-off-by: Elijah Newren <newren@gmail.com>
      
     @@ builtin/merge.c: static int save_state(struct object_id *stash)
       	strvec_pushl(&cp.args, "stash", "create", NULL);
       	cp.out = -1;
       	cp.git_cmd = 1;
     +
     + ## t/t6424-merge-unrelated-index-changes.sh ##
     +@@ t/t6424-merge-unrelated-index-changes.sh: test_expect_success 'subtree' '
     + 	test_path_is_missing .git/MERGE_HEAD
     + '
     + 
     ++test_expect_success 'avoid failure due to stat-dirty files' '
     ++	git reset --hard &&
     ++	git checkout B^0 &&
     ++
     ++	# Make "a" be stat-dirty
     ++	test-tool chmtime =+1 a &&
     ++
     ++	# stat-dirty file should not prevent stash creation in builtin/merge.c
     ++	git merge -s resolve -s recursive D^0
     ++'
     ++
     + test_expect_success 'resolve && recursive && ort' '
     + 	git reset --hard &&
     + 	git checkout B^0 &&
 4:  4a8b7c9e06d ! 5:  91c495c770e merge: make restore_state() restore staged state too
     @@ Metadata
       ## Commit message ##
          merge: make restore_state() restore staged state too
      
     -    merge can be invoked with uncommitted changes, including staged changes.
     -    merge is responsible for restoring this state if some of the merge
     -    strategies make changes.  However, it was not restoring staged changes
     -    due to the lack of the "--index" option to "git stash apply".  Add the
     -    option to fix this shortcoming.
     +    There are multiple issues at play here:
     +
     +      1) If `git merge` is invoked with staged changes, it should abort
     +         without doing any merging, and the user's working tree and index
     +         should be the same as before merge was invoked.
     +      2) Merge strategies are responsible for enforcing the index == HEAD
     +         requirement. (See 9822175d2b ("Ensure index matches head before
     +         invoking merge machinery, round N", 2019-08-17) for some history
     +         around this.)
     +      3) Merge strategies can bail saying they are not an appropriate
     +         handler for the merge in question (possibly allowing other
     +         strategies to be used instead).
     +      4) Merge strategies can make changes to the index and working tree,
     +         and have no expectation to clean up after themselves, *even* if
     +         they bail out and say they are not an appropriate handler for
     +         the merge in question.  (The `octopus` merge strategy does this,
     +         for example.)
     +      5) Because of (3) and (4), builtin/merge.c stashes state before
     +         trying merge strategies and restores it afterward.
     +
     +    Unfortunately, if users had staged changes before calling `git merge`,
     +    builtin/merge.c could do the following:
     +
     +       * stash the changes, in order to clean up after the strategies
     +       * try all the merge strategies in turn, each of which report they
     +         cannot function due to the index not matching HEAD
     +       * restore the changes via "git stash apply"
     +
     +    But that last step would have the net effect of unstaging the user's
     +    changes.  Fix this by adding the "--index" option to "git stash apply".
     +    While at it, also squelch the stash apply output; we already report
     +    "Rewinding the tree to pristine..." and don't need a detailed `git
     +    status` report afterwards.
      
          Signed-off-by: Elijah Newren <newren@gmail.com>
      
     @@ builtin/merge.c: static void reset_hard(const struct object_id *oid, int verbose
       			  const struct object_id *stash)
       {
      -	const char *args[] = { "stash", "apply", NULL, NULL };
     -+	const char *args[] = { "stash", "apply", "--index", NULL, NULL };
     ++	const char *args[] = { "stash", "apply", "--index", "--quiet",
     ++			       NULL, NULL };
       
       	if (is_null_oid(stash))
       		return;
     @@ builtin/merge.c: static void reset_hard(const struct object_id *oid, int verbose
       	reset_hard(head, 1);
       
      -	args[2] = oid_to_hex(stash);
     -+	args[3] = oid_to_hex(stash);
     ++	args[4] = oid_to_hex(stash);
       
       	/*
       	 * It is OK to ignore error here, for example when there was
     +
     + ## t/t6424-merge-unrelated-index-changes.sh ##
     +@@ t/t6424-merge-unrelated-index-changes.sh: test_expect_success 'resolve && recursive && ort' '
     + 
     + 	test_seq 0 10 >a &&
     + 	git add a &&
     ++	git rev-parse :a >expect &&
     + 
     + 	sane_unset GIT_TEST_MERGE_ALGORITHM &&
     + 	test_must_fail git merge -s resolve -s recursive -s ort C^0 >output 2>&1 &&
     +@@ t/t6424-merge-unrelated-index-changes.sh: test_expect_success 'resolve && recursive && ort' '
     + 	grep "Trying merge strategy resolve..." output &&
     + 	grep "Trying merge strategy recursive..." output &&
     + 	grep "Trying merge strategy ort..." output &&
     +-	grep "No merge strategy handled the merge." output
     ++	grep "No merge strategy handled the merge." output &&
     ++
     ++	# Changes to "a" should remain staged
     ++	git rev-parse :a >actual &&
     ++	test_cmp expect actual
     + '
     + 
     + test_done
 5:  a03075167c1 ! 6:  887967c1f3f merge: ensure we can actually restore pre-merge state
     @@ Metadata
       ## Commit message ##
          merge: ensure we can actually restore pre-merge state
      
     -    Merge strategies can fail -- not just have conflicts, but give up and
     -    say that they are unable to handle the current type of merge.  However,
     -    they can also make changes to the index and working tree before giving
     -    up; merge-octopus does this, for example.  Currently, we do not expect
     -    the individual strategies to clean up after themselves, but instead
     -    expect builtin/merge.c to do so.  For it to be able to, it needs to save
     -    the state before trying the merge strategy so it can have something to
     -    restore to.  Therefore, remove the shortcut bypassing the save_state()
     -    call.
     +    Merge strategies can:
     +      * succeed with a clean merge
     +      * succeed with a conflicted merge
     +      * fail to handle the given type of merge
     +
     +    If one is thinking in terms of automatic mergeability, they would use
     +    the word "fail" instead of "succeed" for the second bullet, but I am
     +    focusing here on ability of the merge strategy to handle the given
     +    inputs, not on whether the given inputs are mergeable.  The third
     +    category is about the merge strategy failing to know how to handle the
     +    given data; examples include:
     +
     +      * Passing more than 2 branches to 'recursive' or 'ort'
     +      * Passing 2 or fewer branches to 'octopus'
     +      * Trying to do more complicated merges with 'resolve' (I believe
     +        directory/file conflicts will cause it to bail.)
     +      * Octopus running into a merge conflict for any branch OTHER than
     +        the final one (see the "exit 2" codepath of commit 98efc8f3d8
     +        ("octopus: allow manual resolve on the last round.", 2006-01-13))
     +
     +    That final one is particularly interesting, because it shows that the
     +    merge strategy can muck with the index and working tree, and THEN bail
     +    and say "sorry, this strategy cannot handle this type of merge; use
     +    something else".
     +
     +    Further, we do not currently expect the individual strategies to clean
     +    up after themselves, but instead expect builtin/merge.c to do so.  For
     +    it to be able to, it needs to save the state before trying the merge
     +    strategy so it can have something to restore to.  Therefore, remove the
     +    shortcut bypassing the save_state() call.
     +
     +    There is another bug on the restore_state() side of things, so no
     +    testcase will be added until the next commit when we have addressed that
     +    issue as well.
      
          Signed-off-by: Elijah Newren <newren@gmail.com>
      
     @@ builtin/merge.c: int cmd_merge(int argc, const char **argv, const char *prefix)
       	 * sync with the head commit.  The strategies are responsible
       	 * to ensure this.
      +	 *
     -+	 * Stash away the local changes so that we can try more than one.
     ++	 * Stash away the local changes so that we can try more than one
     ++	 * and/or recover from merge strategies bailing while leaving the
     ++	 * index and working tree polluted.
       	 */
      -	if (use_strategies_nr == 1 ||
      -	    /*
 6:  0783b48c121 ! 7:  81c40492a62 merge: do not exit restore_state() prematurely
     @@ Commit message
          appropriate function to do the work which would update the in-memory
          index automatically.  For now, just do the simple fix.)
      
     +    Also, add a testcase checking this, one for which the octopus strategy
     +    fails on the first commit it attempts to merge, and thus which it
     +    cannot handle at all and must completely bail on (as per the "exit 2"
     +    code path of commit 98efc8f3d8 ("octopus: allow manual resolve on the
     +    last round.", 2006-01-13)).
     +
          Reported-by: ZheNing Hu <adlternative@gmail.com>
          Signed-off-by: Elijah Newren <newren@gmail.com>
      
       ## builtin/merge.c ##
      @@ builtin/merge.c: static void restore_state(const struct object_id *head,
     - {
     - 	const char *args[] = { "stash", "apply", "--index", NULL, NULL };
     + 	const char *args[] = { "stash", "apply", "--index", "--quiet",
     + 			       NULL, NULL };
       
      -	if (is_null_oid(stash))
      -		return;
     @@ builtin/merge.c: static void restore_state(const struct object_id *head,
      +	if (is_null_oid(stash))
      +		goto refresh_cache;
      +
     - 	args[3] = oid_to_hex(stash);
     + 	args[4] = oid_to_hex(stash);
       
       	/*
      @@ builtin/merge.c: static void restore_state(const struct object_id *head,
     @@ t/t7607-merge-state.sh (new)
      +
      +test_expect_success 'set up custom strategy' '
      +	test_commit --no-tag "Initial" base base &&
     -+git show-ref &&
      +
      +	for b in branch1 branch2 branch3
      +	do
      +		git checkout -b $b main &&
     -+		test_commit --no-tag "Change on $b" base $b
     ++		test_commit --no-tag "Change on $b" base $b || return 1
      +	done &&
      +
      +	git checkout branch1 &&
     -+	test_must_fail git merge branch2 branch3 &&
     ++	# This is a merge that octopus cannot handle.  Note, that it does not
     ++	# just hit conflicts, it completely fails and says that it cannot
     ++	# handle this type of merge.
     ++	test_expect_code 2 git merge branch2 branch3 >output 2>&1 &&
     ++	grep "fatal: merge program failed" output &&
     ++	grep "Should not be doing an octopus" output &&
     ++
     ++	# Make sure we did not leave stray changes around when no appropriate
     ++	# merge strategy was found
      +	git diff --exit-code --name-status &&
      +	test_path_is_missing .git/MERGE_HEAD
      +'

-- 
gitgitgadget

^ permalink raw reply	[relevance 3%]

* [PATCH v3 4/7] merge: fix save_state() to work when there are stat-dirty files
  2022-07-21  8:16  3%   ` [PATCH v3 0/7] Fix merge restore state Elijah Newren via GitGitGadget
  2022-07-21  8:16  2%     ` [PATCH v3 2/7] merge-resolve: abort if index does not match HEAD Elijah Newren via GitGitGadget
  2022-07-21  8:16  2%     ` [PATCH v3 3/7] merge: do not abort early if one strategy fails to handle the merge Elijah Newren via GitGitGadget
@ 2022-07-21  8:16  2%     ` Elijah Newren via GitGitGadget
  2022-07-22  5:15  3%     ` [PATCH v4 0/7] Fix merge restore state Elijah Newren via GitGitGadget
  3 siblings, 0 replies; 200+ results
From: Elijah Newren via GitGitGadget @ 2022-07-21  8:16 UTC (permalink / raw)
  To: git
  Cc: ZheNing Hu, Eric Sunshine, Junio C Hamano,
	Ævar Arnfjörð Bjarmason, Elijah Newren,
	Elijah Newren, Elijah Newren

From: Elijah Newren <newren@gmail.com>

When there are stat-dirty files, but no files are modified,
`git stash create` exits with unsuccessful status.  This causes merge
to fail.  Copy some code from sequencer.c's create_autostash to refresh
the index first to avoid this problem.

Signed-off-by: Elijah Newren <newren@gmail.com>
---
 builtin/merge.c                          |  8 ++++++++
 t/t6424-merge-unrelated-index-changes.sh | 11 +++++++++++
 2 files changed, 19 insertions(+)

diff --git a/builtin/merge.c b/builtin/merge.c
index dec7375bf2a..4170c30317e 100644
--- a/builtin/merge.c
+++ b/builtin/merge.c
@@ -313,8 +313,16 @@ static int save_state(struct object_id *stash)
 	int len;
 	struct child_process cp = CHILD_PROCESS_INIT;
 	struct strbuf buffer = STRBUF_INIT;
+	struct lock_file lock_file = LOCK_INIT;
+	int fd;
 	int rc = -1;
 
+	fd = repo_hold_locked_index(the_repository, &lock_file, 0);
+	refresh_cache(REFRESH_QUIET);
+	if (0 <= fd)
+		repo_update_index_if_able(the_repository, &lock_file);
+	rollback_lock_file(&lock_file);
+
 	strvec_pushl(&cp.args, "stash", "create", NULL);
 	cp.out = -1;
 	cp.git_cmd = 1;
diff --git a/t/t6424-merge-unrelated-index-changes.sh b/t/t6424-merge-unrelated-index-changes.sh
index 8b749e19083..3019d030e07 100755
--- a/t/t6424-merge-unrelated-index-changes.sh
+++ b/t/t6424-merge-unrelated-index-changes.sh
@@ -268,6 +268,17 @@ test_expect_success 'subtree' '
 	test_path_is_missing .git/MERGE_HEAD
 '
 
+test_expect_success 'avoid failure due to stat-dirty files' '
+	git reset --hard &&
+	git checkout B^0 &&
+
+	# Make "a" be stat-dirty
+	test-tool chmtime =+1 a &&
+
+	# stat-dirty file should not prevent stash creation in builtin/merge.c
+	git merge -s resolve -s recursive D^0
+'
+
 test_expect_success 'resolve && recursive && ort' '
 	git reset --hard &&
 	git checkout B^0 &&
-- 
gitgitgadget


^ permalink raw reply related	[relevance 2%]

* [PATCH v3 3/7] merge: do not abort early if one strategy fails to handle the merge
  2022-07-21  8:16  3%   ` [PATCH v3 0/7] Fix merge restore state Elijah Newren via GitGitGadget
  2022-07-21  8:16  2%     ` [PATCH v3 2/7] merge-resolve: abort if index does not match HEAD Elijah Newren via GitGitGadget
@ 2022-07-21  8:16  2%     ` Elijah Newren via GitGitGadget
  2022-07-21  8:16  2%     ` [PATCH v3 4/7] merge: fix save_state() to work when there are stat-dirty files Elijah Newren via GitGitGadget
  2022-07-22  5:15  3%     ` [PATCH v4 0/7] Fix merge restore state Elijah Newren via GitGitGadget
  3 siblings, 0 replies; 200+ results
From: Elijah Newren via GitGitGadget @ 2022-07-21  8:16 UTC (permalink / raw)
  To: git
  Cc: ZheNing Hu, Eric Sunshine, Junio C Hamano,
	Ævar Arnfjörð Bjarmason, Elijah Newren,
	Elijah Newren, Elijah Newren

From: Elijah Newren <newren@gmail.com>

builtin/merge is setup to allow multiple strategies to be specified,
and it will find the "best" result and use it.  This is defeated if
some of the merge strategies abort early when they cannot handle the
merge.  Fix the logic that calls recursive and ort to not do such an
early abort, but instead return "2" or "unhandled" so that the next
strategy can try to handle the merge.

Coming up with a testcase for this is somewhat difficult, since
recursive and ort both handle nearly any two-headed merge (there is
a separate code path that checks for non-two-headed merges and
already returns "2" for them).  So use a somewhat synthetic testcase
of having the index not match HEAD before the merge starts, since all
merge strategies will abort for that.

Signed-off-by: Elijah Newren <newren@gmail.com>
---
 builtin/merge.c                          |  6 ++++--
 t/t6402-merge-rename.sh                  |  2 +-
 t/t6424-merge-unrelated-index-changes.sh | 16 ++++++++++++++++
 t/t6439-merge-co-error-msgs.sh           |  1 +
 4 files changed, 22 insertions(+), 3 deletions(-)

diff --git a/builtin/merge.c b/builtin/merge.c
index 13884b8e836..dec7375bf2a 100644
--- a/builtin/merge.c
+++ b/builtin/merge.c
@@ -754,8 +754,10 @@ static int try_merge_strategy(const char *strategy, struct commit_list *common,
 		else
 			clean = merge_recursive(&o, head, remoteheads->item,
 						reversed, &result);
-		if (clean < 0)
-			exit(128);
+		if (clean < 0) {
+			rollback_lock_file(&lock);
+			return 2;
+		}
 		if (write_locked_index(&the_index, &lock,
 				       COMMIT_LOCK | SKIP_IF_UNCHANGED))
 			die(_("unable to write %s"), get_index_file());
diff --git a/t/t6402-merge-rename.sh b/t/t6402-merge-rename.sh
index 3a32b1a45cf..772238e582c 100755
--- a/t/t6402-merge-rename.sh
+++ b/t/t6402-merge-rename.sh
@@ -210,7 +210,7 @@ test_expect_success 'updated working tree file should prevent the merge' '
 	echo >>M one line addition &&
 	cat M >M.saved &&
 	git update-index M &&
-	test_expect_code 128 git pull --no-rebase . yellow &&
+	test_expect_code 2 git pull --no-rebase . yellow &&
 	test_cmp M M.saved &&
 	rm -f M.saved
 '
diff --git a/t/t6424-merge-unrelated-index-changes.sh b/t/t6424-merge-unrelated-index-changes.sh
index f35d3182b86..8b749e19083 100755
--- a/t/t6424-merge-unrelated-index-changes.sh
+++ b/t/t6424-merge-unrelated-index-changes.sh
@@ -268,4 +268,20 @@ test_expect_success 'subtree' '
 	test_path_is_missing .git/MERGE_HEAD
 '
 
+test_expect_success 'resolve && recursive && ort' '
+	git reset --hard &&
+	git checkout B^0 &&
+
+	test_seq 0 10 >a &&
+	git add a &&
+
+	sane_unset GIT_TEST_MERGE_ALGORITHM &&
+	test_must_fail git merge -s resolve -s recursive -s ort C^0 >output 2>&1 &&
+
+	grep "Trying merge strategy resolve..." output &&
+	grep "Trying merge strategy recursive..." output &&
+	grep "Trying merge strategy ort..." output &&
+	grep "No merge strategy handled the merge." output
+'
+
 test_done
diff --git a/t/t6439-merge-co-error-msgs.sh b/t/t6439-merge-co-error-msgs.sh
index 5bfb027099a..52cf0c87690 100755
--- a/t/t6439-merge-co-error-msgs.sh
+++ b/t/t6439-merge-co-error-msgs.sh
@@ -47,6 +47,7 @@ test_expect_success 'untracked files overwritten by merge (fast and non-fast for
 		export GIT_MERGE_VERBOSITY &&
 		test_must_fail git merge branch 2>out2
 	) &&
+	echo "Merge with strategy ${GIT_TEST_MERGE_ALGORITHM:-ort} failed." >>expect &&
 	test_cmp out2 expect &&
 	git reset --hard HEAD^
 '
-- 
gitgitgadget


^ permalink raw reply related	[relevance 2%]

* [PATCH v3 2/7] merge-resolve: abort if index does not match HEAD
  2022-07-21  8:16  3%   ` [PATCH v3 0/7] Fix merge restore state Elijah Newren via GitGitGadget
@ 2022-07-21  8:16  2%     ` Elijah Newren via GitGitGadget
  2022-07-21  8:16  2%     ` [PATCH v3 3/7] merge: do not abort early if one strategy fails to handle the merge Elijah Newren via GitGitGadget
                       ` (2 subsequent siblings)
  3 siblings, 0 replies; 200+ results
From: Elijah Newren via GitGitGadget @ 2022-07-21  8:16 UTC (permalink / raw)
  To: git
  Cc: ZheNing Hu, Eric Sunshine, Junio C Hamano,
	Ævar Arnfjörð Bjarmason, Elijah Newren,
	Elijah Newren, Elijah Newren

From: Elijah Newren <newren@gmail.com>

As noted in commit 9822175d2b ("Ensure index matches head before
invoking merge machinery, round N", 2019-08-17), we have had a very
long history of problems with failing to enforce the requirement that
index matches HEAD when starting a merge.  One of the commits
referenced in the long tale of issues arising from lax enforcement of
this requirement was commit 55f39cf755 ("merge: fix misleading
pre-merge check documentation", 2018-06-30), which tried to document
the requirement and noted there were some exceptions.  As mentioned in
that commit message, the `resolve` strategy was the one strategy that
did not have an explicit index matching HEAD check, and the reason it
didn't was that I wasn't able to discover any cases where the
implementation would fail to catch the problem and abort, and didn't
want to introduce unnecessary performance overhead of adding another
check.

Well, today I discovered a testcase where the implementation does not
catch the problem and so an explicit check is needed.  Add a testcase
that previously would have failed, and update git-merge-resolve.sh to
have an explicit check.  Note that the code is copied from 3ec62ad9ff
("merge-octopus: abort if index does not match HEAD", 2016-04-09), so
that we reuse the same message and avoid making translators need to
translate some new message.

Signed-off-by: Elijah Newren <newren@gmail.com>
---
 builtin/merge.c                          | 20 ++++++++++++++++++
 git-merge-resolve.sh                     | 10 +++++++++
 t/t6424-merge-unrelated-index-changes.sh | 26 ++++++++++++++++++++++++
 3 files changed, 56 insertions(+)

diff --git a/builtin/merge.c b/builtin/merge.c
index 23170f2d2a6..13884b8e836 100644
--- a/builtin/merge.c
+++ b/builtin/merge.c
@@ -1599,6 +1599,26 @@ int cmd_merge(int argc, const char **argv, const char *prefix)
 		 */
 		refresh_cache(REFRESH_QUIET);
 		if (allow_trivial && fast_forward != FF_ONLY) {
+			/*
+			 * Must first ensure that index matches HEAD before
+			 * attempting a trivial merge.
+			 */
+			struct tree *head_tree = get_commit_tree(head_commit);
+			struct strbuf sb = STRBUF_INIT;
+
+			if (repo_index_has_changes(the_repository, head_tree,
+						   &sb)) {
+				struct strbuf err = STRBUF_INIT;
+				strbuf_addstr(&err, "error: ");
+				strbuf_addf(&err, _("Your local changes to the following files would be overwritten by merge:\n  %s"),
+					    sb.buf);
+				strbuf_addch(&err, '\n');
+				fputs(err.buf, stderr);
+				strbuf_release(&err);
+				strbuf_release(&sb);
+				return -1;
+			}
+
 			/* See if it is really trivial. */
 			git_committer_info(IDENT_STRICT);
 			printf(_("Trying really trivial in-index merge...\n"));
diff --git a/git-merge-resolve.sh b/git-merge-resolve.sh
index 343fe7bccd0..77e93121bf8 100755
--- a/git-merge-resolve.sh
+++ b/git-merge-resolve.sh
@@ -5,6 +5,16 @@
 #
 # Resolve two trees, using enhanced multi-base read-tree.
 
+. git-sh-setup
+
+# Abort if index does not match HEAD
+if ! git diff-index --quiet --cached HEAD --
+then
+    gettextln "Error: Your local changes to the following files would be overwritten by merge"
+    git diff-index --cached --name-only HEAD -- | sed -e 's/^/    /'
+    exit 2
+fi
+
 # The first parameters up to -- are merge bases; the rest are heads.
 bases= head= remotes= sep_seen=
 for arg
diff --git a/t/t6424-merge-unrelated-index-changes.sh b/t/t6424-merge-unrelated-index-changes.sh
index b6e424a427b..f35d3182b86 100755
--- a/t/t6424-merge-unrelated-index-changes.sh
+++ b/t/t6424-merge-unrelated-index-changes.sh
@@ -114,6 +114,32 @@ test_expect_success 'resolve, non-trivial' '
 	test_path_is_missing .git/MERGE_HEAD
 '
 
+test_expect_success 'resolve, trivial, related file removed' '
+	git reset --hard &&
+	git checkout B^0 &&
+
+	git rm a &&
+	test_path_is_missing a &&
+
+	test_must_fail git merge -s resolve C^0 &&
+
+	test_path_is_missing a &&
+	test_path_is_missing .git/MERGE_HEAD
+'
+
+test_expect_success 'resolve, non-trivial, related file removed' '
+	git reset --hard &&
+	git checkout B^0 &&
+
+	git rm a &&
+	test_path_is_missing a &&
+
+	test_must_fail git merge -s resolve D^0 &&
+
+	test_path_is_missing a &&
+	test_path_is_missing .git/MERGE_HEAD
+'
+
 test_expect_success 'recursive' '
 	git reset --hard &&
 	git checkout B^0 &&
-- 
gitgitgadget


^ permalink raw reply related	[relevance 2%]

* [PATCH v4 0/7] Fix merge restore state
  2022-07-21  8:16  3%   ` [PATCH v3 0/7] Fix merge restore state Elijah Newren via GitGitGadget
                       ` (2 preceding siblings ...)
  2022-07-21  8:16  2%     ` [PATCH v3 4/7] merge: fix save_state() to work when there are stat-dirty files Elijah Newren via GitGitGadget
@ 2022-07-22  5:15  3%     ` Elijah Newren via GitGitGadget
  2022-07-22  5:15  2%       ` [PATCH v4 2/7] merge-resolve: abort if index does not match HEAD Elijah Newren via GitGitGadget
                         ` (2 more replies)
  3 siblings, 3 replies; 200+ results
From: Elijah Newren via GitGitGadget @ 2022-07-22  5:15 UTC (permalink / raw)
  To: git; +Cc: ZheNing Hu, Eric Sunshine, Junio C Hamano, Elijah Newren,
	Elijah Newren

This started as a simple series to fix restore_state() in builtin/merge.c,
fixing an issue reported by ZheNing Hu[3]. It's grown so much it's hard to
call it simple. Anyway...

Changes since v3:

 * Removed some accidental &nbsp; characters from a commit message
 * Made use of the error() function to simplify the first patch

[1]
https://lore.kernel.org/git/CAOLTT8R7QmpvaFPTRs3xTpxr7eiuxF-ZWtvUUSC0-JOo9Y+SqA@mail.gmail.com/

Elijah Newren (7):
  merge-ort-wrappers: make printed message match the one from recursive
  merge-resolve: abort if index does not match HEAD
  merge: do not abort early if one strategy fails to handle the merge
  merge: fix save_state() to work when there are stat-dirty files
  merge: make restore_state() restore staged state too
  merge: ensure we can actually restore pre-merge state
  merge: do not exit restore_state() prematurely

 builtin/merge.c                          | 59 ++++++++++++++++++------
 git-merge-resolve.sh                     | 10 ++++
 merge-ort-wrappers.c                     |  4 +-
 t/t6402-merge-rename.sh                  |  2 +-
 t/t6424-merge-unrelated-index-changes.sh | 58 +++++++++++++++++++++++
 t/t6439-merge-co-error-msgs.sh           |  1 +
 t/t7607-merge-state.sh                   | 32 +++++++++++++
 7 files changed, 150 insertions(+), 16 deletions(-)
 create mode 100755 t/t7607-merge-state.sh


base-commit: e72d93e88cb20b06e88e6e7d81bd1dc4effe453f
Published-As: https://github.com/gitgitgadget/git/releases/tag/pr-1231%2Fnewren%2Ffix-merge-restore-state-v4
Fetch-It-Via: git fetch https://github.com/gitgitgadget/git pr-1231/newren/fix-merge-restore-state-v4
Pull-Request: https://github.com/gitgitgadget/git/pull/1231

Range-diff vs v3:

 1:  e39b2e15ece ! 1:  bd36d16c8d9 merge-ort-wrappers: make printed message match the one from recursive
     @@ Commit message
          being processed by another function that made additional changes:
            * It added an implicit "error: " prefix
            * It added an implicit trailing newline
     -
     -    Add these things, but do so in a couple extra steps to avoid having
     -    translators need to translate another not-quite-identical string.
     +    We can get these things by making use of the error() function.
      
          Signed-off-by: Elijah Newren <newren@gmail.com>
      
     @@ merge-ort-wrappers.c: static int unclean(struct merge_options *opt, struct tree
       
       	if (head && repo_index_has_changes(opt->repo, head, &sb)) {
      -		fprintf(stderr, _("Your local changes to the following files would be overwritten by merge:\n  %s"),
     -+		struct strbuf err = STRBUF_INIT;
     -+		strbuf_addstr(&err, "error: ");
     -+		strbuf_addf(&err, _("Your local changes to the following files would be overwritten by merge:\n  %s"),
     - 		    sb.buf);
     -+		strbuf_addch(&err, '\n');
     -+		fputs(err.buf, stderr);
     -+		strbuf_release(&err);
     +-		    sb.buf);
     ++		error(_("Your local changes to the following files would be overwritten by merge:\n  %s"),
     ++		      sb.buf);
       		strbuf_release(&sb);
       		return -1;
       	}
 2:  2810dec7608 = 2:  b79f44e54b9 merge-resolve: abort if index does not match HEAD
 3:  b41853e3f99 = 3:  02930448ea1 merge: do not abort early if one strategy fails to handle the merge
 4:  64700338a28 = 4:  daf8d224160 merge: fix save_state() to work when there are stat-dirty files
 5:  91c495c770e ! 5:  f401bd5ad0d merge: make restore_state() restore staged state too
     @@ Commit message
          Unfortunately, if users had staged changes before calling `git merge`,
          builtin/merge.c could do the following:
      
     -       * stash the changes, in order to clean up after the strategies
     -       * try all the merge strategies in turn, each of which report they
     +       * stash the changes, in order to clean up after the strategies
     +       * try all the merge strategies in turn, each of which report they
               cannot function due to the index not matching HEAD
     -       * restore the changes via "git stash apply"
     +       * restore the changes via "git stash apply"
      
          But that last step would have the net effect of unstaging the user's
          changes.  Fix this by adding the "--index" option to "git stash apply".
 6:  887967c1f3f = 6:  ad5354c219c merge: ensure we can actually restore pre-merge state
 7:  81c40492a62 = 7:  6212d572604 merge: do not exit restore_state() prematurely

-- 
gitgitgadget

^ permalink raw reply	[relevance 3%]

* [PATCH v4 4/7] merge: fix save_state() to work when there are stat-dirty files
  2022-07-22  5:15  3%     ` [PATCH v4 0/7] Fix merge restore state Elijah Newren via GitGitGadget
  2022-07-22  5:15  2%       ` [PATCH v4 2/7] merge-resolve: abort if index does not match HEAD Elijah Newren via GitGitGadget
  2022-07-22  5:15  2%       ` [PATCH v4 3/7] merge: do not abort early if one strategy fails to handle the merge Elijah Newren via GitGitGadget
@ 2022-07-22  5:15  2%       ` Elijah Newren via GitGitGadget
  2 siblings, 0 replies; 200+ results
From: Elijah Newren via GitGitGadget @ 2022-07-22  5:15 UTC (permalink / raw)
  To: git
  Cc: ZheNing Hu, Eric Sunshine, Junio C Hamano, Elijah Newren,
	Elijah Newren, Elijah Newren

From: Elijah Newren <newren@gmail.com>

When there are stat-dirty files, but no files are modified,
`git stash create` exits with unsuccessful status.  This causes merge
to fail.  Copy some code from sequencer.c's create_autostash to refresh
the index first to avoid this problem.

Signed-off-by: Elijah Newren <newren@gmail.com>
---
 builtin/merge.c                          |  8 ++++++++
 t/t6424-merge-unrelated-index-changes.sh | 11 +++++++++++
 2 files changed, 19 insertions(+)

diff --git a/builtin/merge.c b/builtin/merge.c
index dec7375bf2a..4170c30317e 100644
--- a/builtin/merge.c
+++ b/builtin/merge.c
@@ -313,8 +313,16 @@ static int save_state(struct object_id *stash)
 	int len;
 	struct child_process cp = CHILD_PROCESS_INIT;
 	struct strbuf buffer = STRBUF_INIT;
+	struct lock_file lock_file = LOCK_INIT;
+	int fd;
 	int rc = -1;
 
+	fd = repo_hold_locked_index(the_repository, &lock_file, 0);
+	refresh_cache(REFRESH_QUIET);
+	if (0 <= fd)
+		repo_update_index_if_able(the_repository, &lock_file);
+	rollback_lock_file(&lock_file);
+
 	strvec_pushl(&cp.args, "stash", "create", NULL);
 	cp.out = -1;
 	cp.git_cmd = 1;
diff --git a/t/t6424-merge-unrelated-index-changes.sh b/t/t6424-merge-unrelated-index-changes.sh
index 8b749e19083..3019d030e07 100755
--- a/t/t6424-merge-unrelated-index-changes.sh
+++ b/t/t6424-merge-unrelated-index-changes.sh
@@ -268,6 +268,17 @@ test_expect_success 'subtree' '
 	test_path_is_missing .git/MERGE_HEAD
 '
 
+test_expect_success 'avoid failure due to stat-dirty files' '
+	git reset --hard &&
+	git checkout B^0 &&
+
+	# Make "a" be stat-dirty
+	test-tool chmtime =+1 a &&
+
+	# stat-dirty file should not prevent stash creation in builtin/merge.c
+	git merge -s resolve -s recursive D^0
+'
+
 test_expect_success 'resolve && recursive && ort' '
 	git reset --hard &&
 	git checkout B^0 &&
-- 
gitgitgadget


^ permalink raw reply related	[relevance 2%]

* [PATCH v4 3/7] merge: do not abort early if one strategy fails to handle the merge
  2022-07-22  5:15  3%     ` [PATCH v4 0/7] Fix merge restore state Elijah Newren via GitGitGadget
  2022-07-22  5:15  2%       ` [PATCH v4 2/7] merge-resolve: abort if index does not match HEAD Elijah Newren via GitGitGadget
@ 2022-07-22  5:15  2%       ` Elijah Newren via GitGitGadget
  2022-07-22 10:47  0%         ` Ævar Arnfjörð Bjarmason
  2022-07-22  5:15  2%       ` [PATCH v4 4/7] merge: fix save_state() to work when there are stat-dirty files Elijah Newren via GitGitGadget
  2 siblings, 1 reply; 200+ results
From: Elijah Newren via GitGitGadget @ 2022-07-22  5:15 UTC (permalink / raw)
  To: git
  Cc: ZheNing Hu, Eric Sunshine, Junio C Hamano, Elijah Newren,
	Elijah Newren, Elijah Newren

From: Elijah Newren <newren@gmail.com>

builtin/merge is setup to allow multiple strategies to be specified,
and it will find the "best" result and use it.  This is defeated if
some of the merge strategies abort early when they cannot handle the
merge.  Fix the logic that calls recursive and ort to not do such an
early abort, but instead return "2" or "unhandled" so that the next
strategy can try to handle the merge.

Coming up with a testcase for this is somewhat difficult, since
recursive and ort both handle nearly any two-headed merge (there is
a separate code path that checks for non-two-headed merges and
already returns "2" for them).  So use a somewhat synthetic testcase
of having the index not match HEAD before the merge starts, since all
merge strategies will abort for that.

Signed-off-by: Elijah Newren <newren@gmail.com>
---
 builtin/merge.c                          |  6 ++++--
 t/t6402-merge-rename.sh                  |  2 +-
 t/t6424-merge-unrelated-index-changes.sh | 16 ++++++++++++++++
 t/t6439-merge-co-error-msgs.sh           |  1 +
 4 files changed, 22 insertions(+), 3 deletions(-)

diff --git a/builtin/merge.c b/builtin/merge.c
index 13884b8e836..dec7375bf2a 100644
--- a/builtin/merge.c
+++ b/builtin/merge.c
@@ -754,8 +754,10 @@ static int try_merge_strategy(const char *strategy, struct commit_list *common,
 		else
 			clean = merge_recursive(&o, head, remoteheads->item,
 						reversed, &result);
-		if (clean < 0)
-			exit(128);
+		if (clean < 0) {
+			rollback_lock_file(&lock);
+			return 2;
+		}
 		if (write_locked_index(&the_index, &lock,
 				       COMMIT_LOCK | SKIP_IF_UNCHANGED))
 			die(_("unable to write %s"), get_index_file());
diff --git a/t/t6402-merge-rename.sh b/t/t6402-merge-rename.sh
index 3a32b1a45cf..772238e582c 100755
--- a/t/t6402-merge-rename.sh
+++ b/t/t6402-merge-rename.sh
@@ -210,7 +210,7 @@ test_expect_success 'updated working tree file should prevent the merge' '
 	echo >>M one line addition &&
 	cat M >M.saved &&
 	git update-index M &&
-	test_expect_code 128 git pull --no-rebase . yellow &&
+	test_expect_code 2 git pull --no-rebase . yellow &&
 	test_cmp M M.saved &&
 	rm -f M.saved
 '
diff --git a/t/t6424-merge-unrelated-index-changes.sh b/t/t6424-merge-unrelated-index-changes.sh
index f35d3182b86..8b749e19083 100755
--- a/t/t6424-merge-unrelated-index-changes.sh
+++ b/t/t6424-merge-unrelated-index-changes.sh
@@ -268,4 +268,20 @@ test_expect_success 'subtree' '
 	test_path_is_missing .git/MERGE_HEAD
 '
 
+test_expect_success 'resolve && recursive && ort' '
+	git reset --hard &&
+	git checkout B^0 &&
+
+	test_seq 0 10 >a &&
+	git add a &&
+
+	sane_unset GIT_TEST_MERGE_ALGORITHM &&
+	test_must_fail git merge -s resolve -s recursive -s ort C^0 >output 2>&1 &&
+
+	grep "Trying merge strategy resolve..." output &&
+	grep "Trying merge strategy recursive..." output &&
+	grep "Trying merge strategy ort..." output &&
+	grep "No merge strategy handled the merge." output
+'
+
 test_done
diff --git a/t/t6439-merge-co-error-msgs.sh b/t/t6439-merge-co-error-msgs.sh
index 5bfb027099a..52cf0c87690 100755
--- a/t/t6439-merge-co-error-msgs.sh
+++ b/t/t6439-merge-co-error-msgs.sh
@@ -47,6 +47,7 @@ test_expect_success 'untracked files overwritten by merge (fast and non-fast for
 		export GIT_MERGE_VERBOSITY &&
 		test_must_fail git merge branch 2>out2
 	) &&
+	echo "Merge with strategy ${GIT_TEST_MERGE_ALGORITHM:-ort} failed." >>expect &&
 	test_cmp out2 expect &&
 	git reset --hard HEAD^
 '
-- 
gitgitgadget


^ permalink raw reply related	[relevance 2%]

* [PATCH v4 2/7] merge-resolve: abort if index does not match HEAD
  2022-07-22  5:15  3%     ` [PATCH v4 0/7] Fix merge restore state Elijah Newren via GitGitGadget
@ 2022-07-22  5:15  2%       ` Elijah Newren via GitGitGadget
  2022-07-22 10:27  0%         ` Ævar Arnfjörð Bjarmason
  2022-07-22  5:15  2%       ` [PATCH v4 3/7] merge: do not abort early if one strategy fails to handle the merge Elijah Newren via GitGitGadget
  2022-07-22  5:15  2%       ` [PATCH v4 4/7] merge: fix save_state() to work when there are stat-dirty files Elijah Newren via GitGitGadget
  2 siblings, 1 reply; 200+ results
From: Elijah Newren via GitGitGadget @ 2022-07-22  5:15 UTC (permalink / raw)
  To: git
  Cc: ZheNing Hu, Eric Sunshine, Junio C Hamano, Elijah Newren,
	Elijah Newren, Elijah Newren

From: Elijah Newren <newren@gmail.com>

As noted in commit 9822175d2b ("Ensure index matches head before
invoking merge machinery, round N", 2019-08-17), we have had a very
long history of problems with failing to enforce the requirement that
index matches HEAD when starting a merge.  One of the commits
referenced in the long tale of issues arising from lax enforcement of
this requirement was commit 55f39cf755 ("merge: fix misleading
pre-merge check documentation", 2018-06-30), which tried to document
the requirement and noted there were some exceptions.  As mentioned in
that commit message, the `resolve` strategy was the one strategy that
did not have an explicit index matching HEAD check, and the reason it
didn't was that I wasn't able to discover any cases where the
implementation would fail to catch the problem and abort, and didn't
want to introduce unnecessary performance overhead of adding another
check.

Well, today I discovered a testcase where the implementation does not
catch the problem and so an explicit check is needed.  Add a testcase
that previously would have failed, and update git-merge-resolve.sh to
have an explicit check.  Note that the code is copied from 3ec62ad9ff
("merge-octopus: abort if index does not match HEAD", 2016-04-09), so
that we reuse the same message and avoid making translators need to
translate some new message.

Signed-off-by: Elijah Newren <newren@gmail.com>
---
 builtin/merge.c                          | 20 ++++++++++++++++++
 git-merge-resolve.sh                     | 10 +++++++++
 t/t6424-merge-unrelated-index-changes.sh | 26 ++++++++++++++++++++++++
 3 files changed, 56 insertions(+)

diff --git a/builtin/merge.c b/builtin/merge.c
index 23170f2d2a6..13884b8e836 100644
--- a/builtin/merge.c
+++ b/builtin/merge.c
@@ -1599,6 +1599,26 @@ int cmd_merge(int argc, const char **argv, const char *prefix)
 		 */
 		refresh_cache(REFRESH_QUIET);
 		if (allow_trivial && fast_forward != FF_ONLY) {
+			/*
+			 * Must first ensure that index matches HEAD before
+			 * attempting a trivial merge.
+			 */
+			struct tree *head_tree = get_commit_tree(head_commit);
+			struct strbuf sb = STRBUF_INIT;
+
+			if (repo_index_has_changes(the_repository, head_tree,
+						   &sb)) {
+				struct strbuf err = STRBUF_INIT;
+				strbuf_addstr(&err, "error: ");
+				strbuf_addf(&err, _("Your local changes to the following files would be overwritten by merge:\n  %s"),
+					    sb.buf);
+				strbuf_addch(&err, '\n');
+				fputs(err.buf, stderr);
+				strbuf_release(&err);
+				strbuf_release(&sb);
+				return -1;
+			}
+
 			/* See if it is really trivial. */
 			git_committer_info(IDENT_STRICT);
 			printf(_("Trying really trivial in-index merge...\n"));
diff --git a/git-merge-resolve.sh b/git-merge-resolve.sh
index 343fe7bccd0..77e93121bf8 100755
--- a/git-merge-resolve.sh
+++ b/git-merge-resolve.sh
@@ -5,6 +5,16 @@
 #
 # Resolve two trees, using enhanced multi-base read-tree.
 
+. git-sh-setup
+
+# Abort if index does not match HEAD
+if ! git diff-index --quiet --cached HEAD --
+then
+    gettextln "Error: Your local changes to the following files would be overwritten by merge"
+    git diff-index --cached --name-only HEAD -- | sed -e 's/^/    /'
+    exit 2
+fi
+
 # The first parameters up to -- are merge bases; the rest are heads.
 bases= head= remotes= sep_seen=
 for arg
diff --git a/t/t6424-merge-unrelated-index-changes.sh b/t/t6424-merge-unrelated-index-changes.sh
index b6e424a427b..f35d3182b86 100755
--- a/t/t6424-merge-unrelated-index-changes.sh
+++ b/t/t6424-merge-unrelated-index-changes.sh
@@ -114,6 +114,32 @@ test_expect_success 'resolve, non-trivial' '
 	test_path_is_missing .git/MERGE_HEAD
 '
 
+test_expect_success 'resolve, trivial, related file removed' '
+	git reset --hard &&
+	git checkout B^0 &&
+
+	git rm a &&
+	test_path_is_missing a &&
+
+	test_must_fail git merge -s resolve C^0 &&
+
+	test_path_is_missing a &&
+	test_path_is_missing .git/MERGE_HEAD
+'
+
+test_expect_success 'resolve, non-trivial, related file removed' '
+	git reset --hard &&
+	git checkout B^0 &&
+
+	git rm a &&
+	test_path_is_missing a &&
+
+	test_must_fail git merge -s resolve D^0 &&
+
+	test_path_is_missing a &&
+	test_path_is_missing .git/MERGE_HEAD
+'
+
 test_expect_success 'recursive' '
 	git reset --hard &&
 	git checkout B^0 &&
-- 
gitgitgadget


^ permalink raw reply related	[relevance 2%]

* Re: [PATCH v4 2/7] merge-resolve: abort if index does not match HEAD
  2022-07-22  5:15  2%       ` [PATCH v4 2/7] merge-resolve: abort if index does not match HEAD Elijah Newren via GitGitGadget
@ 2022-07-22 10:27  0%         ` Ævar Arnfjörð Bjarmason
  2022-07-23  0:28  0%           ` Elijah Newren
  0 siblings, 1 reply; 200+ results
From: Ævar Arnfjörð Bjarmason @ 2022-07-22 10:27 UTC (permalink / raw)
  To: Elijah Newren via GitGitGadget
  Cc: git, ZheNing Hu, Eric Sunshine, Junio C Hamano, Elijah Newren


On Fri, Jul 22 2022, Elijah Newren via GitGitGadget wrote:

> From: Elijah Newren <newren@gmail.com>
>
> As noted in commit 9822175d2b ("Ensure index matches head before
> invoking merge machinery, round N", 2019-08-17), we have had a very
> long history of problems with failing to enforce the requirement that
> index matches HEAD when starting a merge.  One of the commits
> referenced in the long tale of issues arising from lax enforcement of
> this requirement was commit 55f39cf755 ("merge: fix misleading
> pre-merge check documentation", 2018-06-30), which tried to document
> the requirement and noted there were some exceptions.  As mentioned in
> that commit message, the `resolve` strategy was the one strategy that
> did not have an explicit index matching HEAD check, and the reason it
> didn't was that I wasn't able to discover any cases where the
> implementation would fail to catch the problem and abort, and didn't
> want to introduce unnecessary performance overhead of adding another
> check.
>
> Well, today I discovered a testcase where the implementation does not
> catch the problem and so an explicit check is needed.  Add a testcase
> that previously would have failed, and update git-merge-resolve.sh to
> have an explicit check.  Note that the code is copied from 3ec62ad9ff
> ("merge-octopus: abort if index does not match HEAD", 2016-04-09), so
> that we reuse the same message and avoid making translators need to
> translate some new message.
>
> Signed-off-by: Elijah Newren <newren@gmail.com>
> ---
>  builtin/merge.c                          | 20 ++++++++++++++++++
>  git-merge-resolve.sh                     | 10 +++++++++
>  t/t6424-merge-unrelated-index-changes.sh | 26 ++++++++++++++++++++++++
>  3 files changed, 56 insertions(+)
>
> diff --git a/builtin/merge.c b/builtin/merge.c
> index 23170f2d2a6..13884b8e836 100644
> --- a/builtin/merge.c
> +++ b/builtin/merge.c
> @@ -1599,6 +1599,26 @@ int cmd_merge(int argc, const char **argv, const char *prefix)
>  		 */
>  		refresh_cache(REFRESH_QUIET);
>  		if (allow_trivial && fast_forward != FF_ONLY) {
> +			/*
> +			 * Must first ensure that index matches HEAD before
> +			 * attempting a trivial merge.
> +			 */
> +			struct tree *head_tree = get_commit_tree(head_commit);
> +			struct strbuf sb = STRBUF_INIT;
> +
> +			if (repo_index_has_changes(the_repository, head_tree,
> +						   &sb)) {
> +				struct strbuf err = STRBUF_INIT;
> +				strbuf_addstr(&err, "error: ");
> +				strbuf_addf(&err, _("Your local changes to the following files would be overwritten by merge:\n  %s"),
> +					    sb.buf);
> +				strbuf_addch(&err, '\n');

At first glance I was expecting this to construct an error message to
emit it somewhere else that stderr, so I wondered if you couldn't use
the "error_routine" facility to avoid re-inventing "error: " etc.,
but...

> +				fputs(err.buf, stderr);

...we emit it to stderr anyway...?

> +				strbuf_release(&err);
> +				strbuf_release(&sb);
> +				return -1;
> +			}
> +
>  			/* See if it is really trivial. */
>  			git_committer_info(IDENT_STRICT);
>  			printf(_("Trying really trivial in-index merge...\n"));
> diff --git a/git-merge-resolve.sh b/git-merge-resolve.sh
> index 343fe7bccd0..77e93121bf8 100755
> --- a/git-merge-resolve.sh
> +++ b/git-merge-resolve.sh
> @@ -5,6 +5,16 @@
>  #
>  # Resolve two trees, using enhanced multi-base read-tree.
>  
> +. git-sh-setup
> +
> +# Abort if index does not match HEAD
> +if ! git diff-index --quiet --cached HEAD --
> +then
> +    gettextln "Error: Your local changes to the following files would be overwritten by merge"
> +    git diff-index --cached --name-only HEAD -- | sed -e 's/^/    /'
> +    exit 2
> +fi

(The "..." continued below)

Just in trying to poke holes in this I made this an "exit 0", and
neither of the tests you added failed, but the last one ("resolve &&
recursive && ort") in the t6424*.sh will fail, is that intentional?

I don't know enough about the context here, but given our *.sh->C
migration elsewhere it's a bit unfortunate to see more *.sh code added
back. We have "git merge" driving this, isn't it OK to have it make this
check before invoking "resolve" (may be a stupid question).

For this code in particular it:

 * Uses spaces, not tabs
 * We lose the diff-index .. --name-only exit code (segfault), but so
   did the older version
 * I wonder if bending over backwards to emit the exact message we
   emitted before is worth it

If you just make this something like (untested):

	{
		gettext "error: " &&
		gettextln "Your local..."
	}

You could re-use the translation from the *.c one (and the "error: " one
we'll get from usage.c).

That leaves "\n %s" as the difference, but we could just remove that
from the _() and emit it unconditionally, no?


>  # The first parameters up to -- are merge bases; the rest are heads.
>  bases= head= remotes= sep_seen=
>  for arg
> diff --git a/t/t6424-merge-unrelated-index-changes.sh b/t/t6424-merge-unrelated-index-changes.sh
> index b6e424a427b..f35d3182b86 100755
> --- a/t/t6424-merge-unrelated-index-changes.sh
> +++ b/t/t6424-merge-unrelated-index-changes.sh
> @@ -114,6 +114,32 @@ test_expect_success 'resolve, non-trivial' '
>  	test_path_is_missing .git/MERGE_HEAD
>  '
>  
> +test_expect_success 'resolve, trivial, related file removed' '
> +	git reset --hard &&
> +	git checkout B^0 &&
> +
> +	git rm a &&
> +	test_path_is_missing a &&
> +
> +	test_must_fail git merge -s resolve C^0 &&
> +
> +	test_path_is_missing a &&
> +	test_path_is_missing .git/MERGE_HEAD
> +'
> +
> +test_expect_success 'resolve, non-trivial, related file removed' '
> +	git reset --hard &&
> +	git checkout B^0 &&
> +
> +	git rm a &&
> +	test_path_is_missing a &&
> +
> +	test_must_fail git merge -s resolve D^0 &&
> +
> +	test_path_is_missing a &&
> +	test_path_is_missing .git/MERGE_HEAD
> +'
> +
>  test_expect_success 'recursive' '
>  	git reset --hard &&
>  	git checkout B^0 &&

...I tried with this change on top, it seems to me like you'd want this
in any case, it passes the tests both with & without the C code change,
so can't we just use error() here?
	
	diff --git a/builtin/merge.c b/builtin/merge.c
	index 7fb4414ebb7..64def49734a 100644
	--- a/builtin/merge.c
	+++ b/builtin/merge.c
	@@ -1621,13 +1621,8 @@ int cmd_merge(int argc, const char **argv, const char *prefix)
	 
	 			if (repo_index_has_changes(the_repository, head_tree,
	 						   &sb)) {
	-				struct strbuf err = STRBUF_INIT;
	-				strbuf_addstr(&err, "error: ");
	-				strbuf_addf(&err, _("Your local changes to the following files would be overwritten by merge:\n  %s"),
	-					    sb.buf);
	-				strbuf_addch(&err, '\n');
	-				fputs(err.buf, stderr);
	-				strbuf_release(&err);
	+				error(_("Your local changes to the following files would be overwritten by merge:\n  %s"),
	+				      sb.buf);
	 				strbuf_release(&sb);
	 				return -1;
	 			}
	diff --git a/t/t6424-merge-unrelated-index-changes.sh b/t/t6424-merge-unrelated-index-changes.sh
	index c96649448fa..1df130b9ee6 100755
	--- a/t/t6424-merge-unrelated-index-changes.sh
	+++ b/t/t6424-merge-unrelated-index-changes.sh
	@@ -96,7 +96,12 @@ test_expect_success 'resolve, trivial' '
	 
	 	touch random_file && git add random_file &&
	 
	-	test_must_fail git merge -s resolve C^0 &&
	+	sed -e "s/^> //g" >expect <<-\EOF &&
	+	> error: Your local changes to the following files would be overwritten by merge:
	+	>   random_file
	+	EOF
	+	test_must_fail git merge -s resolve C^0 2>actual &&
	+	test_cmp expect actual &&
	 	test_path_is_file random_file &&
	 	git rev-parse --verify :random_file &&
	 	test_path_is_missing .git/MERGE_HEAD
	

^ permalink raw reply	[relevance 0%]

* Re: [PATCH v4 3/7] merge: do not abort early if one strategy fails to handle the merge
  2022-07-22  5:15  2%       ` [PATCH v4 3/7] merge: do not abort early if one strategy fails to handle the merge Elijah Newren via GitGitGadget
@ 2022-07-22 10:47  0%         ` Ævar Arnfjörð Bjarmason
  2022-07-23  0:36  0%           ` Elijah Newren
  0 siblings, 1 reply; 200+ results
From: Ævar Arnfjörð Bjarmason @ 2022-07-22 10:47 UTC (permalink / raw)
  To: Elijah Newren via GitGitGadget
  Cc: git, ZheNing Hu, Eric Sunshine, Junio C Hamano, Elijah Newren


On Fri, Jul 22 2022, Elijah Newren via GitGitGadget wrote:

> From: Elijah Newren <newren@gmail.com>
>
> builtin/merge is setup to allow multiple strategies to be specified,
> and it will find the "best" result and use it.  This is defeated if
> some of the merge strategies abort early when they cannot handle the
> merge.  Fix the logic that calls recursive and ort to not do such an
> early abort, but instead return "2" or "unhandled" so that the next
> strategy can try to handle the merge.
>
> Coming up with a testcase for this is somewhat difficult, since
> recursive and ort both handle nearly any two-headed merge (there is
> a separate code path that checks for non-two-headed merges and
> already returns "2" for them).  So use a somewhat synthetic testcase
> of having the index not match HEAD before the merge starts, since all
> merge strategies will abort for that.
>
> Signed-off-by: Elijah Newren <newren@gmail.com>
> ---
>  builtin/merge.c                          |  6 ++++--
>  t/t6402-merge-rename.sh                  |  2 +-
>  t/t6424-merge-unrelated-index-changes.sh | 16 ++++++++++++++++
>  t/t6439-merge-co-error-msgs.sh           |  1 +
>  4 files changed, 22 insertions(+), 3 deletions(-)
>
> diff --git a/builtin/merge.c b/builtin/merge.c
> index 13884b8e836..dec7375bf2a 100644
> --- a/builtin/merge.c
> +++ b/builtin/merge.c
> @@ -754,8 +754,10 @@ static int try_merge_strategy(const char *strategy, struct commit_list *common,
>  		else
>  			clean = merge_recursive(&o, head, remoteheads->item,
>  						reversed, &result);
> -		if (clean < 0)
> -			exit(128);
> +		if (clean < 0) {
> +			rollback_lock_file(&lock);
> +			return 2;
> +		}
>  		if (write_locked_index(&the_index, &lock,
>  				       COMMIT_LOCK | SKIP_IF_UNCHANGED))
>  			die(_("unable to write %s"), get_index_file());
> diff --git a/t/t6402-merge-rename.sh b/t/t6402-merge-rename.sh
> index 3a32b1a45cf..772238e582c 100755
> --- a/t/t6402-merge-rename.sh
> +++ b/t/t6402-merge-rename.sh
> @@ -210,7 +210,7 @@ test_expect_success 'updated working tree file should prevent the merge' '
>  	echo >>M one line addition &&
>  	cat M >M.saved &&
>  	git update-index M &&
> -	test_expect_code 128 git pull --no-rebase . yellow &&
> +	test_expect_code 2 git pull --no-rebase . yellow &&
>  	test_cmp M M.saved &&
>  	rm -f M.saved
>  '
> diff --git a/t/t6424-merge-unrelated-index-changes.sh b/t/t6424-merge-unrelated-index-changes.sh
> index f35d3182b86..8b749e19083 100755
> --- a/t/t6424-merge-unrelated-index-changes.sh
> +++ b/t/t6424-merge-unrelated-index-changes.sh
> @@ -268,4 +268,20 @@ test_expect_success 'subtree' '
>  	test_path_is_missing .git/MERGE_HEAD
>  '
>  
> +test_expect_success 'resolve && recursive && ort' '
> +	git reset --hard &&
> +	git checkout B^0 &&
> +
> +	test_seq 0 10 >a &&
> +	git add a &&
> +
> +	sane_unset GIT_TEST_MERGE_ALGORITHM &&
> +	test_must_fail git merge -s resolve -s recursive -s ort C^0 >output 2>&1 &&
> +
> +	grep "Trying merge strategy resolve..." output &&
> +	grep "Trying merge strategy recursive..." output &&
> +	grep "Trying merge strategy ort..." output &&
> +	grep "No merge strategy handled the merge." output
> +'

Ah, re my feedback on 2/7 I hadn't read ahead. This is the test I
mentioned as failing with the code added in 2/7 if it's tweaked to be
s/exit 2/exit 0/.

So it's a bit odd to have code added in 2/7 that's tested in 3/7. I
think this would be much easier to understand if these tests came before
all these code changes, so then as the changes are made we can see how
the behavior changes.

But short of that at least having the relevant part of this for 2/7 in
that commit would be better, i.e. the thing that tests that new
"diff-index" check in some way...


^ permalink raw reply	[relevance 0%]

* Re: [PATCH v4 2/7] merge-resolve: abort if index does not match HEAD
  2022-07-22 10:27  0%         ` Ævar Arnfjörð Bjarmason
@ 2022-07-23  0:28  0%           ` Elijah Newren
  0 siblings, 0 replies; 200+ results
From: Elijah Newren @ 2022-07-23  0:28 UTC (permalink / raw)
  To: Ævar Arnfjörð Bjarmason
  Cc: Elijah Newren via GitGitGadget, Git Mailing List, ZheNing Hu,
	Eric Sunshine, Junio C Hamano

On Fri, Jul 22, 2022 at 3:46 AM Ævar Arnfjörð Bjarmason
<avarab@gmail.com> wrote:
>
> On Fri, Jul 22 2022, Elijah Newren via GitGitGadget wrote:
>
> > From: Elijah Newren <newren@gmail.com>
> >
> > As noted in commit 9822175d2b ("Ensure index matches head before
> > invoking merge machinery, round N", 2019-08-17), we have had a very
> > long history of problems with failing to enforce the requirement that
> > index matches HEAD when starting a merge.  One of the commits
> > referenced in the long tale of issues arising from lax enforcement of
> > this requirement was commit 55f39cf755 ("merge: fix misleading
> > pre-merge check documentation", 2018-06-30), which tried to document
> > the requirement and noted there were some exceptions.  As mentioned in
> > that commit message, the `resolve` strategy was the one strategy that
> > did not have an explicit index matching HEAD check, and the reason it
> > didn't was that I wasn't able to discover any cases where the
> > implementation would fail to catch the problem and abort, and didn't
> > want to introduce unnecessary performance overhead of adding another
> > check.
> >
> > Well, today I discovered a testcase where the implementation does not
> > catch the problem and so an explicit check is needed.  Add a testcase
> > that previously would have failed, and update git-merge-resolve.sh to
> > have an explicit check.  Note that the code is copied from 3ec62ad9ff
> > ("merge-octopus: abort if index does not match HEAD", 2016-04-09), so
> > that we reuse the same message and avoid making translators need to
> > translate some new message.
> >
> > Signed-off-by: Elijah Newren <newren@gmail.com>
> > ---
> >  builtin/merge.c                          | 20 ++++++++++++++++++
> >  git-merge-resolve.sh                     | 10 +++++++++
> >  t/t6424-merge-unrelated-index-changes.sh | 26 ++++++++++++++++++++++++
> >  3 files changed, 56 insertions(+)
> >
> > diff --git a/builtin/merge.c b/builtin/merge.c
> > index 23170f2d2a6..13884b8e836 100644
> > --- a/builtin/merge.c
> > +++ b/builtin/merge.c
> > @@ -1599,6 +1599,26 @@ int cmd_merge(int argc, const char **argv, const char *prefix)
> >                */
> >               refresh_cache(REFRESH_QUIET);
> >               if (allow_trivial && fast_forward != FF_ONLY) {
> > +                     /*
> > +                      * Must first ensure that index matches HEAD before
> > +                      * attempting a trivial merge.
> > +                      */
> > +                     struct tree *head_tree = get_commit_tree(head_commit);
> > +                     struct strbuf sb = STRBUF_INIT;
> > +
> > +                     if (repo_index_has_changes(the_repository, head_tree,
> > +                                                &sb)) {
> > +                             struct strbuf err = STRBUF_INIT;
> > +                             strbuf_addstr(&err, "error: ");
> > +                             strbuf_addf(&err, _("Your local changes to the following files would be overwritten by merge:\n  %s"),
> > +                                         sb.buf);
> > +                             strbuf_addch(&err, '\n');
>
> At first glance I was expecting this to construct an error message to
> emit it somewhere else that stderr, so I wondered if you couldn't use
> the "error_routine" facility to avoid re-inventing "error: " etc.,
> but...
>
> > +                             fputs(err.buf, stderr);
>
> ...we emit it to stderr anyway...?
>
> > +                             strbuf_release(&err);
> > +                             strbuf_release(&sb);
> > +                             return -1;
> > +                     }
> > +

UGH!  I fixed the other one of these in my reroll yesterday[1].  I
_knew_ I had copied that code somewhere else, but for some reason I
thought it was in a different series and went searching for it.  Don't
know why I couldn't remember that it was in the same series, and I'm
not sure how I missed it when I went looking.  I mean, I know I was
tired yesterday, but that's still kinda bad.

Anyway, thanks for catching; I'll fix this one too.

[1] https://lore.kernel.org/git/xmqqsfmulb6w.fsf@gitster.g/

> >                       /* See if it is really trivial. */
> >                       git_committer_info(IDENT_STRICT);
> >                       printf(_("Trying really trivial in-index merge...\n"));
> > diff --git a/git-merge-resolve.sh b/git-merge-resolve.sh
> > index 343fe7bccd0..77e93121bf8 100755
> > --- a/git-merge-resolve.sh
> > +++ b/git-merge-resolve.sh
> > @@ -5,6 +5,16 @@
> >  #
> >  # Resolve two trees, using enhanced multi-base read-tree.
> >
> > +. git-sh-setup
> > +
> > +# Abort if index does not match HEAD
> > +if ! git diff-index --quiet --cached HEAD --
> > +then
> > +    gettextln "Error: Your local changes to the following files would be overwritten by merge"
> > +    git diff-index --cached --name-only HEAD -- | sed -e 's/^/    /'
> > +    exit 2
> > +fi
>
> (The "..." continued below)
>
> Just in trying to poke holes in this I made this an "exit 0", and
> neither of the tests you added failed, but the last one ("resolve &&
> recursive && ort") in the t6424*.sh will fail, is that intentional?

Nope it's not intentional.  I had tested one fix (for these
git-merge-resolve.sh changes) and verified they were good (and
necessary), then found another bug (the one fixed by the
builtin/merge.c changes) and added a test for it, and just decided to
amend it into the same commit.  Turns out the builtin/merge.c changes
mask the fix for git-merge-resolve.sh here and makes that code go
unexercised.  I'll split these two bugfixes into separate patches, and
tweak one of the two testcases to make sure it continues to exercise
the new codepath added to git-merge-resolve.sh.

> I don't know enough about the context here, but given our *.sh->C
> migration elsewhere it's a bit unfortunate to see more *.sh code added
> back.

This seems like a curious objection.  "We are trying to get rid of
shell scripts, so don't even fix bugs in any of the existing ones." ?

> We have "git merge" driving this, isn't it OK to have it make this
> check before invoking "resolve" (may be a stupid question).

Ah, I can kind of see where you're coming from now, but that seems to
me to be bending over backwards in attempting to fix a component
written in shell without actually modifying the shell.
builtin/merge.c is some glue code that can call multiple different
strategies, but isn't the place for the implementation of the
strategies themselves, and I'd hate to see us put half the
implementation in one place and half in another.  In addition, besides
the separation of concerns issue::

   * We document that users can add their own merge strategies (a
shell or executable named git-merge-$USERNAME and "git merge -s
$USERNAME" will call them)
   * git-merge-resolve and git-merge-octopus serve as examples
   * Our examples should demonstrate correct behavior and perform
documented, required steps.  This particular check is important:

    /*
     * At this point, we need a real merge.  No matter what strategy
     * we use, it would operate on the index, possibly affecting the
     * working tree, and when resolved cleanly, have the desired
     * tree in the index -- this means that the index must be in
     * sync with the head commit.  The strategies are responsible
     * to ensure this.
     */

So, even if someone were to reimplement git-merge-resolve.sh in C, and
start the deprecation process with some merge.useBuiltinResolve config
setting (similar to rebase.useBuiltin), I'd still want this shell fix
added to git-merge-resolve.sh in the meantime, both as an important
bugfix, and so that people looking for merge strategy examples who
find this script hopefully find a new enough version with this
important check included.

In general, if merge strategies do not perform this check, we have
observed that they often will either (a) discard users' staged changes
(best case) or (b) smash staged changes into the created commit and
thus create some kind of evil merge (making it look like they created
a merge normally, and then amended the merge with additional changes).

We're lucky that the way resolve was implemented, other git calls
would usually incidentally catch such issues for us without an
explicit check.  We were also lucky that the observed behavior was
'(a)' rather than '(b)' for resolve.  But the issue should still be
fixed.

> For this code in particular it:
>
>  * Uses spaces, not tabs

Yes, that's fair, but as I mentioned in the commit message, it was
copied from git-merge-octopus.sh.  So, as you say below, "so did the
older version".

>  * We lose the diff-index .. --name-only exit code (segfault), but so
>    did the older version

Um, I don't understand this objection.  I think you are referring to
the pipe to sed, but if so...who cares?  The exit code would be lost
anyway because we aren't running under errexit, and the next line of
code ignores any and all previous exit codes when it runs "exit 2".
And if you're not referring to the pipe to sed but the fact that it
unconditionally returns an exit code of 2 on the next line, then yes
that is the expected return code.  Whatever the diff-index segfault
returns would be the wrong exit status and could fool the
builtin/merge.c into doing the wrong thing.  It expects merge
strategies to return one of three exit codes: 0, 1, or 2:

    /*
     * The backend exits with 1 when conflicts are
     * left to be resolved, with 2 when it does not
     * handle the given merge at all.
     */

So, ignoring the return code from diff-index is correct behavior here.

Were you thinking this was a test script or something?

>  * I wonder if bending over backwards to emit the exact message we
>    emitted before is worth it
>
> If you just make this something like (untested):
>
>         {
>                 gettext "error: " &&
>                 gettextln "Your local..."
>         }
>
> You could re-use the translation from the *.c one (and the "error: " one
> we'll get from usage.c).
>
> That leaves "\n %s" as the difference, but we could just remove that
> from the _() and emit it unconditionally, no?

??

Copying a few lines from git-merge-octopus.sh to get the same fix it
has is "bending over backwards"?  That's what I call "doing the
easiest thing possible" (and which _also_ has the benefit of being
battle tested code), and then you describe a bunch of gymnastics as an
alternative?  I see your suggestion as running afoul of the objection
you are raising, and the code I'm adding as being a solution to that
particular objection.  So this particular flag you are raising is
confusing to me.

> >  # The first parameters up to -- are merge bases; the rest are heads.
> >  bases= head= remotes= sep_seen=
> >  for arg
> > diff --git a/t/t6424-merge-unrelated-index-changes.sh b/t/t6424-merge-unrelated-index-changes.sh
> > index b6e424a427b..f35d3182b86 100755
> > --- a/t/t6424-merge-unrelated-index-changes.sh
> > +++ b/t/t6424-merge-unrelated-index-changes.sh
> > @@ -114,6 +114,32 @@ test_expect_success 'resolve, non-trivial' '
> >       test_path_is_missing .git/MERGE_HEAD
> >  '
> >
> > +test_expect_success 'resolve, trivial, related file removed' '
> > +     git reset --hard &&
> > +     git checkout B^0 &&
> > +
> > +     git rm a &&
> > +     test_path_is_missing a &&
> > +
> > +     test_must_fail git merge -s resolve C^0 &&
> > +
> > +     test_path_is_missing a &&
> > +     test_path_is_missing .git/MERGE_HEAD
> > +'
> > +
> > +test_expect_success 'resolve, non-trivial, related file removed' '
> > +     git reset --hard &&
> > +     git checkout B^0 &&
> > +
> > +     git rm a &&
> > +     test_path_is_missing a &&
> > +
> > +     test_must_fail git merge -s resolve D^0 &&
> > +
> > +     test_path_is_missing a &&
> > +     test_path_is_missing .git/MERGE_HEAD
> > +'
> > +
> >  test_expect_success 'recursive' '
> >       git reset --hard &&
> >       git checkout B^0 &&
>
> ...I tried with this change on top, it seems to me like you'd want this
> in any case, it passes the tests both with & without the C code change,
> so can't we just use error() here?
>
>         diff --git a/builtin/merge.c b/builtin/merge.c
>         index 7fb4414ebb7..64def49734a 100644
>         --- a/builtin/merge.c
>         +++ b/builtin/merge.c
>         @@ -1621,13 +1621,8 @@ int cmd_merge(int argc, const char **argv, const char *prefix)
>
>                                 if (repo_index_has_changes(the_repository, head_tree,
>                                                            &sb)) {
>         -                               struct strbuf err = STRBUF_INIT;
>         -                               strbuf_addstr(&err, "error: ");
>         -                               strbuf_addf(&err, _("Your local changes to the following files would be overwritten by merge:\n  %s"),
>         -                                           sb.buf);
>         -                               strbuf_addch(&err, '\n');
>         -                               fputs(err.buf, stderr);
>         -                               strbuf_release(&err);
>         +                               error(_("Your local changes to the following files would be overwritten by merge:\n  %s"),
>         +                                     sb.buf);
>                                         strbuf_release(&sb);
>                                         return -1;

Yes, this is the same change suggested by Junio for patch 1 which I
should have also applied here.  Thanks for catching it!

^ permalink raw reply	[relevance 0%]

* Re: [PATCH v4 3/7] merge: do not abort early if one strategy fails to handle the merge
  2022-07-22 10:47  0%         ` Ævar Arnfjörð Bjarmason
@ 2022-07-23  0:36  0%           ` Elijah Newren
  0 siblings, 0 replies; 200+ results
From: Elijah Newren @ 2022-07-23  0:36 UTC (permalink / raw)
  To: Ævar Arnfjörð Bjarmason
  Cc: Elijah Newren via GitGitGadget, Git Mailing List, ZheNing Hu,
	Eric Sunshine, Junio C Hamano

On Fri, Jul 22, 2022 at 3:49 AM Ævar Arnfjörð Bjarmason
<avarab@gmail.com> wrote:
>
> On Fri, Jul 22 2022, Elijah Newren via GitGitGadget wrote:
>
> > From: Elijah Newren <newren@gmail.com>
> >
> > builtin/merge is setup to allow multiple strategies to be specified,
> > and it will find the "best" result and use it.  This is defeated if
> > some of the merge strategies abort early when they cannot handle the
> > merge.  Fix the logic that calls recursive and ort to not do such an
> > early abort, but instead return "2" or "unhandled" so that the next
> > strategy can try to handle the merge.
> >
> > Coming up with a testcase for this is somewhat difficult, since
> > recursive and ort both handle nearly any two-headed merge (there is
> > a separate code path that checks for non-two-headed merges and
> > already returns "2" for them).  So use a somewhat synthetic testcase
> > of having the index not match HEAD before the merge starts, since all
> > merge strategies will abort for that.
> >
> > Signed-off-by: Elijah Newren <newren@gmail.com>
> > ---
> >  builtin/merge.c                          |  6 ++++--
> >  t/t6402-merge-rename.sh                  |  2 +-
> >  t/t6424-merge-unrelated-index-changes.sh | 16 ++++++++++++++++
> >  t/t6439-merge-co-error-msgs.sh           |  1 +
> >  4 files changed, 22 insertions(+), 3 deletions(-)
> >
> > diff --git a/builtin/merge.c b/builtin/merge.c
> > index 13884b8e836..dec7375bf2a 100644
> > --- a/builtin/merge.c
> > +++ b/builtin/merge.c
> > @@ -754,8 +754,10 @@ static int try_merge_strategy(const char *strategy, struct commit_list *common,
> >               else
> >                       clean = merge_recursive(&o, head, remoteheads->item,
> >                                               reversed, &result);
> > -             if (clean < 0)
> > -                     exit(128);
> > +             if (clean < 0) {
> > +                     rollback_lock_file(&lock);
> > +                     return 2;
> > +             }
> >               if (write_locked_index(&the_index, &lock,
> >                                      COMMIT_LOCK | SKIP_IF_UNCHANGED))
> >                       die(_("unable to write %s"), get_index_file());
> > diff --git a/t/t6402-merge-rename.sh b/t/t6402-merge-rename.sh
> > index 3a32b1a45cf..772238e582c 100755
> > --- a/t/t6402-merge-rename.sh
> > +++ b/t/t6402-merge-rename.sh
> > @@ -210,7 +210,7 @@ test_expect_success 'updated working tree file should prevent the merge' '
> >       echo >>M one line addition &&
> >       cat M >M.saved &&
> >       git update-index M &&
> > -     test_expect_code 128 git pull --no-rebase . yellow &&
> > +     test_expect_code 2 git pull --no-rebase . yellow &&
> >       test_cmp M M.saved &&
> >       rm -f M.saved
> >  '
> > diff --git a/t/t6424-merge-unrelated-index-changes.sh b/t/t6424-merge-unrelated-index-changes.sh
> > index f35d3182b86..8b749e19083 100755
> > --- a/t/t6424-merge-unrelated-index-changes.sh
> > +++ b/t/t6424-merge-unrelated-index-changes.sh
> > @@ -268,4 +268,20 @@ test_expect_success 'subtree' '
> >       test_path_is_missing .git/MERGE_HEAD
> >  '
> >
> > +test_expect_success 'resolve && recursive && ort' '
> > +     git reset --hard &&
> > +     git checkout B^0 &&
> > +
> > +     test_seq 0 10 >a &&
> > +     git add a &&
> > +
> > +     sane_unset GIT_TEST_MERGE_ALGORITHM &&
> > +     test_must_fail git merge -s resolve -s recursive -s ort C^0 >output 2>&1 &&
> > +
> > +     grep "Trying merge strategy resolve..." output &&
> > +     grep "Trying merge strategy recursive..." output &&
> > +     grep "Trying merge strategy ort..." output &&
> > +     grep "No merge strategy handled the merge." output
> > +'

Oops, 'resolve' should really be at the end of the list rather than at
the beginning.  And the test description should be better.

> Ah, re my feedback on 2/7 I hadn't read ahead. This is the test I
> mentioned as failing with the code added in 2/7 if it's tweaked to be
> s/exit 2/exit 0/.
>
> So it's a bit odd to have code added in 2/7 that's tested in 3/7. I
> think this would be much easier to understand if these tests came before
> all these code changes, so then as the changes are made we can see how
> the behavior changes.

This testcase belongs in this patch.  The use of "resolve" here was
totally incidental to the testcase in question; I could have used
"octopus" or "ours" or created a new strategy and used it.

(Actually, using 'ours' here runs into the problem we fix in the final
patch.  So maybe just like 'resolve', using 'ours' might be confusing
to readers of the series as they think issues from other patches are
involved.)

> But short of that at least having the relevant part of this for 2/7 in
> that commit would be better, i.e. the thing that tests that new
> "diff-index" check in some way...

I'll switch this test to using 'octopus' instead of 'resolve' just so
it doesn't get confused in this way.

^ permalink raw reply	[relevance 0%]

* What's cooking in git.git (Jul 2022, #07; Fri, 22)
@ 2022-07-23  1:01  3% Junio C Hamano
  0 siblings, 0 replies; 200+ results
From: Junio C Hamano @ 2022-07-23  1:01 UTC (permalink / raw)
  To: git

Here are the topics that have been cooking in my tree.  Commits
prefixed with '+' are in 'next' (being in 'next' is a sign that a
topic is stable enough to be used and are candidate to be in a
future release).  Commits prefixed with '-' are only in 'seen',
and aren't considered "accepted" at all.

Copies of the source code to Git live in many repositories, and the
following is a list of the ones I push into or their mirrors.  Some
repositories have only a subset of branches.

With maint, master, next, seen, todo:

	git://git.kernel.org/pub/scm/git/git.git/
	git://repo.or.cz/alt-git.git/
	https://kernel.googlesource.com/pub/scm/git/git/
	https://github.com/git/git/
	https://gitlab.com/git-vcs/git/

With all the integration branches and topics broken out:

	https://github.com/gitster/git/

Even though the preformatted documentation in HTML and man format
are not sources, they are published in these repositories for
convenience (replace "htmldocs" with "manpages" for the manual
pages):

	git://git.kernel.org/pub/scm/git/git-htmldocs.git/
	https://github.com/gitster/git-htmldocs.git/

Release tarballs are available at:

	https://www.kernel.org/pub/software/scm/git/

--------------------------------------------------
[Graduated to 'master']

* gc/bare-repo-discovery (2022-07-14) 5 commits
  (merged to 'next' on 2022-07-15 at 5206577852)
 + setup.c: create `safe.bareRepository`
 + safe.directory: use git_protected_config()
 + config: learn `git_protected_config()`
 + Documentation: define protected configuration
 + Documentation/git-config.txt: add SCOPES section

 Introduce a discovery.barerepository configuration variable that
 allows users to forbid discovery of bare repositories.
 source: <pull.1261.v8.git.git.1657834081.gitgitgadget@gmail.com>


* js/ci-github-workflow-markup (2022-07-14) 1 commit
  (merged to 'next' on 2022-07-15 at 196166f671)
 + tests: fix incorrect --write-junit-xml code

 A fix for a regression in test framework.
 source: <pull.1288.git.1657789234416.gitgitgadget@gmail.com>


* js/shortlog-sort-stably (2022-07-14) 1 commit
  (merged to 'next' on 2022-07-15 at 75e4efe678)
 + shortlog: use a stable sort

 "git shortlog -n" relied on the underlying qsort() to be stable,
 which shouldn't have.  Fixed.
 source: <pull.1290.git.1657813429221.gitgitgadget@gmail.com>


* js/vimdiff-quotepath-fix (2022-07-14) 1 commit
  (merged to 'next' on 2022-07-15 at 4273bbd4b4)
 + mergetool(vimdiff): allow paths to contain spaces again

 Variable quoting fix in the vimdiff driver of "git mergetool"
 source: <pull.1287.v2.git.1657809063728.gitgitgadget@gmail.com>


* rs/mingw-tighten-mkstemp (2022-07-14) 1 commit
  (merged to 'next' on 2022-07-15 at 4dd4a117ec)
 + mingw: avoid mktemp() in mkstemp() implementation

 mkstemp() emulation on Windows has been improved.
 source: <7265e37f-fd29-3579-b840-19a1df52a59f@web.de>

--------------------------------------------------
[New Topics]

* ab/leak-check (2022-07-20) 14 commits
 - CI: use "GIT_TEST_SANITIZE_LEAK_LOG=true" in linux-leaks
 - upload-pack: fix a memory leak in create_pack_file()
 - leak tests: mark passing SANITIZE=leak tests as leak-free
 - test-lib: have the "check" mode for SANITIZE=leak consider leak logs
 - test-lib: add a GIT_TEST_PASSING_SANITIZE_LEAK=check mode
 - test-lib: simplify by removing test_external
 - tests: move copy/pasted PERL + Test::More checks to a lib-perl.sh
 - t/Makefile: don't remove test-results in "clean-except-prove-cache"
 - test-lib: add a SANITIZE=leak logging mode
 - t/README: reword the "GIT_TEST_PASSING_SANITIZE_LEAK" description
 - test-lib: add a --invert-exit-code switch
 - test-lib: fix GIT_EXIT_OK logic errors, use BAIL_OUT
 - test-lib: don't set GIT_EXIT_OK before calling test_atexit_handler
 - test-lib: use $1, not $@ in test_known_broken_{ok,failure}_

 Plugging more leaks.
 source: <cover-v2-00.14-00000000000-20220720T211221Z-avarab@gmail.com>


* mb/p4-fixes (2022-07-20) 2 commits
  (merged to 'next' on 2022-07-20 at 7942d72b1c)
 + git-p4: fix error handling in P4Unshelve.renameBranch()
 + git-p4: fix typo in P4Submit.applyCommit()

 Fix a few issues in "git p4".

 Will merge to 'master'.
 source: <pull.1297.v2.git.git.1658343330.gitgitgadget@gmail.com>


* mb/p4-utf16-crlf (2022-07-20) 1 commit
  (merged to 'next' on 2022-07-20 at c2fedd2fc2)
 + git-p4: fix CR LF handling for utf16 files

 "git p4" working on UTF-16 files on Windows did not implement
 CRLF-to-LF conversion correctly, which has been corrected.

 Will merge to 'master'.
 source: <pull.1294.v2.git.git.1658341065221.gitgitgadget@gmail.com>


* jc/string-list-cleanup (2022-07-20) 1 commit
 - builtin/remote.c: use the right kind of STRING_LIST_INIT

 Code clean-up.

 Will merge to 'next'.
 source: <xmqq7d471dns.fsf@gitster.g>


* mt/pkt-line-comment-tweak (2022-07-22) 1 commit
  (merged to 'next' on 2022-07-22 at 4004fa75eb)
 + pkt-line.h: move comment closer to the associated code

 In-code comment clarification.

 Will merge to 'master'.
 source: <6a14443c101fa132498297af6d7a483520688d75.1658488203.git.matheus.bernardino@usp.br>


* mt/rot13-in-c (2022-07-22) 3 commits
 - t/t0021: replace old rot13-filter.pl uses with new test-tool cmd
 - t/t0021: convert the rot13-filter.pl script to C
 - Merge branch 'mt/checkout-count-fix' into mt/rot13-in-c
 (this branch uses mt/checkout-count-fix.)

 Test portability improvements.

 Needs review.
 source: <cover.1658518769.git.matheus.bernardino@usp.br>


* tk/untracked-cache-with-uall (2022-07-22) 1 commit
 - read-cache: make `do_read_index()` always set up `istate->repo`

 Fix for a bug that makes write-tree to faile to write out a
 non-existent index as a tree, introduced in 2.37.

 Will merge to 'next'.
 source: <20220722212232.833188-1-martin.agren@gmail.com>

--------------------------------------------------
[Stalled]

* tk/apply-case-insensitive (2022-06-21) 3 commits
 - apply: support case-only renames in case-insensitive filesystems
 - reset: new failing test for reset of case-insensitive duplicate in index
 - t4141: test "git apply" with core.ignorecase

 "git apply" barfed on a patch that makes a case-only rename on a
 case-insensitive filesystem.

 Needs review.
 source: <pull.1257.v2.git.1655655027.gitgitgadget@gmail.com>


* bc/stash-export (2022-04-08) 4 commits
 - builtin/stash: provide a way to import stashes from a ref
 - builtin/stash: provide a way to export stashes to a ref
 - builtin/stash: factor out revision parsing into a function
 - object-name: make get_oid quietly return an error

 A mechanism to export and import stash entries to and from a normal
 commit to transfer it across repositories has been introduced.

 Expecting a reroll.
 cf. <YnL2d4Vr9Vr7W4Hj@camp.crustytoothpaste.net>
 source: <20220407215352.3491567-1-sandals@crustytoothpaste.net>


* cw/remote-object-info (2022-05-06) 11 commits
 - SQUASH??? coccicheck
 - SQUASH??? ensure that coccicheck is happy
 - SQUASH??? compilation fix
 - cat-file: add --batch-command remote-object-info command
 - cat-file: move parse_cmd and DEFAULT_FORMAT up
 - transport: add object-info fallback to fetch
 - transport: add client side capability to request object-info
 - object-info: send attribute packet regardless of object ids
 - object-store: add function to free object_info contents
 - fetch-pack: move fetch default settings
 - fetch-pack: refactor packet writing

 A client component to talk with the object-info endpoint.

 Expecting a reroll.
 source: <20220502170904.2770649-1-calvinwan@google.com>

--------------------------------------------------
[Cooking]

* ds/midx-with-less-memory (2022-07-19) 3 commits
  (merged to 'next' on 2022-07-20 at 250d257c3e)
 + midx: reduce memory pressure while writing bitmaps
 + midx: extract bitmap write setup
 + pack-bitmap-write: use const for hashes

 The codepath to write multi-pack index has been taught to release a
 large chunk of memory that holds an array of objects in the packs,
 as soon as it is done with the array, to reduce memory consumption.

 Will merge to 'master'.
 source: <pull.1292.v2.git.1658244366.gitgitgadget@gmail.com>


* ma/sparse-checkout-cone-doc-fix (2022-07-18) 1 commit
  (merged to 'next' on 2022-07-19 at c259b61b0e)
 + config/core.txt: fix minor issues for `core.sparseCheckoutCone`

 Docfix.

 Will merge to 'master'.
 source: <20220718100530.2068354-1-martin.agren@gmail.com>


* ma/t4200-update (2022-07-18) 1 commit
  (merged to 'next' on 2022-07-19 at 710d0cafd9)
 + t4200: drop irrelevant code

 Test fix.

 Will merge to 'master'.
 source: <20220718154322.2177166-1-martin.agren@gmail.com>


* mb/config-document-include (2022-07-17) 1 commit
  (merged to 'next' on 2022-07-19 at 8267b80aa2)
 + config.txt: document include, includeIf

 Add missing documentation for "include" and "includeIf" features in
 "git config" file format, which incidentally teachs the command
 line completion to include them in its offerings.

 Will merge to 'master'.
 source: <pull.1285.v2.git.1658002423864.gitgitgadget@gmail.com>


* sg/index-format-doc-update (2022-07-18) 1 commit
  (merged to 'next' on 2022-07-19 at ccc384be5e)
 + index-format.txt: remove outdated list of supported extensions

 Docfix.

 Will merge to 'master'.
 source: <20220718085640.7395-1-szeder.dev@gmail.com>


* tl/pack-bitmap-error-messages (2022-07-18) 6 commits
  (merged to 'next' on 2022-07-19 at 3f9565653a)
 + pack-bitmap.c: continue looping when first MIDX bitmap is found
 + pack-bitmap.c: using error() instead of silently returning -1
 + pack-bitmap.c: do not ignore error when opening a bitmap file
 + pack-bitmap.c: rename "idx_name" to "bitmap_name"
 + pack-bitmap.c: mark more strings for translations
 + pack-bitmap.c: fix formatting of error messages

 Tweak various messages that come from the pack-bitmap codepaths.

 Will merge to 'master'.
 source: <cover.1658159745.git.dyroneteng@gmail.com>


* tl/trace2-config-scope (2022-07-22) 2 commits
 - tr2: shows scope unconditionally in addition to key-value pair
 - api-trace2.txt: print config key-value pair

 Tweak trace2 output about configuration variables.

 Will merge to 'next'?
 source: <cover.1658472474.git.dyroneteng@gmail.com>


* vd/scalar-doc (2022-07-18) 2 commits
  (merged to 'next' on 2022-07-20 at fab0234da4)
 + scalar: convert README.md into a technical design doc
 + scalar: reword command documentation to clarify purpose

 Doc update.

 Will merge to 'master'.
 source: <pull.1275.v2.git.1657584367.gitgitgadget@gmail.com>


* cl/rerere-train-with-no-sign (2022-07-19) 1 commit
  (merged to 'next' on 2022-07-20 at fbb9414d09)
 + contrib/rerere-train: avoid useless gpg sign in training

 "rerere-train" script (in contrib/) used to honor commit.gpgSign
 while recreating the throw-away merges.

 Will merge to 'master'.
 source: <PH7PR14MB5594A27B9295E95ACA4D6A69CE8F9@PH7PR14MB5594.namprd14.prod.outlook.com>


* ds/win-syslog-compiler-fix (2022-07-19) 1 commit
  (merged to 'next' on 2022-07-20 at d38b649b18)
 + compat/win32: correct for incorrect compiler warning

 Workaround for a false positive compiler warning.

 Will merge to 'master'.
 source: <pull.1294.git.1658256354725.gitgitgadget@gmail.com>


* ld/osx-keychain-usage-fix (2022-07-19) 1 commit
  (merged to 'next' on 2022-07-20 at eebd316ef6)
 + osx-keychain: fix compiler warning

 Workaround for a compiler warning against use of die() in
 osx-keychain (in contrib/).

 Will merge to 'master'.
 source: <pull.1293.git.1658251503775.gitgitgadget@gmail.com>


* ab/submodule-helper-leakfix (2022-07-21) 26 commits
 - submodule--helper: fix a configure_added_submodule() leak
 - submodule--helper: fix bad config API usage
 - submodule--helper: free rest of "displaypath" in "struct update_data"
 - submodule--helper: don't exit() on failure, return
 - submodule--helper: add skeleton "goto cleanup" to update_submodule()
 - submodule--helper: rename "int res" to "int ret"
 - submodule--helper: free some "displaypath" in "struct update_data"
 - submodule--helper: fix a memory leak in print_status()
 - submodule--helper: fix a leak in module_add()
 - submodule--helper: fix obscure leak in module_add()
 - submodule--helper: fix "reference" leak is "module_clone_data"
 - submodule--helper: fix a memory leak in get_default_remote_submodule()
 - submodule--helper: fix a leak with repo_clear()
 - submodule--helper: fix "sm_path" and other "module_cb_list" leaks
 - submodule--helper: fix "errmsg_str" memory leak
 - submodule--helper: refactor "errmsg_str" to be a "struct strbuf"
 - submodule--helper: add and use *_release() functions
 - submodule--helper: add "const" to copy of "update_data"
 - submodule--helper: don't leak {run,capture}_command() cp.dir argument
 - submodule--helper: "struct pathspec" memory leak in module_update()
 - submodule--helper: fix most "struct pathspec" memory leaks
 - submodule--helper: fix trivial get_default_remote_submodule() leak
 - submodule--helper: fix a leak in "clone_submodule"
 - submodule--helper: pass a "const struct module_clone_data" to clone_submodule()
 - submodule--helper: stop conflating "sb" in clone_submodule()
 - submodule--helper: replace memset() with { 0 }-initialization

 Plugging leaks in submodule--helper.

 Getting there.
 source: <cover-v3-00.26-00000000000-20220721T191249Z-avarab@gmail.com>


* mt/doc-config (2022-07-14) 3 commits
 - doc: notes: unify configuration variables definitions
 - doc: apply: unify configuration variables definitions
 - doc: grep: unify configuration variables definitions

 Unify description of configuration variables used by individual
 commands in the documentation of the commands and the documentation
 of the "git config".

 Will discard (Retracted?).
 cf. <CAHd-oW4zHA1YLX-5B1vYTA1f8PocziUCi0WxvSEkFUuf2GqKxg@mail.gmail.com>
 source: <cover.1657819649.git.matheus.bernardino@usp.br>


* jt/fetch-pack-trace2-filter-spec (2022-07-18) 1 commit
 - fetch-pack: write effective filter to trace2

 "git fetch" client logs the partial clone filter used in the trace2
 output.

 Will merge to 'next'?
 source: <20220718170027.3993042-1-jonathantanmy@google.com>


* mb/doc-rerere-autoupdate (2022-07-15) 1 commit
 - cherry-pick doc: clarify no-rerere-autoupdate still allows rerere

 Clarifies that the "--no-rerere-autoupdate" option does not disable
 the "rerere" mechanism (nor does "--rerere-autoupdate" enable it).

 Will merge to 'next'?
 source: <20220715092527.1567837-1-mail@beyermatthias.de>


* rs/mergesort (2022-07-17) 10 commits
 - mergesort: remove llist_mergesort()
 - packfile: use DEFINE_LIST_SORT
 - fetch-pack: use DEFINE_LIST_SORT
 - commit: use DEFINE_LIST_SORT
 - blame: use DEFINE_LIST_SORT
 - test-mergesort: use DEFINE_LIST_SORT
 - test-mergesort: use DEFINE_LIST_SORT_DEBUG
 - mergesort: add macros for typed sort of linked lists
 - mergesort: tighten merge loop
 - mergesort: unify ranks loops

 Make our mergesort implementation type-safe.

 Will merge to 'next'?
 source: <4d7cd286-398e-215c-f2bd-aa7e8207be4f@web.de>


* cw/submodule-merge-messages (2022-07-18) 1 commit
 - submodule merge: update conflict error message

 Update the message given when "git merge" sees conflicts at a path
 with a submodule while merging a superproject.

 Needs review.
 source: <20220718214349.3379328-1-calvinwan@google.com>


* ds/doc-wo-whitelist (2022-07-19) 5 commits
  (merged to 'next' on 2022-07-20 at ec51c6269a)
 + transport.c: avoid "whitelist"
 + t: avoid "whitelist"
 + git.txt: remove redundant language
 + git-cvsserver: clarify directory list
 + daemon: clarify directory arguments

 Avoid "white/black-list" in documentation and code comments.

 Will merge to 'master'.
 source: <pull.1274.v3.git.1658255537.gitgitgadget@gmail.com>


* mt/checkout-count-fix (2022-07-14) 3 commits
  (merged to 'next' on 2022-07-22 at 60c73a6b0b)
 + checkout: fix two bugs on the final count of updated entries
 + checkout: show bug about failed entries being included in final report
 + checkout: document bug where delayed checkout counts entries twice
 (this branch is used by mt/rot13-in-c.)

 "git checkout" miscounted the paths it updated, which has been
 corrected.

 Will merge to 'master'.
 source: <cover.1657799213.git.matheus.bernardino@usp.br>


* tb/commit-graph-genv2-upgrade-fix (2022-07-15) 3 commits
 - commit-graph: fix corrupt upgrade from generation v1 to v2
 - commit-graph: introduce `repo_find_commit_pos_in_graph()`
 - t5318: demonstrate commit-graph generation v2 corruption

 There was a bug in the codepath to upgrade generation information
 in commit-graph from v1 to v2 format, which has been corrected.

 Will merge to 'next'?
 source: <cover.1657667404.git.me@ttaylorr.com>


* js/safe-directory-plus (2022-07-13) 3 commits
 - mingw: be more informative when ownership check fails on FAT32
 - mingw: handle a file owned by the Administrators group correctly
 - Allow debugging unsafe directories' ownership

 Needs review.
 source: <pull.1286.git.1657700238.gitgitgadget@gmail.com>


* po/doc-add-renormalize (2022-07-09) 1 commit
 - doc add: renormalize is not idempotent for CRCRLF

 Documentation for "git add --renormalize" has been improved.

 Expecting a reroll.
 cf. <dfe0c1ab-33f8-f13e-71ce-1829bb0d2d7f@iee.email>
 source: <d3b8ed97a105ea1d7e656c964b7eee378e11ede6.1657385781.git.gitgitgadget@gmail.com>


* po/glossary-around-traversal (2022-07-09) 3 commits
 - glossary: add reachability bitmap description
 - glossary: add commit graph description
 - glossary: add Object DataBase (ODB) abbreviation

 The glossary entries for "commit-graph file" and "reachability
 bitmap" have been added.

 Expecting a reroll.
 cf. <dfe0c1ab-33f8-f13e-71ce-1829bb0d2d7f@iee.email>
 source: <pull.1282.git.1657385781.gitgitgadget@gmail.com>


* ac/bitmap-lookup-table (2022-07-20) 6 commits
 - bitmap-lookup-table: add performance tests for lookup table
 - p5310-pack-bitmaps.sh: enable `pack.writeReverseIndex`
 - pack-bitmap: prepare to read lookup table extension
 - pack-bitmap-write: learn pack.writeBitmapLookupTable and add tests
 - pack-bitmap-write.c: write lookup table extension
 - Documentation/technical: describe bitmap lookup table extension

 The pack bitmap file gained a bitmap-lookup table to speed up
 locating the necessary bitmap for a given commit.

 Waiting for a more thorough review.
 cf. <Ys4DjW9JjQFx5Bhb@nand.local>
 source: <pull.1266.v4.git.1658325913.gitgitgadget@gmail.com>


* kk/p4-client-name-encoding-fix (2022-07-21) 2 commits
  (merged to 'next' on 2022-07-21 at 008518b4e5)
 + git-p4: refactoring of p4CmdList()
  (merged to 'next' on 2022-07-11 at 9c18616f76)
 + git-p4: fix bug with encoding of p4 client name

 "git p4" did not handle non-ASCII client name well, which has been
 corrected.

 Will merge to 'master'.
 source: <pull.1285.v3.git.git.1658394440.gitgitgadget@gmail.com>


* sa/cat-file-mailmap (2022-07-18) 4 commits
 - cat-file: add mailmap support
 - ident: rename commit_rewrite_person() to apply_mailmap_to_header()
 - ident: move commit_rewrite_person() to ident.c
 - revision: improve commit_rewrite_person()

 "git cat-file" learned an option to use the mailmap when showing
 commit and tag objects.

 Will merge to 'next'?
 source: <20220718195102.66321-1-siddharthasthana31@gmail.com>


* ds/rebase-update-ref (2022-07-19) 13 commits
  (merged to 'next' on 2022-07-20 at 9f4bf9ef6c)
 + sequencer: notify user of --update-refs activity
 + sequencer: ignore HEAD ref under --update-refs
 + rebase: add rebase.updateRefs config option
 + sequencer: rewrite update-refs as user edits todo list
 + rebase: update refs from 'update-ref' commands
 + rebase: add --update-refs option
 + sequencer: add update-ref command
 + sequencer: define array with enum values
 + rebase-interactive: update 'merge' description
 + branch: consider refs under 'update-refs'
 + t2407: test branches currently using apply backend
 + t2407: test bisect and rebase as black-boxes
 + Merge branch 'ds/branch-checked-out' into ds/rebase-update-ref

 "git rebase -i" learns to update branches whose tip appear in the
 rebased range.

 Will merge to 'master'.
 source: <pull.1247.v5.git.1658255624.gitgitgadget@gmail.com>


* pw/xdiff-alloc (2022-07-08) 4 commits
 - xdiff: introduce XDL_ALLOC_GROW()
 - xdiff: introduce XDL_CALLOC_ARRAY()
 - xdiff: introduce xdl_calloc
 - xdiff: introduce XDL_ALLOC_ARRAY()

 Add a level of redirection to array allocation API in xdiff part,
 to make it easier to share with the libgit2 project.

 Will merge to 'next'?
 source: <pull.1272.v2.git.1657297519.gitgitgadget@gmail.com>


* ab/squelch-empty-fsync-traces (2022-07-18) 1 commit
  (merged to 'next' on 2022-07-19 at f77cd40c29)
 + trace2: only include "fsync" events if we git_fsync()

 Omit fsync-related trace2 entries when their values are all zero.

 Will merge to 'master'.
 source: <patch-v3-1.1-979dea5956a-20220718T102747Z-avarab@gmail.com>


* en/merge-restore-to-pristine (2022-07-21) 7 commits
 - merge: do not exit restore_state() prematurely
 - merge: ensure we can actually restore pre-merge state
 - merge: make restore_state() restore staged state too
 - merge: fix save_state() to work when there are stat-dirty files
 - merge: do not abort early if one strategy fails to handle the merge
 - merge-resolve: abort if index does not match HEAD
 - merge-ort-wrappers: make printed message match the one from recursive

 When "git merge" finds that it cannot perform a merge, it should
 restore the working tree to the state before the command was
 initiated, but in some corner cases it didn't.

 Will merge to 'next'?
 source: <pull.1231.v3.git.1658391391.gitgitgadget@gmail.com>


* zh/ls-files-format (2022-07-20) 1 commit
 - ls-files: introduce "--format" option

 "git ls-files" learns the "--format" option to tweak its output.

 Will merge to 'next'?
 source: <pull.1262.v8.git.1658334983053.gitgitgadget@gmail.com>


* js/commit-graph-parsing-without-repo-settings (2022-07-14) 1 commit
  (merged to 'next' on 2022-07-19 at bcc29d823d)
 + commit-graph: pass repo_settings instead of repository

 API tweak to make it easier to run fuzz testing on commit-graph parser.

 Will merge to 'master'.
 source: <fd70b6119153b165a62ee4f693dbe47031cfb2be.1657834657.git.steadmon@google.com>


* jt/connected-show-missing-from-which-side (2022-06-10) 1 commit
 - fetch,fetch-pack: clarify connectivity check error

 We may find an object missing after a "git fetch" stores the
 objects it obtained from the other side, but it is not necessarily
 because the remote failed to send necessary objects.  Reword the
 messages in an attempt to help users explore other possibilities
 when they hit this error.

 Expecting a reroll.
 source: <20220610195247.1177549-1-jonathantanmy@google.com>


* tb/show-ref-count (2022-06-06) 2 commits
 - builtin/show-ref.c: limit output with `--count`
 - builtin/show-ref.c: rename `found_match` to `matches_nr`

 "git show-ref" learned to stop after emitting N refs with the new
 "--count=N" option.

 Expecting a reroll.
 cf. <xmqqczfl4ce1.fsf@gitster.g>
 source: <cover.1654552560.git.me@ttaylorr.com>


* ds/bundle-uri-more (2022-06-06) 6 commits
 - fetch: add 'refs/bundle/' to log.excludeDecoration
 - bundle-uri: add support for http(s):// and file://
 - fetch: add --bundle-uri option
 - bundle-uri: create basic file-copy logic
 - remote-curl: add 'get' capability
 - docs: document bundle URI standard

 The "bundle URI" topic.

 Needs review.
 source: <pull.1248.git.1654545325.gitgitgadget@gmail.com>


* js/bisect-in-c (2022-06-27) 16 commits
 - bisect: no longer try to clean up left-over `.git/head-name` files
 - bisect: remove Cogito-related code
 - Turn `git bisect` into a full built-in
 - bisect: move even the command-line parsing to `bisect--helper`
 - bisect: teach the `bisect--helper` command to show the correct usage strings
 - bisect--helper: return only correct exit codes in `cmd_*()`
 - bisect--helper: move the `BISECT_STATE` case to the end
 - bisect--helper: make `--bisect-state` optional
 - bisect--helper: align the sub-command order with git-bisect.sh
 - bisect--helper: using `--bisect-state` without an argument is a bug
 - bisect--helper: really retire `--bisect-autostart`
 - bisect--helper: really retire --bisect-next-check
 - bisect--helper: retire the --no-log option
 - bisect: avoid double-quoting when printing the failed command
 - bisect run: fix the error message
 - bisect: verify that a bogus option won't try to start a bisection

 Final bits of "git bisect.sh" have been rewritten in C.

 Expecting a (hopefully final) reroll.
 cf. <20627.86ilolhnnn.gmgdl@evledraar.gmail.com>
 source: <pull.1132.v4.git.1656354677.gitgitgadget@gmail.com>

--------------------------------------------------
[Discarded]

* ar/send-email-confirm-by-default (2022-04-22) 1 commit
 . send-email: always confirm by default

 "git send-email" is changed so that by default it asks for
 confirmation before sending each message out.

 Discarded.
 I wanted to like this, and had it in the version of Git I use
 myself for daily work, but the prompting turned out to be somewhat
 distracting.
 source: <20220422083629.1404989-1-hi@alyssa.is>

^ permalink raw reply	[relevance 3%]

Results 201-400 of ~2000   |  | reverse | options above
-- pct% links below jump to the message on this page, permalinks otherwise --
2015-11-03  7:39     [PATCH v6 00/25] refs backend pre-vtable Michael Haggerty
2015-11-03  7:40     ` [PATCH v6 25/25] refs: break out ref conflict checks Michael Haggerty
2015-11-04 21:01       ` David Turner
2015-11-05  4:00         ` Michael Haggerty
2015-11-05 16:22           ` David Turner
2015-11-06 13:34             ` Michael Haggerty
2015-11-06 17:28               ` Junio C Hamano
2015-11-06 23:24  2%             ` Junio C Hamano
2015-11-05 23:13  2% What's cooking in git.git (Nov 2015, #01; Thu, 5) Junio C Hamano
2015-11-25  1:07     What's cooking in git.git (Nov 2015, #04; Tue, 24) Jeff King
2015-11-28 15:40     ` brian m. carlson
2015-11-28 16:35       ` Jeff King
2015-11-28 17:09         ` brian m. carlson
2015-12-01 23:10  2%       ` Jeff King
2015-12-02  0:24     What's cooking in git.git (Dec 2015, #01; Tue, 1) Jeff King
2015-12-02 22:11  2% ` Junio C Hamano
2015-12-02 22:31  3%   ` Jeff King
2015-12-02 23:31  0%     ` Junio C Hamano
2015-12-03  1:09  0%     ` Junio C Hamano
2015-12-03  0:29  0%   ` David Turner
2016-03-20  1:23     [PATCH] Fixing segmentation fault when merging FETCH_HEAD Eric Sunshine
2016-03-21  0:11     ` Jose Ivan B. Vilarouca Filho
2016-03-21 19:01  2%   ` merge: fix NULL pointer dereference when merging nothing into void Junio C Hamano
2016-03-21 19:36  2%     ` Eric Sunshine
2016-03-23 21:12  3% What's cooking in git.git (Mar 2016, #04; Wed, 23) Junio C Hamano
2016-03-25 22:03  2% What's cooking in git.git (Mar 2016, #05; Fri, 25) Junio C Hamano
2016-04-01 22:47  2% What's cooking in git.git (Apr 2016, #01; Fri, 1) Junio C Hamano
2016-04-04 21:26  2% What's cooking in git.git (Apr 2016, #02; Mon, 4) Junio C Hamano
2016-04-07 19:01  2% What's cooking in git.git (Apr 2016, #03; Thu, 7) Junio C Hamano
2016-04-07 21:03  0% ` Pranit Bauva
2016-04-14 22:12  2% [PATCH] ll-merge: fix typo in comment Junio C Hamano
2016-04-18 22:48  3% What's cooking in git.git (Apr 2016, #05; Mon, 18) Junio C Hamano
2016-04-21 22:20  3% What's cooking in git.git (Apr 2016, #06; Thu, 21) Junio C Hamano
2016-04-25 22:43  3% What's cooking in git.git (Apr 2016, #07; Mon, 25) Junio C Hamano
2016-04-29 22:04  2% [ANNOUNCE] Git v2.8.2 Junio C Hamano
2016-04-29 22:04  2% What's cooking in git.git (Apr 2016, #08; Fri, 29) Junio C Hamano
2016-05-03 22:49  3% What's cooking in git.git (May 2016, #01; Tue, 3) Junio C Hamano
2016-05-06 22:46  3% What's cooking in git.git (May 2016, #02; Fri, 6) Junio C Hamano
2016-05-09 23:00  3% What's cooking in git.git (May 2016, #03; Mon, 9) Junio C Hamano
2016-05-11 22:13  3% What's cooking in git.git (May 2016, #04; Wed, 11) Junio C Hamano
2016-05-13 22:11  3% What's cooking in git.git (May 2016, #05; Fri, 13) Junio C Hamano
2016-05-17 22:47  2% What's cooking in git.git (May 2016, #06; Tue, 17) Junio C Hamano
2016-05-23 23:23  3% [ANNOUNCE] Git v2.9.0-rc0 Junio C Hamano
2016-05-31 21:53  3% [ANNOUNCE] Git v2.9.0-rc1 Junio C Hamano
2016-06-07  5:57  2% [ANNOUNCE] Git v2.9.0-rc2 Junio C Hamano
2016-06-13 19:45  2% [ANNOUNCE] Git v2.9.0 Junio C Hamano
2017-03-03 23:26  2% What's cooking in git.git (Mar 2017, #02; Fri, 3) Junio C Hamano
2017-03-08 23:47  2% What's cooking in git.git (Mar 2017, #03; Wed, 8) Junio C Hamano
2017-03-10 23:03  2% What's cooking in git.git (Mar 2017, #04; Fri, 10) Junio C Hamano
2017-03-13 22:43  2% What's cooking in git.git (Mar 2017, #05; Mon, 13) Junio C Hamano
2017-03-14 23:35     What's cooking in git.git (Mar 2017, #06; Tue, 14) Junio C Hamano
2017-03-14 23:39  2% ` Junio C Hamano
2017-04-20 20:52  2% [BUG] test suite broken with GIT_TEST_SPLIT_INDEX Thomas Gummerer
2017-04-20 21:03  0% ` Christian Couder
2017-04-20 21:24  0%   ` Thomas Gummerer
2017-05-23  8:08     What's cooking in git.git (May 2017, #07; Tue, 23) Junio C Hamano
2017-05-23 19:08     ` Stefan Beller
2017-05-23 19:38       ` Stefan Beller
2017-05-23 19:50         ` Ævar Arnfjörð Bjarmason
2017-05-25  3:42  2%       ` Junio C Hamano
2017-05-25  5:42  0%         ` Stefan Beller
2017-05-30 17:30     [PATCH 00/33] object id conversion (grep and diff) Brandon Williams
2017-06-02  1:34     ` Junio C Hamano
2017-06-02  5:08       ` Junio C Hamano
2017-06-02  7:19         ` Junio C Hamano
2017-06-02 18:22           ` Brandon Williams
2017-06-02 23:35  3%         ` Junio C Hamano
2017-06-05 19:42  0%           ` Brandon Williams
2017-07-14 14:44     [PATCH v6 00/10] The final building block for a faster rebase -i Johannes Schindelin
2017-07-20 21:38  2% ` Junio C Hamano
2017-07-22 11:44  0%   ` Johannes Schindelin
2017-07-25 15:09     [RFC] Git rerere and non-conflicting changes during conflict resolution Raman Gupta
2017-07-25 17:52     ` Jeff King
2017-07-25 20:26  3%   ` Junio C Hamano
2017-07-25 20:40  2%     ` Junio C Hamano
2017-07-25 20:58  2%     ` Jeff King
2017-07-26  7:14  3%       ` Junio C Hamano
2017-07-27 21:01  3%         ` Junio C Hamano
2017-07-26  8:06  3%       ` Junio C Hamano
2017-09-05 21:01  2% [PATCH] builtin/merge: honor commit-msg hook for merges Stefan Beller
2017-09-05 21:38  0% ` Junio C Hamano
2017-09-05 23:29  2%   ` [PATCHv2] " Stefan Beller
2017-09-07 22:04  2%   ` [PATCHv3] " Stefan Beller
2017-11-14  9:31     [PATCH] t/lib-gpg: fix gpgconf stderr redirect to /dev/null Johan Herland
2017-11-14 16:17  2% ` [PATCH] notes: send "Automatic notes merge failed" messages to stderr Todd Zullinger
2017-11-15 13:13  0%   ` Johan Herland
2017-11-15 21:09  0%     ` Todd Zullinger
2018-02-16 13:08     [RFC] Rebasing merges: a jorney to the ultimate solution (Road Clear) Sergey Organov
2018-02-19 23:44     ` Igor Djordjevic
2018-02-27  0:07       ` Johannes Schindelin
2018-02-27  5:30         ` Jacob Keller
2018-02-27 16:21           ` Johannes Schindelin
2018-02-27 18:55             ` Igor Djordjevic
2018-02-27 19:59               ` Igor Djordjevic
2018-02-27 23:40                 ` Igor Djordjevic
2018-02-28  5:19                   ` Sergey Organov
2018-02-28 20:25                     ` Igor Djordjevic
2018-03-01  5:39                       ` Sergey Organov
2018-03-02 11:31                         ` Phillip Wood
2018-03-03  0:29                           ` Igor Djordjevic
2018-03-05  5:00                             ` Sergey Organov
2018-03-06 10:52                               ` Phillip Wood
2018-03-06 16:56  2%                             ` Junio C Hamano
2018-03-08  7:05                                   ` Johannes Schindelin
2018-03-08  8:18  2%                                 ` Junio C Hamano
2018-03-11 11:56  0%                                   ` Johannes Schindelin
2018-03-13 18:24  3%                                     ` Junio C Hamano
2018-03-26 13:17  0%                                       ` Johannes Schindelin
2018-04-17 16:34     [PATCH v1 0/5] Allocate cache entries from memory pool Jameson Miller
2018-04-18  4:49     ` Junio C Hamano
2018-04-20 17:49       ` Stefan Beller
2018-04-23 16:44  2%     ` Jameson Miller
2018-04-23 16:19  1%   ` Jameson Miller
2018-04-19 17:57  3% [PATCH v10 00/36] Add directory rename detection to git Elijah Newren
2018-04-25  8:37  3% What's cooking in git.git (Apr 2018, #03; Wed, 25) Junio C Hamano
2018-04-30  3:25  3% What's cooking in git.git (Apr 2018, #04; Mon, 30) Junio C Hamano
2018-05-07 14:58  3% What's cooking in git.git (May 2018, #01; Mon, 7) Junio C Hamano
2018-05-17  6:01  3% What's cooking in git.git (May 2018, #02; Thu, 17) Junio C Hamano
2018-05-30 22:47  3% [ANNOUNCE] Git v2.18.0-rc0 Junio C Hamano
2018-06-03  6:58  3% [RFC PATCH 0/7] merge requirement: index matches head Elijah Newren
2018-06-03  6:58  1% ` [RFC PATCH 7/7] merge: fix misleading pre-merge check documentation Elijah Newren
2018-06-07  5:27  3%   ` Elijah Newren
2018-07-01  1:24  3% ` [PATCH v2 0/9] Fix merge issues with index not matching HEAD Elijah Newren
2018-07-01  1:25  1%   ` [PATCH v2 9/9] merge: fix misleading pre-merge check documentation Elijah Newren
2018-06-04 13:53  3% [ANNOUNCE] Git v2.18.0-rc1 Junio C Hamano
2018-06-13 22:12  3% [ANNOUNCE] Git v2.18.0-rc2 Junio C Hamano
2018-06-21 19:27  3% [ANNOUNCE] Git v2.18.0 Junio C Hamano
2018-06-29  1:21     [PATCH v3 00/32] object-store: lookup_commit Stefan Beller
2018-06-29 17:57     ` Junio C Hamano
2018-06-29 18:03  2%   ` Junio C Hamano
2018-06-29 18:34  0%     ` Stefan Beller
2018-07-11  5:18     [PATCH 0/2] Address recovery failures with directory/file conflicts Elijah Newren
2018-07-11  5:18  2% ` [PATCH 2/2] read-cache: fix directory/file conflict handling in read_index_unmerged() Elijah Newren
2018-07-13 16:33     ` [PATCH v2 0/2] Address recovery failures with directory/file conflicts Elijah Newren
2018-07-13 16:33  2%   ` [PATCH v2 2/2] read-cache: fix directory/file conflict handling in read_index_unmerged() Elijah Newren
2018-07-31 17:12       ` [PATCH v3 0/2] Address recovery failures with directory/file conflicts Elijah Newren
2018-07-31 17:12  2%     ` [PATCH v3 2/2] read-cache: fix directory/file conflict handling in read_index_unmerged() Elijah Newren
2018-07-11 19:02  3% What's cooking in git.git (Jul 2018, #01; Wed, 11) Junio C Hamano
2018-07-18 22:03  3% What's cooking in git.git (Jul 2018, #02; Wed, 18) Junio C Hamano
2018-07-25 22:13  3% What's cooking in git.git (Jul 2018, #03; Wed, 25) Junio C Hamano
2018-08-02 23:02  3% What's cooking in git.git (Aug 2018, #01; Thu, 2) Junio C Hamano
2018-08-20 22:13  3% [ANNOUNCE] Git v2.19.0-rc0 Junio C Hamano
2018-09-04 20:27     [PATCH 0/2] commit-graph: add progress output Ævar Arnfjörð Bjarmason
2018-09-07 18:29     ` [PATCH v2 1/2] commit-graph write: " Ævar Arnfjörð Bjarmason
2018-09-21 20:01       ` Derrick Stolee
2018-09-21 21:43         ` Junio C Hamano
2018-09-21 21:57  2%       ` Junio C Hamano
2018-09-10 20:11  3% [ANNOUNCE] Git v2.19.0 Junio C Hamano
2018-09-21  5:22     What's cooking in git.git (Sep 2018, #04; Thu, 20) Junio C Hamano
2018-09-21 17:05     ` Johannes Sixt
2018-09-21 17:17  3%   ` Junio C Hamano
2018-11-07  9:41     What's cooking in git.git (Nov 2018, #03; Wed, 7) Junio C Hamano
2018-11-07 13:09     ` SZEDER Gábor
2018-11-07 15:09       ` Duy Nguyen
2018-11-07 22:09  2%     ` Junio C Hamano
2018-11-08  6:09  1%       ` Junio C Hamano
2018-11-13 18:05  1% Git Test Coverage Report (Tuesday, Nov 13) Derrick Stolee
2019-01-29 10:56     [PATCH 0/1] Provide a fix for the semantic merge conflict between 'js/vsts-ci' and 'sg/travis-specific-cc' Johannes Schindelin via GitGitGadget
2019-01-29 10:56     ` [PATCH 1/1] fixup! Merge branch 'js/vsts-ci' into pu Johannes Schindelin via GitGitGadget
2019-01-29 17:50  2%   ` Junio C Hamano
2019-03-21 13:16     [PATCH v5 00/26] Add new command 'switch' Nguyễn Thái Ngọc Duy
2019-03-29 10:38     ` [PATCH v6 00/27] " Nguyễn Thái Ngọc Duy
2019-03-29 10:38       ` [PATCH v6 07/27] checkout: inform the user when removing branch state Nguyễn Thái Ngọc Duy
2019-07-02  8:06         ` SZEDER Gábor
2019-07-02  9:03           ` Duy Nguyen
2019-07-02 17:51  2%         ` Junio C Hamano
2019-07-04 23:57  0%           ` Duy Nguyen
2019-05-24 20:28  3% [PATCH 00/52] fix some -Wmissing-field-initializer warnings Ramsay Jones
2019-07-25 17:45     [PATCH 00/19] Cleanup merge API Elijah Newren
2019-07-25 17:45  3% ` [PATCH 03/19] Ensure index matches head before invoking merge machinery, round N Elijah Newren
2019-07-25 19:41  0%   ` Johannes Schindelin
2019-07-25 19:58  0%     ` Elijah Newren
2019-07-26 15:52     ` [PATCH v2 00/20] Cleanup merge API Elijah Newren
2019-07-26 15:52  2%   ` [PATCH v2 03/20] Ensure index matches head before invoking merge machinery, round N Elijah Newren
2019-08-15 21:40       ` [PATCH v3 00/24] Clean up merge API Elijah Newren
2019-08-15 21:40  2%     ` [PATCH v3 08/24] Ensure index matches head before invoking merge machinery, round N Elijah Newren
2019-08-17 18:41         ` [PATCH v4 00/24] Clean up merge API Elijah Newren
2019-08-17 18:41  2%       ` [PATCH v4 08/24] Ensure index matches head before invoking merge machinery, round N Elijah Newren
2019-08-26  2:43     [PATCH 00/11] hashmap: bugfixes, safety fixes, and WIP improvements Eric Wong
2019-08-26  2:43     ` [PATCH 04/11] hashmap_entry: detect improper initialization Eric Wong
2019-08-27  9:10       ` Johannes Schindelin
2019-08-27  9:49         ` Eric Wong
2019-08-27 22:16  1%       ` Junio C Hamano
2019-08-28 15:04  0%         ` Johannes Schindelin
2020-01-08  0:31     [PATCH] submodule add: show 'add --dry-run' stderr when aborting Kyle Meyer
2020-01-16 16:17     ` Johannes Schindelin
2020-01-16 20:23  2%   ` Junio C Hamano
2020-03-27 11:44     git rebase fast-forward fails with abbreviateCommands Jan Alexander Steffens (heftig)
2020-03-30 12:42  2% ` [PATCH v1 0/2] rebase --merge: fix fast forwarding when `rebase.abbreviateCommands' is set Alban Gruin
2020-06-12 14:08     Collaborative conflict resolution feature request Curtin, Eric
2020-06-13 12:08     ` Christian Couder
2020-06-13 12:38       ` Curtin, Eric
2020-06-13 13:14         ` Philip Oakley
2020-06-13 16:44  2%       ` Junio C Hamano
2020-06-15  9:51           ` Sergey Organov
2020-06-15 11:04             ` Philip Oakley
2020-06-16 17:17               ` Stefan Moch
2020-06-17 18:32  2%             ` Curtin, Eric
2020-06-23 10:58  8% [PATCH] Doc: reference 'seen' instead of 'pu' in meta docs Denton Liu
2020-06-23 15:09  0% ` Johannes Schindelin
2020-06-23 15:04     [PATCH 0/3] Accommodate for pu having been renamed to seen Johannes Schindelin via GitGitGadget
2020-06-23 15:04  8% ` [PATCH 2/3] docs: adjust the technical overview for the rename `pu` -> `seen` Johannes Schindelin via GitGitGadget
2020-06-24 14:48     ` [PATCH v2 0/3] Accommodate for pu having been renamed to seen Johannes Schindelin via GitGitGadget
2020-06-24 14:48  8%   ` [PATCH v2 2/3] docs: adjust the technical overview for the rename `pu` -> `seen` Johannes Schindelin via GitGitGadget
2020-06-25 12:18       ` [PATCH v3 0/3] Accommodate for pu having been renamed to seen Johannes Schindelin via GitGitGadget
2020-06-25 12:18  8%     ` [PATCH v3 2/3] docs: adjust the technical overview for the rename `pu` -> `seen` Johannes Schindelin via GitGitGadget
2020-07-23 17:56     [PATCH v2 00/18] Maintenance builtin, allowing 'gc --auto' customization Derrick Stolee via GitGitGadget
2020-07-30 22:24     ` [PATCH v3 00/20] " Derrick Stolee via GitGitGadget
2020-07-30 23:31       ` Junio C Hamano
2020-07-31  2:58  2%     ` Junio C Hamano
2020-07-28 20:21     [PATCH 0/11] renaming argv_array Jeff King
2020-07-28 20:27     ` [PATCH 10/11] strvec: drop argv_array compatibility layer Jeff King
2020-07-28 22:23       ` Junio C Hamano
2020-07-29  0:04         ` Jeff King
2020-07-29  0:37           ` Jeff King
2020-07-29  0:44  2%         ` Junio C Hamano
2020-07-29 16:22  0%           ` Jeff King
2020-08-02  6:33     [PATCH 0/4] Attr fixes Elijah Newren via GitGitGadget
2020-08-02  6:33  2% ` [PATCH 1/4] t6038: make tests fail for the right reason Elijah Newren via GitGitGadget
2020-08-02 18:17  0%   ` Junio C Hamano
2020-08-02 19:10  0%   ` Eric Sunshine
2020-08-03 18:41     ` [PATCH v2 0/4] Attr fixes Elijah Newren via GitGitGadget
2020-08-03 18:41  2%   ` [PATCH v2 1/4] t6038: make tests fail for the right reason Elijah Newren via GitGitGadget
2020-09-09  0:49     [PATCH v4 0/9] propose config-based hooks Emily Shaffer
2020-09-09 21:04  2% ` Junio C Hamano
2021-01-08 19:22     What's cooking in git.git (Jan 2021, #02; Fri, 8) Junio C Hamano
2021-01-14 23:06     ` Emily Shaffer
2021-01-15  2:36       ` Derrick Stolee
2021-01-15  6:36         ` Junio C Hamano
2021-01-15  6:38           ` Junio C Hamano
2021-01-15 11:36             ` Derrick Stolee
2021-01-15 19:44  2%           ` Junio C Hamano
2021-03-20 21:39     What's cooking in git.git (Mar 2021, #06; Sat, 20) Junio C Hamano
2021-03-22 13:52     ` Matheus Tavares Bernardino
2021-03-22 18:41  2%   ` Junio C Hamano
2021-04-09  4:02     [RFC PATCH v1 00/13][GSoC] doc: (monospace) apply CodingGuidelines on a large-scale Firmin Martin
2021-04-09  4:02  2% ` [RFC PATCH v1 02/13] doc: typeset branches and remotes in monospace Firmin Martin
2021-04-22  0:55     [PATCH v3] git-merge: rewrite already up to date message Josh Soref via GitGitGadget
2021-05-02  5:14  3% ` [PATCH v4 0/2] normalize & fix merge "up to date" messages Eric Sunshine
2021-05-02  5:14  2%   ` [PATCH v4 2/2] merge: fix swapped "up to date" message components Eric Sunshine
2021-05-03  5:21  2%     ` Junio C Hamano
2021-05-03  5:50  2%       ` Eric Sunshine
2021-05-03  6:28  2%         ` Junio C Hamano
2021-05-06  5:37  3% What's cooking in git.git (May 2021, #01; Thu, 6) Junio C Hamano
2021-05-12  7:46  3% What's cooking in git.git (May 2021, #02; Wed, 12) Junio C Hamano
2021-05-17  7:06  3% [ANNOUNCE] Git v2.32.0-rc0 Junio C Hamano
2021-05-22 14:21  3% [ANNOUNCE] Git v2.32.0-rc1 Junio C Hamano
2021-05-28  6:13  3% [ANNOUNCE] Git v2.32.0-rc2 Junio C Hamano
2021-06-02  8:29  3% [ANNOUNCE] Git v2.32.0-rc3 Junio C Hamano
2021-06-06 12:40  3% [ANNOUNCE] Git v2.32.0 Junio C Hamano
2021-06-10 13:06  1% [PATCH] add_pending_object_with_path(): work around "gcc -O3" complaint Jeff King
2021-06-13 22:58  3% [PATCH 0/4] merge: cleanups and fix Felipe Contreras
2021-06-13 22:58  2% ` [PATCH 2/4] merge: fix Yoda conditions Felipe Contreras
2021-08-24 16:41     'git pull' complains that a locally resurrected directory would be overwritten by merge when no pulled changes are affecting that directory Yuri
2021-08-25  1:05     ` Jeff King
2021-08-25 15:42  3%   ` Elijah Newren
2021-08-27 23:59     [PATCH] t7900: add '--scheduler=launchctl' parameter to fix test Ramsay Jones
2021-08-30 16:02     ` Junio C Hamano
2021-08-31  0:44       ` Ramsay Jones
2021-08-31 15:59  2%     ` Junio C Hamano
2022-01-20  7:47  3% [PATCH 0/2] Fix some old memory leaks in merge-ort and builtin/merge Elijah Newren via GitGitGadget
2022-01-20  7:47  2% ` [PATCH 2/2] merge: fix memory leaks in cmd_merge() Elijah Newren via GitGitGadget
2022-01-22  0:05  2%   ` Junio C Hamano
2022-01-22  5:16  3% What's cooking in git.git (Jan 2022, #06; Fri, 21) Junio C Hamano
2022-01-24 19:39  2% What's cooking in git.git (Jan 2022, #07; Mon, 24) Junio C Hamano
2022-02-04  5:22  3% What's cooking in git.git (Feb 2022, #01; Thu, 3) Junio C Hamano
2022-02-10  0:12  3% What's cooking in git.git (Feb 2022, #02; Wed, 9) Junio C Hamano
2022-02-21 11:10  3% [PATCH 0/7] rebase: make reflog messages independent of the backend Phillip Wood via GitGitGadget
2022-02-21 11:10  1% ` [PATCH 2/7] rebase --merge: fix reflog when continuing Phillip Wood via GitGitGadget
2022-04-07 13:49  2%   ` Christian Couder
2022-04-15 14:00  2%     ` Phillip Wood
2022-04-17  1:57  2%       ` Elijah Newren
2022-02-21 11:10  2% ` [PATCH 3/7] rebase --merge: fix reflog message after skipping Phillip Wood via GitGitGadget
2022-04-17  1:58  2%   ` Elijah Newren
2022-04-04 15:34  0% ` Review Request (was Re: [PATCH 0/7] rebase: make reflog messages independent of the backend) Phillip Wood
2022-04-17  2:13  0%   ` Elijah Newren
2022-04-18 18:56  0%     ` Phillip Wood
2022-04-17  2:09  0% ` [PATCH 0/7] rebase: make reflog messages independent of the backend Elijah Newren
2022-04-20  9:56  3% ` [PATCH v2 0/8] " Phillip Wood via GitGitGadget
2022-04-20  9:56  2%   ` [PATCH v2 3/8] rebase --merge: fix reflog when continuing Phillip Wood via GitGitGadget
2022-04-20  9:56  2%   ` [PATCH v2 4/8] rebase --merge: fix reflog message after skipping Phillip Wood via GitGitGadget
2022-04-04 20:43  3% [ANNOUNCE] Git v2.36.0-rc0 Junio C Hamano
2022-04-08 23:30  3% [ANNOUNCE] Git v2.36.0-rc1 Junio C Hamano
2022-04-12 17:03  3% [ANNOUNCE] Git v2.36.0-rc2 Junio C Hamano
2022-04-18 16:27  3% [ANNOUNCE] Git v2.36.0 Junio C Hamano
2022-05-19 16:26     [PATCH 0/2] Fix merge restore state Elijah Newren via GitGitGadget
2022-06-19  6:50  3% ` [PATCH v2 0/6] " Elijah Newren via GitGitGadget
2022-06-19  6:50  2%   ` [PATCH v2 3/6] merge: fix save_state() to work when there are racy-dirty files Elijah Newren via GitGitGadget
2022-07-17 16:28  2%     ` ZheNing Hu
2022-07-19 22:49  2%       ` Junio C Hamano
2022-07-21  1:09  2%         ` Elijah Newren
2022-07-19 22:43  2%     ` Junio C Hamano
2022-06-19  6:50       ` [PATCH v2 4/6] merge: make restore_state() restore staged state too Elijah Newren via GitGitGadget
2022-07-19 23:14         ` Junio C Hamano
2022-07-19 23:28           ` Junio C Hamano
2022-07-21  1:37  3%         ` Elijah Newren
2022-07-21  8:16  3%   ` [PATCH v3 0/7] Fix merge restore state Elijah Newren via GitGitGadget
2022-07-21  8:16  2%     ` [PATCH v3 2/7] merge-resolve: abort if index does not match HEAD Elijah Newren via GitGitGadget
2022-07-21  8:16  2%     ` [PATCH v3 3/7] merge: do not abort early if one strategy fails to handle the merge Elijah Newren via GitGitGadget
2022-07-21  8:16  2%     ` [PATCH v3 4/7] merge: fix save_state() to work when there are stat-dirty files Elijah Newren via GitGitGadget
2022-07-22  5:15  3%     ` [PATCH v4 0/7] Fix merge restore state Elijah Newren via GitGitGadget
2022-07-22  5:15  2%       ` [PATCH v4 2/7] merge-resolve: abort if index does not match HEAD Elijah Newren via GitGitGadget
2022-07-22 10:27  0%         ` Ævar Arnfjörð Bjarmason
2022-07-23  0:28  0%           ` Elijah Newren
2022-07-22  5:15  2%       ` [PATCH v4 3/7] merge: do not abort early if one strategy fails to handle the merge Elijah Newren via GitGitGadget
2022-07-22 10:47  0%         ` Ævar Arnfjörð Bjarmason
2022-07-23  0:36  0%           ` Elijah Newren
2022-07-22  5:15  2%       ` [PATCH v4 4/7] merge: fix save_state() to work when there are stat-dirty files Elijah Newren via GitGitGadget
2022-06-22 19:32  3% What's cooking in git.git (Jun 2022, #07; Wed, 22) Junio C Hamano
2022-06-27 18:22  3% What's cooking in git.git (Jun 2022, #08; Mon, 27) Junio C Hamano
2022-07-01 23:08  3% What's cooking in git.git (Jul 2022, #01; Fri, 1) Junio C Hamano
2022-07-09 20:36  3% What's cooking in git.git (Jul 2022, #02; Fri, 8) Junio C Hamano
2022-07-12 17:07  3% What's cooking in git.git (Jul 2022, #03; Mon, 11) Junio C Hamano
2022-07-14  1:32  3% What's cooking in git.git (Jul 2022, #04; Wed, 13) Junio C Hamano
2022-07-17  3:46  0% ` en/merge-restore-to-pristine (Was: Re: What's cooking in git.git (Jul 2022, #04; Wed, 13)) Elijah Newren
2022-07-17 16:58  0%   ` ZheNing Hu
2022-07-18  3:14  3% What's cooking in git.git (Jul 2022, #05; Sun, 17) Junio C Hamano
2022-07-20  1:20  3% What's cooking in git.git (Jul 2022, #06; Tue, 19) Junio C Hamano
2022-07-23  1:01  3% What's cooking in git.git (Jul 2022, #07; Fri, 22) Junio C Hamano

Code repositories for project(s) associated with this public inbox

	https://80x24.org/mirrors/git.git

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).