mirror of
				https://github.com/go-gitea/gitea.git
				synced 2025-11-03 20:36:07 +01:00 
			
		
		
		
	[API] Add affected files of commits to commit struct (#14579)
* Add files affected by a commit to gitea API -- similar to github * Add files affected by a commit to gitea API * Fix stupid error * Fix other stupid typo * Generate swagger tmpl * Comply with convert to git commit refacto * update swagger docs * extend test * format code * Update integrations/api_repo_git_commits_test.go * Update modules/convert/git_commit.go Co-authored-by: Laurent Cahour <laurent.cahour@dont-nod.com> Co-authored-by: zeripath <art27@cantab.net>
This commit is contained in:
		@@ -14,6 +14,14 @@ import (
 | 
				
			|||||||
	"github.com/stretchr/testify/assert"
 | 
						"github.com/stretchr/testify/assert"
 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func compareCommitFiles(t *testing.T, expect []string, files []*api.CommitAffectedFiles) {
 | 
				
			||||||
 | 
						var actual []string
 | 
				
			||||||
 | 
						for i := range files {
 | 
				
			||||||
 | 
							actual = append(actual, files[i].Filename)
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						assert.ElementsMatch(t, expect, actual)
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func TestAPIReposGitCommits(t *testing.T) {
 | 
					func TestAPIReposGitCommits(t *testing.T) {
 | 
				
			||||||
	defer prepareTestEnv(t)()
 | 
						defer prepareTestEnv(t)()
 | 
				
			||||||
	user := models.AssertExistsAndLoadBean(t, &models.User{ID: 2}).(*models.User)
 | 
						user := models.AssertExistsAndLoadBean(t, &models.User{ID: 2}).(*models.User)
 | 
				
			||||||
@@ -56,10 +64,13 @@ func TestAPIReposGitCommitList(t *testing.T) {
 | 
				
			|||||||
	var apiData []api.Commit
 | 
						var apiData []api.Commit
 | 
				
			||||||
	DecodeJSON(t, resp, &apiData)
 | 
						DecodeJSON(t, resp, &apiData)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	assert.Equal(t, 3, len(apiData))
 | 
						assert.Len(t, apiData, 3)
 | 
				
			||||||
	assert.Equal(t, "69554a64c1e6030f051e5c3f94bfbd773cd6a324", apiData[0].CommitMeta.SHA)
 | 
						assert.EqualValues(t, "69554a64c1e6030f051e5c3f94bfbd773cd6a324", apiData[0].CommitMeta.SHA)
 | 
				
			||||||
	assert.Equal(t, "27566bd5738fc8b4e3fef3c5e72cce608537bd95", apiData[1].CommitMeta.SHA)
 | 
						compareCommitFiles(t, []string{"readme.md"}, apiData[0].Files)
 | 
				
			||||||
	assert.Equal(t, "5099b81332712fe655e34e8dd63574f503f61811", apiData[2].CommitMeta.SHA)
 | 
						assert.EqualValues(t, "27566bd5738fc8b4e3fef3c5e72cce608537bd95", apiData[1].CommitMeta.SHA)
 | 
				
			||||||
 | 
						compareCommitFiles(t, []string{"readme.md"}, apiData[1].Files)
 | 
				
			||||||
 | 
						assert.EqualValues(t, "5099b81332712fe655e34e8dd63574f503f61811", apiData[2].CommitMeta.SHA)
 | 
				
			||||||
 | 
						compareCommitFiles(t, []string{"readme.md"}, apiData[2].Files)
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func TestAPIReposGitCommitListPage2Empty(t *testing.T) {
 | 
					func TestAPIReposGitCommitListPage2Empty(t *testing.T) {
 | 
				
			||||||
@@ -76,7 +87,7 @@ func TestAPIReposGitCommitListPage2Empty(t *testing.T) {
 | 
				
			|||||||
	var apiData []api.Commit
 | 
						var apiData []api.Commit
 | 
				
			||||||
	DecodeJSON(t, resp, &apiData)
 | 
						DecodeJSON(t, resp, &apiData)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	assert.Equal(t, 0, len(apiData))
 | 
						assert.Len(t, apiData, 0)
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func TestAPIReposGitCommitListDifferentBranch(t *testing.T) {
 | 
					func TestAPIReposGitCommitListDifferentBranch(t *testing.T) {
 | 
				
			||||||
@@ -93,6 +104,7 @@ func TestAPIReposGitCommitListDifferentBranch(t *testing.T) {
 | 
				
			|||||||
	var apiData []api.Commit
 | 
						var apiData []api.Commit
 | 
				
			||||||
	DecodeJSON(t, resp, &apiData)
 | 
						DecodeJSON(t, resp, &apiData)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	assert.Equal(t, 1, len(apiData))
 | 
						assert.Len(t, apiData, 1)
 | 
				
			||||||
	assert.Equal(t, "f27c2b2b03dcab38beaf89b0ab4ff61f6de63441", apiData[0].CommitMeta.SHA)
 | 
						assert.Equal(t, "f27c2b2b03dcab38beaf89b0ab4ff61f6de63441", apiData[0].CommitMeta.SHA)
 | 
				
			||||||
 | 
						compareCommitFiles(t, []string{"readme.md"}, apiData[0].Files)
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -131,6 +131,20 @@ func ToCommit(repo *models.Repository, commit *git.Commit, userCache map[string]
 | 
				
			|||||||
		}
 | 
							}
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						// Retrieve files affected by the commit
 | 
				
			||||||
 | 
						fileStatus, err := git.GetCommitFileStatus(repo.RepoPath(), commit.ID.String())
 | 
				
			||||||
 | 
						if err != nil {
 | 
				
			||||||
 | 
							return nil, err
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						affectedFileList := make([]*api.CommitAffectedFiles, 0, len(fileStatus.Added)+len(fileStatus.Removed)+len(fileStatus.Modified))
 | 
				
			||||||
 | 
						for _, files := range [][]string{fileStatus.Added, fileStatus.Removed, fileStatus.Modified} {
 | 
				
			||||||
 | 
							for _, filename := range files {
 | 
				
			||||||
 | 
								affectedFileList = append(affectedFileList, &api.CommitAffectedFiles{
 | 
				
			||||||
 | 
									Filename: filename,
 | 
				
			||||||
 | 
								})
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	return &api.Commit{
 | 
						return &api.Commit{
 | 
				
			||||||
		CommitMeta: &api.CommitMeta{
 | 
							CommitMeta: &api.CommitMeta{
 | 
				
			||||||
			URL: repo.APIURL() + "/git/commits/" + commit.ID.String(),
 | 
								URL: repo.APIURL() + "/git/commits/" + commit.ID.String(),
 | 
				
			||||||
@@ -162,5 +176,6 @@ func ToCommit(repo *models.Repository, commit *git.Commit, userCache map[string]
 | 
				
			|||||||
		Author:    apiAuthor,
 | 
							Author:    apiAuthor,
 | 
				
			||||||
		Committer: apiCommitter,
 | 
							Committer: apiCommitter,
 | 
				
			||||||
		Parents:   apiParents,
 | 
							Parents:   apiParents,
 | 
				
			||||||
 | 
							Files:     affectedFileList,
 | 
				
			||||||
	}, nil
 | 
						}, nil
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -42,11 +42,12 @@ type RepoCommit struct {
 | 
				
			|||||||
// Commit contains information generated from a Git commit.
 | 
					// Commit contains information generated from a Git commit.
 | 
				
			||||||
type Commit struct {
 | 
					type Commit struct {
 | 
				
			||||||
	*CommitMeta
 | 
						*CommitMeta
 | 
				
			||||||
	HTMLURL    string        `json:"html_url"`
 | 
						HTMLURL    string                 `json:"html_url"`
 | 
				
			||||||
	RepoCommit *RepoCommit   `json:"commit"`
 | 
						RepoCommit *RepoCommit            `json:"commit"`
 | 
				
			||||||
	Author     *User         `json:"author"`
 | 
						Author     *User                  `json:"author"`
 | 
				
			||||||
	Committer  *User         `json:"committer"`
 | 
						Committer  *User                  `json:"committer"`
 | 
				
			||||||
	Parents    []*CommitMeta `json:"parents"`
 | 
						Parents    []*CommitMeta          `json:"parents"`
 | 
				
			||||||
 | 
						Files      []*CommitAffectedFiles `json:"files"`
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// CommitDateOptions store dates for GIT_AUTHOR_DATE and GIT_COMMITTER_DATE
 | 
					// CommitDateOptions store dates for GIT_AUTHOR_DATE and GIT_COMMITTER_DATE
 | 
				
			||||||
@@ -56,3 +57,8 @@ type CommitDateOptions struct {
 | 
				
			|||||||
	// swagger:strfmt date-time
 | 
						// swagger:strfmt date-time
 | 
				
			||||||
	Committer time.Time `json:"committer"`
 | 
						Committer time.Time `json:"committer"`
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// CommitAffectedFiles store information about files affected by the commit
 | 
				
			||||||
 | 
					type CommitAffectedFiles struct {
 | 
				
			||||||
 | 
						Filename string `json:"filename"`
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -11821,6 +11821,13 @@
 | 
				
			|||||||
          "format": "date-time",
 | 
					          "format": "date-time",
 | 
				
			||||||
          "x-go-name": "Created"
 | 
					          "x-go-name": "Created"
 | 
				
			||||||
        },
 | 
					        },
 | 
				
			||||||
 | 
					        "files": {
 | 
				
			||||||
 | 
					          "type": "array",
 | 
				
			||||||
 | 
					          "items": {
 | 
				
			||||||
 | 
					            "$ref": "#/definitions/CommitAffectedFiles"
 | 
				
			||||||
 | 
					          },
 | 
				
			||||||
 | 
					          "x-go-name": "Files"
 | 
				
			||||||
 | 
					        },
 | 
				
			||||||
        "html_url": {
 | 
					        "html_url": {
 | 
				
			||||||
          "type": "string",
 | 
					          "type": "string",
 | 
				
			||||||
          "x-go-name": "HTMLURL"
 | 
					          "x-go-name": "HTMLURL"
 | 
				
			||||||
@@ -11843,6 +11850,17 @@
 | 
				
			|||||||
      },
 | 
					      },
 | 
				
			||||||
      "x-go-package": "code.gitea.io/gitea/modules/structs"
 | 
					      "x-go-package": "code.gitea.io/gitea/modules/structs"
 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
 | 
					    "CommitAffectedFiles": {
 | 
				
			||||||
 | 
					      "description": "CommitAffectedFiles store information about files affected by the commit",
 | 
				
			||||||
 | 
					      "type": "object",
 | 
				
			||||||
 | 
					      "properties": {
 | 
				
			||||||
 | 
					        "filename": {
 | 
				
			||||||
 | 
					          "type": "string",
 | 
				
			||||||
 | 
					          "x-go-name": "Filename"
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					      },
 | 
				
			||||||
 | 
					      "x-go-package": "code.gitea.io/gitea/modules/structs"
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
    "CommitDateOptions": {
 | 
					    "CommitDateOptions": {
 | 
				
			||||||
      "description": "CommitDateOptions store dates for GIT_AUTHOR_DATE and GIT_COMMITTER_DATE",
 | 
					      "description": "CommitDateOptions store dates for GIT_AUTHOR_DATE and GIT_COMMITTER_DATE",
 | 
				
			||||||
      "type": "object",
 | 
					      "type": "object",
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user