From 1107c6824f887423be59b1ae633553480304b70c Mon Sep 17 00:00:00 2001 From: Patrick Steinhardt Date: Wed, 28 Jan 2015 15:03:58 +0100 Subject: [PATCH 1/2] Add test triggering ForeachSubmodule panic. --- submodule_test.go | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) create mode 100644 submodule_test.go diff --git a/submodule_test.go b/submodule_test.go new file mode 100644 index 0000000..1c8f471 --- /dev/null +++ b/submodule_test.go @@ -0,0 +1,24 @@ +package git + +import ( + "testing" +) + +func TestSubmoduleForeach(t *testing.T) { + repo := createTestRepo(t) + seedTestRepo(t, repo) + + _, err := repo.AddSubmodule("http://example.org/submodule", "submodule", true) + checkFatal(t, err) + + i := 0 + err = repo.ForeachSubmodule(func(sub *Submodule, name string) int { + i++ + return 0 + }) + checkFatal(t, err) + + if i != 1 { + t.Fatalf("expected one submodule found but got %i", i) + } +} -- 2.45.2 From 2e481dbc7909beefd1afe199ba95b995819866cd Mon Sep 17 00:00:00 2001 From: Patrick Steinhardt Date: Wed, 28 Jan 2015 14:38:42 +0100 Subject: [PATCH 2/2] Fix ForeachSubmodule panicing. As the SubmoduleVisitor function is called from inside libgit2 we cannot use Go types in its signature. Fix by using C types instead. --- submodule.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/submodule.go b/submodule.go index f3e9e83..6923c61 100644 --- a/submodule.go +++ b/submodule.go @@ -97,10 +97,10 @@ func (repo *Repository) LookupSubmodule(name string) (*Submodule, error) { type SubmoduleCbk func(sub *Submodule, name string) int //export SubmoduleVisitor -func SubmoduleVisitor(csub unsafe.Pointer, name string, cfct unsafe.Pointer) int { +func SubmoduleVisitor(csub unsafe.Pointer, name *C.char, cfct unsafe.Pointer) C.int { sub := &Submodule{(*C.git_submodule)(csub)} fct := *(*SubmoduleCbk)(cfct) - return fct(sub, name) + return (C.int)(fct(sub, C.GoString(name))) } func (repo *Repository) ForeachSubmodule(cbk SubmoduleCbk) error { -- 2.45.2