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: |
* [ANNOUNCE] Git v2.18.0
@ 2018-06-21 19:27  3% Junio C Hamano
  0 siblings, 0 replies; 19+ 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%]

* [ANNOUNCE] Git v2.18.0-rc1
@ 2018-06-04 13:53  3% Junio C Hamano
  0 siblings, 0 replies; 19+ 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%]

* [ANNOUNCE] Git v2.18.0-rc0
@ 2018-05-30 22:47  4% Junio C Hamano
  0 siblings, 0 replies; 19+ 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 4%]

* What's cooking in git.git (Apr 2018, #02; Tue, 17)
@ 2018-04-17  6:07  3% Junio C Hamano
  0 siblings, 0 replies; 19+ results
From: Junio C Hamano @ 2018-04-17  6:07 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.

I try to summarize what each topic is about immediately after the
list of commits on the topic, which may be followed by a short term
plan for the topic ("Will merge to 'next'", etc.), possibly followed
by a reminder (e.g. "cf. <message-id>") to help me recall the reason
behind the plan.  Please do not read more than that into "cf." (e.g.
the ones listed are not more important than other messages in the
same thread).

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]

* 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.

 I am not sure if this is going in a good direction.  Wouldn't it
 encourage fragmenting the world even more?


* 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.

 Will merge to 'master'.


* 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>


* 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.

 Waiting for a bit more discussion.
 cf. <CACsJy8B+fTfUiGA-cFE5QEipa_4pSfC4_GhUSJvCKL82G21xWw@mail.gmail.com>


* 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.

 Will merge to 'master'.


* 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.

 Will merge to 'master'.


* 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.

 Will merge to 'master'.


* en/rename-directory-detection-reboot (2018-04-16) 32 commits
 - merge-recursive: fix check for skipability of working tree updates
 - 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: improve output precision around skipping updates
 - 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.


* 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.

 Will merge to 'next'.


* nd/command-list (2018-04-16) 7 commits
 - SQUASH???
 - 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=builtins

 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/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.

 Will merge to 'master'.


* sb/object-store-replace (2018-04-12) 15 commits
 - 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

 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.

 What's the doneness of this thing?  I didn't recall seeing any
 response, especially ones that demonstrated the reviewer carefully
 read and thought about the issues surrounding the code.  Not that I
 spotted any problems in these patches myself, though.


* 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.

 Will merge to 'master'.


* hn/bisect-first-parent (2018-04-17) 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.


* so/grossary-ancestor (2018-04-17) 1 commit
 - glossary: substitute "ancestor" for "direct ancestor" in 'push' description.

 Docfix.

 Will merge to 'next'.


* tq/t1510 (2018-04-17) 1 commit
 - t1510-repo-setup.sh: remove useless mkdir

 Test cleanup.

 Will merge to 'next'.

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

* ab/doc-hash-brokenness (2018-03-27) 2 commits
  (merged to 'next' on 2018-03-29 at e9b2f5cf4a)
 + doc hash-function-transition: clarify what SHAttered means
 + doc hash-function-transition: clarify how older gits die on NewHash

 Doc updates.


* ab/drop-contrib-examples (2018-03-26) 1 commit
  (merged to 'next' on 2018-03-29 at 9d8a7603b5)
 + Remove contrib/examples/*


* ab/install-symlinks (2018-03-15) 3 commits
  (merged to 'next' on 2018-03-15 at 99d6bd6cb3)
 + Makefile: optionally symlink libexec/git-core binaries to bin/git
 + Makefile: add a gitexecdir_relative variable
 + Makefile: fix broken bindir_relative variable

 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.


* ab/pcre-v2 (2018-03-14) 3 commits
  (merged to 'next' on 2018-03-15 at e77b116903)
 + Makefile: make USE_LIBPCRE=YesPlease mean v2, not v1
 + configure: detect redundant --with-libpcre & --with-libpcre1
 + configure: fix a regression in PCRE v1 detection

 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.


* bc/hash-independent-tests (2018-03-26) 10 commits
  (merged to 'next' on 2018-03-29 at 11179d9b71)
 + t2107: abstract away SHA-1-specific constants
 + t2101: abstract away SHA-1-specific constants
 + t2101: modernize test style
 + t2020: abstract away SHA-1 specific constants
 + t1507: abstract away SHA-1-specific constants
 + t1411: abstract away SHA-1-specific constants
 + t1405: sort reflog entries in a hash-independent way
 + t1300: abstract away SHA-1-specific constants
 + t1304: abstract away SHA-1-specific constants
 + t1011: abstract away SHA-1-specific constants

 Tests that rely on the exact hardcoded values of object names have
 been updated in preparation for hash function migration.


* bc/object-id (2018-03-14) 36 commits
  (merged to 'next' on 2018-03-20 at f1800a33ff)
 + convert: convert to struct object_id
 + sha1_file: introduce a constant for max header length
 + Convert lookup_replace_object to struct object_id
 + sha1_file: convert read_sha1_file to struct object_id
 + sha1_file: convert read_object_with_reference to object_id
 + tree-walk: convert tree entry functions to object_id
 + streaming: convert istream internals to struct object_id
 + tree-walk: convert get_tree_entry_follow_symlinks internals to object_id
 + builtin/notes: convert static functions to object_id
 + builtin/fmt-merge-msg: convert remaining code to object_id
 + sha1_file: convert sha1_object_info* to object_id
 + Convert remaining callers of sha1_object_info_extended to object_id
 + packfile: convert unpack_entry to struct object_id
 + sha1_file: convert retry_bad_packed_offset to struct object_id
 + sha1_file: convert assert_sha1_type to object_id
 + builtin/mktree: convert to struct object_id
 + streaming: convert open_istream to use struct object_id
 + sha1_file: convert check_sha1_signature to struct object_id
 + sha1_file: convert read_loose_object to use struct object_id
 + builtin/index-pack: convert struct ref_delta_entry to object_id
 + archive: convert sha1_file_to_archive to struct object_id
 + archive: convert write_archive_entry_fn_t to object_id
 + builtin/mktag: convert to struct object_id
 + replace_object: convert struct replace_object to object_id
 + send-pack: convert remaining functions to struct object_id
 + http-walker: convert struct object_request to use struct object_id
 + Convert find_unique_abbrev* to struct object_id
 + wt-status: convert struct wt_status_state to object_id
 + strbuf: convert strbuf_add_unique_abbrev to use struct object_id
 + ref-filter: convert grab_objectname to struct object_id
 + tree: convert read_tree_recursive to struct object_id
 + resolve-undo: convert struct resolve_undo_info to object_id
 + cache-tree: convert remnants to struct object_id
 + cache-tree: convert write_*_as_tree to object_id
 + builtin/write-tree: convert to struct object_id
 + bulk-checkin: convert index_bulk_checkin to struct object_id
 (this branch is used by ds/bsearch-hash.)

 Conversion from uchar[20] to struct object_id continues.


* cc/perf-aggregate-sort (2018-03-27) 2 commits
  (merged to 'next' on 2018-03-29 at 0251068bac)
 + perf/aggregate: add --sort-by=regression option
 + perf/aggregate: add display_dir()

 Perf-test update.


* ds/bsearch-hash (2018-03-25) 4 commits
  (merged to 'next' on 2018-03-29 at 561d5577a7)
 + sha1_name: use bsearch_pack() in unique_in_pack()
 + sha1_name: use bsearch_pack() for abbreviations
 + packfile: define and use bsearch_pack()
 + sha1_name: convert struct min_abbrev_data to object_id

 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.


* eb/cred-helper-ignore-sigpipe (2018-03-29) 1 commit
  (merged to 'next' on 2018-03-30 at c48e98c1b1)
 + credential: ignore SIGPIPE when writing to credential helpers

 When credential helper exits very quickly without reading its
 input, it used to cause Git to die with SIGPIPE, which has been
 fixed.


* en/rename-directory-detection (2018-02-27) 29 commits
  (merged to 'next' on 2018-03-06 at d42470f86e)
 + merge-recursive: ensure we write updates for directory-renamed file
 + 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

 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.


* jc/test-must-be-empty (2018-03-27) 1 commit
  (merged to 'next' on 2018-03-29 at 2e64650f23)
 + test_must_be_empty: simplify file existence check

 Test helper update.


* jk/diff-highlight-graph-fix (2018-03-21) 7 commits
  (merged to 'next' on 2018-03-29 at eb995f66e3)
 + diff-highlight: detect --graph by indent
 + diff-highlight: use flush() helper consistently
 + diff-highlight: test graphs with --color
 + diff-highlight: test interleaved parallel lines of history
 + diff-highlight: prefer "echo" to "cat" in tests
 + diff-highlight: use test_tick in graph test
 + diff-highlight: correct test graph diagram

 "diff-highlight" filter (in contrib/) learned to undertand "git log
 --graph" output better.


* lv/tls-1.3 (2018-03-29) 1 commit
  (merged to 'next' on 2018-03-30 at 4f13731408)
 + http: allow use of TLS 1.3

 When built with more recent cURL, GIT_SSL_VERSION can now specify
 "tlsv1.3" as its value.


* ma/shortlog-revparse (2018-03-15) 3 commits
  (merged to 'next' on 2018-03-15 at 2c2de7eb95)
 + shortlog: disallow left-over arguments outside repo
 + shortlog: add usage-string for stdin-reading
 + git-shortlog.txt: reorder usages

 "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.


* ml/filter-branch-no-op-error (2018-03-15) 1 commit
  (merged to 'next' on 2018-03-15 at ba8ac48dec)
 + filter-branch: return 2 when nothing to rewrite

 "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.


* nd/combined-test-helper (2018-03-27) 36 commits
  (merged to 'next' on 2018-03-30 at ea73d57c30)
 + t/helper: merge test-write-cache into test-tool
 + t/helper: merge test-wildmatch into test-tool
 + t/helper: merge test-urlmatch-normalization into test-tool
 + t/helper: merge test-subprocess into test-tool
 + t/helper: merge test-submodule-config into test-tool
 + t/helper: merge test-string-list into test-tool
 + t/helper: merge test-strcmp-offset into test-tool
 + t/helper: merge test-sigchain into test-tool
 + t/helper: merge test-sha1-array into test-tool
 + t/helper: merge test-scrap-cache-tree into test-tool
 + t/helper: merge test-run-command into test-tool
 + t/helper: merge test-revision-walking into test-tool
 + t/helper: merge test-regex into test-tool
 + t/helper: merge test-ref-store into test-tool
 + t/helper: merge test-read-cache into test-tool
 + t/helper: merge test-prio-queue into test-tool
 + t/helper: merge test-path-utils into test-tool
 + t/helper: merge test-online-cpus into test-tool
 + t/helper: merge test-mktemp into test-tool
 + t/helper: merge (unused) test-mergesort into test-tool
 + t/helper: merge (unused) test-match-trees into test-tool
 + t/helper: merge test-index-version into test-tool
 + t/helper: merge test-hashmap into test-tool
 + t/helper: merge test-genrandom into test-tool
 + t/helper: merge test-example-decorate into test-tool
 + t/helper: merge test-dump-split-index into test-tool
 + t/helper: merge test-dump-cache-tree into test-tool
 + t/helper: merge test-drop-caches into test-tool
 + t/helper: merge (unused) test-delta into test-tool
 + t/helper: merge test-date into test-tool
 + t/helper: merge test-ctype into test-tool
 + t/helper: merge test-config into test-tool
 + t/helper: merge test-lazy-init-name-hash into test-tool
 + t/helper: merge test-sha1 into test-tool
 + t/helper: merge test-chmtime into test-tool
 + t/helper: add an empty test-tool program

 Small test-helper programs have been consolidated into a single
 binary.


* nd/parseopt-completion-more (2018-03-25) 8 commits
  (merged to 'next' on 2018-03-29 at 9007b165e2)
 + completion: use __gitcomp_builtin in _git_cherry
 + completion: use __gitcomp_builtin in _git_ls_tree
 + completion: delete option-only completion commands
 + completion: add --option completion for most builtin commands
 + completion: factor out _git_xxx calling code
 + completion: mention the oldest version we need to support
 + git.c: add hidden option --list-parseopt-builtins
 + git.c: move cmd_struct declaration up

 The mechanism to use parse-options API to automate the command line
 completion continues to get extended and polished.


* nd/remove-ignore-env-field (2018-03-23) 6 commits
  (merged to 'next' on 2018-03-23 at ba9d0f2565)
 + repository.h: add comment and clarify repo_set_gitdir
  (merged to 'next' on 2018-03-15 at 802b6ea1cb)
 + repository: delete ignore_env member
 + sha1_file.c: move delayed getenv(altdb) back to setup_git_env()
 + repository.c: delete dead functions
 + repository.c: move env-related setup code back to environment.c
 + repository: initialize the_repository in main()
 (this branch is used by sb/object-store, sb/packfiles-in-repository and sb/submodule-move-nested.)

 Code clean-up for the "repository" abstraction.


* nd/trace-with-env (2018-03-25) 1 commit
  (merged to 'next' on 2018-03-29 at 6890e2c39b)
 + run-command: use strbuf_addstr() for adding a string to a strbuf

 Code cleanup.


* nd/worktree-prune (2018-03-15) 3 commits
  (merged to 'next' on 2018-03-20 at e2d9677b20)
 + worktree prune: improve prune logic when worktree is moved
 + worktree: delete dead code
 + gc.txt: more details about what gc does

 The way "git worktree prune" worked internally has been simplified,
 by assuming how "git worktree move" moves an existing worktree to a
 different place.


* pk/test-avoid-pipe-hiding-exit-status (2018-03-28) 1 commit
  (merged to 'next' on 2018-03-30 at 4f3df09139)
 + test: avoid pipes in git related commands for test

 Test cleanup.


* ps/contains-id-error-message (2018-03-22) 1 commit
  (merged to 'next' on 2018-03-22 at 3bb1dcd506)
 + parse-options: do not show usage upon invalid option value

 "git tag --contains no-such-commit" gave a full list of options
 after giving an error message.


* rs/status-with-removed-submodule (2018-03-28) 1 commit
  (merged to 'next' on 2018-03-30 at 8a7b618bc1)
 + submodule: check for NULL return of get_submodule_ref_store()

 "git submodule status" misbehaved on a submodule that has been
 removed from the working tree.


* sb/object-store (2018-03-26) 27 commits
  (merged to 'next' on 2018-03-30 at 93e3475178)
 + sha1_file: allow sha1_loose_object_info to handle arbitrary repositories
 + sha1_file: allow map_sha1_file to handle arbitrary repositories
 + sha1_file: allow map_sha1_file_1 to handle arbitrary repositories
 + sha1_file: allow open_sha1_file to handle arbitrary repositories
 + sha1_file: allow stat_sha1_file to handle arbitrary repositories
 + sha1_file: allow sha1_file_name to handle arbitrary repositories
 + sha1_file: add repository argument to sha1_loose_object_info
 + sha1_file: add repository argument to map_sha1_file
 + sha1_file: add repository argument to map_sha1_file_1
 + sha1_file: add repository argument to open_sha1_file
 + sha1_file: add repository argument to stat_sha1_file
 + sha1_file: add repository argument to sha1_file_name
 + sha1_file: allow prepare_alt_odb to handle arbitrary repositories
 + sha1_file: allow link_alt_odb_entries to handle arbitrary repositories
 + sha1_file: add repository argument to prepare_alt_odb
 + sha1_file: add repository argument to link_alt_odb_entries
 + sha1_file: add repository argument to read_info_alternates
 + sha1_file: add repository argument to link_alt_odb_entry
 + sha1_file: add raw_object_store argument to alt_odb_usable
 + pack: move approximate object count to object store
 + pack: move prepare_packed_git_run_once to object store
 + object-store: close all packs upon clearing the object store
 + object-store: move packed_git and packed_git_mru to object store
 + object-store: free alt_odb_list
 + object-store: move alt_odb_list and alt_odb_tail to object store
 + object-store: migrate alternates struct and functions from cache.h
 + repository: introduce raw object store field
 (this branch is used by sb/packfiles-in-repository and sb/submodule-move-nested.)

 Refactoring the internal global data structure to make it possible
 to open multiple repositories, work with and then close them.

 Rerolled by Duy on top of a separate preliminary clean-up topic.
 The resulting structure of the topics looked very sensible.


* sb/packfiles-in-repository (2018-03-26) 12 commits
  (merged to 'next' on 2018-03-30 at caa68db14d)
 + packfile: keep prepare_packed_git() private
 + packfile: allow find_pack_entry to handle arbitrary repositories
 + packfile: add repository argument to find_pack_entry
 + packfile: allow reprepare_packed_git to handle arbitrary repositories
 + packfile: allow prepare_packed_git to handle arbitrary repositories
 + packfile: allow prepare_packed_git_one to handle arbitrary repositories
 + packfile: add repository argument to reprepare_packed_git
 + packfile: add repository argument to prepare_packed_git
 + packfile: add repository argument to prepare_packed_git_one
 + packfile: allow install_packed_git to handle arbitrary repositories
 + packfile: allow rearrange_packed_git to handle arbitrary repositories
 + packfile: allow prepare_packed_git_mru to handle arbitrary repositories
 (this branch uses sb/object-store; is tangled with sb/submodule-move-nested.)

 Refactoring of the internal global data structure continues.


* tg/stash-untracked-with-pathspec-fix (2018-03-21) 4 commits
  (merged to 'next' on 2018-03-22 at 73c4bef74f)
 + stash: drop superfluos pathspec parameter
  (merged to 'next' on 2018-03-21 at 8f5b5ab131)
 + stash push -u: don't create empty stash
 + stash push: avoid printing errors
 + stash: fix nonsense pipeline

 "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.


* ti/fetch-everything-local-optim (2018-03-14) 1 commit
  (merged to 'next' on 2018-03-15 at 2be87aa7a7)
 + fetch-pack.c: use oidset to check existence of loose object

 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.


* ws/rebase-p (2018-03-23) 8 commits
  (merged to 'next' on 2018-03-29 at d20ae8510e)
 + rebase: remove merges_option and a blank line
 + rebase: remove unused code paths from git_rebase__interactive__preserve_merges
 + rebase: remove unused code paths from git_rebase__interactive
 + rebase: add and use git_rebase__interactive__preserve_merges
 + rebase: extract functions out of git_rebase__interactive
 + rebase: reindent function git_rebase__interactive
 + rebase: update invocation of rebase dot-sourced scripts
 + rebase-interactive: simplify pick_on_preserving_merges

 Code clean-up.


* yk/filter-branch-non-committish-refs (2018-03-25) 1 commit
  (merged to 'next' on 2018-03-29 at 8ac3806bcf)
 + filter-branch: fix errors caused by refs that point at non-committish

 when refs that do not point at committish are given, "git
 filter-branch" gave a misleading error messages.  This has been
 corrected.


* ys/bisect-object-id-missing-conversion-fix (2018-03-25) 1 commit
  (merged to 'next' on 2018-03-29 at 7d988b57d4)
 + bisect: use oid_to_hex() for converting object_id hashes to hex strings

 Code clean-up.

--------------------------------------------------
[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]

* sb/blame-color (2018-04-17) 2 commits
 - 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.

 The code to handle interaction between the config and command line
 option smelled fishy.  Reviews and discussions are welcomed (not
 just to this topic but others too ;-).


* ab/simplify-perl-makefile (2018-04-11) 1 commit
  (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'.


* 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.

 Will merge to 'master'.


* 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.

 Will merge to 'master'.


* ds/lazy-load-trees (2018-04-11) 5 commits
 - 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 'next'.


* 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.

 Will merge to 'master'.


* 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.

 Will merge to 'master'.


* 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.

 Will merge to 'master'.


* 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.

 Will merge to 'master'.


* 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.

 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.


* 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.

 Will merge to 'master'.


* 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.

 Will merge to 'master'.


* hn/sort-ls-remote (2018-04-09) 1 commit
 - ls-remote: create '--sort' option
 (this branch uses jk/ref-array-push.)

 "git ls-remote" learned an option to allow sorting its output based
 on the refnames being shown.


* 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.

 Will merge to 'master'.


* js/empty-config-section-fix (2018-04-09) 15 commits
 - 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 'next'.


* js/t5404-path-fix (2018-04-09) 1 commit
  (merged to 'next' on 2018-04-17 at 94092f2896)
 + t5404: relax overzealous test

 Test fix.

 Will merge to 'master'.


* 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.

 Will merge to 'master'.


* 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.

 Will merge to 'master'.


* 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.

 Will merge to 'master'.


* nd/warn-more-for-devs (2018-04-16) 4 commits
 - 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 'next'.


* sb/submodule-move-nested (2018-03-29) 6 commits
 - 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.

 What's the doneness of this thing?


* tb/config-type (2018-04-10) 2 commits
 - 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-10) 3 commits
 - 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.


* 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.

 Will merge to 'master'.


* 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.

 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
 - 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 'next'.


* 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'.


* 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.

 Will merge to 'master'.


* 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.

 Will merge to 'master'.


* 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").

 Will merge to 'master'.


* dj/runtime-prefix (2018-04-11) 5 commits
  (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

 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
 - 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 'next'.


* 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.

 Will merge to 'master'.


* 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.

 Will merge to 'master'.


* 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.

 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
 - 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 'next'.


* 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-16) 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-11) 15 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: 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.

 This looked more or less ready for 'next'.  Please stop me if there
 are remaining issues I forgot about.


* 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

 The beginning of the next-gen transfer protocol.

 Will cook in 'next'.


* ls/checkout-encoding (2018-04-16) 10 commits
 - 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 'next'.
 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.

^ permalink raw reply	[relevance 3%]

* Re: What's cooking in git.git (Apr 2018, #01; Mon, 9)
  2018-04-09 15:31  0% ` Duy Nguyen
@ 2018-04-09 17:23  0%   ` Stefan Beller
  0 siblings, 0 replies; 19+ results
From: Stefan Beller @ 2018-04-09 17:23 UTC (permalink / raw)
  To: Duy Nguyen; +Cc: Junio C Hamano, Git Mailing List

On Mon, Apr 9, 2018 at 8:31 AM, Duy Nguyen <pclouds@gmail.com> wrote:
> On Mon, Apr 9, 2018 at 12:21 PM, Junio C Hamano <gitster@pobox.com> wrote:
>> * sb/packfiles-in-repository (2018-03-26) 12 commits
>>   (merged to 'next' on 2018-03-30 at caa68db14d)
>>  + packfile: keep prepare_packed_git() private
>>  + packfile: allow find_pack_entry to handle arbitrary repositories
>>  + packfile: add repository argument to find_pack_entry
>>  + packfile: allow reprepare_packed_git to handle arbitrary repositories
>>  + packfile: allow prepare_packed_git to handle arbitrary repositories
>>  + packfile: allow prepare_packed_git_one to handle arbitrary repositories
>>  + packfile: add repository argument to reprepare_packed_git
>>  + packfile: add repository argument to prepare_packed_git
>>  + packfile: add repository argument to prepare_packed_git_one
>>  + packfile: allow install_packed_git to handle arbitrary repositories
>>  + packfile: allow rearrange_packed_git to handle arbitrary repositories
>>  + packfile: allow prepare_packed_git_mru to handle arbitrary repositories
>>  (this branch uses nd/remove-ignore-env-field and sb/object-store; is tangled with sb/submodule-move-nested.)
>>
>>  Refactoring of the internal global data structure continues.
>>
>>  Is this ready for 'master' by now?
>
> I think so. Things start to look much nicer.

I think so, too.

I am working on top of that series now for the third part,
assuming this is good to go.
https://public-inbox.org/git/20180406232136.253950-1-sbeller@google.com/

Thanks,
Stefan

^ permalink raw reply	[relevance 0%]

* Re: What's cooking in git.git (Apr 2018, #01; Mon, 9)
  2018-04-09 10:21  4% What's cooking in git.git (Apr 2018, #01; Mon, 9) Junio C Hamano
@ 2018-04-09 15:31  0% ` Duy Nguyen
  2018-04-09 17:23  0%   ` Stefan Beller
  0 siblings, 1 reply; 19+ results
From: Duy Nguyen @ 2018-04-09 15:31 UTC (permalink / raw)
  To: Junio C Hamano; +Cc: Git Mailing List, Stefan Beller

On Mon, Apr 9, 2018 at 12:21 PM, Junio C Hamano <gitster@pobox.com> wrote:
> * sb/packfiles-in-repository (2018-03-26) 12 commits
>   (merged to 'next' on 2018-03-30 at caa68db14d)
>  + packfile: keep prepare_packed_git() private
>  + packfile: allow find_pack_entry to handle arbitrary repositories
>  + packfile: add repository argument to find_pack_entry
>  + packfile: allow reprepare_packed_git to handle arbitrary repositories
>  + packfile: allow prepare_packed_git to handle arbitrary repositories
>  + packfile: allow prepare_packed_git_one to handle arbitrary repositories
>  + packfile: add repository argument to reprepare_packed_git
>  + packfile: add repository argument to prepare_packed_git
>  + packfile: add repository argument to prepare_packed_git_one
>  + packfile: allow install_packed_git to handle arbitrary repositories
>  + packfile: allow rearrange_packed_git to handle arbitrary repositories
>  + packfile: allow prepare_packed_git_mru to handle arbitrary repositories
>  (this branch uses nd/remove-ignore-env-field and sb/object-store; is tangled with sb/submodule-move-nested.)
>
>  Refactoring of the internal global data structure continues.
>
>  Is this ready for 'master' by now?

I think so. Things start to look much nicer.
-- 
Duy

^ permalink raw reply	[relevance 0%]

* What's cooking in git.git (Apr 2018, #01; Mon, 9)
@ 2018-04-09 10:21  4% Junio C Hamano
  2018-04-09 15:31  0% ` Duy Nguyen
  0 siblings, 1 reply; 19+ results
From: Junio C Hamano @ 2018-04-09 10:21 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.

I try to summarize what each topic is about immediately after the
list of commits on the topic, which may be followed by a short term
plan for the topic ("Will merge to 'next'", etc.), possibly followed
by a reminder (e.g. "cf. <message-id>") to help me recall the reason
behind the plan.  Please do not read more than that into "cf." (e.g.
the ones listed are not more important than other messages in the
same thread).

The tip of 'next' has not been rewind post 2.17 release.  I plan to
flush as many solid topics that have been cooking there down to
'master' first without merging anything new to 'next', and then
do so sometime in this week.  Let's see how it goes.

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"]

* pw/add-p-single (2018-03-31) 1 commit
  (merged to 'next' on 2018-03-31 at 43a177f941)
 + add -p: fix 2.17.0-rc* regression due to moved code

 Hotfix.

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

* ab/simplify-perl-makefile (2018-04-09) 2 commits
 - SQUASH???
 - 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/


* ak/bisect-doc-typofix (2018-04-07) 1 commit
 - Documentation/git-bisect.txt: git bisect term → git bisect terms

 Docfix.

 Will merge to 'next'.


* bw/commit-partial-from-subdirectory-fix (2018-04-05) 1 commit
 - 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.

 Will merge to 'next'.


* ds/lazy-load-trees (2018-04-07) 5 commits
 - 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.)


* jk/t5561-missing-curl (2018-04-05) 2 commits
 - t5561: skip tests if curl is not available
 - t5561: drop curl stderr redirects

 Test fixes.

 Will merge to 'next'.


* ks/branch-list-detached-rebase-i (2018-04-05) 2 commits
 - 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.

 Will merge to 'next'.


* lw/daemon-log-destination (2018-04-09) 1 commit
 - 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.

 Will merge to 'next'.


* mn/send-email-credential-doc (2018-04-08) 1 commit
 - send-email: simplify Gmail example in the documentation

 Doc update.

 Will merge to 'next'.


* nd/worktree-move (2018-04-05) 1 commit
 - t2028: tighten grep expression to make "move worktree" test more robust
 (this branch is used by es/worktree-docs.)

 Test update.

 Will merge to 'next'.


* 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.


* br/mergetools-guiffy (2018-04-06) 1 commit
 - mergetools: add support for guiffy

 "git mergetools" learned talking to guiffy.

 Will merge to 'next'.


* en/doc-typoes (2018-04-09) 2 commits
 - Documentation: normalize spelling of 'normalised'
 - Documentation: fix several one-character-off spelling errors

 Docfix.

 Will merge to 'next'.


* hn/sort-ls-remote (2018-04-09) 1 commit
 - ls-remote: create '--sort' option
 (this branch uses jk/ref-array-push.)

 "git ls-remote" learned an option to allow sorting its output based
 on the refnames being shown.


* jk/ref-array-push (2018-04-09) 3 commits
 - 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.

 Will merge to 'next'.


* js/empty-config-section-fix (2018-04-06) 14 commits
 - 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: 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.

 Reroll exists, which needs to be picked up.


* js/t5404-path-fix (2018-04-09) 1 commit
 - t5404: relax overzealous test

 Test fix.

 Will merge to 'next'.


* ps/test-chmtime-get (2018-04-09) 1 commit
 - t/helper: 'test-chmtime (--get|-g)' to print only the mtime

 Test cleanup.

 Will merge to 'next'.


* es/fread-reads-dir-autoconf-fix (2018-04-09) 1 commit
 - configure.ac: fix botched FREAD_READS_DIRECTORIES check

 Small fix to the autoconf build procedure.

 Will merge to 'next'.


* es/worktree-docs (2018-04-09) 2 commits
 - 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.

 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>


* sb/blame-color (2018-02-13) 3 commits
 - builtin/blame: highlight recently changed lines
 - builtin/blame: add option to color metadata fields separately
 - builtin/blame: dim uninteresting metadata

 Expecting a reroll.
 cf. https://public-inbox.org/git/20171110011002.10179-1-sbeller@google.com/#t
 error messages are funny, can segfault, ...


* 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]

* rs/status-with-removed-submodule (2018-03-28) 1 commit
  (merged to 'next' on 2018-03-30 at 8a7b618bc1)
 + submodule: check for NULL return of get_submodule_ref_store()

 "git submodule status" misbehaved on a submodule that has been
 removed from the working tree.

 Will merge to 'master'.


* lv/tls-1.3 (2018-03-29) 1 commit
  (merged to 'next' on 2018-03-30 at 4f13731408)
 + http: allow use of TLS 1.3

 When built with more recent cURL, GIT_SSL_VERSION can now specify
 "tlsv1.3" as its value.

 Will merge to 'master'.


* nd/warn-more-for-devs (2018-03-29) 3 commits
 - Makefile: add EAGER_DEVELOPER mode
 - 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 EAGER_DEVELOPER=YesPlease"
 available now, for those who want to help fixing warnings we
 usually ignore.

 Will merge to 'next'.


* sb/submodule-move-nested (2018-03-29) 6 commits
 - 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
 (this branch uses nd/remove-ignore-env-field and sb/object-store; is tangled with sb/packfiles-in-repository.)

 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.


* tb/config-type (2018-03-29) 1 commit
 - builtin/config.c: prefer `--type=bool` over `--bool`, etc.
 (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 'next'.


* tb/config-default (2018-03-29) 3 commits
 - 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.


* eb/cred-helper-ignore-sigpipe (2018-03-29) 1 commit
  (merged to 'next' on 2018-03-30 at c48e98c1b1)
 + credential: ignore SIGPIPE when writing to credential helpers

 When credential helper exits very quickly without reading its
 input, it used to cause Git to die with SIGPIPE, which has been
 fixed.

 Will merge to 'master'.


* jk/flockfile-stdio (2018-03-30) 1 commit
 - config: move flockfile() closer to unlocked functions

 Code clean-up.

 Will merge to 'next'.


* jk/relative-directory-fix (2018-03-30) 5 commits
 - 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.

 Will merge to 'next'.


* ds/bsearch-hash (2018-03-25) 4 commits
  (merged to 'next' on 2018-03-29 at 561d5577a7)
 + sha1_name: use bsearch_pack() in unique_in_pack()
 + sha1_name: use bsearch_pack() for abbreviations
 + packfile: define and use bsearch_pack()
 + sha1_name: convert struct min_abbrev_data to object_id
 (this branch uses bc/object-id.)

 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.

 Will merge to 'master'.


* jh/json-writer (2018-03-28) 1 commit
 - json_writer: new routines to create data in JSON format

 Will merge to 'next'.


* jk/diff-highlight-graph-fix (2018-03-21) 7 commits
  (merged to 'next' on 2018-03-29 at eb995f66e3)
 + diff-highlight: detect --graph by indent
 + diff-highlight: use flush() helper consistently
 + diff-highlight: test graphs with --color
 + diff-highlight: test interleaved parallel lines of history
 + diff-highlight: prefer "echo" to "cat" in tests
 + diff-highlight: use test_tick in graph test
 + diff-highlight: correct test graph diagram

 "diff-highlight" filter (in contrib/) learned to undertand "git log
 --graph" output better.

 Will merge to 'master'.


* ot/libify-get-ref-atom-value (2018-03-29) 6 commits
 - 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 'next'.


* ab/doc-hash-brokenness (2018-03-27) 2 commits
  (merged to 'next' on 2018-03-29 at e9b2f5cf4a)
 + doc hash-function-transition: clarify what SHAttered means
 + doc hash-function-transition: clarify how older gits die on NewHash

 Doc updates.

 Will merge to 'master'.


* ab/drop-contrib-examples (2018-03-26) 1 commit
  (merged to 'next' on 2018-03-29 at 9d8a7603b5)
 + Remove contrib/examples/*

 Will merge to 'master'.


* bc/hash-independent-tests (2018-03-26) 10 commits
  (merged to 'next' on 2018-03-29 at 11179d9b71)
 + t2107: abstract away SHA-1-specific constants
 + t2101: abstract away SHA-1-specific constants
 + t2101: modernize test style
 + t2020: abstract away SHA-1 specific constants
 + t1507: abstract away SHA-1-specific constants
 + t1411: abstract away SHA-1-specific constants
 + t1405: sort reflog entries in a hash-independent way
 + t1300: abstract away SHA-1-specific constants
 + t1304: abstract away SHA-1-specific constants
 + t1011: abstract away SHA-1-specific constants

 Tests that rely on the exact hardcoded values of object names have
 been updated in preparation for hash function migration.

 Will merge to 'master'.


* cc/perf-aggregate-sort (2018-03-27) 2 commits
  (merged to 'next' on 2018-03-29 at 0251068bac)
 + perf/aggregate: add --sort-by=regression option
 + perf/aggregate: add display_dir()

 Perf-test update.

 Will merge to 'master'.


* jc/test-must-be-empty (2018-03-27) 1 commit
  (merged to 'next' on 2018-03-29 at 2e64650f23)
 + test_must_be_empty: simplify file existence check

 Test helper update.

 Will merge to 'master'.


* jk/branch-l-0-deprecation (2018-03-26) 3 commits
  (merged to 'next' on 2018-03-29 at 552cef7913)
 + 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'.


* jm/mem-pool (2018-03-30) 4 commits
 - SQUASH??? fast-import: fix a sparse 'NULL pointer' warning
  (merged to 'next' on 2018-03-29 at bfce05db6e)
 + 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.

 Will kick back to 'pu' to be reworked.


* js/runtime-prefix-windows (2018-03-27) 2 commits
 - mingw/msvc: use the new-style RUNTIME_PREFIX helper
 - exec_cmd: provide a new-style RUNTIME_PREFIX helper for Windows
 (this branch uses dj/runtime-prefix.)

 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.

 Will merge to 'next'.
 cf. <65a25131-9278-62c8-4d13-b8531209825d@kdbg.org>
 cf. <nycvar.QRO.7.76.6.1804031511510.5026@qfpub.tvgsbejvaqbjf.bet>


* nd/combined-test-helper (2018-03-27) 36 commits
  (merged to 'next' on 2018-03-30 at ea73d57c30)
 + t/helper: merge test-write-cache into test-tool
 + t/helper: merge test-wildmatch into test-tool
 + t/helper: merge test-urlmatch-normalization into test-tool
 + t/helper: merge test-subprocess into test-tool
 + t/helper: merge test-submodule-config into test-tool
 + t/helper: merge test-string-list into test-tool
 + t/helper: merge test-strcmp-offset into test-tool
 + t/helper: merge test-sigchain into test-tool
 + t/helper: merge test-sha1-array into test-tool
 + t/helper: merge test-scrap-cache-tree into test-tool
 + t/helper: merge test-run-command into test-tool
 + t/helper: merge test-revision-walking into test-tool
 + t/helper: merge test-regex into test-tool
 + t/helper: merge test-ref-store into test-tool
 + t/helper: merge test-read-cache into test-tool
 + t/helper: merge test-prio-queue into test-tool
 + t/helper: merge test-path-utils into test-tool
 + t/helper: merge test-online-cpus into test-tool
 + t/helper: merge test-mktemp into test-tool
 + t/helper: merge (unused) test-mergesort into test-tool
 + t/helper: merge (unused) test-match-trees into test-tool
 + t/helper: merge test-index-version into test-tool
 + t/helper: merge test-hashmap into test-tool
 + t/helper: merge test-genrandom into test-tool
 + t/helper: merge test-example-decorate into test-tool
 + t/helper: merge test-dump-split-index into test-tool
 + t/helper: merge test-dump-cache-tree into test-tool
 + t/helper: merge test-drop-caches into test-tool
 + t/helper: merge (unused) test-delta into test-tool
 + t/helper: merge test-date into test-tool
 + t/helper: merge test-ctype into test-tool
 + t/helper: merge test-config into test-tool
 + t/helper: merge test-lazy-init-name-hash into test-tool
 + t/helper: merge test-sha1 into test-tool
 + t/helper: merge test-chmtime into test-tool
 + t/helper: add an empty test-tool program

 Small test-helper programs have been consolidated into a single
 binary.

 Will merge to 'master'.


* nd/parseopt-completion-more (2018-03-25) 8 commits
  (merged to 'next' on 2018-03-29 at 9007b165e2)
 + completion: use __gitcomp_builtin in _git_cherry
 + completion: use __gitcomp_builtin in _git_ls_tree
 + completion: delete option-only completion commands
 + completion: add --option completion for most builtin commands
 + completion: factor out _git_xxx calling code
 + completion: mention the oldest version we need to support
 + git.c: add hidden option --list-parseopt-builtins
 + git.c: move cmd_struct declaration up

 The mechanism to use parse-options API to automate the command line
 completion continues to get extended and polished.

 Will merge to 'master'.


* nd/trace-with-env (2018-03-25) 1 commit
  (merged to 'next' on 2018-03-29 at 6890e2c39b)
 + run-command: use strbuf_addstr() for adding a string to a strbuf

 Code cleanup.

 Will merge to 'master'.


* pk/test-avoid-pipe-hiding-exit-status (2018-03-28) 1 commit
  (merged to 'next' on 2018-03-30 at 4f3df09139)
 + test: avoid pipes in git related commands for test

 Test cleanup.

 Will merge to 'master'.


* ws/rebase-p (2018-03-23) 8 commits
  (merged to 'next' on 2018-03-29 at d20ae8510e)
 + rebase: remove merges_option and a blank line
 + rebase: remove unused code paths from git_rebase__interactive__preserve_merges
 + rebase: remove unused code paths from git_rebase__interactive
 + rebase: add and use git_rebase__interactive__preserve_merges
 + rebase: extract functions out of git_rebase__interactive
 + rebase: reindent function git_rebase__interactive
 + rebase: update invocation of rebase dot-sourced scripts
 + rebase-interactive: simplify pick_on_preserving_merges

 Code clean-up.

 Will merge to 'master'.


* yk/filter-branch-non-committish-refs (2018-03-25) 1 commit
  (merged to 'next' on 2018-03-29 at 8ac3806bcf)
 + filter-branch: fix errors caused by refs that point at non-committish

 when refs that do not point at committish are given, "git
 filter-branch" gave a misleading error messages.  This has been
 corrected.

 Will merge to 'master'.


* ys/bisect-object-id-missing-conversion-fix (2018-03-25) 1 commit
  (merged to 'next' on 2018-03-29 at 7d988b57d4)
 + bisect: use oid_to_hex() for converting object_id hashes to hex strings

 Code clean-up.

 Will merge to 'master'.


* ml/filter-branch-no-op-error (2018-03-15) 1 commit
  (merged to 'next' on 2018-03-15 at ba8ac48dec)
 + filter-branch: return 2 when nothing to rewrite

 "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.

 Will merge to 'master'.


* ab/install-symlinks (2018-03-15) 3 commits
  (merged to 'next' on 2018-03-15 at 99d6bd6cb3)
 + Makefile: optionally symlink libexec/git-core binaries to bin/git
 + Makefile: add a gitexecdir_relative variable
 + Makefile: fix broken bindir_relative variable

 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.

 Will merge to 'master'.


* tg/stash-untracked-with-pathspec-fix (2018-03-21) 4 commits
  (merged to 'next' on 2018-03-22 at 73c4bef74f)
 + stash: drop superfluos pathspec parameter
  (merged to 'next' on 2018-03-21 at 8f5b5ab131)
 + stash push -u: don't create empty stash
 + stash push: avoid printing errors
 + stash: fix nonsense pipeline

 "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.

 Will merge to 'master'.


* pw/rebase-keep-empty-fixes (2018-03-29) 3 commits
 - 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.

 Will merge to 'next'.


* pw/rebase-signoff (2018-03-29) 4 commits
 - 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").

 Will merge to 'next'.


* dj/runtime-prefix (2018-03-25) 3 commits
 - exec_cmd: RUNTIME_PREFIX on some POSIX systems
 - Makefile: add Perl runtime prefix support
 - Makefile: generate Perl header from template file
 (this branch is used by js/runtime-prefix-windows.)

 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 'next'.


* ti/fetch-everything-local-optim (2018-03-14) 1 commit
  (merged to 'next' on 2018-03-15 at 2be87aa7a7)
 + fetch-pack.c: use oidset to check existence of loose object

 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.

 Will merge to 'master'.


* ab/nuke-emacs-contrib (2018-03-13) 1 commit
  (merged to 'next' on 2018-03-15 at 13eb4e2d8b)
 + git{,-blame}.el: remove old bitrotting Emacs code

 The scripts in contrib/emacs/ have outlived their usefulness and
 have been removed.

 Will kick back to 'pu'.

 There were some noises about better migration strategy that lets
 git.el to nudge users to magit or something when used.  Is it
 something we want to pursue further?


* bc/object-id (2018-03-14) 36 commits
  (merged to 'next' on 2018-03-20 at f1800a33ff)
 + convert: convert to struct object_id
 + sha1_file: introduce a constant for max header length
 + Convert lookup_replace_object to struct object_id
 + sha1_file: convert read_sha1_file to struct object_id
 + sha1_file: convert read_object_with_reference to object_id
 + tree-walk: convert tree entry functions to object_id
 + streaming: convert istream internals to struct object_id
 + tree-walk: convert get_tree_entry_follow_symlinks internals to object_id
 + builtin/notes: convert static functions to object_id
 + builtin/fmt-merge-msg: convert remaining code to object_id
 + sha1_file: convert sha1_object_info* to object_id
 + Convert remaining callers of sha1_object_info_extended to object_id
 + packfile: convert unpack_entry to struct object_id
 + sha1_file: convert retry_bad_packed_offset to struct object_id
 + sha1_file: convert assert_sha1_type to object_id
 + builtin/mktree: convert to struct object_id
 + streaming: convert open_istream to use struct object_id
 + sha1_file: convert check_sha1_signature to struct object_id
 + sha1_file: convert read_loose_object to use struct object_id
 + builtin/index-pack: convert struct ref_delta_entry to object_id
 + archive: convert sha1_file_to_archive to struct object_id
 + archive: convert write_archive_entry_fn_t to object_id
 + builtin/mktag: convert to struct object_id
 + replace_object: convert struct replace_object to object_id
 + send-pack: convert remaining functions to struct object_id
 + http-walker: convert struct object_request to use struct object_id
 + Convert find_unique_abbrev* to struct object_id
 + wt-status: convert struct wt_status_state to object_id
 + strbuf: convert strbuf_add_unique_abbrev to use struct object_id
 + ref-filter: convert grab_objectname to struct object_id
 + tree: convert read_tree_recursive to struct object_id
 + resolve-undo: convert struct resolve_undo_info to object_id
 + cache-tree: convert remnants to struct object_id
 + cache-tree: convert write_*_as_tree to object_id
 + builtin/write-tree: convert to struct object_id
 + bulk-checkin: convert index_bulk_checkin to struct object_id
 (this branch is used by ds/bsearch-hash.)

 Conversion from uchar[20] to struct object_id continues.

 Will merge to 'master'.


* ma/shortlog-revparse (2018-03-15) 3 commits
  (merged to 'next' on 2018-03-15 at 2c2de7eb95)
 + shortlog: disallow left-over arguments outside repo
 + shortlog: add usage-string for stdin-reading
 + git-shortlog.txt: reorder usages

 "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.

 Will merge to 'master'.


* ab/pcre-v2 (2018-03-14) 3 commits
  (merged to 'next' on 2018-03-15 at e77b116903)
 + Makefile: make USE_LIBPCRE=YesPlease mean v2, not v1
 + configure: detect redundant --with-libpcre & --with-libpcre1
 + configure: fix a regression in PCRE v1 detection

 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.

 Will merge to 'master'.


* bb/git-gui-ssh-key-files (2018-03-02) 2 commits
 - 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/git-gui-bind-kp-enter (2018-03-02) 2 commits
 - 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.


* cb/git-gui-ttk-style (2018-03-05) 2 commits
 - 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.


* nd/pack-objects-pack-struct (2018-04-02) 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
 - t/README: mention about running the test suite in special modes

 "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.


* nd/repack-keep-pack (2018-03-26) 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.

 Reroll exists, but it seems to be still slushy.
 cf. <20180316192745.19557-1-pclouds@gmail.com>


* nd/worktree-prune (2018-03-15) 3 commits
  (merged to 'next' on 2018-03-20 at e2d9677b20)
 + worktree prune: improve prune logic when worktree is moved
 + worktree: delete dead code
 + gc.txt: more details about what gc does

 The way "git worktree prune" worked internally has been simplified,
 by assuming how "git worktree move" moves an existing worktree to a
 different place.

 Will merge to 'master'.


* pw/add-p-select (2018-03-16) 3 commits
  (merged to 'next' on 2018-03-30 at eae69f5ded)
 + 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.

 Will kick back to 'pu'.

 There was a brief discussion about this topic not doing as good a
 job as it is advertised as---has it been resolved, or do we want to
 run with what we have for now?
 cf. <878ta8vyqe.fsf@evledraar.gmail.com>


* ps/contains-id-error-message (2018-03-22) 1 commit
  (merged to 'next' on 2018-03-22 at 3bb1dcd506)
 + parse-options: do not show usage upon invalid option value

 "git tag --contains no-such-commit" gave a full list of options
 after giving an error message.

 Will merge to 'master'.


* nd/remove-ignore-env-field (2018-03-23) 6 commits
  (merged to 'next' on 2018-03-23 at ba9d0f2565)
 + repository.h: add comment and clarify repo_set_gitdir
  (merged to 'next' on 2018-03-15 at 802b6ea1cb)
 + repository: delete ignore_env member
 + sha1_file.c: move delayed getenv(altdb) back to setup_git_env()
 + repository.c: delete dead functions
 + repository.c: move env-related setup code back to environment.c
 + repository: initialize the_repository in main()
 (this branch is used by sb/object-store, sb/packfiles-in-repository and sb/submodule-move-nested.)

 Code clean-up for the "repository" abstraction.

 Will merge to 'master'.


* sb/object-store (2018-03-26) 27 commits
  (merged to 'next' on 2018-03-30 at 93e3475178)
 + sha1_file: allow sha1_loose_object_info to handle arbitrary repositories
 + sha1_file: allow map_sha1_file to handle arbitrary repositories
 + sha1_file: allow map_sha1_file_1 to handle arbitrary repositories
 + sha1_file: allow open_sha1_file to handle arbitrary repositories
 + sha1_file: allow stat_sha1_file to handle arbitrary repositories
 + sha1_file: allow sha1_file_name to handle arbitrary repositories
 + sha1_file: add repository argument to sha1_loose_object_info
 + sha1_file: add repository argument to map_sha1_file
 + sha1_file: add repository argument to map_sha1_file_1
 + sha1_file: add repository argument to open_sha1_file
 + sha1_file: add repository argument to stat_sha1_file
 + sha1_file: add repository argument to sha1_file_name
 + sha1_file: allow prepare_alt_odb to handle arbitrary repositories
 + sha1_file: allow link_alt_odb_entries to handle arbitrary repositories
 + sha1_file: add repository argument to prepare_alt_odb
 + sha1_file: add repository argument to link_alt_odb_entries
 + sha1_file: add repository argument to read_info_alternates
 + sha1_file: add repository argument to link_alt_odb_entry
 + sha1_file: add raw_object_store argument to alt_odb_usable
 + pack: move approximate object count to object store
 + pack: move prepare_packed_git_run_once to object store
 + object-store: close all packs upon clearing the object store
 + object-store: move packed_git and packed_git_mru to object store
 + object-store: free alt_odb_list
 + object-store: move alt_odb_list and alt_odb_tail to object store
 + object-store: migrate alternates struct and functions from cache.h
 + repository: introduce raw object store field
 (this branch is used by sb/packfiles-in-repository and sb/submodule-move-nested; uses nd/remove-ignore-env-field.)

 Refactoring the internal global data structure to make it possible
 to open multiple repositories, work with and then close them.

 Rerolled by Duy on top of a separate preliminary clean-up topic.
 The resulting structure of the topics looked very sensible.

 Will merge to 'master'.


* sb/packfiles-in-repository (2018-03-26) 12 commits
  (merged to 'next' on 2018-03-30 at caa68db14d)
 + packfile: keep prepare_packed_git() private
 + packfile: allow find_pack_entry to handle arbitrary repositories
 + packfile: add repository argument to find_pack_entry
 + packfile: allow reprepare_packed_git to handle arbitrary repositories
 + packfile: allow prepare_packed_git to handle arbitrary repositories
 + packfile: allow prepare_packed_git_one to handle arbitrary repositories
 + packfile: add repository argument to reprepare_packed_git
 + packfile: add repository argument to prepare_packed_git
 + packfile: add repository argument to prepare_packed_git_one
 + packfile: allow install_packed_git to handle arbitrary repositories
 + packfile: allow rearrange_packed_git to handle arbitrary repositories
 + packfile: allow prepare_packed_git_mru to handle arbitrary repositories
 (this branch uses nd/remove-ignore-env-field and sb/object-store; is tangled with sb/submodule-move-nested.)

 Refactoring of the internal global data structure continues.

 Is this ready for 'master' by now?


* ds/commit-graph (2018-04-02) 16 commits
 - commit-graph: implement "--additive" 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/lazy-load-trees.)

 Precompute and store information necessary for ancestry traversal
 in a separate file to optimize graph walking.

 Ready???
 It seems that this topic is getting there.


* 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-02) 6 commits
 - worktree: teach "add" to check out existing branches
 - worktree: factor out dwim_branch function
 - worktree: be clearer when "add" dwim-ery kicks in
 - worktree: improve message when creating a new worktree
 - reset: introduce show-new-head-line option
 - worktree: remove extra members from struct add_opts

 "git worktree add" learned to check out an existing branch.

 Expecting a reroll.
 cf. <20180408143034.GK2629@hank> <20180408142417.GJ2629@hank>


* js/rebase-recreate-merge (2018-02-23) 12 commits
  (merged to 'next' on 2018-03-15 at 3d1671756f)
 + rebase -i: introduce --recreate-merges=[no-]rebase-cousins
 + pull: accept --rebase=recreate to recreate the branch topology
 + sequencer: handle post-rewrite for merge commands
 + sequencer: make refs generated by the `label` command worktree-local
 + rebase: introduce the --recreate-merges option
 + rebase-helper --make-script: introduce a flag to recreate merges
 + sequencer: fast-forward merge commits, if possible
 + sequencer: introduce the `merge` command
 + sequencer: introduce new commands to reset the revision
 + git-rebase--interactive: clarify arguments
 + sequencer: make rearrange_squash() a bit more obvious
 + sequencer: avoid using errno clobbered by rollback_lock_file()

 "git rebase" learned "--recreate-merges" to transplant the whole
 topology of commit graph elsewhere.

 This serise has been reverted out of 'next', expecting that it will
 be replaced by a reroll on top of a couple of topics by Phillip.


* bw/protocol-v2 (2018-03-15) 35 commits
  (merged to 'next' on 2018-03-29 at be7f998712)
 + 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

 The beginning of the next-gen transfer protocol.

 Is this ready for 'master' by now?


* ls/checkout-encoding (2018-03-16) 10 commits
 - 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).

 Expecting a reroll.
 cf. <B86BE818-A385-4E0C-9AE1-1E974471CEB9@gmail.com>


* en/rename-directory-detection (2018-02-27) 29 commits
  (merged to 'next' on 2018-03-06 at d42470f86e)
 + merge-recursive: ensure we write updates for directory-renamed file
 + 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

 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.

 Will merge to 'master'.

^ permalink raw reply	[relevance 4%]

* What's cooking in git.git (Mar 2018, #06; Fri, 30)
@ 2018-03-30 20:38  4% Junio C Hamano
  0 siblings, 0 replies; 19+ results
From: Junio C Hamano @ 2018-03-30 20:38 UTC (permalink / raw)
  To: git

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

Git 2.17 final is expected to be tagged by early next 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"]

* jh/partial-clone (2018-03-25) 1 commit
  (merged to 'next' on 2018-03-28 at 2a0a7aef8e)
 + unpack-trees: release oid_array after use in check_updates()

 Hotfix.

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

* rs/status-with-removed-submodule (2018-03-28) 1 commit
  (merged to 'next' on 2018-03-30 at 8a7b618bc1)
 + submodule: check for NULL return of get_submodule_ref_store()

 "git submodule status" misbehaved on a submodule that has been
 removed from the working tree.

 Will cook in 'next'.


* lv/tls-1.3 (2018-03-29) 1 commit
  (merged to 'next' on 2018-03-30 at 4f13731408)
 + http: allow use of TLS 1.3

 When built with more recent cURL, GIT_SSL_VERSION can now specify
 "tlsv1.3" as its value.

 Will cook in 'next'.


* nd/warn-more-for-devs (2018-03-29) 3 commits
 - Makefile: add EAGER_DEVELOPER mode
 - 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 EAGER_DEVELOPER=YesPlease"
 available now, for those who want to help fixing warnings we
 usually ignore.

 Will merge to 'next'.


* sb/submodule-move-nested (2018-03-29) 6 commits
 - 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
 (this branch uses nd/remove-ignore-env-field and sb/object-store; is tangled with sb/packfiles-in-repository.)

 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.


* tb/config-type (2018-03-29) 1 commit
 - builtin/config.c: prefer `--type=bool` over `--bool`, etc.
 (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 'next'.


* tb/config-default (2018-03-29) 3 commits
 - 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.


* eb/cred-helper-ignore-sigpipe (2018-03-29) 1 commit
  (merged to 'next' on 2018-03-30 at c48e98c1b1)
 + credential: ignore SIGPIPE when writing to credential helpers

 When credential helper exits very quickly without reading its
 input, it used to cause Git to die with SIGPIPE, which has been
 fixed.

 Will cook in 'next'.


* jk/flockfile-stdio (2018-03-30) 1 commit
 - config: move flockfile() closer to unlocked functions


* jk/relative-directory-fix (2018-03-30) 5 commits
 - 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

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

* sb/blame-color (2018-02-13) 3 commits
 - builtin/blame: highlight recently changed lines
 - builtin/blame: add option to color metadata fields separately
 - builtin/blame: dim uninteresting metadata

 Expecting a reroll.
 cf. https://public-inbox.org/git/20171110011002.10179-1-sbeller@google.com/#t
 error messages are funny, can segfault, ...


* 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]

* ds/bsearch-hash (2018-03-25) 4 commits
  (merged to 'next' on 2018-03-29 at 561d5577a7)
 + sha1_name: use bsearch_pack() in unique_in_pack()
 + sha1_name: use bsearch_pack() for abbreviations
 + packfile: define and use bsearch_pack()
 + sha1_name: convert struct min_abbrev_data to object_id
 (this branch uses bc/object-id.)

 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.

 Will cook in 'next'.


* jh/json-writer (2018-03-28) 1 commit
 - json_writer: new routines to create data in JSON format

 Is this ready for 'next'?


* jk/diff-highlight-graph-fix (2018-03-21) 7 commits
  (merged to 'next' on 2018-03-29 at eb995f66e3)
 + diff-highlight: detect --graph by indent
 + diff-highlight: use flush() helper consistently
 + diff-highlight: test graphs with --color
 + diff-highlight: test interleaved parallel lines of history
 + diff-highlight: prefer "echo" to "cat" in tests
 + diff-highlight: use test_tick in graph test
 + diff-highlight: correct test graph diagram

 "diff-highlight" filter (in contrib/) learned to undertand "git log
 --graph" output better.

 Will cook in 'next'.


* ot/libify-get-ref-atom-value (2018-03-29) 6 commits
 - 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 'next'.


* ab/doc-hash-brokenness (2018-03-27) 2 commits
  (merged to 'next' on 2018-03-29 at e9b2f5cf4a)
 + doc hash-function-transition: clarify what SHAttered means
 + doc hash-function-transition: clarify how older gits die on NewHash

 Doc updates.

 Will cook in 'next'.


* ab/drop-contrib-examples (2018-03-26) 1 commit
  (merged to 'next' on 2018-03-29 at 9d8a7603b5)
 + Remove contrib/examples/*

 Will cook in 'next'.


* bc/hash-independent-tests (2018-03-26) 10 commits
  (merged to 'next' on 2018-03-29 at 11179d9b71)
 + t2107: abstract away SHA-1-specific constants
 + t2101: abstract away SHA-1-specific constants
 + t2101: modernize test style
 + t2020: abstract away SHA-1 specific constants
 + t1507: abstract away SHA-1-specific constants
 + t1411: abstract away SHA-1-specific constants
 + t1405: sort reflog entries in a hash-independent way
 + t1300: abstract away SHA-1-specific constants
 + t1304: abstract away SHA-1-specific constants
 + t1011: abstract away SHA-1-specific constants

 Tests that rely on the exact hardcoded values of object names have
 been updated in preparation for hash function migration.

 Will cook in 'next'.


* cc/perf-aggregate-sort (2018-03-27) 2 commits
  (merged to 'next' on 2018-03-29 at 0251068bac)
 + perf/aggregate: add --sort-by=regression option
 + perf/aggregate: add display_dir()

 Perf-test update.

 Will cook in 'next'.


* jc/test-must-be-empty (2018-03-27) 1 commit
  (merged to 'next' on 2018-03-29 at 2e64650f23)
 + test_must_be_empty: simplify file existence check

 Test helper update.

 Will cook in 'next'.


* jk/branch-l-0-deprecation (2018-03-26) 3 commits
  (merged to 'next' on 2018-03-29 at 552cef7913)
 + 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'.


* jm/mem-pool (2018-03-27) 3 commits
  (merged to 'next' on 2018-03-29 at bfce05db6e)
 + 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.

 Will cook in 'next'.


* js/runtime-prefix-windows (2018-03-27) 2 commits
 - mingw/msvc: use the new-style RUNTIME_PREFIX helper
 - exec_cmd: provide a new-style RUNTIME_PREFIX helper for Windows
 (this branch uses dj/runtime-prefix.)

 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.

 Is this, together with the dj/runtime-prefix topic, ready for
 'next'?


* nd/combined-test-helper (2018-03-27) 36 commits
  (merged to 'next' on 2018-03-30 at ea73d57c30)
 + t/helper: merge test-write-cache into test-tool
 + t/helper: merge test-wildmatch into test-tool
 + t/helper: merge test-urlmatch-normalization into test-tool
 + t/helper: merge test-subprocess into test-tool
 + t/helper: merge test-submodule-config into test-tool
 + t/helper: merge test-string-list into test-tool
 + t/helper: merge test-strcmp-offset into test-tool
 + t/helper: merge test-sigchain into test-tool
 + t/helper: merge test-sha1-array into test-tool
 + t/helper: merge test-scrap-cache-tree into test-tool
 + t/helper: merge test-run-command into test-tool
 + t/helper: merge test-revision-walking into test-tool
 + t/helper: merge test-regex into test-tool
 + t/helper: merge test-ref-store into test-tool
 + t/helper: merge test-read-cache into test-tool
 + t/helper: merge test-prio-queue into test-tool
 + t/helper: merge test-path-utils into test-tool
 + t/helper: merge test-online-cpus into test-tool
 + t/helper: merge test-mktemp into test-tool
 + t/helper: merge (unused) test-mergesort into test-tool
 + t/helper: merge (unused) test-match-trees into test-tool
 + t/helper: merge test-index-version into test-tool
 + t/helper: merge test-hashmap into test-tool
 + t/helper: merge test-genrandom into test-tool
 + t/helper: merge test-example-decorate into test-tool
 + t/helper: merge test-dump-split-index into test-tool
 + t/helper: merge test-dump-cache-tree into test-tool
 + t/helper: merge test-drop-caches into test-tool
 + t/helper: merge (unused) test-delta into test-tool
 + t/helper: merge test-date into test-tool
 + t/helper: merge test-ctype into test-tool
 + t/helper: merge test-config into test-tool
 + t/helper: merge test-lazy-init-name-hash into test-tool
 + t/helper: merge test-sha1 into test-tool
 + t/helper: merge test-chmtime into test-tool
 + t/helper: add an empty test-tool program

 Small test-helper programs have been consolidated into a single
 binary.

 Will cook in 'next'.


* nd/parseopt-completion-more (2018-03-25) 8 commits
  (merged to 'next' on 2018-03-29 at 9007b165e2)
 + completion: use __gitcomp_builtin in _git_cherry
 + completion: use __gitcomp_builtin in _git_ls_tree
 + completion: delete option-only completion commands
 + completion: add --option completion for most builtin commands
 + completion: factor out _git_xxx calling code
 + completion: mention the oldest version we need to support
 + git.c: add hidden option --list-parseopt-builtins
 + git.c: move cmd_struct declaration up

 The mechanism to use parse-options API to automate the command line
 completion continues to get extended and polished.

 Will cook in 'next'.


* nd/trace-with-env (2018-03-25) 1 commit
  (merged to 'next' on 2018-03-29 at 6890e2c39b)
 + run-command: use strbuf_addstr() for adding a string to a strbuf

 Code cleanup.

 Will cook in 'next'.


* pk/test-avoid-pipe-hiding-exit-status (2018-03-28) 1 commit
  (merged to 'next' on 2018-03-30 at 4f3df09139)
 + test: avoid pipes in git related commands for test

 Test cleanup.

 Will cook in 'next'.


* ws/rebase-p (2018-03-23) 8 commits
  (merged to 'next' on 2018-03-29 at d20ae8510e)
 + rebase: remove merges_option and a blank line
 + rebase: remove unused code paths from git_rebase__interactive__preserve_merges
 + rebase: remove unused code paths from git_rebase__interactive
 + rebase: add and use git_rebase__interactive__preserve_merges
 + rebase: extract functions out of git_rebase__interactive
 + rebase: reindent function git_rebase__interactive
 + rebase: update invocation of rebase dot-sourced scripts
 + rebase-interactive: simplify pick_on_preserving_merges

 Code clean-up.

 Will cook in 'next'.


* yk/filter-branch-non-committish-refs (2018-03-25) 1 commit
  (merged to 'next' on 2018-03-29 at 8ac3806bcf)
 + filter-branch: fix errors caused by refs that point at non-committish

 when refs that do not point at committish are given, "git
 filter-branch" gave a misleading error messages.  This has been
 corrected.

 Will cook in 'next'.


* ys/bisect-object-id-missing-conversion-fix (2018-03-25) 1 commit
  (merged to 'next' on 2018-03-29 at 7d988b57d4)
 + bisect: use oid_to_hex() for converting object_id hashes to hex strings

 Code clean-up.

 Will cook in 'next'.


* ml/filter-branch-no-op-error (2018-03-15) 1 commit
  (merged to 'next' on 2018-03-15 at ba8ac48dec)
 + filter-branch: return 2 when nothing to rewrite

 "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.

 Will cook in 'next'.


* ab/install-symlinks (2018-03-15) 3 commits
  (merged to 'next' on 2018-03-15 at 99d6bd6cb3)
 + Makefile: optionally symlink libexec/git-core binaries to bin/git
 + Makefile: add a gitexecdir_relative variable
 + Makefile: fix broken bindir_relative variable

 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.

 Will cook in 'next'.


* tg/stash-untracked-with-pathspec-fix (2018-03-21) 4 commits
  (merged to 'next' on 2018-03-22 at 73c4bef74f)
 + stash: drop superfluos pathspec parameter
  (merged to 'next' on 2018-03-21 at 8f5b5ab131)
 + stash push -u: don't create empty stash
 + stash push: avoid printing errors
 + stash: fix nonsense pipeline

 "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.

 Will cook in 'next'.


* pw/rebase-keep-empty-fixes (2018-03-29) 3 commits
 - 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.

 Will merge to 'next'.


* pw/rebase-signoff (2018-03-29) 4 commits
 - 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").

 Will merge to 'next'.


* dj/runtime-prefix (2018-03-25) 3 commits
 - exec_cmd: RUNTIME_PREFIX on some POSIX systems
 - Makefile: add Perl runtime prefix support
 - Makefile: generate Perl header from template file
 (this branch is used by js/runtime-prefix-windows.)

 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.

 Is this, together with the js/runtime-prefix-windows topic, ready
 for 'next'?


* ti/fetch-everything-local-optim (2018-03-14) 1 commit
  (merged to 'next' on 2018-03-15 at 2be87aa7a7)
 + fetch-pack.c: use oidset to check existence of loose object

 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.

 Will cook in 'next'.


* ab/nuke-emacs-contrib (2018-03-13) 1 commit
  (merged to 'next' on 2018-03-15 at 13eb4e2d8b)
 + git{,-blame}.el: remove old bitrotting Emacs code

 The scripts in contrib/emacs/ have outlived their usefulness and
 have been removed.

 Will cook in 'next'.


* bc/object-id (2018-03-14) 36 commits
  (merged to 'next' on 2018-03-20 at f1800a33ff)
 + convert: convert to struct object_id
 + sha1_file: introduce a constant for max header length
 + Convert lookup_replace_object to struct object_id
 + sha1_file: convert read_sha1_file to struct object_id
 + sha1_file: convert read_object_with_reference to object_id
 + tree-walk: convert tree entry functions to object_id
 + streaming: convert istream internals to struct object_id
 + tree-walk: convert get_tree_entry_follow_symlinks internals to object_id
 + builtin/notes: convert static functions to object_id
 + builtin/fmt-merge-msg: convert remaining code to object_id
 + sha1_file: convert sha1_object_info* to object_id
 + Convert remaining callers of sha1_object_info_extended to object_id
 + packfile: convert unpack_entry to struct object_id
 + sha1_file: convert retry_bad_packed_offset to struct object_id
 + sha1_file: convert assert_sha1_type to object_id
 + builtin/mktree: convert to struct object_id
 + streaming: convert open_istream to use struct object_id
 + sha1_file: convert check_sha1_signature to struct object_id
 + sha1_file: convert read_loose_object to use struct object_id
 + builtin/index-pack: convert struct ref_delta_entry to object_id
 + archive: convert sha1_file_to_archive to struct object_id
 + archive: convert write_archive_entry_fn_t to object_id
 + builtin/mktag: convert to struct object_id
 + replace_object: convert struct replace_object to object_id
 + send-pack: convert remaining functions to struct object_id
 + http-walker: convert struct object_request to use struct object_id
 + Convert find_unique_abbrev* to struct object_id
 + wt-status: convert struct wt_status_state to object_id
 + strbuf: convert strbuf_add_unique_abbrev to use struct object_id
 + ref-filter: convert grab_objectname to struct object_id
 + tree: convert read_tree_recursive to struct object_id
 + resolve-undo: convert struct resolve_undo_info to object_id
 + cache-tree: convert remnants to struct object_id
 + cache-tree: convert write_*_as_tree to object_id
 + builtin/write-tree: convert to struct object_id
 + bulk-checkin: convert index_bulk_checkin to struct object_id
 (this branch is used by ds/bsearch-hash.)

 Conversion from uchar[20] to struct object_id continues.

 Will cook in 'next'.


* ma/shortlog-revparse (2018-03-15) 3 commits
  (merged to 'next' on 2018-03-15 at 2c2de7eb95)
 + shortlog: disallow left-over arguments outside repo
 + shortlog: add usage-string for stdin-reading
 + git-shortlog.txt: reorder usages

 "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.

 Will cook in 'next'.


* ab/pcre-v2 (2018-03-14) 3 commits
  (merged to 'next' on 2018-03-15 at e77b116903)
 + Makefile: make USE_LIBPCRE=YesPlease mean v2, not v1
 + configure: detect redundant --with-libpcre & --with-libpcre1
 + configure: fix a regression in PCRE v1 detection

 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.

 Will cook in 'next'.


* bb/git-gui-ssh-key-files (2018-03-02) 2 commits
 - 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/git-gui-bind-kp-enter (2018-03-02) 2 commits
 - 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.


* cb/git-gui-ttk-style (2018-03-05) 2 commits
 - 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.


* nd/pack-objects-pack-struct (2018-03-26) 13 commits
 - 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

 "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.


* nd/repack-keep-pack (2018-03-26) 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.

 Reroll exists, but it seems to be still slushy.
 cf. <20180316192745.19557-1-pclouds@gmail.com>


* nd/worktree-prune (2018-03-15) 3 commits
  (merged to 'next' on 2018-03-20 at e2d9677b20)
 + worktree prune: improve prune logic when worktree is moved
 + worktree: delete dead code
 + gc.txt: more details about what gc does

 The way "git worktree prune" worked internally has been simplified,
 by assuming how "git worktree move" moves an existing worktree to a
 different place.

 Will cook in 'next'.


* pw/add-p-select (2018-03-16) 3 commits
  (merged to 'next' on 2018-03-30 at eae69f5ded)
 + 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.

 Will cook in 'next'.


* 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>


* ps/contains-id-error-message (2018-03-22) 1 commit
  (merged to 'next' on 2018-03-22 at 3bb1dcd506)
 + parse-options: do not show usage upon invalid option value

 "git tag --contains no-such-commit" gave a full list of options
 after giving an error message.

 Will cook in 'next'.


* nd/remove-ignore-env-field (2018-03-23) 6 commits
  (merged to 'next' on 2018-03-23 at ba9d0f2565)
 + repository.h: add comment and clarify repo_set_gitdir
  (merged to 'next' on 2018-03-15 at 802b6ea1cb)
 + repository: delete ignore_env member
 + sha1_file.c: move delayed getenv(altdb) back to setup_git_env()
 + repository.c: delete dead functions
 + repository.c: move env-related setup code back to environment.c
 + repository: initialize the_repository in main()
 (this branch is used by sb/object-store, sb/packfiles-in-repository and sb/submodule-move-nested.)

 Code clean-up for the "repository" abstraction.

 Will cook in 'next'.


* sb/object-store (2018-03-26) 27 commits
  (merged to 'next' on 2018-03-30 at 93e3475178)
 + sha1_file: allow sha1_loose_object_info to handle arbitrary repositories
 + sha1_file: allow map_sha1_file to handle arbitrary repositories
 + sha1_file: allow map_sha1_file_1 to handle arbitrary repositories
 + sha1_file: allow open_sha1_file to handle arbitrary repositories
 + sha1_file: allow stat_sha1_file to handle arbitrary repositories
 + sha1_file: allow sha1_file_name to handle arbitrary repositories
 + sha1_file: add repository argument to sha1_loose_object_info
 + sha1_file: add repository argument to map_sha1_file
 + sha1_file: add repository argument to map_sha1_file_1
 + sha1_file: add repository argument to open_sha1_file
 + sha1_file: add repository argument to stat_sha1_file
 + sha1_file: add repository argument to sha1_file_name
 + sha1_file: allow prepare_alt_odb to handle arbitrary repositories
 + sha1_file: allow link_alt_odb_entries to handle arbitrary repositories
 + sha1_file: add repository argument to prepare_alt_odb
 + sha1_file: add repository argument to link_alt_odb_entries
 + sha1_file: add repository argument to read_info_alternates
 + sha1_file: add repository argument to link_alt_odb_entry
 + sha1_file: add raw_object_store argument to alt_odb_usable
 + pack: move approximate object count to object store
 + pack: move prepare_packed_git_run_once to object store
 + object-store: close all packs upon clearing the object store
 + object-store: move packed_git and packed_git_mru to object store
 + object-store: free alt_odb_list
 + object-store: move alt_odb_list and alt_odb_tail to object store
 + object-store: migrate alternates struct and functions from cache.h
 + repository: introduce raw object store field
 (this branch is used by sb/packfiles-in-repository and sb/submodule-move-nested; uses nd/remove-ignore-env-field.)

 Refactoring the internal global data structure to make it possible
 to open multiple repositories, work with and then close them.

 Rerolled by Duy on top of a separate preliminary clean-up topic.
 The resulting structure of the topics looked very sensible.

 Will cook in 'next'.


* sb/packfiles-in-repository (2018-03-26) 12 commits
  (merged to 'next' on 2018-03-30 at caa68db14d)
 + packfile: keep prepare_packed_git() private
 + packfile: allow find_pack_entry to handle arbitrary repositories
 + packfile: add repository argument to find_pack_entry
 + packfile: allow reprepare_packed_git to handle arbitrary repositories
 + packfile: allow prepare_packed_git to handle arbitrary repositories
 + packfile: allow prepare_packed_git_one to handle arbitrary repositories
 + packfile: add repository argument to reprepare_packed_git
 + packfile: add repository argument to prepare_packed_git
 + packfile: add repository argument to prepare_packed_git_one
 + packfile: allow install_packed_git to handle arbitrary repositories
 + packfile: allow rearrange_packed_git to handle arbitrary repositories
 + packfile: allow prepare_packed_git_mru to handle arbitrary repositories
 (this branch uses nd/remove-ignore-env-field and sb/object-store; is tangled with sb/submodule-move-nested.)

 Refactoring of the internal global data structure continues.

 Will cook in 'next'.


* ds/commit-graph (2018-03-14) 17 commits
 - SQUASH??? sparse fixes
 - commit-graph: implement "--additive" 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

 Precompute and store information necessary for ancestry traversal
 in a separate file to optimize graph walking.

 Expecting a reroll.
 cf. <d76442f9-5f06-998b-8b2a-84b5ca118aaa@gmail.com>
 cf. <0c2f17fa-5c0e-9539-a081-7827a6678bf1@gmail.com>
 It seems that this topic is getting there.


* 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-03-27) 6 commits
 - t2025: rename now outdated branch name
 - worktree: teach "add" to check out existing branches
 - worktree: factor out dwim_branch function
 - worktree: remove force_new_branch from struct add_opts
 - worktree: be clearer when "add" dwim-ery kicks in
 - worktree: improve message when creating a new worktree

 "git worktree add" learned to check out an existing branch.

 Is this ready for 'next'?


* js/rebase-recreate-merge (2018-02-23) 12 commits
  (merged to 'next' on 2018-03-15 at 3d1671756f)
 + rebase -i: introduce --recreate-merges=[no-]rebase-cousins
 + pull: accept --rebase=recreate to recreate the branch topology
 + sequencer: handle post-rewrite for merge commands
 + sequencer: make refs generated by the `label` command worktree-local
 + rebase: introduce the --recreate-merges option
 + rebase-helper --make-script: introduce a flag to recreate merges
 + sequencer: fast-forward merge commits, if possible
 + sequencer: introduce the `merge` command
 + sequencer: introduce new commands to reset the revision
 + git-rebase--interactive: clarify arguments
 + sequencer: make rearrange_squash() a bit more obvious
 + sequencer: avoid using errno clobbered by rollback_lock_file()

 "git rebase" learned "--recreate-merges" to transplant the whole
 topology of commit graph elsewhere.

 This serise has been reverted out of 'next', expecting that it will
 be replaced by a reroll on top of a couple of topics by Phillip.


* bw/protocol-v2 (2018-03-15) 35 commits
  (merged to 'next' on 2018-03-29 at be7f998712)
 + 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

 The beginning of the next-gen transfer protocol.

 Will cook in 'next'.


* ls/checkout-encoding (2018-03-16) 10 commits
 - 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).

 Expecting a reroll.
 cf. <B86BE818-A385-4E0C-9AE1-1E974471CEB9@gmail.com>


* en/rename-directory-detection (2018-02-27) 29 commits
  (merged to 'next' on 2018-03-06 at d42470f86e)
 + merge-recursive: ensure we write updates for directory-renamed file
 + 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

 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.

 Will cook in 'next'.

^ permalink raw reply	[relevance 4%]

* What's cooking in git.git (Mar 2018, #05; Wed, 28)
@ 2018-03-28 19:58  4% Junio C Hamano
  0 siblings, 0 replies; 19+ results
From: Junio C Hamano @ 2018-03-28 19: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.

Git 2.17 final is expected to be tagged by early next 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"]

* bp/refresh-cache-ent-rehash-fix (2018-03-15) 1 commit
  (merged to 'next' on 2018-03-15 at bac8745f08)
 + Fix bugs preventing adding updated cache entries to the name hash

 The codepath to replace an existing entry in the index had a bug in
 updating the name hash structure, which has been fixed.


* dp/merge-strategy-doc-fix (2018-03-19) 1 commit
  (merged to 'next' on 2018-03-20 at 317e077588)
 + Documentation/merge-strategies: typofix

 Doc fix.


* jh/fsck-promisors (2018-03-13) 1 commit
  (merged to 'next' on 2018-03-15 at 0c283dbe5e)
 + sha1_file: restore OBJECT_INFO_QUICK functionality

 A hotfix to a topic that graduated recently.


* jk/attributes-path-doc (2018-03-20) 1 commit
  (merged to 'next' on 2018-03-20 at e965f0c68c)
 + doc/gitattributes: mention non-recursive behavior

 Doc update.


* js/ming-strftime (2018-03-19) 1 commit
  (merged to 'next' on 2018-03-20 at a9ca8172c7)
 + mingw: abort on invalid strftime formats


* jt/transfer-fsck-with-promissor (2018-03-15) 2 commits
  (merged to 'next' on 2018-03-15 at 6d1ccc965b)
 + fetch-pack: do not check links for partial fetch
 + index-pack: support checking objects but not links

 The transfer.fsckobjects configuration tells "git fetch" to
 validate the data and connected-ness of objects in the received
 pack; the code to perform this check has been taught about the
 narrow clone's convention that missing objects that are reachable
 from objects in a pack that came from a promissor remote is OK.


* ks/t3200-typofix (2018-03-15) 1 commit
  (merged to 'next' on 2018-03-15 at 8b8d397787)
 + t/t3200: fix a typo in a test description

 Test typofix.


* ma/config-page-only-in-list-mode (2018-02-21) 3 commits
  (merged to 'next' on 2018-03-15 at 652430af12)
 + config: change default of `pager.config` to "on"
 + config: respect `pager.config` in list/get-mode only
 + t7006: add tests for how git config paginates

 In a way similar to how "git tag" learned to honor the pager
 setting only in the list mode, "git config" learned to ignore the
 pager setting when it is used for setting values (i.e. when the
 purpose of the operation is not to "show").


* ma/skip-writing-unchanged-index (2018-03-01) 1 commit
  (merged to 'next' on 2018-03-15 at cdbbc66464)
 + write_locked_index(): add flag to avoid writing unchanged index

 Internal API clean-up to allow write_locked_index() optionally skip
 writing the in-core index when it is not modified.


* ml/filter-branch-portability-fix (2018-03-19) 1 commit
  (merged to 'next' on 2018-03-20 at c7c17cfc8b)
 + filter-branch: use printf instead of echo -e

 Shell script portability fix.


* nd/parseopt-completion (2018-03-23) 2 commits
  (merged to 'next' on 2018-03-23 at 2bee77135e)
 + t9902: disable test on the list of merge-strategies under GETTEXT_POISON
  (merged to 'next' on 2018-03-22 at 279765c437)
 + completion: clear cached --options when sourcing the completion script
 (this branch is used by nd/parseopt-completion-more.)

 Hotfix for recently graduated topic that give help to completion
 scripts from the Git subcommands that are being completed


* pc/submodule-helper (2018-03-27) 1 commit
  (merged to 'next' on 2018-03-27 at 362e0ef09b)
 + submodule deinit: handle non existing pathspecs gracefully

 Hotfix.


* rj/http-code-cleanup (2018-03-15) 1 commit
  (merged to 'next' on 2018-03-15 at 0dfd462ff8)
 + http: fix an unused variable warning for 'curl_no_proxy'

 There was an unused file-scope static variable left in http.c when
 building for versions of libCURL that is older than 7.19.4, which
 has been fixed.

 This will become unnecessary, when we follow-through the
 jk/drop-ancient-curl topic.


* rj/warning-uninitialized-fix (2018-03-20) 2 commits
  (merged to 'next' on 2018-03-20 at 9ac9d02b0b)
 + read-cache: fix an -Wmaybe-uninitialized warning
 + -Wuninitialized: remove some 'init-self' workarounds

 Compilation fix.


* tg/stash-doc-typofix (2018-03-27) 1 commit
  (merged to 'next' on 2018-03-27 at 144a25f09c)
 + git-stash.txt: remove extra square bracket

 Hotfix.


* tz/complete-tag-delete-tagname (2018-03-19) 1 commit
  (merged to 'next' on 2018-03-20 at d63d45ff16)
 + completion: complete tags with git tag --delete/--verify


* tz/relnotes-1.7-on-perl (2018-03-16) 1 commit
  (merged to 'next' on 2018-03-20 at ed4b26e581)
 + RelNotes: add details on Perl module changes

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

* ds/bsearch-hash (2018-03-25) 4 commits
 - sha1_name: use bsearch_pack() in unique_in_pack()
 - sha1_name: use bsearch_pack() for abbreviations
 - packfile: define and use bsearch_pack()
 - sha1_name: convert struct min_abbrev_data to object_id
 (this branch uses bc/object-id.)

 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.

 Will merge to 'next'.


* jh/json-writer (2018-03-28) 1 commit
 - json_writer: new routines to create data in JSON format


* jk/diff-highlight-graph-fix (2018-03-21) 7 commits
 - diff-highlight: detect --graph by indent
 - diff-highlight: use flush() helper consistently
 - diff-highlight: test graphs with --color
 - diff-highlight: test interleaved parallel lines of history
 - diff-highlight: prefer "echo" to "cat" in tests
 - diff-highlight: use test_tick in graph test
 - diff-highlight: correct test graph diagram

 "diff-highlight" filter (in contrib/) learned to undertand "git log
 --graph" output better.

 Will merge to 'next'.


* ot/libify-get-ref-atom-value (2018-03-21) 6 commits
 - 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
 - strbuf: add shortcut to work with error messages

 Code restructuring, in preparation for further work.

 Will merge to 'next'.


* ab/doc-hash-brokenness (2018-03-27) 2 commits
 - doc hash-function-transition: clarify what SHAttered means
 - doc hash-function-transition: clarify how older gits die on NewHash


* ab/drop-contrib-examples (2018-03-26) 1 commit
 - Remove contrib/examples/*

 Will merge to 'next'.


* bc/hash-independent-tests (2018-03-26) 10 commits
 - t2107: abstract away SHA-1-specific constants
 - t2101: abstract away SHA-1-specific constants
 - t2101: modernize test style
 - t2020: abstract away SHA-1 specific constants
 - t1507: abstract away SHA-1-specific constants
 - t1411: abstract away SHA-1-specific constants
 - t1405: sort reflog entries in a hash-independent way
 - t1300: abstract away SHA-1-specific constants
 - t1304: abstract away SHA-1-specific constants
 - t1011: abstract away SHA-1-specific constants


* cc/perf-aggregate-sort (2018-03-27) 2 commits
 - perf/aggregate: add --sort-by=regression option
 - perf/aggregate: add display_dir()


* jc/test-must-be-empty (2018-03-27) 1 commit
 - test_must_be_empty: simplify file existence check


* jh/partial-clone (2018-03-25) 1 commit
  (merged to 'next' on 2018-03-28 at 2a0a7aef8e)
 + unpack-trees: release oid_array after use in check_updates()

 Hotfix.

 Will merge to 'master'.


* jk/branch-l-0-deprecation (2018-03-26) 3 commits
 - 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.)


* 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.)


* 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.)


* jm/mem-pool (2018-03-27) 3 commits
 - 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


* js/runtime-prefix-windows (2018-03-27) 2 commits
 - mingw/msvc: use the new-style RUNTIME_PREFIX helper
 - exec_cmd: provide a new-style RUNTIME_PREFIX helper for Windows
 (this branch uses dj/runtime-prefix.)


* nd/combined-test-helper (2018-03-27) 36 commits
 - t/helper: merge test-write-cache into test-tool
 - t/helper: merge test-wildmatch into test-tool
 - t/helper: merge test-urlmatch-normalization into test-tool
 - t/helper: merge test-subprocess into test-tool
 - t/helper: merge test-submodule-config into test-tool
 - t/helper: merge test-string-list into test-tool
 - t/helper: merge test-strcmp-offset into test-tool
 - t/helper: merge test-sigchain into test-tool
 - t/helper: merge test-sha1-array into test-tool
 - t/helper: merge test-scrap-cache-tree into test-tool
 - t/helper: merge test-run-command into test-tool
 - t/helper: merge test-revision-walking into test-tool
 - t/helper: merge test-regex into test-tool
 - t/helper: merge test-ref-store into test-tool
 - t/helper: merge test-read-cache into test-tool
 - t/helper: merge test-prio-queue into test-tool
 - t/helper: merge test-path-utils into test-tool
 - t/helper: merge test-online-cpus into test-tool
 - t/helper: merge test-mktemp into test-tool
 - t/helper: merge (unused) test-mergesort into test-tool
 - t/helper: merge (unused) test-match-trees into test-tool
 - t/helper: merge test-index-version into test-tool
 - t/helper: merge test-hashmap into test-tool
 - t/helper: merge test-genrandom into test-tool
 - t/helper: merge test-example-decorate into test-tool
 - t/helper: merge test-dump-split-index into test-tool
 - t/helper: merge test-dump-cache-tree into test-tool
 - t/helper: merge test-drop-caches into test-tool
 - t/helper: merge (unused) test-delta into test-tool
 - t/helper: merge test-date into test-tool
 - t/helper: merge test-ctype into test-tool
 - t/helper: merge test-config into test-tool
 - t/helper: merge test-lazy-init-name-hash into test-tool
 - t/helper: merge test-sha1 into test-tool
 - t/helper: merge test-chmtime into test-tool
 - t/helper: add an empty test-tool program


* nd/parseopt-completion-more (2018-03-25) 8 commits
 - completion: use __gitcomp_builtin in _git_cherry
 - completion: use __gitcomp_builtin in _git_ls_tree
 - completion: delete option-only completion commands
 - completion: add --option completion for most builtin commands
 - completion: factor out _git_xxx calling code
 - completion: mention the oldest version we need to support
 - git.c: add hidden option --list-parseopt-builtins
 - git.c: move cmd_struct declaration up


* nd/trace-with-env (2018-03-25) 1 commit
 - run-command: use strbuf_addstr() for adding a string to a strbuf


* pk/test-avoid-pipe-hiding-exit-status (2018-03-28) 1 commit
 - test: avoid pipes in git related commands for test


* ws/rebase-p (2018-03-23) 8 commits
 - rebase: remove merges_option and a blank line
 - rebase: remove unused code paths from git_rebase__interactive__preserve_merges
 - rebase: remove unused code paths from git_rebase__interactive
 - rebase: add and use git_rebase__interactive__preserve_merges
 - rebase: extract functions out of git_rebase__interactive
 - rebase: reindent function git_rebase__interactive
 - rebase: update invocation of rebase dot-sourced scripts
 - rebase-interactive: simplify pick_on_preserving_merges

 Code clean-up.

 Will merge to 'next'.


* yk/filter-branch-non-committish-refs (2018-03-25) 1 commit
 - filter-branch: fix errors caused by refs that point at non-committish


* ys/bisect-object-id-missing-conversion-fix (2018-03-25) 1 commit
 - bisect: use oid_to_hex() for converting object_id hashes to hex strings

 Code clean-up.

 Will merge to 'next'.

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

* sb/blame-color (2018-02-13) 3 commits
 - builtin/blame: highlight recently changed lines
 - builtin/blame: add option to color metadata fields separately
 - builtin/blame: dim uninteresting metadata

 Expecting a reroll.
 cf. https://public-inbox.org/git/20171110011002.10179-1-sbeller@google.com/#t
 error messages are funny, can segfault, ...


* 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]

* ml/filter-branch-no-op-error (2018-03-15) 1 commit
  (merged to 'next' on 2018-03-15 at ba8ac48dec)
 + filter-branch: return 2 when nothing to rewrite

 "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.

 Will cook in 'next'.


* ab/install-symlinks (2018-03-15) 3 commits
  (merged to 'next' on 2018-03-15 at 99d6bd6cb3)
 + Makefile: optionally symlink libexec/git-core binaries to bin/git
 + Makefile: add a gitexecdir_relative variable
 + Makefile: fix broken bindir_relative variable

 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.

 Will cook in 'next'.


* tg/stash-untracked-with-pathspec-fix (2018-03-21) 4 commits
  (merged to 'next' on 2018-03-22 at 73c4bef74f)
 + stash: drop superfluos pathspec parameter
  (merged to 'next' on 2018-03-21 at 8f5b5ab131)
 + stash push -u: don't create empty stash
 + stash push: avoid printing errors
 + stash: fix nonsense pipeline

 "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.

 Will cook in 'next'.


* pw/rebase-keep-empty-fixes (2018-03-20) 4 commits
 - SQUASH???
 - 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-20) 4 commits
 - 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").


* dj/runtime-prefix (2018-03-25) 3 commits
 - exec_cmd: RUNTIME_PREFIX on some POSIX systems
 - Makefile: add Perl runtime prefix support
 - Makefile: generate Perl header from template file
 (this branch is used by js/runtime-prefix-windows.)

 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.


* ti/fetch-everything-local-optim (2018-03-14) 1 commit
  (merged to 'next' on 2018-03-15 at 2be87aa7a7)
 + fetch-pack.c: use oidset to check existence of loose object

 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.

 Will cook in 'next'.


* ab/nuke-emacs-contrib (2018-03-13) 1 commit
  (merged to 'next' on 2018-03-15 at 13eb4e2d8b)
 + git{,-blame}.el: remove old bitrotting Emacs code

 The scripts in contrib/emacs/ have outlived their usefulness and
 have been removed.

 Will cook in 'next'.


* bc/object-id (2018-03-14) 36 commits
  (merged to 'next' on 2018-03-20 at f1800a33ff)
 + convert: convert to struct object_id
 + sha1_file: introduce a constant for max header length
 + Convert lookup_replace_object to struct object_id
 + sha1_file: convert read_sha1_file to struct object_id
 + sha1_file: convert read_object_with_reference to object_id
 + tree-walk: convert tree entry functions to object_id
 + streaming: convert istream internals to struct object_id
 + tree-walk: convert get_tree_entry_follow_symlinks internals to object_id
 + builtin/notes: convert static functions to object_id
 + builtin/fmt-merge-msg: convert remaining code to object_id
 + sha1_file: convert sha1_object_info* to object_id
 + Convert remaining callers of sha1_object_info_extended to object_id
 + packfile: convert unpack_entry to struct object_id
 + sha1_file: convert retry_bad_packed_offset to struct object_id
 + sha1_file: convert assert_sha1_type to object_id
 + builtin/mktree: convert to struct object_id
 + streaming: convert open_istream to use struct object_id
 + sha1_file: convert check_sha1_signature to struct object_id
 + sha1_file: convert read_loose_object to use struct object_id
 + builtin/index-pack: convert struct ref_delta_entry to object_id
 + archive: convert sha1_file_to_archive to struct object_id
 + archive: convert write_archive_entry_fn_t to object_id
 + builtin/mktag: convert to struct object_id
 + replace_object: convert struct replace_object to object_id
 + send-pack: convert remaining functions to struct object_id
 + http-walker: convert struct object_request to use struct object_id
 + Convert find_unique_abbrev* to struct object_id
 + wt-status: convert struct wt_status_state to object_id
 + strbuf: convert strbuf_add_unique_abbrev to use struct object_id
 + ref-filter: convert grab_objectname to struct object_id
 + tree: convert read_tree_recursive to struct object_id
 + resolve-undo: convert struct resolve_undo_info to object_id
 + cache-tree: convert remnants to struct object_id
 + cache-tree: convert write_*_as_tree to object_id
 + builtin/write-tree: convert to struct object_id
 + bulk-checkin: convert index_bulk_checkin to struct object_id
 (this branch is used by ds/bsearch-hash.)

 Conversion from uchar[20] to struct object_id continues.

 Will cook in 'next'.


* ma/shortlog-revparse (2018-03-15) 3 commits
  (merged to 'next' on 2018-03-15 at 2c2de7eb95)
 + shortlog: disallow left-over arguments outside repo
 + shortlog: add usage-string for stdin-reading
 + git-shortlog.txt: reorder usages

 "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.

 Will cook in 'next'.


* ab/pcre-v2 (2018-03-14) 3 commits
  (merged to 'next' on 2018-03-15 at e77b116903)
 + Makefile: make USE_LIBPCRE=YesPlease mean v2, not v1
 + configure: detect redundant --with-libpcre & --with-libpcre1
 + configure: fix a regression in PCRE v1 detection

 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.

 Will cook in 'next'.


* bb/git-gui-ssh-key-files (2018-03-02) 2 commits
 - 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/git-gui-bind-kp-enter (2018-03-02) 2 commits
 - 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.


* cb/git-gui-ttk-style (2018-03-05) 2 commits
 - 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.


* nd/pack-objects-pack-struct (2018-03-26) 13 commits
 - 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

 "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.


* nd/repack-keep-pack (2018-03-26) 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.

 Reroll exists, but it seems to be still slushy.
 cf. <20180316192745.19557-1-pclouds@gmail.com>


* nd/worktree-prune (2018-03-15) 3 commits
  (merged to 'next' on 2018-03-20 at e2d9677b20)
 + worktree prune: improve prune logic when worktree is moved
 + worktree: delete dead code
 + gc.txt: more details about what gc does

 The way "git worktree prune" worked internally has been simplified,
 by assuming how "git worktree move" moves an existing worktree to a
 different place.

 Will cook in 'next'.


* 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.


* 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>


* ps/contains-id-error-message (2018-03-22) 1 commit
  (merged to 'next' on 2018-03-22 at 3bb1dcd506)
 + parse-options: do not show usage upon invalid option value

 "git tag --contains no-such-commit" gave a full list of options
 after giving an error message.

 Will cook in 'next'.


* nd/remove-ignore-env-field (2018-03-23) 6 commits
  (merged to 'next' on 2018-03-23 at ba9d0f2565)
 + repository.h: add comment and clarify repo_set_gitdir
  (merged to 'next' on 2018-03-15 at 802b6ea1cb)
 + repository: delete ignore_env member
 + sha1_file.c: move delayed getenv(altdb) back to setup_git_env()
 + repository.c: delete dead functions
 + repository.c: move env-related setup code back to environment.c
 + repository: initialize the_repository in main()
 (this branch is used by sb/object-store and sb/packfiles-in-repository.)

 Code clean-up for the "repository" abstraction.

 Will cook in 'next'.


* sb/object-store (2018-03-26) 27 commits
 - sha1_file: allow sha1_loose_object_info to handle arbitrary repositories
 - sha1_file: allow map_sha1_file to handle arbitrary repositories
 - sha1_file: allow map_sha1_file_1 to handle arbitrary repositories
 - sha1_file: allow open_sha1_file to handle arbitrary repositories
 - sha1_file: allow stat_sha1_file to handle arbitrary repositories
 - sha1_file: allow sha1_file_name to handle arbitrary repositories
 - sha1_file: add repository argument to sha1_loose_object_info
 - sha1_file: add repository argument to map_sha1_file
 - sha1_file: add repository argument to map_sha1_file_1
 - sha1_file: add repository argument to open_sha1_file
 - sha1_file: add repository argument to stat_sha1_file
 - sha1_file: add repository argument to sha1_file_name
 - sha1_file: allow prepare_alt_odb to handle arbitrary repositories
 - sha1_file: allow link_alt_odb_entries to handle arbitrary repositories
 - sha1_file: add repository argument to prepare_alt_odb
 - sha1_file: add repository argument to link_alt_odb_entries
 - sha1_file: add repository argument to read_info_alternates
 - sha1_file: add repository argument to link_alt_odb_entry
 - sha1_file: add raw_object_store argument to alt_odb_usable
 - pack: move approximate object count to object store
 - pack: move prepare_packed_git_run_once to object store
 - object-store: close all packs upon clearing the object store
 - object-store: move packed_git and packed_git_mru to object store
 - object-store: free alt_odb_list
 - object-store: move alt_odb_list and alt_odb_tail to object store
 - object-store: migrate alternates struct and functions from cache.h
 - repository: introduce raw object store field
 (this branch is used by sb/packfiles-in-repository; uses nd/remove-ignore-env-field.)

 Refactoring the internal global data structure to make it possible
 to open multiple repositories, work with and then close them.

 Rerolled by Duy on top of a separate preliminary clean-up topic.
 The resulting structure of the topics looked very sensible.

 Waiting for a follow-up discussion.


* sb/packfiles-in-repository (2018-03-26) 12 commits
 - packfile: keep prepare_packed_git() private
 - packfile: allow find_pack_entry to handle arbitrary repositories
 - packfile: add repository argument to find_pack_entry
 - packfile: allow reprepare_packed_git to handle arbitrary repositories
 - packfile: allow prepare_packed_git to handle arbitrary repositories
 - packfile: allow prepare_packed_git_one to handle arbitrary repositories
 - packfile: add repository argument to reprepare_packed_git
 - packfile: add repository argument to prepare_packed_git
 - packfile: add repository argument to prepare_packed_git_one
 - packfile: allow install_packed_git to handle arbitrary repositories
 - packfile: allow rearrange_packed_git to handle arbitrary repositories
 - packfile: allow prepare_packed_git_mru to handle arbitrary repositories
 (this branch uses nd/remove-ignore-env-field and sb/object-store.)

 Refactoring of the internal global data structure continues.

 Waiting for a follow-up discussion.


* ds/commit-graph (2018-03-14) 17 commits
 - SQUASH??? sparse fixes
 - commit-graph: implement "--additive" 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

 Precompute and store information necessary for ancestry traversal
 in a separate file to optimize graph walking.

 It seems that this topic is getting there.


* 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-03-27) 6 commits
 - t2025: rename now outdated branch name
 - worktree: teach "add" to check out existing branches
 - worktree: factor out dwim_branch function
 - worktree: remove force_new_branch from struct add_opts
 - worktree: be clearer when "add" dwim-ery kicks in
 - worktree: improve message when creating a new worktree

 "git worktree add" learned to check out an existing branch.


* js/rebase-recreate-merge (2018-02-23) 12 commits
  (merged to 'next' on 2018-03-15 at 3d1671756f)
 + rebase -i: introduce --recreate-merges=[no-]rebase-cousins
 + pull: accept --rebase=recreate to recreate the branch topology
 + sequencer: handle post-rewrite for merge commands
 + sequencer: make refs generated by the `label` command worktree-local
 + rebase: introduce the --recreate-merges option
 + rebase-helper --make-script: introduce a flag to recreate merges
 + sequencer: fast-forward merge commits, if possible
 + sequencer: introduce the `merge` command
 + sequencer: introduce new commands to reset the revision
 + git-rebase--interactive: clarify arguments
 + sequencer: make rearrange_squash() a bit more obvious
 + sequencer: avoid using errno clobbered by rollback_lock_file()

 "git rebase" learned "--recreate-merges" to transplant the whole
 topology of commit graph elsewhere.

 This serise has been reverted out of 'next', expecting that it will
 be replaced by a reroll on top of a couple of topics by Phillip.


* bw/protocol-v2 (2018-03-15) 35 commits
 - 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

 The beginning of the next-gen transfer protocol.

 Is everybody happy with this version?  One design decision with
 larger consequence "to or not to build in?" has been settled in
 favor of status quo, IIRC.


* ls/checkout-encoding (2018-03-16) 10 commits
 - 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).


* en/rename-directory-detection (2018-02-27) 29 commits
  (merged to 'next' on 2018-03-06 at d42470f86e)
 + merge-recursive: ensure we write updates for directory-renamed file
 + 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

 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.

 Will cook in 'next'.

^ permalink raw reply	[relevance 4%]

* Re: [PATCH 00/12] sb/packfiles-in-repository updates
  2018-03-23 17:45  7%   ` [PATCH 00/12] sb/packfiles-in-repository updates Nguyễn Thái Ngọc Duy
  2018-03-23 17:45  5%     ` [PATCH 06/12] packfile: add repository argument to reprepare_packed_git Nguyễn Thái Ngọc Duy
@ 2018-03-23 20:15  0%     ` Brandon Williams
  1 sibling, 0 replies; 19+ results
From: Brandon Williams @ 2018-03-23 20:15 UTC (permalink / raw)
  To: Nguyễn Thái Ngọc Duy
  Cc: git, gitster, sbeller, Jonathan Tan, Eric Sunshine

On 03/23, Nguyễn Thái Ngọc Duy wrote:
> This is the rebased version on the updated sb/object-store I just sent
> out plus the fix for get_object_directory(). The interdiff (after
> rebased) looks small and nice

Nice! Thanks for fixing that.  This series looks good to me :)

> 
> diff --git a/packfile.c b/packfile.c
> index e02136bebb..63c89ee31a 100644
> --- a/packfile.c
> +++ b/packfile.c
> @@ -890,7 +890,7 @@ static void prepare_packed_git(struct repository *r)
>  
>  	if (r->objects->packed_git_initialized)
>  		return;
> -	prepare_packed_git_one(r, get_object_directory(), 1);
> +	prepare_packed_git_one(r, r->objects->objectdir, 1);
>  	prepare_alt_odb(r);
>  	for (alt = r->objects->alt_odb_list; alt; alt = alt->next)
>  		prepare_packed_git_one(r, alt->path, 0);
> 
> I notice there's still one get_object_directory() left in packfile.c
> but that should not cause problems with converted functions. That
> could be done in "phase 2".
> 
> Nguyễn Thái Ngọc Duy (1):
>   packfile: keep prepare_packed_git() private
> 
> Stefan Beller (11):
>   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
> 
>  builtin/count-objects.c  |  3 +-
>  builtin/fsck.c           |  2 --
>  builtin/gc.c             |  3 +-
>  builtin/pack-objects.c   |  1 -
>  builtin/pack-redundant.c |  2 --
>  builtin/receive-pack.c   |  3 +-
>  bulk-checkin.c           |  3 +-
>  fast-import.c            |  3 +-
>  fetch-pack.c             |  3 +-
>  http-backend.c           |  1 -
>  http.c                   |  2 +-
>  pack-bitmap.c            |  1 -
>  packfile.c               | 76 +++++++++++++++++++---------------------
>  packfile.h               | 11 +++---
>  server-info.c            |  1 -
>  sha1_file.c              |  8 ++---
>  sha1_name.c              |  2 --
>  17 files changed, 58 insertions(+), 67 deletions(-)
> 
> -- 
> 2.17.0.rc0.348.gd5a49e0b6f
> 

-- 
Brandon Williams

^ permalink raw reply	[relevance 0%]

* [PATCH 06/12] packfile: add repository argument to reprepare_packed_git
  2018-03-23 17:45  7%   ` [PATCH 00/12] sb/packfiles-in-repository updates Nguyễn Thái Ngọc Duy
@ 2018-03-23 17:45  5%     ` Nguyễn Thái Ngọc Duy
  2018-03-23 20:15  0%     ` [PATCH 00/12] sb/packfiles-in-repository updates Brandon Williams
  1 sibling, 0 replies; 19+ results
From: Nguyễn Thái Ngọc Duy @ 2018-03-23 17:45 UTC (permalink / raw)
  To: pclouds
  Cc: git, gitster, sbeller, Brandon Williams, Jonathan Tan,
	Eric Sunshine

From: Stefan Beller <sbeller@google.com>

See previous patch for explanation.

Signed-off-by: Stefan Beller <sbeller@google.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
Signed-off-by: Nguyễn Thái Ngọc Duy <pclouds@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
---
 builtin/gc.c           | 2 +-
 builtin/receive-pack.c | 3 ++-
 bulk-checkin.c         | 3 ++-
 fetch-pack.c           | 3 ++-
 packfile.c             | 2 +-
 packfile.h             | 3 ++-
 sha1_file.c            | 2 +-
 7 files changed, 11 insertions(+), 7 deletions(-)

diff --git a/builtin/gc.c b/builtin/gc.c
index 4c7409946e..a78dad51aa 100644
--- a/builtin/gc.c
+++ b/builtin/gc.c
@@ -478,7 +478,7 @@ int cmd_gc(int argc, const char **argv, const char *prefix)
 		return error(FAILED_RUN, rerere.argv[0]);
 
 	report_garbage = report_pack_garbage;
-	reprepare_packed_git();
+	reprepare_packed_git(the_repository);
 	if (pack_garbage.nr > 0)
 		clean_pack_garbage();
 
diff --git a/builtin/receive-pack.c b/builtin/receive-pack.c
index 1a298a6711..469b916707 100644
--- a/builtin/receive-pack.c
+++ b/builtin/receive-pack.c
@@ -1,4 +1,5 @@
 #include "builtin.h"
+#include "repository.h"
 #include "config.h"
 #include "lockfile.h"
 #include "pack.h"
@@ -1777,7 +1778,7 @@ static const char *unpack(int err_fd, struct shallow_info *si)
 		status = finish_command(&child);
 		if (status)
 			return "index-pack abnormal exit";
-		reprepare_packed_git();
+		reprepare_packed_git(the_repository);
 	}
 	return NULL;
 }
diff --git a/bulk-checkin.c b/bulk-checkin.c
index 3310fd210a..eadc2d5172 100644
--- a/bulk-checkin.c
+++ b/bulk-checkin.c
@@ -3,6 +3,7 @@
  */
 #include "cache.h"
 #include "bulk-checkin.h"
+#include "repository.h"
 #include "csum-file.h"
 #include "pack.h"
 #include "strbuf.h"
@@ -57,7 +58,7 @@ static void finish_bulk_checkin(struct bulk_checkin_state *state)
 
 	strbuf_release(&packname);
 	/* Make objects we just wrote available to ourselves */
-	reprepare_packed_git();
+	reprepare_packed_git(the_repository);
 }
 
 static int already_written(struct bulk_checkin_state *state, unsigned char sha1[])
diff --git a/fetch-pack.c b/fetch-pack.c
index 8253d746e0..eac5928a27 100644
--- a/fetch-pack.c
+++ b/fetch-pack.c
@@ -1,4 +1,5 @@
 #include "cache.h"
+#include "repository.h"
 #include "config.h"
 #include "lockfile.h"
 #include "refs.h"
@@ -1192,7 +1193,7 @@ struct ref *fetch_pack(struct fetch_pack_args *args,
 	prepare_shallow_info(&si, shallow);
 	ref_cpy = do_fetch_pack(args, fd, ref, sought, nr_sought,
 				&si, pack_lockfile);
-	reprepare_packed_git();
+	reprepare_packed_git(the_repository);
 	update_shallow(args, sought, nr_sought, &si);
 	clear_shallow_info(&si);
 	return ref_cpy;
diff --git a/packfile.c b/packfile.c
index bb090f8a29..1b4296277a 100644
--- a/packfile.c
+++ b/packfile.c
@@ -899,7 +899,7 @@ void prepare_packed_git_the_repository(void)
 	the_repository->objects->packed_git_initialized = 1;
 }
 
