summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rwxr-xr-xtool/file2lastrev.rb69
1 files changed, 42 insertions, 27 deletions
diff --git a/tool/file2lastrev.rb b/tool/file2lastrev.rb
index 100206d270..39b3d63567 100755
--- a/tool/file2lastrev.rb
+++ b/tool/file2lastrev.rb
@@ -40,38 +40,53 @@ parser = OptionParser.new {|opts|
}
parser.parse! rescue abort "#{File.basename(Program)}: #{$!}\n#{parser}"
+@output =
+ case @output
+ when :changed, nil
+ proc {|last, changed|
+ changed
+ }
+ when :revision_h
+ proc {|last, changed, modified, branch, title|
+ [
+ "#define RUBY_REVISION #{changed || 0}",
+ if branch
+ e = '..'
+ limit = 16
+ name = branch.sub(/\A(.{#{limit-e.size}}).{#{e.size+1},}/o) {$1+e}
+ "#define RUBY_BRANCH_NAME #{name.dump}"
+ end,
+ if title
+ "#define RUBY_LAST_COMMIT_TITLE #{title.dump}"
+ end,
+ ].compact
+ }
+ when :doxygen
+ proc {|last, changed|
+ "r#{changed}/r#{last}"
+ }
+ when :modified
+ proc {|last, changed, modified|
+ modified.strftime('%Y-%m-%dT%H:%M:%S%z')
+ }
+ else
+ raise "unknown output format `#{@output}'"
+ end
+
srcdir ||= File.dirname(File.dirname(Program))
begin
vcs = VCS.detect(srcdir)
rescue VCS::NotFoundError => e
abort "#{File.basename(Program)}: #{e.message}" unless @suppress_not_found
else
- begin
- last, changed, modified, branch, title = vcs.get_revisions(ARGV.shift)
- rescue => e
- abort "#{File.basename(Program)}: #{e.message}" unless @suppress_not_found
- exit false
+ ok = true
+ (ARGV.empty? ? [nil] : ARGV).each do |arg|
+ begin
+ puts @output[*vcs.get_revisions(arg)]
+ rescue => e
+ warn "#{File.basename(Program)}: #{e.message}" unless @suppress_not_found
+ ok = false
+ end
end
-end
-
-case @output
-when :changed, nil
- puts changed
-when :revision_h
- puts "#define RUBY_REVISION #{changed || 0}"
- if branch
- e = '..'
- limit = 16
- name = branch.sub(/\A(.{#{limit-e.size}}).{#{e.size+1},}/o) {$1+e}
- puts "#define RUBY_BRANCH_NAME #{name.dump}"
- end
- if title
- puts "#define RUBY_LAST_COMMIT_TITLE #{title.dump}"
- end
-when :doxygen
- puts "r#{changed}/r#{last}"
-when :modified
- puts modified.strftime('%Y-%m-%dT%H:%M:%S%z')
-else
- raise "unknown output format `#{@output}'"
+ exit ok
end