Skip to content

Commit f28defd

Browse files
committed
node: support shortcut git urls for lockfile v2
1 parent 9e4677e commit f28defd

File tree

6 files changed

+113
-8
lines changed

6 files changed

+113
-8
lines changed

node/flatpak_node_generator/providers/npm.py

Lines changed: 29 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -447,17 +447,38 @@ def _finalize(self) -> None:
447447

448448
new_version = f'{path}#{source.commit}'
449449
targets = []
450-
source_url = source.from_ or source.original
450+
source_url = urllib.parse.urlparse(source.from_ or source.original)
451+
452+
# https://github.com/npm/hosted-git-info
453+
hosted_git = [
454+
('@github.com', 'github'),
455+
('@bitbucket.org', 'bitbucket'),
456+
('@gitlab.com', 'gitlab'),
457+
('@gist.github.com', 'gist'),
458+
('@git.sr.ht', 'sourcehut'),
459+
]
460+
for domain, shortcut in hosted_git:
461+
if domain in source_url.netloc.lower():
462+
targets.append(
463+
f"{shortcut}:{source_url.path[1:].replace('.git', '')}"
464+
f'#{source_url.fragment}'
465+
)
466+
break
451467

452468
if (
453-
source_url.startswith(GIT_URL_PREFIX + 'ssh')
454-
and ':' not in urllib.parse.urlparse(source_url).netloc
469+
source_url.scheme.startswith(GIT_URL_PREFIX + 'ssh')
470+
and ':' not in source_url.netloc
455471
):
456-
source_url = re.sub(r'(://[^/]+)/', r'\1:', source_url)
457-
elif source_url.startswith(GIT_URL_PREFIX):
458-
targets.append(source_url[len(GIT_URL_PREFIX) :])
459-
460-
targets.append(source_url)
472+
path_match = re.compile(r'^/([^/]+)(.*)').match(source_url.path)
473+
if path_match:
474+
parent, child = path_match.groups()
475+
source_url = source_url._replace(
476+
netloc=f'{source_url.netloc}:{parent}', path=child
477+
)
478+
elif source_url.scheme.startswith(GIT_URL_PREFIX):
479+
targets.append(source_url.geturl()[len(GIT_URL_PREFIX) :])
480+
481+
targets.append(source_url.geturl())
461482
for t in targets:
462483
data[t] = new_version
463484
data[t.replace('#' + source.commit, '')] = new_version

