Link [ pkgsrc | NetBSD | pkgsrc git mirror | PR fulltext-search | netbsd commit viewer ]


   
        usage: [branch:branch] [user:user] [path[@revision]] keyword [... [-excludekeyword [...]]] (e.g. branch:MAIN pkgtools/pkg)




switch to index mode

recent branches: MAIN (8m)  pkgsrc-2024Q1 (9d)  pkgsrc-2023Q4 (56d)  pkgsrc-2023Q2 (88d)  pkgsrc-2023Q3 (168d) 

2024-05-27 08:19:20 UTC Now

2022-05-03 01:26:55 UTC MAIN commitmail json YAML

git: update to 2.36.0

Git 2.36 Release Notes
======================

Updates since Git 2.35
----------------------

Backward compatibility warts

* "git name-rev --stdin" has been deprecated and issues a warning
  when used; use "git name-rev --annotate-stdin" instead.

* "git clone --filter=... --recurse-submodules" only makes the
  top-level a partial clone, while submodules are fully cloned.  This
  behaviour is changed to pass the same filter down to the submodules.

* With the fixes for CVE-2022-24765 that are common with versions of
  Git 2.30.4, 2.31.3, 2.32.2, 2.33.3, 2.34.3, and 2.35.3, Git has
  been taught not to recognise repositories owned by other users, in
  order to avoid getting affected by their config files and hooks.
  You can list the path to the safe/trusted repositories that may be
  owned by others on a multi-valued configuration variable
  `safe.directory` to override this behaviour, or use '*' to declare
  that you trust anything.

Note to those who build from the source

* Since Git 2.31, our source assumed that the compiler you use to
  build Git supports variadic macros, with an easy-to-use escape
  hatch to allow compilation without variadic macros with an request
  to report that you had to use the escape hatch to the list.
  Because we haven't heard from anybody who actually needed to use
  the escape hatch, it has been removed, making support of variadic
  macros a hard requirement.

UI, Workflows & Features

* Assorted updates to "git cat-file", especially "-h".

* The command line completion (in contrib/) learns to complete
  arguments to give to "git sparse-checkout" command.

* "git log --remerge-diff" shows the difference from mechanical merge
  result and the result that is actually recorded in a merge commit.

* "git log" and friends learned an option --exclude-first-parent-only
  to propagate UNINTERESTING bit down only along the first-parent
  chain, just like --first-parent option shows commits that lack the
  UNINTERESTING bit only along the first-parent chain.

* The command line completion script (in contrib/) learned to
  complete all Git subcommands, including the ones that are normally
  hidden, when GIT_COMPLETION_SHOW_ALL_COMMANDS is used.

* "git branch" learned the "--recurse-submodules" option.

* A user can forget to make a script file executable before giving
  it to "git bisect run".  In such a case, all tests will exit with
  126 or 127 error codes, even on revisions that are marked as good.
  Try to recognize this situation and stop iteration early.

* When "index-pack" dies due to incoming data exceeding the maximum
  allowed input size, include the value of the limit in the error
  message.

* The error message given by "git switch HEAD~4" has been clarified
  to suggest the "--detach" option that is required.

* In sparse-checkouts, files mis-marked as missing from the working tree
  could lead to later problems.  Such files were hard to discover, and
  harder to correct.  Automatically detecting and correcting the marking
  of such files has been added to avoid these problems.

* "git cat-file" learns "--batch-command" mode, which is a more
  flexible interface than the existing "--batch" or "--batch-check"
  modes, to allow different kinds of inquiries made.

* The level of verbose output from the ort backend during inner merge
  has been aligned to that of the recursive backend.

* "git remote rename A B", depending on the number of remote-tracking
  refs involved, takes long time renaming them.  The command has been
  taught to show progress bar while making the user wait.

* Bundle file format gets extended to allow a partial bundle,
  filtered by similar criteria you would give when making a
  partial/lazy clone.

* A new built-in userdiff driver for kotlin has been added.

* "git repack" learned a new configuration to disable triggering of
  age-old "update-server-info" command, which is rarely useful these
  days.

* "git stash" does not allow subcommands it internally runs as its
  implementation detail, except for "git reset", to emit messages;
  now "git reset" part has also been squelched.

* "git ls-tree" learns "--oid-only" option, similar to "--name-only",
  and more generalized "--format" option.

* "git fetch --refetch" learned to fetch everything without telling
  the other side what we already have, which is useful when you
  cannot trust what you have in the local object store.

* "git branch" gives hint when branch tracking cannot be established
  because fetch refspecs from multiple remote repositories overlap.

* "git worktree list --porcelain" did not c-quote pathnames and lock
  reasons with unsafe bytes correctly, which is worked around by
  introducing NUL terminated output format with "-z".

Performance, Internal Implementation, Development Support etc.

* "git apply" (ab)used the util pointer of the string-list to keep
  track of how each symbolic link needs to be handled, which has been
  simplified by using strset.

* Fix a hand-rolled alloca() imitation that may have violated
  alignment requirement of data being sorted in compatibility
  implementation of qsort_s() and stable qsort().

* Use the parse-options API in "git reflog" command.

* The conditional inclusion mechanism of configuration files using
  "[includeIf <condition>]" learns to base its decision on the
  URL of the remote repository the repository interacts with.
  (merge 399b198489 jt/conditional-config-on-remote-url later to maint).

* "git name-rev --stdin" does not behave like usual "--stdin" at
  all.  Start the process of renaming it to "--annotate-stdin".
  (merge a2585719b3 jc/name-rev-stdin later to maint).

* "git update-index", "git checkout-index", and "git clean" are
  taught to work better with the sparse checkout feature.

* Use an internal call to reset_head() helper function instead of
  spawning "git checkout" in "rebase", and update code paths that are
  involved in the change.

* Messages "ort" merge backend prepares while dealing with conflicted
  paths were unnecessarily confusing since it did not differentiate
  inner merges and outer merges.

* Small modernization of the rerere-train script (in contrib/).

* Use designated initializers we started using in mid 2017 in more
  parts of the codebase that are relatively quiescent.

* Improve failure case behaviour of xdiff library when memory
  allocation fails.

* General clean-up in reftable implementation, including
  clarification of the API documentation, tightening the code to
  honor documented length limit, etc.

* Remove the escape hatch we added when we introduced the weather
  balloon to use variadic macros unconditionally, to make it official
  that we now have a hard dependency on the feature.

* Makefile refactoring with a bit of suffixes rule stripping to
  optimize the runtime overhead.

* "git stash drop" is reimplemented as an internal call to
  reflog_delete() function, instead of invoking "git reflog delete"
  via run_command() API.

* Count string_list items in size_t, not "unsigned int".

* The single-key interactive operation used by "git add -p" has been
  made more robust.

* Remove unneeded <meta http-equiv=content-type...> from gitweb
  output.

* "git name-rev" learned to use the generation numbers when setting
  the lower bound of searching commits used to explain the revision,
  when available, instead of committer time.

* Replace core.fsyncObjectFiles with two new configuration variables,
  core.fsync and core.fsyncMethod.

* Updates to refs traditionally weren't fsync'ed, but we can
  configure using core.fsync variable to do so.

* "git reflog" command now uses parse-options API to parse its
  command line options.

Fixes since v2.35
-----------------

* "rebase" and "stash" in secondary worktrees are broken in
  Git 2.35.0, which has been corrected.

* "git pull --rebase" ignored the rebase.autostash configuration
  variable when the remote history is a descendant of our history,
  which has been corrected.
  (merge 3013d98d7a pb/pull-rebase-autostash-fix later to maint).

* "git update-index --refresh" has been taught to deal better with
  racy timestamps (just like "git status" already does).
  (merge 2ede073fd2 ms/update-index-racy later to maint).

* Avoid tests that are run under GIT_TRACE2 set from failing
  unnecessarily.
  (merge 944d808e42 js/test-unset-trace2-parents later to maint).

