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/transaction_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/transaction_prepare.go')
| -rw-r--r-- | refstore/files/transaction_prepare.go | 102 |
1 files changed, 0 insertions, 102 deletions
diff --git a/refstore/files/transaction_prepare.go b/refstore/files/transaction_prepare.go deleted file mode 100644 index 38eea9d8..00000000 --- a/refstore/files/transaction_prepare.go +++ /dev/null @@ -1,102 +0,0 @@ -package files - -import ( - "fmt" - "slices" -) - -func (tx *Transaction) prepare() (prepared []preparedTxOp, err error) { - prepared = make([]preparedTxOp, 0, len(tx.ops)) - - defer func() { - if err != nil { - _ = tx.cleanup(prepared) - } - }() - - targets := make(map[string]struct{}, len(tx.ops)) - - for _, op := range tx.ops { - target, err := tx.resolveTarget(op) - if err != nil { - return prepared, err - } - - targetKey := tx.targetKey(target.loc) - if _, exists := targets[targetKey]; exists { - return prepared, fmt.Errorf("refstore/files: duplicate transaction operation for %q", target.name) - } - - targets[targetKey] = struct{}{} - - prepared = append(prepared, preparedTxOp{ - op: op, - target: target, - }) - } - - deleted := make(map[string]struct{}) - written := make([]string, 0, len(prepared)) - - for _, item := range prepared { - switch item.op.kind { - case txDelete, txDeleteSymbolic: - deleted[item.target.name] = struct{}{} - case txCreate, txUpdate, txCreateSymbolic, txUpdateSymbolic: - written = append(written, item.target.name) - case txVerify, txVerifySymbolic: - } - } - - existing, err := tx.visibleNames() - if err != nil { - return prepared, err - } - - for _, name := range written { - err = verifyRefnameAvailable(name, existing, written, deleted) - if err != nil { - return prepared, err - } - } - - lockNames := make([]string, 0, len(prepared)) - for _, item := range prepared { - lockNames = append(lockNames, tx.targetKey(item.target.loc)) - } - - slices.Sort(lockNames) - - for _, lockKey := range lockNames { - err = tx.createLock(refPathFromKey(lockKey)) - if err != nil { - return prepared, err - } - } - - hasDeletes := len(deleted) > 0 - if hasDeletes { - err = tx.createPackedLock(tx.store.packedRefsTimeout) - if err != nil { - return prepared, err - } - } - - for i := range prepared { - item := &prepared[i] - - refState, err := tx.directRead(item.target.name) - if err != nil { - return prepared, err - } - - item.target.ref = refState - - err = tx.verifyCurrent(*item) - if err != nil { - return prepared, err - } - } - - return prepared, nil -} |
