Skip to content

Instantly share code, notes, and snippets.

@smothiki
Last active June 1, 2020 19:26
Show Gist options
  • Save smothiki/8bdce5ed243b2b1ec3d28e558995b057 to your computer and use it in GitHub Desktop.
Save smothiki/8bdce5ed243b2b1ec3d28e558995b057 to your computer and use it in GitHub Desktop.
libgit2 sample
package main
import (
"os"
"time"
"fmt"
git "github.com/libgit2/git2go"
)
func credentialsCallback(url string, username string, allowedTypes git.CredType) (git.ErrorCode, *git.Cred) {
ret, cred := git.NewCredSshKeyFromAgent(username)
return git.ErrorCode(ret), &cred
}
func certificateCheckCallback(cert *git.Certificate, valid bool, hostname string) git.ErrorCode {
if hostname != "github.com" {
return git.ErrUser
}
return 0
}
func main() {
repo, err := git.Clone("https://github.com/smothiki/mini-deis.git", "web", &git.CloneOptions{})
if err != nil {
panic(err)
}
signature := &git.Signature{
Name: "David Calavera",
Email: "[email protected]",
When: time.Now(),
}
head, err := repo.Head()
if err != nil {
panic(err)
}
headCommit, err := repo.LookupCommit(head.Target())
if err != nil {
panic(err)
}
branch, err := repo.CreateBranch("git2go-tutorial", headCommit, false)
if err != nil {
panic(err)
}
idx, err := repo.Index()
if err != nil {
panic(err)
}
err = os.Link("git2go-tutorial.md", "web/README.md")
if err != nil {
panic(err)
}
err = idx.AddByPath("content/advent-2014/git2go-tutorial.md")
if err != nil {
panic(err)
}
treeId, err := idx.WriteTree()
if err != nil {
panic(err)
}
err = idx.Write()
if err != nil {
panic(err)
}
tree, err := repo.LookupTree(treeId)
if err != nil {
panic(err)
}
commitTarget, err := repo.LookupCommit(branch.Target())
if err != nil {
panic(err)
}
fmt.Println(signature,commitTarget,tree)
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment