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

Method FetchResolvedPackage

internal/lock/resolve.go:35–100  ·  view source on GitHub ↗

FetchResolvedPackage fetches a resolution but does not write it to the lock struct. This allows testing new versions of packages without writing to the lock. This is useful to avoid changing nixpkgs commit hashes when version has not changed. This can happen when doing `devbox update` and search has

(pkg string, refresh bool)

Source from the content-addressed store, hash-verified

33// `--refresh`. This should only be set on the `devbox update` path; other
34// callers (Add, install, outdated checks) prefer the cache.
35func (f *File) FetchResolvedPackage(pkg string, refresh bool) (*Package, error) {
36 if pkgtype.IsFlake(pkg) {
37 installable, err := flake.ParseInstallable(pkg)
38 if err != nil {
39 return nil, fmt.Errorf("package %q: %v", pkg, err)
40 }
41 installable.Ref, err = lockFlake(context.TODO(), installable.Ref, refresh)
42 if err != nil {
43 return nil, err
44 }
45 return &Package{
46 Resolved: installable.String(),
47 LastModified: time.Unix(installable.Ref.LastModified, 0).UTC().Format(time.RFC3339),
48 }, nil
49 }
50
51 name, version, _ := searcher.ParseVersionedPackage(pkg)
52 if version == "" {
53 return nil, usererr.New("No version specified for %q.", name)
54 }
55
56 if pkgtype.IsRunX(pkg) {
57 ref, err := ResolveRunXPackage(context.TODO(), pkg)
58 if err != nil {
59 return nil, err
60 }
61 return &Package{
62 Resolved: ref.String(),
63 Version: ref.Version,
64 }, nil
65 }
66 if featureflag.ResolveV2.Enabled() {
67 return resolveV2(context.TODO(), name, version)
68 }
69
70 packageVersion, err := searcher.Client().Resolve(name, version)
71 if err != nil {
72 return nil, errors.Wrapf(nix.ErrPackageNotFound, "%s@%s", name, version)
73 }
74
75 sysInfos, err := buildLockSystemInfos(packageVersion)
76 if err != nil {
77 return nil, err
78 }
79 packageInfo, err := selectForSystem(packageVersion.Systems)
80 if err != nil {
81 return nil, fmt.Errorf("no systems found for package %q", name)
82 }
83
84 if len(packageInfo.AttrPaths) == 0 {
85 return nil, fmt.Errorf("no attr paths found for package %q", name)
86 }
87
88 return &Package{
89 LastModified: time.Unix(int64(packageInfo.LastUpdated), 0).UTC().
90 Format(time.RFC3339),
91 Resolved: fmt.Sprintf(
92 "github:NixOS/nixpkgs/%s#%s",

Callers 3

ResolveMethod · 0.95
OutdatedMethod · 0.80
updateDevboxPackageMethod · 0.80

Calls 15

IsFlakeFunction · 0.92
ParseInstallableFunction · 0.92
ParseVersionedPackageFunction · 0.92
NewFunction · 0.92
IsRunXFunction · 0.92
ClientFunction · 0.92
lockFlakeFunction · 0.85
ResolveRunXPackageFunction · 0.85
resolveV2Function · 0.85
buildLockSystemInfosFunction · 0.85
selectForSystemFunction · 0.85
EnabledMethod · 0.80

Tested by

no test coverage detected