diff options
| author | lye <lye@> | 2014-02-20 00:25:30 -0600 |
|---|---|---|
| committer | lye <lye@> | 2014-02-20 00:29:03 -0600 |
| commit | bc80beb8432091bdf1190ad6b803060324802685 (patch) | |
| tree | 85b6032da7874910ef10981e9fb2e87430169f00 /repository.go | |
| parent | 66e1c476199ebcd3e304659992233132c5a52c6c (diff) | |
Add partial diff/patch functionality.
This commit adds barebones capacity to generate diffs from two trees and
to emit those as git-style diffs (via `Patch.String`), or to enumerate
the files/hunks/lines in the diff to emit the data yourself.
The walk functions have been implemented in the same manner as the Odb
walking methods.
Note that not all of the functionality is implemented for either the
`git_diff_*` nor the `git_patch_*` functions, and there are unexposed
constants which would likely be useful to add.
Diffstat (limited to 'repository.go')
| -rw-r--r-- | repository.go | 31 |
1 files changed, 31 insertions, 0 deletions
diff --git a/repository.go b/repository.go index 3a9068d..58d3487 100644 --- a/repository.go +++ b/repository.go @@ -146,6 +146,20 @@ func (v *Repository) LookupReference(name string) (*Reference, error) { return newReferenceFromC(ptr), nil } +func (v *Repository) Head() (*Reference, error) { + var ptr *C.git_reference + + runtime.LockOSThread() + defer runtime.UnlockOSThread() + + ecode := C.git_repository_head(&ptr, v.ptr) + if ecode < 0 { + return nil, LastError() + } + + return newReferenceFromC(ptr), nil +} + func (v *Repository) CreateReference(name string, oid *Oid, force bool) (*Reference, error) { cname := C.CString(name) defer C.free(unsafe.Pointer(cname)) @@ -241,6 +255,23 @@ func (v *Repository) CreateCommit( return oid, nil } +func (v *Repository) DiffTreeToTree(oldTree, newTree *Tree) *Diff { + var diffPtr *C.git_diff + var oldPtr, newPtr *C.git_tree + + if oldTree != nil { + oldPtr = oldTree.gitObject.ptr + } + + if newTree != nil { + newPtr = newTree.gitObject.ptr + } + + C.git_diff_tree_to_tree(&diffPtr, v.ptr, oldPtr, newPtr, nil) + + return newDiff(diffPtr) +} + func (v *Odb) Free() { runtime.SetFinalizer(v, nil) C.git_odb_free(v.ptr) |
