2016-11-04 01:16:01 +03:00
// Copyright 2015 The Gogs Authors. All rights reserved.
2019-04-19 15:17:27 +03:00
// Copyright 2019 The Gitea Authors. All rights reserved.
2016-11-04 01:16:01 +03:00
// Use of this source code is governed by a MIT-style
// license that can be found in the LICENSE file.
package git
import (
"encoding/hex"
"fmt"
2020-04-08 05:54:46 +03:00
"regexp"
2016-11-04 01:16:01 +03:00
"strings"
2019-04-19 15:17:27 +03:00
2020-03-17 19:19:58 +03:00
"github.com/go-git/go-git/v5/plumbing"
2016-11-04 01:16:01 +03:00
)
2016-12-22 12:30:52 +03:00
// EmptySHA defines empty git SHA
const EmptySHA = "0000000000000000000000000000000000000000"
2016-11-04 01:16:01 +03:00
2020-05-30 00:14:00 +03:00
// EmptyTreeSHA is the SHA of an empty tree
const EmptyTreeSHA = "4b825dc642cb6eb9a060e54bf8d69288fbee4904"
2020-04-08 05:54:46 +03:00
// SHAPattern can be used to determine if a string is an valid sha
var SHAPattern = regexp . MustCompile ( ` ^[0-9a-f] { 4,40}$ ` )
2016-12-22 12:30:52 +03:00
// SHA1 a git commit name
2019-04-19 15:17:27 +03:00
type SHA1 = plumbing . Hash
2016-11-04 01:16:01 +03:00
2016-12-22 12:30:52 +03:00
// MustID always creates a new SHA1 from a [20]byte array with no validation of input.
func MustID ( b [ ] byte ) SHA1 {
var id SHA1
2018-05-01 10:04:36 +03:00
copy ( id [ : ] , b )
2016-11-04 01:16:01 +03:00
return id
}
2016-12-22 12:30:52 +03:00
// NewID creates a new SHA1 from a [20]byte array.
func NewID ( b [ ] byte ) ( SHA1 , error ) {
2016-11-04 01:16:01 +03:00
if len ( b ) != 20 {
2016-12-22 12:30:52 +03:00
return SHA1 { } , fmt . Errorf ( "Length must be 20: %v" , b )
2016-11-04 01:16:01 +03:00
}
return MustID ( b ) , nil
}
// MustIDFromString always creates a new sha from a ID with no validation of input.
2016-12-22 12:30:52 +03:00
func MustIDFromString ( s string ) SHA1 {
2016-11-04 01:16:01 +03:00
b , _ := hex . DecodeString ( s )
return MustID ( b )
}
2016-12-22 12:30:52 +03:00
// NewIDFromString creates a new SHA1 from a ID string of length 40.
func NewIDFromString ( s string ) ( SHA1 , error ) {
var id SHA1
2016-11-04 01:16:01 +03:00
s = strings . TrimSpace ( s )
if len ( s ) != 40 {
return id , fmt . Errorf ( "Length must be 40: %s" , s )
}
b , err := hex . DecodeString ( s )
if err != nil {
return id , err
}
return NewID ( b )
}