func (s *setCommand) Execute(args []string) error { context := s.context() if context == nil { return fmt.Errorf("cannot set without a context") } context.Lock() transaction := configstate.ContextTransaction(context) context.Unlock() for _, patchValue := range s.Positional.ConfValues { parts := strings.SplitN(patchValue, "=", 2) if len(parts) != 2 { return fmt.Errorf(i18n.G("invalid parameter: %q (want key=value)"), patchValue) } key := parts[0] var value interface{} err := json.Unmarshal([]byte(parts[1]), &value) if err != nil { // Not valid JSON-- just save the string as-is. value = parts[1] } transaction.Set(s.context().SnapName(), key, value) } return nil }
func (c *getCommand) Execute(args []string) error { context := c.context() if context == nil { return fmt.Errorf("cannot get without a context") } if c.Typed && c.Document { return fmt.Errorf("cannot use -d and -t together") } patch := make(map[string]interface{}) context.Lock() transaction := configstate.ContextTransaction(context) context.Unlock() for _, key := range c.Positional.Keys { var value interface{} err := transaction.Get(c.context().SnapName(), key, &value) if err == nil { patch[key] = value } else if configstate.IsNoOption(err) { if !c.Typed { value = "" } } else { return err } } var confToPrint interface{} = patch if !c.Document && len(c.Positional.Keys) == 1 { confToPrint = patch[c.Positional.Keys[0]] } if c.Typed && confToPrint == nil { c.printf("null\n") return nil } if s, ok := confToPrint.(string); ok && !c.Typed { c.printf("%s\n", s) return nil } var bytes []byte if confToPrint != nil { var err error bytes, err = json.MarshalIndent(confToPrint, "", "\t") if err != nil { return err } } c.printf("%s\n", string(bytes)) return nil }