From a045606fc9c5cbf30b409384cbdad4804f01c61d Mon Sep 17 00:00:00 2001 From: Máximo Cuadros Date: Mon, 22 Aug 2016 00:17:21 +0200 Subject: examples: improved basic and remote examples --- examples/basic/main.go | 58 ++++++++++++++++++++++++++++++-------------------- 1 file changed, 35 insertions(+), 23 deletions(-) (limited to 'examples/basic') diff --git a/examples/basic/main.go b/examples/basic/main.go index 510b39d..4c65a70 100644 --- a/examples/basic/main.go +++ b/examples/basic/main.go @@ -2,37 +2,49 @@ package main import ( "fmt" - "os" + + "github.com/fatih/color" "gopkg.in/src-d/go-git.v4" ) func main() { - url := os.Args[1] - fmt.Printf("Retrieving %q ...\n", url) - r, err := git.NewMemoryRepository() - if err != nil { - panic(err) - } - - if err = r.Clone(&git.RepositoryCloneOptions{URL: url}); err != nil { - panic(err) - } - - iter, err := r.Commits() - if err != nil { - panic(err) - } + r := git.NewMemoryRepository() - defer iter.Close() + // Clone the given repository, creating the remote, the local branches + // and fetching the objects, exactly as: + // > git clone https://github.com/git-fixtures/basic.git + color.Blue("git clone https://github.com/git-fixtures/basic.git") - var count = 0 - iter.ForEach(func(commit *git.Commit) error { - count++ - fmt.Println(commit) + r.Clone(&git.RepositoryCloneOptions{ + URL: "https://github.com/git-fixtures/basic.git", + }) + // Getting the latest commit on the current branch + // > git log -1 + color.Blue("git log -1") + + // ... retrieving the branch being pointed by HEAD + ref, _ := r.Head() + // ... retrieving the commit object + commit, _ := r.Commit(ref.Hash()) + fmt.Println(commit) + + // List the tree from HEAD + // > git ls-tree -r HEAD + color.Blue("git ls-tree -r HEAD") + + // ... retrieve the tree from the commit + tree := commit.Tree() + // ... create a tree walker, allows to you intereste all nested trees + walker := git.NewTreeWalker(r, tree) + walker.ForEach(func(fullpath string, e git.TreeEntry) error { + // we ignore the tree + if e.Mode.Perm() == 0 { + return nil + } + + fmt.Printf("100644 blob %s %s\n", e.Hash, fullpath) return nil }) - - fmt.Println("total commits:", count) } -- cgit