norbert-braid 0.4.9 → 0.4.12
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/bin/braid +18 -5
- data/braid.gemspec +3 -3
- data/lib/braid/commands/setup.rb +1 -1
- data/lib/braid/mirror.rb +14 -1
- data/lib/braid/operations.rb +47 -5
- data/lib/braid.rb +4 -2
- data/test/fixtures/shiny/README +3 -0
- data/test/fixtures/skit1/layouts/layout.liquid +219 -0
- data/test/fixtures/skit1/preview.png +0 -0
- data/test/fixtures/skit1.1/layouts/layout.liquid +219 -0
- data/test/fixtures/skit1.2/layouts/layout.liquid +221 -0
- data/test/integration/adding_test.rb +80 -0
- data/test/integration/updating_test.rb +87 -0
- data/test/integration_helper.rb +69 -0
- data/test/mirror_test.rb +24 -0
- data/test/operations_test.rb +5 -0
- metadata +14 -6
data/bin/braid
CHANGED
|
@@ -51,9 +51,10 @@ Main {
|
|
|
51
51
|
. braid add svn://remote/path --branch notmaster
|
|
52
52
|
TXT
|
|
53
53
|
|
|
54
|
-
mixin :argument_url, :option_type, :optional_path, :option_branch, :option_rails_plugin, :option_revision, :option_full
|
|
54
|
+
mixin :argument_url, :option_type, :optional_path, :option_branch, :option_rails_plugin, :option_revision, :option_full, :option_verbose
|
|
55
55
|
|
|
56
56
|
run {
|
|
57
|
+
Braid::Operations::VERBOSE = verbose
|
|
57
58
|
Braid::Command.run(:add, url, { "type" => type, "path" => path, "branch" => branch, "rails_plugin" => rails_plugin, "revision" => revision, "full" => full })
|
|
58
59
|
}
|
|
59
60
|
}
|
|
@@ -74,9 +75,10 @@ Main {
|
|
|
74
75
|
. braid update local/dir
|
|
75
76
|
TXT
|
|
76
77
|
|
|
77
|
-
mixin :optional_path, :option_revision, :option_head, :option_safe
|
|
78
|
+
mixin :optional_path, :option_revision, :option_head, :option_safe, :option_verbose
|
|
78
79
|
|
|
79
80
|
run {
|
|
81
|
+
Braid::Operations::VERBOSE = verbose
|
|
80
82
|
Braid::Command.run(:update, path, { "revision" => revision, "head" => head , "safe" => safe })
|
|
81
83
|
}
|
|
82
84
|
}
|
|
@@ -94,9 +96,10 @@ Main {
|
|
|
94
96
|
. braid remove local/dir
|
|
95
97
|
TXT
|
|
96
98
|
|
|
97
|
-
mixin :argument_path
|
|
99
|
+
mixin :argument_path, :option_verbose
|
|
98
100
|
|
|
99
101
|
run {
|
|
102
|
+
Braid::Operations::VERBOSE = verbose
|
|
100
103
|
Braid::Command.run(:remove, path)
|
|
101
104
|
}
|
|
102
105
|
}
|
|
@@ -110,9 +113,10 @@ Main {
|
|
|
110
113
|
. braid setup local/dir
|
|
111
114
|
TXT
|
|
112
115
|
|
|
113
|
-
mixin :optional_path
|
|
116
|
+
mixin :optional_path, :option_verbose
|
|
114
117
|
|
|
115
118
|
run {
|
|
119
|
+
Braid::Operations::VERBOSE = verbose
|
|
116
120
|
Braid::Command.run(:setup, path)
|
|
117
121
|
}
|
|
118
122
|
}
|
|
@@ -126,9 +130,10 @@ Main {
|
|
|
126
130
|
. braid diff local/dir
|
|
127
131
|
TXT
|
|
128
132
|
|
|
129
|
-
mixin :argument_path
|
|
133
|
+
mixin :argument_path, :option_verbose
|
|
130
134
|
|
|
131
135
|
run {
|
|
136
|
+
Braid::Operations::VERBOSE = verbose
|
|
132
137
|
Braid::Command.run(:diff, path)
|
|
133
138
|
}
|
|
134
139
|
}
|
|
@@ -218,6 +223,14 @@ Main {
|
|
|
218
223
|
attr
|
|
219
224
|
}
|
|
220
225
|
}
|
|
226
|
+
|
|
227
|
+
mixin(:option_verbose) {
|
|
228
|
+
option(:verbose, :v) {
|
|
229
|
+
optional
|
|
230
|
+
desc 'log shell commands'
|
|
231
|
+
attr
|
|
232
|
+
}
|
|
233
|
+
}
|
|
221
234
|
|
|
222
235
|
run { help! }
|
|
223
236
|
}
|
data/braid.gemspec
CHANGED
|
@@ -1,18 +1,18 @@
|
|
|
1
1
|
Gem::Specification.new do |s|
|
|
2
2
|
s.name = %q{braid}
|
|
3
|
-
s.version = "0.4.
|
|
3
|
+
s.version = "0.4.12"
|
|
4
4
|
|
|
5
5
|
s.specification_version = 2 if s.respond_to? :specification_version=
|
|
6
6
|
|
|
7
7
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
|
8
8
|
s.authors = ["Cristi Balan", "Norbert Crombach"]
|
|
9
|
-
s.date = %q{2008-
|
|
9
|
+
s.date = %q{2008-10-04}
|
|
10
10
|
s.default_executable = %q{braid}
|
|
11
11
|
s.description = %q{A simple tool for tracking vendor branches in git.}
|
|
12
12
|
s.email = %q{evil@che.lu}
|
|
13
13
|
s.executables = ["braid"]
|
|
14
14
|
s.extra_rdoc_files = ["README.rdoc"]
|
|
15
|
-
s.files = ["
|
|
15
|
+
s.files = ["bin/braid", "braid.gemspec", "lib/braid/command.rb", "lib/braid/commands/add.rb", "lib/braid/commands/diff.rb", "lib/braid/commands/remove.rb", "lib/braid/commands/setup.rb", "lib/braid/commands/update.rb", "lib/braid/config.rb", "lib/braid/mirror.rb", "lib/braid/operations.rb", "lib/braid.rb", "LICENSE", "Rakefile", "README.rdoc", "test/braid_test.rb", "test/config_test.rb", "test/fixtures/shiny/README", "test/fixtures/skit1/layouts/layout.liquid", "test/fixtures/skit1/preview.png", "test/fixtures/skit1.1/layouts/layout.liquid", "test/fixtures/skit1.2/layouts/layout.liquid", "test/integration/adding_test.rb", "test/integration/updating_test.rb", "test/integration_helper.rb", "test/mirror_test.rb", "test/operations_test.rb", "test/test_helper.rb"]
|
|
16
16
|
s.has_rdoc = true
|
|
17
17
|
s.homepage = %q{http://evil.che.lu/projects/braid}
|
|
18
18
|
s.rdoc_options = ["--line-numbers", "--inline-source", "--title", "braid", "--main", "README.rdoc"]
|
data/lib/braid/commands/setup.rb
CHANGED
|
@@ -23,7 +23,7 @@ module Braid
|
|
|
23
23
|
|
|
24
24
|
msg "Setting up remote for '#{mirror.path}/'."
|
|
25
25
|
unless mirror.type == "svn"
|
|
26
|
-
git.remote_add(mirror.remote, mirror.
|
|
26
|
+
git.remote_add(mirror.remote, mirror.cached_url, mirror.branch)
|
|
27
27
|
else
|
|
28
28
|
git_svn.init(mirror.remote, mirror.url)
|
|
29
29
|
end
|
data/lib/braid/mirror.rb
CHANGED
|
@@ -29,7 +29,7 @@ module Braid
|
|
|
29
29
|
end
|
|
30
30
|
|
|
31
31
|
def self.new_from_options(url, options = {})
|
|
32
|
-
url.sub
|
|
32
|
+
url = url.sub(/\/$/, '')
|
|
33
33
|
|
|
34
34
|
branch = options["branch"] || "master"
|
|
35
35
|
|
|
@@ -91,12 +91,25 @@ module Braid
|
|
|
91
91
|
|
|
92
92
|
def fetch
|
|
93
93
|
unless type == "svn"
|
|
94
|
+
init_or_fetch_local_cache
|
|
94
95
|
git.fetch(remote)
|
|
95
96
|
else
|
|
96
97
|
git_svn.fetch(remote)
|
|
97
98
|
end
|
|
98
99
|
end
|
|
99
100
|
|
|
101
|
+
def cached_url
|
|
102
|
+
if Braid::USE_LOCAL_CACHE
|
|
103
|
+
File.join(Braid::LOCAL_CACHE_DIR, url.gsub(/[\/:@]/, "_"))
|
|
104
|
+
else
|
|
105
|
+
url
|
|
106
|
+
end
|
|
107
|
+
end
|
|
108
|
+
|
|
109
|
+
def init_or_fetch_local_cache
|
|
110
|
+
git_cache.init_or_fetch(url, cached_url)
|
|
111
|
+
end
|
|
112
|
+
|
|
100
113
|
private
|
|
101
114
|
def method_missing(name, *args)
|
|
102
115
|
if ATTRIBUTES.find { |attribute| name.to_s =~ /^(#{attribute})(=)?$/ }
|
data/lib/braid/operations.rb
CHANGED
|
@@ -14,13 +14,14 @@ module Braid
|
|
|
14
14
|
end
|
|
15
15
|
end
|
|
16
16
|
class VersionTooLow < BraidError
|
|
17
|
-
def initialize(command, version)
|
|
17
|
+
def initialize(command, version, required)
|
|
18
18
|
@command = command
|
|
19
19
|
@version = version.to_s.split("\n").first
|
|
20
|
+
@required = required
|
|
20
21
|
end
|
|
21
22
|
|
|
22
23
|
def message
|
|
23
|
-
"#{@command} version too low: #{@version}"
|
|
24
|
+
"#{@command} version too low: #{@version}. #{@required} needed."
|
|
24
25
|
end
|
|
25
26
|
end
|
|
26
27
|
class UnknownRevision < BraidError
|
|
@@ -33,12 +34,22 @@ module Braid
|
|
|
33
34
|
"local changes are present"
|
|
34
35
|
end
|
|
35
36
|
end
|
|
37
|
+
class LocalCacheDirBroken < BraidError
|
|
38
|
+
def initialize(dir)
|
|
39
|
+
@dir = dir
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
def message
|
|
43
|
+
"Local cache '#{@dir}' needs to be recreated. Remove the directory and run the command again."
|
|
44
|
+
end
|
|
45
|
+
end
|
|
36
46
|
|
|
37
47
|
# The command proxy is meant to encapsulate commands such as git, git-svn and svn, that work with subcommands.
|
|
38
48
|
class Proxy
|
|
39
49
|
include Singleton
|
|
40
50
|
|
|
41
51
|
def self.command; name.split('::').last.downcase; end # hax!
|
|
52
|
+
def self.verbose; Braid::Operations::VERBOSE ; end
|
|
42
53
|
|
|
43
54
|
def version
|
|
44
55
|
status, out, err = exec!("#{self.class.command} --version")
|
|
@@ -68,7 +79,7 @@ module Braid
|
|
|
68
79
|
end
|
|
69
80
|
|
|
70
81
|
def require_version!(required)
|
|
71
|
-
require_version(required) || raise(VersionTooLow.new(self.class.command, version))
|
|
82
|
+
require_version(required) || raise(VersionTooLow.new(self.class.command, version, required))
|
|
72
83
|
end
|
|
73
84
|
|
|
74
85
|
private
|
|
@@ -92,6 +103,7 @@ module Braid
|
|
|
92
103
|
ENV['LANG'] = 'C'
|
|
93
104
|
|
|
94
105
|
out, err = nil
|
|
106
|
+
puts "executing cmd(#{cmd})" if Proxy.verbose
|
|
95
107
|
status = Open4.popen4(cmd) do |pid, stdin, stdout, stderr|
|
|
96
108
|
out = stdout.read
|
|
97
109
|
err = stderr.read
|
|
@@ -107,6 +119,11 @@ module Braid
|
|
|
107
119
|
raise ShellExecutionError, err unless status == 0
|
|
108
120
|
[status, out, err]
|
|
109
121
|
end
|
|
122
|
+
|
|
123
|
+
def msg(str)
|
|
124
|
+
puts str
|
|
125
|
+
end
|
|
126
|
+
|
|
110
127
|
end
|
|
111
128
|
|
|
112
129
|
class Git < Proxy
|
|
@@ -124,7 +141,7 @@ module Braid
|
|
|
124
141
|
|
|
125
142
|
def fetch(remote)
|
|
126
143
|
# open4 messes with the pipes of index-pack
|
|
127
|
-
system("git fetch -n #{remote}
|
|
144
|
+
system("git fetch -n #{remote} 2>&1 >/dev/null")
|
|
128
145
|
raise ShellExecutionError, "could not fetch" unless $? == 0
|
|
129
146
|
true
|
|
130
147
|
end
|
|
@@ -249,7 +266,7 @@ module Braid
|
|
|
249
266
|
|
|
250
267
|
def fetch(remote)
|
|
251
268
|
# open4 messes with the pipes of index-pack
|
|
252
|
-
system("git svn fetch #{remote}
|
|
269
|
+
system("git svn fetch #{remote} 2>&1 >/dev/null")
|
|
253
270
|
raise ShellExecutionError, "could not fetch" unless $? == 0
|
|
254
271
|
true
|
|
255
272
|
end
|
|
@@ -278,6 +295,27 @@ module Braid
|
|
|
278
295
|
end
|
|
279
296
|
end
|
|
280
297
|
|
|
298
|
+
class GitCache < Proxy
|
|
299
|
+
def init_or_fetch(url, dir)
|
|
300
|
+
if File.exists? dir
|
|
301
|
+
# bail if the local cache was created with --no-checkout
|
|
302
|
+
if File.exists? "#{dir}/.git"
|
|
303
|
+
raise LocalCacheDirBroken.new(dir)
|
|
304
|
+
end
|
|
305
|
+
|
|
306
|
+
msg "Updating local cache of '#{url}' into '#{dir}'."
|
|
307
|
+
FileUtils.cd(dir) do |d|
|
|
308
|
+
status, out, err = exec!("git fetch")
|
|
309
|
+
end
|
|
310
|
+
else
|
|
311
|
+
FileUtils.mkdir_p(Braid::LOCAL_CACHE_DIR)
|
|
312
|
+
|
|
313
|
+
msg "Caching '#{url}' into '#{dir}'."
|
|
314
|
+
status, out, err = exec!("git clone --mirror #{url} #{dir}")
|
|
315
|
+
end
|
|
316
|
+
end
|
|
317
|
+
end
|
|
318
|
+
|
|
281
319
|
module VersionControl
|
|
282
320
|
def git
|
|
283
321
|
Git.instance
|
|
@@ -290,6 +328,10 @@ module Braid
|
|
|
290
328
|
def svn
|
|
291
329
|
Svn.instance
|
|
292
330
|
end
|
|
331
|
+
|
|
332
|
+
def git_cache
|
|
333
|
+
GitCache.instance
|
|
334
|
+
end
|
|
293
335
|
end
|
|
294
336
|
end
|
|
295
337
|
end
|
data/lib/braid.rb
CHANGED
|
@@ -1,10 +1,12 @@
|
|
|
1
1
|
$:.unshift File.dirname(__FILE__)
|
|
2
2
|
|
|
3
3
|
module Braid
|
|
4
|
-
VERSION = "0.4.
|
|
4
|
+
VERSION = "0.4.12"
|
|
5
5
|
|
|
6
6
|
CONFIG_FILE = ".braids"
|
|
7
|
-
|
|
7
|
+
USE_LOCAL_CACHE = ENV["BRAID_USE_LOCAL_CACHE"] != "no"
|
|
8
|
+
LOCAL_CACHE_DIR = ENV["BRAID_LOCAL_CACHE_DIR"] || "#{ENV["HOME"]}/.braid/cache/"
|
|
9
|
+
REQUIRED_GIT_VERSION = "1.6"
|
|
8
10
|
|
|
9
11
|
class BraidError < StandardError
|
|
10
12
|
def message
|
|
@@ -0,0 +1,219 @@
|
|
|
1
|
+
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
|
|
2
|
+
<html xmlns="http://www.w3.org/1999/xhtml">
|
|
3
|
+
{{ '/feed/atom.xml' | assign_to: 'global_feed' }}
|
|
4
|
+
{{ '/feed/all_comments.xml' | assign_to: 'global_comments_feed' }}
|
|
5
|
+
<head>
|
|
6
|
+
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
|
|
7
|
+
<title>
|
|
8
|
+
{{ site.title }}
|
|
9
|
+
{% if site.current_section %}
|
|
10
|
+
- {{ site.current_section.name }}
|
|
11
|
+
{% endif %}
|
|
12
|
+
{% if article %}
|
|
13
|
+
- {{ article.title }}
|
|
14
|
+
{% endif %}
|
|
15
|
+
</title>
|
|
16
|
+
<link rel="alternate" type="application/atom+xml" title="{{ site.title }} feed" href="{{ global_feed }}"/>
|
|
17
|
+
<link rel="alternate" type="application/atom+xml" title="{{ site.title }} comments feed" href="{{ global_comments_feed }}"/>
|
|
18
|
+
{{ 'base' | stylesheet }}
|
|
19
|
+
{{ 'app' | javascript }}
|
|
20
|
+
<!--[if IE]>
|
|
21
|
+
{{ 'base_ie' | stylesheet }}
|
|
22
|
+
<![endif]-->
|
|
23
|
+
</head>
|
|
24
|
+
|
|
25
|
+
<body class="fixed orange">
|
|
26
|
+
<script type="text/javascript">loadPreferences()</script>
|
|
27
|
+
|
|
28
|
+
<div id="wrapper">
|
|
29
|
+
|
|
30
|
+
<div id="header" class="clearfix">
|
|
31
|
+
<div id="title" class="clearfix">
|
|
32
|
+
<h1><a href="/">{{ site.title }}</a></h1>
|
|
33
|
+
</div>
|
|
34
|
+
<h2>Sections</h2>
|
|
35
|
+
<ul id="menu">
|
|
36
|
+
{% for section in site.sections %}
|
|
37
|
+
{% if section.articles_count > 0 %}
|
|
38
|
+
{% if section.is_home %}
|
|
39
|
+
<li{% if section.current %} class="selected"{% endif %}>{{ section | link_to_section }}</li>
|
|
40
|
+
{% else %}
|
|
41
|
+
{% if section.is_paged %}
|
|
42
|
+
<li{% if section.current %} class="selected"{% endif %}>{{ section | link_to_section }}</li>
|
|
43
|
+
{% endif %}
|
|
44
|
+
{% endif %}
|
|
45
|
+
{% endif %}
|
|
46
|
+
{% endfor %}
|
|
47
|
+
</ul>
|
|
48
|
+
</div>
|
|
49
|
+
|
|
50
|
+
<div id="contentwrapper" class="clearfix">
|
|
51
|
+
|
|
52
|
+
<div id="content">
|
|
53
|
+
|
|
54
|
+
<div id="innerwrapper">
|
|
55
|
+
|
|
56
|
+
<div class="article">
|
|
57
|
+
<div class="body">
|
|
58
|
+
<h2>Skittlish Tips'n'Tricks</h2>
|
|
59
|
+
<ul>
|
|
60
|
+
<li>Change the classes for the body tag to set your default site style. also change these in the app.js file (line 66).</li>
|
|
61
|
+
<li>Remove the scripts and the #options div if you don't want the option switcher.</li>
|
|
62
|
+
<li>The top menu shows the home section and the sections that are not blogs.</li>
|
|
63
|
+
<li>Email me at <a href="mailto:evil@che.lu">evil@che.lu</a> if you have any questions.</li>
|
|
64
|
+
<li>Happy hacking!</li>
|
|
65
|
+
</ul>
|
|
66
|
+
</div>
|
|
67
|
+
</div>
|
|
68
|
+
|
|
69
|
+
{{ content_for_layout }}
|
|
70
|
+
|
|
71
|
+
</div>
|
|
72
|
+
|
|
73
|
+
</div>
|
|
74
|
+
|
|
75
|
+
<div id="sidebar">
|
|
76
|
+
|
|
77
|
+
<div class="boxy short">
|
|
78
|
+
<h3>boxy short</h3>
|
|
79
|
+
|
|
80
|
+
<p>You can have, boxes with a short, tall or no background shade, just change the class of the containing div.</p>
|
|
81
|
+
|
|
82
|
+
<p>Have boxes with smaller text with the class "minor". See the "Recent" boxy below.</p>
|
|
83
|
+
|
|
84
|
+
</div>
|
|
85
|
+
|
|
86
|
+
<div id="search" class="boxy short">
|
|
87
|
+
<h3>Search</h3>
|
|
88
|
+
<form method="get" action="/search">
|
|
89
|
+
<fieldset>
|
|
90
|
+
<input class="text" type="text" id="q" value="" name="q"/>
|
|
91
|
+
</fieldset>
|
|
92
|
+
</form>
|
|
93
|
+
</div>
|
|
94
|
+
|
|
95
|
+
<div class="boxy tall minor">
|
|
96
|
+
<h3>Recent</h3>
|
|
97
|
+
|
|
98
|
+
<dl>
|
|
99
|
+
<dt>Articles <a class="feed" href="{{ global_feed }}"><span>feed</span></a></dt>
|
|
100
|
+
<dd>
|
|
101
|
+
<ul>
|
|
102
|
+
{% for article in site.latest_articles %}
|
|
103
|
+
<li>{{ article | link_to_article }} <em>({{ article.published_at | format_date: 'stub', true }})</em></li>
|
|
104
|
+
{% endfor %}
|
|
105
|
+
</ul>
|
|
106
|
+
</dd>
|
|
107
|
+
|
|
108
|
+
<dt>Comments <a class="feed" href="{{ global_comments_feed }}"><span>feed</span></a></dt>
|
|
109
|
+
<dd>
|
|
110
|
+
<ul>
|
|
111
|
+
{% for comment in site.latest_comments %}
|
|
112
|
+
<li>{{ comment.author_link }} on <a href="{{ comment.url }}#comment-{{ comment.id }}">{{ comment.title }}</a></li>
|
|
113
|
+
{% endfor %}
|
|
114
|
+
</ul>
|
|
115
|
+
</dd>
|
|
116
|
+
</dl>
|
|
117
|
+
</div>
|
|
118
|
+
|
|
119
|
+
<div class="boxy short">
|
|
120
|
+
<h3>Archives</h3>
|
|
121
|
+
<p>This would be much nicer with jamis' month_drop thingy.</p>
|
|
122
|
+
{{ '' | section | months | assign_to: 'home_section' }}
|
|
123
|
+
<ul>
|
|
124
|
+
{% for month in home_section.months %}
|
|
125
|
+
{{ home_section | monthly_articles: month | size | assign_to: 'articles_count' }}
|
|
126
|
+
{% if articles_count > 0 %}
|
|
127
|
+
<li>{{ home_section | link_to_month: month }} ({{ articles_count }})</li>
|
|
128
|
+
{% endif %}
|
|
129
|
+
{% endfor %}
|
|
130
|
+
</ul>
|
|
131
|
+
</div>
|
|
132
|
+
|
|
133
|
+
{% if site.blog_sections.size > 1 %}
|
|
134
|
+
<div class="boxy short">
|
|
135
|
+
<h3>Categories</h3>
|
|
136
|
+
<p>Lists only blog type categories with at least one article.</p>
|
|
137
|
+
<p>This list uses an ul. You could use a dl with only dd's in it for the same effect. Wouldn't be semantic tho.</p>
|
|
138
|
+
<ul class="sections">
|
|
139
|
+
{% for section in site.blog_sections %}
|
|
140
|
+
{% if section.articles_count > 0 %}
|
|
141
|
+
{% unless section.is_home %}
|
|
142
|
+
<li>{{ section | link_to_section }} ({{ section.articles_count }})</li>
|
|
143
|
+
{% endunless %}
|
|
144
|
+
{% endif %}
|
|
145
|
+
{% endfor %}
|
|
146
|
+
</ul>
|
|
147
|
+
</div>
|
|
148
|
+
|
|
149
|
+
{% endif %}
|
|
150
|
+
{% unless site.tags == empty %}
|
|
151
|
+
<div class="boxy short">
|
|
152
|
+
<p>This would be nicer if we could get the number of articles for each tag.</p>
|
|
153
|
+
<h3>tags: </h3>
|
|
154
|
+
<ul>
|
|
155
|
+
{% for tag in site.tags %}
|
|
156
|
+
<li>{{ tag | link_to_tag }}</li>
|
|
157
|
+
{% endfor %}
|
|
158
|
+
</ul>
|
|
159
|
+
</div>
|
|
160
|
+
|
|
161
|
+
{% endunless %}
|
|
162
|
+
<div class="boxy tall">
|
|
163
|
+
<h3>boxy tall</h3>
|
|
164
|
+
<p>When using a tall box, make sure it's got plenty of content or that it's immediately followed by a short boxy. It might look a bit chopped off otherwise.</p>
|
|
165
|
+
<dl>
|
|
166
|
+
<dt>thing 1</dt>
|
|
167
|
+
<dd><a href="#">value 1</a></dd>
|
|
168
|
+
<dd><a href="#">value 2</a></dd>
|
|
169
|
+
<dd><a href="#">value 3</a></dd>
|
|
170
|
+
<dd><a href="#">value 4</a></dd>
|
|
171
|
+
<dd><a href="#">value 5</a></dd>
|
|
172
|
+
<dd><a href="#">value 6</a></dd>
|
|
173
|
+
<dd><a href="#">value 6</a></dd>
|
|
174
|
+
|
|
175
|
+
<dt>thing 1</dt>
|
|
176
|
+
<dd><a href="#">value 1</a></dd>
|
|
177
|
+
<dd><a href="#">value 2</a></dd>
|
|
178
|
+
<dd><a href="#">value 3</a></dd>
|
|
179
|
+
<dd>value 4</dd>
|
|
180
|
+
<dd>value 5</dd>
|
|
181
|
+
<dd><a href="#">value 6</a></dd>
|
|
182
|
+
<dd><a href="#">value 6</a></dd>
|
|
183
|
+
|
|
184
|
+
</dl>
|
|
185
|
+
</div>
|
|
186
|
+
|
|
187
|
+
</div>
|
|
188
|
+
|
|
189
|
+
</div>
|
|
190
|
+
|
|
191
|
+
<div id="options">
|
|
192
|
+
<h2>Options:</h2>
|
|
193
|
+
<h3>Size</h3>
|
|
194
|
+
<ul id="option_size">
|
|
195
|
+
<li id="option_size_fixed" class="fixed" ><a><span>fixed </span></a></li>
|
|
196
|
+
<li id="option_size_fluid" class="fluid" ><a><span>fluid </span></a></li>
|
|
197
|
+
</ul>
|
|
198
|
+
<h3>Colors</h3>
|
|
199
|
+
<ul id="option_color">
|
|
200
|
+
<li id="option_color_orange" class="orange"><a><span>orange</span></a></li>
|
|
201
|
+
<li id="option_color_blue" class="blue" ><a><span>blue </span></a></li>
|
|
202
|
+
<li id="option_color_green" class="green" ><a><span>green </span></a></li>
|
|
203
|
+
<li id="option_color_pink" class="pink" ><a><span>pink </span></a></li>
|
|
204
|
+
<li id="option_color_cyan" class="cyan" ><a><span>cyan </span></a></li>
|
|
205
|
+
<li id="option_color_red" class="red" ><a><span>red </span></a></li>
|
|
206
|
+
<li id="option_color_violet" class="violet"><a><span>violet</span></a></li>
|
|
207
|
+
</ul>
|
|
208
|
+
</div>
|
|
209
|
+
|
|
210
|
+
<div id="footer">
|
|
211
|
+
<p>Copyright © 2006, Your Name. Valid <a href="http://validator.w3.org/check/referer">XHTML</a> and <a href="http://jigsaw.w3.org/css-validator/check/referer">CSS</a>.</p>
|
|
212
|
+
<p>Using <a href="http://evil.che.lu/projects/skittlish">skittlish</a> on <a href="http://publishwithimpunity.com/">mephisto</a>.</p>
|
|
213
|
+
</div>
|
|
214
|
+
|
|
215
|
+
</div>
|
|
216
|
+
|
|
217
|
+
</body>
|
|
218
|
+
|
|
219
|
+
</html>
|
|
Binary file
|
|
@@ -0,0 +1,219 @@
|
|
|
1
|
+
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
|
|
2
|
+
<html xmlns="http://www.w3.org/1999/xhtml">
|
|
3
|
+
{{ '/feed/atom.xml' | assign_to: 'global_feed' }}
|
|
4
|
+
{{ '/feed/all_comments.xml' | assign_to: 'global_comments_feed' }}
|
|
5
|
+
<head>
|
|
6
|
+
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
|
|
7
|
+
<title>
|
|
8
|
+
{{ site.title }}
|
|
9
|
+
{% if site.current_section %}
|
|
10
|
+
- {{ site.current_section.name }}
|
|
11
|
+
{% endif %}
|
|
12
|
+
{% if article %}
|
|
13
|
+
- {{ article.title }}
|
|
14
|
+
{% endif %}
|
|
15
|
+
</title>
|
|
16
|
+
<link rel="alternate" type="application/atom+xml" title="{{ site.title }} feed" href="{{ global_feed }}"/>
|
|
17
|
+
<link rel="alternate" type="application/atom+xml" title="{{ site.title }} comments feed" href="{{ global_comments_feed }}"/>
|
|
18
|
+
{{ 'base' | stylesheet }}
|
|
19
|
+
{{ 'app' | javascript }}
|
|
20
|
+
<!--[if IE]>
|
|
21
|
+
{{ 'base_ie' | stylesheet }}
|
|
22
|
+
<![endif]-->
|
|
23
|
+
</head>
|
|
24
|
+
|
|
25
|
+
<body class="fixed green">
|
|
26
|
+
<script type="text/javascript">loadPreferences()</script>
|
|
27
|
+
|
|
28
|
+
<div id="wrapper">
|
|
29
|
+
|
|
30
|
+
<div id="header" class="clearfix">
|
|
31
|
+
<div id="title" class="clearfix">
|
|
32
|
+
<h1><a href="/">{{ site.title }}</a></h1>
|
|
33
|
+
</div>
|
|
34
|
+
<h2>Sections</h2>
|
|
35
|
+
<ul id="menu">
|
|
36
|
+
{% for section in site.sections %}
|
|
37
|
+
{% if section.articles_count > 0 %}
|
|
38
|
+
{% if section.is_home %}
|
|
39
|
+
<li{% if section.current %} class="selected"{% endif %}>{{ section | link_to_section }}</li>
|
|
40
|
+
{% else %}
|
|
41
|
+
{% if section.is_paged %}
|
|
42
|
+
<li{% if section.current %} class="selected"{% endif %}>{{ section | link_to_section }}</li>
|
|
43
|
+
{% endif %}
|
|
44
|
+
{% endif %}
|
|
45
|
+
{% endif %}
|
|
46
|
+
{% endfor %}
|
|
47
|
+
</ul>
|
|
48
|
+
</div>
|
|
49
|
+
|
|
50
|
+
<div id="contentwrapper" class="clearfix">
|
|
51
|
+
|
|
52
|
+
<div id="content">
|
|
53
|
+
|
|
54
|
+
<div id="innerwrapper">
|
|
55
|
+
|
|
56
|
+
<div class="article">
|
|
57
|
+
<div class="body">
|
|
58
|
+
<h2>Skittlish Tips'n'Tricks</h2>
|
|
59
|
+
<ul>
|
|
60
|
+
<li>Change the classes for the body tag to set your default site style. also change these in the app.js file (line 66).</li>
|
|
61
|
+
<li>Remove the scripts and the #options div if you don't want the option switcher.</li>
|
|
62
|
+
<li>The top menu shows the home section and the sections that are not blogs.</li>
|
|
63
|
+
<li>Email me at <a href="mailto:evil@che.lu">evil@che.lu</a> if you have any questions.</li>
|
|
64
|
+
<li>Happy hacking!</li>
|
|
65
|
+
</ul>
|
|
66
|
+
</div>
|
|
67
|
+
</div>
|
|
68
|
+
|
|
69
|
+
{{ content_for_layout }}
|
|
70
|
+
|
|
71
|
+
</div>
|
|
72
|
+
|
|
73
|
+
</div>
|
|
74
|
+
|
|
75
|
+
<div id="sidebar">
|
|
76
|
+
|
|
77
|
+
<div class="boxy short">
|
|
78
|
+
<h3>boxy short</h3>
|
|
79
|
+
|
|
80
|
+
<p>You can have, boxes with a short, tall or no background shade, just change the class of the containing div.</p>
|
|
81
|
+
|
|
82
|
+
<p>Have boxes with smaller text with the class "minor". See the "Recent" boxy below.</p>
|
|
83
|
+
|
|
84
|
+
</div>
|
|
85
|
+
|
|
86
|
+
<div id="search" class="boxy short">
|
|
87
|
+
<h3>Search</h3>
|
|
88
|
+
<form method="get" action="/search">
|
|
89
|
+
<fieldset>
|
|
90
|
+
<input class="text" type="text" id="q" value="" name="q"/>
|
|
91
|
+
</fieldset>
|
|
92
|
+
</form>
|
|
93
|
+
</div>
|
|
94
|
+
|
|
95
|
+
<div class="boxy tall minor">
|
|
96
|
+
<h3>Recent</h3>
|
|
97
|
+
|
|
98
|
+
<dl>
|
|
99
|
+
<dt>Articles <a class="feed" href="{{ global_feed }}"><span>feed</span></a></dt>
|
|
100
|
+
<dd>
|
|
101
|
+
<ul>
|
|
102
|
+
{% for article in site.latest_articles %}
|
|
103
|
+
<li>{{ article | link_to_article }} <em>({{ article.published_at | format_date: 'stub', true }})</em></li>
|
|
104
|
+
{% endfor %}
|
|
105
|
+
</ul>
|
|
106
|
+
</dd>
|
|
107
|
+
|
|
108
|
+
<dt>Comments <a class="feed" href="{{ global_comments_feed }}"><span>feed</span></a></dt>
|
|
109
|
+
<dd>
|
|
110
|
+
<ul>
|
|
111
|
+
{% for comment in site.latest_comments %}
|
|
112
|
+
<li>{{ comment.author_link }} on <a href="{{ comment.url }}#comment-{{ comment.id }}">{{ comment.title }}</a></li>
|
|
113
|
+
{% endfor %}
|
|
114
|
+
</ul>
|
|
115
|
+
</dd>
|
|
116
|
+
</dl>
|
|
117
|
+
</div>
|
|
118
|
+
|
|
119
|
+
<div class="boxy short">
|
|
120
|
+
<h3>Archives</h3>
|
|
121
|
+
<p>This would be much nicer with jamis' month_drop thingy.</p>
|
|
122
|
+
{{ '' | section | months | assign_to: 'home_section' }}
|
|
123
|
+
<ul>
|
|
124
|
+
{% for month in home_section.months %}
|
|
125
|
+
{{ home_section | monthly_articles: month | size | assign_to: 'articles_count' }}
|
|
126
|
+
{% if articles_count > 0 %}
|
|
127
|
+
<li>{{ home_section | link_to_month: month }} ({{ articles_count }})</li>
|
|
128
|
+
{% endif %}
|
|
129
|
+
{% endfor %}
|
|
130
|
+
</ul>
|
|
131
|
+
</div>
|
|
132
|
+
|
|
133
|
+
{% if site.blog_sections.size > 1 %}
|
|
134
|
+
<div class="boxy short">
|
|
135
|
+
<h3>Categories</h3>
|
|
136
|
+
<p>Lists only blog type categories with at least one article.</p>
|
|
137
|
+
<p>This list uses an ul. You could use a dl with only dd's in it for the same effect. Wouldn't be semantic tho.</p>
|
|
138
|
+
<ul class="sections">
|
|
139
|
+
{% for section in site.blog_sections %}
|
|
140
|
+
{% if section.articles_count > 0 %}
|
|
141
|
+
{% unless section.is_home %}
|
|
142
|
+
<li>{{ section | link_to_section }} ({{ section.articles_count }})</li>
|
|
143
|
+
{% endunless %}
|
|
144
|
+
{% endif %}
|
|
145
|
+
{% endfor %}
|
|
146
|
+
</ul>
|
|
147
|
+
</div>
|
|
148
|
+
|
|
149
|
+
{% endif %}
|
|
150
|
+
{% unless site.tags == empty %}
|
|
151
|
+
<div class="boxy short">
|
|
152
|
+
<p>This would be nicer if we could get the number of articles for each tag.</p>
|
|
153
|
+
<h3>tags: </h3>
|
|
154
|
+
<ul>
|
|
155
|
+
{% for tag in site.tags %}
|
|
156
|
+
<li>{{ tag | link_to_tag }}</li>
|
|
157
|
+
{% endfor %}
|
|
158
|
+
</ul>
|
|
159
|
+
</div>
|
|
160
|
+
|
|
161
|
+
{% endunless %}
|
|
162
|
+
<div class="boxy tall">
|
|
163
|
+
<h3>boxy tall</h3>
|
|
164
|
+
<p>When using a tall box, make sure it's got plenty of content or that it's immediately followed by a short boxy. It might look a bit chopped off otherwise.</p>
|
|
165
|
+
<dl>
|
|
166
|
+
<dt>thing 1</dt>
|
|
167
|
+
<dd><a href="#">value 1</a></dd>
|
|
168
|
+
<dd><a href="#">value 2</a></dd>
|
|
169
|
+
<dd><a href="#">value 3</a></dd>
|
|
170
|
+
<dd><a href="#">value 4</a></dd>
|
|
171
|
+
<dd><a href="#">value 5</a></dd>
|
|
172
|
+
<dd><a href="#">value 6</a></dd>
|
|
173
|
+
<dd><a href="#">value 6</a></dd>
|
|
174
|
+
|
|
175
|
+
<dt>thing 1</dt>
|
|
176
|
+
<dd><a href="#">value 1</a></dd>
|
|
177
|
+
<dd><a href="#">value 2</a></dd>
|
|
178
|
+
<dd><a href="#">value 3</a></dd>
|
|
179
|
+
<dd>value 4</dd>
|
|
180
|
+
<dd>value 5</dd>
|
|
181
|
+
<dd><a href="#">value 6</a></dd>
|
|
182
|
+
<dd><a href="#">value 6</a></dd>
|
|
183
|
+
|
|
184
|
+
</dl>
|
|
185
|
+
</div>
|
|
186
|
+
|
|
187
|
+
</div>
|
|
188
|
+
|
|
189
|
+
</div>
|
|
190
|
+
|
|
191
|
+
<div id="options">
|
|
192
|
+
<h2>Options:</h2>
|
|
193
|
+
<h3>Size</h3>
|
|
194
|
+
<ul id="option_size">
|
|
195
|
+
<li id="option_size_fixed" class="fixed" ><a><span>fixed </span></a></li>
|
|
196
|
+
<li id="option_size_fluid" class="fluid" ><a><span>fluid </span></a></li>
|
|
197
|
+
</ul>
|
|
198
|
+
<h3>Colors</h3>
|
|
199
|
+
<ul id="option_color">
|
|
200
|
+
<li id="option_color_orange" class="orange"><a><span>orange</span></a></li>
|
|
201
|
+
<li id="option_color_blue" class="blue" ><a><span>blue </span></a></li>
|
|
202
|
+
<li id="option_color_green" class="green" ><a><span>green </span></a></li>
|
|
203
|
+
<li id="option_color_pink" class="pink" ><a><span>pink </span></a></li>
|
|
204
|
+
<li id="option_color_cyan" class="cyan" ><a><span>cyan </span></a></li>
|
|
205
|
+
<li id="option_color_red" class="red" ><a><span>red </span></a></li>
|
|
206
|
+
<li id="option_color_violet" class="violet"><a><span>violet</span></a></li>
|
|
207
|
+
</ul>
|
|
208
|
+
</div>
|
|
209
|
+
|
|
210
|
+
<div id="footer">
|
|
211
|
+
<p>Copyright © 2006, Your Name. Valid <a href="http://validator.w3.org/check/referer">XHTML</a> and <a href="http://jigsaw.w3.org/css-validator/check/referer">CSS</a>.</p>
|
|
212
|
+
<p>Using <a href="http://evil.che.lu/projects/skittlish">skittlish</a> on <a href="http://publishwithimpunity.com/">mephisto</a>.</p>
|
|
213
|
+
</div>
|
|
214
|
+
|
|
215
|
+
</div>
|
|
216
|
+
|
|
217
|
+
</body>
|
|
218
|
+
|
|
219
|
+
</html>
|
|
@@ -0,0 +1,221 @@
|
|
|
1
|
+
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
|
|
2
|
+
<html xmlns="http://www.w3.org/1999/xhtml">
|
|
3
|
+
{{ '/feed/atom.xml' | assign_to: 'global_feed' }}
|
|
4
|
+
{{ '/feed/all_comments.xml' | assign_to: 'global_comments_feed' }}
|
|
5
|
+
<head>
|
|
6
|
+
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
|
|
7
|
+
<title>
|
|
8
|
+
{{ site.title }}
|
|
9
|
+
{% if site.current_section %}
|
|
10
|
+
- {{ site.current_section.name }}
|
|
11
|
+
{% endif %}
|
|
12
|
+
{% if article %}
|
|
13
|
+
- {{ article.title }}
|
|
14
|
+
{% endif %}
|
|
15
|
+
</title>
|
|
16
|
+
<link rel="alternate" type="application/atom+xml" title="{{ site.title }} feed" href="{{ global_feed }}"/>
|
|
17
|
+
<link rel="alternate" type="application/atom+xml" title="{{ site.title }} comments feed" href="{{ global_comments_feed }}"/>
|
|
18
|
+
{{ 'base' | stylesheet }}
|
|
19
|
+
{{ 'app' | javascript }}
|
|
20
|
+
<!--[if IE]>
|
|
21
|
+
{{ 'base_ie' | stylesheet }}
|
|
22
|
+
<![endif]-->
|
|
23
|
+
</head>
|
|
24
|
+
|
|
25
|
+
<body class="fixed green">
|
|
26
|
+
<script type="text/javascript">loadPreferences()</script>
|
|
27
|
+
|
|
28
|
+
<div id="wrapper">
|
|
29
|
+
|
|
30
|
+
<div id="header" class="clearfix">
|
|
31
|
+
<div id="title" class="clearfix">
|
|
32
|
+
<h1><a href="/">{{ site.title }}</a></h1>
|
|
33
|
+
</div>
|
|
34
|
+
<h2>Sections</h2>
|
|
35
|
+
<ul id="menu">
|
|
36
|
+
{% for section in site.sections %}
|
|
37
|
+
{% if section.articles_count > 0 %}
|
|
38
|
+
{% if section.is_home %}
|
|
39
|
+
<li{% if section.current %} class="selected"{% endif %}>{{ section | link_to_section }}</li>
|
|
40
|
+
{% else %}
|
|
41
|
+
{% if section.is_paged %}
|
|
42
|
+
<li{% if section.current %} class="selected"{% endif %}>{{ section | link_to_section }}</li>
|
|
43
|
+
{% endif %}
|
|
44
|
+
{% endif %}
|
|
45
|
+
{% endif %}
|
|
46
|
+
{% endfor %}
|
|
47
|
+
</ul>
|
|
48
|
+
</div>
|
|
49
|
+
|
|
50
|
+
<div id="contentwrapper" class="clearfix">
|
|
51
|
+
|
|
52
|
+
<div id="content">
|
|
53
|
+
|
|
54
|
+
<div id="innerwrapper">
|
|
55
|
+
|
|
56
|
+
<div class="article">
|
|
57
|
+
<div class="body">
|
|
58
|
+
<h2>Skittlish Tips'n'Tricks</h2>
|
|
59
|
+
<ul>
|
|
60
|
+
<li>Change the classes for the body tag to set your default site style. also change these in the app.js file (line 66).</li>
|
|
61
|
+
<li>Remove the scripts and the #options div if you don't want the option switcher.</li>
|
|
62
|
+
<li>The top menu shows the home section and the sections that are not blogs.</li>
|
|
63
|
+
<li>Email me at <a href="mailto:evil@che.lu">evil@che.lu</a> if you have any questions.</li>
|
|
64
|
+
<li>Happy hacking!</li>
|
|
65
|
+
</ul>
|
|
66
|
+
</div>
|
|
67
|
+
</div>
|
|
68
|
+
|
|
69
|
+
{{ content_for_layout }}
|
|
70
|
+
|
|
71
|
+
</div>
|
|
72
|
+
|
|
73
|
+
</div>
|
|
74
|
+
|
|
75
|
+
<div id="sidebar">
|
|
76
|
+
|
|
77
|
+
<div class="boxy short">
|
|
78
|
+
<h3>boxy short</h3>
|
|
79
|
+
|
|
80
|
+
<p>You can have, boxes with a short, tall or no background shade, just change the class of the containing div.</p>
|
|
81
|
+
|
|
82
|
+
<p>Have boxes with smaller text with the class "minor". See the "Recent" boxy below.</p>
|
|
83
|
+
|
|
84
|
+
<p>Happy boxying!</p>
|
|
85
|
+
|
|
86
|
+
</div>
|
|
87
|
+
|
|
88
|
+
<div id="search" class="boxy short">
|
|
89
|
+
<h3>Search</h3>
|
|
90
|
+
<form method="get" action="/search">
|
|
91
|
+
<fieldset>
|
|
92
|
+
<input class="text" type="text" id="q" value="" name="q"/>
|
|
93
|
+
</fieldset>
|
|
94
|
+
</form>
|
|
95
|
+
</div>
|
|
96
|
+
|
|
97
|
+
<div class="boxy tall minor">
|
|
98
|
+
<h3>Recent</h3>
|
|
99
|
+
|
|
100
|
+
<dl>
|
|
101
|
+
<dt>Articles <a class="feed" href="{{ global_feed }}"><span>feed</span></a></dt>
|
|
102
|
+
<dd>
|
|
103
|
+
<ul>
|
|
104
|
+
{% for article in site.latest_articles %}
|
|
105
|
+
<li>{{ article | link_to_article }} <em>({{ article.published_at | format_date: 'stub', true }})</em></li>
|
|
106
|
+
{% endfor %}
|
|
107
|
+
</ul>
|
|
108
|
+
</dd>
|
|
109
|
+
|
|
110
|
+
<dt>Comments <a class="feed" href="{{ global_comments_feed }}"><span>feed</span></a></dt>
|
|
111
|
+
<dd>
|
|
112
|
+
<ul>
|
|
113
|
+
{% for comment in site.latest_comments %}
|
|
114
|
+
<li>{{ comment.author_link }} on <a href="{{ comment.url }}#comment-{{ comment.id }}">{{ comment.title }}</a></li>
|
|
115
|
+
{% endfor %}
|
|
116
|
+
</ul>
|
|
117
|
+
</dd>
|
|
118
|
+
</dl>
|
|
119
|
+
</div>
|
|
120
|
+
|
|
121
|
+
<div class="boxy short">
|
|
122
|
+
<h3>Archives</h3>
|
|
123
|
+
<p>This would be much nicer with jamis' month_drop thingy.</p>
|
|
124
|
+
{{ '' | section | months | assign_to: 'home_section' }}
|
|
125
|
+
<ul>
|
|
126
|
+
{% for month in home_section.months %}
|
|
127
|
+
{{ home_section | monthly_articles: month | size | assign_to: 'articles_count' }}
|
|
128
|
+
{% if articles_count > 0 %}
|
|
129
|
+
<li>{{ home_section | link_to_month: month }} ({{ articles_count }})</li>
|
|
130
|
+
{% endif %}
|
|
131
|
+
{% endfor %}
|
|
132
|
+
</ul>
|
|
133
|
+
</div>
|
|
134
|
+
|
|
135
|
+
{% if site.blog_sections.size > 1 %}
|
|
136
|
+
<div class="boxy short">
|
|
137
|
+
<h3>Categories</h3>
|
|
138
|
+
<p>Lists only blog type categories with at least one article.</p>
|
|
139
|
+
<p>This list uses an ul. You could use a dl with only dd's in it for the same effect. Wouldn't be semantic tho.</p>
|
|
140
|
+
<ul class="sections">
|
|
141
|
+
{% for section in site.blog_sections %}
|
|
142
|
+
{% if section.articles_count > 0 %}
|
|
143
|
+
{% unless section.is_home %}
|
|
144
|
+
<li>{{ section | link_to_section }} ({{ section.articles_count }})</li>
|
|
145
|
+
{% endunless %}
|
|
146
|
+
{% endif %}
|
|
147
|
+
{% endfor %}
|
|
148
|
+
</ul>
|
|
149
|
+
</div>
|
|
150
|
+
|
|
151
|
+
{% endif %}
|
|
152
|
+
{% unless site.tags == empty %}
|
|
153
|
+
<div class="boxy short">
|
|
154
|
+
<p>This would be nicer if we could get the number of articles for each tag.</p>
|
|
155
|
+
<h3>tags: </h3>
|
|
156
|
+
<ul>
|
|
157
|
+
{% for tag in site.tags %}
|
|
158
|
+
<li>{{ tag | link_to_tag }}</li>
|
|
159
|
+
{% endfor %}
|
|
160
|
+
</ul>
|
|
161
|
+
</div>
|
|
162
|
+
|
|
163
|
+
{% endunless %}
|
|
164
|
+
<div class="boxy tall">
|
|
165
|
+
<h3>boxy tall</h3>
|
|
166
|
+
<p>When using a tall box, make sure it's got plenty of content or that it's immediately followed by a short boxy. It might look a bit chopped off otherwise.</p>
|
|
167
|
+
<dl>
|
|
168
|
+
<dt>thing 1</dt>
|
|
169
|
+
<dd><a href="#">value 1</a></dd>
|
|
170
|
+
<dd><a href="#">value 2</a></dd>
|
|
171
|
+
<dd><a href="#">value 3</a></dd>
|
|
172
|
+
<dd><a href="#">value 4</a></dd>
|
|
173
|
+
<dd><a href="#">value 5</a></dd>
|
|
174
|
+
<dd><a href="#">value 6</a></dd>
|
|
175
|
+
<dd><a href="#">value 6</a></dd>
|
|
176
|
+
|
|
177
|
+
<dt>thing 1</dt>
|
|
178
|
+
<dd><a href="#">value 1</a></dd>
|
|
179
|
+
<dd><a href="#">value 2</a></dd>
|
|
180
|
+
<dd><a href="#">value 3</a></dd>
|
|
181
|
+
<dd>value 4</dd>
|
|
182
|
+
<dd>value 5</dd>
|
|
183
|
+
<dd><a href="#">value 6</a></dd>
|
|
184
|
+
<dd><a href="#">value 6</a></dd>
|
|
185
|
+
|
|
186
|
+
</dl>
|
|
187
|
+
</div>
|
|
188
|
+
|
|
189
|
+
</div>
|
|
190
|
+
|
|
191
|
+
</div>
|
|
192
|
+
|
|
193
|
+
<div id="options">
|
|
194
|
+
<h2>Options:</h2>
|
|
195
|
+
<h3>Size</h3>
|
|
196
|
+
<ul id="option_size">
|
|
197
|
+
<li id="option_size_fixed" class="fixed" ><a><span>fixed </span></a></li>
|
|
198
|
+
<li id="option_size_fluid" class="fluid" ><a><span>fluid </span></a></li>
|
|
199
|
+
</ul>
|
|
200
|
+
<h3>Colors</h3>
|
|
201
|
+
<ul id="option_color">
|
|
202
|
+
<li id="option_color_orange" class="orange"><a><span>orange</span></a></li>
|
|
203
|
+
<li id="option_color_blue" class="blue" ><a><span>blue </span></a></li>
|
|
204
|
+
<li id="option_color_green" class="green" ><a><span>green </span></a></li>
|
|
205
|
+
<li id="option_color_pink" class="pink" ><a><span>pink </span></a></li>
|
|
206
|
+
<li id="option_color_cyan" class="cyan" ><a><span>cyan </span></a></li>
|
|
207
|
+
<li id="option_color_red" class="red" ><a><span>red </span></a></li>
|
|
208
|
+
<li id="option_color_violet" class="violet"><a><span>violet</span></a></li>
|
|
209
|
+
</ul>
|
|
210
|
+
</div>
|
|
211
|
+
|
|
212
|
+
<div id="footer">
|
|
213
|
+
<p>Copyright © 2006, Your Name. Valid <a href="http://validator.w3.org/check/referer">XHTML</a> and <a href="http://jigsaw.w3.org/css-validator/check/referer">CSS</a>.</p>
|
|
214
|
+
<p>Using <a href="http://evil.che.lu/projects/skittlish">skittlish</a> on <a href="http://publishwithimpunity.com/">mephisto</a>.</p>
|
|
215
|
+
</div>
|
|
216
|
+
|
|
217
|
+
</div>
|
|
218
|
+
|
|
219
|
+
</body>
|
|
220
|
+
|
|
221
|
+
</html>
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
require File.dirname(__FILE__) + '/../integration_helper'
|
|
2
|
+
|
|
3
|
+
describe "Adding a mirror in a clean repository" do
|
|
4
|
+
|
|
5
|
+
before do
|
|
6
|
+
FileUtils.rm_rf(TMP_PATH)
|
|
7
|
+
FileUtils.mkdir_p(TMP_PATH)
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
describe "from a git repository" do
|
|
11
|
+
before do
|
|
12
|
+
@shiny = create_git_repo_from_fixture("shiny")
|
|
13
|
+
@skit1 = create_git_repo_from_fixture("skit1")
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
it "should add the files and commit" do
|
|
17
|
+
in_dir(@shiny) do
|
|
18
|
+
`#{BRAID_BIN} add --type git #{@skit1}`
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
file_name = "skit1/layouts/layout.liquid"
|
|
22
|
+
output = `diff -U 3 #{File.join(FIXTURE_PATH, file_name)} #{File.join(TMP_PATH, "shiny", file_name)}`
|
|
23
|
+
$?.should.be.success
|
|
24
|
+
|
|
25
|
+
output = `git log --pretty=oneline`.split("\n")
|
|
26
|
+
output.length.should == 2
|
|
27
|
+
output[0].should =~ "Add mirror 'skit1/'"
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
it "should create .braids and add the mirror to it" do
|
|
31
|
+
in_dir(@shiny) do
|
|
32
|
+
`#{BRAID_BIN} add --type git #{@skit1}`
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
braids = YAML::load_file("#{@shiny}/.braids")
|
|
36
|
+
braids["skit1"]["squashed"].should == true
|
|
37
|
+
braids["skit1"]["url"].should == @skit1
|
|
38
|
+
braids["skit1"]["type"].should == "git"
|
|
39
|
+
braids["skit1"]["revision"].should.not.be nil
|
|
40
|
+
braids["skit1"]["branch"].should == "master"
|
|
41
|
+
braids["skit1"]["remote"].should == "braid/skit1"
|
|
42
|
+
end
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
describe "from an svn repository" do
|
|
46
|
+
before do
|
|
47
|
+
@shiny = create_git_repo_from_fixture("shiny")
|
|
48
|
+
@skit1 = create_svn_repo_from_fixture("skit1")
|
|
49
|
+
end
|
|
50
|
+
|
|
51
|
+
it "should add the files and commit" do
|
|
52
|
+
in_dir(@shiny) do
|
|
53
|
+
`#{BRAID_BIN} add --type svn #{@skit1}`
|
|
54
|
+
end
|
|
55
|
+
|
|
56
|
+
file_name = "skit1/layouts/layout.liquid"
|
|
57
|
+
output = `diff -U 3 #{File.join(FIXTURE_PATH, file_name)} #{File.join(TMP_PATH, "shiny", file_name)}`
|
|
58
|
+
$?.should.be.success
|
|
59
|
+
|
|
60
|
+
output = `git log --pretty=oneline`.split("\n")
|
|
61
|
+
output.length.should == 2
|
|
62
|
+
output[0].should =~ "Add mirror 'skit1/'"
|
|
63
|
+
end
|
|
64
|
+
|
|
65
|
+
it "should create .braids and add the mirror to it" do
|
|
66
|
+
in_dir(@shiny) do
|
|
67
|
+
`#{BRAID_BIN} add --type svn #{@skit1}`
|
|
68
|
+
end
|
|
69
|
+
|
|
70
|
+
braids = YAML::load_file("#{@shiny}/.braids")
|
|
71
|
+
braids["skit1"]["squashed"].should == true
|
|
72
|
+
braids["skit1"]["url"].should == @skit1
|
|
73
|
+
braids["skit1"]["type"].should == "svn"
|
|
74
|
+
braids["skit1"]["revision"].should == 1
|
|
75
|
+
braids["skit1"]["remote"].should == "braid/skit1"
|
|
76
|
+
braids["skit1"]["branch"].should.be == nil
|
|
77
|
+
end
|
|
78
|
+
end
|
|
79
|
+
|
|
80
|
+
end
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
require File.dirname(__FILE__) + '/../integration_helper'
|
|
2
|
+
|
|
3
|
+
describe "Updating a mirror without conflicts" do
|
|
4
|
+
|
|
5
|
+
before do
|
|
6
|
+
FileUtils.rm_rf(TMP_PATH)
|
|
7
|
+
FileUtils.mkdir_p(TMP_PATH)
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
describe "from a git repository" do
|
|
11
|
+
before do
|
|
12
|
+
@shiny = create_git_repo_from_fixture("shiny")
|
|
13
|
+
@skit1 = create_git_repo_from_fixture("skit1")
|
|
14
|
+
|
|
15
|
+
in_dir(@shiny) do
|
|
16
|
+
`#{BRAID_BIN} add --type git #{@skit1}`
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
update_dir_from_fixture("skit1", "skit1.1")
|
|
20
|
+
in_dir(@skit1) do
|
|
21
|
+
`git add *`
|
|
22
|
+
`git commit -m "change default color"`
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
update_dir_from_fixture("skit1", "skit1.2")
|
|
26
|
+
in_dir(@skit1) do
|
|
27
|
+
`git add *`
|
|
28
|
+
`git commit -m "add a happy note"`
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
it "should add the files and commit" do
|
|
34
|
+
in_dir(@shiny) do
|
|
35
|
+
`#{BRAID_BIN} update skit1`
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
file_name = "layouts/layout.liquid"
|
|
39
|
+
output = `diff -U 3 #{File.join(FIXTURE_PATH, "skit1.2", file_name)} #{File.join(TMP_PATH, "shiny", "skit1", file_name)}`
|
|
40
|
+
$?.should.be.success
|
|
41
|
+
|
|
42
|
+
output = `git log --pretty=oneline`.split("\n")
|
|
43
|
+
output.length.should == 3
|
|
44
|
+
output[0].should =~ "Update mirror 'skit1/' to HEAD"
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
end
|
|
48
|
+
|
|
49
|
+
describe "from a svn repository" do
|
|
50
|
+
before do
|
|
51
|
+
@shiny = create_git_repo_from_fixture("shiny")
|
|
52
|
+
@skit1 = create_svn_repo_from_fixture("skit1")
|
|
53
|
+
@skit1_wc = File.join(TMP_PATH, "skit1_wc")
|
|
54
|
+
|
|
55
|
+
in_dir(@shiny) do
|
|
56
|
+
`#{BRAID_BIN} add --type svn #{@skit1}`
|
|
57
|
+
end
|
|
58
|
+
|
|
59
|
+
update_dir_from_fixture("skit1_wc", "skit1.1")
|
|
60
|
+
in_dir(@skit1_wc) do
|
|
61
|
+
`svn commit -m "change default color"`
|
|
62
|
+
end
|
|
63
|
+
|
|
64
|
+
update_dir_from_fixture("skit1_wc", "skit1.2")
|
|
65
|
+
in_dir(@skit1_wc) do
|
|
66
|
+
`svn commit -m "add a happy note"`
|
|
67
|
+
end
|
|
68
|
+
|
|
69
|
+
end
|
|
70
|
+
|
|
71
|
+
it "should add the files and commit" do
|
|
72
|
+
in_dir(@shiny) do
|
|
73
|
+
`#{BRAID_BIN} update skit1`
|
|
74
|
+
end
|
|
75
|
+
|
|
76
|
+
file_name = "layouts/layout.liquid"
|
|
77
|
+
output = `diff -U 3 #{File.join(FIXTURE_PATH, "skit1.2", file_name)} #{File.join(TMP_PATH, "shiny", "skit1", file_name)}`
|
|
78
|
+
$?.should.be.success
|
|
79
|
+
|
|
80
|
+
output = `git log --pretty=oneline`.split("\n")
|
|
81
|
+
output.length.should == 3
|
|
82
|
+
output[0].should =~ "Update mirror 'skit1/' to HEAD"
|
|
83
|
+
end
|
|
84
|
+
|
|
85
|
+
end
|
|
86
|
+
|
|
87
|
+
end
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
require 'rubygems'
|
|
2
|
+
require 'test/spec'
|
|
3
|
+
require 'mocha'
|
|
4
|
+
|
|
5
|
+
require 'tempfile'
|
|
6
|
+
require 'fileutils'
|
|
7
|
+
require 'pathname'
|
|
8
|
+
|
|
9
|
+
TMP_PATH = File.join(Dir.tmpdir, "braid_integration")
|
|
10
|
+
BRAID_PATH = Pathname.new(File.dirname(__FILE__)).parent.realpath
|
|
11
|
+
FIXTURE_PATH = File.join(BRAID_PATH, "test", "fixtures")
|
|
12
|
+
FileUtils.mkdir_p(TMP_PATH)
|
|
13
|
+
BRAID_BIN = File.join(BRAID_PATH, "bin", "braid")
|
|
14
|
+
|
|
15
|
+
#def exec(cmd)
|
|
16
|
+
# `cd #{TMP} && #{cmd}`
|
|
17
|
+
#end
|
|
18
|
+
|
|
19
|
+
def in_dir(dir = TMP_PATH)
|
|
20
|
+
Dir.chdir(dir)
|
|
21
|
+
yield
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
def run_cmds(ary)
|
|
25
|
+
ary.each do |cmd|
|
|
26
|
+
cmd = cmd.strip!
|
|
27
|
+
out = `#{cmd}`
|
|
28
|
+
end
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
def update_dir_from_fixture(dir, fixture = dir)
|
|
32
|
+
to_dir = File.join(TMP_PATH, dir)
|
|
33
|
+
FileUtils.mkdir_p(to_dir)
|
|
34
|
+
FileUtils.cp_r(File.join(FIXTURE_PATH, fixture) + "/.", to_dir)
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
def create_git_repo_from_fixture(fixture_name)
|
|
38
|
+
git_repo = File.join(TMP_PATH, fixture_name)
|
|
39
|
+
update_dir_from_fixture(fixture_name)
|
|
40
|
+
|
|
41
|
+
in_dir(git_repo) do
|
|
42
|
+
run_cmds(<<-EOD)
|
|
43
|
+
git init
|
|
44
|
+
git add *
|
|
45
|
+
git commit -m "initial commit of #{fixture_name}"
|
|
46
|
+
EOD
|
|
47
|
+
end
|
|
48
|
+
|
|
49
|
+
git_repo
|
|
50
|
+
end
|
|
51
|
+
|
|
52
|
+
def create_svn_repo_from_fixture(fixture_name)
|
|
53
|
+
svn_wc = File.join(TMP_PATH, fixture_name + "_wc")
|
|
54
|
+
svn_repo = File.join(TMP_PATH, fixture_name)
|
|
55
|
+
run_cmds(<<-EOD)
|
|
56
|
+
svnadmin create #{svn_repo}
|
|
57
|
+
svn co file://#{svn_repo} #{svn_wc}
|
|
58
|
+
EOD
|
|
59
|
+
update_dir_from_fixture(fixture_name + "_wc", fixture_name)
|
|
60
|
+
in_dir(svn_wc) do
|
|
61
|
+
run_cmds(<<-EOD)
|
|
62
|
+
svn add *
|
|
63
|
+
svn commit -m "initial commit of #{fixture_name}"
|
|
64
|
+
EOD
|
|
65
|
+
end
|
|
66
|
+
"file://#{svn_repo}"
|
|
67
|
+
end
|
|
68
|
+
|
|
69
|
+
|
data/test/mirror_test.rb
CHANGED
|
@@ -92,3 +92,27 @@ describe "Braid::Mirror#inferred_revision" do
|
|
|
92
92
|
@mirror.send(:inferred_revision).should == 'b' * 40
|
|
93
93
|
end
|
|
94
94
|
end
|
|
95
|
+
|
|
96
|
+
describe "Braid::Mirror#cached_url" do
|
|
97
|
+
it "should return a valid local cache name" do
|
|
98
|
+
@mirror = new_from_options("git://remoteurl/path/to/repo.git")
|
|
99
|
+
@mirror.cached_url.should == "#{ENV["HOME"]}/.braid/cache/git___remoteurl_path_to_repo.git"
|
|
100
|
+
|
|
101
|
+
@mirror = new_from_options("git@remoteurl/path/to/repo.git")
|
|
102
|
+
@mirror.cached_url.should == "#{ENV["HOME"]}/.braid/cache/git_remoteurl_path_to_repo.git"
|
|
103
|
+
|
|
104
|
+
@mirror = new_from_options("remoteurl/path/to/repo/", "type" => "git")
|
|
105
|
+
@mirror.cached_url.should == "#{ENV["HOME"]}/.braid/cache/remoteurl_path_to_repo"
|
|
106
|
+
end
|
|
107
|
+
end
|
|
108
|
+
|
|
109
|
+
describe "Braid::Mirror#init_or_fetch_local_cache" do
|
|
110
|
+
it "should " do
|
|
111
|
+
@mirror = new_from_options("git@remoteurl/path/to/repo.git")
|
|
112
|
+
git_cache.expects(:init_or_fetch).with("git@remoteurl/path/to/repo.git", "#{ENV["HOME"]}/.braid/cache/git_remoteurl_path_to_repo.git")
|
|
113
|
+
@mirror.init_or_fetch_local_cache
|
|
114
|
+
end
|
|
115
|
+
|
|
116
|
+
end
|
|
117
|
+
|
|
118
|
+
|
data/test/operations_test.rb
CHANGED
metadata
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: norbert-braid
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.4.
|
|
4
|
+
version: 0.4.12
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Cristi Balan
|
|
@@ -10,7 +10,7 @@ autorequire:
|
|
|
10
10
|
bindir: bin
|
|
11
11
|
cert_chain: []
|
|
12
12
|
|
|
13
|
-
date: 2008-
|
|
13
|
+
date: 2008-10-04 00:00:00 -07:00
|
|
14
14
|
default_executable: braid
|
|
15
15
|
dependencies:
|
|
16
16
|
- !ruby/object:Gem::Dependency
|
|
@@ -40,11 +40,8 @@ extensions: []
|
|
|
40
40
|
extra_rdoc_files:
|
|
41
41
|
- README.rdoc
|
|
42
42
|
files:
|
|
43
|
-
- LICENSE
|
|
44
|
-
- README.rdoc
|
|
45
|
-
- Rakefile
|
|
46
|
-
- braid.gemspec
|
|
47
43
|
- bin/braid
|
|
44
|
+
- braid.gemspec
|
|
48
45
|
- lib/braid/command.rb
|
|
49
46
|
- lib/braid/commands/add.rb
|
|
50
47
|
- lib/braid/commands/diff.rb
|
|
@@ -55,8 +52,19 @@ files:
|
|
|
55
52
|
- lib/braid/mirror.rb
|
|
56
53
|
- lib/braid/operations.rb
|
|
57
54
|
- lib/braid.rb
|
|
55
|
+
- LICENSE
|
|
56
|
+
- Rakefile
|
|
57
|
+
- README.rdoc
|
|
58
58
|
- test/braid_test.rb
|
|
59
59
|
- test/config_test.rb
|
|
60
|
+
- test/fixtures/shiny/README
|
|
61
|
+
- test/fixtures/skit1/layouts/layout.liquid
|
|
62
|
+
- test/fixtures/skit1/preview.png
|
|
63
|
+
- test/fixtures/skit1.1/layouts/layout.liquid
|
|
64
|
+
- test/fixtures/skit1.2/layouts/layout.liquid
|
|
65
|
+
- test/integration/adding_test.rb
|
|
66
|
+
- test/integration/updating_test.rb
|
|
67
|
+
- test/integration_helper.rb
|
|
60
68
|
- test/mirror_test.rb
|
|
61
69
|
- test/operations_test.rb
|
|
62
70
|
- test/test_helper.rb
|