diff options
Diffstat (limited to 'src/xbs')
-rw-r--r-- | src/xbs/Makefile | 2 | ||||
-rwxr-xr-x | src/xbs/xbs | 138 | ||||
-rw-r--r-- | src/xbs/xbs.conf | 1 |
3 files changed, 141 insertions, 0 deletions
diff --git a/src/xbs/Makefile b/src/xbs/Makefile new file mode 100644 index 0000000..fcb8ac2 --- /dev/null +++ b/src/xbs/Makefile @@ -0,0 +1,2 @@ +pkgconfdir = $(sysconfdir) +include ../../common.mk diff --git a/src/xbs/xbs b/src/xbs/xbs new file mode 100755 index 0000000..099e1a1 --- /dev/null +++ b/src/xbs/xbs @@ -0,0 +1,138 @@ +#!/bin/bash + +# Copyright (c) 2013 Luke Shumaker <lukeshu@sbcglobal.net> +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. + +. libremessages +. $(librelib conf) + +errusage() { + if [[ $# -gt 0 ]]; then + error "$@" + fi + usage >&2 + exit 1 +} + +usage() { + print 'Usage: %s [-b SYSTEM|-h] COMMAND [ARGUMENTS]' "${0##*/}" + print 'Tool for working with arbitrary ABS-like build systems' + echo + print 'This is a pluggable tool. The BUILDSYSTEM it uses is configured in:' + print ' - /etc/xbs.conf' + print ' - ${XDG_CONFIG_HOME}/xbs.conf' + print ' - with the `-b` flag' + print 'Later items take precidence over earlier ones.' + print 'It looks for a helper program at `/lib/xbs/helper-${BUILDSYSTEM}`.' + echo + print 'Options:' + print ' -b BUILDSYSTEM Use BUILDSYSTEM instead of the' + print ' BUILDSYSTEM configured in xbs.conf' + print ' -h Show this message' + echo + print 'Commands:' + print ' status Are there uncommited changes in `.`?' + print ' download Download or update the tree' + print ' release REPO ARCH Release `.`' + print ' unrelease PKGBASE REPO ARCH Unrelease' + print ' move FROMREPO TOREPO PKGBASE' + print ' releasepath PKGBASE REPO ARCH Path to staged version' +} + +status() { + if [[ ! -f PKGBUILD ]]; then + error 'PKGBUILD not found' + exit 1 + fi + "$HELPER" status "$@" +} + +download() { + "$HELPER" download "$@" +} + +release() { + if [[ ! -f PKGBUILD ]]; then + error 'PKGBUILD not found' + exit 1 + fi + if ! status; then + error 'You have not committed your changes yet!' + exit 1 + fi + "$HELPER" release "$@" +} + +unrelease() { + "$HELPER" unrelease "$@" +} + +move() { + "$HELPER" move "$@" +} + +releasepath() { + "$HELPER" releasepath "$@" +} + +main() { + BUILDSYSTEM='' + while getopts 'b:h' arg; do + case $arg in + b) BUILDSYSTEM=$OPTARG;; + h) usage; return 0;; + *) errusage;; + esac + done + shift $(($OPTIND - 1)) + + if [[ -z $BUILDSYSTEM ]]; then + load_files xbs || return 1 + check_vars xbs BUILDSYSTEM || return 1 + fi + + HELPER="/lib/xbs/helper-${BUILDSYSTEM}" + if [[ ! -x "$HELPER" ]]; then + error 'No helper for build system found: %s' "$BUILDSYSTEM" + return 1; + fi + + if [[ $# -lt 1 ]]; then + errusage "Must specify a command" + fi + + if [[ -w / ]]; then + error 'Run as a normal user' + fi + + local cmd=$1; shift + case "$cmd" in + status|download) + [[ $# -eq 0 ]] || errusage 'bad number of argments' + $cmd "$@" + ;; + release) + [[ $# -eq 2 ]] || errusage 'bad number of argments' + $cmd "$@" + ;; + move|unrelease|releasepath) + [[ $# -eq 3 ]] || errusage 'bad number of argments' + $cmd "$@" + ;; + *) errusage 'unknown command: %s' "$cmd";; + esac +} + +main "$@" diff --git a/src/xbs/xbs.conf b/src/xbs/xbs.conf new file mode 100644 index 0000000..caf8d8b --- /dev/null +++ b/src/xbs/xbs.conf @@ -0,0 +1 @@ +BUILDSYSTEM=abs |