Skip to content

Commit a213ae8

Browse files
committed
Add namespace to swift PURLs
- Use the last segment as name and the rest as namespace Signed-off-by: Keshav Priyadarshi <git@keshav.space>
1 parent c259071 commit a213ae8

File tree

1 file changed

+10
-6
lines changed

1 file changed

+10
-6
lines changed

src/packagedcode/swift.py

Lines changed: 10 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -188,9 +188,10 @@ def parse(cls, location, package_only=False):
188188
location = dependency.get("location")
189189
state = dependency.get("state", {})
190190
version = None
191+
namespace = None
191192

192193
if location and kind == "remoteSourceControl":
193-
name = get_canonical_name(location)
194+
namespace, name = get_namespace_and_name(location)
194195

195196
version = state.get("version")
196197

@@ -201,7 +202,7 @@ def parse(cls, location, package_only=False):
201202
datasource_id=cls.datasource_id,
202203
type=cls.default_package_type,
203204
primary_language=cls.default_primary_language,
204-
namespace=None,
205+
namespace=namespace,
205206
name=name,
206207
version=version,
207208
)
@@ -238,13 +239,14 @@ def get_dependencies(dependencies):
238239
continue
239240

240241
source = source[0]
242+
namespace = None
241243
name = source.get("identity")
242244
version = None
243245
is_resolved = False
244246

245247
location = source.get("location")
246248
if remote := location.get("remote"):
247-
name = get_canonical_name(remote[0].get("urlString"))
249+
namespace, name = get_namespace_and_name(remote[0].get("urlString"))
248250

249251
requirement = source.get("requirement")
250252
if exact := requirement.get("exact"):
@@ -258,14 +260,15 @@ def get_dependencies(dependencies):
258260

259261
purl = PackageURL(
260262
type="swift",
263+
namespace=namespace,
261264
name=name,
262265
version=version if is_resolved else None,
263266
)
264267

265268
dependent_packages.append(
266269
models.DependentPackage(
267270
purl=purl.to_string(),
268-
scope="install",
271+
scope="dependencies",
269272
is_runtime=True,
270273
is_optional=False,
271274
is_resolved=is_resolved,
@@ -275,10 +278,11 @@ def get_dependencies(dependencies):
275278
return dependent_packages
276279

277280

278-
def get_canonical_name(url):
281+
def get_namespace_and_name(url):
279282
parsed_url = parse.urlparse(url)
280283
hostname = parsed_url.hostname
281284
path = parsed_url.path.removesuffix(".git")
285+
canonical_name = hostname + path
282286

283-
return parse.quote(hostname + path, safe="")
287+
return canonical_name.rsplit("/", 1)
284288

0 commit comments

Comments
 (0)