| 26 | |
| 27 | |
| 28 | def choose_version(versions, allow_prerelease, explicit_version=None): |
| 29 | if explicit_version: |
| 30 | if explicit_version not in versions: |
| 31 | raise ValueError(f"Requested DocFX version {explicit_version!r} not found in NuGet index") |
| 32 | return explicit_version |
| 33 | |
| 34 | parsed = [] |
| 35 | for v in versions: |
| 36 | try: |
| 37 | pv = Version(v) |
| 38 | except InvalidVersion: |
| 39 | continue |
| 40 | if not allow_prerelease and pv.is_prerelease: |
| 41 | continue |
| 42 | parsed.append((pv, v)) |
| 43 | |
| 44 | if not parsed: |
| 45 | if allow_prerelease: |
| 46 | raise ValueError("No parseable DocFX versions found in NuGet index") |
| 47 | else: |
| 48 | raise ValueError("No stable DocFX versions found. Use --allow-prerelease to include prereleases.") |
| 49 | |
| 50 | return max(parsed, key=lambda item: item[0])[1] |
| 51 | |
| 52 | |
| 53 | def sha256_of_url(url): |