197 Commits

Author SHA1 Message Date
e013cbbdbb updated CHANGELOG.md
Some checks are pending
BlockStorage/repertory/pipeline/head Build queued...
2025-01-25 06:01:57 -06:00
7c8b44bf69 removed debug logs 2025-01-25 06:01:00 -06:00
f7b829f71c fix check deleted 2025-01-25 05:59:44 -06:00
412e03898d fix externally removed file
Some checks reported errors
BlockStorage/repertory/pipeline/head Something is wrong with the build of this commit
2025-01-25 05:26:19 -06:00
c1c5c3f0f1 fixes
All checks were successful
BlockStorage/repertory/pipeline/head This commit looks good
2025-01-24 19:35:25 -06:00
47f5b82b4e refactor
Some checks failed
BlockStorage/repertory/pipeline/head There was a failure building this commit
2025-01-24 13:30:25 -06:00
ebee5ec857 refactor 2025-01-24 13:29:38 -06:00
bfe7b8915d refactor 2025-01-24 12:50:16 -06:00
8547fb7d43 refactor 2025-01-24 12:24:53 -06:00
4f2ff33226 refactor 2025-01-24 10:18:03 -06:00
600b658109 refactor event system 2025-01-24 10:16:00 -06:00
374eb67f6b refactor event system 2025-01-24 10:14:47 -06:00
7848dcebe4 refactor event system 2025-01-24 10:14:05 -06:00
a34443ed94 refactor event system 2025-01-24 09:44:28 -06:00
ff985e724d refactor 2025-01-24 09:42:15 -06:00
1ee478ca71 refactor 2025-01-24 09:40:02 -06:00
807a6e90f8 refactor event system 2025-01-24 09:38:43 -06:00
694d4d4662 refactor event system 2025-01-24 09:35:47 -06:00
ebdc4877a8 refactor event system 2025-01-24 08:32:00 -06:00
993356dec6 refactor event system 2025-01-24 08:26:13 -06:00
dea69815ef refactor event system 2025-01-24 08:24:03 -06:00
5da7b6a51a refactor event system 2025-01-24 08:19:18 -06:00
ad5a1cd5ff refactor event system 2025-01-24 08:10:33 -06:00
33e9208190 refactor event system 2025-01-24 08:02:41 -06:00
3d25364540 refactor event system 2025-01-24 07:52:58 -06:00
b00d219f34 refactor event system 2025-01-24 07:36:23 -06:00
f1a0b6add1 refactor event system 2025-01-24 06:52:45 -06:00
3b4767290b refactor event system
Some checks failed
BlockStorage/repertory/pipeline/head There was a failure building this commit
2025-01-23 19:35:48 -06:00
eb26f59059 refactor event system
Some checks are pending
BlockStorage/repertory/pipeline/head Build queued...
2025-01-23 19:34:43 -06:00
efcb319d8c refactor event system
Some checks failed
BlockStorage/repertory/pipeline/head There was a failure building this commit
2025-01-23 19:32:40 -06:00
52e7f675fc refactor event system 2025-01-23 19:28:55 -06:00
78e9c95054 disable header
Some checks failed
BlockStorage/repertory/pipeline/head There was a failure building this commit
2025-01-23 19:22:02 -06:00
8fa3ccf97c refactor event system
Some checks are pending
BlockStorage/repertory/pipeline/head Build queued...
2025-01-23 19:21:20 -06:00
1311d665b5 refactor event system
Some checks failed
BlockStorage/repertory/pipeline/head There was a failure building this commit
2025-01-23 19:19:53 -06:00
62e45894b8 refactor event system
Some checks are pending
BlockStorage/repertory/pipeline/head Build queued...
2025-01-23 19:18:59 -06:00
094aec0afb refactor event system
Some checks failed
BlockStorage/repertory/pipeline/head There was a failure building this commit
2025-01-23 19:15:36 -06:00
3b46a48078 refactor event system
Some checks failed
BlockStorage/repertory/pipeline/head There was a failure building this commit
2025-01-23 19:14:17 -06:00
8c53a07d64 refactor event system 2025-01-23 19:12:15 -06:00
03485935b7 refactor event system
Some checks failed
BlockStorage/repertory/pipeline/head There was a failure building this commit
2025-01-23 19:10:06 -06:00
4b3582cbb0 refactor event system
Some checks failed
BlockStorage/repertory/pipeline/head There was a failure building this commit
2025-01-23 19:06:57 -06:00
8272ec2f8a refactor event system
Some checks failed
BlockStorage/repertory/pipeline/head There was a failure building this commit
2025-01-23 15:19:37 -06:00
7309ca477a refactor event system 2025-01-23 14:58:24 -06:00
e8ef11cef4 refactor event system 2025-01-23 14:54:59 -06:00
80b77daa8a refactor event system 2025-01-23 11:13:00 -06:00
cb75efd96f refactor event system 2025-01-23 11:12:19 -06:00
631a1bc914 refactor event system 2025-01-23 11:10:47 -06:00
5064ec3f9a refactor event system 2025-01-23 10:56:20 -06:00
7c072f98dd refactor event system 2025-01-23 09:41:32 -06:00
d732bfb224 refactor event system 2025-01-23 09:38:15 -06:00
4241adb4d3 refactor event system 2025-01-23 09:37:45 -06:00
e1c35624f6 fix
All checks were successful
BlockStorage/repertory/pipeline/head This commit looks good
2025-01-22 20:28:27 -06:00
9b75618fb3 updated build system
Some checks reported errors
BlockStorage/repertory/pipeline/head Something is wrong with the build of this commit
2025-01-22 20:18:25 -06:00
6464c01d8b updated CHANGELOG.md
Some checks failed
BlockStorage/repertory/pipeline/head There was a failure building this commit
2025-01-22 14:44:36 -06:00
58db36d628 updated CHANGELOG.md 2025-01-22 13:39:40 -06:00
f39c6550f2 refactor 2025-01-22 13:37:48 -06:00
400c97cebd refactor 2025-01-22 13:29:08 -06:00
a2ad258b7c refactor 2025-01-22 13:23:52 -06:00
c4b4fe83fb refactor 2025-01-22 13:21:44 -06:00
262fccf9a6 refactor 2025-01-22 13:21:31 -06:00
50898488f0 refactor 2025-01-22 13:13:36 -06:00
1acb3311b1 refactor 2025-01-22 13:12:18 -06:00
3fd3f85cc9 refactor 2025-01-22 13:07:10 -06:00
cbbd586347 refactor 2025-01-22 13:01:36 -06:00
57a591c51e refactor 2025-01-22 12:58:02 -06:00
29fb395758 revert change 2025-01-22 12:47:24 -06:00
b3f87e2828 refactor 2025-01-22 12:42:00 -06:00
7e06f810ea refactor 2025-01-22 12:41:28 -06:00
02e568b77a fix memory leak 2025-01-22 12:37:00 -06:00
8b2bafc9f3 refactor 2025-01-22 08:47:56 -06:00
97e5f17049 refactor 2025-01-22 08:06:54 -06:00
124dc62250 refactor 2025-01-22 08:05:35 -06:00
5da4d4e940 refactor 2025-01-22 08:01:35 -06:00
b507643d23 limit directory cache to directory operations 2025-01-22 07:39:41 -06:00
1e25fb57f1 refactor 2025-01-22 07:31:02 -06:00
4d8e59f97f refactor 2025-01-22 07:24:25 -06:00
881778e485 refactor events 2025-01-22 07:14:21 -06:00
3efb2b817f refactor 2025-01-21 15:24:39 -06:00
21d02534e5 refactor system stop 2025-01-21 15:19:33 -06:00
1b11e500f3 refactor winfsp system stop 2025-01-21 15:05:04 -06:00
f57bbdbb50 refactor 2025-01-21 14:59:11 -06:00
1c65f51ef4 refactor system stop 2025-01-21 14:57:13 -06:00
f44bb6bcfc force stop 2025-01-21 14:52:51 -06:00
57d9884510 refactor 2025-01-21 13:46:51 -06:00
5da036e979 refactor system stop 2025-01-21 13:29:56 -06:00
daa8b9df24 refactor system stop 2025-01-21 13:18:22 -06:00
fe2a1b96b2 rocksdb cache adjustments 2025-01-21 09:23:43 -06:00
be678e8f9c refactor 2025-01-21 08:01:15 -06:00
b5ae3e4ed1 updated CHANGELOG.md
All checks were successful
BlockStorage/repertory/pipeline/head This commit looks good
2025-01-16 19:52:51 -06:00
89a2d5866a updated CHANGELOG.md
Some checks are pending
BlockStorage/repertory/pipeline/head Build queued...
2025-01-16 19:48:33 -06:00
5264d17ae8 remote fixes
All checks were successful
BlockStorage/repertory/pipeline/head This commit looks good
2025-01-16 19:45:41 -06:00
1718464c60 updated build system
All checks were successful
BlockStorage/repertory/pipeline/head This commit looks good
2025-01-05 20:12:02 -06:00
85756ddd8c updated build system
Some checks reported errors
BlockStorage/repertory/pipeline/head Something is wrong with the build of this commit
2025-01-05 20:06:09 -06:00
e8240948b7 updated build system
Some checks reported errors
BlockStorage/repertory/pipeline/head Something is wrong with the build of this commit
2025-01-05 20:01:45 -06:00
77088e6608 updated build system
All checks were successful
BlockStorage/repertory/pipeline/head This commit looks good
2025-01-05 14:55:44 -06:00
ddbebef850 updated build system
Some checks failed
BlockStorage/repertory/pipeline/head There was a failure building this commit
2025-01-04 15:22:49 -06:00
7cf636b8ed updated build system
All checks were successful
BlockStorage/repertory/pipeline/head This commit looks good
2025-01-02 20:30:25 -06:00
754dfc49db updated build system
Some checks are pending
BlockStorage/repertory/pipeline/head Build queued...
2025-01-02 20:28:51 -06:00
63b2d0e741 updated build system
All checks were successful
BlockStorage/repertory/pipeline/head This commit looks good
2025-01-02 20:19:27 -06:00
96ac72ae21 fix comment
All checks were successful
BlockStorage/repertory/pipeline/head This commit looks good
2025-01-02 17:39:48 -06:00
0bbf6b5942 refactor
All checks were successful
BlockStorage/repertory/pipeline/head This commit looks good
2025-01-02 14:24:58 -06:00
74ef36956d re-enable cleanup 2025-01-02 14:22:40 -06:00
bbe065819c refactor 2025-01-02 14:22:17 -06:00
3493054f1a handle remove error 2025-01-02 14:20:20 -06:00
743281497c refactor 2025-01-02 14:14:21 -06:00
eaa6a6f92e refactor cleanup 2025-01-02 14:01:16 -06:00
a25dd8178e refactor cleanup 2025-01-02 13:43:22 -06:00
71463bfee4 refactor 2025-01-02 12:07:01 -06:00
270df62dbe refactor 2025-01-02 12:01:45 -06:00
5bd7ded7d9 refactor 2025-01-02 11:59:01 -06:00
b5048a422f refactor 2025-01-02 11:56:12 -06:00
c27528fe73 begin working on better handling of removed files 2025-01-02 10:27:52 -06:00
c3978562d5 cleanup 2025-01-02 08:59:19 -06:00
637892cff1 refactor 2025-01-02 08:58:02 -06:00
998a3d9d83 updated test 2025-01-02 08:50:44 -06:00
8ed8822625 refactor 2025-01-02 08:38:43 -06:00
196abaebcc refactor 2025-01-02 08:36:55 -06:00
653e8000ff refactor 2025-01-02 08:34:51 -06:00
ea362211aa fix 2025-01-02 08:32:42 -06:00
a4a9d069d3 fix 2025-01-02 08:27:45 -06:00
9cb7f9accf updated CHANGELOG.md 2025-01-02 08:19:42 -06:00
4e5454efb5 always use direct for read-only providers 2025-01-02 08:19:10 -06:00
a8c3f31298 refactor 2025-01-02 07:59:07 -06:00
f3093c27cd refactor 2025-01-02 07:57:07 -06:00
4526a9d860 refactor 2025-01-02 07:50:58 -06:00
a1ada5aa8c refactor 2025-01-02 07:48:56 -06:00
1ae8b8b793 refactor 2025-01-02 07:45:08 -06:00
f44cc99a82 refactor 2025-01-02 07:08:12 -06:00
75657bec58 fix
All checks were successful
BlockStorage/repertory/pipeline/head This commit looks good
2025-01-01 01:35:45 -06:00
4fef036f10 refactor
All checks were successful
BlockStorage/repertory/pipeline/head This commit looks good
2025-01-01 01:19:59 -06:00
ecb9783f4e refactor 2025-01-01 01:15:11 -06:00
bdf85908ca updated CHANGELOG.md
All checks were successful
BlockStorage/repertory/pipeline/head This commit looks good
2024-12-31 17:30:20 -06:00
9cb3cdabb0 cleanup
All checks were successful
BlockStorage/repertory/pipeline/head This commit looks good
2024-12-31 14:49:26 -06:00
6cf082dfa7 refactor 2024-12-31 14:45:52 -06:00
1a140d4dfd refactor 2024-12-31 14:45:11 -06:00
1cc8571a04 refactor 2024-12-31 14:42:57 -06:00
cf8c631938 refactor 2024-12-31 14:42:24 -06:00
4cba2a16f9 updated CHANGELOG.md 2024-12-31 14:29:55 -06:00
7c5f074d5a [bug] Address slow directory responses in S3 mounts for deep nested directories #28 2024-12-31 14:22:55 -06:00
a251cf6abf exception handling 2024-12-31 13:42:50 -06:00
31f7a47889 exception handling 2024-12-31 13:41:38 -06:00
23de2af98d exception handling 2024-12-31 13:41:00 -06:00
2446f024ef exception handling 2024-12-31 13:39:29 -06:00
45ddd528b2 exception handling 2024-12-31 13:37:55 -06:00
36908f7da9 [bug] Sia provider error responses are not being logged #30 2024-12-31 13:34:08 -06:00
1a11d55782 updated CHANGELOG.md 2024-12-31 13:20:50 -06:00
e344eddbcb [bug] Sia provider error responses are not being logged #30 2024-12-31 13:19:42 -06:00
09da7a29a9 [bug] Sia provider error responses are not being logged #30 2024-12-31 13:13:17 -06:00
5b5ac0937c [bug] Sia provider error responses are not being logged #30 2024-12-31 13:12:49 -06:00
c69818fed6 [bug] S3 provider should limit max key size to 1024 #31 2024-12-31 12:56:13 -06:00
81712e7a99 [bug] S3 provider should limit max key size to 1024 #31 2024-12-31 12:55:52 -06:00
75d2d39e7c refactor 2024-12-31 12:53:08 -06:00
ccc4a30ad5 spelling 2024-12-31 11:35:27 -06:00
a9bb12015a fix missing request headers 2024-12-31 11:32:47 -06:00
474f90ee33 fix missing request headers 2024-12-31 11:31:03 -06:00
ae7d5fe284 fix missing request headers 2024-12-31 11:29:05 -06:00
bf700b9d59 [bug] S3 provider should limit max key size to 1024 #31 2024-12-31 11:05:20 -06:00
0d4b3f5e7e [bug] S3 provider should limit max key size to 1024 #31 2024-12-31 10:55:33 -06:00
67076458f0 updated CHANGELOG.md 2024-12-31 10:28:57 -06:00
a8479eefd1 [bug] S3 provider should limit max key size to 1024 #31 2024-12-31 10:22:49 -06:00
e1eda99a72 [bug] S3 provider should limit max key size to 1024 #31 2024-12-31 10:15:21 -06:00
ed4a4f0742 [bug] S3 provider should limit max key size to 1024 #31 2024-12-31 10:14:13 -06:00
84e89d3b83 [bug] S3 provider should limit max key size to 1024 #31 2024-12-31 09:50:20 -06:00
5e3efde376 [bug] S3 provider should limit max key size to 1024 #31 2024-12-31 09:39:20 -06:00
f28e17f3e5 updated CHANGELOG.md 2024-12-31 08:53:55 -06:00
699ecafc22 updated CHANGELOG.md 2024-12-31 08:53:00 -06:00
247cc301ea [bug] S3 error responses are not being logged #29 2024-12-31 08:47:28 -06:00
bc43338127 [bug] S3 error responses are not being logged #29 2024-12-31 08:46:17 -06:00
4e86f2a7de refactor 2024-12-31 08:42:22 -06:00
b9fe2746e3 refactor 2024-12-31 08:31:36 -06:00
4fe9d09f0a updated CHANGELOG.md
All checks were successful
BlockStorage/repertory/pipeline/head This commit looks good
2024-12-30 19:37:41 -06:00
777db300e1 fix
All checks were successful
BlockStorage/repertory/pipeline/head This commit looks good
2024-12-30 18:44:21 -06:00
62a303e856 [bug] Address slow directory responses in S3 mounts for deep nested directories #28
All checks were successful
BlockStorage/repertory/pipeline/head This commit looks good
[bug] S3 error responses are not being logged #29
2024-12-30 12:09:52 -06:00
ae573af89d updated CHANGELOG.md
All checks were successful
BlockStorage/repertory/pipeline/head This commit looks good
2024-12-29 17:49:12 -06:00
0c41a3309e fix invalid error
Some checks are pending
BlockStorage/repertory/pipeline/head Build queued...
2024-12-29 17:43:09 -06:00
4cb3e22308 moved event to debug
Some checks are pending
BlockStorage/repertory/pipeline/head Build queued...
2024-12-29 14:44:19 -06:00
9d7d36922f updated build system
All checks were successful
BlockStorage/repertory/pipeline/head This commit looks good
2024-12-29 12:18:01 -06:00
3190c5f133 updated build system
Some checks are pending
BlockStorage/repertory/pipeline/head Build queued...
2024-12-29 12:04:17 -06:00
5fadb796d1 fix CHANGELOG.md
Some checks reported errors
BlockStorage/repertory/pipeline/head Something is wrong with the build of this commit
2024-12-29 09:57:29 -06:00
4a213e5ca5 updated CHANGELOG.md 2024-12-29 09:57:14 -06:00
9fea962563 updated CHANGELOG.md 2024-12-29 09:43:54 -06:00
ac6c333df3 updated CHANGELOG.md 2024-12-29 09:41:37 -06:00
4bbff47b6f updated build system 2024-12-29 09:21:56 -06:00
f01daa4296 [Unit Test] Complete FUSE unit tests #22
All checks were successful
BlockStorage/repertory/pipeline/head This commit looks good
2024-12-29 07:09:49 -06:00
96c2f8ee1e [Unit Test] Complete FUSE unit tests #22 2024-12-29 07:08:25 -06:00
9eb3e7a22d [Unit Test] Complete FUSE unit tests #22 2024-12-29 07:06:19 -06:00
3c2c783683 [Unit Test] Complete FUSE unit tests #22 2024-12-29 06:41:55 -06:00
2e24f9bb44 updated build system
All checks were successful
BlockStorage/repertory/pipeline/head This commit looks good
2024-12-28 22:23:27 -06:00
6bb3351cb8 fix deliver script
Some checks reported errors
BlockStorage/repertory/pipeline/head Something is wrong with the build of this commit
2024-12-28 22:08:24 -06:00
6086a0ea12 cleanup 2024-12-28 19:36:25 -06:00
b4b688d3b9 refactor 2024-12-28 19:35:17 -06:00
43bf3c0cb2 refactor 2024-12-28 19:33:42 -06:00
26897c256b call shutdown before close 2024-12-28 19:31:02 -06:00
a788563db6 cleanup 2024-12-28 19:27:36 -06:00
9fb1c747a6 updated CHANGELOG.md
Some checks failed
BlockStorage/repertory/pipeline/head There was a failure building this commit
2024-12-28 16:30:32 -06:00
5982978879 updated CHANGELOG.md
Some checks reported errors
BlockStorage/repertory/pipeline/head Something is wrong with the build of this commit
2024-12-28 16:25:22 -06:00
5ca4584416 updated copyright 2024-12-28 16:20:41 -06:00
3eca1af971 updated version 2024-12-28 16:04:38 -06:00
12 changed files with 54 additions and 180 deletions

