diff options
author | Lunny Xiao <xiaolunwen@gmail.com> | 2019-03-27 17:33:00 +0800 |
---|---|---|
committer | GitHub <noreply@github.com> | 2019-03-27 17:33:00 +0800 |
commit | d578b71d61ee8131e8abf7f538b93d8c6cc6fe6d (patch) | |
tree | f0bc12702264f2400f1b4308e06f9aa631fe3cca /modules/git/sha1.go | |
parent | d056bf300ff5ebd89d8b0035722c94a3b08ac745 (diff) | |
download | gitea-d578b71d61ee8131e8abf7f538b93d8c6cc6fe6d.tar.gz gitea-d578b71d61ee8131e8abf7f538b93d8c6cc6fe6d.zip |
move code.gitea.io/git to code.gitea.io/gitea/modules/git (#6364)
* move code.gitea.io/git to code.gitea.io/gitea/modules/git
* fix imports
* fix fmt
* fix misspell
* remove wrong tests data
* fix unit tests
* fix tests
* fix tests
* fix tests
* fix tests
* fix tests
* enable Debug to trace the failure tests
* fix tests
* fix tests
* fix tests
* fix tests
* fix tests
* comment commit count tests since git clone depth is 50
* fix tests
* update from code.gitea.io/git
* revert change to makefile
Diffstat (limited to 'modules/git/sha1.go')
-rw-r--r-- | modules/git/sha1.go | 76 |
1 files changed, 76 insertions, 0 deletions
diff --git a/modules/git/sha1.go b/modules/git/sha1.go new file mode 100644 index 0000000000..6c9d53949d --- /dev/null +++ b/modules/git/sha1.go @@ -0,0 +1,76 @@ +// Copyright 2015 The Gogs Authors. All rights reserved. +// Use of this source code is governed by a MIT-style +// license that can be found in the LICENSE file. + +package git + +import ( + "bytes" + "encoding/hex" + "fmt" + "strings" +) + +// EmptySHA defines empty git SHA +const EmptySHA = "0000000000000000000000000000000000000000" + +// SHA1 a git commit name +type SHA1 [20]byte + +// Equal returns true if s has the same SHA1 as caller. +// Support 40-length-string, []byte, SHA1. +func (id SHA1) Equal(s2 interface{}) bool { + switch v := s2.(type) { + case string: + if len(v) != 40 { + return false + } + return v == id.String() + case []byte: + return bytes.Equal(v, id[:]) + case SHA1: + return v == id + default: + return false + } +} + +// String returns string (hex) representation of the Oid. +func (id SHA1) String() string { + return hex.EncodeToString(id[:]) +} + +// MustID always creates a new SHA1 from a [20]byte array with no validation of input. +func MustID(b []byte) SHA1 { + var id SHA1 + copy(id[:], b) + return id +} + +// NewID creates a new SHA1 from a [20]byte array. +func NewID(b []byte) (SHA1, error) { + if len(b) != 20 { + return SHA1{}, fmt.Errorf("Length must be 20: %v", b) + } + return MustID(b), nil +} + +// MustIDFromString always creates a new sha from a ID with no validation of input. +func MustIDFromString(s string) SHA1 { + b, _ := hex.DecodeString(s) + return MustID(b) +} + +// NewIDFromString creates a new SHA1 from a ID string of length 40. +func NewIDFromString(s string) (SHA1, error) { + var id SHA1 + 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) +} |