diff options
Diffstat (limited to 'repos/homebrew.py')
-rw-r--r-- | repos/homebrew.py | 51 |
1 files changed, 51 insertions, 0 deletions
diff --git a/repos/homebrew.py b/repos/homebrew.py new file mode 100644 index 0000000..77dc05b --- /dev/null +++ b/repos/homebrew.py @@ -0,0 +1,51 @@ +import json +from pathlib import Path +from typing import Mapping + +from .base import Repository, Version + +__all__ = [ + 'core', + 'linux', + 'cask', +] + +def parse_cached(cached: Path) -> Mapping[str, Version]: + with cached.open('r') as json_file: + formulae = json.load(json_file) + result = dict() + for formula in formulae: + if 'full_name' in formula: + name = formula['full_name'] + elif 'full_token' in formula: + name = formula['full_token'] + else: + print('no name', formula) + raise ValueError() + if 'version' in formula: + version = formula['version'] + elif 'versions' in formula: + versions = formula['versions'] + if 'stable' in versions: + version = versions['stable'] + else: + print('no stable versions', versions) + raise ValueError() + else: + print('no versions??', formula) + raise ValueError() + result[name] = Version(version, version) + return result + +def build_repo(name: str, url: str) -> Repository: + url = f'https://formulae.brew.sh/api/{url}.json' + return Repository( + family='Homebrew', + repo=name, + index_url=url, + parse=parse_cached, + ) + +core = build_repo('Core', 'formula') +linux = build_repo('Linux', 'formula-linux') +cask = build_repo('Cask', 'cask') |