View File

@ -128,7 +128,6 @@ libcurl
libdsm libdsm
libevent libevent
libexample libexample
libexpat
libfuse3 libfuse3
libgmock libgmock
libgtest libgtest
@ -141,12 +140,10 @@ libuuid
libuuid_include_dirs libuuid_include_dirs
libvlc libvlc
linkflags linkflags
localappdata
lptr lptr
lpwstr lpwstr
markdownlint markdownlint
mbig mbig
minio
msvc msvc
msvcr120 msvcr120
msys2 msys2
@ -203,7 +200,6 @@ stduuid_project
strequal strequal
ularge_integer ularge_integer
uring uring
url
userenv userenv
utimens_impl utimens_impl
utimensat utimensat

View File

@ -4,6 +4,10 @@
### Issues ### Issues
* ~~\#12 \[Unit Test\] Complete all providers unit tests~~
* ~~\#20 Add support to evict open files~~
* ~~\#21 \[Unit Test \] Complete WinFSP unit tests~~
* ~~\#22 \[Unit Test\] Complete FUSE unit tests~~
* \#28 \[bug\] Address slow directory responses in S3 mounts for deeply nested directories * \#28 \[bug\] Address slow directory responses in S3 mounts for deeply nested directories
* \#29 \[bug\] S3 error responses are not being logged * \#29 \[bug\] S3 error responses are not being logged
* \#30 \[bug\] Sia provider error responses are not logged * \#30 \[bug\] Sia provider error responses are not logged

