diff options
Diffstat (limited to '')
-rw-r--r-- | README.md | 3 | ||||
-rw-r--r-- | eatit-cfg.lua | 5 | ||||
-rw-r--r-- | eatit.lua | 74 |
3 files changed, 68 insertions, 14 deletions
@@ -16,8 +16,7 @@ curl -L https://git.squi.bid/eat-it/plain/eatit-cfg.lua -o ~/.config/mpv/eatit-c ``` ## TODO -- move opts to a separate file -- use the present git repos instead of relying on downloading every time +- define multple files to be saved to different directories - git not outputting to the logfile ## FAQ diff --git a/eatit-cfg.lua b/eatit-cfg.lua index 73b7a87..5a03b3a 100644 --- a/eatit-cfg.lua +++ b/eatit-cfg.lua @@ -3,7 +3,10 @@ plugins = { -- the plugins you want to load -- link to repo file dest dir - { 'https://git.squi.bid/eat-it', 'eatit.lua', 'scripts' }, + { 'https://git.squi.bid/eat-it', + file = 'eatit.lua', + dir = 'scripts', + }, } -- options for eat it @@ -8,21 +8,22 @@ local function tablelength(T) return count end +local function fileexists(name) + local f = io.open(name, 'r') + if f ~= nil then io.close(f) return true else return false end +end + local function logwrite(string) if opts.logging.log then io.write(os.date(opts.logging.logdate) .. ' ' .. string .. '\n') end end -local function getgit() - os.execute('mkdir -p ' .. opts.dl.dir) - - logwrite('Starting Download...') - for i in pairs(plugins) do - logwrite('downloading ' .. plugins[i][1]) +local function clonegit(pluginlink) + logwrite('downloading ' .. pluginlink) -- construct the git cmd - local cmd = 'git -C ' .. opts.dl.dir .. ' clone ' .. plugins[i][1] + local cmd = 'git -C ' .. opts.dl.dir .. ' clone ' .. pluginlink -- run the command and get the result for logging local run = io.popen(cmd) @@ -30,16 +31,66 @@ local function getgit() -- (commented out for now) -- logwrite(run:read('*a')) run:close() +end + +local function checkupdates(i, pluginfile, pluginlink) + local plugdir = opts.dl.dir .. '/' .. + string.match(pluginlink, '/([^/]+)$') + + local localhashcmd = 'cd ' .. plugdir .. + '; git log -1 --format=format:"%H"' + + local remotehashcmd = 'cd ' .. plugdir .. + '; git log -n 1 $(git branch -r | head -1 | cut -d " " -f 3)' .. + ' | head -1 | cut -d " " -f 2' + + local a = io.popen(localhashcmd) + local localhash = string.gsub(a:read("*a"), '[\n\r]', '') + a:close() + + a = io.popen(remotehashcmd) + local remotehash = string.gsub(a:read("*a"), '[\n\r]', '') + a:close() + + if localhash ~= remotehash then + logwrite(plugins[i]['file'] .. ' is updating.') + clonegit(pluginlink) + else + logwrite(plugins[i]['file'] .. ' is up to date!') + end +end + +local function startinstall() + logwrite('Starting Download...') + for i = 1, tablelength(plugins) do + -- check if the user has defined a file for the current plugin + if not plugins[i]['file'] then + logwrite('WARNING! Git repo "' .. plugins[i][1] .. + '" doesn\'t have a specified file. Skipping download') + -- FIXME: this results in the last plugin being downloaded & copied twice + i = i + 1 -- if not we go to the next plugin + end + + -- if no destdir defined we set it to the root of the mpv config dir + if not plugins[i]['dir'] then + plugins[i]['dir'] = '~~/' + end -- get the file's dir local pluginfile = opts.dl.dir .. '/' .. string.match(plugins[i][1], '/([^/]+)$') .. - '/' .. plugins[i][2] + '/' .. plugins[i]['file'] -- get the dest dir local destfile = mp.command_native({'expand-path', '~~/'}) .. - '/' .. plugins[i][3] .. - '/' .. plugins[i][2] + '/' .. plugins[i]['dir'] .. + '/' .. plugins[i]['file'] + + if fileexists(pluginfile) then + checkupdates(i, pluginfile, plugins[i][1]) + else + clonegit(plugins[i][1]) + end -- copy the file contents over to the desired location local infile = io.open(pluginfile, 'r') @@ -61,7 +112,8 @@ local function init() end logwrite('# of plugins defined in table: ' .. tablelength(plugins)) - getgit() + os.execute('mkdir -p ' .. opts.dl.dir) -- make download dir + startinstall() -- closing/removing everything if opts.dl.powerwash == true then |