aboutsummaryrefslogtreecommitdiffstats
path: root/repository
diff options
context:
space:
mode:
authorSteve Moyer <smoyer1@selesy.com>2022-05-25 07:55:28 -0400
committerSteve Moyer <smoyer1@selesy.com>2022-05-25 07:55:28 -0400
commitb42fae382af0a43b0d51fb312abd4ff55df43877 (patch)
treec1f46b2fadd29d9a2890ecc1b9991e367aac86f2 /repository
parent650c11dcb68bfe00e2d399c5e1d337cae9c1bfeb (diff)
downloadgit-bug-b42fae382af0a43b0d51fb312abd4ff55df43877.tar.gz
feat: make local storage configurable
Diffstat (limited to 'repository')
-rw-r--r--repository/gogit.go40
-rw-r--r--repository/gogit_test.go6
-rw-r--r--repository/gogit_testing.go6
3 files changed, 34 insertions, 18 deletions
diff --git a/repository/gogit.go b/repository/gogit.go
index 54677902..af1b9fa4 100644
--- a/repository/gogit.go
+++ b/repository/gogit.go
@@ -26,6 +26,7 @@ import (
)
const clockPath = "clocks"
+const indexPath = "indexes"
var _ ClockedRepo = &GoGitRepo{}
var _ TestedRepo = &GoGitRepo{}
@@ -49,8 +50,11 @@ type GoGitRepo struct {
localStorage billy.Filesystem
}
-// OpenGoGitRepo open an already existing repo at the given path
-func OpenGoGitRepo(path string, clockLoaders []ClockLoader) (*GoGitRepo, error) {
+// OpenGoGitRepo opens an already existing repo at the given path and with
+// the specified application name. Given a repository path of "~/myrepo"
+// and an application name of "git-bug", local storage for the application
+// will be configured at "~/myrepo/.git/git-bug".
+func OpenGoGitRepo(path, application string, clockLoaders []ClockLoader) (*GoGitRepo, error) {
path, err := detectGitPath(path)
if err != nil {
return nil, err
@@ -72,7 +76,7 @@ func OpenGoGitRepo(path string, clockLoaders []ClockLoader) (*GoGitRepo, error)
clocks: make(map[string]lamport.Clock),
indexes: make(map[string]bleve.Index),
keyring: k,
- localStorage: osfs.New(filepath.Join(path, "git-bug")),
+ localStorage: osfs.New(filepath.Join(path, application)),
}
for _, loader := range clockLoaders {
@@ -94,8 +98,11 @@ func OpenGoGitRepo(path string, clockLoaders []ClockLoader) (*GoGitRepo, error)
return repo, nil
}
-// InitGoGitRepo create a new empty git repo at the given path
-func InitGoGitRepo(path string) (*GoGitRepo, error) {
+// InitGoGitRepo creates a new empty git repo at the given path and with
+// the specified application name. Given a repository path of "~/myrepo"
+// and an application name of "git-bug", local storage for the application
+// will be configured at "~/myrepo/.git/git-bug".
+func InitGoGitRepo(path, application string) (*GoGitRepo, error) {
r, err := gogit.PlainInit(path, false)
if err != nil {
return nil, err
@@ -112,12 +119,15 @@ func InitGoGitRepo(path string) (*GoGitRepo, error) {
clocks: make(map[string]lamport.Clock),
indexes: make(map[string]bleve.Index),
keyring: k,
- localStorage: osfs.New(filepath.Join(path, ".git", "git-bug")),
+ localStorage: osfs.New(filepath.Join(path, ".git", application)),
}, nil
}
-// InitBareGoGitRepo create a new --bare empty git repo at the given path
-func InitBareGoGitRepo(path string) (*GoGitRepo, error) {
+// InitBareGoGitRepo creates a new --bare empty git repo at the given path
+// and with the specified application name. Given a repository path of
+// "~/myrepo" and an application name of "git-bug", local storage for the
+// application will be configured at "~/myrepo/.git/git-bug".
+func InitBareGoGitRepo(path, application string) (*GoGitRepo, error) {
r, err := gogit.PlainInit(path, true)
if err != nil {
return nil, err
@@ -134,7 +144,7 @@ func InitBareGoGitRepo(path string) (*GoGitRepo, error) {
clocks: make(map[string]lamport.Clock),
indexes: make(map[string]bleve.Index),
keyring: k,
- localStorage: osfs.New(filepath.Join(path, "git-bug")),
+ localStorage: osfs.New(filepath.Join(path, application)),
}, nil
}
@@ -295,7 +305,8 @@ func (repo *GoGitRepo) GetRemotes() (map[string]string, error) {
return result, nil
}
-// LocalStorage return a billy.Filesystem giving access to $RepoPath/.git/git-bug
+// LocalStorage returns a billy.Filesystem giving access to
+// $RepoPath/.git/$ApplicationName.
func (repo *GoGitRepo) LocalStorage() billy.Filesystem {
return repo.localStorage
}
@@ -309,7 +320,8 @@ func (repo *GoGitRepo) GetBleveIndex(name string) (bleve.Index, error) {
return index, nil
}
- path := filepath.Join(repo.path, "git-bug", "indexes", name)
+ // path := filepath.Join(repo.path, "git-bug", "indexes", name)
+ path := filepath.Join(repo.localStorage.Root(), indexPath, name)
index, err := bleve.Open(path)
if err == nil {
@@ -340,7 +352,8 @@ func (repo *GoGitRepo) ClearBleveIndex(name string) error {
repo.indexesMutex.Lock()
defer repo.indexesMutex.Unlock()
- path := filepath.Join(repo.path, "git-bug", "indexes", name)
+ // path := filepath.Join(repo.path, "git-bug", "indexes", name)
+ path := filepath.Join(repo.localStorage.Root(), indexPath, name)
err := os.RemoveAll(path)
if err != nil {
@@ -781,7 +794,8 @@ func (repo *GoGitRepo) AllClocks() (map[string]lamport.Clock, error) {
result := make(map[string]lamport.Clock)
- files, err := ioutil.ReadDir(filepath.Join(repo.path, "git-bug", clockPath))
+ // files, err := ioutil.ReadDir(filepath.Join(repo.path, "git-bug", clockPath))
+ files, err := ioutil.ReadDir(filepath.Join(repo.localStorage.Root(), clockPath))
if os.IsNotExist(err) {
return nil, nil
}
diff --git a/repository/gogit_test.go b/repository/gogit_test.go
index a2bb49b9..941b563a 100644
--- a/repository/gogit_test.go
+++ b/repository/gogit_test.go
@@ -17,7 +17,7 @@ func TestNewGoGitRepo(t *testing.T) {
require.NoError(t, err)
defer os.RemoveAll(plainRoot)
- _, err = InitGoGitRepo(plainRoot)
+ _, err = InitGoGitRepo(plainRoot, testApplicationName)
require.NoError(t, err)
plainGitDir := filepath.Join(plainRoot, ".git")
@@ -26,7 +26,7 @@ func TestNewGoGitRepo(t *testing.T) {
require.NoError(t, err)
defer os.RemoveAll(bareRoot)
- _, err = InitBareGoGitRepo(bareRoot)
+ _, err = InitBareGoGitRepo(bareRoot, testApplicationName)
require.NoError(t, err)
bareGitDir := bareRoot
@@ -52,7 +52,7 @@ func TestNewGoGitRepo(t *testing.T) {
}
for i, tc := range tests {
- r, err := OpenGoGitRepo(tc.inPath, nil)
+ r, err := OpenGoGitRepo(tc.inPath, testApplicationName, nil)
if tc.err {
require.Error(t, err, i)
diff --git a/repository/gogit_testing.go b/repository/gogit_testing.go
index cad776b3..f80f62c0 100644
--- a/repository/gogit_testing.go
+++ b/repository/gogit_testing.go
@@ -7,6 +7,8 @@ import (
"github.com/99designs/keyring"
)
+const testApplicationName = "git-bug"
+
// This is intended for testing only
func CreateGoGitTestRepo(bare bool) TestedRepo {
@@ -15,7 +17,7 @@ func CreateGoGitTestRepo(bare bool) TestedRepo {
log.Fatal(err)
}
- var creator func(string) (*GoGitRepo, error)
+ var creator func(string, string) (*GoGitRepo, error)
if bare {
creator = InitBareGoGitRepo
@@ -23,7 +25,7 @@ func CreateGoGitTestRepo(bare bool) TestedRepo {
creator = InitGoGitRepo
}
- repo, err := creator(dir)
+ repo, err := creator(dir, testApplicationName)
if err != nil {
log.Fatal(err)
}