all repos

mugit @ b4b7c43be595c2df1b72acef421aa8859167f756

馃惍 git server that your cow will love
1 files changed, 12 insertions(+), 12 deletions(-)
mirror: increase amount of workers; small refactoring
Author: Oleksandr Smirnov olexsmir@gmail.com
Committed at: 2026-02-03 17:25:23 +0200
Authored at: 2026-02-03 00:52:40 +0200
Change ID: vuutortzqnwyutlmnzpzsqxrpvslkqru
Parent: 5935eaa
M internal/mirror/mirror.go
路路路
        36
        36
         	ticker := time.NewTicker(interval)

      
        37
        37
         	defer ticker.Stop()

      
        38
        38
         

      
        39
        
        -	if err := w.mirror(ctx); err != nil {

      
        40
        
        -		slog.Error("initial mirror sync failed", "err", err)

      
        41
        
        -	}

      
        42
        
        -

      
        43
        39
         	for {

      
        44
        40
         		select {

      
        45
        41
         		case <-ctx.Done():

      
        46
        42
         			return nil

      
        47
        
        -		case <-ticker.C:

      
        
        43
        +		default:

      
        48
        44
         			if err := w.mirror(ctx); err != nil {

      
        49
        45
         				slog.Error("mirror sync failed", "err", err)

      
        50
        46
         			}

      
        
        47
        +

      
        
        48
        +			<-ticker.C

      
        51
        49
         		}

      
        52
        50
         	}

      
        53
        51
         }

      路路路
        59
        57
         	}

      
        60
        58
         

      
        61
        59
         	var wg sync.WaitGroup

      
        62
        
        -	sem := semaphore.NewWeighted(5)

      
        
        60
        +	sem := semaphore.NewWeighted(10)

      
        63
        61
         	errCh := make(chan error, len(repos))

      
        64
        62
         

      
        65
        63
         	for _, repo := range repos {

      路路路
        75
        73
         			}

      
        76
        74
         		})

      
        77
        75
         	}

      
        
        76
        +

      
        78
        77
         	wg.Wait()

      
        79
        78
         	close(errCh)

      
        80
        79
         

      路路路
        95
        94
         		return err

      
        96
        95
         	}

      
        97
        96
         

      
        98
        
        -	if err := w.isRemoteValid(remoteURL); err != nil {

      
        
        97
        +	if err := w.isSupportedRemote(remoteURL); err != nil {

      
        99
        98
         		slog.Error("mirror: remote is not valid", "repo", name, "err", err)

      
        100
        99
         		return err

      
        101
        100
         	}

      
        102
        101
         

      
        103
        102
         	if w.isRemoteGithub(remoteURL) && w.c.Mirror.GithubToken != "" {

      
        104
        103
         		if err := repo.FetchFromGithubWithToken(w.c.Mirror.GithubToken); err != nil {

      
        105
        
        -			slog.Error("mirror: fetch failed (authorized)", "repo", name, "err", err)

      
        
        104
        +			slog.Error("mirror: fetch failed (github)", "repo", name, "err", err)

      
        106
        105
         			return err

      
        107
        106
         		}

      
        108
        107
         	} else {

      路路路
        133
        132
         		}

      
        134
        133
         

      
        135
        134
         		name := dir.Name()

      
        136
        
        -		repo, err := git.Open(filepath.Join(w.c.Repo.Dir, filepath.Clean(name)), "")

      
        
        135
        +		path := filepath.Join(w.c.Repo.Dir, filepath.Clean(name))

      
        
        136
        +		repo, err := git.Open(path, "")

      
        137
        137
         		if err != nil {

      
        138
        
        -			slog.Debug("skipping non-git directory", "path", name, "err", err)

      
        
        138
        +			slog.Debug("skipping non-git directory", "name", name, "err", err)

      
        139
        139
         			continue

      
        140
        140
         		}

      
        141
        141
         

      
        142
        142
         		isMirror, err := repo.IsMirror()

      
        143
        143
         		if err != nil {

      
        144
        
        -			slog.Debug("skipping non-mirror repo", "path", name, "err", err)

      
        
        144
        +			slog.Debug("skipping non-mirror repo", "name", name, "err", err)

      
        145
        145
         			continue

      
        146
        146
         		}

      
        147
        147
         

      路路路
        153
        153
         	return repos, nil

      
        154
        154
         }

      
        155
        155
         

      
        156
        
        -func (w *Worker) isRemoteValid(remote string) error {

      
        
        156
        +func (w *Worker) isSupportedRemote(remote string) error {

      
        157
        157
         	if !strings.HasPrefix(remote, "http") {

      
        158
        158
         		return fmt.Errorf("only http and https remotes are supported")

      
        159
        159
         	}