bliss

KISS in Lua
git clone git://bvnf.space/bliss.git
Log | Files | Refs | README | LICENSE

commit 3b9c9d7d4dc0f16ca35e411e9b8c7c1146600928
parent 062138c41ab5f6f81103133be7d6b084a1f441c3
Author: aabacchus <ben@bvnf.space>
Date:   Tue, 13 Jun 2023 10:20:20 +0100

implement list

Diffstat:
MREADME | 2+-
Mbliss/init.lua | 2+-
Abliss/list.lua | 33+++++++++++++++++++++++++++++++++
Mbliss/utils.lua | 3++-
4 files changed, 37 insertions(+), 3 deletions(-)

diff --git a/README b/README @@ -9,7 +9,7 @@ An implementation of the kiss package manager in Lua. [ ] checksum [ ] download [ ] install -[ ] list +[x] list [ ] remove [x] search [ ] update diff --git a/bliss/init.lua b/bliss/init.lua @@ -2,7 +2,7 @@ local cwd = (...):gsub('%.init$', '') local M = {} -local names = {'utils', 'search'} +local names = {'utils', 'search', 'list'} for i = 1, #names do local name = names[i] local t = require(cwd .. '.' .. name) diff --git a/bliss/list.lua b/bliss/list.lua @@ -0,0 +1,33 @@ +local cwd = (...):gsub('%.[^%.]+$', '') +local utils = require(cwd .. '.utils') +local dirent = require 'posix.dirent' + +local function pkg_version(env, pkg) + local v = env.pkg_db .. '/' .. pkg .. "/version" + local f = io.open(v, 'r') + if not f then utils.die("'"..pkg.."' not found") end + local ver = f:read() + f:close() + if not ver then utils.die(pkg, "error reading version") end + return utils.split(ver, ' ') +end + +local function list(env, arg) + if #arg == 0 then + for file in dirent.files(env.pkg_db) do + if string.sub(file, 1, 1) ~= '.' then + table.insert(arg, file) + end + end + table.sort(arg) + end + for _,pkg in ipairs(arg) do + local ver = pkg_version(env, pkg) + io.write(string.format("%s %s-%s\n", pkg, ver[1], ver[2])) + end +end + +local M = { + list = list, +} +return M diff --git a/bliss/utils.lua b/bliss/utils.lua @@ -58,7 +58,7 @@ end function split(s, sep) local c = {} - for a in s:gmatch("[^%s"..sep.."]+") do + for a in string.gmatch(s, "[^%s"..sep.."]+") do table.insert(c, a) end return c @@ -110,6 +110,7 @@ end local M = { setup = setup, + split = split, log = log, warn = warn, die = die,