This repository has no description
5.2 kB
120 lines
1// Copyright 2021 The Gitea Authors. All rights reserved.
2// SPDX-License-Identifier: MIT
3
4package gitea
5
6import (
7 "strings"
8 "testing"
9
10 "github.com/go-git/go-git/v5/plumbing"
11 "github.com/stretchr/testify/assert"
12 "github.com/stretchr/testify/require"
13 "tangled.org/core/types"
14)
15
16func TestCommitFromReader(t *testing.T) {
17 commitString := `tree f1a6cb52b2d16773290cefe49ad0684b50a4f930
18parent 37991dec2c8e592043f47155ce4808d4580f9123
19author silverwind <me@silverwind.io> 1563741793 +0200
20committer silverwind <me@silverwind.io> 1563741793 +0200
21gpgsig -----BEGIN PGP SIGNATURE-----
22` + " " + `
23 iQIzBAABCAAdFiEEWPb2jX6FS2mqyJRQLmK0HJOGlEMFAl00zmEACgkQLmK0HJOG
24 lEMDFBAAhQKKqLD1VICygJMEB8t1gBmNLgvziOLfpX4KPWdPtBk3v/QJ7OrfMrVK
25 xlC4ZZyx6yMm1Q7GzmuWykmZQJ9HMaHJ49KAbh5MMjjV/+OoQw9coIdo8nagRUld
26 vX8QHzNZ6Agx77xHuDJZgdHKpQK3TrMDsxzoYYMvlqoLJIDXE1Sp7KYNy12nhdRg
27 R6NXNmW8oMZuxglkmUwayMiPS+N4zNYqv0CXYzlEqCOgq9MJUcAMHt+KpiST+sm6
28 FWkJ9D+biNPyQ9QKf1AE4BdZia4lHfPYU/C/DEL/a5xQuuop/zMQZoGaIA4p2zGQ
29 /maqYxEIM/yRBQpT1jlODKPJrMEgx7SgY2hRU47YZ4fj6350fb6fNBtiiMAfJbjL
30 S3Gh85E9fm3hJaNSPKAaJFYL1Ya2svuWfgHj677C56UcmYis7fhiiy1aJuYdHnSm
31 sD53z/f0J+We4VZjY+pidvA9BGZPFVdR3wd3xGs8/oH6UWaLJAMGkLG6dDb3qDLm
32 1LFZwsX8sdD32i1SiWanYQYSYMyFWr0awi4xdoMtYCL7uKBYtwtPyvq3cj4IrJlb
33 mfeFhT57UbE4qukTDIQ0Y0WM40UYRTakRaDY7ubhXgLgx09Cnp9XTVMsHgT6j9/i
34 1pxsB104XLWjQHTjr1JtiaBQEwFh9r2OKTcpvaLcbNtYpo7CzOs=
35 =FRsO
36 -----END PGP SIGNATURE-----
37
38empty commit`
39
40 sha := plumbing.NewHash("feaf4ba6bc635fec442f46ddd4512416ec43c2c2")
41
42 commitFromReader, err := ReadCommit(sha, strings.NewReader(commitString))
43 assert.NoError(t, err)
44 require.NotNil(t, commitFromReader)
45
46 tcommit := types.Commit{}
47 tcommit.FromGoGitCommit(commitFromReader)
48 assert.EqualValues(t, sha, tcommit.Hash)
49
50 assert.Equal(t, `-----BEGIN PGP SIGNATURE-----
51
52iQIzBAABCAAdFiEEWPb2jX6FS2mqyJRQLmK0HJOGlEMFAl00zmEACgkQLmK0HJOG
53lEMDFBAAhQKKqLD1VICygJMEB8t1gBmNLgvziOLfpX4KPWdPtBk3v/QJ7OrfMrVK
54xlC4ZZyx6yMm1Q7GzmuWykmZQJ9HMaHJ49KAbh5MMjjV/+OoQw9coIdo8nagRUld
55vX8QHzNZ6Agx77xHuDJZgdHKpQK3TrMDsxzoYYMvlqoLJIDXE1Sp7KYNy12nhdRg
56R6NXNmW8oMZuxglkmUwayMiPS+N4zNYqv0CXYzlEqCOgq9MJUcAMHt+KpiST+sm6
57FWkJ9D+biNPyQ9QKf1AE4BdZia4lHfPYU/C/DEL/a5xQuuop/zMQZoGaIA4p2zGQ
58/maqYxEIM/yRBQpT1jlODKPJrMEgx7SgY2hRU47YZ4fj6350fb6fNBtiiMAfJbjL
59S3Gh85E9fm3hJaNSPKAaJFYL1Ya2svuWfgHj677C56UcmYis7fhiiy1aJuYdHnSm
60sD53z/f0J+We4VZjY+pidvA9BGZPFVdR3wd3xGs8/oH6UWaLJAMGkLG6dDb3qDLm
611LFZwsX8sdD32i1SiWanYQYSYMyFWr0awi4xdoMtYCL7uKBYtwtPyvq3cj4IrJlb
62mfeFhT57UbE4qukTDIQ0Y0WM40UYRTakRaDY7ubhXgLgx09Cnp9XTVMsHgT6j9/i
631pxsB104XLWjQHTjr1JtiaBQEwFh9r2OKTcpvaLcbNtYpo7CzOs=
64=FRsO
65-----END PGP SIGNATURE-----`, commitFromReader.PGPSignature)
66 assert.Equal(t, `tree f1a6cb52b2d16773290cefe49ad0684b50a4f930
67parent 37991dec2c8e592043f47155ce4808d4580f9123
68author silverwind <me@silverwind.io> 1563741793 +0200
69committer silverwind <me@silverwind.io> 1563741793 +0200
70
71empty commit`, tcommit.Payload())
72 assert.Equal(t, "silverwind <me@silverwind.io>", commitFromReader.Author.String())
73}
74
75func TestCommitFromReaderMergeTag(t *testing.T) {
76 // Built with explicit "\n" concatenation, not a backtick literal: the blank
77 // mergetag continuation lines are " \n" (space + newline) and gofmt/editors
78 // strip trailing whitespace from raw literals, which would corrupt the input.
79 commitString := "tree 635dfb8e1e9d4d75855cc23eb28d35533f55b42f\n" +
80 "parent c1fa0bb633e4a6b11e83ffc57fa5abe8ebb87891\n" +
81 "parent 8f80b5b227ef9ea422080487715c841856339aed\n" +
82 "author Linus Torvalds <torvalds@linux-foundation.org> 1778539129 -0700\n" +
83 "committer Linus Torvalds <torvalds@linux-foundation.org> 1778539129 -0700\n" +
84 "mergetag object 8f80b5b227ef9ea422080487715c841856339aed\n" +
85 " type commit\n" +
86 " tag linux_kselftest-kunit-fixes-7.1-rc4\n" +
87 " tagger Shuah Khan <skhan@linuxfoundation.org> 1778535878 -0600\n" +
88 " \n" + // blank continuation line inside the mergetag: the bug trigger
89 " linux_kselftest-kunit-fixes-7.1-rc4\n" +
90 " \n" +
91 " Fix to decouple KUNIT_DEBUGFS and KUNIT_ALL_TESTS options.\n" +
92 " -----BEGIN PGP SIGNATURE-----\n" +
93 " \n" +
94 " iQIzBAABCgAdFiEEPZKym/RZuOCGeA/kCwJExA0NQxwFAmoCUf0ACgkQCwJExA0N\n" +
95 " =QdSk\n" +
96 " -----END PGP SIGNATURE-----\n" +
97 "\n" + // real header/message separator: truly empty line
98 "Merge tag 'linux_kselftest-kunit-fixes-7.1-rc4' of git://example\n" +
99 "\n" +
100 "Pull kunit fixes from Shuah Khan"
101
102 sha := plumbing.NewHash("50897c955902c93ae71c38698abb910525ebdc89")
103
104 c, err := ReadCommit(sha, strings.NewReader(commitString))
105 require.NoError(t, err)
106 require.NotNil(t, c)
107
108 // Message must be only the merge message, not polluted with the tag body/signature.
109 assert.Equal(t, "Merge tag 'linux_kselftest-kunit-fixes-7.1-rc4' of git://example\n\nPull kunit fixes from Shuah Khan", c.Message)
110
111 // mergetag is captured, and this commit itself is not gpg-signed.
112 assert.Contains(t, c.MergeTag, "type commit\n")
113 assert.Contains(t, c.MergeTag, "-----END PGP SIGNATURE-----")
114 assert.Empty(t, c.PGPSignature)
115
116 // The broken parser dumped stray continuation lines into ExtraHeaders[""].
117 assert.NotContains(t, c.ExtraHeaders, "")
118
119 assert.Equal(t, "Linus Torvalds <torvalds@linux-foundation.org>", c.Author.String())
120}