in internal/filesystem/filesystem.go [74:121]
func (fs *fsystem) ChangeDocument(dh VersionedDocumentHandler, changes DocumentChanges) error {
if len(changes) == 0 {
return nil
}
isOpen, err := fs.isDocumentOpen(dh)
if err != nil {
return err
}
if !isOpen {
return &DocumentNotOpenErr{dh}
}
f, err := fs.memFs.OpenFile(dh.FullPath(), os.O_RDWR, 0o700)
if err != nil {
return err
}
defer f.Close()
var buf bytes.Buffer
_, err = buf.ReadFrom(f)
if err != nil {
return err
}
for _, ch := range changes {
err := fs.applyDocumentChange(&buf, ch)
if err != nil {
return err
}
}
err = f.Truncate(0)
if err != nil {
return err
}
_, err = f.Seek(0, 0)
if err != nil {
return err
}
_, err = f.Write(buf.Bytes())
if err != nil {
return err
}
return fs.updateDocumentMetadataLines(dh, buf.Bytes())
}