jeremylightsmith-piston 1.9.3
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 +6 -0
- data/History.txt +6 -0
- data/License.txt +20 -0
- data/Manifest.txt +86 -0
- data/README.txt +136 -0
- data/Rakefile +4 -0
- data/bin/piston +5 -0
- data/config/hoe.rb +76 -0
- data/config/requirements.rb +18 -0
- data/lib/piston.rb +18 -0
- data/lib/piston/cli.rb +279 -0
- data/lib/piston/commands.rb +4 -0
- data/lib/piston/commands/base.rb +44 -0
- data/lib/piston/commands/import.rb +69 -0
- data/lib/piston/commands/info.rb +14 -0
- data/lib/piston/commands/lock_unlock.rb +21 -0
- data/lib/piston/commands/update.rb +28 -0
- data/lib/piston/git.rb +12 -0
- data/lib/piston/git/client.rb +77 -0
- data/lib/piston/git/commit.rb +70 -0
- data/lib/piston/git/repository.rb +63 -0
- data/lib/piston/git/working_copy.rb +63 -0
- data/lib/piston/repository.rb +57 -0
- data/lib/piston/revision.rb +48 -0
- data/lib/piston/svn.rb +14 -0
- data/lib/piston/svn/client.rb +88 -0
- data/lib/piston/svn/repository.rb +67 -0
- data/lib/piston/svn/revision.rb +74 -0
- data/lib/piston/svn/working_copy.rb +55 -0
- data/lib/piston/version.rb +9 -0
- data/lib/piston/working_copy.rb +129 -0
- data/lib/subclass_responsibility_error.rb +2 -0
- data/log/.gitignore +0 -0
- data/samples/common.rb +19 -0
- data/samples/import_git_git.rb +39 -0
- data/samples/import_git_svn.rb +36 -0
- data/samples/import_svn_git.rb +29 -0
- data/samples/import_svn_svn.rb +24 -0
- data/script/destroy +14 -0
- data/script/generate +14 -0
- data/script/txt2html +74 -0
- data/setup.rb +1585 -0
- data/tasks/deployment.rake +40 -0
- data/tasks/environment.rake +7 -0
- data/tasks/samples.rake +6 -0
- data/tasks/test.rake +30 -0
- data/tasks/website.rake +17 -0
- data/test/integration/test_import_git_git.rb +96 -0
- data/test/integration/test_import_git_svn.rb +131 -0
- data/test/integration/test_import_svn_git.rb +52 -0
- data/test/integration/test_import_svn_svn.rb +43 -0
- data/test/integration_helpers.rb +33 -0
- data/test/test_helper.rb +56 -0
- data/test/unit/git/commit/test_checkout.rb +30 -0
- data/test/unit/git/commit/test_each.rb +36 -0
- data/test/unit/git/commit/test_rememberance.rb +20 -0
- data/test/unit/git/commit/test_validation.rb +33 -0
- data/test/unit/git/repository/test_at.rb +22 -0
- data/test/unit/git/repository/test_basename.rb +12 -0
- data/test/unit/git/repository/test_branchanme.rb +15 -0
- data/test/unit/git/repository/test_guessing.rb +32 -0
- data/test/unit/git/working_copy/test_copying.rb +28 -0
- data/test/unit/git/working_copy/test_creation.rb +26 -0
- data/test/unit/git/working_copy/test_existence.rb +21 -0
- data/test/unit/git/working_copy/test_finalization.rb +18 -0
- data/test/unit/git/working_copy/test_guessing.rb +34 -0
- data/test/unit/git/working_copy/test_rememberance.rb +25 -0
- data/test/unit/svn/repository/test_at.rb +18 -0
- data/test/unit/svn/repository/test_basename.rb +24 -0
- data/test/unit/svn/repository/test_guessing.rb +45 -0
- data/test/unit/svn/revision/test_checkout.rb +27 -0
- data/test/unit/svn/revision/test_each.rb +21 -0
- data/test/unit/svn/revision/test_rememberance.rb +42 -0
- data/test/unit/svn/revision/test_validation.rb +49 -0
- data/test/unit/svn/working_copy/test_copying.rb +29 -0
- data/test/unit/svn/working_copy/test_creation.rb +19 -0
- data/test/unit/svn/working_copy/test_existence.rb +26 -0
- data/test/unit/svn/working_copy/test_finalization.rb +21 -0
- data/test/unit/svn/working_copy/test_guessing.rb +17 -0
- data/test/unit/svn/working_copy/test_rememberance.rb +26 -0
- data/test/unit/test_import.rb +13 -0
- data/test/unit/test_info.rb +36 -0
- data/test/unit/test_lock_unlock.rb +46 -0
- data/test/unit/test_repository.rb +50 -0
- data/test/unit/test_revision.rb +30 -0
- data/test/unit/working_copy/test_guessing.rb +34 -0
- data/test/unit/working_copy/test_info.rb +13 -0
- data/test/unit/working_copy/test_rememberance.rb +48 -0
- data/test/unit/working_copy/test_validate.rb +68 -0
- data/website/index.html +11 -0
- data/website/index.txt +39 -0
- data/website/javascripts/rounded_corners_lite.inc.js +285 -0
- data/website/stylesheets/screen.css +138 -0
- data/website/template.rhtml +48 -0
- metadata +228 -0
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
require File.dirname(__FILE__) + "/../../../test_helper"
|
|
2
|
+
|
|
3
|
+
class TestSvnRepositoryBasename < Test::Unit::TestCase
|
|
4
|
+
def test_basename_is_urls_path_last_component
|
|
5
|
+
assert_equal "piston", basename("http://svn.rubyforge.org/var/svn/piston")
|
|
6
|
+
end
|
|
7
|
+
|
|
8
|
+
def test_basename_is_urls_path_last_component_minus_trunk
|
|
9
|
+
assert_equal "attachment_fu", basename("svn+ssh://some.host.com/svn/attachment_fu/trunk")
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
def test_basename_is_urls_path_last_component_before_branches
|
|
13
|
+
assert_equal "rails", basename("svn://some.host.com/svn/rails/branches/stable")
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
def test_basename_is_urls_path_last_component_before_tags
|
|
17
|
+
assert_equal "plugin", basename("https://some.host.com/svn/plugin/tags/stable")
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
private
|
|
21
|
+
def basename(url)
|
|
22
|
+
Piston::Svn::Repository.new(url).basename
|
|
23
|
+
end
|
|
24
|
+
end
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
require File.dirname(__FILE__) + "/../../../test_helper"
|
|
2
|
+
|
|
3
|
+
class TestSvnRepositoryGuessing < Test::Unit::TestCase
|
|
4
|
+
def test_guesses_with_svn_protocol
|
|
5
|
+
assert Piston::Svn::Repository.understands_url?("svn://a.host.com/")
|
|
6
|
+
end
|
|
7
|
+
|
|
8
|
+
def test_guesses_with_svn_plus_bla_protocol
|
|
9
|
+
assert Piston::Svn::Repository.understands_url?("svn+bla://username@a.host.com/")
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
def test_guesses_with_svn_plus_ssh_protocol
|
|
13
|
+
assert Piston::Svn::Repository.understands_url?("svn+ssh://username@a.host.com/")
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
def test_contacts_repository_for_file_protocol
|
|
17
|
+
url = "file:///home/username/svn/projects/trunk"
|
|
18
|
+
Piston::Svn::Repository.expects(:svn).with(:info, url).returns("Repository UUID: abcdef\n")
|
|
19
|
+
assert Piston::Svn::Repository.understands_url?(url)
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
def test_contacts_repository_for_http_protocol
|
|
23
|
+
url = "http://svn.collab.net/repos/svn/trunk"
|
|
24
|
+
Piston::Svn::Repository.expects(:svn).with(:info, url).returns("Repository UUID: abcdef\n")
|
|
25
|
+
assert Piston::Svn::Repository.understands_url?(url)
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
def test_contacts_repository_for_https_protocol
|
|
29
|
+
url = "https://svn.collab.net/repos/svn/trunk"
|
|
30
|
+
Piston::Svn::Repository.expects(:svn).with(:info, url).returns("Repository UUID: abcdef\n")
|
|
31
|
+
assert Piston::Svn::Repository.understands_url?(url)
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
def test_says_does_not_understand_when_svn_info_errors_out
|
|
35
|
+
url = "http://rubyonrails.org/"
|
|
36
|
+
Piston::Svn::Repository.expects(:svn).with(:info, url).raises(Piston::Svn::Client::Failed)
|
|
37
|
+
deny Piston::Svn::Repository.understands_url?(url)
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
def test_says_does_not_understand_when_svn_command_not_found
|
|
41
|
+
url = "http://rubyonrails.org/"
|
|
42
|
+
Piston::Svn::Repository.expects(:svn).with(:info, url).raises(Piston::Svn::Client::BadCommand)
|
|
43
|
+
deny Piston::Svn::Repository.understands_url?(url)
|
|
44
|
+
end
|
|
45
|
+
end
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
require File.dirname(__FILE__) + "/../../../test_helper"
|
|
2
|
+
|
|
3
|
+
class TestSvnRevisionCheckout < Test::Unit::TestCase
|
|
4
|
+
def setup
|
|
5
|
+
@wcdir = Pathname.new("tmp/wc")
|
|
6
|
+
@repos = mock("repository")
|
|
7
|
+
@repos.stubs(:url).returns("http://a.repos.com/trunk")
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
def test_head_checkout_to_path
|
|
11
|
+
rev = new_revision("HEAD")
|
|
12
|
+
rev.expects(:svn).with(:checkout, "--revision", "HEAD", @repos.url, @wcdir).returns("Checked out revision 1322.")
|
|
13
|
+
rev.checkout_to(@wcdir)
|
|
14
|
+
assert_equal 1322, rev.revision
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
def test_specific_revision_checkout_to_path
|
|
18
|
+
rev = new_revision(1231)
|
|
19
|
+
rev.expects(:svn).with(:checkout, "--revision", 1231, @repos.url, @wcdir).returns("Checked out revision 1231.")
|
|
20
|
+
rev.checkout_to(@wcdir)
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
private
|
|
24
|
+
def new_revision(revision)
|
|
25
|
+
Piston::Svn::Revision.new(@repos, revision)
|
|
26
|
+
end
|
|
27
|
+
end
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
require File.dirname(__FILE__) + "/../../../test_helper"
|
|
2
|
+
|
|
3
|
+
class TestSvnRevisionEach < Test::Unit::TestCase
|
|
4
|
+
def setup
|
|
5
|
+
@repos = mock("repository")
|
|
6
|
+
@repos.stubs(:url).returns("http://a.repos.com/project/trunk")
|
|
7
|
+
|
|
8
|
+
@wcdir = Pathname.new("tmp/.wc.tmp")
|
|
9
|
+
|
|
10
|
+
@rev = Piston::Svn::Revision.new(@repos, "HEAD")
|
|
11
|
+
@rev.stubs(:svn).returns("Checked out revision 111.\n")
|
|
12
|
+
@rev.checkout_to(@wcdir)
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
def test_each_skips_over_svn_metadata_folders
|
|
16
|
+
@rev.expects(:svn).with(:ls, "--recursive", @wcdir).returns("CONTRIBUTORS\nREADME\ntest/test_helper.rb\n")
|
|
17
|
+
expected = ["CONTRIBUTORS", "README", "test/test_helper.rb"]
|
|
18
|
+
actual = @rev.inject([]) {|memo, relpath| memo << relpath}
|
|
19
|
+
assert_equal expected.sort, actual.sort
|
|
20
|
+
end
|
|
21
|
+
end
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
require File.dirname(__FILE__) + "/../../../test_helper"
|
|
2
|
+
|
|
3
|
+
class TestSvnRevisionRememberance < Test::Unit::TestCase
|
|
4
|
+
def setup
|
|
5
|
+
@wcdir = Pathname.new("tmp/wc")
|
|
6
|
+
@wcdir.mkdir rescue nil
|
|
7
|
+
@repos = mock("repository")
|
|
8
|
+
@repos.stubs(:url).returns("http://a.repos.com/svn/trunk")
|
|
9
|
+
|
|
10
|
+
@info = {"Path" => @wcdir.realpath,
|
|
11
|
+
"URL" => "http://a.repos.com/svn/trunk",
|
|
12
|
+
"Repository Root" => "http://a.repos.com/svn",
|
|
13
|
+
"Repository UUID" => "some-long-uuid",
|
|
14
|
+
"Revision" => "9283",
|
|
15
|
+
"Node Kind" => "directory",
|
|
16
|
+
"Schedule" => "normal",
|
|
17
|
+
"Last Changed Author" => "me",
|
|
18
|
+
"Last Changed Rev" => "9283",
|
|
19
|
+
"Last Changed Date" => "2008-03-11 20:44:24 -0400 (Tue, 11 Mar 2008)"}
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
def teardown
|
|
23
|
+
@wcdir.rmtree rescue nil
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
def test_remembers_repos_uuid
|
|
27
|
+
rev = new_revision("HEAD")
|
|
28
|
+
rev.expects(:svn).with(:info, "--revision", "HEAD", @repos.url).returns(@info.to_yaml)
|
|
29
|
+
assert_equal "some-long-uuid", rev.remember_values[Piston::Svn::UUID]
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
def test_remembers_repos_revision
|
|
33
|
+
rev = new_revision("HEAD")
|
|
34
|
+
rev.expects(:svn).with(:info, "--revision", "HEAD", @repos.url).returns(@info.to_yaml)
|
|
35
|
+
assert_equal "9283", rev.remember_values[Piston::Svn::REMOTE_REV]
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
private
|
|
39
|
+
def new_revision(revision)
|
|
40
|
+
Piston::Svn::Revision.new(@repos, revision)
|
|
41
|
+
end
|
|
42
|
+
end
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
require File.dirname(__FILE__) + "/../../../test_helper"
|
|
2
|
+
|
|
3
|
+
class TestSvnRevisionValidation < Test::Unit::TestCase
|
|
4
|
+
def setup
|
|
5
|
+
@repository = mock("repository")
|
|
6
|
+
@repository.stubs(:url).returns("svn://svn.my-repos.com/projects/libcalc/trunk")
|
|
7
|
+
end
|
|
8
|
+
|
|
9
|
+
def test_revision_is_invalid_unless_same_uuid
|
|
10
|
+
rev = new_revision("HEAD", Piston::Svn::UUID => "1234")
|
|
11
|
+
rev.expects(:svn).with(:info, "--revision", "HEAD", @repository.url).returns(INFO)
|
|
12
|
+
assert_raise Piston::Svn::Revision::UuidChanged do
|
|
13
|
+
rev.validate!
|
|
14
|
+
end
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
def test_revision_is_invalid_if_repository_location_does_not_exist_anymore
|
|
18
|
+
rev = new_revision("HEAD", Piston::Svn::UUID => "038cbeb6-2227-0410-91ec-8f9533625906")
|
|
19
|
+
rev.expects(:svn).with(:info, "--revision", "HEAD", @repository.url).returns("#{@repository.url}: (Not a valid URL)")
|
|
20
|
+
assert_raise Piston::Svn::Revision::RepositoryMoved do
|
|
21
|
+
rev.validate!
|
|
22
|
+
end
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
def test_revision_is_valid_if_repository_is_present_and_same_uuid
|
|
26
|
+
rev = new_revision("HEAD", Piston::Svn::UUID => "038cbeb6-2227-0410-91ec-8f9533625906")
|
|
27
|
+
rev.expects(:svn).with(:info, "--revision", "HEAD", @repository.url).returns(INFO)
|
|
28
|
+
assert_nothing_raised do
|
|
29
|
+
rev.validate!
|
|
30
|
+
end
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
protected
|
|
34
|
+
def new_revision(rev, recalled_values={})
|
|
35
|
+
Piston::Svn::Revision.new(@repository, rev, recalled_values)
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
INFO = <<EOF
|
|
39
|
+
Path: project
|
|
40
|
+
URL: svn://svn.my-repos.com/projects/libcalc/trunk
|
|
41
|
+
Repository Root: svn://svn.my-repos.com/projects
|
|
42
|
+
Repository UUID: 038cbeb6-2227-0410-91ec-8f9533625906
|
|
43
|
+
Revision: 1234
|
|
44
|
+
Node Kind: directory
|
|
45
|
+
Last Changed Author: francois
|
|
46
|
+
Last Changed Rev: 1232
|
|
47
|
+
Last Changed Date: 2008-04-06 21:57:10 -0400 (Sun, 06 Apr 2008)
|
|
48
|
+
EOF
|
|
49
|
+
end
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
require File.dirname(__FILE__) + "/../../../test_helper"
|
|
2
|
+
|
|
3
|
+
class TestSvnWorkingCopyCopying < Test::Unit::TestCase
|
|
4
|
+
def setup
|
|
5
|
+
@wcdir = Pathname.new("tmp/wc")
|
|
6
|
+
@wc = Piston::Svn::WorkingCopy.new(@wcdir)
|
|
7
|
+
@wc.stubs(:svn)
|
|
8
|
+
@wc.stubs(:svn).with(:info, anything).returns("a:b")
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
def teardown
|
|
12
|
+
@wcdir.rmtree rescue nil
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
def test_copies_files
|
|
16
|
+
files = ["file.rb"]
|
|
17
|
+
files.expects(:copy_to).with("file.rb", @wcdir + files.first)
|
|
18
|
+
@wc.copy_from(files)
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
def test_ensures_directories_are_created
|
|
22
|
+
files = ["file/a.rb"]
|
|
23
|
+
@wcdir.expects(:+).with(files.first).returns(target = mock("target"))
|
|
24
|
+
target.expects(:dirname).returns(target)
|
|
25
|
+
target.expects(:mkdir)
|
|
26
|
+
files.expects(:copy_to).with("file/a.rb", target)
|
|
27
|
+
@wc.copy_from(files)
|
|
28
|
+
end
|
|
29
|
+
end
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
require File.dirname(__FILE__) + "/../../../test_helper"
|
|
2
|
+
|
|
3
|
+
class TestSvnWorkingCopyCreation < Test::Unit::TestCase
|
|
4
|
+
def setup
|
|
5
|
+
@wcdir = Pathname.new("tmp/wc")
|
|
6
|
+
@wc = Piston::Svn::WorkingCopy.new(@wcdir)
|
|
7
|
+
@wc.stubs(:svn)
|
|
8
|
+
@wc.stubs(:svn).with(:info, anything).returns("a:b")
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
def teardown
|
|
12
|
+
@wcdir.rmtree rescue nil
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
def test_create_uses_svn_mkdir
|
|
16
|
+
@wc.expects(:svn).with(:mkdir, @wcdir)
|
|
17
|
+
@wc.create
|
|
18
|
+
end
|
|
19
|
+
end
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
require File.dirname(__FILE__) + "/../../../test_helper"
|
|
2
|
+
|
|
3
|
+
class TestSvnWorkingCopyExistence < Test::Unit::TestCase
|
|
4
|
+
def setup
|
|
5
|
+
@wcdir = Pathname.new("tmp/wc")
|
|
6
|
+
@wc = Piston::Svn::WorkingCopy.new(@wcdir)
|
|
7
|
+
end
|
|
8
|
+
|
|
9
|
+
def teardown
|
|
10
|
+
@wcdir.rmtree rescue nil
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
def test_exist_false_when_dir_not_present
|
|
14
|
+
deny @wc.exist?
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
def test_exist_false_when_dir_present_but_not_an_svn_wc
|
|
18
|
+
@wcdir.mkdir
|
|
19
|
+
deny @wc.exist?
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
def test_exist_true_when_svn_working_copy_at_path
|
|
23
|
+
@wc.expects(:svn).with(:info, @wcdir).returns("Path: b")
|
|
24
|
+
assert @wc.exist?
|
|
25
|
+
end
|
|
26
|
+
end
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
require File.dirname(__FILE__) + "/../../../test_helper"
|
|
2
|
+
|
|
3
|
+
class TestSvnWorkingCopyFinalization < Test::Unit::TestCase
|
|
4
|
+
def setup
|
|
5
|
+
@wcdir = Pathname.new("tmp/wc")
|
|
6
|
+
@wc = Piston::Svn::WorkingCopy.new(@wcdir)
|
|
7
|
+
end
|
|
8
|
+
|
|
9
|
+
def teardown
|
|
10
|
+
@wcdir.rmtree rescue nil
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
def test_finalize_adds_all_top_level_entries_to_working_copy
|
|
14
|
+
@wcdir.mkdir
|
|
15
|
+
File.open(@wcdir + "a.rb", "wb") {|f| f.write "Hello World!"}
|
|
16
|
+
File.open(@wcdir + "b.rb", "wb") {|f| f.write "Hello World!"}
|
|
17
|
+
@wc.expects(:svn).with(:add, (@wcdir + "a.rb").to_s)
|
|
18
|
+
@wc.expects(:svn).with(:add, (@wcdir + "b.rb").to_s)
|
|
19
|
+
@wc.finalize
|
|
20
|
+
end
|
|
21
|
+
end
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
require File.dirname(__FILE__) + "/../../../test_helper"
|
|
2
|
+
|
|
3
|
+
class TestSvnWorkingCopyGuessing < Test::Unit::TestCase
|
|
4
|
+
def setup
|
|
5
|
+
@dir = Pathname.new("tmp/wc")
|
|
6
|
+
end
|
|
7
|
+
|
|
8
|
+
def test_does_svn_info_on_directory
|
|
9
|
+
Piston::Svn::WorkingCopy.expects(:svn).with(:info, @dir).returns("Path: xxx\n")
|
|
10
|
+
assert Piston::Svn::WorkingCopy.understands_dir?(@dir)
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
def test_denies_when_svn_not_available
|
|
14
|
+
Piston::Svn::WorkingCopy.expects(:svn).with(:info, @dir).raises(Piston::Svn::Client::BadCommand)
|
|
15
|
+
deny Piston::Svn::WorkingCopy.understands_dir?(@dir)
|
|
16
|
+
end
|
|
17
|
+
end
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
require File.dirname(__FILE__) + "/../../../test_helper"
|
|
2
|
+
|
|
3
|
+
class TestSvnWorkingCopyRememberance < Test::Unit::TestCase
|
|
4
|
+
def setup
|
|
5
|
+
@wcdir = Pathname.new("tmp/wc")
|
|
6
|
+
@wcdir.mkpath
|
|
7
|
+
@wc = Piston::Svn::WorkingCopy.new(@wcdir)
|
|
8
|
+
@wc.stubs(:svn)
|
|
9
|
+
@wc.stubs(:svn).with(:info, anything).returns("a:b")
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
def teardown
|
|
13
|
+
@wcdir.rmtree rescue nil
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
def test_after_remember_adds_path_using_svn
|
|
17
|
+
@wc.expects(:svn).with(:info, :the_path).returns("a: (Not a versioned resource)\n")
|
|
18
|
+
@wc.expects(:svn).with(:add, :the_path)
|
|
19
|
+
@wc.after_remember(:the_path)
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
def test_after_remember_does_not_add_if_file_already_under_version_control
|
|
23
|
+
@wc.expects(:svn).with(:info, :the_path).returns("a: b\n")
|
|
24
|
+
@wc.after_remember(:the_path)
|
|
25
|
+
end
|
|
26
|
+
end
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
require File.dirname(__FILE__) + "/../test_helper"
|
|
2
|
+
|
|
3
|
+
class TestImport < Test::Unit::TestCase
|
|
4
|
+
def setup
|
|
5
|
+
@wc = stub_everything("working_copy")
|
|
6
|
+
@cmd = Piston::Commands::Import.new
|
|
7
|
+
end
|
|
8
|
+
|
|
9
|
+
def test_temp_dir_name_hides_tmpdir_as_a_dotfile_and_suffixes_with_tmp
|
|
10
|
+
@wc.stubs(:path).returns(Pathname.new("tmp/a/dir"))
|
|
11
|
+
assert_equal Pathname.new("tmp/a/.dir.tmp"), @cmd.temp_dir_name(@wc)
|
|
12
|
+
end
|
|
13
|
+
end
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
require File.dirname(__FILE__) + "/../test_helper"
|
|
2
|
+
|
|
3
|
+
class TestInfo < Test::Unit::TestCase
|
|
4
|
+
def setup
|
|
5
|
+
@values = {"lock" => false}
|
|
6
|
+
@wcdir = "tmp/wcdir"
|
|
7
|
+
@wc = mock("WorkingCopy")
|
|
8
|
+
@wc.stubs(:validate!)
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
def test_info
|
|
12
|
+
run_and_verify do
|
|
13
|
+
@wc.expects(:info)
|
|
14
|
+
end
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
def test_validates_working_copy_before_working
|
|
18
|
+
assert_raise(Piston::WorkingCopy::NotWorkingCopy) do
|
|
19
|
+
run_and_verify do
|
|
20
|
+
@wc.expects(:validate!).raises(Piston::WorkingCopy::NotWorkingCopy)
|
|
21
|
+
end
|
|
22
|
+
end
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
private
|
|
26
|
+
def run_and_verify
|
|
27
|
+
yield
|
|
28
|
+
info_command.run(@wcdir)
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
def info_command
|
|
32
|
+
Piston::WorkingCopy.expects(:guess).with(@wcdir).returns(@wc)
|
|
33
|
+
Piston::Commands::Info.new(:verbose => "verbose",
|
|
34
|
+
:quiet => "quiet", :force => "force")
|
|
35
|
+
end
|
|
36
|
+
end
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
require File.dirname(__FILE__) + "/../test_helper"
|
|
2
|
+
|
|
3
|
+
class TestLockUnlock < Test::Unit::TestCase
|
|
4
|
+
def setup
|
|
5
|
+
@values = {"lock" => false}
|
|
6
|
+
@wcdir = "tmp/wcdir"
|
|
7
|
+
@wc = mock("WorkingCopy")
|
|
8
|
+
@wc.stubs(:validate!)
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
def test_lock_working_copy
|
|
12
|
+
run_and_verify(true) do
|
|
13
|
+
@wc.expects(:recall).returns(@values)
|
|
14
|
+
@wc.expects(:finalize).returns(@values)
|
|
15
|
+
@wc.expects(:remember).with(@values.merge("lock" => true), @values["handler"]).returns(@values)
|
|
16
|
+
end
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
def test_unlock_working_copy
|
|
20
|
+
run_and_verify(false) do
|
|
21
|
+
@wc.expects(:recall).returns(@values)
|
|
22
|
+
@wc.expects(:finalize).returns(@values)
|
|
23
|
+
@wc.expects(:remember).with(@values.merge("lock" => false), @values["handler"]).returns(@values)
|
|
24
|
+
end
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
def test_validates_working_copy_before_working
|
|
28
|
+
assert_raise(Piston::WorkingCopy::NotWorkingCopy) do
|
|
29
|
+
run_and_verify do
|
|
30
|
+
@wc.expects(:validate!).raises(Piston::WorkingCopy::NotWorkingCopy)
|
|
31
|
+
end
|
|
32
|
+
end
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
private
|
|
36
|
+
def run_and_verify(lock=true)
|
|
37
|
+
yield
|
|
38
|
+
lock_unlock_command.run(@wcdir, lock)
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
def lock_unlock_command
|
|
42
|
+
Piston::WorkingCopy.expects(:guess).with(@wcdir).returns(@wc)
|
|
43
|
+
Piston::Commands::LockUnlock.new(:verbose => "verbose",
|
|
44
|
+
:quiet => "quiet", :force => "force")
|
|
45
|
+
end
|
|
46
|
+
end
|