* The merge-ort misbehaved when merge.renameLimit configuration is
  set too low and failed to find all renames.
  (merge 9ae39fef7f en/merge-ort-restart-optim-fix later to maint).

* We explain that revs come first before the pathspec among command
  line arguments, but did not spell out that dashed options come
  before other args, which has been corrected.
  (merge c11f95010c tl/doc-cli-options-first later to maint).

* "git add -p" rewritten in C regressed hunk splitting in some cases,
  which has been corrected.
  (merge 7008ddc645 pw/add-p-hunk-split-fix later to maint).

* "git fetch --negotiate-only" is an internal command used by "git
  push" to figure out which part of our history is missing from the
  other side.  It should never recurse into submodules even when
  fetch.recursesubmodules configuration variable is set, nor it
  should trigger "gc".  The code has been tightened up to ensure it
  only does common ancestry discovery and nothing else.
  (merge de4eaae63a gc/fetch-negotiate-only-early-return later to maint).

* The code path that verifies signatures made with ssh were made to
  work better on a system with CRLF line endings.
  (merge caeef01ea7 fs/ssh-signing-crlf later to maint).

* "git sparse-checkout init" failed to write into $GIT_DIR/info
  directory when the repository was created without one, which has
  been corrected to auto-create it.
  (merge 7f44842ac1 jt/sparse-checkout-leading-dir-fix later to maint).

* Cloning from a repository that does not yet have any branches or
  tags but has other refs resulted in a "remote transport reported
  error", which has been corrected.
  (merge dccea605b6 jt/clone-not-quite-empty later to maint).

* Mark in various places in the code that the sparse index and the
  split index features are mutually incompatible.
  (merge 451b66c533 js/sparse-vs-split-index later to maint).

* Update the logic to compute alignment requirement for our mem-pool.
  (merge e38bcc66d8 jc/mem-pool-alignment later to maint).

* Pick a better random number generator and use it when we prepare
  temporary filenames.
  (merge 47efda967c bc/csprng-mktemps later to maint).

* Update the contributor-facing documents on proposed log messages.
  (merge cdba0295b0 jc/doc-log-messages later to maint).

* When "git fetch --prune" failed to prune the refs it wanted to
  prune, the command issued error messages but exited with exit
  status 0, which has been corrected.
  (merge c9e04d905e tg/fetch-prune-exit-code-fix later to maint).

* Problems identified by Coverity in the reftable code have been
  corrected.
  (merge 01033de49f hn/reftable-coverity-fixes later to maint).

* A bug that made multi-pack bitmap and the object order out-of-sync,
  making the .midx data corrupt, has been fixed.
  (merge f8b60cf99b tb/midx-bitmap-corruption-fix later to maint).

* The build procedure has been taught to notice older version of zlib
  and enable our replacement uncompress2() automatically.
  (merge 07564773c2 ab/auto-detect-zlib-compress2 later to maint).

* Interaction between fetch.negotiationAlgorithm and
  feature.experimental configuration variables has been corrected.
  (merge 714edc620c en/fetch-negotiation-default-fix later to maint).

* "git diff --diff-filter=aR" is now parsed correctly.
  (merge 75408ca949 js/diff-filter-negation-fix later to maint).

* When "git subtree" wants to create a merge, it used "git merge" and
  let it be affected by end-user's "merge.ff" configuration, which
  has been corrected.
  (merge 9158a3564a tk/subtree-merge-not-ff-only later to maint).

* Unlike "git apply", "git patch-id" did not handle patches with
  hunks that has only 1 line in either preimage or postimage, which
  has been corrected.
  (merge 757e75c81e jz/patch-id-hunk-header-parsing-fix later to maint).

* "receive-pack" checks if it will do any ref updates (various
  conditions could reject a push) before received objects are taken
  out of the temporary directory used for quarantine purposes, so
  that a push that is known-to-fail will not leave crufts that a
  future "gc" needs to clean up.
  (merge 5407764069 cb/clear-quarantine-early-on-all-ref-update-errors later to maint).

