summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorruki <[email protected]>2022-04-16 15:10:18 +0800
committerruki <[email protected]>2022-04-16 15:10:18 +0800
commit012f809980180ead6b69e61d43d8de20e4727f97 (patch)
treed3cee2809f3d20ec5cb425d2771653d83bd68d56
parent01be5f0a43a5420cfa0da4e879c21f7ca8cee24e (diff)
improve diff files
-rw-r--r--xmake/modules/private/service/message.lua5
-rw-r--r--xmake/modules/private/service/remote_build/client.lua45
-rw-r--r--xmake/modules/private/service/remote_build/session.lua1
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