summaryrefslogtreecommitdiffstats
path: root/app/models/merge_request.rb
diff options
context:
space:
mode:
authorMarius Mathiesen <marius.mathiesen@gmail.com>2009-06-11 14:14:10 +0200
committerMarius Mathiesen <marius.mathiesen@gmail.com>2009-06-24 12:20:33 +0200
commit84efb5b6e280634f04492cd85b88f385f6bda79d (patch)
tree322e68964f8dd281240f3beead57633595808083 /app/models/merge_request.rb
parent98ce81367aca6c2ac675a704f94f8c1ce9fd1de7 (diff)
downloadgitorious-mainline-outdated-84efb5b6e280634f04492cd85b88f385f6bda79d.zip
gitorious-mainline-outdated-84efb5b6e280634f04492cd85b88f385f6bda79d.tar.gz
gitorious-mainline-outdated-84efb5b6e280634f04492cd85b88f385f6bda79d.tar.bz2
Add a migration facility for existing merge requests
Diffstat (limited to 'app/models/merge_request.rb')
-rw-r--r--app/models/merge_request.rb23
1 files changed, 22 insertions, 1 deletions
diff --git a/app/models/merge_request.rb b/app/models/merge_request.rb
index c21d28d..6dd5f29 100644
--- a/app/models/merge_request.rb
+++ b/app/models/merge_request.rb
@@ -405,9 +405,30 @@ class MergeRequest < ActiveRecord::Base
def push_new_branch_to_tracking_repo
self.version = self.version + 1
branch_spec = "refs/merge-requests/#{id}:refs/merge-requests/#{id}/#{version}"
+ raise "No tracking repository exists for merge request #{id}" unless target_repository.tracking_repository
target_repository.git.git.push({}, target_repository.tracking_repository.full_repository_path, branch_spec)
target_repository.project.create_event(Action::UPDATE_MERGE_REQUEST, self, user, "New version is #{version}", "reason")
end
-
+ # One time migration:
+ # Since the backend is changed from using a diff between source and target repos, we need an actual branch which holds the MR:
+ # - Create the tracking repo for each target repository
+ # - Push the merge request to the tracking repo (eg. one branch in the target repo and one to the tracking repo)
+ def migrate_with_tracking_repository
+ if target_repository && source_repository
+ if !target_repository.has_tracking_repository?
+ tracking_repo = target_repository.create_tracking_repository
+ $stderr.puts "Creating tracking repo at #{tracking_repo.full_repository_path}"
+ Repository.clone_git_repository(tracking_repo.real_gitdir, target_repository.real_gitdir,{:skip_hooks => true})
+ end
+ $stderr.puts "Pushing to tracking repo for merge request #{id}"
+ begin
+ push_to_tracking_repository!
+ rescue => e
+ $stderr.puts e
+ end
+ else
+ $stderr.puts "WARNING: Merge request #{id} lacks target or source repository"
+ end
+ end
end