https://github.com/git/git

sort by:
Revision Author Date Message Commit Date
ac83bc5 Git 2.42-rc0 Signed-off-by: Junio C Hamano <gitster@pobox.com> 04 August 2023, 17:52:31 UTC
65e25ae Merge branch 'jc/branch-in-use-error-message' "git branch -f X" to repoint the branch X said that X was "checked out" in another worktree, even when branch X was not and instead being bisected or rebased. The message was reworded to say the branch was "in use". * jc/branch-in-use-error-message: branch: update the message to refuse touching a branch in-use 04 August 2023, 17:52:31 UTC
f4a7c24 Merge branch 'hy/blame-in-bare-with-contents' "git blame --contents=file" has been taught to work in a bare repository. * hy/blame-in-bare-with-contents: blame: allow --contents to work with bare repo 04 August 2023, 17:52:31 UTC
f9712d7 Merge branch 'jc/parse-options-short-help' Command line parser fix, and a small parse-options API update. * jc/parse-options-short-help: short help: allow a gap smaller than USAGE_GAP remote: simplify "remote add --tags" help text short help: allow multi-line opthelp 04 August 2023, 17:52:31 UTC
23b20ff Merge branch 'jc/doc-sent-patch-now-what' Process document update. * jc/doc-sent-patch-now-what: MyFirstContribution: refrain from self-iterating too much 04 August 2023, 17:52:31 UTC
840affc Merge branch 'la/doc-choose-starting-point-fixup' Clarify how to pick a starting point for a new topic in the SubmittingPatches document. * la/doc-choose-starting-point-fixup: SubmittingPatches: use of older maintenance tracks is an exception SubmittingPatches: explain why 'next' and above are inappropriate base SubmittingPatches: choice of base for fixing an older maintenance track 04 August 2023, 17:52:30 UTC
a53e8a6 Merge branch 'pv/doc-submodule-update-settings' Rewrite the description of giving a custom command to the submodule.<name>.update configuration variable. * pv/doc-submodule-update-settings: doc: highlight that .gitmodules does not support !command 04 August 2023, 17:52:30 UTC
4d06001 Merge branch 'ja/worktree-orphan-fix' Fix tests with unportable regex patterns. * ja/worktree-orphan-fix: t2400: rewrite regex to avoid unintentional PCRE builtin/worktree.c: convert tab in advice to space t2400: drop no-op `--sq` from rev-parse call 04 August 2023, 17:52:30 UTC
3365e26 Merge branch 'jc/retire-get-sha1-hex' The implementation of "get_sha1_hex()" that reads a hexadecimal string that spells a full object name has been extended to cope with any hash function used in the repository, but the "sha1" in its name survived. Rename it to get_hash_hex(), a name that is more consistent within its friends like get_hash_hex_algop(). * jc/retire-get-sha1-hex: hex: retire get_sha1_hex() 04 August 2023, 17:52:30 UTC
dd68b57 Merge branch 'la/doc-choose-starting-point' Clarify how to choose the starting point for a new topic in developer guidance document. * la/doc-choose-starting-point: SubmittingPatches: simplify guidance for choosing a starting point SubmittingPatches: emphasize need to communicate non-default starting points SubmittingPatches: de-emphasize branches as starting points SubmittingPatches: discuss subsystems separately from git.git SubmittingPatches: reword awkward phrasing 04 August 2023, 17:52:30 UTC
1b0a512 The eighteenth batch Signed-off-by: Junio C Hamano <gitster@pobox.com> 02 August 2023, 16:37:52 UTC
955c2b1 Documentation/RelNotes/2.42.0.txt: typofix Fix a typo introduced in aa9166bcc0 (The ninth batch, 2023-07-08). Signed-off-by: Taylor Blau <me@ttaylorr.com> Signed-off-by: Junio C Hamano <gitster@pobox.com> 02 August 2023, 16:37:52 UTC
70e5c5d Merge branch 'ks/ref-filter-describe' "git branch --list --format=<format>" and friends are taught a new "%(describe)" placeholder. * ks/ref-filter-describe: ref-filter: add new "describe" atom ref-filter: add multiple-option parsing functions 02 August 2023, 16:37:24 UTC
8bfb359 Merge branch 'ah/sequencer-rewrite-todo-fix' When the user edits "rebase -i" todo file so that it starts with a "fixup", which would make it invalid, the command truncated the rest of the file before giving an error and returning the control back to the user. Stop truncating to make it easier to correct such a malformed todo file. * ah/sequencer-rewrite-todo-fix: sequencer: finish parsing the todo list despite an invalid first line 02 August 2023, 16:37:24 UTC
52d9dc2 Merge branch 'bb/use-trace2-counters-for-fsync-stats' Instead of inventing a custom counter variables for debugging, use existing trace2 facility in the fsync customization codepath. * bb/use-trace2-counters-for-fsync-stats: wrapper: use trace2 counters to collect fsync stats 02 August 2023, 16:37:23 UTC
99acb0f Merge branch 'ah/autoconf-fixes' "./configure --with-expat=no" did not work as a way to refuse use of the expat library on a system with the library installed, which has been corrected. * ah/autoconf-fixes: configure.ac: always save NO_ICONV to config.status configure.ac: don't overwrite NO_CURL option configure.ac: don't overwrite NO_EXPAT option 02 August 2023, 16:37:23 UTC
fea92e4 Merge branch 'jc/tree-walk-drop-base-offset' Code simplification. * jc/tree-walk-drop-base-offset: tree-walk: drop unused base_offset from do_match() tree-walk: lose base_offset that is never used in tree_entry_interesting 02 August 2023, 16:37:23 UTC
ee48e70 The seventeenth batch Signed-off-by: Junio C Hamano <gitster@pobox.com> 28 July 2023, 16:45:22 UTC
ddcb8fd Merge branch 'rs/pack-objects-parseopt-fix' Command line parser fix. * rs/pack-objects-parseopt-fix: pack-objects: fix --no-quiet pack-objects: fix --no-keep-true-parents 28 July 2023, 16:45:22 UTC
3085f94 Merge branch 'rs/describe-parseopt-fix' Command line parser fix. * rs/describe-parseopt-fix: describe: fix --no-exact-match 28 July 2023, 16:45:21 UTC
c8a33b4 Merge branch 'bb/trace2-comment-fix' In-code comment fix. * bb/trace2-comment-fix: trace2: fix a comment 28 July 2023, 16:45:21 UTC
010447c MyFirstContribution: refrain from self-iterating too much Finding mistakes in and improving your own patches is a good idea, but doing so too quickly is being inconsiderate to reviewers who have just seen the initial iteration and taking their time to review it. Encourage new developers to perform such a self review before they send out their patches, not after. After sending a patch that they immediately found mistakes in, they are welcome to comment on them, mentioning what and how they plan to improve them in an updated version, before sending out their updates. Helped-by: Torsten Bögershausen <tboegi@web.de> Helped-by: Linus Arver <linusa@google.com> Signed-off-by: Junio C Hamano <gitster@pobox.com> 28 July 2023, 00:44:07 UTC
bfce02c The sixteenth batch Signed-off-by: Junio C Hamano <gitster@pobox.com> 27 July 2023, 22:26:37 UTC
e672bc4 Merge branch 'jc/parse-options-reset' Command line parser fix. * jc/parse-options-reset: reset: reject --no-(mixed|soft|hard|merge|keep) option 27 July 2023, 22:26:37 UTC
d6966f6 Merge branch 'jc/parse-options-show-branch' Command line parser fixes. * jc/parse-options-show-branch: show-branch: reject --[no-](topo|date)-order show-branch: --no-sparse should give dense output 27 July 2023, 22:26:37 UTC
9562f19 Merge branch 'jc/transport-parseopt-fix' Command line parser fixes. * jc/transport-parseopt-fix: fetch: reject --no-ipv[46] parse-options: introduce OPT_IPVERSION() 27 July 2023, 22:26:37 UTC
7fb1483 Merge branch 'jc/gitignore-doc-pattern-markup' Doc mark-up update. * jc/gitignore-doc-pattern-markup: gitignore.txt: mark up explanation of patterns consistently 27 July 2023, 22:26:37 UTC
369998d SubmittingPatches: use of older maintenance tracks is an exception While we could technically fix each and every bug on top of the commit that introduced it, it is not necessarily practical. For trivial and low-value bugfixes, it often is simpler and sufficient to just fix it in the current maintenance track, leaving the bug unfixed in the older maintenance tracks. Demote the "use older maintenance track to fix old bugs" as a side note, and explain that the choice is used only in exceptional cases. Signed-off-by: Junio C Hamano <gitster@pobox.com> 27 July 2023, 20:07:40 UTC
f835de5 SubmittingPatches: explain why 'next' and above are inappropriate base The 'next' branch is primarily meant to be a testing ground to make sure that topics that are reasonably well done work well together. Building a new work on it would mean everything that was already in 'next' must have graduated to 'master' before the new work can also be merged to 'master', and that is why we do not encourage basing new work on 'next'. Helped-by: Linus Arver <linusa@google.com> Signed-off-by: Junio C Hamano <gitster@pobox.com> 27 July 2023, 20:06:20 UTC
d1b72cb t2400: rewrite regex to avoid unintentional PCRE Replace all cases of `\s` with ` ` as it is not part of POSIX BRE or ERE and therefore not all versions of grep handle it. For the same reason all cases of `\S` are replaced with `[^ ]`. It is not an exact replacement but it is close enough for this use case. Also, do not write `\+` in BRE and expect it to mean 1 or more; it is a GNU extension that may not work everywhere. Remove `.*` from the end of a pattern that is not right-anchored. Signed-off-by: Jacob Abel <jacobabel@nullpo.dev> Helped-by: Junio C Hamano <gitster@pobox.com> Signed-off-by: Junio C Hamano <gitster@pobox.com> 26 July 2023, 21:49:02 UTC
7e42d4b builtin/worktree.c: convert tab in advice to space Signed-off-by: Jacob Abel <jacobabel@nullpo.dev> Signed-off-by: Junio C Hamano <gitster@pobox.com> 26 July 2023, 21:49:02 UTC
9111ea1 t2400: drop no-op `--sq` from rev-parse call Signed-off-by: Jacob Abel <jacobabel@nullpo.dev> Signed-off-by: Junio C Hamano <gitster@pobox.com> 26 July 2023, 21:49:02 UTC
b4fce4b The fifteenth batch Signed-off-by: Junio C Hamano <gitster@pobox.com> 26 July 2023, 21:13:16 UTC
9a5e3b5 Merge branch 'jc/branch-parseopt-fix' Command line parser fixes. * jc/branch-parseopt-fix: branch: reject "--no-all" and "--no-remotes" early 26 July 2023, 21:13:15 UTC
914a353 Merge branch 'jc/am-parseopt-fix' Code simplification. * jc/am-parseopt-fix: am: simplify parsing of "--[no-]keep-cr" 26 July 2023, 21:13:15 UTC
8ae477e Merge branch 'rs/ls-tree-no-full-name-fix' Command line parser fix. * rs/ls-tree-no-full-name-fix: ls-tree: fix --no-full-name 26 July 2023, 21:13:15 UTC
89672f1 Merge branch 'jr/gitignore-doc-example-markup' Doc update. * jr/gitignore-doc-example-markup: gitignore.txt: use backticks instead of double quotes 26 July 2023, 21:13:15 UTC
37f6040 SubmittingPatches: choice of base for fixing an older maintenance track When working on an high-value bugfix that must be given to ancient maintenance tracks, a starting point that is older than `maint` may have to be chosen. Helped-by: Linus Arver <linusa@google.com> Signed-off-by: Junio C Hamano <gitster@pobox.com> 26 July 2023, 16:39:00 UTC
7cebc5b doc: highlight that .gitmodules does not support !command Bugfix for fc01a5d2 (submodule update documentation: don't repeat ourselves, 2016-12-27). The `custom command` and `none` options are described as sharing the same limitations, but one is allowed in .gitmodules and the other is not. Rewrite the description for custom commands to be more precise, and make it easier for readers to notice that custom commands cannot be used in the .gitmodules file. Signed-off-by: Petar Vutov <pvutov@imap.cc> Signed-off-by: Junio C Hamano <gitster@pobox.com> 25 July 2023, 21:55:07 UTC
a80be15 The fourteenth batch Signed-off-by: Junio C Hamano <gitster@pobox.com> 25 July 2023, 19:05:40 UTC
5929e66 Merge branch 'jk/nested-points-at' "git tag --list --points-at X" showed tags that directly refers to object X, but did not list a tag that points at such a tag, which has been corrected. * jk/nested-points-at: ref-filter: simplify return type of match_points_at ref-filter: avoid parsing non-tags in match_points_at() ref-filter: avoid parsing tagged objects in match_points_at() ref-filter: handle nested tags in --points-at option 25 July 2023, 19:05:24 UTC
02f50d0 Merge branch 'rs/strbuf-addftime-simplify' Code clean-up. * rs/strbuf-addftime-simplify: strbuf: use skip_prefix() in strbuf_addftime() 25 July 2023, 19:05:24 UTC
261ff51 Merge branch 'rs/ref-filter-signature-fix' Test fix. * rs/ref-filter-signature-fix: t6300: fix setup with GPGSSH but without GPG 25 July 2023, 19:05:24 UTC
c5fcd34 Merge branch 'jk/unused-parameter' Mark-up unused parameters in the code so that we can eventually enable -Wunused-parameter by default. * jk/unused-parameter: t/helper: mark unused callback void data parameters tag: mark unused parameters in each_tag_name_fn callbacks rev-parse: mark unused parameter in for_each_abbrev callback replace: mark unused parameter in each_mergetag_fn callback replace: mark unused parameter in ref callback merge-tree: mark unused parameter in traverse callback fsck: mark unused parameters in various fsck callbacks revisions: drop unused "opt" parameter in "tweak" callbacks count-objects: mark unused parameter in alternates callback am: mark unused keep_cr parameters http-push: mark unused parameter in xml callback http: mark unused parameters in curl callbacks do_for_each_ref_helper(): mark unused repository parameter test-ref-store: drop unimplemented reflog-expire command 25 July 2023, 19:05:24 UTC
dd224ce Merge branch 'dk/bundle-i18n-more' Update message mark-up for i18n in "git bundle". * dk/bundle-i18n-more: i18n: mark more bundle.c strings for translation 25 July 2023, 19:05:24 UTC
0e30958 Merge branch 'mh/mingw-case-sensitive-build' Names of MinGW header files are spelled in mixed case in some source files, but the build host can be using case sensitive filesystem with header files with their name spelled in all lowercase. * mh/mingw-case-sensitive-build: mingw: use lowercase includes for some Windows headers 25 July 2023, 19:05:23 UTC
d4ce185 Merge branch 'dk/t4002-syntaxo-fix' Test fix. * dk/t4002-syntaxo-fix: t4002: fix "diff can read from stdin" syntax 25 July 2023, 19:05:23 UTC
4488bb3 Merge branch 'tb/object-access-overflow-protection' Various offset computation in the code that accesses the packfiles and other data in the object layer has been hardened against arithmetic overflow, especially on 32-bit systems. * tb/object-access-overflow-protection: commit-graph.c: prevent overflow in `verify_commit_graph()` commit-graph.c: prevent overflow in `write_commit_graph()` commit-graph.c: prevent overflow in `merge_commit_graph()` commit-graph.c: prevent overflow in `split_graph_merge_strategy()` commit-graph.c: prevent overflow in `load_tree_for_commit()` commit-graph.c: prevent overflow in `fill_commit_in_graph()` commit-graph.c: prevent overflow in `fill_commit_graph_info()` commit-graph.c: prevent overflow in `load_oid_from_graph()` commit-graph.c: prevent overflow in add_graph_to_chain() commit-graph.c: prevent overflow in `write_commit_graph_file()` pack-bitmap.c: ensure that eindex lookups don't overflow midx.c: prevent overflow in `fill_included_packs_batch()` midx.c: prevent overflow in `write_midx_internal()` midx.c: store `nr`, `alloc` variables as `size_t`'s midx.c: prevent overflow in `nth_midxed_offset()` midx.c: prevent overflow in `nth_midxed_object_oid()` midx.c: use `size_t`'s for fanout nr and alloc packfile.c: use checked arithmetic in `nth_packed_object_offset()` packfile.c: prevent overflow in `load_idx()` packfile.c: prevent overflow in `nth_packed_object_id()` 25 July 2023, 19:05:23 UTC
88d08c3 Merge branch 'ah/advise-force-pushing' Help newbies by suggesting that there are cases where force-pushing is a valid and sensible thing to update a branch at a remote repository, rather than reconciling with merge/rebase. * ah/advise-force-pushing: push: don't imply that integration is always required before pushing remote: don't imply that integration is always required before pushing wt-status: don't show divergence advice when committing 25 July 2023, 19:05:23 UTC
08e5fb1 hex: retire get_sha1_hex() The naming convention around get_sha1_hex() and its friends is awkward these days, after "struct object_id" was introduced. There are three public functions around this area: * get_sha1_hex() - use the implied the_hash_algo, fill uchar * * get_oid_hex() - use the implied the_hash_algo, fill oid * * get_oid_hex_algop() - use the passed algop, fill oid * Between the latter two, the "_algop" suffix signals whether the the_hash_algo is used as the implied algorithm or the caller should pass an algorithm explicitly. That is very much understandable and is a good convention. Between the former two, however, the "SHA1" vs "OID" in the names differentiate in what type of variable the result is stored. We could argue that it makes sense to use "SHA1" to mean "flat byte buffer" to honor the historical practice in the days before "struct object_id" was invented, but the natural fourth friend of the above group would take an algop and fill a flat byte buffer, and it would be strange to name it get_sha1_hex_algop(). Do we use the passed in algo, or are we limited to SHA-1 ;-)? In fact, such a function exists, albeit as a private helper function used by the implementation of these functions, and is named a lot more sensibly: get_hash_hex_algop(). Correct the misnomer of get_sha1_hex() and use "hash", instead of "sha1", as "flat byte buffer that stores binary (as opposed to hexadecimal) representation of the hash". The four (2x2) friends now become: * get_hash_hex() - use the implied the_hash_algo, fill uchar * * get_oid_hex() - use the implied the_hash_algo, fill oid * * get_hash_hex_algop() - use the passed algop, fill uchar * * get_oid_hex_algop() - use the passed algop, fill oid * As there are only two remaining calls to get_sha1_hex() in the codebase right now, the blast radious of this change is fairly small. Signed-off-by: Junio C Hamano <gitster@pobox.com> 24 July 2023, 23:11:23 UTC
f5d18f8 ref-filter: add new "describe" atom Duplicate the logic of %(describe) and friends from pretty to ref-filter. In the future, this change helps in unifying both the formats as ref-filter will be able to do everything that pretty is doing and we can have a single interface. The new atom "describe" and its friends are equivalent to the existing pretty formats with the same name. Helped-by: Junio C Hamano <gitster@pobox.com> Mentored-by: Christian Couder <christian.couder@gmail.com> Mentored-by: Hariom Verma <hariom18599@gmail.com> Signed-off-by: Kousik Sanagavarapu <five231003@gmail.com> Signed-off-by: Junio C Hamano <gitster@pobox.com> 24 July 2023, 17:42:29 UTC
f46094a ref-filter: add multiple-option parsing functions The functions match_placeholder_arg_value() match_placeholder_bool_arg() were added in pretty 4f732e0fd7 (pretty: allow %(trailers) options with explicit value, 2019-01-29) to parse multiple options in an argument to --pretty. For example, git log --pretty="%(trailers:key=Signed-Off-By,separator=%x2C )" will output all the trailers matching the key and seperates them by a comma followed by a space per commit. Add similar functions, match_atom_arg_value() match_atom_bool_arg() in ref-filter. There is no atom yet that can use these functions in ref-filter, but we are going to add a new %(describe) atom in a subsequent commit where we parse options like tags=<bool-value> or match=<pattern> given to it. Helped-by: Junio C Hamano <gitster@pobox.com> Mentored-by: Christian Couder <christian.couder@gmail.com> Mentored-by: Hariom Verma <hariom18599@gmail.com> Signed-off-by: Kousik Sanagavarapu <five231003@gmail.com> Signed-off-by: Junio C Hamano <gitster@pobox.com> 24 July 2023, 16:55:00 UTC
9645a08 sequencer: finish parsing the todo list despite an invalid first line Before the todo list is edited it is rewritten to shorten the OIDs of the commits being picked and to append advice about editing the list. The exact advice depends on whether the todo list is being edited for the first time or not. After the todo list has been edited it is rewritten to lengthen the OIDs of the commits being picked and to remove the advice. If the edited list cannot be parsed then this last step is skipped. Prior to db81e50724 (rebase-interactive: use todo_list_write_to_file() in edit_todo_list(), 2019-03-05) if the existing todo list could not be parsed then the initial rewrite was skipped as well. This had the unfortunate consequence that if the list could not be parsed after the initial edit the advice given to the user was wrong when they re-edited the list. This change relied on todo_list_parse_insn_buffer() returning the whole todo list even when it cannot be parsed. Unfortunately if the list starts with a "fixup" command then it will be truncated and the remaining lines are lost. Fix this by continuing to parse after an initial "fixup" commit as we do when we see any other invalid line. Signed-off-by: Alex Henrie <alexhenrie24@gmail.com> [jc: removed an apparently unneeded subshell around the test body] Signed-off-by: Junio C Hamano <gitster@pobox.com> 24 July 2023, 16:49:44 UTC
4970bed branch: update the message to refuse touching a branch in-use The "git branch -f" command can refuse to force-update a branch that is used by another worktree. The original rationale for this behaviour was that updating a branch that is checked out in another worktree, without making a matching change to the index and the working tree files in that worktree, will lead to a very confused user. "git diff HEAD" will no longer give a useful patch, because HEAD is a commit unrelated to what the index and the working tree in the worktree were based on, for example. These days, the same mechanism also protects branches that are being rebased or bisected, and the same machanism is expected to be the right place to add more checks, when we decide to protect branches undergoing other kinds of operations. We however forgot to rethink the messaging, which originally said that we are refusing to touch the branch because it is "checked out" elsewhere, when d2ba271a (branch: check for bisects and rebases, 2022-06-14) started to protect branches that are being rebased or bisected. The spirit of the check has always been that we do not want to disrupt the use of the same branch in other worktrees. Let's reword the message slightly to say that the branch is "used by" another worktree, instead of "checked out". We could teach the branch.c:prepare_checked_out_branches() function to remember why it decided that a particular branch needs protecting (i.e. was it because it was checked out? being bisected? something else?) in addition to which worktree the branch was in use, and use that in the error message to say "you cannot force update this branch because it is being bisected in the worktree X", etc., but it is dubious that such extra complexity is worth it. The message already tells which directory the worktree in question is, and it should be just a "chdir" away for the user to find out what state it is in, if the user felt curious enough. So let's not go there yet. Helped-by: Josh Sref <jsoref@gmail.com> Signed-off-by: Junio C Hamano <gitster@pobox.com> 21 July 2023, 22:30:57 UTC
e43f4fd The thirteenth batch Signed-off-by: Junio C Hamano <gitster@pobox.com> 21 July 2023, 20:47:26 UTC
39fe402 Merge branch 'tb/refs-exclusion-and-packed-refs' Enumerating refs in the packed-refs file, while excluding refs that match certain patterns, has been optimized. * tb/refs-exclusion-and-packed-refs: ls-refs.c: avoid enumerating hidden refs where possible upload-pack.c: avoid enumerating hidden refs where possible builtin/receive-pack.c: avoid enumerating hidden references refs.h: implement `hidden_refs_to_excludes()` refs.h: let `for_each_namespaced_ref()` take excluded patterns revision.h: store hidden refs in a `strvec` refs/packed-backend.c: add trace2 counters for jump list refs/packed-backend.c: implement jump lists to avoid excluded pattern(s) refs/packed-backend.c: refactor `find_reference_location()` refs: plumb `exclude_patterns` argument throughout builtin/for-each-ref.c: add `--exclude` option ref-filter.c: parameterize match functions over patterns ref-filter: add `ref_filter_clear()` ref-filter: clear reachable list pointers after freeing ref-filter.h: provide `REF_FILTER_INIT` refs.c: rename `ref_filter` 21 July 2023, 20:47:26 UTC
36f76d2 pack-objects: fix --no-quiet Since 99fb6e04cb (pack-objects: convert to use parse_options(), 2012-02-01) git pack-objects has accepted the option --no-quiet, but it does the same as --quiet. That's because it's defined using OPT_SET_INT with a value of 0, which sets 0 when negated, too. Make --no-quiet equivalent to --progress and ignore it if --all-progress was given. Signed-off-by: René Scharfe <l.s.r@web.de> Signed-off-by: Junio C Hamano <gitster@pobox.com> 21 July 2023, 17:04:04 UTC
3a5f308 pack-objects: fix --no-keep-true-parents Since 99fb6e04cb (pack-objects: convert to use parse_options(), 2012-02-01) git pack-objects has accepted --no-keep-true-parents, but this option does the same as --keep-true-parents. That's because it's defined using OPT_SET_INT with a value of 0, which sets 0 when negated as well. Turn --no-keep-true-parents into the opposite of --keep-true-parents by using OPT_BOOL and storing the option's status directly in a variable named "grafts_keep_true_parents" instead of in negative form in "grafts_replace_parents". Signed-off-by: René Scharfe <l.s.r@web.de> Signed-off-by: Junio C Hamano <gitster@pobox.com> 21 July 2023, 17:02:59 UTC
c95ae3f describe: fix --no-exact-match Since 2c33f75754 (Teach git-describe --exact-match to avoid expensive tag searches, 2008-02-24) git describe accepts --no-exact-match, but it does the same as --exact-match, an alias for --candidates=0. That's because it's defined using OPT_SET_INT with a value of 0, which sets 0 when negated as well. Let --no-exact-match set the number of candidates to the default value instead. Users that need a more specific lack of exactitude can specify their preferred value using --candidates, as before. The "--no-exact-match" option was not covered in the tests, so let's add a few. Also add a case where --exact-match option is used on a commit that cannot be described without distance from tags and make sure the command fails. Signed-off-by: René Scharfe <l.s.r@web.de> [jc: added trivial tests] Signed-off-by: Junio C Hamano <gitster@pobox.com> 21 July 2023, 16:57:15 UTC
835950b blame: allow --contents to work with bare repo The --contents option can be used with git blame to blame the file as if it had the contents from the specified file. Since 1a3119ed (blame: allow --contents to work with non-HEAD commit, 2023-03-24), the --contents option can work with non-HEAD commit. However, if you try to use --contents in a bare repository, you get the following error: fatal: this operation must be run in a work tree This is because before trying to generate a fake working tree commit, we always call setup_work_tree(). But in a bare repo, working tree is not available. The call to setup_work_tree is used to prepare the reading of the blamed file in the working tree, which isn't necessary if we are reading the contents from the specific file instead of the file in the working tree. Add a check in setup_scoreboard to skip setup_work_tree if we are reading from the file specified in --contents. This enables us to use --contents in a bare repo. This is a nice addition on top of 1a3119ed, having a working tree to use --contents is optional. Add test for the --contents option with bare repo to the annotate-tests.sh test script. Signed-off-by: Han Young <hanyang.tony@bytedance.com> Signed-off-by: Junio C Hamano <gitster@pobox.com> 21 July 2023, 14:32:58 UTC
a27eece wrapper: use trace2 counters to collect fsync stats As mentioned in the thread starting at [1], trace2 counters should be used to count events instead of ad-hoc static variables. Convert the two fsync static variables to trace2 counters, reducing the coupling between wrapper.c and the trace2 subsystem. Adjust t/t5351 to match the trace2 counter output format. The counters are not per-thread because the ones being replaced also were not. [1] https://lore.kernel.org/git/20230627195251.1973421-2-calvinwan@google.com/ Signed-off-by: Beat Bolli <dev+git@drbeat.li> Signed-off-by: Junio C Hamano <gitster@pobox.com> 20 July 2023, 18:52:53 UTC
3821eb6 reset: reject --no-(mixed|soft|hard|merge|keep) option "git reset --no-mixed" behaved exactly like "git reset --mixed", which was nonsense. If there were only two kinds, e.g. "mixed" vs "separate", it might have made sense to make "git reset --no-mixed" behave identically to "git reset --separate" and vice-versa, but because we have many types of reset, let's just forbid "--no-mixed" and negated form of other types. Signed-off-by: Junio C Hamano <gitster@pobox.com> 20 July 2023, 05:02:53 UTC
68cbb20 show-branch: reject --[no-](topo|date)-order "git show-branch --no-topo-order" behaved exactly the same way as "git show-branch --topo-order" did, which was nonsense. This was because we choose between topo- and date- by setting a variable to either REV_SORT_IN_GRAPH_ORDER or REV_SORT_BY_COMMIT_DATE with OPT_SET_INT() and REV_SORT_IN_GRAPH_ORDER happens to be 0. The OPT_SET_INT() macro assigns 0 to the target variable in respose to the negated form of its option. "--no-date-order" by luck behaves identically to "--topo-order" exactly for the same reason, and it sort-of makes sense right now, but the "sort-of makes sense" will quickly break down once we add a third way to sort. Not-A may be B when there are only two choices between A and B, but once your choices become among A, B, and C, not-A does not mean B. Just mark these two ordering options to reject negation, and add a test, which was missing. "git show-branch --no-reflog" is also unnegatable, so throw in a test for that while we are at it. Signed-off-by: Junio C Hamano <gitster@pobox.com> 20 July 2023, 05:00:39 UTC
c48af99 trace2: fix a comment When the trace2 counter mechanism was added in 81071626ba (trace2: add global counter mechanism, 2022-10-24), the name of the file where new counters are added was misspelled in a comment. Use the correct file name. Signed-off-by: Beat Bolli <dev+git@drbeat.li> Signed-off-by: Junio C Hamano <gitster@pobox.com> 20 July 2023, 00:02:16 UTC
c512643 short help: allow a gap smaller than USAGE_GAP The parse-options API responds to "git cmd -h" by listing the option flag (padded to the USAGE_OPTS_WIDTH column), followed by USAGE_GAP (set to 2) whitespaces, followed by the help text. If the flags part does not fit within the USAGE_OPTS_WIDTH, the help text is given on its own line. Imagine that "@" below depicts the USAGE_OPTS_WIDTH'th column, and "#" are for the usage help text, the output may look like this: @@@@@@@@@@@@@ ######################################## -f description of the flag '-f' comes here --short=<num> description of the flag '--short' --very-long-option=<number> description of the flag '--very-long-option' This is all good and nice in principle, but it becomes awkward when the flags part is just one column over the limit and forces a line break. See the description of the "--almost" option below: @@@@@@@@@@@@@ ######################################## -f description of the flag '-f' comes here --short=<num> description of the flag '--short' --almost=<num> description of the flag '--almost' --very-long-option=<number> description of the flag '--very-long-option' If we allow shrinking the gap to a single whitespace only in such a case, we would instead get: @@@@@@@@@@@@@ ######################################## -f description of the flag '-f' comes here --short=<num> description of the flag '--short' --almost=<num> description of the flag '--almost' --very-long-option=<number> description of the flag '--very-long-option' and the boundary between the flags and their descriptions does not become any harder to see, while saving precious vertical screen real estate. Signed-off-by: Junio C Hamano <gitster@pobox.com> 19 July 2023, 23:39:02 UTC
d86a8f3 remote: simplify "remote add --tags" help text The help text for the --tags option was split into two option[] entries, which was a hacky way to give two lines of help text (the second entry did not have either short or long help, and there was no way to invoke its entry---it was there only for the help text). As we now support multi-line text in the option help, let's make the second line of the help a proper second line and remove the hacky second entry. Signed-off-by: Junio C Hamano <gitster@pobox.com> 19 July 2023, 23:39:02 UTC
448abbb short help: allow multi-line opthelp When "-h" triggers the short-help in a command that implements its option parsing using the parse-options API, the option help text is shown with a single fprintf() as a long line. When the text is multi-line, the second and subsequent lines are not left padded, that breaks the alignment across options. Borrowing the idea from the advice API where its hint strings are shown with (localized) "hint:" prefix, let's internally split the (localized) help text into lines, and showing the first line, pad the remaining lines to align. Signed-off-by: Junio C Hamano <gitster@pobox.com> 19 July 2023, 23:30:06 UTC
fb8f726 configure.ac: always save NO_ICONV to config.status In case 'configure --with-iconv=no' is used, NO_ICONV is not saved to config.status and thus git is built with iconv support. Always save NO_ICONV to config.status to honor what user selected during configure step. Signed-off-by: Andreas Herrmann <aherrmann@suse.de> Signed-off-by: Junio C Hamano <gitster@pobox.com> 19 July 2023, 17:07:55 UTC
92d8f00 configure.ac: don't overwrite NO_CURL option Even if 'configure --with-curl=no' was run, curl support is used, because library detection overwrites it. Avoid this overwrite. Configure should obey what the user has specified. Signed-off-by: Andreas Herrmann <aherrmann@suse.de> Signed-off-by: Junio C Hamano <gitster@pobox.com> 19 July 2023, 17:07:55 UTC
0dd79e0 configure.ac: don't overwrite NO_EXPAT option Even if 'configure --with-expat=no' was run, expat support is used, because library detection overwrites it. Avoid this overwrite. Configure should obey what the user has specified. Signed-off-by: Andreas Herrmann <aherrmann@suse.de> Signed-off-by: Junio C Hamano <gitster@pobox.com> 19 July 2023, 17:07:55 UTC
83bb8e5 show-branch: --no-sparse should give dense output "git show-branch --no-sparse" behaved exactly the same way as "git show-branch --sparse", which did not make any sense. This was because it used a variable "dense" initialized to 1 by default to give "non sparse" behaviour, and OPT_SET_INT() to set the varilable to 0 in response to the "--sparse" option. Unfortunately, OPT_SET_INT() sets 0 to the given variable when the option is negated. Flip the polarity of the variable "dense" by renaming it to "sparse" and initializing it to 0, and have OPT_SET_INT() set the variable to 1 when "--sparse" is given. This way, "--no-sparse" would set 0 to the variable and would give us the "dense" behaviour. Signed-off-by: Junio C Hamano <gitster@pobox.com> 19 July 2023, 16:16:37 UTC
a2dad48 fetch: reject --no-ipv[46] Now we have introduced OPT_IPVERSION(), tweak its implementation so that "git clone", "git fetch", and "git push" reject the negated form of "Use only IP version N" options. Signed-off-by: Junio C Hamano <gitster@pobox.com> 18 July 2023, 21:47:30 UTC
ae2c912 parse-options: introduce OPT_IPVERSION() The command line option parsing for "git clone", "git fetch", and "git push" have duplicated implementations of parsing "--ipv4" and "--ipv6" options, by having two OPT_SET_INT() for "ipv4" and "ipv6". Introduce a new OPT_IPVERSION() macro and use it in these three commands. Signed-off-by: Junio C Hamano <gitster@pobox.com> 18 July 2023, 21:35:54 UTC
e12cb98 branch: reject "--no-all" and "--no-remotes" early As the command line parser for "git branch --all" forgets to use PARSE_OPT_NONEG, it accepted "git branch --no-all", and then passed a nonsense value to the underlying machinery, leading to a fatal error "filter_refs: invalid type". The "--remotes" option had exactly the same issue. Catch the unsupported options early in the option parser. Signed-off-by: Junio C Hamano <gitster@pobox.com> 18 July 2023, 19:19:53 UTC
947ebd6 am: simplify parsing of "--[no-]keep-cr" Command line options "--keep-cr" and its negation trigger OPT_SET_INT_F(PARSE_OPT_NONEG) to set a variable to 1 and 0 respectively. Using OPT_SET_INT() to implement the positive variant that sets the variable to 1 without specifying PARSE_OPT_NONEG gives us the negative variant to set it to 0 for free. Signed-off-by: Junio C Hamano <gitster@pobox.com> 18 July 2023, 19:19:31 UTC
d6f598e gitignore.txt: mark up explanation of patterns consistently In the "PATTERN FORMAT" section, all the other pattern elements are shown as `monospace` literals inside "double quoted" strings. Do the same for the explanation of a slash to make it consistent. Signed-off-by: Junio C Hamano <gitster@pobox.com> 18 July 2023, 19:19:08 UTC
991c552 ls-tree: fix --no-full-name Since 61fdbcf98b (ls-tree: migrate to parse-options, 2009-11-13) git ls-tree has accepted the option --no-full-name, but it does the same as --full-name, contrary to convention. That's because it's defined using OPT_SET_INT with a value of 0, where the negative variant sets 0 as well. Turn --no-full-name into the opposite of --full-name by using OPT_BOOL instead and storing the option's status directly in a variable named "full_name" instead of in negated form in "chomp_prefix". Signed-off-by: René Scharfe <l.s.r@web.de> Signed-off-by: Junio C Hamano <gitster@pobox.com> 18 July 2023, 16:38:24 UTC
cba07a3 The twelfth batch Signed-off-by: Junio C Hamano <gitster@pobox.com> 18 July 2023, 14:29:00 UTC
c6a5e1a Merge branch 'tb/repack-cleanup' The recent change to "git repack" made it react less nicely when a leftover .idx file that no longer has the corresponding .pack file in the repository, which has been corrected. * tb/repack-cleanup: builtin/repack.c: avoid dir traversal in `collect_pack_filenames()` builtin/repack.c: only repack `.pack`s that exist 18 July 2023, 14:28:53 UTC
6016ee0 Merge branch 'tb/fsck-no-progress' "git fsck --no-progress" still spewed noise from the commit-graph subsystem, which has been corrected. * tb/fsck-no-progress: commit-graph.c: avoid duplicated progress output during `verify` commit-graph.c: pass progress to `verify_one_commit_graph()` commit-graph.c: iteratively verify commit-graph chains commit-graph.c: extract `verify_one_commit_graph()` fsck: suppress MIDX output with `--no-progress` fsck: suppress commit-graph output with `--no-progress` 18 July 2023, 14:28:53 UTC
d6e6722 Merge branch 'mh/doc-credential-helpers' Doc update. * mh/doc-credential-helpers: doc: gitcredentials: link to helper list 18 July 2023, 14:28:52 UTC
3437f54 gitignore.txt: use backticks instead of double quotes Among four examples, only this one used "double quoted" sample patterns, but all others marked up the patterns in `monospace`. Signed-off-by: Johan Ruokangas <johan@latehours.net> Signed-off-by: Junio C Hamano <gitster@pobox.com> 18 July 2023, 13:56:19 UTC
d9e0062 ref-filter: simplify return type of match_points_at We return the oid that matched, but the sole caller only cares whether we matched anything at all. This is mostly academic, since there's only one caller, but the lifetime of the returned pointer is not immediately clear. Sometimes it points to an oid in a tag struct, which should live forever. And sometimes to the oid passed in, which only lives as long as the each_ref_fn callback we're called from. Simplify this to a boolean return which is more direct and obvious. As a bonus, this lets us avoid the weird pattern of overwriting our "oid" parameter in the loop (since we now only refer to the tagged oid one time, and can just inline the call to get it). Signed-off-by: Jeff King <peff@peff.net> Signed-off-by: Junio C Hamano <gitster@pobox.com> 17 July 2023, 21:16:05 UTC
870eb53 ref-filter: avoid parsing non-tags in match_points_at() When handling --points-at, we have to try to peel each ref to see if it's a tag that points at a requested oid. We start this process by calling parse_object() on the oid pointed to by each ref. The cost of parsing each object adds up, especially in an output that doesn't otherwise need to open the objects at all. Ideally we'd use peel_iterated_oid() here, which uses the cached information in the packed-refs file. But we can't, because our --points-at must match not only the fully peeled value, but any interim values (so if tag A points to tag B which points to commit C, we should match --points-at=B, but peel_iterated_oid() will only tell us about C). So the best we can do (absent changes to the packed-refs peel traits) is to avoid parsing non-tags. The obvious way to do that is to call oid_object_info() to check the type before parsing. But there are a few gotchas there, like checking if the object has already been parsed. Instead we can just tell parse_object() that we are OK skipping the hash check, which lets it turn on several optimizations. Commits can be loaded via the commit graph (so it's both fast and we have the benefit of the parsed data if we need it later at the output stage). Blobs are not loaded at all. Trees are still loaded, but it's rather rare to have a ref point directly to a tree (and since this is just an optimization, kicking in 99% of the time is OK). Even though we're paying for an extra lookup, the cost to avoid parsing the non-tags is a net benefit. In my git.git repository with 941 tags and 1440 other refs pointing to commits, this significantly cuts the runtime: Benchmark 1: ./git.old for-each-ref --points-at=HEAD Time (mean ± σ): 26.8 ms ± 0.5 ms [User: 24.5 ms, System: 2.2 ms] Range (min … max): 25.9 ms … 29.2 ms 107 runs Benchmark 2: ./git.new for-each-ref --points-at=HEAD Time (mean ± σ): 9.1 ms ± 0.3 ms [User: 6.8 ms, System: 2.2 ms] Range (min … max): 8.6 ms … 10.2 ms 308 runs Summary './git.new for-each-ref --points-at=HEAD' ran 2.96 ± 0.10 times faster than './git.old for-each-ref --points-at=HEAD' In a repository that is mostly annotated tags, we'd expect less improvement (we might still skip a few object loads, but that's balanced by the extra lookups). In my clone of linux.git, which has 782 tags and 3 branches, the run-time is about the same (it's actually ~1% faster on average after this patch, but that's within the run-to-run noise). Signed-off-by: Jeff King <peff@peff.net> Signed-off-by: Junio C Hamano <gitster@pobox.com> 17 July 2023, 21:16:05 UTC
b9584c5 ref-filter: avoid parsing tagged objects in match_points_at() When we peel tags to check if they match a --points-at oid, we recursively parse the tagged object to see if it is also a tag. But since the tag itself tells us the type of the object it points to (and even gives us the appropriate object struct via its "tagged" member), we can use that directly. We do still have to make sure to call parse_tag() before looking at each tag. This is redundant for the outermost tag (since we did call parse_object() to find its type), but that's OK; parse_tag() is smart enough to make this a noop when the tag has already been parsed. In my clone of linux.git, with 782 tags (and only 3 non-tags), this yields a significant speedup (bringing us back where we were before the commit before this one started recursively dereferencing tags): Benchmark 1: ./git.old for-each-ref --points-at=HEAD --format="%(refname)" Time (mean ± σ): 20.3 ms ± 0.5 ms [User: 11.1 ms, System: 9.1 ms] Range (min … max): 19.6 ms … 21.5 ms 141 runs Benchmark 2: ./git.new for-each-ref --points-at=HEAD --format="%(refname)" Time (mean ± σ): 11.4 ms ± 0.2 ms [User: 6.3 ms, System: 5.0 ms] Range (min … max): 11.0 ms … 12.2 ms 250 runs Summary './git.new for-each-ref --points-at=HEAD --format="%(refname)"' ran 1.79 ± 0.05 times faster than './git.old for-each-ref --points-at=HEAD --format="%(refname)"' Signed-off-by: Jeff King <peff@peff.net> Signed-off-by: Junio C Hamano <gitster@pobox.com> 17 July 2023, 21:16:05 UTC
468887f ref-filter: handle nested tags in --points-at option Tags are dereferenced until reaching a different object type to handle nested tags, e.g. on checkout. In contrast, "git tag --points-at=..." fails to list such nested tags because only one level of indirection is obtained in filter_refs(). Implement the recursive dereferencing for the "--points-at" option when filtering refs to unify the behaviour. Signed-off-by: Jan Klötzke <jan@kloetzke.net> Signed-off-by: Junio C Hamano <gitster@pobox.com> 17 July 2023, 21:16:05 UTC
5e23854 The eleventh batch Signed-off-by: Junio C Hamano <gitster@pobox.com> 17 July 2023, 18:30:43 UTC
13ed10e Merge branch 'jc/pathspec-match-with-common-prefix' "git ls-files '(attr:X)D/'" that triggers the common prefix optimization codepath failed to read from "D/.gitattributes", which has been corrected. * jc/pathspec-match-with-common-prefix: dir: match "attr" pathspec magic with correct paths t6135: attr magic with path pattern 17 July 2023, 18:30:43 UTC
ce481ac Merge branch 'cw/compat-util-header-cleanup' Further shuffling of declarations across header files to streamline file dependencies. * cw/compat-util-header-cleanup: git-compat-util: move alloc macros to git-compat-util.h treewide: remove unnecessary includes for wrapper.h kwset: move translation table from ctype sane-ctype.h: create header for sane-ctype macros git-compat-util: move wrapper.c funcs to its header git-compat-util: move strbuf.c funcs to its header 17 July 2023, 18:30:42 UTC
d5bb430 Merge branch 'vd/adjust-mfow-doc-to-updated-headers' Code snippets in a tutorial document no longer compiled after recent header shuffling, which have been corrected. * vd/adjust-mfow-doc-to-updated-headers: docs: add necessary headers to Documentation/MFOW.txt 17 July 2023, 18:30:42 UTC
0e074fb Merge branch 'rs/ls-tree-prefix-simplify' Code simplification. * rs/ls-tree-prefix-simplify: ls-tree: simplify prefix handling 17 July 2023, 18:30:42 UTC
d383b4f Merge branch 'rs/userformat-find-requirements-simplify' Code simplification. * rs/userformat-find-requirements-simplify: pretty: use strchr(3) in userformat_find_requirements() 17 July 2023, 18:30:41 UTC
55e8fad Merge branch 'rs/pretty-format-double-negation-fix' Code clarification. * rs/pretty-format-double-negation-fix: pretty: avoid double negative in format_commit_item() 17 July 2023, 18:30:41 UTC
377d1ca Merge branch 'rs/packet-length-simplify' Code simplification. * rs/packet-length-simplify: pkt-line: add size parameter to packet_length() 17 July 2023, 18:30:41 UTC
9187b27 Merge branch 'pw/diff-no-index-from-named-pipes' "git diff --no-index" learned to read from named pipes as if they were regular files, to allow "git diff <(process) <(substitution)" some shells support. * pw/diff-no-index-from-named-pipes: diff --no-index: support reading from named pipes t4054: test diff --no-index with stdin diff --no-index: die on error reading stdin diff --no-index: refuse to compare stdin to a directory 17 July 2023, 18:30:41 UTC
945c722 strbuf: use skip_prefix() in strbuf_addftime() Use the now common skip_prefix() cascade instead of a case statement to parse the strftime(3) format in strbuf_addftime(). skip_prefix() parses the "fmt" pointer and advances it appropriately, making additional pointer arithmetic unnecessary. The resulting code is more compact and consistent with most other strbuf_expand_step() loops. Signed-off-by: René Scharfe <l.s.r@web.de> Signed-off-by: Junio C Hamano <gitster@pobox.com> 17 July 2023, 16:24:49 UTC
065135f t6300: fix setup with GPGSSH but without GPG In a test introduced by 26c9c03f0a (ref-filter: add new "signature" atom, 2023-06-04) the file named "file" is added by a setup step that requires GPG and modified by a second setup step that requires GPGSSH. Systems lacking the first prerequisite skip the initial setup step and then "git commit -a" in the second one doesn't find the modified file. Add it explicitly. Signed-off-by: René Scharfe <l.s.r@web.de> Signed-off-by: Junio C Hamano <gitster@pobox.com> 17 July 2023, 16:15:18 UTC
830b4a0 The tenth batch Signed-off-by: Junio C Hamano <gitster@pobox.com> 14 July 2023, 17:46:08 UTC
daa2589 Merge branch 'jk/imap-send-unused-variable-cleanup' "imap-send" codepaths got cleaned up to get rid of unused parameters. * jk/imap-send-unused-variable-cleanup: imap-send: drop unused fields from imap_cmd_cb imap-send: drop unused parameter from imap_cmd_cb callback imap-send: use server conf argument in setup_curl() 14 July 2023, 17:46:07 UTC
ce36dea Merge branch 'ma/t0091-fixup' "git bugreport" tests did not test what it wanted to test, which has been corrected. * ma/t0091-fixup: t0091-bugreport.sh: actually verify some content of report 14 July 2023, 17:46:07 UTC
back to top