summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDaniel Milde <daniel@milde.cz>2024-04-14 21:12:41 +0200
committerDaniel Milde <daniel@milde.cz>2024-04-14 23:03:01 +0200
commitbb8e684a8305929b90b3f79f4cf0dfac5dfc74f9 (patch)
tree9b52ed9db7e9b5c381ff529bd9837ddfb2d022e4
parentec0e2bb22622b9a2b081c3e908c829fe00c87a13 (diff)
refactor: move removal logic to separate package
-rw-r--r--internal/testanalyze/analyze.go3
-rw-r--r--pkg/analyze/file.go42
-rw-r--r--pkg/analyze/file_test.go120
-rw-r--r--pkg/remove/remove.go49
-rw-r--r--pkg/remove/remove_linux_test.go (renamed from pkg/analyze/file_linux_test.go)11
-rw-r--r--pkg/remove/remove_test.go130
-rw-r--r--tui/tui.go5
7 files changed, 190 insertions, 170 deletions
diff --git a/internal/testanalyze/analyze.go b/internal/testanalyze/analyze.go
index 9911a98..3bb0532 100644
--- a/internal/testanalyze/analyze.go
+++ b/internal/testanalyze/analyze.go
@@ -7,6 +7,7 @@ import (
"github.com/dundee/gdu/v5/internal/common"
"github.com/dundee/gdu/v5/pkg/analyze"
"github.com/dundee/gdu/v5/pkg/fs"
+ "github.com/dundee/gdu/v5/pkg/remove"
)
// MockedAnalyzer returns dir with files with different size exponents
@@ -91,7 +92,7 @@ func RemoveItemFromDirWithErr(dir fs.Item, file fs.Item) error {
// RemoveItemFromDirWithSleep returns error
func RemoveItemFromDirWithSleep(dir fs.Item, file fs.Item) error {
time.Sleep(time.Millisecond * 600)
- return analyze.RemoveItemFromDir(dir, file)
+ return remove.RemoveItemFromDir(dir, file)
}
// RemoveItemFromDirWithSleepAndErr returns error
diff --git a/pkg/analyze/file.go b/pkg/analyze/file.go
index 401a822..a933d8f 100644
--- a/pkg/analyze/file.go
+++ b/pkg/analyze/file.go
@@ -1,7 +1,6 @@
package analyze
import (
- "os"
"path/filepath"
"sync"
"time"
@@ -256,44 +255,3 @@ func (f *Dir) RLock() func() {
f.m.RLock()
return f.m.RUnlock
}
-
-// RemoveItemFromDir removes item from dir
-func RemoveItemFromDir(dir fs.Item, item fs.Item) error {
- err := os.RemoveAll(item.GetPath())
- if err != nil {
- return err
- }
-
- dir.RemoveFile(item)
- return nil
-}
-
-// EmptyFileFromDir empty file from dir
-func EmptyFileFromDir(dir fs.Item, file fs.Item) error {
- err := os.Truncate(file.GetPath(), 0)
- if err != nil {
- return err
- }
-
- cur := dir.(*Dir)
- for {
- cur.Size -= file.GetSize()
- cur.Usage -= file.GetUsage()
-
- if cur.Parent == nil {
- break
- }
- cur = cur.Parent.(*Dir)
- }
-
- dir.SetFiles(dir.GetFiles().Remove(file))
- newFile := &File{
- Name: file.GetName(),
- Flag: file.GetFlag(),
- Size: 0,
- Parent: dir,
- }
- dir.AddFile(newFile)
-
- return nil
-}
diff --git a/pkg/analyze/file_test.go b/pkg/analyze/file_test.go
index e5652c4..0255893 100644
--- a/pkg/analyze/file_test.go
+++ b/pkg/analyze/file_test.go
@@ -4,7 +4,6 @@ import (
"testing"
"time"
- "github.com/dundee/gdu/v5/internal/testdir"
"github.com/dundee/gdu/v5/pkg/fs"
"github.com/stretchr/testify/assert"
)
@@ -201,125 +200,6 @@ func TestRemoveByNameNotInDir(t *testing.T) {
assert.Equal(t, 1, len(dir.Files))
}
-func TestRemoveFile(t *testing.T) {
- dir := &Dir{
- File: &File{
- Name: "xxx",
- Size: 5,
- Usage: 12,
- },
- ItemCount: 3,
- BasePath: ".",
- }
-
- subdir := &Dir{
- File: &File{
- Name: "yyy",
- Size: 4,
- Usage: 8,
- Parent: dir,
- },
- ItemCount: 2,
- }
- file := &File{
- Name: "zzz",
- Size: 3,
- Usage: 4,
- Parent: subdir,
- }
- dir.Files = fs.Files{subdir}
- subdir.Files = fs.Files{file}
-
- err := RemoveItemFromDir(subdir, file)
- assert.Nil(t, err)
-
- assert.Equal(t, 0, len(subdir.Files))
- assert.Equal(t, 1, subdir.ItemCount)
- assert.Equal(t, int64(1), subdir.Size)
- assert.Equal(t, int64(4), subdir.Usage)
- assert.Equal(t, 1, len(dir.Files))
- assert.Equal(t, 2, dir.ItemCount)
- assert.Equal(t, int64(2), dir.Size)
-}
-
-func TestTruncateFile(t *testing.T) {
- fin := testdir.CreateTestDir()
- defer fin()
-
- dir := &Dir{
- File: &File{
- Name: "test_dir",
- Size: 5,
- Usage: 12,
- },
- ItemCount: 3,
- BasePath: ".",
- }
-
- subdir := &Dir{
- File: &File{
- Name: "nested",
- Size: 4,
- Usage: 8,
- Parent: dir,
- },
- ItemCount: 2,
- }
- file := &File{
- Name: "file2",
- Size: 3,
- Usage: 4,
- Parent: subdir,
- }
- dir.Files = fs.Files{subdir}
- subdir.Files = fs.Files{file}
-
- err := EmptyFileFromDir(subdir, file)
-
- assert.Nil(t, err)
- assert.Equal(t, 1, len(subdir.Files))
- assert.Equal(t, 2, subdir.ItemCount)
- assert.Equal(t, int64(1), subdir.Size)
- assert.Equal(t, int64(4), subdir.Usage)
- assert.Equal(t, 1, len(dir.Files))
- assert.Equal(t, 3, dir.ItemCount)
- assert.Equal(t, int64(2), dir.Size)
-}
-
-func TestTruncateFileWithErr(t *testing.T) {
- dir := &Dir{
- File: &File{
- Name: "xxx",
- Size: 5,
- Usage: 12,
- },
- ItemCount: 3,
- BasePath: ".",
- }
-
- subdir := &Dir{
- File: &File{
- Name: "yyy",
- Size: 4,
- Usage: 8,
- Parent: dir,
- },
- ItemCount: 2,
- }
- file := &File{
- Name: "zzz",
- Size: 3,
- Usage: 4,
- Parent: subdir,
- }
- dir.Files = fs.Files{subdir}
- subdir.Files = fs.Files{file}
-
- err := EmptyFileFromDir(subdir, file)
-
- assert.Contains(t, err.Error(), "no such file or directory")
-}
-
func TestUpdateStats(t *testing.T) {
dir := Dir{
File: &File{
diff --git a/pkg/remove/remove.go b/pkg/remove/remove.go
new file mode 100644
index 0000000..1d17985
--- /dev/null
+++ b/pkg/remove/remove.go
@@ -0,0 +1,49 @@
+package remove
+
+import (
+ "os"
+
+ "github.com/dundee/gdu/v5/pkg/analyze"
+ "github.com/dundee/gdu/v5/pkg/fs"
+)
+
+// RemoveItemFromDir removes item from dir
+func RemoveItemFromDir(dir fs.Item, item fs.Item) error {
+ err := os.RemoveAll(item.GetPath())
+ if err != nil {
+ return err
+ }
+
+ dir.RemoveFile(item)
+ return nil
+}
+
+// EmptyFileFromDir empty file from dir
+func EmptyFileFromDir(dir fs.Item, file fs.Item) error {
+ err := os.Truncate(file.GetPath(), 0)
+ if err != nil {
+ return err
+ }
+
+ cur := dir.(*analyze.Dir)
+ for {
+ cur.Size -= file.GetSize()
+ cur.Usage -= file.GetUsage()
+
+ if cur.Parent == nil {
+ break
+ }
+ cur = cur.Parent.(*analyze.Dir)
+ }
+
+ dir.SetFiles(dir.GetFiles().Remove(file))
+ newFile := &analyze.File{
+ Name: file.GetName(),
+ Flag: file.GetFlag(),
+ Size: 0,
+ Parent: dir,
+ }
+ dir.AddFile(newFile)
+
+ return nil
+}
diff --git a/pkg/analyze/file_linux_test.go b/pkg/remove/remove_linux_test.go
index 049c0b1..c09d85d 100644
--- a/pkg/analyze/file_linux_test.go
+++ b/pkg/remove/remove_linux_test.go
@@ -1,13 +1,14 @@
//go:build linux
// +build linux
-package analyze
+package remove
import (
"os"
"testing"
"github.com/dundee/gdu/v5/internal/testdir"
+ "github.com/dundee/gdu/v5/pkg/analyze"
"github.com/stretchr/testify/assert"
)
@@ -22,15 +23,15 @@ func TestRemoveFileWithErr(t *testing.T) {
assert.Nil(t, err)
}()
- dir := &Dir{
- File: &File{
+ dir := &analyze.Dir{
+ File: &analyze.File{
Name: "test_dir",
},
BasePath: ".",
}
- subdir := &Dir{
- File: &File{
+ subdir := &analyze.Dir{
+ File: &analyze.File{
Name: "nested",
Parent: dir,
},
diff --git a/pkg/remove/remove_test.go b/pkg/remove/remove_test.go
new file mode 100644
index 0000000..11a1c23
--- /dev/null
+++ b/pkg/remove/remove_test.go
@@ -0,0 +1,130 @@
+package remove
+
+import (
+ "testing"
+
+ "github.com/stretchr/testify/assert"
+
+ "github.com/dundee/gdu/v5/internal/testdir"
+ "github.com/dundee/gdu/v5/pkg/analyze"
+ "github.com/dundee/gdu/v5/pkg/fs"
+)
+
+func TestTruncateFile(t *testing.T) {
+ fin := testdir.CreateTestDir()
+ defer fin()
+
+ dir := &analyze.Dir{
+ File: &analyze.File{
+ Name: "test_dir",
+ Size: 5,
+ Usage: 12,
+ },
+ ItemCount: 3,
+ BasePath: ".",
+ }
+
+ subdir := &analyze.Dir{
+ File: &analyze.File{
+ Name: "nested",
+ Size: 4,
+ Usage: 8,
+ Parent: dir,
+ },
+ ItemCount: 2,
+ }
+ file := &analyze.File{
+ Name: "file2",
+ Size: 3,
+ Usage: 4,
+ Parent: subdir,
+ }
+ dir.Files = fs.Files{subdir}
+ subdir.Files = fs.Files{file}
+
+ err := EmptyFileFromDir(subdir, file)
+
+ assert.Nil(t, err)
+ assert.Equal(t, 1, len(subdir.Files))
+ assert.Equal(t, 2, subdir.ItemCount)
+ assert.Equal(t, int64(1), subdir.Size)
+ assert.Equal(t, int64(4), subdir.Usage)
+ assert.Equal(t, 1, len(dir.Files))
+ assert.Equal(t, 3, dir.ItemCount)
+ assert.Equal(t, int64(2), dir.Size)
+}
+
+func TestRemoveFile(t *testing.T) {
+ dir := &analyze.Dir{
+ File: &analyze.File{
+ Name: "xxx",
+ Size: 5,
+ Usage: 12,
+ },
+ ItemCount: 3,
+ BasePath: ".",
+ }
+
+ subdir := &analyze.Dir{
+ File: &analyze.File{
+ Name: "yyy",
+ Size: 4,
+ Usage: 8,
+ Parent: dir,
+ },
+ ItemCount: 2,
+ }
+ file := &analyze.File{
+ Name: "zzz",
+ Size: 3,
+ Usage: 4,
+ Parent: subdir,
+ }
+ dir.Files = fs.Files{subdir}
+ subdir.Files = fs.Files{file}
+
+ err := RemoveItemFromDir(subdir, file)
+ assert.Nil(t, err)
+
+ assert.Equal(t, 0, len(subdir.Files))
+ assert.Equal(t, 1, subdir.ItemCount)
+ assert.Equal(t, int64(1), subdir.Size)
+ assert.Equal(t, int64(4), subdir.Usage)
+ assert.Equal(t, 1, len(dir.Files))
+ assert.Equal(t, 2, dir.ItemCount)
+ assert.Equal(t, int64(2), dir.Size)
+}
+
+func TestTruncateFileWithErr(t *testing.T) {
+ dir := &analyze.Dir{
+ File: &analyze.File{
+ Name: "xxx",
+ Size: 5,
+ Usage: 12,
+ },
+ ItemCount: 3,
+ BasePath: ".",
+ }
+
+ subdir := &analyze.Dir{
+ File: &analyze.File{
+ Name: "yyy",
+ Size: 4,
+ Usage: 8,
+ Parent: dir,
+ },
+ ItemCount: 2,
+ }
+ file := &analyze.File{
+ Name: "zzz",
+ Size: 3,
+ Usage: 4,
+ Parent: subdir,
+ }
+ dir.Files = fs.Files{subdir}
+ subdir.Files = fs.Files{file}
+
+ err := EmptyFileFromDir(subdir, file)
+
+ assert.Contains(t, err.Error(), "no such file or directory")
+}
diff --git a/tui/tui.go b/tui/tui.go
index b7a376a..03a35d4 100644
--- a/tui/tui.go
+++ b/tui/tui.go
@@ -14,6 +14,7 @@ import (
"github.com/dundee/gdu/v5/pkg/analyze"
"github.com/dundee/gdu/v5/pkg/device"
"github.com/dundee/gdu/v5/pkg/fs"
+ "github.com/dundee/gdu/v5/pkg/remove"
"github.com/gdamore/tcell/v2"
"github.com/rivo/tview"
)
@@ -105,8 +106,8 @@ func CreateUI(
output: output,
askBeforeDelete: true,
showItemCount: false,
- remover: analyze.RemoveItemFromDir,
- emptier: analyze.EmptyFileFromDir,
+ remover: remove.RemoveItemFromDir,
+ emptier: remove.EmptyFileFromDir,
exec: Execute,
linkedItems: make(fs.HardLinkedItems, 10),
selectedTextColor: tview.Styles.TitleColor,