Re: [PATCH 07/16] mktree: use read_index_info to read stdin lines
- From
Junio C Hamano <gitster@pobox.com>
- Date
- Jun 12, 2024, 18:35 UTC
- Message-ID
- <xmqqle3aovpq.fsf@gitster.g>
- In-Reply-To
- <ZmltEti7TRpaiCD-@tanuki>
Patrick Steinhardt <ps@pks.im> writes:
Show 5 quoted lines
> It makes perfect sense to not single out git-ls-tree(1) anymore. But I > think we should help the reader a bit by continuing to point out which > commands can be used as input here. That can be either here in the > description, further down in the new "INPUT FORMAT" section, or in both > places.
Here is a way to do so, which I alluded to earlier. The original text is too specific to "update-index" in that it talked about "stuffing them into the index", which does not apply in the context of "mktree".
And then it made me realize that "ls-files -s" output has the stage information, which of course is needed for "update-index" to be able to recreate the index state from a textual dump, but "mktree" should reject if given a higher stage entry.
It seems that the code after applying all these 16 patches does not diagnose it as an error if you feed a non-zero stage. The callback starts like so.
static int mktree_line(unsigned int mode, struct object_id *oid,
enum object_type obj_type, int stage UNUSED,
const char *path, void *cbdata)
{
I _think_ it should be made an error if the input has non-zero
stage, which would be a sign that it was taken from "ls-files -s"
(or even "ls-files -u"), out of which "git write-tree" will REFUSE
to create a tree object. "mktree" should behave the same way, no?In any case, here is the documentation split/refactor.
Documentation/git-mktree.txt | 4 +++- Documentation/git-update-index.txt | 14 +------------- Documentation/index-info-formats.txt | 13 +++++++++++++ 3 files changed, 17 insertions(+), 14 deletions(-)
diff --git c/Documentation/git-mktree.txt w/Documentation/git-mktree.txt index a660438c67..fefaa83d29 100644 --- c/Documentation/git-mktree.txt +++ w/Documentation/git-mktree.txt @@ -48,7 +48,9 @@ OPTIONS INPUT FORMAT ------------ Tree entries may be specified in any of the formats compatible with the -`--index-info` option to linkgit:git-update-index[1]. +`--index-info` option to linkgit:git-update-index[1]. That is: + +include::index-info-formats.txt[] Entries may use full pathnames containing directory separators to specify entries nested within one or more directories. These entries are inserted into diff --git c/Documentation/git-update-index.txt w/Documentation/git-update-index.txt index 7128aed540..2287a5d4be 100644 --- c/Documentation/git-update-index.txt +++ w/Documentation/git-update-index.txt @@ -280,19 +280,7 @@ USING --INDEX-INFO multiple entry definitions from the standard input, and designed specifically for scripts. It can take inputs of three formats: - . mode SP type SP sha1 TAB path -+ -This format is to stuff `git ls-tree` output into the index. - - . mode SP sha1 SP stage TAB path -+ -This format is to put higher order stages into the -index file and matches 'git ls-files --stage' output. - - . mode SP sha1 TAB path -+ -This format is no longer produced by any Git command, but is -and will continue to be supported by `update-index --index-info`. +include::index-info-formats.txt[] To place a higher stage entry to the index, the path should first be removed by feeding a mode=0 entry for the path, and diff --git c/Documentation/index-info-formats.txt w/Documentation/index-info-formats.txt new file mode 100644 index 0000000000..037ebd2432 --- /dev/null +++ w/Documentation/index-info-formats.txt @@ -0,0 +1,13 @@ + . mode SP type SP sha1 TAB path ++ +This format is to use `git ls-tree` output. + + . mode SP sha1 SP stage TAB path ++ +This format allows higher order stages to appear and +matches 'git ls-files --stage' output. + + . mode SP sha1 TAB path ++ +This format is no longer produced by any Git command, but is +and will continue to be supported.