diff options
| -rw-r--r-- | pkg/app/app.go | 4 | ||||
| -rw-r--r-- | pkg/app/config.go | 16 | ||||
| -rw-r--r-- | pkg/git/branch.go | 7 | ||||
| -rw-r--r-- | pkg/git/fetch.go | 1 | ||||
| -rw-r--r-- | pkg/git/merge.go | 1 | ||||
| -rw-r--r-- | pkg/git/remote.go | 17 | ||||
| -rw-r--r-- | pkg/gui/gui-util.go | 18 | ||||
| -rw-r--r-- | pkg/gui/gui.go | 17 | ||||
| -rw-r--r-- | pkg/gui/keybindings.go | 8 | ||||
| -rw-r--r-- | pkg/gui/remotebranchview.go | 20 | ||||
| -rw-r--r-- | pkg/queue/job.go | 1 |
11 files changed, 83 insertions, 27 deletions
diff --git a/pkg/app/app.go b/pkg/app/app.go index d1ab15b..624b048 100644 --- a/pkg/app/app.go +++ b/pkg/app/app.go @@ -9,6 +9,7 @@ import ( // it has only the gui.Gui pointer for interface entity. type App struct { Gui *gui.Gui + Config *Config } // Setup will handle pre-required operations. It is designed to be a wrapper for @@ -16,12 +17,13 @@ type App struct { func Setup(directory, repoPattern, logLevel string) (*App, error) { // initiate the app and give it initial values app := &App{} + app.Config, _ = LoadConfiguration() setLogLevel(logLevel) var err error directories := generateDirectories(directory, repoPattern) // create a gui.Gui struct and set it as App's gui - app.Gui, err = gui.NewGui(directories) + app.Gui, err = gui.NewGui(app.Config.Mode, directories) if err != nil { // the error types and handling is not considered yer log.Error(err) diff --git a/pkg/app/config.go b/pkg/app/config.go new file mode 100644 index 0000000..d34e647 --- /dev/null +++ b/pkg/app/config.go @@ -0,0 +1,16 @@ +package app + +import ( + +) + +type Config struct { + Mode string + Directories []string +} + +func LoadConfiguration() (*Config, error) { + config := &Config{ + } + return config, nil +}
\ No newline at end of file diff --git a/pkg/git/branch.go b/pkg/git/branch.go index 4f54ced..ee01f5d 100644 --- a/pkg/git/branch.go +++ b/pkg/git/branch.go @@ -129,12 +129,9 @@ func (entity *RepoEntity) Checkout(branch *Branch) error { entity.Commit = entity.Commits[0] entity.Branch = branch entity.RefreshPushPull() - // TODO: same code on 3 different occasion, maybe something wrong? // make this conditional on global scale - if err = entity.Remote.switchRemoteBranch(entity.Remote.Name + "/" + entity.Branch.Name); err != nil { - // probably couldn't find, but its ok. - log.Trace("Cannot find proper remote branch " + err.Error()) - return nil + if err := entity.Remote.SyncBranches(branch.Name); err != nil { + return err } return nil } diff --git a/pkg/git/fetch.go b/pkg/git/fetch.go index 1b3bb69..9733465 100644 --- a/pkg/git/fetch.go +++ b/pkg/git/fetch.go @@ -40,5 +40,6 @@ func Fetch(entity *RepoEntity, options FetchOptions) error { log.Warn("Error while fetching") return err } + entity.Refresh() return nil }
\ No newline at end of file diff --git a/pkg/git/merge.go b/pkg/git/merge.go index f2a8fae..ebc4ccc 100644 --- a/pkg/git/merge.go +++ b/pkg/git/merge.go @@ -33,5 +33,6 @@ func Merge(entity *RepoEntity, options MergeOptions) error { log.Warn("Error while merging") return err } + entity.Refresh() return nil }
\ No newline at end of file diff --git a/pkg/git/remote.go b/pkg/git/remote.go index d1aeeab..62eb0db 100644 --- a/pkg/git/remote.go +++ b/pkg/git/remote.go @@ -22,9 +22,8 @@ func (entity *RepoEntity) NextRemote() error { } else { entity.Remote = entity.Remotes[currentRemoteIndex+1] } - // TODO: same code on 3 different occasion, maybe something wrong? - if err := entity.Remote.switchRemoteBranch(entity.Remote.Name + "/" + entity.Branch.Name); err != nil { - // probably couldn't find, but its ok. + if err := entity.Remote.SyncBranches(entity.Branch.Name); err != nil { + return err } return nil } @@ -37,9 +36,8 @@ func (entity *RepoEntity) PreviousRemote() error { } else { entity.Remote = entity.Remotes[currentRemoteIndex-1] } - // TODO: same code on 3 different occasion, maybe something wrong? - if err := entity.Remote.switchRemoteBranch(entity.Remote.Name + "/" + entity.Branch.Name); err != nil { - // probably couldn't find, but its ok. + if err := entity.Remote.SyncBranches(entity.Branch.Name); err != nil { + return err } return nil } @@ -81,3 +79,10 @@ func (entity *RepoEntity) loadRemotes() error { } return err } + +func (remote *Remote) SyncBranches(branchName string) error { + if err := remote.switchRemoteBranch(remote.Name + "/" + branchName); err != nil { + // probably couldn't find, but its ok. + } + return nil +} diff --git a/pkg/gui/gui-util.go b/pkg/gui/gui-util.go index a0780bd..f9bba41 100644 --- a/pkg/gui/gui-util.go +++ b/pkg/gui/gui-util.go @@ -80,15 +80,15 @@ func (gui *Gui) previousViewOfGroup(g *gocui.Gui, v *gocui.View, group []viewFea // siwtch the app mode // TODO: switching can be made with conventional iteration func (gui *Gui) switchMode(g *gocui.Gui, v *gocui.View) error { - switch mode := gui.State.Mode.ModeID; mode { - case FetchMode: - gui.State.Mode = pullMode - case PullMode: - gui.State.Mode = mergeMode - case MergeMode: - gui.State.Mode = fetchMode - default: - gui.State.Mode = fetchMode + for i, mode := range modes { + if mode == gui.State.Mode { + if i == len(modes)-1 { + gui.State.Mode = modes[0] + break + } + gui.State.Mode = modes[i+1] + break + } } gui.updateKeyBindingsView(g, mainViewFeature.Name) return nil diff --git a/pkg/gui/gui.go b/pkg/gui/gui.go index 5c32bc0..7fb3019 100644 --- a/pkg/gui/gui.go +++ b/pkg/gui/gui.go @@ -41,15 +41,15 @@ type mode struct { } // ModeID is the mode indicator for the gui -type ModeID int8 +type ModeID string const ( // FetchMode puts the gui in fetch state - FetchMode ModeID = 0 + FetchMode ModeID = "fetch" // PullMode puts the gui in pull state - PullMode ModeID = 1 + PullMode ModeID = "pull" // MergeMode puts the gui in merge state - MergeMode ModeID = 2 + MergeMode ModeID = "merge" ) var ( @@ -70,10 +70,11 @@ var ( mergeMode = mode{ModeID: MergeMode, DisplayString: "Merge", CommandString: "merge"} mainViews = []viewFeature{mainViewFeature, remoteViewFeature, remoteBranchViewFeature, branchViewFeature, commitViewFeature} + modes = []mode{fetchMode, pullMode, mergeMode} ) // NewGui creates a Gui opject and fill it's state related entites -func NewGui(directoies []string) (*Gui, error) { +func NewGui(mode string, directoies []string) (*Gui, error) { initialState := guiState{ Directories: directoies, Mode: fetchMode, @@ -82,6 +83,12 @@ func NewGui(directoies []string) (*Gui, error) { gui := &Gui{ State: initialState, } + for _, m := range modes { + if string(m.ModeID) == mode { + gui.State.Mode = m + break + } + } return gui, nil } diff --git a/pkg/gui/keybindings.go b/pkg/gui/keybindings.go index e808959..c6e1814 100644 --- a/pkg/gui/keybindings.go +++ b/pkg/gui/keybindings.go @@ -420,6 +420,14 @@ func (gui *Gui) generateKeybindings() error { Display: "k", Description: "Up", Vital: false, + }, { + View: remoteBranchViewFeature.Name, + Key: 's', + Modifier: gocui.ModNone, + Handler: gui.syncRemoteBranch, + Display: "s", + Description: "Synch with Remote", + Vital: true, }, // Commit View Controls { diff --git a/pkg/gui/remotebranchview.go b/pkg/gui/remotebranchview.go index eb65d55..ce44e2c 100644 --- a/pkg/gui/remotebranchview.go +++ b/pkg/gui/remotebranchview.go @@ -38,6 +38,26 @@ func (gui *Gui) updateRemoteBranches(g *gocui.Gui, entity *git.RepoEntity) error } // iteration handler for the remotebranchview +func (gui *Gui) syncRemoteBranch(g *gocui.Gui, v *gocui.View) error { + var err error + entity := gui.getSelectedRepository() + if err = git.Fetch(entity, git.FetchOptions{ + RemoteName: entity.Remote.Name, + Prune: true, + }); err != nil { + return err + } + // have no idea why this works.. + // some time need to fix, movement aint bad huh? + gui.nextRemote(g,v) + gui.previousRemote(g,v) + if err = gui.updateRemoteBranches(g, entity); err != nil { + return err + } + return nil +} + +// iteration handler for the remotebranchview func (gui *Gui) nextRemoteBranch(g *gocui.Gui, v *gocui.View) error { var err error entity := gui.getSelectedRepository() diff --git a/pkg/queue/job.go b/pkg/queue/job.go index e2dd94e..1fe5ba1 100644 --- a/pkg/queue/job.go +++ b/pkg/queue/job.go @@ -63,6 +63,5 @@ func (job *Job) start() error { return nil } job.Entity.State = git.Success - job.Entity.Refresh() return nil } |
