summaryrefslogtreecommitdiffstats
path: root/pkg
diff options
context:
space:
mode:
authorJesse Duffield <jessedduffield@gmail.com>2022-11-11 12:16:38 +1100
committerAndrew Hynes <andrew.hynes@colabsoftware.com>2022-11-12 18:09:15 -0330
commit97ced9e14fe1754c5647c8c693e70fbf7c52807a (patch)
treead8aa418aacc6aedb3954ed8bba8f95d9c8d7a30 /pkg
parentea0968677048b3236e3797e947e4d458096750ed (diff)
fix could-not-access error
Diffstat (limited to 'pkg')
-rw-r--r--pkg/commands/git_commands/working_tree.go2
-rw-r--r--pkg/commands/models/file.go5
-rw-r--r--pkg/gui/filetree/file_node.go4
-rw-r--r--pkg/integration/components/shell.go9
-rw-r--r--pkg/integration/tests/file/dir_with_untracked_file.go32
-rw-r--r--pkg/integration/tests/tests.go2
6 files changed, 53 insertions, 1 deletions
diff --git a/pkg/commands/git_commands/working_tree.go b/pkg/commands/git_commands/working_tree.go
index 8fd1fb177..9c02d4300 100644
--- a/pkg/commands/git_commands/working_tree.go
+++ b/pkg/commands/git_commands/working_tree.go
@@ -241,7 +241,7 @@ func (self *WorkingTreeCommands) WorktreeFileDiffCmdObj(node models.IFile, plain
if cached {
cachedArg = " --cached"
}
- if !node.GetIsTracked() && !node.GetHasStagedChanges() && !cached {
+ if !node.GetIsTracked() && !node.GetHasStagedChanges() && !cached && node.GetIsFile() {
trackedArg = "--no-index -- /dev/null"
}
if plain {
diff --git a/pkg/commands/models/file.go b/pkg/commands/models/file.go
index eeb540def..dbe015cf1 100644
--- a/pkg/commands/models/file.go
+++ b/pkg/commands/models/file.go
@@ -29,6 +29,7 @@ type IFile interface {
GetIsTracked() bool
GetPath() string
GetPreviousPath() string
+ GetIsFile() bool
}
func (f *File) IsRename() bool {
@@ -92,6 +93,10 @@ func (f *File) GetPreviousPath() string {
return f.PreviousName
}
+func (f *File) GetIsFile() bool {
+ return true
+}
+
type StatusFields struct {
HasStagedChanges bool
HasUnstagedChanges bool
diff --git a/pkg/gui/filetree/file_node.go b/pkg/gui/filetree/file_node.go
index 2ff707113..abfdbafe6 100644
--- a/pkg/gui/filetree/file_node.go
+++ b/pkg/gui/filetree/file_node.go
@@ -42,6 +42,10 @@ func (self *FileNode) GetIsTracked() bool {
return self.SomeFile(func(file *models.File) bool { return file.Tracked })
}
+func (self *FileNode) GetIsFile() bool {
+ return self.IsFile()
+}
+
func (self *FileNode) GetPreviousPath() string {
if self.File == nil {
return ""
diff --git a/pkg/integration/components/shell.go b/pkg/integration/components/shell.go
index 1d8182edb..95b601783 100644
--- a/pkg/integration/components/shell.go
+++ b/pkg/integration/components/shell.go
@@ -45,6 +45,15 @@ func (s *Shell) CreateFile(path string, content string) *Shell {
return s
}
+func (s *Shell) CreateDir(path string) *Shell {
+ fullPath := filepath.Join(s.dir, path)
+ if err := os.MkdirAll(fullPath, 0o755); err != nil {
+ panic(fmt.Sprintf("error creating directory: %s\n%s", fullPath, err))
+ }
+
+ return s
+}
+
func (s *Shell) UpdateFile(path string, content string) *Shell {
fullPath := filepath.Join(s.dir, path)
err := os.WriteFile(fullPath, []byte(content), 0o644)
diff --git a/pkg/integration/tests/file/dir_with_untracked_file.go b/pkg/integration/tests/file/dir_with_untracked_file.go
new file mode 100644
index 000000000..c67745c65
--- /dev/null
+++ b/pkg/integration/tests/file/dir_with_untracked_file.go
@@ -0,0 +1,32 @@
+package file
+
+import (
+ "github.com/jesseduffield/lazygit/pkg/config"
+ . "github.com/jesseduffield/lazygit/pkg/integration/components"
+)
+
+var DirWithUntrackedFile = NewIntegrationTest(NewIntegrationTestArgs{
+ // notably, we currently _don't_ actually see the untracked file in the diff. Not sure how to get around that.
+ Description: "When selecting a directory that contains an untracked file, we should not get an error",
+ ExtraCmdArgs: "",
+ Skip: false,
+ SetupConfig: func(config *config.AppConfig) {
+ config.UserConfig.Gui.ShowFileTree = true
+ },
+ SetupRepo: func(shell *Shell) {
+ shell.CreateDir("dir")
+ shell.CreateFile("dir/file", "foo")
+ shell.GitAddAll()
+ shell.Commit("first commit")
+ shell.CreateFile("dir/untracked", "bar")
+ shell.UpdateFile("dir/file", "baz")
+ },
+ Run: func(shell *Shell, input *Input, assert *Assert, keys config.KeybindingConfig) {
+ assert.CommitCount(1)
+
+ assert.MatchMainViewContent(NotContains("error: Could not access"))
+ // we show baz because it's a modified file but we don't show bar because it's untracked
+ // (though it would be cool if we could show that too)
+ assert.MatchMainViewContent(Contains("baz"))
+ },
+})
diff --git a/pkg/integration/tests/tests.go b/pkg/integration/tests/tests.go
index e26836b59..0765c8600 100644
--- a/pkg/integration/tests/tests.go
+++ b/pkg/integration/tests/tests.go
@@ -15,6 +15,7 @@ import (
"github.com/jesseduffield/lazygit/pkg/integration/tests/cherry_pick"
"github.com/jesseduffield/lazygit/pkg/integration/tests/commit"
"github.com/jesseduffield/lazygit/pkg/integration/tests/custom_commands"
+ "github.com/jesseduffield/lazygit/pkg/integration/tests/file"
"github.com/jesseduffield/lazygit/pkg/integration/tests/interactive_rebase"
"github.com/jesseduffield/lazygit/pkg/integration/tests/stash"
"github.com/jesseduffield/lazygit/pkg/utils"
@@ -43,6 +44,7 @@ var tests = []*components.IntegrationTest{
stash.Stash,
stash.StashIncludingUntrackedFiles,
stash.Rename,
+ file.DirWithUntrackedFile,
}
func GetTests() []*components.IntegrationTest {