mirror of
				https://github.com/go-gitea/gitea
				synced 2025-10-31 11:28:24 +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