Skip to content

Commit

Permalink
bitbucket.org support for versions and snapshots
Browse files Browse the repository at this point in the history
  • Loading branch information
EBADBEEF committed Nov 22, 2023
1 parent f6f4565 commit d45bb11
Show file tree
Hide file tree
Showing 3 changed files with 36 additions and 0 deletions.
3 changes: 3 additions & 0 deletions nix_update/update.py
Original file line number Diff line number Diff line change
Expand Up @@ -314,6 +314,9 @@ def update_version(
package.diff_url = f"https://{package.parsed_url.netloc}/{owner}/{repo}/compare/{package.rev}...{new_version.rev or new_version.number}"
elif GITLAB_API.match(package.parsed_url.geturl()) and package.src_homepage:
package.diff_url = f"{package.src_homepage}-/compare/{package.rev}...{new_version.rev or new_version.number}"
elif package.parsed_url.netloc in ["bitbucket.org", "bitbucket.io"]:
_, owner, repo, *_ = package.parsed_url.path.split("/")
package.diff_url = f"https://{package.parsed_url.netloc}/{owner}/{repo}/branches/compare/{new_version.rev or new_version.number}%0D{package.rev}"

return replace_version(package)

Expand Down
3 changes: 3 additions & 0 deletions nix_update/version/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
from urllib.parse import ParseResult

from ..errors import VersionError
from .bitbucket import fetch_bitbucket_snapshots, fetch_bitbucket_versions
from .crate import fetch_crate_versions
from .gitea import fetch_gitea_snapshots, fetch_gitea_versions
from .github import fetch_github_snapshots, fetch_github_versions
Expand Down Expand Up @@ -39,12 +40,14 @@ def __call__(self, url: ParseResult, branch: str) -> list[Version]:
fetch_rubygem_versions,
fetch_savannah_versions,
fetch_sourcehut_versions,
fetch_bitbucket_versions,
]

branch_snapshots_fetchers: list[SnapshotFetcher] = [
fetch_gitea_snapshots,
fetch_github_snapshots,
fetch_gitlab_snapshots,
fetch_bitbucket_snapshots,
]


Expand Down
30 changes: 30 additions & 0 deletions nix_update/version/bitbucket.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
import json
from urllib.parse import ParseResult
from urllib.request import urlopen

from .version import Version


def fetch_bitbucket_versions(url: ParseResult) -> list[Version]:
if url.netloc not in ["bitbucket.org", "bitbucket.io"]:
return []

_, owner, repo, *_ = url.path.split("/")
# paging controlled by pagelen parameter, by default it is 10
tags_url = f"https://{url.netloc}/!api/2.0/repositories/{owner}/{repo}/refs/tags?sort=-target.date"
resp = urlopen(tags_url)
tags = json.loads(resp.read())["values"]
return [Version(tag["name"]) for tag in tags]


def fetch_bitbucket_snapshots(url: ParseResult, branch: str) -> list[Version]:
if url.netloc not in ["bitbucket.org", "bitbucket.io"]:
return []

_, owner, repo, *_ = url.path.split("/")
# seems to ignore pagelen parameter (always returns one entry)
commits_url = f'https://{url.netloc}/!api/2.0/repositories/{owner}/{repo}/refs?q=name="{branch}"'
resp = urlopen(commits_url)
ref = json.loads(resp.read())["values"][0]["target"]
date = ref["date"][:10] # to YYYY-MM-DD
return [Version(f"unstable-{date}", rev=ref["hash"])]

0 comments on commit d45bb11

Please sign in to comment.