Skip to content

Commit 37cea8d

Browse files
committed
fix osx support, add additional error context, update comments in shells so that they have a space, don't fail on missing initial shell file
1 parent d8c2220 commit 37cea8d

File tree

5 files changed

+42
-26
lines changed

5 files changed

+42
-26
lines changed

bash_dao.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ import (
1212
var (
1313
bashShell = &shell{
1414
configFileName: filepath.Join(os.Getenv("HOME"), ".bashrc"),
15-
commentSigil: "#",
15+
commentSigil: " #",
1616
quote: func(value string) string {
1717
r := strings.NewReplacer(
1818
"\\", "\\\\",

darwin_dao.go

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@ var (
3131

3232
darwinShell = &shell{
3333
configFileName: filepath.Join(os.Getenv("HOME"), ".config", "penv.sh"),
34-
commentSigil: "#",
34+
commentSigil: " #",
3535
quote: func(value string) string {
3636
r := strings.NewReplacer(
3737
"\\", "\\\\",
@@ -86,14 +86,12 @@ func (dao *DarwinDAO) Save(env *Environment) error {
8686

8787
plistName := filepath.Join(os.Getenv("HOME"), "Library", "LaunchAgents", "penv.plist")
8888

89-
_, err = ioutil.WriteFile(
90-
plistName,
91-
darwinPlist,
92-
)
89+
err = ioutil.WriteFile(plistName, []byte(darwinPlist), 0777)
9390
if err != nil {
9491
return err
9592
}
9693

94+
exec.Command("launchctl", "unload", plistName).Run()
9795
err = exec.Command("launchctl", "load", plistName).Run()
9896
if err != nil {
9997
return err

fish_dao.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ import (
1313
var (
1414
fishShell = &shell{
1515
configFileName: filepath.Join(os.Getenv("HOME"), ".config", "fish", "config.fish"),
16-
commentSigil: "#",
16+
commentSigil: " #",
1717
quote: func(value string) string {
1818
r := strings.NewReplacer(
1919
"\\", "\\\\",

penv.go

Lines changed: 28 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -102,7 +102,7 @@ func Save(env *Environment) error {
102102
func AppendEnv(name, value string) error {
103103
env, err := Load()
104104
if err != nil {
105-
return err
105+
return fmt.Errorf("failed to load environment: %v", err)
106106
}
107107
env.Setters = filter(env.Setters, func(nv NameValue) bool {
108108
return nv.Name != name || nv.Value != value
@@ -115,40 +115,53 @@ func AppendEnv(name, value string) error {
115115
env.Unsetters = filter(env.Unsetters, func(nv NameValue) bool {
116116
return nv.Name != name
117117
})
118-
return Save(env)
118+
err = Save(env)
119+
if err != nil {
120+
return fmt.Errorf("failed to save environment: %v", err)
121+
}
122+
return nil
119123
}
120124

121125
// SetEnv permanently sets an environment variable
122126
func SetEnv(name, value string) error {
123-
defs, err := Load()
127+
env, err := Load()
124128
if err != nil {
125-
return err
129+
return fmt.Errorf("failed to load environment: %v", err)
126130
}
127-
defs.Setters = filter(defs.Setters, func(nv NameValue) bool {
131+
env.Setters = filter(env.Setters, func(nv NameValue) bool {
128132
return nv.Name != name
129133
})
130-
defs.Setters = append(defs.Setters, NameValue{name, value})
131-
defs.Unsetters = filter(defs.Unsetters, func(nv NameValue) bool {
134+
env.Setters = append(env.Setters, NameValue{name, value})
135+
env.Unsetters = filter(env.Unsetters, func(nv NameValue) bool {
132136
return nv.Name != name
133137
})
134-
return Save(defs)
138+
err = Save(env)
139+
if err != nil {
140+
return fmt.Errorf("failed to save environment: %v", err)
141+
}
142+
return nil
135143
}
136144

137145
// UnsetEnv permanently unsets an environment variable
138146
func UnsetEnv(name string) error {
139-
defs, err := Load()
147+
env, err := Load()
140148
if err != nil {
141-
return err
149+
return fmt.Errorf("failed to load environment: %v", err)
142150
}
143-
defs.Setters = filter(defs.Setters, func(nv NameValue) bool {
151+
env.Setters = filter(env.Setters, func(nv NameValue) bool {
144152
return nv.Name != name
145153
})
146-
defs.Appenders = filter(defs.Appenders, func(nv NameValue) bool {
154+
env.Appenders = filter(env.Appenders, func(nv NameValue) bool {
147155
return nv.Name != name
148156
})
149-
defs.Unsetters = filter(defs.Unsetters, func(nv NameValue) bool {
157+
env.Unsetters = filter(env.Unsetters, func(nv NameValue) bool {
150158
return nv.Name != name
151159
})
152-
defs.Unsetters = append(defs.Unsetters, NameValue{name, ""})
153-
return Save(defs)
160+
env.Unsetters = append(env.Unsetters, NameValue{name, ""})
161+
162+
err = Save(env)
163+
if err != nil {
164+
return fmt.Errorf("failed to save environment: %v", err)
165+
}
166+
return nil
154167
}

shell.go

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import (
44
"bufio"
55
"encoding/hex"
66
"fmt"
7+
"io/ioutil"
78
"os"
89
"path/filepath"
910
"strings"
@@ -65,7 +66,7 @@ func (sh *shell) Load() (*Environment, error) {
6566

6667
f, err := os.Open(sh.configFileName)
6768
if err != nil {
68-
return nil, err
69+
return env, nil
6970
}
7071
defer f.Close()
7172

@@ -99,16 +100,20 @@ func (sh *shell) Save(env *Environment) error {
99100

100101
// generate the new file
101102
err := func() error {
102-
in, err := os.Open(inName)
103+
fi, err := os.Stat(inName)
104+
if err != nil {
105+
ioutil.WriteFile(inName, []byte{}, 0755)
106+
fi, err = os.Stat(inName)
107+
}
103108
if err != nil {
104109
return err
105110
}
106-
defer in.Close()
107111

108-
fi, err := in.Stat()
112+
in, err := os.Open(inName)
109113
if err != nil {
110114
return err
111115
}
116+
defer in.Close()
112117

113118
out, err := os.OpenFile(outName, os.O_RDWR|os.O_CREATE|os.O_TRUNC, fi.Mode())
114119
if err != nil {

0 commit comments

Comments
 (0)