Skip to content

Commit

Permalink
✨ Added pre-commit hook to handle submodules (#8302)
Browse files Browse the repository at this point in the history
refs #8235

Usage:
- for existing development setups: `grunt symlink` (will create the pre-commit symlink)
- for fresh development setups: `npm run init` (symlinking happens as part of the typical set up)

- ✨ Added pre-commit hook to handle submodules
  - Checks to see if there are any submodules about to be committed
  - Output matches closely to `git st` to make it easy to read
  - Requires interaction from the committer to accept that this really should be committed
- ✨ Use grunt symlink to register githooks
  - Grunt symlink will make a link to the pre-commit hook
  - It ONLY does this if there isn't already a pre-commit hook, so won't overwrite anything
  - It does this as part of npm run init, not grunt init, because a release repo would NEVER want this
  - This is a dev tool, that configures the repo for development
  • Loading branch information
ErisDS authored and kevinansfield committed Apr 13, 2017
1 parent 8dae1cd commit e9a5370
Show file tree
Hide file tree
Showing 5 changed files with 63 additions and 2 deletions.
40 changes: 40 additions & 0 deletions .github/hooks/pre-commit
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
#!/bin/bash
# Modified from https://github.com/chaitanyagupta/gitutils

green='\033[0;32m'
no_color='\033[0m'
grey='\033[0;90m'


ROOT_DIR=$(git rev-parse --show-cdup)
SUBMODULES=$(grep path ${ROOT_DIR}.gitmodules | sed 's/^.*path = //')
MOD_SUBMODULES=$(git diff --cached --name-only | grep -F "$SUBMODULES")

echo -e "Checking submodules ${grey}(pre-commit hook)${no_color} "

# If no modified submodules, exit with status code 0, else prompt the
# user and exit accordingly
if [[ -n "$MOD_SUBMODULES" ]]; then
echo "Submodules to be committed:"
echo " (use \"git reset HEAD <file>...\" to unstage)"
echo

for SUB in $MOD_SUBMODULES
do
echo -e "\t${green}modified:\t$SUB${no_color}"
done
echo
echo -n -e "Continue with commit? ${grey}(N|y)${no_color} "
read -n 1 reply </dev/tty
echo
if [[ "$reply" == "y" || "$reply" == "Y" ]]; then
echo "Permitting submodules to be committed..."
exit 0
else
echo "Aborting commit due to submodule update."
exit 1
fi
else
echo "No submodules in commit, continuing..."
exit 0
fi
16 changes: 16 additions & 0 deletions Gruntfile.js
Original file line number Diff line number Diff line change
Expand Up @@ -370,6 +370,22 @@ var overrides = require('./core/server/overrides'),
'core/client': ['shell:ember:watch', '--live-reload-base-url="' + utils.url.getSubdir() + '/ghost/"']
}
}
},

// ### grunt-contrib-symlink
// Create symlink for git hooks
symlink: {
githooks: {
// Enable overwrite to delete symlinks before recreating them
overwrite: false,
// Enable force to overwrite symlinks outside the current working directory
force: false,
// Expand to all files in /hooks
expand: true,
cwd: '.github/hooks',
src: ['*'],
dest: '.git/hooks'
}
}
};

Expand Down
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@ Install and run Ghost.
<b>git clone git@github.com:TryGhost/Ghost.git ghost</b>
Download the Ghost code base
<b>npm run init</b>
Short command for: yarn global add knex-migrator ember-cli grunt-cli && yarn install && grunt init
Short command for: yarn global add knex-migrator ember-cli grunt-cli && yarn install && grunt symlink && grunt init
<b>knex-migrator init</b>
Creates and initialises your database
<b>grunt dev</b>
Expand Down
3 changes: 2 additions & 1 deletion package.json
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@
"scripts": {
"start": "node index",
"test": "grunt validate --verbose",
"init": "yarn global add knex-migrator ember-cli grunt-cli && yarn install && grunt init || true"
"init": "yarn global add knex-migrator ember-cli grunt-cli && yarn install && grunt symlink && grunt init || true"
},
"engines": {
"node": "^4.2.0 || ^6.5.0"
Expand Down Expand Up @@ -99,6 +99,7 @@
"grunt-contrib-compress": "1.3.0",
"grunt-contrib-copy": "1.0.0",
"grunt-contrib-jshint": "1.0.0",
"grunt-contrib-symlink": "^1.0.0",
"grunt-contrib-uglify": "2.0.0",
"grunt-contrib-watch": "1.0.0",
"grunt-cssnano": "2.1.0",
Expand Down
4 changes: 4 additions & 0 deletions yarn.lock
Original file line number Diff line number Diff line change
Expand Up @@ -1895,6 +1895,10 @@ grunt-contrib-jshint@1.0.0:
hooker "^0.2.3"
jshint "~2.9.1"

grunt-contrib-symlink@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/grunt-contrib-symlink/-/grunt-contrib-symlink-1.0.0.tgz#c83616c035711a6c0062a2810cf1c77ffc6bed2b"

grunt-contrib-uglify@2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/grunt-contrib-uglify/-/grunt-contrib-uglify-2.0.0.tgz#8c9970d690936cde6d25aa1193549bd929016930"
Expand Down

0 comments on commit e9a5370

Please sign in to comment.