mirror of
https://github.com/jesseduffield/lazygit.git
synced 2025-04-25 12:24:47 +02:00
Merge pull request #172 from jesseduffield/hotfix/167-ambiguous-name-in-diff
167: Support File names that match Branch names
This commit is contained in:
commit
60fc24eada
@ -486,15 +486,11 @@ func (c *GitCommand) Diff(file File) string {
|
|||||||
// if the file is staged and has spaces in it, it comes pre-quoted
|
// if the file is staged and has spaces in it, it comes pre-quoted
|
||||||
fileName = c.OSCommand.Quote(fileName)
|
fileName = c.OSCommand.Quote(fileName)
|
||||||
}
|
}
|
||||||
deletedArg := ""
|
trackedArg := "--"
|
||||||
if file.Deleted {
|
|
||||||
deletedArg = "--"
|
|
||||||
}
|
|
||||||
trackedArg := ""
|
|
||||||
if !file.Tracked && !file.HasStagedChanges {
|
if !file.Tracked && !file.HasStagedChanges {
|
||||||
trackedArg = "--no-index /dev/null"
|
trackedArg = "--no-index /dev/null"
|
||||||
}
|
}
|
||||||
command := fmt.Sprintf("%s %s %s %s %s", "git diff --color ", cachedArg, deletedArg, trackedArg, fileName)
|
command := fmt.Sprintf("%s %s %s %s", "git diff --color ", cachedArg, trackedArg, fileName)
|
||||||
|
|
||||||
// for now we assume an error means the file was deleted
|
// for now we assume an error means the file was deleted
|
||||||
s, _ := c.OSCommand.RunCommandWithOutput(command)
|
s, _ := c.OSCommand.RunCommandWithOutput(command)
|
||||||
|
126
pkg/commands/git_test.go
Normal file
126
pkg/commands/git_test.go
Normal file
@ -0,0 +1,126 @@
|
|||||||
|
package commands
|
||||||
|
|
||||||
|
import (
|
||||||
|
"io/ioutil"
|
||||||
|
"strings"
|
||||||
|
"testing"
|
||||||
|
|
||||||
|
"github.com/Sirupsen/logrus"
|
||||||
|
"github.com/jesseduffield/lazygit/pkg/test"
|
||||||
|
)
|
||||||
|
|
||||||
|
func getDummyLog() *logrus.Logger {
|
||||||
|
log := logrus.New()
|
||||||
|
log.Out = ioutil.Discard
|
||||||
|
return log
|
||||||
|
}
|
||||||
|
|
||||||
|
func getDummyOSCommand() *OSCommand {
|
||||||
|
return &OSCommand{
|
||||||
|
Log: getDummyLog(),
|
||||||
|
Platform: getPlatform(),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func getDummyGitCommand() *GitCommand {
|
||||||
|
return &GitCommand{
|
||||||
|
Log: getDummyLog(),
|
||||||
|
OSCommand: getDummyOSCommand(),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestDiff(t *testing.T) {
|
||||||
|
gitCommand := getDummyGitCommand()
|
||||||
|
if err := test.GenerateRepo("lots_of_diffs.sh"); err != nil {
|
||||||
|
t.Error(err.Error())
|
||||||
|
}
|
||||||
|
files := []File{
|
||||||
|
{
|
||||||
|
Name: "deleted_staged",
|
||||||
|
HasStagedChanges: false,
|
||||||
|
HasUnstagedChanges: true,
|
||||||
|
Tracked: true,
|
||||||
|
Deleted: true,
|
||||||
|
HasMergeConflicts: false,
|
||||||
|
DisplayString: " D deleted_staged",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
Name: "\"file with space staged\"",
|
||||||
|
HasStagedChanges: true,
|
||||||
|
HasUnstagedChanges: false,
|
||||||
|
Tracked: false,
|
||||||
|
Deleted: false,
|
||||||
|
HasMergeConflicts: false,
|
||||||
|
DisplayString: "A \"file with space staged\"",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
Name: "file with space unstaged",
|
||||||
|
HasStagedChanges: false,
|
||||||
|
HasUnstagedChanges: true,
|
||||||
|
Tracked: false,
|
||||||
|
Deleted: false,
|
||||||
|
HasMergeConflicts: false,
|
||||||
|
DisplayString: "?? file with space unstaged",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
Name: "modified_unstaged",
|
||||||
|
HasStagedChanges: true,
|
||||||
|
HasUnstagedChanges: false,
|
||||||
|
Tracked: true,
|
||||||
|
Deleted: false,
|
||||||
|
HasMergeConflicts: false,
|
||||||
|
DisplayString: "M modified_unstaged",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
Name: "modified_staged",
|
||||||
|
HasStagedChanges: false,
|
||||||
|
HasUnstagedChanges: true,
|
||||||
|
Tracked: true,
|
||||||
|
Deleted: false,
|
||||||
|
HasMergeConflicts: false,
|
||||||
|
DisplayString: " M modified_staged",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
Name: "renamed_before -> renamed_after",
|
||||||
|
HasStagedChanges: true,
|
||||||
|
HasUnstagedChanges: false,
|
||||||
|
Tracked: true,
|
||||||
|
Deleted: false,
|
||||||
|
HasMergeConflicts: false,
|
||||||
|
DisplayString: "R renamed_before -> renamed_after",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
Name: "untracked_unstaged",
|
||||||
|
HasStagedChanges: false,
|
||||||
|
HasUnstagedChanges: true,
|
||||||
|
Tracked: false,
|
||||||
|
Deleted: false,
|
||||||
|
HasMergeConflicts: false,
|
||||||
|
DisplayString: "?? untracked_unstaged",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
Name: "untracked_staged",
|
||||||
|
HasStagedChanges: true,
|
||||||
|
HasUnstagedChanges: false,
|
||||||
|
Tracked: false,
|
||||||
|
Deleted: false,
|
||||||
|
HasMergeConflicts: false,
|
||||||
|
DisplayString: "A untracked_staged",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
Name: "master",
|
||||||
|
HasStagedChanges: false,
|
||||||
|
HasUnstagedChanges: true,
|
||||||
|
Tracked: false,
|
||||||
|
Deleted: false,
|
||||||
|
HasMergeConflicts: false,
|
||||||
|
DisplayString: "?? master",
|
||||||
|
},
|
||||||
|
}
|
||||||
|
for _, file := range files {
|
||||||
|
content := gitCommand.Diff(file)
|
||||||
|
if strings.Contains(content, "error") {
|
||||||
|
t.Error("Error: diff test failed. File: " + file.Name + ", " + content)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
25
pkg/test/test.go
Normal file
25
pkg/test/test.go
Normal file
@ -0,0 +1,25 @@
|
|||||||
|
package test
|
||||||
|
|
||||||
|
import (
|
||||||
|
"errors"
|
||||||
|
"os"
|
||||||
|
"os/exec"
|
||||||
|
|
||||||
|
"github.com/jesseduffield/lazygit/pkg/utils"
|
||||||
|
)
|
||||||
|
|
||||||
|
// GenerateRepo generates a repo from test/repos and changes the directory to be
|
||||||
|
// inside the newly made repo
|
||||||
|
func GenerateRepo(filename string) error {
|
||||||
|
testPath := utils.GetProjectRoot() + "/test/repos/"
|
||||||
|
if err := os.Chdir(testPath); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
if output, err := exec.Command("bash", filename).CombinedOutput(); err != nil {
|
||||||
|
return errors.New(string(output))
|
||||||
|
}
|
||||||
|
if err := os.Chdir(testPath + "repo"); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
@ -4,6 +4,7 @@ import (
|
|||||||
"fmt"
|
"fmt"
|
||||||
"log"
|
"log"
|
||||||
"os"
|
"os"
|
||||||
|
"path"
|
||||||
"path/filepath"
|
"path/filepath"
|
||||||
"strings"
|
"strings"
|
||||||
|
|
||||||
@ -63,3 +64,11 @@ func TrimTrailingNewline(str string) string {
|
|||||||
}
|
}
|
||||||
return str
|
return str
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// GetProjectRoot returns the path to the root of the project. Only to be used
|
||||||
|
// in testing contexts, as with binaries it's unlikely this path will exist on
|
||||||
|
// the machine
|
||||||
|
func GetProjectRoot() string {
|
||||||
|
gp := os.Getenv("GOPATH")
|
||||||
|
return path.Join(gp, "src/github.com/jesseduffield/lazygit")
|
||||||
|
}
|
||||||
|
@ -2,6 +2,9 @@
|
|||||||
set -ex; rm -rf repo; mkdir repo; cd repo
|
set -ex; rm -rf repo; mkdir repo; cd repo
|
||||||
|
|
||||||
git init
|
git init
|
||||||
|
git config user.email "test@example.com"
|
||||||
|
git config user.name "Lazygit Tester"
|
||||||
|
|
||||||
|
|
||||||
touch foo
|
touch foo
|
||||||
git add foo
|
git add foo
|
||||||
|
@ -2,6 +2,9 @@
|
|||||||
set -ex; rm -rf repo; mkdir repo; cd repo
|
set -ex; rm -rf repo; mkdir repo; cd repo
|
||||||
|
|
||||||
git init
|
git init
|
||||||
|
git config user.email "test@example.com"
|
||||||
|
git config user.name "Lazygit Tester"
|
||||||
|
|
||||||
|
|
||||||
git config gpg.program $(which gpg)
|
git config gpg.program $(which gpg)
|
||||||
git config user.signingkey E304229F # test key
|
git config user.signingkey E304229F # test key
|
||||||
|
@ -2,6 +2,9 @@
|
|||||||
set -ex; rm -rf repo; mkdir repo; cd repo
|
set -ex; rm -rf repo; mkdir repo; cd repo
|
||||||
|
|
||||||
git init
|
git init
|
||||||
|
git config user.email "test@example.com"
|
||||||
|
git config user.name "Lazygit Tester"
|
||||||
|
|
||||||
|
|
||||||
i=2
|
i=2
|
||||||
end=100
|
end=100
|
||||||
|
35
test/repos/lots_of_diffs.sh
Executable file
35
test/repos/lots_of_diffs.sh
Executable file
@ -0,0 +1,35 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
set -ex; rm -rf repo; mkdir repo; cd repo
|
||||||
|
|
||||||
|
git init
|
||||||
|
git config user.email "test@example.com"
|
||||||
|
git config user.name "Lazygit Tester"
|
||||||
|
|
||||||
|
|
||||||
|
echo "deleted" > deleted_staged
|
||||||
|
echo "deleted_unstaged" > deleted_unstaged
|
||||||
|
echo "modified_staged" > modified_staged
|
||||||
|
echo "modified_unstaged" > modified_unstaged
|
||||||
|
echo "renamed" > renamed_before
|
||||||
|
|
||||||
|
git add .
|
||||||
|
git commit -m "files to delete"
|
||||||
|
rm deleted_staged
|
||||||
|
rm deleted_unstaged
|
||||||
|
|
||||||
|
rm renamed_before
|
||||||
|
echo "renamed" > renamed_after
|
||||||
|
echo "more" >> modified_staged
|
||||||
|
echo "more" >> modified_unstaged
|
||||||
|
echo "untracked_staged" > untracked_staged
|
||||||
|
echo "untracked_unstaged" > untracked_unstaged
|
||||||
|
echo "blah" > "file with space staged"
|
||||||
|
echo "blah" > "file with space unstaged"
|
||||||
|
echo "same name as branch" > master
|
||||||
|
|
||||||
|
git add deleted_staged
|
||||||
|
git add modified_staged
|
||||||
|
git add untracked_staged
|
||||||
|
git add "file with space staged"
|
||||||
|
git add renamed_before
|
||||||
|
git add renamed_after
|
@ -2,6 +2,9 @@
|
|||||||
set -ex; rm -rf repo; mkdir repo; cd repo
|
set -ex; rm -rf repo; mkdir repo; cd repo
|
||||||
|
|
||||||
git init
|
git init
|
||||||
|
git config user.email "test@example.com"
|
||||||
|
git config user.name "Lazygit Tester"
|
||||||
|
|
||||||
|
|
||||||
function add_spacing {
|
function add_spacing {
|
||||||
for i in {1..60}
|
for i in {1..60}
|
||||||
|
@ -2,6 +2,9 @@
|
|||||||
set -ex; rm -rf repo; mkdir repo; cd repo
|
set -ex; rm -rf repo; mkdir repo; cd repo
|
||||||
|
|
||||||
git init
|
git init
|
||||||
|
git config user.email "test@example.com"
|
||||||
|
git config user.name "Lazygit Tester"
|
||||||
|
|
||||||
cp ../extras/pre-commit .git/hooks/pre-commit
|
cp ../extras/pre-commit .git/hooks/pre-commit
|
||||||
chmod +x .git/hooks/pre-commit
|
chmod +x .git/hooks/pre-commit
|
||||||
|
|
||||||
|
@ -2,6 +2,9 @@
|
|||||||
set -ex; rm -rf repo; mkdir repo; cd repo
|
set -ex; rm -rf repo; mkdir repo; cd repo
|
||||||
|
|
||||||
git init
|
git init
|
||||||
|
git config user.email "test@example.com"
|
||||||
|
git config user.name "Lazygit Tester"
|
||||||
|
|
||||||
|
|
||||||
# Add some ansi, unicode, zero width joiner caracters
|
# Add some ansi, unicode, zero width joiner caracters
|
||||||
cat <<EOT >> charstest.txt
|
cat <<EOT >> charstest.txt
|
||||||
|
Loading…
x
Reference in New Issue
Block a user