| 109 | end |
| 110 | |
| 111 | def detect_versions |
| 112 | top_dir = Pathname(__dir__).parent.parent |
| 113 | cpp_cmake_lists = top_dir + "cpp" + "CMakeLists.txt" |
| 114 | @snapshot_version = cpp_cmake_lists.read[/ARROW_VERSION "(.+?)"/, 1] |
| 115 | @snapshot_major_version = @snapshot_version.split(".")[0] |
| 116 | @snapshot_so_version = compute_so_version(@snapshot_version.split("-")[0]) |
| 117 | @snapshot_gi_api_version = compute_gi_api_version(@snapshot_version.split("-")[0]) |
| 118 | release_version = @snapshot_version.gsub(/-SNAPSHOT\z/, "") |
| 119 | release_version_components = release_version.split(".") |
| 120 | case release_type |
| 121 | when nil |
| 122 | when :major |
| 123 | release_version_components[0].succ! |
| 124 | when :minor |
| 125 | release_version_components[1].succ! |
| 126 | when :patch |
| 127 | release_version_components[2].succ! |
| 128 | else |
| 129 | raise "unknown release type: #{release_type.inspect}" |
| 130 | end |
| 131 | @release_version = release_version_components.join(".") |
| 132 | @release_compatible_version = compute_compatible_version(@release_version) |
| 133 | @so_version = compute_so_version(@release_version) |
| 134 | @gi_api_version = compute_gi_api_version(@release_version) |
| 135 | next_version_components = @release_version.split(".") |
| 136 | case next_release_type |
| 137 | when :major |
| 138 | next_version_components[0].succ! |
| 139 | next_version_components[1] = 0 |
| 140 | next_version_components[2] = 0 |
| 141 | when :minor |
| 142 | next_version_components[1].succ! |
| 143 | next_version_components[2] = 0 |
| 144 | when :patch |
| 145 | next_version_components[2].succ! |
| 146 | else |
| 147 | raise "unknown next release type: #{next_release_type.inspect}" |
| 148 | end |
| 149 | @next_version = next_version_components.join(".") |
| 150 | @next_major_version = @next_version.split(".")[0] |
| 151 | @next_compatible_version = compute_compatible_version(@next_version) |
| 152 | @next_snapshot_version = "#{@next_version}-SNAPSHOT" |
| 153 | @next_so_version = compute_so_version(@next_version) |
| 154 | @next_gi_api_version = compute_gi_api_version(@next_version) |
| 155 | r_description = top_dir + "r" + "DESCRIPTION" |
| 156 | @previous_version = r_description.read[/^Version: (.+?)\.9000$/, 1] |
| 157 | if @previous_version |
| 158 | @previous_compatible_version = compute_compatible_version(@previous_version) |
| 159 | else |
| 160 | @previous_compatible_version = nil |
| 161 | end |
| 162 | r_versions = top_dir + "r" + "pkgdown" + "assets" + "versions.json" |
| 163 | @previous_r_version = r_versions.read[/"name": "(.+?) \(release\)"/, 1] |
| 164 | end |
| 165 | |
| 166 | def compute_so_version(version) |
| 167 | major, minor, _patch = version.split(".") |