ohloh_scm 2.5.1 → 3.0.1

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 (657) hide show
  1. checksums.yaml +5 -5
  2. data/{bin → .bin}/accept_svn_ssl_certificate +0 -0
  3. data/.bin/check_scm_version +28 -0
  4. data/.bin/run-test +3 -0
  5. data/.bin/run-tests +3 -0
  6. data/{bin → .bin}/string_encoder +0 -0
  7. data/.git_hooks/pre-commit +20 -0
  8. data/.gitignore +1 -4
  9. data/.rubocop.yml +13 -0
  10. data/.ruby-version +1 -2
  11. data/.travis.yml +3 -2
  12. data/Dockerfile +8 -4
  13. data/Gemfile +14 -0
  14. data/Gemfile.lock +54 -0
  15. data/{COPYING → LICENSE.txt} +0 -0
  16. data/README.md +52 -116
  17. data/Rakefile +7 -29
  18. data/lib/ohloh_scm.rb +26 -32
  19. data/lib/ohloh_scm/activity.rb +38 -0
  20. data/lib/ohloh_scm/bzr.rb +12 -0
  21. data/lib/ohloh_scm/bzr/activity.rb +191 -0
  22. data/lib/ohloh_scm/bzr/scm.rb +24 -0
  23. data/lib/ohloh_scm/bzr/status.rb +8 -0
  24. data/lib/ohloh_scm/bzr/validation.rb +18 -0
  25. data/lib/ohloh_scm/commit.rb +44 -41
  26. data/lib/ohloh_scm/core.rb +22 -0
  27. data/lib/ohloh_scm/cvs.rb +11 -0
  28. data/lib/ohloh_scm/cvs/activity.rb +149 -0
  29. data/lib/ohloh_scm/cvs/scm.rb +149 -0
  30. data/lib/ohloh_scm/cvs/status.rb +14 -0
  31. data/lib/ohloh_scm/cvs/validation.rb +106 -0
  32. data/lib/ohloh_scm/data/git_ignore_list.rb +29 -0
  33. data/lib/ohloh_scm/diff.rb +42 -39
  34. data/lib/ohloh_scm/factory.rb +11 -0
  35. data/lib/ohloh_scm/git.rb +11 -0
  36. data/lib/ohloh_scm/git/activity.rb +317 -0
  37. data/lib/ohloh_scm/git/scm.rb +137 -0
  38. data/lib/ohloh_scm/git/status.rb +13 -0
  39. data/lib/ohloh_scm/git/validation.rb +18 -0
  40. data/lib/ohloh_scm/git_svn.rb +11 -0
  41. data/lib/ohloh_scm/git_svn/activity.rb +84 -0
  42. data/lib/ohloh_scm/git_svn/scm.rb +91 -0
  43. data/lib/ohloh_scm/git_svn/status.rb +8 -0
  44. data/lib/ohloh_scm/git_svn/validation.rb +8 -0
  45. data/lib/ohloh_scm/hg.rb +12 -0
  46. data/lib/ohloh_scm/hg/activity.rb +188 -0
  47. data/lib/ohloh_scm/hg/scm.rb +51 -0
  48. data/lib/ohloh_scm/hg/status.rb +8 -0
  49. data/lib/ohloh_scm/hg/validation.rb +18 -0
  50. data/lib/ohloh_scm/parser.rb +30 -0
  51. data/lib/ohloh_scm/parser/array_writer.rb +15 -0
  52. data/lib/ohloh_scm/parser/branch_number.rb +63 -0
  53. data/lib/ohloh_scm/{parsers → parser}/bzr_xml_parser.rb +65 -55
  54. data/lib/ohloh_scm/parser/cvs_parser.rb +161 -0
  55. data/lib/ohloh_scm/parser/git_parser.rb +128 -0
  56. data/lib/ohloh_scm/parser/hg_parser.rb +78 -0
  57. data/lib/ohloh_scm/{parsers → parser}/hg_style +0 -0
  58. data/lib/ohloh_scm/{parsers → parser}/hg_verbose_style +0 -0
  59. data/lib/ohloh_scm/parser/svn_parser.rb +83 -0
  60. data/lib/ohloh_scm/py_bridge.rb +9 -0
  61. data/lib/ohloh_scm/py_bridge/bzr_client.rb +28 -0
  62. data/lib/ohloh_scm/{adapters/bzrlib/bzrlib_pipe_server.py → py_bridge/bzr_server.py} +1 -1
  63. data/lib/ohloh_scm/py_bridge/hg_client.rb +30 -0
  64. data/lib/ohloh_scm/{adapters/hglib/server.py → py_bridge/hg_server.py} +0 -0
  65. data/lib/ohloh_scm/py_bridge/py_client.rb +45 -0
  66. data/lib/ohloh_scm/scm.rb +26 -0
  67. data/lib/ohloh_scm/status.rb +24 -0
  68. data/lib/ohloh_scm/string_extensions.rb +11 -0
  69. data/lib/ohloh_scm/svn.rb +11 -0
  70. data/lib/ohloh_scm/svn/activity.rb +95 -0
  71. data/lib/ohloh_scm/svn/scm.rb +95 -0
  72. data/lib/ohloh_scm/svn/status.rb +8 -0
  73. data/lib/ohloh_scm/svn/validation.rb +56 -0
  74. data/lib/ohloh_scm/system.rb +44 -0
  75. data/lib/ohloh_scm/validation.rb +83 -0
  76. data/lib/ohloh_scm/version.rb +8 -1
  77. data/ohloh_scm.gemspec +18 -15
  78. data/spec/.rubocop.yml +22 -0
  79. data/spec/benchmarks/hg_bzr_bash_vs_py_api.rb +39 -0
  80. data/spec/benchmarks/process_spawn_benchmark.rb +133 -0
  81. data/spec/helpers/assert_scm_attr_helper.rb +31 -0
  82. data/spec/helpers/commit_tokens_helper.rb +26 -0
  83. data/spec/helpers/generic_helper.rb +5 -0
  84. data/spec/helpers/repository_helper.rb +36 -0
  85. data/spec/helpers/system_helper.rb +25 -0
  86. data/spec/ohloh_scm/bzr/activity_spec.rb +460 -0
  87. data/spec/ohloh_scm/bzr/scm_spec.rb +17 -0
  88. data/spec/ohloh_scm/bzr/validation_spec.rb +37 -0
  89. data/spec/ohloh_scm/cvs/activity_spec.rb +93 -0
  90. data/spec/ohloh_scm/cvs/scm_spec.rb +112 -0
  91. data/spec/ohloh_scm/cvs/validation_spec.rb +78 -0
  92. data/spec/ohloh_scm/factory_spec.rb +16 -0
  93. data/spec/ohloh_scm/git/activity_spec.rb +402 -0
  94. data/spec/ohloh_scm/git/scm_spec.rb +57 -0
  95. data/spec/ohloh_scm/git/status_spec.rb +11 -0
  96. data/spec/ohloh_scm/git/validation_spec.rb +57 -0
  97. data/spec/ohloh_scm/git_svn/activity_spec.rb +89 -0
  98. data/spec/ohloh_scm/git_svn/scm_spec.rb +22 -0
  99. data/spec/ohloh_scm/hg/activity_spec.rb +323 -0
  100. data/spec/ohloh_scm/hg/scm_spec.rb +23 -0
  101. data/spec/ohloh_scm/hg/status_spec.rb +12 -0
  102. data/spec/ohloh_scm/hg/validation_spec.rb +32 -0
  103. data/spec/ohloh_scm/parser/array_writer_spec.rb +29 -0
  104. data/spec/ohloh_scm/parser/branch_number_spec.rb +126 -0
  105. data/spec/ohloh_scm/parser/cvs_parser_spec.rb +77 -0
  106. data/spec/ohloh_scm/parser/git_parser_spec.rb +102 -0
  107. data/spec/ohloh_scm/parser/hg_parser_spec.rb +194 -0
  108. data/spec/ohloh_scm/svn/activity_spec.rb +55 -0
  109. data/spec/ohloh_scm/svn/scm_spec.rb +75 -0
  110. data/spec/ohloh_scm/svn/validation_spec.rb +89 -0
  111. data/spec/ohloh_scm/svn_parser_spec.rb +146 -0
  112. data/spec/ohloh_scm/system_spec.rb +32 -0
  113. data/spec/ohloh_scm/version_spec.rb +9 -0
  114. data/{test/data → spec/raw_fixtures}/basic.rlog +0 -0
  115. data/{test/data → spec/raw_fixtures}/file_created_on_branch.rlog +0 -0
  116. data/{test/data → spec/raw_fixtures}/invalid-utf-word +0 -0
  117. data/{test/data → spec/raw_fixtures}/multiple_revisions.rlog +0 -0
  118. data/{test/data → spec/raw_fixtures}/sample-content +0 -0
  119. data/{test/data → spec/raw_fixtures}/simple.ohlog +1 -1
  120. data/{test/data → spec/raw_fixtures}/simple.svn_log +0 -0
  121. data/{test/data → spec/raw_fixtures}/simultaneous_checkins.rlog +0 -0
  122. data/{test/data → spec/raw_fixtures}/simultaneous_checkins_2.rlog +0 -0
  123. data/spec/scm_fixtures/bzr.tgz +0 -0
  124. data/{test/repositories → spec/scm_fixtures}/bzr_colon.tgz +0 -0
  125. data/spec/scm_fixtures/bzr_large.tgz +0 -0
  126. data/spec/scm_fixtures/bzr_with_authors.tgz +0 -0
  127. data/spec/scm_fixtures/bzr_with_branch.tgz +0 -0
  128. data/{test/repositories → spec/scm_fixtures}/bzr_with_invalid_encoding.tgz +0 -0
  129. data/spec/scm_fixtures/bzr_with_nested_branches.tgz +0 -0
  130. data/spec/scm_fixtures/bzr_with_subdirectories.tgz +0 -0
  131. data/{test/repositories → spec/scm_fixtures}/cvs.tgz +0 -0
  132. data/{test/repositories → spec/scm_fixtures}/git.tgz +0 -0
  133. data/{test/repositories → spec/scm_fixtures}/git_dupe_delete.tgz +0 -0
  134. data/{test/repositories → spec/scm_fixtures}/git_svn.tgz +0 -0
  135. data/{test/repositories → spec/scm_fixtures}/git_walk.tgz +0 -0
  136. data/{test/repositories → spec/scm_fixtures}/git_with_invalid_encoding.tgz +0 -0
  137. data/{test/repositories → spec/scm_fixtures}/git_with_master_tag.tgz +0 -0
  138. data/{test/repositories → spec/scm_fixtures}/git_with_multiple_branch.tgz +0 -0
  139. data/spec/scm_fixtures/git_with_mv.tgz +0 -0
  140. data/{test/repositories → spec/scm_fixtures}/git_with_null_merge.tgz +0 -0
  141. data/spec/scm_fixtures/git_with_submodules.tgz +0 -0
  142. data/{test/repositories → spec/scm_fixtures}/hg.tgz +0 -0
  143. data/{test/repositories → spec/scm_fixtures}/hg_dupe_delete.tgz +0 -0
  144. data/spec/scm_fixtures/hg_large.tgz +0 -0
  145. data/{test/repositories → spec/scm_fixtures}/hg_walk.tgz +0 -0
  146. data/{test/repositories → spec/scm_fixtures}/hg_with_invalid_encoding.tgz +0 -0
  147. data/spec/scm_fixtures/svn.tgz +0 -0
  148. data/spec/scm_fixtures/svn_subdir.tgz +0 -0
  149. data/spec/spec_helper.rb +32 -0
  150. data/spec/string_encoder_spec.rb +32 -0
  151. metadata +224 -1052
  152. data/bin/ohlog +0 -152
  153. data/lib/ohloh_scm/adapters/abstract/misc.rb +0 -12
  154. data/lib/ohloh_scm/adapters/abstract/sha1.rb +0 -48
  155. data/lib/ohloh_scm/adapters/abstract/system.rb +0 -60
  156. data/lib/ohloh_scm/adapters/abstract/validation.rb +0 -77
  157. data/lib/ohloh_scm/adapters/abstract_adapter.rb +0 -32
  158. data/lib/ohloh_scm/adapters/bzr/cat_file.rb +0 -25
  159. data/lib/ohloh_scm/adapters/bzr/commits.rb +0 -100
  160. data/lib/ohloh_scm/adapters/bzr/head.rb +0 -19
  161. data/lib/ohloh_scm/adapters/bzr/misc.rb +0 -61
  162. data/lib/ohloh_scm/adapters/bzr/pull.rb +0 -22
  163. data/lib/ohloh_scm/adapters/bzr/push.rb +0 -51
  164. data/lib/ohloh_scm/adapters/bzr/validation.rb +0 -16
  165. data/lib/ohloh_scm/adapters/bzr_adapter.rb +0 -15
  166. data/lib/ohloh_scm/adapters/bzrlib/bzrlib_pipe_client.rb +0 -71
  167. data/lib/ohloh_scm/adapters/bzrlib/cat_file.rb +0 -9
  168. data/lib/ohloh_scm/adapters/bzrlib/head.rb +0 -9
  169. data/lib/ohloh_scm/adapters/bzrlib_adapter.rb +0 -25
  170. data/lib/ohloh_scm/adapters/cvs/commits.rb +0 -97
  171. data/lib/ohloh_scm/adapters/cvs/misc.rb +0 -212
  172. data/lib/ohloh_scm/adapters/cvs/validation.rb +0 -77
  173. data/lib/ohloh_scm/adapters/cvs_adapter.rb +0 -18
  174. data/lib/ohloh_scm/adapters/factory.rb +0 -38
  175. data/lib/ohloh_scm/adapters/git/cat_file.rb +0 -16
  176. data/lib/ohloh_scm/adapters/git/commit_all.rb +0 -141
  177. data/lib/ohloh_scm/adapters/git/commits.rb +0 -122
  178. data/lib/ohloh_scm/adapters/git/head.rb +0 -21
  179. data/lib/ohloh_scm/adapters/git/misc.rb +0 -107
  180. data/lib/ohloh_scm/adapters/git/patch.rb +0 -9
  181. data/lib/ohloh_scm/adapters/git/pull.rb +0 -124
  182. data/lib/ohloh_scm/adapters/git/push.rb +0 -39
  183. data/lib/ohloh_scm/adapters/git/token.rb +0 -53
  184. data/lib/ohloh_scm/adapters/git/validation.rb +0 -50
  185. data/lib/ohloh_scm/adapters/git_adapter.rb +0 -18
  186. data/lib/ohloh_scm/adapters/git_svn/cat_file.rb +0 -22
  187. data/lib/ohloh_scm/adapters/git_svn/commits.rb +0 -57
  188. data/lib/ohloh_scm/adapters/git_svn/head.rb +0 -9
  189. data/lib/ohloh_scm/adapters/git_svn/misc.rb +0 -24
  190. data/lib/ohloh_scm/adapters/git_svn/pull.rb +0 -80
  191. data/lib/ohloh_scm/adapters/git_svn_adapter.rb +0 -13
  192. data/lib/ohloh_scm/adapters/hg/cat_file.rb +0 -28
  193. data/lib/ohloh_scm/adapters/hg/commits.rb +0 -112
  194. data/lib/ohloh_scm/adapters/hg/head.rb +0 -29
  195. data/lib/ohloh_scm/adapters/hg/misc.rb +0 -40
  196. data/lib/ohloh_scm/adapters/hg/patch.rb +0 -9
  197. data/lib/ohloh_scm/adapters/hg/pull.rb +0 -23
  198. data/lib/ohloh_scm/adapters/hg/push.rb +0 -51
  199. data/lib/ohloh_scm/adapters/hg/validation.rb +0 -26
  200. data/lib/ohloh_scm/adapters/hg_adapter.rb +0 -21
  201. data/lib/ohloh_scm/adapters/hglib/cat_file.rb +0 -14
  202. data/lib/ohloh_scm/adapters/hglib/client.rb +0 -62
  203. data/lib/ohloh_scm/adapters/hglib/head.rb +0 -9
  204. data/lib/ohloh_scm/adapters/hglib_adapter.rb +0 -25
  205. data/lib/ohloh_scm/adapters/svn/cat_file.rb +0 -19
  206. data/lib/ohloh_scm/adapters/svn/commits.rb +0 -195
  207. data/lib/ohloh_scm/adapters/svn/head.rb +0 -19
  208. data/lib/ohloh_scm/adapters/svn/misc.rb +0 -171
  209. data/lib/ohloh_scm/adapters/svn/patch.rb +0 -8
  210. data/lib/ohloh_scm/adapters/svn/pre-revprop-change +0 -2
  211. data/lib/ohloh_scm/adapters/svn/pull.rb +0 -77
  212. data/lib/ohloh_scm/adapters/svn/push.rb +0 -15
  213. data/lib/ohloh_scm/adapters/svn/validation.rb +0 -87
  214. data/lib/ohloh_scm/adapters/svn_adapter.rb +0 -17
  215. data/lib/ohloh_scm/adapters/svn_chain/cat_file.rb +0 -8
  216. data/lib/ohloh_scm/adapters/svn_chain/chain.rb +0 -100
  217. data/lib/ohloh_scm/adapters/svn_chain/commits.rb +0 -37
  218. data/lib/ohloh_scm/adapters/svn_chain_adapter.rb +0 -44
  219. data/lib/ohloh_scm/parsers/array_writer.rb +0 -19
  220. data/lib/ohloh_scm/parsers/branch_number.rb +0 -60
  221. data/lib/ohloh_scm/parsers/bzr_parser.rb +0 -128
  222. data/lib/ohloh_scm/parsers/cvs_parser.rb +0 -182
  223. data/lib/ohloh_scm/parsers/git_parser.rb +0 -67
  224. data/lib/ohloh_scm/parsers/git_styled_parser.rb +0 -95
  225. data/lib/ohloh_scm/parsers/hg_parser.rb +0 -63
  226. data/lib/ohloh_scm/parsers/hg_styled_parser.rb +0 -65
  227. data/lib/ohloh_scm/parsers/human_writer.rb +0 -49
  228. data/lib/ohloh_scm/parsers/parser.rb +0 -34
  229. data/lib/ohloh_scm/parsers/svn_parser.rb +0 -77
  230. data/lib/ohloh_scm/parsers/svn_xml_parser.rb +0 -62
  231. data/lib/ohloh_scm/parsers/xml_writer.rb +0 -62
  232. data/lib/ohloh_scm/scratch_dir.rb +0 -59
  233. data/lib/ohloh_scm/shellout.rb +0 -40
  234. data/log/.gitignore +0 -1
  235. data/test/bin/svn +0 -7
  236. data/test/data/basic.ohlog +0 -11
  237. data/test/data/branch_merge.bzr_xml_log +0 -87
  238. data/test/data/git_patch.diff +0 -19
  239. data/test/data/helloworld.log +0 -41
  240. data/test/data/hg_patch.diff +0 -9
  241. data/test/data/intelliglue.rlog +0 -1216
  242. data/test/data/multiple_commits.rlog +0 -64
  243. data/test/data/simple.bzr_xml_log +0 -41
  244. data/test/data/simple.svn_xml_log +0 -66
  245. data/test/data/svn_patch.diff +0 -9
  246. data/test/data/svn_with_invalid_encoding.log +0 -33
  247. data/test/repositories/bzr/.bzr/README +0 -3
  248. data/test/repositories/bzr/.bzr/branch-format +0 -1
  249. data/test/repositories/bzr/.bzr/branch/branch.conf +0 -0
  250. data/test/repositories/bzr/.bzr/branch/format +0 -1
  251. data/test/repositories/bzr/.bzr/branch/last-revision +0 -1
  252. data/test/repositories/bzr/.bzr/branch/tags +0 -1
  253. data/test/repositories/bzr/.bzr/checkout/conflicts +0 -1
  254. data/test/repositories/bzr/.bzr/checkout/dirstate +0 -0
  255. data/test/repositories/bzr/.bzr/checkout/format +0 -1
  256. data/test/repositories/bzr/.bzr/repository/format +0 -1
  257. data/test/repositories/bzr/.bzr/repository/indices/0428489d1a03d05c496c2c429fe96e90.iix +0 -0
  258. data/test/repositories/bzr/.bzr/repository/indices/0428489d1a03d05c496c2c429fe96e90.rix +0 -0
  259. data/test/repositories/bzr/.bzr/repository/indices/0428489d1a03d05c496c2c429fe96e90.six +0 -5
  260. data/test/repositories/bzr/.bzr/repository/indices/0428489d1a03d05c496c2c429fe96e90.tix +0 -0
  261. data/test/repositories/bzr/.bzr/repository/indices/62f9cada7c58bce361b9b852d180ff56.iix +0 -0
  262. data/test/repositories/bzr/.bzr/repository/indices/62f9cada7c58bce361b9b852d180ff56.rix +0 -0
  263. data/test/repositories/bzr/.bzr/repository/indices/62f9cada7c58bce361b9b852d180ff56.six +0 -5
  264. data/test/repositories/bzr/.bzr/repository/indices/62f9cada7c58bce361b9b852d180ff56.tix +0 -0
  265. data/test/repositories/bzr/.bzr/repository/indices/71af8bae249bcb824a4ff17c62029142.iix +0 -0
  266. data/test/repositories/bzr/.bzr/repository/indices/71af8bae249bcb824a4ff17c62029142.rix +0 -0
  267. data/test/repositories/bzr/.bzr/repository/indices/71af8bae249bcb824a4ff17c62029142.six +0 -5
  268. data/test/repositories/bzr/.bzr/repository/indices/71af8bae249bcb824a4ff17c62029142.tix +0 -0
  269. data/test/repositories/bzr/.bzr/repository/indices/7202eb77b81a80eca5296f317ed42149.iix +0 -0
  270. data/test/repositories/bzr/.bzr/repository/indices/7202eb77b81a80eca5296f317ed42149.rix +0 -0
  271. data/test/repositories/bzr/.bzr/repository/indices/7202eb77b81a80eca5296f317ed42149.six +0 -5
  272. data/test/repositories/bzr/.bzr/repository/indices/7202eb77b81a80eca5296f317ed42149.tix +0 -5
  273. data/test/repositories/bzr/.bzr/repository/indices/8a571ba35ee54cd133b71e967442fe17.iix +0 -0
  274. data/test/repositories/bzr/.bzr/repository/indices/8a571ba35ee54cd133b71e967442fe17.rix +0 -0
  275. data/test/repositories/bzr/.bzr/repository/indices/8a571ba35ee54cd133b71e967442fe17.six +0 -5
  276. data/test/repositories/bzr/.bzr/repository/indices/8a571ba35ee54cd133b71e967442fe17.tix +0 -0
  277. data/test/repositories/bzr/.bzr/repository/indices/a06b9c10004fc3e05affee8cf0a9febd.iix +0 -0
  278. data/test/repositories/bzr/.bzr/repository/indices/a06b9c10004fc3e05affee8cf0a9febd.rix +0 -0
  279. data/test/repositories/bzr/.bzr/repository/indices/a06b9c10004fc3e05affee8cf0a9febd.six +0 -5
  280. data/test/repositories/bzr/.bzr/repository/indices/a06b9c10004fc3e05affee8cf0a9febd.tix +0 -0
  281. data/test/repositories/bzr/.bzr/repository/indices/f35e1020b6a55c81b6d2fe4c7bcd4645.iix +0 -0
  282. data/test/repositories/bzr/.bzr/repository/indices/f35e1020b6a55c81b6d2fe4c7bcd4645.rix +0 -0
  283. data/test/repositories/bzr/.bzr/repository/indices/f35e1020b6a55c81b6d2fe4c7bcd4645.six +0 -5
  284. data/test/repositories/bzr/.bzr/repository/indices/f35e1020b6a55c81b6d2fe4c7bcd4645.tix +0 -0
  285. data/test/repositories/bzr/.bzr/repository/pack-names +0 -0
  286. data/test/repositories/bzr/.bzr/repository/packs/0428489d1a03d05c496c2c429fe96e90.pack +0 -0
  287. data/test/repositories/bzr/.bzr/repository/packs/62f9cada7c58bce361b9b852d180ff56.pack +0 -0
  288. data/test/repositories/bzr/.bzr/repository/packs/71af8bae249bcb824a4ff17c62029142.pack +0 -0
  289. data/test/repositories/bzr/.bzr/repository/packs/7202eb77b81a80eca5296f317ed42149.pack +0 -0
  290. data/test/repositories/bzr/.bzr/repository/packs/8a571ba35ee54cd133b71e967442fe17.pack +0 -0
  291. data/test/repositories/bzr/.bzr/repository/packs/a06b9c10004fc3e05affee8cf0a9febd.pack +0 -0
  292. data/test/repositories/bzr/.bzr/repository/packs/f35e1020b6a55c81b6d2fe4c7bcd4645.pack +0 -0
  293. data/test/repositories/bzr/.bzr/repository/upload/.gitignore +0 -1
  294. data/test/repositories/bzr/C/303/251dric.txt +0 -2
  295. data/test/repositories/bzr/file1.txt +0 -2
  296. data/test/repositories/bzr/file3.txt +0 -1
  297. data/test/repositories/bzr/file4.txt +0 -1
  298. data/test/repositories/bzr/file5.txt +0 -4
  299. data/test/repositories/bzr_hello_world/.bzr/README +0 -3
  300. data/test/repositories/bzr_hello_world/.bzr/branch-format +0 -1
  301. data/test/repositories/bzr_hello_world/.bzr/branch/branch.conf +0 -0
  302. data/test/repositories/bzr_hello_world/.bzr/branch/format +0 -1
  303. data/test/repositories/bzr_hello_world/.bzr/branch/last-revision +0 -1
  304. data/test/repositories/bzr_hello_world/.bzr/branch/tags +0 -0
  305. data/test/repositories/bzr_hello_world/.bzr/checkout/conflicts +0 -1
  306. data/test/repositories/bzr_hello_world/.bzr/checkout/dirstate +0 -0
  307. data/test/repositories/bzr_hello_world/.bzr/checkout/format +0 -1
  308. data/test/repositories/bzr_hello_world/.bzr/repository/format +0 -1
  309. data/test/repositories/bzr_hello_world/.bzr/repository/indices/a7cd0d6de5d8b3efdd5f61a4caeda296.iix +0 -0
  310. data/test/repositories/bzr_hello_world/.bzr/repository/indices/a7cd0d6de5d8b3efdd5f61a4caeda296.rix +0 -0
  311. data/test/repositories/bzr_hello_world/.bzr/repository/indices/a7cd0d6de5d8b3efdd5f61a4caeda296.six +0 -5
  312. data/test/repositories/bzr_hello_world/.bzr/repository/indices/a7cd0d6de5d8b3efdd5f61a4caeda296.tix +0 -0
  313. data/test/repositories/bzr_hello_world/.bzr/repository/indices/ed1e97c1213220a92ff857169867a7b3.iix +0 -0
  314. data/test/repositories/bzr_hello_world/.bzr/repository/indices/ed1e97c1213220a92ff857169867a7b3.rix +0 -0
  315. data/test/repositories/bzr_hello_world/.bzr/repository/indices/ed1e97c1213220a92ff857169867a7b3.six +0 -5
  316. data/test/repositories/bzr_hello_world/.bzr/repository/indices/ed1e97c1213220a92ff857169867a7b3.tix +0 -0
  317. data/test/repositories/bzr_hello_world/.bzr/repository/pack-names +0 -0
  318. data/test/repositories/bzr_hello_world/.bzr/repository/packs/a7cd0d6de5d8b3efdd5f61a4caeda296.pack +0 -0
  319. data/test/repositories/bzr_hello_world/.bzr/repository/packs/ed1e97c1213220a92ff857169867a7b3.pack +0 -0
  320. data/test/repositories/bzr_hello_world/helloworld.c +0 -6
  321. data/test/repositories/bzr_with_authors/.bzr/README +0 -3
  322. data/test/repositories/bzr_with_authors/.bzr/branch-format +0 -1
  323. data/test/repositories/bzr_with_authors/.bzr/branch/branch.conf +0 -0
  324. data/test/repositories/bzr_with_authors/.bzr/branch/format +0 -1
  325. data/test/repositories/bzr_with_authors/.bzr/branch/last-revision +0 -1
  326. data/test/repositories/bzr_with_authors/.bzr/branch/tags +0 -0
  327. data/test/repositories/bzr_with_authors/.bzr/checkout/conflicts +0 -1
  328. data/test/repositories/bzr_with_authors/.bzr/checkout/dirstate +0 -0
  329. data/test/repositories/bzr_with_authors/.bzr/checkout/format +0 -1
  330. data/test/repositories/bzr_with_authors/.bzr/checkout/views +0 -0
  331. data/test/repositories/bzr_with_authors/.bzr/repository/format +0 -1
  332. data/test/repositories/bzr_with_authors/.bzr/repository/indices/1326ecee2f4f69991771137c5307689a.cix +0 -0
  333. data/test/repositories/bzr_with_authors/.bzr/repository/indices/1326ecee2f4f69991771137c5307689a.iix +0 -0
  334. data/test/repositories/bzr_with_authors/.bzr/repository/indices/1326ecee2f4f69991771137c5307689a.rix +0 -6
  335. data/test/repositories/bzr_with_authors/.bzr/repository/indices/1326ecee2f4f69991771137c5307689a.six +0 -5
  336. data/test/repositories/bzr_with_authors/.bzr/repository/indices/1326ecee2f4f69991771137c5307689a.tix +0 -0
  337. data/test/repositories/bzr_with_authors/.bzr/repository/indices/adf730b6cf7c7959afcedb87e155654d.cix +0 -0
  338. data/test/repositories/bzr_with_authors/.bzr/repository/indices/adf730b6cf7c7959afcedb87e155654d.iix +0 -0
  339. data/test/repositories/bzr_with_authors/.bzr/repository/indices/adf730b6cf7c7959afcedb87e155654d.rix +0 -0
  340. data/test/repositories/bzr_with_authors/.bzr/repository/indices/adf730b6cf7c7959afcedb87e155654d.six +0 -5
  341. data/test/repositories/bzr_with_authors/.bzr/repository/indices/adf730b6cf7c7959afcedb87e155654d.tix +0 -6
  342. data/test/repositories/bzr_with_authors/.bzr/repository/indices/d2613fcfb5e48e79073b96270782f95c.cix +0 -0
  343. data/test/repositories/bzr_with_authors/.bzr/repository/indices/d2613fcfb5e48e79073b96270782f95c.iix +0 -0
  344. data/test/repositories/bzr_with_authors/.bzr/repository/indices/d2613fcfb5e48e79073b96270782f95c.rix +0 -0
  345. data/test/repositories/bzr_with_authors/.bzr/repository/indices/d2613fcfb5e48e79073b96270782f95c.six +0 -5
  346. data/test/repositories/bzr_with_authors/.bzr/repository/indices/d2613fcfb5e48e79073b96270782f95c.tix +0 -0
  347. data/test/repositories/bzr_with_authors/.bzr/repository/pack-names +0 -0
  348. data/test/repositories/bzr_with_authors/.bzr/repository/packs/1326ecee2f4f69991771137c5307689a.pack +0 -0
  349. data/test/repositories/bzr_with_authors/.bzr/repository/packs/adf730b6cf7c7959afcedb87e155654d.pack +0 -0
  350. data/test/repositories/bzr_with_authors/.bzr/repository/packs/d2613fcfb5e48e79073b96270782f95c.pack +0 -0
  351. data/test/repositories/bzr_with_authors/test.txt +0 -1
  352. data/test/repositories/bzr_with_branch/.bzr/README +0 -3
  353. data/test/repositories/bzr_with_branch/.bzr/branch-format +0 -1
  354. data/test/repositories/bzr_with_branch/.bzr/branch/branch.conf +0 -1
  355. data/test/repositories/bzr_with_branch/.bzr/branch/format +0 -1
  356. data/test/repositories/bzr_with_branch/.bzr/branch/last-revision +0 -1
  357. data/test/repositories/bzr_with_branch/.bzr/branch/tags +0 -0
  358. data/test/repositories/bzr_with_branch/.bzr/checkout/conflicts +0 -1
  359. data/test/repositories/bzr_with_branch/.bzr/checkout/dirstate +0 -0
  360. data/test/repositories/bzr_with_branch/.bzr/checkout/format +0 -1
  361. data/test/repositories/bzr_with_branch/.bzr/checkout/merge-hashes +0 -3
  362. data/test/repositories/bzr_with_branch/.bzr/repository/format +0 -1
  363. data/test/repositories/bzr_with_branch/.bzr/repository/indices/3336f250dbe86a7eec2de4c1b1f97db7.iix +0 -0
  364. data/test/repositories/bzr_with_branch/.bzr/repository/indices/3336f250dbe86a7eec2de4c1b1f97db7.rix +0 -0
  365. data/test/repositories/bzr_with_branch/.bzr/repository/indices/3336f250dbe86a7eec2de4c1b1f97db7.six +0 -5
  366. data/test/repositories/bzr_with_branch/.bzr/repository/indices/3336f250dbe86a7eec2de4c1b1f97db7.tix +0 -5
  367. data/test/repositories/bzr_with_branch/.bzr/repository/indices/47cfe65310e6d462bb87a68fff0bc162.iix +0 -0
  368. data/test/repositories/bzr_with_branch/.bzr/repository/indices/47cfe65310e6d462bb87a68fff0bc162.rix +0 -0
  369. data/test/repositories/bzr_with_branch/.bzr/repository/indices/47cfe65310e6d462bb87a68fff0bc162.six +0 -5
  370. data/test/repositories/bzr_with_branch/.bzr/repository/indices/47cfe65310e6d462bb87a68fff0bc162.tix +0 -0
  371. data/test/repositories/bzr_with_branch/.bzr/repository/indices/64e98edbf1aebe6f532f2f93b24eead8.iix +0 -0
  372. data/test/repositories/bzr_with_branch/.bzr/repository/indices/64e98edbf1aebe6f532f2f93b24eead8.rix +0 -0
  373. data/test/repositories/bzr_with_branch/.bzr/repository/indices/64e98edbf1aebe6f532f2f93b24eead8.six +0 -5
  374. data/test/repositories/bzr_with_branch/.bzr/repository/indices/64e98edbf1aebe6f532f2f93b24eead8.tix +0 -0
  375. data/test/repositories/bzr_with_branch/.bzr/repository/indices/8008794e258fc3fa4be68d538312a91c.iix +0 -0
  376. data/test/repositories/bzr_with_branch/.bzr/repository/indices/8008794e258fc3fa4be68d538312a91c.rix +0 -0
  377. data/test/repositories/bzr_with_branch/.bzr/repository/indices/8008794e258fc3fa4be68d538312a91c.six +0 -5
  378. data/test/repositories/bzr_with_branch/.bzr/repository/indices/8008794e258fc3fa4be68d538312a91c.tix +0 -0
  379. data/test/repositories/bzr_with_branch/.bzr/repository/pack-names +0 -0
  380. data/test/repositories/bzr_with_branch/.bzr/repository/packs/3336f250dbe86a7eec2de4c1b1f97db7.pack +0 -0
  381. data/test/repositories/bzr_with_branch/.bzr/repository/packs/47cfe65310e6d462bb87a68fff0bc162.pack +0 -0
  382. data/test/repositories/bzr_with_branch/.bzr/repository/packs/64e98edbf1aebe6f532f2f93b24eead8.pack +0 -0
  383. data/test/repositories/bzr_with_branch/.bzr/repository/packs/8008794e258fc3fa4be68d538312a91c.pack +0 -0
  384. data/test/repositories/bzr_with_branch/goodbyeworld.c +0 -5
  385. data/test/repositories/bzr_with_branch/helloworld.c +0 -6
  386. data/test/repositories/bzr_with_nested_branches/.bzr/README +0 -3
  387. data/test/repositories/bzr_with_nested_branches/.bzr/branch-format +0 -1
  388. data/test/repositories/bzr_with_nested_branches/.bzr/branch/branch.conf +0 -1
  389. data/test/repositories/bzr_with_nested_branches/.bzr/branch/format +0 -1
  390. data/test/repositories/bzr_with_nested_branches/.bzr/branch/last-revision +0 -1
  391. data/test/repositories/bzr_with_nested_branches/.bzr/branch/tags +0 -0
  392. data/test/repositories/bzr_with_nested_branches/.bzr/checkout/conflicts +0 -1
  393. data/test/repositories/bzr_with_nested_branches/.bzr/checkout/dirstate +0 -0
  394. data/test/repositories/bzr_with_nested_branches/.bzr/checkout/format +0 -1
  395. data/test/repositories/bzr_with_nested_branches/.bzr/checkout/merge-hashes +0 -6
  396. data/test/repositories/bzr_with_nested_branches/.bzr/repository/format +0 -1
  397. data/test/repositories/bzr_with_nested_branches/.bzr/repository/indices/0428489d1a03d05c496c2c429fe96e90.iix +0 -0
  398. data/test/repositories/bzr_with_nested_branches/.bzr/repository/indices/0428489d1a03d05c496c2c429fe96e90.rix +0 -0
  399. data/test/repositories/bzr_with_nested_branches/.bzr/repository/indices/0428489d1a03d05c496c2c429fe96e90.six +0 -5
  400. data/test/repositories/bzr_with_nested_branches/.bzr/repository/indices/0428489d1a03d05c496c2c429fe96e90.tix +0 -0
  401. data/test/repositories/bzr_with_nested_branches/.bzr/repository/indices/30fcaac048e328a7727156986055f6e8.iix +0 -0
  402. data/test/repositories/bzr_with_nested_branches/.bzr/repository/indices/30fcaac048e328a7727156986055f6e8.rix +0 -0
  403. data/test/repositories/bzr_with_nested_branches/.bzr/repository/indices/30fcaac048e328a7727156986055f6e8.six +0 -5
  404. data/test/repositories/bzr_with_nested_branches/.bzr/repository/indices/30fcaac048e328a7727156986055f6e8.tix +0 -0
  405. data/test/repositories/bzr_with_nested_branches/.bzr/repository/indices/673cc297ed321f667e1d8d4fff600829.iix +0 -0
  406. data/test/repositories/bzr_with_nested_branches/.bzr/repository/indices/673cc297ed321f667e1d8d4fff600829.rix +0 -0
  407. data/test/repositories/bzr_with_nested_branches/.bzr/repository/indices/673cc297ed321f667e1d8d4fff600829.six +0 -5
  408. data/test/repositories/bzr_with_nested_branches/.bzr/repository/indices/673cc297ed321f667e1d8d4fff600829.tix +0 -0
  409. data/test/repositories/bzr_with_nested_branches/.bzr/repository/indices/71af8bae249bcb824a4ff17c62029142.iix +0 -0
  410. data/test/repositories/bzr_with_nested_branches/.bzr/repository/indices/71af8bae249bcb824a4ff17c62029142.rix +0 -0
  411. data/test/repositories/bzr_with_nested_branches/.bzr/repository/indices/71af8bae249bcb824a4ff17c62029142.six +0 -5
  412. data/test/repositories/bzr_with_nested_branches/.bzr/repository/indices/71af8bae249bcb824a4ff17c62029142.tix +0 -0
  413. data/test/repositories/bzr_with_nested_branches/.bzr/repository/indices/7202eb77b81a80eca5296f317ed42149.iix +0 -0
  414. data/test/repositories/bzr_with_nested_branches/.bzr/repository/indices/7202eb77b81a80eca5296f317ed42149.rix +0 -0
  415. data/test/repositories/bzr_with_nested_branches/.bzr/repository/indices/7202eb77b81a80eca5296f317ed42149.six +0 -5
  416. data/test/repositories/bzr_with_nested_branches/.bzr/repository/indices/7202eb77b81a80eca5296f317ed42149.tix +0 -5
  417. data/test/repositories/bzr_with_nested_branches/.bzr/repository/indices/8a571ba35ee54cd133b71e967442fe17.iix +0 -0
  418. data/test/repositories/bzr_with_nested_branches/.bzr/repository/indices/8a571ba35ee54cd133b71e967442fe17.rix +0 -0
  419. data/test/repositories/bzr_with_nested_branches/.bzr/repository/indices/8a571ba35ee54cd133b71e967442fe17.six +0 -5
  420. data/test/repositories/bzr_with_nested_branches/.bzr/repository/indices/8a571ba35ee54cd133b71e967442fe17.tix +0 -0
  421. data/test/repositories/bzr_with_nested_branches/.bzr/repository/indices/a06b9c10004fc3e05affee8cf0a9febd.iix +0 -0
  422. data/test/repositories/bzr_with_nested_branches/.bzr/repository/indices/a06b9c10004fc3e05affee8cf0a9febd.rix +0 -0
  423. data/test/repositories/bzr_with_nested_branches/.bzr/repository/indices/a06b9c10004fc3e05affee8cf0a9febd.six +0 -5
  424. data/test/repositories/bzr_with_nested_branches/.bzr/repository/indices/a06b9c10004fc3e05affee8cf0a9febd.tix +0 -0
  425. data/test/repositories/bzr_with_nested_branches/.bzr/repository/indices/da6c79a024c70fd6831e323430a96cc8.iix +0 -0
  426. data/test/repositories/bzr_with_nested_branches/.bzr/repository/indices/da6c79a024c70fd6831e323430a96cc8.rix +0 -0
  427. data/test/repositories/bzr_with_nested_branches/.bzr/repository/indices/da6c79a024c70fd6831e323430a96cc8.six +0 -5
  428. data/test/repositories/bzr_with_nested_branches/.bzr/repository/indices/da6c79a024c70fd6831e323430a96cc8.tix +0 -5
  429. data/test/repositories/bzr_with_nested_branches/.bzr/repository/indices/f35e1020b6a55c81b6d2fe4c7bcd4645.iix +0 -0
  430. data/test/repositories/bzr_with_nested_branches/.bzr/repository/indices/f35e1020b6a55c81b6d2fe4c7bcd4645.rix +0 -0
  431. data/test/repositories/bzr_with_nested_branches/.bzr/repository/indices/f35e1020b6a55c81b6d2fe4c7bcd4645.six +0 -5
  432. data/test/repositories/bzr_with_nested_branches/.bzr/repository/indices/f35e1020b6a55c81b6d2fe4c7bcd4645.tix +0 -0
  433. data/test/repositories/bzr_with_nested_branches/.bzr/repository/pack-names +0 -0
  434. data/test/repositories/bzr_with_nested_branches/.bzr/repository/packs/0428489d1a03d05c496c2c429fe96e90.pack +0 -0
  435. data/test/repositories/bzr_with_nested_branches/.bzr/repository/packs/30fcaac048e328a7727156986055f6e8.pack +0 -0
  436. data/test/repositories/bzr_with_nested_branches/.bzr/repository/packs/673cc297ed321f667e1d8d4fff600829.pack +0 -0
  437. data/test/repositories/bzr_with_nested_branches/.bzr/repository/packs/71af8bae249bcb824a4ff17c62029142.pack +0 -0
  438. data/test/repositories/bzr_with_nested_branches/.bzr/repository/packs/7202eb77b81a80eca5296f317ed42149.pack +0 -0
  439. data/test/repositories/bzr_with_nested_branches/.bzr/repository/packs/8a571ba35ee54cd133b71e967442fe17.pack +0 -0
  440. data/test/repositories/bzr_with_nested_branches/.bzr/repository/packs/a06b9c10004fc3e05affee8cf0a9febd.pack +0 -0
  441. data/test/repositories/bzr_with_nested_branches/.bzr/repository/packs/da6c79a024c70fd6831e323430a96cc8.pack +0 -0
  442. data/test/repositories/bzr_with_nested_branches/.bzr/repository/packs/f35e1020b6a55c81b6d2fe4c7bcd4645.pack +0 -0
  443. data/test/repositories/bzr_with_nested_branches/.bzr/repository/upload/.gitignore +0 -1
  444. data/test/repositories/bzr_with_nested_branches/file1.txt +0 -2
  445. data/test/repositories/bzr_with_nested_branches/file3.txt +0 -1
  446. data/test/repositories/bzr_with_nested_branches/file4.txt +0 -1
  447. data/test/repositories/bzr_with_nested_branches/file5.txt +0 -4
  448. data/test/repositories/bzr_with_nested_branches/file6.txt +0 -2
  449. data/test/repositories/bzr_with_nested_branches/file7.txt +0 -2
  450. data/test/repositories/bzr_with_subdirectories/.bzr/README +0 -3
  451. data/test/repositories/bzr_with_subdirectories/.bzr/branch-format +0 -1
  452. data/test/repositories/bzr_with_subdirectories/.bzr/branch/branch.conf +0 -0
  453. data/test/repositories/bzr_with_subdirectories/.bzr/branch/format +0 -1
  454. data/test/repositories/bzr_with_subdirectories/.bzr/branch/last-revision +0 -1
  455. data/test/repositories/bzr_with_subdirectories/.bzr/branch/tags +0 -0
  456. data/test/repositories/bzr_with_subdirectories/.bzr/checkout/conflicts +0 -1
  457. data/test/repositories/bzr_with_subdirectories/.bzr/checkout/dirstate +0 -0
  458. data/test/repositories/bzr_with_subdirectories/.bzr/checkout/format +0 -1
  459. data/test/repositories/bzr_with_subdirectories/.bzr/repository/format +0 -1
  460. data/test/repositories/bzr_with_subdirectories/.bzr/repository/indices/6eb92b11d9f811881dd08e0ca71e136d.iix +0 -0
  461. data/test/repositories/bzr_with_subdirectories/.bzr/repository/indices/6eb92b11d9f811881dd08e0ca71e136d.rix +0 -0
  462. data/test/repositories/bzr_with_subdirectories/.bzr/repository/indices/6eb92b11d9f811881dd08e0ca71e136d.six +0 -5
  463. data/test/repositories/bzr_with_subdirectories/.bzr/repository/indices/6eb92b11d9f811881dd08e0ca71e136d.tix +0 -0
  464. data/test/repositories/bzr_with_subdirectories/.bzr/repository/pack-names +0 -0
  465. data/test/repositories/bzr_with_subdirectories/.bzr/repository/packs/6eb92b11d9f811881dd08e0ca71e136d.pack +0 -0
  466. data/test/repositories/bzr_with_subdirectories/foo/helloworld.c +0 -0
  467. data/test/repositories/deep_svn/README.txt +0 -5
  468. data/test/repositories/deep_svn/conf/authz +0 -21
  469. data/test/repositories/deep_svn/conf/passwd +0 -8
  470. data/test/repositories/deep_svn/conf/svnserve.conf +0 -30
  471. data/test/repositories/deep_svn/db/current +0 -1
  472. data/test/repositories/deep_svn/db/format +0 -1
  473. data/test/repositories/deep_svn/db/fs-type +0 -1
  474. data/test/repositories/deep_svn/db/revprops/0 +0 -5
  475. data/test/repositories/deep_svn/db/revprops/1 +0 -14
  476. data/test/repositories/deep_svn/db/revprops/2 +0 -14
  477. data/test/repositories/deep_svn/db/revprops/3 +0 -14
  478. data/test/repositories/deep_svn/db/revprops/4 +0 -14
  479. data/test/repositories/deep_svn/db/revs/0 +0 -11
  480. data/test/repositories/deep_svn/db/revs/1 +0 -122
  481. data/test/repositories/deep_svn/db/revs/2 +0 -19
  482. data/test/repositories/deep_svn/db/revs/3 +0 -44
  483. data/test/repositories/deep_svn/db/revs/4 +0 -48
  484. data/test/repositories/deep_svn/db/uuid +0 -1
  485. data/test/repositories/deep_svn/db/write-lock +0 -0
  486. data/test/repositories/deep_svn/format +0 -1
  487. data/test/repositories/deep_svn/hooks/post-commit.tmpl +0 -51
  488. data/test/repositories/deep_svn/hooks/post-lock.tmpl +0 -44
  489. data/test/repositories/deep_svn/hooks/post-revprop-change.tmpl +0 -56
  490. data/test/repositories/deep_svn/hooks/post-unlock.tmpl +0 -42
  491. data/test/repositories/deep_svn/hooks/pre-commit.tmpl +0 -70
  492. data/test/repositories/deep_svn/hooks/pre-lock.tmpl +0 -64
  493. data/test/repositories/deep_svn/hooks/pre-revprop-change.tmpl +0 -66
  494. data/test/repositories/deep_svn/hooks/pre-unlock.tmpl +0 -60
  495. data/test/repositories/deep_svn/hooks/start-commit.tmpl +0 -54
  496. data/test/repositories/deep_svn/locks/db-logs.lock +0 -3
  497. data/test/repositories/deep_svn/locks/db.lock +0 -3
  498. data/test/repositories/git_with_empty_merge.tgz +0 -0
  499. data/test/repositories/svn/README.txt +0 -5
  500. data/test/repositories/svn/conf/authz +0 -21
  501. data/test/repositories/svn/conf/passwd +0 -8
  502. data/test/repositories/svn/conf/svnserve.conf +0 -30
  503. data/test/repositories/svn/db/current +0 -1
  504. data/test/repositories/svn/db/format +0 -1
  505. data/test/repositories/svn/db/fs-type +0 -1
  506. data/test/repositories/svn/db/revprops/0 +0 -5
  507. data/test/repositories/svn/db/revprops/1 +0 -14
  508. data/test/repositories/svn/db/revprops/2 +0 -13
  509. data/test/repositories/svn/db/revprops/3 +0 -13
  510. data/test/repositories/svn/db/revprops/4 +0 -13
  511. data/test/repositories/svn/db/revprops/5 +0 -13
  512. data/test/repositories/svn/db/revprops/6 +0 -12
  513. data/test/repositories/svn/db/revs/0 +0 -11
  514. data/test/repositories/svn/db/revs/1 +0 -0
  515. data/test/repositories/svn/db/revs/2 +0 -0
  516. data/test/repositories/svn/db/revs/3 +0 -0
  517. data/test/repositories/svn/db/revs/4 +0 -0
  518. data/test/repositories/svn/db/revs/5 +0 -64
  519. data/test/repositories/svn/db/revs/6 +0 -50
  520. data/test/repositories/svn/db/uuid +0 -1
  521. data/test/repositories/svn/db/write-lock +0 -0
  522. data/test/repositories/svn/format +0 -1
  523. data/test/repositories/svn/hooks/post-commit.tmpl +0 -51
  524. data/test/repositories/svn/hooks/post-lock.tmpl +0 -44
  525. data/test/repositories/svn/hooks/post-revprop-change.tmpl +0 -56
  526. data/test/repositories/svn/hooks/post-unlock.tmpl +0 -42
  527. data/test/repositories/svn/hooks/pre-commit.tmpl +0 -70
  528. data/test/repositories/svn/hooks/pre-lock.tmpl +0 -64
  529. data/test/repositories/svn/hooks/pre-revprop-change +0 -67
  530. data/test/repositories/svn/hooks/pre-unlock.tmpl +0 -60
  531. data/test/repositories/svn/hooks/start-commit.tmpl +0 -54
  532. data/test/repositories/svn/locks/db-logs.lock +0 -3
  533. data/test/repositories/svn/locks/db.lock +0 -3
  534. data/test/repositories/svn_empty/README.txt +0 -5
  535. data/test/repositories/svn_empty/conf/authz +0 -32
  536. data/test/repositories/svn_empty/conf/hooks-env.tmpl +0 -19
  537. data/test/repositories/svn_empty/conf/passwd +0 -8
  538. data/test/repositories/svn_empty/conf/svnserve.conf +0 -76
  539. data/test/repositories/svn_empty/db/current +0 -1
  540. data/test/repositories/svn_empty/db/format +0 -2
  541. data/test/repositories/svn_empty/db/fs-type +0 -1
  542. data/test/repositories/svn_empty/db/fsfs.conf +0 -125
  543. data/test/repositories/svn_empty/db/min-unpacked-rev +0 -1
  544. data/test/repositories/svn_empty/db/revprops/0/0 +0 -5
  545. data/test/repositories/svn_empty/db/revs/0/0 +0 -11
  546. data/test/repositories/svn_empty/db/txn-current +0 -1
  547. data/test/repositories/svn_empty/db/txn-current-lock +0 -0
  548. data/test/repositories/svn_empty/db/uuid +0 -1
  549. data/test/repositories/svn_empty/db/write-lock +0 -0
  550. data/test/repositories/svn_empty/format +0 -1
  551. data/test/repositories/svn_empty/hooks/post-commit.tmpl +0 -52
  552. data/test/repositories/svn_empty/hooks/post-lock.tmpl +0 -45
  553. data/test/repositories/svn_empty/hooks/post-revprop-change.tmpl +0 -57
  554. data/test/repositories/svn_empty/hooks/post-unlock.tmpl +0 -43
  555. data/test/repositories/svn_empty/hooks/pre-commit.tmpl +0 -85
  556. data/test/repositories/svn_empty/hooks/pre-lock.tmpl +0 -73
  557. data/test/repositories/svn_empty/hooks/pre-revprop-change.tmpl +0 -66
  558. data/test/repositories/svn_empty/hooks/pre-unlock.tmpl +0 -65
  559. data/test/repositories/svn_empty/hooks/start-commit.tmpl +0 -74
  560. data/test/repositories/svn_empty/locks/db-logs.lock +0 -3
  561. data/test/repositories/svn_empty/locks/db.lock +0 -3
  562. data/test/repositories/svn_with_branching.tgz +0 -0
  563. data/test/repositories/svn_with_invalid_encoding.tgz +0 -0
  564. data/test/repositories/svn_with_tree_move/README.txt +0 -5
  565. data/test/repositories/svn_with_tree_move/conf/authz +0 -21
  566. data/test/repositories/svn_with_tree_move/conf/passwd +0 -8
  567. data/test/repositories/svn_with_tree_move/conf/svnserve.conf +0 -30
  568. data/test/repositories/svn_with_tree_move/db/current +0 -1
  569. data/test/repositories/svn_with_tree_move/db/format +0 -1
  570. data/test/repositories/svn_with_tree_move/db/fs-type +0 -1
  571. data/test/repositories/svn_with_tree_move/db/revprops/0 +0 -5
  572. data/test/repositories/svn_with_tree_move/db/revprops/1 +0 -13
  573. data/test/repositories/svn_with_tree_move/db/revprops/2 +0 -13
  574. data/test/repositories/svn_with_tree_move/db/revs/0 +0 -11
  575. data/test/repositories/svn_with_tree_move/db/revs/1 +0 -0
  576. data/test/repositories/svn_with_tree_move/db/revs/2 +0 -44
  577. data/test/repositories/svn_with_tree_move/db/uuid +0 -1
  578. data/test/repositories/svn_with_tree_move/db/write-lock +0 -0
  579. data/test/repositories/svn_with_tree_move/format +0 -1
  580. data/test/repositories/svn_with_tree_move/hooks/post-commit.tmpl +0 -51
  581. data/test/repositories/svn_with_tree_move/hooks/post-lock.tmpl +0 -44
  582. data/test/repositories/svn_with_tree_move/hooks/post-revprop-change.tmpl +0 -56
  583. data/test/repositories/svn_with_tree_move/hooks/post-unlock.tmpl +0 -42
  584. data/test/repositories/svn_with_tree_move/hooks/pre-commit.tmpl +0 -70
  585. data/test/repositories/svn_with_tree_move/hooks/pre-lock.tmpl +0 -64
  586. data/test/repositories/svn_with_tree_move/hooks/pre-revprop-change.tmpl +0 -66
  587. data/test/repositories/svn_with_tree_move/hooks/pre-unlock.tmpl +0 -60
  588. data/test/repositories/svn_with_tree_move/hooks/start-commit.tmpl +0 -54
  589. data/test/repositories/svn_with_tree_move/locks/db-logs.lock +0 -3
  590. data/test/repositories/svn_with_tree_move/locks/db.lock +0 -3
  591. data/test/test_helper.rb +0 -127
  592. data/test/unit/abstract_adapter_test.rb +0 -106
  593. data/test/unit/adapter_factory_test.rb +0 -67
  594. data/test/unit/array_writer_test.rb +0 -33
  595. data/test/unit/bzr_cat_file_test.rb +0 -56
  596. data/test/unit/bzr_commits_test.rb +0 -388
  597. data/test/unit/bzr_head_test.rb +0 -18
  598. data/test/unit/bzr_misc_test.rb +0 -62
  599. data/test/unit/bzr_parser_test.rb +0 -483
  600. data/test/unit/bzr_pull_test.rb +0 -31
  601. data/test/unit/bzr_push_test.rb +0 -61
  602. data/test/unit/bzr_validation_test.rb +0 -61
  603. data/test/unit/bzr_xml_parser_test.rb +0 -409
  604. data/test/unit/bzrlib_cat_file_test.rb +0 -56
  605. data/test/unit/bzrlib_head_test.rb +0 -18
  606. data/test/unit/cvs_branch_number_test.rb +0 -130
  607. data/test/unit/cvs_commits_test.rb +0 -52
  608. data/test/unit/cvs_convert_test.rb +0 -30
  609. data/test/unit/cvs_misc_test.rb +0 -82
  610. data/test/unit/cvs_parser_test.rb +0 -94
  611. data/test/unit/cvs_validation_test.rb +0 -148
  612. data/test/unit/git_cat_file_test.rb +0 -21
  613. data/test/unit/git_commit_all_test.rb +0 -34
  614. data/test/unit/git_commits_test.rb +0 -179
  615. data/test/unit/git_head_test.rb +0 -26
  616. data/test/unit/git_log_parser_test.rb +0 -221
  617. data/test/unit/git_misc_test.rb +0 -100
  618. data/test/unit/git_parser_test.rb +0 -59
  619. data/test/unit/git_patch_test.rb +0 -14
  620. data/test/unit/git_pull_test.rb +0 -50
  621. data/test/unit/git_push_test.rb +0 -46
  622. data/test/unit/git_rev_list_test.rb +0 -89
  623. data/test/unit/git_styled_parser_test.rb +0 -103
  624. data/test/unit/git_svn_cat_file_test.rb +0 -57
  625. data/test/unit/git_svn_commits_test.rb +0 -37
  626. data/test/unit/git_svn_pull_test.rb +0 -51
  627. data/test/unit/git_token_test.rb +0 -45
  628. data/test/unit/git_validation_test.rb +0 -93
  629. data/test/unit/hg_cat_file_test.rb +0 -47
  630. data/test/unit/hg_commits_test.rb +0 -220
  631. data/test/unit/hg_head_test.rb +0 -24
  632. data/test/unit/hg_misc_test.rb +0 -48
  633. data/test/unit/hg_parser_test.rb +0 -184
  634. data/test/unit/hg_patch_test.rb +0 -14
  635. data/test/unit/hg_pull_test.rb +0 -29
  636. data/test/unit/hg_push_test.rb +0 -59
  637. data/test/unit/hg_rev_list_test.rb +0 -63
  638. data/test/unit/hg_validation_test.rb +0 -60
  639. data/test/unit/hglib_cat_file_test.rb +0 -47
  640. data/test/unit/hglib_head_test.rb +0 -18
  641. data/test/unit/ohlog_command_line_test.rb +0 -36
  642. data/test/unit/shellout_test.rb +0 -26
  643. data/test/unit/string_encoder_command_line_test.rb +0 -27
  644. data/test/unit/svn_cat_file_test.rb +0 -22
  645. data/test/unit/svn_chain_cat_file_test.rb +0 -24
  646. data/test/unit/svn_chain_commits_test.rb +0 -176
  647. data/test/unit/svn_chain_test.rb +0 -77
  648. data/test/unit/svn_commits_test.rb +0 -275
  649. data/test/unit/svn_convert_test.rb +0 -28
  650. data/test/unit/svn_head_test.rb +0 -27
  651. data/test/unit/svn_misc_test.rb +0 -142
  652. data/test/unit/svn_parser_test.rb +0 -155
  653. data/test/unit/svn_patch_test.rb +0 -14
  654. data/test/unit/svn_pull_test.rb +0 -60
  655. data/test/unit/svn_push_test.rb +0 -40
  656. data/test/unit/svn_validation_test.rb +0 -176
  657. data/test/unit/svn_xml_parser_test.rb +0 -45
