From: Andre Noll Date: Thu, 7 Nov 2019 11:31:02 +0000 (+0100) Subject: Merge branch 'refs/heads/t/prune' X-Git-Tag: v1.0.1~1 X-Git-Url: http://git.tuebingen.mpg.de/?a=commitdiff_plain;h=766ebea19c1618ddab85a4fc6af2a5bf53a9ec38;hp=71a8073e6f18ccc21880a475af8d864279a960b8;p=dss.git Merge branch 'refs/heads/t/prune' A couple of cleanups and unifications for the snapshot pruning code, which is executed by the prune and run subcommands. With the patches applied, both subcommands behave identically, i.e. they consider the same set of snapshots as candidates for pruning. Also the prune command gained the new --disk-space option to force it to act as if disk space was high or low. Cooking for six weeks. * refs/heads/t/prune: Introduce prune --disk-space. Revamp com_prune(). Factor out find_removable_snapshot(). prune Simplify rm exit code logic. find_oldest_removable_snapshot(): Improve log message. prune: Print a message if there is nothing to prune. get_snapshot_list(): Add comment about sorting. prune: Fail gracefully if pre-rm hook fails. --- diff --git a/.gitignore b/.gitignore index 1bb2a25..4aafb48 100644 --- a/.gitignore +++ b/.gitignore @@ -5,5 +5,4 @@ dss.lsg.* dss dss.1 dss.1.html -dss.png index.html diff --git a/Makefile b/Makefile index 2d0a6bb..ef00f50 100644 --- a/Makefile +++ b/Makefile @@ -38,9 +38,6 @@ dss: $(dss_objects) %.o: %.c Makefile $(CC) -c $(DSS_CPPFLAGS) $(CPPFLAGS) $(DSS_CFLAGS) $(CFLAGS) $< -dss.png: mklogo - ./mklogo > $@ - %.lsg.h: %.suite lopsubgen --gen-h=$@ < $< %.lsg.c: %.suite @@ -52,7 +49,7 @@ dss.png: mklogo groff -m man -Thtml -P -l -P -r $< | sed -e '1,/^/d; /^<\/body>/,$$d' > $@ clean: - rm -f *.o dss dss.1 dss.1.html Makefile.deps *.png *~ index.html dss.lsg.h dss.lsg.c + rm -f *.o dss dss.1 dss.1.html Makefile.deps *~ index.html dss.lsg.h dss.lsg.c ifneq ($(findstring strip, $(MAKECMDGOALS)),) strip_option := -s diff --git a/daemon.c b/daemon.c index 709785b..ad73061 100644 --- a/daemon.c +++ b/daemon.c @@ -60,7 +60,6 @@ int daemon_init(void) /* become session leader */ if (setsid() < 0) goto err; - umask(0); null = open("/dev/null", O_RDWR); if (null < 0) goto err; diff --git a/dss.c b/dss.c index 4396e6e..f61f335 100644 --- a/dss.c +++ b/dss.c @@ -1458,7 +1458,7 @@ static void create_rsync_argv(char ***argv, int64_t *num) OPT_STRING_VAL(DSS, REMOTE_USER) : logname, OPT_STRING_VAL(DSS, REMOTE_HOST), lls_string_val(j, OPT_RESULT(DSS, SOURCE_DIR)), - N == 1? "/" : "" + OPT_GIVEN(DSS, SOURCE_DIR) == 1? "/" : "" ); } } @@ -1581,7 +1581,7 @@ static void exit_hook(int exit_code) { pid_t pid; char **argv, *tmp = dss_strdup(OPT_STRING_VAL(DSS, EXIT_HOOK)); - unsigned n = split_args(tmp, &argv, " \t"); + unsigned n = split_args(tmp, &argv); n++; argv = dss_realloc(argv, (n + 1) * sizeof(char *)); diff --git a/dss.svg b/dss.svg new file mode 100644 index 0000000..fb69bd7 --- /dev/null +++ b/dss.svg @@ -0,0 +1,65 @@ + + + + + + + + + + + + + + + + DSS + + + + + + + + + + + + + + + + + + + + + diff --git a/exec.c b/exec.c index 9e0565d..ece7ec2 100644 --- a/exec.c +++ b/exec.c @@ -56,7 +56,7 @@ void dss_exec_cmdline_pid(pid_t *pid, const char *cmdline) { char **argv, *tmp = dss_strdup(cmdline); - split_args(tmp, &argv, " \t"); + split_args(tmp, &argv); dss_exec(pid, argv[0], argv); free(argv); free(tmp); diff --git a/index.html.in b/index.html.in index 42606ca..b505761 100644 --- a/index.html.in +++ b/index.html.in @@ -12,7 +12,7 @@
- dss + dss

The dyadic snapshot scheduler

