Browse Source

Make it compile

tags/v1.2.0-rc1
Unknown 11 years ago
parent
commit
ac3a653442
1 changed files with 33 additions and 32 deletions
  1. +33
    -32
      models/git.go

+ 33
- 32
models/git.go View File

@@ -5,14 +5,14 @@
package models package models


import ( import (
"bufio"
"container/list" "container/list"
"fmt" "fmt"
"path"
"strings"
"io" "io"
"bufio"
"os" "os"
"os/exec" "os/exec"
"path"
"strings"


"github.com/gogits/git" "github.com/gogits/git"
) )
@@ -228,28 +228,29 @@ func GetCommits(userName, reposName, branchname string) (*list.List, error) {
return r.AllCommits() return r.AllCommits()
} }


// Diff line types.
const ( const (
PlainLine = iota + 1
AddLine
DelLine
SectionLine
DIFF_LINE_PLAIN = iota + 1
DIFF_LINE_ADD
DIFF_LINE_DEL
DIFF_LINE_SECTION
) )


const ( const (
AddFile = iota + 1
ChangeFile
DelFile
DIFF_FILE_ADD = iota + 1
DIFF_FILE_CHANGE
DIFF_FILE_DEL
) )


type DiffLine struct { type DiffLine struct {
LeftIdx int
LeftIdx int
RightIdx int RightIdx int
Type int
Content string
Type int
Content string
} }


type DiffSection struct { type DiffSection struct {
Name string
Name string
Lines []*DiffLine Lines []*DiffLine
} }


@@ -257,7 +258,7 @@ type DiffFile struct {
Name string Name string
Addition, Deletion int Addition, Deletion int
Type int Type int
Sections []*DiffSection
Sections []*DiffSection
} }


type Diff struct { type Diff struct {
@@ -269,15 +270,17 @@ func (diff *Diff) NumFiles() int {
return len(diff.Files) return len(diff.Files)
} }


const diffHead = "diff --git "
const DIFF_HEAD = "diff --git "


func ParsePatch(reader io.Reader) (*Diff, error) { func ParsePatch(reader io.Reader) (*Diff, error) {
scanner := bufio.NewScanner(reader) scanner := bufio.NewScanner(reader)
var totalAdd, totalDel int var totalAdd, totalDel int
var curFile *DiffFile var curFile *DiffFile
var curSection * DiffSection
curSection := &DiffSection{
Lines: make([]*DiffLine, 0, 10),
}
//var leftLine, rightLine int //var leftLine, rightLine int
diff := &Diff{Files:make([]*DiffFile, 0)}
diff := &Diff{Files: make([]*DiffFile, 0)}
var i int var i int
for scanner.Scan() { for scanner.Scan() {
line := scanner.Text() line := scanner.Text()
@@ -287,50 +290,48 @@ func ParsePatch(reader io.Reader) (*Diff, error) {
continue continue
} }
if line[0] == ' ' { if line[0] == ' ' {
diffLine := &DiffLine{Type: PlainLine, Content:line}
diffLine := &DiffLine{Type: DIFF_LINE_PLAIN, Content: line}
curSection.Lines = append(curSection.Lines, diffLine) curSection.Lines = append(curSection.Lines, diffLine)
continue continue
} else if line[0] == '@' { } else if line[0] == '@' {
curSection = &DiffSection{} curSection = &DiffSection{}
curFile.Sections = append(curFile.Sections, curSection) curFile.Sections = append(curFile.Sections, curSection)
ss := strings.Split(line, "@@") ss := strings.Split(line, "@@")
diffLine := &DiffLine{Type: SectionLine, Content:"@@ "+ss[len(ss)-2]}
diffLine := &DiffLine{Type: DIFF_LINE_SECTION, Content: "@@" + ss[len(ss)-2] + "@@"}
curSection.Lines = append(curSection.Lines, diffLine) curSection.Lines = append(curSection.Lines, diffLine)




diffLine = &DiffLine{Type: PlainLine, Content:ss[len(ss)-1]}
diffLine = &DiffLine{Type: DIFF_LINE_PLAIN, Content: ss[len(ss)-1]}
curSection.Lines = append(curSection.Lines, diffLine) curSection.Lines = append(curSection.Lines, diffLine)
continue continue
} else if line[0] == '+' { } else if line[0] == '+' {
diffLine := &DiffLine{Type: AddLine, Content:line}
diffLine := &DiffLine{Type: DIFF_LINE_ADD, Content: line}
curSection.Lines = append(curSection.Lines, diffLine) curSection.Lines = append(curSection.Lines, diffLine)
continue continue
} else if line[0] == '-' { } else if line[0] == '-' {
diffLine := &DiffLine{Type: DelLine, Content:line}
diffLine := &DiffLine{Type: DIFF_LINE_DEL, Content: line}
curSection.Lines = append(curSection.Lines, diffLine) curSection.Lines = append(curSection.Lines, diffLine)
continue continue
} }


if strings.HasPrefix(line, diffHead) {
if strings.HasPrefix(line, DIFF_HEAD) {
if curFile != nil { if curFile != nil {
curFile.Addition, totalAdd = totalAdd, 0 curFile.Addition, totalAdd = totalAdd, 0
curFile.Deletion, totalDel = totalDel, 0 curFile.Deletion, totalDel = totalDel, 0
curFile = nil curFile = nil
} }
fs := strings.Split(line[len(diffHead):], " ")
fs := strings.Split(line[len(DIFF_HEAD):], " ")
a := fs[0] a := fs[0]
curFile = &DiffFile{ curFile = &DiffFile{
Name:a[strings.Index(a, "/")+1:],
Type: ChangeFile,
Sections:make([]*DiffSection, 0),
Name: a[strings.Index(a, "/")+1:],
Type: DIFF_FILE_CHANGE,
Sections: make([]*DiffSection, 0),
} }
diff.Files = append(diff.Files, curFile) diff.Files = append(diff.Files, curFile)
scanner.Scan() scanner.Scan()
scanner.Scan() scanner.Scan()
if scanner.Text() == "--- /dev/null" { if scanner.Text() == "--- /dev/null" {
curFile.Type = AddFile
curFile.Type = DIFF_FILE_ADD
} }
scanner.Scan() scanner.Scan()
} }


Loading…
Cancel
Save