]> git.ipfire.org Git - thirdparty/git.git/log
thirdparty/git.git
5 hours agoThe seventh batch main master
Junio C Hamano [Mon, 7 Jul 2025 21:12:41 +0000 (14:12 -0700)] 
The seventh batch

Signed-off-by: Junio C Hamano <gitster@pobox.com>
5 hours agoMerge branch 'cb/ci-freebsd-update-to-14.3'
Junio C Hamano [Mon, 7 Jul 2025 21:12:57 +0000 (14:12 -0700)] 
Merge branch 'cb/ci-freebsd-update-to-14.3'

CI updates.

* cb/ci-freebsd-update-to-14.3:
  ci: update FreeBSD image to 14.3

5 hours agoMerge branch 'jj/doc-branch-markup-fix'
Junio C Hamano [Mon, 7 Jul 2025 21:12:57 +0000 (14:12 -0700)] 
Merge branch 'jj/doc-branch-markup-fix'

Doc markup fix.

* jj/doc-branch-markup-fix:
  doc: improve formatting in branch section

5 hours agoMerge branch 'cb/daemon-retry-interrupted-accept'
Junio C Hamano [Mon, 7 Jul 2025 21:12:57 +0000 (14:12 -0700)] 
Merge branch 'cb/daemon-retry-interrupted-accept'

When "git daemon" sees a signal while attempting to accept() a new
client, instead of retrying, it skipped it by mistake, which has
been corrected.

* cb/daemon-retry-interrupted-accept:
  daemon: correctly handle soft accept() errors in service_loop

5 hours agoMerge branch 'jk/fix-leak-send-pack'
Junio C Hamano [Mon, 7 Jul 2025 21:12:56 +0000 (14:12 -0700)] 
Merge branch 'jk/fix-leak-send-pack'

Leakfix.

* jk/fix-leak-send-pack:
  send-pack: clean-up even when taking an early exit
  send-pack: clean up extra_have oid array

5 hours agoMerge branch 'cb/daemon-fd-check-fix'
Junio C Hamano [Mon, 7 Jul 2025 21:12:56 +0000 (14:12 -0700)] 
Merge branch 'cb/daemon-fd-check-fix'

Remove unnecessary check from "git daemon" code.

* cb/daemon-fd-check-fix:
  daemon: remove unnecesary restriction for listener fd

5 hours agoMerge branch 'jk/submodule-remote-lookup-cleanup'
Junio C Hamano [Mon, 7 Jul 2025 21:12:55 +0000 (14:12 -0700)] 
Merge branch 'jk/submodule-remote-lookup-cleanup'

Updating submodules from the upstream did not work well when
submodule's HEAD is detached, which has been improved.

* jk/submodule-remote-lookup-cleanup:
  submodule: look up remotes by URL first
  submodule: move get_default_remote_submodule()
  submodule--helper: improve logic for fallback remote name
  remote: remove the_repository from some functions
  dir: move starts_with_dot(_dot)_slash to dir.h
  remote: fix tear down of struct remote
  remote: remove branch->merge_name and fix branch_release()

5 days agoThe sixth batch
Junio C Hamano [Wed, 2 Jul 2025 19:07:52 +0000 (12:07 -0700)] 
The sixth batch

Signed-off-by: Junio C Hamano <gitster@pobox.com>
5 days agoMerge branch 'jt/imap-send-message-fix'
Junio C Hamano [Wed, 2 Jul 2025 19:08:05 +0000 (12:08 -0700)] 
Merge branch 'jt/imap-send-message-fix'

Update some error messages from "git imap-send".

* jt/imap-send-message-fix:
  imap-send: improve error messages with configuration hints
  imap-send: fix confusing 'store' terminology in error message

5 days agoMerge branch 'ps/contrib-sweep'
Junio C Hamano [Wed, 2 Jul 2025 19:08:05 +0000 (12:08 -0700)] 
Merge branch 'ps/contrib-sweep'

Remove bunch of stuff from contrib/ hierarchy.

* ps/contrib-sweep:
  contrib: remove some scripts in "stats" directory
  contrib: remove "git-new-workdir"
  contrib: remove "emacs" directory
  contrib: remove "git-resurrect.sh"
  contrib: remove "persistent-https" remote helper
  contrib: remove "mw-to-git"
  contrib: remove "hooks" directory
  contrib: remove "thunderbird-patch-inline"
  contrib: remove remote-helper stubs
  contrib: remove "examples" directory
  contrib: remove "remotes2config.sh"

5 days agoMerge branch 'ag/imap-send-resurrection'
Junio C Hamano [Wed, 2 Jul 2025 19:08:04 +0000 (12:08 -0700)] 
Merge branch 'ag/imap-send-resurrection'

"git imap-send" has been broken for a long time, which has been
resurrected and then taught to talk OAuth2.0 etc.

* ag/imap-send-resurrection:
  imap-send: fix minor mistakes in the logs
  imap-send: display the destination mailbox when sending a message
  imap-send: display port alongwith host when git credential is invoked
  imap-send: add ability to list the available folders
  imap-send: enable specifying the folder using the command line
  imap-send: add PLAIN authentication method to OpenSSL
  imap-send: add support for OAuth2.0 authentication
  imap-send: gracefully fail if CRAM-MD5 authentication is requested without OpenSSL
  imap-send: fix memory leak in case auth_cram_md5 fails
  imap-send: fix bug causing cfg->folder being set to NULL

6 days agosend-pack: clean-up even when taking an early exit
Junio C Hamano [Tue, 1 Jul 2025 21:17:25 +0000 (14:17 -0700)] 
send-pack: clean-up even when taking an early exit

Previous commit has plugged one leak in the normal code path, but
there is an early exit that leaves without releasing any resources
acquired in the function.

Signed-off-by: Junio C Hamano <gitster@pobox.com>
6 days agoci: update FreeBSD image to 14.3
Carlo Marcelo Arenas Belón [Tue, 1 Jul 2025 04:52:58 +0000 (04:52 +0000)] 
ci: update FreeBSD image to 14.3

FreeBSD 13.4 is no longer supported, and 13.5 will be the last
release from that series, so jump instead to 14.3 which should
be supported for another 10 months and will be at that point
the oldest supported release with the interim release of 15.

While at it, move some variables to the environment and make
sure to skip a git grep test that assumes glibc regex.

Signed-off-by: Carlo Marcelo Arenas Belón <carenas@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
7 days agoThe fifth batch
Junio C Hamano [Mon, 30 Jun 2025 21:30:15 +0000 (14:30 -0700)] 
The fifth batch

Signed-off-by: Junio C Hamano <gitster@pobox.com>
7 days agoMerge branch 'jk/test-seq-format'
Junio C Hamano [Mon, 30 Jun 2025 21:30:31 +0000 (14:30 -0700)] 
Merge branch 'jk/test-seq-format'

A test helper "test_seq" function learned the "-f <fmt>" option,
which allowed us to simplify a lot of test scripts.

* jk/test-seq-format:
  test-lib: teach test_seq the -f option
  t7422: replace confusing printf with echo

7 days agoMerge branch 'jc/merge-compact-summary'
Junio C Hamano [Mon, 30 Jun 2025 21:30:31 +0000 (14:30 -0700)] 
Merge branch 'jc/merge-compact-summary'

"git merge/pull" has been taught the "--compact-summary" option to
use the compact-summary format, intead of diffstat, when showing
the summary of the incoming changes.

* jc/merge-compact-summary:
  merge/pull: extend merge.stat configuration variable to cover --compact-summary
  merge/pull: add the "--compact-summary" option

