amp 0.5.2 → 0.5.3
Sign up to get free protection for your applications and to get access to all the features.
- data/.gitignore +12 -0
- data/.hgignore +3 -0
- data/AUTHORS +1 -1
- data/Manifest.txt +99 -38
- data/README.md +3 -3
- data/Rakefile +53 -18
- data/SCHEDULE.markdown +5 -1
- data/TODO.markdown +120 -149
- data/ampfile.rb +3 -1
- data/bin/amp +4 -1
- data/ext/amp/bz2/extconf.rb +1 -1
- data/ext/amp/mercurial_patch/extconf.rb +1 -1
- data/ext/amp/mercurial_patch/mpatch.c +4 -3
- data/ext/amp/priority_queue/extconf.rb +1 -1
- data/ext/amp/support/extconf.rb +1 -1
- data/ext/amp/support/support.c +1 -1
- data/lib/amp.rb +125 -67
- data/lib/amp/commands/command.rb +12 -10
- data/lib/amp/commands/command_support.rb +8 -1
- data/lib/amp/commands/commands/help.rb +2 -20
- data/lib/amp/commands/commands/init.rb +14 -2
- data/lib/amp/commands/commands/templates.rb +6 -4
- data/lib/amp/commands/commands/version.rb +15 -1
- data/lib/amp/commands/commands/workflow.rb +3 -3
- data/lib/amp/commands/commands/workflows/git/add.rb +3 -3
- data/lib/amp/commands/commands/workflows/git/copy.rb +1 -1
- data/lib/amp/commands/commands/workflows/git/rm.rb +4 -2
- data/lib/amp/commands/commands/workflows/hg/add.rb +1 -1
- data/lib/amp/commands/commands/workflows/hg/addremove.rb +2 -2
- data/lib/amp/commands/commands/workflows/hg/annotate.rb +8 -2
- data/lib/amp/commands/commands/workflows/hg/bisect.rb +253 -0
- data/lib/amp/commands/commands/workflows/hg/branch.rb +1 -1
- data/lib/amp/commands/commands/workflows/hg/branches.rb +3 -3
- data/lib/amp/commands/commands/workflows/hg/bundle.rb +3 -3
- data/lib/amp/commands/commands/workflows/hg/clone.rb +4 -5
- data/lib/amp/commands/commands/workflows/hg/commit.rb +37 -1
- data/lib/amp/commands/commands/workflows/hg/copy.rb +2 -1
- data/lib/amp/commands/commands/workflows/hg/debug/index.rb +1 -1
- data/lib/amp/commands/commands/workflows/hg/diff.rb +3 -8
- data/lib/amp/commands/commands/workflows/hg/forget.rb +5 -4
- data/lib/amp/commands/commands/workflows/hg/identify.rb +6 -6
- data/lib/amp/commands/commands/workflows/hg/import.rb +1 -1
- data/lib/amp/commands/commands/workflows/hg/incoming.rb +2 -2
- data/lib/amp/commands/commands/workflows/hg/log.rb +5 -4
- data/lib/amp/commands/commands/workflows/hg/merge.rb +1 -1
- data/lib/amp/commands/commands/workflows/hg/move.rb +5 -3
- data/lib/amp/commands/commands/workflows/hg/outgoing.rb +1 -1
- data/lib/amp/commands/commands/workflows/hg/push.rb +6 -7
- data/lib/amp/commands/commands/workflows/hg/remove.rb +2 -2
- data/lib/amp/commands/commands/workflows/hg/resolve.rb +6 -23
- data/lib/amp/commands/commands/workflows/hg/root.rb +1 -2
- data/lib/amp/commands/commands/workflows/hg/status.rb +21 -12
- data/lib/amp/commands/commands/workflows/hg/tag.rb +2 -2
- data/lib/amp/commands/commands/workflows/hg/untrack.rb +12 -0
- data/lib/amp/commands/commands/workflows/hg/verify.rb +13 -3
- data/lib/amp/commands/commands/workflows/hg/what_changed.rb +18 -0
- data/lib/amp/commands/dispatch.rb +12 -13
- data/lib/amp/dependencies/amp_support.rb +1 -1
- data/lib/amp/dependencies/amp_support/ruby_amp_support.rb +1 -0
- data/lib/amp/dependencies/maruku.rb +136 -0
- data/lib/amp/dependencies/maruku/attributes.rb +227 -0
- data/lib/amp/dependencies/maruku/defaults.rb +71 -0
- data/lib/amp/dependencies/maruku/errors_management.rb +92 -0
- data/lib/amp/dependencies/maruku/helpers.rb +260 -0
- data/lib/amp/dependencies/maruku/input/charsource.rb +326 -0
- data/lib/amp/dependencies/maruku/input/extensions.rb +69 -0
- data/lib/amp/dependencies/maruku/input/html_helper.rb +189 -0
- data/lib/amp/dependencies/maruku/input/linesource.rb +111 -0
- data/lib/amp/dependencies/maruku/input/parse_block.rb +615 -0
- data/lib/amp/dependencies/maruku/input/parse_doc.rb +234 -0
- data/lib/amp/dependencies/maruku/input/parse_span_better.rb +746 -0
- data/lib/amp/dependencies/maruku/input/rubypants.rb +225 -0
- data/lib/amp/dependencies/maruku/input/type_detection.rb +147 -0
- data/lib/amp/dependencies/maruku/input_textile2/t2_parser.rb +163 -0
- data/lib/amp/dependencies/maruku/maruku.rb +33 -0
- data/lib/amp/dependencies/maruku/output/to_ansi.rb +223 -0
- data/lib/amp/dependencies/maruku/output/to_html.rb +991 -0
- data/lib/amp/dependencies/maruku/output/to_markdown.rb +164 -0
- data/lib/amp/dependencies/maruku/output/to_s.rb +56 -0
- data/lib/amp/dependencies/maruku/string_utils.rb +191 -0
- data/lib/amp/dependencies/maruku/structures.rb +167 -0
- data/lib/amp/dependencies/maruku/structures_inspect.rb +87 -0
- data/lib/amp/dependencies/maruku/structures_iterators.rb +61 -0
- data/lib/amp/dependencies/maruku/textile2.rb +1 -0
- data/lib/amp/dependencies/maruku/toc.rb +199 -0
- data/lib/amp/dependencies/maruku/usage/example1.rb +33 -0
- data/lib/amp/dependencies/maruku/version.rb +40 -0
- data/lib/amp/dependencies/priority_queue.rb +2 -1
- data/lib/amp/dependencies/python_config.rb +2 -1
- data/lib/amp/graphs/ancestor.rb +2 -1
- data/lib/amp/graphs/copies.rb +236 -233
- data/lib/amp/help/entries/__default__.erb +31 -0
- data/lib/amp/help/entries/commands.erb +6 -0
- data/lib/amp/help/entries/mdtest.md +35 -0
- data/lib/amp/help/entries/silly +3 -0
- data/lib/amp/help/help.rb +288 -0
- data/lib/amp/profiling_hacks.rb +5 -3
- data/lib/amp/repository/abstract/abstract_changeset.rb +97 -0
- data/lib/amp/repository/abstract/abstract_local_repo.rb +181 -0
- data/lib/amp/repository/abstract/abstract_staging_area.rb +180 -0
- data/lib/amp/repository/abstract/abstract_versioned_file.rb +100 -0
- data/lib/amp/repository/abstract/common_methods/changeset.rb +75 -0
- data/lib/amp/repository/abstract/common_methods/local_repo.rb +277 -0
- data/lib/amp/repository/abstract/common_methods/staging_area.rb +233 -0
- data/lib/amp/repository/abstract/common_methods/versioned_file.rb +71 -0
- data/lib/amp/repository/generic_repo_picker.rb +78 -0
- data/lib/amp/repository/git/repo_format/changeset.rb +336 -0
- data/lib/amp/repository/git/repo_format/staging_area.rb +192 -0
- data/lib/amp/repository/git/repo_format/versioned_file.rb +119 -0
- data/lib/amp/repository/git/repositories/local_repository.rb +164 -0
- data/lib/amp/repository/git/repository.rb +41 -0
- data/lib/amp/repository/mercurial/encoding/mercurial_diff.rb +382 -0
- data/lib/amp/repository/mercurial/encoding/mercurial_patch.rb +1 -0
- data/lib/amp/repository/mercurial/encoding/patch.rb +294 -0
- data/lib/amp/repository/mercurial/encoding/pure_ruby/ruby_mercurial_patch.rb +124 -0
- data/lib/amp/repository/mercurial/merging/merge_ui.rb +327 -0
- data/lib/amp/repository/mercurial/merging/simple_merge.rb +452 -0
- data/lib/amp/repository/mercurial/repo_format/branch_manager.rb +266 -0
- data/lib/amp/repository/mercurial/repo_format/changeset.rb +768 -0
- data/lib/amp/repository/mercurial/repo_format/dir_state.rb +716 -0
- data/lib/amp/repository/mercurial/repo_format/journal.rb +218 -0
- data/lib/amp/repository/mercurial/repo_format/lock.rb +210 -0
- data/lib/amp/repository/mercurial/repo_format/merge_state.rb +228 -0
- data/lib/amp/repository/mercurial/repo_format/staging_area.rb +367 -0
- data/lib/amp/repository/mercurial/repo_format/store.rb +487 -0
- data/lib/amp/repository/mercurial/repo_format/tag_manager.rb +322 -0
- data/lib/amp/repository/mercurial/repo_format/updatable.rb +543 -0
- data/lib/amp/repository/mercurial/repo_format/updater.rb +848 -0
- data/lib/amp/repository/mercurial/repo_format/verification.rb +433 -0
- data/lib/amp/repository/mercurial/repositories/bundle_repository.rb +216 -0
- data/lib/amp/repository/mercurial/repositories/http_repository.rb +386 -0
- data/lib/amp/repository/mercurial/repositories/local_repository.rb +2034 -0
- data/lib/amp/repository/mercurial/repository.rb +119 -0
- data/lib/amp/repository/mercurial/revlogs/bundle_revlogs.rb +249 -0
- data/lib/amp/repository/mercurial/revlogs/changegroup.rb +217 -0
- data/lib/amp/repository/mercurial/revlogs/changelog.rb +339 -0
- data/lib/amp/repository/mercurial/revlogs/file_log.rb +152 -0
- data/lib/amp/repository/mercurial/revlogs/index.rb +500 -0
- data/lib/amp/repository/mercurial/revlogs/manifest.rb +201 -0
- data/lib/amp/repository/mercurial/revlogs/node.rb +20 -0
- data/lib/amp/repository/mercurial/revlogs/revlog.rb +1026 -0
- data/lib/amp/repository/mercurial/revlogs/revlog_support.rb +129 -0
- data/lib/amp/repository/mercurial/revlogs/versioned_file.rb +597 -0
- data/lib/amp/repository/repository.rb +11 -88
- data/lib/amp/server/extension/amp_extension.rb +3 -3
- data/lib/amp/server/fancy_http_server.rb +1 -1
- data/lib/amp/server/fancy_views/_browser.haml +1 -1
- data/lib/amp/server/fancy_views/_diff_file.haml +1 -8
- data/lib/amp/server/fancy_views/changeset.haml +2 -2
- data/lib/amp/server/fancy_views/file.haml +1 -1
- data/lib/amp/server/fancy_views/file_diff.haml +1 -1
- data/lib/amp/support/amp_ui.rb +13 -29
- data/lib/amp/support/generator.rb +1 -1
- data/lib/amp/support/loaders.rb +1 -2
- data/lib/amp/support/logger.rb +10 -16
- data/lib/amp/support/match.rb +18 -4
- data/lib/amp/support/mercurial/ignore.rb +151 -0
- data/lib/amp/support/openers.rb +8 -3
- data/lib/amp/support/support.rb +91 -46
- data/lib/amp/templates/{blank.commit.erb → mercurial/blank.commit.erb} +0 -0
- data/lib/amp/templates/{blank.log.erb → mercurial/blank.log.erb} +0 -0
- data/lib/amp/templates/{default.commit.erb → mercurial/default.commit.erb} +0 -0
- data/lib/amp/templates/{default.log.erb → mercurial/default.log.erb} +0 -0
- data/lib/amp/templates/template.rb +18 -18
- data/man/amp.1 +51 -0
- data/site/src/about/commands.haml +1 -1
- data/site/src/css/amp.css +1 -1
- data/site/src/index.haml +3 -3
- data/tasks/man.rake +39 -0
- data/tasks/stats.rake +1 -10
- data/tasks/yard.rake +1 -50
- data/test/dirstate_tests/test_dir_state.rb +10 -8
- data/test/functional_tests/annotate.out +31 -0
- data/test/functional_tests/test_functional.rb +155 -63
- data/test/localrepo_tests/ampfile.rb +12 -0
- data/test/localrepo_tests/test_local_repo.rb +56 -57
- data/test/manifest_tests/test_manifest.rb +3 -5
- data/test/merge_tests/test_merge.rb +3 -3
- data/test/revlog_tests/test_revlog.rb +14 -6
- data/test/store_tests/test_fncache_store.rb +19 -19
- data/test/test_19_compatibility.rb +46 -0
- data/test/test_base85.rb +2 -2
- data/test/test_bdiff.rb +2 -2
- data/test/test_changegroup.rb +59 -0
- data/test/test_commands.rb +2 -2
- data/test/test_difflib.rb +2 -2
- data/test/test_generator.rb +34 -0
- data/test/test_ignore.rb +203 -0
- data/test/test_journal.rb +18 -13
- data/test/test_match.rb +2 -2
- data/test/test_mdiff.rb +3 -3
- data/test/test_mpatch.rb +3 -3
- data/test/test_multi_io.rb +40 -0
- data/test/test_support.rb +18 -2
- data/test/test_templates.rb +38 -0
- data/test/test_ui.rb +79 -0
- data/test/testutilities.rb +56 -0
- metadata +168 -49
- data/ext/amp/bz2/mkmf.log +0 -38
- data/lib/amp/encoding/mercurial_diff.rb +0 -378
- data/lib/amp/encoding/mercurial_patch.rb +0 -1
- data/lib/amp/encoding/patch.rb +0 -292
- data/lib/amp/encoding/pure_ruby/ruby_mercurial_patch.rb +0 -123
- data/lib/amp/merges/merge_state.rb +0 -164
- data/lib/amp/merges/merge_ui.rb +0 -322
- data/lib/amp/merges/simple_merge.rb +0 -450
- data/lib/amp/repository/branch_manager.rb +0 -234
- data/lib/amp/repository/dir_state.rb +0 -950
- data/lib/amp/repository/journal.rb +0 -203
- data/lib/amp/repository/lock.rb +0 -207
- data/lib/amp/repository/repositories/bundle_repository.rb +0 -214
- data/lib/amp/repository/repositories/http_repository.rb +0 -377
- data/lib/amp/repository/repositories/local_repository.rb +0 -2661
- data/lib/amp/repository/store.rb +0 -485
- data/lib/amp/repository/tag_manager.rb +0 -319
- data/lib/amp/repository/updatable.rb +0 -532
- data/lib/amp/repository/verification.rb +0 -431
- data/lib/amp/repository/versioned_file.rb +0 -475
- data/lib/amp/revlogs/bundle_revlogs.rb +0 -246
- data/lib/amp/revlogs/changegroup.rb +0 -217
- data/lib/amp/revlogs/changelog.rb +0 -338
- data/lib/amp/revlogs/changeset.rb +0 -521
- data/lib/amp/revlogs/file_log.rb +0 -165
- data/lib/amp/revlogs/index.rb +0 -493
- data/lib/amp/revlogs/manifest.rb +0 -195
- data/lib/amp/revlogs/node.rb +0 -18
- data/lib/amp/revlogs/revlog.rb +0 -1045
- data/lib/amp/revlogs/revlog_support.rb +0 -126
- data/lib/amp/support/ignore.rb +0 -144
- data/site/Rakefile +0 -38
- data/test/test_amp.rb +0 -9
- data/test/test_helper.rb +0 -15
@@ -96,7 +96,7 @@
|
|
96
96
|
end
|
97
97
|
end
|
98
98
|
%p
|
99
|
-
Last, but not least, we have the #{shellscript "on_run"} method. This is how we declare what <em>happens</em> when our command is run - which is what we really care about! You specify what the command does in #{shellscript "on_run"}'s block, which takes two arguments: #{shellscript "options"} and #{shellscript "args"}. These are, respectively, the command-line options passed in plus amp's additions, and the arguments provided by the user. For example: #{shellscript "amp log --verbose --limit=3 arg1 arg2"} would provide #{shellscript "{:verbose => true, :limit => 3, :repository => #<LocalRepository repo>}"} as #{shellscript "options"} and #{shellscript "[arg1, arg2]"} as #{shellscript "args"}.
|
99
|
+
Last, but not least, we have the #{shellscript "on_run"} method. This is how we declare what <em>happens</em> when our command is run - which is what we really care about! You specify what the command does in #{shellscript "on_run"}'s block, which takes two arguments: #{shellscript "options"} and #{shellscript "args"}. These are, respectively, the command-line options passed in plus amp's additions, and the arguments provided by the user. For example: #{shellscript "amp log --verbose --limit=3 arg1 arg2"} would provide #{shellscript "{:verbose => true, :limit => 3, :repository => #<LocalRepository repo>}"} as #{shellscript "options"} and #{shellscript "[\"arg1\", \"arg2\"]"} as #{shellscript "args"}.
|
100
100
|
%p
|
101
101
|
Our command is getting changeset information, so it needs a repository to interact with. Unless told to do otherwise, #{blue_amp} will look for a repository and store it in #{shellscript "options[#{symbol :repository}]"}. This will always be an object of the class #{link_to "http://amp.carboni.ca/docs/Amp/Repositories/LocalRepository.html", "LocalRepository"}.
|
102
102
|
%p
|
data/site/src/css/amp.css
CHANGED
@@ -189,7 +189,7 @@ p, .infopage ul.bullets, .infopage ul.bullets li {
|
|
189
189
|
margin:3px 3px 3px 30px;
|
190
190
|
}
|
191
191
|
|
192
|
-
ul.bullets, ul.bullets li { list-style-type:disc; }
|
192
|
+
ul.bullets, ul.bullets li { list-style-type:disc; position:relative;clear:left; }
|
193
193
|
|
194
194
|
.half-border { border-right: none 1px #ccc; border-bottom: none 1px #ccc; }
|
195
195
|
|
data/site/src/index.haml
CHANGED
@@ -15,7 +15,7 @@
|
|
15
15
|
.rounded.bigbox.pink
|
16
16
|
%h1#latest-version
|
17
17
|
Get Amp
|
18
|
-
%span.red-text
|
18
|
+
%span.red-text== v#{::Amp::VERSION}
|
19
19
|
%ul{:style => "margin-left:2px;"}
|
20
20
|
%li== 1. Get #{ruby_link}. 2. sudo gem install #{blue_amp} --no-wrappers
|
21
21
|
.floatleft{ :style => "width:100%;padding:10px 0em 6px;" }
|
@@ -97,10 +97,10 @@
|
|
97
97
|
%span.shellscript hg clone http://bitbucket.org/carbonica/amp/
|
98
98
|
%li Make your changes
|
99
99
|
%li
|
100
|
-
%span.shellscript hg diff
|
100
|
+
%span.shellscript hg diff > your.patch
|
101
101
|
%li Create ticket on #{lighthouse_link "Lighthouse, attach your patch"}
|
102
102
|
%li Land one patch, you get commit rights
|
103
|
-
%p== Want more details? Check out our #{link_to "/contribute/", "contributing page." } Or join us at #{link_to "irc://irc.freenode.net/#amp", "#amp on freenode" }.
|
103
|
+
%p== Want more details? Check out our #{link_to "/contribute/", "contributing page." } Or join us at #{link_to "irc://irc.freenode.net/#amp-vcs", "#amp-vcs on freenode" }.
|
104
104
|
= render("include/_footer.haml")
|
105
105
|
:plain
|
106
106
|
<script type="text/javascript">
|
data/tasks/man.rake
ADDED
@@ -0,0 +1,39 @@
|
|
1
|
+
require 'rtfm/tasks'
|
2
|
+
|
3
|
+
RTFM::ManPage.new("amp", 1) do |page|
|
4
|
+
page.summary = "Ruby VCS engine"
|
5
|
+
|
6
|
+
page.option :verbose, "Enables verbose output for the entire Amp process."
|
7
|
+
page.option :d, "Prings a variety of debug information about the arguments and options passed into amp.", :long => :"debug-opts"
|
8
|
+
page.option :profile, "Profiles the amp process as it runs the requested command. Deprecated and unwise."
|
9
|
+
page.option :R, "The path to the repository to use", :long => "repository", :argument => "repo_dir"
|
10
|
+
page.option :"pure-ruby", "Use only pure ruby (no C-extensions)"
|
11
|
+
page.option :testing, "Running a test. Don't touch this."
|
12
|
+
|
13
|
+
page.synopsis do |synopsis|
|
14
|
+
synopsis.argument "command"
|
15
|
+
end
|
16
|
+
|
17
|
+
page.description do |description|
|
18
|
+
description.body = <<-EOF
|
19
|
+
Amp is a revolutionary change in how we approach version control systems. Not only does it re-implement
|
20
|
+
Mercurial's core in Ruby, but re-thinks how we interact with version control. It intends to wrap multiple
|
21
|
+
VCS systems - git, hg, svn - under the same API, allowing the unique Amp command system to work with all
|
22
|
+
repositories in the same manner.
|
23
|
+
|
24
|
+
Amp currently implements Mercurial and a large subset of the Mercurial command-set.
|
25
|
+
EOF
|
26
|
+
end
|
27
|
+
|
28
|
+
page.see_also do |also|
|
29
|
+
also.reference "hg", 1
|
30
|
+
also.reference "git", 1
|
31
|
+
also.reference "ruby", 1
|
32
|
+
also.reference "amprc", 5
|
33
|
+
end
|
34
|
+
|
35
|
+
page.authors do |authors|
|
36
|
+
authors.add "Michael Edgar", "adgar@carboni.ca"
|
37
|
+
authors.add "Ari Brown", "seydar@carboni.ca"
|
38
|
+
end
|
39
|
+
end
|
data/tasks/stats.rake
CHANGED
@@ -1,12 +1,3 @@
|
|
1
|
-
require 'flay'
|
2
|
-
require 'flay_task'
|
3
|
-
|
4
|
-
|
5
|
-
FlayTask.new(:flay, 400) do |t|
|
6
|
-
t.dirs = %w(lib/amp)
|
7
|
-
t.verbose = true
|
8
|
-
end
|
9
|
-
|
10
1
|
desc 'Statistics of Code'
|
11
2
|
task :stats do
|
12
3
|
MINIMUM_LOC = 15
|
@@ -24,7 +15,7 @@ task :stats do
|
|
24
15
|
files = FileList['lib/**/*.rb'] +
|
25
16
|
FileList["test/**/*.rb"] +
|
26
17
|
FileList["ext/**/*.c"]
|
27
|
-
|
18
|
+
files.reject! {|f| f =~ /maruku/ && f !~ /to_ansi/ }
|
28
19
|
puts ScriptLines.headline
|
29
20
|
sum = ScriptLines.new("TOTAL (#{files.size} file#{files.size == 1 ? '' : 's'})")
|
30
21
|
|
data/tasks/yard.rake
CHANGED
@@ -35,7 +35,7 @@ end
|
|
35
35
|
namespace :yard do
|
36
36
|
|
37
37
|
desc 'Force a rebuild of the documentation'
|
38
|
-
task :full_doc
|
38
|
+
task :full_doc do
|
39
39
|
text_files = ["SCHEDULE.markdown", "AUTHORS", "STYLE", "TODO.markdown", "LICENSE"]
|
40
40
|
options = ["--private", "--protected", "-q", "-r README.md"]
|
41
41
|
ruby_files = ["lib/**/**/**/*.rb", "lib/**/**/*.rb", "lib/**/*.rb", "lib/*.rb"]
|
@@ -54,55 +54,6 @@ namespace :yard do
|
|
54
54
|
undocd.zero? ? 0.0 : (undocd / total)
|
55
55
|
end
|
56
56
|
|
57
|
-
desc 'Generate a TODO file by searching for @todo tags'
|
58
|
-
task :todo => [ :doc ] do
|
59
|
-
File.open("TODO.markdown","w") do |out|
|
60
|
-
classes = YARD::Registry.all(:class)
|
61
|
-
classes.each do |klass|
|
62
|
-
need_todo_section = false
|
63
|
-
klass_todo = []
|
64
|
-
|
65
|
-
klass.tags.each do |tag|
|
66
|
-
if tag.tag_name.to_s == "todo"
|
67
|
-
need_todo_section = true
|
68
|
-
klass_todo << tag.text
|
69
|
-
end
|
70
|
-
end
|
71
|
-
|
72
|
-
method_todo_section = false
|
73
|
-
method_todos = {}
|
74
|
-
klass.meths(:inherited => false).each do |meth|
|
75
|
-
meth.tags.each do |tag|
|
76
|
-
if tag.tag_name.to_s == "todo"
|
77
|
-
need_todo_section = true
|
78
|
-
method_todo_section = true
|
79
|
-
(method_todos[meth] ||= []) << tag.name # @todo puts info in #name, not #text
|
80
|
-
end
|
81
|
-
end
|
82
|
-
end
|
83
|
-
|
84
|
-
if need_todo_section
|
85
|
-
klassname = klass.path.gsub(/\_/,"\\_")
|
86
|
-
out << klassname << "\n"
|
87
|
-
out << ("=" * klassname.size) << "\n"
|
88
|
-
klass_todo.each {|todo| out << " - #{todo}\n"}
|
89
|
-
out << "\n"
|
90
|
-
method_todos.each do |meth, todos|
|
91
|
-
methname = meth.path.gsub(/\_/,"\\_")
|
92
|
-
out << methname << "\n"
|
93
|
-
out << ("-" * methname.size) << "\n"
|
94
|
-
todos.each do |todo|
|
95
|
-
out << " - " << todo << "\n"
|
96
|
-
end
|
97
|
-
out << "\n"
|
98
|
-
end
|
99
|
-
out << "\n"
|
100
|
-
end
|
101
|
-
|
102
|
-
end
|
103
|
-
end
|
104
|
-
end
|
105
|
-
|
106
57
|
# rake yard:search[ranks]
|
107
58
|
desc 'Search the methods for the specified tag'
|
108
59
|
task :search => [ :doc ]
|
@@ -1,4 +1,4 @@
|
|
1
|
-
require
|
1
|
+
require File.join(File.expand_path(File.dirname(__FILE__)), '../testutilities')
|
2
2
|
require File.expand_path(File.join(File.dirname(__FILE__), "../../lib/amp"))
|
3
3
|
|
4
4
|
# easyness
|
@@ -7,14 +7,14 @@ class String
|
|
7
7
|
end
|
8
8
|
|
9
9
|
|
10
|
-
class TestDirState <
|
10
|
+
class TestDirState < AmpTestCase
|
11
11
|
|
12
12
|
def setup
|
13
13
|
f = File.open File.join(File.dirname(__FILE__), "hgrc")
|
14
14
|
@config = PythonConfig::ConfigParser.new f
|
15
15
|
opener = Amp::Opener.new File.expand_path(File.dirname(__FILE__))
|
16
16
|
opener.default = :open_file
|
17
|
-
@state = Amp::Repositories::DirState.new File.expand_path(File.dirname(__FILE__)), @config, opener
|
17
|
+
@state = Amp::Repositories::Mercurial::DirState.new File.expand_path(File.dirname(__FILE__)), @config, opener
|
18
18
|
@files = []
|
19
19
|
end
|
20
20
|
|
@@ -33,17 +33,17 @@ class TestDirState < Test::Unit::TestCase
|
|
33
33
|
end
|
34
34
|
|
35
35
|
def test_parents_equals
|
36
|
-
@state.parents = ["asdfasdf", Amp::RevlogSupport::Node::NULL_ID]
|
36
|
+
@state.parents = ["asdfasdf", Amp::Mercurial::RevlogSupport::Node::NULL_ID]
|
37
37
|
|
38
|
-
assert_equal ["asdfasdf", Amp::RevlogSupport::Node::NULL_ID], @state.parents
|
38
|
+
assert_equal ["asdfasdf", Amp::Mercurial::RevlogSupport::Node::NULL_ID], @state.parents
|
39
39
|
|
40
40
|
@state.parents = "asdfasdf"
|
41
41
|
|
42
|
-
assert_equal ["asdfasdf", Amp::RevlogSupport::Node::NULL_ID], @state.parents
|
42
|
+
assert_equal ["asdfasdf", Amp::Mercurial::RevlogSupport::Node::NULL_ID], @state.parents
|
43
43
|
end
|
44
44
|
|
45
45
|
def test_dirty?
|
46
|
-
@state.parents = ["asdfasdf", Amp::RevlogSupport::Node::NULL_ID] # something to dirty it up
|
46
|
+
@state.parents = ["asdfasdf", Amp::Mercurial::RevlogSupport::Node::NULL_ID] # something to dirty it up
|
47
47
|
|
48
48
|
assert @state.dirty?
|
49
49
|
end
|
@@ -96,6 +96,8 @@ class TestDirState < Test::Unit::TestCase
|
|
96
96
|
# the same quirks
|
97
97
|
def test_remove
|
98
98
|
add_file "monkey" # make sure it's in @files
|
99
|
+
# pretend the file is normal
|
100
|
+
@state.normal "monkey"
|
99
101
|
@state.remove "monkey"
|
100
102
|
|
101
103
|
assert @state["monkey"].removed?
|
@@ -174,7 +176,7 @@ class TestDirState < Test::Unit::TestCase
|
|
174
176
|
|
175
177
|
@state.send :read!
|
176
178
|
|
177
|
-
assert_equal({"oh_nuit" => Amp::Repositories::DirStateEntry.new(:added, 0, -1, -1)}, @state.files)
|
179
|
+
assert_equal({"oh_nuit" => Amp::Repositories::Mercurial::DirStateEntry.new(:added, 0, -1, -1)}, @state.files)
|
178
180
|
assert_equal({}, @state.copy_map)
|
179
181
|
end
|
180
182
|
|
@@ -0,0 +1,31 @@
|
|
1
|
+
medgar 2: The Amp Commandments Redux:
|
2
|
+
tester 0: 1. Thou shalt not useth the "for...in" syntax.
|
3
|
+
tester 0: 2. Thou shalt useth only but 80 columns, for those who useth the lord's
|
4
|
+
medgar 2: editors, vim and emacs. (emacs sucks - oh no he didn't)
|
5
|
+
tester 0: 3. Thou shalt preface thine variables with _ only when thou needest,
|
6
|
+
medgar 2: lest ye face judgement for this most grave sin. (this isn't python.
|
7
|
+
medgar 2: no __method__ is necessary!)
|
8
|
+
medgar 2: 4. Thine variables should have descriptive names, for thine ruby might
|
9
|
+
tester 0: read like the psalms.
|
10
|
+
tester 0: 5. Thine variables, longer than 6 letters and composed of two or more
|
11
|
+
tester 0: words, shall separate those words with the lord's underscore, so thine
|
12
|
+
tester 0: code shall flow like the Nile herself.
|
13
|
+
tester 0: 6. Thou shalt rake thine yard frequently, to be sure thine code is
|
14
|
+
tester 0: well-documented for thine neighbors.
|
15
|
+
tester 0: 7. Thou shalt use alias_method over alias or I shall goeth Chris Brown
|
16
|
+
medgar 2: all over thou. (meh we don't need threats in the commandments.)
|
17
|
+
tester 0: 8. Thou shalt use parentheses in thine defintions of methods, for the
|
18
|
+
medgar 2: consistency of the codes in this repository.
|
19
|
+
tester 0: 9. Thine comments shall start, when above thine method definitions, with
|
20
|
+
tester 0: 2 (two) hashes, and the information, then, beginning on the line below
|
21
|
+
tester 0: it. Thou shalt leave one blank comment line between thine comment info
|
22
|
+
tester 0: and thine yard information.
|
23
|
+
medgar 2: 10. Thou shalt make great and grand use of the yard extension. It is
|
24
|
+
medgar 2: pretty sweet.
|
25
|
+
seydar 3: 11. Name thine motherfrakking vari
|
26
|
+
seydar 3:
|
27
|
+
seydar 3:
|
28
|
+
seydar 3: VERSION 3
|
29
|
+
seydar 3:
|
30
|
+
seydar 3: VERSION 3
|
31
|
+
seydar 3: ables motherfrakking descriptively.
|
@@ -1,13 +1,13 @@
|
|
1
|
-
require '
|
2
|
-
require File.
|
1
|
+
require 'stringio'
|
2
|
+
require File.join(File.expand_path(File.dirname(__FILE__)), '../testutilities')
|
3
3
|
require File.expand_path(File.join(File.dirname(__FILE__), "../../lib/amp"))
|
4
|
-
|
4
|
+
include Amp::KernelMethods
|
5
5
|
# easyness
|
6
6
|
class String
|
7
7
|
def fun_local; File.join($current_basedir, self); end
|
8
8
|
end
|
9
9
|
|
10
|
-
class TestFunctional <
|
10
|
+
class TestFunctional < AmpTestCase
|
11
11
|
|
12
12
|
AMP_FILE = (RUBY_VERSION < "1.9") ? "amp" : "amp1.9"
|
13
13
|
AMP_BINARY = File.expand_path(File.join(File.dirname(__FILE__), '..', '..', 'bin', AMP_FILE))
|
@@ -27,9 +27,20 @@ class TestFunctional < Test::Unit::TestCase
|
|
27
27
|
# order is followed. So it all goes in one method. Sorry.
|
28
28
|
def test_init
|
29
29
|
|
30
|
+
require "amp/commands/command.rb"
|
31
|
+
require_dir { "amp/commands/*.rb" }
|
32
|
+
require_dir { "amp/commands/commands/*.rb" }
|
33
|
+
|
34
|
+
ENV["HGUSER"] = "tester"
|
35
|
+
|
36
|
+
assert_command_match(/#{Amp::VERSION_TITLE}/, "version")
|
37
|
+
assert_command_match(/#{Amp::VERSION}/, "version")
|
38
|
+
|
39
|
+
|
30
40
|
# Create the mainline repository! Woo!
|
31
|
-
|
41
|
+
amp "init", "testrepo".fun_local
|
32
42
|
|
43
|
+
File.safe_unlink "testrepo/ampfile.rb".fun_local
|
33
44
|
# Make sure we've correctly initialized the repository
|
34
45
|
assert_file 'testrepo'
|
35
46
|
assert_file 'testrepo/.hg'
|
@@ -115,7 +126,7 @@ class TestFunctional < Test::Unit::TestCase
|
|
115
126
|
exit_repo
|
116
127
|
|
117
128
|
# Clone testrepo to create "newrepo".
|
118
|
-
|
129
|
+
amp "clone", ["testrepo".fun_local,"newrepo".fun_local]
|
119
130
|
# Enter the newrepo repository.
|
120
131
|
enter_repo "newrepo"
|
121
132
|
|
@@ -135,9 +146,11 @@ class TestFunctional < Test::Unit::TestCase
|
|
135
146
|
# Make sure that the custom user is still peachy
|
136
147
|
assert_command_match(/user\: +seydar/, "log", nil, :limit => 1)
|
137
148
|
|
138
|
-
|
139
|
-
|
149
|
+
assert_command_match(/demonic infestation/, amp("outgoing"))
|
150
|
+
assert_command_match(/experimental branch/, amp("outgoing"))
|
140
151
|
|
152
|
+
# Push upstream to testrepo
|
153
|
+
amp "push"
|
141
154
|
# Switch to testrepo
|
142
155
|
exit_repo
|
143
156
|
enter_repo "testrepo"
|
@@ -168,7 +181,7 @@ class TestFunctional < Test::Unit::TestCase
|
|
168
181
|
# the date. So just hand-parse the input string and see if the result is in the changelog.
|
169
182
|
require 'time'
|
170
183
|
t = Time.parse("1/1/2009")
|
171
|
-
assert_command_match(/#{t.to_s}/, "log -l 1")
|
184
|
+
assert_command_match(/#{t.to_s}/, "log", ["-l", "1"])
|
172
185
|
|
173
186
|
# Over-zealous verification never hurt anyone
|
174
187
|
assert_verify
|
@@ -180,7 +193,7 @@ class TestFunctional < Test::Unit::TestCase
|
|
180
193
|
# Pull! wooooo!
|
181
194
|
assert_command_match(/added 1 changesets/, "pull")
|
182
195
|
# Update it
|
183
|
-
update_result =
|
196
|
+
update_result = amp "update"
|
184
197
|
# And check to see if the 2 things we did were both in the update
|
185
198
|
assert_match(/1 files updated/, update_result)
|
186
199
|
assert_match(/1 files removed/, update_result)
|
@@ -191,12 +204,12 @@ class TestFunctional < Test::Unit::TestCase
|
|
191
204
|
# ok, so right now, newrepo is the same as testrepo.
|
192
205
|
# now to generate a conflict, so we can test merging. we'll need a second child repo.
|
193
206
|
exit_repo
|
194
|
-
|
207
|
+
amp "clone", ["testrepo".fun_local, "conflictrepo".fun_local]
|
195
208
|
|
196
209
|
# create one branch in conflictrepo
|
197
210
|
enter_repo "conflictrepo"
|
198
211
|
replace_resources_with_version "version5_1"
|
199
|
-
|
212
|
+
amp "status"
|
200
213
|
commit :message => "conflict, part 1"
|
201
214
|
exit_repo
|
202
215
|
|
@@ -206,17 +219,19 @@ class TestFunctional < Test::Unit::TestCase
|
|
206
219
|
replace_resources_with_version "version5_2"
|
207
220
|
|
208
221
|
# test addremove, while we're at it!
|
209
|
-
addremove_result =
|
222
|
+
addremove_result = amp "addremove"
|
210
223
|
assert_match(/Adding commands\/newz.rb/, addremove_result)
|
211
224
|
assert_match(/Removing commands\/heads.rb/, addremove_result)
|
212
|
-
|
225
|
+
amp "status"
|
213
226
|
commit :message => "conflict, part 2"
|
214
227
|
|
215
228
|
# push our conflicting commit to testrepo from the "newrepo" child.
|
216
|
-
push_results =
|
229
|
+
push_results = amp "push"
|
230
|
+
p; puts push_results; p
|
231
|
+
|
217
232
|
assert_match(/1 changeset/, push_results)
|
218
|
-
assert_match(/
|
219
|
-
assert_match(/
|
233
|
+
assert_match(/3 changes/, push_results)
|
234
|
+
assert_match(/3 files/, push_results)
|
220
235
|
|
221
236
|
exit_repo
|
222
237
|
|
@@ -229,12 +244,12 @@ class TestFunctional < Test::Unit::TestCase
|
|
229
244
|
# pull in newrepo's conflicting commit (it will yell at us for the extra head)
|
230
245
|
assert_command_match(/\+1 heads?/, "pull")
|
231
246
|
# Try to merge the 2 changesets
|
232
|
-
result =
|
247
|
+
result = amp "merge"
|
233
248
|
|
234
249
|
# Expected results from the merge
|
235
250
|
assert_match(/1 files? unresolved/, result)
|
236
251
|
assert_match(/1 files? removed/, result)
|
237
|
-
assert_match(/
|
252
|
+
assert_match(/2 files? updated/, result)
|
238
253
|
|
239
254
|
# Ok, so we have one file that conflicts: STYLE.txt. We want to keep conflictrepo's
|
240
255
|
# version of the file. So we'll suck out the local portion of the conflicted summary.
|
@@ -243,7 +258,7 @@ class TestFunctional < Test::Unit::TestCase
|
|
243
258
|
File.open("STYLE.txt","w") {|f| f.write vers1_groups.first}
|
244
259
|
|
245
260
|
# mark STYLE.txt as resolved, and make sure it successfully was marked
|
246
|
-
resolve_result =
|
261
|
+
resolve_result = amp("resolve", ["--mark", "STYLE.txt"])
|
247
262
|
assert_match(/STYLE.txt marked/, resolve_result)
|
248
263
|
assert_match(/resolved/, resolve_result)
|
249
264
|
|
@@ -251,7 +266,7 @@ class TestFunctional < Test::Unit::TestCase
|
|
251
266
|
commit :message => "conflict resolved!"
|
252
267
|
|
253
268
|
# push to testrepo
|
254
|
-
|
269
|
+
amp "push"
|
255
270
|
assert_verify
|
256
271
|
# make sure we're still intact in conflictrepo
|
257
272
|
|
@@ -263,12 +278,12 @@ class TestFunctional < Test::Unit::TestCase
|
|
263
278
|
assert_verify
|
264
279
|
|
265
280
|
# Test the copy command
|
266
|
-
|
281
|
+
amp("copy", ["-v", "STYLE.txt", "STYLE_copied.txt"])
|
267
282
|
assert_file_has_status "STYLE_copied.txt", :added
|
268
283
|
assert_equal File.read("STYLE.txt"), File.read("STYLE_copied.txt")
|
269
284
|
|
270
285
|
# Test the move command
|
271
|
-
|
286
|
+
amp("move", ["command.rb", "command_moved.rb"])
|
272
287
|
assert_false File.exist?("command.rb")
|
273
288
|
assert File.exist?("command_moved.rb")
|
274
289
|
assert_file_has_status "command.rb", :removed
|
@@ -285,16 +300,17 @@ class TestFunctional < Test::Unit::TestCase
|
|
285
300
|
assert_command_match(/newbranch/, "branch")
|
286
301
|
|
287
302
|
# Only 1 tag, which is the tip
|
288
|
-
result =
|
303
|
+
result = amp("tags").split("\n")
|
289
304
|
result = result.select {|entry| entry =~ /[0-9a-f]{10}/}
|
290
305
|
assert_equal 1, result.size
|
291
306
|
assert_match(/tip/, result.first)
|
292
307
|
|
293
308
|
# Tag revision 3 as "noobsauce", by "medgar", with commit message "silly commit!"
|
294
|
-
|
309
|
+
amp("tag", ["noobsauce"], {:rev => 3, :user => "medgar", :message => "silly commit!"})
|
295
310
|
|
296
311
|
# Let's make sure our tag went in smoothly.
|
297
|
-
result =
|
312
|
+
result = amp("tags").split("\n")
|
313
|
+
|
298
314
|
result = result.select {|entry| entry =~ /[0-9a-f]{10}/}
|
299
315
|
assert_equal 2, result.size
|
300
316
|
|
@@ -310,7 +326,7 @@ class TestFunctional < Test::Unit::TestCase
|
|
310
326
|
assert_match(/9/, result[tip])
|
311
327
|
|
312
328
|
# And we should make sure the options were passed into the commit correctly.
|
313
|
-
head_result =
|
329
|
+
head_result = amp("head")
|
314
330
|
assert_match(/medgar/, head_result)
|
315
331
|
assert_match(/silly commit!/, head_result)
|
316
332
|
|
@@ -321,26 +337,51 @@ class TestFunctional < Test::Unit::TestCase
|
|
321
337
|
exit_repo
|
322
338
|
enter_repo 'testrepo'
|
323
339
|
|
340
|
+
assert_equal get_resource("command.rb", "version3"), amp("view", ["command.rb"], :rev => 3)
|
341
|
+
|
342
|
+
annotate_output = amp("annotate", ["STYLE.txt"], :user => true, :number => true).strip
|
343
|
+
correct_annotation = read_supporting_file("annotate.out").strip
|
344
|
+
assert_equal correct_annotation, annotate_output
|
345
|
+
|
324
346
|
# Create a dummy commit
|
325
347
|
File.open('used_in_bundle', 'w') {|f| f.write "monkay" }
|
326
|
-
amp "commit", :message => 'monkey'
|
348
|
+
amp "commit", [], :message => 'monkey'
|
327
349
|
assert_verify
|
328
350
|
|
329
|
-
#
|
330
|
-
|
331
|
-
|
332
|
-
|
333
|
-
|
334
|
-
|
335
|
-
|
336
|
-
|
337
|
-
|
338
|
-
|
339
|
-
|
340
|
-
|
341
|
-
|
342
|
-
|
343
|
-
|
351
|
+
# test that the commands work if we go into a subdir
|
352
|
+
Dir.chdir("commands")
|
353
|
+
assert_command_runs "status"
|
354
|
+
Dir.chdir("..")
|
355
|
+
|
356
|
+
assert_command_match(/monkey/, "info", "11")
|
357
|
+
assert_command_match(/conflict resolved/, "info", ["11", "8"])
|
358
|
+
|
359
|
+
assert_command_match(/10/, "identify", [], :rev => "10", :num => true)
|
360
|
+
|
361
|
+
diff_out = amp("diff", ["command.rb", "--rev", "2", "--rev", "3", "--no-color"])
|
362
|
+
assert_match(/\+\s+def silly_namespace\(name\)/, diff_out)
|
363
|
+
assert_match(/\-\s+def volt_namespace\(name\)/, diff_out)
|
364
|
+
|
365
|
+
# needs two args
|
366
|
+
assert_command_fails "move", ["STYLE.txt"]
|
367
|
+
# last argument must be directory if moving multiple files
|
368
|
+
assert_command_fails "move", ["STYLE.txt", "command.rb", "STYLE.txt"]
|
369
|
+
assert_command_fails "c"
|
370
|
+
# # Create and compare bundles of ALL revisions
|
371
|
+
# assert_amp_hg_bundle_same 'bundle_all.bundle', :all => true
|
372
|
+
#
|
373
|
+
# # Now go only up to the 3rd revision.
|
374
|
+
# assert_amp_hg_bundle_same 'bundle_up_to_3.bundle', :rev => 3, :all => true
|
375
|
+
#
|
376
|
+
# # We shall now test types 'none', 'bzip2', and 'gzip'
|
377
|
+
# ['none', 'bzip2', 'gzip'].each do |type|
|
378
|
+
# assert_amp_hg_bundle_same "bundle_up_to_7_with_type_#{type}.bundle",
|
379
|
+
# :rev => 7, :type => type, :all => true
|
380
|
+
# end
|
381
|
+
#
|
382
|
+
# # Test making bundles with --base
|
383
|
+
# assert_amp_hg_bundle_same 'bundle_up_to_3.bundle', :rev => 3, :base => 2
|
384
|
+
# assert_amp_hg_bundle_same 'bundle_up_to_3.bundle', :base => 3
|
344
385
|
ensure
|
345
386
|
# cleanup
|
346
387
|
exit_repo
|
@@ -351,6 +392,15 @@ class TestFunctional < Test::Unit::TestCase
|
|
351
392
|
|
352
393
|
private ##################################
|
353
394
|
|
395
|
+
def assert_command_runs(command, args=[], opts = {})
|
396
|
+
assert run_amp_command_with_code(command, args, opts)[1]
|
397
|
+
end
|
398
|
+
|
399
|
+
def assert_command_fails(command, args = [], opts = {})
|
400
|
+
assert_false run_amp_command_with_code(command, args, opts)[1]
|
401
|
+
end
|
402
|
+
|
403
|
+
|
354
404
|
def assert_amp_hg_bundle_same(fname, opts={})
|
355
405
|
amp "bundle", ["amp_#{fname}"], opts
|
356
406
|
hg "bundle", ["hg_#{fname}"], opts
|
@@ -369,7 +419,7 @@ class TestFunctional < Test::Unit::TestCase
|
|
369
419
|
##
|
370
420
|
#
|
371
421
|
def confirm_head_is_first_commit
|
372
|
-
heads_result =
|
422
|
+
heads_result = amp("heads")
|
373
423
|
assert_match(/changeset\: +0\:/, heads_result)
|
374
424
|
assert_match(/First commit\./, heads_result)
|
375
425
|
end
|
@@ -378,14 +428,14 @@ class TestFunctional < Test::Unit::TestCase
|
|
378
428
|
# Asserts that a) heads returns the most recent revision, b) log -l 1 returns only
|
379
429
|
# one revision.
|
380
430
|
def confirm_head_equals_log_limit_one
|
381
|
-
assert_equal
|
431
|
+
assert_equal amp("heads").strip, amp("log", ["-l","1"]).strip
|
382
432
|
end
|
383
433
|
|
384
434
|
##
|
385
435
|
# Asserts that a) heads returns the most recent revision, b) tip returns the correct
|
386
436
|
# revision.
|
387
437
|
def confirm_head_equals_tip
|
388
|
-
assert_equal
|
438
|
+
assert_equal amp("heads").strip, amp("tip").strip
|
389
439
|
end
|
390
440
|
|
391
441
|
##########################################
|
@@ -395,17 +445,17 @@ class TestFunctional < Test::Unit::TestCase
|
|
395
445
|
def add_file_ensure_added(source, dest=source)
|
396
446
|
copy_resource(source, dest)
|
397
447
|
assert_file "#{@current_repo}/#{dest}"
|
398
|
-
|
448
|
+
amp "add", dest
|
399
449
|
|
400
450
|
assert_file_is_added dest
|
401
451
|
end
|
402
452
|
|
403
453
|
def remove_file(source)
|
404
|
-
|
454
|
+
amp "remove", source
|
405
455
|
end
|
406
456
|
|
407
457
|
def assert_files_in_manifest(*files)
|
408
|
-
manifest_result =
|
458
|
+
manifest_result = amp("manifest")
|
409
459
|
[*files].each do |file|
|
410
460
|
assert_match(/#{file}/, manifest_result)
|
411
461
|
end
|
@@ -430,23 +480,23 @@ class TestFunctional < Test::Unit::TestCase
|
|
430
480
|
end
|
431
481
|
|
432
482
|
def assert_command_match(regex, command, args=[], opts={})
|
433
|
-
result =
|
483
|
+
result = amp command, args, opts
|
434
484
|
assert_match regex, result
|
435
485
|
end
|
436
486
|
|
437
487
|
def assert_command_no_match(regex, command, args=[], opts={})
|
438
|
-
result =
|
439
|
-
|
488
|
+
result = amp command, args, opts
|
489
|
+
refute_match regex, result
|
440
490
|
end
|
441
491
|
|
442
492
|
def assert_hg_command_match(regex, command, args=[], opts={})
|
443
|
-
result =
|
493
|
+
result = hg command, args, opts
|
444
494
|
assert_match regex, result
|
445
495
|
end
|
446
496
|
|
447
497
|
def assert_hg_command_no_match(regex, command, args=[], opts={})
|
448
|
-
result =
|
449
|
-
|
498
|
+
result = hg command, args, opts
|
499
|
+
refute_match regex, result
|
450
500
|
end
|
451
501
|
|
452
502
|
def assert_file_has_status(file, status)
|
@@ -464,18 +514,23 @@ class TestFunctional < Test::Unit::TestCase
|
|
464
514
|
when :modified
|
465
515
|
"M"
|
466
516
|
end
|
467
|
-
|
468
|
-
|
517
|
+
result = amp("status", nil, status.to_sym => true, :hg => true, :"no-color" => true)
|
518
|
+
|
519
|
+
assert_match(/#{stat_letter} #{file}/, result)
|
469
520
|
end
|
470
521
|
|
471
522
|
def commit(options = {})
|
472
|
-
|
523
|
+
amp "commit", [], options
|
473
524
|
end
|
474
525
|
|
475
526
|
###########################################
|
476
527
|
# OTHER HELPER METHODS
|
477
528
|
##########################################
|
478
529
|
|
530
|
+
def read_supporting_file(filename)
|
531
|
+
File.read(File.join($current_basedir, filename))
|
532
|
+
end
|
533
|
+
|
479
534
|
def get_resource(file_name, version="")
|
480
535
|
File.read(File.join($current_basedir, "resources", version, file_name))
|
481
536
|
end
|
@@ -496,6 +551,10 @@ class TestFunctional < Test::Unit::TestCase
|
|
496
551
|
end
|
497
552
|
|
498
553
|
def options_hash_to_string(options = {})
|
554
|
+
options_hash_to_array(options).join(" ")
|
555
|
+
end
|
556
|
+
|
557
|
+
def options_hash_to_array(options = {})
|
499
558
|
opt_arr = []
|
500
559
|
options.each do |k, v|
|
501
560
|
case v
|
@@ -504,10 +563,10 @@ class TestFunctional < Test::Unit::TestCase
|
|
504
563
|
when TrueClass
|
505
564
|
opt_arr << "--#{k}"
|
506
565
|
else
|
507
|
-
opt_arr << "--#{k}
|
566
|
+
opt_arr << "--#{k}" << v
|
508
567
|
end
|
509
568
|
end
|
510
|
-
opt_arr
|
569
|
+
opt_arr
|
511
570
|
end
|
512
571
|
|
513
572
|
##
|
@@ -531,7 +590,7 @@ class TestFunctional < Test::Unit::TestCase
|
|
531
590
|
# Executes the given command using the amp binary. Backbone of the functional tests.
|
532
591
|
#
|
533
592
|
# @example
|
534
|
-
#
|
593
|
+
# amp(:commit, "STYLE.txt", :user => "seydar", :date => "1/1/2001")
|
535
594
|
# will run
|
536
595
|
# `amp commit --user="seydar" --date="1/1/2001" STYLE.txt`
|
537
596
|
#
|
@@ -539,9 +598,42 @@ class TestFunctional < Test::Unit::TestCase
|
|
539
598
|
# @param [Array<String>] args the arguments to supply to the command.
|
540
599
|
# @param [Hash<#to_s => #to_s>] opts the options to pass to the command, such as :user => "seydar"
|
541
600
|
# for a commit command.
|
601
|
+
def run_amp_command_with_code(command, args = [], opts = {})
|
602
|
+
out = $stdout
|
603
|
+
argv = ARGV.dup
|
604
|
+
ARGV.clear.concat([command])
|
605
|
+
ARGV.concat([*args]) if args
|
606
|
+
ARGV.concat(options_hash_to_array(opts)) if opts
|
607
|
+
s = StringIO.new
|
608
|
+
$display = true
|
609
|
+
$stdout = s
|
610
|
+
result = ""
|
611
|
+
success = false
|
612
|
+
begin
|
613
|
+
success = Amp::Dispatch.run
|
614
|
+
rescue StandardError => err
|
615
|
+
$stdout = out
|
616
|
+
message = ["***** Left engine failure *****",
|
617
|
+
"***** Ejection system error *****",
|
618
|
+
"***** Vaccuum in booster engine *****"
|
619
|
+
][rand(3)]
|
620
|
+
Amp::UI.say message
|
621
|
+
Amp::UI.say err.to_s
|
622
|
+
err.backtrace.each {|e| Amp::UI.say "\tfrom #{e}" }
|
623
|
+
raise
|
624
|
+
ensure
|
625
|
+
ARGV.clear.concat(argv)
|
626
|
+
$stdout = out
|
627
|
+
result = s.string
|
628
|
+
end
|
629
|
+
|
630
|
+
[result, success]
|
631
|
+
end
|
632
|
+
|
542
633
|
def run_amp_command(command, args = [], opts = {})
|
543
|
-
|
544
|
-
|
634
|
+
result, success = *run_amp_command_with_code(command, args, opts)
|
635
|
+
|
636
|
+
result
|
545
637
|
end
|
546
638
|
alias_method :amp, :run_amp_command
|
547
639
|
|