From e1238b5994f160a72d8723f7e680a308391a99d9 Mon Sep 17 00:00:00 2001 From: Axel Wagner Date: Tue, 14 May 2013 21:34:07 +0200 Subject: [PATCH] Implement git_repository_discover --- git.go | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) diff --git a/git.go b/git.go index 45806c2..e11f676 100644 --- a/git.go +++ b/git.go @@ -9,6 +9,7 @@ import "C" import ( "bytes" "unsafe" + "strings" ) const ( @@ -122,3 +123,29 @@ func ucbool(b bool) C.uint { } return C.uint(0) } + +func Discover(start string, across_fs bool, ceiling_dirs []string) (string, error) { + ceildirs := C.CString(strings.Join(ceiling_dirs, string(C.GIT_PATH_LIST_SEPARATOR))) + defer C.free(unsafe.Pointer(ceildirs)) + + cstart := C.CString(start) + defer C.free(unsafe.Pointer(cstart)) + + retpath := (*C.char)(C.malloc(C.GIT_PATH_MAX)) + defer C.free(unsafe.Pointer(retpath)) + + var acrfs C.int + if across_fs { + acrfs = 1 + } else { + acrfs = 0 + } + + r := C.git_repository_discover(retpath, C.GIT_PATH_MAX, cstart, acrfs, ceildirs) + + if r == 0 { + return C.GoString(retpath), nil + } + + return "", LastError() +}