7 days agoMerge branch 'bc/stash-export-import'
Junio C Hamano [Mon, 30 Jun 2025 21:30:30 +0000 (14:30 -0700)] 
Merge branch 'bc/stash-export-import'

An interchange format for stash entries is defined, and subcommand
of "git stash" to import/export has been added.

* bc/stash-export-import:
  builtin/stash: provide a way to import stashes from a ref
  builtin/stash: provide a way to export stashes to a ref
  builtin/stash: factor out revision parsing into a function
  object-name: make get_oid quietly return an error

7 days agoMerge branch 'jc/cocci-avoid-regexp-constraint'
Junio C Hamano [Mon, 30 Jun 2025 21:30:30 +0000 (14:30 -0700)] 
Merge branch 'jc/cocci-avoid-regexp-constraint'

Avoid regexp_constraint and instead use comparison_constraint when
listing functions to exclude from application of coccinelle rules,
as spatch can be built with different regexp engine X-<.

* jc/cocci-avoid-regexp-constraint:
  cocci: matching (multiple) identifiers

7 days agodoc: improve formatting in branch section
Jakub Ječmínek [Sun, 29 Jun 2025 19:04:45 +0000 (21:04 +0200)] 
doc: improve formatting in branch section

The 'branch' section of the git-config documentation was missing
inline code formatting and emphasis for the <name> placeholder.

Both changes improve readability, especially when viewed online.

Signed-off-by: Jakub Ječmínek <kuba@kubajecminek.cz>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
7 days agodaemon: correctly handle soft accept() errors in service_loop
Carlo Marcelo Arenas Belón [Fri, 27 Jun 2025 23:14:04 +0000 (16:14 -0700)] 
daemon: correctly handle soft accept() errors in service_loop

Since df076bdbcc ([PATCH] GIT: Listen on IPv6 as well, if available.,
2005-07-23), the original error checking was included in an inner loop
unchanged, where its effect was different.

Instead of retrying, after a EINTR during accept() in the listening
socket, it will advance to the next one and try with that instead,
leaving the client waiting for another round.

Make sure to retry with the same listener socket that failed originally.

To avoid an unlikely busy loop, fallback to the old behaviour after a
couple of attempts.

Signed-off-by: Carlo Marcelo Arenas Belón <carenas@gmail.com>
Acked-by: Phillip Wood <phillip.wood@dunelm.org.uk>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
10 days agosend-pack: clean up extra_have oid array
Jacob Keller [Fri, 27 Jun 2025 22:09:04 +0000 (15:09 -0700)] 
send-pack: clean up extra_have oid array

