Online code review system, called "Critic", which is used at Opera Software, has just been released under Apache license. As a long-time user of this awesome tool, I strongly recommend it. Enjoy!
Critic is tightly integrated with Git. Your commits are available for review as soon as you committed them to the Git repository that Critic is watching.
The supposed workflow is as follows:
1. You commit your code into the Critic's Git repository.
2. Depending on how you commit it, the review can be created automatically, or you can go to Critic in your browser, check your commits and create the review manually.
3. As soon as the review is created, the people responsible for reviewing of the changed code (the reviewers) are notified by mail.
4. Reviewers can mark changes as reviewed, raise issues and write notes.
5. Those who don't have rights to review, can register themselves as "watchers". They also receive notifications and can participate in work on issues and notes.
6. When all commits are reviewed and all issues are closed - the review is considered "accepted". Then the code can be committed into an integration branch.
1. Issues can be general, against the whole commit or against particular code lines. If an issue is raised against particular code lines and those lines are fixed in a later commit - the issue is automatically marked as "addressed", but the new commit is unreviewed, so the review is not automatically becoming "accepted".
2. Critic supports "rewriting of history". For example, if your review grows to 50 commits and most of them are small fixups, compilation fixes or comments changes that pollute your history - you can squash those 50 commits into, let's say, 5 commits that make logical sense. Critic then will not then require the reviewers to review the same changes the second time.
3. Critic also supports rebasing your changes onto another branchpoint without requiring to review the same code twice. Exception: if during such rebase you have merge conflicts - they'll need to be reviewed.
4. Critic supports extensions. For example, an extension can be a button which optionally squashes your 50 commits into 1, asks for editing a commit message, rebases the code to a sensible integration commit, commits the code into the needed branch (or several branches), makes a comment in BTS about it, launches a test build and subsequent unit tests, and sends a mail to the integration manager.