aboutsummaryrefslogtreecommitdiffstats
path: root/tools/node_modules/expresso/deps/jscoverage/js/config/check-sync-dirs.py
diff options
context:
space:
mode:
Diffstat (limited to 'tools/node_modules/expresso/deps/jscoverage/js/config/check-sync-dirs.py')
-rw-r--r--tools/node_modules/expresso/deps/jscoverage/js/config/check-sync-dirs.py108
1 files changed, 108 insertions, 0 deletions
diff --git a/tools/node_modules/expresso/deps/jscoverage/js/config/check-sync-dirs.py b/tools/node_modules/expresso/deps/jscoverage/js/config/check-sync-dirs.py
new file mode 100644
index 0000000..916696e
--- /dev/null
+++ b/tools/node_modules/expresso/deps/jscoverage/js/config/check-sync-dirs.py
@@ -0,0 +1,108 @@
+# check-sync-dirs.py --- check that one directory is an exact subset of another
+#
+# Usage: python check-sync-dirs.py COPY ORIGINAL
+#
+# Check that the files present in the directory tree COPY are exact
+# copies of their counterparts in the directory tree ORIGINAL. COPY
+# need not have all the files in ORIGINAL, but COPY may not have files
+# absent from ORIGINAL.
+#
+# Each directory in COPY may have a file named
+# 'check-sync-exceptions', which lists files in COPY that need not be
+# the same as the corresponding file in ORIGINAL, or exist at all in
+# ORIGINAL. (The 'check-sync-exceptions' file itself is always
+# treated as exceptional.) Blank lines and '#' comments in the file
+# are ignored.
+
+import sys
+import os
+from os.path import join
+import filecmp
+import textwrap
+import fnmatch
+
+if len(sys.argv) != 3:
+ print >> sys.stderr, "Usage: %s COPY ORIGINAL" % sys.argv[0]
+ sys.exit(1)
+
+copy = sys.argv[1]
+original = sys.argv[2]
+
+# Ignore detritus left lying around by editing tools.
+ignored_patterns = ['*~', '.#*', '#*#', '*.orig', '*.rej']
+
+# Return the contents of FILENAME, a 'check-sync-exceptions' file, as
+# a dictionary whose keys are exactly the list of filenames, along
+# with the basename of FILENAME itself. If FILENAME does not exist,
+# return the empty dictionary.
+def read_exceptions(filename):
+ if (os.path.exists(filename)):
+ f = file(filename)
+ exceptions={}
+ for line in f:
+ line = line.strip()
+ if line != '' and line[0] != '#':
+ exceptions[line] = None
+ exceptions[os.path.basename (filename)] = None
+ f.close()
+ return exceptions
+ else:
+ return {}
+
+# Return true if FILENAME matches any pattern in the list of filename
+# patterns PATTERNS.
+def fnmatch_any(filename, patterns):
+ for pattern in patterns:
+ if fnmatch.fnmatch(filename, pattern):
+ return True
+ return False
+
+# Check the contents of the directory tree COPY against ORIGINAL. For each
+# file that differs, apply REPORT to COPY, ORIGINAL, and the file's
+# relative path. COPY and ORIGINAL should be absolute. Ignore files
+# that match patterns given in the list IGNORE.
+def check(copy, original, ignore, report):
+ os.chdir(copy)
+ for (dirpath, dirnames, filenames) in os.walk('.'):
+ exceptions = read_exceptions(join(dirpath, 'check-sync-exceptions'))
+ for filename in filenames:
+ if filename in exceptions:
+ continue
+ if fnmatch_any(filename, ignore):
+ continue
+ relative_name = join(dirpath, filename)
+ original_name = join(original, relative_name)
+ if (os.path.exists(original_name)
+ and filecmp.cmp(relative_name, original_name)):
+ continue
+ report(copy, original, relative_name)
+
+
+differences_found = False
+
+# Print an error message for DIFFERING, which was found to differ
+# between COPY and ORIGINAL. Set the global variable differences_found.
+def report(copy, original, differing):
+ global differences_found
+ if not differences_found:
+ print >> sys.stderr, "TEST-FAIL | build file copies are not in sync"
+ print >> sys.stderr, "file(s) found in: %s" % (copy)
+ print >> sys.stderr, ("differ from their originals in: %s"
+ % (original))
+ print >> sys.stderr, "file differs: %s" % (differing)
+ differences_found = True
+
+check(os.path.abspath(copy),
+ os.path.abspath(original),
+ ignored_patterns,
+ report)
+
+if differences_found:
+ msg=('''In general, the files in '%s' should always be exact copies of
+originals in '%s'. A change made to one should also be made to the
+other. See 'check-sync-dirs.py' for more details.'''
+ % (copy, original))
+ print >> sys.stderr, textwrap.fill(msg, 75)
+ sys.exit(1)
+
+sys.exit(0)