mirror of
				https://github.com/go-gitea/gitea.git
				synced 2025-10-31 03:02:14 +01:00 
			
		
		
		
	Backport #34367 by bytedream Files that should be stored in LFS and are uploaded/edited from the API or web UI aren't stored in LFS. This may be a regression from #34154. Co-authored-by: bytedream <bytedream@protonmail.com> Co-authored-by: wxiaoguang <wxiaoguang@gmail.com>
This commit is contained in:
		
							parent
							
								
									a3a95a0b67
								
							
						
					
					
						commit
						c8f3402841
					
				| @ -39,7 +39,12 @@ func checkAttrCommand(gitRepo *git.Repository, treeish string, filenames, attrib | ||||
| 			) | ||||
| 			cancel = deleteTemporaryFile | ||||
| 		} | ||||
| 	} // else: no treeish, assume it is a not a bare repo, read from working directory | ||||
| 	} else { | ||||
| 		// Read from existing index, in cases where the repo is bare and has an index, | ||||
| 		// or the work tree contains unstaged changes that shouldn't affect the attribute check. | ||||
| 		// It is caller's responsibility to add changed ".gitattributes" into the index if they want to respect the new changes. | ||||
| 		cmd.AddArguments("--cached") | ||||
| 	} | ||||
| 
 | ||||
| 	cmd.AddDynamicArguments(attributes...) | ||||
| 	if len(filenames) > 0 { | ||||
|  | ||||
| @ -57,8 +57,18 @@ func Test_Checker(t *testing.T) { | ||||
| 		assert.Equal(t, expectedAttrs(), attrs["i-am-a-python.p"]) | ||||
| 	}) | ||||
| 
 | ||||
| 	t.Run("Run git check-attr in bare repository using index", func(t *testing.T) { | ||||
| 		attrs, err := CheckAttributes(t.Context(), gitRepo, "", CheckAttributeOpts{ | ||||
| 			Filenames:  []string{"i-am-a-python.p"}, | ||||
| 			Attributes: LinguistAttributes, | ||||
| 		}) | ||||
| 		assert.NoError(t, err) | ||||
| 		assert.Len(t, attrs, 1) | ||||
| 		assert.Equal(t, expectedAttrs(), attrs["i-am-a-python.p"]) | ||||
| 	}) | ||||
| 
 | ||||
| 	if !git.DefaultFeatures().SupportCheckAttrOnBare { | ||||
| 		t.Skip("git version 2.40 is required to support run check-attr on bare repo") | ||||
| 		t.Skip("git version 2.40 is required to support run check-attr on bare repo without using index") | ||||
| 		return | ||||
| 	} | ||||
| 
 | ||||
|  | ||||
| @ -107,6 +107,7 @@ func UploadRepoFiles(ctx context.Context, repo *repo_model.Repository, doer *use | ||||
| 	} | ||||
| 
 | ||||
| 	var attributesMap map[string]*attribute.Attributes | ||||
| 	// when uploading to an empty repo, the old branch doesn't exist, but some "global gitattributes" or "info/attributes" may exist | ||||
| 	if setting.LFS.StartServer { | ||||
| 		attributesMap, err = attribute.CheckAttributes(ctx, t.gitRepo, "" /* use temp repo's working dir */, attribute.CheckAttributeOpts{ | ||||
| 			Attributes: []string{attribute.Filter}, | ||||
| @ -118,6 +119,12 @@ func UploadRepoFiles(ctx context.Context, repo *repo_model.Repository, doer *use | ||||
| 	} | ||||
| 
 | ||||
| 	// Copy uploaded files into repository. | ||||
| 	// TODO: there is a small problem: when uploading LFS files with ".gitattributes", the "check-attr" runs before this loop, | ||||
| 	// so LFS files are not able to be added as LFS objects. Ideally we need to do in 3 steps in the future: | ||||
| 	// 1. Add ".gitattributes" to git index | ||||
| 	// 2. Run "check-attr" (the previous attribute.CheckAttributes call) | ||||
| 	// 3. Add files to git index (this loop) | ||||
| 	// This problem is trivial so maybe no need to spend too much time on it at the moment. | ||||
| 	for i := range infos { | ||||
| 		if err := copyUploadedLFSFileIntoRepository(ctx, &infos[i], attributesMap, t, opts.TreePath); err != nil { | ||||
| 			return err | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user