sync: don't rely on map order to import flags
Sometimes, maps order doesn't match file order. Return flag ID as list to keep the order.
This commit is contained in:
parent
cb7f3326c4
commit
0766fbe480
1 changed files with 53 additions and 47 deletions
|
@ -171,10 +171,10 @@ type importFlag struct {
|
|||
}
|
||||
|
||||
// buildExerciceFlags read challenge.txt and extract all flags.
|
||||
func buildExerciceFlags(i Importer, exercice fic.Exercice) (flags map[int64]importFlag, errs []string) {
|
||||
func buildExerciceFlags(i Importer, exercice fic.Exercice) (flags map[int64]importFlag, flagids []int64, errs []string) {
|
||||
params, gerrs := getExerciceParams(i, exercice)
|
||||
if len(gerrs) > 0 {
|
||||
return flags, gerrs
|
||||
return flags, flagids, gerrs
|
||||
}
|
||||
|
||||
flags = map[int64]importFlag{}
|
||||
|
@ -285,6 +285,8 @@ func buildExerciceFlags(i Importer, exercice fic.Exercice) (flags map[int64]impo
|
|||
}
|
||||
}
|
||||
|
||||
flagids = append(flagids, flag.Id)
|
||||
|
||||
// Read dependency to flag
|
||||
for _, nf := range flag.NeedFlag {
|
||||
if v, ok := flags[flag.Id]; ok {
|
||||
|
@ -307,10 +309,11 @@ func buildExerciceFlags(i Importer, exercice fic.Exercice) (flags map[int64]impo
|
|||
|
||||
// CheckExerciceFlags checks if all flags for the given challenge are correct.
|
||||
func CheckExerciceFlags(i Importer, exercice fic.Exercice, files []fic.EFile) (rf []fic.Flag, errs []string) {
|
||||
flags, berrs := buildExerciceFlags(i, exercice)
|
||||
flags, flagsids, berrs := buildExerciceFlags(i, exercice)
|
||||
errs = append(errs, berrs...)
|
||||
|
||||
for _, flag := range flags {
|
||||
for _, flagid := range flagsids {
|
||||
if flag, ok := flags[flagid]; ok {
|
||||
// Check dependency to flag
|
||||
for _, nf := range flag.FlagsDeps {
|
||||
if _, ok := flags[nf]; !ok {
|
||||
|
@ -334,6 +337,7 @@ func CheckExerciceFlags(i Importer, exercice fic.Exercice, files []fic.EFile) (r
|
|||
|
||||
rf = append(rf, flag.Flag)
|
||||
}
|
||||
}
|
||||
|
||||
return
|
||||
}
|
||||
|
@ -345,13 +349,14 @@ func SyncExerciceFlags(i Importer, exercice fic.Exercice) (errs []string) {
|
|||
} else if _, err := exercice.WipeMCQs(); err != nil {
|
||||
errs = append(errs, err.Error())
|
||||
} else {
|
||||
flags, berrs := buildExerciceFlags(i, exercice)
|
||||
flags, flagids, berrs := buildExerciceFlags(i, exercice)
|
||||
errs = append(errs, berrs...)
|
||||
|
||||
kmap := map[int64]fic.Flag{}
|
||||
|
||||
// Import flags
|
||||
for flagid, flag := range flags {
|
||||
for _, flagid := range flagids {
|
||||
if flag, ok := flags[flagid]; ok {
|
||||
if addedFlag, err := exercice.AddFlag(flag.Flag); err != nil {
|
||||
errs = append(errs, fmt.Sprintf("%q: error flag #%d: %s", path.Base(exercice.Path), flag.Line, err))
|
||||
} else {
|
||||
|
@ -385,6 +390,7 @@ func SyncExerciceFlags(i Importer, exercice fic.Exercice) (errs []string) {
|
|||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return
|
||||
}
|
||||
|
|
Reference in a new issue