summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorruki <[email protected]>2022-04-16 16:47:27 +0800
committerruki <[email protected]>2022-04-16 16:47:27 +0800
commit4d3e89832a34764cd081d7050fe43be0ce1b0240 (patch)
treeba3474714e2e71db5ed391e1dd152280874b0dda
parent983e8ed319b4e0d84a47d43bcaa3a154e7c74175 (diff)
sync files
-rw-r--r--xmake/modules/private/service/remote_build/filesync.lua2
-rw-r--r--xmake/modules/private/service/remote_build/session.lua29
2 files changed, 28 insertions, 3 deletions
diff --git a/xmake/modules/private/service/remote_build/filesync.lua b/xmake/modules/private/service/remote_build/filesync.lua
index 22db03a2f..2c4024569 100644
--- a/xmake/modules/private/service/remote_build/filesync.lua
+++ b/xmake/modules/private/service/remote_build/filesync.lua
@@ -93,7 +93,7 @@ function filesync:reset()
local manifest_info = manifest[fileitem]
local mtime = os.mtime(filepath)
if not manifest_info or not manifest_info.mtime or mtime > manifest_info.mtime then
- manifest[fileitem] = {sha256 = hash.sha256(fileitem), mtime = mtime}
+ manifest[fileitem] = {sha256 = hash.sha256(filepath), mtime = mtime}
end
end
end
diff --git a/xmake/modules/private/service/remote_build/session.lua b/xmake/modules/private/service/remote_build/session.lua
index 8f333f430..d37facd9a 100644
--- a/xmake/modules/private/service/remote_build/session.lua
+++ b/xmake/modules/private/service/remote_build/session.lua
@@ -26,6 +26,7 @@ import("core.base.global")
import("core.base.option")
import("core.base.hashset")
import("core.base.scheduler")
+import("utils.archive.extract", {alias = "extract_archive"})
import("private.service.config")
import("private.service.message")
import("private.service.remote_build.filesync", {alias = "new_filesync"})
@@ -110,16 +111,40 @@ end
function session:sync(respmsg)
local body = respmsg:body()
local stream = self:stream()
- local manifest = body.manifest
+ local manifest = assert(body.manifest, "manifest not found!")
+ local sourcedir = self:sourcedir()
local archivefile = os.tmpfile() .. ".zip"
+ local archivedir = archivefile .. ".dir"
vprint("%s: sync files in %s ..", self, self:sourcedir())
if stream:recv_file(archivefile) then
vprint("receive archive file, size: %d", os.filesize(archivefile))
+
+ -- extract archive file
+ extract_archive(archivefile, archivedir)
+
-- do sync
+ for _, fileitem in ipairs(manifest.inserted) do
+ vprint("[+]: %s", fileitem)
+ local filepath_server = path.join(sourcedir, fileitem)
+ local filepath_client = path.join(archivedir, fileitem)
+ os.cp(filepath_client, filepath_server)
+ end
+ for _, fileitem in ipairs(manifest.modified) do
+ vprint("[*]: %s", fileitem)
+ local filepath_server = path.join(sourcedir, fileitem)
+ local filepath_client = path.join(archivedir, fileitem)
+ os.cp(filepath_client, filepath_server)
+ end
+ for _, fileitem in ipairs(manifest.removed) do
+ vprint("[-]: %s", fileitem)
+ local filepath_server = path.join(sourcedir, fileitem)
+ os.rm(filepath_server)
+ end
else
raise("receive files failed!")
end
- --os.tryrm(archivefile)
+ os.tryrm(archivefile)
+ os.tryrm(archivedir)
vprint("%s: sync files ok", self)
end