Skip to content

fix(file-provider): detect lock changes during working set enumeration.#10002

Open
camilasan wants to merge 5 commits into
masterfrom
bugfix/locking
Open

fix(file-provider): detect lock changes during working set enumeration.#10002
camilasan wants to merge 5 commits into
masterfrom
bugfix/locking

Conversation

@camilasan
Copy link
Copy Markdown
Member

@camilasan camilasan commented May 7, 2026

Resolves

Lock state changes weren't synced between web and Finder because Nextcloud locking doesn't update etags, and the working set enumeration skipped directories with unchanged etags.

Solution: Only skip unchanged directories with no materialised descendants, so directories containing visible files are always re-enumerated. Also preserve lock​Token and visited​Directory in the target-depth read path.

#10011 makes sure visited directories stay in the materialised set, and #10002 makes sure those directories are actually enumerated when they have visible descendants (rather than being skipped due to unchanged etags). Without #10011, a directory could silently lose its visited​Directory flag on eviction and drop out of the working set entirely. Without #10002, even if it stays in the set, lock changes would still be invisible.

Summary

TODO

  • manually test it

Checklist

AI (if applicable)

  • The content of this PR was partly or fully generated using AI

@camilasan camilasan added this to the 33.0.5 milestone May 7, 2026
@camilasan camilasan added the bug label May 7, 2026
@camilasan
Copy link
Copy Markdown
Member Author

/backport to stable-33.0

@camilasan camilasan marked this pull request as ready for review May 11, 2026 14:05
camilasan added 4 commits May 11, 2026 19:31
Nextcloud file locking does not update etags, so the previous
optimisation that skipped child directories with unchanged etags
silently hid lock state changes on nested files. Only skip directories
that are both unchanged and have no materialised descendants.

Also preserve lockToken and visitedDirectory in the target depth read
path, matching the other two code paths.

Signed-off-by: Camila Ayres <hello@camilasan.com>
…sts.

Signed-off-by: Camila Ayres <hello@camilasan.com>
Aligns SPM resolution with the Xcode project, fixing the
tags.map(\.name) build error in standalone SPM/xcodebuild builds.

Signed-off-by: Camila Ayres <hello@camilasan.com>
…ersion paths

toNKFile() now sets permissions and uses modificationDate for date,
matching toItemMetadata() so isInSameDatabaseStoreableRemoteState
comparisons work correctly in tests.

Signed-off-by: Camila Ayres <hello@camilasan.com>
… collisions

Tests share a static dbManager. Using the same ocIds ('childFolder')
across tests caused order-dependent failures when leftover materialized
items affected the child-directory-skip optimization check.

Signed-off-by: Camila Ayres <hello@camilasan.com>
@github-actions
Copy link
Copy Markdown

Artifact containing the AppImage: nextcloud-appimage-pr-10002.zip

Digest: sha256:f894db1cf1eff6eb0ff3276b34d7644a49815d876306d5df3e4fe8e069ffa168

To test this change/fix you can download the above artifact file, unzip it, and run it.

Please make sure to quit your existing Nextcloud app and backup your data.

@sonarqubecloud
Copy link
Copy Markdown

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant