+++ /dev/null
-syntax: glob
-build
-parser.out
-parsetab.py
-cscope.files
-cscope.out
-*.pyc
-*~
-.*.swp
-m5out
-src/doxygen
-ext/dramsim2/DRAMSim2
-ext/mcpat/regression/*/*.out
-util/m5/*.o
-util/m5/*.a
-util/m5/m5
-system/arm/dt/*.dtb
+++ /dev/null
-6b99127531fd692ff0f202e327d0826ed2bfcf5f m5_1.0_beta1
-1a40e60270c11ec24f11c783e70367e2740cdc56 m5_1.0_beta1
-069849384988e553b6edae71ecaf1fb6e918d738 m5_1.0_beta2
-4cfa92eca35d532b339507f1c631e1986d87b258 m5_1.0_tutorial
-ffe1942d845c67fb3fd04692420c9433638eba13 m5_1.0_web
-af8bf5e4e85ba1a773183cc3f6c43bcdf0ce146a m5_1.1
-1c0eeb0dae9b6a2a5479faf3ab52fb1ed0ce703f m5_1.1
-c486924ed90eb6805e8cf44ddee5ad5435c79051 m5_1.1
-01e679b66ca9474f10f8f96d391693adf76fc73a m5_1.1
-2608cd7def85c9fdc84251295c8023fab990d530 m5_1.1
-cdd48642d9bf584bd445b40abec9e7f934a5900b m5_1.1
-8d690c7c2efced99f7991b7ace56d769bae7cfdd m5_2.0_beta1
-d83885ad2b41777c97b94882aa8f07e761e55ac1 m5_2.0_beta1_patch1
-1906dcace7c27b2153bfb95ca1218660e1cc1f70 m5_2.0_beta2
-b174ae14f007ba0c341f8df77d36f57f48369cc8 m5_2.0_beta2
-91a9ac67662aa3a79315ade29b17a85961fecd88 m5_2.0_beta3
-dce5a8655829b7d2e24ce40cafc9c8873a71671f m5_2.0_beta5
-1ac44b6c87ec71a8410c9a9c219269eca71f8077 m5_2.0_beta4
-60a931b03fb165807f02bcccc4f7d0fd705a67a9 copyright_update
-d8b246a665c160a31751b4091f097022cde16dd7 m5_2.0_beta6
-5de565c4b7bdf46670611858b709c1eb50ad7c5c Calvin_Submission
-549b72de8f725bd411a9c73ee0d15ccbdf47bb0f stable_2012_02_02
-f75ee4849c404a0c7d93413f443cec640b721f2f stable_2012_06_28
-07352f119e489452b3c0bbf6d4f70e21e80e17e3 stable_2013_06_16
-6a043adb1e8d67fbb03ac5cee58dd26f75663714 stable_2013_10_14
-459491344fcf7f9e29250e71f33a7c7150f54d64 stable_2014_02_15
-cb2e6950956d475da97b04c41f19769ce2e8541a stable_2014_08_26
-bdb307e8be54a5808a9af2537e9261d88de6ed1b stable_2014_12_14
-e1794974515011f81f8d0fda7543ba3360a12c9b stable_2015_04_15
-60eb3fef9c2d51cf98cdb5501ee0c4ac0efe6eae stable_2015_09_03
gem5_tool_list = [
'git',
- 'mercurial',
]
def generate(env):
+++ /dev/null
-# Copyright (c) 2013, 2015-2017 ARM Limited
-# All rights reserved.
-#
-# The license below extends only to copyright in the software and shall
-# not be construed as granting a license to any other intellectual
-# property including but not limited to intellectual property relating
-# to a hardware implementation of the functionality of the software
-# licensed hereunder. You may use the software subject to the license
-# terms below provided that you ensure that this notice is replicated
-# unmodified and in its entirety in all distributions of the software,
-# modified or unmodified, in source code or in binary form.
-#
-# Copyright (c) 2011 Advanced Micro Devices, Inc.
-# Copyright (c) 2009 The Hewlett-Packard Development Company
-# Copyright (c) 2004-2005 The Regents of The University of Michigan
-# All rights reserved.
-#
-# Redistribution and use in source and binary forms, with or without
-# modification, are permitted provided that the following conditions are
-# met: redistributions of source code must retain the above copyright
-# notice, this list of conditions and the following disclaimer;
-# redistributions in binary form must reproduce the above copyright
-# notice, this list of conditions and the following disclaimer in the
-# documentation and/or other materials provided with the distribution;
-# neither the name of the copyright holders nor the names of its
-# contributors may be used to endorse or promote products derived from
-# this software without specific prior written permission.
-#
-# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-from __future__ import print_function
-import re
-import sys
-
-import gem5_scons.util
-
-mercurial_style_message = """
-You're missing the gem5 style hook, which automatically checks your code
-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_template = """
-# The following lines were automatically added by gem5/SConstruct
-# to provide the gem5 style-checking hooks
-[extensions]
-hgstyle = %s/util/hgstyle.py
-
-[hooks]
-pretxncommit.style = python:hgstyle.check_style
-pre-qrefresh.style = python:hgstyle.check_style
-# End of SConstruct additions
-
-"""
-
-mercurial_lib_not_found = """
-Mercurial libraries cannot be found, ignoring style hook. If
-you are a gem5 developer, please fix this and run the style
-hook. It is important.
-"""
-
-def install_style_hooks(env):
- hgdir = env.Dir('#.hg')
-
- 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(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 "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]+).*")
- old, new = open(hgrc_old.abspath, 'r'), open(hgrc.abspath, 'w')
- 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" % env.root.abspath
-
- new.write(l)
- elif not style_hook:
- print(mercurial_style_message, end=' ')
- # continue unless user does ctrl-c/ctrl-d etc.
- try:
- raw_input()
- except:
- print("Input exception, exiting scons.\n")
- sys.exit(1)
- hgrc_path = '%s/.hg/hgrc' % env.root.abspath
- print("Adding style hook to", hgrc_path, "\n")
- try:
- with open(hgrc_path, 'a') as f:
- f.write(mercurial_style_hook_template % env.root.abspath)
- except:
- print("Error updating", hgrc_path)
- sys.exit(1)
-
-def generate(env):
- if exists(env) and not gem5_scons.util.ignore_style():
- install_style_hooks(env)
-
-def exists(env):
- return env.Dir('#.hg').exists()
+++ /dev/null
-from mercurial import context
-from mercurial.i18n import _
-
-'''
-[extensions]
-hgfilesize=~/m5/incoming/util/hgfilesize.py
-
-[hooks]
-pretxncommit = python:hgfilesize.limit_file_size
-pretxnchangegroup = python:hgfilesize.limit_file_size
-
-[limit_file_size]
-maximum_file_size = 200000
-'''
-
-def limit_file_size(ui, repo, node=None, **kwargs):
- '''forbid files over a given size'''
-
- # default limit is 1 MB
- limit = int(ui.config('limit_file_size', 'maximum_file_size', 1024*1024))
- existing_tip = context.changectx(repo, node).rev()
- new_tip = context.changectx(repo, 'tip').rev()
- for rev in xrange(existing_tip, new_tip + 1):
- ctx = context.changectx(repo, rev)
- for f in ctx.files():
- if f not in ctx:
- continue
- fctx = ctx.filectx(f)
- if fctx.size() > limit:
- ui.write(_('file %s of %s is too large: %d > %d\n') % \
- (f, ctx, fctx.size(), limit))
- return True # This is invalid
-
- return False # Things are OK.
+++ /dev/null
-#! /usr/bin/env python2.7
-# Copyright (c) 2014 ARM Limited
-# All rights reserved
-#
-# The license below extends only to copyright in the software and shall
-# not be construed as granting a license to any other intellectual
-# property including but not limited to intellectual property relating
-# to a hardware implementation of the functionality of the software
-# licensed hereunder. You may use the software subject to the license
-# terms below provided that you ensure that this notice is replicated
-# unmodified and in its entirety in all distributions of the software,
-# modified or unmodified, in source code or in binary form.
-#
-# Copyright (c) 2006 The Regents of The University of Michigan
-# Copyright (c) 2007,2011 The Hewlett-Packard Development Company
-# Copyright (c) 2016 Advanced Micro Devices, Inc.
-# All rights reserved.
-#
-# Redistribution and use in source and binary forms, with or without
-# modification, are permitted provided that the following conditions are
-# met: redistributions of source code must retain the above copyright
-# notice, this list of conditions and the following disclaimer;
-# redistributions in binary form must reproduce the above copyright
-# notice, this list of conditions and the following disclaimer in the
-# documentation and/or other materials provided with the distribution;
-# neither the name of the copyright holders nor the names of its
-# contributors may be used to endorse or promote products derived from
-# this software without specific prior written permission.
-#
-# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-import sys
-import os
-from os.path import join as joinpath
-
-current_dir = os.path.dirname(__file__)
-sys.path.insert(0, current_dir)
-
-from style.verifiers import all_verifiers
-from style.style import MercurialUI, check_ignores
-from style.region import *
-
-from mercurial import bdiff, mdiff, commands
-
-def modified_regions(old_data, new_data):
- regions = Regions()
- beg = None
- for pbeg, pend, fbeg, fend in bdiff.blocks(old_data, new_data):
- if beg is not None and beg != fbeg:
- regions.append(beg, fbeg)
- beg = fend
- return regions
-
-def modregions(wctx, fname):
- fctx = wctx.filectx(fname)
- pctx = fctx.parents()
-
- file_data = fctx.data()
- lines = mdiff.splitnewlines(file_data)
- if len(pctx) in (1, 2):
- mod_regions = modified_regions(pctx[0].data(), file_data)
- if len(pctx) == 2:
- m2 = modified_regions(pctx[1].data(), file_data)
- # only the lines that are new in both
- mod_regions &= m2
- else:
- mod_regions = Regions()
- mod_regions.append(0, len(lines))
-
- return mod_regions
-
-
-def _modified_regions(repo, patterns, **kwargs):
- opt_all = kwargs.get('all', False)
- opt_no_ignore = kwargs.get('no_ignore', False)
-
- # Import the match (repository file name matching helper)
- # function. Different versions of Mercurial keep it in different
- # modules and implement them differently.
- try:
- from mercurial import scmutil
- m = scmutil.match(repo[None], patterns, kwargs)
- except ImportError:
- from mercurial import cmdutil
- m = cmdutil.match(repo, patterns, kwargs)
-
- modified, added, removed, deleted, unknown, ignore, clean = \
- repo.status(match=m, clean=opt_all)
-
- if not opt_all:
- try:
- wctx = repo.workingctx()
- except:
- from mercurial import context
- wctx = context.workingctx(repo)
-
- files = [ (fn, all_regions) for fn in added ] + \
- [ (fn, modregions(wctx, fn)) for fn in modified ]
- else:
- files = [ (fn, all_regions) for fn in added + modified + clean ]
-
- for fname, mod_regions in files:
- if opt_no_ignore or not check_ignores(fname):
- yield fname, mod_regions
-
-
-def do_check_style(hgui, repo, *pats, **opts):
- """check files for proper m5 style guidelines
-
- Without an argument, checks all modified and added files for gem5
- coding style violations. A list of files can be specified to limit
- the checker to a subset of the repository. The style rules are
- normally applied on a diff of the repository state (i.e., added
- files are checked in their entirety while only modifications of
- modified files are checked).
-
- The --all option can be specified to include clean files and check
- modified files in their entirety.
-
- The --fix-<check>, --ignore-<check>, and --skip-<check> options
- can be used to control individual style checks:
-
- --fix-<check> will perform the check and automatically attempt to
- fix sny style error (printing a warning if unsuccessful)
-
- --ignore-<check> will perform the check but ignore any errors
- found (other than printing a message for each)
-
- --skip-<check> will skip performing the check entirely
-
- If none of these options are given, all checks will be performed
- and the user will be prompted on how to handle each error.
-
- --fix-all, --ignore-all, and --skip-all are equivalent to specifying
- --fix-<check>, --ignore-<check>, or --skip-<check> for all checks,
- respectively. However, option settings for specific checks take
- precedence. Thus --skip-all --fix-white can be used to skip every
- check other than whitespace errors, which will be checked and
- automatically fixed.
-
- The -v/--verbose flag will display the offending line(s) as well
- as their location.
- """
-
- ui = MercurialUI(hgui, verbose=hgui.verbose)
-
- # instantiate varifier objects
- verifiers = [v(ui, opts, base=repo.root) for v in all_verifiers]
-
- for fname, mod_regions in _modified_regions(repo, pats, **opts):
- for verifier in verifiers:
- if verifier.apply(joinpath(repo.root, fname), mod_regions):
- return True
-
- return False
-
-def check_hook(hooktype):
- if hooktype not in ('pretxncommit', 'pre-qrefresh'):
- raise AttributeError, \
- "This hook is not meant for %s" % hooktype
-
-# This function provides a hook that is called before transaction
-# commit and on qrefresh
-def check_style(ui, repo, hooktype, **kwargs):
- check_hook(hooktype)
- args = {}
-
- try:
- return do_check_style(ui, repo, **args)
- except Exception, e:
- import traceback
- traceback.print_exc()
- return True
-
-try:
- from mercurial.i18n import _
-except ImportError:
- def _(arg):
- return arg
-
-_common_region_options = [
- ('a', 'all', False,
- _("include clean files and unmodified parts of modified files")),
- ('', 'no-ignore', False, _("ignore the style ignore list")),
- ]
-
-
-fix_opts = [('f', 'fix-all', False, _("fix all style errors"))] + \
- [('', 'fix-' + v.opt_name, False,
- _('fix errors in ' + v.test_name)) for v in all_verifiers]
-ignore_opts = [('', 'ignore-all', False, _("ignore all style errors"))] + \
- [('', 'ignore-' + v.opt_name, False,
- _('ignore errors in ' + v.test_name)) for v in all_verifiers]
-skip_opts = [('', 'skip-all', False, _("skip all style error checks"))] + \
- [('', 'skip-' + v.opt_name, False,
- _('skip checking for ' + v.test_name)) for v in all_verifiers]
-all_opts = fix_opts + ignore_opts + skip_opts
-
-
-cmdtable = {
- '^m5style' : (
- do_check_style, all_opts + _common_region_options + commands.walkopts,
- _('hg m5style [-a] [FILE]...')),
-}
-
-if __name__ == '__main__':
- print >> sys.stderr, "This file cannot be used from the command line. Use"
- print >> sys.stderr, "style.py instead."
- sys.exit(1)
"auto" : detect_repo,
"none" : lambda : None,
"git" : repo.GitRepo,
- "hg" : repo.MercurialRepo,
}
if __name__ == '__main__':
return None
# directories and files to ignore by default
-default_dir_ignore = frozenset(('.hg', '.svn', 'build', 'ext'))
+default_dir_ignore = frozenset(('build', 'ext'))
default_file_ignore = frozenset(('parsetab.py', ))
def find_files(base, languages=all_languages,
[ self.git, "show", "%s:%s" % (self.head_revision(), name) ]) \
.decode()
-class MercurialRepo(AbstractRepo):
- def __init__(self):
- self.hg = "hg"
- self._repo_base = None
-
- def repo_base(self):
- if self._repo_base is None:
- self._repo_base = subprocess.check_output(
- [ self.hg, "root" ]).decode().rstrip("\n")
-
- return self._repo_base
-
- def staged_files(self):
- added = []
- modified = []
- for action, fname in self.status():
- if action == "M":
- modified.append(fname)
- elif action == "A":
- added.append(fname)
-
- return added, modified
-
- def staged_regions(self, fname, context=0):
- return self.modified_regions(fname, context=context)
-
- def modified_regions(self, fname, context=0):
- old = self.file_from_tip(fname).split("\n")
- new = self.get_file(fname).split("\n")
-
- return modified_regions(old, new, context=context)
-
- def status(self, filter=None):
- files = subprocess.check_output([ self.hg, "status" ]) \
- .decode().rstrip("\n")
- if files:
- return [ f.split(" ") for f in files.split("\n") ]
- else:
- return []
-
- def file_from_tip(self, name):
- return subprocess.check_output([ self.hg, "cat", name ]) \
- .decode()
-
def detect_repo(path="."):
"""Auto-detect the revision control system used for a source code
directory. The code starts searching for repository meta data
_repo_types = (
(".git", GitRepo),
- (".hg", MercurialRepo),
)
repo_types = []
def write(self, string):
sys.stdout.write(string)
-class MercurialUI(UserInterface):
- def __init__(self, ui, *args, **kwargs):
- super(MercurialUI, self).__init__(*args, **kwargs)
- self.hg_ui = ui
-
- def _prompt(self, prompt, results, default):
- return self.hg_ui.prompt(prompt, default=default)
-
- def write(self, string):
- self.hg_ui.write(string)
-
-
def _re_ignore(expr):
"""Helper function to create regular expression ignore file
matcher functions"""