aboutsummaryrefslogtreecommitdiffstats
path: root/python
diff options
context:
space:
mode:
authorJeremy Lempereur <jeremy.lempereur@gmail.com>2018-02-25 23:28:34 +0100
committerJeremy Lempereur <jeremy.lempereur@gmail.com>2018-03-11 17:50:24 +0100
commita132a9bd99776dd9af6a8de3964438d5671cdc69 (patch)
tree2e2357a60fb9499abeb6a50db66d2d18a755bb6b /python
parent29e10d4f88a7564f4d6a4496d3d1be5949962f8a (diff)
downloadservo-a132a9bd99776dd9af6a8de3964438d5671cdc69.tar.gz
servo-a132a9bd99776dd9af6a8de3964438d5671cdc69.zip
Add Windows support to the --nightly | -n flag.
Diffstat (limited to 'python')
-rw-r--r--python/servo/command_base.py29
1 files changed, 20 insertions, 9 deletions
diff --git a/python/servo/command_base.py b/python/servo/command_base.py
index c6111d72bba..a200fa05f24 100644
--- a/python/servo/command_base.py
+++ b/python/servo/command_base.py
@@ -402,8 +402,7 @@ class CommandBase(object):
# Will alow us to fetch the relevant builds from the nightly repository
os_prefix = "linux"
if is_windows():
- print("The nightly flag is not supported on windows yet.")
- sys.exit(1)
+ os_prefix = "windows-msvc"
if is_macosx():
print("The nightly flag is not supported on mac yet.")
sys.exit(1)
@@ -428,10 +427,13 @@ class CommandBase(object):
sys.exit(1)
nightly_target_directory = path.join(self.context.topdir, "target")
+ # ':' is not an authorized character for a file name on Windows
+ # make sure the OS specific separator is used
+ target_file_path = file_to_download.replace(':', '-').split('/')
+ destination_file = os.path.join(
+ nightly_target_directory, os.path.join(*target_file_path))
# Once extracted, the nightly folder name is the tar name without the extension
# (eg /foo/bar/baz.tar.gz extracts to /foo/bar/baz)
- destination_file = path.join(
- nightly_target_directory, file_to_download)
destination_folder = os.path.splitext(destination_file)[0]
nightlies_folder = path.join(
nightly_target_directory, 'nightly', os_prefix)
@@ -457,11 +459,20 @@ class CommandBase(object):
print("The nightly file {} has already been extracted.".format(
destination_folder))
else:
- print("Extracting to {}...".format(destination_folder))
- with tarfile.open(os.path.join(nightlies_folder, destination_file), "r") as tar:
- tar.extractall(destination_folder)
-
- return path.join(destination_folder, "servo", "servo")
+ 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))
def build_env(self, hosts_file_path=None, target=None, is_build=False, geckolib=False, test_unit=False):
"""Return an extended environment dictionary."""