@@ -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=", | |||