summaryrefslogtreecommitdiffstats
path: root/pkg/integration/components/shell.go
diff options
context:
space:
mode:
Diffstat (limited to 'pkg/integration/components/shell.go')
-rw-r--r--pkg/integration/components/shell.go83
1 files changed, 83 insertions, 0 deletions
diff --git a/pkg/integration/components/shell.go b/pkg/integration/components/shell.go
new file mode 100644
index 000000000..ee57cf401
--- /dev/null
+++ b/pkg/integration/components/shell.go
@@ -0,0 +1,83 @@
+package components
+
+import (
+ "fmt"
+ "io/ioutil"
+ "os"
+
+ "github.com/jesseduffield/lazygit/pkg/secureexec"
+ "github.com/mgutz/str"
+)
+
+// this is for running shell commands, mostly for the sake of setting up the repo
+// but you can also run the commands from within lazygit to emulate things happening
+// in the background.
+type Shell struct{}
+
+func NewShell() *Shell {
+ return &Shell{}
+}
+
+func (s *Shell) RunCommand(cmdStr string) *Shell {
+ args := str.ToArgv(cmdStr)
+ cmd := secureexec.Command(args[0], args[1:]...)
+ cmd.Env = os.Environ()
+
+ output, err := cmd.CombinedOutput()
+ if err != nil {
+ panic(fmt.Sprintf("error running command: %s\n%s", cmdStr, string(output)))
+ }
+
+ return s
+}
+
+func (s *Shell) CreateFile(path string, content string) *Shell {
+ err := ioutil.WriteFile(path, []byte(content), 0o644)
+ if err != nil {
+ panic(fmt.Sprintf("error creating file: %s\n%s", path, err))
+ }
+
+ return s
+}
+
+func (s *Shell) NewBranch(name string) *Shell {
+ return s.RunCommand("git checkout -b " + name)
+}
+
+func (s *Shell) GitAdd(path string) *Shell {
+ return s.RunCommand(fmt.Sprintf("git add \"%s\"", path))
+}
+
+func (s *Shell) GitAddAll() *Shell {
+ return s.RunCommand("git add -A")
+}
+
+func (s *Shell) Commit(message string) *Shell {
+ return s.RunCommand(fmt.Sprintf("git commit -m \"%s\"", message))
+}
+
+func (s *Shell) EmptyCommit(message string) *Shell {
+ return s.RunCommand(fmt.Sprintf("git commit --allow-empty -m \"%s\"", message))
+}
+
+// convenience method for creating a file and adding it
+func (s *Shell) CreateFileAndAdd(fileName string, fileContents string) *Shell {
+ return s.
+ CreateFile(fileName, fileContents).
+ GitAdd(fileName)
+}
+
+// creates commits 01, 02, 03, ..., n with a new file in each
+// The reason for padding with zeroes is so that it's easier to do string
+// matches on the commit messages when there are many of them
+func (s *Shell) CreateNCommits(n int) *Shell {
+ for i := 1; i <= n; i++ {
+ s.CreateFileAndAdd(
+ fmt.Sprintf("file%02d.txt", i),
+ fmt.Sprintf("file%02d content", i),
+ ).
+ Commit(fmt.Sprintf("commit %02d", i))
+ }
+
+ return s
+}