Add relay-only replicate engine mode · Entire

Add relay-only replicate engine mode

f377186→main· Soph·3mo ago·7 files·+692 added/-20 removed

Sessions

be84133ec5bbView transcript

Changes

7

160 unmodified lines

// BuildReplicationPlans generates overwrite-oriented plans for replication mode.
// Divergent refs are updated directly rather than blocked.
func BuildReplicationPlans(
    desired map[plumbing.ReferenceName]DesiredRef,
    targetRefs map[plumbing.ReferenceName]plumbing.Hash,
    managed map[plumbing.ReferenceName]ManagedTarget,
    cfg PlanConfig,
) ([]BranchPlan, error) {
    managed = copyManagedTargets(managed)
    if cfg.Prune {
        for targetRef := range targetRefs {
            if _, ok := managed[targetRef]; ok {
                continue
            }
            switch {
            case targetRef.IsTag() && cfg.IncludeTags:
                managed[targetRef] = ManagedTarget{Kind: RefKindTag, Label: targetRef.Short()}
            case targetRef.IsBranch() && len(cfg.Mappings) == 0 && len(cfg.Branches) == 0:
                managed[targetRef] = ManagedTarget{Kind: RefKindBranch, Label: targetRef.Short()}
            }
        }
    }

targetNames := make([]plumbing.ReferenceName, 0, len(managed))
    for name := range managed {
        targetNames = append(targetNames, name)
    }
    sort.Slice(targetNames, func(i, j int) bool { return targetNames[i] < targetNames[j] })

plans := make([]BranchPlan, 0, len(targetNames))
    for _, targetRef := range targetNames {
        info := managed[targetRef]
        want, existsInDesired := desired[targetRef]
        targetHash, existsOnTarget := targetRefs[targetRef]

if !existsInDesired {
            if cfg.Prune && existsOnTarget {
                plans = append(plans, BranchPlan{
                    Branch:     info.Label,
                    TargetRef:  targetRef,
                    TargetHash: targetHash,
                    Kind:       info.Kind,
                    Action:     ActionDelete,
                    Reason:     fmt.Sprintf("%s -> <deleted>", ShortHash(targetHash)),
                })
            }
            continue
        }

plans = append(plans, PlanReplicationRef(want, targetHash, existsOnTarget))
    }

sort.Slice(plans, func(i, j int) bool {
        return plans[i].TargetRef.String() < plans[j].TargetRef.String()
    })
    return plans, nil
}