openmind ☃   March 08, 2009  ☃  Rake + git: Upload Changed Files  (, , )

I’m working on a consulting project where I need to scp only changed or new files to a remote server. With git-ls-files and rake, this is pretty easy:

edit Sun Apr 5 22:54:33 CDT 2009 — better still (threaded):

#!/usr/bin/env ruby

if ARGV.length < 1
    puts "usage $0 <files>"
    exit
end

threads = []


ARGV.each do |a|
    threads << Thread.new(a) do |mya|
        p = a.split('/')
        pp = (p.size > 1) ? p.slice(0,(p.size-1)) : p
        ex = "scp -r #{a} user@box:~/top_level_dir/#{pp.join('/')}"
        puts ex
        system ex
    end
end

threads.each { |aThread|  aThread.join }

edit Mon Mar 23 22:02:34 CDT 2009 — this one is better:

#!/usr/bin/env ruby

if ARGV.length < 1
    puts "usage $0 <files>"
    exit
end

ARGV.each do |a|
    p = a.split('/')
    pp = (p.size > 1) ? p.slice(0,(p.size-1)) : p
    ex = "scp -r #{a} user@box:~/top_level_dir/#{pp.join('/')}"
    system ex
end

The old (crappy) one:

 task :default do
  new = `git ls-files -m -o -x '*.swp'`
  new.split.each do |file|
    puts file
    puts("cd /wwwdir; /usr/bin/scp -r \"#{file}\" user@box:/#{file}")
    system("cd /wwwdir; /usr/bin/scp -r \"#{file}\" user@box:/#{file}")
  end
end

blog comments powered by Disqus