-void reprepare_packed_git(void)
+void reprepare_packed_git_the_repository(void)
 {
 	the_repository->objects->approximate_object_count_valid = 0;
 	the_repository->objects->packed_git_initialized = 0;
diff --git a/packfile.h b/packfile.h
index 3f59456e7e..ab5046938c 100644
--- a/packfile.h
+++ b/packfile.h
@@ -36,7 +36,8 @@ extern void (*report_garbage)(unsigned seen_bits, const char *path);
 
 #define prepare_packed_git(r) prepare_packed_git_##r()
 extern void prepare_packed_git_the_repository(void);
-extern void reprepare_packed_git(void);
+#define reprepare_packed_git(r) reprepare_packed_git_##r()
+extern void reprepare_packed_git_the_repository(void);
 extern void install_packed_git(struct repository *r, struct packed_git *pack);
 
 struct packed_git *get_packed_git(struct repository *r);
diff --git a/sha1_file.c b/sha1_file.c
index 0989bbd948..9c024cd957 100644
--- a/sha1_file.c
+++ b/sha1_file.c
@@ -1274,7 +1274,7 @@ int sha1_object_info_extended(const unsigned char *sha1, struct object_info *oi,
 			return 0;
 
 		/* Not a loose object; someone else may have just packed it. */
-		reprepare_packed_git();
+		reprepare_packed_git(the_repository);
 		if (find_pack_entry(real, &e))
 			break;
 
-- 
2.17.0.rc0.348.gd5a49e0b6f


^ permalink raw reply related	[relevance 5%]

* [PATCH 00/12] sb/packfiles-in-repository updates
    2018-03-03 11:36  5%   ` [PATCH 38/44] packfile: add repository argument to reprepare_packed_git Nguyễn Thái Ngọc Duy
@ 2018-03-23 17:45  7%   ` Nguyễn Thái Ngọc Duy
  2018-03-23 17:45  5%     ` [PATCH 06/12] packfile: add repository argument to reprepare_packed_git Nguyễn Thái Ngọc Duy
  2018-03-23 20:15  0%     ` [PATCH 00/12] sb/packfiles-in-repository updates Brandon Williams
  1 sibling, 2 replies; 19+ results
From: Nguyễn Thái Ngọc Duy @ 2018-03-23 17:45 UTC (permalink / raw)
  To: pclouds
  Cc: git, gitster, sbeller, Brandon Williams, Jonathan Tan,
	Eric Sunshine

This is the rebased version on the updated sb/object-store I just sent
out plus the fix for get_object_directory(). The interdiff (after
rebased) looks small and nice

diff --git a/packfile.c b/packfile.c
index e02136bebb..63c89ee31a 100644
--- a/packfile.c
+++ b/packfile.c
@@ -890,7 +890,7 @@ static void prepare_packed_git(struct repository *r)
 
 	if (r->objects->packed_git_initialized)
 		return;
-	prepare_packed_git_one(r, get_object_directory(), 1);
+	prepare_packed_git_one(r, r->objects->objectdir, 1);
 	prepare_alt_odb(r);
 	for (alt = r->objects->alt_odb_list; alt; alt = alt->next)
 		prepare_packed_git_one(r, alt->path, 0);

I notice there's still one get_object_directory() left in packfile.c
but that should not cause problems with converted functions. That
could be done in "phase 2".

Nguyễn Thái Ngọc Duy (1):
  packfile: keep prepare_packed_git() private

Stefan Beller (11):
  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

 builtin/count-objects.c  |  3 +-
 builtin/fsck.c           |  2 --
 builtin/gc.c             |  3 +-
 builtin/pack-objects.c   |  1 -
 builtin/pack-redundant.c |  2 --
 builtin/receive-pack.c   |  3 +-
 bulk-checkin.c           |  3 +-
 fast-import.c            |  3 +-
 fetch-pack.c             |  3 +-
 http-backend.c           |  1 -
 http.c                   |  2 +-
 pack-bitmap.c            |  1 -
 packfile.c               | 76 +++++++++++++++++++---------------------
 packfile.h               | 11 +++---
 server-info.c            |  1 -
 sha1_file.c              |  8 ++---
 sha1_name.c              |  2 --
 17 files changed, 58 insertions(+), 67 deletions(-)

-- 
2.17.0.rc0.348.gd5a49e0b6f


^ permalink raw reply related	[relevance 7%]

* What's cooking in git.git (Mar 2018, #04; Tue, 20)
@ 2018-03-20 22:19  4% Junio C Hamano
  0 siblings, 0 replies; 19+ results
From: Junio C Hamano @ 2018-03-20 22:19 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.

Hopefully 2.17-rc1 can be tagged tomorrow, with a handful of topics
marked for 'master' in this issue of "What's cooking" report.

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/man-sec-list (2018-03-08) 1 commit
  (merged to 'next' on 2018-03-09 at 9626b691e2)
 + git manpage: note git-security@googlegroups.com

 Doc update.


* ab/perl-fixes (2018-03-05) 13 commits
  (merged to 'next' on 2018-03-09 at 262d84c1ba)
 + perl Git::LoadCPAN: emit better errors under NO_PERL_CPAN_FALLBACKS
 + Makefile: add NO_PERL_CPAN_FALLBACKS knob
 + perl: move the perl/Git/FromCPAN tree to perl/FromCPAN
 + perl: generalize the Git::LoadCPAN facility
 + perl: move CPAN loader wrappers to another namespace
 + perl: update our copy of Mail::Address
 + perl: update our ancient copy of Error.pm
 + git-send-email: unconditionally use Net::{SMTP,Domain}
 + Git.pm: hard-depend on the File::{Temp,Spec} modules
 + gitweb: hard-depend on the Digest::MD5 5.8 module
 + Git.pm: add the "use warnings" pragma
 + Git.pm: remove redundant "use strict" from sub-package
 + perl: *.pm files should not have the executable bit

 Clean-up to various pieces of Perl code we have.


* cl/send-email-reply-to (2018-03-06) 2 commits
  (merged to 'next' on 2018-03-09 at 3d3c3ab441)
 + send-email: support separate Reply-To address
 + send-email: rename variable for clarity
 (this branch uses np/send-email-header-parsing.)

 "git send-email" learned "--reply-to=<address>" option.


* np/send-email-header-parsing (2017-12-15) 1 commit
  (merged to 'next' on 2018-03-09 at 91ef7216f7)
 + send-email: extract email-parsing code into a subroutine
 (this branch is used by cl/send-email-reply-to.)

 Code refactoring.


* sg/cvs-tests-with-x (2018-03-08) 2 commits
  (merged to 'next' on 2018-03-09 at 6ec749c7b7)
 + t9402-git-cvsserver-refs: don't check the stderr of a subshell
 + t9400-git-cvsserver-server: don't rely on the output of 'test_cmp'

 Allow running a couple of tests with "sh -x".


* tl/userdiff-csharp-async (2018-03-08) 1 commit
  (merged to 'next' on 2018-03-09 at 6dcf76e118)
 + userdiff.c: add C# async keyword in diff pattern

 Update funcname pattern used for C# to recognize "async" keyword.

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

* bp/refresh-cache-ent-rehash-fix (2018-03-15) 1 commit
  (merged to 'next' on 2018-03-15 at bac8745f08)
 + Fix bugs preventing adding updated cache entries to the name hash

 The codepath to replace an existing entry in the index had a bug in
 updating the name hash structure, which has been fixed.

 Will merge to 'master'.


* jt/transfer-fsck-with-promissor (2018-03-15) 2 commits
  (merged to 'next' on 2018-03-15 at 6d1ccc965b)
 + fetch-pack: do not check links for partial fetch
 + index-pack: support checking objects but not links

 The transfer.fsckobjects configuration tells "git fetch" to
 validate the data and connected-ness of objects in the received
 pack; the code to perform this check has been taught about the
 narrow clone's convention that missing objects that are reachable
 from objects in a pack that came from a promissor remote is OK.

 Will merge to 'master'.


* ml/filter-branch-no-op-error (2018-03-15) 1 commit
  (merged to 'next' on 2018-03-15 at ba8ac48dec)
 + filter-branch: return 2 when nothing to rewrite

 "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.

 Will cook in 'next'.


* ab/install-symlinks (2018-03-15) 3 commits
  (merged to 'next' on 2018-03-15 at 99d6bd6cb3)
 + Makefile: optionally symlink libexec/git-core binaries to bin/git
 + Makefile: add a gitexecdir_relative variable
 + Makefile: fix broken bindir_relative variable

 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.

 Will cook in 'next'.


* ks/t3200-typofix (2018-03-15) 1 commit
  (merged to 'next' on 2018-03-15 at 8b8d397787)
 + t/t3200: fix a typo in a test description

 Test typofix.

 Will merge to 'master'.


* rj/http-code-cleanup (2018-03-15) 1 commit
  (merged to 'next' on 2018-03-15 at 0dfd462ff8)
 + http: fix an unused variable warning for 'curl_no_proxy'

 There was an unused file-scope static variable left in http.c when
 building for versions of libCURL that is older than 7.19.4, which
 has been fixed.

 Will merge to 'master'.
 This will become unnecessary, when we follow-through the
 jk/drop-ancient-curl topic.


* tg/stash-untracked-with-pathspec-fix (2018-03-20) 3 commits
 - stash push -u: don't create empty stash
 - stash push: avoid printing errors
 - stash: fix nonsense pipeline

 "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.

 Will merge to 'next'.


* dp/merge-strategy-doc-fix (2018-03-19) 1 commit
  (merged to 'next' on 2018-03-20 at 317e077588)
 + Documentation/merge-strategies: typofix

 Doc fix.

 Will merge to 'master'.


* js/ming-strftime (2018-03-19) 1 commit
  (merged to 'next' on 2018-03-20 at a9ca8172c7)
 + mingw: abort on invalid strftime formats

 Will merge to 'master'.


* ml/filter-branch-portability-fix (2018-03-19) 1 commit
  (merged to 'next' on 2018-03-20 at c7c17cfc8b)
 + filter-branch: use printf instead of echo -e

 Shell script portability fix.

 Will merge to 'master'.


* rj/warning-uninitialized-fix (2018-03-20) 2 commits
  (merged to 'next' on 2018-03-20 at 9ac9d02b0b)
 + read-cache: fix an -Wmaybe-uninitialized warning
 + -Wuninitialized: remove some 'init-self' workarounds

 Compilation fix.

 Will merge to 'master'.


* tz/complete-tag-delete-tagname (2018-03-19) 1 commit
  (merged to 'next' on 2018-03-20 at d63d45ff16)
 + completion: complete tags with git tag --delete/--verify

 Will merge to 'master'.


* tz/relnotes-1.7-on-perl (2018-03-16) 1 commit
  (merged to 'next' on 2018-03-20 at ed4b26e581)
 + RelNotes: add details on Perl module changes

 Will merge to 'master'.


* jk/attributes-path-doc (2018-03-20) 1 commit
  (merged to 'next' on 2018-03-20 at e965f0c68c)
 + doc/gitattributes: mention non-recursive behavior

 Doc update.

 Will merge to 'master'.


* pw/rebase-keep-empty-fixes (2018-03-20) 4 commits
 - SQUASH???
 - 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-20) 4 commits
 - 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").

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

* sb/blame-color (2018-02-13) 3 commits
 - builtin/blame: highlight recently changed lines
 - builtin/blame: add option to color metadata fields separately
 - builtin/blame: dim uninteresting metadata

 Expecting a reroll.
 cf. https://public-inbox.org/git/20171110011002.10179-1-sbeller@google.com/#t
 error messages are funny, can segfault, ...


* 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]

* dj/runtime-prefix (2018-03-19) 3 commits
 - exec_cmd: RUNTIME_PREFIX on some POSIX systems
 - Makefile: add Perl runtime prefix support
 - Makefile: generate Perl header from template file

 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.


* ti/fetch-everything-local-optim (2018-03-14) 1 commit
  (merged to 'next' on 2018-03-15 at 2be87aa7a7)
 + fetch-pack.c: use oidset to check existence of loose object

 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.

 Will cook in 'next'.


* ab/nuke-emacs-contrib (2018-03-13) 1 commit
  (merged to 'next' on 2018-03-15 at 13eb4e2d8b)
 + git{,-blame}.el: remove old bitrotting Emacs code

 The scripts in contrib/emacs/ have outlived their usefulness and
 have been removed.

 Will cook in 'next'.


* bc/object-id (2018-03-14) 36 commits
  (merged to 'next' on 2018-03-20 at f1800a33ff)
 + convert: convert to struct object_id
 + sha1_file: introduce a constant for max header length
 + Convert lookup_replace_object to struct object_id
 + sha1_file: convert read_sha1_file to struct object_id
 + sha1_file: convert read_object_with_reference to object_id
 + tree-walk: convert tree entry functions to object_id
 + streaming: convert istream internals to struct object_id
 + tree-walk: convert get_tree_entry_follow_symlinks internals to object_id
 + builtin/notes: convert static functions to object_id
 + builtin/fmt-merge-msg: convert remaining code to object_id
 + sha1_file: convert sha1_object_info* to object_id
 + Convert remaining callers of sha1_object_info_extended to object_id
 + packfile: convert unpack_entry to struct object_id
 + sha1_file: convert retry_bad_packed_offset to struct object_id
 + sha1_file: convert assert_sha1_type to object_id
 + builtin/mktree: convert to struct object_id
 + streaming: convert open_istream to use struct object_id
 + sha1_file: convert check_sha1_signature to struct object_id
 + sha1_file: convert read_loose_object to use struct object_id
 + builtin/index-pack: convert struct ref_delta_entry to object_id
 + archive: convert sha1_file_to_archive to struct object_id
 + archive: convert write_archive_entry_fn_t to object_id
 + builtin/mktag: convert to struct object_id
 + replace_object: convert struct replace_object to object_id
 + send-pack: convert remaining functions to struct object_id
 + http-walker: convert struct object_request to use struct object_id
 + Convert find_unique_abbrev* to struct object_id
 + wt-status: convert struct wt_status_state to object_id
 + strbuf: convert strbuf_add_unique_abbrev to use struct object_id
 + ref-filter: convert grab_objectname to struct object_id
 + tree: convert read_tree_recursive to struct object_id
 + resolve-undo: convert struct resolve_undo_info to object_id
 + cache-tree: convert remnants to struct object_id
 + cache-tree: convert write_*_as_tree to object_id
 + builtin/write-tree: convert to struct object_id
 + bulk-checkin: convert index_bulk_checkin to struct object_id

 Conversion from uchar[20] to struct object_id continues.

 Will cook in 'next'.


* jh/fsck-promisors (2018-03-13) 1 commit
  (merged to 'next' on 2018-03-15 at 0c283dbe5e)
 + sha1_file: restore OBJECT_INFO_QUICK functionality

 A hotfix to a topic that graduated recently.

 Will merge to 'master'.


* ma/shortlog-revparse (2018-03-15) 3 commits
  (merged to 'next' on 2018-03-15 at 2c2de7eb95)
 + shortlog: disallow left-over arguments outside repo
 + shortlog: add usage-string for stdin-reading
 + git-shortlog.txt: reorder usages

 "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.

 Will cook in 'next'.


* ab/pcre-v2 (2018-03-14) 3 commits
  (merged to 'next' on 2018-03-15 at e77b116903)
 + Makefile: make USE_LIBPCRE=YesPlease mean v2, not v1
 + configure: detect redundant --with-libpcre & --with-libpcre1
 + configure: fix a regression in PCRE v1 detection

 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.

 Will cook in 'next'.


* bb/git-gui-ssh-key-files (2018-03-02) 2 commits
 - 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/git-gui-bind-kp-enter (2018-03-02) 2 commits
 - 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.


* cb/git-gui-ttk-style (2018-03-05) 2 commits
 - 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.


* nd/pack-objects-pack-struct (2018-03-19) 11 commits
 . 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: 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

 "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.


* nd/repack-keep-pack (2018-03-07) 6 commits
 - SQUASH???
 - pack-objects: display progress in get_object_details()
 - pack-objects: show some progress when counting kept objects
 - gc --auto: exclude base pack if not enough mem to "repack -ad"
 - 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.

 Reroll exists, but it seems to be still slushy.
 cf. <20180316192745.19557-1-pclouds@gmail.com>


* nd/worktree-prune (2018-03-15) 3 commits
  (merged to 'next' on 2018-03-20 at e2d9677b20)
 + worktree prune: improve prune logic when worktree is moved
 + worktree: delete dead code
 + gc.txt: more details about what gc does

 The way "git worktree prune" worked internally has been simplified,
 by assuming how "git worktree move" moves an existing worktree to a
 different place.

 Will cook in 'next'.


* 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.


* 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>


* ps/contains-id-error-message (2018-03-19) 1 commit
 - Make options that expect object ids less chatty if id is invalid

 "git tag --contains no-such-commit" gave a full list of options
 after giving an error message.


* nd/remove-ignore-env-field (2018-03-05) 5 commits
  (merged to 'next' on 2018-03-15 at 802b6ea1cb)
 + repository: delete ignore_env member
 + sha1_file.c: move delayed getenv(altdb) back to setup_git_env()
 + repository.c: delete dead functions
 + repository.c: move env-related setup code back to environment.c
 + repository: initialize the_repository in main()
 (this branch is used by sb/object-store and sb/packfiles-in-repository.)

 Code clean-up for the "repository" abstraction.

 Will cook in 'next'.


