Monorepo for Tangled tangled.org
5

Configure Feed

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

knotmirror/xrpc/gitea: parse commit extra headers

this will fix the verified mark bug

Signed-off-by: Seongmin Lee <git@boltless.me>

author
Seongmin Lee
committer
Tangled
date (Jun 15, 2026, 11:24 AM +0300) commit b91743d4 parent fdd35970 change-id rxsvlnsn
+79 -7
+6 -7
knotmirror/xrpc/gitea/batch.go
··· 186 186 // can lead to panic. 187 187 func ReadCommit(oid plumbing.Hash, reader io.Reader) (*object.Commit, error) { 188 188 commit := &object.Commit{ 189 - Hash: oid, 189 + Hash: oid, 190 + ExtraHeaders: make(map[string][]byte), 190 191 } 191 192 192 193 payloadSB := new(strings.Builder) ··· 231 232 continue 232 233 } 233 234 234 - split := bytes.SplitN(trimmed, []byte{' '}, 2) 235 - var data []byte 236 - if len(split) > 1 { 237 - data = split[1] 238 - } 235 + k, data, _ := bytes.Cut(line, []byte{' '}) 239 236 240 - switch string(split[0]) { 237 + switch string(k) { 241 238 case "tree": 242 239 commit.TreeHash = plumbing.NewHash(string(data)) 243 240 _, _ = payloadSB.Write(line) ··· 257 254 _ = signatureSB.WriteByte('\n') 258 255 pgpsig = true 259 256 default: 257 + commit.ExtraHeaders[string(k)] = bytes.TrimSpace(data) 260 258 // If the first line is not any of the known headers, then it is probably the prefix added when git cat-file is called with --batch, and that is not part of the payload 261 259 if !firstLine { 262 260 // Every subsequent header field is added to the payload ··· 271 269 firstLine = false 272 270 } 273 271 commit.Message = messageSB.String() 272 + // TODO: pass raw payload so we can verify it without reconstructing the payload 274 273 commit.PGPSignature = signatureSB.String() 275 274 276 275 return commit, nil
+73
knotmirror/xrpc/gitea/commit_test.go
··· 1 + // Copyright 2021 The Gitea Authors. All rights reserved. 2 + // SPDX-License-Identifier: MIT 3 + 4 + package gitea 5 + 6 + import ( 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 + 16 + func TestCommitFromReader(t *testing.T) { 17 + commitString := `tree f1a6cb52b2d16773290cefe49ad0684b50a4f930 18 + parent 37991dec2c8e592043f47155ce4808d4580f9123 19 + author silverwind <me@silverwind.io> 1563741793 +0200 20 + committer silverwind <me@silverwind.io> 1563741793 +0200 21 + gpgsig -----BEGIN PGP SIGNATURE----- 22 + iQIzBAABCAAdFiEEWPb2jX6FS2mqyJRQLmK0HJOGlEMFAl00zmEACgkQLmK0HJOG 23 + lEMDFBAAhQKKqLD1VICygJMEB8t1gBmNLgvziOLfpX4KPWdPtBk3v/QJ7OrfMrVK 24 + xlC4ZZyx6yMm1Q7GzmuWykmZQJ9HMaHJ49KAbh5MMjjV/+OoQw9coIdo8nagRUld 25 + vX8QHzNZ6Agx77xHuDJZgdHKpQK3TrMDsxzoYYMvlqoLJIDXE1Sp7KYNy12nhdRg 26 + R6NXNmW8oMZuxglkmUwayMiPS+N4zNYqv0CXYzlEqCOgq9MJUcAMHt+KpiST+sm6 27 + FWkJ9D+biNPyQ9QKf1AE4BdZia4lHfPYU/C/DEL/a5xQuuop/zMQZoGaIA4p2zGQ 28 + /maqYxEIM/yRBQpT1jlODKPJrMEgx7SgY2hRU47YZ4fj6350fb6fNBtiiMAfJbjL 29 + S3Gh85E9fm3hJaNSPKAaJFYL1Ya2svuWfgHj677C56UcmYis7fhiiy1aJuYdHnSm 30 + sD53z/f0J+We4VZjY+pidvA9BGZPFVdR3wd3xGs8/oH6UWaLJAMGkLG6dDb3qDLm 31 + 1LFZwsX8sdD32i1SiWanYQYSYMyFWr0awi4xdoMtYCL7uKBYtwtPyvq3cj4IrJlb 32 + mfeFhT57UbE4qukTDIQ0Y0WM40UYRTakRaDY7ubhXgLgx09Cnp9XTVMsHgT6j9/i 33 + 1pxsB104XLWjQHTjr1JtiaBQEwFh9r2OKTcpvaLcbNtYpo7CzOs= 34 + =FRsO 35 + -----END PGP SIGNATURE----- 36 + 37 + empty commit` 38 + 39 + sha := plumbing.NewHash("feaf4ba6bc635fec442f46ddd4512416ec43c2c2") 40 + 41 + commitFromReader, err := ReadCommit(sha, strings.NewReader(commitString)) 42 + assert.NoError(t, err) 43 + require.NotNil(t, commitFromReader) 44 + 45 + tcommit := types.Commit{} 46 + tcommit.FromGoGitCommit(commitFromReader) 47 + assert.EqualValues(t, sha, tcommit.Hash) 48 + 49 + assert.Equal(t, `-----BEGIN PGP SIGNATURE----- 50 + 51 + iQIzBAABCAAdFiEEWPb2jX6FS2mqyJRQLmK0HJOGlEMFAl00zmEACgkQLmK0HJOG 52 + lEMDFBAAhQKKqLD1VICygJMEB8t1gBmNLgvziOLfpX4KPWdPtBk3v/QJ7OrfMrVK 53 + xlC4ZZyx6yMm1Q7GzmuWykmZQJ9HMaHJ49KAbh5MMjjV/+OoQw9coIdo8nagRUld 54 + vX8QHzNZ6Agx77xHuDJZgdHKpQK3TrMDsxzoYYMvlqoLJIDXE1Sp7KYNy12nhdRg 55 + R6NXNmW8oMZuxglkmUwayMiPS+N4zNYqv0CXYzlEqCOgq9MJUcAMHt+KpiST+sm6 56 + FWkJ9D+biNPyQ9QKf1AE4BdZia4lHfPYU/C/DEL/a5xQuuop/zMQZoGaIA4p2zGQ 57 + /maqYxEIM/yRBQpT1jlODKPJrMEgx7SgY2hRU47YZ4fj6350fb6fNBtiiMAfJbjL 58 + S3Gh85E9fm3hJaNSPKAaJFYL1Ya2svuWfgHj677C56UcmYis7fhiiy1aJuYdHnSm 59 + sD53z/f0J+We4VZjY+pidvA9BGZPFVdR3wd3xGs8/oH6UWaLJAMGkLG6dDb3qDLm 60 + 1LFZwsX8sdD32i1SiWanYQYSYMyFWr0awi4xdoMtYCL7uKBYtwtPyvq3cj4IrJlb 61 + mfeFhT57UbE4qukTDIQ0Y0WM40UYRTakRaDY7ubhXgLgx09Cnp9XTVMsHgT6j9/i 62 + 1pxsB104XLWjQHTjr1JtiaBQEwFh9r2OKTcpvaLcbNtYpo7CzOs= 63 + =FRsO 64 + -----END PGP SIGNATURE----- 65 + `, commitFromReader.PGPSignature) 66 + assert.Equal(t, `tree f1a6cb52b2d16773290cefe49ad0684b50a4f930 67 + parent 37991dec2c8e592043f47155ce4808d4580f9123 68 + author silverwind <me@silverwind.io> 1563741793 +0200 69 + committer silverwind <me@silverwind.io> 1563741793 +0200 70 + 71 + empty commit`, tcommit.Payload()) 72 + assert.Equal(t, "silverwind <me@silverwind.io>", commitFromReader.Author.String()) 73 + }