Limit number of concurrent goroutines
This commit is contained in:
parent
5fd9bc851b
commit
62dadc53bf
12 changed files with 206 additions and 103 deletions
|
|
@ -3,7 +3,7 @@ package commands
|
|||
import "gitlab.com/revalus/grm/config"
|
||||
|
||||
type Command interface {
|
||||
Command(repoCfg config.RepositoryConfig, cmdStatus chan CommandStatus)
|
||||
Command(repoCfg config.RepositoryConfig) CommandStatus
|
||||
}
|
||||
type CommandStatus struct {
|
||||
Name string
|
||||
|
|
|
|||
|
|
@ -71,7 +71,7 @@ func findNumberOfCommitDiffs(srcCommit *object.Commit, dstCommit *object.Commit)
|
|||
}
|
||||
}
|
||||
|
||||
func (sc StatusChecker) Command(repoCfg config.RepositoryConfig, status chan CommandStatus) {
|
||||
func (sc StatusChecker) Command(repoCfg config.RepositoryConfig) CommandStatus {
|
||||
|
||||
cmdStatus := CommandStatus{
|
||||
Name: repoCfg.Name,
|
||||
|
|
@ -86,32 +86,28 @@ func (sc StatusChecker) Command(repoCfg config.RepositoryConfig, status chan Com
|
|||
if err != nil {
|
||||
cmdStatus.Error = true
|
||||
cmdStatus.Message = err.Error()
|
||||
status <- cmdStatus
|
||||
return
|
||||
return cmdStatus
|
||||
}
|
||||
|
||||
headReference, err := repo.Head()
|
||||
if err != nil {
|
||||
cmdStatus.Error = true
|
||||
cmdStatus.Message = err.Error()
|
||||
status <- cmdStatus
|
||||
return
|
||||
return cmdStatus
|
||||
}
|
||||
|
||||
remotes, err := repo.Remotes()
|
||||
if err != nil || len(remotes) == 0 {
|
||||
cmdStatus.Error = true
|
||||
cmdStatus.Message = "cannot find remote branches"
|
||||
status <- cmdStatus
|
||||
return
|
||||
return cmdStatus
|
||||
}
|
||||
|
||||
currentBranchCommit, err := repo.CommitObject(headReference.Hash())
|
||||
if err != nil {
|
||||
cmdStatus.Error = true
|
||||
cmdStatus.Message = err.Error()
|
||||
status <- cmdStatus
|
||||
return
|
||||
return cmdStatus
|
||||
}
|
||||
|
||||
type remoteStatus struct {
|
||||
|
|
@ -160,5 +156,5 @@ func (sc StatusChecker) Command(repoCfg config.RepositoryConfig, status chan Com
|
|||
cmdStatus.Message = fmt.Sprintf("%v - ( | %v | \u2191%v \u2193%v )", cmdStatus.Message, remoteName, status.ahead, status.behind)
|
||||
}
|
||||
|
||||
status <- cmdStatus
|
||||
return cmdStatus
|
||||
}
|
||||
|
|
|
|||
|
|
@ -109,9 +109,7 @@ func TestCommandRepositoryDoesNotExists(t *testing.T) {
|
|||
Dest: tmpDirWithInitialRepository.rootFS.Root(),
|
||||
}
|
||||
|
||||
ch := make(chan CommandStatus)
|
||||
go sc.Command(repoCfg, ch)
|
||||
repoStatus := <-ch
|
||||
repoStatus := sc.Command(repoCfg)
|
||||
expectedMessage := "repository does not exist"
|
||||
|
||||
if !repoStatus.Error {
|
||||
|
|
@ -149,10 +147,7 @@ func TestCommandRepositoryNoRemoteBranch(t *testing.T) {
|
|||
Dest: dirNameForLocalRepository,
|
||||
}
|
||||
|
||||
ch := make(chan CommandStatus)
|
||||
|
||||
go sc.Command(repoCfg, ch)
|
||||
repoStatus := <-ch
|
||||
repoStatus := sc.Command(repoCfg)
|
||||
expectedMessage := "cannot find remote branches"
|
||||
|
||||
if !repoStatus.Error {
|
||||
|
|
@ -171,9 +166,7 @@ func TestCommandAllCorrectWithoutChanges(t *testing.T) {
|
|||
|
||||
sc, _, repoCfg, _ := getBaseForTestingSyncCommand()
|
||||
|
||||
ch := make(chan CommandStatus)
|
||||
go sc.Command(repoCfg, ch)
|
||||
repoStatus := <-ch
|
||||
repoStatus := sc.Command(repoCfg)
|
||||
expectedMessage := "branch master - ( | origin | \u21910 \u21930 )"
|
||||
|
||||
if repoStatus.Error {
|
||||
|
|
@ -191,15 +184,12 @@ func TestCommandAllCorrectWithOneChange(t *testing.T) {
|
|||
|
||||
sc, fakeLocalRepository, repoCfg, _ := getBaseForTestingSyncCommand()
|
||||
|
||||
ch := make(chan CommandStatus)
|
||||
|
||||
fakeLocalWorkTree, err := fakeLocalRepository.Worktree()
|
||||
checkErrorDuringPreparation(err)
|
||||
|
||||
makeCommit(fakeLocalWorkTree, "commit 1")
|
||||
|
||||
go sc.Command(repoCfg, ch)
|
||||
repoStatus := <-ch
|
||||
repoStatus := sc.Command(repoCfg)
|
||||
expectedMessage := "branch master - ( | origin | \u21911 \u21930 )"
|
||||
|
||||
if repoStatus.Message != expectedMessage {
|
||||
|
|
@ -220,9 +210,7 @@ func TestCommandAllCorrectWithOneChange(t *testing.T) {
|
|||
func TestCommandMultiRemoteNoChanges(t *testing.T) {
|
||||
|
||||
sc, _, repoCfg := getBaseForTestingSyncMultipleRemote()
|
||||
ch := make(chan CommandStatus)
|
||||
go sc.Command(repoCfg, ch)
|
||||
repoStatus := <-ch
|
||||
repoStatus := sc.Command(repoCfg)
|
||||
expectedMessage := "branch master - ( | origin | \u21910 \u21930 ) - ( | subremote | \u21910 \u21930 )"
|
||||
|
||||
if repoStatus.Error {
|
||||
|
|
@ -246,9 +234,7 @@ func TestCommandMultiRemoteWithOneChange(t *testing.T) {
|
|||
makeCommit(fakeLocalWorkTree, "commit 1")
|
||||
checkErrorDuringPreparation(err)
|
||||
|
||||
ch := make(chan CommandStatus)
|
||||
go sc.Command(repoCfg, ch)
|
||||
repoStatus := <-ch
|
||||
repoStatus := sc.Command(repoCfg)
|
||||
expectedMessage := "branch master - ( | origin | \u21911 \u21930 ) - ( | subremote | \u21911 \u21930 )"
|
||||
|
||||
if repoStatus.Error {
|
||||
|
|
|
|||
|
|
@ -49,7 +49,7 @@ func cloneRepository(destPath string, repoCfg *config.RepositoryConfig) (bool, e
|
|||
return true, nil
|
||||
}
|
||||
|
||||
func (s Synchronizer) Command(repoCfg config.RepositoryConfig, status chan CommandStatus) {
|
||||
func (s Synchronizer) Command(repoCfg config.RepositoryConfig) CommandStatus {
|
||||
var err error
|
||||
|
||||
cmdStatus := CommandStatus{
|
||||
|
|
@ -75,7 +75,7 @@ func (s Synchronizer) Command(repoCfg config.RepositoryConfig, status chan Comma
|
|||
} else {
|
||||
cmdStatus.Error = true
|
||||
cmdStatus.Message = err.Error()
|
||||
status <- cmdStatus
|
||||
return cmdStatus
|
||||
}
|
||||
|
||||
if err != nil {
|
||||
|
|
@ -83,6 +83,6 @@ func (s Synchronizer) Command(repoCfg config.RepositoryConfig, status chan Comma
|
|||
cmdStatus.Message = err.Error()
|
||||
}
|
||||
|
||||
status <- cmdStatus
|
||||
return cmdStatus
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -28,12 +28,7 @@ func TestSyncCommand(t *testing.T) {
|
|||
Dest: "awesome-go",
|
||||
}
|
||||
|
||||
ch := make(chan CommandStatus)
|
||||
|
||||
// Pull part
|
||||
go sync.Command(cfg, ch)
|
||||
|
||||
cloneStatus := <-ch
|
||||
cloneStatus := sync.Command(cfg)
|
||||
if cloneStatus.Error {
|
||||
t.Errorf("Unexpected error: %v", cloneStatus.Message)
|
||||
}
|
||||
|
|
@ -54,11 +49,7 @@ func TestSyncCommand(t *testing.T) {
|
|||
t.Errorf("Expected to get %v, instead of this got %v", syncCloned, cloneStatus.Message)
|
||||
}
|
||||
|
||||
// Fetch part
|
||||
go sync.Command(cfg, ch)
|
||||
|
||||
fetchStatus := <-ch
|
||||
|
||||
fetchStatus := sync.Command(cfg)
|
||||
if fetchStatus.Error {
|
||||
t.Errorf("Unexpected error: %v", err.Error())
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue