Class: Ace::Git::ServerRegistry
- Inherits:
-
Object
- Object
- Ace::Git::ServerRegistry
- Defined in:
- lib/ace/git/server_registry.rb
Overview
Resolves forge server identity from configuration, deterministically.
Configuration lives under the git.servers key (see
.ace-defaults/git/config.yml). Each entry is a uniquely named server:
servers:
- name: forge-lab
provider: acme
url: https://forge.example.com/owner/repo
default: true
- name: forge-mirror
provider: other
url: https://other.example.com/owner/repo
At most one server may be marked default: true. Resolution never falls
back silently: every failure raises a classified error from the failure
taxonomy.
Defined Under Namespace
Classes: Entry
Class Method Summary collapse
-
.resolve(name) ⇒ ResolvedServer
Resolve a server by its explicit, configured name.
-
.resolve_default ⇒ ResolvedServer
Resolve the explicitly configured default server.
-
.resolve_remote(remote_name = nil) ⇒ ResolvedServer
Resolve server identity from a git remote URL, matching configured servers deterministically (no hostname assumptions).
-
.servers ⇒ Array<ResolvedServer>
All configured servers, in configuration order.
Class Method Details
.resolve(name) ⇒ ResolvedServer
Resolve a server by its explicit, configured name.
48 49 50 51 52 53 |
# File 'lib/ace/git/server_registry.rb', line 48 def resolve(name) wanted = name.to_s entries.map(&:server).find { |server| server.name == wanted } || raise(UnknownServerNameError, "No server named '#{wanted}' is configured " \ "(configured: #{servers.map(&:name).join(", ")}); add it to git.servers") end |
.resolve_default ⇒ ResolvedServer
Resolve the explicitly configured default server.
60 61 62 63 64 65 66 67 68 69 70 71 72 73 |
# File 'lib/ace/git/server_registry.rb', line 60 def resolve_default defaults = entries.select(&:default) if defaults.empty? raise NoDefaultServerConfiguredError, "No default server configured; mark exactly one entry in git.servers with default: true" end if defaults.size > 1 raise MultipleDefaultServersError, "Multiple servers marked as default: #{defaults.map { |e| e.server.name }.join(", ")}; " \ "keep exactly one" end defaults.first.server end |
.resolve_remote(remote_name = nil) ⇒ ResolvedServer
Resolve server identity from a git remote URL, matching configured servers deterministically (no hostname assumptions).
83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 |
# File 'lib/ace/git/server_registry.rb', line 83 def resolve_remote(remote_name = nil) remote_name ||= Ace::Git.config["remote"] || "origin" remote_url = read_remote_url(remote_name) matches = entries.map(&:server).select { |server| Atoms::ServerUrl.match?(server.url, remote_url) } if matches.empty? raise AmbiguousRemoteError, "Remote '#{remote_name}' (#{remote_url || "missing"}) matches no configured server " \ "(configured: #{servers.map(&:name).join(", ")})" end if matches.size > 1 raise AmbiguousRemoteError, "Remote '#{remote_name}' (#{remote_url}) matches multiple configured servers: " \ "#{matches.map(&:name).join(", ")}; make server URLs distinct" end matches.first end |
.servers ⇒ Array<ResolvedServer>
All configured servers, in configuration order.
39 40 41 |
# File 'lib/ace/git/server_registry.rb', line 39 def servers entries.map(&:server) end |