diff --git a/app/app.go b/app/app.go index 3babd1d..0cffc00 100644 --- a/app/app.go +++ b/app/app.go @@ -139,6 +139,11 @@ func (g *GitRepositoryManager) runCommand(cmd commands.Command) { var wg sync.WaitGroup for _, repo := range g.configuration.Repositories { + + if repo.Skip && !g.cliArguments.IgnoreSkipped { + continue + } + wg.Add(1) go func(r config.RepositoryConfig) { diff --git a/app/app_test.go b/app/app_test.go index 386c264..18e2952 100644 --- a/app/app_test.go +++ b/app/app_test.go @@ -371,3 +371,63 @@ func TestDescribeStatusNoChangeColor(t *testing.T) { describeStatus(status) } + +func TestSkipRepository(t *testing.T) { + grm := GitRepositoryManager{ + cliArguments: config.CliArguments{ + LimitToTags: []string{"example"}, + Routines: 10, + }, + configuration: config.Configuration{ + Repositories: []config.RepositoryConfig{ + {Name: "example1"}, + {Name: "example2", Skip: true}, + {Name: "example3"}, + }, + }, + } + fakeCommand := FakeCommandToTest{ + triggerError: false, + triggerChanged: false, + } + emt := ExpectedMessageTester{ + expectedMessages: []string{ + "Repository \"example1\": response from fake command\n", + "Repository \"example3\": response from fake command\n", + }, + } + echo.Color(false) + echo.Output(emt) + grm.runCommand(fakeCommand) +} + +func TestSkipRepositoryWithIgnore(t *testing.T) { + grm := GitRepositoryManager{ + cliArguments: config.CliArguments{ + LimitToTags: []string{"example"}, + Routines: 10, + IgnoreSkipped: true, + }, + configuration: config.Configuration{ + Repositories: []config.RepositoryConfig{ + {Name: "example1"}, + {Name: "example2", Skip: true}, + {Name: "example3"}, + }, + }, + } + fakeCommand := FakeCommandToTest{ + triggerError: false, + triggerChanged: false, + } + emt := ExpectedMessageTester{ + expectedMessages: []string{ + "Repository \"example1\": response from fake command\n", + "Repository \"example2\": response from fake command\n", + "Repository \"example3\": response from fake command\n", + }, + } + echo.Color(false) + echo.Output(emt) + grm.runCommand(fakeCommand) +} diff --git a/config/cmd.go b/config/cmd.go index 01f7ff8..1373bda 100644 --- a/config/cmd.go +++ b/config/cmd.go @@ -53,6 +53,10 @@ func ParseCliArguments(name, description string, arguments []string) (CliArgumen Help: "Determine how many tasks can run simultaneously", }) + ignoreSkipped := parser.Flag("", "ignore-skip-flag", &argparse.Options{ + Help: "Run selected command for all repositories with ignoring the skip flag", + }) + if err := parser.Parse(arguments); err != nil { return CliArguments{}, errors.New(parser.Usage("Please follow this help")) } @@ -74,5 +78,6 @@ func ParseCliArguments(name, description string, arguments []string) (CliArgumen LimitToName: *limitName, LimitToTags: *limitTags, Routines: *limitRoutines, + IgnoreSkipped: *ignoreSkipped, }, nil } diff --git a/config/structures.go b/config/structures.go index 9a716c3..f780cc7 100644 --- a/config/structures.go +++ b/config/structures.go @@ -6,10 +6,11 @@ type Configuration struct { } type RepositoryConfig struct { - Name string `yaml:",omitempty"` - Src string `yaml:",omitempty"` + Name string `yaml:",omitempty"` + Src string Dest string `yaml:",omitempty"` Tags []string `yaml:",omitempty"` + Skip bool } type CliArguments struct { @@ -21,4 +22,5 @@ type CliArguments struct { LimitToName string LimitToTags []string Routines int + IgnoreSkipped bool }