code.gitea.io/gitea@v1.22.3/modules/git/commit_sha256_test.go (about) 1 // Copyright 2023 The Gitea Authors. All rights reserved. 2 // SPDX-License-Identifier: MIT 3 4 //go:build !gogit 5 6 package git 7 8 import ( 9 "path/filepath" 10 "strings" 11 "testing" 12 13 "github.com/stretchr/testify/assert" 14 ) 15 16 func TestCommitsCountSha256(t *testing.T) { 17 bareRepo1Path := filepath.Join(testReposDir, "repo1_bare_sha256") 18 19 commitsCount, err := CommitsCount(DefaultContext, 20 CommitsCountOptions{ 21 RepoPath: bareRepo1Path, 22 Revision: []string{"f004f41359117d319dedd0eaab8c5259ee2263da839dcba33637997458627fdc"}, 23 }) 24 25 assert.NoError(t, err) 26 assert.Equal(t, int64(3), commitsCount) 27 } 28 29 func TestCommitsCountWithoutBaseSha256(t *testing.T) { 30 bareRepo1Path := filepath.Join(testReposDir, "repo1_bare_sha256") 31 32 commitsCount, err := CommitsCount(DefaultContext, 33 CommitsCountOptions{ 34 RepoPath: bareRepo1Path, 35 Not: "main", 36 Revision: []string{"branch1"}, 37 }) 38 39 assert.NoError(t, err) 40 assert.Equal(t, int64(2), commitsCount) 41 } 42 43 func TestGetFullCommitIDSha256(t *testing.T) { 44 bareRepo1Path := filepath.Join(testReposDir, "repo1_bare_sha256") 45 46 id, err := GetFullCommitID(DefaultContext, bareRepo1Path, "f004f4") 47 assert.NoError(t, err) 48 assert.Equal(t, "f004f41359117d319dedd0eaab8c5259ee2263da839dcba33637997458627fdc", id) 49 } 50 51 func TestGetFullCommitIDErrorSha256(t *testing.T) { 52 bareRepo1Path := filepath.Join(testReposDir, "repo1_bare_sha256") 53 54 id, err := GetFullCommitID(DefaultContext, bareRepo1Path, "unknown") 55 assert.Empty(t, id) 56 if assert.Error(t, err) { 57 assert.EqualError(t, err, "object does not exist [id: unknown, rel_path: ]") 58 } 59 } 60 61 func TestCommitFromReaderSha256(t *testing.T) { 62 commitString := `9433b2a62b964c17a4485ae180f45f595d3e69d31b786087775e28c6b6399df0 commit 1114 63 tree e7f9e96dd79c09b078cac8b303a7d3b9d65ff9b734e86060a4d20409fd379f9e 64 parent 26e9ccc29fad747e9c5d9f4c9ddeb7eff61cc45ef6a8dc258cbeb181afc055e8 65 author Adam Majer <amajer@suse.de> 1698676906 +0100 66 committer Adam Majer <amajer@suse.de> 1698676906 +0100 67 gpgsig-sha256 -----BEGIN PGP SIGNATURE----- 68 ` + " " + ` 69 iQIrBAABCgAtFiEES+fB08xlgTrzSdQvhkUIsBsmec8FAmU/wKoPHGFtYWplckBz 70 dXNlLmRlAAoJEIZFCLAbJnnP4s4PQIJATa++WPzR6/H4etT7bsOGoMyguEJYyWOd 71 aTybplzT7QAL7h2to0QszGabtzMJPIA39xSFZNYNN30voK5YyyYibXluPKgjemfK 72 WNXwF+gkwgZI38gSvKf+vlqI+EYyIFe19wOhiju0m8SIlB5NEPiWHa17q2mqmqqx 73 1FWa2JdqLPYjAtSLFXeSZegrY5V1FxdemyMUONkg8YO9OSIMZiE0GsnnOXQ3xcT4 74 JTCnmlUxIKw689UiEY80JopUIq+Wl7+qq9507IYYSUCyB6JazL42AKMzVCbD+qBP 75 oOzh/hafYgk9H9qCQXaLbmvs17zXRpicig1bAzqgAy1FDelvpERyRTydEajSLIG6 76 U1cRCkgXCZ0NfsYNPPmBa8b3+rnstypXYTbyMwTln7FfUAaGo6o9JYiPMkzxlmsy 77 zfp/tcaY8+LlBL9aOJjtv+a0p+HrpCGd6CCa4ARfphTLq8QRSSh8uzlB9N+6HnRI 78 VAEUo6ecdDxSpyt2naeg9pKus/BRi7P6g4B1hkk/zZstUX/QP4IQuAJbXjkvsC+X 79 HKRr3NlRM/DygzTyj0gN74uoa0goCIbyAQhiT42nm0cuhM7uN/W0ayrlZjGF1cbR 80 8NCJUL2Nwj0ywKIavC99Ipkb8AsFwpVT6U6effs6 81 =xybZ 82 -----END PGP SIGNATURE----- 83 84 signed commit` 85 86 sha := &Sha256Hash{ 87 0x94, 0x33, 0xb2, 0xa6, 0x2b, 0x96, 0x4c, 0x17, 0xa4, 0x48, 0x5a, 0xe1, 0x80, 0xf4, 0x5f, 0x59, 88 0x5d, 0x3e, 0x69, 0xd3, 0x1b, 0x78, 0x60, 0x87, 0x77, 0x5e, 0x28, 0xc6, 0xb6, 0x39, 0x9d, 0xf0, 89 } 90 gitRepo, err := openRepositoryWithDefaultContext(filepath.Join(testReposDir, "repo1_bare_sha256")) 91 assert.NoError(t, err) 92 assert.NotNil(t, gitRepo) 93 defer gitRepo.Close() 94 95 commitFromReader, err := CommitFromReader(gitRepo, sha, strings.NewReader(commitString)) 96 assert.NoError(t, err) 97 if !assert.NotNil(t, commitFromReader) { 98 return 99 } 100 assert.EqualValues(t, sha, commitFromReader.ID) 101 assert.EqualValues(t, `-----BEGIN PGP SIGNATURE----- 102 103 iQIrBAABCgAtFiEES+fB08xlgTrzSdQvhkUIsBsmec8FAmU/wKoPHGFtYWplckBz 104 dXNlLmRlAAoJEIZFCLAbJnnP4s4PQIJATa++WPzR6/H4etT7bsOGoMyguEJYyWOd 105 aTybplzT7QAL7h2to0QszGabtzMJPIA39xSFZNYNN30voK5YyyYibXluPKgjemfK 106 WNXwF+gkwgZI38gSvKf+vlqI+EYyIFe19wOhiju0m8SIlB5NEPiWHa17q2mqmqqx 107 1FWa2JdqLPYjAtSLFXeSZegrY5V1FxdemyMUONkg8YO9OSIMZiE0GsnnOXQ3xcT4 108 JTCnmlUxIKw689UiEY80JopUIq+Wl7+qq9507IYYSUCyB6JazL42AKMzVCbD+qBP 109 oOzh/hafYgk9H9qCQXaLbmvs17zXRpicig1bAzqgAy1FDelvpERyRTydEajSLIG6 110 U1cRCkgXCZ0NfsYNPPmBa8b3+rnstypXYTbyMwTln7FfUAaGo6o9JYiPMkzxlmsy 111 zfp/tcaY8+LlBL9aOJjtv+a0p+HrpCGd6CCa4ARfphTLq8QRSSh8uzlB9N+6HnRI 112 VAEUo6ecdDxSpyt2naeg9pKus/BRi7P6g4B1hkk/zZstUX/QP4IQuAJbXjkvsC+X 113 HKRr3NlRM/DygzTyj0gN74uoa0goCIbyAQhiT42nm0cuhM7uN/W0ayrlZjGF1cbR 114 8NCJUL2Nwj0ywKIavC99Ipkb8AsFwpVT6U6effs6 115 =xybZ 116 -----END PGP SIGNATURE----- 117 `, commitFromReader.Signature.Signature) 118 assert.EqualValues(t, `tree e7f9e96dd79c09b078cac8b303a7d3b9d65ff9b734e86060a4d20409fd379f9e 119 parent 26e9ccc29fad747e9c5d9f4c9ddeb7eff61cc45ef6a8dc258cbeb181afc055e8 120 author Adam Majer <amajer@suse.de> 1698676906 +0100 121 committer Adam Majer <amajer@suse.de> 1698676906 +0100 122 123 signed commit`, commitFromReader.Signature.Payload) 124 assert.EqualValues(t, "Adam Majer <amajer@suse.de>", commitFromReader.Author.String()) 125 126 commitFromReader2, err := CommitFromReader(gitRepo, sha, strings.NewReader(commitString+"\n\n")) 127 assert.NoError(t, err) 128 commitFromReader.CommitMessage += "\n\n" 129 commitFromReader.Signature.Payload += "\n\n" 130 assert.EqualValues(t, commitFromReader, commitFromReader2) 131 } 132 133 func TestHasPreviousCommitSha256(t *testing.T) { 134 bareRepo1Path := filepath.Join(testReposDir, "repo1_bare_sha256") 135 136 repo, err := openRepositoryWithDefaultContext(bareRepo1Path) 137 assert.NoError(t, err) 138 defer repo.Close() 139 140 commit, err := repo.GetCommit("f004f41359117d319dedd0eaab8c5259ee2263da839dcba33637997458627fdc") 141 assert.NoError(t, err) 142 143 objectFormat, err := repo.GetObjectFormat() 144 assert.NoError(t, err) 145 146 parentSHA := MustIDFromString("b0ec7af4547047f12d5093e37ef8f1b3b5415ed8ee17894d43a34d7d34212e9c") 147 notParentSHA := MustIDFromString("42e334efd04cd36eea6da0599913333c26116e1a537ca76e5b6e4af4dda00236") 148 assert.Equal(t, objectFormat, parentSHA.Type()) 149 assert.Equal(t, objectFormat.Name(), "sha256") 150 151 haz, err := commit.HasPreviousCommit(parentSHA) 152 assert.NoError(t, err) 153 assert.True(t, haz) 154 155 hazNot, err := commit.HasPreviousCommit(notParentSHA) 156 assert.NoError(t, err) 157 assert.False(t, hazNot) 158 159 selfNot, err := commit.HasPreviousCommit(commit.ID) 160 assert.NoError(t, err) 161 assert.False(t, selfNot) 162 } 163 164 func TestGetCommitFileStatusMergesSha256(t *testing.T) { 165 bareRepo1Path := filepath.Join(testReposDir, "repo6_merge_sha256") 166 167 commitFileStatus, err := GetCommitFileStatus(DefaultContext, bareRepo1Path, "d2e5609f630dd8db500f5298d05d16def282412e3e66ed68cc7d0833b29129a1") 168 assert.NoError(t, err) 169 170 expected := CommitFileStatus{ 171 []string{ 172 "add_file.txt", 173 }, 174 []string{}, 175 []string{ 176 "to_modify.txt", 177 }, 178 } 179 180 assert.Equal(t, expected.Added, commitFileStatus.Added) 181 assert.Equal(t, expected.Removed, commitFileStatus.Removed) 182 assert.Equal(t, expected.Modified, commitFileStatus.Modified) 183 184 expected = CommitFileStatus{ 185 []string{}, 186 []string{ 187 "to_remove.txt", 188 }, 189 []string{}, 190 } 191 192 commitFileStatus, err = GetCommitFileStatus(DefaultContext, bareRepo1Path, "da1ded40dc8e5b7c564171f4bf2fc8370487decfb1cb6a99ef28f3ed73d09172") 193 assert.NoError(t, err) 194 195 assert.Equal(t, expected.Added, commitFileStatus.Added) 196 assert.Equal(t, expected.Removed, commitFileStatus.Removed) 197 assert.Equal(t, expected.Modified, commitFileStatus.Modified) 198 }