| 1 | #!/bin/bash |
| 2 | |
| 3 | ## Delete/create a dir |
| 4 | ## usage: dm_reset_dirs <path1> <path2> ... |
| 5 | function dm_reset_dirs() { |
| 6 | for d in "$@" ; do |
| 7 | [ -d "$d" ] && rm -rf "$d" |
| 8 | done |
| 9 | |
| 10 | mkdir -p "$@" |
| 11 | } |
| 12 | |
| 13 | ## Copy files from one dir into another dir |
| 14 | ## usage: dm_install_dir <from-dir> <to-dir> |
| 15 | function dm_install_dir() { |
| 16 | local from="$1" |
| 17 | local to="$2" |
| 18 | |
| 19 | if [ ! -d "$to" ]; then |
| 20 | mkdir -p "$to" |
| 21 | fi |
| 22 | ${DM_RSYNC:-rsync} -avC --exclude=.git --exclude=.svn "$from/./" "$to/./" |
| 23 | } |
| 24 | |
| 25 | ## Copy listed files |
| 26 | ## usage: dm_install_files <from-dir> <to-dir> <file1> <file2>... |
| 27 | function dm_install_files() { |
| 28 | local from="$1" |
| 29 | shift |
| 30 | local to="$1" |
| 31 | shift |
| 32 | |
| 33 | for file in "$@" ; do |
| 34 | [ -f "$from/$file" ] && cp -f "$from/$file" "$to/$file" |
| 35 | done |
| 36 | } |
| 37 | |
| 38 | ## usage: dm_remove_files <directory> <file1> <file2>... |
| 39 | function dm_remove_files() { |
| 40 | local tgt="$1" |
| 41 | shift |
| 42 | |
| 43 | for file in "$@" ; do |
| 44 | [ -f "$tgt/$file" ] && rm -f "$tgt/$file" |
| 45 | done |
| 46 | } |
| 47 | |
| 48 | ## Copy all bower dependencies |
| 49 | function dm_install_bower() { |
| 50 | local repo="$1" |
| 51 | local to="$2" |
| 52 | |
| 53 | local excludes_rsync="" |
| 54 | for exclude in .git .svn {T,t}est{,s} {D,d}oc{,s} {E,e}xample{,s} ; do |
| 55 | excludes_rsync="--exclude=${exclude} ${excludes_rsync}" |
| 56 | done |
| 57 | |
| 58 | [ ! -d "$to" ] && mkdir "$to" |
| 59 | ${DM_RSYNC:-rsync} -avC $excludes_rsync "$repo/./" "$to/./" |
| 60 | } |
| 61 | |
| 62 | ## Copy all core files |
| 63 | ## usage: dm_install_core <core_repo_path> <to_path> |
| 64 | function dm_install_core() { |
| 65 | local repo="$1" |
| 66 | local to="$2" |
| 67 | |
| 68 | for dir in ang css i js PEAR templates bin CRM api extern Reports install settings Civi partials release-notes ; do |
| 69 | [ -d "$repo/$dir" ] && dm_install_dir "$repo/$dir" "$to/$dir" |
| 70 | done |
| 71 | |
| 72 | dm_install_files "$repo" "$to" {agpl-3.0,agpl-3.0.exception,gpl,CONTRIBUTORS}.txt |
| 73 | dm_install_files "$repo" "$to" composer.json composer.lock bower.json package.json Civi.php README.md release-notes.md |
| 74 | |
| 75 | mkdir -p "$to/sql" |
| 76 | pushd "$repo" >> /dev/null |
| 77 | dm_install_files "$repo" "$to" sql/civicrm*.mysql sql/case_sample*.mysql |
| 78 | ## TODO: for master, remove counties.US.SQL.gz |
| 79 | popd >> /dev/null |
| 80 | |
| 81 | if [ -d $to/bin ] ; then |
| 82 | rm -f $to/bin/setup.sh |
| 83 | rm -f $to/bin/setup.php4.sh |
| 84 | rm -f $to/bin/setup.bat |
| 85 | fi |
| 86 | |
| 87 | set +e |
| 88 | rm -rf $to/sql/civicrm_*.??_??.mysql |
| 89 | set -e |
| 90 | } |
| 91 | |
| 92 | ## Copy all packages |
| 93 | ## usage: dm_install_packages <packages_repo_path> <to_path> |
| 94 | function dm_install_packages() { |
| 95 | local repo="$1" |
| 96 | local to="$2" |
| 97 | |
| 98 | local excludes_rsync="" |
| 99 | for exclude in .git .svn _ORIGINAL_ SeleniumRC PHPUnit PhpDocumentor SymfonyComponents amavisd-new git-footnote PHP/CodeCoverage ; do |
| 100 | excludes_rsync="--exclude=${exclude} ${excludes_rsync}" |
| 101 | done |
| 102 | |
| 103 | ## Note: These small folders have items that previously were not published, |
| 104 | ## but there's no real cost to including them, and excluding them seems |
| 105 | ## likely to cause confusion as the codebase evolves: |
| 106 | ## packages/Files packages/PHP packages/Text |
| 107 | |
| 108 | [ ! -d "$to" ] && mkdir "$to" |
| 109 | ${DM_RSYNC:-rsync} -avC $excludes_rsync --include=core "$repo/./" "$to/./" |
| 110 | } |
| 111 | |
| 112 | ## Copy Drupal-integration module |
| 113 | ## usage: dm_install_drupal <drupal_repo_path> <to_path> |
| 114 | function dm_install_drupal() { |
| 115 | local repo="$1" |
| 116 | local to="$2" |
| 117 | dm_install_dir "$repo" "$to" |
| 118 | |
| 119 | # Set full version in .info files. See CRM-15768. |
| 120 | local MODULE_DIRS=`find "$to" -type f -name "*.info"` |
| 121 | for INFO in $MODULE_DIRS; do |
| 122 | if [ $(uname) = "Darwin" ]; then |
| 123 | ## BSD sed |
| 124 | sed -i '' "s/version = \([0-9]*\.x-\)[1-9.]*/version = \1$DM_VERSION/g" $INFO |
| 125 | else |
| 126 | ## GNU sed |
| 127 | sed -i'' "s/version = \([0-9]*\.x-\)[1-9.]*/version = \1$DM_VERSION/g" $INFO |
| 128 | fi |
| 129 | done |
| 130 | |
| 131 | for f in "$to/.gitignore" "$to/.toxic.json" ; do |
| 132 | if [ -f "$f" ]; then |
| 133 | rm -f "$f" |
| 134 | fi |
| 135 | done |
| 136 | } |
| 137 | |
| 138 | ## Copy Joomla-integration module |
| 139 | ## usage: dm_install_joomla <joomla_repo_path> <to_path> |
| 140 | function dm_install_joomla() { |
| 141 | local repo="$1" |
| 142 | local to="$2" |
| 143 | dm_install_dir "$repo" "$to" |
| 144 | |
| 145 | ## Before this change, the zip file included the joomla-integration |
| 146 | ## modules twice. The two were basically identical -- except that |
| 147 | ## one included .gitignore and the omitted it. We'll now omit it |
| 148 | ## consistently. |
| 149 | |
| 150 | for f in "$to/.gitignore" "$to/.toxic.json" ; do |
| 151 | if [ -f "$f" ]; then |
| 152 | rm -f "$f" |
| 153 | fi |
| 154 | done |
| 155 | } |
| 156 | |
| 157 | ## usage: dm_install_l10n <l10n_repo_path> <to_path> |
| 158 | function dm_install_l10n() { |
| 159 | local repo="$1" |
| 160 | local to="$2" |
| 161 | dm_install_dir "$repo" "$to" |
| 162 | } |
| 163 | |
| 164 | ## Copy composer's "vendor" folder |
| 165 | ## usage: dm_install_vendor <from_path> <to_path> |
| 166 | function dm_install_vendor() { |
| 167 | local repo="$1" |
| 168 | local to="$2" |
| 169 | |
| 170 | local excludes_rsync="" |
| 171 | for exclude in .git .svn {T,t}est{,s} {D,d}oc{,s} {E,e}xample{,s} ; do |
| 172 | excludes_rsync="--exclude=${exclude} ${excludes_rsync}" |
| 173 | done |
| 174 | |
| 175 | [ ! -d "$to" ] && mkdir "$to" |
| 176 | ${DM_RSYNC:-rsync} -avC $excludes_rsync "$repo/./" "$to/./" |
| 177 | } |
| 178 | |
| 179 | ## usage: dm_install_wordpress <wp_repo_path> <to_path> |
| 180 | function dm_install_wordpress() { |
| 181 | local repo="$1" |
| 182 | local to="$2" |
| 183 | |
| 184 | if [ ! -d "$to" ]; then |
| 185 | mkdir -p "$to" |
| 186 | fi |
| 187 | ${DM_RSYNC:-rsync} -avC \ |
| 188 | --exclude=.git \ |
| 189 | --exclude=.svn \ |
| 190 | --exclude=civicrm.config.php.wordpress \ |
| 191 | --exclude=.toxic.json \ |
| 192 | --exclude=.gitignore \ |
| 193 | --exclude=civicrm \ |
| 194 | "$repo/./" "$to/./" |
| 195 | ## Need --exclude=civicrm for self-building on WP site |
| 196 | } |
| 197 | |
| 198 | |
| 199 | ## Generate the "bower_components" folder. |
| 200 | ## usage: dm_generate_bower <repo_path> |
| 201 | function dm_generate_bower() { |
| 202 | local repo="$1" |
| 203 | pushd "$repo" |
| 204 | ${DM_NPM:-npm} install |
| 205 | ${DM_NODE:-node} node_modules/bower/bin/bower install |
| 206 | popd |
| 207 | } |
| 208 | |
| 209 | ## Generate the composer "vendor" folder |
| 210 | ## usage: dm_generate_vendor <repo_path> |
| 211 | function dm_generate_vendor() { |
| 212 | local repo="$1" |
| 213 | pushd "$repo" |
| 214 | ${DM_COMPOSER:-composer} install |
| 215 | popd |
| 216 | } |
| 217 | |
| 218 | ## Generate civicrm-version.php |
| 219 | ## usage: dm_generate_version <file> <ufname> |
| 220 | function dm_generate_version() { |
| 221 | local to="$1" |
| 222 | local ufname="$2" |
| 223 | |
| 224 | # final touch |
| 225 | echo "<?php |
| 226 | function civicrmVersion( ) { |
| 227 | return array( 'version' => '$DM_VERSION', |
| 228 | 'cms' => '$ufname', |
| 229 | 'revision' => '$DM_REVISION' ); |
| 230 | } |
| 231 | " > "$to" |
| 232 | } |
| 233 | |
| 234 | ## Perform a hard checkout on a given report |
| 235 | ## usage: dm_git_checkout <repo_path> <tree-ish> |
| 236 | function dm_git_checkout() { |
| 237 | pushd "$1" |
| 238 | git checkout . |
| 239 | git checkout "$2" |
| 240 | popd |
| 241 | } |