summaryrefslogtreecommitdiff
path: root/src/luarocks/fetch/git_ssh.lua
diff options
context:
space:
mode:
authorMike Vink <mike@pionative.com>2025-02-03 21:29:42 +0100
committerMike Vink <mike@pionative.com>2025-02-03 21:29:42 +0100
commit5155816b7b925dec5d5feb1568b1d7ceb00938b9 (patch)
treedeca28ea15e79f6f804c3d90d2ba757881638af5 /src/luarocks/fetch/git_ssh.lua
fetch tarballHEADmaster
Diffstat (limited to 'src/luarocks/fetch/git_ssh.lua')
-rw-r--r--src/luarocks/fetch/git_ssh.lua32
1 files changed, 32 insertions, 0 deletions
diff --git a/src/luarocks/fetch/git_ssh.lua b/src/luarocks/fetch/git_ssh.lua
new file mode 100644
index 0000000..0c2c075
--- /dev/null
+++ b/src/luarocks/fetch/git_ssh.lua
@@ -0,0 +1,32 @@
+--- Fetch back-end for retrieving sources from Git repositories
+-- that use ssh:// transport. For example, for fetching a repository
+-- that requires the following command line:
+-- `git clone ssh://git@example.com/path/foo.git
+-- you can use this in the rockspec:
+-- source = { url = "git+ssh://git@example.com/path/foo.git" }
+-- It also handles scp-style ssh urls: git@example.com:path/foo.git,
+-- but you have to prepend the "git+ssh://" and why not use the "newer"
+-- style anyway?
+local git_ssh = {}
+
+local git = require("luarocks.fetch.git")
+
+--- Fetch sources for building a rock from a local Git repository.
+-- @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 git_ssh.get_sources(rockspec, extract, dest_dir)
+ rockspec.source.url = rockspec.source.url:gsub("^git.", "")
+
+ -- Handle old-style scp-like git ssh urls
+ if rockspec.source.url:match("^ssh://[^/]+:[^%d]") then
+ rockspec.source.url = rockspec.source.url:gsub("^ssh://", "")
+ end
+
+ return git.get_sources(rockspec, extract, dest_dir, "--")
+end
+
+return git_ssh