diff --git a/cmd/hook.go b/cmd/hook.go index 88e61c61d1754..ef5da4f4daa11 100644 --- a/cmd/hook.go +++ b/cmd/hook.go @@ -81,7 +81,12 @@ func runHookPreReceive(c *cli.Context) error { username := os.Getenv(models.EnvRepoUsername) reponame := os.Getenv(models.EnvRepoName) userIDStr := os.Getenv(models.EnvPusherID) - repoPath := models.RepoPath(username, reponame) + + repo, err := models.GetRepositoryByOwnerAndName(username, reponame) + if err != nil { + fail("repository %s/%s does not exist: %v", username, reponame, err) + } + repoPath := repo.RepoPath() buf := bytes.NewBuffer(nil) scanner := bufio.NewScanner(os.Stdin) diff --git a/models/migrations/v82.go b/models/migrations/v82.go index eb73f1834371f..14b52e4e0c2c1 100644 --- a/models/migrations/v82.go +++ b/models/migrations/v82.go @@ -87,7 +87,7 @@ func fixReleaseSha1OnReleaseTable(x *xorm.Engine) error { userCache[repo.OwnerID] = user } - gitRepo, err = git.OpenRepository(models.RepoPath(user.Name, repo.Name)) + gitRepo, err = git.OpenRepository(models.MakeRepoPath(user.Name, repo.Name)) if err != nil { return err } diff --git a/models/pull.go b/models/pull.go index 88f9b1f6e8a28..41d43b08cdf49 100644 --- a/models/pull.go +++ b/models/pull.go @@ -413,7 +413,7 @@ func (pr *PullRequest) Merge(doer *User, baseGitRepo *git.Repository, mergeStyle go AddTestPullRequestTask(doer, pr.BaseRepo.ID, pr.BaseBranch, false) }() - headRepoPath := RepoPath(pr.HeadUserName, pr.HeadRepo.Name) + headRepoPath := MakeRepoPath(pr.HeadUserName, pr.HeadRepo.Name) // Clone base repo. tmpBasePath := path.Join(LocalCopyPath(), "merge-"+com.ToStr(time.Now().Nanosecond())+".git") @@ -1172,7 +1172,7 @@ func (pr *PullRequest) UpdatePatch() (err error) { // Add a temporary remote. tmpRemote := com.ToStr(time.Now().UnixNano()) - if err = headGitRepo.AddRemote(tmpRemote, RepoPath(pr.BaseRepo.MustOwner().Name, pr.BaseRepo.Name), true); err != nil { + if err = headGitRepo.AddRemote(tmpRemote, MakeRepoPath(pr.BaseRepo.MustOwner().Name, pr.BaseRepo.Name), true); err != nil { return fmt.Errorf("AddRemote: %v", err) } defer func() { diff --git a/models/release_test.go b/models/release_test.go index 39c6613054fc6..6c8e671a6eefc 100644 --- a/models/release_test.go +++ b/models/release_test.go @@ -17,7 +17,7 @@ func TestRelease_Create(t *testing.T) { user := AssertExistsAndLoadBean(t, &User{ID: 2}).(*User) repo := AssertExistsAndLoadBean(t, &Repository{ID: 1}).(*Repository) - repoPath := RepoPath(user.Name, repo.Name) + repoPath := MakeRepoPath(user.Name, repo.Name) gitRepo, err := git.OpenRepository(repoPath) assert.NoError(t, err) @@ -100,7 +100,7 @@ func TestRelease_MirrorDelete(t *testing.T) { user := AssertExistsAndLoadBean(t, &User{ID: 2}).(*User) repo := AssertExistsAndLoadBean(t, &Repository{ID: 1}).(*Repository) - repoPath := RepoPath(user.Name, repo.Name) + repoPath := MakeRepoPath(user.Name, repo.Name) migrationOptions := MigrateRepoOptions{ Name: "test_mirror", Description: "Test mirror", diff --git a/models/repo.go b/models/repo.go index f180179440b40..9dbc64bba8b2f 100644 --- a/models/repo.go +++ b/models/repo.go @@ -579,7 +579,7 @@ func (repo *Repository) getBaseRepo(e Engine) (err error) { } func (repo *Repository) repoPath(e Engine) string { - return RepoPath(repo.mustOwnerName(e), repo.Name) + return MakeRepoPath(repo.mustOwnerName(e), repo.Name) } // RepoPath returns the repository path @@ -790,7 +790,7 @@ func (repo *Repository) patchPath(e Engine, index int64) (string, error) { return "", err } - return filepath.Join(RepoPath(repo.Owner.Name, repo.Name), "pulls", com.ToStr(index)+".patch"), nil + return filepath.Join(MakeRepoPath(repo.Owner.Name, repo.Name), "pulls", com.ToStr(index)+".patch"), nil } // SavePatch saves patch data to corresponding location by given issue ID. @@ -821,7 +821,7 @@ func isRepositoryExist(e Engine, u *User, repoName string) (bool, error) { OwnerID: u.ID, LowerName: strings.ToLower(repoName), }) - return has && com.IsDir(RepoPath(u.Name, repoName)), err + return has && com.IsDir(MakeRepoPath(u.Name, repoName)), err } // IsRepositoryExist returns true if the repository with given name under user has already existed. @@ -910,7 +910,7 @@ func MigrateRepository(doer, u *User, opts MigrateRepoOptions) (*Repository, err return nil, err } - repoPath := RepoPath(u.Name, opts.Name) + repoPath := MakeRepoPath(u.Name, opts.Name) wikiPath := WikiPath(u.Name, opts.Name) if u.IsOrganization() { @@ -1404,7 +1404,7 @@ func CreateRepository(doer, u *User, opts CreateRepoOptions) (_ *Repository, err // No need for init mirror. if !opts.IsMirror { - repoPath := RepoPath(u.Name, repo.Name) + repoPath := MakeRepoPath(u.Name, repo.Name) if err = initRepository(sess, repoPath, u, repo, opts); err != nil { if err2 := os.RemoveAll(repoPath); err2 != nil { log.Error("initRepository: %v", err) @@ -1456,8 +1456,8 @@ func CountUserRepositories(userID int64, private bool) int64 { return countRepositories(userID, private) } -// RepoPath returns repository path by given user and repository name. -func RepoPath(userName, repoName string) string { +// MakeRepoPath returns repository path by given user and repository name. +func MakeRepoPath(userName, repoName string) string { return filepath.Join(UserPath(userName), strings.ToLower(repoName)+".git") } @@ -1558,7 +1558,7 @@ func TransferOwnership(doer *User, newOwnerName string, repo *Repository) error return fmt.Errorf("Failed to create dir %s: %v", dir, err) } - if err = os.Rename(RepoPath(owner.Name, repo.Name), RepoPath(newOwner.Name, repo.Name)); err != nil { + if err = os.Rename(MakeRepoPath(owner.Name, repo.Name), MakeRepoPath(newOwner.Name, repo.Name)); err != nil { return fmt.Errorf("rename repository directory: %v", err) } removeAllWithNotice(sess, "Delete repository local copy", repo.LocalCopyPath()) @@ -1606,7 +1606,7 @@ func ChangeRepositoryName(u *User, oldRepoName, newRepoName string) (err error) repoWorkingPool.CheckIn(com.ToStr(repo.ID)) defer repoWorkingPool.CheckOut(com.ToStr(repo.ID)) - newRepoPath := RepoPath(u.Name, newRepoName) + newRepoPath := MakeRepoPath(u.Name, newRepoName) if err = os.Rename(repo.RepoPath(), newRepoPath); err != nil { return fmt.Errorf("rename repository directory: %v", err) } @@ -2268,7 +2268,7 @@ func GitGcRepos() error { } _, stderr, err := process.GetManager().ExecDir( time.Duration(setting.Git.Timeout.GC)*time.Second, - RepoPath(repo.Owner.Name, repo.Name), "Repository garbage collection", + MakeRepoPath(repo.Owner.Name, repo.Name), "Repository garbage collection", "git", args...) if err != nil { return fmt.Errorf("%v: %v", err, stderr) @@ -2454,7 +2454,7 @@ func ForkRepository(doer, u *User, oldRepo *Repository, name, desc string) (_ *R return nil, err } - repoPath := RepoPath(u.Name, repo.Name) + repoPath := MakeRepoPath(u.Name, repo.Name) _, stderr, err := process.GetManager().ExecTimeout(10*time.Minute, fmt.Sprintf("ForkRepository(git clone): %s/%s", u.Name, repo.Name), "git", "clone", "--bare", oldRepo.repoPath(sess), repoPath) diff --git a/models/repo_test.go b/models/repo_test.go index a5b8cce9b993a..9cec768a784f4 100644 --- a/models/repo_test.go +++ b/models/repo_test.go @@ -168,8 +168,8 @@ func TestTransferOwnership(t *testing.T) { transferredRepo := AssertExistsAndLoadBean(t, &Repository{ID: 3}).(*Repository) assert.EqualValues(t, 2, transferredRepo.OwnerID) - assert.False(t, com.IsExist(RepoPath("user3", "repo3"))) - assert.True(t, com.IsExist(RepoPath("user2", "repo3"))) + assert.False(t, com.IsExist(MakeRepoPath("user3", "repo3"))) + assert.True(t, com.IsExist(MakeRepoPath("user2", "repo3"))) AssertExistsAndLoadBean(t, &Action{ OpType: ActionTransferRepo, ActUserID: 2, diff --git a/models/update.go b/models/update.go index 1492d6c0d351d..1e871846b25e1 100644 --- a/models/update.go +++ b/models/update.go @@ -191,7 +191,7 @@ func pushUpdate(opts PushUpdateOptions) (repo *Repository, err error) { return nil, fmt.Errorf("Old and new revisions are both %s", git.EmptySHA) } - repoPath := RepoPath(opts.RepoUserName, opts.RepoName) + repoPath := MakeRepoPath(opts.RepoUserName, opts.RepoName) gitUpdate := exec.Command("git", "update-server-info") gitUpdate.Dir = repoPath diff --git a/modules/context/api.go b/modules/context/api.go index 89b0bb749abb9..bfaecd6be0efd 100644 --- a/modules/context/api.go +++ b/modules/context/api.go @@ -134,7 +134,7 @@ func ReferencesGitRepo() macaron.Handler { // For API calls. if ctx.Repo.GitRepo == nil { - repoPath := models.RepoPath(ctx.Repo.Owner.Name, ctx.Repo.Repository.Name) + repoPath := models.MakeRepoPath(ctx.Repo.Owner.Name, ctx.Repo.Repository.Name) gitRepo, err := git.OpenRepository(repoPath) if err != nil { ctx.Error(500, "RepoRef Invalid repo "+repoPath, err) diff --git a/modules/context/repo.go b/modules/context/repo.go index 0cbd89a75f44b..95ca48f9cf01e 100644 --- a/modules/context/repo.go +++ b/modules/context/repo.go @@ -338,9 +338,9 @@ func RepoAssignment() macaron.Handler { return } - gitRepo, err := git.OpenRepository(models.RepoPath(userName, repoName)) + gitRepo, err := git.OpenRepository(models.MakeRepoPath(userName, repoName)) if err != nil { - ctx.ServerError("RepoAssignment Invalid repo "+models.RepoPath(userName, repoName), err) + ctx.ServerError("RepoAssignment Invalid repo "+models.MakeRepoPath(userName, repoName), err) return } ctx.Repo.GitRepo = gitRepo @@ -557,7 +557,7 @@ func RepoRefByType(refType RepoRefType) macaron.Handler { // For API calls. if ctx.Repo.GitRepo == nil { - repoPath := models.RepoPath(ctx.Repo.Owner.Name, ctx.Repo.Repository.Name) + repoPath := models.MakeRepoPath(ctx.Repo.Owner.Name, ctx.Repo.Repository.Name) ctx.Repo.GitRepo, err = git.OpenRepository(repoPath) if err != nil { ctx.ServerError("RepoRef Invalid repo "+repoPath, err) diff --git a/routers/api/v1/repo/file.go b/routers/api/v1/repo/file.go index 3ce80d24f077a..d9f0f9411c64b 100644 --- a/routers/api/v1/repo/file.go +++ b/routers/api/v1/repo/file.go @@ -83,7 +83,7 @@ func GetArchive(ctx *context.APIContext) { // responses: // 200: // description: success - repoPath := models.RepoPath(ctx.Params(":username"), ctx.Params(":reponame")) + repoPath := models.MakeRepoPath(ctx.Params(":username"), ctx.Params(":reponame")) gitRepo, err := git.OpenRepository(repoPath) if err != nil { ctx.Error(500, "OpenRepository", err) diff --git a/routers/api/v1/repo/pull.go b/routers/api/v1/repo/pull.go index 7abe6241bdcf8..ebc1a81250f18 100644 --- a/routers/api/v1/repo/pull.go +++ b/routers/api/v1/repo/pull.go @@ -659,7 +659,7 @@ func parseCompareInfo(ctx *context.APIContext, form api.CreatePullRequestOption) headRepo = ctx.Repo.Repository headGitRepo = ctx.Repo.GitRepo } else { - headGitRepo, err = git.OpenRepository(models.RepoPath(headUser.Name, headRepo.Name)) + headGitRepo, err = git.OpenRepository(models.MakeRepoPath(headUser.Name, headRepo.Name)) if err != nil { ctx.Error(500, "OpenRepository", err) return nil, nil, nil, nil, "", "" @@ -683,7 +683,7 @@ func parseCompareInfo(ctx *context.APIContext, form api.CreatePullRequestOption) return nil, nil, nil, nil, "", "" } - prInfo, err := headGitRepo.GetPullRequestInfo(models.RepoPath(baseRepo.Owner.Name, baseRepo.Name), baseBranch, headBranch) + prInfo, err := headGitRepo.GetPullRequestInfo(models.MakeRepoPath(baseRepo.Owner.Name, baseRepo.Name), baseBranch, headBranch) if err != nil { ctx.Error(500, "GetPullRequestInfo", err) return nil, nil, nil, nil, "", "" diff --git a/routers/repo/commit.go b/routers/repo/commit.go index a1e9b8bc5d1fd..f296abda36c63 100644 --- a/routers/repo/commit.go +++ b/routers/repo/commit.go @@ -209,7 +209,7 @@ func Diff(ctx *context.Context) { ctx.Data["CommitStatus"] = models.CalcCommitStatus(statuses) - diff, err := models.GetDiffCommit(models.RepoPath(userName, repoName), + diff, err := models.GetDiffCommit(models.MakeRepoPath(userName, repoName), commitID, setting.Git.MaxGitDiffLines, setting.Git.MaxGitDiffLineCharacters, setting.Git.MaxGitDiffFiles) if err != nil { @@ -249,7 +249,7 @@ func Diff(ctx *context.Context) { // RawDiff dumps diff results of repository in given commit ID to io.Writer func RawDiff(ctx *context.Context) { if err := models.GetRawDiff( - models.RepoPath(ctx.Repo.Owner.Name, ctx.Repo.Repository.Name), + models.MakeRepoPath(ctx.Repo.Owner.Name, ctx.Repo.Repository.Name), ctx.Params(":sha"), models.RawDiffType(ctx.Params(":ext")), ctx.Resp, @@ -274,7 +274,7 @@ func CompareDiff(ctx *context.Context) { return } - diff, err := models.GetDiffRange(models.RepoPath(userName, repoName), beforeCommitID, + diff, err := models.GetDiffRange(models.MakeRepoPath(userName, repoName), beforeCommitID, afterCommitID, setting.Git.MaxGitDiffLines, setting.Git.MaxGitDiffLineCharacters, setting.Git.MaxGitDiffFiles) if err != nil { diff --git a/routers/repo/pull.go b/routers/repo/pull.go index 14ab2207b5a8f..cd9cd354e54b4 100644 --- a/routers/repo/pull.go +++ b/routers/repo/pull.go @@ -324,7 +324,7 @@ func PrepareViewPullInfo(ctx *context.Context, issue *models.Issue) *git.PullReq return nil } - prInfo, err := headGitRepo.GetPullRequestInfo(models.RepoPath(repo.Owner.Name, repo.Name), + prInfo, err := headGitRepo.GetPullRequestInfo(models.MakeRepoPath(repo.Owner.Name, repo.Name), pull.BaseBranch, pull.HeadBranch) if err != nil { if strings.Contains(err.Error(), "fatal: Not a valid object name") { @@ -457,7 +457,7 @@ func ViewPullFiles(ctx *context.Context) { return } - headRepoPath := models.RepoPath(pull.HeadUserName, pull.HeadRepo.Name) + headRepoPath := models.MakeRepoPath(pull.HeadUserName, pull.HeadRepo.Name) headGitRepo, err := git.OpenRepository(headRepoPath) if err != nil { @@ -690,7 +690,7 @@ func ParseCompareInfo(ctx *context.Context) (*models.User, *models.Repository, * headGitRepo = ctx.Repo.GitRepo ctx.Data["BaseName"] = headUser.Name } else { - headGitRepo, err = git.OpenRepository(models.RepoPath(headUser.Name, headRepo.Name)) + headGitRepo, err = git.OpenRepository(models.MakeRepoPath(headUser.Name, headRepo.Name)) ctx.Data["BaseName"] = baseRepo.OwnerName if err != nil { ctx.ServerError("OpenRepository", err) @@ -722,7 +722,7 @@ func ParseCompareInfo(ctx *context.Context) (*models.User, *models.Repository, * } ctx.Data["HeadBranches"] = headBranches - prInfo, err := headGitRepo.GetPullRequestInfo(models.RepoPath(baseRepo.Owner.Name, baseRepo.Name), baseBranch, headBranch) + prInfo, err := headGitRepo.GetPullRequestInfo(models.MakeRepoPath(baseRepo.Owner.Name, baseRepo.Name), baseBranch, headBranch) if err != nil { ctx.ServerError("GetPullRequestInfo", err) return nil, nil, nil, nil, "", "" @@ -762,7 +762,7 @@ func PrepareCompareDiff( return true } - diff, err := models.GetDiffRange(models.RepoPath(headUser.Name, headRepo.Name), + diff, err := models.GetDiffRange(models.MakeRepoPath(headUser.Name, headRepo.Name), prInfo.MergeBase, headCommitID, setting.Git.MaxGitDiffLines, setting.Git.MaxGitDiffLineCharacters, setting.Git.MaxGitDiffFiles) if err != nil {