git

package
v0.0.0-...-fcb5cfa Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Sep 22, 2015 License: MIT Imports: 17 Imported by: 0

Documentation

Index

Constants

View Source
const (
	FLUSH_PKT      = "0000"
	PKT_SP         = " "
	PKT_LR         = "\n"
	PROGRESS_FRAME = '\x02'
	DATA_FRAME     = '\x01'
	ERROR_FRAME    = '\x03'
)

Variables

This section is empty.

Functions

func InflateZlib

func InflateZlib(r *io.SectionReader, len int) (bs []byte, err error)

InflateZlib unbuffered io

func IsMsbSet

func IsMsbSet(b byte) bool

IsMsbSet check whether the most significant bit is set

func ParseCopyOrInsert

func ParseCopyOrInsert(r io.Reader) (stype int, offset, length int64, err error)

ParseCopyOrInsert parse copy or insert section info from delta reader

func ParsePackHeader

func ParsePackHeader(pack *io.SectionReader) (version, objectCount uint32, err error)

ParsePackHeader A header appears at the beginning and consists of the following:

     4-byte signature:
         The signature is: {'P', 'A', 'C', 'K'}

     4-byte version number (network byte order):
	 Git currently accepts version number 2 or 3 but
         generates version 2 only.

     4-byte number of objects contained in the pack (network byte order)

     Observation: we cannot have more than 4G versions ;-) and
     more than 4G objects in a pack.

func ParseVarLen

func ParseVarLen(r io.Reader) (len int64, err error)

ParseVarLen parse variable-length integers

func PatchDelta

func PatchDelta(base io.ReaderAt, delta io.Reader, target io.ReadWriter) (err error)

PatchDelta recover real object data

func ReadOneByte

func ReadOneByte(r io.Reader) (b byte, err error)

ReadOneByte read only one byte from the Reader

Types

type Conn

type Conn struct {
	net.Conn
}

Conn handle git connection(ssh or git or http)

func NewConn

func NewConn(host, port string) (*Conn, error)

NewConn create git conn

func (*Conn) ReadPktLine

func (gconn *Conn) ReadPktLine() ([]string, error)

ReadPktLine read pktline from conn

func (*Conn) WriteEndPktLine

func (gconn *Conn) WriteEndPktLine() (int, error)

WriteEndPktLine write end pkt line

func (*Conn) WriteMultiPktLine

func (gconn *Conn) WriteMultiPktLine(lines [][]byte) error

WriteMultiPktLine write multi pktline co conn

func (*Conn) WritePktLine

func (gconn *Conn) WritePktLine(line []byte) (int, error)

WritePktLine wite pktline to conn

type Delta

type Delta struct {
	Type    ObjType     //commit, blob, tree, tag
	Content []byte      //content
	Base    interface{} //hashid or offset(string or int)
}

type ObjType

type ObjType int8

ObjType represent a git object type

const (
	OBJ_COMMIT ObjType = 1 + iota //start 1.
	OBJ_TREE
	OBJ_BLOB
	OBJ_TAG

	OBJ_OFS_DELTA
	OBJ_REF_DELTA
)

OBJ_COMMIT = 1 OBJ_TREE = 2 OBJ_BLOB = 3 OBJ_TAG = 4 OBJ_OFS_DELTA = 6 OBJ_REF_DELTA = 7

func (ObjType) IsDelta

func (ot ObjType) IsDelta() bool

IsDelta check if it it delta object

func (ObjType) String

func (ot ObjType) String() (ts string)

String make it a stringer

type Object

type Object struct {
	ID      string      //SHA-1 40 char
	Type    ObjType     //commit, blob, tree, tag
	Content []byte      //content
	Base    interface{} //hashid or offset(string or int)
}

Object git internal man

func NewObject

func NewObject(objType ObjType, content []byte, base interface{}) (obj *Object, err error)

NewObject create object if it is a delta object, we will delating it to real content

func (*Object) DeflateZlib

func (obj *Object) DeflateZlib() (bs []byte, err error)

DeflateZlib deflat the object to bytes

func (*Object) FlushID

func (obj *Object) FlushID() (ids string)

FlushID flush object id please call it when change object content or object type

func (*Object) GetID

func (obj *Object) GetID() (ids string)

GetID generate the object id by content

func (*Object) GetStoreHeader

func (obj *Object) GetStoreHeader() []byte

GetStoreHeader create a object store header

func (*Object) Len

func (obj *Object) Len() int

Len get object content len

func (*Object) Patch

func (obj *Object) Patch(base *Object) (err error)

Patch delta obj

func (*Object) String

func (obj *Object) String() string

String make object to be a stringer

type ObjectStore

type ObjectStore struct {
	List []*Object
	// contains filtered or unexported fields
}

func NewObjectStore

func NewObjectStore(count uint32) *ObjectStore

NewObjectStore create it

func (*ObjectStore) AddObject

