Jeff King <peff@xxxxxxxx> writes: > On Thu, Sep 08, 2011 at 03:19:54PM -0700, Junio C Hamano wrote: > >> My take on it is somewhat different. The only thing in the end result we >> want to see is that the pushed commits are annotated with GPG signatures >> in the notes tree, and there is no reason for us to cast in stone that >> there has to be any significance in the commit history of the notes tree. > > Hmm. Is order really irrelevant? If you push a commit to master, moving > it from X to Y, then push-rewind it back to X, then push a new commit Z, > how do I cryptographically determine the correct final state of master? You don't, as the certs are more about "up to this point, the pusher trusts the history". I should have made it clearer in the cover letter to the rerolled series, but the push certificate does not record the old value of the ref in the reroll, because the point of signed-push is not about signing the information that is equivalent to the server side reflog. You would have a signed push record that pushed Y, X and Z, and commit Z sitting at the tip of 'master'. A few days may pass and then you run $ git log --show-notes=refs/notes/push-signature master to find that the first commit with a push signature by somebody whose judgement you trust is Z. Then you would need to inspect only commits that are not ancestors of Z even if you suspect that some commits near the tip of 'master' at the server side were tampered with. You may at the same time find commits signed by the trusted people that are meant for the same branch but are not contained in the history of 'master' (e.g. Y), which might indicate that the branch was rewound, possibly by an intruder. Another possible scenario. Later you and the pusher of Z may find that when the pusher created Z, he merged something questionable and Z may now have to be in "untrustable" set. You can dig further to find X at that point. > OK, I see. It is not "the server can do whatever it likes with the > information" as much as "the server can do whatever it likes, but at the > very least should eventually create a notes tree of a given form". Yes, examples of things the server side might want to additionally do in pre-receive-signature hook are to read the push certificate to implement authorization (and it can be per-branch if you wanted to) and to forward it immediately to offsite storage for safekeeping (the storage does not have to use git notes to implement it). -- To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html