Skip to content

Commit

Permalink
Merge pull request #808 from ricci2511/plainopen-tilde-path-fix
Browse files Browse the repository at this point in the history
*: Handle paths starting with tilde
  • Loading branch information
pjbgf committed Jul 8, 2023
2 parents 7e143ce + a9a658e commit dc17aae
Show file tree
Hide file tree
Showing 3 changed files with 45 additions and 2 deletions.
20 changes: 20 additions & 0 deletions common_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -151,6 +151,26 @@ func (s *BaseSuite) TemporalDir() (path string, clean func()) {
return
}

func (s *BaseSuite) TemporalHomeDir() (path string, clean func()) {
home, err := os.UserHomeDir()
if err != nil {
panic(err)
}

fs := osfs.New(home)
relPath, err := util.TempDir(fs, "", "")
if err != nil {
panic(err)
}

path = fs.Join(fs.Root(), relPath)
clean = func() {
_ = util.RemoveAll(fs, relPath)
}

return
}

func (s *BaseSuite) TemporalFilesystem() (fs billy.Filesystem, clean func()) {
fs = osfs.New(os.TempDir())
path, err := util.TempDir(fs, "", "")
Expand Down
12 changes: 10 additions & 2 deletions repository.go
Original file line number Diff line number Diff line change
Expand Up @@ -322,8 +322,16 @@ func PlainOpenWithOptions(path string, o *PlainOpenOptions) (*Repository, error)
}

func dotGitToOSFilesystems(path string, detect bool) (dot, wt billy.Filesystem, err error) {
if path, err = filepath.Abs(path); err != nil {
return nil, nil, err
if strings.HasPrefix(path, "~/") {
home, err := os.UserHomeDir()
if err != nil {
return nil, nil, err
}
path = filepath.Join(home, path[2:])
} else {
if path, err = filepath.Abs(path); err != nil {
return nil, nil, err
}
}

var fs billy.Filesystem
Expand Down
15 changes: 15 additions & 0 deletions repository_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -543,6 +543,21 @@ func (s *RepositorySuite) TestPlainOpen(c *C) {
c.Assert(r, NotNil)
}

func (s *RepositorySuite) TestPlainOpenTildePath(c *C) {
dir, clean := s.TemporalHomeDir()
defer clean()

r, err := PlainInit(dir, false)
c.Assert(err, IsNil)
c.Assert(r, NotNil)

path := strings.Replace(dir, strings.Split(dir, ".tmp")[0], "~/", 1)

r, err = PlainOpen(path)
c.Assert(err, IsNil)
c.Assert(r, NotNil)
}

func (s *RepositorySuite) TestPlainOpenBare(c *C) {
dir, clean := s.TemporalDir()
defer clean()
Expand Down

0 comments on commit dc17aae

Please sign in to comment.