summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorruki <[email protected]>2022-05-21 09:18:25 +0800
committerruki <[email protected]>2022-05-21 09:18:25 +0800
commit9b07378b1e3bea7d02c3d9d556a09f71ae53d610 (patch)
tree9a99c3bd50686cde98332211ae744e201ef3e516
parent3387f817869fa72eaef44cae85220223cc5514f5 (diff)
clean files for remote cache
-rw-r--r--xmake/modules/private/service/clean_files.lua7
-rw-r--r--xmake/modules/private/service/remote_cache/client.lua29
-rw-r--r--xmake/modules/private/service/remote_cache/server.lua7
-rw-r--r--xmake/modules/private/service/remote_cache/server_session.lua15
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