mercurial-ruby 0.3.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (173) hide show
  1. data/.document +5 -0
  2. data/Gemfile +10 -0
  3. data/Gemfile.lock +32 -0
  4. data/LICENSE.txt +20 -0
  5. data/README.rdoc +86 -0
  6. data/Rakefile +53 -0
  7. data/VERSION +1 -0
  8. data/lib/mercurial-ruby.rb +66 -0
  9. data/lib/mercurial-ruby/branch.rb +45 -0
  10. data/lib/mercurial-ruby/changed_file.rb +51 -0
  11. data/lib/mercurial-ruby/command.rb +77 -0
  12. data/lib/mercurial-ruby/commit.rb +152 -0
  13. data/lib/mercurial-ruby/config_file.rb +119 -0
  14. data/lib/mercurial-ruby/configuration.rb +14 -0
  15. data/lib/mercurial-ruby/diff.rb +50 -0
  16. data/lib/mercurial-ruby/factories/branch_factory.rb +91 -0
  17. data/lib/mercurial-ruby/factories/changed_file_factory.rb +50 -0
  18. data/lib/mercurial-ruby/factories/commit_factory.rb +154 -0
  19. data/lib/mercurial-ruby/factories/diff_factory.rb +63 -0
  20. data/lib/mercurial-ruby/factories/hook_factory.rb +45 -0
  21. data/lib/mercurial-ruby/factories/node_factory.rb +111 -0
  22. data/lib/mercurial-ruby/factories/tag_factory.rb +48 -0
  23. data/lib/mercurial-ruby/file_index.rb +209 -0
  24. data/lib/mercurial-ruby/helper.rb +23 -0
  25. data/lib/mercurial-ruby/hook.rb +23 -0
  26. data/lib/mercurial-ruby/manifest.rb +58 -0
  27. data/lib/mercurial-ruby/node.rb +100 -0
  28. data/lib/mercurial-ruby/repository.rb +94 -0
  29. data/lib/mercurial-ruby/root_node.rb +27 -0
  30. data/lib/mercurial-ruby/shell.rb +64 -0
  31. data/lib/mercurial-ruby/style.rb +23 -0
  32. data/lib/mercurial-ruby/tag.rb +33 -0
  33. data/lib/stdlib_exts/string.rb +12 -0
  34. data/lib/styles/changeset.style +5 -0
  35. data/lib/styles/file_index.style +3 -0
  36. data/mercurial-ruby.gemspec +227 -0
  37. data/test/fixtures.rb +28 -0
  38. data/test/fixtures/test-repo/.DotFile +1 -0
  39. data/test/fixtures/test-repo/.hg/00changelog.i +0 -0
  40. data/test/fixtures/test-repo/.hg/branch +1 -0
  41. data/test/fixtures/test-repo/.hg/cache/branchheads +6 -0
  42. data/test/fixtures/test-repo/.hg/cache/tags +7 -0
  43. data/test/fixtures/test-repo/.hg/dirstate +0 -0
  44. data/test/fixtures/test-repo/.hg/hgrc +3 -0
  45. data/test/fixtures/test-repo/.hg/last-message.txt +1 -0
  46. data/test/fixtures/test-repo/.hg/requires +4 -0
  47. data/test/fixtures/test-repo/.hg/store/00changelog.i +0 -0
  48. data/test/fixtures/test-repo/.hg/store/00manifest.i +0 -0
  49. data/test/fixtures/test-repo/.hg/store/data/_file _with _whitespace.pdf.i +0 -0
  50. data/test/fixtures/test-repo/.hg/store/data/_l_i_c_e_n_s_e.txt.i +0 -0
  51. data/test/fixtures/test-repo/.hg/store/data/_l_i_c_e_n_s_e2.txt.i +0 -0
  52. data/test/fixtures/test-repo/.hg/store/data/_l_i_c_e_n_s_e3.txt.i +0 -0
  53. data/test/fixtures/test-repo/.hg/store/data/_l_i_c_e_n_s_e4.txt.i +0 -0
  54. data/test/fixtures/test-repo/.hg/store/data/_r_e_a_d_m_e.markdown.i +0 -0
  55. data/test/fixtures/test-repo/.hg/store/data/_r_e_a_d_m_e.markup.i +0 -0
  56. data/test/fixtures/test-repo/.hg/store/data/_rakefile.i +0 -0
  57. data/test/fixtures/test-repo/.hg/store/data/_rakefile2.i +0 -0
  58. data/test/fixtures/test-repo/.hg/store/data/_rakefile3.i +0 -0
  59. data/test/fixtures/test-repo/.hg/store/data/check ~5c this ~5c out ~22 now.i +0 -0
  60. data/test/fixtures/test-repo/.hg/store/data/directory two/minitest__mixin.rb.i +0 -0
  61. data/test/fixtures/test-repo/.hg/store/data/directory two/options.rb.i +0 -0
  62. data/test/fixtures/test-repo/.hg/store/data/directory two/rdoc__mixin.rb.i +0 -0
  63. data/test/fixtures/test-repo/.hg/store/data/directory two/rspec__mixin.rb.i +0 -0
  64. data/test/fixtures/test-repo/.hg/store/data/directory two/shindo__mixin.rb.i +0 -0
  65. data/test/fixtures/test-repo/.hg/store/data/directory two/shoulda__mixin.rb.i +0 -0
  66. data/test/fixtures/test-repo/.hg/store/data/directory two/templates/_gemfile.i +0 -0
  67. data/test/fixtures/test-repo/.hg/store/data/directory two/templates/_l_i_c_e_n_s_e.txt.i +0 -0
  68. data/test/fixtures/test-repo/.hg/store/data/directory two/templates/_r_e_a_d_m_e.rdoc.i +0 -0
  69. data/test/fixtures/test-repo/.hg/store/data/directory two/templates/_rakefile.i +0 -0
  70. data/test/fixtures/test-repo/.hg/store/data/directory two/templates/bacon/flunking.rb.i +0 -0
  71. data/test/fixtures/test-repo/.hg/store/data/directory two/templates/bacon/helper.rb.i +0 -0
  72. data/test/fixtures/test-repo/.hg/store/data/directory two/templates/bundler__setup.erb.i +0 -0
  73. data/test/fixtures/test-repo/.hg/store/data/directory two/templates/features/default.feature.i +0 -0
  74. data/test/fixtures/test-repo/.hg/store/data/directory two/templates/features/support/env.rb.i +0 -0
  75. data/test/fixtures/test-repo/.hg/store/data/directory two/templates/jeweler__tasks.erb.i +0 -0
  76. data/test/fixtures/test-repo/.hg/store/data/directory two/templates/micronaut/flunking.rb.i +0 -0
  77. data/test/fixtures/test-repo/.hg/store/data/directory two/templates/micronaut/helper.rb.i +0 -0
  78. data/test/fixtures/test-repo/.hg/store/data/directory two/templates/minitest/flunking.rb.i +0 -0
  79. data/test/fixtures/test-repo/.hg/store/data/directory two/templates/minitest/helper.rb.i +0 -0
  80. data/test/fixtures/test-repo/.hg/store/data/directory two/templates/other__tasks.erb.i +0 -0
  81. data/test/fixtures/test-repo/.hg/store/data/directory two/templates/riot/flunking.rb.i +0 -0
  82. data/test/fixtures/test-repo/.hg/store/data/directory two/templates/riot/helper.rb.i +0 -0
  83. data/test/fixtures/test-repo/.hg/store/data/directory two/templates/rspec/flunking.rb.i +0 -0
  84. data/test/fixtures/test-repo/.hg/store/data/directory two/templates/rspec/helper.rb.i +0 -0
  85. data/test/fixtures/test-repo/.hg/store/data/directory two/templates/rspec/~2erspec.i +0 -0
  86. data/test/fixtures/test-repo/.hg/store/data/directory two/templates/shindo/flunking.rb.i +0 -0
  87. data/test/fixtures/test-repo/.hg/store/data/directory two/templates/shindo/helper.rb.i +0 -0
  88. data/test/fixtures/test-repo/.hg/store/data/directory two/templates/shoulda/flunking.rb.i +0 -0
  89. data/test/fixtures/test-repo/.hg/store/data/directory two/templates/shoulda/helper.rb.i +0 -0
  90. data/test/fixtures/test-repo/.hg/store/data/directory two/templates/testspec/flunking.rb.i +0 -0
  91. data/test/fixtures/test-repo/.hg/store/data/directory two/templates/testspec/helper.rb.i +0 -0
  92. data/test/fixtures/test-repo/.hg/store/data/directory two/templates/testunit/flunking.rb.i +0 -0
  93. data/test/fixtures/test-repo/.hg/store/data/directory two/templates/testunit/helper.rb.i +0 -0
  94. data/test/fixtures/test-repo/.hg/store/data/directory two/templates/~2edocument.i +0 -0
  95. data/test/fixtures/test-repo/.hg/store/data/directory two/templates/~2egitignore.i +0 -0
  96. data/test/fixtures/test-repo/.hg/store/data/directory two/~2e_d_s___store.i +0 -0
  97. data/test/fixtures/test-repo/.hg/store/data/directory__1/rubygems__dot__org__tasks.rb.i +0 -0
  98. data/test/fixtures/test-repo/.hg/store/data/directory__1/rubygems__tasks.rb.i +0 -0
  99. data/test/fixtures/test-repo/.hg/store/data/directory__1/specification.rb.i +0 -0
  100. data/test/fixtures/test-repo/.hg/store/data/directory__1/tasks.rb.i +0 -0
  101. data/test/fixtures/test-repo/.hg/store/data/directory__1/~2e_d_s___store.i +0 -0
  102. data/test/fixtures/test-repo/.hg/store/data/empty-file.i +0 -0
  103. data/test/fixtures/test-repo/.hg/store/data/goose.png.i +0 -0
  104. data/test/fixtures/test-repo/.hg/store/data/goose/pretty-thing.txt.i +0 -0
  105. data/test/fixtures/test-repo/.hg/store/data/new-directory/another-boring-file.i +0 -0
  106. data/test/fixtures/test-repo/.hg/store/data/new-directory/something.csv.i +0 -0
  107. data/test/fixtures/test-repo/.hg/store/data/new-directory/subdirectory/_e_u_l_a5seat___chin___sim02.03.04.pdf.d +0 -0
  108. data/test/fixtures/test-repo/.hg/store/data/new-directory/subdirectory/_e_u_l_a5seat___chin___sim02.03.04.pdf.i +0 -0
  109. data/test/fixtures/test-repo/.hg/store/data/new-directory/subdirectory/_file _with _whitespace.pdf.i +0 -0
  110. data/test/fixtures/test-repo/.hg/store/data/new-directory/subdirectory/beansprout.png.i +0 -0
  111. data/test/fixtures/test-repo/.hg/store/data/new-file.i +0 -0
  112. data/test/fixtures/test-repo/.hg/store/data/old-directory/minitest__mixin.rb.i +0 -0
  113. data/test/fixtures/test-repo/.hg/store/data/old-directory/options.rb.i +0 -0
  114. data/test/fixtures/test-repo/.hg/store/data/old-directory/rspec__mixin.rb.i +0 -0
  115. data/test/fixtures/test-repo/.hg/store/data/old-directory/shindo__mixin.rb.i +0 -0
  116. data/test/fixtures/test-repo/.hg/store/data/old-directory/testunit__mixin.rb.i +0 -0
  117. data/test/fixtures/test-repo/.hg/store/data/old-directory/yard__mixin.rb.i +0 -0
  118. data/test/fixtures/test-repo/.hg/store/data/riot__mixin.rb.i +0 -0
  119. data/test/fixtures/test-repo/.hg/store/data/riot__mixin__copy.rb.i +0 -0
  120. data/test/fixtures/test-repo/.hg/store/data/style.i +0 -0
  121. data/test/fixtures/test-repo/.hg/store/data/super-cow.i +0 -0
  122. data/test/fixtures/test-repo/.hg/store/data/superman.txt.i +0 -0
  123. data/test/fixtures/test-repo/.hg/store/data/testspec__mixin.rb.i +0 -0
  124. data/test/fixtures/test-repo/.hg/store/data/testspec__mixin__new.rb.i +0 -0
  125. data/test/fixtures/test-repo/.hg/store/data/~2e_dot_file.i +0 -0
  126. data/test/fixtures/test-repo/.hg/store/data/~2ehgignore.i +0 -0
  127. data/test/fixtures/test-repo/.hg/store/data/~2ehgtags.i +0 -0
  128. data/test/fixtures/test-repo/.hg/store/fncache +79 -0
  129. data/test/fixtures/test-repo/.hg/store/undo +0 -0
  130. data/test/fixtures/test-repo/.hg/undo.bookmarks +0 -0
  131. data/test/fixtures/test-repo/.hg/undo.branch +1 -0
  132. data/test/fixtures/test-repo/.hg/undo.desc +2 -0
  133. data/test/fixtures/test-repo/.hg/undo.dirstate +0 -0
  134. data/test/fixtures/test-repo/.hgignore +1 -0
  135. data/test/fixtures/test-repo/.hgtags +1 -0
  136. data/test/fixtures/test-repo/LICENSE3.txt +15 -0
  137. data/test/fixtures/test-repo/LICENSE4.txt +17 -0
  138. data/test/fixtures/test-repo/README.markup +218 -0
  139. data/test/fixtures/test-repo/Rakefile3 +83 -0
  140. data/test/fixtures/test-repo/check // this // out /" now" "b/data/test/fixtures/test-repo/check // this // out / → now +0 -0
  141. data/test/fixtures/test-repo/empty-file +0 -0
  142. data/test/fixtures/test-repo/goose.png +0 -0
  143. data/test/fixtures/test-repo/goose/pretty-thing.txt +0 -0
  144. data/test/fixtures/test-repo/new-directory/another-boring-file +78 -0
  145. data/test/fixtures/test-repo/new-directory/something.csv +1 -0
  146. data/test/fixtures/test-repo/new-directory/subdirectory/EULA5seat_Chin_Sim02.03.04.pdf +0 -0
  147. 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
  148. data/test/fixtures/test-repo/new-directory/subdirectory/beansprout.png +0 -0
  149. data/test/fixtures/test-repo/riot_mixin.rb +45 -0
  150. data/test/fixtures/test-repo/style +4 -0
  151. data/test/fixtures/test-repo/superman.txt +1 -0
  152. data/test/fixtures/test-repo/testspec_mixin_new.rb +44 -0
  153. data/test/helper.rb +41 -0
  154. data/test/test_branch_factory.rb +46 -0
  155. data/test/test_changed_file.rb +46 -0
  156. data/test/test_changed_file_factory.rb +16 -0
  157. data/test/test_command.rb +62 -0
  158. data/test/test_commit.rb +66 -0
  159. data/test/test_commit_factory.rb +101 -0
  160. data/test/test_config_file.rb +105 -0
  161. data/test/test_configuration.rb +26 -0
  162. data/test/test_diff.rb +39 -0
  163. data/test/test_diff_factory.rb +38 -0
  164. data/test/test_file_index.rb +113 -0
  165. data/test/test_hook.rb +39 -0
  166. data/test/test_hook_factory.rb +40 -0
  167. data/test/test_manifest.rb +39 -0
  168. data/test/test_node.rb +34 -0
  169. data/test/test_node_factory.rb +125 -0
  170. data/test/test_repository.rb +58 -0
  171. data/test/test_shell.rb +33 -0
  172. data/test/test_tag_factory.rb +27 -0
  173. metadata +328 -0
