redcar-dev 0.12.17dev

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.
Files changed (655) hide show
  1. data/CHANGES +664 -0
  2. data/LICENSE +32 -0
  3. data/README.md +119 -0
  4. data/Rakefile +283 -0
  5. data/bin/redcar +29 -0
  6. data/lib/redcar.rb +307 -0
  7. data/lib/redcar/installer.rb +178 -0
  8. data/lib/redcar/instance_exec.rb +25 -0
  9. data/lib/redcar/logger.rb +64 -0
  10. data/lib/redcar/plist.rb +83 -0
  11. data/lib/redcar/ruby_extensions.rb +201 -0
  12. data/lib/redcar/runner.rb +130 -0
  13. data/lib/redcar/usage.rb +42 -0
  14. data/lib/redcar_quick_start.rb +100 -0
  15. data/lib/regex_replace.rb +221 -0
  16. data/lib/tasks/app-bundle.rake +63 -0
  17. data/plugins/application/features/main_menu.feature +9 -0
  18. data/plugins/application/features/navigation_history.feature +66 -0
  19. data/plugins/application/features/step_definitions/command_steps.rb +10 -0
  20. data/plugins/application/features/step_definitions/dialog_steps.rb +25 -0
  21. data/plugins/application/features/step_definitions/filter_list_dialog_steps.rb +42 -0
  22. data/plugins/application/features/step_definitions/key_steps.rb +18 -0
  23. data/plugins/application/features/step_definitions/menu_steps.rb +42 -0
  24. data/plugins/application/features/step_definitions/navigation_history_steps.rb +4 -0
  25. data/plugins/application/features/step_definitions/speedbar_steps.rb +88 -0
  26. data/plugins/application/features/step_definitions/tree_steps.rb +107 -0
  27. data/plugins/application/features/step_definitions/window_steps.rb +17 -0
  28. data/plugins/application/features/support/env.rb +257 -0
  29. data/plugins/application/features/support/fake_event.rb +26 -0
  30. data/plugins/application/lib/application.rb +425 -0
  31. data/plugins/application/lib/application/assets/file.png +0 -0
  32. data/plugins/application/lib/application/clipboard.rb +95 -0
  33. data/plugins/application/lib/application/command.rb +108 -0
  34. data/plugins/application/lib/application/command/executor.rb +80 -0
  35. data/plugins/application/lib/application/command/history.rb +54 -0
  36. data/plugins/application/lib/application/commands/application_commands.rb +21 -0
  37. data/plugins/application/lib/application/commands/notebook_commands.rb +73 -0
  38. data/plugins/application/lib/application/commands/tab_commands.rb +105 -0
  39. data/plugins/application/lib/application/commands/treebook_commands.rb +117 -0
  40. data/plugins/application/lib/application/commands/window_commands.rb +68 -0
  41. data/plugins/application/lib/application/dialog.rb +170 -0
  42. data/plugins/application/lib/application/dialogs/filter_list_dialog.rb +123 -0
  43. data/plugins/application/lib/application/dialogs/modeless_list_dialog.rb +85 -0
  44. data/plugins/application/lib/application/event_spewer.rb +32 -0
  45. data/plugins/application/lib/application/keymap.rb +41 -0
  46. data/plugins/application/lib/application/keymap/builder.rb +23 -0
  47. data/plugins/application/lib/application/menu.rb +117 -0
  48. data/plugins/application/lib/application/menu/builder.rb +80 -0
  49. data/plugins/application/lib/application/menu/builder/group.rb +47 -0
  50. data/plugins/application/lib/application/menu/item.rb +79 -0
  51. data/plugins/application/lib/application/menu/lazy_menu.rb +25 -0
  52. data/plugins/application/lib/application/navigation_history.rb +71 -0
  53. data/plugins/application/lib/application/notebook.rb +163 -0
  54. data/plugins/application/lib/application/sensitive.rb +57 -0
  55. data/plugins/application/lib/application/sensitivity.rb +82 -0
  56. data/plugins/application/lib/application/speedbar.rb +100 -0
  57. data/plugins/application/lib/application/tab.rb +92 -0
  58. data/plugins/application/lib/application/tab/command.rb +5 -0
  59. data/plugins/application/lib/application/toolbar.rb +83 -0
  60. data/plugins/application/lib/application/toolbar/builder.rb +80 -0
  61. data/plugins/application/lib/application/toolbar/builder/group.rb +47 -0
  62. data/plugins/application/lib/application/toolbar/item.rb +71 -0
  63. data/plugins/application/lib/application/toolbar/lazy_toolbar.rb +25 -0
  64. data/plugins/application/lib/application/tree.rb +94 -0
  65. data/plugins/application/lib/application/tree/command.rb +5 -0
  66. data/plugins/application/lib/application/tree/controller.rb +64 -0
  67. data/plugins/application/lib/application/tree/mirror.rb +132 -0
  68. data/plugins/application/lib/application/treebook.rb +83 -0
  69. data/plugins/application/lib/application/window.rb +274 -0
  70. data/plugins/application/plugin.rb +8 -0
  71. data/plugins/application/spec/application/application_spec.rb +23 -0
  72. data/plugins/application/spec/application/clipboard_spec.rb +55 -0
  73. data/plugins/application/spec/application/command/executor_spec.rb +78 -0
  74. data/plugins/application/spec/application/command/history_spec.rb +49 -0
  75. data/plugins/application/spec/application/command_spec.rb +78 -0
  76. data/plugins/application/spec/application/controllers/application_controller.rb +4 -0
  77. data/plugins/application/spec/application/controllers/notebook_controller.rb +4 -0
  78. data/plugins/application/spec/application/controllers/window_controller.rb +5 -0
  79. data/plugins/application/spec/application/keymap/builder_spec.rb +17 -0
  80. data/plugins/application/spec/application/menu/builder_spec.rb +61 -0
  81. data/plugins/application/spec/application/menu/menu_item_spec.rb +17 -0
  82. data/plugins/application/spec/application/menu_spec.rb +171 -0
  83. data/plugins/application/spec/application/navigation_history_spec.rb +96 -0
  84. data/plugins/application/spec/application/notebook_spec.rb +31 -0
  85. data/plugins/application/spec/application/sensitive_spec.rb +156 -0
  86. data/plugins/application/spec/application/speedbar_spec.rb +77 -0
  87. data/plugins/application/spec/application/treebook_spec.rb +27 -0
  88. data/plugins/application/spec/application/window_spec.rb +24 -0
  89. data/plugins/application/spec/spec_helper.rb +18 -0
  90. data/plugins/application_swt/build.xml +74 -0
  91. data/plugins/application_swt/lib/application_swt.rb +218 -0
  92. data/plugins/application_swt/lib/application_swt/bring_to_front.rb +53 -0
  93. data/plugins/application_swt/lib/application_swt/clipboard.rb +42 -0
  94. data/plugins/application_swt/lib/application_swt/dialog_adapter.rb +180 -0
  95. data/plugins/application_swt/lib/application_swt/dialogs/filter_list_dialog_controller.rb +233 -0
  96. data/plugins/application_swt/lib/application_swt/dialogs/input_dialog.rb +46 -0
  97. data/plugins/application_swt/lib/application_swt/dialogs/modeless_dialog.rb +113 -0
  98. data/plugins/application_swt/lib/application_swt/dialogs/modeless_html_dialog.rb +85 -0
  99. data/plugins/application_swt/lib/application_swt/dialogs/modeless_list_dialog_controller.rb +143 -0
  100. data/plugins/application_swt/lib/application_swt/dialogs/no_buttons_dialog.rb +24 -0
  101. data/plugins/application_swt/lib/application_swt/dialogs/text_and_file_dialog.rb +118 -0
  102. data/plugins/application_swt/lib/application_swt/gradient.rb +61 -0
  103. data/plugins/application_swt/lib/application_swt/html_tab.rb +79 -0
  104. data/plugins/application_swt/lib/application_swt/icon.rb +35 -0
  105. data/plugins/application_swt/lib/application_swt/listener_helpers.rb +20 -0
  106. data/plugins/application_swt/lib/application_swt/menu.rb +167 -0
  107. data/plugins/application_swt/lib/application_swt/menu/binding_translator.rb +94 -0
  108. data/plugins/application_swt/lib/application_swt/notebook.rb +148 -0
  109. data/plugins/application_swt/lib/application_swt/notebook/tab_drag_and_drop_listener.rb +124 -0
  110. data/plugins/application_swt/lib/application_swt/notebook/tab_transfer.rb +83 -0
  111. data/plugins/application_swt/lib/application_swt/speedbar.rb +185 -0
  112. data/plugins/application_swt/lib/application_swt/speedbar/button_item.rb +20 -0
  113. data/plugins/application_swt/lib/application_swt/speedbar/combo_item.rb +55 -0
  114. data/plugins/application_swt/lib/application_swt/speedbar/label_item.rb +15 -0
  115. data/plugins/application_swt/lib/application_swt/speedbar/slider_item.rb +32 -0
  116. data/plugins/application_swt/lib/application_swt/speedbar/text_box_item.rb +36 -0
  117. data/plugins/application_swt/lib/application_swt/speedbar/toggle_item.rb +29 -0
  118. data/plugins/application_swt/lib/application_swt/tab.rb +84 -0
  119. data/plugins/application_swt/lib/application_swt/toolbar.rb +138 -0
  120. data/plugins/application_swt/lib/application_swt/toolbar/binding_translator.rb +94 -0
  121. data/plugins/application_swt/lib/application_swt/treebook.rb +78 -0
  122. data/plugins/application_swt/lib/application_swt/window.rb +419 -0
  123. data/plugins/application_swt/lib/dist/application_swt.jar +0 -0
  124. data/plugins/application_swt/lib/swt/graphics_utils.rb +193 -0
  125. data/plugins/application_swt/lib/swt/vtab_folder.rb +177 -0
  126. data/plugins/application_swt/lib/swt/vtab_item.rb +78 -0
  127. data/plugins/application_swt/lib/swt/vtab_label.rb +127 -0
  128. data/plugins/application_swt/plugin.rb +8 -0
  129. data/plugins/application_swt/spec/application_swt/gradient_spec.rb +133 -0
  130. data/plugins/application_swt/spec/application_swt/menu/binding_translator_spec.rb +73 -0
  131. data/plugins/application_swt/spec/application_swt/menu_spec.rb +7 -0
  132. data/plugins/application_swt/spec/spec_helper.rb +20 -0
  133. data/plugins/application_swt/src/com/redcareditor/application_swt/CocoaUIEnhancer.java +313 -0
  134. data/plugins/auto_completer/features/auto_complete.feature +65 -0
  135. data/plugins/auto_completer/features/step_definitions/auto_complete_steps.rb +4 -0
  136. data/plugins/auto_completer/features/support/env.rb +2 -0
  137. data/plugins/auto_completer/lib/auto_completer.rb +129 -0
  138. data/plugins/auto_completer/lib/auto_completer/current_document_completion_source.rb +19 -0
  139. data/plugins/auto_completer/lib/auto_completer/document_controller.rb +52 -0
  140. data/plugins/auto_completer/lib/auto_completer/list_dialog.rb +21 -0
  141. data/plugins/auto_completer/lib/auto_completer/word_iterator.rb +48 -0
  142. data/plugins/auto_completer/lib/auto_completer/word_list.rb +47 -0
  143. data/plugins/auto_completer/plugin.rb +10 -0
  144. data/plugins/auto_indenter/features/java_style_indentation.feature +36 -0
  145. data/plugins/auto_indenter/features/ruby_style_indentation.feature +42 -0
  146. data/plugins/auto_indenter/features/step_definitions/indentation_steps.rb +15 -0
  147. data/plugins/auto_indenter/features/support/env.rb +1 -0
  148. data/plugins/auto_indenter/lib/auto_indenter.rb +108 -0
  149. data/plugins/auto_indenter/lib/auto_indenter/analyzer.rb +100 -0
  150. data/plugins/auto_indenter/lib/auto_indenter/commands.rb +66 -0
  151. data/plugins/auto_indenter/lib/auto_indenter/document_controller.rb +103 -0
  152. data/plugins/auto_indenter/lib/auto_indenter/rules.rb +41 -0
  153. data/plugins/auto_indenter/plugin.rb +9 -0
  154. data/plugins/auto_indenter/spec/auto_indenter/analyzer_spec.rb +151 -0
  155. data/plugins/auto_indenter/spec/spec_helper.rb +5 -0
  156. data/plugins/auto_pairer/features/auto_pairer.feature +92 -0
  157. data/plugins/auto_pairer/features/step_definitions/auto_pairer_steps.rb +0 -0
  158. data/plugins/auto_pairer/features/support/env.rb +1 -0
  159. data/plugins/auto_pairer/lib/auto_pairer.rb +12 -0
  160. data/plugins/auto_pairer/lib/auto_pairer/document_controller.rb +168 -0
  161. data/plugins/auto_pairer/lib/auto_pairer/pairs_for_scope.rb +57 -0
  162. data/plugins/auto_pairer/plugin.rb +9 -0
  163. data/plugins/clipboard-viewer/Screenshot.png +0 -0
  164. data/plugins/clipboard-viewer/lib/clipboard_viewer.rb +50 -0
  165. data/plugins/clipboard-viewer/lib/clipboard_viewer/browser_controller.rb +27 -0
  166. data/plugins/clipboard-viewer/lib/clipboard_viewer/clipboard_bar.rb +67 -0
  167. data/plugins/clipboard-viewer/plugin.rb +9 -0
  168. data/plugins/clipboard-viewer/views/clipboard.html.erb +19 -0
  169. data/plugins/clipboard-viewer/views/default.css +43 -0
  170. data/plugins/clipboard-viewer/views/redcar_small_icon.png +0 -0
  171. data/plugins/comment/features/line_comment.feature +249 -0
  172. data/plugins/comment/features/selection_comment.feature +21 -0
  173. data/plugins/comment/features/step_definitions/comment_steps.rb +7 -0
  174. data/plugins/comment/lib/comment.rb +268 -0
  175. data/plugins/comment/plugin.rb +7 -0
  176. data/plugins/comment/vendor/comment_lib.json +47 -0
  177. data/plugins/connection_manager/lib/connection_manager.rb +57 -0
  178. data/plugins/connection_manager/lib/connection_manager/commands.rb +14 -0
  179. data/plugins/connection_manager/lib/connection_manager/connection_store.rb +87 -0
  180. data/plugins/connection_manager/lib/connection_manager/controller.rb +100 -0
  181. data/plugins/connection_manager/lib/connection_manager/filter_dialog.rb +38 -0
  182. data/plugins/connection_manager/lib/connection_manager/private_key_store.rb +93 -0
  183. data/plugins/connection_manager/plugin.rb +12 -0
  184. data/plugins/connection_manager/views/index.html.erb +284 -0
  185. data/plugins/core/lib/core.rb +41 -0
  186. data/plugins/core/lib/core/controller.rb +23 -0
  187. data/plugins/core/lib/core/gui.rb +100 -0
  188. data/plugins/core/lib/core/has_spi.rb +10 -0
  189. data/plugins/core/lib/core/interface.rb +73 -0
  190. data/plugins/core/lib/core/model.rb +11 -0
  191. data/plugins/core/lib/core/observable.rb +115 -0
  192. data/plugins/core/lib/core/observable_struct.rb +34 -0
  193. data/plugins/core/lib/core/persistent_cache.rb +57 -0
  194. data/plugins/core/lib/core/plugin.rb +12 -0
  195. data/plugins/core/lib/core/plugin/storage.rb +133 -0
  196. data/plugins/core/lib/core/reentry_helpers.rb +13 -0
  197. data/plugins/core/lib/core/resource.rb +86 -0
  198. data/plugins/core/lib/core/task.rb +62 -0
  199. data/plugins/core/lib/core/task_queue.rb +72 -0
  200. data/plugins/core/plugin.rb +7 -0
  201. data/plugins/core/spec/core/base_storage_spec.rb +81 -0
  202. data/plugins/core/spec/core/gui_spec.rb +27 -0
  203. data/plugins/core/spec/core/observable_spec.rb +104 -0
  204. data/plugins/core/spec/core/persistent_cache_spec.rb +100 -0
  205. data/plugins/core/spec/core/resource_spec.rb +125 -0
  206. data/plugins/core/spec/core/shared_storage_spec.rb +49 -0
  207. data/plugins/core/spec/core/storage_spec.rb +27 -0
  208. data/plugins/core/spec/core/task_queue_spec.rb +199 -0
  209. data/plugins/core/spec/spec_helper.rb +27 -0
  210. data/plugins/declarations/lib/declarations.rb +159 -0
  211. data/plugins/declarations/lib/declarations/completion_source.rb +22 -0
  212. data/plugins/declarations/lib/declarations/file.rb +68 -0
  213. data/plugins/declarations/lib/declarations/parser.rb +186 -0
  214. data/plugins/declarations/lib/declarations/select_tag_dialog.rb +45 -0
  215. data/plugins/declarations/plugin.rb +7 -0
  216. data/plugins/declarations/spec/declarations/file_spec.rb +62 -0
  217. data/plugins/declarations/spec/fixtures/federalist.rb +15 -0
  218. data/plugins/declarations/spec/spec_helper.rb +5 -0
  219. data/plugins/document_search/Readme.md +14 -0
  220. data/plugins/document_search/features/find.feature +541 -0
  221. data/plugins/document_search/features/incremental_search.feature +351 -0
  222. data/plugins/document_search/features/replace.feature +178 -0
  223. data/plugins/document_search/features/step_definitions/find_steps.rb +16 -0
  224. data/plugins/document_search/features/support/env.rb +14 -0
  225. data/plugins/document_search/lib/document_search.rb +191 -0
  226. data/plugins/document_search/lib/document_search/commands.rb +307 -0
  227. data/plugins/document_search/lib/document_search/find_speedbar.rb +162 -0
  228. data/plugins/document_search/lib/document_search/incremental_search_speedbar.rb +70 -0
  229. data/plugins/document_search/lib/document_search/query_options.rb +21 -0
  230. data/plugins/document_search/plugin.rb +8 -0
  231. data/plugins/edit_view/features/align_assignment.feature +106 -0
  232. data/plugins/edit_view/features/case_change.feature +67 -0
  233. data/plugins/edit_view/features/cursor_navigation.feature +36 -0
  234. data/plugins/edit_view/features/cut_and_paste.feature +45 -0
  235. data/plugins/edit_view/features/grammar.feature +11 -0
  236. data/plugins/edit_view/features/indentation_commands.feature +49 -0
  237. data/plugins/edit_view/features/line_delimiter.feature +47 -0
  238. data/plugins/edit_view/features/multiple_notebooks.feature +52 -0
  239. data/plugins/edit_view/features/multiple_windows.feature +48 -0
  240. data/plugins/edit_view/features/new_tab.feature +11 -0
  241. data/plugins/edit_view/features/soft_tabs.feature +243 -0
  242. data/plugins/edit_view/features/sort_lines.feature +15 -0
  243. data/plugins/edit_view/features/step_definitions/editing_steps.rb +350 -0
  244. data/plugins/edit_view/features/step_definitions/grammar_steps.rb +4 -0
  245. data/plugins/edit_view/features/step_definitions/key_steps.rb +48 -0
  246. data/plugins/edit_view/features/step_definitions/notebook_steps.rb +59 -0
  247. data/plugins/edit_view/features/step_definitions/tab_steps.rb +113 -0
  248. data/plugins/edit_view/features/step_definitions/window_steps.rb +86 -0
  249. data/plugins/edit_view/features/support/env.rb +59 -0
  250. data/plugins/edit_view/features/switch_tabs.feature +106 -0
  251. data/plugins/edit_view/features/tabs.feature +146 -0
  252. data/plugins/edit_view/features/undo_and_redo.feature +73 -0
  253. data/plugins/edit_view/features/word_matching.feature +67 -0
  254. data/plugins/edit_view/lib/edit_view.rb +659 -0
  255. data/plugins/edit_view/lib/edit_view/actions/arrow_keys.rb +170 -0
  256. data/plugins/edit_view/lib/edit_view/actions/cmd_enter.rb +11 -0
  257. data/plugins/edit_view/lib/edit_view/actions/deletion.rb +40 -0
  258. data/plugins/edit_view/lib/edit_view/actions/esc.rb +15 -0
  259. data/plugins/edit_view/lib/edit_view/actions/tab.rb +70 -0
  260. data/plugins/edit_view/lib/edit_view/command.rb +14 -0
  261. data/plugins/edit_view/lib/edit_view/commands/align_assignment_command.rb +55 -0
  262. data/plugins/edit_view/lib/edit_view/commands/text_conversion_commands.rb +85 -0
  263. data/plugins/edit_view/lib/edit_view/document.rb +796 -0
  264. data/plugins/edit_view/lib/edit_view/document/command.rb +25 -0
  265. data/plugins/edit_view/lib/edit_view/document/controller.rb +43 -0
  266. data/plugins/edit_view/lib/edit_view/document/history.rb +41 -0
  267. data/plugins/edit_view/lib/edit_view/document/indentation.rb +40 -0
  268. data/plugins/edit_view/lib/edit_view/document/mirror.rb +42 -0
  269. data/plugins/edit_view/lib/edit_view/edit_tab.rb +59 -0
  270. data/plugins/edit_view/lib/edit_view/grammar.rb +58 -0
  271. data/plugins/edit_view/lib/edit_view/grammars/default.rb +10 -0
  272. data/plugins/edit_view/lib/edit_view/grammars/ruby.rb +10 -0
  273. data/plugins/edit_view/lib/edit_view/grammars/ruby_on_rails.rb +7 -0
  274. data/plugins/edit_view/lib/edit_view/info_speedbar.rb +98 -0
  275. data/plugins/edit_view/lib/edit_view/modified_tabs_checker.rb +35 -0
  276. data/plugins/edit_view/lib/edit_view/select_font_dialog.rb +45 -0
  277. data/plugins/edit_view/lib/edit_view/select_theme_dialog.rb +42 -0
  278. data/plugins/edit_view/lib/edit_view/tab_settings.rb +135 -0
  279. data/plugins/edit_view/plugin.rb +9 -0
  280. data/plugins/edit_view/spec/edit_view/document/indentation_spec.rb +112 -0
  281. data/plugins/edit_view/spec/edit_view/document_spec.rb +130 -0
  282. data/plugins/edit_view/spec/spec_helper.rb +5 -0
  283. data/plugins/edit_view_swt/lib/edit_view_swt.rb +621 -0
  284. data/plugins/edit_view_swt/lib/edit_view_swt/document.rb +224 -0
  285. data/plugins/edit_view_swt/lib/edit_view_swt/edit_tab.rb +50 -0
  286. data/plugins/edit_view_swt/lib/edit_view_swt/word_movement.rb +68 -0
  287. data/plugins/edit_view_swt/plugin.rb +9 -0
  288. data/plugins/edit_view_swt/spec/edit_view_swt/word_movement_spec.rb +29 -0
  289. data/plugins/edit_view_swt/spec/spec_helper.rb +5 -0
  290. data/plugins/encryption/encryption.rb +52 -0
  291. data/plugins/encryption/ezcrypto.rb +652 -0
  292. data/plugins/encryption/jarmor-1.1.jar +0 -0
  293. data/plugins/encryption/plugin.rb +9 -0
  294. data/plugins/execute_current_tab/lib/execute_current_tab.rb +68 -0
  295. data/plugins/execute_current_tab/plugin.rb +8 -0
  296. data/plugins/help/lib/help.rb +64 -0
  297. data/plugins/help/lib/help/help_tab.rb +11 -0
  298. data/plugins/help/lib/help/view_controller.rb +30 -0
  299. data/plugins/help/plugin.rb +9 -0
  300. data/plugins/help/views/default.css +31 -0
  301. data/plugins/help/views/index.html.erb +41 -0
  302. data/plugins/help/views/redcar_small_icon.png +0 -0
  303. data/plugins/html_view/assets/blueprint/ie.css +35 -0
  304. data/plugins/html_view/assets/blueprint/print.css +29 -0
  305. data/plugins/html_view/assets/blueprint/screen.css +257 -0
  306. data/plugins/html_view/assets/blueprint/src/forms.css +65 -0
  307. data/plugins/html_view/assets/blueprint/src/grid.css +281 -0
  308. data/plugins/html_view/assets/blueprint/src/grid.png +0 -0
  309. data/plugins/html_view/assets/blueprint/src/ie.css +76 -0
  310. data/plugins/html_view/assets/blueprint/src/print.css +85 -0
  311. data/plugins/html_view/assets/blueprint/src/reset.css +38 -0
  312. data/plugins/html_view/assets/blueprint/src/typography.css +106 -0
  313. data/plugins/html_view/assets/jquery-1.4.min.js +151 -0
  314. data/plugins/html_view/assets/json2.js +476 -0
  315. data/plugins/html_view/assets/redcar.css +44 -0
  316. data/plugins/html_view/features/browser_bar.feature +47 -0
  317. data/plugins/html_view/features/fixtures/other.html +1 -0
  318. data/plugins/html_view/features/fixtures/sample.html +1 -0
  319. data/plugins/html_view/features/step_definitions/html_view_steps.rb +64 -0
  320. data/plugins/html_view/features/step_definitions/web_view_steps.rb +12 -0
  321. data/plugins/html_view/features/support/env.rb +27 -0
  322. data/plugins/html_view/features/web_preview.feature +21 -0
  323. data/plugins/html_view/lib/html_controller.rb +50 -0
  324. data/plugins/html_view/lib/html_view.rb +170 -0
  325. data/plugins/html_view/lib/html_view/browser_bar.rb +82 -0
  326. data/plugins/html_view/lib/html_view/commands.rb +64 -0
  327. data/plugins/html_view/lib/html_view/default_controller.rb +23 -0
  328. data/plugins/html_view/lib/html_view/html_tab.rb +40 -0
  329. data/plugins/html_view/plugin.rb +13 -0
  330. data/plugins/html_view/views/default.css +117 -0
  331. data/plugins/html_view/views/index.html.erb +5 -0
  332. data/plugins/html_view/views/watermark-48.png +0 -0
  333. data/plugins/java/features/fixtures/lib/classes.jar +0 -0
  334. data/plugins/java/features/fixtures/test.java +0 -0
  335. data/plugins/java/features/support/env.rb +27 -0
  336. data/plugins/java/features/syntax_check_java.feature +86 -0
  337. data/plugins/java/lib/syntax_check/java.rb +86 -0
  338. data/plugins/java/plugin.rb +7 -0
  339. data/plugins/key_bindings/lib/key_bindings.rb +34 -0
  340. data/plugins/key_bindings/plugin.rb +8 -0
  341. data/plugins/key_bindings/spec/spec_helper.rb +5 -0
  342. data/plugins/line_tools/features/clear_line.feature +25 -0
  343. data/plugins/line_tools/features/kill_line.feature +25 -0
  344. data/plugins/line_tools/features/lower_text.feature +54 -0
  345. data/plugins/line_tools/features/raise_text.feature +50 -0
  346. data/plugins/line_tools/features/replace_line.feature +33 -0
  347. data/plugins/line_tools/features/step_definitions/line_tools_steps.rb +23 -0
  348. data/plugins/line_tools/features/support/env.rb +0 -0
  349. data/plugins/line_tools/features/trim_line.feature +73 -0
  350. data/plugins/line_tools/lib/line_tools.rb +217 -0
  351. data/plugins/line_tools/plugin.rb +9 -0
  352. data/plugins/macros/features/block_selection_in_macros.feature +48 -0
  353. data/plugins/macros/features/predictive_macros.feature +79 -0
  354. data/plugins/macros/features/record_and_run_macro.feature +87 -0
  355. data/plugins/macros/features/step_definitions/macro_steps.rb +11 -0
  356. data/plugins/macros/features/step_definitions/prediction_steps.rb +8 -0
  357. data/plugins/macros/features/support/env.rb +0 -0
  358. data/plugins/macros/lib/macros.rb +167 -0
  359. data/plugins/macros/lib/macros/action_sequence.rb +30 -0
  360. data/plugins/macros/lib/macros/commands.rb +108 -0
  361. data/plugins/macros/lib/macros/macro.rb +37 -0
  362. data/plugins/macros/lib/macros/manager_controller.rb +67 -0
  363. data/plugins/macros/lib/macros/predictive/document_controller.rb +69 -0
  364. data/plugins/macros/lib/macros/predictive/sequence_finder.rb +112 -0
  365. data/plugins/macros/plugin.rb +9 -0
  366. data/plugins/macros/spec/macros/predictive/sequence_finder_spec.rb +142 -0
  367. data/plugins/macros/spec/spec_helper.rb +6 -0
  368. data/plugins/macros/views/macro_manager.html.erb +92 -0
  369. data/plugins/my_plugin/lib/my_plugin.rb +47 -0
  370. data/plugins/my_plugin/plugin.rb +8 -0
  371. data/plugins/open_default_app/lib/open_default_app.rb +61 -0
  372. data/plugins/open_default_app/plugin.rb +8 -0
  373. data/plugins/open_default_app/screenshot.png +0 -0
  374. data/plugins/outline_view/features/outline_view.feature +79 -0
  375. data/plugins/outline_view/features/step_definitions/outline_steps.rb +45 -0
  376. data/plugins/outline_view/lib/outline_view.rb +66 -0
  377. data/plugins/outline_view/lib/outline_view/commands.rb +13 -0
  378. data/plugins/outline_view/plugin.rb +10 -0
  379. data/plugins/outline_view/spec/fixtures/some_project/javascript.js +10 -0
  380. data/plugins/outline_view/spec/fixtures/some_project/nothing_to_see.rb +0 -0
  381. data/plugins/outline_view/spec/fixtures/some_project/one_lonely_class.rb +2 -0
  382. data/plugins/outline_view/spec/fixtures/some_project/similar_names.rb +18 -0
  383. data/plugins/outline_view/spec/fixtures/some_project/something_fancy.rb +736 -0
  384. data/plugins/outline_view/spec/fixtures/some_project/trailing_space.rb +5 -0
  385. data/plugins/outline_view_swt/lib/outline_view_swt.rb +79 -0
  386. data/plugins/outline_view_swt/plugin.rb +7 -0
  387. data/plugins/pair_highlighter/lib/pair_highlighter.rb +34 -0
  388. data/plugins/pair_highlighter/lib/pair_highlighter/document_controller.rb +185 -0
  389. data/plugins/pair_highlighter/plugin.rb +9 -0
  390. data/plugins/plugin_manager_ui/lib/plugin_manager_ui.rb +122 -0
  391. data/plugins/plugin_manager_ui/plugin.rb +13 -0
  392. data/plugins/plugin_manager_ui/views/index.html.erb +62 -0
  393. data/plugins/project/features/close_directory_tree.feature +28 -0
  394. data/plugins/project/features/find_file.feature +119 -0
  395. data/plugins/project/features/highlight_focussed_tab.feature +53 -0
  396. data/plugins/project/features/move_and_rename_files.feature +25 -0
  397. data/plugins/project/features/open_and_save_files.feature +85 -0
  398. data/plugins/project/features/open_directory_tree.feature +93 -0
  399. data/plugins/project/features/refresh_directory_tree.feature +44 -0
  400. data/plugins/project/features/step_definitions/directory_steps.rb +35 -0
  401. data/plugins/project/features/step_definitions/drb_steps.rb +40 -0
  402. data/plugins/project/features/step_definitions/file_steps.rb +66 -0
  403. data/plugins/project/features/step_definitions/find_file_steps.rb +7 -0
  404. data/plugins/project/features/step_definitions/project_tree_steps.rb +7 -0
  405. data/plugins/project/features/sub_project.feature +15 -0
  406. data/plugins/project/features/support/env.rb +35 -0
  407. data/plugins/project/features/watch_for_modified_files.feature +109 -0
  408. data/plugins/project/lib/project.rb +266 -0
  409. data/plugins/project/lib/project/adapters/local.rb +82 -0
  410. data/plugins/project/lib/project/adapters/remote.rb +96 -0
  411. data/plugins/project/lib/project/adapters/remote_protocols/ftp.rb +93 -0
  412. data/plugins/project/lib/project/adapters/remote_protocols/protocol.rb +94 -0
  413. data/plugins/project/lib/project/adapters/remote_protocols/sftp.rb +181 -0
  414. data/plugins/project/lib/project/commands.rb +449 -0
  415. data/plugins/project/lib/project/dir_controller.rb +275 -0
  416. data/plugins/project/lib/project/dir_mirror.rb +176 -0
  417. data/plugins/project/lib/project/drb_service.rb +86 -0
  418. data/plugins/project/lib/project/file_list.rb +164 -0
  419. data/plugins/project/lib/project/file_mirror.rb +85 -0
  420. data/plugins/project/lib/project/find_file_dialog.rb +118 -0
  421. data/plugins/project/lib/project/find_recent_dialog.rb +30 -0
  422. data/plugins/project/lib/project/manager.rb +545 -0
  423. data/plugins/project/lib/project/project_tree_controller.rb +24 -0
  424. data/plugins/project/lib/project/recent.rb +64 -0
  425. data/plugins/project/lib/project/sub_project.rb +17 -0
  426. data/plugins/project/lib/project/support/recycle.js +2 -0
  427. data/plugins/project/lib/project/support/trash.rb +73 -0
  428. data/plugins/project/plugin.rb +11 -0
  429. data/plugins/project/spec/fixture_helper.rb +30 -0
  430. data/plugins/project/spec/project/adapters/remote_protocols/ftp_spec.rb +75 -0
  431. data/plugins/project/spec/project/adapters/remote_protocols/sftp_spec.rb +121 -0
  432. data/plugins/project/spec/project/adapters/remote_spec.rb +136 -0
  433. data/plugins/project/spec/project/dir_mirror_spec.rb +65 -0
  434. data/plugins/project/spec/project/file_list_spec.rb +151 -0
  435. data/plugins/project/spec/project/file_mirror_spec.rb +97 -0
  436. data/plugins/project/spec/spec_helper.rb +26 -0
  437. data/plugins/project/views/bulk_rename.html.erb +162 -0
  438. data/plugins/project_search/features/support/env.rb +6 -0
  439. data/plugins/project_search/features/word_search.feature +34 -0
  440. data/plugins/project_search/lib/project_search.rb +82 -0
  441. data/plugins/project_search/lib/project_search/binary_data_detector.rb +46 -0
  442. data/plugins/project_search/lib/project_search/commands.rb +50 -0
  443. data/plugins/project_search/lib/project_search/hit.rb +21 -0
  444. data/plugins/project_search/lib/project_search/images/spinner.gif +0 -0
  445. data/plugins/project_search/lib/project_search/lucene_index.rb +81 -0
  446. data/plugins/project_search/lib/project_search/lucene_refresh.rb +22 -0
  447. data/plugins/project_search/lib/project_search/project.rb +14 -0
  448. data/plugins/project_search/lib/project_search/query.rb +29 -0
  449. data/plugins/project_search/lib/project_search/stylesheets/style.css +279 -0
  450. data/plugins/project_search/lib/project_search/views/_file.html.erb +58 -0
  451. data/plugins/project_search/lib/project_search/views/index.html.erb +156 -0
  452. data/plugins/project_search/lib/project_search/word_search.rb +143 -0
  453. data/plugins/project_search/lib/project_search/word_search_controller.rb +219 -0
  454. data/plugins/project_search/plugin.rb +8 -0
  455. data/plugins/project_search/spec/fixtures/project/binary_file.bin +0 -0
  456. data/plugins/project_search/spec/fixtures/project/foo.txt +43 -0
  457. data/plugins/project_search/spec/fixtures/project/qux.rb +3 -0
  458. data/plugins/project_search/spec/project_search/binary_data_detector_spec.rb +24 -0
  459. data/plugins/project_search/spec/project_search/word_search_spec.rb +157 -0
  460. data/plugins/project_search/spec/spec_helper.rb +27 -0
  461. data/plugins/redcar/features/alter_font_size.feature +26 -0
  462. data/plugins/redcar/features/goto_line_command.feature +20 -0
  463. data/plugins/redcar/features/step_definitions/env.rb +5 -0
  464. data/plugins/redcar/features/step_definitions/font_steps.rb +34 -0
  465. data/plugins/redcar/features/text_editing.feature +34 -0
  466. data/plugins/redcar/features/text_navigation.feature +30 -0
  467. data/plugins/redcar/plugin.rb +17 -0
  468. data/plugins/redcar/redcar.rb +1097 -0
  469. data/plugins/redcar_debug/lib/redcar_debug.rb +91 -0
  470. data/plugins/redcar_debug/plugin.rb +8 -0
  471. data/plugins/redcar_debug/views/history.html.erb +34 -0
  472. data/plugins/redcar_debug/views/index.html.erb +36 -0
  473. data/plugins/repl/features/command_editing.feature +55 -0
  474. data/plugins/repl/features/command_history.feature +75 -0
  475. data/plugins/repl/features/step_definitions/repl_steps.rb +19 -0
  476. data/plugins/repl/features/support/env.rb +24 -0
  477. data/plugins/repl/features/support/fake_repl.rb +16 -0
  478. data/plugins/repl/lib/repl.rb +40 -0
  479. data/plugins/repl/lib/repl/repl_command.rb +20 -0
  480. data/plugins/repl/lib/repl/repl_mirror.rb +255 -0
  481. data/plugins/repl/lib/repl/repl_tab.rb +154 -0
  482. data/plugins/repl/plugin.rb +8 -0
  483. data/plugins/repl/spec/repl/repl_mirror_spec.rb +72 -0
  484. data/plugins/repl/spec/spec_helper.rb +5 -0
  485. data/plugins/repl_swt/lib/repl_swt.rb +7 -0
  486. data/plugins/repl_swt/lib/repl_swt/key_listener.rb +43 -0
  487. data/plugins/repl_swt/plugin.rb +8 -0
  488. data/plugins/ruby/features/fixtures/test.rb +0 -0
  489. data/plugins/ruby/features/support/env.rb +4 -0
  490. data/plugins/ruby/features/syntax_check_ruby.feature +26 -0
  491. data/plugins/ruby/lib/ruby.rb +35 -0
  492. data/plugins/ruby/lib/ruby/repl_mirror.rb +46 -0
  493. data/plugins/ruby/lib/ruby/syntax_checker.rb +30 -0
  494. data/plugins/ruby/plugin.rb +8 -0
  495. data/plugins/ruby/spec/ruby/repl_mirror_spec.rb +202 -0
  496. data/plugins/ruby/spec/spec_helper.rb +5 -0
  497. data/plugins/runnables/features/command_tree.feature +63 -0
  498. data/plugins/runnables/features/file_runner_input.feature +21 -0
  499. data/plugins/runnables/features/parameter_input.feature +43 -0
  500. data/plugins/runnables/features/run_alternate_command.feature +15 -0
  501. data/plugins/runnables/features/run_command_tab.feature +47 -0
  502. data/plugins/runnables/features/step_definitions/runnable_steps.rb +28 -0
  503. data/plugins/runnables/features/support/env.rb +124 -0
  504. data/plugins/runnables/lib/runnables.rb +180 -0
  505. data/plugins/runnables/lib/runnables/command_output_controller.rb +183 -0
  506. data/plugins/runnables/lib/runnables/commands.rb +82 -0
  507. data/plugins/runnables/lib/runnables/output_processor.rb +74 -0
  508. data/plugins/runnables/lib/runnables/running_process_checker.rb +34 -0
  509. data/plugins/runnables/lib/runnables/tree_mirror/nodes/runnable.rb +62 -0
  510. data/plugins/runnables/lib/runnables/tree_mirror/nodes/runnable_group.rb +45 -0
  511. data/plugins/runnables/lib/runnables/tree_mirror/nodes/runnable_type_group.rb +30 -0
  512. data/plugins/runnables/lib/runnables/tree_mirror/tree_controller.rb +36 -0
  513. data/plugins/runnables/lib/runnables/tree_mirror/tree_mirror.rb +66 -0
  514. data/plugins/runnables/plugin.rb +9 -0
  515. data/plugins/runnables/spec/runnables/output_processor_spec.rb +57 -0
  516. data/plugins/runnables/spec/spec_helper.rb +5 -0
  517. data/plugins/runnables/views/basic_ansi.css +34 -0
  518. data/plugins/runnables/views/color_tester.html +50 -0
  519. data/plugins/runnables/views/command_output.html.erb +32 -0
  520. data/plugins/runnables/views/default.css +79 -0
  521. data/plugins/runnables/views/indicator.gif +0 -0
  522. data/plugins/runnables/views/redcar_small_icon.png +0 -0
  523. data/plugins/runnables/views/reset.css +53 -0
  524. data/plugins/runnables/views/running_test.html +41 -0
  525. data/plugins/runnables/views/wedgeDown.png +0 -0
  526. data/plugins/runnables/views/wedgeRight.png +0 -0
  527. data/plugins/scm/lib/scm.rb +296 -0
  528. data/plugins/scm/lib/scm/commands.rb +48 -0
  529. data/plugins/scm/lib/scm/commit_mirror.rb +72 -0
  530. data/plugins/scm/lib/scm/diff_mirror.rb +31 -0
  531. data/plugins/scm/lib/scm/errors.rb +8 -0
  532. data/plugins/scm/lib/scm/model.rb +275 -0
  533. data/plugins/scm/lib/scm/scm_changes_controller.rb +107 -0
  534. data/plugins/scm/lib/scm/scm_changes_mirror.rb +51 -0
  535. data/plugins/scm/lib/scm/scm_changes_mirror/change.rb +63 -0
  536. data/plugins/scm/lib/scm/scm_changes_mirror/changes_node.rb +47 -0
  537. data/plugins/scm/lib/scm/scm_changes_mirror/drag_controller.rb +78 -0
  538. data/plugins/scm/lib/scm/scm_commits_controller.rb +49 -0
  539. data/plugins/scm/lib/scm/scm_commits_mirror.rb +36 -0
  540. data/plugins/scm/lib/scm/scm_commits_mirror/commit.rb +26 -0
  541. data/plugins/scm/lib/scm/scm_commits_mirror/commits_node.rb +38 -0
  542. data/plugins/scm/plugin.rb +8 -0
  543. data/plugins/scm/spec/spec_helper.rb +5 -0
  544. data/plugins/scm_git/lib/scm_git.rb +543 -0
  545. data/plugins/scm_git/lib/scm_git/change.rb +137 -0
  546. data/plugins/scm_git/lib/scm_git/commit.rb +18 -0
  547. data/plugins/scm_git/lib/scm_git/config_file.rb +31 -0
  548. data/plugins/scm_git/plugin.rb +7 -0
  549. data/plugins/scm_hg/lib/scm_hg.rb +30 -0
  550. data/plugins/scm_hg/plugin.rb +7 -0
  551. data/plugins/scm_svn/LICENSE +48 -0
  552. data/plugins/scm_svn/features/add_and_commit.feature +18 -0
  553. data/plugins/scm_svn/features/checkout.feature +5 -0
  554. data/plugins/scm_svn/features/edit_and_index.feature +12 -0
  555. data/plugins/scm_svn/features/ignore_files.feature +14 -0
  556. data/plugins/scm_svn/features/merge.feature +34 -0
  557. data/plugins/scm_svn/features/resolve_conflict.feature +23 -0
  558. data/plugins/scm_svn/features/revert_and_delete.feature +21 -0
  559. data/plugins/scm_svn/features/step_definitions/branch_and_merge_steps.rb +27 -0
  560. data/plugins/scm_svn/features/step_definitions/checkout_steps.rb +25 -0
  561. data/plugins/scm_svn/features/step_definitions/edit_and_index_steps.rb +50 -0
  562. data/plugins/scm_svn/features/step_definitions/scm_svn_steps.rb +57 -0
  563. data/plugins/scm_svn/features/support/env.rb +71 -0
  564. data/plugins/scm_svn/features/switch_branches.feature +53 -0
  565. data/plugins/scm_svn/features/update.feature +16 -0
  566. data/plugins/scm_svn/lib/scm_svn.rb +445 -0
  567. data/plugins/scm_svn/lib/scm_svn/change.rb +116 -0
  568. data/plugins/scm_svn/plugin.rb +7 -0
  569. data/plugins/snippets/features/snippet_indenting.feature +87 -0
  570. data/plugins/snippets/features/snippets.feature +398 -0
  571. data/plugins/snippets/features/step_definitions/snippet_steps.rb +16 -0
  572. data/plugins/snippets/features/support/env.rb +1 -0
  573. data/plugins/snippets/lib/snippets.rb +111 -0
  574. data/plugins/snippets/lib/snippets/document_controller.rb +591 -0
  575. data/plugins/snippets/lib/snippets/explorer.rb +48 -0
  576. data/plugins/snippets/lib/snippets/tab_handler.rb +117 -0
  577. data/plugins/snippets/plugin.rb +9 -0
  578. data/plugins/splash_screen/plugin.rb +8 -0
  579. data/plugins/splash_screen/splash_screen.rb +62 -0
  580. data/plugins/strip_trailing_spaces/features/fixtures/test.txt +3 -0
  581. data/plugins/strip_trailing_spaces/features/strip_trailing_spaces.feature +34 -0
  582. data/plugins/strip_trailing_spaces/lib/strip_trailing_spaces.rb +60 -0
  583. data/plugins/strip_trailing_spaces/plugin.rb +8 -0
  584. data/plugins/syntax_check/README +6 -0
  585. data/plugins/syntax_check/features/step_definitions/syntax_check_steps.rb +11 -0
  586. data/plugins/syntax_check/features/support/env.rb +3 -0
  587. data/plugins/syntax_check/lib/syntax_check.rb +100 -0
  588. data/plugins/syntax_check/lib/syntax_check/annotation.rb +61 -0
  589. data/plugins/syntax_check/lib/syntax_check/checker.rb +47 -0
  590. data/plugins/syntax_check/lib/syntax_check/error.rb +24 -0
  591. data/plugins/syntax_check/plugin.rb +7 -0
  592. data/plugins/task_manager/lib/task_manager.rb +30 -0
  593. data/plugins/task_manager/plugin.rb +11 -0
  594. data/plugins/task_manager/views/index.html.erb +70 -0
  595. data/plugins/test_runner/lib/test_runner.rb +40 -0
  596. data/plugins/test_runner/lib/test_runner/jasmine_test_runner.rb +15 -0
  597. data/plugins/test_runner/lib/test_runner/rspec_runner.rb +20 -0
  598. data/plugins/test_runner/lib/test_runner/run_test_command.rb +63 -0
  599. data/plugins/test_runner/lib/test_runner/runnable_test_runner.rb +42 -0
  600. data/plugins/test_runner/plugin.rb +8 -0
  601. data/plugins/test_runner/spec/run_test_command_spec.rb +51 -0
  602. data/plugins/test_runner/spec/spec_helper.rb +5 -0
  603. data/plugins/textmate/features/bundle_tree.feature +23 -0
  604. data/plugins/textmate/features/step_definitions/tree_steps.rb +57 -0
  605. data/plugins/textmate/features/support/env.rb +19 -0
  606. data/plugins/textmate/features/support/test_bundle.tmbundle/Snippets/If.tmSnippet +18 -0
  607. data/plugins/textmate/features/support/test_bundle.tmbundle/Snippets/If__Else.tmSnippet +20 -0
  608. data/plugins/textmate/features/support/test_bundle.tmbundle/Snippets/Include.tmSnippet +16 -0
  609. data/plugins/textmate/features/support/test_bundle.tmbundle/Snippets/Loop.tmSnippet +18 -0
  610. data/plugins/textmate/features/support/test_bundle.tmbundle/Snippets/Unless.tmSnippet +18 -0
  611. data/plugins/textmate/features/support/test_bundle.tmbundle/Snippets/Var.tmSnippet +16 -0
  612. data/plugins/textmate/features/support/test_bundle.tmbundle/Snippets/next_If__Else.tmSnippet +20 -0
  613. data/plugins/textmate/features/support/test_bundle.tmbundle/info.plist +26 -0
  614. data/plugins/textmate/lib/textmate.rb +202 -0
  615. data/plugins/textmate/lib/textmate/bundle.rb +100 -0
  616. data/plugins/textmate/lib/textmate/commands.rb +79 -0
  617. data/plugins/textmate/lib/textmate/environment.rb +76 -0
  618. data/plugins/textmate/lib/textmate/plist.rb +80 -0
  619. data/plugins/textmate/lib/textmate/preference.rb +125 -0
  620. data/plugins/textmate/lib/textmate/snippet.rb +47 -0
  621. data/plugins/textmate/lib/textmate/tree_mirror.rb +206 -0
  622. data/plugins/textmate/plugin.rb +8 -0
  623. data/plugins/textmate/views/installed_bundles.html.erb +24 -0
  624. data/plugins/todo_list/README.md +22 -0
  625. data/plugins/todo_list/features/support/env.rb +8 -0
  626. data/plugins/todo_list/features/todo_list.feature +26 -0
  627. data/plugins/todo_list/lib/todo_list.rb +49 -0
  628. data/plugins/todo_list/lib/todo_list/file_parser.rb +58 -0
  629. data/plugins/todo_list/lib/todo_list/todo_controller.rb +99 -0
  630. data/plugins/todo_list/plugin.rb +11 -0
  631. data/plugins/todo_list/spec/fixtures/project/FIXME.file +3 -0
  632. data/plugins/todo_list/spec/fixtures/project/NOTE.ignored.file +1 -0
  633. data/plugins/todo_list/spec/fixtures/project/OPTIMIZE_colon.file +1 -0
  634. data/plugins/todo_list/spec/fixtures/project/XXX.ignored +1 -0
  635. data/plugins/todo_list/spec/fixtures/project/ignored_directory/TODO.file +2 -0
  636. data/plugins/todo_list/spec/fixtures/settings.rb +11 -0
  637. data/plugins/todo_list/spec/spec_helper.rb +6 -0
  638. data/plugins/todo_list/spec/todo_list/file_parser_spec.rb +35 -0
  639. data/plugins/todo_list/views/default.css +15 -0
  640. data/plugins/todo_list/views/index.html.erb +19 -0
  641. data/plugins/todo_list/views/redcar_small_icon.png +0 -0
  642. data/plugins/tree_view_swt/lib/tree_view_swt.rb +496 -0
  643. data/plugins/tree_view_swt/plugin.rb +9 -0
  644. data/plugins/web_bookmarks/Screenshot.png +0 -0
  645. data/plugins/web_bookmarks/features/bookmark.feature +37 -0
  646. data/plugins/web_bookmarks/features/fixtures/other.html +1 -0
  647. data/plugins/web_bookmarks/features/fixtures/sample.html +1 -0
  648. data/plugins/web_bookmarks/features/step_definitions/web_steps.rb +4 -0
  649. data/plugins/web_bookmarks/features/support/env.rb +26 -0
  650. data/plugins/web_bookmarks/lib/web_bookmarks.rb +49 -0
  651. data/plugins/web_bookmarks/lib/web_bookmarks/bookmark.rb +52 -0
  652. data/plugins/web_bookmarks/lib/web_bookmarks/commands.rb +65 -0
  653. data/plugins/web_bookmarks/lib/web_bookmarks/tree.rb +74 -0
  654. data/plugins/web_bookmarks/plugin.rb +10 -0
  655. metadata +937 -0
