Handle missing db records in resque processors
[gitorious:mainline.git] / app / processors / repository_cloning_processor.rb
1 # encoding: utf-8
2 #--
3 #   Copyright (C) 2013-2014 Gitorious AS
4 #
5 #   This program is free software: you can redistribute it and/or modify
6 #   it under the terms of the GNU Affero General Public License as published by
7 #   the Free Software Foundation, either version 3 of the License, or
8 #   (at your option) any later version.
9 #
10 #   This program is distributed in the hope that it will be useful,
11 #   but WITHOUT ANY WARRANTY; without even the implied warranty of
12 #   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13 #   GNU Affero General Public License for more details.
14 #
15 #   You should have received a copy of the GNU Affero General Public License
16 #   along with this program.  If not, see <http://www.gnu.org/licenses/>.
17 #++
18
19 class RepositoryCloningProcessor
20   include Gitorious::Messaging::Consumer
21   consumes "/queue/GitoriousRepositoryCloning"
22
23   def on_message(message)
24     id = message["id"].to_i
25     begin
26       repository = Repository.find(id)
27     rescue ActiveRecord::RecordNotFound
28       logger.warning("Can't clone repository with id=#{id}, record doesn't exist")
29       return
30     end
31
32     logger.info("Processing new repository clone: #<Repository id: #{repository.id}, :parent: #{repository.parent.repository_plain_path}, path: #{repository.repository_plain_path}>")
33     RepositoryCloner.clone_with_hooks(repository.parent.real_gitdir, repository.real_gitdir)
34     repository.ready = true
35     repository.disk_usage = repository.parent.disk_usage
36     repository.save!
37     Gitorious.mirrors.clone_repository(repository.parent, repository)
38   end
39 end