Commit 862e0ff6b846d9207c3adf9e86b5b84420595935
1 parent
2e9599b7
Exists in
master
and in
4 other branches
Add Gitlab::VersionInfo class to fix and simplify version check.
It returns "yes" if required version is "1.7.10" and current version is "1.6.10", because the patch version of current version equals to that of required version.
Showing
3 changed files
with
133 additions
and
24 deletions
Show diff stats
... | ... | @@ -0,0 +1,54 @@ |
1 | +module Gitlab | |
2 | + class VersionInfo | |
3 | + include Comparable | |
4 | + | |
5 | + attr_reader :major, :minor, :patch | |
6 | + | |
7 | + def self.parse(str) | |
8 | + if m = str.match(/(\d+)\.(\d+)\.(\d+)/) | |
9 | + VersionInfo.new(m[1].to_i, m[2].to_i, m[3].to_i) | |
10 | + else | |
11 | + VersionInfo.new | |
12 | + end | |
13 | + end | |
14 | + | |
15 | + def initialize(major = 0, minor = 0, patch = 0) | |
16 | + @major = major | |
17 | + @minor = minor | |
18 | + @patch = patch | |
19 | + end | |
20 | + | |
21 | + def <=>(other) | |
22 | + return unless other.is_a? VersionInfo | |
23 | + return unless valid? && other.valid? | |
24 | + | |
25 | + if other.major < @major | |
26 | + 1 | |
27 | + elsif @major < other.major | |
28 | + -1 | |
29 | + elsif other.minor < @minor | |
30 | + 1 | |
31 | + elsif @minor < other.minor | |
32 | + -1 | |
33 | + elsif other.patch < @patch | |
34 | + 1 | |
35 | + elsif @patch < other.patch | |
36 | + -1 | |
37 | + else | |
38 | + 0 | |
39 | + end | |
40 | + end | |
41 | + | |
42 | + def to_s | |
43 | + if valid? | |
44 | + "%d.%d.%d" % [@major, @minor, @patch] | |
45 | + else | |
46 | + "Unknown" | |
47 | + end | |
48 | + end | |
49 | + | |
50 | + def valid? | |
51 | + @major >= 0 && @minor >= 0 && @patch >= 0 && @major + @minor + @patch > 0 | |
52 | + end | |
53 | + end | |
54 | +end | ... | ... |
lib/tasks/gitlab/check.rake
... | ... | @@ -655,39 +655,25 @@ namespace :gitlab do |
655 | 655 | end |
656 | 656 | |
657 | 657 | def check_gitlab_shell |
658 | - required_version = '1.4.0' | |
658 | + required_version = Gitlab::VersionInfo.new(1, 4, 0) | |
659 | + current_version = Gitlab::VersionInfo.parse(gitlab_shell_version) | |
659 | 660 | |
660 | - print "GitLab Shell version? ... " | |
661 | - if gitlab_shell_version.strip == required_version | |
662 | - puts "OK (#{required_version})".green | |
661 | + print "GitLab Shell version >= #{required_version} ? ... " | |
662 | + if required_version <= current_version | |
663 | + puts "OK (#{current_version})".green | |
663 | 664 | else |
664 | - puts "FAIL. Please update gitlab-shell to v#{required_version}".red | |
665 | + puts "FAIL. Please update gitlab-shell to #{required_version} from #{current_version}".red | |
665 | 666 | end |
666 | 667 | end |
667 | 668 | |
668 | 669 | def check_git_version |
669 | - required_version_major = 1 | |
670 | - required_version_minor = 7 | |
671 | - required_version_patch = 10 | |
672 | - | |
673 | - required_version = "%d.%d.%d" %[required_version_major, required_version_minor, required_version_patch] | |
670 | + required_version = Gitlab::VersionInfo.new(1, 7, 10) | |
671 | + current_version = Gitlab::VersionInfo.parse(run("git --version")) | |
674 | 672 | |
675 | 673 | print "Git version >= #{required_version} ? ... " |
676 | 674 | |
677 | - if m = run_and_match("git --version", /git version ((\d+)\.(\d+)\.(\d+))/) | |
678 | - current_version = m[1] | |
679 | - major = m[2].to_i | |
680 | - minor = m[3].to_i | |
681 | - patch = m[4].to_i | |
682 | - unless major <= required_version_major && minor <= required_version_minor && patch < required_version_patch | |
683 | - satisfying_git_version = true | |
684 | - end | |
685 | - else | |
686 | - current_version = "Unknown" | |
687 | - end | |
688 | - | |
689 | - if satisfying_git_version | |
690 | - puts "yes".green | |
675 | + if required_version <= current_version | |
676 | + puts "yes (#{current_version})".green | |
691 | 677 | else |
692 | 678 | puts "no".red |
693 | 679 | try_fixing_it( | ... | ... |
... | ... | @@ -0,0 +1,69 @@ |
1 | +require 'spec_helper' | |
2 | + | |
3 | +describe 'Gitlab::VersionInfo', no_db: true do | |
4 | + before do | |
5 | + @unknown = Gitlab::VersionInfo.new | |
6 | + @v0_0_1 = Gitlab::VersionInfo.new(0, 0, 1) | |
7 | + @v0_1_0 = Gitlab::VersionInfo.new(0, 1, 0) | |
8 | + @v1_0_0 = Gitlab::VersionInfo.new(1, 0, 0) | |
9 | + @v1_0_1 = Gitlab::VersionInfo.new(1, 0, 1) | |
10 | + @v1_1_0 = Gitlab::VersionInfo.new(1, 1, 0) | |
11 | + @v2_0_0 = Gitlab::VersionInfo.new(2, 0, 0) | |
12 | + end | |
13 | + | |
14 | + context '>' do | |
15 | + it { @v2_0_0.should > @v1_1_0 } | |
16 | + it { @v1_1_0.should > @v1_0_1 } | |
17 | + it { @v1_0_1.should > @v1_0_0 } | |
18 | + it { @v1_0_0.should > @v0_1_0 } | |
19 | + it { @v0_1_0.should > @v0_0_1 } | |
20 | + end | |
21 | + | |
22 | + context '>=' do | |
23 | + it { @v2_0_0.should >= Gitlab::VersionInfo.new(2, 0, 0) } | |
24 | + it { @v2_0_0.should >= @v1_1_0 } | |
25 | + end | |
26 | + | |
27 | + context '<' do | |
28 | + it { @v0_0_1.should < @v0_1_0 } | |
29 | + it { @v0_1_0.should < @v1_0_0 } | |
30 | + it { @v1_0_0.should < @v1_0_1 } | |
31 | + it { @v1_0_1.should < @v1_1_0 } | |
32 | + it { @v1_1_0.should < @v2_0_0 } | |
33 | + end | |
34 | + | |
35 | + context '<=' do | |
36 | + it { @v0_0_1.should <= Gitlab::VersionInfo.new(0, 0, 1) } | |
37 | + it { @v0_0_1.should <= @v0_1_0 } | |
38 | + end | |
39 | + | |
40 | + context '==' do | |
41 | + it { @v0_0_1.should == Gitlab::VersionInfo.new(0, 0, 1) } | |
42 | + it { @v0_1_0.should == Gitlab::VersionInfo.new(0, 1, 0) } | |
43 | + it { @v1_0_0.should == Gitlab::VersionInfo.new(1, 0, 0) } | |
44 | + end | |
45 | + | |
46 | + context '!=' do | |
47 | + it { @v0_0_1.should_not == @v0_1_0 } | |
48 | + end | |
49 | + | |
50 | + context 'unknown' do | |
51 | + it { @unknown.should_not be @v0_0_1 } | |
52 | + it { @unknown.should_not be Gitlab::VersionInfo.new } | |
53 | + it { expect{@unknown > @v0_0_1}.to raise_error(ArgumentError) } | |
54 | + it { expect{@unknown < @v0_0_1}.to raise_error(ArgumentError) } | |
55 | + end | |
56 | + | |
57 | + context 'parse' do | |
58 | + it { Gitlab::VersionInfo.parse("1.0.0").should == @v1_0_0 } | |
59 | + it { Gitlab::VersionInfo.parse("1.0.0.1").should == @v1_0_0 } | |
60 | + it { Gitlab::VersionInfo.parse("git 1.0.0b1").should == @v1_0_0 } | |
61 | + it { Gitlab::VersionInfo.parse("git 1.0b1").should_not be_valid } | |
62 | + end | |
63 | + | |
64 | + context 'to_s' do | |
65 | + it { @v1_0_0.to_s.should == "1.0.0" } | |
66 | + it { @unknown.to_s.should == "Unknown" } | |
67 | + end | |
68 | +end | |
69 | + | ... | ... |