packagist: Canonicalize github origins

In particular, there seems to be a negligeable number of origins
using SSH instead of HTTPS, which the git loader cannot deal with.
This commit is contained in:
Valentin Lorentz 2022-10-13 13:05:34 +02:00
parent 82b936a277
commit a681f2f405
8 changed files with 640 additions and 5 deletions

View file

@ -1,2 +1,2 @@
swh.core[db,github] >= 2.15
swh.core[db,github] >= 2.16.1
swh.scheduler >= 0.8

View file

@ -11,6 +11,7 @@ from typing import Any, Dict, Iterator, List, Optional
import iso8601
import requests
from swh.core.github.utils import GitHubSession
from swh.scheduler.interface import SchedulerInterface
from swh.scheduler.model import ListedOrigin
@ -63,6 +64,10 @@ class PackagistLister(Lister[PackagistListerState, PackagistPageType]):
self.session.headers.update({"Accept": "application/json"})
self.listing_date = datetime.now().astimezone(tz=timezone.utc)
self.github_session = GitHubSession(
credentials=self.credentials,
user_agent=str(self.session.headers["User-Agent"]),
)
def state_from_dict(self, d: Dict[str, Any]) -> PackagistListerState:
last_listing_date = d.get("last_listing_date")
@ -144,6 +149,13 @@ class PackagistLister(Lister[PackagistListerState, PackagistPageType]):
if visit_type is None or origin_url is None or origin_url in origin_urls:
continue
if visit_type == "git":
# Non-github urls will be returned as is, github ones will be canonical
# ones
origin_url = (
self.github_session.get_canonical_url(origin_url) or origin_url
)
# bitbucket closed its mercurial hosting service, those origins can not be
# loaded into the archive anymore
if visit_type == "hg" and origin_url.startswith("https://bitbucket.org/"):

View file

@ -0,0 +1 @@
{"html_url": "https://github.com/gitlky/wx_article"}

View file

