Skip to content

Commit

Permalink
OS-1823 git-pbchk should not depend on mercurial
Browse files Browse the repository at this point in the history
Reviewed by: Richard Lowe <richlowe@richlowe.net>
  • Loading branch information
jclulow committed Jan 24, 2013
1 parent cbe84e2 commit bfb56a4
Show file tree
Hide file tree
Showing 5 changed files with 103 additions and 10 deletions.
3 changes: 3 additions & 0 deletions usr/src/pkg/manifests/developer-build-onbld.mf
Expand Up @@ -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)
Expand Down Expand Up @@ -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
Expand Down
91 changes: 91 additions & 0 deletions 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
2 changes: 2 additions & 0 deletions usr/src/tools/onbld/Scm/Makefile
Expand Up @@ -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
Expand All @@ -29,6 +30,7 @@ include ../../Makefile.tools
PYSRCS = \
__init__.py \
Backup.py \
Ignore.py \
Version.py \
WorkSpace.py

Expand Down
6 changes: 4 additions & 2 deletions usr/src/tools/onbld/hgext/cdm.py
Expand Up @@ -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
Expand Down Expand Up @@ -92,14 +93,15 @@
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:
Version.check_version()
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
Expand Down Expand Up @@ -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
Expand Down
11 changes: 3 additions & 8 deletions usr/src/tools/scripts/git-pbchk.py
Expand Up @@ -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
Expand All @@ -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
Expand All @@ -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

Expand Down Expand Up @@ -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):
Expand Down

0 comments on commit bfb56a4

Please sign in to comment.