# -*- coding: utf-8; mode: ruby -*- task :default do puts "Edit #{__FILE__} to add system tasks." end desc "Edit sake configuration file" task :edit do system "e #{__FILE__}" end namespace :update do desc "Update all source trees in this directory." task :all Dir["*"].sort.each do |dir| next unless File.directory?(dir) if File.directory? File.join(dir, '.git', 'svn') method, command = 'git-svn', 'git svn rebase' elsif File.directory? File.join(dir, '.git', 'refs', 'remotes') method, command = 'git', 'git pull' elsif File.directory? File.join(dir, '.svn') method, command = 'Subversion', 'svn update' elsif File.directory? File.join(dir, 'CVS') method, command = 'CVS', 'cvs update' elsif File.directory? File.join(dir, '_darcs') method, command = 'Darcs', 'darcs pull' else method, command = nil, nil end if method desc "Update '#{dir}' using #{method}." task dir do puts puts "------------------------------------" puts "Updating '#{dir}' using #{method}..." Dir.chdir(dir) { system command } end task :all => dir end end end namespace :externals do desc "Compute the metadata for all source trees in this directory." task :export do Dir["*"].sort.each do |dir| next unless File.directory?(dir) if File.directory? File.join(dir, '.git', 'svn') method = 'git-svn' source = Dir.chdir(dir) do `git svn info`.grep(/^Repository Root: /)[0].sub(/^Repository Root: /, '').chomp end elsif File.directory? File.join(dir, '.git', 'refs', 'remotes') method = 'git' source = Dir.chdir(dir) do `git remote show origin`.grep(/^\s*URL: /)[0].sub(/^\s*URL: /, '').chomp end elsif File.directory? File.join(dir, '.svn') method = 'Subversion' source = Dir.chdir(dir) do `svn info`.grep(/^(Repository Root|Racine du dépôt ): /)[0].sub(/^(Repository Root|Racine du dépôt ): /, '').chomp end elsif File.directory? File.join(dir, 'CVS') method = 'CVS' source = IO.read(File.join(dir, 'CVS', 'Root')).chomp else method, source = nil, nil end if method puts <<"EOD" - directory: #{dir} method: #{method} source: #{source} EOD end end end end