### Issues
* \#1 \[bug\] Unable to mount S3 due to 'item_not_found' exception
* \#2 Require bucket name for S3 mounts
* \#3 \[bug\] File size is not being updated in S3 mount
* \#4 Upgrade to libfuse-3.x.x
* \#5 Switch to renterd for Sia support
* \#6 Switch to cpp-httplib to further reduce dependencies
* \#7 Remove global_data and calculate used disk space per provider
* \#8 Switch to libcurl for S3 mount support
### Changes from v1.x.x
* Added read-only encrypt provider
* Pass-through mount point that transparently encrypts source data using `XChaCha20-Poly1305`
* Added S3 encryption support via `XChaCha20-Poly1305`
* Added replay protection to remote mounts
* Added support base64 writes in remote FUSE
* Created static linked Linux binaries for `amd64` and `aarch64` using `musl-libc`
* Removed legacy Sia renter support
* Removed Skynet support
* Fixed multiple remote mount WinFSP API issues on \*NIX servers
* Implemented chunked read and write
* Writes for non-cached files are performed in chunks of 8Mib
* Removed `repertory-ui` support
* Removed `FreeBSD` support
* Switched to `libsodium` over `CryptoPP`
* Switched to `XChaCha20-Poly1305` for remote mounts
* Updated `GoogleTest` to v1.14.0
* Updated `JSON for Modern C++` to v3.11.2
* Updated `OpenSSL` to v1.1.1w
* Updated `RocksDB` to v8.5.3
* Updated `WinFSP` to 2023
* Updated `boost` to v1.78.0
* Updated `cURL` to v8.3.0
* Updated `zlib` to v1.3
* Use `upload_manager` for all providers
* Adds a delay to uploads to prevent excessive API calls
* Supports re-upload after mount restart for incomplete uploads
* NOTE: Uploads for all providers are full file (no resume support)
* Multipart upload support is planned for S3
Reviewed-on: #9
134 lines
3.0 KiB
Bash
134 lines
3.0 KiB
Bash
#! /bin/sh
|
|
# igawk --- like gawk but do @include processing
|
|
#
|
|
# Arnold Robbins, arnold@skeeve.com, Public Domain
|
|
# July 1993
|
|
|
|
if [ "$1" = debug ]
|
|
then
|
|
set -x
|
|
shift
|
|
fi
|
|
|
|
# A literal newline, so that program text is formatted correctly
|
|
n='
|
|
'
|
|
|
|
# Initialize variables to empty
|
|
program=
|
|
opts=
|
|
|
|
while [ $# -ne 0 ] # loop over arguments
|
|
do
|
|
case $1 in
|
|
--) shift; break;;
|
|
|
|
-W) shift
|
|
# The ${x?'message here'} construct prints a
|
|
# diagnostic if $x is the null string
|
|
set -- -W"${@?'missing operand'}"
|
|
continue;;
|
|
|
|
-[vF]) opts="$opts $1 '${2?'missing operand'}'"
|
|
shift;;
|
|
|
|
-[vF]*) opts="$opts '$1'" ;;
|
|
|
|
-f) program="$program$n@include ${2?'missing operand'}"
|
|
shift;;
|
|
|
|
-f*) f=`expr "$1" : '-f\(.*\)'`
|
|
program="$program$n@include $f";;
|
|
|
|
-[W-]file=*)
|
|
f=`expr "$1" : '-.file=\(.*\)'`
|
|
program="$program$n@include $f";;
|
|
|
|
-[W-]file)
|
|
program="$program$n@include ${2?'missing operand'}"
|
|
shift;;
|
|
|
|
-[W-]source=*)
|
|
t=`expr "$1" : '-.source=\(.*\)'`
|
|
program="$program$n$t";;
|
|
|
|
-[W-]source)
|
|
program="$program$n${2?'missing operand'}"
|
|
shift;;
|
|
|
|
-[W-]version)
|
|
echo igawk: version 2.0 1>&2
|
|
gawk --version
|
|
exit 0 ;;
|
|
|
|
-[W-]*) opts="$opts '$1'" ;;
|
|
|
|
*) break;;
|
|
esac
|
|
shift
|
|
done
|
|
|
|
if [ -z "$program" ]
|
|
then
|
|
program=${1?'missing program'}
|
|
shift
|
|
fi
|
|
|
|
# At this point, `program' has the program.
|
|
expand_prog='
|
|
|
|
function pathto(file, i, t, junk)
|
|
{
|
|
if (index(file, "/") != 0)
|
|
return file
|
|
|
|
for (i = 1; i <= ndirs; i++) {
|
|
t = (pathlist[i] "/" file)
|
|
if ((getline junk < t) > 0) {
|
|
# found it
|
|
close(t)
|
|
return t
|
|
}
|
|
}
|
|
return ""
|
|
}
|
|
BEGIN {
|
|
path = ENVIRON["AWKPATH"]
|
|
ndirs = split(path, pathlist, ":")
|
|
for (i = 1; i <= ndirs; i++) {
|
|
if (pathlist[i] == "")
|
|
pathlist[i] = "."
|
|
}
|
|
stackptr = 0
|
|
input[stackptr] = ARGV[1] # ARGV[1] is first file
|
|
|
|
for (; stackptr >= 0; stackptr--) {
|
|
while ((getline < input[stackptr]) > 0) {
|
|
if (tolower($1) != "@include") {
|
|
print
|
|
continue
|
|
}
|
|
fpath = pathto($2)
|
|
if (fpath == "") {
|
|
printf("igawk:%s:%d: cannot find %s\n",
|
|
input[stackptr], FNR, $2) > "/dev/stderr"
|
|
continue
|
|
}
|
|
if (! (fpath in processed)) {
|
|
processed[fpath] = input[stackptr]
|
|
input[++stackptr] = fpath # push onto stack
|
|
} else
|
|
print $2, "included in", input[stackptr],
|
|
"already included in",
|
|
processed[fpath] > "/dev/stderr"
|
|
}
|
|
close(input[stackptr])
|
|
}
|
|
}' # close quote ends `expand_prog' variable
|
|
|
|
processed_program=`gawk -- "$expand_prog" /dev/stdin <<EOF
|
|
$program
|
|
EOF
|
|
`
|
|
eval gawk $opts -- '"$processed_program"' '"$@"'
|