You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@mesos.apache.org by jo...@apache.org on 2017/07/18 00:31:56 UTC

[2/4] mesos git commit: Linted support/post-reviews.py.

Linted support/post-reviews.py.

This will allow us to use PyLint on the
entire support directory in the future.

Review: https://reviews.apache.org/r/60233/


Project: http://git-wip-us.apache.org/repos/asf/mesos/repo
Commit: http://git-wip-us.apache.org/repos/asf/mesos/commit/c0e51a8d
Tree: http://git-wip-us.apache.org/repos/asf/mesos/tree/c0e51a8d
Diff: http://git-wip-us.apache.org/repos/asf/mesos/diff/c0e51a8d

Branch: refs/heads/master
Commit: c0e51a8d729aa6b06d70fa18259354536bc59b43
Parents: 0df6892
Author: Armand Grillet <ag...@mesosphere.io>
Authored: Mon Jul 17 11:16:23 2017 -0700
Committer: Joseph Wu <jo...@apache.org>
Committed: Mon Jul 17 17:18:12 2017 -0700

----------------------------------------------------------------------
 support/post-reviews.py | 649 +++++++++++++++++++++++--------------------
 1 file changed, 342 insertions(+), 307 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/mesos/blob/c0e51a8d/support/post-reviews.py
----------------------------------------------------------------------
diff --git a/support/post-reviews.py b/support/post-reviews.py
index 410fb33..5ecde40 100755
--- a/support/post-reviews.py
+++ b/support/post-reviews.py
@@ -1,26 +1,41 @@
 #!/usr/bin/env python
-# This is a wrapper around the 'post-review'/'rbt' tool provided by
-# Review Board. This is currently used by Apache Mesos development.
 #
-# What does this do?
-# It provides the ability to send a review for each commit on the
-# current branch.
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License.  You may obtain a copy of the License at
 #
-# Why is that useful?
-# No one likes a 5000 line review request. Using this tool forces one
-# to create logical commits which can be reviewed independently.
+#     http://www.apache.org/licenses/LICENSE-2.0
 #
-# How do I use it?
-# First install 'RBTools' from Review Board.
-# http://www.reviewboard.org/downloads/rbtools/
-#
-# $ cd /path/to/mesos
-# $ [ do some work on your branch off of master, make commit(s) ]
-# $ ./support/post-reviews.py --server=https://reviews.apache.org \
-#   --tracking-branch=origin/master --target-groups=mesos --open
-#
-# NOTE: post-reviews is currently specific to Mesos development,
-# but can easily be adapted for other projects.
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+"""
+Wrapper around the post-review/rbt tool provided by Review Board.
+
+This script provides the ability to send one review for each
+commit on the current branch, instead of squashing all changes
+into a single large review. We encourage contributors to create
+logical commits which can be reviewed independently.
+
+Options to pass onto 'rbt' can be placed in a '.reviewboardrc'
+file at the top of the Mesos source directory.  A default
+'.reviewboardrc' can be found at 'support/reviewboardrc'.
+Running './bootstrap' will populate this file for you.
+
+To use this script, first install 'RBTools' from Review Board:
+http://www.reviewboard.org/downloads/rbtools/
+
+$ cd /path/to/mesos
+$ [ do some work on your branch off of master, make commit(s) ]
+$ ./support/post-reviews.py
+"""
 
 import argparse
 import atexit
@@ -35,325 +50,345 @@ from distutils.version import LooseVersion
 
 from subprocess import check_output, Popen, PIPE, STDOUT
 
+
 def execute(command, ignore_errors=False):
+    """Execute a process and leave."""
     process = None
     try:
         process = Popen(command,
-                stdin=PIPE,
-                stdout=PIPE,
-                stderr=STDOUT,
-                shell=False)
-    except:
+                        stdin=PIPE,
+                        stdout=PIPE,
+                        stderr=STDOUT,
+                        shell=False)
+    except Exception:
         if not ignore_errors:
             raise
         return None
 
