[issue #279] Merge branch '3.2-master' into 279-new_design_for_platforms
Conflicts: app/assets/stylesheets/design/custom.scss
This commit is contained in:
commit
ddc95c25fb
|
@ -463,6 +463,31 @@ table.tablesorter tr td.buttons a span.delete {
|
|||
|
||||
#fork-and-edit {display:block;}
|
||||
|
||||
.notify.blue div.success {
|
||||
border: 1px solid #bad099;
|
||||
background: #d7e599;
|
||||
float: left;
|
||||
}
|
||||
|
||||
div.notify.blue div.error {
|
||||
float: left;
|
||||
border: 1px solid #ddd;
|
||||
background-color: #FBE3E4;
|
||||
border-color: #FBC2C4;
|
||||
}
|
||||
|
||||
div.notify.blue div.nocolor {
|
||||
float: left;
|
||||
border: 1px solid #a9c6dd;
|
||||
}
|
||||
|
||||
div.notify.blue div.red {
|
||||
float: left;
|
||||
border: 1px solid #ddd;
|
||||
background-color: #FBE3E4;
|
||||
border-color: #FBC2C4;
|
||||
}
|
||||
|
||||
a.button.left_floated {
|
||||
display: inline-block;
|
||||
float: left;
|
||||
|
@ -590,3 +615,7 @@ div.right.bigpadding div.command_select div.rightlist textarea {
|
|||
width: 430px;
|
||||
height: 50px;
|
||||
}
|
||||
|
||||
div.rightlist textarea.resizable {
|
||||
resize: both;
|
||||
}
|
||||
|
|
|
@ -440,7 +440,7 @@ article a.button {
|
|||
background-image: linear-gradient(top, #68a3d8, #125687);
|
||||
filter: progid:DXImageTransform.Microsoft.gradient(startColorStr='#68a3d8', EndColorStr='#125687');
|
||||
border: 1px solid #5084b4;
|
||||
padding: 4px 20px;
|
||||
padding: 4px 20px 6px;
|
||||
margin: 0;
|
||||
font-size: 12px;
|
||||
text-decoration: none;
|
||||
|
@ -509,7 +509,7 @@ article input[type="submit"] {
|
|||
background-image: linear-gradient(top, #68a3d8, #125687);
|
||||
filter: progid:DXImageTransform.Microsoft.gradient(startColorStr='#68a3d8', EndColorStr='#125687');
|
||||
border: 1px solid #5084b4;
|
||||
padding: 0px 20px 0px;
|
||||
padding: 3px 20px 5px;
|
||||
margin: 0;
|
||||
font-size: 12px;
|
||||
text-decoration: none;
|
||||
|
@ -519,7 +519,6 @@ article input[type="submit"] {
|
|||
border-radius: 5px;
|
||||
text-align: center;
|
||||
height: auto;
|
||||
height: 28px;
|
||||
width: auto;
|
||||
font-family: Tahoma;
|
||||
}
|
||||
|
@ -1590,6 +1589,10 @@ table td.width145 {
|
|||
width: 145px;
|
||||
}
|
||||
|
||||
.width125 {
|
||||
width: 125px;
|
||||
}
|
||||
|
||||
table td.width30 {
|
||||
width: 30px;
|
||||
}
|
||||
|
@ -1949,6 +1952,14 @@ table tbody tr.success td {
|
|||
background: #e3edb7;
|
||||
}
|
||||
|
||||
table.tablesorter.width565 {
|
||||
width: 565px;
|
||||
}
|
||||
|
||||
table.tablesorter thead th {
|
||||
padding-left: 5px;
|
||||
}
|
||||
|
||||
/* Create group */
|
||||
|
||||
div.right-error {
|
||||
|
@ -2108,6 +2119,22 @@ article div.rightlist div.load {
|
|||
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 */
|
||||
|
||||
div.pagination em {
|
||||
|
@ -2212,3 +2239,9 @@ div.width400.rmargin55 {
|
|||
div.tmargin10 {
|
||||
margin-top: 10px;
|
||||
}
|
||||
|
||||
/*My projects*/
|
||||
|
||||
article h3 a {
|
||||
font-size: 14px;
|
||||
}
|
||||
|
|
|
@ -2,6 +2,10 @@ class ActivityFeedsController < ApplicationController
|
|||
before_filter :authenticate_user!
|
||||
|
||||
def index
|
||||
@activity_feeds = current_user.activity_feeds.order('created_at DESC').limit(10)
|
||||
@filter = t('feed_menu').has_key?(params[:filter].try(:to_sym)) ? params[:filter].to_sym : :all
|
||||
@activity_feeds = current_user.activity_feeds
|
||||
@activity_feeds = @activity_feeds.where(:kind => "ActivityFeed::#{@filter.upcase}".constantize) unless @filter == :all
|
||||
|
||||
@activity_feeds = @activity_feeds.paginate :page => params[:page]
|
||||
end
|
||||
end
|
||||
|
|
|
@ -1,13 +1,24 @@
|
|||
# -*- encoding : utf-8 -*-
|
||||
module BuildListsHelper
|
||||
|
||||
def build_list_status(build_list)
|
||||
if [BuildList::BUILD_PUBLISHED, BuildServer::SUCCESS].include? build_list.status
|
||||
"success"
|
||||
elsif [BuildServer::BUILD_ERROR, BuildServer::PLATFORM_NOT_FOUND, BuildServer::PROJECT_NOT_FOUND,
|
||||
BuildServer::PROJECT_VERSION_NOT_FOUND, BuildList::FAILED_PUBLISH].include? build_list.status
|
||||
"error"
|
||||
def build_list_status_color(status)
|
||||
if [BuildList::BUILD_PUBLISHED, BuildServer::SUCCESS].include? status
|
||||
return 'success'
|
||||
end
|
||||
if [BuildServer::BUILD_ERROR, BuildServer::PLATFORM_NOT_FOUND,
|
||||
BuildServer::PROJECT_NOT_FOUND,BuildServer::PROJECT_VERSION_NOT_FOUND, BuildList::FAILED_PUBLISH].include? status
|
||||
return 'error'
|
||||
end
|
||||
|
||||
'nocolor'
|
||||
end
|
||||
|
||||
def build_list_item_status_color(status)
|
||||
if BuildServer::SUCCESS == status
|
||||
return 'success'
|
||||
end
|
||||
if [BuildServer::DEPENDENCIES_ERROR, BuildServer::BUILD_ERROR, BuildList::Item::GIT_ERROR].include? status
|
||||
return 'error'
|
||||
end
|
||||
|
||||
''
|
||||
end
|
||||
end
|
|
@ -33,7 +33,7 @@ module CommitHelper
|
|||
end
|
||||
|
||||
def shortest_hash_id(id)
|
||||
id[0..8]
|
||||
id[0..9]
|
||||
end
|
||||
|
||||
def short_commit_message(message)
|
||||
|
|
|
@ -1,9 +1,19 @@
|
|||
class ActivityFeed < ActiveRecord::Base
|
||||
belongs_to :user
|
||||
|
||||
CODE = ['git_delete_branch_notification', 'git_new_push_notification', 'new_comment_commit_notification']
|
||||
TRACKER = ['issue_assign_notification', 'new_comment_notification', 'new_issue_notification']
|
||||
BUILD = ['build_list_notification']
|
||||
WIKI = ['wiki_new_commit_notification']
|
||||
|
||||
belongs_to :user
|
||||
serialize :data
|
||||
|
||||
default_scope order('created_at DESC')
|
||||
|
||||
self.per_page = 10
|
||||
|
||||
def partial
|
||||
'activity_feeds/partials/' + self.kind
|
||||
end
|
||||
|
||||
end
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
class ActivityFeedObserver < ActiveRecord::Observer
|
||||
observe :issue, :comment, :user
|
||||
observe :issue, :comment, :user, :build_list
|
||||
|
||||
def after_create(record)
|
||||
case record.class.to_s
|
||||
|
@ -128,6 +128,21 @@ class ActivityFeedObserver < ActiveRecord::Observer
|
|||
:project_id => record.project.id, :project_name => record.project.name, :project_owner => record.project.owner.uname}
|
||||
)
|
||||
end
|
||||
|
||||
when 'BuildList'
|
||||
if [BuildList::BUILD_PUBLISHED, BuildServer::SUCCESS, BuildServer::BUILD_ERROR, BuildServer::PLATFORM_NOT_FOUND,
|
||||
BuildServer::PROJECT_NOT_FOUND, BuildServer::PROJECT_VERSION_NOT_FOUND, BuildList::FAILED_PUBLISH].include? record.status or
|
||||
(record.status == BuildList::BUILD_PENDING && record.bs_id_changed?)
|
||||
record.project.owner_and_admin_ids.each do |recipient|
|
||||
ActivityFeed.create(
|
||||
:user => User.find(recipient),
|
||||
:kind => 'build_list_notification',
|
||||
:data => {:task_num => record.bs_id, :build_list_id => record.id, :status => record.status, :notified_at => record.notified_at,
|
||||
:project_id => record.project_id, :project_name => record.project.name, :project_owner => record.project.owner.uname,
|
||||
:user_name => record.user.name, :user_email => record.user.email, :user_id => record.user_id}
|
||||
)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
|
|
|
@ -262,7 +262,7 @@ class Project < ActiveRecord::Base
|
|||
end
|
||||
|
||||
def write_hook
|
||||
is_production = ENV['RAILS_ENV'] == 'production'
|
||||
is_production = Rails.env == "production"
|
||||
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)
|
||||
File.open(hook, 'a') do |f|
|
||||
|
|
|
@ -0,0 +1,5 @@
|
|||
.sub-menu
|
||||
%nav
|
||||
%ul
|
||||
- (collection = t 'feed_menu').each do |base, title|
|
||||
%li= link_to title, activity_feeds_path(:filter => base), :class => @filter == base ? 'active' : ''
|
|
@ -2,5 +2,9 @@
|
|||
- @activity_feeds.each do |activity_feed|
|
||||
.activity
|
||||
= render_activity_feed(activity_feed)
|
||||
- if @activity_feeds.next_page
|
||||
%a{:href => activity_feeds_path({:filter => @filter, :page => @activity_feeds.next_page})}
|
||||
.messages.messages-last=t('layout.activity_feed.load_messages')
|
||||
|
||||
- content_for :sidebar, render('sidebar')
|
||||
- content_for :feed_tabs, render('feed_tabs')
|
||||
|
|
|
@ -0,0 +1,19 @@
|
|||
.top
|
||||
.image
|
||||
= image_tag(avatar_url_by_email(user_email, :small), :alt => 'avatar')
|
||||
.text
|
||||
%span
|
||||
= raw t('notifications.bodies.build_task', :task_num => task_num, :task_link => build_list_path(build_list_id))
|
||||
= raw t('notifications.bodies.project', :project_link => link_to("#{project_owner}/#{project_name}", project_path(project_id)) )
|
||||
- message, error = case status
|
||||
- when BuildList::BUILD_PENDING
|
||||
- ['pending', nil]
|
||||
- when BuildList::BUILD_PUBLISHED
|
||||
- ['published', nil]
|
||||
- when BuildServer::SUCCESS
|
||||
- ['success', nil]
|
||||
- else ['failed', t("layout.build_lists.statuses.#{BuildList::HUMAN_STATUSES[status]}")]
|
||||
= raw t("notifications.bodies.build_status.#{message}", :error => error)
|
||||
.both
|
||||
%span.date= notified_at
|
||||
.both
|
|
@ -11,6 +11,6 @@
|
|||
.both
|
||||
%span.subject
|
||||
- last_commits.each do |commit|
|
||||
= link_to commit[0], commit_path(project_id, commit[0])
|
||||
= link_to shortest_hash_id(commit[0]), commit_path(project_id, commit[0])
|
||||
= commit[1]
|
||||
%br
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
%tr{:id => "row#{build_list_counter}", :class => "#{build_list_status(build_list)}"}
|
||||
%tr{:id => "row#{build_list_counter}", :class => "#{build_list_status_color(build_list.status)}"}
|
||||
%td= link_to (build_list.bs_id.present? ? build_list.bs_id : t("layout.build_lists.bs_id_not_set")), build_list
|
||||
%td= build_list.human_status
|
||||
%td= link_to build_list.project.name, build_list.project
|
||||
|
|
|
@ -1,4 +1,8 @@
|
|||
- content_for :submenu do
|
||||
- if @build_list
|
||||
.left
|
||||
= @build_list.project.name
|
||||
- else
|
||||
- if content_for?(:sidebar)
|
||||
.left
|
||||
%nav
|
||||
|
|
|
@ -1,81 +1,78 @@
|
|||
%table.columns2.info
|
||||
%tr
|
||||
%td.first= t("activerecord.attributes.build_list.name")
|
||||
%td= @build_list.present? ? @build_list.name : t("layout.build_lists.name_not_yet_defined")
|
||||
%tr
|
||||
%td= t("activerecord.attributes.build_list.bs_id")
|
||||
%td= @build_list.bs_id
|
||||
%tr
|
||||
%td= t("activerecord.attributes.build_list.container_path")
|
||||
%td
|
||||
.notify.blue
|
||||
%div{:class => build_list_status_color(@build_list.status)}
|
||||
%p= @build_list.human_status
|
||||
%p 2012-01-27 17:28:05 UTC
|
||||
.both
|
||||
%h3= t("layout.build_lists.main_data")
|
||||
.leftside.width125= t("activerecord.attributes.build_list.container_path")
|
||||
.leftside
|
||||
- if @build_list.status == BuildList::BUILD_PUBLISHED
|
||||
= t("layout.build_lists.container_published")
|
||||
- elsif @build_list.container_path.present?
|
||||
- container_url = "http://#{request.host_with_port}/downloads#{@build_list.container_path}"
|
||||
= link_to container_url, container_url
|
||||
%tr
|
||||
%td= t("activerecord.attributes.build_list.bpl")
|
||||
%td= link_to @build_list.bpl.name, @build_list.bpl
|
||||
%tr
|
||||
%td= t("activerecord.attributes.build_list.pl")
|
||||
%td= link_to @build_list.pl.name, @build_list.pl
|
||||
%tr
|
||||
%td= t("activerecord.attributes.build_list.include_repos")
|
||||
%td= (@build_list.include_repos||[]).map{|r| Repository.find(r).name}.join(', ')
|
||||
%tr
|
||||
%td= t("activerecord.attributes.build_list.update_type")
|
||||
%td= @build_list.update_type
|
||||
%tr
|
||||
%td= t("activerecord.attributes.build_list.build_requires")
|
||||
%td= @build_list.build_requires
|
||||
%tr
|
||||
%td= t("activerecord.attributes.build_list.auto_publish")
|
||||
%td= @build_list.auto_publish
|
||||
%tr
|
||||
%td= t("activerecord.attributes.build_list.status")
|
||||
%td= @build_list.human_status
|
||||
%tr
|
||||
%td= t("activerecord.attributes.build_list.project")
|
||||
%td= link_to @build_list.project.name, project_path(@build_list.project)
|
||||
%tr
|
||||
%td= t("activerecord.attributes.build_list.project_version")
|
||||
%td= @build_list.project_version
|
||||
%tr
|
||||
%td= t("activerecord.attributes.build_list.arch")
|
||||
%td= @build_list.arch.name
|
||||
%tr
|
||||
%td= t("activerecord.attributes.build_list.user")
|
||||
%td= link_to @build_list.user.try(:fullname), @build_list.user
|
||||
%tr
|
||||
%td= t("activerecord.attributes.build_list.notified_at")
|
||||
%td= @build_list.notified_at
|
||||
%tr
|
||||
%td= t("activerecord.attributes.build_list.is_circle")
|
||||
%td= t("layout.#{@build_list.is_circle?}_")
|
||||
|
||||
%br
|
||||
%br
|
||||
|
||||
= link_to t("layout.publish"), publish_build_list_path(@build_list), :method => "put", :confirm => t("layout.confirm"), :class => "button" if @build_list.can_publish? and can?(:publish, @build_list)
|
||||
|
||||
%br
|
||||
%br
|
||||
|
||||
%h2= t("layout.build_lists.items_header")
|
||||
= t("layout.build_lists.no_items_data") if @item_groups.blank?
|
||||
|
||||
.both
|
||||
.leftside.width125= t("activerecord.attributes.build_list.user")
|
||||
.leftside
|
||||
= link_to @build_list.user.try(:fullname), @build_list.user
|
||||
.both
|
||||
= link_to t("layout.publish"), publish_build_list_path(@build_list), :method => "put", :confirm => t("layout.confirm"), :class => "button tmargin10" if @build_list.can_publish? and can?(:publish, @build_list)
|
||||
.hr
|
||||
%h3= t("layout.build_lists.main_data")
|
||||
.leftside.width125= t("activerecord.attributes.build_list.bpl")
|
||||
.leftside
|
||||
= link_to @build_list.bpl.name, @build_list.bpl
|
||||
.both
|
||||
.leftside.width125= t("activerecord.attributes.build_list.pl")
|
||||
.leftside
|
||||
= link_to @build_list.pl.name, @build_list.pl
|
||||
.both
|
||||
.leftside.width125= t("activerecord.attributes.build_list.include_repos")
|
||||
.leftside= (@build_list.include_repos||[]).map{|r| Repository.find(r).name}.join(', ')
|
||||
.both
|
||||
.leftside.width125= t("activerecord.attributes.build_list.update_type")
|
||||
.leftside= @build_list.update_type
|
||||
.both
|
||||
.leftside.width125= t("activerecord.attributes.build_list.build_requires")
|
||||
.leftside= @build_list.build_requires
|
||||
.both
|
||||
.leftside.width125= t("activerecord.attributes.build_list.auto_publish")
|
||||
.leftside= @build_list.auto_publish
|
||||
.both
|
||||
.leftside.width125= t("activerecord.attributes.build_list.project_version")
|
||||
.leftside= @build_list.project_version
|
||||
.both
|
||||
.leftside.width125= t("activerecord.attributes.build_list.arch")
|
||||
.leftside= @build_list.arch.name
|
||||
.both
|
||||
.leftside.width125= t("activerecord.attributes.build_list.notified_at")
|
||||
.leftside= @build_list.notified_at
|
||||
.both
|
||||
.leftside.width125= t("activerecord.attributes.build_list.is_circle")
|
||||
.leftside= t("layout.#{@build_list.is_circle?}_")
|
||||
.both
|
||||
.hr
|
||||
%h3= t("layout.build_lists.items_header")
|
||||
- if @item_groups.blank?
|
||||
%h4.nomargin= t("layout.build_lists.no_items_data")
|
||||
- @item_groups.each_with_index do |group, level|
|
||||
%h3.title Level ##{level}
|
||||
%table.columns3.info
|
||||
%tr
|
||||
%th.first= t("activerecord.attributes.build_list/item.name")
|
||||
%th= t("activerecord.attributes.build_list/item.version")
|
||||
%th.last= t("activerecord.attributes.build_list/item.status")
|
||||
|
||||
-#%h4.nomargin= "#{group} ##{level}"
|
||||
- group.each do |item|
|
||||
%tr{:class => cycle("odd", "even")}
|
||||
%h4.nomargin= "#{item.name} ##{level}"
|
||||
%table.tablesorter.width565{:cellpadding => "0", :cellspacing => "0"}
|
||||
%thead
|
||||
%tr
|
||||
%th= t("activerecord.attributes.build_list/item.name")
|
||||
%th= t("activerecord.attributes.build_list/item.version")
|
||||
%th= t("activerecord.attributes.build_list/item.status")
|
||||
%tbody
|
||||
%tr{:class => build_list_item_status_color(item.status)}
|
||||
%td= item.name
|
||||
%td= item.version
|
||||
%td= item.human_status
|
||||
.both
|
||||
|
||||
:javascript
|
||||
$('article .all').addClass('bigpadding');
|
||||
|
||||
= render 'build_lists/submenu'
|
||||
|
|
|
@ -21,11 +21,11 @@
|
|||
.both
|
||||
.left=t('activerecord.attributes.user.password')
|
||||
.right
|
||||
= f.text_field :password, :id => 'password', :class => "registartion-input #{password_error ? 'registartion-input-error' : ''}"
|
||||
= f.password_field :password, :id => 'password', :class => "registartion-input #{password_error ? 'registartion-input-error' : ''}"
|
||||
.both
|
||||
.left=t('activerecord.attributes.user.password_confirm')
|
||||
.right
|
||||
= f.text_field :password_confirmation, :id => 'password2', :class => "registartion-input #{password_error ? 'registartion-input-error' : ''}"
|
||||
= f.password_field :password_confirmation, :id => 'password2', :class => "registartion-input #{password_error ? 'registartion-input-error' : ''}"
|
||||
.both
|
||||
.in
|
||||
=f.submit t("layout.devise.shared_links.sign_up"), :class => 'button', :id => 'btnLogin'
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
-content_for :sidebar do
|
||||
- can_manage = can? :write, @issue.project
|
||||
- can_manage = can?(:update, @issue) && @issue.persisted? || @issue.new_record?
|
||||
- if @issue.persisted?
|
||||
.bordered.nopadding
|
||||
%h3=t('activerecord.attributes.issue.status')
|
||||
|
@ -22,7 +22,7 @@
|
|||
.name="#{@issue.user.uname} (#{@issue.user.name})"
|
||||
=hidden_field_tag "user-0", @issue.user.id, :name => 'issue[user_id]'
|
||||
.both
|
||||
- else
|
||||
- elsif @issue.user
|
||||
.people.nopointer
|
||||
.avatar=image_tag avatar_url(@issue.user), :alt => 'avatar'
|
||||
.name="#{@issue.user.uname} (#{@issue.user.name})"
|
||||
|
|
|
@ -16,7 +16,7 @@
|
|||
.fulltext.view.issue_body=@issue.body
|
||||
.both
|
||||
%br
|
||||
- if can? :write, @issue.project
|
||||
- if can? :update, @issue
|
||||
=link_to t('layout.edit'), '#', :id => 'edit_issue_content', :class => 'button'
|
||||
=form_for :issue, :url => [@project, @issue], :method => :put, :html => { :class => 'edit_form issue', :style => 'display:none;' } do |f|
|
||||
.leftlist= t('activerecord.attributes.issue.title') + ':'
|
||||
|
|
|
@ -37,6 +37,8 @@
|
|||
.sub-menu= yield :submenu
|
||||
.both
|
||||
= render "layouts/flashes"
|
||||
- if content_for?(:feed_tabs)
|
||||
= yield :feed_tabs
|
||||
%article
|
||||
- if content_for?(:sidebar)
|
||||
%aside= yield :sidebar
|
||||
|
|
|
@ -3,23 +3,23 @@
|
|||
.both
|
||||
|
||||
.leftlist= f.label :description, t("activerecord.attributes.product.description"), :class => :label
|
||||
.rightlist= f.text_area :description, :class => 'text_field', :cols => 80
|
||||
.rightlist= f.text_area :description, :class => 'text_field resizable', :cols => 80
|
||||
.both
|
||||
|
||||
.leftlist= f.label :build_script, t("activerecord.attributes.product.build_script"), :class => :label
|
||||
.rightlist= f.text_area :build_script, :class => 'text_field', :cols => 80
|
||||
.rightlist= f.text_area :build_script, :class => 'text_field resizable', :cols => 80
|
||||
.both
|
||||
|
||||
.leftlist= f.label :counter, t("activerecord.attributes.product.counter"), :class => :label
|
||||
.rightlist= f.text_area :counter, :class => 'text_field', :cols => 80
|
||||
.rightlist= f.text_area :counter, :class => 'text_field resizable', :cols => 80
|
||||
.both
|
||||
|
||||
.leftlist= f.label :ks, t("activerecord.attributes.product.ks"), :class => :label
|
||||
.rightlist= f.text_area :ks, :class => 'text_field', :cols => 80
|
||||
.rightlist= f.text_area :ks, :class => 'text_field resizable', :cols => 80
|
||||
.both
|
||||
|
||||
.leftlist= f.label :menu, t("activerecord.attributes.product.menu"), :class => :label
|
||||
.rightlist= f.text_area :menu, :class => 'text_field', :cols => 80
|
||||
.rightlist= f.text_area :menu, :class => 'text_field resizable', :cols => 80
|
||||
.both
|
||||
|
||||
%p
|
||||
|
|
|
@ -27,5 +27,11 @@ en:
|
|||
wiki: Wiki
|
||||
readme: Readme
|
||||
settings: Settings
|
||||
feed_menu:
|
||||
all: All
|
||||
code: Code
|
||||
tracker: Tracker
|
||||
build: Build
|
||||
wiki: Wiki
|
||||
platform_menu:
|
||||
settings: Settings
|
||||
|
|
|
@ -27,5 +27,11 @@ ru:
|
|||
wiki: Wiki
|
||||
readme: Readme
|
||||
settings: Настройки
|
||||
feed_menu:
|
||||
all: Все
|
||||
code: Код
|
||||
tracker: Трекер
|
||||
build: Сборка
|
||||
wiki: Вики
|
||||
platform_menu:
|
||||
settings: Настройки
|
||||
|
|
|
@ -7,6 +7,7 @@ en:
|
|||
all_my_builds: All my builds
|
||||
my_builds_by_day: My today builds
|
||||
new_project: Create project
|
||||
load_messages: Load messages
|
||||
|
||||
notifications:
|
||||
subjects:
|
||||
|
@ -23,7 +24,6 @@ en:
|
|||
content: in issue %{issue_link}
|
||||
commit_content: in commit %{commit_link}
|
||||
new_issue_notification: '%{user_link} has been added a new <a href="%{issue_link}">issue</a>'
|
||||
ussue: issue
|
||||
new_user_notification:
|
||||
title: Hello, %{user_name}.
|
||||
content: You have been sign up to project «ROSA Build System» and now can sign in.
|
||||
|
@ -33,7 +33,12 @@ en:
|
|||
wiki_new_commit_notification: '%{user_link} has been updated %{history_link}'
|
||||
invite_approve_notification: Invite to ABF
|
||||
project: in project %{project_link}
|
||||
|
||||
delete_branch: Branch %{branch_name} has been deleted
|
||||
create_branch: '%{user_link} has been created a new branch %{branch_name}'
|
||||
update_branch: '%{user_link} has been pushed to branch %{branch_name}'
|
||||
build_task: 'Build <a href="%{task_link}">task #%{task_num}</a>'
|
||||
build_status:
|
||||
published: published successfully
|
||||
success: complete successfully
|
||||
failed: complete with error "%{error}"
|
||||
pending: build waiting
|
||||
|
|
|
@ -7,6 +7,7 @@ ru:
|
|||
all_my_builds: Все мои сборки
|
||||
my_builds_by_day: Мои сборки за день
|
||||
new_project: Создать проект
|
||||
load_messages: Загрузить сообщения
|
||||
|
||||
notifications:
|
||||
subjects:
|
||||
|
@ -16,14 +17,14 @@ ru:
|
|||
new_user_notification: Регистрация на проекте «%{ project_name }»
|
||||
issue_assign_notification: Вам назначили задачу
|
||||
invite_approve_notification: Приглашение в ABF
|
||||
build_task: Сборочное задание
|
||||
|
||||
bodies:
|
||||
new_comment_notification:
|
||||
title: '%{user_link} добавил новый комментарий'
|
||||
content: в задаче %{issue_link}
|
||||
commit_content: в коммите %{commit_link}
|
||||
content: к задаче %{issue_link}
|
||||
commit_content: к коммиту %{commit_link}
|
||||
new_issue_notification: '%{user_link} добавил новую <a href="%{issue_link}">задачу</a>'
|
||||
issue: задачу
|
||||
new_user_notification:
|
||||
title: Здравствуйте, %{user_name}.
|
||||
content: Вы зарегистрированы на проекте «ROSA Build System» и теперь можете войти в систему.
|
||||
|
@ -37,3 +38,9 @@ ru:
|
|||
delete_branch: Удалена ветка %{branch_name}
|
||||
create_branch: '%{user_link} создал новую ветку %{branch_name}'
|
||||
update_branch: '%{user_link} внес изменения в ветку %{branch_name}'
|
||||
build_task: 'Сборочное <a href="%{task_link}">задание №%{task_num}</a>'
|
||||
build_status:
|
||||
published: успешно опубликовано
|
||||
success: успешно собрано
|
||||
failed: завершилось с ошибкой "%{error}"
|
||||
pending: ожидает сборки
|
||||
|
|
|
@ -58,6 +58,7 @@ en:
|
|||
container_published: 'Container in a repository'
|
||||
action: Action
|
||||
new_header: New build
|
||||
main_data: Main data
|
||||
|
||||
ownership:
|
||||
header: Build list ownership
|
||||
|
|
|
@ -58,6 +58,7 @@ ru:
|
|||
container_published: 'Контейнер размещен в репозитории'
|
||||
action: Действие
|
||||
new_header: Новая сборка
|
||||
main_data: Основные данные
|
||||
|
||||
ownership:
|
||||
header: Принадлежность заданий
|
||||
|
|
|
@ -0,0 +1,204 @@
|
|||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
|
||||
<title>Сборочная среда</title>
|
||||
<script type="text/javascript" src="js/html5shiv.js"></script>
|
||||
<link rel="stylesheet" type="text/css" href="styles/main.css" />
|
||||
<link rel="stylesheet" type="text/css" href="styles/blue/style.css" />
|
||||
<script type="text/javascript" src="js/jquery-1.7.1.min.js"></script>
|
||||
<script type="text/javascript" src="js/all.js"></script>
|
||||
</head>
|
||||
<body>
|
||||
<div class="wrap">
|
||||
<!--Top block-->
|
||||
<header>
|
||||
<div class="left">
|
||||
</div>
|
||||
<div class="middle">
|
||||
<!--Main menu-->
|
||||
<menu>
|
||||
<ul>
|
||||
<li>
|
||||
<a href="#" class="first">Главная</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="#">Проекты</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="#">Группы</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="#" class="active">Мониторинг</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="#">Платформа</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="#">Документация</a>
|
||||
</li>
|
||||
</ul>
|
||||
<div class="logo">
|
||||
<img src="pics/logo-mini.png" alt="logo" />
|
||||
</div>
|
||||
</menu>
|
||||
<div class="information">
|
||||
<!--Search-->
|
||||
<div class="search">
|
||||
<div class="pic">
|
||||
</div>
|
||||
<div class="field">
|
||||
<input type="text" value="Поиск" class="gray" onClick="if(this.value=='Поиск'){this.value='';this.className='black';}" onblur="if(this.value==''){this.value='Поиск';this.className='gray';}" />
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="user">
|
||||
<div class="avatar" onclick="droplist();">
|
||||
<img src="pics/ava.png" alt="avatar" height="30" />
|
||||
</div>
|
||||
<div class="profile" onclick="droplist();">
|
||||
<a href="#" onclick="droplist();">mikimaus <img src="pics/expand-white.png" alt="ex" /></a>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="both">
|
||||
</div>
|
||||
|
||||
<div class="droplist-wrap">
|
||||
<div class="droplist" id="droplist">
|
||||
<div class="a"><a href="#">Публичный профиль</a></div>
|
||||
<div class="a"><a href="#">Настройки</a></div>
|
||||
<div class="a"><a href="#">Выйти</a></div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
</div>
|
||||
<div class="right">
|
||||
</div>
|
||||
<div class="both">
|
||||
</div>
|
||||
</header>
|
||||
|
||||
<!--Submenu-->
|
||||
<div class="sub-menu">
|
||||
<div class="left">
|
||||
libreoffice
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="both">
|
||||
</div>
|
||||
|
||||
<!--Page-->
|
||||
<article>
|
||||
<!--Single page content-->
|
||||
<div class="all bigpadding">
|
||||
|
||||
<div class="notify blue">
|
||||
<div class="green">
|
||||
<p>Build published</p>
|
||||
</div>
|
||||
<p>2012-01-27 17:28:05 UTC</p><div class="both"></div>
|
||||
</div>
|
||||
|
||||
<h3>Основные данные</h3>
|
||||
<div class="leftside width125">Container path</div>
|
||||
<div class="leftside"><a href="#">http://dev-abf.rosalab.ru/downloads/warpc_personal/container/libreoffice-4600</a></div>
|
||||
<div class="both"></div>
|
||||
<div class="leftside width125">User</div>
|
||||
<div class="leftside"><a href="#">warpc ()</a></div>
|
||||
<div class="both"></div>
|
||||
<a class="button tmargin10" href="#">Опубликовать</a>
|
||||
|
||||
<div class="hr"></div>
|
||||
|
||||
<h3>Основные данные</h3>
|
||||
<div class="leftside width125">Platform</div>
|
||||
<div class="leftside"><a href="#">mandriva2011</a></div>
|
||||
<div class="both"></div>
|
||||
<div class="leftside width125">Packet list repository</div>
|
||||
<div class="leftside"><a href="#">warpc_personal</a></div>
|
||||
<div class="both"></div>
|
||||
<div class="leftside width125">Includes repository</div>
|
||||
<div class="leftside">main</div>
|
||||
<div class="both"></div>
|
||||
<div class="leftside width125">Update type</div>
|
||||
<div class="leftside">security</div>
|
||||
<div class="both"></div>
|
||||
<div class="leftside width125">Dependable build requires</div>
|
||||
<div class="leftside">false</div>
|
||||
<div class="both"></div>
|
||||
<div class="leftside width125">Automated publishing</div>
|
||||
<div class="leftside">true</div>
|
||||
<div class="both"></div>
|
||||
<div class="leftside width125">Version</div>
|
||||
<div class="leftside">latest_mandriva2011</div>
|
||||
<div class="both"></div>
|
||||
<div class="leftside width125">Architecture</div>
|
||||
<div class="leftside">i586</div>
|
||||
<div class="both"></div>
|
||||
<div class="leftside width125">Recurrent</div>
|
||||
<div class="leftside">false</div>
|
||||
<div class="both"></div>
|
||||
|
||||
<div class="hr"></div>
|
||||
|
||||
<h3>Build items</h3>
|
||||
<h4 class="nomargin">Item #0</h4>
|
||||
|
||||
<table class="tablesorter width565" cellpadding="0" cellspacing="0">
|
||||
<thead>
|
||||
<tr>
|
||||
<th>Name</th>
|
||||
<th>Version</th>
|
||||
<th>Status</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr class="success">
|
||||
<td>libreoffice</td>
|
||||
<td>latest_mandriva2011</td>
|
||||
<td>Build complete</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
<div class="both"></div>
|
||||
|
||||
</div>
|
||||
|
||||
<div class="both">
|
||||
</div>
|
||||
</article>
|
||||
|
||||
</div>
|
||||
<!--Footer-->
|
||||
<footer>
|
||||
<ul>
|
||||
<li>
|
||||
ROSA Лаб. © 2012 <img src="pics/square.png" alt="_" />
|
||||
</li>
|
||||
<li>
|
||||
<img src="pics/flag.png" alt="rosa" /> <img src="pics/square.png" alt="_" />
|
||||
</li>
|
||||
<li>
|
||||
<a href="#">О компании</a> <img src="pics/square.png" alt="_" />
|
||||
</li>
|
||||
<li>
|
||||
<a href="#">Контакты</a> <img src="pics/square.png" alt="_" />
|
||||
</li>
|
||||
<li>
|
||||
<a href="#">Условия использования</a> <img src="pics/square.png" alt="_" />
|
||||
</li>
|
||||
<li>
|
||||
<a href="#">Конфиденциальность</a> <img src="pics/square.png" alt="_" />
|
||||
</li>
|
||||
<li>
|
||||
<a href="#">Безопасность</a>
|
||||
</li>
|
||||
</ul>
|
||||
</footer>
|
||||
</body>
|
||||
</html>
|
|
@ -444,7 +444,7 @@ article a.button {
|
|||
background-image: linear-gradient(top, #68a3d8, #125687);
|
||||
filter: progid:DXImageTransform.Microsoft.gradient(startColorStr='#68a3d8', EndColorStr='#125687');
|
||||
border: 1px solid #5084b4;
|
||||
padding: 4px 20px;
|
||||
padding: 4px 20px 6px;
|
||||
margin: 0;
|
||||
font-size: 12px;
|
||||
text-decoration: none;
|
||||
|
@ -513,7 +513,7 @@ article input[type="submit"] {
|
|||
background-image: linear-gradient(top, #68a3d8, #125687);
|
||||
filter: progid:DXImageTransform.Microsoft.gradient(startColorStr='#68a3d8', EndColorStr='#125687');
|
||||
border: 1px solid #5084b4;
|
||||
padding: 0px 20px 0px;
|
||||
padding: 3px 20px 5px;
|
||||
margin: 0;
|
||||
font-size: 12px;
|
||||
text-decoration: none;
|
||||
|
@ -523,7 +523,6 @@ article input[type="submit"] {
|
|||
border-radius: 5px;
|
||||
text-align: center;
|
||||
height: auto;
|
||||
height: 28px;
|
||||
width: auto;
|
||||
font-family: Tahoma;
|
||||
}
|
||||
|
@ -2364,3 +2363,7 @@ table.tablesorter tr.search td input[type="text"] {
|
|||
table.tablesorter.width565 {
|
||||
width: 565px;
|
||||
}
|
||||
|
||||
article h3 a {
|
||||
font-size: 14px;
|
||||
}
|
|
@ -18,8 +18,9 @@ Capistrano::Configuration.instance(:must_exist).load do
|
|||
run "#{try_sudo} kill -s USR2 `cat #{unicorn_pid}`" rescue warn 'deploy:reload FAILED'
|
||||
end
|
||||
task :restart, :roles => :app, :except => { :no_release => true } do
|
||||
stop
|
||||
start # blue pill will do it?
|
||||
reload
|
||||
#stop
|
||||
#start # blue pill will do it?
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
|
@ -18,7 +18,7 @@ namespace :hook do
|
|||
projects = ENV['project_id'] ? Project.where(:id => eval(ENV['project_id'])) : Project
|
||||
projects.where('created_at >= ?', Time.now.ago(ENV['period'] ? eval(ENV['period']) : 100.years)).each do |project|
|
||||
hook_file = File.join(project.path, 'hooks', 'post-receive')
|
||||
FileUtils.cp(hook, hook_file)
|
||||
FileUtils.copy_entry(hook, hook_file, false, false, true)
|
||||
count = count + 1
|
||||
end
|
||||
say "Writing to #{count.to_s} repo(s)"
|
||||
|
|
|
@ -0,0 +1,15 @@
|
|||
require 'spec_helper'
|
||||
|
||||
# Specs in this file have access to a helper object that includes
|
||||
# the BuildListsHelper. For example:
|
||||
#
|
||||
# describe BuildListsHelper do
|
||||
# describe "string concat" do
|
||||
# it "concats two strings with spaces" do
|
||||
# helper.concat_strings("this","that").should == "this that"
|
||||
# end
|
||||
# end
|
||||
# end
|
||||
describe BuildListsHelper do
|
||||
pending "add some examples to (or delete) #{__FILE__}"
|
||||
end
|
Loading…
Reference in New Issue