Merge pull request #115 from dlobo/CRM-12088
[civicrm-core.git] / bin / gitify
1 #!/bin/bash
2
3 ## Take an existing, tar-based CiviCRM directory and convert it to a git working directory
4
5 #### Helpers ####
6
7 ## usage: do_gitify <repo-url> <existing-dir> [git-checkout-options]
8 function do_gitify() {
9 REPO="$1"
10 TGT="$2"
11 TMP="${TGT}.tmp"
12 shift 2
13
14 if [ -d "$TGT/.git" ]; then
15 echo "[[Already checked out git repo ($TGT) -- skip $REPO]]"
16 return
17 fi
18 [ -d $TGT ] || mkdir -p "$TGT"
19 [ -d $TMP ] && rm -rf "$TMP"
20 echo "[[Checkout $REPO ($TMP)]]"
21 echo "[git clone "$@" "$REPO" "$TMP"]"
22 git clone "$@" "$REPO" "$TMP"
23
24 echo "[[Swap metadata]]"
25 mv "$TMP/.git" "$TGT/.git"
26
27 echo "[[Remove local modifications]]"
28 pushd "$TGT" > /dev/null
29 git checkout -- .
30 popd > /dev/null
31
32 rm -rf "$TMP"
33 }
34
35 ## add hook shims to a repo
36 ## usage: do_hookify <repo-path> <relative-hook-path>
37 function do_hookify() {
38 TGT="$1"
39 HOOK_DIR="$2"
40 if [ -n "$CIVICRM_GIT_HOOKS" ]; then
41 echo "[[Install recommended hooks ($TGT)]]"
42 for HOOK in commit-msg post-checkout post-merge pre-commit prepare-commit-msg post-commit pre-rebase post-rewrite ;do
43 cat << TMPL > "$TGT/.git/hooks/$HOOK"
44 #!/bin/bash
45 if [ -f "\$GIT_DIR/${HOOK_DIR}/${HOOK}" ]; then
46 source "\$GIT_DIR/${HOOK_DIR}/${HOOK}"
47 fi
48 TMPL
49 chmod +x "$TGT/.git/hooks/$HOOK"
50 done
51 else
52 echo "[[Skip hook installation ($TGT) -- use \"--hooks\" to enable]]"
53 fi
54 }
55
56 ## usage: do_svnify <repo-url> <existing-dir>
57 function do_svnify() {
58 REPO="$1"
59 TGT="$2"
60 shift 2
61
62 if [ -d "$TGT/.svn" ]; then
63 echo "[[Already checked out SVN repo ($TGT) -- skip $REPO]]"
64 return
65 fi
66 [ -d $TGT ] || mkdir -p "$TGT"
67 [ -d $TMP ] && rm -rf "$TMP"
68 echo "[[Checkout $REPO ($TMP)]]"
69
70 echo "[svn co \"$REPO\" \"$TGT\"]"
71 svn co "$REPO" "$TGT"
72 }
73
74 function check_dep() {
75 if [ -z "`which git`" ]; then
76 echo "command not found: git"
77 exit 3
78 fi
79 if [ -z `which php` ]; then
80 echo "command not found: php"
81 fi
82 }
83
84 #### Main ####
85
86 set -e
87
88 CIVICRM_CMS=""
89 GIT_BASE_URL=""
90 CIVICRM_ROOT=""
91 CIVICRM_L10N=""
92 CIVICRM_GIT_HOOKS=""
93 CIVICRM_BRANCH="master"
94
95 while [ -n "$1" ]; do
96 if [ "$1" == "--l10n" ]; then
97 CIVICRM_L10N="$1"
98 elif [ "$1" == "--hooks" ]; then
99 CIVICRM_GIT_HOOKS="$1"
100 elif [ -z "$CIVICRM_CMS" ]; then
101 ## First arg
102 CIVICRM_CMS="$1"
103 elif [ -z "$GIT_BASE_URL" ]; then
104 ## Second arg
105 GIT_BASE_URL="$1"
106 elif [ -z "$CIVICRM_ROOT" ]; then
107 ## Third arg
108 CIVICRM_ROOT="$1"
109 else
110 echo "unrecognized argument: $1"
111 exit 2
112 fi
113 shift
114 done
115
116 if [ -z "$CIVICRM_ROOT" -o ! -d "$CIVICRM_ROOT" -o -z "$GIT_BASE_URL" -o -z "$CIVICRM_CMS" ]; then
117 echo "Convert a directory into a set of CiviCRM git clones"
118 echo "usage: $0 <Drupal|Drupal6|Joomla|WordPress|all> <git-base-url> <existing-civicrm-root> [--l10n] [--hooks]"
119 echo " <cms-name>: one of: Drupal|Drupal6|Joomla|WordPress|all"
120 echo " <git-base-url>: a base URL shared by the desiried git repos (e.g. git://github.com/civicrm)"
121 echo " <existing-civicrm-root>: the main directory containing CiviCRM"
122 echo " --l10n: optionally fetch localization data; currently requires svn"
123 echo " --hooks: optionally install recommended git hooks; the hooks are mostly"
124 echo " tested with git CLI under Linux and OSX; they haven't been"
125 echo " tested with git GUIs or Windows"
126 echo ""
127 echo "Note: If pointing to a pre-existing directory, your local changes may be replaced by"
128 echo "the pristine code from git/svn. If you've made changes, then make sure there's a backup!"
129 echo ""
130 echo "example: $0 Drupal git://github.com/civicrm /var/www/drupal7/sites/all/modules/civicrm"
131 echo " (checkout core code plus Drupal 7.x integration code using Git's read-only protocol)"
132 echo ""
133 echo "example: $0 Drupal6 https://github.com/civicrm /var/www/drupal6/sites/all/modules/civicrm"
134 echo " (checkout core code plus Drupal 6.x integration code using read-only HTTP protocol)"
135 echo ""
136 echo "example: $0 all git@github.com:civicrm ~/src/civicrm l10n"
137 echo " (checkout core code plus Drupal 7.x, Joomla, and WordPress integration code and l10n using SSH)"
138 exit 1
139 fi
140
141 check_dep
142 do_gitify "${GIT_BASE_URL}/civicrm-core.git" "$CIVICRM_ROOT" -b "${CIVICRM_BRANCH}"
143 do_hookify "$CIVICRM_ROOT" "../tools/scripts/git"
144 do_gitify "${GIT_BASE_URL}/civicrm-packages.git" "$CIVICRM_ROOT/packages" -b "${CIVICRM_BRANCH}"
145 do_hookify "$CIVICRM_ROOT/packages" "../../tools/scripts/git"
146 case "$CIVICRM_CMS" in
147 Drupal)
148 do_gitify "${GIT_BASE_URL}/civicrm-drupal.git" "$CIVICRM_ROOT/drupal" -b "7.x-${CIVICRM_BRANCH}"
149 do_hookify "$CIVICRM_ROOT/drupal" "../../tools/scripts/git"
150 ;;
151 Drupal6)
152 do_gitify "${GIT_BASE_URL}/civicrm-drupal.git" "$CIVICRM_ROOT/drupal" -b "6.x-${CIVICRM_BRANCH}"
153 do_hookify "$CIVICRM_ROOT/drupal" "../../tools/scripts/git"
154 ;;
155 Joomla)
156 do_gitify "${GIT_BASE_URL}/civicrm-joomla.git" "$CIVICRM_ROOT/joomla" -b "${CIVICRM_BRANCH}"
157 do_hookify "$CIVICRM_ROOT/joomla" "../../tools/scripts/git"
158 ;;
159 WordPress)
160 do_gitify "${GIT_BASE_URL}/civicrm-wordpress.git" "$CIVICRM_ROOT/WordPress" -b "${CIVICRM_BRANCH}"
161 do_hookify "$CIVICRM_ROOT/WordPress" "../../tools/scripts/git"
162 ;;
163 all)
164 do_gitify "${GIT_BASE_URL}/civicrm-drupal.git" "$CIVICRM_ROOT/drupal" -b "7.x-${CIVICRM_BRANCH}"
165 do_hookify "$CIVICRM_ROOT/drupal" "../../tools/scripts/git"
166 do_gitify "${GIT_BASE_URL}/civicrm-joomla.git" "$CIVICRM_ROOT/joomla" -b "${CIVICRM_BRANCH}"
167 do_hookify "$CIVICRM_ROOT/joomla" "../../tools/scripts/git"
168 do_gitify "${GIT_BASE_URL}/civicrm-wordpress.git" "$CIVICRM_ROOT/WordPress" -b "${CIVICRM_BRANCH}"
169 do_hookify "$CIVICRM_ROOT/WordPress" "../../tools/scripts/git"
170 ;;
171 *)
172 echo "Unrecognized CMS: $CIVICRM_CMS"
173 esac
174
175 if [ "$CIVICRM_L10N" == "--l10n" ]; then
176 do_svnify "http://svn.civicrm.org/l10n/trunk" "$CIVICRM_ROOT/l10n"
177 fi
178
179 pushd "$CIVICRM_ROOT/xml" > /dev/null
180 if [ -f "GenCode.php" ]; then
181 echo "[[Generate files]]"
182 php GenCode.php
183 else
184 echo "[[Skip \"Generate files\"]]"
185 fi
186 popd > /dev/null