diff options
| author | 2026-03-25 14:31:16 +0000 | |
|---|---|---|
| committer | 2026-03-25 14:31:16 +0000 | |
| commit | 48ff647cf4a8bb8f23fcd6b8616f56a8ef72b980 (patch) | |
| tree | ae199c38042adaa544d5f7d31351661d5831381e /ref/store/files/update_prepare.go | |
| parent | *: objectstore -> object/store (diff) | |
| signature | No signature | |
*: refstore -> ref/store
Diffstat (limited to 'ref/store/files/update_prepare.go')
| -rw-r--r-- | ref/store/files/update_prepare.go | 48 |
1 files changed, 48 insertions, 0 deletions
diff --git a/ref/store/files/update_prepare.go b/ref/store/files/update_prepare.go new file mode 100644 index 00000000..035c0bc2 --- /dev/null +++ b/ref/store/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 +} |
