1 |
Author: ulm |
2 |
Date: 2009-04-25 13:59:35 +0000 (Sat, 25 Apr 2009) |
3 |
New Revision: 503 |
4 |
|
5 |
Added: |
6 |
trunk/man/news-tng.eselect.5 |
7 |
trunk/modules/news-tng.eselect |
8 |
Modified: |
9 |
trunk/ChangeLog |
10 |
trunk/libs/package-manager.bash.in |
11 |
trunk/man/Makefile.am |
12 |
trunk/modules/Makefile.am |
13 |
Log: |
14 |
Yet another module for reading GLEP 42 news items. Rewritten from scratch. |
15 |
New function "get_repo_news_dir" in package-manager.bash. |
16 |
|
17 |
|
18 |
Modified: trunk/ChangeLog |
19 |
=================================================================== |
20 |
--- trunk/ChangeLog 2009-04-25 13:03:44 UTC (rev 502) |
21 |
+++ trunk/ChangeLog 2009-04-25 13:59:35 UTC (rev 503) |
22 |
@@ -1,5 +1,14 @@ |
23 |
2009-04-25 Ulrich Mueller <ulm@g.o> |
24 |
|
25 |
+ * modules/news-tng.eselect: Yet another module for reading GLEP 42 |
26 |
+ news items. Rewritten from scratch. |
27 |
+ * man/news-tng.eselect.5: New man page. |
28 |
+ * modules/Makefile.am (safe_scripts): |
29 |
+ * man/Makefile.am (man_MANS): Update. |
30 |
+ |
31 |
+ * libs/package-manager.bash.in (get_repo_news_dir): New function. |
32 |
+ (get_news_dir_name): Call get_repo_news_dir. |
33 |
+ |
34 |
* libs/Makefile.am (dosed): Remove Paludis substitution, it is |
35 |
unused since the change of 2008-01-28. |
36 |
|
37 |
|
38 |
Modified: trunk/libs/package-manager.bash.in |
39 |
=================================================================== |
40 |
--- trunk/libs/package-manager.bash.in 2009-04-25 13:03:44 UTC (rev 502) |
41 |
+++ trunk/libs/package-manager.bash.in 2009-04-25 13:59:35 UTC (rev 503) |
42 |
@@ -40,7 +40,7 @@ |
43 |
sparc*) ret=sparc ;; |
44 |
x86_64) ret=amd64 ;; |
45 |
*) write_warning_msg \ |
46 |
- "Unknown architecture. Please submit a bug including the output of 'uname -m'!" |
47 |
+ "Unknown architecture. Please submit a bug including the output of 'uname -m'" |
48 |
return 1 |
49 |
;; |
50 |
esac |
51 |
@@ -52,7 +52,7 @@ |
52 |
OpenBSD) suffix="-obsd" ;; |
53 |
DragonFly) suffix="-dfly" ;; |
54 |
*) write_warning_msg \ |
55 |
- "Unknown OS. Please submit a bug including the output of 'uname -s'!" |
56 |
+ "Unknown OS. Please submit a bug including the output of 'uname -s'" |
57 |
return 1 |
58 |
;; |
59 |
esac |
60 |
@@ -64,7 +64,7 @@ |
61 |
# best-version |
62 |
# Return true if package $2 is available in ${ROOT} |
63 |
best-version() { |
64 |
- [[ $# -eq 1 ]] || die "has_version expects exactly 1 arguments!" |
65 |
+ [[ $# -eq 1 ]] || die "has_version expects exactly one argument" |
66 |
|
67 |
local manager=$(package-manager) |
68 |
case ${manager} in |
69 |
@@ -75,7 +75,7 @@ |
70 |
portageq has_version "${ROOT}" "${1}" 2>/dev/null |
71 |
;; |
72 |
*) |
73 |
- die "Unknown package manager: \"${manager}\"!" |
74 |
+ die "Unknown package manager: \"${manager}\"" |
75 |
esac |
76 |
} |
77 |
|
78 |
@@ -83,7 +83,7 @@ |
79 |
# Return the contents of environment variable $2 as seen by package manager(s) |
80 |
# for package $1. |
81 |
envvar() { |
82 |
- [[ $# -eq 2 ]] || die "envvar expects exactly 2 arguments!" |
83 |
+ [[ $# -eq 2 ]] || die "envvar expects exactly 2 arguments" |
84 |
|
85 |
local manager=$(package-manager) |
86 |
case ${manager} in |
87 |
@@ -95,14 +95,14 @@ |
88 |
portageq envvar "${2}" 2>/dev/null |
89 |
;; |
90 |
*) |
91 |
- die "Unknown package manager: \"${manager}\"!" |
92 |
+ die "Unknown package manager: \"${manager}\"" |
93 |
esac |
94 |
} |
95 |
|
96 |
# has-version |
97 |
# Return true if package $2 is available in ${ROOT} |
98 |
has-version() { |
99 |
- [[ $# -eq 1 ]] || die "has_version expects exactly 1 arguments!" |
100 |
+ [[ $# -eq 1 ]] || die "has_version expects exactly one argument" |
101 |
|
102 |
local manager=$(package-manager) |
103 |
case ${manager} in |
104 |
@@ -115,7 +115,7 @@ |
105 |
return $? |
106 |
;; |
107 |
*) |
108 |
- die "Unknown package manager: \"${manager}\"!" |
109 |
+ die "Unknown package manager: \"${manager}\"" |
110 |
esac |
111 |
} |
112 |
|
113 |
@@ -131,27 +131,34 @@ |
114 |
done |
115 |
;; |
116 |
*) |
117 |
- die "Unknown package manager: \"${manager}\"!" |
118 |
+ die "Unknown package manager: \"${manager}\"" |
119 |
esac |
120 |
} |
121 |
|
122 |
-get_news_dir_name() { |
123 |
- [[ $# -eq 1 ]] || die "get_news_dir_name expects exactly 1 argument!" |
124 |
- |
125 |
- local name=${1%::*} repo=${1##*::} |
126 |
+# get_repo_news_dir |
127 |
+# return the directory where to find GLEP 42 news items for repository $1 |
128 |
+get_repo_news_dir() { |
129 |
+ [[ $# -eq 1 ]] || die "get_repo_news_dir expects exactly one argument" |
130 |
+ local repo=$1 |
131 |
local manager=$(package-manager) |
132 |
case ${manager} in |
133 |
paludis) |
134 |
- echo "$($(paludis_command) --configuration-variable ${repo} newsdir)/${name}" |
135 |
+ $(paludis_command) --configuration-variable ${repo} newsdir |
136 |
;; |
137 |
portage) |
138 |
- echo "$(portage_get_repository ${repo})/metadata/news/${name}" |
139 |
+ echo "$(portage_get_repository ${repo})/metadata/news" |
140 |
;; |
141 |
*) |
142 |
- die "Unknown package manager: \"${manager}\"!" |
143 |
+ die "Unknown package manager: \"${manager}\"" |
144 |
esac |
145 |
} |
146 |
|
147 |
+get_news_dir_name() { |
148 |
+ [[ $# -eq 1 ]] || die "get_news_dir_name expects exactly one argument" |
149 |
+ local name=${1%::*} repo=${1##*::} |
150 |
+ echo "$(get_repo_news_dir "${repo}")/${name}" |
151 |
+} |
152 |
+ |
153 |
# package-manager PRIVATE |
154 |
# Return the package manager we're going to use. |
155 |
package-manager() { |
156 |
@@ -172,6 +179,8 @@ |
157 |
fi |
158 |
|
159 |
echo ${manager} |
160 |
+ # caching doesn't really work: we are typically called with |
161 |
+ # command substitution, i.e. in a subshell |
162 |
ESELECT_PACKAGE_MANAGER=${manager} |
163 |
} |
164 |
|
165 |
|
166 |
Modified: trunk/man/Makefile.am |
167 |
=================================================================== |
168 |
--- trunk/man/Makefile.am 2009-04-25 13:03:44 UTC (rev 502) |
169 |
+++ trunk/man/Makefile.am 2009-04-25 13:59:35 UTC (rev 503) |
170 |
@@ -5,6 +5,7 @@ |
171 |
env.eselect.5 \ |
172 |
kernel.eselect.5 \ |
173 |
mailer.eselect.5 \ |
174 |
+ news-tng.eselect.5 \ |
175 |
pager.eselect.5 \ |
176 |
profile.eselect.5 \ |
177 |
rc.eselect.5 \ |
178 |
|
179 |
Added: trunk/man/news-tng.eselect.5 |
180 |
=================================================================== |
181 |
--- trunk/man/news-tng.eselect.5 (rev 0) |
182 |
+++ trunk/man/news-tng.eselect.5 2009-04-25 13:59:35 UTC (rev 503) |
183 |
@@ -0,0 +1,82 @@ |
184 |
+.\" Copyright 2009 Gentoo Foundation |
185 |
+.\" Distributed under the terms of the GNU General Public License v2 |
186 |
+.\" $Id$ |
187 |
+.\" |
188 |
+.TH news-tng.eselect 5 "April 2009" "Gentoo Linux" eselect |
189 |
+.SH NAME |
190 |
+news-tng.eselect \- Yet another GLEP 42 news module for Gentoo's eselect |
191 |
+.SH SYNOPSIS |
192 |
+.B eselect news-tng |
193 |
+.RB [ help | usage | version ] |
194 |
+.br |
195 |
+.B eselect news-tng list |
196 |
+.br |
197 |
+.B eselect news-tng read |
198 |
+.RI [ item ...] |
199 |
+.br |
200 |
+.B eselect news-tng unread |
201 |
+.RI [ item ...] |
202 |
+.br |
203 |
+.B eselect news-tng purge |
204 |
+.br |
205 |
+.B eselect news-tng count |
206 |
+.RB [ new | all ] |
207 |
+.SH DESCRIPTION |
208 |
+.B eselect |
209 |
+is Gentoo's configuration and management tool. It features modules |
210 |
+that care for the individual administrative tasks. |
211 |
+.SH ACTION: LIST |
212 |
+.B eselect news-tng list |
213 |
+.br |
214 |
+List all Gentoo news items. |
215 |
+ |
216 |
+# eselect news-tng list |
217 |
+.br |
218 |
+News items: |
219 |
+.br |
220 |
+ [1] 2009-04-18 (unread) Generation 1 Java Setup Deprecated |
221 |
+ [2] 2009-04-06 (read) Migration from teTeX to TeXLive |
222 |
+ [3] 2009-04-06 (read) Migration to X.org Server 1.5 |
223 |
+.SH ACTION: READ |
224 |
+.B eselect news-tng read |
225 |
+.RI [ item ...] |
226 |
+.br |
227 |
+Read news item(s), selected by their |
228 |
+.I item |
229 |
+number(s) from the |
230 |
+.B list |
231 |
+action. Special items |
232 |
+.B new |
233 |
+and |
234 |
+.B all |
235 |
+select all unread items or all items, respectively. |
236 |
+.SH ACTION: UNREAD |
237 |
+.B eselect news-tng unread |
238 |
+.RI [ item ...] |
239 |
+.br |
240 |
+Mark news item(s) as unread again. Items are selected by their |
241 |
+.I item |
242 |
+number(s) from the |
243 |
+.B list |
244 |
+action. Special item |
245 |
+.B all |
246 |
+selects all items. |
247 |
+.SH ACTION: PURGE |
248 |
+.B eselect news-tng purge |
249 |
+.br |
250 |
+Purge all read news item(s). |
251 |
+.SH ACTION: COUNT |
252 |
+.B eselect news-tng count |
253 |
+.RB [ new | all ] |
254 |
+.br |
255 |
+Display number of unread news items (default) or of all news items, |
256 |
+if option |
257 |
+.B all |
258 |
+is given. |
259 |
+.SH AUTHOR |
260 |
+Ulrich Mueller <ulm@g.o> |
261 |
+.SH SEE ALSO |
262 |
+.BR eselect (1), |
263 |
+http://www.gentoo.org/proj/en/glep/glep-0042.html |
264 |
+.SH REVISION |
265 |
+$Id$ |
266 |
|
267 |
|
268 |
Property changes on: trunk/man/news-tng.eselect.5 |
269 |
___________________________________________________________________ |
270 |
Name: svn:keywords |
271 |
+ Id |
272 |
|
273 |
Modified: trunk/modules/Makefile.am |
274 |
=================================================================== |
275 |
--- trunk/modules/Makefile.am 2009-04-25 13:03:44 UTC (rev 502) |
276 |
+++ trunk/modules/Makefile.am 2009-04-25 13:59:35 UTC (rev 503) |
277 |
@@ -8,6 +8,7 @@ |
278 |
kernel.eselect \ |
279 |
mailer.eselect \ |
280 |
modules.eselect \ |
281 |
+ news-tng.eselect \ |
282 |
pager.eselect \ |
283 |
profile.eselect \ |
284 |
rc.eselect \ |
285 |
|
286 |
Added: trunk/modules/news-tng.eselect |
287 |
=================================================================== |
288 |
--- trunk/modules/news-tng.eselect (rev 0) |
289 |
+++ trunk/modules/news-tng.eselect 2009-04-25 13:59:35 UTC (rev 503) |
290 |
@@ -0,0 +1,293 @@ |
291 |
+# Copyright 2005-2009 Gentoo Foundation |
292 |
+# Distributed under the terms of the GNU General Public License v2 |
293 |
+# $Id$ |
294 |
+ |
295 |
+inherit package-manager |
296 |
+ |
297 |
+DESCRIPTION="Read Gentoo (\"GLEP 42\") news items" |
298 |
+MAINTAINER="ulm@g.o" |
299 |
+SVN_DATE='$Date$' |
300 |
+VERSION=$(svn_date_to_version "${SVN_DATE}") |
301 |
+ |
302 |
+NEWS_DIR="/var/lib/gentoo/news" |
303 |
+ |
304 |
+# read list of news items |
305 |
+# list of parameters may contain "unread" or "read" |
306 |
+# returns one item per line: status/repository/name |
307 |
+# sort order: 1. "unread" before "read", 2. by repository |
308 |
+find_items() { |
309 |
+ local stat repo item |
310 |
+ local -a repos=( $(get_repositories) ) |
311 |
+ for stat in "$@"; do |
312 |
+ for repo in ${repos[@]}; do |
313 |
+ file="${ROOT}${NEWS_DIR}/news-${repo}.${stat}" |
314 |
+ [[ -f ${file} ]] || continue |
315 |
+ for item in $(<"${file}"); do |
316 |
+ echo "${stat}/${repo}/${item}" |
317 |
+ done |
318 |
+ done |
319 |
+ done |
320 |
+} |
321 |
+ |
322 |
+# write list of items to file |
323 |
+# first parameter is "unread" or "read" |
324 |
+# second parameter is the repository |
325 |
+# list of items is expected in global array "items" |
326 |
+write_item_list() { |
327 |
+ local stat=$1 repo=$2 item update |
328 |
+ for item in ${items[@]}; do |
329 |
+ [[ ${item%%/*} = ${stat} ]] || continue |
330 |
+ item=${item#*/} |
331 |
+ [[ ${item%%/*} = ${repo} ]] && update="${update} ${item#*/}" |
332 |
+ done |
333 |
+ file="${ROOT}${NEWS_DIR}/news-${repo}.${stat}" |
334 |
+ if [[ ! -w ${file} ]]; then |
335 |
+ write_error_msg \ |
336 |
+ "Cannot update list of news items for repository \"${repo}\"" |
337 |
+ return 1 |
338 |
+ fi |
339 |
+ for item in ${update}; do |
340 |
+ echo "${item}" |
341 |
+ done >"${file}" || die "Error writing file ${file}" |
342 |
+} |
343 |
+ |
344 |
+# read a given item |
345 |
+# first parameter is the directory |
346 |
+# second parameter is the item's name |
347 |
+# optional third parameter may be "header", "body", or "existsp" |
348 |
+read_item() { |
349 |
+ local dir=$1 item=$2 what=$3 file lang command="" |
350 |
+ for lang in $(accepted_languages); do |
351 |
+ file="${ROOT}${dir}/${item}/${item}.${lang}.txt" |
352 |
+ [[ -f "${file}" ]] || continue |
353 |
+ case "${what}" in |
354 |
+ header) command="/^$/Q" ;; |
355 |
+ body) command="0,/^$/d" ;; |
356 |
+ existsp) return 0 ;; |
357 |
+ esac |
358 |
+ sed -e "${command}" "${file}" || die "Error reading ${file}" |
359 |
+ return |
360 |
+ done |
361 |
+ return 1 |
362 |
+} |
363 |
+ |
364 |
+# find directory for a given repository (and cache it) |
365 |
+# affects variable "dir" and arrays "repos" and "dirs" by side effect |
366 |
+find_repo_dir() { |
367 |
+ local repo=$1 i |
368 |
+ for (( i = 0; i < ${#repos[@]}; i++ )); do |
369 |
+ [[ ${repos[i]} = ${repo} ]] && break |
370 |
+ done |
371 |
+ if [[ ${i} -eq ${#repos[@]} ]]; then |
372 |
+ repos[i]=${repo} |
373 |
+ dirs[i]=$(get_repo_news_dir "${repo}") |
374 |
+ fi |
375 |
+ dir=${dirs[i]} |
376 |
+} |
377 |
+ |
378 |
+# return list of accepted languages |
379 |
+accepted_languages() { |
380 |
+ local lc=${LC_ALL:-${LANG}} |
381 |
+ lc=${lc%%[^[:alpha:]]*} |
382 |
+ [[ -n ${lc} && ${lc} != en ]] && echo ${lc} |
383 |
+ echo en |
384 |
+} |
385 |
+ |
386 |
+### list action |
387 |
+ |
388 |
+describe_list() { |
389 |
+ echo "List news items" |
390 |
+} |
391 |
+ |
392 |
+do_list() { |
393 |
+ package-manager &>/dev/null # for internal caching |
394 |
+ local item stat repo dir header line title posted i=1 |
395 |
+ local ifs_save=${IFS-$' \t\n'} |
396 |
+ local -a repos dirs |
397 |
+ |
398 |
+ set -- $(find_items unread read) |
399 |
+ write_list_start "News items:" |
400 |
+ for item in "$@"; do |
401 |
+ stat=${item%%/*}; item=${item#*/} |
402 |
+ repo=${item%%/*}; item=${item#*/} |
403 |
+ find_repo_dir ${repo} |
404 |
+ header=$(read_item "${dir}" ${item} header) |
405 |
+ IFS=$'\n' |
406 |
+ for line in ${header}; do |
407 |
+ case "${line%%: *}" in |
408 |
+ Title) title=${line#*: } ;; |
409 |
+ Posted) posted=${line#*: } ;; |
410 |
+ esac |
411 |
+ done |
412 |
+ IFS=${ifs_save} |
413 |
+ if [[ ${stat} = unread ]]; then |
414 |
+ write_numbered_list_entry \ |
415 |
+ $((i++)) "$(highlight "${posted## } (unread) ${title## }")" |
416 |
+ else |
417 |
+ write_numbered_list_entry \ |
418 |
+ $((i++)) "${posted## } (read) ${title## }" |
419 |
+ fi |
420 |
+ done |
421 |
+ [[ $# -eq 0 ]] && write_kv_list_entry "(none found)" "" |
422 |
+} |
423 |
+ |
424 |
+### count action |
425 |
+ |
426 |
+describe_count() { |
427 |
+ echo "Display number of news items" |
428 |
+} |
429 |
+ |
430 |
+describe_count_options() { |
431 |
+ echo "new : Count unread news items (default)" |
432 |
+ echo "all : Count all news items" |
433 |
+} |
434 |
+ |
435 |
+do_count() { |
436 |
+ local status |
437 |
+ [[ $1 = all ]] && status="unread read" || status="unread" |
438 |
+ set -- $(find_items ${status}) |
439 |
+ echo $# |
440 |
+} |
441 |
+ |
442 |
+### read action |
443 |
+ |
444 |
+describe_read() { |
445 |
+ echo "Read news items" |
446 |
+} |
447 |
+ |
448 |
+describe_read_options() { |
449 |
+ echo "new : Read unread news items" |
450 |
+ echo "all : Read all news items" |
451 |
+ echo "item : Number of item (from 'list' action)" |
452 |
+} |
453 |
+ |
454 |
+describe_read_parameters() { |
455 |
+ echo "<item>..." |
456 |
+} |
457 |
+ |
458 |
+do_read() { |
459 |
+ package-manager &>/dev/null # for internal caching |
460 |
+ local -a items=( $(find_items unread read) ) repos dirs |
461 |
+ local n=${#items[@]} item repo stat dir header line i seq repos_upd |
462 |
+ local ifs_save=${IFS-$' \t\n'} |
463 |
+ |
464 |
+ # expand special values "new" and "all" |
465 |
+ if [[ $1 = new || $1 = all ]]; then |
466 |
+ for (( i = 1; i <= n; i++ )); do |
467 |
+ [[ $1 = new && ${items[i-1]%%/*} != unread ]] && break |
468 |
+ seq="${seq} ${i}" |
469 |
+ done |
470 |
+ set -- ${seq} |
471 |
+ fi |
472 |
+ |
473 |
+ for i in "$@"; do |
474 |
+ if ! is_number "${i}" || [[ ${i} -lt 1 || ${i} -gt ${#items[@]} ]] |
475 |
+ then |
476 |
+ write_warning_msg "Bad item number: ${i}" |
477 |
+ continue |
478 |
+ fi |
479 |
+ item=${items[--i]} |
480 |
+ stat=${item%%/*}; item=${item#*/} |
481 |
+ repo=${item%%/*}; item=${item#*/} |
482 |
+ find_repo_dir ${repo} |
483 |
+ write_list_start "${item}" |
484 |
+ header=$(read_item "${dir}" "${item}" header) |
485 |
+ IFS=$'\n' |
486 |
+ for line in ${header}; do |
487 |
+ case "${line%%: *}" in |
488 |
+ Title) |
489 |
+ write_kv_list_entry \ |
490 |
+ "${line%%: *}" "$(highlight "${line#*: }")" ;; |
491 |
+ Author|Posted|Revision) |
492 |
+ write_kv_list_entry "${line%%: *}" "${line#*: }" ;; |
493 |
+ esac |
494 |
+ done |
495 |
+ IFS=${ifs_save} |
496 |
+ echo |
497 |
+ read_item "${dir}" "${item}" body |
498 |
+ echo |
499 |
+ |
500 |
+ [[ ${stat} = unread ]] || continue |
501 |
+ # move from "unread" to "read" |
502 |
+ unset items[i] |
503 |
+ items[n++]=read/${repo}/${item} |
504 |
+ has ${repo} ${repos_upd} || repos_upd="${repos_upd} ${repo}" |
505 |
+ done |
506 |
+ |
507 |
+ # update lists of read/unread items |
508 |
+ for repo in ${repos_upd}; do |
509 |
+ write_item_list read ${repo} && write_item_list unread ${repo} |
510 |
+ done |
511 |
+} |
512 |
+ |
513 |
+### unread action |
514 |
+ |
515 |
+describe_unread() { |
516 |
+ echo "Mark read news items as unread again" |
517 |
+} |
518 |
+ |
519 |
+describe_unread_options() { |
520 |
+ echo "all : Mark all news items as unread" |
521 |
+ echo "item : Number of item (from 'list' action)" |
522 |
+} |
523 |
+ |
524 |
+describe_unread_parameters() { |
525 |
+ echo "<item>..." |
526 |
+} |
527 |
+ |
528 |
+do_unread() { |
529 |
+ local -a items=( $(find_items unread read) ) |
530 |
+ local n=${#items[@]} item repo stat i seq repos_upd |
531 |
+ |
532 |
+ # expand special value "all" |
533 |
+ if [[ $1 = all ]]; then |
534 |
+ for (( i = 1; i <= n; i++ )); do |
535 |
+ seq="${seq} ${i}" |
536 |
+ done |
537 |
+ set -- ${seq} |
538 |
+ fi |
539 |
+ |
540 |
+ for i in "$@"; do |
541 |
+ if ! is_number "${i}" || [[ ${i} -lt 1 || ${i} -gt ${#items[@]} ]] |
542 |
+ then |
543 |
+ write_warning_msg "Bad item number: ${i}" |
544 |
+ continue |
545 |
+ fi |
546 |
+ item=${items[--i]} |
547 |
+ stat=${item%%/*}; item=${item#*/} |
548 |
+ repo=${item%%/*}; item=${item#*/} |
549 |
+ [[ ${stat} = read ]] || continue |
550 |
+ # move from "read" to "unread" |
551 |
+ unset items[i] |
552 |
+ items[n++]=unread/${repo}/${item} |
553 |
+ has ${repo} ${repos_upd} || repos_upd="${repos_upd} ${repo}" |
554 |
+ done |
555 |
+ |
556 |
+ # update lists of unread/read items |
557 |
+ for repo in ${repos_upd}; do |
558 |
+ write_item_list unread ${repo} && write_item_list read ${repo} |
559 |
+ done |
560 |
+} |
561 |
+ |
562 |
+### purge action |
563 |
+ |
564 |
+describe_purge() { |
565 |
+ echo "Purge read news" |
566 |
+} |
567 |
+ |
568 |
+do_purge() { |
569 |
+ local -a items=( $(find_items read) ) |
570 |
+ local item i repos |
571 |
+ |
572 |
+ # find repos with nonempty lists |
573 |
+ for (( i = 0; i < ${#items[@]}; i++ )); do |
574 |
+ item=${items[i]#*/} |
575 |
+ has ${item%%/*} ${repos} || repos="${repos} ${item%%/*}" |
576 |
+ done |
577 |
+ |
578 |
+ # purge list of read items |
579 |
+ items=() |
580 |
+ for repo in ${repos}; do |
581 |
+ write_item_list read ${repo} |
582 |
+ done |
583 |
+} |
584 |
|
585 |
|
586 |
Property changes on: trunk/modules/news-tng.eselect |
587 |
___________________________________________________________________ |
588 |
Name: svn:keywords |
589 |
+ Author Date Id Revision |