@ -0,0 +1,130 @@
{
"id": 133818271,
"node_id": "MDEwOlJlcG9zaXRvcnkxMzM4MTgyNzE=",
"name": "computop-api",
"full_name": "spryker-eco/computop-api",
"private": false,
"owner": {
"login": "spryker-eco",
"id": 25103059,
"node_id": "MDEyOk9yZ2FuaXphdGlvbjI1MTAzMDU5",
"avatar_url": "https://avatars.githubusercontent.com/u/25103059?v=4",
"gravatar_id": "",
"url": "https://api.github.com/users/spryker-eco",
"html_url": "https://github.com/spryker-eco",
"followers_url": "https://api.github.com/users/spryker-eco/followers",
"following_url": "https://api.github.com/users/spryker-eco/following{/other_user}",
"gists_url": "https://api.github.com/users/spryker-eco/gists{/gist_id}",
"starred_url": "https://api.github.com/users/spryker-eco/starred{/owner}{/repo}",
"subscriptions_url": "https://api.github.com/users/spryker-eco/subscriptions",
"organizations_url": "https://api.github.com/users/spryker-eco/orgs",
"repos_url": "https://api.github.com/users/spryker-eco/repos",
"events_url": "https://api.github.com/users/spryker-eco/events{/privacy}",
"received_events_url": "https://api.github.com/users/spryker-eco/received_events",
"type": "Organization",
"site_admin": false
},
"html_url": "https://github.com/spryker-eco/computop-api",
"description": "Spryker Eco ComputopApi module",
"fork": false,
"url": "https://api.github.com/repos/spryker-eco/computop-api",
"forks_url": "https://api.github.com/repos/spryker-eco/computop-api/forks",
"keys_url": "https://api.github.com/repos/spryker-eco/computop-api/keys{/key_id}",
"collaborators_url": "https://api.github.com/repos/spryker-eco/computop-api/collaborators{/collaborator}",
"teams_url": "https://api.github.com/repos/spryker-eco/computop-api/teams",
"hooks_url": "https://api.github.com/repos/spryker-eco/computop-api/hooks",
"issue_events_url": "https://api.github.com/repos/spryker-eco/computop-api/issues/events{/number}",
"events_url": "https://api.github.com/repos/spryker-eco/computop-api/events",
"assignees_url": "https://api.github.com/repos/spryker-eco/computop-api/assignees{/user}",
"branches_url": "https://api.github.com/repos/spryker-eco/computop-api/branches{/branch}",
"tags_url": "https://api.github.com/repos/spryker-eco/computop-api/tags",
"blobs_url": "https://api.github.com/repos/spryker-eco/computop-api/git/blobs{/sha}",
"git_tags_url": "https://api.github.com/repos/spryker-eco/computop-api/git/tags{/sha}",
"git_refs_url": "https://api.github.com/repos/spryker-eco/computop-api/git/refs{/sha}",
"trees_url": "https://api.github.com/repos/spryker-eco/computop-api/git/trees{/sha}",
"statuses_url": "https://api.github.com/repos/spryker-eco/computop-api/statuses/{sha}",
"languages_url": "https://api.github.com/repos/spryker-eco/computop-api/languages",
"stargazers_url": "https://api.github.com/repos/spryker-eco/computop-api/stargazers",
"contributors_url": "https://api.github.com/repos/spryker-eco/computop-api/contributors",
"subscribers_url": "https://api.github.com/repos/spryker-eco/computop-api/subscribers",
"subscription_url": "https://api.github.com/repos/spryker-eco/computop-api/subscription",
"commits_url": "https://api.github.com/repos/spryker-eco/computop-api/commits{/sha}",
"git_commits_url": "https://api.github.com/repos/spryker-eco/computop-api/git/commits{/sha}",
"comments_url": "https://api.github.com/repos/spryker-eco/computop-api/comments{/number}",
"issue_comment_url": "https://api.github.com/repos/spryker-eco/computop-api/issues/comments{/number}",
"contents_url": "https://api.github.com/repos/spryker-eco/computop-api/contents/{+path}",
"compare_url": "https://api.github.com/repos/spryker-eco/computop-api/compare/{base}...{head}",
"merges_url": "https://api.github.com/repos/spryker-eco/computop-api/merges",
"archive_url": "https://api.github.com/repos/spryker-eco/computop-api/{archive_format}{/ref}",
"downloads_url": "https://api.github.com/repos/spryker-eco/computop-api/downloads",
"issues_url": "https://api.github.com/repos/spryker-eco/computop-api/issues{/number}",
"pulls_url": "https://api.github.com/repos/spryker-eco/computop-api/pulls{/number}",
"milestones_url": "https://api.github.com/repos/spryker-eco/computop-api/milestones{/number}",
"notifications_url": "https://api.github.com/repos/spryker-eco/computop-api/notifications{?since,all,participating}",
"labels_url": "https://api.github.com/repos/spryker-eco/computop-api/labels{/name}",
"releases_url": "https://api.github.com/repos/spryker-eco/computop-api/releases{/id}",
"deployments_url": "https://api.github.com/repos/spryker-eco/computop-api/deployments",
"created_at": "2018-05-17T13:34:07Z",
"updated_at": "2021-12-28T13:55:55Z",
"pushed_at": "2022-03-18T14:05:09Z",
"git_url": "git://github.com/spryker-eco/computop-api.git",
"ssh_url": "git@github.com:spryker-eco/computop-api.git",
"clone_url": "https://github.com/spryker-eco/computop-api.git",
"svn_url": "https://github.com/spryker-eco/computop-api",
"homepage": "https://spryker.com",
"size": 198,
"stargazers_count": 0,
"watchers_count": 0,
"language": "PHP",
"has_issues": true,
"has_projects": false,
"has_downloads": true,
"has_wiki": true,
"has_pages": false,
"forks_count": 0,
"mirror_url": null,
"archived": false,
"disabled": false,
"open_issues_count": 0,
"license": {
"key": "mit",
"name": "MIT License",
"spdx_id": "MIT",
"url": "https://api.github.com/licenses/mit",
"node_id": "MDc6TGljZW5zZTEz"
},
"allow_forking": true,
"is_template": false,
"web_commit_signoff_required": false,
"topics": [
],
"visibility": "public",
"forks": 0,
"open_issues": 0,
"watchers": 0,
"default_branch": "master",
"temp_clone_token": null,
"organization": {
"login": "spryker-eco",
"id": 25103059,
"node_id": "MDEyOk9yZ2FuaXphdGlvbjI1MTAzMDU5",
"avatar_url": "https://avatars.githubusercontent.com/u/25103059?v=4",
"gravatar_id": "",
"url": "https://api.github.com/users/spryker-eco",
"html_url": "https://github.com/spryker-eco",
"followers_url": "https://api.github.com/users/spryker-eco/followers",
"following_url": "https://api.github.com/users/spryker-eco/following{/other_user}",
"gists_url": "https://api.github.com/users/spryker-eco/gists{/gist_id}",
"starred_url": "https://api.github.com/users/spryker-eco/starred{/owner}{/repo}",
"subscriptions_url": "https://api.github.com/users/spryker-eco/subscriptions",
"organizations_url": "https://api.github.com/users/spryker-eco/orgs",
"repos_url": "https://api.github.com/users/spryker-eco/repos",
"events_url": "https://api.github.com/users/spryker-eco/events{/privacy}",
"received_events_url": "https://api.github.com/users/spryker-eco/received_events",
"type": "Organization",
"site_admin": false
},
"network_count": 0,
"subscribers_count": 33
}

