scons, style: Rename style.py to hgstyle.py

The Mercurial style checker extensions are currently stored in
style.py. This is not ideal since they won't work with other version
control systems. This changeset renames style.py to hgstyle.py and
adds upgrade code to scons that automatically updates the hooks in
hgrc.

Signed-off-by: Andreas Sandberg <andreas.sandberg@arm.com>
Reviewed-by: Nikos Nikoleris <nikos.nikoleris@arm.com>
Reviewed-by: Curtis Dunham <curtis.dunham@arm.com>
Reviewed-by: Nathanael Premillieu <nathananel.premillieu@arm.com>
Reviewed-by: Steve Reinhardt <steve.reinhardt@amd.com>

--HG--
rename : util/style.py => util/hgstyle.py
extra : rebase_source : ee8107ef245901371b368b7c2046ecdd89e3ff4c
This commit is contained in:
Andreas Sandberg 2016-03-30 15:29:42 +01:00
parent 511c674cd6
commit 7277defc31
2 changed files with 52 additions and 10 deletions

View file

@ -112,6 +112,7 @@ For more details, see:
import itertools
import os
import re
import shutil
import subprocess
import sys
@ -266,15 +267,21 @@ against the gem5 style rules on hg commit and qrefresh commands. This
script will now install the hook in your .hg/hgrc file.
Press enter to continue, or ctrl-c to abort: """
mercurial_style_upgrade_message = """
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
in .hg/hgrc.old.
Press enter to continue, or ctrl-c to abort: """
mercurial_style_hook = """
# The following lines were automatically added by gem5/SConstruct
# to provide the gem5 style-checking hooks
[extensions]
style = %s/util/style.py
hgstyle = %s/util/hgstyle.py
[hooks]
pretxncommit.style = python:style.check_style
pre-qrefresh.style = python:style.check_style
pretxncommit.style = python:hgstyle.check_style
pre-qrefresh.style = python:hgstyle.check_style
# End of SConstruct additions
""" % (main.root.abspath)
@ -290,16 +297,52 @@ hook. It is important.
# install a hook in, or there's no interactive terminal to prompt.
if not GetOption('ignore_style') and hgdir.exists() and sys.stdin.isatty():
style_hook = True
style_hooks = tuple()
hgrc = hgdir.File('hgrc')
hgrc_old = hgdir.File('hgrc.old')
try:
from mercurial import ui
ui = ui.ui()
ui.readconfig(hgdir.File('hgrc').abspath)
style_hook = ui.config('hooks', 'pretxncommit.style', None) and \
ui.config('hooks', 'pre-qrefresh.style', None)
ui.readconfig(hgrc.abspath)
style_hooks = (ui.config('hooks', 'pretxncommit.style', None),
ui.config('hooks', 'pre-qrefresh.style', None))
style_hook = all(style_hooks)
style_extension = ui.config('extensions', 'style', None)
except ImportError:
print mercurial_lib_not_found
if not style_hook:
if "python:style.check_style" in style_hooks:
# Try to upgrade the style hooks
print mercurial_style_upgrade_message
# continue unless user does ctrl-c/ctrl-d etc.
try:
raw_input()
except:
print "Input exception, exiting scons.\n"
sys.exit(1)
shutil.copyfile(hgrc.abspath, hgrc_old.abspath)
re_style_hook = re.compile(r"^([^=#]+)\.style\s*=\s*([^#\s]+).*")
re_style_extension = re.compile("style\s*=\s*([^#\s]+).*")
with open(hgrc_old.abspath, 'r') as old, \
open(hgrc.abspath, 'w') as new:
for l in old:
m_hook = re_style_hook.match(l)
m_ext = re_style_extension.match(l)
if m_hook:
hook, check = m_hook.groups()
if check != "python:style.check_style":
print "Warning: %s.style is using a non-default " \
"checker: %s" % (hook, check)
if hook not in ("pretxncommit", "pre-qrefresh"):
print "Warning: Updating unknown style hook: %s" % hook
l = "%s.style = python:hgstyle.check_style\n" % hook
elif m_ext and m_ext.group(1) == style_extension:
l = "hgstyle = %s/util/hgstyle.py\n" % main.root.abspath
new.write(l)
elif not style_hook:
print mercurial_style_message,
# continue unless user does ctrl-c/ctrl-d etc.
try:
@ -310,9 +353,8 @@ if not GetOption('ignore_style') and hgdir.exists() and sys.stdin.isatty():
hgrc_path = '%s/.hg/hgrc' % main.root.abspath
print "Adding style hook to", hgrc_path, "\n"
try:
hgrc = open(hgrc_path, 'a')
hgrc.write(mercurial_style_hook)
hgrc.close()
with open(hgrc_path, 'a') as f:
f.write(mercurial_style_hook)
except:
print "Error updating", hgrc_path
sys.exit(1)