summaryrefslogtreecommitdiffstats
path: root/bitbake/lib/bb/fetch2/__init__.py
diff options
context:
space:
mode:
Diffstat (limited to 'bitbake/lib/bb/fetch2/__init__.py')
-rw-r--r--bitbake/lib/bb/fetch2/__init__.py59
1 files changed, 36 insertions, 23 deletions
diff --git a/bitbake/lib/bb/fetch2/__init__.py b/bitbake/lib/bb/fetch2/__init__.py
index d62ba81b36..41848edd29 100644
--- a/bitbake/lib/bb/fetch2/__init__.py
+++ b/bitbake/lib/bb/fetch2/__init__.py
@@ -394,8 +394,8 @@ def get_srcrev(d):
394 logger.error("SRCREV was used yet no valid SCM was found in SRC_URI") 394 logger.error("SRCREV was used yet no valid SCM was found in SRC_URI")
395 raise ParameterError 395 raise ParameterError
396 396
397 if len(scms) == 1: 397 if len(scms) == 1 and len(urldata[scms[0]].names) == 1:
398 return urldata[scms[0]].method.sortable_revision(scms[0], urldata[scms[0]], d) 398 return urldata[scms[0]].method.sortable_revision(scms[0], urldata[scms[0]], d, urldata[scms[0]].names[0])
399 399
400 # 400 #
401 # Mutiple SCMs are in SRC_URI so we resort to SRCREV_FORMAT 401 # Mutiple SCMs are in SRC_URI so we resort to SRCREV_FORMAT
@@ -406,9 +406,9 @@ def get_srcrev(d):
406 raise ParameterError 406 raise ParameterError
407 407
408 for scm in scms: 408 for scm in scms:
409 if 'name' in urldata[scm].parm: 409 ud = urldata[scm]
410 name = urldata[scm].parm["name"] 410 for name in ud.names:
411 rev = urldata[scm].method.sortable_revision(scm, urldata[scm], d) 411 rev = ud.method.sortable_revision(scm, ud, d, name)
412 format = format.replace(name, rev) 412 format = format.replace(name, rev)
413 413
414 return format 414 return format
@@ -550,16 +550,29 @@ class FetchData(object):
550 self.md5_expected = bb.data.getVarFlag("SRC_URI", self.md5_name, d) 550 self.md5_expected = bb.data.getVarFlag("SRC_URI", self.md5_name, d)
551 self.sha256_expected = bb.data.getVarFlag("SRC_URI", self.sha256_name, d) 551 self.sha256_expected = bb.data.getVarFlag("SRC_URI", self.sha256_name, d)
552 552
553 self.names = self.parm.get("name",'').split(',')
553 for m in methods: 554 for m in methods:
554 if m.supports(url, self, d): 555 if m.supports(url, self, d):
555 self.method = m 556 self.method = m
556 if hasattr(m,"urldata_init"): 557 if hasattr(m,"urldata_init"):
557 m.urldata_init(self, d) 558 m.urldata_init(self, d)
558 if m.supports_srcrev(): 559 if m.supports_srcrev():
559 self.revision = Fetch.srcrev_internal_helper(self, d); 560 self.setup_srcrevs(d)
560 return 561 return
561 raise NoMethodError("Missing implementation for url %s" % url) 562 raise NoMethodError("Missing implementation for url %s" % url)
562 563
564 def setup_srcrevs(self, d):
565 if not self.method.supports_srcrev():
566 return
567
568 self.revisions = {}
569 for name in self.names:
570 self.revisions[name] = Fetch.srcrev_internal_helper(self, d, name)
571
572 # add compatibility code for non name specified case
573 if len(self.names) == 1:
574 self.revision = self.revisions[self.names[0]]
575
563 def setup_localpath(self, d): 576 def setup_localpath(self, d):
564 self.setup = True 577 self.setup = True
565 if "localpath" in self.parm: 578 if "localpath" in self.parm:
@@ -757,7 +770,7 @@ class Fetch(object):
757 return data.getVar("SRCDATE", d, 1) or data.getVar("CVSDATE", d, 1) or data.getVar("DATE", d, 1) 770 return data.getVar("SRCDATE", d, 1) or data.getVar("CVSDATE", d, 1) or data.getVar("DATE", d, 1)
758 getSRCDate = staticmethod(getSRCDate) 771 getSRCDate = staticmethod(getSRCDate)
759 772
760 def srcrev_internal_helper(ud, d): 773 def srcrev_internal_helper(ud, d, name):
761 """ 774 """
762 Return: 775 Return:
763 a) a source revision if specified 776 a) a source revision if specified
@@ -772,25 +785,25 @@ class Fetch(object):
772 return ud.parm['tag'] 785 return ud.parm['tag']
773 786
774 rev = None 787 rev = None
775 if 'name' in ud.parm: 788 if name != '':
776 pn = data.getVar("PN", d, 1) 789 pn = data.getVar("PN", d, 1)
777 rev = data.getVar("SRCREV_%s_pn-%s" % (ud.parm['name'], pn), d, 1) 790 rev = data.getVar("SRCREV_%s_pn-%s" % (name, pn), d, 1)
778 if not rev: 791 if not rev:
779 rev = data.getVar("SRCREV_pn-%s_%s" % (pn, ud.parm['name']), d, 1) 792 rev = data.getVar("SRCREV_pn-%s_%s" % (pn, name), d, 1)
780 if not rev: 793 if not rev:
781 rev = data.getVar("SRCREV_%s" % (ud.parm['name']), d, 1) 794 rev = data.getVar("SRCREV_%s" % name, d, 1)
782 if not rev: 795 if not rev:
783 rev = data.getVar("SRCREV", d, 1) 796 rev = data.getVar("SRCREV", d, 1)
784 if rev == "INVALID": 797 if rev == "INVALID":
785 raise InvalidSRCREV("Please set SRCREV to a valid value") 798 raise InvalidSRCREV("Please set SRCREV to a valid value")
786 if rev == "AUTOINC": 799 if rev == "AUTOINC":
787 rev = ud.method.latest_revision(ud.url, ud, d) 800 rev = ud.method.latest_revision(ud.url, ud, d, name)
788 801
789 return rev 802 return rev
790 803
791 srcrev_internal_helper = staticmethod(srcrev_internal_helper) 804 srcrev_internal_helper = staticmethod(srcrev_internal_helper)
792 805
793 def localcount_internal_helper(ud, d): 806 def localcount_internal_helper(ud, d, name):
794 """ 807 """
795 Return: 808 Return:
796 a) a locked localcount if specified 809 a) a locked localcount if specified
@@ -798,9 +811,9 @@ class Fetch(object):
798 """ 811 """
799 812
800 localcount = None 813 localcount = None
801 if 'name' in ud.parm: 814 if name != '':
802 pn = data.getVar("PN", d, 1) 815 pn = data.getVar("PN", d, 1)
803 localcount = data.getVar("LOCALCOUNT_" + ud.parm['name'], d, 1) 816 localcount = data.getVar("LOCALCOUNT_" + name, d, 1)
804 if not localcount: 817 if not localcount:
805 localcount = data.getVar("LOCALCOUNT", d, 1) 818 localcount = data.getVar("LOCALCOUNT", d, 1)
806 return localcount 819 return localcount
@@ -829,7 +842,7 @@ class Fetch(object):
829 md5out.close() 842 md5out.close()
830 write_md5sum = staticmethod(write_md5sum) 843 write_md5sum = staticmethod(write_md5sum)
831 844
832 def latest_revision(self, url, ud, d): 845 def latest_revision(self, url, ud, d, name):
833 """ 846 """
834 Look in the cache for the latest revision, if not present ask the SCM. 847 Look in the cache for the latest revision, if not present ask the SCM.
835 """ 848 """
@@ -838,15 +851,15 @@ class Fetch(object):
838 851
839 pd = persist_data.persist(d) 852 pd = persist_data.persist(d)
840 revs = pd['BB_URI_HEADREVS'] 853 revs = pd['BB_URI_HEADREVS']
841 key = self.generate_revision_key(url, ud, d) 854 key = self.generate_revision_key(url, ud, d, name)
842 rev = revs[key] 855 rev = revs[key]
843 if rev != None: 856 if rev != None:
844 return str(rev) 857 return str(rev)
845 858
846 revs[key] = rev = self._latest_revision(url, ud, d) 859 revs[key] = rev = self._latest_revision(url, ud, d, name)
847 return rev 860 return rev
848 861
849 def sortable_revision(self, url, ud, d): 862 def sortable_revision(self, url, ud, d, name):
850 """ 863 """
851 864
852 """ 865 """
@@ -855,9 +868,9 @@ class Fetch(object):
855 868
856 pd = persist_data.persist(d) 869 pd = persist_data.persist(d)
857 localcounts = pd['BB_URI_LOCALCOUNT'] 870 localcounts = pd['BB_URI_LOCALCOUNT']
858 key = self.generate_revision_key(url, ud, d) 871 key = self.generate_revision_key(url, ud, d, name)
859 872
860 latest_rev = self._build_revision(url, ud, d) 873 latest_rev = self._build_revision(url, ud, d, name)
861 last_rev = localcounts[key + '_rev'] 874 last_rev = localcounts[key + '_rev']
862 uselocalcount = bb.data.getVar("BB_LOCALCOUNT_OVERRIDE", d, True) or False 875 uselocalcount = bb.data.getVar("BB_LOCALCOUNT_OVERRIDE", d, True) or False
863 count = None 876 count = None
@@ -885,8 +898,8 @@ class Fetch(object):
885 898
886 return str(count + "+" + latest_rev) 899 return str(count + "+" + latest_rev)
887 900
888 def generate_revision_key(self, url, ud, d): 901 def generate_revision_key(self, url, ud, d, name):
889 key = self._revision_key(url, ud, d) 902 key = self._revision_key(url, ud, d, name)
890 return "%s-%s" % (key, bb.data.getVar("PN", d, True) or "") 903 return "%s-%s" % (key, bb.data.getVar("PN", d, True) or "")
891 904
892from . import cvs 905from . import cvs