update a working copy and all externals in parallel
If you have an app in subversion with many externals, it may take a bit too long to update it, as updates happen one after another.
This bit of script updates the app and each external in parallel, making it oh so much faster.
(note: if you add an external or change an external property in another way, you'll need to run the standard svn up once)
This bit of script updates the app and each external in parallel, making it oh so much faster.
#!/usr/local/bin/ruby puts( ( `svn pl -R`.scan(/\S.*'(.*)':\n((?: .*\n)+)/)\ .inject({}) { |h, (d, p)| h[d] = p.strip.split(/\s+/); h }\ .select { |d, ps| ps.include? 'svn:externals' }\ .map { |xd, ps| [xd, `svn pg svn:externals #{xd}`] }\ .map { |xd, exts| exts.strip.split(/\s*\n/).map { |l| xd + '/' + l.split(/\s+/).first } }\ .inject { |a, b| a + b }\ .map { |d| "cd #{d} && svn up 2>&1" } \ << 'svn up . --ignore-externals 2>&1' )\ .map { |cmd| [cmd, Thread.new { `#{cmd}` }] }\ .map { |cmd, thread| "#{cmd}\n#{thread.value}" }.join("\n") )
(note: if you add an external or change an external property in another way, you'll need to run the standard svn up once)