]> arthur.barton.de Git - bup.git/blob - dev/refresh
MetaStoreWriter.__del__: replace with context management
[bup.git] / dev / refresh
1 #!/usr/bin/env bash
2
3 set -ueo pipefail
4
5 # Related: https://joeyh.name/code/moreutils/ sponge
6
7 usage()
8 {
9     echo 'Usage: refresh [-a] [-v] DEST'
10     echo '       refresh [-a] [-v] -- DEST'
11 }
12
13 append=''
14 verbose=''
15
16 while test $# -gt 0; do
17     case $1 in
18         -a) append=true; shift;;
19         -v) verbose=true; shift;;
20         --)
21             if test "$#" -ne 2; then
22                 usage 1>&2
23                 exit 2
24             fi
25             dest="$2"
26             shift 2
27             ;;
28         -*)
29             usage 1>&2
30             exit 2
31             ;;
32         *)
33             if test "$#" -ne 1; then
34                 usage 1>&2
35                 exit 2
36             fi
37             dest="$1"
38             shift
39             ;;
40     esac
41 done
42
43 tmpfile="$(mktemp "$dest.sponge-XXXXXXX")"
44
45 clean-up()
46 {
47     rm -f "$tmpfile"
48 }
49
50 trap clean-up EXIT
51
52 # Inefficient, but should clone the permissions
53 if test -e "$dest"; then
54    cp -Lp "$dest" "$tmpfile"
55 fi
56
57 if test "$append"; then
58     cat >> "$tmpfile"
59 else
60     cat > "$tmpfile"
61 fi
62
63 if ! cmp -s "$tmpfile" "$dest"; then
64     if test "$verbose"; then
65         echo "Refreshed $dest" 1>&2
66     fi
67     mv "$tmpfile" "$dest"
68 fi