Merge pull request 'fix: return correct type in GetSubModule' (#6114) from gusted/forgejo-submodule-entry into forgejo
		
	Reviewed-on: https://codeberg.org/forgejo/forgejo/pulls/6114 Reviewed-by: Earl Warren <earl-warren@noreply.codeberg.org>
This commit is contained in:
		
				commit
				
					
						45cec645de
					
				
			
		
					 4 changed files with 46 additions and 12 deletions
				
			
		|  | @ -395,20 +395,20 @@ func parseSubmoduleContent(bs []byte) (*ObjectCache, error) { | |||
| 	return submoduleCache, nil | ||||
| } | ||||
| 
 | ||||
| // GetSubModule get the sub module according entryname | ||||
| func (c *Commit) GetSubModule(entryname string) (*SubModule, error) { | ||||
| // GetSubModule returns the URL to the submodule according entryname | ||||
| func (c *Commit) GetSubModule(entryname string) (string, error) { | ||||
| 	modules, err := c.GetSubModules() | ||||
| 	if err != nil { | ||||
| 		return nil, err | ||||
| 		return "", err | ||||
| 	} | ||||
| 
 | ||||
| 	if modules != nil { | ||||
| 		module, has := modules.Get(entryname) | ||||
| 		if has { | ||||
| 			return module.(*SubModule), nil | ||||
| 			return module.(string), nil | ||||
| 		} | ||||
| 	} | ||||
| 	return nil, nil | ||||
| 	return "", nil | ||||
| } | ||||
| 
 | ||||
| // GetBranchName gets the closest branch name (as returned by 'git name-rev --name-only') | ||||
|  |  | |||
|  | @ -72,17 +72,15 @@ func (tes Entries) GetCommitsInfo(ctx context.Context, commit *Commit, treePath | |||
| 
 | ||||
| 		// If the entry if a submodule add a submodule file for this | ||||
| 		if entry.IsSubModule() { | ||||
| 			subModuleURL := "" | ||||
| 			var fullPath string | ||||
| 			if len(treePath) > 0 { | ||||
| 				fullPath = treePath + "/" + entry.Name() | ||||
| 			} else { | ||||
| 				fullPath = entry.Name() | ||||
| 			} | ||||
| 			if subModule, err := commit.GetSubModule(fullPath); err != nil { | ||||
| 			subModuleURL, err := commit.GetSubModule(fullPath) | ||||
| 			if err != nil { | ||||
| 				return nil, nil, err | ||||
| 			} else if subModule != nil { | ||||
| 				subModuleURL = subModule.URL | ||||
| 			} | ||||
| 			subModuleFile := NewSubModuleFile(commitsInfo[i].Commit, subModuleURL, entry.ID.String()) | ||||
| 			commitsInfo[i].SubModuleFile = subModuleFile | ||||
|  |  | |||
|  | @ -211,12 +211,12 @@ func GetContents(ctx context.Context, repo *repo_model.Repository, treePath, ref | |||
| 		contentsResponse.Target = &targetFromContent | ||||
| 	} else if entry.IsSubModule() { | ||||
| 		contentsResponse.Type = string(ContentTypeSubmodule) | ||||
| 		submodule, err := commit.GetSubModule(treePath) | ||||
| 		submoduleURL, err := commit.GetSubModule(treePath) | ||||
| 		if err != nil { | ||||
| 			return nil, err | ||||
| 		} | ||||
| 		if submodule != nil && submodule.URL != "" { | ||||
| 			contentsResponse.SubmoduleGitURL = &submodule.URL | ||||
| 		if submoduleURL != "" { | ||||
| 			contentsResponse.SubmoduleGitURL = &submoduleURL | ||||
| 		} | ||||
| 	} | ||||
| 	// Handle links | ||||
|  |  | |||
|  | @ -1413,3 +1413,39 @@ func TestRepoIssueFilterLinks(t *testing.T) { | |||
| 		assert.True(t, called) | ||||
| 	}) | ||||
| } | ||||
| 
 | ||||
| func TestRepoSubmoduleView(t *testing.T) { | ||||
| 	onGiteaRun(t, func(t *testing.T, u *url.URL) { | ||||
| 		user2 := unittest.AssertExistsAndLoadBean(t, &user_model.User{ID: 2}) | ||||
| 		repo, _, f := tests.CreateDeclarativeRepo(t, user2, "", []unit_model.Type{unit_model.TypeCode}, nil, nil) | ||||
| 		defer f() | ||||
| 
 | ||||
| 		// Clone the repository, add a submodule and push it. | ||||
| 		dstPath := t.TempDir() | ||||
| 
 | ||||
| 		uClone := *u | ||||
| 		uClone.Path = repo.FullName() | ||||
| 		uClone.User = url.UserPassword(user2.Name, userPassword) | ||||
| 
 | ||||
| 		t.Run("Clone", doGitClone(dstPath, &uClone)) | ||||
| 
 | ||||
| 		_, _, err := git.NewCommand(git.DefaultContext, "submodule", "add").AddDynamicArguments(u.JoinPath("/user2/repo1").String()).RunStdString(&git.RunOpts{Dir: dstPath}) | ||||
| 		require.NoError(t, err) | ||||
| 
 | ||||
| 		_, _, err = git.NewCommand(git.DefaultContext, "add", "repo1", ".gitmodules").RunStdString(&git.RunOpts{Dir: dstPath}) | ||||
| 		require.NoError(t, err) | ||||
| 
 | ||||
| 		_, _, err = git.NewCommand(git.DefaultContext, "commit", "-m", "add submodule").RunStdString(&git.RunOpts{Dir: dstPath}) | ||||
| 		require.NoError(t, err) | ||||
| 
 | ||||
| 		_, _, err = git.NewCommand(git.DefaultContext, "push").RunStdString(&git.RunOpts{Dir: dstPath}) | ||||
| 		require.NoError(t, err) | ||||
| 
 | ||||
| 		// Check that the submodule entry exist and the link is correct. | ||||
| 		req := NewRequest(t, "GET", "/"+repo.FullName()) | ||||
| 		resp := MakeRequest(t, req, http.StatusOK) | ||||
| 
 | ||||
| 		htmlDoc := NewHTMLParser(t, resp.Body) | ||||
| 		htmlDoc.AssertElement(t, fmt.Sprintf(`tr[data-entryname="repo1"] a[href="%s"]`, u.JoinPath("/user2/repo1").String()), true) | ||||
| 	}) | ||||
| } | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 Gusted
				Gusted