git_wit 0.0.1 → 0.0.2

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/README.md CHANGED
@@ -6,9 +6,21 @@ Dead simple Git hosting for Rails apps.
6
6
 
7
7
  ## Quickstart
8
8
 
9
- Run `rails g git_wit:install` and checkout `config/initializers/git_wit.rb`.
10
- You'll want to first change `config.repositories_path` to a folder where you'd
11
- like to store your repositories. Let's use "tmp/repositories" in our app root
9
+ Create a Rails 3.2 app if you don't already have one. Add `git_wit` to your
10
+ Gemfile:
11
+
12
+ ```ruby
13
+ # Use github for now - early development:
14
+ gem "git_wit", git: "https://github.com/xdissent/git_wit.git"
15
+
16
+ # Later it might be safe to use a rubygems release:
17
+ # gem "git_wit", "~> 0.1.0"
18
+ ```
19
+
20
+ Run `bundle install` followed by `rails g git_wit:install` and then checkout
21
+ [`config/initializers/git_wit.rb`](https://github.com/xdissent/git_wit/blob/master/lib/generators/git_wit/templates/git_wit.rb).
22
+ You'll want to first change `config.repositories_path` to a folder where you'd
23
+ like to store your repositories. Let's use "tmp/repositories" in our app root
12
24
  for fun:
13
25
 
14
26
  ```ruby
@@ -70,13 +82,138 @@ $ git push origin master
70
82
  Your server will ask you for a username and password when you push - use
71
83
  `writer` for both and it should accept your changes.
72
84
 
73
- ## SSH support
74
85
 
75
- See the dummy app in `test/dummy` for a working example of `authorized_keys`
76
- management for the `ssh_user`.
86
+ ## Advanced Usage (Devise, Cancan, etc.)
87
+
88
+ See [`test/dummy`](https://github.com/xdissent/git_wit/tree/master/test/dummy)
89
+ for an example app that integrates
90
+ [Devise](https://github.com/plataformatec/devise),
91
+ [Cancan](https://github.com/ryanb/cancan), and
92
+ [twitter-bootstrap-rails](https://github.com/seyhunak/twitter-bootstrap-rails).
93
+ Example controllers for managing repositories and public keys are included.
94
+
95
+
96
+ ## SSH support - AKA: The hard part
97
+
98
+ To enable git operations over SSH, you **must have a dedicated SSH user**. This
99
+ user will *only* be used for SSH autentication. Immediately after successfully
100
+ authenticating, the SSH user will `sudo` to the application user to continue
101
+ with the git operation. This eliminates the need for all the bat-shit crazy git
102
+ pulls/pushes and SSH wrappers and crap that are typical of gitolite/gitosis
103
+ setups. Your application user owns everything except the `authorized_keys` file
104
+ and the `ssh_user` only needs to know how to call the `gw-shell` command.
105
+
106
+ First, create a dedicated SSH user. On Mountain Lion:
107
+
108
+ ```console
109
+ $ sudo dscl . -create /Groups/gitwit
110
+ $ sudo dscl . -create /Groups/gitwit PrimaryGroupID 333
111
+ $ sudo dscl . -create /Groups/gitwit RealName "GitWit Server"
112
+ $ sudo dscl . -create /Users/gitwit UniqueID 333
113
+ $ sudo dscl . -create /Users/gitwit PrimaryGroupID 333
114
+ $ sudo dscl . -create /Users/gitwit NFSHomeDirectory /var/gitwit
115
+ $ sudo dscl . -create /Users/gitwit UserShell /bin/bash
116
+ $ sudo dscl . -create /Users/gitwit RealName "GitWit Server"
117
+ $ sudo mkdir -p ~gitwit
118
+ $ sudo chown -R gitwit:gitwit ~gitwit
119
+ ```
120
+
121
+ Enable the `ssh_user` config value in `config/initializers/git_wit.rb`:
122
+
123
+ ```ruby
124
+ config.ssh_user = "gitwit"
125
+ ```
126
+
127
+ Now your application user needs to be allowed to `sudo` as `ssh_user` and vice
128
+ versa. Edit `/etc/sudoers` using `sudo visudo` and add the following lines:
129
+
130
+ ```
131
+ rails_user ALL=(gitwit) NOPASSWD:ALL
132
+ gitwit ALL=(rails_user) NOPASSWD:ALL
133
+ ```
134
+
135
+ Replace `rails_user` with the application under which your Rails app runs, which
136
+ will be your personal username if using `rails s` or Pow.
137
+
138
+ Test your `sudo` rights and initialize the `ssh_user` environment:
139
+
140
+ ```console
141
+ $ sudo -u gitwit -i
142
+ $ mkdir .ssh
143
+ $ chmod 700 .ssh
144
+ $ touch .ssh/authorized_keys
145
+ $ chmod 600 .ssh/authorized_keys
146
+ ```
147
+
148
+ If you're using RVM or some other wacky environment manipulating tool, you're
149
+ going to want to adjust the login environment for `ssh_user` by creating a
150
+ `~ssh_user/.bashrc` file. For example, to load a specific RVM gemset:
151
+
152
+ ```bash
153
+ source "/Users/xdissent/.rvm/environments/ruby-1.9.3-p385@git_wit"
154
+ ```
155
+
156
+ You may also need to adjust the `PATH` to include the location of the `gw-shell`
157
+ executable. If you're using `bundle --binstubs` for example:
158
+
159
+ ```bash
160
+ export PATH="/path/to/app/bin:$PATH"
161
+ ```
162
+
163
+ The `gw-shell` command handles the authentication and authorization for the SSH
164
+ protocol. It is initially called by `ssh_user` upon login (git operation) and it
165
+ will attempt to `sudo` to the application user and re-run itself with the same
166
+ environment. It determines which user is the "application user" by looking at
167
+ who owns the rails app root folder. To determine where the app root is actually
168
+ located, it looks for the ENV variables `RAILS_ROOT` and `BUNDLE_GEMFILE` in
169
+ order. When in doubt, set `RAILS_ROOT` in `~ssh_user/.bashrc`:
170
+
171
+ ```bash
172
+ export RAILS_ROOT="/path/to/app"
173
+ ```
174
+
175
+ **Remember to add `export RAILS_ENV="production"` for production deployments!**
176
+
177
+ You can easily sanity check your environment using `sudo` as your app user:
178
+
179
+ ```console
180
+ $ sudo -u gitwit -i
181
+ $ source .bashrc
182
+ $ which gw-shell
183
+ /Users/xdissent/Code/git_wit/stubs/gw-shell
184
+ $ echo $RAILS_ROOT
185
+ /Users/xdissent/Code/git_wit/test/dummy
186
+ ```
187
+
188
+ Now all that's left to do is add some `authorized_keys` and you're all set.
189
+ This can be done from the rails console (`rails c`):
190
+
191
+ ```ruby
192
+ GitWit.add_authorized_key "writer", "ssh-rsa long-ass-key-string writer@example.com"
193
+ # => nil
194
+ GitWit.authorized_keys_file.keys
195
+ # => [command="gw-shell writer",no-port-forwarding,no-X11-forwarding,no-agent-forwarding,no-pty ssh-rsa long-ass-key-string writer@example.com]
196
+ ```
197
+
198
+ You may now clone/push/pull over SSH - assuming the key you installed for
199
+ `writer` is known to your ssh agent (ie `~/.ssh/id_rsa`):
200
+
201
+ ```console
202
+ $ git clone gitwit@localhost:example.git
203
+ ```
204
+
205
+ See the dummy app in
206
+ [`test/dummy`](https://github.com/xdissent/git_wit/tree/master/test/dummy) for
207
+ a more advanced example of `authorized_keys` management.
208
+
209
+
210
+ ## Git hooks and configs and umasks and everything
77
211
 
78
- **NOTE** To manage SSH keys, the `ssh_user` *must* be allowed to `sudo` as the
79
- Rails application user, **and** vice versa. More documentation is forthcoming.
212
+ Dude, your app owns the repos now. Hooks are just files again! Rediscover the
213
+ [grit](https://github.com/mojombo/grit) gem and go nuts with all kinds of fun
214
+ stuff that used to be a serious pain. Paranoid? Lock down the permissions on
215
+ your repositories folder so that only your application user can read it. The
216
+ SSH shell will still be executed as the application user so it's no sweat.
80
217
 
81
218
 
82
219
  This project rocks and uses MIT-LICENSE.
data/lib/git_wit/shell.rb CHANGED
@@ -22,8 +22,8 @@ module GitWit
22
22
  end
23
23
 
24
24
  def self.rails_root
25
- return File.expand_path(ENV["RAILS_ROOT"]) if ENV["RAILS_ROOT"].present?
26
- return File.expand_path("..", ENV["BUNDLE_GEMFILE"]) if ENV["BUNDLE_GEMFILE"].present?
25
+ return File.expand_path(ENV["RAILS_ROOT"]) if ENV["RAILS_ROOT"]
26
+ return File.expand_path("..", ENV["BUNDLE_GEMFILE"]) if ENV["BUNDLE_GEMFILE"]
27
27
  Dir.pwd
28
28
  end
29
29
 
@@ -43,7 +43,7 @@ module GitWit
43
43
 
44
44
  def self.authenticate!(username)
45
45
  user = authenticate username
46
- abort "Anonymous access denied" unless user.present?
46
+ abort "Anonymous access denied" if user.nil?
47
47
  user
48
48
  end
49
49
 
@@ -1,3 +1,3 @@
1
1
  module GitWit
2
- VERSION = "0.0.1"
2
+ VERSION = "0.0.2"
3
3
  end
@@ -0,0 +1,236 @@
1
+ Connecting to database specified by database.yml
2
+
3
+
4
+ Started GET "/" for 127.0.0.1 at 2013-02-18 02:12:23 -0600
5
+ Processing by RepositoriesController#index as HTML
6
+ Repository Load (0.2ms) SELECT "repositories".* FROM "repositories" WHERE "repositories"."public" = 't'
7
+ User Load (0.3ms) SELECT "users".* FROM "users" WHERE "users"."id" = 1 LIMIT 1
8
+ Rendered repositories/index.html.erb within layouts/application (45.8ms)
9
+ Completed 200 OK in 298ms (Views: 190.4ms | ActiveRecord: 3.7ms)
10
+
11
+
12
+ Started GET "/assets/twitter-bootstrap-static/bootstrap.css?body=1" for 127.0.0.1 at 2013-02-18 02:12:24 -0600
13
+ Served asset /twitter-bootstrap-static/bootstrap.css - 200 OK (7ms)
14
+
15
+
16
+ Started GET "/assets/twitter-bootstrap-static/fontawesome.css?body=1" for 127.0.0.1 at 2013-02-18 02:12:24 -0600
17
+ Served asset /twitter-bootstrap-static/fontawesome.css - 200 OK (4ms)
18
+
19
+
20
+ Started GET "/assets/repositories.css?body=1" for 127.0.0.1 at 2013-02-18 02:12:24 -0600
21
+ Served asset /repositories.css - 200 OK (2ms)
22
+
23
+
24
+ Started GET "/assets/scaffold.css?body=1" for 127.0.0.1 at 2013-02-18 02:12:24 -0600
25
+ Served asset /scaffold.css - 304 Not Modified (2ms)
26
+
27
+
28
+ Started GET "/assets/jquery_ujs.js?body=1" for 127.0.0.1 at 2013-02-18 02:12:24 -0600
29
+ Served asset /jquery_ujs.js - 304 Not Modified (28ms)
30
+
31
+
32
+ Started GET "/assets/twitter/bootstrap/bootstrap-transition.js?body=1" for 127.0.0.1 at 2013-02-18 02:12:24 -0600
33
+ Served asset /twitter/bootstrap/bootstrap-transition.js - 304 Not Modified (4ms)
34
+
35
+
36
+ Started GET "/assets/twitter/bootstrap/bootstrap-alert.js?body=1" for 127.0.0.1 at 2013-02-18 02:12:24 -0600
37
+ Served asset /twitter/bootstrap/bootstrap-alert.js - 304 Not Modified (6ms)
38
+
39
+
40
+ Started GET "/assets/twitter/bootstrap/bootstrap-dropdown.js?body=1" for 127.0.0.1 at 2013-02-18 02:12:24 -0600
41
+ Served asset /twitter/bootstrap/bootstrap-dropdown.js - 304 Not Modified (4ms)
42
+
43
+
44
+ Started GET "/assets/twitter/bootstrap/bootstrap-scrollspy.js?body=1" for 127.0.0.1 at 2013-02-18 02:12:24 -0600
45
+ Served asset /twitter/bootstrap/bootstrap-scrollspy.js - 304 Not Modified (3ms)
46
+
47
+
48
+ Started GET "/assets/twitter/bootstrap/bootstrap-tab.js?body=1" for 127.0.0.1 at 2013-02-18 02:12:24 -0600
49
+ Served asset /twitter/bootstrap/bootstrap-tab.js - 304 Not Modified (52ms)
50
+
51
+
52
+ Started GET "/assets/twitter/bootstrap/bootstrap-tooltip.js?body=1" for 127.0.0.1 at 2013-02-18 02:12:24 -0600
53
+ Served asset /twitter/bootstrap/bootstrap-tooltip.js - 304 Not Modified (5ms)
54
+
55
+
56
+ Started GET "/assets/twitter/bootstrap/bootstrap-popover.js?body=1" for 127.0.0.1 at 2013-02-18 02:12:24 -0600
57
+ Served asset /twitter/bootstrap/bootstrap-popover.js - 304 Not Modified (3ms)
58
+
59
+
60
+ Started GET "/assets/twitter/bootstrap/bootstrap-button.js?body=1" for 127.0.0.1 at 2013-02-18 02:12:24 -0600
61
+ Served asset /twitter/bootstrap/bootstrap-button.js - 304 Not Modified (3ms)
62
+
63
+
64
+ Started GET "/assets/twitter/bootstrap/bootstrap-collapse.js?body=1" for 127.0.0.1 at 2013-02-18 02:12:24 -0600
65
+ Served asset /twitter/bootstrap/bootstrap-collapse.js - 304 Not Modified (3ms)
66
+
67
+
68
+ Started GET "/assets/twitter/bootstrap/bootstrap-carousel.js?body=1" for 127.0.0.1 at 2013-02-18 02:12:24 -0600
69
+ Served asset /twitter/bootstrap/bootstrap-carousel.js - 304 Not Modified (5ms)
70
+
71
+
72
+ Started GET "/assets/twitter/bootstrap/bootstrap-typeahead.js?body=1" for 127.0.0.1 at 2013-02-18 02:12:24 -0600
73
+ Served asset /twitter/bootstrap/bootstrap-typeahead.js - 304 Not Modified (3ms)
74
+
75
+
76
+ Started GET "/assets/twitter/bootstrap/bootstrap-affix.js?body=1" for 127.0.0.1 at 2013-02-18 02:12:24 -0600
77
+ Served asset /twitter/bootstrap/bootstrap-affix.js - 304 Not Modified (3ms)
78
+
79
+
80
+ Started GET "/assets/twitter/bootstrap.js?body=1" for 127.0.0.1 at 2013-02-18 02:12:24 -0600
81
+ Served asset /twitter/bootstrap.js - 304 Not Modified (17ms)
82
+
83
+
84
+ Started GET "/assets/bootstrap.js?body=1" for 127.0.0.1 at 2013-02-18 02:12:24 -0600
85
+ Served asset /bootstrap.js - 304 Not Modified (1ms)
86
+
87
+
88
+ Started GET "/assets/public_keys.js?body=1" for 127.0.0.1 at 2013-02-18 02:12:24 -0600
89
+ Served asset /public_keys.js - 304 Not Modified (1ms)
90
+
91
+
92
+ Started GET "/assets/repositories.js?body=1" for 127.0.0.1 at 2013-02-18 02:12:24 -0600
93
+ Served asset /repositories.js - 304 Not Modified (1ms)
94
+
95
+
96
+ Started GET "/assets/application.js?body=1" for 127.0.0.1 at 2013-02-18 02:12:24 -0600
97
+ Served asset /application.js - 304 Not Modified (20ms)
98
+ Connecting to database specified by database.yml
99
+
100
+
101
+ Started GET "/assets/bootstrap_and_overrides.css?body=1" for 127.0.0.1 at 2013-02-18 02:12:27 -0600
102
+ Served asset /bootstrap_and_overrides.css - 200 OK (5ms)
103
+
104
+
105
+ Started GET "/assets/public_keys.css?body=1" for 127.0.0.1 at 2013-02-18 02:12:27 -0600
106
+ Served asset /public_keys.css - 200 OK (1ms)
107
+
108
+
109
+ Started GET "/assets/application.css?body=1" for 127.0.0.1 at 2013-02-18 02:12:27 -0600
110
+ Served asset /application.css - 304 Not Modified (7ms)
111
+
112
+
113
+ Started GET "/assets/jquery.js?body=1" for 127.0.0.1 at 2013-02-18 02:12:27 -0600
114
+ Served asset /jquery.js - 304 Not Modified (3ms)
115
+
116
+
117
+ Started GET "/assets/twitter/bootstrap/bootstrap-modal.js?body=1" for 127.0.0.1 at 2013-02-18 02:12:27 -0600
118
+ Served asset /twitter/bootstrap/bootstrap-modal.js - 304 Not Modified (3ms)
119
+ Connecting to database specified by database.yml
120
+
121
+
122
+ Started GET "/" for 127.0.0.1 at 2013-02-18 03:21:24 -0600
123
+ Processing by RepositoriesController#index as HTML
124
+ Repository Load (0.7ms) SELECT "repositories".* FROM "repositories" WHERE "repositories"."public" = 't'
125
+ User Load (0.5ms) SELECT "users".* FROM "users" WHERE "users"."id" = 1 LIMIT 1
126
+ Rendered repositories/index.html.erb within layouts/application (55.8ms)
127
+ Completed 200 OK in 378ms (Views: 248.3ms | ActiveRecord: 5.2ms)
128
+
129
+
130
+ Started GET "/assets/application.css?body=1" for 127.0.0.1 at 2013-02-18 03:21:24 -0600
131
+ Served asset /application.css - 304 Not Modified (15ms)
132
+
133
+
134
+ Started GET "/assets/twitter-bootstrap-static/bootstrap.css?body=1" for 127.0.0.1 at 2013-02-18 03:21:24 -0600
135
+ Served asset /twitter-bootstrap-static/bootstrap.css - 200 OK (13ms)
136
+
137
+
138
+ Started GET "/assets/twitter-bootstrap-static/fontawesome.css?body=1" for 127.0.0.1 at 2013-02-18 03:21:24 -0600
139
+ Served asset /twitter-bootstrap-static/fontawesome.css - 200 OK (39ms)
140
+
141
+
142
+ Started GET "/assets/scaffold.css?body=1" for 127.0.0.1 at 2013-02-18 03:21:24 -0600
143
+ Served asset /scaffold.css - 304 Not Modified (2ms)
144
+
145
+
146
+ Started GET "/assets/jquery_ujs.js?body=1" for 127.0.0.1 at 2013-02-18 03:21:24 -0600
147
+ Served asset /jquery_ujs.js - 304 Not Modified (2ms)
148
+
149
+
150
+ Started GET "/assets/twitter/bootstrap/bootstrap-transition.js?body=1" for 127.0.0.1 at 2013-02-18 03:21:24 -0600
151
+ Served asset /twitter/bootstrap/bootstrap-transition.js - 304 Not Modified (4ms)
152
+
153
+
154
+ Started GET "/assets/twitter/bootstrap/bootstrap-modal.js?body=1" for 127.0.0.1 at 2013-02-18 03:21:24 -0600
155
+ Served asset /twitter/bootstrap/bootstrap-modal.js - 304 Not Modified (3ms)
156
+
157
+
158
+ Started GET "/assets/twitter/bootstrap/bootstrap-dropdown.js?body=1" for 127.0.0.1 at 2013-02-18 03:21:24 -0600
159
+ Served asset /twitter/bootstrap/bootstrap-dropdown.js - 304 Not Modified (55ms)
160
+
161
+
162
+ Started GET "/assets/twitter/bootstrap/bootstrap-scrollspy.js?body=1" for 127.0.0.1 at 2013-02-18 03:21:24 -0600
163
+ Served asset /twitter/bootstrap/bootstrap-scrollspy.js - 304 Not Modified (4ms)
164
+
165
+
166
+ Started GET "/assets/twitter/bootstrap/bootstrap-tab.js?body=1" for 127.0.0.1 at 2013-02-18 03:21:24 -0600
167
+ Served asset /twitter/bootstrap/bootstrap-tab.js - 304 Not Modified (3ms)
168
+
169
+
170
+ Started GET "/assets/twitter/bootstrap/bootstrap-tooltip.js?body=1" for 127.0.0.1 at 2013-02-18 03:21:24 -0600
171
+ Served asset /twitter/bootstrap/bootstrap-tooltip.js - 304 Not Modified (3ms)
172
+
173
+
174
+ Started GET "/assets/twitter/bootstrap/bootstrap-popover.js?body=1" for 127.0.0.1 at 2013-02-18 03:21:24 -0600
175
+ Served asset /twitter/bootstrap/bootstrap-popover.js - 304 Not Modified (3ms)
176
+
177
+
178
+ Started GET "/assets/twitter/bootstrap/bootstrap-button.js?body=1" for 127.0.0.1 at 2013-02-18 03:21:24 -0600
179
+ Served asset /twitter/bootstrap/bootstrap-button.js - 304 Not Modified (4ms)
180
+
181
+
182
+ Started GET "/assets/twitter/bootstrap/bootstrap-collapse.js?body=1" for 127.0.0.1 at 2013-02-18 03:21:25 -0600
183
+ Served asset /twitter/bootstrap/bootstrap-collapse.js - 304 Not Modified (3ms)
184
+
185
+
186
+ Started GET "/assets/twitter/bootstrap/bootstrap-carousel.js?body=1" for 127.0.0.1 at 2013-02-18 03:21:25 -0600
187
+ Served asset /twitter/bootstrap/bootstrap-carousel.js - 304 Not Modified (3ms)
188
+
189
+
190
+ Started GET "/assets/twitter/bootstrap/bootstrap-typeahead.js?body=1" for 127.0.0.1 at 2013-02-18 03:21:25 -0600
191
+ Served asset /twitter/bootstrap/bootstrap-typeahead.js - 304 Not Modified (3ms)
192
+
193
+
194
+ Started GET "/assets/twitter/bootstrap/bootstrap-affix.js?body=1" for 127.0.0.1 at 2013-02-18 03:21:25 -0600
195
+ Served asset /twitter/bootstrap/bootstrap-affix.js - 304 Not Modified (3ms)
196
+
197
+
198
+ Started GET "/assets/twitter/bootstrap.js?body=1" for 127.0.0.1 at 2013-02-18 03:21:25 -0600
199
+ Served asset /twitter/bootstrap.js - 304 Not Modified (14ms)
200
+
201
+
202
+ Started GET "/assets/bootstrap.js?body=1" for 127.0.0.1 at 2013-02-18 03:21:25 -0600
203
+ Served asset /bootstrap.js - 304 Not Modified (1ms)
204
+
205
+
206
+ Started GET "/assets/public_keys.js?body=1" for 127.0.0.1 at 2013-02-18 03:21:25 -0600
207
+ Served asset /public_keys.js - 304 Not Modified (1ms)
208
+
209
+
210
+ Started GET "/assets/repositories.js?body=1" for 127.0.0.1 at 2013-02-18 03:21:25 -0600
211
+ Served asset /repositories.js - 304 Not Modified (1ms)
212
+
213
+
214
+ Started GET "/assets/application.js?body=1" for 127.0.0.1 at 2013-02-18 03:21:25 -0600
215
+ Served asset /application.js - 304 Not Modified (20ms)
216
+ Connecting to database specified by database.yml
217
+
218
+
219
+ Started GET "/assets/public_keys.css?body=1" for 127.0.0.1 at 2013-02-18 03:21:28 -0600
220
+ Served asset /public_keys.css - 200 OK (3ms)
221
+
222
+
223
+ Started GET "/assets/bootstrap_and_overrides.css?body=1" for 127.0.0.1 at 2013-02-18 03:21:28 -0600
224
+ Served asset /bootstrap_and_overrides.css - 200 OK (7ms)
225
+
226
+
227
+ Started GET "/assets/repositories.css?body=1" for 127.0.0.1 at 2013-02-18 03:21:28 -0600
228
+ Served asset /repositories.css - 200 OK (3ms)
229
+
230
+
231
+ Started GET "/assets/jquery.js?body=1" for 127.0.0.1 at 2013-02-18 03:21:28 -0600
232
+ Served asset /jquery.js - 304 Not Modified (10ms)
233
+
234
+
235
+ Started GET "/assets/twitter/bootstrap/bootstrap-alert.js?body=1" for 127.0.0.1 at 2013-02-18 03:21:28 -0600
236
+ Served asset /twitter/bootstrap/bootstrap-alert.js - 304 Not Modified (26ms)
@@ -0,0 +1,53 @@
1
+ Connecting to database specified by database.yml
2
+  (0.6ms) begin transaction
3
+  (0.0ms) rollback transaction
4
+  (0.0ms) begin transaction
5
+  (0.0ms) rollback transaction
6
+  (0.0ms) begin transaction
7
+  (0.0ms) rollback transaction
8
+  (0.0ms) begin transaction
9
+  (0.0ms) rollback transaction
10
+  (0.0ms) begin transaction
11
+  (0.0ms) rollback transaction
12
+  (0.0ms) begin transaction
13
+  (0.0ms) rollback transaction
14
+  (0.0ms) begin transaction
15
+  (0.0ms) rollback transaction
16
+  (0.0ms) begin transaction
17
+  (0.0ms) rollback transaction
18
+  (0.0ms) begin transaction
19
+  (0.1ms) rollback transaction
20
+  (0.1ms) begin transaction
21
+  (0.1ms) rollback transaction
22
+  (0.1ms) begin transaction
23
+  (0.1ms) rollback transaction
24
+  (0.1ms) begin transaction
25
+  (0.1ms) rollback transaction
26
+  (0.1ms) begin transaction
27
+  (0.1ms) rollback transaction
28
+  (0.1ms) begin transaction
29
+  (0.0ms) rollback transaction
30
+  (0.0ms) begin transaction
31
+  (0.0ms) rollback transaction
32
+  (0.0ms) begin transaction
33
+  (0.0ms) rollback transaction
34
+  (0.0ms) begin transaction
35
+  (0.0ms) rollback transaction
36
+  (0.1ms) begin transaction
37
+  (0.0ms) rollback transaction
38
+  (0.2ms) begin transaction
39
+  (0.1ms) rollback transaction
40
+  (0.0ms) begin transaction
41
+  (0.0ms) rollback transaction
42
+  (0.0ms) begin transaction
43
+  (0.0ms) rollback transaction
44
+  (0.0ms) begin transaction
45
+  (0.0ms) rollback transaction
46
+  (0.0ms) begin transaction
47
+  (0.0ms) rollback transaction
48
+  (0.0ms) begin transaction
49
+  (0.0ms) rollback transaction
50
+  (0.0ms) begin transaction
51
+  (0.0ms) rollback transaction
52
+  (0.0ms) begin transaction
53
+  (0.0ms) rollback transaction
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: git_wit
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1
4
+ version: 0.0.2
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -139,6 +139,8 @@ files:
139
139
  - test/dummy/db/migrate/20130217221157_create_public_keys.rb
140
140
  - test/dummy/db/schema.rb
141
141
  - test/dummy/db/test.sqlite3
142
+ - test/dummy/log/development.log
143
+ - test/dummy/log/test.log
142
144
  - test/dummy/public/404.html
143
145
  - test/dummy/public/422.html
144
146
  - test/dummy/public/500.html
@@ -238,12 +240,18 @@ required_ruby_version: !ruby/object:Gem::Requirement
238
240
  - - ! '>='
239
241
  - !ruby/object:Gem::Version
240
242
  version: '0'
243
+ segments:
244
+ - 0
245
+ hash: -1704736703084215079
241
246
  required_rubygems_version: !ruby/object:Gem::Requirement
242
247
  none: false
243
248
  requirements:
244
249
  - - ! '>='
245
250
  - !ruby/object:Gem::Version
246
251
  version: '0'
252
+ segments:
253
+ - 0
254
+ hash: -1704736703084215079
247
255
  requirements: []
248
256
  rubyforge_project:
249
257
  rubygems_version: 1.8.25
@@ -321,6 +329,8 @@ test_files:
321
329
  - test/dummy/db/migrate/20130217221157_create_public_keys.rb
322
330
  - test/dummy/db/schema.rb
323
331
  - test/dummy/db/test.sqlite3
332
+ - test/dummy/log/development.log
333
+ - test/dummy/log/test.log
324
334
  - test/dummy/public/404.html
325
335
  - test/dummy/public/422.html
326
336
  - test/dummy/public/500.html