gitbay/Repos/RepoSettings.swift

v1.6.1
gitbay-ios/gitbay/Repos/RepoSettings.swift history · blame · raw

48 lines · 1895 bytes

 1import Foundation
 2
 3/// `repo settings show` — admin-only view of the repo's control knobs.
 4/// Every field is omitted at its zero value, so absent means default.
 5nonisolated struct RepoSettings: Decodable, Sendable, Hashable {
 6    let protectedBranches: [String]?
 7    /// `path.Match` globs; a matching tag is created once and then
 8    /// refuses moves and deletion (v1.16.0).
 9    let protectedTags: [String]?
10    let requireSignedCommits: Bool?
11    let requireChecks: Bool?
12    let requireApprovals: Int?
13    let requireResolved: Bool?
14    let requireCodeowners: Bool?
15    /// Protected branches take changes through merge requests only (v1.16.0).
16    let requireMR: Bool?
17    let gitDaemon: Bool?
18    let archived: Bool?
19    let website: String?
20
21    enum CodingKeys: String, CodingKey {
22        case protectedBranches = "protected_branches"
23        case protectedTags = "protected_tags"
24        case requireMR = "require_mr"
25        case requireSignedCommits = "require_signed_commits"
26        case requireChecks = "require_checks"
27        case requireApprovals = "require_approvals"
28        case requireResolved = "require_resolved"
29        case requireCodeowners = "require_codeowners"
30        case gitDaemon = "git_daemon"
31        case archived, website
32    }
33
34    var branches: [String] { protectedBranches ?? [] }
35    var tags: [String] { protectedTags ?? [] }
36}
37
38/// One row of `repo access list`: an account and its effective role.
39/// Since v1.16.0 the row says where the access comes from — owner,
40/// direct, org admin, org member, or team; only a direct grant can be
41/// revoked here. An older server lists direct grants and says nothing.
42nonisolated struct AccessGrant: Decodable, Sendable, Hashable, Identifiable {
43    let user: String
44    let role: String
45    let source: String?
46    var id: String { user }
47    var isDirect: Bool { source == nil || source == "direct" }
48}