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)
| 33 | // `--refresh`. This should only be set on the `devbox update` path; other |
| 34 | // callers (Add, install, outdated checks) prefer the cache. |
| 35 | func (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", |
no test coverage detected