Skip to content

Commit 58d35e3

Browse files
committed
[sandboxes] devbox ls: print versions
1 parent 6a89adb commit 58d35e3

File tree

3 files changed

+39
-2
lines changed

3 files changed

+39
-2
lines changed

internal/boxcli/list.go

Lines changed: 22 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,27 @@ 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.Fprintf(cmd.OutOrStdout(), msg)
56+
3757
}
3858
return nil
3959
},

internal/devbox/devbox.go

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -848,6 +848,11 @@ func (d *Devbox) AllPackageNamesIncludingRemovedTriggerPackages() []string {
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)