View File

@ -3,10 +3,6 @@ cmake_minimum_required(VERSION 3.27)
cmake_policy(SET CMP0135 NEW) cmake_policy(SET CMP0135 NEW)
cmake_policy(SET CMP0144 NEW) cmake_policy(SET CMP0144 NEW)
if (NOT PROJECT_INTERFACE)
message(FATAL_ERROR "Project must be compiled via 'make_win32.cmd'/'make_win32.sh' or 'make_unix.sh' build scripts. Invoking 'cmake' directly is not supported.")
endif()
project(${PROJECT_NAME} project(${PROJECT_NAME}
DESCRIPTION ${PROJECT_DESC} DESCRIPTION ${PROJECT_DESC}
HOMEPAGE_URL ${PROJECT_URL} HOMEPAGE_URL ${PROJECT_URL}
@ -162,7 +158,6 @@ endif()
-DPROJECT_FUSE=${PROJECT_FUSE} -DPROJECT_FUSE=${PROJECT_FUSE}
-DPROJECT_FUSE_INCLUDE_DIRS=${PROJECT_FUSE_INCLUDE_DIRS} -DPROJECT_FUSE_INCLUDE_DIRS=${PROJECT_FUSE_INCLUDE_DIRS}
-DPROJECT_GIT_REV=${PROJECT_GIT_REV} -DPROJECT_GIT_REV=${PROJECT_GIT_REV}
-DPROJECT_INTERFACE=1
-DPROJECT_IS_ALPINE=${PROJECT_IS_ALPINE} -DPROJECT_IS_ALPINE=${PROJECT_IS_ALPINE}
-DPROJECT_IS_ARM64=${PROJECT_IS_ARM64} -DPROJECT_IS_ARM64=${PROJECT_IS_ARM64}
-DPROJECT_IS_MINGW=${PROJECT_IS_MINGW} -DPROJECT_IS_MINGW=${PROJECT_IS_MINGW}

126
README.md
View File

@ -1,22 +1,23 @@
# Repertory # Repertory
Repertory allows you to mount S3 and Sia via FUSE on Linux or via WinFSP Repertory allows you to mount AWS S3 and Sia via FUSE on Linux ~~/OS X~~ or via WinFSP
on Windows. on Windows.
## Details and Features ## Details and Features
* Optimized for [Plex Media Server](https://www.plex.tv/) * Optimized for [Plex Media Server](https://www.plex.tv/)
* Single application to mount S3 and/or Sia * Single application to mount AWS S3 and/or Sia
* Remote mounting of Repertory instances on Linux and Windows * Remote mounting of Repertory instances on Linux ~~, OS X~~ and Windows
* Securely share your mounts over TCP/IP via `XChaCha20-Poly1305` with other systems on your network or over the internet. * Securely share your mounts over TCP/IP (`XChaCha20-Poly1305` stream cipher)
* Cross-platform support (Linux 64-bit, Linux arm64/aarch64, Windows 64-bit) * Cross-platform support (Linux 64-bit, Linux arm64/aarch64, ~~OS X,~~ Windows 64-bit)
* Optionally encrypt file names and file data via `XChaCha20-Poly1305` in S3 mounts
## Minimum Requirements ## Minimum Requirements
* [Sia renterd](https://github.com/SiaFoundation/renterd/releases) v0.4.0+ for Sia support * [Sia renterd](https://github.com/SiaFoundation/renterd/releases) v0.4.0+ for Sia support
* Only 64-bit operating systems are supported * Only 64-bit operating systems are supported
* By default, Linux requires `fusermount3`; otherwise, `repertory` must be manually compiled with `libfuse2` support * By default, Linux requires `fusermount3`; otherwise, `repertory` must be manually compiled with `libfuse2` support
* ~~OS X requires the following dependency to be installed:~~
* ~~[FUSE for macOS v4.5.0](https://github.com/osxfuse/osxfuse/releases/download/macfuse-4.5.0/macfuse-4.5.0.dmg)~~
* Windows requires the following dependencies to be installed: * Windows requires the following dependencies to be installed:
* [WinFSP 2023](https://github.com/winfsp/winfsp/releases/download/v2.0/winfsp-2.0.23075.msi) * [WinFSP 2023](https://github.com/winfsp/winfsp/releases/download/v2.0/winfsp-2.0.23075.msi)
@ -24,103 +25,47 @@ on Windows.
* Linux `arm64/aarch64` * Linux `arm64/aarch64`
* Linux `amd64` * Linux `amd64`
* ~~OS X Mojave and above~~
* Windows 64-bit 10, 11 * Windows 64-bit 10, 11
## Usage ## Usage
### Sia
* Initial Configuration
* Sia steps:
* Set the appropriate bucket name and `renterd` API password in `repertory` configuration:
* To use `default` as the bucket name and configuration name:
* `repertory -set HostConfig.ApiPassword '<my password>'`
* To use a different bucket name with `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>'`
* To verify/view all configuration options:
* `repertory -dc`
* `repertory --name '<my config name>' -dc`
* Example:
* `repertory --name default -dc`
* Mounting on Linux:
* `repertory /mnt/location`
* `repertory --name '<my config name>' /mnt/location`
* Example:
* `repertory --name default /mnt/location`
* Mounting on Windows:
* `repertory t:`
* `repertory --name '<my config name>' t:`
* Example:
* `repertory --name default t:`
### S3
* Initial Configuration
* S3 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`
* 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>'`
* To verify/view all configuration options:
* `repertory -s3 --name '<my config name>' -dc`
* Example:
* `repertory -s3 --name minio -dc`
* Mounting on Linux:
* `repertory -s3 --name '<my config name>' /mnt/location`
* Example:
* `repertory -s3 --name minio /mnt/location`
* Mounting on Windows:
* `repertory -s3 --name '<my config name>' t:`
* Example:
* `repertory -s3 --name minio t:`
### Notable Options ### Notable Options
* `-dc`
* Display mount configuration.
* For Sia, `--name` is optional
* For S3, the `-s3` option is required along with `--name`
* `--help` * `--help`
* Display all mount utility options * Display all mount utility options.
* `--name, -na [name]` * `--name, -na [name]`
* The `--name` option can be set to any valid value allowed as a file name for your filesystem. * 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. * 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. * 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. * For S3, the `--name` option is required and does not affect the bucket name.
* `-dc` * `-set SiaConfig.Bucket`
* Display mount configuration * Set Sia bucket name for the mount.
* For Sia, `--name` is optional * Can be used in combination with `--name` to target a unique configuration.
* For S3, the `-s3` option is required along with `--name` * `-set S3Config.Bucket`
* S3 bucket name for the mount.
* Must be used in combination with `--name` to target a unique configuration.
* Must be used in combination with `-s3`.
### Data Directories ### Sia
* Linux * Linux
* `~/.local/repertory2` * `repertory /mnt/location`
* `repertory --name default /mnt/location`
* Windows * Windows
* `%LOCALAPPDATA%\repertory2` * `repertory.exe t:`
* Example: * `repertory.exe --name default t:`
* `C:\Users\Tom\AppData\Local\repertory2`
* 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 ### S3
`Repertory` allows local mounts to be shared with other computers on your network. * Linux
This option is referred to as remote mounting. Instructions TBD. * `repertory --name storj -s3 /mnt/location`
* Windows
* `repertory.exe --name storj -s3 t:`
## Compiling ## Compiling
@ -149,26 +94,17 @@ This option is referred to as remote mounting. Instructions TBD.
## Credits ## Credits
* [binutils](https://www.gnu.org/software/binutils/)
* [boost c++ libraries](https://www.boost.org/) * [boost c++ libraries](https://www.boost.org/)
* [cpp-httplib](https://github.com/yhirose/cpp-httplib) * [cpp-httplib](https://github.com/yhirose/cpp-httplib)
* [curl](https://curl.haxx.se/) * [curl](https://curl.haxx.se/)
* [docker](https://www.docker.com/) * ~~[FUSE for macOS](https://osxfuse.github.io/)~~
* [Google Test](https://github.com/google/googletest) * [Google Test](https://github.com/google/googletest)
* [ICU](https://icu.unicode.org/)
* [JSON for Modern C++](https://github.com/nlohmann/json) * [JSON for Modern C++](https://github.com/nlohmann/json)
* [libexpat](https://github.com/libexpat/libexpat)
* [libfuse](https://github.com/libfuse/libfuse) * [libfuse](https://github.com/libfuse/libfuse)
* [libsodium](https://doc.libsodium.org/) * [libsodium](https://doc.libsodium.org/)
* [mingw-w64](https://www.mingw-w64.org/)
* [MSYS2](https://www.msys2.org)
* [OpenSSL](https://www.openssl.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/) * [ScPrime](https://scpri.me/)
* [Sia Decentralized Cloud Storage](https://sia.tech/) * [Sia Decentralized Cloud Storage](https://sia.tech/)
* [spdlog](https://github.com/gabime/spdlog)
* [SQLite](https://www.sqlite.org) * [SQLite](https://www.sqlite.org)
* [stduuid](https://github.com/mariusbancila/stduuid) * [stduuid](https://github.com/mariusbancila/stduuid)
* [Storj](https://storj.io/) * [Storj](https://storj.io/)

View File

@ -1,15 +1,15 @@
set(BINUTILS_VERSION 2.43) set(BINUTILS_VERSION 2.43)
set(BOOST_MAJOR_VERSION 1)
set(BOOST_MINOR_VERSION 87)
set(BOOST_PATCH_VERSION 0)
set(BOOST2_MAJOR_VERSION 1) set(BOOST2_MAJOR_VERSION 1)
set(BOOST2_MINOR_VERSION 76) set(BOOST2_MINOR_VERSION 76)
set(BOOST2_PATCH_VERSION 0) set(BOOST2_PATCH_VERSION 0)
set(BOOST_MAJOR_VERSION 1)
set(BOOST_MINOR_VERSION 87)
set(BOOST_PATCH_VERSION 0)
set(CPP_HTTPLIB_VERSION 0.18.1) set(CPP_HTTPLIB_VERSION 0.18.1)
set(CURL_VERSION 8.11.0)
set(CURL2_VERSION 8_11_0) set(CURL2_VERSION 8_11_0)
set(EXPAT_VERSION 2.6.4) set(CURL_VERSION 8.11.0)
set(EXPAT2_VERSION 2_6_4) set(EXPAT2_VERSION 2_6_4)
set(EXPAT_VERSION 2.6.4)
set(GCC_VERSION 14.2.0) set(GCC_VERSION 14.2.0)
set(GTEST_VERSION 1.15.2) set(GTEST_VERSION 1.15.2)
set(ICU_VERSION 76-1) set(ICU_VERSION 76-1)
@ -22,7 +22,7 @@ set(PKG_CONFIG_VERSION 0.29.2)
set(PUGIXML_VERSION 1.14) set(PUGIXML_VERSION 1.14)
set(ROCKSDB_VERSION 9.7.4) set(ROCKSDB_VERSION 9.7.4)
set(SPDLOG_VERSION 1.15.0) set(SPDLOG_VERSION 1.15.0)
set(SQLITE_VERSION 3460100)
set(SQLITE2_VERSION 3.46.1) set(SQLITE2_VERSION 3.46.1)
set(SQLITE_VERSION 3460100)
set(STDUUID_VERSION 1.2.3) set(STDUUID_VERSION 1.2.3)
set(ZLIB_VERSION 1.3.1) set(ZLIB_VERSION 1.3.1)

View File

@ -43,8 +43,7 @@ constexpr const auto max_orphaned_file_retention_days{std::uint16_t(31U)};
constexpr const auto max_ring_buffer_file_size{std::uint16_t(1024U)}; constexpr const auto max_ring_buffer_file_size{std::uint16_t(1024U)};
constexpr const auto max_s3_object_name_length{1024U}; constexpr const auto max_s3_object_name_length{1024U};
constexpr const auto min_cache_size_bytes{ constexpr const auto min_cache_size_bytes{
std::uint64_t(100UL * 1024UL * 1024UL), std::uint64_t(100UL * 1024UL * 1024UL)};
};
constexpr const auto min_download_timeout_secs{std::uint8_t(5U)}; constexpr const auto min_download_timeout_secs{std::uint8_t(5U)};
constexpr const auto min_online_check_retry_secs{std::uint16_t(15U)}; constexpr const auto min_online_check_retry_secs{std::uint16_t(15U)};
constexpr const auto min_orphaned_file_retention_days{std::uint16_t(1U)}; constexpr const auto min_orphaned_file_retention_days{std::uint16_t(1U)};

View File

@ -171,6 +171,10 @@ void rdb_file_db::enumerate_item_list(
callback(list); callback(list);
list.clear(); list.clear();
} }
if (not list.empty()) {
callback(list);
}
} }
{ {
@ -190,10 +194,10 @@ void rdb_file_db::enumerate_item_list(
callback(list); callback(list);
list.clear(); list.clear();
} }
}
if (not list.empty()) { if (not list.empty()) {
callback(list); callback(list);
}
} }
} }

View File

@ -27,7 +27,7 @@
namespace repertory::cli::actions { namespace repertory::cli::actions {
template <typename drive> inline void version(std::vector<const char *> args) { template <typename drive> inline void version(std::vector<const char *> args) {
std::cout << "Repertory core version: " << project_get_version() << std::endl; std::cout << "Repertory core version: " << project_get_version() << std::endl;
std::cout << "Repertory git revision: " << project_get_git_rev() << std::endl; std::cout << "Repertory Git revision: " << project_get_git_rev() << std::endl;
drive::display_version_information(args); drive::display_version_information(args);
} }
} // namespace repertory::cli::actions } // namespace repertory::cli::actions

View File

@ -41,7 +41,7 @@ using repertory_drive = repertory::winfsp_drive;
using remote_client = repertory::remote_winfsp::remote_client; using remote_client = repertory::remote_winfsp::remote_client;
using remote_drive = repertory::remote_winfsp::remote_winfsp_drive; using remote_drive = repertory::remote_winfsp::remote_winfsp_drive;
using remote_instance = repertory::remote_winfsp::i_remote_instance; using remote_instance = repertory::remote_winfsp::i_remote_instance;
#else // !defined(_WIN32) #else
#include "drives/fuse/fuse_drive.hpp" #include "drives/fuse/fuse_drive.hpp"
#include "drives/fuse/remotefuse/remote_client.hpp" #include "drives/fuse/remotefuse/remote_client.hpp"
#include "drives/fuse/remotefuse/remote_fuse_drive.hpp" #include "drives/fuse/remotefuse/remote_fuse_drive.hpp"
@ -50,7 +50,7 @@ using repertory_drive = repertory::fuse_drive;
using remote_client = repertory::remote_fuse::remote_client; using remote_client = repertory::remote_fuse::remote_client;
using remote_drive = repertory::remote_fuse::remote_fuse_drive; using remote_drive = repertory::remote_fuse::remote_fuse_drive;
using remote_instance = repertory::remote_fuse::i_remote_instance; using remote_instance = repertory::remote_fuse::i_remote_instance;
#endif // defined(_WIN32) #endif
namespace repertory::cli::actions { namespace repertory::cli::actions {
[[nodiscard]] inline auto [[nodiscard]] inline auto
@ -77,8 +77,7 @@ mount(std::vector<const char *> args, std::string data_directory,
config.set_remote_config(cfg); config.set_remote_config(cfg);
} else if (prov == provider_type::sia && } else if (prov == provider_type::sia &&
config.get_sia_config().bucket.empty()) { config.get_sia_config().bucket.empty()) {
[[maybe_unused]] auto bucket = config.set_value_by_name("SiaConfig.Bucket", unique_id);
config.set_value_by_name("SiaConfig.Bucket", unique_id);
} }
std::cout << "Generated " << app_config::get_provider_display_name(prov) std::cout << "Generated " << app_config::get_provider_display_name(prov)
@ -158,8 +157,7 @@ mount(std::vector<const char *> args, std::string data_directory,
} else { } else {
if (prov == provider_type::sia && if (prov == provider_type::sia &&
config.get_sia_config().bucket.empty()) { config.get_sia_config().bucket.empty()) {
[[maybe_unused]] auto bucket = config.set_value_by_name("SiaConfig.Bucket", unique_id);
config.set_value_by_name("SiaConfig.Bucket", unique_id);
} }
try { try {

View File

@ -339,30 +339,4 @@ TYPED_TEST(file_db_test, item_not_found_is_returned_for_non_existing_api_path) {
this->file_db->get_source_path("/file", source_path)); this->file_db->get_source_path("/file", source_path));
EXPECT_TRUE(source_path.empty()); EXPECT_TRUE(source_path.empty());
} }
TYPED_TEST(file_db_test, can_enumerate_item_list) {
this->file_db->clear();
EXPECT_EQ(api_error::success,
this->file_db->add_directory("/", std::filesystem::current_path().string()));
EXPECT_EQ(api_error::success, this->file_db->add_or_update_file({
"/file",
0U,
{},
"c:\\test\\file.txt",
}));
auto call_count{0U};
const auto get_stop_requested = []() -> bool { return false; };
this->file_db->enumerate_item_list(
[&call_count](auto &&list) {
EXPECT_EQ(std::size_t(2U), list.size());
++call_count;
},
get_stop_requested);
EXPECT_EQ(std::size_t(1U), call_count);
}
} // namespace repertory } // namespace repertory

View File

@ -615,35 +615,4 @@ TYPED_TEST(meta_db_test, check_set_item_meta_file_defaults) {
EXPECT_EQ(0U, utils::string::to_uint64(meta[META_SIZE])); EXPECT_EQ(0U, utils::string::to_uint64(meta[META_SIZE]));
EXPECT_TRUE(meta[META_SOURCE].empty()); EXPECT_TRUE(meta[META_SOURCE].empty());
} }
TYPED_TEST(meta_db_test, can_enumerate_api_path_list) {
this->meta_db->clear();
auto test_dir = create_test_file();
EXPECT_EQ(api_error::success,
this->meta_db->set_item_meta(
test_dir, {
{META_DIRECTORY, utils::string::from_bool(true)},
}));
auto test_file = create_test_file();
EXPECT_EQ(
api_error::success,
this->meta_db->set_item_meta(
test_file, {
{META_DIRECTORY, utils::string::from_bool(false)},
}));
auto call_count{0U};
const auto get_stop_requested = []() -> bool { return false; };
this->meta_db->enumerate_api_path_list(
[&call_count](auto &&list) {
EXPECT_EQ(std::size_t(2U), list.size());
++call_count;
},
get_stop_requested);
EXPECT_EQ(std::size_t(1U), call_count);
}
} // namespace repertory } // namespace repertory

View File

@ -23,7 +23,6 @@ cmake "${PROJECT_SOURCE_DIR}" \
-DPROJECT_COMPANY_NAME="${PROJECT_COMPANY_NAME}" \ -DPROJECT_COMPANY_NAME="${PROJECT_COMPANY_NAME}" \
-DPROJECT_COPYRIGHT="${PROJECT_COPYRIGHT}" \ -DPROJECT_COPYRIGHT="${PROJECT_COPYRIGHT}" \
-DPROJECT_DESC="${PROJECT_DESC}" \ -DPROJECT_DESC="${PROJECT_DESC}" \
-DPROJECT_INTERFACE=1 \
-DPROJECT_URL="${PROJECT_URL}" \ -DPROJECT_URL="${PROJECT_URL}" \
${PROJECT_CMAKE_OPTS} || exit 1 ${PROJECT_CMAKE_OPTS} || exit 1