Remove commit --amend from hook installation.

Fixes bug 911362.

If you run git review -s in a fresh repo, there is no reason for us to
amend any commits to add a commit message.

If you run git review in a repo with a change but which has not been used
with gerrit before and we download the hook, then we do want to amend the
commit.

Change-Id: I29d3ec42ca086ecdfec6dd788f04e19649eacb24
This commit is contained in:
Monty Taylor
2012-01-03 10:16:28 -08:00
parent 2dceb4aa11
commit a28af319a4

View File

@@ -95,17 +95,17 @@ def latest_is_newer():
return False return False
def set_hooks_commit_msg(remote): def get_hooks_target_file():
""" Install the commit message hook if needed. """
top_dir = run_command('git rev-parse --show-toplevel') top_dir = run_command('git rev-parse --show-toplevel')
hooks_dir = os.path.join(top_dir, ".git/hooks") hooks_dir = os.path.join(top_dir, ".git/hooks")
target_file = os.path.join(hooks_dir, "commit-msg") return os.path.join(hooks_dir, "commit-msg")
if os.path.exists(target_file) and os.access(target_file, os.X_OK):
return True def set_hooks_commit_msg(remote, target_file):
""" Install the commit message hook if needed. """
# Create the hooks directory if it's not there already # Create the hooks directory if it's not there already
hooks_dir = os.path.basename(target_file)
if not os.path.isdir(hooks_dir): if not os.path.isdir(hooks_dir):
os.mkdir(hooks_dir) os.mkdir(hooks_dir)
@@ -132,8 +132,6 @@ def set_hooks_commit_msg(remote):
if not os.access(target_file, os.X_OK): if not os.access(target_file, os.X_OK):
os.chmod(target_file, os.path.stat.S_IREAD | os.path.stat.S_IEXEC) os.chmod(target_file, os.path.stat.S_IREAD | os.path.stat.S_IEXEC)
run_command("git commit --amend", env=dict(GIT_EDITOR='true'))
return True return True
@@ -371,7 +369,7 @@ def get_branch_name(target_branch):
return _branch_name return _branch_name
def assert_one_change(remote, branch, yes): def assert_one_change(remote, branch, yes, have_hook):
branch_name = get_branch_name(branch) branch_name = get_branch_name(branch)
has_color = check_color_support() has_color = check_color_support()
if has_color: if has_color:
@@ -392,11 +390,15 @@ def assert_one_change(remote, branch, yes):
print output print output
sys.exit(1) sys.exit(1)
output_lines = len(output.split("\n")) output_lines = len(output.split("\n"))
if output_lines == 0: if output_lines == 1 and not have_hook:
print "Your change was committed before the commit hook was installed"
print "Ammending the commit to add a gerrit change id"
run_command("git commit --amend", env=dict(GIT_EDITOR='true'))
elif output_lines == 0:
print "No changes between HEAD and %s/%s." % (remote, branch) print "No changes between HEAD and %s/%s." % (remote, branch)
print "Submitting for review would be pointless." print "Submitting for review would be pointless."
sys.exit(1) sys.exit(1)
if output_lines > 1: elif output_lines > 1:
if not yes: if not yes:
print "You have more than one commit that you are about to submit." print "You have more than one commit that you are about to submit."
print "The outstanding commits are:\n\n%s\n" % output print "The outstanding commits are:\n\n%s\n" % output
@@ -599,14 +601,19 @@ def main():
if VERBOSE: if VERBOSE:
print "Found topic '%s' from parsing changes." % topic print "Found topic '%s' from parsing changes." % topic
if not set_hooks_commit_msg(remote): hook_file = get_hooks_target_file()
print_exit_message(1, needs_update)
have_hook = os.path.exists(hook_file) and os.access(hook_file, os.X_OK)
if not have_hook:
if not set_hooks_commit_msg(remote, hook_file):
print_exit_message(1, needs_update)
if not options.setup: if not options.setup:
if options.rebase: if options.rebase:
if not rebase_changes(branch, remote): if not rebase_changes(branch, remote):
print_exit_message(1, needs_update) print_exit_message(1, needs_update)
assert_one_change(remote, branch, yes) assert_one_change(remote, branch, yes, have_hook)
cmd = "git push %s HEAD:refs/for/%s/%s" % (remote, branch, topic) cmd = "git push %s HEAD:refs/for/%s/%s" % (remote, branch, topic)
if options.dry: if options.dry: