summaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authorDaniel Silverstone <dsilvers@digital-scurf.org>2016-02-02 10:00:15 +0000
committerDaniel Silverstone <dsilvers@digital-scurf.org>2016-02-02 10:00:15 +0000
commita55961e0e132d6e315a51a24c45d7f604d78957f (patch)
tree2f3b011a7641ab190a61de5092d5d4720d6be883 /lib
parent47cf1173f1701ba37d8549bf34d9258e3d2b820b (diff)
parent06f1e0f0569565d3616716a6e1ade8a0e184c18e (diff)
downloadgitano-a55961e0e132d6e315a51a24c45d7f604d78957f.tar.gz
Merge remote-tracking branch 'rmaw/config'
Reviewed-By: Daniel Silverstone <dsilvers@digital-scurf.org>
Diffstat (limited to 'lib')
-rw-r--r--lib/gitano/command.lua15
-rw-r--r--lib/gitano/repocommand.lua7
-rw-r--r--lib/gitano/repository.lua24
3 files changed, 32 insertions, 14 deletions
diff --git a/lib/gitano/command.lua b/lib/gitano/command.lua
index b2e04dd..b46613c 100644
--- a/lib/gitano/command.lua
+++ b/lib/gitano/command.lua
@@ -8,7 +8,6 @@ local log = require 'gitano.log'
local util = require 'gitano.util'
local repository = require 'gitano.repository'
-local sp = require "luxio.subprocess"
local sio = require "luxio.simple"
local cmds = {}
@@ -190,10 +189,9 @@ local function builtin_upload_pack_prep(config, repo, cmdline, context)
end
local function builtin_upload_pack_run(config, repo, cmdline, env)
- local cmdcopy = {env=env}
- for i = 1, #cmdline do cmdcopy[i] = cmdline[i] end
- local proc = sp.spawn(cmdcopy)
- return proc:wait()
+ local cmdcopy = {"upload-pack", env=env}
+ for i = 2, #cmdline do cmdcopy[i] = cmdline[i] end
+ return repo:git_command(cmdcopy)
end
assert(register_cmd("git-upload-pack", nil, nil,
@@ -221,10 +219,9 @@ local function builtin_receive_pack_prep(config, repo, cmdline, context)
end
local function builtin_receive_pack_run(config, repo, cmdline, env)
- local cmdcopy = {env=env}
- for i = 1, #cmdline do cmdcopy[i] = cmdline[i] end
- local proc = sp.spawn(cmdcopy)
- local how, why = proc:wait()
+ local cmdcopy = {"receive-pack", env=env}
+ for i = 2, #cmdline do cmdcopy[i] = cmdline[i] end
+ local how, why = repo:git_command(cmdcopy)
-- Check that HEAD is now resolvable in the repo
if how == "exit" and why == 0 and not repo.git:get("HEAD") then
log.warn("")
diff --git a/lib/gitano/repocommand.lua b/lib/gitano/repocommand.lua
index 4d70a8b..cc81146 100644
--- a/lib/gitano/repocommand.lua
+++ b/lib/gitano/repocommand.lua
@@ -8,8 +8,6 @@ local log = require 'gitano.log'
local util = require 'gitano.util'
local repository = require 'gitano.repository'
-local sp = require "luxio.subprocess"
-
local builtin_gc_short = "Invoke git gc on your repository"
local builtin_gc_helptext = [[
usage: gc repo [options]
@@ -62,11 +60,10 @@ local function builtin_simple_validate(config, repo, cmdline)
end
local function builtin_simple_run(config, repo, cmdline, env)
- local cmdcopy = {env=util.deep_copy(env), "git", cmdline[1]}
+ local cmdcopy = {cmdline[1], env=util.deep_copy(env)}
cmdcopy.env.GIT_DIR=repo:fs_path()
for i = 3, #cmdline do cmdcopy[#cmdcopy+1] = cmdline[i] end
- local proc = sp.spawn(cmdcopy)
- return proc:wait()
+ return repo:git_command(cmdcopy)
end
local function register_repocommand(register_cmd)
diff --git a/lib/gitano/repository.lua b/lib/gitano/repository.lua
index 3ee85e1..e5f7927 100644
--- a/lib/gitano/repository.lua
+++ b/lib/gitano/repository.lua
@@ -722,6 +722,30 @@ function repo_method:save_admin(reason, author, committer)
return self:run_checks()
end
+local _git_booleans = {
+ ["true"] = true, yes = true, on = true,
+ ["false"] = false, no = false, off = false,
+}
+local function _git_config_bool(v)
+ if type(v) == "string" then
+ return _git_booleans[v:lower()]
+ elseif type(v) == "boolean" then
+ return v
+ end
+ -- Intentional fall-through to return nil
+end
+
+function repo_method:git_command(t)
+ local t_copy = util.deep_copy(t)
+ table.insert(t_copy, 1, "git")
+ if _git_config_bool(self:conf_get "git.receive.shallowUpdate") then
+ table.insert(t_copy, 2, "-c")
+ table.insert(t_copy, 3, "receive.shallowUpdate=true")
+ end
+ local proc = sp.spawn(t_copy)
+ return proc:wait()
+end
+
local repo_meta = {
__index = repo_method,
}