summaryrefslogtreecommitdiff
path: root/main.go
blob: cb42b9807565399b02a3e18a657649c4d4e5b32c (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
package main

import (
	"os"

	git "go.wit.com/lib/libgit2"
	"go.wit.com/log"
)

// are sent via -ldflags at buildtime
var VERSION string
var BUILDTIME string

func main() {
	var repo *git.Repository
	if argv.Refs {
		repo, _ = showRefs()
	} else {
		testMessage()
	}
	if repo == nil {
		os.Exit(-1)
	}
	b := walkBranches(repo)

	// o, err := b.Reference.Peel(b.Reference.Type())
	o, err := b.Reference.Peel(git.ObjectTree)
	if err != nil {
		log.Info("ref peel() failed", err)
		return
	}
	t, errt := o.AsTree()
	if errt != nil {
		log.Info("object AsTree() failed", errt)
		return
	}
	walkTree(t)
}

// lists the files in the git repo
// Makefile, .gitignore, README.md, etc
func walkTree(tree *git.Tree) {
	var callCount int
	err := tree.Walk(func(name string, entry *git.TreeEntry) error {
		callCount++
		log.Info("walkTree()", callCount, entry.Name, entry.Id, entry.Type)

		return nil
	})
	log.Info("walkTree() count", callCount, err)
}

// lists the branches
// "master", "devel", "jcarr"
func walkBranches(repo *git.Repository) *git.Branch {
	i, err := repo.NewBranchIterator(git.BranchLocal)
	if err != nil {
		log.Info("walkBranches() error", err)
		return nil
	}

	for {
		b, bt, err := i.Next()
		if git.IsErrorCode(err, git.ErrorCodeIterOver) {
			return nil
		}
		name, _ := b.Name()
		if name == "jcarr" {
			log.Info("found BranchLocal", name)
			return b
		}
		if bt == git.BranchLocal {
			log.Info("BranchLocal", name)
		} else {
			log.Info("Branch", name, bt)
		}
	}
	return nil
}