aboutsummaryrefslogtreecommitdiffstats
path: root/_examples
diff options
context:
space:
mode:
authorPaulo Gomes <pjbgf@linux.com>2023-07-08 00:41:19 +0100
committerGitHub <noreply@github.com>2023-07-08 00:41:19 +0100
commit7e143ceb36ed6d46462f3c37f07993f9a10f91e3 (patch)
tree8b6d76278f0a5020fc7fc675908abc29e2a8025d /_examples
parentdd4e2b7f4b01e2aaafcf182d2884a186a6f37d21 (diff)
parente0fc8a8f00c238f7f7cdf0e0c59e743550587bdf (diff)
downloadgo-git-7e143ceb36ed6d46462f3c37f07993f9a10f91e3.tar.gz
Merge pull request #789 from AriehSchneier/rewrite-blame
plumbing: blame, Complete rewrite. Fixes #603
Diffstat (limited to '_examples')
-rw-r--r--_examples/blame/main.go48
1 files changed, 48 insertions, 0 deletions
diff --git a/_examples/blame/main.go b/_examples/blame/main.go
new file mode 100644
index 0000000..3ffae17
--- /dev/null
+++ b/_examples/blame/main.go
@@ -0,0 +1,48 @@
+package main
+
+import (
+ "fmt"
+ "os"
+
+ "github.com/go-git/go-git/v5"
+ . "github.com/go-git/go-git/v5/_examples"
+)
+
+// Basic example of how to blame a repository.
+func main() {
+ CheckArgs("<url>", "<file_to_blame>")
+ url := os.Args[1]
+ path := os.Args[2]
+
+ tmp, err := os.MkdirTemp("", "go-git-blame-*")
+ CheckIfError(err)
+
+ defer os.RemoveAll(tmp)
+
+ // Clone the given repository.
+ Info("git clone %s %s", url, tmp)
+ r, err := git.PlainClone(
+ tmp,
+ false,
+ &git.CloneOptions{
+ URL: url,
+ Tags: git.NoTags,
+ },
+ )
+ CheckIfError(err)
+
+ // Retrieve the branch's HEAD, to then get the HEAD commit.
+ ref, err := r.Head()
+ CheckIfError(err)
+
+ c, err := r.CommitObject(ref.Hash())
+ CheckIfError(err)
+
+ Info("git blame %s", path)
+
+ // Blame the given file/path.
+ br, err := git.Blame(c, path)
+ CheckIfError(err)
+
+ fmt.Printf("%s", br.String())
+}