You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

193 line
4.2KB

  1. import json
  2. from typing import NamedTuple, Tuple, List, Sequence, Union, Optional, Mapping
  3. import sys
  4. class Git(NamedTuple):
  5. url: str
  6. ref: str
  7. auto_lib: Optional[str] = None
  8. def to_dict(self) -> dict:
  9. return {
  10. 'url': self.url,
  11. 'ref': self.ref,
  12. 'auto-lib': self.auto_lib,
  13. }
  14. RemoteInfo = Union[Git]
  15. class Version(NamedTuple):
  16. version: str
  17. remote: RemoteInfo
  18. depends: Mapping[str, str] = {}
  19. def to_dict(self) -> dict:
  20. ret = {}
  21. ret['depends'] = {}
  22. if isinstance(self.remote, Git):
  23. ret['git'] = self.remote.to_dict()
  24. return ret
  25. class Package(NamedTuple):
  26. name: str
  27. versions: List[Version]
  28. def many_versions(name: str,
  29. versions: Sequence[str],
  30. *,
  31. tag_fmt: str = '{}',
  32. git_url: str,
  33. auto_lib: str = None) -> Package:
  34. return Package(name, [
  35. Version(
  36. ver,
  37. remote=Git(
  38. url=git_url, ref=tag_fmt.format(ver), auto_lib=auto_lib))
  39. for ver in versions
  40. ])
  41. packages = [
  42. many_versions(
  43. 'range-v3',
  44. (
  45. '0.5.0',
  46. '0.9.0',
  47. '0.9.1',
  48. '0.10.0',
  49. ),
  50. git_url='https://github.com/ericniebler/range-v3.git',
  51. auto_lib='Niebler/range-v3',
  52. ),
  53. many_versions(
  54. 'nlohmann-json',
  55. (
  56. '3.0.0',
  57. '3.0.1',
  58. '3.1.0',
  59. '3.1.1',
  60. '3.1.2',
  61. '3.2.0',
  62. '3.3.0',
  63. '3.4.0',
  64. '3.5.0',
  65. '3.6.0',
  66. '3.6.1',
  67. '3.7.0',
  68. '3.7.1',
  69. '3.7.2',
  70. '3.7.3',
  71. ),
  72. git_url='https://github.com/vector-of-bool/json.git',
  73. tag_fmt='dds/{}',
  74. ),
  75. Package('ms-wil', [
  76. Version(
  77. '2019.11.10',
  78. remote=Git('https://github.com/vector-of-bool/wil.git',
  79. 'dds/2019.11.10'))
  80. ]),
  81. many_versions(
  82. 'neo-sqlite3',
  83. (
  84. '0.1.0',
  85. '0.2.0',
  86. '0.2.1',
  87. ),
  88. git_url='https://github.com/vector-of-bool/neo-sqlite3.git',
  89. ),
  90. Package('neo-fun', [
  91. Version(
  92. '0.1.0',
  93. remote=Git('https://github.com/vector-of-bool/neo-fun.git',
  94. '0.1.0'))
  95. ]),
  96. Package('semver', [
  97. Version(
  98. '0.2.1',
  99. remote=Git('https://github.com/vector-of-bool/semver.git',
  100. '0.2.1'))
  101. ]),
  102. many_versions(
  103. 'pubgrub',
  104. (
  105. '0.1.2',
  106. '0.2.0',
  107. ),
  108. git_url='https://github.com/vector-of-bool/pubgrub.git',
  109. ),
  110. many_versions(
  111. 'spdlog',
  112. (
  113. '0.9.0',
  114. '0.10.0',
  115. '0.11.0',
  116. '0.12.0',
  117. '0.13.0',
  118. '0.14.0',
  119. '0.16.0',
  120. '0.16.1',
  121. '0.16.2',
  122. '0.17.0',
  123. '1.0.0',
  124. '1.1.0',
  125. '1.2.0',
  126. '1.2.1',
  127. '1.3.0',
  128. '1.3.1',
  129. '1.4.0',
  130. '1.4.1',
  131. '1.4.1',
  132. ),
  133. git_url='https://github.com/gabime/spdlog.git',
  134. tag_fmt='v{}',
  135. auto_lib='spdlog/spdlog',
  136. ),
  137. many_versions(
  138. 'fmt',
  139. (
  140. '0.8.0',
  141. '0.9.0',
  142. '0.10.0',
  143. '0.12.0',
  144. '1.0.0',
  145. '1.1.0',
  146. '2.0.0',
  147. '2.0.1',
  148. '2.1.0',
  149. '2.1.1',
  150. '3.0.0',
  151. '3.0.1',
  152. '3.0.2',
  153. '4.0.0',
  154. '4.1.0',
  155. '5.0.0',
  156. '5.1.0',
  157. '5.2.0',
  158. '5.2.1',
  159. '5.3.0',
  160. '6.0.0',
  161. '6.1.0',
  162. '6.1.1',
  163. '6.1.2',
  164. ),
  165. git_url='https://github.com/fmtlib/fmt.git',
  166. auto_lib='fmt/fmt',
  167. ),
  168. ]
  169. data = {
  170. 'version': 1,
  171. 'packages': {
  172. pkg.name: {ver.version: ver.to_dict()
  173. for ver in pkg.versions}
  174. for pkg in packages
  175. }
  176. }
  177. print(json.dumps(data, indent=2, sort_keys=True))