File: repackage

package info (click to toggle)
jlibeps 0.1%2B2-2
  • links: PTS
  • area: main
  • in suites: jessie, jessie-kfreebsd, wheezy
  • size: 176 kB
  • ctags: 161
  • sloc: java: 1,004; sh: 237; xml: 71; makefile: 26
file content (336 lines) | stat: -rwxr-xr-x 7,476 bytes parent folder | download | duplicates (9)
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
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
#!/bin/sh

set -u
set -e
# set -x

if [ -f ~/.devscripts ] 
then
  . ~/.devscripts
fi

PACKAGE=frobinator
UPSTREAM=sourceforge.net

UNARCHIVE=do_unzip
WRAPDIR=true

LOG=README.Debian-source

VERBOSE=${VERBOSE:-1}
CLEANUP=${CLEANUP:-0}

SCRIPTDIR=$(dirname $(readlink -f $0))

NAME=$(basename $0)
RCFILE=$SCRIPTDIR/repackagerc

EXCLUDE_LIST=""
# Originally '197001010000.00' but tar complains about an 
# "implausibly old time stamp"
TOUCHTIME=199001010000.00

# Set a consistent umask for repackaging so that the tarball is reproducible
# (overridable in the rc file)
umask 002

usage() {
  cat <<EOT 1>&2
Usage: $NAME --upstream-version x.y.z filename.zip 
          [src_package_revision] [target_dir]

Where the the version x.y.z is the version number of the new version and
filename.zip (or .tar.gz or whatever) is the new source filename for the
package $PACKAGE.

If filename.zip starts with http:// or ftp:// then wget is used to download
the archive first.

The file $RCFILE must exist and set the following environment variables
(and these are their current versions):

  PACKAGE=$PACKAGE
  UPSTREAM=$UPSTREAM

  UNARCHIVE=$UNARCHIVE
  EXCLUDE_LIST=$EXCLUDE_LIST

(EXCLUDE_LIST is a list of exclusions for tar, one per line. Note that
spaces in path names are problematic)

It is expected that this utility is run by uscan or and is run in the
base directory of the source package.

The optional argument 'src_package_revision' can be specified to 
indicate additional cycles of source package revision that may have
been undertaken in addition to the regular packaging activities.
If not specified, the debian/changelog is parsed to try to work out what
the source revision should be.

The optional argument 'target_dir' may be used to specify where the repackaged
source should be left.

EOT
}

progress() {
  if [ "$VERBOSE" != 0 -a -n $VERBOSE ]
  then
    echo "$@"
  fi
}

logmsg() {
  echo "$@" >> $LOGFILE
}

logcmd() {
  logcmdpieces "$@"
  "$@" >> $LOGFILE
}

# This is a truly appalling hack, but the only sensible way to 
# maintain proper quoting in the log, it seems, unless each command is
# double quoted to begin with... which is also an ugly, bug-attracting
# hack.
logcmdpieces() {
  printf "\n$ " >> $LOGFILE
  echo "$@" >> $LOGFILE
}

carp() {
  echo "E: ($NAME) $*"
  exit 1
}

do_unzip() {
  logcmd unzip -qq -d "$1" "$2"
}

do_untargz() {
  logcmd tar -C "$1" -zxf "$2"
}

do_untarbz2() {
  logcmd tar -C "$1" -jxf "$2"
}

testarchive() {
  case "$1" in
    do_unzip)
         ALLDIRS=$(zipinfo -1 "$2" | cut -f1 -d/ | sort -u)
         if [ $(echo "$ALLDIRS" | wc -l) -gt 1 ]
         then
           testarchiveerror
         fi
         echo "$ALLDIRS"
      ;;
    do_untargz)
         ALLDIRS=$(tar ztf "$2" | cut -f1 -d/ | sort -u)
         if [ $(echo "$ALLDIRS" | wc -l) -gt 1 ]
         then
           testarchiveerror
         fi
         echo "$ALLDIRS"
      ;;
    do_untarbz2)
         ALLDIRS=$(tar jtf "$2" | cut -f1 -d/ | sort -u)
         if [ $(echo "$ALLDIRS" | wc -l) -gt 1 ]
         then
           testarchiveerror
         fi
         echo "$ALLDIRS"
      ;;
  esac
}

testarchiveerror() {
  echo "E: More than one directory was found in the unwrapped archive."
  echo "E: Set WRAPDIR to wrap the contents of the tarball in a directory."
  exit 1
}

make_exclude_list() {
  echo "$EXCLUDE_LIST" | grep -v -e ^$ | sed 's/^\(.*\)/--exclude=\1/'
}

