46 lines
1.6 KiB
Lua
46 lines
1.6 KiB
Lua
local config = require("locator_config")
|
|
local execute
|
|
execute = function(cmd, capture_exit_code)
|
|
if capture_exit_code == nil then
|
|
capture_exit_code = true
|
|
end
|
|
local handle
|
|
if capture_exit_code then
|
|
handle = io.popen(tostring(cmd) .. "\necho $?")
|
|
else
|
|
handle = io.popen(cmd)
|
|
end
|
|
local result = handle:read("*a")
|
|
handle:close()
|
|
local exit_start, exit_end = result:find("(%d*)[%c]$")
|
|
local exit_code = tonumber(result:sub(exit_start, exit_end):sub(1, -2))
|
|
local output = result:sub(1, exit_start - 1)
|
|
if exit_code == 0 then
|
|
return output
|
|
else
|
|
return error("sub-process '" .. tostring(cmd) .. "' returned status " .. tostring(exit_code) .. ".\n\n" .. tostring(output))
|
|
end
|
|
end
|
|
local list = execute("git remote")
|
|
local remotes = { }
|
|
for line in list:gmatch("[^\n]+") do
|
|
remotes[line] = true
|
|
end
|
|
for _index_0 = 1, #config do
|
|
local item = config[_index_0]
|
|
if item.remote and item.remote.fetch then
|
|
if not (item.remote.branch) then
|
|
item.remote.branch = "master"
|
|
end
|
|
if item.remote.name then
|
|
if not (remotes[item.remote.name]) then
|
|
execute("git remote add -f " .. tostring(item.remote.name) .. " " .. tostring(item.remote.fetch))
|
|
if item.remote.push and not ("boolean" == type(item.remote.push)) then
|
|
execute("git remote set-url --push " .. tostring(item.remote.name) .. " " .. tostring(item.remote.push))
|
|
end
|
|
end
|
|
end
|
|
execute("git subtree pull --prefix " .. tostring(item.path:gsub("%.", "/")) .. " " .. tostring(item.remote.fetch) .. " " .. tostring(item.remote.branch) .. " --squash")
|
|
end
|
|
end
|