| 1 | # Copyright 1999-2011 Gentoo Foundation |
1 | # Copyright 1999-2011 Gentoo Foundation |
| 2 | # Distributed under the terms of the GNU General Public License v2 |
2 | # Distributed under the terms of the GNU General Public License v2 |
| 3 | # $Header: /var/cvsroot/gentoo-x86/eclass/git-2.eclass,v 1.20 2011/09/23 13:57:55 mgorny Exp $ |
3 | # $Header: /var/cvsroot/gentoo-x86/eclass/git-2.eclass,v 1.24 2011/09/23 13:58:58 mgorny Exp $ |
| 4 | |
4 | |
| 5 | # @ECLASS: git-2.eclass |
5 | # @ECLASS: git-2.eclass |
| 6 | # @MAINTAINER: |
6 | # @MAINTAINER: |
| 7 | # Donnie Berkholz <dberkholz@gentoo.org> |
7 | # Donnie Berkholz <dberkholz@gentoo.org> |
| 8 | # @BLURB: Eclass for fetching and unpacking git repositories. |
8 | # @BLURB: Eclass for fetching and unpacking git repositories. |
| … | |
… | |
| 118 | # @DESCRIPTION: |
118 | # @DESCRIPTION: |
| 119 | # If non-empty this variable bans unpacking of ${A} content into the srcdir. |
119 | # If non-empty this variable bans unpacking of ${A} content into the srcdir. |
| 120 | # Default behaviour is to unpack ${A} content. |
120 | # Default behaviour is to unpack ${A} content. |
| 121 | |
121 | |
| 122 | # @FUNCTION: git-2_init_variables |
122 | # @FUNCTION: git-2_init_variables |
|
|
123 | # @INTERNAL |
| 123 | # @DESCRIPTION: |
124 | # @DESCRIPTION: |
| 124 | # Internal function initializing all git variables. |
125 | # Internal function initializing all git variables. |
| 125 | # We define it in function scope so user can define |
126 | # We define it in function scope so user can define |
| 126 | # all the variables before and after inherit. |
127 | # all the variables before and after inherit. |
| 127 | git-2_init_variables() { |
128 | git-2_init_variables() { |
| … | |
… | |
| 158 | |
159 | |
| 159 | : ${EGIT_PRUNE:=} |
160 | : ${EGIT_PRUNE:=} |
| 160 | } |
161 | } |
| 161 | |
162 | |
| 162 | # @FUNCTION: git-2_submodules |
163 | # @FUNCTION: git-2_submodules |
|
|
164 | # @INTERNAL |
| 163 | # @DESCRIPTION: |
165 | # @DESCRIPTION: |
| 164 | # Internal function wrapping the submodule initialisation and update. |
166 | # Internal function wrapping the submodule initialisation and update. |
| 165 | git-2_submodules() { |
167 | git-2_submodules() { |
| 166 | debug-print-function ${FUNCNAME} "$@" |
168 | debug-print-function ${FUNCNAME} "$@" |
| 167 | if [[ ${EGIT_HAS_SUBMODULES} ]]; then |
169 | if [[ ${EGIT_HAS_SUBMODULES} ]]; then |
| … | |
… | |
| 184 | popd > /dev/null |
186 | popd > /dev/null |
| 185 | fi |
187 | fi |
| 186 | } |
188 | } |
| 187 | |
189 | |
| 188 | # @FUNCTION: git-2_branch |
190 | # @FUNCTION: git-2_branch |
|
|
191 | # @INTERNAL |
| 189 | # @DESCRIPTION: |
192 | # @DESCRIPTION: |
| 190 | # Internal function that changes branch for the repo based on EGIT_COMMIT and |
193 | # Internal function that changes branch for the repo based on EGIT_COMMIT and |
| 191 | # EGIT_BRANCH variables. |
194 | # EGIT_BRANCH variables. |
| 192 | git-2_branch() { |
195 | git-2_branch() { |
| 193 | debug-print-function ${FUNCNAME} "$@" |
196 | debug-print-function ${FUNCNAME} "$@" |
| … | |
… | |
| 208 | |
211 | |
| 209 | popd > /dev/null |
212 | popd > /dev/null |
| 210 | } |
213 | } |
| 211 | |
214 | |
| 212 | # @FUNCTION: git-2_gc |
215 | # @FUNCTION: git-2_gc |
|
|
216 | # @INTERNAL |
| 213 | # @DESCRIPTION: |
217 | # @DESCRIPTION: |
| 214 | # Internal function running garbage collector on checked out tree. |
218 | # Internal function running garbage collector on checked out tree. |
| 215 | git-2_gc() { |
219 | git-2_gc() { |
| 216 | debug-print-function ${FUNCNAME} "$@" |
220 | debug-print-function ${FUNCNAME} "$@" |
| 217 | |
221 | |
| 218 | local args |
222 | local args |
| 219 | |
223 | |
| 220 | pushd "${EGIT_DIR}" > /dev/null |
|
|
| 221 | if [[ ${EGIT_REPACK} || ${EGIT_PRUNE} ]]; then |
224 | if [[ ${EGIT_REPACK} || ${EGIT_PRUNE} ]]; then |
|
|
225 | pushd "${EGIT_DIR}" > /dev/null |
| 222 | ebegin "Garbage collecting the repository" |
226 | ebegin "Garbage collecting the repository" |
| 223 | [[ ${EGIT_PRUNE} ]] && args='--prune' |
227 | [[ ${EGIT_PRUNE} ]] && args='--prune' |
| 224 | debug-print "${FUNCNAME}: git gc ${args}" |
228 | debug-print "${FUNCNAME}: git gc ${args}" |
| 225 | git gc ${args} |
229 | git gc ${args} |
| 226 | eend $? |
230 | eend $? |
| 227 | fi |
|
|
| 228 | popd > /dev/null |
231 | popd > /dev/null |
|
|
232 | fi |
| 229 | } |
233 | } |
| 230 | |
234 | |
| 231 | # @FUNCTION: git-2_prepare_storedir |
235 | # @FUNCTION: git-2_prepare_storedir |
|
|
236 | # @INTERNAL |
| 232 | # @DESCRIPTION: |
237 | # @DESCRIPTION: |
| 233 | # Internal function preparing directory where we are going to store SCM |
238 | # Internal function preparing directory where we are going to store SCM |
| 234 | # repository. |
239 | # repository. |
| 235 | git-2_prepare_storedir() { |
240 | git-2_prepare_storedir() { |
| 236 | debug-print-function ${FUNCNAME} "$@" |
241 | debug-print-function ${FUNCNAME} "$@" |
| … | |
… | |
| 257 | clone_dir=${EGIT_PROJECT} |
262 | clone_dir=${EGIT_PROJECT} |
| 258 | else |
263 | else |
| 259 | clone_dir=${EGIT_REPO_URI##*/} |
264 | clone_dir=${EGIT_REPO_URI##*/} |
| 260 | fi |
265 | fi |
| 261 | EGIT_DIR=${EGIT_STORE_DIR}/${clone_dir} |
266 | EGIT_DIR=${EGIT_STORE_DIR}/${clone_dir} |
|
|
267 | |
|
|
268 | # Try to migrate from git.eclass git-src/ |
|
|
269 | if [[ ! -d ${EGIT_DIR} && ${EGIT_STORE_DIR} == */egit-src ]]; then |
|
|
270 | local old_store_dir=${EGIT_STORE_DIR/%egit-src/git-src} |
|
|
271 | local old_location=${old_store_dir}/${EGIT_PROJECT:-${PN}} |
|
|
272 | |
|
|
273 | if [[ -d ${old_location} ]]; then |
|
|
274 | elog "${FUNCNAME}: ${CATEGORY}/${PF} will be cloned from old location." |
|
|
275 | elog "It will be necessary to rebuild the package to fetch updates." |
|
|
276 | EGIT_REPO_URI="${old_location} ${EGIT_REPO_URI}" |
|
|
277 | fi |
|
|
278 | fi |
| 262 | fi |
279 | fi |
| 263 | export EGIT_DIR=${EGIT_DIR} |
280 | export EGIT_DIR=${EGIT_DIR} |
| 264 | debug-print "${FUNCNAME}: Storing the repo into \"${EGIT_DIR}\"." |
281 | debug-print "${FUNCNAME}: Storing the repo into \"${EGIT_DIR}\"." |
| 265 | } |
282 | } |
| 266 | |
283 | |
| 267 | # @FUNCTION: git-2_move_source |
284 | # @FUNCTION: git-2_move_source |
|
|
285 | # @INTERNAL |
| 268 | # @DESCRIPTION: |
286 | # @DESCRIPTION: |
| 269 | # Internal function moving sources from the EGIT_DIR to EGIT_SOURCEDIR dir. |
287 | # Internal function moving sources from the EGIT_DIR to EGIT_SOURCEDIR dir. |
| 270 | git-2_move_source() { |
288 | git-2_move_source() { |
| 271 | debug-print-function ${FUNCNAME} "$@" |
289 | debug-print-function ${FUNCNAME} "$@" |
| 272 | |
290 | |
| … | |
… | |
| 278 | || die "${FUNCNAME}: sync to \"${EGIT_SOURCEDIR}\" failed" |
296 | || die "${FUNCNAME}: sync to \"${EGIT_SOURCEDIR}\" failed" |
| 279 | popd > /dev/null |
297 | popd > /dev/null |
| 280 | } |
298 | } |
| 281 | |
299 | |
| 282 | # @FUNCTION: git-2_initial_clone |
300 | # @FUNCTION: git-2_initial_clone |
|
|
301 | # @INTERNAL |
| 283 | # @DESCRIPTION: |
302 | # @DESCRIPTION: |
| 284 | # Internal function running initial clone on specified repo_uri. |
303 | # Internal function running initial clone on specified repo_uri. |
| 285 | git-2_initial_clone() { |
304 | git-2_initial_clone() { |
| 286 | debug-print-function ${FUNCNAME} "$@" |
305 | debug-print-function ${FUNCNAME} "$@" |
| 287 | |
306 | |
| … | |
… | |
| 301 | [[ ${EGIT_REPO_URI_SELECTED} ]] \ |
320 | [[ ${EGIT_REPO_URI_SELECTED} ]] \ |
| 302 | || die "${FUNCNAME}: can't fetch from ${EGIT_REPO_URI}" |
321 | || die "${FUNCNAME}: can't fetch from ${EGIT_REPO_URI}" |
| 303 | } |
322 | } |
| 304 | |
323 | |
| 305 | # @FUNCTION: git-2_update_repo |
324 | # @FUNCTION: git-2_update_repo |
|
|
325 | # @INTERNAL |
| 306 | # @DESCRIPTION: |
326 | # @DESCRIPTION: |
| 307 | # Internal function running update command on specified repo_uri. |
327 | # Internal function running update command on specified repo_uri. |
| 308 | git-2_update_repo() { |
328 | git-2_update_repo() { |
| 309 | debug-print-function ${FUNCNAME} "$@" |
329 | debug-print-function ${FUNCNAME} "$@" |
| 310 | |
330 | |
| … | |
… | |
| 336 | [[ ${EGIT_REPO_URI_SELECTED} ]] \ |
356 | [[ ${EGIT_REPO_URI_SELECTED} ]] \ |
| 337 | || die "${FUNCNAME}: can't update from ${EGIT_REPO_URI}" |
357 | || die "${FUNCNAME}: can't update from ${EGIT_REPO_URI}" |
| 338 | } |
358 | } |
| 339 | |
359 | |
| 340 | # @FUNCTION: git-2_fetch |
360 | # @FUNCTION: git-2_fetch |
|
|
361 | # @INTERNAL |
| 341 | # @DESCRIPTION: |
362 | # @DESCRIPTION: |
| 342 | # Internal function fetching repository from EGIT_REPO_URI and storing it in |
363 | # Internal function fetching repository from EGIT_REPO_URI and storing it in |
| 343 | # specified EGIT_STORE_DIR. |
364 | # specified EGIT_STORE_DIR. |
| 344 | git-2_fetch() { |
365 | git-2_fetch() { |
| 345 | debug-print-function ${FUNCNAME} "$@" |
366 | debug-print-function ${FUNCNAME} "$@" |
| … | |
… | |
| 394 | echo " storage directory: \"${EGIT_DIR}\"" |
415 | echo " storage directory: \"${EGIT_DIR}\"" |
| 395 | echo " checkout type: ${repo_type}" |
416 | echo " checkout type: ${repo_type}" |
| 396 | } |
417 | } |
| 397 | |
418 | |
| 398 | # @FUNCTION: git_bootstrap |
419 | # @FUNCTION: git_bootstrap |
|
|
420 | # @INTERNAL |
| 399 | # @DESCRIPTION: |
421 | # @DESCRIPTION: |
| 400 | # Internal function that runs bootstrap command on unpacked source. |
422 | # Internal function that runs bootstrap command on unpacked source. |
| 401 | git-2_bootstrap() { |
423 | git-2_bootstrap() { |
| 402 | debug-print-function ${FUNCNAME} "$@" |
424 | debug-print-function ${FUNCNAME} "$@" |
| 403 | |
425 | |
| … | |
… | |
| 436 | popd > /dev/null |
458 | popd > /dev/null |
| 437 | fi |
459 | fi |
| 438 | } |
460 | } |
| 439 | |
461 | |
| 440 | # @FUNCTION: git-2_migrate_repository |
462 | # @FUNCTION: git-2_migrate_repository |
|
|
463 | # @INTERNAL |
| 441 | # @DESCRIPTION: |
464 | # @DESCRIPTION: |
| 442 | # Internal function migrating between bare and normal checkout repository. |
465 | # Internal function migrating between bare and normal checkout repository. |
| 443 | # This is based on usage of EGIT_SUBMODULES, at least until they |
466 | # This is based on usage of EGIT_SUBMODULES, at least until they |
| 444 | # start to work with bare checkouts sanely. |
467 | # start to work with bare checkouts sanely. |
| 445 | # This function also set some global variables that differ between |
468 | # This function also set some global variables that differ between |
| … | |
… | |
| 494 | debug-print "${FUNCNAME}: working in bare repository for \"${EGIT_DIR}\"" |
517 | debug-print "${FUNCNAME}: working in bare repository for \"${EGIT_DIR}\"" |
| 495 | EGIT_LOCAL_OPTIONS+="${EGIT_OPTIONS} --bare" |
518 | EGIT_LOCAL_OPTIONS+="${EGIT_OPTIONS} --bare" |
| 496 | MOVE_COMMAND="git clone -l -s -n ${EGIT_DIR// /\\ }" |
519 | MOVE_COMMAND="git clone -l -s -n ${EGIT_DIR// /\\ }" |
| 497 | EGIT_UPDATE_CMD="git fetch -t -f -u origin ${EGIT_BRANCH}:${EGIT_BRANCH}" |
520 | EGIT_UPDATE_CMD="git fetch -t -f -u origin ${EGIT_BRANCH}:${EGIT_BRANCH}" |
| 498 | UPSTREAM_BRANCH="${EGIT_BRANCH}" |
521 | UPSTREAM_BRANCH="${EGIT_BRANCH}" |
|
|
522 | EGIT_LOCAL_NONBARE= |
| 499 | else |
523 | else |
| 500 | debug-print "${FUNCNAME}: working in bare repository for non-bare \"${EGIT_DIR}\"" |
524 | debug-print "${FUNCNAME}: working in bare repository for non-bare \"${EGIT_DIR}\"" |
| 501 | MOVE_COMMAND="cp -pPR ." |
525 | MOVE_COMMAND="cp -pPR ." |
| 502 | EGIT_LOCAL_OPTIONS="${EGIT_OPTIONS}" |
526 | EGIT_LOCAL_OPTIONS="${EGIT_OPTIONS}" |
| 503 | EGIT_UPDATE_CMD="git pull -f -u ${EGIT_OPTIONS}" |
527 | EGIT_UPDATE_CMD="git pull -f -u ${EGIT_OPTIONS}" |
| … | |
… | |
| 505 | EGIT_LOCAL_NONBARE="true" |
529 | EGIT_LOCAL_NONBARE="true" |
| 506 | fi |
530 | fi |
| 507 | } |
531 | } |
| 508 | |
532 | |
| 509 | # @FUNCTION: git-2_cleanup |
533 | # @FUNCTION: git-2_cleanup |
|
|
534 | # @INTERNAL |
| 510 | # @DESCRIPTION: |
535 | # @DESCRIPTION: |
| 511 | # Internal function cleaning up all the global variables |
536 | # Internal function cleaning up all the global variables |
| 512 | # that are not required after the unpack has been done. |
537 | # that are not required after the unpack has been done. |
| 513 | git-2_cleanup() { |
538 | git-2_cleanup() { |
| 514 | debug-print-function ${FUNCNAME} "$@" |
539 | debug-print-function ${FUNCNAME} "$@" |