Compare commits

2 Commits
Author SHA1 Message Date
keb 06e1ab7714 fix: local builds are dev-<commit> again, not a Go pseudo-version
CI / Checks (pull_request) Successful in 36s
PR title / Conventional title (pull_request) Successful in 0s
2026-10-14 21:22:19 +02:00
keb 4480e8fed0 fix: lazysecrets starts from fzf's become, on a non-blocking terminal (#67)
fzf's become hands lazysecrets its /dev/tty still non-blocking. Go can't poll /dev/tty on macOS, so it reads it directly, and the TUI's first read failed with "resource temporarily unavailable" (EAGAIN). lazysecrets now makes a terminal on stdin blocking before the TUI starts (Unix; nothing on Windows).

Reviewed-on: #67
Co-authored-by: Karl-Einar Bergstrøm <karl-einarb@outlook.com>
2026-10-14 21:22:19 +02:00
5 changed files with 68 additions and 2 deletions

No files matched your search

+1
View File
@@ -436,6 +436,7 @@ Flags:
Styles: &theme, Styles: &theme,
DefaultFg: defaultFg, DefaultFg: defaultFg,
}) })
blockingStdin()
p = tea.NewProgram(m) p = tea.NewProgram(m)
final, err := p.Run() final, err := p.Run()
if fm, ok := final.(app.Model); ok { if fm, ok := final.(app.Model); ok {
+5
View File
@@ -0,0 +1,5 @@
//go:build !unix
package main
func blockingStdin() {}
+20
View File
@@ -0,0 +1,20 @@
//go:build unix
package main
import (
"os"
"syscall"
"golang.org/x/term"
)
// blockingStdin makes a terminal on stdin blocking again. fzf's become
// hands on its /dev/tty non-blocking; Go can't poll /dev/tty on macOS,
// so it reads it directly, and the TUI's first read would fail with
// EAGAIN ("resource temporarily unavailable").
func blockingStdin() {
if fd := int(os.Stdin.Fd()); term.IsTerminal(fd) {
_ = syscall.SetNonblock(fd, false)
}
}
+20 -2
View File
@@ -1,6 +1,10 @@
package main package main
import "runtime/debug" import (
"regexp"
"runtime/debug"
"strings"
)
// version is set by release builds: // version is set by release builds:
// //
@@ -8,7 +12,12 @@ import "runtime/debug"
var version string var version string
// versionString is the release version, or for other builds what Go // versionString is the release version, or for other builds what Go
// recorded: the module version (go install …@v1.2.3), else the commit. // recorded: the module version (go install …@v1.2.3), else the commit
// (dev-c1a4f90, -dirty with changes not committed).
// pseudo matches a Go pseudo-version (v0.1.3-0.20261014174204-1c31a75d0507,
// maybe +dirty): its commit.
var pseudo = regexp.MustCompile(`[-.]\d{14}-([0-9a-f]{12})(\+.*)?$`)
func versionString() string { func versionString() string {
if version != "" { if version != "" {
return version return version
@@ -18,6 +27,15 @@ func versionString() string {
return "dev" return "dev"
} }
if v := bi.Main.Version; v != "" && v != "(devel)" { if v := bi.Main.Version; v != "" && v != "(devel)" {
// A commit, not a release: a local build (Go stamps those too) or
// go install …@<commit>.
if m := pseudo.FindStringSubmatch(v); m != nil {
dirty := ""
if strings.HasSuffix(v, "+dirty") {
dirty = "-dirty"
}
return "dev-" + m[1][:7] + dirty
}
return v return v
} }
var rev, dirty string var rev, dirty string
+22
View File
@@ -0,0 +1,22 @@
package main
import "testing"
func TestPseudoVersions(t *testing.T) {
for v, want := range map[string]string{
"v0.1.3-0.20261014174204-1c31a75d0507": "1c31a75d0507",
"v0.1.3-0.20261014174204-1c31a75d0507+dirty": "1c31a75d0507",
"v0.0.0-20261014174204-1c31a75d0507": "1c31a75d0507",
"v0.2.0-rc.1.0.20261014174204-1c31a75d0507": "1c31a75d0507",
"v0.1.2": "",
"v0.2.0-rc.1": "",
} {
got := ""
if m := pseudo.FindStringSubmatch(v); m != nil {
got = m[1]
}
if got != want {
t.Errorf("%s: %q, want %q", v, got, want)
}
}
}