From 38a7a13ac6ed6bba2584def7d7121257eb85e051 Mon Sep 17 00:00:00 2001 From: Takashi Kokubun Date: Sat, 17 Sep 2022 21:16:06 +0900 Subject: 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 --- tool/file2lastrev.rb | 10 ++++++++-- tool/lib/vcs.rb | 22 ++++++++++++++++++---- tool/make-snapshot | 2 +- 3 files changed, 27 insertions(+), 7 deletions(-) (limited to 'tool') 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 ||= -- cgit v1.2.3