blob: d9e2d4ee66a2d8398a7c090514cc894767fa048e (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
|
#!/bin/sh
set -e
case "$DGIT_ABSURD_DEBUG" in
''|0) exec 3>/dev/null ;;
1) exec 3>>../../gbp-pq-output ;;
*) 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) $*"
}
fail () {
log "FAILED: $*"
exit 127
}
self=${0%/*}
npath=${PATH#$self:}
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
filter_path
echo >&3 "DGIT ABSURD GIT APPLY - BYPASS: $*"
exec git "$@"
fi
log "NO BYPASS: $*"
case "$DGIT_ABSURD_DEBUG" in
''|0|1) ;;
*) set -x ;;
esac
#exec >/dev/tty 2>&1
index=0
noo=0
for arg in "$@"; do
case "$noo.$arg" in
1.--index)
index=1
continue
;;
1.--whitespace=fix)
continue
;;
?.-*)
fail "UNKNOWN OPTION $arg ($*)"
;;
0.apply)
;;
1.*) patch="$arg"
;;
*)
fail "BAD USAGE $arg ($noo $*)"
esac
noo=$(( $noo + 1 ))
done
if [ $noo != 2 ]; then
fail "NO PATCH ($*)"
fi
pwd=`pwd`
patch=${patch#$pwd/debian/patches/}
rm -f 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
git add -Af .
log "APPLIED $patch"
printf >../../absurd-apply-applied '%s\n' "$patch"
#printf 'APPLIED '; date --iso-8601=ns
|