Commit c8009635785e ("fetch-pack, send-pack: clean up shallow oid
array", 2024-09-25) cleaned up the shallow oid array in cmd_send_pack,
but didn't clean up extra_have, which is still leaked at program exit.
I suspect the particular tests in t5539 don't trigger any additions to
the extra_have array, which explains why the tests can pass leak free
despite this gap.

Signed-off-by: Jacob Keller <jacob.keller@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
11 days agodaemon: remove unnecesary restriction for listener fd
Carlo Marcelo Arenas Belón [Thu, 26 Jun 2025 09:51:39 +0000 (02:51 -0700)] 
daemon: remove unnecesary restriction for listener fd

Since df076bdbcc ([PATCH] GIT: Listen on IPv6 as well, if available.,
2005-07-23), any file descriptor assigned to a listening socket was
validated to be within the range to be used in an FDSET later.

6573faff34 (NO_IPV6 support for git daemon, 2005-09-28), moves to
use poll() instead of select(), that doesn't have that restriction,
so remove the original check.

Signed-off-by: Carlo Marcelo Arenas Belón <carenas@gmail.com>
Acked-by: Phillip Wood <phillip.wood123@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
12 days agoThe fourth batch
Junio C Hamano [Wed, 25 Jun 2025 21:06:36 +0000 (14:06 -0700)] 
The fourth batch

Signed-off-by: Junio C Hamano <gitster@pobox.com>
12 days agoMerge branch 'jg/mailinfo-leakfix'
Junio C Hamano [Wed, 25 Jun 2025 21:07:37 +0000 (14:07 -0700)] 
Merge branch 'jg/mailinfo-leakfix'

Leakfix.

* jg/mailinfo-leakfix:
  mailinfo.c: fix memory leak in function handle_content_type()

12 days agoMerge branch 'jc/diff-no-index-with-pathspec-fix'
Junio C Hamano [Wed, 25 Jun 2025 21:07:36 +0000 (14:07 -0700)] 
Merge branch 'jc/diff-no-index-with-pathspec-fix'

Recent code added a direct access to the d_type member in "struct
dirent", but some platforms lack it, which has been corrected.

* jc/diff-no-index-with-pathspec-fix:
  diff-no-index: do not reference .d_type member of struct dirent

12 days agoMerge branch 'ps/maintenance-ref-lock'
Junio C Hamano [Wed, 25 Jun 2025 21:07:36 +0000 (14:07 -0700)] 
Merge branch 'ps/maintenance-ref-lock'

"git maintenance" lacked the care "git gc" had to avoid holding
onto the repository lock for too long during packing refs, which
has been remedied.

* ps/maintenance-ref-lock:
  builtin/maintenance: fix locking race when handling "gc" task
  builtin/gc: avoid global state in `gc_before_repack()`
  usage: allow dying without writing an error message
  builtin/maintenance: fix locking race with refs and reflogs tasks
  builtin/maintenance: split into foreground and background tasks
  builtin/maintenance: fix typedef for function pointers
  builtin/maintenance: extract function to run tasks
  builtin/maintenance: stop modifying global array of tasks
  builtin/maintenance: mark "--task=" and "--schedule=" as incompatible
  builtin/maintenance: centralize configuration of explicit tasks
  builtin/gc: drop redundant local variable
  builtin/gc: use designated field initializers for maintenance tasks

12 days agoMerge branch 'jc/you-still-use-whatchanged'
Junio C Hamano [Wed, 25 Jun 2025 21:07:35 +0000 (14:07 -0700)] 
Merge branch 'jc/you-still-use-whatchanged'

"git whatchanged" that is longer to type than "git log --raw"
which is its modern rough equivalent has outlived its usefulness
more than 10 years ago.  Plan to deprecate and remove it.

* jc/you-still-use-whatchanged:
  whatschanged: list it in BreakingChanges document
  whatchanged: remove when built with WITH_BREAKING_CHANGES
  whatchanged: require --i-still-use-this
  tests: prepare for a world without whatchanged
  doc: prepare for a world without whatchanged
  you-still-use-that??: help deprecating commands for removal

13 days agoThe third batch
Junio C Hamano [Tue, 24 Jun 2025 16:47:25 +0000 (09:47 -0700)] 
The third batch

Signed-off-by: Junio C Hamano <gitster@pobox.com>
13 days agoMerge branch 'ly/run-builtin-use-passed-in-repo'
Junio C Hamano [Tue, 24 Jun 2025 16:48:52 +0000 (09:48 -0700)] 
Merge branch 'ly/run-builtin-use-passed-in-repo'

Code clean-up.

* ly/run-builtin-use-passed-in-repo:
  git.c: remove the_repository dependence in run_builtin()

13 days agoMerge branch 'rm/t2400-modernize'
Junio C Hamano [Tue, 24 Jun 2025 16:48:52 +0000 (09:48 -0700)] 
Merge branch 'rm/t2400-modernize'

Test clean-up.

* rm/t2400-modernize:
  t2400: replace 'test -[efd]' with 'test_path_is_*'

13 days agoMerge branch 'sa/multi-mailmap-fix'
Junio C Hamano [Tue, 24 Jun 2025 16:48:51 +0000 (09:48 -0700)] 
Merge branch 'sa/multi-mailmap-fix'

When asking to apply mailmap to both author and committer field
while showing a commit object, the field that appears later was not
correctly parsed and replaced, which has been corrected.

* sa/multi-mailmap-fix:
  cat-file: fix mailmap application for different author and committer

13 days agoMerge branch 'jc/cg-let-bss-do-its-job'
Junio C Hamano [Tue, 24 Jun 2025 16:48:50 +0000 (09:48 -0700)] 
Merge branch 'jc/cg-let-bss-do-its-job'

Clarify "do not explicitly initialize to zero" rule in the
CodingGuidelines document.

* jc/cg-let-bss-do-its-job:
  CodingGuidelines: let BSS do its job

13 days agoMerge branch 'ac/preload-index-wo-the-repository'
Junio C Hamano [Tue, 24 Jun 2025 16:48:49 +0000 (09:48 -0700)] 
Merge branch 'ac/preload-index-wo-the-repository'

Code clean-up.

* ac/preload-index-wo-the-repository:
  preload-index: stop depending on 'the_repository'
  environment: remove the global variable 'core_preload_index'

13 days agoMerge branch 'ly/prepare-show-merge-leakfix'
Junio C Hamano [Tue, 24 Jun 2025 16:48:49 +0000 (09:48 -0700)] 
Merge branch 'ly/prepare-show-merge-leakfix'

Leakfix.

* ly/prepare-show-merge-leakfix:
  revision: fix memory leak in prepare_show_merge()

13 days agoMerge branch 'kj/stash-onbranch-submodule-fix'
Junio C Hamano [Tue, 24 Jun 2025 16:48:48 +0000 (09:48 -0700)] 
Merge branch 'kj/stash-onbranch-submodule-fix'

"git stash" recorded a wrong branch name when submodules are
present in the current checkout, which has been corrected.

* kj/stash-onbranch-submodule-fix:
  stash: fix incorrect branch name in stash message

13 days agoMerge branch 'ag/send-email-edit-threading-fix'
Junio C Hamano [Tue, 24 Jun 2025 16:48:47 +0000 (09:48 -0700)] 
Merge branch 'ag/send-email-edit-threading-fix'

"git send-email" incremented its internal message counter when a
message was edited, which made logic that treats the first message
specially misbehave, which has been corrected.

* ag/send-email-edit-threading-fix:
  send-email: show the new message id assigned by outlook in the logs
  send-email: fix bug resulting in broken threads if a message is edited

13 days agoMerge branch 'pw/stash-p-pathspec-fixes'
Junio C Hamano [Tue, 24 Jun 2025 16:48:47 +0000 (09:48 -0700)] 
Merge branch 'pw/stash-p-pathspec-fixes'

"git stash -p <pathspec>" improvements.

* pw/stash-p-pathspec-fixes:
  stash: allow "git stash [<options>] --patch <pathspec>" to assume push
  stash: allow "git stash -p <pathspec>" to assume push again

13 days agoMerge branch 'pw/subtree-gpg-sign'
Junio C Hamano [Tue, 24 Jun 2025 16:48:46 +0000 (09:48 -0700)] 
Merge branch 'pw/subtree-gpg-sign'

"git subtree" (in contrib/) learns to grok GPG signing its commits.

* pw/subtree-gpg-sign:
  contrib/subtree: add -S/--gpg-sign
  contrib/subtree: parse using --stuck-long

13 days agotest-lib: teach test_seq the -f option
Jeff King [Mon, 23 Jun 2025 10:56:25 +0000 (06:56 -0400)] 
test-lib: teach test_seq the -f option

The "seq" tool has a "-f" option to produce printf-style formatted
lines. Let's teach our test_seq helper the same trick. This lets us get
rid of some shell loops in test snippets (which are particularly verbose
in our test suite because we have to "|| return 1" to keep the &&-chain
going).

This converts a few call-sites I found by grepping around the test
suite. A few notes on these:

  - In "seq", the format specifier is a "%g" float. Since test_seq only
    supports integers, I've kept the more natural "%d" (which is what
    these call sites were using already).

  - Like "seq", test_seq automatically adds a newline to the specified
    format. This is what all callers are doing already except for t0021,
    but there we do not care about the exact format. We are just trying
    to printf a large number of bytes to a file. It's not worth
    complicating other callers or adding an option to avoid the newline
    in that caller.

  - Most conversions are just replacing a shell loop (which does get rid
    of an extra fork, since $() requires a subshell). In t0612 we can
    replace an awk invocation, which I think makes the end result more
    readable, as there's less quoting.

  - In t7422 we can replace one loop, but sadly we have to leave the
    loop directly above it. This is because that earlier loop wants to
    include the seq value twice in the output, which test_seq does not
    support (nor does regular seq). If you run:

      test_seq -f "foo-%d %d" 10

    the second "%d" will always be the empty string. You might naively
    think that test_seq could add some extra arguments, like:

      # 3 ought to be enough for anyone...
      printf "$fmt\n" "$i "$i" $i"

    but that just triggers printf to format multiple lines, one per
    extra set of arguments.

    So we'd have to actually parse the format string, figure out how
    many "%" placeholders are there, and then feed it that many
    instances of the sequence number. The complexity isn't worth it.

Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
2 weeks agosubmodule: look up remotes by URL first
Jacob Keller [Mon, 23 Jun 2025 23:11:35 +0000 (16:11 -0700)] 
submodule: look up remotes by URL first

The get_default_remote_submodule() function performs a lookup to find
the appropriate remote to use within a submodule. The function first
checks to see if it can find the remote for the current branch. If this
fails, it then checks to see if there is exactly one remote. It will use
this, before finally falling back to "origin" as the default.

If a user happens to rename their default remote from origin, either
manually or by setting something like clone.defaultRemoteName, this
fallback will not work.

In such cases, the submodule logic will try to use a non-existent
remote. This usually manifests as a failure to trigger the submodule
update.

The parent project already knows and stores the submodule URL in either
.gitmodules or its .git/config.

Add a new repo_remote_from_url() helper which will iterate over all the
remotes in a repository and return the first remote which has a matching
URL.

Refactor get_default_remote_submodule to find the submodule and get its
URL. If a valid URL exists, first try to obtain a remote using the new
repo_remote_from_url(). Fall back to the repo_default_remote()
otherwise.

The fallback logic is kept in case for some reason the user has manually
changed the URL within the submodule. Additionally, we still try to use
a remote rather than directly passing the URL in the
fetch_in_submodule() logic. This ensures that an update will properly
update the remote refs within the submodule as expected, rather than
just fetching into FETCH_HEAD.

Signed-off-by: Jacob Keller <jacob.keller@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
2 weeks agosubmodule: move get_default_remote_submodule()
Jacob Keller [Mon, 23 Jun 2025 23:11:34 +0000 (16:11 -0700)] 
submodule: move get_default_remote_submodule()

A future refactor got get_default_remote_submodule() is going to depend on
resolve_relative_url(). That function depends on get_default_remote().

Move get_default_remote_submodule() after resolve_relative_url() first
to make the additional functionality easier to review.

Signed-off-by: Jacob Keller <jacob.keller@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
2 weeks agosubmodule--helper: improve logic for fallback remote name
Jacob Keller [Mon, 23 Jun 2025 23:11:33 +0000 (16:11 -0700)] 
submodule--helper: improve logic for fallback remote name

The repo_get_default_remote() function in submodule--helper currently
tries to figure out the proper remote name to use for a submodule based
on a few factors.

