Class: RSCM::Subversion
Overview
RSCM implementation for Subversion.
You need the svn/svnadmin executable on the PATH in order for it to work.
NOTE: On Cygwin these have to be the win32 builds of svn/svnadmin and not the Cygwin ones.
Constant Summary
Constants inherited
from Base
Base::DEFAULT_QUIET_PERIOD, Base::THIRTY_TWO_WEEKS_AGO, Base::TWO_WEEKS_AGO
Instance Attribute Summary collapse
Attributes inherited from Base
#default_options, #logger
Instance Method Summary
collapse
-
#add(relative_filename, options = {}) ⇒ Object
-
#can_create_central? ⇒ Boolean
-
#central_exists? ⇒ Boolean
-
#checked_out? ⇒ Boolean
-
#commit(message, options = {}) ⇒ Object
-
#create_central(options = {}) ⇒ Object
-
#destroy_central ⇒ Object
-
#diff(file, options = {}, &block) ⇒ Object
-
#import_central(options) ⇒ Object
-
#initialize(url = "", path = "") ⇒ Subversion
constructor
A new instance of Subversion.
-
#install_trigger(trigger_command, trigger_files_checkout_dir, options = {}) ⇒ Object
-
#label ⇒ Object
-
#move(relative_src, relative_dest, options = {}) ⇒ Object
-
#open(revision_file, options, &block) ⇒ Object
-
#repourl ⇒ Object
url pointing to the root of the repo.
-
#revisions(from_identifier, options = {}) ⇒ Object
-
#supports_trigger? ⇒ Boolean
-
#to_identifier(raw_identifier) ⇒ Object
-
#transactional? ⇒ Boolean
-
#trigger_installed?(trigger_command, trigger_files_checkout_dir, options = {}) ⇒ Boolean
-
#trigger_mechanism ⇒ Object
-
#uninstall_trigger(trigger_command, trigger_files_checkout_dir, options = {}) ⇒ Object
-
#uptodate?(identifier, options = {}) ⇒ Boolean
ensure_trailing_slash, filepath_to_nativepath, filepath_to_nativeurl, nativepath_to_filepath
Methods inherited from Base
#==, #checkout, #checkout_commandline, #checkout_dir, #checkout_dir=, #destroy_working_copy, #edit, #file, #poll_new_revisions, #rootdir, #to_yaml_properties, #update_commandline
Constructor Details
#initialize(url = "", path = "") ⇒ Subversion
Returns a new instance of Subversion.
23
24
25
26
27
|
# File 'lib/rscm/scm/subversion.rb', line 23
def initialize(url="", path="")
@url, @path = url, path
@username = ""
@password = ""
end
|
Instance Attribute Details
#password ⇒ Object
Returns the value of attribute password.
21
22
23
|
# File 'lib/rscm/scm/subversion.rb', line 21
def password
@password
end
|
#path ⇒ Object
Returns the value of attribute path.
19
20
21
|
# File 'lib/rscm/scm/subversion.rb', line 19
def path
@path
end
|
#url ⇒ Object
Returns the value of attribute url.
18
19
20
|
# File 'lib/rscm/scm/subversion.rb', line 18
def url
@url
end
|
#username ⇒ Object
Returns the value of attribute username.
20
21
22
|
# File 'lib/rscm/scm/subversion.rb', line 20
def username
@username
end
|
Instance Method Details
#add(relative_filename, options = {}) ⇒ Object
33
34
35
|
# File 'lib/rscm/scm/subversion.rb', line 33
def add(relative_filename, options={})
svn("add #{relative_filename}", options)
end
|
#can_create_central? ⇒ Boolean
78
79
80
|
# File 'lib/rscm/scm/subversion.rb', line 78
def can_create_central?
local?
end
|
#central_exists? ⇒ Boolean
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
|
# File 'lib/rscm/scm/subversion.rb', line 90
def central_exists?
if(local?)
File.exists?("#{svnrootdir}/db")
else
exists = false
cmd = "svn log #{url} -r HEAD"
execute(cmd) do |stdout|
stdout.each_line do |line|
exists = true
end
end
exists
end
end
|
#checked_out? ⇒ Boolean
183
184
185
186
187
|
# File 'lib/rscm/scm/subversion.rb', line 183
def checked_out?
rootentries = File.expand_path("#{checkout_dir}/.svn/entries")
result = File.exists?(rootentries)
result
end
|
#commit(message, options = {}) ⇒ Object
54
55
56
57
58
|
# File 'lib/rscm/scm/subversion.rb', line 54
def commit(message, options={})
svn(commit_command(message), options)
svn("update", options)
end
|
#create_central(options = {}) ⇒ Object
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
|
# File 'lib/rscm/scm/subversion.rb', line 119
def create_central(options={})
options = options.dup.merge({:dir => svnrootdir})
native_path = PathConverter.filepath_to_nativepath(svnrootdir, false)
mkdir_p(PathConverter.nativepath_to_filepath(native_path))
svnadmin("create #{native_path}", options)
if(@path && @path != "")
options = options.dup.merge({:dir => "."})
paths = @path.split("/")
paths.each_with_index do |p,i|
p = paths[0..i]
u = "#{repourl}/#{p.join('/')}"
svn("mkdir #{u} -m \"Adding directories\"", options)
end
end
end
|
#destroy_central ⇒ Object
82
83
84
85
86
87
88
|
# File 'lib/rscm/scm/subversion.rb', line 82
def destroy_central
if(File.exist?(svnrootdir) && local?)
FileUtils.rm_rf(svnrootdir)
else
raise "Cannot destroy central repository. '#{svnrootdir}' doesn't exist or central repo isn't local to this machine"
end
end
|
#diff(file, options = {}, &block) ⇒ Object
64
65
66
67
68
69
|
# File 'lib/rscm/scm/subversion.rb', line 64
def diff(file, options={}, &block)
cmd = "svn diff --revision #{file.previous_native_revision_identifier}:#{file.native_revision_identifier} \"#{url}/#{file.path}\""
execute(cmd, options) do |io|
return(yield(io))
end
end
|
#import_central(options) ⇒ Object
154
155
156
157
|
# File 'lib/rscm/scm/subversion.rb', line 154
def import_central(options)
import_cmd = "import #{url} -m \"#{options[:message]}\""
svn(import_cmd, options)
end
|
#install_trigger(trigger_command, trigger_files_checkout_dir, options = {}) ⇒ Object
136
137
138
139
140
141
142
|
# File 'lib/rscm/scm/subversion.rb', line 136
def install_trigger(trigger_command, trigger_files_checkout_dir, options={})
if (WINDOWS)
install_win_trigger(trigger_command, trigger_files_checkout_dir, options)
else
install_unix_trigger(trigger_command, trigger_files_checkout_dir, options)
end
end
|
#label ⇒ Object
60
61
62
|
# File 'lib/rscm/scm/subversion.rb', line 60
def label
local_revision_identifier.to_s
end
|
#move(relative_src, relative_dest, options = {}) ⇒ Object
37
38
39
|
# File 'lib/rscm/scm/subversion.rb', line 37
def move(relative_src, relative_dest, options={})
svn("mv #{relative_src} #{relative_dest}", options)
end
|
#open(revision_file, options, &block) ⇒ Object
71
72
73
74
75
76
|
# File 'lib/rscm/scm/subversion.rb', line 71
def open(revision_file, options, &block)
cmd = "svn cat #{url}/#{revision_file.path}@#{revision_file.native_revision_identifier}"
execute(cmd, options) do |io|
return(yield(io))
end
end
|
#repourl ⇒ Object
url pointing to the root of the repo
178
179
180
181
|
# File 'lib/rscm/scm/subversion.rb', line 178
def repourl
last = (path.nil? || path == "") ? -1 : -(path.length)-2
url[0..last]
end
|
#revisions(from_identifier, options = {}) ⇒ Object
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
|
# File 'lib/rscm/scm/subversion.rb', line 159
def revisions(from_identifier, options={})
options = {
:from_identifier => from_identifier,
:to_identifier => Time.infinity,
:relative_path => "",
:dir => Dir.pwd
}.merge(options)
checkout_dir = PathConverter.filepath_to_nativepath(@checkout_dir, false)
revisions = nil
command = "svn #{changes_command(options[:from_identifier], options[:to_identifier], options[:relative_path])}"
execute(command, options) do |stdout|
parser = SubversionLogParser.new(stdout, @url, options[:from_identifier])
revisions = parser.parse_revisions
end
revisions
end
|
#supports_trigger? ⇒ Boolean
108
109
110
111
112
113
|
# File 'lib/rscm/scm/subversion.rb', line 108
def supports_trigger?
true
end
|
#to_identifier(raw_identifier) ⇒ Object
29
30
31
|
# File 'lib/rscm/scm/subversion.rb', line 29
def to_identifier(raw_identifier)
raw_identifier.to_i
end
|
#transactional? ⇒ Boolean
41
42
43
|
# File 'lib/rscm/scm/subversion.rb', line 41
def transactional?
true
end
|
#trigger_installed?(trigger_command, trigger_files_checkout_dir, options = {}) ⇒ Boolean
148
149
150
151
152
|
# File 'lib/rscm/scm/subversion.rb', line 148
def trigger_installed?(trigger_command, trigger_files_checkout_dir, options={})
return false unless File.exist?(post_commit_file)
= LineEditor.(File.new(post_commit_file), /#{Regexp.escape(trigger_command)}/, "# ", "")
end
|
#trigger_mechanism ⇒ Object
115
116
117
|
# File 'lib/rscm/scm/subversion.rb', line 115
def trigger_mechanism
"hooks/post-commit"
end
|
#uninstall_trigger(trigger_command, trigger_files_checkout_dir, options = {}) ⇒ Object
144
145
146
|
# File 'lib/rscm/scm/subversion.rb', line 144
def uninstall_trigger(trigger_command, trigger_files_checkout_dir, options={})
File.(post_commit_file, /#{Regexp.escape(trigger_command)}/, nil)
end
|
#uptodate?(identifier, options = {}) ⇒ Boolean
45
46
47
48
49
50
51
52
|
# File 'lib/rscm/scm/subversion.rb', line 45
def uptodate?(identifier, options={})
if(!checked_out?)
false
else
rev = identifier.nil? ? head_revision_identifier(options) : identifier
local_revision_identifier(options) == rev
end
end
|