summaryrefslogtreecommitdiff
path: root/diff.go
diff options
context:
space:
mode:
authorlhchavez <[email protected]>2020-02-23 14:49:04 +0000
committerlhchavez <[email protected]>2020-02-23 14:49:04 +0000
commit627447092fa24035ed3cd4cf31932dbef6f5a57f (patch)
tree48a9122be45522cf1ec72535cec18fd701db55d2 /diff.go
parent03339f731aba66baacab3fd67e7b2d185cdacb33 (diff)
parent06764f48dce903bf95701c6ef75ad0fe46c0dedf (diff)
Merge remote-tracking branch 'upstream/master' into more-annotated-commit
Diffstat (limited to 'diff.go')
-rw-r--r--diff.go38
1 files changed, 36 insertions, 2 deletions
diff --git a/diff.go b/diff.go
index 3088320..ed2949c 100644
--- a/diff.go
+++ b/diff.go
@@ -39,6 +39,8 @@ const (
DeltaConflicted Delta = C.GIT_DELTA_CONFLICTED
)
+//go:generate stringer -type Delta -trimprefix Delta -tags static
+
type DiffLineType int
const (
@@ -54,6 +56,8 @@ const (
DiffLineBinary DiffLineType = C.GIT_DIFF_LINE_BINARY
)
+//go:generate stringer -type DiffLineType -trimprefix DiffLine -tags static
+
type DiffFile struct {
Path string
Oid *Oid
@@ -246,7 +250,7 @@ const (
func (stats *DiffStats) String(format DiffStatsFormat,
width uint) (string, error) {
buf := C.git_buf{}
- defer C.git_buf_free(&buf)
+ defer C.git_buf_dispose(&buf)
runtime.LockOSThread()
defer runtime.UnlockOSThread()
@@ -284,7 +288,7 @@ type diffForEachData struct {
Error error
}
-type DiffForEachFileCallback func(DiffDelta, float64) (DiffForEachHunkCallback, error)
+type DiffForEachFileCallback func(delta DiffDelta, progress float64) (DiffForEachHunkCallback, error)
type DiffDetail int
@@ -405,6 +409,36 @@ func (diff *Diff) Patch(deltaIndex int) (*Patch, error) {
return newPatchFromC(patchPtr), nil
}
+type DiffFormat int
+
+const (
+ DiffFormatPatch DiffFormat = C.GIT_DIFF_FORMAT_PATCH
+ DiffFormatPatchHeader DiffFormat = C.GIT_DIFF_FORMAT_PATCH_HEADER
+ DiffFormatRaw DiffFormat = C.GIT_DIFF_FORMAT_RAW
+ DiffFormatNameOnly DiffFormat = C.GIT_DIFF_FORMAT_NAME_ONLY
+ DiffFormatNameStatus DiffFormat = C.GIT_DIFF_FORMAT_NAME_STATUS
+)
+
+func (diff *Diff) ToBuf(format DiffFormat) ([]byte, error) {
+ if diff.ptr == nil {
+ return nil, ErrInvalid
+ }
+
+ diffBuf := C.git_buf{}
+
+ runtime.LockOSThread()
+ defer runtime.UnlockOSThread()
+
+ ecode := C.git_diff_to_buf(&diffBuf, diff.ptr, C.git_diff_format_t(format))
+ runtime.KeepAlive(diff)
+ if ecode < 0 {
+ return nil, MakeGitError(ecode)
+ }
+ defer C.git_buf_free(&diffBuf)
+
+ return C.GoBytes(unsafe.Pointer(diffBuf.ptr), C.int(diffBuf.size)), nil
+}
+
type DiffOptionsFlag int
const (