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