diff options
| author | ruki <[email protected]> | 2022-04-16 15:10:18 +0800 |
|---|---|---|
| committer | ruki <[email protected]> | 2022-04-16 15:10:18 +0800 |
| commit | 012f809980180ead6b69e61d43d8de20e4727f97 (patch) | |
| tree | d3cee2809f3d20ec5cb425d2771653d83bd68d56 | |
| parent | 01be5f0a43a5420cfa0da4e879c21f7ca8cee24e (diff) | |
improve diff files
| -rw-r--r-- | xmake/modules/private/service/message.lua | 5 | ||||
| -rw-r--r-- | xmake/modules/private/service/remote_build/client.lua | 45 | ||||
| -rw-r--r-- | xmake/modules/private/service/remote_build/session.lua | 1 |
3 files changed, 32 insertions, 19 deletions
diff --git a/xmake/modules/private/service/message.lua b/xmake/modules/private/service/message.lua index 039506cdf..3118b4a62 100644 --- a/xmake/modules/private/service/message.lua +++ b/xmake/modules/private/service/message.lua @@ -154,10 +154,11 @@ function new_diff(session_id, manifest) end -- new sync message -function new_sync(session_id) +function new_sync(session_id, manifest) return _new({ code = message.CODE_SYNC, - session_id = session_id + session_id = session_id, + manifest = manifest }) end diff --git a/xmake/modules/private/service/remote_build/client.lua b/xmake/modules/private/service/remote_build/client.lua index 3dfcfb945..15f4752b7 100644 --- a/xmake/modules/private/service/remote_build/client.lua +++ b/xmake/modules/private/service/remote_build/client.lua @@ -25,6 +25,7 @@ import("core.base.option") import("core.base.scheduler") import("core.project.config", {alias = "project_config"}) import("lib.detect.find_tool") +import("utils.archive.archive", {alias = "archive_files"}) import("private.service.config") import("private.service.message") import("private.service.client") @@ -163,43 +164,38 @@ function remote_build_client:sync() local session_id = self:session_id() local errors local ok = false + local diff_files + local archive_diff_file print("%s: sync files in %s:%d ..", self, addr, port) while sock do -- diff files local stream = socket_stream(sock) - local diff_files, diff_errs = self:_diff_files(stream) + diff_files, errors = self:_diff_files(stream) if not diff_files then - errors = diff_errs break end -- archive diff files - local archive_diff_file, archive_diff_errs = self:_archive_diff_files() + archive_diff_file, errors = self:_archive_diff_files(diff_files) if not archive_diff_file then - errors = archive_diff_errs break end - --[[ - if stream:send_msg(message.new_sync(session_id)) and stream:flush() then + -- do sync + if stream:send_msg(message.new_sync(session_id, diff_files)) and stream:flush() then local msg = stream:recv_msg() if msg and msg:success() then vprint(msg:body()) - if stream:send_msg(message.new_sync(session_id)) and stream:flush() then - msg = stream:recv_msg() - if msg and msg:success() then - ok = true - elseif msg then - errors = msg:errors() - end - end + ok = true elseif msg then errors = msg:errors() end - end]] - ok = true + end break end + if archive_diff_file then + os.tryrm(archive_diff_file) + end if ok then print("%s: sync files ok!", self) else @@ -378,7 +374,22 @@ end -- archive diff files function remote_build_client:_archive_diff_files(diff_files) - return "" + vprint("archiving files ..") + local archivefile = os.tmpfile() .. ".zip" + local archivedir = path.directory(archivefile) + if not os.isdir(archivedir) then + os.mkdir(archivedir) + end + local filelist = {} + for _, fileitem in ipairs(diff_files.inserted) do + table.insert(filelist, fileitem) + end + for _, fileitem in ipairs(diff_files.modified) do + table.insert(filelist, fileitem) + end + archive_files(archivefile, filelist, {curdir = self:projectdir()}) + vprint("archive file ok, %s", archivefile) + return archivefile end -- read stdin data diff --git a/xmake/modules/private/service/remote_build/session.lua b/xmake/modules/private/service/remote_build/session.lua index d1c0f39f0..8a3fd3385 100644 --- a/xmake/modules/private/service/remote_build/session.lua +++ b/xmake/modules/private/service/remote_build/session.lua @@ -109,6 +109,7 @@ end -- sync files function session:sync(respmsg) local body = respmsg:body() + local manifest = body.manifest vprint("%s: %s sync files in %s ..", self, self:sourcedir()) vprint("%s: %s sync files ok", self) end |
