| @@ -0,0 +1,162 @@ | |||
| # Contribution Guidelines | |||
| ## Introduction | |||
| This document explains how to contribute changes to the Gitea | |||
| project. It assumes you have followed the [installation | |||
| instructions](https://github.com/go-gitea/docs/tree/master/en-US/installation) | |||
| Sensitive security-related issues should be reported to | |||
| [security@gitea.io](mailto:security@gitea.io). | |||
| ## Bug reports | |||
| Please search the issues on the issue tracker with a variety of keywords | |||
| to ensure your bug is not already reported. | |||
| If unique, [open an issue](https://github.com/go-gitea/gitea/issues/new) | |||
| and answer the questions so we can understand and reproduce the | |||
| problematic behavior. | |||
| The burden is on you to convince us that it is actually a bug | |||
| in Gitea. This is easiest to do when you write clear, concise | |||
| instructions so we can reproduce the behavior (even if it seems | |||
| obvious). The more detailed and specific you are, the faster | |||
| we will be able to help you. Check out [How to Report Bugs | |||
| Effectively](http://www.chiark.greenend.org.uk/~sgtatham/bugs.html). | |||
| Please be kind, remember that Gitea comes at no cost to you, and you're | |||
| getting free help. | |||
| ## Discuss your design | |||
| The project welcomes submissions but please let everyone know what | |||
| you're working on if you want to change or add something to the Gitea | |||
| repositories. | |||
| Before starting to write something new for the Gitea project, please | |||
| [file an issue](https://github.com/go-gitea/gitea/issues/new). | |||
| Significant changes must go through the [change proposal | |||
| process](https://github.com/go-gitea/proposals) before they can be | |||
| accepted. | |||
| This process gives everyone a chance to validate the design, helps | |||
| prevent duplication of effort, and ensures that the idea fits inside | |||
| the goals for the project and tools. It also checks that the design is | |||
| sound before code is written; the code review tool is not the place for | |||
| high-level discussions. | |||
| ## Testing redux | |||
| Before sending code out for review, run all the tests for the whole | |||
| tree to make sure the changes don't break other usage and keep the | |||
| compatibility on upgrade: | |||
| After running for a while, the command should print | |||
| ``` | |||
| ALL TESTS PASSED | |||
| ``` | |||
| ## Code review | |||
| Changes to Gitea must be reviewed before they are accepted, no matter | |||
| who makes the change even if an owners or a maintainer. We use github's | |||
| pull request workflow to do that and use [lgtm](http://lgtm.co) to ensure | |||
| every PR is reviewed by at least 2 maintainers. | |||
| ## Sign your work | |||
| The sign-off is a simple line at the end of the explanation for the | |||
| patch. Your signature certifies that you wrote the patch or otherwise | |||
| have the right to pass it on as an open-source patch. The rules are | |||
| pretty simple: If you can certify [DCO](DCO), then you just add a line | |||
| to every git commit message: | |||
| ``` | |||
| Signed-off-by: Joe Smith <joe.smith@email.com> | |||
| ``` | |||
| Please use your real name, we really dislike pseudonyms or anonymous | |||
| contributions. We are in the opensource world without secrets. If you | |||
| set your `user.name` and `user.email` git configs, you can sign your | |||
| commit automatically with `git commit -s`. | |||
| ## Contributors | |||
| Everyone who sent a PR to Gitea that gets accepted will | |||
| be as a contributor. Please send a PR to add your name to | |||
| [CONTRIBUTORS](CONTRIBUTORS). For the format, see the | |||
| [CONTRIBUTORS](CONTRIBUTORS). | |||
| ## Maintainers | |||
| To make sure every PR have been checked, we make a team maintainers. Any | |||
| PR MUST be reviewed and by at least two maintainers before it can | |||
| get merged. Maintainers should be a contributor of gitea(or gogs) and | |||
| contributed at least 4 accepted PRs. And a contributor should apply as a | |||
| maintainer in [gitter Gitea develop](https://gitter.im/go-gitea/develop). | |||
| And the owners or the team maintainer could invite the contributor. A | |||
| maintainer should spend some time on code reviews. If some maintainer | |||
| have no time to do that, he should apply to leave maintainers team and | |||
| we will give him an honor to be as a member of advisor team. Of course, | |||
| if an advisor have time to code view, welcome it back to maintainers team. | |||
| If some one have no time to code view and forget to leave the maintainers, | |||
| the owners have the power to move him from maintainers team to advisors | |||
| team. | |||
| ## Owners | |||
| Since Gitea is a pure community organization without any company | |||
| support, to keep the development healthly We will elect the owners every | |||
| year. Every time we will elect three owners. All the contributers could | |||
| vote for three owners, one is the main owner, the other two are assistant | |||
| owners. When the new owners have been elected, the old owners MUST move | |||
| the power to the new owners. If some owner don't obey these rules, | |||
| the other owners are allowed to revoke his owner status. | |||
| After the election, the new owners should say he agrees with these | |||
| rules on the [CONTRIBUTING](CONTRIBUTING.md) on the [Gitter Gitea | |||
| Channel](https://gitter.im/go-gitea/gitea). Below is the word to speak | |||
| ``` | |||
| I'm glad to be an owner of Gitea, | |||
| I agree with [CONTRIBUTING](CONTRIBUTING.md). | |||
| I will spend part of my time on gitea | |||
| and lead the development of gitea. | |||
| ``` | |||
| For a honor to the owners, this document will add the history owners | |||
| below: | |||
| 2016-11-04 ~ 2017-12-31 | |||
| - lunny <xiaolunwen@gmail.com> | |||
| - tboerger <thomas@webhippie.de> | |||
| - bkcsoft <kim.carlbacker@gmail.com> | |||
| ## Versions | |||
| Gitea has one master as a tip branch and have many version branch | |||
| such as v0.9. v0.9 is a release branch and we will tag v0.9.0 both for | |||
| binary download. If v0.9.0 have some bugs, we will accept PR on v0.9 | |||
| and publish v0.9.1 and merge bug PR to master. | |||
| Branch master is a tip version, so if you wish a production usage, | |||
| please download the latest release tag version. All the branch will be | |||
| protected via github, All the PRs to all the branches should be review | |||
| by two maintainers and pass the automatic tests. | |||
| ## Copyright | |||
| Code that you contribute should use the standard copyright header: | |||
| ``` | |||
| // Copyright 2016 - 2017 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. | |||
| ``` | |||
| Files in the repository are copyright the year they are added and the | |||
| year they are last changed. If the copyright author is changed, just | |||
| copy the head below the old one. | |||
| @@ -0,0 +1,9 @@ | |||
| Andrey Nering <nobody@nobody.tld> (@andreynering) | |||
| Kim Carlbäcker <kim.carlbacker@gmail.com> (@bkcsoft) | |||
| LefsFlare <nobody@nobody.tld> (@LefsFlarey) | |||
| Lunny Xiao <xiaolunwen@gmail.com> (@lunny) | |||
| Rachid Zarouali <nobody@nobody.tld> (@xinity) | |||
| Rémy Boulanouar <admin@dblk.org> (@DblK) | |||
| Sandro Santilli <strk@kbt.io> (@strk) | |||
| Thibault Meyer <nobody@nobody.tld> (@0xbaadf00d) | |||
| Thomas Boerger <thomas@webhippie.de> (@tboerger) | |||
| @@ -0,0 +1,36 @@ | |||
| Developer Certificate of Origin | |||
| Version 1.1 | |||
| Copyright (C) 2004, 2006 The Linux Foundation and its contributors. | |||
| 660 York Street, Suite 102, | |||
| San Francisco, CA 94110 USA | |||
| Everyone is permitted to copy and distribute verbatim copies of this | |||
| license document, but changing it is not allowed. | |||
| Developer's Certificate of Origin 1.1 | |||
| By making a contribution to this project, I certify that: | |||
| (a) The contribution was created in whole or in part by me and I | |||
| have the right to submit it under the open source license | |||
| indicated in the file; or | |||
| (b) The contribution is based upon previous work that, to the best | |||
| of my knowledge, is covered under an appropriate open source | |||
| license and I have the right under that license to submit that | |||
| work with modifications, whether created in whole or in part | |||
| by me, under the same open source license (unless I am | |||
| permitted to submit under a different license), as indicated | |||
| in the file; or | |||
| (c) The contribution was provided directly to me by some other | |||
| person who certified (a), (b) or (c) and I have not modified | |||
| it. | |||
| (d) I understand and agree that this project and the contribution | |||
| are public and that a record of the contribution (including all | |||
| personal information I submit with it, including my sign-off) is | |||
| maintained indefinitely and may be redistributed consistent with | |||
| this project or the open source license(s) involved. | |||
| @@ -1,4 +1,5 @@ | |||
| Copyright (c) 2015 All Gogs Contributors | |||
| Copyright (c) 2016 The Gitea Authors | |||
| Copyright (c) 2014 The Gogs Authors | |||
| Permission is hereby granted, free of charge, to any person obtaining a copy | |||
| of this software and associated documentation files (the "Software"), to deal | |||
| @@ -16,4 +17,4 @@ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE | |||
| AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER | |||
| LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, | |||
| OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN | |||
| THE SOFTWARE. | |||
| THE SOFTWARE. | |||
| @@ -0,0 +1,10 @@ | |||
| Andrey Nering <nobody@nobody.tld> (@andreynering) | |||
| Kim Carlbäcker <kim.carlbacker@gmail.com> (@bkcsoft) | |||
| LefsFlare <nobody@nobody.tld> (@LefsFlarey) | |||
| Lunny Xiao <xiaolunwen@gmail.com> (@lunny) | |||
| Matthias Loibl <mail@matthiasloibl.com> (@metalmatze) | |||
| Rachid Zarouali <nobody@nobody.tld> (@xinity) | |||
| Rémy Boulanouar <admin@dblk.org> (@DblK) | |||
| Sandro Santilli <strk@kbt.io> (@strk) | |||
| Thibault Meyer <nobody@nobody.tld> (@0xbaadf00d) | |||
| Thomas Boerger <thomas@webhippie.de> (@tboerger) | |||
| @@ -0,0 +1,40 @@ | |||
| IMPORT := code.gitea.io/git | |||
| PACKAGES ?= $(shell go list ./... | grep -v /vendor/) | |||
| GENERATE ?= code.gitea.io/git | |||
| .PHONY: all | |||
| all: clean test build | |||
| .PHONY: clean | |||
| clean: | |||
| go clean -i ./... | |||
| generate: | |||
| @which mockery > /dev/null; if [ $$? -ne 0 ]; then \ | |||
| go get -u github.com/vektra/mockery/...; \ | |||
| fi | |||
| go generate $(GENERATE) | |||
| .PHONY: fmt | |||
| fmt: | |||
| go fmt $(PACKAGES) | |||
| .PHONY: vet | |||
| vet: | |||
| go vet $(PACKAGES) | |||
| .PHONY: lint | |||
| lint: | |||
| @which golint > /dev/null; if [ $$? -ne 0 ]; then \ | |||
| go get -u github.com/golang/lint/golint; \ | |||
| fi | |||
| for PKG in $(PACKAGES); do golint -set_exit_status $$PKG || exit 1; done; | |||
| .PHONY: test | |||
| test: | |||
| for PKG in $(PACKAGES); do go test -cover -coverprofile $$GOPATH/src/$$PKG/coverage.out $$PKG || exit 1; done; | |||
| .PHONY: build | |||
| build: | |||
| go build . | |||
| @@ -1,13 +1,16 @@ | |||
| # Git Shell [](https://travis-ci.org/go-gitea/git) | |||
| # Git Shell | |||
| Package git is a Go module for Git access through shell commands. | |||
| [](http://drone.gitea.io/go-gitea/git) | |||
| [](https://gitter.im/go-gitea/gitea?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge) | |||
| [](http://microbadger.com/images/gitea/gitea "Get your own image badge on microbadger.com") | |||
| [](https://coverage.gitea.io/go-gitea/git) | |||
| [](https://goreportcard.com/report/code.gitea.io/git) | |||
| [](https://godoc.org/code.gitea.io/git) | |||
| ## Limitations | |||
| - Go version must be at least **1.3**. | |||
| - Git version must be no less than **1.7.1**, and great than or equal to **1.8.0** is recommended. | |||
| - For Windows users, try use as higher version as possible. | |||
| This project is a Go module to access Git through shell commands. For further | |||
| informations take a look at the current [documentation](https://godoc.org/code.gitea.io/git). | |||
| ## License | |||
| This project is under the MIT License. See the [LICENSE](LICENSE) file for the full license text. | |||
| This project is under the MIT License. See the [LICENSE](LICENSE) file for the | |||
| full license text. | |||
| @@ -102,13 +102,13 @@ func ListHooks(repoPath string) (_ []*Hook, err error) { | |||
| } | |||
| const ( | |||
| HOOK_PATH_UPDATE = "hooks/update" | |||
| HookPathUpdate = "hooks/update" | |||
| ) | |||
| // SetUpdateHook writes given content to update hook of the reposiotry. | |||
| func SetUpdateHook(repoPath, content string) (err error) { | |||
| log("Setting update hook: %s", repoPath) | |||
| hookPath := path.Join(repoPath, HOOK_PATH_UPDATE) | |||
| hookPath := path.Join(repoPath, HookPathUpdate) | |||
| if com.IsExist(hookPath) { | |||
| err = os.Remove(hookPath) | |||
| } else { | |||
| @@ -110,7 +110,7 @@ func (repo *Repository) GetTags() ([]string, error) { | |||
| version.Sort(tags) | |||
| // Reverse order | |||
| for i := 0; i < len(tags) / 2; i++ { | |||
| for i := 0; i < len(tags)/2; i++ { | |||
| j := len(tags) - i - 1 | |||
| tags[i], tags[j] = tags[j], tags[i] | |||
| } | |||
| @@ -8,6 +8,7 @@ import ( | |||
| "fmt" | |||
| "path" | |||
| "path/filepath" | |||
| "runtime" | |||
| "sort" | |||
| "strconv" | |||
| "strings" | |||
| @@ -114,19 +115,31 @@ type commitInfo struct { | |||
| err error | |||
| } | |||
| // GetCommitsInfo takes advantages of concurrey to speed up getting information | |||
| // of all commits that are corresponding to these entries. | |||
| // TODO: limit max goroutines number should be configurable | |||
| // GetCommitsInfo takes advantages of concurrency to speed up getting information | |||
| // of all commits that are corresponding to these entries. This method will automatically | |||
| // choose the right number of goroutine (concurrency) to use related of the host CPU. | |||
| func (tes Entries) GetCommitsInfo(commit *Commit, treePath string) ([][]interface{}, error) { | |||
| return tes.GetCommitsInfoWithCustomConcurrency(commit, treePath, 0) | |||
| } | |||
| // GetCommitsInfoWithCustomConcurrency takes advantages of concurrency to speed up getting information | |||
| // of all commits that are corresponding to these entries. If the given maxConcurrency is negative or | |||
| // equal to zero: the right number of goroutine (concurrency) to use will be choosen related of the | |||
| // host CPU. | |||
| func (tes Entries) GetCommitsInfoWithCustomConcurrency(commit *Commit, treePath string, maxConcurrency int) ([][]interface{}, error) { | |||
| if len(tes) == 0 { | |||
| return nil, nil | |||
| } | |||
| if maxConcurrency <= 0 { | |||
| maxConcurrency = runtime.NumCPU() | |||
| } | |||
| // Length of taskChan determines how many goroutines (subprocesses) can run at the same time. | |||
| // The length of revChan should be same as taskChan so goroutines whoever finished job can | |||
| // exit as early as possible, only store data inside channel. | |||
| taskChan := make(chan bool, 10) | |||
| revChan := make(chan commitInfo, 10) | |||
| taskChan := make(chan bool, maxConcurrency) | |||
| revChan := make(chan commitInfo, maxConcurrency) | |||
| doneChan := make(chan error) | |||
| // Receive loop will exit when it collects same number of data pieces as tree entries. | |||
| @@ -3,10 +3,10 @@ | |||
| "ignore": "test", | |||
| "package": [ | |||
| { | |||
| "checksumSHA1": "/JuXxX+Zg9lk3zvT9c82ltavFdk=", | |||
| "checksumSHA1": "X4WaxEtgFkM4VHg6TcNk2xkrqCI=", | |||
| "path": "code.gitea.io/git", | |||
| "revision": "cddfff06fa8ed36571d43c1463ea63b3e6e8244b", | |||
| "revisionTime": "2016-11-12T10:50:26Z" | |||
| "revision": "0807b517283977be34f0ff5510b21e676fc1527c", | |||
| "revisionTime": "2016-11-13T14:20:52Z" | |||
| }, | |||
| { | |||
| "checksumSHA1": "/uhZZppDeb3Rbp3h8C0ALR3hdrA=", | |||