diff options
author | Takashi Kokubun <takashikkbn@gmail.com> | 2022-09-17 21:16:06 +0900 |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-09-17 21:16:06 +0900 |
commit | 38a7a13ac6ed6bba2584def7d7121257eb85e051 (patch) | |
tree | 1c20408e50d0fdd78e6277d9fa2dea05d785a88f /tool | |
parent | ca4cbe59eda77a3855094c843486759868794e85 (diff) | |
download | ruby-38a7a13ac6ed6bba2584def7d7121257eb85e051.tar.gz |
Auto-generate the release date on version.h from git CommitDate (#6382)
* Auto-generate the release date on version.h
from git CommitDate
* Generate revision.h on mswin
Diffstat (limited to 'tool')
-rwxr-xr-x | tool/file2lastrev.rb | 10 | ||||
-rw-r--r-- | tool/lib/vcs.rb | 22 | ||||
-rwxr-xr-x | tool/make-snapshot | 2 |
3 files changed, 27 insertions, 7 deletions
diff --git a/tool/file2lastrev.rb b/tool/file2lastrev.rb index 008e4b55e5..476437a995 100755 --- a/tool/file2lastrev.rb +++ b/tool/file2lastrev.rb @@ -66,7 +66,13 @@ OptionParser.new {|opts| new_vcs["."] end } -exit unless vcs +unless vcs + # Output only release_date when .git is missing + if @output == :revision_h + puts VCS.release_date(Time.now - 10) # same as make-snapshot + end + exit +end @output = case @output @@ -76,7 +82,7 @@ exit unless vcs } when :revision_h Proc.new {|last, changed, modified, branch, title| - vcs.revision_header(last, modified, branch, title, limit: @limit) + vcs.revision_header(last, modified, modified, branch, title, limit: @limit) } when :doxygen Proc.new {|last, changed| diff --git a/tool/lib/vcs.rb b/tool/lib/vcs.rb index 05d95061c4..d33d41dba1 100644 --- a/tool/lib/vcs.rb +++ b/tool/lib/vcs.rb @@ -95,6 +95,15 @@ class VCS opts end + def self.release_date(time) + t = time.utc + [ + t.strftime('#define RUBY_RELEASE_YEAR %Y'), + t.strftime('#define RUBY_RELEASE_MONTH %-m'), + t.strftime('#define RUBY_RELEASE_DAY %-d'), + ] + end + attr_reader :srcdir def initialize(path) @@ -204,7 +213,8 @@ class VCS revision_handler(rev).short_revision(rev) end - def revision_header(last, modified = nil, branch = nil, title = nil, limit: 20) + # make-snapshot generates only release_date whereas file2lastrev generates both release_date and release_datetime + def revision_header(last, release_date, release_datetime = nil, branch = nil, title = nil, limit: 20) short = short_revision(last) if /[^\x00-\x7f]/ =~ title and title.respond_to?(:force_encoding) title = title.dup.force_encoding("US-ASCII") @@ -225,10 +235,11 @@ class VCS title = title.dump.sub(/\\#/, '#') code << "#define RUBY_LAST_COMMIT_TITLE #{title}" end - if modified - t = modified.utc + if release_datetime + t = release_datetime.utc code << t.strftime('#define RUBY_RELEASE_DATETIME "%FT%TZ"') end + code += VCS.release_date(release_date) code end @@ -386,7 +397,10 @@ class VCS end class GIT < self - register(".git") {|path, dir| File.exist?(File.join(path, dir))} + register(".git") do |path, dir| + File.exist?(File.join(path, dir)) && + (`#{COMMAND} -v` rescue false) # make sure git command exists + end COMMAND = ENV["GIT"] || 'git' def cmd_args(cmds, srcdir = nil) diff --git a/tool/make-snapshot b/tool/make-snapshot index 02b5d182f5..22ae360c3e 100755 --- a/tool/make-snapshot +++ b/tool/make-snapshot @@ -347,7 +347,7 @@ def package(vcs, rev, destdir, tmp = nil) end File.open("#{v}/revision.h", "wb") {|f| - f.puts vcs.revision_header(revision) + f.puts vcs.revision_header(revision, modified) } version ||= (versionhdr = IO.read("#{v}/version.h"))[RUBY_VERSION_PATTERN, 1] version ||= |