hooks/salsaflow-pre-push: Skip refs to be deleted

In case a ref is being deleted, the associated sha is all zeros. This special
case was not being handled, resulting in the hook failing when it should not.

Change-Id: 594777b359
Story-Id: SF-32
git: Implement full commit message parsing

Commit struct now contains Message field that can be used to get the full commit
message. Also a few utility functions were added or renamed.

Change-Id: 78ba6726a4
Story-Id: SF-15
hooks: Implement changes to the review post cmd

The commit-msg hook no longer needs to check for Story-Id. This is what review
post command is doing from now on. The only thing necessary is to insert
Change-Id.

The pre-push hook shall reject any commits not complying with the SalsaFlow
requirements, i.e. the commits not having either Change-Id or Story-Id.

Change-Id: e43075869e
Story-Id: SF-15
IssueTracker: Add StoriesInProgress method

The new method lists the stories that are currently in progress, i.e. the
develop may be still actively working on them.

This is being implemented so that the new review post command can download the
stories in progress and ask the user to choose the story that the commit to be
posted is going to be associated with.

Change-Id: 4569e88140
Story-Id: SF-15
modules/reviewboard: Rewrite the followup message

The message was getting a bit out of date facing the review post changes.

Change-Id: 55f10674fc
Story-Id: SF-15
review post: Implement heavy worklow changes

Firstly, the review post command is from now on doing a bit more than it used
to. Its job from now on is not only to post review requests, but also to ensure
that the Story-Id tags are in all commits that are being posted.

In case the Story-Id tag is not in one or more commit messages, review post
fetches the stories in progress from the issue tracker and starts rewriting the
commit messages. Every time it encounters a commit without Story-Id, it asks the
user to select a story. The commit being processed is then assigned to that
chosen story.

The fact that the stories are fetched from the issue tracker might look strange,
because review post used to use the story branch to get the story ID. But since
it was decided that the mapping can be 1 branch : N stories, we do not depend on
storing the story ID in the branch name, but rather we enforce Story-Id in every
commit.

Secondly, the command also works in two modes now. When the -parent option is
not specified, only the last commit on the current branch (HEAD) is being
posted. In case -parent is set to BRANCH. All commits represented by git
revision range BRANCH.. are posted for code review.

There are a more few new tags to control review post, particularly
  * -no_fetch: do not fetch the repository, do not perform any sync checks
  * -no_rebase: do not rebase the selected branch onto the parent branch

Change-Id: 62adf93f4c
Story-Id: SF-15