Re: [RFC PATCH] checkout: Force matching mtime between files
From: Duy Nguyen <hidden>
Date: 2018-04-30 15:10:41
On Mon, Apr 30, 2018 at 1:56 AM, Junio C Hamano [off-list ref] wrote:
Duy Nguyen [off-list ref] writes:quoted
Target revision should be available in the index. But this gives me an idea to another thing that bugs me: sending the list to the hook means I have to deal with separator (\n or NUL?) or escaping. This mentions of index makes me take a different direction. I could produce a small index that contains just what is modified, then you can retrieve whatever info you want with `git ls-files` or even `git show` after pointing $GIT_INDEX_FILE to it.That's somewhere in between a tail wagging the dog and a hammer looking like a solution even when you have a screw. By passing a temporary index, you may be able to claim that you are feeding the necessary information without corruption and in a readable and native format of Git, and make it up to the reader to grab the paths out of it, but (1) the contents, and probably the cached stat information, in that temporary index is duplicated and wasted; you know from the time you design this thing that all you want to convey is a list of paths.
Yep, I was not happy about this. Which I why I moved to update the hook calling convention to pass pathspec to the hook instead.
(2) it is totally unclear who is responsible for cleaning the
temporary file up.The one that creates it deletes it, which is git.
(3) the recipient must walk and carefully grab the path, certainly
has to "deal with separator (\n or NUL?) or escaping" anyway,
especially if the reason you use a temporary index is because
"they can use ls-files on it". They need to read from ls-files
anyway, so that is no better than feeding ls-files compatible
input from the standard input of the hook script.Err "ls-files compatible input" or "ls-files compatible _output_"? If by input you mean the pathspec we give to ls-files, I agree. If it's standard ls-files --stage output , letting the hook call ls-files lets it select the output format it wants (including the potential json output in the future), which is more flexible.
no?
-- Duy