chiark / gitweb /
dgit: absurd: Work around mangled env metadata from gbp
[dgit.git] / absurd / git
index d8ac24e660ad2a383cc1738f949c0d2c75137060..d9e2d4ee66a2d8398a7c090514cc894767fa048e 100755 (executable)
@@ -29,10 +29,35 @@ 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
@@ -118,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