129 lines · 4.5 KB · Go
RawDownload
// Copyright 2019 The Gitea Authors. All rights reserved.// SPDX-License-Identifier: MIT package private import (	"context"	"fmt"	"net/url"	"time" 	"forgejo.org/modules/git"	"forgejo.org/modules/git/pushoptions"	"forgejo.org/modules/repository"	"forgejo.org/modules/setting") // Git environment variablesconst (	GitAlternativeObjectDirectories = "GIT_ALTERNATE_OBJECT_DIRECTORIES"	GitObjectDirectory              = "GIT_OBJECT_DIRECTORY"	GitQuarantinePath               = "GIT_QUARANTINE_PATH") // HookOptions represents the options for the Hook callstype HookOptions struct {	OldCommitIDs                    []string	NewCommitIDs                    []string	RefFullNames                    []git.RefName	UserID                          int64	UserName                        string	GitObjectDirectory              string	GitAlternativeObjectDirectories string	GitQuarantinePath               string	GitPushOptions                  map[string]string	PullRequestID                   int64	PushTrigger                     repository.PushTrigger	DeployKeyID                     int64 // if the pusher is a DeployKey, then UserID is the repo's org user.	IsWiki                          bool	ActionPerm                      int} func (o *HookOptions) GetGitPushOptions() pushoptions.Interface {	return pushoptions.NewFromMap(&o.GitPushOptions)} // SSHLogOption ssh log optionstype SSHLogOption struct {	IsError bool	Message string} // HookPostReceiveResult represents an individual result from PostReceivetype HookPostReceiveResult struct {	Results      []HookPostReceiveBranchResult	RepoWasEmpty bool	Err          string} // HookPostReceiveBranchResult represents an individual branch result from PostReceivetype HookPostReceiveBranchResult struct {	Message bool	Create  bool	Branch  string	URL     string} // HookProcReceiveResult represents an individual result from ProcReceivetype HookProcReceiveResult struct {	Results []HookProcReceiveRefResult	Err     string} // HookProcReceiveRefResult represents an individual result from ProcReceivetype HookProcReceiveRefResult struct {	OldOID       string	NewOID       string	Ref          string	OriginalRef  git.RefName	IsForcePush  bool	IsNotMatched bool	Err          string} // HookPreReceive check whether the provided commits are allowedfunc HookPreReceive(ctx context.Context, ownerName, repoName string, opts HookOptions) ResponseExtra {	reqURL := setting.LocalURL + fmt.Sprintf("api/internal/hook/pre-receive/%s/%s", url.PathEscape(ownerName), url.PathEscape(repoName))	req := newInternalRequest(ctx, reqURL, "POST", opts)	req.SetReadWriteTimeout(time.Duration(60+len(opts.OldCommitIDs)) * time.Second)	_, extra := requestJSONResp(req, &ResponseText{})	return extra} // HookPostReceive updates services and usersfunc HookPostReceive(ctx context.Context, ownerName, repoName string, opts HookOptions) (*HookPostReceiveResult, ResponseExtra) {	reqURL := setting.LocalURL + fmt.Sprintf("api/internal/hook/post-receive/%s/%s", url.PathEscape(ownerName), url.PathEscape(repoName))	req := newInternalRequest(ctx, reqURL, "POST", opts)	req.SetReadWriteTimeout(time.Duration(60+len(opts.OldCommitIDs)) * time.Second)	return requestJSONResp(req, &HookPostReceiveResult{})} // HookProcReceive proc-receive hookfunc HookProcReceive(ctx context.Context, ownerName, repoName string, opts HookOptions) (*HookProcReceiveResult, ResponseExtra) {	reqURL := setting.LocalURL + fmt.Sprintf("api/internal/hook/proc-receive/%s/%s", url.PathEscape(ownerName), url.PathEscape(repoName)) 	req := newInternalRequest(ctx, reqURL, "POST", opts)	req.SetReadWriteTimeout(time.Duration(60+len(opts.OldCommitIDs)) * time.Second)	return requestJSONResp(req, &HookProcReceiveResult{})} // SetDefaultBranch will set the default branch to the provided branch for the provided repositoryfunc SetDefaultBranch(ctx context.Context, ownerName, repoName, branch string) ResponseExtra {	reqURL := setting.LocalURL + fmt.Sprintf("api/internal/hook/set-default-branch/%s/%s/%s",		url.PathEscape(ownerName),		url.PathEscape(repoName),		url.PathEscape(branch),	)	req := newInternalRequest(ctx, reqURL, "POST")	_, extra := requestJSONResp(req, &ResponseText{})	return extra} // SSHLog sends ssh error log responsefunc SSHLog(ctx context.Context, isErr bool, msg string) error {	reqURL := setting.LocalURL + "api/internal/ssh/log"	req := newInternalRequest(ctx, reqURL, "POST", &SSHLogOption{IsError: isErr, Message: msg})	_, extra := requestJSONResp(req, &ResponseText{})	return extra.Error}