kvm 0.0.1.pre
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/.gitignore +3 -0
- data/.rvmrc +1 -0
- data/AGPL-3.0 +661 -0
- data/Gemfile +8 -0
- data/Gemfile.lock +32 -0
- data/LICENSE +23 -0
- data/README.md +73 -0
- data/Rakefile +48 -0
- data/bin/kvm +6 -0
- data/kvm.gemspec +28 -0
- data/lib/kvm.rb +286 -0
- data/lib/kvm/archive.rb +56 -0
- data/lib/kvm/artifact.rb +28 -0
- data/lib/kvm/db/jdbc_adapter.rb +71 -0
- data/lib/kvm/db/oracle.rb +23 -0
- data/lib/kvm/db/types.rb +11 -0
- data/lib/kvm/impex.rb +109 -0
- data/lib/kvm/log.rb +7 -0
- data/lib/kvm/resource.rb +72 -0
- data/lib/kvm/rice_release.rb +79 -0
- data/lib/kvm/rice_release_generated_dataset.rb +68 -0
- data/lib/kvm/source.rb +33 -0
- data/lib/kvm/subversion.rb +52 -0
- data/lib/kvm/version.rb +3 -0
- data/lib/kvm/wallet.rb +64 -0
- data/support/ant/INSTALL +2 -0
- data/support/ant/KEYS +1398 -0
- data/support/ant/LICENSE +272 -0
- data/support/ant/NOTICE +6 -0
- data/support/ant/README +97 -0
- data/support/ant/WHATSNEW +5467 -0
- data/support/ant/bin/ant +335 -0
- data/support/ant/bin/ant.bat +218 -0
- data/support/ant/bin/ant.cmd +93 -0
- data/support/ant/bin/antRun +24 -0
- data/support/ant/bin/antRun.bat +50 -0
- data/support/ant/bin/antRun.pl +66 -0
- data/support/ant/bin/antenv.cmd +98 -0
- data/support/ant/bin/complete-ant-cmd.pl +114 -0
- data/support/ant/bin/envset.cmd +131 -0
- data/support/ant/bin/lcp.bat +31 -0
- data/support/ant/bin/runant.pl +153 -0
- data/support/ant/bin/runant.py +102 -0
- data/support/ant/bin/runrc.cmd +60 -0
- data/support/ant/etc/ant-bootstrap.jar +0 -0
- data/support/ant/etc/changelog.xsl +148 -0
- data/support/ant/etc/checkstyle/checkstyle-frames.xsl +299 -0
- data/support/ant/etc/checkstyle/checkstyle-text.xsl +34 -0
- data/support/ant/etc/checkstyle/checkstyle-xdoc.xsl +130 -0
- data/support/ant/etc/coverage-frames.xsl +489 -0
- data/support/ant/etc/jdepend-frames.xsl +487 -0
- data/support/ant/etc/jdepend.xsl +276 -0
- data/support/ant/etc/junit-frames-xalan1.xsl +733 -0
- data/support/ant/etc/junit-frames.xsl +902 -0
- data/support/ant/etc/junit-noframes.xsl +478 -0
- data/support/ant/etc/log.xsl +203 -0
- data/support/ant/etc/maudit-frames.xsl +503 -0
- data/support/ant/etc/mmetrics-frames.xsl +1026 -0
- data/support/ant/etc/tagdiff.xsl +179 -0
- data/support/ant/fetch.xml +343 -0
- data/support/ant/get-m2.xml +121 -0
- data/support/ant/lib/README +3 -0
- data/support/ant/lib/ant-antlr.jar +0 -0
- data/support/ant/lib/ant-antlr.pom +76 -0
- data/support/ant/lib/ant-apache-bcel.jar +0 -0
- data/support/ant/lib/ant-apache-bcel.pom +72 -0
- data/support/ant/lib/ant-apache-bsf.jar +0 -0
- data/support/ant/lib/ant-apache-bsf.pom +75 -0
- data/support/ant/lib/ant-apache-log4j.jar +0 -0
- data/support/ant/lib/ant-apache-log4j.pom +70 -0
- data/support/ant/lib/ant-apache-oro.jar +0 -0
- data/support/ant/lib/ant-apache-oro.pom +75 -0
- data/support/ant/lib/ant-apache-regexp.jar +0 -0
- data/support/ant/lib/ant-apache-regexp.pom +71 -0
- data/support/ant/lib/ant-apache-resolver.jar +0 -0
- data/support/ant/lib/ant-apache-resolver.pom +70 -0
- data/support/ant/lib/ant-apache-xalan2.jar +0 -0
- data/support/ant/lib/ant-apache-xalan2.pom +95 -0
- data/support/ant/lib/ant-commons-logging.jar +0 -0
- data/support/ant/lib/ant-commons-logging.pom +71 -0
- data/support/ant/lib/ant-commons-net.jar +0 -0
- data/support/ant/lib/ant-commons-net.pom +76 -0
- data/support/ant/lib/ant-jai.jar +0 -0
- data/support/ant/lib/ant-jai.pom +85 -0
- data/support/ant/lib/ant-javamail.jar +0 -0
- data/support/ant/lib/ant-javamail.pom +79 -0
- data/support/ant/lib/ant-jdepend.jar +0 -0
- data/support/ant/lib/ant-jdepend.pom +73 -0
- data/support/ant/lib/ant-jmf.jar +0 -0
- data/support/ant/lib/ant-jmf.pom +66 -0
- data/support/ant/lib/ant-jsch.jar +0 -0
- data/support/ant/lib/ant-jsch.pom +75 -0
- data/support/ant/lib/ant-junit.jar +0 -0
- data/support/ant/lib/ant-junit.pom +101 -0
- data/support/ant/lib/ant-junit4.jar +0 -0
- data/support/ant/lib/ant-junit4.pom +71 -0
- data/support/ant/lib/ant-launcher.jar +0 -0
- data/support/ant/lib/ant-launcher.pom +58 -0
- data/support/ant/lib/ant-netrexx.jar +0 -0
- data/support/ant/lib/ant-netrexx.pom +99 -0
- data/support/ant/lib/ant-parent.pom +120 -0
- data/support/ant/lib/ant-swing.jar +0 -0
- data/support/ant/lib/ant-swing.pom +67 -0
- data/support/ant/lib/ant-testutil.jar +0 -0
- data/support/ant/lib/ant-testutil.pom +75 -0
- data/support/ant/lib/ant.jar +0 -0
- data/support/ant/lib/ant.pom +222 -0
- data/support/ant/lib/libraries.properties +65 -0
- data/test/data/files/rice-0.0.0.0-bin.tar.gz +0 -0
- data/test/data/svn/README.txt +5 -0
- data/test/data/svn/conf/authz +32 -0
- data/test/data/svn/conf/passwd +8 -0
- data/test/data/svn/conf/svnserve.conf +47 -0
- data/test/data/svn/db/current +1 -0
- data/test/data/svn/db/format +2 -0
- data/test/data/svn/db/fs-type +1 -0
- data/test/data/svn/db/fsfs.conf +37 -0
- data/test/data/svn/db/min-unpacked-rev +1 -0
- data/test/data/svn/db/rep-cache.db +0 -0
- data/test/data/svn/db/revprops/0/0 +5 -0
- data/test/data/svn/db/revprops/0/1 +13 -0
- data/test/data/svn/db/revs/0/0 +11 -0
- data/test/data/svn/db/revs/0/1 +0 -0
- data/test/data/svn/db/txn-current +1 -0
- data/test/data/svn/db/txn-current-lock +0 -0
- data/test/data/svn/db/uuid +1 -0
- data/test/data/svn/db/write-lock +0 -0
- data/test/data/svn/format +1 -0
- data/test/data/svn/hooks/post-commit.tmpl +50 -0
- data/test/data/svn/hooks/post-lock.tmpl +44 -0
- data/test/data/svn/hooks/post-revprop-change.tmpl +56 -0
- data/test/data/svn/hooks/post-unlock.tmpl +42 -0
- data/test/data/svn/hooks/pre-commit.tmpl +81 -0
- data/test/data/svn/hooks/pre-lock.tmpl +71 -0
- data/test/data/svn/hooks/pre-revprop-change.tmpl +66 -0
- data/test/data/svn/hooks/pre-unlock.tmpl +63 -0
- data/test/data/svn/hooks/start-commit.tmpl +65 -0
- data/test/data/svn/locks/db-logs.lock +3 -0
- data/test/data/svn/locks/db.lock +3 -0
- data/test/helper.rb +146 -0
- data/test/int_test_generate_sql.rb +58 -0
- data/test/test_archive.rb +35 -0
- data/test/test_generate_sql.rb +0 -0
- data/test/test_rice_release.rb +61 -0
- data/test/test_rice_release_generated_dataset.rb +12 -0
- data/test/test_source.rb +31 -0
- data/test/test_subversion.rb +20 -0
- metadata +298 -0
data/Gemfile
ADDED
data/Gemfile.lock
ADDED
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
PATH
|
|
2
|
+
remote: .
|
|
3
|
+
specs:
|
|
4
|
+
kvm (0.0.1.pre)
|
|
5
|
+
thor
|
|
6
|
+
|
|
7
|
+
GEM
|
|
8
|
+
remote: http://rubygems.org/
|
|
9
|
+
specs:
|
|
10
|
+
bouncy-castle-java (1.5.0146.1)
|
|
11
|
+
builder (3.0.0)
|
|
12
|
+
ci_reporter (1.6.4)
|
|
13
|
+
builder (>= 2.1.2)
|
|
14
|
+
fakeweb (1.3.0)
|
|
15
|
+
jruby-openssl (0.7.4)
|
|
16
|
+
bouncy-castle-java
|
|
17
|
+
rake (0.9.0)
|
|
18
|
+
rcov (0.9.9)
|
|
19
|
+
rcov (0.9.9-java)
|
|
20
|
+
thor (0.14.6)
|
|
21
|
+
|
|
22
|
+
PLATFORMS
|
|
23
|
+
java
|
|
24
|
+
ruby
|
|
25
|
+
|
|
26
|
+
DEPENDENCIES
|
|
27
|
+
ci_reporter
|
|
28
|
+
fakeweb
|
|
29
|
+
jruby-openssl
|
|
30
|
+
kvm!
|
|
31
|
+
rake
|
|
32
|
+
rcov
|
data/LICENSE
ADDED
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
= KVM
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2010 Incandescent Software LLC
|
|
4
|
+
|
|
5
|
+
This program is free software: you can redistribute it and/or modify
|
|
6
|
+
it under the terms of the GNU Affero General Public License as published by
|
|
7
|
+
the Free Software Foundation, either version 3 of the License, or
|
|
8
|
+
(at your option) any later version.
|
|
9
|
+
|
|
10
|
+
This program is distributed in the hope that it will be useful,
|
|
11
|
+
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
12
|
+
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
13
|
+
GNU General Public License for more details.
|
|
14
|
+
|
|
15
|
+
You should have received a copy of the GNU Affero General Public License
|
|
16
|
+
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
17
|
+
|
|
18
|
+
== Additional Bundled Software
|
|
19
|
+
|
|
20
|
+
Apache Ant is licensed according to the terms of Apache License, Version 2.0. See http://www.apache.org/licenses/LICENSE-2.0 for details.
|
|
21
|
+
|
|
22
|
+
Kuali Rice datasets used in unit tests are licensed according to the terms of the Educational Community License 2.0. See http://www.opensource.org/licenses/ecl2.php for details.
|
|
23
|
+
|
data/README.md
ADDED
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
Overview
|
|
2
|
+
========
|
|
3
|
+
|
|
4
|
+
|
|
5
|
+
Requirements
|
|
6
|
+
============
|
|
7
|
+
|
|
8
|
+
* JRuby (ideally through RVM)
|
|
9
|
+
* manual install of jruby-openssl gem: `rvm use jruby; gem install jruby-openssl gem`
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
Usage
|
|
13
|
+
=====
|
|
14
|
+
|
|
15
|
+
kvm --help
|
|
16
|
+
|
|
17
|
+
Tasks:
|
|
18
|
+
kvm checkout <relative repo> [path] ...
|
|
19
|
+
kvm config ...
|
|
20
|
+
kvm create-user <db options> <username> <password> ...
|
|
21
|
+
kvm def <db options with alias> ...
|
|
22
|
+
kvm drop-user <username> ...
|
|
23
|
+
kvm fetch <project>-<version>[-dist] ...
|
|
24
|
+
kvm generate-datasets <project>-<version> [-d dataset1,dataset2] [-t oracle...
|
|
25
|
+
kvm get <project>-<version>[-dist] ...
|
|
26
|
+
kvm help [TASK] ...
|
|
27
|
+
kvm install-dataset <db options> <project>-<version> dataset [type] ...
|
|
28
|
+
kvm install-testtables <db options> <project>-<version> [type] ...
|
|
29
|
+
kvm list ...
|
|
30
|
+
kvm list-datasets ...
|
|
31
|
+
kvm run-sql file <db options> ...
|
|
32
|
+
kvm undef <alias> ...
|
|
33
|
+
kvm update <relative repo> [path] ...
|
|
34
|
+
|
|
35
|
+
To generate dataset SQL:
|
|
36
|
+
|
|
37
|
+
kvm generate-datasets rice-1.0.3.1
|
|
38
|
+
|
|
39
|
+
To install SQL:
|
|
40
|
+
|
|
41
|
+
kvm install-dataset --url jdbc:oracle:thin:@localhost:1521:xe --username rice_test --password rice_test rice-1.0.3.1 bootstrap-server oracle
|
|
42
|
+
|
|
43
|
+
Database Arguments
|
|
44
|
+
==================
|
|
45
|
+
|
|
46
|
+
Several commands take database connection arguments. A database connection consists of:
|
|
47
|
+
|
|
48
|
+
* jdbc url
|
|
49
|
+
* username
|
|
50
|
+
* password
|
|
51
|
+
* type (oracle or mysql)
|
|
52
|
+
|
|
53
|
+
There are two provisions for specifying these components, either directly, or via the `--db` options hash, and the two styles can be mixed.
|
|
54
|
+
|
|
55
|
+
Directly: `--url jdbc:oracle:thin:@127.0.0.1:1521:xe --username user --password password --type oracle`
|
|
56
|
+
|
|
57
|
+
Options hash: `--url jdbc:oracle:thin:@127.0.0.1:1521:xe --db username:user password:password type:oracle`
|
|
58
|
+
|
|
59
|
+
Two other options are also available:
|
|
60
|
+
|
|
61
|
+
* alias
|
|
62
|
+
* jar
|
|
63
|
+
|
|
64
|
+
If you have defined a db alias (via `define-db` command) then you can simply use the `--alias mydb` option to refer to the predefined db alias. This will save repetition.
|
|
65
|
+
|
|
66
|
+
Some commands also require the JDBC driver jar to be specified. This can be done via the `--jar /path/to/ojdbc14.jar` option.
|
|
67
|
+
|
|
68
|
+
Improvements
|
|
69
|
+
============
|
|
70
|
+
|
|
71
|
+
* better command documentation
|
|
72
|
+
* better effort at automatically locating jdbc driver jars, and saving with db aliases
|
|
73
|
+
* secure wallet functionality is sort of lame, it would be nice to take advantage of native keychain functionality if it exists
|
data/Rakefile
ADDED
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
require 'rubygems'
|
|
2
|
+
require 'bundler/setup'
|
|
3
|
+
#require 'test/unit'
|
|
4
|
+
require 'rake/testtask'
|
|
5
|
+
require 'rcov/rcovtask'
|
|
6
|
+
# to get xunit test results: rake ci:setup:testunit test
|
|
7
|
+
require 'ci/reporter/rake/test_unit'
|
|
8
|
+
|
|
9
|
+
Bundler::GemHelper.install_tasks
|
|
10
|
+
|
|
11
|
+
# integration test files
|
|
12
|
+
INT_TEST_FILES = FileList['test/int_test*.rb']
|
|
13
|
+
|
|
14
|
+
# helper to dry up tasks
|
|
15
|
+
def def_test(t, opts = {})
|
|
16
|
+
t.libs << "test"
|
|
17
|
+
t.test_files = opts[:test_files] if opts[:test_files]
|
|
18
|
+
t.rcov_opts += opts[:rcov_opts] if opts[:rcov_opts]
|
|
19
|
+
t.verbose = true
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
Rake::TestTask.new do |t|
|
|
23
|
+
def_test(t)
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
Rake::TestTask.new(:integration) do |t|
|
|
27
|
+
def_test(t, :test_files => INT_TEST_FILES)
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
task :test_all => [ :test, :integration ]
|
|
31
|
+
|
|
32
|
+
RCOV_OPTS = [ '--xrefs', # comment to disable cross-references
|
|
33
|
+
'--html',
|
|
34
|
+
'--exclude /gems/' ] # '-a'
|
|
35
|
+
|
|
36
|
+
#desc "Create a cross-referenced code coverage report."
|
|
37
|
+
Rcov::RcovTask.new do |t|
|
|
38
|
+
def_test(t, :rcov_opts => RCOV_OPTS)
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
Rcov::RcovTask.new(:rcov_integration) do |t|
|
|
42
|
+
def_test(t, :test_files => INT_TEST_FILES, :rcov_opts => RCOV_OPTS)
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
Rcov::RcovTask.new(:rcov_all) do |t|
|
|
46
|
+
# test_files field not accessible on RcovTask? meh
|
|
47
|
+
def_test(t, :test_files => FileList['test/test*.rb'] + INT_TEST_FILES, :rcov_opts => RCOV_OPTS)
|
|
48
|
+
end
|
data/bin/kvm
ADDED
data/kvm.gemspec
ADDED
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
|
2
|
+
$:.push File.expand_path("../lib", __FILE__)
|
|
3
|
+
require "kvm/version"
|
|
4
|
+
|
|
5
|
+
Gem::Specification.new do |s|
|
|
6
|
+
s.name = "kvm"
|
|
7
|
+
s.version = KVM::VERSION
|
|
8
|
+
s.platform = Gem::Platform::RUBY
|
|
9
|
+
s.authors = ["Aaron Hamid"]
|
|
10
|
+
s.email = ["aaron@incandescentsoftware.com"]
|
|
11
|
+
s.homepage = ""
|
|
12
|
+
s.summary = %q{Kuali Version Manager}
|
|
13
|
+
s.description = %q{Kuali Version Manager}
|
|
14
|
+
|
|
15
|
+
s.rubyforge_project = "kvm"
|
|
16
|
+
|
|
17
|
+
s.files = `git ls-files`.split("\n")
|
|
18
|
+
s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
|
|
19
|
+
s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
|
|
20
|
+
s.require_paths = ["lib"]
|
|
21
|
+
|
|
22
|
+
s.add_dependency 'thor'
|
|
23
|
+
#s.add_dependency 'rake' # for jruby ant integration
|
|
24
|
+
s.add_development_dependency 'rake'
|
|
25
|
+
s.add_development_dependency 'rcov'
|
|
26
|
+
s.add_development_dependency 'ci_reporter'
|
|
27
|
+
s.add_development_dependency 'fakeweb'
|
|
28
|
+
end
|
data/lib/kvm.rb
ADDED
|
@@ -0,0 +1,286 @@
|
|
|
1
|
+
# jruby should be run in 1.9 mode
|
|
2
|
+
# if you are using RVM:
|
|
3
|
+
# mkdir ~/.rvm/hooks
|
|
4
|
+
# cat > ~/.rvm/hooks/after_use <<EOF
|
|
5
|
+
# case "$GEM_HOME" in
|
|
6
|
+
# *jruby*)
|
|
7
|
+
# JRUBY_OPTS="--1.9" ; export JRUBY_OPTS
|
|
8
|
+
# ;;
|
|
9
|
+
# esac
|
|
10
|
+
# EOF
|
|
11
|
+
|
|
12
|
+
require "rubygems" # ruby1.9 doesn't "require" it though
|
|
13
|
+
require "thor"
|
|
14
|
+
require "openssl"
|
|
15
|
+
require "base64"
|
|
16
|
+
require "digest/sha2"
|
|
17
|
+
require "ostruct"
|
|
18
|
+
require "pp"
|
|
19
|
+
|
|
20
|
+
KVM_DIR=File.expand_path('.kvm', '~')
|
|
21
|
+
|
|
22
|
+
require 'kvm/db/types'
|
|
23
|
+
require 'kvm/wallet'
|
|
24
|
+
require 'kvm/impex'
|
|
25
|
+
require 'kvm/rice_release'
|
|
26
|
+
require 'kvm/rice_release_generated_dataset'
|
|
27
|
+
require 'kvm/archive'
|
|
28
|
+
require 'kvm/source'
|
|
29
|
+
require 'kvm/log'
|
|
30
|
+
|
|
31
|
+
# https://wiki.kuali.org/display/KULRICE/Creating+a+New+Revision+of+Rice
|
|
32
|
+
class KVM::App < Thor
|
|
33
|
+
#SQL_TOOL = {
|
|
34
|
+
# # sqlplus can't deal with blank lines without 'set blanklines' option; ripping out the blank lines with sed seems to be the simplest approach
|
|
35
|
+
# "oracle" => lambda { |username, password, host, file| "sed '/^[ \t]*$/d' #{file} | sed '/^--.*$/d' | sqlplus -S -L #{username}/#{password}@#{host}" }
|
|
36
|
+
|
|
37
|
+
private
|
|
38
|
+
|
|
39
|
+
# class helper for defining common database arguments to a Thor command
|
|
40
|
+
def self.db_method_options
|
|
41
|
+
method_options :url => :string, :username => :string, :password => :string, :type => :string, :jar => :string, :alias => :string
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
public
|
|
45
|
+
|
|
46
|
+
desc "fetch <project>-<version>[-dist]", "download a release"
|
|
47
|
+
method_option :dist, :aliases => "-d", :default => "bin"
|
|
48
|
+
def fetch(name)
|
|
49
|
+
archive = KVM::Archive.new(name, options[:dist])
|
|
50
|
+
archive.get || puts("Archive #{name} has already been fetched: #{archive.name}")
|
|
51
|
+
end
|
|
52
|
+
|
|
53
|
+
desc "get <project>-<version>[-dist]", "download and expand a release"
|
|
54
|
+
method_option :dist, :aliases => "-d", :default => "bin"
|
|
55
|
+
def get(name)
|
|
56
|
+
release = KVM::RiceRelease.new(name, options[:dist])
|
|
57
|
+
release.get || puts("Release #{name} has already been downloaded: #{release.name}")
|
|
58
|
+
end
|
|
59
|
+
|
|
60
|
+
desc "list", "list downloaded releases"
|
|
61
|
+
def list
|
|
62
|
+
KVM::RiceRelease.list.each { |r| puts r.name }
|
|
63
|
+
end
|
|
64
|
+
|
|
65
|
+
desc "list-datasets", "lists generated datasets"
|
|
66
|
+
def list_datasets(project=nil)
|
|
67
|
+
datasets = KVM::RiceReleaseGeneratedDataset.list
|
|
68
|
+
for dataset in datasets
|
|
69
|
+
puts "#{dataset.project} #{dataset.ds_name} #{dataset.db_type}"
|
|
70
|
+
end
|
|
71
|
+
end
|
|
72
|
+
|
|
73
|
+
desc "generate-datasets <project>-<version> [-d dataset1,dataset2] [-t oracle|mysql]", "generates DDL for the specified project; if datasets or database type are omitted, all sets/types are generated"
|
|
74
|
+
method_option :datasets, :aliases => "-d", :type => :array
|
|
75
|
+
method_option :types, :aliases => "-t", :type => :string
|
|
76
|
+
def generate_datasets(project)
|
|
77
|
+
release = KVM::RiceRelease.new(project)
|
|
78
|
+
release.get
|
|
79
|
+
|
|
80
|
+
dataset_list = (options[:datasets] || release.datasets)
|
|
81
|
+
# generate sql of each type...
|
|
82
|
+
if options[:types]
|
|
83
|
+
db_types = options[:types].split('|')
|
|
84
|
+
else
|
|
85
|
+
db_types = KVM::Db::DB_TYPES
|
|
86
|
+
end
|
|
87
|
+
for db_type in db_types
|
|
88
|
+
# for each dataset
|
|
89
|
+
for ds_name in dataset_list
|
|
90
|
+
dataset = KVM::RiceReleaseGeneratedDataset.new(release.name, ds_name, db_type)
|
|
91
|
+
dataset.get
|
|
92
|
+
end
|
|
93
|
+
end
|
|
94
|
+
end
|
|
95
|
+
|
|
96
|
+
desc "install-dataset <db options> <project>-<version> dataset [type]", "installs specified dataset"
|
|
97
|
+
db_method_options
|
|
98
|
+
def install_dataset(project, ds_name, type=nil)
|
|
99
|
+
db_config = parse_db_options(options)
|
|
100
|
+
validate_db_options(db_config)
|
|
101
|
+
type = resolve_db_type(db_config, type)
|
|
102
|
+
|
|
103
|
+
release = KVM::RiceRelease.new(project)
|
|
104
|
+
release.get
|
|
105
|
+
# generate sql if missing
|
|
106
|
+
KVM::LOG.debug "DATASET: " + ds_name
|
|
107
|
+
dataset = KVM::RiceReleaseGeneratedDataset.new(release.name, ds_name, type)
|
|
108
|
+
dataset.get
|
|
109
|
+
|
|
110
|
+
KVM::LOG.debug "Dataset path:"
|
|
111
|
+
KVM::LOG.debug dataset.path
|
|
112
|
+
KVM::LOG.debug dataset.exists?
|
|
113
|
+
|
|
114
|
+
KVM::Impex::IMPEX_SOURCE.get
|
|
115
|
+
KVM::Impex::IMPEX.apply_sql(dataset.path, type, db_config.url, db_config.username, db_config.password)
|
|
116
|
+
end
|
|
117
|
+
|
|
118
|
+
# ./bin/kvm install-testtables rice-1.0.3.1 oracle --db=alias:oraclexe-system jar:$HOME/.m2/repository/com/oracle/ojdbc14/10.2.0.3.0/ojdbc14-10.2.0.3.0.jar
|
|
119
|
+
desc "install-testtables <db options> <project>-<version> [type]", "installs test tables"
|
|
120
|
+
db_method_options
|
|
121
|
+
def install_testtables(project, type=nil)
|
|
122
|
+
db_config = parse_db_options(options)
|
|
123
|
+
validate_db_options(db_config)
|
|
124
|
+
type = resolve_db_type(db_config, type)
|
|
125
|
+
|
|
126
|
+
release = KVM::RiceRelease.new(project)
|
|
127
|
+
release.get
|
|
128
|
+
run_sql_file(db_config, release.test_sql_file(type), true)
|
|
129
|
+
end
|
|
130
|
+
|
|
131
|
+
desc "run-sql file <db options>", "runs a sql file"
|
|
132
|
+
db_method_options
|
|
133
|
+
def run_sql(file)
|
|
134
|
+
db_config = parse_db_options(options)
|
|
135
|
+
validate_db_options(db_config)
|
|
136
|
+
resolve_db_type(db_config, nil)
|
|
137
|
+
run_sql_file(db_config, File.expand_path(file), false)
|
|
138
|
+
end
|
|
139
|
+
|
|
140
|
+
desc "checkout <relative repo> [path]", "checks out a Kuali project from subversion"
|
|
141
|
+
def checkout(repo, path="trunk")
|
|
142
|
+
src = Source.new(repo, path)
|
|
143
|
+
src.get || puts("#{repo} #{path} already checked out: #{src.path}")
|
|
144
|
+
end
|
|
145
|
+
|
|
146
|
+
desc "update <relative repo> [path]", "updates a checked out Kuali project"
|
|
147
|
+
def update(repo, path="trunk")
|
|
148
|
+
src = Source.new(repo, path)
|
|
149
|
+
src.get
|
|
150
|
+
src.update
|
|
151
|
+
end
|
|
152
|
+
|
|
153
|
+
# ./bin/kvm drop-user rice_test --db=alias:oraclexe-system jar:$HOME/.m2/repository/com/oracle/ojdbc14/10.2.0.3.0/ojdbc14-10.2.0.3.0.jar
|
|
154
|
+
desc "drop-user <username>", "drops a database user"
|
|
155
|
+
db_method_options
|
|
156
|
+
def drop_user(username)
|
|
157
|
+
db_config = parse_db_options(options)
|
|
158
|
+
validate_db_options(db_config)
|
|
159
|
+
|
|
160
|
+
db_type = resolve_db_type(db_config, nil, 'oracle')
|
|
161
|
+
db = KVM::Db::JdbcAdapter.new(db_config)
|
|
162
|
+
# prepared statement doesn't work for drop? http://forums.oracle.com/forums/thread.jspa?threadID=504808
|
|
163
|
+
db.execute_update(KVM::Db::DB_PLATFORMS[db_type].drop_user(username))
|
|
164
|
+
end
|
|
165
|
+
|
|
166
|
+
desc "create-user <db options> <username> <password>", "creates a database user"
|
|
167
|
+
db_method_options
|
|
168
|
+
def create_user(username, password)
|
|
169
|
+
db_config = parse_db_options(options)
|
|
170
|
+
validate_db_options(db_config)
|
|
171
|
+
|
|
172
|
+
KVM::LOG.debug db_config
|
|
173
|
+
db_type = resolve_db_type(db_config, nil, 'oracle')
|
|
174
|
+
db = KVM::Db::JdbcAdapter.new(db_config)
|
|
175
|
+
# oracle-specific
|
|
176
|
+
# prepared statement doesn't work for drop? http://forums.oracle.com/forums/thread.jspa?threadID=504808
|
|
177
|
+
db.execute_update(KVM::Db::DB_PLATFORMS[db_type].create_user(username, password))
|
|
178
|
+
end
|
|
179
|
+
|
|
180
|
+
desc "def <db options with alias>", "creates a database definition alias."
|
|
181
|
+
db_method_options
|
|
182
|
+
def def
|
|
183
|
+
db = parse_db_options(options)
|
|
184
|
+
|
|
185
|
+
raise "alias is required" unless db.alias
|
|
186
|
+
|
|
187
|
+
w = load_wallet
|
|
188
|
+
dbs = w.data['jdbc'] || {}
|
|
189
|
+
dbs[name] = {
|
|
190
|
+
'type' => db.type,
|
|
191
|
+
'url' => db.url,
|
|
192
|
+
'username' => db.username,
|
|
193
|
+
'password' => db.password
|
|
194
|
+
}
|
|
195
|
+
w.data['jdbc'] = dbs
|
|
196
|
+
w.save
|
|
197
|
+
puts "Saved #{name} alias:"
|
|
198
|
+
pp w.data
|
|
199
|
+
end
|
|
200
|
+
|
|
201
|
+
desc "undef <alias>", "deletes a database definition alias"
|
|
202
|
+
def undef(name)
|
|
203
|
+
w = load_wallet
|
|
204
|
+
dbs = w.data['jdbc'] || {}
|
|
205
|
+
dbs.delete(name)
|
|
206
|
+
w.data['jdbc'] = dbs
|
|
207
|
+
w.save
|
|
208
|
+
puts "Deleted #{name} alias:"
|
|
209
|
+
pp w.data
|
|
210
|
+
end
|
|
211
|
+
|
|
212
|
+
desc "config", "prints the kvm config"
|
|
213
|
+
def config
|
|
214
|
+
w = load_wallet
|
|
215
|
+
pp w.data
|
|
216
|
+
end
|
|
217
|
+
|
|
218
|
+
protected
|
|
219
|
+
|
|
220
|
+
# uses the db type from either the specified type or the db alias
|
|
221
|
+
# raises an exception if missing and default is nil
|
|
222
|
+
def resolve_db_type(db_config, type, default=nil)
|
|
223
|
+
db_config.db_type = type if type
|
|
224
|
+
db_config.db_type = default unless db_config.db_type
|
|
225
|
+
raise "Database type must be specified" unless db_config.db_type
|
|
226
|
+
db_config.db_type
|
|
227
|
+
end
|
|
228
|
+
|
|
229
|
+
def run_sql_file(db_config, file, strip_eol = false)
|
|
230
|
+
db = KVM::Db::JdbcAdapter.new(db_config)
|
|
231
|
+
statements = KVM::Db::DB_PLATFORMS[db_config.db_type].parse_sql(db, file)
|
|
232
|
+
# fix strange problem with test create table sql... identifier error unless eols are removed
|
|
233
|
+
statements.map! { |s| s.gsub(/[\r\n]+/, ' ') } if strip_eol
|
|
234
|
+
db.execute_update(statements)
|
|
235
|
+
end
|
|
236
|
+
|
|
237
|
+
# parses database command line options, consulting wallet if alias is specified
|
|
238
|
+
def parse_db_options(options)
|
|
239
|
+
# required to merge url, username, password opts into db hash
|
|
240
|
+
# because thor has a funky hash argument syntax that can't be used
|
|
241
|
+
# with jdbc urls
|
|
242
|
+
db = options[:db] || {}
|
|
243
|
+
db['url'] = options[:url]
|
|
244
|
+
db['username'] = options[:username]
|
|
245
|
+
db['password'] = options[:password]
|
|
246
|
+
db['type'] = options[:type]
|
|
247
|
+
db['jar'] = options[:jar]
|
|
248
|
+
|
|
249
|
+
raise "No database settings specified" unless db.size > 0
|
|
250
|
+
|
|
251
|
+
db_alias = db['alias']
|
|
252
|
+
if db_alias
|
|
253
|
+
w = load_wallet
|
|
254
|
+
db_def = nil
|
|
255
|
+
db_def = w.data['jdbc'][db_alias] if !w.data['jdbc'].nil?
|
|
256
|
+
raise "Alias not found: #{db_alias}" unless db_def
|
|
257
|
+
db = db.merge(db_def)
|
|
258
|
+
end
|
|
259
|
+
db_config = OpenStruct.new
|
|
260
|
+
db_config.alias = db['alias']
|
|
261
|
+
db_config.url = db['url']
|
|
262
|
+
db_config.username = db['username']
|
|
263
|
+
db_config.password = db['password']
|
|
264
|
+
db_config.jar = db['jar']
|
|
265
|
+
db_config.db_type = db['type']
|
|
266
|
+
db_config
|
|
267
|
+
end
|
|
268
|
+
|
|
269
|
+
def validate_db_options(db)
|
|
270
|
+
raise("Database url not specified") unless db.url
|
|
271
|
+
raise("Database username not specified") unless db.username
|
|
272
|
+
raise("Database password not specified") unless db.password
|
|
273
|
+
end
|
|
274
|
+
|
|
275
|
+
def load_wallet
|
|
276
|
+
KVM::Wallet.new(File.expand_path("~/.kvm_data"), File.expand_path("~/.ssh/id_rsa"))
|
|
277
|
+
end
|
|
278
|
+
|
|
279
|
+
def rice_server_bootstrap_dataset_path(version)
|
|
280
|
+
"#{RICE_SERVER_DB_REPO_PATH}/rice-release-#{version.gsub('\.', '-')}-br"
|
|
281
|
+
end
|
|
282
|
+
|
|
283
|
+
def rice_client_bootstrap_dataset_path(version)
|
|
284
|
+
"#{RICE_CLIENT_DB_REPO_PATH}/rice-release-#{version.gsub('\.', '-')}-br"
|
|
285
|
+
end
|
|
286
|
+
end
|