Skip to content

Commit dd9d373

Browse files
authored
[sandboxes] devbox ls: print versions (#2277)
## Summary For packages without an explicit version, this PR will print the version for the user in `devbox ls`. Fixes #2274 ## How was it tested? ``` % devbox ls * go@latest - 1.23.0 * runx:golangci/golangci-lint@latest - 1.60.2 * runx:mvdan/gofumpt@latest - 0.7.0 * [email protected] ``` Notice that versions are printed for go@latest and the runx packages, but not for cowsay since it was added via `devbox add [email protected]` Also, `devbox ls -c examples/flakes/php` and `devbox ls -c examples/flakes/remote` ``` % devbox ls -c examples/flakes/remote * github:nixos/nixpkgs/5233fd2ba76a3accb5aaa999c00509a11fd0793c#hello * github:nixos/nixpkgs/5233fd2ba76a3accb5aaa999c00509a11fd0793c#cowsay * github:F1bonacc1/process-compose/v0.43.1 ```
1 parent 6a89adb commit dd9d373

File tree

3 files changed

+40
-4
lines changed

3 files changed

+40
-4
lines changed

internal/boxcli/list.go

Lines changed: 21 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ package boxcli
55

66
import (
77
"fmt"
8+
"strings"
89

910
"github.com/pkg/errors"
1011
"github.com/spf13/cobra"
@@ -32,8 +33,26 @@ func listCmd() *cobra.Command {
3233
if err != nil {
3334
return errors.WithStack(err)
3435
}
35-
for _, p := range box.AllPackageNamesIncludingRemovedTriggerPackages() {
36-
fmt.Fprintf(cmd.OutOrStdout(), "* %s\n", p)
36+
37+
for _, pkg := range box.AllPackagesIncludingRemovedTriggerPackages() {
38+
resolvedVersion, err := pkg.ResolvedVersion()
39+
if err != nil {
40+
// Continue to print the package even if we can't resolve the version
41+
// so that the user can see the error for this package, as well as get the
42+
// results for the other packages
43+
resolvedVersion = "<error resolving version>"
44+
}
45+
msg := ""
46+
47+
// Print the resolved version, unless the user has specified a version already
48+
if strings.HasSuffix(pkg.Versioned(), "latest") && resolvedVersion != "" {
49+
// Runx packages have a "v" prefix (why?). Trim for consistency.
50+
resolvedVersion = strings.TrimPrefix(resolvedVersion, "v")
51+
msg = fmt.Sprintf("* %s - %s\n", pkg.Versioned(), resolvedVersion)
52+
} else {
53+
msg = fmt.Sprintf("* %s\n", pkg.Versioned())
54+
}
55+
fmt.Fprint(cmd.OutOrStdout(), msg)
3756
}
3857
return nil
3958
},

internal/devbox/devbox.go

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -842,12 +842,17 @@ func (d *Devbox) flakeDir() string {
842842
// flakes (lockfile vs devbox list)
843843
func (d *Devbox) AllPackageNamesIncludingRemovedTriggerPackages() []string {
844844
result := []string{}
845-
for _, p := range d.cfg.Packages(true /*includeRemovedTriggerPackages*/) {
846-
result = append(result, p.VersionedName())
845+
for _, p := range d.AllPackagesIncludingRemovedTriggerPackages() {
846+
result = append(result, p.Versioned())
847847
}
848848
return result
849849
}
850850

851+
func (d *Devbox) AllPackagesIncludingRemovedTriggerPackages() []*devpkg.Package {
852+
packages := d.cfg.Packages(true /*includeRemovedTriggerPackages*/)
853+
return devpkg.PackagesFromConfig(packages, d.lockfile)
854+
}
855+
851856
// AllPackages returns the packages that are defined in devbox.json and
852857
// recursively added by plugins.
853858
// NOTE: This will not return packages removed by their plugin with the

internal/devpkg/package.go

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -832,3 +832,15 @@ func packageInstallErrorHandler(err error, pkg *Package, installableOrEmpty stri
832832

833833
return usererr.WithUserMessage(err, "error installing package %s", pkg.Raw)
834834
}
835+
836+
func (p *Package) ResolvedVersion() (string, error) {
837+
if err := p.resolve(); err != nil {
838+
return "", err
839+
}
840+
lockPackage := p.lockfile.Get(p.Raw)
841+
// Flake packages don't have any values in the lockfile
842+
if lockPackage == nil {
843+
return "", nil
844+
}
845+
return p.lockfile.Get(p.Raw).Version, nil
846+
}

0 commit comments

Comments
 (0)