summaryrefslogtreecommitdiff
path: root/absurd/git
diff options
context:
space:
mode:
Diffstat (limited to 'absurd/git')
-rwxr-xr-xabsurd/git34
1 files changed, 33 insertions, 1 deletions
diff --git a/absurd/git b/absurd/git
index 0f562b5..d9e2d4e 100755
--- a/absurd/git
+++ b/absurd/git
@@ -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