dolt 0.29.0 → 0.30.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (76) hide show
  1. data/dolt.gemspec +1 -1
  2. data/lib/dolt/sinatra/multi_repo_browser.rb +11 -31
  3. data/lib/dolt/sinatra/repo_browser.rb +47 -0
  4. data/lib/dolt/sinatra/single_repo_browser.rb +15 -29
  5. metadata +4 -75
  6. data/vendor/ui/.gitignore +0 -4
  7. data/vendor/ui/.gitmodules +0 -39
  8. data/vendor/ui/Makefile +0 -48
  9. data/vendor/ui/autolint.js +0 -13
  10. data/vendor/ui/buster.js +0 -31
  11. data/vendor/ui/css/gitorious.css +0 -660
  12. data/vendor/ui/css/syntax-highlight.css +0 -140
  13. data/vendor/ui/dist/gitorious3-capillary.min.js +0 -12
  14. data/vendor/ui/dist/gitorious3.min.css +0 -1
  15. data/vendor/ui/dist/gitorious3.min.js +0 -3
  16. data/vendor/ui/favicon.ico +0 -0
  17. data/vendor/ui/iconic/lock_stroke.svg +0 -17
  18. data/vendor/ui/images/f5f5f5-980x1.png +0 -0
  19. data/vendor/ui/images/gitorious.png +0 -0
  20. data/vendor/ui/images/gitorious2013.png +0 -0
  21. data/vendor/ui/images/powered-by.png +0 -0
  22. data/vendor/ui/images/white-980x1.png +0 -0
  23. data/vendor/ui/js/src/app.js +0 -20
  24. data/vendor/ui/js/src/cache.js +0 -27
  25. data/vendor/ui/js/src/capillary.js +0 -7
  26. data/vendor/ui/js/src/components/abbrev.js +0 -24
  27. data/vendor/ui/js/src/components/blob.js +0 -154
  28. data/vendor/ui/js/src/components/capillary.js +0 -51
  29. data/vendor/ui/js/src/components/clone-name-suggestion.js +0 -38
  30. data/vendor/ui/js/src/components/clone-url-selection.js +0 -35
  31. data/vendor/ui/js/src/components/collapse.js +0 -17
  32. data/vendor/ui/js/src/components/comments.js +0 -111
  33. data/vendor/ui/js/src/components/commit-linker.js +0 -26
  34. data/vendor/ui/js/src/components/dropdown.js +0 -74
  35. data/vendor/ui/js/src/components/ganalytics.js +0 -19
  36. data/vendor/ui/js/src/components/live-markdown-preview.js +0 -35
  37. data/vendor/ui/js/src/components/loading.js +0 -33
  38. data/vendor/ui/js/src/components/oid-ref-interpolator.js +0 -9
  39. data/vendor/ui/js/src/components/profile-menu.js +0 -36
  40. data/vendor/ui/js/src/components/rails-links.js +0 -24
  41. data/vendor/ui/js/src/components/ref-selector.js +0 -116
  42. data/vendor/ui/js/src/components/repository.js +0 -162
  43. data/vendor/ui/js/src/components/select-details.js +0 -20
  44. data/vendor/ui/js/src/components/slugify.js +0 -32
  45. data/vendor/ui/js/src/components/timeago.js +0 -38
  46. data/vendor/ui/js/src/components/tree-history.js +0 -140
  47. data/vendor/ui/js/src/components/url.js +0 -65
  48. data/vendor/ui/js/src/components/user-repo-view-state.js +0 -4
  49. data/vendor/ui/js/src/gitorious.js +0 -171
  50. data/vendor/ui/js/src/json-request.js +0 -6
  51. data/vendor/ui/js/src/logger.js +0 -84
  52. data/vendor/ui/js/src/spacer.js +0 -5
  53. data/vendor/ui/js/test-libs/jquery-1.9.1.min.js +0 -5
  54. data/vendor/ui/js/test/cache-test.js +0 -47
  55. data/vendor/ui/js/test/components/abbrev-test.js +0 -22
  56. data/vendor/ui/js/test/components/blob-test.js +0 -90
  57. data/vendor/ui/js/test/components/clone-name-suggestion-test.js +0 -37
  58. data/vendor/ui/js/test/components/clone-url-selection-test.js +0 -25
  59. data/vendor/ui/js/test/components/comments-test.js +0 -139
  60. data/vendor/ui/js/test/components/commit-linker-test.js +0 -46
  61. data/vendor/ui/js/test/components/live-markdown-preview-test.js +0 -37
  62. data/vendor/ui/js/test/components/profile-menu-test.js +0 -46
  63. data/vendor/ui/js/test/components/ref-selector-test.js +0 -140
  64. data/vendor/ui/js/test/components/repository-admin-test.js +0 -37
  65. data/vendor/ui/js/test/components/repository-watching-test.js +0 -74
  66. data/vendor/ui/js/test/components/timeago-test.js +0 -74
  67. data/vendor/ui/js/test/components/tree-history-test.js +0 -324
  68. data/vendor/ui/js/test/components/url-template-test.js +0 -65
  69. data/vendor/ui/js/test/test-helper.js +0 -2
  70. data/vendor/ui/lib/bootstrap/css/bootstrap-responsive.min.css +0 -9
  71. data/vendor/ui/lib/bootstrap/css/bootstrap.min.css +0 -9
  72. data/vendor/ui/lib/bootstrap/img/glyphicons-halflings-white.png +0 -0
  73. data/vendor/ui/lib/bootstrap/img/glyphicons-halflings.png +0 -0
  74. data/vendor/ui/lib/bootstrap/js/bootstrap.min.js +0 -6
  75. data/vendor/ui/package.json +0 -21
  76. data/vendor/ui/todo.org +0 -4
