# Requirements

All commits and must be reviewed by at least one Melange engineer other than the author before migration to the master branch.

# Author Process

When you feel that your current line of development is ready for review:
  1. If master has advanced beyond where it was when you started your development, pull the current head of master and merge master's changes with yours.
  1. Push your line of development to a branch in the origin repository.
  1. Ask another Melange engineer to review every unreviewed commit in your branch.
  1. Make changes and re-push to your branch, and secure re-review as necessary.
  1. When every commit on your branch has been reviewed (positively), push the (reviewed) head commit of your development branch to master, taking care to make no additional changes.
  1. Prune your development branch if it will see no further use.

# Sample Author Commands

## Pulling from origin
`git pull --no-rebase --no-commit`

Without the --no-commit flag, a pull operation that requires a commit will get an auto-created commit with an auto-generated log message like "Merge branch page-fix". Because our branch names are ephemeral we suppress the auto-created commit so that we may give any merge commit a message that describes the substance of what is being merged.

## Pushing commits to a branch for review
`git push origin <hex string of commit to be reviewed>:<review branch name>`

## Pushing reviewed commits to master
`git push origin <latest reviewed commit hex string, not branch name or other alias>:master`

This will either push your specific reviewed commits to master or fail as non-fast-forward (in which case you'll have to merge and undergo further review).

# Rebase

**Do not rebase.** Rebases cause us to lose review history and chronological ordering of our work. A falsely linear history just isn't worth it.

# Reviewer Process
If a change looks good and needs no comment, just mark it positive and hit the "submit" button. This suppresses the per-commit email thread and cuts down on mailing list noise.

# Exceptions

Commits made as part of the release process ("Set new Melange version number...") are exempt and may be made on master. They should still be reviewed when convenient, though.