mirror of
				https://github.com/go-gitea/gitea.git
				synced 2025-10-31 10:56:10 +01:00 
			
		
		
		
	Display file mode for new file and file mode changes (#24966)
This MR introduces the addition of file mode display support for both new file creation and file mode changes, following a similar approach as GitLab. GitLab:  Gitea:  Replaces: https://github.com/go-gitea/gitea/pull/23159 Closes: https://github.com/go-gitea/gitea/issues/23021 --------- Co-authored-by: silverwind <me@silverwind.io> Co-authored-by: delvh <dev.lh@web.de> Co-authored-by: Giteabot <teabot@gitea.io>
This commit is contained in:
		| @@ -371,6 +371,8 @@ type DiffFile struct { | |||||||
| 	IsViewed                  bool // User specific | 	IsViewed                  bool // User specific | ||||||
| 	HasChangedSinceLastReview bool // User specific | 	HasChangedSinceLastReview bool // User specific | ||||||
| 	Language                  string | 	Language                  string | ||||||
|  | 	Mode                      string | ||||||
|  | 	OldMode                   string | ||||||
| } | } | ||||||
|  |  | ||||||
| // GetType returns type of diff file. | // GetType returns type of diff file. | ||||||
| @@ -501,6 +503,11 @@ func ParsePatch(maxLines, maxLineCharacters, maxFiles int, reader io.Reader, ski | |||||||
| 		} | 		} | ||||||
| 		return diff, err | 		return diff, err | ||||||
| 	} | 	} | ||||||
|  |  | ||||||
|  | 	prepareValue := func(s, p string) string { | ||||||
|  | 		return strings.TrimSpace(strings.TrimPrefix(s, p)) | ||||||
|  | 	} | ||||||
|  |  | ||||||
| parsingLoop: | parsingLoop: | ||||||
| 	for { | 	for { | ||||||
| 		// 1. A patch file always begins with `diff --git ` + `a/path b/path` (possibly quoted) | 		// 1. A patch file always begins with `diff --git ` + `a/path b/path` (possibly quoted) | ||||||
| @@ -585,11 +592,20 @@ parsingLoop: | |||||||
| 				} | 				} | ||||||
| 				break parsingLoop | 				break parsingLoop | ||||||
| 			} | 			} | ||||||
|  |  | ||||||
| 			switch { | 			switch { | ||||||
| 			case strings.HasPrefix(line, cmdDiffHead): | 			case strings.HasPrefix(line, cmdDiffHead): | ||||||
| 				break curFileLoop | 				break curFileLoop | ||||||
| 			case strings.HasPrefix(line, "old mode ") || | 			case strings.HasPrefix(line, "old mode ") || | ||||||
| 				strings.HasPrefix(line, "new mode "): | 				strings.HasPrefix(line, "new mode "): | ||||||
|  |  | ||||||
|  | 				if strings.HasPrefix(line, "old mode ") { | ||||||
|  | 					curFile.OldMode = prepareValue(line, "old mode ") | ||||||
|  | 				} | ||||||
|  | 				if strings.HasPrefix(line, "new mode ") { | ||||||
|  | 					curFile.Mode = prepareValue(line, "new mode ") | ||||||
|  | 				} | ||||||
|  |  | ||||||
| 				if strings.HasSuffix(line, " 160000\n") { | 				if strings.HasSuffix(line, " 160000\n") { | ||||||
| 					curFile.IsSubmodule = true | 					curFile.IsSubmodule = true | ||||||
| 				} | 				} | ||||||
| @@ -597,31 +613,34 @@ parsingLoop: | |||||||
| 				curFile.IsRenamed = true | 				curFile.IsRenamed = true | ||||||
| 				curFile.Type = DiffFileRename | 				curFile.Type = DiffFileRename | ||||||
| 				if curFile.IsAmbiguous { | 				if curFile.IsAmbiguous { | ||||||
| 					curFile.OldName = line[len("rename from ") : len(line)-1] | 					curFile.OldName = prepareValue(line, "rename from ") | ||||||
| 				} | 				} | ||||||
| 			case strings.HasPrefix(line, "rename to "): | 			case strings.HasPrefix(line, "rename to "): | ||||||
| 				curFile.IsRenamed = true | 				curFile.IsRenamed = true | ||||||
| 				curFile.Type = DiffFileRename | 				curFile.Type = DiffFileRename | ||||||
| 				if curFile.IsAmbiguous { | 				if curFile.IsAmbiguous { | ||||||
| 					curFile.Name = line[len("rename to ") : len(line)-1] | 					curFile.Name = prepareValue(line, "rename to ") | ||||||
| 					curFile.IsAmbiguous = false | 					curFile.IsAmbiguous = false | ||||||
| 				} | 				} | ||||||
| 			case strings.HasPrefix(line, "copy from "): | 			case strings.HasPrefix(line, "copy from "): | ||||||
| 				curFile.IsRenamed = true | 				curFile.IsRenamed = true | ||||||
| 				curFile.Type = DiffFileCopy | 				curFile.Type = DiffFileCopy | ||||||
| 				if curFile.IsAmbiguous { | 				if curFile.IsAmbiguous { | ||||||
| 					curFile.OldName = line[len("copy from ") : len(line)-1] | 					curFile.OldName = prepareValue(line, "copy from ") | ||||||
| 				} | 				} | ||||||
| 			case strings.HasPrefix(line, "copy to "): | 			case strings.HasPrefix(line, "copy to "): | ||||||
| 				curFile.IsRenamed = true | 				curFile.IsRenamed = true | ||||||
| 				curFile.Type = DiffFileCopy | 				curFile.Type = DiffFileCopy | ||||||
| 				if curFile.IsAmbiguous { | 				if curFile.IsAmbiguous { | ||||||
| 					curFile.Name = line[len("copy to ") : len(line)-1] | 					curFile.Name = prepareValue(line, "copy to ") | ||||||
| 					curFile.IsAmbiguous = false | 					curFile.IsAmbiguous = false | ||||||
| 				} | 				} | ||||||
| 			case strings.HasPrefix(line, "new file"): | 			case strings.HasPrefix(line, "new file"): | ||||||
| 				curFile.Type = DiffFileAdd | 				curFile.Type = DiffFileAdd | ||||||
| 				curFile.IsCreated = true | 				curFile.IsCreated = true | ||||||
|  | 				if strings.HasPrefix(line, "new file mode ") { | ||||||
|  | 					curFile.Mode = prepareValue(line, "new file mode ") | ||||||
|  | 				} | ||||||
| 				if strings.HasSuffix(line, " 160000\n") { | 				if strings.HasSuffix(line, " 160000\n") { | ||||||
| 					curFile.IsSubmodule = true | 					curFile.IsSubmodule = true | ||||||
| 				} | 				} | ||||||
|   | |||||||
| @@ -113,6 +113,11 @@ | |||||||
| 									{{if $file.IsVendored}} | 									{{if $file.IsVendored}} | ||||||
| 										<span class="ui label gt-ml-3">{{$.locale.Tr "repo.diff.vendored"}}</span> | 										<span class="ui label gt-ml-3">{{$.locale.Tr "repo.diff.vendored"}}</span> | ||||||
| 									{{end}} | 									{{end}} | ||||||
|  | 									{{if and $file.Mode $file.OldMode}} | ||||||
|  | 										<span class="gt-ml-4 gt-mono">{{$file.OldMode}} → {{$file.Mode}}</span> | ||||||
|  | 									{{else if $file.Mode}} | ||||||
|  | 										<span class="gt-ml-4 gt-mono">{{$file.Mode}}</span> | ||||||
|  | 									{{end}} | ||||||
| 								</div> | 								</div> | ||||||
| 								<div class="diff-file-header-actions gt-df gt-ac"> | 								<div class="diff-file-header-actions gt-df gt-ac"> | ||||||
| 									{{if $showFileViewToggle}} | 									{{if $showFileViewToggle}} | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user