mirror of
				https://github.com/go-gitea/gitea.git
				synced 2025-11-03 08:02:36 +09:00 
			
		
		
		
	
		
			
				
	
	
		
			102 lines
		
	
	
		
			2.3 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			102 lines
		
	
	
		
			2.3 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
// Copyright 2023 The Gitea Authors. All rights reserved.
 | 
						|
// SPDX-License-Identifier: MIT
 | 
						|
 | 
						|
package git
 | 
						|
 | 
						|
import (
 | 
						|
	"crypto/sha1"
 | 
						|
	"fmt"
 | 
						|
	"regexp"
 | 
						|
	"strings"
 | 
						|
)
 | 
						|
 | 
						|
type ObjectFormatID int
 | 
						|
 | 
						|
const (
 | 
						|
	Sha1 ObjectFormatID = iota
 | 
						|
)
 | 
						|
 | 
						|
// sha1Pattern can be used to determine if a string is an valid sha
 | 
						|
var sha1Pattern = regexp.MustCompile(`^[0-9a-f]{4,40}$`)
 | 
						|
 | 
						|
type ObjectFormat interface {
 | 
						|
	ID() ObjectFormatID
 | 
						|
	String() string
 | 
						|
 | 
						|
	// Empty is the hash of empty git
 | 
						|
	Empty() ObjectID
 | 
						|
	// EmptyTree is the hash of an empty tree
 | 
						|
	EmptyTree() ObjectID
 | 
						|
	// FullLength is the length of the hash's hex string
 | 
						|
	FullLength() int
 | 
						|
 | 
						|
	IsValid(input string) bool
 | 
						|
	MustID(b []byte) ObjectID
 | 
						|
	MustIDFromString(s string) ObjectID
 | 
						|
	NewID(b []byte) (ObjectID, error)
 | 
						|
	NewIDFromString(s string) (ObjectID, error)
 | 
						|
	NewEmptyID() ObjectID
 | 
						|
 | 
						|
	NewHasher() HasherInterface
 | 
						|
}
 | 
						|
 | 
						|
type Sha1ObjectFormat struct{}
 | 
						|
 | 
						|
func (*Sha1ObjectFormat) ID() ObjectFormatID { return Sha1 }
 | 
						|
func (*Sha1ObjectFormat) String() string     { return "sha1" }
 | 
						|
func (*Sha1ObjectFormat) Empty() ObjectID    { return &Sha1Hash{} }
 | 
						|
func (*Sha1ObjectFormat) EmptyTree() ObjectID {
 | 
						|
	return &Sha1Hash{
 | 
						|
		0x4b, 0x82, 0x5d, 0xc6, 0x42, 0xcb, 0x6e, 0xb9, 0xa0, 0x60,
 | 
						|
		0xe5, 0x4b, 0xf8, 0xd6, 0x92, 0x88, 0xfb, 0xee, 0x49, 0x04,
 | 
						|
	}
 | 
						|
}
 | 
						|
func (*Sha1ObjectFormat) FullLength() int { return 40 }
 | 
						|
func (*Sha1ObjectFormat) IsValid(input string) bool {
 | 
						|
	return sha1Pattern.MatchString(input)
 | 
						|
}
 | 
						|
 | 
						|
func (*Sha1ObjectFormat) MustID(b []byte) ObjectID {
 | 
						|
	var id Sha1Hash
 | 
						|
	copy(id[0:20], b)
 | 
						|
	return &id
 | 
						|
}
 | 
						|
 | 
						|
func (h *Sha1ObjectFormat) MustIDFromString(s string) ObjectID {
 | 
						|
	return MustIDFromString(h, s)
 | 
						|
}
 | 
						|
 | 
						|
func (h *Sha1ObjectFormat) NewID(b []byte) (ObjectID, error) {
 | 
						|
	return IDFromRaw(h, b)
 | 
						|
}
 | 
						|
 | 
						|
func (h *Sha1ObjectFormat) NewIDFromString(s string) (ObjectID, error) {
 | 
						|
	return genericIDFromString(h, s)
 | 
						|
}
 | 
						|
 | 
						|
func (*Sha1ObjectFormat) NewEmptyID() ObjectID {
 | 
						|
	return NewSha1()
 | 
						|
}
 | 
						|
 | 
						|
func (h *Sha1ObjectFormat) NewHasher() HasherInterface {
 | 
						|
	return &Sha1Hasher{sha1.New()}
 | 
						|
}
 | 
						|
 | 
						|
func ObjectFormatFromID(id ObjectFormatID) ObjectFormat {
 | 
						|
	switch id {
 | 
						|
	case Sha1:
 | 
						|
		return &Sha1ObjectFormat{}
 | 
						|
	}
 | 
						|
 | 
						|
	return nil
 | 
						|
}
 | 
						|
 | 
						|
func ObjectFormatFromString(hash string) (ObjectFormat, error) {
 | 
						|
	switch strings.ToLower(hash) {
 | 
						|
	case "sha1":
 | 
						|
		return &Sha1ObjectFormat{}, nil
 | 
						|
	}
 | 
						|
 | 
						|
	return nil, fmt.Errorf("unknown hash type: %s", hash)
 | 
						|
}
 |