summaryrefslogtreecommitdiff
path: root/absurd/git
diff options
context:
space:
mode:
Diffstat (limited to 'absurd/git')
-rwxr-xr-xabsurd/git115
1 files changed, 115 insertions, 0 deletions
diff --git a/absurd/git b/absurd/git
new file mode 100755
index 0000000..0f562b5
--- /dev/null
+++ b/absurd/git
@@ -0,0 +1,115 @@
+#!/bin/sh
+set -e
+
+case "$DGIT_ABSURD_DEBUG" in
+''|0) exec 3>/dev/null ;;
+1) exec 3>>../../gbp-pq-output ;;
+*) exec 3>>../../gbp-pq-output 2>&3 ;;
+esac
+
+log () {
+ echo >&3 "DGIT ABSURD GIT APPLY (DEBUG) $*"
+ echo >&2 "DGIT ABSURD GIT APPLY (STDERR) $*"
+}
+
+fail () {
+ log "FAILED: $*"
+ exit 127
+}
+
+self=${0%/*}
+npath=${PATH#$self:}
+if test "x$PATH" = "x$npath"; then
+ fail "PATH FILTER FAIL ($0 $self $PATH)"
+fi
+
+bypass=true
+for arg in "$@"; do
+ case "$arg" in
+ apply) bypass=false; break ;;
+ -*) ;;
+ *) bypass=true; break ;;
+ esac
+done
+
+if $bypass; then
+ PATH=$npath
+ echo >&3 "DGIT ABSURD GIT APPLY - BYPASS: $*"
+ exec git "$@"
+fi
+
+log "NO BYPASS: $*"
+
+case "$DGIT_ABSURD_DEBUG" in
+''|0|1) ;;
+*) set -x ;;
+esac
+
+#exec >/dev/tty 2>&1
+
+index=0
+noo=0
+
+for arg in "$@"; do
+ case "$noo.$arg" in
+ 1.--index)
+ index=1
+ continue
+ ;;
+ 1.--whitespace=fix)
+ continue
+ ;;
+ ?.-*)
+ fail "UNKNOWN OPTION $arg ($*)"
+ ;;
+ 0.apply)
+ ;;
+ 1.*) patch="$arg"
+ ;;
+ *)
+ fail "BAD USAGE $arg ($noo $*)"
+ esac
+ noo=$(( $noo + 1 ))
+done
+
+if [ $noo != 2 ]; then
+ fail "NO PATCH ($*)"
+fi
+
+pwd=`pwd`
+patch=${patch#$pwd/debian/patches/}
+rm -f debian/patches/series
+
+# Work around #848611.
+# We need a stunt filename which the source package must not
+# contain. A trick is to use the commit hash of HEAD, whose
+# hash value cannot appear in any file in its own tree.
+omgwtf="dgit-omg-wtf-$(git rev-parse HEAD)"
+cat <<END >debian/patches/$omgwtf
+---
+--- a/$omgwtf 2016-10-31 23:28:47.314155919 +0000
++++ b/$omgwtf 2016-12-18 22:40:01.870058270 +0000
+@@ -0,0 +1 @@
++:
+END
+printf "%s\n" "$omgwtf" >debian/patches/series
+printf "%s\n" "$patch" >>debian/patches/series
+
+# Just in case some joker tries to patch .git/something
+mv .git ../.git
+set +e
+dpkg-source --before-build .
+rc=$?
+set -e
+rm -rf .git
+mv ../.git .
+test $rc = 0
+
+rm -f $omgwtf debian/patches/$omgwtf
+
+rm -rf .pc
+git checkout debian/patches/series
+git add -Af .
+
+log "APPLIED $patch"
+#printf 'APPLIED '; date --iso-8601=ns