diff options
| author | 2026-03-27 09:08:40 +0000 | |
|---|---|---|
| committer | 2026-03-27 09:08:40 +0000 | |
| commit | d7e90798170265b37ea5f980f94ca310cfda3180 (patch) | |
| tree | 89921ca5cb6dd5aaefa3c0ae72352381261cb1e6 /object/storer/loose/write_writer_finalize.go | |
| parent | CONTRIBUTING: Fix submitting changes deadlines (diff) | |
| signature | No signature | |
object/store: Rename from object/storer
Diffstat (limited to 'object/storer/loose/write_writer_finalize.go')
| -rw-r--r-- | object/storer/loose/write_writer_finalize.go | 90 |
1 files changed, 0 insertions, 90 deletions
diff --git a/object/storer/loose/write_writer_finalize.go b/object/storer/loose/write_writer_finalize.go deleted file mode 100644 index e38f301a..00000000 --- a/object/storer/loose/write_writer_finalize.go +++ /dev/null @@ -1,90 +0,0 @@ -package loose - -import ( - "errors" - "io/fs" - "path/filepath" - - objectid "codeberg.org/lindenii/furgit/object/id" -) - -// Close flushes and closes the underlying zlib stream and temp file. -// -// Repeated calls to Close are undefined behavior. -func (writer *streamWriter) Close() error { - errZlib := writer.zw.Close() - errSync := writer.file.Sync() - errFile := writer.file.Close() - - writer.closed = true - writer.file = nil - - return errors.Join(errZlib, errSync, errFile) -} - -// finalize validates write completeness and atomically publishes the object. -// Publication is no-clobber: it links tmpRelPath to the object path and treats -// existing destination objects as success. -func (writer *streamWriter) finalize() (objectid.ObjectID, error) { - writer.finalized = true - - var zero objectid.ObjectID - - if !writer.closed { - err := writer.Close() - if err != nil { - return zero, err - } - } - - if writer.fullMode && !writer.headerDone { - return zero, errors.New("objectstorer/loose: missing full object header") - } - - if writer.expectedContentLeft != 0 { - return zero, errors.New("objectstorer/loose: object content shorter than declared size") - } - - idBytes := writer.hash.Sum(nil) - - id, err := objectid.FromBytes(writer.store.algo, idBytes) - if err != nil { - return zero, err - } - - relPath, err := writer.store.objectPath(id) - if err != nil { - return zero, err - } - - dir := filepath.Dir(relPath) - - err = writer.store.root.MkdirAll(dir, 0o755) - if err != nil { - return zero, err - } - - cleanup := true - - defer func() { - if cleanup { - _ = writer.store.root.Remove(writer.tmpRelPath) - } - }() - - err = writer.store.root.Link(writer.tmpRelPath, relPath) - if err != nil { - if errors.Is(err, fs.ErrExist) { - cleanup = false - _ = writer.store.root.Remove(writer.tmpRelPath) - - return id, nil - } - - return zero, err - } - - cleanup = false - - return id, nil -} |
