This repository has no description
0

Configure Feed

Select the types of activity you want to include in your feed.

core / knotmirror / xrpc / gitea / commit_test.go
6.0 kB 149 lines
1// Copyright 2021 The Gitea Authors. All rights reserved. 2// SPDX-License-Identifier: MIT 3 4package gitea 5 6import ( 7 "context" 8 "os" 9 "os/exec" 10 "path/filepath" 11 "strings" 12 "testing" 13 14 "github.com/go-git/go-git/v5/plumbing" 15 "github.com/stretchr/testify/assert" 16 "github.com/stretchr/testify/require" 17 "tangled.org/core/types" 18) 19 20func TestGetCommitDereferencesAnnotatedTag(t *testing.T) { 21 repo := t.TempDir() 22 runGit := func(args ...string) []byte { 23 t.Helper() 24 cmd := exec.Command("git", args...) 25 cmd.Dir = repo 26 out, err := cmd.CombinedOutput() 27 require.NoError(t, err, string(out)) 28 return out 29 } 30 31 runGit("init") 32 runGit("config", "user.name", "test") 33 runGit("config", "user.email", "test@example.com") 34 require.NoError(t, os.WriteFile(filepath.Join(repo, "file.txt"), []byte("hello\n"), 0o644)) 35 runGit("add", "file.txt") 36 runGit("commit", "-m", "initial") 37 runGit("tag", "-a", "v0.1.0", "-m", "release") 38 39 want := strings.TrimSpace(string(runGit("rev-parse", "v0.1.0^{commit}"))) 40 commit, err := GetCommit(context.Background(), repo, "v0.1.0") 41 require.NoError(t, err) 42 assert.Equal(t, want, commit.Hash.String()) 43} 44 45func TestCommitFromReader(t *testing.T) { 46 commitString := `tree f1a6cb52b2d16773290cefe49ad0684b50a4f930 47parent 37991dec2c8e592043f47155ce4808d4580f9123 48author silverwind <me@silverwind.io> 1563741793 +0200 49committer silverwind <me@silverwind.io> 1563741793 +0200 50gpgsig -----BEGIN PGP SIGNATURE----- 51` + " " + ` 52 iQIzBAABCAAdFiEEWPb2jX6FS2mqyJRQLmK0HJOGlEMFAl00zmEACgkQLmK0HJOG 53 lEMDFBAAhQKKqLD1VICygJMEB8t1gBmNLgvziOLfpX4KPWdPtBk3v/QJ7OrfMrVK 54 xlC4ZZyx6yMm1Q7GzmuWykmZQJ9HMaHJ49KAbh5MMjjV/+OoQw9coIdo8nagRUld 55 vX8QHzNZ6Agx77xHuDJZgdHKpQK3TrMDsxzoYYMvlqoLJIDXE1Sp7KYNy12nhdRg 56 R6NXNmW8oMZuxglkmUwayMiPS+N4zNYqv0CXYzlEqCOgq9MJUcAMHt+KpiST+sm6 57 FWkJ9D+biNPyQ9QKf1AE4BdZia4lHfPYU/C/DEL/a5xQuuop/zMQZoGaIA4p2zGQ 58 /maqYxEIM/yRBQpT1jlODKPJrMEgx7SgY2hRU47YZ4fj6350fb6fNBtiiMAfJbjL 59 S3Gh85E9fm3hJaNSPKAaJFYL1Ya2svuWfgHj677C56UcmYis7fhiiy1aJuYdHnSm 60 sD53z/f0J+We4VZjY+pidvA9BGZPFVdR3wd3xGs8/oH6UWaLJAMGkLG6dDb3qDLm 61 1LFZwsX8sdD32i1SiWanYQYSYMyFWr0awi4xdoMtYCL7uKBYtwtPyvq3cj4IrJlb 62 mfeFhT57UbE4qukTDIQ0Y0WM40UYRTakRaDY7ubhXgLgx09Cnp9XTVMsHgT6j9/i 63 1pxsB104XLWjQHTjr1JtiaBQEwFh9r2OKTcpvaLcbNtYpo7CzOs= 64 =FRsO 65 -----END PGP SIGNATURE----- 66 67empty commit` 68 69 sha := plumbing.NewHash("feaf4ba6bc635fec442f46ddd4512416ec43c2c2") 70 71 commitFromReader, err := ReadCommit(sha, strings.NewReader(commitString)) 72 assert.NoError(t, err) 73 require.NotNil(t, commitFromReader) 74 75 tcommit := types.Commit{} 76 tcommit.FromGoGitCommit(commitFromReader) 77 assert.EqualValues(t, sha, tcommit.Hash) 78 79 assert.Equal(t, `-----BEGIN PGP SIGNATURE----- 80 81iQIzBAABCAAdFiEEWPb2jX6FS2mqyJRQLmK0HJOGlEMFAl00zmEACgkQLmK0HJOG 82lEMDFBAAhQKKqLD1VICygJMEB8t1gBmNLgvziOLfpX4KPWdPtBk3v/QJ7OrfMrVK 83xlC4ZZyx6yMm1Q7GzmuWykmZQJ9HMaHJ49KAbh5MMjjV/+OoQw9coIdo8nagRUld 84vX8QHzNZ6Agx77xHuDJZgdHKpQK3TrMDsxzoYYMvlqoLJIDXE1Sp7KYNy12nhdRg 85R6NXNmW8oMZuxglkmUwayMiPS+N4zNYqv0CXYzlEqCOgq9MJUcAMHt+KpiST+sm6 86FWkJ9D+biNPyQ9QKf1AE4BdZia4lHfPYU/C/DEL/a5xQuuop/zMQZoGaIA4p2zGQ 87/maqYxEIM/yRBQpT1jlODKPJrMEgx7SgY2hRU47YZ4fj6350fb6fNBtiiMAfJbjL 88S3Gh85E9fm3hJaNSPKAaJFYL1Ya2svuWfgHj677C56UcmYis7fhiiy1aJuYdHnSm 89sD53z/f0J+We4VZjY+pidvA9BGZPFVdR3wd3xGs8/oH6UWaLJAMGkLG6dDb3qDLm 901LFZwsX8sdD32i1SiWanYQYSYMyFWr0awi4xdoMtYCL7uKBYtwtPyvq3cj4IrJlb 91mfeFhT57UbE4qukTDIQ0Y0WM40UYRTakRaDY7ubhXgLgx09Cnp9XTVMsHgT6j9/i 921pxsB104XLWjQHTjr1JtiaBQEwFh9r2OKTcpvaLcbNtYpo7CzOs= 93=FRsO 94-----END PGP SIGNATURE-----`, commitFromReader.PGPSignature) 95 assert.Equal(t, `tree f1a6cb52b2d16773290cefe49ad0684b50a4f930 96parent 37991dec2c8e592043f47155ce4808d4580f9123 97author silverwind <me@silverwind.io> 1563741793 +0200 98committer silverwind <me@silverwind.io> 1563741793 +0200 99 100empty commit`, tcommit.Payload()) 101 assert.Equal(t, "silverwind <me@silverwind.io>", commitFromReader.Author.String()) 102} 103 104func TestCommitFromReaderMergeTag(t *testing.T) { 105 // Built with explicit "\n" concatenation, not a backtick literal: the blank 106 // mergetag continuation lines are " \n" (space + newline) and gofmt/editors 107 // strip trailing whitespace from raw literals, which would corrupt the input. 108 commitString := "tree 635dfb8e1e9d4d75855cc23eb28d35533f55b42f\n" + 109 "parent c1fa0bb633e4a6b11e83ffc57fa5abe8ebb87891\n" + 110 "parent 8f80b5b227ef9ea422080487715c841856339aed\n" + 111 "author Linus Torvalds <torvalds@linux-foundation.org> 1778539129 -0700\n" + 112 "committer Linus Torvalds <torvalds@linux-foundation.org> 1778539129 -0700\n" + 113 "mergetag object 8f80b5b227ef9ea422080487715c841856339aed\n" + 114 " type commit\n" + 115 " tag linux_kselftest-kunit-fixes-7.1-rc4\n" + 116 " tagger Shuah Khan <skhan@linuxfoundation.org> 1778535878 -0600\n" + 117 " \n" + // blank continuation line inside the mergetag: the bug trigger 118 " linux_kselftest-kunit-fixes-7.1-rc4\n" + 119 " \n" + 120 " Fix to decouple KUNIT_DEBUGFS and KUNIT_ALL_TESTS options.\n" + 121 " -----BEGIN PGP SIGNATURE-----\n" + 122 " \n" + 123 " iQIzBAABCgAdFiEEPZKym/RZuOCGeA/kCwJExA0NQxwFAmoCUf0ACgkQCwJExA0N\n" + 124 " =QdSk\n" + 125 " -----END PGP SIGNATURE-----\n" + 126 "\n" + // real header/message separator: truly empty line 127 "Merge tag 'linux_kselftest-kunit-fixes-7.1-rc4' of git://example\n" + 128 "\n" + 129 "Pull kunit fixes from Shuah Khan" 130 131 sha := plumbing.NewHash("50897c955902c93ae71c38698abb910525ebdc89") 132 133 c, err := ReadCommit(sha, strings.NewReader(commitString)) 134 require.NoError(t, err) 135 require.NotNil(t, c) 136 137 // Message must be only the merge message, not polluted with the tag body/signature. 138 assert.Equal(t, "Merge tag 'linux_kselftest-kunit-fixes-7.1-rc4' of git://example\n\nPull kunit fixes from Shuah Khan", c.Message) 139 140 // mergetag is captured, and this commit itself is not gpg-signed. 141 assert.Contains(t, c.MergeTag, "type commit\n") 142 assert.Contains(t, c.MergeTag, "-----END PGP SIGNATURE-----") 143 assert.Empty(t, c.PGPSignature) 144 145 // The broken parser dumped stray continuation lines into ExtraHeaders[""]. 146 assert.NotContains(t, c.ExtraHeaders, "") 147 148 assert.Equal(t, "Linus Torvalds <torvalds@linux-foundation.org>", c.Author.String()) 149}