diff options
Diffstat (limited to 'core/checktree')
-rwxr-xr-x | core/checktree | 113 |
1 files changed, 0 insertions, 113 deletions
diff --git a/core/checktree b/core/checktree deleted file mode 100755 index b0b9cfa..0000000 --- a/core/checktree +++ /dev/null @@ -1,113 +0,0 @@ -#!/usr/bin/python -E - -import sys, os, re - -excludes = [r'.*?/\.obj.*?', - r'.*?~', - r'.*?\/.DS_Store', - r'.*?\/.gdb_history', - r'.*?\/buildspec.mk', - r'.*?/\..*?\.swp', - r'.*?/out/.*?', - r'.*?/install/.*?'] - -excludes_compiled = map(re.compile, excludes) - -def filter_excludes(str): - for e in excludes_compiled: - if e.match(str): - return False - return True - -def split_perforce_parts(s): - spaces = ((s.count(" ") + 1) / 3) * 2 - pos = 0 - while spaces > 0: - pos = s.find(" ", pos) + 1 - spaces = spaces - 1 - return s[pos:] - -def quotate(s): - return '"' + s + '"' - -class PerforceError(Exception): - def __init__(self,value): - self.value = value - def __str__(self): - return repr(self.value) - - -def run(command, regex, filt): - def matchit(s): - m = regex_compiled.match(s) - if m: - return m.group(1) - else: - return "" - def filterit(s): - if filt_compiled.match(s): - return True - else: - return False - - fd = os.popen(command); - lines = fd.readlines() - status = fd.close() - if status: - raise PerforceError("error calling " + command) - - regex_compiled = re.compile(regex) - filt_compiled = re.compile(filt) - - if len(lines) >= 1: - lines = filter(filterit, lines) - if len(lines) >= 1: - return map(matchit, lines) - return None - -try: - if len(sys.argv) == 1: - do_exclude = True - elif len(sys.argv) == 2 and sys.argv[1] == "-a": - do_exclude = False - else: - print "usage: checktree [-a]" - print " -a don't filter common crud in the tree" - sys.exit(1) - - have = run("p4 have ...", r'[^#]+#[0-9]+ - (.*)', r'.*') - - cwd = os.getcwd() - files = run("find . -not -type d", r'.(.*)', r'.*') - files = map(lambda s: cwd+s, files) - - added_depot_path = run("p4 opened ...", r'([^#]+)#.*', r'.*?#[0-9]+ - add .*'); - added = [] - if added_depot_path: - added_depot_path = map(quotate, added_depot_path) - - where = "p4 where " + " ".join(added_depot_path) - added = run(where, r'(.*)', r'.*') - added = map(split_perforce_parts, added) - - extras = [] - - # Python 2.3 -- still default on Mac OS X -- does not have set() - # Make dict's here to support the "in" operations below - have = dict().fromkeys(have, 1) - added = dict().fromkeys(added, 1) - - for file in files: - if not file in have: - if not file in added: - extras.append(file) - - if do_exclude: - extras = filter(filter_excludes, extras) - - for s in extras: - print s.replace(" ", "\\ ") - -except PerforceError, e: - sys.exit(2) - |