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
 | 
						return submoduleCache, nil
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// GetSubModule get the sub module according entryname
 | 
					// GetSubModule returns the URL to the submodule according entryname
 | 
				
			||||||
func (c *Commit) GetSubModule(entryname string) (*SubModule, error) {
 | 
					func (c *Commit) GetSubModule(entryname string) (string, error) {
 | 
				
			||||||
	modules, err := c.GetSubModules()
 | 
						modules, err := c.GetSubModules()
 | 
				
			||||||
	if err != nil {
 | 
						if err != nil {
 | 
				
			||||||
		return nil, err
 | 
							return "", err
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if modules != nil {
 | 
						if modules != nil {
 | 
				
			||||||
		module, has := modules.Get(entryname)
 | 
							module, has := modules.Get(entryname)
 | 
				
			||||||
		if has {
 | 
							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')
 | 
					// 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 the entry if a submodule add a submodule file for this
 | 
				
			||||||
		if entry.IsSubModule() {
 | 
							if entry.IsSubModule() {
 | 
				
			||||||
			subModuleURL := ""
 | 
					 | 
				
			||||||
			var fullPath string
 | 
								var fullPath string
 | 
				
			||||||
			if len(treePath) > 0 {
 | 
								if len(treePath) > 0 {
 | 
				
			||||||
				fullPath = treePath + "/" + entry.Name()
 | 
									fullPath = treePath + "/" + entry.Name()
 | 
				
			||||||
			} else {
 | 
								} else {
 | 
				
			||||||
				fullPath = entry.Name()
 | 
									fullPath = entry.Name()
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
			if subModule, err := commit.GetSubModule(fullPath); err != nil {
 | 
								subModuleURL, err := commit.GetSubModule(fullPath)
 | 
				
			||||||
 | 
								if err != nil {
 | 
				
			||||||
				return nil, nil, err
 | 
									return nil, nil, err
 | 
				
			||||||
			} else if subModule != nil {
 | 
					 | 
				
			||||||
				subModuleURL = subModule.URL
 | 
					 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
			subModuleFile := NewSubModuleFile(commitsInfo[i].Commit, subModuleURL, entry.ID.String())
 | 
								subModuleFile := NewSubModuleFile(commitsInfo[i].Commit, subModuleURL, entry.ID.String())
 | 
				
			||||||
			commitsInfo[i].SubModuleFile = subModuleFile
 | 
								commitsInfo[i].SubModuleFile = subModuleFile
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -211,12 +211,12 @@ func GetContents(ctx context.Context, repo *repo_model.Repository, treePath, ref
 | 
				
			||||||
		contentsResponse.Target = &targetFromContent
 | 
							contentsResponse.Target = &targetFromContent
 | 
				
			||||||
	} else if entry.IsSubModule() {
 | 
						} else if entry.IsSubModule() {
 | 
				
			||||||
		contentsResponse.Type = string(ContentTypeSubmodule)
 | 
							contentsResponse.Type = string(ContentTypeSubmodule)
 | 
				
			||||||
		submodule, err := commit.GetSubModule(treePath)
 | 
							submoduleURL, err := commit.GetSubModule(treePath)
 | 
				
			||||||
		if err != nil {
 | 
							if err != nil {
 | 
				
			||||||
			return nil, err
 | 
								return nil, err
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
		if submodule != nil && submodule.URL != "" {
 | 
							if submoduleURL != "" {
 | 
				
			||||||
			contentsResponse.SubmoduleGitURL = &submodule.URL
 | 
								contentsResponse.SubmoduleGitURL = &submoduleURL
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	// Handle links
 | 
						// Handle links
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1413,3 +1413,39 @@ func TestRepoIssueFilterLinks(t *testing.T) {
 | 
				
			||||||
		assert.True(t, called)
 | 
							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