rscm 0.3.13 → 0.3.14
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/CHANGES +6 -0
- data/README +1 -1
- data/Rakefile +1 -1
- data/lib/rscm/revision.rb +4 -8
- data/lib/rscm/revision_file.rb +14 -26
- data/lib/rscm/scm/cvs.rb +21 -19
- data/lib/rscm/scm/subversion.rb +20 -7
- metadata +2 -2
data/CHANGES
CHANGED
data/README
CHANGED
data/Rakefile
CHANGED
data/lib/rscm/revision.rb
CHANGED
@@ -142,10 +142,11 @@ module RSCM
|
|
142
142
|
self.message = file.message if file.message
|
143
143
|
end
|
144
144
|
|
145
|
-
def [] (
|
146
|
-
@files[
|
145
|
+
def [] (index)
|
146
|
+
@files[index]
|
147
147
|
end
|
148
148
|
|
149
|
+
# Iterates over all the RevisionFile objects
|
149
150
|
def each(&block)
|
150
151
|
@files.each(&block)
|
151
152
|
end
|
@@ -157,6 +158,7 @@ module RSCM
|
|
157
158
|
def length
|
158
159
|
@files.length
|
159
160
|
end
|
161
|
+
alias :size :length
|
160
162
|
|
161
163
|
def time=(t)
|
162
164
|
raise "time must be a Time object - it was a #{t.class.name} with the string value #{t}" unless t.is_a?(Time)
|
@@ -190,12 +192,6 @@ module RSCM
|
|
190
192
|
result
|
191
193
|
end
|
192
194
|
|
193
|
-
# Returns the identifier of the revision. This is the revision
|
194
|
-
# (if defined) or an UTC time if it is not natively supported by the scm.
|
195
|
-
def identifierAA
|
196
|
-
@identifier || @time
|
197
|
-
end
|
198
|
-
|
199
195
|
end
|
200
196
|
|
201
197
|
end
|
data/lib/rscm/revision_file.rb
CHANGED
@@ -9,18 +9,28 @@ module RSCM
|
|
9
9
|
ADDED = "ADDED"
|
10
10
|
MOVED = "MOVED"
|
11
11
|
|
12
|
+
# MODIFIED, DELETED, ADDED or MOVED
|
12
13
|
attr_accessor :status
|
14
|
+
|
15
|
+
# Relative path from the root of the RSCM::Base instance
|
13
16
|
attr_accessor :path
|
17
|
+
|
18
|
+
# The native SCM's previous revision for this file. For non-transactional SCMs this is different from
|
19
|
+
# the parent Revision's
|
14
20
|
attr_accessor :previous_native_revision_identifier
|
21
|
+
|
15
22
|
# The native SCM's revision for this file. For non-transactional SCMs this is different from
|
16
23
|
# the parent Revision's
|
17
24
|
attr_accessor :native_revision_identifier
|
18
25
|
|
26
|
+
# The developer who modified this file
|
19
27
|
attr_accessor :developer
|
28
|
+
|
29
|
+
# The commit message for this file
|
20
30
|
attr_accessor :message
|
31
|
+
|
21
32
|
# This is a UTC ruby time
|
22
33
|
attr_accessor :time
|
23
|
-
attr_accessor :scm
|
24
34
|
|
25
35
|
def initialize(path=nil, status=nil, developer=nil, message=nil, native_revision_identifier=nil, time=nil)
|
26
36
|
@path, @developer, @message, @native_revision_identifier, @time, @status = path, developer, message, native_revision_identifier, time, status
|
@@ -32,43 +42,21 @@ module RSCM
|
|
32
42
|
scm.open(self, &block)
|
33
43
|
end
|
34
44
|
|
45
|
+
# Yields the diff as an IO for this file
|
35
46
|
def diff(scm, &block)
|
36
47
|
scm.diff(self, &block)
|
37
48
|
end
|
38
49
|
|
50
|
+
# Accepts a visitor that must respond to +visit_file(revision_file)+
|
39
51
|
def accept(visitor)
|
40
52
|
visitor.visit_file(self)
|
41
53
|
end
|
42
54
|
|
55
|
+
# A simple string representation. Useful for debugging.
|
43
56
|
def to_s
|
44
57
|
"#{path} | #{native_revision_identifier}"
|
45
58
|
end
|
46
59
|
|
47
|
-
def developer=(developer)
|
48
|
-
raise "can't be null" if developer.nil?
|
49
|
-
@developer = developer
|
50
|
-
end
|
51
|
-
|
52
|
-
def message=(message)
|
53
|
-
raise "can't be null" if message.nil?
|
54
|
-
@message = message
|
55
|
-
end
|
56
|
-
|
57
|
-
def path=(path)
|
58
|
-
raise "can't be null" if path.nil?
|
59
|
-
@path = path
|
60
|
-
end
|
61
|
-
|
62
|
-
def native_revision_identifier=(id)
|
63
|
-
raise "can't be null" if id.nil?
|
64
|
-
@native_revision_identifier = id
|
65
|
-
end
|
66
|
-
|
67
|
-
def time=(time)
|
68
|
-
raise "time must be a Time object" unless time.is_a?(Time)
|
69
|
-
@time = time
|
70
|
-
end
|
71
|
-
|
72
60
|
def ==(other)
|
73
61
|
return false if !other.is_a?(self.class)
|
74
62
|
self.path == other.path &&
|
data/lib/rscm/scm/cvs.rb
CHANGED
@@ -121,25 +121,6 @@ module RSCM
|
|
121
121
|
"CVSROOT/loginfo"
|
122
122
|
end
|
123
123
|
|
124
|
-
def install_trigger(trigger_command, trigger_files_checkout_dir)
|
125
|
-
raise "mod can't be null or empty" if (mod.nil? || mod == "")
|
126
|
-
|
127
|
-
root_cvs = create_root_cvs(trigger_files_checkout_dir)
|
128
|
-
root_cvs.checkout
|
129
|
-
with_working_dir(trigger_files_checkout_dir) do
|
130
|
-
trigger_line = "#{mod} #{trigger_command}\n"
|
131
|
-
File.open("loginfo", File::WRONLY | File::APPEND) do |file|
|
132
|
-
file.puts(trigger_line)
|
133
|
-
end
|
134
|
-
begin
|
135
|
-
root_cvs.commit("Installed trigger for CVS module '#{mod}'")
|
136
|
-
rescue
|
137
|
-
raise "Couldn't commit the trigger back to CVS. Try to manually check out CVSROOT/loginfo, " +
|
138
|
-
"add the following line and commit it back:\n\n#{trigger_line}"
|
139
|
-
end
|
140
|
-
end
|
141
|
-
end
|
142
|
-
|
143
124
|
def trigger_installed?(trigger_command, trigger_files_checkout_dir)
|
144
125
|
loginfo_line = "#{mod} #{trigger_command}"
|
145
126
|
regex = Regexp.new(Regexp.escape(loginfo_line))
|
@@ -164,6 +145,27 @@ module RSCM
|
|
164
145
|
end
|
165
146
|
end
|
166
147
|
|
148
|
+
def install_trigger(trigger_command, trigger_files_checkout_dir)
|
149
|
+
raise "mod can't be null or empty" if (mod.nil? || mod == "")
|
150
|
+
|
151
|
+
root_cvs = create_root_cvs(trigger_files_checkout_dir)
|
152
|
+
root_cvs.checkout
|
153
|
+
with_working_dir(trigger_files_checkout_dir) do
|
154
|
+
trigger_line = "#{mod} #{trigger_command}\n"
|
155
|
+
File.open("loginfo", File::WRONLY | File::APPEND) do |file|
|
156
|
+
file.puts(trigger_line)
|
157
|
+
end
|
158
|
+
begin
|
159
|
+
root_cvs.commit("Installed trigger for CVS module '#{mod}'")
|
160
|
+
rescue
|
161
|
+
raise ["Didn't have permission to commit CVSROOT/loginfo.",
|
162
|
+
"Try to manually add the following line:",
|
163
|
+
trigger_command,
|
164
|
+
"Finally make commit the file to the repository"]
|
165
|
+
end
|
166
|
+
end
|
167
|
+
end
|
168
|
+
|
167
169
|
def uninstall_trigger(trigger_command, trigger_files_checkout_dir)
|
168
170
|
loginfo_line = "#{mod} #{trigger_command}"
|
169
171
|
regex = Regexp.new(Regexp.escape(loginfo_line))
|
data/lib/rscm/scm/subversion.rb
CHANGED
@@ -11,6 +11,7 @@ module RSCM
|
|
11
11
|
#
|
12
12
|
# NOTE: On Cygwin these have to be the win32 builds of svn/svnadmin and not the Cygwin ones.
|
13
13
|
class Subversion < Base
|
14
|
+
|
14
15
|
include FileUtils
|
15
16
|
include PathConverter
|
16
17
|
|
@@ -97,7 +98,8 @@ module RSCM
|
|
97
98
|
end
|
98
99
|
|
99
100
|
def open(revision_file, &block)
|
100
|
-
|
101
|
+
cmd = "svn cat #{url}/#{revision_file.path}@#{revision_file.native_revision_identifier}"
|
102
|
+
Better.popen(cmd) do |io|
|
101
103
|
return(yield(io))
|
102
104
|
end
|
103
105
|
end
|
@@ -242,17 +244,24 @@ module RSCM
|
|
242
244
|
end
|
243
245
|
File.chmod(0744, post_commit_file)
|
244
246
|
rescue
|
245
|
-
raise "Didn't have permission to write to #{post_commit_file}.
|
246
|
-
"Try to manually add the following line
|
247
|
-
|
247
|
+
raise ["Didn't have permission to write to #{post_commit_file}.",
|
248
|
+
"Try to manually add the following line:",
|
249
|
+
trigger_command,
|
250
|
+
"Finally make it executable with chmod g+x #{post_commit_file}"]
|
248
251
|
end
|
249
252
|
end
|
250
253
|
|
251
254
|
def install_win_trigger(trigger_command, damagecontrol_install_dir)
|
252
255
|
post_commit_exists = File.exists?(post_commit_file)
|
253
256
|
mode = post_commit_exists ? File::APPEND|File::WRONLY : File::CREAT|File::WRONLY
|
254
|
-
|
255
|
-
|
257
|
+
begin
|
258
|
+
File.open(post_commit_file, mode) do |file|
|
259
|
+
file.puts("#{trigger_command}\n" )
|
260
|
+
end
|
261
|
+
rescue
|
262
|
+
raise ["Didn't have permission to write to #{post_commit_file}.",
|
263
|
+
"Try to manually add the following line:",
|
264
|
+
trigger_command]
|
256
265
|
end
|
257
266
|
end
|
258
267
|
|
@@ -366,7 +375,11 @@ module RSCM
|
|
366
375
|
def post_commit_file
|
367
376
|
# We actualy need to use the .cmd when on cygwin. The cygwin svn post-commit
|
368
377
|
# hook is hosed. We'll be relying on native windows
|
369
|
-
|
378
|
+
if(local?)
|
379
|
+
WINDOWS ? "#{svnrootdir}/hooks/post-commit.cmd" : "#{svnrootdir}/hooks/post-commit"
|
380
|
+
else
|
381
|
+
raise "The repository is not local. Cannot install or uninstall trigger."
|
382
|
+
end
|
370
383
|
end
|
371
384
|
|
372
385
|
end
|
metadata
CHANGED