]> git.pld-linux.org Git - packages/rpm.git/blob - banner.sh
- fix append banner displaying OLDER BANNER TEKSTS
[packages/rpm.git] / banner.sh
1 #!/bin/sh
2 #
3 # bug reports send to pzurowski@pld-linux.org or pld-devel-* lists
4 #
5 # 2004, GPL 2+
6 #
7 # >> PLACE STANDARD GPL DISCLAIMER   H E R E .  <<
8 #
9 CONFIG=/etc/sysconfig/banner
10
11 ####################################################### CONFIG ########
12
13 # default paramaters
14 ##########################
15
16 BANNERDIR="/var/lib/banner/"
17 # egrep regexp
18 EXCLUDEFILES="(rpmnew$|rpmsave$|~$)"
19 STDOUT="1"  # stdout by default
20 #STDOUT="2" # stderr by default
21
22 # config paramaeters
23 ##########################
24
25 if [ -r $CONFIG ]; then
26         . $CONFIG
27 fi
28
29
30 # override parameters
31 ##########################
32
33 ALL_BANNERS=0
34 BANNERS=""
35 NOBANNERS=""
36 BANNER_LIST=""
37 CHOOSE_NEWER="no"
38 CHOOSE_OLDER="no"
39 EXCLUDE_FLAG=0
40 NEED_BANNER_LIST=0
41 NEED_MTIME_CHECK=0
42 NEW_APPEND=0
43 NEW_BANNER=""
44 NEW_SHOW=0
45
46 case $STDOUT in
47         [1-9]) ;;
48         *) STDOUT="1" ;;
49 esac
50
51 #################################################### FUNCTIONS ########
52
53 Usage()
54 {
55         cat << EOF
56 Usage:  $(basename $0) [opitions] [banners]
57 EOF
58 }
59 Help()
60 {
61         Usage
62         cat << EOF
63 -a
64 --all       - all banners
65 --delete    - delete wanted banners
66 -e
67 --exclude   - exclude following banners (useful with -a)
68 -h
69 --help      - show this help
70 -i
71 --include   - cancel effect of -e (EXCLUDED banners will remain excluded)
72 -m
73 --make      - make a brand-new banner named as following parameter [1] (from stdin)
74 -M          - same as above, but append if file exists
75 -n
76 --names     - show names of the banners
77 --newer     - all choosen banners should be newer than following parameter in seconds
78 --older     - all choosen banners should be older than following parameter in seconds
79 -s
80 --show      - show wanted banners
81 --stderr    - send banner to stderr instead of stdout (or other)
82 --stdout    - send banner to stdout instead of stderr (or other)
83 -u
84 --usage     - show short help
85
86 [1] - if there will be no slash ('/') in name then config dir will be used,
87       else -- specified.
88 EOF
89 }
90 Unknown_para()
91 {
92         cat << EOF
93 Unknown parameter $1
94 EOF
95         Help
96 }
97 check_banner_name()
98 {
99         echo "$1"|sed 's,.*/,,'
100 }
101 check_banners_mtime()
102 {
103         BANNERS="$1"
104         OLDER="$2"
105         NEWER="$3"
106         DATE=$(date +%s)
107         for BANNER in $BANNERS;do
108                 STAT=$(stat -c %Y "$BANNERDIR/$BANNER")
109                 if [ $OLDER != "no" -a $(( $DATE - $STAT )) -lt $OLDER ]; then
110                         BANNER=""
111                 fi
112                 if [ $NEWER != "no" -a $(( $DATE - $STAT )) -gt $NEWER ]; then
113                         BANNER=""
114                 fi
115                 echo $BANNER
116         done
117 }
118 delete_banners()
119 {
120         BANNERS="$1"
121         rm -rf $(get_banner_location_list "$BANNER")
122 }
123 get_all_banner_list()
124 {
125         ls "$BANNERDIR" | grep -E -v "$EXCLUDEFILES"
126 }
127 get_banner_list()
128 {
129         BANNERS="$1"
130         NOBANNERS="$2"
131         for BANNER in $BANNERS; do
132                 if [ -r "$BANNERDIR/$BANNER" ];then
133                         echo $NOBANNERS | grep -q $BANNER || echo $BANNER
134                 fi
135         done
136 }
137 get_banner_location_list()
138 {
139         BANNERS="$1"
140         for BANNER in $BANNERS; do
141                 echo "$BANNERDIR/$BANNER"
142         done
143 }
144 make_banner()
145 {
146         BANNER="$1"
147         SHOW="$2"
148         mkdir -p $(echo $BANNER|sed 's,/[^/]*$,,')
149         data=$(cat)
150         if [ $NEW_APPEND -eq 0 ]; then
151                 echo "$data" > $BANNER
152         else
153                 echo "$data" >> $BANNER
154         fi
155         if [ $SHOW -eq 1 ];then
156                 echo "$data"
157         fi
158 }
159 show_banner()
160 {
161         cat $BANNERDIR/$1 >&$STDOUT
162 }
163 show_banners()
164 {
165         for BANNER in $*; do
166                 show_banner $BANNER
167         done
168 }
169 ######################################################## MAIN ########
170 while [ ! -z $1 ]; do
171         case $1 in
172                 -a|--all)
173                         ALL_BANNERS=1
174                         ;;
175                 --delete)
176                         NEED_BANNER_LIST=1
177                         ACTION="delete"
178                         ;;
179                 -e|--exclude)
180                         EXCLUDE_FLAG=1
181                         ;;
182                 -h|--help)
183                         Help
184                         exit 0
185                         ;;
186                 -i|--include)
187                         EXCLUDE_FLAG=0
188                         ;;
189                 -m|--make|-M)
190                         NEED_BANNER_LIST=0
191                         if [ "$(check_banner_name $2)" == "$2" ]; then
192                                 NEW_BANNER=$BANNERDIR/$(check_banner_name "$2")
193                         else
194                                 NEW_BANNER="$2"
195                         fi
196                         ACTION="make"
197                         if [ "$1" == "-M" ];then
198                                 NEW_APPEND=1
199                         else
200                                 NEW_APPEND=0
201                         fi
202                         if [ -z "$NEW_BANNER" ];then
203                                 Help
204                                 exit 2
205                         fi
206                         shift
207                         ;;
208                 -n|--names)
209                         NEED_BANNER_LIST=1
210                         ACTION="names"
211                         ;;
212                 --newer)
213                         NEED_MTIME_CHECK=1
214                         CHOOSE_NEWER="$2"
215                         if [ -z "$CHOOSE_NEWER" ];then
216                                 Help
217                                 exit 2
218                         fi
219                         shift
220                         ;;
221                 --older)
222                         NEED_MTIME_CHECK=1
223                         CHOOSE_OLDER="$2"
224                         if [ -z "$CHOOSE_OLDER" ];then
225                                 Help
226                                 exit 2
227                         fi
228                         shift
229                         ;;
230                 -s|--show)
231                         NEED_BANNER_LIST=1
232                         NEW_SHOW=1
233                         ACTION="show"
234                         ;;
235                 --stdout)
236                         STDOUT="1"
237                         ;;
238                 --stderr)
239                         STDOUT="2"
240                         ;;
241                 -u|--usage)
242                         Usage
243                         exit 0
244                         ;;
245                 -*)
246                         Unknown_para "$1"
247                         exit 1
248                         ;;
249                 *)
250                         if [ $EXCLUDE_FLAG -eq 0 ];then
251                                 BANNERS="$BANNERS $(check_banner_name $1)"
252                         else
253                                 NOBANNERS="$NOBANNERS $(check_banner_name $1)"
254                         fi
255                         ;;
256         esac
257         shift
258 done
259
260 if [ $ALL_BANNERS -ne 0 ]; then
261         BANNERS=`get_all_banner_list`
262 fi
263 if [ $NEED_BANNER_LIST -ne 0 ];then
264         BANNER_LIST=`get_banner_list "$BANNERS" "$NOBANNERS"`
265 fi
266 if [ $NEED_MTIME_CHECK -ne 0 ];then
267         BANNER_LIST=`check_banners_mtime "$BANNER_LIST" "$CHOOSE_OLDER" "$CHOOSE_NEWER"`
268 fi
269
270 case $ACTION in
271         "delete")
272                 delete_banners $BANNER_LIST;
273                 ;;
274         "make")
275                 make_banner $NEW_BANNER $NEW_SHOW;
276                 ;;
277         "names")
278                 echo $BANNER_LIST;
279                 ;;
280         "show")
281                 show_banners $BANNER_LIST;
282                 ;;
283 esac
284
285
286
This page took 0.044218 seconds and 4 git commands to generate.