aboutsummaryrefslogtreecommitdiffstats
path: root/commands/execenv/env.go
diff options
context:
space:
mode:
authorSteve Moyer <smoyer1@selesy.com>2023-01-16 10:57:51 -0500
committerSteve Moyer <smoyer1@selesy.com>2023-01-16 10:57:51 -0500
commit146037733472eb74429d6c053ccbb8087fe70bca (patch)
tree6f271663b62f4763460e2437fdd44985b711f838 /commands/execenv/env.go
parent2a78fd9c94960d86264e39d37e5a3e25b0a8358d (diff)
downloadgit-bug-146037733472eb74429d6c053ccbb8087fe70bca.tar.gz
feat: detect os.Stdin/os.Stdout mode
Diffstat (limited to 'commands/execenv/env.go')
-rw-r--r--commands/execenv/env.go33
1 files changed, 30 insertions, 3 deletions
diff --git a/commands/execenv/env.go b/commands/execenv/env.go
index d2d1c301..990bd726 100644
--- a/commands/execenv/env.go
+++ b/commands/execenv/env.go
@@ -20,19 +20,46 @@ const RootCommandName = "git-bug"
const gitBugNamespace = "git-bug"
+type IOMode int
+
+const (
+ UnknownIOMode IOMode = iota
+ TerminalIOMode
+ PipedOrRedirectedIOMode
+)
+
+func getIOMode(io *os.File) IOMode {
+ info, err := io.Stat()
+ if err != nil {
+ panic("only os.StdIn or os.Stdout should be passed to this method")
+ }
+
+ if (info.Mode() & os.ModeCharDevice) == os.ModeCharDevice {
+ return TerminalIOMode
+ }
+
+ return PipedOrRedirectedIOMode
+}
+
// Env is the environment of a command
type Env struct {
Repo repository.ClockedRepo
Backend *cache.RepoCache
+ In io.Reader
+ InMode IOMode
Out Out
+ OutMode IOMode
Err Out
}
func NewEnv() *Env {
return &Env{
- Repo: nil,
- Out: out{Writer: os.Stdout},
- Err: out{Writer: os.Stderr},
+ Repo: nil,
+ In: os.Stdin,
+ InMode: getIOMode(os.Stdin),
+ Out: out{Writer: os.Stdout},
+ OutMode: getIOMode(os.Stdout),
+ Err: out{Writer: os.Stderr},
}
}