next_source_version() {
  LAST_SRC=$(dpkg-parsechangelog | \
                sed -n 's/Version: \(.*\)+[0-9\-]*/\1/p')
  #echo "LS=$LAST_SRC"
  if [ $LAST_SRC = $VERSION ]
  then
    SRCVERSION=$(dpkg-parsechangelog | \
                sed -n 's/Version: [^+]*+\(.*\)-.*/\1/p')
    SRCVERSION=$(($SRCVERSION+1))
  else
    SRCVERSION=1
  fi
  echo $SRCVERSION
}

###########################################################################

if [ ! -f $RCFILE ]
then
  cat <<EOT 1>&2
$0 Error: No configuration parameters found in file $RCFILE.
Exiting.
EOT
  usage
  exit 1
fi

# Read in the user/package settings
. $RCFILE

if [ $# -lt 3 -o $# -gt 5 ] 
then
  usage
  exit 1
fi

###########################################################################

DATE=$(date -R)

VERSION=$2
SRCPATH=$3

SRCVERSION=""
TARGETDIR=$(pwd)
if [ $# -eq 5 ]
then
  SRCVERSION="$4"
  TARGETDIR="$5"
elif [ $# -eq 4 ]
then
  if [ -d $4 ]
  then
    TARGETDIR="$4"
    SRCVERSION=$(next_source_version)
  else
    SRCVERSION="$4"
  fi
else
  SRCVERSION=$(next_source_version)
fi
VERSION="$VERSION+$SRCVERSION"

if [ ! -d "$TARGETDIR" ]
then
  carp "Target directory '$TARGETDIR' doesn't exist!"
fi

progress "I: Making orig tarball for $VERSION"

###########################################################################

LOGFILE=$TARGETDIR/$LOG

if [ -f "$LOGFILE" ]
then
  progress "W: Deleting existing log file"
  rm "$LOGFILE"
fi

###########################################################################

DIR=${PACKAGE}-$VERSION.orig

ARCHIVEFILE=${PACKAGE}_${VERSION}.orig.tar
ARCHIVELOCATION="$TARGETDIR"

TEMPDIR=$(mktemp -t -d $NAME.XXXXXXXXXX) || carp "Couldn't make temp dir"

###########################################################################

progress "I: Locating source $SRCPATH"

SRCARCHIVE=$(basename "$SRCPATH")
if [ $(expr substr "$SRCPATH" 1 7) = "http://" -o \
     $(expr substr "$SRCPATH" 1 6) = "ftp://" ]
then
  UPSTREAMURL="$SRCPATH"
  wget "$UPSTREAMURL" -O "$TEMPDIR/$SRCARCHIVE"
else
  cp "$SRCPATH" "$TEMPDIR"
fi

cd $TEMPDIR || carp "Couldn't cd to temp dir $TEMPDIR"

###########################################################################
MD5="md5sum --binary"

logmsg "
Repackaging of original source for $PACKAGE
---------------------------------------------------------------------

$PACKAGE version $VERSION.

Downloaded file:  $SRCARCHIVE
From:             $UPSTREAM
Path:             $SRCPATH"

logcmd $MD5 $SRCARCHIVE

progress "I: Directory:    $DIR
I: Package name: $PACKAGE
I: Version:      $VERSION"

logmsg "
The following commands were used to repackage the original source (the
'touch' commands ensure that the md5sum of the archives stays the same):"

# get the source
progress "I: Uncompressing source"
if $WRAPDIR 
then
  logcmd mkdir $DIR
  $UNARCHIVE $DIR $SRCARCHIVE
else
  INNERDIR=$(testarchive $UNARCHIVE $SRCARCHIVE)
  $UNARCHIVE . $SRCARCHIVE
  logcmd mv $INNERDIR $DIR
fi
# set a consistent time for the top directory
logcmd touch -t $TOUCHTIME $DIR
# repackage the archive
progress "I: Creating 'orig' tar archive"

#echo "$(make_exclude_list)"

logcmd tar cf $ARCHIVEFILE --owner 0 --group 0 --numeric-owner \
        $(make_exclude_list)  \
        $DIR

# Also set a consistent time on the tar archive
logcmd touch -t $TOUCHTIME $ARCHIVEFILE
#logcmd md5sum $ARCHIVEFILE
progress "I: Compressing archive"
logcmd gzip -9 $ARCHIVEFILE
logcmd md5sum --binary $ARCHIVEFILE.gz

logmsg "
  -- $DEBFULLNAME <$DEBEMAIL> $DATE
---------------------------------------------------------------------
"

###########################################################################

progress "I: Moving archive $ARCHIVEFILE.gz"
#mv $ARCHIVEFILE $ARCHIVELOCATION
touch $ARCHIVEFILE.gz
mv $ARCHIVEFILE.gz $ARCHIVELOCATION

###########################################################################

if [ $CLEANUP != 0 ]
then
  progress "I: Cleaning up $TEMPDIR"
  rm -rf $TEMPDIR
else
  progress "I: Files left in $TEMPDIR for your inspection"
fi

###########################################################################