1  | !7  | 
2  | |
3  | sS standardCredentials() { ret ""; } // public snippets only
 | 
4  | |
5  | // (transpilation md5, snippetID) => jar file  | 
6  | //static new SerializeComputations<PairS, File> computations;  | 
7  | // transpilation md5 => jar file  | 
8  | static new SerializeComputations<S, File> computations;  | 
9  | |
10  | static File compileSrcLib(S srcLibID) {
 | 
11  | new CompilerBot2 subBot;  | 
12  | subBot.dontCompile = true;  | 
13  | ret assertFileExists(subBot.compileSnippet(srcLibID));  | 
14  | }  | 
15  | |
16  | html {
 | 
17  | // lock lock; // now using SerializeComputations  | 
18  | |
19  | uri = dropPrefixSlash(uri);  | 
20  | S snippetID = fsI(uri);  | 
21  |   if (!isSnippetPublic(snippetID)) fail("Snippet not public: " + snippetID);
 | 
22  | S transpiledSrc = getServerTranspiled2(snippetID);  | 
23  | |
24  | // md5 check (if parameter supplied)  | 
25  | |
26  |   S md5 = params.get('md5);
 | 
27  | S srcMD5 = md5(transpiledSrc);  | 
28  | if (md5 != null && !eq(md5, srcMD5)) ret "md5 mismatch";  | 
29  |   bool forceCompilation = eq(params.get("forceCompilation"), "1");
 | 
30  | |
31  | File jar;  | 
32  |   try {
 | 
33  |     jar = computations.get(srcMD5/*, snippetID)*/, -> {
 | 
34  |       print("Entering compilation (forceCompilation=" + forceCompilation + ")");
 | 
35  | new CompilerBot2 bot;  | 
36  | bot.forceCompilation = forceCompilation;  | 
37  | bot.compileSrcLib = lambda1 compileSrcLib;  | 
38  | ret bot.compileSnippet(snippetID);  | 
39  | });  | 
40  |   } catch print e {
 | 
41  | // dexcompile.php can't handle code 500  | 
42  |     ret /*subBot_serve500*/("Error. " + e);
 | 
43  | }  | 
44  | |
45  |   bool forceRepackage = eq("1", params.get("repackage"));
 | 
46  |   bool withLibs = eq("1", params.get("withLibs"));
 | 
47  |   bool noCompiler = eq("1", params.get("noCompiler"));
 | 
48  |   bool withX30 = eq("1", params.get("withX30"));
 | 
49  |   bool noSrc = eq("1", params.get("noSrc"));
 | 
50  |   bool dynamicObjectOnly = eq("dynamicObjectOnly", params.get("mode"));
 | 
51  |   bool uncompressed = eq("1", params.get("uncompressed"));
 | 
52  | |
53  | File jar2 = jar;  | 
54  | if (withLibs) jar2 = appendToBaseFileName(jar2, ".with-libs");  | 
55  | if (noCompiler) jar2 = appendToBaseFileName(jar2, ".no-compiler");  | 
56  | if (dynamicObjectOnly) jar2 = appendToBaseFileName(jar2, ".dynamicObjectOnly");  | 
57  | if (noSrc) jar2 = appendToBaseFileName(jar2, ".noSrc");  | 
58  | if (uncompressed) jar2 = appendToBaseFileName(jar2, ".uncomp");  | 
59  | |
60  | bool withSrc = !noSrc;  | 
61  | |
62  | IPred<S> generalFileFilter = f ->  | 
63  | (withSrc || !endsWith(f, ".java"))  | 
64  | && !startsWith(f, "META-INF/versions/"); // see flatlaf jar  | 
65  | |
66  |   if (!eq(jar, jar2)) {
 | 
67  |     if (fileLength(jar2) <= 22 || forceRepackage) {
 | 
68  | temp var jarOut = zipOutputStream(jar2);  | 
69  | if (uncompressed) jarOut.setMethod(ZipOutputStream.STORED);  | 
70  | new Set<S> entries;  | 
71  | |
72  | text2zip(jarOut, "source.txt", f2s(jar2));  | 
73  | |
74  | zip2zip_collectFiles(jar, jarOut, entries, generalFileFilter);  | 
75  | |
76  |       if (withLibs) {
 | 
77  | Pair<S, LS> srcAndLibs = extractLibsFromTranspilation(transpiledSrc);  | 
78  |         fOr (S libID : srcAndLibs.b) {
 | 
79  |           File fixer = compilerBotDestDir("fixer" + psI(libID) + ".jar");
 | 
80  | |
81  |           if (fileExists(fixer)) {
 | 
82  |             println("APPLYING FIXER: " + fixer);
 | 
83  | zip2zip_collectFiles(fixer, jarOut, entries);  | 
84  | }  | 
85  | |
86  | zip2zip_collectFiles(loadLibraryOrSrcLib(libID, lambda1 compileSrcLib), jarOut, entries, generalFileFilter);  | 
87  | }  | 
88  | }  | 
89  | |
90  | if (withX30)  | 
91  | zip2zip_collectFiles(pathToJavaxJar(), jarOut, entries);  | 
92  | else if (noCompiler)  | 
93  | zip2zip_collectFiles(pathToJavaxJar(), jarOut, entries, name -> !  | 
94  | startsWithOneOf(name, "org/eclipse/", "META-INF/"));  | 
95  | else if (dynamicObjectOnly)  | 
96  | zip2zip_collectFiles(pathToJavaxJar(), jarOut, entries, name -> contains(name, "DynamicObject"));  | 
97  | }  | 
98  | |
99  | jar = jar2;  | 
100  | }  | 
101  | |
102  |   print("Serving jar for " + snippetID + ": " + renderFileInfo(jar));
 | 
103  |   if (eq(params.get("makeJarOnly"), "1"))
 | 
104  | ret "OK: " + f2s(jar);  | 
105  | else  | 
106  | ret subBot_serveFileWithName(jar, psI(snippetID) + ".jar", "application/java-archive");  | 
107  | }  | 
Began life as a copy of #1020140
download show line numbers debug dex old transpilations
Travelled to 2 computer(s): bhatertpkbcr, mqqgnosmbjvj
No comments. add comment
| Snippet ID: | #1033736 | 
| Snippet name: | Jar Web Bot backup | 
| Eternal ID of this version: | #1033736/1 | 
| Text MD5: | 73ee5e9be183bc0d2ce732daa07a4b8b | 
| Author: | stefan | 
| Category: | javax / web | 
| Type: | JavaX module (desktop) | 
| Public (visible to everyone): | Yes | 
| Archived (hidden from active list): | No | 
| Created/modified: | 2021-12-31 21:25:28 | 
| Source code size: | 3932 bytes / 107 lines | 
| Pitched / IR pitched: | No / No | 
| Views / Downloads: | 521 / 826 | 
| Referenced in: | [show references] |