Hello, I was trying to figure out why running git diff HEAD^:RelNotes RelNotes gives the expected output (on maint it tells me that the stable version changed from 1.7.8.3 to 1.7.8.4) but swapping the arguments doesn't. git diff RelNotes HEAD^:RelNotes doesn't show the opposite patch but tells me that RelNotes doesn't exist in HEAD^ which is clearly a lie (it sounds like it's a misunderstanding on git's part, but it's certainly not the truth). In both cases, verify_filename gets called and tries to stat both HEAD^:RelNotes and RelNotes. In the "bad" (latter) case, after it fails to find a file named "HEAD^:RelNotes" it ends up calling diagnose_invalid_sha1_path which is not correct according to the command just before the function /* Must be called only when object_name:filename doesn't exist. */ It looks like get_sha1_with_context_1 gets confused because we pass it a filename which looks like object_name:filename even though we earlier parsed it simply as a filename which happens to have a colon inside it. Another issue is that I'm not sure that the error message should even get shown. The documentation tells me that I should be able to compare two random blobs, though this mode doesn't seem to work if the first argument is a file. I realise that a file isn't a blob, but since specifying the arguments the other way around (blob, file) does work, it looks to me like it should as well. cmn
Attachment:
signature.asc
Description: Digital signature