summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--bitbake/lib/bb/fetch/git.py82
1 files changed, 80 insertions, 2 deletions
diff --git a/bitbake/lib/bb/fetch/git.py b/bitbake/lib/bb/fetch/git.py
index de415ec309..b37a09743e 100644
--- a/bitbake/lib/bb/fetch/git.py
+++ b/bitbake/lib/bb/fetch/git.py
@@ -22,6 +22,7 @@ BitBake 'Fetch' git implementation
22 22
23import os 23import os
24import bb 24import bb
25import bb.persist_data
25from bb import data 26from bb import data
26from bb.fetch import Fetch 27from bb.fetch import Fetch
27from bb.fetch import runfetchcmd 28from bb.fetch import runfetchcmd
@@ -117,6 +118,7 @@ class Git(Fetch):
117 118
118 repofile = os.path.join(data.getVar("DL_DIR", d, 1), ud.mirrortarball) 119 repofile = os.path.join(data.getVar("DL_DIR", d, 1), ud.mirrortarball)
119 120
121
120 coname = '%s' % (ud.tag) 122 coname = '%s' % (ud.tag)
121 codir = os.path.join(ud.clonedir, coname) 123 codir = os.path.join(ud.clonedir, coname)
122 124
@@ -206,11 +208,19 @@ class Git(Fetch):
206 output = runfetchcmd("%s log --pretty=oneline -n 1 %s -- 2> /dev/null | wc -l" % (basecmd, tag), d, quiet=True) 208 output = runfetchcmd("%s log --pretty=oneline -n 1 %s -- 2> /dev/null | wc -l" % (basecmd, tag), d, quiet=True)
207 return output.split()[0] != "0" 209 return output.split()[0] != "0"
208 210
209 def _revision_key(self, url, ud, d): 211 def _revision_key(self, url, ud, d, branch=False):
210 """ 212 """
211 Return a unique key for the url 213 Return a unique key for the url
212 """ 214 """
213 return "git:" + ud.host + ud.path.replace('/', '.') + ud.branch 215 key = 'git:' + ud.host + ud.path.replace('/', '.')
216 if branch:
217 return key + ud.branch
218 else:
219 return key
220
221 def generate_revision_key(self, url, ud, d, branch=False):
222 key = self._revision_key(url, ud, d, branch)
223 return "%s-%s" % (key, bb.data.getVar("PN", d, True) or "")
214 224
215 def _latest_revision(self, url, ud, d): 225 def _latest_revision(self, url, ud, d):
216 """ 226 """
@@ -228,6 +238,74 @@ class Git(Fetch):
228 raise bb.fetch.FetchError("Fetch command %s gave empty output\n" % (cmd)) 238 raise bb.fetch.FetchError("Fetch command %s gave empty output\n" % (cmd))
229 return output.split()[0] 239 return output.split()[0]
230 240
241 def latest_revision(self, url, ud, d):
242 """
243 Look in the cache for the latest revision, if not present ask the SCM.
244 """
245 persisted = bb.persist_data.persist(d)
246 revs = persisted['BB_URI_HEADREVS']
247
248 key = self.generate_revision_key(url, ud, d, branch=True)
249 rev = revs[key]
250 if rev is None:
251 # Compatibility with old key format, no branch included
252 oldkey = self.generate_revision_key(url, ud, d, branch=False)
253 rev = revs[oldkey]
254 if rev is not None:
255 del revs[oldkey]
256 else:
257 rev = self._latest_revision(url, ud, d)
258 revs[key] = rev
259
260 return str(rev)
261
262 def sortable_revision(self, url, ud, d):
263 """
264
265 """
266 pd = bb.persist_data.persist(d)
267 localcounts = pd['BB_URI_LOCALCOUNT']
268 key = self.generate_revision_key(url, ud, d, branch=True)
269 oldkey = self.generate_revision_key(url, ud, d, branch=False)
270
271 latest_rev = self._build_revision(url, ud, d)
272 last_rev = localcounts[key + '_rev']
273 if last_rev is None:
274 last_rev = localcounts[oldkey + '_rev']
275 if last_rev is not None:
276 del localcounts[oldkey + '_rev']
277 localcounts[key + '_rev'] = last_rev
278
279 uselocalcount = bb.data.getVar("BB_LOCALCOUNT_OVERRIDE", d, True) or False
280 count = None
281 if uselocalcount:
282 count = Fetch.localcount_internal_helper(ud, d)
283 if count is None:
284 count = localcounts[key + '_count']
285 if count is None:
286 count = localcounts[oldkey + '_count']
287 if count is not None:
288 del localcounts[oldkey + '_count']
289 localcounts[key + '_count'] = count
290
291 if last_rev == latest_rev:
292 return str(count + "+" + latest_rev)
293
294 buildindex_provided = hasattr(self, "_sortable_buildindex")
295 if buildindex_provided:
296 count = self._sortable_buildindex(url, ud, d, latest_rev)
297 if count is None:
298 count = "0"
299 elif uselocalcount or buildindex_provided:
300 count = str(count)
301 else:
302 count = str(int(count) + 1)
303
304 localcounts[key + '_rev'] = latest_rev
305 localcounts[key + '_count'] = count
306
307 return str(count + "+" + latest_rev)
308
231 def _build_revision(self, url, ud, d): 309 def _build_revision(self, url, ud, d):
232 return ud.tag 310 return ud.tag
233 311