Browse Source

fix #1078

pull/1890/head
Unknwon 9 years ago
parent
commit
bc82157216
  1. 2
      README.md
  2. 2
      gogs.go
  3. 40
      models/git_diff.go
  4. 2
      templates/.VERSION
  5. 20
      templates/repo/diff_box.tmpl

2
README.md

@ -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>

2
gogs.go

@ -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())

40
models/git_diff.go

@ -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]
// Note: In case file name is surrounded by double quotes(it happens only in git-shell).
hasQuote := strings.Index(line, `\"`) > -1
if hasQuote {
line = strings.Replace(line, `\"`, `"`, -1)
middle = strings.Index(line, ` "b/`)
} else {
middle = strings.Index(line, " b/")
}
// In case file name is surrounded by double quotes(it happens only in git-shell). beg := len(DIFF_HEAD)
if a[0] == '"' { a := line[beg+2 : middle]
b := line[middle+3:]
if hasQuote {
a = a[1 : len(a)-1] a = a[1 : len(a)-1]
a = strings.Replace(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

2
templates/.VERSION

@ -1 +1 @@
0.6.21.1102 Beta 0.6.22.1102 Beta

20
templates/repo/diff_box.tmpl

@ -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>

Loading…
Cancel
Save