fix(dav): re-upload converted ext instead of UpdateFile (#84) #85

Merged
eSlider merged 1 commits from fix/dav-updatefile-convert#84 into main 2026-09-27 15:12:36 +01:00
Owner

Причина

UploadToFolderReplacing матчил legacy↔OOXML (.xls ↔ .xlsx) и вызывал UpdateFile.
OnlyOffice не перезапускает конвертацию при update → сырой OLE2 .xls ложился под именем .xlsx (регрессия #82).

Правило

  • UpdateFile только при совпадении расширений (stored ext == local ext).
  • Конвертируемое совпадение (.xls/.doc/.ppt ↔ OOXML) → удалить все дубли по stem и залить заново (сервер сконвертирует).
  • AssertNoFileConflict (--no-replace) остаётся conversion-aware, UpdateFile не использует.

Тесты

go test -race ./..., go vet ./... — зелёные. Offline-тесты planUploadReplacement: exact-ext (pdf/xlsx/xls) → UpdateFile; converted .xls при .xlsx → delete + upload; коллапс дублей.

Live (реальный OO, временная папка, удалена)

1-й upload .xls → .xlsx (8192 B, PK); повтор .xls → replaced=3889, один файл, download Microsoft Excel 2007+; pdf→pdf повтор → тот же id 3890, replaced пусто (UpdateFile).

Refs #84

## Причина `UploadToFolderReplacing` матчил legacy↔OOXML (`.xls` ↔ `.xlsx`) и вызывал `UpdateFile`. OnlyOffice не перезапускает конвертацию при update → сырой OLE2 `.xls` ложился под именем `.xlsx` (регрессия #82). ## Правило - `UpdateFile` только при совпадении расширений (stored ext == local ext). - Конвертируемое совпадение (`.xls/.doc/.ppt` ↔ OOXML) → удалить все дубли по stem и залить заново (сервер сконвертирует). - `AssertNoFileConflict` (`--no-replace`) остаётся conversion-aware, UpdateFile не использует. ## Тесты `go test -race ./...`, `go vet ./...` — зелёные. Offline-тесты `planUploadReplacement`: exact-ext (pdf/xlsx/xls) → UpdateFile; converted `.xls` при `.xlsx` → delete + upload; коллапс дублей. ## Live (реальный OO, временная папка, удалена) 1-й upload `.xls` → `.xlsx` (8192 B, `PK`); повтор `.xls` → `replaced=3889`, один файл, download `Microsoft Excel 2007+`; `pdf→pdf` повтор → тот же id 3890, `replaced` пусто (UpdateFile). Refs #84
eSlider added 1 commit 2026-09-27 15:12:20 +01:00
fix(dav): re-upload converted ext instead of UpdateFile (#84)
Release / GoReleaser (push) Skipped
Tests / Secret scan (gitleaks) (push) Skipped
Tests / Test (Go 1.25) (push) Skipped
Tests / Test (Go stable) (push) Skipped
Tests / Secret scan (gitleaks) (pull_request) Successful in 4s
Tests / Test (Go stable) (pull_request) Successful in 1m30s
Tests / Test (Go 1.25) (pull_request) Successful in 1m31s
aad6315731
UploadToFolderReplacing matched legacy->OOXML counterparts (f.xls vs the
saved f.xlsx) and updated them in place. UpdateFile replaces the body without
re-running OnlyOffice's server-side conversion, so the raw OLE2 .xls landed
under the stored .xlsx name and the file would not open (#84).

UpdateFile now runs only when the stored and local extensions are equal.
A conversion-equivalent match is deleted (all duplicates collapsed) and
uploaded afresh, so the server converts again. AssertNoFileConflict stays
conversion-aware for --no-replace and never had an UpdateFile path.
eSlider merged commit 13a4b9f846 into main 2026-09-27 15:12:36 +01:00
eSlider deleted branch fix/dav-updatefile-convert#84 2026-09-27 15:12:36 +01:00
Sign in to join this conversation.
No Reviewers
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: eSlider/go-onlyoffice#85