mirror of
https://github.com/jesseduffield/lazygit.git
synced 2025-02-03 13:21:56 +02:00
dont panic when catting directories
This commit is contained in:
parent
320ccdb22a
commit
7e1e97d050
5
main.go
5
main.go
@ -45,11 +45,8 @@ func main() {
|
|||||||
|
|
||||||
app, err := app.NewApp(appConfig)
|
app, err := app.NewApp(appConfig)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
// TODO: remove this call to panic after anonymous error reporting
|
app.Log.Error(err.Error())
|
||||||
// is setup (right now the call to panic logs nothing to the screen which
|
|
||||||
// would make debugging difficult
|
|
||||||
panic(err)
|
panic(err)
|
||||||
// app.Log.Panic(err.Error())
|
|
||||||
}
|
}
|
||||||
app.GitCommand.SetupGit()
|
app.GitCommand.SetupGit()
|
||||||
app.Gui.RunWithSubprocesses()
|
app.Gui.RunWithSubprocesses()
|
||||||
|
@ -86,16 +86,17 @@ func (c *GitCommand) GetStatusFiles() []File {
|
|||||||
change := statusString[0:2]
|
change := statusString[0:2]
|
||||||
stagedChange := change[0:1]
|
stagedChange := change[0:1]
|
||||||
unstagedChange := statusString[1:2]
|
unstagedChange := statusString[1:2]
|
||||||
filename := statusString[3:]
|
filename := c.OSCommand.Unquote(statusString[3:])
|
||||||
tracked := !includes([]string{"??", "A ", "AM"}, change)
|
tracked := !includes([]string{"??", "A ", "AM"}, change)
|
||||||
file := File{
|
file := File{
|
||||||
Name: c.OSCommand.Unquote(filename),
|
Name: filename,
|
||||||
DisplayString: statusString,
|
DisplayString: statusString,
|
||||||
HasStagedChanges: !includes([]string{" ", "U", "?"}, stagedChange),
|
HasStagedChanges: !includes([]string{" ", "U", "?"}, stagedChange),
|
||||||
HasUnstagedChanges: unstagedChange != " ",
|
HasUnstagedChanges: unstagedChange != " ",
|
||||||
Tracked: tracked,
|
Tracked: tracked,
|
||||||
Deleted: unstagedChange == "D" || stagedChange == "D",
|
Deleted: unstagedChange == "D" || stagedChange == "D",
|
||||||
HasMergeConflicts: change == "UU",
|
HasMergeConflicts: change == "UU",
|
||||||
|
Type: c.OSCommand.FileType(filename),
|
||||||
}
|
}
|
||||||
files = append(files, file)
|
files = append(files, file)
|
||||||
}
|
}
|
||||||
|
@ -1,7 +1,6 @@
|
|||||||
package commands
|
package commands
|
||||||
|
|
||||||
// File : A staged/unstaged file
|
// File : A staged/unstaged file
|
||||||
// TODO: decide whether to give all of these the Git prefix
|
|
||||||
type File struct {
|
type File struct {
|
||||||
Name string
|
Name string
|
||||||
HasStagedChanges bool
|
HasStagedChanges bool
|
||||||
@ -10,6 +9,7 @@ type File struct {
|
|||||||
Deleted bool
|
Deleted bool
|
||||||
HasMergeConflicts bool
|
HasMergeConflicts bool
|
||||||
DisplayString string
|
DisplayString string
|
||||||
|
Type string // one of 'file', 'directory', and 'other'
|
||||||
}
|
}
|
||||||
|
|
||||||
// Commit : A git commit
|
// Commit : A git commit
|
||||||
|
@ -59,6 +59,18 @@ func (c *OSCommand) RunCommand(command string) error {
|
|||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// FileType tells us if the file is a file, directory or other
|
||||||
|
func (c *OSCommand) FileType(path string) string {
|
||||||
|
fileInfo, err := os.Stat(path)
|
||||||
|
if err != nil {
|
||||||
|
return "other"
|
||||||
|
}
|
||||||
|
if fileInfo.IsDir() {
|
||||||
|
return "directory"
|
||||||
|
}
|
||||||
|
return "file"
|
||||||
|
}
|
||||||
|
|
||||||
// RunDirectCommand wrapper around direct commands
|
// RunDirectCommand wrapper around direct commands
|
||||||
func (c *OSCommand) RunDirectCommand(command string) (string, error) {
|
func (c *OSCommand) RunDirectCommand(command string) (string, error) {
|
||||||
c.Log.WithField("command", command).Info("RunDirectCommand")
|
c.Log.WithField("command", command).Info("RunDirectCommand")
|
||||||
|
@ -1,6 +1,7 @@
|
|||||||
package commands
|
package commands
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"os"
|
||||||
"os/exec"
|
"os/exec"
|
||||||
"testing"
|
"testing"
|
||||||
|
|
||||||
@ -297,3 +298,60 @@ func TestOSCommandUnquote(t *testing.T) {
|
|||||||
|
|
||||||
assert.EqualValues(t, expected, actual)
|
assert.EqualValues(t, expected, actual)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestOSCommandFileType(t *testing.T) {
|
||||||
|
type scenario struct {
|
||||||
|
path string
|
||||||
|
setup func()
|
||||||
|
test func(string)
|
||||||
|
}
|
||||||
|
|
||||||
|
scenarios := []scenario{
|
||||||
|
{
|
||||||
|
"testFile",
|
||||||
|
func() {
|
||||||
|
if _, err := os.Create("testFile"); err != nil {
|
||||||
|
panic(err)
|
||||||
|
}
|
||||||
|
},
|
||||||
|
func(output string) {
|
||||||
|
assert.EqualValues(t, "file", output)
|
||||||
|
},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"file with spaces",
|
||||||
|
func() {
|
||||||
|
if _, err := os.Create("file with spaces"); err != nil {
|
||||||
|
panic(err)
|
||||||
|
}
|
||||||
|
},
|
||||||
|
func(output string) {
|
||||||
|
assert.EqualValues(t, "file", output)
|
||||||
|
},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"testDirectory",
|
||||||
|
func() {
|
||||||
|
if err := os.Mkdir("testDirectory", 0644); err != nil {
|
||||||
|
panic(err)
|
||||||
|
}
|
||||||
|
},
|
||||||
|
func(output string) {
|
||||||
|
assert.EqualValues(t, "directory", output)
|
||||||
|
},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"nonExistant",
|
||||||
|
func() {},
|
||||||
|
func(output string) {
|
||||||
|
assert.EqualValues(t, "other", output)
|
||||||
|
},
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
|
for _, s := range scenarios {
|
||||||
|
s.setup()
|
||||||
|
s.test(newDummyOSCommand().FileType(s.path))
|
||||||
|
_ = os.RemoveAll(s.path)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
@ -341,9 +341,13 @@ func (gui *Gui) catSelectedFile(g *gocui.Gui) (string, error) {
|
|||||||
}
|
}
|
||||||
return "", gui.renderString(g, "main", gui.Tr.SLocalize("NoFilesDisplay"))
|
return "", gui.renderString(g, "main", gui.Tr.SLocalize("NoFilesDisplay"))
|
||||||
}
|
}
|
||||||
|
if item.Type != "file" {
|
||||||
|
return "", gui.renderString(g, "main", gui.Tr.SLocalize("NotAFile"))
|
||||||
|
}
|
||||||
cat, err := gui.GitCommand.CatFile(item.Name)
|
cat, err := gui.GitCommand.CatFile(item.Name)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
panic(err)
|
gui.Log.Error(err)
|
||||||
|
return "", gui.renderString(g, "main", err.Error())
|
||||||
}
|
}
|
||||||
return cat, nil
|
return cat, nil
|
||||||
}
|
}
|
||||||
|
@ -180,6 +180,9 @@ func (gui *Gui) refreshMergePanel(g *gocui.Gui) error {
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
if cat == "" {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
gui.State.Conflicts, err = gui.findConflicts(cat)
|
gui.State.Conflicts, err = gui.findConflicts(cat)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
|
@ -105,6 +105,9 @@ func addEnglish(i18nObject *i18n.Bundle) error {
|
|||||||
}, &i18n.Message{
|
}, &i18n.Message{
|
||||||
ID: "NoFilesDisplay",
|
ID: "NoFilesDisplay",
|
||||||
Other: "No file to display",
|
Other: "No file to display",
|
||||||
|
}, &i18n.Message{
|
||||||
|
ID: "NotAFile",
|
||||||
|
Other: "Not a file",
|
||||||
}, &i18n.Message{
|
}, &i18n.Message{
|
||||||
ID: "PullWait",
|
ID: "PullWait",
|
||||||
Other: "Pulling...",
|
Other: "Pulling...",
|
||||||
|
@ -13,9 +13,15 @@ function add_spacing {
|
|||||||
done
|
done
|
||||||
}
|
}
|
||||||
|
|
||||||
|
mkdir directory
|
||||||
|
echo "test1" > directory/file
|
||||||
|
echo "test1" > directory/file2
|
||||||
|
|
||||||
|
|
||||||
echo "Here is a story that has been told throuhg the ages" >> file1
|
echo "Here is a story that has been told throuhg the ages" >> file1
|
||||||
|
|
||||||
git add file1
|
git add file1
|
||||||
|
git add directory
|
||||||
git commit -m "first commit"
|
git commit -m "first commit"
|
||||||
|
|
||||||
git checkout -b develop
|
git checkout -b develop
|
||||||
@ -24,6 +30,11 @@ echo "once upon a time there was a dog" >> file1
|
|||||||
add_spacing file1
|
add_spacing file1
|
||||||
echo "once upon a time there was another dog" >> file1
|
echo "once upon a time there was another dog" >> file1
|
||||||
git add file1
|
git add file1
|
||||||
|
|
||||||
|
echo "test2" > directory/file
|
||||||
|
echo "test2" > directory/file2
|
||||||
|
git add directory
|
||||||
|
|
||||||
git commit -m "first commit on develop"
|
git commit -m "first commit on develop"
|
||||||
|
|
||||||
git checkout master
|
git checkout master
|
||||||
@ -32,6 +43,11 @@ echo "once upon a time there was a cat" >> file1
|
|||||||
add_spacing file1
|
add_spacing file1
|
||||||
echo "once upon a time there was another cat" >> file1
|
echo "once upon a time there was another cat" >> file1
|
||||||
git add file1
|
git add file1
|
||||||
|
|
||||||
|
echo "test3" > directory/file
|
||||||
|
echo "test3" > directory/file2
|
||||||
|
git add directory
|
||||||
|
|
||||||
git commit -m "first commit on develop"
|
git commit -m "first commit on develop"
|
||||||
|
|
||||||
git merge develop # should have a merge conflict here
|
git merge develop # should have a merge conflict here
|
||||||
|
Loading…
x
Reference in New Issue
Block a user