The London Perl and Raku Workshop takes place on 26th Oct 2024. If your company depends on Perl, please consider sponsoring and/or attending.

NAME

Versioning::Scheme::Monotonic - Monotonic versioning

VERSION

This document describes version 0.010 of Versioning::Scheme::Monotonic (from Perl distribution Versioning-Scheme), released on 2019-04-14.

SYNOPSIS

 use Versioning::Scheme::Monotonic;

 # checking validity
 Versioning::Scheme::Monotonic->is_valid_version('1.2');   # 1
 Versioning::Scheme::Monotonic->is_valid_version('1.02');  # 0
 Versioning::Scheme::Monotonic->is_valid_version('1.2.0'); # 1
 Versioning::Scheme::Monotonic->is_valid_version('1.2.1'); # 0
 Versioning::Scheme::Monotonic->is_valid_version('1.2+foo.123'); # 1

 # parsing
 Versioning::Scheme::Monotonic->parse_version('1.02');        # => undef
 Versioning::Scheme::Monotonic->parse_version('1.2+foo.123'); # {compatibility=>1, release=>2, metadata=>'foo.123'}

 # normalizing
 Versioning::Scheme::Monotonic->normalize_version('1.2.0'); # => '1.2'
 Versioning::Scheme::Monotonic->normalize_version('1.2.0+foo.123'); # => '1.2+foo.123'

 # comparing
 Versioning::Scheme::Monotonic->cmp_version('1.2', '1.2.0'); # 0
 Versioning::Scheme::Monotonic->cmp_version('1.2', '1.13');  # -1
 Versioning::Scheme::Monotonic->cmp_version('2.2', '1.13');  # 1
 Versioning::Scheme::Monotonic->cmp_version('2.2+alpha', '2.2+beta');  # -1

 # bumping
 Versioning::Scheme::Monotonic->bump_version('1.2');            # => '1.3'
 Versioning::Scheme::Monotonic->bump_version('1.2', {num=>2});  # => '1.4'
 Versioning::Scheme::Monotonic->bump_version('1.2', {part=>0}); # => '2.3'
 Versioning::Scheme::Monotonic->bump_version('2.2', {num=>-1, part=>0}); # => '1.1'

You can also mix this role into your class.

DESCRIPTION

This role implements the monotonic versioning scheme as described in [1]. A version number comprises two whole numbers:

 COMPATIBILITY.RELEASE

where COMPATIBILITY starts at 0 and RELEASE starts at 1 with no zero prefix. An additional ".0" marker is allowed for compatibility with semantic versioning:

 COMPATIBILITY.RELEASE.0

And an additional metadata after the RELEASE or ".0" marker in the form of "+" followed by a dot-separated series of identifiers. Identifier must comprise only of [0-9A-Za-z-] and cannot be empty.

RELEASE is always increased. COMPATIBILITY is increased whenever there's a backward-incompatibility introduced.

Normalizing just normalized COMPATIBILITY.RELEASE.0 into COMPATIBILITY.RELEASE.

Comparing is performed using this expression:

 (COMPATIBILITY1 <=> COMPATIBILITY2) || (RELEASE1 <=> RELEASE2) || (METADATA1 cmp METADATA2)

Bumping by default increases RELEASE by 1. You can specify option num (e.g. 2) to bump RELEASE by that number. You can specify option part (e.g. 0) to increase COMPATIBILITY instead; but in that case RELEASE will still be bumped by 1.

METHODS

is_valid_version

parse_version

normalize_version

cmp_version

bump_version

HOMEPAGE

Please visit the project's homepage at https://metacpan.org/release/Versioning-Scheme.

SOURCE

Source repository is at https://github.com/perlancar/perl-Versioning-Scheme.

BUGS

Please report any bugs or feature requests on the bugtracker website https://rt.cpan.org/Public/Dist/Display.html?Name=Versioning-Scheme

When submitting a bug or request, please include a test-file or a patch to an existing test-file that illustrates the bug or desired feature.

SEE ALSO

[1] http://blog.appliedcompscilab.com/monotonic_versioning_manifesto/

Version::Monotonic, an older incantation of this module.

AUTHOR

perlancar <perlancar@cpan.org>

COPYRIGHT AND LICENSE

This software is copyright (c) 2019, 2018 by perlancar@cpan.org.

This is free software; you can redistribute it and/or modify it under the same terms as the Perl 5 programming language system itself.