Btw, I knew I had wanted this in the past, but I had forgotten why. I now
remembered.
The thing is, sometimes you want an expression for "all the parents of X".
We don't have that, and again, the current internal implementation of
sha1_name.c makes it essentially impossible to do within that interface
(ie you can do it on *top* of that interface in revision.c, but it cannot
be a general SHA1 expression).
So wouldn't it be nice to have a "commit^*" expression to go with
"commit^" and "commit^2" etc? One that would name all the parents. It's
useful, for example, for saying that you still want to see that commit,
but not any of its parents:
git log commit^*..
could basically work to show that commit (and all subsequent commits), but
not the commits leading up to it. Right now, you can't easily say that in
the git "sha1 expression algebra".
There are some other cases where you'd like to have things expand to more
than one commit. We currently do those with special flags, like --all, but
in many ways it would be really nice to be able to do SHA1 operations on
them. If we were to make the SHA1 arithmetic able to handle multiple
SHA1's (instead of just one), I could see us being able to do things like
git diff {master,pu}:Makefile
as a way of saying
git diff master:Makefile pu:Makefile
which already works - simply because we could make the ":name" be able to
operate on multiple commit SHA1's and turn them into multiple blob (or
tree) SHA1's.
(The above may not sound very useful, but
git diff {ORIG_HEAD...MERGE_HEAD}:file
would essentially expand to "base version of file", ORIG_HEAD:file and
MERGE_HEAD:file, and we could fairly easily teach diff to do a nice
three-way diff for things like this! So it does have potential to be a
reasonably powerful model)
Linus
-
To unsubscribe from this list: send the line "unsubscribe git" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html