Merge branch '3.2-master' into 257-new_design_for_profiles
Conflicts: config/locales/users.en.yml config/locales/users.ru.yml
This commit is contained in:
commit
f6dd072a24
2
Gemfile
2
Gemfile
|
@ -33,6 +33,7 @@ gem 'wikicloth'
|
||||||
|
|
||||||
gem 'unicorn', '~> 4.2.0'
|
gem 'unicorn', '~> 4.2.0'
|
||||||
gem 'newrelic_rpm', '~> 3.3.2'
|
gem 'newrelic_rpm', '~> 3.3.2'
|
||||||
|
gem 'whenever', '~> 0.7.3', :require => false
|
||||||
|
|
||||||
gem 'rails3-jquery-autocomplete', '~> 1.0.6'
|
gem 'rails3-jquery-autocomplete', '~> 1.0.6'
|
||||||
gem 'will_paginate', '~> 3.0.3'
|
gem 'will_paginate', '~> 3.0.3'
|
||||||
|
@ -60,7 +61,6 @@ group :development do
|
||||||
gem 'hirb'
|
gem 'hirb'
|
||||||
gem 'shotgun'
|
gem 'shotgun'
|
||||||
# deploy
|
# deploy
|
||||||
gem 'whenever', :require => false
|
|
||||||
gem 'capistrano', :require => false
|
gem 'capistrano', :require => false
|
||||||
gem 'cape', :require => false
|
gem 'cape', :require => false
|
||||||
gem 'capistrano_colors', :require => false
|
gem 'capistrano_colors', :require => false
|
||||||
|
|
|
@ -341,6 +341,6 @@ DEPENDENCIES
|
||||||
therubyracer (~> 0.9.10)
|
therubyracer (~> 0.9.10)
|
||||||
uglifier (~> 1.2.1)
|
uglifier (~> 1.2.1)
|
||||||
unicorn (~> 4.2.0)
|
unicorn (~> 4.2.0)
|
||||||
whenever
|
whenever (~> 0.7.3)
|
||||||
wikicloth
|
wikicloth
|
||||||
will_paginate (~> 3.0.3)
|
will_paginate (~> 3.0.3)
|
||||||
|
|
|
@ -31,10 +31,6 @@ $(document).ready(function() {
|
||||||
disableNotifierCbx($(this));
|
disableNotifierCbx($(this));
|
||||||
});
|
});
|
||||||
|
|
||||||
$('div.information > div.user').live('click', function() {
|
|
||||||
droplist();
|
|
||||||
});
|
|
||||||
|
|
||||||
$('div.information > div.profile > a').live('click', function(e) {
|
$('div.information > div.profile > a').live('click', function(e) {
|
||||||
e.preventDefault();
|
e.preventDefault();
|
||||||
});
|
});
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
jQuery(document).ready(function(){
|
jQuery(document).ready(function(){
|
||||||
|
|
||||||
var params = {
|
var params = {
|
||||||
changedEl: ".lineForm select",
|
changedEl: ".lineForm select.cusel",
|
||||||
visRows: 999999,
|
visRows: 999999,
|
||||||
scrollArrows: false
|
scrollArrows: false
|
||||||
}
|
}
|
||||||
|
|
|
@ -106,7 +106,7 @@ $(document).ready(function() {
|
||||||
return false;
|
return false;
|
||||||
};
|
};
|
||||||
|
|
||||||
$('#search_user, #search_labels').live('submit', function() {
|
$('#search_user').live('submit', function() {
|
||||||
var id = $(this).attr('id');
|
var id = $(this).attr('id');
|
||||||
if(id.indexOf('user') != -1) { // FIXME
|
if(id.indexOf('user') != -1) { // FIXME
|
||||||
var which = 'users';
|
var which = 'users';
|
||||||
|
@ -171,14 +171,13 @@ $(document).ready(function() {
|
||||||
var clone = $(this).clone();
|
var clone = $(this).clone();
|
||||||
form_new.find('#flag-span').fadeOut(0);
|
form_new.find('#flag-span').fadeOut(0);
|
||||||
form_new.find('#issue_labels').append(clone);
|
form_new.find('#issue_labels').append(clone);
|
||||||
var labels = $('#active_labels');
|
var labels = $('.manage_labels');
|
||||||
labels.find('#'+$(this).attr('id')).remove();
|
labels.append($(this).find('#'+$(this).attr('id')));
|
||||||
labels.append(clone);
|
|
||||||
});
|
});
|
||||||
|
|
||||||
$('.remove_label.label.selected').live('click', function() {
|
$('.remove_label.label.selected').live('click', function() {
|
||||||
var id = $(this).attr('id');
|
var id = $(this).attr('id');
|
||||||
$('.current_labels, #active_labels').find('#'+id+'.label.selected.remove_label').remove();
|
$('.manage_labels, #active_labels').find('#'+id+'.label.selected.remove_label').remove();
|
||||||
var form = $('.form.issue');
|
var form = $('.form.issue');
|
||||||
if(form.find('.remove_label.label.selected').length == 1) {
|
if(form.find('.remove_label.label.selected').length == 1) {
|
||||||
form.find('#flag-span').fadeIn(0);
|
form.find('#flag-span').fadeIn(0);
|
||||||
|
@ -189,6 +188,7 @@ $(document).ready(function() {
|
||||||
label.removeClass('selected').addClass('add_label').removeClass('remove_label');
|
label.removeClass('selected').addClass('add_label').removeClass('remove_label');
|
||||||
label.find('.labeltext.selected').attr('style', '').removeClass('selected');
|
label.find('.labeltext.selected').attr('style', '').removeClass('selected');
|
||||||
label.find('.flag').fadeIn(0);
|
label.find('.flag').fadeIn(0);
|
||||||
|
$('.manage_labels').find('#'+$(this).attr('id')).remove();
|
||||||
});
|
});
|
||||||
|
|
||||||
$('.issue_status.switch_issue_status').live('click', function () {
|
$('.issue_status.switch_issue_status').live('click', function () {
|
||||||
|
@ -243,12 +243,14 @@ $(document).ready(function() {
|
||||||
|
|
||||||
$('.button.manage_executor').live('click', function() {
|
$('.button.manage_executor').live('click', function() {
|
||||||
$('form#search_user, .button.update_executor').fadeIn(0);
|
$('form#search_user, .button.update_executor').fadeIn(0);
|
||||||
$('.current_executor .people').addClass('remove_executor selected');
|
$('.current_executor .people').addClass('remove_executor selected').removeClass('nopointer');
|
||||||
$(this).fadeOut(0);
|
$(this).fadeOut(0);
|
||||||
});
|
});
|
||||||
|
|
||||||
$('.button.manage_labels').live('click', function() {
|
$('.button.manage_labels').live('click', function() {
|
||||||
$('form#search_labels, .button.update_labels').fadeIn(0);
|
$('.button.update_labels').fadeIn(0);
|
||||||
|
$('.current_labels .label .labeltext.selected').parent().addClass('remove_label selected').removeClass('nopointer');
|
||||||
|
$('.current_labels .label .labeltext:not(.selected)').parent().addClass('add_label').removeClass('nopointer');
|
||||||
$(this).fadeOut(0);
|
$(this).fadeOut(0);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
@ -259,6 +261,7 @@ $(document).ready(function() {
|
||||||
url: form.attr("action"),
|
url: form.attr("action"),
|
||||||
data: form.serialize(),
|
data: form.serialize(),
|
||||||
success: function(data){
|
success: function(data){
|
||||||
|
$('.current_executor .people').removeClass('remove_executor selected').addClass('nopointer');
|
||||||
$('form#search_user, .button.update_executor').fadeOut(0);
|
$('form#search_user, .button.update_executor').fadeOut(0);
|
||||||
$('.button.manage_executor').fadeIn(0);
|
$('.button.manage_executor').fadeIn(0);
|
||||||
$('#manage_issue_users_list').html('');
|
$('#manage_issue_users_list').html('');
|
||||||
|
@ -277,7 +280,8 @@ $(document).ready(function() {
|
||||||
url: form.attr("action"),
|
url: form.attr("action"),
|
||||||
data: form.serialize(),
|
data: form.serialize(),
|
||||||
success: function(data){
|
success: function(data){
|
||||||
$('form#search_labels, .button.update_labels').fadeOut(0);
|
$('.current_labels .label').removeClass('remove_label selected').addClass('nopointer');
|
||||||
|
$('.button.update_labels').fadeOut(0);
|
||||||
$('.button.manage_labels').fadeIn(0);
|
$('.button.manage_labels').fadeIn(0);
|
||||||
$('#manage_issue_labels_list').html('');
|
$('#manage_issue_labels_list').html('');
|
||||||
},
|
},
|
||||||
|
|
|
@ -442,3 +442,5 @@ table.wiki .history .td2 .name span.username {
|
||||||
text-overflow: ellipsis;
|
text-overflow: ellipsis;
|
||||||
width: 164px;
|
width: 164px;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#fork-and-edit {display:block;}
|
||||||
|
|
|
@ -298,7 +298,7 @@ header div.droplist a:hover{
|
||||||
color: #575756;
|
color: #575756;
|
||||||
text-decoration: none;
|
text-decoration: none;
|
||||||
height: 34px;
|
height: 34px;
|
||||||
padding: 0px 20px 6px 20px;
|
padding: 0px 20px 8px 20px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.sub-menu nav ul li a.active {
|
.sub-menu nav ul li a.active {
|
||||||
|
@ -651,6 +651,11 @@ article div.all.bigpadding div.rightside {
|
||||||
width: 70px;
|
width: 70px;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
a.button.width81 {
|
||||||
|
width: 79px;
|
||||||
|
padding: 4px 0px;
|
||||||
|
text-align: center;
|
||||||
|
}
|
||||||
|
|
||||||
/* Footer */
|
/* Footer */
|
||||||
|
|
||||||
|
@ -1408,8 +1413,8 @@ div.description-top input.name {
|
||||||
height: 21px;
|
height: 21px;
|
||||||
width: auto;
|
width: auto;
|
||||||
color: #575756;
|
color: #575756;
|
||||||
font-size: 12px;
|
font-size: 11px;
|
||||||
width: 215px;
|
width: 415px;
|
||||||
padding: 2px 5px 3px;
|
padding: 2px 5px 3px;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -2,6 +2,6 @@ class ActivityFeedsController < ApplicationController
|
||||||
before_filter :authenticate_user!
|
before_filter :authenticate_user!
|
||||||
|
|
||||||
def index
|
def index
|
||||||
@activity_feeds = current_user.activity_feeds.order('created_at DESC')
|
@activity_feeds = current_user.activity_feeds.order('created_at DESC').limit(10)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -1,12 +1,11 @@
|
||||||
# -*- encoding : utf-8 -*-
|
# -*- encoding : utf-8 -*-
|
||||||
class CommentsController < ApplicationController
|
class CommentsController < ApplicationController
|
||||||
before_filter :authenticate_user!
|
before_filter :authenticate_user!
|
||||||
before_filter :set_commentable, :only => [:index, :edit, :create, :update, :destroy]
|
|
||||||
#before_filter :find_project, :only => [:index, :edit]
|
|
||||||
before_filter :find_comment, :only => [:edit, :update, :destroy]
|
|
||||||
|
|
||||||
authorize_resource :only => [:show, :edit, :update, :destroy]
|
load_resource :project
|
||||||
authorize_resource :project, :only => [:index]
|
before_filter :set_commentable
|
||||||
|
before_filter :find_comment, :only => [:edit, :update, :destroy]
|
||||||
|
authorize_resource
|
||||||
|
|
||||||
def index
|
def index
|
||||||
@comments = @commentable.comments
|
@comments = @commentable.comments
|
||||||
|
@ -14,8 +13,11 @@ class CommentsController < ApplicationController
|
||||||
|
|
||||||
def create
|
def create
|
||||||
@comment = @commentable.comments.build(params[:comment]) if @commentable.class == Issue
|
@comment = @commentable.comments.build(params[:comment]) if @commentable.class == Issue
|
||||||
@comment = Comment.new(params[:comment].merge(:commentable_id => @commentable.id.hex, :commentable_type => @commentable.class.name, :project => @project)) if @commentable.class == Grit::Commit
|
if @commentable.class == Grit::Commit
|
||||||
@comment.user = current_user
|
@comment = Comment.new(params[:comment].merge(:commentable_id => @commentable.id.hex, :commentable_type => @commentable.class.name))
|
||||||
|
@comment.project = @project
|
||||||
|
end
|
||||||
|
@comment.user_id = current_user.id
|
||||||
if @comment.save
|
if @comment.save
|
||||||
flash[:notice] = I18n.t("flash.comment.saved")
|
flash[:notice] = I18n.t("flash.comment.saved")
|
||||||
redirect_to commentable_path
|
redirect_to commentable_path
|
||||||
|
@ -54,23 +56,12 @@ class CommentsController < ApplicationController
|
||||||
|
|
||||||
private
|
private
|
||||||
|
|
||||||
def find_commentable
|
|
||||||
#params.each do |name, value|
|
|
||||||
# if name =~ /(.+)_id$/
|
|
||||||
# return $1.classify.constantize.find(value)
|
|
||||||
# end
|
|
||||||
#end
|
|
||||||
#nil
|
|
||||||
if params[:issue_id].present?
|
|
||||||
return Issue.find_by_serial_id_and_project_id(params[:issue_id], params[:project_id])
|
|
||||||
elsif params[:commit_id].present?
|
|
||||||
return @project.git_repository.commit(params[:commit_id])
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
def set_commentable
|
def set_commentable
|
||||||
find_project
|
@commentable = if params[:issue_id].present?
|
||||||
@commentable = find_commentable
|
@project.issues.find_by_serial_id params[:issue_id]
|
||||||
|
elsif params[:commit_id].present?
|
||||||
|
@project.git_repository.commit params[:commit_id]
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
def find_comment
|
def find_comment
|
||||||
|
@ -81,12 +72,6 @@ class CommentsController < ApplicationController
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
def find_project
|
|
||||||
@project = Project.find(params[:project_id])
|
|
||||||
end
|
|
||||||
|
|
||||||
protected
|
|
||||||
|
|
||||||
def commentable_path
|
def commentable_path
|
||||||
@commentable.class == Issue ? [@project, @commentable] : commit_path(@project, @commentable.id)
|
@commentable.class == Issue ? [@project, @commentable] : commit_path(@project, @commentable.id)
|
||||||
end
|
end
|
||||||
|
|
|
@ -38,12 +38,9 @@ class IssuesController < ApplicationController
|
||||||
end
|
end
|
||||||
|
|
||||||
def create
|
def create
|
||||||
@user_id = params[:user_id]
|
|
||||||
@user_uname = params[:user_uname]
|
@user_uname = params[:user_uname]
|
||||||
|
|
||||||
@issue = @project.issues.new(params[:issue])
|
@issue = @project.issues.new(params[:issue])
|
||||||
@issue.creator_id = current_user.id
|
@issue.creator_id = current_user.id
|
||||||
@issue.user_id = @user_id
|
|
||||||
|
|
||||||
if @issue.save
|
if @issue.save
|
||||||
@issue.subscribe_creator(current_user.id)
|
@issue.subscribe_creator(current_user.id)
|
||||||
|
@ -102,11 +99,6 @@ class IssuesController < ApplicationController
|
||||||
render 'issues/_search_collaborators', :layout => false
|
render 'issues/_search_collaborators', :layout => false
|
||||||
end
|
end
|
||||||
|
|
||||||
def search_labels
|
|
||||||
@labels = @project.labels.where("labels.name ILIKE ?", "%#{params[:search_labels]}%").order('labels.name').limit(10)
|
|
||||||
render 'issues/_search_labels', :layout => false
|
|
||||||
end
|
|
||||||
|
|
||||||
private
|
private
|
||||||
|
|
||||||
def load_and_authorize_label
|
def load_and_authorize_label
|
||||||
|
|
|
@ -1,36 +1,11 @@
|
||||||
# -*- encoding : utf-8 -*-
|
# -*- encoding : utf-8 -*-
|
||||||
class ProjectsController < ApplicationController
|
class ProjectsController < ApplicationController
|
||||||
is_related_controller!
|
before_filter :authenticate_user!
|
||||||
|
|
||||||
belongs_to :user, :group, :polymorphic => true, :optional => true
|
|
||||||
|
|
||||||
before_filter :authenticate_user!, :except => :auto_build
|
|
||||||
before_filter :find_project, :only => [:show, :edit, :update, :destroy, :fork, :sections]
|
|
||||||
before_filter :get_paths, :only => [:new, :create, :edit, :update]
|
|
||||||
|
|
||||||
load_and_authorize_resource
|
load_and_authorize_resource
|
||||||
|
|
||||||
def index
|
def index
|
||||||
@projects = if parent? and !parent.nil?
|
@projects = current_user.projects.paginate(:page => params[:page])
|
||||||
parent.projects
|
#@projects = @projects.search(params[:query]).search_order if params[:query]
|
||||||
else
|
|
||||||
Project
|
|
||||||
end.accessible_by(current_ability)
|
|
||||||
|
|
||||||
@projects = if params[:query]
|
|
||||||
@projects.by_name("%#{params[:query]}%").order("CHAR_LENGTH(name) ASC")
|
|
||||||
else
|
|
||||||
@projects
|
|
||||||
end.paginate(:page => params[:project_page])
|
|
||||||
|
|
||||||
@own_projects = current_user.own_projects
|
|
||||||
#@part_projects = current_user.projects + current_user.groups.map(&:projects).flatten.uniq - @own_projects
|
|
||||||
end
|
|
||||||
|
|
||||||
def show
|
|
||||||
@current_build_lists = @project.build_lists.current.recent.paginate :page => params[:page]
|
|
||||||
@branch = @project.branch(params[:treeish])
|
|
||||||
@commit = @branch.present? ? @branch.commit : @git_repository.log(@treeish).first
|
|
||||||
end
|
end
|
||||||
|
|
||||||
def new
|
def new
|
||||||
|
@ -43,7 +18,6 @@ class ProjectsController < ApplicationController
|
||||||
|
|
||||||
def create
|
def create
|
||||||
@project = Project.new params[:project]
|
@project = Project.new params[:project]
|
||||||
#@project.owner = get_owner
|
|
||||||
@project.owner = choose_owner
|
@project.owner = choose_owner
|
||||||
@who_owns = (@project.owner_type == 'User' ? :me : :group)
|
@who_owns = (@project.owner_type == 'User' ? :me : :group)
|
||||||
|
|
||||||
|
@ -84,20 +58,6 @@ class ProjectsController < ApplicationController
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
# TODO remove this?
|
|
||||||
def auto_build
|
|
||||||
uname, name = params[:git_repo].split('/')
|
|
||||||
owner = User.find_by_uname(uname) || Group.find_by_uname(uname)
|
|
||||||
project = Project.where(:owner_id => owner.id, :owner_type => owner.class).find_by_name!(name)
|
|
||||||
project.delay.auto_build # TODO don't queue duplicates
|
|
||||||
|
|
||||||
# p = params.delete_if{|k,v| k == 'controller' or k == 'action'}
|
|
||||||
# ActiveSupport::Notifications.instrument("event_log.observer", :object => project, :message => p.inspect)
|
|
||||||
logger.info "Git hook recieved from #{params[:git_user]} to #{params[:git_repo]}"
|
|
||||||
|
|
||||||
render :nothing => true
|
|
||||||
end
|
|
||||||
|
|
||||||
def sections
|
def sections
|
||||||
if request.post?
|
if request.post?
|
||||||
if @project.update_attributes(params[:project])
|
if @project.update_attributes(params[:project])
|
||||||
|
@ -110,27 +70,14 @@ class ProjectsController < ApplicationController
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def remove_user
|
||||||
|
@project.relations.by_object(current_user).destroy_all
|
||||||
|
flash[:notice] = t("flash.project.user_removed")
|
||||||
|
redirect_to projects_path
|
||||||
|
end
|
||||||
|
|
||||||
protected
|
protected
|
||||||
|
|
||||||
def get_paths
|
|
||||||
if params[:user_id]
|
|
||||||
@user = User.find params[:user_id]
|
|
||||||
@projects_path = user_path(@user) # user_projects_path @user
|
|
||||||
@new_project_path = new_project_path
|
|
||||||
elsif params[:group_id]
|
|
||||||
@group = Group.find params[:group_id]
|
|
||||||
@projects_path = group_path(@group) # group_projects_path @group
|
|
||||||
@new_projects_path = new_project_path
|
|
||||||
else
|
|
||||||
@projects_path = projects_path
|
|
||||||
@new_projects_path = new_project_path
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
def find_project
|
|
||||||
@project = Project.find params[:id]
|
|
||||||
end
|
|
||||||
|
|
||||||
def choose_owner
|
def choose_owner
|
||||||
if params[:who_owns] == 'group'
|
if params[:who_owns] == 'group'
|
||||||
Group.find(params[:owner_id])
|
Group.find(params[:owner_id])
|
||||||
|
|
|
@ -20,6 +20,6 @@ class SearchController < ApplicationController
|
||||||
|
|
||||||
def find_collection(type)
|
def find_collection(type)
|
||||||
var = :"@#{type}"
|
var = :"@#{type}"
|
||||||
instance_variable_set var, type.classify.constantize.search(params[:query]).paginate(:page => params[:page]) unless instance_variable_defined?(var)
|
instance_variable_set var, type.classify.constantize.search(params[:query]).search_order.paginate(:page => params[:page]) unless instance_variable_defined?(var)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -251,12 +251,14 @@ class WikiController < ApplicationController
|
||||||
end
|
end
|
||||||
|
|
||||||
def committer
|
def committer
|
||||||
|
unless @committer
|
||||||
p = commit_message.merge({:name => current_user.uname, :email => current_user.email})
|
p = commit_message.merge({:name => current_user.uname, :email => current_user.email})
|
||||||
@committer ||= Gollum::Committer.new(@wiki, p)
|
@committer = Gollum::Committer.new(@wiki, p)
|
||||||
# @committer.after_commit do |committer, sha1|
|
# @committer.after_commit do |committer, sha1|
|
||||||
# here goes callback for notification
|
# here goes callback for notification
|
||||||
# end
|
# end
|
||||||
ActivityFeedObserver.instance.after_create(@committer).delay
|
ActivityFeedObserver.instance.after_create(@committer).delay
|
||||||
|
end
|
||||||
@committer
|
@committer
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
module ActivityFeedsHelper
|
module ActivityFeedsHelper
|
||||||
def render_activity_feed(activity_feed)
|
def render_activity_feed(activity_feed)
|
||||||
render :partial => activity_feed.partial, :locals => activity_feed.data
|
render :partial => activity_feed.partial, :locals => activity_feed.data.merge(:activity_feed => activity_feed)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -15,4 +15,8 @@ module ProjectsHelper
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def visibility_icon(visibility)
|
||||||
|
visibility == 'open' ? 'unlock.png' : 'lock.png'
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -1,7 +1,12 @@
|
||||||
# -*- encoding : utf-8 -*-
|
# -*- encoding : utf-8 -*-
|
||||||
module UsersHelper
|
module UsersHelper
|
||||||
|
|
||||||
|
def avatar_url_by_email(email, size = :small)
|
||||||
|
avatar_url(User.where(:email => email).first, size)
|
||||||
|
end
|
||||||
|
|
||||||
def avatar_url(user, size = :small)
|
def avatar_url(user, size = :small)
|
||||||
if user.avatar?
|
if user.try('avatar?')
|
||||||
user.avatar.url(size)
|
user.avatar.url(size)
|
||||||
else
|
else
|
||||||
gravatar_url(user.email, user.avatar.styles[size].geometry.split('x').first)
|
gravatar_url(user.email, user.avatar.styles[size].geometry.split('x').first)
|
||||||
|
|
|
@ -13,6 +13,7 @@ class UserMailer < ActionMailer::Base
|
||||||
def new_comment_notification(comment, user)
|
def new_comment_notification(comment, user)
|
||||||
@user = user
|
@user = user
|
||||||
@comment = comment
|
@comment = comment
|
||||||
|
@comment.helper
|
||||||
mail(:to => user.email, :subject => I18n.t("notifications.subjects.new_#{comment.commit_comment? ? 'commit_' : ''}comment_notification")) do |format|
|
mail(:to => user.email, :subject => I18n.t("notifications.subjects.new_#{comment.commit_comment? ? 'commit_' : ''}comment_notification")) do |format|
|
||||||
format.html
|
format.html
|
||||||
end
|
end
|
||||||
|
|
|
@ -53,11 +53,13 @@ class Ability
|
||||||
can([:update, :sections, :manage_collaborators], Project) {|project| local_admin? project}
|
can([:update, :sections, :manage_collaborators], Project) {|project| local_admin? project}
|
||||||
can(:fork, Project) {|project| can? :read, project}
|
can(:fork, Project) {|project| can? :read, project}
|
||||||
can(:destroy, Project) {|project| owner? project}
|
can(:destroy, Project) {|project| owner? project}
|
||||||
|
can :remove_user, Project
|
||||||
|
|
||||||
# TODO: Turn on AAA when it will be updated
|
# TODO: Turn on AAA when it will be updated
|
||||||
#can :create, AutoBuildList
|
#can :create, AutoBuildList
|
||||||
#can [:index, :destroy], AutoBuildList, :project_id => user.own_project_ids
|
#can [:index, :destroy], AutoBuildList, :project_id => user.own_project_ids
|
||||||
|
|
||||||
|
can :search, BuildList
|
||||||
can [:read, :owned], BuildList, :user_id => user.id
|
can [:read, :owned], BuildList, :user_id => user.id
|
||||||
can :read, BuildList, :project => {:visibility => 'open'}
|
can :read, BuildList, :project => {:visibility => 'open'}
|
||||||
can [:read, :related], BuildList, :project => {:owner_type => 'User', :owner_id => user.id}
|
can [:read, :related], BuildList, :project => {:owner_type => 'User', :owner_id => user.id}
|
||||||
|
@ -102,10 +104,9 @@ class Ability
|
||||||
can([:update, :destroy], Issue) {|issue| issue.user_id == user.id or local_admin?(issue.project)}
|
can([:update, :destroy], Issue) {|issue| issue.user_id == user.id or local_admin?(issue.project)}
|
||||||
cannot :manage, Issue, :project => {:has_issues => false} # switch off issues
|
cannot :manage, Issue, :project => {:has_issues => false} # switch off issues
|
||||||
|
|
||||||
can(:create, Comment) {|comment| can? :read, comment.project || comment.commentable.project}
|
can(:create, Comment) {|comment| can? :read, comment.project}
|
||||||
can(:update, Comment) {|comment| comment.user_id == user.id or local_admin?(comment.project || comment.commentable.project)}
|
can(:update, Comment) {|comment| comment.user_id == user.id or local_admin?(comment.project || comment.commentable.project)}
|
||||||
#cannot :manage, Comment, :commentable => {:project => {:has_issues => false}} # switch off issues
|
cannot :manage, Comment, :commentable_type => 'Issue', :commentable => {:project => {:has_issues => false}} # switch off issues
|
||||||
cannot(:manage, Comment) {|comment| comment.commentable_type == 'Issue' && !comment.commentable.project.has_issues} # switch off issues
|
|
||||||
cannot :manage, RegisterRequest
|
cannot :manage, RegisterRequest
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
|
@ -18,7 +18,7 @@ class ActivityFeedObserver < ActiveRecord::Observer
|
||||||
ActivityFeed.create(
|
ActivityFeed.create(
|
||||||
:user => recipient,
|
:user => recipient,
|
||||||
:kind => 'new_issue_notification',
|
:kind => 'new_issue_notification',
|
||||||
:data => {:user_name => recipient.name, :issue_serial_id => record.serial_id, :issue_title => record.title, :project_id => record.project.id, :project_name => record.project.name}
|
:data => {:user_name => record.creator.name, :user_email => record.creator.email, :user_id => record.creator_id, :issue_serial_id => record.serial_id, :issue_title => record.title, :project_id => record.project.id, :project_name => record.project.name}
|
||||||
)
|
)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -27,7 +27,7 @@ class ActivityFeedObserver < ActiveRecord::Observer
|
||||||
ActivityFeed.create(
|
ActivityFeed.create(
|
||||||
:user => record.user,
|
:user => record.user,
|
||||||
:kind => 'issue_assign_notification',
|
:kind => 'issue_assign_notification',
|
||||||
:data => {:user_name => record.user.name, :issue_serial_id => record.serial_id, :project_id => record.project.id, :issue_title => record.title}
|
:data => {:user_name => record.creator.name, :user_email => record.creator.email, :user_id => record.creator_id, :issue_serial_id => record.serial_id, :project_id => record.project.id, :issue_title => record.title}
|
||||||
)
|
)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -40,7 +40,7 @@ class ActivityFeedObserver < ActiveRecord::Observer
|
||||||
ActivityFeed.create(
|
ActivityFeed.create(
|
||||||
:user => subscribe.user,
|
:user => subscribe.user,
|
||||||
:kind => 'new_comment_notification',
|
:kind => 'new_comment_notification',
|
||||||
:data => {:user_name => subscribe.user.name, :comment_body => record.body, :issue_title => record.commentable.title,
|
:data => {:user_name => record.user.name, :user_email => record.user.email, :user_id => record.user_id, :comment_body => record.body, :issue_title => record.commentable.title,
|
||||||
:issue_serial_id => record.commentable.serial_id, :project_id => record.commentable.project.id}
|
:issue_serial_id => record.commentable.serial_id, :project_id => record.commentable.project.id}
|
||||||
)
|
)
|
||||||
end
|
end
|
||||||
|
@ -53,7 +53,7 @@ class ActivityFeedObserver < ActiveRecord::Observer
|
||||||
ActivityFeed.create(
|
ActivityFeed.create(
|
||||||
:user => subscribe.user,
|
:user => subscribe.user,
|
||||||
:kind => 'new_comment_commit_notification',
|
:kind => 'new_comment_commit_notification',
|
||||||
:data => {:user_name => subscribe.user.name, :comment_body => record.body, :commit_message => record.commentable.message.encode_to_default,
|
:data => {:user_name => record.user.name, :user_email => record.user.email, :user_id => record.user_id, :comment_body => record.body, :commit_message => record.commentable.message.encode_to_default,
|
||||||
:commit_id => record.commentable.id, :project_id => record.project.id}
|
:commit_id => record.commentable.id, :project_id => record.project.id}
|
||||||
)
|
)
|
||||||
end
|
end
|
||||||
|
@ -62,24 +62,23 @@ class ActivityFeedObserver < ActiveRecord::Observer
|
||||||
when 'GitHook'
|
when 'GitHook'
|
||||||
change_type = record.change_type
|
change_type = record.change_type
|
||||||
branch_name = record.refname.match(/\/([\w\d]+)$/)[1]
|
branch_name = record.refname.match(/\/([\w\d]+)$/)[1]
|
||||||
#user_name = record.
|
|
||||||
|
|
||||||
#owner = record.owner
|
last_commits = record.project.git_repository.repo.log(branch_name, nil).first(3)
|
||||||
project = Project.find_by_name(record.repo)
|
first_commiter = User.find_by_email(last_commits[0].author.email) unless last_commits.blank?
|
||||||
|
last_commits = last_commits.collect do |commit| #:author => 'author'
|
||||||
last_commits = project.git_repository.repo.log(branch_name, nil).first(3).collect do |commit| #:author => 'author'
|
|
||||||
[commit.sha, commit.message]
|
[commit.sha, commit.message]
|
||||||
end
|
end
|
||||||
|
|
||||||
if change_type == 'delete'
|
if change_type == 'delete'
|
||||||
kind = 'git_delete_branch_notification'
|
kind = 'git_delete_branch_notification'
|
||||||
options = {:project_id => project.id, :project_name => project.name, :branch_name => branch_name, :change_type => change_type}
|
options = {:project_id => record.project.id, :project_name => record.project.name, :branch_name => branch_name, :change_type => change_type}
|
||||||
else
|
else
|
||||||
kind = 'git_new_push_notification'
|
kind = 'git_new_push_notification'
|
||||||
options = {:project_id => project.id, :project_name => project.name, :last_commits => last_commits, :branch_name => branch_name, :change_type => change_type}
|
options = {:project_id => record.project.id, :project_name => record.project.name, :last_commits => last_commits, :branch_name => branch_name, :change_type => change_type}
|
||||||
|
options.merge!({:user_id => first_commiter.id, :user_name => first_commiter.name, :user_email => first_commiter.email}) if first_commiter
|
||||||
end
|
end
|
||||||
|
|
||||||
project.owner_and_admin_ids.each do |recipient|
|
record.project.owner_and_admin_ids.each do |recipient|
|
||||||
ActivityFeed.create(
|
ActivityFeed.create(
|
||||||
:user => User.find(recipient),
|
:user => User.find(recipient),
|
||||||
:kind => kind,
|
:kind => kind,
|
||||||
|
@ -98,7 +97,7 @@ class ActivityFeedObserver < ActiveRecord::Observer
|
||||||
ActivityFeed.create(
|
ActivityFeed.create(
|
||||||
:user => User.find(recipient),#record.user,
|
:user => User.find(recipient),#record.user,
|
||||||
:kind => 'wiki_new_commit_notification',
|
:kind => 'wiki_new_commit_notification',
|
||||||
:data => {:user_id => actor.id, :user_name => actor.name, :project_id => project.id, :project_name => project_name, :commit_sha => commit_sha}
|
:data => {:user_id => actor.id, :user_name => actor.name, :user_email => actor.email, :project_id => project.id, :project_name => project_name, :commit_sha => commit_sha}
|
||||||
)
|
)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
@ -112,7 +111,7 @@ class ActivityFeedObserver < ActiveRecord::Observer
|
||||||
ActivityFeed.create(
|
ActivityFeed.create(
|
||||||
:user => record.user,
|
:user => record.user,
|
||||||
:kind => 'issue_assign_notification',
|
:kind => 'issue_assign_notification',
|
||||||
:data => {:user_name => record.user.name, :issue_serial_id => record.serial_id, :project_id => record.project.id, :issue_title => record.title}
|
:data => {:user_name => record.user.name, :user_email => record.user.email, :issue_serial_id => record.serial_id, :project_id => record.project.id, :issue_title => record.title}
|
||||||
)
|
)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -62,6 +62,7 @@ class BuildList < ActiveRecord::Base
|
||||||
where(["status in (?) OR (status in (?) AND notified_at >= ?)", [WAITING_FOR_RESPONSE, BUILD_PENDING, BuildServer::BUILD_STARTED], outdatable_statuses, Time.now - 2.days])
|
where(["status in (?) OR (status in (?) AND notified_at >= ?)", [WAITING_FOR_RESPONSE, BUILD_PENDING, BuildServer::BUILD_STARTED], outdatable_statuses, Time.now - 2.days])
|
||||||
}
|
}
|
||||||
scope :for_status, lambda {|status| where(:status => status) }
|
scope :for_status, lambda {|status| where(:status => status) }
|
||||||
|
scope :for_user, lambda { |user| where(:user_id => user.id) }
|
||||||
scope :scoped_to_arch, lambda {|arch| where(:arch_id => arch) }
|
scope :scoped_to_arch, lambda {|arch| where(:arch_id => arch) }
|
||||||
scope :scoped_to_project_version, lambda {|project_version| where(:project_version => project_version) }
|
scope :scoped_to_project_version, lambda {|project_version| where(:project_version => project_version) }
|
||||||
scope :scoped_to_is_circle, lambda {|is_circle| where(:is_circle => is_circle) }
|
scope :scoped_to_is_circle, lambda {|is_circle| where(:is_circle => is_circle) }
|
||||||
|
|
|
@ -2,17 +2,18 @@
|
||||||
class Comment < ActiveRecord::Base
|
class Comment < ActiveRecord::Base
|
||||||
belongs_to :commentable, :polymorphic => true
|
belongs_to :commentable, :polymorphic => true
|
||||||
belongs_to :user
|
belongs_to :user
|
||||||
attr_accessor :project
|
belongs_to :project
|
||||||
|
|
||||||
validates :body, :user_id, :commentable_id, :commentable_type, :presence => true
|
validates :body, :user_id, :commentable_id, :commentable_type, :presence => true
|
||||||
|
|
||||||
default_scope order('created_at')
|
default_scope order('created_at')
|
||||||
|
|
||||||
# FIXME
|
|
||||||
after_create :subscribe_on_reply, :unless => lambda {|c| c.commit_comment?}
|
after_create :subscribe_on_reply, :unless => lambda {|c| c.commit_comment?}
|
||||||
after_create :invoke_helper, :if => lambda {|c| c.commit_comment?}
|
after_create :helper, :if => lambda {|c| c.commit_comment?}
|
||||||
after_create :subscribe_users
|
after_create :subscribe_users
|
||||||
|
|
||||||
|
attr_accessible :body, :commentable_id, :commentable_type
|
||||||
|
|
||||||
def helper
|
def helper
|
||||||
class_eval { def commentable; project.git_repository.commit(commentable_id.to_s(16)); end } if commit_comment?
|
class_eval { def commentable; project.git_repository.commit(commentable_id.to_s(16)); end } if commit_comment?
|
||||||
end
|
end
|
||||||
|
@ -35,10 +36,6 @@ class Comment < ActiveRecord::Base
|
||||||
self.commentable.subscribes.create(:user_id => self.user_id) if !self.commentable.subscribes.exists?(:user_id => self.user_id)
|
self.commentable.subscribes.create(:user_id => self.user_id) if !self.commentable.subscribes.exists?(:user_id => self.user_id)
|
||||||
end
|
end
|
||||||
|
|
||||||
def invoke_helper
|
|
||||||
self.helper
|
|
||||||
end
|
|
||||||
|
|
||||||
def subscribe_users
|
def subscribe_users
|
||||||
if self.commentable.class == Issue
|
if self.commentable.class == Issue
|
||||||
self.commentable.subscribes.create(:user => self.user) if !self.commentable.subscribes.exists?(:user_id => self.user.id)
|
self.commentable.subscribes.create(:user => self.user) if !self.commentable.subscribes.exists?(:user_id => self.user.id)
|
||||||
|
|
|
@ -18,7 +18,7 @@ class Git::Repository
|
||||||
end
|
end
|
||||||
|
|
||||||
def repo
|
def repo
|
||||||
@repo ||= Grit::Repo.new(path)
|
@repo ||= Grit::Repo.new(path) rescue Grit::Repo.new(GAP_REPO_PATH)
|
||||||
end
|
end
|
||||||
|
|
||||||
# Adds a callback to be fired after update file.
|
# Adds a callback to be fired after update file.
|
||||||
|
|
|
@ -5,8 +5,9 @@ class GitHook
|
||||||
|
|
||||||
def initialize(owner_uname, repo, newrev, oldrev, ref, newrev_type, oldrev_type)
|
def initialize(owner_uname, repo, newrev, oldrev, ref, newrev_type, oldrev_type)
|
||||||
@repo, @newrev, @oldrev, @refname, @newrev_type, @oldrev_type = repo, newrev, oldrev, ref, newrev_type, oldrev_type
|
@repo, @newrev, @oldrev, @refname, @newrev_type, @oldrev_type = repo, newrev, oldrev, ref, newrev_type, oldrev_type
|
||||||
@owner = User.find_by_uname owner_uname
|
if @owner = User.where(:uname => owner_uname).first || Group.where(:uname => owner_uname).first
|
||||||
@project = @owner.projects.where(:name => repo).first
|
@project = @owner.projects.where(:name => repo).first
|
||||||
|
end
|
||||||
@change_type = git_change_type
|
@change_type = git_change_type
|
||||||
git_revision_types
|
git_revision_types
|
||||||
commit_type
|
commit_type
|
||||||
|
|
|
@ -17,6 +17,7 @@ class Group < ActiveRecord::Base
|
||||||
validates :uname, :presence => true, :uniqueness => {:case_sensitive => false}, :format => { :with => /^[a-z0-9_]+$/ }
|
validates :uname, :presence => true, :uniqueness => {:case_sensitive => false}, :format => { :with => /^[a-z0-9_]+$/ }
|
||||||
validate { errors.add(:uname, :taken) if User.where('uname LIKE ?', uname).present? }
|
validate { errors.add(:uname, :taken) if User.where('uname LIKE ?', uname).present? }
|
||||||
|
|
||||||
|
scope :search_order, order("CHAR_LENGTH(uname) ASC")
|
||||||
scope :search, lambda {|q| where("uname ILIKE ?", "%#{q}%")}
|
scope :search, lambda {|q| where("uname ILIKE ?", "%#{q}%")}
|
||||||
scope :by_owner, lambda {|owner| where(:owner_id => owner.id)}
|
scope :by_owner, lambda {|owner| where(:owner_id => owner.id)}
|
||||||
scope :by_admin, lambda {|admin| joins(:relations).where(:'relations.role' => 'admin', :'relations.target_id' => admin.id, :'relations.target_type' => 'User')}
|
scope :by_admin, lambda {|admin| joins(:relations).where(:'relations.role' => 'admin', :'relations.target_id' => admin.id, :'relations.target_type' => 'User')}
|
||||||
|
|
|
@ -6,4 +6,5 @@ class Label < ActiveRecord::Base
|
||||||
validates :name, :uniqueness => { :scope => :project_id}
|
validates :name, :uniqueness => { :scope => :project_id}
|
||||||
validates :name, :color, :presence => true
|
validates :name, :color, :presence => true
|
||||||
validates :color, :format => { :with => /\A([A-Fa-f0-9]{6}|[A-Fa-f0-9]{3})\z/, :message => I18n.t('layout.issues.invalid_labels')}
|
validates :color, :format => { :with => /\A([A-Fa-f0-9]{6}|[A-Fa-f0-9]{3})\z/, :message => I18n.t('layout.issues.invalid_labels')}
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|
|
@ -26,6 +26,7 @@ class Platform < ActiveRecord::Base
|
||||||
after_destroy lambda { umount_directory_for_rsync unless hidden? }
|
after_destroy lambda { umount_directory_for_rsync unless hidden? }
|
||||||
after_update :update_owner_relation
|
after_update :update_owner_relation
|
||||||
|
|
||||||
|
scope :search_order, order("CHAR_LENGTH(name) ASC")
|
||||||
scope :search, lambda {|q| where("name ILIKE ?", "%#{q}%").open}
|
scope :search, lambda {|q| where("name ILIKE ?", "%#{q}%").open}
|
||||||
scope :by_visibilities, lambda {|v| where(:visibility => v)}
|
scope :by_visibilities, lambda {|v| where(:visibility => v)}
|
||||||
scope :open, where(:visibility => 'open')
|
scope :open, where(:visibility => 'open')
|
||||||
|
|
|
@ -26,10 +26,11 @@ class Project < ActiveRecord::Base
|
||||||
validates_attachment_size :srpm, :less_than => 500.megabytes
|
validates_attachment_size :srpm, :less_than => 500.megabytes
|
||||||
validates_attachment_content_type :srpm, :content_type => ['application/octet-stream', "application/x-rpm", "application/x-redhat-package-manager"], :message => I18n.t('layout.invalid_content_type')
|
validates_attachment_content_type :srpm, :content_type => ['application/octet-stream', "application/x-rpm", "application/x-redhat-package-manager"], :message => I18n.t('layout.invalid_content_type')
|
||||||
|
|
||||||
#attr_accessible :category_id, :name, :description, :visibility
|
attr_accessible :name, :description, :visibility, :srpm, :is_rpm, :default_branch, :has_issues, :has_wiki
|
||||||
attr_readonly :name
|
attr_readonly :name
|
||||||
|
|
||||||
scope :recent, order("name ASC")
|
scope :recent, order("name ASC")
|
||||||
|
scope :search_order, order("CHAR_LENGTH(name) ASC")
|
||||||
scope :search, lambda {|q| by_name("%#{q}%").open}
|
scope :search, lambda {|q| by_name("%#{q}%").open}
|
||||||
scope :by_name, lambda {|name| where('projects.name ILIKE ?', name)}
|
scope :by_name, lambda {|name| where('projects.name ILIKE ?', name)}
|
||||||
scope :by_visibilities, lambda {|v| where(:visibility => v)}
|
scope :by_visibilities, lambda {|v| where(:visibility => v)}
|
||||||
|
@ -64,12 +65,13 @@ class Project < ActiveRecord::Base
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
def build_for(platform, user)
|
def build_for(platform, user, arch = 'x86_64') # Return i586 after mass rebuild
|
||||||
|
arch = Arch.find_by_name(arch) if arch.acts_like?(:string)
|
||||||
build_lists.create do |bl|
|
build_lists.create do |bl|
|
||||||
bl.pl = platform
|
bl.pl = platform
|
||||||
bl.bpl = platform
|
bl.bpl = platform
|
||||||
bl.update_type = 'newpackage'
|
bl.update_type = 'newpackage'
|
||||||
bl.arch = Arch.find_by_name('x86_64') # Return i586 after mass rebuild
|
bl.arch = arch
|
||||||
bl.project_version = "latest_#{platform.name}" # "latest_import_mandriva2011"
|
bl.project_version = "latest_#{platform.name}" # "latest_import_mandriva2011"
|
||||||
bl.build_requires = false # already set as db default
|
bl.build_requires = false # already set as db default
|
||||||
bl.user = user
|
bl.user = user
|
||||||
|
@ -151,7 +153,7 @@ class Project < ActiveRecord::Base
|
||||||
end
|
end
|
||||||
|
|
||||||
def fork(new_owner)
|
def fork(new_owner)
|
||||||
clone.tap do |c|
|
dup.tap do |c|
|
||||||
c.parent_id = id
|
c.parent_id = id
|
||||||
c.owner = new_owner
|
c.owner = new_owner
|
||||||
c.updated_at = nil; c.created_at = nil # :id = nil
|
c.updated_at = nil; c.created_at = nil # :id = nil
|
||||||
|
@ -264,10 +266,11 @@ class Project < ActiveRecord::Base
|
||||||
hook = File.join(::Rails.root.to_s, 'tmp', "post-receive-hook")
|
hook = File.join(::Rails.root.to_s, 'tmp', "post-receive-hook")
|
||||||
FileUtils.cp(File.join(::Rails.root.to_s, 'bin', "post-receive-hook.partial"), hook)
|
FileUtils.cp(File.join(::Rails.root.to_s, 'bin', "post-receive-hook.partial"), hook)
|
||||||
File.open(hook, 'a') do |f|
|
File.open(hook, 'a') do |f|
|
||||||
s = "\n /bin/bash -l -c \"cd #{is_production ? '/srv/rosa_build/current' : Rails.root.to_s} && #{is_production ? 'RAILS_ENV=production' : ''} bundle exec rails runner 'Project.delay.process_hook(\"$owner\", \"$reponame\", \"$newrev\", \"$oldrev\", \"$ref\", \"$newrev_type\", \"$oldrev_type\")'\""
|
s = "\n /bin/bash -l -c \"cd #{is_production ? '/srv/rosa_build/current' : Rails.root.to_s} && #{is_production ? 'RAILS_ENV=production' : ''} bundle exec rails runner 'Project.delay.process_hook(\\\"$owner\\\", \\\"$reponame\\\", \\\"$newrev\\\", \\\"$oldrev\\\", \\\"$ref\\\", \\\"$newrev_type\\\", \\\"$oldrev_type\\\")'\""
|
||||||
s << " > /dev/null 2>&1" if is_production
|
s << " > /dev/null 2>&1" if is_production
|
||||||
s << "\ndone\n"
|
s << "\ndone\n"
|
||||||
f.write(s)
|
f.write(s)
|
||||||
|
f.chmod(0755)
|
||||||
end
|
end
|
||||||
|
|
||||||
hook_file = File.join(path, 'hooks', 'post-receive')
|
hook_file = File.join(path, 'hooks', 'post-receive')
|
||||||
|
|
|
@ -49,6 +49,7 @@ class User < ActiveRecord::Base
|
||||||
attr_readonly :uname
|
attr_readonly :uname
|
||||||
attr_accessor :login
|
attr_accessor :login
|
||||||
|
|
||||||
|
scope :search_order, order("CHAR_LENGTH(uname) ASC")
|
||||||
scope :search, lambda {|q| where("uname ILIKE ?", "%#{q}%")}
|
scope :search, lambda {|q| where("uname ILIKE ?", "%#{q}%")}
|
||||||
|
|
||||||
after_create lambda { self.create_notifier }
|
after_create lambda { self.create_notifier }
|
||||||
|
|
|
@ -0,0 +1,48 @@
|
||||||
|
.bordered
|
||||||
|
= link_to t("layout.activity_feed.new_project"), new_project_path, :class => 'button'
|
||||||
|
%h3= t("layout.activity_feed.my_last_projects")
|
||||||
|
%table
|
||||||
|
%tbody
|
||||||
|
- current_user.projects.order('updated_at DESC').limit(5).each do |project|
|
||||||
|
%tr
|
||||||
|
%td
|
||||||
|
- if project.public?
|
||||||
|
= image_tag("unlock.png")
|
||||||
|
- else
|
||||||
|
= image_tag("lock.png")
|
||||||
|
%td
|
||||||
|
= link_to "#{project.owner.uname}/#{project.name}", project_path(project)
|
||||||
|
%tr
|
||||||
|
%td
|
||||||
|
\
|
||||||
|
%td
|
||||||
|
= link_to t("layout.activity_feed.all_my_projects"), projects_path
|
||||||
|
.block
|
||||||
|
- midnight = Time.new.midnight
|
||||||
|
%h3= t("layout.activity_feed.my_builds_by_day")
|
||||||
|
%table{:cellpadding => "0", :cellspacing => "0"}
|
||||||
|
%tbody
|
||||||
|
%tr
|
||||||
|
%td.first
|
||||||
|
= link_to t("layout.build_lists.statuses.#{:build_published}"), build_lists_path(:filter => {:status => BuildList::BUILD_PUBLISHED, :notified_at => midnight})
|
||||||
|
%td= BuildList.for_status(BuildList::BUILD_PUBLISHED).for_user(current_user).for_notified_date_period(midnight, nil).count
|
||||||
|
%tr
|
||||||
|
%td.first
|
||||||
|
= link_to t("layout.build_lists.statuses.#{:success}"), build_lists_path(:filter => {:status => BuildServer::SUCCESS, :notified_at => midnight})
|
||||||
|
%td= BuildList.for_status(BuildServer::SUCCESS).for_user(current_user).for_notified_date_period(midnight, nil).count
|
||||||
|
%tr
|
||||||
|
%td.first
|
||||||
|
= link_to t("layout.build_lists.statuses.#{:build_started}"), build_lists_path(:filter => {:status => BuildServer::BUILD_STARTED, :notified_at => midnight})
|
||||||
|
%td= BuildList.for_status(BuildServer::BUILD_STARTED).for_user(current_user).for_notified_date_period(midnight, nil).count
|
||||||
|
%tr
|
||||||
|
%td.first
|
||||||
|
= link_to t("layout.build_lists.statuses.#{:build_pending}"), build_lists_path(:filter => {:status => BuildList::BUILD_PENDING, :notified_at => midnight})
|
||||||
|
%td= BuildList.for_status(BuildList::BUILD_PENDING).for_user(current_user).for_notified_date_period(midnight, nil).count
|
||||||
|
%tr
|
||||||
|
%td.first
|
||||||
|
= link_to t("layout.build_lists.statuses.#{:build_error}"), build_lists_path(:filter => {:status => BuildServer::BUILD_ERROR, :notified_at => midnight})
|
||||||
|
%td= BuildList.for_status(BuildServer::BUILD_ERROR).for_user(current_user).for_notified_date_period(midnight, nil).count
|
||||||
|
%tr
|
||||||
|
%td.first
|
||||||
|
= link_to t("layout.activity_feed.all_my_builds"), build_lists_path
|
||||||
|
%td
|
|
@ -1,21 +1,6 @@
|
||||||
%a{ :name => "comments" }
|
%h3.fix= t("layout.activity_feed.header")
|
||||||
.block#block-list
|
|
||||||
.content
|
|
||||||
%h2.title
|
|
||||||
= t("layout.activity_feed.header")
|
|
||||||
.inner
|
|
||||||
%ul.list
|
|
||||||
- @activity_feeds.each do |activity_feed|
|
- @activity_feeds.each do |activity_feed|
|
||||||
%li
|
.activity
|
||||||
.left
|
|
||||||
= link_to activity_feed.user.uname, user_path(activity_feed.user.uname)
|
|
||||||
%br
|
|
||||||
%br
|
|
||||||
= activity_feed.created_at
|
|
||||||
%br
|
|
||||||
%br
|
|
||||||
.item
|
|
||||||
= render_activity_feed(activity_feed)
|
= render_activity_feed(activity_feed)
|
||||||
%br
|
|
||||||
%br
|
- content_for :sidebar, render('sidebar')
|
||||||
%br
|
|
||||||
|
|
|
@ -1,3 +1,7 @@
|
||||||
%p== Branch #{ branch_name } has been deleted
|
.top
|
||||||
|
%span.date= activity_feed.created_at
|
||||||
%p== Into project #{ link_to(project_name, project_path(project_id)) }
|
%br
|
||||||
|
%span.subject Branch #{ branch_name } has been deleted
|
||||||
|
.both
|
||||||
|
.fulltext
|
||||||
|
Into project #{ link_to(project_name, project_path(project_id)) }
|
||||||
|
|
|
@ -1,6 +1,26 @@
|
||||||
%p== Branch #{ branch_name } has been #{ change_type }d
|
- if defined? user_email
|
||||||
%p== Into project #{ link_to(project_name, project_path(project_id)) }
|
.top
|
||||||
|
.image
|
||||||
|
= image_tag(avatar_url_by_email(user_email, :small), :alt => 'avatar')
|
||||||
|
.text
|
||||||
|
%span.name
|
||||||
|
= link_to user_name, user_path(user_id)
|
||||||
|
.both
|
||||||
|
%span.date= activity_feed.created_at
|
||||||
|
.both
|
||||||
|
.both
|
||||||
|
%span.subject Branch #{ branch_name } has been #{ change_type }d
|
||||||
|
.both
|
||||||
|
.fulltext
|
||||||
|
- unless defined? user_email
|
||||||
|
%span.date= activity_feed.created_at
|
||||||
|
%br
|
||||||
|
Branch #{ branch_name } has been #{ change_type }d
|
||||||
|
%br
|
||||||
|
%br
|
||||||
|
Into project #{ link_to(project_name, project_path(project_id)) }
|
||||||
|
%br
|
||||||
|
%br
|
||||||
- last_commits.each do |commit|
|
- last_commits.each do |commit|
|
||||||
= link_to commit[0], commit_path(project_id, commit[0])
|
= link_to commit[0], commit_path(project_id, commit[0])
|
||||||
= commit[1]
|
= commit[1]
|
||||||
|
|
|
@ -1,3 +1,14 @@
|
||||||
%p== #{ t("notifications.bodies.issue_assign_notification.title", :user_name => user_name) }
|
.top
|
||||||
|
.image
|
||||||
%p= raw t("notifications.bodies.issue_assign_notification.content", :issue_link => link_to(issue_title, project_issue_path(project_id, issue_serial_id)))
|
= image_tag(avatar_url_by_email(activity_feed.user.email, :small), :alt => 'avatar')
|
||||||
|
.text
|
||||||
|
%span.name
|
||||||
|
= link_to activity_feed.user.uname, user_path(activity_feed.user.uname)
|
||||||
|
.both
|
||||||
|
%span.date= activity_feed.created_at
|
||||||
|
.both
|
||||||
|
.both
|
||||||
|
%span.subject= raw t("notifications.bodies.issue_assign_notification.title", :issue_link => link_to(issue_title, project_issue_path(project_id, issue_serial_id)))
|
||||||
|
.both
|
||||||
|
.fulltext
|
||||||
|
=# raw t("notifications.bodies.issue_assign_notification.content", :issue_link => link_to(issue_title, project_issue_path(project_id, issue_serial_id)))
|
||||||
|
|
|
@ -0,0 +1,17 @@
|
||||||
|
.top
|
||||||
|
.image
|
||||||
|
= image_tag(avatar_url_by_email(user_email, :small), :alt => 'avatar')
|
||||||
|
.text
|
||||||
|
%span.name
|
||||||
|
= link_to user_name, user_path(user_id)
|
||||||
|
.both
|
||||||
|
%span.date= activity_feed.created_at
|
||||||
|
.both
|
||||||
|
.both
|
||||||
|
%span.subject #{ t("notifications.bodies.new_comment_notification.title", :user_name => user_name) }
|
||||||
|
.both
|
||||||
|
.fulltext
|
||||||
|
= raw t("notifications.bodies.new_comment_notification.commit_content", {:commit_link => link_to(commit_message, commit_path(project_id, commit_id))})
|
||||||
|
%br
|
||||||
|
%br
|
||||||
|
"#{ comment_body }"
|
|
@ -1,5 +1,17 @@
|
||||||
%p== #{ t("notifications.bodies.new_comment_notification.title", :user_name => user_name) }
|
.top
|
||||||
|
.image
|
||||||
%p= raw t("notifications.bodies.new_comment_notification.content", {:issue_link => link_to(issue_title, project_issue_path(project_id, issue_serial_id))})
|
= image_tag(avatar_url_by_email(user_email, :small), :alt => 'avatar')
|
||||||
|
.text
|
||||||
%p "#{ comment_body }"
|
%span.name
|
||||||
|
= link_to user_name, user_path(user_id)
|
||||||
|
.both
|
||||||
|
%span.date= activity_feed.created_at
|
||||||
|
.both
|
||||||
|
.both
|
||||||
|
%span.subject #{ t("notifications.bodies.new_comment_notification.title", :user_name => user_name) }
|
||||||
|
.both
|
||||||
|
.fulltext
|
||||||
|
= raw t("notifications.bodies.new_comment_notification.content", {:issue_link => link_to(issue_title, project_issue_path(project_id, issue_serial_id))})
|
||||||
|
%br
|
||||||
|
%br
|
||||||
|
"#{ comment_body }"
|
||||||
|
|
|
@ -1,5 +0,0 @@
|
||||||
%p== #{ t("notifications.bodies.new_commit_comment_notification.title", :user_name => user_name) }
|
|
||||||
|
|
||||||
%p= raw t("notifications.bodies.new_comment_notification.commit_content", {:commit_link => link_to(commit_message, commit_path(project_id, commit_id))})
|
|
||||||
|
|
||||||
%p "#{ comment_body }"
|
|
|
@ -1,3 +1,14 @@
|
||||||
%p== #{ t("notifications.bodies.new_issue_notification.title", :user_name => user_name) }
|
.top
|
||||||
|
.image
|
||||||
%p= raw t("notifications.bodies.new_issue_notification.content", :issue_link => link_to(issue_title, project_issue_path(project_id, issue_serial_id)), :project_link => link_to(project_name, project_path(project_id)))
|
= image_tag(avatar_url_by_email(user_email, :small), :alt => 'avatar')
|
||||||
|
.text
|
||||||
|
%span.name
|
||||||
|
= link_to user_name, user_path(user_id)
|
||||||
|
.both
|
||||||
|
%span.date= activity_feed.created_at
|
||||||
|
.both
|
||||||
|
.both
|
||||||
|
%span.subject #{ t("notifications.bodies.new_issue_notification.title", :user_name => user_name) }
|
||||||
|
.both
|
||||||
|
.fulltext
|
||||||
|
= raw t("notifications.bodies.new_issue_notification.content", :issue_link => link_to(issue_title, project_issue_path(project_id, issue_serial_id)), :project_link => link_to(project_name, project_path(project_id)))
|
||||||
|
|
|
@ -1,5 +1,16 @@
|
||||||
%p== #{ t("notifications.bodies.new_user_notification.title", :user_name => user_name) }
|
.top
|
||||||
|
.image
|
||||||
%p #{ t("notifications.bodies.new_user_notification.content") }
|
= image_tag(avatar_url_by_email(activity_feed.user.email, :small), :alt => 'avatar')
|
||||||
|
.text
|
||||||
%p #{ t("notifications.bodies.new_user_notification.email", :user_email => user_email) }
|
%span.name
|
||||||
|
= link_to activity_feed.user.uname, user_path(activity_feed.user.uname)
|
||||||
|
.both
|
||||||
|
%span.date= activity_feed.created_at
|
||||||
|
.both
|
||||||
|
.both
|
||||||
|
%span.subject #{ t("notifications.bodies.new_user_notification.title", :user_name => user_name) }
|
||||||
|
.both
|
||||||
|
.fulltext
|
||||||
|
#{ t("notifications.bodies.new_user_notification.content") }
|
||||||
|
%br
|
||||||
|
#{ t("notifications.bodies.new_user_notification.email", :user_email => user_email) }
|
||||||
|
|
|
@ -1,2 +1,14 @@
|
||||||
%p== User #{ link_to user_name, user_path(user_id) } has been update wiki #{ link_to "history", compare_versions_project_wiki_index_path(project_id, commit_sha) }
|
.top
|
||||||
%p== Into project #{ link_to(project_name, project_path(project_id)) }
|
.image
|
||||||
|
= image_tag(avatar_url_by_email(user_email, :small), :alt => 'avatar')
|
||||||
|
.text
|
||||||
|
%span.name
|
||||||
|
= link_to user_name, user_path(user_id)
|
||||||
|
.both
|
||||||
|
%span.date= activity_feed.created_at
|
||||||
|
.both
|
||||||
|
.both
|
||||||
|
%span.subject #{ t("notifications.bodies.wiki_new_commit_notification.title", :user_name => user_name) }
|
||||||
|
.both
|
||||||
|
.fulltext
|
||||||
|
= raw t("notifications.bodies.wiki_new_commit_notification.content", {:history_link => link_to("wiki", history_project_wiki_index_path(project_id)), :project_link => link_to(project_name, project_path(project_id)) })
|
||||||
|
|
|
@ -15,7 +15,7 @@
|
||||||
.righter= @build_server_status['count_build_task']
|
.righter= @build_server_status['count_build_task']
|
||||||
.both
|
.both
|
||||||
%br
|
%br
|
||||||
= link_to t('layout.build_lists.new_header'), new_project_build_list_path(@project), :class => 'button' if @project and can?(:create, @project => BuildList)
|
= link_to t('layout.build_lists.new_header'), new_project_build_list_path(@project), :class => 'button' if @project and can?(:create, @project.build_lists.build)
|
||||||
|
|
||||||
= form_for :filter, :url => @action_url, :html => { :method => :post, :class => :form } do |f|
|
= form_for :filter, :url => @action_url, :html => { :method => :post, :class => :form } do |f|
|
||||||
.bordered.nopadding
|
.bordered.nopadding
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
%h3= t("layout.projects.files_in_project")
|
%h3= t("layout.projects.files_in_project")
|
||||||
.files
|
.files
|
||||||
.l
|
.l= render :partial => 'git/shared/whereami'
|
||||||
= render :partial => 'git/shared/whereami'
|
= render :partial => 'git/shared/fork'
|
||||||
.both
|
.both
|
||||||
|
|
||||||
= form_tag blob_file_path, :name => 'blob-editor', :method => :put do
|
= form_tag blob_file_path, :name => 'blob-editor', :method => :put do
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
%h3= t("layout.projects.files_in_project")
|
%h3= t("layout.projects.files_in_project")
|
||||||
.files
|
.files
|
||||||
.l
|
.l= render :partial => 'git/shared/whereami'
|
||||||
= render :partial => 'git/shared/whereami'
|
= render :partial => 'git/shared/fork'
|
||||||
.both
|
.both
|
||||||
|
|
||||||
- render_way = choose_render_way(@blob)
|
- render_way = choose_render_way(@blob)
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
%h3= t("layout.projects.files_in_project")
|
%h3= t("layout.projects.files_in_project")
|
||||||
.files
|
.files
|
||||||
.l
|
.l= render :partial => 'git/shared/whereami'
|
||||||
= render :partial => 'git/shared/whereami'
|
= render :partial => 'git/shared/fork'
|
||||||
.both
|
.both
|
||||||
|
|
||||||
%table#myTable.tablesorter.project{:cellpadding => "0", :cellspacing => "0"}
|
%table#myTable.tablesorter.project{:cellpadding => "0", :cellspacing => "0"}
|
||||||
|
|
|
@ -0,0 +1,2 @@
|
||||||
|
- if can? :fork, @project
|
||||||
|
.r#fork-and-edit= link_to t('layout.projects.fork_and_edit'), fork_project_path(@project), :method => :post, :confirm => t("layout.confirm"), :class => 'button'
|
|
@ -3,7 +3,7 @@
|
||||||
#labels-stock
|
#labels-stock
|
||||||
=form_tag project_issues_path(@project), :id => 'filter_labels', :method => :get do
|
=form_tag project_issues_path(@project), :id => 'filter_labels', :method => :get do
|
||||||
- @project.labels.each_with_index do |label, index|
|
- @project.labels.each_with_index do |label, index|
|
||||||
.div-tracker-labels{:id => "label-#{label.name}", :style => @labels.include?(label.name) ? "background-color:##{label.color};color:'#FFF'" : ''}
|
.div-tracker-labels{:id => "label-#{label.name}", :style => @labels.include?(label.name) ? "background-color:##{label.color};color:#FFF" : ''}
|
||||||
.div-label-left
|
.div-label-left
|
||||||
.label
|
.label
|
||||||
.flag{:id => "flag-#{label.name}", :style => "background-color: ##{label.color};"}
|
.flag{:id => "flag-#{label.name}", :style => "background-color: ##{label.color};"}
|
||||||
|
|
|
@ -16,7 +16,7 @@
|
||||||
=form_for :issue, :url => [@project, @issue], :method => :put, :html => { :class => 'edit_executor issue'} do |f|
|
=form_for :issue, :url => [@project, @issue], :method => :put, :html => { :class => 'edit_executor issue'} do |f|
|
||||||
.current_executor
|
.current_executor
|
||||||
- if @issue.user
|
- if @issue.user
|
||||||
#user-0.people
|
#user-0.people.nopointer
|
||||||
.avatar=image_tag avatar_url(@issue.user), :alt => 'avatar'
|
.avatar=image_tag avatar_url(@issue.user), :alt => 'avatar'
|
||||||
.name="#{@issue.user.uname} (#{@issue.user.name})"
|
.name="#{@issue.user.uname} (#{@issue.user.name})"
|
||||||
=hidden_field_tag "user-0", @issue.user.id, :name => 'issue[user_id]'
|
=hidden_field_tag "user-0", @issue.user.id, :name => 'issue[user_id]'
|
||||||
|
@ -36,26 +36,23 @@
|
||||||
|
|
||||||
.block
|
.block
|
||||||
%h3=t('layout.issues.labels')
|
%h3=t('layout.issues.labels')
|
||||||
- if @issue.persisted?
|
|
||||||
- if can_manage
|
- if can_manage
|
||||||
=form_for :issue, :url => [@project, @issue], :method => :put, :html => { :class => 'edit_labels issue'} do |f|
|
|
||||||
.current_labels
|
.current_labels
|
||||||
- (@issue.labels || []).each do |label|
|
- (@project.labels || []).each do |label|
|
||||||
.label.selected{:id => "flag#{label.id}"}
|
- is_issue_label = @issue.labels.include? label
|
||||||
.flag{:style => "display:none; background: ##{label.color}"}
|
.label{:id => "flag#{label.id}", :class => @issue.persisted? ? 'nopointer' : 'add_label'}
|
||||||
.labeltext.selected{:style => "background: ##{label.color}"}=label.name
|
.flag{:style => "background: ##{label.color}; #{is_issue_label ? 'display:none;' : ''}"}
|
||||||
=hidden_field_tag "label-#{label.id}", label.id, :name => "issue[labelings_attributes][#{label.id}][label_id]"
|
.labeltext{:class => is_issue_label ? 'selected' : '', :style => is_issue_label ? "background: ##{label.color}" : ''}=label.name
|
||||||
.both
|
.both=hidden_field_tag "flag#{label.id}", label.id, :name => "issue[labelings_attributes][#{label.id}][label_id]"
|
||||||
|
=form_for :issue, :url => [@project, @issue], :method => :put, :html => { :class => 'edit_labels issue'} do |f|
|
||||||
|
.manage_labels
|
||||||
|
- @issue.labels.each do |label|
|
||||||
|
=hidden_field_tag "flag#{label.id}", label.id, :name => "issue[labelings_attributes][#{label.id}][label_id]"
|
||||||
- else
|
- else
|
||||||
- (@issue.labels || []).each do |label|
|
- (@issue.labels || []).each do |label|
|
||||||
.label.nopointer
|
.label.nopointer
|
||||||
.labeltext.selected{:style => "background: ##{label.color};"}
|
.labeltext.selected{:style => "background: ##{label.color};"}=label.name
|
||||||
=label.name
|
|
||||||
.both
|
.both
|
||||||
=link_to(t('layout.issues.label_manage'), '#', :class => "button tmargin10 manage_labels") if can_manage
|
- if can_manage && @issue.persisted?
|
||||||
- if can_manage
|
=link_to(t('layout.issues.label_manage'), '#', :class => "button tmargin10 manage_labels")
|
||||||
=form_tag search_labels_project_issues_path(@project), :id => 'search_labels', :method => :get, :style => @issue.persisted? ? 'display:none' : '' do
|
=link_to(t('layout.issues.done'), '#', :class => "button tmargin10 update_labels", :style => 'display:none')
|
||||||
=tracker_search_field(:search_labels, t('layout.issues.search_labels'))
|
|
||||||
#manage_issue_labels_list
|
|
||||||
=render 'issues/search_labels'
|
|
||||||
=link_to(t('layout.issues.done'), '#', :class => "button tmargin10 update_labels", :style => 'display:none') if can_manage
|
|
||||||
|
|
|
@ -1,6 +0,0 @@
|
||||||
- (@labels || []).each do |label|
|
|
||||||
.add_label.label{:id => "flag#{label.id}"}
|
|
||||||
.flag{:style => "background: ##{label.color};"}
|
|
||||||
.labeltext=label.name
|
|
||||||
=hidden_field_tag "label-#{label.id}", label.id, :name => "issue[labelings_attributes][#{label.id}][label_id]"
|
|
||||||
.both
|
|
|
@ -15,7 +15,7 @@
|
||||||
.middle
|
.middle
|
||||||
%menu
|
%menu
|
||||||
= render 'layouts/menu/top'
|
= render 'layouts/menu/top'
|
||||||
.logo= image_tag 'logo-mini.png', :alt => 'logo'
|
.logo= link_to image_tag('logo-mini.png', :alt => 'logo'), root_path
|
||||||
.information
|
.information
|
||||||
= render 'search/form'
|
= render 'search/form'
|
||||||
.user
|
.user
|
||||||
|
|
|
@ -1,6 +1,5 @@
|
||||||
.lineForm.fork
|
.lineForm.fork
|
||||||
= select_tag :branch, branch_selector_options(project),
|
= select_tag :branch, branch_selector_options(project), :id => 'branch_selector', :class => 'sel80'
|
||||||
:class => 'sel80', :id => 'branch_selector'
|
|
||||||
%form{ :action => '', :method => :get, :id => 'branch_changer', :'data-action' => "#{controller_name}"}
|
%form{ :action => '', :method => :get, :id => 'branch_changer', :'data-action' => "#{controller_name}"}
|
||||||
.fork
|
.fork
|
||||||
%p= t("layout.projects.#{params[:commit_hash].present? ? 'current_commit' : 'current_branch'}")+':'
|
%p= t("layout.projects.#{params[:commit_hash].present? ? 'current_commit' : 'current_branch'}")+':'
|
||||||
|
|
|
@ -1,16 +0,0 @@
|
||||||
.block.notice
|
|
||||||
%h3= t("layout.users.own_projects")
|
|
||||||
.content
|
|
||||||
%p
|
|
||||||
%ul
|
|
||||||
- @own_projects.each do |project|
|
|
||||||
%li
|
|
||||||
= link_to project.name, project_path(project)
|
|
||||||
-#.block.notice
|
|
||||||
-# %h3= t("layout.users.part_projects")
|
|
||||||
-# .content
|
|
||||||
-# %p
|
|
||||||
-# %ul
|
|
||||||
-# - @part_projects.each do |project|
|
|
||||||
-# %li
|
|
||||||
-# = link_to project.owner.uname + '/' + project.name, project_path(project)
|
|
|
@ -1,4 +1,8 @@
|
||||||
%tr{:class => cycle("odd", "even")}
|
%tr{:id => "Row#{project_counter}"}
|
||||||
%td= link_to project.name, project_path(project)
|
%td
|
||||||
%td= project.name
|
= link_to project do
|
||||||
%td= project.description
|
.table-sort-left= image_tag visibility_icon(project.visibility)
|
||||||
|
.table-sort-right #{project.owner.uname} / #{project.name}
|
||||||
|
%td.td2= project.description
|
||||||
|
%td= t("layout.collaborators.role_names.#{project.relations.by_object(current_user).first.role}")
|
||||||
|
%td.td5= link_to image_tag('x.png'), remove_user_project_path(project), :method => :delete, :confirm => t("layout.confirm")
|
|
@ -1,8 +1,13 @@
|
||||||
.description-top
|
.description-top
|
||||||
.img= image_tag 'code.png'
|
|
||||||
= text_field_tag :url, git_repo_url(project.git_repo_name), :class => 'name',
|
= text_field_tag :url, git_repo_url(project.git_repo_name), :class => 'name',
|
||||||
:type => 'text',:spellcheck => 'false', :disabled => 'disabled'
|
:type => 'text',:spellcheck => 'false', :readonly => true
|
||||||
.role
|
.role
|
||||||
= t("layout.read_write_access")
|
= t("layout.read_write_access")
|
||||||
= render :partial => 'projects/branch_select', :locals => {:project => project}
|
= render :partial => 'projects/branch_select', :locals => {:project => project}
|
||||||
.both
|
.both
|
||||||
|
:javascript
|
||||||
|
$(document).ready(function() {
|
||||||
|
$('#url').live('click', function() {
|
||||||
|
$(this).select();
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
|
@ -1,16 +1,12 @@
|
||||||
.block
|
= link_to t('layout.projects.new'), new_project_path, :class => 'button' if can?(:create, Project)
|
||||||
.secondary-navigation
|
|
||||||
%ul.wat-cf
|
|
||||||
%li.first.active= link_to t("layout.projects.list"), projects_path
|
|
||||||
%li= link_to t("layout.projects.new"), new_project_path
|
|
||||||
.content
|
|
||||||
%h2.title
|
|
||||||
= t("layout.projects.list_header")
|
|
||||||
.inner
|
|
||||||
= render :partial => 'shared/search_form'
|
|
||||||
= render :partial => 'projects/list', :object => @projects
|
|
||||||
.actions-bar.wat-cf
|
|
||||||
.actions
|
|
||||||
= will_paginate @projects, :param_name => :project_page
|
|
||||||
|
|
||||||
- content_for :sidebar, render(:partial => 'own_projects_sidebar')
|
%table#myTable.tablesorter{:cellpadding => "0", :cellspacing => "0"}
|
||||||
|
%thead
|
||||||
|
%tr
|
||||||
|
%th.th1= t("activerecord.attributes.project.name")
|
||||||
|
%th.th2= t("activerecord.attributes.project.description")
|
||||||
|
%th.th3= t("layout.projects.role")
|
||||||
|
%th.th4= t("layout.projects.remove_user")
|
||||||
|
%tbody= render @projects
|
||||||
|
|
||||||
|
= will_paginate
|
||||||
|
|
|
@ -1,7 +1,4 @@
|
||||||
%h3.bpadding10
|
%h3.bpadding10= t("layout.projects.new")
|
||||||
= t("layout.projects.new_header")
|
|
||||||
|
|
||||||
= form_for @project, :html => { :class => :form, :multipart => true } do |f|
|
= form_for @project, :html => { :class => :form, :multipart => true } do |f|
|
||||||
= render :partial => "form", :locals => {:f => f}
|
= render :partial => "form", :locals => {:f => f}
|
||||||
|
|
||||||
-# content_for :sidebar, render('sidebar')
|
|
||||||
|
|
|
@ -1,59 +0,0 @@
|
||||||
= render :partial => 'projects/submenu'
|
|
||||||
= render :partial => 'projects/repo_block', :locals => {:project => @project}
|
|
||||||
|
|
||||||
.description
|
|
||||||
%h3= t("layout.projects.about_subheader")
|
|
||||||
%p
|
|
||||||
= @project.description
|
|
||||||
= link_to t('layout.read_more'), '#'
|
|
||||||
|
|
||||||
%h3= t("layout.projects.last_commit")
|
|
||||||
- GitPresenters::CommitAsMessagePresenter.present(@commit, :branch => @branch) do |presenter|
|
|
||||||
= render :partial => 'shared/feed_message', :locals => {:presenter => presenter, :item_no => 1}
|
|
||||||
|
|
||||||
%h3= t("layout.projects.files_in_project")
|
|
||||||
.files
|
|
||||||
.l
|
|
||||||
= render :partial => 'git/shared/whereami'
|
|
||||||
|
|
||||||
#fork-and-edit.r
|
|
||||||
%a.button{:href => "#"} Fork and edit
|
|
||||||
.both
|
|
||||||
|
|
||||||
#repo-wrapper
|
|
||||||
%table#myTable.tablesorter.project{:cellpadding => "0", :cellspacing => "0"}
|
|
||||||
%thead
|
|
||||||
%tr
|
|
||||||
%th.th1.header= t("layout.project.filename")
|
|
||||||
%th.th2.header= t("layout.project.age")
|
|
||||||
%th.th3= t("layout.project.message")
|
|
||||||
%th.th4.header= t("layout.project.author")
|
|
||||||
%tbody
|
|
||||||
- if @path.present?
|
|
||||||
%tr
|
|
||||||
%td
|
|
||||||
.pic= image_tag 'folder.png'
|
|
||||||
.name
|
|
||||||
= link_to "..", tree_path(@project, @treeish, File.join([@path.dup.encode_to_default, ".."].compact).encode_to_default)
|
|
||||||
%td==
|
|
||||||
%td==
|
|
||||||
%td==
|
|
||||||
- @project.tree_info(@tree, @treeish, @path).each_pair do |entry, commit|
|
|
||||||
%tr
|
|
||||||
%td
|
|
||||||
- entry_path = File.join([@path.present? ? @path : nil, entry.name].compact).encode_to_default
|
|
||||||
- if entry.is_a? Grit::Blob
|
|
||||||
.pic= image_tag 'code.png'
|
|
||||||
.name
|
|
||||||
= link_to(entry.name, blob_path(@project, @treeish, entry_path), :class => 'files-see').encode_to_default
|
|
||||||
- else
|
|
||||||
.pic= image_tag 'folder.png'
|
|
||||||
.name
|
|
||||||
= link_to(entry.name, tree_path(@project, @treeish, entry_path), :class => 'files-see').encode_to_default
|
|
||||||
%td
|
|
||||||
%span{:style => "display: none;"}= commit.committed_date || commit.authored_date#> Dec 31, 2011
|
|
||||||
= l(commit.committed_date || commit.authored_date, :format => :short) #31 декабря 2011
|
|
||||||
%td
|
|
||||||
= commit.short_message.encode_to_default #Redo autostart script to start from user
|
|
||||||
%td
|
|
||||||
= (commit.committer || commit.author).name.encode_to_default #chipiga
|
|
|
@ -1,5 +1,5 @@
|
||||||
= form_tag search_index_path, :method => 'get' do
|
= form_tag search_index_path, :method => 'get' do
|
||||||
.leftside= text_field_tag 'query', params[:query], :placeholder => t("layout.search.header"), :class => 'exsearch'
|
.leftside= text_field_tag 'query', params[:query], :placeholder => t("layout.search.header"), :class => 'exsearch'
|
||||||
.lineForm.leftside.rmargin10= select_tag 'type', options_for_select(t('layout.search.types').invert, params[:type]), :class => 'sel80', :id => 'selSearch'
|
.lineForm.leftside.rmargin10= select_tag 'type', options_for_select(t('layout.search.types').invert, params[:type]), :class => 'sel80 cusel', :id => 'selSearch'
|
||||||
.leftside= submit_tag t("layout.search.header"), :class => 'button width100'
|
.leftside= submit_tag t("layout.search.header"), :class => 'button width100'
|
||||||
.both
|
.both
|
|
@ -4,6 +4,22 @@
|
||||||
= f.label :can_notify, t('activerecord.attributes.settings.notifier.can_notify')
|
= f.label :can_notify, t('activerecord.attributes.settings.notifier.can_notify')
|
||||||
.both
|
.both
|
||||||
%h3= t("layout.settings.notifiers.code_header")
|
%h3= t("layout.settings.notifiers.code_header")
|
||||||
|
.leftside.w25
|
||||||
|
= f.check_box :new_comment_commit_owner, :class => 'notify_cbx'
|
||||||
|
.leftside
|
||||||
|
= f.label :new_comment_commit_owner, t('activerecord.attributes.settings.notifier.new_comment_commit_owner')
|
||||||
|
.both
|
||||||
|
.leftside.w25
|
||||||
|
= f.check_box :new_comment_commit_repo_owner, :class => 'notify_cbx'
|
||||||
|
.leftside
|
||||||
|
= f.label :new_comment_commit_repo_owner, t('activerecord.attributes.settings.notifier.new_comment_commit_repo_owner')
|
||||||
|
.both
|
||||||
|
.leftside.w25
|
||||||
|
= f.check_box :new_comment_commit_commentor, :class => 'notify_cbx'
|
||||||
|
.leftside
|
||||||
|
= f.label :new_comment_commit_commentor, t('activerecord.attributes.settings.notifier.new_comment_commit_commentor')
|
||||||
|
.both
|
||||||
|
%h3= t("layout.settings.notifiers.tracker_header")
|
||||||
.leftside.w25
|
.leftside.w25
|
||||||
= f.check_box :new_comment, :class => 'notify_cbx'
|
= f.check_box :new_comment, :class => 'notify_cbx'
|
||||||
.leftside
|
.leftside
|
||||||
|
@ -24,21 +40,7 @@
|
||||||
.leftside
|
.leftside
|
||||||
= f.label :issue_assign, t('activerecord.attributes.settings.notifier.issue_assign')
|
= f.label :issue_assign, t('activerecord.attributes.settings.notifier.issue_assign')
|
||||||
.both
|
.both
|
||||||
.leftside.w25
|
|
||||||
= f.check_box :new_comment_commit_owner, :class => 'notify_cbx'
|
|
||||||
.leftside
|
|
||||||
= f.label :new_comment_commit_owner, t('activerecord.attributes.settings.notifier.new_comment_commit_owner')
|
|
||||||
.both
|
|
||||||
.leftside.w25
|
|
||||||
= f.check_box :new_comment_commit_repo_owner, :class => 'notify_cbx'
|
|
||||||
.leftside
|
|
||||||
= f.label :new_comment_commit_repo_owner, t('activerecord.attributes.settings.notifier.new_comment_commit_repo_owner')
|
|
||||||
.both
|
|
||||||
.leftside.w25
|
|
||||||
= f.check_box :new_comment_commit_commentor, :class => 'notify_cbx'
|
|
||||||
.leftside
|
|
||||||
= f.label :new_comment_commit_commentor, t('activerecord.attributes.settings.notifier.new_comment_commit_commentor')
|
|
||||||
.both
|
|
||||||
%br
|
%br
|
||||||
.leftside.w25
|
.leftside.w25
|
||||||
\
|
\
|
||||||
|
@ -48,43 +50,3 @@
|
||||||
|
|
||||||
:javascript
|
:javascript
|
||||||
disableNotifierCbx($('#settings_notifier_can_notify'));
|
disableNotifierCbx($('#settings_notifier_can_notify'));
|
||||||
|
|
||||||
-#.group
|
|
||||||
-# = f.label :can_notify, t('activerecord.attributes.settings.notifier.can_notify'), :class => :label
|
|
||||||
-# = f.check_box :can_notify#, :class => 'text_field'
|
|
||||||
-#
|
|
||||||
-#.group
|
|
||||||
-# = f.label :new_comment, t('activerecord.attributes.settings.notifier.new_comment'), :class => :label
|
|
||||||
-# = f.check_box :new_comment, :class => 'notify_cbx'
|
|
||||||
-#
|
|
||||||
-#.group
|
|
||||||
-# = f.label :new_comment_reply, t('activerecord.attributes.settings.notifier.new_comment_reply'), :class => :label
|
|
||||||
-# = f.check_box :new_comment_reply, :class => 'notify_cbx'
|
|
||||||
-#
|
|
||||||
-#.group
|
|
||||||
-# = f.label :new_issue, t('activerecord.attributes.settings.notifier.new_issue'), :class => :label
|
|
||||||
-# = f.check_box :new_issue, :class => 'notify_cbx'
|
|
||||||
-#
|
|
||||||
-#.group
|
|
||||||
-# = f.label :issue_assign, t('activerecord.attributes.settings.notifier.issue_assign'), :class => :label
|
|
||||||
-# = f.check_box :issue_assign, :class => 'notify_cbx'
|
|
||||||
-#
|
|
||||||
-#.group
|
|
||||||
-# = f.label :new_comment_commit_owner, t('activerecord.attributes.settings.notifier.new_comment_commit_owner'), :class => :label
|
|
||||||
-# = f.check_box :new_comment_commit_owner, :class => 'notify_cbx'
|
|
||||||
-#
|
|
||||||
-#.group
|
|
||||||
-# = f.label :new_comment_commit_repo_owner, t('activerecord.attributes.settings.notifier.new_comment_commit_repo_owner'), :class => :label
|
|
||||||
-# = f.check_box :new_comment_commit_repo_owner, :class => 'notify_cbx'
|
|
||||||
-#
|
|
||||||
-#.group
|
|
||||||
-# = f.label :new_comment_commit_commentor, t('activerecord.attributes.settings.notifier.new_comment_commit_commentor'), :class => :label
|
|
||||||
-# = f.check_box :new_comment_commit_commentor, :class => 'notify_cbx'
|
|
||||||
-#
|
|
||||||
-#.group.navform.wat-cf
|
|
||||||
-# %button.button{:type => "submit"}
|
|
||||||
-# = image_tag("choose.png", :alt => t("layout.save"))
|
|
||||||
-# = t("layout.save")
|
|
||||||
-# %span.text_button_padding= t("layout.or")
|
|
||||||
-# = link_to t("layout.cancel"), user_settings_notifier_path(@user), :class => "text_button_padding link_button"
|
|
||||||
-#
|
|
||||||
|
|
|
@ -1,5 +1,7 @@
|
||||||
.left
|
.left
|
||||||
= image_tag avatar_url(current_user, :big)
|
= image_tag avatar_url(@user, :big)
|
||||||
|
%br
|
||||||
|
= link_to t("layout.users.settings"), edit_user_path(@user), :class => 'button width81' if can? :edit, @user
|
||||||
.left
|
.left
|
||||||
%h3= @user.uname
|
%h3= @user.uname
|
||||||
= @user.name
|
= @user.name
|
||||||
|
@ -14,96 +16,5 @@
|
||||||
= link_to project.name, project
|
= link_to project.name, project
|
||||||
%br
|
%br
|
||||||
|
|
||||||
|
|
||||||
.left
|
|
||||||
%br
|
|
||||||
= link_to t("layout.users.edit"), edit_user_path(@user), :class => 'button' if can? :edit, @user
|
|
||||||
|
|
||||||
:javascript
|
:javascript
|
||||||
$('article .all').addClass('verybigpadding');
|
$('article .all').addClass('verybigpadding');
|
||||||
|
|
||||||
-#.block
|
|
||||||
-# .secondary-navigation
|
|
||||||
-# %ul.wat-cf
|
|
||||||
-# %li.first= link_to t("layout.users.list"), users_path
|
|
||||||
-# %li= link_to t("layout.users.new"), new_user_path
|
|
||||||
-# %li.active= link_to t("layout.users.show"), user_path
|
|
||||||
-# .content
|
|
||||||
-# .inner
|
|
||||||
-# %p
|
|
||||||
-# %b
|
|
||||||
-# Id
|
|
||||||
-# \:
|
|
||||||
-# = @user.id
|
|
||||||
-# %p
|
|
||||||
-# %b
|
|
||||||
-# = t("activerecord.attributes.user.name")
|
|
||||||
-# \:
|
|
||||||
-# = @user.name
|
|
||||||
-# %p
|
|
||||||
-# %b
|
|
||||||
-# = t("activerecord.attributes.user.uname")
|
|
||||||
-# \:
|
|
||||||
-# = @user.uname
|
|
||||||
-# %p
|
|
||||||
-# %b
|
|
||||||
-# = t("activerecord.attributes.user.email")
|
|
||||||
-# \:
|
|
||||||
-# = @user.email
|
|
||||||
-# %p
|
|
||||||
-# %b
|
|
||||||
-# = t("activerecord.attributes.user.created_at")
|
|
||||||
-# \:
|
|
||||||
-# = @user.created_at
|
|
||||||
-# .wat-cf
|
|
||||||
-# - if can? :edit, @user
|
|
||||||
-# = link_to image_tag("code.png", :alt => t("layout.edit")) + " " + t("layout.edit"), edit_user_path(@user), :class => "button"
|
|
||||||
-# - if can? :destroy, @user
|
|
||||||
-# = link_to image_tag("x.png", :alt => t("layout.delete")) + " " + t("layout.delete"), user_path(@user), :method => "delete", :class => "button", :confirm => t("layout.users.confirm_delete")
|
|
||||||
-#
|
|
||||||
-#.block
|
|
||||||
-# .secondary-navigation
|
|
||||||
-# %ul.wat-cf
|
|
||||||
-# %li.first.active= link_to t("layout.platforms.list"), platforms_path
|
|
||||||
-# %li= link_to t("layout.platforms.new"), new_user_platform_path(@user)
|
|
||||||
-# .content
|
|
||||||
-# %h2.title
|
|
||||||
-# = t("layout.platforms.list_header")
|
|
||||||
-# .inner
|
|
||||||
-# = render :partial => 'shared/search_form'
|
|
||||||
-# = render :partial => 'platforms/list', :object => @platforms
|
|
||||||
-# .actions-bar.wat-cf
|
|
||||||
-# .actions
|
|
||||||
-# = will_paginate @platforms, :param_name => :platform_page
|
|
||||||
-#
|
|
||||||
-#-#.block
|
|
||||||
-# .secondary-navigation
|
|
||||||
-# %ul.wat-cf
|
|
||||||
-# %li.first.active= link_to t("layout.repositories.list"), repositories_path
|
|
||||||
-# %li= link_to t("layout.repositories.new"), new_user_repository_path(@user)
|
|
||||||
-# .content
|
|
||||||
-# %h2.title
|
|
||||||
-# = t("layout.repositories.list_header")
|
|
||||||
-# .inner
|
|
||||||
-# = render :partial => 'shared/search_form'
|
|
||||||
-# = render :partial => 'repositories/list', :object => @repositories
|
|
||||||
-# .actions-bar.wat-cf
|
|
||||||
-# .actions
|
|
||||||
-# = will_paginate @repositories, :param_name => :repository_page
|
|
||||||
-#
|
|
||||||
-#.block
|
|
||||||
-# .secondary-navigation
|
|
||||||
-# %ul.wat-cf
|
|
||||||
-# %li.first.active= link_to t("layout.projects.list"), projects_path
|
|
||||||
-# %li= link_to t("layout.projects.new"), new_project_path
|
|
||||||
-# .content
|
|
||||||
-# %h2.title
|
|
||||||
-# = t("layout.projects.list_header")
|
|
||||||
-# .inner
|
|
||||||
-# = render :partial => 'shared/search_form'
|
|
||||||
-# = render :partial => 'projects/list', :object => @projects
|
|
||||||
-# .actions-bar.wat-cf
|
|
||||||
-# .actions
|
|
||||||
-# = will_paginate @projects, :param_name => :project_page
|
|
||||||
-#
|
|
||||||
-#- content_for :sidebar, render('sidebar')
|
|
||||||
|
|
|
@ -1,3 +1,9 @@
|
||||||
# -*- encoding : utf-8 -*-
|
# -*- encoding : utf-8 -*-
|
||||||
|
|
||||||
require './lib/grit1'
|
require './lib/grit1'
|
||||||
|
|
||||||
|
GAP_REPO_PATH = '/tmp/gap_repo.git'
|
||||||
|
unless File.directory? GAP_REPO_PATH
|
||||||
|
Grit::Repo.init_bare(GAP_REPO_PATH)
|
||||||
|
# FileUtils.chmod "a-w", GAP_REPO_PATH
|
||||||
|
end
|
||||||
|
|
|
@ -52,6 +52,7 @@ en:
|
||||||
notice_header: You can receive notifies from other collaborators about changes into code of your projects. Notifies will be sent to your email %{email}.
|
notice_header: You can receive notifies from other collaborators about changes into code of your projects. Notifies will be sent to your email %{email}.
|
||||||
change_email_link: Change email address
|
change_email_link: Change email address
|
||||||
code_header: Code
|
code_header: Code
|
||||||
|
tracker_header: Tracker
|
||||||
|
|
||||||
devise:
|
devise:
|
||||||
shared_links:
|
shared_links:
|
||||||
|
|
|
@ -2,6 +2,11 @@ en:
|
||||||
layout:
|
layout:
|
||||||
activity_feed:
|
activity_feed:
|
||||||
header: Activity Feed
|
header: Activity Feed
|
||||||
|
my_last_projects: My last projects
|
||||||
|
all_my_projects: All my projects
|
||||||
|
all_my_builds: All my builds
|
||||||
|
my_builds_by_day: My today builds
|
||||||
|
new_project: Create project
|
||||||
|
|
||||||
notifications:
|
notifications:
|
||||||
subjects:
|
subjects:
|
||||||
|
@ -14,17 +19,20 @@ en:
|
||||||
|
|
||||||
bodies:
|
bodies:
|
||||||
new_comment_notification:
|
new_comment_notification:
|
||||||
title: Hello, %{user_name}.
|
title: User %{user_name} has been added a new comment.
|
||||||
content: To the issue %{issue_link} added a comment.
|
content: Issue %{issue_link}
|
||||||
commit_content: To the commit %{commit_link} added a comment.
|
commit_content: Commit %{commit_link}
|
||||||
new_issue_notification:
|
new_issue_notification:
|
||||||
title: Hello, %{user_name}.
|
title: User %{user_name} has been added an issue.
|
||||||
content: To project %{project_link} has been added an issue %{issue_link}
|
content: Project %{project_link}. Issue %{issue_link}
|
||||||
new_user_notification:
|
new_user_notification:
|
||||||
title: Hello, %{user_name}.
|
title: Hello, %{user_name}.
|
||||||
content: You have been sign up to project «ROSA Build System» and now can sign in.
|
content: You have been sign up to project «ROSA Build System» and now can sign in.
|
||||||
email: ==Your email %{user_email}
|
email: ==Your email %{user_email}
|
||||||
password: ==Your password %{user_password}
|
password: ==Your password %{user_password}
|
||||||
issue_assign_notification:
|
issue_assign_notification:
|
||||||
title: Hello, %{user_name}.
|
title: You have been assigned to issue %{issue_link}
|
||||||
content: You have been assigned to issue %{issue_link}
|
wiki_new_commit_notification:
|
||||||
|
title: User has been updated wiki
|
||||||
|
content: This %{history_link} has been changed into project %{project_link}
|
||||||
|
invite_approve_notification: Invite to ABF
|
||||||
|
|
|
@ -2,6 +2,11 @@ ru:
|
||||||
layout:
|
layout:
|
||||||
activity_feed:
|
activity_feed:
|
||||||
header: Лента активности
|
header: Лента активности
|
||||||
|
my_last_projects: Мои последние проекты
|
||||||
|
all_my_projects: Все мои проекты
|
||||||
|
all_my_builds: Все мои сборки
|
||||||
|
my_builds_by_day: Мои сборки за день
|
||||||
|
new_project: Создать проект
|
||||||
|
|
||||||
notifications:
|
notifications:
|
||||||
subjects:
|
subjects:
|
||||||
|
@ -14,18 +19,20 @@ ru:
|
||||||
|
|
||||||
bodies:
|
bodies:
|
||||||
new_comment_notification:
|
new_comment_notification:
|
||||||
title: Здравствуйте, %{user_name}.
|
title: Пользователь %{user_name} добавил новый комментарий
|
||||||
content: К задаче %{issue_link} был добавлен новый комментарий.
|
content: Задача %{issue_link}
|
||||||
commit_content: К коммиту %{commit_link} был добавлен новый комментарий.
|
commit_content: Коммит %{commit_link}
|
||||||
new_issue_notification:
|
new_issue_notification:
|
||||||
title: Здравствуйте, %{user_name}.
|
title: Пользователь %{user_name} добавил новую задачу
|
||||||
content: К проекту %{project_link} была добавлена задача %{issue_link}
|
content: Проект %{project_link}. Задача %{issue_link}
|
||||||
new_user_notification:
|
new_user_notification:
|
||||||
title: Здравствуйте, %{user_name}.
|
title: Здравствуйте, %{user_name}.
|
||||||
content: Вы зарегистрированы на проекте «ROSA Build System» и теперь можете войти в систему.
|
content: Вы зарегистрированы на проекте «ROSA Build System» и теперь можете войти в систему.
|
||||||
email: ==Ваш email %{user_email}
|
email: ==Ваш email %{user_email}
|
||||||
password: ==Ваш пароль %{user_password}
|
password: ==Ваш пароль %{user_password}
|
||||||
issue_assign_notification:
|
issue_assign_notification:
|
||||||
title: Здравствуйте, %{user_name}.
|
title: Вам была назначена задача %{issue_link}
|
||||||
content: Вам была назначена задача %{issue_link}
|
wiki_new_commit_notification:
|
||||||
|
title: Пользователь обновил wiki
|
||||||
|
content: Изменил %{history_link} в проекте %{project_link}
|
||||||
invite_approve_notification: Приглашение в ABF
|
invite_approve_notification: Приглашение в ABF
|
|
@ -3,6 +3,7 @@ en:
|
||||||
projects:
|
projects:
|
||||||
add: Add
|
add: Add
|
||||||
edit: Edit
|
edit: Edit
|
||||||
|
fork_and_edit: Fork and Edit
|
||||||
list: List
|
list: List
|
||||||
list_header: Projects
|
list_header: Projects
|
||||||
edit_header: Edit the project
|
edit_header: Edit the project
|
||||||
|
@ -11,8 +12,6 @@ en:
|
||||||
new_build: New build %{project_name}
|
new_build: New build %{project_name}
|
||||||
confirm_delete: Are you sure to delete this project?
|
confirm_delete: Are you sure to delete this project?
|
||||||
new: New project
|
new: New project
|
||||||
new_header: New project
|
|
||||||
new_header: New project
|
|
||||||
location: Location
|
location: Location
|
||||||
git_repo_location: Path to git repo
|
git_repo_location: Path to git repo
|
||||||
current_project_header: Current project
|
current_project_header: Current project
|
||||||
|
@ -23,6 +22,8 @@ en:
|
||||||
collaborators: Collaborators
|
collaborators: Collaborators
|
||||||
groups: Groups
|
groups: Groups
|
||||||
edit_collaborators: Edit collaborators
|
edit_collaborators: Edit collaborators
|
||||||
|
role: Project role
|
||||||
|
remove_user: Leave project
|
||||||
issues: Issues
|
issues: Issues
|
||||||
wiki: Wiki
|
wiki: Wiki
|
||||||
delete_warning: Attention! Deleted project can not be restored!
|
delete_warning: Attention! Deleted project can not be restored!
|
||||||
|
@ -51,6 +52,7 @@ en:
|
||||||
destroyed: Project deleted
|
destroyed: Project deleted
|
||||||
forked: Project forked
|
forked: Project forked
|
||||||
fork_error: Project fork error
|
fork_error: Project fork error
|
||||||
|
user_removed: User successfully removed from project
|
||||||
|
|
||||||
activerecord:
|
activerecord:
|
||||||
models:
|
models:
|
||||||
|
|
|
@ -3,6 +3,7 @@ ru:
|
||||||
projects:
|
projects:
|
||||||
add: Добавить
|
add: Добавить
|
||||||
edit: Редактировать
|
edit: Редактировать
|
||||||
|
fork_and_edit: Клонировать и редактировать
|
||||||
list: Список
|
list: Список
|
||||||
list_header: Проекты
|
list_header: Проекты
|
||||||
edit_header: Редактировать проект
|
edit_header: Редактировать проект
|
||||||
|
@ -11,8 +12,6 @@ ru:
|
||||||
new_build: Новая сборка %{project_name}
|
new_build: Новая сборка %{project_name}
|
||||||
confirm_delete: Вы уверены, что хотите удалить этот проект?
|
confirm_delete: Вы уверены, что хотите удалить этот проект?
|
||||||
new: Новый проект
|
new: Новый проект
|
||||||
new_header: Новый проект
|
|
||||||
new_header: Новый проект
|
|
||||||
location: Расположение
|
location: Расположение
|
||||||
git_repo_location: Путь к git-репозиторию
|
git_repo_location: Путь к git-репозиторию
|
||||||
current_project_header: Текущий проект
|
current_project_header: Текущий проект
|
||||||
|
@ -23,6 +22,8 @@ ru:
|
||||||
collaborators: Коллабораторы
|
collaborators: Коллабораторы
|
||||||
groups: Группы
|
groups: Группы
|
||||||
edit_collaborators: Изменить список участников
|
edit_collaborators: Изменить список участников
|
||||||
|
role: Роль в проекте
|
||||||
|
remove_user: Покинуть проект
|
||||||
issues: Задачи
|
issues: Задачи
|
||||||
wiki: Wiki
|
wiki: Wiki
|
||||||
delete_warning: Внимание! Удаленный проект восстановлению не подлежит.
|
delete_warning: Внимание! Удаленный проект восстановлению не подлежит.
|
||||||
|
@ -51,6 +52,7 @@ ru:
|
||||||
destroyed: Проект успешно удален
|
destroyed: Проект успешно удален
|
||||||
forked: Проект успешно форкнут
|
forked: Проект успешно форкнут
|
||||||
fork_error: Ошибка форка
|
fork_error: Ошибка форка
|
||||||
|
user_removed: Пользователь успешно удален из проекта
|
||||||
|
|
||||||
activerecord:
|
activerecord:
|
||||||
models:
|
models:
|
||||||
|
|
|
@ -52,6 +52,7 @@ ru:
|
||||||
notice_header: Вы можете получать уведомления об изменениях, которые вносят другие участники, в код ваших программ. Уведомления будут высылаться на указанный вами адрес электронной почты %{email}.
|
notice_header: Вы можете получать уведомления об изменениях, которые вносят другие участники, в код ваших программ. Уведомления будут высылаться на указанный вами адрес электронной почты %{email}.
|
||||||
change_email_link: Изменить адрес электронной почты
|
change_email_link: Изменить адрес электронной почты
|
||||||
code_header: Код
|
code_header: Код
|
||||||
|
tracker_header: Трекер задач
|
||||||
|
|
||||||
devise:
|
devise:
|
||||||
shared_links:
|
shared_links:
|
||||||
|
|
|
@ -4,6 +4,7 @@ en:
|
||||||
list: List
|
list: List
|
||||||
new: Create
|
new: Create
|
||||||
edit: Profile
|
edit: Profile
|
||||||
|
settings: Settings
|
||||||
new_header: New user
|
new_header: New user
|
||||||
edit_header: Edit
|
edit_header: Edit
|
||||||
list_header: Users
|
list_header: Users
|
||||||
|
|
|
@ -4,6 +4,7 @@ ru:
|
||||||
list: Список
|
list: Список
|
||||||
new: Создать
|
new: Создать
|
||||||
edit: Профиль
|
edit: Профиль
|
||||||
|
settings: Настройки
|
||||||
new_header: Новый пользователь
|
new_header: Новый пользователь
|
||||||
edit_header: Редактировать
|
edit_header: Редактировать
|
||||||
list_header: Пользователи
|
list_header: Пользователи
|
||||||
|
|
|
@ -125,7 +125,8 @@ Rosa::Application.routes.draw do
|
||||||
match ':ref' => 'wiki#show', :as => :versioned, :via => :get
|
match ':ref' => 'wiki#show', :as => :versioned, :via => :get
|
||||||
|
|
||||||
post :compare
|
post :compare
|
||||||
match 'compare/*versions' => 'wiki#compare', :as => :compare_versions, :via => :get
|
#match 'compare/*versions' => 'wiki#compare', :as => :compare_versions, :via => :get
|
||||||
|
match 'compare/:versions' => 'wiki#compare', :versions => /([a-f0-9\^]{6,40})(\.\.\.[a-f0-9\^]{6,40})/, :as => :compare_versions, :via => :get
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
resources :issues, :except => :edit do
|
resources :issues, :except => :edit do
|
||||||
|
@ -134,7 +135,6 @@ Rosa::Application.routes.draw do
|
||||||
collection do
|
collection do
|
||||||
post :create_label
|
post :create_label
|
||||||
get :search_collaborators
|
get :search_collaborators
|
||||||
get :search_labels
|
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
post "labels/:label_id" => "issues#destroy_label", :as => :issues_delete_label
|
post "labels/:label_id" => "issues#destroy_label", :as => :issues_delete_label
|
||||||
|
@ -156,18 +156,13 @@ Rosa::Application.routes.draw do
|
||||||
post :update
|
post :update
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
# resources :groups, :controller => 'project_groups' do
|
|
||||||
# end
|
|
||||||
|
|
||||||
collection do
|
|
||||||
get :auto_build
|
|
||||||
end
|
|
||||||
member do
|
member do
|
||||||
post :fork
|
post :fork
|
||||||
# get :new, :controller => 'projects', :action => 'new', :id => /new/, :as => :new
|
|
||||||
get :show, :controller => 'git/trees', :action => :show
|
get :show, :controller => 'git/trees', :action => :show
|
||||||
get :sections
|
get :sections
|
||||||
post :sections
|
post :sections
|
||||||
|
delete :remove_user
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -198,8 +193,6 @@ Rosa::Application.routes.draw do
|
||||||
resources :users, :groups do
|
resources :users, :groups do
|
||||||
resources :platforms, :only => [:new, :create]
|
resources :platforms, :only => [:new, :create]
|
||||||
|
|
||||||
resources :projects, :only => [:index]
|
|
||||||
|
|
||||||
# resources :repositories, :only => [:new, :create]
|
# resources :repositories, :only => [:new, :create]
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,14 @@
|
||||||
|
class AddProjectToComment < ActiveRecord::Migration
|
||||||
|
def up
|
||||||
|
add_column :comments, :project_id, :integer
|
||||||
|
Subscribe.reset_column_information
|
||||||
|
Comment.where(:commentable_type => 'Grit::Commit').destroy_all
|
||||||
|
Comment.where(:commentable_type => 'Issue').each do |comment|
|
||||||
|
comment.update_attribute(:project_id, comment.commentable.project)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
def down
|
||||||
|
remove_column :comments, :project_id
|
||||||
|
end
|
||||||
|
end
|
111
db/schema.rb
111
db/schema.rb
|
@ -23,8 +23,8 @@ ActiveRecord::Schema.define(:version => 20120303171802) do
|
||||||
|
|
||||||
create_table "arches", :force => true do |t|
|
create_table "arches", :force => true do |t|
|
||||||
t.string "name", :null => false
|
t.string "name", :null => false
|
||||||
t.datetime "created_at"
|
t.datetime "created_at", :null => false
|
||||||
t.datetime "updated_at"
|
t.datetime "updated_at", :null => false
|
||||||
end
|
end
|
||||||
|
|
||||||
add_index "arches", ["name"], :name => "index_arches_on_name", :unique => true
|
add_index "arches", ["name"], :name => "index_arches_on_name", :unique => true
|
||||||
|
@ -33,8 +33,8 @@ ActiveRecord::Schema.define(:version => 20120303171802) do
|
||||||
t.integer "user_id"
|
t.integer "user_id"
|
||||||
t.string "provider"
|
t.string "provider"
|
||||||
t.string "uid"
|
t.string "uid"
|
||||||
t.datetime "created_at"
|
t.datetime "created_at", :null => false
|
||||||
t.datetime "updated_at"
|
t.datetime "updated_at", :null => false
|
||||||
end
|
end
|
||||||
|
|
||||||
add_index "authentications", ["provider", "uid"], :name => "index_authentications_on_provider_and_uid", :unique => true
|
add_index "authentications", ["provider", "uid"], :name => "index_authentications_on_provider_and_uid", :unique => true
|
||||||
|
@ -45,8 +45,8 @@ ActiveRecord::Schema.define(:version => 20120303171802) do
|
||||||
t.integer "arch_id"
|
t.integer "arch_id"
|
||||||
t.integer "pl_id"
|
t.integer "pl_id"
|
||||||
t.integer "bpl_id"
|
t.integer "bpl_id"
|
||||||
t.datetime "created_at"
|
t.datetime "created_at", :null => false
|
||||||
t.datetime "updated_at"
|
t.datetime "updated_at", :null => false
|
||||||
end
|
end
|
||||||
|
|
||||||
create_table "build_list_items", :force => true do |t|
|
create_table "build_list_items", :force => true do |t|
|
||||||
|
@ -54,8 +54,8 @@ ActiveRecord::Schema.define(:version => 20120303171802) do
|
||||||
t.integer "level"
|
t.integer "level"
|
||||||
t.integer "status"
|
t.integer "status"
|
||||||
t.integer "build_list_id"
|
t.integer "build_list_id"
|
||||||
t.datetime "created_at"
|
t.datetime "created_at", :null => false
|
||||||
t.datetime "updated_at"
|
t.datetime "updated_at", :null => false
|
||||||
t.string "version"
|
t.string "version"
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -69,8 +69,8 @@ ActiveRecord::Schema.define(:version => 20120303171802) do
|
||||||
t.integer "project_id"
|
t.integer "project_id"
|
||||||
t.integer "arch_id"
|
t.integer "arch_id"
|
||||||
t.datetime "notified_at"
|
t.datetime "notified_at"
|
||||||
t.datetime "created_at"
|
t.datetime "created_at", :null => false
|
||||||
t.datetime "updated_at"
|
t.datetime "updated_at", :null => false
|
||||||
t.boolean "is_circle", :default => false
|
t.boolean "is_circle", :default => false
|
||||||
t.text "additional_repos"
|
t.text "additional_repos"
|
||||||
t.string "name"
|
t.string "name"
|
||||||
|
@ -93,16 +93,16 @@ ActiveRecord::Schema.define(:version => 20120303171802) do
|
||||||
t.string "name"
|
t.string "name"
|
||||||
t.string "ancestry"
|
t.string "ancestry"
|
||||||
t.integer "projects_count", :default => 0, :null => false
|
t.integer "projects_count", :default => 0, :null => false
|
||||||
t.datetime "created_at"
|
t.datetime "created_at", :null => false
|
||||||
t.datetime "updated_at"
|
t.datetime "updated_at", :null => false
|
||||||
end
|
end
|
||||||
|
|
||||||
create_table "comments", :force => true do |t|
|
create_table "comments", :force => true do |t|
|
||||||
t.string "commentable_type"
|
t.string "commentable_type"
|
||||||
t.integer "user_id"
|
t.integer "user_id"
|
||||||
t.text "body"
|
t.text "body"
|
||||||
t.datetime "created_at"
|
t.datetime "created_at", :null => false
|
||||||
t.datetime "updated_at"
|
t.datetime "updated_at", :null => false
|
||||||
t.decimal "commentable_id", :precision => 50, :scale => 0
|
t.decimal "commentable_id", :precision => 50, :scale => 0
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -110,8 +110,8 @@ ActiveRecord::Schema.define(:version => 20120303171802) do
|
||||||
t.string "name", :null => false
|
t.string "name", :null => false
|
||||||
t.integer "project_id", :null => false
|
t.integer "project_id", :null => false
|
||||||
t.integer "owner_id", :null => false
|
t.integer "owner_id", :null => false
|
||||||
t.datetime "created_at"
|
t.datetime "created_at", :null => false
|
||||||
t.datetime "updated_at"
|
t.datetime "updated_at", :null => false
|
||||||
end
|
end
|
||||||
|
|
||||||
create_table "delayed_jobs", :force => true do |t|
|
create_table "delayed_jobs", :force => true do |t|
|
||||||
|
@ -123,8 +123,8 @@ ActiveRecord::Schema.define(:version => 20120303171802) do
|
||||||
t.datetime "locked_at"
|
t.datetime "locked_at"
|
||||||
t.datetime "failed_at"
|
t.datetime "failed_at"
|
||||||
t.string "locked_by"
|
t.string "locked_by"
|
||||||
t.datetime "created_at"
|
t.datetime "created_at", :null => false
|
||||||
t.datetime "updated_at"
|
t.datetime "updated_at", :null => false
|
||||||
t.string "queue"
|
t.string "queue"
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -136,8 +136,8 @@ ActiveRecord::Schema.define(:version => 20120303171802) do
|
||||||
t.string "distro"
|
t.string "distro"
|
||||||
t.string "platform"
|
t.string "platform"
|
||||||
t.integer "counter", :default => 0
|
t.integer "counter", :default => 0
|
||||||
t.datetime "created_at"
|
t.datetime "created_at", :null => false
|
||||||
t.datetime "updated_at"
|
t.datetime "updated_at", :null => false
|
||||||
end
|
end
|
||||||
|
|
||||||
create_table "event_logs", :force => true do |t|
|
create_table "event_logs", :force => true do |t|
|
||||||
|
@ -152,14 +152,14 @@ ActiveRecord::Schema.define(:version => 20120303171802) do
|
||||||
t.string "controller"
|
t.string "controller"
|
||||||
t.string "action"
|
t.string "action"
|
||||||
t.text "message"
|
t.text "message"
|
||||||
t.datetime "created_at"
|
t.datetime "created_at", :null => false
|
||||||
t.datetime "updated_at"
|
t.datetime "updated_at", :null => false
|
||||||
end
|
end
|
||||||
|
|
||||||
create_table "groups", :force => true do |t|
|
create_table "groups", :force => true do |t|
|
||||||
t.integer "owner_id"
|
t.integer "owner_id"
|
||||||
t.datetime "created_at"
|
t.datetime "created_at", :null => false
|
||||||
t.datetime "updated_at"
|
t.datetime "updated_at", :null => false
|
||||||
t.string "uname"
|
t.string "uname"
|
||||||
t.integer "own_projects_count", :default => 0, :null => false
|
t.integer "own_projects_count", :default => 0, :null => false
|
||||||
t.text "description"
|
t.text "description"
|
||||||
|
@ -172,8 +172,8 @@ ActiveRecord::Schema.define(:version => 20120303171802) do
|
||||||
t.string "title"
|
t.string "title"
|
||||||
t.text "body"
|
t.text "body"
|
||||||
t.string "status", :default => "open"
|
t.string "status", :default => "open"
|
||||||
t.datetime "created_at"
|
t.datetime "created_at", :null => false
|
||||||
t.datetime "updated_at"
|
t.datetime "updated_at", :null => false
|
||||||
t.integer "creator_id"
|
t.integer "creator_id"
|
||||||
t.datetime "closed_at"
|
t.datetime "closed_at"
|
||||||
t.integer "closed_by"
|
t.integer "closed_by"
|
||||||
|
@ -204,8 +204,8 @@ ActiveRecord::Schema.define(:version => 20120303171802) do
|
||||||
t.string "description"
|
t.string "description"
|
||||||
t.string "name"
|
t.string "name"
|
||||||
t.integer "parent_platform_id"
|
t.integer "parent_platform_id"
|
||||||
t.datetime "created_at"
|
t.datetime "created_at", :null => false
|
||||||
t.datetime "updated_at"
|
t.datetime "updated_at", :null => false
|
||||||
t.boolean "released", :default => false
|
t.boolean "released", :default => false
|
||||||
t.integer "owner_id"
|
t.integer "owner_id"
|
||||||
t.string "owner_type"
|
t.string "owner_type"
|
||||||
|
@ -218,8 +218,8 @@ ActiveRecord::Schema.define(:version => 20120303171802) do
|
||||||
t.integer "platform_id"
|
t.integer "platform_id"
|
||||||
t.string "login"
|
t.string "login"
|
||||||
t.string "password"
|
t.string "password"
|
||||||
t.datetime "created_at"
|
t.datetime "created_at", :null => false
|
||||||
t.datetime "updated_at"
|
t.datetime "updated_at", :null => false
|
||||||
t.integer "user_id"
|
t.integer "user_id"
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -227,8 +227,8 @@ ActiveRecord::Schema.define(:version => 20120303171802) do
|
||||||
t.integer "product_id"
|
t.integer "product_id"
|
||||||
t.integer "status", :default => 2, :null => false
|
t.integer "status", :default => 2, :null => false
|
||||||
t.datetime "notified_at"
|
t.datetime "notified_at"
|
||||||
t.datetime "created_at"
|
t.datetime "created_at", :null => false
|
||||||
t.datetime "updated_at"
|
t.datetime "updated_at", :null => false
|
||||||
end
|
end
|
||||||
|
|
||||||
add_index "product_build_lists", ["product_id"], :name => "index_product_build_lists_on_product_id"
|
add_index "product_build_lists", ["product_id"], :name => "index_product_build_lists_on_product_id"
|
||||||
|
@ -238,8 +238,8 @@ ActiveRecord::Schema.define(:version => 20120303171802) do
|
||||||
t.integer "platform_id", :null => false
|
t.integer "platform_id", :null => false
|
||||||
t.integer "build_status", :default => 2, :null => false
|
t.integer "build_status", :default => 2, :null => false
|
||||||
t.string "build_path"
|
t.string "build_path"
|
||||||
t.datetime "created_at"
|
t.datetime "created_at", :null => false
|
||||||
t.datetime "updated_at"
|
t.datetime "updated_at", :null => false
|
||||||
t.text "build_script"
|
t.text "build_script"
|
||||||
t.text "counter"
|
t.text "counter"
|
||||||
t.text "ks"
|
t.text "ks"
|
||||||
|
@ -259,8 +259,8 @@ ActiveRecord::Schema.define(:version => 20120303171802) do
|
||||||
t.string "name"
|
t.string "name"
|
||||||
t.string "version"
|
t.string "version"
|
||||||
t.datetime "file_mtime"
|
t.datetime "file_mtime"
|
||||||
t.datetime "created_at"
|
t.datetime "created_at", :null => false
|
||||||
t.datetime "updated_at"
|
t.datetime "updated_at", :null => false
|
||||||
t.integer "platform_id"
|
t.integer "platform_id"
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -269,14 +269,14 @@ ActiveRecord::Schema.define(:version => 20120303171802) do
|
||||||
create_table "project_to_repositories", :force => true do |t|
|
create_table "project_to_repositories", :force => true do |t|
|
||||||
t.integer "project_id"
|
t.integer "project_id"
|
||||||
t.integer "repository_id"
|
t.integer "repository_id"
|
||||||
t.datetime "created_at"
|
t.datetime "created_at", :null => false
|
||||||
t.datetime "updated_at"
|
t.datetime "updated_at", :null => false
|
||||||
end
|
end
|
||||||
|
|
||||||
create_table "projects", :force => true do |t|
|
create_table "projects", :force => true do |t|
|
||||||
t.string "name"
|
t.string "name"
|
||||||
t.datetime "created_at"
|
t.datetime "created_at", :null => false
|
||||||
t.datetime "updated_at"
|
t.datetime "updated_at", :null => false
|
||||||
t.integer "owner_id"
|
t.integer "owner_id"
|
||||||
t.string "owner_type"
|
t.string "owner_type"
|
||||||
t.string "visibility", :default => "open"
|
t.string "visibility", :default => "open"
|
||||||
|
@ -302,29 +302,30 @@ ActiveRecord::Schema.define(:version => 20120303171802) do
|
||||||
t.string "token"
|
t.string "token"
|
||||||
t.boolean "approved", :default => false
|
t.boolean "approved", :default => false
|
||||||
t.boolean "rejected", :default => false
|
t.boolean "rejected", :default => false
|
||||||
t.datetime "created_at"
|
t.datetime "created_at", :null => false
|
||||||
t.datetime "updated_at"
|
t.datetime "updated_at", :null => false
|
||||||
t.string "interest"
|
t.string "interest"
|
||||||
t.text "more"
|
t.text "more"
|
||||||
end
|
end
|
||||||
|
|
||||||
add_index "register_requests", ["email"], :name => "index_register_requests_on_email", :unique => true, :case_sensitive => false
|
add_index "register_requests", ["email"], :name => "index_register_requests_on_email", :unique => true, :case_sensitive => false
|
||||||
|
add_index "register_requests", ["token"], :name => "index_register_requests_on_token", :unique => true, :case_sensitive => false
|
||||||
|
|
||||||
create_table "relations", :force => true do |t|
|
create_table "relations", :force => true do |t|
|
||||||
t.integer "object_id"
|
t.integer "object_id"
|
||||||
t.string "object_type"
|
t.string "object_type"
|
||||||
t.integer "target_id"
|
t.integer "target_id"
|
||||||
t.string "target_type"
|
t.string "target_type"
|
||||||
t.datetime "created_at"
|
t.datetime "created_at", :null => false
|
||||||
t.datetime "updated_at"
|
t.datetime "updated_at", :null => false
|
||||||
t.string "role"
|
t.string "role"
|
||||||
end
|
end
|
||||||
|
|
||||||
create_table "repositories", :force => true do |t|
|
create_table "repositories", :force => true do |t|
|
||||||
t.string "description", :null => false
|
t.string "description", :null => false
|
||||||
t.integer "platform_id", :null => false
|
t.integer "platform_id", :null => false
|
||||||
t.datetime "created_at"
|
t.datetime "created_at", :null => false
|
||||||
t.datetime "updated_at"
|
t.datetime "updated_at", :null => false
|
||||||
t.string "name", :null => false
|
t.string "name", :null => false
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -332,8 +333,8 @@ ActiveRecord::Schema.define(:version => 20120303171802) do
|
||||||
t.string "name", :null => false
|
t.string "name", :null => false
|
||||||
t.integer "arch_id", :null => false
|
t.integer "arch_id", :null => false
|
||||||
t.integer "project_id", :null => false
|
t.integer "project_id", :null => false
|
||||||
t.datetime "created_at"
|
t.datetime "created_at", :null => false
|
||||||
t.datetime "updated_at"
|
t.datetime "updated_at", :null => false
|
||||||
end
|
end
|
||||||
|
|
||||||
add_index "rpms", ["project_id", "arch_id"], :name => "index_rpms_on_project_id_and_arch_id"
|
add_index "rpms", ["project_id", "arch_id"], :name => "index_rpms_on_project_id_and_arch_id"
|
||||||
|
@ -346,8 +347,8 @@ ActiveRecord::Schema.define(:version => 20120303171802) do
|
||||||
t.boolean "new_comment_reply", :default => true
|
t.boolean "new_comment_reply", :default => true
|
||||||
t.boolean "new_issue", :default => true
|
t.boolean "new_issue", :default => true
|
||||||
t.boolean "issue_assign", :default => true
|
t.boolean "issue_assign", :default => true
|
||||||
t.datetime "created_at"
|
t.datetime "created_at", :null => false
|
||||||
t.datetime "updated_at"
|
t.datetime "updated_at", :null => false
|
||||||
t.boolean "new_comment_commit_owner", :default => true
|
t.boolean "new_comment_commit_owner", :default => true
|
||||||
t.boolean "new_comment_commit_repo_owner", :default => true
|
t.boolean "new_comment_commit_repo_owner", :default => true
|
||||||
t.boolean "new_comment_commit_commentor", :default => true
|
t.boolean "new_comment_commit_commentor", :default => true
|
||||||
|
@ -356,8 +357,8 @@ ActiveRecord::Schema.define(:version => 20120303171802) do
|
||||||
create_table "subscribes", :force => true do |t|
|
create_table "subscribes", :force => true do |t|
|
||||||
t.string "subscribeable_type"
|
t.string "subscribeable_type"
|
||||||
t.integer "user_id"
|
t.integer "user_id"
|
||||||
t.datetime "created_at"
|
t.datetime "created_at", :null => false
|
||||||
t.datetime "updated_at"
|
t.datetime "updated_at", :null => false
|
||||||
t.boolean "status", :default => true
|
t.boolean "status", :default => true
|
||||||
t.integer "project_id"
|
t.integer "project_id"
|
||||||
t.decimal "subscribeable_id", :precision => 50, :scale => 0
|
t.decimal "subscribeable_id", :precision => 50, :scale => 0
|
||||||
|
@ -366,12 +367,12 @@ ActiveRecord::Schema.define(:version => 20120303171802) do
|
||||||
create_table "users", :force => true do |t|
|
create_table "users", :force => true do |t|
|
||||||
t.string "name"
|
t.string "name"
|
||||||
t.string "email", :default => "", :null => false
|
t.string "email", :default => "", :null => false
|
||||||
t.string "encrypted_password", :limit => 128, :default => "", :null => false
|
t.string "encrypted_password", :default => "", :null => false
|
||||||
t.string "reset_password_token"
|
t.string "reset_password_token"
|
||||||
t.datetime "reset_password_sent_at"
|
t.datetime "reset_password_sent_at"
|
||||||
t.datetime "remember_created_at"
|
t.datetime "remember_created_at"
|
||||||
t.datetime "created_at"
|
t.datetime "created_at", :null => false
|
||||||
t.datetime "updated_at"
|
t.datetime "updated_at", :null => false
|
||||||
t.text "ssh_key"
|
t.text "ssh_key"
|
||||||
t.string "uname"
|
t.string "uname"
|
||||||
t.string "role"
|
t.string "role"
|
||||||
|
|
|
@ -138,9 +138,6 @@
|
||||||
<div class="all">
|
<div class="all">
|
||||||
|
|
||||||
<div class="desription-top">
|
<div class="desription-top">
|
||||||
<div class="img">
|
|
||||||
<img src="pics/code.png" alt="pic" />
|
|
||||||
</div>
|
|
||||||
<input class="name" value="git@git.com:snigipini/wacomdrivers.git" />
|
<input class="name" value="git@git.com:snigipini/wacomdrivers.git" />
|
||||||
<div class="role">
|
<div class="role">
|
||||||
чтение и запись
|
чтение и запись
|
||||||
|
|
|
@ -276,7 +276,7 @@ header div.droplist a:hover{
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
.sub-menu nav { /*Äëÿ ïîäìåíþ áåç íàçâàíèÿ*/
|
.sub-menu nav { /*<EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>*/
|
||||||
float: left;
|
float: left;
|
||||||
margin: 0px 0px 0px 0px;
|
margin: 0px 0px 0px 0px;
|
||||||
}
|
}
|
||||||
|
@ -298,7 +298,7 @@ header div.droplist a:hover{
|
||||||
color: #575756;
|
color: #575756;
|
||||||
text-decoration: none;
|
text-decoration: none;
|
||||||
height: 34px;
|
height: 34px;
|
||||||
padding: 0px 20px 6px 20px;
|
padding: 0px 20px 8px 20px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.sub-menu nav ul li a.active {
|
.sub-menu nav ul li a.active {
|
||||||
|
@ -407,6 +407,10 @@ article h4 {
|
||||||
padding-bottom: 2px;
|
padding-bottom: 2px;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
article h4.nomargin {
|
||||||
|
margin: 0px;
|
||||||
|
}
|
||||||
|
|
||||||
article p {
|
article p {
|
||||||
margin: 0;
|
margin: 0;
|
||||||
padding: 0;
|
padding: 0;
|
||||||
|
@ -651,6 +655,13 @@ article div.all.bigpadding div.rightside {
|
||||||
width: 70px;
|
width: 70px;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
a.button.width81 {
|
||||||
|
width: 79px;
|
||||||
|
padding: 4px 0px;
|
||||||
|
text-align: center;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/* Footer */
|
/* Footer */
|
||||||
|
|
||||||
|
@ -1408,8 +1419,8 @@ div.desription-top input.name {
|
||||||
height: 21px;
|
height: 21px;
|
||||||
width: auto;
|
width: auto;
|
||||||
color: #575756;
|
color: #575756;
|
||||||
font-size: 12px;
|
font-size: 11px;
|
||||||
width: 215px;
|
width: 415px;
|
||||||
padding: 2px 5px 3px;
|
padding: 2px 5px 3px;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1585,6 +1596,10 @@ table td.width145 {
|
||||||
width: 145px;
|
width: 145px;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.width125 {
|
||||||
|
width: 125px;
|
||||||
|
}
|
||||||
|
|
||||||
table td.width30 {
|
table td.width30 {
|
||||||
width: 30px;
|
width: 30px;
|
||||||
}
|
}
|
||||||
|
@ -1936,6 +1951,13 @@ img.delete-row {
|
||||||
cursor: pointer;
|
cursor: pointer;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
table tbody tr.error td {
|
||||||
|
background: #e7bcbc;
|
||||||
|
}
|
||||||
|
|
||||||
|
table tbody tr.success td {
|
||||||
|
background: #e3edb7;
|
||||||
|
}
|
||||||
|
|
||||||
/* Create group */
|
/* Create group */
|
||||||
|
|
||||||
|
@ -2096,6 +2118,22 @@ article div.rightlist div.load {
|
||||||
padding: 5px 10px;
|
padding: 5px 10px;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.notify.blue {
|
||||||
|
border: 1px solid #a9c6dd;
|
||||||
|
background: #dcecfa;
|
||||||
|
border-radius: 1px;
|
||||||
|
width: 555px;
|
||||||
|
margin-top: 20px;
|
||||||
|
text-align: right;
|
||||||
|
padding: 5px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.notify.blue div.green {
|
||||||
|
border: 1px solid #bad099;
|
||||||
|
background: #d7e599;
|
||||||
|
float: left;
|
||||||
|
}
|
||||||
|
|
||||||
/* Pagination */
|
/* Pagination */
|
||||||
|
|
||||||
div.pagination em {
|
div.pagination em {
|
||||||
|
@ -2121,7 +2159,7 @@ div.pagination a {
|
||||||
/*404*/
|
/*404*/
|
||||||
|
|
||||||
article div.all.error404 {
|
article div.all.error404 {
|
||||||
background: url("../pics/404.png") no-repeat 59% 0;
|
background: url("../pics/404.png") no-repeat 49% 0;
|
||||||
height: 500px;
|
height: 500px;
|
||||||
text-align: center;
|
text-align: center;
|
||||||
}
|
}
|
||||||
|
@ -2163,6 +2201,98 @@ article div.all.error404 p.search {
|
||||||
width: 230px;
|
width: 230px;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*500*/
|
||||||
|
|
||||||
|
article div.all.error500 {
|
||||||
|
background: url("../pics/500.png") no-repeat 49% 0;
|
||||||
|
height: 500px;
|
||||||
|
text-align: center;
|
||||||
|
}
|
||||||
|
|
||||||
|
article div.all.error500 h1 {
|
||||||
|
margin: 0;
|
||||||
|
padding: 0;
|
||||||
|
margin-top: 135px;
|
||||||
|
font-size: 48px;
|
||||||
|
font-weight: normal;
|
||||||
|
}
|
||||||
|
|
||||||
|
article div.all.error500 h1 span {
|
||||||
|
color: #4496d0;
|
||||||
|
}
|
||||||
|
|
||||||
|
article div.all.error500 h2 {
|
||||||
|
margin: 0;
|
||||||
|
padding: 0;
|
||||||
|
margin-top: 5px;
|
||||||
|
font-size: 18px;
|
||||||
|
font-weight: normal;
|
||||||
|
text-align: left;
|
||||||
|
margin-left: 298px;
|
||||||
|
}
|
||||||
|
|
||||||
|
article div.all.error500 p {
|
||||||
|
margin: 0 auto;
|
||||||
|
padding: 0;
|
||||||
|
text-align: center;
|
||||||
|
font-size: 14px;
|
||||||
|
}
|
||||||
|
|
||||||
|
article div.all.error500 p.pages {
|
||||||
|
margin-top: 55px;
|
||||||
|
width: 280px;
|
||||||
|
}
|
||||||
|
|
||||||
|
article div.all.error500 p.search {
|
||||||
|
margin-top: 80px;
|
||||||
|
width: 230px;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*503*/
|
||||||
|
|
||||||
|
article div.all.error503 {
|
||||||
|
background: url("../pics/503.png") no-repeat 50% 0;
|
||||||
|
height: 500px;
|
||||||
|
text-align: center;
|
||||||
|
}
|
||||||
|
|
||||||
|
article div.all.error503 h1 {
|
||||||
|
margin: 0;
|
||||||
|
padding: 0;
|
||||||
|
margin-top: 395px;
|
||||||
|
font-size: 38px;
|
||||||
|
font-weight: normal;
|
||||||
|
text-align: center;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
article div.all.error503 h1 span {
|
||||||
|
color: #4496d0;
|
||||||
|
}
|
||||||
|
|
||||||
|
article div.all.error503 h2 {
|
||||||
|
margin: 0;
|
||||||
|
padding: 0;
|
||||||
|
margin-top: 25px;
|
||||||
|
font-size: 18px;
|
||||||
|
font-weight: normal;
|
||||||
|
text-align: left;
|
||||||
|
margin-left: 215px;
|
||||||
|
}
|
||||||
|
|
||||||
|
article div.all.error503 {
|
||||||
|
min-height: 630px;
|
||||||
|
}
|
||||||
|
|
||||||
|
article div.all.error503 h2 span {
|
||||||
|
color: #4496d0;
|
||||||
|
}
|
||||||
|
|
||||||
|
div.wrap.tmargin30 {
|
||||||
|
margin-top: 30px;
|
||||||
|
min-height: 91%;
|
||||||
|
}
|
||||||
|
|
||||||
/*search*/
|
/*search*/
|
||||||
|
|
||||||
input.button.width100 {
|
input.button.width100 {
|
||||||
|
@ -2201,6 +2331,10 @@ div.tmargin10 {
|
||||||
margin-top: 10px;
|
margin-top: 10px;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.tmargin10 {
|
||||||
|
margin-top: 10px;
|
||||||
|
}
|
||||||
|
|
||||||
a.lmargin7 {
|
a.lmargin7 {
|
||||||
margin-left: 7px;
|
margin-left: 7px;
|
||||||
}
|
}
|
||||||
|
@ -2208,3 +2342,25 @@ a.lmargin7 {
|
||||||
a.lmargin5 {
|
a.lmargin5 {
|
||||||
margin-left: 5px;
|
margin-left: 5px;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*My projects*/
|
||||||
|
|
||||||
|
table.tablesorter tr.search td {
|
||||||
|
background: #dcecfa;
|
||||||
|
}
|
||||||
|
|
||||||
|
table.tablesorter tr.search td input[type="text"] {
|
||||||
|
height: 16px;
|
||||||
|
width: 830px;
|
||||||
|
border: 1px solid #cdcdcd;
|
||||||
|
border-radius: 4px;
|
||||||
|
padding: 5px;
|
||||||
|
font-family: Tahoma, Geneva, Helvetica, sans-serif;
|
||||||
|
font-size: 12px;
|
||||||
|
margin-top: 2px;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
table.tablesorter.width565 {
|
||||||
|
width: 565px;
|
||||||
|
}
|
||||||
|
|
|
@ -0,0 +1,25 @@
|
||||||
|
require 'highline/import'
|
||||||
|
require 'open-uri'
|
||||||
|
|
||||||
|
namespace :build do
|
||||||
|
desc "Build projects from list"
|
||||||
|
task :projects => :environment do
|
||||||
|
source = ENV['SOURCE'] || 'http://dl.dropbox.com/u/984976/rebuild_list.txt'
|
||||||
|
owner = User.find_by_uname!(ENV['OWNER'] || 'warpc')
|
||||||
|
platform = Platform.find_by_name!(ENV['PLATFORM'] || 'rosa2012lts')
|
||||||
|
arch = Arch.find_by_name!(ENV['ARCH'] || 'i586')
|
||||||
|
|
||||||
|
say "START build projects from #{source} for platform=#{platform.name}, owner=#{owner.uname}, arch=#{arch.name}"
|
||||||
|
open(source).readlines.each do |name|
|
||||||
|
name.chomp!; name.strip! #; name.downcase!
|
||||||
|
if p = Project.joins(:repositories).where('repositories.id IN (?)', platform.repositories).find_by_name(name)
|
||||||
|
p.build_for(platform, owner, arch)
|
||||||
|
say "== Build #{p.name} =="
|
||||||
|
else
|
||||||
|
say "== Not found #{name} =="
|
||||||
|
end
|
||||||
|
sleep 0.2
|
||||||
|
end
|
||||||
|
say 'DONE'
|
||||||
|
end
|
||||||
|
end
|
|
@ -6,10 +6,11 @@ namespace :hook do
|
||||||
hook = File.join(::Rails.root.to_s, 'tmp', "post-receive-hook")
|
hook = File.join(::Rails.root.to_s, 'tmp', "post-receive-hook")
|
||||||
FileUtils.cp(File.join(::Rails.root.to_s, 'bin', "post-receive-hook.partial"), hook)
|
FileUtils.cp(File.join(::Rails.root.to_s, 'bin', "post-receive-hook.partial"), hook)
|
||||||
File.open(hook, 'a') do |f|
|
File.open(hook, 'a') do |f|
|
||||||
s = "\n /bin/bash -l -c \"cd #{is_production ? '/srv/rosa_build/current' : Rails.root.to_s} && #{is_production ? 'RAILS_ENV=production' : ''} bundle exec rails runner 'Project.delay.process_hook(\"$owner\", \"$reponame\", \"$newrev\", \"$oldrev\", \"$ref\", \"$newrev_type\", \"$oldrev_type\")'\""
|
s = "\n /bin/bash -l -c \"cd #{is_production ? '/srv/rosa_build/current' : Rails.root.to_s} && #{is_production ? 'RAILS_ENV=production' : ''} bundle exec rails runner 'Project.delay.process_hook(\\\"$owner\\\", \\\"$reponame\\\", \\\"$newrev\\\", \\\"$oldrev\\\", \\\"$ref\\\", \\\"$newrev_type\\\", \\\"$oldrev_type\\\")'\""
|
||||||
s << " > /dev/null 2>&1" if is_production
|
s << " > /dev/null 2>&1" if is_production
|
||||||
s << "\ndone\n"
|
s << "\ndone\n"
|
||||||
f.write(s)
|
f.write(s)
|
||||||
|
f.chmod(0755)
|
||||||
end
|
end
|
||||||
|
|
||||||
say "Install process.."
|
say "Install process.."
|
||||||
|
|
|
@ -77,7 +77,7 @@ describe ProjectsController do
|
||||||
|
|
||||||
it_should_behave_like 'projects user with reader rights'
|
it_should_behave_like 'projects user with reader rights'
|
||||||
|
|
||||||
it 'should be able to perform show action' do
|
pending 'should be able to perform show action' do
|
||||||
get :show, :id => @project.id
|
get :show, :id => @project.id
|
||||||
response.should render_template(:show)
|
response.should render_template(:show)
|
||||||
end
|
end
|
||||||
|
@ -103,7 +103,7 @@ describe ProjectsController do
|
||||||
set_session_for(@admin)
|
set_session_for(@admin)
|
||||||
end
|
end
|
||||||
|
|
||||||
it 'should return projects in right order' do
|
pending 'should return projects in right order' do
|
||||||
get :index, :query => 'per'
|
get :index, :query => 'per'
|
||||||
assigns(:projects).should eq([@project2, @project1])
|
assigns(:projects).should eq([@project2, @project1])
|
||||||
end
|
end
|
||||||
|
|
|
@ -84,7 +84,7 @@ table.tablesorter .th2 {
|
||||||
|
|
||||||
table.tablesorter .th3 {
|
table.tablesorter .th3 {
|
||||||
width: 110px;
|
width: 110px;
|
||||||
padding-left: 17px;
|
// padding-left: 17px;
|
||||||
}
|
}
|
||||||
|
|
||||||
table.tablesorter .td2 {
|
table.tablesorter .td2 {
|
||||||
|
|
Loading…
Reference in New Issue