Платформа ЦРНП "Мирокод" для разработки проектов
https://git.mirocod.ru
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
78 lines
2.5 KiB
78 lines
2.5 KiB
// Copyright 2019 The Gitea Authors. All rights reserved. |
|
// Use of this source code is governed by a MIT-style |
|
// license that can be found in the LICENSE file. |
|
|
|
package models |
|
|
|
import ( |
|
"fmt" |
|
"os" |
|
"strings" |
|
|
|
user_model "code.gitea.io/gitea/models/user" |
|
"code.gitea.io/gitea/modules/setting" |
|
) |
|
|
|
// env keys for git hooks need |
|
const ( |
|
EnvRepoName = "GITEA_REPO_NAME" |
|
EnvRepoUsername = "GITEA_REPO_USER_NAME" |
|
EnvRepoID = "GITEA_REPO_ID" |
|
EnvRepoIsWiki = "GITEA_REPO_IS_WIKI" |
|
EnvPusherName = "GITEA_PUSHER_NAME" |
|
EnvPusherEmail = "GITEA_PUSHER_EMAIL" |
|
EnvPusherID = "GITEA_PUSHER_ID" |
|
EnvKeyID = "GITEA_KEY_ID" |
|
EnvIsDeployKey = "GITEA_IS_DEPLOY_KEY" |
|
EnvPRID = "GITEA_PR_ID" |
|
EnvIsInternal = "GITEA_INTERNAL_PUSH" |
|
EnvAppURL = "GITEA_ROOT_URL" |
|
) |
|
|
|
// InternalPushingEnvironment returns an os environment to switch off hooks on push |
|
// It is recommended to avoid using this unless you are pushing within a transaction |
|
// or if you absolutely are sure that post-receive and pre-receive will do nothing |
|
// We provide the full pushing-environment for other hook providers |
|
func InternalPushingEnvironment(doer *user_model.User, repo *Repository) []string { |
|
return append(PushingEnvironment(doer, repo), |
|
EnvIsInternal+"=true", |
|
) |
|
} |
|
|
|
// PushingEnvironment returns an os environment to allow hooks to work on push |
|
func PushingEnvironment(doer *user_model.User, repo *Repository) []string { |
|
return FullPushingEnvironment(doer, doer, repo, repo.Name, 0) |
|
} |
|
|
|
// FullPushingEnvironment returns an os environment to allow hooks to work on push |
|
func FullPushingEnvironment(author, committer *user_model.User, repo *Repository, repoName string, prID int64) []string { |
|
isWiki := "false" |
|
if strings.HasSuffix(repoName, ".wiki") { |
|
isWiki = "true" |
|
} |
|
|
|
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, |
|
EnvRepoName+"="+repoName, |
|
EnvRepoUsername+"="+repo.OwnerName, |
|
EnvRepoIsWiki+"="+isWiki, |
|
EnvPusherName+"="+committer.Name, |
|
EnvPusherID+"="+fmt.Sprintf("%d", committer.ID), |
|
EnvRepoID+"="+fmt.Sprintf("%d", repo.ID), |
|
EnvPRID+"="+fmt.Sprintf("%d", prID), |
|
EnvAppURL+"="+setting.AppURL, |
|
"SSH_ORIGINAL_COMMAND=gitea-internal", |
|
) |
|
|
|
if !committer.KeepEmailPrivate { |
|
environ = append(environ, EnvPusherEmail+"="+committer.Email) |
|
} |
|
|
|
return environ |
|
}
|
|
|