diff options
| -rw-r--r-- | xmake/modules/private/service/message.lua | 4 | ||||
| -rw-r--r-- | xmake/modules/private/service/remote_build/client.lua | 18 | ||||
| -rw-r--r-- | xmake/modules/private/service/remote_build/server_session.lua | 19 |
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() |
