summaryrefslogtreecommitdiff
path: root/eclass/git.eclass
blob: db13061557c050d4f642411a226171692fdba917 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
# Copyright 1999-2005 Gentoo Foundation
# Distributed under the terms of the GNU General Public License v2
# $Header: $
# Nonofficial eclass by Ycarus. For new version look here : http://gentoo.zugaina.org/
# This is a modified version of the subversion eclass

## --------------------------------------------------------------------------- #
# Author: Ycarus <ycarus@zugaina.org>
# 
# The git eclass is written to fetch the software sources from
# git repositories like the cvs eclass.
#
#
# Description:
#   If you use this eclass, the ${S} is ${WORKDIR}/${P}.
#   It is necessary to define the EGIT_REPO_URI variables at least.
#
## --------------------------------------------------------------------------- #

inherit eutils

ECLASS="git"
INHERITED="${INHERITED} ${ECLASS}"
EGIT="git.eclass"

EXPORT_FUNCTIONS src_unpack

HOMEPAGE="http://kernel.org/pub/software/scm/git/"
DESCRIPTION="GIT eclass"


## -- add cogito in DEPEND
#
DEPEND="dev-util/cogito"


## -- EGIT_STORE_DIR:  subversion sources store directory
#
EGIT_STORE_DIR="${DISTDIR}/git-src"


## -- EGIT_FETCH_CMD:  subversion fetch command
#
# default: git checkout
#
[ -z "${EGIT_FETCH_CMD}" ]  && EGIT_FETCH_CMD="cg-clone"
[ -z "${EGIT_UPDATE_CMD}" ]  && EGIT_UPDATE_CMD="cg-update"


## -- EGIT_REPO_URI:  repository uri
#
[ -z "${EGIT_REPO_URI}" ]  && EGIT_REPO_URI=""


## -- EGIT_PROJECT:  project name of your ebuild
#
# git eclass will check out the subversion repository like:
#
#   ${EGIT_STORE_DIR}/${EGIT_PROJECT}/${EGIT_REPO_URI##*/}
#
#
# default: ${PN/-git}.
#
[ -z "${EGIT_PROJECT}" ] && EGIT_PROJECT="${PN/-git}"


## -- git_fetch() ------------------------------------------------- #

function git_fetch() {
	# EGIT_REPO_URI is empty.
	[ -z "${EGIT_REPO_URI}" ] && die "${EGIT}: EGIT_REPO_URI is empty."
	EGIT_REPO_URI="${EGIT_REPO_URI} ${EGIT_PROJECT}"
	# check for the protocol.
	case ${EGIT_REPO_URI%%:*} in
		rsync)	;;
		ssh)	;;
		*)
			die "${EGITN}: fetch from "${EGIT_REPO_URI%:*}" is not yet implemented."
			;;
	esac

	if [ ! -d "${EGIT_STORE_DIR}" ]; then
		debug-print "${FUNCNAME}: initial checkout. creating git directory"

		addwrite /
		mkdir -p "${EGIT_STORE_DIR}"      || die "${EGIT}: can't mkdir ${EGIT_STORE_DIR}."
		chmod -f o+rw "${EGIT_STORE_DIR}" || die "${EGIT}: can't chmod ${EGIT_STORE_DIR}."
		export SANDBOX_WRITE="${SANDBOX_WRITE%%:/}"
	fi

	cd -P "${EGIT_STORE_DIR}" || die "${EGIT}: can't chdir to ${EGIT_STORE_DIR}"
	EGIT_STORE_DIR=${PWD}

	# every time
	addwrite "${EGIT_STORE_DIR}"

	[ -z "${EGIT_REPO_URI##*/}" ] && EGIT_REPO_URI="${EGIT_REPO_URI%/}"
	EGIT_CO_DIR="${EGIT_PROJECT}/${EGIT_PROJECT}"
	if [ ! -d "${EGIT_CO_DIR}/.git" ]; then
		# first check out
		einfo "git check out start -->"
		einfo "   checkout from: ${EGIT_REPO_URI}"

		mkdir -p "${EGIT_PROJECT}"      || die "${EGIT}: can't mkdir ${EGIT_PROJECT}."
		chmod -f o+rw "${EGIT_PROJECT}" || die "${EGIT}: can't chmod ${EGIT_PROJECT}."
		cd "${EGIT_PROJECT}"
		${EGIT_FETCH_CMD} ${EGIT_REPO_URI} || die "${EGIT}: can't fetch from ${EGIT_REPO_URI}."

		einfo "   checkouted in: ${EGIT_STORE_DIR}/${EGIT_CO_DIR}"

	else
		# update working copy
		einfo "git update start -->"
		einfo "   update from: ${EGIT_REPO_URI}"
		cd "${EGIT_CO_DIR}"
		${EGIT_UPDATE_CMD} || die "${EGIT}: can't update from ${EGIT_REPO_URI}."
		einfo "    updated in: ${EGIT_STORE_DIR}/${EGIT_CO_DIR}"

	fi

	# copy to the ${WORKDIR}
	cp -Rf "${EGIT_STORE_DIR}/${EGIT_CO_DIR}" "${S}" || die "${EGIT}: can't copy to ${S}."
	einfo "     copied to: ${S}"
	echo

}

## -- git_src_unpack() ------------------------------------------------ #

function git_src_unpack() {

	if [ "${A}" != "" ]; then
		unpack ${A}
	fi
	git_fetch || die "${EGIT}: unknown problem in git_fetch()."
}