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_resolve.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_resolve.go')
| -rw-r--r-- | refstore/files/update_prepare_resolve.go | 42 |
1 files changed, 42 insertions, 0 deletions
diff --git a/refstore/files/update_prepare_resolve.go b/refstore/files/update_prepare_resolve.go new file mode 100644 index 00000000..492f5157 --- /dev/null +++ b/refstore/files/update_prepare_resolve.go @@ -0,0 +1,42 @@ +package files + +import "codeberg.org/lindenii/furgit/refstore" + +func (executor *refUpdateExecutor) resolvePreparedUpdates(ops []queuedUpdate) ([]preparedUpdate, error) { + prepared := make([]preparedUpdate, 0, len(ops)) + targets := make(map[string]struct{}, len(ops)) + + for _, op := range ops { + target, err := executor.resolveQueuedUpdateTarget(op) + if err != nil { + return prepared, err + } + + targetKey := updateTargetKey(target.loc) + if _, exists := targets[targetKey]; exists { + return prepared, wrapUpdateError(op.name, &refstore.DuplicateUpdateError{}) + } + + targets[targetKey] = struct{}{} + prepared = append(prepared, preparedUpdate{op: op, target: target}) + } + + return prepared, nil +} + +func collectPreparedWrites(prepared []preparedUpdate) (deleted map[string]struct{}, written []string) { + deleted = make(map[string]struct{}) + written = make([]string, 0, len(prepared)) + + for _, item := range prepared { + switch item.op.kind { + case updateDelete, updateDeleteSymbolic: + deleted[item.target.name] = struct{}{} + case updateCreate, updateReplace, updateCreateSymbolic, updateReplaceSymbolic: + written = append(written, item.target.name) + case updateVerify, updateVerifySymbolic: + } + } + + return deleted, written +} |
