Welcome to mirror list, hosted at ThFree Co, Russian Federation.

gitlab.com/gitlab-org/gitlab-foss.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJames Lopez <james@jameslopez.es>2016-03-21 15:15:51 +0300
committerJames Lopez <james@jameslopez.es>2016-03-21 15:15:51 +0300
commit383cc8404741f65bd52fbe80eec6c2dae2578fce (patch)
tree72cc6c535be43faa333867993cae2f3c85157a6d /db/migrate
parent5f86912ef032845ef2a08acf70b434c0e4d58631 (diff)
some refactoring based on feedback
Diffstat (limited to 'db/migrate')
-rw-r--r--db/migrate/20160302152808_remove_wrong_import_url_from_projects.rb52
1 files changed, 19 insertions, 33 deletions
diff --git a/db/migrate/20160302152808_remove_wrong_import_url_from_projects.rb b/db/migrate/20160302152808_remove_wrong_import_url_from_projects.rb
index 881af783c61..f98ec925ac4 100644
--- a/db/migrate/20160302152808_remove_wrong_import_url_from_projects.rb
+++ b/db/migrate/20160302152808_remove_wrong_import_url_from_projects.rb
@@ -1,29 +1,5 @@
class RemoveWrongImportUrlFromProjects < ActiveRecord::Migration
- class ImportUrlSanitizer
- def initialize(url)
- @url = URI.parse(url)
- end
-
- def sanitized_url
- @sanitized_url ||= safe_url
- end
-
- def credentials
- @credentials ||= { user: @url.user, password: @url.password }
- end
-
- private
-
- def safe_url
- safe_url = @url.dup
- safe_url.password = nil
- safe_url.user = nil
- safe_url
- end
-
- end
-
class FakeProjectImportData
extend AttrEncrypted
attr_accessor :credentials
@@ -31,20 +7,30 @@ class RemoveWrongImportUrlFromProjects < ActiveRecord::Migration
end
def up
- projects_with_wrong_import_url.each do |project|
- sanitizer = ImportUrlSanitizer.new(project["import_url"])
-
- ActiveRecord::Base.transaction do
- execute("UPDATE projects SET import_url = '#{sanitizer.sanitized_url}' WHERE id = #{project['id']}")
- fake_import_data = FakeProjectImportData.new
- fake_import_data.credentials = sanitizer.credentials
- execute("UPDATE project_import_data SET encrypted_credentials = '#{fake_import_data.encrypted_credentials}' WHERE project_id = #{project['id']}")
+ projects_with_wrong_import_url.find_in_batches do |project_batch|
+ project_batch.each do |project|
+ sanitizer = Gitlab::ImportUrlSanitizer.new(project["import_url"])
+
+ ActiveRecord::Base.transaction do
+ execute("UPDATE projects SET import_url = '#{quote(sanitizer.sanitized_url)}' WHERE id = #{project['id']}")
+ fake_import_data = FakeProjectImportData.new
+ fake_import_data.credentials = sanitizer.credentials
+ execute("UPDATE project_import_data SET encrypted_credentials = '#{quote(fake_import_data.encrypted_credentials)}' WHERE project_id = #{project['id']}")
+ end
end
end
end
+ def down
+
+ end
+
def projects_with_wrong_import_url
# TODO Check live with #operations for possible false positives. Also, consider regex? But may have issues MySQL/PSQL
- select_all("SELECT p.id, p.import_url from projects p WHERE p.import_url LIKE '%//%:%@%' or p.import_url like '#{"_"*40}@github.com%'")
+ select_all("SELECT p.id, p.import_url FROM projects p WHERE p.import_url IS NOT NULL AND (p.import_url LIKE '%//%:%@%' OR p.import_url LIKE '#{"_"*40}@github.com%')")
+ end
+
+ def quote(value)
+ ActiveRecord::Base.connection.quote(value)
end
end