I use the following function to change the ownership of a project to another 
user:

def change_project_owner(project, owner, keep_old = true)
  p = Project.find_by_title(project)
  u = User.find_by_login(owner)
  old_owner = p.owner

  return if u == old_owner

  p.repositories.mainlines.each do |r|
    cs = r.committerships.find_by_committer_id_and_committer_type(u.id, "User")
    if cs
      cs.destroy
    end
  end
  p.change_owner_to(u).each do |r|
    r.change_owner_to!(u)
    r.user_id = u.id
    r.save!
    r.committerships.find_all_by_committer_type("User").each do |cs|
      if cs.committer_id == u.id
        cs.creator_id = nil
        cs.save!
      elsif cs.creator_id == old_owner.id
        cs.creator_id = u.id
        cs.save!
      end
    end
    if keep_old
      cs = r.committerships.create!(:committer => old_owner, :creator_id => 
u.id)
      cs.build_permissions(:review, :commit, :admin)
      cs.save!
    end
  end
  p.save!
end

Note that I use Project.find_by_title() which you can easily change to 
Project.find_by_slug(). I also do not know what will happen if there are group 
committerships involved (we do not use groups). Set keep_old to true if you 
want the old owner to retain his/her committerships after the owner change.

//Peter

From: [email protected] [mailto:[email protected]] On Behalf 
Of Allan Caffee
Sent: den 5 oktober 2012 02:15
To: [email protected]
Subject: [gitorious] Transferring ownership of a project and repository

I'm trying to transfer the ownership of a project and repository belonging to 
someone whose account has been disabled. Since the account is disabled I'm 
trying to use the ruby console to transfer ownership, but I'm getting a 
NoMethodError using the methods defined on these models. I'm new to ruby/rails 
so it's possible I'm overlooking something fairly obvious, but here's what I'm 
doing:

% env RAILS_ENV=production ruby script/console
>> user = User.find_by_login('username')
=> #<User id: 23, ...>
>> proj = Project.find_by_slug('foo-project)
=> #<Project id: 121, ...>
>> proj.change_owner_to user
NoMethodError: undefined method `change_owner_to' for #<Project:0x7f8ad0202da0>
    from 
/var/www/gitorious/vendor/rails/activerecord/lib/active_record/attribute_methods.rb:260:in
 `method_missing'
    from (irb):32


What am I missing here? Is there a better way to do this? I'm using gitorious 
v2.1.1.

Thanks,
Allan
--
To post to this group, send email to 
[email protected]<mailto:[email protected]>
To unsubscribe from this group, send email to
[email protected]<mailto:[email protected]>

-- 
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to
[email protected]

Reply via email to