[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:
George Vinogradov 2012-03-19 18:56:04 +04:00
commit ddc95c25fb
31 changed files with 508 additions and 126 deletions

View File

@ -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;
}

View File

@ -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;
}

View File

@ -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

View File

@ -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
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

View File

@ -33,7 +33,7 @@ module CommitHelper
end
def shortest_hash_id(id)
id[0..8]
id[0..9]
end
def short_commit_message(message)

View File

@ -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

View File

@ -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

View File

@ -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|

View File

@ -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' : ''

View File

@ -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')

View File

@ -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

View File

@ -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

View File

@ -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
@ -6,4 +6,4 @@
%td= build_list.arch.name
%td= link_to build_list.user.try(:fullname), build_list.user
%td= link_to image_tag('x.png', :class => 'delete-row', :id => "delete-row#{build_list_counter}"), cancel_build_list_path(build_list), :method => :put, :confirm => t('layout.confirm') if build_list.can_cancel? and can?(:cancel, build_list)
%td= build_list.notified_at
%td= build_list.notified_at

View File

@ -1,7 +1,11 @@
- content_for :submenu do
- if content_for?(:sidebar)
- if @build_list
.left
%nav
%ul
%li= link_to t('layout.projects.list_header'), build_lists_path, :class => (params[:controller] == 'build_lists' ? 'active' : nil)
%li= link_to t('layout.products.list_header'), '#'
= @build_list.project.name
- else
- if content_for?(:sidebar)
.left
%nav
%ul
%li= link_to t('layout.projects.list_header'), build_lists_path, :class => (params[:controller] == 'build_lists' ? 'active' : nil)
%li= link_to t('layout.products.list_header'), '#'

View File

@ -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
- 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?
.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
.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|
%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
- group.each do |item|
%tr{:class => cycle("odd", "even")}
%td= item.name
%td= item.version
%td= item.human_status
:javascript
$('article .all').addClass('bigpadding');
= render 'build_lists/submenu'

View File

@ -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'

View File

@ -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})"

View File

@ -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') + ':'

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -27,5 +27,11 @@ ru:
wiki: Wiki
readme: Readme
settings: Настройки
feed_menu:
all: Все
code: Код
tracker: Трекер
build: Сборка
wiki: Вики
platform_menu:
settings: Настройки

View File

@ -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}'
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

View File

@ -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» и теперь можете войти в систему.
@ -36,4 +37,10 @@ ru:
delete_branch: Удалена ветка %{branch_name}
create_branch: '%{user_link} создал новую ветку %{branch_name}'
update_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: ожидает сборки

View File

@ -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

View File

@ -58,6 +58,7 @@ ru:
container_published: 'Контейнер размещен в репозитории'
action: Действие
new_header: Новая сборка
main_data: Основные данные
ownership:
header: Принадлежность заданий

View File

@ -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>

View File

@ -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;
}

View File

@ -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

View File

@ -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)"

View File

@ -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