summaryrefslogtreecommitdiffstats
path: root/ext
diff options
context:
space:
mode:
authorRein Henrichs <rein@puppetlabs.com>2010-08-18 11:28:51 -0700
committerRein Henrichs <rein@puppetlabs.com>2010-08-18 14:07:56 -0700
commitf67ec05c018a3fe602c17383966d67b4e05bad6b (patch)
treef4e76fcdf7fa0d34e705a24171808699d64aea8e /ext
parent51bcebe38cab6088c901f1006339bbe40a36d161 (diff)
downloadfacter-f67ec05c018a3fe602c17383966d67b4e05bad6b.tar.gz
facter-f67ec05c018a3fe602c17383966d67b4e05bad6b.tar.xz
facter-f67ec05c018a3fe602c17383966d67b4e05bad6b.zip
[#4567] Add ext/facter-diff to compare output of 2 versions
Example: ./ext/facter-diff 1.5.5 1.5.8rc1
Diffstat (limited to 'ext')
-rwxr-xr-xext/facter-diff73
1 files changed, 73 insertions, 0 deletions
diff --git a/ext/facter-diff b/ext/facter-diff
new file mode 100755
index 0000000..361b80b
--- /dev/null
+++ b/ext/facter-diff
@@ -0,0 +1,73 @@
+#!/usr/bin/env sh
+#
+# Output the difference between a facter command run on two different versions
+# of facter. Uses unified diff format.
+
+OPTIONS_SPEC="\
+facter-diff [options] <rev1> <rev2> [fact]...
+
+Example:
+
+ ./ext/facter-diff 1.5.7 1.0.2
+
+--
+h,help Display this help"
+
+. "$(git --exec-path)/git-sh-setup"
+eval "$(echo "$OPTIONS_SPEC" | git rev-parse --parseopt -- "$@" || echo exit $?)"
+trap 'err=$?; cleanup; exit $err' 0
+
+cleanup() {
+ test $origin && git checkout "$origin" &> /dev/null
+}
+
+facter() {
+ ruby -Ilib bin/facter "$@"
+}
+
+log_facter_run() {
+ local ref=$1 && shift
+ local tmpfile=$1 && shift
+
+ git checkout -f "$ref" &> /dev/null ||
+ die "fatal: unable to checkout $ref"
+ facter "$@" > $tmpfile
+}
+
+verify_revision() {
+ git rev-parse --verify --quiet "$1" > /dev/null ||
+ die "fatal: '$1' is not a valid revision"
+}
+
+test $1 = "--" && shift # git rev-parse seems to leave the -- in
+test $# -eq 0 && usage
+
+test $# -gt 1 ||
+ die "fatal: must specify two revisions"
+
+status=$(git status -s)
+test -z "$status" ||
+ die "fatal: $0 cannot be used with a dirty working copy"
+
+origin=$(git name-rev --name-only HEAD)
+test -n "$origin" ||
+ die "fatal: $0 cannot be used unless currently on a branch"
+
+test -x "bin/facter" ||
+ die "fatal: $0 must be run from the project root"
+
+ref1="$1" && shift
+ref2="$1" && shift
+
+verify_revision $ref1
+verify_revision $ref2
+
+tmpfile1="/tmp/$(basename $0).$$.1.tmp"
+tmpfile2="/tmp/$(basename $0).$$.2.tmp"
+
+log_facter_run $ref1 $tmpfile1 $@
+log_facter_run $ref2 $tmpfile2 $@
+
+git checkout -f "$origin" &> /dev/null
+
+diff --label "$ref1" --label "$ref2" -u $tmpfile1 $tmpfile2