aboutsummaryrefslogtreecommitdiffstats
path: root/packfile/objects.go
diff options
context:
space:
mode:
Diffstat (limited to 'packfile/objects.go')
-rw-r--r--packfile/objects.go200
1 files changed, 0 insertions, 200 deletions
diff --git a/packfile/objects.go b/packfile/objects.go
deleted file mode 100644
index 6449808..0000000
--- a/packfile/objects.go
+++ /dev/null
@@ -1,200 +0,0 @@
-package packfile
-
-import (
- "bytes"
- "encoding/hex"
- "fmt"
- "strconv"
- "time"
-
- "gopkg.in/src-d/go-git.v2/commons"
-)
-
-type Object interface {
- Type() string
- Hash() string
-}
-
-type Hash []byte
-
-func (h Hash) String() string {
- return hex.EncodeToString(h)
-}
-
-type Commit struct {
- Tree Hash
- Parents []Hash
- Author Signature
- Committer Signature
- Message string
- hash string
-}
-
-func NewCommit(b []byte) (*Commit, error) {
- o := &Commit{hash: commons.GitHash("commit", b)}
-
- lines := bytes.Split(b, []byte{'\n'})
- for i := range lines {
- if len(lines[i]) > 0 {
- var err error
-
- split := bytes.SplitN(lines[i], []byte{' '}, 2)
- switch string(split[0]) {
- case "tree":
- o.Tree = make([]byte, 20)
- _, err = hex.Decode(o.Tree, split[1])
- case "parent":
- h := make([]byte, 20)
- _, err = hex.Decode(h, split[1])
- if err == nil {
- o.Parents = append(o.Parents, h)
- }
- case "author":
- o.Author = NewSignature(split[1])
- case "committer":
- o.Committer = NewSignature(split[1])
- }
-
- if err != nil {
- return nil, err
- }
- } else {
- o.Message = string(bytes.Join(append(lines[i+1:]), []byte{'\n'}))
- break
- }
- }
-
- return o, nil
-}
-
-func (o *Commit) Type() string {
- return "commit"
-}
-
-func (o *Commit) Hash() string {
- return o.hash
-}
-
-type Signature struct {
- Name string
- Email string
- When time.Time
-}
-
-func NewSignature(signature []byte) Signature {
- ret := Signature{}
- if len(signature) == 0 {
- return ret
- }
-
- from := 0
- state := 'n' // n: name, e: email, t: timestamp, z: timezone
- for i := 0; ; i++ {
- var c byte
- var end bool
- if i < len(signature) {
- c = signature[i]
- } else {
- end = true
- }
-
- switch state {
- case 'n':
- if c == '<' || end {
- if i == 0 {
- break
- }
- ret.Name = string(signature[from : i-1])
- state = 'e'
- from = i + 1
- }
- case 'e':
- if c == '>' || end {
- ret.Email = string(signature[from:i])
- i++
- state = 't'
- from = i + 1
- }
- case 't':
- if c == ' ' || end {
- t, err := strconv.ParseInt(string(signature[from:i]), 10, 64)
- if err == nil {
- ret.When = time.Unix(t, 0)
- }
- end = true
- }
- }
-
- if end {
- break
- }
- }
-
- return ret
-}
-
-func (s *Signature) String() string {
- return fmt.Sprintf("%q <%s> @ %s", s.Name, s.Email, s.When)
-}
-
-type Tree struct {
- Entries []TreeEntry
- hash string
-}
-
-type TreeEntry struct {
- Name string
- Hash string
-}
-
-func NewTree(body []byte) (*Tree, error) {
- o := &Tree{hash: commons.GitHash("tree", body)}
-
- if len(body) == 0 {
- return o, nil
- }
-
- for {
- split := bytes.SplitN(body, []byte{0}, 2)
- split1 := bytes.SplitN(split[0], []byte{' '}, 2)
-
- o.Entries = append(o.Entries, TreeEntry{
- Name: string(split1[1]),
- Hash: fmt.Sprintf("%x", split[1][0:20]),
- })
-
- body = split[1][20:]
- if len(split[1]) == 20 {
- break
- }
- }
-
- return o, nil
-}
-
-func (o *Tree) Type() string {
- return "tree"
-}
-
-func (o *Tree) Hash() string {
- return o.hash
-}
-
-type Blob struct {
- Len int
- hash string
-}
-
-func NewBlob(b []byte) (*Blob, error) {
- return &Blob{Len: len(b), hash: commons.GitHash("blob", b)}, nil
-}
-
-func (o *Blob) Type() string {
- return "blob"
-}
-
-func (o *Blob) Hash() string {
- return o.hash
-}
-
-type ContentCallback func(hash string, content []byte)