Merge pull request #185 from griffindy/dg-add-reset
Add support for libgit2's git_reset.
This commit is contained in:
commit
a4d5118374
|
@ -0,0 +1,26 @@
|
|||
package git
|
||||
|
||||
/*
|
||||
#include <git2.h>
|
||||
*/
|
||||
import "C"
|
||||
import "runtime"
|
||||
|
||||
type ResetType int
|
||||
|
||||
const (
|
||||
ResetSoft ResetType = C.GIT_RESET_SOFT
|
||||
ResetMixed ResetType = C.GIT_RESET_MIXED
|
||||
ResetHard ResetType = C.GIT_RESET_HARD
|
||||
)
|
||||
|
||||
func (r *Repository) ResetToCommit(commit *Commit, resetType ResetType, opts *CheckoutOpts) error {
|
||||
runtime.LockOSThread()
|
||||
defer runtime.UnlockOSThread()
|
||||
ret := C.git_reset(r.ptr, commit.gitObject.ptr, C.git_reset_t(resetType), opts.toC())
|
||||
|
||||
if ret < 0 {
|
||||
return MakeGitError(ret)
|
||||
}
|
||||
return nil
|
||||
}
|
|
@ -0,0 +1,45 @@
|
|||
package git
|
||||
|
||||
import (
|
||||
"io/ioutil"
|
||||
"testing"
|
||||
)
|
||||
|
||||
func TestResetToCommit(t *testing.T) {
|
||||
repo := createTestRepo(t)
|
||||
seedTestRepo(t, repo)
|
||||
// create commit to reset to
|
||||
commitId, _ := updateReadme(t, repo, "testing reset")
|
||||
// create commit to reset from
|
||||
nextCommitId, _ := updateReadme(t, repo, "will be reset")
|
||||
|
||||
// confirm that we wrote "will be reset" to the readme
|
||||
newBytes, err := ioutil.ReadFile(pathInRepo(repo, "README"))
|
||||
checkFatal(t, err)
|
||||
if string(newBytes) != "will be reset" {
|
||||
t.Fatalf("expected %s to equal 'will be reset'", string(newBytes))
|
||||
}
|
||||
|
||||
// confirm that the head of the repo is the next commit id
|
||||
head, err := repo.Head()
|
||||
checkFatal(t, err)
|
||||
if head.Target().String() != nextCommitId.String() {
|
||||
t.Fatalf(
|
||||
"expected to be at latest commit %s, but was %s",
|
||||
nextCommitId.String(),
|
||||
head.Target().String(),
|
||||
)
|
||||
}
|
||||
|
||||
commitToResetTo, err := repo.LookupCommit(commitId)
|
||||
checkFatal(t, err)
|
||||
|
||||
repo.ResetToCommit(commitToResetTo, ResetHard, &CheckoutOpts{})
|
||||
|
||||
// check that the file now reads "testing reset" like it did before
|
||||
bytes, err := ioutil.ReadFile(pathInRepo(repo, "README"))
|
||||
checkFatal(t, err)
|
||||
if string(bytes) != "testing reset" {
|
||||
t.Fatalf("expected %s to equal 'testing reset'", string(bytes))
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue