summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--repository.go36
-rw-r--r--repository_test.go11
2 files changed, 46 insertions, 1 deletions
diff --git a/repository.go b/repository.go
index a6eb7f1..cb82fc3 100644
--- a/repository.go
+++ b/repository.go
@@ -739,5 +739,39 @@ func (r *Repository) RemoveMessage() error {
if cErr < 0 {
return MakeGitError(cErr)
}
- return nil
+ return nil
+}
+
+type RepositoryItem int
+
+const (
+ RepositoryItemGitDir RepositoryItem = C.GIT_REPOSITORY_ITEM_GITDIR
+ RepositoryItemWorkDir RepositoryItem = C.GIT_REPOSITORY_ITEM_WORKDIR
+ RepositoryItemCommonDir RepositoryItem = C.GIT_REPOSITORY_ITEM_COMMONDIR
+ RepositoryItemIndex RepositoryItem = C.GIT_REPOSITORY_ITEM_INDEX
+ RepositoryItemObjects RepositoryItem = C.GIT_REPOSITORY_ITEM_OBJECTS
+ RepositoryItemRefs RepositoryItem = C.GIT_REPOSITORY_ITEM_REFS
+ RepositoryItemPackedRefs RepositoryItem = C.GIT_REPOSITORY_ITEM_PACKED_REFS
+ RepositoryItemRemotes RepositoryItem = C.GIT_REPOSITORY_ITEM_REMOTES
+ RepositoryItemConfig RepositoryItem = C.GIT_REPOSITORY_ITEM_CONFIG
+ RepositoryItemInfo RepositoryItem = C.GIT_REPOSITORY_ITEM_INFO
+ RepositoryItemHooks RepositoryItem = C.GIT_REPOSITORY_ITEM_HOOKS
+ RepositoryItemLogs RepositoryItem = C.GIT_REPOSITORY_ITEM_LOGS
+ RepositoryItemModules RepositoryItem = C.GIT_REPOSITORY_ITEM_MODULES
+ RepositoryItemWorkTrees RepositoryItem = C.GIT_REPOSITORY_ITEM_WORKTREES
+)
+
+func (r *Repository) ItemPath(item RepositoryItem) (string, error) {
+ var c_buf C.git_buf
+ defer C.git_buf_dispose(&c_buf)
+
+ runtime.LockOSThread()
+ defer runtime.UnlockOSThread()
+
+ ret := C.git_repository_item_path(&c_buf, r.ptr, C.git_repository_item_t(item))
+ runtime.KeepAlive(r)
+ if ret < 0 {
+ return "", MakeGitError(ret)
+ }
+ return C.GoString(c_buf.ptr), nil
}
diff --git a/repository_test.go b/repository_test.go
index 5a0f920..e403aa9 100644
--- a/repository_test.go
+++ b/repository_test.go
@@ -92,3 +92,14 @@ func TestRepositorySetConfig(t *testing.T) {
t.Fatal("result must be true")
}
}
+
+func TestRepositoryItemPath(t *testing.T) {
+ repo := createTestRepo(t)
+ defer cleanupTestRepo(t, repo)
+
+ gitDir, err := repo.ItemPath(RepositoryItemGitDir)
+ checkFatal(t, err)
+ if gitDir == "" {
+ t.Error("expected not empty gitDir")
+ }
+}