From d261f83626b9abde93f91d9850ae3e989348e12d Mon Sep 17 00:00:00 2001
From: Zeger-Jan van de Weg <zegerjan@gitlab.com>
Date: Mon, 1 May 2017 20:15:16 +0000
Subject: [PATCH] Update Carrierwave and fog-core

---
 Gemfile                                       |  4 ++--
 Gemfile.lock                                  | 22 +++++++++----------
 .../expire_build_instance_artifacts_worker.rb |  2 +-
 config/initializers/carrierwave.rb            |  2 ++
 spec/factories/projects.rb                    |  4 ++++
 spec/models/project_spec.rb                   | 15 +++++--------
 ...re_build_instance_artifacts_worker_spec.rb |  6 +++--
 7 files changed, 29 insertions(+), 26 deletions(-)

diff --git a/Gemfile b/Gemfile
index 41c2dcfd76e71..f54a1f500fd15 100644
--- a/Gemfile
+++ b/Gemfile
@@ -85,14 +85,14 @@ gem 'kaminari', '~> 0.17.0'
 gem 'hamlit', '~> 2.6.1'
 
 # Files attachments
-gem 'carrierwave', '~> 0.11.0'
+gem 'carrierwave', '~> 1.0'
 
 # Drag and Drop UI
 gem 'dropzonejs-rails', '~> 0.7.1'
 
 # for backups
 gem 'fog-aws', '~> 0.9'
-gem 'fog-core', '~> 1.40'
+gem 'fog-core', '~> 1.44'
 gem 'fog-google', '~> 0.5'
 gem 'fog-local', '~> 0.3'
 gem 'fog-openstack', '~> 0.1'
diff --git a/Gemfile.lock b/Gemfile.lock
index 038d1f746b35d..b822a325861b8 100644
--- a/Gemfile.lock
+++ b/Gemfile.lock
@@ -105,12 +105,10 @@ GEM
     capybara-screenshot (1.0.14)
       capybara (>= 1.0, < 3)
       launchy
-    carrierwave (0.11.2)
-      activemodel (>= 3.2.0)
-      activesupport (>= 3.2.0)
-      json (>= 1.7)
+    carrierwave (1.0.0)
+      activemodel (>= 4.0.0)
+      activesupport (>= 4.0.0)
       mime-types (>= 1.16)
-      mimemagic (>= 0.3.0)
     cause (0.1)
     charlock_holmes (0.7.3)
     chronic (0.10.2)
@@ -184,7 +182,7 @@ GEM
     erubis (2.7.0)
     escape_utils (1.1.1)
     eventmachine (1.0.8)
-    excon (0.52.0)
+    excon (0.55.0)
     execjs (2.6.0)
     expression_parser (0.9.0)
     extlib (0.9.16)
@@ -210,12 +208,12 @@ GEM
     flowdock (0.7.1)
       httparty (~> 0.7)
       multi_json
-    fog-aws (0.11.0)
+    fog-aws (0.13.0)
       fog-core (~> 1.38)
       fog-json (~> 1.0)
       fog-xml (~> 0.1)
       ipaddress (~> 0.8)
-    fog-core (1.42.0)
+    fog-core (1.44.1)
       builder
       excon (~> 0.49)
       formatador (~> 0.2)
@@ -237,9 +235,9 @@ GEM
       fog-json (>= 1.0)
       fog-xml (>= 0.1)
       ipaddress (>= 0.8)
-    fog-xml (0.1.2)
+    fog-xml (0.1.3)
       fog-core
-      nokogiri (~> 1.5, >= 1.5.11)
+      nokogiri (>= 1.5.11, < 2.0.0)
     font-awesome-rails (4.7.0.1)
       railties (>= 3.2, < 5.1)
     foreman (0.78.0)
@@ -871,7 +869,7 @@ DEPENDENCIES
   bundler-audit (~> 0.5.0)
   capybara (~> 2.6.2)
   capybara-screenshot (~> 1.0.0)
-  carrierwave (~> 0.11.0)
+  carrierwave (~> 1.0)
   charlock_holmes (~> 0.7.3)
   chronic (~> 0.10.2)
   chronic_duration (~> 0.10.6)