First, it tries to find the remote for the currently checked out branch.
This works if the submodule is configured to checkout to a branch
instead of a detached HEAD state.

In the detached HEAD state, the code calls back to using "origin", on
the assumption that this is the default remote name. Some users may
change this, such as by setting clone.defaultRemoteName, or by changing
the remote name manually within the submodule repository.

As a first step to improving this situation, refactor to reuse the logic
from remotes_remote_for_branch(). This function uses the remote from the
branch if it has one. If it doesn't then it checks to see if there is
exactly one remote. It uses this remote first before attempting to fall
back to "origin".

To allow using this helper function, introduce a repo_default_remote()
helper to remote.c which takes a repository structure. This helper will
load the remote configuration and get the "HEAD" branch. Then it will
call remotes_remote_for_branch to find the default remote.

Replace calls of repo_get_default_remote() with the calls to this new
function. To maintain consistency with the existing callers, continue
copying the returned string with xstrdup.

This isn't a perfect solution for users who change remote names, but it
should help in cases where the remote name is changed but users haven't
added any additional remotes.

Signed-off-by: Jacob Keller <jacob.keller@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
2 weeks agoremote: remove the_repository from some functions
Jacob Keller [Mon, 23 Jun 2025 23:11:32 +0000 (16:11 -0700)] 
remote: remove the_repository from some functions

