mirror of
				https://github.com/go-gitea/gitea.git
				synced 2025-10-29 10:57:44 +09:00 
			
		
		
		
	Don't display error log when .git-blame-ignore-revs doesn't exist (#34457)
Fix #34454
This commit is contained in:
		| @@ -132,18 +132,22 @@ func (r *BlameReader) Close() error { | |||||||
| } | } | ||||||
|  |  | ||||||
| // CreateBlameReader creates reader for given repository, commit and file | // CreateBlameReader creates reader for given repository, commit and file | ||||||
| func CreateBlameReader(ctx context.Context, objectFormat ObjectFormat, repoPath string, commit *Commit, file string, bypassBlameIgnore bool) (*BlameReader, error) { | func CreateBlameReader(ctx context.Context, objectFormat ObjectFormat, repoPath string, commit *Commit, file string, bypassBlameIgnore bool) (rd *BlameReader, err error) { | ||||||
| 	reader, stdout, err := os.Pipe() | 	var ignoreRevsFileName string | ||||||
| 	if err != nil { | 	var ignoreRevsFileCleanup func() | ||||||
| 		return nil, err | 	defer func() { | ||||||
|  | 		if err != nil && ignoreRevsFileCleanup != nil { | ||||||
|  | 			ignoreRevsFileCleanup() | ||||||
| 		} | 		} | ||||||
|  | 	}() | ||||||
|  |  | ||||||
| 	cmd := NewCommandNoGlobals("blame", "--porcelain") | 	cmd := NewCommandNoGlobals("blame", "--porcelain") | ||||||
|  |  | ||||||
| 	var ignoreRevsFileName string |  | ||||||
| 	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 |  | ||||||
| 	if DefaultFeatures().CheckVersionAtLeast("2.23") && !bypassBlameIgnore { | 	if DefaultFeatures().CheckVersionAtLeast("2.23") && !bypassBlameIgnore { | ||||||
| 		ignoreRevsFileName, ignoreRevsFileCleanup = tryCreateBlameIgnoreRevsFile(commit) | 		ignoreRevsFileName, ignoreRevsFileCleanup, err = tryCreateBlameIgnoreRevsFile(commit) | ||||||
|  | 		if err != nil && !IsErrNotExist(err) { | ||||||
|  | 			return nil, err | ||||||
|  | 		} | ||||||
| 		if ignoreRevsFileName != "" { | 		if ignoreRevsFileName != "" { | ||||||
| 			// Possible improvement: use --ignore-revs-file /dev/stdin on unix | 			// Possible improvement: use --ignore-revs-file /dev/stdin on unix | ||||||
| 			// There is no equivalent on Windows. May be implemented if Gitea uses an external git backend. | 			// 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 | |||||||
| 	cmd.AddDynamicArguments(commit.ID.String()).AddDashesAndList(file) | 	cmd.AddDynamicArguments(commit.ID.String()).AddDashesAndList(file) | ||||||
|  |  | ||||||
| 	done := make(chan error, 1) | 	done := make(chan error, 1) | ||||||
|  | 	reader, stdout, err := os.Pipe() | ||||||
|  | 	if err != nil { | ||||||
|  | 		return nil, err | ||||||
|  | 	} | ||||||
| 	go func() { | 	go func() { | ||||||
| 		stderr := bytes.Buffer{} | 		stderr := bytes.Buffer{} | ||||||
| 		// 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" | 		// 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 | |||||||
| 	}, nil | 	}, nil | ||||||
| } | } | ||||||
|  |  | ||||||
| func tryCreateBlameIgnoreRevsFile(commit *Commit) (string, func()) { | func tryCreateBlameIgnoreRevsFile(commit *Commit) (string, func(), error) { | ||||||
| 	entry, err := commit.GetTreeEntryByPath(".git-blame-ignore-revs") | 	entry, err := commit.GetTreeEntryByPath(".git-blame-ignore-revs") | ||||||
| 	if err != nil { | 	if err != nil { | ||||||
| 		log.Error("Unable to get .git-blame-ignore-revs file: GetTreeEntryByPath: %v", err) | 		return "", nil, err | ||||||
| 		return "", nil |  | ||||||
| 	} | 	} | ||||||
|  |  | ||||||
| 	r, err := entry.Blob().DataAsync() | 	r, err := entry.Blob().DataAsync() | ||||||
| 	if err != nil { | 	if err != nil { | ||||||
| 		log.Error("Unable to get .git-blame-ignore-revs file data: DataAsync: %v", err) | 		return "", nil, err | ||||||
| 		return "", nil |  | ||||||
| 	} | 	} | ||||||
| 	defer r.Close() | 	defer r.Close() | ||||||
|  |  | ||||||
| 	f, cleanup, err := setting.AppDataTempDir("git-repo-content").CreateTempFileRandom("git-blame-ignore-revs") | 	f, cleanup, err := setting.AppDataTempDir("git-repo-content").CreateTempFileRandom("git-blame-ignore-revs") | ||||||
| 	if err != nil { | 	if err != nil { | ||||||
| 		log.Error("Unable to get .git-blame-ignore-revs file data: CreateTempFileRandom: %v", err) | 		return "", nil, err | ||||||
| 		return "", nil |  | ||||||
| 	} | 	} | ||||||
| 	filename := f.Name() | 	filename := f.Name() | ||||||
| 	_, err = io.Copy(f, r) | 	_, err = io.Copy(f, r) | ||||||
| 	_ = f.Close() | 	_ = f.Close() | ||||||
| 	if err != nil { | 	if err != nil { | ||||||
| 		cleanup() | 		cleanup() | ||||||
| 		log.Error("Unable to get .git-blame-ignore-revs file data: Copy: %v", err) | 		return "", nil, err | ||||||
| 		return "", nil |  | ||||||
| 	} | 	} | ||||||
|  |  | ||||||
| 	return filename, cleanup | 	return filename, cleanup, nil | ||||||
| } | } | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user