350 Commits

Author SHA1 Message Date
17a28b58a4 fix foreground unmount
All checks were successful
BlockStorage/repertory_mac/pipeline/head This commit looks good
BlockStorage/repertory/pipeline/head This commit looks good
2025-09-12 20:04:09 -05:00
078f679cca fix
Some checks reported errors
BlockStorage/repertory_mac/pipeline/head Something is wrong with the build of this commit
BlockStorage/repertory/pipeline/head This commit looks good
2025-09-12 18:03:39 -05:00
694f487861 fix dmg
Some checks reported errors
BlockStorage/repertory_mac/pipeline/head Something is wrong with the build of this commit
BlockStorage/repertory/pipeline/head This commit looks good
2025-09-12 17:58:40 -05:00
ed89b3e8c2 fix
All checks were successful
BlockStorage/repertory_mac/pipeline/head This commit looks good
BlockStorage/repertory/pipeline/head This commit looks good
2025-09-12 15:22:52 -07:00
12d1491221 fix
Some checks failed
BlockStorage/repertory/pipeline/head There was a failure building this commit
2025-09-12 14:51:38 -05:00
eaf0018eb7 fix test crash
Some checks failed
BlockStorage/repertory/pipeline/head There was a failure building this commit
2025-09-12 14:48:35 -05:00
24bb67894f refactor
Some checks failed
BlockStorage/repertory/pipeline/head There was a failure building this commit
2025-09-12 13:43:07 -05:00
218545569d fix 2025-09-12 13:35:11 -05:00
1ca5f41d89 Merge branch 'v2.1.0-rc-develop' of https://git.fifthgrid.com/blockstorage/repertory into v2.1.0-rc-develop
Some checks failed
BlockStorage/repertory/pipeline/head There was a failure building this commit
2025-09-12 11:55:33 -05:00
f0e1cc7fc5 Pinning a file should automatically initiate a download to cache #38 2025-09-12 11:54:51 -05:00
e3dd7c9791 updated build system
Some checks failed
BlockStorage/repertory/pipeline/head There was a failure building this commit
2025-09-12 10:53:42 -05:00
8f0d8d7d6c fix mock
Some checks failed
BlockStorage/repertory/pipeline/head There was a failure building this commit
2025-09-12 10:49:34 -05:00
b5fe6709d4 fix conversion
Some checks failed
BlockStorage/repertory/pipeline/head There was a failure building this commit
2025-09-12 10:46:09 -05:00
d6ee76ca7a fix naming conflict
Some checks failed
BlockStorage/repertory/pipeline/head There was a failure building this commit
2025-09-12 10:43:55 -05:00
3d93712aac Pinning a file should automatically initiate a download to cache #38
Some checks failed
BlockStorage/repertory/pipeline/head There was a failure building this commit
2025-09-12 10:40:28 -05:00
21ac54e97c fix
Some checks failed
BlockStorage/repertory/pipeline/head There was a failure building this commit
2025-09-12 10:28:13 -05:00
eee5587bab Pinning a file should automatically initiate a download to cache #38
Some checks reported errors
BlockStorage/repertory/pipeline/head Something is wrong with the build of this commit
2025-09-12 10:25:33 -05:00
8475d04341 remove plist
All checks were successful
BlockStorage/repertory/pipeline/head This commit looks good
2025-09-11 08:11:10 -05:00
66c606a28f fix 2025-09-11 08:05:12 -05:00
4267861034 fix
Some checks are pending
BlockStorage/repertory/pipeline/head Build queued...
2025-09-11 08:02:26 -05:00
57ad2e9773 remove launchd entry on unmount
All checks were successful
BlockStorage/repertory/pipeline/head This commit looks good
2025-09-11 07:57:53 -05:00
158675f9c9 updated help
All checks were successful
BlockStorage/repertory/pipeline/head This commit looks good
2025-09-10 13:48:06 -05:00
4f4323d7b7 added force legacy encryption
All checks were successful
BlockStorage/repertory/pipeline/head This commit looks good
2025-09-10 10:48:13 -05:00
873c82b84e updated README.md
All checks were successful
BlockStorage/repertory/pipeline/head This commit looks good
2025-09-09 14:19:08 -05:00
35d1893275 updated README.md
All checks were successful
BlockStorage/repertory/pipeline/head This commit looks good
2025-09-09 11:06:31 -05:00
caa9bf2604 updated README.md
All checks were successful
BlockStorage/repertory/pipeline/head This commit looks good
2025-09-09 11:01:05 -05:00
b72c1822d5 updated README.md
All checks were successful
BlockStorage/repertory/pipeline/head This commit looks good
2025-09-09 10:25:52 -05:00
d6b9a73570 fix
All checks were successful
BlockStorage/repertory/pipeline/head This commit looks good
2025-09-09 08:16:56 -05:00
61f768f306 updated README.md
Some checks failed
BlockStorage/repertory/pipeline/head There was a failure building this commit
2025-09-09 07:10:49 -05:00
8add58bdd3 updated README.md 2025-09-09 07:09:48 -05:00
075b15286f updated README.md 2025-09-09 07:08:32 -05:00
ca21b13ab9 added images
Some checks are pending
BlockStorage/repertory/pipeline/head Build queued...
2025-09-09 07:05:40 -05:00
9eac4a4191 move icons to assets folder
Some checks failed
BlockStorage/repertory/pipeline/head There was a failure building this commit
2025-09-09 06:54:31 -05:00
c24bd2d615 fix
All checks were successful
BlockStorage/repertory/pipeline/head This commit looks good
2025-09-08 14:26:56 -05:00
99b50713ce try to fix 3
All checks were successful
BlockStorage/repertory/pipeline/head This commit looks good
2025-09-08 13:27:16 -05:00
fa0da8ec3f try to fix v2
Some checks reported errors
BlockStorage/repertory/pipeline/head Something is wrong with the build of this commit
2025-09-08 13:05:45 -05:00
125b37b40a try to fix com init
Some checks reported errors
BlockStorage/repertory/pipeline/head Something is wrong with the build of this commit
2025-09-08 12:42:43 -05:00
7e88142cdb fix
All checks were successful
BlockStorage/repertory/pipeline/head This commit looks good
2025-09-08 11:56:31 -05:00
1ed322b0c7 windows shutdown handling and setup changes
Some checks failed
BlockStorage/repertory/pipeline/head There was a failure building this commit
2025-09-08 11:03:38 -05:00
ba21676c2b updated build system
All checks were successful
BlockStorage/repertory/pipeline/head This commit looks good
2025-09-08 09:16:10 -05:00
de74dbcbac don't reinitialize com 2025-09-08 09:05:01 -05:00
966d28cf5b refactor ui
Some checks are pending
BlockStorage/repertory/pipeline/head Build queued...
2025-09-08 09:01:56 -05:00
cf9011c1ce fix
Some checks are pending
BlockStorage/repertory_mac/pipeline/head Build queued...
BlockStorage/repertory/pipeline/head This commit looks good
2025-09-08 07:58:25 -05:00
5597c7b802 fix
Some checks failed
BlockStorage/repertory_mac/pipeline/head There was a failure building this commit
BlockStorage/repertory/pipeline/head There was a failure building this commit
2025-09-08 07:54:40 -05:00
4a91d29490 winfsp installation 2025-09-08 07:49:06 -05:00
d772a713a2 added animation toggle
Some checks failed
BlockStorage/repertory_mac/pipeline/head There was a failure building this commit
BlockStorage/repertory/pipeline/head There was a failure building this commit
2025-09-08 07:47:04 -05:00
f0bd032cb9 win32 fix
Some checks failed
BlockStorage/repertory/pipeline/head This commit looks good
BlockStorage/repertory_mac/pipeline/head There was a failure building this commit
2025-09-07 12:31:21 -07:00
68ca817fd7 win32 fixes
All checks were successful
BlockStorage/repertory_mac/pipeline/head This commit looks good
BlockStorage/repertory/pipeline/head This commit looks good
2025-09-07 11:57:26 -07:00
7fd518a1e5 macos fix
All checks were successful
BlockStorage/repertory_mac/pipeline/head This commit looks good
BlockStorage/repertory/pipeline/head This commit looks good
2025-09-07 09:30:05 -05:00
4d20715e26 macos fix
All checks were successful
BlockStorage/repertory_mac/pipeline/head This commit looks good
2025-09-07 09:00:21 -05:00
2d5e28cfc2 macos fix
Some checks reported errors
BlockStorage/repertory/pipeline/head Build queued...
BlockStorage/repertory_mac/pipeline/head Something is wrong with the build of this commit
2025-09-07 08:58:56 -05:00
cafa012bca fix
Some checks reported errors
BlockStorage/repertory_mac/pipeline/head Something is wrong with the build of this commit
BlockStorage/repertory/pipeline/head This commit looks good
2025-09-07 08:56:46 -05:00
88ab085846 [ui] Add auto-mount on first launch functionality #52
Some checks failed
BlockStorage/repertory/pipeline/head This commit looks good
BlockStorage/repertory_mac/pipeline/head There was a failure building this commit
2025-09-06 19:30:44 -05:00
7f2a9d99dd [ui] Add auto-mount on first launch functionality #52
All checks were successful
BlockStorage/repertory/pipeline/head This commit looks good
2025-09-06 18:54:02 -05:00
35be1a0d03 [ui] Add auto-mount on first launch functionality #52 2025-09-06 18:53:50 -05:00
4f65f0379f [ui] Add auto-mount on first launch functionality #52 2025-09-06 18:43:31 -05:00
06ae4bab43 [ui] Add auto-mount on first launch functionality #52 2025-09-06 18:42:51 -05:00
9ce49848fd [ui] Add auto-mount on first launch functionality #52 2025-09-06 18:36:54 -05:00
9d58e804a0 [ui] Add auto-mount on first launch functionality #52 2025-09-06 18:34:00 -05:00
98a277713b [ui] Add auto-mount on first launch functionality #52 2025-09-06 18:24:49 -05:00
f473d5c855 [ui] Add auto-mount on first launch functionality #52 2025-09-06 18:19:41 -05:00
f4a7e0e187 [ui] Add auto-mount on first launch functionality #52
All checks were successful
BlockStorage/repertory/pipeline/head This commit looks good
2025-09-06 17:08:59 -05:00
39b5491c52 fix
All checks were successful
BlockStorage/repertory/pipeline/head This commit looks good
2025-09-06 14:31:08 -05:00
3ad0b7cdd7 fix 2025-09-06 14:21:24 -05:00
1c759c2f7e fix 2025-09-06 13:55:20 -05:00
a1cd963683 fix 2025-09-06 13:30:23 -05:00
c277233855 fix
Some checks are pending
BlockStorage/repertory/pipeline/head Build queued...
2025-09-06 13:18:34 -05:00
0ddcb134a1 fix
All checks were successful
BlockStorage/repertory/pipeline/head This commit looks good
2025-09-06 12:13:59 -05:00
0bc07bf7fc [ui] Add auto-mount on first launch functionality #52 2025-09-06 12:13:17 -05:00
558cbe62fc [ui] Add auto-mount on first launch functionality #52 2025-09-06 12:08:51 -05:00
1904bd868d [ui] Add auto-mount on first launch functionality #52 2025-09-06 12:07:07 -05:00
30633aa4ff refactor 2025-09-06 10:19:29 -05:00
7bfe455b1b [ui] Add auto-mount on first launch functionality #52
Some checks are pending
BlockStorage/repertory/pipeline/head Build queued...
2025-09-06 10:19:10 -05:00
a049542de2 fix
All checks were successful
BlockStorage/repertory/pipeline/head This commit looks good
2025-09-06 08:37:59 -05:00
6a95c8b21a [ui] Add auto-mount on first launch functionality #52 2025-09-06 08:09:59 -05:00
13fbcbab9a [ui] Add auto-mount on first launch functionality #52 2025-09-06 08:08:26 -05:00
78abe1ed8f fix
Some checks are pending
BlockStorage/repertory/pipeline/head Build queued...
2025-09-06 07:42:27 -05:00
2d19c57314 [ui] Add auto-mount on first launch functionality #52
All checks were successful
BlockStorage/repertory/pipeline/head This commit looks good
2025-09-06 07:33:52 -05:00
a1d77faa8d [ui] Add auto-mount on first launch functionality #52 2025-09-06 07:33:14 -05:00
9de4d3172f refactor ui
All checks were successful
BlockStorage/repertory/pipeline/head This commit looks good
2025-09-05 21:20:42 -05:00
a5ac2c3dfe fix settings
All checks were successful
BlockStorage/repertory/pipeline/head This commit looks good
2025-09-05 20:56:38 -05:00
06bc838e27 refactor ui
All checks were successful
BlockStorage/repertory/pipeline/head This commit looks good
2025-09-05 17:54:00 -05:00
db70ad5aa0 refactor ui
All checks were successful
BlockStorage/repertory/pipeline/head This commit looks good
2025-09-05 17:38:33 -05:00
6b9343371a refactor ui
All checks were successful
BlockStorage/repertory/pipeline/head This commit looks good
2025-09-05 15:17:58 -05:00
e597bea35d cleanup
All checks were successful
BlockStorage/repertory/pipeline/head This commit looks good
2025-09-05 15:00:42 -05:00
237cb88d9d refactor ui
All checks were successful
BlockStorage/repertory/pipeline/head This commit looks good
2025-09-05 14:36:06 -05:00
7e9e0f0729 refactor ui
All checks were successful
BlockStorage/repertory/pipeline/head This commit looks good
2025-09-05 11:14:45 -05:00
87bf174bb8 refactor ui
All checks were successful
BlockStorage/repertory/pipeline/head This commit looks good
2025-09-05 11:02:06 -05:00
7da1cfdd45 fix
All checks were successful
BlockStorage/repertory/pipeline/head This commit looks good
2025-09-05 10:52:59 -05:00
47cac7e71c refactor ui
All checks were successful
BlockStorage/repertory/pipeline/head This commit looks good
2025-09-05 10:11:57 -05:00
f5df53f781 refactor ui
All checks were successful
BlockStorage/repertory/pipeline/head This commit looks good
2025-09-05 09:27:32 -05:00
f16f6b808e ui fixes
All checks were successful
BlockStorage/repertory/pipeline/head This commit looks good
2025-09-05 08:32:31 -05:00
cd28953324 [ui] UI theme should match repertory blue #61
All checks were successful
BlockStorage/repertory/pipeline/head This commit looks good
2025-09-05 07:53:47 -05:00
da0e2ddb46 [ui] UI theme should match repertory blue #61
All checks were successful
BlockStorage/repertory/pipeline/head This commit looks good
2025-09-04 20:01:55 -05:00
71ddf7ecf7 [ui] UI theme should match repertory blue #61
All checks were successful
BlockStorage/repertory/pipeline/head This commit looks good
2025-09-04 19:23:18 -05:00
035a411800 added sodium 2025-09-04 19:13:23 -05:00
fc0cff5a0c fix
Some checks are pending
BlockStorage/repertory/pipeline/head Build queued...
2025-09-04 19:09:05 -05:00
425160c390 update
All checks were successful
BlockStorage/repertory/pipeline/head This commit looks good
2025-09-04 18:50:03 -05:00
75036f2418 revert
All checks were successful
BlockStorage/repertory/pipeline/head This commit looks good
2025-09-04 18:39:34 -05:00
f18157170b fix
Some checks are pending
BlockStorage/repertory/pipeline/head Build queued...
2025-09-04 18:29:19 -05:00
61e0ce4b97 [ui] UI theme should match repertory blue #61
All checks were successful
BlockStorage/repertory/pipeline/head This commit looks good
2025-09-04 18:26:22 -05:00
25e3562300 refactor ui
All checks were successful
BlockStorage/repertory/pipeline/head This commit looks good
2025-09-04 15:22:01 -05:00
5f92801860 refactor ui 2025-09-04 15:21:43 -05:00
8797134903 [ui] UI theme should match repertory blue #61
All checks were successful
BlockStorage/repertory/pipeline/head This commit looks good
2025-09-04 13:10:16 -05:00
ad88f369bc [ui] UI theme should match repertory blue #61 2025-09-04 13:05:09 -05:00
c03877aa58 [ui] UI theme should match repertory blue #61 2025-09-04 11:31:16 -05:00
36ef520cf2 [ui] UI theme should match repertory blue #61 2025-09-04 11:20:47 -05:00
d1183c00af [ui] UI theme should match repertory blue #61
All checks were successful
BlockStorage/repertory/pipeline/head This commit looks good
2025-09-04 10:59:36 -05:00
58451858fd [ui] UI theme should match repertory blue #61 2025-09-04 09:09:10 -05:00
4b44ce4482 fix
All checks were successful
BlockStorage/repertory/pipeline/head This commit looks good
2025-09-03 15:15:06 -05:00
1967389fdc fix
Some checks failed
BlockStorage/repertory/pipeline/head There was a failure building this commit
2025-09-03 15:01:24 -05:00
bd913d83e1 added additional winfsp unit tests
Some checks failed
BlockStorage/repertory/pipeline/head There was a failure building this commit
2025-09-03 14:42:15 -05:00
c20574aa3b added additional unit tests
Some checks are pending
BlockStorage/repertory/pipeline/head Build queued...
2025-09-03 14:38:08 -05:00
518bcc6527 fix
All checks were successful
BlockStorage/repertory/pipeline/head This commit looks good
2025-09-03 14:28:17 -05:00
ad8feafa5c fix
Some checks reported errors
BlockStorage/repertory/pipeline/head Something is wrong with the build of this commit
2025-09-03 14:27:26 -05:00
5ac94667f9 fix
Some checks failed
BlockStorage/repertory/pipeline/head There was a failure building this commit
2025-09-03 10:31:32 -05:00
4dcfdedb14 fix
Some checks reported errors
BlockStorage/repertory/pipeline/head Something is wrong with the build of this commit
2025-09-03 09:05:31 -05:00
f76ba96613 skip tests on failure
Some checks failed
BlockStorage/repertory/pipeline/head There was a failure building this commit
2025-09-03 08:57:27 -05:00
6fdbaf9529 test legacy 2025-09-03 08:56:14 -05:00
8ac7b06d68 add setting to force legacy encryption 2025-09-03 08:51:22 -05:00
4f63d0bb32 updated jenkins builds
All checks were successful
BlockStorage/repertory/pipeline/head This commit looks good
2025-09-01 10:31:59 -05:00
b143962dac refactor
All checks were successful
BlockStorage/repertory/pipeline/head This commit looks good
2025-09-01 10:24:32 -05:00
9656828700 Implement secure key via KDF for transparent data encryption/decryption #60
All checks were successful
BlockStorage/repertory/pipeline/head This commit looks good
2025-08-31 20:00:59 -05:00
e680ec8664 fix missing meta
Some checks failed
BlockStorage/repertory/pipeline/head There was a failure building this commit
2025-08-31 16:18:42 -05:00
b40b0397d7 cleanup
Some checks reported errors
BlockStorage/repertory/pipeline/head Something is wrong with the build of this commit
2025-08-31 14:17:22 -05:00
932106d671 fix crash 2025-08-31 14:16:45 -05:00
6260785b15 restore kdf config from root 2025-08-31 14:14:52 -05:00
58a8b782c6 fix 2025-08-31 14:07:34 -05:00
6f658fab35 fix 2025-08-31 13:57:45 -05:00
e7fb5c5bc0 refactor
Some checks are pending
BlockStorage/repertory/pipeline/head Build queued...
2025-08-31 13:53:15 -05:00
9442d4f6ee Implement secure key via KDF for transparent data encryption/decryption #60 2025-08-31 13:49:38 -05:00
e542aa64ad Implement secure key via KDF for transparent data encryption/decryption #60
Some checks reported errors
BlockStorage/repertory/pipeline/head Something is wrong with the build of this commit
2025-08-31 12:08:04 -05:00
5a4e1302f1 fixed test 2025-08-31 07:30:01 -05:00
bbdf8ebad8 updated unit test
Some checks are pending
BlockStorage/repertory/pipeline/head Build queued...
2025-08-31 07:29:38 -05:00
91463bcac0 refactor
Some checks reported errors
BlockStorage/repertory/pipeline/head Something is wrong with the build of this commit
2025-08-31 07:22:49 -05:00
23f1852337 refactor 2025-08-30 19:43:06 -05:00
edc4465d15 Implement secure key via KDF for transparent data encryption/decryption #60 2025-08-30 19:13:54 -05:00
40e30defb3 added s3 max segment length check 2025-08-30 16:54:26 -05:00
478a5abff2 Implement secure key via KDF for transparent data encryption/decryption #60 2025-08-30 16:14:35 -05:00
c00d5e8894 Implement secure key via KDF for transparent data encryption/decryption #60 2025-08-30 15:43:01 -05:00
ff3b2314bf Implement secure key via KDF for transparent data encryption/decryption #60 2025-08-30 15:36:15 -05:00
76906b04ee Implement secure key via KDF for transparent data encryption/decryption #60 2025-08-30 14:59:39 -05:00
ee3fb40171 Implement secure key via KDF for transparent data encryption/decryption #60 2025-08-30 14:48:29 -05:00
d13ab3106e Implement secure key via KDF for transparent data encryption/decryption #60 2025-08-30 14:43:24 -05:00
f04d4d531a Implement secure key via KDF for transparent data encryption/decryption #60 2025-08-30 14:18:27 -05:00
55b7afc023 Implement secure key via KDF for transparent data encryption/decryption #60 2025-08-30 14:10:06 -05:00
5a033e7f12 Implement secure key via KDF for transparent data encryption/decryption #60 2025-08-30 11:38:06 -05:00
8979e6e2a4 Implement secure key via KDF for transparent data encryption/decryption #60 2025-08-30 11:10:44 -05:00
faaf7648a8 Implement secure key via KDF for transparent data encryption/decryption #60 2025-08-29 19:45:04 -05:00
72db4e12cd Implement secure key via KDF for transparent data encryption/decryption #60 2025-08-29 19:39:36 -05:00
62194271c0 broken build
Some checks failed
BlockStorage/repertory/pipeline/head There was a failure building this commit
2025-08-29 16:43:50 -05:00
087a2d0d6d Merge branch 'v2.1.0-rc-develop' of https://git.fifthgrid.com/blockstorage/repertory into v2.1.0-rc-develop 2025-08-29 09:04:14 -05:00
57213c007f prepare for argon2id 2025-08-29 09:03:16 -05:00
69d91413fc updated build system
All checks were successful
BlockStorage/repertory/pipeline/head This commit looks good
2025-08-28 20:21:21 -05:00
8cbaa83206 updated build system
All checks were successful
BlockStorage/repertory/pipeline/head This commit looks good
2025-08-28 18:36:15 -05:00
fa3419c7cc updated build system 2025-08-28 18:34:21 -05:00
c9362b8802 updated build system
All checks were successful
BlockStorage/repertory/pipeline/head This commit looks good
2025-08-27 17:35:35 -05:00
cae269d4d6 updated build system
All checks were successful
BlockStorage/repertory/pipeline/head This commit looks good
2025-08-26 20:20:39 -05:00
1d7e96f3a4 updated build system
Some checks failed
BlockStorage/repertory/pipeline/head There was a failure building this commit
2025-08-26 20:08:47 -05:00
8fabc142f2 updated CHANGELOG.md
All checks were successful
BlockStorage/repertory/pipeline/head This commit looks good
2025-08-25 10:34:56 -05:00
95aa190f5f [ui] UI theme should match repertory blue #61
All checks were successful
BlockStorage/repertory/pipeline/head This commit looks good
2025-08-21 14:57:35 -05:00
17116ecd02 images
All checks were successful
BlockStorage/repertory/pipeline/head This commit looks good
2025-08-18 11:12:35 -05:00
83aeec51dc icons
Some checks are pending
BlockStorage/repertory/pipeline/head Build queued...
2025-08-18 11:02:46 -05:00
1fd6721d33 common startup
All checks were successful
BlockStorage/repertory/pipeline/head This commit looks good
2025-08-18 10:10:18 -05:00
5782379897 add back auto-start
All checks were successful
BlockStorage/repertory/pipeline/head This commit looks good
2025-08-17 17:29:48 -05:00
1ccfae7552 [ui] UI theme should match repertory blue #61
All checks were successful
BlockStorage/repertory/pipeline/head This commit looks good
2025-08-17 17:22:35 -05:00
31dbed7a1f cleanup
All checks were successful
BlockStorage/repertory/pipeline/head This commit looks good
2025-08-17 10:34:26 -05:00
b8dd642dc5 [ui] UI theme should match repertory blue #61
All checks were successful
BlockStorage/repertory/pipeline/head This commit looks good
2025-08-17 09:25:34 -05:00
5326b3b81f fix color
All checks were successful
BlockStorage/repertory/pipeline/head This commit looks good
2025-08-15 15:24:51 -05:00
b5d5e63486 remove appbar
All checks were successful
BlockStorage/repertory/pipeline/head This commit looks good
2025-08-15 14:37:44 -05:00
f41a53c463 [ui] UI theme should match repertory blue #61
All checks were successful
BlockStorage/repertory/pipeline/head This commit looks good
2025-08-15 13:41:00 -05:00
98a5c89d6b updated color
All checks were successful
BlockStorage/repertory/pipeline/head This commit looks good
2025-08-15 13:33:21 -05:00
1a9756a86e fix 2025-08-15 13:32:14 -05:00
01bb853d22 [ui] UI theme should match repertory blue #61
All checks were successful
BlockStorage/repertory/pipeline/head This commit looks good
2025-08-15 12:54:13 -05:00
224bf37e68 handle authentication failure in auth screen
All checks were successful
BlockStorage/repertory/pipeline/head This commit looks good
2025-08-15 12:40:27 -05:00
14998bf952 [ui] UI theme should match repertory blue #61
All checks were successful
BlockStorage/repertory/pipeline/head This commit looks good
2025-08-15 12:29:42 -05:00
60222b3948 [ui] UI theme should match repertory blue #61
All checks were successful
BlockStorage/repertory/pipeline/head This commit looks good
2025-08-15 11:24:30 -05:00
e9a5b7e9af [ui] UI theme should match repertory blue #61
All checks were successful
BlockStorage/repertory/pipeline/head This commit looks good
2025-08-15 10:59:12 -05:00
fec755dc25 [ui] UI theme should match repertory blue #61
All checks were successful
BlockStorage/repertory/pipeline/head This commit looks good
2025-08-15 10:31:47 -05:00
60c098a5af [ui] UI theme should match repertory blue #61
All checks were successful
BlockStorage/repertory/pipeline/head This commit looks good
2025-08-15 10:10:05 -05:00
881b5f4efd [ui] UI theme should match repertory blue #61 2025-08-15 10:09:30 -05:00
9c8f045db8 updated README
All checks were successful
BlockStorage/repertory_mac/pipeline/head This commit looks good
BlockStorage/repertory/pipeline/head This commit looks good
2025-08-12 19:32:23 -05:00
d06b24674f updated build system
All checks were successful
BlockStorage/repertory_mac/pipeline/head This commit looks good
BlockStorage/repertory/pipeline/head This commit looks good
2025-08-12 19:04:05 -05:00
7299c4e96a build fails for unsupported os
Some checks failed
BlockStorage/repertory/pipeline/head There was a failure building this commit
BlockStorage/repertory_mac/pipeline/head This commit looks good
2025-08-12 18:51:17 -05:00
beaf4194c2 updated build system 2025-08-12 18:48:10 -05:00
877715aa22 updated build system 2025-08-12 18:43:55 -05:00
a16a795300 updated build system 2025-08-12 18:40:36 -05:00
7de7462548 updated build system 2025-08-12 18:30:52 -05:00
3effb4c80a updated build system 2025-08-12 18:28:15 -05:00
02d59cb047 [ui] Add auto-mount on first launch functionality #52
All checks were successful
BlockStorage/repertory_mac/pipeline/head This commit looks good
BlockStorage/repertory/pipeline/head This commit looks good
2025-08-08 19:07:13 -05:00
6968feac7e fix link error
Some checks failed
BlockStorage/repertory_mac/pipeline/head There was a failure building this commit
BlockStorage/repertory/pipeline/head This commit looks good
2025-08-08 09:40:02 -05:00
c38e1ce43b fix
Some checks failed
BlockStorage/repertory_mac/pipeline/head There was a failure building this commit
BlockStorage/repertory/pipeline/head There was a failure building this commit
2025-08-08 09:15:40 -05:00
efbdd08187 cleanup
Some checks failed
BlockStorage/repertory/pipeline/head Build queued...
BlockStorage/repertory_mac/pipeline/head There was a failure building this commit
2025-08-08 09:12:43 -05:00
fcd88f8c3f hash passwords
Some checks reported errors
BlockStorage/repertory_mac/pipeline/head There was a failure building this commit
BlockStorage/repertory/pipeline/head Something is wrong with the build of this commit
2025-08-08 09:09:53 -05:00
546455eedc daemonize on unix
Some checks failed
BlockStorage/repertory_mac/pipeline/head There was a failure building this commit
2025-08-08 08:47:50 -05:00
70bcfe9a9a fix
Some checks failed
BlockStorage/repertory/pipeline/head Build queued...
BlockStorage/repertory_mac/pipeline/head There was a failure building this commit
2025-08-08 08:28:29 -05:00
0150cb2918 macos test fixes
Some checks failed
BlockStorage/repertory_mac/pipeline/head There was a failure building this commit
BlockStorage/repertory/pipeline/head This commit looks good
2025-08-08 08:27:04 -05:00
5c5b7047a0 Create macOS bundle for simplified installation #58
Some checks failed
BlockStorage/repertory_mac/pipeline/head There was a failure building this commit
BlockStorage/repertory/pipeline/head This commit looks good
2025-08-07 21:56:34 -05:00
b0c9d55658 Create macOS bundle for simplified installation #58
All checks were successful
BlockStorage/repertory/pipeline/head This commit looks good
2025-08-07 21:44:16 -05:00
c7e27c0080 Create macOS bundle for simplified installation #58 2025-08-07 21:19:24 -05:00
28800625e4 Create macOS bundle for simplified installation #58 2025-08-07 21:16:54 -05:00
666b3f2dc5 macos fix
All checks were successful
BlockStorage/repertory/pipeline/head This commit looks good
2025-08-07 18:40:34 -05:00
95cc859c9a spelling
All checks were successful
BlockStorage/repertory/pipeline/head This commit looks good
2025-08-07 18:35:16 -05:00
e8f0b3d8dc macos build fixes 2025-08-07 18:34:26 -05:00
7bfb4a9518 Create macOS bundle for simplified installation #58
All checks were successful
BlockStorage/repertory/pipeline/head This commit looks good
2025-08-07 14:22:38 -05:00
3f502eeb64 Create macOS bundle for simplified installation #58 2025-08-07 14:21:33 -05:00
4dcd7bd5ce added test retry
All checks were successful
BlockStorage/repertory_mac/pipeline/head This commit looks good
BlockStorage/repertory/pipeline/head This commit looks good
2025-08-06 17:40:23 -05:00
6821cf3707 fix
All checks were successful
BlockStorage/repertory_mac/pipeline/head This commit looks good
BlockStorage/repertory/pipeline/head This commit looks good
2025-08-06 17:14:54 -05:00
8a68d025b5 refactor test
Some checks failed
BlockStorage/repertory_mac/pipeline/head Build queued...
BlockStorage/repertory/pipeline/head There was a failure building this commit
2025-08-06 15:20:37 -05:00
6bc11ec727 fix
Some checks reported errors
BlockStorage/repertory/pipeline/head Build queued...
BlockStorage/repertory_mac/pipeline/head Something is wrong with the build of this commit
2025-08-06 15:11:08 -05:00
b8daf9b9b7 refactor
Some checks reported errors
BlockStorage/repertory_mac/pipeline/head There was a failure building this commit
BlockStorage/repertory/pipeline/head Something is wrong with the build of this commit
2025-08-06 14:53:59 -05:00
63ef79f441 updated CHANGELOG.md
Some checks failed
BlockStorage/repertory_mac/pipeline/head There was a failure building this commit
BlockStorage/repertory/pipeline/head There was a failure building this commit
2025-08-06 08:34:41 -05:00
f83b5d8d07 cleanup
Some checks failed
BlockStorage/repertory_mac/pipeline/head There was a failure building this commit
BlockStorage/repertory/pipeline/head There was a failure building this commit
2025-08-06 08:22:56 -05:00
cac52f739f fix
Some checks reported errors
BlockStorage/repertory_mac/pipeline/head There was a failure building this commit
BlockStorage/repertory/pipeline/head Something is wrong with the build of this commit
2025-08-06 07:30:56 -05:00
02045dfd07 fix
Some checks failed
BlockStorage/repertory_mac/pipeline/head There was a failure building this commit
2025-08-06 07:27:58 -05:00
1a86fc5c29 fix
Some checks failed
BlockStorage/repertory_mac/pipeline/head There was a failure building this commit
2025-08-06 07:25:47 -05:00
ba82f322af fix
Some checks failed
BlockStorage/repertory_mac/pipeline/head There was a failure building this commit
2025-08-06 07:22:48 -05:00
2a40d8207e fix
Some checks reported errors
BlockStorage/repertory_mac/pipeline/head Something is wrong with the build of this commit
2025-08-06 07:22:09 -05:00
62a06281ab refactor
Some checks failed
BlockStorage/repertory/pipeline/head Build queued...
BlockStorage/repertory_mac/pipeline/head There was a failure building this commit
2025-08-06 07:19:52 -05:00
3a2e83682e refactor
Some checks reported errors
BlockStorage/repertory_mac/pipeline/head This commit looks good
BlockStorage/repertory/pipeline/head Something is wrong with the build of this commit
2025-08-05 19:01:29 -05:00
b28496c7b6 macos fixes 2025-08-05 18:43:16 -05:00
bea5e02c2e fix
Some checks are pending
BlockStorage/repertory/pipeline/head Build queued...
2025-08-05 17:39:02 -05:00
de3eec47a0 cleanup
Some checks reported errors
BlockStorage/repertory/pipeline/head Something is wrong with the build of this commit
2025-08-05 15:45:45 -05:00
08449b2468 fix linux
Some checks reported errors
BlockStorage/repertory/pipeline/head Something is wrong with the build of this commit
2025-08-05 15:21:22 -05:00
84794ce862 fix
Some checks reported errors
BlockStorage/repertory_mac/pipeline/head Something is wrong with the build of this commit
BlockStorage/repertory/pipeline/head Something is wrong with the build of this commit
2025-08-05 15:01:56 -05:00
21fc375ce0 fix
Some checks reported errors
BlockStorage/repertory_mac/pipeline/head Something is wrong with the build of this commit
BlockStorage/repertory/pipeline/head Something is wrong with the build of this commit
2025-08-05 14:53:54 -05:00
f73cd9b6cf macos fixes
Some checks failed
BlockStorage/repertory_mac/pipeline/head There was a failure building this commit
BlockStorage/repertory/pipeline/head There was a failure building this commit
2025-08-05 14:28:39 -05:00
f674017610 macos fixs 2025-08-05 09:37:28 -05:00
48852b00f8 fix
All checks were successful
BlockStorage/repertory_mac/pipeline/head This commit looks good
BlockStorage/repertory/pipeline/head This commit looks good
2025-08-04 22:47:47 -05:00
28480b1ee5 fix
Some checks reported errors
BlockStorage/repertory/pipeline/head Something is wrong with the build of this commit
BlockStorage/repertory_mac/pipeline/head This commit looks good
2025-08-04 22:35:18 -05:00
5916f438ca fix
Some checks reported errors
BlockStorage/repertory_mac/pipeline/head This commit looks good
BlockStorage/repertory/pipeline/head Something is wrong with the build of this commit
2025-08-04 22:23:57 -05:00
957a9f9c15 refactor
Some checks reported errors
BlockStorage/repertory/pipeline/head Something is wrong with the build of this commit
BlockStorage/repertory_mac/pipeline/head This commit looks good
2025-08-04 22:15:23 -05:00
efafa6bf68 common background fork 2025-08-04 22:15:09 -05:00
e88d53760d try to fix boost asio
All checks were successful
BlockStorage/repertory_mac/pipeline/head This commit looks good
BlockStorage/repertory/pipeline/head This commit looks good
2025-08-04 11:14:19 -05:00
ccb56485d8 don't cache disconnected sockets
Some checks failed
BlockStorage/repertory_mac/pipeline/head There was a failure building this commit
BlockStorage/repertory/pipeline/head This commit looks good
2025-08-04 10:59:03 -05:00
c91e51a445 clear cache on close all
Some checks failed
BlockStorage/repertory/pipeline/head Build queued...
BlockStorage/repertory_mac/pipeline/head There was a failure building this commit
2025-08-04 10:52:01 -05:00
1a6ab2d020 fix
All checks were successful
BlockStorage/repertory_mac/pipeline/head This commit looks good
BlockStorage/repertory/pipeline/head This commit looks good
2025-08-04 10:40:39 -05:00
6dd96939c4 clear cache on failure
Some checks failed
BlockStorage/repertory_mac/pipeline/head There was a failure building this commit
BlockStorage/repertory/pipeline/head There was a failure building this commit
2025-08-04 10:34:06 -05:00
06aee5a899 test refactor
Some checks failed
BlockStorage/repertory_mac/pipeline/head There was a failure building this commit
BlockStorage/repertory/pipeline/head This commit looks good
2025-08-04 10:14:17 -05:00
f56302769c added macos delivery
All checks were successful
BlockStorage/repertory_mac/pipeline/head This commit looks good
BlockStorage/repertory/pipeline/head This commit looks good
2025-08-04 09:00:37 -05:00
3e1d7e5e9b check remote prior to mount 2025-08-04 08:48:57 -05:00
ccbf64678e updated build system
All checks were successful
BlockStorage/repertory_mac/pipeline/head This commit looks good
BlockStorage/repertory/pipeline/head This commit looks good
2025-08-03 15:07:28 -05:00
a6ea47e1b0 refactor
Some checks failed
BlockStorage/repertory_mac/pipeline/head This commit looks good
BlockStorage/repertory/pipeline/head There was a failure building this commit
2025-08-03 14:56:21 -05:00
dcddca16f3 updated build system
Some checks are pending
BlockStorage/repertory/pipeline/head Build queued...
BlockStorage/repertory_mac/pipeline/head This commit looks good
2025-08-03 14:54:46 -05:00
25668a8d83 fix
Some checks failed
BlockStorage/repertory_mac/pipeline/head This commit looks good
BlockStorage/repertory/pipeline/head There was a failure building this commit
2025-08-03 14:38:51 -05:00
8068adb1bf fix
Some checks are pending
BlockStorage/repertory_mac/pipeline/head Build queued...
2025-08-03 14:36:59 -05:00
c79af5b085 fix
Some checks are pending
BlockStorage/repertory/pipeline/head Build queued...
BlockStorage/repertory_mac/pipeline/head This commit looks good
2025-08-03 14:32:40 -05:00
08057672d9 fix 2025-08-03 14:27:10 -05:00
542c8b9f32 enable macos tests
All checks were successful
BlockStorage/repertory_mac/pipeline/head This commit looks good
BlockStorage/repertory/pipeline/head This commit looks good
2025-08-03 13:51:24 -05:00
0cad44cd4e fix remote test
All checks were successful
BlockStorage/repertory_mac/pipeline/head This commit looks good
BlockStorage/repertory/pipeline/head This commit looks good
2025-08-03 13:42:55 -05:00
549afeacee linux fix
Some checks are pending
BlockStorage/repertory/pipeline/head Build queued...
BlockStorage/repertory_mac/pipeline/head This commit looks good
2025-08-03 13:33:19 -05:00
e79322f670 fix
Some checks reported errors
BlockStorage/repertory_mac/pipeline/head This commit looks good
BlockStorage/repertory/pipeline/head Something is wrong with the build of this commit
2025-08-03 13:26:36 -05:00
10e7f72eab fix
Some checks failed
BlockStorage/repertory_mac/pipeline/head This commit looks good
BlockStorage/repertory/pipeline/head There was a failure building this commit
2025-08-03 10:54:18 -05:00
7c2ecd3340 fix response data
Some checks are pending
BlockStorage/repertory/pipeline/head Build queued...
BlockStorage/repertory_mac/pipeline/head This commit looks good
2025-08-03 10:43:22 -05:00
29aaf625c7 Add macOS support #34
Some checks failed
BlockStorage/repertory_mac/pipeline/head This commit looks good
BlockStorage/repertory/pipeline/head There was a failure building this commit
2025-08-03 10:41:21 -05:00
eee832ce49 fix linux
Some checks failed
BlockStorage/repertory_mac/pipeline/head This commit looks good
BlockStorage/repertory/pipeline/head There was a failure building this commit
2025-08-02 20:45:52 -05:00
d8f3f87760 fix macos unit tests
Some checks failed
BlockStorage/repertory_mac/pipeline/head This commit looks good
BlockStorage/repertory/pipeline/head There was a failure building this commit
2025-08-02 20:43:31 -05:00
2df11b693c fix macos deadlock
Some checks failed
BlockStorage/repertory_mac/pipeline/head This commit looks good
BlockStorage/repertory/pipeline/head There was a failure building this commit
2025-08-02 19:18:22 -05:00
3805a27cd5 revert
All checks were successful
BlockStorage/repertory_mac/pipeline/head This commit looks good
BlockStorage/repertory/pipeline/head This commit looks good
2025-08-02 16:40:48 -05:00
d09bd35646 fix
Some checks failed
BlockStorage/repertory_mac/pipeline/head There was a failure building this commit
BlockStorage/repertory/pipeline/head This commit looks good
2025-08-02 16:37:49 -05:00
5bbdcd9fb6 macos builds
Some checks reported errors
BlockStorage/repertory/pipeline/head Something is wrong with the build of this commit
BlockStorage/repertory_mac/pipeline/head Something is wrong with the build of this commit
2025-08-02 13:37:34 -05:00
437a3444ec Add macOS support #34
All checks were successful
BlockStorage/repertory/pipeline/head This commit looks good
2025-08-02 13:24:19 -05:00
77e0633c38 refactor
All checks were successful
BlockStorage/repertory/pipeline/head This commit looks good
2025-08-02 11:12:09 -05:00
ad5794c223 macos fixes 2025-08-02 10:55:00 -05:00
fdec5f7b6e fix
Some checks are pending
BlockStorage/repertory/pipeline/head Build queued...
2025-08-02 10:24:22 -05:00
Scott E. Graves
fd1d32d314 Add macOS support #34
All checks were successful
BlockStorage/repertory/pipeline/head This commit looks good
2025-08-02 10:22:54 -05:00
0ca1a12cd4 updated build system
All checks were successful
BlockStorage/repertory/pipeline/head This commit looks good
2025-08-01 16:17:34 -05:00
6d456e5a7a Add macOS support #34
All checks were successful
BlockStorage/repertory/pipeline/head This commit looks good
2025-08-01 09:45:54 -05:00
07b6b5fca2 Add macOS support #34 2025-08-01 09:39:19 -05:00
15579ef3cb Add macOS support #34
All checks were successful
BlockStorage/repertory/pipeline/head This commit looks good
2025-08-01 08:04:34 -05:00
d9dd2a59e7 Add macOS support #34
Some checks failed
BlockStorage/repertory/pipeline/head There was a failure building this commit
2025-08-01 07:57:42 -05:00
d45d91340f Add macOS support #34
Some checks failed
BlockStorage/repertory/pipeline/head There was a failure building this commit
2025-08-01 07:42:58 -05:00
039ff6ba42 Add macOS support #34
Some checks failed
BlockStorage/repertory/pipeline/head There was a failure building this commit
2025-08-01 14:39:34 +02:00
81c6875382 Add macOS support #34
Some checks failed
BlockStorage/repertory/pipeline/head There was a failure building this commit
2025-08-01 14:12:27 +02:00
1bbe078799 updated build system
All checks were successful
BlockStorage/repertory/pipeline/head This commit looks good
2025-07-31 21:46:12 -05:00
17082eb271 update 2025-07-31 21:37:09 -05:00
9e5e775c71 update 2025-07-31 21:36:37 -05:00
bf63bdb8ea lfs 2025-08-01 04:22:13 +02:00
a0c412bd66 Add macOS support #34
Some checks are pending
BlockStorage/repertory/pipeline/head Build queued...
2025-08-01 04:20:51 +02:00
d40ff7d14d Add macOS support #34
All checks were successful
BlockStorage/repertory/pipeline/head This commit looks good
2025-08-01 03:50:33 +02:00
85609be4b6 Add macOS support #34
All checks were successful
BlockStorage/repertory/pipeline/head This commit looks good
2025-08-01 03:21:01 +02:00
83fb6aaec3 fix
All checks were successful
BlockStorage/repertory/pipeline/head This commit looks good
2025-07-31 11:35:52 -05:00
22f546f14d fix test
Some checks reported errors
BlockStorage/repertory/pipeline/head Something is wrong with the build of this commit
2025-07-31 11:09:15 -05:00
54376ae84a enable testing 2025-07-31 10:13:18 -05:00
2ac0f8fc52 copy icon
All checks were successful
BlockStorage/repertory/pipeline/head This commit looks good
2025-07-31 08:01:14 -05:00
bca7012d10 added macos icons 2025-07-31 07:58:01 -05:00
00b11da712 Create Windows installer #53
Some checks reported errors
BlockStorage/repertory/pipeline/head Something is wrong with the build of this commit
2025-07-31 07:56:26 -05:00
b438b1b1f1 Merge remote-tracking branch 'remotes/origin/master' into v2.1.0-rc-develop
All checks were successful
BlockStorage/repertory/pipeline/head This commit looks good
# Conflicts:
#	CHANGELOG.md
#	config.sh
#	repertory/repertory/src/ui/handlers.cpp
2025-07-31 07:04:42 -05:00
b360335655 merge
All checks were successful
BlockStorage/repertory/pipeline/head This commit looks good
2025-07-30 18:09:29 -05:00
2cba8936c4 updated version
All checks were successful
BlockStorage/repertory/pipeline/head This commit looks good
BlockStorage/repertory/pipeline/pr-master This commit looks good
2025-07-30 18:00:53 -05:00
f8451c5514 refactor
All checks were successful
BlockStorage/repertory/pipeline/head This commit looks good
BlockStorage/repertory/pipeline/pr-master This commit looks good
2025-07-30 17:43:19 -05:00
462a9446bd fix
Some checks reported errors
BlockStorage/repertory/pipeline/head Something is wrong with the build of this commit
BlockStorage/repertory/pipeline/pr-master Something is wrong with the build of this commit
2025-07-30 17:37:07 -05:00
a0a0d92169 updated CHANGELOG.md
All checks were successful
BlockStorage/repertory/pipeline/head This commit looks good
2025-07-30 15:26:15 -05:00
7fb34c1b4a Merge remote-tracking branch 'remotes/origin/v2.0.7-release-develop' into v2.1.0-rc-develop
# Conflicts:
#	CHANGELOG.md
#	config.sh
2025-07-30 15:25:31 -05:00
2ca345df8c updated CHANGELOG.md
Some checks are pending
BlockStorage/repertory/pipeline/head Build queued...
2025-07-30 15:23:06 -05:00
2d53671fdf [bug] Directory entries . and .. are incorrectly being reported as files in Linux remote mounts #57
Some checks failed
BlockStorage/repertory/pipeline/head There was a failure building this commit
BlockStorage/repertory/pipeline/pr-master There was a failure building this commit
2025-07-30 15:22:13 -05:00
03b810ec75 updated CHANGELOG.md
All checks were successful
BlockStorage/repertory/pipeline/head This commit looks good
2025-07-30 15:15:57 -05:00
3f4b88a2c6 [bug] UI is unable to launch repertory.exe on Windows when absolute path contains spaces #55
Some checks failed
BlockStorage/repertory/pipeline/head There was a failure building this commit
BlockStorage/repertory/pipeline/pr-master There was a failure building this commit
2025-07-30 15:10:25 -05:00
0ad54c25a7 start minimized
All checks were successful
BlockStorage/repertory/pipeline/head This commit looks good
2025-07-30 14:47:16 -05:00
d97949cc3a Create Windows installer #53
All checks were successful
BlockStorage/repertory/pipeline/head This commit looks good
2025-07-30 14:30:20 -05:00
b1a1824050 Create Windows installer #53
All checks were successful
BlockStorage/repertory/pipeline/head This commit looks good
2025-07-30 14:12:04 -05:00
75fe994e95 Create Windows installer #53
All checks were successful
BlockStorage/repertory/pipeline/head This commit looks good
2025-07-30 13:55:19 -05:00
9d020dd241 Create Windows installer #53
All checks were successful
BlockStorage/repertory/pipeline/head This commit looks good
2025-07-30 12:31:47 -05:00
cbb2bfa73d Create Windows installer #53
Some checks reported errors
BlockStorage/repertory/pipeline/head Something is wrong with the build of this commit
2025-07-30 12:15:58 -05:00
0404950693 Create Windows installer #53 2025-07-30 12:12:18 -05:00
9948df0541 Create Windows installer #53
Some checks reported errors
BlockStorage/repertory/pipeline/head Something is wrong with the build of this commit
2025-07-30 12:06:21 -05:00
c53ab513a0 fix
Some checks reported errors
BlockStorage/repertory/pipeline/head Something is wrong with the build of this commit
2025-07-30 11:55:29 -05:00
9e76f88c8f Create Windows installer #53
Some checks are pending
BlockStorage/repertory/pipeline/head Build queued...
2025-07-30 11:44:39 -05:00
8da2a7d27a Merge branch 'v2.1.0-rc-develop' of ssh://git.fifthgrid.com:3022/blockstorage/repertory into v2.1.0-rc-develop
All checks were successful
BlockStorage/repertory/pipeline/head This commit looks good
2025-07-30 11:26:22 -05:00
025a5a0db7 fix mount failure when path contains a space 2025-07-30 11:23:00 -05:00
5fc391e5c0 spelling
All checks were successful
BlockStorage/repertory/pipeline/head This commit looks good
2025-07-30 11:21:56 -05:00
5357486659 fix mount failure when path contains a space 2025-07-30 07:56:11 -05:00
d8774ba7f7 Create Windows installer #53 2025-07-30 07:52:54 -05:00
1e7e304b43 Create Windows installer #53 2025-07-30 07:49:58 -05:00
17b7b09333 Create Windows installer #53 2025-07-30 07:49:34 -05:00
5f4b853764 fix mount failure when path contains a space 2025-07-29 15:16:34 -05:00
6d0f2a6c36 fix
All checks were successful
BlockStorage/repertory/pipeline/head This commit looks good
2025-07-29 14:28:25 -05:00
ccdbf2efde updated CHANGELOG.md
All checks were successful
BlockStorage/repertory/pipeline/head This commit looks good
2025-07-29 14:14:43 -05:00
e02eebba99 (Create Windows installer #53) ([ui] UI console window should close after launch #51) 2025-07-29 14:11:51 -05:00
7d06fb5617 Create Windows installer #53
All checks were successful
BlockStorage/repertory/pipeline/head This commit looks good
2025-07-29 12:48:32 -05:00
66053df28f Create Windows installer #53
All checks were successful
BlockStorage/repertory/pipeline/head This commit looks good
2025-07-29 10:59:18 -05:00
6920db4c88 updated build system
All checks were successful
BlockStorage/repertory/pipeline/head This commit looks good
2025-07-29 09:05:59 -05:00
e37b2492e9 Create Windows installer #53
All checks were successful
BlockStorage/repertory/pipeline/head This commit looks good
2025-07-29 08:07:49 -05:00
2435a765f0 Create Windows installer #53 2025-07-29 08:06:44 -05:00
f88e4181f1 Create Windows installer #53 2025-07-29 08:04:36 -05:00
5d2a1b0c17 Create Windows installer #53 2025-07-29 07:58:26 -05:00
1fff514e4e Create Windows installer #53
Some checks failed
BlockStorage/repertory/pipeline/head There was a failure building this commit
2025-07-28 15:27:53 -05:00
2f14e0f054 Create Windows installer #53 2025-07-28 15:27:43 -05:00
0c049a17f6 Create Windows installer #53
Some checks failed
BlockStorage/repertory/pipeline/head There was a failure building this commit
2025-07-28 13:14:28 -05:00
1390f96fdc Create Windows installer #53 2025-07-28 13:03:27 -05:00
1d7a3f5125 Create Windows installer #53 2025-07-28 12:47:27 -05:00
a9ebc52514 Create Windows installer #53 2025-07-28 11:53:54 -05:00
ca9eaf0249 Create Windows installer #53 2025-07-28 10:40:24 -05:00
7601746093 Create Windows installer #53 2025-07-28 10:37:03 -05:00
42f83170f7 Create Windows installer #53 2025-07-28 10:27:55 -05:00
9722cc06ff Create Windows installer #53 2025-07-28 10:24:54 -05:00
3d063a8ec2 Create Windows installer #53 2025-07-28 09:48:35 -05:00
b6719846bf Remove 'default' as initial bucket name for Sia #54
All checks were successful
BlockStorage/repertory/pipeline/head This commit looks good
2025-07-28 09:06:52 -05:00
9ed4187593 Remove 'default' as initial bucket name for Sia #54
Some checks failed
BlockStorage/repertory/pipeline/head There was a failure building this commit
2025-07-28 08:20:13 -05:00
8c0bbe05ee Remove 'default' as initial bucket name for Sia #54
Some checks failed
BlockStorage/repertory/pipeline/head There was a failure building this commit
2025-07-28 08:01:38 -05:00
c8b6d5053e Remove 'default' as initial bucket name for Sia #54
All checks were successful
BlockStorage/repertory/pipeline/head This commit looks good
2025-07-28 07:25:25 -05:00
4cf339cfc4 fix . and .. incorrectly being reported as files
All checks were successful
BlockStorage/repertory/pipeline/head This commit looks good
2025-07-26 13:37:59 -05:00
6fe23f270a fix . and .. incorrectly being reported as files 2025-07-26 13:17:06 -05:00
c85fe76a48 flutter ugrades
All checks were successful
BlockStorage/repertory/pipeline/head This commit looks good
2025-07-26 12:46:16 -05:00
4508b6d908 fix . and .. incorrectly being reported as files
All checks were successful
BlockStorage/repertory/pipeline/head This commit looks good
2025-07-26 11:04:59 -05:00
c74a70ce13 fix . and .. incorrectly being reported as files 2025-07-26 11:03:24 -05:00
f5e88e44bf cleanup
Some checks are pending
BlockStorage/repertory/pipeline/head Build queued...
2025-07-26 08:59:33 -05:00
f11f92ba55 updated build system
All checks were successful
BlockStorage/repertory/pipeline/head This commit looks good
2025-07-26 08:52:20 -05:00
14d0173bd3 fix link
All checks were successful
BlockStorage/repertory/pipeline/head This commit looks good
2025-07-25 09:26:31 -05:00
5b56c73528 updated version
Some checks reported errors
BlockStorage/repertory/pipeline/head Something is wrong with the build of this commit
2025-07-25 07:59:25 -05:00
279 changed files with 13579 additions and 4375 deletions

View File

@@ -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
View File

@@ -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
View File

@@ -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

View File

@@ -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
View 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
View 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'
}
}
}

View File

@@ -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`

View File

@@ -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
View File

@@ -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
![alt text](assets/login.png)
#### Home screen
![alt text](assets/home.png)
---
## 🛠 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

Binary file not shown.

After

Width:  |  Height:  |  Size: 262 B

BIN
assets/blue/icon_40x40.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 298 B

BIN
assets/blue/icon_48x48.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 315 B

BIN
assets/blue/logo.icns Normal file

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 552 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 820 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 202 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 281 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 820 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 281 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 361 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 25 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 361 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 552 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 25 KiB

BIN
assets/green/icon_24X24.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.3 KiB

BIN
assets/green/icon_40x40.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.3 KiB

BIN
assets/green/icon_48x48.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.9 KiB

BIN
assets/green/logo.icns Normal file

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.4 KiB

BIN
assets/home.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 165 KiB

BIN
assets/icon.icns Normal file

Binary file not shown.

BIN
assets/icon.ico Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 370 KiB

BIN
assets/login.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 221 KiB

BIN
assets/logo_blue.xcf Normal file

Binary file not shown.

BIN
assets/logo_green.xcf Normal file

Binary file not shown.

View 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}

View File

@@ -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})

View File

@@ -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)

View File

@@ -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
)

View File

@@ -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()

View File

@@ -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

View File

@@ -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}
)

View File

@@ -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
View 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()

View File

@@ -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

View File

@@ -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()

View File

@@ -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)

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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)

View File

@@ -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()

View File

@@ -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)

View File

@@ -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})

View File

@@ -11,7 +11,6 @@ RUN apt-get install -y \
gdb \
git \
lib32stdc++6 \
libgconf-2-4 \
libglu1-mesa \
libstdc++6 \
python3 \

View File

@@ -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

View File

@@ -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

View File

@@ -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
View 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
View 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>

View File

@@ -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,

View File

@@ -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,

View File

@@ -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

View File

@@ -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;

View File

@@ -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;

View File

@@ -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;

View File

@@ -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

View File

@@ -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;

View File

@@ -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,

View File

@@ -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,

View File

@@ -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

View File

@@ -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

View File

@@ -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;
}

View File

@@ -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

View File

@@ -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;
};

View File

@@ -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

View File

@@ -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

View File

@@ -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); }

View File

@@ -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();

View File

@@ -67,6 +67,8 @@ protected:
-> api_error override;
public:
void force_download() override {}
[[nodiscard]] auto get_source_path() const -> std::string override {
return "direct";
}

View File

@@ -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;

View File

@@ -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;

View File

@@ -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;

View File

@@ -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;

View File

@@ -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 */)

View File

@@ -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;

Some files were not shown because too many files have changed in this diff Show More