| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122 | 
							- // Hercules plugin "{{.name}}"
 
- //
 
- // How to build: execute "make" *OR*
 
- //
 
- // 1. Update the Protocol Buffers definition as needed, regenerate {{.protogo}}
 
- //
 
- //     PATH=$PATH:$GOPATH/bin protoc --gogo_out={{.outdir}} --proto_path={{.outdir}} {{.proto}}
 
- //
 
- // 2. Build {{.shlib}}
 
- //
 
- //     go build -buildmode=plugin {{.output}} {{.protogo}}
 
- //
 
- // Step (1) requires GoGo Protobuf https://github.com/gogo/protobuf
 
- //
 
- // Usage:
 
- //
 
- //    hercules -plugin {{.shlib}} -{{.flag}}
 
- //    hercules -plugin {{.shlib}} -help
 
- package {{.package}}
 
- import (
 
-   "io"
 
-   "github.com/gogo/protobuf/proto"
 
-   "gopkg.in/src-d/go-git.v4"
 
-   "gopkg.in/src-d/hercules.v3"
 
- )
 
- // {{.name}} contains the intermediate state which is mutated by Consume(). It should implement
 
- // hercules.LeafPipelineItem.
 
- type {{.name}} struct {
 
- }
 
- // {{.name}}Result is returned by Finalize() and represents the analysis result.
 
- type {{.name}}Result struct {
 
- }
 
- // Analysis' name in the graph is usually the same as the type's name, however, does not have to.
 
- func ({{.varname}} *{{.name}}) Name() string {
 
-   return "{{.name}}"
 
- }
 
- // LeafPipelineItem-s normally do not act as intermediate nodes and thus we return an empty slice.
 
- func ({{.varname}} *{{.name}}) Provides() []string {
 
-   return []string{}
 
- }
 
- // Requires returns the list of dependencies which must be supplied in Consume().
 
- func ({{.varname}} *{{.name}}) Requires() []string {
 
-   arr := [...]string{/* insert dependencies here */}
 
-   return arr[:]
 
- }
 
- // ListConfigurationOptions tells the engine which parameters can be changed through the command
 
- // line.
 
- func ({{.varname}} *{{.name}}) ListConfigurationOptions() []hercules.ConfigurationOption {
 
-   opts := [...]hercules.ConfigurationOption{ /* {
 
-     Name:        "ParameterName",
 
-     Description: "Parameter's description.",
 
-     Flag:        "my-cmdline-flag",
 
-     Type:        hercules.BoolConfigurationOption,
 
-     Default:     false}, */
 
-   }
 
-   return opts[:]
 
- }
 
- // Flag returns the command line switch which activates the analysis.
 
- func ({{.varname}} *{{.name}}) Flag() string {
 
-   return "{{.flag}}"
 
- }
 
- // Configure applies the parameters specified in the command line. Map keys correspond to "Name".
 
- func ({{.varname}} *{{.name}}) Configure(facts map[string]interface{}) {
 
- }
 
- // Initialize resets the internal temporary data structures and prepares the object for Consume().
 
- func ({{.varname}} *{{.name}}) Initialize(repository *git.Repository) {
 
- }
 
- // Consume is called for every commit in the sequence.
 
- func ({{.varname}} *{{.name}}) Consume(deps map[string]interface{}) (map[string]interface{}, error) {
 
-   return nil, nil
 
- }
 
- // Finalize produces the result of the analysis. No more Consume() calls are expected afterwards.
 
- func ({{.varname}} *{{.name}}) Finalize() interface{} {
 
-   result := {{.name}}Result{}
 
-   // insert code here
 
-   return result
 
- }
 
- // Serialize converts the result from Finalize() to either Protocol Buffers or YAML.
 
- func ({{.varname}} *{{.name}}) Serialize(result interface{}, binary bool, writer io.Writer) error {
 
-   {{.varname}}Result := result.({{.name}}Result)
 
-   if binary {
 
-     return {{.varname}}.serializeBinary(&{{.varname}}Result, writer)
 
-   }
 
-   {{.varname}}.serializeText(&{{.varname}}Result, writer)
 
-   return nil
 
- }
 
- func ({{.varname}} *{{.name}}) serializeText(result *{{.name}}Result, writer io.Writer) {
 
-   // write YAML to writer
 
- }
 
- func ({{.varname}} *{{.name}}) serializeBinary(result *{{.name}}Result, writer io.Writer) error {
 
-   message := {{.name}}ResultMessage{
 
-     // fill me
 
-   }
 
-   serialized, err := proto.Marshal(&message)
 
-   if err != nil {
 
-     return err
 
-   }
 
-   writer.Write(serialized)
 
-   return nil
 
- }
 
- func init() {
 
-   hercules.Registry.Register(&{{.name}}{})
 
- }
 
 
  |