| 68 | } |
| 69 | |
| 70 | func ParseRulesForDisplay(rules []RulesetRule) string { |
| 71 | var display strings.Builder |
| 72 | |
| 73 | // sort keys for consistent responses |
| 74 | sort.SliceStable(rules, func(i, j int) bool { |
| 75 | return rules[i].Type < rules[j].Type |
| 76 | }) |
| 77 | |
| 78 | for _, rule := range rules { |
| 79 | display.WriteString(fmt.Sprintf("- %s", rule.Type)) |
| 80 | |
| 81 | if len(rule.Parameters) > 0 { |
| 82 | display.WriteString(": ") |
| 83 | |
| 84 | // sort these keys too for consistency |
| 85 | params := make([]string, 0, len(rule.Parameters)) |
| 86 | for p := range rule.Parameters { |
| 87 | params = append(params, p) |
| 88 | } |
| 89 | sort.Strings(params) |
| 90 | |
| 91 | for _, n := range params { |
| 92 | display.WriteString(fmt.Sprintf("[%s: %v] ", n, rule.Parameters[n])) |
| 93 | } |
| 94 | } |
| 95 | |
| 96 | // ruleset source info is only returned from the "get rules for a branch" endpoint |
| 97 | if rule.RulesetSource != "" { |
| 98 | display.WriteString( |
| 99 | fmt.Sprintf( |
| 100 | "\n (configured in ruleset %d from %s %s)\n", |
| 101 | rule.RulesetId, |
| 102 | strings.ToLower(rule.RulesetSourceType), |
| 103 | rule.RulesetSource, |
| 104 | ), |
| 105 | ) |
| 106 | } |
| 107 | |
| 108 | display.WriteString("\n") |
| 109 | } |
| 110 | |
| 111 | return display.String() |
| 112 | } |
| 113 | |
| 114 | func NoRulesetsFoundError(orgOption string, repoI ghrepo.Interface, includeParents bool) error { |
| 115 | entityName := EntityName(orgOption, repoI) |