@@ -0,0 +1,51 @@
1
+
2
+ module Redcar
3
+ module Scm
4
+ class ScmChangesMirror
5
+ include Redcar::Tree::Mirror
6
+
7
+ def initialize(repo)
8
+ @repo = repo
9
+ end
10
+
11
+ def title
12
+ @repo.translations[:uncommited_changes]
13
+ end
14
+
15
+ def data_type
16
+ :text
17
+ end
18
+
19
+ # Root items will never change
20
+ def changed?
21
+ false
22
+ end
23
+
24
+ def drag_and_drop?
25
+ #@repo.supported_commands.include? :index
26
+ false
27
+ end
28
+
29
+ def from_data(data)
30
+ data.split('::::').map {|n| @repo.from_data(n)}.find_all {|n| not n.nil?}
31
+ end
32
+
33
+ def to_data(nodes)
34
+ nodes.find_all {|n| n.respond_to?(:to_data)}.map {|n| n.to_data}.join('::::')
35
+ end
36
+
37
+ def top
38
+ @top ||= begin
39
+ if @repo.supported_commands.include? :index
40
+ [
41
+ ScmChangesMirror::ChangesNode.new(@repo, :indexed),
42
+ ScmChangesMirror::ChangesNode.new(@repo, :unindexed)
43
+ ]
44
+ else
45
+ [ScmChangesMirror::ChangesNode.new(@repo, :all)]
46
+ end
47
+ end
48
+ end
49
+ end
50
+ end
51
+ end
@@ -0,0 +1,63 @@
1
+
2
+ module Redcar
3
+ module Scm
4
+ class ScmChangesMirror
5
+ module Change
6
+ include Redcar::Tree::Mirror::NodeMirror
7
+
8
+ #####
9
+ # NodeMirror stuff
10
+ ###
11
+ def text
12
+ "#{File.basename(path)} (#{File.dirname(path)})"
13
+ end
14
+
15
+ def tooltip_text
16
+ text
17
+ end
18
+
19
+ def icon
20
+ :file
21
+ end
22
+
23
+ def leaf?
24
+ true
25
+ end
26
+
27
+ def to_data
28
+ path
29
+ end
30
+
31
+ #####
32
+ # Change definition stuff
33
+ ###
34
+
35
+ # The status is an array of symbols indicating the status of this change
36
+ # and hence what operations can be performed on it. This is only
37
+ # consulted if the SCM supports the :index command.
38
+ #
39
+ # Possible values and their implications:
40
+ # :new - can be passed to index_add, index_ignore
41
+ # :unmerged - The file is in a conflicted state.
42
+ # Can be passed to index_save or index_delete
43
+ # :indexed - can be passed to index_revert, index_unsave
44
+ # :deleted - can be passed to index_restore, index_unsave
45
+ # :missing - can be passed to index_restore, index_delete
46
+ # :changed - can be passed to index_save, index_unsave
47
+ # :commitable - can be passed to commit!
48
+ # Intended to represent subprojects.
49
+ def status
50
+ [:new]
51
+ end
52
+
53
+ def path
54
+ ''
55
+ end
56
+
57
+ def diff
58
+ nil
59
+ end
60
+ end
61
+ end
62
+ end
63
+ end
@@ -0,0 +1,47 @@
1
+
2
+ module Redcar
3
+ module Scm
4
+ class ScmChangesMirror
5
+ class ChangesNode
6
+ include Redcar::Tree::Mirror::NodeMirror
7
+
8
+ attr_reader :change_types
9
+
10
+ def initialize(repo, change_types)
11
+ @repo = repo
12
+ @change_types = change_types
13
+ end
14
+
15
+ def text
16
+ case @change_types
17
+ when :indexed
18
+ @repo.translations[:indexed_changes]
19
+ when :unindexed
20
+ @repo.translations[:unindexed_changes]
21
+ when :all
22
+ @repo.translations[:uncommited_changes]
23
+ end
24
+ end
25
+
26
+ def icon
27
+ :directory
28
+ end
29
+
30
+ def leaf?
31
+ false
32
+ end
33
+
34
+ def children
35
+ case @change_types
36
+ when :indexed
37
+ @repo.indexed_changes
38
+ when :unindexed
39
+ @repo.unindexed_changes
40
+ when :all
41
+ @repo.uncommited_changes
42
+ end
43
+ end
44
+ end
45
+ end
46
+ end
47
+ end
@@ -0,0 +1,78 @@
1
+
2
+ module Redcar
3
+ module Scm
4
+ class ScmChangesController
5
+ class DragController
6
+ include Redcar::Tree::Controller::DragController
7
+
8
+ def initialize(tree, repo)
9
+ @tree = tree
10
+ @repo = repo
11
+ end
12
+
13
+ # Can elements in the tree be reordered by dragging and
14
+ # dropping? Shows insertion feedback in the GUI.
15
+ def reorderable?
16
+ false
17
+ end
18
+
19
+ # Called during a drag operation when the cursor hovers over other
20
+ # rows.
21
+ #
22
+ # @param nodes - the dragged nodes
23
+ # @param target - the hovered over node, or nil if the empty tree area
24
+ # @param position - one of :onto, :before, :after (always :onto unless
25
+ # reorderable?)
26
+ def can_drop?(nodes, target, position)
27
+ # We can always attempt to drag anywhere. do_drop handles sanity
28
+ # checking.
29
+ true
30
+ end
31
+
32
+ # Called when the user has dropped nodes onto another node.
33
+ #
34
+ # @param nodes - the dragged nodes
35
+ # @param target - the hovered over node, or nil if the empty tree area
36
+ # @param position - one of :onto, :before, :after (always :onto unless
37
+ # reorderable?)
38
+ def do_drop(nodes, target, position)
39
+ # Make sure we have a target, and that it is a top level item
40
+ target ||= @tree.tree_mirror.top[1]
41
+ target = type? target
42
+
43
+ nodes.find_all {|n| target != type?(n)}.each do |n|
44
+ # At this point, we've verified that we're dragging from one node
45
+ # to another, so just loop through the changes and do the first
46
+ # action that we can, which will always be the least destructive,
47
+ # ie. will only affect the index.
48
+ command = n.status.map {|s| COMMAND_MAP[s]}.flatten.find_all{|s| s != :commit}.first
49
+
50
+ if command
51
+ @repo.method(command).call(n)
52
+ end
53
+ end
54
+
55
+ Redcar.update_gui { @tree.refresh }
56
+ end
57
+
58
+ private
59
+
60
+ # Finds the top level item that this node belongs to.
61
+ def type?(node)
62
+ @tree.tree_mirror.top.each do |top|
63
+ # Make sure we check the top level items themselves too.
64
+ children = [top]
65
+
66
+ while c = children.shift
67
+ return top if c == node
68
+ children.push(*c.children)
69
+ end
70
+ end
71
+
72
+ nil
73
+ end
74
+
75
+ end
76
+ end
77
+ end
78
+ end
@@ -0,0 +1,49 @@
1
+
2
+ module Redcar
3
+ module Scm
4
+ class ScmCommitsController
5
+ include Redcar::Tree::Controller
6
+
7
+ def initialize(repo)
8
+ @repo = repo
9
+ end
10
+
11
+ def activated(tree, node)
12
+ if node.respond_to?(:log)
13
+ log = node.log
14
+ if log
15
+ # TODO: if we can provide a text log of ourselves, then display it
16
+ end
17
+ end
18
+ end
19
+
20
+ def right_click(tree, node)
21
+ repo = @repo
22
+
23
+ # In lieu of actually supporting multi-select, make it obvious
24
+ # that we don't.
25
+ if tree.selection.length > 1
26
+ tree.select(node)
27
+ end
28
+
29
+ menu = Menu::Builder.build do
30
+ if node.is_a?(Scm::ScmCommitsMirror::CommitsNode)
31
+ item(repo.translations[:push]) {
32
+ if node.branch
33
+ refresh = node.repo.push! node.branch
34
+ else
35
+ refresh = node.repo.push!
36
+ end
37
+ tree.refresh if refresh
38
+ }
39
+
40
+ separator
41
+ end
42
+ item("Refresh", :priority => :last) { repo.refresh; tree.refresh }
43
+ end
44
+
45
+ Application::Dialog.popup_menu(menu, :pointer)
46
+ end
47
+ end
48
+ end
49
+ end
@@ -0,0 +1,36 @@
1
+
2
+ module Redcar
3
+ module Scm
4
+ class ScmCommitsMirror
5
+ include Redcar::Tree::Mirror
6
+
7
+ def initialize(repo)
8
+ @repo = repo
9
+ end
10
+
11
+ def title
12
+ @repo.translations[:unpushed_commits]
13
+ end
14
+
15
+ def data_type
16
+ :text
17
+ end
18
+
19
+ def changed?
20
+ @repo.push_targets.count > 0
21
+ end
22
+
23
+ def drag_and_drop?
24
+ false
25
+ end
26
+
27
+ def top
28
+ if @repo.push_targets.count > 0
29
+ @repo.push_targets
30
+ else
31
+ @top ||= [ScmCommitsMirror::CommitsNode.new(@repo)]
32
+ end
33
+ end
34
+ end
35
+ end
36
+ end
@@ -0,0 +1,26 @@
1
+
2
+ module Redcar
3
+ module Scm
4
+ class ScmCommitsMirror
5
+ module Commit
6
+ include Redcar::Tree::Mirror::NodeMirror
7
+
8
+ def text
9
+ raise "not implemented"
10
+ end
11
+
12
+ def icon
13
+ :"notebook--arrow"
14
+ end
15
+
16
+ def leaf?
17
+ true
18
+ end
19
+
20
+ def log
21
+ nil
22
+ end
23
+ end
24
+ end
25
+ end
26
+ end
@@ -0,0 +1,38 @@
1
+
2
+ module Redcar
3
+ module Scm
4
+ class ScmCommitsMirror
5
+ class CommitsNode
6
+ include Redcar::Tree::Mirror::NodeMirror
7
+
8
+ attr_reader :repo, :branch
9
+
10
+ def initialize(repo, branch=nil, text=nil)
11
+ @repo = repo
12
+ @branch = branch
13
+ @text = text || branch || @repo.translations[:unpushed_commits]
14
+ end
15
+
16
+ def text
17
+ @text
18
+ end
19
+
20
+ def icon
21
+ :"folder--arrow"
22
+ end
23
+
24
+ def leaf?
25
+ false
26
+ end
27
+
28
+ def children
29
+ if branch
30
+ @repo.unpushed_commits(branch)
31
+ else
32
+ @repo.unpushed_commits
33
+ end
34
+ end
35
+ end
36
+ end
37
+ end
38
+ end
@@ -0,0 +1,8 @@
1
+ Plugin.define do
2
+ name "scm"
3
+ version "0.1"
4
+ file "lib", "scm"
5
+ object "Redcar::Scm::Manager"
6
+ dependencies "project", ">=1.1",
7
+ "application", ">=1.1"
8
+ end
@@ -0,0 +1,5 @@
1
+ $:.push File.join(File.dirname(__FILE__), '..', '..', '..', 'lib')
2
+
3
+ require 'redcar'
4
+ Redcar.environment = :test
5
+ Redcar.load_unthreaded
@@ -0,0 +1,543 @@
1
+
2
+ # Don't error if we don't have git installed
3
+ begin
4
+ gem "git"
5
+ require 'git'
6
+ rescue
7
+ end
8
+
9
+ require 'scm_git/config_file'
10
+ require 'scm_git/change'
11
+ require 'scm_git/commit'
12
+
13
+ module Redcar
14
+ module Scm
15
+ module Git
16
+ class Manager
17
+ include Redcar::Scm::Model
18
+
19
+ #######
20
+ ## SCM plugin hooks
21
+ #####
22
+ def self.scm_module
23
+ Redcar::Scm::Git::Manager
24
+ end
25
+
26
+ def self.supported?
27
+ begin
28
+ if ::Git::Lib.new.meets_required_version?
29
+ return true
30
+ end
31
+ rescue
32
+ puts $!.class.name + ": " + $!.message
33
+ end
34
+ false
35
+ end
36
+
37
+ # Whether to print debugging messages. Default to whatever scm is using.
38
+ def self.debug
39
+ Redcar::Scm::Manager.debug
40
+ end
41
+
42
+ def debug
43
+ Redcar::Scm::Git::Manager.debug
44
+ end
45
+
46
+ def from_data(data)
47
+ data = data.split(':')
48
+ file = ::Git::Status::StatusFile.new(nil, {
49
+ :type_raw => data[0],
50
+ :path => data[1],
51
+ })
52
+ repo = Scm::Git::Manager.new.load(data[2])
53
+ Scm::Git::Change.new(file, repo, :file, data[4] == "true")
54
+ end
55
+
56
+ #######
57
+ ## General stuff
58
+ #####
59
+
60
+ def inspect
61
+ if @repo
62
+ %Q{#<Scm::Git::Manager "#{@repo.dir.path}">}
63
+ else
64
+ %Q{#<Scm::Git::Manager>}
65
+ end
66
+ end
67
+
68
+ def cache
69
+ @cache ||= begin
70
+ c = ::BlockCache.new
71
+
72
+ c.add('branches', 15) do
73
+ ref_path = File.join(@repo.dir.path, '.git', 'refs', 'heads');
74
+ head = File.read(File.join(@repo.dir.path, '.git', 'HEAD')).strip
75
+ branch_globs = Dir.glob(File.join(ref_path, '*'))
76
+ branches = []
77
+
78
+ while branch = branch_globs.shift
79
+ if File.directory?(branch)
80
+ branch_globs.push(*Dir.glob(File.join(branch, '*')))
81
+ else
82
+ branches.push branch
83
+ end
84
+ end
85
+
86
+ branches.map {|b|
87
+ b[ref_path.length + 1, b.length - ref_path.length - 1]
88
+ }.map {|b|
89
+ [b, ('ref: refs/heads/' + b == head)]
90
+ }
91
+ end
92
+
93
+ c.add('all branches', 15) do
94
+ raise "not implemented"
95
+ end
96
+
97
+ c.add('status', 5) { @repo.status }
98
+
99
+ c.add('full status', 5) { @repo.lib.full_status }
100
+
101
+ c.add('config', 30) do
102
+ config = Scm::Git::ConfigFile.parse(File.join(@repo.dir.path, '.git', 'config'))
103
+ conf = {}
104
+
105
+ config.each do |key, values|
106
+ prefix = key.sub(/^([a-z]+) "(.+)"$/i, '\1.\2')
107
+
108
+ values.each do |key2, value|
109
+ conf[prefix + '.' + key2] = value
110
+ end
111
+ end
112
+
113
+ conf
114
+ end
115
+
116
+ c.add('log', 60*60) do |start, finish|
117
+ @repo.lib.log_commits(:between => [start, finish]).reverse.map do |c|
118
+ @repo.gcommit(c)
119
+ end
120
+ end
121
+
122
+ c.add('submodules', 60*60) do
123
+ begin
124
+ modules = Scm::Git::ConfigFile.parse(File.join(@repo.dir.path, '.gitmodules'))
125
+
126
+ mods = {}
127
+ modules.each {|k, v|
128
+ path = File.join(@repo.dir.path, v['path'])
129
+ if File.exist?(File.join(path, '.git'))
130
+ mod = Scm::Git::Manager.new
131
+ mod.load(path)
132
+ mods[v['path']] = mod
133
+ end
134
+ }
135
+ mods
136
+ rescue Errno::ENOENT => e
137
+ {}
138
+ end
139
+ end
140
+
141
+ c
142
+ end
143
+ end
144
+
145
+ #######
146
+ ## SCM hooks
147
+ #####
148
+ attr_reader :repo, :path
149
+
150
+ def repository_type
151
+ "git"
152
+ end
153
+
154
+ def repository?(path)
155
+ return true if repository_path(path)
156
+ end
157
+
158
+ def repository_path(path)
159
+ if File.exist?(File.join(path, %w{.git}))
160
+ return path
161
+ else
162
+ unless path == File.dirname(path)
163
+ repository_path(File.dirname(path))
164
+ end
165
+ end
166
+ end
167
+
168
+ def supported_commands
169
+ [:init, :commit, :index, :switch_branch, :push]
170
+ end
171
+
172
+ def refresh
173
+ cache.refresh
174
+ end
175
+
176
+ def init!(path)
177
+ # Be nice and don't blow away another repository accidentally.
178
+ return nil if File.exist?(File.join(path, %w{.git}))
179
+
180
+ ::Git.init(path)
181
+ end
182
+
183
+ def load(path)
184
+ raise "Already loaded repository" if @repo
185
+ @repo = ::Git.open(repository_path(path))
186
+ @path = path
187
+ cache.refresh
188
+ self
189
+ end
190
+
191
+ # Not used by scm, but we do use this internally.
192
+ def uncommited_changes
193
+ indexed_changes + unindexed_changes
194
+ end
195
+
196
+ # @return [Array<Redcar::Scm::ScmChangeMirror::Change>]
197
+ def indexed_changes
198
+ prepare_changes(true)
199
+ end
200
+
201
+ # @return [Array<Redcar::Scm::ScmChangeMirror::Change>]
202
+ def unindexed_changes
203
+ prepare_changes(false)
204
+ end
205
+
206
+ private
207
+
208
+ CHANGE_PRIORITIES = {:sub_project => 0, :directory => 1, :file => 2}
209
+
210
+ def prepare_changes(indexed)
211
+ changes = cache['submodules'].find_all do |k,s|
212
+ s.uncommited_changes.length > 0
213
+ end.map do |k,s|
214
+ file = ::Git::Status::StatusFile.new(nil, {
215
+ :path => k,
216
+ :type => "M",
217
+ :type_raw => "MM"
218
+ })
219
+ [k, file]
220
+ end
221
+
222
+ changes += cache['status'].all_changes.find_all {|c| not changes.find{|d| c[0] == d[0]}}
223
+
224
+ # f[0] is the path, and f[1] is the actual StatusFile
225
+ changes.find_all {|c| valid_change?(c[1].type_raw, indexed)}.map do |f|
226
+ full_path = File.join(@repo.dir.path, f[0])
227
+ type = (((not File.exist?(full_path)) or File.file?(full_path)) ? :file : :directory)
228
+
229
+ if type == :directory and cache['submodules'][f[0]]
230
+ type = :sub_project
231
+ end
232
+
233
+ if type == :sub_project
234
+ submodule = cache['submodules'][f[0]]
235
+ Scm::Git::Change.new(
236
+ f[1], self, type, indexed,
237
+ indexed ? submodule.indexed_changes : submodule.unindexed_changes
238
+ )
239
+ else
240
+ Scm::Git::Change.new(f[1], self, type, indexed)
241
+ end
242
+ end.sort_by {|m| m.path}.sort_by {|m| CHANGE_PRIORITIES[m.type]}
243
+ end
244
+
245
+ def valid_change?(type, indexed)
246
+ if (not indexed) and type[1,1] != " "
247
+ true
248
+ elsif indexed
249
+ not ([" ", "?", "U"].include? type[0,1])
250
+ else
251
+ false
252
+ end
253
+ end
254
+
255
+ public
256
+
257
+ # REQUIRED for :index. Adds a new file to the index.
258
+ def index_add(change)
259
+ # delegate to the proper submodule
260
+ if self != change.repo
261
+ return change.repo.index_add(change)
262
+ end
263
+
264
+ @repo.add(change.path)
265
+ cache.refresh
266
+ true # refresh trees
267
+ end
268
+
269
+ # REQUIRED for :index. Ignores a new file so it won't show in changes.
270
+ def index_ignore(change)
271
+ # delegate to the proper submodule
272
+ if self != change.repo
273
+ return change.repo.index_ignore(change)
274
+ end
275
+
276
+ add_to_gitignore(change.path)
277
+
278
+ cache.refresh
279
+ true # refresh trees
280
+ end
281
+
282
+ # REQUIRED for :index. Ignores all files with a certain extension so they
283
+ # won't show in changes.
284
+ def index_ignore_all(extension, change)
285
+ # delegate to the proper submodule
286
+ if self != change.repo
287
+ return change.repo.index_ignore(change)
288
+ end
289
+
290
+ add_to_gitignore("*." + extension)
291
+
292
+ cache.refresh
293
+ true # refresh trees
294
+ end
295
+
296
+ private
297
+
298
+ def add_to_gitignore(line)
299
+ gitignore = File.join(repo.dir.path, '.gitignore')
300
+ if not File.exist? gitignore
301
+ File.new(gitignore, "w").close
302
+ end
303
+ gitignore = File.new(gitignore, 'r+')
304
+
305
+ # Make sure there's data in the file, otherwise we can't seek.
306
+ if File.size(gitignore) > 0
307
+ # Check the last byte of the file for a newline
308
+ gitignore.seek(-1, IO::SEEK_END)
309
+ if gitignore.sysread(1) != "\n"
310
+ gitignore.syswrite("\n")
311
+ end
312
+ end
313
+
314
+ gitignore.syswrite(line + "\n")
315
+ gitignore.close
316
+ end
317
+
318
+ public
319
+
320
+ # REQUIRED for :index. Reverts a file to its last commited state.
321
+ def index_revert(change)
322
+ # delegate to the proper submodule
323
+ if self != change.repo
324
+ return change.repo.index_revert(change)
325
+ end
326
+
327
+ if change.git_status[0,1] != ' '
328
+ # Git requires us to unindex any changes before we can revert them.
329
+ index_unsave(change)
330
+ end
331
+ if change.git_status[0,1] == 'A' or change.git_status[0,1] == '?'
332
+ # if this was a new file, then revert it by deleting it
333
+ File.unlink(File.join(@repo.dir.path, change.path))
334
+ else
335
+ # otherwise checkout the old version
336
+ @repo.checkout_file('HEAD', change.path)
337
+ end
338
+ cache.refresh
339
+ true # refresh trees
340
+ end
341
+
342
+ # REQUIRED for :index. Reverts a file in the index back to it's
343
+ # last commited state, but leaves the file intact.
344
+ def index_unsave(change)
345
+ # delegate to the proper submodule
346
+ if self != change.repo
347
+ return change.repo.index_unsave(change)
348
+ end
349
+
350
+ @repo.reset('HEAD', :file => change.path)
351
+
352
+ cache.refresh
353
+ true # refresh trees
354
+ end
355
+
356
+ # REQUIRED for :index. Saves changes made to a file in the index.
357
+ def index_save(change)
358
+ # delegate to the proper submodule
359
+ if self != change.repo
360
+ return change.repo.index_save(change)
361
+ end
362
+
363
+ @repo.add(change.path)
364
+ cache.refresh
365
+ true # refresh trees
366
+ end
367
+
368
+ # REQUIRED for :index. Restores a file to the last known state of
369
+ # the file. This may be from the index, or the last commit.
370
+ def index_restore(change)
371
+ # delegate to the proper submodule
372
+ if self != change.repo
373
+ return change.repo.index_restore(change)
374
+ end
375
+
376
+ @repo.checkout_file('HEAD', change.path)
377
+ cache.refresh
378
+ true # refresh trees
379
+ end
380
+
381
+ # REQUIRED for :index. Marks a file as deleted in the index.
382
+ def index_delete(change)
383
+ # delegate to the proper submodule
384
+ if self != change.repo
385
+ return change.repo.index_delete(change)
386
+ end
387
+
388
+ if change.git_status[1,1] == '?'
389
+ FileUtils.rm(File.join(@repo.dir.path, change.path))
390
+ else
391
+ @repo.remove(change.path)
392
+ end
393
+ cache.refresh
394
+ true # refresh trees
395
+ end
396
+
397
+ # REQUIRED for :commit. Commits the currently indexed changes
398
+ # in the subproject.
399
+ #
400
+ # @param change Required for :commitable changes. Ignore if
401
+ # you don't provide these.
402
+ def commit!(message, change=nil)
403
+ if change
404
+ # delegate to the proper submodule
405
+ if self != change.repo
406
+ return change.repo.commit!(change)
407
+ end
408
+
409
+ # redelegate the commit to the subproject to handle
410
+ cache['submodules'][change.path].commit!(message)
411
+ else
412
+ @repo.commit(message)
413
+ cache.refresh
414
+ end
415
+ end
416
+
417
+ # REQUIRED for :commit. Gets a default commit message for the
418
+ # currently indexed changes.
419
+ #
420
+ # @param change Required for :commitable changes. Ignore if
421
+ # you don't provide these.
422
+ def commit_message(change=nil)
423
+ if change
424
+ # delegate to the proper submodule
425
+ if self != change.repo
426
+ return change.repo.commit!(change)
427
+ end
428
+
429
+ # redelegate the call to the subproject to handle
430
+ cache['submodules'][change.path].commit_message
431
+ else
432
+ "\n\n" + cache['full status']
433
+ end
434
+ end
435
+
436
+ # REQUIRED for :switch_branch. Returns an array of branch names.
437
+ #
438
+ # @return [Array<String>]
439
+ def branches
440
+ branch_list = cache['branches'].map {|b| b[0]}
441
+ branch_list + ['New...']
442
+ end
443
+
444
+ # REQUIRED for :switch_branch. Returns the name of the current branch.
445
+ def current_branch
446
+ b = cache['branches'].select { |b| b[1] }.first
447
+
448
+ b.nil? ? "" : b[0]
449
+ end
450
+
451
+ # REQUIRED for :switch_branch. Switches to the named branch.
452
+ def switch!(branch)
453
+ if branch == 'New...'
454
+ result = Application::Dialog.input("New Branch Name",
455
+ "Please enter a new branch name","")
456
+ if value = result[:value] and value != ""
457
+ newbranch = value
458
+ begin
459
+ @repo.branch(newbranch).checkout
460
+ rescue Object => e
461
+ Application::Dialog.message_box(e.to_s)
462
+ e.backtrace.each {|line| p line}
463
+ end
464
+ end
465
+ else
466
+ @repo.checkout(branch)
467
+ end
468
+ cache.refresh
469
+ end
470
+
471
+ def push_targets
472
+ targets = branches.map {|b| Scm::ScmCommitsMirror::CommitsNode.new(self, b)}
473
+ modules = cache['submodules'].clone
474
+
475
+ while m = modules.shift
476
+ path = m[0]
477
+ m[1].cache['submodules'].each {|k,v| modules[File.join(path, k)] = v}
478
+
479
+ targets += m[1].branches.map {|b| Scm::ScmCommitsMirror::CommitsNode.new(m[1], b, "#{b} (#{path})")}
480
+ end
481
+
482
+ # only return targets we can actually push to
483
+ targets.find_all do |t|
484
+ remote = t.repo.cache['config']['branch.' + t.branch + '.remote']
485
+
486
+ if remote
487
+ push_target = t.repo.cache['config']['branch.' + t.branch + '.push'] || t.repo.cache['config']['branch.' + t.branch + '.merge']
488
+
489
+ push_target.gsub!(/^refs\/heads\//, '')
490
+ r_ref_file = File.join(t.repo.repo.dir.path, '.git', 'refs', 'remotes', remote, push_target)
491
+
492
+ File.exist?(r_ref_file)
493
+ end
494
+ end
495
+ end
496
+
497
+ # REQUIRED for :push. Returns an array of unpushed changesets.
498
+ #
499
+ # @return [Array<Redcar::Scm::ScmMirror::Commit>]
500
+ def unpushed_commits(branch=current_branch)
501
+ # Hit `git config -l` to figure out which remote/ref this branch uses for pushing.
502
+ remote = cache['config']['branch.' + branch + '.remote']
503
+ push_target = cache['config']['branch.' + branch + '.push'] || cache['config']['branch.' + branch + '.merge']
504
+
505
+ # We don't have a remote setup for pushes, so we can't automatically push
506
+ return [] if remote.nil?
507
+
508
+ # Hit .git/remotes/$REMOTE/$REF to find out which revision that ref is at.
509
+ push_target.gsub!(/^refs\/heads\//, '')
510
+ r_ref_file = File.join(@repo.dir.path, '.git', 'refs', 'remotes', remote, push_target)
511
+ return [] if not File.exist?(r_ref_file)
512
+ r_ref = File.read(r_ref_file).strip
513
+
514
+ # Hit .git/refs/heads/$BRANCH to figure out which revision we're at locally.
515
+ l_ref = File.read(File.join(@repo.dir.path, '.git', 'refs', 'heads', branch)).strip
516
+
517
+ # Hit `git log $R_REV..$L_REV` to get a list of commits that are unpushed.
518
+ if r_ref != l_ref
519
+ cache['log', r_ref, l_ref].map {|c| Scm::Git::Commit.new(c)}
520
+ else
521
+ []
522
+ end
523
+ end
524
+
525
+ # REQUIRED for :push. Pushes all current changesets to the remote
526
+ # repository.
527
+ def push!(branch=current_branch)
528
+ remote = cache['config']['branch.' + branch + '.remote']
529
+ push_target = cache['config']['branch.' + branch + '.push'] || cache['config']['branch.' + branch + '.merge']
530
+
531
+ # don't block while trying to push changes
532
+ Thread.new do
533
+ repo.push(remote, '+refs/heads/' + branch + ':' + push_target)
534
+
535
+ Redcar.update_gui { cache.refresh; Scm::Manager.refresh_trees }
536
+ end
537
+
538
+ false # don't refresh trees
539
+ end
540
+ end
541
+ end
542
+ end
543
+ end