Jeff King <peff@xxxxxxxx> 于2021年6月3日周四 上午4:01写道: > > I don't see any inaccuracies there. I do think we could explain it a bit > more succinctly. I'll give my attempt, and then you can pick and choose > which parts to include between ours. :) > Yes, you wrote it more concisely. I don't need to write out the details of those variables. I just need to tell the reader the introduction of skip_object_info will break the assumption of --batch that we have found the object type. > Subject: cat-file: handle trivial --batch format with --batch-all-objects > > The --batch code to print an object assumes we found out the type of > the object from calling oid_object_info_extended(). This is true for > the default format, but even in a custom format, we manually modify > the object_info struct to ask for the type. > > This assumption was broken by 845de33a5b (cat-file: avoid noop calls > to sha1_object_info_extended, 2016-05-18). That commit skips the call > to oid_object_info_extended() entirely when --batch-all-objects is in > use, and the custom format does not include any placeholders that > require calling it. > > This results in an error when we try to confirm that the type didn't > change: > > $ git cat-file --batch=batman --batch-all-objects > batman > fatal: object 000023961a0c02d6e21dc51ea3484ff71abf1c74 changed type!? > > and also has other subtle effects (e.g., we'd fail to stream a blob, > since we don't realize it's a blog in the first place). > s/blog/blob/ > We can fix this by flipping the order of the setup. The check for "do > we need to get the object info" must come _after_ we've decided > whether we need to look up the type. > > -Peff Thanks. -- ZheNing Hu