From 31f6b5793a147d85de3c704ceb31c439c9b3681a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Steffen=20Ko=CC=88tte?= Date: Mon, 4 Apr 2016 10:27:06 +0200 Subject: [PATCH] refactor cron model and create service --- lib/travis/api/v3/models/cron.rb | 51 ++++++++++++++--------- lib/travis/api/v3/services/cron/create.rb | 7 +--- 2 files changed, 32 insertions(+), 26 deletions(-) diff --git a/lib/travis/api/v3/models/cron.rb b/lib/travis/api/v3/models/cron.rb index 2b768458..68f664f2 100644 --- a/lib/travis/api/v3/models/cron.rb +++ b/lib/travis/api/v3/models/cron.rb @@ -3,61 +3,72 @@ module Travis::API::V3 belongs_to :branch + LastBuild = -1 + ThisBuild = 0 + NextBuild = 1 + def next_enqueuing - if (disable_by_build) && (last_non_cron_build_date > planned_time(-1)) - return planned_time(1) - elsif last_cron_build_date >= planned_time(-1) - return planned_time(0) + if disable_by_build && last_non_cron_build_date > planned_time(LastBuild) + planned_time(NextBuild) + elsif last_cron_build_date >= planned_time(LastBuild) + planned_time(ThisBuild) else - return Time.now + Time.now end end - def planned_time(in_builds = 0) # 0 equals next build, 1 after next build, -1 last build, ... + def planned_time(in_builds = ThisBuild) case interval when 'daily' - return planned_time_daily(in_builds) + planned_time_daily(in_builds) when 'weekly' - return planned_time_weekly(in_builds) + planned_time_weekly(in_builds) when 'monthly' - return planned_time_monthly(in_builds) + planned_time_monthly(in_builds) end end - def planned_time_daily(in_builds = 0) + def planned_time_daily(in_builds) now = DateTime.now build_today = DateTime.new(now.year, now.month, now.day, created_at.hour) return build_today + 1 + in_builds if (now > build_today) - return build_today + in_builds + build_today + in_builds end - def planned_time_weekly(in_builds = 0) + def planned_time_weekly(in_builds) now = DateTime.now build_today = DateTime.new(now.year, now.month, now.day, created_at.hour) next_time = build_today + ((created_at.wday - now.wday) % 7) return build_today + 7 * (1 + in_builds) if (now > next_time) - return next_time + 7 * in_builds + next_time + 7 * in_builds end - def planned_time_monthly(in_builds = 0) + def planned_time_monthly(in_builds) now = DateTime.now created = DateTime.new(created_at.year, created_at.month, created_at.day, created_at.hour) - month_since_creation = (now.year*12+now.month) - (created_at.year*12+created_at.month) + month_since_creation = (now.year * 12 + now.month) - (created_at.year * 12 + created_at.month) this_month = created >> month_since_creation return created >> (month_since_creation + 1 + in_builds) if (now > this_month) - return created >> (month_since_creation + in_builds) + created >> (month_since_creation + in_builds) end def last_cron_build_date - last_cron_build = Models::Build.where(:repository_id => branch.repository.id, :branch => branch.name, :event_type => 'cron').order("id DESC").first + last_cron_build = Models::Build.where( + :repository_id => branch.repository.id, + :branch => branch.name, + :event_type => 'cron' + ).order("id DESC").first return last_cron_build.created_at unless last_cron_build.nil? - return Time.at(0) + Time.at(0) end def last_non_cron_build_date - last_build = Models::Build.where(:repository_id => branch.repository.id, :branch => branch.name).where(['event_type NOT IN (?)', ['cron']]).order("id DESC").first + last_build = Models::Build.where( + :repository_id => branch.repository.id, + :branch => branch.name + ).where(['event_type NOT IN (?)', ['cron']]).order("id DESC").first return last_build.created_at unless last_build.nil? - return Time.at(0) + Time.at(0) end end diff --git a/lib/travis/api/v3/services/cron/create.rb b/lib/travis/api/v3/services/cron/create.rb index cc8fc819..3f3c24ec 100644 --- a/lib/travis/api/v3/services/cron/create.rb +++ b/lib/travis/api/v3/services/cron/create.rb @@ -9,13 +9,8 @@ module Travis::API::V3 raise NotFound unless branch = find(:branch, repository) raise Error.new('Invalid value for interval. Interval must be "daily", "weekly" or "monthly"!', status: 422) unless ["daily", "weekly", "monthly"].include?(params["interval"]) access_control.permissions(repository).create_cron! - - if branch.cron - access_control.permissions(branch.cron).delete! - end - + access_control.permissions(branch.cron).delete! if branch.cron query.create(branch, params["interval"], params["disable_by_build"] ? params["disable_by_build"] : false) - end end