diff --git a/mklogo b/mklogo deleted file mode 100755 index d4705ba..0000000 --- a/mklogo +++ /dev/null @@ -1,101 +0,0 @@ -#!/bin/bash -# SPDX-License-Identifier: GPL-2.0 - -# Script for Image Magick that writes the dss logo in png format -# to stdout. - -set -u - -width=320 -height=110 -border=5 -radius1=4 -radius2=5 -circle_y=90 -arrow_y=70 -text_x=128 -text_y=55 -pointsize=36 - -declare -a circle arrow rectangle text - -make_circles() -{ - local inner='stroke black fill red circle' - local outer='stroke black fill black circle' - local num=1 - local idx=0 - local y=$circle_y - local step x0 i j idx num - - for ((i = 0; i < 4; i++)); do - step=$(((width / 4 + num) / (num + 1))) - x0=$((border + width / 4 * i)) - for ((j = 1; j <= $num; j++)); do - x=$((x0 + j * $step)) - circle[$idx]='-draw'; let idx++ - circle[$idx]="$outer $x,$y,$((x + radius2)),$y"; let idx++ - circle[$idx]='-draw'; let idx++ - circle[$idx]="$inner $x,$y,$((x + radius1)),$y"; let idx++ - done - num=$((num * 2)) - done - #echo "${circle[@]}"; exit 0 -} - -make_arrow() -{ - local arrow_head='l -15,-5 +5,+5 -5,+5 +15,-5 z' - local idx=0 - local x0 x1 y - - arrow[$idx]='-draw'; let idx++ - x0=$((3 * border)); x1=$((width - 2 * border)) - y=$arrow_y - arrow[$idx]="stroke white line $x0,$y $x1,$y"; let idx++ - arrow[$idx]='-draw'; let idx++ - x0=$((width - 2 * border)) - arrow[$idx]="stroke white fill white path 'M $x0,$y $arrow_head'" - #echo "${arrow[@]}"; exit 0 -} - -make_rectangles() -{ - local idx=0 - local x x0 x1 y y0 y1 i red_green color - - rectangle[$idx]='-draw'; let idx++ - x=$((width + 2 * border)) - y=$((height + 2 * border)) - rectangle[$idx]="stroke yellow fill yellow rectangle 0,0 $x,$y"; let idx++ - for ((i = 0; i < 4; i++)); do - rectangle[$idx]='-draw'; let idx++ - red_green="$(printf '%02x' $(((3 - i) * 60)))" - color="#${red_green}${red_green}ff" - x0=$((border + i * width / 4)); x1=$((x0 + width / 4 - 1)) - y0=$border; y1=$((y0 + height)) - rectangle[$idx]="stroke $color fill $color rectangle $x0,$y0 $x1,$y1" - let idx++ - done - #echo "${rectangle[@]}"; exit 0 -} - -make_text() -{ - text=(-pointsize $pointsize -draw \ - "fill white text $text_x,$text_y DSS") - #echo "${text[@]}"; exit 0 -} - -make_rectangles -make_arrow -make_circles -make_text - -convert -size $((width + 2 * border))x$((height + 2 * border)) \ - -background none xc: \ - "${rectangle[@]}" \ - "${arrow[@]}" \ - "${circle[@]}" \ - "${text[@]}" \ - png:- diff --git a/str.c b/str.c index 623def1..1377630 100644 --- a/str.c +++ b/str.c @@ -212,20 +212,21 @@ __must_check __malloc char *dss_logname(void) * * \param args The string to be split. * \param argv_ptr Pointer to the list of substrings. - * \param delim Delimiter. * - * This function modifies \a args by replacing each occurrence of \a delim by - * zero. A \p NULL-terminated array of pointers to char* is allocated dynamically - * and these pointers are initialized to point to the broken-up substrings - * within \a args. A pointer to this array is returned via \a argv_ptr. + * This function modifies the string given by the first argument by replacing + * all occurrences of space and '\t' characters by '\0'. A NULL-terminated + * array of pointers to char * is allocated dynamically, and these pointers are + * initialized to point to the broken-up substrings. A pointer to this array + * is returned via the last argument. * - * \return The number of substrings found in \a args. + * \return The number of substrings found. */ -unsigned split_args(char *args, char *** const argv_ptr, const char *delim) +unsigned split_args(char *args, char *** const argv_ptr) { char *p; char **argv; size_t n = 0, i, j; + const char delim[] = " \t"; p = args + strspn(args, delim); for (;;) { diff --git a/str.h b/str.h index b7f2635..7b121ef 100644 --- a/str.h +++ b/str.h @@ -8,7 +8,7 @@ __must_check __malloc char *dss_strdup(const char *s); __must_check __malloc char *get_homedir(void); int dss_atoi64(const char *str, int64_t *value); __must_check __malloc char *dss_logname(void); -unsigned split_args(char *args, char *** const argv_ptr, const char *delim); +unsigned split_args(char *args, char *** const argv_ptr); /** \cond LLONG_MAX and LLONG_LIN might not be defined. */