class Piston::Commands::Convert
Public Class Methods
detailed_help()
click to toggle source
# File lib/piston/commands/convert.rb, line 70 def self.detailed_help <<EOF usage: convert [DIR [...]] Converts folders which have the svn:externals property set to Piston managed folders. EOF end
help()
click to toggle source
# File lib/piston/commands/convert.rb, line 66 def self.help "Converts existing svn:externals into Piston managed folders" end
Public Instance Methods
run()
click to toggle source
# File lib/piston/commands/convert.rb, line 8 def run if args.empty? then svn(:propget, '--recursive', 'svn:externals').each_line do |line| next unless line =~ /^([^ ]+)\s-\s/ args << $1 end end return logging_stream.puts("No svn:externals defined in this folder or any of it's subfolders") if args.empty? args.each do |dir| externals = svn(:propget, 'svn:externals', dir) next skip_no_externals(dir) if externals.chomp.empty? operations = Array.new externals.each_line do |external| external.chomp! next if external.empty? next skip_no_match(external) unless external =~ /^([^ ]+)\s+(?:-r\s*(\d+)\s+)?(.*)$/ local, revision, repos = $1, $2, $3 lock = true if revision local_dir = File.join(dir, local) if File.exists?(local_dir) raise Piston::CommandError, "#{local_dir.inspect} is not a directory" unless File.directory?(local_dir) status = svn(:status, local_dir) raise Piston::CommandError, "#{local_dir.inspect} has local modifications:\n#{status}\nYour must revert or commit before trying again." unless status.empty? info = YAML::load(svn(:info, local_dir)) revision = info['Last Changed Rev'] unless revision FileUtils.rm_rf(local_dir) end operations << [local_dir, revision, repos, lock] end operations.each do |local_dir, revision, repos, lock| logging_stream.puts "Importing '#{repos}' to #{local_dir} (-r #{revision || 'HEAD'}#{' locked' if lock})" import = Piston::Commands::Import.new([repos, local_dir], {}) import.revision = revision import.verbose, import.quiet, import.logging_stream = self.verbose, self.quiet, self.logging_stream import.lock = lock import.run logging_stream.puts end end svn :propdel, 'svn:externals', *args logging_stream.puts "Done converting existing svn:externals to Piston" end
skip_no_externals(dir)
click to toggle source
# File lib/piston/commands/convert.rb, line 58 def skip_no_externals(dir) logging_stream.puts "Skipping '#{dir}' - no svn:externals definition" end
skip_no_match(external)
click to toggle source
# File lib/piston/commands/convert.rb, line 62 def skip_no_match(external) logging_stream.puts "#{external.inspect} did not match Regexp" end