mirror of
				https://github.com/go-gitea/gitea.git
				synced 2025-10-31 03:25:11 +01:00 
			
		
		
		
	* Dump: Use mholt/archive/v3 to support tar including many compressions Signed-off-by: Philipp Homann <homann.philipp@googlemail.com> * Dump: Allow dump output to stdout Signed-off-by: Philipp Homann <homann.philipp@googlemail.com> * Dump: Fixed bug present since #6677 where SessionConfig.Provider is never "file" Signed-off-by: Philipp Homann <homann.philipp@googlemail.com> * Dump: never pack RepoRootPath, LFS.ContentPath and LogRootPath when they are below AppDataPath Signed-off-by: Philipp Homann <homann.philipp@googlemail.com> * Dump: also dump LFS (fixes #10058) Signed-off-by: Philipp Homann <homann.philipp@googlemail.com> * Dump: never dump CustomPath if CustomPath is a subdir of or equal to AppDataPath (fixes #10365) Signed-off-by: Philipp Homann <homann.philipp@googlemail.com> * Use log.Info instead of fmt.Fprintf Signed-off-by: Philipp Homann <homann.philipp@googlemail.com> * import ordering * make fmt Co-authored-by: zeripath <art27@cantab.net> Co-authored-by: techknowlogick <techknowlogick@gitea.io> Co-authored-by: Matti R <matti@mdranta.net>
		
			
				
	
	
		
			160 lines
		
	
	
		
			3.8 KiB
		
	
	
	
		
			Go
		
	
	
	
		
			Vendored
		
	
	
	
			
		
		
	
	
			160 lines
		
	
	
		
			3.8 KiB
		
	
	
	
		
			Go
		
	
	
	
		
			Vendored
		
	
	
	
| // Copyright 2015, Joe Tsai. All rights reserved.
 | |
| // Use of this source code is governed by a BSD-style
 | |
| // license that can be found in the LICENSE.md file.
 | |
| 
 | |
| // +build debug
 | |
| 
 | |
| package prefix
 | |
| 
 | |
| import (
 | |
| 	"fmt"
 | |
| 	"math"
 | |
| 	"strings"
 | |
| )
 | |
| 
 | |
| func max(a, b int) int {
 | |
| 	if a > b {
 | |
| 		return a
 | |
| 	}
 | |
| 	return b
 | |
| }
 | |
| 
 | |
| func lenBase2(n uint) int {
 | |
| 	return int(math.Ceil(math.Log2(float64(n + 1))))
 | |
| }
 | |
| func padBase2(v, n uint, m int) string {
 | |
| 	s := fmt.Sprintf("%b", 1<<n|v)[1:]
 | |
| 	if pad := m - len(s); pad > 0 {
 | |
| 		return strings.Repeat(" ", pad) + s
 | |
| 	}
 | |
| 	return s
 | |
| }
 | |
| 
 | |
| func lenBase10(n int) int {
 | |
| 	return int(math.Ceil(math.Log10(float64(n + 1))))
 | |
| }
 | |
| func padBase10(n, m int) string {
 | |
| 	s := fmt.Sprintf("%d", n)
 | |
| 	if pad := m - len(s); pad > 0 {
 | |
| 		return strings.Repeat(" ", pad) + s
 | |
| 	}
 | |
| 	return s
 | |
| }
 | |
| 
 | |
| func (rc RangeCodes) String() string {
 | |
| 	var maxLen, maxBase int
 | |
| 	for _, c := range rc {
 | |
| 		maxLen = max(maxLen, int(c.Len))
 | |
| 		maxBase = max(maxBase, int(c.Base))
 | |
| 	}
 | |
| 
 | |
| 	var ss []string
 | |
| 	ss = append(ss, "{")
 | |
| 	for i, c := range rc {
 | |
| 		base := padBase10(int(c.Base), lenBase10(maxBase))
 | |
| 		if c.Len > 0 {
 | |
| 			base += fmt.Sprintf("-%d", c.End()-1)
 | |
| 		}
 | |
| 		ss = append(ss, fmt.Sprintf("\t%s:  {len: %s, range: %s},",
 | |
| 			padBase10(int(i), lenBase10(len(rc)-1)),
 | |
| 			padBase10(int(c.Len), lenBase10(maxLen)),
 | |
| 			base,
 | |
| 		))
 | |
| 	}
 | |
| 	ss = append(ss, "}")
 | |
| 	return strings.Join(ss, "\n")
 | |
| }
 | |
| 
 | |
