Class: Svn

Inherits:
Object
  • Object
show all
Defined in:
lib/svn.rb

Class Method Summary collapse

Class Method Details

.export(url, destination) ⇒ Object



23
24
25
26
27
# 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 = '') ⇒ Boolean

Returns:

  • (Boolean)


29
30
31
32
33
34
35
36
37
# 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 `git status`.scan(/^[MA]/)
        end
    end
    false
end

.latest_revisionObject



5
6
7
8
9
10
11
12
# 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 = '**/*') ⇒ Object

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



44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
# 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

.urlObject



14
15
16
17
18
19
20
21
# 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