From a4d202ed7b025331ee4a63ebc38f62519cee4750 Mon Sep 17 00:00:00 2001 From: Vladimir Buzuev <44682889+vladimir-buzuev@users.noreply.github.com> Date: Sat, 3 Apr 2021 16:52:34 -0700 Subject: [PATCH] Git repository item path (#757) add wrapper for `git_repository_item_path` --- repository.go | 36 +++++++++++++++++++++++++++++++++++- repository_test.go | 11 +++++++++++ 2 files changed, 46 insertions(+), 1 deletion(-) 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") + } +}