sync: Don't pull repo when doing synchronization. Do it only on auto-sync

This commit is contained in:
nemunaire 2023-05-06 02:27:46 +02:00
parent ac64db277a
commit 5fb85c22dc
5 changed files with 17 additions and 16 deletions

View File

@ -205,6 +205,14 @@ func declareSyncExercicesRoutes(router *gin.RouterGroup) {
func autoSync(c *gin.Context) {
p := strings.Split(strings.TrimPrefix(c.Params.ByName("p"), "/"), "/")
if !IsProductionEnv {
if err := sync.GlobalImporter.Sync(); err != nil {
log.Println("Unable to sync.GI.Sync:", err.Error())
c.AbortWithStatusJSON(http.StatusInternalServerError, gin.H{"errmsg": "Unable to perform the pull."})
return
}
}
themes, err := fic.GetThemes()
if err != nil {
log.Println("Unable to GetThemes:", err.Error())

View File

@ -21,17 +21,11 @@ var oneThemeDeepSync sync.Mutex
// DeepSyncProgress expose the progression of the depp synchronization (0 = 0%, 255 = 100%).
var DeepSyncProgress uint8
// avoidImporterSync checks if Sync should be called or not.
func avoidImporterSync() bool {
return DeepSyncProgress > 1 && DeepSyncProgress < 255
}
type SyncReport struct {
DateStart time.Time `json:"_started"`
DateEnd time.Time `json:"_ended"`
DateUpdated []time.Time `json:"_updated"`
Regeneration []string `json:"_regeneration"`
SyncError error `json:"_sync,omitempty"`
SyncId string `json:"_id,omitempty"`
ThemesSync []string `json:"_themes,omitempty"`
Themes map[string][]string `json:"themes"`
@ -116,10 +110,6 @@ func SyncDeep(i Importer) (errs SyncReport) {
startTime := time.Now()
if err := i.Sync(); err != nil {
errs.SyncError = err
}
errs.DateStart = startTime
exceptions, sterrs := SyncThemes(i)
for _, sterr := range sterrs {
@ -206,12 +196,6 @@ func SyncThemeDeep(i Importer, theme *fic.Theme, tid int, themeStep uint8, excep
oneThemeDeepSync.Lock()
defer oneThemeDeepSync.Unlock()
if !avoidImporterSync() {
if err := i.Sync(); err != nil {
errs = append(errs, err)
}
}
DeepSyncProgress = 3 + uint8(tid)*themeStep
errs = SyncExercices(i, theme, exceptions)

View File

@ -107,6 +107,9 @@ func (i GitImporter) Init() error {
}
func (i GitImporter) Sync() error {
oneGitPull.Lock()
defer oneGitPull.Unlock()
r, err := git.PlainOpen(i.li.Base)
if err != nil {
return err

View File

@ -5,10 +5,13 @@ import (
"net/url"
"os"
"regexp"
"sync"
)
var gitRemoteRe = regexp.MustCompile(`^(?:(?:git@|https://)([\w.@]+)(?:/|:))((?:[\w-_]+)/(?:[\w-_/]+))(?:.git){0,1}(?:(?:/){0,1})$`)
var oneGitPull sync.Mutex
func countFileInDir(dirname string) (int, error) {
files, err := os.ReadDir(dirname)
if err != nil {

View File

@ -96,6 +96,9 @@ func (i GitImporter) Init() error {
}
func (i GitImporter) Sync() error {
oneGitPull.Lock()
defer oneGitPull.Unlock()
log.Println("Synchronizing local git repository...")
cmdfetch := exec.Command("git", "-C", i.li.Base, "fetch", "origin")
stdout, err := cmdfetch.CombinedOutput()