forked from bernd/fpm-cookery
/
version.rb
66 lines (54 loc) · 1.77 KB
/
version.rb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
module FPM
module Cookery
module Package
# See the following URLs for package naming conventions.
#
# * https://www.debian.org/doc/debian-policy/ch-controlfields.html#s-f-Version
# * https://fedoraproject.org/wiki/Packaging:NamingGuidelines?rd=Packaging/NamingGuidelines#Package_Versioning
class Version
REVISION_DELIMITER = {
:default => '-'
}
VENDOR_DELIMITER = {
:deb => '+',
:rpm => '.',
:default => '-'
}
# fpm sets the default version in FPM::Command; since we bypass the
# command line interface, we need to set our own value.
DEFAULT_VERSION = '1.0'
attr_reader :epoch, :revision
def initialize(recipe, target, config)
@recipe = recipe
@target = target
@config = config
@revision = recipe.revision
@version, @epoch = split_version(@recipe.version)
end
def vendor
@config[:vendor] || @recipe.vendor
end
def version
@version ||= DEFAULT_VERSION
end
def revision_delimiter
REVISION_DELIMITER[:default]
end
def vendor_delimiter
return @config[:vendor_delimiter] if @config[:vendor_delimiter]
VENDOR_DELIMITER[@target.to_sym] || VENDOR_DELIMITER[:default]
end
def to_s
s_revision = revision ? "#{revision_delimiter}#{revision}" : ""
s_vendor = vendor ? "#{vendor_delimiter}#{vendor}" : ""
"#{version}#{s_revision}#{s_vendor}"
end
alias_method :to_str, :to_s
private
def split_version(version)
(version || '').split(':', 2).reject(&:empty?).reverse
end
end
end
end
end