The remotes_remote_get_1 (and its caller, remotes_remote_get, have an
implicit dependency on the_repository due to calling
read_branches_file() and read_remotes_file(), both of which use
the_repository. The branch_get() function calls set_merge() which has an
implicit dependency on the_repository as well.

Because of this use of the_repository, the helper functions cannot be
used in code paths which operate on other repositories. A future
refactor of the submodule--helper will want to make use of some of these
functions.

Refactor to break the dependency by passing struct repository *repo
instead of struct remote_state *remote_state in a few places.

The public callers and many other helper functions still depend on
the_repository. A repo-aware function will be exposed in a following
change for git submodule--helper.

Signed-off-by: Jacob Keller <jacob.keller@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
2 weeks agodir: move starts_with_dot(_dot)_slash to dir.h
Jacob Keller [Mon, 23 Jun 2025 23:11:31 +0000 (16:11 -0700)] 
dir: move starts_with_dot(_dot)_slash to dir.h

Both submodule--helper.c and submodule-config.c have an implementation
of starts_with_dot_slash and starts_with_dot_dot_slash. The dir.h header
has starts_with_dot(_dot)_slash_native, which sets PATH_MATCH_NATIVE.

Move the helpers to dir.h as static inlines. I thought about renaming
them to postfix with _platform but that felt too long and ugly. On the
other hand it might be slightly confusing with _native.

This simplifies a submodule refactor which wants to use the helpers
earlier in the submodule--helper.c file.

Signed-off-by: Jacob Keller <jacob.keller@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
2 weeks agoremote: fix tear down of struct remote
Jacob Keller [Mon, 23 Jun 2025 23:11:30 +0000 (16:11 -0700)] 
remote: fix tear down of struct remote

The remote_clear() function failed to free the remote->push and
remote->fetch refspec fields.

This should be caught by the leak sanitizer. However, for callers which
use ``the_repository``, the values never go out of scope and the
sanitizer doesn't complain.

A future change is going to add a caller of read_config() for a
submodule repository structure, which would result in the leak sanitizer
complaining.

Fix remote_clear(), updating it to properly call refspec_clear() for
both the push and fetch members.

Signed-off-by: Jacob Keller <jacob.keller@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
2 weeks agoremote: remove branch->merge_name and fix branch_release()
Jacob Keller [Mon, 23 Jun 2025 23:11:29 +0000 (16:11 -0700)] 
remote: remove branch->merge_name and fix branch_release()

The branch structure has both branch->merge_name and branch->merge for
tracking the merge information. The former is allocated by add_merge()
and stores the names read from the configuration file. The latter is
allocated by set_merge() which is called by branch_get() when an
external caller requests a branch.

This leads to the confusing situation where branch->merge_nr tracks both
the size of branch->merge (once its allocated) and branch->merge_name.
The branch_release() function incorrectly assumes that branch->merge is
always set when branch->merge_nr is non-zero, and can potentially crash
if read_config() is called without branch_get() being called on every
branch.

In addition, branch_release() fails to free some of the memory
associated with the structure including:

 * Failure to free the refspec_item containers in branch->merge[i]
 * Failure to free the strings in branch->merge_name[i]
 * Failure to free the branch->merge_name parent array.

The set_merge() function sets branch->merge_nr to 0 when there is no
valid remote_name, to avoid external callers seeing a non-zero merge_nr
but a NULL merge array. This results in failure to release most of the
merge data as well.

These issues could be fixed directly, and indeed I initially proposed
such a change at [1] in the past. While this works, there was some
confusion during review because of the inconsistencies.

Instead, its time to clean up the situation properly. Remove
branch->merge_name entirely. Instead, allocate branch->merge earlier
within add_merge() instead of within set_merge(). Instead of having
set_merge() copy from merge_name[i] to merge[i]->src, just have
add_merge() directly initialize merge[i]->src.

Modify the add_merge() to call xstrdup() itself, instead of having
the caller of add_merge() do so. This makes it more obvious which code
owns the memory.

Update all callers which use branch->merge_name[i] to use
branch->merge[i]->src instead.

Add a merge_clear() function which properly releases all of the
merge-related memory, and which sets branch->merge_nr to zero. Use this
both in branch_release() and in set_merge(), fixing the leak when
set_merge() finds no valid remote_name.

Add a set_merge variable to the branch structure, which indicates
whether set_merge() has been called. This replaces the previous use of a
NULL check against the branch->merge array.

With these changes, the merge array is always allocated when merge_nr is
non-zero.

This use of refspec_item to store the names should be safe. External
callers should be using branch_get() to obtain a pointer to the branch,
which will call set_merge(), and the callers internal to remote.c
already handle the partially initialized refpsec_item structure safely.

This end result is cleaner, and avoids duplicating the merge names
twice.

Signed-off-by: Jacob Keller <jacob.keller@gmail.com>
Link: [1] https://lore.kernel.org/git/20250617-jk-submodule-helper-use-url-v2-1-04cbb003177d@gmail.com/
Signed-off-by: Junio C Hamano <gitster@pobox.com>
2 weeks agot7422: replace confusing printf with echo
Jeff King [Mon, 23 Jun 2025 10:55:42 +0000 (06:55 -0400)] 
t7422: replace confusing printf with echo

While looping over a counter "i", we do:

  printf "[submodule \"sm-$i\"]\npath = recursive-submodule-path-$i\n" "$i"

So we are passing "$i" as an argument to be filled in, but there is no
"%" placeholder in the format string, which is a bit confusing to read.

We could switch both instances of "$i" to "%d" (and pass $i twice). But
that makes the line even longer. Let's just keep interpolating the value
in the string, and drop the confusing extra "$i" argument.

And since we are not using any printf specifiers at all, it becomes
clear that we can swap it out for echo. We do use a "\n" in the middle
of the string, but breaking this into two separate echo statements
actually makes it easier to read.

Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
2 weeks agococci: matching (multiple) identifiers
Junio C Hamano [Wed, 18 Jun 2025 17:55:02 +0000 (10:55 -0700)] 
cocci: matching (multiple) identifiers

"make coccicheck" seems to work OK at GitHub CI using

    $ spatch --version
    spatch version 1.1.1 compiled with OCaml version 4.13.1
    OCaml scripting support: yes
    Python scripting support: yes
    Syntax of regular expressions: PCRE

but not with

    $ spatch --version
    spatch version 1.3 compiled with OCaml version 5.3.0
    OCaml scripting support: yes
    Python scripting support: yes
    Syntax of regular expressions: Str

Judging from https://ocaml.org/manual/5.3/api/Str.html, I suspect
that this probably is caused by the distinction between BRE vs PCRE.
As there is no reasonably clean way to write the multiple choice
matches portably between these two pattern languages, let's stop
using regexp_constraint and use compare_constraint instead when
listing the function names to exclude.

There are other uses of "!~" but they all want to match a single
simple token, that should work fine either with BRE or PCRE.

Signed-off-by: Junio C Hamano <gitster@pobox.com>
2 weeks agoimap-send: improve error messages with configuration hints
Jörg Thalheim [Fri, 20 Jun 2025 15:56:14 +0000 (17:56 +0200)] 
imap-send: improve error messages with configuration hints

Replace basic error messages with more helpful ones that guide users
on how to resolve configuration issues. When imap.host or imap.folder
are missing, provide the exact git config commands needed to fix the
problem, along with examples of typical values.

Use the advise() API to display hints in a multi-line format with
proper "hint:" prefixes for each line.

Signed-off-by: Jörg Thalheim <joerg@thalheim.io>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
2 weeks agoimap-send: fix confusing 'store' terminology in error message
Jörg Thalheim [Fri, 20 Jun 2025 15:56:13 +0000 (17:56 +0200)] 
imap-send: fix confusing 'store' terminology in error message

The error message 'no imap store specified' is misleading because
it refers to 'store' when the actual missing configuration is
'imap.folder'. Update the message to use the correct terminology
that matches the configuration variable name.

This reduces confusion for users who might otherwise look for
non-existent 'imap.store' configuration when they see this error.

Signed-off-by: Jörg Thalheim <joerg@thalheim.io>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
2 weeks agoMerge branch 'ag/imap-send-resurrection' into jt/imap-send-message-fix
Junio C Hamano [Fri, 20 Jun 2025 15:29:34 +0000 (08:29 -0700)] 
Merge branch 'ag/imap-send-resurrection' into jt/imap-send-message-fix

* ag/imap-send-resurrection:
  imap-send: fix minor mistakes in the logs
  imap-send: display the destination mailbox when sending a message
  imap-send: display port alongwith host when git credential is invoked
  imap-send: add ability to list the available folders
  imap-send: enable specifying the folder using the command line
  imap-send: add PLAIN authentication method to OpenSSL
  imap-send: add support for OAuth2.0 authentication
  imap-send: gracefully fail if CRAM-MD5 authentication is requested without OpenSSL
  imap-send: fix memory leak in case auth_cram_md5 fails
  imap-send: fix bug causing cfg->folder being set to NULL

2 weeks agoimap-send: fix minor mistakes in the logs
Aditya Garg [Fri, 20 Jun 2025 06:40:33 +0000 (12:10 +0530)] 
imap-send: fix minor mistakes in the logs

Some minor mistakes have been found in the logs. Most of them include
error messages starting with a capital letter, and ending with a period.
Abbreviations like "IMAP" and "OK" should also be in uppercase. Another
mistake was that the error message showing unknown authentication
mechanism used was displaying the host rather than the mechanism in the
logs. Fix them.

Signed-off-by: Aditya Garg <gargaditya08@live.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
2 weeks agoimap-send: display the destination mailbox when sending a message
Aditya Garg [Fri, 20 Jun 2025 06:40:32 +0000 (12:10 +0530)] 
imap-send: display the destination mailbox when sending a message

Whenever we sent a message using the `imap-send` command, it would
display a log showing the number of messages which are to be sent.
For example:

    sending 1 message
     100% (1/1) done

This had been made more informative by adding the name of the destination
folder as well:

    Sending 1 message to Drafts folder...
     100% (1/1) done

Signed-off-by: Aditya Garg <gargaditya08@live.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
2 weeks agoimap-send: display port alongwith host when git credential is invoked
Aditya Garg [Fri, 20 Jun 2025 06:40:31 +0000 (12:10 +0530)] 
imap-send: display port alongwith host when git credential is invoked

When requesting for passsword, git credential helper used to display
only the host name. For example:

    Password for 'imaps://gargaditya08%40live.com@outlook.office365.com':

Now, it will display the port along with the host name:

    Password for 'imaps://gargaditya08%40live.com@outlook.office365.com:993':

This has been done to make credential helpers more specific for ports.
Also, this behaviour will also mimic git send-email, which displays
the port along with the host name when requesting for a password.

Signed-off-by: Aditya Garg <gargaditya08@live.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
2 weeks agoimap-send: add ability to list the available folders
Aditya Garg [Fri, 20 Jun 2025 06:40:30 +0000 (12:10 +0530)] 
imap-send: add ability to list the available folders

Various IMAP servers have different ways to name common folders.
For example, the folder where all deleted messages are stored is often
named "[Gmail]/Trash" on Gmail servers, and "Deleted" on Outlook.
Similarly, the Drafts folder is simply named "Drafts" on Outlook, but
on Gmail it is named "[Gmail]/Drafts".

This commit adds a `--list` command to the `imap-send` tool that lists
the available folders on the IMAP server, allowing users to see
which folders are available and how they are named. A sample output
looks like this when run against a Gmail server:

    Fetching the list of available folders...
    * LIST (\HasNoChildren) "/" "INBOX"
    * LIST (\HasChildren \Noselect) "/" "[Gmail]"
    * LIST (\All \HasNoChildren) "/" "[Gmail]/All Mail"
    * LIST (\Drafts \HasNoChildren) "/" "[Gmail]/Drafts"
    * LIST (\HasNoChildren \Important) "/" "[Gmail]/Important"
    * LIST (\HasNoChildren \Sent) "/" "[Gmail]/Sent Mail"
    * LIST (\HasNoChildren \Junk) "/" "[Gmail]/Spam"
    * LIST (\Flagged \HasNoChildren) "/" "[Gmail]/Starred"
    * LIST (\HasNoChildren \Trash) "/" "[Gmail]/Trash"

For OpenSSL, this is achived by running the 'IMAP LIST' command and
parsing the response. This command is specified in RFC6154:
https://datatracker.ietf.org/doc/html/rfc6154#section-5.1

For libcurl, the example code published in the libcurl documentation
is used to implement this functionality:
https://curl.se/libcurl/c/imap-list.html

Signed-off-by: Aditya Garg <gargaditya08@live.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
2 weeks agoimap-send: enable specifying the folder using the command line
Aditya Garg [Fri, 20 Jun 2025 06:40:29 +0000 (12:10 +0530)] 
imap-send: enable specifying the folder using the command line

Some users may very often want to imap-send messages to a folder
other than the default set in the config. Add a command line
argument for the same.

While at it, fix minor mark-up inconsistencies in the existing
documentation text.

Signed-off-by: Aditya Garg <gargaditya08@live.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
2 weeks agoimap-send: add PLAIN authentication method to OpenSSL
Aditya Garg [Fri, 20 Jun 2025 06:40:28 +0000 (12:10 +0530)] 
imap-send: add PLAIN authentication method to OpenSSL

The current implementation for PLAIN in imap-send works just fine
if using curl, but if attempted to use for OpenSSL, it is treated
as an invalid mechanism. The default implementation for OpenSSL is
IMAP LOGIN command rather than AUTH PLAIN. Since AUTH PLAIN is
still used today by many email providers in form of app passwords,
lets add an implementation that can use AUTH PLAIN if specified.

Signed-off-by: Aditya Garg <gargaditya08@live.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
2 weeks agoimap-send: add support for OAuth2.0 authentication
Aditya Garg [Fri, 20 Jun 2025 06:40:27 +0000 (12:10 +0530)] 
imap-send: add support for OAuth2.0 authentication

OAuth2.0 is a new way of authentication supported by various email providers
these days. OAUTHBEARER and XOAUTH2 are the two most common mechanisms used
for OAuth2.0. OAUTHBEARER is described in RFC5801[1] and RFC7628[2], whereas
XOAUTH2 is Google's proprietary mechanism (See [3]).

[1]: https://datatracker.ietf.org/doc/html/rfc5801
[2]: https://datatracker.ietf.org/doc/html/rfc7628
[3]: https://developers.google.com/workspace/gmail/imap/xoauth2-protocol#initial_client_response

Signed-off-by: Aditya Garg <gargaditya08@live.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
2 weeks agoimap-send: gracefully fail if CRAM-MD5 authentication is requested without OpenSSL
Aditya Garg [Fri, 20 Jun 2025 06:40:26 +0000 (12:10 +0530)] 
imap-send: gracefully fail if CRAM-MD5 authentication is requested without OpenSSL

Unlike PLAIN, XOAUTH2 and OAUTHBEARER, CRAM-MD5 authentication is not
supported by libcurl and requires OpenSSL. If the user tries to use
CRAM-MD5 authentication without OpenSSL, the previous behaviour was to
attempt to authenticate and fail with a die(error). Handle this in a
better way by first checking if OpenSSL is available and then attempting
to authenticate. If OpenSSL is not available, print an error message and
exit gracefully.

Signed-off-by: Aditya Garg <gargaditya08@live.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
2 weeks agoimap-send: fix memory leak in case auth_cram_md5 fails
Aditya Garg [Fri, 20 Jun 2025 06:40:25 +0000 (12:10 +0530)] 
imap-send: fix memory leak in case auth_cram_md5 fails

This patch fixes a memory leak by running free(response) in case
auth_cram_md5 fails.

Signed-off-by: Aditya Garg <gargaditya08@live.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
2 weeks agoimap-send: fix bug causing cfg->folder being set to NULL
Aditya Garg [Fri, 20 Jun 2025 06:40:24 +0000 (12:10 +0530)] 
imap-send: fix bug causing cfg->folder being set to NULL

6d1f198f34 (imap-send: fix leaking memory in `imap_server_conf`, 2024-06-07)
resulted a change in static int git_imap_config which resulted in cfg->folder
being incorrectly set to NULL in case imap.user, imap.pass, imap.tunnel and
imap.authmethod were defined. Because of this, since Git 2.46.0,
git-imap-send is not usable at all. The bug seems to have been unnoticed for
a long time, likely due to better options like git-send-email.

Signed-off-by: Aditya Garg <gargaditya08@live.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
2 weeks agoThe second batch
Junio C Hamano [Wed, 18 Jun 2025 20:53:08 +0000 (13:53 -0700)] 
The second batch

Signed-off-by: Junio C Hamano <gitster@pobox.com>
2 weeks agoMerge branch 'rj/meson-tap-parse-fixup'
Junio C Hamano [Wed, 18 Jun 2025 20:53:36 +0000 (13:53 -0700)] 
Merge branch 'rj/meson-tap-parse-fixup'

An earlier test update incorrectly lost three prerequisites on
macOS, which has been corrected.

* rj/meson-tap-parse-fixup:
  test-lib: add missing prerequisites for Darwin

2 weeks agoMerge branch 'ly/submodule-update-failure-leakfix'
Junio C Hamano [Wed, 18 Jun 2025 20:53:36 +0000 (13:53 -0700)] 
Merge branch 'ly/submodule-update-failure-leakfix'

A memory leak on an error code path has been plugged.

* ly/submodule-update-failure-leakfix:
  builtin/submodule--helper: fix leak when remote_submodule_branch() failed

2 weeks agoMerge branch 'jm/bundle-uri-debug-output-to-fp'
Junio C Hamano [Wed, 18 Jun 2025 20:53:35 +0000 (13:53 -0700)] 
Merge branch 'jm/bundle-uri-debug-output-to-fp'

Code clean-up.

* jm/bundle-uri-debug-output-to-fp:
  bundle-uri: send debug output to given FILE * stream

2 weeks agoMerge branch 'bs/solaris-10-and-11'
Junio C Hamano [Wed, 18 Jun 2025 20:53:35 +0000 (13:53 -0700)] 
Merge branch 'bs/solaris-10-and-11'

Add settings for Solaris 10 & 11.

* bs/solaris-10-and-11:
  config.mak.uname: update settings for Solaris 10 and 11

2 weeks agoMerge branch 'jw/doc-txt-to-adoc-refs'
Junio C Hamano [Wed, 18 Jun 2025 20:53:34 +0000 (13:53 -0700)] 
Merge branch 'jw/doc-txt-to-adoc-refs'

Some leftover references to documentation source files that no
longer exist, due to recent ".txt" -> ".adoc" renaming, have been
corrected.

* jw/doc-txt-to-adoc-refs:
  doc: update references to renamed AsciiDoc files

2 weeks agoMerge branch 'ma/doc-diff-cc-headers'
Junio C Hamano [Wed, 18 Jun 2025 20:53:34 +0000 (13:53 -0700)] 
Merge branch 'ma/doc-diff-cc-headers'

Doc mark-up update.

* ma/doc-diff-cc-headers:
  diff-generate-patch.adoc: drop spurious backticks

2 weeks agoMerge branch 'ly/pack-bitmap-root-leakfix'
Junio C Hamano [Wed, 18 Jun 2025 20:53:34 +0000 (13:53 -0700)] 
Merge branch 'ly/pack-bitmap-root-leakfix'

Memleak fix on an error code path.

* ly/pack-bitmap-root-leakfix:
  pack-bitmap: remove checks before bitmap_free

2 weeks agoMerge branch 'ly/commit-buffer-reencode-leakfix'
Junio C Hamano [Wed, 18 Jun 2025 20:53:33 +0000 (13:53 -0700)] 
Merge branch 'ly/commit-buffer-reencode-leakfix'

Leakfix.

* ly/commit-buffer-reencode-leakfix:
  repo_logmsg_reencode: fix memory leak when use repo_logmsg_reencode ()

2 weeks agoMerge branch 'cf/guideline-documenting-config-vars'
Junio C Hamano [Wed, 18 Jun 2025 20:53:33 +0000 (13:53 -0700)] 
Merge branch 'cf/guideline-documenting-config-vars'

CodingGuidelines update.

* cf/guideline-documenting-config-vars:
  CodingGuidelines: document formatting of similar config variables.

2 weeks agoCodingGuidelines: document formatting of similar config variables.
Collin Funk [Tue, 3 Jun 2025 22:45:39 +0000 (15:45 -0700)] 
CodingGuidelines: document formatting of similar config variables.

Document that related `git config` variables should be placed
one-per-line instead of separated by commas.

Suggested-by: Junio C Hamano <gitster@pobox.com>
Signed-off-by: Collin Funk <collin.funk1@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
2 weeks agodiff-no-index: do not reference .d_type member of struct dirent
Junio C Hamano [Wed, 18 Jun 2025 20:04:12 +0000 (13:04 -0700)] 
diff-no-index: do not reference .d_type member of struct dirent

Some platforms like AIX lack .d_type member in "struct dirent"; use
the DTYPE(e) macro instead of a direct reference to e->d_type and
when it yields DT_UNKNOWN, find the real type with get_dtype().

Signed-off-by: Junio C Hamano <gitster@pobox.com>
2 weeks agoStart 2.51 cycle, the first batch
Junio C Hamano [Tue, 17 Jun 2025 17:34:53 +0000 (10:34 -0700)] 
Start 2.51 cycle, the first batch

Signed-off-by: Junio C Hamano <gitster@pobox.com>
2 weeks agoMerge branch 'ps/meson-tap-parse'
Junio C Hamano [Tue, 17 Jun 2025 17:44:42 +0000 (10:44 -0700)] 
Merge branch 'ps/meson-tap-parse'

Meson-based build/test framework now understands TAP output
generated by our tests.

* ps/meson-tap-parse:
  meson: parse TAP output generated by our tests
  meson: introduce kwargs variable for tests
  test-lib: fail on unexpectedly passing tests
  t7815: fix unexpectedly passing test on macOS
  t/test-lib: fix TAP format for BASH_XTRACEFD warning
  t/test-lib: don't print shell traces to stdout
  t983*: use prereq to check for Python-specific git-p4(1) support
  t9822: use prereq to check for ISO-8859-1 support
  t: silence output from `test_create_repo()`
  t: stop announcing prereqs

2 weeks agoMerge branch 'jk/diff-no-index-with-pathspec'
Junio C Hamano [Tue, 17 Jun 2025 17:44:41 +0000 (10:44 -0700)] 
Merge branch 'jk/diff-no-index-with-pathspec'

"git diff --no-index dirA dirB" can limit the comparison with
pathspec at the end of the command line, just like normal "git
diff".

* jk/diff-no-index-with-pathspec:
  diff --no-index: support limiting by pathspec
  pathspec: add flag to indicate operation without repository
  pathspec: add match_leading_pathspec variant

2 weeks agoMerge branch 'ly/fetch-pack-leakfix'
Junio C Hamano [Tue, 17 Jun 2025 17:44:41 +0000 (10:44 -0700)] 
Merge branch 'ly/fetch-pack-leakfix'

A memory-leak in an error code path has been plugged.

* ly/fetch-pack-leakfix:
  builtin/fetch-pack: cleanup before return error

2 weeks agoMerge branch 'ly/commit-graph-graph-write-leakfix'
Junio C Hamano [Tue, 17 Jun 2025 17:44:41 +0000 (10:44 -0700)] 
Merge branch 'ly/commit-graph-graph-write-leakfix'

A memory-leak in an error code path has been plugged.

* ly/commit-graph-graph-write-leakfix:
  commit-graph: fix start_delayed_progress() leak

2 weeks agoMerge branch 'ly/do-not-localize-bug-messages'
Junio C Hamano [Tue, 17 Jun 2025 17:44:40 +0000 (10:44 -0700)] 
Merge branch 'ly/do-not-localize-bug-messages'

Code clean-up.

* ly/do-not-localize-bug-messages:
  BUG(): remove leading underscore of the format string

2 weeks agoMerge branch 'ly/sequencer-update-squash-is-fixup-only'
Junio C Hamano [Tue, 17 Jun 2025 17:44:40 +0000 (10:44 -0700)] 
Merge branch 'ly/sequencer-update-squash-is-fixup-only'

Code clean-up.

* ly/sequencer-update-squash-is-fixup-only:
  sequencer: replace error() with BUG() in update_squash_messages ()

2 weeks agoMerge branch 'vd/cat-file-objectmode-update'
Junio C Hamano [Tue, 17 Jun 2025 17:44:39 +0000 (10:44 -0700)] 
Merge branch 'vd/cat-file-objectmode-update'

"git cat-file --batch" learns to understand %(objectmode) atom to
allow the caller to tell missing objects (due to repository
corruption) and submodules (whose commit objects are OK to be
missing) apart.

* vd/cat-file-objectmode-update:
  cat-file.c: add batch handling for submodules
  cat-file: add %(objectmode) atom
  t1006: update 'run_tests' to test generic object specifiers

2 weeks agoMerge branch 'ag/send-email-docs'
Junio C Hamano [Tue, 17 Jun 2025 17:44:39 +0000 (10:44 -0700)] 
Merge branch 'ag/send-email-docs'

Documentation for "git send-email" has been updated with a bit more
credential helper and OAuth information.

* ag/send-email-docs:
  docs: make the purpose of using app password for Gmail more clear in send-email
  docs: remove credential helper links for emails from gitcredentials
  docs: improve formatting in git-send-email documentation
  docs: add credential helper for yahoo and link Google's sendgmail tool

2 weeks agoMerge branch 'rc/userdiff-r'
Junio C Hamano [Tue, 17 Jun 2025 17:44:38 +0000 (10:44 -0700)] 
Merge branch 'rc/userdiff-r'

Userdiff patterns for the R language.

* rc/userdiff-r:
  userdiff: add support for R programming language

2 weeks agoMerge branch 'ds/path-walk-2'
Junio C Hamano [Tue, 17 Jun 2025 17:44:38 +0000 (10:44 -0700)] 
Merge branch 'ds/path-walk-2'

"git pack-objects" learns to find delta bases from blobs at the
same path, using the --path-walk API.

* ds/path-walk-2:
  pack-objects: allow --shallow and --path-walk
  path-walk: add new 'edge_aggressive' option
  pack-objects: thread the path-based compression
  pack-objects: refactor path-walk delta phase
  scalar: enable path-walk during push via config
  pack-objects: enable --path-walk via config
  repack: add --path-walk option
  t5538: add tests to confirm deltas in shallow pushes
  pack-objects: introduce GIT_TEST_PACK_PATH_WALK
  p5313: add performance tests for --path-walk
  pack-objects: update usage to match docs
  pack-objects: add --path-walk option
  pack-objects: extract should_attempt_deltas()

2 weeks agoMerge branch 'lo/my-first-ow-doc-update'
Junio C Hamano [Tue, 17 Jun 2025 17:44:37 +0000 (10:44 -0700)] 
Merge branch 'lo/my-first-ow-doc-update'

Doc update to the more recent world order.

* lo/my-first-ow-doc-update:
  MyFirstContribution: add walken.c to meson.build
  MyFirstContribution: use struct repository in examples

2 weeks agot2400: replace 'test -[efd]' with 'test_path_is_*'
Rodrigo Michelassi [Tue, 17 Jun 2025 00:29:39 +0000 (21:29 -0300)] 
t2400: replace 'test -[efd]' with 'test_path_is_*'

'test_path_is_file', 'test_path_is_dir' and 'test_file_is_missing'
are test helpers used in Git's development, that emit useful
diagnostic information when they detect a failing condition, while
test -[efd] does not.

Replace the basic shell commands 'test -f', 'test -d' and 'test -e',
with these test helpers.

Co-authored-by: Isabella Caselli <icaselli@usp.br>
Signed-off-by: Isabella Caselli <icaselli@usp.br>
Signed-off-by: Rodrigo Michelassi <rodmichelassi@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
3 weeks agogit.c: remove the_repository dependence in run_builtin()
Lidong Yan [Mon, 16 Jun 2025 06:22:33 +0000 (14:22 +0800)] 
git.c: remove the_repository dependence in run_builtin()

run_builtin() takes a repo parameter, so the use of the_repository
is no longer necessary. Removed the usage of the_repository.

Signed-off-by: Lidong Yan <502024330056@smail.nju.edu.cn>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
3 weeks agoGit 2.50 maint v2.50.0
Junio C Hamano [Mon, 16 Jun 2025 04:17:21 +0000 (21:17 -0700)] 
Git 2.50

Signed-off-by: Junio C Hamano <gitster@pobox.com>
3 weeks agomailinfo.c: fix memory leak in function handle_content_type()
Jinyao Guo [Fri, 13 Jun 2025 19:26:45 +0000 (19:26 +0000)] 
mailinfo.c: fix memory leak in function handle_content_type()

The function handle_content_type allocates memory for boundary
using xmalloc(sizeof(struct strbuf)). If (++mi->content_top >=
&mi->content[MAX_BOUNDARIES]) is true, the function returns
without freeing boundary.

Signed-off-by: Jinyao Guo <guo846@purdue.edu>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
3 weeks agoHopefully final bits before 2.50
Junio C Hamano [Fri, 13 Jun 2025 20:28:57 +0000 (13:28 -0700)] 
Hopefully final bits before 2.50

Signed-off-by: Junio C Hamano <gitster@pobox.com>
3 weeks agoMerge branch 'js/github-ci-win-coverity-fix'
Junio C Hamano [Fri, 13 Jun 2025 20:29:14 +0000 (13:29 -0700)] 
Merge branch 'js/github-ci-win-coverity-fix'

Fixes for GitHub Actions Coverity job.

* js/github-ci-win-coverity-fix:
  ci(coverity): output the build log upon error
  ci(coverity): fix building on Windows

3 weeks agoMerge branch 'ss/revert-builtin-bswap-stuff'
Junio C Hamano [Fri, 13 Jun 2025 20:29:14 +0000 (13:29 -0700)] 
Merge branch 'ss/revert-builtin-bswap-stuff'

Revert a botched bswap.h change that broke ntohll() functions on
big-endian systems with __builtin_bswap32/64().

* ss/revert-builtin-bswap-stuff:
  Revert "bswap.h: add support for built-in bswap functions"

3 weeks agoMerge branch 'jc/sed-build-fixes'
Junio C Hamano [Fri, 13 Jun 2025 20:29:14 +0000 (13:29 -0700)] 
Merge branch 'jc/sed-build-fixes'

Build fix.

* jc/sed-build-fixes:
  build: sed portability fixes

3 weeks agomerge/pull: extend merge.stat configuration variable to cover --compact-summary
Junio C Hamano [Thu, 12 Jun 2025 22:25:37 +0000 (15:25 -0700)] 
merge/pull: extend merge.stat configuration variable to cover --compact-summary

Existing `merge.stat` configuration variable is a Boolean that
defaults to `true` to control `git merge --[no-]stat` behaviour.

Extend it to be "Boolean or text", that takes false, true, or
"compact", with the last one triggering the --compact-summary option
introduced earlier.  Any other values are taken as the same as true,
instead of signaling an error---it is not a grave enough offence to
stop their merge.

Signed-off-by: Junio C Hamano <gitster@pobox.com>
3 weeks agomerge/pull: add the "--compact-summary" option
Junio C Hamano [Thu, 12 Jun 2025 22:25:36 +0000 (15:25 -0700)] 
merge/pull: add the "--compact-summary" option

"git merge" and "git pull" shows "git diff --stat --summary @{1}"
when they finish to indicate the extent of the changes brought into
the history by default.  While it gives a good overview, it becomes
annoying when there are very many created or deleted paths.

Introduce "--compact-summary" option to these two commands that
tells it to instead show "git diff --compact-summary @{1}", which
gives the same information in a lot more compact form in such a
situation.

Signed-off-by: Junio C Hamano <gitster@pobox.com>
3 weeks agocat-file: fix mailmap application for different author and committer
Siddharth Asthana [Fri, 13 Jun 2025 11:57:17 +0000 (17:27 +0530)] 
cat-file: fix mailmap application for different author and committer

The git cat-file command with --mailmap option fails to apply mailmap
transformations to the committer field when the author and committer
identities are different. This occurs due to a missing newline handling
in apply_mailmap_to_header() after processing each identity line.

When rewrite_ident_line() processes an identity, it stops at the end
of the identity data (e.g., "Author Name <email> timestamp"), but
doesn't account for the trailing newline. The current code adds the
identity length to buf_offset but fails to advance past the newline
character. This causes the next iteration to start parsing from the
newline instead of the beginning of the next header line, making it
impossible to match subsequent headers like "committer".

Additionally, rewrite_ident_line() may reallocate the buffer during
its operation. Any code using pointers into the old buffer would be
using invalid memory after such a reallocation.

This bug was introduced in e9c1b0e3 (revision: improve
commit_rewrite_person(), 2022-07-19) when the much simpler version of
commit_rewrite_person() that worked on one "person header" at a time
was rewritten to use the current apply_mailmap_to_header() function.
The original implementation processed author and committer separately,
but the rewrite introduced this loop-based approach that failed to
properly handle the transition between identity lines.

Let's fix this by addressing both issues:
1. After processing an identity line, we now check if we're at a
   newline and advance past it, ensuring the next header line is
   parsed correctly.
2. We recompute the buffer position after rewrite_ident_line() to
   handle potential buffer reallocation.

This ensures that all identity headers in commit and tag objects are
consistently processed regardless of whether the author and committer
are the same person.

Reported-by: Vasilii Iakliushin <viakliushin@gitlab.com>
Reviewed-by: Christian Couder <christian.couder@gmail.com>
Signed-off-by: Siddharth Asthana <siddharthasthana31@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
3 weeks agoMerge tag 'l10n-2.50.0-v2' of https://github.com/git-l10n/git-po
Junio C Hamano [Fri, 13 Jun 2025 00:31:42 +0000 (17:31 -0700)] 
Merge tag 'l10n-2.50.0-v2' of https://github.com/git-l10n/git-po

l10n-2.50.0-v2

* tag 'l10n-2.50.0-v2' of https://github.com/git-l10n/git-po:
  l10n: zh_TW: update translation for Git 2.50

3 weeks agoMerge branch 'kh/maintenance-missing-tasks-docfix'
Junio C Hamano [Thu, 12 Jun 2025 21:19:10 +0000 (14:19 -0700)] 
Merge branch 'kh/maintenance-missing-tasks-docfix'

Doc mark-up fix for a topic that has graduated to 'master'.

* kh/maintenance-missing-tasks-docfix:
  doc: maintenance: fix linkgit syntax

3 weeks agobuild: sed portability fixes
Junio C Hamano [Thu, 12 Jun 2025 17:04:58 +0000 (10:04 -0700)] 
build: sed portability fixes

Recently generating the version-def.h file and the config-list.h
file have been updated, which broke versions of "sed" that do not
want to be fed a file that ends with an incomplete line, and/or that
do not understand the more recent "-E" option to use extended
regular expression.

Fix them in response to a build-failure reported on Solaris boxes.

cf. https://lore.kernel.org/git/09f954b8-d9c3-418f-ad4b-9cb9b063f4ae@comstyle.com/

Reported-by: Brad Smith <brad@comstyle.com>
Reviewed-by: Collin Funk <collin.funk1@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
3 weeks agoMerge tag 'l10n-2.50.0-rnd1' of https://github.com/git-l10n/git-po
Junio C Hamano [Thu, 12 Jun 2025 20:35:08 +0000 (13:35 -0700)] 
Merge tag 'l10n-2.50.0-rnd1' of https://github.com/git-l10n/git-po

l10n-2.50.0-rnd1

* tag 'l10n-2.50.0-rnd1' of https://github.com/git-l10n/git-po:
  l10n: zh_CN: updated translation for 2.50
  l10n: Update German translation
  l10n: uk: add 2.50 translation
  l10n: po-id for 2.50
  l10n: bg.po: Updated Bulgarian translation (5819t)
  l10n: tr: Update Turkish translations for 2.50
  l10n: fr: v2.50 round 1
  l10n: Add full Irish translation (ga.po)