importing.rb revision 54df3ee204cac2763de267b1b3de745c908c20b5
282f31b2b7ad4ca69287402d6d3a91a280bcb15eJulian Kornberger# * pending - Job is enqueued.
282f31b2b7ad4ca69287402d6d3a91a280bcb15eJulian Kornberger# * fetching - Fetching new commits from the remote repository.
282f31b2b7ad4ca69287402d6d3a91a280bcb15eJulian Kornberger# * processing - Inserting fetched commits into the local database-
282f31b2b7ad4ca69287402d6d3a91a280bcb15eJulian Kornberger# * done - Everthing is fine, nothing to do-
282f31b2b7ad4ca69287402d6d3a91a280bcb15eJulian Kornberger# * failed - Something has gone wrong.
63690d8280c5282c6bd057da5330a6ae8859af35Eugen Kuksa after_create ->() { async_remote :clone }, if: :source_address?
282f31b2b7ad4ca69287402d6d3a91a280bcb15eJulian Kornberger # do not allow new actions in specific states
5379e11f2c6c49c6df4872d6a55f2ff390969e66Julian Kornberger args << source_address if method == 'clone'
5379e11f2c6c49c6df4872d6a55f2ff390969e66Julian Kornberger # build method name
93ff918a7a1656d812f27a767a976ea33da0921fJulian Kornberger method = method.to_s
5379e11f2c6c49c6df4872d6a55f2ff390969e66Julian Kornberger method += '_svn' if source_type == 'svn'
5422b48ab5841a2909cd9e53905dae4cd8418f0aJulian Kornberger do_or_set_failed do
d94a4d9e48f0ca6d52f1bb7ed7860dbcadbd90d6Eugen Kuksa process_fetch(method, args, remote_type)
d94a4d9e48f0ca6d52f1bb7ed7860dbcadbd90d6Eugen Kuksa def process_fetch(method, args, remote_type)
d94a4d9e48f0ca6d52f1bb7ed7860dbcadbd90d6Eugen Kuksa update_state! 'fetching'
d94a4d9e48f0ca6d52f1bb7ed7860dbcadbd90d6Eugen Kuksa result = git.send(method, *args)
d94a4d9e48f0ca6d52f1bb7ed7860dbcadbd90d6Eugen Kuksa convert_to_local! if remote_type == 'fork'
d94a4d9e48f0ca6d52f1bb7ed7860dbcadbd90d6Eugen Kuksa update_state! 'processing'
d94a4d9e48f0ca6d52f1bb7ed7860dbcadbd90d6Eugen Kuksa update_database_after_fetch(result)
d94a4d9e48f0ca6d52f1bb7ed7860dbcadbd90d6Eugen Kuksa self.imported_at = Time.now
d94a4d9e48f0ca6d52f1bb7ed7860dbcadbd90d6Eugen Kuksa update_state! 'done'
d94a4d9e48f0ca6d52f1bb7ed7860dbcadbd90d6Eugen Kuksa def update_database_after_fetch(range)
d94a4d9e48f0ca6d52f1bb7ed7860dbcadbd90d6Eugen Kuksa suspended_save_ontologies \
d94a4d9e48f0ca6d52f1bb7ed7860dbcadbd90d6Eugen Kuksa start_oid: range.current,
d94a4d9e48f0ca6d52f1bb7ed7860dbcadbd90d6Eugen Kuksa stop_oid: range.previous,
d94a4d9e48f0ca6d52f1bb7ed7860dbcadbd90d6Eugen Kuksa walk_order: Rugged::SORT_REVERSE
5422b48ab5841a2909cd9e53905dae4cd8418f0aJulian Kornberger module ClassMethods
8f845e804ef24c045876941e34930a9ac6720dbfEugen Kuksa # Creates a new repository and imports the contents from the remote
8f845e804ef24c045876941e34930a9ac6720dbfEugen Kuksa # repository.
5422b48ab5841a2909cd9e53905dae4cd8418f0aJulian Kornberger def import_remote(type, user, source, name, params={})
8f845e804ef24c045876941e34930a9ac6720dbfEugen Kuksa unless SOURCE_TYPES.include?(type)
8f845e804ef24c045876941e34930a9ac6720dbfEugen Kuksa raise ArgumentError, "invalid source type: #{type}"
8f845e804ef24c045876941e34930a9ac6720dbfEugen Kuksa unless GitRepository.send "is_#{type}_repository?", source
8f845e804ef24c045876941e34930a9ac6720dbfEugen Kuksa raise Repository::ImportError, "#{source} is not a #{type} repository"
5422b48ab5841a2909cd9e53905dae4cd8418f0aJulian Kornberger params[:name] = name
5422b48ab5841a2909cd9e53905dae4cd8418f0aJulian Kornberger params[:source_type] = type
5422b48ab5841a2909cd9e53905dae4cd8418f0aJulian Kornberger params[:source_address] = source
e81334464ee46b772442343c2f871ea82d4a3c82Eugen Kuksa params[:access] = params[:access] ?
e81334464ee46b772442343c2f871ea82d4a3c82Eugen Kuksa Repository::Access.as_read_only(params[:access]) :
e81334464ee46b772442343c2f871ea82d4a3c82Eugen Kuksa Repository::Access::DEFAULT_OPTION
89575ed6ea1f9c9058164005c0c8a64e8aeae3a4Julian Kornberger r = Repository.new(params)
51da3d91f66d9b359075e91acf63b46b7c13b604Eugen Kuksa def clean_and_initialize_record
51da3d91f66d9b359075e91acf63b46b7c13b604Eugen Kuksa self.remote_type = nil unless source_address?
51da3d91f66d9b359075e91acf63b46b7c13b604Eugen Kuksa detect_source_type if new_record?
8f845e804ef24c045876941e34930a9ac6720dbfEugen Kuksa def detect_source_type
54df3ee204cac2763de267b1b3de745c908c20b5Eugen Kuksa if source_address?
54df3ee204cac2763de267b1b3de745c908c20b5Eugen Kuksa if GitRepository.is_git_repository?(source_address)
54df3ee204cac2763de267b1b3de745c908c20b5Eugen Kuksa self.source_type = 'git'
54df3ee204cac2763de267b1b3de745c908c20b5Eugen Kuksa elsif GitRepository.is_svn_repository?(source_address)
54df3ee204cac2763de267b1b3de745c908c20b5Eugen Kuksa self.source_type = 'svn'