summaryrefslogtreecommitdiff
path: root/submodule.go
diff options
context:
space:
mode:
authorCarlos Martín Nieto <[email protected]>2015-01-09 10:21:20 +0100
committerCarlos Martín Nieto <[email protected]>2015-01-09 10:21:20 +0100
commit69be70646c0616d49e8be04f2d718cd7a180f9c6 (patch)
tree9ed6c94c078c7f503c733dd684ad549c62fc857f /submodule.go
parentd260f21be3ae02814a23d6d077e29da63b983b77 (diff)
parentea7f567756fbe5060ad830dc5fcf3cea2038c425 (diff)
Merge pull request #167 from calavera/fix_git_submodules
Fix inconsistent function call in Submodule.
Diffstat (limited to 'submodule.go')
-rw-r--r--submodule.go48
1 files changed, 42 insertions, 6 deletions
diff --git a/submodule.go b/submodule.go
index d5ab69f..f3e9e83 100644
--- a/submodule.go
+++ b/submodule.go
@@ -11,6 +11,14 @@ import (
"unsafe"
)
+// SubmoduleUpdateOptions
+type SubmoduleUpdateOptions struct {
+ *CheckoutOpts
+ *RemoteCallbacks
+ CloneCheckoutStrategy CheckoutStrategy
+ Signature *Signature
+}
+
// Submodule
type Submodule struct {
ptr *C.git_submodule
@@ -20,10 +28,10 @@ type SubmoduleUpdate int
const (
SubmoduleUpdateReset SubmoduleUpdate = C.GIT_SUBMODULE_UPDATE_RESET
- SubmoduleUpdateCheckout SubmoduleUpdate = C.GIT_SUBMODULE_UPDATE_CHECKOUT
- SubmoduleUpdateRebase SubmoduleUpdate = C.GIT_SUBMODULE_UPDATE_REBASE
- SubmoduleUpdateMerge SubmoduleUpdate = C.GIT_SUBMODULE_UPDATE_MERGE
- SubmoduleUpdateNone SubmoduleUpdate = C.GIT_SUBMODULE_UPDATE_NONE
+ SubmoduleUpdateCheckout SubmoduleUpdate = C.GIT_SUBMODULE_UPDATE_CHECKOUT
+ SubmoduleUpdateRebase SubmoduleUpdate = C.GIT_SUBMODULE_UPDATE_REBASE
+ SubmoduleUpdateMerge SubmoduleUpdate = C.GIT_SUBMODULE_UPDATE_MERGE
+ SubmoduleUpdateNone SubmoduleUpdate = C.GIT_SUBMODULE_UPDATE_NONE
)
type SubmoduleIgnore int
@@ -226,8 +234,8 @@ func (sub *Submodule) SetIgnore(ignore SubmoduleIgnore) SubmoduleIgnore {
return SubmoduleIgnore(o)
}
-func (sub *Submodule) Update() SubmoduleUpdate {
- o := C.git_submodule_update(sub.ptr)
+func (sub *Submodule) UpdateStrategy() SubmoduleUpdate {
+ o := C.git_submodule_update_strategy(sub.ptr)
return SubmoduleUpdate(o)
}
@@ -307,3 +315,31 @@ func (repo *Repository) ReloadAllSubmodules(force bool) error {
}
return nil
}
+
+func (sub *Submodule) Update(init bool, opts *SubmoduleUpdateOptions) error {
+ var copts C.git_submodule_update_options
+ populateSubmoduleUpdateOptions(&copts, opts)
+
+ runtime.LockOSThread()
+ defer runtime.UnlockOSThread()
+
+ ret := C.git_submodule_update(sub.ptr, cbool(init), &copts)
+ if ret < 0 {
+ return MakeGitError(ret)
+ }
+
+ return nil
+}
+
+func populateSubmoduleUpdateOptions(ptr *C.git_submodule_update_options, opts *SubmoduleUpdateOptions) {
+ C.git_submodule_update_init_options(ptr, C.GIT_SUBMODULE_UPDATE_OPTIONS_VERSION)
+
+ if opts == nil {
+ return
+ }
+
+ populateCheckoutOpts(&ptr.checkout_opts, opts.CheckoutOpts)
+ populateRemoteCallbacks(&ptr.remote_callbacks, opts.RemoteCallbacks)
+ ptr.clone_checkout_strategy = C.uint(opts.CloneCheckoutStrategy)
+ ptr.signature = opts.Signature.toC()
+}