rscm 0.4.0 → 0.4.2

Sign up to get free protection for your applications and to get access to all the features.
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
+