-    data, error = process.communicate()
+    data, _ = process.communicate()
     status = process.wait()
     if status != 0 and not ignore_errors:
         cmdline = ' '.join(command) if isinstance(command, list) else command
-        need_login = \
-          'Please log in to the Review Board server at reviews.apache.org.'
+        need_login = 'Please log in to the Review Board' \
+                     ' server at reviews.apache.org.'
         if need_login in data:
-          print need_login, '\n'
-          print "You can either:"
-          print "  (1) Run 'rbt login', or"
-          print "  (2) Set the default USERNAME/PASSWORD in '.reviewboardrc'"
+            print need_login, '\n'
+            print "You can either:"
+            print "  (1) Run 'rbt login', or"
+            print "  (2) Set the default USERNAME/PASSWORD in '.reviewboardrc'"
         else:
-          print 'Failed to execute: \'' + cmdline + '\':'
-          print data
+            print 'Failed to execute: \'' + cmdline + '\':'
+            print data
         sys.exit(1)
     elif status != 0:
         return None
     return data
 
 
-# TODO(benh): Make sure this is a git repository, apologize if not.
-
-# Choose 'rbt' if available, otherwise choose 'post-review'.
-post_review = None
-
-rbt_command = 'rbt'
-# Windows command name must have `cmd` extension.
-if platform.system() == 'Windows':
-  rbt_command = 'rbt.cmd'
-
-rbt_version = execute([rbt_command, '--version'], ignore_errors=True)
-if rbt_version:
-  rbt_version = LooseVersion(rbt_version)
-  post_review = [rbt_command, 'post']
-elif execute(['post-review', '--version'], ignore_errors=True):
-  post_review = ['post-review']
-else:
-  print 'Please install RBTools before proceeding'
-  sys.exit(1)
-
-# Don't do anything if people have unstaged changes.
-diff_stat = execute(['git', 'diff', '--shortstat']).strip()
-
-if diff_stat:
-  print 'Please commit or stash any changes before using post-reviews!'
-  sys.exit(1)
-
-# Don't do anything if people have uncommitted changes.
-diff_stat = execute(['git', 'diff', '--shortstat', '--staged']).strip()
-
-if diff_stat:
-  print 'Please commit staged changes before using post-reviews!'
-  sys.exit(1)
-
-# Grab a reference to the repo's git directory. Usually this is simply .git in
-# the repo's top level directory. However, when submodules are used, it may
-# appear elsewhere. The most up-to-date way of finding this directory is to use
-# `git rev-parse --git-common-dir`. This is necessary to support things like
-# git worktree in addition to git submodules. However, as of January 2016,
-# support for the '--git-common-dir' flag is fairly new, forcing us to fall
-# back to the older '--git-dir' flag if '--git-common-dir' is not supported. We
-# do this by checking the output of `git rev-parse --git-common-dir` and seeing
-# if it gives us a valid directory back. If not, we set the git directory using
-# the '--git-dir' flag instead.
-git_dir = execute(['git', 'rev-parse', '--git-common-dir']).strip()
-if not os.path.isdir(git_dir):
-  git_dir = execute(['git', 'rev-parse', '--git-dir']).strip()
-
-# Grab a reference to the top level directory of this repo.
-top_level_dir = execute(['git', 'rev-parse', '--show-toplevel']).strip()
-
-# Use the tracking_branch specified by the user if exists.
-parser = argparse.ArgumentParser(add_help=False)
-parser.add_argument('--server')
-parser.add_argument('--tracking-branch')
-args, _ = parser.parse_known_args()
-
-# Try to read the .reviewboardrc in the top-level directory.
-reviewboardrc_filepath = os.path.join(top_level_dir, '.reviewboardrc')
-if os.path.exists(reviewboardrc_filepath):
-    sys.dont_write_bytecode = True  # Prevent generation of '.reviewboardrcc'.
-    reviewboardrc = imp.load_source('reviewboardrc', reviewboardrc_filepath)
-
-reviewboard_url = (
-    args.server if args.server else
-    reviewboardrc.REVIEWBOARD_URL if 'REVIEWBOARD_URL' in dir(reviewboardrc) else
-    'https://reviews.apache.org')
-
-tracking_branch = (
-    args.tracking_branch if args.tracking_branch else
-    reviewboardrc.TRACKING_BRANCH if 'TRACKING_BRANCH' in dir(reviewboardrc) else
-    'master')
-
-branch_ref = execute(['git', 'symbolic-ref', 'HEAD']).strip()
-branch = branch_ref.replace('refs/heads/', '', 1)
-
-# do not work on master branch
-if branch == "master":
-    print "We're expecting you to be working on another branch from master!"
-    sys.exit(1)
-
-temporary_branch = '_post-reviews_' + branch
-
-# Always delete the temporary branch.
-atexit.register(lambda: execute(['git', 'branch', '-D', temporary_branch], True))
-
-# Always put us back on the original branch.
-atexit.register(lambda: execute(['git', 'checkout', branch]))
-
-merge_base = execute(['git', 'merge-base', tracking_branch, branch_ref]).strip()
-
-
-
-output = check_output([
-    'git',
-    '--no-pager',
-    'log',
-    '--pretty=format:%Cred%H%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr)%Creset',
-    merge_base + '..HEAD'])
-print 'Running \'%s\' across all of ...' % " ".join(post_review)
-print output
-
-log = execute(['git',
-               '--no-pager',
-               'log',
-               '--no-color',
-               '--pretty=oneline',
-               '--reverse',
-               merge_base + '..HEAD']).strip()
-
-if len(log) <= 0:
-    print "No new changes compared with master branch!"
-    sys.exit(1)
-
-shas = []
-
-for line in log.split('\n'):
-    sha = line.split()[0]
-    shas.append(sha)
-
-
-previous = tracking_branch
-parent_review_request_id = None
-for i in range(len(shas)):
-    sha = shas[i]
-
-    execute(['git', 'branch', '-D', temporary_branch], True)
-
-    message = execute(['git',
-                       '--no-pager',
-                       'log',
-                       '--pretty=format:%s%n%n%b',
-                       previous + '..' + sha])
-
-    review_request_id = None
-
-    pos = message.find('Review:')
-    if pos != -1:
-        regex = 'Review: ({url})$'.format(
-            url=urlparse.urljoin(reviewboard_url, 'r/[0-9]+'))
-        pattern = re.compile(regex)
-        match = pattern.search(message[pos:].strip().strip('/'))
-        if match is None:
-            print "\nInvalid ReviewBoard URL: '{}'".format(message[pos:])
-            sys.exit(1)
+def main():
+    """Main function, post commits added to this branch as review requests."""
+    # TODO(benh): Make sure this is a git repository, apologize if not.
 
