aboutsummaryrefslogtreecommitdiffstats
path: root/_examples/showcase
diff options
context:
space:
mode:
Diffstat (limited to '_examples/showcase')
-rw-r--r--_examples/showcase/main.go62
1 files changed, 62 insertions, 0 deletions
diff --git a/_examples/showcase/main.go b/_examples/showcase/main.go
new file mode 100644
index 0000000..e70de61
--- /dev/null
+++ b/_examples/showcase/main.go
@@ -0,0 +1,62 @@
+package main
+
+import (
+ "fmt"
+ "os"
+ "strings"
+
+ "srcd.works/go-git.v4"
+ "srcd.works/go-git.v4/plumbing/object"
+
+ . "srcd.works/go-git.v4/examples"
+)
+
+func main() {
+ CheckArgs("<url> <path>")
+ url := os.Args[1]
+ path := os.Args[2]
+
+ // Clone the given repository, creating the remote, the local branches
+ // and fetching the objects, exactly as:
+ Info("git clone %s %s", url, path)
+
+ r, err := git.PlainClone(path, false, &git.CloneOptions{URL: url})
+ CheckIfError(err)
+
+ // Getting the latest commit on the current branch
+ Info("git log -1")
+
+ // ... retrieving the branch being pointed by HEAD
+ ref, err := r.Head()
+ CheckIfError(err)
+
+ // ... retrieving the commit object
+ commit, err := r.Commit(ref.Hash())
+ CheckIfError(err)
+ fmt.Println(commit)
+
+ // List the tree from HEAD
+ Info("git ls-tree -r HEAD")
+
+ // ... retrieve the tree from the commit
+ tree, err := commit.Tree()
+ CheckIfError(err)
+
+ // ... get the files iterator and print the file
+ tree.Files().ForEach(func(f *object.File) error {
+ fmt.Printf("100644 blob %s %s\n", f.Hash, f.Name)
+ return nil
+ })
+
+ // List the history of the repository
+ Info("git log --oneline")
+
+ commits, err := commit.History()
+ CheckIfError(err)
+
+ for _, c := range commits {
+ hash := c.Hash.String()
+ line := strings.Split(c.Message, "\n")
+ fmt.Println(hash[:7], line[0])
+ }
+}