Skip to content
Browse files

OS-1823 git-pbchk should not depend on mercurial

Reviewed by: Richard Lowe <richlowe@richlowe.net>
  • Loading branch information...
1 parent cbe84e2 commit bfb56a46ed22310699783e45d5a609dd541bb536 @jclulow jclulow committed
View
3 usr/src/pkg/manifests/developer-build-onbld.mf
@@ -23,6 +23,7 @@
# Copyright (c) 2010, Oracle and/or its affiliates. All rights reserved.
# Copyright 2010, Richard Lowe
# Copyright 2012, Piotr Jasiukajtis
+# Copyright (c) 2013, Joyent, Inc. All rights reserved.
#
set name=pkg.fmri value=pkg:/developer/build/onbld@$(PKGVERS)
@@ -171,6 +172,8 @@ file path=opt/onbld/lib/python2.6/onbld/Checks/__init__.py mode=0444
file path=opt/onbld/lib/python2.6/onbld/Checks/__init__.pyc mode=0444
file path=opt/onbld/lib/python2.6/onbld/Scm/Backup.py mode=0444
file path=opt/onbld/lib/python2.6/onbld/Scm/Backup.pyc mode=0444
+file path=opt/onbld/lib/python2.6/onbld/Scm/Ignore.py mode=0444
+file path=opt/onbld/lib/python2.6/onbld/Scm/Ignore.pyc mode=0444
file path=opt/onbld/lib/python2.6/onbld/Scm/Version.py mode=0444
file path=opt/onbld/lib/python2.6/onbld/Scm/Version.pyc mode=0444
file path=opt/onbld/lib/python2.6/onbld/Scm/WorkSpace.py mode=0444
View
91 usr/src/tools/onbld/Scm/Ignore.py
@@ -0,0 +1,91 @@
+#
+# Permission is hereby granted, free of charge, to any person obtaining a copy
+# of this software and associated documentation files (the "Software"), to deal
+# in the Software without restriction, including without limitation the rights
+# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+# copies of the Software, and to permit persons to whom the Software is
+# furnished to do so, subject to the following conditions:
+#
+# The above copyright notice and this permission notice shall be included in
+# all copies or substantial portions of the Software.
+#
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+# THE SOFTWARE
+#
+# Copyright (c) 2013, Joyent Inc. All rights reserved.
+#
+
+'''
+Process our ignore/exception_list file format.
+
+The format is broadly similar, if not identical, to .gitignore and .hgignore
+files.
+'''
+
+import re
+import fnmatch
+
+RE_SYNTAX = re.compile(r'^syntax:\s*(.*)\s*$')
+
+#
+# It is important that this module not rely on Mercurial
+#
+
+def _read_ignore_file(ignorefile):
+ '''Read an ignore file and return an array of regular expressions
+ to match ignored paths.'''
+
+ syntax = 'regex'
+ ignore_list = []
+ lc = 0
+
+ with open(ignorefile, 'r') as f:
+ for l in f:
+ lc += 1
+ # Remove comments and blank lines
+ l = l.split('#', 2)[0].strip()
+ if l == '':
+ continue
+ # Process "syntax:" lines
+ m = RE_SYNTAX.match(l)
+ if m:
+ syntax = m.group(1)
+ continue
+ # All other lines are considered patterns
+ if (syntax == 'glob'):
+ ignore_list.append(re.compile('.*' + fnmatch.translate(l)))
+ elif (syntax == 'regex'):
+ ignore_list.append(re.compile(l))
+ else:
+ raise Exception('%s:%d: syntax "%s" is not supported' %
+ (ignorefile, lc, syntax))
+
+ return ignore_list
+
+def ignore(root, ignorefiles):
+ # If we aren't provided any ignore files, we'll never ignore
+ # any paths:
+ if (len(ignorefiles) < 1):
+ return lambda x: False
+
+ ignore_list = []
+ for ignorefile in ignorefiles:
+ ignore_list.extend(_read_ignore_file(ignorefile))
+
+ # If the ignore files contained no patterns, we'll never ignore
+ # any paths:
+ if (len(ignore_list) < 1):
+ return lambda x: False
+
+ def _ignore_func(path):
+ for regex in ignore_list:
+ if (regex.match(path)):
+ return True
+ return False
+
+ return _ignore_func
View
2 usr/src/tools/onbld/Scm/Makefile
@@ -21,6 +21,7 @@
#
# Copyright (c) 2008, 2010, Oracle and/or its affiliates. All rights reserved.
+# Copyright (c) 2013, Joyent Inc. All rights reserved.
#
include $(SRC)/Makefile.master
@@ -29,6 +30,7 @@ include ../../Makefile.tools
PYSRCS = \
__init__.py \
Backup.py \
+ Ignore.py \
Version.py \
WorkSpace.py
View
6 usr/src/tools/onbld/hgext/cdm.py
@@ -16,6 +16,7 @@
#
# Copyright (c) 2008, 2010, Oracle and/or its affiliates. All rights reserved.
# Copyright 2008, 2011 Richard Lowe
+# Copyright (c) 2013, Joyent Inc. All rights reserved.
#
'''OpenSolaris extensions to Mercurial
@@ -92,6 +93,7 @@
sys.path.insert(2, os.path.join(os.path.dirname(__file__), "..", ".."))
from onbld.Scm import Version
+from onbld.Scm import Ignore
from mercurial import util
try:
@@ -99,7 +101,7 @@
except Version.VersionMismatch, badversion:
raise util.Abort("Version Mismatch:\n %s\n" % badversion)
-from mercurial import cmdutil, ignore, node, patch
+from mercurial import cmdutil, node, patch
from onbld.Scm.WorkSpace import WorkSpace, WorkList
from onbld.Scm.Backup import CdmBackup
@@ -167,7 +169,7 @@ def f(path):
ignorefiles.append(f)
if ignorefiles:
- ign = ignore.ignore(repo.root, ignorefiles, repo.ui.warn)
+ ign = Ignore.ignore(repo.root, ignorefiles)
return canonified_check(ign)
else:
return util.never
View
11 usr/src/tools/scripts/git-pbchk.py
@@ -17,6 +17,7 @@
#
# Copyright (c) 2008, 2010, Oracle and/or its affiliates. All rights reserved.
# Copyright 2008, 2012 Richard Lowe
+# Copyright (c) 2013, Joyent Inc. All rights reserved.
#
import getopt
@@ -28,10 +29,6 @@
from cStringIO import StringIO
-# This is necessary because, in a fit of pique, we used hg-format ignore lists
-# for NOT files.
-from mercurial import ignore
-
#
# Adjust the load path based on our location and the version of python into
# which it is being loaded. This assumes the normal onbld directory
@@ -47,6 +44,7 @@
#
sys.path.insert(2, os.path.join(os.path.dirname(__file__), ".."))
+from onbld.Scm import Ignore
from onbld.Checks import Comments, Copyright, CStyle, HdrChk
from onbld.Checks import JStyle, Keywords, Mapfile
@@ -177,10 +175,7 @@ def not_check(root, cmd):
ignorefiles = filter(os.path.exists,
[os.path.join(root, ".git", "%s.NOT" % cmd),
os.path.join(root, "exception_lists", cmd)])
- if len(ignorefiles) > 0:
- return ignore.ignore(root, ignorefiles, sys.stderr.write)
- else:
- return lambda x: False
+ return Ignore.ignore(root, ignorefiles)
def gen_files(root, parent, paths, exclude):

0 comments on commit bfb56a4

Please sign in to comment.
Something went wrong with that request. Please try again.