func()

in app/registry/view.go [148:190]


func (a *App) makeViewRegistryExternalRegistration(mrs []gerrit.GerritMergeRequest) func(userCtx context.Context,
	reg *codebase.Codebase, values *Values, viewParams gin.H) error {
	return func(userCtx context.Context, reg *codebase.Codebase, values *Values, viewParams gin.H) error {
		eRegs, mergeRequestsForER := make([]ExternalRegistration, 0), make(map[string]struct{})

		for _, mr := range mrs {
			if mr.Labels[MRLabelTarget] == "external-reg" && mr.Status.Value == gerrit.StatusNew {
				eRegs = append(eRegs, ExternalRegistration{Name: mr.Annotations[mrAnnotationRegName], Enabled: true,
					External: mr.Annotations[mrAnnotationRegType] == externalSystemTypeExternal, StatusRegistration: erStatusInactive})
				mergeRequestsForER[mr.Annotations[mrAnnotationRegName]] = struct{}{}
			} else if mr.Labels[MRLabelTarget] == "external-reg" && mr.Status.Value != gerrit.StatusMerged && mr.Status.Value != gerrit.StatusAbandoned {
				eRegs = append(eRegs, ExternalRegistration{Name: mr.Annotations[mrAnnotationRegName], Enabled: true,
					External: mr.Annotations[mrAnnotationRegType] == externalSystemTypeExternal, StatusRegistration: erStatusFailed})
				mergeRequestsForER[mr.Annotations[mrAnnotationRegName]] = struct{}{}
			}
		}

		//TODO: refactor to values struct
		_eRegs, err := decodeExternalRegsFromValues(values.OriginalYaml)
		if err != nil {
			return errors.Wrap(err, "unable to decode external regs")
		}

		for _, _er := range _eRegs {
			if _, ok := mergeRequestsForER[_er.Name]; !ok {
				eRegs = append(eRegs, _er)
			}
		}

		if err := a.loadKeysForExternalRegs(userCtx, reg.Name, eRegs); err != nil {
			return errors.Wrap(err, "unable load keys for ext regs")
		}

		viewParams["externalRegs"] = eRegs
		viewParams["values"] = values

		if err := a.loadCodebasesForExternalRegistrations(reg.Name, eRegs, viewParams); err != nil {
			return errors.Wrap(err, "unable to load codebases for external reg")
		}

		return nil
	}
}