@@ -3,8 +3,10 @@ package main
33import (
44 "errors"
55 "fmt"
6+ "log"
67 "os"
78 "path/filepath"
9+ "strings"
810
911 "github.com/GitJournal/git-auto-sync/common"
1012 cfg "github.com/GitJournal/git-auto-sync/common/config"
@@ -183,6 +185,62 @@ func daemonRm(ctx *cli.Context) error {
183185 return nil
184186}
185187
188+ func daemonEnv (ctx * cli.Context ) error {
189+ vars := ctx .Args ().Slice ()
190+
191+ for _ , v := range vars {
192+ if ! strings .Contains (v , "=" ) {
193+ log .Fatalln ("Env variables must be in the format 'key=value'" )
194+ }
195+ }
196+
197+ config , err := cfg .Read ()
198+ if err != nil {
199+ return tracerr .Wrap (err )
200+ }
201+
202+ envMap := toEnvMap (config .Envs )
203+ newMap := toEnvMap (vars )
204+
205+ for k , v := range newMap {
206+ envMap [k ] = v
207+ }
208+
209+ config .Envs = toEnvStrings (envMap )
210+ err = cfg .Write (config )
211+ if err != nil {
212+ return tracerr .Wrap (err )
213+ }
214+
215+ fmt .Println (strings .Join (config .Envs , "\n " ))
216+
217+ return nil
218+ }
219+
186220func remove (slice []string , s int ) []string {
187221 return append (slice [:s ], slice [s + 1 :]... )
188222}
223+
224+ func toEnvMap (envs []string ) map [string ]string {
225+ m := map [string ]string {}
226+ for _ , e := range envs {
227+ parts := strings .Split (e , "=" )
228+ if len (parts ) > 1 {
229+ m [parts [0 ]] = strings .Join (parts [1 :], "=" )
230+ } else {
231+ m [e ] = ""
232+ }
233+ }
234+
235+ return m
236+ }
237+
238+ func toEnvStrings (m map [string ]string ) []string {
239+ vals := []string {}
240+ for k , v := range m {
241+ x := fmt .Sprintf ("%s=%s" , k , v )
242+ vals = append (vals , x )
243+ }
244+
245+ return vals
246+ }
0 commit comments