mercurial-ruby 0.3.0
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/.document +5 -0
- data/Gemfile +10 -0
- data/Gemfile.lock +32 -0
- data/LICENSE.txt +20 -0
- data/README.rdoc +86 -0
- data/Rakefile +53 -0
- data/VERSION +1 -0
- data/lib/mercurial-ruby.rb +66 -0
- data/lib/mercurial-ruby/branch.rb +45 -0
- data/lib/mercurial-ruby/changed_file.rb +51 -0
- data/lib/mercurial-ruby/command.rb +77 -0
- data/lib/mercurial-ruby/commit.rb +152 -0
- data/lib/mercurial-ruby/config_file.rb +119 -0
- data/lib/mercurial-ruby/configuration.rb +14 -0
- data/lib/mercurial-ruby/diff.rb +50 -0
- data/lib/mercurial-ruby/factories/branch_factory.rb +91 -0
- data/lib/mercurial-ruby/factories/changed_file_factory.rb +50 -0
- data/lib/mercurial-ruby/factories/commit_factory.rb +154 -0
- data/lib/mercurial-ruby/factories/diff_factory.rb +63 -0
- data/lib/mercurial-ruby/factories/hook_factory.rb +45 -0
- data/lib/mercurial-ruby/factories/node_factory.rb +111 -0
- data/lib/mercurial-ruby/factories/tag_factory.rb +48 -0
- data/lib/mercurial-ruby/file_index.rb +209 -0
- data/lib/mercurial-ruby/helper.rb +23 -0
- data/lib/mercurial-ruby/hook.rb +23 -0
- data/lib/mercurial-ruby/manifest.rb +58 -0
- data/lib/mercurial-ruby/node.rb +100 -0
- data/lib/mercurial-ruby/repository.rb +94 -0
- data/lib/mercurial-ruby/root_node.rb +27 -0
- data/lib/mercurial-ruby/shell.rb +64 -0
- data/lib/mercurial-ruby/style.rb +23 -0
- data/lib/mercurial-ruby/tag.rb +33 -0
- data/lib/stdlib_exts/string.rb +12 -0
- data/lib/styles/changeset.style +5 -0
- data/lib/styles/file_index.style +3 -0
- data/mercurial-ruby.gemspec +227 -0
- data/test/fixtures.rb +28 -0
- data/test/fixtures/test-repo/.DotFile +1 -0
- data/test/fixtures/test-repo/.hg/00changelog.i +0 -0
- data/test/fixtures/test-repo/.hg/branch +1 -0
- data/test/fixtures/test-repo/.hg/cache/branchheads +6 -0
- data/test/fixtures/test-repo/.hg/cache/tags +7 -0
- data/test/fixtures/test-repo/.hg/dirstate +0 -0
- data/test/fixtures/test-repo/.hg/hgrc +3 -0
- data/test/fixtures/test-repo/.hg/last-message.txt +1 -0
- data/test/fixtures/test-repo/.hg/requires +4 -0
- data/test/fixtures/test-repo/.hg/store/00changelog.i +0 -0
- data/test/fixtures/test-repo/.hg/store/00manifest.i +0 -0
- data/test/fixtures/test-repo/.hg/store/data/_file _with _whitespace.pdf.i +0 -0
- data/test/fixtures/test-repo/.hg/store/data/_l_i_c_e_n_s_e.txt.i +0 -0
- data/test/fixtures/test-repo/.hg/store/data/_l_i_c_e_n_s_e2.txt.i +0 -0
- data/test/fixtures/test-repo/.hg/store/data/_l_i_c_e_n_s_e3.txt.i +0 -0
- data/test/fixtures/test-repo/.hg/store/data/_l_i_c_e_n_s_e4.txt.i +0 -0
- data/test/fixtures/test-repo/.hg/store/data/_r_e_a_d_m_e.markdown.i +0 -0
- data/test/fixtures/test-repo/.hg/store/data/_r_e_a_d_m_e.markup.i +0 -0
- data/test/fixtures/test-repo/.hg/store/data/_rakefile.i +0 -0
- data/test/fixtures/test-repo/.hg/store/data/_rakefile2.i +0 -0
- data/test/fixtures/test-repo/.hg/store/data/_rakefile3.i +0 -0
- data/test/fixtures/test-repo/.hg/store/data/check ~5c this ~5c out ~22 now.i +0 -0
- data/test/fixtures/test-repo/.hg/store/data/directory two/minitest__mixin.rb.i +0 -0
- data/test/fixtures/test-repo/.hg/store/data/directory two/options.rb.i +0 -0
- data/test/fixtures/test-repo/.hg/store/data/directory two/rdoc__mixin.rb.i +0 -0
- data/test/fixtures/test-repo/.hg/store/data/directory two/rspec__mixin.rb.i +0 -0
- data/test/fixtures/test-repo/.hg/store/data/directory two/shindo__mixin.rb.i +0 -0
- data/test/fixtures/test-repo/.hg/store/data/directory two/shoulda__mixin.rb.i +0 -0
- data/test/fixtures/test-repo/.hg/store/data/directory two/templates/_gemfile.i +0 -0
- data/test/fixtures/test-repo/.hg/store/data/directory two/templates/_l_i_c_e_n_s_e.txt.i +0 -0
- data/test/fixtures/test-repo/.hg/store/data/directory two/templates/_r_e_a_d_m_e.rdoc.i +0 -0
- data/test/fixtures/test-repo/.hg/store/data/directory two/templates/_rakefile.i +0 -0
- data/test/fixtures/test-repo/.hg/store/data/directory two/templates/bacon/flunking.rb.i +0 -0
- data/test/fixtures/test-repo/.hg/store/data/directory two/templates/bacon/helper.rb.i +0 -0
- data/test/fixtures/test-repo/.hg/store/data/directory two/templates/bundler__setup.erb.i +0 -0
- data/test/fixtures/test-repo/.hg/store/data/directory two/templates/features/default.feature.i +0 -0
- data/test/fixtures/test-repo/.hg/store/data/directory two/templates/features/support/env.rb.i +0 -0
- data/test/fixtures/test-repo/.hg/store/data/directory two/templates/jeweler__tasks.erb.i +0 -0
- data/test/fixtures/test-repo/.hg/store/data/directory two/templates/micronaut/flunking.rb.i +0 -0
- data/test/fixtures/test-repo/.hg/store/data/directory two/templates/micronaut/helper.rb.i +0 -0
- data/test/fixtures/test-repo/.hg/store/data/directory two/templates/minitest/flunking.rb.i +0 -0
- data/test/fixtures/test-repo/.hg/store/data/directory two/templates/minitest/helper.rb.i +0 -0
- data/test/fixtures/test-repo/.hg/store/data/directory two/templates/other__tasks.erb.i +0 -0
- data/test/fixtures/test-repo/.hg/store/data/directory two/templates/riot/flunking.rb.i +0 -0
- data/test/fixtures/test-repo/.hg/store/data/directory two/templates/riot/helper.rb.i +0 -0
- data/test/fixtures/test-repo/.hg/store/data/directory two/templates/rspec/flunking.rb.i +0 -0
- data/test/fixtures/test-repo/.hg/store/data/directory two/templates/rspec/helper.rb.i +0 -0
- data/test/fixtures/test-repo/.hg/store/data/directory two/templates/rspec/~2erspec.i +0 -0
- data/test/fixtures/test-repo/.hg/store/data/directory two/templates/shindo/flunking.rb.i +0 -0
- data/test/fixtures/test-repo/.hg/store/data/directory two/templates/shindo/helper.rb.i +0 -0
- data/test/fixtures/test-repo/.hg/store/data/directory two/templates/shoulda/flunking.rb.i +0 -0
- data/test/fixtures/test-repo/.hg/store/data/directory two/templates/shoulda/helper.rb.i +0 -0
- data/test/fixtures/test-repo/.hg/store/data/directory two/templates/testspec/flunking.rb.i +0 -0
- data/test/fixtures/test-repo/.hg/store/data/directory two/templates/testspec/helper.rb.i +0 -0
- data/test/fixtures/test-repo/.hg/store/data/directory two/templates/testunit/flunking.rb.i +0 -0
- data/test/fixtures/test-repo/.hg/store/data/directory two/templates/testunit/helper.rb.i +0 -0
- data/test/fixtures/test-repo/.hg/store/data/directory two/templates/~2edocument.i +0 -0
- data/test/fixtures/test-repo/.hg/store/data/directory two/templates/~2egitignore.i +0 -0
- data/test/fixtures/test-repo/.hg/store/data/directory two/~2e_d_s___store.i +0 -0
- data/test/fixtures/test-repo/.hg/store/data/directory__1/rubygems__dot__org__tasks.rb.i +0 -0
- data/test/fixtures/test-repo/.hg/store/data/directory__1/rubygems__tasks.rb.i +0 -0
- data/test/fixtures/test-repo/.hg/store/data/directory__1/specification.rb.i +0 -0
- data/test/fixtures/test-repo/.hg/store/data/directory__1/tasks.rb.i +0 -0
- data/test/fixtures/test-repo/.hg/store/data/directory__1/~2e_d_s___store.i +0 -0
- data/test/fixtures/test-repo/.hg/store/data/empty-file.i +0 -0
- data/test/fixtures/test-repo/.hg/store/data/goose.png.i +0 -0
- data/test/fixtures/test-repo/.hg/store/data/goose/pretty-thing.txt.i +0 -0
- data/test/fixtures/test-repo/.hg/store/data/new-directory/another-boring-file.i +0 -0
- data/test/fixtures/test-repo/.hg/store/data/new-directory/something.csv.i +0 -0
- data/test/fixtures/test-repo/.hg/store/data/new-directory/subdirectory/_e_u_l_a5seat___chin___sim02.03.04.pdf.d +0 -0
- data/test/fixtures/test-repo/.hg/store/data/new-directory/subdirectory/_e_u_l_a5seat___chin___sim02.03.04.pdf.i +0 -0
- data/test/fixtures/test-repo/.hg/store/data/new-directory/subdirectory/_file _with _whitespace.pdf.i +0 -0
- data/test/fixtures/test-repo/.hg/store/data/new-directory/subdirectory/beansprout.png.i +0 -0
- data/test/fixtures/test-repo/.hg/store/data/new-file.i +0 -0
- data/test/fixtures/test-repo/.hg/store/data/old-directory/minitest__mixin.rb.i +0 -0
- data/test/fixtures/test-repo/.hg/store/data/old-directory/options.rb.i +0 -0
- data/test/fixtures/test-repo/.hg/store/data/old-directory/rspec__mixin.rb.i +0 -0
- data/test/fixtures/test-repo/.hg/store/data/old-directory/shindo__mixin.rb.i +0 -0
- data/test/fixtures/test-repo/.hg/store/data/old-directory/testunit__mixin.rb.i +0 -0
- data/test/fixtures/test-repo/.hg/store/data/old-directory/yard__mixin.rb.i +0 -0
- data/test/fixtures/test-repo/.hg/store/data/riot__mixin.rb.i +0 -0
- data/test/fixtures/test-repo/.hg/store/data/riot__mixin__copy.rb.i +0 -0
- data/test/fixtures/test-repo/.hg/store/data/style.i +0 -0
- data/test/fixtures/test-repo/.hg/store/data/super-cow.i +0 -0
- data/test/fixtures/test-repo/.hg/store/data/superman.txt.i +0 -0
- data/test/fixtures/test-repo/.hg/store/data/testspec__mixin.rb.i +0 -0
- data/test/fixtures/test-repo/.hg/store/data/testspec__mixin__new.rb.i +0 -0
- data/test/fixtures/test-repo/.hg/store/data/~2e_dot_file.i +0 -0
- data/test/fixtures/test-repo/.hg/store/data/~2ehgignore.i +0 -0
- data/test/fixtures/test-repo/.hg/store/data/~2ehgtags.i +0 -0
- data/test/fixtures/test-repo/.hg/store/fncache +79 -0
- data/test/fixtures/test-repo/.hg/store/undo +0 -0
- data/test/fixtures/test-repo/.hg/undo.bookmarks +0 -0
- data/test/fixtures/test-repo/.hg/undo.branch +1 -0
- data/test/fixtures/test-repo/.hg/undo.desc +2 -0
- data/test/fixtures/test-repo/.hg/undo.dirstate +0 -0
- data/test/fixtures/test-repo/.hgignore +1 -0
- data/test/fixtures/test-repo/.hgtags +1 -0
- data/test/fixtures/test-repo/LICENSE3.txt +15 -0
- data/test/fixtures/test-repo/LICENSE4.txt +17 -0
- data/test/fixtures/test-repo/README.markup +218 -0
- data/test/fixtures/test-repo/Rakefile3 +83 -0
- data/test/fixtures/test-repo/check // this // out /" now" "b/data/test/fixtures/test-repo/check // this // out / → now +0 -0
- data/test/fixtures/test-repo/empty-file +0 -0
- data/test/fixtures/test-repo/goose.png +0 -0
- data/test/fixtures/test-repo/goose/pretty-thing.txt +0 -0
- data/test/fixtures/test-repo/new-directory/another-boring-file +78 -0
- data/test/fixtures/test-repo/new-directory/something.csv +1 -0
- data/test/fixtures/test-repo/new-directory/subdirectory/EULA5seat_Chin_Sim02.03.04.pdf +0 -0
- data/test/fixtures/test-repo/new-directory/subdirectory/File With Whitespace.pdf b/data/test/fixtures/test-repo/new-directory/subdirectory/File With → Whitespace.pdf +0 -0
- data/test/fixtures/test-repo/new-directory/subdirectory/beansprout.png +0 -0
- data/test/fixtures/test-repo/riot_mixin.rb +45 -0
- data/test/fixtures/test-repo/style +4 -0
- data/test/fixtures/test-repo/superman.txt +1 -0
- data/test/fixtures/test-repo/testspec_mixin_new.rb +44 -0
- data/test/helper.rb +41 -0
- data/test/test_branch_factory.rb +46 -0
- data/test/test_changed_file.rb +46 -0
- data/test/test_changed_file_factory.rb +16 -0
- data/test/test_command.rb +62 -0
- data/test/test_commit.rb +66 -0
- data/test/test_commit_factory.rb +101 -0
- data/test/test_config_file.rb +105 -0
- data/test/test_configuration.rb +26 -0
- data/test/test_diff.rb +39 -0
- data/test/test_diff_factory.rb +38 -0
- data/test/test_file_index.rb +113 -0
- data/test/test_hook.rb +39 -0
- data/test/test_hook_factory.rb +40 -0
- data/test/test_manifest.rb +39 -0
- data/test/test_node.rb +34 -0
- data/test/test_node_factory.rb +125 -0
- data/test/test_repository.rb +58 -0
- data/test/test_shell.rb +33 -0
- data/test/test_tag_factory.rb +27 -0
- metadata +328 -0
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
require 'helper'
|
|
2
|
+
|
|
3
|
+
describe Mercurial::CommitFactory do
|
|
4
|
+
|
|
5
|
+
before do
|
|
6
|
+
@repository = Mercurial::Repository.open(Fixtures.test_repo)
|
|
7
|
+
end
|
|
8
|
+
|
|
9
|
+
it "should find commit by hash" do
|
|
10
|
+
commit = @repository.commits.by_hash_id('bc729b15e2b5')
|
|
11
|
+
commit.author.must_equal 'Ilya Sabanin'
|
|
12
|
+
commit.author_email.must_equal 'ilya.sabanin@gmail.com'
|
|
13
|
+
commit.hash_id.must_equal 'bc729b15e2b556065dd4f32c161f54be5dd92776'
|
|
14
|
+
commit.message.must_equal 'Directory added'
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
it "should not find inexistent commit by hash" do
|
|
18
|
+
lambda { @repository.commits.by_hash_id('dfio9sdf78sdfh') }.must_raise Mercurial::CommandError
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
it "should parse commits with big commit messages" do
|
|
22
|
+
commit = @repository.commits.by_hash_id('825fd6032c3b')
|
|
23
|
+
commit.author.must_equal 'Ilya Sabanin'
|
|
24
|
+
commit.author_email.must_equal 'ilya.sabanin@gmail.com'
|
|
25
|
+
commit.hash_id.must_equal '825fd6032c3bbab3677e1890bf05f134a7331533'
|
|
26
|
+
commit.message.must_equal really_long_commit_message
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
it "should find arrays of commits by their hashes" do
|
|
30
|
+
commits = @repository.commits.by_hash_ids(['6157254a4423', 'bf6386c0a0cc'])
|
|
31
|
+
commits.map(&:hash_id).sort.must_equal %w(6157254a442343181939c7af1a744cf2a16afcce bf6386c0a0ccd1282dbbe51888f52fe82b1806e3).sort
|
|
32
|
+
commits.map(&:author_email).uniq.must_equal %w(ilya.sabanin@gmail.com)
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
it "should find many commits with multiple arguments instead of array" do
|
|
36
|
+
commits = @repository.commits.by_hash_ids('6157254a4423', 'bf6386c0a0cc')
|
|
37
|
+
commits.map(&:hash_id).sort.must_equal %w(6157254a442343181939c7af1a744cf2a16afcce bf6386c0a0ccd1282dbbe51888f52fe82b1806e3).sort
|
|
38
|
+
commits.map(&:author_email).uniq.must_equal %w(ilya.sabanin@gmail.com)
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
it "should find all commits" do
|
|
42
|
+
commits = @repository.commits.all
|
|
43
|
+
(commits.size > 5).must_equal true
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
it "should find commits by branch" do
|
|
47
|
+
commits = @repository.commits.by_branch("new-branch")
|
|
48
|
+
commits.size.must_equal 3
|
|
49
|
+
commits.map(&:hash_id).sort.must_equal ["63e18640e83af60196334f16cc31f4f99c419918", "63f70b2314ede1e12813cae87f6f303ee8d5c09a", "bc729b15e2b556065dd4f32c161f54be5dd92776"].sort
|
|
50
|
+
end
|
|
51
|
+
|
|
52
|
+
it "should not find commits for inexistent branch" do
|
|
53
|
+
lambda { @repository.commits.by_branch("shikaka") }.must_raise Mercurial::CommandError
|
|
54
|
+
end
|
|
55
|
+
|
|
56
|
+
it "should find tip commit" do
|
|
57
|
+
tip = @repository.commits.tip
|
|
58
|
+
tip.must_be_kind_of Mercurial::Commit
|
|
59
|
+
end
|
|
60
|
+
|
|
61
|
+
it "should count commits" do
|
|
62
|
+
count = @repository.commits.count
|
|
63
|
+
count.must_equal 36
|
|
64
|
+
end
|
|
65
|
+
|
|
66
|
+
it "should iterate through commits" do
|
|
67
|
+
@repository.commits.each do |c|
|
|
68
|
+
c.must_be_kind_of Mercurial::Commit
|
|
69
|
+
end
|
|
70
|
+
end
|
|
71
|
+
|
|
72
|
+
it "should find commits for range" do
|
|
73
|
+
commits = @repository.commits.for_range('bc729b15e2b5', 'a07263ded072')
|
|
74
|
+
commits.map(&:hash_id).sort.must_equal ['bc729b15e2b556065dd4f32c161f54be5dd92776', '63f70b2314ede1e12813cae87f6f303ee8d5c09a', '6157254a442343181939c7af1a744cf2a16afcce', 'a07263ded0729d146062e6ec076cf1e6af214218'].sort
|
|
75
|
+
end
|
|
76
|
+
|
|
77
|
+
it "should return nil instead of latest commit if it's blank" do
|
|
78
|
+
FileUtils.rm_rf('/tmp/new-crazy-repo')
|
|
79
|
+
Mercurial::Repository.create('/tmp/new-crazy-repo').commits.latest.must_equal nil
|
|
80
|
+
end
|
|
81
|
+
|
|
82
|
+
private
|
|
83
|
+
|
|
84
|
+
def really_long_commit_message
|
|
85
|
+
%q[check-code: disallow use of hasattr()
|
|
86
|
+
|
|
87
|
+
The hasattr() builtin from Python < 3.2 [1] has slightly surprising
|
|
88
|
+
behavior: it catches all exceptions, even KeyboardInterrupt. This
|
|
89
|
+
causes it to have several surprising side effects, such as hiding
|
|
90
|
+
warnings that occur during attribute load and causing mysterious
|
|
91
|
+
failure modes when ^Cing an application. In later versions of Python
|
|
92
|
+
2.x [0], exception classes which do not inherit from Exception (such
|
|
93
|
+
as SystemExit and KeyboardInterrupt) are not caught, but other types
|
|
94
|
+
of exceptions may still silently cause returning False instead of
|
|
95
|
+
getting a reasonable exception.
|
|
96
|
+
|
|
97
|
+
[0] http://bugs.python.org/issue2196
|
|
98
|
+
[1] http://docs.python.org/dev/whatsnew/3.2.html]
|
|
99
|
+
end
|
|
100
|
+
|
|
101
|
+
end
|
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
require 'helper'
|
|
2
|
+
|
|
3
|
+
describe Mercurial::ConfigFile do
|
|
4
|
+
|
|
5
|
+
before do
|
|
6
|
+
@repository = Mercurial::Repository.create('/tmp/configfile-test.hg')
|
|
7
|
+
@config = @repository.config
|
|
8
|
+
stub_hgrc(@config.path)
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
after do
|
|
12
|
+
@repository.destroy!
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
it "should state as existing" do
|
|
16
|
+
@config.exists?.must_equal true
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
it "should have content" do
|
|
20
|
+
@config.contents.size.must_equal 324
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
it "should add setting" do
|
|
24
|
+
@config.add_setting('hooks', 'incoming', 'hg update')
|
|
25
|
+
@config.contents.must_equal hgrc_with_incoming_hook_added
|
|
26
|
+
@config.find_header('hooks').size.must_equal 3
|
|
27
|
+
@config.find_setting('hooks', 'incoming').must_equal "incoming = hg update\n"
|
|
28
|
+
@config.find_setting('hooks', 'commit').must_equal "commit =/Users/ilya/work/beanstalk/script/mercurial/commit.rb\n\n"
|
|
29
|
+
@config.find_setting('hooks', 'sfdf').must_equal nil
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
it "should delete settings" do
|
|
33
|
+
@config.delete_setting!('hooks', 'commit')
|
|
34
|
+
@config.contents.must_equal hgrc_with_commit_hook_deleted
|
|
35
|
+
@config.find_header('hooks').size.must_equal 1
|
|
36
|
+
@config.find_setting('hooks', 'commit').must_equal nil
|
|
37
|
+
@config.find_setting('hooks', 'changegroup').must_equal "changegroup = /Users/ilya/work/beanstalk/script/mercurial/changegroup.rb\n"
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
it "should add settings with new header" do
|
|
41
|
+
@config.add_setting('somethingelse', 'shikaka', 'True')
|
|
42
|
+
@config.contents.must_equal hgrc_with_new_standalone_setting
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
it "should add settings even if config is missing" do
|
|
46
|
+
FileUtils.rm_rf('/tmp/another-repo')
|
|
47
|
+
repository = Mercurial::Repository.create('/tmp/another-repo')
|
|
48
|
+
repository.config.add_setting("something", "super", "True")
|
|
49
|
+
repository.config.contents.must_equal "[something]\nsuper = True\n"
|
|
50
|
+
end
|
|
51
|
+
|
|
52
|
+
private
|
|
53
|
+
|
|
54
|
+
def hgrc_with_incoming_hook_added
|
|
55
|
+
%q[[paths]
|
|
56
|
+
default = http://selenic.com/hg
|
|
57
|
+
|
|
58
|
+
[hooks]
|
|
59
|
+
incoming = hg update
|
|
60
|
+
changegroup = /Users/ilya/work/beanstalk/script/mercurial/changegroup.rb
|
|
61
|
+
commit =/Users/ilya/work/beanstalk/script/mercurial/commit.rb
|
|
62
|
+
|
|
63
|
+
[ui]
|
|
64
|
+
username = Firstname Lastname <firstname.lastname@example.net>
|
|
65
|
+
verbose = True
|
|
66
|
+
|
|
67
|
+
# [revlog]
|
|
68
|
+
# format=0 for revlog; format=1 for revlogng]
|
|
69
|
+
end
|
|
70
|
+
|
|
71
|
+
def hgrc_with_commit_hook_deleted
|
|
72
|
+
%q[[paths]
|
|
73
|
+
default = http://selenic.com/hg
|
|
74
|
+
|
|
75
|
+
[hooks]
|
|
76
|
+
changegroup = /Users/ilya/work/beanstalk/script/mercurial/changegroup.rb
|
|
77
|
+
[ui]
|
|
78
|
+
username = Firstname Lastname <firstname.lastname@example.net>
|
|
79
|
+
verbose = True
|
|
80
|
+
|
|
81
|
+
# [revlog]
|
|
82
|
+
# format=0 for revlog; format=1 for revlogng]
|
|
83
|
+
end
|
|
84
|
+
|
|
85
|
+
def hgrc_with_new_standalone_setting
|
|
86
|
+
%q[[paths]
|
|
87
|
+
default = http://selenic.com/hg
|
|
88
|
+
|
|
89
|
+
[hooks]
|
|
90
|
+
changegroup = /Users/ilya/work/beanstalk/script/mercurial/changegroup.rb
|
|
91
|
+
commit =/Users/ilya/work/beanstalk/script/mercurial/commit.rb
|
|
92
|
+
|
|
93
|
+
[ui]
|
|
94
|
+
username = Firstname Lastname <firstname.lastname@example.net>
|
|
95
|
+
verbose = True
|
|
96
|
+
|
|
97
|
+
# [revlog]
|
|
98
|
+
# format=0 for revlog; format=1 for revlogng
|
|
99
|
+
|
|
100
|
+
[somethingelse]
|
|
101
|
+
shikaka = True
|
|
102
|
+
]
|
|
103
|
+
end
|
|
104
|
+
|
|
105
|
+
end
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
require 'helper'
|
|
2
|
+
|
|
3
|
+
describe Mercurial::Configuration do
|
|
4
|
+
|
|
5
|
+
before do
|
|
6
|
+
@config = Mercurial.configuration
|
|
7
|
+
end
|
|
8
|
+
|
|
9
|
+
after do
|
|
10
|
+
Mercurial.configure do |config|
|
|
11
|
+
config.hg_binary_path = '/usr/local/bin/hg'
|
|
12
|
+
end
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
it "should have default values" do
|
|
16
|
+
@config.hg_binary_path.must_equal '/usr/local/bin/hg'
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
it "should change values with configure block" do
|
|
20
|
+
Mercurial.configure do |config|
|
|
21
|
+
config.hg_binary_path = '/usr/bin/hg'
|
|
22
|
+
end
|
|
23
|
+
@config.hg_binary_path.must_equal '/usr/bin/hg'
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
end
|
data/test/test_diff.rb
ADDED
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
require 'helper'
|
|
2
|
+
|
|
3
|
+
describe Mercurial::Diff do
|
|
4
|
+
|
|
5
|
+
before do
|
|
6
|
+
@repository = Mercurial::Repository.open(Fixtures.test_repo)
|
|
7
|
+
@commit = @repository.commits.by_hash_id('34f85a44acf1')
|
|
8
|
+
@diff = @commit.diffs.first
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
it "should have hash_a and hash_b" do
|
|
12
|
+
@diff.hash_a.must_equal '25bb5c51fd61'
|
|
13
|
+
@diff.hash_b.must_equal '34f85a44acf1'
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
it "should have file_a and file_b" do
|
|
17
|
+
@diff.file_a.must_equal 'Rakefile'
|
|
18
|
+
@diff.file_b.must_equal 'Rakefile'
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
it "should have body" do
|
|
22
|
+
@diff.body.strip.must_equal expected_diff.strip
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
private
|
|
26
|
+
|
|
27
|
+
def expected_diff
|
|
28
|
+
%q[--- a/Rakefile Thu Jul 28 00:09:22 2011 +0800
|
|
29
|
+
+++ b/Rakefile Thu Jul 28 02:03:13 2011 +0800
|
|
30
|
+
@@ -1,5 +1,7 @@
|
|
31
|
+
# encoding: utf-8
|
|
32
|
+
|
|
33
|
+
+test
|
|
34
|
+
+
|
|
35
|
+
require 'rubygems'
|
|
36
|
+
require 'bundler']
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
end
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
require 'helper'
|
|
2
|
+
|
|
3
|
+
describe Mercurial::DiffFactory do
|
|
4
|
+
|
|
5
|
+
before do
|
|
6
|
+
@repository = Mercurial::Repository.open(Fixtures.test_repo)
|
|
7
|
+
end
|
|
8
|
+
|
|
9
|
+
it "should find diffs for commit" do
|
|
10
|
+
commit = @repository.commits.by_hash_id('54d96f4b1a26')
|
|
11
|
+
diffs = @repository.diffs.for_commit(commit)
|
|
12
|
+
diffs.size.must_equal 6
|
|
13
|
+
diffs.map(&:file_name).sort.must_equal ['LICENSE4.txt', 'README.markup', 'Rakefile', 'Rakefile2', 'Rakefile3', 'superman.txt']
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
it "should work for files with dots in their names" do
|
|
17
|
+
commit = @repository.commits.by_hash_id('b66320fa72aa')
|
|
18
|
+
diffs = commit.diffs
|
|
19
|
+
diffs.size.must_equal 1
|
|
20
|
+
diffs.first.file_name.must_equal '.DotFile'
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
it "should handle binary files properly" do
|
|
24
|
+
commit = @repository.commits.by_hash_id('c2b3e46b986e')
|
|
25
|
+
commit.diffs.size.must_equal 1
|
|
26
|
+
diff = commit.diffs.first
|
|
27
|
+
diff.must_be_kind_of Mercurial::Diff
|
|
28
|
+
diff.file_name.must_equal 'goose.png'
|
|
29
|
+
diff.body.must_equal 'Binary files differ'
|
|
30
|
+
diff.binary?.must_equal true
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
it "should handle empty files properly" do
|
|
34
|
+
commit = @repository.commits.by_hash_id('8173f122b0d0')
|
|
35
|
+
commit.diffs.size.must_equal 0
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
end
|
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
require 'helper'
|
|
2
|
+
|
|
3
|
+
describe Mercurial::FileIndex do
|
|
4
|
+
|
|
5
|
+
before do
|
|
6
|
+
@repository = Mercurial::Repository.open(Fixtures.test_repo)
|
|
7
|
+
@file_index = @repository.file_index
|
|
8
|
+
@file_index.update
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
after do
|
|
12
|
+
@file_index.destroy!
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
it "should update index" do
|
|
16
|
+
File.exists?(@file_index.send(:path)).must_equal true
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
it "should read index even if missing" do
|
|
20
|
+
repository = Mercurial::Repository.create('/tmp/test-repo-bla-bla.hg')
|
|
21
|
+
file_index = repository.file_index
|
|
22
|
+
file_index.count_all.must_equal 0
|
|
23
|
+
repository.destroy!
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
it "should count all commits" do
|
|
27
|
+
@file_index.count_all.must_equal 36
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
it "should count commits reachable by specific hash id" do
|
|
31
|
+
@file_index.count('612af4851a6c483f499cadf1dd28040d7996aa78').must_equal 12
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
it "should return commits that are reachable by specific hash id" do
|
|
35
|
+
commits = @file_index.commits_from('a07263ded0729d146062e6ec076cf1e6af214218')
|
|
36
|
+
commits.must_equal ["a07263ded0729d146062e6ec076cf1e6af214218", "bf6386c0a0ccd1282dbbe51888f52fe82b1806e3"]
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
it "should return files changed at commit" do
|
|
40
|
+
files = @file_index.files('a8b39838302fc5aad12bb6b043331b9ef50149ed')
|
|
41
|
+
files.size.must_equal 2
|
|
42
|
+
files.sort.must_equal ["new-directory/subdirectory/EULA5seat_Chin_Sim02.03.04.pdf", "new-directory/subdirectory/beansprout.png"].sort
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
it "should work with files with white-spaces in names" do
|
|
46
|
+
files = @file_index.files('8ddac5f6380ec3094e6c6bb161d7d90e2de16cb0')
|
|
47
|
+
files.size.must_equal 1
|
|
48
|
+
files.sort.must_equal ["File With Whitespace.pdf"].sort
|
|
49
|
+
end
|
|
50
|
+
|
|
51
|
+
it "should not return files for commit that doesn't exist" do
|
|
52
|
+
files = @file_index.files('f63dvf38302fc5aad12bb6b043331b9ef50149ed')
|
|
53
|
+
files.must_equal []
|
|
54
|
+
end
|
|
55
|
+
|
|
56
|
+
it "should return commits for a file" do
|
|
57
|
+
commits = @file_index.commits_for('LICENSE3.txt')
|
|
58
|
+
commits.must_equal %w(612af4851a6c483f499cadf1dd28040d7996aa78)
|
|
59
|
+
end
|
|
60
|
+
|
|
61
|
+
it "should not return commits for file that doesn't exist" do
|
|
62
|
+
commits = @file_index.commits_for('doesntexist')
|
|
63
|
+
commits.must_equal []
|
|
64
|
+
end
|
|
65
|
+
|
|
66
|
+
it "should return last commits for files" do
|
|
67
|
+
commits = @file_index.last_commits('207476112e024921b1538a096e5f6812d0698cab', ['README.markup'])
|
|
68
|
+
commits.must_equal({ "README.markup" => "54d96f4b1a260dc5614e89c1ed8c2d2edaa4942f" })
|
|
69
|
+
|
|
70
|
+
commits = @file_index.last_commits('bf6386c0a0ccd1282dbbe51888f52fe82b1806e3', ['README.markup'])
|
|
71
|
+
commits.must_equal({})
|
|
72
|
+
|
|
73
|
+
commits = @file_index.last_commits('f2b8b135f3a6f254d5ca20e293bffdad03336e57', ['empty-file', 'goose.png'])
|
|
74
|
+
commits.must_equal({ "goose.png"=>"c2b3e46b986e99220e3d2fdb6e44aedbc94b3a85", "empty-file" => "8173f122b0d061e8d398862f1eaf601babf156aa" })
|
|
75
|
+
|
|
76
|
+
commits = @file_index.last_commits('207476112e024921b1538a096e5f6812d0698cab', ['doesntexist'])
|
|
77
|
+
commits.must_equal({})
|
|
78
|
+
end
|
|
79
|
+
|
|
80
|
+
it "should return last commits with regex" do
|
|
81
|
+
commits = @file_index.last_commits('1b99d0243f8e5542c1b33a013b63130f9009ac52', /^new-directory\/[^\s\/]+\/?$/)
|
|
82
|
+
commits.size.must_equal 1
|
|
83
|
+
commits.values.first.must_equal '4474d1ddaf653cb7fbf18bb62ff1e39a4e571969'
|
|
84
|
+
end
|
|
85
|
+
|
|
86
|
+
it "should update existing index by adding a range of commits to it" do
|
|
87
|
+
File.open(@file_index.path, 'w') do |index_file|
|
|
88
|
+
index_file << preset_sample_index
|
|
89
|
+
end
|
|
90
|
+
@file_index.count_all.must_equal 2
|
|
91
|
+
@file_index.update('63f70b2314ede1e12813cae87f6f303ee8d5c09a', 'a8b39838302fc5aad12bb6b043331b9ef50149ed')
|
|
92
|
+
@file_index.reload
|
|
93
|
+
@file_index.count_all.must_equal 26
|
|
94
|
+
@file_index.instance_variable_get('@commit_index').keys.sort.must_equal(['bf6386c0a0ccd1282dbbe51888f52fe82b1806e3', 'bc729b15e2b556065dd4f32c161f54be5dd92776', '63f70b2314ede1e12813cae87f6f303ee8d5c09a', '6157254a442343181939c7af1a744cf2a16afcce', 'a07263ded0729d146062e6ec076cf1e6af214218', '3cdad3d3ca0054ebfcd2652cc83442bd0d272bbb', '25bb5c51fd613b8b58d88ef1caf99da559af51f3', '63e18640e83af60196334f16cc31f4f99c419918', '8fc3d59965d71a9b83308c53a76f3af0235b6eb6', '0f41dd2ec1667518741da599db7264943c9ed472', '16fac694db0a52edfd266576acafb475f7f8420f', '34f85a44acf11c3386f771a65445d6c39e5261d6', '4474d1ddaf653cb7fbf18bb62ff1e39a4e571969', 'cd9fa0c59c7f189fa1d70edea564e534ac9478d0', '611407bf9b369e061eaf0bee1a261c9e62ad713d', 'd14b0c16b21d9d3e08101ef264959a7d91a8b5db', '3e1ea66bdd04dbfb8d91e4f2de3baca218cd4cca', 'bbfe40f4a56961bdfc6b497a19cc35e18f2d40a3', '4e9f11e95eade74c55fc785e3159015f8a472f4b', '11998206a49ca9a55b4065508ce6ca10945e3e73', '1b99d0243f8e5542c1b33a013b63130f9009ac52', '612af4851a6c483f499cadf1dd28040d7996aa78', '54d96f4b1a260dc5614e89c1ed8c2d2edaa4942f', '207476112e024921b1538a096e5f6812d0698cab', 'ea1e37a728e989176e9e7b33f0d0e035fd347623', 'a8b39838302fc5aad12bb6b043331b9ef50149ed'].sort)
|
|
95
|
+
end
|
|
96
|
+
|
|
97
|
+
private
|
|
98
|
+
|
|
99
|
+
# contains two oldest commits only
|
|
100
|
+
def preset_sample_index
|
|
101
|
+
%q[bf6386c0a0ccd1282dbbe51888f52fe82b1806e3 0000000000000000000000000000000000000000 0000000000000000000000000000000000000000 Initial files.
|
|
102
|
+
LICENSE.txt
|
|
103
|
+
README.markdown
|
|
104
|
+
Rakefile
|
|
105
|
+
|
|
106
|
+
bc729b15e2b556065dd4f32c161f54be5dd92776 bf6386c0a0ccd1282dbbe51888f52fe82b1806e3 0000000000000000000000000000000000000000 Directory added
|
|
107
|
+
directory_1/rubygems_dot_org_tasks.rb
|
|
108
|
+
directory_1/rubygems_tasks.rb
|
|
109
|
+
directory_1/specification.rb
|
|
110
|
+
directory_1/tasks.rb]
|
|
111
|
+
end
|
|
112
|
+
|
|
113
|
+
end
|
data/test/test_hook.rb
ADDED
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
require 'helper'
|
|
2
|
+
|
|
3
|
+
describe Mercurial::Hook do
|
|
4
|
+
|
|
5
|
+
before do
|
|
6
|
+
@repository = Mercurial::Repository.create('/tmp/test-hg-repo')
|
|
7
|
+
stub_hgrc(@repository.config.path)
|
|
8
|
+
@hook = @repository.hooks.by_name('changegroup')
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
after do
|
|
12
|
+
@repository.destroy!
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
it "should have name" do
|
|
16
|
+
@hook.name.must_equal 'changegroup'
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
it "should have value" do
|
|
20
|
+
@hook.value.must_equal '/Users/ilya/work/beanstalk/script/mercurial/changegroup.rb'
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
it "should have repository" do
|
|
24
|
+
@hook.repository.must_equal @repository
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
it "should add itself to the config" do
|
|
28
|
+
hook = Mercurial::Hook.new(@repository, 'outcoming', 'hg update')
|
|
29
|
+
hook.save
|
|
30
|
+
@repository.hooks.by_name('outcoming').value.must_equal 'hg update'
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
it "should remove itself from the config" do
|
|
34
|
+
@hook.destroy!
|
|
35
|
+
@repository.hooks.by_name('changegroup').must_equal nil
|
|
36
|
+
@repository.hooks.by_name('commit').value.must_equal '/Users/ilya/work/beanstalk/script/mercurial/commit.rb'
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
end
|