summaryrefslogtreecommitdiffstats
path: root/bitbake/lib/bb/fetch2/wget.py
diff options
context:
space:
mode:
Diffstat (limited to 'bitbake/lib/bb/fetch2/wget.py')
-rw-r--r--bitbake/lib/bb/fetch2/wget.py52
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: