rscm 0.4.0 → 0.4.2

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 CHANGED
@@ -1,5 +1,19 @@
1
1
  = RSCM Changelog
2
2
 
3
+ == 0.4.2
4
+
5
+ This release fixes a number of subtle bugs related to command lines and logging
6
+
7
+ * Subversion no longer adds 1 to the from_identifier when getting revisions (avoid stderr and exitcode -1)
8
+ * Improved tests and documentation for CommandLine class
9
+ * stdout and stderr options are now optional
10
+ * Fixed incorrect path escaping on win32
11
+ * Fixed broken CVS trigger mechanism
12
+
13
+ == Version 0.4.1
14
+
15
+ * Minor subversion improvements. Fixes #1 [aslak]
16
+
3
17
  == Version 0.4.0
4
18
 
5
19
  This release of RSCM modifies mosts API methods to take an options Hash (or alternatively, setting
data/README CHANGED
@@ -1,4 +1,4 @@
1
- = RSCM - Ruby Source Control Management (0.4.0)
1
+ = RSCM - Ruby Source Control Management (0.4.2)
2
2
 
3
3
  RSCM is to SCM what DBI/JDBC/ODBC are to databases - an SCM-independent API for accessing different SCMs. The high level features are roughly:
4
4
 
data/lib/rscm/base.rb CHANGED
@@ -54,12 +54,12 @@ module RSCM
54
54
  end
55
55
 
56
56
  # Destroys the working copy
57
- def destroy_working_copy
57
+ def destroy_working_copy(options={})
58
58
  FileUtils.rm_rf(checkout_dir) unless checkout_dir.nil?
59
59
  end
60
60
 
61
61
  # Whether or not the SCM represented by this instance exists.
62
- def central_exists?
62
+ def central_exists?(options={})
63
63
  # The default implementation assumes yes - override if it can be
64
64
  # determined programmatically.
65
65
  true
@@ -1,11 +1,6 @@
1
+ require 'rscm/platform'
2
+
1
3
  module RSCM
2
- # Utility for running a +cmd+ in a +dir+ with a specified +env+.
3
- # If a block is passed, the standard out stream is passed to that block (and returns)
4
- # the result from the block. Otherwise, if a block is not passed, standard output
5
- # is redirected to +stdout_file+. The standard error stream is always redirected
6
- # to +stderr_file+. Note that both +stdout_file+ and +stderr_file+ must always
7
- # be specified with non-nil values, as both of them will always have the command lines
8
- # written to them.
9
4
  module CommandLine
10
5
  class OptionError < StandardError; end
11
6
  class ExecutionError < StandardError
@@ -15,35 +10,74 @@ module RSCM
15
10
  "\ndir : #{@dir}\n" +
16
11
  "command : #{@cmd}\n" +
17
12
  "exitstatus: #{@exitstatus}\n" +
18
- "stderr : #{@stderr}\n"
13
+ "STDERR TAIL START\n#{@stderr}\nSTDERR TAIL END\n"
19
14
  end
20
15
  end
21
16
 
17
+ # Executes +cmd+.
18
+ # If the +:stdout+ and +:stderr+ options are specified, a line consisting
19
+ # of a prompt (including +cmd+) will be appended to the respective output streams will be appended
20
+ # to those files, followed by the output itself. Example:
21
+ #
22
+ # CommandLine.execute("echo hello world", {:stdout => "stdout.log", :stderr => "stderr.log"})
23
+ #
24
+ # will result in the following being written to stdout.log:
25
+ #
26
+ # /Users/aslakhellesoy/scm/buildpatterns/repos/damagecontrol/trunk aslakhellesoy$ echo hello world
27
+ # hello world
28
+ #
29
+ # -and to stderr.log:
30
+ # /Users/aslakhellesoy/scm/buildpatterns/repos/damagecontrol/trunk aslakhellesoy$ echo hello world
31
+ #
32
+ # If a block is passed, the stdout io will be yielded to it (as with IO.popen). In this case the output
33
+ # will not be written to the stdout file (even if it's specified):
34
+ #
35
+ # /Users/aslakhellesoy/scm/buildpatterns/repos/damagecontrol/trunk aslakhellesoy$ echo hello world
36
+ # [output captured and therefore not logged]
37
+ #
38
+ # If the exitstatus of the command is different from the value specified by the +:exitstatus+ option
39
+ # (which defaults to 0) then an ExecutionError is raised, its message containing the last 400 bytes of stderr
40
+ # (provided +:stderr+ was specified)
41
+ #
42
+ # You can also specify the +:dir+ option, which will cause the command to be executed in that directory
43
+ # (default is current directory).
44
+ #
45
+ # You can also specify a hash of environment variables in +:env+, which will add additional environment variables
46
+ # to the default environment.
47
+ #
48
+ # Finally, you can specify several commands within one by separating them with '&&' (as you would in a shell).
49
+ # This will result in several lines to be appended to the log (as if you had executed the commands separately).
50
+ #
51
+ # See the unit test for more examples.
22
52
  def execute(cmd, options={}, &proc)
53
+ raise "Can't have newline in cmd" if cmd =~ /\n/
23
54
  options = {
24
55
  :dir => Dir.pwd,
25
56
  :env => {},
26
57
  :exitstatus => 0
27
58
  }.merge(options)
28
59
 
29
- raise OptionError.new(":stdout can't be nil") if options[:stdout].nil?
30
- raise OptionError.new(":stderr can't be nil") if options[:stderr].nil?
31
- options[:stdout] = File.expand_path(options[:stdout])
32
- options[:stderr] = File.expand_path(options[:stderr])
60
+ options[:stdout] = File.expand_path(options[:stdout]) if options[:stdout]
61
+ options[:stderr] = File.expand_path(options[:stderr]) if options[:stderr]
33
62
 
34
63
  commands = cmd.split("&&").collect{|c| c.strip}
35
64
  Dir.chdir(options[:dir]) do
36
- redirected_cmd = commands.collect do |c|
37
- redirection = block_given? ? "#{c} 2>> #{options[:stderr]}" : "#{c} >> #{options[:stdout]} 2>> #{options[:stderr]}"
65
+ stdout_opt = options[:stdout] ? ">> #{options[:stdout]}" : ""
66
+ stderr_opt = options[:stderr] ? "2>> #{options[:stderr]}" : ""
67
+ capture_info_command = block_given? ? "echo [output captured and therefore not logged] >> #{options[:stdout]} && " : ""
68
+
69
+ full_cmd = commands.collect do |c|
70
+ escaped_command = c.gsub(/"/, "\\\"").gsub(/</, "\\<")
71
+ stdout_prompt_command = options[:stdout] ? "echo #{RSCM::Platform.prompt} #{escaped_command} >> #{options[:stdout]} && " : ""
72
+ stderr_prompt_command = options[:stderr] ? "echo #{RSCM::Platform.prompt} #{escaped_command} >> #{options[:stderr]} && " : ""
73
+ redirected_command = block_given? ? "#{c} #{stderr_opt}" : "#{c} #{stdout_opt} #{stderr_opt}"
38
74
 
39
- "echo #{RSCM::Platform.prompt} #{c} >> #{options[:stdout]} && " +
40
- "echo #{RSCM::Platform.prompt} #{c} >> #{options[:stderr]} && " +
41
- redirection
75
+ stdout_prompt_command + capture_info_command + stderr_prompt_command + redirected_command
42
76
  end.join(" && ")
43
77
 
44
78
  options[:env].each{|k,v| ENV[k]=v}
45
79
  begin
46
- IO.popen(redirected_cmd) do |io|
80
+ IO.popen(full_cmd) do |io|
47
81
  if(block_given?)
48
82
  return(proc.call(io))
49
83
  else
@@ -52,9 +86,20 @@ module RSCM
52
86
  end
53
87
  rescue Errno::ENOENT => e
54
88
  File.open(options[:stderr], "a") {|io| io.write(e.message)}
89
+ raise ExecutionError.new(cmd, options[:dir], nil, e.message)
55
90
  ensure
56
91
  if($?.exitstatus != options[:exitstatus])
57
- error_message = File.exist?(options[:stderr]) ? File.read(options[:stderr]) : "#{options[:stderr]} doesn't exist"
92
+ error_message = "#{options[:stderr]} doesn't exist"
93
+ if options[:stderr] && File.exist?(options[:stderr])
94
+ File.open(options[:stderr]) do |errio|
95
+ begin
96
+ errio.seek(-800, IO::SEEK_END)
97
+ rescue Errno::EINVAL
98
+ # ignore - it just means we didn't have 400 bytes.
99
+ end
100
+ error_message = errio.read
101
+ end
102
+ end
58
103
  raise ExecutionError.new(cmd, options[:dir], $?.exitstatus, error_message)
59
104
  end
60
105
  end
@@ -11,17 +11,15 @@ module RSCM
11
11
  return nil if path.nil?
12
12
  path = File.expand_path(path)
13
13
  if(WIN32)
14
- path.gsub(/\//, "\\")
14
+ escaped ? path.gsub(/\//, "\\\\\\\\") : path.gsub(/\//, "\\")
15
15
  elsif(CYGWIN)
16
- cmd = "cygpath --windows #{path}"
17
- Better.popen(cmd) do |io|
18
- cygpath = io.read.chomp
19
- escaped ? cygpath.gsub(/\\/, "\\\\\\\\") : cygpath
20
- end
16
+ cygpath = `cygpath --windows #{path}`.chomp
17
+ escaped ? cygpath.gsub(/\\/, "\\\\\\\\") : cygpath
21
18
  else
22
19
  path
23
20
  end
24
21
  end
22
+ module_function :filepath_to_nativepath
25
23
 
26
24
  def filepath_to_nativeurl(path)
27
25
  return nil if path.nil?
@@ -32,6 +30,7 @@ module RSCM
32
30
  "file://#{File.expand_path(path)}"
33
31
  end
34
32
  end
33
+ module_function :filepath_to_nativeurl
35
34
 
36
35
  def nativepath_to_filepath(path)
37
36
  return nil if path.nil?
@@ -40,14 +39,12 @@ module RSCM
40
39
  path.gsub(/\//, "\\")
41
40
  elsif(CYGWIN)
42
41
  path = path.gsub(/\\/, "/")
43
- cmd = "cygpath --unix #{path}"
44
- Better.popen(cmd) do |io|
45
- io.read.chomp
46
- end
42
+ `cygpath --unix #{path}`.chomp
47
43
  else
48
44
  path
49
45
  end
50
46
  end
47
+ module_function :nativepath_to_filepath
51
48
 
52
49
  def ensure_trailing_slash(url)
53
50
  return nil if url.nil?
@@ -57,10 +54,7 @@ module RSCM
57
54
  url
58
55
  end
59
56
  end
60
-
61
- module_function :filepath_to_nativepath
62
- module_function :filepath_to_nativeurl
63
- module_function :nativepath_to_filepath
64
57
  module_function :ensure_trailing_slash
58
+
65
59
  end
66
60
  end
data/lib/rscm/platform.rb CHANGED
@@ -7,8 +7,8 @@ module RSCM
7
7
  return "powerpc-darwin" if target_os.downcase =~ /darwin/
8
8
  return "mswin32" if target_os.downcase =~ /32/
9
9
  return "cygwin" if target_os.downcase =~ /cyg/
10
- # TODO: distinguish between different binary formats like ELF and a.out (or whatever it's called)
11
- return "linux"
10
+ return "freebsd" if target_os.downcase =~ /freebsd/
11
+ raise "Unsupported OS: #{target_os}"
12
12
  end
13
13
  module_function :family
14
14
 
@@ -22,7 +22,13 @@ module RSCM
22
22
  @stream, @stgloc, @tag, @config_spec = stream, stgloc, tag, config_spec
23
23
  end
24
24
 
25
- def revisions(from_identifier, to_identifier=Time.infinity, relative_path=nil)
25
+ def revisions(from_identifier, options={})
26
+ options = {
27
+ :from_identifier => from_identifier,
28
+ :to_identifier => Time.infinity,
29
+ :relative_path => nil
30
+ }.merge(options)
31
+
26
32
  checkout unless checked_out?
27
33
  rules = load_rules
28
34
  vob = vob(rules[0])
@@ -35,7 +41,7 @@ module RSCM
35
41
  with_working_dir(checkout_dir) do
36
42
  since = (from_identifier + 1).strftime(TIME_FORMAT)
37
43
  cmd = "cleartool lshistory -recurse -nco -since #{since} -fmt \"#{LOG_FORMAT}\" -pname #{vob}"
38
- Better.popen(cmd) do |io|
44
+ execute(cmd, options) do |io|
39
45
  # escape all quotes, except the one at the beginning and end. this is a bit ugly...
40
46
  raw_yaml = io.read
41
47
  fixed_yaml = raw_yaml.gsub(/^ message: \"/, " message: #{MAGIC_TOKEN}")
@@ -67,29 +73,29 @@ module RSCM
67
73
  !Dir["#{checkout_dir}/*"].empty?
68
74
  end
69
75
 
70
- def destroy_working_copy
71
- Better.popen("cleartool rmview #{checkout_dir}") do |io|
76
+ def destroy_working_copy(options={})
77
+ execute("cleartool rmview #{checkout_dir}", options) do |io|
72
78
  io.read
73
79
  end
74
80
  end
75
81
 
76
- def import_central(dir, message)
77
- Better.popen("clearfsimport -recurse -nsetevent #{dir} #{checkout_dir}") do |io|
82
+ def import_central(options={})
83
+ execute("clearfsimport -recurse -nsetevent #{options[:dir]} #{checkout_dir}", options) do |io|
78
84
  io.read
79
85
  end
80
86
  end
81
87
 
82
88
  ## Non-RSCM API methods
83
89
 
84
- def mkview!
90
+ def mkview!(options={})
85
91
  # Create view (working copy)
86
92
  mkview_cmd = "cleartool mkview -snapshot -stream #{@stream} -stgloc #{@stgloc} -tag #{@tag} #{@checkout_dir}"
87
- Better.popen(mkview_cmd) do |io|
93
+ execute(mkview_cmd, options) do |io|
88
94
  puts io.read
89
95
  end
90
96
  end
91
97
 
92
- def update_load_rules!
98
+ def update_load_rules!(options={})
93
99
  Dir.chdir(checkout_dir) do
94
100
  # tempfile is broken on windows (!!)
95
101
  cfg_spec_file = "__rscm.cfgspec"
@@ -104,10 +110,10 @@ module RSCM
104
110
  end
105
111
  end
106
112
 
107
- def catcs
113
+ def catcs(options={})
108
114
  Dir.chdir(checkout_dir) do
109
115
  catcs_cmd = "cleartool catcs"
110
- Better.popen(catcs_cmd) do |io|
116
+ execute(catcs_cmd, options) do |io|
111
117
  yield io
112
118
  end
113
119
  end
@@ -136,13 +142,9 @@ module RSCM
136
142
 
137
143
  protected
138
144
 
139
- def checkout_silent(to_identifier=nil)
145
+ def checkout_silent(to_identifier, options={}, &proc)
140
146
  if(checked_out?)
141
- with_working_dir(checkout_dir) do
142
- Better.popen("cleartool update .") do |io|
143
- io.read
144
- end
145
- end
147
+ execute("cleartool update .", options)
146
148
  else
147
149
  mkview!
148
150
 
@@ -118,7 +118,7 @@ module RSCM
118
118
 
119
119
  def create_central(options={})
120
120
  options = options.dup.merge({:dir => svnrootdir})
121
- native_path = PathConverter.filepath_to_nativepath(svnrootdir, true)
121
+ native_path = PathConverter.filepath_to_nativepath(svnrootdir, false)
122
122
  mkdir_p(PathConverter.nativepath_to_filepath(native_path))
123
123
  svnadmin("create #{native_path}", options)
124
124
  if(@path && @path != "")
@@ -168,7 +168,7 @@ module RSCM
168
168
  revisions = nil
169
169
  command = "svn #{changes_command(options[:from_identifier], options[:to_identifier], options[:relative_path])}"
170
170
  execute(command, options) do |stdout|
171
- parser = SubversionLogParser.new(stdout, @url)
171
+ parser = SubversionLogParser.new(stdout, @url, options[:from_identifier])
172
172
  revisions = parser.parse_revisions
173
173
  end
174
174
  revisions
@@ -305,7 +305,7 @@ module RSCM
305
305
  def login_options
306
306
  result = ""
307
307
  u = @username ? @username.strip : ""
308
- p = @password ? @password.strip : "
308
+ p = @password ? @password.strip : ""
309
309
  result << "--username #{u} " unless u == ""
310
310
  result << "--password #{p} " unless p == ""
311
311
  result
@@ -315,9 +315,9 @@ module RSCM
315
315
  # The inclusive start
316
316
  from = nil
317
317
  if(from_identifier.is_a?(Time))
318
- from = svndate(from_identifier + 1)
318
+ from = svndate(from_identifier)
319
319
  elsif(from_identifier.is_a?(Numeric))
320
- from = from_identifier + 1
320
+ from = from_identifier
321
321
  elsif(!from_identifier.nil?)
322
322
  raise "from_identifier must be Numeric, Time or nil. Was: #{from_identifier} (#{from_identifier.class.name})"
323
323
  end
@@ -350,7 +350,7 @@ module RSCM
350
350
  end
351
351
 
352
352
  def commit_command(message)
353
- "commit -m \"#{message}\""
353
+ "commit #{login_options} --force-log -m \"#{message}\""
354
354
  end
355
355
 
356
356
  def local?
@@ -4,9 +4,10 @@ require 'rscm/revision'
4
4
  module RSCM
5
5
 
6
6
  class SubversionLogParser
7
- def initialize(io, url)
7
+ def initialize(io, url, exclude_below=nil)
8
8
  @io = io
9
9
  @revision_parser = SubversionLogEntryParser.new(url)
10
+ @exclude_below = exclude_below
10
11
  end
11
12
 
12
13
  def parse_revisions(&line_proc)
@@ -16,7 +17,15 @@ module RSCM
16
17
  while(!@io.eof?)
17
18
  revision = @revision_parser.parse(@io, &line_proc)
18
19
  if(revision)
19
- revisions.add(revision)
20
+ # Filter out the lower bound to avoid inclusiveness of the lower bound (see contract)
21
+ # We're doing this instead of increasing the from_identifer with 1, since that causes an error.
22
+ exclude = false
23
+ if(@exclude_below.is_a? Time)
24
+ exclude = revision.time <= @exclude_below
25
+ elsif(@exclude_below.is_a? Numeric)
26
+ exclude = revision.identifier <= @exclude_below
27
+ end
28
+ revisions.add(revision) unless exclude
20
29
  end
21
30
  end
22
31
  revisions
@@ -38,6 +47,7 @@ module RSCM
38
47
  end
39
48
 
40
49
  def relative_path(url, repo_path)
50
+ repo_path = repo_path.chomp
41
51
  url_tokens = url.split('/')
42
52
  repo_path_tokens = repo_path.split('/')
43
53
 
@@ -125,7 +135,6 @@ module RSCM
125
135
  return if rp.nil?
126
136
  file.path = rp
127
137
 
128
-
129
138
  # if(@path.length+1 == path_from_root.length)
130
139
  # file.path = path_from_root[@path.length+1..-1]
131
140
  # else
@@ -0,0 +1,39 @@
1
+ ***************
2
+ *** 38,43 ****
3
+ end
4
+
5
+ def relative_path(url, repo_path)
6
+ url_tokens = url.split('/')
7
+ repo_path_tokens = repo_path.split('/')
8
+
9
+ --- 38,45 ----
10
+ end
11
+
12
+ def relative_path(url, repo_path)
13
+ + repo_path.chomp!
14
+ +
15
+ url_tokens = url.split('/')
16
+ repo_path_tokens = repo_path.split('/')
17
+
18
+ ***************
19
+ *** 50,60 ****
20
+ end
21
+ max_similar -= 1
22
+ end
23
+ - if(max_similar == 0)
24
+ - nil
25
+ - else
26
+ - repo_path_tokens[max_similar..-1].join("/")
27
+ - end
28
+ end
29
+
30
+ protected
31
+ --- 52,59 ----
32
+ end
33
+ max_similar -= 1
34
+ end
35
+ +
36
+ + repo_path_tokens[max_similar..-1].join("/")
37
+ end
38
+
39
+ protected
data/lib/rscm/version.rb CHANGED
@@ -2,7 +2,7 @@ module RSCM
2
2
  module VERSION
3
3
  MAJOR = 0
4
4
  MINOR = 4
5
- TINY = 0
5
+ TINY = 2
6
6
 
7
7
  STRING = [MAJOR, MINOR, TINY].join('.')
8
8
 
@@ -0,0 +1,38 @@
1
+ require 'test/unit'
2
+ require 'rscm/tempdir'
3
+ require 'rscm/command_line'
4
+
5
+ module RSCM
6
+
7
+ class DifftoolTest < Test::Unit::TestCase
8
+ def setup
9
+ @dir = RSCM.new_temp_dir("test_should_write_to_stdout")
10
+ @stdout = "#{@dir}/stdout"
11
+ @stderr = "#{@dir}/stderr"
12
+ @prompt = "#{File.expand_path(@dir)} #{Platform.user}$"
13
+ File.delete @stdout if File.exist? @stdout
14
+ File.delete @stderr if File.exist? @stderr
15
+ end
16
+
17
+ def test_should_write_to_both_when_both_streams_specified_and_no_block
18
+ CommandLine.execute("echo \"<hello\" && echo world", {:dir => @dir, :stdout => @stdout, :stderr => @stderr})
19
+ assert_equal("#{@prompt} echo \"<hello\"\n<hello\n#{@prompt} echo world\nworld\n", File.open(@stdout).read)
20
+ assert_equal("#{@prompt} echo \"<hello\"\n#{@prompt} echo world\n", File.open(@stderr).read)
21
+ end
22
+
23
+ def test_should_not_write_to_stdout_when_no_stdout_specified
24
+ CommandLine.execute("echo hello", {:dir => @dir, :stderr => @stderr})
25
+ assert(!File.exist?(@stdout))
26
+ assert_equal("#{@prompt} echo hello\n", File.open(@stderr).read)
27
+ end
28
+
29
+ def test_should_only_write_command_to_stdout_when_block_specified
30
+ CommandLine.execute("echo hello", {:dir => @dir, :stdout => @stdout, :stderr => @stderr}) do |io|
31
+ assert_equal("hello\n", io.read)
32
+ end
33
+ assert_equal("#{@prompt} echo hello\n[output captured and therefore not logged]\n", File.open(@stdout).read)
34
+ assert_equal("#{@prompt} echo hello\n", File.open(@stderr).read)
35
+ end
36
+
37
+ end
38
+ end
@@ -82,7 +82,7 @@ module RSCM
82
82
 
83
83
  # 6
84
84
  initial_revisions = scm.revisions(nil)
85
- assert_equal("imported\nsources", initial_revisions[0].message)
85
+ assert_equal("imported sources", initial_revisions[0].message)
86
86
  # Subversion seems to add a revision with message "Added directories"
87
87
  #assert_equal(1, initial_revisions.length)
88
88
  assert_equal(4, initial_revisions[0].length)
@@ -99,7 +99,7 @@ module RSCM
99
99
  assert(other_scm.uptodate?(initial_revisions.latest.identifier))
100
100
 
101
101
  sleep(1)
102
- scm.commit("changed\nsomething")
102
+ scm.commit("changed something")
103
103
 
104
104
  # 13
105
105
  revisions = scm.revisions(initial_revisions.latest.identifier)
@@ -109,7 +109,7 @@ module RSCM
109
109
  revision = revisions[0]
110
110
  assert_equal(2, revision.length, "Actual files:\n" + revision.collect{|file| file.path}.join("\n"))
111
111
 
112
- assert_equal("changed\nsomething", revision.message)
112
+ assert_equal("changed something", revision.message)
113
113
 
114
114
  # why is this nil when running as the dcontrol user on codehaus? --jon
115
115
  #assert_equal(username, revision.developer)
@@ -179,8 +179,8 @@ module RSCM
179
179
  @scm = scm
180
180
 
181
181
  # Verify that install/uninstall works
182
- touch = WINDOWS ? PathConverter.filepath_to_nativepath(File.dirname(__FILE__) + "../../../bin/touch.exe", false) : "touch"
183
- trigger_command = "#{touch} " + PathConverter.filepath_to_nativepath(trigger_proof, false)
182
+ touch = WINDOWS ? PathConverter.filepath_to_nativepath(File.dirname(__FILE__) + "../../../bin/touch.exe", true) : "touch"
183
+ trigger_command = "#{touch} " + PathConverter.filepath_to_nativepath(trigger_proof, true)
184
184
  trigger_files_checkout_dir = File.expand_path("#{checkout_dir}/../trigger")
185
185
  (1..3).each do |i|
186
186
  assert(!scm.trigger_installed?(trigger_command, trigger_files_checkout_dir))
@@ -333,7 +333,7 @@ EOF
333
333
  cp_r(path, dirname)
334
334
  todelete = Dir.glob("#{import_copy_dir}/**/.svn")
335
335
  rm_rf(todelete)
336
- scm.import_central :dir => import_copy_dir, :message => "imported\nsources"
336
+ scm.import_central :dir => import_copy_dir, :message => "imported sources"
337
337
  end
338
338
 
339
339
  def change_file(scm, file)
@@ -13,7 +13,7 @@ module RSCM
13
13
  if(WIN32)
14
14
  p1 = "c:\\scm\\damagecontrol"
15
15
  n1 = p1
16
- n2 = p1
16
+ n2 = "c:\\\\scm\\\\damagecontrol"
17
17
  elsif(CYGWIN)
18
18
  p1 = "/cygdrive/c/scm/damagecontrol"
19
19
  n1 = "c:\\scm\\damagecontrol"
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
- rubygems_version: 0.8.10
2
+ rubygems_version: 0.8.11
3
3
  specification_version: 1
4
4
  name: rscm
5
5
  version: !ruby/object:Gem::Version
6
- version: 0.4.0
7
- date: 2006-01-02
8
- summary: "RSCM - Ruby Source Control Management"
6
+ version: 0.4.2
7
+ date: 2006-02-27 00:00:00 -06:00
8
+ summary: RSCM - Ruby Source Control Management
9
9
  require_paths:
10
- - lib
10
+ - lib
11
11
  email: dev@damagecontrol.codehaus.org
12
12
  homepage: http://rscm.rubyforge.org
13
13
  rubyforge_project: rscm
@@ -18,109 +18,117 @@ bindir: bin
18
18
  has_rdoc: true
19
19
  required_ruby_version: !ruby/object:Gem::Version::Requirement
20
20
  requirements:
21
- -
22
- - ">"
23
- - !ruby/object:Gem::Version
24
- version: 0.0.0
21
+ - - ">"
22
+ - !ruby/object:Gem::Version
23
+ version: 0.0.0
25
24
  version:
26
25
  platform: ruby
26
+ signing_key:
27
+ cert_chain:
27
28
  authors:
28
- - Aslak Hellesoy
29
+ - Aslak Hellesoy
29
30
  files:
30
- - CHANGES
31
- - Rakefile
32
- - README
33
- - lib/rscm
34
- - lib/rscm.rb
35
- - lib/rscm/abstract_log_parser.rb
36
- - lib/rscm/base.rb
37
- - lib/rscm/command_line.rb
38
- - lib/rscm/difftool.rb
39
- - lib/rscm/historic_file.rb
40
- - lib/rscm/line_editor.rb
41
- - lib/rscm/mockit.rb
42
- - lib/rscm/parser.rb
43
- - lib/rscm/path_converter.rb
44
- - lib/rscm/platform.rb
45
- - lib/rscm/revision.rb
46
- - lib/rscm/revision_file.rb
47
- - lib/rscm/revision_poller.rb
48
- - lib/rscm/scm
49
- - lib/rscm/tempdir.rb
50
- - lib/rscm/time_ext.rb
51
- - lib/rscm/version.rb
52
- - lib/rscm/scm/clearcase.rb
53
- - lib/rscm/scm/cvs.rb
54
- - lib/rscm/scm/cvs_log_parser.rb
55
- - lib/rscm/scm/darcs.rb
56
- - lib/rscm/scm/darcs_log_parser.rb
57
- - lib/rscm/scm/monotone.rb
58
- - lib/rscm/scm/monotone_log_parser.rb
59
- - lib/rscm/scm/mooky.rb
60
- - lib/rscm/scm/perforce.rb
61
- - lib/rscm/scm/star_team.rb
62
- - lib/rscm/scm/subversion.rb
63
- - lib/rscm/scm/subversion_log_parser.rb
64
- - bin/diff.exe
65
- - bin/Diff_StdDisclaimer.html
66
- - bin/touch.exe
67
- - test/rscm
68
- - test/rscm/apply_label_scm_tests.rb
69
- - test/rscm/difftool_test.rb
70
- - test/rscm/file_after_edit
71
- - test/rscm/file_ext.rb
72
- - test/rscm/file_to_edit
73
- - test/rscm/generic_scm_tests.rb
74
- - test/rscm/line_editor_test.rb
75
- - test/rscm/mockit_test.rb
76
- - test/rscm/parser_test.rb
77
- - test/rscm/path_converter_test.rb
78
- - test/rscm/revision_fixture.rb
79
- - test/rscm/revision_test.rb
80
- - test/rscm/revisions.yaml
81
- - test/rscm/scm
82
- - test/rscm/scm/cvs-dataforge.log
83
- - test/rscm/scm/cvs-test.log
84
- - test/rscm/scm/cvs_log_parser_test.rb
85
- - test/rscm/scm/cvs_test.rb
86
- - test/rscm/scm/darcs_log_parser_test.rb
87
- - test/rscm/scm/darcs_test.rb
88
- - test/rscm/scm/keys
89
- - test/rscm/scm/monotone_log_parser_test.rb
90
- - test/rscm/scm/monotone_test.rb
91
- - test/rscm/scm/mooky_test.rb
92
- - test/rscm/scm/p4client_test.rb
93
- - test/rscm/scm/perforce_test.rb
94
- - test/rscm/scm/star_team.rb
95
- - test/rscm/scm/subversion_log_parser_test.rb
96
- - test/rscm/scm/subversion_test.rb
97
- - test/rscm/scm/svn-cargo.log
98
- - test/rscm/scm/svn-growl.log
99
- - test/rscm/scm/svn-growl2.log
100
- - test/rscm/scm/svn-proxytoys.log
101
- - testproject/damagecontrolled
102
- - testproject/damagecontrolled/build.xml
103
- - testproject/damagecontrolled/project.xml
104
- - testproject/damagecontrolled/src
105
- - testproject/damagecontrolled/src/java
106
- - testproject/damagecontrolled/src/test
107
- - testproject/damagecontrolled/src/java/com
108
- - testproject/damagecontrolled/src/java/com/thoughtworks
109
- - testproject/damagecontrolled/src/java/com/thoughtworks/damagecontrolled
110
- - testproject/damagecontrolled/src/java/com/thoughtworks/damagecontrolled/Thingy.java
111
- - testproject/damagecontrolled/src/test/com
112
- - testproject/damagecontrolled/src/test/com/thoughtworks
113
- - testproject/damagecontrolled/src/test/com/thoughtworks/damagecontrolled
114
- - testproject/damagecontrolled/src/test/com/thoughtworks/damagecontrolled/ThingyTestCase.java
115
- - ext/rscm.jar
31
+ - CHANGES
32
+ - Rakefile
33
+ - README
34
+ - lib/rscm
35
+ - lib/rscm.rb
36
+ - lib/rscm/abstract_log_parser.rb
37
+ - lib/rscm/base.rb
38
+ - lib/rscm/command_line.rb
39
+ - lib/rscm/difftool.rb
40
+ - lib/rscm/historic_file.rb
41
+ - lib/rscm/line_editor.rb
42
+ - lib/rscm/mockit.rb
43
+ - lib/rscm/parser.rb
44
+ - lib/rscm/path_converter.rb
45
+ - lib/rscm/platform.rb
46
+ - lib/rscm/revision.rb
47
+ - lib/rscm/revision_file.rb
48
+ - lib/rscm/revision_poller.rb
49
+ - lib/rscm/scm
50
+ - lib/rscm/tempdir.rb
51
+ - lib/rscm/time_ext.rb
52
+ - lib/rscm/version.rb
53
+ - lib/rscm/scm/clearcase.rb
54
+ - lib/rscm/scm/cvs.rb
55
+ - lib/rscm/scm/cvs_log_parser.rb
56
+ - lib/rscm/scm/darcs.rb
57
+ - lib/rscm/scm/darcs_log_parser.rb
58
+ - lib/rscm/scm/monotone.rb
59
+ - lib/rscm/scm/monotone_log_parser.rb
60
+ - lib/rscm/scm/mooky.rb
61
+ - lib/rscm/scm/perforce.rb
62
+ - lib/rscm/scm/star_team.rb
63
+ - lib/rscm/scm/subversion.rb
64
+ - lib/rscm/scm/subversion_log_parser.rb
65
+ - lib/rscm/scm/subversion_log_parser.rb.rej
66
+ - bin/diff.exe
67
+ - bin/Diff_StdDisclaimer.html
68
+ - bin/touch.exe
69
+ - test/rscm
70
+ - test/rscm/apply_label_scm_tests.rb
71
+ - test/rscm/command_line_test.rb
72
+ - test/rscm/difftool_test.rb
73
+ - test/rscm/file_after_edit
74
+ - test/rscm/file_ext.rb
75
+ - test/rscm/file_to_edit
76
+ - test/rscm/generic_scm_tests.rb
77
+ - test/rscm/line_editor_test.rb
78
+ - test/rscm/mockit_test.rb
79
+ - test/rscm/parser_test.rb
80
+ - test/rscm/path_converter_test.rb
81
+ - test/rscm/revision_fixture.rb
82
+ - test/rscm/revision_test.rb
83
+ - test/rscm/revisions.yaml
84
+ - test/rscm/scm
85
+ - test/rscm/scm/cvs-dataforge.log
86
+ - test/rscm/scm/cvs-test.log
87
+ - test/rscm/scm/cvs_log_parser_test.rb
88
+ - test/rscm/scm/cvs_test.rb
89
+ - test/rscm/scm/darcs_log_parser_test.rb
90
+ - test/rscm/scm/darcs_test.rb
91
+ - test/rscm/scm/keys
92
+ - test/rscm/scm/monotone_log_parser_test.rb
93
+ - test/rscm/scm/monotone_test.rb
94
+ - test/rscm/scm/mooky_test.rb
95
+ - test/rscm/scm/p4client_test.rb
96
+ - test/rscm/scm/perforce_test.rb
97
+ - test/rscm/scm/star_team.rb
98
+ - test/rscm/scm/subversion_log_parser_test.rb
99
+ - test/rscm/scm/subversion_test.rb
100
+ - test/rscm/scm/svn-cargo.log
101
+ - test/rscm/scm/svn-growl.log
102
+ - test/rscm/scm/svn-growl2.log
103
+ - test/rscm/scm/svn-proxytoys.log
104
+ - testproject/damagecontrolled
105
+ - testproject/damagecontrolled/build.xml
106
+ - testproject/damagecontrolled/project.xml
107
+ - testproject/damagecontrolled/src
108
+ - testproject/damagecontrolled/src/java
109
+ - testproject/damagecontrolled/src/test
110
+ - testproject/damagecontrolled/src/java/com
111
+ - testproject/damagecontrolled/src/java/com/thoughtworks
112
+ - testproject/damagecontrolled/src/java/com/thoughtworks/damagecontrolled
113
+ - testproject/damagecontrolled/src/java/com/thoughtworks/damagecontrolled/Thingy.java
114
+ - testproject/damagecontrolled/src/test/com
115
+ - testproject/damagecontrolled/src/test/com/thoughtworks
116
+ - testproject/damagecontrolled/src/test/com/thoughtworks/damagecontrolled
117
+ - testproject/damagecontrolled/src/test/com/thoughtworks/damagecontrolled/ThingyTestCase.java
118
+ - ext/rscm.jar
116
119
  test_files: []
120
+
117
121
  rdoc_options:
118
- - "--line-numbers"
119
- - "--inline-source"
122
+ - --line-numbers
123
+ - --inline-source
120
124
  extra_rdoc_files:
121
- - README
122
- - CHANGES
125
+ - README
126
+ - CHANGES
123
127
  executables: []
128
+
124
129
  extensions: []
130
+
125
131
  requirements: []
126
- dependencies: []
132
+
133
+ dependencies: []
134
+