Repository navigation
Expand file tree
/
Copy pathfinalize_paclet.wls
More file actions
66 lines (60 loc) · 2.48 KB
/
Copy pathfinalize_paclet.wls
File metadata and controls
66 lines (60 loc) · 2.48 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
#!/usr/bin/env wolframscript
(* PacletTools 15.0 discovers ChineseSimplified documentation for Language -> All,
but can omit those files from the staged archive while recording $Failed hashes.
Repair only the generated archive, then recompute every declared manifest hash. *)
root = DirectoryName[$InputFileName];
buildRoot = FileNameJoin[{root, "build"}];
latestBuildFile = FileNameJoin[{buildRoot, "latest-build.txt"}];
latestBuild = If[FileExistsQ[latestBuildFile],
StringTrim[Import[latestBuildFile, "Text"]], $Failed
];
archives = If[StringQ[latestBuild] && DirectoryQ[latestBuild],
FileNames["*.paclet", latestBuild], {}
];
If[Length[archives] =!= 1,
Print["FAILED: expected exactly one generated Paclet archive, found ", Length[archives], "."];
Exit[1]
];
archivePath = First[archives];
repairRoot = CreateDirectory[];
result = Quiet@Check[
extracted = ExtractArchive[archivePath, repairRoot];
extractedRoot = SelectFirst[extracted,
DirectoryQ[#] && FileExistsQ[FileNameJoin[{#, "PacletInfo.wl"}]] &,
$Failed
];
sourceChinese = FileNameJoin[{root, "Documentation", "ChineseSimplified"}];
targetChinese = If[StringQ[extractedRoot],
FileNameJoin[{extractedRoot, "Documentation", "ChineseSimplified"}],
$Failed
];
If[! StringQ[targetChinese] || ! DirectoryQ[sourceChinese], Throw[$Failed]];
If[DirectoryQ[targetChinese], DeleteDirectory[targetChinese, DeleteContents -> True]];
CopyDirectory[sourceChinese, targetChinese];
manifestPath = FileNameJoin[{extractedRoot, "PacletManifest.wl"}];
manifest = Get[manifestPath];
files = Lookup[manifest, "Files", $Failed];
If[! ListQ[files], Throw[$Failed]];
manifestFiles = FileNameJoin[{extractedRoot, First[Lookup[#, "File"]]}] & /@ files;
If[! AllTrue[manifestFiles, FileExistsQ], Throw[$Failed]];
manifest["Files"] = MapThread[
Append[KeyDrop[#1, "Hash"], "Hash" -> FileHash[#2, "SHA256", "HexString"]] &,
{files, manifestFiles}
];
Put[manifest, manifestPath];
repairedArchive = FileNameJoin[{latestBuild, "repaired-" <> FileNameTake[archivePath]}];
CreateArchive[extractedRoot, repairedArchive];
If[! FileExistsQ[repairedArchive], Throw[$Failed]];
DeleteFile[archivePath];
RenameFile[repairedArchive, archivePath];
archivePath,
$Failed
];
DeleteDirectory[repairRoot, DeleteContents -> True];
If[StringQ[result] && FileExistsQ[result],
Print["SUCCESS: finalized bilingual Paclet archive:"];
Print[result];
Exit[0],
Print["FAILED: could not finalize bilingual Paclet archive."];
Exit[1]
];