scons: Automatically install the git style hook

Add a check in the main SConscript that installs the git pre-commit
hook in util/ if git is used.

Signed-off-by: Andreas Sandberg <andreas.sandberg@arm.com>
Reviewed-by: Curtis Dunham <curtis.dunham@arm.com>
[andreas.sandberg@arm.com: Cleanups suggested by Steve]
Reviewed-by: Steve Reinhardt <steve.reinhardt@amd.com>

--HG--
extra : rebase_source : 4b805cdd74bc5442a65abf8a62e3e341f352c04e
This commit is contained in:
Andreas Sandberg 2016-03-30 15:35:33 +01:00
parent 5f9c0f8a24
commit 588ecad919

View file

@ -1,6 +1,6 @@
# -*- mode:python -*- # -*- mode:python -*-
# Copyright (c) 2013, 2015 ARM Limited # Copyright (c) 2013, 2015, 2016 ARM Limited
# All rights reserved. # All rights reserved.
# #
# The license below extends only to copyright in the software and shall # The license below extends only to copyright in the software and shall
@ -260,13 +260,18 @@ main.AppendENVPath('PYTHONPATH', extra_python_paths)
######################################################################## ########################################################################
hgdir = main.root.Dir(".hg") hgdir = main.root.Dir(".hg")
gitdir = main.root.Dir(".git")
mercurial_style_message = """
style_message = """
You're missing the gem5 style hook, which automatically checks your code You're missing the gem5 style hook, which automatically checks your code
against the gem5 style rules on hg commit and qrefresh commands. This against the gem5 style rules on hg commit and qrefresh commands. This
script will now install the hook in your .hg/hgrc file. script will now install the hook in your %s.
Press enter to continue, or ctrl-c to abort: """ Press enter to continue, or ctrl-c to abort: """
mercurial_style_message = style_message % ".hg/hgrc file"
git_style_message = style_message % ".git/hooks/ directory"
mercurial_style_upgrade_message = """ mercurial_style_upgrade_message = """
Your Mercurial style hooks are not up-to-date. This script will now Your Mercurial style hooks are not up-to-date. This script will now
try to automatically update them. A backup of your hgrc will be saved try to automatically update them. A backup of your hgrc will be saved
@ -293,9 +298,13 @@ hook. It is important.
""" """
# Check for style hook and prompt for installation if it's not there. # Check for style hook and prompt for installation if it's not there.
# Skip this if --ignore-style was specified, there's no .hg dir to # Skip this if --ignore-style was specified, there's no interactive
# install a hook in, or there's no interactive terminal to prompt. # terminal to prompt, or no recognized revision control system can be
if not GetOption('ignore_style') and hgdir.exists() and sys.stdin.isatty(): # found.
ignore_style = GetOption('ignore_style') or not sys.stdin.isatty()
# Try wire up Mercurial to the style hooks
if not ignore_style and hgdir.exists():
style_hook = True style_hook = True
style_hooks = tuple() style_hooks = tuple()
hgrc = hgdir.File('hgrc') hgrc = hgdir.File('hgrc')
@ -359,6 +368,27 @@ if not GetOption('ignore_style') and hgdir.exists() and sys.stdin.isatty():
print "Error updating", hgrc_path print "Error updating", hgrc_path
sys.exit(1) sys.exit(1)
# Try to wire up git to the style hooks
git_pre_commit_hook = gitdir.File("hooks/pre-commit")
if not ignore_style and gitdir.exists() and not git_pre_commit_hook.exists():
git_style_script = File("util/git-pre-commit.py")
print git_style_message,
try:
raw_input()
except:
print "Input exception, exiting scons.\n"
sys.exit(1)
try:
rel_style_script = os.path.relpath(
git_style_script.get_abspath(),
git_pre_commit_hook.Dir(".").get_abspath())
os.symlink(rel_style_script, git_pre_commit_hook.get_abspath())
except:
print "Error updating git pre-commit hook"
raise
sys.exit(1)
################################################### ###################################################
# #