Re: [PATCH] last-modified: support sparse checkouts
- From
Toon Claes <toon@iotcl.com>
- Date
- Dec 3, 2025, 11:11 UTC
- Message-ID
- <87qztbx1jd.fsf@iotcl.com>
- In-Reply-To
- <75f862a5-2663-4211-b96c-d2c5d1c6f91e@gmail.com>
Derrick Stolee <stolee@gmail.com> writes:
Show 21 quoted lines
> On 11/29/2025 8:43 AM, Johannes Schindelin via GitGitGadget wrote: >> From: Johannes Schindelin <johannes.schindelin@gmx.de> >> >> In a sparse checkout, a user might want to run `last-modified` on a >> directory outside the worktree. >> >> And even in non-sparse checkouts, a user might need to run that command >> on a directory that does not exist in the worktree. >> >> These use cases should be supported via the `--` separator between >> revision and file arguments, which is even advertised in the >> documentation. This patch fixes a tiny bug that prevents that from >> working. > >> argc = parse_options(argc, argv, prefix, last_modified_options, >> last_modified_usage, >> - PARSE_OPT_KEEP_ARGV0 | PARSE_OPT_KEEP_UNKNOWN_OPT); >> + PARSE_OPT_KEEP_ARGV0 | PARSE_OPT_KEEP_UNKNOWN_OPT | >> + PARSE_OPT_KEEP_DASHDASH); > > I'm intrigued that this is the only fix that was required.
I like it!
Show 8 quoted lines
>> +test_expect_success 'last-modified in sparse checkout' ' >> + test_when_finished "git sparse-checkout disable" && >> + git sparse-checkout set b && >> + check_last_modified -- a <<-\EOF > > Would we expect this to work without the '--'? Should it > fail for a directory that exists at HEAD but is outside of > the sparse-checkout?
I don't think we need to complicate things that much. Arguments after the '--' are handled as pathspecs. If no paths match that pathspec, the output is simply nothing.
Just to demonstrate:
On 'master':
$ git last-modified a
fatal: ambiguous argument 'a': unknown revision or path not in the working tree.
Use '--' to separate paths from revisions, like this:
'git <command> [<revision>...] -- [<file>...]' $ git last-modified -- a
fatal: ambiguous argument 'a': unknown revision or path not in the working tree.
Use '--' to separate paths from revisions, like this:
'git <command> [<revision>...] -- [<file>...]'With this patch applied:
$ git last-modified a
fatal: ambiguous argument 'a': unknown revision or path not in the working tree.
Use '--' to separate paths from revisions, like this:
'git <command> [<revision>...] -- [<file>...]'$ git last-modified -- a
$ echo $?
0I agree this behavior is better. Thanks for this fix. I approve.
-- Cheers, Toon