2009-07-01 8 views
5

¿Hay algún truco en la línea de comandos para que SVN agregue todos los archivos que faltan desde svn stat de forma interactiva?'svn add' interactive

Por ejemplo, algo como:

svn add --interactive 
$ new file:  file1.tmp (Add/Ignore) ? 
$ missing file: file.tmp (Remove/Ignore) ? 

EDIT:

Un scriptque podría lograr esto también funcionaría.

+1

+1 Me gustaría ver esta cosa de trabajo como 'darcs record'. – liori

Respuesta

5

escribí un pequeño script Ruby a hacer esto:

require 'fileutils' 
buffer = "" 

CACHE_DIR = File.join(ENV['HOME'], '.svn_interactive_temp') 
FileUtils.mkdir_p(CACHE_DIR) 

data = IO.popen 'svn stat' do |process| 
    while process.read(512, buffer) 
    end 
end 

def handle_file(file) 
    system("stty raw") 
    print "new file: #{file} [a]dd/[i]gnore/[s]kip? " 
    c = STDIN.getc 
    system("stty cooked") 
    exit if c == 3 
    c = c.chr 
    success = true 
    puts 
    case c 
    when 'a' 
    puts "adding the file: #{file}" 
    system "svn add #{file}" 
    when 'i' 
    puts "adding svn:ignore for #{file}" 
    cache_filename = File.join(CACHE_DIR, (1..10).map{(rand * 10).to_i}.to_s) 
    p file 
    parent = File.dirname(file) 

    system("svn propget svn:ignore #{parent} >> #{cache_filename}") 
    File.open(cache_filename, 'a') do |f| 
     f.puts(File.basename(file)) 
    end 
    system("svn propset svn:ignore -F #{cache_filename} #{parent}") 
    system("rm #{cache_filename}") 
    when 's' 
    puts "skipping: #{file}" 
    else 
    success = false 
    end 
    success 
end 

buffer.scan(/\?\s*(.*)$/).each do |file| 
    while !(handle_file(file.to_s)) 
    sleep(0.01) 
    end 
end 

Por ejemplo,

[email protected]:~/Source/stuff$ ruby ../scripts/svn_interactive.rb 
new file: test.txt [a]dd/[i]gnore/[s]kip? i 
adding svn:ignore for test.txt 
"test.txt" 
property 'svn:ignore' set on '.' 
0
  1. No conozco esta característica.
  2. No debería ser un problema implementar esto usted mismo con un poco de secuencias de comandos.
  3. interfaz La interfaz gráfica no sufre de este problema (por ejemplo, la tortuga) ...
+0

Mis habilidades de scripting están algo oxidadas, me preguntaba si alguien tenía un script así. Me gustaría evitar la GUI –

1

La siguiente línea en un shell de Unix añade todos los archivos que faltan.

svn status | grep '?' | sed 's/^.* /svn add /' | bash 
+0

El problema es que no es interactivo, ver mi respuesta. –