Skip to content

Commit a6a14c9

Browse files
GiteaBotlunny
andauthored
Don't display error log when .git-blame-ignore-revs doesn't exist (#34457) (#34540)
Backport #34457 by @lunny Fix #34454 Co-authored-by: Lunny Xiao <[email protected]>
1 parent d0ec178 commit a6a14c9

File tree

1 file changed

+22
-18
lines changed

1 file changed

+22
-18
lines changed

modules/git/blame.go

Lines changed: 22 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -132,18 +132,22 @@ func (r *BlameReader) Close() error {
132132
}
133133

134134
// CreateBlameReader creates reader for given repository, commit and file
135-
func CreateBlameReader(ctx context.Context, objectFormat ObjectFormat, repoPath string, commit *Commit, file string, bypassBlameIgnore bool) (*BlameReader, error) {
136-
reader, stdout, err := os.Pipe()
137-
if err != nil {
138-
return nil, err
139-
}
135+
func CreateBlameReader(ctx context.Context, objectFormat ObjectFormat, repoPath string, commit *Commit, file string, bypassBlameIgnore bool) (rd *BlameReader, err error) {
136+
var ignoreRevsFileName string
137+
var ignoreRevsFileCleanup func()
138+
defer func() {
139+
if err != nil && ignoreRevsFileCleanup != nil {
140+
ignoreRevsFileCleanup()
141+
}
142+
}()
140143

141144
cmd := NewCommandNoGlobals("blame", "--porcelain")
142145

143-
var ignoreRevsFileName string
144-
var ignoreRevsFileCleanup func() // TODO: maybe it should check the returned err in a defer func to make sure the cleanup could always be executed correctly
145146
if DefaultFeatures().CheckVersionAtLeast("2.23") && !bypassBlameIgnore {
146-
ignoreRevsFileName, ignoreRevsFileCleanup = tryCreateBlameIgnoreRevsFile(commit)
147+
ignoreRevsFileName, ignoreRevsFileCleanup, err = tryCreateBlameIgnoreRevsFile(commit)
148+
if err != nil && !IsErrNotExist(err) {
149+
return nil, err
150+
}
147151
if ignoreRevsFileName != "" {
148152
// Possible improvement: use --ignore-revs-file /dev/stdin on unix
149153
// There is no equivalent on Windows. May be implemented if Gitea uses an external git backend.
@@ -154,6 +158,10 @@ func CreateBlameReader(ctx context.Context, objectFormat ObjectFormat, repoPath
154158
cmd.AddDynamicArguments(commit.ID.String()).AddDashesAndList(file)
155159

156160
done := make(chan error, 1)
161+
reader, stdout, err := os.Pipe()
162+
if err != nil {
163+
return nil, err
164+
}
157165
go func() {
158166
stderr := bytes.Buffer{}
159167
// TODO: it doesn't work for directories (the directories shouldn't be "blamed"), and the "err" should be returned by "Read" but not by "Close"
@@ -182,33 +190,29 @@ func CreateBlameReader(ctx context.Context, objectFormat ObjectFormat, repoPath
182190
}, nil
183191
}
184192

185-
func tryCreateBlameIgnoreRevsFile(commit *Commit) (string, func()) {
193+
func tryCreateBlameIgnoreRevsFile(commit *Commit) (string, func(), error) {
186194
entry, err := commit.GetTreeEntryByPath(".git-blame-ignore-revs")
187195
if err != nil {
188-
log.Error("Unable to get .git-blame-ignore-revs file: GetTreeEntryByPath: %v", err)
189-
return "", nil
196+
return "", nil, err
190197
}
191198

192199
r, err := entry.Blob().DataAsync()
193200
if err != nil {
194-
log.Error("Unable to get .git-blame-ignore-revs file data: DataAsync: %v", err)
195-
return "", nil
201+
return "", nil, err
196202
}
197203
defer r.Close()
198204

199205
f, cleanup, err := setting.AppDataTempDir("git-repo-content").CreateTempFileRandom("git-blame-ignore-revs")
200206
if err != nil {
201-
log.Error("Unable to get .git-blame-ignore-revs file data: CreateTempFileRandom: %v", err)
202-
return "", nil
207+
return "", nil, err
203208
}
204209
filename := f.Name()
205210
_, err = io.Copy(f, r)
206211
_ = f.Close()
207212
if err != nil {
208213
cleanup()
209-
log.Error("Unable to get .git-blame-ignore-revs file data: Copy: %v", err)
210-
return "", nil
214+
return "", nil, err
211215
}
212216

213-
return filename, cleanup
217+
return filename, cleanup, nil
214218
}

0 commit comments

Comments
 (0)