* sb/object-store (2018-03-05) 27 commits
 - sha1_file: allow sha1_loose_object_info to handle arbitrary repositories
 - sha1_file: allow map_sha1_file to handle arbitrary repositories
 - sha1_file: allow map_sha1_file_1 to handle arbitrary repositories
 - sha1_file: allow open_sha1_file to handle arbitrary repositories
 - sha1_file: allow stat_sha1_file to handle arbitrary repositories
 - sha1_file: allow sha1_file_name to handle arbitrary repositories
 - sha1_file: add repository argument to sha1_loose_object_info
 - sha1_file: add repository argument to map_sha1_file
 - sha1_file: add repository argument to map_sha1_file_1
 - sha1_file: add repository argument to open_sha1_file
 - sha1_file: add repository argument to stat_sha1_file
 - sha1_file: add repository argument to sha1_file_name
 - sha1_file: allow prepare_alt_odb to handle arbitrary repositories
 - sha1_file: allow link_alt_odb_entries to handle arbitrary repositories
 - sha1_file: add repository argument to prepare_alt_odb
 - sha1_file: add repository argument to link_alt_odb_entries
 - sha1_file: add repository argument to read_info_alternates
 - sha1_file: add repository argument to link_alt_odb_entry
 - sha1_file: add raw_object_store argument to alt_odb_usable
 - pack: move approximate object count to object store
 - pack: move prepare_packed_git_run_once to object store
 - object-store: close all packs upon clearing the object store
 - object-store: move packed_git and packed_git_mru to object store
 - object-store: free alt_odb_list
 - object-store: move alt_odb_list and alt_odb_tail to object store
 - object-store: migrate alternates struct and functions from cache.h
 - repository: introduce raw object store field
 (this branch is used by sb/packfiles-in-repository; uses nd/remove-ignore-env-field.)

 Refactoring the internal global data structure to make it possible
 to open multiple repositories, work with and then close them.

 Rerolled by Duy on top of a separate preliminary clean-up topic.
 The resulting structure of the topics looked very sensible.

 Waiting for a follow-up discussion.


* sb/packfiles-in-repository (2018-03-05) 12 commits
 - packfile: keep prepare_packed_git() private
 - packfile: allow find_pack_entry to handle arbitrary repositories
 - packfile: add repository argument to find_pack_entry
 - packfile: allow reprepare_packed_git to handle arbitrary repositories
 - packfile: allow prepare_packed_git to handle arbitrary repositories
 - packfile: allow prepare_packed_git_one to handle arbitrary repositories
 - packfile: add repository argument to reprepare_packed_git
 - packfile: add repository argument to prepare_packed_git
 - packfile: add repository argument to prepare_packed_git_one
 - packfile: allow install_packed_git to handle arbitrary repositories
 - packfile: allow rearrange_packed_git to handle arbitrary repositories
 - packfile: allow prepare_packed_git_mru to handle arbitrary repositories
 (this branch uses nd/remove-ignore-env-field and sb/object-store.)

 Refactoring of the internal global data structure continues.

 Waiting for a follow-up discussion.


* ma/skip-writing-unchanged-index (2018-03-01) 1 commit
  (merged to 'next' on 2018-03-15 at cdbbc66464)
 + write_locked_index(): add flag to avoid writing unchanged index

 Internal API clean-up to allow write_locked_index() optionally skip
 writing the in-core index when it is not modified.

 Will merge to 'master'.


* ds/commit-graph (2018-03-14) 17 commits
 - SQUASH??? sparse fixes
 - commit-graph: implement "--additive" 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

 Precompute and store information necessary for ancestry traversal
 in a separate file to optimize graph walking.

 It seems that this topic is getting there.


* ma/config-page-only-in-list-mode (2018-02-21) 3 commits
  (merged to 'next' on 2018-03-15 at 652430af12)
 + config: change default of `pager.config` to "on"
 + config: respect `pager.config` in list/get-mode only
 + t7006: add tests for how git config paginates

 In a way similar to how "git tag" learned to honor the pager
 setting only in the list mode, "git config" learned to ignore the
 pager setting when it is used for setting values (i.e. when the
 purpose of the operation is not to "show").

 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-03-19) 4 commits
 - worktree: teach "add" to check out existing branches
 - worktree: factor out dwim_branch function
 - worktree: be clearer when "add" dwim-ery kicks in
 - worktree: improve message when creating a new worktree

 "git worktree add" learned to check out an existing branch.


* js/rebase-recreate-merge (2018-02-23) 12 commits
  (merged to 'next' on 2018-03-15 at 3d1671756f)
 + rebase -i: introduce --recreate-merges=[no-]rebase-cousins
 + pull: accept --rebase=recreate to recreate the branch topology
 + sequencer: handle post-rewrite for merge commands
 + sequencer: make refs generated by the `label` command worktree-local
 + rebase: introduce the --recreate-merges option
 + rebase-helper --make-script: introduce a flag to recreate merges
 + sequencer: fast-forward merge commits, if possible
 + sequencer: introduce the `merge` command
 + sequencer: introduce new commands to reset the revision
 + git-rebase--interactive: clarify arguments
 + sequencer: make rearrange_squash() a bit more obvious
 + sequencer: avoid using errno clobbered by rollback_lock_file()

 "git rebase" learned "--recreate-merges" to transplant the whole
 topology of commit graph elsewhere.

 This serise has been reverted out of 'next', expecting that it will
 be replaced by a reroll on top of a couple of topics by Phillip.


* bw/protocol-v2 (2018-03-15) 35 commits
 - 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

 The beginning of the next-gen transfer protocol.

 Is everybody happy with this version?  One design decision with
 larger consequence "to or not to build in?" has been settled in
 favor of status quo, IIRC.


* ls/checkout-encoding (2018-03-16) 10 commits
 - 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).


* en/rename-directory-detection (2018-02-27) 29 commits
  (merged to 'next' on 2018-03-06 at d42470f86e)
 + merge-recursive: ensure we write updates for directory-renamed file
 + 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

 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.

 Will cook in 'next'.

^ permalink raw reply	[relevance 4%]

* What's cooking in git.git (Mar 2018, #03; Wed, 14)
@ 2018-03-15  1:34  4% Junio C Hamano
  0 siblings, 0 replies; 19+ results
From: Junio C Hamano @ 2018-03-15  1:34 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"]

* ab/gc-auto-in-commit (2018-03-01) 1 commit
  (merged to 'next' on 2018-03-02 at 96a5a4d629)
 + commit: run git gc --auto just before the post-commit hook

 "git commit" used to run "gc --auto" near the end, which was lost
 when the command was reimplemented in C by mistake.


* ab/pre-auto-gc-battery (2018-02-28) 1 commit
  (merged to 'next' on 2018-03-06 at ca9cb273cb)
 + hooks/pre-auto-gc-battery: allow gc to run on non-laptops

 A sample auto-gc hook (in contrib/) to skip auto-gc while on
 battery has been updated to almost always allow running auto-gc
 unless on_ac_power command is absolutely sure that we are on
 battery power (earlier, it skipped unless the command is sure that
 we are on ac power).


* ag/userdiff-go-funcname (2018-03-01) 1 commit
  (merged to 'next' on 2018-03-02 at ea404d1be9)
 + userdiff: add built-in pattern for golang

 "git diff" and friends learned funcname patterns for Go language
 source files.


* bp/untracked-cache-noflush (2018-02-28) 2 commits
  (merged to 'next' on 2018-03-02 at 709887971b)
 + untracked cache: use git_env_bool() not getenv() for customization
 + dir.c: don't flag the index as dirty for changes to the untracked cache

 Writing out the index file when the only thing that changed in it
 is the untracked cache information is often wasteful, and this has
 been optimized out.


* ds/find-unique-abbrev-optim (2018-02-27) 1 commit
  (merged to 'next' on 2018-03-02 at 0b6d4f9335)
 + sha1_name: fix uninitialized memory errors

 While finding unique object name abbreviation, the code may
 accidentally have read beyond the end of the array of object names
 in a pack.


* ds/mark-parents-uninteresting-optim (2018-02-27) 1 commit
  (merged to 'next' on 2018-03-02 at 5a42c79806)
 + revision.c: reduce object database queries

 Micro optimization in revision traversal code.


* jc/test-must-be-empty (2018-02-27) 1 commit
  (merged to 'next' on 2018-03-02 at ec129f1b97)
 + test_must_be_empty: make sure the file exists, not just empty

 Test framework tweak to catch developer thinko.


* jh/status-no-ahead-behind (2018-01-24) 4 commits
  (merged to 'next' on 2018-03-02 at 68bde8d571)
 + status: support --no-ahead-behind in long format
 + status: update short status to respect --no-ahead-behind
 + status: add --[no-]ahead-behind to status and commit for V2 format.
 + stat_tracking_info: return +1 when branches not equal

 "git status" can spend a lot of cycles to compute the relation
 between the current branch and its upstream, which can now be
 disabled with "--no-ahead-behind" option.


* jk/add-i-diff-filter (2018-03-05) 2 commits
  (merged to 'next' on 2018-03-08 at 6ef737add3)
 + add--interactive: detect bogus diffFilter output
 + t3701: add a test for interactive.diffFilter

 The "interactive.diffFilter" used by "git add -i" must retain
 one-to-one correspondence between its input and output, but it was
 not enforced and caused end-user confusion.  We now at least make
 sure the filtered result has the same number of lines as its input
 to detect a broken filter.


* jk/smart-http-protocol-doc-fix (2018-03-05) 1 commit
  (merged to 'next' on 2018-03-08 at 599b1a7c42)
 + smart-http: document flush after "# service" line

 A doc update.


* ma/roll-back-lockfiles (2018-02-28) 5 commits
  (merged to 'next' on 2018-03-06 at be29bf891c)
 + sequencer: do not roll back lockfile unnecessarily
 + merge: always roll back lock in `checkout_fast_forward()`
 + merge-recursive: always roll back lock in `merge_recursive_generic()`
 + sequencer: always roll back lock in `do_recursive_merge()`
 + sequencer: make lockfiles non-static
 (this branch is used by ma/skip-writing-unchanged-index.)

 Some codepaths used to take a lockfile and did not roll it back;
 they are automatically rolled back at program exit, so there is no
 real "breakage", but it still is a good practice to roll back when
 you are done with a lockfile.


* mk/doc-pretty-fill (2018-02-27) 1 commit
  (merged to 'next' on 2018-03-02 at 623461b127)
 + docs/pretty-formats: fix typo '% <(<N>)' -> '%<|(<N>)'

 Docfix.


* nd/diff-stat-with-summary (2018-02-27) 2 commits
  (merged to 'next' on 2018-03-06 at d543f92f5e)
 + diff: add --compact-summary
 + diff.c: refactor pprint_rename() to use strbuf

 "git diff" and friends learned "--compact-summary" that shows the
 information usually given with the "--summary" option on the same
 line as the diffstat output of the "--stat" option (which saves
 vertical space and keeps info on a single path at the same place).


* nd/object-allocation-comments (2018-03-06) 2 commits
  (merged to 'next' on 2018-03-08 at 91d553a339)
 + object.h: realign object flag allocation comment
 + object.h: update flag allocation comment

 Code doc update.


* nd/parseopt-completion (2018-03-07) 45 commits
  (merged to 'next' on 2018-03-08 at 2461b7035d)
 + completion: more subcommands in _git_notes()
 + completion: complete --{reuse,reedit}-message= for all notes subcmds
 + completion: simplify _git_notes
 + completion: don't set PARSE_OPT_NOCOMPLETE on --rerere-autoupdate
  (merged to 'next' on 2018-03-02 at d72a6525fd)
 + completion: use __gitcomp_builtin in _git_worktree
 + completion: use __gitcomp_builtin in _git_tag
 + completion: use __gitcomp_builtin in _git_status
 + completion: use __gitcomp_builtin in _git_show_branch
 + completion: use __gitcomp_builtin in _git_rm
 + completion: use __gitcomp_builtin in _git_revert
 + completion: use __gitcomp_builtin in _git_reset
 + completion: use __gitcomp_builtin in _git_replace
 + remote: force completing --mirror= instead of --mirror
 + completion: use __gitcomp_builtin in _git_remote
 + completion: use __gitcomp_builtin in _git_push
 + completion: use __gitcomp_builtin in _git_pull
 + completion: use __gitcomp_builtin in _git_notes
 + completion: use __gitcomp_builtin in _git_name_rev
 + completion: use __gitcomp_builtin in _git_mv
 + completion: use __gitcomp_builtin in _git_merge_base
 + completion: use __gitcomp_builtin in _git_merge
 + completion: use __gitcomp_builtin in _git_ls_remote
 + completion: use __gitcomp_builtin in _git_ls_files
 + completion: use __gitcomp_builtin in _git_init
 + completion: use __gitcomp_builtin in _git_help
 + completion: use __gitcomp_builtin in _git_grep
 + completion: use __gitcomp_builtin in _git_gc
 + completion: use __gitcomp_builtin in _git_fsck
 + completion: use __gitcomp_builtin in _git_fetch
 + completion: use __gitcomp_builtin in _git_difftool
 + completion: use __gitcomp_builtin in _git_describe
 + completion: use __gitcomp_builtin in _git_config
 + completion: use __gitcomp_builtin in _git_commit
 + completion: use __gitcomp_builtin in _git_clone
 + completion: use __gitcomp_builtin in _git_clean
 + completion: use __gitcomp_builtin in _git_cherry_pick
 + completion: use __gitcomp_builtin in _git_checkout
 + completion: use __gitcomp_builtin in _git_branch
 + completion: use __gitcomp_builtin in _git_apply
 + completion: use __gitcomp_builtin in _git_am
 + completion: use __gitcomp_builtin in _git_add
 + git-completion.bash: introduce __gitcomp_builtin
 + parse-options: let OPT__FORCE take optional flags argument
 + parse-options: add OPT_xxx_F() variants
 + parse-options: support --git-completion-helper

 The parse-options API has been taught an option to help the
 completion script; the command line completion has been updated to
 take advantage of this mechanism.


* nd/worktree-move (2018-03-06) 8 commits
  (merged to 'next' on 2018-03-06 at a26271e7de)
 + t2028: fix minor error and issues in newly-added "worktree move" tests
  (merged to 'next' on 2018-03-02 at 5c514dfc92)
 + worktree remove: allow it when $GIT_WORK_TREE is already gone
 + 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.


* ot/ref-filter-cleanup (2018-02-21) 2 commits
  (merged to 'next' on 2018-03-02 at 3b4c39a4b5)
 + ref-filter: get rid of goto
 + ref-filter: get rid of duplicate code

 Code cleanup.


* pw/add-p-recount (2018-03-05) 9 commits
  (merged to 'next' on 2018-03-06 at 68952f9bb0)
 + add -p: don't rely on apply's '--recount' option
 + add -p: fix counting when splitting and coalescing
 + add -p: calculate offset delta for edited patches
 + add -p: adjust offsets of subsequent hunks when one is skipped
 + t3701: add failing test for pathological context lines
 + t3701: don't hard code sha1 hash values
 + t3701: use test_write_lines and write_script
 + t3701: indent here documents
 + add -i: add function to format hunk header
 (this branch is used by pw/add-p-select.)

 "git add -p" has been lazy in coalescing split patches before
 passing the result to underlying "git apply", leading to corner
 case bugs; the logic to prepare the patch to be applied after hunk
 selections has been tightened.


* rj/test-i18ngrep (2018-02-28) 2 commits
  (merged to 'next' on 2018-03-06 at 7ea1a2352c)
 + t5536: simplify checking of messages output to stderr
 + t4151: consolidate multiple calls to test_i18ngrep

 Test updates.


* rs/perf-repeat-thrice-by-default (2018-02-27) 1 commit
  (merged to 'next' on 2018-03-02 at 4898b3c450)
 + perf: use GIT_PERF_REPEAT_COUNT=3 by default even without config file

 Perf test regression fix.


* rv/grep-cleanup (2018-02-23) 2 commits
  (merged to 'next' on 2018-03-02 at 4aafca15f9)
 + grep: simplify grep_oid and grep_file
 + grep: move grep_source_init outside critical section

 Threaded "git grep" has been optimized to avoid allocation in code
 section that is covered under a mutex.


* sg/subtree-signed-commits (2018-02-23) 1 commit
  (merged to 'next' on 2018-03-02 at c5f6fd33e6)
 + subtree: fix add and pull for GPG-signed commits

 "git subtree" script (in contrib/) scripted around "git log", whose
 output got affected by end-user configuration like log.showsignature


* sg/test-x (2018-02-28) 11 commits
  (merged to 'next' on 2018-03-06 at ab0684b27c)
 + travis-ci: run tests with '-x' tracing
 + t/README: add a note about don't saving stderr of compound commands
 + t1510-repo-setup: mark as untraceable with '-x'
 + t9903-bash-prompt: don't check the stderr of __git_ps1()
 + t5570-git-daemon: don't check the stderr of a subshell
 + t5526: use $TRASH_DIRECTORY to specify the path of GIT_TRACE log file
 + t5500-fetch-pack: don't check the stderr of a subshell
 + t3030-merge-recursive: don't check the stderr of a subshell
 + t1507-rev-parse-upstream: don't check the stderr of a shell function
 + t: add means to disable '-x' tracing for individual test scripts
 + t: prevent '-x' tracing from interfering with test helpers' stderr

 Running test scripts under -x option of the shell is often not a
 useful way to debug them, because the error messages from the
 commands tests try to capture and inspect are contaminated by the
 tracing output by the shell.  An earlier work done to make it more
 pleasant to run tests under -x with recent versions of bash is
 extended to cover posix shells that do not support BASH_XTRACEFD.


* sg/travis-build-during-script-phase (2018-01-08) 1 commit
  (merged to 'next' on 2018-03-02 at 29e1585ae7)
 + travis-ci: build Git during the 'script' phase

 Build the executable in 'script' phase in Travis CI integration, to
 follow the established practice, rather than during 'before_script'
 phase.  This allows the CI categorize the failures better ('failed'
 is project's fault, 'errored' is build environment's).

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

* ab/man-sec-list (2018-03-08) 1 commit
  (merged to 'next' on 2018-03-09 at 9626b691e2)
 + git manpage: note git-security@googlegroups.com

 Doc update.

 Will merge to 'master'.


* sg/cvs-tests-with-x (2018-03-08) 2 commits
  (merged to 'next' on 2018-03-09 at 6ec749c7b7)
 + t9402-git-cvsserver-refs: don't check the stderr of a subshell
 + t9400-git-cvsserver-server: don't rely on the output of 'test_cmp'

 Allow running a couple of tests with "sh -x".

 Will merge to 'master'.


* tl/userdiff-csharp-async (2018-03-08) 1 commit
  (merged to 'next' on 2018-03-09 at 6dcf76e118)
 + userdiff.c: add C# async keyword in diff pattern

 Update funcname pattern used for C# to recognize "async" keyword.

 Will merge to 'master'.


* ti/fetch-everything-local-optim (2018-03-14) 1 commit
 - fetch-pack.c: use oidset to check existence of loose object

 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.

 Will merge to 'next'.


* ab/nuke-emacs-contrib (2018-03-13) 1 commit
 - git{,-blame}.el: remove old bitrotting Emacs code

 The scripts in contrib/emacs/ have outlived their usefulness and
 have been removed.

 Will merge to 'next'.


* bc/object-id (2018-03-14) 36 commits
 - convert: convert to struct object_id
 - sha1_file: introduce a constant for max header length
 - Convert lookup_replace_object to struct object_id
 - sha1_file: convert read_sha1_file to struct object_id
 - sha1_file: convert read_object_with_reference to object_id
 - tree-walk: convert tree entry functions to object_id
 - streaming: convert istream internals to struct object_id
 - tree-walk: convert get_tree_entry_follow_symlinks internals to object_id
 - builtin/notes: convert static functions to object_id
 - builtin/fmt-merge-msg: convert remaining code to object_id
 - sha1_file: convert sha1_object_info* to object_id
 - Convert remaining callers of sha1_object_info_extended to object_id
 - packfile: convert unpack_entry to struct object_id
 - sha1_file: convert retry_bad_packed_offset to struct object_id
 - sha1_file: convert assert_sha1_type to object_id
 - builtin/mktree: convert to struct object_id
 - streaming: convert open_istream to use struct object_id
 - sha1_file: convert check_sha1_signature to struct object_id
 - sha1_file: convert read_loose_object to use struct object_id
 - builtin/index-pack: convert struct ref_delta_entry to object_id
 - archive: convert sha1_file_to_archive to struct object_id
 - archive: convert write_archive_entry_fn_t to object_id
 - builtin/mktag: convert to struct object_id
 - replace_object: convert struct replace_object to object_id
 - send-pack: convert remaining functions to struct object_id
 - http-walker: convert struct object_request to use struct object_id
 - Convert find_unique_abbrev* to struct object_id
 - wt-status: convert struct wt_status_state to object_id
 - strbuf: convert strbuf_add_unique_abbrev to use struct object_id
 - ref-filter: convert grab_objectname to struct object_id
 - tree: convert read_tree_recursive to struct object_id
 - resolve-undo: convert struct resolve_undo_info to object_id
 - cache-tree: convert remnants to struct object_id
 - cache-tree: convert write_*_as_tree to object_id
 - builtin/write-tree: convert to struct object_id
 - bulk-checkin: convert index_bulk_checkin to struct object_id

 Conversion from uchar[20] to struct object_id continues.

 Will merge to 'next'.


* jh/fsck-promisors (2018-03-13) 1 commit
 - sha1_file: restore OBJECT_INFO_QUICK functionality

 A hotfix to a topic that graduated recently.

 Will merge to 'next'.


* ma/shortlog-revparse (2018-03-13) 3 commits
 - shortlog: do not accept revisions when run outside repo
 - shortlog: add usage-string for stdin-reading
 - git-shortlog.txt: reorder usages

 "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.

 Expecting a reroll.
 cf. <CAN0heSoDSf+3VmRowHmiTPDDzfdvUjQi+tjpPF6RW172ZE5BWw@mail.gmail.com>


* ab/pcre-v2 (2018-03-14) 3 commits
 - Makefile: make USE_LIBPCRE=YesPlease mean v2, not v1
 - configure: detect redundant --with-libpcre & --with-libpcre1
 - configure: fix a regression in PCRE v1 detection

 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.

 Will merge to 'next'.

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

* sb/blame-color (2018-02-13) 3 commits
 - builtin/blame: highlight recently changed lines
 - builtin/blame: add option to color metadata fields separately
 - builtin/blame: dim uninteresting metadata

 Expecting a reroll.
 cf. https://public-inbox.org/git/20171110011002.10179-1-sbeller@google.com/#t
 error messages are funny, can segfault, ...


* 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>


* dj/runtime-prefix (2017-12-05) 4 commits
 . exec_cmd: RUNTIME_PREFIX on some POSIX systems
 . Makefile: add Perl runtime prefix support
 . Makefile: add support for "perllibdir"
 . Makefile: generate Perl header from template file

 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.

 Perhaps it is about time to reboot the effort?


* 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]

* bb/git-gui-ssh-key-files (2018-03-02) 2 commits
 - 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/git-gui-bind-kp-enter (2018-03-02) 2 commits
 - 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.


* cb/git-gui-ttk-style (2018-03-05) 2 commits
 - 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.


* nd/pack-objects-pack-struct (2018-03-05) 9 commits
 - pack-objects: reorder 'hash' to pack 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: note about in_pack_header_size
 - 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: document holes in struct object_entry.h

 "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'.


* nd/repack-keep-pack (2018-03-07) 6 commits
 - SQUASH???
 - pack-objects: display progress in get_object_details()
 - pack-objects: show some progress when counting kept objects
 - gc --auto: exclude base pack if not enough mem to "repack -ad"
 - 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.

 Expecting a reroll.
 cf. <CACsJy8BW_EtxQvgL=YrCXCQY7cEWCQxgfkeH=Gd=X=uVYhPJcw@mail.gmail.com>
 Except for final finishing touches, this looked more-or-less ready
 for 'next'.


* nd/worktree-prune (2018-03-06) 3 commits
 - worktree prune: improve prune logic when worktree is moved
 - worktree: delete dead code
 - gc.txt: more details about what gc does

 The way "git worktree prune" worked internally has been simplified,
 by assuming how "git worktree move" moves an existing worktree to a
 different place.

 Will merge to 'next'.


* pw/add-p-select (2018-03-06) 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.
 cf. <6476d776-dbf7-09cf-1c65-e413798b9987@talktalk.net>


* 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>


* ps/contains-id-error-message (2018-03-06) 1 commit
 - parse-options: squelch usage help on certain errors

 "git tag --contains no-such-commit" gave a full list of options
 after giving an error message.

 Expecting a reroll.
 cf. <CAN0heSrnERYggyJ8bL1nAV=X2JQYS8aOkc6nWZhnZu3oqhzAfA@mail.gmail.com>
 Rebooted and fixed the root cause of the issue at a lower level.


* nd/remove-ignore-env-field (2018-03-05) 5 commits
 - repository: delete ignore_env member
 - sha1_file.c: move delayed getenv(altdb) back to setup_git_env()
 - repository.c: delete dead functions
 - repository.c: move env-related setup code back to environment.c
 - repository: initialize the_repository in main()
 (this branch is used by sb/object-store and sb/packfiles-in-repository.)

 Code clean-up for the "repository" abstraction.

 Will merge to 'next'.


* sb/object-store (2018-03-05) 27 commits
 - sha1_file: allow sha1_loose_object_info to handle arbitrary repositories
 - sha1_file: allow map_sha1_file to handle arbitrary repositories
 - sha1_file: allow map_sha1_file_1 to handle arbitrary repositories
 - sha1_file: allow open_sha1_file to handle arbitrary repositories
 - sha1_file: allow stat_sha1_file to handle arbitrary repositories
 - sha1_file: allow sha1_file_name to handle arbitrary repositories
 - sha1_file: add repository argument to sha1_loose_object_info
 - sha1_file: add repository argument to map_sha1_file
 - sha1_file: add repository argument to map_sha1_file_1
 - sha1_file: add repository argument to open_sha1_file
 - sha1_file: add repository argument to stat_sha1_file
 - sha1_file: add repository argument to sha1_file_name
 - sha1_file: allow prepare_alt_odb to handle arbitrary repositories
 - sha1_file: allow link_alt_odb_entries to handle arbitrary repositories
 - sha1_file: add repository argument to prepare_alt_odb
 - sha1_file: add repository argument to link_alt_odb_entries
 - sha1_file: add repository argument to read_info_alternates
 - sha1_file: add repository argument to link_alt_odb_entry
 - sha1_file: add raw_object_store argument to alt_odb_usable
 - pack: move approximate object count to object store
 - pack: move prepare_packed_git_run_once to object store
 - object-store: close all packs upon clearing the object store
 - object-store: move packed_git and packed_git_mru to object store
 - object-store: free alt_odb_list
 - object-store: move alt_odb_list and alt_odb_tail to object store
 - object-store: migrate alternates struct and functions from cache.h
 - repository: introduce raw object store field
 (this branch is used by sb/packfiles-in-repository; uses nd/remove-ignore-env-field.)

 Refactoring the internal global data structure to make it possible
 to open multiple repositories, work with and then close them.

 Rerolled by Duy on top of a separate preliminary clean-up topic.
 The resulting structure of the topics looked very sensible.

 Waiting for a follow-up discussion.


* sb/packfiles-in-repository (2018-03-05) 12 commits
 - packfile: keep prepare_packed_git() private
 - packfile: allow find_pack_entry to handle arbitrary repositories
 - packfile: add repository argument to find_pack_entry
 - packfile: allow reprepare_packed_git to handle arbitrary repositories
 - packfile: allow prepare_packed_git to handle arbitrary repositories
 - packfile: allow prepare_packed_git_one to handle arbitrary repositories
 - packfile: add repository argument to reprepare_packed_git
 - packfile: add repository argument to prepare_packed_git
 - packfile: add repository argument to prepare_packed_git_one
 - packfile: allow install_packed_git to handle arbitrary repositories
 - packfile: allow rearrange_packed_git to handle arbitrary repositories
 - packfile: allow prepare_packed_git_mru to handle arbitrary repositories
 (this branch uses nd/remove-ignore-env-field and sb/object-store.)

 Refactoring of the internal global data structure continues.

 Waiting for a follow-up discussion.


* ma/skip-writing-unchanged-index (2018-03-01) 1 commit
 - write_locked_index(): add flag to avoid writing unchanged index

 Internal API clean-up to allow write_locked_index() optionally skip
 writing the in-core index when it is not modified.

 Will merge to 'next'.


* ab/perl-fixes (2018-03-05) 13 commits
  (merged to 'next' on 2018-03-09 at 262d84c1ba)
 + perl Git::LoadCPAN: emit better errors under NO_PERL_CPAN_FALLBACKS
 + Makefile: add NO_PERL_CPAN_FALLBACKS knob
 + perl: move the perl/Git/FromCPAN tree to perl/FromCPAN
 + perl: generalize the Git::LoadCPAN facility
 + perl: move CPAN loader wrappers to another namespace
 + perl: update our copy of Mail::Address
 + perl: update our ancient copy of Error.pm
 + git-send-email: unconditionally use Net::{SMTP,Domain}
 + Git.pm: hard-depend on the File::{Temp,Spec} modules
 + gitweb: hard-depend on the Digest::MD5 5.8 module
 + Git.pm: add the "use warnings" pragma
 + Git.pm: remove redundant "use strict" from sub-package
 + perl: *.pm files should not have the executable bit

 Clean-up to various pieces of Perl code we have.

 Will merge to 'master'.


* ds/commit-graph (2018-03-14) 17 commits
 - SQUASH??? sparse fixes
 - commit-graph: implement "--additive" 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

 Precompute and store information necessary for ancestry traversal
 in a separate file to optimize graph walking.

 It seems that this topic is getting there.


* ma/config-page-only-in-list-mode (2018-02-21) 3 commits
 - config: change default of `pager.config` to "on"
 - config: respect `pager.config` in list/get-mode only
 - t7006: add tests for how git config paginates

 In a way similar to how "git tag" learned to honor the pager
 setting only in the list mode, "git config" learned to ignore the
 pager setting when it is used for setting values (i.e. when the
 purpose of the operation is not to "show").

 Will merge to 'next'.


* 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-02-05) 3 commits
 - worktree: teach "add" to check out existing branches
 - worktree: be clearer when "add" dwim-ery kicks in
 - worktree: improve message when creating a new worktree

 "git worktree add" learned to check out an existing branch.

 Expecting a reroll.
 cf. <CAPig+cRLohiqR_Drh7P0q3XbvC22WLjNwH0YLZo3dqFzZZuAPw@mail.gmail.com>
 cf. <CACsJy8BEKYqW+Ne_WY2RBaSbb9OKcjREtrawStj=eJsVsia_Jw@mail.gmail.com>
 The general idea is good, just end-user facing messages are found
 suboptimal.


* np/send-email-header-parsing (2017-12-15) 1 commit
  (merged to 'next' on 2018-03-09 at 91ef7216f7)
 + send-email: extract email-parsing code into a subroutine
 (this branch is used by cl/send-email-reply-to.)

 Code refactoring.

 Will merge to 'master'.


* cl/send-email-reply-to (2018-03-06) 2 commits
  (merged to 'next' on 2018-03-09 at 3d3c3ab441)
 + send-email: support separate Reply-To address
 + send-email: rename variable for clarity
 (this branch uses np/send-email-header-parsing.)

 "git send-email" learned "--reply-to=<address>" option.

 Will merge to 'master'.


* js/rebase-recreate-merge (2018-02-23) 12 commits
 - rebase -i: introduce --recreate-merges=[no-]rebase-cousins
 - pull: accept --rebase=recreate to recreate the branch topology
 - sequencer: handle post-rewrite for merge commands
 - sequencer: make refs generated by the `label` command worktree-local
 - rebase: introduce the --recreate-merges option
 - rebase-helper --make-script: introduce a flag to recreate merges
 - sequencer: fast-forward merge commits, if possible
 - sequencer: introduce the `merge` command
 - sequencer: introduce new commands to reset the revision
 - git-rebase--interactive: clarify arguments
 - sequencer: make rearrange_squash() a bit more obvious
 - sequencer: avoid using errno clobbered by rollback_lock_file()

 "git rebase" learned "--recreate-merges" to transplant the whole
 topology of commit graph elsewhere.

 Will merge to 'next'.


