summaryrefslogtreecommitdiffstats
path: root/python/mozbuild/mozbuild/repackaging/dmg.py
diff options
context:
space:
mode:
Diffstat (limited to 'python/mozbuild/mozbuild/repackaging/dmg.py')
-rw-r--r--python/mozbuild/mozbuild/repackaging/dmg.py56
1 files changed, 56 insertions, 0 deletions
diff --git a/python/mozbuild/mozbuild/repackaging/dmg.py b/python/mozbuild/mozbuild/repackaging/dmg.py
new file mode 100644
index 0000000000..883927f214
--- /dev/null
+++ b/python/mozbuild/mozbuild/repackaging/dmg.py
@@ -0,0 +1,56 @@
+# 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/.
+
+import tarfile
+from pathlib import Path
+
+import mozfile
+from mozpack.dmg import create_dmg
+
+from mozbuild.bootstrap import bootstrap_toolchain
+from mozbuild.repackaging.application_ini import get_application_ini_value
+
+
+def repackage_dmg(infile, output):
+
+ if not tarfile.is_tarfile(infile):
+ raise Exception("Input file %s is not a valid tarfile." % infile)
+
+ # Resolve required tools
+ dmg_tool = bootstrap_toolchain("dmg/dmg")
+ if not dmg_tool:
+ raise Exception("DMG tool not found")
+ hfs_tool = bootstrap_toolchain("dmg/hfsplus")
+ if not hfs_tool:
+ raise Exception("HFS tool not found")
+ mkfshfs_tool = bootstrap_toolchain("hfsplus/newfs_hfs")
+ if not mkfshfs_tool:
+ raise Exception("MKFSHFS tool not found")
+
+ with mozfile.TemporaryDirectory() as tmp:
+ tmpdir = Path(tmp)
+ mozfile.extract_tarball(infile, tmpdir)
+
+ # Remove the /Applications symlink. If we don't, an rsync command in
+ # create_dmg() will break, and create_dmg() re-creates the symlink anyway.
+ symlink = tmpdir / " "
+ if symlink.is_file():
+ symlink.unlink()
+
+ volume_name = get_application_ini_value(
+ str(tmpdir), "App", "CodeName", fallback="Name"
+ )
+
+ # The extra_files argument is empty [] because they are already a part
+ # of the original dmg produced by the build, and they remain in the
+ # tarball generated by the signing task.
+ create_dmg(
+ source_directory=tmpdir,
+ output_dmg=Path(output),
+ volume_name=volume_name,
+ extra_files=[],
+ dmg_tool=Path(dmg_tool),
+ hfs_tool=Path(hfs_tool),
+ mkfshfs_tool=Path(mkfshfs_tool),
+ )