aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--railties/CHANGELOG2
-rw-r--r--railties/lib/rails_generator/commands.rb42
-rw-r--r--railties/lib/rails_generator/options.rb1
3 files changed, 42 insertions, 3 deletions
diff --git a/railties/CHANGELOG b/railties/CHANGELOG
index 6ceb17c842..81de077c39 100644
--- a/railties/CHANGELOG
+++ b/railties/CHANGELOG
@@ -1,5 +1,7 @@
*SVN*
+* Added -c/--svn option to the generator that'll add new files and remove destroyed files using svn add/revert/remove as appropriate #2064 [kevin.clark@gmail.com]
+
* Added -c/--charset option to WEBrick controller, so you can specify a default charset (which without changes is UTF-8) #2084 [wejn@box.cz]
* Make the default stats task extendable by modifying the STATS_DIRECTORIES constant
diff --git a/railties/lib/rails_generator/commands.rb b/railties/lib/rails_generator/commands.rb
index b851c6e70b..9b8ca01ad2 100644
--- a/railties/lib/rails_generator/commands.rb
+++ b/railties/lib/rails_generator/commands.rb
@@ -202,6 +202,9 @@ module Rails
if file_options[:chmod]
FileUtils.chmod(file_options[:chmod], destination)
end
+
+ # Optionally add file to subversion
+ system("svn add #{destination}") if options[:svn]
end
# Generate a file for a Rails application using an ERuby template.
@@ -246,6 +249,9 @@ module Rails
else
logger.create relative_path
FileUtils.mkdir_p(path) unless options[:pretend]
+
+ # Optionally add file to subversion
+ system("svn add #{path}") if options[:svn]
end
end
@@ -294,11 +300,26 @@ end_message
# manifest and attempt to completely erase the results of each action.
class Destroy < RewindBase
# Remove a file if it exists and is a file.
- def file(relative_source, relative_destination, options = {})
+ def file(relative_source, relative_destination, file_options = {})
destination = destination_path(relative_destination)
if File.exists?(destination)
logger.rm relative_destination
- FileUtils.rm(destination) unless options[:pretend]
+ unless options[:pretend]
+ if options[:svn]
+ # If the file has been marked to be added
+ # but has not yet been checked in, revert and elete
+ if options[:svn][relative_destination]
+ system("svn revert #{destination}")
+ FileUtils.rm(destination)
+ else
+ # If the directory is not in the status list, it
+ # has no modifications so we can simply remove it
+ system("svn rm #{destination}")
+ end
+ else
+ FileUtils.rm(destination)
+ end
+ end
else
logger.missing relative_destination
return
@@ -319,7 +340,22 @@ end_message
if File.exists?(path)
if Dir[File.join(path, '*')].empty?
logger.rmdir partial
- FileUtils.rmdir(path) unless options[:pretend]
+ unless options[:pretend]
+ if options[:svn]
+ # If the directory has been marked to be added
+ # but has not yet been checked in, revert and elete
+ if options[:svn][relative_path]
+ system("svn revert #{path}")
+ FileUtils.rmdir(path)
+ else
+ # If the directory is not in the status list, it
+ # has no modifications so we can simply remove it
+ system("svn rm #{path}")
+ end
+ else
+ FileUtils.rmdir(path)
+ end
+ end
else
logger.notempty partial
end
diff --git a/railties/lib/rails_generator/options.rb b/railties/lib/rails_generator/options.rb
index 0872503389..5a0aa9f59c 100644
--- a/railties/lib/rails_generator/options.rb
+++ b/railties/lib/rails_generator/options.rb
@@ -127,6 +127,7 @@ module Rails
opt.on('-q', '--quiet', 'Suppress normal output.') { |options[:quiet]| }
opt.on('-t', '--backtrace', 'Debugging: show backtrace on errors.') { |options[:backtrace]| }
opt.on('-h', '--help', 'Show this help message.') { |options[:help]| }
+ opt.on('-c', '--svn', 'Modify files with subversion. (Note: svn must be in path)') { options[:svn] = Hash[*`svn status`.collect { |e| e.chop.split.reverse unless e.chop.split.size != 2 }.flatten] }
end
end