git-pre-commit.py revision 11407
111407Sandreas.sandberg@arm.com#!/usr/bin/env python 211407Sandreas.sandberg@arm.com# 311407Sandreas.sandberg@arm.com# Copyright (c) 2016 ARM Limited 411407Sandreas.sandberg@arm.com# All rights reserved 511407Sandreas.sandberg@arm.com# 611407Sandreas.sandberg@arm.com# The license below extends only to copyright in the software and shall 711407Sandreas.sandberg@arm.com# not be construed as granting a license to any other intellectual 811407Sandreas.sandberg@arm.com# property including but not limited to intellectual property relating 911407Sandreas.sandberg@arm.com# to a hardware implementation of the functionality of the software 1011407Sandreas.sandberg@arm.com# licensed hereunder. You may use the software subject to the license 1111407Sandreas.sandberg@arm.com# terms below provided that you ensure that this notice is replicated 1211407Sandreas.sandberg@arm.com# unmodified and in its entirety in all distributions of the software, 1311407Sandreas.sandberg@arm.com# modified or unmodified, in source code or in binary form. 1411407Sandreas.sandberg@arm.com# 1511407Sandreas.sandberg@arm.com# Redistribution and use in source and binary forms, with or without 1611407Sandreas.sandberg@arm.com# modification, are permitted provided that the following conditions are 1711407Sandreas.sandberg@arm.com# met: redistributions of source code must retain the above copyright 1811407Sandreas.sandberg@arm.com# notice, this list of conditions and the following disclaimer; 1911407Sandreas.sandberg@arm.com# redistributions in binary form must reproduce the above copyright 2011407Sandreas.sandberg@arm.com# notice, this list of conditions and the following disclaimer in the 2111407Sandreas.sandberg@arm.com# documentation and/or other materials provided with the distribution; 2211407Sandreas.sandberg@arm.com# neither the name of the copyright holders nor the names of its 2311407Sandreas.sandberg@arm.com# contributors may be used to endorse or promote products derived from 2411407Sandreas.sandberg@arm.com# this software without specific prior written permission. 2511407Sandreas.sandberg@arm.com# 2611407Sandreas.sandberg@arm.com# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 2711407Sandreas.sandberg@arm.com# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 2811407Sandreas.sandberg@arm.com# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 2911407Sandreas.sandberg@arm.com# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 3011407Sandreas.sandberg@arm.com# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 3111407Sandreas.sandberg@arm.com# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 3211407Sandreas.sandberg@arm.com# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 3311407Sandreas.sandberg@arm.com# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 3411407Sandreas.sandberg@arm.com# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 3511407Sandreas.sandberg@arm.com# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 3611407Sandreas.sandberg@arm.com# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 3711407Sandreas.sandberg@arm.com# 3811407Sandreas.sandberg@arm.com# Authors: Andreas Sandberg 3911407Sandreas.sandberg@arm.com 4011407Sandreas.sandberg@arm.comimport os 4111407Sandreas.sandberg@arm.comimport sys 4211407Sandreas.sandberg@arm.com 4311407Sandreas.sandberg@arm.comfrom style.repo import GitRepo 4411407Sandreas.sandberg@arm.comfrom style.verifiers import all_verifiers, all_regions 4511407Sandreas.sandberg@arm.comfrom style.style import StdioUI 4611407Sandreas.sandberg@arm.com 4711407Sandreas.sandberg@arm.comimport argparse 4811407Sandreas.sandberg@arm.com 4911407Sandreas.sandberg@arm.comparser = argparse.ArgumentParser( 5011407Sandreas.sandberg@arm.com description="gem5 git style checker hook") 5111407Sandreas.sandberg@arm.com 5211407Sandreas.sandberg@arm.comparser.add_argument("--verbose", "-v", action="store_true", 5311407Sandreas.sandberg@arm.com help="Produce verbose output") 5411407Sandreas.sandberg@arm.com 5511407Sandreas.sandberg@arm.comargs = parser.parse_args() 5611407Sandreas.sandberg@arm.com 5711407Sandreas.sandberg@arm.comgit = GitRepo() 5811407Sandreas.sandberg@arm.com 5911407Sandreas.sandberg@arm.comopts = {} 6011407Sandreas.sandberg@arm.comrepo_base = git.repo_base() 6111407Sandreas.sandberg@arm.comcontext = 8 6211407Sandreas.sandberg@arm.comui = StdioUI() 6311407Sandreas.sandberg@arm.com 6411407Sandreas.sandberg@arm.comos.chdir(repo_base) 6511407Sandreas.sandberg@arm.comfailing_files = set() 6611407Sandreas.sandberg@arm.com 6711407Sandreas.sandberg@arm.comfor status, fname in git.status(filter="MA", cached=True): 6811407Sandreas.sandberg@arm.com if args.verbose: 6911407Sandreas.sandberg@arm.com print "Checking %s..." % fname 7011407Sandreas.sandberg@arm.com if status == "M": 7111407Sandreas.sandberg@arm.com regions = git.staged_regions(fname, context=context) 7211407Sandreas.sandberg@arm.com else: 7311407Sandreas.sandberg@arm.com regions = all_regions 7411407Sandreas.sandberg@arm.com 7511407Sandreas.sandberg@arm.com verifiers = [ v(ui, opts, base=repo_base) for v in all_verifiers ] 7611407Sandreas.sandberg@arm.com for v in verifiers: 7711407Sandreas.sandberg@arm.com if v.check(fname, regions): 7811407Sandreas.sandberg@arm.com failing_files.add(fname) 7911407Sandreas.sandberg@arm.com 8011407Sandreas.sandberg@arm.comif failing_files: 8111407Sandreas.sandberg@arm.com print >> sys.stderr 8211407Sandreas.sandberg@arm.com print >> sys.stderr, "Style checker failed for the following files:" 8311407Sandreas.sandberg@arm.com for f in failing_files: 8411407Sandreas.sandberg@arm.com print >> sys.stderr, "\t%s" % f 8511407Sandreas.sandberg@arm.com print >> sys.stderr 8611407Sandreas.sandberg@arm.com print >> sys.stderr, \ 8711407Sandreas.sandberg@arm.com "Please run the style checker manually to fix the offending files.\n" \ 8811407Sandreas.sandberg@arm.com "To check your modifications, run: util/style.py -m" 8911407Sandreas.sandberg@arm.com sys.exit(1) 90