lib/subversion_extensions.rb in svn-command-0.0.3 vs lib/subversion_extensions.rb in svn-command-0.0.4
- old
+ new
@@ -1,29 +1,63 @@
# Tested by: ../test/subversion_extensions_test.rb
+require_gem 'colored'
+require 'colored'
+
class Array
def to_regexp_char_class
"[#{join('')}]"
end
end
+class String
+ def colorize_svn_status_lines
+ if Subversion.color
+ self.gsub(/^ *\?/) { $&.yellow.bold}.
+ gsub(/^ *A/) { $&.green.bold}.
+ gsub(/^ *M/) { $&.green.bold}.
+ gsub(/^ *C/) { $&.red.bold}.
+ gsub(/^ *~/) { $&.red.bold}.
+ gsub(/^ *!/) { $&.red.bold}
+ else
+ self
+ end
+ end
+end
+
+
# These are methods used by the SvnCommand for filtering and whatever else it needs...
# It could probably be moved into SvnCommand, but I thought it might be good to at least make it *possible* to use them apart from SvnCommand.
# Rename to Subversion::Filters ? Then would each_unadded fit?
module Subversion
module Extensions
Interesting_status_flags = ["M", "A", "D", "?"]
Uninteresting_status_flags = ["X", "W"]
Status_flags = Interesting_status_flags | Uninteresting_status_flags
def self.status_lines_filter(input)
- (input || "").reject { |line|
+ input = (input || "").reject { |line|
line =~ /^$/ # Blank lines
}.reject { |line|
- line =~ /^Performing status on external item at/
- }.reject { |line|
line =~ /^#{Uninteresting_status_flags.to_regexp_char_class}/
}.join
+
+ before_externals, *externals = input.split(/^Performing status on external item at.*$/)
+
+ before_externals ||= ''
+ before_externals = before_externals.strip.colorize_svn_status_lines + "\n" if before_externals != ""
+
+ externals = externals.join
+ externals =
+ '_'*40 + ' externals '.underline + '_'*40 + "\n" +
+ externals.reject { |line|
+ line =~ /^Performing status on external item at/
+ }.reject { |line|
+ line =~ /^$/ # Blank lines
+ }.join.strip.colorize_svn_status_lines + "\n" if externals != ""
+
+ before_externals +
+ externals
end
def self.update_lines_filter(input)
input.reject { |line|
line =~ /^$/ # Blank lines