Browse Source

Initial commit with sg

Simon Waton 5 years ago
parent
commit
34ddd8e524
6 changed files with 818 additions and 1 deletions
  1. 475 0
      .sg/sgLog.txt
  2. 1 1
      README.md
  3. 26 0
      install.sh
  4. 113 0
      lib/SimplyGit/Git.pm
  5. 43 0
      lib/SimplyGit/Shellex.pm
  6. 160 0
      sg

+ 475 - 0
.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 

+ 1 - 1
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.
+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.

+ 26 - 0
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

+ 113 - 0
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);
+
+}

+ 43 - 0
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;

+ 160 - 0
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);
+
+	}
+
+
+}