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.
- checksums.yaml +5 -5
- data/{bin → .bin}/accept_svn_ssl_certificate +0 -0
- data/.bin/check_scm_version +28 -0
- data/.bin/run-test +3 -0
- data/.bin/run-tests +3 -0
- data/{bin → .bin}/string_encoder +0 -0
- data/.git_hooks/pre-commit +20 -0
- data/.gitignore +1 -4
- data/.rubocop.yml +13 -0
- data/.ruby-version +1 -2
- data/.travis.yml +3 -2
- data/Dockerfile +8 -4
- data/Gemfile +14 -0
- data/Gemfile.lock +54 -0
- data/{COPYING → LICENSE.txt} +0 -0
- data/README.md +52 -116
- data/Rakefile +7 -29
- data/lib/ohloh_scm.rb +26 -32
- data/lib/ohloh_scm/activity.rb +38 -0
- data/lib/ohloh_scm/bzr.rb +12 -0
- data/lib/ohloh_scm/bzr/activity.rb +191 -0
- data/lib/ohloh_scm/bzr/scm.rb +24 -0
- data/lib/ohloh_scm/bzr/status.rb +8 -0
- data/lib/ohloh_scm/bzr/validation.rb +18 -0
- data/lib/ohloh_scm/commit.rb +44 -41
- data/lib/ohloh_scm/core.rb +22 -0
- data/lib/ohloh_scm/cvs.rb +11 -0
- data/lib/ohloh_scm/cvs/activity.rb +149 -0
- data/lib/ohloh_scm/cvs/scm.rb +149 -0
- data/lib/ohloh_scm/cvs/status.rb +14 -0
- data/lib/ohloh_scm/cvs/validation.rb +106 -0
- data/lib/ohloh_scm/data/git_ignore_list.rb +29 -0
- data/lib/ohloh_scm/diff.rb +42 -39
- data/lib/ohloh_scm/factory.rb +11 -0
- data/lib/ohloh_scm/git.rb +11 -0
- data/lib/ohloh_scm/git/activity.rb +317 -0
- data/lib/ohloh_scm/git/scm.rb +137 -0
- data/lib/ohloh_scm/git/status.rb +13 -0
- data/lib/ohloh_scm/git/validation.rb +18 -0
- data/lib/ohloh_scm/git_svn.rb +11 -0
- data/lib/ohloh_scm/git_svn/activity.rb +84 -0
- data/lib/ohloh_scm/git_svn/scm.rb +91 -0
- data/lib/ohloh_scm/git_svn/status.rb +8 -0
- data/lib/ohloh_scm/git_svn/validation.rb +8 -0
- data/lib/ohloh_scm/hg.rb +12 -0
- data/lib/ohloh_scm/hg/activity.rb +188 -0
- data/lib/ohloh_scm/hg/scm.rb +51 -0
- data/lib/ohloh_scm/hg/status.rb +8 -0
- data/lib/ohloh_scm/hg/validation.rb +18 -0
- data/lib/ohloh_scm/parser.rb +30 -0
- data/lib/ohloh_scm/parser/array_writer.rb +15 -0
- data/lib/ohloh_scm/parser/branch_number.rb +63 -0
- data/lib/ohloh_scm/{parsers → parser}/bzr_xml_parser.rb +65 -55
- data/lib/ohloh_scm/parser/cvs_parser.rb +161 -0
- data/lib/ohloh_scm/parser/git_parser.rb +128 -0
- data/lib/ohloh_scm/parser/hg_parser.rb +78 -0
- data/lib/ohloh_scm/{parsers → parser}/hg_style +0 -0
- data/lib/ohloh_scm/{parsers → parser}/hg_verbose_style +0 -0
- data/lib/ohloh_scm/parser/svn_parser.rb +83 -0
- data/lib/ohloh_scm/py_bridge.rb +9 -0
- data/lib/ohloh_scm/py_bridge/bzr_client.rb +28 -0
- data/lib/ohloh_scm/{adapters/bzrlib/bzrlib_pipe_server.py → py_bridge/bzr_server.py} +1 -1
- data/lib/ohloh_scm/py_bridge/hg_client.rb +30 -0
- data/lib/ohloh_scm/{adapters/hglib/server.py → py_bridge/hg_server.py} +0 -0
- data/lib/ohloh_scm/py_bridge/py_client.rb +45 -0
- data/lib/ohloh_scm/scm.rb +26 -0
- data/lib/ohloh_scm/status.rb +24 -0
- data/lib/ohloh_scm/string_extensions.rb +11 -0
- data/lib/ohloh_scm/svn.rb +11 -0
- data/lib/ohloh_scm/svn/activity.rb +95 -0
- data/lib/ohloh_scm/svn/scm.rb +95 -0
- data/lib/ohloh_scm/svn/status.rb +8 -0
- data/lib/ohloh_scm/svn/validation.rb +56 -0
- data/lib/ohloh_scm/system.rb +44 -0
- data/lib/ohloh_scm/validation.rb +83 -0
- data/lib/ohloh_scm/version.rb +8 -1
- data/ohloh_scm.gemspec +18 -15
- data/spec/.rubocop.yml +22 -0
- data/spec/benchmarks/hg_bzr_bash_vs_py_api.rb +39 -0
- data/spec/benchmarks/process_spawn_benchmark.rb +133 -0
- data/spec/helpers/assert_scm_attr_helper.rb +31 -0
- data/spec/helpers/commit_tokens_helper.rb +26 -0
- data/spec/helpers/generic_helper.rb +5 -0
- data/spec/helpers/repository_helper.rb +36 -0
- data/spec/helpers/system_helper.rb +25 -0
- data/spec/ohloh_scm/bzr/activity_spec.rb +460 -0
- data/spec/ohloh_scm/bzr/scm_spec.rb +17 -0
- data/spec/ohloh_scm/bzr/validation_spec.rb +37 -0
- data/spec/ohloh_scm/cvs/activity_spec.rb +93 -0
- data/spec/ohloh_scm/cvs/scm_spec.rb +112 -0
- data/spec/ohloh_scm/cvs/validation_spec.rb +78 -0
- data/spec/ohloh_scm/factory_spec.rb +16 -0
- data/spec/ohloh_scm/git/activity_spec.rb +402 -0
- data/spec/ohloh_scm/git/scm_spec.rb +57 -0
- data/spec/ohloh_scm/git/status_spec.rb +11 -0
- data/spec/ohloh_scm/git/validation_spec.rb +57 -0
- data/spec/ohloh_scm/git_svn/activity_spec.rb +89 -0
- data/spec/ohloh_scm/git_svn/scm_spec.rb +22 -0
- data/spec/ohloh_scm/hg/activity_spec.rb +323 -0
- data/spec/ohloh_scm/hg/scm_spec.rb +23 -0
- data/spec/ohloh_scm/hg/status_spec.rb +12 -0
- data/spec/ohloh_scm/hg/validation_spec.rb +32 -0
- data/spec/ohloh_scm/parser/array_writer_spec.rb +29 -0
- data/spec/ohloh_scm/parser/branch_number_spec.rb +126 -0
- data/spec/ohloh_scm/parser/cvs_parser_spec.rb +77 -0
- data/spec/ohloh_scm/parser/git_parser_spec.rb +102 -0
- data/spec/ohloh_scm/parser/hg_parser_spec.rb +194 -0
- data/spec/ohloh_scm/svn/activity_spec.rb +55 -0
- data/spec/ohloh_scm/svn/scm_spec.rb +75 -0
- data/spec/ohloh_scm/svn/validation_spec.rb +89 -0
- data/spec/ohloh_scm/svn_parser_spec.rb +146 -0
- data/spec/ohloh_scm/system_spec.rb +32 -0
- data/spec/ohloh_scm/version_spec.rb +9 -0
- data/{test/data → spec/raw_fixtures}/basic.rlog +0 -0
- data/{test/data → spec/raw_fixtures}/file_created_on_branch.rlog +0 -0
- data/{test/data → spec/raw_fixtures}/invalid-utf-word +0 -0
- data/{test/data → spec/raw_fixtures}/multiple_revisions.rlog +0 -0
- data/{test/data → spec/raw_fixtures}/sample-content +0 -0
- data/{test/data → spec/raw_fixtures}/simple.ohlog +1 -1
- data/{test/data → spec/raw_fixtures}/simple.svn_log +0 -0
- data/{test/data → spec/raw_fixtures}/simultaneous_checkins.rlog +0 -0
- data/{test/data → spec/raw_fixtures}/simultaneous_checkins_2.rlog +0 -0
- data/spec/scm_fixtures/bzr.tgz +0 -0
- data/{test/repositories → spec/scm_fixtures}/bzr_colon.tgz +0 -0
- data/spec/scm_fixtures/bzr_large.tgz +0 -0
- data/spec/scm_fixtures/bzr_with_authors.tgz +0 -0
- data/spec/scm_fixtures/bzr_with_branch.tgz +0 -0
- data/{test/repositories → spec/scm_fixtures}/bzr_with_invalid_encoding.tgz +0 -0
- data/spec/scm_fixtures/bzr_with_nested_branches.tgz +0 -0
- data/spec/scm_fixtures/bzr_with_subdirectories.tgz +0 -0
- data/{test/repositories → spec/scm_fixtures}/cvs.tgz +0 -0
- data/{test/repositories → spec/scm_fixtures}/git.tgz +0 -0
- data/{test/repositories → spec/scm_fixtures}/git_dupe_delete.tgz +0 -0
- data/{test/repositories → spec/scm_fixtures}/git_svn.tgz +0 -0
- data/{test/repositories → spec/scm_fixtures}/git_walk.tgz +0 -0
- data/{test/repositories → spec/scm_fixtures}/git_with_invalid_encoding.tgz +0 -0
- data/{test/repositories → spec/scm_fixtures}/git_with_master_tag.tgz +0 -0
- data/{test/repositories → spec/scm_fixtures}/git_with_multiple_branch.tgz +0 -0
- data/spec/scm_fixtures/git_with_mv.tgz +0 -0
- data/{test/repositories → spec/scm_fixtures}/git_with_null_merge.tgz +0 -0
- data/spec/scm_fixtures/git_with_submodules.tgz +0 -0
- data/{test/repositories → spec/scm_fixtures}/hg.tgz +0 -0
- data/{test/repositories → spec/scm_fixtures}/hg_dupe_delete.tgz +0 -0
- data/spec/scm_fixtures/hg_large.tgz +0 -0
- data/{test/repositories → spec/scm_fixtures}/hg_walk.tgz +0 -0
- data/{test/repositories → spec/scm_fixtures}/hg_with_invalid_encoding.tgz +0 -0
- data/spec/scm_fixtures/svn.tgz +0 -0
- data/spec/scm_fixtures/svn_subdir.tgz +0 -0
- data/spec/spec_helper.rb +32 -0
- data/spec/string_encoder_spec.rb +32 -0
- metadata +224 -1052
- data/bin/ohlog +0 -152
- data/lib/ohloh_scm/adapters/abstract/misc.rb +0 -12
- data/lib/ohloh_scm/adapters/abstract/sha1.rb +0 -48
- data/lib/ohloh_scm/adapters/abstract/system.rb +0 -60
- data/lib/ohloh_scm/adapters/abstract/validation.rb +0 -77
- data/lib/ohloh_scm/adapters/abstract_adapter.rb +0 -32
- data/lib/ohloh_scm/adapters/bzr/cat_file.rb +0 -25
- data/lib/ohloh_scm/adapters/bzr/commits.rb +0 -100
- data/lib/ohloh_scm/adapters/bzr/head.rb +0 -19
- data/lib/ohloh_scm/adapters/bzr/misc.rb +0 -61
- data/lib/ohloh_scm/adapters/bzr/pull.rb +0 -22
- data/lib/ohloh_scm/adapters/bzr/push.rb +0 -51
- data/lib/ohloh_scm/adapters/bzr/validation.rb +0 -16
- data/lib/ohloh_scm/adapters/bzr_adapter.rb +0 -15
- data/lib/ohloh_scm/adapters/bzrlib/bzrlib_pipe_client.rb +0 -71
- data/lib/ohloh_scm/adapters/bzrlib/cat_file.rb +0 -9
- data/lib/ohloh_scm/adapters/bzrlib/head.rb +0 -9
- data/lib/ohloh_scm/adapters/bzrlib_adapter.rb +0 -25
- data/lib/ohloh_scm/adapters/cvs/commits.rb +0 -97
- data/lib/ohloh_scm/adapters/cvs/misc.rb +0 -212
- data/lib/ohloh_scm/adapters/cvs/validation.rb +0 -77
- data/lib/ohloh_scm/adapters/cvs_adapter.rb +0 -18
- data/lib/ohloh_scm/adapters/factory.rb +0 -38
- data/lib/ohloh_scm/adapters/git/cat_file.rb +0 -16
- data/lib/ohloh_scm/adapters/git/commit_all.rb +0 -141
- data/lib/ohloh_scm/adapters/git/commits.rb +0 -122
- data/lib/ohloh_scm/adapters/git/head.rb +0 -21
- data/lib/ohloh_scm/adapters/git/misc.rb +0 -107
- data/lib/ohloh_scm/adapters/git/patch.rb +0 -9
- data/lib/ohloh_scm/adapters/git/pull.rb +0 -124
- data/lib/ohloh_scm/adapters/git/push.rb +0 -39
- data/lib/ohloh_scm/adapters/git/token.rb +0 -53
- data/lib/ohloh_scm/adapters/git/validation.rb +0 -50
- data/lib/ohloh_scm/adapters/git_adapter.rb +0 -18
- data/lib/ohloh_scm/adapters/git_svn/cat_file.rb +0 -22
- data/lib/ohloh_scm/adapters/git_svn/commits.rb +0 -57
- data/lib/ohloh_scm/adapters/git_svn/head.rb +0 -9
- data/lib/ohloh_scm/adapters/git_svn/misc.rb +0 -24
- data/lib/ohloh_scm/adapters/git_svn/pull.rb +0 -80
- data/lib/ohloh_scm/adapters/git_svn_adapter.rb +0 -13
- data/lib/ohloh_scm/adapters/hg/cat_file.rb +0 -28
- data/lib/ohloh_scm/adapters/hg/commits.rb +0 -112
- data/lib/ohloh_scm/adapters/hg/head.rb +0 -29
- data/lib/ohloh_scm/adapters/hg/misc.rb +0 -40
- data/lib/ohloh_scm/adapters/hg/patch.rb +0 -9
- data/lib/ohloh_scm/adapters/hg/pull.rb +0 -23
- data/lib/ohloh_scm/adapters/hg/push.rb +0 -51
- data/lib/ohloh_scm/adapters/hg/validation.rb +0 -26
- data/lib/ohloh_scm/adapters/hg_adapter.rb +0 -21
- data/lib/ohloh_scm/adapters/hglib/cat_file.rb +0 -14
- data/lib/ohloh_scm/adapters/hglib/client.rb +0 -62
- data/lib/ohloh_scm/adapters/hglib/head.rb +0 -9
- data/lib/ohloh_scm/adapters/hglib_adapter.rb +0 -25
- data/lib/ohloh_scm/adapters/svn/cat_file.rb +0 -19
- data/lib/ohloh_scm/adapters/svn/commits.rb +0 -195
- data/lib/ohloh_scm/adapters/svn/head.rb +0 -19
- data/lib/ohloh_scm/adapters/svn/misc.rb +0 -171
- data/lib/ohloh_scm/adapters/svn/patch.rb +0 -8
- data/lib/ohloh_scm/adapters/svn/pre-revprop-change +0 -2
- data/lib/ohloh_scm/adapters/svn/pull.rb +0 -77
- data/lib/ohloh_scm/adapters/svn/push.rb +0 -15
- data/lib/ohloh_scm/adapters/svn/validation.rb +0 -87
- data/lib/ohloh_scm/adapters/svn_adapter.rb +0 -17
- data/lib/ohloh_scm/adapters/svn_chain/cat_file.rb +0 -8
- data/lib/ohloh_scm/adapters/svn_chain/chain.rb +0 -100
- data/lib/ohloh_scm/adapters/svn_chain/commits.rb +0 -37
- data/lib/ohloh_scm/adapters/svn_chain_adapter.rb +0 -44
- data/lib/ohloh_scm/parsers/array_writer.rb +0 -19
- data/lib/ohloh_scm/parsers/branch_number.rb +0 -60
- data/lib/ohloh_scm/parsers/bzr_parser.rb +0 -128
- data/lib/ohloh_scm/parsers/cvs_parser.rb +0 -182
- data/lib/ohloh_scm/parsers/git_parser.rb +0 -67
- data/lib/ohloh_scm/parsers/git_styled_parser.rb +0 -95
- data/lib/ohloh_scm/parsers/hg_parser.rb +0 -63
- data/lib/ohloh_scm/parsers/hg_styled_parser.rb +0 -65
- data/lib/ohloh_scm/parsers/human_writer.rb +0 -49
- data/lib/ohloh_scm/parsers/parser.rb +0 -34
- data/lib/ohloh_scm/parsers/svn_parser.rb +0 -77
- data/lib/ohloh_scm/parsers/svn_xml_parser.rb +0 -62
- data/lib/ohloh_scm/parsers/xml_writer.rb +0 -62
- data/lib/ohloh_scm/scratch_dir.rb +0 -59
- data/lib/ohloh_scm/shellout.rb +0 -40
- data/log/.gitignore +0 -1
- data/test/bin/svn +0 -7
- data/test/data/basic.ohlog +0 -11
- data/test/data/branch_merge.bzr_xml_log +0 -87
- data/test/data/git_patch.diff +0 -19
- data/test/data/helloworld.log +0 -41
- data/test/data/hg_patch.diff +0 -9
- data/test/data/intelliglue.rlog +0 -1216
- data/test/data/multiple_commits.rlog +0 -64
- data/test/data/simple.bzr_xml_log +0 -41
- data/test/data/simple.svn_xml_log +0 -66
- data/test/data/svn_patch.diff +0 -9
- data/test/data/svn_with_invalid_encoding.log +0 -33
- data/test/repositories/bzr/.bzr/README +0 -3
- data/test/repositories/bzr/.bzr/branch-format +0 -1
- data/test/repositories/bzr/.bzr/branch/branch.conf +0 -0
- data/test/repositories/bzr/.bzr/branch/format +0 -1
- data/test/repositories/bzr/.bzr/branch/last-revision +0 -1
- data/test/repositories/bzr/.bzr/branch/tags +0 -1
- data/test/repositories/bzr/.bzr/checkout/conflicts +0 -1
- data/test/repositories/bzr/.bzr/checkout/dirstate +0 -0
- data/test/repositories/bzr/.bzr/checkout/format +0 -1
- data/test/repositories/bzr/.bzr/repository/format +0 -1
- data/test/repositories/bzr/.bzr/repository/indices/0428489d1a03d05c496c2c429fe96e90.iix +0 -0
- data/test/repositories/bzr/.bzr/repository/indices/0428489d1a03d05c496c2c429fe96e90.rix +0 -0
- data/test/repositories/bzr/.bzr/repository/indices/0428489d1a03d05c496c2c429fe96e90.six +0 -5
- data/test/repositories/bzr/.bzr/repository/indices/0428489d1a03d05c496c2c429fe96e90.tix +0 -0
- data/test/repositories/bzr/.bzr/repository/indices/62f9cada7c58bce361b9b852d180ff56.iix +0 -0
- data/test/repositories/bzr/.bzr/repository/indices/62f9cada7c58bce361b9b852d180ff56.rix +0 -0
- data/test/repositories/bzr/.bzr/repository/indices/62f9cada7c58bce361b9b852d180ff56.six +0 -5
- data/test/repositories/bzr/.bzr/repository/indices/62f9cada7c58bce361b9b852d180ff56.tix +0 -0
- data/test/repositories/bzr/.bzr/repository/indices/71af8bae249bcb824a4ff17c62029142.iix +0 -0
- data/test/repositories/bzr/.bzr/repository/indices/71af8bae249bcb824a4ff17c62029142.rix +0 -0
- data/test/repositories/bzr/.bzr/repository/indices/71af8bae249bcb824a4ff17c62029142.six +0 -5
- data/test/repositories/bzr/.bzr/repository/indices/71af8bae249bcb824a4ff17c62029142.tix +0 -0
- data/test/repositories/bzr/.bzr/repository/indices/7202eb77b81a80eca5296f317ed42149.iix +0 -0
- data/test/repositories/bzr/.bzr/repository/indices/7202eb77b81a80eca5296f317ed42149.rix +0 -0
- data/test/repositories/bzr/.bzr/repository/indices/7202eb77b81a80eca5296f317ed42149.six +0 -5
- data/test/repositories/bzr/.bzr/repository/indices/7202eb77b81a80eca5296f317ed42149.tix +0 -5
- data/test/repositories/bzr/.bzr/repository/indices/8a571ba35ee54cd133b71e967442fe17.iix +0 -0
- data/test/repositories/bzr/.bzr/repository/indices/8a571ba35ee54cd133b71e967442fe17.rix +0 -0
- data/test/repositories/bzr/.bzr/repository/indices/8a571ba35ee54cd133b71e967442fe17.six +0 -5
- data/test/repositories/bzr/.bzr/repository/indices/8a571ba35ee54cd133b71e967442fe17.tix +0 -0
- data/test/repositories/bzr/.bzr/repository/indices/a06b9c10004fc3e05affee8cf0a9febd.iix +0 -0
- data/test/repositories/bzr/.bzr/repository/indices/a06b9c10004fc3e05affee8cf0a9febd.rix +0 -0
- data/test/repositories/bzr/.bzr/repository/indices/a06b9c10004fc3e05affee8cf0a9febd.six +0 -5
- data/test/repositories/bzr/.bzr/repository/indices/a06b9c10004fc3e05affee8cf0a9febd.tix +0 -0
- data/test/repositories/bzr/.bzr/repository/indices/f35e1020b6a55c81b6d2fe4c7bcd4645.iix +0 -0
- data/test/repositories/bzr/.bzr/repository/indices/f35e1020b6a55c81b6d2fe4c7bcd4645.rix +0 -0
- data/test/repositories/bzr/.bzr/repository/indices/f35e1020b6a55c81b6d2fe4c7bcd4645.six +0 -5
- data/test/repositories/bzr/.bzr/repository/indices/f35e1020b6a55c81b6d2fe4c7bcd4645.tix +0 -0
- data/test/repositories/bzr/.bzr/repository/pack-names +0 -0
- data/test/repositories/bzr/.bzr/repository/packs/0428489d1a03d05c496c2c429fe96e90.pack +0 -0
- data/test/repositories/bzr/.bzr/repository/packs/62f9cada7c58bce361b9b852d180ff56.pack +0 -0
- data/test/repositories/bzr/.bzr/repository/packs/71af8bae249bcb824a4ff17c62029142.pack +0 -0
- data/test/repositories/bzr/.bzr/repository/packs/7202eb77b81a80eca5296f317ed42149.pack +0 -0
- data/test/repositories/bzr/.bzr/repository/packs/8a571ba35ee54cd133b71e967442fe17.pack +0 -0
- data/test/repositories/bzr/.bzr/repository/packs/a06b9c10004fc3e05affee8cf0a9febd.pack +0 -0
- data/test/repositories/bzr/.bzr/repository/packs/f35e1020b6a55c81b6d2fe4c7bcd4645.pack +0 -0
- data/test/repositories/bzr/.bzr/repository/upload/.gitignore +0 -1
- data/test/repositories/bzr/C/303/251dric.txt +0 -2
- data/test/repositories/bzr/file1.txt +0 -2
- data/test/repositories/bzr/file3.txt +0 -1
- data/test/repositories/bzr/file4.txt +0 -1
- data/test/repositories/bzr/file5.txt +0 -4
- data/test/repositories/bzr_hello_world/.bzr/README +0 -3
- data/test/repositories/bzr_hello_world/.bzr/branch-format +0 -1
- data/test/repositories/bzr_hello_world/.bzr/branch/branch.conf +0 -0
- data/test/repositories/bzr_hello_world/.bzr/branch/format +0 -1
- data/test/repositories/bzr_hello_world/.bzr/branch/last-revision +0 -1
- data/test/repositories/bzr_hello_world/.bzr/branch/tags +0 -0
- data/test/repositories/bzr_hello_world/.bzr/checkout/conflicts +0 -1
- data/test/repositories/bzr_hello_world/.bzr/checkout/dirstate +0 -0
- data/test/repositories/bzr_hello_world/.bzr/checkout/format +0 -1
- data/test/repositories/bzr_hello_world/.bzr/repository/format +0 -1
- data/test/repositories/bzr_hello_world/.bzr/repository/indices/a7cd0d6de5d8b3efdd5f61a4caeda296.iix +0 -0
- data/test/repositories/bzr_hello_world/.bzr/repository/indices/a7cd0d6de5d8b3efdd5f61a4caeda296.rix +0 -0
- data/test/repositories/bzr_hello_world/.bzr/repository/indices/a7cd0d6de5d8b3efdd5f61a4caeda296.six +0 -5
- data/test/repositories/bzr_hello_world/.bzr/repository/indices/a7cd0d6de5d8b3efdd5f61a4caeda296.tix +0 -0
- data/test/repositories/bzr_hello_world/.bzr/repository/indices/ed1e97c1213220a92ff857169867a7b3.iix +0 -0
- data/test/repositories/bzr_hello_world/.bzr/repository/indices/ed1e97c1213220a92ff857169867a7b3.rix +0 -0
- data/test/repositories/bzr_hello_world/.bzr/repository/indices/ed1e97c1213220a92ff857169867a7b3.six +0 -5
- data/test/repositories/bzr_hello_world/.bzr/repository/indices/ed1e97c1213220a92ff857169867a7b3.tix +0 -0
- data/test/repositories/bzr_hello_world/.bzr/repository/pack-names +0 -0
- data/test/repositories/bzr_hello_world/.bzr/repository/packs/a7cd0d6de5d8b3efdd5f61a4caeda296.pack +0 -0
- data/test/repositories/bzr_hello_world/.bzr/repository/packs/ed1e97c1213220a92ff857169867a7b3.pack +0 -0
- data/test/repositories/bzr_hello_world/helloworld.c +0 -6
- data/test/repositories/bzr_with_authors/.bzr/README +0 -3
- data/test/repositories/bzr_with_authors/.bzr/branch-format +0 -1
- data/test/repositories/bzr_with_authors/.bzr/branch/branch.conf +0 -0
- data/test/repositories/bzr_with_authors/.bzr/branch/format +0 -1
- data/test/repositories/bzr_with_authors/.bzr/branch/last-revision +0 -1
- data/test/repositories/bzr_with_authors/.bzr/branch/tags +0 -0
- data/test/repositories/bzr_with_authors/.bzr/checkout/conflicts +0 -1
- data/test/repositories/bzr_with_authors/.bzr/checkout/dirstate +0 -0
- data/test/repositories/bzr_with_authors/.bzr/checkout/format +0 -1
- data/test/repositories/bzr_with_authors/.bzr/checkout/views +0 -0
- data/test/repositories/bzr_with_authors/.bzr/repository/format +0 -1
- data/test/repositories/bzr_with_authors/.bzr/repository/indices/1326ecee2f4f69991771137c5307689a.cix +0 -0
- data/test/repositories/bzr_with_authors/.bzr/repository/indices/1326ecee2f4f69991771137c5307689a.iix +0 -0
- data/test/repositories/bzr_with_authors/.bzr/repository/indices/1326ecee2f4f69991771137c5307689a.rix +0 -6
- data/test/repositories/bzr_with_authors/.bzr/repository/indices/1326ecee2f4f69991771137c5307689a.six +0 -5
- data/test/repositories/bzr_with_authors/.bzr/repository/indices/1326ecee2f4f69991771137c5307689a.tix +0 -0
- data/test/repositories/bzr_with_authors/.bzr/repository/indices/adf730b6cf7c7959afcedb87e155654d.cix +0 -0
- data/test/repositories/bzr_with_authors/.bzr/repository/indices/adf730b6cf7c7959afcedb87e155654d.iix +0 -0
- data/test/repositories/bzr_with_authors/.bzr/repository/indices/adf730b6cf7c7959afcedb87e155654d.rix +0 -0
- data/test/repositories/bzr_with_authors/.bzr/repository/indices/adf730b6cf7c7959afcedb87e155654d.six +0 -5
- data/test/repositories/bzr_with_authors/.bzr/repository/indices/adf730b6cf7c7959afcedb87e155654d.tix +0 -6
- data/test/repositories/bzr_with_authors/.bzr/repository/indices/d2613fcfb5e48e79073b96270782f95c.cix +0 -0
- data/test/repositories/bzr_with_authors/.bzr/repository/indices/d2613fcfb5e48e79073b96270782f95c.iix +0 -0
- data/test/repositories/bzr_with_authors/.bzr/repository/indices/d2613fcfb5e48e79073b96270782f95c.rix +0 -0
- data/test/repositories/bzr_with_authors/.bzr/repository/indices/d2613fcfb5e48e79073b96270782f95c.six +0 -5
- data/test/repositories/bzr_with_authors/.bzr/repository/indices/d2613fcfb5e48e79073b96270782f95c.tix +0 -0
- data/test/repositories/bzr_with_authors/.bzr/repository/pack-names +0 -0
- data/test/repositories/bzr_with_authors/.bzr/repository/packs/1326ecee2f4f69991771137c5307689a.pack +0 -0
- data/test/repositories/bzr_with_authors/.bzr/repository/packs/adf730b6cf7c7959afcedb87e155654d.pack +0 -0
- data/test/repositories/bzr_with_authors/.bzr/repository/packs/d2613fcfb5e48e79073b96270782f95c.pack +0 -0
- data/test/repositories/bzr_with_authors/test.txt +0 -1
- data/test/repositories/bzr_with_branch/.bzr/README +0 -3
- data/test/repositories/bzr_with_branch/.bzr/branch-format +0 -1
- data/test/repositories/bzr_with_branch/.bzr/branch/branch.conf +0 -1
- data/test/repositories/bzr_with_branch/.bzr/branch/format +0 -1
- data/test/repositories/bzr_with_branch/.bzr/branch/last-revision +0 -1
- data/test/repositories/bzr_with_branch/.bzr/branch/tags +0 -0
- data/test/repositories/bzr_with_branch/.bzr/checkout/conflicts +0 -1
- data/test/repositories/bzr_with_branch/.bzr/checkout/dirstate +0 -0
- data/test/repositories/bzr_with_branch/.bzr/checkout/format +0 -1
- data/test/repositories/bzr_with_branch/.bzr/checkout/merge-hashes +0 -3
- data/test/repositories/bzr_with_branch/.bzr/repository/format +0 -1
- data/test/repositories/bzr_with_branch/.bzr/repository/indices/3336f250dbe86a7eec2de4c1b1f97db7.iix +0 -0
- data/test/repositories/bzr_with_branch/.bzr/repository/indices/3336f250dbe86a7eec2de4c1b1f97db7.rix +0 -0
- data/test/repositories/bzr_with_branch/.bzr/repository/indices/3336f250dbe86a7eec2de4c1b1f97db7.six +0 -5
- data/test/repositories/bzr_with_branch/.bzr/repository/indices/3336f250dbe86a7eec2de4c1b1f97db7.tix +0 -5
- data/test/repositories/bzr_with_branch/.bzr/repository/indices/47cfe65310e6d462bb87a68fff0bc162.iix +0 -0
- data/test/repositories/bzr_with_branch/.bzr/repository/indices/47cfe65310e6d462bb87a68fff0bc162.rix +0 -0
- data/test/repositories/bzr_with_branch/.bzr/repository/indices/47cfe65310e6d462bb87a68fff0bc162.six +0 -5
- data/test/repositories/bzr_with_branch/.bzr/repository/indices/47cfe65310e6d462bb87a68fff0bc162.tix +0 -0
- data/test/repositories/bzr_with_branch/.bzr/repository/indices/64e98edbf1aebe6f532f2f93b24eead8.iix +0 -0
- data/test/repositories/bzr_with_branch/.bzr/repository/indices/64e98edbf1aebe6f532f2f93b24eead8.rix +0 -0
- data/test/repositories/bzr_with_branch/.bzr/repository/indices/64e98edbf1aebe6f532f2f93b24eead8.six +0 -5
- data/test/repositories/bzr_with_branch/.bzr/repository/indices/64e98edbf1aebe6f532f2f93b24eead8.tix +0 -0
- data/test/repositories/bzr_with_branch/.bzr/repository/indices/8008794e258fc3fa4be68d538312a91c.iix +0 -0
- data/test/repositories/bzr_with_branch/.bzr/repository/indices/8008794e258fc3fa4be68d538312a91c.rix +0 -0
- data/test/repositories/bzr_with_branch/.bzr/repository/indices/8008794e258fc3fa4be68d538312a91c.six +0 -5
- data/test/repositories/bzr_with_branch/.bzr/repository/indices/8008794e258fc3fa4be68d538312a91c.tix +0 -0
- data/test/repositories/bzr_with_branch/.bzr/repository/pack-names +0 -0
- data/test/repositories/bzr_with_branch/.bzr/repository/packs/3336f250dbe86a7eec2de4c1b1f97db7.pack +0 -0
- data/test/repositories/bzr_with_branch/.bzr/repository/packs/47cfe65310e6d462bb87a68fff0bc162.pack +0 -0
- data/test/repositories/bzr_with_branch/.bzr/repository/packs/64e98edbf1aebe6f532f2f93b24eead8.pack +0 -0
- data/test/repositories/bzr_with_branch/.bzr/repository/packs/8008794e258fc3fa4be68d538312a91c.pack +0 -0
- data/test/repositories/bzr_with_branch/goodbyeworld.c +0 -5
- data/test/repositories/bzr_with_branch/helloworld.c +0 -6
- data/test/repositories/bzr_with_nested_branches/.bzr/README +0 -3
- data/test/repositories/bzr_with_nested_branches/.bzr/branch-format +0 -1
- data/test/repositories/bzr_with_nested_branches/.bzr/branch/branch.conf +0 -1
- data/test/repositories/bzr_with_nested_branches/.bzr/branch/format +0 -1
- data/test/repositories/bzr_with_nested_branches/.bzr/branch/last-revision +0 -1
- data/test/repositories/bzr_with_nested_branches/.bzr/branch/tags +0 -0
- data/test/repositories/bzr_with_nested_branches/.bzr/checkout/conflicts +0 -1
- data/test/repositories/bzr_with_nested_branches/.bzr/checkout/dirstate +0 -0
- data/test/repositories/bzr_with_nested_branches/.bzr/checkout/format +0 -1
- data/test/repositories/bzr_with_nested_branches/.bzr/checkout/merge-hashes +0 -6
- data/test/repositories/bzr_with_nested_branches/.bzr/repository/format +0 -1
- data/test/repositories/bzr_with_nested_branches/.bzr/repository/indices/0428489d1a03d05c496c2c429fe96e90.iix +0 -0
- data/test/repositories/bzr_with_nested_branches/.bzr/repository/indices/0428489d1a03d05c496c2c429fe96e90.rix +0 -0
- data/test/repositories/bzr_with_nested_branches/.bzr/repository/indices/0428489d1a03d05c496c2c429fe96e90.six +0 -5
- data/test/repositories/bzr_with_nested_branches/.bzr/repository/indices/0428489d1a03d05c496c2c429fe96e90.tix +0 -0
- data/test/repositories/bzr_with_nested_branches/.bzr/repository/indices/30fcaac048e328a7727156986055f6e8.iix +0 -0
- data/test/repositories/bzr_with_nested_branches/.bzr/repository/indices/30fcaac048e328a7727156986055f6e8.rix +0 -0
- data/test/repositories/bzr_with_nested_branches/.bzr/repository/indices/30fcaac048e328a7727156986055f6e8.six +0 -5
- data/test/repositories/bzr_with_nested_branches/.bzr/repository/indices/30fcaac048e328a7727156986055f6e8.tix +0 -0
- data/test/repositories/bzr_with_nested_branches/.bzr/repository/indices/673cc297ed321f667e1d8d4fff600829.iix +0 -0
- data/test/repositories/bzr_with_nested_branches/.bzr/repository/indices/673cc297ed321f667e1d8d4fff600829.rix +0 -0
- data/test/repositories/bzr_with_nested_branches/.bzr/repository/indices/673cc297ed321f667e1d8d4fff600829.six +0 -5
- data/test/repositories/bzr_with_nested_branches/.bzr/repository/indices/673cc297ed321f667e1d8d4fff600829.tix +0 -0
- data/test/repositories/bzr_with_nested_branches/.bzr/repository/indices/71af8bae249bcb824a4ff17c62029142.iix +0 -0
- data/test/repositories/bzr_with_nested_branches/.bzr/repository/indices/71af8bae249bcb824a4ff17c62029142.rix +0 -0
- data/test/repositories/bzr_with_nested_branches/.bzr/repository/indices/71af8bae249bcb824a4ff17c62029142.six +0 -5
- data/test/repositories/bzr_with_nested_branches/.bzr/repository/indices/71af8bae249bcb824a4ff17c62029142.tix +0 -0
- data/test/repositories/bzr_with_nested_branches/.bzr/repository/indices/7202eb77b81a80eca5296f317ed42149.iix +0 -0
- data/test/repositories/bzr_with_nested_branches/.bzr/repository/indices/7202eb77b81a80eca5296f317ed42149.rix +0 -0
- data/test/repositories/bzr_with_nested_branches/.bzr/repository/indices/7202eb77b81a80eca5296f317ed42149.six +0 -5
- data/test/repositories/bzr_with_nested_branches/.bzr/repository/indices/7202eb77b81a80eca5296f317ed42149.tix +0 -5
- data/test/repositories/bzr_with_nested_branches/.bzr/repository/indices/8a571ba35ee54cd133b71e967442fe17.iix +0 -0
- data/test/repositories/bzr_with_nested_branches/.bzr/repository/indices/8a571ba35ee54cd133b71e967442fe17.rix +0 -0
- data/test/repositories/bzr_with_nested_branches/.bzr/repository/indices/8a571ba35ee54cd133b71e967442fe17.six +0 -5
- data/test/repositories/bzr_with_nested_branches/.bzr/repository/indices/8a571ba35ee54cd133b71e967442fe17.tix +0 -0
- data/test/repositories/bzr_with_nested_branches/.bzr/repository/indices/a06b9c10004fc3e05affee8cf0a9febd.iix +0 -0
- data/test/repositories/bzr_with_nested_branches/.bzr/repository/indices/a06b9c10004fc3e05affee8cf0a9febd.rix +0 -0
- data/test/repositories/bzr_with_nested_branches/.bzr/repository/indices/a06b9c10004fc3e05affee8cf0a9febd.six +0 -5
- data/test/repositories/bzr_with_nested_branches/.bzr/repository/indices/a06b9c10004fc3e05affee8cf0a9febd.tix +0 -0
- data/test/repositories/bzr_with_nested_branches/.bzr/repository/indices/da6c79a024c70fd6831e323430a96cc8.iix +0 -0
- data/test/repositories/bzr_with_nested_branches/.bzr/repository/indices/da6c79a024c70fd6831e323430a96cc8.rix +0 -0
- data/test/repositories/bzr_with_nested_branches/.bzr/repository/indices/da6c79a024c70fd6831e323430a96cc8.six +0 -5
- data/test/repositories/bzr_with_nested_branches/.bzr/repository/indices/da6c79a024c70fd6831e323430a96cc8.tix +0 -5
- data/test/repositories/bzr_with_nested_branches/.bzr/repository/indices/f35e1020b6a55c81b6d2fe4c7bcd4645.iix +0 -0
- data/test/repositories/bzr_with_nested_branches/.bzr/repository/indices/f35e1020b6a55c81b6d2fe4c7bcd4645.rix +0 -0
- data/test/repositories/bzr_with_nested_branches/.bzr/repository/indices/f35e1020b6a55c81b6d2fe4c7bcd4645.six +0 -5
- data/test/repositories/bzr_with_nested_branches/.bzr/repository/indices/f35e1020b6a55c81b6d2fe4c7bcd4645.tix +0 -0
- data/test/repositories/bzr_with_nested_branches/.bzr/repository/pack-names +0 -0
- data/test/repositories/bzr_with_nested_branches/.bzr/repository/packs/0428489d1a03d05c496c2c429fe96e90.pack +0 -0
- data/test/repositories/bzr_with_nested_branches/.bzr/repository/packs/30fcaac048e328a7727156986055f6e8.pack +0 -0
- data/test/repositories/bzr_with_nested_branches/.bzr/repository/packs/673cc297ed321f667e1d8d4fff600829.pack +0 -0
- data/test/repositories/bzr_with_nested_branches/.bzr/repository/packs/71af8bae249bcb824a4ff17c62029142.pack +0 -0
- data/test/repositories/bzr_with_nested_branches/.bzr/repository/packs/7202eb77b81a80eca5296f317ed42149.pack +0 -0
- data/test/repositories/bzr_with_nested_branches/.bzr/repository/packs/8a571ba35ee54cd133b71e967442fe17.pack +0 -0
- data/test/repositories/bzr_with_nested_branches/.bzr/repository/packs/a06b9c10004fc3e05affee8cf0a9febd.pack +0 -0
- data/test/repositories/bzr_with_nested_branches/.bzr/repository/packs/da6c79a024c70fd6831e323430a96cc8.pack +0 -0
- data/test/repositories/bzr_with_nested_branches/.bzr/repository/packs/f35e1020b6a55c81b6d2fe4c7bcd4645.pack +0 -0
- data/test/repositories/bzr_with_nested_branches/.bzr/repository/upload/.gitignore +0 -1
- data/test/repositories/bzr_with_nested_branches/file1.txt +0 -2
- data/test/repositories/bzr_with_nested_branches/file3.txt +0 -1
- data/test/repositories/bzr_with_nested_branches/file4.txt +0 -1
- data/test/repositories/bzr_with_nested_branches/file5.txt +0 -4
- data/test/repositories/bzr_with_nested_branches/file6.txt +0 -2
- data/test/repositories/bzr_with_nested_branches/file7.txt +0 -2
- data/test/repositories/bzr_with_subdirectories/.bzr/README +0 -3
- data/test/repositories/bzr_with_subdirectories/.bzr/branch-format +0 -1
- data/test/repositories/bzr_with_subdirectories/.bzr/branch/branch.conf +0 -0
- data/test/repositories/bzr_with_subdirectories/.bzr/branch/format +0 -1
- data/test/repositories/bzr_with_subdirectories/.bzr/branch/last-revision +0 -1
- data/test/repositories/bzr_with_subdirectories/.bzr/branch/tags +0 -0
- data/test/repositories/bzr_with_subdirectories/.bzr/checkout/conflicts +0 -1
- data/test/repositories/bzr_with_subdirectories/.bzr/checkout/dirstate +0 -0
- data/test/repositories/bzr_with_subdirectories/.bzr/checkout/format +0 -1
- data/test/repositories/bzr_with_subdirectories/.bzr/repository/format +0 -1
- data/test/repositories/bzr_with_subdirectories/.bzr/repository/indices/6eb92b11d9f811881dd08e0ca71e136d.iix +0 -0
- data/test/repositories/bzr_with_subdirectories/.bzr/repository/indices/6eb92b11d9f811881dd08e0ca71e136d.rix +0 -0
- data/test/repositories/bzr_with_subdirectories/.bzr/repository/indices/6eb92b11d9f811881dd08e0ca71e136d.six +0 -5
- data/test/repositories/bzr_with_subdirectories/.bzr/repository/indices/6eb92b11d9f811881dd08e0ca71e136d.tix +0 -0
- data/test/repositories/bzr_with_subdirectories/.bzr/repository/pack-names +0 -0
- data/test/repositories/bzr_with_subdirectories/.bzr/repository/packs/6eb92b11d9f811881dd08e0ca71e136d.pack +0 -0
- data/test/repositories/bzr_with_subdirectories/foo/helloworld.c +0 -0
- data/test/repositories/deep_svn/README.txt +0 -5
- data/test/repositories/deep_svn/conf/authz +0 -21
- data/test/repositories/deep_svn/conf/passwd +0 -8
- data/test/repositories/deep_svn/conf/svnserve.conf +0 -30
- data/test/repositories/deep_svn/db/current +0 -1
- data/test/repositories/deep_svn/db/format +0 -1
- data/test/repositories/deep_svn/db/fs-type +0 -1
- data/test/repositories/deep_svn/db/revprops/0 +0 -5
- data/test/repositories/deep_svn/db/revprops/1 +0 -14
- data/test/repositories/deep_svn/db/revprops/2 +0 -14
- data/test/repositories/deep_svn/db/revprops/3 +0 -14
- data/test/repositories/deep_svn/db/revprops/4 +0 -14
- data/test/repositories/deep_svn/db/revs/0 +0 -11
- data/test/repositories/deep_svn/db/revs/1 +0 -122
- data/test/repositories/deep_svn/db/revs/2 +0 -19
- data/test/repositories/deep_svn/db/revs/3 +0 -44
- data/test/repositories/deep_svn/db/revs/4 +0 -48
- data/test/repositories/deep_svn/db/uuid +0 -1
- data/test/repositories/deep_svn/db/write-lock +0 -0
- data/test/repositories/deep_svn/format +0 -1
- data/test/repositories/deep_svn/hooks/post-commit.tmpl +0 -51
- data/test/repositories/deep_svn/hooks/post-lock.tmpl +0 -44
- data/test/repositories/deep_svn/hooks/post-revprop-change.tmpl +0 -56
- data/test/repositories/deep_svn/hooks/post-unlock.tmpl +0 -42
- data/test/repositories/deep_svn/hooks/pre-commit.tmpl +0 -70
- data/test/repositories/deep_svn/hooks/pre-lock.tmpl +0 -64
- data/test/repositories/deep_svn/hooks/pre-revprop-change.tmpl +0 -66
- data/test/repositories/deep_svn/hooks/pre-unlock.tmpl +0 -60
- data/test/repositories/deep_svn/hooks/start-commit.tmpl +0 -54
- data/test/repositories/deep_svn/locks/db-logs.lock +0 -3
- data/test/repositories/deep_svn/locks/db.lock +0 -3
- data/test/repositories/git_with_empty_merge.tgz +0 -0
- data/test/repositories/svn/README.txt +0 -5
- data/test/repositories/svn/conf/authz +0 -21
- data/test/repositories/svn/conf/passwd +0 -8
- data/test/repositories/svn/conf/svnserve.conf +0 -30
- data/test/repositories/svn/db/current +0 -1
- data/test/repositories/svn/db/format +0 -1
- data/test/repositories/svn/db/fs-type +0 -1
- data/test/repositories/svn/db/revprops/0 +0 -5
- data/test/repositories/svn/db/revprops/1 +0 -14
- data/test/repositories/svn/db/revprops/2 +0 -13
- data/test/repositories/svn/db/revprops/3 +0 -13
- data/test/repositories/svn/db/revprops/4 +0 -13
- data/test/repositories/svn/db/revprops/5 +0 -13
- data/test/repositories/svn/db/revprops/6 +0 -12
- data/test/repositories/svn/db/revs/0 +0 -11
- data/test/repositories/svn/db/revs/1 +0 -0
- data/test/repositories/svn/db/revs/2 +0 -0
- data/test/repositories/svn/db/revs/3 +0 -0
- data/test/repositories/svn/db/revs/4 +0 -0
- data/test/repositories/svn/db/revs/5 +0 -64
- data/test/repositories/svn/db/revs/6 +0 -50
- data/test/repositories/svn/db/uuid +0 -1
- data/test/repositories/svn/db/write-lock +0 -0
- data/test/repositories/svn/format +0 -1
- data/test/repositories/svn/hooks/post-commit.tmpl +0 -51
- data/test/repositories/svn/hooks/post-lock.tmpl +0 -44
- data/test/repositories/svn/hooks/post-revprop-change.tmpl +0 -56
- data/test/repositories/svn/hooks/post-unlock.tmpl +0 -42
- data/test/repositories/svn/hooks/pre-commit.tmpl +0 -70
- data/test/repositories/svn/hooks/pre-lock.tmpl +0 -64
- data/test/repositories/svn/hooks/pre-revprop-change +0 -67
- data/test/repositories/svn/hooks/pre-unlock.tmpl +0 -60
- data/test/repositories/svn/hooks/start-commit.tmpl +0 -54
- data/test/repositories/svn/locks/db-logs.lock +0 -3
- data/test/repositories/svn/locks/db.lock +0 -3
- data/test/repositories/svn_empty/README.txt +0 -5
- data/test/repositories/svn_empty/conf/authz +0 -32
- data/test/repositories/svn_empty/conf/hooks-env.tmpl +0 -19
- data/test/repositories/svn_empty/conf/passwd +0 -8
- data/test/repositories/svn_empty/conf/svnserve.conf +0 -76
- data/test/repositories/svn_empty/db/current +0 -1
- data/test/repositories/svn_empty/db/format +0 -2
- data/test/repositories/svn_empty/db/fs-type +0 -1
- data/test/repositories/svn_empty/db/fsfs.conf +0 -125
- data/test/repositories/svn_empty/db/min-unpacked-rev +0 -1
- data/test/repositories/svn_empty/db/revprops/0/0 +0 -5
- data/test/repositories/svn_empty/db/revs/0/0 +0 -11
- data/test/repositories/svn_empty/db/txn-current +0 -1
- data/test/repositories/svn_empty/db/txn-current-lock +0 -0
- data/test/repositories/svn_empty/db/uuid +0 -1
- data/test/repositories/svn_empty/db/write-lock +0 -0
- data/test/repositories/svn_empty/format +0 -1
- data/test/repositories/svn_empty/hooks/post-commit.tmpl +0 -52
- data/test/repositories/svn_empty/hooks/post-lock.tmpl +0 -45
- data/test/repositories/svn_empty/hooks/post-revprop-change.tmpl +0 -57
- data/test/repositories/svn_empty/hooks/post-unlock.tmpl +0 -43
- data/test/repositories/svn_empty/hooks/pre-commit.tmpl +0 -85
- data/test/repositories/svn_empty/hooks/pre-lock.tmpl +0 -73
- data/test/repositories/svn_empty/hooks/pre-revprop-change.tmpl +0 -66
- data/test/repositories/svn_empty/hooks/pre-unlock.tmpl +0 -65
- data/test/repositories/svn_empty/hooks/start-commit.tmpl +0 -74
- data/test/repositories/svn_empty/locks/db-logs.lock +0 -3
- data/test/repositories/svn_empty/locks/db.lock +0 -3
- data/test/repositories/svn_with_branching.tgz +0 -0
- data/test/repositories/svn_with_invalid_encoding.tgz +0 -0
- data/test/repositories/svn_with_tree_move/README.txt +0 -5
- data/test/repositories/svn_with_tree_move/conf/authz +0 -21
- data/test/repositories/svn_with_tree_move/conf/passwd +0 -8
- data/test/repositories/svn_with_tree_move/conf/svnserve.conf +0 -30
- data/test/repositories/svn_with_tree_move/db/current +0 -1
- data/test/repositories/svn_with_tree_move/db/format +0 -1
- data/test/repositories/svn_with_tree_move/db/fs-type +0 -1
- data/test/repositories/svn_with_tree_move/db/revprops/0 +0 -5
- data/test/repositories/svn_with_tree_move/db/revprops/1 +0 -13
- data/test/repositories/svn_with_tree_move/db/revprops/2 +0 -13
- data/test/repositories/svn_with_tree_move/db/revs/0 +0 -11
- data/test/repositories/svn_with_tree_move/db/revs/1 +0 -0
- data/test/repositories/svn_with_tree_move/db/revs/2 +0 -44
- data/test/repositories/svn_with_tree_move/db/uuid +0 -1
- data/test/repositories/svn_with_tree_move/db/write-lock +0 -0
- data/test/repositories/svn_with_tree_move/format +0 -1
- data/test/repositories/svn_with_tree_move/hooks/post-commit.tmpl +0 -51
- data/test/repositories/svn_with_tree_move/hooks/post-lock.tmpl +0 -44
- data/test/repositories/svn_with_tree_move/hooks/post-revprop-change.tmpl +0 -56
- data/test/repositories/svn_with_tree_move/hooks/post-unlock.tmpl +0 -42
- data/test/repositories/svn_with_tree_move/hooks/pre-commit.tmpl +0 -70
- data/test/repositories/svn_with_tree_move/hooks/pre-lock.tmpl +0 -64
- data/test/repositories/svn_with_tree_move/hooks/pre-revprop-change.tmpl +0 -66
- data/test/repositories/svn_with_tree_move/hooks/pre-unlock.tmpl +0 -60
- data/test/repositories/svn_with_tree_move/hooks/start-commit.tmpl +0 -54
- data/test/repositories/svn_with_tree_move/locks/db-logs.lock +0 -3
- data/test/repositories/svn_with_tree_move/locks/db.lock +0 -3
- data/test/test_helper.rb +0 -127
- data/test/unit/abstract_adapter_test.rb +0 -106
- data/test/unit/adapter_factory_test.rb +0 -67
- data/test/unit/array_writer_test.rb +0 -33
- data/test/unit/bzr_cat_file_test.rb +0 -56
- data/test/unit/bzr_commits_test.rb +0 -388
- data/test/unit/bzr_head_test.rb +0 -18
- data/test/unit/bzr_misc_test.rb +0 -62
- data/test/unit/bzr_parser_test.rb +0 -483
- data/test/unit/bzr_pull_test.rb +0 -31
- data/test/unit/bzr_push_test.rb +0 -61
- data/test/unit/bzr_validation_test.rb +0 -61
- data/test/unit/bzr_xml_parser_test.rb +0 -409
- data/test/unit/bzrlib_cat_file_test.rb +0 -56
- data/test/unit/bzrlib_head_test.rb +0 -18
- data/test/unit/cvs_branch_number_test.rb +0 -130
- data/test/unit/cvs_commits_test.rb +0 -52
- data/test/unit/cvs_convert_test.rb +0 -30
- data/test/unit/cvs_misc_test.rb +0 -82
- data/test/unit/cvs_parser_test.rb +0 -94
- data/test/unit/cvs_validation_test.rb +0 -148
- data/test/unit/git_cat_file_test.rb +0 -21
- data/test/unit/git_commit_all_test.rb +0 -34
- data/test/unit/git_commits_test.rb +0 -179
- data/test/unit/git_head_test.rb +0 -26
- data/test/unit/git_log_parser_test.rb +0 -221
- data/test/unit/git_misc_test.rb +0 -100
- data/test/unit/git_parser_test.rb +0 -59
- data/test/unit/git_patch_test.rb +0 -14
- data/test/unit/git_pull_test.rb +0 -50
- data/test/unit/git_push_test.rb +0 -46
- data/test/unit/git_rev_list_test.rb +0 -89
- data/test/unit/git_styled_parser_test.rb +0 -103
- data/test/unit/git_svn_cat_file_test.rb +0 -57
- data/test/unit/git_svn_commits_test.rb +0 -37
- data/test/unit/git_svn_pull_test.rb +0 -51
- data/test/unit/git_token_test.rb +0 -45
- data/test/unit/git_validation_test.rb +0 -93
- data/test/unit/hg_cat_file_test.rb +0 -47
- data/test/unit/hg_commits_test.rb +0 -220
- data/test/unit/hg_head_test.rb +0 -24
- data/test/unit/hg_misc_test.rb +0 -48
- data/test/unit/hg_parser_test.rb +0 -184
- data/test/unit/hg_patch_test.rb +0 -14
- data/test/unit/hg_pull_test.rb +0 -29
- data/test/unit/hg_push_test.rb +0 -59
- data/test/unit/hg_rev_list_test.rb +0 -63
- data/test/unit/hg_validation_test.rb +0 -60
- data/test/unit/hglib_cat_file_test.rb +0 -47
- data/test/unit/hglib_head_test.rb +0 -18
- data/test/unit/ohlog_command_line_test.rb +0 -36
- data/test/unit/shellout_test.rb +0 -26
- data/test/unit/string_encoder_command_line_test.rb +0 -27
- data/test/unit/svn_cat_file_test.rb +0 -22
- data/test/unit/svn_chain_cat_file_test.rb +0 -24
- data/test/unit/svn_chain_commits_test.rb +0 -176
- data/test/unit/svn_chain_test.rb +0 -77
- data/test/unit/svn_commits_test.rb +0 -275
- data/test/unit/svn_convert_test.rb +0 -28
- data/test/unit/svn_head_test.rb +0 -27
- data/test/unit/svn_misc_test.rb +0 -142
- data/test/unit/svn_parser_test.rb +0 -155
- data/test/unit/svn_patch_test.rb +0 -14
- data/test/unit/svn_pull_test.rb +0 -60
- data/test/unit/svn_push_test.rb +0 -40
- data/test/unit/svn_validation_test.rb +0 -176
- data/test/unit/svn_xml_parser_test.rb +0 -45
@@ -0,0 +1,22 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
using OhlohScm::StringExtensions
|
4
|
+
|
5
|
+
module OhlohScm
|
6
|
+
class Core
|
7
|
+
extend Forwardable
|
8
|
+
def_delegators :validation, :validate, :errors
|
9
|
+
attr_reader :scm, :activity, :status, :validation
|
10
|
+
|
11
|
+
def initialize(scm_type, url, branch_name, username, password)
|
12
|
+
scm_opts = { core: self, url: url, branch_name: branch_name,
|
13
|
+
username: username, password: password }
|
14
|
+
scm_class_name = scm_type.to_s.camelize
|
15
|
+
|
16
|
+
@scm = OhlohScm.const_get(scm_class_name)::Scm.new(scm_opts)
|
17
|
+
@activity = OhlohScm.const_get(scm_class_name)::Activity.new(self)
|
18
|
+
@status = OhlohScm.const_get(scm_class_name)::Status.new(self)
|
19
|
+
@validation = OhlohScm.const_get(scm_class_name)::Validation.new(self)
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
@@ -0,0 +1,149 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module OhlohScm
|
4
|
+
module Cvs
|
5
|
+
class Activity < OhlohScm::Activity
|
6
|
+
def tags
|
7
|
+
cmd = "cvs -Q -d #{url} rlog -h #{scm.branch_name} | awk -F\"[.:]\" '/^\\t/&&$(NF-1)!=0'"
|
8
|
+
tag_strings = run(cmd).split(/\n/)
|
9
|
+
tag_strings.map do |tag_string|
|
10
|
+
tag_name, version = tag_string.split(':')
|
11
|
+
[tag_name.delete("\t"), version.strip]
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
# rubocop:disable Metrics/AbcSize, Metrics/MethodLength
|
16
|
+
def commits(opts = {})
|
17
|
+
after = opts[:after]
|
18
|
+
result = []
|
19
|
+
|
20
|
+
open_log_file(opts) do |io|
|
21
|
+
result = OhlohScm::CvsParser.parse(io)
|
22
|
+
end
|
23
|
+
|
24
|
+
# Git converter needs a backpointer to the scm for each commit
|
25
|
+
result.each { |c| c.scm = scm }
|
26
|
+
|
27
|
+
return result if result.empty? # Nothing found; we're done here.
|
28
|
+
return result if after.to_s == '' # We requested everything, so just return everything.
|
29
|
+
|
30
|
+
# We must now remove any duplicates caused by timestamp fudge factors,
|
31
|
+
# and only return commits with timestamp > after.
|
32
|
+
|
33
|
+
# If the first commit is newer than after,
|
34
|
+
# then the whole list is new and we can simply return.
|
35
|
+
return result if parse_time(result.first.token) > parse_time(after)
|
36
|
+
|
37
|
+
# Walk the list of commits to find the first new one, throwing away all of the old ones.
|
38
|
+
|
39
|
+
# I want to string-compare timestamps without converting to dates objects.
|
40
|
+
# Some CVS servers print dates as 2006/01/02 03:04:05, others as 2006-01-02 03:04:05.
|
41
|
+
# To work around this, we'll build a regex that matches either date format.
|
42
|
+
re = Regexp.new(after.gsub(/[\/-]/, '.'))
|
43
|
+
|
44
|
+
result.each_index do |i|
|
45
|
+
next unless result[i].token&.match?(re) # We found the match for after
|
46
|
+
return [] if i == result.size - 1 # There aren't any new commits.
|
47
|
+
|
48
|
+
return result[i + 1..-1]
|
49
|
+
end
|
50
|
+
|
51
|
+
# Something bad is going on: 'after' does not match any timestamp in the rlog.
|
52
|
+
# This is very rare, but it can happen.
|
53
|
+
#
|
54
|
+
# Often this means that the *last* time we ran commits(), there was some kind of
|
55
|
+
# undetected problem (CVS was in an intermediate state?) so the list of timestamps we
|
56
|
+
# calculated last time does not match the list of timestamps we calculated this time.
|
57
|
+
#
|
58
|
+
# There's no work around for this condition here in the code, but there are some things
|
59
|
+
# you can try manually to fix the problem. Typically, you can try throwing way the
|
60
|
+
# commit associated with 'after' and fetching it again (git reset --hard HEAD^).
|
61
|
+
raise "token '#{after}' not found in rlog."
|
62
|
+
end
|
63
|
+
# rubocop:enable Metrics/AbcSize, Metrics/MethodLength
|
64
|
+
|
65
|
+
def export_tag(dest_dir, tag_name = 'HEAD')
|
66
|
+
run "cvsnt -d #{url} export -d'#{dest_dir}' -r #{tag_name} '#{scm.branch_name}'"
|
67
|
+
end
|
68
|
+
|
69
|
+
# using :ext (ssh) protocol might trigger ssh to confirm accepting the host's
|
70
|
+
# ssh key. This causes the UI to hang asking for manual confirmation. To avoid
|
71
|
+
# this we pre-populate the ~/.ssh/known_hosts file with the host's key.
|
72
|
+
def ensure_host_key
|
73
|
+
return if protocol != :ext
|
74
|
+
|
75
|
+
ensure_key_file = File.dirname(__FILE__) + '/../../../../bin/ensure_key'
|
76
|
+
cmd = "#{ensure_key_file} '#{host}'"
|
77
|
+
run_with_err(cmd)
|
78
|
+
end
|
79
|
+
|
80
|
+
private
|
81
|
+
|
82
|
+
# Gets the rlog of the repository and saves it in a temporary file.
|
83
|
+
# If you pass a timestamp token, then only commits after the timestamp will be returned.
|
84
|
+
#
|
85
|
+
# Warning!
|
86
|
+
#
|
87
|
+
# CVS servers are apparently unreliable when you truncate
|
88
|
+
# the log by timestamp -- perhaps round-off error?
|
89
|
+
# In any case, to be sure not to miss any commits,
|
90
|
+
# this method subtracts 10 seconds from the provided timestamp.
|
91
|
+
# This means that the returned log might actually contain a few revisions
|
92
|
+
# that predate the requested time.
|
93
|
+
# That's better than missing revisions completely! Just be sure to check for duplicates.
|
94
|
+
# rubocop:disable Metrics/AbcSize
|
95
|
+
def open_log_file(opts = {})
|
96
|
+
ensure_host_key
|
97
|
+
status.lock?
|
98
|
+
run "cvsnt -d #{url} rlog #{opt_branch} #{opt_time(opts[:after])} '#{scm.branch_name}'"\
|
99
|
+
" | #{string_encoder_path} > #{rlog_filename}"
|
100
|
+
File.open(rlog_filename, 'r') { |file| yield file }
|
101
|
+
ensure
|
102
|
+
File.delete(rlog_filename) if File.exist?(rlog_filename)
|
103
|
+
end
|
104
|
+
# rubocop:enable Metrics/AbcSize
|
105
|
+
|
106
|
+
def opt_time(after = nil)
|
107
|
+
return '' unless after
|
108
|
+
|
109
|
+
most_recent_time = parse_time(after) - 10
|
110
|
+
# rubocop:disable Metrics/LineLength
|
111
|
+
" -d '#{most_recent_time.strftime('%Y-%m-%d %H:%M:%S')}Z<#{Time.now.utc.strftime('%Y-%m-%d %H:%M:%S')}Z' "
|
112
|
+
# rubocop:enable Metrics/LineLength
|
113
|
+
end
|
114
|
+
|
115
|
+
def rlog_filename
|
116
|
+
File.join(temp_folder, (url + scm.branch_name.to_s).gsub(/\W/, '') + '.rlog')
|
117
|
+
end
|
118
|
+
|
119
|
+
# Converts a CVS time string to a Ruby Time object
|
120
|
+
def parse_time(token)
|
121
|
+
case token
|
122
|
+
when /(\d\d\d\d).(\d\d).(\d\d) (\d\d):(\d\d):(\d\d)/
|
123
|
+
Time.gm(Regexp.last_match(1).to_i, Regexp.last_match(2).to_i, Regexp.last_match(3).to_i,
|
124
|
+
Regexp.last_match(4).to_i, Regexp.last_match(5).to_i, Regexp.last_match(6).to_i)
|
125
|
+
end
|
126
|
+
end
|
127
|
+
|
128
|
+
# returns the host this adapter is connecting to
|
129
|
+
def host
|
130
|
+
@host ||= begin
|
131
|
+
url =~ /@([^:]*):/
|
132
|
+
Regexp.last_match(1)
|
133
|
+
end
|
134
|
+
end
|
135
|
+
|
136
|
+
# returns the protocol this adapter connects with
|
137
|
+
def protocol
|
138
|
+
@protocol ||= case url
|
139
|
+
when /^:pserver/ then :pserver
|
140
|
+
when /^:ext/ then :ext
|
141
|
+
end
|
142
|
+
end
|
143
|
+
|
144
|
+
def opt_branch
|
145
|
+
'-b -r1:'
|
146
|
+
end
|
147
|
+
end
|
148
|
+
end
|
149
|
+
end
|
@@ -0,0 +1,149 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module OhlohScm
|
4
|
+
module Cvs
|
5
|
+
class Scm < OhlohScm::Scm
|
6
|
+
# rubocop:disable Metrics/AbcSize, Metrics/MethodLength
|
7
|
+
# rubocop:disable Metrics/PerceivedComplexity
|
8
|
+
def checkout(rev, local_directory)
|
9
|
+
opt_d = rev.token ? "-D'#{rev.token}Z'" : ''
|
10
|
+
|
11
|
+
activity.ensure_host_key
|
12
|
+
if File.exist?(local_directory + '/CVS/Root')
|
13
|
+
# We already have a local enlistment, so do a quick update.
|
14
|
+
if !rev.directories.empty?
|
15
|
+
build_ordered_directory_list(rev.directories).each do |d|
|
16
|
+
if d.empty?
|
17
|
+
run "cd #{local_directory} && cvsnt update -d -l -C #{opt_d} ."
|
18
|
+
else
|
19
|
+
run "cd #{local_directory} && cvsnt update -d -l -C #{opt_d} '#{d}'"
|
20
|
+
end
|
21
|
+
end
|
22
|
+
else
|
23
|
+
# Brute force: get all updates
|
24
|
+
logger.warn("Revision #{rev.token} did not contain any directories.
|
25
|
+
Using brute force update of entire module.")
|
26
|
+
run "cd #{local_directory} && cvsnt update -d -R -C #{opt_d}"
|
27
|
+
end
|
28
|
+
else
|
29
|
+
# We do not have a local enlistment, so do a slow checkout to create one.
|
30
|
+
# Silly cvsnt won't accept an absolute path.
|
31
|
+
# We'll have to play some games and cd to the parent directory.
|
32
|
+
parent_path, checkout_dir = File.split(local_directory)
|
33
|
+
FileUtils.mkdir_p(parent_path) unless File.exist?(parent_path)
|
34
|
+
run "cd #{parent_path} &&
|
35
|
+
cvsnt -d #{url} checkout #{opt_d} -A -d'#{checkout_dir}' '#{branch_name}'"
|
36
|
+
end
|
37
|
+
end
|
38
|
+
# rubocop:enable Metrics/AbcSize, Metrics/MethodLength
|
39
|
+
# rubocop:enable Metrics/PerceivedComplexity
|
40
|
+
|
41
|
+
def normalize
|
42
|
+
# Some CVS forges publish an URL which is actually a symlink, which causes CVSNT to crash.
|
43
|
+
# For some forges, we can work around this by using an alternate directory.
|
44
|
+
case guess_forge
|
45
|
+
when 'java.net', 'netbeans.org'
|
46
|
+
url.gsub!(/:\/cvs\/?$/, ':/shared/data/ccvs/repository')
|
47
|
+
when 'gna.org'
|
48
|
+
url.gsub!(/:\/cvs\b/, ':/var/cvs')
|
49
|
+
end
|
50
|
+
|
51
|
+
sync_pserver_username_password
|
52
|
+
|
53
|
+
self
|
54
|
+
end
|
55
|
+
|
56
|
+
private
|
57
|
+
|
58
|
+
# A revision can contain an arbitrary collection of directories.
|
59
|
+
# We need to ensure that for every directory we want to fetch,
|
60
|
+
# we also have its parent directories.
|
61
|
+
# rubocop:disable Metrics/AbcSize, Metrics/MethodLength
|
62
|
+
# rubocop:disable Metrics/CyclomaticComplexity, Metrics/PerceivedComplexity
|
63
|
+
def build_ordered_directory_list(directories)
|
64
|
+
# Integration Test Limitation
|
65
|
+
# cvsnt has problems with absolute path names, so we are stuck with
|
66
|
+
# using cvs modules that are only a single directory deep when testing.
|
67
|
+
# We'll check if the url begins with '/' to detect an integration test,
|
68
|
+
# then return an empty string (ie, the default root directory) if so.
|
69
|
+
return [''] if url =~ /^\//
|
70
|
+
|
71
|
+
list = []
|
72
|
+
directories = directories.collect { |a| trim_directory(a.to_s).to_s }
|
73
|
+
directories.each do |d|
|
74
|
+
# We always ignore Attic directories, which just contain deleted files
|
75
|
+
# Update the parent directory of the Attic instead.
|
76
|
+
if d =~ /^(.*)Attic$/
|
77
|
+
d = Regexp.last_match(1)
|
78
|
+
d = d[0..-2] if !d.empty? && (d[-1, 1] == '/')
|
79
|
+
end
|
80
|
+
|
81
|
+
next if list.include? d
|
82
|
+
|
83
|
+
list << d
|
84
|
+
# We also need to include every parent directory of the directory
|
85
|
+
# we are interested in, all the way up to the root.
|
86
|
+
while d.rindex('/')&.positive?
|
87
|
+
d = File.dirname(d)
|
88
|
+
break if list.include? d
|
89
|
+
|
90
|
+
list << d
|
91
|
+
end
|
92
|
+
end
|
93
|
+
|
94
|
+
# Sort the list by length because we need to update parent directories before children
|
95
|
+
list.sort! { |a, b| a.length <=> b.length }
|
96
|
+
end
|
97
|
+
# rubocop:enable Metrics/AbcSize, Metrics/MethodLength
|
98
|
+
# rubocop:enable Metrics/CyclomaticComplexity, Metrics/PerceivedComplexity
|
99
|
+
|
100
|
+
def trim_directory(dir)
|
101
|
+
# If we are connecting to a remote server (basically anytime we are not
|
102
|
+
# running the integration test) then we need to create a relative path
|
103
|
+
# by trimming the prefix from the directory.
|
104
|
+
# The prefix can be determined by examining the url and the module name.
|
105
|
+
# For example, if url = ':pserver:anonymous:@moodle.cvs.sourceforge.net:/cvsroot/moodle'
|
106
|
+
# and module = 'contrib', then the directory prefix = '/cvsroot/moodle/contrib/'
|
107
|
+
# If not remote, just leave the directory name as-is
|
108
|
+
root ? dir[root.length..-1] : dir
|
109
|
+
end
|
110
|
+
|
111
|
+
def root
|
112
|
+
return unless url =~ /^:(pserver|ext):.*@[^:]+:(\d+)?(\/.*)$/
|
113
|
+
|
114
|
+
"#{Regexp.last_match(3)}/#{branch_name}/"
|
115
|
+
end
|
116
|
+
|
117
|
+
# This bit of code patches up any inconsistencies that may arise because there
|
118
|
+
# is both a @password attribute and a password embedded in the :pserver: url.
|
119
|
+
# This method guarantees that they are both the same.
|
120
|
+
#
|
121
|
+
# It's assumed that if the user specified a @password attribute, then that is
|
122
|
+
# the preferred value and it should take precedence over any password found
|
123
|
+
# in the :pserver: url.
|
124
|
+
#
|
125
|
+
# If the user did not specify a @password attribute, then the value
|
126
|
+
# found in the :pserver: url is assigned to both.
|
127
|
+
def sync_pserver_username_password
|
128
|
+
# Do nothing unless pserver connection string is well-formed.
|
129
|
+
return unless url =~ /:pserver:([\w\-\_]*)(:([\w\-\_]*))?@(.*)$/
|
130
|
+
|
131
|
+
pserver_username = Regexp.last_match(1)
|
132
|
+
pserver_password = Regexp.last_match(3)
|
133
|
+
pserver_remainder = Regexp.last_match(4)
|
134
|
+
|
135
|
+
@username = pserver_username if @username.to_s.empty?
|
136
|
+
@password = pserver_password if @password.to_s.empty?
|
137
|
+
|
138
|
+
@url = ":pserver:#{@username}:#{password}@#{pserver_remainder}"
|
139
|
+
end
|
140
|
+
|
141
|
+
# Based on the URL, take a guess about which forge this code is hosted on.
|
142
|
+
def guess_forge
|
143
|
+
return unless url =~ /.*(pserver|ext).*@(([^\.]+\.)?(cvs|dev)\.)?([^:]+):\//i
|
144
|
+
|
145
|
+
Regexp.last_match(5).downcase
|
146
|
+
end
|
147
|
+
end
|
148
|
+
end
|
149
|
+
end
|
@@ -0,0 +1,14 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module OhlohScm
|
4
|
+
module Cvs
|
5
|
+
class Status < OhlohScm::Status
|
6
|
+
def lock?
|
7
|
+
run "timeout 2m cvsnt -q -d #{scm.url} rlog '#{scm.branch_name}'"
|
8
|
+
false
|
9
|
+
rescue StandardError => e
|
10
|
+
raise 'CVS lock has been found' if e.message =~ /waiting for.*lock in/
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
@@ -0,0 +1,106 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module OhlohScm
|
4
|
+
module Cvs
|
5
|
+
class Validation < OhlohScm::Validation
|
6
|
+
include OhlohScm::System
|
7
|
+
|
8
|
+
private
|
9
|
+
|
10
|
+
def validate_server_connection
|
11
|
+
return if ls
|
12
|
+
|
13
|
+
@errors << [:failed, "The cvs server did not respond to an 'ls' command.
|
14
|
+
Are the URL and branch name correct?"]
|
15
|
+
end
|
16
|
+
|
17
|
+
def branch_name_errors
|
18
|
+
if scm.branch_name.to_s.empty?
|
19
|
+
[:branch_name, "The branch name can't be blank."]
|
20
|
+
elsif scm.branch_name.length > 120
|
21
|
+
[:branch_name, 'The branch name must not be longer than 120 characters.']
|
22
|
+
elsif !scm.branch_name.match?(/^[\w\-\+\.\/\ ]+$/)
|
23
|
+
[:branch_name, "The branch name may contain only letters,
|
24
|
+
numbers, spaces, and the special characters '_', '-', '+', '/', and '.'"]
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
def public_url_regex
|
29
|
+
/^:(pserver|ext):[\w\-\+\_]*(:[\w\-\+\_]*)?@[\w\-\+\.]+:[0-9]*\/[\w\-\+\.\/]*$/
|
30
|
+
end
|
31
|
+
|
32
|
+
# Returns an array of file and directory names from the remote server.
|
33
|
+
# Directory names will end with a trailing '/' character.
|
34
|
+
#
|
35
|
+
# Directories named "CVSROOT" are always ignored, and thus never returned.
|
36
|
+
#
|
37
|
+
# An empty array means that the call succeeded, but the remote directory is empty.
|
38
|
+
# A nil result means that the call failed and the remote server could not be queried.
|
39
|
+
def ls(path = nil)
|
40
|
+
path = File.join(scm.branch_name, path.to_s)
|
41
|
+
|
42
|
+
cmd = "cvsnt -q -d #{scm.url} ls -e '#{path}'"
|
43
|
+
|
44
|
+
activity.ensure_host_key
|
45
|
+
|
46
|
+
stdout, stderr = run_with_err(cmd)
|
47
|
+
files = get_filenames(stdout)
|
48
|
+
|
49
|
+
error_handled = handle_error(stderr, files, path, cmd)
|
50
|
+
return unless error_handled
|
51
|
+
|
52
|
+
files.sort
|
53
|
+
end
|
54
|
+
|
55
|
+
def get_filenames(output)
|
56
|
+
files = []
|
57
|
+
output.each_line do |s|
|
58
|
+
s.strip!
|
59
|
+
s = Regexp.last_match(1) + '/' if s =~ /^D\/(.*)\/\/\/\/$/
|
60
|
+
s = Regexp.last_match(1) if s =~ /^\/(.*)\/.*\/.*\/.*\/$/
|
61
|
+
next if s == 'CVSROOT/'
|
62
|
+
|
63
|
+
files << s if s && !s.empty?
|
64
|
+
end
|
65
|
+
files
|
66
|
+
end
|
67
|
+
|
68
|
+
# rubocop:disable Metrics/MethodLength
|
69
|
+
def handle_error(stderr, files, path, cmd)
|
70
|
+
# Some of the cvs 'errors' are just harmless problems with some directories.
|
71
|
+
# If we recognize all the error messages, then nothing is really wrong.
|
72
|
+
# If some error messages go unhandled, then there really is an error.
|
73
|
+
stderr.each_line do |error|
|
74
|
+
error.strip!
|
75
|
+
error_handled = error.empty?
|
76
|
+
|
77
|
+
if error =~ /cvs server: New directory `(#{Regexp.escape(path.to_s)}\/)?(.*)' -- ignored/
|
78
|
+
files << "#{Regexp.last_match(2)}/"
|
79
|
+
error_handled = true
|
80
|
+
end
|
81
|
+
|
82
|
+
ignored_error_handled(error, path)
|
83
|
+
logger.warn { "'#{cmd}' resulted in unhandled error '#{error}'" } unless error_handled
|
84
|
+
break unless error_handled
|
85
|
+
end
|
86
|
+
end
|
87
|
+
# rubocop:enable Metrics/MethodLength
|
88
|
+
|
89
|
+
def ignored_error_handled(error, path)
|
90
|
+
ignored_error_messages = [
|
91
|
+
/Listing modules on server/, /Listing module: #{Regexp.escape(path.to_s)}/,
|
92
|
+
/-m wrapper option is not supported remotely; ignored/,
|
93
|
+
/cannot open directory .* No such file or directory/,
|
94
|
+
/ignoring module/, /skipping directory/,
|
95
|
+
/existing repository .* does not match/,
|
96
|
+
/nothing known about/,
|
97
|
+
|
98
|
+
# The signal 11 error should not really be ignored, but many CVS servers
|
99
|
+
# including dev.eclipse.org return it at the end of every ls.
|
100
|
+
/Terminated with fatal signal 11/
|
101
|
+
]
|
102
|
+
ignored_error_messages.any? { |msg| error.match?(msg) }
|
103
|
+
end
|
104
|
+
end
|
105
|
+
end
|
106
|
+
end
|