def resolve_local_requirement(self, req, ignore_game_ver=False): spec = req.specifier game_ver = self.config.game_version_major res = [mod for mod in self.find_mods(req.name) if mod.version in spec and (ignore_game_ver or match_game_version(mod.game_version, game_ver))] res.sort(key=lambda m: m.version, reverse=True) return res
def get_releases(self, mod_name, game_version): try: mod = getattr(self.db.mods, mod_name) except AttributeError: raise ModNotFoundError(mod_name) if match_game_version(mod.latest_release, game_version): latest = mod.latest_release yield latest mod = self.api.get_mod(mod_name) res = [release for release in mod.releases if match_game_version(release, game_version) and release.version != latest.version] res.sort(key=lambda r: Version(r.version), reverse=True) yield from res
def run(self, args): sort = args.sort if args.sync is None: self.db.maybe_update() elif args.sync: self.db.update() # null queries just list all mods in alphabetical order by default if not args.query and not sort: sort = 'name' hidden = 0 for result in self.db.search( query=' '.join(args.query), sortedby=sort, limit=args.limit): tags = [] if not match_game_version(result.latest_release, self.config.game_version_major): tags.insert(0, 'incompatible') if not args.ignore_game_ver: hidden += 1 continue if args.format: print(args.format.format(result, result=result)) else: print(result.title) print(" Name: %s" % result.name) if tags: print(" Tags: %s" % (", ".join(tags))) print() print("\n".join( fill( line, width=get_terminal_size()[0] - 4, tabsize=4, subsequent_indent=" ", initial_indent=" ", ) for line in result.summary.splitlines() )) print() if hidden: print("Note: %d mods were hidden because they have no " "compatible game versions. Use -i to show them." % hidden, file=sys.stderr)
def run(self, args): installed = self.manager.find_mods() updates = [] if args.ignore_game_ver: game_ver = None else: game_ver = self.config.game_version_major self.db.update() for local_mod in installed: print("Checking: %s %s" % (local_mod.name, local_mod.version)) found_update = False local_ver = local_mod.version latest_ver = local_ver latest_release = None try: releases = self.manager.get_releases(local_mod.name, game_ver) except StopIteration: print("Cannot get_releases for mod %s with game version %s" % (local_mod.name, game_ver)) continue for release in releases: if not args.ignore_game_ver and not match_game_version( release, game_ver): continue release_ver = Version(release.version) if release_ver > latest_ver: found_update = True latest_ver = release_ver latest_release = release update_mod = True if found_update: print("Found update: %s %s" % (local_mod.name, latest_ver)) if not args.unpacked and not local_mod.packed: print("%s is unpacked. " "Use -U to update it anyway." % (local_mod.name)) update_mod = False if not args.held and local_mod.name in self.config.hold: print("%s is held. " "Use -H to update it anyway." % local_mod.name) update_mod = False if update_mod: updates.append((local_mod, latest_release)) if not updates: print("No updates were found") return print("Found %d update%s:" % ( len(updates), "s" if len(updates) != 1 else "", )) for local_mod, release in updates: print(" %s %s -> %s" % (local_mod.name, local_mod.version, release.version)) if not args.show: if not args.yes and prompt("Continue?", "Y/n") != "y": return for local_mod, release in updates: self.manager.install_mod(local_mod.name, release)