changeset 1083:e7fb974e0c26

add Io checksum and use it for push
author Franklin Schmidt <fschmidt@gmail.com>
date Mon, 21 Nov 2016 22:48:43 -0700
parents ece3567d4df5
children aa967fd73b80
files src/luan/modules/IoLuan.java src/luan/modules/host/Hosting.luan
diffstat 2 files changed, 15 insertions(+), 1 deletions(-) [+]
line wrap: on
line diff
--- a/src/luan/modules/IoLuan.java	Tue Nov 15 19:19:19 2016 -0700
+++ b/src/luan/modules/IoLuan.java	Mon Nov 21 22:48:43 2016 -0700
@@ -225,6 +225,17 @@
 			}
 		}
 
+		public long checksum() throws IOException, LuanException {
+			long cs = 0;
+			InputStream in = new BufferedInputStream(inputStream());
+			int c;
+			while( (c=in.read()) != -1 ) {
+				cs = 31 * cs + c;
+			}
+			in.close();
+			return cs;
+		}
+
 		public LuanTable table() {
 			LuanTable tbl = new LuanTable();
 			try {
@@ -250,6 +261,9 @@
 				tbl.rawPut( "exists", new LuanJavaFunction(
 					LuanIn.class.getMethod( "exists" ), this
 				) );
+				tbl.rawPut( "checksum", new LuanJavaFunction(
+					LuanIn.class.getMethod( "checksum" ), this
+				) );
 			} catch(NoSuchMethodException e) {
 				throw new RuntimeException(e);
 			}
--- a/src/luan/modules/host/Hosting.luan	Tue Nov 15 19:19:19 2016 -0700
+++ b/src/luan/modules/host/Hosting.luan	Mon Nov 21 22:48:43 2016 -0700
@@ -28,7 +28,7 @@
 
 	local function process(there_parent,there,here)
 		if here.is_file() then
-			if there == nil or there.last_modified < here.last_modified() then
+			if there == nil or there.checksum ~= here.checksum() then
 				print("copying "..here.to_string())
 				host.copy_file(domain,password,there_parent.path,here.name(),here.read_binary())
 			end