diff options
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: | 
