diff share/lua/5.2/luarocks/cache.lua @ 1132:d137f631bad5

<GreyKnight> (cd luabuild/luarocks-2.0.12; make install)
author HackBot
date Fri, 14 Dec 2012 22:24:27 +0000
parents
children
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/share/lua/5.2/luarocks/cache.lua	Fri Dec 14 22:24:27 2012 +0000
@@ -0,0 +1,85 @@
+
+--- Module handling the LuaRocks local cache.
+-- Adds a rock or rockspec to a rocks server.
+module("luarocks.cache", package.seeall)
+
+local fs = require("luarocks.fs")
+local cfg = require("luarocks.cfg")
+local dir = require("luarocks.dir")
+local util = require("luarocks.util")
+
+function get_upload_server(server)
+   if not server then server = cfg.upload_server end
+   if not server then
+      return nil, "No server specified and no default configured with upload_server."
+   end
+   return server, cfg.upload_servers and cfg.upload_servers[server]
+end
+
+function get_server_urls(server, upload_server)
+   local download_url = server
+   local login_url = nil
+   if upload_server then
+      if upload_server.rsync then download_url = "rsync://"..upload_server.rsync
+      elseif upload_server.http then download_url = "http://"..upload_server.http
+      elseif upload_server.ftp then download_url = "ftp://"..upload_server.ftp
+      end
+      
+      if upload_server.ftp then login_url = "ftp://"..upload_server.ftp
+      elseif upload_server.sftp then login_url = "sftp://"..upload_server.sftp
+      end
+   end
+   return download_url, login_url
+end
+
+function split_server_url(server, url, user, password)
+   local protocol, server_path = dir.split_url(url)
+   if server_path:match("@") then
+      local credentials
+      credentials, server_path = server_path:match("([^@]*)@(.*)")
+      if credentials:match(":") then
+         user, password = credentials:match("([^:]*):(.*)")
+      else
+         user = credentials
+      end
+   end
+   local local_cache
+   if cfg.local_cache then
+      local_cache = cfg.local_cache .. "/" .. server
+   end
+   return local_cache, protocol, server_path, user, password
+end
+
+function refresh_local_cache(server, url, user, password)
+   local local_cache, protocol, server_path, user, password = split_server_url(server, url, user, password)
+
+   fs.make_dir(cfg.local_cache)
+
+   local tmp_cache = false
+   if not local_cache then
+      local_cache = fs.make_temp_dir("local_cache")
+      tmp_cache = true
+   end
+   local ok = fs.make_dir(local_cache)
+   if not ok then
+      return nil, "Failed creating local cache dir."
+   end
+   fs.change_dir(local_cache)
+   util.printout("Refreshing cache "..local_cache.."...")
+
+   -- TODO abstract away explicit 'wget' call
+   local ok = false
+   if protocol == "rsync" then
+      local srv, path = server_path:match("([^/]+)(/.+)")
+      ok = fs.execute(cfg.variables.RSYNC.." -avz -e ssh "..user.."@"..srv..":"..path.."/ "..local_cache.."/")
+   else 
+      local login_info = ""
+      if user then login_info = " --user="..user end
+      if password then login_info = login_info .. " --password="..password end
+      ok = fs.execute(cfg.variables.WGET.." --no-cache -q -m -np -nd "..protocol.."://"..server_path..login_info)
+   end
+   if not ok then
+      return nil, "Failed downloading cache."
+   end
+   return local_cache, protocol, server_path, user, password
+end