420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
|
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
|
-
+
+
+
+
+
-
+
+
|
for name, meta in self.have.items():
if meta.get("alias"):
for alias in re.split("\s*[,;]\s*", meta["alias"]):
self.have[alias] = self.have[name]
# basic plugin pre-screening (skip __init__, filter by api:,
# exclude installed & same-version plugins)
def valid(self, newpl):
def valid(self, newpl, _log=lambda *x:0):
id = newpl.get("$name", "__invalid")
have_ver = self.have.get(id, {}).get("version", "0")
if id.find("__") == 0:
_log("wrong id")
pass
elif newpl.get("api") not in ("python", "streamtuner2"):
_log("wrong api")
pass
elif set((newpl.get("status"), newpl.get("priority"))).intersection(set(("obsolete", "broken"))):
_log("wrong status")
pass
elif have_ver >= newpl.get("version", "0.0"):
_log("newer version already installed")
pass
else:
return True
# Verify depends: and breaks: against existing plugins/modules
def depends(self, plugin):
def depends(self, plugin, _log=lambda *x:0):
r = True
if plugin.get("depends"):
r &= self.and_or(self.split(plugin["depends"]), self.have)
if plugin.get("breaks"):
r &= self.neither(self.split(plugin["breaks"]), self.have)
_log(r)
return r
# Split trivial "pkg | alt, mod >= 1, uikit < 4.0" string into nested list [[dep],[alt,alt],[dep]]
def split(self, dep_str):
dep_cmp = []
for alt_str in re.split(r"\s*[,;]+\s*", dep_str):
alt_cmp = []
|