aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--golings/cmd/run.go12
-rw-r--r--golings/cmd/verify.go12
-rw-r--r--golings/exercises/runner.go13
3 files changed, 17 insertions, 20 deletions
diff --git a/golings/cmd/run.go b/golings/cmd/run.go
index 4fe2b8b..1efd905 100644
--- a/golings/cmd/run.go
+++ b/golings/cmd/run.go
@@ -34,13 +34,17 @@ func RunCmd(infoFile string) *cobra.Command {
}
}()
- result, err := exercises.Run(args[0], infoFile)
+ exercise, err := exercises.Find(args[0], infoFile)
+ if errors.Is(err, exercises.ErrExerciseNotFound) {
+ color.White("No exercise found for '%s'", args[0])
+ return err
+ }
+
+ result, err := exercise.Run()
spinner.Close()
- if errors.Is(err, exercises.ErrExerciseNotFound) {
- color.White("No exercise found for '%s'", args[0])
- } else if err != nil {
+ if err != nil {
color.Cyan("Failed to compile the exercise %s\n\n", result.Exercise.Path)
color.White("Check the output below: \n\n")
color.Red(result.Err)
diff --git a/golings/cmd/verify.go b/golings/cmd/verify.go
index f713981..a4f6469 100644
--- a/golings/cmd/verify.go
+++ b/golings/cmd/verify.go
@@ -15,14 +15,14 @@ func VerifyCmd(infoFile string) *cobra.Command {
Use: "verify",
Short: "Verify all exercises",
Run: func(cmd *cobra.Command, args []string) {
- exs, err := exercises.List(infoFile)
+ allExercises, err := exercises.List(infoFile)
if err != nil {
color.Red(err.Error())
os.Exit(1)
}
bar := progressbar.NewOptions(
- len(exs),
+ len(allExercises),
progressbar.OptionSetWidth(50),
progressbar.OptionEnableColorCodes(true),
progressbar.OptionSetPredictTime(false),
@@ -41,14 +41,14 @@ func VerifyCmd(infoFile string) *cobra.Command {
os.Exit(1)
}
- for _, e := range exs {
- bar.Describe(fmt.Sprintf("Running %s", e.Name))
- result, _ := exercises.Run(e.Name, "info.toml")
+ for _, exercise := range allExercises {
+ bar.Describe(fmt.Sprintf("Running %s", exercise.Name))
+ result, _ := exercise.Run()
bar.Add(1) // nolint
if result.Err != "" {
fmt.Print("\n\n")
- color.Cyan("Failed to compile the exercise %s\n\n", e.Path)
+ color.Cyan("Failed to compile the exercise %s\n\n", exercise.Path)
color.White("Check the output below: \n\n")
color.Red(result.Err)
color.Red(result.Out)
diff --git a/golings/exercises/runner.go b/golings/exercises/runner.go
index 5db1a48..c9597f6 100644
--- a/golings/exercises/runner.go
+++ b/golings/exercises/runner.go
@@ -12,21 +12,14 @@ type Result struct {
Err string
}
-func Run(name string, infoFile string) (Result, error) {
- exercise, err := Find(name, infoFile)
- if err != nil {
- return Result{}, err
- }
-
- args := BuildArgs(exercise)
+func (e Exercise) Run() (Result, error) {
+ args := BuildArgs(e)
cmd := exec.Command("go", args...)
var stdout, stderr bytes.Buffer
cmd.Stdout = &stdout
cmd.Stderr = &stderr
- err = cmd.Run()
-
- return Result{Exercise: exercise, Out: stdout.String(), Err: stderr.String()}, err
+ return Result{Exercise: e, Out: stdout.String(), Err: stderr.String()}, cmd.Run()
}
func BuildArgs(e Exercise) []string {