#!/usr/bin/env bash intro=" Usage: bash wp_plugin_to_github.sh plugin_name This script will create a local git repository of your wordpress plugin. Because of the extremely slow fetching of history from wordpress.org svn this script will THROW AWAY your complete history. However, the history will still be on wordpress.org and if you really care you can fetch it from there later. Please make sure that you have uploaded your local public ssh key to your github account! " echo $intro # Test if a program is available, exit if not function test_executable() { bin=$1 command -v $bin &>/dev/null || { echo "I require $bin but it's not installed. Aborting." >&2; exit 1; } } # Test if all required tools are available function test_dependencies() { for dependency in svn curl git; do test_executable $dependency done } # Test if git svn is available function test_git_svn_dependency() { git svn help > /dev/null 2>&1 if [ $? != 0 ]; then echo "git svn doesn't seem to be installed" exit 1 fi } # Initialize the local repository function init_local_repository() { if [ -d $plugin ]; then echo "There already is a local directory $plugin... aborting" exit 1 fi mkdir $plugin cd $plugin git svn init -s http://svn.wp-plugins.org/$plugin # List the recent log svn log http://svn.wp-plugins.org/$plugin | head -20 echo "================================================================" echo "Please enter the revision you want to work with." echo "IMPORTANT: You can not use a tag commit (Create tag nn message)." echo "================================================================" echo read revision git svn fetch -$revision if [ $? != 0 ]; then echo "Couldn't initialize the repository" exit 1 fi cd .. } # Ask for the plugin's name function get_plugin_name() { echo "Please enter your plugin's name as listed on wp.org" read plugin } # Ask for github credentials function get_github_credentials() { echo "Please enter your github username" read login echo "Please enter your github API token, see https://github.com/settings/admin" read token } # Create the remote github repository function init_github_repository() { cd $plugin desc="WordPress plugin $plugin" curl -F "login=$login" -F "token=$token" https://github.com/api/v2/json/repos/create -F "name=wp-$plugin" -F "description=$desc" git remote add origin git@github.com:$login/wp-$plugin.git git push -u origin master cd .. } test_dependencies test_git_svn_dependency if [ -n $1 ]; then plugin=$1 else get_plugin_name fi echo "Plugin $plugin" if [[ -n $2 || -n $3 ]]; then login=$2 token=$3 else get_github_credentials fi init_local_repository init_github_repository