aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--gogs.go2
-rw-r--r--models/git_diff.go29
-rw-r--r--public/css/gogs.css26
-rw-r--r--public/js/gogs.js14
-rw-r--r--public/less/_repository.less38
-rw-r--r--templates/.VERSION2
-rw-r--r--templates/repo/diff/section_unified.tmpl14
7 files changed, 82 insertions, 43 deletions
diff --git a/gogs.go b/gogs.go
index b4827b5b..76a4a107 100644
--- a/gogs.go
+++ b/gogs.go
@@ -16,7 +16,7 @@ import (
"github.com/gogits/gogs/modules/setting"
)
-const APP_VER = "0.9.160.0220"
+const APP_VER = "0.9.161.0220"
func init() {
setting.AppVer = APP_VER
diff --git a/models/git_diff.go b/models/git_diff.go
index c470e4a2..f61e88d4 100644
--- a/models/git_diff.go
+++ b/models/git_diff.go
@@ -188,7 +188,7 @@ func (diffSection *DiffSection) GetComputedInlineDiffFor(diffLine *DiffLine) tem
type DiffFile struct {
Name string
OldName string
- Index int
+ Index string // 40-byte SHA, Changed/New: new SHA; Deleted: old SHA
Addition, Deletion int
Type DiffFileType
IsCreated bool
@@ -331,7 +331,6 @@ func ParsePatch(maxLines, maxLineCharacteres, maxFiles int, reader io.Reader) (*
curFile = &DiffFile{
Name: a,
- Index: len(diff.Files) + 1,
Type: DIFF_FILE_CHANGE,
Sections: make([]*DiffSection, 0, 10),
}
@@ -343,7 +342,8 @@ func ParsePatch(maxLines, maxLineCharacteres, maxFiles int, reader io.Reader) (*
}
curFileLinesCount = 0
- // Check file diff type and is submodule.
+ // Check file diff type and submodule.
+ CHECK_TYPE:
for {
line, err := input.ReadString('\n')
if err != nil {
@@ -358,22 +358,25 @@ func ParsePatch(maxLines, maxLineCharacteres, maxFiles int, reader io.Reader) (*
case strings.HasPrefix(line, "new file"):
curFile.Type = DIFF_FILE_ADD
curFile.IsCreated = true
+ curFile.IsSubmodule = strings.HasSuffix(line, " 160000\n")
case strings.HasPrefix(line, "deleted"):
curFile.Type = DIFF_FILE_DEL
curFile.IsDeleted = true
+ curFile.IsSubmodule = strings.HasSuffix(line, " 160000\n")
case strings.HasPrefix(line, "index"):
- curFile.Type = DIFF_FILE_CHANGE
+ if curFile.IsDeleted {
+ curFile.Index = line[6:46]
+ } else {
+ curFile.Index = line[49:88]
+ }
+ break CHECK_TYPE
case strings.HasPrefix(line, "similarity index 100%"):
curFile.Type = DIFF_FILE_RENAME
curFile.IsRenamed = true
curFile.OldName = curFile.Name
curFile.Name = b
- }
- if curFile.Type > 0 {
- if strings.HasSuffix(line, " 160000\n") {
- curFile.IsSubmodule = true
- }
- break
+ curFile.Index = b
+ break CHECK_TYPE
}
}
}
@@ -423,13 +426,13 @@ func GetDiffRange(repoPath, beforeCommitID, afterCommitID string, maxLines, maxL
if len(beforeCommitID) == 0 {
// First commit of repository.
if commit.ParentCount() == 0 {
- cmd = exec.Command("git", "show", afterCommitID)
+ cmd = exec.Command("git", "show", "--full-index", afterCommitID)
} else {
c, _ := commit.Parent(0)
- cmd = exec.Command("git", "diff", "-M", c.ID.String(), afterCommitID)
+ cmd = exec.Command("git", "diff", "--full-index", "-M", c.ID.String(), afterCommitID)
}
} else {
- cmd = exec.Command("git", "diff", "-M", beforeCommitID, afterCommitID)
+ cmd = exec.Command("git", "diff", "--full-index", "-M", beforeCommitID, afterCommitID)
}
cmd.Dir = repoPath
cmd.Stderr = os.Stderr
diff --git a/public/css/gogs.css b/public/css/gogs.css
index 2b044a92..ed6ef2a9 100644
--- a/public/css/gogs.css
+++ b/public/css/gogs.css
@@ -2065,8 +2065,15 @@ footer .ui.language .menu {
border-right: 1px solid #d4d4d5;
padding: 0 5px;
}
-.repository .diff-file-box .code-diff tbody tr.tag-code td,
-.repository .diff-file-box .code-diff tbody tr.tag-code pre {
+.repository .diff-file-box .code-diff .lines-num.lines-num-old,
+.repository .diff-file-box .code-diff .lines-num.lines-num-new {
+ cursor: pointer;
+}
+.repository .diff-file-box .code-diff .lines-num.lines-num-old:hover,
+.repository .diff-file-box .code-diff .lines-num.lines-num-new:hover {
+ color: #383636;
+}
+.repository .diff-file-box .code-diff tbody tr.tag-code td {
background-color: #F0F0F0 !important;
border-color: #D2CECE!important;
padding-top: 4px;
@@ -2075,6 +2082,9 @@ footer .ui.language .menu {
.repository .diff-file-box .code-diff tbody tr.tag-code td.halfwidth {
width: 50%;
}
+.repository .diff-file-box .code-diff tbody tr.same-code td.active {
+ background-color: #ffffdd !important;
+}
.repository .diff-file-box .code-diff tbody tr.del-code td.add-code {
background-color: #eaffea !important;
border-color: #c1e9c1 !important;
@@ -2083,22 +2093,26 @@ footer .ui.language .menu {
background-color: #eaffea !important;
border-color: #c1e9c1 !important;
}
-.repository .diff-file-box .code-diff tbody tr.del-code td,
-.repository .diff-file-box .code-diff tbody tr.del-code pre {
+.repository .diff-file-box .code-diff tbody tr.del-code td {
background-color: #ffecec !important;
border-color: #f1c0c0 !important;
}
+.repository .diff-file-box .code-diff tbody tr.del-code td.active {
+ background-color: #ffffdd !important;
+}
.repository .diff-file-box .code-diff tbody tr.del-code td.halfwidth {
width: 50%;
}
-.repository .diff-file-box .code-diff tbody tr.add-code td,
-.repository .diff-file-box .code-diff tbody tr.add-code pre {
+.repository .diff-file-box .code-diff tbody tr.add-code td {
background-color: #eaffea !important;
border-color: #c1e9c1 !important;
}
.repository .diff-file-box .code-diff tbody tr.add-code td.halfwidth {
width: 50%;
}
+.repository .diff-file-box .code-diff tbody tr.add-code td.active {
+ background-color: #ffffdd !important;
+}
.repository .diff-file-box .code-diff tbody tr .removed-code {
background-color: #ff9999;
}
diff --git a/public/js/gogs.js b/public/js/gogs.js
index b7770fde..2cd98d3b 100644
--- a/public/js/gogs.js
+++ b/public/js/gogs.js
@@ -542,6 +542,20 @@ function initRepository() {
$item.find(".bar .add").css("width", addPercent + "%");
});
}
+
+ $('.diff-file-box .lines-num').click(function () {
+ if ($(this).attr('id')) {
+ window.location.href = '#' + $(this).attr('id');
+ }
+ });
+
+ $(window).on('hashchange', function (e) {
+ $('.diff-file-box .lines-code.active').removeClass('active');
+ var m = window.location.hash.match(/^#diff-.+$/);
+ if (m) {
+ $(m[0]).siblings('.lines-code').addClass('active');
+ }
+ }).trigger('hashchange');
}
// Quick start and repository home
diff --git a/public/less/_repository.less b/public/less/_repository.less
index a39d2f75..f80f9d56 100644
--- a/public/less/_repository.less
+++ b/public/less/_repository.less
@@ -1005,12 +1005,19 @@
.lines-num {
border-right: 1px solid #d4d4d5;
padding: 0 5px;
+
+ &.lines-num-old, &.lines-num-new {
+ cursor: pointer;
+ &:hover {
+ color: #383636;
+ }
+ }
}
tbody {
tr {
&.tag-code {
- td, pre {
+ td {
background-color: #F0F0F0 !important;
border-color: #D2CECE!important;
padding-top: 4px;
@@ -1019,15 +1026,12 @@
td.halfwidth {
width: 50%;
}
- // td.selected-line, td.selected-line pre {
- // background-color: #ffffdd !important;
- // }
}
- // &.same-code {
- // td.selected-line, td.selected-line pre {
- // background-color: #ffffdd !important;
- // }
- // }
+ &.same-code {
+ td.active {
+ background-color: #ffffdd !important;
+ }
+ }
&.del-code {
// Duplicate here to enforce add code color.
td.add-code {
@@ -1039,29 +1043,29 @@
}
}
- td, pre {
+ td {
background-color: #ffecec !important;
border-color: #f1c0c0 !important;
}
+ td.active {
+ background-color: #ffffdd !important;
+ }
td.halfwidth {
width: 50%;
}
- // td.selected-line, td.selected-line pre {
- // background-color: #ffffdd !important;
- // }
}
&.add-code {
- td, pre {
+ td {
background-color: #eaffea !important;
border-color: #c1e9c1 !important;
}
td.halfwidth {
width: 50%;
}
- // td.selected-line, td.selected-line pre {
- // background-color: #ffffdd !important;
- // }
+ td.active {
+ background-color: #ffffdd !important;
+ }
}
.removed-code {
diff --git a/templates/.VERSION b/templates/.VERSION
index 572fb6cc..720049a6 100644
--- a/templates/.VERSION
+++ b/templates/.VERSION
@@ -1 +1 @@
-0.9.160.0220 \ No newline at end of file
+0.9.161.0220 \ No newline at end of file
diff --git a/templates/repo/diff/section_unified.tmpl b/templates/repo/diff/section_unified.tmpl
index ee66b6dc..f5ea81f1 100644
--- a/templates/repo/diff/section_unified.tmpl
+++ b/templates/repo/diff/section_unified.tmpl
@@ -8,14 +8,18 @@
{{/* {{if gt $j 0}}<span class="fold octicon octicon-fold"></span>{{end}} */}}
</td>
{{else}}
- <td class="lines-num lines-num-old">
- <span rel="{{if $line.LeftIdx}}diff-{{Sha1 $file.Name}}L{{$line.LeftIdx}}{{end}}">{{if $line.LeftIdx}}{{$line.LeftIdx}}{{end}}</span>
+ <td class="lines-num lines-num-old" {{if $line.LeftIdx}}id="diff-{{$file.Index}}L{{$line.LeftIdx}}"{{end}}>
+ {{if $line.LeftIdx}}
+ <span>{{$line.LeftIdx}}</span>
+ {{end}}
</td>
- <td class="lines-num lines-num-new">
- <span rel="{{if $line.RightIdx}}diff-{{Sha1 $file.Name}}R{{$line.RightIdx}}{{end}}">{{if $line.RightIdx}}{{$line.RightIdx}}{{end}}</span>
+ <td class="lines-num lines-num-new" {{if $line.RightIdx}}id="diff-{{$file.Index}}R{{$line.RightIdx}}"{{end}}>
+ {{if $line.RightIdx}}
+ <span>{{$line.RightIdx}}</span>
+ {{end}}
</td>
{{end}}
- <td class="lines-code">
+ <td class="lines-code" rel="">
<pre><code class="{{if $highlightClass}}language-{{$highlightClass}}{{else}}nohighlight{{end}}">{{$section.GetComputedInlineDiffFor $line}}</code></pre>
</td>
</tr>