* bw/protocol-v2 (2018-03-14) 35 commits
 - 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

 The beginning of the next-gen transfer protocol.


* ls/checkout-encoding (2018-03-09) 10 commits
 - convert: add round trip check based on 'core.checkRoundtripEncoding'
 - convert: add tracing for 'working-tree-encoding' attribute
 - convert: advise canonical UTF encoding names
 - 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
 - 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).

 Expecting a reroll.
 cf. <66370A41-A048-44E7-9BF8-4631C50AAE63@gmail.com>
 Modulo minor design decision corrections, the series is almost there.


* en/rename-directory-detection (2018-02-27) 29 commits
  (merged to 'next' on 2018-03-06 at d42470f86e)
 + merge-recursive: ensure we write updates for directory-renamed file
 + 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

 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.

 Will merge to 'master'.

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

* cc/require-tcl-tk-for-build (2017-11-29) 2 commits
 - travis-ci: avoid new tcl/tk build requirement
 - Makefile: check that tcl/tk is installed

 A first-time builder of Git may have installed neither tclsh nor
 msgfmt, in which case git-gui and gitk part will fail and break the
 build.  As a workaround, refuse to run a build when tclsh is not
 installed and NO_TCLTK is not set.

 Stalled for too long without any response; will discard.
 I still feel that requring tclsh to be installed, with or without
 "escape hatch" for experts, may be too heavy-handed.


* mg/merge-base-fork-point (2017-09-17) 3 commits
 - merge-base: find fork-point outside partial reflog
 - merge-base: return fork-point outside reflog
 - t6010: test actual test output

 "merge-base --fork-point $branch $commit" is used to guess on which
 commit among the commits that were once at the tip of the $branch the
 $commit was built on top of, and it learns these historical tips from
 the reflog of the $branch.  When the true fork-point is lost due to
 pruning of old reflog entries, the command does not give any output,
 because it has no way to guess correctly and does not want to mislead
 the user with a wrong guess.

 The command has been updated to give the best but not known to be
 correct guess, based on a hope that a merge-base between $commit and a
 virtual merge across all the reflog entries that still are available
 for $branch may still be a closer to the true fork-point than the
 merge-base between $commit and the current tip of the $branch.

 This may have to be offered by an additional option, to allow the
 users that are prepared to see a potentially incorrect guess to opt
 into the feature, without affecting the current callers that may not
 be prepared to accept a guess that is not known to be correct.

 Stalled for too long without any response; will discard.


* mg/status-in-progress-info (2017-05-10) 2 commits
 - status --short --inprogress: spell it as --in-progress
 - status: show in-progress info for short status

 "git status" learns an option to report various operations
 (e.g. "merging") that the user is in the middle of.

 Stalled for too long without any response; will discard.
 cf. <xmqqmvakcdqw.fsf@gitster.mtv.corp.google.com>


* nd/tilde-expand-opt-file-value (2018-02-14) 2 commits
 - init-db: change --template type to OPTION_FILENAME
 - parse-options: expand $HOME on filename options

 "git cmd --opt=~u/path/to/file" did not tilde-expand "~u" part to
 the path to the home directory of user 'u'

 This may make the resulting whole more confusing, though.
 cf. <87wozffavp.fsf@evledraar.gmail.com>


* dp/git-el-ls-files-excludes (2018-03-05) 1 commit
 . git.el: handle default excludesfile properly

 The "git.el" script (in contrib/) has been taught to use
 "--exclude-standard" option when driving "ls-files", instead of
 locating the exclude files on its own.  With this change, it now
 honors $XDG_CONFIG_HOME when it is set.

 The author of "git.el" recommends that users consider switching to
 "magit", though.

 Discarded, as contrib/emacs/ hierarchy is being emptied by the
 ab/nuke-emacs-contrib topic.

^ permalink raw reply	[relevance 4%]

* What's cooking in git.git (Mar 2018, #02; Tue, 6)
@ 2018-03-06 23:34  4% Junio C Hamano
  0 siblings, 0 replies; 19+ results
From: Junio C Hamano @ 2018-03-06 23:34 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.

I haven't seen enough reviews (nor I had chance to sufficiently
review them myself) to comfortably decide what to do with them on a
handful of new topics that appeared in the past week or two, so the
ones in the new topics section may not have any description yet in
this issue.

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/fetch-prune (2018-02-09) 17 commits
  (merged to 'next' on 2018-02-27 at eafb648dd9)
 + fetch: make the --prune-tags work with <url>
 + fetch: add a --prune-tags option and fetch.pruneTags config
 + fetch tests: add scaffolding for the new fetch.pruneTags
 + git-fetch & config doc: link to the new PRUNING section
 + git remote doc: correct dangerous lies about what prune does
 + git fetch doc: add a new section to explain the ins & outs of pruning
 + fetch tests: fetch <url> <spec> as well as fetch [<remote>]
 + fetch tests: expand case/esac for later change
 + fetch tests: double quote a variable for interpolation
 + fetch tests: test --prune and refspec interaction
 + fetch tests: add a tag to be deleted to the pruning tests
 + fetch tests: re-arrange arguments for future readability
 + fetch tests: refactor in preparation for testing tag pruning
 + remote: add a macro for "refs/tags/*:refs/tags/*"
 + fetch: stop accessing "remote" variable indirectly
 + fetch: trivially refactor assignment to ref_nr
 + fetch: don't redundantly NULL something calloc() gave us

 "git fetch --prune-tags" may be used as a handy short-hand for
 getting rid of stale tags that are locally held.


* ab/simplify-perl-makefile (2018-02-15) 1 commit
  (merged to 'next' on 2018-02-27 at b0d68a2013)
 + Makefile: generate Git(3pm) as dependency of the 'doc' and 'man' targets

 Hotfix for a topic already in 'master'.


* bw/c-plus-plus (2018-02-22) 37 commits
  (merged to 'next' on 2018-02-27 at daf85c03de)
 + replace: rename 'new' variables
 + trailer: rename 'template' variables
 + tempfile: rename 'template' variables
 + wrapper: rename 'template' variables
 + environment: rename 'namespace' variables
 + diff: rename 'template' variables
 + environment: rename 'template' variables
 + init-db: rename 'template' variables
 + unpack-trees: rename 'new' variables
 + trailer: rename 'new' variables
 + submodule: rename 'new' variables
 + split-index: rename 'new' variables
 + remote: rename 'new' variables
 + ref-filter: rename 'new' variables
 + read-cache: rename 'new' variables
 + line-log: rename 'new' variables
 + imap-send: rename 'new' variables
 + http: rename 'new' variables
 + entry: rename 'new' variables
 + diffcore-delta: rename 'new' variables
 + diff: rename 'new' variables
 + diff-lib: rename 'new' variable
 + commit: rename 'new' variables
 + combine-diff: rename 'new' variables
 + remote: rename 'new' variables
 + reflog: rename 'new' variables
 + pack-redundant: rename 'new' variables
 + help: rename 'new' variables
 + checkout: rename 'new' variables
 + apply: rename 'new' variables
 + apply: rename 'try' variables
 + diff: rename 'this' variables
 + rev-parse: rename 'this' variable
 + pack-objects: rename 'this' variables
 + blame: rename 'this' variables
 + object: rename function 'typename' to 'type_name'
 + object_info: change member name from 'typename' to 'type_name'

 We now avoid using identifiers that clash with C++ keywords.  Even though
 it is not a goal to compile Git with C++ compilers, changes like
 this help use of code analysis tools that targets C++ on our
 codebase.


* bw/doc-submodule-recurse-config-with-clone (2018-02-21) 1 commit
  (merged to 'next' on 2018-02-27 at 5b12841508)
 + submodule: indicate that 'submodule.recurse' doesn't apply to clone

 Doc update.


* bw/perl-timegm-timelocal-fix (2018-02-23) 1 commit
  (merged to 'next' on 2018-02-27 at 565a3141ce)
 + perl: call timegm and timelocal with 4-digit year

 Y2k20 fix ;-) for our perl scripts.


* jc/allow-ff-merging-kept-tags (2018-02-16) 1 commit
  (merged to 'next' on 2018-02-27 at 8b03610d2b)
 + merge: allow fast-forward when merging a tracked tag

 Since Git 1.7.9, "git merge" defaulted to --no-ff (i.e. even when
 the side branch being merged is a descendant of the current commit,
 create a merge commit instead of fast-forwarding) when merging a
 tag object.  This was appropriate default for integrators who pull
 signed tags from their downstream contributors, but caused an
 unnecessary merges when used by downstream contributors who
 habitually "catch up" their topic branches with tagged releases
 from the upstream.  Update "git merge" to default to --no-ff only
 when merging a tag object that does *not* sit at its usual place in
 refs/tags/ hierarchy, and allow fast-forwarding otherwise, to
 mitigate the problem.


* jk/cached-commit-buffer (2018-02-22) 2 commits
  (merged to 'next' on 2018-02-27 at af791d9a1e)
 + revision: drop --show-all option
 + commit: drop uses of get_cached_commit_buffer()

 Code clean-up.


* jk/strbuf-read-file-close-error (2018-02-23) 1 commit
  (merged to 'next' on 2018-02-27 at c5dfe33335)
 + strbuf_read_file(): preserve errno across close() call

 Code clean-up.


* jk/test-helper-v-output-fix (2018-02-22) 1 commit
  (merged to 'next' on 2018-02-27 at c9109977e8)
 + t: send verbose test-helper output to fd 4

 Test framework update.


* ms/non-ascii-ticks (2018-02-22) 1 commit
  (merged to 'next' on 2018-02-27 at 41159fc4f0)
 + Documentation/gitsubmodules.txt: avoid non-ASCII apostrophes

 Doc markup fix.


* nd/rebase-show-current-patch (2018-02-12) 3 commits
  (merged to 'next' on 2018-02-27 at 5a4e23a77c)
 + rebase: introduce and use pseudo-ref REBASE_HEAD
 + rebase: add --show-current-patch
 + am: add --show-current-patch

 The new "--show-current-patch" option gives an end-user facing way
 to get the diff being applied when "git rebase" (and "git am")
 stops with a conflict.


* nm/tag-edit (2018-02-07) 1 commit
  (merged to 'next' on 2018-02-27 at 3bc8345213)
 + tag: add --edit option

 "git tag" learned an explicit "--edit" option that allows the
 message given via "-m" and "-F" to be further edited.


* pw/add-p-single (2018-02-13) 3 commits
  (merged to 'next' on 2018-02-27 at 0e2bd585e3)
 + add -p: improve error messages
 + add -p: only bind search key if there's more than one hunk
 + add -p: only display help for active keys

 "git add -p" used to offer "/" (look for a matching hunk) as a
 choice, even there was only one hunk, which has been corrected.
 Also the single-key help is now given only for keys that are
 enabled (e.g. help for '/' won't be shown when there is only one
 hunk).


* rs/strbuf-read-file-or-whine (2018-02-22) 1 commit
  (merged to 'next' on 2018-02-27 at 56017cb5e2)
 + sequencer: factor out strbuf_read_file_or_whine()

 Code clean-up.


* sb/color-h-cleanup (2018-02-13) 1 commit
  (merged to 'next' on 2018-02-27 at 617345de77)
 + color.h: document and modernize header
 (this branch is used by sb/blame-color.)

 Devdoc update.


* sg/t6300-modernize (2018-02-13) 1 commit
  (merged to 'next' on 2018-02-27 at b6f13b6915)
 + t6300-for-each-ref: fix "more than one quoting style" tests

 Test update.


* sm/mv-dry-run-update (2018-02-07) 2 commits
  (merged to 'next' on 2018-02-27 at 17eef62ddf)
 + mv: remove unneeded 'if (!show_only)'
 + t7001: add test case for --dry-run

 Code clean-up.


* xz/send-email-batch-size (2018-02-12) 1 commit
  (merged to 'next' on 2018-02-27 at da0247d532)
 + send-email: error out when relogin delay is missing

 "git send-email" learned to complain when the batch-size option is
 not defined when the relogin-delay option is, since these two are
 mutually required.

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

* bb/git-gui-ssh-key-files (2018-03-02) 2 commits
 - 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


* bp/git-gui-bind-kp-enter (2018-03-02) 2 commits
 - 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


* cb/git-gui-ttk-style (2018-03-05) 2 commits
 - Merge branch 'cb/ttk-style' of git-gui into cb/git-gui-ttk-style
 - git-gui: workaround ttk:style theme use


* dp/git-el-ls-files-excludes (2018-03-05) 1 commit
 - git.el: handle default excludesfile properly


* jk/add-i-diff-filter (2018-03-05) 2 commits
 - add--interactive: detect bogus diffFilter output
 - t3701: add a test for interactive.diffFilter


* jk/smart-http-protocol-doc-fix (2018-03-05) 1 commit
 - smart-http: document flush after "# service" line


* nd/object-allocation-comments (2018-03-06) 2 commits
 - object.h: realign object flag allocation comment
 - object.h: update flag allocation comment


* nd/pack-objects-pack-struct (2018-03-05) 9 commits
 - pack-objects: reorder 'hash' to pack 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: note about in_pack_header_size
 - 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: document holes in struct object_entry.h


* nd/repack-keep-pack (2018-03-06) 5 commits
 - pack-objects: display progress in get_object_details()
 - pack-objects: show some progress when counting kept objects
 - gc --auto: exclude base pack if not enough mem to "repack -ad"
 - repack: add --keep-pack option
 - t7700: have closing quote of a test at the beginning of line


* nd/worktree-prune (2018-03-06) 3 commits
 - worktree prune: improve prune logic when worktree is moved
 - worktree: delete dead code
 - gc.txt: more details about what gc does


* pw/add-p-select (2018-03-06) 3 commits
 - add -p: optimize line selection for short hunks
 - add -p: allow line selection to be inverted
 - add -p: select individual hunk lines
 (this branch uses pw/add-p-recount.)

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

* sb/blame-color (2018-02-13) 3 commits
 - builtin/blame: highlight recently changed lines
 - builtin/blame: add option to color metadata fields separately
 - builtin/blame: dim uninteresting metadata

 Expecting a reroll.
 cf. https://public-inbox.org/git/20171110011002.10179-1-sbeller@google.com/#t
 error messages are funny, can segfault, ...


* 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>


* dj/runtime-prefix (2017-12-05) 4 commits
 . exec_cmd: RUNTIME_PREFIX on some POSIX systems
 . Makefile: add Perl runtime prefix support
 . Makefile: add support for "perllibdir"
 . Makefile: generate Perl header from template file

 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.

 Perhaps it is about time to reboot the effort?


* 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>


* cc/require-tcl-tk-for-build (2017-11-29) 2 commits
 - travis-ci: avoid new tcl/tk build requirement
 - Makefile: check that tcl/tk is installed

 A first-time builder of Git may have installed neither tclsh nor
 msgfmt, in which case git-gui and gitk part will fail and break the
 build.  As a workaround, refuse to run a build when tclsh is not
 installed and NO_TCLTK is not set.

 Stalled for too long without any response; will discard.
 I still feel that requring tclsh to be installed, with or without
 "escape hatch" for experts, may be too heavy-handed.


* mg/merge-base-fork-point (2017-09-17) 3 commits
 - merge-base: find fork-point outside partial reflog
 - merge-base: return fork-point outside reflog
 - t6010: test actual test output

 "merge-base --fork-point $branch $commit" is used to guess on which
 commit among the commits that were once at the tip of the $branch the
 $commit was built on top of, and it learns these historical tips from
 the reflog of the $branch.  When the true fork-point is lost due to
 pruning of old reflog entries, the command does not give any output,
 because it has no way to guess correctly and does not want to mislead
 the user with a wrong guess.

 The command has been updated to give the best but not known to be
 correct guess, based on a hope that a merge-base between $commit and a
 virtual merge across all the reflog entries that still are available
 for $branch may still be a closer to the true fork-point than the
 merge-base between $commit and the current tip of the $branch.

 This may have to be offered by an additional option, to allow the
 users that are prepared to see a potentially incorrect guess to opt
 into the feature, without affecting the current callers that may not
 be prepared to accept a guess that is not known to be correct.

 Stalled for too long without any response; will discard.


* 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).


* mg/status-in-progress-info (2017-05-10) 2 commits
 - status --short --inprogress: spell it as --in-progress
 - status: show in-progress info for short status

 "git status" learns an option to report various operations
 (e.g. "merging") that the user is in the middle of.

 Stalled for too long without any response; will discard.
 cf. <xmqqmvakcdqw.fsf@gitster.mtv.corp.google.com>

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

* sg/travis-build-during-script-phase (2018-01-08) 1 commit
  (merged to 'next' on 2018-03-02 at 29e1585ae7)
 + travis-ci: build Git during the 'script' phase

 Build the executable in 'script' phase in Travis CI integration, to
 follow the established practice, rather than during 'before_script'
 phase.  This allows the CI categorize the failures better ('failed'
 is project's fault, 'errored' is build environment's).

 Will merge to 'master'.


* np/send-email-header-parsing (2017-12-15) 1 commit
 - send-email: extract email-parsing code into a subroutine
 (this branch is used by cl/send-email-reply-to.)

 Code refactoring.


* 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>


* ps/contains-id-error-message (2018-03-06) 1 commit
 - parse-options: squelch usage help on certain errors

 "git tag --contains no-such-commit" gave a full list of options
 after giving an error message.

 Rebooted and fixed the root cause of the issue at a lower level.


* rv/grep-cleanup (2018-02-23) 2 commits
  (merged to 'next' on 2018-03-02 at 4aafca15f9)
 + grep: simplify grep_oid and grep_file
 + grep: move grep_source_init outside critical section

 Threaded "git grep" has been optimized to avoid allocation in code
 section that is covered under a mutex.

 Will merge to 'master'.


* sg/subtree-signed-commits (2018-02-23) 1 commit
  (merged to 'next' on 2018-03-02 at c5f6fd33e6)
 + subtree: fix add and pull for GPG-signed commits

 "git subtree" script (in contrib/) scripted around "git log", whose
 output got affected by end-user configuration like log.showsignature

 Will merge to 'master'.


* ds/find-unique-abbrev-optim (2018-02-27) 1 commit
  (merged to 'next' on 2018-03-02 at 0b6d4f9335)
 + sha1_name: fix uninitialized memory errors

 While finding unique object name abbreviation, the code may
 accidentally have read beyond the end of the array of object names
 in a pack.

 Will merge to 'master'.


* ds/mark-parents-uninteresting-optim (2018-02-27) 1 commit
  (merged to 'next' on 2018-03-02 at 5a42c79806)
 + revision.c: reduce object database queries

 Micro optimization in revision traversal code.

 Will merge to 'master'.


* jc/test-must-be-empty (2018-02-27) 1 commit
  (merged to 'next' on 2018-03-02 at ec129f1b97)
 + test_must_be_empty: make sure the file exists, not just empty

 Test framework tweak to catch developer thinko.

 Will merge to 'master'.


* ma/roll-back-lockfiles (2018-02-28) 5 commits
  (merged to 'next' on 2018-03-06 at be29bf891c)
 + sequencer: do not roll back lockfile unnecessarily
 + merge: always roll back lock in `checkout_fast_forward()`
 + merge-recursive: always roll back lock in `merge_recursive_generic()`
 + sequencer: always roll back lock in `do_recursive_merge()`
 + sequencer: make lockfiles non-static
 (this branch is used by ma/skip-writing-unchanged-index.)

 Some codepaths used to take a lockfile and did not roll it back;
 they are automatically rolled back at program exit, so there is no
 real "breakage", but it still is a good practice to roll back when
 you are done with a lockfile.

 Will merge to 'master'.


* mk/doc-pretty-fill (2018-02-27) 1 commit
  (merged to 'next' on 2018-03-02 at 623461b127)
 + docs/pretty-formats: fix typo '% <(<N>)' -> '%<|(<N>)'

 Docfix.

 Will merge to 'master'.


* nd/remove-ignore-env-field (2018-03-05) 5 commits
 - repository: delete ignore_env member
 - sha1_file.c: move delayed getenv(altdb) back to setup_git_env()
 - repository.c: delete dead functions
 - repository.c: move env-related setup code back to environment.c
 - repository: initialize the_repository in main()
 (this branch is used by sb/object-store and sb/packfiles-in-repository.)


* rj/test-i18ngrep (2018-02-28) 2 commits
  (merged to 'next' on 2018-03-06 at 7ea1a2352c)
 + t5536: simplify checking of messages output to stderr
 + t4151: consolidate multiple calls to test_i18ngrep

 Test updates.

 Will merge to 'master'.


* rs/perf-repeat-thrice-by-default (2018-02-27) 1 commit
  (merged to 'next' on 2018-03-02 at 4898b3c450)
 + perf: use GIT_PERF_REPEAT_COUNT=3 by default even without config file

 Perf test regression fix.

 Will merge to 'master'.


* sb/object-store (2018-03-05) 27 commits
 - sha1_file: allow sha1_loose_object_info to handle arbitrary repositories
 - sha1_file: allow map_sha1_file to handle arbitrary repositories
 - sha1_file: allow map_sha1_file_1 to handle arbitrary repositories
 - sha1_file: allow open_sha1_file to handle arbitrary repositories
 - sha1_file: allow stat_sha1_file to handle arbitrary repositories
 - sha1_file: allow sha1_file_name to handle arbitrary repositories
 - sha1_file: add repository argument to sha1_loose_object_info
 - sha1_file: add repository argument to map_sha1_file
 - sha1_file: add repository argument to map_sha1_file_1
 - sha1_file: add repository argument to open_sha1_file
 - sha1_file: add repository argument to stat_sha1_file
 - sha1_file: add repository argument to sha1_file_name
 - sha1_file: allow prepare_alt_odb to handle arbitrary repositories
 - sha1_file: allow link_alt_odb_entries to handle arbitrary repositories
 - sha1_file: add repository argument to prepare_alt_odb
 - sha1_file: add repository argument to link_alt_odb_entries
 - sha1_file: add repository argument to read_info_alternates
 - sha1_file: add repository argument to link_alt_odb_entry
 - sha1_file: add raw_object_store argument to alt_odb_usable
 - pack: move approximate object count to object store
 - pack: move prepare_packed_git_run_once to object store
 - object-store: close all packs upon clearing the object store
 - object-store: move packed_git and packed_git_mru to object store
 - object-store: free alt_odb_list
 - object-store: move alt_odb_list and alt_odb_tail to object store
 - object-store: migrate alternates struct and functions from cache.h
 - repository: introduce raw object store field
 (this branch is used by sb/packfiles-in-repository; uses nd/remove-ignore-env-field.)

 Refactoring the internal global data structure to make it possible
 to open multiple repositories, work with and then close them.

 Rerolled by Duy on top of a separate preliminary clean-up topic.
 The resulting structure of the topics looked very sensible.


* sb/packfiles-in-repository (2018-03-05) 12 commits
 - packfile: keep prepare_packed_git() private
 - packfile: allow find_pack_entry to handle arbitrary repositories
 - packfile: add repository argument to find_pack_entry
 - packfile: allow reprepare_packed_git to handle arbitrary repositories
 - packfile: allow prepare_packed_git to handle arbitrary repositories
 - packfile: allow prepare_packed_git_one to handle arbitrary repositories
 - packfile: add repository argument to reprepare_packed_git
 - packfile: add repository argument to prepare_packed_git
 - packfile: add repository argument to prepare_packed_git_one
 - packfile: allow install_packed_git to handle arbitrary repositories
 - packfile: allow rearrange_packed_git to handle arbitrary repositories
 - packfile: allow prepare_packed_git_mru to handle arbitrary repositories
 (this branch uses nd/remove-ignore-env-field and sb/object-store.)

 Refactoring of the internal global data structure continues.


* sg/test-x (2018-02-28) 11 commits
  (merged to 'next' on 2018-03-06 at ab0684b27c)
 + travis-ci: run tests with '-x' tracing
 + t/README: add a note about don't saving stderr of compound commands
 + t1510-repo-setup: mark as untraceable with '-x'
 + t9903-bash-prompt: don't check the stderr of __git_ps1()
 + t5570-git-daemon: don't check the stderr of a subshell
 + t5526: use $TRASH_DIRECTORY to specify the path of GIT_TRACE log file
 + t5500-fetch-pack: don't check the stderr of a subshell
 + t3030-merge-recursive: don't check the stderr of a subshell
 + t1507-rev-parse-upstream: don't check the stderr of a shell function
 + t: add means to disable '-x' tracing for individual test scripts
 + t: prevent '-x' tracing from interfering with test helpers' stderr

 Running test scripts under -x option of the shell is often not a
 useful way to debug them, because the error messages from the
 commands tests try to capture and inspect are contaminated by the
 tracing output by the shell.  An earlier work done to make it more
 pleasant to run tests under -x with recent versions of bash is
 extended to cover posix shells that do not support BASH_XTRACEFD.

 Will merge to 'master'.


* ab/gc-auto-in-commit (2018-03-01) 1 commit
  (merged to 'next' on 2018-03-02 at 96a5a4d629)
 + commit: run git gc --auto just before the post-commit hook

 "git commit" used to run "gc --auto" near the end, which was lost
 when the command was reimplemented in C by mistake.

 Will merge to 'master'.


* ab/pre-auto-gc-battery (2018-02-28) 1 commit
  (merged to 'next' on 2018-03-06 at ca9cb273cb)
 + hooks/pre-auto-gc-battery: allow gc to run on non-laptops

 A sample auto-gc hook (in contrib/) to skip auto-gc while on
 battery has been updated to almost always allow running auto-gc
 unless on_ac_power command is absolutely sure that we are on
 battery power (earlier, it skipped unless the command is sure that
 we are on ac power).

 Will merge to 'master'.


* ag/userdiff-go-funcname (2018-03-01) 1 commit
  (merged to 'next' on 2018-03-02 at ea404d1be9)
 + userdiff: add built-in pattern for golang

 "git diff" and friends learned funcname patterns for Go language
 source files.

 Will merge to 'master'.


* ma/skip-writing-unchanged-index (2018-03-01) 1 commit
 - write_locked_index(): add flag to avoid writing unchanged index
 (this branch uses ma/roll-back-lockfiles.)

 Internal API clean-up to allow write_locked_index() optionally skip
 writing the in-core index when it is not modified.

 May want to merge into ma/roll-back-lockfiles topic before merging
 to 'next'.


* jh/status-no-ahead-behind (2018-01-24) 4 commits
  (merged to 'next' on 2018-03-02 at 68bde8d571)
 + status: support --no-ahead-behind in long format
 + status: update short status to respect --no-ahead-behind
 + status: add --[no-]ahead-behind to status and commit for V2 format.
 + stat_tracking_info: return +1 when branches not equal

 "git status" can spend a lot of cycles to compute the relation
 between the current branch and its upstream, which can now be
 disabled with "--no-ahead-behind" option.

 Will merge to 'master'.


* nd/tilde-expand-opt-file-value (2018-02-14) 2 commits
 - init-db: change --template type to OPTION_FILENAME
 - parse-options: expand $HOME on filename options

 "git cmd --opt=~u/path/to/file" did not tilde-expand "~u" part to
 the path to the home directory of user 'u'

 Will discard.
 This may make the resulting whole more confusing, though.
 cf. <87wozffavp.fsf@evledraar.gmail.com>


* ab/perl-fixes (2018-03-05) 13 commits
 - perl Git::LoadCPAN: emit better errors under NO_PERL_CPAN_FALLBACKS
 - Makefile: add NO_PERL_CPAN_FALLBACKS knob
 - perl: move the perl/Git/FromCPAN tree to perl/FromCPAN
 - perl: generalize the Git::LoadCPAN facility
 - perl: move CPAN loader wrappers to another namespace
 - perl: update our copy of Mail::Address
 - perl: update our ancient copy of Error.pm
 - git-send-email: unconditionally use Net::{SMTP,Domain}
 - Git.pm: hard-depend on the File::{Temp,Spec} modules
 - gitweb: hard-depend on the Digest::MD5 5.8 module
 - Git.pm: add the "use warnings" pragma
 - Git.pm: remove redundant "use strict" from sub-package
 - perl: *.pm files should not have the executable bit

 Clean-up to various pieces of Perl code we have.

 WIll merge to 'next'.


* ds/commit-graph (2018-02-20) 13 commits
 - 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 --delete-expired
 - commit-graph: implement --set-latest
 - 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

 Precompute and store information necessary for ancestry traversal
 in a separate file to optimize graph walking.

 Reroll exists, but it appears that there will be a further reroll.
 cf. <1519698787-190494-1-git-send-email-dstolee@microsoft.com>


* ot/ref-filter-cleanup (2018-02-21) 2 commits
  (merged to 'next' on 2018-03-02 at 3b4c39a4b5)
 + ref-filter: get rid of goto
 + ref-filter: get rid of duplicate code

 Code cleanup.

 Will merge to 'master'.


* ma/config-page-only-in-list-mode (2018-02-21) 3 commits
 - config: change default of `pager.config` to "on"
 - config: respect `pager.config` in list/get-mode only
 - t7006: add tests for how git config paginates

 In a way similar to how "git tag" learned to honor the pager
 setting only in the list mode, "git config" learned to ignore the
 pager setting when it is used for setting values (i.e. when the
 purpose of the operation is not to "show").

 Is this ready for 'next'?


* pw/add-p-recount (2018-03-05) 9 commits
  (merged to 'next' on 2018-03-06 at 68952f9bb0)
 + add -p: don't rely on apply's '--recount' option
 + add -p: fix counting when splitting and coalescing
 + add -p: calculate offset delta for edited patches
 + add -p: adjust offsets of subsequent hunks when one is skipped
 + t3701: add failing test for pathological context lines
 + t3701: don't hard code sha1 hash values
 + t3701: use test_write_lines and write_script
 + t3701: indent here documents
 + add -i: add function to format hunk header
 (this branch is used by pw/add-p-select.)

 "git add -p" has been lazy in coalescing split patches before
 passing the result to underlying "git apply", leading to corner
 case bugs; the logic to prepare the patch to be applied after hunk
 selections has been tightened.

 Will merge to 'master'.


* bp/untracked-cache-noflush (2018-02-28) 2 commits
  (merged to 'next' on 2018-03-02 at 709887971b)
 + untracked cache: use git_env_bool() not getenv() for customization
 + dir.c: don't flag the index as dirty for changes to the untracked cache

 Writing out the index file when the only thing that changed in it
 is the untracked cache information is often wasteful, and this has
 been optimized out.

 Will merge to 'master'.


* nd/diff-stat-with-summary (2018-02-27) 2 commits
  (merged to 'next' on 2018-03-06 at d543f92f5e)
 + diff: add --compact-summary
 + diff.c: refactor pprint_rename() to use strbuf

 "git diff" and friends learned "--compact-summary" that shows the
 information usually given with the "--summary" option on the same
 line as the diffstat output of the "--stat" option (which saves
 vertical space and keeps info on a single path at the same place).

 Will merge to 'master'.


