rorsvnprep 0.0.1
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/README +50 -0
- data/bin/rorsvnprep +142 -0
- data/lib/rorsvnprep.rb +101 -0
- data/test/rorsvnprep_test.rb +11 -0
- metadata +64 -0
data/README
ADDED
@@ -0,0 +1,50 @@
|
|
1
|
+
Ruby on Rails Subversion Prep Tool
|
2
|
+
===============================================================================
|
3
|
+
README rorsvnprep
|
4
|
+
|
5
|
+
This gem provides some aids for starting new Rails projects that will be
|
6
|
+
managed with the subversion SCM system. The command line utility provides will
|
7
|
+
create a new project, perform initial modifications and even the initial
|
8
|
+
subversion specific actions to get your project under subversion management
|
9
|
+
quickly and with a minimum of fuss.
|
10
|
+
|
11
|
+
This gem provides a simple command-line tool that handles everything:
|
12
|
+
|
13
|
+
rorsvnprep
|
14
|
+
|
15
|
+
It is recommended that you create an alias for this command to save you on
|
16
|
+
typing. On most systems you can alias rorsvnprep to rsp without interfering
|
17
|
+
with anything else, but double-check on your own system before deciding on an
|
18
|
+
alias.
|
19
|
+
|
20
|
+
================
|
21
|
+
Using rorsvnprep
|
22
|
+
================
|
23
|
+
|
24
|
+
The rorsvnprep command can accept a number of command-line parameters that
|
25
|
+
determine its behavior. At the very minimum you need to supply it with a
|
26
|
+
project name, just like you would the rails command. Under the hood rorsvnprep
|
27
|
+
actually calls the rails command and then performs some basic preparations.
|
28
|
+
|
29
|
+
If all you provide is the project name then rorsvnprep simply generates
|
30
|
+
.cvsignore files for your project as described later and trims a few extraneous
|
31
|
+
directories and files. If, however, you also provide a repository URI via the
|
32
|
+
'--svn [repos]' switch; then rorsvnprep will actually perform an initial import
|
33
|
+
of your project and perform svn propset calls in place of using .cvsignore
|
34
|
+
files. You may supply a password to rorsvnprep to further automate things, if
|
35
|
+
you haven't setup shared-key authentication, via the '--password [pass]'
|
36
|
+
switch.
|
37
|
+
|
38
|
+
Assuming you supply nothing else, rorsvnprep will attempt to import your
|
39
|
+
project to '/<projectname>/trunk' within the supplied svn repository. However,
|
40
|
+
you can change this behavior by supplying an alternate location via the
|
41
|
+
'--rpath [path]' switch. When finished importing and setting up your project
|
42
|
+
rorsvnprep will leave you with a good working copy to begin development with.
|
43
|
+
|
44
|
+
-------------------
|
45
|
+
Command-Line Syntax
|
46
|
+
-------------------
|
47
|
+
|
48
|
+
rorsvnprep projectname [--svn svn://example.org/path/to/repos]
|
49
|
+
[--password pass]
|
50
|
+
[--rpath /custom/trunk]
|
data/bin/rorsvnprep
ADDED
@@ -0,0 +1,142 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
#
|
3
|
+
# = Ruby on Rails Subversion Prep Tool
|
4
|
+
#
|
5
|
+
# This script creates a new Rails application and prepares it for import into
|
6
|
+
# subversion. It takes a number of command line arguments that specify things
|
7
|
+
# like application name, repository location and other details to make the
|
8
|
+
# whole process as streamlined as possible. The more you give the script the
|
9
|
+
# more it will handle for you automatically.
|
10
|
+
#
|
11
|
+
# Author:: James W. Thompson, II
|
12
|
+
# Copyright:: Copyright (c) 2007. James W. Thompson, II
|
13
|
+
# License:: Licensed under an MIT style license
|
14
|
+
#
|
15
|
+
# == Command-Line Syntax
|
16
|
+
#
|
17
|
+
# <tt><b>ruby rorsvnprep.rb</b> <em>example svn://server/path/to/repos</em></tt>
|
18
|
+
#
|
19
|
+
# The command creates a new rails project called <em>example</em>, performs a
|
20
|
+
# variety of actions in preparation for an initial subversion import and then
|
21
|
+
# imports the project to the repository provided. The script then checks out
|
22
|
+
# the project and updates various svn:ignore properties before recommitting the
|
23
|
+
# project and exiting.
|
24
|
+
#
|
25
|
+
# The script assumes you want your project stored in <em>projectname</em>/trunk
|
26
|
+
# within the repository you provide, eventually this will become adjustable via
|
27
|
+
# the command-line.
|
28
|
+
#
|
29
|
+
# == Effects
|
30
|
+
#
|
31
|
+
# * Renames <em>config/database.yml</em> to <em>config/database.yml.sample</em>
|
32
|
+
# * Deletes extraneous files and directories
|
33
|
+
# * <tt><em>doc/README_FOR_APP</em></tt>
|
34
|
+
# * <tt><em>README</em></tt>
|
35
|
+
# * <tt><em>log/*</em></tt>
|
36
|
+
# * <tt><em>tmp/*</em></tt>
|
37
|
+
# * Performs an initial import
|
38
|
+
# * Performs an initial checkout
|
39
|
+
# * Updates svn:ignore properties for project and recommits project
|
40
|
+
# * <tt><em>log/*.log</em></tt>
|
41
|
+
# * <tt><em>log/*.pid</em></tt>
|
42
|
+
# * <tt><em>tmp/*</em></tt>
|
43
|
+
# * <tt><em>db/*.db</em></tt>
|
44
|
+
# * <tt><em>db/*.sqlite</em></tt>
|
45
|
+
# * <tt><em>db/*.sqlite3</em></tt>
|
46
|
+
# * <tt><em>db/schema.rb</em></tt>
|
47
|
+
# * <tt><em>db/schema.sql</em></tt>
|
48
|
+
#
|
49
|
+
# == TODO
|
50
|
+
#
|
51
|
+
# * Rewrite to work with Ruby's subversion bindings if available
|
52
|
+
# * Make explicitly object oriented
|
53
|
+
# * Flesh out command-line options a bit and make them smarter
|
54
|
+
# * Package as a Gem so it can be easily installed
|
55
|
+
# * Add some helpful Subversion rake tasks
|
56
|
+
#
|
57
|
+
# == License
|
58
|
+
#
|
59
|
+
# Permission is hereby granted, free of charge, to any person obtaining a copy
|
60
|
+
# of this software and associated documentation files (the "Software"), to deal
|
61
|
+
# in the Software without restriction, including without limitation the rights
|
62
|
+
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
63
|
+
# copies of the Software, and to permit persons to whom the Software is
|
64
|
+
# furnished to do so, subject to the following conditions:
|
65
|
+
#
|
66
|
+
# The above copyright notice and this permission notice shall be included in
|
67
|
+
# all copies or substantial portions of the Software.
|
68
|
+
#
|
69
|
+
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
70
|
+
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
71
|
+
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
72
|
+
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
73
|
+
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
74
|
+
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
75
|
+
# SOFTWARE.
|
76
|
+
|
77
|
+
if require('svn/core') && require('svn/client')
|
78
|
+
svnbind = true
|
79
|
+
end
|
80
|
+
|
81
|
+
# Initialize our parameters from the command line and raise errors when needed
|
82
|
+
print "Initializing..."
|
83
|
+
ARGV[0] ? appname = ARGV[0] : raise
|
84
|
+
ARGV[1] ? svnrepo = ARGV[1] : raise
|
85
|
+
print "Done.\n"
|
86
|
+
|
87
|
+
print "\n"
|
88
|
+
|
89
|
+
# Start by creating our actual project directory and then change into the new
|
90
|
+
# directory
|
91
|
+
print "Creating project..."
|
92
|
+
system "rails #{appname} > /dev/null"
|
93
|
+
Dir::chdir appname
|
94
|
+
print "Done.\n"
|
95
|
+
|
96
|
+
# Trim out all the stuff we don't want in the initial subversion import and
|
97
|
+
# move some other stuff around.
|
98
|
+
print "Triming initial project..."
|
99
|
+
File::rename "config/database.yml", "config/database.yml.sample"
|
100
|
+
File::delete "doc/README_FOR_APP"
|
101
|
+
File::delete "README"
|
102
|
+
system "rm -rf log/* > /dev/null"
|
103
|
+
system "rm -rf tmp/* > /dev/null"
|
104
|
+
print "Done.\n"
|
105
|
+
|
106
|
+
# Perform our initial subversion import
|
107
|
+
print "Importing project to subvserion..."
|
108
|
+
system "svn import #{svnrepo}/#{appname}/trunk -m \"Initial import\" > /dev/null"
|
109
|
+
Dir::chdir ".."
|
110
|
+
system "rm -rf #{appname} > /dev/null"
|
111
|
+
print "Done.\n"
|
112
|
+
|
113
|
+
# Perform a subversion checkout of our project
|
114
|
+
print "Checking out project from subversion..."
|
115
|
+
system "svn co #{svnrepo}/#{appname}/trunk #{appname} > /dev/null"
|
116
|
+
Dir::chdir appname
|
117
|
+
print "Done.\n"
|
118
|
+
|
119
|
+
# Setup svn:ignore properties
|
120
|
+
print "Congiguring svn:ignore properties..."
|
121
|
+
system "svn propset svn:ignore \"*.log\n*.pid\" log/ > /dev/null"
|
122
|
+
system "svn update log/ > /dev/null"
|
123
|
+
system "svn propset svn:ignore \"*\" tmp/ > /dev/null"
|
124
|
+
system "svn update tmp/ > /dev/null"
|
125
|
+
system "svn propset svn:ignore \"*.db\n*.sqlite\n*.sqlite3\nschema.rb\nschema.sql\" db/ > /dev/null"
|
126
|
+
system "svn update db/ > /dev/null"
|
127
|
+
system "svn propset svn:ignore \"database.yml\" config/ > /dev/null"
|
128
|
+
system "svn update config/ > /dev/null"
|
129
|
+
print "Done.\n"
|
130
|
+
|
131
|
+
# Creating a svn_add_new rake task
|
132
|
+
#print "Create a svn_add_new rake task..."
|
133
|
+
#
|
134
|
+
#print "Done.\n"
|
135
|
+
|
136
|
+
# Committing updates
|
137
|
+
print "Committing updates..."
|
138
|
+
system "svn commit -m \"Updated svn:ignore properties\" > /dev/null"
|
139
|
+
print "Done.\n"
|
140
|
+
|
141
|
+
# Return to where we started
|
142
|
+
Dir::chdir ".."
|
data/lib/rorsvnprep.rb
ADDED
@@ -0,0 +1,101 @@
|
|
1
|
+
# This file contains the main class definition for the Ruby on Rails Subversion
|
2
|
+
# Prep Tool.
|
3
|
+
#
|
4
|
+
# Author:: James W. Thompson, II
|
5
|
+
# Copyright:: Copyright (c) 2007, James W. Thompson, II
|
6
|
+
|
7
|
+
# This class provides all the heavy lifting methods used by the command-line
|
8
|
+
# utility. This class could also be implemented as part of another package to
|
9
|
+
# provide further automated utilities.
|
10
|
+
class RailsSVNPrep
|
11
|
+
@project = nil
|
12
|
+
@svn = nil
|
13
|
+
@password = nil
|
14
|
+
@log = false
|
15
|
+
|
16
|
+
# The new method expects up to four arguments. Only if the projname argument
|
17
|
+
# is missing will the method raise an error for anything other than failed
|
18
|
+
# validation.
|
19
|
+
def initialize(projname = nil, svnuri = nil, svnpass = nil, svnpath = nil, log = false)
|
20
|
+
if projname
|
21
|
+
if RailsSVNPrep::validate_name(projname)
|
22
|
+
@project = proj_name
|
23
|
+
else
|
24
|
+
raise ArgumentError, "Invalid Project Name Supplied", caller
|
25
|
+
end
|
26
|
+
else
|
27
|
+
raise ArgumentError, "No Project Name Supplied", caller
|
28
|
+
end
|
29
|
+
|
30
|
+
if svnuri
|
31
|
+
if RailsSVNPrep::validate_uri(svnuri)
|
32
|
+
@svn = svnuri
|
33
|
+
else
|
34
|
+
raise ArgumentError, "Invalid Subversion URI Supplied", caller
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
if svnpath
|
39
|
+
if RailsSVNPrep::validate_path(svnpath)
|
40
|
+
@svn += svnpath
|
41
|
+
else
|
42
|
+
raise ArgumentError, "Invalid Subversion Path Supplied", caller
|
43
|
+
end
|
44
|
+
elsif @svn
|
45
|
+
@svn += "/#{@project}/trunk"
|
46
|
+
end
|
47
|
+
|
48
|
+
if svnpass
|
49
|
+
if RailsSVNPrep::validate_password(svnpass)
|
50
|
+
@password = svnpass
|
51
|
+
else
|
52
|
+
raise ArgumentError, "Invalid Password Supplied", caller
|
53
|
+
end
|
54
|
+
end
|
55
|
+
|
56
|
+
@log = log
|
57
|
+
|
58
|
+
@svn = RailsSVNPrep::normalize_svn(@svn)
|
59
|
+
end
|
60
|
+
|
61
|
+
# This method creates a new project and moves us into the new directory. The
|
62
|
+
# method makes direct call to the rails command and dumps the output to
|
63
|
+
# /dev/null.
|
64
|
+
def create_project
|
65
|
+
if Dir::glob(@project)
|
66
|
+
raise StandardError, "Directory #{@project} already exists", caller
|
67
|
+
end
|
68
|
+
|
69
|
+
if system "rails #{@project} > /dev/null"
|
70
|
+
Dir::chdir @project
|
71
|
+
else
|
72
|
+
raise StandardError, "Unable to successfully run Rails", caller
|
73
|
+
end
|
74
|
+
end
|
75
|
+
|
76
|
+
#
|
77
|
+
# Below are a series of utility methods for validation and other internal
|
78
|
+
# processing requirements.
|
79
|
+
#
|
80
|
+
protected
|
81
|
+
|
82
|
+
# A method to validate project names
|
83
|
+
def self.validate_name(projname)
|
84
|
+
|
85
|
+
end
|
86
|
+
|
87
|
+
# A method to validate subversion URIs
|
88
|
+
def self.validate_uri(svnuri)
|
89
|
+
|
90
|
+
end
|
91
|
+
|
92
|
+
# A method to validate a subversion repository path
|
93
|
+
def self.validate_path(svnpath)
|
94
|
+
|
95
|
+
end
|
96
|
+
|
97
|
+
# A method to normalize the combined subversion URI and repository path
|
98
|
+
def self.normalize_svn(svn)
|
99
|
+
|
100
|
+
end
|
101
|
+
end
|
metadata
ADDED
@@ -0,0 +1,64 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
rubygems_version: 0.9.0
|
3
|
+
specification_version: 1
|
4
|
+
name: rorsvnprep
|
5
|
+
version: !ruby/object:Gem::Version
|
6
|
+
version: 0.0.1
|
7
|
+
date: 2007-02-15 00:00:00 -05:00
|
8
|
+
summary: Provides additional automation to make managing Rails project with subversion easier.
|
9
|
+
require_paths:
|
10
|
+
- lib
|
11
|
+
email: jwthompson2@gmail.com
|
12
|
+
homepage: http://rorsvnprep.rubyforge.org/
|
13
|
+
rubyforge_project: rorsvnprep
|
14
|
+
description:
|
15
|
+
autorequire: rorsvnprep
|
16
|
+
default_executable: rorsvnprep
|
17
|
+
bindir: bin
|
18
|
+
has_rdoc: true
|
19
|
+
required_ruby_version: !ruby/object:Gem::Version::Requirement
|
20
|
+
requirements:
|
21
|
+
- - ">"
|
22
|
+
- !ruby/object:Gem::Version
|
23
|
+
version: 0.0.0
|
24
|
+
version:
|
25
|
+
platform: ruby
|
26
|
+
signing_key:
|
27
|
+
cert_chain:
|
28
|
+
post_install_message:
|
29
|
+
authors:
|
30
|
+
- James W. Thompson, II
|
31
|
+
files:
|
32
|
+
- lib/rorsvnprep.rb
|
33
|
+
- README
|
34
|
+
test_files:
|
35
|
+
- test/rorsvnprep_test.rb
|
36
|
+
rdoc_options: []
|
37
|
+
|
38
|
+
extra_rdoc_files:
|
39
|
+
- README
|
40
|
+
executables:
|
41
|
+
- rorsvnprep
|
42
|
+
extensions: []
|
43
|
+
|
44
|
+
requirements: []
|
45
|
+
|
46
|
+
dependencies:
|
47
|
+
- !ruby/object:Gem::Dependency
|
48
|
+
name: cmdparse
|
49
|
+
version_requirement:
|
50
|
+
version_requirements: !ruby/object:Gem::Version::Requirement
|
51
|
+
requirements:
|
52
|
+
- - ">="
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: 2.0.0
|
55
|
+
version:
|
56
|
+
- !ruby/object:Gem::Dependency
|
57
|
+
name: rails
|
58
|
+
version_requirement:
|
59
|
+
version_requirements: !ruby/object:Gem::Version::Requirement
|
60
|
+
requirements:
|
61
|
+
- - ">="
|
62
|
+
- !ruby/object:Gem::Version
|
63
|
+
version: 1.0.0
|
64
|
+
version:
|