From fec70b63c187549d4623bcaf75a4a1e0a393fcd3 Mon Sep 17 00:00:00 2001 From: Erik Seliger Date: Thu, 4 Nov 2021 16:44:02 +0100 Subject: [PATCH 1/9] Make clearing cache more explicit --- cmd/src/batch_common.go | 20 +++++++--- cmd/src/batch_exec.go | 21 +++++++--- internal/batches/executor/coordinator.go | 49 ++++++++++++------------ 3 files changed, 54 insertions(+), 36 deletions(-) diff --git a/cmd/src/batch_common.go b/cmd/src/batch_common.go index 378db8e077..4296011f4b 100644 --- a/cmd/src/batch_common.go +++ b/cmd/src/batch_common.go @@ -295,7 +295,6 @@ func executeBatchSpec(ctx context.Context, ui ui.ExecUI, opts executeBatchSpecOp Creator: workspaceCreator, CacheDir: opts.flags.cacheDir, Cache: executor.NewDiskCache(opts.flags.cacheDir), - ClearCache: opts.flags.clearCache, SkipErrors: opts.flags.skipErrors, CleanArchives: opts.flags.cleanArchives, Parallelism: opts.flags.parallelism, @@ -307,11 +306,20 @@ func executeBatchSpec(ctx context.Context, ui ui.ExecUI, opts executeBatchSpecOp ui.CheckingCache() tasks := svc.BuildTasks(ctx, batchSpec, workspaces) - uncachedTasks, cachedSpecs, err := coord.CheckCache(ctx, tasks) - if err != nil { - return err + var ( + specs []*batcheslib.ChangesetSpec + uncachedTasks []*executor.Task + ) + if opts.flags.clearCache { + coord.ClearCache(ctx, tasks) + uncachedTasks = tasks + } else { + uncachedTasks, specs, err = coord.CheckCache(ctx, tasks) + if err != nil { + return err + } } - ui.CheckingCacheSuccess(len(cachedSpecs), len(uncachedTasks)) + ui.CheckingCacheSuccess(len(specs), len(uncachedTasks)) taskExecUI := ui.ExecutingTasks(*verbose, opts.flags.parallelism) freshSpecs, logFiles, err := coord.Execute(ctx, uncachedTasks, batchSpec, taskExecUI) @@ -335,7 +343,7 @@ func executeBatchSpec(ctx context.Context, ui ui.ExecUI, opts executeBatchSpecOp ui.LogFilesKept(logFiles) } - specs := append(cachedSpecs, freshSpecs...) + specs = append(specs, freshSpecs...) err = svc.ValidateChangesetSpecs(repos, specs) if err != nil { diff --git a/cmd/src/batch_exec.go b/cmd/src/batch_exec.go index a4bce4416c..1f83c8e8f9 100644 --- a/cmd/src/batch_exec.go +++ b/cmd/src/batch_exec.go @@ -151,7 +151,6 @@ func executeBatchSpecInWorkspaces(ctx context.Context, ui *ui.JSONLines, opts ex Creator: workspaceCreator, CacheDir: opts.flags.cacheDir, Cache: &executor.JSONLinesCache{Writer: ui}, - ClearCache: opts.flags.clearCache, SkipErrors: opts.flags.skipErrors, CleanArchives: opts.flags.cleanArchives, Parallelism: opts.flags.parallelism, @@ -164,11 +163,21 @@ func executeBatchSpecInWorkspaces(ctx context.Context, ui *ui.JSONLines, opts ex ui.CheckingCache() tasks := svc.BuildTasks(ctx, batchSpec, repoWorkspaces) - uncachedTasks, cachedSpecs, err := coord.CheckCache(ctx, tasks) - if err != nil { - return err + var ( + specs []*batcheslib.ChangesetSpec + uncachedTasks []*executor.Task + ) + // TODO: We don't need to support clear cache here at all. + if opts.flags.clearCache { + coord.ClearCache(ctx, tasks) + uncachedTasks = tasks + } else { + uncachedTasks, specs, err = coord.CheckCache(ctx, tasks) + if err != nil { + return err + } } - ui.CheckingCacheSuccess(len(cachedSpecs), len(uncachedTasks)) + ui.CheckingCacheSuccess(len(specs), len(uncachedTasks)) taskExecUI := ui.ExecutingTasks(*verbose, opts.flags.parallelism) freshSpecs, _, err := coord.Execute(ctx, uncachedTasks, batchSpec, taskExecUI) @@ -185,7 +194,7 @@ func executeBatchSpecInWorkspaces(ctx context.Context, ui *ui.JSONLines, opts ex } } - specs := append(cachedSpecs, freshSpecs...) + specs = append(specs, freshSpecs...) ids := make([]graphql.ChangesetSpecID, len(specs)) diff --git a/internal/batches/executor/coordinator.go b/internal/batches/executor/coordinator.go index 7ab05fc304..be1280756b 100644 --- a/internal/batches/executor/coordinator.go +++ b/internal/batches/executor/coordinator.go @@ -52,7 +52,6 @@ type NewCoordinatorOpts struct { // TODO: We could probably have a wrapper around flags and features, // something like ExecutionArgs, that we can pass around CacheDir string - ClearCache bool SkipErrors bool // Used by batcheslib.BuildChangesetSpecs @@ -112,16 +111,26 @@ func (c *Coordinator) CheckCache(ctx context.Context, tasks []*Task) (uncached [ return uncached, specs, nil } -func (c *Coordinator) checkCacheForTask(ctx context.Context, task *Task) (specs []*batcheslib.ChangesetSpec, found bool, err error) { - // Check if the task is cached. - cacheKey := task.cacheKey() - if c.opts.ClearCache { +func (c *Coordinator) ClearCache(ctx context.Context, tasks []*Task) error { + for _, task := range tasks { + cacheKey := task.cacheKey() if err := c.cache.Clear(ctx, cacheKey); err != nil { - return specs, false, errors.Wrapf(err, "clearing cache for %q", task.Repository.Name) + return errors.Wrapf(err, "clearing cache for %q", task.Repository.Name) } + for i := len(task.Steps) - 1; i > -1; i-- { + key := StepsCacheKey{Task: task, StepIndex: i} - return specs, false, nil + if err := c.cache.Clear(ctx, key); err != nil { + return errors.Wrapf(err, "clearing cache for step %d in %q", i, task.Repository.Name) + } + } } + return nil +} + +func (c *Coordinator) checkCacheForTask(ctx context.Context, task *Task) (specs []*batcheslib.ChangesetSpec, found bool, err error) { + // Check if the task is cached. + cacheKey := task.cacheKey() var result execution.Result result, found, err = c.cache.Get(ctx, cacheKey) @@ -183,24 +192,16 @@ func (c *Coordinator) setCachedStepResults(ctx context.Context, task *Task) erro for i := len(task.Steps) - 1; i > -1; i-- { key := cache.StepsCacheKey{ExecutionKey: task.cacheKey(), StepIndex: i} - // If we need to clear the cache, we optimistically try this for every - // step. - if c.opts.ClearCache { - if err := c.cache.Clear(ctx, key); err != nil { - return errors.Wrapf(err, "clearing cache for step %d in %q", i, task.Repository.Name) - } - } else { - result, found, err := c.cache.GetStepResult(ctx, key) - if err != nil { - return errors.Wrapf(err, "checking for cached diff for step %d", i) - } + result, found, err := c.cache.GetStepResult(ctx, key) + if err != nil { + return errors.Wrapf(err, "checking for cached diff for step %d", i) + } - // Found a cached result, we're done - if found { - task.CachedResultFound = true - task.CachedResult = result - return nil - } + // Found a cached result, we're done + if found { + task.CachedResultFound = true + task.CachedResult = result + return nil } } From 471adc4d9737bd4e5d123cc48c9237d17ea909e2 Mon Sep 17 00:00:00 2001 From: Erik Seliger Date: Thu, 4 Nov 2021 16:51:54 +0100 Subject: [PATCH 2/9] Extract import changesets logic into lib and pull out of coordinator --- cmd/src/batch_common.go | 31 +++++++++++------- cmd/src/batch_exec.go | 2 -- internal/batches/executor/coordinator.go | 41 +++--------------------- internal/batches/service/service.go | 18 ++++++++++- 4 files changed, 41 insertions(+), 51 deletions(-) diff --git a/cmd/src/batch_common.go b/cmd/src/batch_common.go index 4296011f4b..33ebbd3d66 100644 --- a/cmd/src/batch_common.go +++ b/cmd/src/batch_common.go @@ -292,16 +292,15 @@ func executeBatchSpec(ctx context.Context, ui ui.ExecUI, opts executeBatchSpecOp // EXECUTION OF TASKS coord := svc.NewCoordinator(executor.NewCoordinatorOpts{ - Creator: workspaceCreator, - CacheDir: opts.flags.cacheDir, - Cache: executor.NewDiskCache(opts.flags.cacheDir), - SkipErrors: opts.flags.skipErrors, - CleanArchives: opts.flags.cleanArchives, - Parallelism: opts.flags.parallelism, - Timeout: opts.flags.timeout, - KeepLogs: opts.flags.keepLogs, - TempDir: opts.flags.tempDir, - ImportChangesets: true, + Creator: workspaceCreator, + CacheDir: opts.flags.cacheDir, + Cache: executor.NewDiskCache(opts.flags.cacheDir), + SkipErrors: opts.flags.skipErrors, + CleanArchives: opts.flags.cleanArchives, + Parallelism: opts.flags.parallelism, + Timeout: opts.flags.timeout, + KeepLogs: opts.flags.keepLogs, + TempDir: opts.flags.tempDir, }) ui.CheckingCache() @@ -322,7 +321,16 @@ func executeBatchSpec(ctx context.Context, ui ui.ExecUI, opts executeBatchSpecOp ui.CheckingCacheSuccess(len(specs), len(uncachedTasks)) taskExecUI := ui.ExecutingTasks(*verbose, opts.flags.parallelism) - freshSpecs, logFiles, err := coord.Execute(ctx, uncachedTasks, batchSpec, taskExecUI) + freshSpecs, logFiles, execErr := coord.Execute(ctx, uncachedTasks, batchSpec, taskExecUI) + // Add external changeset specs. + importedSpecs, importErr := svc.CreateImportChangesetSpecs(ctx, batchSpec) + err = nil + if execErr != nil { + err = multierror.Append(err, execErr) + } + if importErr != nil { + err = multierror.Append(err, importErr) + } if err != nil && !opts.flags.skipErrors { return err } @@ -344,6 +352,7 @@ func executeBatchSpec(ctx context.Context, ui ui.ExecUI, opts executeBatchSpecOp } specs = append(specs, freshSpecs...) + specs = append(specs, importedSpecs...) err = svc.ValidateChangesetSpecs(repos, specs) if err != nil { diff --git a/cmd/src/batch_exec.go b/cmd/src/batch_exec.go index 1f83c8e8f9..834a815232 100644 --- a/cmd/src/batch_exec.go +++ b/cmd/src/batch_exec.go @@ -157,8 +157,6 @@ func executeBatchSpecInWorkspaces(ctx context.Context, ui *ui.JSONLines, opts ex Timeout: opts.flags.timeout, KeepLogs: opts.flags.keepLogs, TempDir: opts.flags.tempDir, - // Do not import changesets in `src batch exec` - ImportChangesets: false, }) ui.CheckingCache() diff --git a/internal/batches/executor/coordinator.go b/internal/batches/executor/coordinator.go index be1280756b..3c5f91570b 100644 --- a/internal/batches/executor/coordinator.go +++ b/internal/batches/executor/coordinator.go @@ -41,11 +41,10 @@ type imageEnsurer func(ctx context.Context, name string) (docker.Image, error) type NewCoordinatorOpts struct { // Dependencies - ResolveRepoName repoNameResolver - EnsureImage imageEnsurer - Creator workspace.Creator - Client api.Client - Cache cache.Cache + EnsureImage imageEnsurer + Creator workspace.Creator + Client api.Client + Cache cache.Cache // Everything that follows are either command-line flags or features. @@ -57,10 +56,6 @@ type NewCoordinatorOpts struct { // Used by batcheslib.BuildChangesetSpecs Features batches.FeatureFlags - // When using `src batch exec` in SSBC we don't want to evaluate the - // `importChangesets`. - ImportChangesets bool - CleanArchives bool Parallelism int Timeout time.Duration @@ -282,33 +277,5 @@ func (c *Coordinator) Execute(ctx context.Context, tasks []*Task, spec *batchesl specs = append(specs, taskSpecs...) } - // Add external changeset specs. - if c.opts.ImportChangesets { - for _, ic := range spec.ImportChangesets { - repo, err := c.opts.ResolveRepoName(ctx, ic.Repository) - if err != nil { - wrapped := errors.Wrapf(err, "resolving repository name %q", ic.Repository) - if c.opts.SkipErrors { - errs = multierror.Append(errs, wrapped) - continue - } else { - return nil, nil, wrapped - } - } - - for _, id := range ic.ExternalIDs { - sid, err := batcheslib.ParseChangesetSpecExternalID(id) - if err != nil { - return nil, nil, err - } - - specs = append(specs, &batcheslib.ChangesetSpec{ - BaseRepository: repo.ID, - ExternalID: sid, - }) - } - } - } - return specs, c.logManager.LogFiles(), errs.ErrorOrNil() } diff --git a/internal/batches/service/service.go b/internal/batches/service/service.go index fa6fb99fe8..231fa1c711 100644 --- a/internal/batches/service/service.go +++ b/internal/batches/service/service.go @@ -12,6 +12,7 @@ import ( "strings" "github.com/cockroachdb/errors" + "github.com/hashicorp/go-multierror" batcheslib "github.com/sourcegraph/sourcegraph/lib/batches" @@ -199,7 +200,6 @@ func (svc *Service) BuildTasks(ctx context.Context, spec *batcheslib.BatchSpec, } func (svc *Service) NewCoordinator(opts executor.NewCoordinatorOpts) *executor.Coordinator { - opts.ResolveRepoName = svc.resolveRepositoryName opts.Client = svc.client opts.Features = svc.features opts.EnsureImage = svc.EnsureImage @@ -207,6 +207,22 @@ func (svc *Service) NewCoordinator(opts executor.NewCoordinatorOpts) *executor.C return executor.NewCoordinator(opts) } +func (svc *Service) CreateImportChangesetSpecs(ctx context.Context, batchSpec *batcheslib.BatchSpec) ([]*batcheslib.ChangesetSpec, error) { + return batcheslib.BuildImportChangesetSpecs(ctx, batchSpec.ImportChangesets, func(ctx context.Context, repoNames []string) (_ map[string]string, errs error) { + repoNameIDs := map[string]string{} + for _, name := range repoNames { + repo, err := svc.resolveRepositoryName(ctx, name) + if err != nil { + wrapped := errors.Wrapf(err, "resolving repository name %q", name) + errs = multierror.Append(errs, wrapped) + continue + } + repoNameIDs[name] = repo.ID + } + return repoNameIDs, errs + }) +} + // ValidateChangesetSpecs validates that among all branch changesets there are no // duplicates in branch names in a single repo. func (svc *Service) ValidateChangesetSpecs(repos []*graphql.Repository, specs []*batcheslib.ChangesetSpec) error { From 65e5a081bd7daa93de1440eba9c1e2e493b40ac3 Mon Sep 17 00:00:00 2001 From: Erik Seliger Date: Thu, 4 Nov 2021 16:53:55 +0100 Subject: [PATCH 3/9] Combine all cache checks in CheckCache --- internal/batches/executor/coordinator.go | 16 +++++++--------- 1 file changed, 7 insertions(+), 9 deletions(-) diff --git a/internal/batches/executor/coordinator.go b/internal/batches/executor/coordinator.go index 3c5f91570b..c3dd8d06a3 100644 --- a/internal/batches/executor/coordinator.go +++ b/internal/batches/executor/coordinator.go @@ -134,6 +134,12 @@ func (c *Coordinator) checkCacheForTask(ctx context.Context, task *Task) (specs } if !found { + // If we are here, that means we didn't find anything in the cache for the + // complete task. So, what if we have cached results for the steps? + if err := c.loadCachedStepResults(ctx, task); err != nil { + return specs, false, err + } + return specs, false, nil } @@ -181,7 +187,7 @@ func (c Coordinator) buildChangesetSpecs(task *Task, result execution.Result) ([ }) } -func (c *Coordinator) setCachedStepResults(ctx context.Context, task *Task) error { +func (c *Coordinator) loadCachedStepResults(ctx context.Context, task *Task) error { // We start at the back so that we can find the _last_ cached step, // then restart execution on the following step. for i := len(task.Steps) - 1; i > -1; i-- { @@ -246,14 +252,6 @@ func (c *Coordinator) Execute(ctx context.Context, tasks []*Task, spec *batchesl errs *multierror.Error ) - // If we are here, that means we didn't find anything in the cache for the - // complete task. So, what if we have cached results for the steps? - for _, t := range tasks { - if err := c.setCachedStepResults(ctx, t); err != nil { - return nil, nil, err - } - } - ui.Start(tasks) // Run executor From 9d9fab86ba938fbcb5fd09591725b7f6e31c54dc Mon Sep 17 00:00:00 2001 From: Erik Seliger Date: Thu, 4 Nov 2021 16:55:41 +0100 Subject: [PATCH 4/9] Pull archive fetcher init out of coordinator --- internal/batches/executor/coordinator.go | 13 ++++++------- internal/batches/service/service.go | 3 ++- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/internal/batches/executor/coordinator.go b/internal/batches/executor/coordinator.go index c3dd8d06a3..7659421f22 100644 --- a/internal/batches/executor/coordinator.go +++ b/internal/batches/executor/coordinator.go @@ -11,7 +11,6 @@ import ( "github.com/sourcegraph/sourcegraph/lib/batches/execution" "github.com/sourcegraph/sourcegraph/lib/batches/execution/cache" - "github.com/sourcegraph/src-cli/internal/api" "github.com/sourcegraph/src-cli/internal/batches" "github.com/sourcegraph/src-cli/internal/batches/docker" "github.com/sourcegraph/src-cli/internal/batches/graphql" @@ -41,10 +40,10 @@ type imageEnsurer func(ctx context.Context, name string) (docker.Image, error) type NewCoordinatorOpts struct { // Dependencies - EnsureImage imageEnsurer - Creator workspace.Creator - Client api.Client - Cache cache.Cache + EnsureImage imageEnsurer + Creator workspace.Creator + Cache cache.Cache + RepoArchiveRegistry repozip.ArchiveRegistry // Everything that follows are either command-line flags or features. @@ -67,7 +66,7 @@ func NewCoordinator(opts NewCoordinatorOpts) *Coordinator { logManager := log.NewManager(opts.TempDir, opts.KeepLogs) exec := newExecutor(newExecutorOpts{ - RepoArchiveRegistry: repozip.NewArchiveRegistry(opts.Client, opts.CacheDir, opts.CleanArchives), + RepoArchiveRegistry: opts.RepoArchiveRegistry, EnsureImage: opts.EnsureImage, Creator: opts.Creator, Logger: logManager, @@ -113,7 +112,7 @@ func (c *Coordinator) ClearCache(ctx context.Context, tasks []*Task) error { return errors.Wrapf(err, "clearing cache for %q", task.Repository.Name) } for i := len(task.Steps) - 1; i > -1; i-- { - key := StepsCacheKey{Task: task, StepIndex: i} + key := cache.StepsCacheKey{ExecutionKey: task.cacheKey(), StepIndex: i} if err := c.cache.Clear(ctx, key); err != nil { return errors.Wrapf(err, "clearing cache for step %d in %q", i, task.Repository.Name) diff --git a/internal/batches/service/service.go b/internal/batches/service/service.go index 231fa1c711..f75495d80d 100644 --- a/internal/batches/service/service.go +++ b/internal/batches/service/service.go @@ -21,6 +21,7 @@ import ( "github.com/sourcegraph/src-cli/internal/batches/docker" "github.com/sourcegraph/src-cli/internal/batches/executor" "github.com/sourcegraph/src-cli/internal/batches/graphql" + "github.com/sourcegraph/src-cli/internal/batches/repozip" ) type Service struct { @@ -200,7 +201,7 @@ func (svc *Service) BuildTasks(ctx context.Context, spec *batcheslib.BatchSpec, } func (svc *Service) NewCoordinator(opts executor.NewCoordinatorOpts) *executor.Coordinator { - opts.Client = svc.client + opts.RepoArchiveRegistry = repozip.NewArchiveRegistry(svc.client, opts.CacheDir, opts.CleanArchives) opts.Features = svc.features opts.EnsureImage = svc.EnsureImage From 6247156730fc2456998edd2754f0bbd92fd278ac Mon Sep 17 00:00:00 2001 From: Erik Seliger Date: Fri, 5 Nov 2021 15:01:39 +0100 Subject: [PATCH 5/9] Update lib --- go.mod | 2 +- go.sum | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/go.mod b/go.mod index df14ebc5e4..99ad7ca421 100644 --- a/go.mod +++ b/go.mod @@ -20,7 +20,7 @@ require ( github.com/pkg/browser v0.0.0-20180916011732-0a3d74bf9ce4 github.com/sourcegraph/go-diff v0.6.1 github.com/sourcegraph/jsonx v0.0.0-20200629203448-1a936bd500cf - github.com/sourcegraph/sourcegraph/lib v0.0.0-20211104160022-5499420c85c9 + github.com/sourcegraph/sourcegraph/lib v0.0.0-20211105135902-84f3062edeeb github.com/ssor/bom v0.0.0-20170718123548-6386211fdfcf // indirect github.com/xeipuuv/gojsonpointer v0.0.0-20190905194746-02993c407bfb // indirect golang.org/x/net v0.0.0-20210614182718-04defd469f4e diff --git a/go.sum b/go.sum index 27a4ef1523..4d1bbc3413 100644 --- a/go.sum +++ b/go.sum @@ -258,8 +258,8 @@ github.com/sourcegraph/go-diff v0.6.1 h1:hmA1LzxW0n1c3Q4YbrFgg4P99GSnebYa3x8gr0H github.com/sourcegraph/go-diff v0.6.1/go.mod h1:iBszgVvyxdc8SFZ7gm69go2KDdt3ag071iBaWPF6cjs= github.com/sourcegraph/jsonx v0.0.0-20200629203448-1a936bd500cf h1:oAdWFqhStsWiiMP/vkkHiMXqFXzl1XfUNOdxKJbd6bI= github.com/sourcegraph/jsonx v0.0.0-20200629203448-1a936bd500cf/go.mod h1:ppFaPm6kpcHnZGqQTFhUIAQRIEhdQDWP1PCv4/ON354= -github.com/sourcegraph/sourcegraph/lib v0.0.0-20211104160022-5499420c85c9 h1:b56HdWLb6D2h0D70l1fonoB4m1pItue+og8fFxTlaWc= -github.com/sourcegraph/sourcegraph/lib v0.0.0-20211104160022-5499420c85c9/go.mod h1:oriyPo0GiQg2oIAjaKAuaNwxiuSmscMVJGfV38ONvqQ= +github.com/sourcegraph/sourcegraph/lib v0.0.0-20211105135902-84f3062edeeb h1:Eyk3R0Ek0erMsfqevv8rFCipBK6GyXgxTP1fBbaF5n4= +github.com/sourcegraph/sourcegraph/lib v0.0.0-20211105135902-84f3062edeeb/go.mod h1:oriyPo0GiQg2oIAjaKAuaNwxiuSmscMVJGfV38ONvqQ= github.com/sourcegraph/yaml v1.0.1-0.20200714132230-56936252f152 h1:z/MpntplPaW6QW95pzcAR/72Z5TWDyDnSo0EOcyij9o= github.com/sourcegraph/yaml v1.0.1-0.20200714132230-56936252f152/go.mod h1:GIjDIg/heH5DOkXY3YJ/wNhfHsQHoXGjl8G8amsYQ1I= github.com/spf13/afero v1.1.2/go.mod h1:j4pytiNVoe2o6bmDsKpLACNPDBIoEAkihy7loJ1B0CQ= From c48850ea79f24204a724c8c6445cb2147174e472 Mon Sep 17 00:00:00 2001 From: Erik Seliger Date: Fri, 5 Nov 2021 15:24:39 +0100 Subject: [PATCH 6/9] Fix test --- internal/batches/executor/coordinator_test.go | 68 ++++--------------- 1 file changed, 12 insertions(+), 56 deletions(-) diff --git a/internal/batches/executor/coordinator_test.go b/internal/batches/executor/coordinator_test.go index 2cac0e1e8c..4b9ca5e752 100644 --- a/internal/batches/executor/coordinator_test.go +++ b/internal/batches/executor/coordinator_test.go @@ -351,60 +351,6 @@ func TestCoordinator_Execute(t *testing.T) { } } -func TestCoordinator_Execute_ImportChangesets(t *testing.T) { - - logManager := mock.LogNoOpManager{} - ui := newDummyTaskExecutionUI() - cache := newInMemoryExecutionCache() - - repoName := "github.com/testing/test-repo" - repoID := "graphql-id:999" - - repoNameResolver := func(ctx context.Context, name string) (*graphql.Repository, error) { - if name != repoName { - t.Fatalf("wrong repo name: %s", name) - } - return &graphql.Repository{ID: repoID, Name: repoName}, nil - } - - opts := NewCoordinatorOpts{Features: featuresAllEnabled(), ResolveRepoName: repoNameResolver} - - batchSpec := &batcheslib.BatchSpec{ - Name: "my-batch-change", - Description: "the description", - ChangesetTemplate: testChangesetTemplate, - ImportChangesets: []batcheslib.ImportChangeset{ - {Repository: repoName, ExternalIDs: []interface{}{500, 600, 700}}, - }, - } - - t.Run("importChangesets:true", func(t *testing.T) { - opts.ImportChangesets = true - coord := Coordinator{cache: cache, exec: &dummyExecutor{}, logManager: logManager, opts: opts} - - specs, _, err := coord.Execute(context.Background(), []*Task{}, batchSpec, ui) - if err != nil { - t.Fatalf("unexpected error: %s", err) - } - if len(specs) != len(batchSpec.ImportChangesets[0].ExternalIDs) { - t.Fatalf("wrong number of imported changesets: %d", len(specs)) - } - }) - - t.Run("importChangesets:false", func(t *testing.T) { - opts.ImportChangesets = false - coord := Coordinator{cache: cache, exec: &dummyExecutor{}, logManager: logManager, opts: opts} - - specs, _, err := coord.Execute(context.Background(), []*Task{}, batchSpec, ui) - if err != nil { - t.Fatalf("unexpected error: %s", err) - } - if len(specs) != 0 { - t.Fatalf("wrong number of imported changesets: %d", len(specs)) - } - }) -} - func TestCoordinator_Execute_StepCaching(t *testing.T) { // Setup dependencies cache := newInMemoryExecutionCache() @@ -475,7 +421,9 @@ func TestCoordinator_Execute_StepCaching(t *testing.T) { task.CachedResultFound = false // Now we execute the spec with -clear-cache: - coord.opts.ClearCache = true + if err := coord.ClearCache(context.Background(), []*Task{task}); err != nil { + t.Fatal(err) + } // We don't want any cached results set on the task: execAndEnsure(t, coord, executor, task, assertNoCachedResult(t)) // Cache should have the same number of entries: the cached step results should @@ -496,12 +444,20 @@ func execAndEnsure(t *testing.T, coord *Coordinator, exec *dummyExecutor, task * // Setup the callback exec.startCb = cb + // Check cache + uncached, cachedSpecs, err := coord.CheckCache(context.Background(), []*Task{task}) + if err != nil { + t.Fatal(err) + } + // Execute - specs, _, err := coord.Execute(context.Background(), []*Task{task}, batchSpec, newDummyTaskExecutionUI()) + freshSpecs, _, err := coord.Execute(context.Background(), uncached, batchSpec, newDummyTaskExecutionUI()) if err != nil { t.Fatalf("execution of task failed: %s", err) } + specs := append(cachedSpecs, freshSpecs...) + // Sanity check, because we're not interested in the specs if have, want := len(specs), 1; have != want { t.Fatalf("Wrong number of specs. want=%d, have=%d", want, have) From 402e7e479e7211349a3419908d8d5c015580a0a5 Mon Sep 17 00:00:00 2001 From: Erik Seliger Date: Fri, 5 Nov 2021 15:32:26 +0100 Subject: [PATCH 7/9] Remove unused type --- internal/batches/executor/coordinator.go | 2 -- 1 file changed, 2 deletions(-) diff --git a/internal/batches/executor/coordinator.go b/internal/batches/executor/coordinator.go index 7659421f22..77412943bf 100644 --- a/internal/batches/executor/coordinator.go +++ b/internal/batches/executor/coordinator.go @@ -13,7 +13,6 @@ import ( "github.com/sourcegraph/src-cli/internal/batches" "github.com/sourcegraph/src-cli/internal/batches/docker" - "github.com/sourcegraph/src-cli/internal/batches/graphql" "github.com/sourcegraph/src-cli/internal/batches/log" "github.com/sourcegraph/src-cli/internal/batches/repozip" "github.com/sourcegraph/src-cli/internal/batches/workspace" @@ -35,7 +34,6 @@ type Coordinator struct { logManager log.LogManager } -type repoNameResolver func(ctx context.Context, name string) (*graphql.Repository, error) type imageEnsurer func(ctx context.Context, name string) (docker.Image, error) type NewCoordinatorOpts struct { From 33466ec955fe56a4e0ec5448316dd61d4560cbda Mon Sep 17 00:00:00 2001 From: Erik Seliger Date: Tue, 9 Nov 2021 16:54:30 +0100 Subject: [PATCH 8/9] Upgrade lib --- go.mod | 18 +++++++++--------- go.sum | 55 ++++++++++++++++++++++++++++++------------------------- 2 files changed, 39 insertions(+), 34 deletions(-) diff --git a/go.mod b/go.mod index 99ad7ca421..78a8d68fd9 100644 --- a/go.mod +++ b/go.mod @@ -13,17 +13,17 @@ require ( github.com/google/go-cmp v0.5.6 github.com/hashicorp/go-multierror v1.1.1 github.com/jig/teereadcloser v0.0.0-20181016160506-953720c48e05 - github.com/json-iterator/go v1.1.11 + github.com/json-iterator/go v1.1.12 github.com/kballard/go-shellquote v0.0.0-20180428030007-95032a82bc51 - github.com/mattn/go-isatty v0.0.12 + github.com/mattn/go-isatty v0.0.14 github.com/neelance/parallel v0.0.0-20160708114440-4de9ce63d14c github.com/pkg/browser v0.0.0-20180916011732-0a3d74bf9ce4 github.com/sourcegraph/go-diff v0.6.1 github.com/sourcegraph/jsonx v0.0.0-20200629203448-1a936bd500cf - github.com/sourcegraph/sourcegraph/lib v0.0.0-20211105135902-84f3062edeeb + github.com/sourcegraph/sourcegraph/lib v0.0.0-20211109155204-31a95b8405e0 github.com/ssor/bom v0.0.0-20170718123548-6386211fdfcf // indirect github.com/xeipuuv/gojsonpointer v0.0.0-20190905194746-02993c407bfb // indirect - golang.org/x/net v0.0.0-20210614182718-04defd469f4e + golang.org/x/net v0.0.0-20210805182204-aaa1db679c0d gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b jaytaylor.com/html2text v0.0.0-20200412013138-3577fbdbcff7 ) @@ -35,21 +35,21 @@ require ( github.com/ghodss/yaml v1.0.0 // indirect github.com/gogo/protobuf v1.3.2 // indirect github.com/hashicorp/errwrap v1.1.0 // indirect - github.com/klauspost/compress v1.12.2 // indirect + github.com/klauspost/compress v1.13.6 // indirect github.com/klauspost/pgzip v1.2.5 // indirect github.com/kr/pretty v0.3.0 // indirect github.com/kr/text v0.2.0 // indirect - github.com/mattn/go-runewidth v0.0.12 // indirect + github.com/mattn/go-runewidth v0.0.13 // indirect github.com/moby/term v0.0.0-20210619224110-3f7ff695adc6 // indirect github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect - github.com/modern-go/reflect2 v1.0.1 // indirect + github.com/modern-go/reflect2 v1.0.2 // indirect github.com/olekukonko/tablewriter v0.0.5 // indirect github.com/pkg/errors v0.9.1 // indirect - github.com/rivo/uniseg v0.1.0 // indirect + github.com/rivo/uniseg v0.2.0 // indirect github.com/rogpeppe/go-internal v1.8.0 // indirect github.com/xeipuuv/gojsonreference v0.0.0-20180127040603-bd5ef7bd5415 // indirect github.com/xeipuuv/gojsonschema v1.2.0 // indirect - golang.org/x/sys v0.0.0-20210616094352-59db8d763f22 // indirect + golang.org/x/sys v0.0.0-20211109065445-02f5c0300f6e // indirect golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1 // indirect gopkg.in/yaml.v2 v2.4.0 // indirect ) diff --git a/go.sum b/go.sum index 4d1bbc3413..8b06310922 100644 --- a/go.sum +++ b/go.sum @@ -14,6 +14,7 @@ github.com/ajg/form v1.5.1/go.mod h1:uL1WgH+h2mgNtvBq0339dVnzXdBETtL2LeUXaIv25UY github.com/alecthomas/kingpin v2.2.6+incompatible/go.mod h1:59OFYbFVLKQKq+mqrL6Rw5bR0c3ACQaawgXx0QYndlE= github.com/alecthomas/template v0.0.0-20190718012654-fb15b899a751/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= github.com/alecthomas/units v0.0.0-20210208195552-ff826a37aa15/go.mod h1:OMCwj8VM1Kc9e19TLln2VL61YJF0x1XFtfdL4JdbSyE= +github.com/alecthomas/units v0.0.0-20210927113745-59d0afb8317a/go.mod h1:OMCwj8VM1Kc9e19TLln2VL61YJF0x1XFtfdL4JdbSyE= github.com/armon/consul-api v0.0.0-20180202201655-eb2c6b5be1b6/go.mod h1:grANhF5doyWs3UAsr3K4I6qtAmlQcZDesFNEHPZAzj8= github.com/aymerick/raymond v2.0.3-0.20180322193309-b565731e1464+incompatible/go.mod h1:osfaiScAUVup+UC9Nfq76eWqDhXlp+4UYaA8uhTBO6g= github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= @@ -53,7 +54,6 @@ github.com/dineshappavoo/basex v0.0.0-20170425072625-481a6f6dc663 h1:fctNkSsavbX github.com/dineshappavoo/basex v0.0.0-20170425072625-481a6f6dc663/go.mod h1:Kad2hux31v/IyD4Rf4wAwIyK48995rs3qAl9IUAhc2k= github.com/dustin/go-humanize v1.0.0 h1:VSnTsYCnlFHaM2/igO1h6X3HA71jcobQuxemgkq4zYo= github.com/dustin/go-humanize v1.0.0/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25KnS6fMYU6eOk= -github.com/efritz/pentimento v0.0.0-20190429011147-ade47d831101/go.mod h1:5ALWO82UZwfAtNRUtwzsWimcrcuYzyieTyyXOXrP6EQ= github.com/eknkc/amber v0.0.0-20171010120322-cdade1c07385/go.mod h1:0vRUJqYpeSZifjYj7uP3BG/gKcuzL9xWVV/Y+cK33KM= github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= @@ -62,7 +62,7 @@ github.com/envoyproxy/go-control-plane v0.9.9-0.20210217033140-668b12f5399d/go.m github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= github.com/etcd-io/bbolt v1.3.3/go.mod h1:ZF2nL25h33cCyBtcyWeZ2/I3HQOfTP+0PIEvHjkjCrw= github.com/fasthttp-contrib/websocket v0.0.0-20160511215533-1f3b11f56072/go.mod h1:duJ4Jxv5lDcvg4QuQr0oowTf7dz4/CR8NtyCooz9HL8= -github.com/fatih/color v1.11.0/go.mod h1:ELkj/draVOlAH/xkhN6mQ50Qd0MPOk5AAr3maGEBuJM= +github.com/fatih/color v1.13.0/go.mod h1:kLAiJbzzSOZDVNGyDpeOxJ47H46qBXwg5ILebYFFOfk= github.com/fatih/structs v1.1.0/go.mod h1:9NiDSp5zOcgEDl+j00MP/WkGVPOlPRLejGD8Ga6PJ7M= github.com/flosch/pongo2 v0.0.0-20190707114632-bbf5a6c351f4/go.mod h1:T9YF2M40nIgbVgp3rreNmTged+9HrbNTIQf1PsaIiTA= github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo= @@ -74,7 +74,7 @@ github.com/go-check/check v0.0.0-20180628173108-788fd7840127/go.mod h1:9ES+weclK github.com/go-errors/errors v1.0.1 h1:LUHzmkK3GUKUrL/1gfBUxAHzcev3apQlezX/+O7ma6w= github.com/go-errors/errors v1.0.1/go.mod h1:f4zRHt4oKfwPJE5k8C9vpYG+aDHdBFUsgrm6/TyX73Q= github.com/go-martini/martini v0.0.0-20170121215854-22fa46961aab/go.mod h1:/P9AEU963A2AYjv4d1V5eVL1CQbEJq6aCNHDDjibzu8= -github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY= +github.com/go-stack/stack v1.8.1/go.mod h1:dcoOX6HbPZSZptuspn9bctJ+N/CnF5gGygcUP3XYfe4= github.com/go-task/slim-sprig v0.0.0-20210107165309-348f09dbbbc0/go.mod h1:fyg7847qk6SyHyPtNmDHnmrv/HOrqktSC+C9fM+CJOE= github.com/gobwas/glob v0.2.3 h1:A4xDbljILXROh+kObIiy5kIaPYD8e96x1tgBhUI5J+Y= github.com/gobwas/glob v0.2.3/go.mod h1:d3Ez4x06l9bZtSvzIay5+Yzi0fmZzPgnTbPcKjJAkT8= @@ -103,7 +103,6 @@ github.com/golang/protobuf v1.4.1/go.mod h1:U8fpvMrcmy5pZrNK1lt4xCsGvpyWQ/VVv6QD github.com/golang/protobuf v1.4.2/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI= github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk= github.com/golang/protobuf v1.5.2/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY= -github.com/golang/snappy v0.0.3/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= github.com/gomodule/redigo v1.7.1-0.20190724094224-574c33c3df38/go.mod h1:B4C85qUVwatsJoIUNIfCRsp7qO0iAmpGFZ4EELWSbC4= github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M= github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= @@ -123,7 +122,6 @@ github.com/gorilla/websocket v1.4.0/go.mod h1:E7qHFY5m1UJ88s3WnNqhKjPHQ0heANvMoA github.com/hashicorp/errwrap v1.0.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4= github.com/hashicorp/errwrap v1.1.0 h1:OxrOeh75EUXMY8TBjag2fzXGZ40LB6IKw45YeGUDY2I= github.com/hashicorp/errwrap v1.1.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4= -github.com/hashicorp/go-multierror v1.1.0/go.mod h1:spPvp8C1qA32ftKqdAHm4hHTbPw+vmowP0z+KUhOZdA= github.com/hashicorp/go-multierror v1.1.1 h1:H5DkEtf6CXdFp0N0Em5UCwQpXMWke8IA0+lD48awMYo= github.com/hashicorp/go-multierror v1.1.1/go.mod h1:iw975J/qwKPdAO1clOe2L8331t/9/fmwbPZ6JB6eMoM= github.com/hashicorp/go-version v1.2.0/go.mod h1:fltr4n8CU8Ke44wwGCBoEymUuxUHl09ZGVZPK5anwXA= @@ -145,8 +143,8 @@ github.com/iris-contrib/schema v0.0.1/go.mod h1:urYA3uvUNG1TIIjOSCzHr9/LmbQo8LrO github.com/jig/teereadcloser v0.0.0-20181016160506-953720c48e05 h1:dSwwtWuwMyarzsbVWOq4QJ8xVy9wgcNomvWyGtrKe+E= github.com/jig/teereadcloser v0.0.0-20181016160506-953720c48e05/go.mod h1:sRUFlj+HCejvoCRpuhU0EYnNw5FG+YJpz8UFfCf0F2U= github.com/json-iterator/go v1.1.6/go.mod h1:+SdeFBvtyEkXs7REEP0seUULqWtbJapLOCVDaaPEHmU= -github.com/json-iterator/go v1.1.11 h1:uVUAXhF2To8cbw/3xN3pxj6kk7TYKs98NIrTqPlMWAQ= -github.com/json-iterator/go v1.1.11/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= +github.com/json-iterator/go v1.1.12 h1:PV8peI4a0ysnczrg+LtxykD8LfKY9ML6u2jnxaEnrnM= +github.com/json-iterator/go v1.1.12/go.mod h1:e30LSqwooZae/UwlEbR2852Gd8hjQvJoHmT4TnhNGBo= github.com/jtolds/gls v4.20.0+incompatible/go.mod h1:QJZ7F/aHp+rZTRtaJ1ow/lLfFfVYBRgL+9YlvaHOwJU= github.com/juju/errors v0.0.0-20181118221551-089d3ea4e4d5/go.mod h1:W54LbzXuIE0boCoNJfwqpmkKJ1O4TCTZMetAt6jGk7Q= github.com/juju/loggo v0.0.0-20180524022052-584905176618/go.mod h1:vgyd7OREkbtVEN/8IXZe5Ooef3LQePvuBm9UWj6ZL8U= @@ -163,8 +161,8 @@ github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= github.com/klauspost/compress v1.8.2/go.mod h1:RyIbtBH6LamlWaDj8nUwkbUhJ87Yi3uG0guNDohfE1A= github.com/klauspost/compress v1.9.0/go.mod h1:RyIbtBH6LamlWaDj8nUwkbUhJ87Yi3uG0guNDohfE1A= -github.com/klauspost/compress v1.12.2 h1:2KCfW3I9M7nSc5wOqXAlW2v2U6v+w6cbjvbfp+OykW8= -github.com/klauspost/compress v1.12.2/go.mod h1:8dP1Hq4DHOhN9w426knH3Rhby4rFm6D8eO+e+Dq5Gzg= +github.com/klauspost/compress v1.13.6 h1:P76CopJELS0TiO2mebmnzgWaajssP/EszplttgQxcgc= +github.com/klauspost/compress v1.13.6/go.mod h1:/3/Vjq9QcHkK5uEr5lBEmyoZ1iFhe47etQ6QUkpK6sk= github.com/klauspost/cpuid v1.2.1/go.mod h1:Pj4uuM528wm8OyEC2QMXAi2YiTZ96dNQPGgoMS4s3ek= github.com/klauspost/pgzip v1.2.5 h1:qnWYvvKqedOF2ulHpMG72XQol4ILEJ8k2wwRl/Km8oE= github.com/klauspost/pgzip v1.2.5/go.mod h1:Ch1tH69qFZu15pkjo5kYi6mth2Zzwzt50oCQKQE9RUs= @@ -180,15 +178,17 @@ github.com/labstack/echo/v4 v4.1.11/go.mod h1:i541M3Fj6f76NZtHSj7TXnyM8n2gaodfvf github.com/labstack/gommon v0.3.0/go.mod h1:MULnywXg0yavhxWKc+lOruYdAhDwPK9wf0OL7NoOu+k= github.com/magiconair/properties v1.8.0/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ= github.com/mattn/go-colorable v0.1.2/go.mod h1:U0ppj6V5qS13XJ6of8GYAs25YV2eR4EVcfRqFIhoBtE= -github.com/mattn/go-colorable v0.1.8/go.mod h1:u6P/XSegPjTcexA+o6vUJrdnUu04hMope9wVRipJSqc= +github.com/mattn/go-colorable v0.1.9/go.mod h1:u6P/XSegPjTcexA+o6vUJrdnUu04hMope9wVRipJSqc= +github.com/mattn/go-colorable v0.1.11/go.mod h1:u5H1YNBxpqRaxsYJYSkiCWKzEfiAb1Gb520KVy5xxl4= github.com/mattn/go-isatty v0.0.7/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hdxcsrc5s= github.com/mattn/go-isatty v0.0.8/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hdxcsrc5s= github.com/mattn/go-isatty v0.0.9/go.mod h1:YNRxwqDuOph6SZLI9vUUz6OYw3QyUt7WiY2yME+cCiQ= -github.com/mattn/go-isatty v0.0.12 h1:wuysRhFDzyxgEmMf5xjvJ2M9dZoWAXNNr5LSBS7uHXY= github.com/mattn/go-isatty v0.0.12/go.mod h1:cbi8OIDigv2wuxKPP5vlRcQ1OAZbq2CE4Kysco4FUpU= +github.com/mattn/go-isatty v0.0.14 h1:yVuAays6BHfxijgZPzw+3Zlu5yQgKGP2/hcQbHb7S9Y= +github.com/mattn/go-isatty v0.0.14/go.mod h1:7GGIvUiUoEMVVmxf/4nioHXj79iQHKdU27kJ6hsGG94= github.com/mattn/go-runewidth v0.0.9/go.mod h1:H031xJmbD/WCDINGzjvQ9THkh0rPKHF+m2gUSrubnMI= -github.com/mattn/go-runewidth v0.0.12 h1:Y41i/hVW3Pgwr8gV+J23B9YEY0zxjptBuCWEaxmAOow= -github.com/mattn/go-runewidth v0.0.12/go.mod h1:RAqKPSqVFrSLVXbA8x7dzmKdmGzieGRCM46jaSJTDAk= +github.com/mattn/go-runewidth v0.0.13 h1:lTGmDsbAYt5DmK6OnoV7EuIF1wEIFAcxld6ypU4OSgU= +github.com/mattn/go-runewidth v0.0.13/go.mod h1:Jdepj2loyihRzMpdS35Xk/zdY8IAYHsh153qUoGf23w= github.com/mattn/goveralls v0.0.2/go.mod h1:8d1ZMHsd7fW6IRPKQh46F2WRpyib5/X4FOpevwGNQEw= github.com/mediocregopher/mediocre-go-lib v0.0.0-20181029021733-cb65787f37ed/go.mod h1:dSsfyI2zABAdhcbvkXqgxOxrCsbYeHCPgrZkku60dSg= github.com/mediocregopher/radix/v3 v3.3.0/go.mod h1:EmfVyvspXz1uZEyPBMyGK+kjWiKQGvsUt6O3Pj+LDCQ= @@ -205,9 +205,9 @@ github.com/moby/term v0.0.0-20210619224110-3f7ff695adc6/go.mod h1:E2VnQOmVuvZB6U github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd h1:TRLaZ9cD/w8PVh93nsPXa1VrQ6jlwL5oN8l14QlcNfg= github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= -github.com/modern-go/reflect2 v0.0.0-20180701023420-4b7aa43c6742/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0= -github.com/modern-go/reflect2 v1.0.1 h1:9f412s+6RmYXLWZSEzVVgPGK7C2PphHj5RJrvfx9AWI= github.com/modern-go/reflect2 v1.0.1/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0= +github.com/modern-go/reflect2 v1.0.2 h1:xBagoLtFs94CBntxluKeaWgTMpvLxC4ur3nMaC9Gz0M= +github.com/modern-go/reflect2 v1.0.2/go.mod h1:yWuevngMOJpCy52FWWMvUC8ws7m/LJsjYzDa0/r8luk= github.com/moul/http2curl v1.0.0/go.mod h1:8UbvGypXm98wA/IqH45anm5Y2Z6ep6O31QGOAZ3H0fQ= github.com/nats-io/nats.go v1.8.1/go.mod h1:BrFz9vVn0fU3AcH9Vn4Kd7W0NpJ651tD5omQ3M8LwxM= github.com/nats-io/nkeys v0.0.2/go.mod h1:dab7URMsZm6Z/jp9Z5UGa87Uutgc2mVpXLC4B7TDb/4= @@ -238,8 +238,8 @@ github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINE github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= -github.com/rivo/uniseg v0.1.0 h1:+2KBaVoUmb9XzDsrx/Ct0W/EYOSFf/nWTauy++DprtY= -github.com/rivo/uniseg v0.1.0/go.mod h1:J6wj4VEh+S6ZtnVlnTBMWIodfgj8LQOQFoIToxlJtxc= +github.com/rivo/uniseg v0.2.0 h1:S1pD9weZBuJdFmowNwbpi7BJ8TNftyUImj/0WQi72jY= +github.com/rivo/uniseg v0.2.0/go.mod h1:J6wj4VEh+S6ZtnVlnTBMWIodfgj8LQOQFoIToxlJtxc= github.com/rogpeppe/go-internal v1.6.1/go.mod h1:xXDCJY+GAPziupqXw64V24skbSoqbTEfhy4qGm1nDQc= github.com/rogpeppe/go-internal v1.6.2/go.mod h1:xXDCJY+GAPziupqXw64V24skbSoqbTEfhy4qGm1nDQc= github.com/rogpeppe/go-internal v1.8.0 h1:FCbCCtXNOY3UtUuHUYaghJg4y7Fd14rXifAYUAtL9R8= @@ -258,8 +258,8 @@ github.com/sourcegraph/go-diff v0.6.1 h1:hmA1LzxW0n1c3Q4YbrFgg4P99GSnebYa3x8gr0H github.com/sourcegraph/go-diff v0.6.1/go.mod h1:iBszgVvyxdc8SFZ7gm69go2KDdt3ag071iBaWPF6cjs= github.com/sourcegraph/jsonx v0.0.0-20200629203448-1a936bd500cf h1:oAdWFqhStsWiiMP/vkkHiMXqFXzl1XfUNOdxKJbd6bI= github.com/sourcegraph/jsonx v0.0.0-20200629203448-1a936bd500cf/go.mod h1:ppFaPm6kpcHnZGqQTFhUIAQRIEhdQDWP1PCv4/ON354= -github.com/sourcegraph/sourcegraph/lib v0.0.0-20211105135902-84f3062edeeb h1:Eyk3R0Ek0erMsfqevv8rFCipBK6GyXgxTP1fBbaF5n4= -github.com/sourcegraph/sourcegraph/lib v0.0.0-20211105135902-84f3062edeeb/go.mod h1:oriyPo0GiQg2oIAjaKAuaNwxiuSmscMVJGfV38ONvqQ= +github.com/sourcegraph/sourcegraph/lib v0.0.0-20211109155204-31a95b8405e0 h1:NaYWQFsArbbSysPHyPC0jChFqlrQg01pVz5ej5X393Q= +github.com/sourcegraph/sourcegraph/lib v0.0.0-20211109155204-31a95b8405e0/go.mod h1:4WdX5odo9YL0GD0Wg9OZJJtIJIn1jIsh+UWrQ4MEcaw= github.com/sourcegraph/yaml v1.0.1-0.20200714132230-56936252f152 h1:z/MpntplPaW6QW95pzcAR/72Z5TWDyDnSo0EOcyij9o= github.com/sourcegraph/yaml v1.0.1-0.20200714132230-56936252f152/go.mod h1:GIjDIg/heH5DOkXY3YJ/wNhfHsQHoXGjl8G8amsYQ1I= github.com/spf13/afero v1.1.2/go.mod h1:j4pytiNVoe2o6bmDsKpLACNPDBIoEAkihy7loJ1B0CQ= @@ -300,9 +300,9 @@ github.com/yudai/pp v2.0.1+incompatible/go.mod h1:PuxR/8QJ7cyCkFp/aUDS+JY727OFEZ github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.3.5/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k= +github.com/yuin/goldmark v1.4.0/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k= golang.org/x/crypto v0.0.0-20181203042331-505ab145d0a9/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= -golang.org/x/crypto v0.0.0-20190426145343-a29dc8fdc734/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20190701094942-4def268fd1a4/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= @@ -317,6 +317,7 @@ golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.4.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.4.1/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.4.2/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= +golang.org/x/mod v0.5.1/go.mod h1:5OXOZSfqPIIbmVBIIKWRFfZjPR0E5r58TLhUjH0a2Ro= golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= @@ -325,7 +326,6 @@ golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73r golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= golang.org/x/net v0.0.0-20190327091125-710a502c58a2/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= -golang.org/x/net v0.0.0-20190424112056-4829fb13d2c6/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= golang.org/x/net v0.0.0-20190503192946-f4e77d36d62c/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20190827160401-ba9fcec4b297/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= @@ -334,8 +334,9 @@ golang.org/x/net v0.0.0-20200520004742-59133d7f0dd7/go.mod h1:qpuaurCH72eLCgpAm/ golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4/go.mod h1:p54w0d4576C0XHj96bSt6lcn1PtDYWL6XObtHCRCNQM= golang.org/x/net v0.0.0-20210428140749-89ef3d95e781/go.mod h1:OJAsFXCWl8Ukc7SiCT/9KSuxbyM7479/AVlXFRxuMCk= -golang.org/x/net v0.0.0-20210614182718-04defd469f4e h1:XpT3nA5TvE525Ne3hInMh6+GETgn27Zfm9dxsThnX2Q= golang.org/x/net v0.0.0-20210614182718-04defd469f4e/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= +golang.org/x/net v0.0.0-20210805182204-aaa1db679c0d h1:20cMwl2fHAzkJMEA+8J4JgqBQcQGzbisXo31MIeenXI= +golang.org/x/net v0.0.0-20210805182204-aaa1db679c0d/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= @@ -350,7 +351,6 @@ golang.org/x/sys v0.0.0-20181205085412-a5c9d58dba9a/go.mod h1:STP8DvDyc/dI5b8T5h golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190222072716-a9d3bda3a223/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190428183149-804c0c7841b5/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190626221950-04f50cda93cb/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190813064441-fde4db37ae7a/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190904154756-749cb33beabd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= @@ -369,8 +369,12 @@ golang.org/x/sys v0.0.0-20210330210617-4fbd30eecc44/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210510120138-977fb7262007/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210611083646-a4fc73990273/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20210616094352-59db8d763f22 h1:RqytpXGR1iVNX7psjB3ff8y7sNFinVFvkx1c8SjBkio= golang.org/x/sys v0.0.0-20210616094352-59db8d763f22/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20210630005230-0f9fa26af87c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20210809222454-d867a43fc93e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20210927094055-39ccf1dd6fa6/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20211109065445-02f5c0300f6e h1:i6Vklmyu+fZMFYpum+sR4ZWABGW7MyIxfJZXYvcnbns= +golang.org/x/sys v0.0.0-20211109065445-02f5c0300f6e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk= @@ -385,7 +389,6 @@ golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3 golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= golang.org/x/tools v0.0.0-20190327201419-c70d86f8b7cf/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= golang.org/x/tools v0.0.0-20190328211700-ab21143f2384/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= -golang.org/x/tools v0.0.0-20190428024724-550556f78a90/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= golang.org/x/tools v0.0.0-20190624222133-a101b041ded4/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= @@ -397,6 +400,7 @@ golang.org/x/tools v0.0.0-20210101214203-2dba1e4ea05c/go.mod h1:emZCQorbCU4vsT4f golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/tools v0.1.0/go.mod h1:xkSsbof2nBLbhDlRMhhhyNLN/zl3eTqcnHD5viDpcZ0= golang.org/x/tools v0.1.3/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= +golang.org/x/tools v0.1.7/go.mod h1:LGqMHiF4EqQNHR1JncWGqT5BVaXmza+X+BDGol+dOxo= golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= @@ -453,3 +457,4 @@ jaytaylor.com/html2text v0.0.0-20200412013138-3577fbdbcff7 h1:mub0MmFLOn8XLikZOA jaytaylor.com/html2text v0.0.0-20200412013138-3577fbdbcff7/go.mod h1:OxvTsCwKosqQ1q7B+8FwXqg4rKZ/UG9dUW+g/VL2xH4= mvdan.cc/gofumpt v0.0.0-20210107193838-d24d34e18d44/go.mod h1:yXG1r1WqZVKWbVRtBWKWX9+CxGYfA51nSomhM0woR48= mvdan.cc/gofumpt v0.1.0/go.mod h1:yXG1r1WqZVKWbVRtBWKWX9+CxGYfA51nSomhM0woR48= +mvdan.cc/gofumpt v0.1.1/go.mod h1:yXG1r1WqZVKWbVRtBWKWX9+CxGYfA51nSomhM0woR48= From 8c0a399e6b90aa167593f8374faf181b07c0c877 Mon Sep 17 00:00:00 2001 From: Thorsten Ball Date: Wed, 10 Nov 2021 10:59:21 +0100 Subject: [PATCH 9/9] Update error check --- cmd/src/batch_common.go | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/cmd/src/batch_common.go b/cmd/src/batch_common.go index 33ebbd3d66..9f47520ca3 100644 --- a/cmd/src/batch_common.go +++ b/cmd/src/batch_common.go @@ -324,13 +324,14 @@ func executeBatchSpec(ctx context.Context, ui ui.ExecUI, opts executeBatchSpecOp freshSpecs, logFiles, execErr := coord.Execute(ctx, uncachedTasks, batchSpec, taskExecUI) // Add external changeset specs. importedSpecs, importErr := svc.CreateImportChangesetSpecs(ctx, batchSpec) - err = nil + var errs *multierror.Error if execErr != nil { err = multierror.Append(err, execErr) } if importErr != nil { err = multierror.Append(err, importErr) } + err = errs.ErrorOrNil() if err != nil && !opts.flags.skipErrors { return err }