From 9c501d767c285d9eee6b95c9c27666d3b1367183 Mon Sep 17 00:00:00 2001 From: Hisham Muhammad Date: Mon, 19 Apr 2010 18:01:42 -0300 Subject: Support svn URLs (since this is incompatible with earlier LuaRocks versions, svn:// rockspecs should not be added to the main repository for now.) --- src/luarocks/fetch/svn.lua | 45 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 45 insertions(+) create mode 100644 src/luarocks/fetch/svn.lua (limited to 'src') diff --git a/src/luarocks/fetch/svn.lua b/src/luarocks/fetch/svn.lua new file mode 100644 index 00000000..01ea6ba9 --- /dev/null +++ b/src/luarocks/fetch/svn.lua @@ -0,0 +1,45 @@ + +--- Fetch back-end for retrieving sources from Subversion. +module("luarocks.fetch.svn", package.seeall) + +local fs = require("luarocks.fs") +local dir = require("luarocks.dir") +local util = require("luarocks.util") + +--- Download sources for building a rock, using Subversion. +-- @param rockspec table: The rockspec table +-- @param extract boolean: Unused in this module (required for API purposes.) +-- @param dest_dir string or nil: If set, will extract to the given directory. +-- @return (string, string) or (nil, string): The absolute pathname of +-- the fetched source tarball and the temporary directory created to +-- store it; or nil and an error message. +function get_sources(rockspec, extract, dest_dir) + assert(type(rockspec) == "table") + assert(type(dest_dir) == "string" or not dest_dir) + + local name_version = rockspec.name .. "-" .. rockspec.version + local module = rockspec.source.module or dir.base_name(rockspec.source.url) + local url = rockspec.source.url:gsub("^svn://", "") + local command = {"svn", "checkout", url, module} + if rockspec.source.tag then + table.insert(command, 5, "-r") + table.insert(command, 6, rockspec.source.tag) + end + local store_dir + if not dest_dir then + store_dir = fs.make_temp_dir(name_version) + if not store_dir then + return nil, "Failed creating temporary directory." + end + util.schedule_function(fs.delete, store_dir) + else + store_dir = dest_dir + end + fs.change_dir(store_dir) + if not fs.execute(unpack(command)) then + return nil, "Failed fetching files from Subversion." + end + fs.pop_dir() + return module, store_dir +end + -- cgit v1.2.3-55-g6feb