From a25dc638eae1a78ec60ec291c5f83c68c1cdbd0d Mon Sep 17 00:00:00 2001 From: Daniel Friesel Date: Sun, 7 Feb 2010 16:47:02 +0100 Subject: Move bootstrap and pkglist to examples/ --- examples/bootstrap | 118 +++++++++++++++++++++++++++++++++++++++++++++++++++++ examples/pkglist | 34 +++++++++++++++ 2 files changed, 152 insertions(+) create mode 100755 examples/bootstrap create mode 100755 examples/pkglist (limited to 'examples') diff --git a/examples/bootstrap b/examples/bootstrap new file mode 100755 index 0000000..6d4013e --- /dev/null +++ b/examples/bootstrap @@ -0,0 +1,118 @@ +#!/usr/bin/env zsh +# bootstrap - populate a home with the most necessary scripts +# After running this, other packages can be installed using 'ct' +# Note: Since caretaker is written in zsh, this script also is. +# This way, I don't have to check for zsh somewhere in the script, +# and also have an excuse for using zsh here :P + +setopt err_exit +trap "print -P '\n%N:%i: bootstrap failed ($?)'" ZERR +typeset -i rcempty=0 pkglist_cgi=0 +typeset PKG_ROOT PKG_DIR default_path='~/packages' +: ${XDG_CONFIG_HOME=$HOME/.config} + +while [[ $1 == --* ]] { + case $1 in + --pkglist-cgi) + pkglist_cgi=1 + pkglist_cgi_url=$2 + shift + ;; + esac + shift +} + +if [[ -n $1 ]] { + PKG_ROOT=$1 + PKG_DIR=${~${2-$default_path}} +} else { + cat <<- meow + Usage: ./bootstrap [options] PKG_ROOT [PKG_DIR] + PKG_ROOT is an URI, either of the form proto://host/path, or just /path + Note: The path must be absolute, it may not contain a literal ~ + PKG_DIR is the path where caretaker and all further packages will be installed, + by default $default_path + + Options: + + --pkglist-cgi URL + Get the package list from URL - most useful with a git:// PKG_ROOT + meow + exit 100 +} + +# zsh keeps complaining about not having a configuration, +# so let's be kind and give it an empty one. +if ! [[ -e ~/.zshrc ]] { + echo 'Creating empty zshrc' + rcempty=1 + touch ~/.zshrc +} + +echo 'Creating the basic directory structure' +mkdir -p ~/bin +path=(~/bin $path) +mkdir -p $PKG_DIR/.collected/man/man{1..8} + +if ! which git &> /dev/null; then + echo 'It appears that git is not available on this system.' + echo '-Installation aborted-' + exit 200 +fi + +echo 'Fetching the caretaker package...' +cd $PKG_DIR +git clone $PKG_ROOT/caretaker caretaker +cd caretaker + +echo "Writing $XDG_CONFIG_HOME/caretaker/caretaker.conf" +mkdir -p $XDG_CONFIG_HOME/caretaker + +cat > $XDG_CONFIG_HOME/caretaker/caretaker.conf <<- flurbl + PKG_ROOT=($PKG_ROOT) + PKG_DIR="${PKG_DIR/$HOME/\$HOME}" +flurbl + +if (( pkglist_cgi )) { + + if which curl &> /dev/null; then + getcmd='curl -s' + elif which wget &> /dev/null; then + getcmd='wget -q -O -' + else + print STDERR "Unable to find a proper download program, fix $PKG_DIR/.pkglist\n" + getcmd='echo fixme >&2; exit 1;' + fi + + cat >> $XDG_CONFIG_HOME/caretaker/caretaker.conf <<-flurbl + PKGLIST_LOCAL=1 + PKGLIST_PATH=$PKG_DIR/.pkglist + flurbl + + cat > $PKG_DIR/.pkglist <<-flurbl + #!/bin/sh + $getcmd $pkglist_cgi_url + flurbl + + chmod +x $PKG_DIR/.pkglist +} + +echo 'Installing caretaker package' +rehash + +bin/checklinks +bin/ct eval update_collected caretaker +bin/ct eval exec_hook caretaker post-add +bin/ct update + +if (( rcempty )) { + echo 'Removing empty zshrc' + rm ~/.zshrc +} + +if [[ $PATH != *$HOME/bin* ]] { + cat <<- tac + Note: You may need to change your PATH to include ~/bin, + otherwise certain parts of caretaker will not work. + tac +} diff --git a/examples/pkglist b/examples/pkglist new file mode 100755 index 0000000..95696a2 --- /dev/null +++ b/examples/pkglist @@ -0,0 +1,34 @@ +#!/usr/bin/env zsh +## on the PKG_HOST: list available packages +## used by ct update remote +## the PKG_PATH (package root path) is given as first argument ($1) + +if [[ ! -d $1 ]] { + echo "$0: package root directory '$1' does not exist!" >&2 + exit 1 +} + +setopt err_exit + +cd $1 +shift + +for i in *(-/); { + + # git repo + if [[ -d $i/.git ]] { + echo -n "$i git " + echo -n ${$(git --git-dir=$i/.git log -n 1)[2]} + echo " $*" + + # bare git repo + } elif [[ -d $i/objects && -d $i/refs ]] { + echo -n "$i git " + echo -n ${$(git --git-dir=$i log -n 1)[2]} + echo " $*" + + # unknown + } else { + echo "$i: Unsupported or no repository" >&2 + } +} -- cgit v1.2.3