Skip to content

Instantly share code, notes, and snippets.

@mkottman
Created September 30, 2010 22:08
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save mkottman/605411 to your computer and use it in GitHub Desktop.
Save mkottman/605411 to your computer and use it in GitHub Desktop.
#!/usr/bin/lua
require 'lfs'
-- Path to where packages are located
REPO = 'packages'
-- List of packages (e.g. loaded from dist manifest)
PACKAGES = {
p1 = true, p2 = true, p3 = true,
}
function git(...)
local args = {...}
table.insert(args, 1, 'git')
local cmd = table.concat(args, ' ')
print('Executing:', cmd)
os.execute(cmd)
end
-- Check, whether the current directory has a repo. If not, creates the .last
-- file, which contains the number of the last tag, and adds it to .gitignore
if not lfs.attributes('.last') then
local f = io.open('.last', 'w')
f:write('0')
f:close()
f = io.open('.gitignore', 'w')
f:write('.last\n')
f:close()
git "init -q"
git "add .gitignore"
git "commit -q -m 'Versioning started'"
end
-- Commits using `comment` and creates the next tag (1, 2, 3, ...)
-- and writes the new number in .last
function createTag(comment)
git("commit -q -m", ('%q'):format(comment))
local f = io.open('.last')
local tagno = f:read('*n')
tagno = tagno + 1
f:close()
git("tag", tagno)
f = io.open('.last', 'w')
f:write(tagno)
f:close()
end
local command = arg[1]
if command == 'install' then
local package = arg[2]
assert(package, "Usage: gitdist install package")
assert(PACKAGES[package], "Package " .. package .. " does not exist")
git("remote", "add", package, REPO .. '/' .. package)
git("fetch", "-q", package)
git("merge", "-q --no-commit", package..'/master')
createTag("Installed "..package)
elseif command == 'uninstall' then
local package = arg[2]
assert(package, "Usage: gitdist uninstall package")
createTag("Uninstalled "..package)
elseif command =='clean' then
os.execute('rm -rf .git .last')
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment