@@ -7,24 +7,31 @@ import (
77
88 "github.com/git-bug/git-bug/commands/completion"
99 "github.com/git-bug/git-bug/commands/execenv"
10+ "github.com/git-bug/git-bug/entities/bug"
11+ "github.com/git-bug/git-bug/entities/identity"
1012 "github.com/git-bug/git-bug/entity"
1113)
1214
1315func newPullCommand (env * execenv.Env ) * cobra.Command {
16+ var verbose bool
17+
1418 cmd := & cobra.Command {
1519 Use : "pull [REMOTE]" ,
1620 Short : "Pull updates from a git remote" ,
1721 PreRunE : execenv .LoadBackend (env ),
1822 RunE : execenv .CloseBackend (env , func (cmd * cobra.Command , args []string ) error {
19- return runPull (env , args )
23+ return runPull (env , args , verbose )
2024 }),
2125 ValidArgsFunction : completion .GitRemote (env ),
2226 }
2327
28+ flags := cmd .Flags ()
29+ flags .BoolVarP (& verbose , "verbose" , "v" , false , "log each operation to stderr" )
30+
2431 return cmd
2532}
2633
27- func runPull (env * execenv.Env , args []string ) error {
34+ func runPull (env * execenv.Env , args []string , verbose bool ) error {
2835 if len (args ) > 1 {
2936 return errors .New ("Only pulling from one remote at a time is supported" )
3037 }
@@ -34,24 +41,75 @@ func runPull(env *execenv.Env, args []string) error {
3441 remote = args [0 ]
3542 }
3643
37- env .Out .Println ("Fetching remote ..." )
44+ if verbose {
45+ env .Err .Println ("Fetching remote ..." )
46+ } else {
47+ env .Out .Println ("Fetching remote ..." )
48+ }
3849
3950 stdout , err := env .Backend .Fetch (remote )
4051 if err != nil {
4152 return err
4253 }
4354
44- env .Out .Println (stdout )
55+ if verbose {
56+ env .Err .Println (stdout )
57+ env .Err .Println ("Merging data ..." )
58+ } else {
59+ env .Out .Println (stdout )
60+ env .Out .Println ("Merging data ..." )
61+ }
4562
46- env .Out .Println ("Merging data ..." )
63+ // Track statistics
64+ newBugs := 0
65+ updatedBugs := 0
66+ newIdentities := 0
67+ updatedIdentities := 0
4768
4869 for result := range env .Backend .MergeAll (remote ) {
4970 if result .Err != nil {
50- env .Err .Println (result .Err )
71+ if verbose {
72+ env .Err .Printf ("Error: %v\n " , result .Err )
73+ } else {
74+ env .Err .Println (result .Err )
75+ }
76+ continue
5177 }
5278
5379 if result .Status != entity .MergeStatusNothing {
54- env .Out .Printf ("%s: %s\n " , result .Id .Human (), result )
80+ if verbose {
81+ env .Err .Printf ("%s: %s\n " , result .Id .Human (), result )
82+ } else {
83+ env .Out .Printf ("%s: %s\n " , result .Id .Human (), result )
84+ }
85+
86+ // Count entity changes by checking the entity type
87+ if result .Entity != nil {
88+ switch result .Entity .(type ) {
89+ case * bug.Bug :
90+ if result .Status == entity .MergeStatusNew {
91+ newBugs ++
92+ } else if result .Status == entity .MergeStatusUpdated {
93+ updatedBugs ++
94+ }
95+ case * identity.Identity :
96+ if result .Status == entity .MergeStatusNew {
97+ newIdentities ++
98+ } else if result .Status == entity .MergeStatusUpdated {
99+ updatedIdentities ++
100+ }
101+ }
102+ }
103+ }
104+ }
105+
106+ // Print summary
107+ if ! verbose {
108+ if newBugs > 0 || updatedBugs > 0 || newIdentities > 0 || updatedIdentities > 0 {
109+ env .Out .Printf ("Summary: %d new bugs, %d updated bugs, %d new identities, %d updated identities\n " ,
110+ newBugs , updatedBugs , newIdentities , updatedIdentities )
111+ } else {
112+ env .Out .Println ("No new changes" )
55113 }
56114 }
57115
0 commit comments