-        url = match.group(1)
-        review_request_id = url.split('/')[-1]
+    # Choose 'rbt' if available, otherwise choose 'post-review'.
+    post_review = None
 
-    # Show the commit.
-    if review_request_id is None:
-        output = check_output([
-            'git',
-            '--no-pager',
-            'log',
-            '--pretty=format:%Cred%H%Creset -%C(yellow)%d%Creset %s',
-            previous + '..' + sha])
-        print '\nCreating diff of:'
-        print output
+    rbt_command = 'rbt'
+    # Windows command name must have `cmd` extension.
+    if platform.system() == 'Windows':
+        rbt_command = 'rbt.cmd'
+
+    rbt_version = execute([rbt_command, '--version'], ignore_errors=True)
+    if rbt_version:
+        rbt_version = LooseVersion(rbt_version)
+        post_review = [rbt_command, 'post']
+    elif execute(['post-review', '--version'], ignore_errors=True):
+        post_review = ['post-review']
     else:
-        output = check_output([
-            'git',
-            '--no-pager',
-            'log',
-            '--pretty=format:%Cred%H%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr)%Creset',
-            previous + '..' + sha])
-        print '\nUpdating diff of:'
-        print output
+        print 'Please install RBTools before proceeding'
+        sys.exit(1)
+
+    # Don't do anything if people have unstaged changes.
+    diff_stat = execute(['git', 'diff', '--shortstat']).strip()
+
+    if diff_stat:
+        print 'Please commit or stash any changes before using post-reviews!'
+        sys.exit(1)
+
+    # Don't do anything if people have uncommitted changes.
+    diff_stat = execute(['git', 'diff', '--shortstat', '--staged']).strip()
+
+    if diff_stat:
+        print 'Please commit staged changes before using post-reviews!'
+        sys.exit(1)
+
+    # Grab a reference to the repo's git directory. Usually this is simply
+    # .git in the repo's top level directory. However, when submodules are
+    # used, it may appear elsewhere. The most up-to-date way of finding this
+    # directory is to use `git rev-parse --git-common-dir`. This is necessary
+    # to support things like git worktree in addition to git submodules.
+    # However, as of January 2016, support for the '--git-common-dir' flag is
+    # fairly new, forcing us to fall back to the '--git-dir' flag if
+    # '--git-common-dir' is not supported. We do this by checking the output of
+    # git rev-parse --git-common-dir` and check if it gives a valid directory.
+    # If not, we set the git directory using the '--git-dir' flag instead.
+    git_dir = execute(['git', 'rev-parse', '--git-common-dir']).strip()
+    if not os.path.isdir(git_dir):
+        git_dir = execute(['git', 'rev-parse', '--git-dir']).strip()
+
+    # Grab a reference to the top level directory of this repo.
+    top_level_dir = execute(['git', 'rev-parse', '--show-toplevel']).strip()
+
+    # Use the tracking_branch specified by the user if exists.
+    parser = argparse.ArgumentParser(add_help=False)
+    parser.add_argument('--server')
+    parser.add_argument('--tracking-branch')
+    args, _ = parser.parse_known_args()
+
+    # Try to read the .reviewboardrc in the top-level directory.
+    reviewboardrc_filepath = os.path.join(top_level_dir, '.reviewboardrc')
+    if os.path.exists(reviewboardrc_filepath):
+        # Prevent generation of '.reviewboardrcc'.
+        sys.dont_write_bytecode = True
+        reviewboardrc = imp.load_source('reviewboardrc', reviewboardrc_filepath)
+
+    if args.server:
+        reviewboard_url = args.server
+    elif 'REVIEWBOARD_URL' in dir(reviewboardrc):
+        reviewboard_url = reviewboardrc.REVIEWBOARD_URL
+    else:
+        reviewboard_url = 'https://reviews.apache.org'
+
+    if args.tracking_branch:
+        tracking_branch = args.tracking_branch
+    elif 'TRACKING_BRANCH' in dir(reviewboardrc):
+        tracking_branch = reviewboardrc.TRACKING_BRANCH
+    else:
+        tracking_branch = 'master'
+
+    branch_ref = execute(['git', 'symbolic-ref', 'HEAD']).strip()
+    branch = branch_ref.replace('refs/heads/', '', 1)
+
+    # do not work on master branch
+    if branch == "master":
+        print "We're expecting you to be working on another branch from master!"
+        sys.exit(1)
+
+    temporary_branch = '_post-reviews_' + branch
+
+    # Always delete the temporary branch.
+    atexit.register(
+        lambda: execute(['git', 'branch', '-D', temporary_branch], True))
+
+    # Always put us back on the original branch.
+    atexit.register(lambda: execute(['git', 'checkout', branch]))
+
+    merge_base = execute(
+        ['git', 'merge-base', tracking_branch, branch_ref]).strip()
 
