#!/usr/bin/env lua
local lfs = require "lfs"
local repos = {}
local remotes = {}
local function repo(remote)
local name = remote:match "[^/]*/*$" -- last path component
repos[name] = true
remotes[remote] = true
end
local repolist = assert(loadfile("repolist.lua", "bt", {repo = repo}))
repolist()
lfs.mkdir "generated"
lfs.mkdir "generated/repos"
for dir in lfs.dir "generated/repos" do
if not repos[dir] and dir ~= "." and dir ~= ".." then
os.execute(("rm -rf generated/repos/%q"):format(dir))
end
end
assert(lfs.chdir "generated/repos")
for remote in pairs(remotes) do
local name = remote:match "[^/]*/*$" -- last path component
assert(name ~= "", "this shouldn't be empty")
if lfs.attributes(name) then
assert(lfs.chdir(name))
assert(os.execute "git pull --ff-only")
assert(lfs.chdir "..")
else
assert(os.execute(("git clone %q %q"):format(remote, name)))
end
end