mirror of
				https://gitee.com/gitea/gitea
				synced 2025-11-04 16:40:24 +08:00 
			
		
		
		
	Link to previous commited source file (diff.view_file button) instead of returning 404 for deleted files.
This commit is contained in:
		@@ -60,6 +60,8 @@ type DiffFile struct {
 | 
				
			|||||||
	Index              int
 | 
						Index              int
 | 
				
			||||||
	Addition, Deletion int
 | 
						Addition, Deletion int
 | 
				
			||||||
	Type               int
 | 
						Type               int
 | 
				
			||||||
 | 
						IsCreated          bool
 | 
				
			||||||
 | 
						IsDeleted          bool
 | 
				
			||||||
	IsBin              bool
 | 
						IsBin              bool
 | 
				
			||||||
	Sections           []*DiffSection
 | 
						Sections           []*DiffSection
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
@@ -181,10 +183,16 @@ 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
 | 
				
			||||||
				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
 | 
				
			||||||
				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
 | 
				
			||||||
 | 
										curFile.IsDeleted = false
 | 
				
			||||||
				}
 | 
									}
 | 
				
			||||||
				if curFile.Type > 0 {
 | 
									if curFile.Type > 0 {
 | 
				
			||||||
					break
 | 
										break
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -253,6 +253,9 @@ func Diff(ctx *middleware.Context) {
 | 
				
			|||||||
	ctx.Data["Parents"] = parents
 | 
						ctx.Data["Parents"] = parents
 | 
				
			||||||
	ctx.Data["DiffNotAvailable"] = diff.NumFiles() == 0
 | 
						ctx.Data["DiffNotAvailable"] = diff.NumFiles() == 0
 | 
				
			||||||
	ctx.Data["SourcePath"] = setting.AppSubUrl + "/" + path.Join(userName, repoName, "src", commitId)
 | 
						ctx.Data["SourcePath"] = setting.AppSubUrl + "/" + path.Join(userName, repoName, "src", commitId)
 | 
				
			||||||
 | 
						if (commit.ParentCount() > 0) {
 | 
				
			||||||
 | 
							ctx.Data["BeforeSourcePath"] = setting.AppSubUrl + "/" + path.Join(userName, repoName, "src", parents[0])
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
	ctx.Data["RawPath"] = setting.AppSubUrl + "/" + path.Join(userName, repoName, "raw", commitId)
 | 
						ctx.Data["RawPath"] = setting.AppSubUrl + "/" + path.Join(userName, repoName, "raw", commitId)
 | 
				
			||||||
	ctx.HTML(200, DIFF)
 | 
						ctx.HTML(200, DIFF)
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
@@ -316,6 +319,7 @@ func CompareDiff(ctx *middleware.Context) {
 | 
				
			|||||||
	ctx.Data["Diff"] = diff
 | 
						ctx.Data["Diff"] = diff
 | 
				
			||||||
	ctx.Data["DiffNotAvailable"] = diff.NumFiles() == 0
 | 
						ctx.Data["DiffNotAvailable"] = diff.NumFiles() == 0
 | 
				
			||||||
	ctx.Data["SourcePath"] = setting.AppSubUrl + "/" + path.Join(userName, repoName, "src", afterCommitId)
 | 
						ctx.Data["SourcePath"] = setting.AppSubUrl + "/" + path.Join(userName, repoName, "src", afterCommitId)
 | 
				
			||||||
 | 
						ctx.Data["BeforeSourcePath"] = setting.AppSubUrl + "/" + path.Join(userName, repoName, "src", beforeCommitId)
 | 
				
			||||||
	ctx.Data["RawPath"] = setting.AppSubUrl + "/" + path.Join(userName, repoName, "raw", afterCommitId)
 | 
						ctx.Data["RawPath"] = setting.AppSubUrl + "/" + path.Join(userName, repoName, "raw", afterCommitId)
 | 
				
			||||||
	ctx.HTML(200, DIFF)
 | 
						ctx.HTML(200, DIFF)
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -89,7 +89,11 @@
 | 
				
			|||||||
                    {{$.i18n.Tr "repo.diff.bin"}}
 | 
					                    {{$.i18n.Tr "repo.diff.bin"}}
 | 
				
			||||||
                    {{end}}
 | 
					                    {{end}}
 | 
				
			||||||
                </div>
 | 
					                </div>
 | 
				
			||||||
 | 
					                {{if $file.IsDeleted}}
 | 
				
			||||||
 | 
					                <a class="btn btn-gray btn-header btn-radius text-black pull-right" rel="nofollow" href="{{$.BeforeSourcePath}}/{{.Name}}">{{$.i18n.Tr "repo.diff.view_file"}}</a>
 | 
				
			||||||
 | 
					                {{else}}
 | 
				
			||||||
                <a class="btn btn-gray btn-header btn-radius text-black pull-right" rel="nofollow" href="{{$.SourcePath}}/{{.Name}}">{{$.i18n.Tr "repo.diff.view_file"}}</a>
 | 
					                <a class="btn btn-gray btn-header btn-radius text-black pull-right" rel="nofollow" href="{{$.SourcePath}}/{{.Name}}">{{$.i18n.Tr "repo.diff.view_file"}}</a>
 | 
				
			||||||
 | 
					                {{end}}
 | 
				
			||||||
                <span class="file">{{$file.Name}}</span>
 | 
					                <span class="file">{{$file.Name}}</span>
 | 
				
			||||||
            </div>
 | 
					            </div>
 | 
				
			||||||
            {{$isImage := (call $.IsImageFile $file.Name)}}
 | 
					            {{$isImage := (call $.IsImageFile $file.Name)}}
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user