]> git.pld-linux.org Git - packages/rpm.git/blob - banner.sh
- code cosmetics
[packages/rpm.git] / banner.sh
1 #!/bin/sh
2 #
3 # Please send bug reports 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 parameters
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 parameters
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) [options] [banners]
57 EOF
58 }
59 Help()
60 {
61         Usage
62         cat << EOF
63 -a, --all       - all banners
64 -d, --delete    - delete specified banners
65 -e, --exclude   - exclude following banners (useful with -a)
66 -h, --help      - show this help
67 -i, --include   - cancel effect of -e (EXCLUDED banners will remain excluded)
68 -m, --make      - make a brand-new banner named as following parameter [1] (from stdin)
69 -M              - same as above, but append if file exists
70 -n, --names     - show names of the banners
71 --newer         - all choosen banners should be newer than following parameter in seconds
72 --older         - all choosen banners should be older than following parameter in seconds
73 -s, --show      - show specified banners
74 --stderr        - send banner to stderr instead of stdout (or other)
75 --stdout        - send banner to stdout instead of stderr (or other)
76 -u, --usage     - show short help
77
78 [1] if there is no slash ('/') in the given name default dir ($BANNERDIR) is used,
79     otherwise the one that's specified
80 EOF
81 }
82 Unknown_para()
83 {
84         cat << EOF
85 Unknown parameter $1
86 EOF
87         Help
88 }
89
90 check_banners_mtime()
91 {
92         BANNERS="$1"
93         OLDER="$2"
94         NEWER="$3"
95         DATE=$(date +%s)
96         for BANNER in $BANNERS;do
97                 STAT=$(stat -c %Y "$BANNERDIR/$BANNER")
98                 if [ $OLDER != "no" -a $(( $DATE - $STAT )) -lt $OLDER ]; then
99                         BANNER=""
100                 fi
101                 if [ $NEWER != "no" -a $(( $DATE - $STAT )) -gt $NEWER ]; then
102                         BANNER=""
103                 fi
104                 echo $BANNER
105         done
106 }
107 delete_banners()
108 {
109         BANNERS="$1"
110         rm -rf $(get_banner_location_list "$BANNER")
111 }
112 get_all_banner_list()
113 {
114         ls "$BANNERDIR" | grep -E -v "$EXCLUDEFILES"
115 }
116 get_banner_list()
117 {
118         BANNERS="$1"
119         NOBANNERS="$2"
120         for BANNER in $BANNERS; do
121                 if [ -r "$BANNERDIR/$BANNER" ]; then
122                         echo $NOBANNERS | grep -q $BANNER || echo $BANNER
123                 fi
124         done
125 }
126 get_banner_location_list()
127 {
128         BANNERS="$1"
129         for BANNER in $BANNERS; do
130                 echo "$BANNERDIR/$BANNER"
131         done
132 }
133 make_banner()
134 {
135         BANNER="$1"
136         SHOW="$2"
137         if [ ! -d "${BANNER%/*}" ]; then
138                 mkdir -p "${BANNER%/*}"
139         fi
140         data=$(cat)
141         if [ $NEW_APPEND -eq 0 ]; then
142                 echo "$data" > $BANNER
143         else
144                 echo "$data" >> $BANNER
145         fi
146         if [ $SHOW -eq 1 ]; then
147                 echo "$data"
148         fi
149 }
150 show_banner()
151 {
152         cat "$BANNERDIR/$1" >&$STDOUT
153 }
154 show_banners()
155 {
156         for BANNER in $*; do
157                 show_banner $BANNER
158         done
159 }
160
161 ######################################################### MAIN ########
162 while [ -n "$1" ]; do
163         case "$1" in
164                 -a|--all)
165                         ALL_BANNERS=1
166                         ;;
167                 -d|--delete)
168                         NEED_BANNER_LIST=1
169                         ACTION="delete"
170                         ;;
171                 -e|--exclude)
172                         EXCLUDE_FLAG=1
173                         ;;
174                 -h|--help)
175                         Help
176                         exit 0
177                         ;;
178                 -i|--include)
179                         EXCLUDE_FLAG=0
180                         ;;
181                 -m|--make|-M)
182                         NEED_BANNER_LIST=0
183                         if [[ "$2" != */* ]]; then
184                                 NEW_BANNER="$BANNERDIR/${2##*/}"
185                         else
186                                 NEW_BANNER="$2"
187                         fi
188                         ACTION="make"
189                         if [ "$1" = "-M" ]; then
190                                 NEW_APPEND=1
191                         else
192                                 NEW_APPEND=0
193                         fi
194                         if [ -z "$NEW_BANNER" ]; then
195                                 Help
196                                 exit 2
197                         fi
198                         shift
199                         ;;
200                 -n|--names)
201                         NEED_BANNER_LIST=1
202                         ACTION="names"
203                         ;;
204                 --newer)
205                         NEED_MTIME_CHECK=1
206                         CHOOSE_NEWER="$2"
207                         if [ -z "$CHOOSE_NEWER" ]; then
208                                 Help
209                                 exit 2
210                         fi
211                         shift
212                         ;;
213                 --older)
214                         NEED_MTIME_CHECK=1
215                         CHOOSE_OLDER="$2"
216                         if [ -z "$CHOOSE_OLDER" ]; then
217                                 Help
218                                 exit 2
219                         fi
220                         shift
221                         ;;
222                 -s|--show)
223                         NEED_BANNER_LIST=1
224                         NEW_SHOW=1
225                         ACTION="show"
226                         ;;
227                 --stdout)
228                         STDOUT="1"
229                         ;;
230                 --stderr)
231                         STDOUT="2"
232                         ;;
233                 -u|--usage)
234                         Usage
235                         exit 0
236                         ;;
237                 -*)
238                         Unknown_para "$1"
239                         exit 1
240                         ;;
241                 *)
242                         if [ $EXCLUDE_FLAG -eq 0 ]; then
243                                 BANNERS="$BANNERS ${1##*/}"
244                         else
245                                 NOBANNERS="$NOBANNERS ${1##*/}"
246                         fi
247                         ;;
248         esac
249         shift
250 done
251
252 if [ $ALL_BANNERS -ne 0 ]; then
253         BANNERS=`get_all_banner_list`
254 fi
255 if [ $NEED_BANNER_LIST -ne 0 ]; then
256         BANNER_LIST=`get_banner_list "$BANNERS" "$NOBANNERS"`
257 fi
258 if [ $NEED_MTIME_CHECK -ne 0 ]; then
259         BANNER_LIST=`check_banners_mtime "$BANNER_LIST" "$CHOOSE_OLDER" "$CHOOSE_NEWER"`
260 fi
261
262 case $ACTION in
263         "delete")
264                 delete_banners $BANNER_LIST
265                 ;;
266         "make")
267                 make_banner $NEW_BANNER $NEW_SHOW
268                 ;;
269         "names")
270                 echo $BANNER_LIST
271                 ;;
272         "show")
273                 show_banners $BANNER_LIST
274                 ;;
275         "")
276                 Help
277                 ;;
278 esac
This page took 0.051437 seconds and 4 git commands to generate.