146 lines
2.8 KiB
Ruby
Executable file
146 lines
2.8 KiB
Ruby
Executable file
#!/usr/bin/env ruby
|
|
#
|
|
# de-pkg-comment - converts pkg-comment to COMMENT
|
|
# (public domain)
|
|
#
|
|
# Usage:
|
|
# de-pkg-comment portdir ...
|
|
#
|
|
# Notes:
|
|
# - Local changes may be backed out and the previous file is renamed
|
|
# to .#* if conversion fails.
|
|
# - It requires a port have a MAINTAINER line.
|
|
# - It does not touch master/slave ports automatically; just shows
|
|
# some hints.
|
|
# - Do not commit resulted files without checking the diffs.
|
|
#
|
|
# MAINTAINER= knu@FreeBSD.org
|
|
#
|
|
# $FreeBSD$
|
|
#
|
|
|
|
begin
|
|
require 'features/ruby18'
|
|
rescue LoadError; end
|
|
|
|
if ARGV.empty?
|
|
STDERR.puts "usage: #{$0} portdir ..."
|
|
exit 64
|
|
end
|
|
|
|
def error(message)
|
|
STDERR.puts("#{$dir}: #{message}")
|
|
end
|
|
|
|
def info(message)
|
|
STDOUT.puts("#{$dir}: #{message}")
|
|
end
|
|
|
|
def backout(message)
|
|
error(message)
|
|
info("Backing out all modifications.")
|
|
system 'cvs', '-Q', 'up', '-CdP'
|
|
end
|
|
|
|
def cvs_up(*files)
|
|
system *['cvs', '-q', 'up', '-dP', *files]
|
|
end
|
|
|
|
def cvs_rm(*files)
|
|
system *['cvs', '-Q', 'rm', '-f', *files]
|
|
end
|
|
|
|
ARGV.each { |$dir|
|
|
if !File.directory?($dir)
|
|
error("Not a directory.")
|
|
next
|
|
end
|
|
|
|
Dir.chdir($dir) {
|
|
if !File.directory?('CVS')
|
|
error("Not a CVS working directory.")
|
|
next
|
|
end
|
|
|
|
info("Running cvs update")
|
|
cvs_up()
|
|
|
|
makefile = 'Makefile'
|
|
|
|
if !File.exist?(makefile)
|
|
error("No Makefile is found.")
|
|
next
|
|
end
|
|
|
|
commentfile = `make -V COMMENTFILE`.chomp
|
|
|
|
if !File.exist?(commentfile)
|
|
error("No need to convert.")
|
|
next
|
|
end
|
|
|
|
comment = nil
|
|
commentfile_defined = false
|
|
maintainer_defined = false
|
|
|
|
info("Modifying #{makefile}")
|
|
|
|
open(makefile, 'r+') { |rw|
|
|
contents = []
|
|
|
|
rw.each { |line|
|
|
contents << line
|
|
|
|
case line
|
|
when /^MAINTAINER\s*(\??=)/
|
|
maintainer_defined = true
|
|
|
|
assign = $1
|
|
|
|
if assign == '?='
|
|
info("Looks like a master port. Please check for slave ports.")
|
|
end
|
|
|
|
open(commentfile) { |f|
|
|
comment = f.gets.strip
|
|
quoted_comment = comment.gsub(/#/, '\\#').gsub(/\$/, '$$')
|
|
contents << "COMMENT#{assign}\t#{quoted_comment}\n"
|
|
}
|
|
when /^COMMENTFILE\s*([?!:]?=)/
|
|
info("COMMENTFILE is defined. Please check out and edit manually.")
|
|
commentfile_defined = true
|
|
when /^MASTERDIR\s*([?!:]?=)/
|
|
masterport = File.expand_path(`make -V MASTERDIR`.chomp)
|
|
masterport.sub!(%r".*(?:^|/)([^/]+/[^/]+)$", '\1')
|
|
|
|
info("Looks like a slave port. Please look into the master port (#{masterport}) also.")
|
|
end
|
|
}
|
|
|
|
rw.rewind
|
|
rw.puts contents
|
|
}
|
|
|
|
if !maintainer_defined
|
|
backout("No MAINTAINER line is found!")
|
|
next
|
|
end
|
|
|
|
newcomment = `make -V COMMENT`.chomp
|
|
|
|
if newcomment != comment
|
|
backout("Failed to convert!")
|
|
next
|
|
end
|
|
|
|
unless commentfile_defined
|
|
info("Removing #{commentfile}")
|
|
cvs_rm(commentfile)
|
|
end
|
|
|
|
info("Running cvs update again")
|
|
cvs_up()
|
|
|
|
info("Done.")
|
|
}
|
|
}
|