From 69b724596cc2a1c41a3b2007b18eb6d0774b69d4 Mon Sep 17 00:00:00 2001 From: Mario Lubenka Date: Thu, 26 Sep 2019 09:52:22 +0200 Subject: [PATCH 1/9] Resolve error when comparing images Signed-off-by: Mario Lubenka --- routers/repo/pull.go | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/routers/repo/pull.go b/routers/repo/pull.go index 180d592e3dbf8..b6e04720ce4d1 100644 --- a/routers/repo/pull.go +++ b/routers/repo/pull.go @@ -574,6 +574,19 @@ func ViewPullFiles(ctx *context.Context) { } return result } + ctx.Data["FileExistsInBaseCommit"] = func(filename string) bool { + result, err := baseCommit.HasFile(filename) + if err != nil { + log.Error( + "Error while checking if file \"%s\" exists in base commit \"%s\" (repo: %s): %v", + filename, + baseCommit, + ctx.Repo.GitRepo.Path, + err) + return false + } + return result + } ctx.Data["ImageInfo"] = func(name string) *git.ImageMetaData { result, err := commit.ImageInfo(name) if err != nil { From 6ba576d8ed3be2e50952e09babc015e970f692fb Mon Sep 17 00:00:00 2001 From: Mario Lubenka Date: Thu, 26 Sep 2019 09:52:56 +0200 Subject: [PATCH 2/9] Check blob existence instead of git-ls when checking if file exists Signed-off-by: Mario Lubenka --- modules/git/commit.go | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/modules/git/commit.go b/modules/git/commit.go index 83e03c27956eb..eb442f988d497 100644 --- a/modules/git/commit.go +++ b/modules/git/commit.go @@ -355,8 +355,11 @@ func (c *Commit) FileChangedSinceCommit(filename, pastCommit string) (bool, erro // HasFile returns true if the file given exists on this commit // This does only mean it's there - it does not mean the file was changed during the commit. func (c *Commit) HasFile(filename string) (bool, error) { - result, err := c.repo.LsFiles(filename) - return result[0] == filename, err + _, err := c.GetBlobByPath(filename) + if err != nil { + return false, err + } + return true, nil } // GetSubModules get all the sub modules of current revision git tree From 4357d93a5520d4d021b994ca5f0b483876c9192f Mon Sep 17 00:00:00 2001 From: Mario Lubenka Date: Thu, 26 Sep 2019 09:53:31 +0200 Subject: [PATCH 3/9] Show file metadata also when a file was newly added Signed-off-by: Mario Lubenka --- templates/repo/diff/image_diff.tmpl | 46 ++++++++++++++++++++++++----- 1 file changed, 39 insertions(+), 7 deletions(-) diff --git a/templates/repo/diff/image_diff.tmpl b/templates/repo/diff/image_diff.tmpl index 8fa7f6b872f79..b4fe5efe76b9b 100644 --- a/templates/repo/diff/image_diff.tmpl +++ b/templates/repo/diff/image_diff.tmpl @@ -26,21 +26,53 @@ {{ $imageInfoBase := (call .root.ImageInfoBase .file.OldName) }} {{ $imageInfoHead := (call .root.ImageInfo .file.Name) }} -{{if and $imageInfoBase $imageInfoHead }} +{{if or $imageInfoBase $imageInfoHead }} - {{.root.i18n.Tr "repo.diff.file_image_width"}}: {{$imageInfoBase.Width}} + {{if $imageInfoBase }} + {{ $classWidth := "" }} + {{ $classHeight := "" }} + {{ $classByteSize := "" }} + {{if $imageInfoHead}} + {{if not (eq $imageInfoBase.Width $imageInfoHead.Width)}} + {{ $classWidth = "red" }} + {{end}} + {{if not (eq $imageInfoBase.Height $imageInfoHead.Height)}} + {{ $classHeight = "red" }} + {{end}} + {{if not (eq $imageInfoBase.ByteSize $imageInfoHead.ByteSize)}} + {{ $classByteSize = "red" }} + {{end}} + {{end}} + {{.root.i18n.Tr "repo.diff.file_image_width"}}: {{$imageInfoBase.Width}}  |  - {{.root.i18n.Tr "repo.diff.file_image_height"}}: {{$imageInfoBase.Height}} + {{.root.i18n.Tr "repo.diff.file_image_height"}}: {{$imageInfoBase.Height}}  |  - {{.root.i18n.Tr "repo.diff.file_byte_size"}}: {{FileSize $imageInfoBase.ByteSize}} + {{.root.i18n.Tr "repo.diff.file_byte_size"}}: {{FileSize $imageInfoBase.ByteSize}} + {{end}} - {{.root.i18n.Tr "repo.diff.file_image_width"}}: {{$imageInfoHead.Width}} + {{if $imageInfoHead }} + {{ $classWidth := "" }} + {{ $classHeight := "" }} + {{ $classByteSize := "" }} + {{if $imageInfoBase}} + {{if not (eq $imageInfoBase.Width $imageInfoHead.Width)}} + {{ $classWidth = "green" }} + {{end}} + {{if not (eq $imageInfoBase.Height $imageInfoHead.Height)}} + {{ $classHeight = "green" }} + {{end}} + {{if not (eq $imageInfoBase.ByteSize $imageInfoHead.ByteSize)}} + {{ $classByteSize = "green" }} + {{end}} + {{end}} + {{.root.i18n.Tr "repo.diff.file_image_width"}}: {{$imageInfoHead.Width}}  |  - {{.root.i18n.Tr "repo.diff.file_image_height"}}: {{$imageInfoHead.Height}} + {{.root.i18n.Tr "repo.diff.file_image_height"}}: {{$imageInfoHead.Height}}  |  - {{.root.i18n.Tr "repo.diff.file_byte_size"}}: {{FileSize $imageInfoHead.ByteSize}} + {{.root.i18n.Tr "repo.diff.file_byte_size"}}: {{FileSize $imageInfoHead.ByteSize}} + {{end}} {{end}} From 69b85ef16beb3cf6e2c4cb2c99f488cfe5acb5c5 Mon Sep 17 00:00:00 2001 From: Mario Lubenka Date: Thu, 26 Sep 2019 20:57:50 +0200 Subject: [PATCH 4/9] Fixes error in commit view Signed-off-by: Mario Lubenka --- routers/repo/commit.go | 19 +++++++++++++++++-- 1 file changed, 17 insertions(+), 2 deletions(-) diff --git a/routers/repo/commit.go b/routers/repo/commit.go index 919ebabf42a99..d299011f640fd 100644 --- a/routers/repo/commit.go +++ b/routers/repo/commit.go @@ -248,14 +248,29 @@ func Diff(ctx *context.Context) { } return result } - ctx.Data["ImageInfoBase"] = ctx.Data["ImageInfo"] + ctx.Data["FileExistsInBaseCommit"] = func(filename string) bool { + return false + } if commit.ParentCount() > 0 { parentCommit, err := ctx.Repo.GitRepo.GetCommit(parents[0]) if err != nil { ctx.NotFound("GetParentCommit", err) return } - ctx.Data["ImageInfo"] = parentCommit.ImageInfo + ctx.Data["ImageInfoBase"] = parentCommit.ImageInfo + ctx.Data["FileExistsInBaseCommit"] = func(filename string) bool { + result, err := parentCommit.HasFile(filename) + if err != nil { + log.Error( + "Error while checking if file \"%s\" exists in base commit \"%s\" (repo: %s): %v", + filename, + parentCommit, + ctx.Repo.GitRepo.Path, + err) + return false + } + return result + } } ctx.Data["Title"] = commit.Summary() + " · " + base.ShortSha(commitID) ctx.Data["Commit"] = commit From e1fda0d209e1065160e317b2853fe9aa49192f89 Mon Sep 17 00:00:00 2001 From: Mario Lubenka Date: Thu, 26 Sep 2019 21:29:19 +0200 Subject: [PATCH 5/9] Excludes assigning path and image infos for compare routers to service package Signed-off-by: Mario Lubenka --- routers/repo/commit.go | 40 ++++------------------ routers/repo/compare.go | 38 ++------------------- routers/repo/pull.go | 39 ++------------------- services/compare/compare.go | 67 +++++++++++++++++++++++++++++++++++++ 4 files changed, 80 insertions(+), 104 deletions(-) create mode 100644 services/compare/compare.go diff --git a/routers/repo/commit.go b/routers/repo/commit.go index d299011f640fd..1695522803e31 100644 --- a/routers/repo/commit.go +++ b/routers/repo/commit.go @@ -6,6 +6,7 @@ package repo import ( + "code.gitea.io/gitea/services/compare" "path" "strings" @@ -239,39 +240,18 @@ func Diff(ctx *context.Context) { ctx.Data["CommitID"] = commitID ctx.Data["Username"] = userName ctx.Data["Reponame"] = repoName - ctx.Data["IsImageFile"] = commit.IsImageFile - ctx.Data["ImageInfo"] = func(name string) *git.ImageMetaData { - result, err := commit.ImageInfo(name) - if err != nil { - log.Error("ImageInfo failed: %v", err) - return nil - } - return result - } - ctx.Data["FileExistsInBaseCommit"] = func(filename string) bool { - return false - } + + var parentCommit *git.Commit = nil if commit.ParentCount() > 0 { - parentCommit, err := ctx.Repo.GitRepo.GetCommit(parents[0]) + parentCommit, err = ctx.Repo.GitRepo.GetCommit(parents[0]) if err != nil { ctx.NotFound("GetParentCommit", err) return } - ctx.Data["ImageInfoBase"] = parentCommit.ImageInfo - ctx.Data["FileExistsInBaseCommit"] = func(filename string) bool { - result, err := parentCommit.HasFile(filename) - if err != nil { - log.Error( - "Error while checking if file \"%s\" exists in base commit \"%s\" (repo: %s): %v", - filename, - parentCommit, - ctx.Repo.GitRepo.Path, - err) - return false - } - return result - } } + compare.SetImageCompareContext(ctx, parentCommit, commit) + headTarget := path.Join(userName, repoName) + compare.SetPathsCompareContext(ctx, parentCommit, commit, headTarget) ctx.Data["Title"] = commit.Summary() + " · " + base.ShortSha(commitID) ctx.Data["Commit"] = commit ctx.Data["Verification"] = models.ParseCommitWithSignature(commit) @@ -279,8 +259,6 @@ func Diff(ctx *context.Context) { ctx.Data["Diff"] = diff ctx.Data["Parents"] = parents ctx.Data["DiffNotAvailable"] = diff.NumFiles() == 0 - ctx.Data["SourcePath"] = setting.AppSubURL + "/" + path.Join(userName, repoName, "src", "commit", commitID) - ctx.Data["RawPath"] = setting.AppSubURL + "/" + path.Join(userName, repoName, "raw", "commit", commitID) note := &git.Note{} err = git.GetNote(ctx.Repo.GitRepo, commitID, note) @@ -290,10 +268,6 @@ func Diff(ctx *context.Context) { ctx.Data["NoteAuthor"] = models.ValidateCommitWithEmail(note.Commit) } - if commit.ParentCount() > 0 { - ctx.Data["BeforeSourcePath"] = setting.AppSubURL + "/" + path.Join(userName, repoName, "src", "commit", parents[0]) - ctx.Data["BeforeRawPath"] = setting.AppSubURL + "/" + path.Join(userName, repoName, "raw", "commit", parents[0]) - } ctx.Data["BranchName"], err = commit.GetBranchName() if err != nil { ctx.ServerError("commit.GetBranchName", err) diff --git a/routers/repo/compare.go b/routers/repo/compare.go index 7c55dfca30020..289b5d340b317 100644 --- a/routers/repo/compare.go +++ b/routers/repo/compare.go @@ -14,6 +14,7 @@ import ( "code.gitea.io/gitea/modules/git" "code.gitea.io/gitea/modules/log" "code.gitea.io/gitea/modules/setting" + "code.gitea.io/gitea/services/compare" "code.gitea.io/gitea/services/gitdiff" ) @@ -291,43 +292,10 @@ func PrepareCompareDiff( ctx.Data["title"] = title ctx.Data["Username"] = headUser.Name ctx.Data["Reponame"] = headRepo.Name - ctx.Data["IsImageFile"] = headCommit.IsImageFile - ctx.Data["ImageInfo"] = func(name string) *git.ImageMetaData { - result, err := headCommit.ImageInfo(name) - if err != nil { - log.Error("ImageInfo failed: %v", err) - return nil - } - return result - } - ctx.Data["FileExistsInBaseCommit"] = func(filename string) bool { - result, err := baseCommit.HasFile(filename) - if err != nil { - log.Error( - "Error while checking if file \"%s\" exists in base commit \"%s\" (repo: %s): %v", - filename, - baseCommit, - baseGitRepo.Path, - err) - return false - } - return result - } - ctx.Data["ImageInfoBase"] = func(name string) *git.ImageMetaData { - result, err := baseCommit.ImageInfo(name) - if err != nil { - log.Error("ImageInfo failed: %v", err) - return nil - } - return result - } + compare.SetImageCompareContext(ctx, baseCommit, headCommit) headTarget := path.Join(headUser.Name, repo.Name) - baseTarget := path.Join(ctx.Repo.Owner.Name, ctx.Repo.Repository.Name) - ctx.Data["SourcePath"] = setting.AppSubURL + "/" + path.Join(headTarget, "src", "commit", headCommitID) - ctx.Data["RawPath"] = setting.AppSubURL + "/" + path.Join(headTarget, "raw", "commit", headCommitID) - ctx.Data["BeforeSourcePath"] = setting.AppSubURL + "/" + path.Join(baseTarget, "src", "commit", baseCommitID) - ctx.Data["BeforeRawPath"] = setting.AppSubURL + "/" + path.Join(baseTarget, "raw", "commit", baseCommitID) + compare.SetPathsCompareContext(ctx, baseCommit, headCommit, headTarget) return false } diff --git a/routers/repo/pull.go b/routers/repo/pull.go index b6e04720ce4d1..f6fd93de11cee 100644 --- a/routers/repo/pull.go +++ b/routers/repo/pull.go @@ -7,6 +7,7 @@ package repo import ( + "code.gitea.io/gitea/services/compare" "container/list" "crypto/subtle" "fmt" @@ -565,42 +566,8 @@ func ViewPullFiles(ctx *context.Context) { return } - ctx.Data["IsImageFile"] = commit.IsImageFile - ctx.Data["ImageInfoBase"] = func(name string) *git.ImageMetaData { - result, err := baseCommit.ImageInfo(name) - if err != nil { - log.Error("ImageInfo failed: %v", err) - return nil - } - return result - } - ctx.Data["FileExistsInBaseCommit"] = func(filename string) bool { - result, err := baseCommit.HasFile(filename) - if err != nil { - log.Error( - "Error while checking if file \"%s\" exists in base commit \"%s\" (repo: %s): %v", - filename, - baseCommit, - ctx.Repo.GitRepo.Path, - err) - return false - } - return result - } - ctx.Data["ImageInfo"] = func(name string) *git.ImageMetaData { - result, err := commit.ImageInfo(name) - if err != nil { - log.Error("ImageInfo failed: %v", err) - return nil - } - return result - } - - baseTarget := path.Join(ctx.Repo.Owner.Name, ctx.Repo.Repository.Name) - ctx.Data["SourcePath"] = setting.AppSubURL + "/" + path.Join(headTarget, "src", "commit", endCommitID) - ctx.Data["RawPath"] = setting.AppSubURL + "/" + path.Join(headTarget, "raw", "commit", endCommitID) - ctx.Data["BeforeSourcePath"] = setting.AppSubURL + "/" + path.Join(baseTarget, "src", "commit", startCommitID) - ctx.Data["BeforeRawPath"] = setting.AppSubURL + "/" + path.Join(baseTarget, "raw", "commit", startCommitID) + compare.SetImageCompareContext(ctx, baseCommit, commit) + compare.SetPathsCompareContext(ctx, baseCommit, commit, headTarget) ctx.Data["RequireHighlightJS"] = true ctx.Data["RequireTribute"] = true diff --git a/services/compare/compare.go b/services/compare/compare.go new file mode 100644 index 0000000000000..bb06ad1626a4b --- /dev/null +++ b/services/compare/compare.go @@ -0,0 +1,67 @@ +// Copyright 2019 The Gitea Authors. All rights reserved. +// Use of this source code is governed by a MIT-style +// license that can be found in the LICENSE file. + +package compare + +import ( + "fmt" + "path" + + "code.gitea.io/gitea/modules/context" + "code.gitea.io/gitea/modules/git" + "code.gitea.io/gitea/modules/log" + "code.gitea.io/gitea/modules/setting" +) + +func SetPathsCompareContext(ctx *context.Context, base *git.Commit, head *git.Commit, headTarget string) { + sourcePath := setting.AppSubURL + "/%s/src/commit/%s" + rawPath := setting.AppSubURL + "/%s/raw/commit/%s" + + ctx.Data["SourcePath"] = fmt.Sprintf(sourcePath, headTarget, head.ID) + ctx.Data["RawPath"] = fmt.Sprintf(rawPath, headTarget, head.ID) + if base != nil { + baseTarget := path.Join(ctx.Repo.Owner.Name, ctx.Repo.Repository.Name) + ctx.Data["BeforeSourcePath"] = fmt.Sprintf(sourcePath, baseTarget, base.ID) + ctx.Data["BeforeRawPath"] = fmt.Sprintf(rawPath, baseTarget, base.ID) + } +} + +func SetImageCompareContext(ctx *context.Context, base *git.Commit, head *git.Commit) { + ctx.Data["IsImageFile"] = head.IsImageFile + ctx.Data["ImageInfoBase"] = func(name string) *git.ImageMetaData { + if base == nil { + return nil + } + result, err := base.ImageInfo(name) + if err != nil { + log.Error("ImageInfo failed: %v", err) + return nil + } + return result + } + ctx.Data["FileExistsInBaseCommit"] = func(filename string) bool { + if base == nil { + return false + } + result, err := base.HasFile(filename) + if err != nil { + log.Error( + "Error while checking if file \"%s\" exists in base commit \"%s\" (repo: %s): %v", + filename, + base, + ctx.Repo.GitRepo.Path, + err) + return false + } + return result + } + ctx.Data["ImageInfo"] = func(name string) *git.ImageMetaData { + result, err := head.ImageInfo(name) + if err != nil { + log.Error("ImageInfo failed: %v", err) + return nil + } + return result + } +} From 1c464a1b9dca492f0fecfe221dd14671eb45cbc2 Mon Sep 17 00:00:00 2001 From: Mario Lubenka Date: Thu, 26 Sep 2019 21:44:54 +0200 Subject: [PATCH 6/9] Removes nil default and fixes import order Signed-off-by: Mario Lubenka --- routers/repo/commit.go | 4 ++-- routers/repo/pull.go | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/routers/repo/commit.go b/routers/repo/commit.go index 1695522803e31..0cc09efea82df 100644 --- a/routers/repo/commit.go +++ b/routers/repo/commit.go @@ -6,7 +6,6 @@ package repo import ( - "code.gitea.io/gitea/services/compare" "path" "strings" @@ -17,6 +16,7 @@ import ( "code.gitea.io/gitea/modules/git" "code.gitea.io/gitea/modules/log" "code.gitea.io/gitea/modules/setting" + "code.gitea.io/gitea/services/compare" "code.gitea.io/gitea/services/gitdiff" ) @@ -241,7 +241,7 @@ func Diff(ctx *context.Context) { ctx.Data["Username"] = userName ctx.Data["Reponame"] = repoName - var parentCommit *git.Commit = nil + var parentCommit *git.Commit if commit.ParentCount() > 0 { parentCommit, err = ctx.Repo.GitRepo.GetCommit(parents[0]) if err != nil { diff --git a/routers/repo/pull.go b/routers/repo/pull.go index f6fd93de11cee..d1cb862a0a2f7 100644 --- a/routers/repo/pull.go +++ b/routers/repo/pull.go @@ -7,7 +7,6 @@ package repo import ( - "code.gitea.io/gitea/services/compare" "container/list" "crypto/subtle" "fmt" @@ -26,6 +25,7 @@ import ( pull_service "code.gitea.io/gitea/modules/pull" "code.gitea.io/gitea/modules/setting" "code.gitea.io/gitea/modules/util" + "code.gitea.io/gitea/services/compare" "code.gitea.io/gitea/services/gitdiff" "github.com/unknwon/com" From 5a231e5401a161500acbdc58e6f5b3712037f79b Mon Sep 17 00:00:00 2001 From: Mario Lubenka Date: Thu, 26 Sep 2019 22:56:31 +0200 Subject: [PATCH 7/9] Adds missing comments Signed-off-by: Mario Lubenka --- services/compare/compare.go | 2 ++ 1 file changed, 2 insertions(+) diff --git a/services/compare/compare.go b/services/compare/compare.go index bb06ad1626a4b..f646d8e827f30 100644 --- a/services/compare/compare.go +++ b/services/compare/compare.go @@ -14,6 +14,7 @@ import ( "code.gitea.io/gitea/modules/setting" ) +// SetPathsCompareContext sets context data for source and raw paths func SetPathsCompareContext(ctx *context.Context, base *git.Commit, head *git.Commit, headTarget string) { sourcePath := setting.AppSubURL + "/%s/src/commit/%s" rawPath := setting.AppSubURL + "/%s/raw/commit/%s" @@ -27,6 +28,7 @@ func SetPathsCompareContext(ctx *context.Context, base *git.Commit, head *git.Co } } +// SetImageCompareContext sets context data that is required by image compare template func SetImageCompareContext(ctx *context.Context, base *git.Commit, head *git.Commit) { ctx.Data["IsImageFile"] = head.IsImageFile ctx.Data["ImageInfoBase"] = func(name string) *git.ImageMetaData { From 7f2d021891ca0d041032bbbfdf596f6b08190280 Mon Sep 17 00:00:00 2001 From: Mario Lubenka Date: Sat, 28 Sep 2019 23:13:12 +0200 Subject: [PATCH 8/9] Moves methods for assigning compare data to context into repo router package Signed-off-by: Mario Lubenka --- routers/repo/commit.go | 5 ++- routers/repo/compare.go | 60 ++++++++++++++++++++++++++++++-- routers/repo/pull.go | 5 ++- services/compare/compare.go | 69 ------------------------------------- 4 files changed, 61 insertions(+), 78 deletions(-) delete mode 100644 services/compare/compare.go diff --git a/routers/repo/commit.go b/routers/repo/commit.go index 0cc09efea82df..3cedf70319e0b 100644 --- a/routers/repo/commit.go +++ b/routers/repo/commit.go @@ -16,7 +16,6 @@ import ( "code.gitea.io/gitea/modules/git" "code.gitea.io/gitea/modules/log" "code.gitea.io/gitea/modules/setting" - "code.gitea.io/gitea/services/compare" "code.gitea.io/gitea/services/gitdiff" ) @@ -249,9 +248,9 @@ func Diff(ctx *context.Context) { return } } - compare.SetImageCompareContext(ctx, parentCommit, commit) + setImageCompareContext(ctx, parentCommit, commit) headTarget := path.Join(userName, repoName) - compare.SetPathsCompareContext(ctx, parentCommit, commit, headTarget) + setPathsCompareContext(ctx, parentCommit, commit, headTarget) ctx.Data["Title"] = commit.Summary() + " · " + base.ShortSha(commitID) ctx.Data["Commit"] = commit ctx.Data["Verification"] = models.ParseCommitWithSignature(commit) diff --git a/routers/repo/compare.go b/routers/repo/compare.go index 289b5d340b317..53cae24458fb9 100644 --- a/routers/repo/compare.go +++ b/routers/repo/compare.go @@ -5,6 +5,7 @@ package repo import ( + "fmt" "path" "strings" @@ -14,7 +15,6 @@ import ( "code.gitea.io/gitea/modules/git" "code.gitea.io/gitea/modules/log" "code.gitea.io/gitea/modules/setting" - "code.gitea.io/gitea/services/compare" "code.gitea.io/gitea/services/gitdiff" ) @@ -22,6 +22,60 @@ const ( tplCompare base.TplName = "repo/diff/compare" ) +// setPathsCompareContext sets context data for source and raw paths +func setPathsCompareContext(ctx *context.Context, base *git.Commit, head *git.Commit, headTarget string) { + sourcePath := setting.AppSubURL + "/%s/src/commit/%s" + rawPath := setting.AppSubURL + "/%s/raw/commit/%s" + + ctx.Data["SourcePath"] = fmt.Sprintf(sourcePath, headTarget, head.ID) + ctx.Data["RawPath"] = fmt.Sprintf(rawPath, headTarget, head.ID) + if base != nil { + baseTarget := path.Join(ctx.Repo.Owner.Name, ctx.Repo.Repository.Name) + ctx.Data["BeforeSourcePath"] = fmt.Sprintf(sourcePath, baseTarget, base.ID) + ctx.Data["BeforeRawPath"] = fmt.Sprintf(rawPath, baseTarget, base.ID) + } +} + +// setImageCompareContext sets context data that is required by image compare template +func setImageCompareContext(ctx *context.Context, base *git.Commit, head *git.Commit) { + ctx.Data["IsImageFile"] = head.IsImageFile + ctx.Data["ImageInfoBase"] = func(name string) *git.ImageMetaData { + if base == nil { + return nil + } + result, err := base.ImageInfo(name) + if err != nil { + log.Error("ImageInfo failed: %v", err) + return nil + } + return result + } + ctx.Data["FileExistsInBaseCommit"] = func(filename string) bool { + if base == nil { + return false + } + result, err := base.HasFile(filename) + if err != nil { + log.Error( + "Error while checking if file \"%s\" exists in base commit \"%s\" (repo: %s): %v", + filename, + base, + ctx.Repo.GitRepo.Path, + err) + return false + } + return result + } + ctx.Data["ImageInfo"] = func(name string) *git.ImageMetaData { + result, err := head.ImageInfo(name) + if err != nil { + log.Error("ImageInfo failed: %v", err) + return nil + } + return result + } +} + // ParseCompareInfo parse compare info between two commit for preparing comparing references func ParseCompareInfo(ctx *context.Context) (*models.User, *models.Repository, *git.Repository, *git.CompareInfo, string, string) { baseRepo := ctx.Repo.Repository @@ -293,9 +347,9 @@ func PrepareCompareDiff( ctx.Data["Username"] = headUser.Name ctx.Data["Reponame"] = headRepo.Name - compare.SetImageCompareContext(ctx, baseCommit, headCommit) + setImageCompareContext(ctx, baseCommit, headCommit) headTarget := path.Join(headUser.Name, repo.Name) - compare.SetPathsCompareContext(ctx, baseCommit, headCommit, headTarget) + setPathsCompareContext(ctx, baseCommit, headCommit, headTarget) return false } diff --git a/routers/repo/pull.go b/routers/repo/pull.go index d1cb862a0a2f7..519a32afc91d7 100644 --- a/routers/repo/pull.go +++ b/routers/repo/pull.go @@ -25,7 +25,6 @@ import ( pull_service "code.gitea.io/gitea/modules/pull" "code.gitea.io/gitea/modules/setting" "code.gitea.io/gitea/modules/util" - "code.gitea.io/gitea/services/compare" "code.gitea.io/gitea/services/gitdiff" "github.com/unknwon/com" @@ -566,8 +565,8 @@ func ViewPullFiles(ctx *context.Context) { return } - compare.SetImageCompareContext(ctx, baseCommit, commit) - compare.SetPathsCompareContext(ctx, baseCommit, commit, headTarget) + setImageCompareContext(ctx, baseCommit, commit) + setPathsCompareContext(ctx, baseCommit, commit, headTarget) ctx.Data["RequireHighlightJS"] = true ctx.Data["RequireTribute"] = true diff --git a/services/compare/compare.go b/services/compare/compare.go deleted file mode 100644 index f646d8e827f30..0000000000000 --- a/services/compare/compare.go +++ /dev/null @@ -1,69 +0,0 @@ -// Copyright 2019 The Gitea Authors. All rights reserved. -// Use of this source code is governed by a MIT-style -// license that can be found in the LICENSE file. - -package compare - -import ( - "fmt" - "path" - - "code.gitea.io/gitea/modules/context" - "code.gitea.io/gitea/modules/git" - "code.gitea.io/gitea/modules/log" - "code.gitea.io/gitea/modules/setting" -) - -// SetPathsCompareContext sets context data for source and raw paths -func SetPathsCompareContext(ctx *context.Context, base *git.Commit, head *git.Commit, headTarget string) { - sourcePath := setting.AppSubURL + "/%s/src/commit/%s" - rawPath := setting.AppSubURL + "/%s/raw/commit/%s" - - ctx.Data["SourcePath"] = fmt.Sprintf(sourcePath, headTarget, head.ID) - ctx.Data["RawPath"] = fmt.Sprintf(rawPath, headTarget, head.ID) - if base != nil { - baseTarget := path.Join(ctx.Repo.Owner.Name, ctx.Repo.Repository.Name) - ctx.Data["BeforeSourcePath"] = fmt.Sprintf(sourcePath, baseTarget, base.ID) - ctx.Data["BeforeRawPath"] = fmt.Sprintf(rawPath, baseTarget, base.ID) - } -} - -// SetImageCompareContext sets context data that is required by image compare template -func SetImageCompareContext(ctx *context.Context, base *git.Commit, head *git.Commit) { - ctx.Data["IsImageFile"] = head.IsImageFile - ctx.Data["ImageInfoBase"] = func(name string) *git.ImageMetaData { - if base == nil { - return nil - } - result, err := base.ImageInfo(name) - if err != nil { - log.Error("ImageInfo failed: %v", err) - return nil - } - return result - } - ctx.Data["FileExistsInBaseCommit"] = func(filename string) bool { - if base == nil { - return false - } - result, err := base.HasFile(filename) - if err != nil { - log.Error( - "Error while checking if file \"%s\" exists in base commit \"%s\" (repo: %s): %v", - filename, - base, - ctx.Repo.GitRepo.Path, - err) - return false - } - return result - } - ctx.Data["ImageInfo"] = func(name string) *git.ImageMetaData { - result, err := head.ImageInfo(name) - if err != nil { - log.Error("ImageInfo failed: %v", err) - return nil - } - return result - } -} From a0be8bccc396d854256d3a97b4c151f575faef10 Mon Sep 17 00:00:00 2001 From: Mario Lubenka Date: Fri, 4 Oct 2019 19:39:28 +0200 Subject: [PATCH 9/9] Show image compare for deleted images as well. Simplify check if image should be displayed Signed-off-by: Mario Lubenka --- routers/repo/compare.go | 19 ++----------------- templates/repo/diff/box.tmpl | 7 ++++++- templates/repo/diff/image_diff.tmpl | 11 ++++++----- 3 files changed, 14 insertions(+), 23 deletions(-) diff --git a/routers/repo/compare.go b/routers/repo/compare.go index 53cae24458fb9..f8534f68b77b6 100644 --- a/routers/repo/compare.go +++ b/routers/repo/compare.go @@ -38,7 +38,8 @@ func setPathsCompareContext(ctx *context.Context, base *git.Commit, head *git.Co // setImageCompareContext sets context data that is required by image compare template func setImageCompareContext(ctx *context.Context, base *git.Commit, head *git.Commit) { - ctx.Data["IsImageFile"] = head.IsImageFile + ctx.Data["IsImageFileInHead"] = head.IsImageFile + ctx.Data["IsImageFileInBase"] = base.IsImageFile ctx.Data["ImageInfoBase"] = func(name string) *git.ImageMetaData { if base == nil { return nil @@ -50,22 +51,6 @@ func setImageCompareContext(ctx *context.Context, base *git.Commit, head *git.Co } return result } - ctx.Data["FileExistsInBaseCommit"] = func(filename string) bool { - if base == nil { - return false - } - result, err := base.HasFile(filename) - if err != nil { - log.Error( - "Error while checking if file \"%s\" exists in base commit \"%s\" (repo: %s): %v", - filename, - base, - ctx.Repo.GitRepo.Path, - err) - return false - } - return result - } ctx.Data["ImageInfo"] = func(name string) *git.ImageMetaData { result, err := head.ImageInfo(name) if err != nil { diff --git a/templates/repo/diff/box.tmpl b/templates/repo/diff/box.tmpl index edc04f9068851..b5fde36a6f1fc 100644 --- a/templates/repo/diff/box.tmpl +++ b/templates/repo/diff/box.tmpl @@ -106,7 +106,12 @@
{{if ne $file.Type 4}} - {{$isImage := (call $.IsImageFile $file.Name)}} + {{$isImage := false}} + {{if $file.IsDeleted}} + {{$isImage = (call $.IsImageFileInBase $file.Name)}} + {{else}} + {{$isImage = (call $.IsImageFileInHead $file.Name)}} + {{end}}
diff --git a/templates/repo/diff/image_diff.tmpl b/templates/repo/diff/image_diff.tmpl index b4fe5efe76b9b..6afb985e9a98b 100644 --- a/templates/repo/diff/image_diff.tmpl +++ b/templates/repo/diff/image_diff.tmpl @@ -11,17 +11,18 @@ {{ $imageInfoBase := (call .root.ImageInfoBase .file.OldName) }}
- {{ $oldImageExists := (call .root.FileExistsInBaseCommit .file.OldName) }} - {{if $oldImageExists}} + {{if or .file.IsDeleted (not .file.IsCreated)}} {{end}} - - - + {{if or .file.IsCreated (not .file.IsDeleted)}} + + + + {{end}}