chiark / gitweb /
dgit.1: drop remark about sbuild not building arch-independent
[dgit.git] / absurd / git
index 0f562b549ea83f0c5fcc8326e223fecfca3cc751..d9e2d4ee66a2d8398a7c090514cc894767fa048e 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,17 +25,46 @@ if test "x$PATH" = "x$npath"; then
        fail "PATH FILTER FAIL ($0 $self $PATH)"
 fi
 
+filter_path () {
+       PATH=$npath
+}
+
+squash_author () {
+       author_vars='NAME EMAIL DATE'
+       for var in in $author_vars; do
+               eval "GIT_AUTHOR_$var=\$GIT_COMMITTER_$var"
+       done
+}
+
+try_commit () { git commit-tree "$try_commit_obj" </dev/null >/dev/null; }
+
+maybe_squash_author () {
+       if   (set -e; filter_path;                try_commit); then return; fi
+       if ! (set -e; filter_path; squash_author; try_commit); then return; fi
+       read last <../../absurd-apply-applied
+       echo >&4 \
+ "dgit: warning: suppressed corrupted metadata! ($last)"
+       squash_author
+}
+
 bypass=true
 for arg in "$@"; do
        case "$arg" in
        apply)  bypass=false; break     ;;
+       commit-tree)
+               # Work around #950446 in gbp
+               echo >&3 "DGIT ABSURD GIT APPLY - COMMIT-TREE: $*"
+               try_commit_obj="$2"
+               maybe_squash_author
+               bypass=true; break
+               ;;
        -*)                             ;;
        *)      bypass=true; break      ;;
        esac
 done
 
 if $bypass; then
-       PATH=$npath
+       filter_path
        echo >&3 "DGIT ABSURD GIT APPLY - BYPASS: $*"
        exec git "$@"
 fi
@@ -112,4 +143,5 @@ git checkout debian/patches/series
 git add -Af .
 
 log "APPLIED $patch"
+printf >../../absurd-apply-applied '%s\n' "$patch"
 #printf 'APPLIED '; date --iso-8601=ns