Skip to content

Commit a4d34dd

Browse files
committed
fine tune edge cases
1 parent 68a8488 commit a4d34dd

File tree

5 files changed

+36
-19
lines changed

5 files changed

+36
-19
lines changed

modules/git/commit_submodule_file.go

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,10 +25,14 @@ func NewCommitSubmoduleFile(refURL, refID string) *CommitSubmoduleFile {
2525
}
2626

2727
func (sf *CommitSubmoduleFile) RefID() string {
28-
return sf.refID
28+
return sf.refID // this function is only used in templates
2929
}
3030

31+
// SubmoduleWebLink tries to make some web links for a submodule, it also works on "nil" receiver
3132
func (sf *CommitSubmoduleFile) SubmoduleWebLink(ctx context.Context, optCommitID ...string) *SubmoduleWebLink {
33+
if sf == nil {
34+
return nil
35+
}
3236
if !sf.parsed {
3337
sf.parsed = true
3438
parsedURL, err := giturl.ParseRepositoryURL(ctx, sf.refURL)

modules/git/commit_submodule_file_test.go

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,4 +24,7 @@ func TestCommitSubmoduleLink(t *testing.T) {
2424
wl = sf.SubmoduleWebLink(context.Background(), "1111", "2222")
2525
assert.Equal(t, "https://github.com/user/repo", wl.RepoWebLink)
2626
assert.Equal(t, "https://github.com/user/repo/compare/1111...2222", wl.CommitWebLink)
27+
28+
wl = (*CommitSubmoduleFile)(nil).SubmoduleWebLink(context.Background())
29+
assert.Nil(t, wl)
2730
}

services/gitdiff/gitdiff.go

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1212,10 +1212,7 @@ func GetDiff(ctx context.Context, gitRepo *git.Repository, opts *DiffOptions, fi
12121212

12131213
// Populate Submodule URLs
12141214
if diffFile.SubmoduleDiffInfo != nil {
1215-
err := diffFile.SubmoduleDiffInfo.PopulateURL(diffFile, beforeCommit, commit)
1216-
if err != nil {
1217-
return nil, err
1218-
}
1215+
diffFile.SubmoduleDiffInfo.PopulateURL(diffFile, beforeCommit, commit)
12191216
}
12201217

12211218
if !isVendored.Has() {

services/gitdiff/submodule.go

Lines changed: 26 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -15,46 +15,59 @@ import (
1515

1616
type SubmoduleDiffInfo struct {
1717
SubmoduleName string
18-
SubmoduleFile *git.CommitSubmoduleFile
18+
SubmoduleFile *git.CommitSubmoduleFile // it might be nil if the submodule is not found or unable to parse
1919
NewRefID string
2020
PreviousRefID string
2121
}
2222

23-
func (si *SubmoduleDiffInfo) PopulateURL(diffFile *DiffFile, leftCommit, rightCommit *git.Commit) error {
23+
func (si *SubmoduleDiffInfo) PopulateURL(diffFile *DiffFile, leftCommit, rightCommit *git.Commit) {
2424
si.SubmoduleName = diffFile.Name
2525
submoduleCommit := rightCommit // If the submodule is added or updated, check at the right commit
2626
if diffFile.IsDeleted {
2727
submoduleCommit = leftCommit // If the submodule is deleted, check at the left commit
2828
}
29-
if submoduleCommit != nil {
30-
submodule, err := submoduleCommit.GetSubModule(diffFile.GetDiffFileName())
31-
if err != nil {
32-
log.Error("Unable to PopulateURL for submodule %q: GetSubModule: %v", diffFile.GetDiffFileName(), err)
33-
return nil // ignore the error, do not cause 500 errors for end users
34-
}
35-
if submodule != nil {
36-
si.SubmoduleFile = git.NewCommitSubmoduleFile(submodule.URL, submoduleCommit.ID.String())
37-
}
38-
}
39-
return nil
29+
if submoduleCommit == nil {
30+
return
31+
}
32+
33+
submodule, err := submoduleCommit.GetSubModule(diffFile.GetDiffFileName())
34+
if err != nil {
35+
log.Error("Unable to PopulateURL for submodule %q: GetSubModule: %v", diffFile.GetDiffFileName(), err)
36+
return // ignore the error, do not cause 500 errors for end users
37+
}
38+
if submodule != nil {
39+
si.SubmoduleFile = git.NewCommitSubmoduleFile(submodule.URL, submoduleCommit.ID.String())
40+
}
4041
}
4142

4243
func (si *SubmoduleDiffInfo) PreviousRefIDLinkHTML(ctx context.Context) template.HTML {
4344
webLink := si.SubmoduleFile.SubmoduleWebLink(ctx, si.PreviousRefID)
45+
if webLink == nil {
46+
return htmlutil.HTMLFormat("%s", base.ShortSha(si.PreviousRefID))
47+
}
4448
return htmlutil.HTMLFormat(`<a href="%s">%s</a>`, webLink.CommitWebLink, base.ShortSha(si.PreviousRefID))
4549
}
4650

4751
func (si *SubmoduleDiffInfo) NewRefIDLinkHTML(ctx context.Context) template.HTML {
4852
webLink := si.SubmoduleFile.SubmoduleWebLink(ctx, si.NewRefID)
53+
if webLink == nil {
54+
return htmlutil.HTMLFormat("%s", base.ShortSha(si.NewRefID))
55+
}
4956
return htmlutil.HTMLFormat(`<a href="%s">%s</a>`, webLink.CommitWebLink, base.ShortSha(si.NewRefID))
5057
}
5158

5259
func (si *SubmoduleDiffInfo) CompareRefIDLinkHTML(ctx context.Context) template.HTML {
5360
webLink := si.SubmoduleFile.SubmoduleWebLink(ctx, si.PreviousRefID, si.NewRefID)
61+
if webLink == nil {
62+
return htmlutil.HTMLFormat("%s...%s", base.ShortSha(si.PreviousRefID), base.ShortSha(si.NewRefID))
63+
}
5464
return htmlutil.HTMLFormat(`<a href="%s">%s...%s</a>`, webLink.CommitWebLink, base.ShortSha(si.PreviousRefID), base.ShortSha(si.NewRefID))
5565
}
5666

5767
func (si *SubmoduleDiffInfo) SubmoduleRepoLinkHTML(ctx context.Context) template.HTML {
5868
webLink := si.SubmoduleFile.SubmoduleWebLink(ctx)
69+
if webLink == nil {
70+
return htmlutil.HTMLFormat("%s", si.SubmoduleName)
71+
}
5972
return htmlutil.HTMLFormat(`<a href="%s">%s</a>`, webLink.RepoWebLink, si.SubmoduleName)
6073
}

templates/repo/diff/box.tmpl

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -199,7 +199,7 @@
199199
</div>
200200
{{else if $file.SubmoduleDiffInfo}}
201201
<div class="tw-p-3">{{svg "octicon-file-submodule"}} {{$submoduleDiffInfo := $file.SubmoduleDiffInfo -}}
202-
{{- $submoduleName := ($submoduleDiffInfo.SubmoduleRepoLinkHTML ctx) -}}
202+
{{- $submoduleName := $submoduleDiffInfo.SubmoduleRepoLinkHTML ctx -}}
203203
{{- if $file.IsDeleted -}}
204204
{{- ctx.Locale.Tr "repo.diff.submodule_deleted" $submoduleName ($submoduleDiffInfo.PreviousRefIDLinkHTML ctx) -}}
205205
{{- else if $file.IsCreated -}}

0 commit comments

Comments
 (0)