3 ## Take an existing, tar-based CiviCRM directory and convert it to a git working directory
7 ###########################################
8 ## usage: do_gitify <repo-url> <existing-dir> [git-checkout-options]
15 if [ -d "$TGT/.git" ]; then
16 echo "[[Already checked out git repo ($TGT) -- skip $REPO]]"
19 [ -d $TGT ] || mkdir
-p "$TGT"
20 [ -d $TMP ] && rm -rf "$TMP"
21 echo "[[Checkout $REPO ($TMP)]]"
22 echo "[git clone "$@
" "$REPO" "$TMP"]"
23 git clone
"$@" "$REPO" "$TMP"
25 echo "[[Swap metadata]]"
26 mv "$TMP/.git" "$TGT/.git"
28 echo "[[Remove local modifications]]"
29 pushd "$TGT" > /dev
/null
36 ###########################################
37 ## add hook shims to a repo
38 ## usage: do_hookify <canonical-repo-name> <repo-path> <relative-hook-path>
39 function do_hookify
() {
40 GIT_CANONICAL_REPO_NAME
="$1"
43 if [ -n "$CIVICRM_GIT_HOOKS" ]; then
44 echo "[[Install recommended hooks ($TGT)]]"
45 for HOOK
in commit-msg post-checkout post-merge pre-commit prepare-commit-msg post-commit pre-rebase post-rewrite
;do
46 cat << TMPL > "$TGT/.git/hooks/$HOOK"
48 if [ -f "\$GIT_DIR/${HOOK_DIR}/${HOOK}" ]; then
49 ## Note: GIT_CANONICAL_REPO_NAME was not provided by early hook-stubs
50 export GIT_CANONICAL_REPO_NAME="$GIT_CANONICAL_REPO_NAME"
51 source "\$GIT_DIR/${HOOK_DIR}/${HOOK}"
54 chmod +x
"$TGT/.git/hooks/$HOOK"
57 echo "[[Skip hook installation ($TGT) -- use \"--hooks\" to enable]]"
61 ###########################################
62 ## Create or update the URL of a git remote
63 ## usage: git_set_remote <local-repo-path> <remote-name> <remote-url>
64 function git_set_remote
() {
68 echo "[[Set remote ($REMOTE_NAME => $REMOTE_URL within $REPODIR)]]"
70 pushd "$REPODIR" >> /dev
/null
71 git remote set-url
"$REMOTE_NAME" "$REMOTE_URL" >/dev
/null
2>&1 || git remote add
"$REMOTE_NAME" "$REMOTE_URL"
75 ###########################################
76 ## usage: do_targzify <targz-url> <file-name> <existing-dir>
77 ## Fetches a tar.gz archive and unpacks it in the current directory
78 function do_targzify
() {
84 if [ -d "$TGT" ]; then
85 echo "[[Already have a copy of the archive ($TGT) -- skip $TARGZURL]]"
91 echo "[[Downloading $TARGZURL ($TMP)]]"
92 echo "[wget \"$TARGZURL\" -O \"$TMP/$TARFILE\"]"
94 pushd "$CIVICRM_ROOT" > /dev
/null
95 wget
-q "$TARGZURL" -O "$TMP/$TARFILE"
96 tar zxfv
"$TMP/$TARFILE"
103 ###########################################
104 ## usage: do_gencode <civicrm-path>
105 function do_gencode
() {
106 pushd "$1/xml" > /dev
/null
107 if [ -f "GenCode.php" ]; then
108 echo "[[Generate files]]"
111 echo "[[Skip \"Generate files\"]]"
116 ###########################################
117 ## config_repo <repo-name> <local-path> <default-branch> <git-scripts-path>
119 function config_repo
() {
120 do_gitify
"${UPSTREAM_GIT_BASE_URL}/${1}.git" "$2" -b "$3"
121 do_hookify
"$1" "$2" "$4"
122 ## doesn't work with http -- git ls-remote "git://github.com/civicrm/civicrm-drupalz.git" HEAD --exit-code &>- ; echo $?
123 if [ -n "$FORK_GIT_BASE_URL" ]; then
124 git_set_remote
"$2" upstream
"${UPSTREAM_GIT_BASE_URL}/${1}.git"
125 git_set_remote
"$2" origin
"${FORK_GIT_BASE_URL}/${1}.git"
127 git_set_remote
"$2" origin
"${UPSTREAM_GIT_BASE_URL}/${1}.git"
131 function check_dep
() {
132 if [ -z "`which git`" ]; then
133 echo "command not found: git"
136 if [ -z `which php` ]; then
137 echo "command not found: php"
141 ###########################################
142 #### Main: Parse arguments
150 CIVICRM_BRANCH
="master"
152 UPSTREAM_GIT_BASE_URL
="https://github.com/civicrm"
154 while [ -n "$1" ]; do
155 if [ "$1" == "--l10n" ]; then
157 elif [ "$1" == "--hooks" ]; then
158 CIVICRM_GIT_HOOKS
="$1"
159 elif [ "$1" == "--upstream" ]; then
161 UPSTREAM_GIT_BASE_URL
="$1"
162 elif [ "$1" == "--fork" ]; then
164 FORK_GIT_BASE_URL
="$1"
165 elif [ -z "$CIVICRM_CMS" ]; then
168 elif [ -z "$CIVICRM_ROOT" ]; then
172 echo "unrecognized argument: $1"
178 if [ -z "$CIVICRM_ROOT" -o ! -d "$CIVICRM_ROOT" -o -z "$UPSTREAM_GIT_BASE_URL" -o -z "$CIVICRM_CMS" ]; then
179 echo "Convert a directory into a set of CiviCRM git clones"
180 echo "usage: $0 <Drupal|Drupal6|Joomla|WordPress|all> <existing-civicrm-root> [--fork <base-url>] [--upstream <base-url>] [--l10n] [--hooks]"
181 echo " <cms-name>: one of: Drupal|Drupal6|Joomla|WordPress|all"
182 echo " <git-base-url>: a base URL shared by the desiried git repos (e.g. git://github.com/civicrm)"
183 echo " <existing-civicrm-root>: the main directory containing CiviCRM"
184 echo " --upstream <base-url>: specify the base URL for upstream repositories"
185 echo " --fork <base-url>: specify the base URL for your personal fork repositories"
186 echo " --l10n: optionally fetch localization data"
187 echo " --hooks: optionally install recommended git hooks; the hooks are mostly"
188 echo " tested with git CLI under Linux and OSX; they haven't been"
189 echo " tested with git GUIs or Windows"
191 echo "Note: If pointing to a pre-existing directory, your local changes may be replaced by"
192 echo "the pristine code from git. If you've made changes, then make sure there's a backup!"
194 echo "example: $0 Drupal /var/www/drupal7/sites/all/modules/civicrm"
195 echo " (checkout core code plus Drupal 7.x integration code)"
197 echo "example: $0 Drupal6 /var/www/drupal6/sites/all/modules/civicrm"
198 echo " (checkout core code plus Drupal 6.x integration code)"
200 echo "example: $0 all ~/src/civicrm --upstream git@github.com:civicrm --l10n"
201 echo " (checkout core code plus Drupal 7.x, Joomla, and WordPress integration code and l10n using SSH)"
205 ###########################################
206 #### Main: Update git repo metadata ####
209 ## config_repo <repo-name> <local-path> <default-branch> <git-scripts-path>
210 config_repo civicrm-core
"$CIVICRM_ROOT" "$CIVICRM_BRANCH" "../tools/scripts/git"
211 config_repo civicrm-packages
"$CIVICRM_ROOT/packages" "$CIVICRM_BRANCH" "../../tools/scripts/git"
212 case "$CIVICRM_CMS" in
214 config_repo civicrm-drupal
"$CIVICRM_ROOT/drupal" "7.x-$CIVICRM_BRANCH" "../../tools/scripts/git"
217 config_repo civicrm-drupal
"$CIVICRM_ROOT/drupal" "6.x-$CIVICRM_BRANCH" "../../tools/scripts/git"
220 config_repo civicrm-joomla
"$CIVICRM_ROOT/joomla" "$CIVICRM_BRANCH" "../../tools/scripts/git"
223 config_repo civicrm-wordpress
"$CIVICRM_ROOT/WordPress" "$CIVICRM_BRANCH" "../../tools/scripts/git"
226 config_repo civicrm-drupal
"$CIVICRM_ROOT/drupal" "7.x-$CIVICRM_BRANCH" "../../tools/scripts/git"
227 config_repo civicrm-joomla
"$CIVICRM_ROOT/joomla" "$CIVICRM_BRANCH" "../../tools/scripts/git"
228 config_repo civicrm-wordpress
"$CIVICRM_ROOT/WordPress" "$CIVICRM_BRANCH" "../../tools/scripts/git"
231 echo "Unrecognized CMS: $CIVICRM_CMS"
234 if [ "$CIVICRM_L10N" == "--l10n" ]; then
235 do_targzify
"https://download.civicrm.org/civicrm-l10n-core/archives/civicrm-l10n-daily.tar.gz" "civicrm-l10n-daily.tar.gz" "$CIVICRM_ROOT/l10n"
238 do_gencode
"$CIVICRM_ROOT"