Merge branch 'lilydjwg:master' into Add-JSON-output-to-cmp

This commit is contained in:
Tom Rathborne 2022-02-09 16:11:41 +01:00 committed by GitHub
commit 9ea6f37712
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
5 changed files with 78 additions and 35 deletions

View file

@ -467,11 +467,27 @@ use_max_tag
Set this to ``true`` to check for the max tag on BitBucket. Will return the biggest one
sorted by old ``pkg_resources.parse_version``. Will return the tag name instead of date.
use_sorted_tags
If ``true``, tags are queried and sorted according to the ``query`` and
``sort`` keys. Will return the tag name instead of the date.
query
A query string use to filter tags when ``use_sorted_tags`` set (see
`here <https://developer.atlassian.com/cloud/bitbucket/rest/intro/#querying>`__
for examples). The string does not need to be escaped.
sort
A field used to sort the tags when ``use_sorted_tags`` is set (see
`here <https://developer.atlassian.com/cloud/bitbucket/rest/intro/#filtering>`__
for examples). Defaults to ``-target.date`` (sorts tags in descending order
by date).
max_page
How many pages do we search for the max tag? Default is 3. This works when
``use_max_tag`` is set.
This source supports :ref:`list options` when ``use_max_tag`` is set.
This source supports :ref:`list options` when ``use_max_tag`` or
``use_sorted_tags`` is set.
Check GitLab
~~~~~~~~~~~~
@ -848,7 +864,7 @@ Check `Open Vsx <https://open-vsx.org/>`_ for updates.
openvsx
The extension's Unique Identifier on open-vsx.org, e.g. ``ritwickdey.LiveServer``.
Check Visual Studio Code Marketplace
~~~~~~~~~~~~~~~
::

View file

@ -1,4 +1,4 @@
# MIT licensed
# Copyright (c) 2013-2022 lilydjwg <lilydjwg@gmail.com>, et al.
__version__ = '2.6.1'
__version__ = '2.7dev'

View file

@ -1,34 +1,61 @@
# MIT licensed
# Copyright (c) 2013-2020 lilydjwg <lilydjwg@gmail.com>, et al.
from nvchecker.api import sort_version_keys
from typing import Any, List
from urllib.parse import urlencode
# doc: https://confluence.atlassian.com/display/BITBUCKET/commits+or+commit+Resource
from nvchecker.api import VersionResult, Entry, AsyncCache
# doc: https://developer.atlassian.com/cloud/bitbucket/rest/api-group-commits/#api-repositories-workspace-repo-slug-commits-get
BITBUCKET_URL = 'https://bitbucket.org/api/2.0/repositories/%s/commits/%s'
# doc: https://developer.atlassian.com/cloud/bitbucket/rest/api-group-refs/#api-repositories-workspace-repo-slug-refs-tags-get
BITBUCKET_MAX_TAG = 'https://bitbucket.org/api/2.0/repositories/%s/refs/tags'
async def get_version(name, conf, *, cache, **kwargs):
async def get_version(
name: str, conf: Entry, *,
cache: AsyncCache,
**kwargs: Any,
) -> VersionResult:
repo = conf['bitbucket']
br = conf.get('branch', '')
use_max_tag = conf.get('use_max_tag', False)
use_sorted_tags = conf.get('use_sorted_tags', False)
if use_max_tag:
if use_sorted_tags or use_max_tag:
parameters = {'fields': 'values.name,next'}
if use_sorted_tags:
parameters['sort'] = conf.get('sort', '-target.date')
if 'query' in conf:
parameters['q'] = conf['query']
if use_sorted_tags:
url = BITBUCKET_MAX_TAG % repo
url += '?' + urlencode(parameters)
version = await _get_tags(url, max_page=1, cache=cache)
elif use_max_tag:
url = BITBUCKET_MAX_TAG % repo
url += '?' + urlencode(parameters)
max_page = conf.get('max_page', 3)
data = await _get_tags(url, max_page=max_page, cache=cache)
version = await _get_tags(url, max_page=max_page, cache=cache)
else:
url = BITBUCKET_URL % (repo, br)
data = await cache.get_json(url)
if use_max_tag:
version = data
else:
version = data['values'][0]['date'].split('T', 1)[0].replace('-', '')
return version
async def _get_tags(url, *, max_page, cache):
ret = []
async def _get_tags(
url: str, *,
max_page: int,
cache: AsyncCache,
) -> List[str]:
ret: List[str] = []
for _ in range(max_page):
data = await cache.get_json(url)

View file

@ -1,22 +0,0 @@
#!/usr/bin/env python3
# MIT licensed
# Copyright (c) 2013-2017 lilydjwg <lilydjwg@gmail.com>, et al.
'''show a list of packages maintained by someone in AUR'''
import sys
import json
import urllib.request
def main(user):
url = f'https://aur.archlinux.org/rpc.php?type=msearch&arg={user}'
res = urllib.request.urlopen(url)
if res.status != 200:
sys.exit(f'Error: {res.status} {res.reason}')
d = res.read().decode('utf-8')
d = json.loads(d)
print('\n'.join(sorted(pkg['Name'] for pkg in d['results'])))
if __name__ == '__main__':
main(sys.argv[1]) if len(sys.argv) == 2 else \
sys.exit('whose packages do you want to see?')

View file

@ -24,3 +24,25 @@ async def test_bitbucket_max_tag_with_ignored(get_version):
"use_max_tag": True,
"ignored": "1.6.0 1.7.0",
}) == "v1.5"
async def test_bitbucket_sorted_tags(get_version):
assert await get_version("example", {
"source": "bitbucket",
"bitbucket": "prawee/git-tag",
"use_sorted_tags": True,
}) == "1.7.0"
assert await get_version("example", {
"source": "bitbucket",
"bitbucket": "prawee/git-tag",
"use_sorted_tags": True,
"query": 'name~"v"',
}) == "v1.5"
assert await get_version("example", {
"source": "bitbucket",
"bitbucket": "berkeleylab/gasnet",
"use_sorted_tags": True,
"query": 'name~"CVS/BERKELEY_UPC" AND name!~"rc"',
"prefix": "CVS/BERKELEY_UPC_",
}) == "2_18_0"