From ed84388b85d86a192f608bcb3e64d9894f767fad Mon Sep 17 00:00:00 2001 From: Nathan Binkert Date: Sat, 14 Jun 2008 19:37:26 -0700 Subject: Add hg commands for style check so you can check at times other than commit --- util/style.py | 60 +++++++++++++++++++++++++++++++++++++++++++++-------------- 1 file changed, 46 insertions(+), 14 deletions(-) (limited to 'util') diff --git a/util/style.py b/util/style.py index a6a2377ae..8b0f48fb9 100644 --- a/util/style.py +++ b/util/style.py @@ -1,5 +1,6 @@ #! /usr/bin/env python -# Copyright (c) 2007 The Regents of The University of Michigan +# Copyright (c) 2006 The Regents of The University of Michigan +# Copyright (c) 2007 The Hewlett-Packard Development Company # All rights reserved. # # Redistribution and use in source and binary forms, with or without @@ -260,35 +261,42 @@ def modified_lines(old_data, new_data, max_lines): break return modified -def check_whitespace(ui, repo, hooktype, node, parent1, parent2): - from mercurial import mdiff +def do_check_whitespace(ui, repo, *files, **args): + """check files for proper m5 style guidelines""" + from mercurial import mdiff, util - if hooktype != 'pretxncommit': - raise AttributeError, \ - "This hook is only meant for pretxncommit, not %s" % hooktype + if files: + files = frozenset(files) + + def skip(name): + return files and name in files - tabsize = 8 - verbose = ui.configbool('style', 'verbose', False) def prompt(name, fixonly=None): - result = ui.prompt("(a)bort, (i)gnore, or (f)ix?", "^[aif]$", "a") + if args.get('auto', False): + result = 'f' + else: + result = ui.prompt("(a)bort, (i)gnore, or (f)ix?", "^[aif]$", "a") if result == 'a': return True elif result == 'i': pass elif result == 'f': - fixwhite(repo.wjoin(name), tabsize, fixonly) + fixwhite(repo.wjoin(name), args['tabsize'], fixonly) else: - raise RepoError, "Invalid response: '%s'" % result + raise util.Abort(_("Invalid response: '%s'") % result) return False modified, added, removed, deleted, unknown, ignore, clean = repo.status() for fname in added: + if skip(fname): + continue + ok = True for line,num in checkwhite(repo.wjoin(fname)): ui.write("invalid whitespace in %s:%d\n" % (fname, num)) - if verbose: + if ui.verbose: ui.write(">>%s<<\n" % line[-1]) ok = False @@ -298,6 +306,9 @@ def check_whitespace(ui, repo, hooktype, node, parent1, parent2): wctx = repo.workingctx() for fname in modified: + if skip(fname): + continue + if not whitespace_file(fname): continue @@ -321,7 +332,7 @@ def check_whitespace(ui, repo, hooktype, node, parent1, parent2): continue ui.write("invalid whitespace: %s:%d\n" % (fname, i+1)) - if verbose: + if ui.verbose: ui.write(">>%s<<\n" % line[:-1]) fixonly.add(i) @@ -329,6 +340,14 @@ def check_whitespace(ui, repo, hooktype, node, parent1, parent2): if prompt(fname, fixonly): return True +def check_whitespace(ui, repo, hooktype, node, parent1, parent2): + if hooktype != 'pretxncommit': + raise AttributeError, \ + "This hook is only meant for pretxncommit, not %s" % hooktype + + args = { 'tabsize' : 8 } + do_check_whitespace(ui, repo, **args) + def check_format(ui, repo, hooktype, node, parent1, parent2): if hooktype != 'pretxncommit': raise AttributeError, \ @@ -350,10 +369,23 @@ def check_format(ui, repo, hooktype, node, parent1, parent2): elif result.startswith('a'): return True else: - raise RepoError, "Invalid response: '%s'" % result + raise util.Abort(_("Invalid response: '%s'") % result) return False +try: + from mercurial.i18n import _ +except ImportError: + def _(arg): + return arg + +cmdtable = { + '^m5style' : + ( do_check_whitespace, + [ ('a', 'auto', False, _("automatically fix whitespace")), + ('t', 'tabsize', 8, _("Number of spaces TAB indents")) ], + _('hg m5check [-t ] [FILE]...')), +} if __name__ == '__main__': import getopt -- cgit v1.2.3