aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorHisham Muhammad <hisham@NewMachine.localdomain>2010-04-19 18:01:42 -0300
committerHisham Muhammad <hisham@NewMachine.localdomain>2010-04-19 18:08:51 -0300
commit9c501d767c285d9eee6b95c9c27666d3b1367183 (patch)
tree7e6beba5725f9bcbfb592b9d9a15c8f26c0b5fe7 /src
parent11757127cdcd5d15d40f189f4b03e32328063cd9 (diff)
downloadluarocks-9c501d767c285d9eee6b95c9c27666d3b1367183.tar.gz
luarocks-9c501d767c285d9eee6b95c9c27666d3b1367183.tar.bz2
luarocks-9c501d767c285d9eee6b95c9c27666d3b1367183.zip
Support svn URLs (since this is incompatible with earlier LuaRocks versions,
svn:// rockspecs should not be added to the main repository for now.)
Diffstat (limited to 'src')
-rw-r--r--src/luarocks/fetch/svn.lua45
1 files changed, 45 insertions, 0 deletions
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 @@
1
2--- Fetch back-end for retrieving sources from Subversion.
3module("luarocks.fetch.svn", package.seeall)
4
5local fs = require("luarocks.fs")
6local dir = require("luarocks.dir")
7local util = require("luarocks.util")
8
9--- Download sources for building a rock, using Subversion.
10-- @param rockspec table: The rockspec table
11-- @param extract boolean: Unused in this module (required for API purposes.)
12-- @param dest_dir string or nil: If set, will extract to the given directory.
13-- @return (string, string) or (nil, string): The absolute pathname of
14-- the fetched source tarball and the temporary directory created to
15-- store it; or nil and an error message.
16function get_sources(rockspec, extract, dest_dir)
17 assert(type(rockspec) == "table")
18 assert(type(dest_dir) == "string" or not dest_dir)
19
20 local name_version = rockspec.name .. "-" .. rockspec.version
21 local module = rockspec.source.module or dir.base_name(rockspec.source.url)
22 local url = rockspec.source.url:gsub("^svn://", "")
23 local command = {"svn", "checkout", url, module}
24 if rockspec.source.tag then
25 table.insert(command, 5, "-r")
26 table.insert(command, 6, rockspec.source.tag)
27 end
28 local store_dir
29 if not dest_dir then
30 store_dir = fs.make_temp_dir(name_version)
31 if not store_dir then
32 return nil, "Failed creating temporary directory."
33 end
34 util.schedule_function(fs.delete, store_dir)
35 else
36 store_dir = dest_dir
37 end
38 fs.change_dir(store_dir)
39 if not fs.execute(unpack(command)) then
40 return nil, "Failed fetching files from Subversion."
41 end
42 fs.pop_dir()
43 return module, store_dir
44end
45