[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