| #!/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 |
| } |
| } |