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
@@ -1,126 +0,0 @@
|
|
1
|
-
autoload :Zlib, 'zlib'
|
2
|
-
module Amp
|
3
|
-
module RevlogSupport
|
4
|
-
|
5
|
-
class RevlogError < StandardError; end
|
6
|
-
class LookupError < StandardError; end
|
7
|
-
|
8
|
-
module Support
|
9
|
-
extend self
|
10
|
-
|
11
|
-
# Old version of the revlog file format
|
12
|
-
REVLOG_VERSION_0 = 0
|
13
|
-
# Current version of the revlog file format
|
14
|
-
REVLOG_VERSION_NG = 1
|
15
|
-
# A flag marking that the data is stored with the index
|
16
|
-
REVLOG_NG_INLINE_DATA = (1 << 16)
|
17
|
-
# Default flags - always start inline (turn off inline if file is huge)
|
18
|
-
REVLOG_DEFAULT_FLAGS = REVLOG_NG_INLINE_DATA
|
19
|
-
# Default format - the most recent
|
20
|
-
REVLOG_DEFAULT_FORMAT = REVLOG_VERSION_NG
|
21
|
-
# Default version in general
|
22
|
-
REVLOG_DEFAULT_VERSION = REVLOG_DEFAULT_FORMAT | REVLOG_DEFAULT_FLAGS
|
23
|
-
|
24
|
-
##
|
25
|
-
# This bears some explanation.
|
26
|
-
#
|
27
|
-
# Rather than simply having a 4-byte header for the index file format, the
|
28
|
-
# Mercurial format takes the first entry in the index, and stores the header
|
29
|
-
# in its offset field. (The offset field is a 64-bit unsigned integer which
|
30
|
-
# stores the offset into the data or index of the associated record's data)
|
31
|
-
# They take advantage of the fact that the first entry's offset will always
|
32
|
-
# be 0. As such, its offset field is always going to be zero, so it's safe
|
33
|
-
# to store data there.
|
34
|
-
#
|
35
|
-
# The format is ((flags << 16) | (version)), where +flags+ is a bitmask (up to 48
|
36
|
-
# bits) and +version+ is a 16-bit unsigned short.
|
37
|
-
#
|
38
|
-
# The worst part is, EVERY SINGLE ENTRY has its offset shifted 16 bits to the left,
|
39
|
-
# apparently all because of this. It fucking baffles my mind.
|
40
|
-
#
|
41
|
-
# So yeah. offset = value >> 16.
|
42
|
-
def get_offset(o); o >> 16; end
|
43
|
-
# And yeah. version = value && 0xFFFF (last 16 bits)
|
44
|
-
def get_version(t); t & 0xFFFF; end
|
45
|
-
|
46
|
-
# Combine an offset and a version to spit this baby out
|
47
|
-
def offset_version(offset,type)
|
48
|
-
(offset << 16) | type
|
49
|
-
end
|
50
|
-
|
51
|
-
##
|
52
|
-
# generate a hash from the given text and its parent hashes
|
53
|
-
#
|
54
|
-
# This hash combines both the current file contents and its history
|
55
|
-
# in a manner that makes it easy to distinguish nodes with the same
|
56
|
-
# content in the revision graph.
|
57
|
-
#
|
58
|
-
# since an entry in a revlog is pretty
|
59
|
-
# much [parent1, parent2, text], we use a hash of the previous entry
|
60
|
-
# as a reference to that previous entry. To create a reference to this
|
61
|
-
# entry, we make a hash of the first parent (which is just its ID), the
|
62
|
-
# second parent, and the text.
|
63
|
-
#
|
64
|
-
# @return [String] the digest of the two parents and the extra text
|
65
|
-
def history_hash(text, p1, p2)
|
66
|
-
list = [p1, p2].sort
|
67
|
-
s = list[0].sha1
|
68
|
-
s.update list[1]
|
69
|
-
s.update text
|
70
|
-
s.digest
|
71
|
-
end
|
72
|
-
|
73
|
-
##
|
74
|
-
# returns the possibly-compressed version of the text, in a hash:
|
75
|
-
#
|
76
|
-
# @return [Hash] :compression => 'u' or ''
|
77
|
-
def compress(text)
|
78
|
-
return {:compression => "", :text => text} if text.empty?
|
79
|
-
size = text.size
|
80
|
-
binary = nil
|
81
|
-
if size < 44
|
82
|
-
elsif size > 1000000 #big ole file
|
83
|
-
deflater = Zlib::Deflate.new
|
84
|
-
parts = []
|
85
|
-
position = 0
|
86
|
-
while position < size
|
87
|
-
newposition = position + 2**20
|
88
|
-
parts << deflater.deflate(text[position..(newposition-1)], Zlib::NO_FLUSH)
|
89
|
-
position = newposition
|
90
|
-
end
|
91
|
-
parts << deflater.flush
|
92
|
-
binary = parts.join if parts.map {|e| e.size}.sum < size # only add it if
|
93
|
-
# compression made it smaller
|
94
|
-
else #tiny, just compress it
|
95
|
-
binary = Zlib::Deflate.deflate text
|
96
|
-
end
|
97
|
-
|
98
|
-
if binary.nil? || binary.size > size
|
99
|
-
return {:compression => "", :text => text} if text[0,1] == "\0"
|
100
|
-
return {:compression => 'u', :text => text}
|
101
|
-
end
|
102
|
-
{:compression => "", :text => binary}
|
103
|
-
end
|
104
|
-
|
105
|
-
##
|
106
|
-
# Decompresses the given binary text. The binary text could be
|
107
|
-
# uncompressed, in which case, we'll figure that out. Don't worry.
|
108
|
-
#
|
109
|
-
# @param [String] binary the text to (possibly) decompress
|
110
|
-
# @return [String] the text decompressed
|
111
|
-
def decompress(binary)
|
112
|
-
return binary if binary.empty?
|
113
|
-
case binary[0,1]
|
114
|
-
when "\0"
|
115
|
-
binary #we're just stored as binary
|
116
|
-
when "x"
|
117
|
-
Zlib::Inflate.inflate(binary) #we're zlibbed
|
118
|
-
when "u"
|
119
|
-
binary[1..-1] #we're uncompressed text
|
120
|
-
else
|
121
|
-
raise LookupError.new("Unknown compression type #{binary[0,1]}")
|
122
|
-
end
|
123
|
-
end
|
124
|
-
end
|
125
|
-
end
|
126
|
-
end
|
data/lib/amp/support/ignore.rb
DELETED
@@ -1,144 +0,0 @@
|
|
1
|
-
module Amp
|
2
|
-
module Ignore
|
3
|
-
extend self
|
4
|
-
|
5
|
-
COMMENT = /((^|[^\\])(\\\\)*)#.*/
|
6
|
-
SYNTAXES = {'re' => :regexp, 'regexp' => :regexp, 'glob' => :glob,
|
7
|
-
'relglob' => :relglob, 'relre' => :regexp, 'path' => :glob,
|
8
|
-
'relpath' => :relglob}
|
9
|
-
##
|
10
|
-
# Parses the ignore file, +file+ (or ".hgignore")
|
11
|
-
#
|
12
|
-
# @param [String] root the root of the repo
|
13
|
-
# @param [Array<String>] files absolute paths to files
|
14
|
-
def parse_ignore(root, files=[])
|
15
|
-
patterns = {} # not sure what this is
|
16
|
-
|
17
|
-
files.each do |file|
|
18
|
-
syntax = 're' # default syntax
|
19
|
-
text = File.read File.join(root,file) rescue next
|
20
|
-
pattern = matcher_for_text text
|
21
|
-
patterns[file] = pattern if pattern
|
22
|
-
end # files.each
|
23
|
-
|
24
|
-
all_patterns = patterns.values.flatten
|
25
|
-
# let the system know that nothing is ignored
|
26
|
-
return proc { false } if all_patterns.empty?
|
27
|
-
# here's the proc to do the tests
|
28
|
-
regexps_to_proc all_patterns
|
29
|
-
end
|
30
|
-
|
31
|
-
##
|
32
|
-
# Parse the lines into valid syntax
|
33
|
-
#
|
34
|
-
# @param [String] file and open file
|
35
|
-
def parse_lines(text)
|
36
|
-
lines = text.split("\n").map do |line|
|
37
|
-
if line =~ /#/
|
38
|
-
line.sub! COMMENT, "\\1"
|
39
|
-
line.gsub! "\\#", "#"
|
40
|
-
end
|
41
|
-
|
42
|
-
line.rstrip!
|
43
|
-
line.empty? ? nil : line
|
44
|
-
end
|
45
|
-
lines.compact
|
46
|
-
end
|
47
|
-
|
48
|
-
##
|
49
|
-
# Produces an array of regexps which can be used
|
50
|
-
# for matching files
|
51
|
-
#
|
52
|
-
# @param [String] text the text to parse
|
53
|
-
# @return [[Regexp]] the regexps generated from the strings and syntaxes
|
54
|
-
def matcher_for_text(text)
|
55
|
-
return [] unless text
|
56
|
-
syntax = nil
|
57
|
-
patterns = parse_lines(text).map do |line|
|
58
|
-
next if line.empty?
|
59
|
-
# check for syntax changes
|
60
|
-
if line =~ /^syntax:/
|
61
|
-
syntax = SYNTAXES[line[7..-1].strip] || :regexp
|
62
|
-
next # move on
|
63
|
-
end
|
64
|
-
parse_line syntax, line # could be nil, so we need to compact it
|
65
|
-
end # parsed_lines(text)
|
66
|
-
patterns.compact # kill the nils
|
67
|
-
end
|
68
|
-
|
69
|
-
##
|
70
|
-
# Much like matcher_for_text, except tailored to single line strings
|
71
|
-
#
|
72
|
-
# @see matcher_for_text
|
73
|
-
# @param [String] string the string to parse
|
74
|
-
# @return [Regexp] the regexps generated from the strings and syntaxes
|
75
|
-
def matcher_for_string(string)
|
76
|
-
scanpt = string =~ /(\w+):(.+)/
|
77
|
-
if scanpt.nil?
|
78
|
-
# just a line, no specified syntax
|
79
|
-
syntax = 'regexp'
|
80
|
-
# no syntax, the whole thing is a pattern
|
81
|
-
include_regexp = string
|
82
|
-
else
|
83
|
-
syntax = $1 # the syntax is the first match
|
84
|
-
include_regexp = $2.strip # the rest of the string is the pattern
|
85
|
-
end
|
86
|
-
include_syntax = syntax.to_sym
|
87
|
-
parse_line include_syntax, include_regexp
|
88
|
-
end
|
89
|
-
|
90
|
-
##
|
91
|
-
# Turns a single line, given a syntax, into either
|
92
|
-
# a valid regexp or nil. If it is nil, it means the
|
93
|
-
# syntax was incorrect.
|
94
|
-
#
|
95
|
-
# @param [Symbol] syntax the syntax to parse with (:regexp, :glob, :relglob)
|
96
|
-
# @param [String] line the line to parse
|
97
|
-
# @return [NilClass, Regexp] nil means the syntax was a bad choice
|
98
|
-
def parse_line(syntax, line)
|
99
|
-
return nil unless syntax
|
100
|
-
|
101
|
-
# find more valid syntax stuff
|
102
|
-
# we need to make everything here valid regexps
|
103
|
-
case syntax.to_sym
|
104
|
-
when :regexp
|
105
|
-
# basic regex
|
106
|
-
pattern = /#{line}/
|
107
|
-
when :glob, :relglob
|
108
|
-
# glob: glob (shell style), relative to the root of the repository
|
109
|
-
# relglob: glob, except we just match somewhere in the string, not from the root of
|
110
|
-
# the repository
|
111
|
-
ps = line.split '/**/'
|
112
|
-
ps.map! do |l|
|
113
|
-
parts = l.split '*' # split it up and we'll escape all the parts
|
114
|
-
parts.map! {|p| Regexp.escape p }
|
115
|
-
/#{parts.join '[^/]*'}/ # anything but a slash, ie, no change in directories
|
116
|
-
end
|
117
|
-
joined = ps.join '/(?:.*/)*'
|
118
|
-
pattern = (syntax.to_sym == :glob) ? /^#{joined}/ : /#{joined}/
|
119
|
-
else
|
120
|
-
pattern = nil
|
121
|
-
end
|
122
|
-
|
123
|
-
pattern
|
124
|
-
end
|
125
|
-
|
126
|
-
##
|
127
|
-
# Converts all the ignored regexps into a proc that matches against all of these
|
128
|
-
# regexps. That way we can pass around a single proc that checks if a file is ignored.
|
129
|
-
#
|
130
|
-
# @param [Array<Regexp>] regexps all of the regexes that we need to match against
|
131
|
-
# @return [Proc] a proc that, when called with a file's path, will return whether
|
132
|
-
# it matches any of the regexps.
|
133
|
-
def regexps_to_proc(*regexps)
|
134
|
-
regexps = regexps.flatten.compact # needed because of possible nils
|
135
|
-
if regexps.empty?
|
136
|
-
proc { false }
|
137
|
-
else
|
138
|
-
proc { |file| regexps.any? {|p| file =~ p } }
|
139
|
-
end
|
140
|
-
end
|
141
|
-
alias_method :regexp_to_proc, :regexps_to_proc
|
142
|
-
|
143
|
-
end
|
144
|
-
end
|
data/site/Rakefile
DELETED
@@ -1,38 +0,0 @@
|
|
1
|
-
# -*- ruby -*-
|
2
|
-
|
3
|
-
require 'rubygems'
|
4
|
-
require 'rake'
|
5
|
-
require 'rake/tasklib'
|
6
|
-
|
7
|
-
require 'src/helpers.rb'
|
8
|
-
require 'ftools'
|
9
|
-
|
10
|
-
desc "Compile Site"
|
11
|
-
task :"build-website" do
|
12
|
-
missing_gems = []
|
13
|
-
requirements = ['haml', 'uv']
|
14
|
-
requirements.each do |requirement|
|
15
|
-
begin
|
16
|
-
require requirement
|
17
|
-
rescue LoadError => e
|
18
|
-
puts "The following gems are required to build the amp website: #{requirements.join(", ")}"
|
19
|
-
puts "Install them as follows: gem install #{requirements.join(" ")}"
|
20
|
-
exit
|
21
|
-
end
|
22
|
-
end
|
23
|
-
Dir["src/**/*.haml"].reject {|item| item.split("/").last =~ /^_/}.each do |haml|
|
24
|
-
FileUtils.makedirs(File.dirname("build" + haml[3..-6] + ".html"))
|
25
|
-
File.open("build" + haml[3..-6] + ".html","w") do |out|
|
26
|
-
puts "Building #{haml[3..-6]}"
|
27
|
-
out.write render(haml)
|
28
|
-
end
|
29
|
-
end
|
30
|
-
%w(css images scripts docs).each do |dir|
|
31
|
-
if File.exist? "src/#{dir}/"
|
32
|
-
sh "cp -r src/#{dir}/ build/#{dir}/"
|
33
|
-
end
|
34
|
-
end
|
35
|
-
end
|
36
|
-
|
37
|
-
task :default => :"build-website" do
|
38
|
-
end
|
data/test/test_amp.rb
DELETED
data/test/test_helper.rb
DELETED
@@ -1,15 +0,0 @@
|
|
1
|
-
require 'test/unit'
|
2
|
-
|
3
|
-
def assert_false(val)
|
4
|
-
assert_equal(false, !!val)
|
5
|
-
end
|
6
|
-
|
7
|
-
def assert_not_nil(val)
|
8
|
-
assert_not_equal(nil, val)
|
9
|
-
end
|
10
|
-
|
11
|
-
def assert_file_contents(file, contents)
|
12
|
-
File.open(file,"r") do |f|
|
13
|
-
assert_equal f.read, contents
|
14
|
-
end
|
15
|
-
end
|