forked from miaupaw/instant-eyedropper
-
Notifications
You must be signed in to change notification settings - Fork 0
/
version.rb
84 lines (61 loc) · 3.42 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
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
####################################################################################################
# Version 1.0
require 'FileUtils'
require 'colored'
$debug = true
####################################################################################################
$currentdir = File.expand_path(File.dirname(__FILE__))
$home = ENV["home"]
$tmp = ENV["tmp"]
$rcfile = "resource.h" # файл заголовка ресурсов где хранится номер версии
$vmajor = "version_major" # ключевое слово в .h файле
$vminor = "version_minor" # ключевое слово в .h файле
$vbuild = "version_build" # ключевое слово в .h файле
$vrevis = "version_revis" # ключевое слово в .h файле
$major = false
$minor = false
$build = false
$revis = false
####################################################################################################
# main
# шаблоны для поиска
regex_major = Regexp.new "#define #{Regexp.escape($vmajor)}.*(\\d+)$"
regex_minor = Regexp.new "#define #{Regexp.escape($vminor)}.*(\\d+)$"
regex_build = Regexp.new "#define #{Regexp.escape($vbuild)}.*(\\d+)$"
regex_revis = Regexp.new "#define #{Regexp.escape($vrevis)}.*(\\d+)$"
# выцепим для начала текущую версию проекта
require 'find'
files = []
Find.find($currentdir) do |path| files << path if path.downcase.include?($rcfile) end
if $debug
if files.size == 1 then puts "\t" + "found .h file".to_s.green
elsif files.size >= 2 then puts "\t" + "too many header files found".bold.red; exit
else puts "\t" + "header file not found".bold.red; exit; end
end
File.open(files[0], "r:UTF-8").each do |line|
if( m = line.match regex_major ) then $major = m[1].to_i end
if( m = line.match regex_minor ) then $minor = m[1].to_i end
if( m = line.match regex_build ) then $build = m[1].to_i end
if( m = line.match regex_revis ) then $revis = m[1].to_i end
end
if [$major, $minor, $build, $revis].all? { |i| i.is_a?(Integer) } # все ли цифры?
versionstr = "#{$major}.#{$minor}.#{$build}.#{$revis}"
puts "\t" + "current version: " + versionstr.yellow if $debug
puts versionstr unless $debug
end
# пропишем новую версию
if ARGV[0] then $newversion = ARGV[0] else $newversion = ""; exit; end
if $newversion.match '^\d+\.\d+\.\d+\.\d+$'
tmp_major = $newversion.split('.')[0]
tmp_minor = $newversion.split('.')[1]
tmp_build = $newversion.split('.')[2]
tmp_revis = $newversion.split('.')[3]
versionstring = "#{tmp_major}.#{tmp_minor}.#{tmp_build}.#{tmp_revis}"
puts "\t" + "new version: " + versionstring.magenta if $debug
file_contents = File.read(files[0]).force_encoding("UTF-8")
file_contents.gsub! regex_major, "#define #{$vmajor} #{tmp_major}"
file_contents.gsub! regex_minor, "#define #{$vminor} #{tmp_minor}"
file_contents.gsub! regex_build, "#define #{$vbuild} #{tmp_build}"
file_contents.gsub! regex_revis, "#define #{$vrevis} #{tmp_revis}"
File.open(files[0], "w:UTF-8") {|file| file.puts file_contents }
end