Service/git

From Sugar Labs
< Service
Revision as of 02:18, 30 March 2012 by Alsroot (talk | contribs) (Database tips)
Jump to: navigation, search

Hostnames

Hardware

Machine/jita

Administrative contact

git AT sugarlabs DOT org

Sysadmins

For non-emergency calls, preferably send email to the administrative contact.

Notes

Gitorious hosting.

Home /srv/gitorious
Daemon /etc/init.d/gitorious
Logs /srv/gitorious/app/log
Config

/srv/gitorious/app/config/database.yml
/srv/gitorious/app/config/gitorious.yml
/etc/cron.daily/gitorious
/etc/logrotate.d/gitorious
/etc/httpd/conf.d/git.sugarlabs.org.conf

SSL certificates

/etc/ssl/private/git.sugarlabs.org.key
/etc/ssl/certs/git.sugarlabs.org.pem

Ports

9418 git server

Sources http://gitorious.org/~alsroot/sugarlabs-org

Plugins

Sugar Labs Gitorious instance uses downstream several plugins. All of them are enabled from app/processors/push_event_processor.rb file and placed to lib/ directory.

CIA

Notify http://cia.vc about all commits.

Plugin file:

lib/cia.rb

gitorious.yml configuration:

cia: true

Patchwork

Patchwork integration.

Plugin file:

lib/patchwork.rb

gitorious.yml configuration:

patchwork:
 sugar:
   url: "https://git.sugarlabs.org:0000000000000000000000000@patchwork.sugarlabs.org/xmlrpc/"
   linkname: sugar
   repositories:
   - mainline
   set_state: Accepted
   find_states:
   - New
   - Under Review

Pootle commits

Send notification emails on every pootle commit.

Plugin file:

lib/emailer.rb

gitorious.yml configuration:

emailer: true

Database tips

To make runtime changes in Gitorious database, follow regular Rails workflow - run scripts/console:

cd /srv/gitorious/app
sudo -u gitorious RAILS_ENV=production script/console

It is regular Ruby console and all features, like TAB completion, work. To tweak Gitorious data, just use its model classes, e.g.:

# search of particular object by its attributes
user = User.find_by_login("user")
project = Project.find_by_title("project")

# get object attributes
user.email

# change object attributes
project.owner = User.find_by_email("foo@bar")
project.save!

# destroy object and all its dependencies
user.destroy

# reset user password
user = User.find_by_email("user")
password_key = user.forgot_password!
Mailer.deliver_forgotten_password(user, password_key)

# add repository committer
committer = User.find_by_login("user")
repo = Repository::find_by_path("sugar/mainline")
repo.committerships.create_with_permissions!({:committer => committer}, (Committership::CAN_COMMIT))

# delete repository committer
committer = User.find_by_login("user")
repo = Repository::find_by_path("sugar/mainline")
repo.committerships = repo.committerships.select {|i| !i.members.include? committer }

# change repository owner
new_owner = User.find_by_login("user")
repo = Repository::find_by_path("sugar/mainline")
cs = repo.committerships.select {|i| i.committer == new_owner}.pop
cs.permissions = (Committership::CAN_ADMIN | Committership::CAN_COMMIT | Committership::CAN_REVIEW)
cs.save!
repo.owner = new_owner
repo.save!

# move repository to another project
new_project = Project.find_by_title('sl-tweaks')
repo = Repository::find_by_path("sat-solver/mainline")
repo.project = new_project
repo.name = "sat-solver"
repo.save!

# check users permissions for particular repository
repo = Repository::find_by_path("pukllanapac/mainline")
repo.committerships.each {|i| puts "#{User.find(i.committer_id).login} review=#{i.permissions & Committership::CAN_REVIEW > 0}"}
repo.committerships.each {|i| puts "#{User.find(i.committer_id).login} commit=#{i.permissions & Committership::CAN_COMMIT > 0}"}
repo.committerships.each {|i| puts "#{User.find(i.committer_id).login} admin=#{i.permissions & Committership::CAN_ADMIN > 0}"}

TODO

Current gitorious patch doesn't handle renaming repositories properly and doesn't update symliks in /srv/gitorious/repos-by-name. For now, run code to recreate symlinks:

 Repository::find_each {|i| s='/srv/gitorious/repos/' + i.real_gitdir; d='/srv/gitorious/repos-by-name/' + i.gitdir; FileUtils.makedirs(File.dirname(d)) if !File.exist?(File.dirname(d)); File.symlink(s, d) if !File.exists? d}

Upgrade notes

git

/srv/gitorious/app

After pulling new sources, migrate database:

cd /srv/gitorious/app/
sudo -u gitorious RAILS_ENV=production rake db:migrate