Skip to content

Commit e7427cf

Browse files
authored
[nix] Improve output in ensurePackagesAreInstalled (#524)
## Summary This PR does the following: * If not explicitly doing add/remove we get rid of `installing nix packages.` text. * Whem printing nix output add indentation ## How was it tested? ```bash ➜ devbox git:(main) ✗ devbox add python3 Installing nix packages. this derivation will be built: /nix/store/frrcrw99ypkkxjid0y8b7rzrnv5s0f8h-devbox-development.drv building '/nix/store/frrcrw99ypkkxjid0y8b7rzrnv5s0f8h-devbox-development.drv'... created 30 symlinks in user environment building '/nix/store/9w1n2arl4k05nrf79c2k5590kljn5jvl-user-environment.drv'... ... ``` ```bash ➜ devbox git:(landau/format-add) devbox shell Starting a devbox shell... (devbox) ➜ devbox git:(landau/format-add) exit ➜ devbox git:(landau/format-add) devbox run echo 5 5 ➜ devbox git:(landau/format-add) ```
1 parent 865dcaa commit e7427cf

File tree

3 files changed

+48
-44
lines changed

3 files changed

+48
-44
lines changed

internal/impl/devbox.go

Lines changed: 11 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,6 @@ import (
2929
"go.jetpack.io/devbox/internal/planner/plansdk"
3030
"go.jetpack.io/devbox/internal/plugin"
3131
"go.jetpack.io/devbox/internal/telemetry"
32-
"go.jetpack.io/devbox/internal/ux"
3332
"golang.org/x/exp/slices"
3433
)
3534

@@ -203,7 +202,7 @@ func (d *Devbox) Generate() error {
203202
}
204203

205204
func (d *Devbox) Shell() error {
206-
if err := d.ensurePackagesAreInstalled(install); err != nil {
205+
if err := d.ensurePackagesAreInstalled(ensure); err != nil {
207206
return err
208207
}
209208
fmt.Fprintln(d.writer, "Starting a devbox shell...")
@@ -255,7 +254,7 @@ func (d *Devbox) RunScript(cmdName string, cmdArgs []string) error {
255254
return d.RunScriptInNewNixShell(cmdName)
256255
}
257256

258-
if err := d.ensurePackagesAreInstalled(install); err != nil {
257+
if err := d.ensurePackagesAreInstalled(ensure); err != nil {
259258
return err
260259
}
261260

@@ -281,7 +280,7 @@ func (d *Devbox) RunScript(cmdName string, cmdArgs []string) error {
281280
// RunScriptInNewNixShell implements `devbox run` (from outside a devbox shell) using a nix shell.
282281
// Deprecated: RunScript should be used instead.
283282
func (d *Devbox) RunScriptInNewNixShell(scriptName string) error {
284-
if err := d.ensurePackagesAreInstalled(install); err != nil {
283+
if err := d.ensurePackagesAreInstalled(ensure); err != nil {
285284
return err
286285
}
287286
fmt.Fprintln(d.writer, "Starting a devbox shell...")
@@ -366,7 +365,7 @@ func (d *Devbox) ListScripts() []string {
366365
}
367366

368367
func (d *Devbox) Exec(cmds ...string) error {
369-
if err := d.ensurePackagesAreInstalled(install); err != nil {
368+
if err := d.ensurePackagesAreInstalled(ensure); err != nil {
370369
return err
371370
}
372371

@@ -577,6 +576,7 @@ type installMode string
577576
const (
578577
install installMode = "install"
579578
uninstall installMode = "uninstall"
579+
ensure installMode = "ensure"
580580
)
581581

582582
func (d *Devbox) ensurePackagesAreInstalled(mode installMode) error {
@@ -588,14 +588,16 @@ func (d *Devbox) ensurePackagesAreInstalled(mode installMode) error {
588588
if mode == uninstall {
589589
installingVerb = "Uninstalling"
590590
}
591-
_, _ = fmt.Fprintf(d.writer, "%s nix packages. This may take a while...\n", installingVerb)
591+
592+
if mode != ensure {
593+
_, _ = fmt.Fprintf(d.writer, "%s nix packages.\n", installingVerb)
594+
}
592595

593596
// We need to re-install the packages
594597
if err := d.installNixProfile(); err != nil {
595598
fmt.Fprintln(d.writer)
596599
return errors.Wrap(err, "apply Nix derivation")
597600
}
598-
fmt.Fprintln(d.writer, "Done.")
599601

600602
return plugin.RemoveInvalidSymlinks(d.projectDir)
601603
}
@@ -633,8 +635,6 @@ func (d *Devbox) printPackageUpdateMessage(
633635
}
634636
fmt.Fprint(d.writer, successMsg)
635637

636-
fmt.Fprintln(d.writer)
637-
638638
// (Only when in devbox shell) Prompt the user to run hash -r
639639
// to ensure we refresh the shell hash and load the proper environment.
640640
if IsDevboxShellEnabled() {
@@ -678,10 +678,8 @@ func (d *Devbox) installNixProfile() (err error) {
678678
}
679679

680680
cmd.Env = nix.DefaultEnv()
681-
cmd.Stdout = ux.NewFilterWriter(d.writer,
682-
`replacing old 'devbox-development'`,
683-
`installing 'devbox-development'`,
684-
)
681+
cmd.Stdout = &nixPackageInstallWriter{d.writer}
682+
685683
cmd.Stderr = cmd.Stdout
686684

687685
err = cmd.Run()

internal/impl/writer.go

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
package impl
2+
3+
import (
4+
"io"
5+
"strings"
6+
)
7+
8+
var nixPackageInstallIgnore = []string{
9+
`replacing old 'devbox-development'`,
10+
`installing 'devbox-development'`,
11+
}
12+
13+
type nixPackageInstallWriter struct {
14+
w io.Writer
15+
}
16+
17+
func (fw *nixPackageInstallWriter) Write(p []byte) (n int, err error) {
18+
lines := strings.Split(string(p), "\n")
19+
for _, line := range lines {
20+
if line != "" && !fw.ignore(line) {
21+
_, err = io.WriteString(fw.w, "\t"+line+"\n")
22+
if err != nil {
23+
return
24+
}
25+
}
26+
}
27+
return len(p), nil
28+
}
29+
30+
func (*nixPackageInstallWriter) ignore(line string) bool {
31+
for _, filter := range nixPackageInstallIgnore {
32+
if strings.Contains(line, filter) {
33+
return true
34+
}
35+
}
36+
return false
37+
}

internal/ux/filterwriter.go

Lines changed: 0 additions & 31 deletions
This file was deleted.

0 commit comments

Comments
 (0)