class Svn

Public Class Methods

export(url, destination) click to toggle source
# File lib/svn.rb, line 23
def self.export url, destination
        if(!File.exists?(destination.chomp('@')))
                `svn export #{url} #{destination}`
        end
end
has_changes?(directory='') click to toggle source
# File lib/svn.rb, line 29
    def self.has_changes? directory=''
    directory=Dir.pwd if directory.length==0
    Dir.chdir(directory) do
        if(File.exists?('.svn'))
            return true if `svn status`.scan(/^[MA]/).length>0
        end
    end
    false
end
latest_revision() click to toggle source
# File lib/svn.rb, line 5
def self.latest_revision
    if(Dir.exists?(".svn"))
          `svn info`.scan(/Last Changed Rev: ([\d]+)/).each{|m|
            return m.first.to_s
          }
        end
        "0"
end
publish(source_dir, destination, source_glob='**/*') click to toggle source

publish a directory to a new subversion path source_dir is the directory with the files to be published destination is the new subversion path URL source_glob is a string or array of glob directives to specify files in source_dir to be publish source_glob defaults to '*/' to publish all files in the source_dir

# File lib/svn.rb, line 44
def self.publish source_dir, destination, source_glob='**/*'

        output = "\n"
        raise "Svn.publish: destination #{destination} already exists" if(`svn info #{destination} 2>&1`.include?('Revision:'))

        # create subversion directory
        output = output + "svn mkdir #{destination} --parents --message mkdir_for_publishing"
        if(!`svn mkdir #{destination} --parents --message mkdir_for_publishing`.include?('Committed'))
                raise "failure 'svn mkdir #{destination} --parents --message mkdir_for_publishing'"
        end

        files=nil
        Dir.chdir(source_dir) do
                files=FileList.new(source_glob).to_a
        end
        output = output + "\nfiles: #{files}.to_s"

        pwd=Dir.pwd
        Dir.mktmpdir{|dir|

                # checkout new subversion directory
                output = output + "\nsvn checkout #{destination} #{dir}/to_publish_checkout"
                if(!`svn checkout #{destination} #{dir}/to_publish_checkout`.include?('Checked out'))
                        raise "failure 'svn checkout #{destination} #{dir}/to_publish_checkout'"
                end

                # copy files into the checkout out subversion directory to_publish
                raise "#{dir}/to_publish_checkout does not exist" if(!File.exists?("#{dir}/to_publish_checkout"))
                Dir.chdir("#{dir}/to_publish_checkout") do
                        File.open('add.txt','w'){|add_file|

                                files.each{|f|
                                        fdir=File.dirname(f)
                                        FileUtils.mkdir_p(fdir) if(fdir.length > 0 && !File.exists?(fdir))
                                        FileUtils.cp("#{source_dir}/#{f}","#{f}")
                                        add_file.puts f
                                }
                                add_file.close
                        }

                        output = output + "\nsvn add --parents --targets add.txt 2>&1"
        `svn add --parents --targets add.txt 2>&1`
                        commit_output = `svn commit -m"add" 2>&1`
                        output = output + "\n#{commit_output}"
                        if(!commit_output.include?("Committed"))
                                raise "failure 'svn commit -m'added files''"
                        end
                end
                
                #begin
                FileUtils.rm_r "#{dir}/to_publish_checkout"
                output
        }
end
url() click to toggle source
# File lib/svn.rb, line 14
def self.url
        if(Dir.exists?(".svn"))
          `svn info`.scan(/URL: ([:\/\.\-\d\w]+)/).each{|m|
            return m.first.to_s
          }
        end
        ''
end