summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author <>2018-12-14 02:00:48 +0300
committer <>2018-12-14 02:00:48 +0300
commit3de3e0da39d82b9ac928890a186e0044fd84b3a5 (patch)
treed3f88447a97dec6806aca7892ab8f9f4f279cafb
parentfiles sort added (diff)
downloadgitbatch-3de3e0da39d82b9ac928890a186e0044fd84b3a5.tar.gz
improved commit feature
-rw-r--r--README.md4
-rw-r--r--pkg/git/cmd-config.go10
-rw-r--r--pkg/git/cmd-status.go9
-rw-r--r--pkg/gui/commitview.go187
-rw-r--r--pkg/gui/diffview.go4
-rw-r--r--pkg/gui/keybindings.go50
-rw-r--r--pkg/gui/stagedview.go23
-rw-r--r--pkg/gui/stashview.go4
-rw-r--r--pkg/gui/statusview.go118
-rw-r--r--pkg/gui/unstagedview.go28
10 files changed, 283 insertions, 154 deletions
diff --git a/README.md b/README.md
index 7719c88..ed085d0 100644
--- a/README.md
+++ b/README.md
@@ -33,7 +33,9 @@ For more information;
## Further goals
- add testing
- full src-d/go-git integration (*having some performance issues*)
-- add commit and maybe push?
+ - fetch, config, add, reset, commit, status, diff ✔
+ - merge, rev-list, stash ✗
+- add push
## Known issues
Please refer to [Known issues page](https://github.com/isacikgoz/gitbatch/wiki/Known-issues)
diff --git a/pkg/git/cmd-config.go b/pkg/git/cmd-config.go
index 94efe33..541b0be 100644
--- a/pkg/git/cmd-config.go
+++ b/pkg/git/cmd-config.go
@@ -37,7 +37,7 @@ const (
func Config(entity *RepoEntity, options ConfigOptions) (value string, err error) {
// here we configure config operation
// default mode is go-git (this may be configured)
- configCmdMode = configCmdModeNative
+ configCmdMode = configCmdModeLegacy
switch configCmdMode {
case configCmdModeLegacy:
@@ -53,7 +53,7 @@ func Config(entity *RepoEntity, options ConfigOptions) (value string, err error)
// configWithGit is simply a bare git commit -m <msg> command which is flexible
func configWithGit(entity *RepoEntity, options ConfigOptions) (value string, err error) {
args := make([]string, 0)
- args = append(args, commitCommand)
+ args = append(args, configCommand)
if len(string(options.Site)) > 0 {
args = append(args, "--"+string(options.Site))
}
@@ -62,21 +62,21 @@ func configWithGit(entity *RepoEntity, options ConfigOptions) (value string, err
// parse options to command line arguments
out, err := GenericGitCommandWithOutput(entity.AbsPath, args)
if err != nil {
- log.Warn("Error at git command (commit)")
return out, err
}
// till this step everything should be ok
- return out, entity.Refresh()
+ return out, nil
}
// commitWithGoGit is the primary commit method
func configWithGoGit(entity *RepoEntity, options ConfigOptions) (value string, err error) {
+ // TODO: add global search
config, err := entity.Repository.Config()
if err != nil {
return value, err
}
value = config.Raw.Section(options.Section).Option(options.Option)
- return value, entity.Refresh()
+ return value, nil
}
// AddConfig
diff --git a/pkg/git/cmd-status.go b/pkg/git/cmd-status.go
index d3d1918..508a27c 100644
--- a/pkg/git/cmd-status.go
+++ b/pkg/git/cmd-status.go
@@ -4,6 +4,7 @@ import (
"errors"
"os"
"regexp"
+ "sort"
"strings"
log "github.com/sirupsen/logrus"
@@ -26,7 +27,7 @@ type File struct {
}
// FileStatus is the short representation of state of a file
-type FileStatus rune
+type FileStatus byte
var (
// StatusNotupdated says file not updated
@@ -84,8 +85,8 @@ func statusWithGit(entity *RepoEntity) ([]*File, error) {
}
fileslist := strings.Split(output, "\n")
for _, file := range fileslist {
- x := rune(file[0])
- y := rune(file[1])
+ x := byte(file[0])
+ y := byte(file[1])
relativePathRegex := regexp.MustCompile(`[(\w|/|.|\-)]+`)
path := relativePathRegex.FindString(file[2:])
@@ -96,6 +97,7 @@ func statusWithGit(entity *RepoEntity) ([]*File, error) {
Y: FileStatus(y),
})
}
+ sort.Sort(filesAlphabetical(files))
return files, nil
}
@@ -117,6 +119,7 @@ func statusWithGoGit(entity *RepoEntity) ([]*File, error) {
Y: FileStatus(v.Worktree),
})
}
+ sort.Sort(filesAlphabetical(files))
return files, nil
}
diff --git a/pkg/gui/commitview.go b/pkg/gui/commitview.go
new file mode 100644
index 0000000..8fdd63f
--- /dev/null
+++ b/pkg/gui/commitview.go
@@ -0,0 +1,187 @@
+package gui
+
+import (
+ "errors"
+ "fmt"
+ "regexp"
+
+ "github.com/isacikgoz/gitbatch/pkg/git"
+ "github.com/jroimartin/gocui"
+)
+
+var (
+ commitFrameViewFeature = viewFeature{Name: "commitframe", Title: " Frame "}
+ commitUserNameLabelFeature = viewFeature{Name: "commitusername", Title: " Name: "}
+ commitUserEmailLabelViewFeature = viewFeature{Name: "commituseremail", Title: " E-Mail: "}
+
+ // these views used as a input for the credentials
+ commitMessageViewFeature = viewFeature{Name: "commitmessage", Title: " Commit Mesage "}
+ commitUserUserViewFeature = viewFeature{Name: "authuser", Title: " Name "}
+ commitUserEmailViewFeature = viewFeature{Name: "authpasswd", Title: " E-Mail "}
+
+ commitViews = []viewFeature{commitMessageViewFeature, commitUserUserViewFeature, commitUserEmailViewFeature}
+ commitLabelViews = []viewFeature{commitFrameViewFeature, commitUserNameLabelFeature, commitUserEmailLabelViewFeature}
+)
+
+// open the commit message views
+func (gui *Gui) openCommitMessageView(g *gocui.Gui, v *gocui.View) error {
+ maxX, maxY := g.Size()
+ commitMesageReturnView = v.Name()
+ v_frame, err := g.SetView(commitFrameViewFeature.Name, maxX/2-30, maxY/2-4, maxX/2+30, maxY/2+3)
+ if err != nil {
+ if err != gocui.ErrUnknownView {
+ return err
+ }
+ v_frame.Frame = true
+ fmt.Fprintln(v_frame, " Enter your commit message:")
+ }
+ v, err = g.SetView(commitMessageViewFeature.Name, maxX/2-29, maxY/2-3, maxX/2+29, maxY/2)
+ if err != nil {
+ if err != gocui.ErrUnknownView {
+ return err
+ }
+ v.Frame = false
+ v.Wrap = true
+ v.Editable = true
+ v.Editor = gocui.DefaultEditor
+ g.Cursor = true
+ }
+ if err := gui.openCommitUserNameView(g); err != nil {
+ return err
+ }
+ if err := gui.openCommitUserEmailView(g); err != nil {
+ return err
+ }
+ gui.updateKeyBindingsView(g, commitMessageViewFeature.Name)
+ if _, err := g.SetCurrentView(commitMessageViewFeature.Name); err != nil {
+ return err
+ }
+ return nil
+}
+
+// open an error view to inform user with a message and a useful note
+func (gui *Gui) openCommitUserNameView(g *gocui.Gui) error {
+ entity := gui.getSelectedRepository()
+ maxX, maxY := g.Size()
+ // first, create the label for user
+ vlabel, err := g.SetView(commitUserNameLabelFeature.Name, maxX/2-30, maxY/2, maxX/2-19, maxY/2+2)
+ if err != nil {
+ if err != gocui.ErrUnknownView {
+ return err
+ }
+ fmt.Fprintln(vlabel, commitUserNameLabelFeature.Title)
+ vlabel.Frame = false
+ }
+ // second, crete the user input
+ v, err := g.SetView(commitUserUserViewFeature.Name, maxX/2-18, maxY/2, maxX/2+29, maxY/2+2)
+ if err != nil {
+ if err != gocui.ErrUnknownView {
+ return err
+ }
+ name, err := git.Config(entity, git.ConfigOptions{
+ Section: "user",
+ Option: "name",
+ })
+ if err != nil {
+ return err
+ }
+ fmt.Fprintln(v, name)
+ v.Editable = true
+ v.Frame = false
+ }
+ return nil
+}
+
+// open an error view to inform user with a message and a useful note
+func (gui *Gui) openCommitUserEmailView(g *gocui.Gui) error {
+ entity := gui.getSelectedRepository()
+ maxX, maxY := g.Size()
+ // first, create the label for password
+ vlabel, err := g.SetView(commitUserEmailLabelViewFeature.Name, maxX/2-30, maxY/2+1, maxX/2-19, maxY/2+3)
+ if err != nil {
+ if err != gocui.ErrUnknownView {
+ return err
+ }
+ fmt.Fprintln(vlabel, commitUserEmailLabelViewFeature.Title)
+ vlabel.Frame = false
+ }
+ // second, crete the masked password input
+ v, err := g.SetView(commitUserEmailViewFeature.Name, maxX/2-18, maxY/2+1, maxX/2+29, maxY/2+3)
+ if err != nil {
+ if err != gocui.ErrUnknownView {
+ return err
+ }
+ email, err := git.Config(entity, git.ConfigOptions{
+ Section: "user",
+ Option: "email",
+ })
+ if err != nil {
+ return err
+ }
+ fmt.Fprintln(v, email)
+ v.Editable = true
+ v.Frame = false
+ }
+ return nil
+}
+
+// close the opened commite mesage view
+func (gui *Gui) submitCommitMessageView(g *gocui.Gui, v *gocui.View) error {
+ entity := gui.getSelectedRepository()
+ // in order to read buffer of the views, first we need to find'em
+ v_msg, err := g.View(commitMessageViewFeature.Name)
+ v_name, err := g.View(commitUserUserViewFeature.Name)
+ v_email, err := g.View(commitUserEmailViewFeature.Name)
+ // the return string of the views contain trailing new lines
+ re := regexp.MustCompile(`\r?\n`)
+ // TODO: maybe intentionally added new lines?
+ msg := re.ReplaceAllString(v_msg.ViewBuffer(), "")
+ name := re.ReplaceAllString(v_name.ViewBuffer(), "")
+ email := re.ReplaceAllString(v_email.ViewBuffer(), "")
+ if len(email) <= 0 {
+ return errors.New("User email needs to be provided")
+ }
+ err = git.CommitCommand(entity, git.CommitOptions{
+ CommitMsg: msg,
+ User: name,
+ Email: email,
+ })
+ if err != nil {
+ return err
+ }
+ entity.Refresh()
+ err = gui.closeCommitMessageView(g, v)
+ return err
+}
+
+// focus to next view
+func (gui *Gui) nextCommitView(g *gocui.Gui, v *gocui.View) error {
+ err := gui.nextViewOfGroup(g, v, commitViews)
+ return err
+}
+
+// close the opened commite mesage view
+func (gui *Gui) closeCommitMessageView(g *gocui.Gui, v *gocui.View) error {
+ entity := gui.getSelectedRepository()
+ g.Cursor = false
+ for _, view := range commitViews {
+ if err := g.DeleteView(view.Name); err != nil {
+ return err
+ }
+ }
+ for _, view := range commitLabelViews {
+ if err := g.DeleteView(view.Name); err != nil {
+ return err
+ }
+ }
+ if err := gui.refreshMain(g); err != nil {
+ return err
+ }
+ if err := gui.refreshViews(g, entity); err != nil {
+ return err
+ }
+ if err := refreshAllStatusView(g, entity, true); err != nil {
+ return err
+ }
+ return gui.closeViewCleanup(commitMesageReturnView)
+}
diff --git a/pkg/gui/diffview.go b/pkg/gui/diffview.go
index 04c9e10..55286e9 100644
--- a/pkg/gui/diffview.go
+++ b/pkg/gui/diffview.go
@@ -62,9 +62,9 @@ func (gui *Gui) openFileDiffView(g *gocui.Gui, v *gocui.View) (err error) {
var files []*git.File
switch v.Name() {
case unstageViewFeature.Name:
- _, files, err = generateFileLists(entity)
+ _, files, err = populateFileLists(entity)
case stageViewFeature.Name:
- files, _, err = generateFileLists(entity)
+ files, _, err = populateFileLists(entity)
}
if err != nil {
return err
diff --git a/pkg/gui/keybindings.go b/pkg/gui/keybindings.go
index 1d4dd6d..4917cd4 100644
--- a/pkg/gui/keybindings.go
+++ b/pkg/gui/keybindings.go
@@ -206,6 +206,38 @@ func (gui *Gui) generateKeybindings() error {
gui.KeyBindings = append(gui.KeyBindings, binding)
}
}
+ for _, view := range commitViews {
+ commitKeybindings := []*KeyBinding{
+ {
+ View: view.Name,
+ Key: gocui.KeyEsc,
+ Modifier: gocui.ModNone,
+ Handler: gui.closeCommitMessageView,
+ Display: "esc",
+ Description: "close/cancel",
+ Vital: true,
+ }, {
+ View: view.Name,
+ Key: gocui.KeyTab,
+ Modifier: gocui.ModNone,
+ Handler: gui.nextCommitView,
+ Display: "tab",
+ Description: "Next Panel",
+ Vital: true,
+ }, {
+ View: view.Name,
+ Key: gocui.KeyEnter, //TODO: enter should be replaced with a better option
+ Modifier: gocui.ModNone,
+ Handler: gui.submitCommitMessageView,
+ Display: "ctrl + enter",
+ Description: "Submit",
+ Vital: true,
+ },
+ }
+ for _, binding := range commitKeybindings {
+ gui.KeyBindings = append(gui.KeyBindings, binding)
+ }
+ }
individualKeybindings := []*KeyBinding{
// stash view
{
@@ -277,24 +309,6 @@ func (gui *Gui) generateKeybindings() error {
Description: "Show diff",
Vital: true,
},
- // commit message view
- {
- View: commitMessageViewFeature.Name,
- Key: gocui.KeyEsc,
- Modifier: gocui.ModNone,
- Handler: gui.closeCommitMessageView,
- Display: "esc",
- Description: "Close / Cancel",
- Vital: true,
- }, {
- View: commitMessageViewFeature.Name,
- Key: gocui.KeyEnter, //TODO: enter should be replaced with a better option
- Modifier: gocui.ModNone,
- Handler: gui.submitCommitMessageView,
- Display: "ctrl + enter",
- Description: "Submit",
- Vital: true,
- },
// Main view controls
{
View: mainViewFeature.Name,
diff --git a/pkg/gui/stagedview.go b/pkg/gui/stagedview.go
index 294c0f7..4a6beb9 100644
--- a/pkg/gui/stagedview.go
+++ b/pkg/gui/stagedview.go
@@ -27,19 +27,16 @@ func (gui *Gui) openStageView(g *gocui.Gui) error {
func (gui *Gui) resetChanges(g *gocui.Gui, v *gocui.View) error {
entity := gui.getSelectedRepository()
- files, _, err := generateFileLists(entity)
- if err != nil {
- return err
- }
- if len(files) <= 0 {
- return nil
- }
+
_, cy := v.Cursor()
_, oy := v.Origin()
- if err := git.Reset(entity, files[cy+oy], git.ResetOptions{}); err != nil {
+ if len(stagedFiles) <= 0 || len(stagedFiles) <= cy+oy {
+ return nil
+ }
+ if err := git.Reset(entity, stagedFiles[cy+oy], git.ResetOptions{}); err != nil {
return err
}
- return refreshAllStatusView(g, entity)
+ return refreshAllStatusView(g, entity, true)
}
func (gui *Gui) resetAllChanges(g *gocui.Gui, v *gocui.View) error {
@@ -54,7 +51,7 @@ func (gui *Gui) resetAllChanges(g *gocui.Gui, v *gocui.View) error {
}); err != nil {
return err
}
- return refreshAllStatusView(g, entity)
+ return refreshAllStatusView(g, entity, true)
}
// refresh the main view and re-render the repository representations
@@ -66,11 +63,7 @@ func refreshStagedView(g *gocui.Gui, entity *git.RepoEntity) error {
stageView.Clear()
_, cy := stageView.Cursor()
_, oy := stageView.Origin()
- files, _, err := generateFileLists(entity)
- if err != nil {
- return err
- }
- for i, file := range files {
+ for i, file := range stagedFiles {
var prefix string
if i == cy+oy {
prefix = prefix + selectionIndicator
diff --git a/pkg/gui/stashview.go b/pkg/gui/stashview.go
index 54a05db..24b4f3c 100644
--- a/pkg/gui/stashview.go
+++ b/pkg/gui/stashview.go
@@ -34,7 +34,7 @@ func (gui *Gui) stashChanges(g *gocui.Gui, v *gocui.View) error {
return err
}
}
- err = refreshAllStatusView(g, entity)
+ err = refreshAllStatusView(g, entity, true)
return err
}
@@ -58,7 +58,7 @@ func (gui *Gui) popStash(g *gocui.Gui, v *gocui.View) error {
if err := entity.Refresh(); err != nil {
return err
}
- err = refreshAllStatusView(g, entity)
+ err = refreshAllStatusView(g, entity, true)
return err
}
diff --git a/pkg/gui/statusview.go b/pkg/gui/statusview.go
index c0a9c65..82df459 100644
--- a/pkg/gui/statusview.go
+++ b/pkg/gui/statusview.go
@@ -1,29 +1,30 @@
package gui
import (
- "errors"
"fmt"
- "time"
"github.com/isacikgoz/gitbatch/pkg/git"
"github.com/jroimartin/gocui"
- ggt "gopkg.in/src-d/go-git.v4"
- "gopkg.in/src-d/go-git.v4/plumbing/object"
)
var (
- statusHeaderViewFeature = viewFeature{Name: "status-header", Title: " Status Header "}
- stageViewFeature = viewFeature{Name: "staged", Title: " Staged "}
- unstageViewFeature = viewFeature{Name: "unstaged", Title: " Not Staged "}
- stashViewFeature = viewFeature{Name: "stash", Title: " Stash "}
- commitMessageViewFeature = viewFeature{Name: "commitmessage", Title: " Commit Mesage "}
+ statusHeaderViewFeature = viewFeature{Name: "status-header", Title: " Status Header "}
+ stageViewFeature = viewFeature{Name: "staged", Title: " Staged "}
+ unstageViewFeature = viewFeature{Name: "unstaged", Title: " Not Staged "}
+ stashViewFeature = viewFeature{Name: "stash", Title: " Stash "}
+
+ statusViews = []viewFeature{stageViewFeature, unstageViewFeature, stashViewFeature}
- statusViews = []viewFeature{stageViewFeature, unstageViewFeature, stashViewFeature}
commitMesageReturnView string
+ stagedFiles []*git.File
+ unstagedFiles []*git.File
)
// open the status layout
func (gui *Gui) openStatusView(g *gocui.Gui, v *gocui.View) error {
+ if err := reloadFiles(gui.getSelectedRepository()); err != nil {
+ return err
+ }
gui.openStatusHeaderView(g)
gui.openStageView(g)
gui.openUnStagedView(g)
@@ -31,6 +32,11 @@ func (gui *Gui) openStatusView(g *gocui.Gui, v *gocui.View) error {
return nil
}
+func reloadFiles(entity *git.RepoEntity) (err error) {
+ stagedFiles, unstagedFiles, err = populateFileLists(entity)
+ return err
+}
+
// focus to next view
func (gui *Gui) nextStatusView(g *gocui.Gui, v *gocui.View) error {
err := gui.nextViewOfGroup(g, v, statusViews)
@@ -62,7 +68,7 @@ func (gui *Gui) statusCursorDown(g *gocui.Gui, v *gocui.View) error {
}
}
entity := gui.getSelectedRepository()
- if err := refreshStatusView(v.Name(), g, entity); err != nil {
+ if err := refreshStatusView(v.Name(), g, entity, false); err != nil {
return err
}
}
@@ -80,7 +86,7 @@ func (gui *Gui) statusCursorUp(g *gocui.Gui, v *gocui.View) error {
}
}
entity := gui.getSelectedRepository()
- if err := refreshStatusView(v.Name(), g, entity); err != nil {
+ if err := refreshStatusView(v.Name(), g, entity, false); err != nil {
return err
}
}
@@ -113,6 +119,8 @@ func (gui *Gui) closeStatusView(g *gocui.Gui, v *gocui.View) error {
if err := g.DeleteView(statusHeaderViewFeature.Name); err != nil {
return err
}
+ stagedFiles = make([]*git.File, 0)
+ unstagedFiles = make([]*git.File, 0)
entity := gui.getSelectedRepository()
if err := gui.refreshMain(g); err != nil {
return err
@@ -123,7 +131,7 @@ func (gui *Gui) closeStatusView(g *gocui.Gui, v *gocui.View) error {
return gui.closeViewCleanup(mainViewFeature.Name)
}
-func generateFileLists(entity *git.RepoEntity) (staged, unstaged []*git.File, err error) {
+func populateFileLists(entity *git.RepoEntity) (staged, unstaged []*git.File, err error) {
files, err := git.Status(entity)
if err != nil {
return nil, nil, err
@@ -139,14 +147,17 @@ func generateFileLists(entity *git.RepoEntity) (staged, unstaged []*git.File, er
return staged, unstaged, err
}
-func refreshStatusView(viewName string, g *gocui.Gui, entity *git.RepoEntity) error {
+func refreshStatusView(viewName string, g *gocui.Gui, entity *git.RepoEntity, reload bool) error {
+ if reload {
+ reloadFiles(entity)
+ }
switch viewName {
case stageViewFeature.Name:
if err := refreshStagedView(g, entity); err != nil {
return err
}
case unstageViewFeature.Name:
- if err := refreshUnstagedView(g, entity); err != nil {
+ if err := refreshUnstagedView(g); err != nil {
return err
}
case stashViewFeature.Name:
@@ -157,84 +168,11 @@ func refreshStatusView(viewName string, g *gocui.Gui, entity *git.RepoEntity) er
return nil
}
-func refreshAllStatusView(g *gocui.Gui, entity *git.RepoEntity) error {
+func refreshAllStatusView(g *gocui.Gui, entity *git.RepoEntity, reload bool) error {
for _, v := range statusViews {
- if err := refreshStatusView(v.Name, g, entity); err != nil {
+ if err := refreshStatusView(v.Name, g, entity, reload); err != nil {
return err
}
}
return nil
}
-
-// open the commit message views
-func (gui *Gui) openCommitMessageView(g *gocui.Gui, v *gocui.View) error {
- maxX, maxY := g.Size()
- commitMesageReturnView = v.Name()
- v, err := g.SetView(commitMessageViewFeature.Name, maxX/2-30, maxY/2-3, maxX/2+30, maxY/2+3)
- if err != nil {
- if err != gocui.ErrUnknownView {
- return err
- }
- v.Title = commitMessageViewFeature.Title
- v.Wrap = true
- v.Editable = true
- v.Editor = gocui.DefaultEditor
- v.Highlight = true
- g.Cursor = true
- }
- gui.updateKeyBindingsView(g, commitMessageViewFeature.Name)
- if _, err := g.SetCurrentView(commitMessageViewFeature.Name); err != nil {
- return err
- }
- return nil
-}
-
-// close the opened commite mesage view
-func (gui *Gui) submitCommitMessageView(g *gocui.Gui, v *gocui.View) error {
- entity := gui.getSelectedRepository()
- w, err := entity.Repository.Worktree()
- if err != nil {
- return err
- }
- config, err := entity.Repository.Config()
- if err != nil {
- return err
- }
- name := config.Raw.Section("user").Option("name")
- email := config.Raw.Section("user").Option("email")
- if len(email) <= 0 {
- return errors.New("User email needs to be provided")
- }
- _, err = w.Commit(v.ViewBuffer(), &ggt.CommitOptions{
- Author: &object.Signature{
- Name: name,
- Email: email,
- When: time.Now(),
- },
- })
- if err != nil {
- return err
- }
- entity.Refresh()
- err = gui.closeCommitMessageView(g, v)
- return err
-}
-
-// close the opened commite mesage view
-func (gui *Gui) closeCommitMessageView(g *gocui.Gui, v *gocui.View) error {
- entity := gui.getSelectedRepository()
- g.Cursor = false
- if err := g.DeleteView(commitMessageViewFeature.Name); err != nil {
- return err
- }
- if err := gui.refreshMain(g); err != nil {
- return err
- }
- if err := gui.refreshViews(g, entity); err != nil {
- return err
- }
- if err := refreshAllStatusView(g, entity); err != nil {
- return err
- }
- return gui.closeViewCleanup(commitMesageReturnView)
-}
diff --git a/pkg/gui/unstagedview.go b/pkg/gui/unstagedview.go
index 01b16de..1a33c12 100644
--- a/pkg/gui/unstagedview.go
+++ b/pkg/gui/unstagedview.go
@@ -18,26 +18,22 @@ func (gui *Gui) openUnStagedView(g *gocui.Gui) error {
}
v.Title = unstageViewFeature.Title
}
- entity := gui.getSelectedRepository()
- err = refreshUnstagedView(g, entity)
+ err = refreshUnstagedView(g)
return err
}
func (gui *Gui) addChanges(g *gocui.Gui, v *gocui.View) error {
entity := gui.getSelectedRepository()
- _, files, err := generateFileLists(entity)
- if err != nil {
- return err
- }
- if len(files) <= 0 {
- return nil
- }
+
_, cy := v.Cursor()
_, oy := v.Origin()
- if err := git.Add(entity, files[cy+oy], git.AddOptions{}); err != nil {
+ if len(unstagedFiles) <= 0 || len(unstagedFiles) < cy+oy {
+ return nil
+ }
+ if err := git.Add(entity, unstagedFiles[cy+oy], git.AddOptions{}); err != nil {
return err
}
- err = refreshAllStatusView(g, entity)
+ err := refreshAllStatusView(g, entity, true)
return err
}
@@ -46,12 +42,12 @@ func (gui *Gui) addAllChanges(g *gocui.Gui, v *gocui.View) error {
if err := git.AddAll(entity, git.AddOptions{}); err != nil {
return err
}
- err := refreshAllStatusView(g, entity)
+ err := refreshAllStatusView(g, entity, true)
return err
}
// refresh the main view and re-render the repository representations
-func refreshUnstagedView(g *gocui.Gui, entity *git.RepoEntity) error {
+func refreshUnstagedView(g *gocui.Gui) error {
stageView, err := g.View(unstageViewFeature.Name)
if err != nil {
return err
@@ -59,11 +55,7 @@ func refreshUnstagedView(g *gocui.Gui, entity *git.RepoEntity) error {
stageView.Clear()
_, cy := stageView.Cursor()
_, oy := stageView.Origin()
- _, files, err := generateFileLists(entity)
- if err != nil {
- return err
- }
- for i, file := range files {
+ for i, file := range unstagedFiles {
var prefix string
if i == cy+oy {
prefix = prefix + selectionIndicator