[pacman-dev] [PATCH] contrib/log2pkglist: new contribution
Lukas Fleischer
archlinux at cryptocrack.de
Fri Jul 8 10:05:31 EDT 2011
From: Dave Reisner <d at falconindy.com>
converts a pacman log file to a list of installed packages, which should
match the output of `pacman -Q'.
This isn't bullet proof, as testing has revealed that the log is not always
precisely accurate, but it should be good enough for a user whom finds
himself in a situation dire enough to need this.
Signed-off-by: Dave Reisner <dreisner at archlinux.org>
Signed-off-by: Lukas Fleischer <archlinux at cryptocrack.de>
---
The bracket in the regular expression in line 42 needs to be escaped, otherwise
OpenBSD's awk(1) fails with:
----
awk: illegal primary in regular expression ) at
source line number 42 source file log2pkglist
context is
sub(/)/, "", >>> upgver) <<<
----
Apart from that, this works fine for me (OpenBSD 4.9, awk version 20100523).
contrib/Makefile.am | 1 +
contrib/log2pkglist | 57 +++++++++++++++++++++++++++++++++++++++++++++++++++
2 files changed, 58 insertions(+), 0 deletions(-)
create mode 100755 contrib/log2pkglist
diff --git a/contrib/Makefile.am b/contrib/Makefile.am
index cba2085..b1675f4 100644
--- a/contrib/Makefile.am
+++ b/contrib/Makefile.am
@@ -13,6 +13,7 @@ EXTRA_DIST = \
PKGBUILD.vim \
bacman.in \
bash_completion.in \
+ log2pkglist \
pacdiff.in \
paclist.in \
pacscripts.in \
diff --git a/contrib/log2pkglist b/contrib/log2pkglist
new file mode 100755
index 0000000..e9f27cd
--- /dev/null
+++ b/contrib/log2pkglist
@@ -0,0 +1,57 @@
+#!/bin/awk -f
+#
+# log2pkglist - Parse a log file into a list of currently installed packages
+#
+# Copyright (C) 2011 Dave Reisner <dave at 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/>.
+
+BEGIN {
+ if (ARGC < 2) {
+ printf "usage: log2pkglist <pacman log>\n"
+ printf "example: log2pkglist /var/log/pacman.log\n"
+ exit
+ }
+}
+
+{
+ 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]
+ }
+ }
+}
--
1.7.6
More information about the pacman-dev
mailing list