#!/bin/sh # pre-commit hook for Sketch files Git tracking # Set UTF-8 encoding export LANG=UTF-8 # Needed to work in SourceTree export PATH=/usr/local/bin:$PATH # Git repository absolute path git_root=`git rev-parse --show-toplevel` # Unzipped Sketch files path unzipped_root="$git_root/_unzipped" # Untouched Sketch files path untouched_root="$git_root/_untouched" # Array of all staged files git_diff=`git diff --name-only --cached | grep ".sketch$"` # Check if any Sketch file is staged if [[ ${git_diff[0]} == '' ]] then echo "No Sketch file staged." else while read staged_sketch do # Absolute Sketch file path sketch="$git_root/$staged_sketch" # Unzipped Sketch file directory path unzipped_directory="$unzipped_root/$staged_sketch" # Untouched Sketch file path untouched_sketch="$untouched_root/$staged_sketch" # Untouched Sketch file directory path untouched_directory=`dirname "$untouched_sketch"` echo "Processing '`basename $sketch`'." # Delete existing directory rm -rf "$unzipped_directory" # If Sketch file wasn't deleted if ! git diff --summary --cached -- $staged_sketch | grep "delete" 2>&1 > /dev/null then # Copy untouched Sketch file to untouched folder if mkdir -p "$untouched_directory" then if cp "$sketch" "$untouched_sketch" then echo " Untouched '`basename $sketch`' backed up." else echo " Couldn't copy untouched '`basename $sketch`'." exit 1 fi else echo " Couldn't create '$untouched_root' directory." exit 1 fi # Stage untouched file git add "$untouched_sketch" # Create directory if mkdir -p "$unzipped_directory" then if cd "$unzipped_directory" then # Unzip Sketch file if unzip -q "$sketch" then echo " '`basename $sketch`' unzipped." # Prettify all JSON files for json_file in $(find . -name "*.json") do if python3 -m json.tool "$json_file" "$json_file".pretty then if mv "$json_file".pretty "$json_file" then echo " '$json_file' prettified." else echo " Couldn't move prettified '$json_file'." rm -rf "$unzipped_directory" exit 1 fi else echo " Couldn't prettify '$json_file'." rm -rf "$unzipped_directory" exit 1 fi done else echo " Couldn't unzip '`basename $sketch`'." rm -rf "$unzipped_directory" exit 1 fi cd "$git_root" else echo " Couldn't change directory to '$unzipped_directory'." exit 1 fi else echo " Couldn't create directory '$unzipped_directory'." exit 1 fi else rm "$sketch" rm -rf "$untouched_sketch" echo " '`basename $sketch`' was removed with all unzipped and untouched data." fi git add "$unzipped_directory/*" # Unstage working Sketch file git rm --cached "$sketch" done <<< "$git_diff" fi