package git import ( "compress/zlib" "fmt" "io" "math" "gitlab.dms3.io/dms3/go-dms3/core/coredag" "gitlab.dms3.io/dms3/go-dms3/plugin" mh "github.com/multiformats/go-multihash" "gitlab.dms3.io/dms3/go-cid" format "gitlab.dms3.io/dms3/go-ld-format" git "gitlab.dms3.io/dms3/go-ld-git" ) // Plugins is exported list of plugins that will be loaded var Plugins = []plugin.Plugin{ &gitPlugin{}, } type gitPlugin struct{} var _ plugin.PluginLD = (*gitPlugin)(nil) func (*gitPlugin) Name() string { return "ld-git" } func (*gitPlugin) Version() string { return "0.0.1" } func (*gitPlugin) Init(_ *plugin.Environment) error { return nil } func (*gitPlugin) RegisterBlockDecoders(dec format.BlockDecoder) error { dec.Register(cid.GitRaw, git.DecodeBlock) return nil } func (*gitPlugin) RegisterInputEncParsers(iec coredag.InputEncParsers) error { iec.AddParser("raw", "git", parseRawGit) iec.AddParser("zlib", "git", parseZlibGit) return nil } func parseRawGit(r io.Reader, mhType uint64, mhLen int) ([]format.Node, error) { if mhType != math.MaxUint64 && mhType != mh.SHA1 { return nil, fmt.Errorf("unsupported mhType %d", mhType) } if mhLen != -1 && mhLen != mh.DefaultLengths[mh.SHA1] { return nil, fmt.Errorf("invalid mhLen %d", mhLen) } nd, err := git.ParseObject(r) if err != nil { return nil, err } return []format.Node{nd}, nil } func parseZlibGit(r io.Reader, mhType uint64, mhLen int) ([]format.Node, error) { rc, err := zlib.NewReader(r) if err != nil { return nil, err } defer rc.Close() return parseRawGit(rc, mhType, mhLen) }