Skip to content
This repository was archived by the owner on Sep 11, 2020. It is now read-only.

Commit c256136

Browse files
authored
Merge pull request #513 from mcuadros/worktree-fs
worktree: expose underlying filesystem
2 parents 6b8d9f6 + ab590eb commit c256136

9 files changed

+91
-89
lines changed

repository.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -844,7 +844,7 @@ func (r *Repository) Worktree() (*Worktree, error) {
844844
return nil, ErrIsBareRepository
845845
}
846846

847-
return &Worktree{r: r, fs: r.wt}, nil
847+
return &Worktree{r: r, Filesystem: r.wt}, nil
848848
}
849849

850850
// ResolveRevision resolves revision to corresponding hash.

repository_test.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -1138,7 +1138,7 @@ func (s *RepositorySuite) TestWorktree(c *C) {
11381138
r, _ := Init(memory.NewStorage(), def)
11391139
w, err := r.Worktree()
11401140
c.Assert(err, IsNil)
1141-
c.Assert(w.fs, Equals, def)
1141+
c.Assert(w.Filesystem, Equals, def)
11421142
}
11431143

11441144
func (s *RepositorySuite) TestWorktreeBare(c *C) {

submodule.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -115,7 +115,7 @@ func (s *Submodule) Repository() (*Repository, error) {
115115
}
116116

117117
var worktree billy.Filesystem
118-
if worktree, err = s.w.fs.Chroot(s.c.Path); err != nil {
118+
if worktree, err = s.w.Filesystem.Chroot(s.c.Path); err != nil {
119119
return nil, err
120120
}
121121

submodule_test.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -128,7 +128,7 @@ func (s *SubmoduleSuite) TestUpdateWithRecursion(c *C) {
128128

129129
c.Assert(err, IsNil)
130130

131-
fs := s.Worktree.fs
131+
fs := s.Worktree.Filesystem
132132
_, err = fs.Stat(fs.Join("itself", "basic", "LICENSE"))
133133
c.Assert(err, IsNil)
134134
}

worktree.go

+12-10
Original file line numberDiff line numberDiff line change
@@ -30,8 +30,10 @@ var (
3030

3131
// Worktree represents a git worktree.
3232
type Worktree struct {
33-
r *Repository
34-
fs billy.Filesystem
33+
// Filesystem underlying filesystem.
34+
Filesystem billy.Filesystem
35+
36+
r *Repository
3537
}
3638

3739
// Pull incorporates changes from a remote repository into the current branch.
@@ -398,13 +400,13 @@ func (w *Worktree) checkoutChangeSubmodule(name string,
398400
return err
399401
}
400402

401-
if err := w.fs.MkdirAll(name, mode); err != nil {
403+
if err := w.Filesystem.MkdirAll(name, mode); err != nil {
402404
return err
403405
}
404406

405407
return w.addIndexFromTreeEntry(name, e, idx)
406408
case merkletrie.Delete:
407-
if err := rmFileAndDirIfEmpty(w.fs, name); err != nil {
409+
if err := rmFileAndDirIfEmpty(w.Filesystem, name); err != nil {
408410
return err
409411
}
410412

@@ -428,7 +430,7 @@ func (w *Worktree) checkoutChangeRegularFile(name string,
428430

429431
// to apply perm changes the file is deleted, billy doesn't implement
430432
// chmod
431-
if err := w.fs.Remove(name); err != nil {
433+
if err := w.Filesystem.Remove(name); err != nil {
432434
return err
433435
}
434436

@@ -445,7 +447,7 @@ func (w *Worktree) checkoutChangeRegularFile(name string,
445447

446448
return w.addIndexFromFile(name, e.Hash, idx)
447449
case merkletrie.Delete:
448-
if err := rmFileAndDirIfEmpty(w.fs, name); err != nil {
450+
if err := rmFileAndDirIfEmpty(w.Filesystem, name); err != nil {
449451
return err
450452
}
451453

@@ -472,7 +474,7 @@ func (w *Worktree) checkoutFile(f *object.File) (err error) {
472474

473475
defer ioutil.CheckClose(from, &err)
474476

475-
to, err := w.fs.OpenFile(f.Name, os.O_WRONLY|os.O_CREATE|os.O_TRUNC, mode.Perm())
477+
to, err := w.Filesystem.OpenFile(f.Name, os.O_WRONLY|os.O_CREATE|os.O_TRUNC, mode.Perm())
476478
if err != nil {
477479
return
478480
}
@@ -496,7 +498,7 @@ func (w *Worktree) checkoutFileSymlink(f *object.File) (err error) {
496498
return
497499
}
498500

499-
err = w.fs.Symlink(string(bytes), f.Name)
501+
err = w.Filesystem.Symlink(string(bytes), f.Name)
500502
return
501503
}
502504

@@ -511,7 +513,7 @@ func (w *Worktree) addIndexFromTreeEntry(name string, f *object.TreeEntry, idx *
511513
}
512514

513515
func (w *Worktree) addIndexFromFile(name string, h plumbing.Hash, idx *index.Index) error {
514-
fi, err := w.fs.Lstat(name)
516+
fi, err := w.Filesystem.Lstat(name)
515517
if err != nil {
516518
return err
517519
}
@@ -620,7 +622,7 @@ func (w *Worktree) newSubmodule(fromModules, fromConfig *config.Submodule) *Subm
620622
}
621623

622624
func (w *Worktree) readGitmodulesFile() (*config.Modules, error) {
623-
f, err := w.fs.Open(gitmodulesFile)
625+
f, err := w.Filesystem.Open(gitmodulesFile)
624626
if err != nil {
625627
if os.IsNotExist(err) {
626628
return nil, nil

worktree_commit.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@ func (w *Worktree) Commit(msg string, opts *CommitOptions) (plumbing.Hash, error
3232
}
3333

3434
h := &buildTreeHelper{
35-
fs: w.fs,
35+
fs: w.Filesystem,
3636
s: w.r.Storer,
3737
}
3838

worktree_commit_test.go

+4-4
Original file line numberDiff line numberDiff line change
@@ -54,8 +54,8 @@ func (s *WorktreeSuite) TestCommitParent(c *C) {
5454

5555
fs := memfs.New()
5656
w := &Worktree{
57-
r: s.Repository,
58-
fs: fs,
57+
r: s.Repository,
58+
Filesystem: fs,
5959
}
6060

6161
err := w.Checkout(&CheckoutOptions{})
@@ -78,8 +78,8 @@ func (s *WorktreeSuite) TestCommitAll(c *C) {
7878

7979
fs := memfs.New()
8080
w := &Worktree{
81-
r: s.Repository,
82-
fs: fs,
81+
r: s.Repository,
82+
Filesystem: fs,
8383
}
8484

8585
err := w.Checkout(&CheckoutOptions{})

worktree_status.go

+10-10
Original file line numberDiff line numberDiff line change
@@ -116,7 +116,7 @@ func (w *Worktree) diffStagingWithWorktree() (merkletrie.Changes, error) {
116116
return nil, err
117117
}
118118

119-
to := filesystem.NewRootNode(w.fs, submodules)
119+
to := filesystem.NewRootNode(w.Filesystem, submodules)
120120
res, err := merkletrie.DiffTree(from, to, diffTreeIsEquals)
121121
if err == nil {
122122
res = w.excludeIgnoredChanges(res)
@@ -125,7 +125,7 @@ func (w *Worktree) diffStagingWithWorktree() (merkletrie.Changes, error) {
125125
}
126126

127127
func (w *Worktree) excludeIgnoredChanges(changes merkletrie.Changes) merkletrie.Changes {
128-
patterns, err := gitignore.ReadPatterns(w.fs, nil)
128+
patterns, err := gitignore.ReadPatterns(w.Filesystem, nil)
129129
if err != nil || len(patterns) == 0 {
130130
return changes
131131
}
@@ -251,7 +251,7 @@ func (w *Worktree) Add(path string) (plumbing.Hash, error) {
251251
}
252252

253253
func (w *Worktree) copyFileToStorage(path string) (hash plumbing.Hash, err error) {
254-
fi, err := w.fs.Lstat(path)
254+
fi, err := w.Filesystem.Lstat(path)
255255
if err != nil {
256256
return plumbing.ZeroHash, err
257257
}
@@ -281,7 +281,7 @@ func (w *Worktree) copyFileToStorage(path string) (hash plumbing.Hash, err error
281281
}
282282

283283
func (w *Worktree) fillEncodedObjectFromFile(dst io.Writer, path string, fi os.FileInfo) (err error) {
284-
src, err := w.fs.Open(path)
284+
src, err := w.Filesystem.Open(path)
285285
if err != nil {
286286
return err
287287
}
@@ -296,7 +296,7 @@ func (w *Worktree) fillEncodedObjectFromFile(dst io.Writer, path string, fi os.F
296296
}
297297

298298
func (w *Worktree) fillEncodedObjectFromSymlink(dst io.Writer, path string, fi os.FileInfo) error {
299-
target, err := w.fs.Readlink(path)
299+
target, err := w.Filesystem.Readlink(path)
300300
if err != nil {
301301
return err
302302
}
@@ -337,7 +337,7 @@ func (w *Worktree) doAddFileToIndex(idx *index.Index, filename string, h plumbin
337337
}
338338

339339
func (w *Worktree) doUpdateFileToIndex(e *index.Entry, filename string, h plumbing.Hash) error {
340-
info, err := w.fs.Lstat(filename)
340+
info, err := w.Filesystem.Lstat(filename)
341341
if err != nil {
342342
return err
343343
}
@@ -382,7 +382,7 @@ func (w *Worktree) deleteFromIndex(path string) (plumbing.Hash, error) {
382382
}
383383

384384
func (w *Worktree) deleteFromFilesystem(path string) error {
385-
err := w.fs.Remove(path)
385+
err := w.Filesystem.Remove(path)
386386
if os.IsNotExist(err) {
387387
return nil
388388
}
@@ -393,11 +393,11 @@ func (w *Worktree) deleteFromFilesystem(path string) error {
393393
// Move moves or rename a file in the worktree and the index, directories are
394394
// not supported.
395395
func (w *Worktree) Move(from, to string) (plumbing.Hash, error) {
396-
if _, err := w.fs.Lstat(from); err != nil {
396+
if _, err := w.Filesystem.Lstat(from); err != nil {
397397
return plumbing.ZeroHash, err
398398
}
399399

400-
if _, err := w.fs.Lstat(to); err == nil {
400+
if _, err := w.Filesystem.Lstat(to); err == nil {
401401
return plumbing.ZeroHash, ErrDestinationExists
402402
}
403403

@@ -406,7 +406,7 @@ func (w *Worktree) Move(from, to string) (plumbing.Hash, error) {
406406
return plumbing.ZeroHash, err
407407
}
408408

409-
if err := w.fs.Rename(from, to); err != nil {
409+
if err := w.Filesystem.Rename(from, to); err != nil {
410410
return hash, err
411411
}
412412

0 commit comments

Comments
 (0)