importing.rb revision 93ff918a7a1656d812f27a767a976ea33da0921f
5422b48ab5841a2909cd9e53905dae4cd8418f0aJulian Kornbergermodule Repository::Importing
5422b48ab5841a2909cd9e53905dae4cd8418f0aJulian Kornberger extend ActiveSupport::Concern
5422b48ab5841a2909cd9e53905dae4cd8418f0aJulian Kornberger
5422b48ab5841a2909cd9e53905dae4cd8418f0aJulian Kornberger SOURCE_TYPES = %w( git svn )
5422b48ab5841a2909cd9e53905dae4cd8418f0aJulian Kornberger STATES = %w( pending processing done failed )
5422b48ab5841a2909cd9e53905dae4cd8418f0aJulian Kornberger
5422b48ab5841a2909cd9e53905dae4cd8418f0aJulian Kornberger included do
5422b48ab5841a2909cd9e53905dae4cd8418f0aJulian Kornberger include StateUpdater
5422b48ab5841a2909cd9e53905dae4cd8418f0aJulian Kornberger
5422b48ab5841a2909cd9e53905dae4cd8418f0aJulian Kornberger validates_inclusion_of :state, in: STATES
5422b48ab5841a2909cd9e53905dae4cd8418f0aJulian Kornberger validates_inclusion_of :source_type, in: SOURCE_TYPES, if: :remote?
5422b48ab5841a2909cd9e53905dae4cd8418f0aJulian Kornberger
93ff918a7a1656d812f27a767a976ea33da0921fJulian Kornberger after_create :async_remote_clone, if: :remote?
93ff918a7a1656d812f27a767a976ea33da0921fJulian Kornberger
93ff918a7a1656d812f27a767a976ea33da0921fJulian Kornberger async_method :remote_clone, :remote_pull
5422b48ab5841a2909cd9e53905dae4cd8418f0aJulian Kornberger end
5422b48ab5841a2909cd9e53905dae4cd8418f0aJulian Kornberger
5422b48ab5841a2909cd9e53905dae4cd8418f0aJulian Kornberger def remote?
5422b48ab5841a2909cd9e53905dae4cd8418f0aJulian Kornberger source_address?
5422b48ab5841a2909cd9e53905dae4cd8418f0aJulian Kornberger end
5422b48ab5841a2909cd9e53905dae4cd8418f0aJulian Kornberger
5422b48ab5841a2909cd9e53905dae4cd8418f0aJulian Kornberger # do not allow new actions if running
5422b48ab5841a2909cd9e53905dae4cd8418f0aJulian Kornberger def locked?
5422b48ab5841a2909cd9e53905dae4cd8418f0aJulian Kornberger %w( pending processing ).include?(state)
5422b48ab5841a2909cd9e53905dae4cd8418f0aJulian Kornberger end
5422b48ab5841a2909cd9e53905dae4cd8418f0aJulian Kornberger
5422b48ab5841a2909cd9e53905dae4cd8418f0aJulian Kornberger # enqueues a clone job
93ff918a7a1656d812f27a767a976ea33da0921fJulian Kornberger def remote_clone
93ff918a7a1656d812f27a767a976ea33da0921fJulian Kornberger remote_send :clone, source_address
5422b48ab5841a2909cd9e53905dae4cd8418f0aJulian Kornberger end
5422b48ab5841a2909cd9e53905dae4cd8418f0aJulian Kornberger
93ff918a7a1656d812f27a767a976ea33da0921fJulian Kornberger # enqueues a pull job
93ff918a7a1656d812f27a767a976ea33da0921fJulian Kornberger def remote_pull
93ff918a7a1656d812f27a767a976ea33da0921fJulian Kornberger remote_send :fetch_and_reset
5422b48ab5841a2909cd9e53905dae4cd8418f0aJulian Kornberger end
5422b48ab5841a2909cd9e53905dae4cd8418f0aJulian Kornberger
93ff918a7a1656d812f27a767a976ea33da0921fJulian Kornberger=begin
5422b48ab5841a2909cd9e53905dae4cd8418f0aJulian Kornberger # enqueues a remote job
5422b48ab5841a2909cd9e53905dae4cd8418f0aJulian Kornberger def async_remote(method)
5422b48ab5841a2909cd9e53905dae4cd8418f0aJulian Kornberger raise "object is #{state}" if locked?
5422b48ab5841a2909cd9e53905dae4cd8418f0aJulian Kornberger update_state! 'pending'
5422b48ab5841a2909cd9e53905dae4cd8418f0aJulian Kornberger async :remote_send, method
5422b48ab5841a2909cd9e53905dae4cd8418f0aJulian Kornberger end
93ff918a7a1656d812f27a767a976ea33da0921fJulian Kornberger=end
93ff918a7a1656d812f27a767a976ea33da0921fJulian Kornberger
93ff918a7a1656d812f27a767a976ea33da0921fJulian Kornberger def remote_send(method, *args)
93ff918a7a1656d812f27a767a976ea33da0921fJulian Kornberger user = permissions.where(subject_type: User, role: 'owner').first!.subject
93ff918a7a1656d812f27a767a976ea33da0921fJulian Kornberger method = method.to_s
93ff918a7a1656d812f27a767a976ea33da0921fJulian Kornberger method += '_svn' if source_type=='svn'
5422b48ab5841a2909cd9e53905dae4cd8418f0aJulian Kornberger
5422b48ab5841a2909cd9e53905dae4cd8418f0aJulian Kornberger update_state! 'processing'
5422b48ab5841a2909cd9e53905dae4cd8418f0aJulian Kornberger do_or_set_failed do
93ff918a7a1656d812f27a767a976ea33da0921fJulian Kornberger result = git.send(method, *args)
93ff918a7a1656d812f27a767a976ea33da0921fJulian Kornberger
93ff918a7a1656d812f27a767a976ea33da0921fJulian Kornberger save_current_ontologies(user)
5422b48ab5841a2909cd9e53905dae4cd8418f0aJulian Kornberger update_state! 'done'
5422b48ab5841a2909cd9e53905dae4cd8418f0aJulian Kornberger
93ff918a7a1656d812f27a767a976ea33da0921fJulian Kornberger result
93ff918a7a1656d812f27a767a976ea33da0921fJulian Kornberger end
5422b48ab5841a2909cd9e53905dae4cd8418f0aJulian Kornberger end
5422b48ab5841a2909cd9e53905dae4cd8418f0aJulian Kornberger
5422b48ab5841a2909cd9e53905dae4cd8418f0aJulian Kornberger module ClassMethods
5422b48ab5841a2909cd9e53905dae4cd8418f0aJulian Kornberger # creates a new repository and imports the contents from the remote repository
5422b48ab5841a2909cd9e53905dae4cd8418f0aJulian Kornberger def import_remote(type, user, source, name, params={})
5422b48ab5841a2909cd9e53905dae4cd8418f0aJulian Kornberger raise ArgumentError, "invalid source type: #{type}" unless SOURCE_TYPES.include?(type)
5422b48ab5841a2909cd9e53905dae4cd8418f0aJulian Kornberger raise Repository::ImportError, "#{source} is not a #{type} repository" unless GitRepository.send "is_#{type}_repository?", source
5422b48ab5841a2909cd9e53905dae4cd8418f0aJulian Kornberger
5422b48ab5841a2909cd9e53905dae4cd8418f0aJulian Kornberger params[:name] = name
5422b48ab5841a2909cd9e53905dae4cd8418f0aJulian Kornberger params[:source_type] = type
5422b48ab5841a2909cd9e53905dae4cd8418f0aJulian Kornberger params[:source_address] = source
5422b48ab5841a2909cd9e53905dae4cd8418f0aJulian Kornberger
89575ed6ea1f9c9058164005c0c8a64e8aeae3a4Julian Kornberger r = Repository.new(params)
5422b48ab5841a2909cd9e53905dae4cd8418f0aJulian Kornberger r.user = user
5422b48ab5841a2909cd9e53905dae4cd8418f0aJulian Kornberger r.save!
5422b48ab5841a2909cd9e53905dae4cd8418f0aJulian Kornberger r
5422b48ab5841a2909cd9e53905dae4cd8418f0aJulian Kornberger end
5422b48ab5841a2909cd9e53905dae4cd8418f0aJulian Kornberger end
5422b48ab5841a2909cd9e53905dae4cd8418f0aJulian Kornberger
5422b48ab5841a2909cd9e53905dae4cd8418f0aJulian Kornbergerend