View file

@ -0,0 +1,104 @@
{
"id": 38592537,
"node_id": "MDEwOlJlcG9zaXRvcnkzODU5MjUzNw==",
"name": "module-main",
"full_name": "GameCHN/module-main",
"private": false,
"owner": {
"login": "GameCHN",
"id": 13175811,
"node_id": "MDQ6VXNlcjEzMTc1ODEx",
"avatar_url": "https://avatars.githubusercontent.com/u/13175811?v=4",
"gravatar_id": "",
"url": "https://api.github.com/users/GameCHN",
"html_url": "https://github.com/GameCHN",
"followers_url": "https://api.github.com/users/GameCHN/followers",
"following_url": "https://api.github.com/users/GameCHN/following{/other_user}",
"gists_url": "https://api.github.com/users/GameCHN/gists{/gist_id}",
"starred_url": "https://api.github.com/users/GameCHN/starred{/owner}{/repo}",
"subscriptions_url": "https://api.github.com/users/GameCHN/subscriptions",
"organizations_url": "https://api.github.com/users/GameCHN/orgs",
"repos_url": "https://api.github.com/users/GameCHN/repos",
"events_url": "https://api.github.com/users/GameCHN/events{/privacy}",
"received_events_url": "https://api.github.com/users/GameCHN/received_events",
"type": "User",
"site_admin": false
},
"html_url": "https://github.com/GameCHN/module-main",
"description": null,
"fork": false,
"url": "https://api.github.com/repos/GameCHN/module-main",
"forks_url": "https://api.github.com/repos/GameCHN/module-main/forks",
"keys_url": "https://api.github.com/repos/GameCHN/module-main/keys{/key_id}",
"collaborators_url": "https://api.github.com/repos/GameCHN/module-main/collaborators{/collaborator}",
"teams_url": "https://api.github.com/repos/GameCHN/module-main/teams",
"hooks_url": "https://api.github.com/repos/GameCHN/module-main/hooks",
"issue_events_url": "https://api.github.com/repos/GameCHN/module-main/issues/events{/number}",
"events_url": "https://api.github.com/repos/GameCHN/module-main/events",
"assignees_url": "https://api.github.com/repos/GameCHN/module-main/assignees{/user}",
"branches_url": "https://api.github.com/repos/GameCHN/module-main/branches{/branch}",
"tags_url": "https://api.github.com/repos/GameCHN/module-main/tags",
"blobs_url": "https://api.github.com/repos/GameCHN/module-main/git/blobs{/sha}",
"git_tags_url": "https://api.github.com/repos/GameCHN/module-main/git/tags{/sha}",
"git_refs_url": "https://api.github.com/repos/GameCHN/module-main/git/refs{/sha}",
"trees_url": "https://api.github.com/repos/GameCHN/module-main/git/trees{/sha}",
"statuses_url": "https://api.github.com/repos/GameCHN/module-main/statuses/{sha}",
"languages_url": "https://api.github.com/repos/GameCHN/module-main/languages",
"stargazers_url": "https://api.github.com/repos/GameCHN/module-main/stargazers",
"contributors_url": "https://api.github.com/repos/GameCHN/module-main/contributors",
"subscribers_url": "https://api.github.com/repos/GameCHN/module-main/subscribers",
"subscription_url": "https://api.github.com/repos/GameCHN/module-main/subscription",
"commits_url": "https://api.github.com/repos/GameCHN/module-main/commits{/sha}",
"git_commits_url": "https://api.github.com/repos/GameCHN/module-main/git/commits{/sha}",
"comments_url": "https://api.github.com/repos/GameCHN/module-main/comments{/number}",
"issue_comment_url": "https://api.github.com/repos/GameCHN/module-main/issues/comments{/number}",
"contents_url": "https://api.github.com/repos/GameCHN/module-main/contents/{+path}",
"compare_url": "https://api.github.com/repos/GameCHN/module-main/compare/{base}...{head}",
"merges_url": "https://api.github.com/repos/GameCHN/module-main/merges",
"archive_url": "https://api.github.com/repos/GameCHN/module-main/{archive_format}{/ref}",
"downloads_url": "https://api.github.com/repos/GameCHN/module-main/downloads",
"issues_url": "https://api.github.com/repos/GameCHN/module-main/issues{/number}",
"pulls_url": "https://api.github.com/repos/GameCHN/module-main/pulls{/number}",
"milestones_url": "https://api.github.com/repos/GameCHN/module-main/milestones{/number}",
"notifications_url": "https://api.github.com/repos/GameCHN/module-main/notifications{?since,all,participating}",
"labels_url": "https://api.github.com/repos/GameCHN/module-main/labels{/name}",
"releases_url": "https://api.github.com/repos/GameCHN/module-main/releases{/id}",
"deployments_url": "https://api.github.com/repos/GameCHN/module-main/deployments",
"created_at": "2015-07-06T02:08:07Z",
"updated_at": "2015-07-06T02:09:45Z",
"pushed_at": "2015-08-23T04:42:42Z",
"git_url": "git://github.com/GameCHN/module-main.git",
"ssh_url": "git@github.com:GameCHN/module-main.git",
"clone_url": "https://github.com/GameCHN/module-main.git",
"svn_url": "https://github.com/GameCHN/module-main",
"homepage": null,
"size": 172,
"stargazers_count": 0,
"watchers_count": 0,
"language": "PHP",
"has_issues": true,
"has_projects": true,
"has_downloads": true,
"has_wiki": true,
"has_pages": false,
"forks_count": 0,
"mirror_url": null,
"archived": false,
"disabled": false,
"open_issues_count": 0,
"license": null,
"allow_forking": true,
"is_template": false,
"web_commit_signoff_required": false,
"topics": [
],
"visibility": "public",
"forks": 0,
"open_issues": 0,
"watchers": 0,
"default_branch": "master",
"temp_clone_token": null,
"network_count": 0,
"subscribers_count": 2
}

