Skip to content

Commit fd36323

Browse files
committed
URI-PackageURL 2.23
1 parent 0f1ea09 commit fd36323

File tree

9 files changed

+58
-37
lines changed

9 files changed

+58
-37
lines changed

Changes

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,12 @@
11
Change history for URI-PackageURL
22

3-
2.xx 2025-xx-xx
3+
2.23 2025-07-11
44
- Updated CPAN PURL type spec
5+
- Added PURL_LEGACY_CPAN_TYPE env
6+
- Added "to_hash" helper
7+
- Use "checksum" qualifier as singular (giterlizzi/perl-URI-PackageURL#15)
8+
- Added getter/setter methods for PURL components (giterlizzi/perl-URI-PackageURL#16)
9+
- Improved the support of "vers" qualifier (giterlizzi/perl-URI-PackageURL#17)
510
- Improved encoding
611
- Added support for "vers:none/*" and "vers:all/*" in "URI::VersionRange"
712
- Improved version comparator class loader in "URI::VersionRange"

README.md

Lines changed: 23 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -10,19 +10,32 @@ use URI::PackageURL;
1010
# OO-interface
1111

1212
# Encode components in PackageURL string
13-
$purl = URI::PackageURL->new(type => cpan, namespace => 'GDT', name => 'URI-PackageURL', version => '2.21');
13+
$purl = URI::PackageURL->new(type => cpan, namespace => 'GDT', name => 'URI-PackageURL', version => '2.23');
1414

15-
say $purl; # pkg:cpan/GDT/URI-PackageURL@2.21
15+
say $purl; # pkg:cpan/GDT/URI-PackageURL@2.23
1616

1717
# Parse PackageURL string
18-
$purl = URI::PackageURL->from_string('pkg:cpan/GDT/[email protected]');
18+
$purl = URI::PackageURL->from_string('pkg:cpan/GDT/[email protected]');
19+
20+
21+
# use setter methods
22+
23+
my $purl = URI::PackageURL->new(type => 'cpan', namespace => 'GDT', name => 'URI-PackageURL');
24+
25+
say $purl; # pkg:cpan/GDT/URI-PackageURL
26+
say $purl->version; # undef
27+
28+
$purl->version('2.23');
29+
say $purl; # pkg:cpan/GDT/[email protected]
30+
say $purl->version; # 2.23
31+
1932

2033
# exported functions
2134

22-
$purl = decode_purl('pkg:cpan/GDT/URI-PackageURL@2.21');
35+
$purl = decode_purl('pkg:cpan/GDT/URI-PackageURL@2.23');
2336
say $purl->type; # cpan
2437

25-
$purl_string = encode_purl(type => cpan, namespace => 'GDT', name => 'URI::PackageURL', version => '2.21');
38+
$purl_string = encode_purl(type => cpan, namespace => 'GDT', name => 'URI::PackageURL', version => '2.23');
2639
```
2740

2841

@@ -31,22 +44,22 @@ $purl_string = encode_purl(type => cpan, namespace => 'GDT', name => 'URI::Packa
3144
Inspect and export "purl" string in various formats (JSON, YAML, Data::Dumper, ENV):
3245

3346
```console
34-
$ purl-tool pkg:cpan/GDT/URI-PackageURL@2.21 --json | jq
47+
$ purl-tool pkg:cpan/GDT/URI-PackageURL@2.23 --json | jq
3548
{
3649
"name": "URI-PackageURL",
3750
"namespace": "GDT",
3851
"qualifiers": {},
3952
"subpath": null,
4053
"type": "cpan",
41-
"version": "2.21"
54+
"version": "2.23"
4255
}
4356
```
4457

4558

4659
Download package using "purl" string:
4760

4861
```console
49-
$ wget $(purl-tool pkg:cpan/GDT/URI-PackageURL@2.21 --download-url)
62+
$ wget $(purl-tool pkg:cpan/GDT/URI-PackageURL@2.23 --download-url)
5063
```
5164

5265

@@ -57,7 +70,7 @@ Use "purl" string in your shell-scripts:
5770

5871
set -e
5972

60-
PURL="pkg:cpan/GDT/URI-PackageURL@2.21"
73+
PURL="pkg:cpan/GDT/URI-PackageURL@2.23"
6174

6275
eval $(purl-tool "$PURL" --env)
6376

@@ -79,7 +92,7 @@ Create on-the-fly a "purl" string:
7992
$ purl-tool --type cpan \
8093
--namespace GDT \
8194
--name URI-PackageURL \
82-
--version 2.21
95+
--version 2.23
8396
```
8497

8598

lib/URI/PackageURL.pm

Lines changed: 14 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ use constant DEBUG => $ENV{PURL_DEBUG};
1313

1414
use overload '""' => 'to_string', fallback => 1;
1515

16-
our $VERSION = '2.22_4';
16+
our $VERSION = '2.23';
1717
our @EXPORT = qw(encode_purl decode_purl);
1818

1919
my $PURL_REGEXP = qr{^pkg:[A-Za-z\\.\\-\\+][A-Za-z0-9\\.\\-\\+]*/.+};
@@ -338,14 +338,15 @@ URI::PackageURL - Perl extension for Package URL (aka "purl")
338338
type => 'cpan',
339339
namespace => 'GDT',
340340
name => 'URI-PackageURL',
341-
version => '2.22'
341+
version => '2.23'
342342
);
343343
344-
say $purl; # pkg:cpan/GDT/URI-PackageURL@2.22
344+
say $purl; # pkg:cpan/GDT/URI-PackageURL@2.23
345345
346346
# Parse Package URL string
347-
$purl = URI::PackageURL->from_string('pkg:cpan/GDT/[email protected]');
348-
347+
$purl = URI::PackageURL->from_string('pkg:cpan/GDT/[email protected]');
348+
349+
349350
# use setter methods
350351
351352
my $purl = URI::PackageURL->new(type => 'cpan', namespace => 'GDT', name => 'URI-PackageURL');
@@ -356,17 +357,19 @@ URI::PackageURL - Perl extension for Package URL (aka "purl")
356357
$purl->version('2.23');
357358
say $purl; # pkg:cpan/GDT/[email protected]
358359
say $purl->version; # 2.23
359-
360+
361+
360362
# exported functions
361363
362-
$purl = decode_purl('pkg:cpan/GDT/URI-PackageURL@2.22');
364+
$purl = decode_purl('pkg:cpan/GDT/URI-PackageURL@2.23');
363365
say $purl->type; # cpan
364366
365-
$purl_string = encode_purl(type => cpan, namespace => 'GDT', name => 'URI-PackageURL', version => '2.22');
366-
say $purl_string; # pkg:cpan/GDT/[email protected]
367+
$purl_string = encode_purl(type => cpan, namespace => 'GDT', name => 'URI-PackageURL', version => '2.23');
368+
say $purl_string; # pkg:cpan/GDT/[email protected]
369+
367370
368371
# uses the legacy CPAN PURL type, to be used only for compatibility (will be removed in the future)
369-
372+
370373
$ENV{PURL_LEGACY_CPAN_TYPE} = 1;
371374
URI::PackageURL->new(type => 'cpan', name => 'URI::PackageURL');
372375
@@ -544,7 +547,7 @@ Helper method for JSON modules (L<JSON>, L<JSON::PP>, L<JSON::XS>, L<Cpanel::JSO
544547
# "scheme" : "pkg",
545548
# "subpath" : null,
546549
# "type" : "cpan",
547-
# "version" : "2.22"
550+
# "version" : "2.23"
548551
# }
549552
550553
=item $purl = URI::PackageURL->from_string($purl_string);

lib/URI/PackageURL/App.pm

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ use Data::Dumper ();
1313

1414
use URI::PackageURL ();
1515

16-
our $VERSION = '2.22_4';
16+
our $VERSION = '2.23';
1717

1818
sub cli_error {
1919
my ($error) = @_;

lib/URI/PackageURL/Util.pm

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ use warnings;
77

88
use Exporter qw(import);
99

10-
our $VERSION = '2.22_4';
10+
our $VERSION = '2.23';
1111
our @EXPORT = qw(purl_to_urls purl_components_normalize);
1212

1313
sub purl_components_normalize {
@@ -581,7 +581,7 @@ URI::PackageURL::Util - Utility for URI::PackageURL
581581
582582
use URI::PackageURL::Util qw(purl_to_urls);
583583
584-
$urls = purl_to_urls('pkg:cpan/GDT/URI-PackageURL@2.22');
584+
$urls = purl_to_urls('pkg:cpan/GDT/URI-PackageURL@2.23');
585585
586586
$filename = basename($urls->{download});
587587
$ua->mirror($urls->{download}, "/tmp/$filename");
@@ -627,13 +627,13 @@ C<cpan>, C<docker>, C<gem>, C<github>, C<gitlab>, C<luarocks>, C<maven>, C<npm>,
627627
(*) Only with B<version> component
628628
(**) Only if B<download_url> qualifier is provided
629629
630-
$urls = purl_to_urls('pkg:cpan/GDT/URI-PackageURL@2.22');
630+
$urls = purl_to_urls('pkg:cpan/GDT/URI-PackageURL@2.23');
631631
632632
print Dumper($urls);
633633
634634
# $VAR1 = {
635-
# 'repository' => 'https://metacpan.org/release/GDT/URI-PackageURL-2.22',
636-
# 'download' => 'http://www.cpan.org/authors/id/G/GD/GDT/URI-PackageURL-2.22.tar.gz'
635+
# 'repository' => 'https://metacpan.org/release/GDT/URI-PackageURL-2.23',
636+
# 'download' => 'http://www.cpan.org/authors/id/G/GD/GDT/URI-PackageURL-2.23.tar.gz'
637637
# };
638638
639639
=back

lib/URI/VersionRange.pm

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ use constant FALSE => !!0;
1818

1919
use overload '""' => 'to_string', fallback => 1;
2020

21-
our $VERSION = '2.22_4';
21+
our $VERSION = '2.23';
2222
our @EXPORT = qw(encode_vers decode_vers);
2323

2424
my $VERS_REGEXP = qr{^vers:[a-z\\.\\-\\+][a-z0-9\\.\\-\\+]*/.+};
@@ -345,11 +345,11 @@ URI::VersionRange - Perl extension for Version Range Specification
345345
}
346346
347347
# Parse "vers" string
348-
$vers = URI::VersionRange->from_string('vers:cpan/>2.00|<2.22');
348+
$vers = URI::VersionRange->from_string('vers:cpan/>2.00|<2.23');
349349
350350
# exported functions
351351
352-
$vers = decode_vers('vers:cpan/>2.00|<2.22');
352+
$vers = decode_vers('vers:cpan/>2.00|<2.23');
353353
say $vers->scheme; # cpan
354354
355355
$vers_string = encode_vers(scheme => cpan, constraints => ['>2.00']);
@@ -424,7 +424,7 @@ C<constraints> is ARRAY of L<URI::VersionRange::Constraint> object.
424424
425425
Check if a version is contained within a range
426426
427-
my $vers = URI::VersionRange::from_string('vers:cpan/>2.00|<2.22');
427+
my $vers = URI::VersionRange::from_string('vers:cpan/>2.00|<2.23');
428428
429429
if ($vers->contains('2.10')) {
430430
say "The version is in range";
@@ -448,7 +448,7 @@ Helper method for JSON modules (L<JSON>, L<JSON::PP>, L<JSON::XS>, L<Mojo::JSON>
448448
449449
use Mojo::JSON qw(encode_json);
450450
451-
say encode_json($vers); # {"constraints":[{"comparator":">","version":"2.00"},{"comparator":"<","version":"2.22"}],"scheme":"cpan"}
451+
say encode_json($vers); # {"constraints":[{"comparator":">","version":"2.00"},{"comparator":"<","version":"2.23"}],"scheme":"cpan"}
452452
453453
=item $vers = URI::VersionRange->from_string($vers_string);
454454

lib/URI/VersionRange/App.pm

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ use Data::Dumper ();
1313

1414
use URI::VersionRange ();
1515

16-
our $VERSION = '2.22_4';
16+
our $VERSION = '2.23';
1717

1818
sub cli_error {
1919
my ($error) = @_;

lib/URI/VersionRange/Constraint.pm

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ use overload '""' => 'to_string', fallback => 1;
1212

1313
use URI::VersionRange::Version;
1414

15-
our $VERSION = '2.22_4';
15+
our $VERSION = '2.23';
1616

1717
our %COMPARATOR = (
1818
'=' => 'equal',

t/20-decode.t

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ use Test::More;
77

88
use URI::PackageURL;
99

10-
my $t1 = 'pkg:cpan/GDT/URI-PackageURL@2.22';
10+
my $t1 = 'pkg:cpan/GDT/URI-PackageURL@2.23';
1111
my $t2 = 'pkg:deb/debian/[email protected]?arch=i386&distro=jessie';
1212
my $t3 = 'pkg:golang/google.golang.org/genproto@abcdedf#googleapis/api/annotations';
1313
my $t4 = 'pkg:docker/customer/dockerimage@sha256:244fd47e07d1004f0aed9c?repository_url=gcr.io';
@@ -22,7 +22,7 @@ subtest "Decode '$t1'" => sub {
2222
is($purl->type, 'cpan', 'Type');
2323
is($purl->namespace, 'GDT', 'Namespace');
2424
is($purl->name, 'URI-PackageURL', 'Name');
25-
is($purl->version, '2.22', 'Version');
25+
is($purl->version, '2.23', 'Version');
2626

2727
is($purl->to_string, $t1, 'PackageURL');
2828

0 commit comments

Comments
 (0)