File without changes
Binary file
File without changes
@@ -0,0 +1,78 @@
1
+ Mercurial Distributed SCM
2
+
3
+ list of commands:
4
+
5
+ add add the specified files on the next commit
6
+ addremove add all new files, delete all missing files
7
+ annotate show changeset information by line for each file
8
+ archive create an unversioned archive of a repository revision
9
+ backout reverse effect of earlier changeset
10
+ bisect subdivision search of changesets
11
+ bookmarks track a line of development with movable markers
12
+ branch set or show the current branch name
13
+ branches list repository named branches
14
+ bundle create a changegroup file
15
+ cat output the current or given revision of files
16
+ clone make a copy of an existing repository
17
+ commit commit the specified files or all outstanding changes
18
+ copy mark files as copied for the next commit
19
+ diff diff repository (or selected files)
20
+ export dump the header and diffs for one or more changesets
21
+ forget forget the specified files on the next commit
22
+ grep search for a pattern in specified files and revisions
23
+ heads show current repository heads or show branch heads
24
+ help show help for a given topic or a help overview
25
+ identify identify the working copy or specified revision
26
+ import import an ordered set of patches
27
+ incoming show new changesets found in source
28
+ init create a new repository in the given directory
29
+ locate locate files matching specific patterns
30
+ log show revision history of entire repository or files
31
+ manifest output the current or given revision of the project manifest
32
+ merge merge working directory with another revision
33
+ outgoing show changesets not found in the destination
34
+ parents show the parents of the working directory or revision
35
+ paths show aliases for remote repositories
36
+ pull pull changes from the specified source
37
+ push push changes to the specified destination
38
+ recover roll back an interrupted transaction
39
+ remove remove the specified files on the next commit
40
+ rename rename files; equivalent of copy + remove
41
+ resolve redo merges or set/view the merge status of files
42
+ revert restore files to their checkout state
43
+ rollback roll back the last transaction (dangerous)
44
+ root print the root (top) of the current working directory
45
+ serve start stand-alone webserver
46
+ showconfig show combined config settings from all hgrc files
47
+ status show changed files in the working directory
48
+ summary summarize working directory state
49
+ tag add one or more tags for the current or given revision
50
+ tags list repository tags
51
+ tip show the tip revision
52
+ unbundle apply one or more changegroup files
53
+ update update working directory (or switch revisions)
54
+ verify verify the integrity of the repository
55
+ version output version and copyright information
56
+
57
+ additional help topics:
58
+
59
+ config Configuration Files
60
+ dates Date Formats
61
+ diffs Diff Formats
62
+ environment Environment Variables
63
+ extensions Using additional features
64
+ filesets Specifying File Sets
65
+ glossary Glossary
66
+ hgignore syntax for Mercurial ignore files
67
+ hgweb Configuring hgweb
68
+ merge-tools Merge Tools
69
+ multirevs Specifying Multiple Revisions
70
+ patterns File Name Patterns
71
+ revisions Specifying Single Revisions
72
+ revsets Specifying Revision Sets
73
+ subrepos Subrepositories
74
+ templating Template Usage
75
+ urls URL Paths
76
+
77
+ use "hg -v help" to show builtin aliases and global options
78
+
@@ -0,0 +1 @@
1
+ Here will be some new kind of CSV.
@@ -0,0 +1,45 @@
1
+ class Jeweler
2
+ class Generator
3
+ module RiotMixin
4
+ def self.extended(generator)
5
+ # changed
6
+ generator.development_dependencies << ["riot", ">= 0"]
7
+ end
8
+
9
+ def default_task
10
+ 'test'
11
+ end
12
+
13
+ def feature_support_require
14
+ 'riot/context'
15
+ end
16
+
17
+ def feature_support_extend
18
+ 'Riot::Context'
19
+ end
20
+
21
+ def test_dir
22
+ 'test'
23
+ end
24
+
25
+ def test_task
26
+ 'test'
27
+ end
28
+
29
+ def test_pattern
30
+ 'test/**/*_test.rb'
31
+ end
32
+
33
+ def test_filename
34
+ "#{require_name}_test.rb"
35
+ end
36
+
37
+ def test_helper_filename
38
+ "teststrap.rb"
39
+ end
40
+
41
+ def tiny_change
42
+
43
+ end
44
+ end
45
+ end
@@ -0,0 +1,4 @@
1
+ changeset = "{node}\n{file_mods}{file_adds}{file_dels}"
2
+ file_add = "A {file_add}\n"
3
+ file_mod = "M {file_mod}\n"
4
+ file_del = "D {file_del}\n"
@@ -0,0 +1 @@
1
+ This is a superman file.
@@ -0,0 +1,44 @@
1
+ class Jeweler
2
+ class Generator
3
+ module TestspecMixin
4
+ def self.extended(generator)
5
+ generator.development_dependencies << ["test-spec", ">= 0"]
6
+ end
7
+
8
+ def default_task
9
+ 'test'
10
+ end
11
+
12
+ def feature_support_require
13
+ 'test/unit/assertions'
14
+ end
15
+
16
+ def feature_support_extend
17
+ 'Test::Unit::Assertions'
18
+ end
19
+
20
+ def test_dir
21
+ 'test'
22
+ end
23
+
24
+ def another_change
25
+
26
+ def test_task
27
+ 'test'
28
+ end
29
+
30
+ def test_pattern
31
+ 'test/**/*_test.rb'
32
+ end
33
+
34
+ def test_filename
35
+ "#{require_name}_test.rb"
36
+ end
37
+
38
+ def test_helper_filename
39
+ "test_helper.rb"
40
+ end
41
+
42
+ end
43
+ end
44
+ end
data/test/helper.rb ADDED
@@ -0,0 +1,41 @@
1
+ require 'rubygems'
2
+ require 'bundler'
3
+ require 'ruby-debug'
4
+
5
+ begin
6
+ Bundler.setup(:default, :development)
7
+ rescue Bundler::BundlerError => e
8
+ $stderr.puts e.message
9
+ $stderr.puts "Run `bundle install` to install missing gems"
10
+ exit e.status_code
11
+ end
12
+
13
+ require "mocha"
14
+ require "minitest/autorun"
15
+
16
+ $LOAD_PATH.unshift(File.dirname(__FILE__))
17
+ $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
18
+
19
+ require 'mercurial-ruby'
20
+ require 'fixtures'
21
+
22
+ $stderr.reopen('/dev/null')
23
+
24
+ class MiniTest::Unit::TestCase
25
+ include Mocha::API
26
+
27
+ def setup
28
+ Mocha::Mockery.instance.stubba.unstub_all
29
+ end
30
+
31
+ private
32
+
33
+ def stub_hgrc(path)
34
+ File.open(path, 'w') do |f|
35
+ f << Fixtures.hgrc_sample
36
+ end
37
+ end
38
+
39
+ end
40
+
41
+ MiniTest::Unit.autorun
@@ -0,0 +1,46 @@
1
+ require 'helper'
2
+
3
+ describe Mercurial::BranchFactory do
4
+
5
+ before do
6
+ @repository = Mercurial::Repository.open(Fixtures.test_repo)
7
+ end
8
+
9
+ it "should find all branches" do
10
+ branches = @repository.branches.all
11
+ branches.size.must_equal 5
12
+ branches.map(&:name).sort.must_equal %w(branch-from-remote another-branch new-branch old-branch default).sort
13
+ branches.map(&:status).sort.must_equal %w(active active closed active active).sort
14
+ end
15
+
16
+ it "should find active branches" do
17
+ branches = @repository.branches.active
18
+ branches.size.must_equal 4
19
+ branches.map(&:name).sort.must_equal %w(another-branch new-branch default branch-from-remote).sort
20
+ branches.map(&:status).must_equal %w(active active active active)
21
+ end
22
+
23
+ it "should find closed branches" do
24
+ branches = @repository.branches.closed
25
+ branches.size.must_equal 1
26
+ branches.map(&:name).must_equal %w(old-branch)
27
+ branches.map(&:status).must_equal %w(closed)
28
+ end
29
+
30
+ it "should find branch by name" do
31
+ branch = @repository.branches.by_name('new-branch')
32
+ branch.must_be_kind_of(Mercurial::Branch)
33
+ branch.status.must_equal 'active'
34
+ end
35
+
36
+ it "should not find a branch by inexistent name" do
37
+ @repository.branches.by_name('bla-branch-f').must_equal nil
38
+ end
39
+
40
+ it "should return branches for commit" do
41
+ branches = @repository.branches.for_commit('bf6386c0a0cc')
42
+ branches.size.must_equal 5
43
+ branches.map(&:name).sort.must_equal %w(old-branch new-branch branch-from-remote another-branch default).sort
44
+ end
45
+
46
+ end
@@ -0,0 +1,46 @@
1
+ require 'helper'
2
+
3
+ describe Mercurial::Commit do
4
+
5
+ before do
6
+ @repository = Mercurial::Repository.open(Fixtures.test_repo)
7
+ @commit = @repository.commits.by_hash_id('54d96f4b1a26')
8
+ @files = @commit.changed_files
9
+ end
10
+
11
+ it "should indicate modified file" do
12
+ file = @files[0]
13
+ file.initial_name.must_equal nil
14
+ file.name.must_equal 'README.markup'
15
+ file.mode.must_equal :edit
16
+ end
17
+
18
+ it "should indicate added file" do
19
+ file = @files[1]
20
+ file.initial_name.must_equal nil
21
+ file.name.must_equal 'superman.txt'
22
+ file.mode.must_equal :add
23
+ end
24
+
25
+ it "should indicate deleted file" do
26
+ file = @files[2]
27
+ file.initial_name.must_equal nil
28
+ file.name.must_equal 'Rakefile2'
29
+ file.mode.must_equal :delete
30
+ end
31
+
32
+ it "should indicate copied file" do
33
+ file = @files[3]
34
+ file.initial_name.must_equal 'LICENSE3.txt'
35
+ file.name.must_equal 'LICENSE4.txt'
36
+ file.mode.must_equal :copy
37
+ end
38
+
39
+ it "should indicate moved file" do
40
+ file = @files[4]
41
+ file.initial_name.must_equal 'Rakefile'
42
+ file.name.must_equal 'Rakefile3'
43
+ file.mode.must_equal :move
44
+ end
45
+
46
+ end
@@ -0,0 +1,16 @@
1
+ require 'helper'
2
+
3
+ describe Mercurial::ChangedFileFactory do
4
+
5
+ before do
6
+ @repository = Mercurial::Repository.open(Fixtures.test_repo)
7
+ @commit = @repository.commits.by_hash_id('b66320fa72aa')
8
+ @files = @commit.changed_files
9
+ end
10
+
11
+ it "should parse files with dot in their names properly" do
12
+ @files.size.must_equal 1
13
+ @files.first.name.must_equal '.DotFile'
14
+ end
15
+
16
+ end
@@ -0,0 +1,62 @@
1
+ require 'helper'
2
+
3
+ describe Mercurial::Command do
4
+
5
+ before do
6
+ @repository = Mercurial::Repository.open(Fixtures.test_repo)
7
+ end
8
+
9
+ it "should execute shell commands" do
10
+ output = Mercurial::Command.new("cd #{ @repository.path } && hg log").execute
11
+ (output.size > 100).must_equal true
12
+ end
13
+
14
+ it "should translate shell errors to ruby exceptions" do
15
+ lambda{
16
+ Mercurial::Command.new("cd #{ @repository.path } && hg shikaka").execute
17
+ }.must_raise Mercurial::CommandError
18
+ end
19
+
20
+ it "should execute commands with timeout" do
21
+ Mercurial.configuration.stubs(:shell_timeout).returns(1)
22
+ lambda{
23
+ Mercurial::Command.new("sleep 5").execute
24
+ }.must_raise Timeout::Error
25
+ end
26
+
27
+ it "should generate cache key for every command" do
28
+ key = Mercurial::Command.new("cd #{ @repository.path } && hg log", :repository => @repository).send(:cache_key)
29
+ key.must_be_kind_of String
30
+ (key.size > 10).must_equal true
31
+
32
+ key2 = Mercurial::Command.new("cd #{ @repository.path } && hg log", :repository => @repository).send(:cache_key)
33
+ key.must_equal key2
34
+
35
+ key3 = Mercurial::Command.new("cd #{ @repository.path } && hg log -v", :repository => @repository).send(:cache_key)
36
+ key3.wont_equal key2
37
+ key3.wont_equal key
38
+ end
39
+
40
+ it "should cache commands if cache store is available and command is called for repository" do
41
+ command = Mercurial::Command.new("cd #{ @repository.path } && hg log -v", :repository => @repository)
42
+ cache_store = mock('cache_store')
43
+ cache_store.expects(:fetch).with(command.send(:cache_key)).returns(true).once
44
+ Mercurial.configuration.stubs(:cache_store).returns(cache_store)
45
+ command.execute
46
+ end
47
+
48
+ it "should not use cache store if command is executed outside repository" do
49
+ command = Mercurial::Command.new("ls -l /")
50
+ cache_store = mock('cache_store')
51
+ cache_store.expects(:fetch).never
52
+ command.execute
53
+ end
54
+
55
+ it "should not use cache store if it's not available" do
56
+ command = Mercurial::Command.new("cd #{ @repository.path } && hg log -v", :repository => @repository)
57
+ cache_store = mock('cache_store')
58
+ cache_store.expects(:fetch).never
59
+ command.execute
60
+ end
61
+
62
+ end
@@ -0,0 +1,66 @@
1
+ require 'helper'
2
+
3
+ describe Mercurial::Commit do
4
+
5
+ before do
6
+ @repository = Mercurial::Repository.open(Fixtures.test_repo)
7
+ @commit = @repository.commits.by_hash_id('34f85a44acf1')
8
+ end
9
+
10
+ it "should parse date to Ruby format" do
11
+ @commit.date.must_be_kind_of Time
12
+ end
13
+
14
+ it "should represent branches as Array" do
15
+ @commit.branches_names.must_be_kind_of Array
16
+ end
17
+
18
+ it "branches array should be empty if there are no branches" do
19
+ @commit = @repository.commits.by_hash_id('4474d1ddaf65')
20
+ @commit.branches_names.must_equal []
21
+ end
22
+
23
+ it "should represent tags as Array" do
24
+ @commit.tags_names.must_be_kind_of Array
25
+ end
26
+
27
+ it "should convert list of changed files to an array of ChangedFile objects" do
28
+ @commit.changed_files.must_be_kind_of Array
29
+ @commit.changed_files.first.must_be_kind_of Mercurial::ChangedFile
30
+ end
31
+
32
+ it "should have parents_ids array" do
33
+ @commit.parents_ids.must_be_kind_of Array
34
+ @commit.parents_ids.first.must_equal '25bb5c51fd61'
35
+ end
36
+
37
+ it "should be detected as merge if has many parents" do
38
+ commit = @repository.commits.by_hash_id('cd9fa0c59c7f')
39
+ commit.merge?.must_equal true
40
+ commit.parents_ids.sort.must_equal ["4474d1ddaf65", "6157254a4423"].sort
41
+ end
42
+
43
+ it "should create commit objects for parents" do
44
+ commit = @repository.commits.by_hash_id('cd9fa0c59c7f')
45
+ commit.parents.each do |parent|
46
+ parent.must_be_kind_of Mercurial::Commit
47
+ end
48
+ end
49
+
50
+ it "should convert commit to hash" do
51
+ commit = @repository.commits.by_hash_id('cd9fa0c59c7f')
52
+ commit.to_hash.must_be_kind_of Hash
53
+ end
54
+
55
+ it "should be considered blank if hash is all zeroes" do
56
+ commit = @repository.commits.by_hash_id('cd9fa0c59c7f')
57
+ commit.stubs(:hash_id).returns('0000000000000000000000000000000000000000')
58
+ commit.blank?.must_equal true
59
+ end
60
+
61
+ it "should return an array of branches where it exists" do
62
+ commit = @repository.commits.by_hash_id('cd9fa0c59c7f')
63
+ commit.exist_in_branches.map(&:name).sort.must_equal %w(default another-branch).sort
64
+ end
65
+
66
+ end