Add support for reading and writing history metadata

Review Request #8278 — Created July 11, 2016 and submitted — Latest diff uploaded

Information

RBTools
dvcs
4f3c6e5...

Reviewers

For server-side detection of rebases and commit amends, we need to keep
track of some metadata indicating the original SHA1 of commits. With
git, we can store this metadata in git notes.

git notes allows for storing arbitrary metadata associated with each
commit. We store the SHA1 of the commit in a special notes ref,
rbt-history-metadata. This way, we do not interfere with notes that
users may be using. We also add this ref to the list of refs to be
rewritten during rebases and amends.

When an amend occurs, the SHA1 of the commit will change, but the
stored SHA1 will not, so we will be able to detect that commit was
amended. Likewise, when a squash occurs during a rebase, the SHA1 will
change but the stored metadata will be the SHA1 hashes of all the
squashed commits, so we can also know when a squash occurs. We can then
upload this metadata when doing rbt post so that Review Board can
detect history changes server side.

Using https://reviews.reviewboard.org/r/8276/, I was able to do the
following:

  • Upload a review request with multiple commits.
  • Squash the commits together locally.
  • Update the review request.

I observed that the original commits were set in the Review Board
database.