swh:1:snp:47f1e8bb459169b0feb652a9c3d9cbabd8526d4a

sort by:
Revision Author Date Message Commit Date
1e758cf Merge branch 'll/clone-reject-shallow' into seen * ll/clone-reject-shallow: builtin/clone.c: add --reject-shallow option 30 March 2021, 05:24:01 UTC
404c7e2 Merge branch 'en/sequencer-edit-upon-conflict-fix' into seen * en/sequencer-edit-upon-conflict-fix: sequencer: fix edit handling for cherry-pick and revert messages 30 March 2021, 05:23:59 UTC
36a4cf8 sequencer: fix edit handling for cherry-pick and revert messages save_opts() should save any non-default values. It was intended to do this, but since most options in struct replay_opts default to 0, it only saved non-zero values. Unfortunately, this does not always work for options.edit. Roughly speaking, options.edit had a default value of 0 for cherry-pick but a default value of 1 for revert. Make save_opts() record a value whenever it differs from the default. options.edit was also overly simplistic; we had more than two cases. The behavior that previously existed was as follows: Non-conflict commits Right after Conflict revert Edit iff isatty(0) Edit (ignore isatty(0)) cherry-pick No edit See above Specify --edit Edit (ignore isatty(0)) See above Specify --no-edit (*) See above (*) Before stopping for conflicts, No edit is the behavior. After stopping for conflicts, the --no-edit flag is not saved so see the first two rows. However, the expected behavior is: Non-conflict commits Right after Conflict revert Edit iff isatty(0) Edit iff isatty(0) cherry-pick No edit Edit iff isatty(0) Specify --edit Edit (ignore isatty(0)) Edit (ignore isatty(0)) Specify --no-edit No edit No edit In order to get the expected behavior, we need to change options.edit to a tri-state: unspecified, false, or true. When specified, we follow what it says. When unspecified, we need to check whether the current commit being created is resolving a conflict as well as consulting options.action and isatty(0). While at it, add a should_edit() utility function that compresses options.edit down to a boolean based on the additional information for the non-conflict case. continue_single_pick() is the function responsible for resuming after conflict cases, regardless of whether there is one commit being picked or many. Make this function stop assuming edit behavior in all cases, so that it can correctly handle !isatty(0) and specific requests to not edit the commit message. Reported-by: Renato Botelho <garga@freebsd.org> Signed-off-by: Elijah Newren <newren@gmail.com> Signed-off-by: Junio C Hamano <gitster@pobox.com> 30 March 2021, 05:22:08 UTC
e79341b Merge branch 'en/ort-perf-batch-11' into seen * en/ort-perf-batch-11: merge-ort, diffcore-rename: employ cached renames when possible merge-ort: add helper functions for using cached renames merge-ort: preserve cached renames for the appropriate side merge-ort: avoid accidental API mis-use merge-ort: add code to check for whether cached renames can be reused merge-ort: populate caches of rename detection results merge-ort: add data structures for in-memory caching of rename detection 30 March 2021, 00:50:15 UTC
d6203fd Merge branch 'ab/tests-cleanup-around-sha1' into seen Remove variables that hold regexp and glob that match fixed number of hexadecimal digits from the test suite. * ab/tests-cleanup-around-sha1: tests: get rid of $_x05 from the test suite shortlog tests: rewrite to get rid of --abbrev=35 hardcoding test-lib: remove unused $_x40 and $_z40 variables git-bisect: remove unused SHA-1 $x40 shell variable 30 March 2021, 00:50:15 UTC
7cadddd Merge branch 'ab/unexpected-object-type' into seen Error reporting upon object type mismatch has been improved * ab/unexpected-object-type: tag: don't misreport type of tagged objects in errors object tests: add test for unexpected objects in tags object.c: add and use oid_is_type_or_die_msg() function object.c: add a utility function for "expected type X, got Y" tree.c: fix misindentation in parse_tree_gently() object-name.c: make dependency on object_type order more obvious object-file.c: make oid_object_info() return "enum object_type" object.c: make type_from_string() return "enum object_type" object.c: refactor type_from_string_gently() object.c: stop supporting len == -1 in type_from_string_gently() 30 March 2021, 00:50:14 UTC
4eb7874 Merge branch 'zh/commit-trailer' into seen "git commit" learned "--trailer <key>[=<value>]" option; together with the interpret-trailers command, this will make it easier to support custom trailers. * zh/commit-trailer: commit: add --trailer option 30 March 2021, 00:50:14 UTC
7445564 Merge branch 'ds/sparse-index-protections' into seen Builds on top of the sparse-index infrastructure to mark operations that are not ready to mark with the sparse index, causing them to fall back on fully-populated index that they always have worked with. * ds/sparse-index-protections: (27 commits) name-hash: use expand_to_path() sparse-index: expand_to_path() revision: ensure full index resolve-undo: ensure full index read-cache: ensure full index pathspec: ensure full index merge-recursive: ensure full index merge-ort: ensure full index entry: ensure full index dir: ensure full index diff-lib: ensure full index update-index: ensure full index sparse-checkout: ensure full index rm: ensure full index merge-index: ensure full index ls-files: ensure full index grep: ensure full index fsck: ensure full index difftool: ensure full index commit: ensure full index ... 30 March 2021, 00:50:14 UTC
5c7be45 Merge branch 'ds/sparse-index' into seen Both in-core and on-disk index has been updated to optionally omit individual entries and replace them with the tree object that corresponds to the directory that contains them when the "cone" mode of sparse checkout is in use. Minor redesign as to repo extension vs index extension may be warranted. cf. <20210326202940.GC2271@szeder.dev> * ds/sparse-index: p2000: add sparse-index repos sparse-index: loose integration with cache_tree_verify() cache-tree: integrate with sparse directory entries sparse-checkout: disable sparse-index sparse-checkout: toggle sparse index from builtin sparse-index: create extension for compatibility sparse-index: check index conversion happens unpack-trees: allow sparse directories submodule: sparse-index should not collapse links sparse-index: convert from full to sparse sparse-checkout: hold pattern list in index unpack-trees: ensure full index test-tool: don't force full index test-read-cache: print cache entries with --table t1092: compare sparse-checkout to sparse-index sparse-index: implement ensure_full_index() sparse-index: add guard to ensure full index t1092: clean up script quoting t/perf: add performance test for sparse operations sparse-index: design doc and format update 30 March 2021, 00:50:13 UTC
50ab167 Merge branch 'mt/parallel-checkout-part-2' into seen * mt/parallel-checkout-part-2: parallel-checkout: add design documentation parallel-checkout: support progress displaying parallel-checkout: add configuration options parallel-checkout: make it truly parallel unpack-trees: add basic support for parallel checkout 30 March 2021, 00:50:13 UTC
2ed88b3 Merge branch 'tb/reverse-midx' into seen An on-disk reverse-index to map the in-pack location of an object back to its object name across multiple packfiles is introduced. * tb/reverse-midx: midx.c: improve cache locality in midx_pack_order_cmp() pack-revindex: write multi-pack reverse indexes pack-write.c: extract 'write_rev_file_order' pack-revindex: read multi-pack reverse indexes Documentation/technical: describe multi-pack reverse indexes midx: make some functions non-static midx: keep track of the checksum midx: don't free midx_name early midx: allow marking a pack as preferred t/helper/test-read-midx.c: add '--show-objects' builtin/multi-pack-index.c: display usage on unrecognized command builtin/multi-pack-index.c: don't enter bogus cmd_mode builtin/multi-pack-index.c: split sub-commands builtin/multi-pack-index.c: define common usage with a macro builtin/multi-pack-index.c: don't handle 'progress' separately builtin/multi-pack-index.c: inline 'flags' with options 30 March 2021, 00:50:13 UTC
c9e709c Merge branch 'es/config-hooks' into seen The "hooks defined in config" topic. Looking good. * es/config-hooks: (37 commits) docs: unify githooks and git-hook manpages run-command: stop thinking about hooks git-send-email: use 'git hook run' for 'sendemail-validate' bugreport: use hook_exists instead of find_hook receive-pack: convert receive hooks to hook.h post-update: use hook.h library proc-receive: acquire hook list from hook.h receive-pack: convert 'update' hook to hook.h reference-transaction: look for hooks in config transport: convert pre-push hook to use config hook: convert 'post-rewrite' hook to config hooks: convert 'post-checkout' hook to hook library git-p4: use 'git hook' to run hooks receive-pack: convert push-to-checkout hook to hook.h read-cache: convert post-index-change hook to use config rebase: teach pre-rebase to use hook.h gc: use hook library for pre-auto-gc hook merge: use config-based hooks for post-merge hook am: convert applypatch hooks to use config commit: use config-based hooks ... 30 March 2021, 00:50:12 UTC
f3a2eaa Merge branch 'hn/reftable' into seen The "reftable" backend for the refs API. * hn/reftable: Add "test-tool dump-reftable" command. git-prompt: prepare for reftable refs backend Reftable support for git-core reftable: rest of library reftable: reftable file level tests reftable: read reftable files reftable: write reftable files reftable: a generic binary tree implementation reftable: reading/writing blocks reftable: (de)serialization for the polymorphic record type. reftable: add blocksource, an abstraction for random access reads reftable: utility functions reftable: add error related functionality reftable: add LICENSE init-db: set the_repository->hash_algo early on 30 March 2021, 00:50:11 UTC
507ae8a Merge branch 'ag/merge-strategies-in-c' into seen The resolve and octopus merge strategy backends have been rewritten in C. * ag/merge-strategies-in-c: sequencer: use the "octopus" merge strategy without forking sequencer: use the "resolve" strategy without forking merge: use the "octopus" strategy without forking merge: use the "resolve" strategy without forking merge-octopus: rewrite in C merge-recursive: move better_branch_name() to merge.c merge-resolve: rewrite in C merge-one-file: rewrite in C update-index: move add_cacheinfo() to read-cache.c merge-index: add a new way to invoke `git-merge-one-file' merge-index: drop the index merge-index: libify merge_one_path() and merge_all() t6060: add tests for removed files t6060: modify multiple files to expose a possible issue with merge-index t6407: modernise tests 30 March 2021, 00:50:11 UTC
faa941d Merge branch 'ab/fsck-api-cleanup' into seen Fsck API clean-up. cf. <20210317182054.5986-1-avarab@gmail.com> * ab/fsck-api-cleanup: fetch-pack: use new fsck API to printing dangling submodules fetch-pack: use file-scope static struct for fsck_options fetch-pack: don't needlessly copy fsck_options fsck.c: move gitmodules_{found,done} into fsck_options fsck.c: add an fsck_set_msg_type() API that takes enums fsck.c: pass along the fsck_msg_id in the fsck_error callback fsck.[ch]: move FOREACH_FSCK_MSG_ID & fsck_msg_id from *.c to *.h fsck.c: give "FOREACH_MSG_ID" a more specific name fsck.c: undefine temporary STR macro after use fsck.c: call parse_msg_type() early in fsck_set_msg_type() fsck.h: re-order and re-assign "enum fsck_msg_type" fsck.h: move FSCK_{FATAL,INFO,ERROR,WARN,IGNORE} into an enum fsck.c: refactor fsck_msg_type() to limit scope of "int msg_type" fsck.c: rename remaining fsck_msg_id "id" to "msg_id" fsck.c: remove (mostly) redundant append_msg_id() function fsck.c: rename variables in fsck_set_msg_type() for less confusion fsck.h: use "enum object_type" instead of "int" fsck.h: use designed initializers for FSCK_OPTIONS_{DEFAULT,STRICT} fsck.c: refactor and rename common config callback 30 March 2021, 00:50:11 UTC
2c6478c Merge branch 'en/ort-readiness' into seen Plug the ort merge backend throughout the rest of the system, and start testing it as a replacement for the recursive backend. * en/ort-readiness: (29 commits) Add testing with merge-ort merge strategy t6423: mark remaining expected failure under merge-ort as such Revert "merge-ort: ignore the directory rename split conflict for now" merge-recursive: add a bunch of FIXME comments documenting known bugs merge-ort: write $GIT_DIR/AUTO_MERGE whenever we hit a conflict t: mark several submodule merging tests as fixed under merge-ort merge-ort: implement CE_SKIP_WORKTREE handling with conflicted entries t6428: new test for SKIP_WORKTREE handling and conflicts merge-ort: support subtree shifting merge-ort: let renormalization change modify/delete into clean delete merge-ort: have ll_merge() use a special attr_index for renormalization merge-ort: add a special minimal index just for renormalization merge-ort: use STABLE_QSORT instead of QSORT where required diffcore-rename: determine which relevant_sources are no longer relevant merge-ort: record the reason that we want a rename for a file diffcore-rename: add computation of number of unknown renames diffcore-rename: check if we have enough renames for directories early on diffcore-rename: only compute dir_rename_count for relevant directories merge-ort: record the reason that we want a rename for a directory merge-ort, diffcore-rename: tweak dirs_removed and relevant_source type ... 30 March 2021, 00:50:10 UTC
3fdc450 Merge branch 'gk/gitweb-redacted-email' into jch * gk/gitweb-redacted-email: gitweb: redacted e-mail addresses feature. 30 March 2021, 00:49:44 UTC
2d7a44d Merge branch 'cc/downcase-opt-help' into jch * cc/downcase-opt-help: column, range-diff: downcase option description 30 March 2021, 00:49:40 UTC
be70b44 Merge branch 'ab/make-tags-quiet' into jch * ab/make-tags-quiet: Makefile: add QUIET_GEN to "tags" and "TAGS" targets 30 March 2021, 00:49:25 UTC
c43488f Merge branch 'js/cmake-vsbuild' into jch CMake update for vsbuild. * js/cmake-vsbuild: cmake(install): include vcpkg dlls cmake: add a preparatory work-around to accommodate `vcpkg` cmake(install): fix double .exe suffixes cmake: support SKIP_DASHED_BUILT_INS 30 March 2021, 00:49:25 UTC
6de4763 builtin/clone.c: add --reject-shallow option In some scenarios, users may want more history than the repository offered for cloning, which happens to be a shallow repository, can give them. But because users don't know it is a shallow repository until they download it to local, users should have the option to refuse to clone this kind of repository, and may want to exit the process immediately without creating any unnecessary files. Althought there is an option '--depth=x' for users to decide how deep history they can fetch, but as the unshallow cloning's depth is INFINITY, we can't know exactly the minimun 'x' value that can satisfy the minimum integrity, so we can't pass 'x' value to --depth, and expect this can obtain a complete history of a repository. In other scenarios, if we have an API that allow us to import external repository, and then perform various operations on the repo. But if the imported is a shallow one(which is actually possible), it will affect the subsequent operations. So we can choose to refuse to clone, and let's just import a normal repository. This patch offers a new option '--reject-shallow' that can reject to clone a shallow repository. Signed-off-by: lilinchao <lilinchao@oschina.cn> Signed-off-by: Junio C Hamano <gitster@pobox.com> 29 March 2021, 21:33:12 UTC
5ee9032 column, range-diff: downcase option description It is customary not to begin the help text for each option given to the parse-options API with a capital letter. Various (sub)commands' option arrays don't follow the guideline provided by the parse_options Documentation regarding the descriptions. Downcase the first word of some option descriptions for "column" and "range-diff". Signed-off-by: Chinmoy Chakraborty <chinmoy12c@gmail.com> Signed-off-by: Junio C Hamano <gitster@pobox.com> 29 March 2021, 21:06:08 UTC
958a5f5 cmake(install): include vcpkg dlls Our CMake configuration generates not only build definitions, but also install definitions: After building Git using `msbuild git.sln`, the built artifacts can be installed via `msbuild INSTALL.vcxproj`. To specify _where_ the files should be installed, the `-DCMAKE_INSTALL_PREFIX=<path>` option can be used when running CMake. However, this process would really only install the files that were just built. On Windows, we need more than that: We also need the `.dll` files of the dependencies (such as libcurl). The `vcpkg` ecosystem, which we use to obtain those dependencies, can be asked to install said `.dll` files really easily, so let's do that. This requires more than just the built `vcpkg` artifacts in the CI build definition; We now clone the `vcpkg` repository so that the relevant CMake scripts are available, in particular the ones related to defining the toolchain. Signed-off-by: Dennis Ameling <dennis@dennisameling.com> Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de> Signed-off-by: Junio C Hamano <gitster@pobox.com> 29 March 2021, 20:49:04 UTC
e8772a7 cmake: add a preparatory work-around to accommodate `vcpkg` We are about to add support for installing the `.dll` files of Git's dependencies (such as libcurl) in the CMake configuration. The `vcpkg` ecosystem from which we get said dependencies makes that relatively easy: simply turn on `X_VCPKG_APPLOCAL_DEPS_INSTALL`. However, current `vcpkg` introduces a limitation if one does that: While it is totally cool with CMake to specify multiple targets within one invocation of `install(TARGETS ...) (at least according to https://cmake.org/cmake/help/latest/command/install.html#command:install), `vcpkg`'s parser insists on a single target per `install(TARGETS ...)` invocation. Well, that's easily accomplished: Let's feed the targets individually to the `install(TARGETS ...)` function in a `foreach()` look. This also has the advantage that we do not have to manually cull off the two entries from the `${PROGRAMS_BUILT}` array before scheduling the remainder to be installed into `libexec/git-core`. Instead, we iterate through the array and decide for each entry where it wants to go. Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de> Signed-off-by: Junio C Hamano <gitster@pobox.com> 29 March 2021, 20:49:04 UTC
0621844 gitweb: redacted e-mail addresses feature. Gitweb extracts content from the Git log and makes it accessible over HTTP. As a result, e-mail addresses found in commits are exposed to web crawlers and they may not respect robots.txt. This can result in unsolicited messages. Introduce an 'email-privacy' feature which redacts e-mail addresses from the generated HTML content. Specifically, obscure addresses retrieved from the the author/committer and comment sections of the Git log. The feature is off by default. This feature does not prevent someone from downloading the unredacted commit log, e.g., by cloning the repository, and extracting information from it. It aims to hinder the low- effort, bulk collection of e-mail addresses by web crawlers. Signed-off-by: Georgios Kontaxis <geko1702+commits@99rst.org> Signed-off-by: Junio C Hamano <gitster@pobox.com> 29 March 2021, 19:26:55 UTC
3745e26 fetch-pack: use new fsck API to printing dangling submodules Refactor the check added in 5476e1efde (fetch-pack: print and use dangling .gitmodules, 2021-02-22) to make use of us now passing the "msg_id" to the user defined "error_func". We can now compare against the FSCK_MSG_GITMODULES_MISSING instead of parsing the generated message. Let's also replace register_found_gitmodules() with directly manipulating the "gitmodules_found" member. A recent commit moved it into "fsck_options" so we could do this here. I'm sticking this callback in fsck.c. Perhaps in the future we'd like to accumulate such callbacks into another file (maybe fsck-cb.c, similar to parse-options-cb.c?), but while we've got just the one let's just put it into fsck.c. A better alternative in this case would be some library some more obvious library shared by fetch-pack.c ad builtin/index-pack.c, but there isn't such a thing. Signed-off-by: Ævar Arnfjörð Bjarmason <avarab@gmail.com> Signed-off-by: Junio C Hamano <gitster@pobox.com> 29 March 2021, 02:03:10 UTC
c96e184 fetch-pack: use file-scope static struct for fsck_options Change code added in 5476e1efde (fetch-pack: print and use dangling .gitmodules, 2021-02-22) so that we use a file-scoped "static struct fsck_options" instead of defining one in the "fsck_gitmodules_oids()" function. We use this pattern in all of builtin/{fsck,index-pack,mktag,unpack-objects}.c. It's odd to see fetch-pack be the odd one out. One might think that we're using other fsck_options structs in fetch-pack, or doing on fsck twice there, but we're not. Signed-off-by: Ævar Arnfjörð Bjarmason <avarab@gmail.com> Signed-off-by: Junio C Hamano <gitster@pobox.com> 29 March 2021, 02:03:10 UTC
462f5ca fetch-pack: don't needlessly copy fsck_options Change the behavior of the .gitmodules validation added in 5476e1efde (fetch-pack: print and use dangling .gitmodules, 2021-02-22) so we're using one "fsck_options". I found that code confusing to read. One might think that not setting up the error_func earlier means that we're relying on the "error_func" not being set in some code in between the two hunks being modified here. But we're not, all we're doing in the rest of "cmd_index_pack()" is further setup by calling fsck_set_msg_types(), and assigning to do_fsck_object. So there was no reason in 5476e1efde to make a shallow copy of the fsck_options struct before setting error_func. Let's just do this setup at the top of the function, along with the "walk" assignment. Signed-off-by: Ævar Arnfjörð Bjarmason <avarab@gmail.com> Signed-off-by: Junio C Hamano <gitster@pobox.com> 29 March 2021, 02:03:10 UTC
c15087d fsck.c: move gitmodules_{found,done} into fsck_options Move the gitmodules_{found,done} static variables added in 159e7b080bf (fsck: detect gitmodules files, 2018-05-02) into the fsck_options struct. It makes sense to keep all the context in the same place. This requires changing the recently added register_found_gitmodules() function added in 5476e1efde (fetch-pack: print and use dangling .gitmodules, 2021-02-22) to take fsck_options. That function will be removed in a subsequent commit, but as it'll require the new gitmodules_found attribute of "fsck_options" we need this intermediate step first. An earlier version of this patch removed the small amount of duplication we now have between FSCK_OPTIONS_{DEFAULT,STRICT} with a FSCK_OPTIONS_COMMON macro. I don't think such de-duplication is worth it for this amount of copy/pasting. Signed-off-by: Ævar Arnfjörð Bjarmason <avarab@gmail.com> Signed-off-by: Junio C Hamano <gitster@pobox.com> 29 March 2021, 02:03:10 UTC
53692df fsck.c: add an fsck_set_msg_type() API that takes enums Change code I added in acf9de4c94e (mktag: use fsck instead of custom verify_tag(), 2021-01-05) to make use of a new API function that takes the fsck_msg_{id,type} types, instead of arbitrary strings that we'll (hopefully) parse into those types. At the time that the fsck_set_msg_type() API was introduced in 0282f4dced0 (fsck: offer a function to demote fsck errors to warnings, 2015-06-22) it was only intended to be used to parse user-supplied data. For things that are purely internal to the C code it makes sense to have the compiler check these arguments, and to skip the sanity checking of the data in fsck_set_msg_type() which is redundant to checks we get from the compiler. Signed-off-by: Ævar Arnfjörð Bjarmason <avarab@gmail.com> Signed-off-by: Junio C Hamano <gitster@pobox.com> 29 March 2021, 02:03:10 UTC
394d5d3 fsck.c: pass along the fsck_msg_id in the fsck_error callback Change the fsck_error callback to also pass along the fsck_msg_id. Before this change the only way to get the message id was to parse it back out of the "message". Let's pass it down explicitly for the benefit of callers that might want to use it, as discussed in [1]. Passing the msg_type is now redundant, as you can always get it back from the msg_id, but I'm not changing that convention. It's really common to need the msg_type, and the report() function itself (which calls "fsck_error") needs to call fsck_msg_type() to discover it. Let's not needlessly re-do that work in the user callback. 1. https://lore.kernel.org/git/87blcja2ha.fsf@evledraar.gmail.com/ Signed-off-by: Ævar Arnfjörð Bjarmason <avarab@gmail.com> Signed-off-by: Junio C Hamano <gitster@pobox.com> 29 March 2021, 02:03:10 UTC
44e07da fsck.[ch]: move FOREACH_FSCK_MSG_ID & fsck_msg_id from *.c to *.h Move the FOREACH_FSCK_MSG_ID macro and the fsck_msg_id enum it helps define from fsck.c to fsck.h. This is in preparation for having non-static functions take the fsck_msg_id as an argument. Signed-off-by: Ævar Arnfjörð Bjarmason <avarab@gmail.com> Signed-off-by: Junio C Hamano <gitster@pobox.com> 29 March 2021, 02:03:10 UTC
901f2f6 fsck.c: give "FOREACH_MSG_ID" a more specific name Rename the FOREACH_MSG_ID macro to FOREACH_FSCK_MSG_ID in preparation for moving it over to fsck.h. It's good convention to name macros in *.h files in such a way as to clearly not clash with any other names in other files. Signed-off-by: Ævar Arnfjörð Bjarmason <avarab@gmail.com> Signed-off-by: Junio C Hamano <gitster@pobox.com> 29 March 2021, 02:03:10 UTC
b549502 fsck.c: undefine temporary STR macro after use In f417eed8cde (fsck: provide a function to parse fsck message IDs, 2015-06-22) the "STR" macro was introduced, but that short macro name was not undefined after use as was done earlier in the same series for the MSG_ID macro in c99ba492f1c (fsck: introduce identifiers for fsck messages, 2015-06-22). Signed-off-by: Ævar Arnfjörð Bjarmason <avarab@gmail.com> Signed-off-by: Junio C Hamano <gitster@pobox.com> 29 March 2021, 02:03:10 UTC
c72da1a fsck.c: call parse_msg_type() early in fsck_set_msg_type() There's no reason to defer the calling of parse_msg_type() until after we've checked if the "id < 0". This is not a hot codepath, and parse_msg_type() itself may die on invalid input. Signed-off-by: Ævar Arnfjörð Bjarmason <avarab@gmail.com> Signed-off-by: Junio C Hamano <gitster@pobox.com> 29 March 2021, 02:03:10 UTC
30cf618 fsck.h: re-order and re-assign "enum fsck_msg_type" Change the values in the "enum fsck_msg_type" from being manually assigned to using default C enum values. This means we end up with a FSCK_IGNORE=0, which was previously defined as "2". I'm confident that nothing relies on these values, we always compare them for equality. Let's not omit "0" so it won't be assumed that we're using these as a boolean somewhere. This also allows us to re-structure the fields to mark which are "private" v.s. "public". See the preceding commit for a rationale for not simply splitting these into two enums, namely that this is used for both the private and public fsck API. Signed-off-by: Ævar Arnfjörð Bjarmason <avarab@gmail.com> Signed-off-by: Junio C Hamano <gitster@pobox.com> 29 March 2021, 02:03:10 UTC
1b32b59 fsck.h: move FSCK_{FATAL,INFO,ERROR,WARN,IGNORE} into an enum Move the FSCK_{FATAL,INFO,ERROR,WARN,IGNORE} defines into a new fsck_msg_type enum. These defines were originally introduced in: - ba002f3b28a (builtin-fsck: move common object checking code to fsck.c, 2008-02-25) - f50c4407305 (fsck: disallow demoting grave fsck errors to warnings, 2015-06-22) - efaba7cc77f (fsck: optionally ignore specific fsck issues completely, 2015-06-22) - f27d05b1704 (fsck: allow upgrading fsck warnings to errors, 2015-06-22) The reason these were defined in two different places is because we use FSCK_{IGNORE,INFO,FATAL} only in fsck.c, but FSCK_{ERROR,WARN} are used by external callbacks. Untangling that would take some more work, since we expose the new "enum fsck_msg_type" to both. Similar to "enum object_type" it's not worth structuring the API in such a way that only those who need FSCK_{ERROR,WARN} pass around a different type. Signed-off-by: Ævar Arnfjörð Bjarmason <avarab@gmail.com> Signed-off-by: Junio C Hamano <gitster@pobox.com> 29 March 2021, 02:03:10 UTC
e35d65a fsck.c: refactor fsck_msg_type() to limit scope of "int msg_type" Refactor "if options->msg_type" and other code added in 0282f4dced0 (fsck: offer a function to demote fsck errors to warnings, 2015-06-22) to reduce the scope of the "int msg_type" variable. This is in preparation for changing its type in a subsequent commit, only using it in the "!options->msg_type" scope makes that change This also brings the code in line with the fsck_set_msg_type() function (also added in 0282f4dced0), which does a similar check for "!options->msg_type". Another minor benefit is getting rid of the style violation of not having braces for the body of the "if". Signed-off-by: Ævar Arnfjörð Bjarmason <avarab@gmail.com> Signed-off-by: Junio C Hamano <gitster@pobox.com> 29 March 2021, 02:03:10 UTC
35af754 fsck.c: rename remaining fsck_msg_id "id" to "msg_id" Rename the remaining variables of type fsck_msg_id from "id" to "msg_id". This change is relatively small, and is worth the churn for a later change where we have different id's in the "report" function. Signed-off-by: Ævar Arnfjörð Bjarmason <avarab@gmail.com> Signed-off-by: Junio C Hamano <gitster@pobox.com> 29 March 2021, 02:03:10 UTC
034a7b7 fsck.c: remove (mostly) redundant append_msg_id() function Remove the append_msg_id() function in favor of calling prepare_msg_ids(). We already have code to compute the camel-cased msg_id strings in msg_id_info, let's use it. When the append_msg_id() function was added in 71ab8fa840f (fsck: report the ID of the error/warning, 2015-06-22) the prepare_msg_ids() function didn't exist. When prepare_msg_ids() was added in a46baac61eb (fsck: factor out msg_id_info[] lazy initialization code, 2018-05-26) this code wasn't moved over to lazy initialization. This changes the behavior of the code to initialize all the messages instead of just camel-casing the one we need on the fly. Since the common case is that we're printing just one message this is mostly redundant work. But that's OK in this case, reporting this fsck issue to the user isn't performance-sensitive. If we were somehow doing so in a tight loop (in a hopelessly broken repository?) this would help, since we'd save ourselves from re-doing this work for identical messages, we could just grab the prepared string from msg_id_info after the first invocation. Signed-off-by: Ævar Arnfjörð Bjarmason <avarab@gmail.com> Signed-off-by: Junio C Hamano <gitster@pobox.com> 29 March 2021, 02:03:10 UTC
f1abc2d fsck.c: rename variables in fsck_set_msg_type() for less confusion Rename variables in a function added in 0282f4dced0 (fsck: offer a function to demote fsck errors to warnings, 2015-06-22). It was needlessly confusing that it took a "msg_type" argument, but then later declared another "msg_type" of a different type. Let's rename that to "severity", and rename "id" to "msg_id" and "msg_id" to "msg_id_str" etc. This will make a follow-up change smaller. While I'm at it properly indent the fsck_set_msg_type() argument list. Signed-off-by: Ævar Arnfjörð Bjarmason <avarab@gmail.com> Signed-off-by: Junio C Hamano <gitster@pobox.com> 29 March 2021, 02:03:10 UTC
a1aad71 fsck.h: use "enum object_type" instead of "int" Change the fsck_walk_func to use an "enum object_type" instead of an "int" type. The types are compatible, and ever since this was added in 355885d5315 (add generic, type aware object chain walker, 2008-02-25) we've used entries from object_type (OBJ_BLOB etc.). So this doesn't really change anything as far as the generated code is concerned, it just gives the compiler more information and makes this easier to read. Signed-off-by: Ævar Arnfjörð Bjarmason <avarab@gmail.com> Signed-off-by: Junio C Hamano <gitster@pobox.com> 29 March 2021, 02:03:10 UTC
d385784 fsck.h: use designed initializers for FSCK_OPTIONS_{DEFAULT,STRICT} Refactor the definitions of FSCK_OPTIONS_{DEFAULT,STRICT} to use designated initializers. This allows us to omit those fields that are initialized to 0 or NULL. Signed-off-by: Ævar Arnfjörð Bjarmason <avarab@gmail.com> Signed-off-by: Junio C Hamano <gitster@pobox.com> 29 March 2021, 02:02:59 UTC
cf52c11 Makefile: add QUIET_GEN to "tags" and "TAGS" targets Don't show the very verbose $(FIND_SOURCE_FILES) command on every "make TAGS" invocation. Let's use "generate into temporary and rename to the final file, after seeing the command that generated the output finished successfully" pattern, to avoid leaving a file with an incorrect output generated by a failed command. Signed-off-by: Ævar Arnfjörð Bjarmason <avarab@gmail.com> Signed-off-by: Junio C Hamano <gitster@pobox.com> 28 March 2021, 05:56:58 UTC
5c1578d tag: don't misreport type of tagged objects in errors Fix a regression in 89e4202f982 ([PATCH] Parse tags for absent objects, 2005-06-21) (yes, that ancient!) and correctly report an error on a tag like: object <a tree hash> type commit As: error: object <a tree hash> is tree, not a commit Instead of our long-standing misbehavior of inverting the two, and reporting: error: object <a tree hash> is commit, not a tree Which, as can be trivially seen with 'git cat-file -t <a tree hash>' is incorrect. The reason for this misreporting is that in parse_tag_buffer() we end up doing a lookup_{blob,commit,tag,tree}() depending on what we read out of the "type" line. If we haven't parsed that object before we end up dispatching to the type-specific lookup functions, e.g. this for commit.c in lookup_commit_type(): struct object *obj = lookup_object(r, oid); if (!obj) return create_object(r, oid, alloc_commit_node(r)); Its allocation will then set the obj->type according to what the tag told us the type was, but which we've never validated. At this point we've got an object in memory that hasn't been parsed, and whose type is incorrect, since we mistrusted a tag to tell us the type. Then when we actually load the object with parse_object() we read it and find that it's a "tree". See 8ff226a9d5e (add object_as_type helper for casting objects, 2014-07-13) for that behavior (that's just a refactoring commit, but shows all the code involved). Which explains why we inverted the error report. Normally when object_as_type() is called it's by the lookup_{blob,commit,tag,tree}() functions via parse_object(). At that point we can trust the obj->type. In the case of parsing objects we've learned about via a tag with an incorrect type it's the opposite, the obj->type isn't correct and holds the mislabeled type, but we're parsing the object and know for sure what object type we're dealing with. Hence the non-intuitive solution of adding a lookup_{blob,commit,tag,tree}_type() function. It's to distinguish calls from parse_object_buffer() where we actually know the type, from a parse_tag_buffer() where we're just guessing about the type. Signed-off-by: Ævar Arnfjörð Bjarmason <avarab@gmail.com> Signed-off-by: Junio C Hamano <gitster@pobox.com> 28 March 2021, 05:30:42 UTC
3537c29 object tests: add test for unexpected objects in tags Fix a blind spot in the tests added in 0616617c7e1 (t: introduce tests for unexpected object types, 2019-04-09), there were no meaningful tests for checking how we reported on finding the incorrect object type in a tag, i.e. one that broke the "type" promise in the tag header. Signed-off-by: Ævar Arnfjörð Bjarmason <avarab@gmail.com> Signed-off-by: Junio C Hamano <gitster@pobox.com> 28 March 2021, 05:30:42 UTC
fa6310b object.c: add and use oid_is_type_or_die_msg() function Add a oid_is_type_or_die_msg() function to go with the "error" and "die" forms for emitting "expected type X, got Y" messages. This is useful for callers that want the message itself as a char *. Signed-off-by: Ævar Arnfjörð Bjarmason <avarab@gmail.com> Signed-off-by: Junio C Hamano <gitster@pobox.com> 28 March 2021, 05:30:42 UTC
4eeb18c object.c: add a utility function for "expected type X, got Y" Refactor various "Object X is not Y" error messages so that they use the same message as the long-standing object_as_type() error message. Now we'll consistently report e.g. that we got a commit when we expected a tag, not just that the object is not a tag. Signed-off-by: Ævar Arnfjörð Bjarmason <avarab@gmail.com> Signed-off-by: Junio C Hamano <gitster@pobox.com> 28 March 2021, 05:30:41 UTC
1220c89 tree.c: fix misindentation in parse_tree_gently() The variables declared in parse_tree_gently() had a single space after the TAB. This dates back to their introduction in bd2c39f58f9 ([PATCH] don't load and decompress objects twice with parse_object(), 2005-05-06). Let's fix them to follow the style of the rest of the file. Signed-off-by: Ævar Arnfjörð Bjarmason <avarab@gmail.com> Signed-off-by: Junio C Hamano <gitster@pobox.com> 28 March 2021, 05:30:41 UTC
f112a5a object-name.c: make dependency on object_type order more obvious Add an assert to make it more obvious that we were effectively hardcoding OBJ_TAG in sort_ambiguous() as "4". I wrote this code in 5cc044e0257 (get_short_oid: sort ambiguous objects by type, then SHA-1, 2018-05-10), there was already a comment about this magic, but let's make sure that someone doing a potential reordering of "enum object_type" in the future would notice it breaking this function (and probably a bunch of other things...). Signed-off-by: Ævar Arnfjörð Bjarmason <avarab@gmail.com> Signed-off-by: Junio C Hamano <gitster@pobox.com> 28 March 2021, 05:30:41 UTC
29987a1 object-file.c: make oid_object_info() return "enum object_type" Change oid_object_info() to return an "enum object_type". Unlike oid_object_info_extended() function the simpler oid_object_info() explicitly returns the oi.typep member, which is itself an "enum object_type". Signed-off-by: Ævar Arnfjörð Bjarmason <avarab@gmail.com> Signed-off-by: Junio C Hamano <gitster@pobox.com> 28 March 2021, 05:30:41 UTC
4ed963d object.c: make type_from_string() return "enum object_type" Change the type_from_string*() functions to return an "enum object_type", but don't refactor their callers to check for "== OBJ_BAD" instead of "< 0". Refactoring the check of the return value to check == OBJ_BAD would now be equivalent to "ret < 0", but the consensus on an earlier version of this patch was to not do that, and to instead use -1 consistently as a return value. It just so happens that OBJ_BAD == -1, but let's not put a hard reliance on that. Signed-off-by: Ævar Arnfjörð Bjarmason <avarab@gmail.com> Signed-off-by: Junio C Hamano <gitster@pobox.com> 28 March 2021, 05:30:41 UTC
7c127e4 object.c: refactor type_from_string_gently() Get rid of the "gently" argument to type_from_string_gently() to make it consistent with most other *_gently() functions. This refactoring of adding a third parameter was done in fe8e3b71805 (Refactor type_from_string() to allow continuing after detecting an error, 2014-09-10) in preparation for its use in fsck.c. Simplifying this means we can move the die() into the simpler type_from_string() function. Signed-off-by: Ævar Arnfjörð Bjarmason <avarab@gmail.com> Signed-off-by: Junio C Hamano <gitster@pobox.com> 28 March 2021, 05:30:41 UTC
d8883ed object.c: stop supporting len == -1 in type_from_string_gently() Change the type_from_string() macro into a function and drop the support for passing len < 0. Support for len < 0 was added in fe8e3b71805 (Refactor type_from_string() to allow continuing after detecting an error, 2014-09-10), but no callers use that form. Let's drop it to simplify this, and in preparation for simplifying these even further. Signed-off-by: Ævar Arnfjörð Bjarmason <avarab@gmail.com> Signed-off-by: Junio C Hamano <gitster@pobox.com> 28 March 2021, 05:30:41 UTC
569f8d1 cmake(install): fix double .exe suffixes By mistake, the `.exe` extension is appended _twice_ when installing the dashed executables into `libexec/git-core/` on Windows (the extension is already appended when adding items to the `git_links` list in the `#Creating hardlinks` section). Signed-off-by: Dennis Ameling <dennis@dennisameling.com> Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de> Signed-off-by: Junio C Hamano <gitster@pobox.com> 28 March 2021, 01:02:23 UTC
7bb544a cmake: support SKIP_DASHED_BUILT_INS Just like the Makefile-based build learned to skip hard-linking the dashed built-ins in 179227d6e21 (Optionally skip linking/copying the built-ins, 2020-09-21), this patch teaches the CMake-based build the same trick. Note: In contrast to the Makefile-based process, the built-ins would only be linked during installation, not already when Git is built. Therefore, the CMake-based build that we use in our CI builds _already_ does not link those built-ins (because the files are not installed anywhere, they are used to run the test suite in-place). Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de> Signed-off-by: Junio C Hamano <gitster@pobox.com> 28 March 2021, 01:02:23 UTC
bef91db Merge branch 'js/security-md' into jch * js/security-md: Document how we do embargoed releases SECURITY: describe how to report vulnerabilities 27 March 2021, 23:19:49 UTC
6f9808a Merge branch 'ar/userdiff-scheme' into jch * ar/userdiff-scheme: userdiff: add support for Scheme 27 March 2021, 23:19:46 UTC
36410c7 Merge branch 'rs/daemon-sanitize-dir-sep' into jch * rs/daemon-sanitize-dir-sep: daemon: sanitize all directory separators 27 March 2021, 23:19:46 UTC
2bdd3db Merge branch 'ab/userdiff-tests' into jch A bit of code clean-up and a lot of test clean-up around userdiff area. * ab/userdiff-tests: blame tests: simplify userdiff driver test blame tests: don't rely on t/t4018/ directory userdiff: remove support for "broken" tests userdiff tests: list builtin drivers via test-tool userdiff tests: explicitly test "default" pattern userdiff: add and use for_each_userdiff_driver() userdiff style: normalize pascal regex declaration userdiff style: declare patterns with consistent style userdiff style: re-order drivers in alphabetical order userdiff: refactor away the parse_bool() function 27 March 2021, 23:19:46 UTC
e797a1a Merge branch 'ds/clarify-hashwrite' into jch The hashwrite() API always resulted in a call to write(2), even when writing a small amount of bytes that would still fit in the internal buffer held by the hashfile struct. It has been updated to delay the writing until the buffer is filled or the hashfile concluded for performance. * ds/clarify-hashwrite: csum-file: make hashwrite() more readable 27 March 2021, 23:18:42 UTC
bf8ce65 userdiff: add support for Scheme Add a diff driver for Scheme (R5RS and R6RS) which recognizes top level and local `define` forms, whether it is a function definition, binding, syntax definition or a user-defined `define-xyzzy` form. The rationale for picking `define` forms for the hunk headers is because it is usually the only significant form for defining the structure of the program, and it is a common pattern for schemers to have local function definitions to hide their visibility, so it is not only the top level `define`'s that are of interest. Schemers also extend the language with macros to provide their own define forms (for example, something like a `define-test-suite`) which is also captured in the hunk header. Since the identifier syntax of the scheme language is forgiving, we start our word regexp from "words delimited by whitespaces" and then loosen to include various forms of parentheses characters to word-delimiters. Signed-off-by: Atharva Raykar <raykar.ath@gmail.com> [jc: simplified word regex and its explanation; fixed whitespace errors] Signed-off-by: Junio C Hamano <gitster@pobox.com> 27 March 2021, 23:11:43 UTC
09420b7 Document how we do embargoed releases Whenever we fix critical vulnerabilities, we follow some sort of protocol (e.g. setting a coordinated release date, keeping the fix under embargo until that time, coordinating with packagers and/or hosting sites, etc). Similar in spirit to `Documentation/howto/maintain-git.txt`, let's formalize the details in a document. Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de> Signed-off-by: Junio C Hamano <gitster@pobox.com> 27 March 2021, 22:13:12 UTC
2e99b1e SECURITY: describe how to report vulnerabilities In the same document, describe that Git does not have Long Term Support (LTS) release trains, although security fixes are always applied to a few of the most recent release trains. Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de> Signed-off-by: Junio C Hamano <gitster@pobox.com> 27 March 2021, 22:13:02 UTC
9a7f1ce daemon: sanitize all directory separators When sanitizing client-supplied strings on Windows, also strip off backslashes, not just slashes. Signed-off-by: René Scharfe <l.s.r@web.de> Acked-by: Johannes Schindelin <johannes.schindelin@gmx.de> Signed-off-by: Junio C Hamano <gitster@pobox.com> 27 March 2021, 05:00:12 UTC
4de61a5 Merge branch 'ah/plugleaks' into jch Plug or annotate remaining leaks that trigger while running the very basic set of tests. Ready? * ah/plugleaks: transport: also free remote_refs in transport_disconnect() parse-options: don't leak alias help messages parse-options: convert bitfield values to use binary shift init-db: silence template_dir leak when converting to absolute path init: remove git_init_db_config() while fixing leaks worktree: fix leak in dwim_branch() clone: free or UNLEAK further pointers when finished reset: free instead of leaking unneeded ref symbolic-ref: don't leak shortened refname in check_symref() 26 March 2021, 22:00:32 UTC
4524522 Merge branch 'mt/add-rm-in-sparse-checkout' into jch "git add" and "git rm" learned not to touch those paths that are outside of sparse checkout. * mt/add-rm-in-sparse-checkout: rm: honor sparse checkout patterns add: warn when asked to update SKIP_WORKTREE entries refresh_index(): add REFRESH_DONT_MARK_SPARSE_MATCHES flag pathspec: allow to ignore SKIP_WORKTREE entries on index matching add: make --chmod and --renormalize honor sparse checkouts t3705: add tests for `git add` in sparse checkouts add: include magic part of pathspec on --refresh error 26 March 2021, 22:00:32 UTC
a1d3480 Merge branch 'ps/pack-bitmap-optim' into jch Optimize "rev-list --use-bitmap-index --objects" corner case that uses negative tags as the stopping points. * ps/pack-bitmap-optim: pack-bitmap: avoid traversal of objects referenced by uninteresting tag 26 March 2021, 22:00:32 UTC
a27105d Merge branch 'ab/pickaxe-pcre2' into jch Rewrite the backend for "diff -G/-S" to use pcre2 engine when available. Ready??? * ab/pickaxe-pcre2: (22 commits) pickaxe -G: don't special-case create/delete pickaxe -G: terminate early on matching lines xdiff-interface: support early exit in xdiff_outf() xdiff-interface: allow early return from xdiff_emit_{line,hunk}_fn pickaxe -S: slightly optimize contains() pickaxe: rename variables in has_changes() for brevity pickaxe -S: support content with NULs under --pickaxe-regex pickaxe: assert that we must have a needle under -G or -S pickaxe: refactor function selection in diffcore-pickaxe() perf: add performance test for pickaxe pickaxe/style: consolidate declarations and assignments diff.h: move pickaxe fields together again pickaxe: die when --find-object and --pickaxe-all are combined pickaxe: die when -G and --pickaxe-regex are combined pickaxe tests: test for -G, -S and --find-object incompatibility pickaxe tests: add test for "log -S" not being a regex pickaxe tests: add test for diffgrep_consume() internals pickaxe tests: refactor to use test_commit --append --printf test-lib functions: add --printf option to test_commit test-lib-functions: reword "test_commit --append" docs ... 26 March 2021, 22:00:32 UTC
12cf1ff Merge branch 'ab/describe-tests-fix' into jch Various updates to tests around "git describe" * ab/describe-tests-fix: test-lib: return 1 from test_expect_{success,failure} svn tests: refactor away a "set -e" in test body svn tests: remove legacy re-setup from init-clone test describe tests: support -C in "check_describe" describe tests: fix nested "test_expect_success" call describe tests: convert setup to use test_commit test-lib functions: add an --annotated-tag option to "test_commit" describe tests: always assert empty stderr from "describe" describe tests: refactor away from glob matching describe tests: improve test for --work-tree & --dirty 26 March 2021, 22:00:31 UTC
c24f0e7 Merge branch 'mt/parallel-checkout-part-1' into jch Preparatory API changes for parallel checkout. * mt/parallel-checkout-part-1: entry: add checkout_entry_ca() taking preloaded conv_attrs entry: move conv_attrs lookup up to checkout_entry() entry: extract update_ce_after_write() from write_entry() entry: make fstat_output() and read_blob_entry() public entry: extract a header file for entry.c functions convert: add classification for conv_attrs struct convert: add get_stream_filter_ca() variant convert: add [async_]convert_to_working_tree_ca() variants convert: make convert_attrs() and convert structs public 26 March 2021, 22:00:30 UTC
f820daa ### match next 26 March 2021, 22:00:30 UTC
d24eb7a Merge branch 'jc/doc-format-patch-clarify' into jch Explain pieces of the format-patch output upfront before the rest of the documentation starts referring to them. * jc/doc-format-patch-clarify: format-patch: give an overview of what a "patch" message is 26 March 2021, 22:00:30 UTC
e39b602 Merge branch 'zh/format-patch-fractional-reroll-count' into jch "git format-patch -v<n>" learned to allow a reroll count that is not an integer. * zh/format-patch-fractional-reroll-count: format-patch: allow a non-integral version numbers 26 March 2021, 22:00:30 UTC
a75cba8 Merge branch 'ab/detox-gettext-tests' into jch Testfix. * ab/detox-gettext-tests: mktag tests: fix broken "&&" chain 26 March 2021, 22:00:30 UTC
762bcdd Merge branch 'hx/pack-objects-chunk-comment' into jch Comment update. * hx/pack-objects-chunk-comment: pack-objects: fix comment of reused_chunk.difference 26 March 2021, 22:00:29 UTC
268960b Merge branch 'dl/complete-stash' into jch Update "git stash branch<TAB>" command line completion (in contrib/). * dl/complete-stash: git-completion.bash: use __gitcomp_builtin() in _git_stash() git-completion.bash: extract from else in _git_stash() git-completion.bash: pass $__git_subcommand_idx from __git_main() 26 March 2021, 22:00:29 UTC
faa9f1b Merge branch 'rf/send-email-hookspath' into jch "git send-email" learned to honor the core.hooksPath configuration. * rf/send-email-hookspath: git-send-email: Respect core.hooksPath setting 26 March 2021, 22:00:29 UTC
181b873 Merge branch 'ab/remove-rebase-usebuiltin' into jch Remove the final hint that we used to have a scripted "git rebase". * ab/remove-rebase-usebuiltin: rebase: remove transitory rebase.useBuiltin setting & env 26 March 2021, 22:00:29 UTC
664535b Merge branch 'cs/http-use-basic-after-failed-negotiate' into jch When accessing a server with a URL like https://user:pass@site/, we did not to fall back to the basic authentication with the credential material embedded in the URL after the "Negotiate" authentication failed. Now we do. * cs/http-use-basic-after-failed-negotiate: remote-curl: fall back to basic auth if Negotiate fails 26 March 2021, 22:00:29 UTC
70f89b0 Merge branch 'ab/diff-no-index-tests' into jch More test coverage over "diff --no-index". * ab/diff-no-index-tests: diff --no-index tests: test mode normalization diff --no-index tests: add test for --exit-code 26 March 2021, 22:00:29 UTC
4fa703b Merge branch 'ab/read-tree' into jch Code simplification by removing support for a caller that is long gone. * ab/read-tree: tree.h API: simplify read_tree_recursive() signature tree.h API: expose read_tree_1() as read_tree_at() archive: stop passing "stage" through read_tree_recursive() ls-files: refactor away read_tree() ls-files: don't needlessly pass around stage variable tree.c API: move read_tree() into builtin/ls-files.c ls-files tests: add meaningful --with-tree tests show tests: add test for "git show <tree>" 26 March 2021, 22:00:28 UTC
61f8d61 Merge branch 'bs/asciidoctor-installation-hints' into jch Doc update. * bs/asciidoctor-installation-hints: INSTALL: note on using Asciidoctor to build doc 26 March 2021, 22:00:28 UTC
6f6abad Merge branch 'mt/checkout-remove-nofollow' into jch 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. * mt/checkout-remove-nofollow: checkout: don't follow symlinks when removing entries symlinks: update comment on threaded_check_leading_path() 26 March 2021, 22:00:28 UTC
bc9ebc4 Merge branch 'jh/simple-ipc' into jch A simple IPC interface gets introduced to build services like fsmonitor on top. * jh/simple-ipc: t0052: add simple-ipc tests and t/helper/test-simple-ipc tool simple-ipc: add Unix domain socket implementation unix-stream-server: create unix domain socket under lock unix-socket: disallow chdir() when creating unix domain sockets unix-socket: add backlog size option to unix_stream_listen() unix-socket: eliminate static unix_stream_socket() helper function simple-ipc: add win32 implementation simple-ipc: design documentation for new IPC mechanism pkt-line: add options argument to read_packetized_to_strbuf() pkt-line: add PACKET_READ_GENTLE_ON_READ_ERROR option pkt-line: do not issue flush packets in write_packetized_*() pkt-line: eliminate the need for static buffer in packet_write_gently() 26 March 2021, 22:00:28 UTC
84d06cd Sync with v2.31.1 26 March 2021, 21:59:47 UTC
26c4f98 The fourth batch Signed-off-by: Junio C Hamano <gitster@pobox.com> 26 March 2021, 21:59:03 UTC
89519f6 Merge branch 'cm/rebase-i-fixup-amend-reword' "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. * cm/rebase-i-fixup-amend-reword: doc/git-commit: add documentation for fixup=[amend|reword] options t3437: use --fixup with options to create amend! commit t7500: add tests for --fixup=[amend|reword] options commit: add a reword suboption to --fixup commit: add amend suboption to --fixup to create amend! commit sequencer: export and rename subject_length() 26 March 2021, 21:59:03 UTC
fde07fc Merge branch 'cm/rebase-i-updates' Follow-up fixes to "cm/rebase-i" topic. * cm/rebase-i-updates: doc/rebase -i: fix typo in the documentation of 'fixup' command t/t3437: fixup the test 'multiple fixup -c opens editor once' t/t3437: use named commits in the tests t/t3437: simplify and document the test helpers t/t3437: check the author date of fixed up commit t/t3437: remove the dependency of 'expected-message' file from tests t/t3437: fixup here-docs in the 'setup' test t/lib-rebase: update the documentation of FAKE_LINES rebase -i: clarify and fix 'fixup -c' rebase-todo help sequencer: rename a few functions sequencer: fixup the datatype of the 'flag' argument 26 March 2021, 21:59:03 UTC
ce4296c Merge branch 'cm/rebase-i' "rebase -i" is getting cleaned up and also enhanced. * cm/rebase-i: doc/git-rebase: add documentation for fixup [-C|-c] options rebase -i: teach --autosquash to work with amend! t3437: test script for fixup [-C|-c] options in interactive rebase rebase -i: add fixup [-C | -c] command sequencer: use const variable for commit message comments sequencer: pass todo_item to do_pick_commit() rebase -i: comment out squash!/fixup! subjects from squash message sequencer: factor out code to append squash message rebase -i: only write fixup-message when it's needed 26 March 2021, 21:59:03 UTC
8c81fce Merge branch 'js/http-pki-credential-store' The http codepath learned to let the credential layer to cache the password used to unlock a certificate that has successfully been used. * js/http-pki-credential-store: http: drop the check for an empty proxy password before approving http: store credential when PKI auth is used 26 March 2021, 21:59:02 UTC
ed953e1 Merge branch 'ab/make-cleanup' Reorganize Makefile to allow building git.o and other essential objects without extra stuff needed only for testing. * ab/make-cleanup: Makefile: add {program,xdiff,test,git,fuzz}-objs & objects targets Makefile: split OBJECTS into OBJECTS and GIT_OBJS Makefile: sort OBJECTS assignment for subsequent change Makefile: split up long OBJECTS line Makefile: guard against TEST_OBJS in the environment 26 March 2021, 21:59:02 UTC
48bf2fa Git 2.31.1 Signed-off-by: Junio C Hamano <gitster@pobox.com> 26 March 2021, 21:49:41 UTC
ddaf1f6 csum-file: make hashwrite() more readable The hashwrite() method takes an input buffer and updates a hashfile's hash function while writing the data to a file. To avoid overuse of flushes, the hashfile has an internal buffer and most writes will use memcpy() to transfer data from the input 'buf' to the hashfile's buffer of size 8 * 1024 bytes. Logic introduced by a8032d12 (sha1write: don't copy full sized buffers, 2008-09-02) reduces the number of memcpy() calls when the input buffer is sufficiently longer than the hashfile's buffer, causing nr to be the length of the full buffer. In these cases, the input buffer is used directly in chunks equal to the hashfile's buffer size. This method caught my attention while investigating some performance issues, but it turns out that these performance issues were noise within the variance of the experiment. However, during this investigation, I inspected hashwrite() and misunderstood it, even after looking closely and trying to make it faster. This change simply reorganizes some parts of the loop within hashwrite() to make it clear that each batch either uses memcpy() to the hashfile's buffer or writes directly from the input buffer. The previous code relied on indirection through local variables and essentially inlined the implementation of hashflush() to reduce lines of code. Helped-by: Jeff King <peff@peff.net> Helped-by: Junio C Hamano <gitster@pobox.com> Signed-off-by: Derrick Stolee <dstolee@microsoft.com> Signed-off-by: Junio C Hamano <gitster@pobox.com> 26 March 2021, 21:32:45 UTC
122a0de merge-ort, diffcore-rename: employ cached renames when possible When there are many renames between the old base of a series of commits and the new base, the way sequencer.c, merge-recursive.c, and diffcore-rename.c have traditionally split the work resulted in redetecting the same renames with each and every commit being transplanted. To address this, the last several commits have been creating a cache of rename detection results, determining when it was safe to use such a cache in subsequent merge operations, adding helper functions, and so on. See the previous half dozen commit messages for additional discussion of this optimization, particularly the message a few commits ago entitled "add code to check for whether cached renames can be reused". This commit finally ties all of that work together, modifying the merge algorithm to make use of these cached renames. For the testcases mentioned in commit 557ac0350d ("merge-ort: begin performance work; instrument with trace2_region_* calls", 2020-10-28), this change improves the performance as follows: Before After no-renames: 5.665 s ± 0.129 s 5.624 s ± 0.077 s mega-renames: 11.435 s ± 0.158 s 10.213 s ± 0.032 s just-one-mega: 494.2 ms ± 6.1 ms 497.6 ms ± 5.3 ms That's a fairly small improvement, but mostly because the previous optimizations were so effective for these particular testcases; this optimization only kicks in when the others don't. If we undid the basename-guided rename detection and skip-irrelevant-renames optimizations, then we'd see that this series by itself improved performance as follows: Before Basename Series After Just This Series no-renames: 13.815 s ± 0.062 s 5.814 s ± 0.094 s mega-renames: 1799.937 s ± 0.493 s 303.225 s ± 1.330 s Since this optimization kicks in to help accelerate cases where the previous optimizations do not apply, this last comparison shows that this cached-renames optimization has the potential to help signficantly in cases that don't meet the requirements for the other optimizations to be effective. The changes made in this optimization also lay some important groundwork for a future optimization around having collect_merge_info() avoid recursing into subtrees in more cases. Signed-off-by: Elijah Newren <newren@gmail.com> Signed-off-by: Junio C Hamano <gitster@pobox.com> 25 March 2021, 23:10:43 UTC
3723149 merge-ort: add helper functions for using cached renames If we have a usable rename cache, then we can remove from relevant_sources all the paths that were cached; diffcore_rename_extended() can then consider an even smaller set of relevant_sources in its rename detection. However, when diffcore_rename_extended() is done, we will need to take the renames it detected and then add back in all the ones we had cached from before. Add helper functions for doing these two operations; the next commit will make use of them. Signed-off-by: Elijah Newren <newren@gmail.com> Signed-off-by: Junio C Hamano <gitster@pobox.com> 25 March 2021, 23:10:43 UTC
fc3dcd4 merge-ort: preserve cached renames for the appropriate side Previous commits created an in-memory cache of the results of rename detection, and added logic to detect when that cache could appropriately be used in a subsequent merge operation -- but we were still unconditionally clearing the cache with each new merge operation anyway. If it is valid to reuse the cache from one of the two sides of history, preserve that side. Signed-off-by: Elijah Newren <newren@gmail.com> Signed-off-by: Junio C Hamano <gitster@pobox.com> 25 March 2021, 23:10:43 UTC
029b83a merge-ort: avoid accidental API mis-use Previously, callers of the merge-ort API could have passed an uninitialized value for struct merge_result *result. However, we want to check result to see if it has cached renames from a previous merge that we can reuse; such values would be found behind result->priv. However, if result->priv is uninitialized, attempting to access behind it will give a segfault. So, we need result->priv to be NULL (which will be the case if the caller does a memset(&result, 0)), or be written by a previous call to the merge-ort machinery. Documenting this requirement may help, but despite being the person who introduced this requirement, I still missed it once and it did not fail in a very clear way and led to a long debugging session. Add a _properly_initialized field to merge_result; that value will be 0 if the caller zero'ed the merge_result, it will be set to a very specific value by a previous run by the merge-ort machinery, and if it's uninitialized it will most likely either be 0 or some value that does not match the specific one we'd expect allowing us to throw a much more meaningful error. Signed-off-by: Elijah Newren <newren@gmail.com> Signed-off-by: Junio C Hamano <gitster@pobox.com> 25 March 2021, 23:10:43 UTC
3d6ea83 merge-ort: add code to check for whether cached renames can be reused We need to know when renames detected in a previous merge operation can be reused in a later merge operation. Consider the following setup (from the git-rebase manpage): A---B---C topic / D---E---F---G master After rebasing, this will appear as: A'--B'--C' topic / D---E---F---G master Further, let's say that 'oldfile' was renamed to 'newfile' between E and G. The rebase or cherry-pick of A onto G will involve a three-way merge between E (as the merge base) and G and A. After detecting the rename between E:oldfile and G:newfile, there will be a three-way content merge of the following: E:oldfile G:newfile A:oldfile and produce a new result: A':newfile Now, when we want to pick B onto A', we will need to do a three-way merge between A (as the merge-base) and A' and B. This will involve a three-way content merge of A:oldfile A':newfile B:oldfile but only if we can detect that A:oldfile is similar enough to A':newfile to be used together in a three-way content merge, i.e. only if we can detect that A:oldfile and A':newfile are a rename. But we already know that A:oldfile and A':newfile are similar enough to be used in a three-way content merge, because that is precisely where A':newfile came from in the previous merge. Note that A & A' both appear in both merges. That gives us the condition under which we can reuse renames. There are a couple important points about this optimization: - If the rebase or cherry-pick halts for user conflicts, these caches are NOT saved anywhere. Thus, resuming a halted rebase or cherry-pick will result in no reused renames for the next commit. This is intentional, as user resolution can change files significantly and in ways that violate the similarity assumptions here. - Technically, in a *very* narrow case this might give slightly different results for rename detection. Using the example above, if: * E:oldfile had 20 lines * G:newfile added 10 new lines at the beginning of the file * A:oldfile deleted all but the first three lines of the file then => A':newfile would have 13 lines, 3 of which matches those in A:oldfile. Consider the two cases: * Without this optimization: - the next step of the rebase operation (moving B to B') would not detect the rename betwen A:oldfile and A':newfile - we'd thus get a modify/delete conflict with the rebase operation halting for the user to resolve, and have both A':newfile and B:oldfile sitting in the working tree. * With this optimization: - the rename between A:oldfile and A':newfile would be detected via the cache of renames - a three-way merge between A:oldfile, A':newfile, and B:oldfile would commence and be written to A':newfile Now, is the difference in behavior a bug...or a bugfix? I can't tell. Given that A:oldfile and A':newfile are not very similar, when we three-way merge with B:oldfile it seems likely we'll hit a conflict for the user to resolve. And it shouldn't be too hard for users to see why we did that three-way merge; oldfile and newfile *were* renames somewhere in the sequence. So, most of these corner cases will still behave similarly -- namely, a conflict given to the user to resolve. Also, consider the interesting case when commit B is a clean revert of commit A. Without this optimization, a rebase could not both apply a weird patch like A and then immediately revert it; users would be forced to resolve merge conflicts. With this optimization, it would successfully apply the clean revert. So, there is certainly at least one case that behaves better. Even if it's considered a "difference in behavior", I think both behaviors are reasonable, and the time savings provided by this optimization justify using the slightly altered rename heuristics. Signed-off-by: Elijah Newren <newren@gmail.com> Signed-off-by: Junio C Hamano <gitster@pobox.com> 25 March 2021, 23:10:43 UTC
d7cdd00 merge-ort: populate caches of rename detection results Fill in cache_pairs, cached_target_names, and cached_irrelevant based on rename detection results. Future commits will make use of these values. Signed-off-by: Elijah Newren <newren@gmail.com> Signed-off-by: Junio C Hamano <gitster@pobox.com> 25 March 2021, 23:10:43 UTC
back to top