diff options
author | Arieh Schneier <15041913+AriehSchneier@users.noreply.github.com> | 2023-07-06 08:45:49 +1000 |
---|---|---|
committer | Arieh Schneier <15041913+AriehSchneier@users.noreply.github.com> | 2023-07-06 08:45:49 +1000 |
commit | e0fc8a8f00c238f7f7cdf0e0c59e743550587bdf (patch) | |
tree | 8b6d76278f0a5020fc7fc675908abc29e2a8025d /_examples/blame/main.go | |
parent | dd4e2b7f4b01e2aaafcf182d2884a186a6f37d21 (diff) | |
download | go-git-e0fc8a8f00c238f7f7cdf0e0c59e743550587bdf.tar.gz |
plumbing: blame, Complete rewrite. Fixes #603
Signed-off-by: Arieh Schneier <15041913+AriehSchneier@users.noreply.github.com>
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()) +} |