View file

@ -0,0 +1,309 @@
{
"packages": {
"idevlab/essential": {
"1.0.1": {
"name": "idevlab/essential",
"description": "All the methods and tools useful for the development of the various idevlab projects.",
"keywords": [],
"homepage": "",
"version": "1.0.1",
"version_normalized": "1.0.1.0",
"license": [],
"authors": [
{
"name": "Florian Sinama",
"email": "f.sinama@gmail.com"
}
],
"source": {
"url": "git@gitlab.com:idevlab/Essential.git",
"type": "git",
"reference": "6ff62de2e789aae308f3ff6fb11ea5955c806e19"
},
"dist": {
"url": "https://gitlab.com/api/v4/projects/idevlab%2FEssential/repository/archive.zip?sha=6ff62de2e789aae308f3ff6fb11ea5955c806e19",
"type": "zip",
"shasum": "",
"reference": "6ff62de2e789aae308f3ff6fb11ea5955c806e19"
},
"type": "library",
"time": "2022-08-17T21:57:20+00:00",
"autoload": {
"psr-4": {
"Idevlab\\Essential\\": "src/"
}
},
"require": {
"php": "^8.1"
},
"uid": 6622550
},
"1.1.0": {
"name": "idevlab/essential",
"description": "All the methods and tools useful for the development of the various idevlab projects.",
"keywords": [],
"homepage": "",
"version": "1.1.0",
"version_normalized": "1.1.0.0",
"license": [],
"authors": [
{
"name": "Florian Sinama",
"email": "f.sinama@gmail.com"
}
],
"source": {
"url": "git@gitlab.com:idevlab/Essential.git",
"type": "git",
"reference": "e69bdd42f03d7c453be072eef0c62f7cfeae2af8"
},
"dist": {
"url": "https://gitlab.com/api/v4/projects/idevlab%2FEssential/repository/archive.zip?sha=e69bdd42f03d7c453be072eef0c62f7cfeae2af8",
"type": "zip",
"shasum": "",
"reference": "e69bdd42f03d7c453be072eef0c62f7cfeae2af8"
},
"type": "library",
"time": "2022-08-17T22:11:20+00:00",
"autoload": {
"psr-4": {
"Idevlab\\Essential\\": "src/"
}
},
"require": {
"php": "^8.1",
"ext-mbstring": "*"
},
"uid": 6622551
},
"1.1.1": {
"name": "idevlab/essential",
"description": "All the methods and tools useful for the development of the various idevlab projects.",
"keywords": [],
"homepage": "",
"version": "1.1.1",
"version_normalized": "1.1.1.0",
"license": [],
"authors": [
{
"name": "Florian Sinama",
"email": "f.sinama@gmail.com"
}
],
"source": {
"url": "git@gitlab.com:idevlab/Essential.git",
"type": "git",
"reference": "c6f5113ffad27402a9cafe593efd518517bc321c"
},
"dist": {
"url": "https://gitlab.com/api/v4/projects/idevlab%2FEssential/repository/archive.zip?sha=c6f5113ffad27402a9cafe593efd518517bc321c",
"type": "zip",
"shasum": "",
"reference": "c6f5113ffad27402a9cafe593efd518517bc321c"
},
"type": "library",
"time": "2022-08-17T22:31:14+00:00",
"autoload": {
"psr-4": {
"Idevlab\\Essential\\": "src/"
}
},
"require": {
"php": "^8.1",
"ext-mbstring": "*"
},
"uid": 6622552
},
"1.2.0": {
"name": "idevlab/essential",
"description": "All the methods and tools useful for the development of the various idevlab projects.",
"keywords": [],
"homepage": "",
"version": "1.2.0",
"version_normalized": "1.2.0.0",
"license": [],
"authors": [
{
"name": "Florian Sinama",
"email": "f.sinama@gmail.com"
}
],
"source": {
"url": "git@gitlab.com:idevlab/Essential.git",
"type": "git",
"reference": "263fd95fcadfbfd4af6108749be0699d69d4df90"
},
"dist": {
"url": "https://gitlab.com/api/v4/projects/idevlab%2FEssential/repository/archive.zip?sha=263fd95fcadfbfd4af6108749be0699d69d4df90",
"type": "zip",
"shasum": "",
"reference": "263fd95fcadfbfd4af6108749be0699d69d4df90"
},
"type": "library",
"time": "2022-10-12T10:34:29+00:00",
"autoload": {
"psr-4": {
"Idevlab\\Essential\\": "src/"
}
},
"require": {
"php": "^8.1",
"ext-mbstring": "*"
},
"uid": 6624846
},
"dev-develop": {
"name": "idevlab/essential",
"description": "All the methods and tools useful for the development of the various idevlab projects.",
"keywords": [],
"homepage": "",
"version": "dev-develop",
"version_normalized": "dev-develop",
"license": [],
"authors": [
{
"name": "Florian Sinama",
"email": "f.sinama@gmail.com"
}
],
"source": {
"url": "git@gitlab.com:idevlab/Essential.git",
"type": "git",
"reference": "8125bcc747e1bf5086a3195f74a682b7be0aea6a"
},
"dist": {
"url": "https://gitlab.com/api/v4/projects/idevlab%2FEssential/repository/archive.zip?sha=8125bcc747e1bf5086a3195f74a682b7be0aea6a",
"type": "zip",
"shasum": "",
"reference": "8125bcc747e1bf5086a3195f74a682b7be0aea6a"
},
"type": "library",
"time": "2022-10-12T10:34:29+00:00",
"autoload": {
"psr-4": {
"Idevlab\\Essential\\": "src/"
}
},
"require": {
"php": "^8.1",
"ext-mbstring": "*"
},
"uid": 6622554
},
"dev-main": {
"name": "idevlab/essential",
"description": "All the methods and tools useful for the development of the various idevlab projects.",
"keywords": [],
"homepage": "",
"version": "dev-main",
"version_normalized": "dev-main",
"license": [],
"authors": [
{
"name": "Florian Sinama",
"email": "f.sinama@gmail.com"
}
],
"source": {
"url": "git@gitlab.com:idevlab/Essential.git",
"type": "git",
"reference": "263fd95fcadfbfd4af6108749be0699d69d4df90"
},
"dist": {
"url": "https://gitlab.com/api/v4/projects/idevlab%2FEssential/repository/archive.zip?sha=263fd95fcadfbfd4af6108749be0699d69d4df90",
"type": "zip",
"shasum": "",
"reference": "263fd95fcadfbfd4af6108749be0699d69d4df90"
},
"type": "library",
"time": "2022-10-12T10:34:29+00:00",
"autoload": {
"psr-4": {
"Idevlab\\Essential\\": "src/"
}
},
"default-branch": true,
"require": {
"php": "^8.1",
"ext-mbstring": "*"
},
"uid": 6622553
},
"dev-release/1.2.0": {
"name": "idevlab/essential",
"description": "All the methods and tools useful for the development of the various idevlab projects.",
"keywords": [],
"homepage": "",
"version": "dev-release/1.2.0",
"version_normalized": "dev-release/1.2.0",
"license": [],
"authors": [
{
"name": "Florian Sinama",
"email": "f.sinama@gmail.com"
}
],
"source": {
"url": "git@gitlab.com:idevlab/Essential.git",
"type": "git",
"reference": "1688c6cb5f3b0e9f21a5bbcb9f9951138ab51a66"
},
"dist": {
"url": "https://gitlab.com/api/v4/projects/idevlab%2FEssential/repository/archive.zip?sha=1688c6cb5f3b0e9f21a5bbcb9f9951138ab51a66",
"type": "zip",
"shasum": "",
"reference": "1688c6cb5f3b0e9f21a5bbcb9f9951138ab51a66"
},
"type": "library",
"time": "2022-10-12T10:34:14+00:00",
"autoload": {
"psr-4": {
"Idevlab\\Essential\\": "src/"
}
},
"require": {
"php": "^8.1",
"ext-mbstring": "*"
},
"uid": 6624845
},
"v1.0.0": {
"name": "idevlab/essential",
"description": "All the methods and tools useful for the development of the various idevlab projects.",
"keywords": [],
"homepage": "",
"version": "v1.0.0",
"version_normalized": "1.0.0.0",
"license": [],
"authors": [
{
"name": "Florian Sinama",
"email": "f.sinama@gmail.com"
}
],
"source": {
"url": "git@gitlab.com:idevlab/Essential.git",
"type": "git",
"reference": "b86767e1baf9ed9c218abcba963361876d55138a"
},
"dist": {
"url": "https://gitlab.com/api/v4/projects/idevlab%2FEssential/repository/archive.zip?sha=b86767e1baf9ed9c218abcba963361876d55138a",
"type": "zip",
"shasum": "",
"reference": "b86767e1baf9ed9c218abcba963361876d55138a"
},
"type": "library",
"time": "2022-08-17T21:34:05+00:00",
"autoload": {
"psr-4": {
"Idevlab\\Essential\\": "src/"
}
},
"require": {
"php": "^8.1"
},
"uid": 6622549
}
}
}
}

