| @@ -15,3 +15,5 @@ Thomas Boerger <thomas@webhippie.de> (@tboerger) | |||||
| Lauris Bukšis-Haberkorns <lauris@nix.lv> (@lafriks) | Lauris Bukšis-Haberkorns <lauris@nix.lv> (@lafriks) | ||||
| Antoine Girard <sapk@sapk.fr> (@sapk) | Antoine Girard <sapk@sapk.fr> (@sapk) | ||||
| Jonas Östanbäck <jonas.ostanback@gmail.com> (@cez81) | Jonas Östanbäck <jonas.ostanback@gmail.com> (@cez81) | ||||
| David Schneiderbauer <dschneiderbauer@gmail.com> (@daviian) | |||||
| Peter Žeby <morlinest@gmail.com> (@morlinest) | |||||
| @@ -12,8 +12,6 @@ import ( | |||||
| "net/http" | "net/http" | ||||
| "strconv" | "strconv" | ||||
| "strings" | "strings" | ||||
| "github.com/mcuadros/go-version" | |||||
| ) | ) | ||||
| // Commit represents a git commit. | // Commit represents a git commit. | ||||
| @@ -160,13 +158,7 @@ func CommitChanges(repoPath string, opts CommitChangesOptions) error { | |||||
| func commitsCount(repoPath, revision, relpath string) (int64, error) { | func commitsCount(repoPath, revision, relpath string) (int64, error) { | ||||
| var cmd *Command | var cmd *Command | ||||
| isFallback := false | |||||
| if version.Compare(gitVersion, "1.8.0", "<") { | |||||
| isFallback = true | |||||
| cmd = NewCommand("log", "--pretty=format:''") | |||||
| } else { | |||||
| cmd = NewCommand("rev-list", "--count") | |||||
| } | |||||
| cmd = NewCommand("rev-list", "--count") | |||||
| cmd.AddArguments(revision) | cmd.AddArguments(revision) | ||||
| if len(relpath) > 0 { | if len(relpath) > 0 { | ||||
| cmd.AddArguments("--", relpath) | cmd.AddArguments("--", relpath) | ||||
| @@ -177,9 +169,6 @@ func commitsCount(repoPath, revision, relpath string) (int64, error) { | |||||
| return 0, err | return 0, err | ||||
| } | } | ||||
| if isFallback { | |||||
| return int64(strings.Count(stdout, "\n")) + 1, nil | |||||
| } | |||||
| return strconv.ParseInt(strings.TrimSpace(stdout), 10, 64) | return strconv.ParseInt(strings.TrimSpace(stdout), 10, 64) | ||||
| } | } | ||||
| @@ -7,8 +7,6 @@ package git | |||||
| import ( | import ( | ||||
| "fmt" | "fmt" | ||||
| "strings" | "strings" | ||||
| "github.com/mcuadros/go-version" | |||||
| ) | ) | ||||
| // BranchPrefix base dir of the branch information file store on git | // BranchPrefix base dir of the branch information file store on git | ||||
| @@ -56,10 +54,6 @@ func (repo *Repository) GetHEADBranch() (*Branch, error) { | |||||
| // SetDefaultBranch sets default branch of repository. | // SetDefaultBranch sets default branch of repository. | ||||
| func (repo *Repository) SetDefaultBranch(name string) error { | func (repo *Repository) SetDefaultBranch(name string) error { | ||||
| if version.Compare(gitVersion, "1.7.10", "<") { | |||||
| return ErrUnsupportedVersion{"1.7.10"} | |||||
| } | |||||
| _, err := NewCommand("symbolic-ref", "HEAD", BranchPrefix+name).RunInDir(repo.Path) | _, err := NewCommand("symbolic-ref", "HEAD", BranchPrefix+name).RunInDir(repo.Path) | ||||
| return err | return err | ||||
| } | } | ||||
| @@ -10,8 +10,6 @@ import ( | |||||
| "fmt" | "fmt" | ||||
| "strconv" | "strconv" | ||||
| "strings" | "strings" | ||||
| "github.com/mcuadros/go-version" | |||||
| ) | ) | ||||
| // getRefCommitID returns the last commit ID string of given reference (branch or tag). | // getRefCommitID returns the last commit ID string of given reference (branch or tag). | ||||
| @@ -248,37 +246,11 @@ func (repo *Repository) FilesCountBetween(startCommitID, endCommitID string) (in | |||||
| // CommitsBetween returns a list that contains commits between [last, before). | // CommitsBetween returns a list that contains commits between [last, before). | ||||
| func (repo *Repository) CommitsBetween(last *Commit, before *Commit) (*list.List, error) { | func (repo *Repository) CommitsBetween(last *Commit, before *Commit) (*list.List, error) { | ||||
| if version.Compare(gitVersion, "1.8.0", ">=") { | |||||
| stdout, err := NewCommand("rev-list", before.ID.String()+"..."+last.ID.String()).RunInDirBytes(repo.Path) | |||||
| if err != nil { | |||||
| return nil, err | |||||
| } | |||||
| return repo.parsePrettyFormatLogToList(bytes.TrimSpace(stdout)) | |||||
| } | |||||
| // Fallback to stupid solution, which iterates all commits of the repository | |||||
| // if before is not an ancestor of last. | |||||
| l := list.New() | |||||
| if last == nil || last.ParentCount() == 0 { | |||||
| return l, nil | |||||
| } | |||||
| var err error | |||||
| cur := last | |||||
| for { | |||||
| if cur.ID.Equal(before.ID) { | |||||
| break | |||||
| } | |||||
| l.PushBack(cur) | |||||
| if cur.ParentCount() == 0 { | |||||
| break | |||||
| } | |||||
| cur, err = cur.Parent(0) | |||||
| if err != nil { | |||||
| return nil, err | |||||
| } | |||||
| stdout, err := NewCommand("rev-list", before.ID.String()+"..."+last.ID.String()).RunInDirBytes(repo.Path) | |||||
| if err != nil { | |||||
| return nil, err | |||||
| } | } | ||||
| return l, nil | |||||
| return repo.parsePrettyFormatLogToList(bytes.TrimSpace(stdout)) | |||||
| } | } | ||||
| // CommitsBetweenIDs return commits between twoe commits | // CommitsBetweenIDs return commits between twoe commits | ||||
| @@ -32,17 +32,22 @@ func newSignatureFromCommitline(line []byte) (_ *Signature, err error) { | |||||
| sig.Email = string(line[emailStart+1 : emailEnd]) | sig.Email = string(line[emailStart+1 : emailEnd]) | ||||
| // Check date format. | // Check date format. | ||||
| firstChar := line[emailEnd+2] | |||||
| if firstChar >= 48 && firstChar <= 57 { | |||||
| timestop := bytes.IndexByte(line[emailEnd+2:], ' ') | |||||
| timestring := string(line[emailEnd+2 : emailEnd+2+timestop]) | |||||
| seconds, _ := strconv.ParseInt(timestring, 10, 64) | |||||
| sig.When = time.Unix(seconds, 0) | |||||
| } else { | |||||
| sig.When, err = time.Parse("Mon Jan _2 15:04:05 2006 -0700", string(line[emailEnd+2:])) | |||||
| if err != nil { | |||||
| return nil, err | |||||
| if len(line) > emailEnd+2 { | |||||
| firstChar := line[emailEnd+2] | |||||
| if firstChar >= 48 && firstChar <= 57 { | |||||
| timestop := bytes.IndexByte(line[emailEnd+2:], ' ') | |||||
| timestring := string(line[emailEnd+2 : emailEnd+2+timestop]) | |||||
| seconds, _ := strconv.ParseInt(timestring, 10, 64) | |||||
| sig.When = time.Unix(seconds, 0) | |||||
| } else { | |||||
| sig.When, err = time.Parse("Mon Jan _2 15:04:05 2006 -0700", string(line[emailEnd+2:])) | |||||
| if err != nil { | |||||
| return nil, err | |||||
| } | |||||
| } | } | ||||
| } else { | |||||
| // Fall back to unix 0 time | |||||
| sig.When = time.Unix(0, 0) | |||||
| } | } | ||||
| return sig, nil | return sig, nil | ||||
| } | } | ||||
| @@ -3,10 +3,10 @@ | |||||
| "ignore": "test appengine", | "ignore": "test appengine", | ||||
| "package": [ | "package": [ | ||||
| { | { | ||||
| "checksumSHA1": "9dxw/SGpdhNNm704gt6F02ItYtQ=", | |||||
| "checksumSHA1": "JN/re4+x/hCzMLGHmieUcykVDAg=", | |||||
| "path": "code.gitea.io/git", | "path": "code.gitea.io/git", | ||||
| "revision": "d7487da878e40ee6c4fac7280b518c0ed0be702c", | |||||
| "revisionTime": "2017-09-16T17:49:37Z" | |||||
| "revision": "d47b98c44c9a6472e44ab80efe65235e11c6da2a", | |||||
| "revisionTime": "2017-10-23T00:52:09Z" | |||||
| }, | }, | ||||
| { | { | ||||
| "checksumSHA1": "Zgp5RqU+20L2p9TNl1rSsUIWEEE=", | "checksumSHA1": "Zgp5RqU+20L2p9TNl1rSsUIWEEE=", | ||||