func (objStore *ObjectStore) AddObject(obj *Object, offset int64) (err error)

AddObject add object to pack object list

func (*ObjectStore) FindByHash

func (objStore *ObjectStore) FindByHash(hash string) (obj *Object)

FindByHash find object by hash id

func (*ObjectStore) FindByOffset

func (objStore *ObjectStore) FindByOffset(offset int64) (obj *Object)

FindByOffset find object by offset

type PackReader

type PackReader struct {
	*io.SectionReader

	Version, ObjCount uint32
	ObjStore          *ObjectStore
	// contains filtered or unexported fields
}

PackReader a struct

func NewPackReader

func NewPackReader(r io.ReaderAt, size int64) (*PackReader, error)

NewPackReader create a pack reader

func (*PackReader) ParseObjectEntry

func (pack *PackReader) ParseObjectEntry() (obj *Object, offset int64, err error)

ParseObjectEntry parse object from pack reader

	(undeltified representation)
     n-byte type and length (3-bit type, (n-1)*7+4-bit length)
     compressed data

     (deltified representation)
     n-byte type and length (3-bit type, (n-1)*7+4-bit length)
     20-byte base object name if OBJ_REF_DELTA or a negative relative
	 offset from the delta object's position in the pack if this
	 is an OBJ_OFS_DELTA object
     compressed delta data

func (*PackReader) ParseObjects

func (pack *PackReader) ParseObjects(f func(object *Object) error) (err error)

ParseObjects translate all object in pack reader

func (*PackReader) Tell

func (pack *PackReader) Tell() int64

Tell tell current cursor on reader

type Ref

type Ref struct {
	Name   string
	Object        //i think it is a commit object
	Child  Object //contain some info for this ref
}

Ref is a human name for a commit

func (*Ref) IsPeeled

func (ref *Ref) IsPeeled() bool

IsPeeled check if it is peeled

type Refs

type Refs map[string]Ref

Refs list

func NewRefs

func NewRefs() Refs

NewRefs create ref list

func (Refs) AddRef

func (ref Refs) AddRef(name, oid string)

AddRef add ref to the list

type Repo

type Repo struct {
	ClonePath string
	Name      string
	// contains filtered or unexported fields
}

Repo git repo instance

func NewRepo

func NewRepo(addr, dir string) (repo *Repo, err error)

NewRepo create new Repo struct

func (*Repo) CreateLocalRefs

func (repo *Repo) CreateLocalRefs(name string, ref Ref) (err error)

CreateLocalRefs save ref to local disk

func (*Repo) Distruct

func (repo *Repo) Distruct()

Distruct distruct repo

func (*Repo) FetchPack

func (repo *Repo) FetchPack(
	sideBandHandle func(dataType byte, data []byte),
	refHandle func(name string, ref Ref) (err error),
) (err error)

FetchPack negotionate with remote server send want list and parse pack file to objects sideBandHandle func(dataType byte, data []byte)

func (*Repo) GetRepoFilePath

func (repo *Repo) GetRepoFilePath(dir, fname string) string

GetRepoFilePath get repo file path with current repo path

func (*Repo) GetTmpPackFile

func (repo *Repo) GetTmpPackFile() (*os.File, error)

GetTmpPackFile return clone temp pack file E.g. in native git this is something like .git/objects/pack/tmp_pack_6bo2La

func (*Repo) RefDiscover

func (repo *Repo) RefDiscover() (refs Refs, capabilities []string, err error)

RefDiscover just get refs from server

func (*Repo) SaveLooseObjects

func (repo *Repo) SaveLooseObjects(f *os.File) (err error)

SaveLooseObjects directly use pack file to recover objects

func (*Repo) SaveObject

func (repo *Repo) SaveObject(obj *Object) (err error)

SaveObject save object on disk

func (*Repo) SendCmd

func (repo *Repo) SendCmd(cmds ...string) (err error)

SendCmd send cmd to server

func (*Repo) SendWantList

func (repo *Repo) SendWantList(ids ...string) (err error)

SendWantList telling the server what objects it wants and what objects it has, so the server can make a packfile that only contains the objects that the client needs. The client will also send a list of the capabilities it wants to be in effect, out of what the server said it could do with the first 'want' line. ----

  upload-request    =  want-list
		       have-list
		       compute-end

  want-list         =  first-want
		       *additional-want
		       flush-pkt

  first-want        =  PKT-LINE("want" SP obj-id SP capability-list LF)
  additional-want   =  PKT-LINE("want" SP obj-id LF)

  have-list         =  *have-line
  have-line         =  PKT-LINE("have" SP obj-id LF)
  compute-end       =  flush-pkt / PKT-LINE("done")

----

type URL

type URL struct {
	Host     string
	Port     string
	RepoPath string
}

URL wrap url.URL

func NewURL

func NewURL(addr string) *URL

NewURL covert git url string to a gitURL Stuct

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL