]> source.dussan.org Git - gitea.git/commitdiff
More on diff page
authorUnknown <joe2010xtmf@163.com>
Wed, 26 Mar 2014 11:24:20 +0000 (07:24 -0400)
committerUnknown <joe2010xtmf@163.com>
Wed, 26 Mar 2014 11:24:20 +0000 (07:24 -0400)
gogs.go
models/git.go
modules/base/template.go
modules/base/tool.go
templates/repo/diff.tmpl

diff --git a/gogs.go b/gogs.go
index f5a328add96a728324f34dc920c76a7d291639ea..d88a2bc6f4a373d6a793e2a85cc319e208d40e78 100644 (file)
--- a/gogs.go
+++ b/gogs.go
@@ -19,7 +19,7 @@ import (
 // Test that go1.2 tag above is included in builds. main.go refers to this definition.
 const go12tag = true
 
-const APP_VER = "0.1.8.0325"
+const APP_VER = "0.1.8.0326"
 
 func init() {
        base.AppVer = APP_VER
index ce4434ca5f14a2ceaa30e427a37135aeeabff38e..00621776d02a78055a74af028eb279e85d1afa8c 100644 (file)
@@ -274,7 +274,6 @@ const DIFF_HEAD = "diff --git "
 
 func ParsePatch(reader io.Reader) (*Diff, error) {
        scanner := bufio.NewScanner(reader)
-       var totalAdd, totalDel int
        var curFile *DiffFile
        curSection := &DiffSection{
                Lines: make([]*DiffLine, 0, 10),
@@ -285,6 +284,10 @@ func ParsePatch(reader io.Reader) (*Diff, error) {
        for scanner.Scan() {
                line := scanner.Text()
                fmt.Println(i, line)
+               if strings.HasPrefix(line, "+++ ") || strings.HasPrefix(line, "--- ") {
+                       continue
+               }
+
                i = i + 1
                if line == "" {
                        continue
@@ -300,40 +303,51 @@ func ParsePatch(reader io.Reader) (*Diff, error) {
                        diffLine := &DiffLine{Type: DIFF_LINE_SECTION, Content: "@@" + ss[len(ss)-2] + "@@"}
                        curSection.Lines = append(curSection.Lines, diffLine)
 
-                       diffLine = &DiffLine{Type: DIFF_LINE_PLAIN, Content: ss[len(ss)-1]}
-                       curSection.Lines = append(curSection.Lines, diffLine)
+                       if len(ss[len(ss)-1]) > 0 {
+                               diffLine = &DiffLine{Type: DIFF_LINE_PLAIN, Content: ss[len(ss)-1]}
+                               curSection.Lines = append(curSection.Lines, diffLine)
+                       }
                        continue
                } else if line[0] == '+' {
+                       curFile.Addition++
+                       diff.TotalAddition++
                        diffLine := &DiffLine{Type: DIFF_LINE_ADD, Content: line}
                        curSection.Lines = append(curSection.Lines, diffLine)
                        continue
                } else if line[0] == '-' {
+                       curFile.Deletion++
+                       diff.TotalDeletion++
                        diffLine := &DiffLine{Type: DIFF_LINE_DEL, Content: line}
                        curSection.Lines = append(curSection.Lines, diffLine)
                        continue
                }
 
+               // Get new file.
                if strings.HasPrefix(line, DIFF_HEAD) {
-                       if curFile != nil {
-                               curFile.Addition, totalAdd = totalAdd, 0
-                               curFile.Deletion, totalDel = totalDel, 0
-                               curFile = nil
-                       }
                        fs := strings.Split(line[len(DIFF_HEAD):], " ")
                        a := fs[0]
 
                        curFile = &DiffFile{
                                Name:     a[strings.Index(a, "/")+1:],
                                Type:     DIFF_FILE_CHANGE,
-                               Sections: make([]*DiffSection, 0),
+                               Sections: make([]*DiffSection, 0, 10),
                        }
                        diff.Files = append(diff.Files, curFile)
-                       scanner.Scan()
-                       scanner.Scan()
-                       if scanner.Text() == "--- /dev/null" {
-                               curFile.Type = DIFF_FILE_ADD
+
+                       // Check file diff type.
+                       for scanner.Scan() {
+                               switch {
+                               case strings.HasPrefix(scanner.Text(), "new file"):
+                                       curFile.Type = DIFF_FILE_ADD
+                               case strings.HasPrefix(scanner.Text(), "deleted"):
+                                       curFile.Type = DIFF_FILE_DEL
+                               case strings.HasPrefix(scanner.Text(), "index"):
+                                       curFile.Type = DIFF_FILE_CHANGE
+                               }
+                               if curFile.Type > 0 {
+                                       break
+                               }
                        }
-                       scanner.Scan()
                }
        }
 
@@ -351,14 +365,13 @@ func GetDiff(repoPath, commitid string) (*Diff, error) {
                return nil, err
        }
 
-       // ????
        if commit.ParentCount() == 0 {
                return &Diff{}, err
        }
 
        rd, wr := io.Pipe()
        go func() {
-               cmd := exec.Command("git", "diff", commitid, commit.Parent(0).Oid.String())
+               cmd := exec.Command("git", "diff", commit.Parent(0).Oid.String(), commitid)
                cmd.Dir = repoPath
                cmd.Stdout = wr
                cmd.Stdin = os.Stdin
index 8d95dbeab711acb185a999caae7be2911ed1c4e5..e577bd7c35e7926ee9ac416ea4877eaadecc0f51 100644 (file)
@@ -70,4 +70,5 @@ var TemplateFuncs template.FuncMap = map[string]interface{}{
        "SubStr": func(str string, start, length int) string {
                return str[start : start+length]
        },
+       "DiffTypeToStr": DiffTypeToStr,
 }
index 8f38d492a57d5eb1de504383bbcac00998088684..15d42fa7519d07e7a8af0d4037afb857017275a4 100644 (file)
@@ -539,3 +539,16 @@ func ActionDesc(act Actioner, avatarLink string) string {
                return "invalid type"
        }
 }
+
+func DiffTypeToStr(diffType int) string {
+       switch diffType {
+       case 1:
+               return "add"
+       case 2:
+               return "modify"
+       case 3:
+               return "del"
+       default:
+               return "unknown"
+       }
+}
index c05f4d2ffda08f9626832821012a9841b395d84a..ab13c4017469af01fb2356083e80ca950b2d967d 100644 (file)
@@ -39,7 +39,7 @@
                         <span class="del" data-line="{{.Deletion}}">{{.Deletion}}</span>
                     </div>
                     <!-- todo finish all file status, now modify, add, delete and rename -->
-                    <span class="status modify" data-toggle="tooltip" data-placement="right" title="modify">&nbsp;</span>
+                    <span class="status {{DiffTypeToStr .Type}}" data-toggle="tooltip" data-placement="right" title="{{DiffTypeToStr .Type}}">&nbsp;</span>
                     <a class="file" href="#diff-1">{{.Name}}</a>
                 </li>
                 {{end}}