Bug 1307301 - Pack symbols with a python helper and mozjar instead of zip. r=ted
authorChris Manchester <cmanchester@mozilla.com>
Thu, 27 Apr 2017 20:37:11 -0700
changeset 358973 fdd37b2a2451cbd91a193de9bacc8ee647a55d68
parent 358972 bc320d3634ee049c5ee19cc177232efe51b1b507
child 358974 8f6ff09a8a82785d77f7c1f3d6f6686f0a50fe82
push id90420
push usercbook@mozilla.com
push dateThu, 18 May 2017 13:00:03 +0000
treeherdermozilla-inbound@da3f45e77632 [default view] [failures only]
perfherder[talos] [build metrics] [platform microbench] (compared to previous push)
reviewersted
bugs1307301
milestone55.0a1
first release with
nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
last release without
nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
Bug 1307301 - Pack symbols with a python helper and mozjar instead of zip. r=ted 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:])