diff options
| author | ruki <[email protected]> | 2022-04-16 16:47:27 +0800 |
|---|---|---|
| committer | ruki <[email protected]> | 2022-04-16 16:47:27 +0800 |
| commit | 4d3e89832a34764cd081d7050fe43be0ce1b0240 (patch) | |
| tree | ba3474714e2e71db5ed391e1dd152280874b0dda | |
| parent | 983e8ed319b4e0d84a47d43bcaa3a154e7c74175 (diff) | |
sync files
| -rw-r--r-- | xmake/modules/private/service/remote_build/filesync.lua | 2 | ||||
| -rw-r--r-- | xmake/modules/private/service/remote_build/session.lua | 29 |
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 |
