├── .gitignore
├── .travis.yml
├── LICENSE
├── README.md
├── git-stack
├── images
└── demo.png
├── package-lock.json
├── package.json
└── script
└── transfer.sh
/.gitignore:
--------------------------------------------------------------------------------
1 | # Logs
2 | logs
3 | *.log
4 | npm-debug.log*
5 | yarn-debug.log*
6 | yarn-error.log*
7 |
8 | # Runtime data
9 | pids
10 | *.pid
11 | *.seed
12 | *.pid.lock
13 |
14 | # Directory for instrumented libs generated by jscoverage/JSCover
15 | lib-cov
16 |
17 | # Coverage directory used by tools like istanbul
18 | coverage
19 |
20 | # nyc test coverage
21 | .nyc_output
22 |
23 | # Grunt intermediate storage (http://gruntjs.com/creating-plugins#storing-task-files)
24 | .grunt
25 |
26 | # Bower dependency directory (https://bower.io/)
27 | bower_components
28 |
29 | # node-waf configuration
30 | .lock-wscript
31 |
32 | # Compiled binary addons (https://nodejs.org/api/addons.html)
33 | build/Release
34 |
35 | # Dependency directories
36 | node_modules/
37 | jspm_packages/
38 |
39 | # TypeScript v1 declaration files
40 | typings/
41 |
42 | # Optional npm cache directory
43 | .npm
44 |
45 | # Optional eslint cache
46 | .eslintcache
47 |
48 | # Optional REPL history
49 | .node_repl_history
50 |
51 | # Output of 'npm pack'
52 | *.tgz
53 |
54 | # Yarn Integrity file
55 | .yarn-integrity
56 |
57 | # dotenv environment variables file
58 | .env
59 |
60 | # next.js build output
61 | .next
62 |
--------------------------------------------------------------------------------
/.travis.yml:
--------------------------------------------------------------------------------
1 | sudo: false
2 |
3 | language: bash
4 |
5 | # Trigger Travis CI only when master branch is pushed, ignoring develop branch
6 | branches:
7 | only:
8 | - master
9 |
10 | script:
11 | - bash -c 'echo 'complete''
12 |
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | MIT License
2 |
3 | Copyright (c) 2018 Hank Chan
4 |
5 | Permission is hereby granted, free of charge, to any person obtaining a copy
6 | of this software and associated documentation files (the "Software"), to deal
7 | in the Software without restriction, including without limitation the rights
8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 | copies of the Software, and to permit persons to whom the Software is
10 | furnished to do so, subject to the following conditions:
11 |
12 | The above copyright notice and this permission notice shall be included in all
13 | copies or substantial portions of the Software.
14 |
15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21 | SOFTWARE.
22 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # git-stack  [](https://travis-ci.org/hankchanocd/git-stack) [](http://commitizen.github.io/cz-cli/) [](https://github.com/hankchanocd/git-stack/issues) [](https://www.codefactor.io/repository/github/hankchanocd/git-stack)
2 |
3 | > Compare against master branch with fzf
4 |
5 |
6 |
7 |
8 |
9 | Have a quick glance at the differences between `develop` and `master` branch with `git stack`.
10 |
11 | ## Install
12 |
13 | Clone the repo, and run `npm run transfer` to transfer `./git-stack` to `~/bin`, or manually invoke `./script/transfer.sh` if you are not familiar with `npm`.
14 |
15 | If you have a more desired `PATH` for storing scripts, configure `./script/transfer.sh` directly or ignore the transfer instructions.
16 |
17 | ## Requirements
18 |
19 | Make sure [`fzf`](https://github.com/junegunn/fzf) is installed globally. `git stack` won't work if `fzf` is not installed.
20 |
21 | ## Usage
22 |
23 | ```
24 | git-stack []
25 |
26 | Compare against master branch with fzf
27 |
28 | where:
29 | -h show this help text
30 | -f fuzzy select a branch to compare with
31 | ```
32 |
33 | A simple one-liner is all you need.
34 | ```bash
35 | $ git stack
36 | ```
37 |
38 | `git stack` compares the current branch against `master`. `git stack -f`, however, will ask for input from a fuzzy list of all available branches, to be compared against `master`.
39 |
40 | ## Changelog
41 |
42 | **2018-Nov-11:** `v1` published. Automate commit and file transfer process with [`commitizen`](http://commitizen.github.io/cz-cli/) and [`ghooks`](https://github.com/ghooks-org/ghooks).
43 |
44 | **2018-Nov-13:** `-f` created for fuzzy selecting branch to compare with `master`.
45 |
46 | ## Others
47 |
48 | See [Dotfiles](https://gitlab.com/hankchanocd/dotfiles) for my other works on `git`.
49 |
50 | See [git-overview](https://github.com/hankchanocd/git-overview) - A quick git repository insight at terminal.
51 |
52 | See [git-commands](https://github.com/hankchanocd/git-commands) - Fuzzy search git commands with fzf.
53 |
54 | ## License
55 |
56 | [MIT](./LICENSE)
57 |
--------------------------------------------------------------------------------
/git-stack:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env bash
2 | #!/usr/bin/env zsh
3 | #
4 | # Show the difference between the selected branch and master branch
5 |
6 | # Color scheme used exclusively in git-fuzzy-commit
7 | export FZF_DEFAULT_OPTS='
8 | --color hl:33,fg+:214,hl+:33
9 | --color spinner:208,pointer:196,marker:208
10 | '
11 |
12 | function main() {
13 | # Check if it's a git repo
14 | [[ $(git root 2>&1) == 'Not a git repo!' ]] && echo "Not a git repo!" && exit 1
15 |
16 | # Assign master to $branch if not defined yet
17 | local branch
18 | [[ -z "$1" ]] && branch='master' || branch=$1
19 |
20 | function git-stack() {
21 | glNoGraph() {
22 | git log "$branch".. --color=always --format="%C(auto)%h%d %s %C(black)%C(bold)%cr% C(auto)%an" "$@"
23 | }
24 | _gitLogLineToHash="echo {} | grep -o '[a-f0-9]\{7\}' | head -1"
25 | _viewGitLogLine="$_gitLogLineToHash | xargs -I % sh -c 'git show --color=always % | diff-so-fancy'"
26 |
27 | glNoGraph |
28 | fzf --cycle --no-sort --reverse --tiebreak=index --no-multi \
29 | --ansi --preview="$_viewGitLogLine" \
30 | --header "enter to view, alt-y to copy hash" \
31 | --bind "enter:execute:$_viewGitLogLine | less -R" \
32 | --bind "alt-y:execute:$_gitLogLineToHash | xclip"
33 | }
34 |
35 | git-stack
36 | }
37 |
38 | function fuzzy_select_branch() {
39 | # Check if it's a git repo
40 | [[ $(git root 2>&1) == 'Not a git repo!' ]] && echo "Not a git repo!" && exit 1
41 |
42 | result=$(git branch --list |
43 | fzf --reverse --height=40% --cycle
44 | )
45 | branch=$(echo "$result" |
46 | tr "*" " " |
47 | xargs # Remove trailing whitespaces
48 | )
49 |
50 | [[ -n "$branch" ]] && main $branch
51 | }
52 |
53 | ################ Help ################
54 | usage="usage: $(basename "$0") []
55 |
56 | Compare against master branch with fzf
57 |
58 | where:
59 | -h show this help text
60 | -f fuzzy select a branch to compare with"
61 |
62 | ############# Parse options ##############
63 | while getopts ':hf' option; do
64 | case "$option" in
65 | h)
66 | echo "$usage"
67 | exit 0
68 | ;;
69 | f)
70 | fuzzy_select_branch
71 | exit
72 | ;;
73 | :)
74 | main
75 | exit
76 | ;;
77 | \?)
78 | printf "illegal option: -%s\n" "$OPTARG" >&2
79 | echo -e "$usage" >&2
80 | exit 1
81 | ;;
82 | esac
83 | done
84 | shift $((OPTIND - 1))
85 |
86 | # Default case when no option provided
87 | main
88 |
--------------------------------------------------------------------------------
/images/demo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/hankchanocd/git-stack/97fd7ed7090635f4c38681fe8ddd539d2c355273/images/demo.png
--------------------------------------------------------------------------------
/package-lock.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "git-stack",
3 | "version": "1.0.0",
4 | "lockfileVersion": 1,
5 | "requires": true,
6 | "dependencies": {
7 | "ansi-escapes": {
8 | "version": "3.1.0",
9 | "resolved": "http://registry.npmjs.org/ansi-escapes/-/ansi-escapes-3.1.0.tgz",
10 | "integrity": "sha512-UgAb8H9D41AQnu/PbWlCofQVcnV4Gs2bBJi9eZPxfU/hgglFh3SMDMENRIqdr7H6XFnXdoknctFByVsCOotTVw==",
11 | "dev": true
12 | },
13 | "ansi-regex": {
14 | "version": "3.0.0",
15 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz",
16 | "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=",
17 | "dev": true
18 | },
19 | "ansi-styles": {
20 | "version": "3.2.1",
21 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
22 | "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
23 | "dev": true,
24 | "requires": {
25 | "color-convert": "^1.9.0"
26 | }
27 | },
28 | "arr-diff": {
29 | "version": "2.0.0",
30 | "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-2.0.0.tgz",
31 | "integrity": "sha1-jzuCf5Vai9ZpaX5KQlasPOrjVs8=",
32 | "dev": true,
33 | "requires": {
34 | "arr-flatten": "^1.0.1"
35 | }
36 | },
37 | "arr-flatten": {
38 | "version": "1.1.0",
39 | "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz",
40 | "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==",
41 | "dev": true
42 | },
43 | "array-unique": {
44 | "version": "0.2.1",
45 | "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.2.1.tgz",
46 | "integrity": "sha1-odl8yvy8JiXMcPrc6zalDFiwGlM=",
47 | "dev": true
48 | },
49 | "balanced-match": {
50 | "version": "1.0.0",
51 | "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz",
52 | "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=",
53 | "dev": true
54 | },
55 | "brace-expansion": {
56 | "version": "1.1.11",
57 | "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
58 | "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
59 | "dev": true,
60 | "requires": {
61 | "balanced-match": "^1.0.0",
62 | "concat-map": "0.0.1"
63 | }
64 | },
65 | "braces": {
66 | "version": "1.8.5",
67 | "resolved": "https://registry.npmjs.org/braces/-/braces-1.8.5.tgz",
68 | "integrity": "sha1-uneWLhLf+WnWt2cR6RS3N4V79qc=",
69 | "dev": true,
70 | "requires": {
71 | "expand-range": "^1.8.1",
72 | "preserve": "^0.2.0",
73 | "repeat-element": "^1.1.2"
74 | }
75 | },
76 | "cachedir": {
77 | "version": "2.1.0",
78 | "resolved": "https://registry.npmjs.org/cachedir/-/cachedir-2.1.0.tgz",
79 | "integrity": "sha512-xGBpPqoBvn3unBW7oxgb8aJn42K0m9m1/wyjmazah10Fq7bROGG3kRAE6OIyr3U3PIJUqGuebhCEdMk9OKJG0A==",
80 | "dev": true
81 | },
82 | "chalk": {
83 | "version": "2.4.1",
84 | "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.1.tgz",
85 | "integrity": "sha512-ObN6h1v2fTJSmUXoS3nMQ92LbDK9be4TV+6G+omQlGJFdcUX5heKi1LZ1YnRMIgwTLEj3E24bT6tYni50rlCfQ==",
86 | "dev": true,
87 | "requires": {
88 | "ansi-styles": "^3.2.1",
89 | "escape-string-regexp": "^1.0.5",
90 | "supports-color": "^5.3.0"
91 | }
92 | },
93 | "chardet": {
94 | "version": "0.7.0",
95 | "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz",
96 | "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==",
97 | "dev": true
98 | },
99 | "cli-cursor": {
100 | "version": "2.1.0",
101 | "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-2.1.0.tgz",
102 | "integrity": "sha1-s12sN2R5+sw+lHR9QdDQ9SOP/LU=",
103 | "dev": true,
104 | "requires": {
105 | "restore-cursor": "^2.0.0"
106 | }
107 | },
108 | "cli-width": {
109 | "version": "2.2.0",
110 | "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-2.2.0.tgz",
111 | "integrity": "sha1-/xnt6Kml5XkyQUewwR8PvLq+1jk=",
112 | "dev": true
113 | },
114 | "color-convert": {
115 | "version": "1.9.3",
116 | "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz",
117 | "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==",
118 | "dev": true,
119 | "requires": {
120 | "color-name": "1.1.3"
121 | }
122 | },
123 | "color-name": {
124 | "version": "1.1.3",
125 | "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz",
126 | "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=",
127 | "dev": true
128 | },
129 | "colors": {
130 | "version": "0.6.2",
131 | "resolved": "https://registry.npmjs.org/colors/-/colors-0.6.2.tgz",
132 | "integrity": "sha1-JCP+ZnisDF2uiFLl0OW+CMmXq8w=",
133 | "dev": true
134 | },
135 | "commander": {
136 | "version": "2.1.0",
137 | "resolved": "http://registry.npmjs.org/commander/-/commander-2.1.0.tgz",
138 | "integrity": "sha1-0SG7roYNmZKj1Re6lvVliOR8Z4E=",
139 | "dev": true
140 | },
141 | "commitizen": {
142 | "version": "3.0.4",
143 | "resolved": "https://registry.npmjs.org/commitizen/-/commitizen-3.0.4.tgz",
144 | "integrity": "sha512-djR5F7RBsGALyUEm/B1H/85nsN4L1F5DhWN+9/efSwqHDSyhw2MK6MF2VRuD26PUqGkQbcUlYO61btkTWjcjVw==",
145 | "dev": true,
146 | "requires": {
147 | "cachedir": "2.1.0",
148 | "cz-conventional-changelog": "2.1.0",
149 | "dedent": "0.7.0",
150 | "detect-indent": "^5.0.0",
151 | "find-node-modules": "1.0.4",
152 | "find-root": "1.1.0",
153 | "fs-extra": "^7.0.0",
154 | "glob": "7.1.3",
155 | "inquirer": "6.2.0",
156 | "lodash": "4.17.11",
157 | "minimist": "1.2.0",
158 | "shelljs": "0.7.6",
159 | "strip-json-comments": "2.0.1"
160 | }
161 | },
162 | "concat-map": {
163 | "version": "0.0.1",
164 | "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
165 | "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=",
166 | "dev": true
167 | },
168 | "conventional-commit-types": {
169 | "version": "2.2.0",
170 | "resolved": "https://registry.npmjs.org/conventional-commit-types/-/conventional-commit-types-2.2.0.tgz",
171 | "integrity": "sha1-XblXOdbCEqy+e29lahG5QLqmiUY=",
172 | "dev": true
173 | },
174 | "cz-conventional-changelog": {
175 | "version": "2.1.0",
176 | "resolved": "https://registry.npmjs.org/cz-conventional-changelog/-/cz-conventional-changelog-2.1.0.tgz",
177 | "integrity": "sha1-L0vHOQ4yROTfKT5ro1Hkx0Cnx2Q=",
178 | "dev": true,
179 | "requires": {
180 | "conventional-commit-types": "^2.0.0",
181 | "lodash.map": "^4.5.1",
182 | "longest": "^1.0.1",
183 | "right-pad": "^1.0.1",
184 | "word-wrap": "^1.0.3"
185 | }
186 | },
187 | "dedent": {
188 | "version": "0.7.0",
189 | "resolved": "https://registry.npmjs.org/dedent/-/dedent-0.7.0.tgz",
190 | "integrity": "sha1-JJXduvbrh0q7Dhvp3yLS5aVEMmw=",
191 | "dev": true
192 | },
193 | "detect-file": {
194 | "version": "0.1.0",
195 | "resolved": "https://registry.npmjs.org/detect-file/-/detect-file-0.1.0.tgz",
196 | "integrity": "sha1-STXe39lIhkjgBrASlWbpOGcR6mM=",
197 | "dev": true,
198 | "requires": {
199 | "fs-exists-sync": "^0.1.0"
200 | }
201 | },
202 | "detect-indent": {
203 | "version": "5.0.0",
204 | "resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-5.0.0.tgz",
205 | "integrity": "sha1-OHHMCmoALow+Wzz38zYmRnXwa50=",
206 | "dev": true
207 | },
208 | "escape-string-regexp": {
209 | "version": "1.0.5",
210 | "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
211 | "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=",
212 | "dev": true
213 | },
214 | "expand-brackets": {
215 | "version": "0.1.5",
216 | "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-0.1.5.tgz",
217 | "integrity": "sha1-3wcoTjQqgHzXM6xa9yQR5YHRF3s=",
218 | "dev": true,
219 | "requires": {
220 | "is-posix-bracket": "^0.1.0"
221 | }
222 | },
223 | "expand-range": {
224 | "version": "1.8.2",
225 | "resolved": "https://registry.npmjs.org/expand-range/-/expand-range-1.8.2.tgz",
226 | "integrity": "sha1-opnv/TNf4nIeuujiV+x5ZE/IUzc=",
227 | "dev": true,
228 | "requires": {
229 | "fill-range": "^2.1.0"
230 | }
231 | },
232 | "expand-tilde": {
233 | "version": "1.2.2",
234 | "resolved": "https://registry.npmjs.org/expand-tilde/-/expand-tilde-1.2.2.tgz",
235 | "integrity": "sha1-C4HrqJflo9MdHD0QL48BRB5VlEk=",
236 | "dev": true,
237 | "requires": {
238 | "os-homedir": "^1.0.1"
239 | }
240 | },
241 | "external-editor": {
242 | "version": "3.0.3",
243 | "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.0.3.tgz",
244 | "integrity": "sha512-bn71H9+qWoOQKyZDo25mOMVpSmXROAsTJVVVYzrrtol3d4y+AsKjf4Iwl2Q+IuT0kFSQ1qo166UuIwqYq7mGnA==",
245 | "dev": true,
246 | "requires": {
247 | "chardet": "^0.7.0",
248 | "iconv-lite": "^0.4.24",
249 | "tmp": "^0.0.33"
250 | }
251 | },
252 | "extglob": {
253 | "version": "0.3.2",
254 | "resolved": "https://registry.npmjs.org/extglob/-/extglob-0.3.2.tgz",
255 | "integrity": "sha1-Lhj/PS9JqydlzskCPwEdqo2DSaE=",
256 | "dev": true,
257 | "requires": {
258 | "is-extglob": "^1.0.0"
259 | }
260 | },
261 | "figures": {
262 | "version": "2.0.0",
263 | "resolved": "https://registry.npmjs.org/figures/-/figures-2.0.0.tgz",
264 | "integrity": "sha1-OrGi0qYsi/tDGgyUy3l6L84nyWI=",
265 | "dev": true,
266 | "requires": {
267 | "escape-string-regexp": "^1.0.5"
268 | }
269 | },
270 | "filename-regex": {
271 | "version": "2.0.1",
272 | "resolved": "https://registry.npmjs.org/filename-regex/-/filename-regex-2.0.1.tgz",
273 | "integrity": "sha1-wcS5vuPglyXdsQa3XB4wH+LxiyY=",
274 | "dev": true
275 | },
276 | "fill-range": {
277 | "version": "2.2.4",
278 | "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-2.2.4.tgz",
279 | "integrity": "sha512-cnrcCbj01+j2gTG921VZPnHbjmdAf8oQV/iGeV2kZxGSyfYjjTyY79ErsK1WJWMpw6DaApEX72binqJE+/d+5Q==",
280 | "dev": true,
281 | "requires": {
282 | "is-number": "^2.1.0",
283 | "isobject": "^2.0.0",
284 | "randomatic": "^3.0.0",
285 | "repeat-element": "^1.1.2",
286 | "repeat-string": "^1.5.2"
287 | }
288 | },
289 | "find-node-modules": {
290 | "version": "1.0.4",
291 | "resolved": "https://registry.npmjs.org/find-node-modules/-/find-node-modules-1.0.4.tgz",
292 | "integrity": "sha1-tt6zzMtpnIcDdne87eLF9YYrJVA=",
293 | "dev": true,
294 | "requires": {
295 | "findup-sync": "0.4.2",
296 | "merge": "^1.2.0"
297 | }
298 | },
299 | "find-root": {
300 | "version": "1.1.0",
301 | "resolved": "https://registry.npmjs.org/find-root/-/find-root-1.1.0.tgz",
302 | "integrity": "sha512-NKfW6bec6GfKc0SGx1e07QZY9PE99u0Bft/0rzSD5k3sO/vwkVUpDUKVm5Gpp5Ue3YfShPFTX2070tDs5kB9Ng==",
303 | "dev": true
304 | },
305 | "findup": {
306 | "version": "0.1.5",
307 | "resolved": "https://registry.npmjs.org/findup/-/findup-0.1.5.tgz",
308 | "integrity": "sha1-itkpozk7rGJ5V6fl3kYjsGsOLOs=",
309 | "dev": true,
310 | "requires": {
311 | "colors": "~0.6.0-1",
312 | "commander": "~2.1.0"
313 | }
314 | },
315 | "findup-sync": {
316 | "version": "0.4.2",
317 | "resolved": "https://registry.npmjs.org/findup-sync/-/findup-sync-0.4.2.tgz",
318 | "integrity": "sha1-qBF9D3MST1pFRoOVef5S1xKfteU=",
319 | "dev": true,
320 | "requires": {
321 | "detect-file": "^0.1.0",
322 | "is-glob": "^2.0.1",
323 | "micromatch": "^2.3.7",
324 | "resolve-dir": "^0.1.0"
325 | }
326 | },
327 | "for-in": {
328 | "version": "1.0.2",
329 | "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz",
330 | "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=",
331 | "dev": true
332 | },
333 | "for-own": {
334 | "version": "0.1.5",
335 | "resolved": "https://registry.npmjs.org/for-own/-/for-own-0.1.5.tgz",
336 | "integrity": "sha1-UmXGgaTylNq78XyVCbZ2OqhFEM4=",
337 | "dev": true,
338 | "requires": {
339 | "for-in": "^1.0.1"
340 | }
341 | },
342 | "fs-exists-sync": {
343 | "version": "0.1.0",
344 | "resolved": "https://registry.npmjs.org/fs-exists-sync/-/fs-exists-sync-0.1.0.tgz",
345 | "integrity": "sha1-mC1ok6+RjnLQjeyehnP/K1qNat0=",
346 | "dev": true
347 | },
348 | "fs-extra": {
349 | "version": "7.0.1",
350 | "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-7.0.1.tgz",
351 | "integrity": "sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==",
352 | "dev": true,
353 | "requires": {
354 | "graceful-fs": "^4.1.2",
355 | "jsonfile": "^4.0.0",
356 | "universalify": "^0.1.0"
357 | }
358 | },
359 | "fs.realpath": {
360 | "version": "1.0.0",
361 | "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
362 | "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=",
363 | "dev": true
364 | },
365 | "ghooks": {
366 | "version": "2.0.4",
367 | "resolved": "https://registry.npmjs.org/ghooks/-/ghooks-2.0.4.tgz",
368 | "integrity": "sha1-/VDgQP9UiQauQstReToBv+JFZ7k=",
369 | "dev": true,
370 | "requires": {
371 | "findup": "0.1.5",
372 | "lodash.clone": "4.5.0",
373 | "manage-path": "2.0.0",
374 | "opt-cli": "1.5.1",
375 | "path-exists": "3.0.0",
376 | "spawn-command": "0.0.2"
377 | }
378 | },
379 | "glob": {
380 | "version": "7.1.3",
381 | "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.3.tgz",
382 | "integrity": "sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ==",
383 | "dev": true,
384 | "requires": {
385 | "fs.realpath": "^1.0.0",
386 | "inflight": "^1.0.4",
387 | "inherits": "2",
388 | "minimatch": "^3.0.4",
389 | "once": "^1.3.0",
390 | "path-is-absolute": "^1.0.0"
391 | }
392 | },
393 | "glob-base": {
394 | "version": "0.3.0",
395 | "resolved": "https://registry.npmjs.org/glob-base/-/glob-base-0.3.0.tgz",
396 | "integrity": "sha1-27Fk9iIbHAscz4Kuoyi0l98Oo8Q=",
397 | "dev": true,
398 | "requires": {
399 | "glob-parent": "^2.0.0",
400 | "is-glob": "^2.0.0"
401 | }
402 | },
403 | "glob-parent": {
404 | "version": "2.0.0",
405 | "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-2.0.0.tgz",
406 | "integrity": "sha1-gTg9ctsFT8zPUzbaqQLxgvbtuyg=",
407 | "dev": true,
408 | "requires": {
409 | "is-glob": "^2.0.0"
410 | }
411 | },
412 | "global-modules": {
413 | "version": "0.2.3",
414 | "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-0.2.3.tgz",
415 | "integrity": "sha1-6lo77ULG1s6ZWk+KEmm12uIjgo0=",
416 | "dev": true,
417 | "requires": {
418 | "global-prefix": "^0.1.4",
419 | "is-windows": "^0.2.0"
420 | }
421 | },
422 | "global-prefix": {
423 | "version": "0.1.5",
424 | "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-0.1.5.tgz",
425 | "integrity": "sha1-jTvGuNo8qBEqFg2NSW/wRiv+948=",
426 | "dev": true,
427 | "requires": {
428 | "homedir-polyfill": "^1.0.0",
429 | "ini": "^1.3.4",
430 | "is-windows": "^0.2.0",
431 | "which": "^1.2.12"
432 | }
433 | },
434 | "graceful-fs": {
435 | "version": "4.1.15",
436 | "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.15.tgz",
437 | "integrity": "sha512-6uHUhOPEBgQ24HM+r6b/QwWfZq+yiFcipKFrOFiBEnWdy5sdzYoi+pJeQaPI5qOLRFqWmAXUPQNsielzdLoecA==",
438 | "dev": true
439 | },
440 | "graceful-readlink": {
441 | "version": "1.0.1",
442 | "resolved": "https://registry.npmjs.org/graceful-readlink/-/graceful-readlink-1.0.1.tgz",
443 | "integrity": "sha1-TK+tdrxi8C+gObL5Tpo906ORpyU=",
444 | "dev": true
445 | },
446 | "has-flag": {
447 | "version": "3.0.0",
448 | "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
449 | "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=",
450 | "dev": true
451 | },
452 | "homedir-polyfill": {
453 | "version": "1.0.1",
454 | "resolved": "https://registry.npmjs.org/homedir-polyfill/-/homedir-polyfill-1.0.1.tgz",
455 | "integrity": "sha1-TCu8inWJmP7r9e1oWA921GdotLw=",
456 | "dev": true,
457 | "requires": {
458 | "parse-passwd": "^1.0.0"
459 | }
460 | },
461 | "iconv-lite": {
462 | "version": "0.4.24",
463 | "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz",
464 | "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==",
465 | "dev": true,
466 | "requires": {
467 | "safer-buffer": ">= 2.1.2 < 3"
468 | }
469 | },
470 | "inflight": {
471 | "version": "1.0.6",
472 | "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
473 | "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=",
474 | "dev": true,
475 | "requires": {
476 | "once": "^1.3.0",
477 | "wrappy": "1"
478 | }
479 | },
480 | "inherits": {
481 | "version": "2.0.3",
482 | "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
483 | "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=",
484 | "dev": true
485 | },
486 | "ini": {
487 | "version": "1.3.5",
488 | "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.5.tgz",
489 | "integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==",
490 | "dev": true
491 | },
492 | "inquirer": {
493 | "version": "6.2.0",
494 | "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-6.2.0.tgz",
495 | "integrity": "sha512-QIEQG4YyQ2UYZGDC4srMZ7BjHOmNk1lR2JQj5UknBapklm6WHA+VVH7N+sUdX3A7NeCfGF8o4X1S3Ao7nAcIeg==",
496 | "dev": true,
497 | "requires": {
498 | "ansi-escapes": "^3.0.0",
499 | "chalk": "^2.0.0",
500 | "cli-cursor": "^2.1.0",
501 | "cli-width": "^2.0.0",
502 | "external-editor": "^3.0.0",
503 | "figures": "^2.0.0",
504 | "lodash": "^4.17.10",
505 | "mute-stream": "0.0.7",
506 | "run-async": "^2.2.0",
507 | "rxjs": "^6.1.0",
508 | "string-width": "^2.1.0",
509 | "strip-ansi": "^4.0.0",
510 | "through": "^2.3.6"
511 | }
512 | },
513 | "interpret": {
514 | "version": "1.1.0",
515 | "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.1.0.tgz",
516 | "integrity": "sha1-ftGxQQxqDg94z5XTuEQMY/eLhhQ=",
517 | "dev": true
518 | },
519 | "is-buffer": {
520 | "version": "1.1.6",
521 | "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz",
522 | "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==",
523 | "dev": true
524 | },
525 | "is-dotfile": {
526 | "version": "1.0.3",
527 | "resolved": "https://registry.npmjs.org/is-dotfile/-/is-dotfile-1.0.3.tgz",
528 | "integrity": "sha1-pqLzL/0t+wT1yiXs0Pa4PPeYoeE=",
529 | "dev": true
530 | },
531 | "is-equal-shallow": {
532 | "version": "0.1.3",
533 | "resolved": "https://registry.npmjs.org/is-equal-shallow/-/is-equal-shallow-0.1.3.tgz",
534 | "integrity": "sha1-IjgJj8Ih3gvPpdnqxMRdY4qhxTQ=",
535 | "dev": true,
536 | "requires": {
537 | "is-primitive": "^2.0.0"
538 | }
539 | },
540 | "is-extendable": {
541 | "version": "0.1.1",
542 | "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz",
543 | "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=",
544 | "dev": true
545 | },
546 | "is-extglob": {
547 | "version": "1.0.0",
548 | "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz",
549 | "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=",
550 | "dev": true
551 | },
552 | "is-fullwidth-code-point": {
553 | "version": "2.0.0",
554 | "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz",
555 | "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=",
556 | "dev": true
557 | },
558 | "is-glob": {
559 | "version": "2.0.1",
560 | "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz",
561 | "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=",
562 | "dev": true,
563 | "requires": {
564 | "is-extglob": "^1.0.0"
565 | }
566 | },
567 | "is-number": {
568 | "version": "2.1.0",
569 | "resolved": "https://registry.npmjs.org/is-number/-/is-number-2.1.0.tgz",
570 | "integrity": "sha1-Afy7s5NGOlSPL0ZszhbezknbkI8=",
571 | "dev": true,
572 | "requires": {
573 | "kind-of": "^3.0.2"
574 | }
575 | },
576 | "is-posix-bracket": {
577 | "version": "0.1.1",
578 | "resolved": "https://registry.npmjs.org/is-posix-bracket/-/is-posix-bracket-0.1.1.tgz",
579 | "integrity": "sha1-MzTceXdDaOkvAW5vvAqI9c1ua8Q=",
580 | "dev": true
581 | },
582 | "is-primitive": {
583 | "version": "2.0.0",
584 | "resolved": "https://registry.npmjs.org/is-primitive/-/is-primitive-2.0.0.tgz",
585 | "integrity": "sha1-IHurkWOEmcB7Kt8kCkGochADRXU=",
586 | "dev": true
587 | },
588 | "is-promise": {
589 | "version": "2.1.0",
590 | "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-2.1.0.tgz",
591 | "integrity": "sha1-eaKp7OfwlugPNtKy87wWwf9L8/o=",
592 | "dev": true
593 | },
594 | "is-windows": {
595 | "version": "0.2.0",
596 | "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-0.2.0.tgz",
597 | "integrity": "sha1-3hqm1j6indJIc3tp8f+LgALSEIw=",
598 | "dev": true
599 | },
600 | "isarray": {
601 | "version": "1.0.0",
602 | "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
603 | "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=",
604 | "dev": true
605 | },
606 | "isexe": {
607 | "version": "2.0.0",
608 | "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
609 | "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=",
610 | "dev": true
611 | },
612 | "isobject": {
613 | "version": "2.1.0",
614 | "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz",
615 | "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=",
616 | "dev": true,
617 | "requires": {
618 | "isarray": "1.0.0"
619 | }
620 | },
621 | "jsonfile": {
622 | "version": "4.0.0",
623 | "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz",
624 | "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=",
625 | "dev": true,
626 | "requires": {
627 | "graceful-fs": "^4.1.6"
628 | }
629 | },
630 | "kind-of": {
631 | "version": "3.2.2",
632 | "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
633 | "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
634 | "dev": true,
635 | "requires": {
636 | "is-buffer": "^1.1.5"
637 | }
638 | },
639 | "lodash": {
640 | "version": "4.17.11",
641 | "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.11.tgz",
642 | "integrity": "sha512-cQKh8igo5QUhZ7lg38DYWAxMvjSAKG0A8wGSVimP07SIUEK2UO+arSRKbRZWtelMtN5V0Hkwh5ryOto/SshYIg==",
643 | "dev": true
644 | },
645 | "lodash._baseclone": {
646 | "version": "4.5.7",
647 | "resolved": "https://registry.npmjs.org/lodash._baseclone/-/lodash._baseclone-4.5.7.tgz",
648 | "integrity": "sha1-zkKt4IOE711i+nfDD2GkbmhvhDQ=",
649 | "dev": true
650 | },
651 | "lodash.clone": {
652 | "version": "4.5.0",
653 | "resolved": "https://registry.npmjs.org/lodash.clone/-/lodash.clone-4.5.0.tgz",
654 | "integrity": "sha1-GVhwRQ9aExkkeN9Lw9I9LeoZB7Y=",
655 | "dev": true
656 | },
657 | "lodash.map": {
658 | "version": "4.6.0",
659 | "resolved": "https://registry.npmjs.org/lodash.map/-/lodash.map-4.6.0.tgz",
660 | "integrity": "sha1-dx7Hg540c9nEzeKLGTlMNWL09tM=",
661 | "dev": true
662 | },
663 | "longest": {
664 | "version": "1.0.1",
665 | "resolved": "https://registry.npmjs.org/longest/-/longest-1.0.1.tgz",
666 | "integrity": "sha1-MKCy2jj3N3DoKUoNIuZiXtd9AJc=",
667 | "dev": true
668 | },
669 | "manage-path": {
670 | "version": "2.0.0",
671 | "resolved": "https://registry.npmjs.org/manage-path/-/manage-path-2.0.0.tgz",
672 | "integrity": "sha1-9M+EV7km7u4qg7FzUBQUvHbrlZc=",
673 | "dev": true
674 | },
675 | "math-random": {
676 | "version": "1.0.1",
677 | "resolved": "https://registry.npmjs.org/math-random/-/math-random-1.0.1.tgz",
678 | "integrity": "sha1-izqsWIuKZuSXXjzepn97sylgH6w=",
679 | "dev": true
680 | },
681 | "merge": {
682 | "version": "1.2.1",
683 | "resolved": "https://registry.npmjs.org/merge/-/merge-1.2.1.tgz",
684 | "integrity": "sha512-VjFo4P5Whtj4vsLzsYBu5ayHhoHJ0UqNm7ibvShmbmoz7tGi0vXaoJbGdB+GmDMLUdg8DpQXEIeVDAe8MaABvQ==",
685 | "dev": true
686 | },
687 | "micromatch": {
688 | "version": "2.3.11",
689 | "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-2.3.11.tgz",
690 | "integrity": "sha1-hmd8l9FyCzY0MdBNDRUpO9OMFWU=",
691 | "dev": true,
692 | "requires": {
693 | "arr-diff": "^2.0.0",
694 | "array-unique": "^0.2.1",
695 | "braces": "^1.8.2",
696 | "expand-brackets": "^0.1.4",
697 | "extglob": "^0.3.1",
698 | "filename-regex": "^2.0.0",
699 | "is-extglob": "^1.0.0",
700 | "is-glob": "^2.0.1",
701 | "kind-of": "^3.0.2",
702 | "normalize-path": "^2.0.1",
703 | "object.omit": "^2.0.0",
704 | "parse-glob": "^3.0.4",
705 | "regex-cache": "^0.4.2"
706 | }
707 | },
708 | "mimic-fn": {
709 | "version": "1.2.0",
710 | "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.2.0.tgz",
711 | "integrity": "sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==",
712 | "dev": true
713 | },
714 | "minimatch": {
715 | "version": "3.0.4",
716 | "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz",
717 | "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==",
718 | "dev": true,
719 | "requires": {
720 | "brace-expansion": "^1.1.7"
721 | }
722 | },
723 | "minimist": {
724 | "version": "1.2.0",
725 | "resolved": "http://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz",
726 | "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=",
727 | "dev": true
728 | },
729 | "mute-stream": {
730 | "version": "0.0.7",
731 | "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.7.tgz",
732 | "integrity": "sha1-MHXOk7whuPq0PhvE2n6BFe0ee6s=",
733 | "dev": true
734 | },
735 | "normalize-path": {
736 | "version": "2.1.1",
737 | "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz",
738 | "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=",
739 | "dev": true,
740 | "requires": {
741 | "remove-trailing-separator": "^1.0.1"
742 | }
743 | },
744 | "object.omit": {
745 | "version": "2.0.1",
746 | "resolved": "https://registry.npmjs.org/object.omit/-/object.omit-2.0.1.tgz",
747 | "integrity": "sha1-Gpx0SCnznbuFjHbKNXmuKlTr0fo=",
748 | "dev": true,
749 | "requires": {
750 | "for-own": "^0.1.4",
751 | "is-extendable": "^0.1.1"
752 | }
753 | },
754 | "once": {
755 | "version": "1.4.0",
756 | "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
757 | "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=",
758 | "dev": true,
759 | "requires": {
760 | "wrappy": "1"
761 | }
762 | },
763 | "onetime": {
764 | "version": "2.0.1",
765 | "resolved": "https://registry.npmjs.org/onetime/-/onetime-2.0.1.tgz",
766 | "integrity": "sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ=",
767 | "dev": true,
768 | "requires": {
769 | "mimic-fn": "^1.0.0"
770 | }
771 | },
772 | "opt-cli": {
773 | "version": "1.5.1",
774 | "resolved": "https://registry.npmjs.org/opt-cli/-/opt-cli-1.5.1.tgz",
775 | "integrity": "sha1-BNtEexPJa5kusxaFJm9O0NlzbcI=",
776 | "dev": true,
777 | "requires": {
778 | "commander": "2.9.0",
779 | "lodash.clone": "4.3.2",
780 | "manage-path": "2.0.0",
781 | "spawn-command": "0.0.2-1"
782 | },
783 | "dependencies": {
784 | "commander": {
785 | "version": "2.9.0",
786 | "resolved": "http://registry.npmjs.org/commander/-/commander-2.9.0.tgz",
787 | "integrity": "sha1-nJkJQXbhIkDLItbFFGCYQA/g99Q=",
788 | "dev": true,
789 | "requires": {
790 | "graceful-readlink": ">= 1.0.0"
791 | }
792 | },
793 | "lodash.clone": {
794 | "version": "4.3.2",
795 | "resolved": "https://registry.npmjs.org/lodash.clone/-/lodash.clone-4.3.2.tgz",
796 | "integrity": "sha1-5WsXa2gjp93jj38r9Y3n1ZcSAOk=",
797 | "dev": true,
798 | "requires": {
799 | "lodash._baseclone": "~4.5.0"
800 | }
801 | },
802 | "spawn-command": {
803 | "version": "0.0.2-1",
804 | "resolved": "https://registry.npmjs.org/spawn-command/-/spawn-command-0.0.2-1.tgz",
805 | "integrity": "sha1-YvXpRmmBwbeW3Fkpk34RycaSG9A=",
806 | "dev": true
807 | }
808 | }
809 | },
810 | "os-homedir": {
811 | "version": "1.0.2",
812 | "resolved": "http://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz",
813 | "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=",
814 | "dev": true
815 | },
816 | "os-tmpdir": {
817 | "version": "1.0.2",
818 | "resolved": "http://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz",
819 | "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=",
820 | "dev": true
821 | },
822 | "parse-glob": {
823 | "version": "3.0.4",
824 | "resolved": "https://registry.npmjs.org/parse-glob/-/parse-glob-3.0.4.tgz",
825 | "integrity": "sha1-ssN2z7EfNVE7rdFz7wu246OIORw=",
826 | "dev": true,
827 | "requires": {
828 | "glob-base": "^0.3.0",
829 | "is-dotfile": "^1.0.0",
830 | "is-extglob": "^1.0.0",
831 | "is-glob": "^2.0.0"
832 | }
833 | },
834 | "parse-passwd": {
835 | "version": "1.0.0",
836 | "resolved": "https://registry.npmjs.org/parse-passwd/-/parse-passwd-1.0.0.tgz",
837 | "integrity": "sha1-bVuTSkVpk7I9N/QKOC1vFmao5cY=",
838 | "dev": true
839 | },
840 | "path-exists": {
841 | "version": "3.0.0",
842 | "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz",
843 | "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=",
844 | "dev": true
845 | },
846 | "path-is-absolute": {
847 | "version": "1.0.1",
848 | "resolved": "http://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
849 | "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=",
850 | "dev": true
851 | },
852 | "path-parse": {
853 | "version": "1.0.6",
854 | "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz",
855 | "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==",
856 | "dev": true
857 | },
858 | "preserve": {
859 | "version": "0.2.0",
860 | "resolved": "https://registry.npmjs.org/preserve/-/preserve-0.2.0.tgz",
861 | "integrity": "sha1-gV7R9uvGWSb4ZbMQwHE7yzMVzks=",
862 | "dev": true
863 | },
864 | "randomatic": {
865 | "version": "3.1.1",
866 | "resolved": "https://registry.npmjs.org/randomatic/-/randomatic-3.1.1.tgz",
867 | "integrity": "sha512-TuDE5KxZ0J461RVjrJZCJc+J+zCkTb1MbH9AQUq68sMhOMcy9jLcb3BrZKgp9q9Ncltdg4QVqWrH02W2EFFVYw==",
868 | "dev": true,
869 | "requires": {
870 | "is-number": "^4.0.0",
871 | "kind-of": "^6.0.0",
872 | "math-random": "^1.0.1"
873 | },
874 | "dependencies": {
875 | "is-number": {
876 | "version": "4.0.0",
877 | "resolved": "https://registry.npmjs.org/is-number/-/is-number-4.0.0.tgz",
878 | "integrity": "sha512-rSklcAIlf1OmFdyAqbnWTLVelsQ58uvZ66S/ZyawjWqIviTWCjg2PzVGw8WUA+nNuPTqb4wgA+NszrJ+08LlgQ==",
879 | "dev": true
880 | },
881 | "kind-of": {
882 | "version": "6.0.2",
883 | "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz",
884 | "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==",
885 | "dev": true
886 | }
887 | }
888 | },
889 | "rechoir": {
890 | "version": "0.6.2",
891 | "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz",
892 | "integrity": "sha1-hSBLVNuoLVdC4oyWdW70OvUOM4Q=",
893 | "dev": true,
894 | "requires": {
895 | "resolve": "^1.1.6"
896 | }
897 | },
898 | "regex-cache": {
899 | "version": "0.4.4",
900 | "resolved": "https://registry.npmjs.org/regex-cache/-/regex-cache-0.4.4.tgz",
901 | "integrity": "sha512-nVIZwtCjkC9YgvWkpM55B5rBhBYRZhAaJbgcFYXXsHnbZ9UZI9nnVWYZpBlCqv9ho2eZryPnWrZGsOdPwVWXWQ==",
902 | "dev": true,
903 | "requires": {
904 | "is-equal-shallow": "^0.1.3"
905 | }
906 | },
907 | "remove-trailing-separator": {
908 | "version": "1.1.0",
909 | "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz",
910 | "integrity": "sha1-wkvOKig62tW8P1jg1IJJuSN52O8=",
911 | "dev": true
912 | },
913 | "repeat-element": {
914 | "version": "1.1.3",
915 | "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.3.tgz",
916 | "integrity": "sha512-ahGq0ZnV5m5XtZLMb+vP76kcAM5nkLqk0lpqAuojSKGgQtn4eRi4ZZGm2olo2zKFH+sMsWaqOCW1dqAnOru72g==",
917 | "dev": true
918 | },
919 | "repeat-string": {
920 | "version": "1.6.1",
921 | "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz",
922 | "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=",
923 | "dev": true
924 | },
925 | "resolve": {
926 | "version": "1.8.1",
927 | "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.8.1.tgz",
928 | "integrity": "sha512-AicPrAC7Qu1JxPCZ9ZgCZlY35QgFnNqc+0LtbRNxnVw4TXvjQ72wnuL9JQcEBgXkI9JM8MsT9kaQoHcpCRJOYA==",
929 | "dev": true,
930 | "requires": {
931 | "path-parse": "^1.0.5"
932 | }
933 | },
934 | "resolve-dir": {
935 | "version": "0.1.1",
936 | "resolved": "https://registry.npmjs.org/resolve-dir/-/resolve-dir-0.1.1.tgz",
937 | "integrity": "sha1-shklmlYC+sXFxJatiUpujMQwJh4=",
938 | "dev": true,
939 | "requires": {
940 | "expand-tilde": "^1.2.2",
941 | "global-modules": "^0.2.3"
942 | }
943 | },
944 | "restore-cursor": {
945 | "version": "2.0.0",
946 | "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-2.0.0.tgz",
947 | "integrity": "sha1-n37ih/gv0ybU/RYpI9YhKe7g368=",
948 | "dev": true,
949 | "requires": {
950 | "onetime": "^2.0.0",
951 | "signal-exit": "^3.0.2"
952 | }
953 | },
954 | "right-pad": {
955 | "version": "1.0.1",
956 | "resolved": "https://registry.npmjs.org/right-pad/-/right-pad-1.0.1.tgz",
957 | "integrity": "sha1-jKCMLLtbVedNr6lr9/0aJ9VoyNA=",
958 | "dev": true
959 | },
960 | "run-async": {
961 | "version": "2.3.0",
962 | "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.3.0.tgz",
963 | "integrity": "sha1-A3GrSuC91yDUFm19/aZP96RFpsA=",
964 | "dev": true,
965 | "requires": {
966 | "is-promise": "^2.1.0"
967 | }
968 | },
969 | "rxjs": {
970 | "version": "6.3.3",
971 | "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.3.3.tgz",
972 | "integrity": "sha512-JTWmoY9tWCs7zvIk/CvRjhjGaOd+OVBM987mxFo+OW66cGpdKjZcpmc74ES1sB//7Kl/PAe8+wEakuhG4pcgOw==",
973 | "dev": true,
974 | "requires": {
975 | "tslib": "^1.9.0"
976 | }
977 | },
978 | "safer-buffer": {
979 | "version": "2.1.2",
980 | "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz",
981 | "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==",
982 | "dev": true
983 | },
984 | "shelljs": {
985 | "version": "0.7.6",
986 | "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.7.6.tgz",
987 | "integrity": "sha1-N5zM+1a5HIYB5HkzVutTgpJN6a0=",
988 | "dev": true,
989 | "requires": {
990 | "glob": "^7.0.0",
991 | "interpret": "^1.0.0",
992 | "rechoir": "^0.6.2"
993 | }
994 | },
995 | "signal-exit": {
996 | "version": "3.0.2",
997 | "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz",
998 | "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=",
999 | "dev": true
1000 | },
1001 | "spawn-command": {
1002 | "version": "0.0.2",
1003 | "resolved": "https://registry.npmjs.org/spawn-command/-/spawn-command-0.0.2.tgz",
1004 | "integrity": "sha1-lUThpDygRfhTGqwaSMspva5iM44=",
1005 | "dev": true
1006 | },
1007 | "string-width": {
1008 | "version": "2.1.1",
1009 | "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz",
1010 | "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==",
1011 | "dev": true,
1012 | "requires": {
1013 | "is-fullwidth-code-point": "^2.0.0",
1014 | "strip-ansi": "^4.0.0"
1015 | }
1016 | },
1017 | "strip-ansi": {
1018 | "version": "4.0.0",
1019 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz",
1020 | "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=",
1021 | "dev": true,
1022 | "requires": {
1023 | "ansi-regex": "^3.0.0"
1024 | }
1025 | },
1026 | "strip-json-comments": {
1027 | "version": "2.0.1",
1028 | "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz",
1029 | "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=",
1030 | "dev": true
1031 | },
1032 | "supports-color": {
1033 | "version": "5.5.0",
1034 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
1035 | "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
1036 | "dev": true,
1037 | "requires": {
1038 | "has-flag": "^3.0.0"
1039 | }
1040 | },
1041 | "through": {
1042 | "version": "2.3.8",
1043 | "resolved": "http://registry.npmjs.org/through/-/through-2.3.8.tgz",
1044 | "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=",
1045 | "dev": true
1046 | },
1047 | "tmp": {
1048 | "version": "0.0.33",
1049 | "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz",
1050 | "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==",
1051 | "dev": true,
1052 | "requires": {
1053 | "os-tmpdir": "~1.0.2"
1054 | }
1055 | },
1056 | "tslib": {
1057 | "version": "1.9.3",
1058 | "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.9.3.tgz",
1059 | "integrity": "sha512-4krF8scpejhaOgqzBEcGM7yDIEfi0/8+8zDRZhNZZ2kjmHJ4hv3zCbQWxoJGz1iw5U0Jl0nma13xzHXcncMavQ==",
1060 | "dev": true
1061 | },
1062 | "universalify": {
1063 | "version": "0.1.2",
1064 | "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz",
1065 | "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==",
1066 | "dev": true
1067 | },
1068 | "which": {
1069 | "version": "1.3.1",
1070 | "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz",
1071 | "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==",
1072 | "dev": true,
1073 | "requires": {
1074 | "isexe": "^2.0.0"
1075 | }
1076 | },
1077 | "word-wrap": {
1078 | "version": "1.2.3",
1079 | "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz",
1080 | "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==",
1081 | "dev": true
1082 | },
1083 | "wrappy": {
1084 | "version": "1.0.2",
1085 | "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
1086 | "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=",
1087 | "dev": true
1088 | }
1089 | }
1090 | }
1091 |
--------------------------------------------------------------------------------
/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "git-stack",
3 | "version": "1.0.0",
4 | "description": "View difference between git branches",
5 | "main": "git-stack",
6 | "scripts": {
7 | "test": "echo \"Error: no test specified\" && exit 1",
8 | "commit": "git-cz",
9 | "transfer": "bash ./script/transfer.sh"
10 | },
11 | "repository": {
12 | "type": "git",
13 | "url": "git+https://github.com/hankchanocd/git-stack.git"
14 | },
15 | "keywords": [
16 | "git",
17 | "branch",
18 | "fuzzy",
19 | "fzf",
20 | "differences",
21 | "git-stack"
22 | ],
23 | "author": "Hank Chan (https://github.com/hankchanocd)",
24 | "license": "MIT",
25 | "bugs": {
26 | "url": "https://github.com/hankchanocd/git-stack/issues"
27 | },
28 | "homepage": "https://github.com/hankchanocd/git-stack#readme",
29 | "devDependencies": {
30 | "commitizen": "^3.0.4",
31 | "cz-conventional-changelog": "^2.1.0",
32 | "ghooks": "^2.0.4"
33 | },
34 | "config": {
35 | "ghooks": {
36 | "post-commit": "npm run transfer"
37 | },
38 | "commitizen": {
39 | "path": "node_modules/cz-conventional-changelog"
40 | }
41 | }
42 | }
43 |
--------------------------------------------------------------------------------
/script/transfer.sh:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env bash
2 | #!/usr/bin/env zsh
3 | #
4 | # Transfer git-stack to PATH upon each commit automatically
5 |
6 | main() {
7 | if [ -d "$HOME/.script/bin" ]; then # look for ~/.script/bin first
8 | cp -v './git-stack' "$HOME/.script/bin"
9 |
10 | elif [ -d "$HOME/bin" ]; then # default to ~/bin
11 | cp -v './git-stack' "$HOME/bin"
12 |
13 | else
14 | echo 'transfer.sh does not know where to put git-stack. Please do it manually.'
15 | exit 1
16 |
17 | fi
18 |
19 | echo -e '\e[92mComplete \e[0m' # Light green followed by white
20 | echo ' '
21 | }
22 |
23 | main
24 |
--------------------------------------------------------------------------------