]> git.pld-linux.org Git - packages/rpm.git/blob - banner.sh
- reflow help screen
[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 ######################################################## MAIN ########
161 while [ -n "$1" ]; do
162         case "$1" in
163                 -a|--all)
164                         ALL_BANNERS=1
165                         ;;
166                 -d|--delete)
167                         NEED_BANNER_LIST=1
168                         ACTION="delete"
169                         ;;
170                 -e|--exclude)
171                         EXCLUDE_FLAG=1
172                         ;;
173                 -h|--help)
174                         Help
175                         exit 0
176                         ;;
177                 -i|--include)
178                         EXCLUDE_FLAG=0
179                         ;;
180                 -m|--make|-M)
181                         NEED_BANNER_LIST=0
182                         if [[ "$2" != */* ]]; then
183                                 NEW_BANNER="$BANNERDIR/${2##*/}"
184                         else
185                                 NEW_BANNER="$2"
186                         fi
187                         ACTION="make"
188                         if [ "$1" = "-M" ];then
189                                 NEW_APPEND=1
190                         else
191                                 NEW_APPEND=0
192                         fi
193                         if [ -z "$NEW_BANNER" ];then
194                                 Help
195                                 exit 2
196                         fi
197                         shift
198                         ;;
199                 -n|--names)
200                         NEED_BANNER_LIST=1
201                         ACTION="names"
202                         ;;
203                 --newer)
204                         NEED_MTIME_CHECK=1
205                         CHOOSE_NEWER="$2"
206                         if [ -z "$CHOOSE_NEWER" ];then
207                                 Help
208                                 exit 2
209                         fi
210                         shift
211                         ;;
212                 --older)
213                         NEED_MTIME_CHECK=1
214                         CHOOSE_OLDER="$2"
215                         if [ -z "$CHOOSE_OLDER" ];then
216                                 Help
217                                 exit 2
218                         fi
219                         shift
220                         ;;
221                 -s|--show)
222                         NEED_BANNER_LIST=1
223                         NEW_SHOW=1
224                         ACTION="show"
225                         ;;
226                 --stdout)
227                         STDOUT="1"
228                         ;;
229                 --stderr)
230                         STDOUT="2"
231                         ;;
232                 -u|--usage)
233                         Usage
234                         exit 0
235                         ;;
236                 -*)
237                         Unknown_para "$1"
238                         exit 1
239                         ;;
240                 *)
241                         if [ $EXCLUDE_FLAG -eq 0 ];then
242                                 BANNERS="$BANNERS ${1##*/}"
243                         else
244                                 NOBANNERS="$NOBANNERS ${1##*/}"
245                         fi
246                         ;;
247         esac
248         shift
249 done
250
251 if [ $ALL_BANNERS -ne 0 ]; then
252         BANNERS=`get_all_banner_list`
253 fi
254 if [ $NEED_BANNER_LIST -ne 0 ];then
255         BANNER_LIST=`get_banner_list "$BANNERS" "$NOBANNERS"`
256 fi
257 if [ $NEED_MTIME_CHECK -ne 0 ];then
258         BANNER_LIST=`check_banners_mtime "$BANNER_LIST" "$CHOOSE_OLDER" "$CHOOSE_NEWER"`
259 fi
260
261 case $ACTION in
262         "delete")
263                 delete_banners $BANNER_LIST;
264                 ;;
265         "make")
266                 make_banner $NEW_BANNER $NEW_SHOW;
267                 ;;
268         "names")
269                 echo $BANNER_LIST;
270                 ;;
271         "show")
272                 show_banners $BANNER_LIST;
273                 ;;
274         "")
275                 Help
276                 ;;
277 esac
278
279
280
This page took 0.192862 seconds and 3 git commands to generate.