Stefan Beller <sbeller@xxxxxxxxxx> writes: >> + if (!lstat(list_item->name, &st) && !ce_match_stat(list_item, &st, 0)) { >> + print_status(info, ' ', list_item->name, sub_sha1, displaypath); > > The question from the last round still stands > https://public-inbox.org/git/CAGZ79kb18z5zc9iu3Vv5aVZWJmoZzmwbMVpy89VC-t-ei2M+bw@xxxxxxxxxxxxxx/ > > I am not an expert in the diff area and wonder how > the cmd_diff_files functionality is achieved with just a stat call > and then comparing it to ce_match_stat. 'Using "dirty" ignores > all changes to the work tree of submodules, only changes to the > commits stored in the superproject are shown.' So I'd have > expected ce->oid to be compared (is there an index entry differing, > i.e. more than one stage?) ce_match_stat() calls into ce_compare_gitlink() for a 160000 entry, which would resolve HEAD ref there and compares ce->oid with it. But as you said, this is probably insufficient to emulate the original. Shouldn't it call into run_diff_files(), which is the in-core way to run the equivalent of "diff-files"?