diff options
| author | ruki <[email protected]> | 2022-05-21 09:18:25 +0800 |
|---|---|---|
| committer | ruki <[email protected]> | 2022-05-21 09:18:25 +0800 |
| commit | 9b07378b1e3bea7d02c3d9d556a09f71ae53d610 (patch) | |
| tree | 9a99c3bd50686cde98332211ae744e201ef3e516 | |
| parent | 3387f817869fa72eaef44cae85220223cc5514f5 (diff) | |
clean files for remote cache
4 files changed, 58 insertions, 0 deletions
diff --git a/xmake/modules/private/service/clean_files.lua b/xmake/modules/private/service/clean_files.lua index 7660065c9..3986d5d1f 100644 --- a/xmake/modules/private/service/clean_files.lua +++ b/xmake/modules/private/service/clean_files.lua @@ -23,12 +23,17 @@ import("core.base.option") import("core.base.scheduler") import("private.service.client_config", {alias = "config"}) import("private.service.remote_build.client", {alias = "remote_build_client"}) +import("private.service.remote_cache.client", {alias = "remote_cache_client"}) import("private.service.distcc_build.client", {alias = "distcc_build_client"}) function _clean_remote_build_server(...) remote_build_client(...):clean() end +function _clean_remote_cache_server(...) + remote_cache_client(...):clean() +end + function _clean_distcc_build_server(...) distcc_build_client(...):clean() end @@ -39,6 +44,8 @@ function main(...) table.insert(cleaners, _clean_remote_build_server) elseif option.get("distcc") then table.insert(cleaners, _clean_distcc_build_server) + elseif option.get("ccache") then + table.insert(cleaners, _clean_remote_cache_server) else if config.get("remote_build") then table.insert(cleaners, _clean_remote_build_server) diff --git a/xmake/modules/private/service/remote_cache/client.lua b/xmake/modules/private/service/remote_cache/client.lua index d58bdd9b5..e3b785762 100644 --- a/xmake/modules/private/service/remote_cache/client.lua +++ b/xmake/modules/private/service/remote_cache/client.lua @@ -163,6 +163,35 @@ function remote_cache_client:disconnect() self:status_save() end +-- clean server files +function remote_cache_client:clean() + assert(self:is_connected(), "%s: has been not connected!", self) + local addr = self:addr() + local port = self:port() + local sock = assert(socket.connect(addr, port), "%s: server unreachable!", self) + local session_id = self:session_id() + local errors + local ok = false + print("%s: clean files in %s:%d ..", self, addr, port) + local stream = socket_stream(sock) + if stream:send_msg(message.new_clean(session_id, {token = self:token()})) and stream:flush() then + local msg = stream:recv_msg() + if msg then + vprint(msg:body()) + if msg:success() then + ok = true + else + errors = msg:errors() + end + end + end + if ok then + print("%s: clean files ok!", self) + else + print("%s: clean files failed in %s:%d, %s", self, addr, port, errors or "unknown") + end +end + -- is connected? function remote_cache_client:is_connected() return self:status().connected diff --git a/xmake/modules/private/service/remote_cache/server.lua b/xmake/modules/private/service/remote_cache/server.lua index 354e9abf8..c62a15e84 100644 --- a/xmake/modules/private/service/remote_cache/server.lua +++ b/xmake/modules/private/service/remote_cache/server.lua @@ -86,6 +86,13 @@ function remote_cache_server:_on_handle(stream, msg) self._SESSIONS[session_id] = nil else assert(session:is_connected(), "session has not been connected!") + if msg:is_push() then + session:push(respmsg) + elseif msg:is_pull() then + session:pull(respmsg) + elseif msg:is_clean() then + session:clean() + end end return true end, diff --git a/xmake/modules/private/service/remote_cache/server_session.lua b/xmake/modules/private/service/remote_cache/server_session.lua index ccb907e61..a90589d39 100644 --- a/xmake/modules/private/service/remote_cache/server_session.lua +++ b/xmake/modules/private/service/remote_cache/server_session.lua @@ -74,6 +74,21 @@ function server_session:close() self:status_save() end +-- pull file +function server_session:pull(respmsg) +end + +-- push file +function server_session:push(respmsg) +end + +-- clean files +function server_session:clean() + vprint("%s: clean files in %s ..", self, self:workdir()) + os.tryrm(self:workdir()) + vprint("%s: clean files ok", self) +end + -- set stream function server_session:stream_set(stream) self._STREAM = stream |
