Merge branch 'master' into 90-pull
Conflicts: db/schema.rb
This commit is contained in:
commit
6b6887250b
Before Width: | Height: | Size: 130 KiB After Width: | Height: | Size: 130 KiB |
|
@ -1,3 +1,11 @@
|
|||
//= require jquery
|
||||
//= require jquery_ujs
|
||||
//= require jquery-ui
|
||||
//= require pirobox_extended_min
|
||||
//= require ./design/all
|
||||
|
||||
$(document).ready(function() {
|
||||
$('div.information > div.profile > a').live('click', function(e) {
|
||||
e.preventDefault();
|
||||
});
|
||||
});
|
|
@ -75,7 +75,7 @@ class Projects::BuildListsController < Projects::BaseController
|
|||
def update
|
||||
if params[:publish].present? and can?(:publish, @build_list)
|
||||
publish
|
||||
elsif params[:reject_publish].present? and can?(:reject_publish)
|
||||
elsif params[:reject_publish].present? and can?(:reject_publish, @build_list)
|
||||
reject_publish
|
||||
else
|
||||
# King Arthur, we are under attack!
|
||||
|
@ -112,7 +112,7 @@ class Projects::BuildListsController < Projects::BaseController
|
|||
@build_list.container_path = params[:container_path]
|
||||
@build_list.save
|
||||
|
||||
@build_list.set_packages(ActiveSupport::JSON.decode(params[:pkg_info])) if params[:status].to_i == BuildServer::SUCCESS and params[:pkg_info].present?
|
||||
@build_list.set_packages(ActiveSupport::JSON.decode(params[:pkg_info]), params[:package_name]) if params[:status].to_i == BuildServer::SUCCESS and params[:pkg_info].present?
|
||||
|
||||
render :nothing => true, :status => 200
|
||||
end
|
||||
|
@ -172,12 +172,12 @@ class Projects::BuildListsController < Projects::BaseController
|
|||
|
||||
def publish
|
||||
@build_list.update_type = params[:build_list][:update_type] if params[:build_list][:update_type].present?
|
||||
if params[:create_advisory].present?
|
||||
a = @build_list.build_advisory
|
||||
a.update_type = @build_list.update_type
|
||||
a.project = @build_list.project
|
||||
a.platforms << @build_list.save_to_platform unless a.platforms.include? @build_list.save_to_platform
|
||||
redirect_to :back, :notice => t('layout.build_lists.publish_fail') unless a.update_attributes(params[:build_list][:advisory])
|
||||
if params[:create_advisory].present? and !@build_list.build_advisory(params[:build_list][:advisory]) do |a|
|
||||
a.update_type = @build_list.update_type
|
||||
a.project = @build_list.project
|
||||
a.platforms << @build_list.save_to_platform unless a.platforms.include? @build_list.save_to_platform
|
||||
end.save
|
||||
redirect_to :back, :notice => t('layout.build_lists.publish_fail') and return
|
||||
end
|
||||
if @build_list.save and @build_list.publish
|
||||
redirect_to :back, :notice => t('layout.build_lists.publish_success')
|
||||
|
|
|
@ -2,6 +2,10 @@
|
|||
class Projects::ProjectsController < Projects::BaseController
|
||||
before_filter :authenticate_user!
|
||||
load_and_authorize_resource
|
||||
# TODO WTF ? fork, update, sections not authorize
|
||||
before_filter do |controller|
|
||||
authorize! params[:action].to_sym, @project if params[:action] != 'index'
|
||||
end
|
||||
|
||||
def index
|
||||
@projects = Project.accessible_by(current_ability, :membered)
|
||||
|
@ -57,7 +61,6 @@ class Projects::ProjectsController < Projects::BaseController
|
|||
end
|
||||
|
||||
def fork
|
||||
authorize! :fork, @project # TODO WTF ?
|
||||
owner = (Group.find params[:group] if params[:group].present?) || current_user
|
||||
authorize! :update, owner if owner.class == Group
|
||||
if forked = @project.fork(owner) and forked.valid?
|
||||
|
|
|
@ -1,11 +1,20 @@
|
|||
# -*- encoding : utf-8 -*-
|
||||
class Users::RegisterRequestsController < ApplicationController
|
||||
before_filter :user_choose_locale
|
||||
layout 'invite'
|
||||
|
||||
def new
|
||||
redirect_to '/invite.html'
|
||||
render :invite
|
||||
end
|
||||
|
||||
def create
|
||||
RegisterRequest.create(params[:register_request])
|
||||
redirect_to '/thanks.html'
|
||||
render :thanks
|
||||
end
|
||||
|
||||
protected
|
||||
|
||||
def user_choose_locale
|
||||
I18n.locale = params[:format] if User::LANGUAGES.include?(params[:format])
|
||||
end
|
||||
end
|
||||
|
|
|
@ -66,7 +66,7 @@ class Ability
|
|||
can [:read, :related], BuildList, :project => {:owner_type => 'User', :owner_id => user.id}
|
||||
can [:read, :related], BuildList, :project => {:owner_type => 'Group', :owner_id => user.group_ids}
|
||||
can(:read, BuildList, read_relations_for('build_lists', 'projects')) {|build_list| can? :read, build_list.project}
|
||||
can([:create, :update], BuildList) {|build_list| build_list.project.is_rpm && can?(:write, build_list.project)}
|
||||
can([:create, :update], BuildList) {|build_list| build_list.project.is_package && can?(:write, build_list.project)}
|
||||
|
||||
can(:publish, BuildList) do |build_list|
|
||||
build_list.can_publish? and build_list.save_to_platform.released ? local_admin?(build_list.save_to_platform) : can?(:write, build_list.project)
|
||||
|
|
|
@ -7,7 +7,7 @@ class Advisory < ActiveRecord::Base
|
|||
|
||||
after_create :generate_advisory_id
|
||||
|
||||
ID_TEMPLATE = 'ROSA%<type>s-%<year>d:%<id>04d'
|
||||
ID_TEMPLATE = 'ROSA-%<type>s-%<year>d:%<id>04d'
|
||||
TYPES = {'security' => 'SA', 'bugfix' => 'A'}
|
||||
|
||||
def to_param
|
||||
|
|
|
@ -114,10 +114,11 @@ class BuildList < ActiveRecord::Base
|
|||
end
|
||||
end
|
||||
|
||||
def set_packages(pkg_hash)
|
||||
build_package(pkg_hash['srpm'], 'source') {|p| p.save!}
|
||||
def set_packages(pkg_hash, project_name)
|
||||
prj = Project.joins(:repositories => :platform).where('platforms.id = ?', save_to_platform.id).find_by_name!(project_name)
|
||||
build_package(pkg_hash['srpm'], 'source', prj) {|p| p.save!}
|
||||
pkg_hash['rpm'].each do |rpm_hash|
|
||||
build_package(rpm_hash, 'binary') {|p| p.save!}
|
||||
build_package(rpm_hash, 'binary', prj) {|p| p.save!}
|
||||
end
|
||||
end
|
||||
|
||||
|
@ -188,9 +189,9 @@ class BuildList < ActiveRecord::Base
|
|||
save
|
||||
end
|
||||
|
||||
def build_package(pkg_hash, package_type)
|
||||
def build_package(pkg_hash, package_type, prj)
|
||||
packages.create(pkg_hash) do |p|
|
||||
p.project = project # Project.joins(:repositories => :platform).where('platforms.id = ?', save_to_platform.id).find_by_name!(pkg_hash['name'])
|
||||
p.project = prj
|
||||
p.platform = save_to_platform
|
||||
p.package_type = package_type
|
||||
yield p
|
||||
|
|
|
@ -29,7 +29,7 @@ class Project < ActiveRecord::Base
|
|||
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')
|
||||
|
||||
attr_accessible :name, :description, :visibility, :srpm, :is_rpm, :default_branch, :has_issues, :has_wiki
|
||||
attr_accessible :name, :description, :visibility, :srpm, :is_package, :default_branch, :has_issues, :has_wiki
|
||||
attr_readonly :name
|
||||
|
||||
scope :recent, order("name ASC")
|
||||
|
|
|
@ -0,0 +1,22 @@
|
|||
!!!
|
||||
%html
|
||||
%head
|
||||
%meta{:content => "text/html; charset=utf-8", "http-equiv" => "Content-Type"}/
|
||||
%title=t 'invites.title'
|
||||
%script{:src => "http://html5shiv.googlecode.com/svn/trunk/html5.js", :type => "text/javascript"}
|
||||
%link{:href => "/styles/prereg.css", :rel => "stylesheet", :type => "text/css"}/
|
||||
%body
|
||||
.wrap
|
||||
= yield :nav if content_for?(:nav)
|
||||
/ Top block
|
||||
%header
|
||||
.logo
|
||||
.text=t 'invites.header'
|
||||
.both
|
||||
/ Page
|
||||
%article
|
||||
=yield
|
||||
.both
|
||||
/ Footer
|
||||
%footer= render "layouts/menu/bottom"
|
||||
= render 'layouts/counters' unless current_user.try(:admin?)
|
|
@ -1,65 +0,0 @@
|
|||
.sub-menu.tour
|
||||
%nav
|
||||
%ul
|
||||
%li
|
||||
=link_to 'Управление проектами', tour_inside_path('projects')
|
||||
%li
|
||||
=link_to 'Исходный код', tour_inside_path('sources'), :class => 'active'
|
||||
%li
|
||||
=link_to 'Сборка проектов', tour_inside_path('builds')
|
||||
.both
|
||||
/ Page
|
||||
%article
|
||||
/ Single page content
|
||||
.feature-wrap
|
||||
.feature
|
||||
.left
|
||||
%a.pirobox{:href => image_path('tour/big/source.png'), :rel => "single", :title => "Исходный код онлайн"}
|
||||
=image_tag 'tour/2/source.png'
|
||||
.right
|
||||
%h1 Исходный код онлайн
|
||||
%p
|
||||
Мы сфокусировались на том, чтобы сделать исходный код
|
||||
доступным и прозрачным. Все, что вы выложите в git-репозиторий,
|
||||
мгновенно станет доступным для просмотра в режиме онлайн,
|
||||
чтобы вы могли поделиться им с людьми, даже если они не
|
||||
используют Git. На главной странице каждого проекта есть список
|
||||
файлов проекта, а также информация о последнем изменении.
|
||||
Вы можете сразу увидеть самое важное в вашем проекте: код.
|
||||
.both
|
||||
.feature-wrap
|
||||
.feature
|
||||
.left
|
||||
%h1 История файла
|
||||
%p
|
||||
Каждый файл в git-репозитории имеет историю, которую вы
|
||||
легко можете посмотреть: кто, когда и что в нем поменял.
|
||||
.right
|
||||
%a.pirobox{:href => image_path('tour/big/history.png'), :rel => "single", :title => "История файла"}
|
||||
=image_tag 'tour/2/history.png'
|
||||
.both
|
||||
.feature-wrap
|
||||
.feature
|
||||
.left
|
||||
%a.pirobox{:href => image_path('tour/big/annotation.png'), :rel => "single", :title => "Аннотация файла"}
|
||||
=image_tag 'tour/2/annotation.png'
|
||||
.right
|
||||
%h1 Аннотация файла
|
||||
%p
|
||||
Ищете автора фрагмента кода? Откройте аннотацию файла
|
||||
(Blame), чтобы увидеть: кто и в каком коммите последний
|
||||
изменял данный фрагмент.
|
||||
.both
|
||||
.feature-wrap
|
||||
.feature
|
||||
.left
|
||||
%h1 Редактирования онлайн
|
||||
%p
|
||||
Вам нужно быстро внести изменение в файл? Исправить
|
||||
орфографические ошибки на вашем мобильном телефоне?
|
||||
Мы предлагаем простой редактор для каждого файла в
|
||||
git-репозитории.
|
||||
.right
|
||||
%a.pirobox{:href => image_path('tour/big/edit.png'), :rel => "single", :title => "Редактирования онлайн"}
|
||||
=image_tag 'tour/2/edit.png'
|
||||
.both
|
|
@ -7,7 +7,7 @@
|
|||
%ul
|
||||
%li= link_to t("project_menu.project"), project_path(@project), :class => (act.in?([:show, :edit]) && contr.in?([:trees, :blobs]) ? 'active' : nil)
|
||||
%li= link_to t("project_menu.commits"), commits_path(@project), :class => (act.in?([:index, :show]) && contr == :commits ? 'active' : nil)
|
||||
- if @project.is_rpm and can?(:read, @project => BuildList)
|
||||
- if @project.is_package and can?(:read, @project => BuildList)
|
||||
%li= link_to t("project_menu.builds"), project_build_lists_path(@project), :class => (contr == :build_lists ? 'active' : nil)
|
||||
- if @project.has_issues
|
||||
%li= link_to t("project_menu.tracker"), project_issues_path(@project), :class => (contr == :issues ? 'active' : nil)
|
||||
|
|
|
@ -42,8 +42,8 @@
|
|||
\
|
||||
.rightlist
|
||||
.check
|
||||
%span#niceCheckbox1.niceCheck-main= f.check_box :is_rpm#, :class => 'niceCheckbox1'
|
||||
.forcheck= t("activerecord.attributes.project.is_rpm")
|
||||
%span#niceCheckbox1.niceCheck-main= f.check_box :is_package#, :class => 'niceCheckbox1'
|
||||
.forcheck= t("activerecord.attributes.project.is_package")
|
||||
.both
|
||||
.both
|
||||
- if [:new, :create].include? act
|
||||
|
|
|
@ -0,0 +1,44 @@
|
|||
-content_for :nav do
|
||||
%nav
|
||||
-if I18n.locale == :ru
|
||||
%a{:href => "#{new_register_request_path}.en"}
|
||||
%p
|
||||
English
|
||||
%br>/
|
||||
version
|
||||
-elsif I18n.locale == :en
|
||||
%a{:href => "#{new_register_request_path}.ru"}
|
||||
%p
|
||||
Русская
|
||||
%br>/
|
||||
версия
|
||||
|
||||
.left
|
||||
%p
|
||||
=raw t 'invites.description'
|
||||
%div{:style => "clear: both;"}
|
||||
.right
|
||||
%h3=t 'invites.want'
|
||||
%form#new_register_request{"accept-charset" => "UTF-8", :action => "/register_requests", :method => "post", :name => "invite_form"}
|
||||
.signup-left=t 'invites.name'
|
||||
.signup-right
|
||||
%input#email.registartion-input-signup{:name => "register_request[name]", :onClick => "this.className='registartion-input-focus';disError(this);", :onblur => "if(this.value==''){this.value='';this.className='registartion-input-signup';}else{this.className='registartion-input-no-focus';};buttonCheck();", :onfocus => "if(this.value=='#{t 'invites.login_email'}'){this.value='';this.className='registartion-input-focus';};", :onkeydown => "buttonCheck();", :type => "text"}/
|
||||
%div{:style => "clear: both;"}
|
||||
.signup-left=t 'invites.email'
|
||||
.signup-right
|
||||
%input#email.registartion-input-signup{:name => "register_request[email]", :onClick => "this.className='registartion-input-focus';disError(this);", :onblur => "if(this.value==''){this.value='';this.className='registartion-input-signup';}else{this.className='registartion-input-no-focus';};buttonCheck();", :onfocus => "if(this.value=='#{t 'invites.login_email'}'){this.value='';this.className='registartion-input-focus';};", :onkeydown => "buttonCheck();", :type => "text"}/
|
||||
%div{:style => "clear: both;"}
|
||||
.signup-left=raw t 'invites.interest'
|
||||
.signup-right
|
||||
%select.registartion-input-signup{:name => "register_request[interest]"}
|
||||
-t('invites.interests').each do |base, title|
|
||||
%option=title
|
||||
%div{:style => "clear: both;"}
|
||||
.signup-left=t 'invites.comments'
|
||||
.signup-right
|
||||
%textarea.registartion-input-signup{:name => "register_request[more]", :rows => "3"}
|
||||
%div{:style => "clear: both;"}
|
||||
=hidden_field_tag :format, I18n.locale
|
||||
.button
|
||||
%input.button{:type => "submit", :value => t('invites.send')}
|
||||
%div{:style => "clear: both;"}
|
|
@ -0,0 +1,3 @@
|
|||
.all
|
||||
%p
|
||||
%span{:style => "font-size: 28px;"}=raw t 'invites.thanks'
|
|
@ -45,5 +45,5 @@ end
|
|||
require 'stub_xml_rpc'
|
||||
|
||||
Rails.application.config.to_prepare {
|
||||
Platform.send :include, Modules::Models::RsyncStub
|
||||
Platform.send :include, Modules::Models::SymlinkStub
|
||||
}
|
||||
|
|
|
@ -0,0 +1,29 @@
|
|||
en:
|
||||
invites:
|
||||
title: ABF
|
||||
|
||||
header: 'A platform for distribution development and lifecycle management: from source code to ISO images.'
|
||||
description: |
|
||||
Welcome!<br><br>
|
||||
On this page you can submit a request to participate in beta testing of ABF build service of ROSA company.<br><br>
|
||||
In the first place we process requests from prospective maintainers and representatives of distribution teams.<br><br>
|
||||
You can get detailed documentation <a class='last' href="http://wiki.rosalab.ru/index.php/Сборочная_среда_ABF">here</a>.<br><br>
|
||||
We will be glad to answer your questions at the project <a class='last' href="http://forum.rosalab.ru/viewforum.php?f=10">here</a>.<br><br>
|
||||
thanks: |
|
||||
Thank You!<br><br>
|
||||
We are glad that you have expressed interest in our ABF service!<br><br>
|
||||
Your registration confirmation will be sent to the e-mail address you have specified in the registration form.<br><br>
|
||||
We will be glad to get feedback and to answer your questions in our <a class='last' href="http://forum.rosalab.ru/viewforum.php?f=10">forum</a>.<br><br>
|
||||
You can get detailed documentation <a class='last' href="http://wiki.rosalab.ru/index.php/Сборочная_среда_ABF">here</a>.
|
||||
|
||||
want: I want to become ABF beta-tester!
|
||||
login_email: Login or email
|
||||
name: 'First/Last name'
|
||||
email: E-mail address
|
||||
interest: Interest in the project
|
||||
Comments: Comments
|
||||
send: Send
|
||||
interests:
|
||||
evaluate: Evaluate ABF possibilities
|
||||
maintainer: I want to become ROSA maintainer
|
||||
build: I want to build a distribution using ABF
|
|
@ -0,0 +1,30 @@
|
|||
ru:
|
||||
invites:
|
||||
title: Сборочная среда
|
||||
|
||||
header: 'Платформа разработки и управления жизненным циклом дистрибутивов: от исходного кода до ISO-образов.'
|
||||
description: |
|
||||
Приветствуем Вас!<br><br>
|
||||
Вы находитесь на странице размещения заявок на участие в бета-тестировании сборочного сервиса ABF компании РОСА.<br><br>
|
||||
В первую очередь одобряются заявки от потенциальных майнтейнеров и представителей дистрибутивных команд.<br><br>
|
||||
Ознакомиться с документацией можно <a class='last' href="http://wiki.rosalab.ru/index.php/Сборочная_среда_ABF">здесь</a>.<br><br>
|
||||
Мы будем рады ответить на Ваши вопросы на <a class='last' href="http://forum.rosalab.ru/viewforum.php?f=10">форуме</a> проекта.
|
||||
thanks: |
|
||||
Спасибо!<br><br>
|
||||
Благодарим за интерес к нашему сервису ABF!<br><br>
|
||||
Приглашение будет выслано вам по указанной электронной почте.<br><br>
|
||||
Приглашаем Вас на <a class='last' href="http://forum.rosalab.ru/viewforum.php?f=10">форум</a> проекта,
|
||||
где мы будем рады ответить на Ваши вопросы и получить Ваши пожелания.<br><br>
|
||||
Ознакомиться с документацией можно <a href="http://wiki.rosalab.ru/index.php/Сборочная_среда_ABF">здесь</a>.
|
||||
|
||||
want: Хочу стать бета-тестером ABF!
|
||||
login_email: Логин или email
|
||||
name: Имя, Фамилия
|
||||
email: Электронная почта
|
||||
interest: Степень интереса<br> к проекту
|
||||
Comments: Также хочу сказать
|
||||
send: Отправить
|
||||
interests:
|
||||
evaluate: Общеобразовательные цели
|
||||
maintainer: Хочу стать майнтейнером РОСы
|
||||
build: Хочу собрать в ABF дистрибутив
|
|
@ -87,7 +87,7 @@ en:
|
|||
me: Myself
|
||||
group: Group
|
||||
default_branch: Default branch
|
||||
is_rpm: Project is a packet
|
||||
is_package: Project is a package
|
||||
errors:
|
||||
project:
|
||||
uname: The name can only use lower case Latin letters (a-z), numbers (0-9) and underscore (_)
|
||||
|
|
|
@ -87,7 +87,7 @@ ru:
|
|||
me: Я
|
||||
group: Группа
|
||||
default_branch: Ветка по умолчанию
|
||||
is_rpm: Проект является пакетом
|
||||
is_package: Проект является пакетом
|
||||
errors:
|
||||
project:
|
||||
uname: В имени можно использовать только строчные символы латинского алфавита (a-z), цифры (0-9) и символ нижнего подчеркивания (_)
|
||||
|
|
|
@ -46,16 +46,16 @@ ru:
|
|||
edit_description: |
|
||||
Вам нужно быстро внести изменение в файл? Исправить орфографические ошибки c вашего мобильного телефона?
|
||||
Мы предлагаем простой редактор для каждого файла в git-репозитории.
|
||||
control: |
|
||||
control_description: |
|
||||
Существует 3 возможных роли для участника проекта: только чтение, чтение/запись и административный уровень.
|
||||
Участником проекта может выступать как пользователь, так и группа. Проект, как и группа, может иметь неограниченное
|
||||
число участников (пользователей, групп или всех вместе).
|
||||
git: |
|
||||
git_description: |
|
||||
Вики проекта создана с помощью Gollum — открытого вики-движка, созданного GitHub. В основе своей это полноценный
|
||||
git-репозиторий, который можно клонировать, использовать в режиме офлайн, изменять и загружать изменения обратно на
|
||||
сервер, как в случае с обычным кодом. Удобный веб-редактор позволит работать с ней в онлайн. Теперь данные о проекте не
|
||||
пропадут и доступны для редактирования в любимом редакторе!
|
||||
<br/><br/>Примечание: для приватного проекта вики доступна только его участникам. Для публичного — всем для чтения.
|
||||
tracker: |
|
||||
tracker_description: |
|
||||
Каждый проект также может использовать легкий и простой трекер задач. Метки и назначения позволят не потеряться среди
|
||||
задач, а понятный интерфейс позволит сконцентрироваться на работе, а не на заполнении огромных формуляров.
|
||||
|
|
|
@ -81,7 +81,7 @@ Rosa::Application.routes.draw do
|
|||
resources :users, :controller => 'profile', :only => [] do
|
||||
get :autocomplete_user_uname, :on => :collection
|
||||
end
|
||||
resources :register_requests, :only => [:new, :create]
|
||||
resources :register_requests, :only => [:new, :create], :format => /ru|en/ #view support only two languages
|
||||
end
|
||||
|
||||
scope :module => 'groups' do
|
||||
|
|
|
@ -0,0 +1,11 @@
|
|||
class RenameIsRpmToIsPackageInProjects < ActiveRecord::Migration
|
||||
def up
|
||||
rename_column :projects, :is_rpm, :is_package
|
||||
change_column :projects, :is_package, :boolean, :default => true, :null => false
|
||||
end
|
||||
|
||||
def down
|
||||
rename_column :projects, :is_package, :is_rpm
|
||||
change_column :projects, :is_package, :boolean, :default => true
|
||||
end
|
||||
end
|
18
db/schema.rb
18
db/schema.rb
|
@ -11,14 +11,14 @@
|
|||
#
|
||||
# It's strongly recommended to check this file into your version control system.
|
||||
|
||||
ActiveRecord::Schema.define(:version => 20120512102707) do
|
||||
ActiveRecord::Schema.define(:version => 20120515095324) do
|
||||
|
||||
create_table "activity_feeds", :force => true do |t|
|
||||
t.integer "user_id", :null => false
|
||||
t.string "kind"
|
||||
t.text "data"
|
||||
t.datetime "created_at", :null => false
|
||||
t.datetime "updated_at", :null => false
|
||||
t.datetime "created_at"
|
||||
t.datetime "updated_at"
|
||||
end
|
||||
|
||||
create_table "advisories", :force => true do |t|
|
||||
|
@ -299,7 +299,7 @@ ActiveRecord::Schema.define(:version => 20120512102707) do
|
|||
t.integer "srpm_file_size"
|
||||
t.datetime "srpm_updated_at"
|
||||
t.string "default_branch", :default => "master"
|
||||
t.boolean "is_rpm", :default => true
|
||||
t.boolean "is_package", :default => true, :null => false
|
||||
t.integer "average_build_time", :default => 0, :null => false
|
||||
t.integer "build_count", :default => 0, :null => false
|
||||
end
|
||||
|
@ -373,8 +373,9 @@ ActiveRecord::Schema.define(:version => 20120512102707) do
|
|||
|
||||
create_table "users", :force => true do |t|
|
||||
t.string "name"
|
||||
t.string "email", :default => "", :null => false
|
||||
t.string "encrypted_password", :default => "", :null => false
|
||||
t.string "email", :default => "", :null => false
|
||||
t.string "encrypted_password", :limit => 128, :default => "", :null => false
|
||||
t.string "password_salt", :default => "", :null => false
|
||||
t.string "reset_password_token"
|
||||
t.datetime "reset_password_sent_at"
|
||||
t.datetime "remember_created_at"
|
||||
|
@ -383,11 +384,12 @@ ActiveRecord::Schema.define(:version => 20120512102707) do
|
|||
t.text "ssh_key"
|
||||
t.string "uname"
|
||||
t.string "role"
|
||||
t.string "language", :default => "en"
|
||||
t.integer "own_projects_count", :default => 0, :null => false
|
||||
t.string "language", :default => "en"
|
||||
t.string "confirmation_token"
|
||||
t.datetime "confirmed_at"
|
||||
t.datetime "confirmation_sent_at"
|
||||
t.integer "own_projects_count", :default => 0, :null => false
|
||||
t.datetime "reset_password_sent_at"
|
||||
t.text "professional_experience"
|
||||
t.string "site"
|
||||
t.string "company"
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
# -*- encoding : utf-8 -*-
|
||||
module Modules
|
||||
module Models
|
||||
module RsyncStub
|
||||
module SymlinkStub
|
||||
extend ActiveSupport::Concern
|
||||
|
||||
included do
|
||||
|
@ -9,11 +9,11 @@ module Modules
|
|||
true
|
||||
end
|
||||
|
||||
def mount_directory_for_rsync
|
||||
def symlink_directory
|
||||
true
|
||||
end
|
||||
|
||||
def umount_directory_for_rsync
|
||||
def remove_symlink_directory
|
||||
true
|
||||
end
|
||||
end
|
|
@ -3,6 +3,7 @@ namespace :downloads do
|
|||
desc "Migrate from mount to symlinks"
|
||||
task :migrate => :environment do
|
||||
Platform.opened.each do |pl|
|
||||
system("sudo mv #{pl.symlink_path}/*.lst #{pl.path}")
|
||||
system("sudo umount #{pl.symlink_path}")
|
||||
system("sudo rm -Rf #{pl.symlink_path}")
|
||||
|
||||
|
|
|
@ -1,126 +0,0 @@
|
|||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
|
||||
<title>Сборочная среда</title>
|
||||
<script type="text/javascript" src="http://html5shiv.googlecode.com/svn/trunk/html5.js"></script>
|
||||
<link rel="stylesheet" type="text/css" href="styles/prereg.css" />
|
||||
</head>
|
||||
<body>
|
||||
<div class="wrap">
|
||||
<!--Top block-->
|
||||
<header>
|
||||
<div class="logo">
|
||||
</div>
|
||||
|
||||
<div class="text">
|
||||
Платформа разработки и управления жизненным циклом дистрибутивов: от исходного кода до ISO-образов
|
||||
</div>
|
||||
|
||||
<div class="both">
|
||||
</div>
|
||||
</header>
|
||||
|
||||
<!--Page-->
|
||||
<article>
|
||||
<div class="left">
|
||||
<p>
|
||||
Приветствуем Вас!<br /><br />
|
||||
Вы находитесь на странице размещения заявок на участие в бета-тестировании сборочного сервиса ABF компании РОСА.<br /><br />
|
||||
В первую очередь одобряются заявки от потенциальных майнтейнеров и представителей дистрибутивных команд.<br /><br />
|
||||
Ознакомиться с документацией можно <a href="http://wiki.rosalab.ru/index.php/Сборочная_среда_ABF">здесь</a>.<br /><br />
|
||||
Мы будем рады ответить на Ваши вопросы на <a href="http://forum.rosalab.ru/viewforum.php?f=10">форуме</a> проекта.
|
||||
</p>
|
||||
|
||||
<div style="clear: both;">
|
||||
</div>
|
||||
|
||||
|
||||
</div>
|
||||
<div class="right">
|
||||
<h3>Хочу стать бета-тестером ABF!</h3>
|
||||
|
||||
<form accept-charset="UTF-8" name='invite_form' action="/register_requests" id="new_register_request" method="post">
|
||||
<div class="signup-left">
|
||||
Имя, Фамилия
|
||||
</div>
|
||||
<div class="signup-right">
|
||||
<input type="text" id="email" name="register_request[name]" class="registartion-input-signup" onkeydown="buttonCheck();" onClick="this.className='registartion-input-focus';disError(this);" onfocus="if(this.value=='Логин или email'){this.value='';this.className='registartion-input-focus';};" onblur="if(this.value==''){this.value='';this.className='registartion-input-signup';}else{this.className='registartion-input-no-focus';};buttonCheck();" />
|
||||
</div>
|
||||
<div style="clear: both;">
|
||||
</div>
|
||||
<div class="signup-left">
|
||||
Электронная почта
|
||||
</div>
|
||||
<div class="signup-right">
|
||||
<input type="text" id="email" name="register_request[email]" class="registartion-input-signup" onkeydown="buttonCheck();" onClick="this.className='registartion-input-focus';disError(this);" onfocus="if(this.value=='Логин или email'){this.value='';this.className='registartion-input-focus';};" onblur="if(this.value==''){this.value='';this.className='registartion-input-signup';}else{this.className='registartion-input-no-focus';};buttonCheck();" />
|
||||
</div>
|
||||
<div style="clear: both;">
|
||||
</div>
|
||||
<div class="signup-left">
|
||||
Степень интереса<br>к проекту
|
||||
</div>
|
||||
<div class="signup-right">
|
||||
<select name="register_request[interest]" class="registartion-input-signup">
|
||||
<option>Общеобразовательные цели</option>
|
||||
<option>Хочу стать майнтейнером РОСы</option>
|
||||
<option>Хочу собрать в ABF дистрибутив</option>
|
||||
</select>
|
||||
</div>
|
||||
<div style="clear: both;">
|
||||
</div>
|
||||
<div class="signup-left">
|
||||
Также хочу сказать
|
||||
</div>
|
||||
<div class="signup-right">
|
||||
<textarea name="register_request[more]" class="registartion-input-signup" rows="3"></textarea>
|
||||
</div>
|
||||
<div style="clear: both;">
|
||||
</div>
|
||||
|
||||
<div class="button">
|
||||
<input class="button" type="submit" value="Отправить">
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
|
||||
<div style="clear: both;">
|
||||
</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="http://www.rosalab.ru/about">О компании</a> <img src="pics/square.png" alt="_" />
|
||||
</li>
|
||||
<li>
|
||||
<a href="http://www.rosalab.ru/about/contacts">Контакты</a>
|
||||
</li>
|
||||
</ul>
|
||||
</footer>
|
||||
<script type="text/javascript">
|
||||
|
||||
var _gaq = _gaq || [];
|
||||
_gaq.push(['_setAccount', 'UA-29164163-1']);
|
||||
_gaq.push(['_trackPageview']);
|
||||
|
||||
(function() {
|
||||
var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
|
||||
ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
|
||||
var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
|
||||
})();
|
||||
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
Binary file not shown.
After Width: | Height: | Size: 3.9 KiB |
|
@ -240,4 +240,41 @@ footer ul li a {
|
|||
|
||||
footer ul li a:hover {
|
||||
text-decoration: underline;
|
||||
}
|
||||
|
||||
/*language*/
|
||||
|
||||
div.langlist {
|
||||
width: 760px;
|
||||
margin: 0 auto;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
div.lang {
|
||||
float: right;
|
||||
margin: 2px 0px 2px 7px;
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
nav {
|
||||
width: 96px;
|
||||
height: 47px;
|
||||
background: url("../pics/registration.png") no-repeat;
|
||||
float: right;
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
nav p {
|
||||
font-size: 14px;
|
||||
color: #FFF;
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
padding-top: 0px;
|
||||
font-weight: 700;
|
||||
}
|
||||
|
||||
/* custom */
|
||||
|
||||
nav a {
|
||||
text-decoration: none;
|
||||
}
|
|
@ -1,72 +0,0 @@
|
|||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
|
||||
<title>Сборочная среда</title>
|
||||
<script type="text/javascript" src="http://html5shiv.googlecode.com/svn/trunk/html5.js"></script>
|
||||
<link rel="stylesheet" type="text/css" href="styles/prereg.css" />
|
||||
</head>
|
||||
<body>
|
||||
<div class="wrap">
|
||||
<!--Top block-->
|
||||
<header>
|
||||
<div class="logo">
|
||||
</div>
|
||||
|
||||
<div class="text">
|
||||
Платформа разработки и управления жизненным циклом дистрибутивов: от исходного кода до ISO-образов
|
||||
</div>
|
||||
|
||||
<div class="both">
|
||||
</div>
|
||||
</header>
|
||||
|
||||
<!--Page-->
|
||||
<article>
|
||||
<div class="all">
|
||||
<p>
|
||||
<span style="font-size: 28px;">Спасибо!</span><br /><br />
|
||||
Благодарим за интерес к нашему сервису ABF!<br /><br />
|
||||
Приглашение будет выслано вам по указанной электронной почте.<br /><br />
|
||||
Приглашаем Вас на <a href="http://forum.rosalab.ru/viewforum.php?f=10">форум</a> проекта, где мы будем рады ответить на Ваши вопросы и получить Ваши пожелания.<br /><br />
|
||||
Ознакомиться с документацией можно <a href="http://wiki.rosalab.ru/index.php/Сборочная_среда_ABF">здесь</a>.
|
||||
</p>
|
||||
</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="http://www.rosalab.ru/about">О компании</a> <img src="pics/square.png" alt="_" />
|
||||
</li>
|
||||
<li>
|
||||
<a href="http://www.rosalab.ru/about/contacts">Контакты</a>
|
||||
</li>
|
||||
</ul>
|
||||
</footer>
|
||||
<script type="text/javascript">
|
||||
|
||||
var _gaq = _gaq || [];
|
||||
_gaq.push(['_setAccount', 'UA-29164163-1']);
|
||||
_gaq.push(['_trackPageview']);
|
||||
|
||||
(function() {
|
||||
var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
|
||||
ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
|
||||
var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
|
||||
})();
|
||||
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
|
@ -125,12 +125,31 @@ describe Projects::ProjectsController do
|
|||
end
|
||||
|
||||
context 'for other user' do
|
||||
it 'should not be able to fork hidden project' do
|
||||
before(:each) do
|
||||
@user = FactoryGirl.create(:user)
|
||||
set_session_for(@user)
|
||||
end
|
||||
|
||||
it 'should not be able to fork hidden project' do
|
||||
@project.update_attribute(:visibility, 'hidden')
|
||||
post :fork, :owner_name => @project.owner.uname, :project_name => @project.name
|
||||
response.should redirect_to(forbidden_path)
|
||||
end
|
||||
|
||||
it 'should not be able to edit project' do
|
||||
description = @project.description
|
||||
put :update, :project=>{:description =>"hack"}, :owner_name => @project.owner.uname, :project_name => @project.name
|
||||
response.should redirect_to(forbidden_path)
|
||||
Project.find(@project.id).description.should == description
|
||||
end
|
||||
|
||||
it 'should not be able to edit project sections' do
|
||||
has_wiki, has_issues = @project.has_wiki, @project.has_issues
|
||||
post :sections, :project =>{:has_wiki => !has_wiki, :has_issues => !has_issues}, :owner_name => @project.owner.uname, :project_name => @project.name
|
||||
response.should redirect_to(forbidden_path)
|
||||
project = Project.find(@project.id)
|
||||
project.has_wiki.should == has_wiki
|
||||
project.has_issues.should == has_issues
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
Loading…
Reference in New Issue