* nd/parseopt-completion (2018-03-06) 44 commits
 - SQUASH???
 - completion: simplify _git_notes
 - completion: don't set PARSE_OPT_NOCOMPLETE on --rerere-autoupdate
  (merged to 'next' on 2018-03-02 at d72a6525fd)
 + completion: use __gitcomp_builtin in _git_worktree
 + completion: use __gitcomp_builtin in _git_tag
 + completion: use __gitcomp_builtin in _git_status
 + completion: use __gitcomp_builtin in _git_show_branch
 + completion: use __gitcomp_builtin in _git_rm
 + completion: use __gitcomp_builtin in _git_revert
 + completion: use __gitcomp_builtin in _git_reset
 + completion: use __gitcomp_builtin in _git_replace
 + remote: force completing --mirror= instead of --mirror
 + completion: use __gitcomp_builtin in _git_remote
 + completion: use __gitcomp_builtin in _git_push
 + completion: use __gitcomp_builtin in _git_pull
 + completion: use __gitcomp_builtin in _git_notes
 + completion: use __gitcomp_builtin in _git_name_rev
 + completion: use __gitcomp_builtin in _git_mv
 + completion: use __gitcomp_builtin in _git_merge_base
 + completion: use __gitcomp_builtin in _git_merge
 + completion: use __gitcomp_builtin in _git_ls_remote
 + completion: use __gitcomp_builtin in _git_ls_files
 + completion: use __gitcomp_builtin in _git_init
 + completion: use __gitcomp_builtin in _git_help
 + completion: use __gitcomp_builtin in _git_grep
 + completion: use __gitcomp_builtin in _git_gc
 + completion: use __gitcomp_builtin in _git_fsck
 + completion: use __gitcomp_builtin in _git_fetch
 + completion: use __gitcomp_builtin in _git_difftool
 + completion: use __gitcomp_builtin in _git_describe
 + completion: use __gitcomp_builtin in _git_config
 + completion: use __gitcomp_builtin in _git_commit
 + completion: use __gitcomp_builtin in _git_clone
 + completion: use __gitcomp_builtin in _git_clean
 + completion: use __gitcomp_builtin in _git_cherry_pick
 + completion: use __gitcomp_builtin in _git_checkout
 + completion: use __gitcomp_builtin in _git_branch
 + completion: use __gitcomp_builtin in _git_apply
 + completion: use __gitcomp_builtin in _git_am
 + completion: use __gitcomp_builtin in _git_add
 + git-completion.bash: introduce __gitcomp_builtin
 + parse-options: let OPT__FORCE take optional flags argument
 + parse-options: add OPT_xxx_F() variants
 + parse-options: support --git-completion-helper

 Teach parse-options API an option to help the completion script,
 and make use of the mechanism in command line completion.

 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-02-05) 3 commits
 - worktree: teach "add" to check out existing branches
 - worktree: be clearer when "add" dwim-ery kicks in
 - worktree: improve message when creating a new worktree

 "git worktree add" learned to check out an existing branch.

 Expecting a reroll.
 cf. <CAPig+cRLohiqR_Drh7P0q3XbvC22WLjNwH0YLZo3dqFzZZuAPw@mail.gmail.com>
 cf. <CACsJy8BEKYqW+Ne_WY2RBaSbb9OKcjREtrawStj=eJsVsia_Jw@mail.gmail.com>
 The general idea is good, just end-user facing messages are found
 suboptimal.


* nd/worktree-move (2018-03-06) 8 commits
  (merged to 'next' on 2018-03-06 at a26271e7de)
 + t2028: fix minor error and issues in newly-added "worktree move" tests
  (merged to 'next' on 2018-03-02 at 5c514dfc92)
 + worktree remove: allow it when $GIT_WORK_TREE is already gone
 + 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.

 Will merge to 'master'.


* cl/send-email-reply-to (2018-03-06) 2 commits
 - send-email: support separate Reply-To address
 - send-email: rename variable for clarity
 (this branch uses np/send-email-header-parsing.)

 "git send-email" learned "--reply-to=<address>" option.

 Will merge to 'next'.


* js/rebase-recreate-merge (2018-02-23) 12 commits
 - rebase -i: introduce --recreate-merges=[no-]rebase-cousins
 - pull: accept --rebase=recreate to recreate the branch topology
 - sequencer: handle post-rewrite for merge commands
 - sequencer: make refs generated by the `label` command worktree-local
 - rebase: introduce the --recreate-merges option
 - rebase-helper --make-script: introduce a flag to recreate merges
 - sequencer: fast-forward merge commits, if possible
 - sequencer: introduce the `merge` command
 - sequencer: introduce new commands to reset the revision
 - git-rebase--interactive: clarify arguments
 - sequencer: make rearrange_squash() a bit more obvious
 - sequencer: avoid using errno clobbered by rollback_lock_file()

 "git rebase" learned "--recreate-merges" to transplant the whole
 topology of commit graph elsewhere.

 Will merge to 'next'.


* bw/protocol-v2 (2018-03-02) 36 commits
 - SQUASH???
 - 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 patterns when pushing
 - fetch: pass ref patterns when fetching
 - ls-remote: pass ref patterns when requesting a remote's refs
 - transport: convert transport_get_remote_refs to take a list of ref patterns
 - transport: convert get_refs_list to take a list of ref patterns
 - 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

 The beginning of the next-gen transfer protocol.


* ls/checkout-encoding (2018-03-06) 8 commits
 - 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
 - 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).

 Expecting a reroll; it is almost there, though.
 cf. <570D707A-DD9E-4397-8155-E8B3C3D09760@gmail.com>


* en/rename-directory-detection (2018-02-27) 29 commits
  (merged to 'next' on 2018-03-06 at d42470f86e)
 + merge-recursive: ensure we write updates for directory-renamed file
 + 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

 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.

 Will merge to 'master'.

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

* ot/cat-batch-format (2018-02-12) 23 commits
 . cat-file: update of docs
 . cat-file: tests for new atoms added
 . for-each-ref: tests for new atoms added
 . ref-filter: unifying formatting of cat-file opts
 . ref-filter: make populate_value() internal again
 . cat-file: reuse printing logic from ref-filter
 . ref-filter: make valid_atom general again
 . ref-filter: make cat_file_info independent
 . cat-file: move skip_object_info into ref-filter
 . ref_filter: add is_atom_used function
 . ref-filter: get rid of mark_atom_in_object_info()
 . cat-file: start reusing populate_value()
 . ref-filter: rename field in ref_array_item stuct
 . ref-filter: make populate_value() global
 . cat-file: start use ref_array_item struct
 . ref-filter: reuse parse_ref_filter_atom()
 . cat-file: start migrating formatting to ref-filter
 . cat-file: split expand_atom() into 2 functions
 . cat-file: move struct expand_data into ref-filter
 . ref-filter: make valid_atom as function parameter
 . cat-file: reuse struct ref_format
 . ref-filter: add return value to some functions
 . ref-filter: get rid of goto

 Teach "cat-file --batch" to reuse the formatting machinery shared
 by for-each-ref, branch --list, and tag --list.

 Discarded, as a rebooted effort is beginning elsewhere.
 Allocates flex-array on stack, etc.
 cf. <58b2bdcd-d621-fd21-ab4d-6a9478319b19@ramsayjones.plus.com>

^ permalink raw reply	[relevance 4%]

* [PATCH 38/44] packfile: add repository argument to reprepare_packed_git
  @ 2018-03-03 11:36  5%   ` Nguyễn Thái Ngọc Duy
  2018-03-23 17:45  7%   ` [PATCH 00/12] sb/packfiles-in-repository updates Nguyễn Thái Ngọc Duy
  1 sibling, 0 replies; 19+ results
From: Nguyễn Thái Ngọc Duy @ 2018-03-03 11:36 UTC (permalink / raw)
  To: git; +Cc: Junio C Hamano, Stefan Beller,
	Nguyễn Thái Ngọc Duy

From: Stefan Beller <sbeller@google.com>

See previous patch for explanation.

Signed-off-by: Stefan Beller <sbeller@google.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
Signed-off-by: Nguyễn Thái Ngọc Duy <pclouds@gmail.com>
---
 builtin/gc.c           | 2 +-
 builtin/receive-pack.c | 3 ++-
 bulk-checkin.c         | 3 ++-
 fetch-pack.c           | 3 ++-
 packfile.c             | 2 +-
 packfile.h             | 3 ++-
 sha1_file.c            | 2 +-
 7 files changed, 11 insertions(+), 7 deletions(-)

diff --git a/builtin/gc.c b/builtin/gc.c
index 526f06173e..560d58daec 100644
--- a/builtin/gc.c
+++ b/builtin/gc.c
@@ -477,7 +477,7 @@ int cmd_gc(int argc, const char **argv, const char *prefix)
 		return error(FAILED_RUN, rerere.argv[0]);
 
 	report_garbage = report_pack_garbage;
-	reprepare_packed_git();
+	reprepare_packed_git(the_repository);
 	if (pack_garbage.nr > 0)
 		clean_pack_garbage();
 
diff --git a/builtin/receive-pack.c b/builtin/receive-pack.c
index ac478b7b99..dfc69be1a2 100644
--- a/builtin/receive-pack.c
+++ b/builtin/receive-pack.c
@@ -1,4 +1,5 @@
 #include "builtin.h"
+#include "repository.h"
 #include "config.h"
 #include "lockfile.h"
 #include "pack.h"
@@ -1777,7 +1778,7 @@ static const char *unpack(int err_fd, struct shallow_info *si)
 		status = finish_command(&child);
 		if (status)
 			return "index-pack abnormal exit";
-		reprepare_packed_git();
+		reprepare_packed_git(the_repository);
 	}
 	return NULL;
 }
diff --git a/bulk-checkin.c b/bulk-checkin.c
index 3310fd210a..eadc2d5172 100644
--- a/bulk-checkin.c
+++ b/bulk-checkin.c
@@ -3,6 +3,7 @@
  */
 #include "cache.h"
 #include "bulk-checkin.h"
+#include "repository.h"
 #include "csum-file.h"
 #include "pack.h"
 #include "strbuf.h"
@@ -57,7 +58,7 @@ static void finish_bulk_checkin(struct bulk_checkin_state *state)
 
 	strbuf_release(&packname);
 	/* Make objects we just wrote available to ourselves */
-	reprepare_packed_git();
+	reprepare_packed_git(the_repository);
 }
 
 static int already_written(struct bulk_checkin_state *state, unsigned char sha1[])
diff --git a/fetch-pack.c b/fetch-pack.c
index 8253d746e0..eac5928a27 100644
--- a/fetch-pack.c
+++ b/fetch-pack.c
@@ -1,4 +1,5 @@
 #include "cache.h"
+#include "repository.h"
 #include "config.h"
 #include "lockfile.h"
 #include "refs.h"
@@ -1192,7 +1193,7 @@ struct ref *fetch_pack(struct fetch_pack_args *args,
 	prepare_shallow_info(&si, shallow);
 	ref_cpy = do_fetch_pack(args, fd, ref, sought, nr_sought,
 				&si, pack_lockfile);
-	reprepare_packed_git();
+	reprepare_packed_git(the_repository);
 	update_shallow(args, sought, nr_sought, &si);
 	clear_shallow_info(&si);
 	return ref_cpy;
diff --git a/packfile.c b/packfile.c
index b5ad6838f8..53db240d0f 100644
--- a/packfile.c
+++ b/packfile.c
@@ -898,7 +898,7 @@ void prepare_packed_git_the_repository(void)
 	the_repository->objects.packed_git_initialized = 1;
 }
 
-void reprepare_packed_git(void)
+void reprepare_packed_git_the_repository(void)
 {
 	the_repository->objects.approximate_object_count_valid = 0;
 	the_repository->objects.packed_git_initialized = 0;
diff --git a/packfile.h b/packfile.h
index 3f59456e7e..ab5046938c 100644
--- a/packfile.h
+++ b/packfile.h
@@ -36,7 +36,8 @@ extern void (*report_garbage)(unsigned seen_bits, const char *path);
 
 #define prepare_packed_git(r) prepare_packed_git_##r()
 extern void prepare_packed_git_the_repository(void);
-extern void reprepare_packed_git(void);
+#define reprepare_packed_git(r) reprepare_packed_git_##r()
+extern void reprepare_packed_git_the_repository(void);
 extern void install_packed_git(struct repository *r, struct packed_git *pack);
 
 struct packed_git *get_packed_git(struct repository *r);
diff --git a/sha1_file.c b/sha1_file.c
index 7066d4c9ce..be84f84373 100644
--- a/sha1_file.c
+++ b/sha1_file.c
@@ -1274,7 +1274,7 @@ int sha1_object_info_extended(const unsigned char *sha1, struct object_info *oi,
 			return 0;
 
 		/* Not a loose object; someone else may have just packed it. */
-		reprepare_packed_git();
+		reprepare_packed_git(the_repository);
 		if (find_pack_entry(real, &e))
 			break;
 
-- 
2.16.1.435.g8f24da2e1a


^ permalink raw reply related	[relevance 5%]

* What's cooking in git.git (Mar 2018, #01; Thu, 1)
@ 2018-03-01 22:20  3% Junio C Hamano
  0 siblings, 0 replies; 19+ results
From: Junio C Hamano @ 2018-03-01 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.

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/untracked-cache-invalidation-docs (2018-02-09) 2 commits
  (merged to 'next' on 2018-02-14 at 11d2d07c4a)
 + update-index doc: note the caveat with "could not open..."
 + update-index doc: note a fixed bug in the untracked cache
 (this branch uses nd/fix-untracked-cache-invalidation.)

 Doc update to warn against remaining bugs in untracked cache.


* as/ll-i18n (2018-02-13) 1 commit
  (merged to 'next' on 2018-02-14 at b30154a04c)
 + Mark messages for translations

 Some messages in low level start-up codepath have been i18n-ized.


* bc/doc-interpret-trailers-grammofix (2018-02-13) 1 commit
  (merged to 'next' on 2018-02-14 at 940e6dc7a5)
 + docs/interpret-trailers: fix agreement error

 Docfix.


* bp/fsmonitor (2018-02-14) 1 commit
  (merged to 'next' on 2018-02-14 at 5c508858fb)
 + fsmonitor: update documentation to remove reference to invalid config settings

 Doc update for a recently added feature.


* bp/name-hash-dirname-fix (2018-02-08) 1 commit
  (merged to 'next' on 2018-02-14 at 2f564fb4b3)
 + name-hash: properly fold directory names in adjust_dirname_case()

 "git add" files in the same directory, but spelling the directory
 path in different cases on case insensitive filesystem, corrupted
 the name hash data structure and led to unexpected results.  This
 has been corrected.


* es/worktree-add-post-checkout-hook (2018-02-15) 1 commit
  (merged to 'next' on 2018-02-21 at 6ef6a130bf)
 + worktree: add: fix 'post-checkout' not knowing new worktree location

 "git worktree add" learned to run the post-checkout hook, just like
 "git clone" runs it upon the initial checkout.


* gs/test-unset-xdg-cache-home (2018-02-16) 1 commit
  (merged to 'next' on 2018-02-21 at 9aec46d404)
 + test-lib.sh: unset XDG_CACHE_HOME

 Test update.


* jc/blame-missing-path (2018-02-07) 1 commit
  (merged to 'next' on 2018-02-14 at 883d266e1e)
 + blame: tighten command line parser

 "git blame HEAD COPYING" in a bare repository failed to run, while
 "git blame HEAD -- COPYING" run just fine.  This has been corrected.


* jk/doc-do-not-write-extern (2018-02-08) 1 commit
  (merged to 'next' on 2018-02-14 at e55b5127de)
 + CodingGuidelines: mention "static" and "extern"

 Devdoc update.


* jk/gettext-poison (2018-02-08) 2 commits
  (merged to 'next' on 2018-02-14 at cca3719a59)
 + git-sh-i18n: check GETTEXT_POISON before USE_GETTEXT_SCHEME
 + t0205: drop redundant test

 Test updates.


* jk/push-options-via-transport-fix (2018-02-20) 2 commits
  (merged to 'next' on 2018-02-21 at a037cbfa2b)
 + remote-curl: unquote incoming push-options
 + t5545: factor out http repository setup

 "git push" over http transport did not unquote the push-options
 correctly.


* jk/sq-dequote-on-bogus-input (2018-02-14) 1 commit
  (merged to 'next' on 2018-02-14 at 75d4f1eaf8)
 + sq_dequote: fix extra consumption of source string

 Code to unquote single-quoted string (used in the parser for
 configuration files, etc.) did not diagnose bogus input correctly
 and produced bogus results instead.


* jk/t0002-simplify (2018-02-12) 1 commit
  (merged to 'next' on 2018-02-14 at a7a24f5f29)
 + t0002: simplify error checking

 Code cleanup.


* jk/test-hashmap-updates (2018-02-14) 6 commits
  (merged to 'next' on 2018-02-14 at a61a9bd8f0)
 + test-hashmap: use "unsigned int" for hash storage
 + test-hashmap: simplify alloc_test_entry
 + test-hashmap: use strbuf_getline rather than fgets
 + test-hashmap: use xsnprintf rather than snprintf
 + test-hashmap: check allocation computation for overflow
 + test-hashmap: use ALLOC_ARRAY rather than bare malloc

 Code clean-up.


* js/fix-merge-arg-quoting-in-rebase-p (2018-02-08) 1 commit
  (merged to 'next' on 2018-02-14 at 27ebf001a1)
 + rebase -p: fix incorrect commit message when calling `git merge`.

 "git rebase -p" mangled log messages of a merge commit, which is
 now fixed.


* js/packet-read-line-check-null (2018-02-08) 2 commits
  (merged to 'next' on 2018-02-14 at 6ba237b284)
 + always check for NULL return from packet_read_line()
 + correct error messages for NULL packet_read_line()

 Some low level protocol codepath could crash when they get an
 unexpected flush packet, which is now fixed.


* jt/binsearch-with-fanout (2018-02-15) 2 commits
  (merged to 'next' on 2018-02-15 at 7648891022)
 + packfile: refactor hash search with fanout table
 + packfile: remove GIT_DEBUG_LOOKUP log statements
 (this branch is used by ds/commit-graph.)

 Refactor the code to binary search starting from a fan-out table
 (which is how the packfile is indexed with object names) into a
 reusable helper.


* nd/am-quit (2018-02-14) 1 commit
  (merged to 'next' on 2018-02-21 at 9a9cb40c2f)
 + am: support --quit

 "git am" has learned the "--quit" option, in addition to the existing
 "--abort" option; having the pair mirrors a few other commands like
 "rebase" and "cherry-pick".


* nd/fix-untracked-cache-invalidation (2018-02-07) 5 commits
  (merged to 'next' on 2018-02-08 at 23bd5a5d2d)
 + dir.c: ignore paths containing .git when invalidating untracked cache
 + dir.c: stop ignoring opendir() error in open_cached_dir()
 + dir.c: fix missing dir invalidation in untracked code
 + dir.c: avoid stat() in valid_cached_dir()
 + status: add a failing test showing a core.untrackedCache bug
 (this branch is used by ab/untracked-cache-invalidation-docs.)

 Some bugs around "untracked cache" feature have been fixed.
 Seems to uncover bad untracked cache information a bit too loudly,
 for which there is ab/untracked-cache-invalidation-docs topic.
 cf. <87d11omi2o.fsf@evledraar.gmail.com>
 They have to graduate together.


* rd/typofix (2018-02-14) 2 commits
  (merged to 'next' on 2018-02-14 at e770601de4)
 + Correct mispellings of ".gitmodule" to ".gitmodules"
 + t/: correct obvious typo "detahced"

 Typofix.


* rj/sparse-updates (2018-02-12) 2 commits
  (merged to 'next' on 2018-02-14 at 072df8ed5b)
 + Makefile: suppress a sparse warning for pack-revindex.c
 + config.mak.uname: remove SPARSE_FLAGS setting for cygwin

 Devtool update.


* rs/check-ignore-multi (2018-02-12) 1 commit
  (merged to 'next' on 2018-02-14 at 43cb0704af)
 + check-ignore: fix mix of directories and other file types

 "git check-ignore" with multiple paths got confused when one is a
 file and the other is a directory, which has been fixed.


* sb/describe-blob (2018-02-12) 1 commit
  (merged to 'next' on 2018-02-14 at 23e4c13944)
 + describe: confirm that blobs actually exist

 "git describe $garbage" stopped giving any errors when the garbage
 happens to be a string with 40 hexadecimal letters.


* sb/status-doc-fix (2018-02-15) 1 commit
  (merged to 'next' on 2018-02-21 at 5e68f3dac8)
 + Documentation/git-status: clarify status table for porcelain mode

 Docfix.


* sg/doc-test-must-fail-args (2018-02-12) 1 commit
  (merged to 'next' on 2018-02-14 at 28662d145b)
 + t: document 'test_must_fail ok=<signal-name>'

 Devdoc update.


* tg/worktree-create-tracking (2018-02-16) 2 commits
  (merged to 'next' on 2018-02-21 at 3e00a10cd8)
 + git-worktree.txt: fix indentation of example and text of 'add' command
 + git-worktree.txt: fix missing ")" typo

 Hotfix for a recent topic.


* tk/apply-dev-null-verify-name-fix (2018-02-15) 2 commits
  (merged to 'next' on 2018-02-21 at dab449203b)
 + apply: handle Subversion diffs with /dev/null gracefully
 + apply: demonstrate a problem applying svn diffs

 Many places in "git apply" knew that "/dev/null" that signals
 "there is no such file on this side of the diff" can be followed by
 whitespace and garbage when parsing a patch, except for one, which
 made an otherwise valid patch (e.g. ones from subversion) rejected.


* tz/do-not-clean-spec-file (2018-02-17) 1 commit
  (merged to 'next' on 2018-02-21 at c1336418a8)
 + Makefile: remove *.spec from clean target

 We no longer create any *.spec file, so "make clean" should not
 remove it.

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

* jk/cached-commit-buffer (2018-02-22) 2 commits
  (merged to 'next' on 2018-02-27 at af791d9a1e)
 + revision: drop --show-all option
 + commit: drop uses of get_cached_commit_buffer()

 Code clean-up.

 Will merge to 'master'.


* jk/test-helper-v-output-fix (2018-02-22) 1 commit
  (merged to 'next' on 2018-02-27 at c9109977e8)
 + t: send verbose test-helper output to fd 4

 Test framework update.

 Will merge to 'master'.


* ld/p4-unshelve (2018-02-22) 1 commit
 - git-p4: add unshelve command

 "git p4" learned to "unshelve" shelved commit from P4.

 Will merge to 'next'.


* ms/non-ascii-ticks (2018-02-22) 1 commit
  (merged to 'next' on 2018-02-27 at 41159fc4f0)
 + Documentation/gitsubmodules.txt: avoid non-ASCII apostrophes

 Doc markup fix.

 Will merge to 'master'.


* rs/strbuf-read-file-or-whine (2018-02-22) 1 commit
  (merged to 'next' on 2018-02-27 at 56017cb5e2)
 + sequencer: factor out strbuf_read_file_or_whine()

 Code clean-up.

 Will merge to 'master'.


* jk/strbuf-read-file-close-error (2018-02-23) 1 commit
  (merged to 'next' on 2018-02-27 at c5dfe33335)
 + strbuf_read_file(): preserve errno across close() call

 Code clean-up.

 Will merge to 'master'.


* bw/perl-timegm-timelocal-fix (2018-02-23) 1 commit
  (merged to 'next' on 2018-02-27 at 565a3141ce)
 + perl: call timegm and timelocal with 4-digit year

 Y2k20 fix ;-) for our perl scripts.

 Will merge to 'master'.


* ps/contains-id-error-message (2018-02-23) 1 commit
  (merged to 'next' on 2018-02-27 at 9623d6817b)
 + ref-filter: make "--contains <id>" less chatty if <id> is invalid

 "git tag --contains no-such-commit" gave a full list of options
 after giving an error message.

 Will merge to 'master'.
 As a follow-up we may want to also handle "branch --points-at <object>"
 that shares the same problem.


* rv/grep-cleanup (2018-02-23) 2 commits
 - grep: simplify grep_oid and grep_file
 - grep: move grep_source_init outside critical section

 Threaded "git grep" has been optimized to avoid allocation in code
 section that is covered under a mutex.

 Will merge to 'next'.


* sg/subtree-signed-commits (2018-02-23) 1 commit
 - subtree: fix add and pull for GPG-signed commits

 "git subtree" script (in contrib/) scripted around "git log", whose
 output got affected by end-user configuration like log.showsignature

 Will merge to 'next'.


* ds/find-unique-abbrev-optim (2018-02-27) 1 commit
 - sha1_name: fix uninitialized memory errors

 While finding unique object name abbreviation, the code may
 accidentally have read beyond the end of the array of object names
 in a pack.

 Will merge to 'next'.


* ds/mark-parents-uninteresting-optim (2018-02-27) 1 commit
 - revision.c: reduce object database queries

 Micro optimization in revision traversal code.

 Will merge to 'next'.


* jc/test-must-be-empty (2018-02-27) 1 commit
 - test_must_be_empty: make sure the file exists, not just empty

 Test framework tweak to catch developer thinko.

 Will merge to 'next'.


* ma/roll-back-lockfiles (2018-02-28) 5 commits
 - sequencer: do not roll back lockfile unnecessarily
 - merge: always roll back lock in `checkout_fast_forward()`
 - merge-recursive: always roll back lock in `merge_recursive_generic()`
 - sequencer: always roll back lock in `do_recursive_merge()`
 - sequencer: make lockfiles non-static
 (this branch is used by ma/skip-writing-unchanged-index.)

 Some codepaths used to take a lockfile and did not roll it back;
 they are automatically rolled back at program exit, so there is no
 real "breakage", but it still is a good practice to roll back when
 you are done with a lockfile.

 Will merge to 'next'.


* mk/doc-pretty-fill (2018-02-27) 1 commit
 - docs/pretty-formats: fix typo '% <(<N>)' -> '%<|(<N>)'

 Docfix.

 Will merge to 'next'.


* nd/remove-ignore-env-field (2018-02-28) 4 commits
 - repository: delete ignore_env member
 - sha1_file.c: move delayed getenv(altdb) back to setup_git_env()
 - repository.c: delete dead functions
 - repository.c: move env-related setup code back to environment.c
 (this branch uses sb/object-store; is tangled with sb/packfiles-in-repository.)


* rj/test-i18ngrep (2018-02-28) 2 commits
 - t5536: simplify checking of messages output to stderr
 - t4151: consolidate multiple calls to test_i18ngrep

 Test updates.

 Will merge to 'next'.


* rs/perf-repeat-thrice-by-default (2018-02-27) 1 commit
 - perf: use GIT_PERF_REPEAT_COUNT=3 by default even without config file

 Perf test regression fix.

 Will merge to 'next'.


* sb/object-store (2018-02-28) 27 commits
 - sha1_file: allow sha1_loose_object_info to handle arbitrary repositories
 - sha1_file: allow map_sha1_file to handle arbitrary repositories
 - sha1_file: allow map_sha1_file_1 to handle arbitrary repositories
 - sha1_file: allow open_sha1_file to handle arbitrary repositories
 - sha1_file: allow stat_sha1_file to handle arbitrary repositories
 - sha1_file: allow sha1_file_name to handle arbitrary repositories
 - sha1_file: add repository argument to sha1_loose_object_info
 - sha1_file: add repository argument to map_sha1_file
 - sha1_file: add repository argument to map_sha1_file_1
 - sha1_file: add repository argument to open_sha1_file
 - sha1_file: add repository argument to stat_sha1_file
 - sha1_file: add repository argument to sha1_file_name
 - sha1_file: allow prepare_alt_odb to handle arbitrary repositories
 - sha1_file: allow link_alt_odb_entries to handle arbitrary repositories
 - sha1_file: add repository argument to prepare_alt_odb
 - sha1_file: add repository argument to link_alt_odb_entries
 - sha1_file: add repository argument to read_info_alternates
 - sha1_file: add repository argument to link_alt_odb_entry
 - sha1_file: add raw_object_store argument to alt_odb_usable
 - pack: move approximate object count to object store
 - pack: move prepare_packed_git_run_once to object store
 - object-store: close all packs upon clearing the object store
 - object-store: move packed_git and packed_git_mru to object store
 - object-store: free alt_odb_list
 - object-store: move alt_odb_list and alt_odb_tail to object store
 - object-store: migrate alternates struct and functions from cache.h
 - repository: introduce raw object store field
 (this branch is used by nd/remove-ignore-env-field and sb/packfiles-in-repository.)

 Refactoring the internal global data structure to make it possible
 to open multiple repositories, work with and then close them.


* sb/packfiles-in-repository (2018-02-28) 11 commits
 - packfile: allow find_pack_entry to handle arbitrary repositories
 - packfile: add repository argument to find_pack_entry
 - packfile: allow reprepare_packed_git to handle arbitrary repositories
 - packfile: allow prepare_packed_git to handle arbitrary repositories
 - packfile: allow prepare_packed_git_one to handle arbitrary repositories
 - packfile: add repository argument to reprepare_packed_git
 - packfile: add repository argument to prepare_packed_git
 - packfile: add repository argument to prepare_packed_git_one
 - packfile: allow install_packed_git to handle arbitrary repositories
 - packfile: allow rearrange_packed_git to handle arbitrary repositories
 - packfile: allow prepare_packed_git_mru to handle arbitrary repositories
 (this branch uses sb/object-store; is tangled with nd/remove-ignore-env-field.)


* sg/test-x (2018-02-28) 11 commits
 - travis-ci: run tests with '-x' tracing
 - t/README: add a note about don't saving stderr of compound commands
 - t1510-repo-setup: mark as untraceable with '-x'
 - t9903-bash-prompt: don't check the stderr of __git_ps1()
 - t5570-git-daemon: don't check the stderr of a subshell
 - t5526: use $TRASH_DIRECTORY to specify the path of GIT_TRACE log file
 - t5500-fetch-pack: don't check the stderr of a subshell
 - t3030-merge-recursive: don't check the stderr of a subshell
 - t1507-rev-parse-upstream: don't check the stderr of a shell function
 - t: add means to disable '-x' tracing for individual test scripts
 - t: prevent '-x' tracing from interfering with test helpers' stderr

 Running test scripts under -x option of the shell is often not a
 useful way to debug them, because the error messages from the
 commands tests try to capture and inspect are contaminated by the
 tracing output by the shell.  An earlier work done to make it more
 pleasant to run tests under -x with recent versions of bash is
 extended to cover posix shells that do not support BASH_XTRACEFD.

 Will merge to 'next'.


* ab/gc-auto-in-commit (2018-03-01) 1 commit
 - commit: run git gc --auto just before the post-commit hook

 "git commit" used to run "gc --auto" near the end, which was lost
 when the command was reimplemented in C by mistake.

 Will merge to 'next'.


* ab/pre-auto-gc-battery (2018-02-28) 1 commit
 - hooks/pre-auto-gc-battery: allow gc to run on non-laptops

 A sample auto-gc hook (in contrib/) to skip auto-gc while on
 battery has been updated to almost always allow running auto-gc
 unless on_ac_power command is absolutely sure that we are on
 battery power (earlier, it skipped unless the command is sure that
 we are on ac power).

 Will merge to 'next'.


* ag/userdiff-go-funcname (2018-03-01) 1 commit
 - userdiff: add built-in pattern for golang

 "git diff" and friends learned funcname patterns for Go language
 source files.

 Will merge to 'next'.


* ma/skip-writing-unchanged-index (2018-03-01) 1 commit
 - write_locked_index(): add flag to avoid writing unchanged index
 (this branch uses ma/roll-back-lockfiles.)

 Internal API clean-up to allow write_locked_index() optionally skip
 writing the in-core index when it is not modified.

 May want to merge into ma/roll-back-lockfiles topic before merging
 to 'next'.

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

* np/send-email-header-parsing (2017-12-15) 1 commit
 - send-email: extract email-parsing code into a subroutine

 Code refactoring.

 Undecided but inclined to drop.  A "refactor" without the code that
 benefit from the refactoring is hard to tell from code churn whose
 only effect is potential to introduce bugs.


* sg/travis-build-during-script-phase (2018-01-08) 1 commit
 - travis-ci: build Git during the 'script' phase

 Stalled for too long without any response; will discard.


* 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>


* dj/runtime-prefix (2017-12-05) 4 commits
 . exec_cmd: RUNTIME_PREFIX on some POSIX systems
 . Makefile: add Perl runtime prefix support
 . Makefile: add support for "perllibdir"
 . Makefile: generate Perl header from template file

 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.

 Perhaps it is about time to reboot the effort?


* 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>


* cc/require-tcl-tk-for-build (2017-11-29) 2 commits
 - travis-ci: avoid new tcl/tk build requirement
 - Makefile: check that tcl/tk is installed

 A first-time builder of Git may have installed neither tclsh nor
 msgfmt, in which case git-gui and gitk part will fail and break the
 build.  As a workaround, refuse to run a build when tclsh is not
 installed and NO_TCLTK is not set.

 Stalled for too long without any response; will discard.
 I still feel that requring tclsh to be installed, with or without
 "escape hatch" for experts, may be too heavy-handed.


* mg/merge-base-fork-point (2017-09-17) 3 commits
 - merge-base: find fork-point outside partial reflog
 - merge-base: return fork-point outside reflog
 - t6010: test actual test output

 "merge-base --fork-point $branch $commit" is used to guess on which
 commit among the commits that were once at the tip of the $branch the
 $commit was built on top of, and it learns these historical tips from
 the reflog of the $branch.  When the true fork-point is lost due to
 pruning of old reflog entries, the command does not give any output,
 because it has no way to guess correctly and does not want to mislead
 the user with a wrong guess.

 The command has been updated to give the best but not known to be
 correct guess, based on a hope that a merge-base between $commit and a
 virtual merge across all the reflog entries that still are available
 for $branch may still be a closer to the true fork-point than the
 merge-base between $commit and the current tip of the $branch.

 This may have to be offered by an additional option, to allow the
 users that are prepared to see a potentially incorrect guess to opt
 into the feature, without affecting the current callers that may not
 be prepared to accept a guess that is not known to be correct.

 Stalled for too long without any response; will discard.


* 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).


