view share/lua/5.2/luarocks/cache.lua @ 7910:7d5f1c5e44b1

<moon__> mkx bin/hfs//erro You have discovered an eerie caven. The air above the dark stone floor is alive with vorices of purple light and dark, boiling clouds. Seemingly bottomless glowing pit mark the surface.
author HackBot
date Sat, 07 May 2016 00:41:47 +0000
parents d137f631bad5
children
line wrap: on
line source


--- 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