2024-02-25 23:24:13 by Adam Ciarcinski | Files touched by this commit (5) | |
Log message: git: updated to 2.44.0 Git v2.44 Release Notes ======================= Backward Compatibility Notes * "git checkout -B <branch>" used to allow switching to a \ branch that is in use on another worktree, but this was by mistake. The users need to use "--ignore-other-worktrees" option. UI, Workflows & Features * "git add" and "git stash" learned to support the \ ":(attr:...)" magic pathspec. * "git rebase --autosquash" is now enabled for non-interactive rebase, but it is still incompatible with the apply backend. * Introduce "git replay", a tool meant on the server side without working tree to recreate a history. * "git merge-file" learned to take the "--diff-algorithm" \ option to use algorithm different from the default "myers" diff. * Command line completion (in contrib/) learned to complete path arguments to the "add/set" subcommands of "git \ sparse-checkout" better. * "git checkout -B <branch> [<start-point>]" allowed a \ branch that is in use in another worktree to be updated and checked out, which might be a bit unexpected. The rule has been tightened, which is a breaking change. "--ignore-other-worktrees" option is required to unbreak you, if you are used to the current behaviour that "-B" overrides the safety. * The builtin_objectmode attribute is populated for each path without adding anything in .gitattributes files, which would be useful in magic pathspec, e.g., ":(attr:builtin_objectmode=100755)" to limit to executables. * "git fetch" learned to pay attention to "fetch.all" \ configuration variable, which pretends as if "--all" was passed from the command line when no remote parameter was given. * In addition to (rather cryptic) Security Identifiers, show username and domain in the error message when we barf on mismatch between the Git directory and the current user on Windows. * The error message given when "git branch -d branch" fails due to commits unique to the branch has been split into an error and a new conditional advice message. * When given an existing but unreadable file as a configuration file, gitweb behaved as if the file did not exist at all, but now it errors out. This is a change that may break backward compatibility. * When $HOME/.gitconfig is missing but XDG config file is available, we should write into the latter, not former. "git gc" and "git maintenance" wrote into a wrong "global config" file, which have been corrected. * Define "special ref" as a very narrow set that consists of FETCH_HEAD and MERGE_HEAD, and clarify everything else that used to be classified as such are actually just pseudorefs. * All conditional "advice" messages show how to turn them off, which becomes repetitive. Setting advice.* configuration explicitly on now omits the instruction part. * The "disable repository discovery of a bare repository" check, triggered by setting safe.bareRepository configuration variable to 'explicit', has been loosened to exclude the ".git/" directory inside a non-bare repository from the check. So you can do "cd .git && git cmd" to run a Git command that works on a bare repository without explicitly specifying $GIT_DIR now. * The completion script (in contrib/) learned more options that can be used with "git log". * The labels on conflict markers for the common ancestor, our version, and the other version are available to custom 3-way merge driver via %S, %X, and %Y placeholders. * The write codepath for the reftable data learned to honor core.fsync configuration. * The "--fsck-objects" option of "git index-pack" now can \ take the optional parameter to tweak severity of different fsck errors. * The wincred credential backend has been taught to support oauth refresh token the same way as credential-cache and credential-libsecret backends. * Command line completion support (in contrib/) has been updated for "git bisect". * "git branch" and friends learned to use the formatted text as sorting key, not the underlying timestamp value, when the --sort option is used with author or committer timestamp with a format specifier (e.g., "--sort=creatordate:format:%H:%M:%S"). * The command line completion script (in contrib/) learned to complete configuration variable names better. Performance, Internal Implementation, Development Support etc. * Process to add some form of low-level unit tests has started. * Add support for GitLab CI. * "git for-each-ref --no-sort" still sorted the refs alphabetically which paid non-trivial cost. It has been redefined to show output in an unspecified order, to allow certain optimizations to take advantage of. * Simplify API implementation to delete references by eliminating duplication. * Subject approxidate() and show_date() machinery to OSS-Fuzz. * A new helper to let us pretend that we called lstat() when we know our cache_entry is up-to-date via fsmonitor. * The optimization based on fsmonitor in the "diff --cached" codepath is resurrected with the "fake-lstat" introduced earlier. * Test balloon to use C99 "bool" type from <stdbool.h> has been added. * "git clone" has been prepared to allow cloning a repository with non-default hash function into a repository that uses the reftable backend. * Streaming spans of packfile data used to be done only from a single, primary, pack in a repository with multiple packfiles. It has been extended to allow reuse from other packfiles, too. * Comment updates to help developers not to attempt to modify messages from plumbing commands that must stay constant. It might make sense to reassess the plumbing needs every few years, but that should be done as a separate effort. * Move test-ctype helper to the unit-test framework. * Instead of manually creating refs/ hierarchy on disk upon a creation of a secondary worktree, which is only usable via the files backend, use the refs API to populate it. * CI for GitLab learned to drive macOS jobs. * A few tests to "git commit -o <pathspec>" and "git commit -i <pathspec>" has been added. * Tests on ref API are moved around to prepare for reftable. * The Makefile often had to say "-L$(path) -R$(path)" that repeats the path to the same library directory for link time and runtime. A Makefile template is used to reduce such repetition. * The priority queue test has been migrated to the unit testing framework. * Setting `feature.experimental` opts the user into multi-pack reuse experiment * Squelch node.js 16 deprecation warnings from GitHub Actions CI by updating actions/github-script and actions/checkout that use node.js 20. * The mechanism to report the filename in the source code, used by the unit-test machinery, assumed that the compiler expanded __FILE__ to the path to the source given to the $(CC), but some compilers give full path, breaking the output. This has been corrected. Fixes since v2.43 ----------------- * The way CI testing used "prove" could lead to running the test suite twice needlessly, which has been corrected. * Update ref-related tests. * "git format-patch --encode-email-headers" ignored the option when preparing the cover letter, which has been corrected. * Newer versions of Getopt::Long started giving warnings against our (ab)use of it in "git send-email". Bump the minimum version requirement for Perl to 5.8.1 (from September 2002) to allow simplifying our implementation. * Earlier we stopped relying on commit-graph that (still) records information about commits that are lost from the object store, which has negative performance implications. The default has been flipped to disable this pessimization. * Stale URLs have been updated to their current counterparts (or archive.org) and HTTP links are replaced with working HTTPS links. * trace2 streams used to record the URLs that potentially embed authentication material, which has been corrected. * The sample pre-commit hook that tries to catch introduction of new paths that use potentially non-portable characters did not notice an existing path getting renamed to such a problematic path, when rename detection was enabled. * The command line parser for the "log" family of commands was too loose when parsing certain numbers, e.g., silently ignoring the extra 'q' in "git log -n 1q" without complaining, which has been tightened up. * "git $cmd --end-of-options --rev -- --path" for some $cmd failed to interpret "--rev" as a rev, and "--path" as a path. \ This was fixed for many programs like "reset" and "checkout". * "git bisect reset" has been taught to clean up state files and refs even when BISECT_START file is gone. * Some codepaths did not correctly parse configuration variables specified with valueless "true", which has been corrected. * Code clean-up for sanity checking of command line options for "git show-ref". * The code to parse the From e-mail header has been updated to avoid recursion. * "git fetch --atomic" issued an unnecessary empty error message, which has been corrected. * Command line completion script (in contrib/) learned to work better with the reftable backend. * "git status" is taught to show both the branch being bisected and being rebased when both are in effect at the same time. * "git archive --list extra garbage" silently ignored excess command line parameters, which has been corrected. * "git sparse-checkout set" added default patterns even when the patterns are being fed from the standard input, which has been corrected. * "git sparse-checkout (add|set) --[no-]cone --end-of-options" did not handle "--end-of-options" correctly after a recent update. * Unlike other environment variables that took the usual true/false/yes/no as well as 0/1, GIT_FLUSH only understood 0/1, which has been corrected. * Clearing in-core repository (happens during e.g., "git fetch --recurse-submodules" with commit graph enabled) made in-core commit object in an inconsistent state by discarding the necessary data from commit-graph too early, which has been corrected. * Update to a new feature recently added, "git show-ref --exists". * oss-fuzz tests are built and run in CI. (merge c4a9cf1df3 js/oss-fuzz-build-in-ci later to maint). * Rename detection logic ignored the final line of a file if it is an incomplete line. * GitHub CI update. (merge 0188b2c8e0 pb/ci-github-skip-logs-for-broken-tests later to maint). * "git diff --no-rename A B" did not disable rename detection but did not trigger an error from the command line parser. * "git archive --remote=<remote>" learned to talk over the smart http (aka stateless) transport. (merge 176cd68634 jx/remote-archive-over-smart-http later to maint). * Fetching via protocol v0 over Smart HTTP transport sometimes failed to correctly auto-follow tags. (merge fba732c462 jk/fetch-auto-tag-following-fix later to maint). * The documentation for the --exclude-per-directory option marked it as deprecated, which confused readers into thinking there may be a plan to remove it in the future, which was not our intention. (merge 0009542cab jc/ls-files-doc-update later to maint). * "git diff --no-index file1 file2" segfaulted while invoking the external diff driver, which has been corrected. * Rewrite //-comments to /* comments */ in files whose comments prevalently use the latter. * Cirrus CI jobs started breaking because we specified version of FreeBSD that is no longer available, which has been corrected. (merge 81fffb66d3 cb/use-freebsd-13-2-at-cirrus-ci later to maint). * A caller called index_file_exists() that takes a string expressed as <ptr, length> with a wrong length, which has been corrected. (merge 156e28b36d jh/sparse-index-expand-to-path-fix later to maint). * A failed "git tag -s" did not necessarily result in an error depending on the crypto backend, which has been corrected. * "git stash" sometimes was silent even when it failed due to unwritable index file, which has been corrected. * "git show-ref --verify" did not show things like \ "CHERRY_PICK_HEAD", which has been corrected. * Recent conversion to allow more than 0/1 in GIT_FLUSH broke the mechanism by flipping what yes/no means by mistake, which has been corrected. * The sequencer machinery does not use the ref API and instead records names of certain objects it needs for its correct operation in temporary files, which makes these objects susceptible to loss by garbage collection. These temporary files have been added as starting points for reachability analysis to fix this. (merge bc7f5db896 pw/gc-during-rebase later to maint). * "git cherry-pick" invoked during "git rebase -i" session lost the authorship information, which has been corrected. (merge e4301f73ff vn/rebase-with-cherry-pick-authorship later to maint). * The code paths that call repo_read_object_file() have been tightened to react to errors. (merge 568459bf5e js/check-null-from-read-object-file later to maint). * Other code cleanup, docfix, build fix, etc. (merge 5aea3955bc rj/clarify-branch-doc-m later to maint). (merge 9cce3be2df bk/bisect-doc-fix later to maint). (merge 8430b438f6 vd/fsck-submodule-url-test later to maint). (merge 3cb4384683 jc/t0091-with-unknown-git later to maint). (merge 020456cb74 rs/receive-pack-remove-find-header later to maint). (merge bc47139f4f la/trailer-cleanups later to maint). |
2023-06-06 14:42:56 by Taylor R Campbell | Files touched by this commit (1319) |
Log message: Mass-change BUILD_DEPENDS to TOOL_DEPENDS outside mk/. Almost all uses, if not all of them, are wrong, according to the semantics of BUILD_DEPENDS (packages built for target available for use _by_ tools at build-time) and TOOL_DEPEPNDS (packages built for host available for use _as_ tools at build-time). No change to BUILD_DEPENDS as used correctly inside buildlink3. As proposed on tech-pkg: https://mail-index.netbsd.org/tech-pkg/2023/06/03/msg027632.html |
2022-10-07 12:10:05 by Adam Ciarcinski | Files touched by this commit (7) | |
Log message: git: updated to 2.38.0 Git v2.38 Release Notes ======================= UI, Workflows & Features * "git remote show [-n] frotz" now pays attention to negative pathspec. * "git push" sometimes performs poorly when reachability bitmaps are used, even in a repository where other operations are helped by bitmaps. The push.useBitmaps configuration variable is introduced to allow disabling use of reachability bitmaps only for "git push". * "git grep -m<max-hits>" is a way to limit the hits shown per file. * "git merge-tree" learned a new mode where it takes two commits and computes a tree that would result in the merge commit, if the histories leading to these two commits were to be merged. * "git mv A B" in a sparsely populated working tree can be asked to move a path between directories that are "in cone" (i.e. expected to be materialized in the working tree) and "out of cone" (i.e. expected to be hidden). The handling of such cases has been improved. * Earlier, HTTP transport clients learned to tell the server side what locale they are in by sending Accept-Language HTTP header, but this was done only for some requests but not others. * Introduce a safe.barerepository configuration variable that allows users to forbid discovery of bare repositories. * Various messages that come from the pack-bitmap codepaths have been tweaked. * "git rebase -i" learns to update branches whose tip appear in the rebased range with "--update-refs" option. * "git ls-files" learns the "--format" option to tweak its \ output. * "git cat-file" learned an option to use the mailmap when showing commit and tag objects. * When "git merge" finds that it cannot perform a merge, it should restore the working tree to the state before the command was initiated, but in some corner cases it didn't. * Operating modes like "--batch" of "git cat-file" command \ learned to take NUL-terminated input, instead of one-item-per-line. * "git rm" has become more aware of the sparse-index feature. * "git rev-list --disk-usage" learned to take an optional value "human" to show the reported value in human-readable format, like "3.40MiB". * The "diagnose" feature to create a zip archive for diagnostic material has been lifted from "scalar" and made into a feature of "git bugreport". * The namespaces used by "log --decorate" from "refs/" \ hierarchy by default has been tightened. * "git rev-list --ancestry-path=C A..B" is a natural extension of "git rev-list A..B"; instead of choosing a subset of A..B to those that have ancestry relationship with A, it lets a subset with ancestry relationship with C. * "scalar" now enables built-in fsmonitor on enlisted repositories, when able. * The bash prompt (in contrib/) learned to optionally indicate when the index is unmerged. * "git clone" command learned the "--bundle-uri" option to \ coordinate with hosting sites the use of pre-prepared bundle files. * "git range-diff" learned to honor pathspec argument if given. * "git format-patch --from=<ident>" can be told to add an in-body "From:" line even for commits that are authored by the given <ident> with "--force-in-body-from" option. * The built-in fsmonitor refuses to work on a network mounted repositories; a configuration knob for users to override this has been introduced. * The "scalar" addition from Microsoft is now part of the core Git installation. Performance, Internal Implementation, Development Support etc. * Collection of what is referenced by objects in promisor packs have been optimized to inspect these objects in the in-pack order. * Introduce a helper to see if a branch is already being worked on (hence should not be newly checked out in a working tree), which performs much better than the existing find_shared_symref() to replace many uses of the latter. * Teach "git archive" to (optionally and then by default) avoid spawning an external "gzip" process when creating \ ".tar.gz" (and ".tgz") archives. * Allow large objects read from a packstream to be streamed into a loose object file straight, without having to keep it in-core as a whole. * Further preparation to turn git-submodule.sh into a builtin continues. * Apply Coccinelle rule to turn raw memmove() into MOVE_ARRAY() cpp macro, which would improve maintainability and readability. * Teach "make all" to build gitweb as well. * Tweak tests so that they still work when the "git init" template did not create .git/info directory. * Add Coccinelle rules to detect the pattern of initializing and then finalizing a structure without using it in between at all, which happens after code restructuring and the compilers fail to recognize as an unused variable. * The code to convert between GPG trust level strings and internal constants we use to represent them have been cleaned up. * Support for libnettle as SHA256 implementation has been added. * The way "git multi-pack" uses parse-options API has been improved. * A Coccinelle rule (in contrib/) to encourage use of COPY_ARRAY macro has been improved. * API tweak to make it easier to run fuzz testing on commit-graph parser. * Omit fsync-related trace2 entries when their values are all zero. * The codepath to write multi-pack index has been taught to release a large chunk of memory that holds an array of objects in the packs, as soon as it is done with the array, to reduce memory consumption. * Add a level of redirection to array allocation API in xdiff part, to make it easier to share with the libgit2 project. * "git fetch" client logs the partial clone filter used in the trace2 output. * The "bundle URI" design gets documented. * The common ancestor negotiation exchange during a "git fetch" session now leaves trace log. * Test portability improvements. (merge 4d1d843be7 mt/rot13-in-c later to maint). * The "subcommand" mode is introduced to parse-options API and update the command line parser of Git commands with subcommands. * The pack bitmap file gained a bitmap-lookup table to speed up locating the necessary bitmap for a given commit. * The assembly version of SHA-1 implementation for PPC has been removed. * The server side that responds to "git fetch" and "git clone" request has been optimized by allowing it to send objects in its object store without recomputing and validating the object names. * Annotate function parameters that are not used (but cannot be removed for structural reasons), to prepare us to later compile with -Wunused warning turned on. * Share the text used to explain configuration variables used by "git <subcmd>" in "git help <subcmd>" with the text \ from "git help config". * "git mv A B" in a sparsely populated working tree can be asked to move a path from a directory that is "in cone" to another directory that is "out of cone". Handling of such a case has been improved. * The chainlint script for our tests has been revamped. Fixes since v2.37 ----------------- * Rewrite of "git add -i" in C that appeared in Git 2.25 didn't correctly record a removed file to the index, which was fixed. * Certain diff options are currently ignored when combined-diff is shown; mark them as incompatible with the feature. * Adjust technical/bitmap-format to be formatted by AsciiDoc, and add some missing information to the documentation. * Fixes for tests when the source directory has unusual characters in its path, e.g. whitespaces, double-quotes, etc. * "git mktree --missing" lazily fetched objects that are missing from the local object store, which was totally unnecessary for the purpose of creating the tree object(s) from its input. * Give _() markings to fatal/warning/usage: labels that are shown in front of these messages. * References to commands-to-be-typed-literally in "git rebase" documentation mark-up have been corrected. * In a non-bare repository, the behavior of Git when the core.worktree configuration variable points at a directory that has a repository as its subdirectory, regressed in Git 2.27 days. * Recent update to vimdiff layout code has been made more robust against different end-user vim settings. * Plug various memory leaks, both in the main code and in test-tool commands. * Fixes a long-standing corner case bug around directory renames in the merge-ort strategy. * The resolve-undo information in the index was not protected against GC, which has been corrected. * A corner case bug where lazily fetching objects from a promisor remote resulted in infinite recursion has been corrected. * "git clone" from a repository with some ref whose HEAD is unborn did not set the HEAD in the resulting repository correctly, which has been corrected. * An earlier attempt to plug leaks placed a clean-up label to jump to at a bogus place, which as been corrected. * Variable quoting fix in the vimdiff driver of "git mergetool" * "git shortlog -n" relied on the underlying qsort() to be stable, which shouldn't have. Fixed. * A fix for a regression in test framework. * mkstemp() emulation on Windows has been improved. * Add missing documentation for "include" and "includeIf" \ features in "git config" file format, which incidentally teaches the command line completion to include them in its offerings. * Avoid "white/black-list" in documentation and code comments. * Workaround for a compiler warning against use of die() in osx-keychain (in contrib/). * Workaround for a false positive compiler warning. * "git p4" working on UTF-16 files on Windows did not implement CRLF-to-LF conversion correctly, which has been corrected. * "git p4" did not handle non-ASCII client name well, which has been corrected. * "rerere-train" script (in contrib/) used to honor commit.gpgSign while recreating the throw-away merges. * "git checkout" miscounted the paths it updated, which has been corrected. * Fix for a bug that makes write-tree to fail to write out a non-existent index as a tree, introduced in 2.37. * There was a bug in the codepath to upgrade generation information in commit-graph from v1 to v2 format, which has been corrected. * Gitweb had legacy URL shortener that is specific to the way projects hosted on kernel.org used to (but no longer) work, which has been removed. * Fix build procedure for Windows that uses CMake so that it can pick up the shell interpreter from local installation location. * Conditionally allow building Python interpreter on Windows * Fix to lstat() emulation on Windows. * Older gcc with -Wall complains about the universal zero initializer "struct s = { 0 };" idiom, which makes developers' lives inconvenient (as -Werror is enabled by DEVELOPER=YesPlease). The build procedure has been tweaked to help these compilers. * Plug memory leaks in the failure code path in the "merge-ort" merge strategy backend. * "git symbolic-ref symref non..sen..se" is now diagnosed as an error. * A follow-up fix to a fix for a regression in 2.36 around hooks. * Avoid repeatedly running getconf to ask libc version in the test suite, and instead just as it once per script. * Platform-specific code that determines if a directory is OK to use as a repository has been taught to report more details, especially on Windows. * "vimdiff3" regression fix. * "git fsck" reads mode from tree objects but canonicalizes the mode before passing it to the logic to check object sanity, which has hid broken tree objects from the checking logic. This has been corrected, but to help existing projects with broken tree objects that they cannot fix retroactively, the severity of anomalies this code detects has been demoted to "info" for now. * Fixes to sparse index compatibility work for "reset" and \ "checkout" commands. * An earlier optimization discarded a tree-object buffer that is still in use, which has been corrected. * Fix deadlocks between main Git process and subprocess spawned via the pipe_command() API, that can kill "git add -p" that was reimplemented in C recently. * The sequencer machinery translated messages left in the reflog by mistake, which has been corrected. * xcalloc(), imitating calloc(), takes "number of elements of the array", and "size of a single element", in this order. A call that does not follow this ordering has been corrected. * The preload-index codepath made copies of pathspec to give to multiple threads, which were left leaked. * Update the version of Ubuntu used for GitHub Actions CI from 18.04 to 22.04. * The auto-stashed local changes created by "git merge --autostash" was mixed into a conflicted state left in the working tree, which has been corrected. * Multi-pack index got corrupted when preferred pack changed from one pack to another in a certain way, which has been corrected. (merge 99e4d084ff tb/midx-with-changing-preferred-pack-fix later to maint). * The clean-up of temporary files created via mks_tempfile_dt() was racy and attempted to unlink() the leading directory when signals are involved, which has been corrected. (merge babe2e0559 rs/tempfile-cleanup-race-fix later to maint). * FreeBSD portability fix for "git maintenance" that spawns \ "crontab" to schedule tasks. (merge ee69e7884e bc/gc-crontab-fix later to maint). * Those who use diff-so-fancy as the diff-filter noticed a regression or two in the code that parses the diff output in the built-in version of "add -p", which has been corrected. (merge 0a101676e5 js/add-p-diff-parsing-fix later to maint). * Segfault fix-up to an earlier fix to the topic to teach "git reset" and "git checkout" work better in a sparse checkout. (merge 037f8ea6d9 vd/sparse-reset-checkout-fixes later to maint). * "git diff --no-index A B" managed its the pathnames of its two input files rather haphazardly, sometimes leaking them. The command line argument processing has been straightened out to clean it up. (merge 2b43dd0eb5 rs/diff-no-index-cleanup later to maint). * "git rev-list --verify-objects" ought to inspect the contents of objects and notice corrupted ones, but it didn't when the commit graph is in use, which has been corrected. (merge b27ccae34b jk/rev-list-verify-objects-fix later to maint). * More fixes to "add -p" (merge 64ec8efb83 js/builtin-add-p-portability-fix later to maint). * The parser in the script interface to parse-options in "git rev-parse" has been updated to diagnose a bogus input correctly. (merge f20b9c36d0 ow/rev-parse-parseopt-fix later to maint). * The code that manages list-object-filter structure, used in partial clones, leaked the instances, which has been plugged. (merge 66eede4a37 jk/plug-list-object-filter-leaks later to maint). * Fix another UI regression in the reimplemented "add -p". (merge f6f0ee247f rs/add-p-worktree-mode-prompt-fix later to maint). * "git fetch" over protocol v2 sent an incorrect ref prefix request to the server and made "git pull" with configured fetch refspec that does not cover the remote branch to merge with fail, which has been corrected. (merge 49ca2fba39 jk/proto-v2-ref-prefix-fix later to maint). * A result from opendir() was leaking in the commit-graph expiration codepath, which has been plugged. (merge 12f1ae5324 ml/commit-graph-expire-dir-leak-fix later to maint). * Just like we have coding guidelines, we now have guidelines for reviewers. (merge e01b851923 vd/doc-reviewing-guidelines later to maint). * Other code cleanup, docfix, build fix, etc. (merge 77b9e85c0f vd/fix-perf-tests later to maint). (merge 0682bc43f5 jk/test-crontab-fixes later to maint). (merge b46dd1726c cc/doc-trailer-whitespace-rules later to maint). |
2022-07-06 13:54:00 by Adam Ciarcinski | Files touched by this commit (5) | |
Log message: git: updated to 2.37.0 Git v2.37 Release Notes ======================= UI, Workflows & Features * "vimdiff[123]" mergetool drivers have been reimplemented with a more generic layout mechanism. * "git -v" and "git -h" are now understood as "git \ --version" and "git --help". * The temporary files fed to external diff command are now generated inside a new temporary directory under the same basename. * "git log --since=X" will stop traversal upon seeing a commit that is older than X, but there may be commits behind it that is younger than X when the commit was created with a faulty clock. A new option is added to keep digging without stopping, and instead filter out commits with timestamp older than X. * "git -c branch.autosetupmerge=simple branch $A $B" will set the $B as $A's upstream only when $A and $B shares the same name, and "git -c push.default=simple" on branch $A would push to update the branch $A at the remote $B came from. Also more places use the sole remote, if exists, before defaulting to 'origin'. * A new doc has been added that lists tips for tools to work with Git's codebase. * "git remote -v" now shows the list-objects-filter used during fetching from the remote, if available. * With the new http.curloptResolve configuration, the CURLOPT_RESOLVE mechanism that allows cURL based applications to use pre-resolved IP addresses for the requests is exposed to the scripts. * "git add -i" was rewritten in C some time ago and has been in testing; the reimplementation is now exposed to general public by default. * Deprecate non-cone mode of the sparse-checkout feature. * Introduce a filesystem-dependent mechanism to optimize the way the bits for many loose object files are ensured to hit the disk platter. * The "do not remove the directory the user started Git in" logic, when Git cannot tell where that directory is, is disabled. Earlier we refused to run in such a case. * A mechanism to pack unreachable objects into a "cruft pack", instead of ejecting them into loose form to be reclaimed later, has been introduced. * Update the doctype written in gitweb output to xhtml5. * The "transfer.credentialsInURL" configuration variable controls what happens when a URL with embedded login credential is used on either "fetch" or "push". Credentials are currently only detected in `remote.<name>.url` config, not `remote.<name>.pushurl`. * "git revert" learns "--reference" option to use more \ human-readable reference to the commit it reverts in the message template it prepares for the user. * Various error messages that talk about the removal of "--preserve-merges" in "rebase" have been strengthened, \ and "rebase --abort" learned to get out of a state that was left by an earlier use of the option. Performance, Internal Implementation, Development Support etc. * The performance of the "untracked cache" feature has been improved when "--untracked-files=<mode>" and \ "status.showUntrackedFiles" are combined. * "git stash" works better with sparse index entries. * "git show :<path>" learned to work better with the sparse-index feature. * Introduce and apply coccinelle rule to discourage an explicit comparison between a pointer and NULL, and applies the clean-up to the maintenance track. * Preliminary code refactoring around transport and bundle code. * "sparse-checkout" learns to work better with the sparse-index feature. * A workflow change for translators are being proposed. git.pot is no longer version controlled and it is local responsibility of translators to generate it. * Plug the memory leaks from the trickiest API of all, the revision walker. * Rename .env_array member to .env in the child_process structure. * The fsmonitor--daemon handles even more corner cases when watching filesystem events. * A new bug() and BUG_if_bug() API is introduced to make it easier to uniformly log "detect multiple bugs and abort in the end" pattern. Fixes since v2.36 ----------------- * "git submodule update" without pathspec should silently skip an uninitialized submodule, but it started to become noisy by mistake. (merge 4f1ccef87c gc/submodule-update-part2 later to maint). * "diff-tree --stdin" has been broken for about a year, but 2.36 release broke it even worse by breaking running the command with <pathspec>, which in turn broke "gitk" and got noticed. This has been corrected by aligning its behaviour to that of "log". (merge f8781bfda3 jc/diff-tree-stdin-fix later to maint). * Regression fix for 2.36 where "git name-rev" started to sometimes reference strings after they are freed. (merge 45a14f578e rs/name-rev-fix-free-after-use later to maint). * "git show <commit1> <commit2>... -- <pathspec>" \ lost the pathspec when showing the second and subsequent commits, which has been corrected. (merge 5cdb38458e jc/show-pathspec-fix later to maint). * "git fast-export -- <pathspec>" lost the pathspec when showing the second and subsequent commits, which has been corrected. (merge d1c25272f5 rs/fast-export-pathspec-fix later to maint). * "git format-patch <args> -- <pathspec>" lost the \ pathspec when showing the second and subsequent commits, which has been corrected. (merge 91f8f7e46f rs/format-patch-pathspec-fix later to maint). * "git clone --origin X" leaked piece of memory that held value read from the clone.defaultRemoteName configuration variable, which has been plugged. (merge 6dfadc8981 jc/clone-remote-name-leak-fix later to maint). * Get rid of a bogus and over-eager coccinelle rule. (merge 08bdd3a185 jc/cocci-xstrdup-or-null-fix later to maint). * The path taken by "git multi-pack-index" command from the end user was compared with path internally prepared by the tool without first normalizing, which lead to duplicated paths not being noticed, which has been corrected. (merge 11f9e8de3d ds/midx-normalize-pathname-before-comparison later to maint). * Correct choices of C compilers used in various CI jobs. (merge 3506cae04f ab/cc-package-fixes later to maint). * Various cleanups to "git p4". (merge 4ff0108d9e jh/p4-various-fixups later to maint). * The progress meter of "git blame" was showing incorrect numbers when processing only parts of the file. (merge e5f5d7d42e ea/progress-partial-blame later to maint). * "git rebase --keep-base <upstream> <branch-to-rebase>" \ computed the commit to rebase onto incorrectly, which has been corrected. (merge 9e5ebe9668 ah/rebase-keep-base-fix later to maint). * Fix a leak of FILE * in an error codepath. (merge c0befa0c03 kt/commit-graph-plug-fp-leak-on-error later to maint). * Avoid problems from interaction between malloc_check and address sanitizer. (merge 067109a5e7 pw/test-malloc-with-sanitize-address later to maint). * The commit summary shown after making a commit is matched to what is given in "git status" not to use the break-rewrite heuristics. (merge 84792322ed rs/commit-summary-wo-break-rewrite later to maint). * Update a few end-user facing messages around EOL conversion. (merge c970d30c2c ah/convert-warning-message later to maint). * Trace2 documentation updates. (merge a6c80c313c js/trace2-doc-fixes later to maint). * Build procedure fixup. (merge 1fbfd96f50 mg/detect-compiler-in-c-locale later to maint). * "git pull" without "--recurse-submodules=<arg>" made submodule.recurse take precedence over fetch.recurseSubmodules by mistake, which has been corrected. (merge 5819417365 gc/pull-recurse-submodules later to maint). * "git bisect" was too silent before it is ready to start computing the actual bisection, which has been corrected. (merge f11046e6de cd/bisect-messages-from-pre-flight-states later to maint). * macOS CI jobs have been occasionally flaky due to tentative version skew between perforce and the homebrew packager. Instead of failing the whole CI job, just let it skip the p4 tests when this happens. (merge f15e00b463 cb/ci-make-p4-optional later to maint). * A bit of test framework fixes with a few fixes to issues found by valgrind. (merge 7c898554d7 ab/valgrind-fixes later to maint). * "git archive --add-file=<path>" picked up the raw permission bits from the path and propagated to zip output in some cases, without normalization, which has been corrected (tar output did not have this issue). (merge 6a61661967 jc/archive-add-file-normalize-mode later to maint). * "make coverage-report" without first running "make \ coverage" did not produce any meaningful result, which has been corrected. (merge 96ddfecc5b ep/coverage-report-wants-test-to-have-run later to maint). * The "--current" option of "git show-branch" should have \ been made incompatible with the "--reflog" mode, but this was not enforced, which has been corrected. (merge 41c64ae0e7 jc/show-branch-g-current later to maint). * "git fetch" unnecessarily failed when an unexpected optional section appeared in the output, which has been corrected. (merge 7709acf7be jt/fetch-peek-optional-section later to maint). * The way "git fetch" without "--update-head-ok" ensures \ that HEAD in no worktree points at any ref being updated was too wasteful, which has been optimized a bit. (merge f7400da800 os/fetch-check-not-current-branch later to maint). * "git fetch --recurse-submodules" from multiple remotes (either from a remote group, or "--all") used to make one extra "git \ fetch" in the submodules, which has been corrected. (merge 0353c68818 jc/avoid-redundant-submodule-fetch later to maint). * With a recent update to refuse access to repositories of other people by default, "sudo make install" and "sudo git describe" stopped working, which has been corrected. (merge 6b11e3d52e cb/path-owner-check-with-sudo-plus later to maint). * The tests that ensured merges stop when interfering local changes are present did not make sure that local changes are preserved; now they do. (merge 4b317450ce jc/t6424-failing-merge-preserve-local-changes later to maint). * Some real problems noticed by gcc 12 have been fixed, while false positives have been worked around. * Update the version of FreeBSD image used in Cirrus CI. (merge c58bebd4c6 pb/use-freebsd-12.3-in-cirrus-ci later to maint). * The multi-pack-index code did not protect the packfile it is going to depend on from getting removed while in use, which has been corrected. (merge 4090511e40 tb/midx-race-in-pack-objects later to maint). * Teach "git repack --geometric" work better with \ "--keep-pack" and avoid corrupting the repository when packsize limit is used. (merge 66731ff921 tb/geom-repack-with-keep-and-max later to maint). * The documentation on the interaction between "--add-file" and "--prefix" options of "git archive" has been improved. (merge a75910602a rs/document-archive-prefix later to maint). * A git subcommand like "git add -p" spawns a separate git process while relaying its command line arguments. A pathspec with only negative elements was mistakenly passed with an empty string, which has been corrected. (merge b02fdbc80a jc/all-negative-pathspec later to maint). * With a more targeted workaround in http.c in another topic, we may be able to lift this blanket "GCC12 dangling-pointer warning is broken and unsalvageable" workaround. (merge 419141e495 cb/buggy-gcc-12-workaround later to maint). * A misconfigured 'branch..remote' led to a bug in configuration parsing. (merge f1dfbd9ee0 gc/zero-length-branch-config-fix later to maint). * "git -c diff.submodule=log range-diff" did not show anything for submodules that changed in the ranges being compared, and "git -c diff.submodule=diff range-diff" did not work correctly. Fix this by including the "--submodule=short" output unconditionally to be compared. * In Git 2.36 we revamped the way how hooks are invoked. One change that is end-user visible is that the output of a hook is no longer directly connected to the standard output of "git" that spawns the hook, which was noticed post release. This is getting corrected. (merge a082345372 ab/hooks-regression-fix later to maint). * Updating the graft information invalidates the list of parents of in-core commit objects that used to be in the graft file. * "git show-ref --heads" (and "--tags") still iterated over \ all the refs only to discard refs outside the specified area, which has been corrected. (merge c0c9d35e27 tb/show-ref-optim later to maint). * Remove redundant copying (with index v3 and older) or possible over-reading beyond end of mmapped memory (with index v4) has been corrected. (merge 6d858341d2 zh/read-cache-copy-name-entry-fix later to maint). * Sample watchman interface hook sometimes failed to produce correctly formatted JSON message, which has been corrected. (merge 134047b500 sn/fsmonitor-missing-clock later to maint). * Use-after-free (with another forget-to-free) fix. (merge 323822c72b ab/remote-free-fix later to maint). * Remove a coccinelle rule that is no longer relevant. (merge b1299de4a1 jc/cocci-cleanup later to maint). * Other code cleanup, docfix, build fix, etc. (merge e6b2582da3 cm/reftable-0-length-memset later to maint). (merge 0b75e5bf22 ab/misc-cleanup later to maint). (merge 52e1ab8a76 ea/rebase-code-simplify later to maint). (merge 756d15923b sg/safe-directory-tests-and-docs later to maint). (merge d097a23bfa ds/do-not-call-bug-on-bad-refs later to maint). (merge c36c27e75c rs/t7812-pcre2-ws-bug-test later to maint). (merge 1da312742d gf/unused-includes later to maint). (merge 465b30a92d pb/submodule-recurse-mode-enum later to maint). (merge 82b28c4ed8 km/t3501-use-test-helpers later to maint). (merge 72315e431b sa/t1011-use-helpers later to maint). (merge 95b3002201 cg/vscode-with-gdb later to maint). (merge fbe5f6b804 tk/p4-utf8-bom later to maint). (merge 17f273ffba tk/p4-with-explicity-sync later to maint). (merge 944db25c60 kf/p4-multiple-remotes later to maint). (merge b014cee8de jc/update-ozlabs-url later to maint). (merge 4ec5008062 pb/ggg-in-mfc-doc later to maint). (merge af845a604d tb/receive-pack-code-cleanup later to maint). (merge 2acf4cf001 js/ci-gcc-12-fixes later to maint). (merge 05e280c0a6 jc/http-clear-finished-pointer later to maint). (merge 8c49d704ef fh/transport-push-leakfix later to maint). (merge 1d232d38bd tl/ls-tree-oid-only later to maint). (merge db7961e6a6 gc/document-config-worktree-scope later to maint). (merge ce18a30bb7 fs/ssh-default-key-command-doc later to maint). |
2022-06-28 13:38:00 by Thomas Klausner | Files touched by this commit (3952) |
Log message: *: recursive bump for perl 5.36 |
2022-05-03 03:26:55 by David H. Gutteridge | Files touched by this commit (4) | |
Log message: 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). |
2021-10-13 08:56:09 by Adam Ciarcinski | Files touched by this commit (4) | |
Log message: git: updated to 2.33.1 Git 2.33.1 Release Notes ======================== This primarily is to backport various fixes accumulated during the development towards Git 2.34, the next feature release. Fixes since v2.33 ----------------- * The unicode character width table (used for output alignment) has been updated. * Input validation of "git pack-objects --stdin-packs" has been corrected. * Bugfix for common ancestor negotiation recently introduced in "git push" codepath. * "git pull" had various corner cases that were not well thought out around its --rebase backend, e.g. "git pull --ff-only" did not stop but went ahead and rebased when the history on other side is not a descendant of our history. The series tries to fix them up. * "git apply" miscounted the bytes and failed to read to the end of binary hunks. * "git range-diff" code clean-up. * "git commit --fixup" now works with "--edit" again, after \ it was broken in v2.32. * Use upload-artifacts v1 (instead of v2) for 32-bit linux, as the new version has a blocker bug for that architecture. * Checking out all the paths from HEAD during the last conflicted step in "git rebase" and continuing would cause the step to be skipped (which is expected), but leaves MERGE_MSG file behind in $GIT_DIR and confuses the next "git commit", which has been corrected. * Various bugs in "git rebase -r" have been fixed. * mmap() imitation used to call xmalloc() that dies upon malloc() failure, which has been corrected to just return an error to the caller to be handled. * "git diff --relative" segfaulted and/or produced incorrect result when there are unmerged paths. * The delayed checkout code path in "git checkout" etc. were chatty even when --quiet and/or --no-progress options were given. * "git branch -D <branch>" used to refuse to remove a broken branch ref that points at a missing commit, which has been corrected. * Build update for Apple clang. * The parser for the "--nl" option of "git column" has been corrected. * "git upload-pack" which runs on the other side of "git fetch" forgot to take the ref namespaces into account when handling want-ref requests. * The sparse-index support can corrupt the index structure by storing a stale and/or uninitialized data, which has been corrected. * Buggy tests could damage repositories outside the throw-away test area we created. We now by default export GIT_CEILING_DIRECTORIES to limit the damage from such a stray test. * Even when running "git send-email" without its own threaded discussion support, a threading related header in one message is carried over to the subsequent message to result in an unwanted threading, which has been corrected. * The output from "git fast-export", when its anonymization feature is in use, showed an annotated tag incorrectly. * Recent "diff -m" changes broke "gitk", which has been \ corrected. * "git maintenance" scheduler fix for macOS. * A pathname in an advice message has been made cut-and-paste ready. * The "git apply -3" code path learned not to bother the lower level merge machinery when the three-way merge can be trivially resolved without the content level merge. * The code that optionally creates the *.rev reverse index file has been optimized to avoid needless computation when it is not writing the file out. * "git range-diff -I... <range> <range>" segfaulted, \ which has been corrected. * The order in which various files that make up a single (conceptual) packfile has been reevaluated and straightened up. This matters in correctness, as an incomplete set of files must not be shown to a running Git. * The "mode" word is useless in a call to open(2) that does not create a new file. Such a call in the files backend of the ref subsystem has been cleaned up. * "git update-ref --stdin" failed to flush its output as needed, which potentially led the conversation to a deadlock. * When "git am --abort" fails to abort correctly, it still exited with exit status of 0, which has been corrected. * Correct nr and alloc members of strvec struct to be of type size_t. * "git stash", where the tentative change involves changing a directory to a file (or vice versa), was confused, which has been corrected. * "git clone" from a repository whose HEAD is unborn into a bare repository didn't follow the branch name the other side used, which is corrected. * "git cvsserver" had a long-standing bug in its authentication code, which has finally been corrected (it is unclear and is a separate question if anybody is seriously using it, though). * "git difftool --dir-diff" mishandled symbolic links. * Sensitive data in the HTTP trace were supposed to be redacted, but we failed to do so in HTTP/2 requests. * "make clean" has been updated to remove leftover .depend/ directories, even when it is not told to use them to compute header dependencies. * Protocol v0 clients can get stuck parsing a malformed feature line. Also contains various documentation updates and code clean-ups. |
2021-06-13 20:36:32 by Adam Ciarcinski | Files touched by this commit (6) | |
Log message: git: updated to 2.32.0 Git 2.32 Release Notes ====================== Backward compatibility notes ---------------------------- * ".gitattributes", ".gitignore", and ".mailmap" \ files that are symbolic links are ignored. * "git apply --3way" used to first attempt a straight application, and only fell back to the 3-way merge algorithm when the stright application failed. Starting with this version, the command will first try the 3-way merge algorithm and only when it fails (either resulting with conflict or the base versions of blobs are missing), falls back to the usual patch application. Updates since v2.31 ------------------- UI, Workflows & Features * It does not make sense to make ".gitattributes", \ ".gitignore" and ".mailmap" symlinks, as they are supposed to be usable from the object store (think: bare repositories where HEAD:.mailmap etc. are used). When these files are symbolic links, we used to read the contents of the files pointed by them by mistake, which has been corrected. * "git stash show" learned to optionally show untracked part of the stash. * "git log --format='...'" learned "%(describe)" placeholder. * "git repack" so far has been only capable of repacking everything under the sun into a single pack (or split by size). A cleverer strategy to reduce the cost of repacking a repository has been introduced. * The http codepath learned to let the credential layer to cache the password used to unlock a certificate that has successfully been used. * "git commit --fixup=<commit>", which was to tweak the changes made to the contents while keeping the original log message intact, learned "--fixup=(amend|reword):<commit>", that can be used to tweak both the message and the contents, and only the message, respectively. * "git send-email" learned to honor the core.hooksPath configuration. * "git format-patch -v<n>" learned to allow a reroll count that is not an integer. * "git commit" learned "--trailer \ <key>[=<value>]" option; together with the interpret-trailers command, this will make it easier to support custom trailers. * "git clone --reject-shallow" option fails the clone as soon as we notice that we are cloning from a shallow repository. * A configuration variable has been added to force tips of certain refs to be given a reachability bitmap. * "gitweb" learned "e-mail privacy" feature to redact \ strings that look like e-mail addresses on various pages. * "git apply --3way" has always been "to fall back to 3-way merge only when straight application fails". Swap the order of falling back so that 3-way is always attempted first (only when the option is given, of course) and then straight patch application is used as a fallback when it fails. * "git apply" now takes "--3way" and "--cached" \ at the same time, and work and record results only in the index. * The command line completion (in contrib/) has learned that CHERRY_PICK_HEAD is a possible pseudo-ref. * Userdiff patterns for "Scheme" has been added. * "git log" learned "--diff-merges=<style>" option, \ with an associated configuration variable log.diffMerges. * "git log --format=..." placeholders learned %ah/%ch placeholders to request the --date=human output. * Replace GIT_CONFIG_NOSYSTEM mechanism to decline from reading the system-wide configuration file with GIT_CONFIG_SYSTEM that lets users specify from which file to read the system-wide configuration (setting it to an empty file would essentially be the same as setting NOSYSTEM), and introduce GIT_CONFIG_GLOBAL to override the per-user configuration in $HOME/.gitconfig. * "git add" and "git rm" learned not to touch those paths \ that are outside of sparse checkout. * "git rev-list" learns the \ "--filter=object:type=<type>" option, which can be used to exclude objects of the given kind from the packfile generated by pack-objects. * The command line completion (in contrib/) for "git stash" has been updated. * "git subtree" updates. * It is now documented that "format-patch" skips merges. * Options to "git pack-objects" that take numeric values like --window and --depth should not accept negative values; the input validation has been tightened. * The way the command line specified by the trailer.<token>.command configuration variable receives the end-user supplied value was both error prone and misleading. An alternative to achieve the same goal in a safer and more intuitive way has been added, as the trailer.<token>.cmd configuration variable, to replace it. * "git add -i --dry-run" does not dry-run, which was surprising. The combination of options has taught to error out. * "git push" learns to discover common ancestor with the receiving end over protocol v2. This will hopefully make "git push" as efficient as "git fetch" in avoiding objects from getting transferred unnecessarily. * "git mailinfo" (hence "git am") learned the \ "--quoted-cr" option to control how lines ending with CRLF wrapped in base64 or qp are handled. Performance, Internal Implementation, Development Support etc. * Rename detection rework continues. * GIT_TEST_FAIL_PREREQS is a mechanism to skip test pieces with prerequisites to catch broken tests that depend on the side effects of optional pieces, but did not work at all when negative prerequisites were involved. (merge 27d578d904 jk/fail-prereq-testfix later to maint). * "git diff-index" codepath has been taught to trust fsmonitor status to reduce number of lstat() calls. (merge 7e5aa13d2c nk/diff-index-fsmonitor later to maint). * Reorganize Makefile to allow building git.o and other essential objects without extra stuff needed only for testing. * Preparatory API changes for parallel checkout. * A simple IPC interface gets introduced to build services like fsmonitor on top. * Fsck API clean-up. * SECURITY.md that is facing individual contributors and end users has been introduced. Also a procedure to follow when preparing embargoed releases has been spelled out. (merge 09420b7648 js/security-md later to maint). * Optimize "rev-list --use-bitmap-index --objects" corner case that uses negative tags as the stopping points. * CMake update for vsbuild. * An on-disk reverse-index to map the in-pack location of an object back to its object name across multiple packfiles is introduced. * Generate [ec]tags under $(QUIET_GEN). * Clean-up codepaths that implements "git send-email --validate" option and improves the message from it. * The last remnant of gettext-poison has been removed. * The test framework has been taught to optionally turn the default merge strategy to "ort" throughout the system where we use three-way merges internally, like cherry-pick, rebase etc., primarily to enhance its test coverage (the strategy has been available as an explicit "-s ort" choice). * A bit of code clean-up and a lot of test clean-up around userdiff area. * Handling of "promisor packs" that allows certain objects to be missing and lazily retrievable has been optimized (a bit). * When packet_write() fails, we gave an extra error message unnecessarily, which has been corrected. * The checkout machinery has been taught to perform the actual write-out of the files in parallel when able. * Show errno in the trace output in the error codepath that calls read_raw_ref method. * Effort to make the command line completion (in contrib/) safe with "set -u" continues. * Tweak a few tests for "log --format=..." that show timestamps in various formats. * The reflog expiry machinery has been taught to emit trace events. * Over-the-wire protocol learns a new request type to ask for object sizes given a list of object names. Fixes since v2.31 ----------------- * The fsmonitor interface read from its input without making sure there is something to read from. This bug is new in 2.31 timeframe. * The data structure used by fsmonitor interface was not properly duplicated during an in-core merge, leading to use-after-free etc. * "git bisect" reimplemented more in C during 2.30 timeframe did not take an annotated tag as a good/bad endpoint well. This regression has been corrected. * Fix macros that can silently inject unintended null-statements. * CALLOC_ARRAY() macro replaces many uses of xcalloc(). * Update insn in Makefile comments to run fuzz-all target. * Fix a corner case bug in "git mv" on case insensitive systems, which was introduced in 2.29 timeframe. * We had a code to diagnose and die cleanly when a required clean/smudge filter is missing, but an assert before that unnecessarily fired, hiding the end-user facing die() message. (merge 6fab35f748 mt/cleanly-die-upon-missing-required-filter later to maint). * Update C code that sets a few configuration variables when a remote is configured so that it spells configuration variable names in the canonical camelCase. (merge 0f1da600e6 ab/remote-write-config-in-camel-case later to maint). * A new configuration variable has been introduced to allow choosing which version of the generation number gets used in the commit-graph file. (merge 702110aac6 ds/commit-graph-generation-config later to maint). * Perf test update to work better in secondary worktrees. (merge 36e834abc1 jk/perf-in-worktrees later to maint). * Updates to memory allocation code around the use of pcre2 library. (merge c1760352e0 ab/grep-pcre2-allocfix later to maint). * "git -c core.bare=false clone --bare ..." would have segfaulted, which has been corrected. (merge 75555676ad bc/clone-bare-with-conflicting-config later to maint). * When "git checkout" removes a path that does not exist in the commit it is checking out, it wasn't careful enough not to follow symbolic links, which has been corrected. (merge fab78a0c3d mt/checkout-remove-nofollow later to maint). * A few option description strings started with capital letters, which were corrected. (merge 5ee90326dc cc/downcase-opt-help later to maint). * Plug or annotate remaining leaks that trigger while running the very basic set of tests. (merge 68ffe095a2 ah/plugleaks later to maint). * The hashwrite() API uses a buffering mechanism to avoid calling write(2) too frequently. This logic has been refactored to be easier to understand. (merge ddaf1f62e3 ds/clarify-hashwrite later to maint). * "git cherry-pick/revert" with or without "--[no-]edit" \ did not spawn the editor as expected (e.g. "revert --no-edit" after a conflict still asked to edit the message), which has been corrected. (merge 39edfd5cbc en/sequencer-edit-upon-conflict-fix later to maint). * "git daemon" has been tightened against systems that take backslash as directory separator. (merge 9a7f1ce8b7 rs/daemon-sanitize-dir-sep later to maint). * A NULL-dereference bug has been corrected in an error codepath in "git for-each-ref", "git branch --list" etc. (merge c685450880 jk/ref-filter-segfault-fix later to maint). * Streamline the codepath to fix the UTF-8 encoding issues in the argv[] and the prefix on macOS. (merge c7d0e61016 tb/precompose-prefix-simplify later to maint). * The command-line completion script (in contrib/) had a couple of references that would have given a warning under the "-u" (nounset) option. (merge c5c0548d79 vs/completion-with-set-u later to maint). * When "git pack-objects" makes a literal copy of a part of existing packfile using the reachability bitmaps, its update to the progress meter was broken. (merge 8e118e8490 jk/pack-objects-bitmap-progress-fix later to maint). * The dependencies for config-list.h and command-list.h were broken when the former was split out of the latter, which has been corrected. (merge 56550ea718 sg/bugreport-fixes later to maint). * "git push --quiet --set-upstream" was not quiet when setting the upstream branch configuration, which has been corrected. (merge f3cce896a8 ow/push-quiet-set-upstream later to maint). * The prefetch task in "git maintenance" assumed that "git \ fetch" from any remote would fetch all its local branches, which would fetch too much if the user is interested in only a subset of branches there. (merge 32f67888d8 ds/maintenance-prefetch-fix later to maint). * Clarify that pathnames recorded in Git trees are most often (but not necessarily) encoded in UTF-8. (merge 9364bf465d ab/pathname-encoding-doc later to maint). * "git --config-env var=val cmd" weren't accepted (only --config-env=var=val was). (merge c331551ccf ps/config-env-option-with-separate-value later to maint). * When the reachability bitmap is in effect, the "do not lose recently created objects and those that are reachable from them" safety to protect us from races were disabled by mistake, which has been corrected. (merge 2ba582ba4c jk/prune-with-bitmap-fix later to maint). * Cygwin pathname handling fix. (merge bccc37fdc7 ad/cygwin-no-backslashes-in-paths later to maint). * "git rebase --[no-]reschedule-failed-exec" did not work well with its configuration variable, which has been corrected. (merge e5b32bffd1 ab/rebase-no-reschedule-failed-exec later to maint). * Portability fix for command line completion script (in contrib/). (merge f2acf763e2 si/zsh-complete-comment-fix later to maint). * "git repack -A -d" in a partial clone unnecessarily loosened objects in promisor pack. * "git bisect skip" when custom words are used for new/old did not work, which has been corrected. * A few variants of informational message "Already up-to-date" has been rephrased. (merge ad9322da03 js/merge-already-up-to-date-message-reword later to maint). * "git submodule update --quiet" did not propagate the quiet option down to underlying "git fetch", which has been corrected. (merge 62af4bdd42 nc/submodule-update-quiet later to maint). * Document that our test can use "local" keyword. (merge a84fd3bcc6 jc/test-allows-local later to maint). * The word-diff mode has been taught to work better with a word regexp that can match an empty string. (merge 0324e8fc6b pw/word-diff-zero-width-matches later to maint). * "git p4" learned to find branch points more efficiently. (merge 6b79818bfb jk/p4-locate-branch-point-optim later to maint). * When "git update-ref -d" removes a ref that is packed, it left empty directories under $GIT_DIR/refs/ for (merge 5f03e5126d wc/packed-ref-removal-cleanup later to maint). * "git clean" and "git ls-files -i" had confusion around \ working on or showing ignored paths inside an ignored directory, which has been corrected. (merge b548f0f156 en/dir-traversal later to maint). * The handling of "%(push)" formatting element of \ "for-each-ref" and friends was broken when the same codepath started handling "%(push:<what>)", which has been corrected. (merge 1e1c4c5eac zh/ref-filter-push-remote-fix later to maint). * The bash prompt script (in contrib/) did not work under "set -u". (merge 5c0cbdb107 en/prompt-under-set-u later to maint). * The "chainlint" feature in the test framework is a handy way to catch common mistakes in writing new tests, but tends to get expensive. An knob to selectively disable it has been introduced to help running tests that the developer has not modified. (merge 2d86a96220 jk/test-chainlint-softer later to maint). * The "rev-parse" command did not diagnose the lack of argument to "--path-format" option, which was introduced in v2.31 era, which has been corrected. (merge 99fc555188 wm/rev-parse-path-format-wo-arg later to maint). * Other code cleanup, docfix, build fix, etc. (merge f451960708 dl/cat-file-doc-cleanup later to maint). (merge 12604a8d0c sv/t9801-test-path-is-file-cleanup later to maint). (merge ea7e63921c jr/doc-ignore-typofix later to maint). (merge 23c781f173 ps/update-ref-trans-hook-doc later to maint). (merge 42efa1231a jk/filter-branch-sha256 later to maint). (merge 4c8e3dca6e tb/push-simple-uses-branch-merge-config later to maint). (merge 6534d436a2 bs/asciidoctor-installation-hints later to maint). (merge 47957485b3 ab/read-tree later to maint). (merge 2be927f3d1 ab/diff-no-index-tests later to maint). (merge 76593c09bb ab/detox-gettext-tests later to maint). (merge 28e29ee38b jc/doc-format-patch-clarify later to maint). (merge fc12b6fdde fm/user-manual-use-preface later to maint). (merge dba94e3a85 cc/test-helper-bloom-usage-fix later to maint). (merge 61a7660516 hn/reftable-tables-doc-update later to maint). (merge 81ed96a9b2 jt/fetch-pack-request-fix later to maint). (merge 151b6c2dd7 jc/doc-do-not-capitalize-clarification later to maint). (merge 9160068ac6 js/access-nul-emulation-on-windows later to maint). (merge 7a14acdbe6 po/diff-patch-doc later to maint). (merge f91371b948 pw/patience-diff-clean-up later to maint). (merge 3a7f0908b6 mt/clean-clean later to maint). (merge d4e2d15a8b ab/streaming-simplify later to maint). (merge 0e59f7ad67 ah/merge-ort-i18n later to maint). (merge e6f68f62e0 ls/typofix later to maint). |