/* requires libgit2 */ package main import ( "github.com/libgit2/git2go" "fmt" "log" "flag" "strings" ) type Blob struct { *git.Blob id *git.Oid } func main(){ repoPath := flag.String("repo", "~/git/testrepo", "path to the git repository") flag.Parse() repo, err := git.OpenRepository(*repoPath) if err != nil { log.Fatal(err) } fmt.Println(repo) odb, err := repo.Odb() if err != nil { log.Fatal(err) } err = odb.ForEach(func(oid *git.Oid) error { obj, err := repo.Lookup(oid) if err != nil { return err } switch obj := obj.(type) { default: case *git.Blob: break fmt.Printf("==================================\n") fmt.Printf("obj: %s\n", obj) fmt.Printf("Type: %s\n", obj.Type()) fmt.Printf("Id: %s\n", obj.Id()) fmt.Printf("Size: %s\n", obj.Size()) case *git.Commit: fmt.Printf("==================================\n") fmt.Printf("obj: %s\n", obj) fmt.Printf("Type: %s\n", obj.Type()) fmt.Printf("Id: %s\n", obj.Id()) author := obj.Author() fmt.Printf(" Author:\n Name: %s\n Email: %s\n Date: %s\n", author.Name, author.Email, author.When) committer := obj.Committer() fmt.Printf(" Committer:\n Name: %s\n Email: %s\n Date: %s\n", committer.Name, committer.Email, committer.When) fmt.Printf(" ParentCount: %s\n", int(obj.ParentCount())) fmt.Printf(" TreeId: %s\n", obj.TreeId()) fmt.Printf(" Message:\n\n %s\n\n", strings.Replace(obj.Message(),"\n","\n ", -1)) //fmt.Printf("obj.Parent: %s\n", obj.Parent()) //fmt.Printf("obj.ParentId: %s\n", obj.ParentId()) //fmt.Printf("obj.Tree: %s\n", obj.Tree()) case *git.Tree: break fmt.Printf("==================================\n") fmt.Printf("obj: %s\n", obj) fmt.Printf("Type: %s\n", obj.Type()) fmt.Printf("Id: %s\n", obj.Id()) fmt.Printf(" EntryCount: %s\n", obj.EntryCount()) } return nil }) if err != nil { log.Fatal("Lookup:", err) } }