/[gentoo-x86]/eclass/git.eclass
Gentoo

Diff of /eclass/git.eclass

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

Revision 1.5 Revision 1.15
1# Copyright 1999-2006 Gentoo Foundation 1# Copyright 1999-2006 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/Attic/git.eclass,v 1.5 2007/04/10 11:42:29 vapier Exp $ 3# $Header: /var/cvsroot/gentoo-x86/eclass/Attic/git.eclass,v 1.15 2009/02/19 17:07:28 scarabeus Exp $
4 4
5## --------------------------------------------------------------------------- # 5## --------------------------------------------------------------------------- #
6# subversion.eclass author: Akinori Hattori <hattya@gentoo.org> 6# subversion.eclass author: Akinori Hattori <hattya@gentoo.org>
7# modified for git by Donnie Berkholz <spyderous@gentoo.org> 7# modified for git by Donnie Berkholz <spyderous@gentoo.org>
8# improved by Fernando J. Pereda <ferdy@gentoo.org> 8# improved by Fernando J. Pereda <ferdy@gentoo.org>
9# you should currently poke with updates Tomas Chvatal <scarabeus@gentoo.org>
9# 10#
10# The git eclass is written to fetch the software sources from 11# The git eclass is written to fetch the software sources from
11# git repositories like the subversion eclass. 12# git repositories like the subversion eclass.
12# 13#
13# 14#
27DESCRIPTION="Based on the ${ECLASS} eclass" 28DESCRIPTION="Based on the ${ECLASS} eclass"
28 29
29 30
30## -- add git in DEPEND 31## -- add git in DEPEND
31# 32#
32DEPEND=">=dev-util/git-1.4.0" 33DEPEND=">=dev-util/git-1.5"
33 34
34 35
35## -- EGIT_STORE_DIR: git sources store directory 36## -- EGIT_STORE_DIR: git sources store directory
36# 37#
37EGIT_STORE_DIR="${PORTAGE_ACTUAL_DISTDIR-${DISTDIR}}/git-src" 38EGIT_STORE_DIR="${PORTAGE_ACTUAL_DISTDIR-${DISTDIR}}/git-src"
38 39
39 40
40## -- EGIT_FETCH_CMD: git clone command 41## -- EGIT_FETCH_CMD: git clone command
41# 42#
42EGIT_FETCH_CMD="git clone --bare" 43EGIT_FETCH_CMD="git clone --bare --depth 1"
43 44
44## -- EGIT_UPDATE_CMD: git fetch command 45## -- EGIT_UPDATE_CMD: git fetch command
45# 46#
46EGIT_UPDATE_CMD="git fetch -f -u" 47EGIT_UPDATE_CMD="git fetch -f -u"
47 48
93# 94#
94# bootstrap script or command like autogen.sh or etc.. 95# bootstrap script or command like autogen.sh or etc..
95# 96#
96: ${EGIT_BOOTSTRAP:=} 97: ${EGIT_BOOTSTRAP:=}
97 98
99# @ECLASS-VARIABLE: EGIT_OFFLINE
100# @DESCRIPTION:
101# Set this variable to a non-empty value to disable the automatic updating of
102# an GIT source tree. This is intended to be set outside the git source
103# tree by users.
104EGIT_OFFLINE="${EGIT_OFFLINE:-${ESCM_OFFLINE}}"
98 105
99## -- EGIT_PATCHES: 106## -- EGIT_PATCHES:
100# 107#
101# git eclass can apply pathces in git_bootstrap(). 108# git eclass can apply pathces in git_bootstrap().
102# you can use regexp in this valiable like *.diff or *.patch or etc. 109# you can use regexp in this valiable like *.diff or *.patch or etc.
111 118
112 119
113## -- EGIT_BRANCH: 120## -- EGIT_BRANCH:
114# 121#
115# git eclass can fetch any branch in git_fetch(). 122# git eclass can fetch any branch in git_fetch().
123# If set, it must be before 'inherit git', otherwise both EGIT_BRANCH and
124# EGIT_TREE must be set after 'inherit git'.
116# Defaults to 'master' 125# Defaults to 'master'
117# 126#
118: ${EGIT_BRANCH:=master} 127: ${EGIT_BRANCH:=master}
119 128
120 129
166 if [[ ! -d ${EGIT_STORE_DIR} ]] ; then 175 if [[ ! -d ${EGIT_STORE_DIR} ]] ; then
167 debug-print "${FUNCNAME}: initial clone. creating git directory" 176 debug-print "${FUNCNAME}: initial clone. creating git directory"
168 addwrite / 177 addwrite /
169 mkdir -p "${EGIT_STORE_DIR}" \ 178 mkdir -p "${EGIT_STORE_DIR}" \
170 || die "${EGIT}: can't mkdir ${EGIT_STORE_DIR}." 179 || die "${EGIT}: can't mkdir ${EGIT_STORE_DIR}."
171 chmod -f o+rw "${EGIT_STORE_DIR}" \
172 || die "${EGIT}: can't chmod ${EGIT_STORE_DIR}."
173 export SANDBOX_WRITE="${SANDBOX_WRITE%%:/}" 180 export SANDBOX_WRITE="${SANDBOX_WRITE%%:/}"
174 fi 181 fi
175 182
176 cd -P "${EGIT_STORE_DIR}" || die "${EGIT}: can't chdir to ${EGIT_STORE_DIR}" 183 cd -P "${EGIT_STORE_DIR}" || die "${EGIT}: can't chdir to ${EGIT_STORE_DIR}"
177 EGIT_STORE_DIR=${PWD} 184 EGIT_STORE_DIR=${PWD}
182 [[ -z ${EGIT_REPO_URI##*/} ]] && EGIT_REPO_URI="${EGIT_REPO_URI%/}" 189 [[ -z ${EGIT_REPO_URI##*/} ]] && EGIT_REPO_URI="${EGIT_REPO_URI%/}"
183 EGIT_CLONE_DIR="${EGIT_PROJECT}" 190 EGIT_CLONE_DIR="${EGIT_PROJECT}"
184 191
185 debug-print "${FUNCNAME}: EGIT_OPTIONS = \"${EGIT_OPTIONS}\"" 192 debug-print "${FUNCNAME}: EGIT_OPTIONS = \"${EGIT_OPTIONS}\""
186 193
187 export GIT_DIR="${EGIT_CLONE_DIR}" 194 export GIT_DIR="${EGIT_STORE_DIR}/${EGIT_CLONE_DIR}"
188 195
189 if [[ ! -d ${EGIT_CLONE_DIR} ]] ; then 196 if [[ ! -d ${EGIT_CLONE_DIR} ]] ; then
190 # first clone 197 # first clone
191 einfo "git clone start -->" 198 einfo "git clone start -->"
192 einfo " repository: ${EGIT_REPO_URI}" 199 einfo " repository: ${EGIT_REPO_URI}"
193 200
194 ${EGIT_FETCH_CMD} ${EGIT_OPTIONS} "${EGIT_REPO_URI}" ${EGIT_PROJECT} \ 201 ${EGIT_FETCH_CMD} ${EGIT_OPTIONS} "${EGIT_REPO_URI}" ${EGIT_PROJECT} \
195 || die "${EGIT}: can't fetch from ${EGIT_REPO_URI}." 202 || die "${EGIT}: can't fetch from ${EGIT_REPO_URI}."
196 203
197 # We use --bare cloning, so git doesn't do this for us. 204 # We use --bare cloning, so git doesn't do this for us.
198 git repo-config remote.origin.url "${EGIT_REPO_URI}" 205 git config remote.origin.url "${EGIT_REPO_URI}"
206 elif [[ -n ${EGIT_OFFLINE} ]] ; then
207 local oldsha1=$(git rev-parse ${EGIT_BRANCH})
208 einfo "git update offline mode -->"
209 einfo " repository: ${EGIT_REPO_URI}"
210 einfo " commit: ${oldsha1}"
199 else 211 else
212 # Git urls might change, so unconditionally set it here
213 git config remote.origin.url "${EGIT_REPO_URI}"
214
200 # fetch updates 215 # fetch updates
201 einfo "git update start -->" 216 einfo "git update start -->"
202 einfo " repository: ${EGIT_REPO_URI}" 217 einfo " repository: ${EGIT_REPO_URI}"
203 218
204 local oldsha1=$(git rev-parse ${EGIT_BRANCH}) 219 local oldsha1=$(git rev-parse ${EGIT_BRANCH})
210 ${EGIT_DIFFSTAT_CMD} ${oldsha1}..${EGIT_BRANCH} | cat 225 ${EGIT_DIFFSTAT_CMD} ${oldsha1}..${EGIT_BRANCH} | cat
211 fi 226 fi
212 227
213 einfo " local clone: ${EGIT_STORE_DIR}/${EGIT_CLONE_DIR}" 228 einfo " local clone: ${EGIT_STORE_DIR}/${EGIT_CLONE_DIR}"
214 229
215 if ${EGIT_REPACK} ; then 230 if ${EGIT_REPACK} || ${EGIT_PRUNE} ; then
216 ebegin "Repacking objects" 231 ebegin "Garbage collecting the repository"
217 # Strangely enough mv asks confirmation 232 git gc $(${EGIT_PRUNE} && echo '--prune')
218 yes y | git repack -a -d -f -q > /dev/null
219 eend $?
220 fi
221
222 if ${EGIT_PRUNE} ; then
223 ebegin "Removing unreachable objects"
224 git prune
225 eend $? 233 eend $?
226 fi 234 fi
227 235
228 einfo " committish: ${EGIT_TREE}" 236 einfo " committish: ${EGIT_TREE}"
229 237
230 # export to the ${WORKDIR} 238 # export to the ${WORKDIR}
231 mkdir -p "${S}" 239 mkdir -p "${S}"
232 git tar-tree ${EGIT_TREE} | ( cd "${S}" ; tar xf - ) 240 git archive --format=tar ${EGIT_TREE} | ( cd "${S}" ; tar xf - )
233 241
234 echo ">>> Unpacked to ${S}" 242 echo ">>> Unpacked to ${S}"
235 243
236} 244}
237 245

Legend:
Removed from v.1.5  
changed lines
  Added in v.1.15

  ViewVC Help
Powered by ViewVC 1.1.20