From: Junio C Hamano Date: Sat, 30 May 2026 23:47:07 GMT Subject: Re: [PATCH] describe: fix --exclude, --match with --contains and --all Message-ID: In-Reply-To: <20260528232950.187002-2-jacob.e.keller@intel.com> Jacob Keller writes: > From: Jacob Keller > > git describe --contains acts as a wrapper around git name-rev. When > operating with --contains and --all, the --match and --exclude patterns > are not properly forwarded to name-rev as --exclude and --refs options. > > This results in the command silently discarding match and exclude > requests from the user when operating in --all mode. > > We could check and die() if the user provides --contains, --all, and > --match/--exclude. However, its also straight forward to just pass the > filters down to git name-rev. > > Notice that the documentation for --match and --exclude mention the > --all mode. It explains that they operate on refs with the prefix > refs/tags, and additionally refs/heads and refs/remotes when using > --all. > > Fix the describe logic to pass the patterns down with the appropriate > prefixes when --all is provided. This fixes the support to match the > documented behavior. > > Add tests to check that this works as expected. > > Reported-by: Tuomas Ahola > Signed-off-by: Jacob Keller > --- > > I was looking into reviving the patch that just added a simple die() and > realized that its actually pretty straight forward to just fix the support > instead. I'm open to either route, if we think this support isn't > necessary... I'm not sure if there are any gotchas or other issues with how > I implemented this. It is curious that this fails in some but not all CI jobs, and even more curious that these failures look the same. e.g., https://github.com/git/git/actions/runs/26671595367/job/78615760984#step:4:1984 +++ diff -u expect actual --- expect 2026-05-30 02:21:23 +++ actual 2026-05-30 02:21:23 @@ -1 +1 @@ -branch_A +remotes/origin/remote_branch_A error: last command exited with $?=1 not ok 70 - describe --contains --all --exclude # # echo "branch_A" >expect && # tagged_commit=$(git rev-parse "refs/tags/A^0") && # git describe --contains --all --exclude="A" --exclude="c" --exclude="test*" $tagged_commit >actual && # test_cmp expect actual Rings any bell?