mirror of
https://github.com/go-gitea/gitea.git
synced 2025-12-13 16:44:09 +01:00
Move some functions to gitrepo package to reduce RepoPath reference directly (#36126)
This commit is contained in:
parent
f25409fab8
commit
d2a372fc59
@ -32,20 +32,6 @@ func GetRawDiff(repo *Repository, commitID string, diffType RawDiffType, writer
|
|||||||
return GetRepoRawDiffForFile(repo, "", commitID, diffType, "", writer)
|
return GetRepoRawDiffForFile(repo, "", commitID, diffType, "", writer)
|
||||||
}
|
}
|
||||||
|
|
||||||
// GetReverseRawDiff dumps the reverse diff results of repository in given commit ID to io.Writer.
|
|
||||||
func GetReverseRawDiff(ctx context.Context, repoPath, commitID string, writer io.Writer) error {
|
|
||||||
stderr := new(bytes.Buffer)
|
|
||||||
if err := gitcmd.NewCommand("show", "--pretty=format:revert %H%n", "-R").
|
|
||||||
AddDynamicArguments(commitID).
|
|
||||||
WithDir(repoPath).
|
|
||||||
WithStdout(writer).
|
|
||||||
WithStderr(stderr).
|
|
||||||
Run(ctx); err != nil {
|
|
||||||
return fmt.Errorf("Run: %w - %s", err, stderr)
|
|
||||||
}
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
// GetRepoRawDiffForFile dumps diff results of file in given commit ID to io.Writer according given repository
|
// GetRepoRawDiffForFile dumps diff results of file in given commit ID to io.Writer according given repository
|
||||||
func GetRepoRawDiffForFile(repo *Repository, startCommit, endCommit string, diffType RawDiffType, file string, writer io.Writer) error {
|
func GetRepoRawDiffForFile(repo *Repository, startCommit, endCommit string, diffType RawDiffType, file string, writer io.Writer) error {
|
||||||
commit, err := repo.GetCommit(endCommit)
|
commit, err := repo.GetCommit(endCommit)
|
||||||
|
|||||||
@ -123,6 +123,8 @@ type CloneRepoOptions struct {
|
|||||||
Depth int
|
Depth int
|
||||||
Filter string
|
Filter string
|
||||||
SkipTLSVerify bool
|
SkipTLSVerify bool
|
||||||
|
SingleBranch bool
|
||||||
|
Env []string
|
||||||
}
|
}
|
||||||
|
|
||||||
// Clone clones original repository to target path.
|
// Clone clones original repository to target path.
|
||||||
@ -157,6 +159,9 @@ func Clone(ctx context.Context, from, to string, opts CloneRepoOptions) error {
|
|||||||
if opts.Filter != "" {
|
if opts.Filter != "" {
|
||||||
cmd.AddArguments("--filter").AddDynamicArguments(opts.Filter)
|
cmd.AddArguments("--filter").AddDynamicArguments(opts.Filter)
|
||||||
}
|
}
|
||||||
|
if opts.SingleBranch {
|
||||||
|
cmd.AddArguments("--single-branch")
|
||||||
|
}
|
||||||
if len(opts.Branch) > 0 {
|
if len(opts.Branch) > 0 {
|
||||||
cmd.AddArguments("-b").AddDynamicArguments(opts.Branch)
|
cmd.AddArguments("-b").AddDynamicArguments(opts.Branch)
|
||||||
}
|
}
|
||||||
@ -167,13 +172,17 @@ func Clone(ctx context.Context, from, to string, opts CloneRepoOptions) error {
|
|||||||
}
|
}
|
||||||
|
|
||||||
envs := os.Environ()
|
envs := os.Environ()
|
||||||
|
if opts.Env != nil {
|
||||||
|
envs = opts.Env
|
||||||
|
} else {
|
||||||
u, err := url.Parse(from)
|
u, err := url.Parse(from)
|
||||||
if err == nil {
|
if err == nil {
|
||||||
envs = proxy.EnvWithProxy(u)
|
envs = proxy.EnvWithProxy(u)
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
stderr := new(bytes.Buffer)
|
stderr := new(bytes.Buffer)
|
||||||
if err = cmd.
|
if err := cmd.
|
||||||
WithTimeout(opts.Timeout).
|
WithTimeout(opts.Timeout).
|
||||||
WithEnv(envs).
|
WithEnv(envs).
|
||||||
WithStdout(io.Discard).
|
WithStdout(io.Discard).
|
||||||
@ -228,14 +237,3 @@ func Push(ctx context.Context, repoPath string, opts PushOptions) error {
|
|||||||
|
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
// GetLatestCommitTime returns time for latest commit in repository (across all branches)
|
|
||||||
func GetLatestCommitTime(ctx context.Context, repoPath string) (time.Time, error) {
|
|
||||||
cmd := gitcmd.NewCommand("for-each-ref", "--sort=-committerdate", BranchPrefix, "--count", "1", "--format=%(committerdate)")
|
|
||||||
stdout, _, err := cmd.WithDir(repoPath).RunStdString(ctx)
|
|
||||||
if err != nil {
|
|
||||||
return time.Time{}, err
|
|
||||||
}
|
|
||||||
commitTime := strings.TrimSpace(stdout)
|
|
||||||
return time.Parse("Mon Jan _2 15:04:05 2006 -0700", commitTime)
|
|
||||||
}
|
|
||||||
|
|||||||
@ -10,16 +10,6 @@ import (
|
|||||||
"github.com/stretchr/testify/assert"
|
"github.com/stretchr/testify/assert"
|
||||||
)
|
)
|
||||||
|
|
||||||
func TestGetLatestCommitTime(t *testing.T) {
|
|
||||||
bareRepo1Path := filepath.Join(testReposDir, "repo1_bare")
|
|
||||||
lct, err := GetLatestCommitTime(t.Context(), bareRepo1Path)
|
|
||||||
assert.NoError(t, err)
|
|
||||||
// Time is Sun Nov 13 16:40:14 2022 +0100
|
|
||||||
// which is the time of commit
|
|
||||||
// ce064814f4a0d337b333e646ece456cd39fab612 (refs/heads/master)
|
|
||||||
assert.EqualValues(t, 1668354014, lct.Unix())
|
|
||||||
}
|
|
||||||
|
|
||||||
func TestRepoIsEmpty(t *testing.T) {
|
func TestRepoIsEmpty(t *testing.T) {
|
||||||
emptyRepo2Path := filepath.Join(testReposDir, "repo2_empty")
|
emptyRepo2Path := filepath.Join(testReposDir, "repo2_empty")
|
||||||
repo, err := OpenRepository(t.Context(), emptyRepo2Path)
|
repo, err := OpenRepository(t.Context(), emptyRepo2Path)
|
||||||
|
|||||||
@ -18,3 +18,7 @@ func CloneExternalRepo(ctx context.Context, fromRemoteURL string, toRepo Reposit
|
|||||||
func CloneRepoToLocal(ctx context.Context, fromRepo Repository, toLocalPath string, opts git.CloneRepoOptions) error {
|
func CloneRepoToLocal(ctx context.Context, fromRepo Repository, toLocalPath string, opts git.CloneRepoOptions) error {
|
||||||
return git.Clone(ctx, repoPath(fromRepo), toLocalPath, opts)
|
return git.Clone(ctx, repoPath(fromRepo), toLocalPath, opts)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func Clone(ctx context.Context, fromRepo, toRepo Repository, opts git.CloneRepoOptions) error {
|
||||||
|
return git.Clone(ctx, repoPath(fromRepo), repoPath(toRepo), opts)
|
||||||
|
}
|
||||||
|
|||||||
@ -7,6 +7,7 @@ import (
|
|||||||
"context"
|
"context"
|
||||||
"strconv"
|
"strconv"
|
||||||
"strings"
|
"strings"
|
||||||
|
"time"
|
||||||
|
|
||||||
"code.gitea.io/gitea/modules/git"
|
"code.gitea.io/gitea/modules/git"
|
||||||
"code.gitea.io/gitea/modules/git/gitcmd"
|
"code.gitea.io/gitea/modules/git/gitcmd"
|
||||||
@ -94,3 +95,18 @@ func AllCommitsCount(ctx context.Context, repo Repository, hidePRRefs bool, file
|
|||||||
|
|
||||||
return strconv.ParseInt(strings.TrimSpace(stdout), 10, 64)
|
return strconv.ParseInt(strings.TrimSpace(stdout), 10, 64)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func GetFullCommitID(ctx context.Context, repo Repository, shortID string) (string, error) {
|
||||||
|
return git.GetFullCommitID(ctx, repoPath(repo), shortID)
|
||||||
|
}
|
||||||
|
|
||||||
|
// GetLatestCommitTime returns time for latest commit in repository (across all branches)
|
||||||
|
func GetLatestCommitTime(ctx context.Context, repo Repository) (time.Time, error) {
|
||||||
|
stdout, err := RunCmdString(ctx, repo,
|
||||||
|
gitcmd.NewCommand("for-each-ref", "--sort=-committerdate", git.BranchPrefix, "--count", "1", "--format=%(committerdate)"))
|
||||||
|
if err != nil {
|
||||||
|
return time.Time{}, err
|
||||||
|
}
|
||||||
|
commitTime := strings.TrimSpace(stdout)
|
||||||
|
return time.Parse("Mon Jan _2 15:04:05 2006 -0700", commitTime)
|
||||||
|
}
|
||||||
|
|||||||
@ -33,3 +33,13 @@ func TestCommitsCountWithoutBase(t *testing.T) {
|
|||||||
assert.NoError(t, err)
|
assert.NoError(t, err)
|
||||||
assert.Equal(t, int64(2), commitsCount)
|
assert.Equal(t, int64(2), commitsCount)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestGetLatestCommitTime(t *testing.T) {
|
||||||
|
bareRepo1 := &mockRepository{path: "repo1_bare"}
|
||||||
|
lct, err := GetLatestCommitTime(t.Context(), bareRepo1)
|
||||||
|
assert.NoError(t, err)
|
||||||
|
// Time is Sun Nov 13 16:40:14 2022 +0100
|
||||||
|
// which is the time of commit
|
||||||
|
// ce064814f4a0d337b333e646ece456cd39fab612 (refs/heads/master)
|
||||||
|
assert.EqualValues(t, 1668354014, lct.Unix())
|
||||||
|
}
|
||||||
|
|||||||
@ -4,8 +4,10 @@
|
|||||||
package gitrepo
|
package gitrepo
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"bytes"
|
||||||
"context"
|
"context"
|
||||||
"fmt"
|
"fmt"
|
||||||
|
"io"
|
||||||
"regexp"
|
"regexp"
|
||||||
"strconv"
|
"strconv"
|
||||||
|
|
||||||
@ -60,3 +62,15 @@ func parseDiffStat(stdout string) (numFiles, totalAdditions, totalDeletions int,
|
|||||||
}
|
}
|
||||||
return numFiles, totalAdditions, totalDeletions, err
|
return numFiles, totalAdditions, totalDeletions, err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// GetReverseRawDiff dumps the reverse diff results of repository in given commit ID to io.Writer.
|
||||||
|
func GetReverseRawDiff(ctx context.Context, repo Repository, commitID string, writer io.Writer) error {
|
||||||
|
stderr := new(bytes.Buffer)
|
||||||
|
if err := RunCmd(ctx, repo, gitcmd.NewCommand("show", "--pretty=format:revert %H%n", "-R").
|
||||||
|
AddDynamicArguments(commitID).
|
||||||
|
WithStdout(writer).
|
||||||
|
WithStderr(stderr)); err != nil {
|
||||||
|
return fmt.Errorf("GetReverseRawDiff: %w - %s", err, stderr)
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|||||||
@ -98,3 +98,23 @@ func UpdateServerInfo(ctx context.Context, repo Repository) error {
|
|||||||
func GetRepoFS(repo Repository) fs.FS {
|
func GetRepoFS(repo Repository) fs.FS {
|
||||||
return os.DirFS(repoPath(repo))
|
return os.DirFS(repoPath(repo))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func IsRepoFileExist(ctx context.Context, repo Repository, relativeFilePath string) (bool, error) {
|
||||||
|
absoluteFilePath := filepath.Join(repoPath(repo), relativeFilePath)
|
||||||
|
return util.IsExist(absoluteFilePath)
|
||||||
|
}
|
||||||
|
|
||||||
|
func IsRepoDirExist(ctx context.Context, repo Repository, relativeDirPath string) (bool, error) {
|
||||||
|
absoluteDirPath := filepath.Join(repoPath(repo), relativeDirPath)
|
||||||
|
return util.IsDir(absoluteDirPath)
|
||||||
|
}
|
||||||
|
|
||||||
|
func RemoveRepoFile(ctx context.Context, repo Repository, relativeFilePath string) error {
|
||||||
|
absoluteFilePath := filepath.Join(repoPath(repo), relativeFilePath)
|
||||||
|
return util.Remove(absoluteFilePath)
|
||||||
|
}
|
||||||
|
|
||||||
|
func CreateRepoFile(ctx context.Context, repo Repository, relativeFilePath string) (io.WriteCloser, error) {
|
||||||
|
absoluteFilePath := filepath.Join(repoPath(repo), relativeFilePath)
|
||||||
|
return os.Create(absoluteFilePath)
|
||||||
|
}
|
||||||
|
|||||||
@ -9,6 +9,7 @@ import (
|
|||||||
"strings"
|
"strings"
|
||||||
|
|
||||||
"code.gitea.io/gitea/modules/git"
|
"code.gitea.io/gitea/modules/git"
|
||||||
|
"code.gitea.io/gitea/modules/gitrepo"
|
||||||
"code.gitea.io/gitea/modules/util"
|
"code.gitea.io/gitea/modules/util"
|
||||||
"code.gitea.io/gitea/services/context"
|
"code.gitea.io/gitea/services/context"
|
||||||
"code.gitea.io/gitea/services/forms"
|
"code.gitea.io/gitea/services/forms"
|
||||||
@ -66,7 +67,7 @@ func CherryPickPost(ctx *context.Context) {
|
|||||||
// Drop through to the "apply" method
|
// Drop through to the "apply" method
|
||||||
buf := &bytes.Buffer{}
|
buf := &bytes.Buffer{}
|
||||||
if parsed.form.Revert {
|
if parsed.form.Revert {
|
||||||
err = git.GetReverseRawDiff(ctx, ctx.Repo.Repository.RepoPath(), fromCommitID, buf)
|
err = gitrepo.GetReverseRawDiff(ctx, ctx.Repo.Repository, fromCommitID, buf)
|
||||||
} else {
|
} else {
|
||||||
err = git.GetRawDiff(ctx.Repo.GitRepo, fromCommitID, "patch", buf)
|
err = git.GetRawDiff(ctx.Repo.GitRepo, fromCommitID, "patch", buf)
|
||||||
}
|
}
|
||||||
|
|||||||
@ -111,7 +111,7 @@ func NewComment(ctx *context.Context) {
|
|||||||
ctx.ServerError("Unable to load base repo", err)
|
ctx.ServerError("Unable to load base repo", err)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
prHeadCommitID, err := git.GetFullCommitID(ctx, pull.BaseRepo.RepoPath(), prHeadRef)
|
prHeadCommitID, err := gitrepo.GetFullCommitID(ctx, pull.BaseRepo, prHeadRef)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
ctx.ServerError("Get head commit Id of pr fail", err)
|
ctx.ServerError("Get head commit Id of pr fail", err)
|
||||||
return
|
return
|
||||||
@ -128,7 +128,7 @@ func NewComment(ctx *context.Context) {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
headBranchRef := git.RefNameFromBranch(pull.HeadBranch)
|
headBranchRef := git.RefNameFromBranch(pull.HeadBranch)
|
||||||
headBranchCommitID, err := git.GetFullCommitID(ctx, pull.HeadRepo.RepoPath(), headBranchRef.String())
|
headBranchCommitID, err := gitrepo.GetFullCommitID(ctx, pull.HeadRepo, headBranchRef.String())
|
||||||
if err != nil {
|
if err != nil {
|
||||||
ctx.ServerError("Get head commit Id of head branch fail", err)
|
ctx.ServerError("Get head commit Id of head branch fail", err)
|
||||||
return
|
return
|
||||||
|
|||||||
@ -6,9 +6,7 @@ package doctor
|
|||||||
import (
|
import (
|
||||||
"context"
|
"context"
|
||||||
"fmt"
|
"fmt"
|
||||||
"os"
|
|
||||||
"os/exec"
|
"os/exec"
|
||||||
"path/filepath"
|
|
||||||
"strings"
|
"strings"
|
||||||
|
|
||||||
"code.gitea.io/gitea/models"
|
"code.gitea.io/gitea/models"
|
||||||
@ -20,7 +18,6 @@ import (
|
|||||||
"code.gitea.io/gitea/modules/log"
|
"code.gitea.io/gitea/modules/log"
|
||||||
"code.gitea.io/gitea/modules/setting"
|
"code.gitea.io/gitea/modules/setting"
|
||||||
"code.gitea.io/gitea/modules/structs"
|
"code.gitea.io/gitea/modules/structs"
|
||||||
"code.gitea.io/gitea/modules/util"
|
|
||||||
|
|
||||||
lru "github.com/hashicorp/golang-lru/v2"
|
lru "github.com/hashicorp/golang-lru/v2"
|
||||||
"xorm.io/builder"
|
"xorm.io/builder"
|
||||||
@ -142,10 +139,10 @@ func checkDaemonExport(ctx context.Context, logger log.Logger, autofix bool) err
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Create/Remove git-daemon-export-ok for git-daemon...
|
// Create/Remove git-daemon-export-ok for git-daemon...
|
||||||
daemonExportFile := filepath.Join(repo.RepoPath(), `git-daemon-export-ok`)
|
daemonExportFile := `git-daemon-export-ok`
|
||||||
isExist, err := util.IsExist(daemonExportFile)
|
isExist, err := gitrepo.IsRepoFileExist(ctx, repo, daemonExportFile)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Error("Unable to check if %s exists. Error: %v", daemonExportFile, err)
|
log.Error("Unable to check if %s:%s exists. Error: %v", repo.FullName(), daemonExportFile, err)
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
isPublic := !repo.IsPrivate && repo.Owner.Visibility == structs.VisibleTypePublic
|
isPublic := !repo.IsPrivate && repo.Owner.Visibility == structs.VisibleTypePublic
|
||||||
@ -154,12 +151,12 @@ func checkDaemonExport(ctx context.Context, logger log.Logger, autofix bool) err
|
|||||||
numNeedUpdate++
|
numNeedUpdate++
|
||||||
if autofix {
|
if autofix {
|
||||||
if !isPublic && isExist {
|
if !isPublic && isExist {
|
||||||
if err = util.Remove(daemonExportFile); err != nil {
|
if err = gitrepo.RemoveRepoFile(ctx, repo, daemonExportFile); err != nil {
|
||||||
log.Error("Failed to remove %s: %v", daemonExportFile, err)
|
log.Error("Failed to remove %s:%s: %v", repo.FullName(), daemonExportFile, err)
|
||||||
}
|
}
|
||||||
} else if isPublic && !isExist {
|
} else if isPublic && !isExist {
|
||||||
if f, err := os.Create(daemonExportFile); err != nil {
|
if f, err := gitrepo.CreateRepoFile(ctx, repo, daemonExportFile); err != nil {
|
||||||
log.Error("Failed to create %s: %v", daemonExportFile, err)
|
log.Error("Failed to create %s:%s: %v", repo.FullName(), daemonExportFile, err)
|
||||||
} else {
|
} else {
|
||||||
f.Close()
|
f.Close()
|
||||||
}
|
}
|
||||||
@ -190,16 +187,16 @@ func checkCommitGraph(ctx context.Context, logger log.Logger, autofix bool) erro
|
|||||||
|
|
||||||
commitGraphExists := func() (bool, error) {
|
commitGraphExists := func() (bool, error) {
|
||||||
// Check commit-graph exists
|
// Check commit-graph exists
|
||||||
commitGraphFile := filepath.Join(repo.RepoPath(), `objects/info/commit-graph`)
|
commitGraphFile := `objects/info/commit-graph`
|
||||||
isExist, err := util.IsExist(commitGraphFile)
|
isExist, err := gitrepo.IsRepoFileExist(ctx, repo, commitGraphFile)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
logger.Error("Unable to check if %s exists. Error: %v", commitGraphFile, err)
|
logger.Error("Unable to check if %s exists. Error: %v", commitGraphFile, err)
|
||||||
return false, err
|
return false, err
|
||||||
}
|
}
|
||||||
|
|
||||||
if !isExist {
|
if !isExist {
|
||||||
commitGraphsDir := filepath.Join(repo.RepoPath(), `objects/info/commit-graphs`)
|
commitGraphsDir := `objects/info/commit-graphs`
|
||||||
isExist, err = util.IsExist(commitGraphsDir)
|
isExist, err = gitrepo.IsRepoDirExist(ctx, repo, commitGraphsDir)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
logger.Error("Unable to check if %s exists. Error: %v", commitGraphsDir, err)
|
logger.Error("Unable to check if %s exists. Error: %v", commitGraphsDir, err)
|
||||||
return false, err
|
return false, err
|
||||||
|
|||||||
@ -449,7 +449,7 @@ func SyncPullMirror(ctx context.Context, repoID int64) bool {
|
|||||||
log.Error("SyncMirrors [repo_id: %v]: unable to GetMirrorByRepoID: %v", repoID, err)
|
log.Error("SyncMirrors [repo_id: %v]: unable to GetMirrorByRepoID: %v", repoID, err)
|
||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
_ = m.GetRepository(ctx) // force load repository of mirror
|
repo := m.GetRepository(ctx) // force load repository of mirror
|
||||||
|
|
||||||
ctx, _, finished := process.GetManager().AddContext(ctx, fmt.Sprintf("Syncing Mirror %s/%s", m.Repo.OwnerName, m.Repo.Name))
|
ctx, _, finished := process.GetManager().AddContext(ctx, fmt.Sprintf("Syncing Mirror %s/%s", m.Repo.OwnerName, m.Repo.Name))
|
||||||
defer finished()
|
defer finished()
|
||||||
@ -515,12 +515,12 @@ func SyncPullMirror(ctx context.Context, repoID int64) bool {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Push commits
|
// Push commits
|
||||||
oldCommitID, err := git.GetFullCommitID(gitRepo.Ctx, gitRepo.Path, result.oldCommitID)
|
oldCommitID, err := gitrepo.GetFullCommitID(ctx, repo, result.oldCommitID)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Error("SyncMirrors [repo: %-v]: unable to get GetFullCommitID[%s]: %v", m.Repo, result.oldCommitID, err)
|
log.Error("SyncMirrors [repo: %-v]: unable to get GetFullCommitID[%s]: %v", m.Repo, result.oldCommitID, err)
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
newCommitID, err := git.GetFullCommitID(gitRepo.Ctx, gitRepo.Path, result.newCommitID)
|
newCommitID, err := gitrepo.GetFullCommitID(ctx, repo, result.newCommitID)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Error("SyncMirrors [repo: %-v]: unable to get GetFullCommitID [%s]: %v", m.Repo, result.newCommitID, err)
|
log.Error("SyncMirrors [repo: %-v]: unable to get GetFullCommitID [%s]: %v", m.Repo, result.newCommitID, err)
|
||||||
continue
|
continue
|
||||||
@ -560,7 +560,7 @@ func SyncPullMirror(ctx context.Context, repoID int64) bool {
|
|||||||
}
|
}
|
||||||
if !isEmpty {
|
if !isEmpty {
|
||||||
// Get latest commit date and update to current repository updated time
|
// Get latest commit date and update to current repository updated time
|
||||||
commitDate, err := git.GetLatestCommitTime(ctx, m.Repo.RepoPath())
|
commitDate, err := gitrepo.GetLatestCommitTime(ctx, m.Repo)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Error("SyncMirrors [repo: %-v]: unable to GetLatestCommitDate: %v", m.Repo, err)
|
log.Error("SyncMirrors [repo: %-v]: unable to GetLatestCommitDate: %v", m.Repo, err)
|
||||||
return false
|
return false
|
||||||
|
|||||||
@ -295,7 +295,7 @@ func getMergeCommit(ctx context.Context, pr *issues_model.PullRequest) (*git.Com
|
|||||||
// If merge-base successfully exits then prHeadRef is an ancestor of pr.BaseBranch
|
// If merge-base successfully exits then prHeadRef is an ancestor of pr.BaseBranch
|
||||||
|
|
||||||
// Find the head commit id
|
// Find the head commit id
|
||||||
prHeadCommitID, err := git.GetFullCommitID(ctx, pr.BaseRepo.RepoPath(), prHeadRef)
|
prHeadCommitID, err := gitrepo.GetFullCommitID(ctx, pr.BaseRepo, prHeadRef)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, fmt.Errorf("GetFullCommitID(%s) in %s: %w", prHeadRef, pr.BaseRepo.FullName(), err)
|
return nil, fmt.Errorf("GetFullCommitID(%s) in %s: %w", prHeadRef, pr.BaseRepo.FullName(), err)
|
||||||
}
|
}
|
||||||
|
|||||||
@ -48,14 +48,14 @@ func GetCompareInfo(ctx context.Context, baseRepo, headRepo *repo_model.Reposito
|
|||||||
|
|
||||||
compareInfo := new(CompareInfo)
|
compareInfo := new(CompareInfo)
|
||||||
|
|
||||||
compareInfo.HeadCommitID, err = git.GetFullCommitID(ctx, headGitRepo.Path, headBranch)
|
compareInfo.HeadCommitID, err = gitrepo.GetFullCommitID(ctx, headRepo, headBranch)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
compareInfo.HeadCommitID = headBranch
|
compareInfo.HeadCommitID = headBranch
|
||||||
}
|
}
|
||||||
|
|
||||||
compareInfo.MergeBase, remoteBranch, err = headGitRepo.GetMergeBase(tmpRemote, baseBranch, headBranch)
|
compareInfo.MergeBase, remoteBranch, err = headGitRepo.GetMergeBase(tmpRemote, baseBranch, headBranch)
|
||||||
if err == nil {
|
if err == nil {
|
||||||
compareInfo.BaseCommitID, err = git.GetFullCommitID(ctx, headGitRepo.Path, remoteBranch)
|
compareInfo.BaseCommitID, err = gitrepo.GetFullCommitID(ctx, headRepo, remoteBranch)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
compareInfo.BaseCommitID = remoteBranch
|
compareInfo.BaseCommitID = remoteBranch
|
||||||
}
|
}
|
||||||
@ -77,7 +77,7 @@ func GetCompareInfo(ctx context.Context, baseRepo, headRepo *repo_model.Reposito
|
|||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
compareInfo.Commits = []*git.Commit{}
|
compareInfo.Commits = []*git.Commit{}
|
||||||
compareInfo.MergeBase, err = git.GetFullCommitID(ctx, headGitRepo.Path, remoteBranch)
|
compareInfo.MergeBase, err = gitrepo.GetFullCommitID(ctx, headRepo, remoteBranch)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
compareInfo.MergeBase = remoteBranch
|
compareInfo.MergeBase = remoteBranch
|
||||||
}
|
}
|
||||||
|
|||||||
@ -69,9 +69,10 @@ func prepareRepoCommit(ctx context.Context, repo *repo_model.Repository, tmpDir
|
|||||||
)
|
)
|
||||||
|
|
||||||
// Clone to temporary path and do the init commit.
|
// Clone to temporary path and do the init commit.
|
||||||
if stdout, _, err := gitcmd.NewCommand("clone").AddDynamicArguments(repo.RepoPath(), tmpDir).
|
if err := gitrepo.CloneRepoToLocal(ctx, repo, tmpDir, git.CloneRepoOptions{
|
||||||
WithEnv(env).RunStdString(ctx); err != nil {
|
Env: env,
|
||||||
log.Error("Failed to clone from %v into %s: stdout: %s\nError: %v", repo, tmpDir, stdout, err)
|
}); err != nil {
|
||||||
|
log.Error("Failed to clone from %v into %s\nError: %v", repo, tmpDir, err)
|
||||||
return fmt.Errorf("git clone: %w", err)
|
return fmt.Errorf("git clone: %w", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -55,12 +55,11 @@ func (t *TemporaryUploadRepository) Close() {
|
|||||||
|
|
||||||
// Clone the base repository to our path and set branch as the HEAD
|
// Clone the base repository to our path and set branch as the HEAD
|
||||||
func (t *TemporaryUploadRepository) Clone(ctx context.Context, branch string, bare bool) error {
|
func (t *TemporaryUploadRepository) Clone(ctx context.Context, branch string, bare bool) error {
|
||||||
cmd := gitcmd.NewCommand("clone", "-s", "-b").AddDynamicArguments(branch, t.repo.RepoPath(), t.basePath)
|
if err := gitrepo.CloneRepoToLocal(ctx, t.repo, t.basePath, git.CloneRepoOptions{
|
||||||
if bare {
|
Bare: bare,
|
||||||
cmd.AddArguments("--bare")
|
Branch: branch,
|
||||||
}
|
Shared: true,
|
||||||
|
}); err != nil {
|
||||||
if _, _, err := cmd.RunStdString(ctx); err != nil {
|
|
||||||
stderr := err.Error()
|
stderr := err.Error()
|
||||||
if matched, _ := regexp.MatchString(".*Remote branch .* not found in upstream origin.*", stderr); matched {
|
if matched, _ := regexp.MatchString(".*Remote branch .* not found in upstream origin.*", stderr); matched {
|
||||||
return git.ErrBranchNotExist{
|
return git.ErrBranchNotExist{
|
||||||
|
|||||||
@ -15,7 +15,6 @@ import (
|
|||||||
"code.gitea.io/gitea/models/unit"
|
"code.gitea.io/gitea/models/unit"
|
||||||
user_model "code.gitea.io/gitea/models/user"
|
user_model "code.gitea.io/gitea/models/user"
|
||||||
"code.gitea.io/gitea/modules/git"
|
"code.gitea.io/gitea/modules/git"
|
||||||
"code.gitea.io/gitea/modules/git/gitcmd"
|
|
||||||
"code.gitea.io/gitea/modules/gitrepo"
|
"code.gitea.io/gitea/modules/gitrepo"
|
||||||
"code.gitea.io/gitea/modules/log"
|
"code.gitea.io/gitea/modules/log"
|
||||||
repo_module "code.gitea.io/gitea/modules/repository"
|
repo_module "code.gitea.io/gitea/modules/repository"
|
||||||
@ -147,15 +146,16 @@ func ForkRepository(ctx context.Context, doer, owner *user_model.User, opts Fork
|
|||||||
}
|
}
|
||||||
|
|
||||||
// 3 - Clone the repository
|
// 3 - Clone the repository
|
||||||
cloneCmd := gitcmd.NewCommand("clone", "--bare")
|
cloneOpts := git.CloneRepoOptions{
|
||||||
if opts.SingleBranch != "" {
|
Bare: true,
|
||||||
cloneCmd.AddArguments("--single-branch", "--branch").AddDynamicArguments(opts.SingleBranch)
|
Timeout: 10 * time.Minute,
|
||||||
}
|
}
|
||||||
var stdout []byte
|
if opts.SingleBranch != "" {
|
||||||
if stdout, _, err = cloneCmd.AddDynamicArguments(opts.BaseRepo.RepoPath(), repo.RepoPath()).
|
cloneOpts.SingleBranch = true
|
||||||
WithTimeout(10 * time.Minute).
|
cloneOpts.Branch = opts.SingleBranch
|
||||||
RunStdBytes(ctx); err != nil {
|
}
|
||||||
log.Error("Fork Repository (git clone) Failed for %v (from %v):\nStdout: %s\nError: %v", repo, opts.BaseRepo, stdout, err)
|
if err = gitrepo.Clone(ctx, opts.BaseRepo, repo, cloneOpts); err != nil {
|
||||||
|
log.Error("Fork Repository (git clone) Failed for %v (from %v):\nError: %v", repo, opts.BaseRepo, err)
|
||||||
return nil, fmt.Errorf("git clone: %w", err)
|
return nil, fmt.Errorf("git clone: %w", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -7,8 +7,6 @@ import (
|
|||||||
"context"
|
"context"
|
||||||
"errors"
|
"errors"
|
||||||
"fmt"
|
"fmt"
|
||||||
"os"
|
|
||||||
"path/filepath"
|
|
||||||
"strings"
|
"strings"
|
||||||
|
|
||||||
activities_model "code.gitea.io/gitea/models/activities"
|
activities_model "code.gitea.io/gitea/models/activities"
|
||||||
@ -28,7 +26,6 @@ import (
|
|||||||
repo_module "code.gitea.io/gitea/modules/repository"
|
repo_module "code.gitea.io/gitea/modules/repository"
|
||||||
"code.gitea.io/gitea/modules/setting"
|
"code.gitea.io/gitea/modules/setting"
|
||||||
"code.gitea.io/gitea/modules/structs"
|
"code.gitea.io/gitea/modules/structs"
|
||||||
"code.gitea.io/gitea/modules/util"
|
|
||||||
notify_service "code.gitea.io/gitea/services/notify"
|
notify_service "code.gitea.io/gitea/services/notify"
|
||||||
pull_service "code.gitea.io/gitea/services/pull"
|
pull_service "code.gitea.io/gitea/services/pull"
|
||||||
)
|
)
|
||||||
@ -251,9 +248,8 @@ func CheckDaemonExportOK(ctx context.Context, repo *repo_model.Repository) error
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Create/Remove git-daemon-export-ok for git-daemon...
|
// Create/Remove git-daemon-export-ok for git-daemon...
|
||||||
daemonExportFile := filepath.Join(repo.RepoPath(), `git-daemon-export-ok`)
|
daemonExportFile := `git-daemon-export-ok`
|
||||||
|
isExist, err := gitrepo.IsRepoFileExist(ctx, repo, daemonExportFile)
|
||||||
isExist, err := util.IsExist(daemonExportFile)
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Error("Unable to check if %s exists. Error: %v", daemonExportFile, err)
|
log.Error("Unable to check if %s exists. Error: %v", daemonExportFile, err)
|
||||||
return err
|
return err
|
||||||
@ -261,11 +257,11 @@ func CheckDaemonExportOK(ctx context.Context, repo *repo_model.Repository) error
|
|||||||
|
|
||||||
isPublic := !repo.IsPrivate && repo.Owner.Visibility == structs.VisibleTypePublic
|
isPublic := !repo.IsPrivate && repo.Owner.Visibility == structs.VisibleTypePublic
|
||||||
if !isPublic && isExist {
|
if !isPublic && isExist {
|
||||||
if err = util.Remove(daemonExportFile); err != nil {
|
if err = gitrepo.RemoveRepoFile(ctx, repo, daemonExportFile); err != nil {
|
||||||
log.Error("Failed to remove %s: %v", daemonExportFile, err)
|
log.Error("Failed to remove %s: %v", daemonExportFile, err)
|
||||||
}
|
}
|
||||||
} else if isPublic && !isExist {
|
} else if isPublic && !isExist {
|
||||||
if f, err := os.Create(daemonExportFile); err != nil {
|
if f, err := gitrepo.CreateRepoFile(ctx, repo, daemonExportFile); err != nil {
|
||||||
log.Error("Failed to create %s: %v", daemonExportFile, err)
|
log.Error("Failed to create %s: %v", daemonExportFile, err)
|
||||||
} else {
|
} else {
|
||||||
f.Close()
|
f.Close()
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user