diff options
Diffstat (limited to 'bitbake/lib/bb')
| -rw-r--r-- | bitbake/lib/bb/fetch2/__init__.py | 13 | ||||
| -rw-r--r-- | bitbake/lib/bb/fetch2/git.py | 12 | ||||
| -rw-r--r-- | bitbake/lib/bb/tests/fetch.py | 6 |
3 files changed, 17 insertions, 14 deletions
diff --git a/bitbake/lib/bb/fetch2/__init__.py b/bitbake/lib/bb/fetch2/__init__.py index 5aa67accc3..cfbbce5288 100644 --- a/bitbake/lib/bb/fetch2/__init__.py +++ b/bitbake/lib/bb/fetch2/__init__.py | |||
| @@ -1248,20 +1248,17 @@ def srcrev_internal_helper(ud, d, name): | |||
| 1248 | if srcrev and srcrev != "INVALID": | 1248 | if srcrev and srcrev != "INVALID": |
| 1249 | break | 1249 | break |
| 1250 | 1250 | ||
| 1251 | if 'rev' in ud.parm and 'tag' in ud.parm: | 1251 | if 'rev' in ud.parm: |
| 1252 | raise FetchError("Please specify a ;rev= parameter or a ;tag= parameter in the url %s but not both." % (ud.url)) | 1252 | parmrev = ud.parm['rev'] |
| 1253 | |||
| 1254 | if 'rev' in ud.parm or 'tag' in ud.parm: | ||
| 1255 | if 'rev' in ud.parm: | ||
| 1256 | parmrev = ud.parm['rev'] | ||
| 1257 | else: | ||
| 1258 | parmrev = ud.parm['tag'] | ||
| 1259 | if srcrev == "INVALID" or not srcrev: | 1253 | if srcrev == "INVALID" or not srcrev: |
| 1260 | return parmrev | 1254 | return parmrev |
| 1261 | if srcrev != parmrev: | 1255 | if srcrev != parmrev: |
| 1262 | raise FetchError("Conflicting revisions (%s from SRCREV and %s from the url) found, please specify one valid value" % (srcrev, parmrev)) | 1256 | raise FetchError("Conflicting revisions (%s from SRCREV and %s from the url) found, please specify one valid value" % (srcrev, parmrev)) |
| 1263 | return parmrev | 1257 | return parmrev |
| 1264 | 1258 | ||
| 1259 | if 'tag' in ud.parm and (srcrev == "INVALID" or not srcrev): | ||
| 1260 | return ud.parm['tag'] | ||
| 1261 | |||
| 1265 | if srcrev == "INVALID" or not srcrev: | 1262 | if srcrev == "INVALID" or not srcrev: |
| 1266 | raise FetchError("Please set a valid SRCREV for url %s (possible key names are %s, or use a ;rev=X URL parameter)" % (str(attempts), ud.url), ud.url) | 1263 | raise FetchError("Please set a valid SRCREV for url %s (possible key names are %s, or use a ;rev=X URL parameter)" % (str(attempts), ud.url), ud.url) |
| 1267 | if srcrev == "AUTOINC": | 1264 | if srcrev == "AUTOINC": |
diff --git a/bitbake/lib/bb/fetch2/git.py b/bitbake/lib/bb/fetch2/git.py index a73fb79ac8..53fdc4c3df 100644 --- a/bitbake/lib/bb/fetch2/git.py +++ b/bitbake/lib/bb/fetch2/git.py | |||
| @@ -279,6 +279,10 @@ class Git(FetchMethod): | |||
| 279 | ud.unresolvedrev[name] = ud.revisions[name] | 279 | ud.unresolvedrev[name] = ud.revisions[name] |
| 280 | ud.revisions[name] = self.latest_revision(ud, d, name) | 280 | ud.revisions[name] = self.latest_revision(ud, d, name) |
| 281 | 281 | ||
| 282 | if 'tag' in ud.parm: | ||
| 283 | if len(ud.revisions) != 1: | ||
| 284 | raise bb.fetch2.ParameterError("Git fetcher support for multiple tagged revisions not implemented", ud.url) | ||
| 285 | |||
| 282 | gitsrcname = '%s%s' % (ud.host.replace(':', '.'), ud.path.replace('/', '.').replace('*', '.').replace(' ','_').replace('(', '_').replace(')', '_')) | 286 | gitsrcname = '%s%s' % (ud.host.replace(':', '.'), ud.path.replace('/', '.').replace('*', '.').replace(' ','_').replace('(', '_').replace(')', '_')) |
| 283 | if gitsrcname.startswith('.'): | 287 | if gitsrcname.startswith('.'): |
| 284 | gitsrcname = gitsrcname[1:] | 288 | gitsrcname = gitsrcname[1:] |
| @@ -747,6 +751,14 @@ class Git(FetchMethod): | |||
| 747 | if not source_found: | 751 | if not source_found: |
| 748 | raise bb.fetch2.UnpackError("No up to date source found: " + "; ".join(source_error), ud.url) | 752 | raise bb.fetch2.UnpackError("No up to date source found: " + "; ".join(source_error), ud.url) |
| 749 | 753 | ||
| 754 | # If there is a tag parameter in the url and we also have a fixed srcrev, check the tag | ||
| 755 | # matches the revision | ||
| 756 | if 'tag' in ud.parm and sha1_re.match(ud.revision): | ||
| 757 | output = runfetchcmd("%s rev-list -n 1 %s" % (ud.basecmd, ud.parm['tag']), d, workdir=destdir) | ||
| 758 | output = output.strip() | ||
| 759 | if output != ud.revision: | ||
| 760 | raise bb.fetch2.FetchError("The revision the git tag '%s' resolved to didn't match the SRCREV in use (%s vs %s)" % (ud.parm['tag'], output, ud.revision), ud.url) | ||
| 761 | |||
| 750 | repourl = self._get_repo_url(ud) | 762 | repourl = self._get_repo_url(ud) |
| 751 | runfetchcmd("%s remote set-url origin %s" % (ud.basecmd, shlex.quote(repourl)), d, workdir=destdir) | 763 | runfetchcmd("%s remote set-url origin %s" % (ud.basecmd, shlex.quote(repourl)), d, workdir=destdir) |
| 752 | 764 | ||
diff --git a/bitbake/lib/bb/tests/fetch.py b/bitbake/lib/bb/tests/fetch.py index cd81660b1b..b4e9255578 100644 --- a/bitbake/lib/bb/tests/fetch.py +++ b/bitbake/lib/bb/tests/fetch.py | |||
| @@ -1087,12 +1087,6 @@ class FetcherNetworkTest(FetcherTest): | |||
| 1087 | self.assertRaises(bb.fetch.FetchError, self.gitfetcher, url1, url2) | 1087 | self.assertRaises(bb.fetch.FetchError, self.gitfetcher, url1, url2) |
| 1088 | 1088 | ||
| 1089 | @skipIfNoNetwork() | 1089 | @skipIfNoNetwork() |
| 1090 | def test_gitfetch_tagandrev(self): | ||
| 1091 | # SRCREV is set but does not match rev= parameter | ||
| 1092 | url1 = url2 = "git://git.openembedded.org/bitbake;rev=270a05b0b4ba0959fe0624d2a4885d7b70426da5;tag=270a05b0b4ba0959fe0624d2a4885d7b70426da5;protocol=https;branch=master" | ||
| 1093 | self.assertRaises(bb.fetch.FetchError, self.gitfetcher, url1, url2) | ||
| 1094 | |||
| 1095 | @skipIfNoNetwork() | ||
| 1096 | def test_gitfetch_usehead(self): | 1090 | def test_gitfetch_usehead(self): |
| 1097 | # Since self.gitfetcher() sets SRCREV we expect this to override | 1091 | # Since self.gitfetcher() sets SRCREV we expect this to override |
| 1098 | # `usehead=1' and instead fetch the specified SRCREV. See | 1092 | # `usehead=1' and instead fetch the specified SRCREV. See |
