shithub: furgit

ref: fb9eb058f1c9b7cb26f33bbe679a85f530566641
dir: /ref/store/files/update_prepare_lock.go/

View raw version
package files

import "slices"

func (executor *refUpdateExecutor) prepareUpdateLocks(prepared []preparedUpdate) error {
	lockNames := make([]string, 0, len(prepared))
	for _, item := range prepared {
		lockNames = append(lockNames, updateTargetKey(item.target.loc))
	}

	slices.Sort(lockNames)

	for _, lockKey := range lockNames {
		lockPath := refPathFromKey(lockKey)

		err := executor.createUpdateLock(lockPath)
		if err != nil {
			for _, item := range prepared {
				if updateTargetKey(item.target.loc) == lockKey {
					return wrapUpdateError(item.op.name, err)
				}
			}

			return err
		}
	}

	return nil
}