From 7c5646c2228400fee92ff0afe3043759ca0730b5 Mon Sep 17 00:00:00 2001 From: Aleksey Garbarev Date: Mon, 22 Feb 2016 19:02:31 +0800 Subject: [PATCH 1/4] Storing relative paths in database to avoid problems while migration/upgrade --- app/models/repository/git_remote.rb | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) diff --git a/app/models/repository/git_remote.rb b/app/models/repository/git_remote.rb index f5c0b2d..40ca7e7 100644 --- a/app/models/repository/git_remote.rb +++ b/app/models/repository/git_remote.rb @@ -19,6 +19,31 @@ class Repository::GitRemote < Repository::Git # end # end + + ## Overrides URL setters/getters to avoid absolute locations in database + + def relative_url + self.url.gsub(PATH_PREFIX, PATH_SHORT_PREFIX) + end + + def url + super.gsub(PATH_SHORT_PREFIX, PATH_PREFIX) + end + + def url=(url) + super(url.gsub(PATH_PREFIX, PATH_SHORT_PREFIX)) + end + + def root_url + super.gsub(PATH_SHORT_PREFIX, PATH_PREFIX) + end + + def root_url=(root_url) + super(root_url.gsub(PATH_PREFIX, PATH_SHORT_PREFIX)) + end + + ## + def extra_clone_url return nil unless extra_info extra_info["extra_clone_url"] From c1874976d63717698c64f1c6d4cbed97b9a8b772 Mon Sep 17 00:00:00 2001 From: Aleksey Garbarev Date: Mon, 22 Feb 2016 19:13:57 +0800 Subject: [PATCH 2/4] Repositories clenaup method was added --- app/models/repository/git_remote.rb | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/app/models/repository/git_remote.rb b/app/models/repository/git_remote.rb index 40ca7e7..8b242e3 100644 --- a/app/models/repository/git_remote.rb +++ b/app/models/repository/git_remote.rb @@ -18,8 +18,20 @@ class Repository::GitRemote < Repository::Git # system "rm -Rf #{self.clone_path}" # end # end - - + + + before_destroy :remove_unused_repos + + ## Deletes repository directory if it's inside plugin directory (i.e. belongs to plugin) + ## and this repo is not used by other repositories + def remove_unused_repos + inside_plugin_bundle = self.clone_path.include? PATH_PREFIX + nobody_else_need_it = Repository.where(url: self.relative_url).count <= 1 + if inside_plugin_bundle && nobody_else_need_it + system "rm -Rf #{self.clone_path}" + end + end + ## Overrides URL setters/getters to avoid absolute locations in database def relative_url From 9b7be8ed9c0f53e5593105ba0e00227e7c6d0ad5 Mon Sep 17 00:00:00 2001 From: Aleksey Garbarev Date: Wed, 24 Feb 2016 05:24:06 +0800 Subject: [PATCH 3/4] oops.. Forgot to commit PATH_SHORT_PREFIX variable declaration.. cleanup --- app/models/repository/git_remote.rb | 21 ++++++++++----------- 1 file changed, 10 insertions(+), 11 deletions(-) diff --git a/app/models/repository/git_remote.rb b/app/models/repository/git_remote.rb index 8b242e3..7d01d1a 100644 --- a/app/models/repository/git_remote.rb +++ b/app/models/repository/git_remote.rb @@ -8,18 +8,9 @@ class Repository::GitRemote < Repository::Git PLUGIN_ROOT = Pathname.new(__FILE__).join("../../../..").realpath.to_s PATH_PREFIX = PLUGIN_ROOT + "/repos/" - - before_validation :initialize_clone - - # TODO: figure out how to do this safely (if at all) - # before_deletion :rm_removed_repo - # def rm_removed_repo - # if Repository.find_all_by_url(repo.url).length <= 1 - # system "rm -Rf #{self.clone_path}" - # end - # end - + PATH_SHORT_PREFIX = "(HOME)/" + before_validation :initialize_clone before_destroy :remove_unused_repos ## Deletes repository directory if it's inside plugin directory (i.e. belongs to plugin) @@ -32,6 +23,14 @@ def remove_unused_repos end end + # TODO: figure out how to do this safely (if at all) + # before_deletion :rm_removed_repo + # def rm_removed_repo + # if Repository.find_all_by_url(repo.url).length <= 1 + # system "rm -Rf #{self.clone_path}" + # end + # end + ## Overrides URL setters/getters to avoid absolute locations in database def relative_url From 46a5cc039915cf968ddaddab20dea554e0f7c7c6 Mon Sep 17 00:00:00 2001 From: Aleksey Garbarev Date: Wed, 24 Feb 2016 05:51:48 +0800 Subject: [PATCH 4/4] short-prefix variable renamed --- app/models/repository/git_remote.rb | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/app/models/repository/git_remote.rb b/app/models/repository/git_remote.rb index 7d01d1a..9fc2b09 100644 --- a/app/models/repository/git_remote.rb +++ b/app/models/repository/git_remote.rb @@ -8,7 +8,7 @@ class Repository::GitRemote < Repository::Git PLUGIN_ROOT = Pathname.new(__FILE__).join("../../../..").realpath.to_s PATH_PREFIX = PLUGIN_ROOT + "/repos/" - PATH_SHORT_PREFIX = "(HOME)/" + RELATIVE_PATH_PREFIX = "(HOME)/" before_validation :initialize_clone before_destroy :remove_unused_repos @@ -34,23 +34,23 @@ def remove_unused_repos ## Overrides URL setters/getters to avoid absolute locations in database def relative_url - self.url.gsub(PATH_PREFIX, PATH_SHORT_PREFIX) + self.url.gsub(PATH_PREFIX, RELATIVE_PATH_PREFIX) end def url - super.gsub(PATH_SHORT_PREFIX, PATH_PREFIX) + super.gsub(RELATIVE_PATH_PREFIX, PATH_PREFIX) end def url=(url) - super(url.gsub(PATH_PREFIX, PATH_SHORT_PREFIX)) + super(url.gsub(PATH_PREFIX, RELATIVE_PATH_PREFIX)) end def root_url - super.gsub(PATH_SHORT_PREFIX, PATH_PREFIX) + super.gsub(RELATIVE_PATH_PREFIX, PATH_PREFIX) end def root_url=(root_url) - super(root_url.gsub(PATH_PREFIX, PATH_SHORT_PREFIX)) + super(root_url.gsub(PATH_PREFIX, RELATIVE_PATH_PREFIX)) end ##