diff options
author | Paulo Gomes <pjbgf@linux.com> | 2023-07-08 00:41:19 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-07-08 00:41:19 +0100 |
commit | 7e143ceb36ed6d46462f3c37f07993f9a10f91e3 (patch) | |
tree | 8b6d76278f0a5020fc7fc675908abc29e2a8025d /_examples/blame/main.go | |
parent | dd4e2b7f4b01e2aaafcf182d2884a186a6f37d21 (diff) | |
parent | e0fc8a8f00c238f7f7cdf0e0c59e743550587bdf (diff) | |
download | go-git-7e143ceb36ed6d46462f3c37f07993f9a10f91e3.tar.gz |
Merge pull request #789 from AriehSchneier/rewrite-blame
plumbing: blame, Complete rewrite. Fixes #603
Diffstat (limited to '_examples/blame/main.go')
-rw-r--r-- | _examples/blame/main.go | 48 |
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()) +} |