mirror of
				https://github.com/go-gitea/gitea
				synced 2025-11-03 21:08:25 +00:00 
			
		
		
		
	Merge branch 'master' into dev
This commit is contained in:
		@@ -17,6 +17,8 @@ import (
 | 
				
			|||||||
)
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func Update(refName, oldCommitId, newCommitId, userName, repoUserName, repoName string, userId int64) error {
 | 
					func Update(refName, oldCommitId, newCommitId, userName, repoUserName, repoName string, userId int64) error {
 | 
				
			||||||
 | 
						//fmt.Println(refName, oldCommitId, newCommitId)
 | 
				
			||||||
 | 
						//fmt.Println(userName, repoUserName, repoName)
 | 
				
			||||||
	isNew := strings.HasPrefix(oldCommitId, "0000000")
 | 
						isNew := strings.HasPrefix(oldCommitId, "0000000")
 | 
				
			||||||
	if isNew &&
 | 
						if isNew &&
 | 
				
			||||||
		strings.HasPrefix(newCommitId, "0000000") {
 | 
							strings.HasPrefix(newCommitId, "0000000") {
 | 
				
			||||||
@@ -73,11 +75,41 @@ func Update(refName, oldCommitId, newCommitId, userName, repoUserName, repoName
 | 
				
			|||||||
		return fmt.Errorf("runUpdate.GetRepositoryByName userId: %v", err)
 | 
							return fmt.Errorf("runUpdate.GetRepositoryByName userId: %v", err)
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						// if tags push
 | 
				
			||||||
 | 
						if strings.HasPrefix(refName, "refs/tags/") {
 | 
				
			||||||
 | 
							tagName := git.RefEndName(refName)
 | 
				
			||||||
 | 
							tag, err := repo.GetTag(tagName)
 | 
				
			||||||
 | 
							if err != nil {
 | 
				
			||||||
 | 
								log.GitLogger.Fatal("runUpdate.GetTag: %v", err)
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							var actEmail string
 | 
				
			||||||
 | 
							if tag.Tagger != nil {
 | 
				
			||||||
 | 
								actEmail = tag.Tagger.Email
 | 
				
			||||||
 | 
							} else {
 | 
				
			||||||
 | 
								cmt, err := tag.Commit()
 | 
				
			||||||
 | 
								if err != nil {
 | 
				
			||||||
 | 
									log.GitLogger.Fatal("runUpdate.GetTag Commit: %v", err)
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
								actEmail = cmt.Committer.Email
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							commit := &base.PushCommits{}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							if err = CommitRepoAction(userId, ru.Id, userName, actEmail,
 | 
				
			||||||
 | 
								repos.Id, repoUserName, repoName, refName, commit); err != nil {
 | 
				
			||||||
 | 
								log.GitLogger.Fatal("runUpdate.models.CommitRepoAction: %s/%s:%v", repoUserName, repoName, err)
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
							return err
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						// if commits push
 | 
				
			||||||
	commits := make([]*base.PushCommit, 0)
 | 
						commits := make([]*base.PushCommit, 0)
 | 
				
			||||||
	var maxCommits = 3
 | 
						var maxCommits = 3
 | 
				
			||||||
	var actEmail string
 | 
						var actEmail string
 | 
				
			||||||
	for e := l.Front(); e != nil; e = e.Next() {
 | 
						for e := l.Front(); e != nil; e = e.Next() {
 | 
				
			||||||
		commit := e.Value.(*git.Commit)
 | 
							commit := e.Value.(*git.Commit)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		if actEmail == "" {
 | 
							if actEmail == "" {
 | 
				
			||||||
			actEmail = commit.Committer.Email
 | 
								actEmail = commit.Committer.Email
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -7,6 +7,7 @@ package repo
 | 
				
			|||||||
import (
 | 
					import (
 | 
				
			||||||
	"bytes"
 | 
						"bytes"
 | 
				
			||||||
	"fmt"
 | 
						"fmt"
 | 
				
			||||||
 | 
						"io"
 | 
				
			||||||
	"io/ioutil"
 | 
						"io/ioutil"
 | 
				
			||||||
	"net/http"
 | 
						"net/http"
 | 
				
			||||||
	"os"
 | 
						"os"
 | 
				
			||||||
@@ -130,24 +131,49 @@ func Http(ctx *middleware.Context, params martini.Params) {
 | 
				
			|||||||
		}
 | 
							}
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	config := Config{setting.RepoRootPath, "git", true, true, func(rpc string, input []byte) {
 | 
						var f func(rpc string, input []byte)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						f = func(rpc string, input []byte) {
 | 
				
			||||||
		if rpc == "receive-pack" {
 | 
							if rpc == "receive-pack" {
 | 
				
			||||||
			firstLine := bytes.IndexRune(input, '\000')
 | 
								var lastLine int64 = 0
 | 
				
			||||||
			if firstLine > -1 {
 | 
					
 | 
				
			||||||
				fields := strings.Fields(string(input[:firstLine]))
 | 
								for {
 | 
				
			||||||
				if len(fields) == 3 {
 | 
									head := input[lastLine : lastLine+2]
 | 
				
			||||||
 | 
									if head[0] == '0' && head[1] == '0' {
 | 
				
			||||||
 | 
										size, err := strconv.ParseInt(string(input[lastLine+2:lastLine+4]), 16, 32)
 | 
				
			||||||
 | 
										if err != nil {
 | 
				
			||||||
 | 
											log.Error("%v", err)
 | 
				
			||||||
 | 
											return
 | 
				
			||||||
 | 
										}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
										if size == 0 {
 | 
				
			||||||
 | 
											//fmt.Println(string(input[lastLine:]))
 | 
				
			||||||
 | 
											break
 | 
				
			||||||
 | 
										}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
										line := input[lastLine : lastLine+size]
 | 
				
			||||||
 | 
										idx := bytes.IndexRune(line, '\000')
 | 
				
			||||||
 | 
										if idx > -1 {
 | 
				
			||||||
 | 
											line = line[:idx]
 | 
				
			||||||
 | 
										}
 | 
				
			||||||
 | 
										fields := strings.Fields(string(line))
 | 
				
			||||||
 | 
										if len(fields) >= 3 {
 | 
				
			||||||
						oldCommitId := fields[0][4:]
 | 
											oldCommitId := fields[0][4:]
 | 
				
			||||||
						newCommitId := fields[1]
 | 
											newCommitId := fields[1]
 | 
				
			||||||
						refName := fields[2]
 | 
											refName := fields[2]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
					if err = models.Update(refName, oldCommitId, newCommitId, authUsername, username, reponame, authUser.Id); err != nil {
 | 
											models.Update(refName, oldCommitId, newCommitId, authUsername, username, reponame, authUser.Id)
 | 
				
			||||||
						log.GitLogger.Error(err.Error())
 | 
										}
 | 
				
			||||||
						return
 | 
										lastLine = lastLine + size
 | 
				
			||||||
 | 
									} else {
 | 
				
			||||||
 | 
										//fmt.Println("ddddddddddd")
 | 
				
			||||||
 | 
										break
 | 
				
			||||||
				}
 | 
									}
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	}}
 | 
					
 | 
				
			||||||
 | 
						config := Config{setting.RepoRootPath, "git", true, true, f}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	handler := HttpBackend(&config)
 | 
						handler := HttpBackend(&config)
 | 
				
			||||||
	handler(ctx.ResponseWriter, ctx.Req)
 | 
						handler(ctx.ResponseWriter, ctx.Req)
 | 
				
			||||||
@@ -240,8 +266,14 @@ func serviceRpc(rpc string, hr handler) {
 | 
				
			|||||||
	w.Header().Set("Content-Type", fmt.Sprintf("application/x-git-%s-result", rpc))
 | 
						w.Header().Set("Content-Type", fmt.Sprintf("application/x-git-%s-result", rpc))
 | 
				
			||||||
	w.WriteHeader(http.StatusOK)
 | 
						w.WriteHeader(http.StatusOK)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	input, _ := ioutil.ReadAll(r.Body)
 | 
						var input []byte
 | 
				
			||||||
	br := bytes.NewReader(input)
 | 
						var br io.Reader
 | 
				
			||||||
 | 
						if hr.Config.OnSucceed != nil {
 | 
				
			||||||
 | 
							input, _ = ioutil.ReadAll(r.Body)
 | 
				
			||||||
 | 
							br = bytes.NewReader(input)
 | 
				
			||||||
 | 
						} else {
 | 
				
			||||||
 | 
							br = r.Body
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	args := []string{rpc, "--stateless-rpc", dir}
 | 
						args := []string{rpc, "--stateless-rpc", dir}
 | 
				
			||||||
	cmd := exec.Command(hr.Config.GitBinPath, args...)
 | 
						cmd := exec.Command(hr.Config.GitBinPath, args...)
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user