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:
35
git-review
35
git-review
@@ -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:
|
||||||
|
Reference in New Issue
Block a user