diff options
| author | Aníbal Limón <anibal.limon@linux.intel.com> | 2015-02-13 15:58:10 -0600 | 
|---|---|---|
| committer | Richard Purdie <richard.purdie@linuxfoundation.org> | 2015-02-16 09:13:06 +0000 | 
| commit | 62e171b72180bc9aab0e5ffb70e2aa2919c0d132 (patch) | |
| tree | 798a0ac53f15e95f473b03e8a63cdf783dd8eb01 /bitbake/lib/bb/fetch2/wget.py | |
| parent | 309d92efde484eb8747d40cd32330f5775fd9284 (diff) | |
| download | poky-62e171b72180bc9aab0e5ffb70e2aa2919c0d132.tar.gz | |
bitbake: fetch2: wget add _check_latest_version_by_dir
Add _check_latest_version_by_dir this function provides support
for scan every directory newer than current dir in order to get
latest_versionstring, example:
	http://somedoamin.com/project/v2.1/
	http://somedoamin.com/project/v3.0/
Change return of _vercmp from True/False to -1/0/1 to provide test
when current directory is equal to newer directory this helps to
scan the same directory to get minor versions, example:
	http://somedoamin.com/project/v2.1/project-v2.1.2.tgz
	http://somedoamin.com/project/v2.1/project-v2.1.6.tgz
(Bitbake rev: 5f7c5eb218a221165f59a0f4dd48d2d97f756193)
Signed-off-by: Aníbal Limón <anibal.limon@linux.intel.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
Diffstat (limited to 'bitbake/lib/bb/fetch2/wget.py')
| -rw-r--r-- | bitbake/lib/bb/fetch2/wget.py | 52 | 
1 files changed, 46 insertions, 6 deletions
| diff --git a/bitbake/lib/bb/fetch2/wget.py b/bitbake/lib/bb/fetch2/wget.py index 96d895d6db..c8b120cafd 100644 --- a/bitbake/lib/bb/fetch2/wget.py +++ b/bitbake/lib/bb/fetch2/wget.py | |||
| @@ -179,10 +179,7 @@ class Wget(FetchMethod): | |||
| 179 | oldpv = self._modelate_version(oldpv) | 179 | oldpv = self._modelate_version(oldpv) | 
| 180 | newpv = self._modelate_version(newpv) | 180 | newpv = self._modelate_version(newpv) | 
| 181 | 181 | ||
| 182 | if bb.utils.vercmp(("0", oldpv, ""), ("0", newpv, "")) < 0: | 182 | return bb.utils.vercmp(("0", oldpv, ""), ("0", newpv, "")) | 
| 183 | return True | ||
| 184 | else: | ||
| 185 | return False | ||
| 186 | 183 | ||
| 187 | def _fetch_index(self, uri, ud, d): | 184 | def _fetch_index(self, uri, ud, d): | 
| 188 | """ | 185 | """ | 
| @@ -230,7 +227,7 @@ class Wget(FetchMethod): | |||
| 230 | m = regex.search(href['href'].strip("/")) | 227 | m = regex.search(href['href'].strip("/")) | 
| 231 | if m: | 228 | if m: | 
| 232 | thisversion = ('', m.group(2), '') | 229 | thisversion = ('', m.group(2), '') | 
| 233 | if thisversion and self._vercmp(version, thisversion) == True: | 230 | if thisversion and self._vercmp(version, thisversion) < 0: | 
| 234 | version = thisversion | 231 | version = thisversion | 
| 235 | 232 | ||
| 236 | if valid: | 233 | if valid: | 
| @@ -267,7 +264,7 @@ class Wget(FetchMethod): | |||
| 267 | if valid == 0: | 264 | if valid == 0: | 
| 268 | version = newver | 265 | version = newver | 
| 269 | valid = 1 | 266 | valid = 1 | 
| 270 | elif self._vercmp(version, newver) == True: | 267 | elif self._vercmp(version, newver) < 0: | 
| 271 | version = newver | 268 | version = newver | 
| 272 | 269 | ||
| 273 | # check whether a valid package and version were found | 270 | # check whether a valid package and version were found | 
| @@ -279,6 +276,49 @@ class Wget(FetchMethod): | |||
| 279 | 276 | ||
| 280 | return "" | 277 | return "" | 
| 281 | 278 | ||
| 279 | def _check_latest_version_by_dir(self, dirver, package, package_regex, | ||
| 280 | current_version, ud, d): | ||
| 281 | """ | ||
| 282 | Scan every directory in order to get upstream version. | ||
| 283 | """ | ||
| 284 | version_dir = ['', '', ''] | ||
| 285 | version = ['', '', ''] | ||
| 286 | |||
| 287 | dirver_regex = re.compile("(\D*)((\d+[\.\-_])+(\d+))") | ||
| 288 | s = dirver_regex.search(dirver) | ||
| 289 | if s: | ||
| 290 | version_dir[1] = s.group(2) | ||
| 291 | else: | ||
| 292 | version_dir[1] = dirver | ||
| 293 | |||
| 294 | dirs_uri = bb.fetch.encodeurl([ud.type, ud.host, | ||
| 295 | ud.path.split(dirver)[0], ud.user, ud.pswd, {}]) | ||
| 296 | bb.debug(3, "DirURL: %s, %s" % (dirs_uri, package)) | ||
| 297 | |||
| 298 | soup = BeautifulSoup(self._fetch_index(dirs_uri, ud, d)) | ||
| 299 | if not soup: | ||
| 300 | return version[1] | ||
| 301 | |||
| 302 | for line in soup.find_all('a', href=True): | ||
| 303 | s = dirver_regex.search(line['href'].strip("/")) | ||
| 304 | if s: | ||
| 305 | version_dir_new = ['', s.group(2), ''] | ||
| 306 | if self._vercmp(version_dir, version_dir_new) <= 0: | ||
| 307 | dirver_new = s.group(1) + s.group(2) | ||
| 308 | path = ud.path.replace(dirver, dirver_new, True) \ | ||
| 309 | .split(package)[0] | ||
| 310 | uri = bb.fetch.encodeurl([ud.type, ud.host, path, | ||
| 311 | ud.user, ud.pswd, {}]) | ||
| 312 | |||
| 313 | pupver = self._check_latest_version(uri, | ||
| 314 | package, package_regex, current_version, ud, d) | ||
| 315 | if pupver: | ||
| 316 | version[1] = pupver | ||
| 317 | |||
| 318 | version_dir = version_dir_new | ||
| 319 | |||
| 320 | return version[1] | ||
| 321 | |||
| 282 | def _init_regexes(self, package, ud, d): | 322 | def _init_regexes(self, package, ud, d): | 
| 283 | """ | 323 | """ | 
| 284 | Match as many patterns as possible such as: | 324 | Match as many patterns as possible such as: | 
