Browse Source

More on diff page

Unknown 11 years ago
parent
commit
ed9b7d2db9
5 changed files with 45 additions and 18 deletions
  1. 1 1
      gogs.go
  2. 29 16
      models/git.go
  3. 1 0
      modules/base/template.go
  4. 13 0
      modules/base/tool.go
  5. 1 1
      templates/repo/diff.tmpl

+ 1 - 1
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

+ 29 - 16
models/git.go

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

+ 1 - 0
modules/base/template.go

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

+ 13 - 0
modules/base/tool.go

@@ -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"
+	}
+}

+ 1 - 1
templates/repo/diff.tmpl

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