Alien-SVN
view release on metacpan or search on metacpan
src/subversion/subversion/bindings/swig/ruby/svn/commit-mailer.rb view on Meta::CPAN
% svn ls #{[@repository_uri, dir].compact.join("/")}@#{rev - 1}
INFO
end + @info.updated_dirs.collect do |dir|
" Modified: #{dir}\n"
end).join("\n")
end
def diff_info
@info.diffs.collect do |key, values|
[
key,
values.collect do |type, value|
args = []
rev = @info.revision
case type
when :added
command = "cat"
when :modified, :property_changed
command = "diff"
args.concat(["-r", "#{@info.revision - 1}:#{@info.revision}"])
when :deleted
command = "cat"
rev -= 1
when :copied
command = "cat"
else
raise "unknown diff type: #{value.type}"
end
command += " #{args.join(' ')}" unless args.empty?
link = [@repository_uri, key].compact.join("/")
line_info = "+#{value.added_line} -#{value.deleted_line}"
desc = <<-HEADER
#{CHANGED_TYPE[value.type]}: #{key} (#{line_info})
#{CHANGED_MARK[value.type] * 67}
HEADER
if add_diff?
desc << value.body
else
desc << <<-CONTENT
% svn #{command} #{link}@#{rev}
CONTENT
end
[desc, link]
end
]
end
end
def make_header(body_encoding, body_encoding_bit)
headers = []
headers << x_author
headers << x_revision
headers << x_repository
headers << x_id
headers << "MIME-Version: 1.0"
headers << "Content-Type: text/plain; charset=#{body_encoding}"
headers << "Content-Transfer-Encoding: #{body_encoding_bit}"
headers << "From: #{from}"
headers << "To: #{to.join(', ')}"
headers << "Subject: #{make_subject}"
headers << "Date: #{Time.now.rfc2822}"
headers.find_all do |header|
/\A\s*\z/ !~ header
end.join("\n")
end
def detect_project
return nil unless multi_project?
project = nil
@info.paths.each do |path, from_path,|
[path, from_path].compact.each do |target_path|
first_component = target_path.split("/", 2)[0]
project ||= first_component
return nil if project != first_component
end
end
project
end
def affected_paths(project)
paths = []
[nil, :branches_path, :tags_path].each do |target|
prefix = [project]
prefix << send(target) if target
prefix = prefix.compact.join("/")
sub_paths = @info.sub_paths(prefix)
if target.nil?
sub_paths = sub_paths.find_all do |sub_path|
sub_path == trunk_path
end
end
paths.concat(sub_paths)
end
paths.uniq
end
def make_subject
subject = ""
project = detect_project
subject << "#{@name} " if @name
revision_info = "r#{@info.revision}"
if show_path?
_affected_paths = affected_paths(project)
unless _affected_paths.empty?
revision_info = "(#{_affected_paths.join(',')}) #{revision_info}"
end
end
if project
subject << "[#{project} #{revision_info}] "
else
subject << "#{revision_info}: "
end
subject << @info.log.lstrip.to_a.first.to_s.chomp
NKF.nkf("-WM", subject)
end
( run in 1.740 second using v1.01-cache-2.11-cpan-5b529ec07f3 )