@@ -896,7 +894,7 @@ DEPENDENCIES
   ffaker (~> 2.4)
   flay (~> 2.8.0)
   fog-aws (~> 0.9)
-  fog-core (~> 1.40)
+  fog-core (~> 1.44)
   fog-google (~> 0.5)
   fog-local (~> 0.3)
   fog-openstack (~> 0.1)
diff --git a/app/workers/expire_build_instance_artifacts_worker.rb b/app/workers/expire_build_instance_artifacts_worker.rb
index eb403c134d138..7b59e97649224 100644
--- a/app/workers/expire_build_instance_artifacts_worker.rb
+++ b/app/workers/expire_build_instance_artifacts_worker.rb
@@ -8,7 +8,7 @@ def perform(build_id)
       .reorder(nil)
       .find_by(id: build_id)
 
-    return unless build.try(:project)
+    return unless build&.project && !build.project.pending_delete
 
     Rails.logger.info "Removing artifacts for build #{build.id}..."
     build.erase_artifacts!
diff --git a/config/initializers/carrierwave.rb b/config/initializers/carrierwave.rb
index 1933afcbfb1e2..cd7df44351a60 100644
--- a/config/initializers/carrierwave.rb
+++ b/config/initializers/carrierwave.rb
@@ -6,6 +6,8 @@
   AWS_CONFIG = YAML.load(File.read(aws_file))[Rails.env]
 
   CarrierWave.configure do |config|
+    config.fog_provider = 'fog/aws'
+
     config.fog_credentials = {
       provider: 'AWS',                                        # required
       aws_access_key_id: AWS_CONFIG['access_key_id'],         # required
diff --git a/spec/factories/projects.rb b/spec/factories/projects.rb
index 0db2fe04eddd7..3580752a805b8 100644
--- a/spec/factories/projects.rb
+++ b/spec/factories/projects.rb
@@ -32,6 +32,10 @@
       request_access_enabled true
     end
 
+    trait :with_avatar do
+      avatar { File.open(Rails.root.join('spec/fixtures/dk.png')) }
+    end
+
     trait :repository do
       # no-op... for now!
     end
diff --git a/spec/models/project_spec.rb b/spec/models/project_spec.rb
index 92d420337f90c..d9244657953c2 100644
--- a/spec/models/project_spec.rb
+++ b/spec/models/project_spec.rb
@@ -781,17 +781,14 @@
 
     let(:project) { create(:empty_project) }
 
-    context 'When avatar file is uploaded' do
-      before do
-        project.update_columns(avatar: 'uploads/avatar.png')
-        allow(project.avatar).to receive(:present?) { true }
-      end
+    context 'when avatar file is uploaded' do
+      let(:project) { create(:empty_project, :with_avatar) }
 
-      let(:avatar_path) do
-        "/uploads/project/avatar/#{project.id}/uploads/avatar.png"
-      end
+      it 'creates a correct avatar path' do
+        avatar_path = "/uploads/project/avatar/#{project.id}/dk.png"
 
-      it { should eq "http://#{Gitlab.config.gitlab.host}#{avatar_path}" }
+        expect(project.avatar_url).to eq("http://#{Gitlab.config.gitlab.host}#{avatar_path}")
+      end
     end
 
     context 'When avatar file in git' do
diff --git a/spec/workers/expire_build_instance_artifacts_worker_spec.rb b/spec/workers/expire_build_instance_artifacts_worker_spec.rb
index d202b3de77edc..1d8da68883b1b 100644
--- a/spec/workers/expire_build_instance_artifacts_worker_spec.rb
+++ b/spec/workers/expire_build_instance_artifacts_worker_spec.rb
@@ -34,12 +34,14 @@
       context 'when associated project was removed' do
         let(:build) do
           create(:ci_build, :artifacts, artifacts_expiry) do |build|
-            build.project.delete
+            build.project.pending_delete = true
           end
         end
 
         it 'does not remove artifacts' do
-          expect(build.reload.artifacts_file.exists?).to be_truthy
+          expect do
+            build.reload.artifacts_file
+          end.not_to raise_error
         end
       end
     end
-- 
GitLab