@@ -132,7 +132,7 @@ 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 ) {
135+ func  CreateBlameReader (ctx  context.Context , objectFormat  ObjectFormat , repoPath  string , commit  * Commit , file  string , bypassBlameIgnore  bool ) (rd   * BlameReader ,  err  error ) {
136136	reader , stdout , err  :=  os .Pipe ()
137137	if  err  !=  nil  {
138138		return  nil , err 
@@ -141,9 +141,18 @@ func CreateBlameReader(ctx context.Context, objectFormat ObjectFormat, repoPath
141141	cmd  :=  NewCommandNoGlobals ("blame" , "--porcelain" )
142142
143143	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 
144+ 	var  ignoreRevsFileCleanup  func ()
145+ 	defer  func () {
146+ 		if  err  !=  nil  &&  ignoreRevsFileCleanup  !=  nil  {
147+ 			ignoreRevsFileCleanup ()
148+ 		}
149+ 	}()
150+ 
145151	if  DefaultFeatures ().CheckVersionAtLeast ("2.23" ) &&  ! bypassBlameIgnore  {
146- 		ignoreRevsFileName , ignoreRevsFileCleanup  =  tryCreateBlameIgnoreRevsFile (commit )
152+ 		ignoreRevsFileName , ignoreRevsFileCleanup , err  =  tryCreateBlameIgnoreRevsFile (commit )
153+ 		if  err  !=  nil  {
154+ 			return  nil , err 
155+ 		}
147156		if  ignoreRevsFileName  !=  ""  {
148157			// Possible improvement: use --ignore-revs-file /dev/stdin on unix 
149158			// There is no equivalent on Windows. May be implemented if Gitea uses an external git backend. 
@@ -182,33 +191,32 @@ func CreateBlameReader(ctx context.Context, objectFormat ObjectFormat, repoPath
182191	}, nil 
183192}
184193
185- func  tryCreateBlameIgnoreRevsFile (commit  * Commit ) (string , func ()) {
194+ func  tryCreateBlameIgnoreRevsFile (commit  * Commit ) (string , func (),  error ) {
186195	entry , err  :=  commit .GetTreeEntryByPath (".git-blame-ignore-revs" )
187196	if  err  !=  nil  {
188- 		log .Error ("Unable to get .git-blame-ignore-revs file: GetTreeEntryByPath: %v" , err )
189- 		return  "" , nil 
197+ 		if  IsErrNotExist (err ) {
198+ 			return  "" , nil , nil 
199+ 		}
200+ 		return  "" , nil , err 
190201	}
191202
192203	r , err  :=  entry .Blob ().DataAsync ()
193204	if  err  !=  nil  {
194- 		log .Error ("Unable to get .git-blame-ignore-revs file data: DataAsync: %v" , err )
195- 		return  "" , nil 
205+ 		return  "" , nil , err 
196206	}
197207	defer  r .Close ()
198208
199209	f , cleanup , err  :=  setting .AppDataTempDir ("git-repo-content" ).CreateTempFileRandom ("git-blame-ignore-revs" )
200210	if  err  !=  nil  {
201- 		log .Error ("Unable to get .git-blame-ignore-revs file data: CreateTempFileRandom: %v" , err )
202- 		return  "" , nil 
211+ 		return  "" , nil , err 
203212	}
204213	filename  :=  f .Name ()
205214	_ , err  =  io .Copy (f , r )
206215	_  =  f .Close ()
207216	if  err  !=  nil  {
208217		cleanup ()
209- 		log .Error ("Unable to get .git-blame-ignore-revs file data: Copy: %v" , err )
210- 		return  "" , nil 
218+ 		return  "" , nil , err 
211219	}
212220
213- 	return  filename , cleanup 
221+ 	return  filename , cleanup ,  nil 
214222}
0 commit comments