Added Makefile -- gofmt

pull/1/head
KatolaZ 8 years ago
parent 726b399e47
commit 74f8a74ecf
  1. 18
      Makefile
  2. 17
      commits.go
  3. 5
      config.go
  4. 40
      scorsh.go
  5. 18
      spooler.go
  6. 8
      types.go
  7. 25
      workers.go

@ -0,0 +1,18 @@
BUILD=go build
SOURCES=scorsh.go \
types.go \
config.go \
spooler.go \
commits.go \
workers.go
all: scorsh
scorsh: $(SOURCES)
$(BUILD) scorsh.go types.go config.go spooler.go commits.go workers.go
clean:
rm scorsh

@ -6,7 +6,7 @@ import (
"golang.org/x/crypto/openpgp" "golang.org/x/crypto/openpgp"
"os" "os"
"strings" "strings"
// "log" // "log"
) )
func CommitToString(commit *git.Commit) string { func CommitToString(commit *git.Commit) string {
@ -24,16 +24,16 @@ func CommitToString(commit *git.Commit) string {
// FIXME: RETURN THE ENTITY PROVIDED BY THE CHECK, OR nil // FIXME: RETURN THE ENTITY PROVIDED BY THE CHECK, OR nil
func check_signature(commit *git.Commit, keys []*openpgp.KeyRing) (signature, signed string, err error) { func check_signature(commit *git.Commit, keys []*openpgp.KeyRing) (signature, signed string, err error) {
signature, signed, err = commit.ExtractSignature() signature, signed, err = commit.ExtractSignature()
if err == nil { if err == nil {
for _, keyring := range keys { for _, keyring := range keys {
_, err_sig := _, err_sig :=
openpgp.CheckArmoredDetachedSignature(*keyring, strings.NewReader(signed), openpgp.CheckArmoredDetachedSignature(*keyring, strings.NewReader(signed),
strings.NewReader(signature)) strings.NewReader(signature))
if err_sig == nil { if err_sig == nil {
fmt.Printf("Good signature \n") fmt.Printf("Good signature \n")
return signature, signed, nil return signature, signed, nil
@ -41,11 +41,10 @@ func check_signature(commit *git.Commit, keys []*openpgp.KeyRing) (signature, si
err = err_sig err = err_sig
} }
} }
return "", "", err return "", "", err
} }
// traverse all the commits between two references, looking for scorsh // traverse all the commits between two references, looking for scorsh
// commands // commands
// fixme: we don't have just one keyring here.... // fixme: we don't have just one keyring here....
@ -91,12 +90,12 @@ func walk_commits(msg SCORSHmsg, w *SCORSHworker) error {
// We should look for scorsh-tags, and if the commit has any, // We should look for scorsh-tags, and if the commit has any,
// check if it can be verified by any of the keyrings associated // check if it can be verified by any of the keyrings associated
// with the scorsh-tag // with the scorsh-tag
//signature, signed, err := check_signature(commit, &keyring) //signature, signed, err := check_signature(commit, &keyring)
//_, _, err := check_signature(commit, w.keys) //_, _, err := check_signature(commit, w.keys)
//if err != nil { //if err != nil {
// log.Printf("%s\n", SCORSHerr(SCORSH_ERR_SIGNATURE)) // log.Printf("%s\n", SCORSHerr(SCORSH_ERR_SIGNATURE))
// //
//} //}
cur_commit = commit.Parent(0) cur_commit = commit.Parent(0)
} else { } else {

@ -29,7 +29,7 @@ func ReadGlobalConfig(fname string) *SCORSHmaster {
} }
fmt.Printf("%s", cfg) fmt.Printf("%s", cfg)
if cfg.Logfile != "" { if cfg.Logfile != "" {
f, err := os.OpenFile(cfg.Logfile, os.O_APPEND|os.O_CREATE|os.O_RDWR, 0600) f, err := os.OpenFile(cfg.Logfile, os.O_APPEND|os.O_CREATE|os.O_RDWR, 0600)
if err != nil { if err != nil {
@ -40,7 +40,7 @@ func ReadGlobalConfig(fname string) *SCORSHmaster {
} }
if cfg.LogPrefix != "" { if cfg.LogPrefix != "" {
log.SetPrefix(cfg.LogPrefix+ " ") log.SetPrefix(cfg.LogPrefix + " ")
} }
// If the user has not set a spooldir, crash loudly // If the user has not set a spooldir, crash loudly
@ -59,4 +59,3 @@ func ReadGlobalConfig(fname string) *SCORSHmaster {
return cfg return cfg
} }

@ -6,14 +6,13 @@ import (
"log" "log"
) )
// manage debugging messages // manage debugging messages
const debug debugging = true const debug debugging = true
type debugging bool type debugging bool
func (d debugging) log(format string, args ...interface{}) {
func (d debugging) log(format string, args ...interface{}){
if d { if d {
log.Printf(format, args...) log.Printf(format, args...)
} }
@ -45,12 +44,11 @@ func SCORSHerr(err int) error {
} }
func FindMatchingWorkers(master *SCORSHmaster, msg *SCORSHmsg) []*SCORSHworker { func FindMatchingWorkers(master *SCORSHmaster, msg *SCORSHmsg) []*SCORSHworker {
var ret []*SCORSHworker var ret []*SCORSHworker
for idx,w := range master.Workers { for idx, w := range master.Workers {
if w.Matches(msg.Repo, msg.Branch) { if w.Matches(msg.Repo, msg.Branch) {
debug.log("--- Worker: %s matches %s:%s\n", w.Name, msg.Repo, msg.Branch) debug.log("--- Worker: %s matches %s:%s\n", w.Name, msg.Repo, msg.Branch)
ret = append(ret, &(master.Workers[idx])) ret = append(ret, &(master.Workers[idx]))
@ -59,34 +57,33 @@ func FindMatchingWorkers(master *SCORSHmaster, msg *SCORSHmsg) []*SCORSHworker {
return ret return ret
} }
func Master(master *SCORSHmaster) { func Master(master *SCORSHmaster) {
// master main loop: // master main loop:
var matching_workers []*SCORSHworker var matching_workers []*SCORSHworker
var push_msg SCORSHmsg var push_msg SCORSHmsg
matching_workers = make([]*SCORSHworker, len(master.Workers)) matching_workers = make([]*SCORSHworker, len(master.Workers))
log.Println("[master] Master started ") log.Println("[master] Master started ")
for { for {
select { select {
// - receive stuff from the spooler // - receive stuff from the spooler
case push_msg = <- master.Spooler: case push_msg = <-master.Spooler:
debug.log("[master] received message: %s\n", push_msg) debug.log("[master] received message: %s\n", push_msg)
// - lookup the repos map for matching workers // - lookup the repos map for matching workers
matching_workers = FindMatchingWorkers(master, &push_msg) matching_workers = FindMatchingWorkers(master, &push_msg)
debug.log("[master] matching workers: %s\n", matching_workers) debug.log("[master] matching workers: %s\n", matching_workers)
// add the message to PendingMsg // add the message to PendingMsg
//... //...
// - dispatch the message to all the matching workers // - dispatch the message to all the matching workers
for _, w := range matching_workers { for _, w := range matching_workers {
// increase the counter associated to the message // increase the counter associated to the message
w.MsgChan <- push_msg w.MsgChan <- push_msg
} }
} }
@ -97,14 +94,12 @@ func InitMaster() *SCORSHmaster {
master := ReadGlobalConfig(*conf_file) master := ReadGlobalConfig(*conf_file)
master.Repos = make(map[string][]*SCORSHworker) master.Repos = make(map[string][]*SCORSHworker)
master.WorkingMsg = make(map[string]int) master.WorkingMsg = make(map[string]int)
// This is the mutex-channel on which we receive acks from workers // This is the mutex-channel on which we receive acks from workers
master.StatusChan = make(chan SCORSHmsg, 1) master.StatusChan = make(chan SCORSHmsg, 1)
master.Spooler = make(chan SCORSHmsg, 1) master.Spooler = make(chan SCORSHmsg, 1)
err_workers := StartWorkers(master) err_workers := StartWorkers(master)
if err_workers != nil { if err_workers != nil {
log.Fatal("Error starting workers: ", err_workers) log.Fatal("Error starting workers: ", err_workers)
@ -114,20 +109,19 @@ func InitMaster() *SCORSHmaster {
err_spooler := StartSpooler(master) err_spooler := StartSpooler(master)
if err_spooler != nil { if err_spooler != nil {
log.Fatal("Error starting spooler: ", err_spooler) log.Fatal("Error starting spooler: ", err_spooler)
} }
return master return master
}
}
func main() { func main() {
flag.Parse() flag.Parse()
master := InitMaster() master := InitMaster()
go Master(master) go Master(master)
<- master.StatusChan <-master.StatusChan
} }

@ -6,15 +6,14 @@ import (
"github.com/go-yaml/yaml" "github.com/go-yaml/yaml"
"io/ioutil" "io/ioutil"
"log" "log"
// "time" // "time"
) )
// parse a request file and return a SCORSHmessage // parse a request file and return a SCORSHmessage
func parse_request(fname string, msg *SCORSHmsg) error { func parse_request(fname string, msg *SCORSHmsg) error {
debug.log("[parse_request] message at start: %s\n", msg) debug.log("[parse_request] message at start: %s\n", msg)
data, err := ioutil.ReadFile(fname) data, err := ioutil.ReadFile(fname)
if err != nil { if err != nil {
log.Printf("Unable to open file: %s\n", fname) log.Printf("Unable to open file: %s\n", fname)
@ -22,10 +21,9 @@ func parse_request(fname string, msg *SCORSHmsg) error {
} }
debug.log("[parse_request] file contains: \n%s\n", data) debug.log("[parse_request] file contains: \n%s\n", data)
debug.log("[parse_request] reading message from file: %s\n", fname) debug.log("[parse_request] reading message from file: %s\n", fname)
err = yaml.Unmarshal([]byte(data), msg) err = yaml.Unmarshal([]byte(data), msg)
if err != nil { if err != nil {
return fmt.Errorf("Error parsing message: %s", err) return fmt.Errorf("Error parsing message: %s", err)
@ -34,14 +32,13 @@ func parse_request(fname string, msg *SCORSHmsg) error {
return nil return nil
} }
func spooler(watcher *fsnotify.Watcher, worker chan SCORSHmsg) { func spooler(watcher *fsnotify.Watcher, worker chan SCORSHmsg) {
log.Println("Spooler started correctly") log.Println("Spooler started correctly")
var msg *SCORSHmsg var msg *SCORSHmsg
msg = new(SCORSHmsg) msg = new(SCORSHmsg)
for { for {
select { select {
case event := <-watcher.Events: case event := <-watcher.Events:
@ -61,7 +58,6 @@ func spooler(watcher *fsnotify.Watcher, worker chan SCORSHmsg) {
} }
} }
func StartSpooler(master *SCORSHmaster) error { func StartSpooler(master *SCORSHmaster) error {
watcher, err := fsnotify.NewWatcher() watcher, err := fsnotify.NewWatcher()
@ -74,8 +70,8 @@ func StartSpooler(master *SCORSHmaster) error {
if err != nil { if err != nil {
return fmt.Errorf("Error adding folder: %s\n", err) return fmt.Errorf("Error adding folder: %s\n", err)
} }
go spooler(watcher, master.Spooler) go spooler(watcher, master.Spooler)
return nil return nil
} }

@ -55,8 +55,8 @@ type SCORSHworker_state struct {
// The type SCORSHworker represents the configuration and state of a // The type SCORSHworker represents the configuration and state of a
// worker // worker
type SCORSHworker struct { type SCORSHworker struct {
SCORSHworker_cfg `yaml:",inline"` SCORSHworker_cfg `yaml:",inline"`
SCORSHworker_state SCORSHworker_state
} }
// Configuration of the master // Configuration of the master
@ -82,8 +82,6 @@ type SCORSHmaster struct {
SCORSHmaster_state SCORSHmaster_state
} }
func (cfg *SCORSHmaster) String() string { func (cfg *SCORSHmaster) String() string {
var buff bytes.Buffer var buff bytes.Buffer
@ -122,7 +120,6 @@ func (cfg *SCORSHmaster) String() string {
return buff.String() return buff.String()
} }
func (msg *SCORSHmsg) String() string { func (msg *SCORSHmsg) String() string {
var buff bytes.Buffer var buff bytes.Buffer
@ -139,4 +136,3 @@ func (msg *SCORSHmsg) String() string {
return buff.String() return buff.String()
} }

@ -12,7 +12,7 @@ import (
) )
func (worker *SCORSHworker) Matches(repo, branch string) bool { func (worker *SCORSHworker) Matches(repo, branch string) bool {
for _, r := range worker.Repos { for _, r := range worker.Repos {
parts := strings.SplitN(r, ":", 2) parts := strings.SplitN(r, ":", 2)
repo_pattern := parts[0] repo_pattern := parts[0]
@ -58,20 +58,19 @@ func (w *SCORSHworker) LoadKeyrings() error {
// Still to be implemented // Still to be implemented
func (w *SCORSHworker) LoadTags() error { func (w *SCORSHworker) LoadTags() error {
w_tags, err := ioutil.ReadFile(w.Tagfile) w_tags, err := ioutil.ReadFile(w.Tagfile)
if err != nil{ if err != nil {
return fmt.Errorf("Cannot read worker config: %s", err) return fmt.Errorf("Cannot read worker config: %s", err)
} }
err = yaml.Unmarshal(w_tags, w) err = yaml.Unmarshal(w_tags, w)
//err = yaml.Unmarshal(w_tags, tags) //err = yaml.Unmarshal(w_tags, tags)
if err != nil { if err != nil {
return fmt.Errorf("Error while reading tags: %s", err) return fmt.Errorf("Error while reading tags: %s", err)
} }
return nil return nil
} }
@ -79,11 +78,11 @@ func (w *SCORSHworker) LoadTags() error {
func Worker(w *SCORSHworker) { func Worker(w *SCORSHworker) {
var msg SCORSHmsg var msg SCORSHmsg
log.Printf("[worker: %s] Started\n", w.Name) log.Printf("[worker: %s] Started\n", w.Name)
w.StatusChan <- msg w.StatusChan <- msg
// This is the main worker loop // This is the main worker loop
for { for {
select { select {
@ -104,14 +103,14 @@ func Worker(w *SCORSHworker) {
func StartWorkers(master *SCORSHmaster) error { func StartWorkers(master *SCORSHmaster) error {
num_workers := len(master.Workers) num_workers := len(master.Workers)
// We should now start each worker // We should now start each worker
log.Printf("num_workers: %d\n", num_workers) log.Printf("num_workers: %d\n", num_workers)
for w:=0; w<num_workers; w++ { for w := 0; w < num_workers; w++ {
worker := & (master.Workers[w]) worker := &(master.Workers[w])
// Set the Status and Msg channels // Set the Status and Msg channels
worker.StatusChan = master.StatusChan worker.StatusChan = master.StatusChan
worker.MsgChan = make(chan SCORSHmsg) worker.MsgChan = make(chan SCORSHmsg)
@ -132,7 +131,7 @@ func StartWorkers(master *SCORSHmaster) error {
master.Repos[repo_name] = append(master.Repos[repo_name], worker) master.Repos[repo_name] = append(master.Repos[repo_name], worker)
} }
go Worker(worker) go Worker(worker)
<- master.StatusChan <-master.StatusChan
} }
return nil return nil
} }

Loading…
Cancel
Save