commit 34ddd8e524fe3d3c88203dd7ccd8958ab5747b3e
Author: Simon Waton <spw01@protonmail.com>
Date: Tue May 14 21:15:39 2019 -0400
Initial commit with sg
diff --git a/.sg/sgLog.txt b/.sg/sgLog.txt
new file mode 100644
index 0000000..75a5b51
--- /dev/null
+++ b/.sg/sgLog.txt
@@ -0,0 +1,475 @@
+2019/05/11 13:49:32 INFO Running: which git 2>&1
+2019/05/11 13:49:32 INFO Returned: 0
+2019/05/11 13:49:32 INFO Running: /usr/bin/git status 2>&1
+2019/05/11 13:49:32 INFO Returned: 0
+2019/05/11 14:06:18 INFO Running: which git 2>&1
+2019/05/11 14:06:18 INFO Returned: 0
+2019/05/11 14:06:18 INFO Running: which git 2>&1
+2019/05/11 14:06:18 INFO Returned: 0
+2019/05/11 14:06:18 INFO Running: /usr/bin/git status --porcelain 2>&1
+2019/05/11 14:06:18 INFO Returned: 0
+2019/05/11 14:07:16 INFO Running: which git 2>&1
+2019/05/11 14:07:16 INFO Returned: 0
+2019/05/11 14:07:16 INFO Running: which git 2>&1
+2019/05/11 14:07:16 INFO Returned: 0
+2019/05/11 14:07:16 INFO Running: /usr/bin/git status --porcelain 2>&1
+2019/05/11 14:07:16 INFO Returned: 0
+2019/05/11 14:07:33 INFO Running: which git 2>&1
+2019/05/11 14:07:33 INFO Returned: 0
+2019/05/11 14:07:33 INFO Running: which git 2>&1
+2019/05/11 14:07:33 INFO Returned: 0
+2019/05/11 14:07:33 INFO Running: /usr/bin/git status --porcelain 2>&1
+2019/05/11 14:07:33 INFO Returned: 0
+2019/05/11 14:08:14 INFO Running: which git 2>&1
+2019/05/11 14:08:14 INFO Returned: 0
+2019/05/11 14:08:14 INFO Running: which git 2>&1
+2019/05/11 14:08:14 INFO Returned: 0
+2019/05/11 14:08:14 INFO Running: /usr/bin/git status --porcelain 2>&1
+2019/05/11 14:08:14 INFO Returned: 0
+2019/05/11 14:12:41 INFO Running: which git 2>&1
+2019/05/11 14:12:41 INFO Returned: 0
+2019/05/11 14:12:41 INFO Running: which git 2>&1
+2019/05/11 14:12:41 INFO Returned: 0
+2019/05/11 14:12:41 INFO Running: /usr/bin/git status -uall --porcelain 2>&1
+2019/05/11 14:12:41 INFO Returned: 0
+2019/05/11 14:13:33 INFO Running: which git 2>&1
+2019/05/11 14:13:33 INFO Returned: 0
+2019/05/11 14:13:33 INFO Running: which git 2>&1
+2019/05/11 14:13:33 INFO Returned: 0
+2019/05/11 14:13:33 INFO Running: /usr/bin/git status -uall --porcelain 2>&1
+2019/05/11 14:13:33 INFO Returned: 0
+2019/05/11 14:14:16 INFO Running: which git 2>&1
+2019/05/11 14:14:16 INFO Returned: 0
+2019/05/11 14:14:16 INFO Running: which git 2>&1
+2019/05/11 14:14:16 INFO Returned: 0
+2019/05/11 14:14:16 INFO Running: /usr/bin/git status -uall --porcelain 2>&1
+2019/05/11 14:14:16 INFO Returned: 0
+2019/05/11 14:15:57 INFO Running: which git 2>&1
+2019/05/11 14:15:57 INFO Returned: 0
+2019/05/11 14:15:57 INFO Running: which git 2>&1
+2019/05/11 14:15:57 INFO Returned: 0
+2019/05/11 14:15:57 INFO Running: /usr/bin/git status -uall --porcelain 2>&1
+2019/05/11 14:15:57 INFO Returned: 0
+2019/05/11 14:17:10 INFO Running: which git 2>&1
+2019/05/11 14:17:10 INFO Returned: 0
+2019/05/11 14:17:10 INFO Running: which git 2>&1
+2019/05/11 14:17:10 INFO Returned: 0
+2019/05/11 14:17:10 INFO Running: /usr/bin/git status -uall --porcelain 2>&1
+2019/05/11 14:17:10 INFO Returned: 0
+2019/05/11 14:17:43 INFO Running: which git 2>&1
+2019/05/11 14:17:43 INFO Returned: 0
+2019/05/11 14:17:43 INFO Running: which git 2>&1
+2019/05/11 14:17:43 INFO Returned: 0
+2019/05/11 14:17:43 INFO Running: /usr/bin/git status -uall --porcelain 2>&1
+2019/05/11 14:17:43 INFO Returned: 0
+2019/05/11 14:18:20 INFO Running: which git 2>&1
+2019/05/11 14:18:20 INFO Returned: 0
+2019/05/11 14:18:20 INFO Running: which git 2>&1
+2019/05/11 14:18:20 INFO Returned: 0
+2019/05/11 14:18:20 INFO Running: /usr/bin/git status -uall --porcelain 2>&1
+2019/05/11 14:18:20 INFO Returned: 0
+2019/05/11 14:18:56 INFO Running: which git 2>&1
+2019/05/11 14:18:56 INFO Returned: 0
+2019/05/11 14:18:56 INFO Running: which git 2>&1
+2019/05/11 14:18:56 INFO Returned: 0
+2019/05/11 14:18:56 INFO Running: /usr/bin/git status -uall --porcelain 2>&1
+2019/05/11 14:18:56 INFO Returned: 0
+2019/05/11 14:22:02 INFO Running: which git 2>&1
+2019/05/11 14:22:02 INFO Returned: 0
+2019/05/11 14:22:02 INFO Running: which git 2>&1
+2019/05/11 14:22:02 INFO Returned: 0
+2019/05/11 14:22:02 INFO Running: /usr/bin/git status -uall --porcelain 2>&1
+2019/05/11 14:22:02 INFO Returned: 0
+2019/05/11 14:22:16 INFO Running: which git 2>&1
+2019/05/11 14:22:16 INFO Returned: 0
+2019/05/11 14:22:16 INFO Running: which git 2>&1
+2019/05/11 14:22:16 INFO Returned: 0
+2019/05/11 14:22:16 INFO Running: /usr/bin/git status -uall --porcelain 2>&1
+2019/05/11 14:22:16 INFO Returned: 0
+2019/05/11 14:22:37 INFO Running: which git 2>&1
+2019/05/11 14:22:37 INFO Returned: 0
+2019/05/11 14:22:37 INFO Running: which git 2>&1
+2019/05/11 14:22:37 INFO Returned: 0
+2019/05/11 14:22:37 INFO Running: /usr/bin/git status -uall --porcelain 2>&1
+2019/05/11 14:22:37 INFO Returned: 0
+2019/05/11 14:23:25 INFO Running: which git 2>&1
+2019/05/11 14:23:25 INFO Returned: 0
+2019/05/11 14:23:25 INFO Running: which git 2>&1
+2019/05/11 14:23:25 INFO Returned: 0
+2019/05/11 14:23:25 INFO Running: /usr/bin/git status -uall --porcelain 2>&1
+2019/05/11 14:23:25 INFO Returned: 0
+2019/05/11 14:23:31 INFO Running: which git 2>&1
+2019/05/11 14:23:31 INFO Returned: 0
+2019/05/11 14:23:31 INFO Running: which git 2>&1
+2019/05/11 14:23:31 INFO Returned: 0
+2019/05/11 14:23:31 INFO Running: /usr/bin/git status -uall --porcelain 2>&1
+2019/05/11 14:23:31 INFO Returned: 0
+2019/05/11 14:23:55 INFO Running: which git 2>&1
+2019/05/11 14:23:55 INFO Returned: 0
+2019/05/11 14:23:55 INFO Running: which git 2>&1
+2019/05/11 14:23:55 INFO Returned: 0
+2019/05/11 14:23:55 INFO Running: /usr/bin/git status -uall --porcelain 2>&1
+2019/05/11 14:23:55 INFO Returned: 0
+2019/05/11 14:24:09 INFO Running: which git 2>&1
+2019/05/11 14:24:09 INFO Returned: 0
+2019/05/11 14:24:09 INFO Running: which git 2>&1
+2019/05/11 14:24:09 INFO Returned: 0
+2019/05/11 14:24:09 INFO Running: /usr/bin/git status -uall --porcelain 2>&1
+2019/05/11 14:24:09 INFO Returned: 0
+2019/05/11 14:24:58 INFO Running: which git 2>&1
+2019/05/11 14:24:58 INFO Returned: 0
+2019/05/11 14:24:58 INFO Running: which git 2>&1
+2019/05/11 14:24:58 INFO Returned: 0
+2019/05/11 14:24:58 INFO Running: /usr/bin/git status -uall --porcelain 2>&1
+2019/05/11 14:24:58 INFO Returned: 0
+2019/05/11 14:25:27 INFO Running: which git 2>&1
+2019/05/11 14:25:27 INFO Returned: 0
+2019/05/11 14:25:27 INFO Running: which git 2>&1
+2019/05/11 14:25:27 INFO Returned: 0
+2019/05/11 14:25:27 INFO Running: /usr/bin/git status -uall --porcelain 2>&1
+2019/05/11 14:25:27 INFO Returned: 0
+2019/05/11 14:25:34 INFO Running: which git 2>&1
+2019/05/11 14:25:34 INFO Returned: 0
+2019/05/11 14:25:34 INFO Running: which git 2>&1
+2019/05/11 14:25:34 INFO Returned: 0
+2019/05/11 14:25:34 INFO Running: /usr/bin/git status -uall --porcelain 2>&1
+2019/05/11 14:25:34 INFO Returned: 0
+2019/05/11 14:26:12 INFO Running: which git 2>&1
+2019/05/11 14:26:12 INFO Returned: 0
+2019/05/11 14:26:12 INFO Running: which git 2>&1
+2019/05/11 14:26:12 INFO Returned: 0
+2019/05/11 14:26:12 INFO Running: /usr/bin/git status -uall --porcelain 2>&1
+2019/05/11 14:26:12 INFO Returned: 0
+2019/05/11 14:28:06 INFO Running: which git 2>&1
+2019/05/11 14:28:06 INFO Returned: 0
+2019/05/11 14:28:06 INFO Running: which git 2>&1
+2019/05/11 14:28:06 INFO Returned: 0
+2019/05/11 14:28:06 INFO Running: /usr/bin/git status -uall --porcelain 2>&1
+2019/05/11 14:28:06 INFO Returned: 0
+2019/05/11 14:29:18 INFO Running: which git 2>&1
+2019/05/11 14:29:18 INFO Returned: 0
+2019/05/11 14:29:18 INFO Running: which git 2>&1
+2019/05/11 14:29:18 INFO Returned: 0
+2019/05/11 14:29:18 INFO Running: /usr/bin/git status -uall --porcelain 2>&1
+2019/05/11 14:29:18 INFO Returned: 0
+2019/05/11 14:29:22 INFO Running: which git 2>&1
+2019/05/11 14:29:22 INFO Returned: 0
+2019/05/11 14:29:22 INFO Running: which git 2>&1
+2019/05/11 14:29:22 INFO Returned: 0
+2019/05/11 14:29:22 INFO Running: /usr/bin/git status -uall --porcelain 2>&1
+2019/05/11 14:29:22 INFO Returned: 0
+2019/05/11 14:37:44 INFO Running: which git 2>&1
+2019/05/11 14:37:44 INFO Returned: 0
+2019/05/11 14:37:44 INFO Running: which git 2>&1
+2019/05/11 14:37:44 INFO Returned: 0
+2019/05/11 14:37:44 INFO Running: /usr/bin/git status -uall --porcelain 2>&1
+2019/05/11 14:37:44 INFO Returned: 0
+2019/05/11 14:37:47 INFO Running: which git 2>&1
+2019/05/11 14:37:47 INFO Returned: 0
+2019/05/11 14:37:47 INFO Running: which git 2>&1
+2019/05/11 14:37:47 INFO Returned: 0
+2019/05/11 14:37:47 INFO Running: /usr/bin/git status -uall --porcelain 2>&1
+2019/05/11 14:37:47 INFO Returned: 0
+2019/05/11 14:38:38 INFO Running: which git 2>&1
+2019/05/11 14:38:38 INFO Returned: 0
+2019/05/11 14:38:38 INFO Running: which git 2>&1
+2019/05/11 14:38:38 INFO Returned: 0
+2019/05/11 14:38:38 INFO Running: /usr/bin/git status -uall --porcelain 2>&1
+2019/05/11 14:38:38 INFO Returned: 0
+2019/05/11 18:36:07 INFO Running: which git 2>&1
+2019/05/11 18:36:07 INFO Returned: 0
+2019/05/11 18:36:07 INFO Running: which git 2>&1
+2019/05/11 18:36:07 INFO Returned: 0
+2019/05/11 18:36:07 INFO Running: /usr/bin/git status -uall --porcelain 2>&1
+2019/05/11 18:36:07 INFO Returned: 0
+2019/05/11 19:02:57 INFO Running: which git 2>&1
+2019/05/11 19:02:57 INFO Returned: 0
+2019/05/11 19:02:57 INFO Running: which git 2>&1
+2019/05/11 19:02:57 INFO Returned: 0
+2019/05/11 19:02:57 INFO Running: /usr/bin/git status -uall --porcelain 2>&1
+2019/05/11 19:02:57 INFO Returned: 0
+2019/05/11 19:03:09 INFO Running: which git 2>&1
+2019/05/11 19:03:09 INFO Returned: 0
+2019/05/11 19:03:09 INFO Running: which git 2>&1
+2019/05/11 19:03:09 INFO Returned: 0
+2019/05/11 19:03:09 INFO Running: /usr/bin/git status -uall --porcelain 2>&1
+2019/05/11 19:03:09 INFO Returned: 0
+2019/05/11 19:14:11 INFO Running: which git 2>&1
+2019/05/11 19:14:11 INFO Returned: 0
+2019/05/11 19:14:11 INFO Running: which git 2>&1
+2019/05/11 19:14:11 INFO Returned: 0
+2019/05/11 19:14:11 INFO Running: /usr/bin/git status -uall --porcelain 2>&1
+2019/05/11 19:14:11 INFO Returned: 0
+2019/05/11 19:15:45 INFO Running: which git 2>&1
+2019/05/11 19:15:45 INFO Returned: 0
+2019/05/11 19:15:45 INFO Running: which git 2>&1
+2019/05/11 19:15:45 INFO Returned: 0
+2019/05/11 19:15:45 INFO Running: /usr/bin/git status -uall --porcelain 2>&1
+2019/05/11 19:15:45 INFO Returned: 0
+2019/05/11 19:20:40 INFO Running: which git 2>&1
+2019/05/11 19:20:40 INFO Returned: 0
+2019/05/11 19:20:40 INFO Running: which git 2>&1
+2019/05/11 19:20:40 INFO Returned: 0
+2019/05/11 19:20:40 INFO Running: /usr/bin/git status -uall --porcelain 2>&1
+2019/05/11 19:20:40 INFO Returned: 0
+2019/05/11 20:48:53 INFO Running: which git 2>&1
+2019/05/11 20:48:53 ERROR Returned: 0
+2019/05/11 20:48:53 INFO Running: which git 2>&1
+2019/05/11 20:48:53 ERROR Returned: 0
+2019/05/11 20:48:53 INFO Running: /usr/bin/git status -uall --porcelain 2>&1
+2019/05/11 20:48:53 ERROR Returned: 0
+2019/05/11 20:49:07 INFO Running: which git 2>&1
+2019/05/11 20:49:07 ERROR Returned: 0
+2019/05/11 20:49:07 INFO Running: which git 2>&1
+2019/05/11 20:49:07 ERROR Returned: 0
+2019/05/11 20:49:07 INFO Running: /usr/bin/git status -uall --porcelain 2>&1
+2019/05/11 20:49:07 ERROR Returned: 0
+2019/05/11 20:51:24 INFO Running: which git 2>&1
+2019/05/11 20:51:24 ERROR Returned: 0
+2019/05/11 20:51:24 INFO Running: which git 2>&1
+2019/05/11 20:51:24 ERROR Returned: 0
+2019/05/11 20:51:24 INFO Running: /usr/bin/git status -uall --porcelain 2>&1
+2019/05/11 20:51:24 ERROR Returned: 0
+2019/05/11 20:51:37 INFO Running: which git 2>&1
+2019/05/11 20:51:37 ERROR Returned: 0
+2019/05/11 20:51:37 INFO Running: /usr/bin/git add install.sh 2>&1
+2019/05/11 20:51:37 ERROR Returned: 0
+2019/05/11 20:51:37 INFO Running: /usr/bin/git add lib/SimplyGit/Git.pm 2>&1
+2019/05/11 20:51:37 ERROR Returned: 0
+2019/05/11 20:51:37 INFO Running: /usr/bin/git add lib/SimplyGit/Shellex.pm 2>&1
+2019/05/11 20:51:37 ERROR Returned: 0
+2019/05/11 20:51:37 INFO Running: /usr/bin/git add sg 2>&1
+2019/05/11 20:51:37 ERROR Returned: 0
+2019/05/11 20:51:37 INFO Running: /usr/bin/git add README.md 2>&1
+2019/05/11 20:51:37 ERROR Returned: 0
+2019/05/11 20:51:42 INFO Running: which git 2>&1
+2019/05/11 20:51:42 ERROR Returned: 0
+2019/05/11 20:51:42 INFO Running: which git 2>&1
+2019/05/11 20:51:42 ERROR Returned: 0
+2019/05/11 20:51:42 INFO Running: /usr/bin/git status -uall --porcelain 2>&1
+2019/05/11 20:51:42 ERROR Returned: 0
+2019/05/11 20:58:38 INFO Running: which git 2>&1
+2019/05/11 20:58:38 ERROR Returned: 0
+2019/05/11 20:58:38 INFO Running: which git 2>&1
+2019/05/11 20:58:38 ERROR Returned: 0
+2019/05/11 20:58:38 INFO Running: /usr/bin/git status -uall --porcelain 2>&1
+2019/05/11 20:58:38 ERROR Returned: 0
+2019/05/11 21:01:29 INFO Running: which git 2>&1
+2019/05/11 21:01:29 ERROR Returned: 0
+2019/05/11 21:01:29 INFO Running: which git 2>&1
+2019/05/11 21:01:29 ERROR Returned: 0
+2019/05/11 21:01:29 INFO Running: /usr/bin/git status -uall --porcelain 2>&1
+2019/05/11 21:01:29 ERROR Returned: 0
+2019/05/14 09:56:21 INFO Running: which git 2>&1
+2019/05/14 09:56:21 ERROR Returned: 0
+2019/05/14 09:56:21 INFO Running: which git 2>&1
+2019/05/14 09:56:21 ERROR Returned: 0
+2019/05/14 09:56:21 INFO Running: /usr/bin/git status -uall --porcelain 2>&1
+2019/05/14 09:56:21 ERROR Returned: 0
+2019/05/14 19:10:23 INFO Running: which git 2>&1
+2019/05/14 19:10:23 ERROR Returned: 0
+2019/05/14 19:10:23 INFO Running: which git 2>&1
+2019/05/14 19:10:23 ERROR Returned: 0
+2019/05/14 19:10:23 INFO Running: /usr/bin/git status -uall --porcelain 2>&1
+2019/05/14 19:10:23 ERROR Returned: 0
+2019/05/14 19:10:56 INFO Running: which git 2>&1
+2019/05/14 19:10:56 ERROR Returned: 0
+2019/05/14 19:10:56 INFO Running: which git 2>&1
+2019/05/14 19:10:56 ERROR Returned: 0
+2019/05/14 19:10:56 INFO Running: /usr/bin/git status -uall --porcelain 2>&1
+2019/05/14 19:10:56 ERROR Returned: 0
+2019/05/14 19:11:33 INFO Running: which git 2>&1
+2019/05/14 19:11:33 ERROR Returned: 0
+2019/05/14 19:11:33 INFO Running: which git 2>&1
+2019/05/14 19:11:33 ERROR Returned: 0
+2019/05/14 19:11:33 INFO Running: /usr/bin/git status -uall --porcelain 2>&1
+2019/05/14 19:11:33 ERROR Returned: 0
+2019/05/14 19:12:49 INFO Running: which git 2>&1
+2019/05/14 19:12:49 ERROR Returned: 0
+2019/05/14 19:12:49 INFO Running: which git 2>&1
+2019/05/14 19:12:49 ERROR Returned: 0
+2019/05/14 19:12:49 INFO Running: /usr/bin/git status -uall --porcelain 2>&1
+2019/05/14 19:12:49 ERROR Returned: 0
+2019/05/14 19:14:13 INFO Running: which git 2>&1
+2019/05/14 19:14:13 ERROR Returned: 0
+2019/05/14 19:14:13 INFO Running: which git 2>&1
+2019/05/14 19:14:13 ERROR Returned: 0
+2019/05/14 19:14:13 INFO Running: /usr/bin/git status -uall --porcelain 2>&1
+2019/05/14 19:14:13 ERROR Returned: 0
+2019/05/14 19:16:26 INFO Running: which git 2>&1
+2019/05/14 19:16:26 ERROR Returned: 0
+2019/05/14 19:16:26 INFO Running: which git 2>&1
+2019/05/14 19:16:26 ERROR Returned: 0
+2019/05/14 19:16:26 INFO Running: /usr/bin/git status -uall --porcelain 2>&1
+2019/05/14 19:16:26 ERROR Returned: 0
+2019/05/14 19:16:31 INFO Running: which git 2>&1
+2019/05/14 19:16:31 ERROR Returned: 0
+2019/05/14 19:16:31 INFO Running: which git 2>&1
+2019/05/14 19:16:31 ERROR Returned: 0
+2019/05/14 19:16:31 INFO Running: /usr/bin/git status -uall --porcelain 2>&1
+2019/05/14 19:16:31 ERROR Returned: 0
+2019/05/14 19:16:35 INFO Running: which git 2>&1
+2019/05/14 19:16:35 ERROR Returned: 0
+2019/05/14 19:16:35 INFO Running: which git 2>&1
+2019/05/14 19:16:35 ERROR Returned: 0
+2019/05/14 19:16:35 INFO Running: /usr/bin/git status -uall --porcelain 2>&1
+2019/05/14 19:16:35 ERROR Returned: 0
+2019/05/14 19:28:13 INFO Running: which git 2>&1
+2019/05/14 19:28:13 ERROR Returned: 0
+2019/05/14 19:28:13 INFO Running: which git 2>&1
+2019/05/14 19:28:13 ERROR Returned: 0
+2019/05/14 19:28:13 INFO Running: /usr/bin/git status -uall --porcelain 2>&1
+2019/05/14 19:28:13 ERROR Returned: 0
+2019/05/14 19:55:34 INFO Running: which git 2>&1
+2019/05/14 19:55:34 ERROR Returned: 0
+2019/05/14 19:55:34 INFO Running: which git 2>&1
+2019/05/14 19:55:34 ERROR Returned: 0
+2019/05/14 19:55:34 INFO Running: /usr/bin/git status -uall --porcelain 2>&1
+2019/05/14 19:55:34 ERROR Returned: 0
+2019/05/14 20:04:44 INFO Running: which git 2>&1
+2019/05/14 20:04:44 ERROR Returned: 0
+2019/05/14 20:04:44 INFO Running: which git 2>&1
+2019/05/14 20:04:44 ERROR Returned: 0
+2019/05/14 20:04:44 INFO Running: /usr/bin/git status -uall --porcelain 2>&1
+2019/05/14 20:04:44 ERROR Returned: 0
+2019/05/14 20:11:19 INFO Running: which git 2>&1
+2019/05/14 20:11:19 ERROR Returned: 0
+2019/05/14 20:11:19 INFO Running: which git 2>&1
+2019/05/14 20:11:19 ERROR Returned: 0
+2019/05/14 20:11:19 INFO Running: /usr/bin/git status -uall --porcelain 2>&1
+2019/05/14 20:11:19 ERROR Returned: 0
+2019/05/14 20:13:10 INFO Running: which git 2>&1
+2019/05/14 20:13:10 ERROR Returned: 0
+2019/05/14 20:13:10 INFO Running: which git 2>&1
+2019/05/14 20:13:10 ERROR Returned: 0
+2019/05/14 20:13:10 INFO Running: /usr/bin/git status -uall --porcelain 2>&1
+2019/05/14 20:13:10 ERROR Returned: 0
+2019/05/14 20:15:00 INFO Running: which git 2>&1
+2019/05/14 20:15:00 ERROR Returned: 0
+2019/05/14 20:15:00 INFO Running: which git 2>&1
+2019/05/14 20:15:00 ERROR Returned: 0
+2019/05/14 20:15:00 INFO Running: /usr/bin/git status -uall --porcelain 2>&1
+2019/05/14 20:15:00 ERROR Returned: 0
+2019/05/14 20:17:55 INFO Running: which git 2>&1
+2019/05/14 20:17:55 ERROR Returned: 0
+2019/05/14 20:17:55 INFO Running: which git 2>&1
+2019/05/14 20:17:55 ERROR Returned: 0
+2019/05/14 20:17:55 INFO Running: /usr/bin/git status -uall --porcelain 2>&1
+2019/05/14 20:17:55 ERROR Returned: 0
+2019/05/14 20:18:40 INFO Running: which git 2>&1
+2019/05/14 20:18:40 ERROR Returned: 0
+2019/05/14 20:18:40 INFO Running: which git 2>&1
+2019/05/14 20:18:40 ERROR Returned: 0
+2019/05/14 20:18:40 INFO Running: /usr/bin/git status -uall --porcelain 2>&1
+2019/05/14 20:18:40 ERROR Returned: 0
+2019/05/14 20:19:08 INFO Running: which git 2>&1
+2019/05/14 20:19:08 ERROR Returned: 0
+2019/05/14 20:19:08 INFO Running: which git 2>&1
+2019/05/14 20:19:08 ERROR Returned: 0
+2019/05/14 20:19:08 INFO Running: /usr/bin/git status -uall --porcelain 2>&1
+2019/05/14 20:19:08 ERROR Returned: 0
+2019/05/14 20:26:29 INFO Running: which git 2>&1
+2019/05/14 20:26:29 ERROR Returned: 0
+2019/05/14 20:26:29 INFO Running: which git 2>&1
+2019/05/14 20:26:29 ERROR Returned: 0
+2019/05/14 20:26:29 INFO Running: /usr/bin/git status -uall --porcelain 2>&1
+2019/05/14 20:26:29 ERROR Returned: 0
+2019/05/14 20:27:38 INFO Running: which git 2>&1
+2019/05/14 20:27:38 ERROR Returned: 0
+2019/05/14 20:27:38 INFO Running: which git 2>&1
+2019/05/14 20:27:38 ERROR Returned: 0
+2019/05/14 20:27:38 INFO Running: /usr/bin/git status -uall --porcelain 2>&1
+2019/05/14 20:27:38 ERROR Returned: 0
+2019/05/14 20:34:19 INFO Running: which git 2>&1
+2019/05/14 20:34:19 ERROR Returned: 0
+2019/05/14 20:34:19 INFO Running: which git 2>&1
+2019/05/14 20:34:19 ERROR Returned: 0
+2019/05/14 20:34:19 INFO Running: /usr/bin/git status -uall --porcelain 2>&1
+2019/05/14 20:34:19 ERROR Returned: 0
+2019/05/14 20:37:40 INFO Running: which git 2>&1
+2019/05/14 20:37:40 ERROR Returned: 0
+2019/05/14 20:37:40 INFO Running: which git 2>&1
+2019/05/14 20:37:40 ERROR Returned: 0
+2019/05/14 20:37:40 INFO Running: /usr/bin/git status -uall --porcelain 2>&1
+2019/05/14 20:37:40 ERROR Returned: 0
+2019/05/14 20:37:47 INFO Running: which git 2>&1
+2019/05/14 20:37:47 ERROR Returned: 0
+2019/05/14 20:37:47 INFO Running: which git 2>&1
+2019/05/14 20:37:47 ERROR Returned: 0
+2019/05/14 20:37:47 INFO Running: /usr/bin/git status -uall --porcelain 2>&1
+2019/05/14 20:37:47 ERROR Returned: 0
+2019/05/14 20:38:27 INFO Running: which git 2>&1
+2019/05/14 20:38:27 ERROR Returned: 0
+2019/05/14 20:38:27 INFO Running: which git 2>&1
+2019/05/14 20:38:27 ERROR Returned: 0
+2019/05/14 20:38:27 INFO Running: /usr/bin/git status -uall --porcelain 2>&1
+2019/05/14 20:38:27 ERROR Returned: 0
+2019/05/14 20:38:30 INFO Running: which git 2>&1
+2019/05/14 20:38:30 ERROR Returned: 0
+2019/05/14 20:38:30 INFO Running: which git 2>&1
+2019/05/14 20:38:30 ERROR Returned: 0
+2019/05/14 20:38:30 INFO Running: /usr/bin/git status -uall --porcelain 2>&1
+2019/05/14 20:38:30 ERROR Returned: 0
+2019/05/14 20:38:34 INFO Running: which git 2>&1
+2019/05/14 20:38:34 ERROR Returned: 0
+2019/05/14 20:38:34 INFO Running: which git 2>&1
+2019/05/14 20:38:34 ERROR Returned: 0
+2019/05/14 20:38:34 INFO Running: /usr/bin/git status -uall --porcelain 2>&1
+2019/05/14 20:38:34 ERROR Returned: 0
+2019/05/14 20:40:07 INFO Running: which git 2>&1
+2019/05/14 20:40:07 ERROR Returned: 0
+2019/05/14 20:40:07 INFO Running: which git 2>&1
+2019/05/14 20:40:07 ERROR Returned: 0
+2019/05/14 20:40:07 INFO Running: /usr/bin/git status -uall --porcelain 2>&1
+2019/05/14 20:40:07 ERROR Returned: 0
+2019/05/14 20:41:08 INFO Running: which git 2>&1
+2019/05/14 20:41:08 ERROR Returned: 0
+2019/05/14 20:41:08 INFO Running: which git 2>&1
+2019/05/14 20:41:08 ERROR Returned: 0
+2019/05/14 20:41:08 INFO Running: /usr/bin/git status -uall --porcelain 2>&1
+2019/05/14 20:41:08 ERROR Returned: 0
+2019/05/14 20:43:25 INFO Running: which git 2>&1
+2019/05/14 20:43:25 ERROR Returned: 0
+2019/05/14 20:43:25 INFO Running: which git 2>&1
+2019/05/14 20:43:25 ERROR Returned: 0
+2019/05/14 20:43:25 INFO Running: /usr/bin/git status -uall --porcelain 2>&1
+2019/05/14 20:43:25 ERROR Returned: 0
+2019/05/14 20:44:07 INFO Running: which git 2>&1
+2019/05/14 20:44:07 ERROR Returned: 0
+2019/05/14 20:44:07 INFO Running: which git 2>&1
+2019/05/14 20:44:07 ERROR Returned: 0
+2019/05/14 20:44:07 INFO Running: /usr/bin/git status -uall --porcelain 2>&1
+2019/05/14 20:44:07 ERROR Returned: 0
+2019/05/14 20:45:13 INFO Running: which git 2>&1
+2019/05/14 20:45:13 ERROR Returned: 0
+2019/05/14 20:45:13 INFO Running: which git 2>&1
+2019/05/14 20:45:13 ERROR Returned: 0
+2019/05/14 20:45:13 INFO Running: /usr/bin/git status -uall --porcelain 2>&1
+2019/05/14 20:45:13 ERROR Returned: 0
+2019/05/14 20:45:27 INFO Running: which git 2>&1
+2019/05/14 20:45:27 ERROR Returned: 0
+2019/05/14 20:45:27 INFO Running: which git 2>&1
+2019/05/14 20:45:27 ERROR Returned: 0
+2019/05/14 20:45:27 INFO Running: /usr/bin/git status -uall --porcelain 2>&1
+2019/05/14 20:45:27 ERROR Returned: 0
+2019/05/14 21:13:18 INFO Running: which git 2>&1
+2019/05/14 21:13:18 ERROR Returned: 0
+2019/05/14 21:13:18 INFO Running: which git 2>&1
+2019/05/14 21:13:18 ERROR Returned: 0
+2019/05/14 21:13:18 INFO Running: /usr/bin/git status -uall --porcelain 2>&1
+2019/05/14 21:13:18 ERROR Returned: 0
+2019/05/14 21:13:25 INFO Running: which git 2>&1
+2019/05/14 21:13:25 ERROR Returned: 0
+2019/05/14 21:13:25 INFO Running: which git 2>&1
+2019/05/14 21:13:25 ERROR Returned: 0
+2019/05/14 21:13:25 INFO Running: /usr/bin/git status -uall --porcelain 2>&1
+2019/05/14 21:13:25 ERROR Returned: 0
+2019/05/14 21:15:27 INFO Running: which git 2>&1
+2019/05/14 21:15:27 ERROR Returned: 0
+2019/05/14 21:15:27 INFO Running: which git 2>&1
+2019/05/14 21:15:27 ERROR Returned: 0
+2019/05/14 21:15:27 INFO Running: /usr/bin/git status -uall --porcelain 2>&1
+2019/05/14 21:15:27 ERROR Returned: 0
+2019/05/14 21:15:33 INFO Running: which git 2>&1
+2019/05/14 21:15:33 ERROR Returned: 0
+2019/05/14 21:15:33 INFO Running: /usr/bin/git add .sg/sgLog.txt 2>&1
diff --git a/README.md b/README.md
index 7a48f84..a24f5bc 100644
--- a/README.md
+++ b/README.md
@@ -1,3 +1,3 @@
# simply-git
-Project to abstract some of the weirder git operations. Should always be able to be used alongside git, as opposed to trying to replace it outright.
\ No newline at end of file
+Project to abstract some of the weirder git operations. Should always be able to be used alongside git, as opposed to trying to replace it outright.
diff --git a/install.sh b/install.sh
new file mode 100755
index 0000000..8785b5a
--- /dev/null
+++ b/install.sh
@@ -0,0 +1,26 @@
+#!/bin/bash
+
+installDir="$HOME/.local/bin/"
+libDir="/usr/local/lib/SimplyGit/"
+
+if [ $UID -ne 0 ]; then
+ echo "Run installer as root"
+ echo "Need to copy stuff to $libDir";
+ exit 1
+fi
+
+if [ ! -d $installDir ]; then
+ echo "Making $installDir"
+ mkdir -p $installDir
+fi
+
+if [ ! -d $libDir ]; then
+ echo "Making $libDir"
+ mkdir -p $libDir
+fi
+
+echo "Copying bin"
+cp ./sg $installDir
+
+echo "Copying libs"
+cp ./lib/SimplyGit/* $libDir
diff --git a/lib/SimplyGit/Git.pm b/lib/SimplyGit/Git.pm
new file mode 100644
index 0000000..11de835
--- /dev/null
+++ b/lib/SimplyGit/Git.pm
@@ -0,0 +1,113 @@
+package SimplyGit::Git;
+use strict;
+use warnings;
+use Log::Log4perl qw(:easy);
+use lib ".";
+use SimplyGit::Shellex qw(shellex findBin);
+use Exporter qw(import);
+our @EXPORT_OK = qw(readConfig getStatus returnState addFiles commitChanges pushChanges);
+
+sub readConfig($) {
+
+ # TODO: This sub is probably not really needed for what I'm trying to do
+ # git itself already parses this config...
+ my $path = shift;
+ my $logger = shift;
+ # TODO: Should pass in logger object as opposed to printing
+ if ( ! -d $path ) {
+ print "readConfig did not recieve expected dir, exiting...\n";
+ exit 1;
+ }
+ my $gitConfigPath = $path . "/" . ".git/config";
+ my $catCmd = findBin("cat",$logger);
+ my @configLines = split("\n",shellex("$catCmd $gitConfigPath",$logger));
+ my %gitConfig;
+ my @valueLines;
+ my $headerCounter = 0;
+ foreach my $line ( @configLines ) {
+ if ( $line =~ m/\[(.*)\]/ ) {
+ #$valueLine =~ /\t(.*)\ =\ (.*)$/;
+ $gitConfig{$1} = "";
+ } else {
+ push(@valueLines, $line);
+ }
+
+ }
+
+ return %gitConfig;
+
+}
+
+sub getStatus {
+
+ my $logger = shift;
+ my $gitCmd = findBin("git",$logger);
+ my $status = shellex("$gitCmd status -uall --porcelain",$logger);
+ chomp $status;
+ return $status;
+
+}
+
+sub returnState {
+
+ my $logger = shift;
+ my $gitCmd = findBin("git",$logger);
+ my $currentStatus = getStatus($logger);
+ my @statusLines = split("\n", $currentStatus);
+ my @untracked;
+ my @modified;
+ my @added;
+ foreach my $file ( @statusLines ) {
+ $file =~ m/^([A-Z?]{1,2})\ {1,2}(.*)/;
+ my $fileAttrs = $1;
+ my $filename = $2;
+ my @attrs = split("",$fileAttrs);
+ foreach my $attr ( @attrs ) {
+
+ if ( $attr =~ m/\?/ ) {
+ push(@untracked, $filename) unless grep $_ eq $filename, @untracked;
+ }
+
+ if ( $attr =~ m/[M]/ ) {
+ push(@modified, $filename) unless grep $_ eq $filename, @modified;
+ }
+
+ if ( $attr =~ m/[A]/ ) {
+ push(@added, $filename) unless grep $_ eq $filename, @added;
+ }
+
+ }
+ }
+
+ return ( \@untracked, \@modified, \@added );
+
+}
+
+sub addFiles {
+
+ my $filesToAddRef = shift;
+ my $logger = shift;
+ my $gitCmd = findBin("git",$logger);
+ foreach my $file ( @$filesToAddRef ) {
+ shellex("$gitCmd add $file",$logger);
+ }
+
+}
+
+sub commitChanges {
+
+ my $commitMsg = shift;
+ chomp $commitMsg;
+ my $logger = shift;
+ my $gitCmd = findBin("git",$logger);
+ shellex("$gitCmd commit -m \"$commitMsg\"",$logger);
+
+}
+
+sub pushChanges {
+
+ my $logger = shift;
+ my $gitCmd = findBin("git",$logger);
+ shellex("$gitCmd push",$logger);
+
+}
diff --git a/lib/SimplyGit/Shellex.pm b/lib/SimplyGit/Shellex.pm
new file mode 100644
index 0000000..745898d
--- /dev/null
+++ b/lib/SimplyGit/Shellex.pm
@@ -0,0 +1,43 @@
+package SimplyGit::Shellex;
+use strict;
+use warnings;
+use Log::Log4perl qw(:easy);
+use Exporter qw(import);
+our @EXPORT_OK = qw(shellex findBin);
+
+sub shellex {
+
+ my $cmd = shift;
+ my $logger = shift;
+ if ( defined $logger && $logger ne '' ) {
+ $logger->info("Running: $cmd 2>&1");
+ }
+
+ my $output = `$cmd 2>&1`;
+ my $rc = $?;
+ if ( defined $logger && $logger ne '' ) {
+ $logger->error("Returned: $rc");
+ }
+
+ return $output;
+
+}
+
+sub findBin {
+
+ my $cmd = shift;
+ my $logger = shift;
+ my $binPath = shellex("which $cmd",$logger);
+ my $rc = $?;
+ chomp $binPath;
+ if ( $rc != 0 ) {
+ if ( defined $logger && $logger ne '' ) {
+ $logger->error("Couldn't find a path for $cmd, exiting...");
+ }
+ exit 1;
+ } else {
+ return $binPath;
+ }
+
+}
+1;
diff --git a/sg b/sg
new file mode 100755
index 0000000..dab67b0
--- /dev/null
+++ b/sg
@@ -0,0 +1,160 @@
+#!/usr/bin/perl
+
+use strict;
+use warnings;
+
+use Getopt::Long qw(GetOptions);
+use Log::Log4perl qw(:easy);
+# TODO: This needs to be scoped properly
+use lib "/usr/local/lib";
+use SimplyGit::Shellex qw(shellex findBin);
+use SimplyGit::Git qw(readConfig getStatus returnState addFiles commitChanges pushChanges);
+
+sub initSG($) {
+
+ my $sgDir = shift;
+ my $pwdCmd = findBin("pwd");
+ my $pwd = shellex($pwdCmd);
+ chomp $pwd;
+ my $path = $pwd . "/" . $sgDir;
+ my $logFile = $pwd . "/" . $sgDir . "/" . "sgLog.txt";
+ if ( ! -d $path ) {
+ print "Creating $path\n";
+ shellex("mkdir $path");
+ }
+
+ if ( ! -f $logFile ) {
+ print "Creating $logFile\n";
+ shellex("touch $logFile");
+ }
+
+ return ( $path, $logFile );
+
+}
+
+my ( $sgPath, $sgLogFile ) = initSG(".sg");
+sub getLogName { return $sgLogFile; };
+my $log_conf = q(
+ log4perl.rootLogger = INFO, LOG1
+ log4perl.appender.LOG1 = Log::Log4perl::Appender::File
+ log4perl.appender.LOG1.filename = sub { getLogName(); }
+ log4perl.appender.LOG1.mode = append
+ log4perl.appender.LOG1.layout = Log::Log4perl::Layout::PatternLayout
+ log4perl.appender.LOG1.layout.ConversionPattern = %d %p %m %n
+);
+
+Log::Log4perl::init(\$log_conf);
+my $logger = get_logger();
+
+my %args;
+GetOptions(
+ \%args,
+ 'push-all',
+ 'interactive',
+ 'view',
+ 'reset-from-master',
+ 'branch-from-master',
+);
+
+
+if ( defined $args{'view'} ) {
+ my ( $untrackedRef, $modifiedRef, $addedRef ) = returnState($logger);
+ my $swpWarning = "\t# Likely a Vi .swp file";
+ print "Untracked files:\n";
+ foreach my $file ( @$untrackedRef ) {
+ if ( $file =~ m/.swp/ ) {
+ print "\t$file $swpWarning\n";
+ } else {
+ print "\t$file\n";
+ }
+ }
+ print "Modified files:\n";
+ foreach my $file ( @$modifiedRef ) {
+ if ( $file =~ m/.swp/ ) {
+ print "\t$file $swpWarning\n";
+ } else {
+ print "\t$file\n";
+ }
+ }
+
+ print "Files added to commit:\n";
+ foreach my $file ( @$addedRef ) {
+ if ( $file =~ m/.swp/ ) {
+ print "\t$file $swpWarning\n";
+ } else {
+ print "\t$file\n";
+ }
+ }
+
+}
+
+if ( defined $args{'push-all'} ) {
+
+ my ( $untrackedRef, $modifiedRef ) = returnState($logger);
+ my @files;
+ push(@files,@$untrackedRef); push(@files,@$modifiedRef);
+ my @filesToCommit;
+ if ( defined $args{'interactive'} ) {
+ foreach my $file ( @files ) {
+ print "Add $file to commit (y/n): ";
+ my $input = <STDIN>;
+ chomp $input;
+ if ( $input =~ m/^Y|^y/ ) {
+ push(@filesToCommit,$file);
+ } else {
+ next;
+ }
+ }
+
+ } else {
+ @filesToCommit = @files;
+ }
+
+ print "Commiting the following files:\n";
+ foreach my $file ( @filesToCommit ) {
+ print "\t$file\n";
+ }
+
+ if ( defined $args{'interactive'} ) {
+ print "Does this look correct (y/n) : ";
+ my $input = <STDIN>;
+ chomp $input;
+ if ( $input !~ m/^Y|^y/ ) {
+ print "Canceling...\n";
+ exit 1;
+ }
+ }
+
+ addFiles(\@filesToCommit,$logger);
+
+ if ( defined $args{'interactive'} ) {
+ print "Enter a commit message: ";
+ my $input = <STDIN>;
+ chomp $input;
+ commitChanges($input,$logger);
+ } else {
+ my $epoch = time();
+ my $commitMsg = "Generic Commit at $epoch";
+ commitChanges($commitMsg,$logger);
+ }
+
+ if ( defined $args{'interactive'} ) {
+ print "Push changes? (y/n): ";
+ my $input = <STDIN>;
+ chomp $input;
+ if ( $input !~ m/^Y|^y/ ) {
+ # TODO: Unstage changes?
+ print "Canceling...\n";
+ exit 1;
+ }
+
+ pushChanges($logger);
+
+ } else {
+
+ pushChanges($logger);
+
+ }
+
+
+}