diff options
Diffstat (limited to 'submodule.go')
| -rw-r--r-- | submodule.go | 67 |
1 files changed, 57 insertions, 10 deletions
diff --git a/submodule.go b/submodule.go index e1e031b..9abf333 100644 --- a/submodule.go +++ b/submodule.go @@ -1,7 +1,6 @@ package git /* -#cgo pkg-config: libgit2 #include <git2.h> #include <git2/errors.h> @@ -9,6 +8,7 @@ extern int _go_git_visit_submodule(git_repository *repo, void *fct); */ import "C" import ( + "runtime" "unsafe" ) @@ -20,7 +20,7 @@ type Submodule struct { type SubmoduleUpdate int const ( - SubmoduleUpdateDefault SubmoduleUpdate = C.GIT_SUBMODULE_UPDATE_DEFAULT + SubmoduleUpdateReset SubmoduleUpdate = C.GIT_SUBMODULE_UPDATE_RESET SubmoduleUpdateCheckout = C.GIT_SUBMODULE_UPDATE_CHECKOUT SubmoduleUpdateRebase = C.GIT_SUBMODULE_UPDATE_REBASE SubmoduleUpdateMerge = C.GIT_SUBMODULE_UPDATE_MERGE @@ -30,7 +30,7 @@ const ( type SubmoduleIgnore int const ( - SubmoduleIgnoreDefault SubmoduleIgnore = C.GIT_SUBMODULE_IGNORE_DEFAULT + SubmoduleIgnoreReset SubmoduleIgnore = C.GIT_SUBMODULE_IGNORE_RESET SubmoduleIgnoreNone = C.GIT_SUBMODULE_IGNORE_NONE SubmoduleIgnoreUntracked = C.GIT_SUBMODULE_IGNORE_UNTRACKED SubmoduleIgnoreDirty = C.GIT_SUBMODULE_IGNORE_DIRTY @@ -56,6 +56,14 @@ const ( SubmoduleStatusWdUntracked = C.GIT_SUBMODULE_STATUS_WD_UNTRACKED ) +type SubmoduleRecurse int + +const ( + SubmoduleRecurseNo SubmoduleRecurse = C.GIT_SUBMODULE_RECURSE_NO + SubmoduleRecurseYes = C.GIT_SUBMODULE_RECURSE_YES + SubmoduleRecurseOndemand = C.GIT_SUBMODULE_RECURSE_ONDEMAND +) + func SubmoduleStatusIsUnmodified(status int) bool { o := SubmoduleStatus(status) & ^(SubmoduleStatusInHead | SubmoduleStatusInIndex | SubmoduleStatusInConfig | SubmoduleStatusInWd) @@ -67,6 +75,10 @@ func (repo *Repository) LookupSubmodule(name string) (*Submodule, error) { defer C.free(unsafe.Pointer(cname)) sub := new(Submodule) + + runtime.LockOSThread() + defer runtime.UnlockOSThread() + ret := C.git_submodule_lookup(&sub.ptr, repo.ptr, cname) if ret < 0 { return nil, LastError() @@ -85,6 +97,9 @@ func SubmoduleVisitor(csub unsafe.Pointer, name string, cfct unsafe.Pointer) int } func (repo *Repository) ForeachSubmodule(cbk SubmoduleCbk) error { + runtime.LockOSThread() + defer runtime.UnlockOSThread() + ret := C._go_git_visit_submodule(repo.ptr, unsafe.Pointer(&cbk)) if ret < 0 { return LastError() @@ -99,6 +114,10 @@ func (repo *Repository) AddSubmodule(url, path string, use_git_link bool) (*Subm defer C.free(unsafe.Pointer(cpath)) sub := new(Submodule) + + runtime.LockOSThread() + defer runtime.UnlockOSThread() + ret := C.git_submodule_add_setup(&sub.ptr, repo.ptr, curl, cpath, cbool(use_git_link)) if ret < 0 { return nil, LastError() @@ -107,6 +126,9 @@ func (repo *Repository) AddSubmodule(url, path string, use_git_link bool) (*Subm } func (sub *Submodule) FinalizeAdd() error { + runtime.LockOSThread() + defer runtime.UnlockOSThread() + ret := C.git_submodule_add_finalize(sub.ptr) if ret < 0 { return LastError() @@ -115,6 +137,9 @@ func (sub *Submodule) FinalizeAdd() error { } func (sub *Submodule) AddToIndex(write_index bool) error { + runtime.LockOSThread() + defer runtime.UnlockOSThread() + ret := C.git_submodule_add_to_index(sub.ptr, cbool(write_index)) if ret < 0 { return LastError() @@ -123,6 +148,9 @@ func (sub *Submodule) AddToIndex(write_index bool) error { } func (sub *Submodule) Save() error { + runtime.LockOSThread() + defer runtime.UnlockOSThread() + ret := C.git_submodule_save(sub.ptr) if ret < 0 { return LastError() @@ -155,6 +183,9 @@ func (sub *Submodule) SetUrl(url string) error { curl := C.CString(url) defer C.free(unsafe.Pointer(curl)) + runtime.LockOSThread() + defer runtime.UnlockOSThread() + ret := C.git_submodule_set_url(sub.ptr, curl) if ret < 0 { return LastError() @@ -206,15 +237,15 @@ func (sub *Submodule) SetUpdate(update SubmoduleUpdate) SubmoduleUpdate { return SubmoduleUpdate(o) } -func (sub *Submodule) FetchRecurseSubmodules() bool { - if 0 == C.git_submodule_fetch_recurse_submodules(sub.ptr) { - return false - } - return true +func (sub *Submodule) FetchRecurseSubmodules() SubmoduleRecurse { + return SubmoduleRecurse(C.git_submodule_fetch_recurse_submodules(sub.ptr)); } -func (sub *Submodule) SetFetchRecurseSubmodules(v bool) error { - ret := C.git_submodule_set_fetch_recurse_submodules(sub.ptr, cbool(v)) +func (sub *Submodule) SetFetchRecurseSubmodules(recurse SubmoduleRecurse) error { + runtime.LockOSThread() + defer runtime.UnlockOSThread() + + ret := C.git_submodule_set_fetch_recurse_submodules(sub.ptr, C.git_submodule_recurse_t(recurse)) if ret < 0 { return LastError() } @@ -222,6 +253,9 @@ func (sub *Submodule) SetFetchRecurseSubmodules(v bool) error { } func (sub *Submodule) Init(overwrite bool) error { + runtime.LockOSThread() + defer runtime.UnlockOSThread() + ret := C.git_submodule_init(sub.ptr, cbool(overwrite)) if ret < 0 { return LastError() @@ -230,6 +264,9 @@ func (sub *Submodule) Init(overwrite bool) error { } func (sub *Submodule) Sync() error { + runtime.LockOSThread() + defer runtime.UnlockOSThread() + ret := C.git_submodule_sync(sub.ptr) if ret < 0 { return LastError() @@ -239,6 +276,10 @@ func (sub *Submodule) Sync() error { func (sub *Submodule) Open() (*Repository, error) { repo := new(Repository) + + runtime.LockOSThread() + defer runtime.UnlockOSThread() + ret := C.git_submodule_open(&repo.ptr, sub.ptr) if ret < 0 { return nil, LastError() @@ -247,6 +288,9 @@ func (sub *Submodule) Open() (*Repository, error) { } func (sub *Submodule) Reload() error { + runtime.LockOSThread() + defer runtime.UnlockOSThread() + ret := C.git_submodule_reload(sub.ptr) if ret < 0 { return LastError() @@ -255,6 +299,9 @@ func (sub *Submodule) Reload() error { } func (repo *Repository) ReloadAllSubmodules() error { + runtime.LockOSThread() + defer runtime.UnlockOSThread() + ret := C.git_submodule_reload_all(repo.ptr) if ret < 0 { return LastError() |