-    # Show the "parent" commit(s).
     output = check_output([
         'git',
         '--no-pager',
         'log',
-        '--pretty=format:%Cred%H%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr)%Creset',
-        tracking_branch + '..' + previous])
+        '--pretty=format:%Cred%H%Creset -%C'
+        '(yellow)%d%Creset %s %Cgreen(%cr)%Creset',
+        merge_base + '..HEAD'])
+    print 'Running \'%s\' across all of ...' % " ".join(post_review)
+    print output
 
-    if output:
-        print '\n... with parent diff created from:'
-        print output
+    log = execute(['git',
+                   '--no-pager',
+                   'log',
+                   '--no-color',
+                   '--pretty=oneline',
+                   '--reverse',
+                   merge_base + '..HEAD']).strip()
 
-    try:
-        raw_input('\nPress enter to continue or \'Ctrl-C\' to skip.\n')
-    except KeyboardInterrupt:
-        i = i + 1
-        previous = sha
-        parent_review_request_id = review_request_id
-        continue
-
-    # Strip the review url from the commit message, so that it is not included
-    # in the summary message when GUESS_FIELDS is set in .reviewboardc. Update
-    # the sha appropriately.
-    if review_request_id:
-        stripped_message = message[:pos]
-        execute(['git', 'checkout', sha])
-        execute(['git', 'commit', '--amend', '-m', stripped_message])
-        sha = execute(['git', 'rev-parse', 'HEAD']).strip()
-        execute(['git', 'checkout', branch])
-
-    revision_range = previous + ':' + sha
-
-    # Build the post-review/rbt command up to the point where they are common.
-    command = post_review
-
-    if args.tracking_branch is None:
-        command = command + ['--tracking-branch=' + tracking_branch]
-
-    if review_request_id:
-        command = command + ['--review-request-id=' + review_request_id]
-
-    # Determine how to specify the revision range.
-    if rbt_command in post_review and rbt_version >= LooseVersion('RBTools 0.6'):
-       # rbt >= 0.6.1 supports '--depends-on' argument.
-       # Only set the "depends on" if this is not the first review in the chain.
-       if rbt_version >= LooseVersion('RBTools 0.6.1') and parent_review_request_id:
-         command = command + ['--depends-on=' + parent_review_request_id]
-
-       # rbt >= 0.6 revisions are passed in as args.
-       command = command + sys.argv[1:] + [previous, sha]
-    else:
-        # post-review and rbt < 0.6 revisions are passed in using the revision
-        # range option.
-        command = command + \
-            ['--revision-range=' + revision_range] + \
-            sys.argv[1:]
+    if len(log) <= 0:
+        print "No new changes compared with master branch!"
+        sys.exit(1)
+
+    shas = []
+
+    for line in log.split('\n'):
+        sha = line.split()[0]
+        shas.append(sha)
+
+    previous = tracking_branch
+    parent_review_request_id = None
+    for i, sha in enumerate(shas):
+        execute(['git', 'branch', '-D', temporary_branch], True)
+
+        message = execute(['git',
+                           '--no-pager',
+                           'log',
+                           '--pretty=format:%s%n%n%b',
+                           previous + '..' + sha])
+
+        review_request_id = None
+
+        pos = message.find('Review:')
+        if pos != -1:
+            regex = 'Review: ({url})$'.format(
+                url=urlparse.urljoin(reviewboard_url, 'r/[0-9]+'))
+            pattern = re.compile(regex)
+            match = pattern.search(message[pos:].strip().strip('/'))
+            if match is None:
+                print "\nInvalid ReviewBoard URL: '{}'".format(message[pos:])
+                sys.exit(1)
+
+            url = match.group(1)
+            review_request_id = url.split('/')[-1]
+
+        # Show the commit.
+        if review_request_id is None:
+            output = check_output([
+                'git',
+                '--no-pager',
+                'log',
+                '--pretty=format:%Cred%H%Creset -%C(yellow)%d%Creset %s',
+                previous + '..' + sha])
+            print '\nCreating diff of:'
+            print output
+        else:
+            output = check_output([
+                'git',
+                '--no-pager',
+                'log',
+                '--pretty=format:%Cred%H%Creset -%C'
+                '(yellow)%d%Creset %s %Cgreen(%cr)%Creset',
+                previous + '..' + sha])
+            print '\nUpdating diff of:'
+            print output
+
+        # Show the "parent" commit(s).
+        output = check_output([
+            'git',
+            '--no-pager',
+            'log',
+            '--pretty=format:%Cred%H%Creset -%C'
+            '(yellow)%d%Creset %s %Cgreen(%cr)%Creset',
+            tracking_branch + '..' + previous])
+
+        if output:
+            print '\n... with parent diff created from:'
+            print output
+
+        try:
+            raw_input('\nPress enter to continue or \'Ctrl-C\' to skip.\n')
+        except KeyboardInterrupt:
+            i = i + 1
+            previous = sha
+            parent_review_request_id = review_request_id
+            continue
+
+        # Strip the review url from the commit message, so that
+        # it is not included in the summary message when GUESS_FIELDS
+        # is set in .reviewboardc. Update the SHA appropriately.
+        if review_request_id:
+            stripped_message = message[:pos]
+            execute(['git', 'checkout', sha])
+            execute(['git', 'commit', '--amend', '-m', stripped_message])
+            sha = execute(['git', 'rev-parse', 'HEAD']).strip()
+            execute(['git', 'checkout', branch])
+
+        revision_range = previous + ':' + sha
+
+        # Build the post-review/rbt command up
+        # to the point where they are common.
+        command = post_review
+
+        if args.tracking_branch is None:
+            command = command + ['--tracking-branch=' + tracking_branch]
+
+        if review_request_id:
+            command = command + ['--review-request-id=' + review_request_id]
+
+        # Determine how to specify the revision range.
+        if rbt_command in post_review and \
+           rbt_version >= LooseVersion('RBTools 0.6'):
+            # rbt >= 0.6.1 supports '--depends-on' argument.
+            # Only set the "depends on" if this
+            # is not  the first review in the chain.
+            if rbt_version >= LooseVersion('RBTools 0.6.1') and \
+               parent_review_request_id:
+                command = command + ['--depends-on=' + parent_review_request_id]
+
+            # rbt >= 0.6 revisions are passed in as args.
+            command = command + sys.argv[1:] + [previous, sha]
+        else:
+            # post-review and rbt < 0.6 revisions are
+            # passed in using the revision range option.
+            command = command + \
+                ['--revision-range=' + revision_range] + \
+                sys.argv[1:]
 
-    output = execute(command).strip()
+        output = execute(command).strip()
 
-    print output
+        print output
 
+        # If we already have a request_id, continue on to the next commit in the
+        # chain. We update 'previous' from the shas[] array because we have
+        # overwritten the temporary sha variable above.
+        if review_request_id is not None:
+            previous = shas[i]
+            parent_review_request_id = review_request_id
+            i = i + 1
+            continue
+
+        # Otherwise, get the request_id from the output of post-review, append
+        # it to the commit message and rebase all other commits on top of it.
+        lines = output.split('\n')
+
+        # The last line of output in post-review is the review url.
+        # The second to the last line of output in rbt is the review url.
+        url = lines[len(lines) - 2] if rbt_command in post_review \
+            else lines[len(lines) - 1]
+
+        # Using rbt >= 0.6.3 on Linux prints out two URLs where the second
+        # one has /diff/ at the end. We want to remove this so that a
+        # subsequent call to post-reviews does not fail when looking up
+        # the reviewboard entry to edit.
+        url = url.replace('diff/', '')
+        url = url.strip('/')
+        review_request_id = os.path.basename(url)
+
+        # Construct new commit message.
+        message = message + '\n' + 'Review: ' + url + '\n'
+
+        execute(['git', 'checkout', '-b', temporary_branch])
+        execute(['git', 'reset', '--hard', sha])
+        execute(['git', 'commit', '--amend', '-m', message])
+
+        # Now rebase all remaining shas on top of this amended commit.
+        j = i + 1
+        old_sha = execute(
+            ['git', 'rev-parse', '--verify', temporary_branch]).strip()
+        previous = old_sha
+        while j < len(shas):
+            execute(['git', 'checkout', shas[j]])
+            execute(['git', 'rebase', temporary_branch])
+            # Get the sha for our detached HEAD.
+            new_sha = execute([
+                'git',
+                '--no-pager',
+                'log',
+                '--pretty=format:%H', '-n', '1', 'HEAD']).strip()
+            execute(['git',
+                     'update-ref',
+                     'refs/heads/' + temporary_branch,
+                     new_sha,
+                     old_sha])
+            old_sha = new_sha
+            shas[j] = new_sha
+            j = j + 1
+
+        # Okay, now update the actual branch to our temporary branch.
+        new_sha = old_sha
+        old_sha = execute(['git', 'rev-parse', '--verify', branch]).strip()
+        execute(['git', 'update-ref', 'refs/heads/' + branch, new_sha, old_sha])
 
