選択できるのは25トピックまでです。 トピックは、先頭が英数字で、英数字とダッシュ('-')を使用した35文字以内のものにしてください。

193 行
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))