summaryrefslogtreecommitdiff
path: root/tool/ruby-version.rb
blob: 3bbec576e13ad4bbbffb04972ce10eddb6bdeb8c (plain)
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
#!/usr/bin/env ruby

module RubyVersion
  def self.tag(version)
    major_version = Integer(version.split('.', 2)[0])
    if major_version >= 4
      "v#{version}"
    else
      "v#{version.tr('.-', '_')}"
    end
  end

  # Return the previous version to be used for release diff links.
  # For a ".0" version, it returns the previous ".0" version.
  # For a non-".0" version, it returns the previous teeny version.
  def self.previous(version)
    unless /\A(\d+)\.(\d+)\.(\d+)(?:-(?:preview|rc)\d+)?\z/ =~ version
      raise "unexpected version string '#{version}'"
    end
    major = Integer($1)
    minor = Integer($2)
    teeny = Integer($3)

    if teeny != 0
      "#{major}.#{minor}.#{teeny-1}"
    elsif minor != 0 # && teeny == 0
      "#{major}.#{minor-1}.#{teeny}"
    else # minor == 0 && teeny == 0
      case major
      when 3
        "2.7.0"
      when 4
        "3.4.0"
      else
        raise "it doesn't know what is the previous version of '#{version}'"
      end
    end
  end
end

if __FILE__ == $0
  case ARGV[0]
  when "tag"
    print RubyVersion.tag(ARGV[1])
  when "previous"
    print RubyVersion.previous(ARGV[1])
  when "previous-tag"
    print RubyVersion.tag(RubyVersion.previous(ARGV[1]))
  else
    "#{$0}: unexpected command #{ARGV[0].inspect}"
  end
end