Bug 1307301 - Pack symbols with a python helper and mozjar instead of zip. draft
authorChris Manchester <cmanchester@mozilla.com>
Thu, 27 Apr 2017 20:37:11 -0700
changeset 579970 a981b134819f4dd3fbe1cc25e87b61feb60ac780
parent 579844 b133ec74e3d0813c0951603209fa283ef0efd8b2
child 579971 05b6cfaa6e1c1e45cf619b56632733e73cba967d
push id59431
push userbmo:cmanchester@mozilla.com
push dateThu, 18 May 2017 04:26:52 +0000
bugs1307301
milestone55.0a1
Bug 1307301 - Pack symbols with a python helper and mozjar instead of zip. MozReview-Commit-ID: SKwzZ7l8CS
Makefile.in
python/mozbuild/mozbuild/action/symbols_archive.py
--- a/Makefile.in
+++ b/Makefile.in
@@ -259,25 +259,28 @@ prepsymbolsarchive:
 	$(NSINSTALL) -D $(DIST)/$(PKG_PATH)
 
 ifndef MOZ_AUTOMATION
 prepsymbolsarchive: recurse_syms
 endif
 
 .PHONY: symbolsfullarchive
 symbolsfullarchive: prepsymbolsarchive
-	$(RM) '$(DIST)/$(SYMBOL_FULL_ARCHIVE_BASENAME).zip'
-	cd $(DIST)/crashreporter-symbols && \
-          zip -r5D '../$(PKG_PATH)$(SYMBOL_FULL_ARCHIVE_BASENAME).zip' . -x '*test*' -x '*Test*'
+	$(RM) '$(DIST)/$(PKG_PATH)$(SYMBOL_FULL_ARCHIVE_BASENAME).zip'
+	$(call py_action,symbols_archive,$(abspath '$(DIST)/$(PKG_PATH)$(SYMBOL_FULL_ARCHIVE_BASENAME).zip') \
+                                     $(abspath $(DIST)/crashreporter-symbols) \
+                                     --exclude '*test*' \
+                                     --exclude '*Test*')
 
 .PHONY: symbolsarchive
 symbolsarchive: prepsymbolsarchive
-	$(RM) '$(DIST)/$(SYMBOL_ARCHIVE_BASENAME).zip'
-	cd $(DIST)/crashreporter-symbols && \
-          zip -r5D '../$(PKG_PATH)$(SYMBOL_ARCHIVE_BASENAME).zip' . -i '*.sym'
+	$(RM) '$(DIST)/$(PKG_PATH)$(SYMBOL_ARCHIVE_BASENAME).zip'
+	$(call py_action,symbols_archive,$(abspath '$(DIST)/$(PKG_PATH)$(SYMBOL_ARCHIVE_BASENAME).zip') \
+                                     $(abspath $(DIST)/crashreporter-symbols) \
+                                     --include '**/*.sym')
 
 ifdef MOZ_CRASHREPORTER
 buildsymbols: symbolsfullarchive symbolsarchive
 else
 buildsymbols:
 endif
 
 uploadsymbols:
new file mode 100644
--- /dev/null
+++ b/python/mozbuild/mozbuild/action/symbols_archive.py
@@ -0,0 +1,39 @@
+# This Source Code Form is subject to the terms of the Mozilla Public
+# License, v. 2.0. If a copy of the MPL was not distributed with this
+# file, You can obtain one at http://mozilla.org/MPL/2.0/.
+
+from __future__ import absolute_import, print_function, unicode_literals
+
+import argparse
+import sys
+import os
+
+from mozpack.files import FileFinder
+from mozpack.mozjar import JarWriter
+
+def make_archive(archive_name, base, exclude, include):
+    finder = FileFinder(base, ignore=exclude)
+    if not include:
+        include = ['*']
+
+    archive_basename = os.path.basename(archive_name)
+    with open(archive_name, 'wb') as fh:
+        with JarWriter(fileobj=fh, optimize=False, compress_level=5) as writer:
+            for pat in include:
+                for p, f in finder.find(pat):
+                    print('  Adding to "%s":\n\t"%s"' % (archive_basename, p))
+                    writer.add(p.encode('utf-8'), f.read(), mode=f.mode, skip_duplicates=True)
+
+def main(argv):
+    parser = argparse.ArgumentParser(description='Produce a symbols archive')
+    parser.add_argument('archive', help='Which archive to generate')
+    parser.add_argument('base', help='Base directory to package')
+    parser.add_argument('--exclude', default=[], action='append', help='File patterns to exclude')
+    parser.add_argument('--include', default=[], action='append', help='File patterns to include')
+
+    args = parser.parse_args(argv)
+
+    make_archive(args.archive, args.base, args.exclude, args.include)
+
+if __name__ == '__main__':
+    main(sys.argv[1:])