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.
97669a2ab79fef55a04bd6f0e51267e5119ddab7Eugen Kuksa after_commit ->() { call_remote :clone }, on: :create, if: :source_address?
282f31b2b7ad4ca69287402d6d3a91a280bcb15eJulian Kornberger # do not allow new actions in specific states
c975e932187f329ac00049d8fd7cc796633f9e92Eugen Kuksa RepositoryFetchingWorker.perform_async(id, method, remote_type)
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)
006de713cc0c62dc3dd8549f4d74c00e8b822dd2Eugen Kuksa OntologySaver.new(self).
006de713cc0c62dc3dd8549f4d74c00e8b822dd2Eugen Kuksa suspended_save_ontologies(start_oid: range.current,
006de713cc0c62dc3dd8549f4d74c00e8b822dd2Eugen Kuksa stop_oid: range.previous,
006de713cc0c62dc3dd8549f4d74c00e8b822dd2Eugen Kuksa walk_order: :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?
6370334d0670bd95d0685a2f5ab9b85ade15f68bEugen Kuksa self.source_type =
6370334d0670bd95d0685a2f5ab9b85ade15f68bEugen Kuksa if GitRepository.is_git_repository?(source_address)
6370334d0670bd95d0685a2f5ab9b85ade15f68bEugen Kuksa elsif GitRepository.is_svn_repository?(source_address)