node/tests/data/packages/git/package-lock.v1.json

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,18 @@
44
"lockfileVersion": 1,
55
"requires": true,
66
"dependencies": {
7+
"is-empty-object": {
8+
"version": "git+ssh://[email protected]/gummesson/is-empty-object.git#7b50c8eb4e14135631f7c94e01c0c8a36e5d75f8",
9+
"from": "is-empty-object@github:gummesson/is-empty-object#7b50c8eb4e14135631f7c94e01c0c8a36e5d75f8"
10+
},
11+
"is-number": {
12+
"version": "git+ssh://[email protected]/jonschlinkert/is-number.git#98e8ff1da1a89f93d1397a24d7413ed15421c139",
13+
"from": "is-number@github:jonschlinkert/is-number"
14+
},
15+
"person-lib": {
16+
"version": "git+ssh://[email protected]/volodymyrkr/person-lib.git#752fd1828b1eb3a9635bf725ae5e1704a375e524",
17+
"from": "person-lib@gitlab:volodymyrkr/person-lib"
18+
},
719
"to-camel-case": {
820
"version": "git+ssh://[email protected]/ianstormtaylor/to-camel-case.git#00a20429b600ddb6e4f8ff5b17c52914f40fe67d",
921
"from": "git+ssh://[email protected]/ianstormtaylor/to-camel-case.git",

node/tests/data/packages/git/package-lock.v2.json

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,12 +8,34 @@
88
"name": "@flatpak-node-generator-tests/git",
99
"version": "1.0.0",
1010
"dependencies": {
11+
"is-empty-object": "github:gummesson/is-empty-object#7b50c8eb4e14135631f7c94e01c0c8a36e5d75f8",
12+
"is-number": "github:jonschlinkert/is-number",
13+
"person-lib": "gitlab:volodymyrkr/person-lib",
1114
"to-camel-case": "git+ssh://[email protected]:ianstormtaylor/to-camel-case.git",
1215
"to-capital-case": "git+https://[email protected]/ianstormtaylor/to-capital-case.git",
1316
"to-no-case": "git+https://[email protected]/ianstormtaylor/to-no-case.git#9078578dcf394e63f34fd7c6666772192e537b90",
1417
"to-space-case": "git+ssh://[email protected]:ianstormtaylor/to-space-case.git#aa68213d1211745ce7c6c725ba072e6b13bef640"
1518
}
1619
},
20+
"node_modules/is-empty-object": {
21+
"version": "1.1.1",
22+
"resolved": "git+ssh://[email protected]/gummesson/is-empty-object.git#7b50c8eb4e14135631f7c94e01c0c8a36e5d75f8",
23+
"integrity": "sha512-OQNk2je1cKQ0Y0AYZ2X9hwapnDsOaKIa9wDdCjtmaU6JsnNHmbk27kPn1HNtgeIuLca3HvrBocDRt6y7+2aHJA==",
24+
"license": "MIT"
25+
},
26+
"node_modules/is-number": {
27+
"version": "7.0.0",
28+
"resolved": "git+ssh://[email protected]/jonschlinkert/is-number.git#98e8ff1da1a89f93d1397a24d7413ed15421c139",
29+
"license": "MIT",
30+
"engines": {
31+
"node": ">=0.12.0"
32+
}
33+
},
34+
"node_modules/person-lib": {
35+
"version": "1.0.1",
36+
"resolved": "git+ssh://[email protected]/volodymyrkr/person-lib.git#752fd1828b1eb3a9635bf725ae5e1704a375e524",
37+
"license": "ISC"
38+
},
1739
"node_modules/to-camel-case": {
1840
"version": "1.0.0",
1941
"resolved": "git+ssh://[email protected]/ianstormtaylor/to-camel-case.git#00a20429b600ddb6e4f8ff5b17c52914f40fe67d",
@@ -47,6 +69,19 @@
4769
}
4870
},
4971
"dependencies": {
72+
"is-empty-object": {
73+
"version": "git+ssh://[email protected]/gummesson/is-empty-object.git#7b50c8eb4e14135631f7c94e01c0c8a36e5d75f8",
74+
"integrity": "sha512-OQNk2je1cKQ0Y0AYZ2X9hwapnDsOaKIa9wDdCjtmaU6JsnNHmbk27kPn1HNtgeIuLca3HvrBocDRt6y7+2aHJA==",
75+
"from": "is-empty-object@github:gummesson/is-empty-object#7b50c8eb4e14135631f7c94e01c0c8a36e5d75f8"
76+
},
77+
"is-number": {
78+
"version": "git+ssh://[email protected]/jonschlinkert/is-number.git#98e8ff1da1a89f93d1397a24d7413ed15421c139",
79+
"from": "is-number@github:jonschlinkert/is-number"
80+
},
81+
"person-lib": {
82+
"version": "git+ssh://[email protected]/volodymyrkr/person-lib.git#752fd1828b1eb3a9635bf725ae5e1704a375e524",
83+
"from": "person-lib@gitlab:volodymyrkr/person-lib"
84+
},
5085
"to-camel-case": {
5186
"version": "git+ssh://[email protected]/ianstormtaylor/to-camel-case.git#00a20429b600ddb6e4f8ff5b17c52914f40fe67d",
5287
"from": "to-camel-case@git+ssh://[email protected]:ianstormtaylor/to-camel-case.git",

node/tests/data/packages/git/package-lock.v3.json

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,12 +8,34 @@
88
"name": "@flatpak-node-generator-tests/git",
99
"version": "1.0.0",
1010
"dependencies": {
11+
"is-empty-object": "github:gummesson/is-empty-object#7b50c8eb4e14135631f7c94e01c0c8a36e5d75f8",
12+
"is-number": "github:jonschlinkert/is-number",
13+
"person-lib": "gitlab:volodymyrkr/person-lib",
1114
"to-camel-case": "git+ssh://[email protected]:ianstormtaylor/to-camel-case.git",
1215
"to-capital-case": "git+https://[email protected]/ianstormtaylor/to-capital-case.git",
1316
"to-no-case": "git+https://[email protected]/ianstormtaylor/to-no-case.git#9078578dcf394e63f34fd7c6666772192e537b90",
1417
"to-space-case": "git+ssh://[email protected]:ianstormtaylor/to-space-case.git#aa68213d1211745ce7c6c725ba072e6b13bef640"
1518
}
1619
},
20+
"node_modules/is-empty-object": {
21+
"version": "1.1.1",
22+
"resolved": "git+ssh://[email protected]/gummesson/is-empty-object.git#7b50c8eb4e14135631f7c94e01c0c8a36e5d75f8",
23+
"integrity": "sha512-OQNk2je1cKQ0Y0AYZ2X9hwapnDsOaKIa9wDdCjtmaU6JsnNHmbk27kPn1HNtgeIuLca3HvrBocDRt6y7+2aHJA==",
24+
"license": "MIT"
25+
},
26+
"node_modules/is-number": {
27+
"version": "7.0.0",
28+
"resolved": "git+ssh://[email protected]/jonschlinkert/is-number.git#98e8ff1da1a89f93d1397a24d7413ed15421c139",
29+
"license": "MIT",
30+
"engines": {
31+
"node": ">=0.12.0"
32+
}
33+
},
34+
"node_modules/person-lib": {
35+
"version": "1.0.1",
36+
"resolved": "git+ssh://[email protected]/volodymyrkr/person-lib.git#752fd1828b1eb3a9635bf725ae5e1704a375e524",
37+
"license": "ISC"
38+
},
1739
"node_modules/to-camel-case": {
1840
"version": "1.0.0",
1941
"resolved": "git+ssh://[email protected]/ianstormtaylor/to-camel-case.git#00a20429b600ddb6e4f8ff5b17c52914f40fe67d",

node/tests/data/packages/git/package.json

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,9 @@
22
"name": "@flatpak-node-generator-tests/git",
33
"version": "1.0.0",
44
"dependencies": {
5+
"is-empty-object": "github:gummesson/is-empty-object#7b50c8eb4e14135631f7c94e01c0c8a36e5d75f8",
6+
"is-number": "github:jonschlinkert/is-number",
7+
"person-lib": "gitlab:volodymyrkr/person-lib",
58
"to-camel-case": "git+ssh://[email protected]:ianstormtaylor/to-camel-case.git",
69
"to-capital-case": "git+https://[email protected]/ianstormtaylor/to-capital-case.git",
710
"to-no-case": "git+https://[email protected]/ianstormtaylor/to-no-case.git#9078578dcf394e63f34fd7c6666772192e537b90",

node/tests/data/packages/git/yarn.lock

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,18 @@
22
# yarn lockfile v1
33

44

5+
"is-empty-object@github:gummesson/is-empty-object#7b50c8eb4e14135631f7c94e01c0c8a36e5d75f8":
6+
version "1.1.1"
7+
resolved "https://codeload.github.com/gummesson/is-empty-object/tar.gz/7b50c8eb4e14135631f7c94e01c0c8a36e5d75f8"
8+
9+
"is-number@github:jonschlinkert/is-number":
10+
version "7.0.0"
11+
resolved "https://codeload.github.com/jonschlinkert/is-number/tar.gz/98e8ff1da1a89f93d1397a24d7413ed15421c139"
12+
13+
"person-lib@gitlab:volodymyrkr/person-lib":
14+
version "1.0.1"
15+
resolved "git+ssh://[email protected]/volodymyrkr/person-lib.git#752fd1828b1eb3a9635bf725ae5e1704a375e524"
16+
517
"to-camel-case@git+ssh://[email protected]:ianstormtaylor/to-camel-case.git":
618
version "1.0.0"
719
resolved "git+ssh://[email protected]:ianstormtaylor/to-camel-case.git#00a20429b600ddb6e4f8ff5b17c52914f40fe67d"

0 commit comments

Comments
 (0)