aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPaulo Gomes <pjbgf@linux.com>2023-09-15 17:56:55 +0100
committerGitHub <noreply@github.com>2023-09-15 17:56:55 +0100
commitc208b4d513d0e9537f2160cb6d33609c4aa01795 (patch)
treebf76313751ced493b4c298725d6eeaf567c05872
parente24e0f714c4ecaf086b5783f099a885e6a2c9a1a (diff)
parent644929ade3ac7c07c370be8065fa2ac6faf081be (diff)
downloadgo-git-c208b4d513d0e9537f2160cb6d33609c4aa01795.tar.gz
Merge pull request #782 from ThinkChaos/feat/plain-init-branch
git: add PlainInitOptions.Bare and allow using InitOptions with PlainInitWithOptions
-rw-r--r--options.go3
-rw-r--r--repository.go25
-rw-r--r--repository_test.go24
3 files changed, 40 insertions, 12 deletions
diff --git a/options.go b/options.go
index 757bdc8..c68bf2b 100644
--- a/options.go
+++ b/options.go
@@ -737,6 +737,9 @@ type PlainOpenOptions struct {
func (o *PlainOpenOptions) Validate() error { return nil }
type PlainInitOptions struct {
+ InitOptions
+ // Determines if the repository will have a worktree (non-bare) or not (bare).
+ Bare bool
ObjectFormat formatcfg.ObjectFormat
}
diff --git a/repository.go b/repository.go
index 3154ac0..013b53f 100644
--- a/repository.go
+++ b/repository.go
@@ -235,9 +235,19 @@ func CloneContext(
// if the repository will have worktree (non-bare) or not (bare), if the path
// is not empty ErrRepositoryAlreadyExists is returned.
func PlainInit(path string, isBare bool) (*Repository, error) {
+ return PlainInitWithOptions(path, &PlainInitOptions{
+ Bare: isBare,
+ })
+}
+
+func PlainInitWithOptions(path string, opts *PlainInitOptions) (*Repository, error) {
+ if opts == nil {
+ opts = &PlainInitOptions{}
+ }
+
var wt, dot billy.Filesystem
- if isBare {
+ if opts.Bare {
dot = osfs.New(path)
} else {
wt = osfs.New(path)
@@ -246,16 +256,7 @@ func PlainInit(path string, isBare bool) (*Repository, error) {
s := filesystem.NewStorage(dot, cache.NewObjectLRUDefault())
- return Init(s, wt)
-}
-
-func PlainInitWithOptions(path string, opts *PlainInitOptions) (*Repository, error) {
- wt := osfs.New(path)
- dot, _ := wt.Chroot(GitDirName)
-
- s := filesystem.NewStorage(dot, cache.NewObjectLRUDefault())
-
- r, err := Init(s, wt)
+ r, err := InitWithOptions(s, wt, opts.InitOptions)
if err != nil {
return nil, err
}
@@ -265,7 +266,7 @@ func PlainInitWithOptions(path string, opts *PlainInitOptions) (*Repository, err
return nil, err
}
- if opts != nil {
+ if opts.ObjectFormat != "" {
if opts.ObjectFormat == formatcfg.SHA256 && hash.CryptoType != crypto.SHA256 {
return nil, ErrSHA256NotSupported
}
diff --git a/repository_test.go b/repository_test.go
index 9e000a3..3154f1d 100644
--- a/repository_test.go
+++ b/repository_test.go
@@ -518,6 +518,30 @@ func (s *RepositorySuite) TestPlainInit(c *C) {
c.Assert(cfg.Core.IsBare, Equals, true)
}
+func (s *RepositorySuite) TestPlainInitWithOptions(c *C) {
+ dir, clean := s.TemporalDir()
+ defer clean()
+
+ r, err := PlainInitWithOptions(dir, &PlainInitOptions{
+ InitOptions: InitOptions{
+ DefaultBranch: "refs/heads/foo",
+ },
+ Bare: false,
+ })
+ c.Assert(err, IsNil)
+ c.Assert(r, NotNil)
+
+ cfg, err := r.Config()
+ c.Assert(err, IsNil)
+ c.Assert(cfg.Core.IsBare, Equals, false)
+
+ createCommit(c, r)
+
+ ref, err := r.Head()
+ c.Assert(err, IsNil)
+ c.Assert(ref.Name().String(), Equals, "refs/heads/foo")
+}
+
func (s *RepositorySuite) TestPlainInitAlreadyExists(c *C) {
dir, clean := s.TemporalDir()
defer clean()