blob: 23c096111e3fe5e044271e950d0e8131ebe092a2 [file] [log] [blame]
#!/usr/bin/ruby
#
# Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
#
# This program and the accompanying materials are made available under the
# terms of the Eclipse Public License v. 2.0, which is available at
# http://www.eclipse.org/legal/epl-2.0.
#
# This Source Code may also be made available under the following Secondary
# Licenses when the conditions for such availability set forth in the
# Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
# version 2 with the GNU Classpath Exception, which is available at
# https://www.gnu.org/software/classpath/license.html.
#
# SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
#
# Author: Dies Koper (dkoper@dev.java.net)
# This script reads all LogStrings.properties in the current directory and
# its subdirectories and confirms the messages in them have proper Ids.
# The results (except for messages on the exclude list) are written to a file.
require 'find'
$excl_list = Array.new
# load excluded messages list
# this list includes message keys of messages for which it has been
# confirmed that they should not have a msg id (like debug messages).
IO.foreach("./message-key-excl.txt") { |line|
$excl_list.push line.chomp if line =~ /^[\w\-].*$*/
}
hits = []
file_count = 0
puts "GlassFish Home Is: "+ARGV[0]
# traverse all files under the following root dir
Find.find(ARGV[0]) do |f|
# skip directories that store copies of property files
case File.dirname(f)
when /.*\/.svn/ then Find.prune # skip .svn dirs
when /.*\/target/ then Find.prune # skip build dirs
when /.*\/tests/ then Find.prune # skip test dirs
end
case File.basename(f)
when 'LogStrings.properties' then
file_count += 1
# print filename using OS specific path
puts "* #{f.gsub(File::SEPARATOR,
File::ALT_SEPARATOR || File::SEPARATOR)}"
# open each msg properties file and read line by line
File.open(f) do |msgfile|
msgfile.each_line { |line|
# puts "line: #{line}"
if (needs_id(msgfile, line) == true)
hits << line
puts " - no Id: #{line}"
end
}
end
end
def needs_id(file, line)
# concate multi-line message \
is_multi_line = false
while (!line.to_s.match(/.+\\\s*$/).nil?)
next_line = file.gets.lstrip
line = line.chop + next_line
is_multi_line = true
end
# puts "\tmulti-line msg: #{line}" if is_multi_line
id_req = false
case line
# id.diag....
when /^\s*[\w_\-]+\.diag\.(cause|check)\..*/
#puts "diag msg: #{line}"
# msg.key = PREFIX123: ... (colon may be escaped - LAUNHCER006)
when /^\s*[\w._\-]+\s*[^\\][=:]\s*\w+\d+\s*\\?:.*/
# puts "msg with key: #{line}"
# comment saying next message needs no id
# used in web\war-util\src\main\resources\com\sun\logging\enterprise\system\container\web\LogStrings.properties
when /^\s*[#!]no ID on .*/
#skip next message
line = file.gets
# puts "\tskip next msg: #{line}"
# comment
when /^\s*[#!].*$/
# no msg
when /^\s*$/
# msg.key = Message with no prefix
when /^([\w._\-]+\s*[^\\])[=:].*/
id_req = true unless $excl_list.include?($1)
else
puts " - unknown: #{line}"
end
id_req
end
end
puts "\nFinished."
puts "Searched #{file_count} files and found #{hits.size} messages with no Id (with #{$excl_list.size} messages excluded)"
puts "\nResults have been saved to ./msgs-with-no-ids.txt"
File.open("./msgs-with-no-ids.txt", 'w') { |f|
hits.each { |item|
f.write item
}
}