ソースを参照

Modify update-poms.py to use maven metadata from all mirrors

wip/gradle-reposilite
コミット
ee806f24b2
1個のファイルの変更42行の追加26行の削除
  1. +42
    -26
      update-poms.py

+ 42
- 26
update-poms.py ファイルの表示

@@ -249,7 +249,7 @@ class Package:
def __init__(self, groupId: str, artifactId: str, version: str | None = None, implicit: bool = False):
self.groupId = groupId
self.artifactId = artifactId
self.version = version
self.version = version if version and not version.isspace() else None
self.implicit = implicit

def __str__(self) -> str:
@@ -317,34 +317,51 @@ class Package:
return q

async def _query_maven(self) -> None:
url = f'{baseurl}/solrsearch/select?q={self._urlquery}&rows=1&wt=json'
logger.debug(f'{self}: Querying maven at url {url}')
self._verified = False

async with aiohttp.ClientSession() as session:
async with session.get(url) as response:
if response.status == 200:
message = await response.json()
num = message['response']['numFound']

if num:
logger.debug(f'{self}: Query successful')
self._verified = True
if self.version is None:
version = message['response']['docs'][0]['latestVersion']
logger.debug(f'{self}: Using newest version {version}')
self.version = version
else:
if self.implicit:
logger.debug(f'{self}: No matching packages found')
else:
logger.warning(f'{self}: No matching packages found')
for mirror in mirrors:
url = f'{mirror}/{self.groupId.replace(".", "/")}/{self.artifactId}/maven-metadata.xml'
logger.debug(f'{self}: Querying maven at url {url}')

self._verified = False
elif response.status == 429:
raise TooManyRequestsException()
async with session.get(url) as response:
if response.status == 200:
response_text = await response.text()
metadata = ET.fromstring(response_text)

if metadata is not None:
logger.debug(f'{self}: Metadata found')

if self.version is None:
release_tag = metadata.find('./versioning/release')
latest_tag = metadata.find('./versioning/latest')
version = release_tag.text if release_tag is not None else latest_tag.text if latest_tag is not None else None

if version is not None:
logger.debug(f'{self}: Using newest version {version}')
self.version = version
self._verified = True
return
else:
logger.info(f'{self}: Could not find latest version in metadata from mirror {mirror}')
else:
if metadata.find(f'./versioning/versions/version[.="{self.version}"]') is not None:
logger.debug(f'{self}: Version {self.version} is valid')
self._verified = True
return
else:
logger.info(f'{self}: Could not find version {self.version} in metadata from mirror {mirror}')
else:
logger.warning('{self}: Invalid XML for maven metadata: {response_text}')
elif response.status == 429:
raise TooManyRequestsException()
else:
logger.info(f'{self}: HTTP error {response.status} downloading maven metadata from {url}')
else:
if self.implicit:
logger.info(f'{self}: Package not found in any mirror')
else:
self._verified = False
logger.warning(f'{self}: HTTP error {response.status} downloading pom')
logger.warning(f'{self}: Package not found in any mirror')

async def verify(self) -> bool:
if not self._verified:
@@ -479,7 +496,6 @@ async def worker(queue: asyncio.Queue) -> None:
break
except Exception:
logger.exception(f'{package}: Unknown error while processing package')
logger.error(global_properties)
break




読み込み中…
キャンセル
保存