aboutsummaryrefslogtreecommitdiff
path: root/repos/homebrew.py
diff options
context:
space:
mode:
Diffstat (limited to 'repos/homebrew.py')
-rw-r--r--repos/homebrew.py51
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')