diff options
| author | İbrahim Serdar Açıkgöz <serdaracikgoz86@gmail.com> | 2019-01-04 14:07:44 +0300 |
|---|---|---|
| committer | İbrahim Serdar Açıkgöz <serdaracikgoz86@gmail.com> | 2019-01-04 14:07:44 +0300 |
| commit | 164958183d3e44db91d9a6b1511bfd2be47efd4f (patch) | |
| tree | 2885ba7847f3ad9b52338e6b88f6fe0523bfb92b | |
| parent | add state to repository and some renaming (diff) | |
| download | gitbatch-164958183d3e44db91d9a6b1511bfd2be47efd4f.tar.gz | |
sort at lazy start
| -rw-r--r-- | core/errors/util-errors.go | 4 | ||||
| -rw-r--r-- | gui/gui.go | 47 |
2 files changed, 50 insertions, 1 deletions
diff --git a/core/errors/util-errors.go b/core/errors/util-errors.go index c734904..f922617 100644 --- a/core/errors/util-errors.go +++ b/core/errors/util-errors.go @@ -37,6 +37,8 @@ var ( ErrConflictAfterMerge = errors.New("conflict while merging") // ErrUnmergedFiles possibly occurs after a conflict ErrUnmergedFiles = errors.New("unmerged files detected") + // ErrReferenceBroken thrown when unable to resolve reference + ErrReferenceBroken = errors.New("unable to resolve reference") // ErrUnclassified is unconsidered error type ErrUnclassified = errors.New("unclassified error") ) @@ -54,6 +56,8 @@ func ParseGitError(out string, err error) error { return ErrConflictAfterMerge } else if strings.Contains(out, "error: Pulling is not possible because you have unmerged files.") { return ErrUnmergedFiles + } else if strings.Contains(out, "unable to resolve reference") { + return ErrReferenceBroken } return ErrUnclassified } @@ -2,6 +2,7 @@ package gui import ( "sync" + "unicode" "github.com/isacikgoz/gitbatch/core/git" "github.com/isacikgoz/gitbatch/core/job" @@ -132,11 +133,55 @@ func (gui *Gui) Run() error { } func (gui *Gui) addRepository(r *git.Repository) { - gui.State.Repositories = append(gui.State.Repositories, r) + gui.mutex.Lock() + gui.State.Repositories = gui.appendAlphabetically(r) + gui.mutex.Unlock() r.On(git.RepositoryUpdated, gui.repositoryUpdated) + gui.repositoryUpdated(nil) } +func (gui *Gui) appendAlphabetically(r *git.Repository) []*git.Repository { + rs := gui.State.Repositories + i := len(rs) - 1 + if i >= 0 && rs[i] != nil && !less(rs[i], r) { + rs = append(rs, nil) + copy(rs[i+1:], rs[i:]) + rs[i] = r + } else { + rs = append(rs, r) + } + return rs +} + +func less(ri, rj *git.Repository) bool { + iRunes := []rune(ri.Name) + jRunes := []rune(rj.Name) + + max := len(iRunes) + if max > len(jRunes) { + max = len(jRunes) + } + + for idx := 0; idx < max; idx++ { + ir := iRunes[idx] + jr := jRunes[idx] + + lir := unicode.ToLower(ir) + ljr := unicode.ToLower(jr) + + if lir != ljr { + return lir < ljr + } + + // the lowercase runes are the same, so compare the original + if ir != jr { + return ir < jr + } + } + return false +} + // set the layout and create views with their default size, name etc. values // TODO: window sizes can be handled better func (gui *Gui) layout(g *gocui.Gui) error { |
