summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorIbrahim Serdar Acikgoz <serdaracikgoz86@gmail.com>2018-12-09 00:10:32 +0300
committerIbrahim Serdar Acikgoz <serdaracikgoz86@gmail.com>2018-12-09 00:10:32 +0300
commitaa6f0cf9a44f502fe41aecf9ed3f5ddbb8e20a71 (patch)
treed29e0dd7c754ff663c325202494a51d7ee034043
parentgit add, git reset and git stash implementation added. (diff)
downloadgitbatch-aa6f0cf9a44f502fe41aecf9ed3f5ddbb8e20a71.tar.gz
added sync to remote branches with git fetch prune
-rw-r--r--pkg/app/app.go4
-rw-r--r--pkg/app/config.go16
-rw-r--r--pkg/git/branch.go7
-rw-r--r--pkg/git/fetch.go1
-rw-r--r--pkg/git/merge.go1
-rw-r--r--pkg/git/remote.go17
-rw-r--r--pkg/gui/gui-util.go18
-rw-r--r--pkg/gui/gui.go17
-rw-r--r--pkg/gui/keybindings.go8
-rw-r--r--pkg/gui/remotebranchview.go20
-rw-r--r--pkg/queue/job.go1
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
}