@@ -1,37 +0,0 @@
1
- /*global buster, assert, refute, gts*/
2
-
3
- buster.testCase("Repository admin", {
4
- setUp: function () {
5
- this.data = {
6
- editPath: "/edit",
7
- destroyPath: "/destroy",
8
- ownershipPath: "/ownership",
9
- committershipsPath: "/committerships",
10
- webHooksPath: "/webhooks"
11
- };
12
- },
13
-
14
- "includes link to admin pull-down": function () {
15
- var menu = gts.repository.admin.build(this.data);
16
-
17
- assert.className(menu, "dropdown");
18
- assert.match(menu.innerHTML, "dropdown-toggle");
19
- assert.match(menu.innerHTML, "<i class=\"icon-cog\"></i> Admin");
20
- },
21
-
22
- "includes dropdown menu": function () {
23
- var menu = gts.repository.admin.build(this.data);
24
-
25
- assert.match(menu.innerHTML, "<ul class=\"dropdown-menu");
26
- },
27
-
28
- "includes links": function () {
29
- var menu = gts.repository.admin.build(this.data);
30
-
31
- assert.match(menu.innerHTML, "/edit");
32
- assert.match(menu.innerHTML, "/destroy");
33
- assert.match(menu.innerHTML, "/ownership");
34
- assert.match(menu.innerHTML, "/committerships");
35
- assert.match(menu.innerHTML, "/webhooks");
36
- }
37
- });
@@ -1,74 +0,0 @@
1
- /*global buster, dome, gts*/
2
-
3
- buster.testCase("Repository watching", {
4
- setUp: function () {
5
- this.el = dome.el("div", dome.el("div"));
6
- },
7
-
8
- "replaces placeholder": function () {
9
- gts.repository.watching(this.el.firstChild, {
10
- watching: false,
11
- watchPath: "/watchit"
12
- });
13
-
14
- assert.equals(this.el.childNodes.length, 1);
15
- assert.match(this.el.firstChild.innerHTML, "Watch");
16
- assert.match(this.el.firstChild.href, "/watchit");
17
- },
18
-
19
- "renders unwatch link": function () {
20
- gts.repository.watching(this.el.firstChild, {
21
- watching: true,
22
- unwatchPath: "/dropit"
23
- });
24
-
25
- assert.match(this.el.firstChild.innerHTML, "Unwatch");
26
- assert.match(this.el.firstChild.href, "/dropit");
27
- },
28
-
29
- "toggleState": {
30
- setUp: function () {
31
- this.server = this.useFakeServer();
32
- this.link = this.el.firstChild;
33
- this.repository = {
34
- watching: false,
35
- watchPath: "/watchit"
36
- };
37
- gts.repository.watching(this.link, this.repository);
38
- },
39
-
40
- "displays spinner while loading": function () {
41
- gts.repository.watching.toggleState(this.link, this.repository);
42
-
43
- assert.match(this.link.innerHTML, "Loading");
44
- },
45
-
46
- "replaces spinner when server responds": function () {
47
- gts.repository.watching.toggleState(this.link, this.repository);
48
- this.server.requests[0].respond(200, { location: "/dropit" }, "");
49
-
50
- refute.match(this.link.innerHTML, "Loading");
51
- assert.match(this.link.innerHTML, "Unwatch");
52
- assert.equals(this.link.href, "/dropit");
53
- },
54
-
55
- "watches, then unwatches": function () {
56
- gts.repository.watching.toggleState(this.link, this.repository);
57
- this.server.requests[0].respond(200, { location: "/dropit" }, "");
58
-
59
- gts.repository.watching.toggleState(this.link, this.repository);
60
- this.server.requests[1].respond(200, {}, "");
61
-
62
- refute.match(this.link.innerHTML, "Loading");
63
- assert.match(this.link.innerHTML, "Watch");
64
- assert.equals(this.link.href, "/watchit");
65
- },
66
-
67
- "tells user to try again when request fails": function () {
68
- gts.repository.watching.toggleState(this.link, this.repository);
69
- this.server.requests[0].respond(500, {}, "");
70
-
71
- assert.match(this.link.innerHTML, "Failed");
72
- }
73
- }
74
- });
@@ -1,74 +0,0 @@
1
- /*global buster, assert, dome, gts*/
2
-
3
- buster.testCase("Timeago", {
4
- "converts abbr content to casual date representation": function () {
5
- var el = dome.el("abbr", { title: "2008-02-27T00:23:00Z" });
6
- gts.timeago(el);
7
- assert.match(el.innerHTML, "ago");
8
- },
9
-
10
- "uses pre-existing content as title": function () {
11
- var el = dome.el("abbr", { title: "2008-02-27T00:23:00Z" }, "Today");
12
- gts.timeago(el);
13
- assert.match(el.title, "Today");
14
- },
15
-
16
- "does not use empty content as title": function () {
17
- var el = dome.el("abbr", { title: "2008-02-27T00:23:00Z" });
18
- gts.timeago(el);
19
- assert.match(el.title, "2008-02-27T00:23:00Z");
20
- },
21
-
22
- "leaves element untouched if no title": function () {
23
- var el = dome.el("abbr", "Hmm");
24
- gts.timeago(el);
25
- assert.equals(el.title, "");
26
- assert.equals(el.innerHTML, "Hmm");
27
- },
28
-
29
- "leaves element untouched if title contains invalid date": function () {
30
- var el = dome.el("abbr", { title: "Oops" }, "Hmm");
31
- gts.timeago(el);
32
- assert.equals(el.title, "Oops");
33
- assert.equals(el.innerHTML, "Hmm");
34
- },
35
-
36
- "returns element": function () {
37
- var el = dome.el("abbr", { title: "2008-02-27T00:23:00Z" });
38
- assert.same(gts.timeago(el), el);
39
-
40
- var invalidEl = dome.el("abbr", { title: "Oops" }, "Hmm");
41
- assert.same(gts.timeago(invalidEl), invalidEl);
42
- },
43
-
44
- "periodic": {
45
- "updates representation immediately": function () {
46
- var el = dome.el("abbr", { title: "1970-01-01T00:00:00Z" });
47
- var timeago = gts.timeago.periodic(60000);
48
- timeago(el);
49
-
50
- assert.match(el.innerHTML, "ago");
51
- },
52
-
53
- "// updates representations periodically": function () {
54
- var clock = this.useFakeTimers();
55
- var now = new Date();
56
- var els = [
57
- dome.el("abbr", { title: "1970-01-01T00:00:00Z" }),
58
- dome.el("abbr", { title: "1970-01-01T00:03:00Z" })
59
- ];
60
-
61
- var timeago = gts.timeago.periodic(60000);
62
- timeago(els[0]);
63
- timeago(els[1]);
64
- var contents = [els[0].innerHTML, els[1].innerHTML];
65
- clock.tick(59999);
66
- assert.equals(els[0].innerHTML, contents[0]);
67
- assert.equals(els[1].innerHTML, contents[1]);
68
-
69
- clock.tick(1);
70
- refute.equals(els[0].innerHTML, contents[0]);
71
- refute.equals(els[1].innerHTML, contents[1]);
72
- }
73
- }
74
- });
@@ -1,324 +0,0 @@
1
- /*global buster, assert, refute, jQuery, gts*/
2
- /*jslint maxlen: 130*/
3
- buster.testCase("Tree history", {
4
- setUp: function () {
5
- /*:DOC table = <table class="table table-striped gts-tree-explorer">
6
- <thead>
7
- <tr>
8
- <th colspan="0">File</th>
9
- <th class="gts-col-changed">Changed</th>
10
- <th colspan="2" class="gts-col-commit">Last commit</th>
11
- </tr>
12
- </thead>
13
- <tbody>
14
- <tr>
15
- <td class="gts-name">
16
- <a href="/tree/master:bin"><i class="icon icon-folder-close"></i> bin</a>
17
- </td>
18
- <td></td>
19
- <td class="gts-commit-oid"></td>
20
- <td></td>
21
- </tr>
22
- <tr>
23
- <td class="gts-name">
24
- <a href="/tree/master:lib"><i class="icon icon-folder-close"></i> lib</a>
25
- </td>
26
- <td></td>
27
- <td class="gts-commit-oid"></td>
28
- <td></td>
29
- </tr>
30
- <tr>
31
- <td class="gts-name">
32
- <a href="/tree/master:test"><i class="icon icon-folder-close"></i> test</a>
33
- </td>
34
- <td></td>
35
- <td class="gts-commit-oid"></td>
36
- <td></td>
37
- </tr>
38
- <tr>
39
- <td class="gts-name">
40
- <a href="/tree/master:vendor"><i class="icon icon-folder-close"></i> vendor</a>
41
- </td>
42
- <td></td>
43
- <td class="gts-commit-oid"></td>
44
- <td></td>
45
- </tr>
46
- <tr>
47
- <td class="gts-name">
48
- <a href="/tree/master:views"><i class="icon icon-folder-close"></i> views</a>
49
- </td>
50
- <td></td>
51
- <td class="gts-commit-oid"></td>
52
- <td></td>
53
- </tr>
54
- <tr>
55
- <td class="gts-name">
56
- <a href="/blob/master:.gitmodules"><i class="icon icon-file"></i> .gitmodules</a>
57
- </td>
58
- <td></td>
59
- <td class="gts-commit-oid"></td>
60
- <td></td>
61
- </tr>
62
- <tr>
63
- <td class="gts-name">
64
- <a href="/blob/master:Gemfile"><i class="icon icon-file"></i> Gemfile</a>
65
- </td>
66
- <td></td>
67
- <td class="gts-commit-oid"></td>
68
- <td></td>
69
- </tr>
70
- <tr>
71
- <td class="gts-name">
72
- <a href="/blob/master:Gemfile.lock"><i class="icon icon-file"></i> Gemfile.lock</a>
73
- </td>
74
- <td></td>
75
- <td class="gts-commit-oid"></td>
76
- <td></td>
77
- </tr>
78
- <tr>
79
- <td class="gts-name">
80
- <a href="/blob/master:Rakefile"><i class="icon icon-file"></i> Rakefile</a>
81
- </td>
82
- <td></td>
83
- <td class="gts-commit-oid"></td>
84
- <td></td>
85
- </tr>
86
- <tr>
87
- <td class="gts-name">
88
- <a href="/blob/master:Readme.md"><i class="icon icon-file"></i> Readme.md</a>
89
- </td>
90
- <td></td>
91
- <td class="gts-commit-oid"></td>
92
- <td></td>
93
- </tr>
94
- <tr>
95
- <td class="gts-name">
96
- <a href="/blob/master:dolt.gemspec"><i class="icon icon-file"></i> dolt.gemspec</a>
97
- </td>
98
- <td></td>
99
- <td class="gts-commit-oid"></td>
100
- <td></td>
101
- </tr>
102
- </tbody>
103
- </table>*/
104
-
105
- this.server = this.useFakeServer();
106
-
107
- this.treeData = function (tree) {
108
- var json = JSON.stringify(tree);
109
- var response = [200, { "Content-Type": "application/json" }, json];
110
- this.server.respondWith("GET", "/tree-data.json", response);
111
- };
112
- },
113
-
114
- "puts spinner in first row": function () {
115
- gts.treeHistory(this.table, "/tree-data.json");
116
- var $table = jQuery(this.table);
117
- var spinners = $table.find(".spinner");
118
-
119
- assert.equals(spinners.length, 1);
120
- assert.equals(spinners[0].parentNode.parentNode,
121
- $table.find("tbody tr:first")[0]);
122
- },
123
-
124
- "fires request for data": function () {
125
- gts.treeHistory(this.table, "/tree-data.json");
126
-
127
- assert.equals(this.server.requests.length, 1);
128
- assert.equals(this.server.requests[0].method, "GET");
129
- assert.equals(this.server.requests[0].url, "/tree-data.json");
130
- },
131
-
132
- "removes spinner when server responds": function () {
133
- gts.treeHistory(this.table, "/tree-data.json");
134
-
135
- this.treeData([]);
136
- this.server.respond();
137
-
138
- assert.equals(jQuery(this.table).find(".spinner").length, 0);
139
- },
140
-
141
- "adding history": {
142
- setUp: function () {
143
- this.treeData([{
144
- type: "blob",
145
- oid: "e90021f89616ddf86855d05337c188408d3b417e",
146
- filemode: 33188,
147
- name: ".gitmodules",
148
- history: [{
149
- oid: "906d67b4f3e5de7364ba9b57d174d8998d53ced6",
150
- author: { name: "Christian Johansen", email: "christian@cjohansen.no" },
151
- summary: "Working Moron server for viewing blobs",
152
- date: "2012-09-10T15:07:39+0200"
153
- }]
154
- }, {
155
- type: "blob",
156
- oid: "c80ee3697054566d1a4247d80be78ec3ddfde295",
157
- filemode: 33188,
158
- name: "Gemfile",
159
- history: [{
160
- oid: "26139a3aba4aac8cbf658c0d0ea58b8983e4090b",
161
- author: { name: "Christian Johansen", email: "christian@cjohansen.no" },
162
- summary: "Initial commit",
163
- date: "2012-08-23T11:40:39+0200"
164
- }]
165
- }]);
166
-
167
- gts.treeHistory(this.table, "/tree-data.json");
168
- this.server.respond();
169
- },
170
-
171
- "adds history for .gitmodules": function () {
172
- var row = this.table.getElementsByTagName("tr")[6];
173
- var cells = row.getElementsByTagName("td");
174
-
175
- assert.equals(cells[1].innerHTML, "Sep 10 2012");
176
- assert.equals(jQuery(cells[2]).attr("data-gts-commit-oid"),
177
- "906d67b4f3e5de7364ba9b57d174d8998d53ced6");
178
- assert.equals(cells[2].innerHTML, "#906d67b");
179
- assert.match(cells[3].innerHTML, "Working Moron server for viewing blobs");
180
- assert.match(cells[3].innerHTML, "Christian Johansen");
181
- },
182
-
183
- "adds history for Gemfile": function () {
184
- var row = this.table.getElementsByTagName("tr")[7];
185
- var cells = row.getElementsByTagName("td");
186
-
187
- assert.equals(cells[1].innerHTML, "Aug 23 2012");
188
- assert.equals(jQuery(cells[2]).attr("data-gts-commit-oid"),
189
- "26139a3aba4aac8cbf658c0d0ea58b8983e4090b");
190
- assert.equals(cells[2].innerHTML, "#26139a3");
191
- assert.match(cells[3].innerHTML, "Initial commit");
192
- assert.match(cells[3].innerHTML, "Christian Johansen");
193
- }
194
- },
195
-
196
- "adding history in nested tree": {
197
- setUp: function () {
198
- /*:DOC table = <table data-gts-tree-history="/tree_history/master:lib" class="table table-striped gts-tree-explorer">
199
- <thead>
200
- <tr>
201
- <th colspan="2">File</th>
202
- <th class="gts-col-changed">Changed</th>
203
- <th colspan="2" class="gts-col-commit">Last commit</th>
204
- </tr>
205
- </thead>
206
- <tbody>
207
- <tr>
208
- <td colspan="5">
209
- <a href="/tree/master:lib">
210
- <i class="icon icon-folder-open"></i> lib
211
- </a>
212
- </td>
213
- </tr>
214
- <tr>
215
- <td></td>
216
- <td class="gts-name">
217
- <a href="/tree/master:lib/dolt">
218
- <i class="icon icon-folder-close"></i>
219
- dolt
220
- </a>
221
- </td>
222
- <td></td>
223
- <td class="gts-commit-oid"></td>
224
- <td></td>
225
- </tr>
226
- </tbody>
227
- </table>*/
228
-
229
- this.treeData([{
230
- history: [{
231
- oid: "2ca8e4e51aeb7d4cff7145c1e4e2ccb9cde19181",
232
- summary: "Add support for async tree history",
233
- message: "",
234
- author: {
235
- email: "christian@gitorious.com",
236
- name: "Christian Johansen"
237
- },
238
- date: "Tue Oct 02 14:04:22 +0200 2012"
239
- }],
240
- oid: "7b83452d4ca77e2e81b5a7de8cfe4c0b0430bec3",
241
- filemode: 16384,
242
- type: "tree",
243
- name: "dolt"
244
- }]);
245
- },
246
-
247
- "annotates correct row": function () {
248
- gts.treeHistory(this.table, "/tree-data.json");
249
- this.server.respond();
250
-
251
- var row = this.table.getElementsByTagName("tr")[2];
252
- var cells = row.getElementsByTagName("td");
253
-
254
- assert.equals(cells[2].innerHTML, "Oct 2 2012");
255
- assert.equals(jQuery(cells[3]).attr("data-gts-commit-oid"),
256
- "2ca8e4e51aeb7d4cff7145c1e4e2ccb9cde19181");
257
- assert.equals(cells[3].innerHTML, "#2ca8e4e");
258
- assert.match(cells[4].innerHTML, "Add support for async tree history");
259
- assert.match(cells[4].innerHTML, "Christian Johansen");
260
- }
261
- },
262
-
263
- "adding history with long commit summary": {
264
- setUp: function () {
265
- /*:DOC table = <table data-gts-tree-history="/tree_history/master:lib" class="table table-striped gts-tree-explorer">
266
- <thead>
267
- <tr>
268
- <th colspan="2">File</th>
269
- <th class="gts-col-changed">Changed</th>
270
- <th colspan="2" class="gts-col-commit">Last commit</th>
271
- </tr>
272
- </thead>
273
- <tbody>
274
- <tr>
275
- <td colspan="5">
276
- <a href="/tree/master:lib">
277
- <i class="icon icon-folder-open"></i> lib
278
- </a>
279
- </td>
280
- </tr>
281
- <tr>
282
- <td></td>
283
- <td class="gts-name">
284
- <a href="/tree/master:lib/dolt">
285
- <i class="icon icon-folder-close"></i>
286
- dolt
287
- </a>
288
- </td>
289
- <td></td>
290
- <td class="gts-commit-oid"></td>
291
- <td></td>
292
- </tr>
293
- </tbody>
294
- </table>*/
295
-
296
- this.treeData([{
297
- history: [{
298
- oid: "2ca8e4e51aeb7d4cff7145c1e4e2ccb9cde19181",
299
- summary: "Aaaaaaaaa Bbbbbbbbb Ccccccccc Ddddddddd Eeeeeeeee Fffffffff ",
300
- message: "",
301
- author: {
302
- email: "christian@gitorious.com",
303
- name: "Christian Johansen"
304
- },
305
- date: "Tue Oct 02 14:04:22 +0200 2012"
306
- }],
307
- oid: "7b83452d4ca77e2e81b5a7de8cfe4c0b0430bec3",
308
- filemode: 16384,
309
- type: "tree",
310
- name: "dolt"
311
- }]);
312
- },
313
-
314
- "annotates correct row": function () {
315
- gts.treeHistory(this.table, "/tree-data.json");
316
- this.server.respond();
317
-
318
- var row = this.table.getElementsByTagName("tr")[2];
319
- var summary = row.getElementsByTagName("td")[4].innerHTML;
320
-
321
- assert.match(summary, "Aaaaaaaaa Bbbbbbbbb Ccccccccc Ddddddddd [...]");
322
- }
323
- }
324
- });