2019-05-11 18:29:17 +03:00
// 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"
)
2020-02-03 11:47:04 +03:00
// env keys for git hooks need
const (
EnvRepoName = "GITEA_REPO_NAME"
EnvRepoUsername = "GITEA_REPO_USER_NAME"
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"
EnvIsInternal = "GITEA_INTERNAL_PUSH"
)
2019-12-28 00:15:04 +03:00
// 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 , repo * Repository ) [ ] string {
return append ( PushingEnvironment ( doer , repo ) ,
EnvIsInternal + "=true" ,
)
}
2019-05-11 18:29:17 +03:00
// PushingEnvironment returns an os environment to allow hooks to work on push
func PushingEnvironment ( doer * User , repo * Repository ) [ ] string {
2019-07-26 00:50:20 +03:00
return FullPushingEnvironment ( doer , doer , repo , repo . Name , 0 )
2019-07-01 04:18:13 +03:00
}
// FullPushingEnvironment returns an os environment to allow hooks to work on push
2019-07-26 00:50:20 +03:00
func FullPushingEnvironment ( author , committer * User , repo * Repository , repoName string , prID int64 ) [ ] string {
2019-05-11 18:29:17 +03:00
isWiki := "false"
2019-07-26 00:50:20 +03:00
if strings . HasSuffix ( repoName , ".wiki" ) {
2019-05-11 18:29:17 +03:00
isWiki = "true"
}
2019-07-01 04:18:13 +03:00
authorSig := author . NewGitSig ( )
committerSig := committer . NewGitSig ( )
2019-05-11 18:29:17 +03:00
2019-05-17 15:41:01 +03:00
// We should add "SSH_ORIGINAL_COMMAND=gitea-internal",
// once we have hook and pushing infrastructure working correctly
2019-05-11 18:29:17 +03:00
return append ( os . Environ ( ) ,
2019-07-01 04:18:13 +03:00
"GIT_AUTHOR_NAME=" + authorSig . Name ,
"GIT_AUTHOR_EMAIL=" + authorSig . Email ,
"GIT_COMMITTER_NAME=" + committerSig . Name ,
"GIT_COMMITTER_EMAIL=" + committerSig . Email ,
2019-07-26 00:50:20 +03:00
EnvRepoName + "=" + repoName ,
2020-01-12 12:36:21 +03:00
EnvRepoUsername + "=" + repo . OwnerName ,
2019-05-11 18:29:17 +03:00
EnvRepoIsWiki + "=" + isWiki ,
2019-07-01 04:18:13 +03:00
EnvPusherName + "=" + committer . Name ,
EnvPusherID + "=" + fmt . Sprintf ( "%d" , committer . ID ) ,
2019-05-11 18:29:17 +03:00
ProtectedBranchRepoID + "=" + fmt . Sprintf ( "%d" , repo . ID ) ,
2019-07-01 04:18:13 +03:00
ProtectedBranchPRID + "=" + fmt . Sprintf ( "%d" , prID ) ,
"SSH_ORIGINAL_COMMAND=gitea-internal" ,
2019-05-11 18:29:17 +03:00
)
}