svn-command 0.0.4 → 0.0.5
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/lib/subversion_extensions.rb +1 -1
- data/lib/svn_command.rb +16 -5
- data/test/svn_command_test.rb +51 -18
- metadata +1 -1
@@ -46,7 +46,7 @@ module Subversion
|
|
46
46
|
before_externals ||= ''
|
47
47
|
before_externals = before_externals.strip.colorize_svn_status_lines + "\n" if before_externals != ""
|
48
48
|
|
49
|
-
externals = externals.join
|
49
|
+
externals = externals.join.strip
|
50
50
|
externals =
|
51
51
|
'_'*40 + ' externals '.underline + '_'*40 + "\n" +
|
52
52
|
externals.reject { |line|
|
data/lib/svn_command.rb
CHANGED
@@ -241,7 +241,7 @@ module Subversion
|
|
241
241
|
when nil
|
242
242
|
puts "You are using svn-command, a replacement/wrapper for the standard svn command."
|
243
243
|
puts "svn-command is installed at: #{$0}"
|
244
|
-
puts "
|
244
|
+
puts "Use the full path to bypass this wrapper: #{Subversion.executable}"
|
245
245
|
puts
|
246
246
|
puts Subversion.help(subcommand).gsub(<<End, '')
|
247
247
|
|
@@ -402,16 +402,23 @@ End
|
|
402
402
|
puts( ('-'*100).green )
|
403
403
|
puts "What do you want to do with '#{file.white.underline}'?".white.bold
|
404
404
|
begin
|
405
|
+
if !File.exist?(file)
|
406
|
+
raise "#{file} doesn't seem to exist -- even though it was reported by svn status"
|
407
|
+
end
|
405
408
|
if File.file?(file)
|
409
|
+
puts "File contents:"
|
406
410
|
# Only show the first x bytes so that we don't accidentally dump the contens of some 20 GB log file to screen...
|
407
|
-
|
411
|
+
contents = File.read(file, 3000) || ''
|
412
|
+
print contents
|
413
|
+
puts if contents[-1] && contents[-1].chr != "\n" # Make sure we end with a newline character
|
414
|
+
puts "..." if contents.length >= 3000 # So they know that there may be more to the file than what's shown
|
408
415
|
elsif File.directory?(file)
|
409
416
|
puts "Directory contains:"
|
410
417
|
Dir.new(file).reject {|f| ['.','..'].include? f}.each do |f|
|
411
418
|
puts f
|
412
419
|
end
|
413
420
|
else
|
414
|
-
raise "#{file} is not a file or directory -- what *is* it
|
421
|
+
raise "#{file} is not a file or directory -- what *is* it then???"
|
415
422
|
end
|
416
423
|
end
|
417
424
|
print(
|
@@ -434,9 +441,13 @@ End
|
|
434
441
|
when 'd'
|
435
442
|
puts
|
436
443
|
|
437
|
-
print "Are you pretty much *SURE* you want to 'rm -rf #{file}'? (y)es, (n)o > "
|
438
444
|
response = ""
|
439
|
-
|
445
|
+
if File.directory?(file)
|
446
|
+
print "Are you pretty much *SURE* you want to 'rm -rf #{file}'? (y)es, (n)o > "
|
447
|
+
response = $stdin.getc.chr while !['y', 'n', "\n"].include?(begin response.downcase!; response end)
|
448
|
+
else
|
449
|
+
response = "y"
|
450
|
+
end
|
440
451
|
|
441
452
|
if response == 'y'
|
442
453
|
print "\nDeleting... "
|
data/test/svn_command_test.rb
CHANGED
@@ -44,6 +44,13 @@ class ArgEscapingTest < BaseSvnCommandTest
|
|
44
44
|
# Don't worry, this'll never happen, because the shell will expand the * *before* it gets to SvnCommand. But if you *did* sneak in an asterisk to SvnCommand.execute somehow, this is what would happen...
|
45
45
|
SvnCommand.execute("add dir/* --non-recursive")
|
46
46
|
assert_equal "svn add --non-recursive 'dir/*'", Subversion.executed.join
|
47
|
+
# Actually, I lied... The * will *not* be expanded if there are no matching files. But that seems like a bash/shell problem, not our concern. Demo:
|
48
|
+
# > mkdir foo
|
49
|
+
# > echo foo/*
|
50
|
+
# foo/*
|
51
|
+
# > touch foo/file
|
52
|
+
# > echo foo/*
|
53
|
+
# foo/file
|
47
54
|
end
|
48
55
|
def test_multiline
|
49
56
|
SvnCommand.execute(args = "commit -m 'This is a
|
@@ -185,21 +192,30 @@ end
|
|
185
192
|
# Custom subcommands
|
186
193
|
|
187
194
|
#-----------------------------------------------------------------------------------------------------------------------------
|
195
|
+
|
196
|
+
# Notes about this test:
|
197
|
+
# If you start seeing errors like this:
|
198
|
+
# NoMethodError: undefined method `chr' for nil:NilClass
|
199
|
+
# coming from one of the $stdin.getc.chr lines, it means that you didn't feed it enough simulated input! It was expectin to get
|
200
|
+
# another character from stdin but you didn't supply one!
|
201
|
+
|
188
202
|
class SvnEachUnaddedTest < BaseSvnCommandTest
|
189
|
-
def
|
190
|
-
super
|
203
|
+
def stub_status_1
|
191
204
|
Subversion.stubs(:status).returns("
|
192
205
|
M gemables/calculator/test/calculator_test.rb
|
193
206
|
X gemables/calculator/tasks/shared
|
194
|
-
? gemables/calculator/lib/
|
207
|
+
? gemables/calculator/lib/unused.rb
|
195
208
|
")
|
209
|
+
end
|
210
|
+
def setup
|
211
|
+
super
|
196
212
|
FileUtils.mkdir_p('gemables/calculator/lib/')
|
197
|
-
|
198
|
-
|
199
|
-
|
213
|
+
# file = 'gemables/calculator/lib/useless_directory'
|
214
|
+
# FileUtils.rmdir(file) if File.exist?(file)
|
215
|
+
File.open(@filename = 'gemables/calculator/lib/unused.rb', 'w') { |file| file.puts "line 1 of unused.rb" }
|
200
216
|
end
|
201
217
|
def teardown
|
202
|
-
file = 'gemables/calculator/lib/
|
218
|
+
file = 'gemables/calculator/lib/unused.rb'
|
203
219
|
FileUtils.rm(file) if File.exist?(file)
|
204
220
|
FileUtils.rmdir('gemables/calculator/lib/')
|
205
221
|
FileUtils.rmdir('gemables/calculator/')
|
@@ -207,47 +223,64 @@ X gemables/calculator/tasks/shared
|
|
207
223
|
end
|
208
224
|
|
209
225
|
def test_add
|
226
|
+
stub_status_1
|
210
227
|
output = simulate_input('a') do
|
211
228
|
capture_output { SvnCommand.execute('each_unadded dir') }
|
212
229
|
end
|
213
|
-
assert_match /What do you want to do with .*
|
230
|
+
assert_match /What do you want to do with .*unused\.rb/, output
|
214
231
|
assert_match /Adding/, output
|
215
|
-
assert_equal "svn add gemables/calculator/lib/
|
232
|
+
assert_equal "svn add gemables/calculator/lib/unused.rb", Subversion.executed.join
|
216
233
|
end
|
217
234
|
def test_ignore
|
235
|
+
stub_status_1
|
218
236
|
output = simulate_input('i') do
|
219
237
|
capture_output { SvnCommand.execute('each_unadded dir') }
|
220
238
|
end
|
221
|
-
assert_match /What do you want to do with .*
|
239
|
+
assert_match /What do you want to do with .*unused\.rb/, output
|
222
240
|
assert_match /Ignoring/, output
|
223
241
|
assert_equal [
|
224
242
|
"svn propget svn:ignore gemables/calculator/lib",
|
225
|
-
"svn propset svn:ignore '
|
243
|
+
"svn propset svn:ignore 'unused.rb' gemables/calculator/lib"
|
226
244
|
], Subversion.executed
|
227
245
|
end
|
228
246
|
def test_preview_is_now_automatic
|
247
|
+
stub_status_1
|
229
248
|
output = simulate_input(
|
230
249
|
#"p" + # Preview
|
250
|
+
"\n" + # Blank line to do nothing (and exit loop)
|
231
251
|
"\n" # Blank line to do nothing (and exit loop)
|
232
252
|
) do
|
233
253
|
capture_output { SvnCommand.execute('each_unadded dir') }
|
234
254
|
end
|
235
|
-
assert_match /What do you want to do with .*
|
236
|
-
assert_match "line 1 of
|
255
|
+
assert_match /What do you want to do with .*unused\.rb/, output
|
256
|
+
assert_match "line 1 of unused.rb".to_re, output
|
237
257
|
end
|
238
258
|
def test_delete
|
259
|
+
Subversion.stubs(:status).returns("
|
260
|
+
M gemables/calculator/test/calculator_test.rb
|
261
|
+
X gemables/calculator/tasks/shared
|
262
|
+
? gemables/calculator/lib/unused.rb
|
263
|
+
? gemables/calculator/lib/useless_directory
|
264
|
+
")
|
265
|
+
FileUtils.mkdir_p(@dirname = 'gemables/calculator/lib/useless_directory')
|
266
|
+
File.open( 'gemables/calculator/lib/useless_directory/foo', 'w') { |file| file.puts "line 1 of foo" }
|
267
|
+
|
268
|
+
assert File.exist?( @dirname )
|
239
269
|
assert File.exist?( @filename )
|
240
270
|
output = simulate_input(
|
241
271
|
'd' + # Delete
|
242
|
-
|
272
|
+
# (The file doesn't require confirmation.)
|
273
|
+
'd' + # Delete
|
274
|
+
'y' # Yes I'm sure (The non-empty directory does.)
|
243
275
|
) do
|
244
276
|
capture_output { SvnCommand.execute('each_unadded dir') }
|
245
277
|
end
|
246
|
-
assert_match /What do you want to do with .*
|
247
|
-
assert_match
|
248
|
-
assert_match /
|
249
|
-
|
278
|
+
assert_match /What do you want to do with .*unused\.rb/, output
|
279
|
+
assert_match /What do you want to do with .*useless_directory/, output
|
280
|
+
assert_match /Are you .*SURE/, output
|
281
|
+
assert_match /Deleting.*Deleting/m, output
|
250
282
|
assert !File.exist?( @filename )
|
283
|
+
assert !File.exist?( @dirname )
|
251
284
|
end
|
252
285
|
end #class
|
253
286
|
|
metadata
CHANGED
@@ -3,7 +3,7 @@ rubygems_version: 0.8.11
|
|
3
3
|
specification_version: 1
|
4
4
|
name: svn-command
|
5
5
|
version: !ruby/object:Gem::Version
|
6
|
-
version: 0.0.
|
6
|
+
version: 0.0.5
|
7
7
|
date: 2007-03-15 00:00:00 -07:00
|
8
8
|
summary: A nifty wrapper command for Subversion's command-line svn client
|
9
9
|
require_paths:
|