1a47a34a679309e6e21672d8cae910d0daa0561d
[jigit.git] / mkjigsnap
1 #!/bin/sh
2 #
3 # mkjigsnap
4 #
5 # (c) 2004 Steve McIntyre
6 #
7 # Server-side wrapper; run this on a machine with a mirror to set up
8 # the snapshots for jigit
9
10 # Some things needed:
11 #   CD name of the jigit
12 #   location of the mirror
13 #   output location; where the jigdo, template file and 
14 #      snapshot will be written
15 #   the locations of the input jigdo and template files
16 #   the keyword to look for (e.g. Debian)
17 #   the snapshot dirname (e.g. today's date)
18 # Example:
19 # ./mkjigsnap -o /tmp/mjs-test -n mjs-test -m /tmp/mirror \
20 #      -j ~/jigdo/update/debian-update-3.0r2.01-i386.jigdo \
21 #      -t ~/jigdo/update/debian-update-3.0r2.01-i386.template \
22 #      -k Debian -k Non-US
23 #      -d 20041017
24
25 while [ $# -gt 0 ]
26 do
27     case "$1"x in
28         "-n"x)
29             shift
30             CDNAME=$1
31             shift
32             ;;
33         "-m"x)
34             shift
35             MIRROR=$1
36             shift
37             ;;
38         "-o"x)
39             shift
40             OUT=$1
41             shift
42             ;;
43         "-j"x)
44             shift
45             JIGDO=$1
46             shift
47             ;;
48         "-t"x)
49             shift
50             TEMPLATE=$1
51             shift
52             ;;
53         "-d"x)
54             shift
55             DIRNAME=$1
56             shift
57             ;;
58         "-k"x)
59             shift
60             KEYWORDS="$KEYWORDS $1"
61             shift
62             ;;
63         ""*)
64             echo "Input error!"
65             exit 1
66             ;;
67     esac
68 done
69
70 if [ "$CDNAME"x = ""x ] ; then
71     echo "You must specify the output name for the jigit conf!"
72     exit 1
73 fi
74
75 if [ "$MIRROR"x = ""x ] ; then
76     echo "You must specify the location of the mirror!"
77     exit 1
78 fi
79     
80 if [ "$OUT"x = ""x ] ; then
81     echo "You must specify where to set up the snapshot!"
82     exit 1
83 fi
84     
85 if [ "$JIGDO"x = ""x ] ; then
86     echo "You must specify the jigdo file!"
87     exit 1
88 fi
89     
90 if [ "$TEMPLATE"x = ""x ] ; then
91     echo "You must specify the template file!"
92     exit 1
93 fi
94     
95 if [ "$DIRNAME"x = ""x ] ; then
96     echo "You must specify the snapshot directory name!"
97     exit 1
98 fi
99     
100 if [ "$KEYWORDS"x = ""x ] ; then
101     echo "You must specify the keywords to match!"
102     exit 1
103 fi
104
105 # If we got here, we have all the info we need
106 echo "Creating snapshot tree:"
107 for KEYWORD in $KEYWORDS
108 do
109     NUM=$(( $NUM + `zcat -f $JIGDO | grep "$KEYWORD:" | wc -l`))
110 done
111 LINKS_DONE=0
112 for KEYWORD in $KEYWORDS
113 do
114     for jentry in `zcat -f $JIGDO | grep =$KEYWORD:`
115     do
116         file=`echo $jentry | sed "s/^.*$KEYWORD://g"`
117         dir=$OUT/snapshot/$DIRNAME/`dirname $file`
118         if [ ! -d $dir ] ; then
119             mkdir -p $dir
120         fi
121         ln -f $MIRROR/$file $OUT/snapshot/$DIRNAME/$file
122         error=$?
123         if [ $error -ne 0 ] ; then
124             echo "Unable to link $MIRROR/$file; error $error"
125             exit 1
126         fi
127         LINKS_DONE=$(($LINKS_DONE + 1))
128         printf "\r%d/%d links created" $LINKS_DONE $NUM
129     done
130 done
131
132 echo
133
134 zcat -f $JIGDO | sed "s:^Template=.*$:Template=$CDNAME.template:" | gzip -9 > $OUT/$CDNAME.jigdo
135 cp $TEMPLATE $OUT/$CDNAME.template
136 echo "JIGDO=$CDNAME.jigdo" > $OUT/$CDNAME.conf
137 echo "TEMPLATE=$CDNAME.template" >> $OUT/$CDNAME.conf
138 echo "SNAPSHOT=snapshot/$DIRNAME" >> $OUT/$CDNAME.conf
139