chiark / gitweb /
dgit: absurd: Break out PATH filtering
[dgit.git] / absurd / git
index 86050082f1d38bc1ceb5f9ecb6472556530bbebd..d8ac24e660ad2a383cc1738f949c0d2c75137060 100755 (executable)
@@ -7,6 +7,8 @@ case "$DGIT_ABSURD_DEBUG" in
 *)     exec 3>>../../gbp-pq-output 2>&3 ;;
 esac
 
+exec 4>>../../absurd-apply-warnings
+
 log () {
        echo >&3 "DGIT ABSURD GIT APPLY (DEBUG)  $*"
        echo >&2 "DGIT ABSURD GIT APPLY (STDERR) $*"
@@ -23,6 +25,10 @@ if test "x$PATH" = "x$npath"; then
        fail "PATH FILTER FAIL ($0 $self $PATH)"
 fi
 
+filter_path () {
+       PATH=$npath
+}
+
 bypass=true
 for arg in "$@"; do
        case "$arg" in
@@ -33,7 +39,7 @@ for arg in "$@"; do
 done
 
 if $bypass; then
-       PATH=$npath
+       filter_path
        echo >&3 "DGIT ABSURD GIT APPLY - BYPASS: $*"
        exec git "$@"
 fi
@@ -56,6 +62,9 @@ for arg in "$@"; do
                index=1
                continue
                ;;
+       1.--whitespace=fix)
+               continue
+               ;;
        ?.-*)
                fail "UNKNOWN OPTION $arg ($*)"
                ;;
@@ -76,9 +85,33 @@ fi
 pwd=`pwd`
 patch=${patch#$pwd/debian/patches/}
 rm -f debian/patches/series
-printf "%s\n" "$patch" >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