diff --git a/cmd/actionExecute.go b/cmd/actionExecute.go index 3f56ca6..29d8d9b 100644 --- a/cmd/actionExecute.go +++ b/cmd/actionExecute.go @@ -32,6 +32,7 @@ var actionExecuteAction string var actionExecuteItem string var actionExecuteFormat string var actionExecuteDryRun bool +var actionExecuteDiff bool func init() { actionCmd.AddCommand(actionExecuteCmd) @@ -47,6 +48,8 @@ func init() { actionExecuteCmd.Flags().StringVarP(&actionExecuteFormat, "format", "f", "headlines", "Feed format for returned items.") actionExecuteCmd.Flags().BoolVar(&actionExecuteDryRun, "dry-run", false, "Instead of updating the item, print it") + + actionExecuteCmd.Flags().BoolVar(&actionExecuteDiff, "diff", false, "Show which fields of the item changed") } func actionExecute() { @@ -79,16 +82,40 @@ func actionExecute() { log.Fatalf("error: failed to serialize item: %v", err) } - newItem, err := core.Execute(actionExecuteSource, argv, nil, string(itemJson), time.Minute) + res, err := core.Execute(actionExecuteSource, argv, nil, string(itemJson), time.Minute) if err != nil { log.Fatalf("error: failed to execute action: %v", err) } - if len(newItem) != 1 { - log.Fatalf("error: expected action to produce exactly one item, got %d", len(newItem)) + if len(res) != 1 { + log.Fatalf("error: expected action to produce exactly one item, got %d", len(res)) + } + newItem := res[0] + newItem.Active = item.Active // These fields can't + newItem.Created = item.Created // be updated by actions + + if actionExecuteDiff { + if item.Title != newItem.Title { + log.Printf("title: %s => %s", item.Title, newItem.Title) + } + if item.Author != newItem.Author { + log.Printf("author: %s => %s", item.Author, newItem.Author) + } + if item.Body != newItem.Body { + log.Printf("body: %s => %s", item.Body, newItem.Body) + } + if item.Link != newItem.Link { + log.Printf("link: %s => %s", item.Link, newItem.Link) + } + if item.Time != newItem.Time { + log.Printf("time: %d => %d", item.Time, newItem.Time) + } + if item == newItem { + log.Printf("no changes\n") + } } if actionExecuteDryRun { - fmt.Println(formatter(newItem[0])) + fmt.Println(formatter(res[0])) return }