diff options
author | Marius Mathiesen <marius.mathiesen@gmail.com> | 2009-06-11 14:14:10 +0200 |
---|---|---|
committer | Marius Mathiesen <marius.mathiesen@gmail.com> | 2009-06-24 12:20:33 +0200 |
commit | 84efb5b6e280634f04492cd85b88f385f6bda79d (patch) | |
tree | 322e68964f8dd281240f3beead57633595808083 /app/models/merge_request.rb | |
parent | 98ce81367aca6c2ac675a704f94f8c1ce9fd1de7 (diff) | |
download | gitorious-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.rb | 23 |
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 |