mirror of
				https://gitee.com/gitea/gitea
				synced 2025-11-04 08:30:25 +08:00 
			
		
		
		
	@@ -120,11 +120,12 @@ func DeleteMirrorByRepoID(repoID int64) error {
 | 
				
			|||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// MirrorsIterate iterates all mirror repositories.
 | 
					// MirrorsIterate iterates all mirror repositories.
 | 
				
			||||||
func MirrorsIterate(f func(idx int, bean interface{}) error) error {
 | 
					func MirrorsIterate(limit int, f func(idx int, bean interface{}) error) error {
 | 
				
			||||||
	return db.GetEngine(db.DefaultContext).
 | 
						return db.GetEngine(db.DefaultContext).
 | 
				
			||||||
		Where("next_update_unix<=?", time.Now().Unix()).
 | 
							Where("next_update_unix<=?", time.Now().Unix()).
 | 
				
			||||||
		And("next_update_unix!=0").
 | 
							And("next_update_unix!=0").
 | 
				
			||||||
		OrderBy("updated_unix ASC").
 | 
							OrderBy("updated_unix ASC").
 | 
				
			||||||
 | 
							Limit(limit).
 | 
				
			||||||
		Iterate(new(Mirror), f)
 | 
							Iterate(new(Mirror), f)
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -101,10 +101,11 @@ func GetPushMirrorsByRepoID(repoID int64) ([]*PushMirror, error) {
 | 
				
			|||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// PushMirrorsIterate iterates all push-mirror repositories.
 | 
					// PushMirrorsIterate iterates all push-mirror repositories.
 | 
				
			||||||
func PushMirrorsIterate(f func(idx int, bean interface{}) error) error {
 | 
					func PushMirrorsIterate(limit int, f func(idx int, bean interface{}) error) error {
 | 
				
			||||||
	return db.GetEngine(db.DefaultContext).
 | 
						return db.GetEngine(db.DefaultContext).
 | 
				
			||||||
		Where("last_update + (`interval` / ?) <= ?", time.Second, time.Now().Unix()).
 | 
							Where("last_update + (`interval` / ?) <= ?", time.Second, time.Now().Unix()).
 | 
				
			||||||
		And("`interval` != 0").
 | 
							And("`interval` != 0").
 | 
				
			||||||
		OrderBy("last_update ASC").
 | 
							OrderBy("last_update ASC").
 | 
				
			||||||
 | 
							Limit(limit).
 | 
				
			||||||
		Iterate(new(PushMirror), f)
 | 
							Iterate(new(PushMirror), f)
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -40,7 +40,7 @@ func TestPushMirrorsIterate(t *testing.T) {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
	time.Sleep(1 * time.Millisecond)
 | 
						time.Sleep(1 * time.Millisecond)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	PushMirrorsIterate(func(idx int, bean interface{}) error {
 | 
						PushMirrorsIterate(1, func(idx int, bean interface{}) error {
 | 
				
			||||||
		m, ok := bean.(*PushMirror)
 | 
							m, ok := bean.(*PushMirror)
 | 
				
			||||||
		assert.True(t, ok)
 | 
							assert.True(t, ok)
 | 
				
			||||||
		assert.Equal(t, "test-1", m.RemoteName)
 | 
							assert.Equal(t, "test-1", m.RemoteName)
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -55,9 +55,7 @@ func Update(ctx context.Context, pullLimit, pushLimit int) error {
 | 
				
			|||||||
	}
 | 
						}
 | 
				
			||||||
	log.Trace("Doing: Update")
 | 
						log.Trace("Doing: Update")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	requested := 0
 | 
						handler := func(idx int, bean interface{}) error {
 | 
				
			||||||
 | 
					 | 
				
			||||||
	handler := func(idx int, bean interface{}, limit int) error {
 | 
					 | 
				
			||||||
		var item SyncRequest
 | 
							var item SyncRequest
 | 
				
			||||||
		var repo *repo_model.Repository
 | 
							var repo *repo_model.Repository
 | 
				
			||||||
		if m, ok := bean.(*repo_model.Mirror); ok {
 | 
							if m, ok := bean.(*repo_model.Mirror); ok {
 | 
				
			||||||
@@ -104,35 +102,35 @@ func Update(ctx context.Context, pullLimit, pushLimit int) error {
 | 
				
			|||||||
			}
 | 
								}
 | 
				
			||||||
			return err
 | 
								return err
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
 | 
					 | 
				
			||||||
		requested++
 | 
					 | 
				
			||||||
		if limit > 0 && requested > limit {
 | 
					 | 
				
			||||||
			return errLimit
 | 
					 | 
				
			||||||
		}
 | 
					 | 
				
			||||||
		return nil
 | 
							return nil
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	pullMirrorsRequested := 0
 | 
						pullMirrorsRequested := 0
 | 
				
			||||||
	if pullLimit != 0 {
 | 
						if pullLimit != 0 {
 | 
				
			||||||
		requested = 0
 | 
							if err := repo_model.MirrorsIterate(pullLimit, func(idx int, bean interface{}) error {
 | 
				
			||||||
		if err := repo_model.MirrorsIterate(func(idx int, bean interface{}) error {
 | 
								if err := handler(idx, bean); err != nil {
 | 
				
			||||||
			return handler(idx, bean, pullLimit)
 | 
									return err
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
								pullMirrorsRequested++
 | 
				
			||||||
 | 
								return nil
 | 
				
			||||||
		}); err != nil && err != errLimit {
 | 
							}); err != nil && err != errLimit {
 | 
				
			||||||
			log.Error("MirrorsIterate: %v", err)
 | 
								log.Error("MirrorsIterate: %v", err)
 | 
				
			||||||
			return err
 | 
								return err
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
		pullMirrorsRequested, requested = requested, 0
 | 
					 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	pushMirrorsRequested := 0
 | 
						pushMirrorsRequested := 0
 | 
				
			||||||
	if pushLimit != 0 {
 | 
						if pushLimit != 0 {
 | 
				
			||||||
		requested = 0
 | 
							if err := repo_model.PushMirrorsIterate(pushLimit, func(idx int, bean interface{}) error {
 | 
				
			||||||
		if err := repo_model.PushMirrorsIterate(func(idx int, bean interface{}) error {
 | 
								if err := handler(idx, bean); err != nil {
 | 
				
			||||||
			return handler(idx, bean, pushLimit)
 | 
									return err
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
								pushMirrorsRequested++
 | 
				
			||||||
 | 
								return nil
 | 
				
			||||||
		}); err != nil && err != errLimit {
 | 
							}); err != nil && err != errLimit {
 | 
				
			||||||
			log.Error("PushMirrorsIterate: %v", err)
 | 
								log.Error("PushMirrorsIterate: %v", err)
 | 
				
			||||||
			return err
 | 
								return err
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
		pushMirrorsRequested, requested = requested, 0
 | 
					 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	log.Trace("Finished: Update: %d pull mirrors and %d push mirrors queued", pullMirrorsRequested, pushMirrorsRequested)
 | 
						log.Trace("Finished: Update: %d pull mirrors and %d push mirrors queued", pullMirrorsRequested, pushMirrorsRequested)
 | 
				
			||||||
	return nil
 | 
						return nil
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user