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