code.gitea.io/gitea@v1.19.3/modules/git/commit_test.go (about) 1 // Copyright 2017 The Gitea Authors. All rights reserved. 2 // SPDX-License-Identifier: MIT 3 4 package git 5 6 import ( 7 "path/filepath" 8 "strings" 9 "testing" 10 11 "github.com/stretchr/testify/assert" 12 ) 13 14 func TestCommitsCount(t *testing.T) { 15 bareRepo1Path := filepath.Join(testReposDir, "repo1_bare") 16 17 commitsCount, err := CommitsCount(DefaultContext, bareRepo1Path, "8006ff9adbf0cb94da7dad9e537e53817f9fa5c0") 18 assert.NoError(t, err) 19 assert.Equal(t, int64(3), commitsCount) 20 } 21 22 func TestGetFullCommitID(t *testing.T) { 23 bareRepo1Path := filepath.Join(testReposDir, "repo1_bare") 24 25 id, err := GetFullCommitID(DefaultContext, bareRepo1Path, "8006ff9a") 26 assert.NoError(t, err) 27 assert.Equal(t, "8006ff9adbf0cb94da7dad9e537e53817f9fa5c0", id) 28 } 29 30 func TestGetFullCommitIDError(t *testing.T) { 31 bareRepo1Path := filepath.Join(testReposDir, "repo1_bare") 32 33 id, err := GetFullCommitID(DefaultContext, bareRepo1Path, "unknown") 34 assert.Empty(t, id) 35 if assert.Error(t, err) { 36 assert.EqualError(t, err, "object does not exist [id: unknown, rel_path: ]") 37 } 38 } 39 40 func TestCommitFromReader(t *testing.T) { 41 commitString := `feaf4ba6bc635fec442f46ddd4512416ec43c2c2 commit 1074 42 tree f1a6cb52b2d16773290cefe49ad0684b50a4f930 43 parent 37991dec2c8e592043f47155ce4808d4580f9123 44 author silverwind <me@silverwind.io> 1563741793 +0200 45 committer silverwind <me@silverwind.io> 1563741793 +0200 46 gpgsig -----BEGIN PGP SIGNATURE----- 47 ` + " " + ` 48 iQIzBAABCAAdFiEEWPb2jX6FS2mqyJRQLmK0HJOGlEMFAl00zmEACgkQLmK0HJOG 49 lEMDFBAAhQKKqLD1VICygJMEB8t1gBmNLgvziOLfpX4KPWdPtBk3v/QJ7OrfMrVK 50 xlC4ZZyx6yMm1Q7GzmuWykmZQJ9HMaHJ49KAbh5MMjjV/+OoQw9coIdo8nagRUld 51 vX8QHzNZ6Agx77xHuDJZgdHKpQK3TrMDsxzoYYMvlqoLJIDXE1Sp7KYNy12nhdRg 52 R6NXNmW8oMZuxglkmUwayMiPS+N4zNYqv0CXYzlEqCOgq9MJUcAMHt+KpiST+sm6 53 FWkJ9D+biNPyQ9QKf1AE4BdZia4lHfPYU/C/DEL/a5xQuuop/zMQZoGaIA4p2zGQ 54 /maqYxEIM/yRBQpT1jlODKPJrMEgx7SgY2hRU47YZ4fj6350fb6fNBtiiMAfJbjL 55 S3Gh85E9fm3hJaNSPKAaJFYL1Ya2svuWfgHj677C56UcmYis7fhiiy1aJuYdHnSm 56 sD53z/f0J+We4VZjY+pidvA9BGZPFVdR3wd3xGs8/oH6UWaLJAMGkLG6dDb3qDLm 57 1LFZwsX8sdD32i1SiWanYQYSYMyFWr0awi4xdoMtYCL7uKBYtwtPyvq3cj4IrJlb 58 mfeFhT57UbE4qukTDIQ0Y0WM40UYRTakRaDY7ubhXgLgx09Cnp9XTVMsHgT6j9/i 59 1pxsB104XLWjQHTjr1JtiaBQEwFh9r2OKTcpvaLcbNtYpo7CzOs= 60 =FRsO 61 -----END PGP SIGNATURE----- 62 63 empty commit` 64 65 sha := SHA1{0xfe, 0xaf, 0x4b, 0xa6, 0xbc, 0x63, 0x5f, 0xec, 0x44, 0x2f, 0x46, 0xdd, 0xd4, 0x51, 0x24, 0x16, 0xec, 0x43, 0xc2, 0xc2} 66 gitRepo, err := openRepositoryWithDefaultContext(filepath.Join(testReposDir, "repo1_bare")) 67 assert.NoError(t, err) 68 assert.NotNil(t, gitRepo) 69 defer gitRepo.Close() 70 71 commitFromReader, err := CommitFromReader(gitRepo, sha, strings.NewReader(commitString)) 72 assert.NoError(t, err) 73 if !assert.NotNil(t, commitFromReader) { 74 return 75 } 76 assert.EqualValues(t, sha, commitFromReader.ID) 77 assert.EqualValues(t, `-----BEGIN PGP SIGNATURE----- 78 79 iQIzBAABCAAdFiEEWPb2jX6FS2mqyJRQLmK0HJOGlEMFAl00zmEACgkQLmK0HJOG 80 lEMDFBAAhQKKqLD1VICygJMEB8t1gBmNLgvziOLfpX4KPWdPtBk3v/QJ7OrfMrVK 81 xlC4ZZyx6yMm1Q7GzmuWykmZQJ9HMaHJ49KAbh5MMjjV/+OoQw9coIdo8nagRUld 82 vX8QHzNZ6Agx77xHuDJZgdHKpQK3TrMDsxzoYYMvlqoLJIDXE1Sp7KYNy12nhdRg 83 R6NXNmW8oMZuxglkmUwayMiPS+N4zNYqv0CXYzlEqCOgq9MJUcAMHt+KpiST+sm6 84 FWkJ9D+biNPyQ9QKf1AE4BdZia4lHfPYU/C/DEL/a5xQuuop/zMQZoGaIA4p2zGQ 85 /maqYxEIM/yRBQpT1jlODKPJrMEgx7SgY2hRU47YZ4fj6350fb6fNBtiiMAfJbjL 86 S3Gh85E9fm3hJaNSPKAaJFYL1Ya2svuWfgHj677C56UcmYis7fhiiy1aJuYdHnSm 87 sD53z/f0J+We4VZjY+pidvA9BGZPFVdR3wd3xGs8/oH6UWaLJAMGkLG6dDb3qDLm 88 1LFZwsX8sdD32i1SiWanYQYSYMyFWr0awi4xdoMtYCL7uKBYtwtPyvq3cj4IrJlb 89 mfeFhT57UbE4qukTDIQ0Y0WM40UYRTakRaDY7ubhXgLgx09Cnp9XTVMsHgT6j9/i 90 1pxsB104XLWjQHTjr1JtiaBQEwFh9r2OKTcpvaLcbNtYpo7CzOs= 91 =FRsO 92 -----END PGP SIGNATURE----- 93 `, commitFromReader.Signature.Signature) 94 assert.EqualValues(t, `tree f1a6cb52b2d16773290cefe49ad0684b50a4f930 95 parent 37991dec2c8e592043f47155ce4808d4580f9123 96 author silverwind <me@silverwind.io> 1563741793 +0200 97 committer silverwind <me@silverwind.io> 1563741793 +0200 98 99 empty commit`, commitFromReader.Signature.Payload) 100 assert.EqualValues(t, "silverwind <me@silverwind.io>", commitFromReader.Author.String()) 101 102 commitFromReader2, err := CommitFromReader(gitRepo, sha, strings.NewReader(commitString+"\n\n")) 103 assert.NoError(t, err) 104 commitFromReader.CommitMessage += "\n\n" 105 commitFromReader.Signature.Payload += "\n\n" 106 assert.EqualValues(t, commitFromReader, commitFromReader2) 107 } 108 109 func TestHasPreviousCommit(t *testing.T) { 110 bareRepo1Path := filepath.Join(testReposDir, "repo1_bare") 111 112 repo, err := openRepositoryWithDefaultContext(bareRepo1Path) 113 assert.NoError(t, err) 114 defer repo.Close() 115 116 commit, err := repo.GetCommit("8006ff9adbf0cb94da7dad9e537e53817f9fa5c0") 117 assert.NoError(t, err) 118 119 parentSHA := MustIDFromString("8d92fc957a4d7cfd98bc375f0b7bb189a0d6c9f2") 120 notParentSHA := MustIDFromString("2839944139e0de9737a044f78b0e4b40d989a9e3") 121 122 haz, err := commit.HasPreviousCommit(parentSHA) 123 assert.NoError(t, err) 124 assert.True(t, haz) 125 126 hazNot, err := commit.HasPreviousCommit(notParentSHA) 127 assert.NoError(t, err) 128 assert.False(t, hazNot) 129 130 selfNot, err := commit.HasPreviousCommit(commit.ID) 131 assert.NoError(t, err) 132 assert.False(t, selfNot) 133 } 134 135 func TestParseCommitFileStatus(t *testing.T) { 136 type testcase struct { 137 output string 138 added []string 139 removed []string 140 modified []string 141 } 142 143 kases := []testcase{ 144 { 145 // Merge commit 146 output: "MM\x00options/locale/locale_en-US.ini\x00", 147 modified: []string{ 148 "options/locale/locale_en-US.ini", 149 }, 150 added: []string{}, 151 removed: []string{}, 152 }, 153 { 154 // Spaces commit 155 output: "D\x00b\x00D\x00b b/b\x00A\x00b b/b b/b b/b\x00A\x00b b/b b/b b/b b/b\x00", 156 removed: []string{ 157 "b", 158 "b b/b", 159 }, 160 modified: []string{}, 161 added: []string{ 162 "b b/b b/b b/b", 163 "b b/b b/b b/b b/b", 164 }, 165 }, 166 { 167 // larger commit 168 output: "M\x00go.mod\x00M\x00go.sum\x00M\x00modules/ssh/ssh.go\x00M\x00vendor/github.com/gliderlabs/ssh/circle.yml\x00M\x00vendor/github.com/gliderlabs/ssh/context.go\x00A\x00vendor/github.com/gliderlabs/ssh/go.mod\x00A\x00vendor/github.com/gliderlabs/ssh/go.sum\x00M\x00vendor/github.com/gliderlabs/ssh/server.go\x00M\x00vendor/github.com/gliderlabs/ssh/session.go\x00M\x00vendor/github.com/gliderlabs/ssh/ssh.go\x00M\x00vendor/golang.org/x/sys/unix/mkerrors.sh\x00M\x00vendor/golang.org/x/sys/unix/syscall_darwin.go\x00M\x00vendor/golang.org/x/sys/unix/zerrors_darwin_amd64.go\x00M\x00vendor/golang.org/x/sys/unix/zerrors_darwin_arm64.go\x00M\x00vendor/golang.org/x/sys/unix/zerrors_freebsd_386.go\x00M\x00vendor/golang.org/x/sys/unix/zerrors_freebsd_amd64.go\x00M\x00vendor/golang.org/x/sys/unix/zerrors_freebsd_arm.go\x00M\x00vendor/golang.org/x/sys/unix/zerrors_freebsd_arm64.go\x00M\x00vendor/golang.org/x/sys/unix/zerrors_linux.go\x00M\x00vendor/golang.org/x/sys/unix/ztypes_darwin_amd64.go\x00M\x00vendor/golang.org/x/sys/unix/ztypes_darwin_arm64.go\x00M\x00vendor/golang.org/x/sys/unix/ztypes_dragonfly_amd64.go\x00M\x00vendor/golang.org/x/sys/unix/ztypes_freebsd_386.go\x00M\x00vendor/golang.org/x/sys/unix/ztypes_freebsd_amd64.go\x00M\x00vendor/golang.org/x/sys/unix/ztypes_freebsd_arm.go\x00M\x00vendor/golang.org/x/sys/unix/ztypes_freebsd_arm64.go\x00M\x00vendor/golang.org/x/sys/unix/ztypes_netbsd_386.go\x00M\x00vendor/golang.org/x/sys/unix/ztypes_netbsd_amd64.go\x00M\x00vendor/golang.org/x/sys/unix/ztypes_netbsd_arm.go\x00M\x00vendor/golang.org/x/sys/unix/ztypes_netbsd_arm64.go\x00M\x00vendor/modules.txt\x00", 169 modified: []string{ 170 "go.mod", 171 "go.sum", 172 "modules/ssh/ssh.go", 173 "vendor/github.com/gliderlabs/ssh/circle.yml", 174 "vendor/github.com/gliderlabs/ssh/context.go", 175 "vendor/github.com/gliderlabs/ssh/server.go", 176 "vendor/github.com/gliderlabs/ssh/session.go", 177 "vendor/github.com/gliderlabs/ssh/ssh.go", 178 "vendor/golang.org/x/sys/unix/mkerrors.sh", 179 "vendor/golang.org/x/sys/unix/syscall_darwin.go", 180 "vendor/golang.org/x/sys/unix/zerrors_darwin_amd64.go", 181 "vendor/golang.org/x/sys/unix/zerrors_darwin_arm64.go", 182 "vendor/golang.org/x/sys/unix/zerrors_freebsd_386.go", 183 "vendor/golang.org/x/sys/unix/zerrors_freebsd_amd64.go", 184 "vendor/golang.org/x/sys/unix/zerrors_freebsd_arm.go", 185 "vendor/golang.org/x/sys/unix/zerrors_freebsd_arm64.go", 186 "vendor/golang.org/x/sys/unix/zerrors_linux.go", 187 "vendor/golang.org/x/sys/unix/ztypes_darwin_amd64.go", 188 "vendor/golang.org/x/sys/unix/ztypes_darwin_arm64.go", 189 "vendor/golang.org/x/sys/unix/ztypes_dragonfly_amd64.go", 190 "vendor/golang.org/x/sys/unix/ztypes_freebsd_386.go", 191 "vendor/golang.org/x/sys/unix/ztypes_freebsd_amd64.go", 192 "vendor/golang.org/x/sys/unix/ztypes_freebsd_arm.go", 193 "vendor/golang.org/x/sys/unix/ztypes_freebsd_arm64.go", 194 "vendor/golang.org/x/sys/unix/ztypes_netbsd_386.go", 195 "vendor/golang.org/x/sys/unix/ztypes_netbsd_amd64.go", 196 "vendor/golang.org/x/sys/unix/ztypes_netbsd_arm.go", 197 "vendor/golang.org/x/sys/unix/ztypes_netbsd_arm64.go", 198 "vendor/modules.txt", 199 }, 200 added: []string{ 201 "vendor/github.com/gliderlabs/ssh/go.mod", 202 "vendor/github.com/gliderlabs/ssh/go.sum", 203 }, 204 removed: []string{}, 205 }, 206 { 207 // git 1.7.2 adds an unnecessary \x00 on merge commit 208 output: "\x00MM\x00options/locale/locale_en-US.ini\x00", 209 modified: []string{ 210 "options/locale/locale_en-US.ini", 211 }, 212 added: []string{}, 213 removed: []string{}, 214 }, 215 { 216 // git 1.7.2 adds an unnecessary \n on normal commit 217 output: "\nD\x00b\x00D\x00b b/b\x00A\x00b b/b b/b b/b\x00A\x00b b/b b/b b/b b/b\x00", 218 removed: []string{ 219 "b", 220 "b b/b", 221 }, 222 modified: []string{}, 223 added: []string{ 224 "b b/b b/b b/b", 225 "b b/b b/b b/b b/b", 226 }, 227 }, 228 } 229 230 for _, kase := range kases { 231 fileStatus := NewCommitFileStatus() 232 parseCommitFileStatus(fileStatus, strings.NewReader(kase.output)) 233 234 assert.Equal(t, kase.added, fileStatus.Added) 235 assert.Equal(t, kase.removed, fileStatus.Removed) 236 assert.Equal(t, kase.modified, fileStatus.Modified) 237 } 238 }