]> git.pld-linux.org Git - packages/rpm.git/blob - banner.sh
- kill sed usage
[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
98 check_banners_mtime()
99 {
100         BANNERS="$1"
101         OLDER="$2"
102         NEWER="$3"
103         DATE=$(date +%s)
104         for BANNER in $BANNERS;do
105                 STAT=$(stat -c %Y "$BANNERDIR/$BANNER")
106                 if [ $OLDER != "no" -a $(( $DATE - $STAT )) -lt $OLDER ]; then
107                         BANNER=""
108                 fi
109                 if [ $NEWER != "no" -a $(( $DATE - $STAT )) -gt $NEWER ]; then
110                         BANNER=""
111                 fi
112                 echo $BANNER
113         done
114 }
115 delete_banners()
116 {
117         BANNERS="$1"
118         rm -rf $(get_banner_location_list "$BANNER")
119 }
120 get_all_banner_list()
121 {
122         ls "$BANNERDIR" | grep -E -v "$EXCLUDEFILES"
123 }
124 get_banner_list()
125 {
126         BANNERS="$1"
127         NOBANNERS="$2"
128         for BANNER in $BANNERS; do
129                 if [ -r "$BANNERDIR/$BANNER" ];then
130                         echo $NOBANNERS | grep -q $BANNER || echo $BANNER
131                 fi
132         done
133 }
134 get_banner_location_list()
135 {
136         BANNERS="$1"
137         for BANNER in $BANNERS; do
138                 echo "$BANNERDIR/$BANNER"
139         done
140 }
141 make_banner()
142 {
143         BANNER="$1"
144         SHOW="$2"
145         mkdir -p "${BANNER%/*}"
146         data=$(cat)
147         if [ $NEW_APPEND -eq 0 ]; then
148                 echo "$data" > $BANNER
149         else
150                 echo "$data" >> $BANNER
151         fi
152         if [ $SHOW -eq 1 ];then
153                 echo "$data"
154         fi
155 }
156 show_banner()
157 {
158         cat $BANNERDIR/$1 >&$STDOUT
159 }
160 show_banners()
161 {
162         for BANNER in $*; do
163                 show_banner $BANNER
164         done
165 }
166 ######################################################## MAIN ########
167 while [ ! -z $1 ]; do
168         case $1 in
169                 -a|--all)
170                         ALL_BANNERS=1
171                         ;;
172                 --delete)
173                         NEED_BANNER_LIST=1
174                         ACTION="delete"
175                         ;;
176                 -e|--exclude)
177                         EXCLUDE_FLAG=1
178                         ;;
179                 -h|--help)
180                         Help
181                         exit 0
182                         ;;
183                 -i|--include)
184                         EXCLUDE_FLAG=0
185                         ;;
186                 -m|--make|-M)
187                         NEED_BANNER_LIST=0
188                         if [[ $2 != */* ]]; then
189                                 NEW_BANNER="$BANNERDIR/${2##*/}"
190                         else
191                                 NEW_BANNER="$2"
192                         fi
193                         ACTION="make"
194                         if [ "$1" == "-M" ];then
195                                 NEW_APPEND=1
196                         else
197                                 NEW_APPEND=0
198                         fi
199                         if [ -z "$NEW_BANNER" ];then
200                                 Help
201                                 exit 2
202                         fi
203                         shift
204                         ;;
205                 -n|--names)
206                         NEED_BANNER_LIST=1
207                         ACTION="names"
208                         ;;
209                 --newer)
210                         NEED_MTIME_CHECK=1
211                         CHOOSE_NEWER="$2"
212                         if [ -z "$CHOOSE_NEWER" ];then
213                                 Help
214                                 exit 2
215                         fi
216                         shift
217                         ;;
218                 --older)
219                         NEED_MTIME_CHECK=1
220                         CHOOSE_OLDER="$2"
221                         if [ -z "$CHOOSE_OLDER" ];then
222                                 Help
223                                 exit 2
224                         fi
225                         shift
226                         ;;
227                 -s|--show)
228                         NEED_BANNER_LIST=1
229                         NEW_SHOW=1
230                         ACTION="show"
231                         ;;
232                 --stdout)
233                         STDOUT="1"
234                         ;;
235                 --stderr)
236                         STDOUT="2"
237                         ;;
238                 -u|--usage)
239                         Usage
240                         exit 0
241                         ;;
242                 -*)
243                         Unknown_para "$1"
244                         exit 1
245                         ;;
246                 *)
247                         if [ $EXCLUDE_FLAG -eq 0 ];then
248                                 BANNERS="$BANNERS ${1##*/}"
249                         else
250                                 NOBANNERS="$NOBANNERS ${1##*/}"
251                         fi
252                         ;;
253         esac
254         shift
255 done
256
257 if [ $ALL_BANNERS -ne 0 ]; then
258         BANNERS=`get_all_banner_list`
259 fi
260 if [ $NEED_BANNER_LIST -ne 0 ];then
261         BANNER_LIST=`get_banner_list "$BANNERS" "$NOBANNERS"`
262 fi
263 if [ $NEED_MTIME_CHECK -ne 0 ];then
264         BANNER_LIST=`check_banners_mtime "$BANNER_LIST" "$CHOOSE_OLDER" "$CHOOSE_NEWER"`
265 fi
266
267 case $ACTION in
268         "delete")
269                 delete_banners $BANNER_LIST;
270                 ;;
271         "make")
272                 make_banner $NEW_BANNER $NEW_SHOW;
273                 ;;
274         "names")
275                 echo $BANNER_LIST;
276                 ;;
277         "show")
278                 show_banners $BANNER_LIST;
279                 ;;
280 esac
281
282
283
This page took 0.078997 seconds and 4 git commands to generate.