-    # If we already have a request_id, continue on to the next commit in the
-    # chain. We update 'previous' from the shas[] array because we have
-    # overwritten the temporary sha variable above.
-    if review_request_id is not None:
-        previous = shas[i]
-        parent_review_request_id = review_request_id
         i = i + 1
-        continue
-
-    # Otherwise, get the request_id from the output of post-review, append it
-    # to the commit message and rebase all other commits on top of it.
-    lines = output.split('\n')
-
-    # The last line of output in post-review is the review url.
-    # The second to the last line of output in rbt is the review url.
-    url = lines[len(lines) - 2] if rbt_command in post_review \
-        else lines[len(lines) - 1]
-
-    # Using rbt >= 0.6.3 on Linux prints out two URLs where the second
-    # one has /diff/ at the end. We want to remove this so that a
-    # subsequent call to post-reviews does not fail when looking up
-    # the reviewboard entry to edit.
-    url = url.replace('diff/','')
-    url = url.strip('/')
-    review_request_id = os.path.basename(url)
-
-    # Construct new commit message.
-    message = message + '\n' + 'Review: ' + url + '\n'
-
-    execute(['git', 'checkout', '-b', temporary_branch])
-    execute(['git', 'reset', '--hard', sha])
-    execute(['git', 'commit', '--amend', '-m', message])
-
-    # Now rebase all remaining shas on top of this amended commit.
-    j = i + 1
-    old_sha = execute(['git', 'rev-parse', '--verify', temporary_branch]).strip()
-    previous = old_sha
-    while j < len(shas):
-        execute(['git', 'checkout', shas[j]])
-        execute(['git', 'rebase', temporary_branch])
-        # Get the sha for our detached HEAD.
-        new_sha = execute(['git', '--no-pager', 'log', '--pretty=format:%H', '-n', '1', 'HEAD']).strip()
-        execute(['git',
-                 'update-ref',
-                 'refs/heads/' + temporary_branch,
-                 new_sha,
-                 old_sha])
-        old_sha = new_sha
-        shas[j] = new_sha
-        j = j + 1
-
-    # Okay, now update the actual branch to our temporary branch.
-    new_sha = old_sha
-    old_sha = execute(['git', 'rev-parse', '--verify', branch]).strip()
-    execute(['git', 'update-ref', 'refs/heads/' + branch, new_sha, old_sha])
-
-    i = i + 1
-    parent_review_request_id = review_request_id
+        parent_review_request_id = review_request_id
+
+if __name__ == '__main__':
+    main()