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