aboutsummaryrefslogtreecommitdiffstats
path: root/python/servo/command_base.py
diff options
context:
space:
mode:
authoro0Ignition0o <jeremy.lempereur@gmail.com>2018-12-08 15:29:57 +0100
committero0Ignition0o <jeremy.lempereur@gmail.com>2018-12-08 15:44:55 +0100
commit10c9128eb2b8c17a66fdf6563129a9f22d81c787 (patch)
treeb2482be8ee886942dd291ae721374d0a643ac8c3 /python/servo/command_base.py
parent3c19cd49ec2ef0e8608faf9575d9fbee2391a867 (diff)
downloadservo-10c9128eb2b8c17a66fdf6563129a9f22d81c787.tar.gz
servo-10c9128eb2b8c17a66fdf6563129a9f22d81c787.zip
./mach run -n on mac os.
Diffstat (limited to 'python/servo/command_base.py')
-rw-r--r--python/servo/command_base.py72
1 files changed, 55 insertions, 17 deletions
diff --git a/python/servo/command_base.py b/python/servo/command_base.py
index 277f1d3aac1..6c193191fb0 100644
--- a/python/servo/command_base.py
+++ b/python/servo/command_base.py
@@ -9,6 +9,7 @@
from errno import ENOENT as NO_SUCH_FILE_OR_DIRECTORY
from glob import glob
+import shutil
import gzip
import itertools
import locale
@@ -403,6 +404,55 @@ class CommandBase(object):
" --release" if release else ""))
sys.exit()
+ def detach_volume(self, mounted_volume):
+ print("Detaching volume {}".format(mounted_volume))
+ try:
+ subprocess.check_call(['hdiutil', 'detach', mounted_volume])
+ except subprocess.CalledProcessError as e:
+ print("Could not detach volume {} : {}".format(mounted_volume, e.returncode))
+ sys.exit(1)
+
+ def detach_volume_if_attached(self, mounted_volume):
+ if os.path.exists(mounted_volume):
+ self.detach_volume(mounted_volume)
+
+ def mount_dmg(self, dmg_path):
+ print("Mounting dmg {}".format(dmg_path))
+ try:
+ subprocess.check_call(['hdiutil', 'attach', dmg_path])
+ except subprocess.CalledProcessError as e:
+ print("Could not mount Servo dmg : {}".format(e.returncode))
+ sys.exit(1)
+
+ def extract_nightly(self, nightlies_folder, destination_folder, destination_file):
+ print("Extracting to {} ...".format(destination_folder))
+ if is_macosx():
+ mounted_volume = path.join(path.sep, "Volumes", "Servo")
+ self.detach_volume_if_attached(mounted_volume)
+ self.mount_dmg(destination_file)
+ # Servo folder is always this one
+ servo_directory = path.join(path.sep, "Volumes", "Servo", "Servo.app", "Contents", "MacOS")
+ print("Copying files from {} to {}".format(servo_directory, destination_folder))
+ shutil.copytree(servo_directory, destination_folder)
+ self.detach_volume(mounted_volume)
+ else:
+ if is_windows():
+ command = 'msiexec /a {} /qn TARGETDIR={}'.format(
+ os.path.join(nightlies_folder, destination_file), destination_folder)
+ if subprocess.call(command, stdout=PIPE, stderr=PIPE) != 0:
+ print("Could not extract the nightly executable from the msi package.")
+ sys.exit(1)
+ else:
+ with tarfile.open(os.path.join(nightlies_folder, destination_file), "r") as tar:
+ tar.extractall(destination_folder)
+
+ def get_executable(self, destination_folder):
+ if is_windows():
+ return path.join(destination_folder, "PFiles", "Mozilla research", "Servo Tech Demo")
+ if is_linux:
+ return path.join(destination_folder, "servo", "servo")
+ return path.join(destination_folder, "servo")
+
def get_nightly_binary_path(self, nightly_date):
if nightly_date is None:
return
@@ -415,8 +465,7 @@ class CommandBase(object):
if is_windows():
os_prefix = "windows-msvc"
if is_macosx():
- print("The nightly flag is not supported on mac yet.")
- sys.exit(1)
+ os_prefix = "mac"
nightly_date = nightly_date.strip()
# Fetch the filename to download from the build list
repository_index = NIGHTLY_REPOSITORY_URL + "?list-type=2&prefix=nightly"
@@ -467,23 +516,12 @@ class CommandBase(object):
# Extract the downloaded nightly version
if os.path.isdir(destination_folder):
- print("The nightly file {} has already been extracted.".format(
+ print("The nightly folder {} has already been extracted.".format(
destination_folder))
else:
- print("Extracting to {} ...".format(destination_folder))
- if is_windows():
- command = 'msiexec /a {} /qn TARGETDIR={}'.format(
- os.path.join(nightlies_folder, destination_file), destination_folder)
- if subprocess.call(command, stdout=PIPE, stderr=PIPE) != 0:
- print("Could not extract the nightly executable from the msi package.")
- sys.exit(1)
- else:
- with tarfile.open(os.path.join(nightlies_folder, destination_file), "r") as tar:
- tar.extractall(destination_folder)
- bin_folder = path.join(destination_folder, "servo")
- if is_windows():
- bin_folder = path.join(destination_folder, "PFiles", "Mozilla research", "Servo Tech Demo")
- return path.join(bin_folder, "servo{}".format(BIN_SUFFIX))
+ self.extract_nightly(nightlies_folder, destination_folder, destination_file)
+
+ return self.get_executable(destination_folder)
def needs_gstreamer_env(self, target):
try: