From 6b8a3185e711f1c09a44924700ea2877b2dcf4df Mon Sep 17 00:00:00 2001 From: Alexandre Terrasa Date: Thu, 16 Jul 2015 17:54:48 -0400 Subject: [PATCH] nitj: improve Ant cache by not rewritting unchanged file Signed-off-by: Alexandre Terrasa --- src/compiler/java_compiler.nit | 28 +++++++++++++++++++++++----- 1 file changed, 23 insertions(+), 5 deletions(-) diff --git a/src/compiler/java_compiler.nit b/src/compiler/java_compiler.nit index 3da2a81..c229f88 100644 --- a/src/compiler/java_compiler.nit +++ b/src/compiler/java_compiler.nit @@ -90,14 +90,32 @@ redef class ModelBuilder fun write_java_files(compiler: JavaCompiler): Array[String] do var jfiles = new Array[String] for f in compiler.files do - var file = new FileWriter.open("{compiler.compile_dir}/{f.filename}") + var filepath = "{compiler.compile_dir}/{f.filename}" + var file = cache_file(filepath) for line in f.lines do file.write(line) - file.close + close_cache(filepath, file) jfiles.add(f.filename) end return jfiles end + # Cache a file as `{filepath}.tmp` and replace the original if different + private fun cache_file(filepath: String): FileWriter do + if toolcontext.opt_ant.value and filepath.file_exists then + return new FileWriter.open("{filepath}.tmp") + else + return new FileWriter.open(filepath) + end + end + + # Close the writer and move tmp file to original if modified + private fun close_cache(filepath: String, file: FileWriter) do + file.close + if "{filepath}.tmp".file_exists then + sys.system("if ! diff {filepath}.tmp {filepath} > /dev/null; then mv {filepath}.tmp {filepath}; else rm {filepath}.tmp; fi") + end + end + # Compile Java generated files using `make` fun build_with_make(compiler: JavaCompiler, jfiles: Array[String]) do write_manifest(compiler) @@ -172,18 +190,18 @@ redef class ModelBuilder antfile.write("") antfile.write(" ") antfile.write(" ") - antfile.write(" ") + antfile.write(" ") antfile.write(" ") antfile.write(" ") antfile.write(" ") antfile.write(" ") - antfile.write(" ") + antfile.write(" ") antfile.write(" ") antfile.write(" ") antfile.write(" ") antfile.write("") antfile.close - self.toolcontext.info("Generated antfile: {antname}", 2) + toolcontext.info("Generated antfile: {antname}", 2) end # Write the Java manifest file -- 1.7.9.5