From d73547d3bcb864c539cb097b1c24ca5aa26f671f Mon Sep 17 00:00:00 2001 From: "konstantin.grabar" Date: Thu, 21 Jun 2012 13:07:20 +0400 Subject: [PATCH 01/19] [refs #521] Remove unnecessary elements. Add some more links --- public/404.html | 23 +++++++---------------- public/500.html | 23 +++++++---------------- 2 files changed, 14 insertions(+), 32 deletions(-) diff --git a/public/404.html b/public/404.html index 1b6717f14..a8ce47791 100644 --- a/public/404.html +++ b/public/404.html @@ -13,23 +13,14 @@ @@ -41,7 +32,7 @@ - +
@@ -51,12 +42,12 @@
- +
- +

Error 404

Page not found

@@ -66,9 +57,9 @@ Or use the search.

- +
- +
diff --git a/public/500.html b/public/500.html index f4a948b0a..b94599412 100644 --- a/public/500.html +++ b/public/500.html @@ -13,23 +13,14 @@ @@ -41,7 +32,7 @@ - +
@@ -51,12 +42,12 @@
- +
- +

Error 500

Something went wrong.
We've been notified about this issue
@@ -68,9 +59,9 @@ Or use the search.

- +

- +
From 10efb2401acfc67c8c696f63af7c34942181357a Mon Sep 17 00:00:00 2001 From: "konstantin.grabar" Date: Thu, 21 Jun 2012 17:49:20 +0400 Subject: [PATCH 02/19] [refs #442] Fix auto_publish select --- app/controllers/platforms/platforms_controller.rb | 2 ++ app/views/platforms/platforms/build_all.html.haml | 2 +- 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/app/controllers/platforms/platforms_controller.rb b/app/controllers/platforms/platforms_controller.rb index 4f8192456..d91f48a1b 100644 --- a/app/controllers/platforms/platforms_controller.rb +++ b/app/controllers/platforms/platforms_controller.rb @@ -17,6 +17,7 @@ class Platforms::PlatformsController < Platforms::BaseController if mass_build.save redirect_to(mass_builds_platform_path(@platform), :notice => t("flash.platform.build_all_success")) else + @auto_publish_selected = params[:auto_publish].present? ? params[:auto_publish].present? : false @mass_builds = MassBuild.by_platform(@platform).order('created_at DESC').paginate(:page => params[:page], :per_page => 20) flash[:warning] = mass_build.errors.full_messages.join('. ') flash[:error] = t("flash.platform.build_all_error") @@ -25,6 +26,7 @@ class Platforms::PlatformsController < Platforms::BaseController def mass_builds @mass_builds = MassBuild.by_platform(@platform).order('created_at DESC').paginate(:page => params[:page], :per_page => 20) + @auto_publish_selected = true render :action => :build_all end diff --git a/app/views/platforms/platforms/build_all.html.haml b/app/views/platforms/platforms/build_all.html.haml index 5a204a00a..f5ed8478a 100644 --- a/app/views/platforms/platforms/build_all.html.haml +++ b/app/views/platforms/platforms/build_all.html.haml @@ -19,7 +19,7 @@ .both %h3= t("activerecord.attributes.build_list.preferences") .both.bottom_20 - = check_box_tag :auto_publish, true, params[:auto_publish].present? ? params[:auto_publish].present? : false, :id => 'auto_publish' + = check_box_tag :auto_publish, true, @auto_publish_selected, :id => 'auto_publish' = label_tag :auto_publish %br From f3bd3bbd7f8d4b044d87cf5b0307a3a78f7b5c36 Mon Sep 17 00:00:00 2001 From: "konstantin.grabar" Date: Fri, 22 Jun 2012 19:10:44 +0400 Subject: [PATCH 03/19] [refs #442] Add mass build counters ant their update. Add failed builds report generate --- .../platforms/platforms_controller.rb | 5 +++ app/models/build_list.rb | 10 +++++- app/models/mass_build.rb | 9 +++++ ...20622092725_add_counters_to_mass_builds.rb | 9 +++++ db/schema.rb | 36 ++++++++++--------- 5 files changed, 52 insertions(+), 17 deletions(-) create mode 100644 db/migrate/20120622092725_add_counters_to_mass_builds.rb diff --git a/app/controllers/platforms/platforms_controller.rb b/app/controllers/platforms/platforms_controller.rb index d9f9d8415..b31fdedbd 100644 --- a/app/controllers/platforms/platforms_controller.rb +++ b/app/controllers/platforms/platforms_controller.rb @@ -31,6 +31,11 @@ class Platforms::PlatformsController < Platforms::BaseController render :action => :build_all end + def get_failed_builds_list + @mass_build = MassBuild.find params[:mass_build_id] + send_file @mass_build.generate_failed_builds_list, :filename => "mass_build_#{@mass_build.id}" + end + def index @platforms = @platforms.accessible_by(current_ability, :related).paginate(:page => params[:page], :per_page => 20) end diff --git a/app/models/build_list.rb b/app/models/build_list.rb index 8daf300ac..895cadaf5 100644 --- a/app/models/build_list.rb +++ b/app/models/build_list.rb @@ -6,7 +6,7 @@ class BuildList < ActiveRecord::Base belongs_to :build_for_platform, :class_name => 'Platform' belongs_to :user belongs_to :advisory - belongs_to :mass_build + belongs_to :mass_build, :counter_cache => true has_many :items, :class_name => "BuildList::Item", :dependent => :destroy has_many :packages, :class_name => "BuildList::Package", :dependent => :destroy @@ -103,6 +103,14 @@ class BuildList < ActiveRecord::Base state_machine :status, :initial => :waiting_for_response do + around_transition do |build_list, transition, block| + if build_list.mass_build + MassBuild.decrement_counter "#{BuildList::HUMAN_STATUSES[build_list.status].to_s}_count", build_list.mass_build_id + block.call + MassBuild.increment_counter "#{BuildList::HUMAN_STATUSES[build_list.status].to_s}_count", build_list.mass_build_id + end + end + after_transition :on => :published, :do => :set_version_and_tag event :place_build do diff --git a/app/models/mass_build.rb b/app/models/mass_build.rb index 1c2f5c3ad..37e950bb0 100644 --- a/app/models/mass_build.rb +++ b/app/models/mass_build.rb @@ -32,4 +32,13 @@ class MassBuild < ActiveRecord::Base :auto_publish => self.auto_publish ) # later with resque end + + def generate_failed_builds_list + report = "" + BuildList.where(:status => BuildServer::BUILD_ERROR, :mass_build_id => self.id).each do |build_list| + report << "ID: #{build_list.id}; " + report << "PROJECT_NAME: #{build_list.project.name}\n" + end + report + end end diff --git a/db/migrate/20120622092725_add_counters_to_mass_builds.rb b/db/migrate/20120622092725_add_counters_to_mass_builds.rb new file mode 100644 index 000000000..a35cd61d2 --- /dev/null +++ b/db/migrate/20120622092725_add_counters_to_mass_builds.rb @@ -0,0 +1,9 @@ +class AddCountersToMassBuilds < ActiveRecord::Migration + def change + add_column :mass_builds, :build_lists_count, :integer, :default => 0 + add_column :mass_builds, :build_published_count, :integer, :default => 0 + add_column :mass_builds, :build_pending_count, :integer, :default => 0 + add_column :mass_builds, :build_started_count, :integer, :default => 0 + add_column :mass_builds, :build_publish_count, :integer, :default => 0 + end +end diff --git a/db/schema.rb b/db/schema.rb index b644b0e4c..ca0d5df26 100644 --- a/db/schema.rb +++ b/db/schema.rb @@ -11,14 +11,14 @@ # # It's strongly recommended to check this file into your version control system. -ActiveRecord::Schema.define(:version => 20120609163454) do +ActiveRecord::Schema.define(:version => 20120622092725) 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| @@ -199,11 +199,16 @@ ActiveRecord::Schema.define(:version => 20120609163454) do create_table "mass_builds", :force => true do |t| t.integer "platform_id" t.string "name" - t.datetime "created_at", :null => false - t.datetime "updated_at", :null => false + t.datetime "created_at", :null => false + t.datetime "updated_at", :null => false t.string "arch_names" t.integer "user_id" - t.boolean "auto_publish", :default => false, :null => false + t.boolean "auto_publish", :default => false, :null => false + t.integer "build_lists_count", :default => 0 + t.integer "build_published_count", :default => 0 + t.integer "build_pending_count", :default => 0 + t.integer "build_started_count", :default => 0 + t.integer "build_publish_count", :default => 0 end create_table "platforms", :force => true do |t| @@ -217,7 +222,7 @@ ActiveRecord::Schema.define(:version => 20120609163454) do t.string "owner_type" t.string "visibility", :default => "open", :null => false t.string "platform_type", :default => "main", :null => false - t.string "distrib_type", :null => false + t.string "distrib_type" end add_index "platforms", ["name"], :name => "index_platforms_on_name", :unique => true, :case_sensitive => false @@ -288,27 +293,25 @@ ActiveRecord::Schema.define(:version => 20120609163454) do t.text "description" t.string "ancestry" t.boolean "has_issues", :default => true + t.boolean "has_wiki", :default => false t.string "srpm_file_name" t.string "srpm_content_type" t.integer "srpm_file_size" t.datetime "srpm_updated_at" - t.boolean "has_wiki", :default => false t.string "default_branch", :default => "master" 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 - add_index "projects", ["owner_id"], :name => "index_projects_on_name_and_owner_id_and_owner_type", :unique => true, :case_sensitive => false - create_table "register_requests", :force => true do |t| t.string "name" t.string "email" t.string "token" t.boolean "approved", :default => false t.boolean "rejected", :default => false - t.datetime "created_at" - t.datetime "updated_at" + t.datetime "created_at", :null => false + t.datetime "updated_at", :null => false t.string "interest" t.text "more" end @@ -362,6 +365,7 @@ ActiveRecord::Schema.define(:version => 20120609163454) do t.string "name" 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 "remember_created_at" t.datetime "created_at" @@ -369,8 +373,11 @@ ActiveRecord::Schema.define(:version => 20120609163454) do t.string "uname" t.string "role" t.string "language", :default => "en" - t.datetime "reset_password_sent_at" + 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" @@ -382,9 +389,6 @@ ActiveRecord::Schema.define(:version => 20120609163454) do t.integer "failed_attempts", :default => 0 t.string "unlock_token" t.datetime "locked_at" - t.string "confirmation_token" - t.datetime "confirmed_at" - t.datetime "confirmation_sent_at" t.string "authentication_token" t.integer "build_priority", :default => 50 end From bdb97b88910a1f06073a40d223be442b73769fd4 Mon Sep 17 00:00:00 2001 From: "konstantin.grabar" Date: Mon, 25 Jun 2012 19:20:35 +0400 Subject: [PATCH 04/19] [refs #442] Add statistics data to mass builds. Small refactor for report --- app/assets/stylesheets/design/custom.scss | 5 +++ .../platforms/platforms/build_all.html.haml | 39 +++++++++++++++---- config/locales/models/build_list.en.yml | 1 + config/locales/models/build_list.ru.yml | 1 + config/locales/models/mass_build.en.yml | 1 + config/locales/models/mass_build.ru.yml | 1 + 6 files changed, 40 insertions(+), 8 deletions(-) diff --git a/app/assets/stylesheets/design/custom.scss b/app/assets/stylesheets/design/custom.scss index 4766fb536..5e9eba6d4 100644 --- a/app/assets/stylesheets/design/custom.scss +++ b/app/assets/stylesheets/design/custom.scss @@ -1080,3 +1080,8 @@ form.mass_build section.left { form.mass_build section.right { margin-right: 50px; } + +.collapse { + overflow: hidden; + padding-top: 10px; +} diff --git a/app/views/platforms/platforms/build_all.html.haml b/app/views/platforms/platforms/build_all.html.haml index f5ed8478a..4f1d4bd6b 100644 --- a/app/views/platforms/platforms/build_all.html.haml +++ b/app/views/platforms/platforms/build_all.html.haml @@ -30,16 +30,39 @@ %tr %th.lpadding16= t('activerecord.attributes.mass_build.id') %th.lpadding16= t('activerecord.attributes.mass_build.name') - %th.lpadding16= t('activerecord.attributes.mass_build.arch_names') - %th.lpadding16= t('activerecord.attributes.mass_build.user') - %th.lpadding16= t('activerecord.attributes.mass_build.auto_publish') - %th.lpadding16= t('activerecord.attributes.mass_build.created_at') + %th.lpadding16= t("layout.build_lists.all").camelize + %th.lpadding16= t("layout.build_lists.statuses.build_published").camelize + %th.lpadding16= t("layout.build_lists.statuses.build_pending").camelize + %th.lpadding16= t("layout.build_lists.statuses.build_started").camelize + %th.lpadding16= t("layout.build_lists.statuses.build_publish").camelize + %th.lpadding16= t("layout.mass_builds.extended_data") - @mass_builds.each do |mass_build| %tr %td= mass_build.id %td= link_to mass_build.name, build_lists_path(:filter => {:mass_build_id => mass_build.id}) - %td= mass_build.arch_names - %td= link_to mass_build.user.fullname, mass_build.user - %td= mass_build.auto_publish - %td= mass_build.created_at + %td= mass_build.build_lists_count + %td= mass_build.build_published_count + %td= mass_build.build_pending_count + %td= mass_build.build_started_count + %td= mass_build.build_publish_count + %td + %a{:href => '#', :'data-toggle' => "collapse", :'data-target' => "#collapse_#{ mass_build.id }"}= t("layout.mass_builds.extended_data") + .in.collapse{:id => "collapse_#{ mass_build.id }"} + = t('activerecord.attributes.mass_build.arch_names') + ": " + = mass_build.arch_names + .both + = t('activerecord.attributes.mass_build.user') + ": " + = link_to mass_build.user.fullname, mass_build.user + .both + = t('activerecord.attributes.mass_build.auto_publish') + ": " + = mass_build.auto_publish + .both + = t('activerecord.attributes.mass_build.created_at') + ": " + = mass_build.created_at + .both = will_paginate @mass_builds + += javascript_include_tag "lib/bootstrap-collapse" + +:javascript + $(".collapse").collapse(); diff --git a/config/locales/models/build_list.en.yml b/config/locales/models/build_list.en.yml index 33c24080e..9b8f0c912 100644 --- a/config/locales/models/build_list.en.yml +++ b/config/locales/models/build_list.en.yml @@ -45,6 +45,7 @@ en: layout: build_lists: + all: All filter_header: Filter current: Curent created_at_start: "Build to start on:" diff --git a/config/locales/models/build_list.ru.yml b/config/locales/models/build_list.ru.yml index 34b2dbdf8..41c4054e8 100644 --- a/config/locales/models/build_list.ru.yml +++ b/config/locales/models/build_list.ru.yml @@ -44,6 +44,7 @@ ru: layout: build_lists: + all: Все filter_header: Фильтр current: Текущие created_at_start: "Время постановки на сборку с:" diff --git a/config/locales/models/mass_build.en.yml b/config/locales/models/mass_build.en.yml index 9d60859d1..cd583015c 100644 --- a/config/locales/models/mass_build.en.yml +++ b/config/locales/models/mass_build.en.yml @@ -2,6 +2,7 @@ en: layout: mass_builds: repositories: Repositories + extended_data: Extended data activerecord: models: mass_build: Mass Build diff --git a/config/locales/models/mass_build.ru.yml b/config/locales/models/mass_build.ru.yml index 2954a4101..4f7e67d31 100644 --- a/config/locales/models/mass_build.ru.yml +++ b/config/locales/models/mass_build.ru.yml @@ -2,6 +2,7 @@ ru: layout: mass_builds: repositories: Репозитории + extended_data: Дополнительные данные activerecord: models: mass_build: Массовая Сборка From fc00f713b520892d070270e27a80a514729bdeb3 Mon Sep 17 00:00:00 2001 From: "konstantin.grabar" Date: Wed, 27 Jun 2012 13:48:54 +0400 Subject: [PATCH 05/19] [refs #442] Add counters update checking. Add build_error counter --- app/models/build_list.rb | 4 ++-- app/models/mass_build.rb | 9 +++++++++ app/views/platforms/platforms/build_all.html.haml | 2 ++ config/locales/models/mass_build.ru.yml | 2 +- db/migrate/20120622092725_add_counters_to_mass_builds.rb | 1 + 5 files changed, 15 insertions(+), 3 deletions(-) diff --git a/app/models/build_list.rb b/app/models/build_list.rb index 8d323cdf6..d3f4f487e 100644 --- a/app/models/build_list.rb +++ b/app/models/build_list.rb @@ -105,9 +105,9 @@ class BuildList < ActiveRecord::Base around_transition do |build_list, transition, block| if build_list.mass_build - MassBuild.decrement_counter "#{BuildList::HUMAN_STATUSES[build_list.status].to_s}_count", build_list.mass_build_id + MassBuild.decrement_counter "#{BuildList::HUMAN_STATUSES[build_list.status].to_s}_count", build_list.mass_build_id if MassBuild::COUNT_STATUSES.include?(build_list.status) block.call - MassBuild.increment_counter "#{BuildList::HUMAN_STATUSES[build_list.status].to_s}_count", build_list.mass_build_id + MassBuild.increment_counter "#{BuildList::HUMAN_STATUSES[build_list.status].to_s}_count", build_list.mass_build_id if MassBuild::COUNT_STATUSES.include?(build_list.status) end end diff --git a/app/models/mass_build.rb b/app/models/mass_build.rb index 37e950bb0..3c13d754a 100644 --- a/app/models/mass_build.rb +++ b/app/models/mass_build.rb @@ -12,6 +12,15 @@ class MassBuild < ActiveRecord::Base after_create :build_all + COUNT_STATUSES = [ + :build_lists, + :build_published, + :build_pending, + :build_started, + :build_publish, + :build_error + ] + def initialize(args = nil) super diff --git a/app/views/platforms/platforms/build_all.html.haml b/app/views/platforms/platforms/build_all.html.haml index 4f1d4bd6b..237de5dd5 100644 --- a/app/views/platforms/platforms/build_all.html.haml +++ b/app/views/platforms/platforms/build_all.html.haml @@ -35,6 +35,7 @@ %th.lpadding16= t("layout.build_lists.statuses.build_pending").camelize %th.lpadding16= t("layout.build_lists.statuses.build_started").camelize %th.lpadding16= t("layout.build_lists.statuses.build_publish").camelize + %th.lpadding16= t("layout.build_lists.statuses.build_error").camelize %th.lpadding16= t("layout.mass_builds.extended_data") - @mass_builds.each do |mass_build| %tr @@ -45,6 +46,7 @@ %td= mass_build.build_pending_count %td= mass_build.build_started_count %td= mass_build.build_publish_count + %td= mass_build.build_error_count %td %a{:href => '#', :'data-toggle' => "collapse", :'data-target' => "#collapse_#{ mass_build.id }"}= t("layout.mass_builds.extended_data") .in.collapse{:id => "collapse_#{ mass_build.id }"} diff --git a/config/locales/models/mass_build.ru.yml b/config/locales/models/mass_build.ru.yml index 4f7e67d31..a8c09b6dd 100644 --- a/config/locales/models/mass_build.ru.yml +++ b/config/locales/models/mass_build.ru.yml @@ -2,7 +2,7 @@ ru: layout: mass_builds: repositories: Репозитории - extended_data: Дополнительные данные + extended_data: Параметры задания activerecord: models: mass_build: Массовая Сборка diff --git a/db/migrate/20120622092725_add_counters_to_mass_builds.rb b/db/migrate/20120622092725_add_counters_to_mass_builds.rb index a35cd61d2..5b0ed2e73 100644 --- a/db/migrate/20120622092725_add_counters_to_mass_builds.rb +++ b/db/migrate/20120622092725_add_counters_to_mass_builds.rb @@ -5,5 +5,6 @@ class AddCountersToMassBuilds < ActiveRecord::Migration add_column :mass_builds, :build_pending_count, :integer, :default => 0 add_column :mass_builds, :build_started_count, :integer, :default => 0 add_column :mass_builds, :build_publish_count, :integer, :default => 0 + add_column :mass_builds, :build_error_count, :integer, :default => 0 end end From b6d769ad66afcbd7872dfff20812f9870ebfd953 Mon Sep 17 00:00:00 2001 From: "konstantin.grabar" Date: Wed, 27 Jun 2012 18:06:59 +0400 Subject: [PATCH 06/19] [refs #442] Change mass builds table --- app/assets/stylesheets/design/custom.scss | 4 +++ .../platforms/platforms_controller.rb | 4 +-- .../platforms/platforms/build_all.html.haml | 36 ++++++++++++------- config/locales/models/mass_build.en.yml | 2 ++ config/locales/models/mass_build.ru.yml | 2 ++ config/routes.rb | 3 ++ db/schema.rb | 1 + 7 files changed, 37 insertions(+), 15 deletions(-) diff --git a/app/assets/stylesheets/design/custom.scss b/app/assets/stylesheets/design/custom.scss index 5e9eba6d4..29b395cf3 100644 --- a/app/assets/stylesheets/design/custom.scss +++ b/app/assets/stylesheets/design/custom.scss @@ -1085,3 +1085,7 @@ form.mass_build section.right { overflow: hidden; padding-top: 10px; } + +.min_width_120 { + min-width: 120px; +} diff --git a/app/controllers/platforms/platforms_controller.rb b/app/controllers/platforms/platforms_controller.rb index 2e4d3d329..e76800647 100644 --- a/app/controllers/platforms/platforms_controller.rb +++ b/app/controllers/platforms/platforms_controller.rb @@ -31,9 +31,9 @@ class Platforms::PlatformsController < Platforms::BaseController render :action => :build_all end - def get_failed_builds_list + def failed_builds_list @mass_build = MassBuild.find params[:mass_build_id] - send_file @mass_build.generate_failed_builds_list, :filename => "mass_build_#{@mass_build.id}" + render :text => @mass_build.generate_failed_builds_list end def index diff --git a/app/views/platforms/platforms/build_all.html.haml b/app/views/platforms/platforms/build_all.html.haml index 237de5dd5..d29d95dd1 100644 --- a/app/views/platforms/platforms/build_all.html.haml +++ b/app/views/platforms/platforms/build_all.html.haml @@ -30,25 +30,35 @@ %tr %th.lpadding16= t('activerecord.attributes.mass_build.id') %th.lpadding16= t('activerecord.attributes.mass_build.name') - %th.lpadding16= t("layout.build_lists.all").camelize - %th.lpadding16= t("layout.build_lists.statuses.build_published").camelize - %th.lpadding16= t("layout.build_lists.statuses.build_pending").camelize - %th.lpadding16= t("layout.build_lists.statuses.build_started").camelize - %th.lpadding16= t("layout.build_lists.statuses.build_publish").camelize - %th.lpadding16= t("layout.build_lists.statuses.build_error").camelize + %th.lpadding16= t("layout.mass_builds.statuses") + %th.lpadding16= t("layout.mass_builds.failed_builds_list") %th.lpadding16= t("layout.mass_builds.extended_data") - @mass_builds.each do |mass_build| %tr %td= mass_build.id %td= link_to mass_build.name, build_lists_path(:filter => {:mass_build_id => mass_build.id}) - %td= mass_build.build_lists_count - %td= mass_build.build_published_count - %td= mass_build.build_pending_count - %td= mass_build.build_started_count - %td= mass_build.build_publish_count - %td= mass_build.build_error_count + %td.min_width_120 + = t("layout.build_lists.all") + ": " + = mass_build.build_lists_count + .both + = t("layout.build_lists.statuses.build_published") + ": " + = mass_build.build_published_count + .both + = t("layout.build_lists.statuses.build_pending") + ": " + = mass_build.build_pending_count + .both + = t("layout.build_lists.statuses.build_started") + ": " + = mass_build.build_started_count + .both + = t("layout.build_lists.statuses.build_publish") + ": " + = mass_build.build_publish_count + .both + = t("layout.build_lists.statuses.build_error") + ": " + = mass_build.build_error_count + .both + %td= link_to t("layout.mass_builds.failed_builds_list"), failed_builds_list_platforms_path(:mass_build_id => mass_build.id), :target => "_blank" %td - %a{:href => '#', :'data-toggle' => "collapse", :'data-target' => "#collapse_#{ mass_build.id }"}= t("layout.mass_builds.extended_data") + %a{:href => "collapse_#{ mass_build.id }", :'data-toggle' => "collapse", :'data-target' => "#collapse_#{ mass_build.id }"}= t("layout.mass_builds.extended_data") .in.collapse{:id => "collapse_#{ mass_build.id }"} = t('activerecord.attributes.mass_build.arch_names') + ": " = mass_build.arch_names diff --git a/config/locales/models/mass_build.en.yml b/config/locales/models/mass_build.en.yml index cd583015c..508bc8507 100644 --- a/config/locales/models/mass_build.en.yml +++ b/config/locales/models/mass_build.en.yml @@ -3,6 +3,8 @@ en: mass_builds: repositories: Repositories extended_data: Extended data + failed_builds_list: Failed Builds List + statuses: Statuses activerecord: models: mass_build: Mass Build diff --git a/config/locales/models/mass_build.ru.yml b/config/locales/models/mass_build.ru.yml index a8c09b6dd..b5d0fee6f 100644 --- a/config/locales/models/mass_build.ru.yml +++ b/config/locales/models/mass_build.ru.yml @@ -3,6 +3,8 @@ ru: mass_builds: repositories: Репозитории extended_data: Параметры задания + failed_builds_list: Список ошибок сборок + statuses: Статусы activerecord: models: mass_build: Массовая Сборка diff --git a/config/routes.rb b/config/routes.rb index e8297ffc5..f6fec3ff7 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -55,6 +55,9 @@ Rosa::Application.routes.draw do get :mass_builds get :advisories end + collection do + get :failed_builds_list + end get :autocomplete_user_uname, :on => :collection resources :repositories do member do diff --git a/db/schema.rb b/db/schema.rb index ca0d5df26..06ac06651 100644 --- a/db/schema.rb +++ b/db/schema.rb @@ -209,6 +209,7 @@ ActiveRecord::Schema.define(:version => 20120622092725) do t.integer "build_pending_count", :default => 0 t.integer "build_started_count", :default => 0 t.integer "build_publish_count", :default => 0 + t.integer "build_error_count", :default => 0 end create_table "platforms", :force => true do |t| From 126f58ac8567121cb195142e23ed4fe88c5c53a4 Mon Sep 17 00:00:00 2001 From: Vladimir Sharshov Date: Wed, 27 Jun 2012 18:57:30 +0400 Subject: [PATCH 07/19] Fix publication for old version of build client --- app/models/build_list.rb | 2 ++ 1 file changed, 2 insertions(+) diff --git a/app/models/build_list.rb b/app/models/build_list.rb index b46bd1eba..378aea363 100644 --- a/app/models/build_list.rb +++ b/app/models/build_list.rb @@ -172,6 +172,8 @@ class BuildList < ActiveRecord::Base def set_version_and_tag pkg = self.packages.where(:package_type => 'source', :project_id => self.project_id).first + # TODO: remove 'return' after deployment ABF kernel 2.0 + return if pkg.nil? # For old client that does not sends data about packages self.package_version = "#{pkg.platform.name}-#{pkg.version}-#{pkg.release}" system("cd #{self.project.git_repository.path} && git tag #{self.package_version} #{self.commit_hash}") # TODO REDO through grit save From 4187ef8873c611f66bd8b04a0640a960c781e913 Mon Sep 17 00:00:00 2001 From: "konstantin.grabar" Date: Wed, 27 Jun 2012 19:32:29 +0400 Subject: [PATCH 08/19] [refs #442] Add links for statuses --- app/views/platforms/platforms/build_all.html.haml | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/app/views/platforms/platforms/build_all.html.haml b/app/views/platforms/platforms/build_all.html.haml index d29d95dd1..d486ac526 100644 --- a/app/views/platforms/platforms/build_all.html.haml +++ b/app/views/platforms/platforms/build_all.html.haml @@ -38,22 +38,22 @@ %td= mass_build.id %td= link_to mass_build.name, build_lists_path(:filter => {:mass_build_id => mass_build.id}) %td.min_width_120 - = t("layout.build_lists.all") + ": " + = link_to t("layout.build_lists.all") + ": ", build_lists_path = mass_build.build_lists_count .both - = t("layout.build_lists.statuses.build_published") + ": " + = link_to t("layout.build_lists.statuses.build_published") + ": ", build_lists_path(:filter => {:status => BuildList::BUILD_PUBLISHED, :mass_build_id => mass_build.id}) = mass_build.build_published_count .both - = t("layout.build_lists.statuses.build_pending") + ": " + = link_to t("layout.build_lists.statuses.build_pending") + ": ", build_lists_path(:filter => {:status => BuildList::BUILD_PENDING, :mass_build_id => mass_build.id}) = mass_build.build_pending_count .both - = t("layout.build_lists.statuses.build_started") + ": " + = link_to t("layout.build_lists.statuses.build_started") + ": ", build_lists_path(:filter => {:status => BuildServer::BUILD_STARTED, :mass_build_id => mass_build.id}) = mass_build.build_started_count .both - = t("layout.build_lists.statuses.build_publish") + ": " + = link_to t("layout.build_lists.statuses.build_publish") + ": ", build_lists_path(:filter => {:status => BuildList::BUILD_PUBLISH, :mass_build_id => mass_build.id}) = mass_build.build_publish_count .both - = t("layout.build_lists.statuses.build_error") + ": " + = link_to t("layout.build_lists.statuses.build_error") + ": ", build_lists_path(:filter => {:status => BuildServer::BUILD_ERROR, :mass_build_id => mass_build.id}) = mass_build.build_error_count .both %td= link_to t("layout.mass_builds.failed_builds_list"), failed_builds_list_platforms_path(:mass_build_id => mass_build.id), :target => "_blank" From 10aed58bdd847c9fbc861105f8bacba3ebe951eb Mon Sep 17 00:00:00 2001 From: "konstantin.grabar" Date: Thu, 28 Jun 2012 15:31:25 +0400 Subject: [PATCH 09/19] [refs #442] Small refactor. Remove bootstrap collapse --- app/assets/javascripts/application.js | 10 ++ .../javascripts/lib/bootstrap-collapse.js | 157 ------------------ app/assets/stylesheets/design/custom.scss | 4 +- .../platforms/platforms_controller.rb | 2 +- .../platforms/platforms/build_all.html.haml | 32 +--- config/locales/models/build_list.en.yml | 2 +- config/locales/models/build_list.ru.yml | 2 +- 7 files changed, 22 insertions(+), 187 deletions(-) delete mode 100644 app/assets/javascripts/lib/bootstrap-collapse.js diff --git a/app/assets/javascripts/application.js b/app/assets/javascripts/application.js index 9d8340566..50a2a47c5 100644 --- a/app/assets/javascripts/application.js +++ b/app/assets/javascripts/application.js @@ -71,4 +71,14 @@ $(document).ready(function() { } }); + $(".toggle_btn").click(function() { + var target = $( $(this).attr('data-target') ); + //target.toggle(); + if ( target.css('visibility') == 'hidden' ) { + target.css('visibility', 'visible'); + } else { + target.css('visibility', 'hidden'); + } + return false; + }); }); diff --git a/app/assets/javascripts/lib/bootstrap-collapse.js b/app/assets/javascripts/lib/bootstrap-collapse.js deleted file mode 100644 index fbc915b9f..000000000 --- a/app/assets/javascripts/lib/bootstrap-collapse.js +++ /dev/null @@ -1,157 +0,0 @@ -/* ============================================================= - * bootstrap-collapse.js v2.0.4 - * http://twitter.github.com/bootstrap/javascript.html#collapse - * ============================================================= - * Copyright 2012 Twitter, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * ============================================================ */ - - -!function ($) { - - "use strict"; // jshint ;_; - - - /* COLLAPSE PUBLIC CLASS DEFINITION - * ================================ */ - - var Collapse = function (element, options) { - this.$element = $(element) - this.options = $.extend({}, $.fn.collapse.defaults, options) - - if (this.options.parent) { - this.$parent = $(this.options.parent) - } - - this.options.toggle && this.toggle() - } - - Collapse.prototype = { - - constructor: Collapse - - , dimension: function () { - var hasWidth = this.$element.hasClass('width') - return hasWidth ? 'width' : 'height' - } - - , show: function () { - var dimension - , scroll - , actives - , hasData - - if (this.transitioning) return - - dimension = this.dimension() - scroll = $.camelCase(['scroll', dimension].join('-')) - actives = this.$parent && this.$parent.find('> .accordion-group > .in') - - if (actives && actives.length) { - hasData = actives.data('collapse') - if (hasData && hasData.transitioning) return - actives.collapse('hide') - hasData || actives.data('collapse', null) - } - - this.$element[dimension](0) - this.transition('addClass', $.Event('show'), 'shown') - this.$element[dimension](this.$element[0][scroll]) - } - - , hide: function () { - var dimension - if (this.transitioning) return - dimension = this.dimension() - this.reset(this.$element[dimension]()) - this.transition('removeClass', $.Event('hide'), 'hidden') - this.$element[dimension](0) - } - - , reset: function (size) { - var dimension = this.dimension() - - this.$element - .removeClass('collapse') - [dimension](size || 'auto') - [0].offsetWidth - - this.$element[size !== null ? 'addClass' : 'removeClass']('collapse') - - return this - } - - , transition: function (method, startEvent, completeEvent) { - var that = this - , complete = function () { - if (startEvent.type == 'show') that.reset() - that.transitioning = 0 - that.$element.trigger(completeEvent) - } - - this.$element.trigger(startEvent) - - if (startEvent.isDefaultPrevented()) return - - this.transitioning = 1 - - this.$element[method]('in') - - $.support.transition && this.$element.hasClass('collapse') ? - this.$element.one($.support.transition.end, complete) : - complete() - } - - , toggle: function () { - this[this.$element.hasClass('in') ? 'hide' : 'show']() - } - - } - - - /* COLLAPSIBLE PLUGIN DEFINITION - * ============================== */ - - $.fn.collapse = function (option) { - return this.each(function () { - var $this = $(this) - , data = $this.data('collapse') - , options = typeof option == 'object' && option - if (!data) $this.data('collapse', (data = new Collapse(this, options))) - if (typeof option == 'string') data[option]() - }) - } - - $.fn.collapse.defaults = { - toggle: true - } - - $.fn.collapse.Constructor = Collapse - - - /* COLLAPSIBLE DATA-API - * ==================== */ - - $(function () { - $('body').on('click.collapse.data-api', '[data-toggle=collapse]', function ( e ) { - var $this = $(this), href - , target = $this.attr('data-target') - || e.preventDefault() - || (href = $this.attr('href')) && href.replace(/.*(?=#[^\s]+$)/, '') //strip for ie7 - , option = $(target).data('collapse') ? 'toggle' : $this.data() - $(target).collapse(option) - }) - }) - -}(window.jQuery); \ No newline at end of file diff --git a/app/assets/stylesheets/design/custom.scss b/app/assets/stylesheets/design/custom.scss index 29b395cf3..d88c62891 100644 --- a/app/assets/stylesheets/design/custom.scss +++ b/app/assets/stylesheets/design/custom.scss @@ -1081,9 +1081,11 @@ form.mass_build section.right { margin-right: 50px; } -.collapse { +.toggle { overflow: hidden; padding-top: 10px; + display: block; + visibility: hidden; } .min_width_120 { diff --git a/app/controllers/platforms/platforms_controller.rb b/app/controllers/platforms/platforms_controller.rb index e76800647..14058ba36 100644 --- a/app/controllers/platforms/platforms_controller.rb +++ b/app/controllers/platforms/platforms_controller.rb @@ -18,7 +18,7 @@ class Platforms::PlatformsController < Platforms::BaseController if mass_build.save redirect_to(mass_builds_platform_path(@platform), :notice => t("flash.platform.build_all_success")) else - @auto_publish_selected = params[:auto_publish].present? ? params[:auto_publish].present? : false + @auto_publish_selected = params[:auto_publish].present? @mass_builds = MassBuild.by_platform(@platform).order('created_at DESC').paginate(:page => params[:page], :per_page => 20) flash[:warning] = mass_build.errors.full_messages.join('. ') flash[:error] = t("flash.platform.build_all_error") diff --git a/app/views/platforms/platforms/build_all.html.haml b/app/views/platforms/platforms/build_all.html.haml index d486ac526..67b275ac9 100644 --- a/app/views/platforms/platforms/build_all.html.haml +++ b/app/views/platforms/platforms/build_all.html.haml @@ -38,28 +38,14 @@ %td= mass_build.id %td= link_to mass_build.name, build_lists_path(:filter => {:mass_build_id => mass_build.id}) %td.min_width_120 - = link_to t("layout.build_lists.all") + ": ", build_lists_path - = mass_build.build_lists_count - .both - = link_to t("layout.build_lists.statuses.build_published") + ": ", build_lists_path(:filter => {:status => BuildList::BUILD_PUBLISHED, :mass_build_id => mass_build.id}) - = mass_build.build_published_count - .both - = link_to t("layout.build_lists.statuses.build_pending") + ": ", build_lists_path(:filter => {:status => BuildList::BUILD_PENDING, :mass_build_id => mass_build.id}) - = mass_build.build_pending_count - .both - = link_to t("layout.build_lists.statuses.build_started") + ": ", build_lists_path(:filter => {:status => BuildServer::BUILD_STARTED, :mass_build_id => mass_build.id}) - = mass_build.build_started_count - .both - = link_to t("layout.build_lists.statuses.build_publish") + ": ", build_lists_path(:filter => {:status => BuildList::BUILD_PUBLISH, :mass_build_id => mass_build.id}) - = mass_build.build_publish_count - .both - = link_to t("layout.build_lists.statuses.build_error") + ": ", build_lists_path(:filter => {:status => BuildServer::BUILD_ERROR, :mass_build_id => mass_build.id}) - = mass_build.build_error_count - .both + - MassBuild::COUNT_STATUSES.each do |status| + = link_to t("layout.build_lists.statuses.#{status}") + ": ", build_lists_path(:filter => {:status => status, :mass_build_id => mass_build.id}) + = mass_build.read_attribute "#{status}_count" + .both %td= link_to t("layout.mass_builds.failed_builds_list"), failed_builds_list_platforms_path(:mass_build_id => mass_build.id), :target => "_blank" %td - %a{:href => "collapse_#{ mass_build.id }", :'data-toggle' => "collapse", :'data-target' => "#collapse_#{ mass_build.id }"}= t("layout.mass_builds.extended_data") - .in.collapse{:id => "collapse_#{ mass_build.id }"} + %a.toggle_btn{:href => "#toggle_#{ mass_build.id }", :'data-target' => "#toggle_#{ mass_build.id }"}= t("layout.mass_builds.extended_data") + .toggle{:id => "toggle_#{ mass_build.id }"} = t('activerecord.attributes.mass_build.arch_names') + ": " = mass_build.arch_names .both @@ -71,10 +57,4 @@ .both = t('activerecord.attributes.mass_build.created_at') + ": " = mass_build.created_at - .both = will_paginate @mass_builds - -= javascript_include_tag "lib/bootstrap-collapse" - -:javascript - $(".collapse").collapse(); diff --git a/config/locales/models/build_list.en.yml b/config/locales/models/build_list.en.yml index 9b8f0c912..139ae436b 100644 --- a/config/locales/models/build_list.en.yml +++ b/config/locales/models/build_list.en.yml @@ -45,7 +45,6 @@ en: layout: build_lists: - all: All filter_header: Filter current: Curent created_at_start: "Build to start on:" @@ -98,6 +97,7 @@ en: git_error: Git error statuses: + build_lists: All build_error: Build error build_published: Build has been published rejected_publish: Publishing rejected diff --git a/config/locales/models/build_list.ru.yml b/config/locales/models/build_list.ru.yml index 41c4054e8..910292188 100644 --- a/config/locales/models/build_list.ru.yml +++ b/config/locales/models/build_list.ru.yml @@ -44,7 +44,6 @@ ru: layout: build_lists: - all: Все filter_header: Фильтр current: Текущие created_at_start: "Время постановки на сборку с:" @@ -97,6 +96,7 @@ ru: git_error: проблема с гит statuses: + build_lists: Всего build_error: ошибка сборки build_published: опубликован rejected_publish: публикация отклонена From 46161253ab46644db05ab1d1016092ad9dac176e Mon Sep 17 00:00:00 2001 From: Vladimir Sharshov Date: Thu, 28 Jun 2012 19:54:58 +0400 Subject: [PATCH 10/19] [refs #462] Product status does not change --- app/controllers/platforms/product_build_lists_controller.rb | 3 ++- config/routes.rb | 2 +- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/app/controllers/platforms/product_build_lists_controller.rb b/app/controllers/platforms/product_build_lists_controller.rb index daab1ef25..e749c4865 100644 --- a/app/controllers/platforms/product_build_lists_controller.rb +++ b/app/controllers/platforms/product_build_lists_controller.rb @@ -46,7 +46,8 @@ class Platforms::ProductBuildListsController < Platforms::BaseController end def authenticate_product_builder! - unless APP_CONFIG['product_builder_ip'].values.include?(request.remote_ip) + # FIXME: Rails(?) interpret the internal IP as 127.0.0.1 + unless (APP_CONFIG['product_builder_ip'].values + ["127.0.0.1"]).include?(request.remote_ip) render :nothing => true, :status => 403 end end diff --git a/config/routes.rb b/config/routes.rb index f6fec3ff7..16ba0f84f 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -74,6 +74,7 @@ Rosa::Application.routes.draw do match '/private/:platform_name/*file_path' => 'privates#show' resources :product_build_lists, :only => [:index] + match 'product_status', :to => 'product_build_lists#status_build' end scope :module => 'users' do @@ -117,7 +118,6 @@ Rosa::Application.routes.draw do match 'build_lists/pre_build', :to => "build_lists#pre_build" match 'build_lists/circle_build', :to => "build_lists#circle_build" match 'build_lists/new_bbdt', :to => "build_lists#new_bbdt" - match 'product_status', :to => 'product_build_lists#status_build' resources :build_lists, :only => [:index, :show, :update] do member do From 7561abca081a92f94518a4b784a7ef4004cfe70e Mon Sep 17 00:00:00 2001 From: Vladimir Sharshov Date: Thu, 28 Jun 2012 21:40:32 +0400 Subject: [PATCH 11/19] [refs #462] refactoring: remove notified_at --- .../product_build_lists_controller.rb | 3 +- app/models/product_build_list.rb | 4 +-- .../_product_build_list.html.haml | 3 +- .../product_build_lists/index.html.haml | 1 - .../locales/models/product_build_list.en.yml | 2 +- ...120628165702_remove_product_notified_at.rb | 9 ++++++ db/schema.rb | 28 +++++++++---------- spec/models/product_build_list_spec.rb | 1 - 8 files changed, 28 insertions(+), 23 deletions(-) create mode 100644 db/migrate/20120628165702_remove_product_notified_at.rb diff --git a/app/controllers/platforms/product_build_lists_controller.rb b/app/controllers/platforms/product_build_lists_controller.rb index e749c4865..9531cd68c 100644 --- a/app/controllers/platforms/product_build_lists_controller.rb +++ b/app/controllers/platforms/product_build_lists_controller.rb @@ -11,14 +11,13 @@ class Platforms::ProductBuildListsController < Platforms::BaseController before_filter :find_product_build_list, :only => [:status_build] def create - @product.product_build_lists.create! :base_url => "http://#{request.host_with_port}", :notified_at => Time.current + @product.product_build_lists.create! :base_url => "http://#{request.host_with_port}" flash[:notice] = t('flash.product.build_started') redirect_to [@platform, @product] end def status_build @product_build_list.status = params[:status].to_i # ProductBuildList::BUILD_COMPLETED : ProductBuildList::BUILD_FAILED) - @product_build_list.notified_at = Time.current @product_build_list.save! render :nothing => true end diff --git a/app/models/product_build_list.rb b/app/models/product_build_list.rb index eb7569b61..774f1d0ca 100644 --- a/app/models/product_build_list.rb +++ b/app/models/product_build_list.rb @@ -20,11 +20,11 @@ class ProductBuildList < ActiveRecord::Base validates :status, :inclusion => { :in => [BUILD_STARTED, BUILD_COMPLETED, BUILD_FAILED] } attr_accessor :base_url - attr_accessible :status, :notified_at, :base_url + attr_accessible :status, :base_url attr_readonly :product_id - scope :default_order, order('notified_at DESC') + scope :default_order, order('updated_at DESC') scope :for_status, lambda {|status| where(:status => status) } scope :for_user, lambda { |user| where(:user_id => user.id) } scope :scoped_to_product_name, lambda {|product_name| joins(:product).where('products.name LIKE ?', "%#{product_name}%")} diff --git a/app/views/platforms/product_build_lists/_product_build_list.html.haml b/app/views/platforms/product_build_lists/_product_build_list.html.haml index ac8dcf130..47cd0d8a5 100644 --- a/app/views/platforms/product_build_lists/_product_build_list.html.haml +++ b/app/views/platforms/product_build_lists/_product_build_list.html.haml @@ -3,6 +3,5 @@ %td= product_build_list.human_status %td= link_to nil, product_build_list.container_path %td= link_to product_build_list.product.name, platform_product_path(product_build_list.product.platform, product_build_list.product) - -#%td= link_to product_build_list.user.try(:fullname), product_build_list.user %td= link_to image_tag('x.png'), platform_product_product_build_list_path(product_build_list.product.platform, product_build_list.product, product_build_list), :method => :delete, :confirm => t("layout.confirm") if can? :destroy, product_build_list - %td= l(product_build_list.notified_at, :format => :long) + %td= l(product_build_list.updated_at, :format => :long) \ No newline at end of file diff --git a/app/views/platforms/product_build_lists/index.html.haml b/app/views/platforms/product_build_lists/index.html.haml index 7103bcfe9..494484f71 100644 --- a/app/views/platforms/product_build_lists/index.html.haml +++ b/app/views/platforms/product_build_lists/index.html.haml @@ -6,7 +6,6 @@ %th.lpadding16= t("activerecord.attributes.product_build_list.status") %th.lpadding16= t("activerecord.attributes.product_build_list.container_path") %th.lpadding16= t("activerecord.attributes.product_build_list.product") - -#%th.lpadding16= t("activerecord.attributes.product_build_list.user") %th= t("layout.product_build_lists.action") %th.lpadding16= t("activerecord.attributes.product_build_list.notified_at") %tbody= render :partial => 'platforms/product_build_lists/product_build_list', :collection => @product_build_lists diff --git a/config/locales/models/product_build_list.en.yml b/config/locales/models/product_build_list.en.yml index 1e047e4aa..6f6892274 100644 --- a/config/locales/models/product_build_list.en.yml +++ b/config/locales/models/product_build_list.en.yml @@ -10,7 +10,7 @@ en: '2': 'build in progress' build_failed: Build failed build_started: Build in progress - build_completed: Build + build_completed: Builded ownership: header: Build list ownership diff --git a/db/migrate/20120628165702_remove_product_notified_at.rb b/db/migrate/20120628165702_remove_product_notified_at.rb new file mode 100644 index 000000000..fe8ec3436 --- /dev/null +++ b/db/migrate/20120628165702_remove_product_notified_at.rb @@ -0,0 +1,9 @@ +class RemoveProductNotifiedAt < ActiveRecord::Migration + def up + remove_column :product_build_lists, :notified_at + end + + def down + add_column :product_build_lists, :notified_at, :datetime + end +end diff --git a/db/schema.rb b/db/schema.rb index 06ac06651..4eb6a8e93 100644 --- a/db/schema.rb +++ b/db/schema.rb @@ -11,14 +11,14 @@ # # It's strongly recommended to check this file into your version control system. -ActiveRecord::Schema.define(:version => 20120622092725) do +ActiveRecord::Schema.define(:version => 20120628165702) 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" - t.datetime "updated_at" + t.datetime "created_at", :null => false + t.datetime "updated_at", :null => false end create_table "advisories", :force => true do |t| @@ -223,7 +223,7 @@ ActiveRecord::Schema.define(:version => 20120622092725) do t.string "owner_type" t.string "visibility", :default => "open", :null => false t.string "platform_type", :default => "main", :null => false - t.string "distrib_type" + t.string "distrib_type", :null => false end add_index "platforms", ["name"], :name => "index_platforms_on_name", :unique => true, :case_sensitive => false @@ -239,8 +239,7 @@ ActiveRecord::Schema.define(:version => 20120622092725) do create_table "product_build_lists", :force => true do |t| t.integer "product_id" - t.integer "status", :default => 2, :null => false - t.datetime "notified_at" + t.integer "status", :default => 2, :null => false t.datetime "created_at" t.datetime "updated_at" end @@ -294,25 +293,27 @@ ActiveRecord::Schema.define(:version => 20120622092725) do t.text "description" t.string "ancestry" t.boolean "has_issues", :default => true - t.boolean "has_wiki", :default => false t.string "srpm_file_name" t.string "srpm_content_type" t.integer "srpm_file_size" t.datetime "srpm_updated_at" + t.boolean "has_wiki", :default => false t.string "default_branch", :default => "master" 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 + add_index "projects", ["owner_id"], :name => "index_projects_on_name_and_owner_id_and_owner_type", :unique => true + create_table "register_requests", :force => true do |t| t.string "name" t.string "email" t.string "token" t.boolean "approved", :default => false t.boolean "rejected", :default => false - t.datetime "created_at", :null => false - t.datetime "updated_at", :null => false + t.datetime "created_at" + t.datetime "updated_at" t.string "interest" t.text "more" end @@ -366,7 +367,6 @@ ActiveRecord::Schema.define(:version => 20120622092725) do t.string "name" 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 "remember_created_at" t.datetime "created_at" @@ -374,11 +374,8 @@ ActiveRecord::Schema.define(:version => 20120622092725) do t.string "uname" t.string "role" 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.integer "own_projects_count", :default => 0, :null => false t.text "professional_experience" t.string "site" t.string "company" @@ -390,6 +387,9 @@ ActiveRecord::Schema.define(:version => 20120622092725) do t.integer "failed_attempts", :default => 0 t.string "unlock_token" t.datetime "locked_at" + t.string "confirmation_token" + t.datetime "confirmed_at" + t.datetime "confirmation_sent_at" t.string "authentication_token" t.integer "build_priority", :default => 50 end diff --git a/spec/models/product_build_list_spec.rb b/spec/models/product_build_list_spec.rb index 76587112f..3f0bbba51 100644 --- a/spec/models/product_build_list_spec.rb +++ b/spec/models/product_build_list_spec.rb @@ -21,7 +21,6 @@ describe ProductBuildList do it { should_not allow_mass_assignment_of(:product_id) } it { should allow_mass_assignment_of(:status) } - it { should allow_mass_assignment_of(:notified_at) } it { should allow_mass_assignment_of(:base_url) } end From 67c55bcb56e3000b03f6c878257c1797d2eb2665 Mon Sep 17 00:00:00 2001 From: Alexander Machehin Date: Fri, 29 Jun 2012 17:01:40 +0600 Subject: [PATCH 12/19] [refs #442] fixed infinite loop --- app/models/build_list.rb | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/app/models/build_list.rb b/app/models/build_list.rb index 8c2894046..0ae3e86af 100644 --- a/app/models/build_list.rb +++ b/app/models/build_list.rb @@ -103,10 +103,15 @@ class BuildList < ActiveRecord::Base state_machine :status, :initial => :waiting_for_response do - around_transition do |build_list, transition, block| + # WTF? around_transition -> infinite loop + before_transition do |build_list, transition| if build_list.mass_build MassBuild.decrement_counter "#{BuildList::HUMAN_STATUSES[build_list.status].to_s}_count", build_list.mass_build_id if MassBuild::COUNT_STATUSES.include?(build_list.status) - block.call + end + end + + after_transition do |build_list, transition| + if build_list.mass_build MassBuild.increment_counter "#{BuildList::HUMAN_STATUSES[build_list.status].to_s}_count", build_list.mass_build_id if MassBuild::COUNT_STATUSES.include?(build_list.status) end end From adb3b1ccabbe2188cc32f9ac629152f59eb766fe Mon Sep 17 00:00:00 2001 From: Alexander Machehin Date: Fri, 29 Jun 2012 17:38:06 +0600 Subject: [PATCH 13/19] [refs #442] fixed bug with priority --- app/models/build_list.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/models/build_list.rb b/app/models/build_list.rb index 0ae3e86af..9f26360ce 100644 --- a/app/models/build_list.rb +++ b/app/models/build_list.rb @@ -194,7 +194,7 @@ class BuildList < ActiveRecord::Base #TODO: Share this checking on product owner. def can_cancel? - [BUILD_PENDING, BuildServer::PLATFORM_PENDING].include? status && bs_id + [BUILD_PENDING, BuildServer::PLATFORM_PENDING].include?(status) && bs_id end def can_publish? From 01db786728ae9cb27ce9b286c47c2298ba839cd4 Mon Sep 17 00:00:00 2001 From: Alexander Machehin Date: Fri, 29 Jun 2012 17:39:54 +0600 Subject: [PATCH 14/19] [refs #442] remove double checking --- app/views/projects/build_lists/_build_list.html.haml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/views/projects/build_lists/_build_list.html.haml b/app/views/projects/build_lists/_build_list.html.haml index abb5f43b8..9eb7b1380 100644 --- a/app/views/projects/build_lists/_build_list.html.haml +++ b/app/views/projects/build_lists/_build_list.html.haml @@ -6,5 +6,5 @@ %td= link_to build_list.project_version, "#" %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= 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 can?(:cancel, build_list) %td= build_list.updated_at From 59c03005421b3e88120b4f2ab94a24299d8a47e5 Mon Sep 17 00:00:00 2001 From: Alexander Machehin Date: Fri, 29 Jun 2012 17:42:05 +0600 Subject: [PATCH 15/19] [refs #442] small refactoring --- app/models/build_list.rb | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/app/models/build_list.rb b/app/models/build_list.rb index 9f26360ce..14ccd466d 100644 --- a/app/models/build_list.rb +++ b/app/models/build_list.rb @@ -105,14 +105,14 @@ class BuildList < ActiveRecord::Base # WTF? around_transition -> infinite loop before_transition do |build_list, transition| - if build_list.mass_build - MassBuild.decrement_counter "#{BuildList::HUMAN_STATUSES[build_list.status].to_s}_count", build_list.mass_build_id if MassBuild::COUNT_STATUSES.include?(build_list.status) + if build_list.mass_build && MassBuild::COUNT_STATUSES.include?(build_list.status) + MassBuild.decrement_counter "#{BuildList::HUMAN_STATUSES[build_list.status].to_s}_count", build_list.mass_build_id end end after_transition do |build_list, transition| - if build_list.mass_build - MassBuild.increment_counter "#{BuildList::HUMAN_STATUSES[build_list.status].to_s}_count", build_list.mass_build_id if MassBuild::COUNT_STATUSES.include?(build_list.status) + if build_list.mass_build && MassBuild::COUNT_STATUSES.include?(build_list.status) + MassBuild.increment_counter "#{BuildList::HUMAN_STATUSES[build_list.status].to_s}_count", build_list.mass_build_id end end From d3e89393a81426a1c9d0d757b56920e9bdf0484e Mon Sep 17 00:00:00 2001 From: Pavel Chipiga Date: Fri, 29 Jun 2012 16:09:06 +0300 Subject: [PATCH 16/19] Stop resque workers through rake. Refs #543 --- lib/recipes/resque.rb | 9 ++++++--- lib/tasks/resque.rake | 10 ++++++++++ 2 files changed, 16 insertions(+), 3 deletions(-) create mode 100644 lib/tasks/resque.rake diff --git a/lib/recipes/resque.rb b/lib/recipes/resque.rb index a3524324d..625e264de 100644 --- a/lib/recipes/resque.rb +++ b/lib/recipes/resque.rb @@ -20,12 +20,15 @@ Capistrano::Configuration.instance(:must_exist).load do end def stop_workers - ps = 'ps aux | grep resque | grep -v grep' - run "#{ps} && kill -QUIT `#{ps} | awk '{ print $2 }'` || echo 'Workers already stopped!'" + # ps = 'ps aux | grep resque | grep -v grep' + # run "#{ps} && kill -QUIT `#{ps} | awk '{ print $2 }'` || echo 'Workers already stopped!'" + # run "kill -QUIT `ps aux | grep resque | grep -v grep | awk '{ print $2 }'`" + # run "kill -QUIT `ps aux | grep resque | grep -v grep | awk '{ print $2 }'` > /dev/null 2>&1 &" + run "cd #{fetch :current_path} && #{rails_env} bundle exec rake resque:stop_workers" end def start_workers - run "cd #{fetch :current_path} && COUNT=#{ workers_count } QUEUE=fork_import,hook,clone_build,notification #{ rails_env } BACKGROUND=yes bundle exec rake resque:workers" + run "cd #{fetch :current_path} && COUNT=#{workers_count} QUEUE=fork_import,hook,clone_build,notification #{rails_env} BACKGROUND=yes bundle exec rake resque:workers" end end end diff --git a/lib/tasks/resque.rake b/lib/tasks/resque.rake new file mode 100644 index 000000000..5cc0e31e0 --- /dev/null +++ b/lib/tasks/resque.rake @@ -0,0 +1,10 @@ +namespace :resque do + desc 'Stop all Resque workers' + task :stop_workers => :environment do + pids = [] + Resque.workers.each do |worker| + pids << worker.to_s.split(/:/).second + end + system("kill -QUIT #{pids.join(' ')}") if pids.size > 0 + end +end From e78d9c54a123cf0fad7d656827a0b8892f8e4c34 Mon Sep 17 00:00:00 2001 From: Pavel Chipiga Date: Fri, 29 Jun 2012 16:52:32 +0300 Subject: [PATCH 17/19] Code cleanup. Refs #543 --- lib/recipes/resque.rb | 2 -- 1 file changed, 2 deletions(-) diff --git a/lib/recipes/resque.rb b/lib/recipes/resque.rb index 625e264de..8765558d9 100644 --- a/lib/recipes/resque.rb +++ b/lib/recipes/resque.rb @@ -22,8 +22,6 @@ Capistrano::Configuration.instance(:must_exist).load do def stop_workers # ps = 'ps aux | grep resque | grep -v grep' # run "#{ps} && kill -QUIT `#{ps} | awk '{ print $2 }'` || echo 'Workers already stopped!'" - # run "kill -QUIT `ps aux | grep resque | grep -v grep | awk '{ print $2 }'`" - # run "kill -QUIT `ps aux | grep resque | grep -v grep | awk '{ print $2 }'` > /dev/null 2>&1 &" run "cd #{fetch :current_path} && #{rails_env} bundle exec rake resque:stop_workers" end From ea8775f1f7c5f5442d2744169cfb97ea96de7ec4 Mon Sep 17 00:00:00 2001 From: Alexander Machehin Date: Tue, 3 Jul 2012 16:17:53 +0600 Subject: [PATCH 18/19] [refs #547] remove mistake condition --- app/models/ability.rb | 2 +- spec/models/product_build_list_spec.rb | 10 +++++++++- 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/app/models/ability.rb b/app/models/ability.rb index 893b2643d..f14e06989 100644 --- a/app/models/ability.rb +++ b/app/models/ability.rb @@ -18,7 +18,7 @@ class Ability can :read, Issue, :project => {:visibility => 'open'} can :search, BuildList can :read, BuildList, :project => {:visibility => 'open'} - can :read, ProductBuildList, :product => {:platform => {:visibility => 'open'}} + can :read, ProductBuildList#, :product => {:platform => {:visibility => 'open'}} # double nested hash don't work can :read, Advisory can(:advisories, Platform) {APP_CONFIG['anonymous_access']} # Core callbacks diff --git a/spec/models/product_build_list_spec.rb b/spec/models/product_build_list_spec.rb index 3f0bbba51..43c2abc61 100644 --- a/spec/models/product_build_list_spec.rb +++ b/spec/models/product_build_list_spec.rb @@ -22,5 +22,13 @@ describe ProductBuildList do it { should allow_mass_assignment_of(:status) } it { should allow_mass_assignment_of(:base_url) } - + + # see app/ability.rb + # can :read, ProductBuildList#, :product => {:platform => {:visibility => 'open'}} # double nested hash don't work + it 'should generate correct sql to get product build lists' do + stub_symlink_methods + user = FactoryGirl.create(:user) + ability = Ability.new user + ProductBuildList.accessible_by(ability).count.should == 0 + end end From b46a7aba393b2dcaec5c8f93fdd5a69a702a6ff6 Mon Sep 17 00:00:00 2001 From: Pavel Chipiga Date: Tue, 3 Jul 2012 15:05:27 +0300 Subject: [PATCH 19/19] Fix branch with dots. Refs #263 --- config/routes.rb | 52 ++++++++++++------------ db/schema.rb | 2 +- spec/routing/projects_routing_spec.rb.rb | 5 ++- 3 files changed, 31 insertions(+), 28 deletions(-) diff --git a/config/routes.rb b/config/routes.rb index 16ba0f84f..e09c8a1cb 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -179,31 +179,33 @@ Rosa::Application.routes.draw do get '/sections' => 'projects#sections', :as => :sections_project post '/sections' => 'projects#sections' delete '/remove_user' => 'projects#remove_user', :as => :remove_user_project - # Tree - get '/' => "git/trees#show", :as => :project - get '/tree/:treeish(/*path)' => "git/trees#show", :defaults => {:treeish => :master}, :as => :tree, :format => false - # Commits - get '/commits/:treeish(/*path)' => "git/commits#index", :defaults => {:treeish => :master}, :as => :commits, :format => false - get '/commit/:id(.:format)' => "git/commits#show", :as => :commit - # Commit comments - post '/commit/:commit_id/comments(.:format)' => "comments#create", :as => :project_commit_comments - get '/commit/:commit_id/comments/:id(.:format)' => "comments#edit", :as => :edit_project_commit_comment - put '/commit/:commit_id/comments/:id(.:format)' => "comments#update", :as => :project_commit_comment - delete '/commit/:commit_id/comments/:id(.:format)' => "comments#destroy" - # Commit subscribes - post '/commit/:commit_id/subscribe' => "commit_subscribes#create", :as => :subscribe_commit - delete '/commit/:commit_id/unsubscribe' => "commit_subscribes#destroy", :as => :unsubscribe_commit - # Editing files - get '/blob/:treeish/*path/edit' => "git/blobs#edit", :defaults => {:treeish => :master}, :as => :edit_blob - put '/blob/:treeish/*path' => "git/blobs#update", :defaults => {:treeish => :master}, :format => false - # Blobs - get '/blob/:treeish/*path' => "git/blobs#show", :defaults => {:treeish => :master}, :as => :blob, :format => false - # Blame - get '/blame/:treeish/*path' => "git/blobs#blame", :defaults => {:treeish => :master}, :as => :blame, :format => false - # Raw - get '/raw/:treeish/*path' => "git/blobs#raw", :defaults => {:treeish => :master}, :as => :raw, :format => false - # Archive - get '/archive/:format/tree/:treeish' => "git/trees#archive", :defaults => {:treeish => :master}, :as => :archive, :format => /zip|tar/ + constraints :treeish => /[^\/]+/ do + # Tree + get '/' => "git/trees#show", :as => :project + get '/tree/:treeish(/*path)' => "git/trees#show", :defaults => {:treeish => :master}, :as => :tree, :format => false + # Commits + get '/commits/:treeish(/*path)' => "git/commits#index", :defaults => {:treeish => :master}, :as => :commits, :format => false + get '/commit/:id(.:format)' => "git/commits#show", :as => :commit + # Commit comments + post '/commit/:commit_id/comments(.:format)' => "comments#create", :as => :project_commit_comments + get '/commit/:commit_id/comments/:id(.:format)' => "comments#edit", :as => :edit_project_commit_comment + put '/commit/:commit_id/comments/:id(.:format)' => "comments#update", :as => :project_commit_comment + delete '/commit/:commit_id/comments/:id(.:format)' => "comments#destroy" + # Commit subscribes + post '/commit/:commit_id/subscribe' => "commit_subscribes#create", :as => :subscribe_commit + delete '/commit/:commit_id/unsubscribe' => "commit_subscribes#destroy", :as => :unsubscribe_commit + # Editing files + get '/blob/:treeish/*path/edit' => "git/blobs#edit", :defaults => {:treeish => :master}, :as => :edit_blob + put '/blob/:treeish/*path' => "git/blobs#update", :defaults => {:treeish => :master}, :format => false + # Blobs + get '/blob/:treeish/*path' => "git/blobs#show", :defaults => {:treeish => :master}, :as => :blob, :format => false + # Blame + get '/blame/:treeish/*path' => "git/blobs#blame", :defaults => {:treeish => :master}, :as => :blame, :format => false + # Raw + get '/raw/:treeish/*path' => "git/blobs#raw", :defaults => {:treeish => :master}, :as => :raw, :format => false + # Archive + get '/archive/:format/tree/:treeish' => "git/trees#archive", :defaults => {:treeish => :master}, :as => :archive, :format => /zip|tar/ + end end end diff --git a/db/schema.rb b/db/schema.rb index 4eb6a8e93..2f0a24c6a 100644 --- a/db/schema.rb +++ b/db/schema.rb @@ -304,7 +304,7 @@ ActiveRecord::Schema.define(:version => 20120628165702) do t.integer "build_count", :default => 0, :null => false end - add_index "projects", ["owner_id"], :name => "index_projects_on_name_and_owner_id_and_owner_type", :unique => true + add_index "projects", ["owner_id"], :name => "index_projects_on_name_and_owner_id_and_owner_type", :unique => true, :case_sensitive => false create_table "register_requests", :force => true do |t| t.string "name" diff --git a/spec/routing/projects_routing_spec.rb.rb b/spec/routing/projects_routing_spec.rb.rb index ac8d5d2e2..5bcc65d06 100644 --- a/spec/routing/projects_routing_spec.rb.rb +++ b/spec/routing/projects_routing_spec.rb.rb @@ -36,8 +36,9 @@ describe Projects::Git::TreesController do it "routes to #show" do get("/import/glib2.0-mib").should route_to("projects/git/trees#show", :owner_name => 'import', :project_name => 'glib2.0-mib') - get("/import/glib2.0-mib/tree/branch").should route_to("projects/git/trees#show", :owner_name => 'import', :project_name => 'glib2.0-mib', :treeish => 'branch') - get("/import/glib2.0-mib/tree/branch/some/path.to").should route_to("projects/git/trees#show", :owner_name => 'import', :project_name => 'glib2.0-mib', :treeish => 'branch', :path => 'some/path.to') + get("/import/glib2.0-mib/tree/lib2safe-0.03").should route_to("projects/git/trees#show", :owner_name => 'import', :project_name => 'glib2.0-mib', :treeish => 'lib2safe-0.03') + get("/import/glib2.0-mib/tree/branch-with.dot/folder_with.dot/path-with.dot").should route_to("projects/git/trees#show", :owner_name => 'import', :project_name => 'glib2.0-mib', :treeish => 'branch-with.dot', :path => 'folder_with.dot/path-with.dot') + # get("/import/glib2.0-mib/tree/ветка-с.точкой/папка_с.точкой/путь-с.точкой").should route_to("projects/git/trees#show", :owner_name => 'import', :project_name => 'glib2.0-mib', :treeish => 'ветка-с.точкой', :path => 'папка_с.точкой/путь-с.точкой') end # TODO write more specs also with slash in branch name!