* mg/status-in-progress-info (2017-05-10) 2 commits
 - status --short --inprogress: spell it as --in-progress
 - status: show in-progress info for short status

 "git status" learns an option to report various operations
 (e.g. "merging") that the user is in the middle of.

 Stalled for too long without any response; will discard.
 cf. <xmqqmvakcdqw.fsf@gitster.mtv.corp.google.com>

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

* jh/status-no-ahead-behind (2018-01-24) 4 commits
 - status: support --no-ahead-behind in long format
 - status: update short status to respect --no-ahead-behind
 - status: add --[no-]ahead-behind to status and commit for V2 format.
 - stat_tracking_info: return +1 when branches not equal

 "git status" can spend a lot of cycles to compute the relation
 between the current branch and its upstream, which can now be
 disabled with "--no-ahead-behind" option.

 Will merge to 'next'.


* nd/tilde-expand-opt-file-value (2018-02-14) 2 commits
 - init-db: change --template type to OPTION_FILENAME
 - parse-options: expand $HOME on filename options

 "git cmd --opt=~u/path/to/file" did not tilde-expand "~u" part to
 the path to the home directory of user 'u'

 Will discard.
 This may make the resulting whole more confusing, though.
 cf. <87wozffavp.fsf@evledraar.gmail.com>


* jc/allow-ff-merging-kept-tags (2018-02-16) 1 commit
  (merged to 'next' on 2018-02-27 at 8b03610d2b)
 + merge: allow fast-forward when merging a tracked tag

 Since Git 1.7.9, "git merge" defaulted to --no-ff (i.e. even when
 the side branch being merged is a descendant of the current commit,
 create a merge commit instead of fast-forwarding) when merging a
 tag object.  This was appropriate default for integrators who pull
 signed tags from their downstream contributors, but caused an
 unnecessary merges when used by downstream contributors who
 habitually "catch up" their topic branches with tagged releases
 from the upstream.  Update "git merge" to default to --no-ff only
 when merging a tag object that does *not* sit at its usual place in
 refs/tags/ hierarchy, and allow fast-forwarding otherwise, to
 mitigate the problem.

 Will merge to 'master'.


* ab/perl-fixes (2018-02-27) 13 commits
 - perl Git::LoadCPAN: emit better errors under NO_PERL_CPAN_FALLBACKS
 - Makefile: add NO_PERL_CPAN_FALLBACKS knob
 - perl: move the perl/Git/FromCPAN tree to perl/FromCPAN
 - perl: generalize the Git::LoadCPAN facility
 - perl: move CPAN loader wrappers to another namespace
 - perl: update our copy of Mail::Address
 - perl: update our ancient copy of Error.pm
 - git-send-email: unconditionally use Net::{SMTP,Domain}
 - Git.pm: hard-depend on the File::{Temp,Spec} modules
 - gitweb: hard-depend on the Digest::MD5 5.8 module
 - Git.pm: add the "use warnings" pragma
 - Git.pm: remove redundant "use strict" from sub-package
 - perl: *.pm files should not have the executable bit

 Only the first few of a series of several small patches.

 Expecting a reroll.


* ab/simplify-perl-makefile (2018-02-15) 1 commit
  (merged to 'next' on 2018-02-27 at b0d68a2013)
 + Makefile: generate Git(3pm) as dependency of the 'doc' and 'man' targets

 Hotfix for a topic already in 'master'.

 Will merge to 'master'.


* bw/doc-submodule-recurse-config-with-clone (2018-02-21) 1 commit
  (merged to 'next' on 2018-02-27 at 5b12841508)
 + submodule: indicate that 'submodule.recurse' doesn't apply to clone

 Doc update.

 Will merge to 'master'.


* ds/commit-graph (2018-02-20) 13 commits
 - 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 --delete-expired
 - commit-graph: implement --set-latest
 - 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

 Precompute and store information necessary for ancestry traversal
 in a separate file to optimize graph walking.

 Reroll exists, but it appears that there will be a further reroll.
 cf. <1519698787-190494-1-git-send-email-dstolee@microsoft.com>


* ot/ref-filter-cleanup (2018-02-21) 2 commits
 - ref-filter: get rid of goto
 - ref-filter: get rid of duplicate code

 Code cleanup.

 Will merge to 'next'.


* sb/color-h-cleanup (2018-02-13) 1 commit
  (merged to 'next' on 2018-02-27 at 617345de77)
 + color.h: document and modernize header
 (this branch is used by sb/blame-color.)

 Devdoc update.

 Will merge to 'master'.


* ma/config-page-only-in-list-mode (2018-02-21) 3 commits
 - config: change default of `pager.config` to "on"
 - config: respect `pager.config` in list/get-mode only
 - t7006: add tests for how git config paginates

 In a way similar to how "git tag" learned to honor the pager
 setting only in the list mode, "git config" learned to ignore the
 pager setting when it is used for setting values (i.e. when the
 purpose of the operation is not to "show").

 Is this ready for 'next'?


* ot/cat-batch-format (2018-02-12) 23 commits
 - cat-file: update of docs
 - cat-file: tests for new atoms added
 - for-each-ref: tests for new atoms added
 - ref-filter: unifying formatting of cat-file opts
 - ref-filter: make populate_value() internal again
 - cat-file: reuse printing logic from ref-filter
 - ref-filter: make valid_atom general again
 - ref-filter: make cat_file_info independent
 - cat-file: move skip_object_info into ref-filter
 - ref_filter: add is_atom_used function
 - ref-filter: get rid of mark_atom_in_object_info()
 - cat-file: start reusing populate_value()
 - ref-filter: rename field in ref_array_item stuct
 - ref-filter: make populate_value() global
 - cat-file: start use ref_array_item struct
 - ref-filter: reuse parse_ref_filter_atom()
 - cat-file: start migrating formatting to ref-filter
 - cat-file: split expand_atom() into 2 functions
 - cat-file: move struct expand_data into ref-filter
 - ref-filter: make valid_atom as function parameter
 - cat-file: reuse struct ref_format
 - ref-filter: add return value to some functions
 - ref-filter: get rid of goto

 Teach "cat-file --batch" to reuse the formatting machinery shared
 by for-each-ref, branch --list, and tag --list.

 Allocates flex-array on stack, etc.
 cf. <58b2bdcd-d621-fd21-ab4d-6a9478319b19@ramsayjones.plus.com>
 Will discard--a rebooted effort is beginning elsewhere.


* sg/t6300-modernize (2018-02-13) 1 commit
  (merged to 'next' on 2018-02-27 at b6f13b6915)
 + t6300-for-each-ref: fix "more than one quoting style" tests

 Test update.

 Will merge to 'master'.


* xz/send-email-batch-size (2018-02-12) 1 commit
  (merged to 'next' on 2018-02-27 at da0247d532)
 + send-email: error out when relogin delay is missing

 "git send-email" learned to complain when the batch-size option is
 not defined when the relogin-delay option is, since these two are
 mutually required.

 Will merge to 'master'.


* pw/add-p-recount (2018-03-01) 9 commits
 - add -p: don't rely on apply's '--recount' option
 - add -p: fix counting when splitting and coalescing
 - add -p: calculate offset delta for edited patches
 - add -p: adjust offsets of subsequent hunks when one is skipped
 - t3701: add failing test for pathological context lines
 - t3701: don't hard code sha1 hash values
 - t3701: use test_write_lines and write_script
 - t3701: indent here documents
 - add -i: add function to format hunk header

 "git add -p" has been lazy in coalescing split patches before
 passing the result to underlying "git apply", leading to corner
 case bugs; the logic to prepare the patch to be applied after hunk
 selections has been tightened.

 Will merge to 'next'.


* pw/add-p-single (2018-02-13) 3 commits
  (merged to 'next' on 2018-02-27 at 0e2bd585e3)
 + add -p: improve error messages
 + add -p: only bind search key if there's more than one hunk
 + add -p: only display help for active keys

 "git add -p" used to offer "/" (look for a matching hunk) as a
 choice, even there was only one hunk, which has been corrected.
 Also the single-key help is now given only for keys that are
 enabled (e.g. help for '/' won't be shown when there is only one
 hunk).

 Will merge to 'master'.


* bp/untracked-cache-noflush (2018-02-28) 2 commits
 - untracked cache: use git_env_bool() not getenv() for customization
 - dir.c: don't flag the index as dirty for changes to the untracked cache

 Writing out the index file when the only thing that changed in it
 is the untracked cache information is often wasteful, and this has
 been optimized out.

 Will merge to 'next'.


* nd/diff-stat-with-summary (2018-02-27) 2 commits
 - diff: add --compact-summary
 - diff.c: refactor pprint_rename() to use strbuf

 "git diff" and friends learned "--compact-summary" that shows the
 information usually given with the "--summary" option on the same
 line as the diffstat output of the "--stat" option (which saves
 vertical space and keeps info on a single path at the same place).

 Will merge to 'next'.


* nd/parseopt-completion (2018-02-09) 41 commits
 - completion: use __gitcomp_builtin in _git_worktree
 - completion: use __gitcomp_builtin in _git_tag
 - completion: use __gitcomp_builtin in _git_status
 - completion: use __gitcomp_builtin in _git_show_branch
 - completion: use __gitcomp_builtin in _git_rm
 - completion: use __gitcomp_builtin in _git_revert
 - completion: use __gitcomp_builtin in _git_reset
 - completion: use __gitcomp_builtin in _git_replace
 - remote: force completing --mirror= instead of --mirror
 - completion: use __gitcomp_builtin in _git_remote
 - completion: use __gitcomp_builtin in _git_push
 - completion: use __gitcomp_builtin in _git_pull
 - completion: use __gitcomp_builtin in _git_notes
 - completion: use __gitcomp_builtin in _git_name_rev
 - completion: use __gitcomp_builtin in _git_mv
 - completion: use __gitcomp_builtin in _git_merge_base
 - completion: use __gitcomp_builtin in _git_merge
 - completion: use __gitcomp_builtin in _git_ls_remote
 - completion: use __gitcomp_builtin in _git_ls_files
 - completion: use __gitcomp_builtin in _git_init
 - completion: use __gitcomp_builtin in _git_help
 - completion: use __gitcomp_builtin in _git_grep
 - completion: use __gitcomp_builtin in _git_gc
 - completion: use __gitcomp_builtin in _git_fsck
 - completion: use __gitcomp_builtin in _git_fetch
 - completion: use __gitcomp_builtin in _git_difftool
 - completion: use __gitcomp_builtin in _git_describe
 - completion: use __gitcomp_builtin in _git_config
 - completion: use __gitcomp_builtin in _git_commit
 - completion: use __gitcomp_builtin in _git_clone
 - completion: use __gitcomp_builtin in _git_clean
 - completion: use __gitcomp_builtin in _git_cherry_pick
 - completion: use __gitcomp_builtin in _git_checkout
 - completion: use __gitcomp_builtin in _git_branch
 - completion: use __gitcomp_builtin in _git_apply
 - completion: use __gitcomp_builtin in _git_am
 - completion: use __gitcomp_builtin in _git_add
 - git-completion.bash: introduce __gitcomp_builtin
 - parse-options: let OPT__FORCE take optional flags argument
 - parse-options: add OPT_xxx_F() variants
 - parse-options: support --git-completion-helper

 Teach parse-options API an option to help the completion script,
 and make use of the mechanism in command line completion.

 Will merge to 'next'.


* 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-02-05) 3 commits
 - worktree: teach "add" to check out existing branches
 - worktree: be clearer when "add" dwim-ery kicks in
 - worktree: improve message when creating a new worktree

 "git worktree add" learned to check out an existing branch.

 Expecting a reroll.
 cf. <CAPig+cRLohiqR_Drh7P0q3XbvC22WLjNwH0YLZo3dqFzZZuAPw@mail.gmail.com>
 cf. <CACsJy8BEKYqW+Ne_WY2RBaSbb9OKcjREtrawStj=eJsVsia_Jw@mail.gmail.com>
 The general idea is good, just end-user facing messages are found
 suboptimal.


* nm/tag-edit (2018-02-07) 1 commit
  (merged to 'next' on 2018-02-27 at 3bc8345213)
 + tag: add --edit option

 "git tag" learned an explicit "--edit" option that allows the
 message given via "-m" and "-F" to be further edited.

 Will merge to 'master'.


* sm/mv-dry-run-update (2018-02-07) 2 commits
  (merged to 'next' on 2018-02-27 at 17eef62ddf)
 + mv: remove unneeded 'if (!show_only)'
 + t7001: add test case for --dry-run

 Code clean-up.

 Will merge to 'master'.


* ab/fetch-prune (2018-02-09) 17 commits
  (merged to 'next' on 2018-02-27 at eafb648dd9)
 + fetch: make the --prune-tags work with <url>
 + fetch: add a --prune-tags option and fetch.pruneTags config
 + fetch tests: add scaffolding for the new fetch.pruneTags
 + git-fetch & config doc: link to the new PRUNING section
 + git remote doc: correct dangerous lies about what prune does
 + git fetch doc: add a new section to explain the ins & outs of pruning
 + fetch tests: fetch <url> <spec> as well as fetch [<remote>]
 + fetch tests: expand case/esac for later change
 + fetch tests: double quote a variable for interpolation
 + fetch tests: test --prune and refspec interaction
 + fetch tests: add a tag to be deleted to the pruning tests
 + fetch tests: re-arrange arguments for future readability
 + fetch tests: refactor in preparation for testing tag pruning
 + remote: add a macro for "refs/tags/*:refs/tags/*"
 + fetch: stop accessing "remote" variable indirectly
 + fetch: trivially refactor assignment to ref_nr
 + fetch: don't redundantly NULL something calloc() gave us

 Clarify how configured fetch refspecs interact with the "--prune"
 option of "git fetch", and also add a handy short-hand for getting
 rid of stale tags that are locally held.

 Will merge to 'master'.


* bw/c-plus-plus (2018-02-22) 37 commits
  (merged to 'next' on 2018-02-27 at daf85c03de)
 + replace: rename 'new' variables
 + trailer: rename 'template' variables
 + tempfile: rename 'template' variables
 + wrapper: rename 'template' variables
 + environment: rename 'namespace' variables
 + diff: rename 'template' variables
 + environment: rename 'template' variables
 + init-db: rename 'template' variables
 + unpack-trees: rename 'new' variables
 + trailer: rename 'new' variables
 + submodule: rename 'new' variables
 + split-index: rename 'new' variables
 + remote: rename 'new' variables
 + ref-filter: rename 'new' variables
 + read-cache: rename 'new' variables
 + line-log: rename 'new' variables
 + imap-send: rename 'new' variables
 + http: rename 'new' variables
 + entry: rename 'new' variables
 + diffcore-delta: rename 'new' variables
 + diff: rename 'new' variables
 + diff-lib: rename 'new' variable
 + commit: rename 'new' variables
 + combine-diff: rename 'new' variables
 + remote: rename 'new' variables
 + reflog: rename 'new' variables
 + pack-redundant: rename 'new' variables
 + help: rename 'new' variables
 + checkout: rename 'new' variables
 + apply: rename 'new' variables
 + apply: rename 'try' variables
 + diff: rename 'this' variables
 + rev-parse: rename 'this' variable
 + pack-objects: rename 'this' variables
 + blame: rename 'this' variables
 + object: rename function 'typename' to 'type_name'
 + object_info: change member name from 'typename' to 'type_name'

 Avoid using identifiers that clash with C++ keywords.  Even though
 it is not a goal to compile Git with C++ compilers, changes like
 this help use of code analysis tools that targets C++ on our
 codebase.

 Will merge to 'master'.


* nd/rebase-show-current-patch (2018-02-12) 3 commits
  (merged to 'next' on 2018-02-27 at 5a4e23a77c)
 + rebase: introduce and use pseudo-ref REBASE_HEAD
 + rebase: add --show-current-patch
 + am: add --show-current-patch

 The new "--show-current-patch" option gives an end-user facing way
 to get the diff being applied when "git rebase" (and "git am")
 stops with a conflict.

 Will merge to 'master'.


* nd/worktree-move (2018-02-12) 7 commits
 - worktree remove: allow it when $GIT_WORK_TREE is already gone
 - 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.

 Will merge to 'next'.


* cl/send-email-reply-to (2018-01-17) 2 commits
 - send-email: support separate "Reply-To" address
 - send-email: rename variables for "In-reply-to" to $foo_in_reply_to

 "git send-email" learned "--reply-to=<address>" option.

 May want to get the log messages updated.
 cf. <CAN0heSqxmLoh33i65JPhyQbmPaAcJcwrTCO+ZD4eb+qh8Pf8+w@mail.gmail.com>


* js/rebase-recreate-merge (2018-02-23) 12 commits
 - rebase -i: introduce --recreate-merges=[no-]rebase-cousins
 - pull: accept --rebase=recreate to recreate the branch topology
 - sequencer: handle post-rewrite for merge commands
 - sequencer: make refs generated by the `label` command worktree-local
 - rebase: introduce the --recreate-merges option
 - rebase-helper --make-script: introduce a flag to recreate merges
 - sequencer: fast-forward merge commits, if possible
 - sequencer: introduce the `merge` command
 - sequencer: introduce new commands to reset the revision
 - git-rebase--interactive: clarify arguments
 - sequencer: make rearrange_squash() a bit more obvious
 - sequencer: avoid using errno clobbered by rollback_lock_file()

 "git rebase" learned "--recreate-merges" to transplant the whole
 topology of commit graph elsewhere.

 Will merge to 'next'.


* bw/protocol-v2 (2018-03-01) 35 commits
 - 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 patterns when pushing
 - fetch: pass ref patterns when fetching
 - ls-remote: pass ref patterns when requesting a remote's refs
 - transport: convert transport_get_remote_refs to take a list of ref patterns
 - transport: convert get_refs_list to take a list of ref patterns
 - 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

 The beginning of the next-gen transfer protocol.


* ls/checkout-encoding (2018-03-01) 7 commits
 - convert: add round trip check based on 'core.checkRoundtripEncoding'
 - convert: add tracing for 'working-tree-encoding' attribute
 - 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
 - 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).

 Expecting a reroll; it is almost there, though.
 cf. <CAPig+cR81J3fTOtrgAumAs=RC5hqYFfSmeb-ru-Yf_ahFuBiew@mail.gmail.com>
 cf. <8EE59DC3-69E0-412B-AC50-5D348D6D5BE0@gmail.com>


* sb/blame-color (2018-02-13) 3 commits
 - builtin/blame: highlight recently changed lines
 - builtin/blame: add option to color metadata fields separately
 - builtin/blame: dim uninteresting metadata
 (this branch uses sb/color-h-cleanup.)

 Expecting a reroll.
 cf. https://public-inbox.org/git/20171110011002.10179-1-sbeller@google.com/#t
 error messages are funny, can segfault, ...


* en/rename-directory-detection (2018-02-27) 29 commits
 - merge-recursive: ensure we write updates for directory-renamed file
 - 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

 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.

 Will merge to 'next'.

^ permalink raw reply	[relevance 3%]

* [PATCH 06/11] packfile: add repository argument to reprepare_packed_git
  2018-02-28  1:05  7% [PATCH 00/11] Moving global state into the repository object (part 2) Stefan Beller
@ 2018-02-28  1:06  5% ` Stefan Beller
  0 siblings, 0 replies; 19+ results
From: Stefan Beller @ 2018-02-28  1:06 UTC (permalink / raw)
  To: git; +Cc: pclouds, Stefan Beller

See previous patch for explanation.

Signed-off-by: Stefan Beller <sbeller@google.com>
---
 builtin/gc.c           | 2 +-
 builtin/receive-pack.c | 3 ++-
 bulk-checkin.c         | 3 ++-
 fetch-pack.c           | 3 ++-
 packfile.c             | 2 +-
 packfile.h             | 3 ++-
 sha1_file.c            | 2 +-
 7 files changed, 11 insertions(+), 7 deletions(-)

diff --git a/builtin/gc.c b/builtin/gc.c
index 97f34ae9fe0..c16020ef42a 100644
--- a/builtin/gc.c
+++ b/builtin/gc.c
@@ -478,7 +478,7 @@ int cmd_gc(int argc, const char **argv, const char *prefix)
 		return error(FAILED_RUN, rerere.argv[0]);
 
 	report_garbage = report_pack_garbage;
-	reprepare_packed_git();
+	reprepare_packed_git(the_repository);
 	if (pack_garbage.nr > 0)
 		clean_pack_garbage();
 
diff --git a/builtin/receive-pack.c b/builtin/receive-pack.c
index 954fc72c7cb..8b03a6e03dc 100644
--- a/builtin/receive-pack.c
+++ b/builtin/receive-pack.c
@@ -1,4 +1,5 @@
 #include "builtin.h"
+#include "repository.h"
 #include "config.h"
 #include "lockfile.h"
 #include "pack.h"
@@ -1778,7 +1779,7 @@ static const char *unpack(int err_fd, struct shallow_info *si)
 		status = finish_command(&child);
 		if (status)
 			return "index-pack abnormal exit";
-		reprepare_packed_git();
+		reprepare_packed_git(the_repository);
 	}
 	return NULL;
 }
diff --git a/bulk-checkin.c b/bulk-checkin.c
index 3310fd210a1..eadc2d51720 100644
--- a/bulk-checkin.c
+++ b/bulk-checkin.c
@@ -3,6 +3,7 @@
  */
 #include "cache.h"
 #include "bulk-checkin.h"
+#include "repository.h"
 #include "csum-file.h"
 #include "pack.h"
 #include "strbuf.h"
@@ -57,7 +58,7 @@ static void finish_bulk_checkin(struct bulk_checkin_state *state)
 
 	strbuf_release(&packname);
 	/* Make objects we just wrote available to ourselves */
-	reprepare_packed_git();
+	reprepare_packed_git(the_repository);
 }
 
 static int already_written(struct bulk_checkin_state *state, unsigned char sha1[])
diff --git a/fetch-pack.c b/fetch-pack.c
index 8253d746e0c..eac5928a27b 100644
--- a/fetch-pack.c
+++ b/fetch-pack.c
@@ -1,4 +1,5 @@
 #include "cache.h"
+#include "repository.h"
 #include "config.h"
 #include "lockfile.h"
 #include "refs.h"
@@ -1192,7 +1193,7 @@ struct ref *fetch_pack(struct fetch_pack_args *args,
 	prepare_shallow_info(&si, shallow);
 	ref_cpy = do_fetch_pack(args, fd, ref, sought, nr_sought,
 				&si, pack_lockfile);
-	reprepare_packed_git();
+	reprepare_packed_git(the_repository);
 	update_shallow(args, sought, nr_sought, &si);
 	clear_shallow_info(&si);
 	return ref_cpy;
diff --git a/packfile.c b/packfile.c
index 6e8b98ab405..6ea50230aab 100644
--- a/packfile.c
+++ b/packfile.c
@@ -899,7 +899,7 @@ void prepare_packed_git_the_repository(void)
 	the_repository->objects.packed_git_initialized = 1;
 }
 
-void reprepare_packed_git(void)
+void reprepare_packed_git_the_repository(void)
 {
 	the_repository->objects.approximate_object_count_valid = 0;
 	the_repository->objects.packed_git_initialized = 0;
diff --git a/packfile.h b/packfile.h
index 39eb590b2ae..9afbf73657e 100644
--- a/packfile.h
+++ b/packfile.h
@@ -36,7 +36,8 @@ extern void (*report_garbage)(unsigned seen_bits, const char *path);
 
 #define prepare_packed_git(r) prepare_packed_git_##r()
 extern void prepare_packed_git_the_repository(void);
-extern void reprepare_packed_git(void);
+#define reprepare_packed_git(r) reprepare_packed_git_##r()
+extern void reprepare_packed_git_the_repository(void);
 extern void install_packed_git(struct repository *r, struct packed_git *pack);
 
 /*
diff --git a/sha1_file.c b/sha1_file.c
index 36282acb1a8..0b9fefaaf02 100644
--- a/sha1_file.c
+++ b/sha1_file.c
@@ -1281,7 +1281,7 @@ int sha1_object_info_extended(const unsigned char *sha1, struct object_info *oi,
 			return 0;
 
 		/* Not a loose object; someone else may have just packed it. */
-		reprepare_packed_git();
+		reprepare_packed_git(the_repository);
 		if (find_pack_entry(real, &e))
 			break;
 
-- 
2.16.2.395.g2e18187dfd-goog


^ permalink raw reply related	[relevance 5%]

* [PATCH 00/11] Moving global state into the repository object (part 2)
@ 2018-02-28  1:05  7% Stefan Beller
  2018-02-28  1:06  5% ` [PATCH 06/11] packfile: add repository argument to reprepare_packed_git Stefan Beller
  0 siblings, 1 reply; 19+ results
From: Stefan Beller @ 2018-02-28  1:05 UTC (permalink / raw)
  To: git; +Cc: pclouds, Stefan Beller

This applies on top of origin/sb/object-store and is the continuation of
that series, adding the repository as a context argument to functions.

This series focusses on packfile handling, exposing (re)prepare_packed_git
and find_pack_entry to a repository argument.

Looking at the diffstat of "Delete ignore_env member in struct repository"[1]
and "Fix initializing the_hash_algo"[2], which also build on origin/sb/object-store, 
this series looks rather orthogonal to those, so I would not a lot of merge
conflicts.

[1] https://public-inbox.org/git/20180227095846.9238-1-pclouds@gmail.com/
[2] https://public-inbox.org/git/20180225111840.16421-1-pclouds@gmail.com/

The third series (after this one) will focus on object replacement,
such that we can migrate sha1_object_info_extended at the end of the
third series.

Thanks,
Stefan

Stefan Beller (11):
  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

 builtin/count-objects.c  |  2 +-
 builtin/fsck.c           |  2 +-
 builtin/gc.c             |  4 +--
 builtin/pack-objects.c   |  2 +-
 builtin/pack-redundant.c |  2 +-
 builtin/receive-pack.c   |  3 +-
 bulk-checkin.c           |  3 +-
 fast-import.c            |  4 +--
 fetch-pack.c             |  3 +-
 http-backend.c           |  2 +-
 http.c                   |  2 +-
 pack-bitmap.c            |  2 +-
 packfile.c               | 72 +++++++++++++++++++---------------------
 packfile.h               | 12 ++++---
 server-info.c            |  2 +-
 sha1_file.c              |  8 ++---
 sha1_name.c              |  4 +--
 17 files changed, 66 insertions(+), 63 deletions(-)

-- 
2.16.2.395.g2e18187dfd-goog


^ permalink raw reply	[relevance 7%]

Results 1-19 of 19 | reverse | options above
-- pct% links below jump to the message on this page, permalinks otherwise --
2018-02-28  1:05  7% [PATCH 00/11] Moving global state into the repository object (part 2) Stefan Beller
2018-02-28  1:06  5% ` [PATCH 06/11] packfile: add repository argument to reprepare_packed_git Stefan Beller
2018-03-01 22:20  3% What's cooking in git.git (Mar 2018, #01; Thu, 1) Junio C Hamano
2018-03-03  2:54     [PATCH 00/11] Moving global state into the repository object (part 2) Duy Nguyen
2018-03-03 11:35     ` [PATCH 00/44] reroll nd/remove-ignore-env.. sb/object-store and sb/packfiles Nguyễn Thái Ngọc Duy
2018-03-03 11:36  5%   ` [PATCH 38/44] packfile: add repository argument to reprepare_packed_git Nguyễn Thái Ngọc Duy
2018-03-23 17:45  7%   ` [PATCH 00/12] sb/packfiles-in-repository updates Nguyễn Thái Ngọc Duy
2018-03-23 17:45  5%     ` [PATCH 06/12] packfile: add repository argument to reprepare_packed_git Nguyễn Thái Ngọc Duy
2018-03-23 20:15  0%     ` [PATCH 00/12] sb/packfiles-in-repository updates Brandon Williams
2018-03-06 23:34  4% What's cooking in git.git (Mar 2018, #02; Tue, 6) Junio C Hamano
2018-03-15  1:34  4% What's cooking in git.git (Mar 2018, #03; Wed, 14) Junio C Hamano
2018-03-20 22:19  4% What's cooking in git.git (Mar 2018, #04; Tue, 20) Junio C Hamano
2018-03-28 19:58  4% What's cooking in git.git (Mar 2018, #05; Wed, 28) Junio C Hamano
2018-03-30 20:38  4% What's cooking in git.git (Mar 2018, #06; Fri, 30) Junio C Hamano
2018-04-09 10:21  4% What's cooking in git.git (Apr 2018, #01; Mon, 9) Junio C Hamano
2018-04-09 15:31  0% ` Duy Nguyen
2018-04-09 17:23  0%   ` Stefan Beller
2018-04-17  6:07  3% What's cooking in git.git (Apr 2018, #02; Tue, 17) Junio C Hamano
2018-05-30 22:47  4% [ANNOUNCE] Git v2.18.0-rc0 Junio C Hamano
2018-06-04 13:53  3% [ANNOUNCE] Git v2.18.0-rc1 Junio C Hamano
2018-06-21 19:27  3% [ANNOUNCE] Git v2.18.0 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).