Never been to DZone Snippets before?

Snippets is a public source code repository. Easily build up your personal collection of code snippets, categorize them with tags / keywords, and share them with the world

Set common svn:externals easily (See related posts)

#!/usr/bin/env ruby
shared = 'shared' # Directorio protegido sobre el que jamás se ejecutara nada.
# Lista de directorios con elementos externos:
elementos_externos = { # 'directorio' => {'elemento_externo => 'URL del repositorio'}
  'public/images' => {'_app' => 'svn://server/rails_app/public/images/_gw'},
  'public/javascripts' => {'_app' => 'svn://server/paxx/public/gooworks/rails_app/public/javascripts/_gw'},
  'public/stylesheets' => {'_app' => 'svn://server/rails_app/public/stylesheets/_gw'},
  'vendor' => {'rails' => 'http://dev.rubyonrails.com/svn/rails/trunk'}
# 'dir' => ['ext' => 'url', 'ext2' => 'url'] <-- para varios externos en un mismo directorio
}

if ARGV[0].nil?
  puts "Especifica el directorio en el que quieres trabajar: #{$0} <directorio>"
  exit
end

max_dir_size = 0; max_ext_size = 0
elementos_externos.each do |dir, extlist|
  max_dir_size = dir.size if dir.size > max_dir_size
  extlist.each do |ext, url|
    max_ext_size = ext.size if ext.size > max_ext_size
  end
end

script_dir = Dir.pwd
tmp_file = "#{script_dir}/_svnext_temp_file"

# Esto permite usar comodines, como '*'
ARGV.each do |wd|
  if FileTest.directory?(wd) && wd.chomp('/') != 'gooworks'
    puts "".ljust(80, '=')
    puts "Trabajando en #{wd}:"
    Dir.chdir(wd)
    elementos_externos.sort.each do |dir, extlist|
      file = File.open(tmp_file, 'w') if extlist.size > 1
      extlist.sort.each do |ext, url|
        if file.nil?
          out = %x[svn ps svn:externals '#{ext} #{url}' #{dir}]
        else
          file.puts "#{ext} #{url}"
          out = 'Escribiendo archivo temporal...'
        end
        puts "Configurando #{ext.ljust(max_ext_size)}: #{out}"
      end

      unless file.nil?
        file.close
        # Ejecutamos Subversion para que lea los elementos del archivo que creamos:
        out = %x[svn ps svn:externals -F #{tmp_file} #{dir}]
        puts "Configurado (#{extlist.size} elementos): #{out}"
        File.delete(tmp_file)
      end
    end
    Dir.chdir(script_dir)
  end
end

You need to create an account or log in to post comments to this site.


Click here to browse all 4861 code snippets

Related Posts