summaryrefslogtreecommitdiff
path: root/contrib
diff options
context:
space:
mode:
Diffstat (limited to 'contrib')
-rw-r--r--contrib/Makefile.am10
-rw-r--r--contrib/README3
-rwxr-xr-xcontrib/bacman.in2
-rw-r--r--contrib/bash_completion.in10
-rwxr-xr-xcontrib/pacdiff.in2
-rwxr-xr-xcontrib/paclist.in85
-rwxr-xr-xcontrib/paclog-pkglist.in68
-rwxr-xr-xcontrib/pacscripts.in4
-rwxr-xr-xcontrib/wget-xdelta.sh.in70
9 files changed, 102 insertions, 152 deletions
diff --git a/contrib/Makefile.am b/contrib/Makefile.am
index 827d9ec0..69304a44 100644
--- a/contrib/Makefile.am
+++ b/contrib/Makefile.am
@@ -2,9 +2,9 @@ OURSCRIPTS = \
bacman \
pacdiff \
paclist \
+ paclog-pkglist \
pacscripts \
- pacsearch \
- wget-xdelta.sh
+ pacsearch
OURFILES = \
bash_completion \
@@ -14,12 +14,12 @@ EXTRA_DIST = \
PKGBUILD.vim \
bacman.in \
bash_completion.in \
+ paclog-pkglist.in \
pacdiff.in \
paclist.in \
pacscripts.in \
pacsearch.in \
vimprojects \
- wget-xdelta.sh.in \
zsh_completion.in \
README
@@ -29,7 +29,7 @@ MOSTLYCLEANFILES = $(OURSCRIPTS) $(OURFILES) *.tmp
edit = sed \
-e 's|@sysconfdir[@]|$(sysconfdir)|g' \
-e 's|@localstatedir[@]|$(localstatedir)|g' \
- -e 's|@BASH_SHELL[@]|$(BASH_SHELL)|g'
+ -e '1s|!/bin/bash|!$(BASH_SHELL)|g'
$(OURSCRIPTS): Makefile
@echo ' ' GEN $@;
@@ -52,10 +52,10 @@ bacman: $(srcdir)/bacman.in
bash_completion: $(srcdir)/bash_completion.in
pacdiff: $(srcdir)/pacdiff.in
paclist: $(srcdir)/paclist.in
+paclog-pkglist: $(srcdir)/paclog-pkglist.in
pacscripts: $(srcdir)/pacscripts.in
pacsearch: $(srcdir)/pacsearch.in
pactree: $(srcdir)/pactree.in
-wget-xdelta.sh: $(srcdir)/wget-xdelta.sh.in
zsh_completion: $(srcdir)/zsh_completion.in
# vim:set ts=2 sw=2 noet:
diff --git a/contrib/README b/contrib/README
index 4f591012..04b656f3 100644
--- a/contrib/README
+++ b/contrib/README
@@ -28,6 +28,3 @@ database entries. Useful for reuse, or possible config file extension.
vimprojects - a project file for the vim project plugin.
-wget-xdelta.sh - A download script for pacman which allows binary deltas
-generated with makepkg to be used instead of downloading full binary packages.
-This should cut download sizes for some package upgrades significantly.
diff --git a/contrib/bacman.in b/contrib/bacman.in
index ebcc386d..fe13e5b9 100755
--- a/contrib/bacman.in
+++ b/contrib/bacman.in
@@ -1,4 +1,4 @@
-#!@BASH_SHELL@
+#!/bin/bash
#
# bacman: recreate a package from a running system
# This script rebuilds an already installed package using metadata
diff --git a/contrib/bash_completion.in b/contrib/bash_completion.in
index 7f47f4b4..51a37732 100644
--- a/contrib/bash_completion.in
+++ b/contrib/bash_completion.in
@@ -31,11 +31,11 @@ _makepkg() {
local cur opts prev
COMPREPLY=()
_get_comp_words_by_ref cur prev
- if [[ $cur = -* && ! $prev =~ ^-(-(cleancache|config|help)$|\w*[Chp]) ]]; then
- opts=('allsource asroot clean cleancache config force geninteg help holdver
- ignorearch install log nobuild nocolor noconfirm nodeps noextract
- noprogressbar pkg repackage rmdeps skipinteg source syncdeps'
- 'A C L R c d e f g h i m o p r s')
+ if [[ $cur = -* && ! $prev =~ ^-(-(config|help)$|\w*[Chp]) ]]; then
+ opts=('allsource asroot check clean config force geninteg help holdver ignorearch
+ install log nobuild nocheck nocolor noconfirm nodeps noextract noprogressbar
+ nosign pkg repackage rmdeps sign skipinteg source syncdeps'
+ 'A L R c d e f g h i m o p r s')
_arch_ptr2comp opts
fi
true
diff --git a/contrib/pacdiff.in b/contrib/pacdiff.in
index ac4ce893..3f26f381 100755
--- a/contrib/pacdiff.in
+++ b/contrib/pacdiff.in
@@ -1,4 +1,4 @@
-#!@BASH_SHELL@
+#!/bin/bash
# pacdiff : a simple pacnew/pacorig/pacsave updater
#
# Copyright (c) 2007 Aaron Griffin <aaronmgriffin@gmail.com>
diff --git a/contrib/paclist.in b/contrib/paclist.in
index 0379a4c5..84144f78 100755
--- a/contrib/paclist.in
+++ b/contrib/paclist.in
@@ -1,7 +1,8 @@
-#!/usr/bin/perl
+#!/bin/bash
# paclist - List all packages installed from a given repo
#
# Copyright (C) 2008 Dan McGee <dpmcgee@gmail.com>
+# Copyright (C) 2011 Dave Reisner <dreisner@archlinux.org>
#
# This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License
@@ -16,73 +17,27 @@
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
-use strict;
-use warnings;
+export TEXTDOMAIN='pacman'
+export TEXTDOMAINDIR='/usr/share/locale'
-my $progname = "paclist";
-my $version = "1.0";
-
-if ($#ARGV != 0 || $ARGV[0] eq "--help" || $ARGV[0] eq "-h") {
- print "$progname - List all packages installed from a given repo\n";
- print "Usage: $progname <repo>\n";
- print "Example: $progname testing\n";
- if ($#ARGV != 0) {
- exit 1;
+# determine whether we have gettext; make it a no-op if we do not
+if ! type gettext &>/dev/null; then
+ gettext() {
+ echo "$@"
}
- exit 0;
-}
-
-if ( $ARGV[0] eq "--version" || $ARGV[0] eq "-v") {
- print "$progname version $version\n";
- print "Copyright (C) 2008 Dan McGee\n";
- exit 0;
-}
-
-# This hash table will be used to store pairs of ('name version', count) from
-# the return of both pacman -Sl <repo> and pacman -Q output. We then check to
-# see if a value was added twice (count = 2)- if so, we will print that package
-# as it is both in the repo we queried and installed on our local system.
-my %packages = ();
-my $output;
+fi
-$output = `pacman -Sl $ARGV[0]`;
-if ($? != 0) {
- exit 1;
-}
-my @sync = split(/\n/, $output);
-# sample output from pacman -Sl:
-# testing foobar 1.0-1
-foreach $_ (@sync) {
- my @info = split(/ /);
- # we only want to store 'foobar 1.0-1' in our hash table
- my $pkg = $info[1] . " " . $info[2];
- $packages{$pkg}++;
-}
+if [[ -z $1 ]]; then
+ printf '%s - List all packages installed from a given repo\n' "${0##*/}"
+ printf 'Usage: %s <repo>\n' "${0##*/}"
+ printf 'Example: %s testing\n' "${0##*/}"
+ exit 1
+fi
-$output = `pacman -Q`;
-if ($? != 0) {
- exit 1;
-}
-# sample output from pacman -Q:
-# foobar 1.0-1
-my @local = split(/\n/, $output);
-foreach $_ (@local) {
- # store 'foobar 1.0-1' in our hash table
- $packages{$_}++;
-}
-
-# run comparison check- if value was added twice, it was in the intersection
-my @intersection;
-foreach $_ (keys %packages) {
- if ($packages{$_} == 2) {
- push @{ \@intersection }, $_;
- }
-}
+printf -v installed '[%s]' "$(gettext installed)"
+pacman -Sl $1 | awk -v i="$installed" '$NF == i { print $2,$3 }'
-# print our intersection, and bask in the glory and speed of perl
-@intersection = sort @intersection;
-foreach $_ (@intersection) {
- print $_ . "\n";
-}
+# exit with pacman's return value, not awk's
+exit ${PIPESTATUS[0]}
-#vim: set noet:
+# vim: set ts=2 sw=2 noet:
diff --git a/contrib/paclog-pkglist.in b/contrib/paclog-pkglist.in
new file mode 100755
index 00000000..27dfd302
--- /dev/null
+++ b/contrib/paclog-pkglist.in
@@ -0,0 +1,68 @@
+#!/bin/bash
+#
+# paclog-pkglist - Parse a log file into a list of currently installed packages
+#
+# Copyright (C) 2011 Dave Reisner <dave@archlinux.org>
+#
+# 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/>.
+
+export TEXTDOMAIN='pacman'
+export TEXTDOMAINDIR='/usr/share/locale'
+declare logfile=${1:-@localstatedir@/log/pacman.log}
+
+if [[ $1 ]]; then
+ if [[ $1 = -@(h|-help) ]]; then
+ printf 'usage: %s [pacman log]\n' "${0##*/}"
+ printf 'example: %s @localstatedir@/log/pacman.log\n' "${0##*/}"
+ printf '\ndefaults to: @localstatedir@/log/pacman.log\n'
+ exit 0
+ elif [[ ! -e $logfile ]]; then
+ printf $"target not found: %s\n" "$1"
+ exit 1
+ fi
+fi
+
+<"$logfile" awk '
+{
+ action = $3
+ pkgname = $4
+ pkgver = $5
+ upgver = $7
+}
+
+NF == 5 && action == "installed" {
+ gsub(/[()]/, "", pkgver)
+ pkg[pkgname] = pkgver
+ next
+}
+
+NF == 7 && action == "upgraded" {
+ sub(/\)/, "", upgver)
+ pkg[pkgname] = upgver
+ next
+}
+
+NF == 5 && action == "removed" {
+ pkg[pkgname] = -1
+}
+
+END {
+ for (i in pkg) {
+ if (pkg[i] != -1) {
+ printf "%s %s\n",i,pkg[i]
+ }
+ }
+}' | sort
+
+# vim: set ts=2 sw=2 noet:
diff --git a/contrib/pacscripts.in b/contrib/pacscripts.in
index d3664091..37d3feae 100755
--- a/contrib/pacscripts.in
+++ b/contrib/pacscripts.in
@@ -1,4 +1,4 @@
-#!@BASH_SHELL@
+#!/bin/bash
#
# pacscripts : tries to print out the {pre,post}_{install,remove,upgrade}
# scripts of a given package
@@ -61,7 +61,7 @@ spacman() {
if [ $EUID -eq 0 ]; then
pacman "$@"
else
- if [ ! "$(type -p sudo)" ]; then
+ if ! type -p sudo; then
error "Cannot find the sudo binary! Is sudo installed?"
error "Otherwise try to run the program as root"
exit 1
diff --git a/contrib/wget-xdelta.sh.in b/contrib/wget-xdelta.sh.in
deleted file mode 100755
index f2ac1c87..00000000
--- a/contrib/wget-xdelta.sh.in
+++ /dev/null
@@ -1,70 +0,0 @@
-#!@BASH_SHELL@
-
-if [ -r "@sysconfdir@/makepkg.conf" ]; then
- source @sysconfdir@/makepkg.conf
-else
- echo "wget-xdelta: Unable to find makepkg.conf"
- exit 1
-fi
-
-if [ -r ~/.makepkg.conf ]; then
- source ~/.makepkg.conf
-fi
-
-out_file=$(basename $1)
-file_url=$2
-
-if ! [[ "$out_file" =~ "pkg.tar.gz" ]]; then
- # If it's not a package file download as normal and exit.
- #wget --passive-ftp -c -O "$out_file" "$file_url"
- exit $?
-fi
-
-
-# Get the package name and version
-[[ "$out_file" =~ "$CARCH" ]] && arch="-$CARCH" || arch=""
-pkg_data=$(echo $out_file | \
- sed "s|^\(.*\)-\([[:alnum:]_\.]*-[[:alnum:]_\.]*\)${arch}${PKGEXT}.part|\1 \2|")
-pkgname=$(echo $pkg_data | cut -d ' ' -f 1)
-new_version=$(echo $pkg_data | cut -d ' ' -f 2)
-base_url=${file_url%/*}
-
-# Look for the last version
-for file in $(ls -r @localstatedir@/cache/pacman/pkg/${pkgname}-*-*{,-$CARCH}$PKGEXT 2>/dev/null); do
- [[ "$file" =~ "$CARCH" ]] && arch="-$CARCH" || arch=""
- check_version=$(echo $file | \
- sed "s|^.*/${pkgname}-\([[:alnum:]_\.]*-[[:alnum:]_\.]*\)${arch}$PKGEXT$|\1|" | \
- grep -v "^@localstatedir@/cache/pacman/pkg")
-
- [ "$check_version" = "" ] && continue
-
- vercmp=$(vercmp "$check_version" "$old_version")
- if [ "$check_version" != "$new_version" -a $vercmp -gt 0 ]; then
- old_version=$check_version
- old_file=$file
- fi
-done
-
-if [ "$old_version" != "" -a "$old_version" != "$new_version" ]; then
- # Great, we have a cached file, now calculate a patch name from it
- delta_name="$pkgname-${old_version}_to_${new_version}-${CARCH}.delta"
-
- echo "wget-xdelta: Attempting to download delta $delta_name..." >&2
- if wget --passive-ftp -c "$base_url/$delta_name"; then
- echo "wget-xdelta: Applying delta..."
- if xdelta patch "$delta_name" "$old_file" "$out_file"; then
- echo "wget-xdelta: Delta applied successfully!"
- rm "$delta_name"
- exit 0
- else
- echo "wget-xdelta: Failed to apply delta!"
- rm $delta_name
- fi
- fi
- fi
-
-echo "wget-xdelta: Downloading new package..."
-wget --passive-ftp -c -O "$out_file" "$file_url"
-exit $?
-
-# vim:set ts=4 sw=4 noet: