norbert-braid 0.4.13 → 0.5.1

Sign up to get free protection for your applications and to get access to all the features.
@@ -86,7 +86,7 @@ module Braid
86
86
  def diff
87
87
  remote_hash = git.rev_parse("#{base_revision}:")
88
88
  local_hash = git.tree_hash(path)
89
- remote_hash != local_hash ? git.diff_tree(remote_hash, local_hash, path) : ""
89
+ remote_hash != local_hash ? git.diff_tree(remote_hash, local_hash) : ""
90
90
  end
91
91
 
92
92
  def fetch
@@ -1,6 +1,7 @@
1
1
  require 'singleton'
2
2
  require 'rubygems'
3
3
  require 'open4'
4
+ require 'tempfile'
4
5
 
5
6
  module Braid
6
7
  module Operations
@@ -118,13 +119,13 @@ module Braid
118
119
  def sh(cmd, message = nil)
119
120
  message ||= "could not fetch" if cmd =~ /fetch/
120
121
  log(cmd)
121
- system(cmd)
122
- raise ShellExecutionError, message unless $? == 0
122
+ `#{cmd}`
123
+ raise ShellExecutionError, message unless $?.exitstatus == 0
123
124
  true
124
125
  end
125
126
 
126
127
  def msg(str)
127
- puts str
128
+ puts "Braid: #{str}"
128
129
  end
129
130
 
130
131
  def log(cmd)
@@ -138,7 +139,16 @@ module Braid
138
139
 
139
140
  class Git < Proxy
140
141
  def commit(message, *args)
141
- status, out, err = exec("git commit -m #{message.inspect} --no-verify #{args.join(' ')}")
142
+ cmd = "git commit --no-verify"
143
+ if message # allow nil
144
+ message_file = Tempfile.new("braid_commit")
145
+ message_file.print(message)
146
+ message_file.flush
147
+ cmd << " -F #{message_file.path}"
148
+ end
149
+ cmd << " #{args.join(' ')}" unless args.empty?
150
+ status, out, err = exec(cmd)
151
+ message_file.unlink if message_file
142
152
 
143
153
  if status == 0
144
154
  true
@@ -149,10 +159,10 @@ module Braid
149
159
  end
150
160
  end
151
161
 
152
- def fetch(remote = nil)
153
- args = remote && "-n #{remote}"
162
+ def fetch(remote = nil, *args)
163
+ args.unshift "-n #{remote}" if remote
154
164
  # open4 messes with the pipes of index-pack
155
- sh("git fetch #{args} 2>&1 >/dev/null")
165
+ sh("git fetch #{args.join(' ')} 2>&1 >/dev/null")
156
166
  end
157
167
 
158
168
  def checkout(treeish)
@@ -0,0 +1,13 @@
1
+ require 'yaml'
2
+
3
+ class Hash
4
+ def to_yaml(opts = {})
5
+ YAML::quick_emit(object_id, opts) do |out|
6
+ out.map(taguri, to_yaml_style) do |map|
7
+ sort.each do |k,v|
8
+ map.add(k, v)
9
+ end
10
+ end
11
+ end
12
+ end
13
+ end
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.13
4
+ version: 0.5.1
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-10-23 00:00:00 -07:00
13
+ date: 2008-10-29 00:00:00 -07:00
14
14
  default_executable: braid
15
15
  dependencies:
16
16
  - !ruby/object:Gem::Dependency
@@ -37,14 +37,18 @@ executables:
37
37
  - braid
38
38
  extensions: []
39
39
 
40
- extra_rdoc_files:
41
- - README.rdoc
40
+ extra_rdoc_files: []
41
+
42
42
  files:
43
- - bin/braid
43
+ - LICENSE
44
+ - Rakefile
45
+ - README.textile
44
46
  - braid.gemspec
47
+ - bin/braid
45
48
  - lib/braid/command.rb
46
49
  - lib/braid/commands/add.rb
47
50
  - lib/braid/commands/diff.rb
51
+ - lib/braid/commands/push.rb
48
52
  - lib/braid/commands/remove.rb
49
53
  - lib/braid/commands/setup.rb
50
54
  - lib/braid/commands/update.rb
@@ -52,23 +56,13 @@ files:
52
56
  - lib/braid/mirror.rb
53
57
  - lib/braid/operations.rb
54
58
  - lib/braid.rb
55
- - LICENSE
56
- - Rakefile
57
- - README.rdoc
59
+ - lib/core_ext.rb
58
60
  - test/braid_test.rb
59
61
  - 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
68
62
  - test/mirror_test.rb
69
63
  - test/operations_test.rb
70
64
  - test/test_helper.rb
71
- has_rdoc: true
65
+ has_rdoc: false
72
66
  homepage: http://evil.che.lu/projects/braid
73
67
  post_install_message:
74
68
  rdoc_options:
@@ -77,7 +71,6 @@ rdoc_options:
77
71
  - --title
78
72
  - braid
79
73
  - --main
80
- - README.rdoc
81
74
  require_paths:
82
75
  - lib
83
76
  required_ruby_version: !ruby/object:Gem::Requirement
@@ -1,27 +0,0 @@
1
- = braid
2
- A simple tool for tracking vendor branches in git.
3
-
4
- http://evil.che.lu/projects/braid/
5
-
6
- == Requirements
7
-
8
- You will need git 1.5.4.5 or higher to run this version.
9
-
10
- == Installation
11
-
12
- git clone git://github.com/evilchelu/braid.git
13
- cd braid
14
- gem build braid.gemspec
15
- sudo gem install braid-x.y.z.gem
16
-
17
- == Usage
18
-
19
- braid help
20
- braid help COMMANDNAME
21
-
22
- For more usage examples and documentation check the project wiki at http://github.com/evilchelu/braid/wikis.
23
- Also see the bug tracker at http://evilchelu.lighthouseapp.com/projects/10600-braid for current issues and future plans.
24
-
25
- == Contributing
26
-
27
- If you want to send a patch please fork the project on GitHub and send a pull request.
@@ -1,3 +0,0 @@
1
- shiny app
2
-
3
- it uses braid to pull in a bunch of stuff!
@@ -1,219 +0,0 @@
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 &copy; 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>
@@ -1,221 +0,0 @@
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 &copy; 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>