From f366d6b8c195a3c40ee619272dc1e0cd0193b73f Mon Sep 17 00:00:00 2001 From: Pierre-Olivier Mercier Date: Wed, 14 Jun 2023 17:24:15 +0200 Subject: [PATCH] sync: Handle repochecker-ack.txt in exercice directory --- admin/api/sync.go | 17 ++++++++--------- admin/sync/exceptions.go | 18 +++++++++++++++++- admin/sync/exercices.go | 4 ++-- admin/sync/themes.go | 2 +- 4 files changed, 28 insertions(+), 13 deletions(-) diff --git a/admin/api/sync.go b/admin/api/sync.go index 6483a249..0484738b 100644 --- a/admin/api/sync.go +++ b/admin/api/sync.go @@ -59,7 +59,7 @@ func declareSyncRoutes(router *gin.RouterGroup) { apiSyncDeepRoutes.POST("", func(c *gin.Context) { theme := c.MustGet("theme").(*fic.Theme) - exceptions := sync.LoadException(sync.GlobalImporter, theme) + exceptions := sync.LoadThemeException(sync.GlobalImporter, theme) var st []string for _, se := range sync.SyncThemeDeep(sync.GlobalImporter, theme, 0, 250, exceptions) { @@ -140,7 +140,7 @@ func declareSyncRoutes(router *gin.RouterGroup) { func declareSyncExercicesRoutes(router *gin.RouterGroup) { router.POST("/exercices", func(c *gin.Context) { theme := c.MustGet("theme").(*fic.Theme) - exceptions := sync.LoadException(sync.GlobalImporter, theme) + exceptions := sync.LoadThemeException(sync.GlobalImporter, theme) c.JSON(http.StatusOK, flatifySyncErrors(sync.SyncExercices(sync.GlobalImporter, theme, exceptions))) }) @@ -148,11 +148,10 @@ func declareSyncExercicesRoutes(router *gin.RouterGroup) { apiSyncExercicesRoutes.Use(ExerciceHandler) apiSyncExercicesRoutes.POST("", func(c *gin.Context) { theme := c.MustGet("theme").(*fic.Theme) - - exceptions := sync.LoadException(sync.GlobalImporter, theme) - exercice := c.MustGet("exercice").(*fic.Exercice) + exceptions := sync.LoadExerciceException(sync.GlobalImporter, theme, exercice, nil) + _, _, errs := sync.SyncExercice(sync.GlobalImporter, theme, exercice.Path, nil, exceptions) c.JSON(http.StatusOK, flatifySyncErrors(errs)) }) @@ -160,7 +159,7 @@ func declareSyncExercicesRoutes(router *gin.RouterGroup) { exercice := c.MustGet("exercice").(*fic.Exercice) theme := c.MustGet("theme").(*fic.Theme) - exceptions := sync.LoadException(sync.GlobalImporter, theme) + exceptions := sync.LoadExerciceException(sync.GlobalImporter, theme, exercice, nil) c.JSON(http.StatusOK, sync.SyncExerciceFiles(sync.GlobalImporter, exercice, exceptions)) }) @@ -183,7 +182,7 @@ func declareSyncExercicesRoutes(router *gin.RouterGroup) { exercice := c.MustGet("exercice").(*fic.Exercice) theme := c.MustGet("theme").(*fic.Theme) - exceptions := sync.LoadException(sync.GlobalImporter, theme) + exceptions := sync.LoadExerciceException(sync.GlobalImporter, theme, exercice, nil) _, errs := sync.SyncExerciceHints(sync.GlobalImporter, exercice, sync.ExerciceFlagsMap(sync.GlobalImporter, exercice), exceptions) c.JSON(http.StatusOK, flatifySyncErrors(errs)) @@ -192,7 +191,7 @@ func declareSyncExercicesRoutes(router *gin.RouterGroup) { exercice := c.MustGet("exercice").(*fic.Exercice) theme := c.MustGet("theme").(*fic.Theme) - exceptions := sync.LoadException(sync.GlobalImporter, theme) + exceptions := sync.LoadExerciceException(sync.GlobalImporter, theme, exercice, nil) _, errs := sync.SyncExerciceFlags(sync.GlobalImporter, exercice, exceptions) _, herrs := sync.SyncExerciceHints(sync.GlobalImporter, exercice, sync.ExerciceFlagsMap(sync.GlobalImporter, exercice), exceptions) c.JSON(http.StatusOK, flatifySyncErrors(append(errs, herrs...))) @@ -283,7 +282,7 @@ func autoSync(c *gin.Context) { } } - exceptions := sync.LoadException(sync.GlobalImporter, theTheme) + exceptions := sync.LoadThemeException(sync.GlobalImporter, theTheme) var st []string for _, se := range sync.SyncThemeDeep(sync.GlobalImporter, theTheme, 0, 250, exceptions) { diff --git a/admin/sync/exceptions.go b/admin/sync/exceptions.go index 31d3f07e..22941047 100644 --- a/admin/sync/exceptions.go +++ b/admin/sync/exceptions.go @@ -87,7 +87,7 @@ func (c *CheckExceptions) HasException(ref string) bool { return false } -func LoadException(i Importer, th *fic.Theme) (exceptions *CheckExceptions) { +func LoadThemeException(i Importer, th *fic.Theme) (exceptions *CheckExceptions) { if fexcept, err := GetFileContent(i, filepath.Join(th.Path, "repochecker-ack.txt")); err == nil { exceptions = &CheckExceptions{} for n, line := range strings.Split(fexcept, "\n") { @@ -97,3 +97,19 @@ func LoadException(i Importer, th *fic.Theme) (exceptions *CheckExceptions) { return } + +func LoadExerciceException(i Importer, th *fic.Theme, e *fic.Exercice, th_exceptions *CheckExceptions) (exceptions *CheckExceptions) { + if th_exceptions == nil { + th_exceptions = LoadThemeException(i, th) + } + + exceptions = th_exceptions.GetExerciceExceptions(e) + + if fexcept, err := GetFileContent(i, filepath.Join(e.Path, "repochecker-ack.txt")); err == nil { + for n, line := range strings.Split(fexcept, "\n") { + (*exceptions)[strings.TrimSpace(line)] = fmt.Sprintf("repochecker-ack.txt:%d", n+1) + } + } + + return +} diff --git a/admin/sync/exercices.go b/admin/sync/exercices.go index a4a64eb4..1b017daf 100644 --- a/admin/sync/exercices.go +++ b/admin/sync/exercices.go @@ -105,8 +105,8 @@ func BuildExercice(i Importer, theme *fic.Theme, epath string, dmap *map[int64]* return nil, p, eid, edir, errs } - // Limit exceptions to this exercice - exceptions = exceptions.GetExerciceExceptions(e) + // Get exceptions + exceptions = LoadExerciceException(i, theme, e, exceptions) //log.Printf("Kept repochecker exceptions for this exercice: %v", exceptions) e.Language = theme.Language diff --git a/admin/sync/themes.go b/admin/sync/themes.go index 537e4609..a4ab9bda 100644 --- a/admin/sync/themes.go +++ b/admin/sync/themes.go @@ -110,7 +110,7 @@ func BuildTheme(i Importer, tdir string) (th *fic.Theme, exceptions *CheckExcept th.Path = tdir // Get exceptions - exceptions = LoadException(i, th) + exceptions = LoadThemeException(i, th) // Overwrite language if language, err := GetFileContent(i, path.Join(tdir, "language.txt")); err == nil {