Hex Artifact Content

Artifact b7083177d4b974c338faffe8221a2959462a3c37:


0000: 23 21 20 2f 75 73 72 2f 62 69 6e 2f 65 6e 76 20  #! /usr/bin/env 
0010: 62 61 73 68 0a 0a 73 65 74 20 2d 78 0a 0a 61 70  bash..set -x..ap
0020: 70 66 73 64 5f 6f 70 74 69 6f 6e 73 3d 28 29 0a  pfsd_options=().
0030: 69 66 20 5b 20 22 24 31 22 20 3d 3d 20 22 2d 2d  if [ "$1" == "--
0040: 63 61 63 68 65 64 69 72 22 20 5d 3b 20 74 68 65  cachedir" ]; the
0050: 6e 0a 09 61 70 70 66 73 64 5f 6f 70 74 69 6f 6e  n..appfsd_option
0060: 73 3d 28 22 24 7b 61 70 70 66 73 64 5f 6f 70 74  s=("${appfsd_opt
0070: 69 6f 6e 73 5b 40 5d 7d 22 20 27 2d 2d 63 61 63  ions[@]}" '--cac
0080: 68 65 64 69 72 27 20 22 24 32 22 29 0a 0a 09 73  hedir' "$2")...s
0090: 68 69 66 74 3b 20 73 68 69 66 74 3b 0a 66 69 0a  hift; shift;.fi.
00a0: 0a 66 75 6e 63 74 69 6f 6e 20 63 61 6c 6c 5f 61  .function call_a
00b0: 70 70 66 73 64 28 29 20 7b 0a 09 61 70 70 66 73  ppfsd() {..appfs
00c0: 64 20 22 24 7b 61 70 70 66 73 64 5f 6f 70 74 69  d "${appfsd_opti
00d0: 6f 6e 73 5b 40 5d 7d 22 20 22 24 40 22 0a 7d 0a  ons[@]}" "$@".}.
00e0: 0a 66 75 6e 63 74 69 6f 6e 20 69 6e 76 61 6c 69  .function invali
00f0: 64 61 74 65 28 29 20 7b 0a 09 63 61 6c 6c 5f 61  date() {..call_a
0100: 70 70 66 73 64 20 2d 2d 73 71 6c 69 74 65 33 20  ppfsd --sqlite3 
0110: 27 55 50 44 41 54 45 20 73 69 74 65 73 20 53 45  'UPDATE sites SE
0120: 54 20 74 74 6c 20 3d 20 22 30 22 3b 27 0a 7d 0a  T ttl = "0";'.}.
0130: 0a 66 75 6e 63 74 69 6f 6e 20 72 65 6d 6f 76 65  .function remove
0140: 5f 73 69 74 65 28 29 20 7b 0a 09 6c 6f 63 61 6c  _site() {..local
0150: 20 73 69 74 65 0a 0a 09 73 69 74 65 3d 22 24 31   site...site="$1
0160: 22 0a 0a 09 63 61 6c 6c 5f 61 70 70 66 73 64 20  "...call_appfsd 
0170: 2d 2d 73 71 6c 69 74 65 33 20 27 44 45 4c 45 54  --sqlite3 'DELET
0180: 45 20 46 52 4f 4d 20 73 69 74 65 73 20 57 48 45  E FROM sites WHE
0190: 52 45 20 68 6f 73 74 6e 61 6d 65 20 3d 20 27 22  RE hostname = '"
01a0: 27 24 73 69 74 65 27 22 27 3b 20 44 45 4c 45 54  '$site'"'; DELET
01b0: 45 20 46 52 4f 4d 20 70 61 63 6b 61 67 65 73 20  E FROM packages 
01c0: 57 48 45 52 45 20 68 6f 73 74 6e 61 6d 65 20 3d  WHERE hostname =
01d0: 20 27 22 27 24 73 69 74 65 27 22 27 3b 27 20 7c   '"'$site'"';' |
01e0: 7c 20 72 65 74 75 72 6e 20 31 0a 0a 09 63 6c 65  | return 1...cle
01f0: 61 6e 0a 7d 0a 0a 66 75 6e 63 74 69 6f 6e 20 63  an.}..function c
0200: 6c 65 61 6e 28 29 20 7b 0a 09 63 61 6c 6c 5f 61  lean() {..call_a
0210: 70 70 66 73 64 20 2d 2d 74 63 6c 20 22 24 28 63  ppfsd --tcl "$(c
0220: 61 74 20 3c 3c 5c 5f 45 4f 46 5f 0a 09 09 75 6e  at <<\_EOF_...un
0230: 73 65 74 20 2d 6e 6f 63 6f 6d 70 6c 61 69 6e 20  set -nocomplain 
0240: 72 6f 77 0a 09 09 3a 3a 61 70 70 66 73 3a 3a 64  row...::appfs::d
0250: 62 20 65 76 61 6c 20 7b 53 45 4c 45 43 54 20 73  b eval {SELECT s
0260: 68 61 31 2c 20 68 6f 73 74 6e 61 6d 65 20 46 52  ha1, hostname FR
0270: 4f 4d 20 70 61 63 6b 61 67 65 73 3b 7d 20 72 6f  OM packages;} ro
0280: 77 20 7b 0a 09 09 09 73 65 74 20 68 6f 73 74 6e  w {....set hostn
0290: 61 6d 65 20 5b 3a 3a 61 70 70 66 73 3a 3a 64 62  ame [::appfs::db
02a0: 20 6f 6e 65 63 6f 6c 75 6d 6e 20 7b 53 45 4c 45   onecolumn {SELE
02b0: 43 54 20 68 6f 73 74 6e 61 6d 65 20 46 52 4f 4d  CT hostname FROM
02c0: 20 73 69 74 65 73 20 57 48 45 52 45 20 68 6f 73   sites WHERE hos
02d0: 74 6e 61 6d 65 20 3d 20 24 72 6f 77 28 68 6f 73  tname = $row(hos
02e0: 74 6e 61 6d 65 29 20 4c 49 4d 49 54 20 31 3b 7d  tname) LIMIT 1;}
02f0: 5d 0a 09 09 09 69 66 20 7b 24 68 6f 73 74 6e 61  ]....if {$hostna
0300: 6d 65 20 3d 3d 20 22 22 7d 20 7b 0a 09 09 09 09  me == ""} {.....
0310: 63 6f 6e 74 69 6e 75 65 0a 09 09 09 7d 0a 0a 09  continue....}...
0320: 09 09 73 65 74 20 76 61 6c 69 64 5f 73 68 61 31  ..set valid_sha1
0330: 28 24 72 6f 77 28 73 68 61 31 29 29 20 31 0a 09  ($row(sha1)) 1..
0340: 09 09 3a 3a 61 70 70 66 73 3a 3a 64 62 20 65 76  ..::appfs::db ev
0350: 61 6c 20 7b 53 45 4c 45 43 54 20 66 69 6c 65 5f  al {SELECT file_
0360: 73 68 61 31 20 46 52 4f 4d 20 66 69 6c 65 73 20  sha1 FROM files 
0370: 57 48 45 52 45 20 66 69 6c 65 5f 73 68 61 31 20  WHERE file_sha1 
0380: 49 53 20 4e 4f 54 20 4e 55 4c 4c 20 41 4e 44 20  IS NOT NULL AND 
0390: 66 69 6c 65 5f 73 68 61 31 20 21 3d 20 27 27 20  file_sha1 != '' 
03a0: 41 4e 44 20 70 61 63 6b 61 67 65 5f 73 68 61 31  AND package_sha1
03b0: 20 3d 20 24 72 6f 77 28 73 68 61 31 29 3b 7d 20   = $row(sha1);} 
03c0: 73 75 62 72 6f 77 20 7b 0a 09 09 09 09 73 65 74  subrow {.....set
03d0: 20 76 61 6c 69 64 5f 73 68 61 31 28 24 73 75 62   valid_sha1($sub
03e0: 72 6f 77 28 66 69 6c 65 5f 73 68 61 31 29 29 20  row(file_sha1)) 
03f0: 31 0a 09 09 09 7d 0a 09 09 7d 0a 0a 09 09 66 6f  1....}...}....fo
0400: 72 65 61 63 68 20 66 69 6c 65 20 5b 67 6c 6f 62  reach file [glob
0410: 20 2d 6e 6f 63 6f 6d 70 6c 61 69 6e 20 2d 74 61   -nocomplain -ta
0420: 69 6c 73 20 2d 64 69 72 65 63 74 6f 72 79 20 24  ils -directory $
0430: 3a 3a 61 70 70 66 73 3a 3a 63 61 63 68 65 64 69  ::appfs::cachedi
0440: 72 20 7b 5b 30 2d 39 61 2d 66 5d 5b 30 2d 39 61  r {[0-9a-f][0-9a
0450: 2d 66 5d 2f 2a 2f 2a 2f 2a 2f 2a 7d 5d 20 7b 0a  -f]/*/*/*/*}] {.
0460: 09 09 09 73 65 74 20 73 68 61 31 20 5b 73 74 72  ...set sha1 [str
0470: 69 6e 67 20 6d 61 70 20 5b 6c 69 73 74 20 22 2f  ing map [list "/
0480: 22 20 22 22 20 22 5c 5c 22 20 22 22 5d 20 24 66  " "" "\\" ""] $f
0490: 69 6c 65 5d 0a 09 09 09 73 65 74 20 66 69 6c 65  ile]....set file
04a0: 20 5b 66 69 6c 65 20 6a 6f 69 6e 20 24 3a 3a 61   [file join $::a
04b0: 70 70 66 73 3a 3a 63 61 63 68 65 64 69 72 20 24  ppfs::cachedir $
04c0: 66 69 6c 65 5d 0a 0a 09 09 09 69 66 20 7b 5b 69  file].....if {[i
04d0: 6e 66 6f 20 65 78 69 73 74 73 20 76 61 6c 69 64  nfo exists valid
04e0: 5f 73 68 61 31 28 24 73 68 61 31 29 5d 7d 20 7b  _sha1($sha1)]} {
04f0: 0a 09 09 09 09 63 6f 6e 74 69 6e 75 65 0a 09 09  .....continue...
0500: 09 7d 0a 0a 09 09 09 70 75 74 73 20 22 43 6c 65  .}.....puts "Cle
0510: 61 6e 69 6e 67 20 24 66 69 6c 65 22 0a 09 09 09  aning $file"....
0520: 66 69 6c 65 20 64 65 6c 65 74 65 20 2d 66 6f 72  file delete -for
0530: 63 65 20 2d 2d 20 24 66 69 6c 65 0a 09 09 7d 0a  ce -- $file...}.
0540: 5f 45 4f 46 5f 0a 09 29 22 0a 7d 0a 0a 66 75 6e  _EOF_..)".}..fun
0550: 63 74 69 6f 6e 20 63 6c 65 61 72 28 29 20 7b 0a  ction clear() {.
0560: 09 6c 6f 63 61 6c 20 70 61 63 6b 61 67 65 0a 0a  .local package..
0570: 09 70 61 63 6b 61 67 65 3d 22 24 31 22 0a 0a 09  .package="$1"...
0580: 69 66 20 5b 20 2d 6e 20 22 24 7b 70 61 63 6b 61  if [ -n "${packa
0590: 67 65 7d 22 20 5d 3b 20 74 68 65 6e 0a 09 09 65  ge}" ]; then...e
05a0: 63 68 6f 20 22 6e 6f 74 20 69 6d 70 6c 65 6d 65  cho "not impleme
05b0: 6e 74 65 64 22 20 3e 26 32 0a 0a 09 09 72 65 74  nted" >&2....ret
05c0: 75 72 6e 20 31 0a 09 66 69 0a 0a 09 63 61 6c 6c  urn 1..fi...call
05d0: 5f 61 70 70 66 73 64 20 2d 2d 74 63 6c 20 27 66  _appfsd --tcl 'f
05e0: 69 6c 65 20 64 65 6c 65 74 65 20 2d 66 6f 72 63  ile delete -forc
05f0: 65 20 2d 2d 20 7b 2a 7d 5b 67 6c 6f 62 20 2d 64  e -- {*}[glob -d
0600: 69 72 65 63 74 6f 72 79 20 24 3a 3a 61 70 70 66  irectory $::appf
0610: 73 3a 3a 63 61 63 68 65 64 69 72 20 7b 5b 30 2d  s::cachedir {[0-
0620: 39 61 2d 66 5d 5b 30 2d 39 61 2d 66 5d 7d 5d 27  9a-f][0-9a-f]}]'
0630: 20 7c 7c 20 72 65 74 75 72 6e 20 31 0a 09 63 61   || return 1..ca
0640: 6c 6c 5f 61 70 70 66 73 64 20 2d 2d 73 71 6c 69  ll_appfsd --sqli
0650: 74 65 33 20 27 44 45 4c 45 54 45 20 46 52 4f 4d  te3 'DELETE FROM
0660: 20 73 69 74 65 73 3b 20 44 45 4c 45 54 45 20 46   sites; DELETE F
0670: 52 4f 4d 20 70 61 63 6b 61 67 65 73 3b 20 44 45  ROM packages; DE
0680: 4c 45 54 45 20 46 52 4f 4d 20 66 69 6c 65 73 3b  LETE FROM files;
0690: 20 56 41 43 55 55 4d 3b 27 20 7c 7c 20 72 65 74   VACUUM;' || ret
06a0: 75 72 6e 20 31 0a 7d 0a 0a 63 61 73 65 20 22 24  urn 1.}..case "$
06b0: 31 22 20 69 6e 0a 09 69 6e 76 61 6c 69 64 61 74  1" in..invalidat
06c0: 65 29 0a 09 09 69 6e 76 61 6c 69 64 61 74 65 20  e)...invalidate 
06d0: 7c 7c 20 65 78 69 74 20 31 0a 09 09 3b 3b 0a 09  || exit 1...;;..
06e0: 72 65 6d 6f 76 65 2d 73 69 74 65 29 0a 09 09 72  remove-site)...r
06f0: 65 6d 6f 76 65 5f 73 69 74 65 20 22 24 32 22 20  emove_site "$2" 
0700: 7c 7c 20 65 78 69 74 20 31 0a 09 09 3b 3b 0a 09  || exit 1...;;..
0710: 63 6c 65 61 6e 29 0a 09 09 63 6c 65 61 6e 20 7c  clean)...clean |
0720: 7c 20 65 78 69 74 20 31 0a 09 09 3b 3b 0a 09 63  | exit 1...;;..c
0730: 6c 65 61 72 29 0a 09 09 63 6c 65 61 72 20 22 24  lear)...clear "$
0740: 32 22 20 7c 7c 20 65 78 69 74 20 31 0a 09 09 3b  2" || exit 1...;
0750: 3b 0a 09 2a 29 0a 09 09 65 63 68 6f 20 22 55 73  ;..*)...echo "Us
0760: 61 67 65 3a 20 61 70 70 66 73 2d 63 61 63 68 65  age: appfs-cache
0770: 20 7b 69 6e 76 61 6c 69 64 61 74 65 7c 63 6c 65   {invalidate|cle
0780: 61 6e 7c 63 6c 65 61 72 7c 63 6c 65 61 72 20 3c  an|clear|clear <
0790: 70 61 63 6b 61 67 65 3e 7c 72 65 6d 6f 76 65 2d  package>|remove-
07a0: 73 69 74 65 20 3c 73 69 74 65 3e 7d 22 20 3e 26  site <site>}" >&
07b0: 32 0a 0a 09 09 65 78 69 74 20 31 0a 09 09 3b 3b  2....exit 1...;;
07c0: 0a 65 73 61 63 0a 0a 65 78 69 74 20 30 0a        .esac..exit 0.