This commit is contained in:
Unknwon 2015-11-02 19:55:24 -05:00
parent 8eb4c3121a
commit bc82157216
5 changed files with 42 additions and 26 deletions

View file

@ -5,7 +5,7 @@ Gogs - Go Git Service [![Build Status](https://travis-ci.org/gogits/gogs.svg?bra
![](public/img/gogs-large-resize.png) ![](public/img/gogs-large-resize.png)
##### Current version: 0.6.21 Beta ##### Current version: 0.6.22 Beta
<table> <table>
<tr> <tr>

View file

@ -17,7 +17,7 @@ import (
"github.com/gogits/gogs/modules/setting" "github.com/gogits/gogs/modules/setting"
) )
const APP_VER = "0.6.21.1102 Beta" const APP_VER = "0.6.22.1102 Beta"
func init() { func init() {
runtime.GOMAXPROCS(runtime.NumCPU()) runtime.GOMAXPROCS(runtime.NumCPU())

View file

@ -37,6 +37,7 @@ const (
DIFF_FILE_ADD = iota + 1 DIFF_FILE_ADD = iota + 1
DIFF_FILE_CHANGE DIFF_FILE_CHANGE
DIFF_FILE_DEL DIFF_FILE_DEL
DIFF_FILE_RENAME
) )
type DiffLine struct { type DiffLine struct {
@ -57,12 +58,14 @@ type DiffSection struct {
type DiffFile struct { type DiffFile struct {
Name string Name string
OldName string
Index int Index int
Addition, Deletion int Addition, Deletion int
Type int Type int
IsCreated bool IsCreated bool
IsDeleted bool IsDeleted bool
IsBin bool IsBin bool
IsRenamed bool
Sections []*DiffSection Sections []*DiffSection
} }
@ -158,17 +161,29 @@ func ParsePatch(pid int64, maxlines int, cmd *exec.Cmd, reader io.Reader) (*Diff
// Get new file. // Get new file.
if strings.HasPrefix(line, DIFF_HEAD) { if strings.HasPrefix(line, DIFF_HEAD) {
beg := len(DIFF_HEAD) middle := -1
a := line[beg : (len(line)-beg)/2+beg]
// In case file name is surrounded by double quotes(it happens only in git-shell). // Note: In case file name is surrounded by double quotes(it happens only in git-shell).
if a[0] == '"' { hasQuote := strings.Index(line, `\"`) > -1
a = a[1 : len(a)-1] if hasQuote {
a = strings.Replace(a, `\"`, `"`, -1) line = strings.Replace(line, `\"`, `"`, -1)
middle = strings.Index(line, ` "b/`)
} else {
middle = strings.Index(line, " b/")
} }
beg := len(DIFF_HEAD)
a := line[beg+2 : middle]
b := line[middle+3:]
if hasQuote {
a = a[1 : len(a)-1]
b = b[1 : len(b)-1]
}
fmt.Println(a, b)
curFile = &DiffFile{ curFile = &DiffFile{
Name: a[strings.Index(a, "/")+1:], Name: a,
Index: len(diff.Files) + 1, Index: len(diff.Files) + 1,
Type: DIFF_FILE_CHANGE, Type: DIFF_FILE_CHANGE,
Sections: make([]*DiffSection, 0, 10), Sections: make([]*DiffSection, 0, 10),
@ -180,16 +195,17 @@ func ParsePatch(pid int64, maxlines int, cmd *exec.Cmd, reader io.Reader) (*Diff
switch { switch {
case strings.HasPrefix(scanner.Text(), "new file"): case strings.HasPrefix(scanner.Text(), "new file"):
curFile.Type = DIFF_FILE_ADD curFile.Type = DIFF_FILE_ADD
curFile.IsDeleted = false
curFile.IsCreated = true curFile.IsCreated = true
case strings.HasPrefix(scanner.Text(), "deleted"): case strings.HasPrefix(scanner.Text(), "deleted"):
curFile.Type = DIFF_FILE_DEL curFile.Type = DIFF_FILE_DEL
curFile.IsCreated = false
curFile.IsDeleted = true curFile.IsDeleted = true
case strings.HasPrefix(scanner.Text(), "index"): case strings.HasPrefix(scanner.Text(), "index"):
curFile.Type = DIFF_FILE_CHANGE curFile.Type = DIFF_FILE_CHANGE
curFile.IsCreated = false case strings.HasPrefix(scanner.Text(), "similarity index 100%"):
curFile.IsDeleted = false curFile.Type = DIFF_FILE_RENAME
curFile.IsRenamed = true
curFile.OldName = curFile.Name
curFile.Name = b
} }
if curFile.Type > 0 { if curFile.Type > 0 {
break break
@ -244,10 +260,10 @@ func GetDiffRange(repoPath, beforeCommitId string, afterCommitId string, maxline
cmd = exec.Command("git", "show", afterCommitId) cmd = exec.Command("git", "show", afterCommitId)
} else { } else {
c, _ := commit.Parent(0) c, _ := commit.Parent(0)
cmd = exec.Command("git", "diff", c.Id.String(), afterCommitId) cmd = exec.Command("git", "diff", "-M", c.Id.String(), afterCommitId)
} }
} else { } else {
cmd = exec.Command("git", "diff", beforeCommitId, afterCommitId) cmd = exec.Command("git", "diff", "-M", beforeCommitId, afterCommitId)
} }
cmd.Dir = repoPath cmd.Dir = repoPath
cmd.Stdout = wr cmd.Stdout = wr

View file

@ -1 +1 @@
0.6.21.1102 Beta 0.6.22.1102 Beta

View file

@ -36,18 +36,18 @@
<div class="diff-file-box diff-box file-content" id="diff-{{.Index}}"> <div class="diff-file-box diff-box file-content" id="diff-{{.Index}}">
<h4 class="ui top attached normal header"> <h4 class="ui top attached normal header">
<div class="diff-counter count ui left"> <div class="diff-counter count ui left">
{{if not $file.IsBin}} {{if $file.IsBin}}
<span class="add" data-line="{{.Addition}}">+ {{.Addition}}</span> {{$.i18n.Tr "repo.diff.bin"}}
<span class="bar"> {{else if not $file.IsRenamed}}
<span class="pull-left add"></span> <span class="add" data-line="{{.Addition}}">+ {{.Addition}}</span>
<span class="pull-left del"></span> <span class="bar">
</span> <span class="pull-left add"></span>
<span class="del" data-line="{{.Deletion}}">- {{.Deletion}}</span> <span class="pull-left del"></span>
{{else}} </span>
{{$.i18n.Tr "repo.diff.bin"}} <span class="del" data-line="{{.Deletion}}">- {{.Deletion}}</span>
{{end}} {{end}}
</div> </div>
<span class="file">{{$file.Name}}</span> <span class="file">{{if $file.IsRenamed}}{{$file.OldName}} &rarr; {{end}}{{$file.Name}}</span>
<div class="ui right"> <div class="ui right">
{{if $file.IsDeleted}} {{if $file.IsDeleted}}
<a class="ui basic tiny button" rel="nofollow" href="{{EscapePound $.BeforeSourcePath}}/{{EscapePound .Name}}">{{$.i18n.Tr "repo.diff.view_file"}}</a> <a class="ui basic tiny button" rel="nofollow" href="{{EscapePound $.BeforeSourcePath}}/{{EscapePound .Name}}">{{$.i18n.Tr "repo.diff.view_file"}}</a>