From ced61b9399c49e4cf07c468b8416ce474f9965ed Mon Sep 17 00:00:00 2001 From: MAEDA Go Date: Tue, 11 Jul 2017 10:40:36 +0900 Subject: [PATCH] Drop Darcs support. --- app/helpers/repositories_helper.rb | 11 +- app/models/repository/darcs.rb | 114 ---------- config/configuration.yml.example | 3 - config/settings.yml | 1 - extra/svn/reposman.rb | 2 +- lib/redmine.rb | 1 - lib/redmine/scm/adapters/darcs_adapter.rb | 239 --------------------- lib/tasks/testing.rake | 2 +- test/fixtures/repositories/darcs_repository.tar.gz | Bin 8075 -> 0 bytes .../repositories_darcs_controller_test.rb | 178 --------------- test/unit/helpers/application_helper_test.rb | 26 --- .../lib/redmine/scm/adapters/darcs_adapter_test.rb | 60 ------ test/unit/repository_darcs_test.rb | 129 ----------- test/unit/repository_test.rb | 2 +- 14 files changed, 4 insertions(+), 764 deletions(-) delete mode 100644 app/models/repository/darcs.rb delete mode 100644 lib/redmine/scm/adapters/darcs_adapter.rb delete mode 100644 test/fixtures/repositories/darcs_repository.tar.gz delete mode 100644 test/functional/repositories_darcs_controller_test.rb delete mode 100644 test/unit/lib/redmine/scm/adapters/darcs_adapter_test.rb delete mode 100644 test/unit/repository_darcs_test.rb diff --git a/app/helpers/repositories_helper.rb b/app/helpers/repositories_helper.rb index 4778c79a1..314c0b29b 100644 --- a/app/helpers/repositories_helper.rb +++ b/app/helpers/repositories_helper.rb @@ -157,15 +157,6 @@ module RepositoriesHelper :onchange => "this.name='repository[password]';")) end - def darcs_field_tags(form, repository) - content_tag('p', form.text_field( - :url, :label => l(:field_path_to_repository), - :size => 60, :required => true, - :disabled => !repository.safe_attribute?('url')) + - scm_path_info_tag(repository)) + - scm_log_encoding_tag(form, repository) - end - def mercurial_field_tags(form, repository) content_tag('p', form.text_field( :url, :label => l(:field_path_to_repository), @@ -279,7 +270,7 @@ module RepositoriesHelper } end heads.sort! { |head1, head2| head1.to_s <=> head2.to_s } - space = nil + space = nil heads.each do |head| if commits_by_scmid.include? head.scmid space = index_head((space || -1) + 1, head, commits_by_scmid) diff --git a/app/models/repository/darcs.rb b/app/models/repository/darcs.rb deleted file mode 100644 index 8c1302ca2..000000000 --- a/app/models/repository/darcs.rb +++ /dev/null @@ -1,114 +0,0 @@ -# Redmine - project management software -# Copyright (C) 2006-2017 Jean-Philippe Lang -# -# This program is free software; you can redistribute it and/or -# modify it under the terms of the GNU General Public License -# as published by the Free Software Foundation; either version 2 -# of the License, or (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - -require 'redmine/scm/adapters/darcs_adapter' - -class Repository::Darcs < Repository - validates_presence_of :url, :log_encoding - - def self.human_attribute_name(attribute_key_name, *args) - attr_name = attribute_key_name.to_s - if attr_name == "url" - attr_name = "path_to_repository" - end - super(attr_name, *args) - end - - def self.scm_adapter_class - Redmine::Scm::Adapters::DarcsAdapter - end - - def self.scm_name - 'Darcs' - end - - def supports_directory_revisions? - true - end - - def entry(path=nil, identifier=nil) - patch = identifier.nil? ? nil : changesets.find_by_revision(identifier) - scm.entry(path, patch.nil? ? nil : patch.scmid) - end - - def scm_entries(path=nil, identifier=nil) - patch = nil - if ! identifier.nil? - patch = changesets.find_by_revision(identifier) - return nil if patch.nil? - end - entries = scm.entries(path, patch.nil? ? nil : patch.scmid) - if entries - entries.each do |entry| - # Search the DB for the entry's last change - if entry.lastrev && !entry.lastrev.scmid.blank? - changeset = changesets.find_by_scmid(entry.lastrev.scmid) - end - if changeset - entry.lastrev.identifier = changeset.revision - entry.lastrev.name = changeset.revision - entry.lastrev.time = changeset.committed_on - entry.lastrev.author = changeset.committer - end - end - end - entries - end - protected :scm_entries - - def cat(path, identifier=nil) - patch = identifier.nil? ? nil : changesets.find_by_revision(identifier.to_s) - scm.cat(path, patch.nil? ? nil : patch.scmid) - end - - def diff(path, rev, rev_to) - patch_from = changesets.find_by_revision(rev) - return nil if patch_from.nil? - patch_to = changesets.find_by_revision(rev_to) if rev_to - if path.blank? - path = patch_from.filechanges.collect{|change| change.path}.join(' ') - end - patch_from ? scm.diff(path, patch_from.scmid, patch_to ? patch_to.scmid : nil) : nil - end - - def fetch_changesets - scm_info = scm.info - if scm_info - db_last_id = latest_changeset ? latest_changeset.scmid : nil - next_rev = latest_changeset ? latest_changeset.revision.to_i + 1 : 1 - # latest revision in the repository - scm_revision = scm_info.lastrev.scmid - unless changesets.find_by_scmid(scm_revision) - revisions = scm.revisions('', db_last_id, nil, :with_path => true) - transaction do - revisions.reverse_each do |revision| - changeset = Changeset.create(:repository => self, - :revision => next_rev, - :scmid => revision.scmid, - :committer => revision.author, - :committed_on => revision.time, - :comments => revision.message) - revision.paths.each do |change| - changeset.create_change(change) - end - next_rev += 1 - end if revisions - end - end - end - end -end diff --git a/config/configuration.yml.example b/config/configuration.yml.example index 3522ef695..e44e3c163 100644 --- a/config/configuration.yml.example +++ b/config/configuration.yml.example @@ -99,14 +99,12 @@ default: # scm_git_command: /usr/local/bin/git # (default: git) # scm_cvs_command: cvs # (default: cvs) # scm_bazaar_command: bzr.exe # (default: bzr) - # scm_darcs_command: darcs-1.0.9-i386-linux # (default: darcs) # scm_subversion_command: scm_mercurial_command: scm_git_command: scm_cvs_command: scm_bazaar_command: - scm_darcs_command: # SCM paths validation. # @@ -132,7 +130,6 @@ default: scm_git_path_regexp: scm_cvs_path_regexp: scm_bazaar_path_regexp: - scm_darcs_path_regexp: scm_filesystem_path_regexp: # Absolute path to the SCM commands errors (stderr) log file. diff --git a/config/settings.yml b/config/settings.yml index 2a4ab1d75..c9f2c680e 100644 --- a/config/settings.yml +++ b/config/settings.yml @@ -119,7 +119,6 @@ enabled_scm: serialized: true default: - Subversion - - Darcs - Mercurial - Cvs - Bazaar diff --git a/extra/svn/reposman.rb b/extra/svn/reposman.rb index 4f748acf0..aec5760d6 100755 --- a/extra/svn/reposman.rb +++ b/extra/svn/reposman.rb @@ -6,7 +6,7 @@ require 'etc' require 'rubygems' Version = "1.5" -SUPPORTED_SCM = %w( Subversion Darcs Mercurial Bazaar Git Filesystem ) +SUPPORTED_SCM = %w( Subversion Mercurial Bazaar Git Filesystem ) $verbose = 0 $quiet = false diff --git a/lib/redmine.rb b/lib/redmine.rb index 7773e3875..29d96c2b0 100644 --- a/lib/redmine.rb +++ b/lib/redmine.rb @@ -66,7 +66,6 @@ require 'redmine/hook/view_listener' require 'redmine/plugin' Redmine::Scm::Base.add "Subversion" -Redmine::Scm::Base.add "Darcs" Redmine::Scm::Base.add "Mercurial" Redmine::Scm::Base.add "Cvs" Redmine::Scm::Base.add "Bazaar" diff --git a/lib/redmine/scm/adapters/darcs_adapter.rb b/lib/redmine/scm/adapters/darcs_adapter.rb deleted file mode 100644 index dd0f4f5d3..000000000 --- a/lib/redmine/scm/adapters/darcs_adapter.rb +++ /dev/null @@ -1,239 +0,0 @@ -# Redmine - project management software -# Copyright (C) 2006-2017 Jean-Philippe Lang -# -# This program is free software; you can redistribute it and/or -# modify it under the terms of the GNU General Public License -# as published by the Free Software Foundation; either version 2 -# of the License, or (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - -require 'redmine/scm/adapters/abstract_adapter' -require 'rexml/document' - -module Redmine - module Scm - module Adapters - class DarcsAdapter < AbstractAdapter - # Darcs executable name - DARCS_BIN = Redmine::Configuration['scm_darcs_command'] || "darcs" - - class << self - def client_command - @@bin ||= DARCS_BIN - end - - def sq_bin - @@sq_bin ||= shell_quote_command - end - - def client_version - @@client_version ||= (darcs_binary_version || []) - end - - def client_available - !client_version.empty? - end - - def darcs_binary_version - darcsversion = darcs_binary_version_from_command_line.dup.force_encoding('ASCII-8BIT') - if m = darcsversion.match(%r{\A(.*?)((\d+\.)+\d+)}) - m[2].scan(%r{\d+}).collect(&:to_i) - end - end - - def darcs_binary_version_from_command_line - shellout("#{sq_bin} --version") { |io| io.read }.to_s - end - end - - def initialize(url, root_url=nil, login=nil, password=nil, - path_encoding=nil) - @url = url - @root_url = url - end - - def supports_cat? - # cat supported in darcs 2.0.0 and higher - self.class.client_version_above?([2, 0, 0]) - end - - # Get info about the darcs repository - def info - rev = revisions(nil,nil,nil,{:limit => 1}) - rev ? Info.new({:root_url => @url, :lastrev => rev.last}) : nil - end - - # Returns an Entries collection - # or nil if the given path doesn't exist in the repository - def entries(path=nil, identifier=nil, options={}) - path_prefix = (path.blank? ? '' : "#{path}/") - if path.blank? - path = ( self.class.client_version_above?([2, 2, 0]) ? @url : '.' ) - end - entries = Entries.new - cmd = "#{self.class.sq_bin} annotate --repodir #{shell_quote @url} --xml-output" - cmd << " --match #{shell_quote("hash #{identifier}")}" if identifier - cmd << " #{shell_quote path}" - shellout(cmd) do |io| - begin - doc = REXML::Document.new(io) - if doc.root.name == 'directory' - doc.elements.each('directory/*') do |element| - next unless ['file', 'directory'].include? element.name - entries << entry_from_xml(element, path_prefix) - end - elsif doc.root.name == 'file' - entries << entry_from_xml(doc.root, path_prefix) - end - rescue - end - end - return nil if $? && $?.exitstatus != 0 - entries.compact! - entries.sort_by_name - end - - def revisions(path=nil, identifier_from=nil, identifier_to=nil, options={}) - path = '.' if path.blank? - revisions = Revisions.new - cmd = "#{self.class.sq_bin} changes --repodir #{shell_quote @url} --xml-output" - cmd << " --from-match #{shell_quote("hash #{identifier_from}")}" if identifier_from - cmd << " --last #{options[:limit].to_i}" if options[:limit] - shellout(cmd) do |io| - begin - doc = REXML::Document.new(io) - doc.elements.each("changelog/patch") do |patch| - message = patch.elements['name'].text - message << "\n" + patch.elements['comment'].text.gsub(/\*\*\*END OF DESCRIPTION\*\*\*.*\z/m, '') if patch.elements['comment'] - revisions << Revision.new({:identifier => nil, - :author => patch.attributes['author'], - :scmid => patch.attributes['hash'], - :time => Time.parse(patch.attributes['local_date']), - :message => message, - :paths => (options[:with_path] ? get_paths_for_patch(patch.attributes['hash']) : nil) - }) - end - rescue - end - end - return nil if $? && $?.exitstatus != 0 - revisions - end - - def diff(path, identifier_from, identifier_to=nil) - path = '*' if path.blank? - cmd = "#{self.class.sq_bin} diff --repodir #{shell_quote @url}" - if identifier_to.nil? - cmd << " --match #{shell_quote("hash #{identifier_from}")}" - else - cmd << " --to-match #{shell_quote("hash #{identifier_from}")}" - cmd << " --from-match #{shell_quote("hash #{identifier_to}")}" - end - cmd << " -u #{shell_quote path}" - diff = [] - shellout(cmd) do |io| - io.each_line do |line| - diff << line - end - end - return nil if $? && $?.exitstatus != 0 - diff - end - - def cat(path, identifier=nil) - cmd = "#{self.class.sq_bin} show content --repodir #{shell_quote @url}" - cmd << " --match #{shell_quote("hash #{identifier}")}" if identifier - cmd << " #{shell_quote path}" - cat = nil - shellout(cmd) do |io| - io.binmode - cat = io.read - end - return nil if $? && $?.exitstatus != 0 - cat - end - - private - - # Returns an Entry from the given XML element - # or nil if the entry was deleted - def entry_from_xml(element, path_prefix) - modified_element = element.elements['modified'] - if modified_element.elements['modified_how'].text.match(/removed/) - return nil - end - - Entry.new({:name => element.attributes['name'], - :path => path_prefix + element.attributes['name'], - :kind => element.name == 'file' ? 'file' : 'dir', - :size => nil, - :lastrev => Revision.new({ - :identifier => nil, - :scmid => modified_element.elements['patch'].attributes['hash'] - }) - }) - end - - def get_paths_for_patch(hash) - paths = get_paths_for_patch_raw(hash) - if self.class.client_version_above?([2, 4]) - orig_paths = paths - paths = [] - add_paths = [] - add_paths_name = [] - mod_paths = [] - other_paths = [] - orig_paths.each do |path| - if path[:action] == 'A' - add_paths << path - add_paths_name << path[:path] - elsif path[:action] == 'M' - mod_paths << path - else - other_paths << path - end - end - add_paths_name.each do |add_path| - mod_paths.delete_if { |m| m[:path] == add_path } - end - paths.concat add_paths - paths.concat mod_paths - paths.concat other_paths - end - paths - end - - # Retrieve changed paths for a single patch - def get_paths_for_patch_raw(hash) - cmd = "#{self.class.sq_bin} annotate --repodir #{shell_quote @url} --summary --xml-output" - cmd << " --match #{shell_quote("hash #{hash}")} " - paths = [] - shellout(cmd) do |io| - begin - # Darcs xml output has multiple root elements in this case (tested with darcs 1.0.7) - # A root element is added so that REXML doesn't raise an error - doc = REXML::Document.new("" + io.read + "") - doc.elements.each('fake_root/summary/*') do |modif| - paths << {:action => modif.name[0,1].upcase, - :path => "/" + modif.text.chomp.gsub(/^\s*/, '') - } - end - rescue - end - end - paths - rescue CommandFailed - paths - end - end - end - end -end diff --git a/lib/tasks/testing.rake b/lib/tasks/testing.rake index 831f4d316..4b5813089 100644 --- a/lib/tasks/testing.rake +++ b/lib/tasks/testing.rake @@ -26,7 +26,7 @@ namespace :test do FileUtils.mkdir_p Rails.root + '/tmp/test' end - supported_scms = [:subversion, :cvs, :bazaar, :mercurial, :git, :darcs, :filesystem] + supported_scms = [:subversion, :cvs, :bazaar, :mercurial, :git, :filesystem] desc "Creates a test subversion repository" task :subversion => :create_dir do diff --git a/test/fixtures/repositories/darcs_repository.tar.gz b/test/fixtures/repositories/darcs_repository.tar.gz deleted file mode 100644 index ba4d8d04c466eab54f26fa7fffd2927a44b15fb1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8075 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 Z3=9km3=9km42-`w{{;gOQ;h(i006{M#a;ja diff --git a/test/functional/repositories_darcs_controller_test.rb b/test/functional/repositories_darcs_controller_test.rb deleted file mode 100644 index dc2800f85..000000000 --- a/test/functional/repositories_darcs_controller_test.rb +++ /dev/null @@ -1,178 +0,0 @@ -# Redmine - project management software -# Copyright (C) 2006-2017 Jean-Philippe Lang -# -# This program is free software; you can redistribute it and/or -# modify it under the terms of the GNU General Public License -# as published by the Free Software Foundation; either version 2 -# of the License, or (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - -require File.expand_path('../../test_helper', __FILE__) - -class RepositoriesDarcsControllerTest < Redmine::ControllerTest - tests RepositoriesController - - fixtures :projects, :users, :email_addresses, :roles, :members, :member_roles, - :repositories, :enabled_modules - - REPOSITORY_PATH = Rails.root.join('tmp/test/darcs_repository').to_s - PRJ_ID = 3 - NUM_REV = 6 - - def setup - User.current = nil - @project = Project.find(PRJ_ID) - @repository = Repository::Darcs.create( - :project => @project, - :url => REPOSITORY_PATH, - :log_encoding => 'UTF-8' - ) - assert @repository - end - - if File.directory?(REPOSITORY_PATH) - def test_get_new - @request.session[:user_id] = 1 - @project.repository.destroy - get :new, :params => { - :project_id => 'subproject1', - :repository_scm => 'Darcs' - } - assert_response :success - assert_select 'select[name=?]', 'repository_scm' do - assert_select 'option[value=?][selected=selected]', 'Darcs' - end - end - - def test_browse_root - assert_equal 0, @repository.changesets.count - @repository.fetch_changesets - @project.reload - assert_equal NUM_REV, @repository.changesets.count - get :show, :params => { - :id => PRJ_ID - } - assert_select 'table.entries tbody' do - assert_select 'tr', 3 - assert_select 'tr.dir td.filename a', :text => 'images' - assert_select 'tr.dir td.filename a', :text => 'sources' - assert_select 'tr.file td.filename a', :text => 'README' - end - end - - def test_browse_directory - assert_equal 0, @repository.changesets.count - @repository.fetch_changesets - @project.reload - assert_equal NUM_REV, @repository.changesets.count - get :show, :params => { - :id => PRJ_ID, - :path => repository_path_hash(['images'])[:param] - } - assert_response :success - assert_select 'table.entries tbody' do - assert_select 'tr', 2 - assert_select 'tr.file td.filename a', :text => 'delete.png' - assert_select 'tr.file td.filename a', :text => 'edit.png' - end - end - - def test_browse_at_given_revision - assert_equal 0, @repository.changesets.count - @repository.fetch_changesets - @project.reload - assert_equal NUM_REV, @repository.changesets.count - get :show, :params => { - :id => PRJ_ID, - :path => repository_path_hash(['images'])[:param], - :rev => 1 - } - assert_response :success - assert_select 'table.entries tbody' do - assert_select 'tr', 1 - assert_select 'tr.file td.filename a', :text => 'delete.png' - end - end - - def test_changes - assert_equal 0, @repository.changesets.count - @repository.fetch_changesets - @project.reload - assert_equal NUM_REV, @repository.changesets.count - get :changes, :params => { - :id => PRJ_ID, - :path => repository_path_hash(['images', 'edit.png'])[:param] - } - assert_response :success - assert_select 'h2', :text => /edit.png/ - end - - def test_diff - assert_equal 0, @repository.changesets.count - @repository.fetch_changesets - @project.reload - assert_equal NUM_REV, @repository.changesets.count - # Full diff of changeset 5 - ['inline', 'sbs'].each do |dt| - get :diff, :params => { - :id => PRJ_ID, - :rev => 5, - :type => dt - } - assert_response :success - # Line 22 removed - assert_select 'th.line-num:contains(22) ~ td.diff_out', :text => /def remove/ - end - end - - def test_destroy_valid_repository - @request.session[:user_id] = 1 # admin - assert_equal 0, @repository.changesets.count - @repository.fetch_changesets - @project.reload - assert_equal NUM_REV, @repository.changesets.count - - assert_difference 'Repository.count', -1 do - delete :destroy, :params => { - :id => @repository.id - } - end - assert_response 302 - @project.reload - assert_nil @project.repository - end - - def test_destroy_invalid_repository - @request.session[:user_id] = 1 # admin - @project.repository.destroy - @repository = Repository::Darcs.create!( - :project => @project, - :url => "/invalid", - :log_encoding => 'UTF-8' - ) - @repository.fetch_changesets - @project.reload - assert_equal 0, @repository.changesets.count - - assert_difference 'Repository.count', -1 do - delete :destroy, :params => { - :id => @repository.id - } - end - assert_response 302 - @project.reload - assert_nil @project.repository - end - else - puts "Darcs test repository NOT FOUND. Skipping functional tests !!!" - def test_fake; assert true end - end -end diff --git a/test/unit/helpers/application_helper_test.rb b/test/unit/helpers/application_helper_test.rb index 020b4636c..9da13d7ec 100644 --- a/test/unit/helpers/application_helper_test.rb +++ b/test/unit/helpers/application_helper_test.rb @@ -606,32 +606,6 @@ RAW end # TODO: Bazaar commit id contains mail address, so it contains '@' and '_'. - def test_redmine_links_darcs_commit - changeset_link = link_to('20080308225258-98289-abcd456efg.gz', - { - :controller => 'repositories', - :action => 'revision', - :id => 'subproject1', - :rev => '123', - }, - :class => 'changeset', :title => 'test commit') - to_test = { - 'commit:20080308225258-98289-abcd456efg.gz' => changeset_link, - } - @project = Project.find(3) - r = Repository::Darcs.create!( - :project => @project, :url => '/tmp/test/darcs', - :log_encoding => 'UTF-8') - assert r - c = Changeset.new(:repository => r, - :committed_on => Time.now, - :revision => '123', - :scmid => '20080308225258-98289-abcd456efg.gz', - :comments => 'test commit') - assert( c.save ) - to_test.each { |text, result| assert_equal "

#{result}

", textilizable(text) } - end - def test_redmine_links_mercurial_commit changeset_link_rev = link_to('r123', { diff --git a/test/unit/lib/redmine/scm/adapters/darcs_adapter_test.rb b/test/unit/lib/redmine/scm/adapters/darcs_adapter_test.rb deleted file mode 100644 index 949779bf3..000000000 --- a/test/unit/lib/redmine/scm/adapters/darcs_adapter_test.rb +++ /dev/null @@ -1,60 +0,0 @@ -# Redmine - project management software -# Copyright (C) 2006-2017 Jean-Philippe Lang -# -# This program is free software; you can redistribute it and/or -# modify it under the terms of the GNU General Public License -# as published by the Free Software Foundation; either version 2 -# of the License, or (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - -require File.expand_path('../../../../../../test_helper', __FILE__) - -class DarcsAdapterTest < ActiveSupport::TestCase - REPOSITORY_PATH = Rails.root.join('tmp/test/darcs_repository').to_s - - if File.directory?(REPOSITORY_PATH) - def setup - @adapter = Redmine::Scm::Adapters::DarcsAdapter.new(REPOSITORY_PATH) - end - - def test_darcsversion - to_test = { "1.0.9 (release)\n" => [1,0,9] , - "2.2.0 (release)\n" => [2,2,0] } - to_test.each do |s, v| - test_darcsversion_for(s, v) - end - end - - def test_revisions - id1 = '20080308225258-98289-761f654d669045eabee90b91b53a21ce5593cadf.gz' - revs = @adapter.revisions('', nil, nil, {:with_path => true}) - assert_equal 6, revs.size - assert_equal id1, revs[5].scmid - paths = revs[5].paths - assert_equal 5, paths.size - assert_equal 'A', paths[0][:action] - assert_equal '/README', paths[0][:path] - assert_equal 'A', paths[1][:action] - assert_equal '/images', paths[1][:path] - end - - private - - def test_darcsversion_for(darcsversion, version) - @adapter.class.expects(:darcs_binary_version_from_command_line).returns(darcsversion) - assert_equal version, @adapter.class.darcs_binary_version - end - - else - puts "Darcs test repository NOT FOUND. Skipping unit tests !!!" - def test_fake; assert true end - end -end diff --git a/test/unit/repository_darcs_test.rb b/test/unit/repository_darcs_test.rb deleted file mode 100644 index 5cb572503..000000000 --- a/test/unit/repository_darcs_test.rb +++ /dev/null @@ -1,129 +0,0 @@ -# Redmine - project management software -# Copyright (C) 2006-2017 Jean-Philippe Lang -# -# This program is free software; you can redistribute it and/or -# modify it under the terms of the GNU General Public License -# as published by the Free Software Foundation; either version 2 -# of the License, or (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - -require File.expand_path('../../test_helper', __FILE__) - -class RepositoryDarcsTest < ActiveSupport::TestCase - fixtures :projects - - include Redmine::I18n - - REPOSITORY_PATH = Rails.root.join('tmp/test/darcs_repository').to_s - NUM_REV = 6 - - def setup - @project = Project.find(3) - @repository = Repository::Darcs.create( - :project => @project, - :url => REPOSITORY_PATH, - :log_encoding => 'UTF-8' - ) - assert @repository - end - - def test_blank_path_to_repository_error_message - set_language_if_valid 'en' - repo = Repository::Darcs.new( - :project => @project, - :identifier => 'test', - :log_encoding => 'UTF-8' - ) - assert !repo.save - assert_include "Path to repository cannot be blank", - repo.errors.full_messages - end - - def test_blank_path_to_repository_error_message_fr - set_language_if_valid 'fr' - str = "Chemin du d\xc3\xa9p\xc3\xb4t doit \xc3\xaatre renseign\xc3\xa9(e)".force_encoding('UTF-8') - repo = Repository::Darcs.new( - :project => @project, - :url => "", - :identifier => 'test', - :log_encoding => 'UTF-8' - ) - assert !repo.save - assert_include str, repo.errors.full_messages - end - - if File.directory?(REPOSITORY_PATH) - def test_fetch_changesets_from_scratch - assert_equal 0, @repository.changesets.count - @repository.fetch_changesets - @project.reload - - assert_equal NUM_REV, @repository.changesets.count - assert_equal 13, @repository.filechanges.count - assert_equal "Initial commit.", @repository.changesets.find_by_revision('1').comments - end - - def test_fetch_changesets_incremental - assert_equal 0, @repository.changesets.count - @repository.fetch_changesets - @project.reload - assert_equal NUM_REV, @repository.changesets.count - - # Remove changesets with revision > 3 - @repository.changesets.each {|c| c.destroy if c.revision.to_i > 3} - @project.reload - @repository.reload - assert_equal 3, @repository.changesets.count - - @repository.fetch_changesets - @project.reload - assert_equal NUM_REV, @repository.changesets.count - end - - def test_entries - entries = @repository.entries - assert_kind_of Redmine::Scm::Adapters::Entries, entries - end - - def test_entries_invalid_revision - assert_equal 0, @repository.changesets.count - @repository.fetch_changesets - @project.reload - assert_equal NUM_REV, @repository.changesets.count - assert_nil @repository.entries('', '123') - end - - def test_deleted_files_should_not_be_listed - assert_equal 0, @repository.changesets.count - @repository.fetch_changesets - @project.reload - assert_equal NUM_REV, @repository.changesets.count - entries = @repository.entries('sources') - assert entries.detect {|e| e.name == 'watchers_controller.rb'} - assert_nil entries.detect {|e| e.name == 'welcome_controller.rb'} - end - - def test_cat - if @repository.scm.supports_cat? - assert_equal 0, @repository.changesets.count - @repository.fetch_changesets - @project.reload - assert_equal NUM_REV, @repository.changesets.count - cat = @repository.cat("sources/welcome_controller.rb", 2) - assert_not_nil cat - assert cat.include?('class WelcomeController < ApplicationController') - end - end - else - puts "Darcs test repository NOT FOUND. Skipping unit tests !!!" - def test_fake; assert true end - end -end diff --git a/test/unit/repository_test.rb b/test/unit/repository_test.rb index 489a1d69d..59f011f9f 100644 --- a/test/unit/repository_test.rb +++ b/test/unit/repository_test.rb @@ -221,7 +221,7 @@ class RepositoryTest < ActiveSupport::TestCase def test_should_not_create_with_disabled_scm # disable Subversion - with_settings :enabled_scm => ['Darcs', 'Git'] do + with_settings :enabled_scm => ['Mercurial', 'Git'] do repository = Repository::Subversion.new( :project => Project.find(3), :url => "svn://localhost") assert !repository.save -- 2.11.0 (Apple Git-81)