diff options
Diffstat (limited to 'absurd/git')
-rwxr-xr-x | absurd/git | 34 |
1 files changed, 33 insertions, 1 deletions
@@ -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 |