Compare commits
350 Commits
master
...
v2.1.0-rc-
Author | SHA1 | Date | |
---|---|---|---|
17a28b58a4 | |||
078f679cca | |||
694f487861 | |||
ed89b3e8c2 | |||
12d1491221 | |||
eaf0018eb7 | |||
24bb67894f | |||
218545569d | |||
1ca5f41d89 | |||
f0e1cc7fc5 | |||
e3dd7c9791 | |||
8f0d8d7d6c | |||
b5fe6709d4 | |||
d6ee76ca7a | |||
3d93712aac | |||
21ac54e97c | |||
eee5587bab | |||
8475d04341 | |||
66c606a28f | |||
4267861034 | |||
57ad2e9773 | |||
158675f9c9 | |||
4f4323d7b7 | |||
873c82b84e | |||
35d1893275 | |||
caa9bf2604 | |||
b72c1822d5 | |||
d6b9a73570 | |||
61f768f306 | |||
8add58bdd3 | |||
075b15286f | |||
ca21b13ab9 | |||
9eac4a4191 | |||
c24bd2d615 | |||
99b50713ce | |||
fa0da8ec3f | |||
125b37b40a | |||
7e88142cdb | |||
1ed322b0c7 | |||
ba21676c2b | |||
de74dbcbac | |||
966d28cf5b | |||
cf9011c1ce | |||
5597c7b802 | |||
4a91d29490 | |||
d772a713a2 | |||
f0bd032cb9 | |||
68ca817fd7 | |||
7fd518a1e5 | |||
4d20715e26 | |||
2d5e28cfc2 | |||
cafa012bca | |||
88ab085846 | |||
7f2a9d99dd | |||
35be1a0d03 | |||
4f65f0379f | |||
06ae4bab43 | |||
9ce49848fd | |||
9d58e804a0 | |||
98a277713b | |||
f473d5c855 | |||
f4a7e0e187 | |||
39b5491c52 | |||
3ad0b7cdd7 | |||
1c759c2f7e | |||
a1cd963683 | |||
c277233855 | |||
0ddcb134a1 | |||
0bc07bf7fc | |||
558cbe62fc | |||
1904bd868d | |||
30633aa4ff | |||
7bfe455b1b | |||
a049542de2 | |||
6a95c8b21a | |||
13fbcbab9a | |||
78abe1ed8f | |||
2d19c57314 | |||
a1d77faa8d | |||
9de4d3172f | |||
a5ac2c3dfe | |||
06bc838e27 | |||
db70ad5aa0 | |||
6b9343371a | |||
e597bea35d | |||
237cb88d9d | |||
7e9e0f0729 | |||
87bf174bb8 | |||
7da1cfdd45 | |||
47cac7e71c | |||
f5df53f781 | |||
f16f6b808e | |||
cd28953324 | |||
da0e2ddb46 | |||
71ddf7ecf7 | |||
035a411800 | |||
fc0cff5a0c | |||
425160c390 | |||
75036f2418 | |||
f18157170b | |||
61e0ce4b97 | |||
25e3562300 | |||
5f92801860 | |||
8797134903 | |||
ad88f369bc | |||
c03877aa58 | |||
36ef520cf2 | |||
d1183c00af | |||
58451858fd | |||
4b44ce4482 | |||
1967389fdc | |||
bd913d83e1 | |||
c20574aa3b | |||
518bcc6527 | |||
ad8feafa5c | |||
5ac94667f9 | |||
4dcfdedb14 | |||
f76ba96613 | |||
6fdbaf9529 | |||
8ac7b06d68 | |||
4f63d0bb32 | |||
b143962dac | |||
9656828700 | |||
e680ec8664 | |||
b40b0397d7 | |||
932106d671 | |||
6260785b15 | |||
58a8b782c6 | |||
6f658fab35 | |||
e7fb5c5bc0 | |||
9442d4f6ee | |||
e542aa64ad | |||
5a4e1302f1 | |||
bbdf8ebad8 | |||
91463bcac0 | |||
23f1852337 | |||
edc4465d15 | |||
40e30defb3 | |||
478a5abff2 | |||
c00d5e8894 | |||
ff3b2314bf | |||
76906b04ee | |||
ee3fb40171 | |||
d13ab3106e | |||
f04d4d531a | |||
55b7afc023 | |||
5a033e7f12 | |||
8979e6e2a4 | |||
faaf7648a8 | |||
72db4e12cd | |||
62194271c0 | |||
087a2d0d6d | |||
57213c007f | |||
69d91413fc | |||
8cbaa83206 | |||
fa3419c7cc | |||
c9362b8802 | |||
cae269d4d6 | |||
1d7e96f3a4 | |||
8fabc142f2 | |||
95aa190f5f | |||
17116ecd02 | |||
83aeec51dc | |||
1fd6721d33 | |||
5782379897 | |||
1ccfae7552 | |||
31dbed7a1f | |||
b8dd642dc5 | |||
5326b3b81f | |||
b5d5e63486 | |||
f41a53c463 | |||
98a5c89d6b | |||
1a9756a86e | |||
01bb853d22 | |||
224bf37e68 | |||
14998bf952 | |||
60222b3948 | |||
e9a5b7e9af | |||
fec755dc25 | |||
60c098a5af | |||
881b5f4efd | |||
9c8f045db8 | |||
d06b24674f | |||
7299c4e96a | |||
beaf4194c2 | |||
877715aa22 | |||
a16a795300 | |||
7de7462548 | |||
3effb4c80a | |||
02d59cb047 | |||
6968feac7e | |||
c38e1ce43b | |||
efbdd08187 | |||
fcd88f8c3f | |||
546455eedc | |||
70bcfe9a9a | |||
0150cb2918 | |||
5c5b7047a0 | |||
b0c9d55658 | |||
c7e27c0080 | |||
28800625e4 | |||
666b3f2dc5 | |||
95cc859c9a | |||
e8f0b3d8dc | |||
7bfb4a9518 | |||
3f502eeb64 | |||
4dcd7bd5ce | |||
6821cf3707 | |||
8a68d025b5 | |||
6bc11ec727 | |||
b8daf9b9b7 | |||
63ef79f441 | |||
f83b5d8d07 | |||
cac52f739f | |||
02045dfd07 | |||
1a86fc5c29 | |||
ba82f322af | |||
2a40d8207e | |||
62a06281ab | |||
3a2e83682e | |||
b28496c7b6 | |||
bea5e02c2e | |||
de3eec47a0 | |||
08449b2468 | |||
84794ce862 | |||
21fc375ce0 | |||
f73cd9b6cf | |||
f674017610 | |||
48852b00f8 | |||
28480b1ee5 | |||
5916f438ca | |||
957a9f9c15 | |||
efafa6bf68 | |||
e88d53760d | |||
ccb56485d8 | |||
c91e51a445 | |||
1a6ab2d020 | |||
6dd96939c4 | |||
06aee5a899 | |||
f56302769c | |||
3e1d7e5e9b | |||
ccbf64678e | |||
a6ea47e1b0 | |||
dcddca16f3 | |||
25668a8d83 | |||
8068adb1bf | |||
c79af5b085 | |||
08057672d9 | |||
542c8b9f32 | |||
0cad44cd4e | |||
549afeacee | |||
e79322f670 | |||
10e7f72eab | |||
7c2ecd3340 | |||
29aaf625c7 | |||
eee832ce49 | |||
d8f3f87760 | |||
2df11b693c | |||
3805a27cd5 | |||
d09bd35646 | |||
5bbdcd9fb6 | |||
437a3444ec | |||
77e0633c38 | |||
ad5794c223 | |||
fdec5f7b6e | |||
|
fd1d32d314 | ||
0ca1a12cd4 | |||
6d456e5a7a | |||
07b6b5fca2 | |||
15579ef3cb | |||
d9dd2a59e7 | |||
d45d91340f | |||
039ff6ba42 | |||
81c6875382 | |||
1bbe078799 | |||
17082eb271 | |||
9e5e775c71 | |||
bf63bdb8ea | |||
a0c412bd66 | |||
d40ff7d14d | |||
85609be4b6 | |||
83fb6aaec3 | |||
22f546f14d | |||
54376ae84a | |||
2ac0f8fc52 | |||
bca7012d10 | |||
00b11da712 | |||
b438b1b1f1 | |||
b360335655 | |||
2cba8936c4 | |||
f8451c5514 | |||
462a9446bd | |||
a0a0d92169 | |||
7fb34c1b4a | |||
2ca345df8c | |||
2d53671fdf | |||
03b810ec75 | |||
3f4b88a2c6 | |||
0ad54c25a7 | |||
d97949cc3a | |||
b1a1824050 | |||
75fe994e95 | |||
9d020dd241 | |||
cbb2bfa73d | |||
0404950693 | |||
9948df0541 | |||
c53ab513a0 | |||
9e76f88c8f | |||
8da2a7d27a | |||
025a5a0db7 | |||
5fc391e5c0 | |||
5357486659 | |||
d8774ba7f7 | |||
1e7e304b43 | |||
17b7b09333 | |||
5f4b853764 | |||
6d0f2a6c36 | |||
ccdbf2efde | |||
e02eebba99 | |||
7d06fb5617 | |||
66053df28f | |||
6920db4c88 | |||
e37b2492e9 | |||
2435a765f0 | |||
f88e4181f1 | |||
5d2a1b0c17 | |||
1fff514e4e | |||
2f14e0f054 | |||
0c049a17f6 | |||
1390f96fdc | |||
1d7a3f5125 | |||
a9ebc52514 | |||
ca9eaf0249 | |||
7601746093 | |||
42f83170f7 | |||
9722cc06ff | |||
3d063a8ec2 | |||
b6719846bf | |||
9ed4187593 | |||
8c0bbe05ee | |||
c8b6d5053e | |||
4cf339cfc4 | |||
6fe23f270a | |||
c85fe76a48 | |||
4508b6d908 | |||
c74a70ce13 | |||
f5e88e44bf | |||
f11f92ba55 | |||
14d0173bd3 | |||
5b56c73528 |
@@ -16,9 +16,11 @@ boost_asio_has_std_string_view
|
||||
bugprone
|
||||
cflags
|
||||
chrono
|
||||
clsid
|
||||
cmake_current_source_dir
|
||||
coinit_apartmentthreaded
|
||||
comdlg32
|
||||
conin$
|
||||
cppcoreguidelines
|
||||
cppdbg
|
||||
cppflags
|
||||
@@ -27,7 +29,9 @@ cpptrace
|
||||
cppvsdbg
|
||||
create_notraverse
|
||||
crypto_aead_xchacha20poly1305_ietf_npubbytes
|
||||
cspan
|
||||
cstdint
|
||||
curl_zstd
|
||||
curle_couldnt_resolve_host
|
||||
curlopt_aws_sigv4
|
||||
cxxflags
|
||||
@@ -54,6 +58,7 @@ dcurl_staticlib
|
||||
dcurl_use_libpsl
|
||||
dcurl_use_libssh2
|
||||
dcurl_zlib
|
||||
dcurl_zstd
|
||||
ddebug
|
||||
decmult_gen_prec_bits
|
||||
decmult_window_size
|
||||
@@ -86,6 +91,7 @@ dspdlog_fmt_external
|
||||
dthreads_prefer_pthread_flag
|
||||
dunw_local_only
|
||||
duse_libidn2
|
||||
duse_nghttp2
|
||||
duuid_build_tests
|
||||
dwith_benchmark
|
||||
dwith_gflags
|
||||
@@ -97,6 +103,7 @@ endforeach
|
||||
endfunction
|
||||
eventlib
|
||||
expect_streq
|
||||
fallocate
|
||||
fallocate_impl
|
||||
fext
|
||||
fgetattr
|
||||
@@ -105,7 +112,10 @@ filebase
|
||||
flac_version
|
||||
flag_nopath
|
||||
flarge
|
||||
folderid
|
||||
fontconfig_version
|
||||
foob
|
||||
fooba
|
||||
freetype2_version
|
||||
fsetattr_x
|
||||
fusermount
|
||||
@@ -118,11 +128,14 @@ gpath
|
||||
gtest_version
|
||||
has_setxattr
|
||||
hkey
|
||||
hresult
|
||||
httpapi
|
||||
httplib
|
||||
hwnd
|
||||
icudata
|
||||
icui18n
|
||||
icuuc
|
||||
inproc
|
||||
iostreams
|
||||
iphlpapi
|
||||
ipstream
|
||||
@@ -148,6 +161,7 @@ libvlc
|
||||
linkflags
|
||||
localappdata
|
||||
lpbyte
|
||||
lpthread
|
||||
lptr
|
||||
lpwstr
|
||||
markdownlint
|
||||
@@ -158,11 +172,13 @@ msvcr120
|
||||
msys2
|
||||
mtune
|
||||
musl-libc
|
||||
mwindows
|
||||
nana
|
||||
ncrypt
|
||||
nlohmann
|
||||
nlohmann_json
|
||||
nmakeprg
|
||||
noappledouble
|
||||
nohup
|
||||
nominmax
|
||||
ntstatus
|
||||
@@ -171,6 +187,8 @@ nuspell_version
|
||||
oleaut32
|
||||
openal_version
|
||||
openssldir
|
||||
osascript
|
||||
osxfuse
|
||||
pistream
|
||||
pkgconfig
|
||||
plarge_integer
|
||||
@@ -180,12 +198,15 @@ project_enable_fontconfig
|
||||
project_enable_gtkmm
|
||||
project_enable_libdsm
|
||||
project_enable_nana
|
||||
project_macos_icns_name
|
||||
propgrid
|
||||
psecurity_descriptor
|
||||
pthreads
|
||||
pugi
|
||||
pugixml_project
|
||||
puint32
|
||||
pvoid
|
||||
pwhash
|
||||
pwstr
|
||||
rdrw
|
||||
remote_winfsp
|
||||
@@ -193,13 +214,16 @@ renterd
|
||||
richtext
|
||||
rocksdb_library
|
||||
rpcrt4
|
||||
runas
|
||||
s_igid
|
||||
s_isvtx
|
||||
s_iuid
|
||||
sddl_revision_1
|
||||
secp256k1
|
||||
secur32
|
||||
see_mask_nocloseprocess
|
||||
sfml_project
|
||||
shellexecuteinfoa
|
||||
shlwapi
|
||||
sigchld
|
||||
skynet
|
||||
@@ -207,11 +231,14 @@ source_subdir
|
||||
spdlog
|
||||
spdlog_project
|
||||
st_ctim
|
||||
startf_useshowwindow
|
||||
startupinfoa
|
||||
static-libgcc
|
||||
static-libstdc++
|
||||
stbuf
|
||||
stduuid_project
|
||||
strequal
|
||||
sw_shownoactivate
|
||||
ularge_integer
|
||||
uring
|
||||
url
|
||||
@@ -230,6 +257,7 @@ wextra
|
||||
wfloat
|
||||
wformat=2
|
||||
winfsp
|
||||
winfsp_drive
|
||||
winhttp
|
||||
wininet
|
||||
winspool
|
||||
|
3
.gitattributes
vendored
@@ -1,4 +1,5 @@
|
||||
*.tgz filter=lfs diff=lfs merge=lfs -text
|
||||
*.msi filter=lfs diff=lfs merge=lfs -text
|
||||
*.tar.gz filter=lfs diff=lfs merge=lfs -text
|
||||
*.tar.xz filter=lfs diff=lfs merge=lfs -text
|
||||
*.tgz filter=lfs diff=lfs merge=lfs -text
|
||||
*.zip filter=lfs diff=lfs merge=lfs -text
|
||||
|
13
.gitignore
vendored
@@ -1,13 +1,16 @@
|
||||
.DS_Store
|
||||
.cache/
|
||||
.vs/
|
||||
Info.plist
|
||||
build*/
|
||||
compile_commands.json
|
||||
cspell.json
|
||||
.vs/
|
||||
support/Dockerfile
|
||||
dist/
|
||||
deps/
|
||||
dist/
|
||||
override.sh
|
||||
repertory.iss
|
||||
scripts/cleanup.cmd
|
||||
scripts/cleanup.sh
|
||||
version.rc
|
||||
support/Dockerfile
|
||||
version.cpp
|
||||
override.sh
|
||||
version.rc
|
||||
|
101
.jenkins_builds
@@ -5,57 +5,88 @@ pipeline {
|
||||
|
||||
environment {
|
||||
DEVELOPER_PRIVATE_KEY = "/.ci/repertory/cert/developer.priv"
|
||||
DEVELOPER_PUBLIC_KEY = "/.ci/repertory/cert/developer.pub"
|
||||
PROJECT_TEST_CONFIG_DIR = "/.ci/repertory/test_config"
|
||||
DEVELOPER_PUBLIC_KEY = "/.ci/repertory/cert/developer.pub"
|
||||
PROJECT_TEST_CONFIG_DIR = "/.ci/repertory/test"
|
||||
}
|
||||
|
||||
options {
|
||||
disableConcurrentBuilds()
|
||||
retry(2)
|
||||
skipDefaultCheckout()
|
||||
timestamps()
|
||||
}
|
||||
|
||||
stages {
|
||||
stage('linux_x86_64') {
|
||||
stage('Build • Test • Deliver') {
|
||||
agent any
|
||||
|
||||
steps {
|
||||
retry(2) {
|
||||
sleep time: 5, unit: 'SECONDS'
|
||||
sh 'scripts/make_unix.sh'
|
||||
stages {
|
||||
stage('Checkout') {
|
||||
steps {
|
||||
script {
|
||||
int maxAttempts = 6
|
||||
int baseDelay = 10
|
||||
for (int attempt = 1; attempt <= maxAttempts; attempt++) {
|
||||
try {
|
||||
checkout scm
|
||||
break
|
||||
} catch (err) {
|
||||
if (attempt == maxAttempts) { throw err }
|
||||
int waitSec = baseDelay * (1 << (attempt - 1))
|
||||
echo "Checkout failed (attempt ${attempt}/${maxAttempts}). Waiting ${waitSec}s before retry..."
|
||||
sleep time: waitSec, unit: 'SECONDS'
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
stage('mingw64') {
|
||||
agent any
|
||||
|
||||
steps {
|
||||
retry(2) {
|
||||
sleep time: 5, unit: 'SECONDS'
|
||||
sh 'scripts/make_win32.sh'
|
||||
stage('linux_x86_64') {
|
||||
steps {
|
||||
script { retryWithBackoff(2, 5) { sh 'scripts/make_unix.sh' } }
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
stage('linux_aarch64') {
|
||||
agent any
|
||||
|
||||
steps {
|
||||
retry(2) {
|
||||
sleep time: 5, unit: 'SECONDS'
|
||||
sh 'scripts/make_unix.sh aarch64'
|
||||
stage('mingw64') {
|
||||
steps {
|
||||
script { retryWithBackoff(2, 5) { sh 'scripts/make_win32.sh' } }
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
stage('deliver') {
|
||||
agent any
|
||||
stage('linux_aarch64') {
|
||||
steps {
|
||||
script { retryWithBackoff(2, 5) { sh 'scripts/make_unix.sh aarch64' } }
|
||||
}
|
||||
}
|
||||
|
||||
steps {
|
||||
sh 'scripts/deliver.sh /mnt/repertory "" "" "" "" 1 1'
|
||||
sh 'scripts/deliver.sh /mnt/repertory "" aarch64'
|
||||
sh 'scripts/deliver.sh /mnt/repertory'
|
||||
stage('linux_x86_64_test') {
|
||||
steps {
|
||||
script { retryWithBackoff(2, 5) { sh 'scripts/run_tests.sh' } }
|
||||
}
|
||||
}
|
||||
|
||||
stage('deliver') {
|
||||
steps {
|
||||
script {
|
||||
retryWithBackoff(3, 10) { sh 'scripts/deliver.sh /mnt/repertory "" "" "" "" 1 1' }
|
||||
retryWithBackoff(3, 10) { sh 'scripts/deliver.sh /mnt/repertory "" aarch64' }
|
||||
retryWithBackoff(3, 10) { sh 'scripts/deliver.sh /mnt/repertory' }
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
def retryWithBackoff(int maxAttempts, int baseDelaySeconds, Closure body) {
|
||||
for (int attempt = 1; attempt <= maxAttempts; attempt++) {
|
||||
try {
|
||||
body()
|
||||
return
|
||||
} catch (err) {
|
||||
if (attempt == maxAttempts) { throw err }
|
||||
int waitSec = baseDelaySeconds * (1 << (attempt - 1))
|
||||
echo "Step failed (attempt ${attempt}/${maxAttempts}). Waiting ${waitSec}s before retry..."
|
||||
sleep time: waitSec, unit: 'SECONDS'
|
||||
}
|
||||
}
|
||||
}
|
||||
|
79
.jenkins_macos
Normal file
@@ -0,0 +1,79 @@
|
||||
#!groovy
|
||||
|
||||
pipeline {
|
||||
agent none
|
||||
|
||||
environment {
|
||||
DEVELOPER_PRIVATE_KEY = "${env.HOME}/.ci/repertory/cert/developer.priv"
|
||||
DEVELOPER_PUBLIC_KEY = "${env.HOME}/.ci/repertory/cert/developer.pub"
|
||||
PROJECT_TEST_CONFIG_DIR = "${env.HOME}/.ci/repertory/test"
|
||||
}
|
||||
|
||||
options {
|
||||
disableConcurrentBuilds()
|
||||
skipDefaultCheckout()
|
||||
timestamps()
|
||||
}
|
||||
|
||||
stages {
|
||||
stage('Build • Test • Deliver') {
|
||||
agent any
|
||||
stages {
|
||||
stage('Checkout') {
|
||||
steps {
|
||||
script {
|
||||
int maxAttempts = 6
|
||||
int baseDelay = 10
|
||||
for (int attempt = 1; attempt <= maxAttempts; attempt++) {
|
||||
try {
|
||||
checkout scm
|
||||
break
|
||||
} catch (err) {
|
||||
if (attempt == maxAttempts) { throw err }
|
||||
int waitSec = baseDelay * (1 << (attempt - 1))
|
||||
echo "Checkout failed (attempt ${attempt}/${maxAttempts}). Waiting ${waitSec}s before retry..."
|
||||
sleep time: waitSec, unit: 'SECONDS'
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
stage('darwin_aarch64') {
|
||||
steps { script { retryWithBackoff(2, 5) { sh 'scripts/make_unix.sh aarch64' } } }
|
||||
}
|
||||
|
||||
stage('darwin_x86_64') {
|
||||
steps { script { retryWithBackoff(2, 5) { sh 'scripts/make_unix.sh x86_64' } } }
|
||||
}
|
||||
|
||||
stage('darwin_aarch64_test') {
|
||||
steps { script { retryWithBackoff(2, 5) { sh 'scripts/run_tests.sh aarch64' } } }
|
||||
}
|
||||
|
||||
stage('deliver') {
|
||||
steps {
|
||||
script {
|
||||
retryWithBackoff(3, 10) { sh "scripts/deliver.sh ${env.HOME}/mnt/repertory '' aarch64" }
|
||||
retryWithBackoff(3, 10) { sh "scripts/deliver.sh ${env.HOME}/mnt/repertory '' x86_64" }
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
def retryWithBackoff(int maxAttempts, int baseDelaySeconds, Closure body) {
|
||||
for (int attempt = 1; attempt <= maxAttempts; attempt++) {
|
||||
try {
|
||||
body()
|
||||
return
|
||||
} catch (err) {
|
||||
if (attempt == maxAttempts) { throw err }
|
||||
int waitSec = baseDelaySeconds * (1 << (attempt - 1))
|
||||
echo "Step failed (attempt ${attempt}/${maxAttempts}). Waiting ${waitSec}s before retry..."
|
||||
sleep time: waitSec, unit: 'SECONDS'
|
||||
}
|
||||
}
|
||||
}
|
68
.jenkins_msys2
Normal file
@@ -0,0 +1,68 @@
|
||||
#!groovy
|
||||
|
||||
pipeline {
|
||||
agent none
|
||||
|
||||
environment {
|
||||
PROJECT_TEST_CONFIG_DIR = "c:\\.ci\\repertory\\test"
|
||||
}
|
||||
|
||||
options {
|
||||
disableConcurrentBuilds()
|
||||
skipDefaultCheckout()
|
||||
timestamps()
|
||||
}
|
||||
|
||||
stages {
|
||||
stage('Build • Test') {
|
||||
agent any
|
||||
stages {
|
||||
stage('Checkout') {
|
||||
steps {
|
||||
script {
|
||||
int maxAttempts = 6
|
||||
int baseDelay = 10
|
||||
for (int attempt = 1; attempt <= maxAttempts; attempt++) {
|
||||
try {
|
||||
checkout scm
|
||||
break
|
||||
} catch (err) {
|
||||
if (attempt == maxAttempts) { throw err }
|
||||
int waitSec = baseDelay * (1 << (attempt - 1))
|
||||
echo "Checkout failed (attempt ${attempt}/${maxAttempts}). Waiting ${waitSec}s before retry..."
|
||||
sleep time: waitSec, unit: 'SECONDS'
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
stage('msys2') {
|
||||
steps {
|
||||
script { retryWithBackoff(2, 5) { sh 'scripts\\make_win32.cmd' } }
|
||||
}
|
||||
}
|
||||
|
||||
stage('msys2_test') {
|
||||
steps {
|
||||
script { retryWithBackoff(2, 5) { sh 'scripts\\run_tests.cmd' } }
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
def retryWithBackoff(int maxAttempts, int baseDelaySeconds, Closure body) {
|
||||
for (int attempt = 1; attempt <= maxAttempts; attempt++) {
|
||||
try {
|
||||
body()
|
||||
return
|
||||
} catch (err) {
|
||||
if (attempt == maxAttempts) { throw err }
|
||||
int waitSec = baseDelaySeconds * (1 << (attempt - 1))
|
||||
echo "Step failed (attempt ${attempt}/${maxAttempts}). Waiting ${waitSec}s before retry..."
|
||||
sleep time: waitSec, unit: 'SECONDS'
|
||||
}
|
||||
}
|
||||
}
|
24
CHANGELOG.md
@@ -1,14 +1,38 @@
|
||||
# Changelog
|
||||
|
||||
## v2.1.0-rc
|
||||
|
||||
### BREAKING CHANGES
|
||||
|
||||
* Remote mounts must be upgraded to v2.1.0+ to support new authentication scheme
|
||||
|
||||
### Issues
|
||||
|
||||
* \#33 Complete initial v2.0 documentation
|
||||
* \#34 Add macOS support
|
||||
* \#38 Pinning a file should automatically initiate a download to cache
|
||||
* \#51 [ui] UI console window should close after launch
|
||||
* \#52 [ui] Add auto-mount on first launch functionality
|
||||
* \#53 Create Windows installer
|
||||
* \#54 Remove 'default' as initial bucket name for Sia
|
||||
* \#58 Create macOS bundle for simplified installation
|
||||
* \#59 [bug] [ui] UI is hanging after launching repertory mount in background
|
||||
* \#60 Implement secure key via KDF for transparent data encryption/decryption
|
||||
* \#61 [ui] UI theme should match repertory blue
|
||||
|
||||
## v2.0.7-release
|
||||
|
||||
<!-- markdownlint-disable-next-line -->
|
||||
### Issues
|
||||
|
||||
* \#55 [bug] UI is unable to launch `repertory.exe` on Windows when absolute path contains spaces
|
||||
* \#57 [bug] Directory entries . and .. are incorrectly being reported as files in Linux remote mounts
|
||||
|
||||
## v2.0.6-release
|
||||
|
||||
<!-- markdownlint-disable-next-line -->
|
||||
### Issues
|
||||
|
||||
* \#42 [bug] Remote mount directory listing on Windows connected to Linux is failing
|
||||
* \#43 [bug] Directories are not importing properly for Sia
|
||||
* \#44 [bug] Windows-to-Linux remote mount ignores `CREATE_NEW`
|
||||
|
@@ -51,6 +51,10 @@ if(PROJECT_IS_ARM64)
|
||||
add_definitions(-DPROJECT_IS_ARM64)
|
||||
endif()
|
||||
|
||||
if(PROJECT_IS_DARWIN)
|
||||
add_definitions(-DPROJECT_IS_DARWIN)
|
||||
endif()
|
||||
|
||||
if(PROJECT_IS_MINGW)
|
||||
option(PROJECT_ENABLE_WIN32_LONG_PATH_NAMES "Enable path sizes of 32767 characters on Windows" OFF)
|
||||
if(PROJECT_ENABLE_WIN32_LONG_PATH_NAMES)
|
||||
@@ -115,6 +119,17 @@ if(PROJECT_BUILD)
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/${PROJECT_NAME}/version.cpp
|
||||
@ONLY
|
||||
)
|
||||
|
||||
if (EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/${PROJECT_NAME}.iss.in")
|
||||
configure_file(
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/${PROJECT_NAME}.iss.in
|
||||
${PROJECT_DIST_DIR}/../${PROJECT_NAME}.iss
|
||||
@ONLY
|
||||
)
|
||||
endif()
|
||||
|
||||
find_package(ICU REQUIRED COMPONENTS uc i18n io)
|
||||
link_libraries(ICU::uc ICU::i18n ICU::io)
|
||||
else()
|
||||
message(STATUS "-=[CMake Settings]=-")
|
||||
message(STATUS " C standard: ${CMAKE_C_STANDARD}")
|
||||
@@ -170,9 +185,11 @@ endif()
|
||||
-DPROJECT_INTERFACE=1
|
||||
-DPROJECT_IS_ALPINE=${PROJECT_IS_ALPINE}
|
||||
-DPROJECT_IS_ARM64=${PROJECT_IS_ARM64}
|
||||
-DPROJECT_IS_DARWIN=${PROJECT_IS_DARWIN}
|
||||
-DPROJECT_IS_MINGW=${PROJECT_IS_MINGW}
|
||||
-DPROJECT_IS_MINGW_UNIX=${PROJECT_IS_MINGW_UNIX}
|
||||
-DPROJECT_MAJOR_VERSION=${PROJECT_MAJOR_VERSION}
|
||||
-DPROJECT_MACOS_ICNS_NAME=${PROJECT_MACOS_ICNS_NAME}
|
||||
-DPROJECT_MINOR_VERSION=${PROJECT_MINOR_VERSION}
|
||||
-DPROJECT_NAME=${PROJECT_NAME}
|
||||
-DPROJECT_RELEASE_ITER=${PROJECT_RELEASE_ITER}
|
||||
|
847
README.md
@@ -1,153 +1,347 @@
|
||||
# Repertory
|
||||
|
||||
Repertory allows you to mount S3 and Sia via FUSE on Linux or via WinFSP
|
||||
on Windows.
|
||||
Repertory allows you to mount **S3** and **Sia** storage as local drives using:
|
||||
|
||||
## Contents
|
||||
- **FUSE** (Linux/macOS)
|
||||
- **WinFSP** (Windows)
|
||||
|
||||
1. [Details and Features](#details-and-features)
|
||||
2. [Minimum Requirements](#minimum-requirements)
|
||||
1. [Supported Operating Systems](#supported-operating-systems)
|
||||
3. [GUI](#gui)
|
||||
4. [Usage](#usage)
|
||||
1. [Important Options](#important-options)
|
||||
2. [Sia](#sia)
|
||||
* [Sia Initial Configuration](#sia-initial-configuration)
|
||||
* [Sia Mounting](#sia-mounting)
|
||||
* [Sia Configuration File](#sia-configuration-file)
|
||||
3. [S3](#s3)
|
||||
* [S3 Initial Configuration](#s3-initial-configuration)
|
||||
* [S3 Mounting](#s3-mounting)
|
||||
* [S3 Configuration File](#s3-configuration-file)
|
||||
5. [Data Directories](#data-directories)
|
||||
1. [Linux Directories](#linux-directories)
|
||||
2. [Windows Directories](#windows-directories)
|
||||
6. [Remote Mounting](#remote-mounting)
|
||||
1. [Server Setup](#server-setup)
|
||||
* [Remote Mount Configuration File Section](#remote-mount-configuration-file-section)
|
||||
2. [Client Setup](#client-setup)
|
||||
* [Client Remote Mounting](#client-remote-mounting)
|
||||
* [Remote Mount Configuration File](#remote-mount-configuration-file)
|
||||
7. [Compiling](#compiling)
|
||||
1. [Linux Compilation](#linux-compilation)
|
||||
2. [Windows Setup](#windows-compilation)
|
||||
8. [Credits](#credits)
|
||||
9. [Developer Public Key](#developer-public-key)
|
||||
10. [Consult the Wiki for additional information](https://git.fifthgrid.com/BlockStorage/repertory/wiki)
|
||||
It supports:
|
||||
|
||||
## Details and Features
|
||||
- Local mounts
|
||||
- Remote encrypted mounts between systems
|
||||
- Optional file name and data encryption using `XChaCha20-Poly1305` and `Argon2id` for key generation
|
||||
|
||||
* Optimized for [Plex Media Server](https://www.plex.tv/)
|
||||
* Remote mounting of `repertory` instances on Linux and Windows
|
||||
* Securely share your mounts over TCP/IP via `XChaCha20-Poly1305` with other systems on your network or over the internet.
|
||||
* Cross-platform support (Linux 64-bit, Linux arm64/aarch64, Windows 64-bit)
|
||||
* Optionally encrypt file names and file data via `XChaCha20-Poly1305` in S3 mounts
|
||||
---
|
||||
|
||||
## Minimum Requirements
|
||||
## 📖 Contents
|
||||
|
||||
* [Sia renterd](https://github.com/SiaFoundation/renterd/releases) v2.0.0+ for Sia support
|
||||
* Linux requires `fusermount3`; otherwise, `repertory` must be manually compiled with `libfuse2` support
|
||||
* Windows requires the following dependencies to be installed:
|
||||
* [WinFSP 2025](https://github.com/winfsp/winfsp/releases/download/v2.1/winfsp-2.1.25156.msi)
|
||||
1. [Quick Start (Sia Example)](#-quick-start-sia-example)
|
||||
2. [Details & Features](#-details-and-features)
|
||||
3. [Minimum Requirements](#-minimum-requirements)
|
||||
- [Supported Operating Systems](#supported-operating-systems)
|
||||
4. [Data Directories](#-data-directories)
|
||||
5. [GUI](#-gui)
|
||||
6. [Usage](#-usage)
|
||||
- [Important Options](#important-options)
|
||||
- [Unmounting](#unmounting)
|
||||
7. [Sia Setup](#-sia)
|
||||
- [Sia Initial Configuration](#sia-initial-configuration)
|
||||
- [Sia Mounting](#sia-mounting)
|
||||
- [Sia Configuration File](#sia-configuration-file)
|
||||
8. [S3 Setup](#-s3)
|
||||
- [S3 Initial Configuration](#s3-initial-configuration)
|
||||
- [S3 Mounting](#s3-mounting)
|
||||
- [S3 Configuration File](#s3-configuration-file)
|
||||
9. [Remote Mounting](#-remote-mounting)
|
||||
- [Server Setup](#server-setup)
|
||||
- [Client Setup](#client-setup)
|
||||
- [Remote Mount Configuration File](#remote-mount-configuration-file)
|
||||
10. [Compiling from Source](#-compiling)
|
||||
- [Linux Compilation](#linux-compilation)
|
||||
- [macOS Compilation](#macos-compilation)
|
||||
- [Windows Compilation](#windows-compilation)
|
||||
11. [Credits](#-credits)
|
||||
12. [Developer Public Key](#-developer-public-key)
|
||||
13. [Consult the Wiki for additional information](https://git.fifthgrid.com/BlockStorage/repertory/wiki)
|
||||
|
||||
---
|
||||
|
||||
## 🚀 Quick Start (Sia Example)
|
||||
|
||||
> 💡 Want to mount S3 instead?
|
||||
> Skip ahead to [S3 Setup](#-s3) — the process is almost identical.
|
||||
|
||||
This example mounts a Sia bucket from a running [renterd](https://github.com/SiaFoundation/renterd) instance.
|
||||
|
||||
---
|
||||
|
||||
### 1. Install dependencies
|
||||
|
||||
#### Linux
|
||||
|
||||
``` shell
|
||||
sudo apt install fuse3 # Debian/Ubuntu
|
||||
# or
|
||||
sudo dnf install fuse3 # Fedora
|
||||
```
|
||||
|
||||
#### macOS
|
||||
|
||||
- Install [macFUSE 4.10.2](https://github.com/macfuse/macfuse/releases/download/macfuse-4.10.2/macfuse-4.10.2.dmg)
|
||||
|
||||
#### Windows
|
||||
|
||||
- Install [WinFSP 2025](https://github.com/winfsp/winfsp/releases/download/v2.1/winfsp-2.1.25156.msi)
|
||||
|
||||
---
|
||||
|
||||
### 2. Configure
|
||||
|
||||
Replace placeholders with your actual values:
|
||||
|
||||
``` shell
|
||||
repertory --name mybucket -set HostConfig.ApiPassword "<renterd api password>"
|
||||
repertory --name mybucket -set SiaConfig.Bucket "<bucket name>"
|
||||
```
|
||||
|
||||
Optional:
|
||||
|
||||
``` shell
|
||||
# If renterd is not running locally
|
||||
repertory --name mybucket -set HostConfig.HostNameOrIp "<hostname or IP>"
|
||||
|
||||
# If renterd uses a non-default port (default 9980)
|
||||
repertory --name mybucket -set HostConfig.ApiPort <port>
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### 3. Mount
|
||||
|
||||
<!-- markdownlint-disable-next-line -->
|
||||
#### Linux
|
||||
|
||||
``` shell
|
||||
repertory --name mybucket /mnt/mybucket
|
||||
```
|
||||
|
||||
<!-- markdownlint-disable-next-line -->
|
||||
#### macOS
|
||||
|
||||
``` shell
|
||||
repertory --name mybucket /Volumes/mybucket
|
||||
```
|
||||
|
||||
<!-- markdownlint-disable-next-line -->
|
||||
#### Windows
|
||||
|
||||
``` shell
|
||||
repertory --name mybucket t:
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### 4. Unmount
|
||||
|
||||
``` shell
|
||||
repertory --name mybucket --unmount
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## ✨ Details and Features
|
||||
|
||||
- **Optimized for [Plex Media Server](https://www.plex.tv/).**
|
||||
- Remote mounting of `repertory` instances between Linux, macOS, and/or Windows.
|
||||
- Securely share your mounts over TCP/IP via `XChaCha20-Poly1305` with other systems on your network or over the internet.
|
||||
- Cross-platform support (Linux, macOS, and Windows).
|
||||
- Optionally encrypt file names and file data via `XChaCha20-Poly1305` in S3 mounts.
|
||||
|
||||
---
|
||||
|
||||
## 📋 Minimum Requirements
|
||||
|
||||
- **Sia:** [renterd](https://github.com/SiaFoundation/renterd/releases) v2.0.0+ for Sia support
|
||||
- **Linux:** requires `fusermount3`; otherwise, `repertory` must be manually compiled with `libfuse2` support
|
||||
- **macOS:** requires:
|
||||
- [macFUSE 4.10.2](https://github.com/macfuse/macfuse/releases/download/macfuse-4.10.2/macfuse-4.10.2.dmg)
|
||||
- **Windows:** requires:
|
||||
- [WinFSP 2025](https://github.com/winfsp/winfsp/releases/download/v2.1/winfsp-2.1.25156.msi)
|
||||
|
||||
### Supported Operating Systems
|
||||
|
||||
Only 64-bit operating systems are supported
|
||||
Only **64-bit operating systems** are supported:
|
||||
|
||||
* Linux `arm64/aarch64`
|
||||
* Linux `amd64`
|
||||
* Windows 64-bit 10, 11
|
||||
- Linux `arm64/aarch64`
|
||||
- Linux `x86_64`
|
||||
- macOS `arm64/aarch64`
|
||||
- macOS `x86_64`
|
||||
- Windows `x86_64` 10, 11
|
||||
|
||||
## GUI
|
||||
---
|
||||
|
||||
As of `v2.0.5-rc`, mounts can be managed using the `Repertory Management Portal`.
|
||||
To launch the portal, execute the following command:
|
||||
## 📂 Data Directories
|
||||
|
||||
* `repertory -ui`
|
||||
* The default username is `repertory`
|
||||
* The default password is `repertory`
|
||||
<!-- markdownlint-disable-next-line -->
|
||||
### Linux
|
||||
|
||||
After first launch, `ui.json` will be created in the appropriate data directory.
|
||||
See [Data Directories](#data-directories).
|
||||
You should modify this file directly or use the portal to change the default
|
||||
username and password.
|
||||
``` shell
|
||||
~/.local/repertory2/s3
|
||||
~/.local/repertory2/sia
|
||||
```
|
||||
|
||||
### Screenshot
|
||||
|
||||
<a href="https://ibb.co/fVyJqnbF"><img src="https://i.ibb.co/fVyJqnbF/repertory-portal.png" alt="repertory-portal" border="0"></a>
|
||||
<!-- markdownlint-disable-next-line -->
|
||||
### Windows
|
||||
|
||||
## Usage
|
||||
``` shell
|
||||
%LOCALAPPDATA%\repertory2\s3
|
||||
%LOCALAPPDATA%\repertory2\sia
|
||||
```
|
||||
|
||||
**IMPORTANT:**
|
||||
It is highly recommended to **exclude** these folders from any anti-virus/anti-malware applications as severe performance issues may arise. Excluding the mounted drive letter is also highly recommended.
|
||||
|
||||
---
|
||||
|
||||
## 🖥 GUI
|
||||
|
||||
As of `v2.0.6-release`, mounts can be managed using the **Repertory Management Portal**.
|
||||
|
||||
Launch the portal:
|
||||
|
||||
``` shell
|
||||
repertory -ui
|
||||
```
|
||||
|
||||
### ⚠️ Security tip
|
||||
|
||||
- Change the default UI credentials on first launch (`ui.json`) or via the portal
|
||||
- Default username: `repertory`
|
||||
- Default password: `repertory`
|
||||
|
||||
After first launch, `ui.json` will be created in the appropriate data directory (see [Data Directories](#-data-directories)). Modify this file directly or use the portal to change the default credentials.
|
||||
|
||||
### Screenshots
|
||||
|
||||
#### Login screen
|
||||
|
||||

|
||||
|
||||
#### Home screen
|
||||
|
||||

|
||||
|
||||
---
|
||||
|
||||
## 🛠 Usage
|
||||
|
||||
### Important Options
|
||||
|
||||
* `--help`
|
||||
* Display all mount utility options
|
||||
- `--help`
|
||||
Display all mount utility options.
|
||||
|
||||
* `-f`
|
||||
* Keep process in foreground on Linux.
|
||||
- `-f`
|
||||
Keep process in foreground on Linux.
|
||||
|
||||
* `--name, -na [name]`
|
||||
* Identifies a unique configuration name to support multiple mounts.
|
||||
* The `--name` option can be set to any valid value allowed as a file name for your filesystem.
|
||||
* For Sia, the bucket name will be set to the same value if it is empty in the configuration file.
|
||||
* If the `--name` option is not specified, `default` will be used.
|
||||
* For S3, the `--name` option is required and does not affect the bucket name.
|
||||
- `--name, -na [name]`
|
||||
Identifies a unique configuration name to support multiple mounts.
|
||||
The `--name` option can be set to any valid value allowed as a file name for your filesystem.
|
||||
**The `--name` option is required.**
|
||||
|
||||
* `-dc`
|
||||
* Display mount configuration
|
||||
* For Sia, `--name` is optional
|
||||
* For S3, the `-s3` option is required along with `--name`
|
||||
- `-dc`
|
||||
Display mount configuration.
|
||||
For Sia, the `--name` option is required.
|
||||
For S3, the `-s3` and `--name` options are required.
|
||||
|
||||
### Sia
|
||||
### Unmounting
|
||||
|
||||
#### Sia Initial Configuration
|
||||
#### Remote
|
||||
|
||||
* Required steps:
|
||||
* Set the appropriate bucket name and `renterd` API password in `repertory` configuration:
|
||||
* To use `default` as the bucket name and configuration name, you only need to set the `renterd` API password:
|
||||
* `repertory -set HostConfig.ApiPassword '<my password>'`
|
||||
* To specify a different bucket name while using `default` as the configuration name:
|
||||
* `repertory -set HostConfig.ApiPassword '<my password>'`
|
||||
* `repertory -set SiaConfig.Bucket '<my bucket>'`
|
||||
* For all other configurations:
|
||||
* `repertory --name '<my config name>' -set HostConfig.ApiPassword '<my password>'`
|
||||
* `repertory --name '<my config name>' -set SiaConfig.Bucket '<my bucket name>'`
|
||||
``` shell
|
||||
repertory -rm 192.168.0.1:20000 --unmount
|
||||
```
|
||||
|
||||
* Optional steps:
|
||||
* Set a user name used during `renterd` basic authentication:
|
||||
* `repertory -set HostConfig.ApiUser '<my user>'`
|
||||
* `repertory --name '<my config name>' -set HostConfig.ApiUser '<my user>'`
|
||||
* Set a custom agent string (default `Sia-Agent`):
|
||||
* `repertory -set HostConfig.AgentString '<my agent>'`
|
||||
* `repertory --name '<my config name>' -set HostConfig.AgentString '<my agent>'`
|
||||
* Set the host name or IP of the `renterd` instance (default `localhost`):
|
||||
* `repertory -set HostConfig.HostNameOrIp '<my host name>'`
|
||||
* `repertory --name '<my config name>' -set HostConfig.HostNameOrIp '<my host name>'`
|
||||
* Set the `renterd` API port (default `9980`):
|
||||
* `repertory -set HostConfig.ApiPort 9981`
|
||||
* `repertory --name '<my config name>' -set HostConfig.ApiPort 9981`
|
||||
#### S3
|
||||
|
||||
* To verify/view all configuration options:
|
||||
* `repertory -dc`
|
||||
* `repertory --name '<my config name>' -dc`
|
||||
* Example:
|
||||
* `repertory --name default -dc`
|
||||
``` shell
|
||||
repertory -s3 --name '<my config name>' --unmount
|
||||
```
|
||||
|
||||
#### Sia Mounting
|
||||
#### Sia
|
||||
|
||||
* Linux:
|
||||
* `repertory /mnt/location`
|
||||
* `repertory --name '<my config name>' /mnt/location`
|
||||
* Example:
|
||||
* `repertory --name default /mnt/location`
|
||||
``` shell
|
||||
repertory --name '<my config name>' --unmount
|
||||
```
|
||||
|
||||
* Windows:
|
||||
* `repertory t:`
|
||||
* `repertory --name '<my config name>' t:`
|
||||
* Example:
|
||||
* `repertory --name default t:`
|
||||
---
|
||||
|
||||
#### Sia Configuration File
|
||||
## 🔒 Security Best Practices
|
||||
|
||||
When enabling **encryption tokens** for S3 or remote mounts:
|
||||
|
||||
- Use a **long, random string**.
|
||||
- Store it **offline** (password manager and an offline backup).
|
||||
- Losing it means **permanent data loss**.
|
||||
|
||||
---
|
||||
|
||||
## ☁️ Sia
|
||||
|
||||
### Sia Initial Configuration
|
||||
|
||||
**Required steps:**
|
||||
|
||||
- Set the appropriate bucket name and `renterd` API password in `repertory` configuration:
|
||||
|
||||
``` shell
|
||||
repertory --name '<my config name>' -set HostConfig.ApiPassword '<my password>'
|
||||
repertory --name '<my config name>' -set SiaConfig.Bucket '<my bucket name>'
|
||||
```
|
||||
|
||||
**Optional steps:**
|
||||
|
||||
- Set a user name used during `renterd` basic authentication:
|
||||
|
||||
``` shell
|
||||
repertory --name '<my config name>' -set HostConfig.ApiUser '<my user>'
|
||||
```
|
||||
|
||||
- Set a custom agent string (default `Sia-Agent`):
|
||||
|
||||
``` shell
|
||||
repertory --name '<my config name>' -set HostConfig.AgentString '<my agent>'
|
||||
```
|
||||
|
||||
- Set the host name or IP of the `renterd` instance (default `localhost`):
|
||||
|
||||
``` shell
|
||||
repertory --name '<my config name>' -set HostConfig.HostNameOrIp '<my host name>'
|
||||
```
|
||||
|
||||
- Set the `renterd` API port (default `9980`):
|
||||
|
||||
``` shell
|
||||
repertory --name '<my config name>' -set HostConfig.ApiPort 9981
|
||||
```
|
||||
|
||||
**Verify/view all configuration options:**
|
||||
|
||||
``` shell
|
||||
repertory --name '<my config name>' -dc
|
||||
# Example:
|
||||
repertory --name my_bucket -dc
|
||||
```
|
||||
|
||||
### Sia Mounting
|
||||
|
||||
<!-- markdownlint-disable-next-line -->
|
||||
#### Linux
|
||||
|
||||
``` shell
|
||||
repertory --name '<my config name>' /mnt/location
|
||||
# Example:
|
||||
repertory --name my_bucket /mnt/location
|
||||
```
|
||||
|
||||
<!-- markdownlint-disable-next-line -->
|
||||
#### macOS
|
||||
|
||||
``` shell
|
||||
repertory --name '<my config name>' /Volumes/mybucket
|
||||
# Example:
|
||||
repertory --name my_bucket /Volumes/mybucket
|
||||
```
|
||||
|
||||
<!-- markdownlint-disable-next-line -->
|
||||
#### Windows
|
||||
|
||||
``` shell
|
||||
repertory --name '<my config name>' t:
|
||||
# Example:
|
||||
repertory --name my_bucket t:
|
||||
```
|
||||
|
||||
### Sia Configuration File
|
||||
|
||||
```json
|
||||
{
|
||||
@@ -187,55 +381,105 @@ username and password.
|
||||
"RetryReadCount": 6,
|
||||
"RingBufferFileSize": 512,
|
||||
"SiaConfig": {
|
||||
"Bucket": "default"
|
||||
"Bucket": "my_bucket"
|
||||
},
|
||||
"TaskWaitMs": 100,
|
||||
"Version": 1
|
||||
}
|
||||
```
|
||||
|
||||
### S3
|
||||
---
|
||||
|
||||
#### S3 Initial Configuration
|
||||
## 🪣 S3
|
||||
|
||||
* Required steps:
|
||||
* Set the appropriate base URL:
|
||||
* `repertory -s3 --name '<my config name>' -set S3Config.URL '<my url>'`
|
||||
* Example:
|
||||
* `repertory -s3 --name minio -set S3Config.URL 'http://localhost:9000'`
|
||||
* Set the appropriate bucket name:
|
||||
* `repertory -s3 --name '<my config name>' -set S3Config.Bucket '<my bucket name>'`
|
||||
* Set the appropriate access key:
|
||||
* `repertory -s3 --name '<my config name>' -set S3Config.AccessKey '<my access key>'`
|
||||
* Set the appropriate secret key:
|
||||
* `repertory -s3 --name '<my config name>' -set S3Config.SecretKey '<my secret key>'`
|
||||
* For Sia and most local S3 gateway instances, enable path style URL's:
|
||||
* `repertory -s3 --name '<my config name>' -set S3Config.UsePathStyle true`
|
||||
### S3 Initial Configuration
|
||||
|
||||
* Optional steps:
|
||||
* Set an appropriate region. Default is set to `any`:
|
||||
* `repertory -s3 --name '<my config name>' -set S3Config.Region '<my region>'`
|
||||
* Enable encrypted file names and file data. Set a strong, random encryption token and be sure to store it in a secure backup location:
|
||||
* `repertory -s3 --name '<my config name>' -set S3Config.EncryptionToken '<my strong password>'`
|
||||
**Required steps:**
|
||||
|
||||
* To verify/view all configuration options:
|
||||
* `repertory -s3 --name '<my config name>' -dc`
|
||||
* Example:
|
||||
* `repertory -s3 --name minio -dc`
|
||||
- Set the appropriate base URL:
|
||||
|
||||
#### S3 Mounting
|
||||
``` shell
|
||||
repertory -s3 --name '<my config name>' -set S3Config.URL '<my url>'
|
||||
# Example:
|
||||
repertory -s3 --name minio -set S3Config.URL 'http://localhost:9000'
|
||||
```
|
||||
|
||||
* Linux:
|
||||
* `repertory -s3 --name '<my config name>' /mnt/location`
|
||||
* Example:
|
||||
* `repertory -s3 --name minio /mnt/location`
|
||||
- Set the appropriate bucket name:
|
||||
|
||||
* Windows:
|
||||
* `repertory -s3 --name '<my config name>' t:`
|
||||
* Example:
|
||||
* `repertory -s3 --name minio t:`
|
||||
``` shell
|
||||
repertory -s3 --name '<my config name>' -set S3Config.Bucket '<my bucket name>'
|
||||
```
|
||||
|
||||
#### S3 Configuration File
|
||||
- Set the appropriate access key:
|
||||
|
||||
``` shell
|
||||
repertory -s3 --name '<my config name>' -set S3Config.AccessKey '<my access key>'
|
||||
```
|
||||
|
||||
- Set the appropriate secret key:
|
||||
|
||||
``` shell
|
||||
repertory -s3 --name '<my config name>' -set S3Config.SecretKey '<my secret key>'
|
||||
```
|
||||
|
||||
- For Sia and most local S3 gateway instances, enable path style URLs:
|
||||
|
||||
``` shell
|
||||
repertory -s3 --name '<my config name>' -set S3Config.UsePathStyle true
|
||||
```
|
||||
|
||||
**Optional steps:**
|
||||
|
||||
- Set an appropriate region. Default is `any`:
|
||||
|
||||
``` shell
|
||||
repertory -s3 --name '<my config name>' -set S3Config.Region '<my region>'
|
||||
```
|
||||
|
||||
- Enable encrypted file names and file data. Set a strong, random encryption token and store it securely:
|
||||
|
||||
``` shell
|
||||
repertory -s3 --name '<my config name>' -set S3Config.EncryptionToken '<my strong password>'
|
||||
```
|
||||
|
||||
**Verify/view all configuration options:**
|
||||
|
||||
``` shell
|
||||
repertory -s3 --name '<my config name>' -dc
|
||||
# Example:
|
||||
repertory -s3 --name minio -dc
|
||||
```
|
||||
|
||||
### S3 Mounting
|
||||
|
||||
<!-- markdownlint-disable-next-line -->
|
||||
#### Linux
|
||||
|
||||
``` shell
|
||||
repertory -s3 --name '<my config name>' /mnt/location
|
||||
# Example:
|
||||
repertory -s3 --name minio /mnt/location
|
||||
```
|
||||
|
||||
<!-- markdownlint-disable-next-line -->
|
||||
#### macOS
|
||||
|
||||
``` shell
|
||||
repertory -s3 --name '<my config name>' /Volumes/minio
|
||||
# Example:
|
||||
repertory -s3 --name minio /Volumes/minio
|
||||
```
|
||||
|
||||
<!-- markdownlint-disable-next-line -->
|
||||
#### Windows
|
||||
|
||||
``` shell
|
||||
repertory -s3 --name '<my config name>' t:
|
||||
# Example:
|
||||
repertory -s3 --name minio t:
|
||||
```
|
||||
|
||||
### S3 Configuration File
|
||||
|
||||
```json
|
||||
{
|
||||
@@ -280,100 +524,128 @@ username and password.
|
||||
}
|
||||
```
|
||||
|
||||
### Data Directories
|
||||
---
|
||||
|
||||
#### Linux Directories
|
||||
## 🌐 Remote Mounting
|
||||
|
||||
* `~/.local/repertory2/s3`
|
||||
* `~/.local/repertory2/sia`
|
||||
|
||||
#### Windows Directories
|
||||
|
||||
* `%LOCALAPPDATA%\repertory2\s3`
|
||||
* `%LOCALAPPDATA%\repertory2\sia`
|
||||
* Examples:
|
||||
* `C:\Users\Tom\AppData\Local\repertory2\s3`
|
||||
* `C:\Users\Tom\AppData\Local\repertory2\sia`
|
||||
* IMPORTANT:
|
||||
* It is highly recommended to exclude this folder from any anti-virus/anti-malware applications as severe performance issues may arise.
|
||||
* Excluding the mounted drive letter is also highly recommended.
|
||||
|
||||
## Remote Mounting
|
||||
|
||||
`repertory` allows local mounts to be shared with other computers on your network
|
||||
or over the internet. This option is referred to as remote mounting.
|
||||
`repertory` allows local mounts to be shared with other computers on your network or over the internet. This option is referred to as **remote mounting**.
|
||||
|
||||
### Server Setup
|
||||
|
||||
The following steps must be performed on the mount you wish to share with
|
||||
other systems. Changes to configuration will not take affect while a mount is
|
||||
active, so it is recommended to unmount beforehand.
|
||||
The following steps must be performed on the mount you wish to share with other systems. Changes to configuration will not take effect while a mount is active, so it is recommended to unmount beforehand.
|
||||
|
||||
* Required steps:
|
||||
* Enable remote mount:
|
||||
* Sia
|
||||
* `repertory -set RemoteMount.Enable true`
|
||||
* `repertory --name '<my config name>' -set RemoteMount.Enable true`
|
||||
* S3:
|
||||
* `repertory -s3 --name '<my config name>' -set RemoteMount.Enable true`
|
||||
* Set a secure encryption token:
|
||||
* Sia:
|
||||
* `repertory -set RemoteMount.EncryptionToken '<my secure password>'`
|
||||
* `repertory --name '<my config name>' -set RemoteMount.EncryptionToken '<my secure password>'`
|
||||
* S3:
|
||||
* `repertory -s3 --name '<my config name>' -set RemoteMount.EncryptionToken '<my secure password>'`
|
||||
**Required steps:**
|
||||
|
||||
* Optional steps:
|
||||
* Change the port clients will use to connect to your mount:
|
||||
* Sia:
|
||||
* `repertory -set RemoteMount.ApiPort 20000`
|
||||
* `repertory --name '<my config name>' -set RemoteMount.ApiPort 20000`
|
||||
* S3:
|
||||
* `repertory -s3 --name '<my config name>' -set RemoteMount.ApiPort 20000`
|
||||
- Enable remote mount:
|
||||
|
||||
* IMPORTANT:
|
||||
* Be sure to configure your firewall to allow incoming TCP connections on the port configured in `RemoteMount.ApiPort`.
|
||||
- **Sia**
|
||||
|
||||
``` shell
|
||||
repertory -set RemoteMount.Enable true
|
||||
repertory --name '<my config name>' -set RemoteMount.Enable true
|
||||
```
|
||||
|
||||
- **S3**
|
||||
|
||||
``` shell
|
||||
repertory -set RemoteMount.Enable true
|
||||
repertory -s3 --name '<my config name>' -set RemoteMount.Enable true
|
||||
```
|
||||
|
||||
- Set a secure encryption token:
|
||||
|
||||
- **Sia**
|
||||
|
||||
``` shell
|
||||
repertory -set RemoteMount.EncryptionToken '<my secure password>'
|
||||
repertory --name '<my config name>' -set RemoteMount.EncryptionToken '<my secure password>'
|
||||
```
|
||||
|
||||
- **S3**
|
||||
|
||||
``` shell
|
||||
repertory -s3 --name '<my config name>' -set RemoteMount.EncryptionToken '<my secure password>'
|
||||
```
|
||||
|
||||
**Optional steps:**
|
||||
|
||||
- Change the port clients will use to connect to your mount:
|
||||
|
||||
- **Sia**
|
||||
|
||||
``` shell
|
||||
repertory -set RemoteMount.ApiPort 20000
|
||||
repertory --name '<my config name>' -set RemoteMount.ApiPort 20000
|
||||
```
|
||||
|
||||
- **S3**
|
||||
|
||||
``` shell
|
||||
repertory -s3 --name '<my config name>' -set RemoteMount.ApiPort 20000
|
||||
```
|
||||
|
||||
**IMPORTANT:**
|
||||
|
||||
Be sure to configure your firewall to allow incoming TCP connections on the port configured in `RemoteMount.ApiPort`.
|
||||
|
||||
#### Remote Mount Configuration File Section
|
||||
|
||||
```json
|
||||
{
|
||||
...
|
||||
"RemoteMount": {
|
||||
"ApiPort": 20000,
|
||||
"ClientPoolSize": 20,
|
||||
"Enable": true,
|
||||
"EncryptionToken": "<my secure password>"
|
||||
},
|
||||
...
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### Client Setup
|
||||
|
||||
Client configuration is provider agnostic, so there's no need to specify `-s3`
|
||||
for S3 providers.
|
||||
Client configuration is provider agnostic, so there's no need to specify `-s3` for S3 providers.
|
||||
|
||||
* Required steps:
|
||||
* Set the encryption token to the same value configured during server setup:
|
||||
* `repertory -rm <host name or IP>:<port> -set RemoteConfig.EncryptionToken '<my secure password>'`
|
||||
* Replace `<host name or IP>` with the host name or IP of the server
|
||||
* Replace `<port>` with the value of `RemoteMount.ApiPort` used in the server configuration
|
||||
* Example:
|
||||
* `repertory -rm 192.168.1.10:20000 -set RemoteConfig.EncryptionToken '<my secure password>'`
|
||||
* `repertory -rm my.host.com:20000 -set RemoteConfig.EncryptionToken '<my secure password>'`
|
||||
**Required steps:**
|
||||
|
||||
- Set the encryption token to the same value configured during server setup:
|
||||
|
||||
``` shell
|
||||
repertory -rm <host name or IP>:<port> -set RemoteConfig.EncryptionToken '<my secure password>'
|
||||
# Replace <host name or IP> with the host name or IP of the server
|
||||
# Replace <port> with the value of RemoteMount.ApiPort used in the server configuration
|
||||
# Example:
|
||||
repertory -rm 192.168.1.10:20000 -set RemoteConfig.EncryptionToken '<my secure password>'
|
||||
repertory -rm my.host.com:20000 -set RemoteConfig.EncryptionToken '<my secure password>'
|
||||
```
|
||||
|
||||
#### Client Remote Mounting
|
||||
|
||||
* Linux:
|
||||
* `repertory -rm <host name or IP>:<port> /mnt/location`
|
||||
* Example:
|
||||
* `repertory -rm 192.168.1.10:20000 /mnt/location`
|
||||
<!-- markdownlint-disable-next-line -->
|
||||
##### Linux
|
||||
|
||||
* Windows:
|
||||
* `repertory -rm <host name or IP>:<port> t:`
|
||||
* Example:
|
||||
* `repertory -rm 192.168.1.10:20000 t:`
|
||||
``` shell
|
||||
repertory -rm <host name or IP>:<port> /mnt/location
|
||||
# Example:
|
||||
repertory -rm 192.168.1.10:20000 /mnt/location
|
||||
```
|
||||
|
||||
<!-- markdownlint-disable-next-line -->
|
||||
##### macOS
|
||||
|
||||
``` shell
|
||||
repertory -rm <host name or IP>:<port> /Volumes/remotemount
|
||||
# Example:
|
||||
repertory -rm 192.168.1.10:20000 /Volumes/remotemount
|
||||
```
|
||||
|
||||
<!-- markdownlint-disable-next-line -->
|
||||
##### Windows
|
||||
|
||||
``` shell
|
||||
repertory -rm <host name or IP>:<port> t:
|
||||
# Example:
|
||||
repertory -rm 192.168.1.10:20000 t:
|
||||
```
|
||||
|
||||
#### Remote Mount Configuration File
|
||||
|
||||
@@ -397,67 +669,108 @@ for S3 providers.
|
||||
}
|
||||
```
|
||||
|
||||
## Compiling
|
||||
---
|
||||
|
||||
Successful compilation will result in all files required for execution to be placed
|
||||
in the `dist/` directory
|
||||
## 🧰 Compiling
|
||||
|
||||
Successful compilation will place all required files for execution in the `dist/` directory.
|
||||
|
||||
### Linux Compilation
|
||||
|
||||
* Ensure `docker` is installed
|
||||
* For x86_64:
|
||||
* RelWithDebInfo: `scripts/make_unix.sh`
|
||||
* Release: `scripts/make_unix.sh x86_64 Release`
|
||||
* Debug: `scripts/make_unix.sh x86_64 Debug`
|
||||
- Ensure `docker` is installed
|
||||
|
||||
* For aarch64:
|
||||
* RelWithDebInfo: `scripts/make_unix.sh aarch64`
|
||||
* Release: `scripts/make_unix.sh aarch64 Release`
|
||||
* Debug: `scripts/make_unix.sh aarch64 Debug`
|
||||
- For `x86_64`:
|
||||
|
||||
``` shell
|
||||
scripts/make_unix.sh x86_64
|
||||
scripts/make_unix.sh x86_64 Release
|
||||
scripts/make_unix.sh x86_64 Debug
|
||||
```
|
||||
|
||||
- For `aarch64`:
|
||||
|
||||
``` shell
|
||||
scripts/make_unix.sh aarch64
|
||||
scripts/make_unix.sh aarch64 Release
|
||||
scripts/make_unix.sh aarch64 Debug
|
||||
```
|
||||
|
||||
### macOS Compilation
|
||||
|
||||
- Ensure `Xcode` and `CMake` are installed
|
||||
|
||||
- For `x86_64`:
|
||||
|
||||
``` shell
|
||||
scripts/make_unix.sh x86_64
|
||||
scripts/make_unix.sh x86_64 Release
|
||||
scripts/make_unix.sh x86_64 Debug
|
||||
```
|
||||
|
||||
- For `aarch64`:
|
||||
|
||||
``` shell
|
||||
scripts/make_unix.sh aarch64
|
||||
scripts/make_unix.sh aarch64 Release
|
||||
scripts/make_unix.sh aarch64 Debug
|
||||
```
|
||||
|
||||
### Windows Compilation
|
||||
|
||||
* OFFICIAL: Cross-compiling on Linux
|
||||
* Ensure `docker` is installed
|
||||
* RelWithDebInfo: `scripts/make_win32.sh`
|
||||
* Release: `scripts/make_win32.sh x86_64 Release`
|
||||
* Debug: `scripts/make_win32.sh x86_64 Debug`
|
||||
- **OFFICIAL: Cross-compiling on Linux**
|
||||
|
||||
* UNOFFICIAL: Compiling on Windows
|
||||
* Ensure latest [MSYS2](https://www.msys2.org/) is installed
|
||||
* RelWithDebInfo: `scripts\make_win32.cmd`
|
||||
* Release: `scripts\make_win32.cmd x86_64 Release`
|
||||
* Debug: `scripts\make_win32.cmd x86_64 Debug`
|
||||
- Ensure `docker` is installed
|
||||
|
||||
## Credits
|
||||
``` shell
|
||||
scripts/make_win32.sh x86_64
|
||||
scripts/make_win32.sh x86_64 Release
|
||||
scripts/make_win32.sh x86_64 Debug
|
||||
```
|
||||
|
||||
* [binutils](https://www.gnu.org/software/binutils/)
|
||||
* [boost c++ libraries](https://www.boost.org/)
|
||||
* [cpp-httplib](https://github.com/yhirose/cpp-httplib)
|
||||
* [curl](https://curl.haxx.se/)
|
||||
* [docker](https://www.docker.com/)
|
||||
* [Google Test](https://github.com/google/googletest)
|
||||
* [ICU](https://icu.unicode.org/)
|
||||
* [JSON for Modern C++](https://github.com/nlohmann/json)
|
||||
* [libexpat](https://github.com/libexpat/libexpat)
|
||||
* [libfuse](https://github.com/libfuse/libfuse)
|
||||
* [libsodium](https://doc.libsodium.org/)
|
||||
* [mingw-w64](https://www.mingw-w64.org/)
|
||||
* [MSYS2](https://www.msys2.org)
|
||||
* [OpenSSL](https://www.openssl.org/)
|
||||
* [pkg-config](https://www.freedesktop.org/wiki/Software/pkg-config/)
|
||||
* [pugixml](https://pugixml.org/)
|
||||
* [RocksDB](https://rocksdb.org)
|
||||
* [ScPrime](https://scpri.me/)
|
||||
* [Sia Decentralized Cloud Storage](https://sia.tech/)
|
||||
* [spdlog](https://github.com/gabime/spdlog)
|
||||
* [SQLite](https://www.sqlite.org)
|
||||
* [stduuid](https://github.com/mariusbancila/stduuid)
|
||||
* [Storj](https://storj.io/)
|
||||
* [WinFSP - FUSE for Windows](https://github.com/billziss-gh/winfsp)
|
||||
* [zlib](https://zlib.net/)
|
||||
- **UNOFFICIAL: Compiling on Windows**
|
||||
|
||||
## Developer Public Key
|
||||
- Ensure latest [MSYS2](https://www.msys2.org/) is installed
|
||||
|
||||
``` shell
|
||||
scripts\make_win32.cmd x86_64
|
||||
scripts\make_win32.cmd x86_64 Release
|
||||
scripts\make_win32.cmd x86_64 Debug
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 📜 Credits
|
||||
|
||||
- [binutils](https://www.gnu.org/software/binutils/)
|
||||
- [boost c++ libraries](https://www.boost.org/)
|
||||
- [cpp-httplib](https://github.com/yhirose/cpp-httplib)
|
||||
- [curl](https://curl.haxx.se/)
|
||||
- [docker](https://www.docker.com/)
|
||||
- [Google Test](https://github.com/google/googletest)
|
||||
- [ICU](https://icu.unicode.org/)
|
||||
- [JSON for Modern C++](https://github.com/nlohmann/json)
|
||||
- [libexpat](https://github.com/libexpat/libexpat)
|
||||
- [libfuse](https://github.com/libfuse/libfuse)
|
||||
- [libsodium](https://doc.libsodium.org/)
|
||||
- [macFUSE](https://macfuse.github.io/)
|
||||
- [mingw-w64](https://www.mingw-w64.org/)
|
||||
- [MSYS2](https://www.msys2.org)
|
||||
- [OpenSSL](https://www.openssl.org/)
|
||||
- [pkg-config](https://www.freedesktop.org/wiki/Software/pkg-config/)
|
||||
- [pugixml](https://pugixml.org/)
|
||||
- [RocksDB](https://rocksdb.org)
|
||||
- [ScPrime](https://scpri.me/)
|
||||
- [Sia Decentralized Cloud Storage](https://sia.tech/)
|
||||
- [spdlog](https://github.com/gabime/spdlog)
|
||||
- [SQLite](https://www.sqlite.org)
|
||||
- [stduuid](https://github.com/mariusbancila/stduuid)
|
||||
- [Storj](https://www.storj.io/)
|
||||
- [WinFSP - FUSE for Windows](https://github.com/billziss-gh/winfsp)
|
||||
- [zlib](https://zlib.net/)
|
||||
|
||||
---
|
||||
|
||||
## 🔑 Developer Public Key
|
||||
|
||||
```text
|
||||
-----BEGIN PUBLIC KEY-----
|
||||
|
BIN
assets/blue/icon_24X24.png
Normal file
After Width: | Height: | Size: 262 B |
BIN
assets/blue/icon_40x40.png
Normal file
After Width: | Height: | Size: 298 B |
BIN
assets/blue/icon_48x48.png
Normal file
After Width: | Height: | Size: 315 B |
BIN
assets/blue/logo.icns
Normal file
BIN
assets/blue/logo.iconset/icon_128x128.png
Normal file
After Width: | Height: | Size: 552 B |
BIN
assets/blue/logo.iconset/icon_128x128@2x.png
Normal file
After Width: | Height: | Size: 820 B |
BIN
assets/blue/logo.iconset/icon_16x16.png
Normal file
After Width: | Height: | Size: 202 B |
BIN
assets/blue/logo.iconset/icon_16x16@2x.png
Normal file
After Width: | Height: | Size: 281 B |
BIN
assets/blue/logo.iconset/icon_256x256.png
Normal file
After Width: | Height: | Size: 820 B |
BIN
assets/blue/logo.iconset/icon_256x256@2x.png
Normal file
After Width: | Height: | Size: 7.5 KiB |
BIN
assets/blue/logo.iconset/icon_32x32.png
Normal file
After Width: | Height: | Size: 281 B |
BIN
assets/blue/logo.iconset/icon_32x32@2x.png
Normal file
After Width: | Height: | Size: 361 B |
BIN
assets/blue/logo.iconset/icon_512x512.png
Normal file
After Width: | Height: | Size: 7.5 KiB |
BIN
assets/blue/logo.iconset/icon_512x512@2x.png
Normal file
After Width: | Height: | Size: 25 KiB |
BIN
assets/blue/logo.iconset/icon_64x64.png
Normal file
After Width: | Height: | Size: 361 B |
BIN
assets/blue/logo.iconset/icon_64x64@2x.png
Normal file
After Width: | Height: | Size: 552 B |
BIN
assets/blue/logo.iconset/logo_1024x1024.png
Normal file
After Width: | Height: | Size: 25 KiB |
BIN
assets/green/icon_24X24.png
Normal file
After Width: | Height: | Size: 3.3 KiB |
BIN
assets/green/icon_40x40.png
Normal file
After Width: | Height: | Size: 3.3 KiB |
BIN
assets/green/icon_48x48.png
Normal file
After Width: | Height: | Size: 3.9 KiB |
BIN
assets/green/logo.icns
Normal file
BIN
assets/green/logo.iconset/icon_128x128.png
Normal file
After Width: | Height: | Size: 4.1 KiB |
BIN
assets/green/logo.iconset/icon_128x128@2x.png
Normal file
After Width: | Height: | Size: 3.9 KiB |
BIN
assets/green/logo.iconset/icon_16x16.png
Normal file
After Width: | Height: | Size: 1.1 KiB |
BIN
assets/green/logo.iconset/icon_16x16@2x.png
Normal file
After Width: | Height: | Size: 1.8 KiB |
BIN
assets/green/logo.iconset/icon_256x256.png
Normal file
After Width: | Height: | Size: 3.9 KiB |
BIN
assets/green/logo.iconset/icon_256x256@2x.png
Normal file
After Width: | Height: | Size: 4.5 KiB |
BIN
assets/green/logo.iconset/icon_32x32.png
Normal file
After Width: | Height: | Size: 1.8 KiB |
BIN
assets/green/logo.iconset/icon_32x32@2x.png
Normal file
After Width: | Height: | Size: 3.0 KiB |
BIN
assets/green/logo.iconset/icon_512x512.png
Normal file
After Width: | Height: | Size: 4.5 KiB |
BIN
assets/green/logo.iconset/icon_512x512@2x.png
Normal file
After Width: | Height: | Size: 8.4 KiB |
BIN
assets/green/logo.iconset/icon_64x64.png
Normal file
After Width: | Height: | Size: 3.0 KiB |
BIN
assets/green/logo.iconset/icon_64x64@2x.png
Normal file
After Width: | Height: | Size: 4.1 KiB |
BIN
assets/green/logo.iconset/logo_1024x1024.png
Normal file
After Width: | Height: | Size: 8.4 KiB |
BIN
assets/home.png
Normal file
After Width: | Height: | Size: 165 KiB |
BIN
assets/icon.icns
Normal file
BIN
assets/icon.ico
Normal file
After Width: | Height: | Size: 370 KiB |
BIN
assets/login.png
Normal file
After Width: | Height: | Size: 221 KiB |
BIN
assets/logo_blue.xcf
Normal file
BIN
assets/logo_green.xcf
Normal file
@@ -35,13 +35,9 @@ list(APPEND PROJECT_CXXFLAGS_LIST
|
||||
-Wcast-align
|
||||
-Wconversion
|
||||
-Wdouble-promotion
|
||||
-Wduplicated-branches
|
||||
-Wduplicated-cond
|
||||
-Wextra
|
||||
-Wformat=2
|
||||
-Wlogical-op
|
||||
-Wmisleading-indentation
|
||||
-Wno-useless-cast
|
||||
-Wnon-virtual-dtor
|
||||
-Wnull-dereference
|
||||
-Wold-style-cast
|
||||
@@ -52,6 +48,15 @@ list(APPEND PROJECT_CXXFLAGS_LIST
|
||||
-Wunused
|
||||
)
|
||||
|
||||
if (NOT PROJECT_IS_DARWIN)
|
||||
list(APPEND PROJECT_CXXFLAGS_LIST
|
||||
-Wduplicated-branches
|
||||
-Wduplicated-cond
|
||||
-Wlogical-op
|
||||
-Wno-useless-cast
|
||||
)
|
||||
endif()
|
||||
|
||||
list(APPEND PROJECT_CFLAGS_LIST
|
||||
${PROJECT_COMMON_FLAG_LIST}
|
||||
-std=c${CMAKE_C_STANDARD}
|
||||
@@ -62,7 +67,7 @@ list(APPEND PROJECT_CXXFLAGS_LIST
|
||||
-std=gnu++${CMAKE_CXX_STANDARD}
|
||||
)
|
||||
|
||||
if(PROJECT_STATIC_LINK)
|
||||
if(NOT PROJECT_IS_DARWIN AND PROJECT_STATIC_LINK)
|
||||
list(APPEND PROJECT_CMAKE_EXE_LINKER_FLAGS
|
||||
-static-libgcc
|
||||
-static-libstdc++
|
||||
@@ -89,7 +94,11 @@ set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} ${PROJECT_RELEASE_FLAG_L
|
||||
|
||||
set(CMAKE_EXE_LINKER_FLAGS "${PROJECT_CMAKE_EXE_LINKER_FLAGS}")
|
||||
|
||||
set(EXTERNAL_CMAKE_CXX_FLAGS "-include cstdint -include utility -fext-numeric-literals ${PROJECT_COMMON_FLAG_LIST}")
|
||||
set(EXTERNAL_CMAKE_CXX_FLAGS "-include cstdint -include utility ${PROJECT_COMMON_FLAG_LIST}")
|
||||
if (NOT PROJECT_IS_DARWIN)
|
||||
set(EXTERNAL_CMAKE_CXX_FLAGS "-fext-numeric-literals ${EXTERNAL_CMAKE_CXX_FLAGS}")
|
||||
endif()
|
||||
|
||||
list(APPEND PROJECT_EXTERNAL_CMAKE_FLAGS
|
||||
-DCMAKE_BUILD_TYPE=${PROJECT_CMAKE_BUILD_TYPE}
|
||||
-DCMAKE_COLOR_MAKEFILE=${CMAKE_COLOR_MAKEFILE}
|
||||
|
@@ -1,3 +1,7 @@
|
||||
if (PROJECT_MACOS_ICNS_NAME)
|
||||
set(PROJECT_MACOS_ICNS_SOURCE "${CMAKE_CURRENT_SOURCE_DIR}/assets/${PROJECT_MACOS_ICNS_NAME}")
|
||||
endif()
|
||||
|
||||
function(set_common_target_options name)
|
||||
target_compile_definitions(${name} PUBLIC
|
||||
${PROJECT_DEFINITIONS}
|
||||
@@ -12,6 +16,16 @@ function(set_common_target_options name)
|
||||
${PROJECT_EXTERNAL_BUILD_ROOT}/lib
|
||||
)
|
||||
|
||||
if (PROJECT_STATIC_LINK)
|
||||
target_compile_definitions(${name} PRIVATE U_STATIC_IMPLEMENTATION)
|
||||
endif()
|
||||
|
||||
target_link_directories(${name} PRIVATE
|
||||
ICU::uc
|
||||
ICU::i18n
|
||||
ICU::io
|
||||
)
|
||||
|
||||
target_include_directories(${name} AFTER PUBLIC
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/${PROJECT_NAME}/${name}/include
|
||||
${name}_INCLUDES
|
||||
@@ -31,11 +45,31 @@ function(add_project_executable2 name dependencies libraries headers sources is_
|
||||
list(APPEND sources ${PROJECT_WINDOWS_VERSION_RC})
|
||||
endif()
|
||||
|
||||
add_executable(${name}
|
||||
${headers}
|
||||
${sources}
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/${PROJECT_NAME}/${name}/main.cpp
|
||||
)
|
||||
if (PROJECT_IS_DARWIN AND PROJECT_MACOS_ICNS_SOURCE AND "${name}" STREQUAL "${PROJECT_NAME}")
|
||||
set_source_files_properties(${PROJECT_MACOS_ICNS_SOURCE} PROPERTIES
|
||||
MACOSX_PACKAGE_LOCATION "Resources"
|
||||
)
|
||||
|
||||
add_executable(${name}
|
||||
MACOSX_BUNDLE
|
||||
${headers}
|
||||
${sources}
|
||||
${PROJECT_MACOS_ICNS_SOURCE}
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/${PROJECT_NAME}/${name}/main.cpp
|
||||
)
|
||||
|
||||
set_target_properties(${name} PROPERTIES
|
||||
MACOSX_BUNDLE TRUE
|
||||
MACOSX_BUNDLE_ICON_FILE "${PROJECT_MACOS_ICNS_NAME}"
|
||||
RESOURCE "${PROJECT_MACOS_ICNS_SOURCE}"
|
||||
)
|
||||
else()
|
||||
add_executable(${name}
|
||||
${headers}
|
||||
${sources}
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/${PROJECT_NAME}/${name}/main.cpp
|
||||
)
|
||||
endif()
|
||||
|
||||
foreach(dependency ${dependencies})
|
||||
set_common_target_options(${dependency})
|
||||
|
@@ -7,6 +7,7 @@ set(EXPAT_HASH 85372797ff0673a8fc4a6be16466bb5a0ca28c0dcf3c6f7ac1686b4a3ba2aabb)
|
||||
set(GCC_HASH 51b9919ea69c980d7a381db95d4be27edf73b21254eb13d752a08003b4d013b1)
|
||||
set(GTEST_HASH 65fab701d9829d38cb77c14acdc431d2108bfdbf8979e40eb8ae567edf10b27c)
|
||||
set(ICU_HASH a2c443404f00098e9e90acf29dc318e049d2dc78d9ae5f46efb261934a730ce2)
|
||||
set(INNOSETUP_HASH f3c42116542c4cc57263c5ba6c4feabfc49fe771f2f98a79d2f7628b8762723b)
|
||||
set(JSON_HASH 4b92eb0c06d10683f7447ce9406cb97cd4b453be18d7279320f7b2f025c10187)
|
||||
set(LIBSODIUM_HASH 8e5aeca07a723a27bbecc3beef14b0068d37e7fc0e97f51b3f1c82d2a58005c1)
|
||||
set(MINGW_HASH 5afe822af5c4edbf67daaf45eec61d538f49eef6b19524de64897c6b95828caf)
|
||||
@@ -17,4 +18,5 @@ set(ROCKSDB_HASH afccfab496556904900afacf7d99887f1d50cb893e5d2288bd502db233adaca
|
||||
set(SPDLOG_HASH 15a04e69c222eb6c01094b5c7ff8a249b36bb22788d72519646fb85feb267e67)
|
||||
set(SQLITE_HASH 9ad6d16cbc1df7cd55c8b55127c82a9bca5e9f287818de6dc87e04e73599d754)
|
||||
set(STDUUID_HASH b1176597e789531c38481acbbed2a6894ad419aab0979c10410d59eb0ebf40d3)
|
||||
set(WINFSP_HASH 073a70e00f77423e34bed98b86e600def93393ba5822204fac57a29324db9f7a)
|
||||
set(ZLIB_HASH 17e88863f3600672ab49182f217281b6fc4d3c762bde361935e436a95214d05c)
|
||||
|
@@ -4,13 +4,17 @@ set(Boost_USE_STATIC_LIBS ${PROJECT_STATIC_LINK})
|
||||
set(CURL_USE_STATIC_LIBS ${PROJECT_STATIC_LINK})
|
||||
set(OPENSSL_USE_STATIC_LIBS ${PROJECT_STATIC_LINK})
|
||||
set(SFML_STATIC_LIBRARIES ${PROJECT_STATIC_LINK})
|
||||
set(ZLIB_USE_STATIC_LIBS ${PROJECT_STATIC_LINK})
|
||||
if (PROJECT_IS_DARWIN)
|
||||
set(ZLIB_USE_STATIC_LIBS OFF)
|
||||
else()
|
||||
set(ZLIB_USE_STATIC_LIBS ${PROJECT_STATIC_LINK})
|
||||
endif()
|
||||
set(wxWidgets_USE_STATIC ${PROJECT_STATIC_LINK})
|
||||
set(ICU_USE_STATIC_LIBS ${PROJECT_STATIC_LINK})
|
||||
|
||||
include(cmake/libraries/icu.cmake)
|
||||
include(cmake/libraries/openssl.cmake)
|
||||
|
||||
include(cmake/libraries/boost.cmake)
|
||||
|
||||
include(cmake/libraries/cpp_httplib.cmake)
|
||||
include(cmake/libraries/curl.cmake)
|
||||
include(cmake/libraries/fuse.cmake)
|
||||
@@ -59,7 +63,7 @@ if(PROJECT_BUILD)
|
||||
winspool
|
||||
ws2_32
|
||||
)
|
||||
else()
|
||||
elseif(NOT PROJECT_IS_DARWIN)
|
||||
link_libraries(
|
||||
uring
|
||||
)
|
||||
|
@@ -39,6 +39,14 @@ if(PROJECT_ENABLE_BOOST)
|
||||
wserialization
|
||||
)
|
||||
else()
|
||||
if(PROJECT_IS_DARWIN)
|
||||
set(CMAKE_HAVE_THREADS_LIBRARY 1)
|
||||
set(CMAKE_THREAD_LIBS_INIT "-lpthread")
|
||||
set(CMAKE_USE_PTHREADS_INIT 1)
|
||||
set(CMAKE_USE_WIN32_THREADS_INIT 0)
|
||||
set(THREADS_PREFER_PTHREAD_FLAG ON)
|
||||
endif()
|
||||
|
||||
find_package(Boost ${BOOST_MAJOR_VERSION}.${BOOST_MINOR_VERSION}.${BOOST_PATCH_VERSION}
|
||||
REQUIRED
|
||||
COMPONENTS
|
||||
@@ -120,10 +128,12 @@ if(PROJECT_ENABLE_BOOST)
|
||||
--with-libraries=atomic,chrono,date_time,filesystem,iostreams,locale,log,program_options,random,regex,serialization,system,test,thread
|
||||
BUILD_COMMAND
|
||||
./b2
|
||||
-sNO_BZIP2=1
|
||||
-j$ENV{CMAKE_BUILD_PARALLEL_LEVEL}
|
||||
${BOOST_BUILD_ARGS}
|
||||
INSTALL_COMMAND
|
||||
./b2
|
||||
-sNO_BZIP2=1
|
||||
-j$ENV{CMAKE_BUILD_PARALLEL_LEVEL}
|
||||
${BOOST_BUILD_ARGS}
|
||||
install
|
||||
@@ -131,6 +141,10 @@ if(PROJECT_ENABLE_BOOST)
|
||||
|
||||
list(APPEND PROJECT_DEPENDENCIES boost_project)
|
||||
|
||||
if (PROJECT_IS_DARWIN)
|
||||
add_dependencies(boost_project icu_project)
|
||||
endif()
|
||||
|
||||
if (NOT CMAKE_HOST_WIN32)
|
||||
add_dependencies(boost_project openssl_project)
|
||||
endif()
|
||||
|
@@ -15,6 +15,7 @@ if(PROJECT_ENABLE_CPP_HTTPLIB)
|
||||
CMAKE_ARGS ${PROJECT_EXTERNAL_CMAKE_FLAGS}
|
||||
-DBUILD_SHARED_LIBS=${PROJECT_BUILD_SHARED_LIBS}
|
||||
-DBUILD_STATIC_LIBS=ON
|
||||
-DCMAKE_OSX_ARCHITECTURES=${CMAKE_OSX_ARCHITECTURES}
|
||||
-DHTTPLIB_REQUIRE_BROTLI=OFF
|
||||
-DHTTPLIB_REQUIRE_OPENSSL=ON
|
||||
-DHTTPLIB_REQUIRE_ZLIB=ON
|
||||
|
@@ -27,8 +27,8 @@ if(PROJECT_ENABLE_CURL)
|
||||
-DBUILD_SHARED_LIBS=${PROJECT_BUILD_SHARED_LIBS}
|
||||
-DBUILD_STATIC_CURL=ON
|
||||
-DBUILD_STATIC_LIBS=ON
|
||||
-DBUILD_STATIC_LIBS=ON
|
||||
-DBUILD_TESTING=OFF
|
||||
-DCMAKE_OSX_ARCHITECTURES=${CMAKE_OSX_ARCHITECTURES}
|
||||
-DCURL_BROTLI=OFF
|
||||
-DCURL_CA_BUNDLE=./cacert.pem
|
||||
-DCURL_CA_FALLBACK=ON
|
||||
@@ -37,11 +37,13 @@ if(PROJECT_ENABLE_CURL)
|
||||
-DCURL_USE_LIBSSH2=OFF
|
||||
-DCURL_USE_OPENSSL=${PROJECT_ENABLE_OPENSSL}
|
||||
-DCURL_ZLIB=ON
|
||||
-DCURL_ZSTD=OFF
|
||||
-DENABLE_CURL_MANUAL=OFF
|
||||
-DENABLE_THREADED_RESOLVER=ON
|
||||
-DOPENSSL_ROOT_DIR=${OPENSSL_ROOT_DIR}
|
||||
-DOPENSSL_USE_STATIC_LIBS=${OPENSSL_USE_STATIC_LIBS}
|
||||
-DUSE_LIBIDN2=OFF
|
||||
-DUSE_NGHTTP2=OFF
|
||||
-DZLIB_USE_STATIC_LIBS=${ZLIB_USE_STATIC_LIBS}
|
||||
)
|
||||
|
||||
|
@@ -20,17 +20,25 @@ if(PROJECT_ENABLE_FUSE AND NOT PROJECT_IS_MINGW)
|
||||
endif()
|
||||
endif()
|
||||
else()
|
||||
pkg_check_modules(LIBFUSE3 fuse3>=3.0.0)
|
||||
if(LIBFUSE3_FOUND)
|
||||
set(PROJECT_FUSE fuse3)
|
||||
set(PROJECT_FUSE_INCLUDE_DIRS ${LIBFUSE3_INCLUDE_DIRS})
|
||||
if (PROJECT_IS_DARWIN)
|
||||
find_library(OSXFUSE NO_CACHE NAMES OSXFUSE)
|
||||
if (NOT OSXFUSE)
|
||||
message(FATAL_ERROR "FUSE for macOS not found (https://macfuse.github.io)")
|
||||
endif ()
|
||||
set(PROJECT_FUSE fuse2)
|
||||
else()
|
||||
pkg_check_modules(LIBFUSE2 fuse>=2.9.0)
|
||||
if(LIBFUSE2_FOUND)
|
||||
set(PROJECT_FUSE fuse2)
|
||||
set(PROJECT_FUSE_INCLUDE_DIRS ${LIBFUSE2_INCLUDE_DIRS})
|
||||
pkg_check_modules(LIBFUSE3 fuse3>=3.0.0)
|
||||
if(LIBFUSE3_FOUND)
|
||||
set(PROJECT_FUSE fuse3)
|
||||
set(PROJECT_FUSE_INCLUDE_DIRS ${LIBFUSE3_INCLUDE_DIRS})
|
||||
else()
|
||||
message(FATAL_ERROR "fuse library not found")
|
||||
pkg_check_modules(LIBFUSE2 fuse>=2.9.0)
|
||||
if(LIBFUSE2_FOUND)
|
||||
set(PROJECT_FUSE fuse2)
|
||||
set(PROJECT_FUSE_INCLUDE_DIRS ${LIBFUSE2_INCLUDE_DIRS})
|
||||
else()
|
||||
message(FATAL_ERROR "fuse library not found")
|
||||
endif()
|
||||
endif()
|
||||
endif()
|
||||
endif()
|
||||
|
24
cmake/libraries/icu.cmake
Normal file
@@ -0,0 +1,24 @@
|
||||
if(PROJECT_IS_DARWIN AND NOT PROJECT_BUILD)
|
||||
if(PROJECT_BUILD_SHARED_LIBS)
|
||||
set(ICU_ENABLE_SHARED yes)
|
||||
else()
|
||||
set(ICU_ENABLE_SHARED no)
|
||||
endif()
|
||||
|
||||
ExternalProject_Add(icu_project
|
||||
PREFIX external
|
||||
URL ${PROJECT_3RD_PARTY_DIR}/mingw64/icu-release-${ICU_VERSION}.tar.gz
|
||||
URL_HASH SHA256=${ICU_HASH}
|
||||
BUILD_IN_SOURCE 1
|
||||
LIST_SEPARATOR |
|
||||
PATCH_COMMAND chmod +x ${PROJECT_3RD_PARTY_DIR}/icu_configure.sh
|
||||
CONFIGURE_COMMAND cd icu4c/source && ${PROJECT_3RD_PARTY_DIR}/icu_configure.sh
|
||||
${PROJECT_MARCH}
|
||||
${PROJECT_EXTERNAL_BUILD_ROOT}
|
||||
${ICU_ENABLE_SHARED}
|
||||
BUILD_COMMAND cd icu4c/source && make -j$ENV{CMAKE_BUILD_PARALLEL_LEVEL}
|
||||
INSTALL_COMMAND cd icu4c/source && make install
|
||||
)
|
||||
|
||||
list(APPEND PROJECT_DEPENDENCIES icu_project)
|
||||
endif()
|
@@ -18,6 +18,7 @@ if(PROJECT_ENABLE_JSON)
|
||||
CMAKE_ARGS ${PROJECT_EXTERNAL_CMAKE_FLAGS}
|
||||
-DBUILD_SHARED_LIBS=${PROJECT_BUILD_SHARED_LIBS}
|
||||
-DBUILD_STATIC_LIBS=ON
|
||||
-DCMAKE_OSX_ARCHITECTURES=${CMAKE_OSX_ARCHITECTURES}
|
||||
-DJSON_BuildTests=OFF
|
||||
-DJSON_Install=ON
|
||||
-DJSON_MultipleHeaders=OFF
|
||||
|
@@ -15,6 +15,12 @@ if(PROJECT_ENABLE_OPENSSL)
|
||||
elseif(NOT PROJECT_IS_MINGW)
|
||||
if(PROJECT_IS_MINGW)
|
||||
set(OPENSSL_COMPILE_TYPE mingw64)
|
||||
elseif(PROJECT_IS_DARWIN)
|
||||
if(PROJECT_IS_ARM64)
|
||||
set(OPENSSL_COMPILE_TYPE darwin64-arm64)
|
||||
else()
|
||||
set(OPENSSL_COMPILE_TYPE darwin64-x86_64)
|
||||
endif()
|
||||
elseif(PROJECT_IS_ARM64)
|
||||
set(OPENSSL_COMPILE_TYPE linux-aarch64)
|
||||
else()
|
||||
|
@@ -20,6 +20,7 @@ if(PROJECT_ENABLE_PUGIXML)
|
||||
CMAKE_ARGS ${PROJECT_EXTERNAL_CMAKE_FLAGS}
|
||||
-DBUILD_SHARED_LIBS=${PROJECT_BUILD_SHARED_LIBS}
|
||||
-DBUILD_STATIC_LIBS=ON
|
||||
-DCMAKE_OSX_ARCHITECTURES=${CMAKE_OSX_ARCHITECTURES}
|
||||
)
|
||||
|
||||
list(APPEND PROJECT_DEPENDENCIES pugixml_project)
|
||||
|
@@ -14,12 +14,14 @@ if(PROJECT_ENABLE_ROCKSDB)
|
||||
CMAKE_ARGS ${PROJECT_EXTERNAL_CMAKE_FLAGS}
|
||||
-DBUILD_SHARED_LIBS=OFF
|
||||
-DBUILD_STATIC_LIBS=ON
|
||||
-DCMAKE_OSX_ARCHITECTURES=${CMAKE_OSX_ARCHITECTURES}
|
||||
-DFAIL_ON_WARNINGS=OFF
|
||||
-DPORTABLE=1
|
||||
-DROCKSDB_BUILD_SHARED=OFF
|
||||
-DROCKSDB_INSTALL_ON_WINDOWS=ON
|
||||
-DWITH_BENCHMARK=OFF
|
||||
-DWITH_BENCHMARK_TOOLS=OFF
|
||||
-DWITH_BZ2=OFF
|
||||
-DWITH_CORE_TOOLS=OFF
|
||||
-DWITH_EXAMPLES=OFF
|
||||
-DWITH_GFLAGS=OFF
|
||||
|
@@ -15,6 +15,7 @@ if(PROJECT_ENABLE_SPDLOG)
|
||||
LIST_SEPARATOR |
|
||||
CMAKE_ARGS ${PROJECT_EXTERNAL_CMAKE_FLAGS}
|
||||
-DBUILD_SHARED_LIBS=${PROJECT_BUILD_SHARED_LIBS}
|
||||
-DCMAKE_OSX_ARCHITECTURES=${CMAKE_OSX_ARCHITECTURES}
|
||||
-DSPDLOG_BUILD_EXAMPLE=OFF
|
||||
-DSPDLOG_FMT_EXTERNAL=OFF
|
||||
-DSPDLOG_FMT_EXTERNAL_HO=OFF
|
||||
|
@@ -16,6 +16,7 @@ if(PROJECT_ENABLE_STDUUID)
|
||||
CMAKE_ARGS ${PROJECT_EXTERNAL_CMAKE_FLAGS}
|
||||
-DBUILD_SHARED_LIBS=${PROJECT_BUILD_SHARED_LIBS}
|
||||
-DBUILD_STATIC_LIBS=ON
|
||||
-DCMAKE_OSX_ARCHITECTURES=${CMAKE_OSX_ARCHITECTURES}
|
||||
-DUUID_BUILD_TESTS=OFF
|
||||
-DUUID_ENABLE_INSTALL=ON
|
||||
-DUUID_USING_CXX20_SPAN=ON
|
||||
|
@@ -10,6 +10,7 @@ if (PROJECT_ENABLE_TESTING)
|
||||
CMAKE_ARGS ${PROJECT_EXTERNAL_CMAKE_FLAGS}
|
||||
-DBUILD_SHARED_LIBS=${PROJECT_BUILD_SHARED_LIBS}
|
||||
-DBUILD_STATIC_LIBS=ON
|
||||
-DCMAKE_OSX_ARCHITECTURES=${CMAKE_OSX_ARCHITECTURES}
|
||||
)
|
||||
|
||||
list(APPEND PROJECT_DEPENDENCIES gtest_project)
|
||||
|
@@ -2,10 +2,6 @@ if(MSVC)
|
||||
message(FATAL_ERROR "MSVC will not be supported")
|
||||
endif()
|
||||
|
||||
if(UNIX AND APPLE)
|
||||
message(FATAL_ERROR "Apple is not currently supported")
|
||||
endif()
|
||||
|
||||
if(${CMAKE_SYSTEM_NAME} MATCHES "FreeBSD")
|
||||
message(FATAL_ERROR "FreeBSD is not currently supported")
|
||||
endif()
|
||||
@@ -13,3 +9,11 @@ endif()
|
||||
if(PROJECT_REQUIRE_ALPINE AND NOT PROJECT_IS_ALPINE AND PROJECT_IS_MINGW AND PROJECT_IS_MINGW_UNIX)
|
||||
message(FATAL_ERROR "Project requires Alpine Linux to build")
|
||||
endif()
|
||||
|
||||
if (PROJECT_IS_DARWIN)
|
||||
if (PROJECT_IS_ARM64)
|
||||
set(CMAKE_OSX_ARCHITECTURES "arm64")
|
||||
else()
|
||||
set(CMAKE_OSX_ARCHITECTURES "x86_64")
|
||||
endif()
|
||||
endif()
|
||||
|
@@ -1,18 +1,19 @@
|
||||
set(BINUTILS_VERSION 2.44)
|
||||
set(BOOST2_MAJOR_VERSION 1)
|
||||
set(BOOST2_MINOR_VERSION 76)
|
||||
set(BOOST2_PATCH_VERSION 0)
|
||||
set(BOOST_MAJOR_VERSION 1)
|
||||
set(BOOST_MINOR_VERSION 88)
|
||||
set(BOOST_PATCH_VERSION 0)
|
||||
set(BOOST2_MAJOR_VERSION 1)
|
||||
set(BOOST2_MINOR_VERSION 76)
|
||||
set(BOOST2_PATCH_VERSION 0)
|
||||
set(CPP_HTTPLIB_VERSION 0.23.1)
|
||||
set(CURL2_VERSION 8_15_0)
|
||||
set(CURL_VERSION 8.15.0)
|
||||
set(EXPAT2_VERSION 2_7_1)
|
||||
set(CURL2_VERSION 8_15_0)
|
||||
set(EXPAT_VERSION 2.7.1)
|
||||
set(EXPAT2_VERSION 2_7_1)
|
||||
set(GCC_VERSION 15.1.0)
|
||||
set(GTEST_VERSION 1.17.0)
|
||||
set(ICU_VERSION 76-1)
|
||||
set(INNOSETUP_VERSION 6.4.3)
|
||||
set(JSON_VERSION 3.12.0)
|
||||
set(LIBSODIUM_VERSION 1.0.20)
|
||||
set(MINGW_VERSION 13.0.0)
|
||||
@@ -21,7 +22,9 @@ set(PKG_CONFIG_VERSION 0.29.2)
|
||||
set(PUGIXML_VERSION 1.15)
|
||||
set(ROCKSDB_VERSION 10.4.2)
|
||||
set(SPDLOG_VERSION 1.15.3)
|
||||
set(SQLITE2_VERSION 3.50.3)
|
||||
set(SQLITE_VERSION 3500300)
|
||||
set(SQLITE2_VERSION 3.50.3)
|
||||
set(STDUUID_VERSION 1.2.3)
|
||||
set(WINFSP_VERSION 2.1.25156)
|
||||
set(WINFSP2_VERSION 2.1)
|
||||
set(ZLIB_VERSION 1.3.1)
|
||||
|
@@ -1,6 +1,7 @@
|
||||
#!/bin/bash
|
||||
|
||||
PROJECT_NAME="repertory"
|
||||
PROJECT_MACOS_ICNS_NAME="icon.icns"
|
||||
|
||||
PROJECT_COMPANY_NAME="https://git.fifthgrid.com/blockstorage"
|
||||
PROJECT_URL="${PROJECT_COMPANY_NAME}/repertory"
|
||||
@@ -9,10 +10,10 @@ PROJECT_COPYRIGHT="Copyright <2018-2025> <MIT License> <${PROJECT_URL}>"
|
||||
PROJECT_DESC="Mount utility for Sia and S3"
|
||||
|
||||
PROJECT_MAJOR_VERSION=2
|
||||
PROJECT_MINOR_VERSION=0
|
||||
PROJECT_REVISION_VERSION=7
|
||||
PROJECT_RELEASE_NUM=1
|
||||
PROJECT_RELEASE_ITER=release
|
||||
PROJECT_MINOR_VERSION=1
|
||||
PROJECT_REVISION_VERSION=0
|
||||
PROJECT_RELEASE_NUM=0
|
||||
PROJECT_RELEASE_ITER=rc
|
||||
|
||||
PROJECT_APP_LIST=(${PROJECT_NAME})
|
||||
|
||||
|
@@ -11,7 +11,6 @@ RUN apt-get install -y \
|
||||
gdb \
|
||||
git \
|
||||
lib32stdc++6 \
|
||||
libgconf-2-4 \
|
||||
libglu1-mesa \
|
||||
libstdc++6 \
|
||||
python3 \
|
||||
|
@@ -12,6 +12,7 @@ RUN apk add \
|
||||
bzip2 \
|
||||
clang17-extra-tools \
|
||||
cmake \
|
||||
curl \
|
||||
file \
|
||||
flex \
|
||||
g++ \
|
||||
@@ -43,6 +44,7 @@ RUN apk add \
|
||||
ruby \
|
||||
texinfo \
|
||||
unzip \
|
||||
xvfb \
|
||||
wget \
|
||||
wine \
|
||||
xz \
|
||||
@@ -102,6 +104,39 @@ RUN echo -e \
|
||||
"system = 'windows'\n"\
|
||||
> ${MY_TOOLCHAIN_FILE_MESON}
|
||||
|
||||
RUN mkdir -p /opt/bin;echo -e \
|
||||
"#!/bin/sh\n"\
|
||||
"COUNT=0\n"\
|
||||
"echo \"Start waiting on \$@\"\n"\
|
||||
"while pgrep \"\$@\" > /dev/null; do \n"\
|
||||
" echo \"waiting ...\"\n"\
|
||||
" sleep 1;\n"\
|
||||
" COUNT=\$((COUNT+1))\n"\
|
||||
" if [ \$COUNT -eq 60 ]; then\n"\
|
||||
" exit 3;\n"\
|
||||
" fi\n"\
|
||||
"done\n"\
|
||||
"echo \"\$@ completed\"\n"\
|
||||
> /opt/bin/waitonprocess && \
|
||||
chmod +x /opt/bin/waitonprocess && \
|
||||
cat /opt/bin/waitonprocess
|
||||
|
||||
RUN echo -e \
|
||||
"#!/bin/sh\n"\
|
||||
"Xvfb \$DISPLAY &\n"\
|
||||
"tokill=\$!\n"\
|
||||
"wine wineboot --init\n"\
|
||||
"waitonprocess wineserver\n"\
|
||||
"\"\$@\"\n"\
|
||||
"retval=\$?\n"\
|
||||
"kill -15 \$tokill\n"\
|
||||
"wine wineboot --shutdown\n"\
|
||||
"return \$retval\n"\
|
||||
> /opt/bin/wine-x11-run && \
|
||||
chmod +x /opt/bin/wine-x11-run && \
|
||||
cat /opt/bin/wine-x11-run
|
||||
|
||||
ENV PATH="/opt/bin:${PATH}"
|
||||
SHELL [ "/bin/bash", "-c" ]
|
||||
|
||||
RUN mkdir -p \
|
||||
@@ -799,6 +834,7 @@ RUN if [ -f "/3rd_party/libevent-${MY_LIBEVENT_VERSION}-stable.tar.gz" ]; then \
|
||||
&& cmake .. \
|
||||
-DCMAKE_BUILD_TYPE=Release \
|
||||
-DCMAKE_CXX_STANDARD=${MY_CXX_STANDARD} \
|
||||
-DCMAKE_C_FLAGS="-include winsock2.h -include ws2tcpip.h -include iphlpapi.h" \
|
||||
-DCMAKE_INSTALL_PREFIX=${MY_MINGW_DIR} \
|
||||
-DCMAKE_TOOLCHAIN_FILE=${MY_TOOLCHAIN_FILE_CMAKE} \
|
||||
-DEVENT__DISABLE_OPENSSL=ON \
|
||||
@@ -888,6 +924,7 @@ RUN if [ -f "/3rd_party/rocksdb-${MY_ROCKSDB_VERSION}.tar.gz" ]; then \
|
||||
-DROCKSDB_INSTALL_ON_WINDOWS=ON \
|
||||
-DWITH_BENCHMARK=OFF \
|
||||
-DWITH_BENCHMARK_TOOLS=OFF \
|
||||
-DWITH_BZ2=OFF \
|
||||
-DWITH_CORE_TOOLS=OFF \
|
||||
-DWITH_EXAMPLES=OFF \
|
||||
-DWITH_GFLAGS=OFF \
|
||||
@@ -1119,6 +1156,33 @@ RUN if [ -f "/3rd_party/libdsm-${MY_LIBDSM_VERSION}.tar.gz" ]; then \
|
||||
&& rm -r libdsm-${MY_LIBDSM_VERSION} \
|
||||
; fi
|
||||
|
||||
RUN (mv ${MY_MINGW_DIR}/lib/*.dll ${MY_MINGW_DIR}/bin || echo "no dll's found") \
|
||||
ENV DISPLAY=:90
|
||||
ENV WINEDEBUG=-all,err+all
|
||||
|
||||
ARG INNOSETUP_VERSION
|
||||
ENV MY_INNOSETUP_VERSION=${INNOSETUP_VERSION}
|
||||
RUN rm -rf /root/.wine; \
|
||||
wine64 reg add 'HKEY_CURRENT_USER\Software\Wine' /v ShowDotFiles /d Y \
|
||||
&& while [ ! -f /root/.wine/user.reg ]; do sleep 1; done; \
|
||||
wine-x11-run wine64 /3rd_party/mingw64/innosetup-${MY_INNOSETUP_VERSION}.exe /SP- /VERYSILENT /ALLUSERS /SUPPRESSMSGBOXES /DOWNLOADISCRYPT=1
|
||||
|
||||
ARG UID=1000
|
||||
ARG GID=1000
|
||||
ARG USERNAME=myuser
|
||||
|
||||
RUN delgroup scanner || echo "no scanner group found"
|
||||
|
||||
RUN addgroup -g $GID $USERNAME && \
|
||||
adduser -D -u $UID -G $USERNAME -h /home/$USERNAME $USERNAME
|
||||
|
||||
RUN rsync -av --progress /root/.wine/ /home/$USERNAME/.wine/ && \
|
||||
chown -R $UID:$GID -R /home/$USERNAME/.wine/
|
||||
|
||||
RUN (cp ${MY_MINGW_DIR}/lib/*.dll ${MY_MINGW_DIR}/bin || echo "no dll's found") \
|
||||
&& chmod 0777 -R ${MY_MINGW_DIR} \
|
||||
&& rm -rf /3rd_party
|
||||
&& rm -rf /3rd_party \
|
||||
&& rm -rf /root/.wine
|
||||
|
||||
USER $USERNAME
|
||||
WORKDIR /home/$USERNAME
|
||||
|
||||
|
@@ -8,3 +8,7 @@ rsync -av --progress ${CURRENT_DIR}/${PROJECT_NAME}/${PROJECT_NAME}_test/test_in
|
||||
|
||||
rsync -av --progress ${CURRENT_DIR}/${PROJECT_NAME}/${PROJECT_NAME}_test/test_input/ \
|
||||
${PROJECT_DIST_DIR}/test_input/
|
||||
|
||||
rsync -av --progress ${CURRENT_DIR}/assets/icon.ico ${PROJECT_DIST_DIR}/icon.ico
|
||||
|
||||
rsync -av --progress ${CURRENT_DIR}/assets/blue/logo.iconset/icon_128x128.png ${PROJECT_DIST_DIR}/repertory.png
|
||||
|
@@ -1,7 +1,20 @@
|
||||
set(CMAKE_CXX_FLAGS "-include common.hpp ${CMAKE_CXX_FLAGS}")
|
||||
|
||||
if (PROJECT_IS_DARWIN)
|
||||
configure_file(
|
||||
${CMAKE_SOURCE_DIR}/${PROJECT_NAME}/Info.plist.in
|
||||
${CMAKE_SOURCE_DIR}/${PROJECT_NAME}/Info.plist
|
||||
@ONLY
|
||||
)
|
||||
endif()
|
||||
|
||||
add_project_library(lib${PROJECT_NAME} "" "" "${PROJECT_ADDITIONAL_SOURCES}")
|
||||
|
||||
add_project_executable(${PROJECT_NAME} lib${PROJECT_NAME} lib${PROJECT_NAME})
|
||||
if (PROJECT_IS_DARWIN)
|
||||
set_target_properties(${PROJECT_NAME} PROPERTIES
|
||||
MACOSX_BUNDLE_INFO_PLIST ${CMAKE_CURRENT_SOURCE_DIR}/${PROJECT_NAME}/Info.plist
|
||||
)
|
||||
endif()
|
||||
|
||||
add_project_test_executable(${PROJECT_NAME}_test lib${PROJECT_NAME} lib${PROJECT_NAME})
|
||||
|
171
repertory.iss.in
Normal file
@@ -0,0 +1,171 @@
|
||||
; Script generated by the Inno Setup Script Wizard.
|
||||
; SEE THE DOCUMENTATION FOR DETAILS ON CREATING INNO SETUP SCRIPT FILES!
|
||||
|
||||
#define MyAppName "repertory"
|
||||
#define MyAppVersion "@PROJECT_MAJOR_VERSION@.@PROJECT_MINOR_VERSION@.@PROJECT_REVISION_VERSION@-@PROJECT_RELEASE_ITER@_@PROJECT_GIT_REV@"
|
||||
#define MyAppPublisher "BlockStorage"
|
||||
#define MyAppURL "https://git.fifthgrid.com/BlockStorage/repertory"
|
||||
#define MyAppExeName "repertory.exe"
|
||||
|
||||
[Setup]
|
||||
; NOTE: The value of AppId uniquely identifies this application. Do not use the same AppId value in installers for other applications.
|
||||
; (To generate a new GUID, click Tools | Generate GUID inside the IDE.)
|
||||
AppId={{BD165823-1DEF-4D23-87DC-3D7A9BB73A00}
|
||||
AppName={#MyAppName}
|
||||
AppPublisher={#MyAppPublisher}
|
||||
AppPublisherURL={#MyAppURL}
|
||||
AppSupportURL={#MyAppURL}
|
||||
AppUpdatesURL={#MyAppURL}
|
||||
AppVersion={#MyAppVersion}
|
||||
ArchitecturesAllowed=x64compatible
|
||||
ArchitecturesInstallIn64BitMode=x64compatible
|
||||
DefaultDirName={autopf}\{#MyAppName}
|
||||
DefaultGroupName={#MyAppName}
|
||||
DisableProgramGroupPage=yes
|
||||
LicenseFile=repertory\LICENSE.md
|
||||
OutputBaseFilename=repertory_{#MyAppVersion}_windows_@PROJECT_MARCH@_setup
|
||||
PrivilegesRequired=admin
|
||||
SolidCompression=yes
|
||||
SetupIconFile=repertory\icon.ico
|
||||
UninstallDisplayIcon={app}\icon.ico
|
||||
WizardStyle=modern
|
||||
|
||||
[code]
|
||||
const
|
||||
SMTO_ABORTIFHUNG = $0002;
|
||||
WM_SETTINGCHANGE = $001A;
|
||||
|
||||
type
|
||||
LPARAM = LongWord;
|
||||
LRESULT = LongWord;
|
||||
WPARAM = LongWord;
|
||||
|
||||
function SendMessageTimeout(hWnd: HWND; Msg: UINT; wParam: WPARAM; lParam: AnsiString;
|
||||
fuFlags: UINT; uTimeout: UINT; out lpdwResult: DWORD): LRESULT;
|
||||
external 'SendMessageTimeoutA@user32.dll stdcall';
|
||||
|
||||
procedure RefreshEnvironment();
|
||||
var
|
||||
EnvStr: AnsiString;
|
||||
R: DWORD;
|
||||
begin
|
||||
EnvStr := 'Environment' + #0;
|
||||
|
||||
SendMessageTimeout(HWND_BROADCAST, WM_SETTINGCHANGE, 0,
|
||||
EnvStr, SMTO_ABORTIFHUNG, 5000, R);
|
||||
end;
|
||||
|
||||
function NormalizeSemicolons(S: string): string;
|
||||
begin
|
||||
while Pos(';;', S) > 0 do
|
||||
StringChange(S, ';;', ';');
|
||||
Result := S;
|
||||
end;
|
||||
|
||||
procedure AddAppToPath();
|
||||
var
|
||||
OldPath, NewPath, FinalPath: string;
|
||||
begin
|
||||
if not RegQueryStringValue(HKLM,
|
||||
'SYSTEM\CurrentControlSet\Control\Session Manager\Environment',
|
||||
'Path', OldPath)
|
||||
then
|
||||
OldPath := '';
|
||||
|
||||
NewPath := ExpandConstant('{app}');
|
||||
if Pos(LowerCase(NewPath), LowerCase(OldPath)) = 0 then
|
||||
begin
|
||||
if (OldPath <> '') and (Copy(OldPath, Length(OldPath), 1) <> ';') then
|
||||
OldPath := OldPath + ';';
|
||||
|
||||
FinalPath := NormalizeSemicolons(OldPath + NewPath + ';');
|
||||
RegWriteExpandStringValue(HKLM,
|
||||
'SYSTEM\CurrentControlSet\Control\Session Manager\Environment',
|
||||
'Path', FinalPath);
|
||||
|
||||
RefreshEnvironment();
|
||||
end;
|
||||
end;
|
||||
|
||||
procedure RemoveAppFromPath();
|
||||
var
|
||||
OldPath, NewPath, Token, Remainder, FinalPath: string;
|
||||
p: Integer;
|
||||
begin
|
||||
if not RegQueryStringValue(HKLM,
|
||||
'SYSTEM\CurrentControlSet\Control\Session Manager\Environment',
|
||||
'Path', OldPath) then
|
||||
Exit;
|
||||
|
||||
NewPath := ExpandConstant('{app}');
|
||||
Remainder := OldPath;
|
||||
FinalPath := '';
|
||||
|
||||
while Length(Remainder) > 0 do
|
||||
begin
|
||||
p := Pos(';', Remainder);
|
||||
if p = 0 then
|
||||
begin
|
||||
Token := Remainder;
|
||||
Remainder := '';
|
||||
end
|
||||
else
|
||||
begin
|
||||
Token := Copy(Remainder, 1, p - 1);
|
||||
Delete(Remainder, 1, p);
|
||||
end;
|
||||
|
||||
Token := Trim(Token);
|
||||
if (Token <> '') and (CompareText(Token, NewPath) <> 0) then
|
||||
begin
|
||||
if (FinalPath <> '') and (FinalPath[Length(FinalPath)] <> ';') then
|
||||
FinalPath := FinalPath + ';';
|
||||
FinalPath := FinalPath + Token;
|
||||
end;
|
||||
end;
|
||||
|
||||
while Pos(';;', FinalPath) > 0 do
|
||||
StringChange(FinalPath, ';;', ';');
|
||||
if (FinalPath <> '') and (FinalPath[Length(FinalPath)] = ';') then
|
||||
Delete(FinalPath, Length(FinalPath), 1);
|
||||
|
||||
RegWriteExpandStringValue(HKLM,
|
||||
'SYSTEM\CurrentControlSet\Control\Session Manager\Environment',
|
||||
'Path', FinalPath);
|
||||
|
||||
RefreshEnvironment();
|
||||
end;
|
||||
|
||||
procedure CurStepChanged(CurStep: TSetupStep);
|
||||
begin
|
||||
if CurStep = ssPostInstall then
|
||||
begin
|
||||
AddAppToPath();
|
||||
end;
|
||||
end;
|
||||
|
||||
procedure DeinitializeUninstall();
|
||||
begin
|
||||
RemoveAppFromPath();
|
||||
end;
|
||||
|
||||
[Languages]
|
||||
Name: "english"; MessagesFile: "compiler:Default.isl"
|
||||
|
||||
[Components]
|
||||
Name: "main"; Description: "Repertory Core"; Types: full compact custom; Flags: fixed
|
||||
Name: "winfsp"; Description: "WinFSP v@WINFSP_VERSION@"; Types: full custom
|
||||
|
||||
[Files]
|
||||
Source: "repertory\*.*"; DestDir: "{app}"; Flags: ignoreversion recursesubdirs createallsubdirs; Components: main
|
||||
Source: "3rd_party\winfsp-@WINFSP_VERSION@.msi"; DestDir: "{app}"; Flags: ignoreversion; Components: winfsp
|
||||
|
||||
[Icons]
|
||||
Name: "{group}\{#MyAppName}"; Filename: "{app}\{#MyAppExeName}"; Parameters: "-ui --hidden"; IconFilename: "{app}\assets\icon.ico"
|
||||
|
||||
[Run]
|
||||
Filename: "msiexec.exe"; WorkingDir: "{app}"; Parameters: "/i winfsp-@WINFSP_VERSION@.msi /norestart"; \
|
||||
Flags: 64bit hidewizard waituntilterminated skipifsilent; Components: winfsp
|
||||
Filename: "{app}\repertory.exe"; WorkingDir: "{app}"; Parameters: "-ui --hidden"; \
|
||||
Description: "Launch Repertory Management Portal"; \
|
||||
Flags: 64bit runhidden nowait postinstall skipifsilent; Components: main
|
21
repertory/Info.plist.in
Normal file
@@ -0,0 +1,21 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN"
|
||||
"http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
||||
<plist version="1.0">
|
||||
<dict>
|
||||
<key>CFBundleExecutable</key>
|
||||
<string>@PROJECT_NAME@</string>
|
||||
<key>CFBundleIdentifier</key>
|
||||
<string>com.fifthgrid.blockstorage.@PROJECT_NAME@</string>
|
||||
<key>CFBundleName</key>
|
||||
<string>@PROJECT_NAME@</string>
|
||||
<key>CFBundleVersion</key>
|
||||
<string>@PROJECT_MAJOR_VERSION@.@PROJECT_MINOR_VERSION@.@PROJECT_REVISION_VERSION@-@PROJECT_RELEASE_ITER@_@PROJECT_GIT_REV@</string>
|
||||
<key>CFBundlePackageType</key>
|
||||
<string>APPL</string>
|
||||
<key>LSUIElement</key>
|
||||
<true/>
|
||||
<key>CFBundleIconFile</key>
|
||||
<string>@PROJECT_MACOS_ICNS_NAME@</string>
|
||||
</dict>
|
||||
</plist>
|
@@ -31,24 +31,22 @@ private:
|
||||
static stop_type stop_requested;
|
||||
|
||||
public:
|
||||
[[nodiscard]] static auto default_agent_name(const provider_type &prov)
|
||||
[[nodiscard]] static auto default_agent_name(provider_type prov)
|
||||
-> std::string;
|
||||
|
||||
[[nodiscard]] static auto default_api_port(const provider_type &prov)
|
||||
[[nodiscard]] static auto default_api_port(provider_type prov)
|
||||
-> std::uint16_t;
|
||||
|
||||
[[nodiscard]] static auto default_data_directory(const provider_type &prov)
|
||||
[[nodiscard]] static auto default_data_directory(provider_type prov)
|
||||
-> std::string;
|
||||
|
||||
[[nodiscard]] static auto default_remote_api_port(const provider_type &prov)
|
||||
[[nodiscard]] static auto default_remote_api_port(provider_type prov)
|
||||
-> std::uint16_t;
|
||||
|
||||
[[nodiscard]] static auto default_rpc_port() -> std::uint16_t;
|
||||
|
||||
[[nodiscard]] static auto get_provider_display_name(const provider_type &prov)
|
||||
[[nodiscard]] static auto get_provider_display_name(provider_type prov)
|
||||
-> std::string;
|
||||
|
||||
[[nodiscard]] static auto get_provider_name(const provider_type &prov)
|
||||
[[nodiscard]] static auto get_provider_name(provider_type prov)
|
||||
-> std::string;
|
||||
|
||||
[[nodiscard]] static auto get_root_data_directory() -> std::string;
|
||||
@@ -59,7 +57,7 @@ public:
|
||||
static void set_stop_requested();
|
||||
|
||||
public:
|
||||
app_config(const provider_type &prov, std::string_view data_directory = "");
|
||||
app_config(provider_type prov, std::string_view data_directory = "");
|
||||
|
||||
app_config() = delete;
|
||||
app_config(app_config &&) = delete;
|
||||
@@ -72,9 +70,9 @@ public:
|
||||
|
||||
private:
|
||||
provider_type prov_;
|
||||
atomic<std::string> api_password_;
|
||||
utils::atomic<std::string> api_password_;
|
||||
std::atomic<std::uint16_t> api_port_;
|
||||
atomic<std::string> api_user_;
|
||||
utils::atomic<std::string> api_user_;
|
||||
std::atomic<bool> config_changed_;
|
||||
std::atomic<database_type> db_type_{database_type::rocksdb};
|
||||
std::atomic<std::uint8_t> download_timeout_secs_;
|
||||
@@ -100,14 +98,14 @@ private:
|
||||
private:
|
||||
std::string cache_directory_;
|
||||
std::string data_directory_;
|
||||
atomic<encrypt_config> encrypt_config_;
|
||||
atomic<host_config> host_config_;
|
||||
utils::atomic<encrypt_config> encrypt_config_;
|
||||
utils::atomic<host_config> host_config_;
|
||||
std::string log_directory_;
|
||||
mutable std::recursive_mutex read_write_mutex_;
|
||||
atomic<remote::remote_config> remote_config_;
|
||||
atomic<remote::remote_mount> remote_mount_;
|
||||
atomic<s3_config> s3_config_;
|
||||
atomic<sia_config> sia_config_;
|
||||
utils::atomic<remote::remote_config> remote_config_;
|
||||
utils::atomic<remote::remote_mount> remote_mount_;
|
||||
utils::atomic<s3_config> s3_config_;
|
||||
utils::atomic<sia_config> sia_config_;
|
||||
std::unordered_map<std::string, std::function<std::string()>>
|
||||
value_get_lookup_;
|
||||
std::unordered_map<std::string,
|
||||
|
@@ -43,7 +43,7 @@ private:
|
||||
using write_callback = size_t (*)(char *, size_t, size_t, void *);
|
||||
|
||||
struct read_write_info final {
|
||||
data_buffer data{};
|
||||
data_buffer data;
|
||||
stop_type_callback stop_requested_cb;
|
||||
};
|
||||
|
||||
@@ -93,9 +93,8 @@ public:
|
||||
}
|
||||
|
||||
data_buffer data{};
|
||||
const auto key =
|
||||
utils::encryption::generate_key<utils::encryption::hash_256_t>(
|
||||
request.decryption_token.value());
|
||||
const auto key = utils::encryption::generate_key<utils::hash::hash_256_t>(
|
||||
request.decryption_token.value());
|
||||
if (not utils::encryption::read_encrypted_range(
|
||||
request.range.value(), key,
|
||||
[&](data_buffer &ct, std::uint64_t start_offset,
|
||||
|
@@ -22,7 +22,7 @@
|
||||
#ifndef REPERTORY_INCLUDE_COMMON_HPP_
|
||||
#define REPERTORY_INCLUDE_COMMON_HPP_
|
||||
|
||||
#if defined(__GNUC__)
|
||||
#if defined(__GNUC__) && !defined(PROJECT_IS_DARWIN)
|
||||
// clang-format off
|
||||
#define REPERTORY_IGNORE_WARNINGS_ENABLE() \
|
||||
_Pragma("GCC diagnostic push") \
|
||||
@@ -59,7 +59,7 @@ inline constexpr std::string_view REPERTORY_DATA_NAME{"repertory2"};
|
||||
inline constexpr std::wstring_view REPERTORY_W{L"repertory"};
|
||||
|
||||
inline constexpr std::uint64_t REPERTORY_CONFIG_VERSION{2ULL};
|
||||
inline constexpr std::string_view REPERTORY_MIN_REMOTE_VERSION{"2.0.0"};
|
||||
inline constexpr std::string_view REPERTORY_MIN_REMOTE_VERSION{"2.1.0"};
|
||||
inline constexpr std::string_view RENTERD_MIN_VERSION{"2.0.0"};
|
||||
|
||||
#define REPERTORY_INVALID_HANDLE INVALID_HANDLE_VALUE
|
||||
|
@@ -29,6 +29,13 @@ class i_file_db {
|
||||
INTERFACE_SETUP(i_file_db);
|
||||
|
||||
public:
|
||||
struct directory_data final {
|
||||
std::string api_path;
|
||||
std::pair<utils::encryption::kdf_config, utils::encryption::kdf_config>
|
||||
kdf_configs;
|
||||
std::string source_path;
|
||||
};
|
||||
|
||||
struct file_info final {
|
||||
std::string api_path;
|
||||
bool directory{};
|
||||
@@ -40,13 +47,14 @@ public:
|
||||
std::uint64_t file_size{};
|
||||
std::vector<
|
||||
std::array<unsigned char, crypto_aead_xchacha20poly1305_IETF_NPUBBYTES>>
|
||||
iv_list{};
|
||||
iv_list;
|
||||
std::pair<utils::encryption::kdf_config, utils::encryption::kdf_config>
|
||||
kdf_configs;
|
||||
std::string source_path;
|
||||
};
|
||||
|
||||
public:
|
||||
[[nodiscard]] virtual auto add_directory(const std::string &api_path,
|
||||
const std::string &source_path)
|
||||
[[nodiscard]] virtual auto add_or_update_directory(const directory_data &data)
|
||||
-> api_error = 0;
|
||||
|
||||
[[nodiscard]] virtual auto add_or_update_file(const file_data &data)
|
||||
@@ -68,6 +76,10 @@ public:
|
||||
get_directory_api_path(const std::string &source_path,
|
||||
std::string &api_path) const -> api_error = 0;
|
||||
|
||||
[[nodiscard]] virtual auto get_directory_data(const std::string &api_path,
|
||||
directory_data &data) const
|
||||
-> api_error = 0;
|
||||
|
||||
[[nodiscard]] virtual auto
|
||||
get_directory_source_path(const std::string &api_path,
|
||||
std::string &source_path) const -> api_error = 0;
|
||||
|
@@ -67,8 +67,7 @@ private:
|
||||
rocksdb::Transaction *txn) -> rocksdb::Status;
|
||||
|
||||
public:
|
||||
[[nodiscard]] auto add_directory(const std::string &api_path,
|
||||
const std::string &source_path)
|
||||
[[nodiscard]] auto add_or_update_directory(const directory_data &data)
|
||||
-> api_error override;
|
||||
|
||||
[[nodiscard]] auto add_or_update_file(const i_file_db::file_data &data)
|
||||
@@ -90,6 +89,10 @@ public:
|
||||
std::string &api_path) const
|
||||
-> api_error override;
|
||||
|
||||
[[nodiscard]] auto get_directory_data(const std::string &api_path,
|
||||
i_file_db::directory_data &data) const
|
||||
-> api_error override;
|
||||
|
||||
[[nodiscard]] auto get_directory_source_path(const std::string &api_path,
|
||||
std::string &source_path) const
|
||||
-> api_error override;
|
||||
|
@@ -42,8 +42,8 @@ private:
|
||||
utils::db::sqlite::db3_t db_;
|
||||
|
||||
public:
|
||||
[[nodiscard]] auto add_directory(const std::string &api_path,
|
||||
const std::string &source_path)
|
||||
[[nodiscard]] auto
|
||||
add_or_update_directory(const i_file_db::directory_data &data)
|
||||
-> api_error override;
|
||||
|
||||
[[nodiscard]] auto add_or_update_file(const i_file_db::file_data &data)
|
||||
@@ -65,6 +65,10 @@ public:
|
||||
std::string &api_path) const
|
||||
-> api_error override;
|
||||
|
||||
[[nodiscard]] auto get_directory_data(const std::string &api_path,
|
||||
i_file_db::directory_data &data) const
|
||||
-> api_error override;
|
||||
|
||||
[[nodiscard]] auto get_directory_source_path(const std::string &api_path,
|
||||
std::string &source_path) const
|
||||
-> api_error override;
|
||||
|
@@ -52,7 +52,11 @@ private:
|
||||
|
||||
protected:
|
||||
bool atime_enabled_{true};
|
||||
bool console_enabled_{false};
|
||||
bool console_enabled_{true};
|
||||
bool foreground_{false};
|
||||
#if defined(__APPLE__)
|
||||
std::string label_;
|
||||
#endif // defined(__APPLE__)
|
||||
std::optional<gid_t> forced_gid_;
|
||||
std::optional<uid_t> forced_uid_;
|
||||
std::optional<mode_t> forced_umask_;
|
||||
@@ -95,50 +99,51 @@ private:
|
||||
|
||||
#if FUSE_USE_VERSION >= 30
|
||||
[[nodiscard]] static auto chmod_(const char *path, mode_t mode,
|
||||
struct fuse_file_info *fi) -> int;
|
||||
struct fuse_file_info *f_info) -> int;
|
||||
#else // FUSE_USE_VERSION < 30
|
||||
[[nodiscard]] static auto chmod_(const char *path, mode_t mode) -> int;
|
||||
#endif // FUSE_USE_VERSION >= 30
|
||||
|
||||
#if FUSE_USE_VERSION >= 30
|
||||
[[nodiscard]] static auto chown_(const char *path, uid_t uid, gid_t gid,
|
||||
struct fuse_file_info *fi) -> int;
|
||||
struct fuse_file_info *f_info) -> int;
|
||||
#else // FUSE_USE_VERSION < 30
|
||||
[[nodiscard]] static auto chown_(const char *path, uid_t uid, gid_t gid)
|
||||
-> int;
|
||||
#endif // FUSE_USE_VERSION >= 30
|
||||
|
||||
[[nodiscard]] static auto create_(const char *path, mode_t mode,
|
||||
struct fuse_file_info *fi) -> int;
|
||||
struct fuse_file_info *f_info) -> int;
|
||||
|
||||
static void destroy_(void *ptr);
|
||||
|
||||
[[nodiscard]] static auto fallocate_(const char *path, int mode, off_t offset,
|
||||
off_t length, struct fuse_file_info *fi)
|
||||
-> int;
|
||||
off_t length,
|
||||
struct fuse_file_info *f_info) -> int;
|
||||
|
||||
#if FUSE_USE_VERSION < 30
|
||||
[[nodiscard]] static auto fgetattr_(const char *path, struct stat *st,
|
||||
struct fuse_file_info *fi) -> int;
|
||||
[[nodiscard]] static auto fgetattr_(const char *path, struct stat *u_stat,
|
||||
struct fuse_file_info *f_info) -> int;
|
||||
#endif // FUSE_USE_VERSION < 30
|
||||
|
||||
#if defined(__APPLE__)
|
||||
[[nodiscard]] static auto fsetattr_x_(const char *path,
|
||||
struct setattr_x *attr,
|
||||
struct fuse_file_info *fi) -> int;
|
||||
struct fuse_file_info *f_info) -> int;
|
||||
#endif // defined(__APPLE__)
|
||||
|
||||
[[nodiscard]] static auto fsync_(const char *path, int datasync,
|
||||
struct fuse_file_info *fi) -> int;
|
||||
struct fuse_file_info *f_info) -> int;
|
||||
|
||||
[[nodiscard]] static auto ftruncate_(const char *path, off_t size,
|
||||
struct fuse_file_info *fi) -> int;
|
||||
struct fuse_file_info *f_info) -> int;
|
||||
|
||||
#if FUSE_USE_VERSION >= 30
|
||||
[[nodiscard]] static auto getattr_(const char *path, struct stat *st,
|
||||
struct fuse_file_info *fi) -> int;
|
||||
[[nodiscard]] static auto getattr_(const char *path, struct stat *u_stat,
|
||||
struct fuse_file_info *f_info) -> int;
|
||||
#else // FUSE_USE_VERSION < 30
|
||||
[[nodiscard]] static auto getattr_(const char *path, struct stat *st) -> int;
|
||||
[[nodiscard]] static auto getattr_(const char *path, struct stat *u_stat)
|
||||
-> int;
|
||||
#endif // FUSE_USE_VERSION >= 30
|
||||
|
||||
#if defined(__APPLE__)
|
||||
@@ -156,33 +161,34 @@ private:
|
||||
|
||||
[[nodiscard]] static auto mkdir_(const char *path, mode_t mode) -> int;
|
||||
|
||||
[[nodiscard]] static auto open_(const char *path, struct fuse_file_info *fi)
|
||||
-> int;
|
||||
[[nodiscard]] static auto open_(const char *path,
|
||||
struct fuse_file_info *f_info) -> int;
|
||||
|
||||
[[nodiscard]] static auto opendir_(const char *path,
|
||||
struct fuse_file_info *fi) -> int;
|
||||
struct fuse_file_info *f_info) -> int;
|
||||
|
||||
[[nodiscard]] static auto read_(const char *path, char *buffer,
|
||||
size_t read_size, off_t read_offset,
|
||||
struct fuse_file_info *fi) -> int;
|
||||
struct fuse_file_info *f_info) -> int;
|
||||
|
||||
#if FUSE_USE_VERSION >= 30
|
||||
[[nodiscard]] static auto readdir_(const char *path, void *buf,
|
||||
fuse_fill_dir_t fuse_fill_dir,
|
||||
off_t offset, struct fuse_file_info *fi,
|
||||
off_t offset,
|
||||
struct fuse_file_info *f_info,
|
||||
fuse_readdir_flags flags) -> int;
|
||||
#else // FUSE_USE_VERSION < 30
|
||||
[[nodiscard]] static auto readdir_(const char *path, void *buf,
|
||||
fuse_fill_dir_t fuse_fill_dir,
|
||||
off_t offset, struct fuse_file_info *fi)
|
||||
-> int;
|
||||
off_t offset,
|
||||
struct fuse_file_info *f_info) -> int;
|
||||
#endif // FUSE_USE_VERSION >= 30
|
||||
|
||||
[[nodiscard]] static auto release_(const char *path,
|
||||
struct fuse_file_info *fi) -> int;
|
||||
struct fuse_file_info *f_info) -> int;
|
||||
|
||||
[[nodiscard]] static auto releasedir_(const char *path,
|
||||
struct fuse_file_info *fi) -> int;
|
||||
struct fuse_file_info *f_info) -> int;
|
||||
|
||||
#if FUSE_USE_VERSION >= 30
|
||||
[[nodiscard]] static auto rename_(const char *from, const char *to,
|
||||
@@ -248,7 +254,7 @@ private:
|
||||
|
||||
#if FUSE_USE_VERSION >= 30
|
||||
[[nodiscard]] static auto truncate_(const char *path, off_t size,
|
||||
struct fuse_file_info *fi) -> int;
|
||||
struct fuse_file_info *f_info) -> int;
|
||||
#else // FUSE_USE_VERSION < 30
|
||||
[[nodiscard]] static auto truncate_(const char *path, off_t size) -> int;
|
||||
#endif // FUSE_USE_VERSION >= 30
|
||||
@@ -258,7 +264,7 @@ private:
|
||||
#if FUSE_USE_VERSION >= 30
|
||||
[[nodiscard]] static auto utimens_(const char *path,
|
||||
const struct timespec tv[2],
|
||||
struct fuse_file_info *fi) -> int;
|
||||
struct fuse_file_info *f_info) -> int;
|
||||
#else // FUSE_USE_VERSION < 30
|
||||
[[nodiscard]] static auto utimens_(const char *path,
|
||||
const struct timespec tv[2]) -> int;
|
||||
@@ -266,7 +272,7 @@ private:
|
||||
|
||||
[[nodiscard]] static auto write_(const char *path, const char *buffer,
|
||||
size_t write_size, off_t write_offset,
|
||||
struct fuse_file_info *fi) -> int;
|
||||
struct fuse_file_info *f_info) -> int;
|
||||
|
||||
protected:
|
||||
[[nodiscard]] virtual auto access_impl(std::string /*api_path*/, int /*mask*/)
|
||||
@@ -284,11 +290,11 @@ protected:
|
||||
#if FUSE_USE_VERSION >= 30
|
||||
[[nodiscard]] virtual auto chmod_impl(std::string /*api_path*/,
|
||||
mode_t /*mode*/,
|
||||
struct fuse_file_info * /*fi*/)
|
||||
struct fuse_file_info * /*f_info*/)
|
||||
-> api_error {
|
||||
return api_error::not_implemented;
|
||||
}
|
||||
#else //FUSE_USE_VERSION < 30
|
||||
#else // FUSE_USE_VERSION < 30
|
||||
[[nodiscard]] virtual auto chmod_impl(std::string /*api_path*/,
|
||||
mode_t /*mode*/) -> api_error {
|
||||
return api_error::not_implemented;
|
||||
@@ -298,11 +304,11 @@ protected:
|
||||
#if FUSE_USE_VERSION >= 30
|
||||
[[nodiscard]] virtual auto chown_impl(std::string /*api_path*/, uid_t /*uid*/,
|
||||
gid_t /*gid*/,
|
||||
struct fuse_file_info * /*fi*/)
|
||||
struct fuse_file_info * /*f_info*/)
|
||||
-> api_error {
|
||||
return api_error::not_implemented;
|
||||
}
|
||||
#else // FUSE_USE_VERSION < 30
|
||||
#else // FUSE_USE_VERSION < 30
|
||||
[[nodiscard]] virtual auto chown_impl(std::string /*api_path*/, uid_t /*uid*/,
|
||||
gid_t /*gid*/) -> api_error {
|
||||
return api_error::not_implemented;
|
||||
@@ -311,7 +317,7 @@ protected:
|
||||
|
||||
[[nodiscard]] virtual auto create_impl(std::string /*api_path*/,
|
||||
mode_t /*mode*/,
|
||||
struct fuse_file_info * /*fi*/)
|
||||
struct fuse_file_info * /*f_info*/)
|
||||
-> api_error {
|
||||
return api_error::not_implemented;
|
||||
}
|
||||
@@ -320,14 +326,14 @@ protected:
|
||||
|
||||
[[nodiscard]] virtual auto
|
||||
fallocate_impl(std::string /*api_path*/, int /*mode*/, off_t /*offset*/,
|
||||
off_t /*length*/, struct fuse_file_info * /*fi*/)
|
||||
off_t /*length*/, struct fuse_file_info * /*f_info*/)
|
||||
-> api_error {
|
||||
return api_error::not_implemented;
|
||||
}
|
||||
|
||||
[[nodiscard]] virtual auto fgetattr_impl(std::string /*api_path*/,
|
||||
struct stat * /*st*/,
|
||||
struct fuse_file_info * /*fi*/)
|
||||
struct stat * /*u_stat*/,
|
||||
struct fuse_file_info * /*f_info*/)
|
||||
-> api_error {
|
||||
return api_error::not_implemented;
|
||||
}
|
||||
@@ -335,7 +341,7 @@ protected:
|
||||
#if defined(__APPLE__)
|
||||
[[nodiscard]] virtual auto fsetattr_x_impl(std::string /*api_path*/,
|
||||
struct setattr_x * /*attr*/,
|
||||
struct fuse_file_info * /*fi*/)
|
||||
struct fuse_file_info * /*f_info*/)
|
||||
-> api_error {
|
||||
return api_error::not_implemented;
|
||||
}
|
||||
@@ -343,7 +349,7 @@ protected:
|
||||
|
||||
[[nodiscard]] virtual auto fsync_impl(std::string /*api_path*/,
|
||||
int /*datasync*/,
|
||||
struct fuse_file_info * /*fi*/)
|
||||
struct fuse_file_info * /*f_info*/)
|
||||
-> api_error {
|
||||
return api_error::not_implemented;
|
||||
}
|
||||
@@ -351,7 +357,7 @@ protected:
|
||||
#if FUSE_USE_VERSION < 30
|
||||
[[nodiscard]] virtual auto ftruncate_impl(std::string /*api_path*/,
|
||||
off_t /*size*/,
|
||||
struct fuse_file_info * /*fi*/)
|
||||
struct fuse_file_info * /*f_info*/)
|
||||
-> api_error {
|
||||
return api_error::not_implemented;
|
||||
}
|
||||
@@ -359,14 +365,15 @@ protected:
|
||||
|
||||
#if FUSE_USE_VERSION >= 30
|
||||
[[nodiscard]] virtual auto getattr_impl(std::string /*api_path*/,
|
||||
struct stat * /*st*/,
|
||||
struct fuse_file_info * /*fi*/)
|
||||
struct stat * /*u_stat*/,
|
||||
struct fuse_file_info * /*f_info*/)
|
||||
-> api_error {
|
||||
return api_error::not_implemented;
|
||||
}
|
||||
#else // FUSE_USE_VERSION < 30
|
||||
#else // FUSE_USE_VERSION < 30
|
||||
[[nodiscard]] virtual auto getattr_impl(std::string /*api_path*/,
|
||||
struct stat * /*st*/) -> api_error {
|
||||
struct stat * /*u_stat*/)
|
||||
-> api_error {
|
||||
return api_error::not_implemented;
|
||||
}
|
||||
#endif // FUSE_USE_VERSION >= 30
|
||||
@@ -383,7 +390,7 @@ protected:
|
||||
#if FUSE_USE_VERSION >= 30
|
||||
virtual auto init_impl(struct fuse_conn_info *conn, struct fuse_config *cfg)
|
||||
-> void *;
|
||||
#else // FUSE_USE_VERSION < 30
|
||||
#else // FUSE_USE_VERSION < 30
|
||||
virtual auto init_impl(struct fuse_conn_info *conn) -> void *;
|
||||
#endif // FUSE_USE_VERSION >= 30
|
||||
|
||||
@@ -393,20 +400,20 @@ protected:
|
||||
}
|
||||
|
||||
[[nodiscard]] virtual auto open_impl(std::string /*api_path*/,
|
||||
struct fuse_file_info * /*fi*/)
|
||||
struct fuse_file_info * /*f_info*/)
|
||||
-> api_error {
|
||||
return api_error::not_implemented;
|
||||
}
|
||||
|
||||
[[nodiscard]] virtual auto opendir_impl(std::string /*api_path*/,
|
||||
struct fuse_file_info * /*fi*/)
|
||||
struct fuse_file_info * /*f_info*/)
|
||||
-> api_error {
|
||||
return api_error::not_implemented;
|
||||
}
|
||||
|
||||
[[nodiscard]] virtual auto
|
||||
read_impl(std::string /*api_path*/, char * /*buffer*/, size_t /*read_size*/,
|
||||
off_t /*read_offset*/, struct fuse_file_info * /*fi*/,
|
||||
off_t /*read_offset*/, struct fuse_file_info * /*f_info*/,
|
||||
std::size_t & /*bytes_read*/) -> api_error {
|
||||
return api_error::not_implemented;
|
||||
}
|
||||
@@ -415,27 +422,27 @@ protected:
|
||||
[[nodiscard]] virtual auto
|
||||
readdir_impl(std::string /*api_path*/, void * /*buf*/,
|
||||
fuse_fill_dir_t /*fuse_fill_dir*/, off_t /*offset*/,
|
||||
struct fuse_file_info * /*fi*/, fuse_readdir_flags /*flags*/)
|
||||
struct fuse_file_info * /*f_info*/, fuse_readdir_flags /*flags*/)
|
||||
-> api_error {
|
||||
return api_error::not_implemented;
|
||||
}
|
||||
#else // FUSE_USE_VERSION < 30
|
||||
#else // FUSE_USE_VERSION < 30
|
||||
[[nodiscard]] virtual auto
|
||||
readdir_impl(std::string /*api_path*/, void * /*buf*/,
|
||||
fuse_fill_dir_t /*fuse_fill_dir*/, off_t /*offset*/,
|
||||
struct fuse_file_info * /*fi*/) -> api_error {
|
||||
struct fuse_file_info * /*f_info*/) -> api_error {
|
||||
return api_error::not_implemented;
|
||||
}
|
||||
#endif // FUSE_USE_VERSION >= 30
|
||||
|
||||
[[nodiscard]] virtual auto release_impl(std::string /*api_path*/,
|
||||
struct fuse_file_info * /*fi*/)
|
||||
struct fuse_file_info * /*f_info*/)
|
||||
-> api_error {
|
||||
return api_error::not_implemented;
|
||||
}
|
||||
|
||||
[[nodiscard]] virtual auto releasedir_impl(std::string /*api_path*/,
|
||||
struct fuse_file_info * /*fi*/)
|
||||
struct fuse_file_info * /*f_info*/)
|
||||
-> api_error {
|
||||
return api_error::not_implemented;
|
||||
}
|
||||
@@ -446,7 +453,7 @@ protected:
|
||||
unsigned int /*flags*/) -> api_error {
|
||||
return api_error::not_implemented;
|
||||
}
|
||||
#else // FUSE_USE_VERSION < 30
|
||||
#else // FUSE_USE_VERSION < 30
|
||||
[[nodiscard]] virtual auto rename_impl(std::string /*from_api_path*/,
|
||||
std::string /*to_api_path*/)
|
||||
-> api_error {
|
||||
@@ -551,11 +558,11 @@ protected:
|
||||
#if FUSE_USE_VERSION >= 30
|
||||
[[nodiscard]] virtual auto truncate_impl(std::string /*api_path*/,
|
||||
off_t /*size*/,
|
||||
struct fuse_file_info * /*fi*/)
|
||||
struct fuse_file_info * /*f_info*/)
|
||||
-> api_error {
|
||||
return api_error::not_implemented;
|
||||
}
|
||||
#else // FUSE_USE_VERSION < 30
|
||||
#else // FUSE_USE_VERSION < 30
|
||||
[[nodiscard]] virtual auto truncate_impl(std::string /*api_path*/,
|
||||
off_t /*size*/) -> api_error {
|
||||
return api_error::not_implemented;
|
||||
@@ -570,11 +577,11 @@ protected:
|
||||
#if FUSE_USE_VERSION >= 30
|
||||
[[nodiscard]] virtual auto utimens_impl(std::string /*api_path*/,
|
||||
const struct timespec /*tv*/[2],
|
||||
struct fuse_file_info * /*fi*/)
|
||||
struct fuse_file_info * /*f_info*/)
|
||||
-> api_error {
|
||||
return api_error::not_implemented;
|
||||
}
|
||||
#else // FUSE_USE_VERSION < 30
|
||||
#else // FUSE_USE_VERSION < 30
|
||||
[[nodiscard]] virtual auto utimens_impl(std::string /*api_path*/,
|
||||
const struct timespec /*tv*/[2])
|
||||
-> api_error {
|
||||
@@ -585,8 +592,8 @@ protected:
|
||||
[[nodiscard]] virtual auto
|
||||
write_impl(std::string /*api_path*/, const char * /*buffer*/,
|
||||
size_t /*write_size*/, off_t /*write_offset*/,
|
||||
struct fuse_file_info * /*fi*/, std::size_t & /*bytes_written*/)
|
||||
-> api_error {
|
||||
struct fuse_file_info * /*f_info*/,
|
||||
std::size_t & /*bytes_written*/) -> api_error {
|
||||
return api_error::not_implemented;
|
||||
}
|
||||
|
||||
@@ -604,13 +611,15 @@ public:
|
||||
|
||||
static void display_version_information(std::vector<const char *> args);
|
||||
|
||||
static auto unmount(const std::string &mount_location) -> int;
|
||||
auto unmount(const std::string &mount_location) -> int;
|
||||
|
||||
[[nodiscard]] auto get_mount_location() const -> std::string {
|
||||
return mount_location_;
|
||||
}
|
||||
|
||||
[[nodiscard]] auto mount(std::vector<std::string> args) -> int;
|
||||
[[nodiscard]] auto mount(std::vector<std::string> orig_args,
|
||||
std::vector<std::string> args, provider_type prov,
|
||||
std::string_view unique_id) -> int;
|
||||
};
|
||||
} // namespace repertory
|
||||
|
||||
|
@@ -79,7 +79,7 @@ protected:
|
||||
|
||||
#if FUSE_USE_VERSION >= 30
|
||||
[[nodiscard]] auto chmod_impl(std::string api_path, mode_t mode,
|
||||
struct fuse_file_info *file_info)
|
||||
struct fuse_file_info *f_info)
|
||||
-> api_error override;
|
||||
#else // FUSE_USE_VERSION < 30
|
||||
[[nodiscard]] auto chmod_impl(std::string api_path, mode_t mode)
|
||||
@@ -88,7 +88,7 @@ protected:
|
||||
|
||||
#if FUSE_USE_VERSION >= 30
|
||||
[[nodiscard]] auto chown_impl(std::string api_path, uid_t uid, gid_t gid,
|
||||
struct fuse_file_info *file_info)
|
||||
struct fuse_file_info *f_info)
|
||||
-> api_error override;
|
||||
#else // FUSE_USE_VERSION < 30
|
||||
[[nodiscard]] auto chown_impl(std::string api_path, uid_t uid, gid_t gid)
|
||||
@@ -96,43 +96,43 @@ protected:
|
||||
#endif // FUSE_USE_VERSION >= 30
|
||||
|
||||
[[nodiscard]] auto create_impl(std::string api_path, mode_t mode,
|
||||
struct fuse_file_info *file_info)
|
||||
struct fuse_file_info *f_info)
|
||||
-> api_error override;
|
||||
|
||||
void destroy_impl(void *ptr) override;
|
||||
|
||||
[[nodiscard]] auto fallocate_impl(std::string api_path, int mode,
|
||||
off_t offset, off_t length,
|
||||
struct fuse_file_info *file_info)
|
||||
struct fuse_file_info *f_info)
|
||||
-> api_error override;
|
||||
|
||||
[[nodiscard]] auto fgetattr_impl(std::string api_path, struct stat *unix_st,
|
||||
struct fuse_file_info *file_info)
|
||||
[[nodiscard]] auto fgetattr_impl(std::string api_path, struct stat *u_stat,
|
||||
struct fuse_file_info *f_info)
|
||||
-> api_error override;
|
||||
|
||||
#if defined(__APPLE__)
|
||||
[[nodiscard]] auto fsetattr_x_impl(std::string api_path,
|
||||
struct setattr_x *attr,
|
||||
struct fuse_file_info *file_info)
|
||||
struct fuse_file_info *f_info)
|
||||
-> api_error override;
|
||||
#endif // defined(__APPLE__)
|
||||
|
||||
[[nodiscard]] auto fsync_impl(std::string api_path, int datasync,
|
||||
struct fuse_file_info *file_info)
|
||||
struct fuse_file_info *f_info)
|
||||
-> api_error override;
|
||||
|
||||
#if FUSE_USE_VERSION < 30
|
||||
[[nodiscard]] auto ftruncate_impl(std::string api_path, off_t size,
|
||||
struct fuse_file_info *file_info)
|
||||
struct fuse_file_info *f_info)
|
||||
-> api_error override;
|
||||
#endif // FUSE_USE_VERSION < 30
|
||||
|
||||
#if FUSE_USE_VERSION >= 30
|
||||
[[nodiscard]] auto getattr_impl(std::string api_path, struct stat *unix_st,
|
||||
struct fuse_file_info *file_info)
|
||||
[[nodiscard]] auto getattr_impl(std::string api_path, struct stat *u_stat,
|
||||
struct fuse_file_info *f_info)
|
||||
-> api_error override;
|
||||
#else // FUSE_USE_VERSION < 30
|
||||
[[nodiscard]] auto getattr_impl(std::string api_path, struct stat *unix_st)
|
||||
[[nodiscard]] auto getattr_impl(std::string api_path, struct stat *u_stat)
|
||||
-> api_error override;
|
||||
#endif // FUSE_USE_VERSION >= 30
|
||||
|
||||
@@ -156,37 +156,37 @@ protected:
|
||||
void notify_fuse_main_exit(int &ret) override;
|
||||
|
||||
[[nodiscard]] auto open_impl(std::string api_path,
|
||||
struct fuse_file_info *file_info)
|
||||
struct fuse_file_info *f_info)
|
||||
-> api_error override;
|
||||
|
||||
[[nodiscard]] auto opendir_impl(std::string api_path,
|
||||
struct fuse_file_info *file_info)
|
||||
struct fuse_file_info *f_info)
|
||||
-> api_error override;
|
||||
|
||||
[[nodiscard]] auto read_impl(std::string api_path, char *buffer,
|
||||
size_t read_size, off_t read_offset,
|
||||
struct fuse_file_info *file_info,
|
||||
struct fuse_file_info *f_info,
|
||||
std::size_t &bytes_read) -> api_error override;
|
||||
|
||||
#if FUSE_USE_VERSION >= 30
|
||||
[[nodiscard]] auto readdir_impl(std::string api_path, void *buf,
|
||||
fuse_fill_dir_t fuse_fill_dir, off_t offset,
|
||||
struct fuse_file_info *file_info,
|
||||
struct fuse_file_info *f_info,
|
||||
fuse_readdir_flags flags)
|
||||
-> api_error override;
|
||||
#else // FUSE_USE_VERSION < 30
|
||||
[[nodiscard]] auto readdir_impl(std::string api_path, void *buf,
|
||||
fuse_fill_dir_t fuse_fill_dir, off_t offset,
|
||||
struct fuse_file_info *file_info)
|
||||
struct fuse_file_info *f_info)
|
||||
-> api_error override;
|
||||
#endif // FUSE_USE_VERSION >= 30
|
||||
|
||||
[[nodiscard]] auto release_impl(std::string api_path,
|
||||
struct fuse_file_info *file_info)
|
||||
struct fuse_file_info *f_info)
|
||||
-> api_error override;
|
||||
|
||||
[[nodiscard]] auto releasedir_impl(std::string api_path,
|
||||
struct fuse_file_info *file_info)
|
||||
struct fuse_file_info *f_info)
|
||||
-> api_error override;
|
||||
|
||||
#if FUSE_USE_VERSION >= 30
|
||||
@@ -262,7 +262,7 @@ protected:
|
||||
|
||||
#if FUSE_USE_VERSION >= 30
|
||||
[[nodiscard]] auto truncate_impl(std::string api_path, off_t size,
|
||||
struct fuse_file_info *file_info)
|
||||
struct fuse_file_info *f_info)
|
||||
-> api_error override;
|
||||
#else // FUSE_USE_VERSION < 30
|
||||
[[nodiscard]] auto truncate_impl(std::string api_path, off_t size)
|
||||
@@ -274,7 +274,7 @@ protected:
|
||||
#if FUSE_USE_VERSION >= 30
|
||||
[[nodiscard]] auto utimens_impl(std::string api_path,
|
||||
const struct timespec tv[2],
|
||||
struct fuse_file_info *file_info)
|
||||
struct fuse_file_info *f_info)
|
||||
-> api_error override;
|
||||
#else // FUSE_USE_VERSION < 30
|
||||
[[nodiscard]] auto utimens_impl(std::string api_path,
|
||||
@@ -284,7 +284,7 @@ protected:
|
||||
|
||||
[[nodiscard]] auto write_impl(std::string api_path, const char *buffer,
|
||||
size_t write_size, off_t write_offset,
|
||||
struct fuse_file_info *file_info,
|
||||
struct fuse_file_info *f_info,
|
||||
std::size_t &bytes_written)
|
||||
-> api_error override;
|
||||
|
||||
|
@@ -121,7 +121,7 @@ protected:
|
||||
static void populate_stat(const std::string &api_path,
|
||||
std::uint64_t size_or_count,
|
||||
const api_meta_map &meta, bool directory,
|
||||
i_provider &provider, struct stat *st);
|
||||
i_provider &provider, struct stat *u_stat);
|
||||
|
||||
static void set_timespec_from_meta(const api_meta_map &meta,
|
||||
const std::string &name,
|
||||
|
@@ -24,7 +24,6 @@
|
||||
|
||||
#include "comm/packet/packet_client.hpp"
|
||||
#include "drives/fuse/remotefuse/i_remote_instance.hpp"
|
||||
#include "events/event_system.hpp"
|
||||
#include "types/remote.hpp"
|
||||
|
||||
namespace repertory {
|
||||
@@ -65,7 +64,7 @@ public:
|
||||
&handle) override ;*/
|
||||
|
||||
[[nodiscard]] auto
|
||||
fuse_fgetattr(const char *path, remote::stat &st, bool &directory,
|
||||
fuse_fgetattr(const char *path, remote::stat &r_stat, bool &directory,
|
||||
const remote::file_handle &handle)
|
||||
-> packet::error_type override;
|
||||
|
||||
@@ -83,7 +82,7 @@ public:
|
||||
const remote::file_handle &handle)
|
||||
-> packet::error_type override;
|
||||
|
||||
[[nodiscard]] auto fuse_getattr(const char *path, remote::stat &st,
|
||||
[[nodiscard]] auto fuse_getattr(const char *path, remote::stat &r_stat,
|
||||
bool &directory)
|
||||
-> packet::error_type override;
|
||||
|
||||
@@ -176,11 +175,11 @@ public:
|
||||
std::int32_t &flags, std::uint32_t position) override ;*/
|
||||
|
||||
[[nodiscard]] auto
|
||||
fuse_statfs(const char *path, std::uint64_t frsize, remote::statfs &st)
|
||||
fuse_statfs(const char *path, std::uint64_t frsize, remote::statfs &r_stat)
|
||||
-> packet::error_type override;
|
||||
|
||||
[[nodiscard]] auto fuse_statfs_x(const char *path, std::uint64_t bsize,
|
||||
remote::statfs_x &st)
|
||||
remote::statfs_x &r_stat)
|
||||
-> packet::error_type override;
|
||||
|
||||
[[nodiscard]] auto fuse_truncate(const char *path,
|
||||
|
@@ -25,7 +25,6 @@
|
||||
|
||||
#include "drives/fuse/fuse_base.hpp"
|
||||
#include "drives/fuse/remotefuse/i_remote_instance.hpp"
|
||||
#include "events/event_system.hpp"
|
||||
|
||||
namespace repertory {
|
||||
class app_config;
|
||||
@@ -40,6 +39,11 @@ public:
|
||||
remote_fuse_drive(app_config &config, remote_instance_factory factory,
|
||||
lock_data &lock)
|
||||
: fuse_base(config), factory_(std::move(factory)), lock_data_(lock) {}
|
||||
remote_fuse_drive(const remote_fuse_drive &) = delete;
|
||||
remote_fuse_drive(remote_fuse_drive &&) = delete;
|
||||
|
||||
auto operator=(const remote_fuse_drive &) -> remote_fuse_drive & = delete;
|
||||
auto operator=(remote_fuse_drive &&) -> remote_fuse_drive & = delete;
|
||||
|
||||
~remote_fuse_drive() override = default;
|
||||
|
||||
@@ -54,95 +58,97 @@ private:
|
||||
|
||||
private:
|
||||
static void populate_stat(const remote::stat &r_stat, bool directory,
|
||||
struct stat &unix_st);
|
||||
struct stat &u_stat);
|
||||
|
||||
protected:
|
||||
[[nodiscard]] auto access_impl(std::string api_path,
|
||||
int mask) -> api_error override;
|
||||
[[nodiscard]] auto access_impl(std::string api_path, int mask)
|
||||
-> api_error override;
|
||||
|
||||
#if defined(__APPLE__)
|
||||
[[nodiscard]] auto chflags_impl(std::string api_path,
|
||||
uint32_t flags) -> api_error override;
|
||||
[[nodiscard]] auto chflags_impl(std::string api_path, uint32_t flags)
|
||||
-> api_error override;
|
||||
#endif // __APPLE__
|
||||
|
||||
#if FUSE_USE_VERSION >= 30
|
||||
[[nodiscard]] auto
|
||||
chmod_impl(std::string api_path, mode_t mode,
|
||||
struct fuse_file_info *f_info) -> api_error override;
|
||||
[[nodiscard]] auto chmod_impl(std::string api_path, mode_t mode,
|
||||
struct fuse_file_info *f_info)
|
||||
-> api_error override;
|
||||
#else
|
||||
[[nodiscard]] auto chmod_impl(std::string api_path,
|
||||
mode_t mode) -> api_error override;
|
||||
[[nodiscard]] auto chmod_impl(std::string api_path, mode_t mode)
|
||||
-> api_error override;
|
||||
#endif
|
||||
|
||||
#if FUSE_USE_VERSION >= 30
|
||||
[[nodiscard]] auto
|
||||
chown_impl(std::string api_path, uid_t uid, gid_t gid,
|
||||
struct fuse_file_info *f_info) -> api_error override;
|
||||
[[nodiscard]] auto chown_impl(std::string api_path, uid_t uid, gid_t gid,
|
||||
struct fuse_file_info *f_info)
|
||||
-> api_error override;
|
||||
#else
|
||||
[[nodiscard]] auto chown_impl(std::string api_path, uid_t uid,
|
||||
gid_t gid) -> api_error override;
|
||||
[[nodiscard]] auto chown_impl(std::string api_path, uid_t uid, gid_t gid)
|
||||
-> api_error override;
|
||||
#endif
|
||||
|
||||
[[nodiscard]] auto
|
||||
create_impl(std::string api_path, mode_t mode,
|
||||
struct fuse_file_info *f_info) -> api_error override;
|
||||
[[nodiscard]] auto create_impl(std::string api_path, mode_t mode,
|
||||
struct fuse_file_info *f_info)
|
||||
-> api_error override;
|
||||
|
||||
void destroy_impl(void * /*ptr*/) override;
|
||||
|
||||
[[nodiscard]] auto
|
||||
fgetattr_impl(std::string api_path, struct stat *unix_st,
|
||||
struct fuse_file_info *f_info) -> api_error override;
|
||||
[[nodiscard]] auto fgetattr_impl(std::string api_path, struct stat *u_stat,
|
||||
struct fuse_file_info *f_info)
|
||||
-> api_error override;
|
||||
|
||||
#if defined(__APPLE__)
|
||||
[[nodiscard]] auto
|
||||
fsetattr_x_impl(std::string api_path, struct setattr_x *attr,
|
||||
struct fuse_file_info *f_info) -> api_error override;
|
||||
[[nodiscard]] auto fsetattr_x_impl(std::string api_path,
|
||||
struct setattr_x *attr,
|
||||
struct fuse_file_info *f_info)
|
||||
-> api_error override;
|
||||
#endif // __APPLE__
|
||||
|
||||
[[nodiscard]] auto
|
||||
fsync_impl(std::string api_path, int datasync,
|
||||
struct fuse_file_info *f_info) -> api_error override;
|
||||
[[nodiscard]] auto fsync_impl(std::string api_path, int datasync,
|
||||
struct fuse_file_info *f_info)
|
||||
-> api_error override;
|
||||
|
||||
#if FUSE_USE_VERSION < 30
|
||||
[[nodiscard]] auto
|
||||
ftruncate_impl(std::string api_path, off_t size,
|
||||
struct fuse_file_info *f_info) -> api_error override;
|
||||
[[nodiscard]] auto ftruncate_impl(std::string api_path, off_t size,
|
||||
struct fuse_file_info *f_info)
|
||||
-> api_error override;
|
||||
#endif
|
||||
|
||||
#if FUSE_USE_VERSION >= 30
|
||||
[[nodiscard]] auto
|
||||
getattr_impl(std::string api_path, struct stat *unix_st,
|
||||
struct fuse_file_info *f_info) -> api_error override;
|
||||
[[nodiscard]] auto getattr_impl(std::string api_path, struct stat *u_stat,
|
||||
struct fuse_file_info *f_info)
|
||||
-> api_error override;
|
||||
#else
|
||||
[[nodiscard]] auto getattr_impl(std::string api_path,
|
||||
struct stat *unix_st) -> api_error override;
|
||||
[[nodiscard]] auto getattr_impl(std::string api_path, struct stat *u_stat)
|
||||
-> api_error override;
|
||||
#endif
|
||||
|
||||
#if defined(__APPLE__)
|
||||
[[nodiscard]] auto
|
||||
getxtimes_impl(std::string api_path, struct timespec *bkuptime,
|
||||
struct timespec *crtime) -> api_error override;
|
||||
[[nodiscard]] auto getxtimes_impl(std::string api_path,
|
||||
struct timespec *bkuptime,
|
||||
struct timespec *crtime)
|
||||
-> api_error override;
|
||||
#endif // __APPLE__
|
||||
|
||||
#if FUSE_USE_VERSION >= 30
|
||||
auto init_impl(struct fuse_conn_info *conn,
|
||||
struct fuse_config *cfg) -> void * override;
|
||||
auto init_impl(struct fuse_conn_info *conn, struct fuse_config *cfg)
|
||||
-> void * override;
|
||||
#else
|
||||
auto init_impl(struct fuse_conn_info *conn) -> void * override;
|
||||
#endif
|
||||
|
||||
[[nodiscard]] auto mkdir_impl(std::string api_path,
|
||||
mode_t mode) -> api_error override;
|
||||
[[nodiscard]] auto mkdir_impl(std::string api_path, mode_t mode)
|
||||
-> api_error override;
|
||||
|
||||
void notify_fuse_main_exit(int &ret) override;
|
||||
|
||||
[[nodiscard]] auto
|
||||
open_impl(std::string api_path,
|
||||
struct fuse_file_info *f_info) -> api_error override;
|
||||
[[nodiscard]] auto open_impl(std::string api_path,
|
||||
struct fuse_file_info *f_info)
|
||||
-> api_error override;
|
||||
|
||||
[[nodiscard]] auto
|
||||
opendir_impl(std::string api_path,
|
||||
struct fuse_file_info *f_info) -> api_error override;
|
||||
[[nodiscard]] auto opendir_impl(std::string api_path,
|
||||
struct fuse_file_info *f_info)
|
||||
-> api_error override;
|
||||
|
||||
[[nodiscard]] auto read_impl(std::string api_path, char *buffer,
|
||||
size_t read_size, off_t read_offset,
|
||||
@@ -150,29 +156,30 @@ protected:
|
||||
std::size_t &bytes_read) -> api_error override;
|
||||
|
||||
#if FUSE_USE_VERSION >= 30
|
||||
[[nodiscard]] auto
|
||||
readdir_impl(std::string api_path, void *buf, fuse_fill_dir_t fuse_fill_dir,
|
||||
off_t offset, struct fuse_file_info *f_info,
|
||||
fuse_readdir_flags flags) -> api_error override;
|
||||
[[nodiscard]] auto readdir_impl(std::string api_path, void *buf,
|
||||
fuse_fill_dir_t fuse_fill_dir, off_t offset,
|
||||
struct fuse_file_info *f_info,
|
||||
fuse_readdir_flags flags)
|
||||
-> api_error override;
|
||||
#else
|
||||
[[nodiscard]] auto
|
||||
readdir_impl(std::string api_path, void *buf, fuse_fill_dir_t fuse_fill_dir,
|
||||
off_t offset,
|
||||
struct fuse_file_info *f_info) -> api_error override;
|
||||
[[nodiscard]] auto readdir_impl(std::string api_path, void *buf,
|
||||
fuse_fill_dir_t fuse_fill_dir, off_t offset,
|
||||
struct fuse_file_info *f_info)
|
||||
-> api_error override;
|
||||
#endif
|
||||
|
||||
[[nodiscard]] auto
|
||||
release_impl(std::string api_path,
|
||||
struct fuse_file_info *f_info) -> api_error override;
|
||||
[[nodiscard]] auto release_impl(std::string api_path,
|
||||
struct fuse_file_info *f_info)
|
||||
-> api_error override;
|
||||
|
||||
[[nodiscard]] auto
|
||||
releasedir_impl(std::string api_path,
|
||||
struct fuse_file_info *f_info) -> api_error override;
|
||||
[[nodiscard]] auto releasedir_impl(std::string api_path,
|
||||
struct fuse_file_info *f_info)
|
||||
-> api_error override;
|
||||
|
||||
#if FUSE_USE_VERSION >= 30
|
||||
[[nodiscard]] auto rename_impl(std::string from_api_path,
|
||||
std::string to_api_path,
|
||||
unsigned int flags) -> api_error override;
|
||||
std::string to_api_path, unsigned int flags)
|
||||
-> api_error override;
|
||||
#else
|
||||
[[nodiscard]] auto rename_impl(std::string from_api_path,
|
||||
std::string to_api_path) -> api_error override;
|
||||
@@ -181,58 +188,60 @@ protected:
|
||||
[[nodiscard]] auto rmdir_impl(std::string api_path) -> api_error override;
|
||||
|
||||
#if defined(__APPLE__)
|
||||
[[nodiscard]] auto
|
||||
setattr_x_impl(std::string api_path,
|
||||
struct setattr_x *attr) -> api_error override;
|
||||
[[nodiscard]] auto setattr_x_impl(std::string api_path,
|
||||
struct setattr_x *attr)
|
||||
-> api_error override;
|
||||
|
||||
[[nodiscard]] auto
|
||||
setbkuptime_impl(std::string api_path,
|
||||
const struct timespec *bkuptime) -> api_error override;
|
||||
[[nodiscard]] auto setbkuptime_impl(std::string api_path,
|
||||
const struct timespec *bkuptime)
|
||||
-> api_error override;
|
||||
|
||||
[[nodiscard]] auto
|
||||
setchgtime_impl(std::string api_path,
|
||||
const struct timespec *chgtime) -> api_error override;
|
||||
[[nodiscard]] auto setchgtime_impl(std::string api_path,
|
||||
const struct timespec *chgtime)
|
||||
-> api_error override;
|
||||
|
||||
[[nodiscard]] auto
|
||||
setcrtime_impl(std::string api_path,
|
||||
const struct timespec *crtime) -> api_error override;
|
||||
[[nodiscard]] auto setcrtime_impl(std::string api_path,
|
||||
const struct timespec *crtime)
|
||||
-> api_error override;
|
||||
|
||||
[[nodiscard]] virtual auto
|
||||
setvolname_impl(const char *volname) -> api_error override;
|
||||
[[nodiscard]] virtual auto setvolname_impl(const char *volname)
|
||||
-> api_error override;
|
||||
|
||||
[[nodiscard]] auto statfs_x_impl(std::string api_path,
|
||||
struct statfs *stbuf) -> api_error override;
|
||||
[[nodiscard]] auto statfs_x_impl(std::string api_path, struct statfs *stbuf)
|
||||
-> api_error override;
|
||||
|
||||
#else // __APPLE__
|
||||
[[nodiscard]] auto statfs_impl(std::string api_path,
|
||||
struct statvfs *stbuf) -> api_error override;
|
||||
[[nodiscard]] auto statfs_impl(std::string api_path, struct statvfs *stbuf)
|
||||
-> api_error override;
|
||||
#endif // __APPLE__
|
||||
|
||||
#if FUSE_USE_VERSION >= 30
|
||||
[[nodiscard]] auto
|
||||
truncate_impl(std::string api_path, off_t size,
|
||||
struct fuse_file_info *f_info) -> api_error override;
|
||||
[[nodiscard]] auto truncate_impl(std::string api_path, off_t size,
|
||||
struct fuse_file_info *f_info)
|
||||
-> api_error override;
|
||||
#else
|
||||
[[nodiscard]] auto truncate_impl(std::string api_path,
|
||||
off_t size) -> api_error override;
|
||||
[[nodiscard]] auto truncate_impl(std::string api_path, off_t size)
|
||||
-> api_error override;
|
||||
#endif
|
||||
|
||||
[[nodiscard]] auto unlink_impl(std::string api_path) -> api_error override;
|
||||
|
||||
#if FUSE_USE_VERSION >= 30
|
||||
[[nodiscard]] auto
|
||||
utimens_impl(std::string api_path, const struct timespec tv[2],
|
||||
struct fuse_file_info *f_info) -> api_error override;
|
||||
[[nodiscard]] auto utimens_impl(std::string api_path,
|
||||
const struct timespec tv[2],
|
||||
struct fuse_file_info *f_info)
|
||||
-> api_error override;
|
||||
#else
|
||||
[[nodiscard]] auto
|
||||
utimens_impl(std::string api_path,
|
||||
const struct timespec tv[2]) -> api_error override;
|
||||
[[nodiscard]] auto utimens_impl(std::string api_path,
|
||||
const struct timespec tv[2])
|
||||
-> api_error override;
|
||||
#endif
|
||||
|
||||
[[nodiscard]] auto
|
||||
write_impl(std::string api_path, const char *buffer, size_t write_size,
|
||||
off_t write_offset, struct fuse_file_info *f_info,
|
||||
std::size_t &bytes_written) -> api_error override;
|
||||
[[nodiscard]] auto write_impl(std::string api_path, const char *buffer,
|
||||
size_t write_size, off_t write_offset,
|
||||
struct fuse_file_info *f_info,
|
||||
std::size_t &bytes_written)
|
||||
-> api_error override;
|
||||
};
|
||||
} // namespace remote_fuse
|
||||
} // namespace repertory
|
||||
|
@@ -50,14 +50,13 @@ private:
|
||||
[[nodiscard]] auto get_next_handle() -> std::uint64_t;
|
||||
|
||||
[[nodiscard]] auto populate_file_info(const std::string &api_path,
|
||||
remote::file_info &file_info)
|
||||
remote::file_info &r_info)
|
||||
-> packet::error_type;
|
||||
|
||||
void populate_file_info(const std::string &api_path, const UINT64 &file_size,
|
||||
const UINT32 &attributes,
|
||||
remote::file_info &file_info);
|
||||
const UINT32 &attributes, remote::file_info &r_info);
|
||||
|
||||
static void populate_stat(const struct stat64 &unix_st, remote::stat &r_stat);
|
||||
static void populate_stat(const struct stat64 &u_stat, remote::stat &r_stat);
|
||||
|
||||
[[nodiscard]] auto update_to_windows_format(const std::string &root_api_path,
|
||||
json &item) -> json &;
|
||||
@@ -264,14 +263,14 @@ public:
|
||||
[[nodiscard]] auto
|
||||
winfsp_create(PWSTR file_name, UINT32 create_options, UINT32 granted_access,
|
||||
UINT32 attributes, UINT64 /*allocation_size*/, PVOID *file_desc,
|
||||
remote::file_info *file_info, std::string &normalized_name,
|
||||
remote::file_info *r_info, std::string &normalized_name,
|
||||
BOOLEAN &exists) -> packet::error_type override;
|
||||
|
||||
[[nodiscard]] auto winfsp_flush(PVOID file_desc, remote::file_info *file_info)
|
||||
[[nodiscard]] auto winfsp_flush(PVOID file_desc, remote::file_info *r_info)
|
||||
-> packet::error_type override;
|
||||
|
||||
[[nodiscard]] auto winfsp_get_file_info(PVOID file_desc,
|
||||
remote::file_info *file_info)
|
||||
remote::file_info *r_info)
|
||||
-> packet::error_type override;
|
||||
|
||||
[[nodiscard]] auto
|
||||
@@ -290,14 +289,14 @@ public:
|
||||
|
||||
[[nodiscard]] auto winfsp_open(PWSTR file_name, UINT32 create_options,
|
||||
UINT32 granted_access, PVOID *file_desc,
|
||||
remote::file_info *file_info,
|
||||
remote::file_info *r_info,
|
||||
std::string &normalized_name)
|
||||
-> packet::error_type override;
|
||||
|
||||
[[nodiscard]] auto winfsp_overwrite(PVOID file_desc, UINT32 attributes,
|
||||
BOOLEAN replace_attributes,
|
||||
UINT64 /*allocation_size*/,
|
||||
remote::file_info *file_info)
|
||||
remote::file_info *r_info)
|
||||
-> packet::error_type override;
|
||||
|
||||
[[nodiscard]] auto winfsp_read(PVOID file_desc, PVOID buffer, UINT64 offset,
|
||||
@@ -316,11 +315,11 @@ public:
|
||||
[[nodiscard]] auto winfsp_set_basic_info(
|
||||
PVOID file_desc, UINT32 attributes, UINT64 creation_time,
|
||||
UINT64 last_access_time, UINT64 last_write_time, UINT64 change_time,
|
||||
remote::file_info *file_info) -> packet::error_type override;
|
||||
remote::file_info *r_info) -> packet::error_type override;
|
||||
|
||||
[[nodiscard]] auto winfsp_set_file_size(PVOID file_desc, UINT64 new_size,
|
||||
BOOLEAN set_allocation_size,
|
||||
remote::file_info *file_info)
|
||||
remote::file_info *r_info)
|
||||
-> packet::error_type override;
|
||||
|
||||
[[nodiscard]] auto winfsp_unmounted(const std::wstring &location)
|
||||
@@ -329,7 +328,7 @@ public:
|
||||
[[nodiscard]] auto
|
||||
winfsp_write(PVOID file_desc, PVOID buffer, UINT64 offset, UINT32 length,
|
||||
BOOLEAN write_to_end, BOOLEAN constrained_io,
|
||||
PUINT32 bytes_transferred, remote::file_info *file_info)
|
||||
PUINT32 bytes_transferred, remote::file_info *r_info)
|
||||
-> packet::error_type override;
|
||||
};
|
||||
} // namespace remote_fuse
|
||||
|
@@ -660,13 +660,13 @@ private:
|
||||
remote::group_id gid{};
|
||||
DECODE_OR_RETURN(request, gid);
|
||||
|
||||
remote::stat st{};
|
||||
remote::stat r_stat{};
|
||||
bool directory = false;
|
||||
ret = this->fuse_fgetattr(path.data(), st, directory, handle);
|
||||
ret = this->fuse_fgetattr(path.data(), r_stat, directory, handle);
|
||||
if (ret == 0) {
|
||||
st.st_uid = uid;
|
||||
st.st_gid = gid;
|
||||
response.encode(st);
|
||||
r_stat.st_uid = uid;
|
||||
r_stat.st_gid = gid;
|
||||
response.encode(r_stat);
|
||||
response.encode(static_cast<std::uint8_t>(directory));
|
||||
}
|
||||
|
||||
@@ -733,13 +733,13 @@ private:
|
||||
remote::group_id gid;
|
||||
DECODE_OR_RETURN(request, gid);
|
||||
|
||||
remote::stat st{};
|
||||
remote::stat r_stat{};
|
||||
bool directory = false;
|
||||
ret = this->fuse_getattr(path.c_str(), st, directory);
|
||||
ret = this->fuse_getattr(path.c_str(), r_stat, directory);
|
||||
if (ret == 0) {
|
||||
st.st_uid = uid;
|
||||
st.st_gid = gid;
|
||||
response.encode(st);
|
||||
r_stat.st_uid = uid;
|
||||
r_stat.st_gid = gid;
|
||||
response.encode(r_stat);
|
||||
response.encode(static_cast<std::uint8_t>(directory));
|
||||
}
|
||||
return ret;
|
||||
@@ -997,10 +997,10 @@ private:
|
||||
std::uint64_t frsize{};
|
||||
DECODE_OR_RETURN(request, frsize);
|
||||
|
||||
remote::statfs st{};
|
||||
ret = this->fuse_statfs(path.data(), frsize, st);
|
||||
remote::statfs r_stat{};
|
||||
ret = this->fuse_statfs(path.data(), frsize, r_stat);
|
||||
if (ret == 0) {
|
||||
response.encode(st);
|
||||
response.encode(r_stat);
|
||||
}
|
||||
|
||||
return ret;
|
||||
@@ -1016,10 +1016,10 @@ private:
|
||||
std::uint64_t bsize{};
|
||||
DECODE_OR_RETURN(request, bsize);
|
||||
|
||||
remote::statfs_x st{};
|
||||
ret = this->fuse_statfs_x(path.data(), bsize, st);
|
||||
remote::statfs_x r_stat{};
|
||||
ret = this->fuse_statfs_x(path.data(), bsize, r_stat);
|
||||
if (ret == 0) {
|
||||
response.encode(st);
|
||||
response.encode(r_stat);
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
@@ -1261,12 +1261,12 @@ private:
|
||||
DECODE_OR_RETURN(request, allocation_size);
|
||||
|
||||
BOOLEAN exists{0};
|
||||
remote::file_info file_info{};
|
||||
remote::file_info r_info{};
|
||||
std::string normalized_name;
|
||||
PVOID file_desc{};
|
||||
ret = this->winfsp_create(file_name.data(), create_options, granted_access,
|
||||
attributes, allocation_size, &file_desc,
|
||||
&file_info, normalized_name, exists);
|
||||
attributes, allocation_size, &file_desc, &r_info,
|
||||
normalized_name, exists);
|
||||
if (ret == STATUS_SUCCESS) {
|
||||
if (exists == 0U) {
|
||||
#if defined(_WIN32)
|
||||
@@ -1279,7 +1279,7 @@ private:
|
||||
}
|
||||
|
||||
response.encode(file_desc);
|
||||
response.encode(file_info);
|
||||
response.encode(r_info);
|
||||
response.encode(normalized_name);
|
||||
response.encode(exists);
|
||||
}
|
||||
@@ -1294,10 +1294,10 @@ private:
|
||||
HANDLE file_desc{};
|
||||
DECODE_OR_RETURN(request, file_desc);
|
||||
|
||||
remote::file_info file_info{};
|
||||
ret = this->winfsp_flush(file_desc, &file_info);
|
||||
remote::file_info r_info{};
|
||||
ret = this->winfsp_flush(file_desc, &r_info);
|
||||
if (ret == STATUS_SUCCESS) {
|
||||
response.encode(file_info);
|
||||
response.encode(r_info);
|
||||
}
|
||||
|
||||
return ret;
|
||||
@@ -1311,10 +1311,10 @@ private:
|
||||
HANDLE file_desc{};
|
||||
DECODE_OR_RETURN(request, file_desc);
|
||||
|
||||
remote::file_info file_info{};
|
||||
ret = this->winfsp_get_file_info(file_desc, &file_info);
|
||||
remote::file_info r_info{};
|
||||
ret = this->winfsp_get_file_info(file_desc, &r_info);
|
||||
if (ret == STATUS_SUCCESS) {
|
||||
response.encode(file_info);
|
||||
response.encode(r_info);
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
@@ -1394,11 +1394,11 @@ private:
|
||||
UINT32 granted_access{};
|
||||
DECODE_OR_RETURN(request, granted_access);
|
||||
|
||||
remote::file_info file_info{};
|
||||
remote::file_info r_info{};
|
||||
std::string normalized_name;
|
||||
PVOID file_desc{};
|
||||
ret = this->winfsp_open(file_name.data(), create_options, granted_access,
|
||||
&file_desc, &file_info, normalized_name);
|
||||
&file_desc, &r_info, normalized_name);
|
||||
if (ret == STATUS_SUCCESS) {
|
||||
#if defined(_WIN32)
|
||||
this->set_client_id(file_desc, client_id);
|
||||
@@ -1408,7 +1408,7 @@ private:
|
||||
client_id);
|
||||
#endif // defined(_WIN32)
|
||||
response.encode(file_desc);
|
||||
response.encode(file_info);
|
||||
response.encode(r_info);
|
||||
response.encode(normalized_name);
|
||||
}
|
||||
|
||||
@@ -1431,11 +1431,11 @@ private:
|
||||
UINT64 allocation_size{};
|
||||
DECODE_OR_RETURN(request, allocation_size);
|
||||
|
||||
remote::file_info file_info{};
|
||||
remote::file_info r_info{};
|
||||
ret = this->winfsp_overwrite(file_desc, attributes, replace_attributes,
|
||||
allocation_size, &file_info);
|
||||
allocation_size, &r_info);
|
||||
if (ret == STATUS_SUCCESS) {
|
||||
response.encode(file_info);
|
||||
response.encode(r_info);
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
@@ -1536,12 +1536,12 @@ private:
|
||||
UINT64 change_time{};
|
||||
DECODE_OR_RETURN(request, change_time);
|
||||
|
||||
remote::file_info file_info{};
|
||||
remote::file_info r_info{};
|
||||
ret = this->winfsp_set_basic_info(file_desc, attributes, creation_time,
|
||||
last_access_time, last_write_time,
|
||||
change_time, &file_info);
|
||||
change_time, &r_info);
|
||||
if (ret == STATUS_SUCCESS) {
|
||||
response.encode(file_info);
|
||||
response.encode(r_info);
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
@@ -1560,11 +1560,11 @@ private:
|
||||
BOOLEAN set_allocation_size{};
|
||||
DECODE_OR_RETURN(request, set_allocation_size);
|
||||
|
||||
remote::file_info file_info{};
|
||||
remote::file_info r_info{};
|
||||
ret = this->winfsp_set_file_size(file_desc, new_size, set_allocation_size,
|
||||
&file_info);
|
||||
&r_info);
|
||||
if (ret == STATUS_SUCCESS) {
|
||||
response.encode(file_info);
|
||||
response.encode(r_info);
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
@@ -1601,12 +1601,12 @@ private:
|
||||
auto *buffer = request->current_pointer();
|
||||
|
||||
UINT32 bytes_transferred{0U};
|
||||
remote::file_info file_info{};
|
||||
remote::file_info r_info{};
|
||||
ret = this->winfsp_write(file_desc, buffer, offset, length, write_to_end,
|
||||
constrained_io, &bytes_transferred, &file_info);
|
||||
constrained_io, &bytes_transferred, &r_info);
|
||||
if (ret == STATUS_SUCCESS) {
|
||||
response.encode(bytes_transferred);
|
||||
response.encode(file_info);
|
||||
response.encode(r_info);
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
@@ -66,7 +66,7 @@ public:
|
||||
std::string &volume_label) const = 0;
|
||||
|
||||
[[nodiscard]] virtual auto populate_file_info(const std::string &api_path,
|
||||
remote::file_info &fi) const
|
||||
remote::file_info &r_info) const
|
||||
-> api_error = 0;
|
||||
};
|
||||
} // namespace repertory
|
||||
|
@@ -42,19 +42,19 @@ public:
|
||||
[[nodiscard]] virtual auto
|
||||
winfsp_create(PWSTR file_name, UINT32 create_options, UINT32 granted_access,
|
||||
UINT32 file_attributes, UINT64 allocation_size,
|
||||
PVOID *file_desc, remote::file_info *file_info,
|
||||
PVOID *file_desc, remote::file_info *r_info,
|
||||
std::string &normalized_name, BOOLEAN &exists)
|
||||
-> packet::error_type = 0;
|
||||
|
||||
[[nodiscard]] virtual auto winfsp_flush(PVOID file_desc,
|
||||
remote::file_info *file_info)
|
||||
remote::file_info *r_info)
|
||||
-> packet::error_type = 0;
|
||||
|
||||
[[nodiscard]] virtual auto winfsp_get_dir_buffer(PVOID file_desc, PVOID *&ptr)
|
||||
-> packet::error_type = 0;
|
||||
|
||||
[[nodiscard]] virtual auto winfsp_get_file_info(PVOID file_desc,
|
||||
remote::file_info *file_info)
|
||||
remote::file_info *r_info)
|
||||
-> packet::error_type = 0;
|
||||
|
||||
[[nodiscard]] virtual auto
|
||||
@@ -73,13 +73,13 @@ public:
|
||||
|
||||
[[nodiscard]] virtual auto
|
||||
winfsp_open(PWSTR file_name, UINT32 create_options, UINT32 granted_access,
|
||||
PVOID *file_desc, remote::file_info *file_info,
|
||||
PVOID *file_desc, remote::file_info *r_info,
|
||||
std::string &normalized_name) -> packet::error_type = 0;
|
||||
|
||||
[[nodiscard]] virtual auto
|
||||
winfsp_overwrite(PVOID file_desc, UINT32 file_attributes,
|
||||
BOOLEAN replace_file_attributes, UINT64 allocation_size,
|
||||
remote::file_info *file_info) -> packet::error_type = 0;
|
||||
remote::file_info *r_info) -> packet::error_type = 0;
|
||||
|
||||
[[nodiscard]] virtual auto winfsp_read(PVOID file_desc, PVOID buffer,
|
||||
UINT64 offset, UINT32 length,
|
||||
@@ -100,12 +100,11 @@ public:
|
||||
winfsp_set_basic_info(PVOID file_desc, UINT32 file_attributes,
|
||||
UINT64 creation_time, UINT64 last_access_time,
|
||||
UINT64 last_write_time, UINT64 change_time,
|
||||
remote::file_info *file_info) -> packet::error_type = 0;
|
||||
remote::file_info *r_info) -> packet::error_type = 0;
|
||||
|
||||
[[nodiscard]] virtual auto winfsp_set_file_size(PVOID file_desc,
|
||||
UINT64 new_size,
|
||||
BOOLEAN set_allocation_size,
|
||||
remote::file_info *file_info)
|
||||
[[nodiscard]] virtual auto
|
||||
winfsp_set_file_size(PVOID file_desc, UINT64 new_size,
|
||||
BOOLEAN set_allocation_size, remote::file_info *r_info)
|
||||
-> packet::error_type = 0;
|
||||
|
||||
[[nodiscard]] virtual auto winfsp_unmounted(const std::wstring &location)
|
||||
@@ -114,7 +113,7 @@ public:
|
||||
[[nodiscard]] virtual auto
|
||||
winfsp_write(PVOID file_desc, PVOID buffer, UINT64 offset, UINT32 length,
|
||||
BOOLEAN write_to_end, BOOLEAN constrained_io,
|
||||
PUINT32 bytes_transferred, remote::file_info *file_info)
|
||||
PUINT32 bytes_transferred, remote::file_info *r_info)
|
||||
-> packet::error_type = 0;
|
||||
};
|
||||
|
||||
|
@@ -76,17 +76,17 @@ public:
|
||||
[[nodiscard]] auto
|
||||
winfsp_create(PWSTR file_name, UINT32 create_options, UINT32 granted_access,
|
||||
UINT32 attributes, UINT64 allocation_size, PVOID *file_desc,
|
||||
remote::file_info *file_info, std::string &normalized_name,
|
||||
remote::file_info *r_info, std::string &normalized_name,
|
||||
BOOLEAN &exists) -> packet::error_type override;
|
||||
|
||||
[[nodiscard]] auto winfsp_flush(PVOID file_desc, remote::file_info *file_info)
|
||||
[[nodiscard]] auto winfsp_flush(PVOID file_desc, remote::file_info *r_info)
|
||||
-> packet::error_type override;
|
||||
|
||||
[[nodiscard]] auto winfsp_get_dir_buffer(PVOID file_desc, PVOID *&ptr)
|
||||
-> packet::error_type override;
|
||||
|
||||
[[nodiscard]] auto winfsp_get_file_info(PVOID file_desc,
|
||||
remote::file_info *file_info)
|
||||
remote::file_info *r_info)
|
||||
-> packet::error_type override;
|
||||
|
||||
[[nodiscard]] auto winfsp_get_security_by_name(
|
||||
@@ -103,14 +103,14 @@ public:
|
||||
|
||||
[[nodiscard]] auto winfsp_open(PWSTR file_name, UINT32 create_options,
|
||||
UINT32 granted_access, PVOID *file_desc,
|
||||
remote::file_info *file_info,
|
||||
remote::file_info *r_info,
|
||||
std::string &normalized_name)
|
||||
-> packet::error_type override;
|
||||
|
||||
[[nodiscard]] auto winfsp_overwrite(PVOID file_desc, UINT32 attributes,
|
||||
BOOLEAN replace_attributes,
|
||||
UINT64 allocation_size,
|
||||
remote::file_info *file_info)
|
||||
remote::file_info *r_info)
|
||||
-> packet::error_type override;
|
||||
|
||||
[[nodiscard]] auto winfsp_read(PVOID file_desc, PVOID buffer, UINT64 offset,
|
||||
@@ -129,11 +129,11 @@ public:
|
||||
[[nodiscard]] auto winfsp_set_basic_info(
|
||||
PVOID file_desc, UINT32 attributes, UINT64 creation_time,
|
||||
UINT64 last_access_time, UINT64 last_write_time, UINT64 change_time,
|
||||
remote::file_info *file_info) -> packet::error_type override;
|
||||
remote::file_info *r_info) -> packet::error_type override;
|
||||
|
||||
[[nodiscard]] auto winfsp_set_file_size(PVOID file_desc, UINT64 new_size,
|
||||
BOOLEAN set_allocation_size,
|
||||
remote::file_info *file_info)
|
||||
remote::file_info *r_info)
|
||||
-> packet::error_type override;
|
||||
|
||||
[[nodiscard]] auto winfsp_unmounted(const std::wstring &location)
|
||||
@@ -142,7 +142,7 @@ public:
|
||||
[[nodiscard]] auto
|
||||
winfsp_write(PVOID file_desc, PVOID buffer, UINT64 offset, UINT32 length,
|
||||
BOOLEAN write_to_end, BOOLEAN constrained_io,
|
||||
PUINT32 bytes_transferred, remote::file_info *file_info)
|
||||
PUINT32 bytes_transferred, remote::file_info *r_info)
|
||||
-> packet::error_type override;
|
||||
};
|
||||
} // namespace remote_winfsp
|
||||
|
@@ -50,11 +50,11 @@ private:
|
||||
[[nodiscard]] auto get_next_handle() -> std::uint64_t;
|
||||
|
||||
[[nodiscard]] auto populate_file_info(const std::string &api_path,
|
||||
remote::file_info &file_info)
|
||||
remote::file_info &r_info)
|
||||
-> packet::error_type;
|
||||
|
||||
void populate_stat(const char *path, bool directory, remote::stat &r_stat,
|
||||
const struct _stat64 &unix_st);
|
||||
const struct _stat64 &u_stat);
|
||||
|
||||
public:
|
||||
// FUSE Layer
|
||||
@@ -249,17 +249,17 @@ public:
|
||||
[[nodiscard]] auto
|
||||
winfsp_create(PWSTR file_name, UINT32 create_options, UINT32 granted_access,
|
||||
UINT32 attributes, UINT64 allocation_size, PVOID *file_desc,
|
||||
remote::file_info *file_info, std::string &normalized_name,
|
||||
remote::file_info *r_info, std::string &normalized_name,
|
||||
BOOLEAN &exists) -> packet::error_type override;
|
||||
|
||||
[[nodiscard]] auto winfsp_flush(PVOID file_desc, remote::file_info *file_info)
|
||||
[[nodiscard]] auto winfsp_flush(PVOID file_desc, remote::file_info *r_info)
|
||||
-> packet::error_type override;
|
||||
|
||||
[[nodiscard]] auto winfsp_get_dir_buffer(PVOID file_desc, PVOID *&ptr)
|
||||
-> packet::error_type override;
|
||||
|
||||
[[nodiscard]] auto winfsp_get_file_info(PVOID file_desc,
|
||||
remote::file_info *file_info)
|
||||
remote::file_info *r_info)
|
||||
-> packet::error_type override;
|
||||
|
||||
[[nodiscard]] auto winfsp_get_security_by_name(
|
||||
@@ -276,14 +276,14 @@ public:
|
||||
|
||||
[[nodiscard]] auto winfsp_open(PWSTR file_name, UINT32 create_options,
|
||||
UINT32 granted_access, PVOID *file_desc,
|
||||
remote::file_info *file_info,
|
||||
remote::file_info *r_info,
|
||||
std::string &normalized_name)
|
||||
-> packet::error_type override;
|
||||
|
||||
[[nodiscard]] auto winfsp_overwrite(PVOID file_desc, UINT32 attributes,
|
||||
BOOLEAN replace_attributes,
|
||||
UINT64 allocation_size,
|
||||
remote::file_info *file_info)
|
||||
remote::file_info *r_info)
|
||||
-> packet::error_type override;
|
||||
|
||||
[[nodiscard]] auto winfsp_read(PVOID file_desc, PVOID buffer, UINT64 offset,
|
||||
@@ -302,11 +302,11 @@ public:
|
||||
[[nodiscard]] auto winfsp_set_basic_info(
|
||||
PVOID file_desc, UINT32 attributes, UINT64 creation_time,
|
||||
UINT64 last_access_time, UINT64 last_write_time, UINT64 change_time,
|
||||
remote::file_info *file_info) -> packet::error_type override;
|
||||
remote::file_info *r_info) -> packet::error_type override;
|
||||
|
||||
[[nodiscard]] auto winfsp_set_file_size(PVOID file_desc, UINT64 new_size,
|
||||
BOOLEAN set_allocation_size,
|
||||
remote::file_info *file_info)
|
||||
remote::file_info *r_info)
|
||||
-> packet::error_type override;
|
||||
|
||||
[[nodiscard]] auto winfsp_unmounted(const std::wstring &location)
|
||||
@@ -315,7 +315,7 @@ public:
|
||||
[[nodiscard]] auto
|
||||
winfsp_write(PVOID file_desc, PVOID buffer, UINT64 offset, UINT32 length,
|
||||
BOOLEAN write_to_end, BOOLEAN constrained_io,
|
||||
PUINT32 bytes_transferred, remote::file_info *file_info)
|
||||
PUINT32 bytes_transferred, remote::file_info *r_info)
|
||||
-> packet::error_type override;
|
||||
};
|
||||
} // namespace remote_winfsp
|
||||
|
@@ -70,9 +70,9 @@ private:
|
||||
std::string mount_location_;
|
||||
|
||||
private:
|
||||
void populate_file_info(const json &item, FSP_FSCTL_FILE_INFO &file_info);
|
||||
void populate_file_info(const json &item, FSP_FSCTL_FILE_INFO &f_info);
|
||||
|
||||
static void set_file_info(FileInfo &dest, const remote::file_info &src);
|
||||
static void set_file_info(FileInfo &f_info, const remote::file_info &r_info);
|
||||
|
||||
public:
|
||||
auto CanDelete(PVOID file_node, PVOID file_desc, PWSTR file_name)
|
||||
@@ -88,10 +88,10 @@ public:
|
||||
UINT64 allocation_size, PVOID *file_node, PVOID *file_desc,
|
||||
OpenFileInfo *ofi) -> NTSTATUS override;
|
||||
|
||||
auto Flush(PVOID file_node, PVOID file_desc, FileInfo *file_info)
|
||||
auto Flush(PVOID file_node, PVOID file_desc, FileInfo *f_info)
|
||||
-> NTSTATUS override;
|
||||
|
||||
auto GetFileInfo(PVOID file_node, PVOID file_desc, FileInfo *file_info)
|
||||
auto GetFileInfo(PVOID file_node, PVOID file_desc, FileInfo *f_info)
|
||||
-> NTSTATUS override;
|
||||
|
||||
auto GetSecurityByName(PWSTR file_name, PUINT32 attributes,
|
||||
@@ -102,7 +102,10 @@ public:
|
||||
|
||||
auto Init(PVOID host) -> NTSTATUS override;
|
||||
|
||||
[[nodiscard]] auto mount(const std::vector<std::string> &drive_args) -> int;
|
||||
[[nodiscard]] auto mount(std::vector<std::string> orig_args,
|
||||
std::vector<std::string> drive_args,
|
||||
provider_type prov, std::string_view unique_id)
|
||||
-> int;
|
||||
|
||||
auto Mounted(PVOID host) -> NTSTATUS override;
|
||||
|
||||
@@ -112,7 +115,7 @@ public:
|
||||
|
||||
auto Overwrite(PVOID file_node, PVOID file_desc, UINT32 attributes,
|
||||
BOOLEAN replace_attributes, UINT64 allocation_size,
|
||||
FileInfo *file_info) -> NTSTATUS override;
|
||||
FileInfo *f_info) -> NTSTATUS override;
|
||||
|
||||
auto Read(PVOID file_node, PVOID file_desc, PVOID buffer, UINT64 offset,
|
||||
ULONG length, PULONG bytes_transferred) -> NTSTATUS override;
|
||||
@@ -128,18 +131,17 @@ public:
|
||||
auto SetBasicInfo(PVOID file_node, PVOID file_desc, UINT32 attributes,
|
||||
UINT64 creation_time, UINT64 last_access_time,
|
||||
UINT64 last_write_time, UINT64 change_time,
|
||||
FileInfo *file_info) -> NTSTATUS override;
|
||||
FileInfo *f_info) -> NTSTATUS override;
|
||||
|
||||
auto SetFileSize(PVOID file_node, PVOID file_desc, UINT64 new_size,
|
||||
BOOLEAN set_allocation_size, FileInfo *file_info)
|
||||
BOOLEAN set_allocation_size, FileInfo *f_info)
|
||||
-> NTSTATUS override;
|
||||
|
||||
VOID Unmounted(PVOID host) override;
|
||||
|
||||
auto Write(PVOID file_node, PVOID file_desc, PVOID buffer, UINT64 offset,
|
||||
ULONG length, BOOLEAN write_to_end, BOOLEAN constrained_io,
|
||||
PULONG bytes_transferred, FileInfo *file_info)
|
||||
-> NTSTATUS override;
|
||||
PULONG bytes_transferred, FileInfo *f_info) -> NTSTATUS override;
|
||||
|
||||
void shutdown() { ::GenerateConsoleCtrlEvent(CTRL_C_EVENT, 0); }
|
||||
|
||||
|
@@ -78,7 +78,7 @@ private:
|
||||
private:
|
||||
[[nodiscard]] auto handle_error(std::string_view function_name,
|
||||
const std::string &api_path, api_error error,
|
||||
FileInfo *file_info, std::uint64_t file_size,
|
||||
FileInfo *f_info, std::uint64_t file_size,
|
||||
bool raise_on_failure_only = false) const
|
||||
-> NTSTATUS;
|
||||
|
||||
@@ -92,8 +92,8 @@ private:
|
||||
void populate_file_info(std::uint64_t file_size, api_meta_map meta,
|
||||
FSP_FSCTL_FILE_INFO &fi) const;
|
||||
|
||||
static void set_file_info(remote::file_info &dest,
|
||||
const FSP_FSCTL_FILE_INFO &src);
|
||||
static void set_file_info(remote::file_info &r_info,
|
||||
const FSP_FSCTL_FILE_INFO &f_info);
|
||||
|
||||
void stop_all();
|
||||
|
||||
@@ -111,7 +111,7 @@ public:
|
||||
UINT64 allocation_size, PVOID *file_node, PVOID *file_desc,
|
||||
OpenFileInfo *ofi) -> NTSTATUS override;
|
||||
|
||||
auto Flush(PVOID file_node, PVOID file_desc, FileInfo *file_info)
|
||||
auto Flush(PVOID file_node, PVOID file_desc, FileInfo *f_info)
|
||||
-> NTSTATUS override;
|
||||
|
||||
[[nodiscard]] auto get_directory_item_count(const std::string &api_path) const
|
||||
@@ -120,7 +120,7 @@ public:
|
||||
[[nodiscard]] auto get_directory_items(const std::string &api_path) const
|
||||
-> directory_item_list override;
|
||||
|
||||
auto GetFileInfo(PVOID file_node, PVOID file_desc, FileInfo *file_info)
|
||||
auto GetFileInfo(PVOID file_node, PVOID file_desc, FileInfo *f_info)
|
||||
-> NTSTATUS override;
|
||||
|
||||
[[nodiscard]] auto get_file_size(const std::string &api_path) const
|
||||
@@ -157,7 +157,10 @@ public:
|
||||
|
||||
auto Init(PVOID host) -> NTSTATUS override;
|
||||
|
||||
[[nodiscard]] auto mount(const std::vector<std::string> &drive_args) -> int;
|
||||
[[nodiscard]] auto mount(std::vector<std::string> orig_args,
|
||||
std::vector<std::string> drive_args,
|
||||
provider_type prov, std::string_view unique_id)
|
||||
-> int;
|
||||
|
||||
auto Mounted(PVOID host) -> NTSTATUS override;
|
||||
|
||||
@@ -167,10 +170,10 @@ public:
|
||||
|
||||
auto Overwrite(PVOID file_node, PVOID file_desc, UINT32 attributes,
|
||||
BOOLEAN replace_attributes, UINT64 allocation_size,
|
||||
FileInfo *file_info) -> NTSTATUS override;
|
||||
FileInfo *f_info) -> NTSTATUS override;
|
||||
|
||||
[[nodiscard]] auto populate_file_info(const std::string &api_path,
|
||||
remote::file_info &file_info) const
|
||||
remote::file_info &r_info) const
|
||||
-> api_error override;
|
||||
|
||||
auto Read(PVOID file_node, PVOID file_desc, PVOID buffer, UINT64 offset,
|
||||
@@ -187,18 +190,17 @@ public:
|
||||
auto SetBasicInfo(PVOID file_node, PVOID file_desc, UINT32 attributes,
|
||||
UINT64 creation_time, UINT64 last_access_time,
|
||||
UINT64 last_write_time, UINT64 change_time,
|
||||
FileInfo *file_info) -> NTSTATUS override;
|
||||
FileInfo *f_info) -> NTSTATUS override;
|
||||
|
||||
auto SetFileSize(PVOID file_node, PVOID file_desc, UINT64 new_size,
|
||||
BOOLEAN set_allocation_size, FileInfo *file_info)
|
||||
BOOLEAN set_allocation_size, FileInfo *f_info)
|
||||
-> NTSTATUS override;
|
||||
|
||||
VOID Unmounted(PVOID host) override;
|
||||
|
||||
auto Write(PVOID file_node, PVOID file_desc, PVOID buffer, UINT64 offset,
|
||||
ULONG length, BOOLEAN write_to_end, BOOLEAN constrained_io,
|
||||
PULONG bytes_transferred, FileInfo *file_info)
|
||||
-> NTSTATUS override;
|
||||
PULONG bytes_transferred, FileInfo *f_info) -> NTSTATUS override;
|
||||
|
||||
void shutdown();
|
||||
|
||||
|
@@ -67,6 +67,8 @@ protected:
|
||||
-> api_error override;
|
||||
|
||||
public:
|
||||
void force_download() override {}
|
||||
|
||||
[[nodiscard]] auto get_source_path() const -> std::string override {
|
||||
return "direct";
|
||||
}
|
||||
|
@@ -133,8 +133,15 @@ public:
|
||||
open_file_data ofd, std::uint64_t &handle,
|
||||
std::shared_ptr<i_open_file> &file) -> api_error;
|
||||
|
||||
[[nodiscard]] auto download_pinned_file(const std::string &api_path)
|
||||
-> bool override;
|
||||
|
||||
[[nodiscard]] auto evict_file(const std::string &api_path) -> bool override;
|
||||
|
||||
[[nodiscard]] auto get_directory_item(const std::string &api_path,
|
||||
directory_item &item) const
|
||||
-> api_error override;
|
||||
|
||||
[[nodiscard]] auto get_directory_items(const std::string &api_path) const
|
||||
-> directory_item_list override;
|
||||
|
||||
|
@@ -31,9 +31,16 @@ class i_file_manager {
|
||||
INTERFACE_SETUP(i_file_manager);
|
||||
|
||||
public:
|
||||
[[nodiscard]] virtual auto download_pinned_file(const std::string &api_path)
|
||||
-> bool = 0;
|
||||
|
||||
[[nodiscard]] virtual auto evict_file(const std::string &api_path)
|
||||
-> bool = 0;
|
||||
|
||||
[[nodiscard]] virtual auto get_directory_item(const std::string &api_path,
|
||||
directory_item &item) const
|
||||
-> api_error = 0;
|
||||
|
||||
[[nodiscard]] virtual auto
|
||||
get_directory_items(const std::string &api_path) const
|
||||
-> directory_item_list = 0;
|
||||
|
@@ -32,6 +32,8 @@ public:
|
||||
using native_operation_callback = std::function<api_error(native_handle)>;
|
||||
|
||||
public:
|
||||
virtual void force_download() = 0;
|
||||
|
||||
[[nodiscard]] virtual auto get_api_path() const -> std::string = 0;
|
||||
|
||||
[[nodiscard]] virtual auto get_chunk_size() const -> std::size_t = 0;
|
||||
@@ -97,12 +99,12 @@ class i_closeable_open_file : public i_open_file {
|
||||
public:
|
||||
virtual void add(std::uint64_t handle, open_file_data ofd) = 0;
|
||||
|
||||
[[nodiscard]] virtual auto get_allocated() const -> bool = 0;
|
||||
|
||||
[[nodiscard]] virtual auto can_close() const -> bool = 0;
|
||||
|
||||
virtual auto close() -> bool = 0;
|
||||
|
||||
[[nodiscard]] virtual auto get_allocated() const -> bool = 0;
|
||||
|
||||
[[nodiscard]] virtual auto get_handles() const
|
||||
-> std::vector<std::uint64_t> = 0;
|
||||
|
||||
|
@@ -101,6 +101,8 @@ private:
|
||||
public:
|
||||
auto close() -> bool override;
|
||||
|
||||
void force_download() override;
|
||||
|
||||
[[nodiscard]] auto get_allocated() const -> bool override;
|
||||
|
||||
[[nodiscard]] auto get_read_state() const -> boost::dynamic_bitset<> override;
|
||||
|
@@ -43,8 +43,8 @@ public:
|
||||
ring_buffer_open_file() = delete;
|
||||
ring_buffer_open_file(const ring_buffer_open_file &) noexcept = delete;
|
||||
ring_buffer_open_file(ring_buffer_open_file &&) noexcept = delete;
|
||||
auto operator=(ring_buffer_open_file &&) noexcept -> ring_buffer_open_file & =
|
||||
delete;
|
||||
auto operator=(ring_buffer_open_file &&) noexcept
|
||||
-> ring_buffer_open_file & = delete;
|
||||
auto operator=(const ring_buffer_open_file &) noexcept
|
||||
-> ring_buffer_open_file & = delete;
|
||||
|
||||
@@ -57,14 +57,14 @@ private:
|
||||
protected:
|
||||
[[nodiscard]] auto on_check_start() -> bool override;
|
||||
|
||||
[[nodiscard]] auto
|
||||
on_chunk_downloaded(std::size_t chunk,
|
||||
const data_buffer &buffer) -> api_error override;
|
||||
[[nodiscard]] auto on_chunk_downloaded(std::size_t chunk,
|
||||
const data_buffer &buffer)
|
||||
-> api_error override;
|
||||
|
||||
[[nodiscard]] auto
|
||||
on_read_chunk(std::size_t chunk, std::size_t read_size,
|
||||
std::uint64_t read_offset, data_buffer &data,
|
||||
std::size_t &bytes_read) -> api_error override;
|
||||
[[nodiscard]] auto on_read_chunk(std::size_t chunk, std::size_t read_size,
|
||||
std::uint64_t read_offset, data_buffer &data,
|
||||
std::size_t &bytes_read)
|
||||
-> api_error override;
|
||||
|
||||
[[nodiscard]] auto use_buffer(std::size_t chunk,
|
||||
std::function<api_error(data_buffer &)> func)
|
||||
@@ -75,8 +75,10 @@ public:
|
||||
std::size_t chunk_size,
|
||||
std::size_t ring_size) -> bool;
|
||||
|
||||
[[nodiscard]] auto
|
||||
native_operation(native_operation_callback callback) -> api_error override;
|
||||
void force_download() override {}
|
||||
|
||||
[[nodiscard]] auto native_operation(native_operation_callback callback)
|
||||
-> api_error override;
|
||||
|
||||
[[nodiscard]] auto native_operation(std::uint64_t /* new_file_size */,
|
||||
native_operation_callback /* callback */)
|
||||
|
@@ -29,7 +29,7 @@
|
||||
namespace repertory {
|
||||
class app_config;
|
||||
class i_file_manager;
|
||||
class i_http_comm;
|
||||
struct i_http_comm;
|
||||
|
||||
class base_provider : public i_provider {
|
||||
private:
|
||||
@@ -49,8 +49,8 @@ private:
|
||||
|
||||
private:
|
||||
api_item_added_callback api_item_added_;
|
||||
std::unique_ptr<i_meta_db> db3_;
|
||||
i_file_manager *fm_{};
|
||||
i_file_manager *fm_{nullptr};
|
||||
std::unique_ptr<i_meta_db> meta_db_;
|
||||
|
||||
private:
|
||||
void add_all_items(stop_type &stop_requested);
|
||||
@@ -106,9 +106,9 @@ protected:
|
||||
return config_;
|
||||
}
|
||||
|
||||
[[nodiscard]] auto get_db() -> i_meta_db & { return *db3_; }
|
||||
[[nodiscard]] auto get_db() -> i_meta_db & { return *meta_db_; }
|
||||
|
||||
[[nodiscard]] auto get_db() const -> const i_meta_db & { return *db3_; }
|
||||
[[nodiscard]] auto get_db() const -> const i_meta_db & { return *meta_db_; }
|
||||
|
||||
[[nodiscard]] virtual auto
|
||||
get_directory_items_impl(const std::string &api_path,
|
||||
@@ -147,6 +147,10 @@ public:
|
||||
std::string &api_path) const
|
||||
-> api_error override;
|
||||
|
||||
[[nodiscard]] auto get_directory_item(const std::string &api_path,
|
||||
directory_item &item) const
|
||||
-> api_error override;
|
||||
|
||||
[[nodiscard]] auto get_directory_items(const std::string &api_path,
|
||||
directory_item_list &list) const
|
||||
-> api_error override;
|
||||
@@ -207,8 +211,7 @@ public:
|
||||
-> api_error override;
|
||||
|
||||
[[nodiscard]] auto set_item_meta(const std::string &api_path,
|
||||
const api_meta_map &meta)
|
||||
-> api_error override;
|
||||
api_meta_map meta) -> api_error override;
|
||||
|
||||
[[nodiscard]] auto start(api_item_added_callback api_item_added,
|
||||
i_file_manager *mgr) -> bool override;
|
||||
|