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.
|
// 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)
|
params, gerrs := getExerciceParams(i, exercice)
|
||||||
if len(gerrs) > 0 {
|
if len(gerrs) > 0 {
|
||||||
return flags, gerrs
|
return flags, flagids, gerrs
|
||||||
}
|
}
|
||||||
|
|
||||||
flags = map[int64]importFlag{}
|
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
|
// Read dependency to flag
|
||||||
for _, nf := range flag.NeedFlag {
|
for _, nf := range flag.NeedFlag {
|
||||||
if v, ok := flags[flag.Id]; ok {
|
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.
|
// 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) {
|
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...)
|
errs = append(errs, berrs...)
|
||||||
|
|
||||||
for _, flag := range flags {
|
for _, flagid := range flagsids {
|
||||||
|
if flag, ok := flags[flagid]; ok {
|
||||||
// Check dependency to flag
|
// Check dependency to flag
|
||||||
for _, nf := range flag.FlagsDeps {
|
for _, nf := range flag.FlagsDeps {
|
||||||
if _, ok := flags[nf]; !ok {
|
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)
|
rf = append(rf, flag.Flag)
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
@ -345,13 +349,14 @@ func SyncExerciceFlags(i Importer, exercice fic.Exercice) (errs []string) {
|
||||||
} else if _, err := exercice.WipeMCQs(); err != nil {
|
} else if _, err := exercice.WipeMCQs(); err != nil {
|
||||||
errs = append(errs, err.Error())
|
errs = append(errs, err.Error())
|
||||||
} else {
|
} else {
|
||||||
flags, berrs := buildExerciceFlags(i, exercice)
|
flags, flagids, berrs := buildExerciceFlags(i, exercice)
|
||||||
errs = append(errs, berrs...)
|
errs = append(errs, berrs...)
|
||||||
|
|
||||||
kmap := map[int64]fic.Flag{}
|
kmap := map[int64]fic.Flag{}
|
||||||
|
|
||||||
// Import flags
|
// 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 {
|
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))
|
errs = append(errs, fmt.Sprintf("%q: error flag #%d: %s", path.Base(exercice.Path), flag.Line, err))
|
||||||
} else {
|
} else {
|
||||||
|
@ -385,6 +390,7 @@ func SyncExerciceFlags(i Importer, exercice fic.Exercice) (errs []string) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
Reference in a new issue