{"thread":{"id":"53064","subject":"[ANNOUNCE] Git v2.26.0","startedAt":"2020-03-23T01:10:25Z","lastAt":"2020-03-24T01:05:39Z","messageCount":2,"participants":["Junio C Hamano","Elijah Newren"],"isPatch":false,"patchVersion":null,"patchTotal":null},"messages":[{"id":"393752","messageId":"xmqqa7477u6j.fsf@gitster.c.googlers.com","threadId":"53064","inReplyTo":null,"subject":"[ANNOUNCE] Git v2.26.0","fromName":"Junio C Hamano","fromEmail":"gitster@pobox.com","sentAt":"2020-03-23T01:10:12Z","receivedAt":"2020-03-23T01:10:25Z","isPatch":false,"sender":{"key":"gitster@pobox.com","avatar":"https://avatars.githubusercontent.com/u/54884?v=4"},"body":"The latest feature release Git v2.26.0 is now available at the\nusual places.  It is comprised of 504 non-merge commits since\nv2.25.0, contributed by 64 people, 12 of which are new faces.\n\nThe tarballs are found at:\n\n    https://www.kernel.org/pub/software/scm/git/\n\nThe following public repositories all have a copy of the 'v2.26.0'\ntag and the 'master' branch that the tag points at:\n\n  url = https://kernel.googlesource.com/pub/scm/git/git\n  url = git://repo.or.cz/alt-git.git\n  url = https://github.com/gitster/git\n\nNew contributors whose contributions weren't in v2.25.0 are as follows.\nWelcome to the Git development community!\n\n  Abhishek Kumar, Benno Evers, Emir Sarı, Eyal Soha, Harald\n  van Dijk, Jacques Bodin-Hullin, Kir Kolyshkin, Lucius Hu,\n  Luke Bonanomi, Peter Kaestle, Rasmus Jonsson, and Shourya Shukla.\n\nReturning contributors who helped this release are as follows.\nThanks for your continued support.\n\n  Alban Gruin, Alessandro Menti, Alexander Shopov, Alexandr\n  Miloslavskiy, Beat Bolli, Bert Wesarg, brian m. carlson,\n  Christian Stimming, Christopher Diaz Riveros, David Turner,\n  Denton Liu, Derrick Stolee, Đoàn Trần Công Danh, Elijah\n  Newren, Emily Shaffer, Eric Sunshine, Fangyi Zhou, Hans\n  Jerry Illikainen, Hariom Verma, Heba Waly, Jean-Noël Avila,\n  Jeff King, Jiang Xin, Johan Herland, Johannes Berg, Johannes\n  Schindelin, Johannes Sixt, Jonathan Nieder, Jonathan Tan, Jordi\n  Mas, Junio C Hamano, Kevin Willford, Kyle Meyer, Luke Diamand,\n  Martin Ågren, Masaya Suzuki, Matheus Tavares, Matthew Rogers,\n  Matthias Rüster, Miriam Rubio, Paolo Bonzini, Peter Krefting,\n  Philippe Blain, Pranit Bauva, Pratyush Yadav, Ralf Thielow,\n  René Scharfe, SZEDER Gábor, Tanushree Tumane, Taylor Blau,\n  Trần Ngọc Quân, and Yi-Jyun Pan.\n\n----------------------------------------------------------------\n\nGit 2.26 Release Notes\n======================\n\nUpdates since v2.25\n-------------------\n\nBackward compatibility notes\n\n * \"git rebase\" uses a different backend that is based on the 'merge'\n   machinery by default.  There are a few known differences in the\n   behaviour from the traditional machinery based on patch+apply.\n\n   If your workflow is negatively affected by this change, please\n   report it to git@vger.kernel.org so that we can take a look into\n   it.  After doing so, you can set the 'rebase.backend' configuration\n   variable to 'apply', in order to use the old default behaviour in\n   the meantime.\n\n\nUI, Workflows & Features\n\n * Sample credential helper for using .netrc has been updated to work\n   out of the box.\n\n * gpg.minTrustLevel configuration variable has been introduced to\n   tell various signature verification codepaths the required minimum\n   trust level.\n\n * The command line completion (in contrib/) learned to complete\n   subcommands and arguments to \"git worktree\".\n\n * Disambiguation logic to tell revisions and pathspec apart has been\n   tweaked so that backslash-escaped glob special characters do not\n   count in the \"wildcards are pathspec\" rule.\n\n * One effect of specifying where the GIT_DIR is (either with the\n   environment variable, or with the \"git --git-dir=<where> cmd\"\n   option) is to disable the repository discovery.  This has been\n   placed a bit more stress in the documentation, as new users often\n   get confused.\n\n * Two help messages given when \"git add\" notices the user gave it\n   nothing to add have been updated to use advise() API.\n\n * A new version of fsmonitor-watchman hook has been introduced, to\n   avoid races.\n\n * \"git config\" learned to show in which \"scope\", in addition to in\n   which file, each config setting comes from.\n\n * The basic 7 colors learned the brighter counterparts\n   (e.g. \"brightred\").\n\n * \"git sparse-checkout\" learned a new \"add\" subcommand.\n\n * A configuration element used for credential subsystem can now use\n   wildcard pattern to specify for which set of URLs the entry\n   applies.\n\n * \"git clone --recurse-submodules --single-branch\" now uses the same\n   single-branch option when cloning the submodules.\n\n * \"git rm\" and \"git stash\" learns the new \"--pathspec-from-file\"\n   option.\n\n * \"git am --show-current-patch\" is a way to show the piece of e-mail\n   for the stopped step, which is not suitable to directly feed \"git\n   apply\" (it is designed to be a good \"git am\" input).  It learned a\n   new option to show only the patch part.\n\n * Handling of conflicting renames in merge-recursive have further\n   been made consistent with how existing codepaths try to mimic what\n   is done to add/add conflicts.\n\n\nPerformance, Internal Implementation, Development Support etc.\n\n * Tell .editorconfig that in this project, *.txt files are indented\n   with tabs.\n\n * The test-lint machinery knew to check \"VAR=VAL shell_function\"\n   construct, but did not check \"VAR= shell_function\", which has been\n   corrected.\n\n * Replace \"git config --bool\" calls with \"git config --type=bool\" in\n   sample templates.\n\n * The effort to move \"git-add--interactive\" to C continues.\n\n * Improve error message generation for \"git submodule add\".\n\n * Preparation of test scripts for the day when the object names will\n   use SHA-256 continues.\n\n * Warn programmers about pretend_object_file() that allows the code\n   to tentatively use in-core objects.\n\n * The way \"git pack-objects\" reuses objects stored in existing pack\n   to generate its result has been improved.\n\n * The transport protocol version 2 becomes the default one.\n\n * Traditionally, we avoided threaded grep while searching in objects\n   (as opposed to files in the working tree) as accesses to the object\n   layer is not thread-safe.  This limitation is getting lifted.\n\n * \"git rebase -i\" (and friends) used to unnecessarily check out the\n   tip of the branch to be rebased, which has been corrected.\n\n * A low-level API function get_oid(), that accepts various ways to\n   name an object, used to issue end-user facing error messages\n   without l10n, which has been updated to be translatable.\n\n * Unneeded connectivity check is now disabled in a partial clone when\n   fetching into it.\n\n * Some rough edges in the sparse-checkout feature, especially around\n   the cone mode, have been cleaned up.\n\n * The diff-* plumbing family of subcommands now pay attention to the\n   diff.wsErrorHighlight configuration, which has been ignored before;\n   this allows \"git add -p\" to also show the whitespace problems to\n   the end user.\n\n * Some codepaths were given a repository instance as a parameter to\n   work in the repository, but passed the_repository instance to its\n   callees, which has been cleaned up (somewhat).\n\n * Memory footprint and performance of \"git name-rev\" has been\n   improved.\n\n * The object reachability bitmap machinery and the partial cloning\n   machinery were not prepared to work well together, because some\n   object-filtering criteria that partial clones use inherently rely\n   on object traversal, but the bitmap machinery is an optimization\n   to bypass that object traversal.  There however are some cases\n   where they can work together, and they were taught about them.\n\n * \"git rebase\" has learned to use the merge backend (i.e. the\n   machinery that drives \"rebase -i\") by default, while allowing\n   \"--apply\" option to use the \"apply\" backend (e.g. the moral\n   equivalent of \"format-patch piped to am\").  The rebase.backend\n   configuration variable can be set to customize.\n\n * Underlying machinery of \"git bisect--helper\" is being refactored\n   into pieces that are more easily reused.\n\n\nFixes since v2.25\n-----------------\n\n * \"git commit\" gives output similar to \"git status\" when there is\n   nothing to commit, but without honoring the advise.statusHints\n   configuration variable, which has been corrected.\n\n * has_object_file() said \"no\" given an object registered to the\n   system via pretend_object_file(), making it inconsistent with\n   read_object_file(), causing lazy fetch to attempt fetching an\n   empty tree from promisor remotes.\n\n * Complete an update to tutorial that encourages \"git switch\" over\n   \"git checkout\" that was done only half-way.\n\n * C pedantry ;-) fix.\n\n * The code that tries to skip over the entries for the paths in a\n   single directory using the cache-tree was not careful enough\n   against corrupt index file.\n\n * Reduce unnecessary round-trip when running \"ls-remote\" over the\n   stateless RPC mechanism.\n\n * \"git restore --staged\" did not correctly update the cache-tree\n   structure, resulting in bogus trees to be written afterwards, which\n   has been corrected.\n\n * The code recently added to move to the entry beyond the ones in the\n   same directory in the index in the sparse-cone mode did not count\n   the number of entries to skip over incorrectly, which has been\n   corrected.\n\n * Rendering by \"git log --graph\" of ancestry lines leading to a merge\n   commit were made suboptimal to waste vertical space a bit with a\n   recent update, which has been corrected.\n\n * Work around test breakages caused by custom regex engine used in\n   libasan, when address sanitizer is used with more recent versions\n   of gcc and clang.\n\n * Minor bugfixes to \"git add -i\" that has recently been rewritten in C.\n\n * \"git fetch --refmap=\" option has got a better documentation.\n\n * \"git checkout X\" did not correctly fail when X is not a local\n   branch but could name more than one remote-tracking branches\n   (i.e. to be dwimmed as the starting point to create a corresponding\n   local branch), which has been corrected.\n   (merge fa74180d08 am/checkout-file-and-ref-ref-ambiguity later to maint).\n\n * Corner case bugs in \"git clean\" that stems from a (necessarily for\n   performance reasons) awkward calling convention in the directory\n   enumeration API has been corrected.\n\n * A fetch that is told to recursively fetch updates in submodules\n   inevitably produces reams of output, and it becomes hard to spot\n   error messages.  The command has been taught to enumerate\n   submodules that had errors at the end of the operation.\n   (merge 0222540827 es/fetch-show-failed-submodules-atend later to maint).\n\n * The \"--recurse-submodules\" option of various subcommands did not\n   work well when run in an alternate worktree, which has been\n   corrected.\n\n * Futureproofing a test not to depend on the current implementation\n   detail.\n\n * Running \"git rm\" on a submodule failed unnecessarily when\n   .gitmodules is only cache-dirty, which has been corrected.\n\n * C pedantry ;-) fix.\n\n * \"git grep --no-index\" should not get affected by the contents of\n   the .gitmodules file but when \"--recurse-submodules\" is given or\n   the \"submodule.recurse\" variable is set, it did.  Now these\n   settings are ignored in the \"--no-index\" mode.\n\n * Technical details of the bundle format has been documented.\n\n * Unhelpful warning messages during documentation build have been squelched.\n\n * \"git rebase -i\" identifies existing commits in its todo file with\n   their abbreviated object name, which could become ambiguous as it\n   goes to create new commits, and has a mechanism to avoid ambiguity\n   in the main part of its execution.  A few other cases however were\n   not covered by the protection against ambiguity, which has been\n   corrected.\n\n * Allow the rebase.missingCommitsCheck configuration to kick in when\n   \"rebase --edit-todo\" and \"rebase --continue\" restarts the procedure.\n   (merge 5a5445d878 ag/edit-todo-drop-check later to maint).\n\n * The way \"git submodule status\" reports an initialized but not yet\n   populated submodule has not been reimplemented correctly when a\n   part of the \"git submodule\" command was rewritten in C, which has\n   been corrected.\n   (merge f38c92452d pk/status-of-uncloned-submodule later to maint).\n\n * The code to automatically shrink the fan-out in the notes tree had\n   an off-by-one bug, which has been killed.\n\n * The index-pack code now diagnoses a bad input packstream that\n   records the same object twice when it is used as delta base; the\n   code used to declare a software bug when encountering such an\n   input, but it is an input error.\n\n\n * The code to compute the commit-graph has been taught to use a more\n   robust way to tell if two object directories refer to the same\n   thing.\n   (merge a7df60cac8 tb/commit-graph-object-dir later to maint).\n\n * \"git remote rename X Y\" needs to adjust configuration variables\n   (e.g. branch.<name>.remote) whose value used to be X to Y.\n   branch.<name>.pushRemote is now also updated.\n\n * Update to doc-diff.\n\n * Doc markup fix.\n\n * \"git check-ignore\" did not work when the given path is explicitly\n   marked as not ignored with a negative entry in the .gitignore file.\n\n * The merge-recursive machinery failed to refresh the cache entry for\n   a merge result in a couple of places, resulting in an unnecessary\n   merge failure, which has been fixed.\n\n * Fix for a bug revealed by a recent change to make the protocol v2\n   the default.\n\n * In rare cases \"git worktree add <path>\" could think that <path>\n   was already a registered worktree even when it wasn't and refuse\n   to add the new worktree. This has been corrected.\n   (merge bb69b3b009 es/worktree-avoid-duplication-fix later to maint).\n\n * \"git push\" should stop from updating a branch that is checked out\n   when receive.denyCurrentBranch configuration is set, but it failed\n   to pay attention to checkouts in secondary worktrees.  This has\n   been corrected.\n   (merge 4d864895a2 hv/receive-denycurrent-everywhere later to maint).\n\n * \"git rebase BASE BRANCH\" rebased/updated the tip of BRANCH and\n   checked it out, even when the BRANCH is checked out in a different\n   worktree.  This has been corrected.\n   (merge b5cabb4a96 es/do-not-let-rebase-switch-to-protected-branch later to maint).\n\n * \"git describe\" in a repository with multiple root commits sometimes\n   gave up looking for the best tag to describe a given commit with\n   too early, which has been adjusted.\n\n * \"git merge signed-tag\" while lacking the public key started to say\n   \"No signature\", which was utterly wrong.  This regression has been\n   reverted.\n\n * MinGW's poll() emulation has been improved.\n\n * \"git show\" and others gave an object name in raw format in its\n   error output, which has been corrected to give it in hex.\n\n * \"git fetch\" over HTTP walker protocol did not show any progress\n   output.  We inherently do not know how much work remains, but still\n   we can show something not to bore users.\n   (merge 7655b4119d rs/show-progress-in-dumb-http-fetch later to maint).\n\n * Both \"git ls-remote -h\" and \"git grep -h\" give short usage help,\n   like any other Git subcommand, but it is not unreasonable to expect\n   that the former would behave the same as \"git ls-remote --head\"\n   (there is no other sensible behaviour for the latter).  The\n   documentation has been updated in an attempt to clarify this.\n\n * Other code cleanup, docfix, build fix, etc.\n   (merge d0d0a357a1 am/update-pathspec-f-f-tests later to maint).\n   (merge f94f7bd00d am/test-pathspec-f-f-error-cases later to maint).\n   (merge c513a958b6 ss/t6025-modernize later to maint).\n   (merge b441717256 dl/test-must-fail-fixes later to maint).\n   (merge d031049da3 mt/sparse-checkout-doc-update later to maint).\n   (merge 145136a95a jc/skip-prefix later to maint).\n   (merge 5290d45134 jk/alloc-cleanups later to maint).\n   (merge 7a9f8ca805 rs/parse-options-concat-dup later to maint).\n   (merge 517b60564e rs/strbuf-insertstr later to maint).\n   (merge f696a2b1c8 jk/mailinfo-cleanup later to maint).\n   (merge de26f02db1 js/test-avoid-pipe later to maint).\n   (merge a2dc43414c es/doc-mentoring later to maint).\n   (merge 02bbbe9df9 es/worktree-cleanup later to maint).\n   (merge 2ce6d075fa rs/micro-cleanups later to maint).\n   (merge 27f182b3fc rs/blame-typefix-for-fingerprint later to maint).\n   (merge 3c29e21eb0 ma/test-cleanup later to maint).\n   (merge 240fc04f81 ag/rebase-remove-redundant-code later to maint).\n   (merge d68ce906c7 rs/commit-graph-code-simplification later to maint).\n   (merge a51d9e8f07 rj/t1050-use-test-path-is-file later to maint).\n   (merge fd0bc17557 kk/complete-diff-color-moved later to maint).\n   (merge 65bf820d0e en/test-cleanup later to maint).\n\n----------------------------------------------------------------\n\nChanges since v2.25.0 are as follows:\n\nAbhishek Kumar (2):\n      lib-log-graph: consolidate test_cmp_graph logic\n      lib-log-graph: consolidate colored graph cmp logic\n\nAlban Gruin (4):\n      rebase -i: stop checking out the tip of the branch to rebase\n      sequencer: move check_todo_list_from_file() to rebase-interactive.c\n      rebase-interactive: warn if commit is dropped with `rebase --edit-todo'\n      builtin/rebase: remove a call to get_oid() on `options.switch_to'\n\nAlessandro Menti (2):\n      l10n: it.po: update the Italian translation for Git 2.26.0 round 1\n      l10n: it.po: update the Italian translation for Git 2.26.0 round 2\n\nAlexander Shopov (2):\n      l10n: bg.po: Updated Bulgarian translation (4835t)\n      l10n: bg.po: Updated Bulgarian translation (4839t)\n\nAlexandr Miloslavskiy (14):\n      parse_branchname_arg(): extract part as new function\n      checkout: don't revert file on ambiguous tracking branches\n      t: add tests for error conditions with --pathspec-from-file\n      t: fix quotes tests for --pathspec-from-file\n      t: directly test parse_pathspec_file()\n      doc: rm: synchronize <pathspec> description\n      rm: support the --pathspec-from-file option\n      doc: stash: split options from description (1)\n      doc: stash: split options from description (2)\n      doc: stash: document more options\n      doc: stash: synchronize <pathspec> description\n      stash: eliminate crude option parsing\n      stash push: support the --pathspec-from-file option\n      mingw: workaround for hangs when sending STDIN\n\nBeat Bolli (1):\n      unicode: update the width tables to Unicode 13.0\n\nBenno Evers (1):\n      describe: don't abort too early when searching tags\n\nBert Wesarg (6):\n      pull --rebase/remote rename: document and honor single-letter abbreviations rebase types\n      remote: clean-up by returning early to avoid one indentation\n      remote: clean-up config callback\n      remote rename/remove: handle branch.<name>.pushRemote config values\n      config: provide access to the current line number\n      remote rename/remove: gently handle remote.pushDefault config\n\nChristian Stimming (3):\n      git-gui: update pot template and German translation to current source code\n      git-gui: extend translation glossary template with more terms\n      git-gui: update German translation\n\nChristopher Diaz Riveros (1):\n      l10n: es: 2.26.0 round#2\n\nDavid Turner (1):\n      git rm submodule: succeed if .gitmodules index stat info is zero\n\nDenton Liu (34):\n      t/lib-git-p4: use test_path_is_missing()\n      t0000: replace test_must_fail with run_sub_test_lib_test_err()\n      t0003: use named parameters in attr_check()\n      t0003: use test_must_be_empty()\n      t0003: don't use `test_must_fail attr_check`\n      t0020: don't use `test_must_fail has_cr`\n      t0020: use ! check_packed_refs_marked\n      t1306: convert `test_might_fail rm` to `rm -f`\n      t1307: reorder `nongit test_must_fail`\n      t1409: let sed open its own input file\n      t1409: use test_path_is_missing()\n      t1501: remove use of `test_might_fail cp`\n      t1507: stop losing return codes of git commands\n      t1507: run commands within test_expect_success\n      t1507: inline full_name()\n      contrib/credential/netrc: make PERL_PATH configurable\n      contrib/credential/netrc: work outside a repo\n      t2018: remove trailing space from test description\n      t2018: add space between function name and ()\n      t2018: improve style of if-statement\n      .mailmap: fix erroneous authorship for Johannes Schindelin\n      t2018: be more discerning when checking for expected exit codes\n      t2018: teach do_checkout() to accept `!` arg\n      t2018: don't lose return code of git commands\n      t2018: replace \"sha\" with \"oid\"\n      t3030: use test_path_is_missing()\n      t3310: extract common notes_merge_files_gone()\n      t3415: stop losing return codes of git commands\n      t3415: increase granularity of test_auto_{fixup,squash}()\n      t3419: stop losing return code of git command\n      t3507: fix indentation\n      t3507: use test_path_is_missing()\n      t4124: only mark git command with test_must_fail\n      .mailmap: map Yi-Jyun Pan's email\n\nDerrick Stolee (26):\n      unpack-trees: correctly compute result count\n      graph: add test to demonstrate horizontal line bug\n      graph: fix collapse of multiple edges\n      clean: demonstrate a bug with pathspecs\n      fetch: document and test --refmap=\"\"\n      t1091: use check_files to reduce boilerplate\n      t1091: improve here-docs\n      sparse-checkout: create leading directories\n      clone: fix --sparse option with URLs\n      sparse-checkout: cone mode does not recognize \"**\"\n      sparse-checkout: detect short patterns\n      sparse-checkout: warn on globs in cone patterns\n      sparse-checkout: properly match escaped characters\n      sparse-checkout: write escaped patterns in cone mode\n      sparse-checkout: unquote C-style strings over --stdin\n      sparse-checkout: use C-style quotes in 'list' subcommand\n      sparse-checkout: escape all glob characters on write\n      sparse-checkout: improve docs around 'set' in cone mode\n      sparse-checkout: fix cone mode behavior mismatch\n      sparse-checkout: extract add_patterns_from_input()\n      sparse-checkout: extract pattern update from 'set' subcommand\n      sparse-checkout: create 'add' subcommand\n      sparse-checkout: work with Windows paths\n      sparse-checkout: allow one-character directories in cone mode\n      partial-clone: demonstrate bugs in partial fetch\n      partial-clone: avoid fetching when looking for objects\n\nElijah Newren (36):\n      unpack-trees: exit check_updates() early if updates are not wanted\n      string-list: note in docs that callers can specify sorting function\n      dir: treat_leading_path() and read_directory_recursive(), round 2\n      git-rebase.txt: update description of --allow-empty-message\n      t3404: directly test the behavior of interest\n      rebase (interactive-backend): make --keep-empty the default\n      rebase (interactive-backend): fix handling of commits that become empty\n      t3406: simplify an already simple test\n      rebase, sequencer: remove the broken GIT_QUIET handling\n      rebase: make sure to pass along the quiet flag to the sequencer\n      rebase: fix handling of restrict_revision\n      t3432: make these tests work with either am or merge backends\n      rebase: allow more types of rebases to fast-forward\n      git-rebase.txt: add more details about behavioral differences of backends\n      rebase: move incompatibility checks between backend options a bit earlier\n      rebase: add an --am option\n      git-prompt: change the prompt for interactive-based rebases\n      rebase: drop '-i' from the reflog for interactive-based rebases\n      rebase tests: mark tests specific to the am-backend with --am\n      rebase tests: repeat some tests using the merge backend instead of am\n      rebase: make the backend configurable via config setting\n      rebase: change the default backend from \"am\" to \"merge\"\n      rebase: rename the two primary rebase backends\n      check-ignore: fix documentation and implementation to match\n      t3433: new rebase testcase documenting a stat-dirty-like failure\n      merge-recursive: fix the refresh logic in update_file_flags\n      merge-recursive: apply collision handling unification to recursive case\n      t602[1236], t6034: modernize test formatting\n      t6020, t6022, t6035: update merge tests to use test helper functions\n      t3035: prefer test_must_fail to bash negation for git commands\n      t6022, t6046: test expected behavior instead of testing a proxy for it\n      t6020: new test with interleaved lexicographic ordering of directories\n      sequencer: clear state upon dropping a become-empty commit\n      git-rebase.txt: highlight backend differences with commit rewording\n      t6022, t6046: fix flaky files-are-updated checks\n      RelNotes/2.26.0: fix various typos\n\nEmily Shaffer (9):\n      unpack-trees: watch for out-of-range index position\n      fetch: emphasize failure during submodule fetch\n      MyFirstContribution: add avenues for getting help\n      submodule: add newline on invalid submodule error\n      MyFirstContribution: rephrase contact info\n      prefix_path: show gitdir when arg is outside repo\n      submodule--helper: use C99 named initializer\n      clone: pass --single-branch during --recurse-submodules\n      prefix_path: show gitdir if worktree unavailable\n\nEmir Sarı (5):\n      l10n: tr: Add Turkish translation team info\n      l10n: tr: Add Turkish translations\n      l10n: tr: Add glossary for Turkish translations\n      l10n: tr: v2.26.0 round 2\n      l10n: tr: Fix a couple of ambiguities\n\nEric Sunshine (6):\n      t3400: make test clean up after itself\n      rebase: refuse to switch to branch already checked out elsewhere\n      worktree: drop unused code from get_main_worktree()\n      worktree: improve find_worktree() documentation\n      worktree: add utility to find worktree by pathname\n      worktree: don't allow \"add\" validation to be fooled by suffix matching\n\nEyal Soha (3):\n      color.c: refactor color_output arguments\n      color.c: support bright aixterm colors\n      color.c: alias RGB colors 8-15 to aixterm colors\n\nFangyi Zhou (1):\n      l10n: zh_CN: Revise v2.26.0 translation\n\nHans Jerry Illikainen (2):\n      editorconfig: indent text files with tabs\n      gpg-interface: add minTrustLevel as a configuration option\n\nHarald van Dijk (1):\n      show_one_mergetag: print non-parent in hex form.\n\nHariom Verma (4):\n      get_main_worktree(): allow it to be called in the Git directory\n      t5509: use a bare repository for test push target\n      receive.denyCurrentBranch: respect all worktrees\n      t2402: test worktree path when called in .git directory\n\nHeba Waly (5):\n      commit: honor advice.statusHints when rejecting an empty commit\n      doc/gitcore-tutorial: fix prose to match example command\n      add: use advise function to display hints\n      git: update documentation for --git-dir\n      add: change advice config variables used by the add API\n\nJacques Bodin-Hullin (1):\n      parse-options: lose an unnecessary space in an error message\n\nJean-Noël Avila (2):\n      l10n: fr v2.26.0 rnd1\n      l10n: fr : v2.26.0 rnd 2\n\nJeff King (70):\n      builtin/pack-objects: report reused packfile objects\n      packfile: expose get_delta_base()\n      restore: invalidate cache-tree when removing entries with --staged\n      transport: don't flush when disconnecting stateless-rpc helper\n      dir: restructure in a way to avoid passing around a struct dirent\n      dir: point treat_leading_path() warning to the right place\n      Makefile: use compat regex with SANITIZE=address\n      t4018: drop \"debugging\" cat from hunk-header tests\n      t7800: don't rely on reuse_worktree_file()\n      ewah/bitmap: introduce bitmap_word_alloc()\n      pack-bitmap: introduce bitmap_walk_contains()\n      pack-bitmap: uninteresting oid can be outside bitmapped packfile\n      pack-bitmap: simplify bitmap_has_oid_in_uninteresting()\n      csum-file: introduce hashfile_total()\n      pack-objects: introduce pack.allowPackReuse\n      builtin/pack-objects: introduce obj_is_packed()\n      pack-objects: improve partial packfile reuse\n      pack-objects: add checks for duplicate objects\n      pack-bitmap: don't rely on bitmap_git->reuse_objects\n      sparse-checkout: fix documentation typo for core.sparseCheckoutCone\n      verify_filename(): handle backslashes in \"wildcards are pathspecs\" rule\n      merge-recursive: silence -Wxor-used-as-pow warning\n      t1400: avoid \"test\" string comparisons\n      t1506: drop space after redirection operator\n      avoid computing zero offsets from NULL pointer\n      xdiff: avoid computing non-zero offset from NULL pointer\n      obstack: avoid computing offsets from NULL pointer\n      doc: drop \"explicitly given\" from push.default description\n      sha1-name: mark get_oid() error messages for translation\n      normalize_path_copy(): document \"dst\" size expectations\n      walker_fetch(): avoid raw array length computation\n      traverse_trees(): use stack array for name entries\n      diff: move diff.wsErrorHighlight to \"basic\" config\n      tree-walk.c: break circular dependency with unpack-trees\n      index-pack: downgrade twice-resolved REF_DELTA to die()\n      mailinfo: treat header values as C strings\n      mailinfo: simplify parsing of header values\n      mailinfo: be more liberal with header whitespace\n      mailinfo: factor out some repeated header handling\n      pack-bitmap: factor out type iterator initialization\n      pack-bitmap: fix leak of haves/wants object lists\n      rev-list: fallback to non-bitmap traversal when filtering\n      pack-bitmap: refuse to do a bitmap traversal with pathspecs\n      rev-list: factor out bitmap-optimized routines\n      rev-list: make --count work with --objects\n      rev-list: allow bitmaps when counting objects\n      t5310: factor out bitmap traversal comparison\n      rev-list: allow commit-only bitmap traversals\n      pack-bitmap: basic noop bitmap filter infrastructure\n      rev-list: use bitmap filters for traversal\n      bitmap: add bitmap_unset() function\n      pack-bitmap: implement BLOB_NONE filtering\n      pack-bitmap: implement BLOB_LIMIT filtering\n      pack-objects: support filters with bitmaps\n      doc: move credential helper info into gitcredentials(7)\n      doc/config/push: use longer \"--\" line for preformatted example\n      doc-diff: use single-colon rule in rendering Makefile\n      run-command.h: fix mis-indented struct member\n      nth_packed_object_oid(): use customary integer return\n      pack-objects: read delta base oid into object_id struct\n      pack-objects: convert oe_set_delta_ext() to use object_id\n      pack-objects: use object_id struct in pack-reuse code\n      pack-bitmap: use object_id when loading on-disk bitmaps\n      pack-check: convert \"internal error\" die to a BUG()\n      pack-check: push oid lookup into loop\n      packed_object_info(): use object_id for returning delta base\n      packed_object_info(): use object_id internally for delta base\n      packfile: drop nth_packed_object_sha1()\n      config.mak.dev: re-enable -Wformat-zero-length\n      remote: drop \"explicit\" parameter from remote_ref_for_branch()\n\nJiang Xin (5):\n      l10n: git.pot: v2.26.0 round 1 (73 new, 38 removed)\n      l10n: git.pot: v2.26.0 round 2 (7 new, 2 removed)\n      i18n: unmark a message in rebase.c\n      l10n: zh_CN: for git v2.26.0 l10n round 1 and 2\n      l10n: tr.po: change file mode to 644\n\nJohan Herland (2):\n      t3305: check notes fanout more carefully and robustly\n      notes.c: fix off-by-one error when decreasing notes fanout\n\nJohannes Berg (1):\n      pack-format: correct multi-pack-index description\n\nJohannes Schindelin (33):\n      built-in add -p: prepare for patch modes other than \"stage\"\n      built-in add -p: implement the \"stash\" and \"reset\" patch modes\n      legacy stash -p: respect the add.interactive.usebuiltin setting\n      built-in stash: use the built-in `git add -p` if so configured\n      built-in add -p: implement the \"checkout\" patch modes\n      built-in add -p: implement the \"worktree\" patch modes\n      commit --interactive: make it work with the built-in `add -i`\n      t3701: adjust difffilter test\n      built-in add -p: support interactive.diffFilter\n      built-in add -p: handle diff.algorithm\n      terminal: make the code of disable_echo() reusable\n      terminal: accommodate Git for Windows' default terminal\n      terminal: add a new function to read a single keystroke\n      built-in add -p: respect the `interactive.singlekey` config setting\n      built-in add -p: handle Escape sequences in interactive.singlekey mode\n      built-in add -p: handle Escape sequences more efficiently\n      ci: include the built-in `git add -i` in the `linux-gcc` job\n      msvc: accommodate for vcpkg's upgrade to OpenSSL v1.1.x\n      built-in add -i: do not try to `patch`/`diff` an empty list of files\n      built-in add -i: accept open-ended ranges again\n      parse_insn_line(): improve error message when parsing failed\n      rebase -i: re-fix short SHA-1 collision\n      rebase -i: also avoid SHA-1 collisions with missingCommitsCheck\n      ci: ignore rubygems warning in the \"Documentation\" job\n      convert: fix typo\n      tests: fix --write-junit-xml with subshells\n      t9001, t9116: avoid pipes\n      t5580: test cloning without file://, test fetching via UNC paths\n      mingw: add a helper function to attach GDB to the current process\n      t/lib-httpd: avoid using macOS' sed\n      ci: prevent `perforce` from being quarantined\n      Azure Pipeline: switch to the latest agent pools\n      t5537: adjust test_oid label\n\nJohannes Sixt (1):\n      t3504: do check for conflict marker after failed cherry-pick\n\nJonathan Nieder (9):\n      sha1-file: document how to use pretend_object_file\n      fetch test: avoid use of \"VAR= cmd\" with a shell function\n      t/check-non-portable-shell: detect \"FOO= shell_func\", too\n      fetch test: mark test of \"skipping\" haves as v0-only\n      fetch test: use more robust test for filtered objects\n      config doc: protocol.version is not experimental\n      test: request GIT_TEST_PROTOCOL_VERSION=0 when appropriate\n      protocol test: let protocol.version override GIT_TEST_PROTOCOL_VERSION\n      fetch: default to protocol version 2\n\nJonathan Tan (4):\n      sha1-file: remove OBJECT_INFO_SKIP_CACHED\n      t5616: make robust to delta base change\n      connected: verify promisor-ness of partial clone\n      fetch: forgo full connectivity check if --filter\n\nJordi Mas (3):\n      l10n: Update Catalan translation\n      l10n: Update Catalan translation\n      l10n: Update Catalan translation\n\nJunio C Hamano (21):\n      The first batch post 2.25 cycle\n      merge-recursive: use subtraction to flip stage\n      .mailmap: fix GGG authoship screwup\n      The second batch\n      C: use skip_prefix() to avoid hardcoded string length\n      The third batch for 2.26\n      The fourth batch for 2.26\n      The fifth batch for 2.26\n      Git 2.25.1\n      The sixth batch for 2.26\n      rev-list --count: comment on the use of count_right++\n      The seventh batch for 2.26\n      Documentation: clarify that `-h` alone stands for `help`\n      Revert \"gpg-interface: prefer check_signature() for GPG verification\"\n      The eighth batch for 2.26\n      Git 2.26-rc0\n      Git 2.26-rc1\n      Hopefully the final batch before -rc2\n      Git 2.26-rc2\n      Git 2.25.2\n      Git 2.26\n\nKevin Willford (4):\n      fsmonitor: change last update timestamp on the index_state to opaque token\n      fsmonitor: handle version 2 of the hooks that will use opaque token\n      fsmonitor: add fsmonitor hook scripts for version 2\n      fsmonitor: update documentation for hook version and watchman hooks\n\nKir Kolyshkin (1):\n      completion: add diff --color-moved[-ws]\n\nKyle Meyer (2):\n      submodule add: show 'add --dry-run' stderr when aborting\n      submodule foreach: replace $path with $sm_path in example\n\nLucius Hu (1):\n      templates: fix deprecated type option `--bool`\n\nLuke Bonanomi (1):\n      git-gui--askpass: coerce answers to UTF-8 on Windows\n\nLuke Diamand (7):\n      git-p4: make closeStreams() idempotent\n      git-p4: add P4CommandException to report errors talking to Perforce\n      git-p4: disable some pylint warnings, to get pylint output to something manageable\n      git-p4: create helper function importRevisions()\n      git-p4: cleanup better on error exit\n      git-p4: check for access to remote host earlier\n      git-p4: avoid leak of file handle when cloning\n\nMartin Ågren (7):\n      git-filter-branch.txt: wrap \"maths\" notation in backticks\n      name-rev: rewrite create_or_update_name()\n      diff-options.txt: avoid \"regex\" overload in example\n      t4117: check for files using `test_path_is_file`\n      t9810: drop debug `cat` call\n      t: drop debug `cat` calls\n      t1091: don't grep for `strerror()` string\n\nMasaya Suzuki (1):\n      doc: describe Git bundle format\n\nMatheus Tavares (21):\n      grep: fix race conditions on userdiff calls\n      grep: fix race conditions at grep_submodule()\n      grep: fix racy calls in grep_objects()\n      replace-object: make replace operations thread-safe\n      object-store: allow threaded access to object reading\n      grep: replace grep_read_mutex by internal obj read lock\n      submodule-config: add skip_if_read option to repo_read_gitmodules()\n      grep: allow submodule functions to run in parallel\n      grep: protect packed_git [re-]initialization\n      grep: re-enable threads in non-worktree case\n      grep: move driver pre-load out of critical section\n      grep: use no. of cores as the default no. of threads\n      doc: sparse-checkout: mention --cone option\n      completion: add support for sparse-checkout\n      diff: make diff_populate_filespec() honor its repo argument\n      cache-tree: use given repo's hash_algo at verify_one()\n      pack-check: use given repo's hash_algo at verify_packfile()\n      streaming: allow open_istream() to handle any repo\n      sha1-file: pass git_hash_algo to write_object_file_prepare()\n      sha1-file: pass git_hash_algo to hash_object_file()\n      sha1-file: allow check_object_signature() to handle any repo\n\nMatthew Rogers (10):\n      config: fix typo in variable name\n      t1300: fix over-indented HERE-DOCs\n      t1300: create custom config file without special characters\n      config: make scope_name non-static and rename it\n      config: split repo scope to local and worktree\n      config: clarify meaning of command line scoping\n      config: preserve scope in do_git_config_sequence\n      config: teach git_config_source to remember its scope\n      submodule-config: add subomdule config scope\n      config: add '--show-scope' to print the scope of a config value\n\nMatthias Rüster (1):\n      l10n: de.po: Update German translation for Git 2.26.0\n\nMiriam Rubio (3):\n      bisect--helper: convert `vocab_*` char pointers to char arrays\n      bisect: use the standard 'if (!var)' way to check for 0\n      bisect: add enum to represent bisect returning codes\n\nPaolo Bonzini (5):\n      parse-options: add testcases for OPT_CMDMODE()\n      parse-options: convert \"command mode\" to a flag\n      am: convert \"resume\" variable to a struct\n      am: support --show-current-patch=raw as a synonym for--show-current-patch\n      am: support --show-current-patch=diff to retrieve .git/rebase-apply/patch\n\nPeter Kaestle (3):\n      t7400: add a testcase for submodule status on empty dirs\n      submodule: fix status of initialized but not cloned submodules\n      t7400: testcase for submodule status on unregistered inner git repos\n\nPeter Krefting (2):\n      l10n: sv.po: Update Swedish translation (4835t0f0u)\n      l10n: sv.po: Update Swedish translation (4839t0f0u)\n\nPhilippe Blain (5):\n      t7410: rename to t2405-worktree-submodule.sh\n      t2405: use git -C and test_commit -C instead of subshells\n      t2405: clarify test descriptions and simplify test\n      submodule.c: use get_git_dir() instead of get_git_common_dir()\n      grep: ignore --recurse-submodules if --no-index is given\n\nPranit Bauva (7):\n      bisect--helper: return error codes from `cmd_bisect__helper()`\n      bisect: libify `exit_if_skipped_commits` to `error_if_skipped*` and its dependents\n      bisect: libify `bisect_checkout`\n      bisect: libify `check_merge_bases` and its dependents\n      bisect: libify `check_good_are_ancestors_of_bad` and its dependents\n      bisect: libify `handle_bad_merge_base` and its dependents\n      bisect: libify `bisect_next_all`\n\nPratyush Yadav (4):\n      git-gui: add missing close bracket\n      git-gui: fix error popup when doing blame -> \"Show History Context\"\n      git-gui: reduce Tcl version requirement from 8.6 to 8.5\n      git-gui: create a new namespace for chord script evaluation\n\nRalf Thielow (3):\n      submodule.c: mark more strings for translation\n      rebase-interactive.c: silence format-zero-length warnings\n      l10n: de.po: add missing space\n\nRasmus Jonsson (1):\n      t1050: replace test -f with test_path_is_file\n\nRené Scharfe (21):\n      name-rev: remove unused typedef\n      name-rev: respect const qualifier\n      name-rev: don't leak path copy in name_ref()\n      name-rev: don't _peek() in create_or_update_name()\n      name-rev: put struct rev_name into commit slab\n      name-rev: factor out get_parent_name()\n      name-rev: pre-size buffer in get_parent_name()\n      name-rev: generate name strings only if they are better\n      name-rev: release unused name strings\n      name-rev: sort tip names before applying\n      strbuf: add and use strbuf_insertstr()\n      mailinfo: don't insert header prefix for handle_content_type()\n      parse-options: use COPY_ARRAY in parse_options_concat()\n      parse-options: factor out parse_options_count()\n      parse-options: const parse_options_concat() parameters\n      parse-options: simplify parse_options_dup()\n      quote: use isalnum() to check for alphanumeric characters\n      use strpbrk(3) to search for characters from a given set\n      blame: provide type of fingerprints pointer\n      commit-graph: use progress title directly\n      remote-curl: show progress for fetches over dumb HTTP\n\nSZEDER Gábor (6):\n      t9902-completion: add tests for the __git_find_on_cmdline() helper\n      completion: clean up the __git_find_on_cmdline() helper function\n      completion: return the index of found word from __git_find_on_cmdline()\n      completion: simplify completing 'git worktree' subcommands and options\n      completion: list existing working trees for 'git worktree' subcommands\n      completion: list paths and refs for 'git worktree add'\n\nShourya Shukla (2):\n      t6025: modernize style\n      t6025: use helpers to replace test -f <path>\n\nTanushree Tumane (2):\n      bisect--helper: change `retval` to `res`\n      bisect--helper: introduce new `decide_next()` function\n\nTaylor Blau (5):\n      t5318: don't pass non-object directory to '--object-dir'\n      commit-graph.h: store an odb in 'struct write_commit_graph_context'\n      commit-graph.h: store object directory in 'struct commit_graph'\n      commit-graph.c: remove path normalization, comparison\n      commit-graph.h: use odb in 'load_commit_graph_one_fd_st'\n\nTrần Ngọc Quân (1):\n      l10n: vi(4839t): Updated Vietnamese translation for v2.26.0\n\nYi-Jyun Pan (2):\n      l10n: zh_TW.po: v2.26.0 round 1 (11 untranslated)\n      l10n: zh_TW.po: v2.26.0 round 2 (0 untranslated)\n\nbrian m. carlson (54):\n      run-command: avoid undefined behavior in exists_in_PATH\n      t4054: make hash-size independent\n      t4066: compute index line in diffs\n      t4134: compute appropriate length constant\n      t4200: make hash size independent\n      t4202: abstract away SHA-1-specific constants\n      t4204: make hash size independent\n      t4300: abstract away SHA-1-specific constants\n      t5318: update for SHA-256\n      t5319: change invalid offset for SHA-256 compatibility\n      t5319: make test work with SHA-256\n      t5324: make hash size independent\n      t5504: make hash algorithm independent\n      t5510: make hash size independent\n      t5512: abstract away SHA-1-specific constants\n      t5530: compute results based on object length\n      t5537: make hash size independent\n      t5540: make hash size independent\n      t5562: use $ZERO_OID\n      t5601: switch into repository to hash object\n      t5604: make hash independent\n      docs: use \"currently\" for the present time\n      doc: move author and committer information to git-commit(1)\n      docs: expand on possible and recommended user config options\n      doc: provide guidance on user.name format\n      doc: dissuade users from trying to ignore tracked files\n      docs: mention when increasing http.postBuffer is valuable\n      t/lib-pack: support SHA-256\n      t3206: make hash size independent\n      t3308: make test work with SHA-256\n      t3309: make test work with SHA-256\n      t3310: make test work with SHA-256\n      t3311: make test work with SHA-256\n      t4013: make test hash independent\n      t4211: move SHA-1-specific test cases into a directory\n      t4211: add test cases for SHA-256\n      t4060: make test work with SHA-256\n      t5302: make hash size independent\n      t5309: make test hash independent\n      t5313: make test hash independent\n      t5321: make test hash independent\n      t5515: make test hash independent\n      t5318: update for SHA-256\n      t5607: make hash size independent\n      t5703: make test work with SHA-256\n      t6000: abstract away SHA-1-specific constants\n      t6006: make hash size independent\n      t6024: update for SHA-256\n      mailmap: add an additional email address for brian m. carlson\n      t1300: add test for urlmatch with multiple wildcards\n      t0300: add tests for some additional cases\n      credential: use the last matching username in the config\n      credential: allow wildcard patterns when matching config\n      t3419: prevent failure when run with EXPENSIVE\n\nĐoàn Trần Công Danh (1):\n      l10n: vi: fix translation + grammar\n\n"},{"id":"393843","messageId":"CABPp-BF_sO+bx8HFPFpVeZStft4oZ-wHRAbNFmBEOWnya99Aqg@mail.gmail.com","threadId":"53064","inReplyTo":"xmqqa7477u6j.fsf@gitster.c.googlers.com","subject":"[ANNOUNCE] git-filter-repo v2.26.0 (Was: Re: [ANNOUNCE] Git v2.26.0)","fromName":"Elijah Newren","fromEmail":"newren@gmail.com","sentAt":"2020-03-24T01:05:23Z","receivedAt":"2020-03-24T01:05:39Z","isPatch":false,"sender":{"key":"newren@gmail.com","avatar":"https://avatars.githubusercontent.com/u/5455730?v=4"},"body":"Hi,\n\nOn Sun, Mar 22, 2020 at 6:12 PM Junio C Hamano <gitster@pobox.com> wrote:\n>\n> The latest feature release Git v2.26.0 is now available at the\n> usual places.  It is comprised of 504 non-merge commits since\n> v2.25.0, contributed by 64 people, 12 of which are new faces.\n\nThe latest release of git-filter-repo, v2.26.0, is also now available.  It\nis comprised of 16 non-merge commits since v2.25.0, including a change from\na new contributor.\n\nThe public repo is at\n\n    https://github.com/newren/git-filter-repo\n\nThe tarballs can be found at:\n\n    https://github.com/newren/git-filter-repo/releases\n\ngit-filter-repo can also be installed via pip[1] or a variety of\npackage managers across Windows, Mac OS, or Linux (and maybe\nothers)[2].\n\nNew contributors whose contributions weren't in v2.25.0 are as follows.\nWelcome to the git-filter-repo development community!\n\n  Sirio Balmelli\n\n[1] https://github.com/newren/git-filter-repo/blob/master/INSTALL.md#installation-via-pip\n[2] https://github.com/newren/git-filter-repo/blob/master/INSTALL.md#installation-via-package-manager\n\n----------------------------------------------------------------\n\ngit-filter-repo 2.26 Release Notes\n==================================\n\n(Note: Additional information is available for many release notes at\n    https://github.com/newren/git-filter-repo/issues/<NUMBER>)\n\n* Fixes:\n  * fix cache of file renames and myriad problems with subdirectories\n    that had the same filenames as parent directories (#53)\n  * handle typechange modifications when first parent is pruned (#61)\n  * avoid dying when using --analyze with --refs (#65)\n  * permit trailing slash for --[to-]subdirectory-filter argument\n  * use more expensive prunability checks when needed (#64)\n  * relax the definition of freshly packed (#38)\n\n* Performance:\n  * multiple performance improvements for --analyze (#52)\n\n* contrib scripts:\n  * fix lint-history to avoid dying when we get file deletions (#51)\n  * point people to an issue where they can find more linting examples (#45)\n\n* Miscellaneous:\n  * Installation improvement (#55)\n  * Various documentation improvements\n\n\nChanges since v2.25.0 are as follows:\n\nElijah Newren (15):\n      filter-repo: permit trailing slash for --[to-]subdirectory-filter argument\n      git-filter-repo.txt: fix nested bullets to render correctly\n      Contributing.md: start with git guidelines, then mention exceptions\n      filter-repo (README): link to upstream docs\n      filter-repo (README): streamline prerequisite wording a little bit\n      lint-history: avoid dying when we get file deletions\n      filter-repo: avoid repeatedly translating the same string with --analyze\n      filter-repo: accelerate is_ancestor() for --analyze mode\n      filter-repo: fix cache of file renames\n      lint-history: point people to issue with more linting examples\n      filter-repo: avoid dying with --analyze on commits with unseen parents\n      filter-repo: relax the definition of freshly packed\n      filter-repo: use more expensive prunability checks when needed\n      filter-repo: handle typechange modifications when first parent is pruned\n      t9390: add missing '&&' in command chain\n\nSirio Balmelli (1):\n      setup.py: test for FileExistsError on symlink\n"}]}