@@ -1,9 +0,0 @@
1
- module OhlohScm::Adapters
2
- class HglibAdapter < HgAdapter
3
-
4
- def parent_tokens(commit)
5
- hg_client.parent_tokens(commit.token)
6
- end
7
-
8
- end
9
- end
@@ -1,25 +0,0 @@
1
- require 'rubygems'
2
- require_relative 'hglib/client'
3
-
4
- module OhlohScm::Adapters
5
- class HglibAdapter < HgAdapter
6
-
7
- def setup
8
- hg_client = HglibClient.new(url)
9
- hg_client.start
10
- hg_client
11
- end
12
-
13
- def hg_client
14
- @hg_client ||= setup
15
- end
16
-
17
- def cleanup
18
- @hg_client && @hg_client.shutdown
19
- end
20
-
21
- end
22
- end
23
-
24
- require_relative 'hglib/head'
25
- require_relative 'hglib/cat_file'
@@ -1,19 +0,0 @@
1
- module OhlohScm::Adapters
2
- class SvnAdapter < AbstractAdapter
3
- def cat_file(commit, diff)
4
- cat(diff.path, commit.token)
5
- end
6
-
7
- def cat_file_parent(commit, diff)
8
- cat(diff.path, commit.token.to_i-1)
9
- end
10
-
11
- def cat(path, revision)
12
- begin
13
- run "svn cat --trust-server-cert --non-interactive -r #{revision} '#{SvnAdapter.uri_encode(File.join(self.root, self.branch_name.to_s, path.to_s))}@#{revision}'"
14
- rescue
15
- raise unless $!.message =~ /svn:.*Could not cat all targets because some targets (don't exist|are directories)/
16
- end
17
- end
18
- end
19
- end
@@ -1,195 +0,0 @@
1
- require 'rexml/document'
2
-
3
- module OhlohScm::Adapters
4
- class SvnAdapter < AbstractAdapter
5
-
6
- # In all commit- and log-related methods, 'after' refers to the revision
7
- # number of the last known commit, and the methods return the commits
8
- # *following* this commit.
9
- #
10
- # Examples:
11
- # commits(1) => [rev 2, rev 3, ..., HEAD]
12
- # commits(3) => [rev 4, rev 5, ..., HEAD]
13
- #
14
- # This is convenient for Ohloh -- Ohloh passes the last commit it is aware
15
- # of, and these methods return any new commits.
16
-
17
- # The last revision to be analyzed in this repository. Everything after this revision is ignored.
18
- # The repository is considered to be retired after this point, and under no circumstances should
19
- # this adapter ever return information regarding commits after this point.
20
- attr_accessor :final_token
21
-
22
- # Returns the count of commits following revision number 'after'.
23
- def commit_count(opts={})
24
- after = (opts[:after] || 0).to_i
25
- return 0 if final_token && after >= final_token
26
- run("svn log --trust-server-cert --non-interactive -q -r #{after.to_i + 1}:#{final_token || 'HEAD'} --stop-on-copy '#{SvnAdapter.uri_encode(File.join(root, branch_name.to_s))}@#{final_token || 'HEAD'}' | grep -E -e '^r[0-9]+ ' | wc -l").strip.to_i
27
- end
28
-
29
- # Returns an array of revision numbers for all commits following revision number 'after'.
30
- def commit_tokens(opts={})
31
- after = (opts[:after] || 0).to_i
32
- return [] if final_token && after >= final_token
33
- cmd = "svn log --trust-server-cert --non-interactive -q -r #{after + 1}:#{final_token || 'HEAD'} --stop-on-copy '#{SvnAdapter.uri_encode(File.join(root, branch_name.to_s))}@#{final_token || 'HEAD'}' | grep -E -e '^r[0-9]+ ' | cut -f 1 -d '|' | cut -c 2-"
34
- run(cmd).split.collect { |r| r.to_i }
35
- end
36
-
37
- # Returns an array of commits following revision number 'after'.
38
- # These commit objects do not include diffs.
39
- def commits(opts={})
40
- list = []
41
- open_log_file(opts) do |io|
42
- list = OhlohScm::Parsers::SvnXmlParser.parse(io)
43
- end
44
- list.each { |c| c.scm = self }
45
- end
46
-
47
- # Yields each commit following revision number 'after'. These commit object are populated with diffs.
48
- #
49
- # With Subversion, populating the diffs can be tricky because when an entire directory is affected,
50
- # Subversion abbreviates the log by simply listing the directory name, rather than all of the directory
51
- # contents. Since Ohloh requires the list of every individual file affected, and doesn't care about
52
- # directories, the complexity (and time) of this method comes in expanding directories with a recursion
53
- # through every file in the directory.
54
- #
55
- def each_commit(opts={})
56
- commit_tokens(opts).each do |rev|
57
- yield verbose_commit(rev)
58
- end
59
- end
60
-
61
- # For a given commit, replace any diffs that point to directories with diffs for each file that
62
- # the directory contains.
63
- def deepen_commit(commit)
64
- deep_commit = commit.clone
65
- if commit.diffs
66
- deep_commit.diffs = commit.diffs.collect do |diff|
67
- deepen_diff(diff, commit.token)
68
- end.compact.flatten.uniq.sort { |a,b| a.action <=> b.action }.sort { |a,b| a.path <=> b.path }
69
- end
70
-
71
- remove_dupes(deep_commit)
72
- end
73
-
74
- def remove_dupes(commit)
75
- # Strange case correction.
76
- #
77
- # Subversion may report that a directory is added, and then also that a file within that directory is modified.
78
- # Because we expand directories, the result is that the file may be listed twice -- once as part of our expansion,
79
- # and once from the regular log entry.
80
- #
81
- # So look for diffs of the form ["M", "path"] which are matched by ["A", "path"], and keep only the "A" diff.
82
- if commit.diffs
83
- commit.diffs.delete_if do |d|
84
- d && d.action =~ /[MR]/ && commit.diffs.select { |x| x.action == 'A' and x.path == d.path }.any?
85
- end
86
- end
87
- commit
88
- end
89
-
90
- # If the diff points to a file, simply returns the diff.
91
- # If the diff points to a directory, returns an array of diffs for every file in the directory.
92
- def deepen_diff(diff, rev)
93
- # Note that if the directory was deleted, we have to look at the previous revision to see what it held.
94
- recurse_rev = (diff.action == 'D') ? rev-1 : rev
95
-
96
- if (diff.action == 'D' or diff.action == 'A') && is_directory?(diff.path, recurse_rev)
97
- # Deleting or adding a directory. Expand it out to show every file.
98
- recurse_files(diff.path, recurse_rev).collect do |f|
99
- OhlohScm::Diff.new(:action => diff.action, :path => File.join(diff.path, f))
100
- end
101
- else
102
- # An ordinary file action. Just return the diff.
103
- diff
104
- end
105
- end
106
-
107
- # Strip all paths in this commit to remove the leading branch_name.
108
- # Throw away any diffs in the commit that don't lie in the branch_name we care about.
109
- def strip_commit_branch(commit)
110
- stripped_commit = commit.clone
111
- if commit.diffs
112
- stripped_commit.diffs = commit.diffs.collect { |d| strip_diff_branch(d) }.compact
113
- end
114
- stripped_commit
115
- end
116
-
117
- # Return a new diff whose path excludes the leading branch_name.
118
- # If the diff is not in the branch, return nil.
119
- def strip_diff_branch(diff)
120
- stripped_diff = diff.clone
121
- stripped_diff.path = strip_path_branch(diff.path)
122
- stripped_diff.path && stripped_diff
123
- end
124
-
125
- # Returns only the portion of the path following branch_name.
126
- # Returns nil if the path is not within the branch.
127
- def strip_path_branch(path)
128
- if path == self.branch_name.to_s
129
- ''
130
- else
131
- $1 if path =~ /^#{Regexp.escape(self.branch_name.to_s)}(\/.*)$/
132
- end
133
- end
134
-
135
- def verbose_commit(rev)
136
- c = OhlohScm::Parsers::SvnXmlParser.parse(single_revision_xml(rev)).first
137
- c.scm = self
138
- deepen_commit(strip_commit_branch(c))
139
- end
140
-
141
- #---------------------------------------------------------------------
142
- # Log-related code ; get log for entire file or single revision
143
- #---------------------------------------------------------------------
144
-
145
- def log(opts={})
146
- after = (opts[:after] || 0).to_i
147
- run "svn log --trust-server-cert --non-interactive --xml --stop-on-copy -r #{after.to_i + 1}:#{final_token || 'HEAD'} '#{SvnAdapter.uri_encode(File.join(self.root, self.branch_name.to_s))}@#{final_token || 'HEAD'}' #{opt_auth} | #{ string_encoder }"
148
- end
149
-
150
- def open_log_file(opts={})
151
- after = (opts[:after] || 0).to_i
152
- begin
153
- if (final_token && after >= final_token) || after >= head_token
154
- # As a time optimization, just create an empty file rather than fetch a log we know will be empty.
155
- File.open(log_filename, 'w') { |f| f.puts '<?xml version="1.0"?>' }
156
- else
157
- run "svn log --trust-server-cert --non-interactive --xml --stop-on-copy -r #{after + 1}:#{final_token || 'HEAD'} '#{SvnAdapter.uri_encode(File.join(self.root, self.branch_name))}@#{final_token || 'HEAD'}' #{opt_auth} | #{ string_encoder } > #{log_filename}"
158
- end
159
- File.open(log_filename, 'r') { |io| yield io }
160
- ensure
161
- File.delete(log_filename) if FileTest.exist?(log_filename)
162
- end
163
- end
164
-
165
- def log_filename
166
- File.join(temp_folder, (self.url).gsub(/\W/,'') + '.log')
167
- end
168
-
169
- # Returns one commit with the exact revision number provided
170
- def single_revision_xml(revision)
171
- run "svn log --trust-server-cert --non-interactive --verbose --xml --stop-on-copy -r #{revision} --limit 1 #{opt_auth} '#{SvnAdapter.uri_encode(File.join(self.root, self.branch_name))}@#{revision}' | #{ string_encoder }"
172
- end
173
-
174
- # Recurses the entire repository and returns an array of file names.
175
- # Directories are not returned.
176
- # Directories named 'CVSROOT' are always ignored and the files they contain are never returned.
177
- # An empty array means that the call succeeded, but the remote directory is empty.
178
- # A nil result means that the call failed and the remote server could not be queried.
179
- def recurse_files(path=nil, revision=final_token || 'HEAD')
180
- begin
181
- stdout = run "svn ls --trust-server-cert --non-interactive -r #{revision} --recursive #{opt_auth} '#{SvnAdapter.uri_encode(File.join(root, branch_name.to_s, path.to_s))}@#{revision}'"
182
- rescue
183
- puts $!.inspect
184
- return nil
185
- end
186
-
187
- files = []
188
- stdout.each_line do |s|
189
- s.chomp!.force_encoding('UTF-8')
190
- files << s if s.length > 0 and s !~ /CVSROOT\// and s[-1..-1] != '/'
191
- end
192
- files.sort
193
- end
194
- end
195
- end
@@ -1,19 +0,0 @@
1
- module OhlohScm::Adapters
2
- class SvnAdapter < AbstractAdapter
3
- def head_token
4
- self.info =~ /^Revision: (\d+)$/ ? $1.to_i : nil
5
- end
6
-
7
- def head
8
- verbose_commit("HEAD")
9
- end
10
-
11
- def parents(commit)
12
- # Subversion doesn't have an actual "parent" command, so get
13
- # a log for this commit and the one preceding it, and keep only the preceding.
14
- log = run "svn log --trust-server-cert --non-interactive --verbose --xml --stop-on-copy -r #{commit.token}:1 --limit 2 '#{SvnAdapter.uri_encode(self.url)}' #{opt_auth} | #{ string_encoder }"
15
- [deepen_commit(strip_commit_branch(OhlohScm::Parsers::SvnXmlParser.parse(log).last))]
16
- end
17
- end
18
- end
19
-
@@ -1,171 +0,0 @@
1
- require 'open-uri'
2
- require 'nokogiri'
3
-
4
- module OhlohScm::Adapters
5
- class SvnAdapter < AbstractAdapter
6
- # Converts an URL of form file://local/path to simply /local/path.
7
- def path
8
- case url
9
- when /^file:\/\/(.*)/
10
- $1
11
- when /^svn\+ssh:\/\/([^\/]+)(\/.+)/
12
- $2
13
- end
14
- end
15
-
16
- def hostname
17
- $1 if url =~ /^svn\+ssh:\/\/([^\/]+)(\/.+)/
18
- end
19
-
20
- # Does some simple searching through the server's directory tree for a
21
- # good canditate for the trunk. Basically, we are looking for a trunk
22
- # in order to avoid the heavy lifting of processing all the branches and tags.
23
- #
24
- # There are two simple rules to the search:
25
- # (1) If the current directory contains a subdirectory named 'trunk', go there.
26
- # (2) If the current directory is empty except for a single subdirectory, go there.
27
- # Repeat until neither rule is satisfied.
28
- #
29
- # The url and branch_name of this object will be updated with the selected location.
30
- # The url will be unmodified if there is a problem connecting to the server.
31
- def restrict_url_to_trunk
32
- return self.url if self.url =~ /\/trunk\/?$/
33
-
34
- list = ls
35
- return self.url unless list
36
-
37
- if list.include? 'trunk/'
38
- self.url = File.join(self.url, 'trunk')
39
- self.branch_name = File.join(self.branch_name, 'trunk')
40
- elsif list.size == 1 and list.first[-1..-1] == '/'
41
- self.url = File.join(self.url, list.first[0..-2])
42
- self.branch_name = File.join(self.branch_name, list.first[0..-2])
43
- return restrict_url_to_trunk
44
- end
45
- self.url
46
- end
47
-
48
- # It appears that the default URI encoder does not encode some characters.
49
- # This fixes it for us.
50
- def self.uri_encode(uri)
51
- URI.encode(uri,/#{URI::UNSAFE}|[\[\]';\? ]/) # Add [ ] ' ; ? and space
52
- end
53
-
54
- def exist?
55
- begin
56
- !!(head_token)
57
- rescue
58
- logger.debug { $! }
59
- false
60
- end
61
- end
62
-
63
- def info(path=nil, revision=final_token || 'HEAD')
64
- @info ||= {}
65
- uri = if path
66
- File.join(root, branch_name.to_s, path)
67
- else
68
- url
69
- end
70
- @info[[path, revision]] ||= run "svn info --trust-server-cert --non-interactive -r #{revision} #{opt_auth} '#{SvnAdapter.uri_encode(uri)}@#{revision}'"
71
- end
72
-
73
- def root
74
- $1 if self.info =~ /^Repository Root: (.+)$/
75
- end
76
-
77
- def uuid
78
- $1 if self.info =~ /^Repository UUID: (.+)$/
79
- end
80
-
81
- # Returns an array of file and directory names.
82
- # Directory names will end with a trailing '/' character.
83
- # Directories named 'CVSROOT' are always ignored and never returned.
84
- # An empty array means that the call succeeded, but the remote directory is empty.
85
- # A nil result means that the call failed and the remote server could not be queried.
86
- def ls(path=nil, revision=final_token || 'HEAD')
87
- begin
88
- stdout = run "svn ls --trust-server-cert --non-interactive -r #{revision} #{opt_auth} '#{SvnAdapter.uri_encode(File.join(root, branch_name.to_s, path.to_s))}@#{revision}'"
89
- rescue
90
- return nil
91
- end
92
-
93
- files = []
94
- stdout.each_line do |s|
95
- s.chomp!
96
- files << s if s.length > 0 and s != 'CVSROOT/'
97
- end
98
- files.sort
99
- end
100
-
101
- def node_kind(path=nil, revision=final_token || 'HEAD')
102
- $1 if self.info(path, revision) =~ /Node Kind: (\w+)\W/
103
- end
104
-
105
- def is_directory?(path=nil, revision=final_token || 'HEAD')
106
- begin
107
- return node_kind(path, revision) == 'directory'
108
- rescue Exception
109
- if $!.message =~ /svn: E200009: Could not display info for all targets because some targets don't exist/
110
- return false
111
- else
112
- raise
113
- end
114
- end
115
- end
116
-
117
- def checkout(rev, dest_dir)
118
- FileUtils.mkdir_p(File.dirname(dest_dir)) unless FileTest.exist?(File.dirname(dest_dir))
119
- run "svn checkout --trust-server-cert --non-interactive -r #{rev.token} '#{SvnAdapter.uri_encode(self.url)}@#{rev.token}' '#{dest_dir}' --ignore-externals #{opt_auth}"
120
- end
121
-
122
- def export(dest_dir, commit_id = final_token || 'HEAD')
123
- FileUtils.mkdir_p(File.dirname(dest_dir)) unless FileTest.exist?(File.dirname(dest_dir))
124
- run "svn export --trust-server-cert --non-interactive --ignore-externals --force -r #{commit_id} '#{SvnAdapter.uri_encode(File.join(root, branch_name.to_s))}' '#{dest_dir}'"
125
- end
126
-
127
- def export_tag(dest_dir, tag_name)
128
- tag_url = "#{base_path}/tags/#{tag_name}"
129
- run "svn export --trust-server-cert --non-interactive --ignore-externals --force '#{tag_url}' '#{dest_dir}'"
130
- end
131
-
132
- def ls_tree(token)
133
- run("svn ls --trust-server-cert --non-interactive -R -r #{token} '#{SvnAdapter.uri_encode(File.join(root, branch_name.to_s))}@#{token}'").split("\n")
134
- end
135
-
136
- def opt_auth
137
- opt_password = ""
138
- opt_password = "--username='#{self.username}' --password='#{self.password}'" if self.username && self.username != ''
139
- " #{opt_password} --no-auth-cache "
140
- end
141
-
142
- # Svn root is not usable here since several projects are nested in subfolders.
143
- # e.g. https://svn.apache.org/repos/asf/openoffice/ooo-site/trunk/
144
- # http://svn.apache.org/repos/asf/httpd/httpd/trunk
145
- # http://svn.apache.org/repos/asf/maven/plugin-testing/trunk
146
- # all have the same root value(https://svn.apache.org/repos/asf)
147
- def tags
148
- doc = Nokogiri::XML(`svn ls --xml #{ base_path}/tags`)
149
- doc.xpath('//lists/list/entry').map do |entry|
150
- tag_name = entry.xpath('name').text
151
- revision = entry.xpath('commit').attr('revision').text
152
- commit_time = entry.xpath("commit/date").text
153
- date_string = Time.parse(commit_time) unless commit_time.to_s.strip.empty?
154
- [tag_name, revision, date_string]
155
- end
156
- end
157
-
158
- class << self
159
- def has_conflicts?(working_copy_url)
160
- system("cd '#{ working_copy_url }' && svn status | grep 'Summary of conflicts'")
161
- end
162
- end
163
-
164
- private
165
-
166
- def base_path
167
- url.sub(/(.*)(branches|trunk|tags)(.*)/, '\1').chomp('/')
168
- end
169
-
170
- end
171
- end
@@ -1,8 +0,0 @@
1
- module OhlohScm::Adapters
2
- class SvnAdapter < AbstractAdapter
3
- def patch_for_commit(commit)
4
- parent = commit.token.to_i - 1
5
- run("svn diff --trust-server-cert --non-interactive -r#{parent}:#{commit.token} #{url}")
6
- end
7
- end
8
- end