aboutsummaryrefslogtreecommitdiffstats
path: root/vendor/github.com/spf13/afero/memmap.go
diff options
context:
space:
mode:
authordependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>2024-03-04 17:40:11 +0000
committerTaras Madan <tarasmadan@google.com>2024-03-04 18:34:55 +0000
commit5fc5366972c874b919f93165bb4ed4e2bcb7c350 (patch)
tree287c3361a0dee0c72af80d9a1a66714a06e98a62 /vendor/github.com/spf13/afero/memmap.go
parent1be5ce38a9059c356eb193a8c34d60d61c9fc31f (diff)
mod: bump github.com/golangci/golangci-lint from 1.55.2 to 1.56.2
Bumps [github.com/golangci/golangci-lint](https://github.com/golangci/golangci-lint) from 1.55.2 to 1.56.2. - [Release notes](https://github.com/golangci/golangci-lint/releases) - [Changelog](https://github.com/golangci/golangci-lint/blob/master/CHANGELOG.md) - [Commits](https://github.com/golangci/golangci-lint/compare/v1.55.2...v1.56.2) --- updated-dependencies: - dependency-name: github.com/golangci/golangci-lint dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] <support@github.com>
Diffstat (limited to 'vendor/github.com/spf13/afero/memmap.go')
-rw-r--r--vendor/github.com/spf13/afero/memmap.go68
1 files changed, 62 insertions, 6 deletions
diff --git a/vendor/github.com/spf13/afero/memmap.go b/vendor/github.com/spf13/afero/memmap.go
index d06975e71..d6c744e8d 100644
--- a/vendor/github.com/spf13/afero/memmap.go
+++ b/vendor/github.com/spf13/afero/memmap.go
@@ -15,9 +15,13 @@ package afero
import (
"fmt"
+ "io"
+
"log"
"os"
"path/filepath"
+
+ "sort"
"strings"
"sync"
"time"
@@ -43,7 +47,7 @@ func (m *MemMapFs) getData() map[string]*mem.FileData {
// Root should always exist, right?
// TODO: what about windows?
root := mem.CreateDir(FilePathSeparator)
- mem.SetMode(root, os.ModeDir|0755)
+ mem.SetMode(root, os.ModeDir|0o755)
m.data[FilePathSeparator] = root
})
return m.data
@@ -87,6 +91,24 @@ func (m *MemMapFs) findParent(f *mem.FileData) *mem.FileData {
return pfile
}
+func (m *MemMapFs) findDescendants(name string) []*mem.FileData {
+ fData := m.getData()
+ descendants := make([]*mem.FileData, 0, len(fData))
+ for p, dFile := range fData {
+ if strings.HasPrefix(p, name+FilePathSeparator) {
+ descendants = append(descendants, dFile)
+ }
+ }
+
+ sort.Slice(descendants, func(i, j int) bool {
+ cur := len(strings.Split(descendants[i].Name(), FilePathSeparator))
+ next := len(strings.Split(descendants[j].Name(), FilePathSeparator))
+ return cur < next
+ })
+
+ return descendants
+}
+
func (m *MemMapFs) registerWithParent(f *mem.FileData, perm os.FileMode) {
if f == nil {
return
@@ -96,12 +118,12 @@ func (m *MemMapFs) registerWithParent(f *mem.FileData, perm os.FileMode) {
pdir := filepath.Dir(filepath.Clean(f.Name()))
err := m.lockfreeMkdir(pdir, perm)
if err != nil {
- //log.Println("Mkdir error:", err)
+ // log.Println("Mkdir error:", err)
return
}
parent, err = m.lockfreeOpen(pdir)
if err != nil {
- //log.Println("Open after Mkdir error:", err)
+ // log.Println("Open after Mkdir error:", err)
return
}
}
@@ -237,7 +259,7 @@ func (m *MemMapFs) OpenFile(name string, flag int, perm os.FileMode) (File, erro
file = mem.NewReadOnlyFileHandle(file.(*mem.File).Data())
}
if flag&os.O_APPEND > 0 {
- _, err = file.Seek(0, os.SEEK_END)
+ _, err = file.Seek(0, io.SeekEnd)
if err != nil {
file.Close()
return nil, err
@@ -308,11 +330,22 @@ func (m *MemMapFs) Rename(oldname, newname string) error {
if _, ok := m.getData()[oldname]; ok {
m.mu.RUnlock()
m.mu.Lock()
- m.unRegisterWithParent(oldname)
+ err := m.unRegisterWithParent(oldname)
+ if err != nil {
+ return err
+ }
+
fileData := m.getData()[oldname]
- delete(m.getData(), oldname)
mem.ChangeFileName(fileData, newname)
m.getData()[newname] = fileData
+
+ err = m.renameDescendants(oldname, newname)
+ if err != nil {
+ return err
+ }
+
+ delete(m.getData(), oldname)
+
m.registerWithParent(fileData, 0)
m.mu.Unlock()
m.mu.RLock()
@@ -322,6 +355,29 @@ func (m *MemMapFs) Rename(oldname, newname string) error {
return nil
}
+func (m *MemMapFs) renameDescendants(oldname, newname string) error {
+ descendants := m.findDescendants(oldname)
+ removes := make([]string, 0, len(descendants))
+ for _, desc := range descendants {
+ descNewName := strings.Replace(desc.Name(), oldname, newname, 1)
+ err := m.unRegisterWithParent(desc.Name())
+ if err != nil {
+ return err
+ }
+
+ removes = append(removes, desc.Name())
+ mem.ChangeFileName(desc, descNewName)
+ m.getData()[descNewName] = desc
+
+ m.registerWithParent(desc, 0)
+ }
+ for _, r := range removes {
+ delete(m.getData(), r)
+ }
+
+ return nil
+}
+
func (m *MemMapFs) LstatIfPossible(name string) (os.FileInfo, bool, error) {
fileInfo, err := m.Stat(name)
return fileInfo, false, err