2
0
Эх сурвалжийг харах

include current version (revision) to generated html

Vladislav Folts 12 жил өмнө
parent
commit
cac35d30cf
4 өөрчлөгдсөн 50 нэмэгдсэн , 18 устгасан
  1. 11 2
      browser/linkjs.py
  2. 4 0
      browser/oberonjs.html
  3. 2 6
      build.cmd
  4. 33 10
      build.py

+ 11 - 2
browser/linkjs.py

@@ -40,9 +40,18 @@ def process(path, out, resolved, resolving, dir):
 	out.write(result)
 	resolved += [path]
 
-def link(input_path, output_path, dir):
+def encode_to_js_string(s):
+	escape = [('\n', '\\n'), ('\r', '\\r'), ('"', '""')]
+	for e in escape:
+		s = s.replace(e[0], e[1])
+	return '"%s"' % s
+
+def link(input_path, output_path, dir, version = None):
 	with open(output_path, "w") as out:
-		prolog = "var imports = {};\n"
+		prolog = ""
+		if not version is None:
+			prolog += 'var buildVersion = %s;\n' % encode_to_js_string(version)
+		prolog += "var imports = {};\n"
 		prolog += 'function require(module){return imports[module];}\n'
 		out.write(prolog)
 		process(input_path, out, [], [], dir)

+ 4 - 0
browser/oberonjs.html

@@ -28,6 +28,7 @@ END test.
 <p id="runTime"></p>
 <p><a href="http://oberspace.dyndns.org">Home</a></p>
 <p><a href="https://github.com/vladfolts/oberonjs">Development</a></p>
+<p id="version"></p>
 
 <script>
 function require(){}
@@ -36,6 +37,9 @@ function require(){}
 <script src="oc.js"></script>
 
 <script>
+if (typeof buildVersion != "undefined")
+	document.getElementById("version").textContent = buildVersion;
+
 function compile(){
 	var src = document.getElementById("source").value;
 	var result;

+ 2 - 6
build.cmd

@@ -1,6 +1,2 @@
-mkdir _out
-cd src
-..\browser\linkjs.py oc.js ../_out/oc.js
-cd ..
-copy browser\oberonjs.html _out
-start _out\oberonjs.html
+build.py _out --no-git
+start _out\oberonjs.html

+ 33 - 10
build.py

@@ -1,26 +1,49 @@
 #!/usr/bin/python
 from browser.linkjs import link
 import os
-import shutil
+import subprocess
 import sys
 
 def run(cmd):
-    code = os.system(cmd)
-    if code:
-        raise Exception('"%s" failed: %d' % (cmd, code))
+    p = subprocess.Popen(cmd, stdout = subprocess.PIPE, stderr = subprocess.STDOUT)
+    return p.stdout.read().decode()
+
+def build(out, use_git):
+    version = None
+    if use_git:
+        print(run('git pull'))
+        version = run('git log -1 --format="%ci%n%H"')
+
+    build_version = None
+    build_version_path = os.path.join(out, 'version.txt')
+    try:
+        with open(build_version_path) as f:
+            build_version = f.read()
+    except:
+        pass
+
+    if (not build_version is None) and build_version == version:
+        print("current html is up to date, do nothing")
+        return
 
-def build(out):
-    run('git pull')
     if not os.path.exists(out):
         os.mkdir(out)
-    link('oc.js', os.path.join(out, 'oc.js'), 'src')
+    link('oc.js', os.path.join(out, 'oc.js'), 'src', version)
 
     with open('browser/oberonjs.html') as input:
         with open(os.path.join(out, 'oberonjs.html'), 'w') as output:
             output.write(input.read())
+    
+    if version is None:
+        if os.path.exists(build_version_path):
+            os.remove(build_version_path)
+    else:
+        with open(build_version_path, 'w') as f:
+            f.write(version)
 
 if __name__ == '__main__':
-    if len(sys.argv) != 2:
-        print 'Pull repo and build html page\nUsage: build.py <output directory>'
+    if len(sys.argv) < 2:
+        print('Pull repo and build html page\nUsage: build.py <output directory> [--no-git]')
         exit(-1)
-    build(sys.argv[1])
+    use_git = len(sys.argv) < 3 or sys.argv[2] != '--no-git'
+    build(sys.argv[1], use_git)