braid 1.0.20 → 1.0.21
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.
- checksums.yaml +4 -4
- data/bin/braid +32 -1
- data/lib/braid/command.rb +12 -0
- data/lib/braid/commands/diff.rb +25 -12
- data/lib/braid/commands/update.rb +2 -2
- data/lib/braid/operations.rb +48 -0
- data/lib/braid/version.rb +1 -1
- data/spec/fixtures/skit1.3/layouts/README.md +1 -0
- data/spec/fixtures/skit1.3/layouts/layout.liquid +221 -0
- data/spec/integration/diff_spec.rb +168 -12
- metadata +4 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: a27f551df379a0352a7631473cb4fd0846972c36
|
4
|
+
data.tar.gz: e06e3fda1d7876be1062b2a4a37a3455bfadeb06
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: e3b359b14dd78c3eb9c74ba40e00715f1028633b9463b734d157a2907d587c1846087924afb15dfcbb0e7bb633ebdb95a8d829ce0dd47950bf0c350944c09ec1
|
7
|
+
data.tar.gz: a6cd4f1949074ab61fee5919f80458194c22063bdbce1a307d2cc7add311a7dd1e63ba94486d2d98cb310cd49f6b1c73edc65521f7c549a51a0ce0f7eb01ecd0
|
data/bin/braid
CHANGED
@@ -20,6 +20,19 @@ Main {
|
|
20
20
|
You can then merge back or cherry-pick changes.
|
21
21
|
TXT
|
22
22
|
|
23
|
+
# Duplicated from Braid::Command.run. :(
|
24
|
+
def die(msg)
|
25
|
+
puts "Braid: Error: #{msg}"
|
26
|
+
exit(1)
|
27
|
+
end
|
28
|
+
|
29
|
+
# The "main" library doesn't provide a way to do this??
|
30
|
+
def check_no_extra_args!
|
31
|
+
if @argv.length > 0
|
32
|
+
die 'Extra argument(s) passed to command.'
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
23
36
|
mode(:add) {
|
24
37
|
description <<-TXT
|
25
38
|
Add a new mirror to be tracked.
|
@@ -43,6 +56,7 @@ Main {
|
|
43
56
|
mixin :argument_url, :optional_local_path, :option_branch, :option_tag, :option_revision, :option_verbose, :option_path
|
44
57
|
|
45
58
|
run {
|
59
|
+
check_no_extra_args!
|
46
60
|
Braid.verbose = verbose
|
47
61
|
Braid::Command.run(:add, url, {'path' => local_path, 'branch' => branch, 'tag' => tag, 'revision' => revision, 'remote_path' => path})
|
48
62
|
}
|
@@ -68,6 +82,7 @@ Main {
|
|
68
82
|
mixin :optional_local_path, :option_head, :option_revision, :option_tag, :option_branch, :option_verbose, :option_keep_remote
|
69
83
|
|
70
84
|
run {
|
85
|
+
check_no_extra_args!
|
71
86
|
options = {
|
72
87
|
'branch' => branch,
|
73
88
|
'tag' => tag,
|
@@ -96,6 +111,7 @@ Main {
|
|
96
111
|
mixin :argument_local_path, :option_verbose, :option_keep_remote
|
97
112
|
|
98
113
|
run {
|
114
|
+
check_no_extra_args!
|
99
115
|
options = {
|
100
116
|
:keep => keep
|
101
117
|
}
|
@@ -107,13 +123,24 @@ Main {
|
|
107
123
|
mode(:diff) {
|
108
124
|
description <<-TXT
|
109
125
|
Show diff of local changes to mirror.
|
126
|
+
|
127
|
+
Additional arguments for "git diff" may be passed. "--" should be used to
|
128
|
+
ensure they are not parsed as Braid options. File paths to limit the diff are
|
129
|
+
relative to the downstream repository (for more convenient completion), even
|
130
|
+
though file paths in the diff are relative to the mirror.
|
110
131
|
TXT
|
111
132
|
|
112
133
|
mixin :optional_local_path, :option_verbose, :option_keep_remote
|
113
134
|
|
135
|
+
synopsis (Main::Usage.default_synopsis(self) + ' [-- git_diff_arg*]')
|
136
|
+
|
114
137
|
run {
|
138
|
+
if @argv.length > 0 && @argv[0] == '--'
|
139
|
+
@argv.shift
|
140
|
+
end
|
115
141
|
options = {
|
116
|
-
'keep' => keep
|
142
|
+
'keep' => keep,
|
143
|
+
'git_diff_args' => @argv
|
117
144
|
}
|
118
145
|
Braid.verbose = verbose
|
119
146
|
Braid::Command.run(:diff, local_path, options)
|
@@ -128,6 +155,7 @@ Main {
|
|
128
155
|
mixin :argument_local_path, :option_branch, :option_verbose, :option_keep_remote
|
129
156
|
|
130
157
|
run {
|
158
|
+
check_no_extra_args!
|
131
159
|
options = {
|
132
160
|
'keep' => keep,
|
133
161
|
'branch' => branch
|
@@ -145,6 +173,7 @@ Main {
|
|
145
173
|
mixin :optional_local_path, :option_verbose, :option_force
|
146
174
|
|
147
175
|
run {
|
176
|
+
check_no_extra_args!
|
148
177
|
Braid.verbose = verbose
|
149
178
|
Braid.force = force
|
150
179
|
Braid::Command.run(:setup, local_path)
|
@@ -155,6 +184,7 @@ Main {
|
|
155
184
|
description 'Show braid version.'
|
156
185
|
|
157
186
|
run {
|
187
|
+
check_no_extra_args!
|
158
188
|
puts "braid #{Braid::VERSION}"
|
159
189
|
}
|
160
190
|
}
|
@@ -165,6 +195,7 @@ Main {
|
|
165
195
|
mixin :optional_local_path, :option_verbose
|
166
196
|
|
167
197
|
run {
|
198
|
+
check_no_extra_args!
|
168
199
|
Braid.verbose = verbose
|
169
200
|
Braid::Command.run(:status, local_path)
|
170
201
|
}
|
data/lib/braid/command.rb
CHANGED
@@ -8,6 +8,7 @@ module Braid
|
|
8
8
|
|
9
9
|
def self.run(command, *args)
|
10
10
|
verify_git_version!
|
11
|
+
check_working_dir!
|
11
12
|
|
12
13
|
klass = Commands.const_get(command.to_s.capitalize)
|
13
14
|
klass.new.run(*args)
|
@@ -66,6 +67,17 @@ module Braid
|
|
66
67
|
git.require_version!(REQUIRED_GIT_VERSION)
|
67
68
|
end
|
68
69
|
|
70
|
+
def self.check_working_dir!
|
71
|
+
# If we aren't in a git repository at all, git.is_inside_worktree will
|
72
|
+
# propagate a "fatal: Not a git repository" ShellException.
|
73
|
+
unless git.is_inside_worktree
|
74
|
+
raise BraidError, 'Braid must run inside a git working tree.'
|
75
|
+
end
|
76
|
+
if git.relative_working_dir != ''
|
77
|
+
raise BraidError, 'Braid does not yet support running in a subdirectory of the working tree.'
|
78
|
+
end
|
79
|
+
end
|
80
|
+
|
69
81
|
def bail_on_local_changes!
|
70
82
|
git.ensure_clean!
|
71
83
|
end
|
data/lib/braid/commands/diff.rb
CHANGED
@@ -8,33 +8,46 @@ module Braid
|
|
8
8
|
protected
|
9
9
|
|
10
10
|
def diff_all(options = {})
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
11
|
+
# We don't want "git diff" to invoke the pager once for each mirror.
|
12
|
+
# TODO: Invoke the default pager once for the entire output.
|
13
|
+
Operations::with_modified_environment({"GIT_PAGER" => ''}) do
|
14
|
+
config.mirrors.each do |path|
|
15
|
+
separator
|
16
|
+
msg "Diffing #{path}\n"
|
17
|
+
separator
|
18
|
+
show_diff(path, options)
|
19
|
+
end
|
17
20
|
end
|
18
21
|
end
|
19
22
|
|
20
23
|
def diff_one(path, options = {})
|
21
|
-
|
22
|
-
puts diff unless diff.empty?
|
24
|
+
show_diff(path, options)
|
23
25
|
end
|
24
26
|
|
25
27
|
def separator
|
26
28
|
puts "=======================================================\n"
|
27
29
|
end
|
28
30
|
|
29
|
-
def
|
31
|
+
def show_diff(path, options = {})
|
30
32
|
mirror = config.get!(path)
|
31
33
|
setup_remote(mirror)
|
32
34
|
|
33
|
-
|
35
|
+
# We do not need to spend the time to copy the content outside the
|
36
|
+
# mirror from HEAD because --relative will exclude it anyway. Rename
|
37
|
+
# detection seems to apply only to the files included in the diff, so we
|
38
|
+
# shouldn't have another bug like
|
39
|
+
# https://github.com/cristibalan/braid/issues/41.
|
40
|
+
base_tree = git.make_tree_with_subtree(nil, mirror.path,
|
41
|
+
mirror.versioned_path(mirror.base_revision))
|
42
|
+
# Git 1.7.2.2 release notes mention a bug when --relative is used
|
43
|
+
# without a trailing slash, and our minimum git version is 1.6.0, so
|
44
|
+
# attempt to work around the bug here.
|
45
|
+
#
|
46
|
+
# XXX: Warn if the user specifies file paths that are outside the
|
47
|
+
# mirror? Currently, they just won't match anything.
|
48
|
+
git.diff_to_stdout("--relative=#{mirror.path}/", base_tree, options['git_diff_args'])
|
34
49
|
|
35
50
|
clear_remote(mirror, options)
|
36
|
-
|
37
|
-
diff
|
38
51
|
end
|
39
52
|
end
|
40
53
|
end
|
@@ -93,8 +93,8 @@ module Braid
|
|
93
93
|
in_error = false
|
94
94
|
begin
|
95
95
|
local_hash = git.rev_parse('HEAD')
|
96
|
-
base_hash =
|
97
|
-
remote_hash =
|
96
|
+
base_hash = git.make_tree_with_subtree('HEAD', mirror.path, mirror.versioned_path(base_revision))
|
97
|
+
remote_hash = git.make_tree_with_subtree('HEAD', mirror.path, target_revision)
|
98
98
|
Operations::with_modified_environment({
|
99
99
|
"GITHEAD_#{local_hash}" => 'HEAD',
|
100
100
|
"GITHEAD_#{remote_hash}" => target_revision
|
data/lib/braid/operations.rb
CHANGED
@@ -144,6 +144,18 @@ module Braid
|
|
144
144
|
[status, out, err]
|
145
145
|
end
|
146
146
|
|
147
|
+
def system(cmd)
|
148
|
+
cmd.strip!
|
149
|
+
|
150
|
+
# Without this, "braid diff" output came out in the wrong order on Windows.
|
151
|
+
$stdout.flush
|
152
|
+
$stderr.flush
|
153
|
+
Operations::with_modified_environment({'LANG' => 'C'}) do
|
154
|
+
Kernel.system(cmd)
|
155
|
+
return $?
|
156
|
+
end
|
157
|
+
end
|
158
|
+
|
147
159
|
def msg(str)
|
148
160
|
puts "Braid: #{str}"
|
149
161
|
end
|
@@ -170,6 +182,24 @@ module Braid
|
|
170
182
|
end
|
171
183
|
end
|
172
184
|
|
185
|
+
# If the current directory is not inside a git repository at all, this
|
186
|
+
# command will fail with "fatal: Not a git repository" and that will be
|
187
|
+
# propagated as a ShellExecutionError. is_inside_worktree can return
|
188
|
+
# false when inside a bare repository and in certain other rare cases such
|
189
|
+
# as when the GIT_WORK_TREE environment variable is set.
|
190
|
+
def is_inside_worktree
|
191
|
+
invoke(:rev_parse, '--is-inside-work-tree') == 'true'
|
192
|
+
end
|
193
|
+
|
194
|
+
# Get the prefix of the current directory relative to the worktree. Empty
|
195
|
+
# string if it's the root of the worktree, otherwise ends with a slash.
|
196
|
+
# In some cases in which the current directory is not inside a worktree at
|
197
|
+
# all, this will successfully return an empty string, so it may be
|
198
|
+
# desirable to check is_inside_worktree first.
|
199
|
+
def relative_working_dir
|
200
|
+
invoke(:rev_parse, '--show-prefix')
|
201
|
+
end
|
202
|
+
|
173
203
|
def commit(message, *args)
|
174
204
|
cmd = 'git commit --no-verify'
|
175
205
|
if message # allow nil
|
@@ -309,6 +339,18 @@ module Braid
|
|
309
339
|
end
|
310
340
|
end
|
311
341
|
|
342
|
+
def make_tree_with_subtree(main_content, subtree_path, subtree_content)
|
343
|
+
with_temporary_index do
|
344
|
+
if main_content
|
345
|
+
read_tree_im(main_content)
|
346
|
+
rm_r_cached(subtree_path)
|
347
|
+
end
|
348
|
+
# Yes, if subtree_path == '', "git read-tree --prefix=/" works. :/
|
349
|
+
read_tree_prefix_i(subtree_content, subtree_path)
|
350
|
+
write_tree
|
351
|
+
end
|
352
|
+
end
|
353
|
+
|
312
354
|
def config(args)
|
313
355
|
invoke(:config, args) rescue nil
|
314
356
|
end
|
@@ -336,6 +378,12 @@ module Braid
|
|
336
378
|
out
|
337
379
|
end
|
338
380
|
|
381
|
+
def diff_to_stdout(*args)
|
382
|
+
# For now, ignore the exit code. It can be 141 (SIGPIPE) if the user
|
383
|
+
# quits the pager before reading all the output.
|
384
|
+
system("git diff #{args.join(' ')}")
|
385
|
+
end
|
386
|
+
|
339
387
|
def status_clean?
|
340
388
|
status, out, err = exec('git status')
|
341
389
|
!out.split("\n").grep(/nothing to commit/).empty?
|
data/lib/braid/version.rb
CHANGED
@@ -0,0 +1 @@
|
|
1
|
+
I would write something here if I knew what this was...
|
@@ -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>
|
@@ -1,6 +1,6 @@
|
|
1
1
|
require File.dirname(__FILE__) + '/integration_helper'
|
2
2
|
|
3
|
-
describe 'Running braid diff
|
3
|
+
describe 'Running braid diff with a mirror' do
|
4
4
|
before do
|
5
5
|
FileUtils.rm_rf(TMP_PATH)
|
6
6
|
FileUtils.mkdir_p(TMP_PATH)
|
@@ -19,7 +19,7 @@ describe 'Running braid diff on a mirror' do
|
|
19
19
|
end
|
20
20
|
|
21
21
|
describe 'with no changes' do
|
22
|
-
it 'should emit no output
|
22
|
+
it 'with the mirror specified should emit no output' do
|
23
23
|
diff = nil
|
24
24
|
in_dir(@repository_dir) do
|
25
25
|
diff = run_command("#{BRAID_BIN} diff skit1")
|
@@ -28,7 +28,7 @@ describe 'Running braid diff on a mirror' do
|
|
28
28
|
expect(diff).to eq('')
|
29
29
|
end
|
30
30
|
|
31
|
-
it 'should emit only banners
|
31
|
+
it 'without specifying a mirror should emit only banners' do
|
32
32
|
diff = nil
|
33
33
|
in_dir(@repository_dir) do
|
34
34
|
diff = run_command("#{BRAID_BIN} diff")
|
@@ -47,7 +47,7 @@ describe 'Running braid diff on a mirror' do
|
|
47
47
|
end
|
48
48
|
end
|
49
49
|
|
50
|
-
it '
|
50
|
+
it 'with the mirror specified should emit diff' do
|
51
51
|
diff = nil
|
52
52
|
in_dir(@repository_dir) do
|
53
53
|
diff = run_command("#{BRAID_BIN} diff skit1")
|
@@ -70,7 +70,7 @@ index 9f75009..25a4b32 100644
|
|
70
70
|
PATCH
|
71
71
|
end
|
72
72
|
|
73
|
-
it '
|
73
|
+
it 'without specifying a mirror should emit diff and banners' do
|
74
74
|
diff = nil
|
75
75
|
in_dir(@repository_dir) do
|
76
76
|
diff = run_command("#{BRAID_BIN} diff")
|
@@ -93,6 +93,162 @@ index 9f75009..25a4b32 100644
|
|
93
93
|
<script type="text/javascript">loadPreferences()</script>
|
94
94
|
|
95
95
|
<div id="wrapper">
|
96
|
+
PATCH
|
97
|
+
end
|
98
|
+
end
|
99
|
+
|
100
|
+
describe 'with uncommitted changes (some staged)' do
|
101
|
+
before do
|
102
|
+
FileUtils.cp_r(File.join(FIXTURE_PATH, 'skit1.1') + '/.', "#{@repository_dir}/skit1")
|
103
|
+
in_dir(@repository_dir) do
|
104
|
+
run_command('git add *')
|
105
|
+
end
|
106
|
+
FileUtils.cp_r(File.join(FIXTURE_PATH, 'skit1.2') + '/.', "#{@repository_dir}/skit1")
|
107
|
+
# Now "orange" -> "green" is staged, "Happy boxying!" is unstaged.
|
108
|
+
end
|
109
|
+
|
110
|
+
it 'with the mirror specified should show all uncommitted changes' do
|
111
|
+
diff = nil
|
112
|
+
in_dir(@repository_dir) do
|
113
|
+
diff = run_command("#{BRAID_BIN} diff skit1")
|
114
|
+
end
|
115
|
+
|
116
|
+
expect(diff).to eq(<<PATCH)
|
117
|
+
diff --git a/layouts/layout.liquid b/layouts/layout.liquid
|
118
|
+
index 9f75009..7037e21 100644
|
119
|
+
--- a/layouts/layout.liquid
|
120
|
+
+++ b/layouts/layout.liquid
|
121
|
+
@@ -22,7 +22,7 @@
|
122
|
+
<![endif]-->
|
123
|
+
</head>
|
124
|
+
|
125
|
+
-<body class="fixed orange">
|
126
|
+
+<body class="fixed green">
|
127
|
+
<script type="text/javascript">loadPreferences()</script>
|
128
|
+
|
129
|
+
<div id="wrapper">
|
130
|
+
@@ -81,6 +81,8 @@
|
131
|
+
|
132
|
+
<p>Have boxes with smaller text with the class "minor". See the "Recent" boxy below.</p>
|
133
|
+
|
134
|
+
+<p>Happy boxying!</p>
|
135
|
+
+
|
136
|
+
</div>
|
137
|
+
|
138
|
+
<div id="search" class="boxy short">
|
139
|
+
PATCH
|
140
|
+
end
|
141
|
+
|
142
|
+
it 'without specifying a mirror should show all uncommitted changes with a banner' do
|
143
|
+
diff = nil
|
144
|
+
in_dir(@repository_dir) do
|
145
|
+
diff = run_command("#{BRAID_BIN} diff")
|
146
|
+
end
|
147
|
+
|
148
|
+
expect(diff).to eq(<<PATCH)
|
149
|
+
=======================================================
|
150
|
+
Braid: Diffing skit1
|
151
|
+
=======================================================
|
152
|
+
diff --git a/layouts/layout.liquid b/layouts/layout.liquid
|
153
|
+
index 9f75009..7037e21 100644
|
154
|
+
--- a/layouts/layout.liquid
|
155
|
+
+++ b/layouts/layout.liquid
|
156
|
+
@@ -22,7 +22,7 @@
|
157
|
+
<![endif]-->
|
158
|
+
</head>
|
159
|
+
|
160
|
+
-<body class="fixed orange">
|
161
|
+
+<body class="fixed green">
|
162
|
+
<script type="text/javascript">loadPreferences()</script>
|
163
|
+
|
164
|
+
<div id="wrapper">
|
165
|
+
@@ -81,6 +81,8 @@
|
166
|
+
|
167
|
+
<p>Have boxes with smaller text with the class "minor". See the "Recent" boxy below.</p>
|
168
|
+
|
169
|
+
+<p>Happy boxying!</p>
|
170
|
+
+
|
171
|
+
</div>
|
172
|
+
|
173
|
+
<div id="search" class="boxy short">
|
174
|
+
PATCH
|
175
|
+
end
|
176
|
+
|
177
|
+
it 'with the mirror specified and --cached should show only the staged uncommitted changes' do
|
178
|
+
diff = nil
|
179
|
+
in_dir(@repository_dir) do
|
180
|
+
diff = run_command("#{BRAID_BIN} diff skit1 -- --cached")
|
181
|
+
end
|
182
|
+
|
183
|
+
expect(diff).to eq(<<PATCH)
|
184
|
+
diff --git a/layouts/layout.liquid b/layouts/layout.liquid
|
185
|
+
index 9f75009..25a4b32 100644
|
186
|
+
--- a/layouts/layout.liquid
|
187
|
+
+++ b/layouts/layout.liquid
|
188
|
+
@@ -22,7 +22,7 @@
|
189
|
+
<![endif]-->
|
190
|
+
</head>
|
191
|
+
|
192
|
+
-<body class="fixed orange">
|
193
|
+
+<body class="fixed green">
|
194
|
+
<script type="text/javascript">loadPreferences()</script>
|
195
|
+
|
196
|
+
<div id="wrapper">
|
197
|
+
PATCH
|
198
|
+
end
|
199
|
+
|
200
|
+
it 'without specifying a mirror and with --cached should show only the staged uncommitted changes with a banner' do
|
201
|
+
diff = nil
|
202
|
+
in_dir(@repository_dir) do
|
203
|
+
diff = run_command("#{BRAID_BIN} diff -- --cached")
|
204
|
+
end
|
205
|
+
|
206
|
+
expect(diff).to eq(<<PATCH)
|
207
|
+
=======================================================
|
208
|
+
Braid: Diffing skit1
|
209
|
+
=======================================================
|
210
|
+
diff --git a/layouts/layout.liquid b/layouts/layout.liquid
|
211
|
+
index 9f75009..25a4b32 100644
|
212
|
+
--- a/layouts/layout.liquid
|
213
|
+
+++ b/layouts/layout.liquid
|
214
|
+
@@ -22,7 +22,7 @@
|
215
|
+
<![endif]-->
|
216
|
+
</head>
|
217
|
+
|
218
|
+
-<body class="fixed orange">
|
219
|
+
+<body class="fixed green">
|
220
|
+
<script type="text/javascript">loadPreferences()</script>
|
221
|
+
|
222
|
+
<div id="wrapper">
|
223
|
+
PATCH
|
224
|
+
end
|
225
|
+
end
|
226
|
+
|
227
|
+
describe 'with changes to multiple files and a file path argument' do
|
228
|
+
before do
|
229
|
+
FileUtils.cp_r(File.join(FIXTURE_PATH, 'skit1.3') + '/.', "#{@repository_dir}/skit1")
|
230
|
+
in_dir(@repository_dir) do
|
231
|
+
run_command('git add *')
|
232
|
+
run_command('git commit -m "Some local changes"')
|
233
|
+
end
|
234
|
+
end
|
235
|
+
|
236
|
+
it 'should show only the diff in the specified file' do
|
237
|
+
diff = nil
|
238
|
+
in_dir(@repository_dir) do
|
239
|
+
# Test that file paths are taken relative to the downstream repository
|
240
|
+
# root, as documented, rather than the mirror.
|
241
|
+
diff = run_command("#{BRAID_BIN} diff skit1 -- skit1/layouts/README.md")
|
242
|
+
end
|
243
|
+
|
244
|
+
expect(diff).to eq(<<PATCH)
|
245
|
+
diff --git a/layouts/README.md b/layouts/README.md
|
246
|
+
new file mode 100644
|
247
|
+
index 0000000..69dc7e6
|
248
|
+
--- /dev/null
|
249
|
+
+++ b/layouts/README.md
|
250
|
+
@@ -0,0 +1 @@
|
251
|
+
+I would write something here if I knew what this was...
|
96
252
|
PATCH
|
97
253
|
end
|
98
254
|
end
|
@@ -106,7 +262,7 @@ PATCH
|
|
106
262
|
end
|
107
263
|
|
108
264
|
describe 'with no changes' do
|
109
|
-
it 'should emit no output
|
265
|
+
it 'with the mirror specified should emit no output' do
|
110
266
|
diff = nil
|
111
267
|
in_dir(@repository_dir) do
|
112
268
|
diff = run_command("#{BRAID_BIN} diff skit1")
|
@@ -115,7 +271,7 @@ PATCH
|
|
115
271
|
expect(diff).to eq('')
|
116
272
|
end
|
117
273
|
|
118
|
-
it 'should emit only banners
|
274
|
+
it 'without specifying a mirror should emit only banners' do
|
119
275
|
diff = nil
|
120
276
|
in_dir(@repository_dir) do
|
121
277
|
diff = run_command("#{BRAID_BIN} diff")
|
@@ -135,7 +291,7 @@ PATCH
|
|
135
291
|
end
|
136
292
|
end
|
137
293
|
|
138
|
-
it '
|
294
|
+
it 'with the mirror specified should emit diff' do
|
139
295
|
diff = nil
|
140
296
|
in_dir(@repository_dir) do
|
141
297
|
diff = run_command("#{BRAID_BIN} diff skit1")
|
@@ -158,7 +314,7 @@ index 9f75009..25a4b32 100644
|
|
158
314
|
PATCH
|
159
315
|
end
|
160
316
|
|
161
|
-
it '
|
317
|
+
it 'without specifying a mirror should emit diff and banners' do
|
162
318
|
diff = nil
|
163
319
|
in_dir(@repository_dir) do
|
164
320
|
diff = run_command("#{BRAID_BIN} diff")
|
@@ -194,7 +350,7 @@ PATCH
|
|
194
350
|
end
|
195
351
|
|
196
352
|
describe 'with no changes' do
|
197
|
-
it 'should emit no output
|
353
|
+
it 'with the mirror specified should emit no output' do
|
198
354
|
diff = nil
|
199
355
|
in_dir(@repository_dir) do
|
200
356
|
diff = run_command("#{BRAID_BIN} diff skit1")
|
@@ -203,7 +359,7 @@ PATCH
|
|
203
359
|
expect(diff).to eq('')
|
204
360
|
end
|
205
361
|
|
206
|
-
it 'should emit only banners
|
362
|
+
it 'without specifying a mirror should emit only banners' do
|
207
363
|
diff = nil
|
208
364
|
in_dir(@repository_dir) do
|
209
365
|
diff = run_command("#{BRAID_BIN} diff")
|
@@ -222,7 +378,7 @@ PATCH
|
|
222
378
|
end
|
223
379
|
end
|
224
380
|
|
225
|
-
it '
|
381
|
+
it 'with the mirror specified should emit diff' do
|
226
382
|
diff = nil
|
227
383
|
in_dir(@repository_dir) do
|
228
384
|
diff = run_command("#{BRAID_BIN} diff skit1")
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: braid
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.0.
|
4
|
+
version: 1.0.21
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Cristi Balan
|
@@ -10,7 +10,7 @@ authors:
|
|
10
10
|
autorequire:
|
11
11
|
bindir: bin
|
12
12
|
cert_chain: []
|
13
|
-
date: 2017-05-
|
13
|
+
date: 2017-05-28 00:00:00.000000000 Z
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
16
|
name: main
|
@@ -110,6 +110,8 @@ files:
|
|
110
110
|
- spec/fixtures/shiny_skit1_mergeable/preview.png
|
111
111
|
- spec/fixtures/skit1.1/layouts/layout.liquid
|
112
112
|
- spec/fixtures/skit1.2/layouts/layout.liquid
|
113
|
+
- spec/fixtures/skit1.3/layouts/README.md
|
114
|
+
- spec/fixtures/skit1.3/layouts/layout.liquid
|
113
115
|
- spec/fixtures/skit1/layouts/layout.liquid
|
114
116
|
- spec/fixtures/skit1/preview.png
|
115
117
|
- spec/integration/adding_spec.rb
|