diff options
| author | 2026-03-23 03:25:44 +0000 | |
|---|---|---|
| committer | 2026-03-23 03:27:52 +0000 | |
| commit | 4a796e64ac576d6a3e3f2fe6174c4aa476ea0c5c (patch) | |
| tree | 44d72a20076ceab0981d0b553693d26ca36cc0be /refstore/files/update_prepare.go | |
| parent | receivepack: Lifecycle/ownership docs (diff) | |
| signature | No signature | |
refstore: Improve interfaces, errors, and make batch work v0.1.92
Diffstat (limited to 'refstore/files/update_prepare.go')
| -rw-r--r-- | refstore/files/update_prepare.go | 48 |
1 files changed, 48 insertions, 0 deletions
diff --git a/refstore/files/update_prepare.go b/refstore/files/update_prepare.go new file mode 100644 index 00000000..035c0bc2 --- /dev/null +++ b/refstore/files/update_prepare.go @@ -0,0 +1,48 @@ +package files + +func (executor *refUpdateExecutor) prepareUpdates(ops []queuedUpdate) (prepared []preparedUpdate, err error) { + defer func() { + if err != nil { + _ = executor.cleanupPreparedUpdates(prepared) + } + }() + + prepared, err = executor.resolvePreparedUpdates(ops) + if err != nil { + return prepared, err + } + + deleted, written := collectPreparedWrites(prepared) + + existing, err := executor.collectVisibleNames() + if err != nil { + return prepared, err + } + + for _, name := range written { + err = verifyRefnameAvailable(name, existing, written, deleted) + if err != nil { + return prepared, err + } + } + + err = executor.prepareUpdateLocks(prepared) + if err != nil { + return prepared, err + } + + hasDeletes := len(deleted) > 0 + if hasDeletes { + err = executor.createPackedRefsLock(executor.store.packedRefsTimeout) + if err != nil { + return prepared, err + } + } + + err = executor.verifyPreparedUpdates(prepared) + if err != nil { + return prepared, err + } + + return prepared, nil +} |
