mirror of
https://github.com/go-gitea/gitea.git
synced 2026-10-10 19:08:23 +00:00
Creating a repository with an initial commit, via `auto_init` or a template with git content, pushed that commit through receive-pack and three server-side hooks that do nothing for this internal push except refresh server info. Fetching it into the bare repository instead makes such repository creation about 3.7x faster locally (median 790ms to 214ms). E2E tests that create initialized repositories get about 0.2-0.3s faster each. 1. Run `update-server-info` after template content generation, which the push's `post-receive` hook did before. 2. Remove the now unused `InternalPushingEnvironment` and `PushOptions.LocalRefName`.
77 lines
2.5 KiB
Go
77 lines
2.5 KiB
Go
// Copyright 2019 The Gitea Authors. All rights reserved.
|
|
// SPDX-License-Identifier: MIT
|
|
|
|
package repository
|
|
|
|
import (
|
|
"os"
|
|
"strconv"
|
|
"strings"
|
|
|
|
repo_model "gitea.dev/models/repo"
|
|
user_model "gitea.dev/models/user"
|
|
"gitea.dev/modules/setting"
|
|
"gitea.dev/modules/util"
|
|
)
|
|
|
|
// env keys for git hooks need
|
|
const (
|
|
EnvRepoName = "GITEA_REPO_NAME"
|
|
EnvRepoUsername = "GITEA_REPO_USER_NAME" // owner name
|
|
EnvRepoID = "GITEA_REPO_ID"
|
|
EnvRepoIsWiki = "GITEA_REPO_IS_WIKI"
|
|
|
|
EnvKeyID = "GITEA_KEY_ID" // public key ID
|
|
|
|
EnvPusherName = "GITEA_PUSHER_NAME"
|
|
EnvPusherEmail = "GITEA_PUSHER_EMAIL"
|
|
EnvPusherID = "GITEA_PUSHER_ID"
|
|
EnvPusherExtDoerData = "GITEA_PUSHER_EXT_DOER_DATA"
|
|
|
|
EnvPRID = "GITEA_PR_ID"
|
|
EnvPRIndex = "GITEA_PR_INDEX" // not used by Gitea at the moment, it is for custom git hooks
|
|
EnvAppURL = "GITEA_ROOT_URL"
|
|
)
|
|
|
|
// PushingEnvironment returns an os environment to allow hooks to work on push
|
|
func PushingEnvironment(doer *user_model.User, repo *repo_model.Repository) []string {
|
|
return FullPushingEnvironment(doer, doer, repo, repo.Name, 0, 0)
|
|
}
|
|
|
|
func DoerPushingEnvironment(doer *user_model.User, repo *repo_model.Repository, isWiki bool) []string {
|
|
env := []string{
|
|
EnvAppURL + "=" + setting.AppURL,
|
|
EnvRepoName + "=" + repo.Name + util.Iif(isWiki, ".wiki", ""),
|
|
EnvRepoUsername + "=" + repo.OwnerName,
|
|
EnvRepoID + "=" + strconv.FormatInt(repo.ID, 10),
|
|
EnvRepoIsWiki + "=" + strconv.FormatBool(isWiki),
|
|
EnvPusherName + "=" + doer.Name,
|
|
EnvPusherID + "=" + strconv.FormatInt(doer.ID, 10),
|
|
}
|
|
if !doer.KeepEmailPrivate {
|
|
env = append(env, EnvPusherEmail+"="+doer.Email)
|
|
}
|
|
if doer.ExtDoerData != nil {
|
|
env = append(env, EnvPusherExtDoerData+"="+doer.ExtDoerData.EncodeToString())
|
|
}
|
|
return env
|
|
}
|
|
|
|
// FullPushingEnvironment returns an os environment to allow hooks to work on push
|
|
func FullPushingEnvironment(author, committer *user_model.User, repo *repo_model.Repository, repoName string, prID, prIndex int64) []string {
|
|
isWiki := strings.HasSuffix(repoName, ".wiki")
|
|
authorSig := author.NewGitSig()
|
|
committerSig := committer.NewGitSig()
|
|
environ := append(os.Environ(),
|
|
"GIT_AUTHOR_NAME="+authorSig.Name,
|
|
"GIT_AUTHOR_EMAIL="+authorSig.Email,
|
|
"GIT_COMMITTER_NAME="+committerSig.Name,
|
|
"GIT_COMMITTER_EMAIL="+committerSig.Email,
|
|
EnvPRID+"="+strconv.FormatInt(prID, 10),
|
|
EnvPRIndex+"="+strconv.FormatInt(prIndex, 10),
|
|
"SSH_ORIGINAL_COMMAND=gitea-internal",
|
|
)
|
|
environ = append(environ, DoerPushingEnvironment(committer, repo, isWiki)...)
|
|
return environ
|
|
}
|