* When there is no object to write .bitmap file for, "git
  multi-pack-index" triggered an error, instead of just skipping,
  which has been corrected.
  (merge eb57277ba3 tb/midx-no-bitmap-for-no-objects later to maint).

* "git cmd -h" outside a repository should error out cleanly for many
  commands, but instead it hit a BUG(), which has been corrected.
  (merge 87ad07d735 js/short-help-outside-repo-fix later to maint).

* "working tree" and "per-worktree ref" were in glossary, but
  "worktree" itself wasn't, which has been corrected.
  (merge 2df5387ed0 jc/glossary-worktree later to maint).

* L10n support for a few error messages.
  (merge 3d3c23b3a7 bs/forbid-i18n-of-protocol-token-in-fetch-pack later to maint).

* Test modernization.
  (merge d4fe066e4b sy/t0001-use-path-is-helper later to maint).

* "git log --graph --graph" used to leak a graph structure, and there
  was no way to countermand "--graph" that appear earlier on the
  command line.  A "--no-graph" option has been added and resource
  leakage has been plugged.

* Error output given in response to an ambiguous object name has been
  improved.
  (merge 3a73c1dfaf ab/ambiguous-object-name later to maint).

* "git sparse-checkout" wants to work with per-worktree configuration,
  but did not work well in a worktree attached to a bare repository.
  (merge 3ce1138272 ds/sparse-checkout-requires-per-worktree-config later to maint).

* Setting core.untrackedCache to true failed to add the untracked
  cache extension to the index.

* Workaround we have for versions of PCRE2 before their version 10.36
  were in effect only for their versions newer than 10.36 by mistake,
  which has been corrected.
  (merge 97169fc361 rs/pcre-invalid-utf8-fix-fix later to maint).

* Document Taylor as a new member of Git PLC at SFC.  Welcome.
  (merge e8d56ca863 tb/coc-plc-update later to maint).

* "git checkout -b branch/with/multi/level/name && git stash" only
  recorded the last level component of the branch name, which has
  been corrected.

* Check the return value from parse_tree_indirect() to turn segfaults
  into calls to die().
  (merge 8d2eaf649a gc/parse-tree-indirect-errors later to maint).

* Newer version of GPGSM changed its output in a backward
  incompatible way to break our code that parses its output.  It also
  added more processes our tests need to kill when cleaning up.
  Adjustments have been made to accommodate these changes.
  (merge b0b70d54c4 fs/gpgsm-update later to maint).

* The untracked cache newly computed weren't written back to the
  on-disk index file when there is no other change to the index,
  which has been corrected.

* "git config -h" did not describe the "--type" option correctly.
  (merge 5445124fad mf/fix-type-in-config-h later to maint).

* The way generation number v2 in the commit-graph files are
  (not) handled has been corrected.
  (merge 6dbf4b8172 ds/commit-graph-gen-v2-fixes later to maint).

* The method to trigger malloc check used in our tests no longer work
  with newer versions of glibc.
  (merge baedc59543 ep/test-malloc-check-with-glibc-2.34 later to maint).

* When "git fetch --recurse-submodules" grabbed submodule commits
  that would be needed to recursively check out newly fetched commits
  in the superproject, it only paid attention to submodules that are
  in the current checkout of the superproject.  We now do so for all
  submodules that have been run "git submodule init" on.

* "git rebase $base $non_branch_commit", when $base is an ancestor or
  the $non_branch_commit, modified the current branch, which has been
  corrected.

* When "shallow" information is updated, we forgot to update the
  in-core equivalent, which has been corrected.

* When creating a loose object file, we didn't report the exact
  filename of the file we failed to fsync, even though the
  information was readily available, which has been corrected.

* "git am" can read from the standard input when no mailbox is given
  on the command line, but the end-user gets no indication when it
  happens, making Git appear stuck.
  (merge 7b20af6a06 jc/mailsplit-warn-on-tty later to maint).

* "git mv" failed to refresh the cached stat information for the
  entry it moved.
  (merge b7f9130a06 vd/mv-refresh-stat later to maint).

(gutteridge)