summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJesse Duffield <jessedduffield@gmail.com>2022-07-05 18:35:24 +1000
committerJesse Duffield <jessedduffield@gmail.com>2022-07-05 19:33:44 +1000
commit6d133fd61123cf1ced09aaa1eb5016e233e66d09 (patch)
tree9cced350e730c6b056515b8641fbe077ce66264f
parentbd9e85a2d234c6af838414fbf6303017cea421a7 (diff)
better handling of gitignore files
-rw-r--r--pkg/integration/integration.go38
-rw-r--r--test/integration/excludeGitIgnore/expected/repo/lg_ignore_file (renamed from test/integration/excludeGitIgnore/expected/repo/.gitignore)0
-rw-r--r--test/integration/excludeGitIgnore/test.json4
-rw-r--r--test/integration/excludeMenu/expected/repo/.git_keep/info/lg_exclude_file (renamed from test/integration/excludeMenu/expected/repo/.git_keep/info/exclude)0
-rw-r--r--test/integration/gitignoreMenu/expected/repo/lg_ignore_file (renamed from test/integration/gitignoreMenu/expected/repo/.gitignore)0
-rw-r--r--test/integration/gitignoreMenu/expected/repo/myfile11
6 files changed, 26 insertions, 17 deletions
diff --git a/pkg/integration/integration.go b/pkg/integration/integration.go
index 89c906c51..c56134a4a 100644
--- a/pkg/integration/integration.go
+++ b/pkg/integration/integration.go
@@ -137,7 +137,7 @@ func RunTests(
return err
}
- if err := renameGitDirs(expectedDir); err != nil {
+ if err := renameSpecialPaths(expectedDir); err != nil {
return err
}
@@ -441,7 +441,7 @@ func generateSnapshots(actualDir string, expectedDir string) (string, string, er
return "", "", err
}
- if err := restoreGitDirs(expectedDirCopyDir); err != nil {
+ if err := restoreSpecialPaths(expectedDirCopyDir); err != nil {
return "", "", err
}
@@ -458,7 +458,7 @@ func generateSnapshots(actualDir string, expectedDir string) (string, string, er
return actual, expected, nil
}
-func getPathsToRename(dir string, needle string) []string {
+func getPathsToRename(dir string, needle string, contains string) []string {
pathsToRename := []string{}
err := filepath.Walk(dir, func(path string, f os.FileInfo, err error) error {
@@ -466,7 +466,7 @@ func getPathsToRename(dir string, needle string) []string {
return err
}
- if f.Name() == needle {
+ if f.Name() == needle && (contains == "" || strings.Contains(path, contains)) {
pathsToRename = append(pathsToRename, path)
}
@@ -479,14 +479,22 @@ func getPathsToRename(dir string, needle string) []string {
return pathsToRename
}
-// Git refuses to track .git and .gitmodules folders in subdirectories so we need to rename it
-// to git_keep after running a test, and then change it back again
-var untrackedGitDirs []string = []string{".git", ".gitmodules"}
+var specialPathMappings = []struct{ original, new, contains string }{
+ // git refuses to track .git or .gitmodules in subdirectories so we need to rename them
+ {".git", ".git_keep", ""},
+ {".gitmodules", ".gitmodules_keep", ""},
+ // we also need git to ignore the contents of our test gitignore files so that
+ // we actually commit files that are ignored within the test.
+ {".gitignore", "lg_ignore_file", ""},
+ // this is the .git/info/exclude file. We're being a little more specific here
+ // so that we don't accidentally mess with some other file named 'exclude' in the test.
+ {"exclude", "lg_exclude_file", ".git/info/exclude"},
+}
-func renameGitDirs(dir string) error {
- for _, untrackedGitDir := range untrackedGitDirs {
- for _, path := range getPathsToRename(dir, untrackedGitDir) {
- err := os.Rename(path, path+"_keep")
+func renameSpecialPaths(dir string) error {
+ for _, specialPath := range specialPathMappings {
+ for _, path := range getPathsToRename(dir, specialPath.original, specialPath.contains) {
+ err := os.Rename(path, filepath.Join(filepath.Dir(path), specialPath.new))
if err != nil {
return err
}
@@ -496,10 +504,10 @@ func renameGitDirs(dir string) error {
return nil
}
-func restoreGitDirs(dir string) error {
- for _, untrackedGitDir := range untrackedGitDirs {
- for _, path := range getPathsToRename(dir, untrackedGitDir+"_keep") {
- err := os.Rename(path, strings.TrimSuffix(path, "_keep"))
+func restoreSpecialPaths(dir string) error {
+ for _, specialPath := range specialPathMappings {
+ for _, path := range getPathsToRename(dir, specialPath.new, specialPath.contains) {
+ err := os.Rename(path, filepath.Join(filepath.Dir(path), specialPath.original))
if err != nil {
return err
}
diff --git a/test/integration/excludeGitIgnore/expected/repo/.gitignore b/test/integration/excludeGitIgnore/expected/repo/lg_ignore_file
index a5bce3fd2..a5bce3fd2 100644
--- a/test/integration/excludeGitIgnore/expected/repo/.gitignore
+++ b/test/integration/excludeGitIgnore/expected/repo/lg_ignore_file
diff --git a/test/integration/excludeGitIgnore/test.json b/test/integration/excludeGitIgnore/test.json
index a8ca45bb0..9c466ba11 100644
--- a/test/integration/excludeGitIgnore/test.json
+++ b/test/integration/excludeGitIgnore/test.json
@@ -1,4 +1,4 @@
{
- "description": "In this test .gitignore is added to .git/info/exclude using the ignore or exclude menu to check that this operation is to allowed",
+ "description": "In this test we attempt to add .gitignore to .git/info/exclude to ensure lazygit rejects the action",
"speed": 5
-} \ No newline at end of file
+}
diff --git a/test/integration/excludeMenu/expected/repo/.git_keep/info/exclude b/test/integration/excludeMenu/expected/repo/.git_keep/info/lg_exclude_file
index ee02e5c09..ee02e5c09 100644
--- a/test/integration/excludeMenu/expected/repo/.git_keep/info/exclude
+++ b/test/integration/excludeMenu/expected/repo/.git_keep/info/lg_exclude_file
diff --git a/test/integration/gitignoreMenu/expected/repo/.gitignore b/test/integration/gitignoreMenu/expected/repo/lg_ignore_file
index 959aad479..959aad479 100644
--- a/test/integration/gitignoreMenu/expected/repo/.gitignore
+++ b/test/integration/gitignoreMenu/expected/repo/lg_ignore_file
diff --git a/test/integration/gitignoreMenu/expected/repo/myfile1 b/test/integration/gitignoreMenu/expected/repo/myfile1
new file mode 100644
index 000000000..a5bce3fd2
--- /dev/null
+++ b/test/integration/gitignoreMenu/expected/repo/myfile1
@@ -0,0 +1 @@
+test1