| func (pc PrefixCodes) String() string {
 | |
| 	var maxSym, maxLen, maxCnt int
 | |
| 	for _, c := range pc {
 | |
| 		maxSym = max(maxSym, int(c.Sym))
 | |
| 		maxLen = max(maxLen, int(c.Len))
 | |
| 		maxCnt = max(maxCnt, int(c.Cnt))
 | |
| 	}
 | |
| 
 | |
| 	var ss []string
 | |
| 	ss = append(ss, "{")
 | |
| 	for _, c := range pc {
 | |
| 		var cntStr string
 | |
| 		if maxCnt > 0 {
 | |
| 			cnt := int(32*float32(c.Cnt)/float32(maxCnt) + 0.5)
 | |
| 			cntStr = fmt.Sprintf("%s |%s",
 | |
| 				padBase10(int(c.Cnt), lenBase10(maxCnt)),
 | |
| 				strings.Repeat("#", cnt),
 | |
| 			)
 | |
| 		}
 | |
| 		ss = append(ss, fmt.Sprintf("\t%s:  %s,  %s",
 | |
| 			padBase10(int(c.Sym), lenBase10(maxSym)),
 | |
| 			padBase2(uint(c.Val), uint(c.Len), maxLen),
 | |
| 			cntStr,
 | |
| 		))
 | |
| 	}
 | |
| 	ss = append(ss, "}")
 | |
| 	return strings.Join(ss, "\n")
 | |
| }
 | |
| 
 | |
| func (pd Decoder) String() string {
 | |
| 	var ss []string
 | |
| 	ss = append(ss, "{")
 | |
| 	if len(pd.chunks) > 0 {
 | |
| 		ss = append(ss, "\tchunks: {")
 | |
| 		for i, c := range pd.chunks {
 | |
| 			label := "sym"
 | |
| 			if uint(c&countMask) > uint(pd.chunkBits) {
 | |
| 				label = "idx"
 | |
| 			}
 | |
| 			ss = append(ss, fmt.Sprintf("\t\t%s:  {%s: %s, len: %s}",
 | |
| 				padBase2(uint(i), uint(pd.chunkBits), int(pd.chunkBits)),
 | |
| 				label, padBase10(int(c>>countBits), 3),
 | |
| 				padBase10(int(c&countMask), 2),
 | |
| 			))
 | |
| 		}
 | |
| 		ss = append(ss, "\t},")
 | |
| 
 | |
| 		for j, links := range pd.links {
 | |
| 			ss = append(ss, fmt.Sprintf("\tlinks[%d]: {", j))
 | |
| 			linkBits := lenBase2(uint(pd.linkMask))
 | |
| 			for i, c := range links {
 | |
| 				ss = append(ss, fmt.Sprintf("\t\t%s:  {sym: %s, len: %s},",
 | |
| 					padBase2(uint(i), uint(linkBits), int(linkBits)),
 | |
| 					padBase10(int(c>>countBits), 3),
 | |
| 					padBase10(int(c&countMask), 2),
 | |
| 				))
 | |
| 			}
 | |
| 			ss = append(ss, "\t},")
 | |
| 		}
 | |
| 	}
 | |
| 	ss = append(ss, fmt.Sprintf("\tchunkMask: %b,", pd.chunkMask))
 | |
| 	ss = append(ss, fmt.Sprintf("\tlinkMask:  %b,", pd.linkMask))
 | |
| 	ss = append(ss, fmt.Sprintf("\tchunkBits: %d,", pd.chunkBits))
 | |
| 	ss = append(ss, fmt.Sprintf("\tMinBits:   %d,", pd.MinBits))
 | |
| 	ss = append(ss, fmt.Sprintf("\tNumSyms:   %d,", pd.NumSyms))
 | |
| 	ss = append(ss, "}")
 | |
| 	return strings.Join(ss, "\n")
 | |
| }
 | |
| 
 | |
| func (pe Encoder) String() string {
 | |
| 	var maxLen int
 | |
| 	for _, c := range pe.chunks {
 | |
| 		maxLen = max(maxLen, int(c&countMask))
 | |
| 	}
 | |
| 
 | |
| 	var ss []string
 | |
| 	ss = append(ss, "{")
 | |
| 	if len(pe.chunks) > 0 {
 | |
| 		ss = append(ss, "\tchunks: {")
 | |
| 		for i, c := range pe.chunks {
 | |
| 			ss = append(ss, fmt.Sprintf("\t\t%s:  %s,",
 | |
| 				padBase10(i, 3),
 | |
| 				padBase2(uint(c>>countBits), uint(c&countMask), maxLen),
 | |
| 			))
 | |
| 		}
 | |
| 		ss = append(ss, "\t},")
 | |
| 	}
 | |
| 	ss = append(ss, fmt.Sprintf("\tchunkMask: %b,", pe.chunkMask))
 | |
| 	ss = append(ss, fmt.Sprintf("\tNumSyms:   %d,", pe.NumSyms))
 | |
| 	ss = append(ss, "}")
 | |
| 	return strings.Join(ss, "\n")
 | |
| }
 |