diff options
author | Máximo Cuadros <mcuadros@gmail.com> | 2015-10-31 01:14:03 +0100 |
---|---|---|
committer | Máximo Cuadros <mcuadros@gmail.com> | 2015-10-31 01:14:03 +0100 |
commit | c6349552c1c54ea114b92ae23fc840f68f6551f4 (patch) | |
tree | 6fbaf514ae9caf8241a0b9dfc3709d60942876c5 /internal | |
parent | fe1fc1aa7dca3e0f6e54ab17f0acfa45f269e58c (diff) | |
download | go-git-c6349552c1c54ea114b92ae23fc840f68f6551f4.tar.gz |
internal -> core
Diffstat (limited to 'internal')
-rw-r--r-- | internal/hash.go | 40 | ||||
-rw-r--r-- | internal/hash_test.go | 35 | ||||
-rw-r--r-- | internal/object.go | 113 |
3 files changed, 0 insertions, 188 deletions
diff --git a/internal/hash.go b/internal/hash.go deleted file mode 100644 index 0540db1..0000000 --- a/internal/hash.go +++ /dev/null @@ -1,40 +0,0 @@ -package internal - -import ( - "crypto/sha1" - "encoding/hex" - "strconv" -) - -// Hash SHA1 hased content -type Hash [20]byte - -// ComputeHash compute the hash for a given ObjectType and content -func ComputeHash(t ObjectType, content []byte) Hash { - h := t.Bytes() - h = append(h, ' ') - h = strconv.AppendInt(h, int64(len(content)), 10) - h = append(h, 0) - h = append(h, content...) - - return Hash(sha1.Sum(h)) -} - -// NewHash return a new Hash from a hexadecimal hash representation -func NewHash(s string) Hash { - b, _ := hex.DecodeString(s) - - var h Hash - copy(h[:], b) - - return h -} - -func (h Hash) IsZero() bool { - var empty Hash - return h == empty -} - -func (h Hash) String() string { - return hex.EncodeToString(h[:]) -} diff --git a/internal/hash_test.go b/internal/hash_test.go deleted file mode 100644 index 063bd23..0000000 --- a/internal/hash_test.go +++ /dev/null @@ -1,35 +0,0 @@ -package internal - -import ( - "testing" - - . "gopkg.in/check.v1" -) - -func Test(t *testing.T) { TestingT(t) } - -type HashSuite struct{} - -var _ = Suite(&HashSuite{}) - -func (s *HashSuite) TestComputeHash(c *C) { - hash := ComputeHash(BlobObject, []byte("")) - c.Assert(hash.String(), Equals, "e69de29bb2d1d6434b8b29ae775ad8c2e48c5391") - - hash = ComputeHash(BlobObject, []byte("Hello, World!\n")) - c.Assert(hash.String(), Equals, "8ab686eafeb1f44702738c8b0f24f2567c36da6d") -} - -func (s *HashSuite) TestNewHash(c *C) { - hash := ComputeHash(BlobObject, []byte("Hello, World!\n")) - - c.Assert(hash, Equals, NewHash(hash.String())) -} - -func (s *HashSuite) TestIsZero(c *C) { - hash := NewHash("foo") - c.Assert(hash.IsZero(), Equals, true) - - hash = NewHash("8ab686eafeb1f44702738c8b0f24f2567c36da6d") - c.Assert(hash.IsZero(), Equals, false) -} diff --git a/internal/object.go b/internal/object.go deleted file mode 100644 index a30bc9d..0000000 --- a/internal/object.go +++ /dev/null @@ -1,113 +0,0 @@ -package internal - -import ( - "bytes" - "io" -) - -// Object is a generic representation of any git object -type Object interface { - Type() ObjectType - SetType(ObjectType) - Size() int64 - SetSize(int64) - Hash() Hash - Reader() io.Reader - Writer() io.Writer -} - -// ObjectStorage generic storage of objects -type ObjectStorage interface { - New() Object - Set(Object) Hash - Get(Hash) (Object, bool) -} - -// ObjectType internal object type's -type ObjectType int8 - -const ( - CommitObject ObjectType = 1 - TreeObject ObjectType = 2 - BlobObject ObjectType = 3 - TagObject ObjectType = 4 - OFSDeltaObject ObjectType = 6 - REFDeltaObject ObjectType = 7 -) - -func (t ObjectType) String() string { - switch t { - case CommitObject: - return "commit" - case TreeObject: - return "tree" - case BlobObject: - return "blob" - default: - return "-" - } -} - -func (t ObjectType) Bytes() []byte { - return []byte(t.String()) -} - -type RAWObject struct { - b []byte - t ObjectType - s int64 -} - -func (o *RAWObject) Type() ObjectType { return o.t } -func (o *RAWObject) SetType(t ObjectType) { o.t = t } -func (o *RAWObject) Size() int64 { return o.s } -func (o *RAWObject) SetSize(s int64) { o.s = s } -func (o *RAWObject) Reader() io.Reader { return bytes.NewBuffer(o.b) } -func (o *RAWObject) Hash() Hash { return ComputeHash(o.t, o.b) } -func (o *RAWObject) Writer() io.Writer { return o } -func (o *RAWObject) Write(p []byte) (n int, err error) { - o.b = append(o.b, p...) - return len(p), nil -} - -type RAWObjectStorage struct { - Objects map[Hash]Object - Commits map[Hash]Object - Trees map[Hash]Object - Blobs map[Hash]Object -} - -func NewRAWObjectStorage() *RAWObjectStorage { - return &RAWObjectStorage{ - Objects: make(map[Hash]Object, 0), - Commits: make(map[Hash]Object, 0), - Trees: make(map[Hash]Object, 0), - Blobs: make(map[Hash]Object, 0), - } -} - -func (o *RAWObjectStorage) New() Object { - return &RAWObject{} -} - -func (o *RAWObjectStorage) Set(obj Object) Hash { - h := obj.Hash() - o.Objects[h] = obj - - switch obj.Type() { - case CommitObject: - o.Commits[h] = o.Objects[h] - case TreeObject: - o.Trees[h] = o.Objects[h] - case BlobObject: - o.Blobs[h] = o.Objects[h] - } - - return h -} - -func (o *RAWObjectStorage) Get(h Hash) (Object, bool) { - obj, ok := o.Objects[h] - - return obj, ok -} |