View file

@ -0,0 +1,41 @@
{
"packages": {
"ycms/module-main": {
"dev-master": {
"name": "ycms/module-main",
"description": "",
"keywords": [],
"homepage": "",
"version": "dev-master",
"version_normalized": "9999999-dev",
"license": [],
"authors": [
{
"name": "YCMS Labs",
"email": "ycms.net@gmail.com"
}
],
"source": {
"type": "git",
"url": "git@github.com:ycms/module-main.git",
"reference": "1173796881fbd7202009a68a2a59a5150bf2dbc6"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/ycms/module-main/zipball/1173796881fbd7202009a68a2a59a5150bf2dbc6",
"reference": "1173796881fbd7202009a68a2a59a5150bf2dbc6",
"shasum": ""
},
"type": "wordpress-plugin",
"time": "2015-08-23T04:42:33+00:00",
"autoload": {
"psr-4": {
"YC\\Main\\": ""
}
},
"default-branch": true,
"uid": 4064797
}
}
}
}

View file

@ -14,6 +14,7 @@ _packages_list = {
"ljjackson/linnworks",
"lky/wx_article",
"spryker-eco/computop-api",
"idevlab/essential",
]
}
@ -32,7 +33,7 @@ def _request_with_if_modified_since(request):
return request.headers.get("If-Modified-Since") is not None
def test_packagist_lister(swh_scheduler, requests_mock, datadir):
def test_packagist_lister(swh_scheduler, requests_mock, datadir, requests_mock_datadir):
# first listing, should return one origin per package
lister = PackagistLister(scheduler=swh_scheduler)
requests_mock.get(lister.PACKAGIST_PACKAGES_LIST_URL, json=_packages_list)
@ -53,20 +54,25 @@ def test_packagist_lister(swh_scheduler, requests_mock, datadir):
expected_origins = {
(
"https://github.com/gitlky/wx_article.git",
"https://github.com/gitlky/wx_article", # standard case
"git",
datetime.datetime.fromisoformat("2018-08-30T07:37:09+00:00"),
),
(
"https://github.com/ljjackson/linnworks.git",
"https://github.com/ljjackson/linnworks.git", # API goes 404
"git",
datetime.datetime.fromisoformat("2018-11-01T21:45:50+00:00"),
),
(
"https://github.com/spryker-eco/computop-api.git",
"https://github.com/spryker-eco/computop-api", # SSH URL in manifest
"git",
datetime.datetime.fromisoformat("2020-06-22T15:50:29+00:00"),
),
(
"git@gitlab.com:idevlab/Essential.git", # not GitHub
"git",
datetime.datetime.fromisoformat("2022-10-12T10:34:29+00:00"),
),
}
assert expected_origins == {
@ -150,6 +156,38 @@ def test_packagist_lister_package_with_bitbucket_hg_origin(
assert stats.origins == 0
def test_packagist_lister_package_normalize_github_origin(
swh_scheduler, requests_mock, datadir, requests_mock_datadir
):
package_name = "ycms/module-main"
lister = PackagistLister(scheduler=swh_scheduler)
requests_mock.get(
lister.PACKAGIST_PACKAGES_LIST_URL, json={"packageNames": [package_name]}
)
requests_mock.get(
f"{lister.PACKAGIST_REPO_BASE_URL}/{package_name}.json",
additional_matcher=_request_without_if_modified_since,
json=_package_metadata(datadir, package_name),
)
stats = lister.run()
assert stats.pages == 1
assert stats.origins == 1
expected_origins = {
(
"https://github.com/GameCHN/module-main",
"git",
datetime.datetime.fromisoformat("2015-08-23T04:42:33+00:00"),
),
}
assert expected_origins == {
(o.url, o.visit_type, o.last_update)
for o in swh_scheduler.get_listed_origins(lister.lister_obj.id).results
}
def test_lister_from_configfile(swh_scheduler_config, mocker):
load_from_envvar = mocker.patch("swh.lister.pattern.load_from_envvar")
load_from_envvar.return_value = {