Create a SubmoduleCollection for managing submodules
Similarly to RemoteCollection, this allows us to namespace the submodule operations much more concisely and removes API on the Repository.
This commit is contained in:
parent
4b9cbd78fd
commit
d2808d1610
|
@ -17,10 +17,15 @@ type Repository struct {
|
||||||
// used to add, remove and configure remotes for this
|
// used to add, remove and configure remotes for this
|
||||||
// repository.
|
// repository.
|
||||||
Remotes RemoteCollection
|
Remotes RemoteCollection
|
||||||
|
// Submodules represents the collectin of submodules and can
|
||||||
|
// be used to add, remove and configure submodules in this
|
||||||
|
// repostiory.
|
||||||
|
Submodules SubmoduleCollection
|
||||||
}
|
}
|
||||||
|
|
||||||
func initRepositoryObject(repo *Repository) {
|
func initRepositoryObject(repo *Repository) {
|
||||||
repo.Remotes.repo = repo
|
repo.Remotes.repo = repo
|
||||||
|
repo.Submodules.repo = repo
|
||||||
runtime.SetFinalizer(repo, (*Repository).Free)
|
runtime.SetFinalizer(repo, (*Repository).Free)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
32
submodule.go
32
submodule.go
|
@ -68,13 +68,17 @@ const (
|
||||||
SubmoduleRecurseOndemand SubmoduleRecurse = C.GIT_SUBMODULE_RECURSE_ONDEMAND
|
SubmoduleRecurseOndemand SubmoduleRecurse = C.GIT_SUBMODULE_RECURSE_ONDEMAND
|
||||||
)
|
)
|
||||||
|
|
||||||
|
type SubmoduleCollection struct {
|
||||||
|
repo *Repository
|
||||||
|
}
|
||||||
|
|
||||||
func SubmoduleStatusIsUnmodified(status int) bool {
|
func SubmoduleStatusIsUnmodified(status int) bool {
|
||||||
o := SubmoduleStatus(status) & ^(SubmoduleStatusInHead | SubmoduleStatusInIndex |
|
o := SubmoduleStatus(status) & ^(SubmoduleStatusInHead | SubmoduleStatusInIndex |
|
||||||
SubmoduleStatusInConfig | SubmoduleStatusInWd)
|
SubmoduleStatusInConfig | SubmoduleStatusInWd)
|
||||||
return o == 0
|
return o == 0
|
||||||
}
|
}
|
||||||
|
|
||||||
func (repo *Repository) LookupSubmodule(name string) (*Submodule, error) {
|
func (c *SubmoduleCollection) Lookup(name string) (*Submodule, error) {
|
||||||
cname := C.CString(name)
|
cname := C.CString(name)
|
||||||
defer C.free(unsafe.Pointer(cname))
|
defer C.free(unsafe.Pointer(cname))
|
||||||
|
|
||||||
|
@ -83,7 +87,7 @@ func (repo *Repository) LookupSubmodule(name string) (*Submodule, error) {
|
||||||
runtime.LockOSThread()
|
runtime.LockOSThread()
|
||||||
defer runtime.UnlockOSThread()
|
defer runtime.UnlockOSThread()
|
||||||
|
|
||||||
ret := C.git_submodule_lookup(&sub.ptr, repo.ptr, cname)
|
ret := C.git_submodule_lookup(&sub.ptr, c.repo.ptr, cname)
|
||||||
if ret < 0 {
|
if ret < 0 {
|
||||||
return nil, MakeGitError(ret)
|
return nil, MakeGitError(ret)
|
||||||
}
|
}
|
||||||
|
@ -104,21 +108,21 @@ func SubmoduleVisitor(csub unsafe.Pointer, name *C.char, handle unsafe.Pointer)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func (repo *Repository) ForeachSubmodule(cbk SubmoduleCbk) error {
|
func (c *SubmoduleCollection) Foreach(cbk SubmoduleCbk) error {
|
||||||
runtime.LockOSThread()
|
runtime.LockOSThread()
|
||||||
defer runtime.UnlockOSThread()
|
defer runtime.UnlockOSThread()
|
||||||
|
|
||||||
handle := pointerHandles.Track(cbk)
|
handle := pointerHandles.Track(cbk)
|
||||||
defer pointerHandles.Untrack(handle)
|
defer pointerHandles.Untrack(handle)
|
||||||
|
|
||||||
ret := C._go_git_visit_submodule(repo.ptr, handle)
|
ret := C._go_git_visit_submodule(c.repo.ptr, handle)
|
||||||
if ret < 0 {
|
if ret < 0 {
|
||||||
return MakeGitError(ret)
|
return MakeGitError(ret)
|
||||||
}
|
}
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (repo *Repository) AddSubmodule(url, path string, use_git_link bool) (*Submodule, error) {
|
func (c *SubmoduleCollection) Add(url, path string, use_git_link bool) (*Submodule, error) {
|
||||||
curl := C.CString(url)
|
curl := C.CString(url)
|
||||||
defer C.free(unsafe.Pointer(curl))
|
defer C.free(unsafe.Pointer(curl))
|
||||||
cpath := C.CString(path)
|
cpath := C.CString(path)
|
||||||
|
@ -129,7 +133,7 @@ func (repo *Repository) AddSubmodule(url, path string, use_git_link bool) (*Subm
|
||||||
runtime.LockOSThread()
|
runtime.LockOSThread()
|
||||||
defer runtime.UnlockOSThread()
|
defer runtime.UnlockOSThread()
|
||||||
|
|
||||||
ret := C.git_submodule_add_setup(&sub.ptr, repo.ptr, curl, cpath, cbool(use_git_link))
|
ret := C.git_submodule_add_setup(&sub.ptr, c.repo.ptr, curl, cpath, cbool(use_git_link))
|
||||||
if ret < 0 {
|
if ret < 0 {
|
||||||
return nil, MakeGitError(ret)
|
return nil, MakeGitError(ret)
|
||||||
}
|
}
|
||||||
|
@ -173,7 +177,7 @@ func (sub *Submodule) Url() string {
|
||||||
return C.GoString(n)
|
return C.GoString(n)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (o *Repository) SubmoduleSetUrl(submodule, url string) error {
|
func (c *SubmoduleCollection) SetUrl(submodule, url string) error {
|
||||||
csubmodule := C.CString(submodule)
|
csubmodule := C.CString(submodule)
|
||||||
defer C.free(unsafe.Pointer(csubmodule))
|
defer C.free(unsafe.Pointer(csubmodule))
|
||||||
curl := C.CString(url)
|
curl := C.CString(url)
|
||||||
|
@ -182,7 +186,7 @@ func (o *Repository) SubmoduleSetUrl(submodule, url string) error {
|
||||||
runtime.LockOSThread()
|
runtime.LockOSThread()
|
||||||
defer runtime.UnlockOSThread()
|
defer runtime.UnlockOSThread()
|
||||||
|
|
||||||
ret := C.git_submodule_set_url(o.ptr, csubmodule, curl)
|
ret := C.git_submodule_set_url(c.repo.ptr, csubmodule, curl)
|
||||||
if ret < 0 {
|
if ret < 0 {
|
||||||
return MakeGitError(ret)
|
return MakeGitError(ret)
|
||||||
}
|
}
|
||||||
|
@ -218,14 +222,14 @@ func (sub *Submodule) Ignore() SubmoduleIgnore {
|
||||||
return SubmoduleIgnore(o)
|
return SubmoduleIgnore(o)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (o *Repository) SubmoduleSetIgnore(submodule string, ignore SubmoduleIgnore) error {
|
func (c *SubmoduleCollection) SetIgnore(submodule string, ignore SubmoduleIgnore) error {
|
||||||
csubmodule := C.CString(submodule)
|
csubmodule := C.CString(submodule)
|
||||||
defer C.free(unsafe.Pointer(csubmodule))
|
defer C.free(unsafe.Pointer(csubmodule))
|
||||||
|
|
||||||
runtime.LockOSThread()
|
runtime.LockOSThread()
|
||||||
defer runtime.UnlockOSThread()
|
defer runtime.UnlockOSThread()
|
||||||
|
|
||||||
ret := C.git_submodule_set_ignore(o.ptr, csubmodule, C.git_submodule_ignore_t(ignore))
|
ret := C.git_submodule_set_ignore(c.repo.ptr, csubmodule, C.git_submodule_ignore_t(ignore))
|
||||||
if ret < 0 {
|
if ret < 0 {
|
||||||
return MakeGitError(ret)
|
return MakeGitError(ret)
|
||||||
}
|
}
|
||||||
|
@ -238,14 +242,14 @@ func (sub *Submodule) UpdateStrategy() SubmoduleUpdate {
|
||||||
return SubmoduleUpdate(o)
|
return SubmoduleUpdate(o)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (o *Repository) SubmoduleSetUpdate(submodule string, update SubmoduleUpdate) error {
|
func (c *SubmoduleCollection) SetUpdate(submodule string, update SubmoduleUpdate) error {
|
||||||
csubmodule := C.CString(submodule)
|
csubmodule := C.CString(submodule)
|
||||||
defer C.free(unsafe.Pointer(csubmodule))
|
defer C.free(unsafe.Pointer(csubmodule))
|
||||||
|
|
||||||
runtime.LockOSThread()
|
runtime.LockOSThread()
|
||||||
defer runtime.UnlockOSThread()
|
defer runtime.UnlockOSThread()
|
||||||
|
|
||||||
ret := C.git_submodule_set_update(o.ptr, csubmodule, C.git_submodule_update_t(update))
|
ret := C.git_submodule_set_update(c.repo.ptr, csubmodule, C.git_submodule_update_t(update))
|
||||||
if ret < 0 {
|
if ret < 0 {
|
||||||
return MakeGitError(ret)
|
return MakeGitError(ret)
|
||||||
}
|
}
|
||||||
|
@ -257,14 +261,14 @@ func (sub *Submodule) FetchRecurseSubmodules() SubmoduleRecurse {
|
||||||
return SubmoduleRecurse(C.git_submodule_fetch_recurse_submodules(sub.ptr))
|
return SubmoduleRecurse(C.git_submodule_fetch_recurse_submodules(sub.ptr))
|
||||||
}
|
}
|
||||||
|
|
||||||
func (o *Repository) SubmoduleSetFetchRecurseSubmodules(submodule string, recurse SubmoduleRecurse) error {
|
func (c *SubmoduleCollection) SetFetchRecurseSubmodules(submodule string, recurse SubmoduleRecurse) error {
|
||||||
csubmodule := C.CString(submodule)
|
csubmodule := C.CString(submodule)
|
||||||
defer C.free(unsafe.Pointer(csubmodule))
|
defer C.free(unsafe.Pointer(csubmodule))
|
||||||
|
|
||||||
runtime.LockOSThread()
|
runtime.LockOSThread()
|
||||||
defer runtime.UnlockOSThread()
|
defer runtime.UnlockOSThread()
|
||||||
|
|
||||||
ret := C.git_submodule_set_fetch_recurse_submodules(o.ptr, csubmodule, C.git_submodule_recurse_t(recurse))
|
ret := C.git_submodule_set_fetch_recurse_submodules(c.repo.ptr, csubmodule, C.git_submodule_recurse_t(recurse))
|
||||||
if ret < 0 {
|
if ret < 0 {
|
||||||
return MakeGitError(C.int(ret))
|
return MakeGitError(C.int(ret))
|
||||||
}
|
}
|
||||||
|
|
|
@ -10,11 +10,11 @@ func TestSubmoduleForeach(t *testing.T) {
|
||||||
|
|
||||||
seedTestRepo(t, repo)
|
seedTestRepo(t, repo)
|
||||||
|
|
||||||
_, err := repo.AddSubmodule("http://example.org/submodule", "submodule", true)
|
_, err := repo.Submodules.Add("http://example.org/submodule", "submodule", true)
|
||||||
checkFatal(t, err)
|
checkFatal(t, err)
|
||||||
|
|
||||||
i := 0
|
i := 0
|
||||||
err = repo.ForeachSubmodule(func(sub *Submodule, name string) int {
|
err = repo.Submodules.Foreach(func(sub *Submodule, name string) int {
|
||||||
i++
|
i++
|
||||||
return 0
|
return 0
|
||||||
})
|
})
|
||||||
|
|
Loading…
Reference in New Issue