]> git.donarmstrong.com Git - bin.git/blob - repack.sh
add reset usb bus command
[bin.git] / repack.sh
1 #!/bin/sh
2
3 # see the repack.stub for how to use
4
5 # TODO: provide example watch files and repack.locals
6 # TODO: test suite. problems fixed that need to be tested:
7 # * globbing
8 # * whitespace and then comments in the MANIFEST
9 # TODO: does / in weird places work? test suite too.
10 # TODO: I actually broke stuff with the MANIFEST change not thinking..
11 # TODO: allow for a sepearate (and multiple) MANIFEST files, then
12 # de-uglify libsyntax-highlight-engine-kate-perl.
13 # TODO: have each mv and rm check that something actually changed, and
14 # if not, die
15
16 set -e
17 set -u
18
19 usage() {
20     echo "Usage: repack.sh --upstream-version <ver> <downloaded file>"
21     exit 1
22 }
23
24 if [ "$#" != "3" ]; then
25     usage
26 fi
27 if [ "$1" != "--upstream-version" ]; then
28     usage
29 fi
30 if [ ! -f "$3" ]; then
31     if [ -n "$3" ]; then
32         echo "$3 doesn't exist"
33     fi
34     usage
35 fi
36 VER="$2"
37 FILE="$3"
38 PKG=`dpkg-parsechangelog|grep ^Source:|sed 's/^Source: //'`
39
40 SUFFIX="+dfsg"
41
42 echo
43 echo "Repackaging $FILE"
44 echo
45
46 DIR=`mktemp -d ./tmpRepackXXXXXX`
47 DIR=$(readlink -f "$DIR")
48 trap "/bin/rm -rf \"$DIR\"" QUIT INT EXIT
49
50 # Create an extra directory to cope with rootless tarballs
51 UP_BASE="$DIR/unpack"
52 mkdir "$UP_BASE"
53 tar xf "$FILE" -C "$UP_BASE" || unzip "$FILE" -d "$UP_BASE"
54
55 if [ `ls -1 "$UP_BASE" | wc -l` -eq 1 ]; then
56         # Tarball does contain a root directory
57         UP_BASE="$UP_BASE/`ls -1 "$UP_BASE"`"
58 fi
59
60 RM_OPTS="-vrf"
61
62 real_rm(){
63     /bin/rm "$@"
64 }
65
66 real_mv(){
67     /bin/mv "$@"
68 }
69
70 rm(){
71     set +f
72     MYOLDPWD=$(pwd)
73     cd "$UP_BASE"
74     if [ "$MANIFEST" = "1" ]; then
75         PERM=$(stat --format=%a "MANIFEST")
76         chmod u+w "MANIFEST"
77     fi
78     for i in $@; do
79         if [ "$MANIFEST" = "1" ]; then
80             PATTERN="^$i"
81             if [ -d "$i" ]; then
82                 if ! { echo "$PATTERN" | grep -q "/$" ; }; then
83                     PATTERN="${PATTERN}/"
84                 fi
85             else
86                 PATTERN="${PATTERN}\s?"
87             fi
88             grep -Ev "$PATTERN" "MANIFEST" > "$DIR/MANIFEST"
89             real_mv "$DIR/MANIFEST" "MANIFEST"
90         fi
91         real_rm "$RM_OPTS" "$i"
92     done
93     if [ "$MANIFEST" = "1" ]; then
94         chmod $PERM "MANIFEST"
95     fi
96     cd $MYOLDPWD
97     set -f
98 }
99
100 mv(){
101     set +f
102     OLD=$(pwd)
103     cd $UP_BASE
104     real_mv "$@"
105     cd $OLD
106     if [ "$MANIFEST" = "1" ]; then
107         echo "MANIFEST cannot be manipulated with mv yet, patches welcome"
108         exit 1
109     fi
110     set -f
111 }
112
113 # bump with incompatible changes
114 REPACK_VERSION=3
115
116 requires_version(){
117     if [ $REPACK_VERSION -lt $1 ]; then
118         echo "repack.sh is not up to date enough for this package. you need at least version $1, while this script is only version $REPACK_VERSION"
119         exit 1
120     fi
121 }
122
123 MANIFEST=0
124 ## Remove stuff
125 set -f
126 MYORIGPWD=$(pwd)
127 cd "$UP_BASE"
128 . "$MYORIGPWD/debian/repack.local"
129 cd $MYORIGPWD
130 set +f
131 ## End
132
133 REPACK_DIR="$PKG-${VER}${SUFFIX}.orig" # DevRef ยง 6.7.8.2
134 DFSG_TAR="$(dirname $FILE)/${PKG}_${VER}${SUFFIX}.orig.tar"
135
136 real_mv "$UP_BASE" "$DIR/$REPACK_DIR"
137
138 # .gz or .bz2?
139 FILETYPE=$(file --brief --mime-type --dereference "$FILE")
140 case "$FILETYPE" in
141     application/x-gzip|application/zip)
142         C_PROGRAM="gzip"
143         C_SUFFIX="gz"
144         ;;
145     application/x-bzip2)
146         C_PROGRAM="bzip2"
147         C_SUFFIX="bz2"
148         ;;
149     *)
150         echo "E: Unknown filetye $FILETYPE"
151         exit 1
152         ;;
153 esac
154     
155 # Using a pipe hides tar errors!
156 tar cfC "$DIR/repacked.tar" "$DIR" "$REPACK_DIR"
157 $C_PROGRAM -9 < "$DIR/repacked.tar" > "$DIR/repacked.tar.$C_SUFFIX"
158
159 real_mv "$DIR/repacked.tar.$C_SUFFIX" "$DFSG_TAR.$C_SUFFIX"
160
161 echo "*** $DFSG_TAR.$C_SUFFIX ready"