loading up the forgejo repo on tangled to test page performance
fork

Configure Feed

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

at forgejo 83 lines 2.6 kB view raw
1// Copyright 2022 The Gitea Authors. All rights reserved. 2// SPDX-License-Identifier: MIT 3 4package foreachref 5 6import ( 7 "encoding/hex" 8 "fmt" 9 "io" 10 "strings" 11) 12 13var ( 14 nullChar = []byte("\x00") 15 dualNullChar = []byte("\x00\x00") 16) 17 18// Format supports specifying and parsing an output format for 'git 19// for-each-ref'. See See git-for-each-ref(1) for available fields. 20type Format struct { 21 // fieldNames hold %(fieldname)s to be passed to the '--format' flag of 22 // for-each-ref. See git-for-each-ref(1) for available fields. 23 fieldNames []string 24 25 // fieldDelim is the character sequence that is used to separate fields 26 // for each reference. fieldDelim and refDelim should be selected to not 27 // interfere with each other and to not be present in field values. 28 fieldDelim []byte 29 // fieldDelimStr is a string representation of fieldDelim. Used to save 30 // us from repetitive reallocation whenever we need the delimiter as a 31 // string. 32 fieldDelimStr string 33 // refDelim is the character sequence used to separate reference from 34 // each other in the output. fieldDelim and refDelim should be selected 35 // to not interfere with each other and to not be present in field 36 // values. 37 refDelim []byte 38} 39 40// NewFormat creates a forEachRefFormat using the specified fieldNames. See 41// git-for-each-ref(1) for available fields. 42func NewFormat(fieldNames ...string) Format { 43 return Format{ 44 fieldNames: fieldNames, 45 fieldDelim: nullChar, 46 fieldDelimStr: string(nullChar), 47 refDelim: dualNullChar, 48 } 49} 50 51// Flag returns a for-each-ref --format flag value that captures the fieldNames. 52func (f Format) Flag() string { 53 var formatFlag strings.Builder 54 for i, field := range f.fieldNames { 55 // field key and field value 56 formatFlag.WriteString(fmt.Sprintf("%s %%(%s)", field, field)) 57 58 if i < len(f.fieldNames)-1 { 59 // note: escape delimiters to allow control characters as 60 // delimiters. For example, '%00' for null character or '%0a' 61 // for newline. 62 formatFlag.WriteString(f.hexEscaped(f.fieldDelim)) 63 } 64 } 65 formatFlag.WriteString(f.hexEscaped(f.refDelim)) 66 return formatFlag.String() 67} 68 69// Parser returns a Parser capable of parsing 'git for-each-ref' output produced 70// with this Format. 71func (f Format) Parser(r io.Reader) *Parser { 72 return NewParser(r, f) 73} 74 75// hexEscaped produces hex-escpaed characters from a string. For example, "\n\0" 76// would turn into "%0a%00". 77func (f Format) hexEscaped(delim []byte) string { 78 escaped := "" 79 for i := 0; i < len(delim); i++ { 80 escaped += "%" + hex.EncodeToString([]byte{delim[i]}) 81 } 82 return escaped 83}