diff options
author | Daniel Silverstone <dsilvers@digital-scurf.org> | 2017-01-02 17:17:19 +0000 |
---|---|---|
committer | Daniel Silverstone <dsilvers@digital-scurf.org> | 2017-01-02 17:18:09 +0000 |
commit | 79fcfa572b7834f7768fa2fedb954059e47791f3 (patch) | |
tree | 7ea09a2f322885765b53bc04de07ca480a97b45c /lib | |
parent | 8ddd848fe17864e59b4c293974cb2c50e3639082 (diff) | |
download | gitano-79fcfa572b7834f7768fa2fedb954059e47791f3.tar.gz |
cleanups: Whitespace and indentation and untabify
This is a massive unpleasant commit which does whitespace cleanup
and fixes indentation (including untabifying). Hopefully we won't
need to do this ever again, if we keep an eye on commits.
Diffstat (limited to 'lib')
-rw-r--r-- | lib/gitano/actions.lua | 14 | ||||
-rw-r--r-- | lib/gitano/admincommand.lua | 716 | ||||
-rw-r--r-- | lib/gitano/auth.lua | 6 | ||||
-rw-r--r-- | lib/gitano/command.lua | 406 | ||||
-rw-r--r-- | lib/gitano/config.lua | 232 | ||||
-rw-r--r-- | lib/gitano/copycommand.lua | 12 | ||||
-rw-r--r-- | lib/gitano/i18n.lua | 20 | ||||
-rw-r--r-- | lib/gitano/lace.lua | 52 | ||||
-rw-r--r-- | lib/gitano/log.lua | 51 | ||||
-rw-r--r-- | lib/gitano/plugins.lua | 22 | ||||
-rw-r--r-- | lib/gitano/repocommand.lua | 16 | ||||
-rw-r--r-- | lib/gitano/repository.lua | 284 | ||||
-rw-r--r-- | lib/gitano/supple.lua | 10 | ||||
-rw-r--r-- | lib/gitano/usercommand.lua | 92 | ||||
-rw-r--r-- | lib/gitano/util.lua | 268 |
15 files changed, 1099 insertions, 1102 deletions
diff --git a/lib/gitano/actions.lua b/lib/gitano/actions.lua index 336a71f..c71d5da 100644 --- a/lib/gitano/actions.lua +++ b/lib/gitano/actions.lua @@ -16,14 +16,14 @@ local subprocess = require 'luxio.subprocess' local function update_actions(conf, repo, tags) log.ddebug("Repo", repo.name, "ref", tags["ref"]) - if repo.name == "gitano-admin" and - tags["ref"] == "refs/heads/master" then + if repo.name == "gitano-admin" and + tags["ref"] == "refs/heads/master" then -- Update to the master branch of the gitano-admin repo, perform a conf -- check based on the target sha log.chat(i18n.expand("VERIFY_NEW_GITANO_ADMIN")) local conf, msg = config.parse(repo.git:get(tags["newsha"])) if not conf then - return false, msg + return false, msg end log.chat(i18n.expand("LOOKS_OKAY")) end @@ -33,7 +33,7 @@ local function update_actions(conf, repo, tags) log.chat(i18n.expand("VERIFY_NEW_ADMIN_SHA", {sha=tags["newsha"]})) local ok, msg = repo:validate_admin_sha(tags["newsha"]) if not ok then - return false, msg + return false, msg end log.chat(i18n.expand("LOOKS_OKAY")) end @@ -46,7 +46,7 @@ end local function _curl_txn(url, headers, body, content_type) local method = (body and body ~= "") and "POST" or "GET" local args = { "curl", "--max-filesize", tostring(1024*1024), - "--insecure", "-X", method, "-D-", "-s" } + "--insecure", "-X", method, "-D-", "-s" } if type(url) ~= "string" then return "500", "url must be a string", {}, "" end @@ -104,8 +104,8 @@ local function set_supple_globals(action) local logcopy = {} for _, k in pairs({ "state", "crit", "critical", "err", "error", "warn", - "warning", "chat", "info", "debug", "ddebug", - "deepdebug" }) do + "warning", "chat", "info", "debug", "ddebug", + "deepdebug" }) do logcopy[k] = log[k] end globs["log"] = logcopy diff --git a/lib/gitano/admincommand.lua b/lib/gitano/admincommand.lua index af0e1e9..bd9b6b6 100644 --- a/lib/gitano/admincommand.lua +++ b/lib/gitano/admincommand.lua @@ -56,8 +56,8 @@ local function builtin_as_validate(config, _, cmdline) -- Acquire the repository object for the target repo repo, cmdline.copy = cmd.detect_repo(config, cmdline.copy) if not repo and not cmdline.copy then - log.error("Unable to continue") - return false + log.error("Unable to continue") + return false end cmdline.repo = repo end @@ -81,7 +81,7 @@ local function builtin_as_prep(conf, _, cmdline, context) if res == "allow" then -- Check to see if the user exists if conf.users[cmdline[2]] == nil then - res, msg = "deny", "User '" .. cmdline[2] .. "' does not exist." + res, msg = "deny", "User '" .. cmdline[2] .. "' does not exist." end end return res, msg @@ -185,17 +185,17 @@ local function builtin_user_run(conf, _, cmdline, env) -- Listing all the users local users = {} for k in pairs(conf.users) do - users[#users+1] = k + users[#users+1] = k end table.sort(users) for _, username in ipairs(users) do - log.stdout(username .. ":" .. - conf.users[username].email_address .. ":" .. - conf.users[username].real_name) + log.stdout(username .. ":" .. + conf.users[username].email_address .. ":" .. + conf.users[username].real_name) end elseif cmdline[2] == "add" then if conf.users[cmdline[3]] then - log.fatal("User", cmdline[3], "already exists") + log.fatal("User", cmdline[3], "already exists") end local new_name = util.deep_copy(cmdline) table.remove(new_name, 1) @@ -207,9 +207,9 @@ local function builtin_user_run(conf, _, cmdline, env) new_clod.settings.email_address = cmdline[4] new_clod.settings.real_name = new_name local utab = { - clod = new_clod, - meta = { prefix = "users/" }, - keys = {} + clod = new_clod, + meta = { prefix = "users/" }, + keys = {} } conf.users[cmdline[3]] = utab reason = "Create user " .. cmdline[3] @@ -217,7 +217,7 @@ local function builtin_user_run(conf, _, cmdline, env) -- Find the named user local utab = conf.users[cmdline[3]] if not utab then - log.fatal("Could not find user:", cmdline[3]) + log.fatal("Could not find user:", cmdline[3]) end local new_name = util.deep_copy(cmdline) table.remove(new_name, 1) @@ -225,96 +225,96 @@ local function builtin_user_run(conf, _, cmdline, env) table.remove(new_name, 1) new_name = table.concat(new_name, " ") if utab.real_name ~= new_name then - utab.real_name = new_name - reason = "Change real name of " .. cmdline[3] + utab.real_name = new_name + reason = "Change real name of " .. cmdline[3] end elseif cmdline[2] == "email" then -- Find the named user local utab = conf.users[cmdline[3]] if not utab then - log.fatal("Could not find user:", cmdline[3]) + log.fatal("Could not find user:", cmdline[3]) end if utab.email_address ~= cmdline[4] then - utab.email_address = cmdline[4] - reason = "Change email address of " .. cmdline[3] + utab.email_address = cmdline[4] + reason = "Change email address of " .. cmdline[3] end elseif cmdline[2] == "del" then local username = cmdline[3] local utab = conf.users[username] if not utab then - log.fatal("Could not find user:", username) + log.fatal("Could not find user:", username) end local token = conf.repo:generate_confirmation("delete " .. username) if not cmdline[4] then - log.state("In order to delete", username, "you must supply the following token:") - log.state(token) + log.state("In order to delete", username, "you must supply the following token:") + log.state(token) elseif cmdline[4] ~= token and cmdline[4] ~= '--force' then - log.error("Tokens do not match. Did someone else do administrative actions?") + log.error("Tokens do not match. Did someone else do administrative actions?") else - -- Iterate groups and remove the user from any group it is - -- a direct member of - for g, gtab in pairs(conf.groups) do - if gtab.members[username] then - table.remove(gtab.members, gtab.members[username]) - gtab.members[username] = nil - gtab.changed_tables() - log.state("Removed", username, "from membership of", g) - end - end - -- Now remove the user - conf.users[username] = nil - -- And explain what - reason = "Delete user " .. username + -- Iterate groups and remove the user from any group it is + -- a direct member of + for g, gtab in pairs(conf.groups) do + if gtab.members[username] then + table.remove(gtab.members, gtab.members[username]) + gtab.members[username] = nil + gtab.changed_tables() + log.state("Removed", username, "from membership of", g) + end + end + -- Now remove the user + conf.users[username] = nil + -- And explain what + reason = "Delete user " .. username end elseif cmdline[2] == "rename" then local oldusername = cmdline[3] local newusername = cmdline[4] local utab = conf.users[oldusername] if not utab then - log.fatal("Could not find user:", oldusername) + log.fatal("Could not find user:", oldusername) end if conf.users[newusername] then - log.fatal("New username already exists:", newusername) + log.fatal("New username already exists:", newusername) end local token = conf.repo:generate_confirmation("rename " .. oldusername .. - " to " .. newusername) + " to " .. newusername) if not cmdline[5] then - log.state("In order to rename", oldusername, "you must supply the following token:") - log.state(token) + log.state("In order to rename", oldusername, "you must supply the following token:") + log.state(token) elseif cmdline[5] ~= token and cmdline[5] ~= '--force' then - log.error("Tokens do not match. Did someone else do administrative actions?") + log.error("Tokens do not match. Did someone else do administrative actions?") else - -- Iterate groups and rename the user in any group it is - -- a direct member of - for g, gtab in pairs(conf.groups) do - if gtab.members[oldusername] then - gtab.members[gtab.members[oldusername]] = newusername - gtab.members[newusername] = gtab.members[oldusername] - gtab.members[oldusername] = nil - gtab.changed_tables() - log.state("Renamed:", oldusername, "to", newusername, - "in membership of group:", g) - end - end - -- Now rename the user itself - conf.users[newusername] = utab - conf.users[oldusername] = nil - -- And explain what - reason = "Rename user " .. oldusername .. " to " .. newusername - -- Finally update the environment if necessary - if env.GITANO_USER == oldusername then - env.GITANO_USER = newusername - end - if env.GITANO_ORIG_USER == oldusername then - env.GITANO_ORIG_USER = newusername - end + -- Iterate groups and rename the user in any group it is + -- a direct member of + for g, gtab in pairs(conf.groups) do + if gtab.members[oldusername] then + gtab.members[gtab.members[oldusername]] = newusername + gtab.members[newusername] = gtab.members[oldusername] + gtab.members[oldusername] = nil + gtab.changed_tables() + log.state("Renamed:", oldusername, "to", newusername, + "in membership of group:", g) + end + end + -- Now rename the user itself + conf.users[newusername] = utab + conf.users[oldusername] = nil + -- And explain what + reason = "Rename user " .. oldusername .. " to " .. newusername + -- Finally update the environment if necessary + if env.GITANO_USER == oldusername then + env.GITANO_USER = newusername + end + if env.GITANO_ORIG_USER == oldusername then + env.GITANO_ORIG_USER = newusername + end end end if reason then -- Need to try and make a config commit local ok, commit = config.commit(conf, reason, env.GITANO_USER, env.GITANO_ORIG_USER) if not ok then - log.fatal(commit) + log.fatal(commit) end log.state("Committed: " .. reason) end @@ -360,7 +360,7 @@ local function builtin_group_validate(conf, _, cmdline) cmdline[2] = "list" end local groupsubs = util.set {"list", "show", "add", "del", "rename", - "adduser", "deluser", "addgroup", "delgroup", "description"} + "adduser", "deluser", "addgroup", "delgroup", "description"} if not groupsubs[cmdline[2]] then log.error("Unknown sub command", cmdline[2], "for group") return false @@ -421,10 +421,10 @@ end local function builtin_group_prep(conf, _, cmdline, context) context.operation = "group" .. cmdline[2] util.add_splitable(context, "targetgroup", cmdline[3], - "-", "prefix", "suffix") + "-", "prefix", "suffix") if cmdline[2]:match("user") or cmdline[2]:match("group") then util.add_splitable(context, "member", cmdline[4], - "-", "prefix", "suffix") + "-", "prefix", "suffix") end return conf.repo:run_lace(context) end @@ -434,28 +434,28 @@ local function builtin_group_run(conf, _, cmdline, env) if cmdline[2] == "list" then local groups = {} for g in pairs(conf.groups) do - groups[#groups+1] = g + groups[#groups+1] = g end table.sort(groups) for _, g in ipairs(groups) do - log.stdout(g .. ":" .. conf.groups[g].settings.description) + log.stdout(g .. ":" .. conf.groups[g].settings.description) end elseif cmdline[2] == "show" then local g, gtab = cmdline[3], conf.groups[cmdline[3]] if not gtab then - log.fatal("Unknown group", g) + log.fatal("Unknown group", g) end log.stdout(g .. ":" .. gtab.settings.description) for i, m in ipairs(gtab.members) do - log.stdout(" => " .. m) + log.stdout(" => " .. m) end for i, gg in ipairs(gtab.subgroups) do - log.stdout(" [] " .. gg) + log.stdout(" [] " .. gg) end elseif cmdline[2] == "add" then local g = cmdline[3] if conf.groups[g] then - log.fatal("Group", g, "already exists") + log.fatal("Group", g, "already exists") end local new_desc = util.deep_copy(cmdline) table.remove(new_desc, 1) @@ -465,17 +465,17 @@ local function builtin_group_run(conf, _, cmdline, env) local new_clod = clod.parse("") new_clod.settings.description = new_desc local gtab = { - clod = new_clod, - members = {}, - subgroups = {}, - meta = { prefix = "groups/" } + clod = new_clod, + members = {}, + subgroups = {}, + meta = { prefix = "groups/" } } conf.groups[g] = gtab reason = "Create group " .. g elseif cmdline[2] == "description" then local g, gtab = cmdline[3], conf.groups[cmdline[3]] if not gtab then - log.fatal("Unknown group", g) + log.fatal("Unknown group", g) end local new_desc = util.deep_copy(cmdline) table.remove(new_desc, 1) @@ -483,151 +483,151 @@ local function builtin_group_run(conf, _, cmdline, env) table.remove(new_desc, 1) new_desc = table.concat(new_desc, " ") if gtab.settings.description ~= new_desc then - gtab.settings.description = new_desc - reason = "Change group description of " .. g + gtab.settings.description = new_desc + reason = "Change group description of " .. g end elseif cmdline[2] == "del" then local g = cmdline[3] if not conf.groups[g] then - log.fatal("Unknown group", g) + log.fatal("Unknown group", g) end local token = conf.repo:generate_confirmation("delete group " .. g) if not cmdline[4] then - log.state("In order to delete group", g, "you must supply the following token:") - log.state(token) + log.state("In order to delete group", g, "you must supply the following token:") + log.state(token) elseif cmdline[4] ~= token and cmdline[4] ~= '--force' then - log.fatal("Token does not match. Has someone else done administrative actions?") + log.fatal("Token does not match. Has someone else done administrative actions?") else - for gg, gtab in pairs(conf.groups) do - if gtab.subgroups[g] then - table.remove(gtab.subgroups, gtab.subgroups[g]) - gtab.subgroups[g] = nil - gtab.changed_tables() - log.state("Removed:", g, "from subgroup membership of", gg) - end - end - conf.groups[g] = nil - reason = "Delete group " .. g + for gg, gtab in pairs(conf.groups) do + if gtab.subgroups[g] then + table.remove(gtab.subgroups, gtab.subgroups[g]) + gtab.subgroups[g] = nil + gtab.changed_tables() + log.state("Removed:", g, "from subgroup membership of", gg) + end + end + conf.groups[g] = nil + reason = "Delete group " .. g end elseif cmdline[2] == "rename" then local g = cmdline[3] if not conf.groups[g] then - log.fatal("Unknown group", g) + log.fatal("Unknown group", g) end local newg = cmdline[4] if conf.groups[newg] then - log.fatal("New group", newg, "already exists.") + log.fatal("New group", newg, "already exists.") end local token = conf.repo:generate_confirmation("rename group " .. g .. - " to " .. newg) + " to " .. newg) if not cmdline[5] then - log.state("In order to rename group", g, "to", newg, - "you must supply the following token:") - log.state(token) + log.state("In order to rename group", g, "to", newg, + "you must supply the following token:") + log.state(token) elseif cmdline[5] ~= token and cmdline[5] ~= '--force' then - log.fatal("Token does not match. Has someone else done administrative actions?") + log.fatal("Token does not match. Has someone else done administrative actions?") else - for gg, gtab in pairs(conf.groups) do - if gtab.subgroups[g] then - gtab.subgroups[gtab.subgroups[g]] = newg - gtab.subgroups[newg] = gtab.subgroups[g] - gtab.subgroups[g] = nil - gtab.changed_tables() - log.state("Renamed:", g, "to", newg, - "in subgroup membership of", gg) - end - end - conf.groups[newg] = conf.groups[g] - conf.groups[g] = nil - reason = "Rename group " .. g .. " to " .. newg + for gg, gtab in pairs(conf.groups) do + if gtab.subgroups[g] then + gtab.subgroups[gtab.subgroups[g]] = newg + gtab.subgroups[newg] = gtab.subgroups[g] + gtab.subgroups[g] = nil + gtab.changed_tables() + log.state("Renamed:", g, "to", newg, + "in subgroup membership of", gg) + end + end + conf.groups[newg] = conf.groups[g] + conf.groups[g] = nil + reason = "Rename group " .. g .. " to " .. newg end elseif cmdline[2] == "adduser" then - local g, gtab, u, utab = - cmdline[3], conf.groups[cmdline[3]], - cmdline[4], conf.users[cmdline[4]] + local g, gtab, u, utab = + cmdline[3], conf.groups[cmdline[3]], + cmdline[4], conf.users[cmdline[4]] if not gtab then - log.fatal("Unknown group", g) + log.fatal("Unknown group", g) end if not utab then - log.fatal("Unknown user", u) + log.fatal("Unknown user", u) end if not gtab.members[u] then - gtab.members[#gtab.members+1] = u - gtab.members[u] = #gtab.members - gtab.changed_tables() - reason = "Add " .. u .. " to " .. g + gtab.members[#gtab.members+1] = u + gtab.members[u] = #gtab.members + gtab.changed_tables() + reason = "Add " .. u .. " to " .. g else - log.state("User", u, "already a member of", g) + log.state("User", u, "already a member of", g) end elseif cmdline[2] == "deluser" then - local g, gtab, u, utab = - cmdline[3], conf.groups[cmdline[3]], - cmdline[4], conf.users[cmdline[4]] + local g, gtab, u, utab = + cmdline[3], conf.groups[cmdline[3]], + cmdline[4], conf.users[cmdline[4]] if not gtab then - log.fatal("Unknown group", g) + log.fatal("Unknown group", g) end if not utab then - log.fatal("Unknown user", u) + log.fatal("Unknown user", u) end if not gtab.members[u] then - log.fatal("User", u, "is not a member of", g) + log.fatal("User", u, "is not a member of", g) end local token = conf.repo:generate_confirmation("delete user " .. u .. - " from group " .. g) + " from group " .. g) if not cmdline[5] then - log.state("To delete user", u, "from group", g, "you will need this token:") - log.state(token) + log.state("To delete user", u, "from group", g, "you will need this token:") + log.state(token) elseif cmdline[5] ~= token and cmdline[5] ~= '--force' then - log.fatal("Token does not match. Did someone else do administrative actions?") + log.fatal("Token does not match. Did someone else do administrative actions?") else - table.remove(gtab.members, gtab.members[u]) - gtab.members[u] = nil - gtab.changed_tables() - reason = "Remove " .. u .. " from " .. g + table.remove(gtab.members, gtab.members[u]) + gtab.members[u] = nil + gtab.changed_tables() + reason = "Remove " .. u .. " from " .. g end elseif cmdline[2] == "addgroup" then - local g, gtab, g2, g2tab = - cmdline[3], conf.groups[cmdline[3]], - cmdline[4], conf.groups[cmdline[4]] + local g, gtab, g2, g2tab = + cmdline[3], conf.groups[cmdline[3]], + cmdline[4], conf.groups[cmdline[4]] if not gtab then - log.fatal("Unknown group", g) + log.fatal("Unknown group", g) end if not g2tab then - log.fatal("Unknown group", g2) + log.fatal("Unknown group", g2) end if not gtab.subgroups[g2] then - gtab.subgroups[#gtab.subgroups+1] = g2 - gtab.subgroups[g2] = #gtab.subgroups - gtab.changed_tables() - reason = "Add group " .. g2 .. " to " .. g + gtab.subgroups[#gtab.subgroups+1] = g2 + gtab.subgroups[g2] = #gtab.subgroups + gtab.changed_tables() + reason = "Add group " .. g2 .. " to " .. g else - log.state("Group", g2, "already a subgroup of", g) + log.state("Group", g2, "already a subgroup of", g) end elseif cmdline[2] == "delgroup" then - local g, gtab, g2, g2tab = - cmdline[3], conf.groups[cmdline[3]], - cmdline[4], conf.groups[cmdline[4]] + local g, gtab, g2, g2tab = + cmdline[3], conf.groups[cmdline[3]], + cmdline[4], conf.groups[cmdline[4]] if not gtab then - log.fatal("Unknown group", g) + log.fatal("Unknown group", g) end if not g2tab then - log.fatal("Unknown group", g2) + log.fatal("Unknown group", g2) end if not gtab.subgroups[g2] then - log.fatal("Group", g2, "is not a subgroup of", g) + log.fatal("Group", g2, "is not a subgroup of", g) end local token = conf.repo:generate_confirmation("delete group " .. g .. - "from group " .. g2) + "from group " .. g2) if not cmdline[5] then - log.state("To delete group", g2, "from group", g, "you will need this token:") - log.state(token) + log.state("To delete group", g2, "from group", g, "you will need this token:") + log.state(token) elseif cmdline[5] ~= token and cmdline[5] ~= '--force' then - log.fatal("Token does not match. Did someone else do administrative actions?") + log.fatal("Token does not match. Did someone else do administrative actions?") else - table.remove(gtab.subgroups, gtab.subgroups[g2]) - gtab.members[g2] = nil - gtab.changed_tables() - reason = "Remove group " .. g2 .. " from " .. g + table.remove(gtab.subgroups, gtab.subgroups[g2]) + gtab.members[g2] = nil + gtab.changed_tables() + reason = "Remove group " .. g2 .. " from " .. g end else log.fatal("Unknown sub command", cmdline[2]) @@ -635,7 +635,7 @@ local function builtin_group_run(conf, _, cmdline, env) if reason then local ok, commit = config.commit(conf, reason, env.GITANO_USER, env.GITANO_ORIG_USER) if not ok then - log.fatal(commit) + log.fatal(commit) end log.state("Committed: " .. reason) end @@ -678,57 +678,57 @@ local function builtin_keyring_validate(conf, _, cmdline) end if cmdline[2] == "list" then if #cmdline == 2 then - return true + return true end log.error("usage: keyring list") end if cmdline[2] == "create" then if #cmdline == 3 then - return true + return true end log.error("usage: keyring create <keyring>") end if cmdline[2] == "destroy" then if #cmdline == 3 or #cmdline == 4 then - return true + return true end log.error("usage: keyring destroy <keyring> [<token>]") end if cmdline[2] == "show" then if #cmdline == 3 then - return true + return true end log.error("usage: keyring show <keyring>") end if cmdline[2] == "import" then if #cmdline == 3 then - return true + return true end log.error("usage: keyring import <keyring>") end if cmdline[2] == "export" then if #cmdline == 3 then - return true + return true end if #cmdline > 3 then - local ok = true - for i = 4, #cmdline do - if not cmdline[i]:match("^" .. string.rep("[0-9A-Fa-f]", 40) .. "$") then - log.error("error: '" .. cmdline[i] .. "' is not a valid fingerprint") - ok = false - end - end - return ok + local ok = true + for i = 4, #cmdline do + if not cmdline[i]:match("^" .. string.rep("[0-9A-Fa-f]", 40) .. "$") then + log.error("error: '" .. cmdline[i] .. "' is not a valid fingerprint") + ok = false + end + end + return ok end log.error("usage: keyring export <keyring> [<fingerprint>...]") end if cmdline[2] == "delkey" then if #cmdline == 4 or #cmdline == 5 then - if not cmdline[4]:match("^" .. string.rep("[0-9A-Fa-f]", 40) .. "$") then - log.error("error: '" .. cmdline[i] .. "' is not a valid fingerprint") - return false - end - return true + if not cmdline[4]:match("^" .. string.rep("[0-9A-Fa-f]", 40) .. "$") then + log.error("error: '" .. cmdline[i] .. "' is not a valid fingerprint") + return false + end + return true end log.error("usage: keyring delkey <keyring> <fingerprint> [<token>]") end @@ -752,57 +752,57 @@ local function builtin_keyring_run(conf, _, cmdline, env) if cmdline[2] == "list" then local keyrings = {} for k, ktab in pairs(conf.keyrings) do - local ctx = util.deep_copy(cmdline._stolen_context) - ctx.keyring = k - local result = conf.repo:run_lace(ctx) - if result == "allow" then keyrings[#keyrings+1] = k end + local ctx = util.deep_copy(cmdline._stolen_context) + ctx.keyring = k + local result = conf.repo:run_lace(ctx) + if result == "allow" then keyrings[#keyrings+1] = k end end table.sort(keyrings) for _, k in ipairs(keyrings) do - log.stdout(k) + log.stdout(k) end end local reason = nil if cmdline[2] == "create" then local keyringname = cmdline[3] if conf.keyrings[keyringname] then - log.error("Keyring " .. keyringname .. " already exists") - return "exit", 1 + log.error("Keyring " .. keyringname .. " already exists") + return "exit", 1 end if not keyringname:match("^[a-z][a-z0-9_.-]+$") then - log.error("Keyring " .. keyringname .. " is not lower-alphanumeric") - return "exit", 1 + log.error("Keyring " .. keyringname .. " is not lower-alphanumeric") + return "exit", 1 end local emptysha = conf.repo.git:hash_object("blob", "", true) conf.keyrings[keyringname] = { - meta = { prefix = "keyrings/" }, - blob = conf.repo.git:get(emptysha) + meta = { prefix = "keyrings/" }, + blob = conf.repo.git:get(emptysha) } reason = "create keyring " .. keyringname end if cmdline[2] == "destroy" then local keyringname = cmdline[3] if not conf.keyrings[keyringname] then - log.error("Keyring " .. keyringname .. " does not exist") - return "exit", 1 + log.error("Keyring " .. keyringname .. " does not exist") + return "exit", 1 end local token = conf.repo:generate_confirmation("keyring destroy " .. keyringname) if not cmdline[4] then - log.state("In order to destroy", keyringname, "you must supply the following token:") - log.state(token) + log.state("In order to destroy", keyringname, "you must supply the following token:") + log.state(token) elseif cmdline[4] ~= token and cmdline[4] ~= '--force' then - log.error("Tokens do not match. Did someone else do administrative actions?") - return "exit", 1 + log.error("Tokens do not match. Did someone else do administrative actions?") + return "exit", 1 else - conf.keyrings[keyringname] = nil - reason = "destroy keyring " .. keyringname + conf.keyrings[keyringname] = nil + reason = "destroy keyring " .. keyringname end end if cmdline[2] == "show" then local keyringname = cmdline[3] if not conf.keyrings[keyringname] then - log.error("Keyring " .. keyringname .. " does not exist") - return "exit", 1 + log.error("Keyring " .. keyringname .. " does not exist") + return "exit", 1 end local fd, filename = util.tempfile(conf.repo) local sfd = sio.wrap_fd(fd, false, filename) @@ -810,28 +810,28 @@ local function builtin_keyring_run(conf, _, cmdline, env) local w = 0 local _b, err while w < #b do - _b, err = sfd:write(b, w) - if _b == nil or _b < 1 then - -- I know we're not handling EINTR/EAGAIN, I don't care - w = -1 - break - end - w = w + _b + _b, err = sfd:write(b, w) + if _b == nil or _b < 1 then + -- I know we're not handling EINTR/EAGAIN, I don't care + w = -1 + break + end + w = w + _b end sfd:close() if w == -1 then - -- Failure to write keyring out... - luxio.unlink(filename) - log.fatal("Unable to write keyring out: " .. err) + -- Failure to write keyring out... + luxio.unlink(filename) + log.fatal("Unable to write keyring out: " .. err) end -- Keyring was written out, now we need to get GPG to add stdin to it... local null = luxio.open("/dev/null", luxio.O_RDWR) local proc = sp.spawn_simple({ - "gpg", "--no-default-keyring", "--keyring", filename, - "--primary-keyring", filename, "--with-colons", "--fingerprint", - "--list-keys", - stdout = sp.PIPE, - stderr = null, + "gpg", "--no-default-keyring", "--keyring", filename, + "--primary-keyring", filename, "--with-colons", "--fingerprint", + "--list-keys", + stdout = sp.PIPE, + stderr = null, }) luxio.close(null) local alloutput = proc.stdout:read("*a") @@ -839,17 +839,17 @@ local function builtin_keyring_run(conf, _, cmdline, env) local _, code = proc:wait() luxio.unlink(filename) if code ~= 0 then - log.fatal("Unable to list keyring: GPG returned " .. tostring(code)) + log.fatal("Unable to list keyring: GPG returned " .. tostring(code)) end for fingerprint in alloutput:gmatch("fpr:::::::::([0-9A-F]+):") do - log.stdout(fingerprint) + log.stdout(fingerprint) end end if cmdline[2] == "import" then local keyringname = cmdline[3] if not conf.keyrings[keyringname] then - log.error("Keyring " .. keyringname .. " does not exist") - return "exit", 1 + log.error("Keyring " .. keyringname .. " does not exist") + return "exit", 1 end local fd, filename = util.tempfile(conf.repo) local sfd = sio.wrap_fd(fd, false, filename) @@ -857,50 +857,50 @@ local function builtin_keyring_run(conf, _, cmdline, env) local w = 0 local _b, err while w < #b do - _b, err = sfd:write(b, w) - if _b == nil or _b < 1 then - -- I know we're not handling EINTR/EAGAIN, I don't care - w = -1 - break - end - w = w + _b + _b, err = sfd:write(b, w) + if _b == nil or _b < 1 then + -- I know we're not handling EINTR/EAGAIN, I don't care + w = -1 + break + end + w = w + _b end sfd:close() if w == -1 then - -- Failure to write keyring out... - luxio.unlink(filename) - log.fatal("Unable to write keyring out: " .. err) + -- Failure to write keyring out... + luxio.unlink(filename) + log.fatal("Unable to write keyring out: " .. err) end -- Keyring was written out, now we need to get GPG to add stdin to it... local null = luxio.open("/dev/null", luxio.O_RDWR) local proc = sp.spawn_simple({ - "gpg", "--no-default-keyring", "--keyring", filename, - "--primary-keyring", filename, "--import", - stdout = null, - stderr = null, + "gpg", "--no-default-keyring", "--keyring", filename, + "--primary-keyring", filename, "--import", + stdout = null, + stderr = null, }) luxio.close(null) local _, code = proc:wait() if code ~= 0 then - luxio.unlink(filename) - log.fatal("Unable to update keyring: GPG returned " .. tostring(code)) + luxio.unlink(filename) + log.fatal("Unable to update keyring: GPG returned " .. tostring(code)) end -- Keyring was updated, need to reload it... local ret, sdat = luxio.lstat(filename) if ret ~= 0 then - luxio.unlink(filename) - log.fatal("Unable to stat keyring") + luxio.unlink(filename) + log.fatal("Unable to stat keyring") end if sdat.size > MAX_KEYRING_SIZE then - luxio.unlink(filename) - log.fatal("Unable to update keyring, size " .. tostring(sdat.size) .. - " is more than maximum size of " .. tostring(MAX_KEYRING_SIZE)) + luxio.unlink(filename) + log.fatal("Unable to update keyring, size " .. tostring(sdat.size) .. + " is more than maximum size of " .. tostring(MAX_KEYRING_SIZE)) end -- Load the keyring into an object sfd, err = sio.open(filename, "r") if not sfd then - luxio.unlink(filename) - log.fatal("Unable to update keyring, cannot reload it: " .. err) + luxio.unlink(filename) + log.fatal("Unable to update keyring, cannot reload it: " .. err) end b = sfd:read("*a") sfd:close() @@ -913,8 +913,8 @@ local function builtin_keyring_run(conf, _, cmdline, env) if cmdline[2] == "export" then local keyringname = cmdline[3] if not conf.keyrings[keyringname] then - log.error("Keyring " .. keyringname .. " does not exist") - return "exit", 1 + log.error("Keyring " .. keyringname .. " does not exist") + return "exit", 1 end local fd, filename = util.tempfile(conf.repo) local sfd = sio.wrap_fd(fd, false, filename) @@ -922,36 +922,36 @@ local function builtin_keyring_run(conf, _, cmdline, env) local w = 0 local _b, err while w < #b do - _b, err = sfd:write(b, w) - if _b == nil or _b < 1 then - -- I know we're not handling EINTR/EAGAIN, I don't care - w = -1 - break - end - w = w + _b + _b, err = sfd:write(b, w) + if _b == nil or _b < 1 then + -- I know we're not handling EINTR/EAGAIN, I don't care + w = -1 + break + end + w = w + _b end sfd:close() if w == -1 then - -- Failure to write keyring out... - luxio.unlink(filename) - log.fatal("Unable to write keyring out: " .. err) + -- Failure to write keyring out... + luxio.unlink(filename) + log.fatal("Unable to write keyring out: " .. err) end -- Keyring was written out, now we need to get GPG to add stdin to it... local null = luxio.open("/dev/null", luxio.O_RDWR) local args = { - "gpg", "--no-default-keyring", "--keyring", filename, - "--primary-keyring", filename, "--armor", "--export", - stderr = null, + "gpg", "--no-default-keyring", "--keyring", filename, + "--primary-keyring", filename, "--armor", "--export", + stderr = null, } for i = 4, #cmdline do - args[#args+1] = cmdline[i] + args[#args+1] = cmdline[i] end local proc = sp.spawn_simple(args) luxio.close(null) local _, code = proc:wait() luxio.unlink(filename) if code ~= 0 then - log.fatal("Unable to export keys: GPG returned " .. tostring(code)) + log.fatal("Unable to export keys: GPG returned " .. tostring(code)) end end if cmdline[2] == "delkey" then @@ -959,17 +959,17 @@ local function builtin_keyring_run(conf, _, cmdline, env) local fingerprint = cmdline[4] local token = conf.repo:generate_confirmation("delkey " .. keyringname .. fingerprint) if not conf.keyrings[keyringname] then - log.error("Keyring " .. keyringname .. " does not exist") - return "exit", 1 + log.error("Keyring " .. keyringname .. " does not exist") + return "exit", 1 end if not cmdline[5] then - log.state("In order to remove", fingerprint, "from", keyringname, - "you must supply the following token:") - log.state(token) - return "exit", 0 + log.state("In order to remove", fingerprint, "from", keyringname, + "you must supply the following token:") + log.state(token) + return "exit", 0 elseif cmdline[5] ~= token and cmdline[5] ~= '--force' then - log.error("Tokens do not match. Did someone else do administrative actions?") - return "exit", 1 + log.error("Tokens do not match. Did someone else do administrative actions?") + return "exit", 1 end local fd, filename = util.tempfile(conf.repo) local sfd = sio.wrap_fd(fd, false, filename) @@ -977,50 +977,50 @@ local function builtin_keyring_run(conf, _, cmdline, env) local w = 0 local _b, err while w < #b do - _b, err = sfd:write(b, w) - if _b == nil or _b < 1 then - -- I know we're not handling EINTR/EAGAIN, I don't care - w = -1 - break - end - w = w + _b + _b, err = sfd:write(b, w) + if _b == nil or _b < 1 then + -- I know we're not handling EINTR/EAGAIN, I don't care + w = -1 + break + end + w = w + _b end sfd:close() if w == -1 then - -- Failure to write keyring out... - luxio.unlink(filename) - log.fatal("Unable to write keyring out: " .. err) + -- Failure to write keyring out... + luxio.unlink(filename) + log.fatal("Unable to write keyring out: " .. err) end -- Keyring was written out, now we need to get GPG to add stdin to it... local null = luxio.open("/dev/null", luxio.O_RDWR) local proc = sp.spawn_simple({ - "gpg", "--no-default-keyring", "--keyring", filename, - "--primary-keyring", filename, "--batch", "--delete-key", fingerprint, - stdout = null, - stderr = null, + "gpg", "--no-default-keyring", "--keyring", filename, + "--primary-keyring", filename, "--batch", "--delete-key", fingerprint, + stdout = null, + stderr = null, }) luxio.close(null) local _, code = proc:wait() if code ~= 0 then - luxio.unlink(filename) - log.fatal("Unable to update keyring: GPG returned " .. tostring(code)) + luxio.unlink(filename) + log.fatal("Unable to update keyring: GPG returned " .. tostring(code)) end -- Keyring was updated, need to reload it... local ret, sdat = luxio.lstat(filename) if ret ~= 0 then - luxio.unlink(filename) - log.fatal("Unable to stat keyring") + luxio.unlink(filename) + log.fatal("Unable to stat keyring") end if sdat.size > MAX_KEYRING_SIZE then - luxio.unlink(filename) - log.fatal("Unable to update keyring, size " .. tostring(sdat.size) .. - " is more than maximum size of " .. tostring(MAX_KEYRING_SIZE)) + luxio.unlink(filename) + log.fatal("Unable to update keyring, size " .. tostring(sdat.size) .. + " is more than maximum size of " .. tostring(MAX_KEYRING_SIZE)) end -- Load the keyring into an object sfd, err = sio.open(filename, "r") if not sfd then - luxio.unlink(filename) - log.fatal("Unable to update keyring, cannot reload it: " .. err) + luxio.unlink(filename) + log.fatal("Unable to update keyring, cannot reload it: " .. err) end b = sfd:read("*a") sfd:close() @@ -1034,7 +1034,7 @@ local function builtin_keyring_run(conf, _, cmdline, env) -- Need to try and make a config commit local ok, commit = config.commit(conf, reason, env.GITANO_USER, env.GITANO_ORIG_USER) if not ok then - log.fatal(commit) + log.fatal(commit) end log.state("Committed: " .. reason) end @@ -1065,23 +1065,23 @@ local function builtin_graveyard_validate(conf, _, cmdline) end if cmdline[2] == "list" then if #cmdline == 2 then - return true + return true end log.error("usage: graveyard list") end if cmdline[2] == "restore" then if #cmdline == 4 then - cmdline[3] = cmdline[3]:gsub("/", "") - return true + cmdline[3] = cmdline[3]:gsub("/", "") + return true end log.error("usage: graveyard restore <entry> <name>") end if cmdline[2] == "purge" then if #cmdline < 4 then - if cmdline[3] then - cmdline[3] = cmdline[3]:gsub("/", "") - end - return true + if cmdline[3] then + cmdline[3] = cmdline[3]:gsub("/", "") + end + return true end log.error("usage: graveyard purge [<entry>]") end @@ -1112,90 +1112,90 @@ local function builtin_graveyard_run(conf, _, cmdline, env) -- List the contents of the graveyard. local dirp, err = luxio.opendir(graveyard_base) if not dirp then - if err == luxio.ENOTDIR then - log.error("Graveyard is not present, or empty") - return "exit", 1 - end - log.error("Error opening graveyard: " .. luxio.strerror(err)) - return "exit", 1 + if err == luxio.ENOTDIR then + log.error("Graveyard is not present, or empty") + return "exit", 1 + end + log.error("Error opening graveyard: " .. luxio.strerror(err)) + return "exit", 1 end local e, i repeat - e, i = luxio.readdir(dirp) - if e == 0 then - if not i.d_name:find("^%.") then - log.stdout(i.d_name) - end - end + e, i = luxio.readdir(dirp) + if e == 0 then + if not i.d_name:find("^%.") then + log.stdout(i.d_name) + end + end until not e dirp = nil -- Allow GC of DIR handle elseif cmdline[2] == "restore" then -- Restoring a repository needs the prefix dirs to be made local temp_repo, msg = repository.find(conf, cmdline[4]) if not temp_repo then - log.error("Unable to proceed: " .. msg) - return "exit", 1 + log.error("Unable to proceed: " .. msg) + return "exit", 1 end local repo_path = temp_repo:fs_path() local restore_src = graveyard_base .. cmdline[3] -- Prepare the path towards the repo... local ok, msg = util.mkdir_p(util.dirname(repo_path)) if not ok then - log.error("Unable to proceed: " .. msg) - return "exit", 1 + log.error("Unable to proceed: " .. msg) + return "exit", 1 end -- Restore the repository log.info("Trying to restore", cmdline[3], "as", cmdline[4]) log.ddebug(restore_src, "=>", repo_path) local e, errno = luxio.rename(restore_src, repo_path) if e ~= 0 then - log.error("Restore failed. Could not rename: " .. luxio.strerror(errno)) - return "exit", 1 + log.error("Restore failed. Could not rename: " .. luxio.strerror(errno)) + return "exit", 1 end -- Re-find the repository local repo, msg = repository.find(conf, cmdline[4]) if not repo then - log.error("Restore failed. Could not find restored repo: " .. msg) - return "exit", 1 + log.error("Restore failed. Could not find restored repo: " .. msg) + return "exit", 1 end elseif cmdline[2] == "purge" then local match = cmdline[3] local to_remove = {} local dirp, err = luxio.opendir(graveyard_base) if not dirp then - if err == luxio.ENOTDIR then - log.error("Graveyard is not present, or empty") - return "exit", 1 - end - log.error("Error opening graveyard: " .. luxio.strerror(err)) - return "exit", 1 + if err == luxio.ENOTDIR then + log.error("Graveyard is not present, or empty") + return "exit", 1 + end + log.error("Error opening graveyard: " .. luxio.strerror(err)) + return "exit", 1 end local e, i repeat - e, i = luxio.readdir(dirp) - if e == 0 then - if not i.d_name:find("^%.") then - if not match or (match == i.d_name) then - to_remove[#to_remove+1] = i.d_name - end - end - end + e, i = luxio.readdir(dirp) + if e == 0 then + if not i.d_name:find("^%.") then + if not match or (match == i.d_name) then + to_remove[#to_remove+1] = i.d_name + end + end + end until not e dirp = nil -- Allow GC of DIR handle if #to_remove == 0 then - if match then - log.error("Unable to find", match, "to remove") - else - log.error("Nothing in the graveyard to purge") - end - return "exit", 1 + if match then + log.error("Unable to find", match, "to remove") + else + log.error("Nothing in the graveyard to purge") + end + return "exit", 1 end for i = 1, #to_remove do - log.state("Purging", to_remove[i], "from graveyard...") - local ok, msg = util.rm_rf(graveyard_base .. to_remove[i]) - if not ok then - log.error("Unable to remove:", msg) - end + log.state("Purging", to_remove[i], "from graveyard...") + local ok, msg = util.rm_rf(graveyard_base .. to_remove[i]) + if not ok then + log.error("Unable to remove:", msg) + end end end return "exit", 0 @@ -1203,24 +1203,24 @@ end local function register_commands(reg) assert(reg("as", builtin_as_short, builtin_as_helptext, - builtin_as_validate, builtin_as_prep, builtin_as_run, - false, false, true)) + builtin_as_validate, builtin_as_prep, builtin_as_run, + false, false, true)) assert(reg("user", builtin_user_short, builtin_user_helptext, - builtin_user_validate, builtin_user_prep, - builtin_user_run, false, false, true)) + builtin_user_validate, builtin_user_prep, + builtin_user_run, false, false, true)) assert(reg("group", builtin_group_short, builtin_group_helptext, - builtin_group_validate, builtin_group_prep, - builtin_group_run, false, false, true)) + builtin_group_validate, builtin_group_prep, + builtin_group_run, false, false, true)) assert(reg("keyring", builtin_keyring_short, builtin_keyring_helptext, - builtin_keyring_validate, builtin_keyring_prep, - builtin_keyring_run, false, false, true)) + builtin_keyring_validate, builtin_keyring_prep, + builtin_keyring_run, false, false, true)) assert(reg("graveyard", builtin_graveyard_short, builtin_graveyard_helptext, - builtin_graveyard_validate, builtin_graveyard_prep, - builtin_graveyard_run, false, false, true)) + builtin_graveyard_validate, builtin_graveyard_prep, + builtin_graveyard_run, false, false, true)) end diff --git a/lib/gitano/auth.lua b/lib/gitano/auth.lua index 2fd3740..15d1fb3 100644 --- a/lib/gitano/auth.lua +++ b/lib/gitano/auth.lua @@ -9,7 +9,7 @@ local luxio = require 'luxio' local function load_admin_conf(repo_root) local admin_repo = gall.repository.new((repo_root or "") .. - "/gitano-admin.git") + "/gitano-admin.git") if not admin_repo then log.critical(i18n.expand("ERROR_CANNOT_FIND_ADMIN_REPO")) @@ -86,7 +86,7 @@ local function is_authorized(user, source, cmdline, repo_root, ip = os.getenv("REMOTE_ADDR") or "unknown ip" log.syslog.info( i18n.expand("CLIENT_CONNECTED", - { ip=ip, user=user, key=keytag, cmdline=cmdline})) + { ip=ip, user=user, key=keytag, cmdline=cmdline})) local cmd = command.get(parsed_cmdline[1]) @@ -99,7 +99,7 @@ local function is_authorized(user, source, cmdline, repo_root, if cmd.takes_repo and #parsed_cmdline >= 1 then repo, parsed_cmdline = cmd.detect_repo(admin_conf, parsed_cmdline) if not repo and not parsed_cmdline then - return nil + return nil end end diff --git a/lib/gitano/command.lua b/lib/gitano/command.lua index 0fa8be8..9b83c01 100644 --- a/lib/gitano/command.lua +++ b/lib/gitano/command.lua @@ -34,14 +34,14 @@ local function default_detect_repo(config, parsed_cmdline) end local function register_cmd(cmdname, short, helptext, - validate_fn, prep_fn, run_fn, - takes_repo, hidden, is_admin, detect_repo, - suppress_error_msgs) + validate_fn, prep_fn, run_fn, + takes_repo, hidden, is_admin, detect_repo, + suppress_error_msgs) --[[ - log.ddebug("Register command", cmdname) - if takes_repo then + log.ddebug("Register command", cmdname) + if takes_repo then log.ddebug(" => Takes a repo") - end + end --]] if cmds[cmdname] then log.warn("Attempt to double-register", cmdname) @@ -100,11 +100,11 @@ local function builtin_help_validate(config, repo, cmdline) end if #cmdline == 2 then if cmdline[2] == "all" or cmdline[2] == "admin" then - return true + return true end if not cmds[cmdline[2]] then - log.error("Unknown command:", help) - return false + log.error("Unknown command:", help) + return false end end return true @@ -117,10 +117,10 @@ end local function builtin_help_run(config, repo, cmdline, env) local function do_want(cmd) if cmdline[2] == "all" then - return true + return true end if cmdline[2] == "admin" then - return cmd.admin + return cmd.admin end return not (cmd.hidden or cmd.admin) end @@ -133,46 +133,46 @@ local function builtin_help_run(config, repo, cmdline, env) -- List all commands local maxcmdn = 0 for i = 1, #cmds do - local cmd = cmds[cmds[i]] - local wanted = do_want(cmd) - if wanted then - if #cmd.name > maxcmdn then - maxcmdn = #cmd.name - end - end + local cmd = cmds[cmds[i]] + local wanted = do_want(cmd) + if wanted then + if #cmd.name > maxcmdn then + maxcmdn = #cmd.name + end + end end for i = 1, #cmds do - local cmd = cmds[cmds[i]] - local wanted = do_want(cmd) - if wanted then - local gap = (" "):rep(maxcmdn - #cmd.name) - local desc = (cmd.short or "No description") - if cmd.takes_repo then - desc = desc .. " (Takes a repo)" - end - log.state(gap .. cmd.name, do_sep(cmd), desc) - end + local cmd = cmds[cmds[i]] + local wanted = do_want(cmd) + if wanted then + local gap = (" "):rep(maxcmdn - #cmd.name) + local desc = (cmd.short or "No description") + if cmd.takes_repo then + desc = desc .. " (Takes a repo)" + end + log.state(gap .. cmd.name, do_sep(cmd), desc) + end end else local cmd = cmds[cmdline[2]] local desc = (cmd.short or "No description") if cmd.takes_repo then - desc = desc .. " (Takes a repo)" + desc = desc .. " (Takes a repo)" end log.state(cmd.name, do_sep(cmd), desc) if cmd.helptext then - log.state("") - for line in (cmd.helptext):gmatch("([^\n]*)\n") do - log.state("=>", line) - end + log.state("") + for line in (cmd.helptext):gmatch("([^\n]*)\n") do + log.state("=>", line) + end end end return "exit", 0 end assert(register_cmd("help", builtin_help_short, builtin_help_helptext, - builtin_help_validate, builtin_help_prep, - builtin_help_run, false, false)) + builtin_help_validate, builtin_help_prep, + builtin_help_run, false, false)) local function builtin_upload_pack_validate(config, repo, cmdline) -- git-upload-pack repo @@ -199,10 +199,10 @@ local function builtin_upload_pack_run(config, repo, cmdline, env) end assert(register_cmd("git-upload-pack", nil, nil, - builtin_upload_pack_validate, - builtin_upload_pack_prep, - builtin_upload_pack_run, - true, true)) + builtin_upload_pack_validate, + builtin_upload_pack_prep, + builtin_upload_pack_run, + true, true)) local function builtin_receive_pack_validate(config, repo, cmdline) -- git-receive-pack repo @@ -236,10 +236,10 @@ local function builtin_receive_pack_run(config, repo, cmdline, env) end assert(register_cmd("git-receive-pack", nil, nil, - builtin_receive_pack_validate, - builtin_receive_pack_prep, - builtin_receive_pack_run, - true, true)) + builtin_receive_pack_validate, + builtin_receive_pack_prep, + builtin_receive_pack_run, + true, true)) local builtin_create_short = "Create a new repository" local builtin_create_helptext = [[ @@ -286,7 +286,7 @@ local function builtin_create_run(config, repo, cmdline, env) local owner = cmdline[3] or env["GITANO_USER"] log.chat("Setting repository owner to", owner) ok, msg = repo:conf_set_and_save("project.owner", owner, - env.GITANO_USER, env.GITANO_ORIG_USER) + env.GITANO_USER, env.GITANO_ORIG_USER) if not ok then log.error(msg) return "exit", 1 @@ -297,14 +297,14 @@ local function builtin_create_run(config, repo, cmdline, env) log.error(msg) return "exit", 1 end - log.state("Repository", repo.name, - "created ok. Remember to configure rules etc.") + log.state("Repository", repo.name, + "created ok. Remember to configure rules etc.") return "exit", 0 end assert(register_cmd("create", builtin_create_short, builtin_create_helptext, - builtin_create_validate, builtin_create_prep, - builtin_create_run, true, false)) + builtin_create_validate, builtin_create_prep, + builtin_create_run, true, false)) local builtin_config_short = "View and change configuration for a repository" local builtin_config_helptext = [[ @@ -348,39 +348,39 @@ local function builtin_config_validate(conf, repo, cmdline) -- No validation to do yet elseif cmdline[3] == "set" then if #cmdline < 5 then - log.error("config <repo> set: takes a key and a value to set") - return false + log.error("config <repo> set: takes a key and a value to set") + return false end if #cmdline > 5 then - local cpy = {} - for i = #cmdline, 5, -1 do - table.insert(cpy, 1, cmdline[i]) - cmdline[i] = nil - end - cmdline[5] = table.concat(cpy, " ") + local cpy = {} + for i = #cmdline, 5, -1 do + table.insert(cpy, 1, cmdline[i]) + cmdline[i] = nil + end + cmdline[5] = table.concat(cpy, " ") end if cmdline[4] == "project.owner" then - -- Verify that the new owner is a valid user - if not conf.users[cmdline[5]] then - log.error("Unknown user: " .. cmdline[5]) - return false - end + -- Verify that the new owner is a valid user + if not conf.users[cmdline[5]] then + log.error("Unknown user: " .. cmdline[5]) + return false + end end elseif cmdline[3] == "del" or cmdline[3] == "delete" or - cmdline[3] == "rm" then + cmdline[3] == "rm" then cmdline[3] = "del" if #cmdline ~= 4 then - log.error("config <repo> del: takes a key and nothing more") - return false + log.error("config <repo> del: takes a key and nothing more") + return false end cmdline.orig_key = cmdline[4] if cmdline[4]:match("%.%*$") then - -- Doing a wild removal, expand it now - local prefix = cmdline[4]:match("^(.+)%.%*$") - cmdline[4] = nil - for k in repo.project_config:each(prefix) do - cmdline[#cmdline+1] = k - end + -- Doing a wild removal, expand it now + local prefix = cmdline[4]:match("^(.+)%.%*$") + cmdline[4] = nil + for k in repo.project_config:each(prefix) do + cmdline[#cmdline+1] = k + end end else log.error("Unknown subcommand <" .. cmdline[3] .. "> for config.") @@ -394,12 +394,12 @@ local function builtin_config_prep(conf, repo, cmdline, context) if cmdline[3] == "show" then context.operation = "config_show" for i = 4, #cmdline do - local cpy = util.deep_copy(context) - cpy.key = cmdline[i] - local action, reason = repo:run_lace(cpy) - if action ~= "allow" then - return action, reason - end + local cpy = util.deep_copy(context) + cpy.key = cmdline[i] + local action, reason = repo:run_lace(cpy) + if action ~= "allow" then + return action, reason + end end return "allow", "Show not denied" elseif cmdline[3] == "set" then @@ -410,12 +410,12 @@ local function builtin_config_prep(conf, repo, cmdline, context) elseif cmdline[3] == "del" then context.operation = "config_del" for i = 4, #cmdline do - local cpy = util.deep_copy(context) - cpy.key = cmdline[i] - local action, reason = repo:run_lace(cpy) - if action ~= "allow" then - return action, reason - end + local cpy = util.deep_copy(context) + cpy.key = cmdline[i] + local action, reason = repo:run_lace(cpy) + if action ~= "allow" then + return action, reason + end end return "allow", "Delete not denied" end @@ -426,70 +426,70 @@ local function builtin_config_run(conf, repo, cmdline, env) if cmdline[3] == "show" then local all_keys = {} if #cmdline == 3 then - for k in repo.project_config:each() do - all_keys[k] = true - end + for k in repo.project_config:each() do + all_keys[k] = true + end else - for i = 4, #cmdline do - for k in repo.project_config:each(cmdline[i]) do - all_keys[k] = true - end - end + for i = 4, #cmdline do + for k in repo.project_config:each(cmdline[i]) do + all_keys[k] = true + end + end end -- Transform the all_keys set into a sorted list local slist = {} for k in pairs(all_keys) do - slist[#slist+1] = k + slist[#slist+1] = k end -- TODO: Fix this sort to cope with .i_N keys neatly table.sort(slist) for i = 1, #slist do - local key = slist[i] - local value = repo.project_config.settings[key] - local prefix = key:match("^(.+)%.i_[0-9]+$") - if prefix then - local neatkey = prefix .. ".*" - for i = 4, #cmdline do - if cmdline[i] == neatkey then - neatkey = key - break - end - end - end - log.stdout(key .. ": " .. value) + local key = slist[i] + local value = repo.project_config.settings[key] + local prefix = key:match("^(.+)%.i_[0-9]+$") + if prefix then + local neatkey = prefix .. ".*" + for i = 4, #cmdline do + if cmdline[i] == neatkey then + neatkey = key + break + end + end + end + log.stdout(key .. ": " .. value) end elseif cmdline[3] == "set" then local key, value = cmdline[4], cmdline[5] local vtype, rest = value:match("^([sbi]):(.*)$") if vtype then - if vtype == "s" then - value = rest - end - if vtype == "i" then - value = tonumber(rest) - end - if vtype == "b" then - value = ((rest:lower() == "true") or (rest == "1") or - (rest:lower() == "on") or (rest:lower() == "yes")) - end + if vtype == "s" then + value = rest + end + if vtype == "i" then + value = tonumber(rest) + end + if vtype == "b" then + value = ((rest:lower() == "true") or (rest == "1") or + (rest:lower() == "on") or (rest:lower() == "yes")) + end end repo.project_config.settings[key] = value local ok, msg = repo:save_admin("Changed project setting: " .. key, - env.GITANO_USER, env.GITANO_ORIG_USER) + env.GITANO_USER, env.GITANO_ORIG_USER) if not ok then - log.error(msg) - return "exit", 2 + log.error(msg) + return "exit", 2 end elseif cmdline[3] == "del" then local key = cmdline.orig_key for i = 4, #cmdline do - repo.project_config.settings[cmdline[4]] = nil + repo.project_config.settings[cmdline[4]] = nil end local ok, msg = repo:save_admin("Deleted project setting: " .. key, - env.GITANO_USER, env.GITANO_ORIG_USER) + env.GITANO_USER, env.GITANO_ORIG_USER) if not ok then - log.error(msg) - return "exit", 2 + log.error(msg) + return "exit", 2 end else log.error("Unknown sub command slipped through") @@ -499,9 +499,9 @@ local function builtin_config_run(conf, repo, cmdline, env) end assert(register_cmd("config", builtin_config_short, - builtin_config_helptext, - builtin_config_validate, builtin_config_prep, - builtin_config_run, true, false)) + builtin_config_helptext, + builtin_config_validate, builtin_config_prep, + builtin_config_run, true, false)) local builtin_destroy_short = "Destroy (delete) a repository" local builtin_destroy_helptext = [[ @@ -544,24 +544,24 @@ local function builtin_destroy_run(config, repo, cmdline, env) log.stdout(" ", token) else if cmdline[3] ~= token and cmdline[3] ~= '--force' then - log.error("Confirmation token does not match, refusing to destroy") - return "exit", 1 + log.error("Confirmation token does not match, refusing to destroy") + return "exit", 1 end -- Tokens match, ask the repo to destroy itself local nowstamp = os.date("!%Y-%m-%d.%H:%M:%S.UTC") local ok, msg = repo:destroy_self(nowstamp .. "." .. - (repo.name:gsub("[^A-Za-z0-9_%.%-]", - "_")) .. - "." .. token .. ".destroyed") + (repo.name:gsub("[^A-Za-z0-9_%.%-]", + "_")) .. + "." .. token .. ".destroyed") if not ok then - log.error(msg) - return "exit", 1 + log.error(msg) + return "exit", 1 end log.stdout("Should you need to recover the repository you just destroyed") log.stdout("then you will need to speak with an admin as soon as possible") log.stdout("") - log.stdout("When you do, be sure to include the current time (" .. - nowstamp .. ").") + log.stdout("When you do, be sure to include the current time (" .. + nowstamp .. ").") log.stdout("It may also help if you include your token:") log.stdout(" ", token) log.stdout("") @@ -570,10 +570,10 @@ local function builtin_destroy_run(config, repo, cmdline, env) return "exit", 0 end -assert(register_cmd("destroy", builtin_destroy_short, - builtin_destroy_helptext, builtin_destroy_validate, - builtin_destroy_prep, builtin_destroy_run, - true, false)) +assert(register_cmd("destroy", builtin_destroy_short, + builtin_destroy_helptext, builtin_destroy_validate, + builtin_destroy_prep, builtin_destroy_run, + true, false)) local builtin_rename_short = "Rename a repository" local builtin_rename_helptext = [[ @@ -643,8 +643,8 @@ local function builtin_rename_run(config, repo, cmdline, env) end assert(register_cmd("rename", builtin_rename_short, builtin_rename_helptext, - builtin_rename_validate, builtin_rename_prep, - builtin_rename_run, true, false)) + builtin_rename_validate, builtin_rename_prep, + builtin_rename_run, true, false)) local builtin_ls_short = "List repositories on the server" local builtin_ls_helptext = [[ @@ -705,10 +705,10 @@ local function builtin_ls_run(config, _, cmdline, env) local firstpat, verbose, all = 2, false, false while lsargs[cmdline[firstpat]] do if lsargs[cmdline[firstpat]] == "verbose" then - firstpat, verbose = firstpat + 1, true + firstpat, verbose = firstpat + 1, true end if lsargs[cmdline[firstpat]] == "all" then - firstpat, all = firstpat + 1, true + firstpat, all = firstpat + 1, true end end for i = firstpat, #cmdline do @@ -716,53 +716,53 @@ local function builtin_ls_run(config, _, cmdline, env) local escaping, star, used_evil = false, false, false c, input = input:match("^(.)(.*)$") while c and c ~= "" do - if escaping then - pat = pat .. (builtin_ls_special[c] and "%" or "") .. c - if c == "/" then - used_evil = true - end - escaping = false - else - if c == "*" then - if star then - -- ** - pat = pat .. ".*" - used_evil = true - star = false - else - star = true - end - else - if star then - -- * - pat = pat .. "[^/]*" - star = false - end - if c == "?" then - pat = pat .. "[^/]" - elseif c == "\\" then - escaping = true - else - pat = pat .. (builtin_ls_special[c] and "%" or "") .. c - if c == "/" then - used_evil = true - end - end - end - end - c, input = input:match("^(.)(.*)$") + if escaping then + pat = pat .. (builtin_ls_special[c] and "%" or "") .. c + if c == "/" then + used_evil = true + end + escaping = false + else + if c == "*" then + if star then + -- ** + pat = pat .. ".*" + used_evil = true + star = false + else + star = true + end + else + if star then + -- * + pat = pat .. "[^/]*" + star = false + end + if c == "?" then + pat = pat .. "[^/]" + elseif c == "\\" then + escaping = true + else + pat = pat .. (builtin_ls_special[c] and "%" or "") .. c + if c == "/" then + used_evil = true + end + end + end + end + c, input = input:match("^(.)(.*)$") end if star then - -- spare star - pat = pat .. "[^/]*" + -- spare star + pat = pat .. "[^/]*" end if cmdline[i]:match("/$") then pat = pat .. ".*" end if used_evil then - pat = "^/" .. pat .. "%.git$" + pat = "^/" .. pat .. "%.git$" else - pat = "/" .. pat .. "%.git$" + pat = "/" .. pat .. "%.git$" end log.debug("PAT:", pat) pats[#pats+1] = pat @@ -775,31 +775,31 @@ local function builtin_ls_run(config, _, cmdline, env) local _ctx = cmdline._ctx local function filter_callback(name) for i = 1, #pats do - if ("/" .. name):match(pats[i]) then - return true - end + if ("/" .. name):match(pats[i]) then + return true + end end end local function callback(reponame, repo, msg) if repo then - local archived = repo:conf_get("project.archived") - if archived and not all then return end - local ctx = util.deep_copy(_ctx) - ctx.operation = "read" - local action, reason = repo:run_lace(ctx) - if action == "allow" then - ctx = util.deep_copy(_ctx) - ctx.operation = "write" - action, reason = repo:run_lace(ctx) - local tail = "" - if verbose then - local desc = repo:conf_get("project.description") - desc = desc:gsub("\n.*", "") - tail = " " .. repo:conf_get("project.head") .. " " .. desc - end - log.stdout((action == "allow" and "RW" or "R ") .. - (archived and "A" or " "), repo.name .. tail) - end + local archived = repo:conf_get("project.archived") + if archived and not all then return end + local ctx = util.deep_copy(_ctx) + ctx.operation = "read" + local action, reason = repo:run_lace(ctx) + if action == "allow" then + ctx = util.deep_copy(_ctx) + ctx.operation = "write" + action, reason = repo:run_lace(ctx) + local tail = "" + if verbose then + local desc = repo:conf_get("project.description") + desc = desc:gsub("\n.*", "") + tail = " " .. repo:conf_get("project.head") .. " " .. desc + end + log.stdout((action == "allow" and "RW" or "R ") .. + (archived and "A" or " "), repo.name .. tail) + end end end repository.foreach(config, callback, filter_callback) @@ -807,8 +807,8 @@ local function builtin_ls_run(config, _, cmdline, env) end assert(register_cmd("ls", builtin_ls_short, builtin_ls_helptext, - builtin_ls_validate, builtin_ls_prep, builtin_ls_run, - false, false)) + builtin_ls_validate, builtin_ls_prep, builtin_ls_run, + false, false)) local usercmds = require 'gitano.usercommand' diff --git a/lib/gitano/config.lua b/lib/gitano/config.lua index 76262f0..a46df21 100644 --- a/lib/gitano/config.lua +++ b/lib/gitano/config.lua @@ -24,9 +24,9 @@ local lib_bin_path = "/tmp/DOES_NOT_EXIST" local share_path = "/tmp/DOES_NOT_EXIST" local repo_path = "/tmp/DOES_NOT_EXIST" -local admin_name = { - realname = "Gitano", - email = "gitano@gitano-admin.git" +local admin_name = { + realname = "Gitano", + email = "gitano@gitano-admin.git" } local required_confs = { @@ -65,7 +65,7 @@ local function parse_admin_config(commit) local conf, err = clod.parse(flat_tree["site.conf"].obj.content, - "gitano-admin:" .. commit.sha .. ":site.conf") + "gitano-admin:" .. commit.sha .. ":site.conf") if not conf then return nil, err @@ -75,8 +75,8 @@ local function parse_admin_config(commit) for k, t in pairs(required_confs) do if type(conf.settings[k]) ~= t then - return nil, i18n.expand("ERROR_SITE_CONF_TYPE", - {sha=commit.sha, key=k, want=t, got=type(conf.settings[k])}) + return nil, i18n.expand("ERROR_SITE_CONF_TYPE", + {sha=commit.sha, key=k, want=t, got=type(conf.settings[k])}) end end @@ -94,7 +94,7 @@ local function parse_admin_config(commit) -- Found a user, fill them out local user_clod, err = clod.parse(obj.obj.content, - commit.sha .. ":" .. prefix .. username .. "/user.conf") + commit.sha .. ":" .. prefix .. username .. "/user.conf") if not user_clod then return nil, err @@ -111,7 +111,7 @@ local function parse_admin_config(commit) end users[username] = setmetatable({ clod = user_clod, keys = {}, - meta = { prefix = prefix }, }, user_mt) + meta = { prefix = prefix }, }, user_mt) end end @@ -139,17 +139,17 @@ local function parse_admin_config(commit) if (keytype ~= "ssh-rsa") and (keytype ~= "ssh-dss") and (keytype ~= "ecdsa-sha2-nistp256") and (keytype ~= "ecdsa-sha2-nistp384") and - (keytype ~= "ecdsa-sha2-nistp521") then + (keytype ~= "ecdsa-sha2-nistp521") then return nil, i18n.expand("ERROR_BAD_KEY_TYPE", {keytype=keytype, filename=filename}) end if all_keys[this_key] then - return nil, i18n.expand( - "ERROR_DUPLICATE_KEY", - {keyname=keyname, username=username, - otherkey=all_keys[this_key].keyname, - otheruser=all_keys[this_key].username}) + return nil, i18n.expand( + "ERROR_DUPLICATE_KEY", + {keyname=keyname, username=username, + otherkey=all_keys[this_key].keyname, + otheruser=all_keys[this_key].username}) end all_keys[this_key] = { keyname = keyname, username = username } users[username].keys[keyname] = { @@ -166,76 +166,76 @@ local function parse_admin_config(commit) for filename, obj in pairs(flat_tree) do local prefix, groupname = filename:match("^(groups/.-)([a-z][a-z0-9_.-]+)%.conf$") if prefix and groupname then - if groups[groupname] then - return nil, i18n.expand("ERROR_DUPLICATE_GROUP", {name=groupname}) - end - if not is_blob(obj) then - return nil, i18n.expand("ERROR_GROUP_NOT_BLOB", {path=prefix..groupname}) - end - local group_clod, err = - clod.parse(obj.obj.content, - "gitano-admin:" .. commit.sha .. ":" .. - prefix .. groupname .. ".conf", true) - - if not group_clod then - return nil, err - end - if type(group_clod.settings.description) ~= "string" then - return nil, i18n.expand("ERROR_GROUP_NO_DESCRIPTION", {name=groupname}) - end - local group_globals = { - clod = group_clod, - settings = group_clod.settings, - members = {}, - subgroups = {}, - } - for i, member in ipairs(group_clod:get_list("members")) do - group_globals.members[i] = member - group_globals.members[member] = i - end - for i, subgroup in ipairs(group_clod:get_list("subgroups")) do - group_globals.subgroups[i] = subgroup - group_globals.subgroups[subgroup] = i - end - function group_globals.changed_tables() - group_globals.clod:set_list("members", group_globals.members) - group_globals.clod:set_list("subgroups", group_globals.subgroups) - end - groups[groupname] = group_globals - groups[groupname].meta = { prefix = prefix } + if groups[groupname] then + return nil, i18n.expand("ERROR_DUPLICATE_GROUP", {name=groupname}) + end + if not is_blob(obj) then + return nil, i18n.expand("ERROR_GROUP_NOT_BLOB", {path=prefix..groupname}) + end + local group_clod, err = + clod.parse(obj.obj.content, + "gitano-admin:" .. commit.sha .. ":" .. + prefix .. groupname .. ".conf", true) + + if not group_clod then + return nil, err + end + if type(group_clod.settings.description) ~= "string" then + return nil, i18n.expand("ERROR_GROUP_NO_DESCRIPTION", {name=groupname}) + end + local group_globals = { + clod = group_clod, + settings = group_clod.settings, + members = {}, + subgroups = {}, + } + for i, member in ipairs(group_clod:get_list("members")) do + group_globals.members[i] = member + group_globals.members[member] = i + end + for i, subgroup in ipairs(group_clod:get_list("subgroups")) do + group_globals.subgroups[i] = subgroup + group_globals.subgroups[subgroup] = i + end + function group_globals.changed_tables() + group_globals.clod:set_list("members", group_globals.members) + group_globals.clod:set_list("subgroups", group_globals.subgroups) + end + groups[groupname] = group_globals + groups[groupname].meta = { prefix = prefix } end - end + end -- Attempt a clean flattening of each group to ensure no loops for gname, gtab in pairs(groups) do local all_members = {} local all_subgroups = {} - local function add_group(grname, grtab, path) - if not grtab then - log.fatal(i18n.expand("ERROR_GROUP_NOT_FOUND", {name=grname, path=path})) - return - end - if all_subgroups[grname] then - return nil, i18n.expand("ERROR_GROUP_LOOP", {path=path}) - end - for _, un in ipairs(grtab.members) do - if users[un] then - all_members[un] = path - end - end - all_subgroups[grname] = true - for _, gn in ipairs(grtab.subgroups) do - local ok, msg = add_group(gn, groups[gn], path .. "!" .. gn) - if not ok then - return nil, msg - end - end - all_subgroups[grname] = false - return true + local function add_group(grname, grtab, path) + if not grtab then + log.fatal(i18n.expand("ERROR_GROUP_NOT_FOUND", {name=grname, path=path})) + return + end + if all_subgroups[grname] then + return nil, i18n.expand("ERROR_GROUP_LOOP", {path=path}) + end + for _, un in ipairs(grtab.members) do + if users[un] then + all_members[un] = path + end + end + all_subgroups[grname] = true + for _, gn in ipairs(grtab.subgroups) do + local ok, msg = add_group(gn, groups[gn], path .. "!" .. gn) + if not ok then + return nil, msg + end + end + all_subgroups[grname] = false + return true end local ok, msg = add_group(gname, gtab, gname) if not ok then - return nil, msg + return nil, msg end gtab.filtered_members = all_members end @@ -245,16 +245,16 @@ local function parse_admin_config(commit) for filename, obj in pairs(flat_tree) do local prefix, keyringname = filename:match("^(keyrings/.-)([a-z][a-z0-9_.-]+)%.gpg$") if prefix and keyringname then - if keyrings[keyringname] then - return nil, i18n.expand("ERROR_DUPLICATE_KEYRING", {name=keyringname}) - end - if not is_blob(obj) then - return nil, i18n.expand("ERROR_KEYRING_NOT_BLOB", {path=prefix .. groupname}) - end - keyrings[keyringname] = { - meta = { prefix = prefix }, - blob = obj.obj - } + if keyrings[keyringname] then + return nil, i18n.expand("ERROR_DUPLICATE_KEYRING", {name=keyringname}) + end + if not is_blob(obj) then + return nil, i18n.expand("ERROR_KEYRING_NOT_BLOB", {path=prefix .. groupname}) + end + keyrings[keyringname] = { + meta = { prefix = prefix }, + blob = obj.obj + } end end @@ -262,13 +262,13 @@ local function parse_admin_config(commit) -- and (c) has at least one key and/or a password set if users["gitano-bypass"] then for gname, gtab in pairs(groups) do - if gtab.filtered_members["gitano-bypass"] then - return nil, i18n.expand("ERROR_BYPASS_USER_IN_GROUP", {group=gname}) - end + if gtab.filtered_members["gitano-bypass"] then + return nil, i18n.expand("ERROR_BYPASS_USER_IN_GROUP", {group=gname}) + end end local okay = next(users["gitano-bypass"].keys) or users["gitano-bypass"].clod["passwd.hash"] if not okay then - return nil, i18n.expand("ERROR_BYPASS_USER_LACKING") + return nil, i18n.expand("ERROR_BYPASS_USER_LACKING") end else return nil, i18n.expand("ERROR_NO_BYPASS_USER_FOUND") @@ -319,7 +319,7 @@ end local function has_global_hook(conf, hook) return (conf.content["global-hooks/" .. hook .. ".lua"] ~= nil and - conf.content["global-hooks/" .. hook .. ".lua"].type == "blob") + conf.content["global-hooks/" .. hook .. ".lua"].type == "blob") end local function get_default_hook_content(conf, filename) @@ -332,10 +332,10 @@ local function generate_ssh_config(conf) local ret = {"","### Gitano Keys ###"} for u, t in pairs(conf.users) do for ktag, keytab in pairs(t.keys) do - log.debug(i18n.expand("DEBUG_ADDING_SSH_KEY", {user=u, key=ktag})) - ret[#ret+1] = - (('command="%s/gitano-auth \\"%s\\" \\"%s\\" \\"%s\\"",no-agent-forwarding,no-port-forwarding,no-pty,no-user-rc,no-X11-forwarding %s'): - format(lib_bin_path, repo_path, u, ktag, keytab.data)) + log.debug(i18n.expand("DEBUG_ADDING_SSH_KEY", {user=u, key=ktag})) + ret[#ret+1] = + (('command="%s/gitano-auth \\"%s\\" \\"%s\\" \\"%s\\"",no-agent-forwarding,no-port-forwarding,no-pty,no-user-rc,no-X11-forwarding %s'): + format(lib_bin_path, repo_path, u, ktag, keytab.data)) end end ret[#ret+1] = "### End Gitano Keys ###" @@ -350,7 +350,7 @@ local function update_ssh_keys(conf, ssh_path) local home = luxio.getenv "HOME" if not home then - log.fatal(i18n.expand("ERROR_CANNOT_FIND_HOME")) + log.fatal(i18n.expand("ERROR_CANNOT_FIND_HOME")) end ssh_path = home .. "/.ssh/authorized_keys" @@ -383,10 +383,10 @@ local function populate_context(conf, ctx, username) local grps = {} for grp, gtab in pairs(conf.groups) do if gtab.filtered_members[username] then - -- Array for pattern matches - grps[#grps+1] = grp - -- Set for exact matches - grps[grp] = true + -- Array for pattern matches + grps[#grps+1] = grp + -- Set for exact matches + grps[grp] = true end end ctx.group = grps @@ -415,7 +415,7 @@ local function commit_config_changes(conf, desc, author, committer) -- Shallow copy the tree ready for mods, skipping keyrings, users and groups for k,v in pairs(conf.content) do if not (k:match("^users/") or - k:match("^groups/") or + k:match("^groups/") or k:match("^keyrings/")) then newtree[k] = v end @@ -455,23 +455,23 @@ local function commit_config_changes(conf, desc, author, committer) end author = (author and { - realname = conf.users[author].real_name, - email = conf.users[author].email_address - }) or admin_name + realname = conf.users[author].real_name, + email = conf.users[author].email_address + }) or admin_name committer = (committer and { - realname = conf.users[committer].real_name, - email = conf.users[committer].email_address - }) or author + realname = conf.users[committer].real_name, + email = conf.users[committer].email_address + }) or author - local commit, msg = + local commit, msg = gall.commit.create(conf.repo.git, { - author = author, - committer = committer, - message = desc or "Updated", - tree = tree, - parents = { conf.commit } - }) + author = author, + committer = committer, + message = desc or "Updated", + tree = tree, + parents = { conf.commit } + }) if not commit then return nil, msg end @@ -483,9 +483,9 @@ local function commit_config_changes(conf, desc, author, committer) end -- Create/Update the HEAD ref - local ok, msg = conf.repo.git:update_ref(conf.repo.git.HEAD, - commit.sha, nil, - conf.commit.sha) + local ok, msg = conf.repo.git:update_ref(conf.repo.git.HEAD, + commit.sha, nil, + conf.commit.sha) if not ok then return nil, msg end diff --git a/lib/gitano/copycommand.lua b/lib/gitano/copycommand.lua index 51dca74..4dfe800 100644 --- a/lib/gitano/copycommand.lua +++ b/lib/gitano/copycommand.lua @@ -58,8 +58,8 @@ local function builtin_copy_prep(config, srcrepo, cmdline, context) -- Check 3, target repository does not already exist -- We knew this for a while but failing earlier would leak its existence. if not cmdline.tgtrepo.is_nascent then - log.error("Repository", cmdline.tgtrepo.name, "already exists") - return "deny", "Repository already exists" + log.error("Repository", cmdline.tgtrepo.name, "already exists") + return "deny", "Repository already exists" end -- Check 4, target repository can be created ctx = util.deep_copy(context) @@ -87,11 +87,11 @@ local function builtin_copy_run(config, repo, cmdline, env) log.fatal("Cannot continue") return false end - + local owner = env["GITANO_USER"] log.chat("Setting repository owner to", owner) ok, msg = tgtrepo:conf_set_and_save("project.owner", owner, - env.GITANO_USER, env.GITANO_ORIG_USER) + env.GITANO_USER, env.GITANO_ORIG_USER) if not ok then log.error(msg) return "exit", 1 @@ -102,8 +102,8 @@ local function builtin_copy_run(config, repo, cmdline, env) log.error(msg) return "exit", 1 end - log.state("Repository", tgtrepo.name, - "copied ok. Remember to configure rules etc.") + log.state("Repository", tgtrepo.name, + "copied ok. Remember to configure rules etc.") return "exit", 0 end diff --git a/lib/gitano/i18n.lua b/lib/gitano/i18n.lua index 4b5198e..f454a2f 100644 --- a/lib/gitano/i18n.lua +++ b/lib/gitano/i18n.lua @@ -48,10 +48,10 @@ local function base_packloader(codex, pack, fulllang) if chunk then local ok, tab = pcall(chunk) if ok and type(tab) == "table" then - -- Able to load the base pack, so inject it... - for k, v in pairs(tab) do - pack:add_token(k, v) - end + -- Able to load the base pack, so inject it... + for k, v in pairs(tab) do + pack:add_token(k, v) + end end end end @@ -68,10 +68,10 @@ local function plugin_packloader(codex, pack, fulllang, path) if chunk then local ok, tab = pcall(chunk) if ok and type(tab) == "table" then - -- Able to load the plugin pack, so inject it... - for k, v in pairs(tab) do - pack:add_token(k, v) - end + -- Able to load the plugin pack, so inject it... + for k, v in pairs(tab) do + pack:add_token(k, v) + end end end end @@ -80,7 +80,7 @@ local function set_langpack_path(path) basepath = path initialise() codex:add_loader(function(codex, pack, fulllang) - return plugin_packloader(codex, pack, fulllang, path) + return plugin_packloader(codex, pack, fulllang, path) end) end @@ -100,7 +100,7 @@ end local function expand(token, vars) initialise() return activeencoding:touser(codex:expand(activelang, activesublang, - token, vars or {})) + token, vars or {})) end local function decode(s) diff --git a/lib/gitano/lace.lua b/lib/gitano/lace.lua index 6b2c66d..5712b5e 100644 --- a/lib/gitano/lace.lua +++ b/lib/gitano/lace.lua @@ -24,23 +24,23 @@ local function _loader(ctx, _name) if not global_name then -- Project load if ctx.project and not ctx.project_tree then - ctx.project_tree = gall.tree.flatten(ctx.project.content.tree.content) + ctx.project_tree = gall.tree.flatten(ctx.project.content.tree.content) end if ctx.project_tree then - tree = ctx.project_tree - sha = ctx.project.sha + tree = ctx.project_tree + sha = ctx.project.sha end else -- Global load if global_lookaside[global_name] then - local resolved = global_lookaside[global_name] - if type(resolved) == "function" then - resolved = resolved(ctx) - end - return "global_lookaside::" .. global_name, resolved + local resolved = global_lookaside[global_name] + if type(resolved) == "function" then + resolved = resolved(ctx) + end + return "global_lookaside::" .. global_name, resolved end if not ctx.global_tree then - ctx.global_tree = gall.tree.flatten(ctx.global.content.tree.content) + ctx.global_tree = gall.tree.flatten(ctx.global.content.tree.content) end tree = ctx.global_tree sha = ctx.global.sha @@ -53,7 +53,7 @@ local function _loader(ctx, _name) local real_name = sha .. "::" .. blob_name if not tree[blob_name] or tree[blob_name].type ~= "blob" then local m = i18n.expand("ERROR_UNABLE_TO_FIND_RULE", - { name=blob_name, sha=sha, inname=_name }) + { name=blob_name, sha=sha, inname=_name }) log.ddebug(m) return lace.error.error(m) end @@ -62,20 +62,20 @@ end local match_types = { exact = function(want, have) - return want == have - end, + return want == have + end, prefix = function(want, have) - return have:sub(1, #want) == want - end, + return have:sub(1, #want) == want + end, suffix = function(want, have) - return have:sub(-#want) == want - end, + return have:sub(-#want) == want + end, pattern = function(want, have) - return (have:match(want) ~= nil) - end, + return (have:match(want) ~= nil) + end, pcre = function(want, have) - return (pcre.match(have, want) ~= nil) - end + return (pcre.match(have, want) ~= nil) + end } -- Match aliases (auto-inverted) @@ -113,10 +113,10 @@ local function _do_simple_match(ctx, key, matchtype, value) else local ret = false for k in pairs(kk) do - ret = ret or check(value, k) + ret = ret or check(value, k) end if matchtype:sub(1,1) == "!" then - ret = not ret + ret = not ret end return ret end @@ -181,8 +181,8 @@ local base_compcontext = { local function cloddly_bless(ctx) local function indexer(tab, name) if name:sub(1,7) == "config/" then - tab[name] = _simple_match - return _simple_match + tab[name] = _simple_match + return _simple_match end end setmetatable(ctx._lace.controltype, {__index = indexer}) @@ -198,9 +198,9 @@ local function compile_ruleset(repo, adminsha, globaladminsha) compcontext.repo = repo if not repo.is_nascent then if not adminsha then - compcontext.project = repo.git:get("refs/gitano/admin") + compcontext.project = repo.git:get("refs/gitano/admin") else - compcontext.project = repo.git:get(adminsha) + compcontext.project = repo.git:get(adminsha) end end if not globaladminsha then diff --git a/lib/gitano/log.lua b/lib/gitano/log.lua index e1df00b..7df5e76 100644 --- a/lib/gitano/log.lua +++ b/lib/gitano/log.lua @@ -111,7 +111,7 @@ local function set_prefix(new_prefix) prefix = "" else if new_prefix == "true" then - new_prefix = "Gitano" + new_prefix = "Gitano" end prefix = "[" .. tostring(new_prefix) .. "] " end @@ -121,7 +121,7 @@ local function AT(LVL, ...) if level >= LVL then local strs = {...} for i = 1, #strs do - strs[i] = tostring(strs[i]) or "?" + strs[i] = tostring(strs[i]) or "?" end stream:write(prefix .. concat(strs, " ") .. "\n") end @@ -187,8 +187,7 @@ local function deepdebug(...) end local function set_level(l) - if type(l) ~= "number" or - l < ERRS or l > DEEPDEBUG then + if type(l) ~= "number" or l < ERRS or l > DEEPDEBUG then level = WARN warn("Attempted to set level to", tostring(l), "- defaulted to warnings") end @@ -196,16 +195,14 @@ local function set_level(l) end local function bump_level(l) - if type(l) ~= "number" or - l < ERRS or l > DEEPDEBUG then + if type(l) ~= "number" or l < ERRS or l > DEEPDEBUG then warn("Attempted to bump level to", tostring(l), "- left alone") end if level < l then level = l end end local function cap_level(l) - if type(l) ~= "number" or - l < ERRS or l > DEEPDEBUG then + if type(l) ~= "number" or l < ERRS or l > DEEPDEBUG then warn("Attempted to cap level to", tostring(l), "- left alone") end if level > l then level = l end @@ -217,33 +214,33 @@ end -- Check for default log level based on environment do - local loglevel = luxio.getenv("LC_GITANO_LOG_LEVEL") or - luxio.getenv("GITANO_LOG_LEVEL") + local loglevel = ( + luxio.getenv("LC_GITANO_LOG_LEVEL") or luxio.getenv("GITANO_LOG_LEVEL")) if loglevel then if tonumber(loglevel) then - set_level(tonumber(loglevel)) + set_level(tonumber(loglevel)) else - loglevel = loglevel:lower() - if (loglevel == "warn" or loglevel == "warning" or - loglevel == "warnings") then - level = WARN - elseif loglevel == "chat" then - level = CHAT - elseif loglevel == "info" then - level = INFO - elseif loglevel == "debug" then - level = DEBUG - elseif (loglevel == "deepdebug" or loglevel == "ddebug" or - loglevel == "all") then - level = DEEPDEBUG - end + loglevel = loglevel:lower() + if (loglevel == "warn" or loglevel == "warning" or + loglevel == "warnings") then + level = WARN + elseif loglevel == "chat" then + level = CHAT + elseif loglevel == "info" then + level = INFO + elseif loglevel == "debug" then + level = DEBUG + elseif (loglevel == "deepdebug" or loglevel == "ddebug" or + loglevel == "all") then + level = DEEPDEBUG + end end if level == nil then - level = WARN + level = WARN end end - local do_debug = luxio.getenv("LC_GITANO_DEBUG") or + local do_debug = luxio.getenv("LC_GITANO_DEBUG") or luxio.getenv("GITANO_DEBUG") if do_debug and do_debug ~= "" then level = DEBUG diff --git a/lib/gitano/plugins.lua b/lib/gitano/plugins.lua index 57f73c3..a4ba912 100644 --- a/lib/gitano/plugins.lua +++ b/lib/gitano/plugins.lua @@ -20,8 +20,8 @@ local function find_plugins(path) for _, entry in ipairs(path) do local dirp, err = sio.opendir(entry) if not dirp then - log.warning(i18n.expand("WARN_UNABLE_SCAN_PLUGINDIR", - {dir=entry, reason=err})) + log.warning(i18n.expand("WARN_UNABLE_SCAN_PLUGINDIR", + {dir=entry, reason=err})) else for filename, fileinfo in dirp:iterate() do local plugin_name = filename:match(plugin_name_pattern) @@ -45,21 +45,21 @@ local function load_plugins(path) plugin_name .. ".lua") local chunk, err = loadfile(filepath) if not chunk then - log.warning(i18n.expand("WARN_UNABLE_LOAD_PLUGIN", - { plugin=plugin_name, - file=to_load[plugin_name], - reason=err })) + log.warning(i18n.expand("WARN_UNABLE_LOAD_PLUGIN", + { plugin=plugin_name, + file=to_load[plugin_name], + reason=err })) else local ok, err = pcall(chunk) if not ok then - log.warning(i18n.expand("WARN_UNABLE_RUN_PLUGIN", - { plugin=plugin_name, - file=to_load[plugin_name], - reason=err })) + log.warning(i18n.expand("WARN_UNABLE_RUN_PLUGIN", + { plugin=plugin_name, + file=to_load[plugin_name], + reason=err })) end end i18n.add_plugin_path(util.path_join(to_load[plugin_name], - plugin_name)) + plugin_name)) end end diff --git a/lib/gitano/repocommand.lua b/lib/gitano/repocommand.lua index af4584a..2163f4d 100644 --- a/lib/gitano/repocommand.lua +++ b/lib/gitano/repocommand.lua @@ -29,7 +29,7 @@ usage: count-objects repo [options] Counts objects in your repository. -You must have read access to the repository in order +You must have read access to the repository in order to run count-objects. ]] @@ -76,17 +76,17 @@ end local function register_repocommand(register_cmd) assert(register_cmd("gc", builtin_gc_short, builtin_gc_helptext, - builtin_simple_validate, builtin_gc_prep, - builtin_simple_run, true, false)) + builtin_simple_validate, builtin_gc_prep, + builtin_simple_run, true, false)) assert(register_cmd("count-objects", builtin_count_objects_short, - builtin_count_objects_helptext, builtin_simple_validate, - builtin_count_objects_prep, builtin_simple_run, - true, false)) + builtin_count_objects_helptext, builtin_simple_validate, + builtin_count_objects_prep, builtin_simple_run, + true, false)) assert(register_cmd("fsck", builtin_fsck_short, builtin_fsck_helptext, - builtin_simple_validate, builtin_fsck_prep, - builtin_simple_run, true, false)) + builtin_simple_validate, builtin_fsck_prep, + builtin_simple_run, true, false)) end return { diff --git a/lib/gitano/repository.lua b/lib/gitano/repository.lua index 879d001..7858a33 100644 --- a/lib/gitano/repository.lua +++ b/lib/gitano/repository.lua @@ -26,9 +26,9 @@ project.description "" project.owner "gitano/nobody" ]] -local admin_name = { - realname = "Gitano", - email = "gitano@gitano-admin.git" +local admin_name = { + realname = "Gitano", + email = "gitano@gitano-admin.git" } local adminrefname = "refs/gitano/admin" @@ -42,11 +42,11 @@ function repo_method:load_from_admin_ref(filename) local entry = flat_tree[filename] if not entry then return nil, i18n.expand("ERROR_GENERIC_CONF_NOT_FOUND", - {sha=admincommit.sha, name=filename}) + {sha=admincommit.sha, name=filename}) end if entry.obj.type ~= "blob" then return nil, i18n.expand("ERROR_GENERIC_CONF_NOT_BLOB", - {sha=admincommit.sha, name=filename}) + {sha=admincommit.sha, name=filename}) end return entry.obj.content, admincommit.sha .. "::" .. filename end @@ -72,7 +72,7 @@ end function repo_method:fs_path() return ("%s/%s.git"):format(config.repo_path(), - self.name) + self.name) end function repo_method:run_checks() @@ -85,41 +85,41 @@ function repo_method:run_checks() -- First, the blob for the rules local rules, msg = gall.object.create(self.git, "blob", base_rules) if not rules then - return nil, msg + return nil, msg end local conf, msg = gall.object.create(self.git, "blob", base_config) if not conf then - return nil, msg + return nil, msg end -- Next the tree containing the blob - local flat_tree = { - ["rules/main.lace"] = rules, - ["project.conf"] = conf, + local flat_tree = { + ["rules/main.lace"] = rules, + ["project.conf"] = conf, } local tree, msg = gall.tree.create(self.git, flat_tree) if not tree then - return nil, msg + return nil, msg end -- Now a commit of the blob, using the gitano admin identity - local commit, msg = - gall.commit.create(self.git, { - author = admin_name, - committer = admin_name, - message = i18n.expand("INITIAL_ADMIN_TREE"), - tree = tree - }) + local commit, msg = + gall.commit.create(self.git, { + author = admin_name, + committer = admin_name, + message = i18n.expand("INITIAL_ADMIN_TREE"), + tree = tree + }) if not commit then - return nil, msg + return nil, msg end -- Finally create/update the gitano/admin ref local ok, msg = self.git:update_ref(adminrefname, commit.sha) if not ok then - return nil, msg + return nil, msg end end -- Admin tree exists, validate and load it... - local ok, tab = + local ok, tab = self:validate_admin_sha(self.git:get_ref(adminrefname)) if not ok then return nil, tab @@ -149,7 +149,7 @@ function repo_method:run_checks() if not ok then return nil, msg end - + -- And all is well return true end @@ -187,9 +187,9 @@ function repo_method:check_signature(obj, keyringname) while w < #b do _b, err = sfd:write(b, w) if _b == nil or _b < 1 then - -- I know we're not handling EINTR/EAGAIN, I don't care - w = -1 - break + -- I know we're not handling EINTR/EAGAIN, I don't care + w = -1 + break end w = w + _b end @@ -228,9 +228,9 @@ function repo_method:check_local_git_files() local fh, errmsg = sio.open(self:fs_path() .. "/git-daemon-export-ok", "wc") if fh then - fh:close() + fh:close() else - log.warn(i18n.expand("ERROR_CANNOT_CREATE_EXPORT_FILE", {reason=errmsg})) + log.warn(i18n.expand("ERROR_CANNOT_CREATE_EXPORT_FILE", {reason=errmsg})) end else luxio.unlink(self:fs_path() .. "/git-daemon-export-ok") @@ -242,14 +242,14 @@ function repo_method:check_local_git_files() fh:write("\n") fh:close() local ok, errno = luxio.rename(self:fs_path() .. ("/description.%d.new"):format(luxio.getpid()), - self:fs_path() .. "/description") + self:fs_path() .. "/description") if ok ~= 0 then - log.warn(i18n.expand("ERROR_UNABLE_TO_RENAME_INTO_PLACE", - {what="description", reason=luxio.strerror(errno)})) + log.warn(i18n.expand("ERROR_UNABLE_TO_RENAME_INTO_PLACE", + {what="description", reason=luxio.strerror(errno)})) end else log.warn(i18n.expand("ERROR_UNABLE_TO_WRITE_FILE", - {what="description", reason=tostring(err)})) + {what="description", reason=tostring(err)})) end -- Check that our HEAD is correctly configured local our_head = self:conf_get "project.head" @@ -261,7 +261,7 @@ function repo_method:check_local_git_files() local owner = self.config.users[self:conf_get "project.owner"] if owner then self.git:config("gitweb.owner", - owner.real_name .. " <" .. owner.email_address .. ">") + owner.real_name .. " <" .. owner.email_address .. ">") end -- Construct a cgitrc in case we're using cgit instead of gitweb local cgitrc = {} @@ -273,10 +273,10 @@ function repo_method:check_local_git_files() "snapshots" } do local v = self.project_config.settings["cgitrc." .. suffix] if v then - if v == "readme" and not v:find(":") then - v = ":" .. v - end - add_cgitrc(suffix, v) + if v == "readme" and not v:find(":") then + v = ":" .. v + end + add_cgitrc(suffix, v) end end if owner then @@ -298,14 +298,14 @@ function repo_method:check_local_git_files() fh:write(cgitrc) fh:close() local ok, errno = luxio.rename(self:fs_path() .. ("/cgitrc.%d.new"):format(luxio.getpid()), - self:fs_path() .. "/cgitrc") + self:fs_path() .. "/cgitrc") if ok ~= 0 then - log.warn(i18n.expand("ERROR_UNABLE_TO_RENAME_INTO_PLACE", - {what="cgitrc", reason=luxio.strerror(errno)})) + log.warn(i18n.expand("ERROR_UNABLE_TO_RENAME_INTO_PLACE", + {what="cgitrc", reason=luxio.strerror(errno)})) end else log.warn(i18n.expand("ERROR_UNABLE_TO_WRITE_FILE", - {what="cgitrc", reason=tostring(err)})) + {what="cgitrc", reason=tostring(err)})) end return true @@ -316,19 +316,19 @@ function repo_method:check_and_upgrade_hooks() for _, hook in ipairs {"pre-receive", "update", "post-receive"} do local hookfile = ("%s/hooks/%s"):format(self:fs_path(), hook) local hooktarget = ("%s/gitano-%s-hook"):format(config.lib_bin_path(), - hook) + hook) local ok, linkv = luxio.readlink(hookfile) local redo = false if ok > 0 then - if linkv ~= hooktarget then - redo = true - end + if linkv ~= hooktarget then + redo = true + end else - redo = true + redo = true end if redo then - luxio.unlink(hookfile) - luxio.symlink(hooktarget, hookfile) + luxio.unlink(hookfile) + luxio.symlink(hooktarget, hookfile) end end return true @@ -351,8 +351,8 @@ function repo_method:validate_admin_sha(sha) local conf_text = tree["project.conf"].obj.content local conf, err = clod.parse(conf_text, - self.name .. ":" .. - sha .. ":project.conf") + self.name .. ":" .. + sha .. ":project.conf") if not conf then return nil, err end @@ -365,7 +365,7 @@ function repo_method:validate_admin_sha(sha) conf.settings["owner"] = nil end if conf.settings["description"] and - not conf.settings["project.description"] then + not conf.settings["project.description"] then conf.settings["project.description"] = conf.settings["description"] conf.settings["description"] = nil end @@ -388,7 +388,7 @@ function repo_method:validate_admin_sha(sha) -- Generate a Lace for the project at this ref local lace, msg = lace.compile(self, sha) - if not lace then + if not lace then return nil, msg end -- And store it for use later @@ -399,24 +399,24 @@ end function repo_method:populate_context(context) util.add_splitable(context, "repository", self.name, - "/", "dirname", "basename") + "/", "dirname", "basename") context["_repo"] = self if not self.is_nascent then local lists_to_add = {} for k, v in self.project_config:each() do - if k:match("%.i_[0-9]+$") then - lists_to_add[k:gsub("%.i_[0-9]+$", "")] = true - else - local confkey = "config/" .. k:gsub("%.", "/") - context[confkey] = v - end + if k:match("%.i_[0-9]+$") then + lists_to_add[k:gsub("%.i_[0-9]+$", "")] = true + else + local confkey = "config/" .. k:gsub("%.", "/") + context[confkey] = v + end end for k in pairs(lists_to_add) do - local confkey = "config/" .. k:gsub("%.", "/") - local vallist = self.project_config:get_list(k) - local valset = {} - for _, v in pairs(vallist) do valset[v] = true end - context[confkey] = valset + local confkey = "config/" .. k:gsub("%.", "/") + local vallist = self.project_config:get_list(k) + local valset = {} + for _, v in pairs(vallist) do valset[v] = true end + context[confkey] = valset end end end @@ -425,7 +425,7 @@ function repo_method:realise() if not self.is_nascent then return false, i18n.expand("ERROR_REALISE_NON_NASCENT") end - + if not util.mkdir_p(util.dirname(self:fs_path())) then return false, i18n.expand("ERROR_CANNOT_PREP_PATH") end @@ -446,7 +446,7 @@ function repo_method:conf_set_and_save(conf, newvalue, author, committer) local oldvalue = self:conf_get(conf) self:conf_set(conf, newvalue) local ok, msg = self:save_admin("Setting " .. conf .. " to " .. newvalue, - author, committer) + author, committer) if not ok then self:conf_set(conf, oldvalue) return nil, msg @@ -462,7 +462,7 @@ function repo_method:set_head(newhead, author, committer) local oldhead = self:conf_get "project.head" self:conf_set("project.head", newhead) local ok, msg = self:save_admin(i18n.expand("MSG_CHANGING_HEAD"), - author, committer) + author, committer) if not ok then self:conf_set("project.head", oldhead) return nil, msg @@ -521,7 +521,7 @@ function repo_method:rename_to(somename) somename = somename:gsub("%.", "") -- Remove any leading or trailing / somename = somename:match("^/*(.-)/*$") - + local newpath = self.fs_path({name=somename,config=self.config}) if not util.mkdir_p(util.dirname(newpath)) then @@ -556,22 +556,22 @@ function repo_method:copy_to(target) ok, err = luxio.mkdir(temp_path, sio.tomode'0755') if ok ~= 0 then log.error(i18n.expand("ERROR_FAILED_TO_COPY", - {path=self:fs_path(), - newpath=newpath, - reason=i18n.expand("ERROR_COPY_IN_PROGRESS")})) + {path=self:fs_path(), + newpath=newpath, + reason=i18n.expand("ERROR_COPY_IN_PROGRESS")})) return false, i18n.expand("ERROR_COPY_IN_PROGRESS") end local from = self:fs_path() local function filter(parent, name, info) return parent == from and name == "objects" - or util.copy_dir_filter_base(parent, name, info) + or util.copy_dir_filter_base(parent, name, info) end -- copy non-objects parts of the git repository ok, err = util.copy_dir(from, temp_path, nil, filter) if not ok then log.error(i18n.expand("ERROR_FAILED_TO_COPY", - {path=from, newpath=temp_path, reason=err})) + {path=from, newpath=temp_path, reason=err})) util.rm_rf(temp_path) return false, i18n.expand("ERROR_FAILED_COPYING_CONTENT") end @@ -583,7 +583,7 @@ function repo_method:copy_to(target) cbs) if not ok then log.error(i18n.expand("ERROR_FAILED_HARDLINKING", - {path=from, newpath=temp_path, reason=err})) + {path=from, newpath=temp_path, reason=err})) util.rm_rf(temp_path) return ok, i18n.expand("ERROR_FAILED_COPYING_CONTENT") end @@ -592,8 +592,8 @@ function repo_method:copy_to(target) ok, err = luxio.rename(temp_path, newpath) if ok ~= 0 then log.error(i18n.expand("ERROR_FAILED_RENAME_REPOSITORY", - {from=temp_path, to=newpath, - reason=luxio.strerr(err)})) + {from=temp_path, to=newpath, + reason=luxio.strerr(err)})) util.rm_rf(temp_path) return false, i18n.expand("ERROR_FAILED_COPYING_CONTENT") end @@ -615,18 +615,18 @@ function repo_method:update_modified_date(shas) local function update_based_on(mtime, offset) mtime = tonumber(mtime) if mtime > last_mod_mtime then - last_mod_mtime = mtime - last_mod_offset = offset + last_mod_mtime = mtime + last_mod_offset = offset end end local f = io.open(modfile, "r") if f then local s = f:read("*l") if s then - local cur_mod_time, cur_mod_offset = s:find("^([0-9]+) ([+-][0-9]+)$") - if cur_mod_time then - update_based_on(cur_mod_time, cur_mod_offset) - end + local cur_mod_time, cur_mod_offset = s:find("^([0-9]+) ([+-][0-9]+)$") + if cur_mod_time then + update_based_on(cur_mod_time, cur_mod_offset) + end end f:close() end @@ -635,11 +635,11 @@ function repo_method:update_modified_date(shas) local obj = self.git:get(sha) if obj.type == "tag" then local tagger = obj.content.tagger - update_based_on(tagger.unixtime, tagger.timezone) + update_based_on(tagger.unixtime, tagger.timezone) elseif obj.type == "commit" then - local committer, author = obj.content.committer, obj.content.author - update_based_on(committer.unixtime, committer.timezone) - update_based_on(author.unixtime, author.timezone) + local committer, author = obj.content.committer, obj.content.author + update_based_on(committer.unixtime, committer.timezone) + update_based_on(author.unixtime, author.timezone) end end end @@ -670,22 +670,22 @@ function repo_method:save_admin(reason, author, committer) return nil, msg end author = (author and { - realname = self.config.users[author].real_name, - email = self.config.users[author].email_address - }) or admin_name + realname = self.config.users[author].real_name, + email = self.config.users[author].email_address + }) or admin_name committer = (committer and { - realname = self.config.users[committer].real_name, - email = self.config.users[committer].email_address - }) or author + realname = self.config.users[committer].real_name, + email = self.config.users[committer].email_address + }) or author -- Now a commit of the blob, using the gitano admin identity - local commit, msg = + local commit, msg = gall.commit.create(self.git, { - author = author, - committer = committer, - message = reason or i18n.expand("MSG_UPDATED_ADMIN_TREE"), - tree = tree, - parents = { curcommit } - }) + author = author, + committer = committer, + message = reason or i18n.expand("MSG_UPDATED_ADMIN_TREE"), + tree = tree, + parents = { curcommit } + }) if not commit then return nil, msg end @@ -696,11 +696,11 @@ function repo_method:save_admin(reason, author, committer) end -- Finally create/update the gitano/admin ref local ok, msg = self.git:update_ref(adminrefname, commit.sha, nil, - curcommit.sha) + curcommit.sha) if not ok then return nil, msg end - + return self:run_checks() end @@ -737,30 +737,30 @@ local function check_repodir(dirname, repo) if not dirp then if err == luxio.ENOENT then - repo.is_nascent = true - return repo + repo.is_nascent = true + return repo else - return nil, luxio.strerror(err) + return nil, luxio.strerror(err) end else local needed = { - branches = true, - config = true, - description = true, - HEAD = true, - objects = true, - hooks = true, - refs = true + branches = true, + config = true, + description = true, + HEAD = true, + objects = true, + hooks = true, + refs = true } local e, i repeat - e, i = luxio.readdir(dirp) - if e == 0 then - needed[i.d_name] = nil - end + e, i = luxio.readdir(dirp) + if e == 0 then + needed[i.d_name] = nil + end until not e if next(needed) then - return nil, i18n.expand("ERROR_SOMETHING_MISSING", {what=next(needed)}) + return nil, i18n.expand("ERROR_SOMETHING_MISSING", {what=next(needed)}) end end @@ -803,7 +803,7 @@ local function find_repository(config, reponame) -- Load a system lace. local lace, reason = lace.compile(repo) if not lace then - return nil, reason + return nil, reason end -- Stuff in the lace so :run_lace() work repo.lace = lace @@ -834,39 +834,39 @@ local function foreach_repository(conf, callback, filterfn) -- "find" it and call the callback with the name, repo and message local all_repos = {} - + local function scan_dir(dirname, prefix) local dirp, err = luxio.opendir(dirname) if not dirp then - if err == luxio.ENOTDIR then - return true - end - return nil, luxio.strerror(err) + if err == luxio.ENOTDIR then + return true + end + return nil, luxio.strerror(err) end local e, i local recurse = {} repeat - e, i = luxio.readdir(dirp) - if e == 0 then - if i.d_name:find("%.git$") then - -- Might be a repo, save for later - all_repos[#all_repos+1] = (util.path_join(prefix, i.d_name) - ):gsub("^/", "") - else - if i.d_name:find("^[^%.]") then - recurse[#recurse+1] = i.d_name - end - end - end + e, i = luxio.readdir(dirp) + if e == 0 then + if i.d_name:find("%.git$") then + -- Might be a repo, save for later + all_repos[#all_repos+1] = (util.path_join(prefix, i.d_name) + ):gsub("^/", "") + else + if i.d_name:find("^[^%.]") then + recurse[#recurse+1] = i.d_name + end + end + end until not e dirp = nil -- Allow GC of DIR handle -- Now try and recurse if possible, for i = 1, #recurse do - local ok, msg = scan_dir(util.path_join(dirname, recurse[i]), - util.path_join(prefix, recurse[i])) - if not ok then - return ok, msg - end + local ok, msg = scan_dir(util.path_join(dirname, recurse[i]), + util.path_join(prefix, recurse[i])) + if not ok then + return ok, msg + end end return true end @@ -881,11 +881,11 @@ local function foreach_repository(conf, callback, filterfn) for i = 1, #all_repos do local want = true if filterfn and not filterfn(all_repos[i]) then - want = false + want = false end if want then - local ok, msg = find_repository(conf, all_repos[i]) - callback(all_repos[i], ok, msg) + local ok, msg = find_repository(conf, all_repos[i]) + callback(all_repos[i], ok, msg) end end diff --git a/lib/gitano/supple.lua b/lib/gitano/supple.lua index 147b48f..ff02900 100644 --- a/lib/gitano/supple.lua +++ b/lib/gitano/supple.lua @@ -49,7 +49,7 @@ local function get_repo_proxy(repo) if proxy then return proxy end - + proxy = setmetatable({}, proxy_repo_meta) proxied_repo[proxy] = repo repo_proxies[repo] = proxy @@ -72,14 +72,14 @@ local function load_repo_module(fromrepo, prefix, module) -- Load from the repository's admin reference content, err = repo:load_from_admin_ref(modfile) if not content and err:match("^Not found:") then - content, err = "--nothing\n", "@empty_hook" + content, err = "--nothing\n", "@empty_hook" end else -- Load from the config repo content, err = config.load_file_content(repo.config, modfile) if not content then - content, err = config.get_default_hook_content(repo.config, - modfile) + content, err = config.get_default_hook_content(repo.config, + modfile) end end return content, err @@ -149,7 +149,7 @@ local function run_hook(hook, _repo, info, ...) repo = _repo log.ddebug(i18n.expand("DEBUG_SUPPLE_HOST_RUN")) return supple.host.run(supple_runtime_code, "@gitano.supple.runtime", - hook, proxy, info, ...) + hook, proxy, info, ...) end return { diff --git a/lib/gitano/usercommand.lua b/lib/gitano/usercommand.lua index f9ddf1d..e85e839 100644 --- a/lib/gitano/usercommand.lua +++ b/lib/gitano/usercommand.lua @@ -54,7 +54,7 @@ local function builtin_whoami_run(config, repo, cmdline, env) local longesttag = 0 for tagname in pairs(userdata.keys) do if #tagname > longesttag then - longesttag = #tagname + longesttag = #tagname end end for tagname, keydata in pairs(userdata.keys) do @@ -69,26 +69,26 @@ local function builtin_whoami_run(config, repo, cmdline, env) for grname, gtab in pairs(config.groups) do log.ddebug(grname, "?") if gtab.filtered_members[username] then - if #grname > maxname then - maxname = #grname - end - groups[#groups+1] = grname - log.ddebug(grname,"=", tostring(#groups)) - if not gtab.members[username] then - indirect[grname] = gtab.filtered_members[username] - end + if #grname > maxname then + maxname = #grname + end + groups[#groups+1] = grname + log.ddebug(grname,"=", tostring(#groups)) + if not gtab.members[username] then + indirect[grname] = gtab.filtered_members[username] + end end end if #groups > 0 then pfx = " In groups:" table.sort(groups) for _, group in ipairs(groups) do - local spaces = (" "):rep(maxname - #group) - log.ddebug(group, indirect[group] or "DIRECT") - local via = indirect[group] and (" (via %s)"):format((indirect[group]:match("^[^!]+!([^!]+)")) or "???") or "" - log.stdout(pfx, spaces .. group .. ":", - config.groups[group].settings.description .. via) - pfx = " " + local spaces = (" "):rep(maxname - #group) + log.ddebug(group, indirect[group] or "DIRECT") + local via = indirect[group] and (" (via %s)"):format((indirect[group]:match("^[^!]+!([^!]+)")) or "???") or "" + log.stdout(pfx, spaces .. group .. ":", + config.groups[group].settings.description .. via) + pfx = " " end end return "exit", 0 @@ -121,20 +121,20 @@ local function builtin_sshkey_validate(config, _, cmdline) end if cmdline[2] == "list" then if #cmdline > 2 then - log.error("sshkey list: No arguments expected") - return false + log.error("sshkey list: No arguments expected") + return false end elseif cmdline[2] == "add" or cmdline[2] == "del" then if #cmdline ~= 3 then - log.error("sshkey", cmdline[2] .. ": Expected tag and no more") - return false + log.error("sshkey", cmdline[2] .. ": Expected tag and no more") + return false end if not cmdline[3]:match("^[a-z][a-z0-9_-]+$") then - log.error("sshkey:", cmdline[3], "is not a valid tag name.") - log.state("Tag names start with a letter and may contain only letters") - log.state("and numbers, underscores and dashes. Tag names must be at") - log.state("least two characters long.") - return false + log.error("sshkey:", cmdline[3], "is not a valid tag name.") + log.state("Tag names start with a letter and may contain only letters") + log.state("and numbers, underscores and dashes. Tag names must be at") + log.state("least two characters long.") + return false end else log.error("sshkey: Unknown subcommand", cmdline[2]) @@ -154,16 +154,16 @@ local function builtin_sshkey_prep(config, _, cmdline, context) if cmdline[2] == "add" then -- Ensure that the given tag doesn't already exist if utab.keys[cmdline[3]] then - return "deny", "Key tag " .. cmdline[3] .. " already exists" + return "deny", "Key tag " .. cmdline[3] .. " already exists" end elseif cmdline[2] == "del" then -- Ensure that the given tag does exist if not utab.keys[cmdline[3]] then - return "deny", "Key tag " .. cmdline[3] .. " does not exist" + return "deny", "Key tag " .. cmdline[3] .. " does not exist" end -- And that it's not the one we're currently using if cmdline[3] == context.keytag then - return "deny", "Key tag " .. cmdline[3] .. " is in use" + return "deny", "Key tag " .. cmdline[3] .. " is in use" end end return action, reason @@ -174,7 +174,7 @@ local function builtin_sshkey_run(conf, _, cmdline, env) if cmdline[2] == "list" then if not next(utab.keys) then log.warn("There are no SSH keys registered for", env.GITANO_USER - .. ", sorry") + .. ", sorry") else local pfx = " SSH key:" for tagname, keydata in pairs(utab.keys) do @@ -188,14 +188,14 @@ local function builtin_sshkey_run(conf, _, cmdline, env) local keytype, keydata, keytag = sshkey:match("^([^ ]+) ([^ ]+) ([^ ].*)$") if not (keytype and keydata and keytag) then log.error("Unable to parse key,", filename, - "did not smell like an OpenSSH v2 key") + "did not smell like an OpenSSH v2 key") return "exit", 1 end if (keytype ~= "ssh-rsa") and (keytype ~= "ssh-dss") and (keytype ~= "ecdsa-sha2-nistp256") and (keytype ~= "ecdsa-sha2-nistp384") and - (keytype ~= "ecdsa-sha2-nistp521") then + (keytype ~= "ecdsa-sha2-nistp521") then log.error("Unknown key type", keytype) return "exit", 1 end @@ -260,18 +260,18 @@ local function update_htpasswd(user, passwd) if passwd ~= '' then local proc = subprocess.spawn_simple({ - "htpasswd", flags, htpasswd_path, user, - stdin = passwd, - stdout = subprocess.PIPE, - stderr = subprocess.PIPE + "htpasswd", flags, htpasswd_path, user, + stdin = passwd, + stdout = subprocess.PIPE, + stderr = subprocess.PIPE }) _, exit_code = proc:wait() else local proc = subprocess.spawn_simple({ - "htpasswd", "-D", htpasswd_path, user, - stdout = subprocess.PIPE, - stderr = subprocess.PIPE + "htpasswd", "-D", htpasswd_path, user, + stdout = subprocess.PIPE, + stderr = subprocess.PIPE }) _, exit_code = proc:wait() @@ -288,7 +288,7 @@ local function builtin_passwd_run(conf, _, cmdline, env) if conf.users[user]["passwd.hash"] == nil and password == "" then log.chat(string.format("Password for %s is not set and no password was" - .. " provided, no action taken.", user)) + .. " provided, no action taken.", user)) return "exit", 0 end @@ -313,7 +313,7 @@ local function builtin_passwd_run(conf, _, cmdline, env) end local action = string.format("%s password for %s", - password ~= '' and "Update" or "Remove", user) + password ~= '' and "Update" or "Remove", user) ok, msg = config.commit(conf, action, user) @@ -323,21 +323,21 @@ local function builtin_passwd_run(conf, _, cmdline, env) end log.chat(string.format("%s password for %s", - password ~= '' and "Updated" or "Removed", user)) + password ~= '' and "Updated" or "Removed", user)) return "exit", 0 end local function register_commands(reg) assert(reg("whoami", builtin_whoami_short, builtin_whoami_helptext, - builtin_whoami_validate, - builtin_whoami_prep, builtin_whoami_run, false, false)) + builtin_whoami_validate, + builtin_whoami_prep, builtin_whoami_run, false, false)) assert(reg("sshkey", builtin_sshkey_short, builtin_sshkey_helptext, - builtin_sshkey_validate, builtin_sshkey_prep, - builtin_sshkey_run, false, false)) + builtin_sshkey_validate, builtin_sshkey_prep, + builtin_sshkey_run, false, false)) assert(reg("passwd", builtin_passwd_short, builtin_passwd_helptext, - builtin_passwd_validate, builtin_passwd_prep, - builtin_passwd_run, false, false)) + builtin_passwd_validate, builtin_passwd_prep, + builtin_passwd_run, false, false)) end return { diff --git a/lib/gitano/util.lua b/lib/gitano/util.lua index f2dd391..4b0c8c6 100644 --- a/lib/gitano/util.lua +++ b/lib/gitano/util.lua @@ -30,14 +30,14 @@ local function run_command(cmd, cmdline, parsed_cmdline, user, if how ~= "exit" or why ~= 0 then if not cmd.suppress_error_msgs then - log.critical(i18n.expand("ERROR_RUNNING_COMMAND", - {cmd=parsed_cmdline[1], reason=how, code=why})) - log.critical(i18n.expand("UNABLE_TO_CONTINUE")) + log.critical(i18n.expand("ERROR_RUNNING_COMMAND", + {cmd=parsed_cmdline[1], reason=how, code=why})) + log.critical(i18n.expand("UNABLE_TO_CONTINUE")) end return why, cmd.suppress_error_msgs else log.syslog.info(i18n.expand("MSG_COMPLETED_SUCCESSFULLY", - {cmd=cmdline})) + {cmd=cmdline})) return 0, false end end @@ -58,10 +58,10 @@ local function _deep_copy(t, memo) for k, v in pairs(t) do kk, vv = k, v if type(k) == "table" then - kk = _deep_copy(k, memo) + kk = _deep_copy(k, memo) end if type(v) == "table" then - vv = _deep_copy(v, memo) + vv = _deep_copy(v, memo) end ret[kk] = vv end @@ -76,43 +76,43 @@ local function _parse_cmdline(cmdline) local quoting = false while #cmdline > 0 do c, cmdline = cmdline:match("^(.)(.*)$") - if escaping then - if c == "n" then - acc = acc .. "\n" - elseif c == "t" then - acc = acc .. "\t" - else - acc = acc .. c - end - escaping = false + if escaping then + if c == "n" then + acc = acc .. "\n" + elseif c == "t" then + acc = acc .. "\t" + else + acc = acc .. c + end + escaping = false else - if c == "'" and quoting == false then - -- Start single quotes - quoting = c - elseif c == '"' and quoting == false then - -- Start double quotes - quoting = c - elseif c == "'" and quoting == c then - -- End single quotes - quoting = false - elseif c == '"' and quoting == c then - -- End double quotes - quoting = false - elseif c == "\\" then - -- A backslash, entering escaping mode - escaping = true - elseif quoting then - -- Within quotes, so accumulate - acc = acc .. c - elseif c == " " then - -- A space and not quoting, so clear the accumulator - if acc ~= "" then - r[#r+1] = acc - end - acc = "" - else - acc = acc .. c - end + if c == "'" and quoting == false then + -- Start single quotes + quoting = c + elseif c == '"' and quoting == false then + -- Start double quotes + quoting = c + elseif c == "'" and quoting == c then + -- End single quotes + quoting = false + elseif c == '"' and quoting == c then + -- End double quotes + quoting = false + elseif c == "\\" then + -- A backslash, entering escaping mode + escaping = true + elseif quoting then + -- Within quotes, so accumulate + acc = acc .. c + elseif c == " " then + -- A space and not quoting, so clear the accumulator + if acc ~= "" then + r[#r+1] = acc + end + acc = "" + else + acc = acc .. c + end end end if acc ~= "" then @@ -162,7 +162,7 @@ local function basename(path, ext) if ext then local pat = patesc(ext) .. "$" if ret:find(pat) then - ret = ret:sub(1, -(#ext+1)) + ret = ret:sub(1, -(#ext+1)) end end return ret @@ -180,14 +180,14 @@ local function mkdir_p(path, mode) if path:find("/") then local ok, msg = mkdir_p(dirname(path)) if not ok then - return ok, msg + return ok, msg end end local r, err = luxio.mkdir(path, mode) if r < 0 then if err == luxio.EEXIST then - return true + return true end return nil, "mkdir(" .. path .. "): " .. luxio.strerror(err) end @@ -204,18 +204,18 @@ local function rm_rf(path) repeat e, i = luxio.readdir(dirp) if e == 0 then - if i.d_name ~= "." and i.d_name ~= ".." then - local elem = path .. "/" .. i.d_name - ret, err = luxio.unlink(elem) - if ret ~= 0 and err == luxio.EISDIR then - ret, err = rm_rf(elem) - if not ret then - return ret, err - end - elseif ret ~= 0 then - return false, luxio.strerror(err) - end - end + if i.d_name ~= "." and i.d_name ~= ".." then + local elem = path .. "/" .. i.d_name + ret, err = luxio.unlink(elem) + if ret ~= 0 and err == luxio.EISDIR then + ret, err = rm_rf(elem) + if not ret then + return ret, err + end + elseif ret ~= 0 then + return false, luxio.strerror(err) + end + end end until not e @@ -259,14 +259,14 @@ local function copy_file(from, to, buffer_size) return false, emsg end if bytes then - ok, write_count, emsg = _write_all(tofile, bytes) - if not ok then - fromfile:close() - tofile:close() - return false, emsg - end + ok, write_count, emsg = _write_all(tofile, bytes) + if not ok then + fromfile:close() + tofile:close() + return false, emsg + end else - write_count = 0 + write_count = 0 end until write_count == 0 fromfile:close() @@ -287,11 +287,11 @@ local function copy_symlink(from, to) local link_target, ret, err ret, link_target = luxio.readlink(from) if ret == -1 then - return false, luxio.strerror(link_target) + return false, luxio.strerror(link_target) end ret, err = luxio.symlink(link_target, to) if ret ~= 0 then - return false, luxio.strerror(err) + return false, luxio.strerror(err) end return true end @@ -327,24 +327,24 @@ local function copy_dir(from, to, copy_cbs, filter_cb) -- Stat and translate mode to type if type unknown local stat, err = sio.lstat(filefrom) if not stat then - log.critical(i18n.expand("ERROR_STAT_FILE_FAILED", - {file=filefrom, reason=err})) - return false, err + log.critical(i18n.expand("ERROR_STAT_FILE_FAILED", + {file=filefrom, reason=err})) + return false, err end fileinfo.d_type = ({ - [luxio.S_IFBLK] = luxio.DT_BLK, - [luxio.S_IFCHR] = luxio.DT_CHR, - [luxio.S_IFDIR] = luxio.DT_DIR, - [luxio.S_IFIFO] = luxio.DT_FIFO, - [luxio.S_IFLNK] = luxio.DT_LNK, - [luxio.S_IFREG] = luxio.DT_REG, - [luxio.S_IFSOCK] = luxio.DT_SOCK, - })[luxio.bit.band(stat.mode, luxio.S_IFMT)] + [luxio.S_IFBLK] = luxio.DT_BLK, + [luxio.S_IFCHR] = luxio.DT_CHR, + [luxio.S_IFDIR] = luxio.DT_DIR, + [luxio.S_IFIFO] = luxio.DT_FIFO, + [luxio.S_IFLNK] = luxio.DT_LNK, + [luxio.S_IFREG] = luxio.DT_REG, + [luxio.S_IFSOCK] = luxio.DT_SOCK, + })[luxio.bit.band(stat.mode, luxio.S_IFMT)] end local fileto = path_join(to, filename) local copycb = copy_cbs[fileinfo.d_type] if not copycb then - return false, i18n.expand("ERROR_NO_CB") + return false, i18n.expand("ERROR_NO_CB") end if filter_cb(from, filename, fileinfo) then log.ddebug(i18n.expand("MSG_SKIPPING_FILE", {file=filename})) @@ -352,29 +352,29 @@ local function copy_dir(from, to, copy_cbs, filter_cb) log.ddebug(i18n.expand("MSG_COPYING_FILE", {from=filefrom, to=fileto})) ret, err = copycb(filefrom, fileto) if not ret then - log.critical(i18n.expand("ERROR_COPY_FILE_FAILED", - {from=filefrom, to=fileto, reason=err})) + log.critical(i18n.expand("ERROR_COPY_FILE_FAILED", + {from=filefrom, to=fileto, reason=err})) return false, err end elseif fileinfo.d_type == luxio.DT_LNK then log.ddebug(i18n.expand("MSG_COPYING_SYMLINK", {from=filefrom, to=fileto})) ret, err = copycb(filefrom, fileto) if not ret then - log.critical(i18n.expand("ERROR_COPY_SYMLINK_FAILED", - {from=filefrom, to=fileto, reason=err})) + log.critical(i18n.expand("ERROR_COPY_SYMLINK_FAILED", + {from=filefrom, to=fileto, reason=err})) return false, err end elseif fileinfo.d_type == luxio.DT_DIR then log.ddebug(i18n.expand("MSG_COPYING_DIR", {from=filefrom, to=fileto})) ret, err = copycb(filefrom, fileto, copy_cbs, filter_cb) if not ret then - log.critical(i18n.expand("ERROR_COPY_DIR_FAILED", - {from=filefrom, to=fileto, reason=err})) + log.critical(i18n.expand("ERROR_COPY_DIR_FAILED", + {from=filefrom, to=fileto, reason=err})) return ret, err end else return false, i18n.expand("ERROR_UNSUPPORTED_TYPE", - {type=tostring(fileinfo.d_type)}) + {type=tostring(fileinfo.d_type)}) end end return true @@ -388,9 +388,9 @@ copy_dir_copy_callbacks = { local function html_escape(s) return (s:gsub("&", "&"): - gsub("<", "<"): - gsub(">", ">"): - gsub('"', """)) + gsub("<", "<"): + gsub(">", ">"): + gsub('"', """)) end local tagname_pattern = "^[a-z0-9_%-/]*[a-z0-9_%-]*$" @@ -414,31 +414,31 @@ local function prep_expansion(str) while #str > 0 do c, str = str:match("^(.)(.*)$") if seen == false then - if c == "$" then - seen = c - else - acc = acc .. c - end + if c == "$" then + seen = c + else + acc = acc .. c + end elseif seen == "$" then - if c == "{" then - seen = c - if acc ~= "" then - ret[#ret+1] = acc - acc = "" - end - else - acc = acc .. c - seen = false - end + if c == "{" then + seen = c + if acc ~= "" then + ret[#ret+1] = acc + acc = "" + end + else + acc = acc .. c + seen = false + end elseif seen == "{" then - if c == "}" then - seen = false - assert(acc:match(tagname_pattern), i18n.expand("ERROR_EXPECTED_TAG_NAME")) - ret[#ret+1] = { acc } - acc = "" - else - acc = acc .. c - end + if c == "}" then + seen = false + assert(acc:match(tagname_pattern), i18n.expand("ERROR_EXPECTED_TAG_NAME")) + ret[#ret+1] = { acc } + acc = "" + else + acc = acc .. c + end end end if seen == "$" then @@ -467,26 +467,26 @@ local function process_expansion(tags, expn, tagsactive) for i = 1, #expn do local elem = expn[i] if type(elem) == "string" then - r[#r+1] = elem + r[#r+1] = elem else - elem = elem[1] - if tagsactive[elem] then - return do_deny(tags, i18n.expand("ERROR_LOOP_IN_EXPN")) - end - local tag = tags[elem] - if type(tag) == "function" then - tags[elem] = tag(tags) - tag = tags[elem] - end - if type(tag) == "string" then - tagsactive[elem] = true - tag = process_expansion(tags, tag, tagsactive) - tagsactive[elem] = nil - else - -- Can't implicitly expand lists etc. - tag = "" - end - r[#r+1] = tag + elem = elem[1] + if tagsactive[elem] then + return do_deny(tags, i18n.expand("ERROR_LOOP_IN_EXPN")) + end + local tag = tags[elem] + if type(tag) == "function" then + tags[elem] = tag(tags) + tag = tags[elem] + end + if type(tag) == "string" then + tagsactive[elem] = true + tag = process_expansion(tags, tag, tagsactive) + tagsactive[elem] = nil + else + -- Can't implicitly expand lists etc. + tag = "" + end + r[#r+1] = tag end end return tconcat(r) @@ -502,7 +502,7 @@ local function set(t) end local function add_splitable(context, key, value, splitter, - prefix_name, suffix_name) + prefix_name, suffix_name) if not value or value == "" then return end @@ -511,7 +511,7 @@ local function add_splitable(context, key, value, splitter, end _(key, value) local prefix, suffix = value:match("^(.*%" .. splitter .. ")" .. - "([^%" .. splitter .. "]+)$") + "([^%" .. splitter .. "]+)$") if prefix then _(key .. "/" .. prefix_name, prefix:sub(1, -2)) @@ -532,14 +532,14 @@ local function tempfile(repo) local repopath = repo:fs_path() local temppattern = path_join( repopath, ("gitanotmp.%d.%d.XXXXXX"):format(tempfilecounter, - luxio.getpid())) + luxio.getpid())) tempfilecounter = tempfilecounter + 1 if luxio.mkstemp then return luxio.mkstemp(temppattern) end -- No mkstemp so let's hope that the %d.%d is enough... local fd = luxio.open(temppattern, luxio.O_RDWR + luxio.O_CREAT, - tonumber("700", 8)) + tonumber("700", 8)) return fd, temppattern end |