aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
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