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)
Thank you for the snippet, it's very useful and short.