예제 #1
0
파일: repo.go 프로젝트: kristofer/gogs
// MirrorRepository creates a mirror repository from source.
func MirrorRepository(repoId int64, userName, repoName, repoPath, url string) error {
	_, stderr, err := com.ExecCmd("git", "clone", "--mirror", url, repoPath)
	if err != nil {
		return errors.New("git clone --mirror: " + stderr)
	}

	if _, err = orm.InsertOne(&Mirror{
		RepoId:     repoId,
		RepoName:   strings.ToLower(userName + "/" + repoName),
		Interval:   24,
		NextUpdate: time.Now().Add(24 * time.Hour),
	}); err != nil {
		return err
	}

	return git.UnpackRefs(repoPath)
}
예제 #2
0
파일: repo.go 프로젝트: JustStone/gogs
// MirrorRepository creates a mirror repository from source.
func MirrorRepository(repoId int64, userName, repoName, repoPath, url string) error {
	// TODO: need timeout.
	_, stderr, err := process.Exec(fmt.Sprintf("MirrorRepository: %s/%s", userName, repoName),
		"git", "clone", "--mirror", url, repoPath)
	if err != nil {
		return errors.New("git clone --mirror: " + stderr)
	}

	if _, err = x.InsertOne(&Mirror{
		RepoId:     repoId,
		RepoName:   strings.ToLower(userName + "/" + repoName),
		Interval:   24,
		NextUpdate: time.Now().Add(24 * time.Hour),
	}); err != nil {
		return err
	}

	return git.UnpackRefs(repoPath)
}
예제 #3
0
파일: repo.go 프로젝트: kristofer/gogs
// MirrorUpdate checks and updates mirror repositories.
func MirrorUpdate() {
	if err := orm.Iterate(new(Mirror), func(idx int, bean interface{}) error {
		m := bean.(*Mirror)
		if m.NextUpdate.After(time.Now()) {
			return nil
		}

		repoPath := filepath.Join(base.RepoRootPath, m.RepoName+".git")
		_, stderr, err := com.ExecCmdDir(repoPath, "git", "remote", "update")
		if err != nil {
			return errors.New("git remote update: " + stderr)
		} else if err = git.UnpackRefs(repoPath); err != nil {
			return err
		}

		m.NextUpdate = time.Now().Add(time.Duration(m.Interval) * time.Hour)
		return UpdateMirror(m)
	}); err != nil {
		log.Error("repo.MirrorUpdate: %v", err)
	}
}
예제 #4
0
파일: repo.go 프로젝트: JustStone/gogs
// MirrorUpdate checks and updates mirror repositories.
func MirrorUpdate() {
	if err := x.Iterate(new(Mirror), func(idx int, bean interface{}) error {
		m := bean.(*Mirror)
		if m.NextUpdate.After(time.Now()) {
			return nil
		}

		// TODO: need timeout.
		repoPath := filepath.Join(setting.RepoRootPath, m.RepoName+".git")
		if _, stderr, err := process.ExecDir(
			repoPath, fmt.Sprintf("MirrorUpdate: %s", repoPath),
			"git", "remote", "update"); err != nil {
			return errors.New("git remote update: " + stderr)
		} else if err = git.UnpackRefs(repoPath); err != nil {
			return errors.New("UnpackRefs: " + err.Error())
		}

		m.NextUpdate = time.Now().Add(time.Duration(m.Interval) * time.Hour)
		return UpdateMirror(m)
	}); err != nil {
		log.Error("repo.MirrorUpdate: %v", err)
	}
}