Skip to content
This repository was archived by the owner on Nov 21, 2018. It is now read-only.

Commit a43cd64

Browse files
authored
Merge pull request #102 from Diggsey/master
Include source packages in manifest
2 parents 693bb69 + 8e0139a commit a43cd64

File tree

1 file changed

+39
-14
lines changed

1 file changed

+39
-14
lines changed

master/build-rust-manifest.py

+39-14
Original file line numberDiff line numberDiff line change
@@ -298,12 +298,16 @@ def build_manifest(rustc_date, rustc_version, rustc_short_version,
298298
mingw_pkg = build_package_def_from_archive("rust-mingw", "dist", rustc_date,
299299
rustc_version, rustc_short_version,
300300
mingw_list)
301+
src_pkg = build_package_def_from_archive("rust-src", "dist", rustc_date,
302+
rustc_version, rustc_short_version,
303+
["*"])
301304

302305
packages["rustc"] = rustc_pkg
303306
packages["rust-std"] = std_pkg
304307
packages["rust-docs"] = doc_pkg
305308
packages["cargo"] = cargo_pkg
306309
packages["rust-mingw"] = mingw_pkg
310+
packages["rust-src"] = src_pkg
307311

308312
# Build the rust package. It is the only one with subcomponents
309313
rust_target_pkgs = {}
@@ -335,6 +339,12 @@ def build_manifest(rustc_date, rustc_version, rustc_short_version,
335339
"target": target,
336340
}]
337341

342+
# The src package is also an extension
343+
extensions += [{
344+
"pkg": "rust-src",
345+
"target": "*",
346+
}]
347+
338348
# The binaries of the 'rust' package are on the local disk.
339349
# url_and_hash_of_rust_package will try to locate them
340350
# and tell us where they are going to live on static.rust-lang.org
@@ -405,8 +415,14 @@ def live_package_url(name, dist_dir, date, version, target):
405415
if name == "cargo":
406416
maybe_channel = "nightly"
407417

408-
url1 = s3_addy + "/" + dist_dir + "/" + date + "/" + name + "-" + version + "-" + target + ".tar.gz"
409-
url2 = s3_addy + "/" + dist_dir + "/" + date + "/" + name + "-" + maybe_channel + "-" + target + ".tar.gz"
418+
if name == "rust-src":
419+
# The build system treats source packages as a separate target for `rustc`
420+
# but for rustup we'd like to treat them as a completely separate package.
421+
url1 = s3_addy + "/" + dist_dir + "/" + date + "/rust-src-" + version + ".tar.gz"
422+
url2 = s3_addy + "/" + dist_dir + "/" + date + "/rust-src-" + maybe_channel + ".tar.gz"
423+
else:
424+
url1 = s3_addy + "/" + dist_dir + "/" + date + "/" + name + "-" + version + "-" + target + ".tar.gz"
425+
url2 = s3_addy + "/" + dist_dir + "/" + date + "/" + name + "-" + maybe_channel + "-" + target + ".tar.gz"
410426

411427
print "checking " + url1
412428
request = urllib2.Request(url1)
@@ -468,39 +484,48 @@ def url_and_hash_of_rust_package(target, rustc_short_version):
468484
}
469485

470486
def write_manifest(manifest, file_path):
487+
def quote(value):
488+
return '"' + str(value).replace('"', r'\"') + '"'
489+
490+
def bare_key(key):
491+
if re.match(r"^[a-zA-Z0-9_\-]+$", key):
492+
return key
493+
else:
494+
return quote(key)
495+
471496
with open(file_path, "w") as f:
472497
f.write('manifest-version = "2"\n')
473-
f.write('date = "' + today + '"\n')
498+
f.write('date = ' + quote(today) + '\n')
474499
f.write('\n')
475500

476501
for name, pkg in sorted(manifest["pkg"].items()):
477-
f.write('[pkg.' + name + ']\n')
478-
f.write('version = "' + pkg["version"] + '"\n')
502+
f.write('[pkg.' + bare_key(name) + ']\n')
503+
f.write('version = ' + quote(pkg["version"]) + '\n')
479504
f.write('\n')
480505

481506
for target, target_pkg in sorted(pkg["target"].items()):
482507
available = "true"
483508
if not target_pkg["available"]: available = "false"
484509

485-
f.write('[pkg.' + name + '.target.' + target + ']\n')
510+
f.write('[pkg.' + bare_key(name) + '.target.' + bare_key(target) + ']\n')
486511
f.write('available = ' + available + '\n')
487-
f.write('url = "' + target_pkg["url"] + '"\n')
488-
f.write('hash = "' + target_pkg["hash"] + '"\n')
512+
f.write('url = ' + quote(target_pkg["url"]) + '\n')
513+
f.write('hash = ' + quote(target_pkg["hash"]) + '\n')
489514
f.write('\n')
490515

491516
components = target_pkg.get("components")
492517
if components:
493518
for component in components:
494-
f.write('[[pkg.' + name + '.target.' + target + '.components]]\n')
495-
f.write('pkg = "' + component["pkg"] + '"\n')
496-
f.write('target = "' + component["target"] + '"\n')
519+
f.write('[[pkg.' + bare_key(name) + '.target.' + bare_key(target) + '.components]]\n')
520+
f.write('pkg = ' + quote(component["pkg"]) + '\n')
521+
f.write('target = ' + quote(component["target"]) + '\n')
497522

498523
extensions = target_pkg.get("extensions")
499524
if extensions:
500525
for extension in extensions:
501-
f.write('[[pkg.' + name + '.target.' + target + '.extensions]]\n')
502-
f.write('pkg = "' + extension["pkg"] + '"\n')
503-
f.write('target = "' + extension["target"] + '"\n')
526+
f.write('[[pkg.' + bare_key(name) + '.target.' + bare_key(target) + '.extensions]]\n')
527+
f.write('pkg = ' + quote(extension["pkg"]) + '\n')
528+
f.write('target = ' + quote(extension["target"]) + '\n')
504529

505530
f.write('\n')
506531

0 commit comments

Comments
 (0)