diff options
-rw-r--r-- | commands/env.go | 4 | ||||
-rw-r--r-- | entity/dag/example_test.go | 5 | ||||
-rw-r--r-- | misc/random_bugs/cmd/main.go | 4 | ||||
-rw-r--r-- | repository/gogit.go | 40 | ||||
-rw-r--r-- | repository/gogit_test.go | 6 | ||||
-rw-r--r-- | repository/gogit_testing.go | 6 |
6 files changed, 43 insertions, 22 deletions
diff --git a/commands/env.go b/commands/env.go index ac7b789a..52be4225 100644 --- a/commands/env.go +++ b/commands/env.go @@ -14,6 +14,8 @@ import ( "github.com/MichaelMure/git-bug/util/interrupt" ) +const gitBugApplicationName = "git-bug" + // Env is the environment of a command type Env struct { repo repository.ClockedRepo @@ -54,7 +56,7 @@ func loadRepo(env *Env) func(*cobra.Command, []string) error { return fmt.Errorf("unable to get the current working directory: %q", err) } - env.repo, err = repository.OpenGoGitRepo(cwd, []repository.ClockLoader{bug.ClockLoader}) + env.repo, err = repository.OpenGoGitRepo(cwd, gitBugApplicationName, []repository.ClockLoader{bug.ClockLoader}) if err == repository.ErrNotARepo { return fmt.Errorf("%s must be run from within a git repo", rootCommandName) } diff --git a/entity/dag/example_test.go b/entity/dag/example_test.go index d034e59d..7290b4d4 100644 --- a/entity/dag/example_test.go +++ b/entity/dag/example_test.go @@ -336,14 +336,15 @@ func Read(repo repository.ClockedRepo, id entity.Id) (*ProjectConfig, error) { } func Example_entity() { + const gitBugApplicationName = "git-bug" // Note: this example ignore errors for readability // Note: variable names get a little confusing as we are simulating both side in the same function // Let's start by defining two git repository and connecting them as remote repoRenePath, _ := os.MkdirTemp("", "") repoIsaacPath, _ := os.MkdirTemp("", "") - repoRene, _ := repository.InitGoGitRepo(repoRenePath) - repoIsaac, _ := repository.InitGoGitRepo(repoIsaacPath) + repoRene, _ := repository.InitGoGitRepo(repoRenePath, gitBugApplicationName) + repoIsaac, _ := repository.InitGoGitRepo(repoIsaacPath, gitBugApplicationName) _ = repoRene.AddRemote("origin", repoIsaacPath) _ = repoIsaac.AddRemote("origin", repoRenePath) diff --git a/misc/random_bugs/cmd/main.go b/misc/random_bugs/cmd/main.go index 010ae6d1..b017439e 100644 --- a/misc/random_bugs/cmd/main.go +++ b/misc/random_bugs/cmd/main.go @@ -11,6 +11,8 @@ import ( // This program will randomly generate a collection of bugs in the repository // of the current path func main() { + const gitBugApplicationName = "git-bug" + dir, err := os.Getwd() if err != nil { panic(err) @@ -20,7 +22,7 @@ func main() { bug.ClockLoader, } - repo, err := repository.OpenGoGitRepo(dir, loaders) + repo, err := repository.OpenGoGitRepo(dir, gitBugApplicationName, loaders) if err != nil { panic(err) } 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) } |