diff options
author | Ted Trask <ttrask01@yahoo.com> | 2008-04-22 15:25:14 +0000 |
---|---|---|
committer | Ted Trask <ttrask01@yahoo.com> | 2008-04-22 15:25:14 +0000 |
commit | 80dcbfa5a0af2a90e0e0fada05d67fef0cc97c3d (patch) | |
tree | d64e74bfa77be3ba6f96212ce3b1ece834198b76 | |
download | acf-apk-tools-80dcbfa5a0af2a90e0e0fada05d67fef0cc97c3d.tar.bz2 acf-apk-tools-80dcbfa5a0af2a90e0e0fada05d67fef0cc97c3d.tar.xz |
Addingv0.0.1
git-svn-id: svn://svn.alpinelinux.org/acf/apk/trunk@1032 ab2d0c66-481e-0410-8bed-d214d4d58bed
-rw-r--r-- | Makefile | 44 | ||||
-rw-r--r-- | apk-controller.lua | 55 | ||||
-rw-r--r-- | apk-html.lsp | 71 | ||||
-rw-r--r-- | apk-model.lua | 69 | ||||
-rw-r--r-- | apk.menu | 4 | ||||
-rw-r--r-- | config.mk | 10 | ||||
-rw-r--r-- | readme | 0 |
7 files changed, 253 insertions, 0 deletions
diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..ca84155 --- /dev/null +++ b/Makefile @@ -0,0 +1,44 @@ +APP_NAME=apk +PACKAGE=acf-$(APP_NAME) +VERSION=0.0.1 + +APP_DIST=\ + apk* \ + + +EXTRA_DIST=README Makefile config.mk + +DISTFILES=$(APP_DIST) $(EXTRA_DIST) + +TAR=tar + +P=$(PACKAGE)-$(VERSION) +tarball=$(P).tar.bz2 +install_dir=$(DESTDIR)/$(appdir)/$(APP_NAME) + +all: +clean: + rm -rf $(tarball) $(P) + +dist: $(tarball) + +install: + mkdir -p "$(install_dir)" + cp -a $(APP_DIST) "$(install_dir)" + +$(tarball): $(DISTFILES) + rm -rf $(P) + mkdir -p $(P) + cp $(DISTFILES) $(P) + $(TAR) -jcf $@ $(P) + rm -rf $(P) + +# target that creates a tar package, unpacks is and install from package +dist-install: $(tarball) + $(TAR) -jxf $(tarball) + $(MAKE) -C $(P) install DESTDIR=$(DESTDIR) + rm -rf $(P) + +include config.mk + +.PHONY: all clean dist install dist-install diff --git a/apk-controller.lua b/apk-controller.lua new file mode 100644 index 0000000..1661bba --- /dev/null +++ b/apk-controller.lua @@ -0,0 +1,55 @@ +-- the interfaces controller + +module (..., package.seeall) + +-- Cause an http redirect to our "read" action +-- We use the self.conf table because it already has prefix,controller,etc +-- The redir code is defined in the application error handler (acf-controller) +local list_redir = function (self) + self.conf.action = "loaded" + self.conf.type = "redir" + error (self.conf) +end + +mvc= {} +mvc.on_load = function(self, parent) + self.conf.default_action = "loaded" +end + +read = function(self) + local loaded, available = self.model.get_packages() + --local loaded = self.model.get_loaded_packages() + --local available = self.model.get_available_packages() + return ( { loaded = loaded, available=available, self=self } ) +end + + +loaded = function(self) + -- Get command result out of session data + local cmdresult = self.sessiondata.cmdresult + self.sessiondata.cmdresult = nil + local loaded = self.model.get_loaded_packages() + return ( { loaded = loaded, cmdresult = cmdresult } ) +end + +available = function(self) + local available = self.model.get_available_packages() + return ( { available=available } ) +end + +delete = function(self) + local package = self.clientdata.package or "" + local cmdresult = self.model.delete_package(package, self.sessiondata) + -- Put the result in session data and redirect + self.sessiondata.cmdresult = cmdresult + list_redir(self) +end + +install = function(self) + local package = self.clientdata.package or "" + local cmdresult = self.model.install_package(package, self.sessiondata) + -- Put the result in session data and redirect + self.sessiondata.cmdresult = cmdresult + list_redir(self) +end + diff --git a/apk-html.lsp b/apk-html.lsp new file mode 100644 index 0000000..81288f4 --- /dev/null +++ b/apk-html.lsp @@ -0,0 +1,71 @@ +<? local form = ... ?> +<? +--[[ DEBUG INFORMATION +io.write("<H1>DEBUGGING</H1><span style='color:red'><H2>DEBUG INFO: CFE</H2>") +io.write(html.cfe_unpack(form)) +io.write("</span>") +--]] +?> + +<? if form.cmdresult then ?> +<H1>Command Result</H1> +<DL> +<?= form.cmdresult ?> +</DL> +<? end ?> + +<? if form.loaded then ?> +<H1>Loaded Packages</H1> +<DL> +<TABLE> + <TR style="background:#eee;font-weight:bold;"> + <TD style="padding-right:20px;white-space:nowrap;" class="header">Delete</TD> + <TD style="padding-right:20px;white-space:nowrap;" class="header">Package Name</TD> + <TD style="padding-right:20px;white-space:nowrap;" class="header">Version</TD> + <TD style="white-space:nowrap;" class="header">Description</TD> + </TR> + +<? for i,packagetable in pairs(form.loaded) do ?> + <TR> + <TD style="padding-right:20px;white-space:nowrap;"> + <?= html.link{value = "delete?package=" .. packagetable.name, label="Delete"} ?> + </TD> + <TD><?= packagetable.name ?></TD> + <TD><?= packagetable.version ?></TD> + <TD><?= packagetable.description ?></TD> + </TR> +<? end ?> +</TABLE> +</DL> +<? end ?> + +<? if form.available then ?> +<H1>Available Packages</H1> +<DL> +<TABLE> + <TR style="background:#eee;font-weight:bold;"> + <TD style="padding-right:20px;white-space:nowrap;" class="header">Install</TD> + <TD style="white-space:nowrap;" WIDTH="90%" class="header">Package Name</TD> + </TR> + +<? for i,package in pairs(form.available) do ?> + <TR> + <TD style="padding-right:20px;white-space:nowrap;"> + <?= html.link{value = "install?package=" .. package, label="Install"} ?> + </TD> + <TD><?= package ?></TD> + </TR> +<? end ?> +</TABLE> +</DL> +<? end ?> + +<? +--[[ DEBUG INFORMATION +io.write("<H1>DEBUGGING</H1><span style='color:red'><H2>DEBUG INFO: CFE</H2>") +io.write(html.cfe_unpack(form)) +io.write("</span>") +--]] +?> + + diff --git a/apk-model.lua b/apk-model.lua new file mode 100644 index 0000000..188f9e8 --- /dev/null +++ b/apk-model.lua @@ -0,0 +1,69 @@ +-- acf model for packages (apk) +module (..., package.seeall) + +get_all_packages = function() + -- read in all of the packages + local cmd = "/sbin/apk_fetch -l 2>/dev/null" + local f = io.popen( cmd ) + local all = {} + for line in f:lines() do all[#all + 1] = line end + f:close() + return all +end + +get_loaded_packages = function() + -- read in the loaded packages + local cmd = "/sbin/apk_info 2>/dev/null" + local f = io.popen( cmd ) + local loaded = {} + for line in f:lines() do + local temp = {} + temp.name = string.match(line, "(.+)%-%d.*") + temp.version, temp.description = string.match(line, "([^ ]+) %- (.+)") + loaded[#loaded+1] = temp + end + return loaded +end + +get_available_packages = function(_loaded, _all) + -- available are all except loaded + local loaded = _loaded or get_loaded_packages() + local all = _all or get_all_packages() + local available = {} + local reverseloaded = {} + for i,packagetable in ipairs(loaded) do reverseloaded[packagetable.name] = i end + for i,package in ipairs(all) do + if (reverseloaded[package]==nil) then available[#available + 1] = package end + end + return available +end + +get_packages = function() + local loaded = get_loaded_packages() + local available = get_available_packages(loaded) + + return loaded, available +end + +delete_package = function(package, sessiondata) + local cmd = "/sbin/apk_delete " .. package .. " 2>&1" + local f = io.popen( cmd ) + local cmdresult = f:read("*a") or "" + f:close() + -- Destroy menu and permissions info in session so recalculated + if sessiondata then sessiondata.menu = nil end + if sessiondata then sessiondata.permissions = nil end + return cmdresult +end + +install_package = function(package,sessiondata) + -- need to set path + local cmd = "PATH=/usr/local/bin:/usr/bin:/bin:/usr/local/sbin:/usr/sbin:/sbin apk_get install " .. package .. " 2>&1" + local f = io.popen( cmd ) + local cmdresult = f:read("*a") + f:close() + -- Destroy menu and permissions info in session so recalculated + if sessiondata then sessiondata.menu = nil end + if sessiondata then sessiondata.permissions = nil end + return cmdresult +end diff --git a/apk.menu b/apk.menu new file mode 100644 index 0000000..9d18125 --- /dev/null +++ b/apk.menu @@ -0,0 +1,4 @@ +# Prefix and controller are already known at this point +# Cat Group Tab Action +System 10Packages Loaded loaded +System 10Packages Available available diff --git a/config.mk b/config.mk new file mode 100644 index 0000000..45f4d21 --- /dev/null +++ b/config.mk @@ -0,0 +1,10 @@ +prefix=/usr +datadir=${prefix}/share +sysconfdir=${prefix}/etc +localstatedir=${prefix}/var +acfdir=${datadir}/acf +wwwdir=${acfdir}/www +cgibindir=${acfdir}/cgi-bin +appdir=${acfdir}/app +acflibdir=${acfdir}/lib +sessionsdir=${localstatedir}/lib/acf/sessions |