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
data/lib/amp/support/openers.rb
CHANGED
@@ -19,7 +19,7 @@ module Amp
|
|
19
19
|
def initialize(base)
|
20
20
|
@root = File.expand_path base
|
21
21
|
@create_mode = nil
|
22
|
-
@default =
|
22
|
+
@default = :open_hg
|
23
23
|
end
|
24
24
|
|
25
25
|
##
|
@@ -27,10 +27,15 @@ module Amp
|
|
27
27
|
#
|
28
28
|
# @return path to the opener's root, as an absolute path.
|
29
29
|
def path
|
30
|
-
|
30
|
+
case @default
|
31
|
+
when :open_file
|
31
32
|
"#{root}/"
|
32
|
-
|
33
|
+
when :open_hg
|
33
34
|
"#{root}/.hg/"
|
35
|
+
when :open_git
|
36
|
+
"#{root}/.git"
|
37
|
+
else
|
38
|
+
abort "Unknown opener format #{@default.inspect}"
|
34
39
|
end
|
35
40
|
end
|
36
41
|
|
data/lib/amp/support/support.rb
CHANGED
@@ -1,7 +1,6 @@
|
|
1
|
-
|
2
1
|
require 'digest'
|
3
2
|
|
4
|
-
if RUBY_VERSION < "1.9"
|
3
|
+
if RUBY_VERSION < "1.9" || RUBY_VERSION >= "1.9.2"
|
5
4
|
require 'ftools'
|
6
5
|
|
7
6
|
autoload :Etc, 'etc'
|
@@ -9,6 +8,7 @@ if RUBY_VERSION < "1.9"
|
|
9
8
|
autoload :Tempfile, 'tempfile'
|
10
9
|
autoload :Socket, 'socket'
|
11
10
|
autoload :WeakRef, 'weakref'
|
11
|
+
autoload :Find, 'find'
|
12
12
|
else
|
13
13
|
require 'fileutils'
|
14
14
|
require 'socket'
|
@@ -16,6 +16,7 @@ else
|
|
16
16
|
require 'etc'
|
17
17
|
require 'tempfile'
|
18
18
|
require 'weakref'
|
19
|
+
require 'find'
|
19
20
|
end
|
20
21
|
autoload :ERB, 'erb'
|
21
22
|
|
@@ -41,12 +42,6 @@ class AbortError < StandardError
|
|
41
42
|
end
|
42
43
|
end
|
43
44
|
|
44
|
-
module Kernel
|
45
|
-
def abort(str)
|
46
|
-
AbortError.new str
|
47
|
-
end
|
48
|
-
end
|
49
|
-
|
50
45
|
class LockError < StandardError
|
51
46
|
attr_reader :errno, :filename, :desc
|
52
47
|
def initialize(errno, strerror, filename, desc)
|
@@ -187,6 +182,30 @@ class Module
|
|
187
182
|
end
|
188
183
|
self
|
189
184
|
end
|
185
|
+
|
186
|
+
##
|
187
|
+
# Creates an opposite method based on a defined method:
|
188
|
+
# one that returns true if the base method returns false, and vice-versa.
|
189
|
+
#
|
190
|
+
# @param [Symbol] new_method The new method to define
|
191
|
+
# @param [Symbol] base_method the base method we use to define the opposite
|
192
|
+
# method
|
193
|
+
def opposite_method(new_method, base_method)
|
194
|
+
class_eval <<-EOF
|
195
|
+
def #{new_method}(*args, &block)
|
196
|
+
not #{base_method}(*args, &block)
|
197
|
+
end
|
198
|
+
EOF
|
199
|
+
end
|
200
|
+
end
|
201
|
+
|
202
|
+
class Object
|
203
|
+
|
204
|
+
##
|
205
|
+
# Because tap isn't defined in 1.8.6
|
206
|
+
def tap
|
207
|
+
yield self
|
208
|
+
end unless defined?(tap)
|
190
209
|
end
|
191
210
|
|
192
211
|
module Kernel
|
@@ -216,23 +235,32 @@ module Kernel
|
|
216
235
|
#
|
217
236
|
# @yield The block is run, and any exceptions raised print their full backtrace.
|
218
237
|
def full_backtrace_please
|
219
|
-
message = ["***** Left engine failure *****",
|
220
|
-
"***** Ejection system error *****",
|
221
|
-
"***** Vaccuum in booster engine *****"
|
222
|
-
][rand(3)]
|
223
238
|
begin
|
224
239
|
yield
|
225
240
|
rescue AbortError => e
|
226
241
|
Amp::UI.say "Operation aborted."
|
227
242
|
raise
|
228
243
|
rescue StandardError => e
|
244
|
+
message = ["***** Left engine failure *****",
|
245
|
+
"***** Ejection system error *****",
|
246
|
+
"***** Vaccuum in booster engine *****"
|
247
|
+
][rand(3)]
|
229
248
|
Amp::UI.say message
|
230
249
|
Amp::UI.say e.to_s
|
231
250
|
e.backtrace.each {|err| Amp::UI.say "\tfrom #{err}" }
|
232
|
-
|
251
|
+
return
|
233
252
|
end
|
234
253
|
end
|
235
254
|
|
255
|
+
def amp_pause
|
256
|
+
Amp::UI.say "Amp is paused. Type 'go' and hit enter to continue"
|
257
|
+
until gets.strip == 'go'
|
258
|
+
end
|
259
|
+
end
|
260
|
+
|
261
|
+
def abort(str)
|
262
|
+
AbortError.new str
|
263
|
+
end
|
236
264
|
end
|
237
265
|
|
238
266
|
class Dir
|
@@ -464,6 +492,7 @@ class File
|
|
464
492
|
# @param [Boolean] empty whether or not to return an empty string as well
|
465
493
|
# @return [Array] the directories leading up to this path
|
466
494
|
def self.amp_directories_to(path, empty=false)
|
495
|
+
path = File.expand_path(path)
|
467
496
|
dirs = path.split('/')[0..-2]
|
468
497
|
ret = []
|
469
498
|
|
@@ -548,25 +577,41 @@ class Hash
|
|
548
577
|
# @param [Object] value (true) the value to assign each key to in the resultant hash
|
549
578
|
# @return [Hash] a hash with keys from +iterable+, all set to +value+
|
550
579
|
def self.with_keys(iterable, value=true)
|
551
|
-
|
580
|
+
# we try to be functional when it doesn't fuck us over
|
581
|
+
# here, the list of keys will never be ridiculous
|
582
|
+
# so we go fuctional
|
583
|
+
iterable.inject({}) {|h, k| h[k] = value; h }
|
552
584
|
end
|
553
585
|
|
554
586
|
##
|
555
587
|
# Create a subset of +self+ with keys +keys+.
|
556
588
|
def pick(*keys)
|
557
|
-
keys.inject({}) {|h, (k, v)| h[k] = v }
|
589
|
+
keys.inject({}) {|h, (k, v)| h[k] = v; h }
|
558
590
|
end
|
559
591
|
|
592
|
+
##
|
593
|
+
# Construct a new hash with only the specified +keyz+
|
594
|
+
#
|
595
|
+
# @return [Hash]
|
596
|
+
def only(*keyz)
|
597
|
+
keyz.inject({}) {|h, k| h[k] = self[k]; h }
|
598
|
+
end
|
560
599
|
end
|
561
600
|
|
562
601
|
class Array
|
563
602
|
|
564
603
|
##
|
565
|
-
# Sums all the items in the array
|
604
|
+
# Sums all the items in the array.
|
605
|
+
#
|
606
|
+
# From activesupport-2.3.5, activesupport/lib/active_support/core_ext/enumerable.rb, line 57
|
566
607
|
#
|
567
608
|
# @return [Array] the items summed
|
568
|
-
def sum
|
569
|
-
|
609
|
+
def sum(identity=0, &block)
|
610
|
+
if block_given?
|
611
|
+
map(&block).sum(identity)
|
612
|
+
else
|
613
|
+
inject { |sum, element| sum + element } || identity
|
614
|
+
end
|
570
615
|
end
|
571
616
|
|
572
617
|
##
|
@@ -587,7 +632,7 @@ class Array
|
|
587
632
|
end
|
588
633
|
|
589
634
|
def to_hash
|
590
|
-
inject({}) {|h, (k, v)| h
|
635
|
+
inject({}) {|h, (k, v)| h[k] = v; h }
|
591
636
|
end
|
592
637
|
|
593
638
|
def short_hex
|
@@ -627,18 +672,6 @@ class Integer
|
|
627
672
|
alias_method :gigabyte, :gigabytes
|
628
673
|
alias_method :gb, :gigabytes
|
629
674
|
|
630
|
-
|
631
|
-
##
|
632
|
-
# Forces this integer to be negative if it's supposed to be!
|
633
|
-
#
|
634
|
-
# @param [Fixnum] bits the number of bits to use - signed shorts are different from
|
635
|
-
# signed longs!
|
636
|
-
def to_signed(bits)
|
637
|
-
return to_signed_16 if bits == 16
|
638
|
-
return to_signed_32 if bits == 32
|
639
|
-
raise "Unexpected number of bits: #{bits}"
|
640
|
-
end
|
641
|
-
|
642
675
|
end
|
643
676
|
|
644
677
|
class String
|
@@ -648,18 +681,32 @@ class String
|
|
648
681
|
# @param [String] color_code a TTY color code
|
649
682
|
# @return [String] the string wrapped in non-printing characters to make the text
|
650
683
|
# appear in a given color
|
651
|
-
def colorize(color_code)
|
652
|
-
"#{color_code}#{self}\e[
|
684
|
+
def colorize(color_code, closing_tag = 39)
|
685
|
+
"\e[#{color_code}m#{self}\e[#{closing_tag}m"
|
686
|
+
end
|
687
|
+
|
688
|
+
[:black, :red, :green, :yellow, :blue, :magenta, :cyan, :white].tap do |list|
|
689
|
+
list.each_with_index do |arg, idx|
|
690
|
+
define_method(arg) { colorize(30 + idx, 39) }
|
691
|
+
define_method("on_#{arg}") { colorize(40 + idx, 49) }
|
692
|
+
end
|
693
|
+
define_method :color do |*args|
|
694
|
+
result = self
|
695
|
+
args.each do |arg|
|
696
|
+
if arg.to_s[0,3] == "on_"
|
697
|
+
then base = 40; arg = arg.to_s[3..-1].to_sym
|
698
|
+
else base = 30
|
699
|
+
end
|
700
|
+
result = result.colorize(base + list.index(arg), base + 9)
|
701
|
+
end
|
702
|
+
result
|
703
|
+
end
|
653
704
|
end
|
654
705
|
|
655
706
|
# Returns the string, colored red.
|
656
|
-
def
|
657
|
-
def
|
658
|
-
def
|
659
|
-
def blue; colorize("\e[34m"); end
|
660
|
-
def magenta; colorize("\e[35m"); end
|
661
|
-
def cyan; colorize("\e[36m"); end
|
662
|
-
def white; colorize("\e[37m"); end
|
707
|
+
def bold; colorize(1, 22); end
|
708
|
+
def underline; colorize(4, 24); end
|
709
|
+
def blink; colorize(5, 25); end
|
663
710
|
|
664
711
|
##
|
665
712
|
# Returns the path from +root+ to the path represented by the string. Will fail
|
@@ -677,12 +724,12 @@ class String
|
|
677
724
|
|
678
725
|
# Am I equal to the NULL_ID used in revision logs?
|
679
726
|
def null?
|
680
|
-
self == Amp::RevlogSupport::Node::NULL_ID
|
727
|
+
self == Amp::Mercurial::RevlogSupport::Node::NULL_ID
|
681
728
|
end
|
682
729
|
|
683
730
|
# Am I not equal to the NULL_ID used in revision logs?
|
684
731
|
def not_null?
|
685
|
-
!
|
732
|
+
!null?
|
686
733
|
end
|
687
734
|
|
688
735
|
##
|
@@ -1081,11 +1128,9 @@ module Amp
|
|
1081
1128
|
# architecture, and upates the SYSTEM[] hash in the Support module.
|
1082
1129
|
def self.determine_endianness
|
1083
1130
|
num = 0x12345678
|
1084
|
-
little = '78563412'
|
1085
|
-
big = '12345678'
|
1086
1131
|
native = [num].pack('l')
|
1087
|
-
netunpack = native.unpack('N')
|
1088
|
-
if
|
1132
|
+
netunpack = native.unpack('N')[0]
|
1133
|
+
if num == netunpack
|
1089
1134
|
SYSTEM[:endian] = :big
|
1090
1135
|
else
|
1091
1136
|
SYSTEM[:endian] = :little
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
@@ -7,7 +7,7 @@ module Amp
|
|
7
7
|
# Class representing a template in the amp system
|
8
8
|
class Template
|
9
9
|
|
10
|
-
@all_templates = {}
|
10
|
+
@all_templates = Hash.new {|h, k| h[k] = {} }
|
11
11
|
class << self
|
12
12
|
attr_accessor :all_templates
|
13
13
|
|
@@ -16,9 +16,9 @@ module Amp
|
|
16
16
|
#
|
17
17
|
# @param [String, Symbol, #to_sym] template the name of the template to retrieve
|
18
18
|
# @return [Template] the template with the given name
|
19
|
-
def [](template)
|
19
|
+
def [](type, template)
|
20
20
|
ensure_templates_loaded
|
21
|
-
return all_templates[template.to_sym]
|
21
|
+
return all_templates[type.to_sym][template.to_sym]
|
22
22
|
end
|
23
23
|
|
24
24
|
##
|
@@ -26,8 +26,8 @@ module Amp
|
|
26
26
|
#
|
27
27
|
# @param [String, Symbol, #to_sym] name the name of the template. Should be unique.
|
28
28
|
# @param [Template] template the template to register.
|
29
|
-
def register(name, template)
|
30
|
-
all_templates[name.to_sym] = template
|
29
|
+
def register(type, name, template)
|
30
|
+
all_templates[type.to_sym][name.to_sym] = template
|
31
31
|
end
|
32
32
|
|
33
33
|
##
|
@@ -36,9 +36,9 @@ module Amp
|
|
36
36
|
#
|
37
37
|
# @param [String, Symbol, #to_sym] name the name of the template to remove from
|
38
38
|
# the system.
|
39
|
-
def unregister(name)
|
40
|
-
raise ArgumentError.new("Unknown template: #{name}") unless all_templates[name.to_sym]
|
41
|
-
all_templates.delete name.to_sym
|
39
|
+
def unregister(type, name)
|
40
|
+
raise ArgumentError.new("Unknown template: #{name}") unless all_templates[type.to_sym][name.to_sym]
|
41
|
+
all_templates[type.to_sym].delete name.to_sym
|
42
42
|
end
|
43
43
|
|
44
44
|
##
|
@@ -53,9 +53,10 @@ module Amp
|
|
53
53
|
# Registers the default templates. Separated into a method (instead of automatically
|
54
54
|
# run) because templates aren't used enough to justify the IO hit from loading them in.
|
55
55
|
def load_default_templates
|
56
|
-
Dir[File.expand_path(File.join(File.dirname(__FILE__), "
|
56
|
+
Dir[File.expand_path(File.join(File.dirname(__FILE__), "**/*.erb"))].each do |f|
|
57
57
|
name = f.split('/').last.chomp('.erb').sub('.','-')
|
58
|
-
|
58
|
+
type = f.split('/')[-2]
|
59
|
+
FileTemplate.new(type, name, f)
|
59
60
|
end
|
60
61
|
end
|
61
62
|
|
@@ -69,6 +70,7 @@ module Amp
|
|
69
70
|
instance_eval do
|
70
71
|
def ensure_templates_loaded; end
|
71
72
|
end
|
73
|
+
true
|
72
74
|
end
|
73
75
|
end
|
74
76
|
|
@@ -83,9 +85,9 @@ module Amp
|
|
83
85
|
# @param [Symbol] type the type of the template. Indicates the renderer used.
|
84
86
|
# @param [String] text the text of the template, which presumably has some templating
|
85
87
|
# code to substitute in local variables and make a nice output system.
|
86
|
-
def initialize(name, renderer = :erb, text = "")
|
88
|
+
def initialize(type, name, renderer = :erb, text = "")
|
87
89
|
@name, @renderer, @text = name, renderer, text
|
88
|
-
Template.register(name, self)
|
90
|
+
Template.register(type, name, self)
|
89
91
|
end
|
90
92
|
|
91
93
|
##
|
@@ -103,7 +105,7 @@ module Amp
|
|
103
105
|
case renderer.to_sym
|
104
106
|
when :erb
|
105
107
|
require 'erb'
|
106
|
-
locals_assigns = locals.
|
108
|
+
locals_assigns = locals.map { |k,v| "#{k} = locals[:#{k}]" }
|
107
109
|
eval locals_assigns.join("\n"), render_binding
|
108
110
|
|
109
111
|
erb = ERB.new(text, 0, "-")
|
@@ -128,17 +130,17 @@ module Amp
|
|
128
130
|
class FileTemplate < Template
|
129
131
|
KNOWN_EXTENSIONS = ["erb", "haml"]
|
130
132
|
|
131
|
-
attr_accessor :file
|
133
|
+
attr_accessor :file
|
132
134
|
|
133
135
|
##
|
134
136
|
# Initializes a new FileTemplate with different
|
135
|
-
def initialize(name, file, renderer = nil)
|
137
|
+
def initialize(type, name, file, renderer = nil)
|
136
138
|
if renderer.nil?
|
137
139
|
renderer = KNOWN_EXTENSIONS.select {|ext| file.end_with? ext}.first
|
138
140
|
end
|
139
141
|
raise ArgumentError.new("No renderer specified for #{file.inspect}") if renderer.nil?
|
140
142
|
@file = file
|
141
|
-
super(name, renderer, File.read(file))
|
143
|
+
super(type, name, renderer, File.read(file))
|
142
144
|
end
|
143
145
|
|
144
146
|
def save!
|
@@ -146,8 +148,6 @@ module Amp
|
|
146
148
|
end
|
147
149
|
end
|
148
150
|
|
149
|
-
|
150
|
-
|
151
151
|
end
|
152
152
|
end
|
153
153
|
|
data/man/amp.1
ADDED
@@ -0,0 +1,51 @@
|
|
1
|
+
.Dd January 10, 2010
|
2
|
+
.Os
|
3
|
+
.Dt amp 1
|
4
|
+
.Sh NAME
|
5
|
+
.Nm amp
|
6
|
+
.Nd Ruby-based VCS engine
|
7
|
+
.Sh SYNOPSIS
|
8
|
+
.Nm
|
9
|
+
.Op Fl d
|
10
|
+
.Op Fl verbose
|
11
|
+
.Op Fl profile
|
12
|
+
.Op Fl R Ar repo_dir
|
13
|
+
.Op Fl pure-ruby
|
14
|
+
.Op Fl testing
|
15
|
+
.Ar command ...
|
16
|
+
.Sh DESCRIPTION
|
17
|
+
Amp is a revolutionary change in how we approach version control systems. Not only does it re-implement
|
18
|
+
Mercurial's core in Ruby, but re-thinks how we interact with version control. It intends to wrap multiple
|
19
|
+
VCS systems - git, hg, svn - under the same API, allowing the unique Amp command system to work with all
|
20
|
+
repositories in the same manner.
|
21
|
+
|
22
|
+
Amp currently implements Mercurial and a large subset of the Mercurial command-set.
|
23
|
+
.Bl -tag -width "mmmmmmmmmm" -compact
|
24
|
+
.Pp
|
25
|
+
.It Fl verbose
|
26
|
+
Enables verbose output for the entire Amp process.
|
27
|
+
.Pp
|
28
|
+
.It Fl d
|
29
|
+
Prings a variety of debug information about the arguments and options passed into amp.
|
30
|
+
.Pp
|
31
|
+
.It Fl profile
|
32
|
+
Profiles the amp process as it runs the requested command. Deprecated and unwise.
|
33
|
+
.Pp
|
34
|
+
.It Fl R Ar repo_dir
|
35
|
+
The path to the repository to use
|
36
|
+
.Pp
|
37
|
+
.It Fl pure-ruby
|
38
|
+
Use only pure ruby (no C-extensions)
|
39
|
+
.Pp
|
40
|
+
.It Fl testing
|
41
|
+
Running a test. Don't touch this.
|
42
|
+
.El
|
43
|
+
.Pp
|
44
|
+
.Sh SEE ALSO
|
45
|
+
.Xr git 1
|
46
|
+
.Xr hg 1
|
47
|
+
.Xr ruby 1
|
48
|
+
.Xr amprc 5
|
49
|
+
.Sh AUTHORS
|
50
|
+
.An "Michael Edgar" Aq adgar@carboni.ca
|
51
|
+
.An "Ari Brown" Aq seydar@carboni.ca
|