On Wed, Aug 29, 2018 at 01:46:23PM -0700, Jonathan Nieder wrote: > > Can you elaborate on that? > > What I'm saying is, regardless of the syntax used, as a user I *need* > a way to look up $some_hash as a sha256-name, with zero risk of Git > trying to outsmart me and treating $some_hash as a sha1-name instead. > > Any design without that capability is a non-starter. Right, this is IMHO the only thing that makes sense for ^{hash} to do: it disambiguates the sha1 that you just gave it. Nothing more, nothing less. > > I.e. if I'm using this in a script I'd need: > > > > if x = git rev-parse $some_hash^{sha256}^{commit} > > hash = x > > elsif x = git rev-parse $some_hash^{sha1}^{commit} > > hash = x > > endif > > Why wouldn't you use "git rev-parse $some_hash^{commit}" instead? Yes, the sane rules seem to me to be: # try any available hash for $some_hash git rev-parse $some_hash # look _only_ for $some_hash as a sha1 git rev-parse $some_hash^{sha1} # ditto for sha256 git rev-parse $some_hash^{sha256} # ditto, but then peel the result to a commit git rev-parse $some_hash^{sha256}^{commit} # this is nonsense, and should produce an error git rev-parse $some_hash^{commit}^{sha256} For convenience of scripts, we may also want: git rev-parse --input-hash=sha256 $some_hash to pretend as if "^{sha256}" was appended to each command-line hash we try to resolve (e.g., consider a case where a script is feeding 0 or more hashes). -Peff