feat(posixfs): #3182 add basepath option in the "posixfs scan" command - #3235
Conversation
…scan" command * add support for specifying a set of resources when running the posixfs scan command scanning, or a singular file to scan, as opposed * refactors the resource walking function implemented in opencloud-eu#3220 in order to reuse it for the posixfs scan command * implements opencloud-eu#3182 * add --halt-on-error flag * collect errors and fail command when more than one error occured
Up to standards ✅🟢 Issues
|
| Metric | Results |
|---|---|
| Complexity | 24 |
| Duplication | 0 |
🟢 Coverage 0.00% diff coverage
Metric Results Coverage variation Report missing for 19e44f91 Diff coverage ✅ 0.00% diff coverage Coverage variation details
Coverable lines Covered lines Coverage Common ancestor commit (19e44f9) Report Missing Report Missing Report Missing Head commit (6663fbe) 84009 19254 22.92% Coverage variation is the difference between the coverage for the head and common ancestor commits of the pull request branch:
<coverage of head commit> - <coverage of common ancestor commit>Diff coverage details
Coverable lines Covered lines Diff coverage Pull request (#3235) 173 0 0.00% Diff coverage is the percentage of lines that are covered by tests out of the coverable lines that the pull request added or modified:
<covered lines added or modified>/<coverable lines added or modified> * 100%1 Codacy didn't receive coverage data for the commit, or there was an error processing the received data. Check your integration for errors and validate that your coverage setup is correct.
NEW Get contextual insights on your PRs based on Codacy's metrics, along with PR and Jira context, without leaving GitHub. Enable AI reviewer
TIP This summary will be updated as you push new changes.
##### [\`7.5.0\`](https://github.com/opencloud-eu/opencloud/blob/HEAD/CHANGELOG.md#750---2026-08-25) ##### ❤️ Thanks to all contributors! ❤️ [@AlexAndBear](https://github.com/AlexAndBear), [@JammingBen](https://github.com/JammingBen), [@Svanvith](https://github.com/Svanvith), [@aduffeck](https://github.com/aduffeck), [@butonic](https://github.com/butonic), [@fschade](https://github.com/fschade), [@junkerderprovinz](https://github.com/junkerderprovinz), [@kulmann](https://github.com/kulmann), [@maki5](https://github.com/maki5), [@pbleser-oc](https://github.com/pbleser-oc), [@rhafer](https://github.com/rhafer), [@saw-jan](https://github.com/saw-jan), [@schweigisito](https://github.com/schweigisito), [@v-scharf](https://github.com/v-scharf) ##### ✅ Tests - test(api): update php test dependencies \[[#3335](opencloud-eu/opencloud#3335)] - fix(acceptance): fix running acceptance tests against host on Linux \[[#3358](opencloud-eu/opencloud#3358)] - fix(graph): adding the same user as multiple members in a group ([#3354](opencloud-eu/opencloud#3354)) \[[#3356](opencloud-eu/opencloud#3356)] - test(api): fix share role update test scenario \[[#3322](opencloud-eu/opencloud#3322)] - test: add api tests for cross-space search index mutation \[[#3320](opencloud-eu/opencloud#3320)] - ci: run search acceptance tests against OpenSearch in nightly \[[#3302](opencloud-eu/opencloud#3302)] - api-test: notification settings and getting email notifications \[[#3281](opencloud-eu/opencloud#3281)] - api-test: add posixfs scan and consistency CLI tests \[[#3263](opencloud-eu/opencloud#3263)] - api-test: replace sleeps with WaitHelper poll for async state \[[#3239](opencloud-eu/opencloud#3239)] ##### 📈 Enhancement - feat(thumbnails): extend list of default resolutions \[[#3386](opencloud-eu/opencloud#3386)] - ability to disable grpc and/or event consumer for event history service \[[#3279](opencloud-eu/opencloud#3279)] - feat(graph): add LibreGraphContentType on drive \[[#3355](opencloud-eu/opencloud#3355)] - feat: update space template image \[[#3324](opencloud-eu/opencloud#3324)] - feat(web): add rclone-crypt to default apps \[[#3313](opencloud-eu/opencloud#3313)] - enhance: send events for adding/removing favourite items \[[#3229](opencloud-eu/opencloud#3229)] - allow tuning the proxies http client \[[#3278](opencloud-eu/opencloud#3278)] - feat(web): add yjsServerUrl config \[[#3259](opencloud-eu/opencloud#3259)] - feat(posixfs): [#3182](opencloud-eu/opencloud#3182) add basepath option in the "posixfs scan" command \[[#3235](opencloud-eu/opencloud#3235)] ##### 🐛 Bug Fixes - fix(search): refresh the opensearch index after a write \[[#3388](opencloud-eu/opencloud#3388)] - fix(thumbnails): respect the requested height in libvips builds \[[#3377](opencloud-eu/opencloud#3377)] - refactor datagateway into proxy middleware \[[#3289](opencloud-eu/opencloud#3289)] - Only log a debug message when an item is still in processing state \[[#3158](opencloud-eu/opencloud#3158)] - fix(postprocessing): retry publishing events instead of killing the server \[[#3347](opencloud-eu/opencloud#3347)] - actually log error on exit \[[#3344](opencloud-eu/opencloud#3344)] - fix(activitylog): log missing parent id cache entry at debug level \[[#3325](opencloud-eu/opencloud#3325)] - fix restore file version for shared resource \[[#3268](opencloud-eu/opencloud#3268)] - Fix missing favorite flag on opensearch hits \[[#3252](opencloud-eu/opencloud#3252)] ##### 📚 Documentation - docs: clarify custom role bootstrap behavior \[[#3366](opencloud-eu/opencloud#3366)] ##### 📦️ Dependencies - \[full-ci] chore: bump web to v7.4.0 \[[#3399](opencloud-eu/opencloud#3399)] - build(deps): bump google.golang.org/grpc from 1.83.0 to 1.83.1 \[[#3396](opencloud-eu/opencloud#3396)] - build(deps): bump github.com/stretchr/testify from 1.12.0 to 1.12.1 \[[#3395](opencloud-eu/opencloud#3395)] - build(deps): bump github.com/go-chi/chi/v5 from 5.3.1 to 5.3.2 \[[#3394](opencloud-eu/opencloud#3394)] - build(deps): bump github.com/grpc-ecosystem/grpc-gateway/v2 from 2.29.0 to 2.30.0 \[[#3380](opencloud-eu/opencloud#3380)] - build(deps): bump golang.org/x/image from 0.44.0 to 0.45.0 \[[#3381](opencloud-eu/opencloud#3381)] - build(deps): bump github.com/beevik/etree from 1.7.0 to 1.7.1 \[[#3382](opencloud-eu/opencloud#3382)] - build(deps): bump github.com/nats-io/nats-server/v2 from 2.14.4 to 2.14.5 \[[#3357](opencloud-eu/opencloud#3357)] - build(deps): bump go.opentelemetry.io/contrib/zpages from 0.69.0 to 0.70.0 \[[#3360](opencloud-eu/opencloud#3360)] - build(deps): bump github.com/sirupsen/logrus from 1.9.4 to 1.10.0 \[[#3359](opencloud-eu/opencloud#3359)] - chore: bump reva to latest main \[[#3329](opencloud-eu/opencloud#3329)] - build(deps): bump github.com/stretchr/testify from 1.11.1 to 1.12.0 \[[#3341](opencloud-eu/opencloud#3341)] - build(deps): bump golang.org/x/net from 0.57.0 to 0.58.0 \[[#3342](opencloud-eu/opencloud#3342)] - build(deps): bump github.com/onsi/ginkgo/v2 from 2.32.0 to 2.32.1 \[[#3340](opencloud-eu/opencloud#3340)] - build(deps): bump github.com/testcontainers/testcontainers-go/modules/opensearch from 0.43.0 to 0.44.0 \[[#3303](opencloud-eu/opencloud#3303)] - build(deps): bump github.com/opencloud-eu/libre-graph-api-go \[[#3326](opencloud-eu/opencloud#3326)] - build(deps): bump go.opentelemetry.io/otel/exporters/stdout/stdouttrace from 1.44.0 to 1.45.0 \[[#3306](opencloud-eu/opencloud#3306)] - build(deps): bump go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp from 0.69.0 to 0.70.0 \[[#3305](opencloud-eu/opencloud#3305)] - build(deps): bump go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc from 1.44.0 to 1.45.0 \[[#3280](opencloud-eu/opencloud#3280)] - build(deps): bump github.com/rogpeppe/go-internal from 1.15.0 to 1.16.0 \[[#3250](opencloud-eu/opencloud#3250)] - build(deps): bump github.com/kovidgoyal/imaging from 1.8.22 to 1.8.23 \[[#3135](opencloud-eu/opencloud#3135)] - build(deps): bump go.opentelemetry.io/otel/trace from 1.44.0 to 1.45.0 \[[#3266](opencloud-eu/opencloud#3266)]
#1842) ##### [\`7.5.0\`](https://github.com/opencloud-eu/opencloud/blob/HEAD/CHANGELOG.md#750---2026-08-25) ##### ❤️ Thanks to all contributors! ❤️ [@AlexAndBear](https://github.com/AlexAndBear), [@JammingBen](https://github.com/JammingBen), [@Svanvith](https://github.com/Svanvith), [@aduffeck](https://github.com/aduffeck), [@butonic](https://github.com/butonic), [@fschade](https://github.com/fschade), [@junkerderprovinz](https://github.com/junkerderprovinz), [@kulmann](https://github.com/kulmann), [@maki5](https://github.com/maki5), [@pbleser-oc](https://github.com/pbleser-oc), [@rhafer](https://github.com/rhafer), [@saw-jan](https://github.com/saw-jan), [@schweigisito](https://github.com/schweigisito), [@v-scharf](https://github.com/v-scharf) ##### ✅ Tests - test(api): update php test dependencies \[[#3335](opencloud-eu/opencloud#3335)] - fix(acceptance): fix running acceptance tests against host on Linux \[[#3358](opencloud-eu/opencloud#3358)] - fix(graph): adding the same user as multiple members in a group ([#3354](opencloud-eu/opencloud#3354)) \[[#3356](opencloud-eu/opencloud#3356)] - test(api): fix share role update test scenario \[[#3322](opencloud-eu/opencloud#3322)] - test: add api tests for cross-space search index mutation \[[#3320](opencloud-eu/opencloud#3320)] - ci: run search acceptance tests against OpenSearch in nightly \[[#3302](opencloud-eu/opencloud#3302)] - api-test: notification settings and getting email notifications \[[#3281](opencloud-eu/opencloud#3281)] - api-test: add posixfs scan and consistency CLI tests \[[#3263](opencloud-eu/opencloud#3263)] - api-test: replace sleeps with WaitHelper poll for async state \[[#3239](opencloud-eu/opencloud#3239)] ##### 📈 Enhancement - feat(thumbnails): extend list of default resolutions \[[#3386](opencloud-eu/opencloud#3386)] - ability to disable grpc and/or event consumer for event history service \[[#3279](opencloud-eu/opencloud#3279)] - feat(graph): add LibreGraphContentType on drive \[[#3355](opencloud-eu/opencloud#3355)] - feat: update space template image \[[#3324](opencloud-eu/opencloud#3324)] - feat(web): add rclone-crypt to default apps \[[#3313](opencloud-eu/opencloud#3313)] - enhance: send events for adding/removing favourite items \[[#3229](opencloud-eu/opencloud#3229)] - allow tuning the proxies http client \[[#3278](opencloud-eu/opencloud#3278)] - feat(web): add yjsServerUrl config \[[#3259](opencloud-eu/opencloud#3259)] - feat(posixfs): [#3182](opencloud-eu/opencloud#3182) add basepath option in the "posixfs scan" command \[[#3235](opencloud-eu/opencloud#3235)] ##### 🐛 Bug Fixes - fix(search): refresh the opensearch index after a write \[[#3388](opencloud-eu/opencloud#3388)] - fix(thumbnails): respect the requested height in libvips builds \[[#3377](opencloud-eu/opencloud#3377)] - refactor datagateway into proxy middleware \[[#3289](opencloud-eu/opencloud#3289)] - Only log a debug message when an item is still in processing state \[[#3158](opencloud-eu/opencloud#3158)] - fix(postprocessing): retry publishing events instead of killing the server \[[#3347](opencloud-eu/opencloud#3347)] - actually log error on exit \[[#3344](opencloud-eu/opencloud#3344)] - fix(activitylog): log missing parent id cache entry at debug level \[[#3325](opencloud-eu/opencloud#3325)] - fix restore file version for shared resource \[[#3268](opencloud-eu/opencloud#3268)] - Fix missing favorite flag on opensearch hits \[[#3252](opencloud-eu/opencloud#3252)] ##### 📚 Documentation - docs: clarify custom role bootstrap behavior \[[#3366](opencloud-eu/opencloud#3366)] ##### 📦️ Dependencies - \[full-ci] chore: bump web to v7.4.0 \[[#3399](opencloud-eu/opencloud#3399)] - build(deps): bump google.golang.org/grpc from 1.83.0 to 1.83.1 \[[#3396](opencloud-eu/opencloud#3396)] - build(deps): bump github.com/stretchr/testify from 1.12.0 to 1.12.1 \[[#3395](opencloud-eu/opencloud#3395)] - build(deps): bump github.com/go-chi/chi/v5 from 5.3.1 to 5.3.2 \[[#3394](opencloud-eu/opencloud#3394)] - build(deps): bump github.com/grpc-ecosystem/grpc-gateway/v2 from 2.29.0 to 2.30.0 \[[#3380](opencloud-eu/opencloud#3380)] - build(deps): bump golang.org/x/image from 0.44.0 to 0.45.0 \[[#3381](opencloud-eu/opencloud#3381)] - build(deps): bump github.com/beevik/etree from 1.7.0 to 1.7.1 \[[#3382](opencloud-eu/opencloud#3382)] - build(deps): bump github.com/nats-io/nats-server/v2 from 2.14.4 to 2.14.5 \[[#3357](opencloud-eu/opencloud#3357)] - build(deps): bump go.opentelemetry.io/contrib/zpages from 0.69.0 to 0.70.0 \[[#3360](opencloud-eu/opencloud#3360)] - build(deps): bump github.com/sirupsen/logrus from 1.9.4 to 1.10.0 \[[#3359](opencloud-eu/opencloud#3359)] - chore: bump reva to latest main \[[#3329](opencloud-eu/opencloud#3329)] - build(deps): bump github.com/stretchr/testify from 1.11.1 to 1.12.0 \[[#3341](opencloud-eu/opencloud#3341)] - build(deps): bump golang.org/x/net from 0.57.0 to 0.58.0 \[[#3342](opencloud-eu/opencloud#3342)] - build(deps): bump github.com/onsi/ginkgo/v2 from 2.32.0 to 2.32.1 \[[#3340](opencloud-eu/opencloud#3340)] - build(deps): bump github.com/testcontainers/testcontainers-go/modules/opensearch from 0.43.0 to 0.44.0 \[[#3303](opencloud-eu/opencloud#3303)] - build(deps): bump github.com/opencloud-eu/libre-graph-api-go \[[#3326](opencloud-eu/opencloud#3326)] - build(deps): bump go.opentelemetry.io/otel/exporters/stdout/stdouttrace from 1.44.0 to 1.45.0 \[[#3306](opencloud-eu/opencloud#3306)] - build(deps): bump go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp from 0.69.0 to 0.70.0 \[[#3305](opencloud-eu/opencloud#3305)] - build(deps): bump go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc from 1.44.0 to 1.45.0 \[[#3280](opencloud-eu/opencloud#3280)] - build(deps): bump github.com/rogpeppe/go-internal from 1.15.0 to 1.16.0 \[[#3250](opencloud-eu/opencloud#3250)] - build(deps): bump github.com/kovidgoyal/imaging from 1.8.22 to 1.8.23 \[[#3135](opencloud-eu/opencloud#3135)] - build(deps): bump go.opentelemetry.io/otel/trace from 1.44.0 to 1.45.0 \[[#3266](opencloud-eu/opencloud#3266)] Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Description
Related Issue
Motivation and Context
Addresses use-cases where files are copied into the PosixFS storage directory tree while the server is not running or with collaborative mode disabled, e.g. during large migrations or in disaster recovery scenarios.
With these changes, it is possible to perform the storage scanning in a much more granular way, which may help in cases where the storage tree is especially large and scanning everything would be too slow.
How Has This Been Tested?
Has been tested locally/manually by
STORAGE_USERS_POSIX_WATCH_FS=false)cp ... ~/.opencloud/storage/users/projects/9c4feaa1-0a8f-4f9d-bcf7-2d79b714d9d5/getfattr -dposixfs scancommand with different use-cases:user.oc.id,user.oc.parentid, etc...), again usinggetfattr -dUnfortunately, it is not possible to add unit tests as it would require a lot of changes to abstract away the filesystem operations, or a significant amount of test harness setup to be able to run the command with a NATS Jetstream and everything else that is needed for it.
Types of changes
Checklist: