From a8fa58e1117c0ab81b2a62d1afce6649d8bb3846 Mon Sep 17 00:00:00 2001 From: Pierre-Olivier Mercier Date: Mon, 7 Nov 2022 16:22:16 +0100 Subject: [PATCH] repochecker: Add loop dependency detection --- admin/sync/exercice_keys.go | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/admin/sync/exercice_keys.go b/admin/sync/exercice_keys.go index 1eddb762..6a7a316d 100644 --- a/admin/sync/exercice_keys.go +++ b/admin/sync/exercice_keys.go @@ -506,6 +506,26 @@ func CheckExerciceFlags(i Importer, exercice *fic.Exercice, files []string, exce } } + // Check dependency loop + deps := flag.FlagsDeps + deploppcheck: + for i := 0; i < len(deps); i++ { + if deps[i] == flagid { + errs = append(errs, NewFlagError(exercice, nil, flag.Line, fmt.Errorf("flag dependency loop detected: flag id=%d: depends on itself", flagid))) + break + } + + for _, d := range flags[deps[i]].FlagsDeps { + for _, dd := range deps { + if dd == d { + errs = append(errs, NewFlagError(exercice, nil, flag.Line, fmt.Errorf("flag dependency loop detected: flag id=%d: depends on itself", d))) + break deploppcheck + } + } + deps = append(deps, d) + } + } + // Check dependency to file for _, lf := range flag.FilesDeps { found := false