summaryrefslogtreecommitdiff
path: root/xmake
diff options
context:
space:
mode:
Diffstat (limited to 'xmake')
-rw-r--r--xmake/modules/private/service/message.lua4
-rw-r--r--xmake/modules/private/service/remote_build/client.lua18
-rw-r--r--xmake/modules/private/service/remote_build/server_session.lua19
3 files changed, 34 insertions, 7 deletions
diff --git a/xmake/modules/private/service/message.lua b/xmake/modules/private/service/message.lua
index 12792a129..72b65b71c 100644
--- a/xmake/modules/private/service/message.lua
+++ b/xmake/modules/private/service/message.lua
@@ -196,6 +196,7 @@ function new_diff(session_id, manifest, opt)
session_id = session_id,
token = opt.token,
manifest = manifest
+ xmakesrc = opt.xmakesrc
})
end
@@ -206,7 +207,8 @@ function new_sync(session_id, manifest, opt)
code = message.CODE_SYNC,
session_id = session_id,
token = opt.token,
- manifest = manifest
+ manifest = manifest,
+ xmakesrc = opt.xmakesrc
})
end
diff --git a/xmake/modules/private/service/remote_build/client.lua b/xmake/modules/private/service/remote_build/client.lua
index 65e41eaf1..3c42af2ea 100644
--- a/xmake/modules/private/service/remote_build/client.lua
+++ b/xmake/modules/private/service/remote_build/client.lua
@@ -191,12 +191,13 @@ function remote_build_client:sync()
local errors
local ok = false
local diff_files
+ local xmakesrc = option.get("xmakesrc")
cprint("${dim}%s: sync files in %s:%d ..", self, addr, port)
while sock do
-- diff files
local stream = socket_stream(sock, {send_timeout = self:send_timeout(), recv_timeout = self:recv_timeout()})
- diff_files, errors = self:_diff_files(stream)
+ diff_files, errors = self:_diff_files(stream, {xmakesrc = xmakesrc})
if not diff_files then
break
end
@@ -208,7 +209,8 @@ function remote_build_client:sync()
-- do sync
cprint("Uploading files ..")
local send_ok = false
- if stream:send_msg(message.new_sync(session_id, diff_files, {token = self:token()}), {compress = true}) and stream:flush() then
+ if stream:send_msg(message.new_sync(session_id, diff_files,
+ {token = self:token(), xmakesrc = xmakesrc and true or false}), {compress = true}) and stream:flush() then
if self:_send_diff_files(stream, diff_files) then
send_ok = true
end
@@ -458,16 +460,24 @@ function remote_build_client:_filesync()
end
-- diff server files
-function remote_build_client:_diff_files(stream)
+function remote_build_client:_diff_files(stream, opt)
+ opt = opt or {}
assert(self:is_connected(), "%s: has been not connected!", self)
print("Scanning files ..")
local filesync = self:_filesync()
+ if opt.xmakesrc then
+ assert(os.isdir(opt.xmakesrc), "%s: %s not found!", opt.xmakesrc)
+ filesync = new_filesync(opt.xmakesrc, path.join(self:workdir(), "xmakesrc_manifest.txt"))
+ filesync:ignorefiles_add(".git/**")
+ end
local manifest, filecount = filesync:snapshot()
local session_id = self:session_id()
local count = 0
local result, errors
cprint("Comparing ${bright}%d${clear} files ..", filecount)
- if stream:send_msg(message.new_diff(session_id, manifest, {token = self:token()}), {compress = true}) and stream:flush() then
+ if stream:send_msg(message.new_diff(session_id, manifest,
+ {token = self:token(), xmakesrc = opt.xmakesrc and true or false}),
+ {compress = true}) and stream:flush() then
local msg = stream:recv_msg({timeout = -1})
if msg and msg:success() then
result = msg:body().manifest
diff --git a/xmake/modules/private/service/remote_build/server_session.lua b/xmake/modules/private/service/remote_build/server_session.lua
index 7031c5095..fa9d7fd24 100644
--- a/xmake/modules/private/service/remote_build/server_session.lua
+++ b/xmake/modules/private/service/remote_build/server_session.lua
@@ -37,10 +37,15 @@ local server_session = server_session or object()
function server_session:init(server, session_id)
self._ID = session_id
self._SERVER = server
+
local filesync = new_filesync(self:sourcedir(), path.join(self:workdir(), "manifest.txt"))
filesync:ignorefiles_add(".git/**")
filesync:ignorefiles_add(".xmake/**")
self._FILESYNC = filesync
+
+ local xmake_filesync = new_filesync(self:xmake_sourcedir(), path.join(self:workdir(), "xmakesrc_manifest.txt"))
+ xmake_filesync:ignorefiles_add(".git/**")
+ self._XMAKE_FILESYNC = xmake_filesync
end
-- get server session id
@@ -101,7 +106,7 @@ function server_session:diff(respmsg)
self:_ensure_sourcedir()
-- do snapshot
- local filesync = self:_filesync()
+ local filesync = body.xmakesrc and self:_xmake_filesync() or self:_filesync()
local manifest_server = assert(filesync:snapshot(), "server manifest not found!")
local manifest_client = assert(body.manifest, "client manifest not found!")
@@ -146,7 +151,7 @@ function server_session:sync(respmsg)
local body = respmsg:body()
local stream = self:stream()
local manifest = assert(body.manifest, "manifest not found!")
- local filesync = self:_filesync()
+ local filesync = body.xmakesrc and self:_xmake_filesync() or self:_filesync()
local sourcedir = self:sourcedir()
local archivedir = os.tmpfile() .. ".dir"
vprint("%s: sync files in %s ..", self, self:sourcedir())
@@ -297,11 +302,21 @@ function server_session:sourcedir()
return path.join(self:workdir(), "source")
end
+-- get xmake sourcedir directory
+function server_session:xmake_sourcedir()
+ return path.join(self:workdir(), "xmake_source")
+end
+
-- get filesync
function server_session:_filesync()
return self._FILESYNC
end
+-- get filesync for xmakesrc
+function server_session:_xmake_filesync()
+ return self._XMAKE_FILESYNC
+end
+
-- ensure source directory
function server_session:_ensure_sourcedir()
local sourcedir = self:sourcedir()