MCPcopy Index your code
hub / github.com/jetify-com/devbox / parseGitHubRef

Function parseGitHubRef

nix/flake/flakeref.go:256–301  ·  view source on GitHub ↗
(refURL *url.URL, parsed *Ref)

Source from the content-addressed store, hash-verified

254}
255
256func parseGitHubRef(refURL *url.URL, parsed *Ref) error {
257 // github:<owner>/<repo>(/<rev-or-ref>)?(\?<params>)?
258
259 parsed.Type = TypeGitHub
260
261 // Only split up to 3 times (owner, repo, ref/rev) so that we handle
262 // refs that have slashes in them. For example,
263 // "github:jetify-com/devbox/gcurtis/flakeref" parses as "gcurtis/flakeref".
264 split, err := splitPathOrOpaque(refURL, 3)
265 if err != nil {
266 return err
267 }
268 parsed.Owner = split[0]
269 parsed.Repo = split[1]
270 if len(split) > 2 {
271 if revOrRef := split[2]; isGitHash(revOrRef) {
272 parsed.Rev = revOrRef
273 } else {
274 parsed.Ref = revOrRef
275 }
276 }
277
278 parsed.Host = refURL.Query().Get("host")
279 parsed.Dir = refURL.Query().Get("dir")
280 if qRef := refURL.Query().Get("ref"); qRef != "" {
281 if parsed.Rev != "" {
282 return redact.Errorf("github flake reference has a ref and a rev")
283 }
284 if parsed.Ref != "" && qRef != parsed.Ref {
285 return redact.Errorf("github flake reference has a ref in the path (%q) and a ref query parameter (%q)", parsed.Ref, qRef)
286 }
287 parsed.Ref = qRef
288 }
289 if qRev := refURL.Query().Get("rev"); qRev != "" {
290 if parsed.Ref != "" {
291 return redact.Errorf("github flake reference has a ref and a rev")
292 }
293 if parsed.Rev != "" && qRev != parsed.Rev {
294 return redact.Errorf("github flake reference has a rev in the path (%q) and a rev query parameter (%q)", parsed.Rev, qRev)
295 }
296 parsed.Rev = qRev
297 }
298 parsed.Dir = refURL.Query().Get("dir")
299 parsed.NARHash = refURL.Query().Get("narHash")
300 return nil
301}
302
303// Locked reports whether r is locked. Locked flake references always resolve to
304// the same content. For some flake types, determining if a Ref is locked

Callers 1

parseURLRefFunction · 0.85

Calls 4

ErrorfFunction · 0.92
splitPathOrOpaqueFunction · 0.85
isGitHashFunction · 0.85
GetMethod · 0.65

Tested by

no test coverage detected