Hello community,
here is the log from the commit of package rubygem-capistrano for
openSUSE:Factory checked in at 2017-09-12 19:57:22
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/rubygem-capistrano (Old)
and /work/SRC/openSUSE:Factory/.rubygem-capistrano.new (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "rubygem-capistrano"
Tue Sep 12 19:57:22 2017 rev:29 rq:523575 version:3.9.1
Changes:
--------
--- /work/SRC/openSUSE:Factory/rubygem-capistrano/rubygem-capistrano.changes
2017-07-10 11:07:09.466215150 +0200
+++
/work/SRC/openSUSE:Factory/.rubygem-capistrano.new/rubygem-capistrano.changes
2017-09-12 19:57:25.225988838 +0200
@@ -1,0 +2,12 @@
+Mon Sep 11 12:36:19 UTC 2017 - [email protected]
+
+- updated to version 3.9.1
+ see installed CHANGELOG.md
+
+-------------------------------------------------------------------
+Thu Aug 3 19:06:52 UTC 2017 - [email protected]
+
+- updated to version 3.9.0
+ see installed CHANGELOG.md
+
+-------------------------------------------------------------------
Old:
----
capistrano-3.8.2.gem
New:
----
capistrano-3.9.1.gem
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ rubygem-capistrano.spec ++++++
--- /var/tmp/diff_new_pack.PlwuS6/_old 2017-09-12 19:57:25.881896612 +0200
+++ /var/tmp/diff_new_pack.PlwuS6/_new 2017-09-12 19:57:25.889895487 +0200
@@ -24,7 +24,7 @@
#
Name: rubygem-capistrano
-Version: 3.8.2
+Version: 3.9.1
Release: 0
%define mod_name capistrano
%define mod_full_name %{mod_name}-%{version}
@@ -34,7 +34,7 @@
BuildRequires: ruby-macros >= 5
BuildRequires: update-alternatives
Url: http://capistranorb.com/
-Source: http://rubygems.org/gems/%{mod_full_name}.gem
+Source: https://rubygems.org/gems/%{mod_full_name}.gem
Source1: gem2rpm.yml
Summary: Capistrano - Welcome to easy deployment with Ruby over SSH
License: MIT
++++++ capistrano-3.8.2.gem -> capistrano-3.9.1.gem ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/.travis.yml new/.travis.yml
--- old/.travis.yml 2017-06-16 17:17:46.000000000 +0200
+++ new/.travis.yml 2017-09-08 18:36:50.000000000 +0200
@@ -1,5 +1,6 @@
language: ruby
rvm:
+ - 2.4.1
- 2.3.1
- 2.2
- 2.1
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/CHANGELOG.md new/CHANGELOG.md
--- old/CHANGELOG.md 2017-06-16 17:17:46.000000000 +0200
+++ new/CHANGELOG.md 2017-09-08 18:36:50.000000000 +0200
@@ -16,10 +16,38 @@
## master
-https://github.com/capistrano/capistrano/compare/v3.8.1...HEAD
+https://github.com/capistrano/capistrano/compare/v3.9.1...HEAD
* Your contribution here!
+## `3.9.1` (2017-09-08)
+
+https://github.com/capistrano/capistrano/compare/v3.9.0...v3.9.1
+
+### Breaking changes:
+
+* None
+
+### Fixes:
+
+* [#1912](https://github.com/capistrano/capistrano/pull/1912): Fixed an issue
where questions posed by `ask` were not printed on certain platforms -
[@kminiatures](https://github.com/kminiatures)
+
+## `3.9.0` (2017-07-28)
+
+https://github.com/capistrano/capistrano/compare/v3.8.2...v3.9.0
+
+### Breaking changes:
+
+* None
+
+### New features:
+
+* [#1911](https://github.com/capistrano/capistrano/pull/1911): Add
Capistrano::DSL#invoke! for repetitive tasks
+
+### Fixes:
+
+* [#1899](https://github.com/capistrano/capistrano/pull/1899): Updated
`deploy:cleanup` to continue rotating the releases and skip the invalid
directory names instead of skipping the whole rotation of releases. The warning
message has changed slightly due to the change of behavior.
+
## `3.8.2` (2017-06-16)
https://github.com/capistrano/capistrano/compare/v3.8.1...v3.8.2
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/CONTRIBUTING.md new/CONTRIBUTING.md
--- old/CONTRIBUTING.md 2017-06-16 17:17:46.000000000 +0200
+++ new/CONTRIBUTING.md 2017-09-08 18:36:50.000000000 +0200
@@ -41,6 +41,8 @@
If you are an experienced Ruby programmer, take a few minutes to get the
Capistrano test suite running (see [DEVELOPMENT.md][]), and do what you can to
get a test case written that fails. *This will be a huge help!*
+If you think you may have discovered a security vulnerability in Capistrano,
do not open a GitHub issue. Instead, please send a report to
<[email protected]>.
+
## Requesting new features or improvements
Capistrano continues to improve thanks to people like you! Feel free to open a
GitHub issue for any or all of these ideas:
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/DEVELOPMENT.md new/DEVELOPMENT.md
--- old/DEVELOPMENT.md 2017-06-16 17:17:46.000000000 +0200
+++ new/DEVELOPMENT.md 2017-09-08 18:36:50.000000000 +0200
@@ -28,11 +28,10 @@
Make sure to install:
-* [Bundler](https://bundler.io/) 1.10.5 (see note)
+* [Bundler](https://bundler.io/)
* [Vagrant](https://www.vagrantup.com/)
* [VirtualBox](https://www.virtualbox.org/wiki/Downloads) (or another
[Vagrant-supported](https://docs.vagrantup.com/v2/getting-started/providers.html)
VM host)
-*Note: As of this writing (December 2015), Vagrant does not work with Bundler
> 1.10.5. If you have multiple versions of Bundler installed, use the special
underscore command-line argument to force a compatible version, like this:
`bundle _1.10.5_ exec rake features`.*
### Running tests
@@ -45,7 +44,7 @@
# Run the RSpec suite
$ bundle exec rake spec
-# Run the Cucumber suite (requires Bundler 1.10.5)
+# Run the Cucumber suite
$ bundle exec rake features
# Run the Cucumber suite and leave the VM running (faster for subsequent runs)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/README.md new/README.md
--- old/README.md 2017-06-16 17:17:46.000000000 +0200
+++ new/README.md 2017-09-08 18:36:50.000000000 +0200
@@ -103,7 +103,7 @@
``` ruby
group :development do
- gem "capistrano", "~> 3.8"
+ gem "capistrano", "~> 3.9"
end
```
@@ -186,6 +186,8 @@
GitHub issues are for bug reports and feature requests. Please refer to the
[CONTRIBUTING](CONTRIBUTING.md) document for guidelines on submitting GitHub
issues.
+If you think you may have discovered a security vulnerability in Capistrano,
do not open a GitHub issue. Instead, please send a report to
<[email protected]>.
+
## How to contribute
Contributions to Capistrano, in the form of code, documentation or idea, are
gladly accepted. Read the [DEVELOPMENT](DEVELOPMENT.md) document to learn how
to hack on Capistrano's code, run the tests, and contribute your first pull
request.
Binary files old/checksums.yaml.gz and new/checksums.yaml.gz differ
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/features/deploy.feature new/features/deploy.feature
--- old/features/deploy.feature 2017-06-16 17:17:46.000000000 +0200
+++ new/features/deploy.feature 2017-09-08 18:36:50.000000000 +0200
@@ -52,3 +52,21 @@
When I run cap "deploy:symlink:release"
Then the current directory will be a symlink to the release
+ Scenario: Cleanup
+ Given config stage file has line "set :keep_releases, 3"
+ And 5 valid existing releases
+ And an invalid release named "new"
+ When I run cap "deploy:cleanup"
+ Then 3 valid releases are kept
+ And the invalid "new" release is ignored
+
+ Scenario: Rolling Back
+ Given I make 2 deployments
+ When I run cap "deploy:rollback"
+ Then the current symlink points to the previous release
+
+ Scenario: Rolling Back to a specific release
+ Given I make 3 deployments
+ When I rollback to a specific release
+ Then the current symlink points to that specific release
+
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/features/step_definitions/assertions.rb
new/features/step_definitions/assertions.rb
--- old/features/step_definitions/assertions.rb 2017-06-16 17:17:46.000000000
+0200
+++ new/features/step_definitions/assertions.rb 2017-09-08 18:36:50.000000000
+0200
@@ -6,7 +6,9 @@
Then(/^git wrapper permissions are 0700$/) do
permissions_test = %Q([ $(stat -c "%a"
#{TestApp.git_wrapper_path.shellescape}) == "700" ])
- expect(vagrant_cli_command("ssh -c #{permissions_test.shellescape}")).to
be_success
+ _stdout, _stderr, status = vagrant_cli_command("ssh -c
#{permissions_test.shellescape}")
+
+ expect(status).to be_success
end
Then(/^the shared path is created$/) do
@@ -17,6 +19,18 @@
run_vagrant_command(test_dir_exists(TestApp.releases_path))
end
+Then(/^(\d+) valid releases are kept/) do |num|
+ test = %Q([ $(ls -g #{TestApp.releases_path} | grep -E '[0-9]{14}' | wc -l)
== "#{num}" ])
+ _, _, status = vagrant_cli_command("ssh -c #{test.shellescape}")
+ expect(status).to be_success
+end
+
+Then(/^the invalid (.+) release is ignored$/) do |filename|
+ test = "ls -g #{TestApp.releases_path} | grep #{filename}"
+ _, _, status = vagrant_cli_command("ssh -c #{test.shellescape}")
+ expect(status).to be_success
+end
+
Then(/^directories in :linked_dirs are created in shared$/) do
TestApp.linked_dirs.each do |dir|
run_vagrant_command(test_dir_exists(TestApp.shared_path.join(dir)))
@@ -124,3 +138,15 @@
Then(/doesn't contain "([^"]*)" in the output/) do |expected|
expect(@output).not_to include(expected)
end
+
+Then(/the current symlink points to the previous release/) do
+ previous_release_path = @release_paths[-2]
+
+ run_vagrant_command(symlinked?(TestApp.current_path, previous_release_path))
+end
+
+Then(/^the current symlink points to that specific release$/) do
+ specific_release_path = TestApp.releases_path.join(@rollback_release)
+
+ run_vagrant_command(symlinked?(TestApp.current_path, specific_release_path))
+end
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/features/step_definitions/cap_commands.rb
new/features/step_definitions/cap_commands.rb
--- old/features/step_definitions/cap_commands.rb 2017-06-16
17:17:46.000000000 +0200
+++ new/features/step_definitions/cap_commands.rb 2017-09-08
18:36:50.000000000 +0200
@@ -13,3 +13,9 @@
When(/^I run "(.*?)"$/) do |command|
@success, @output = TestApp.run(command)
end
+
+When(/^I rollback to a specific release$/) do
+ @rollback_release = @release_paths.first.split("/").last
+
+ step %Q{I run cap "deploy:rollback ROLLBACK_RELEASE=#{@rollback_release}"}
+end
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/features/step_definitions/setup.rb
new/features/step_definitions/setup.rb
--- old/features/step_definitions/setup.rb 2017-06-16 17:17:46.000000000
+0200
+++ new/features/step_definitions/setup.rb 2017-09-08 18:36:50.000000000
+0200
@@ -21,10 +21,16 @@
Given(/^file "(.*?)" exists in shared path$/) do |file|
file_shared_path = TestApp.shared_path.join(file)
- run_vagrant_command("mkdir -p #{TestApp.shared_path}")
+ run_vagrant_command("mkdir -p #{file_shared_path.dirname}")
run_vagrant_command("touch #{file_shared_path}")
end
+Given(/^all linked files exists in shared path$/) do
+ TestApp.linked_files.each do |linked_file|
+ step %Q{file "#{linked_file}" exists in shared path}
+ end
+end
+
Given(/^file "(.*?)" does not exist in shared path$/) do |file|
file_shared_path = TestApp.shared_path.join(file)
run_vagrant_command("mkdir -p #{TestApp.shared_path}")
@@ -60,3 +66,27 @@
Given(/^a stage file named (.+)$/) do |filename|
TestApp.write_local_stage_file(filename)
end
+
+Given(/^I make (\d+) deployments$/) do |count|
+ step "all linked files exists in shared path"
+
+ @release_paths = (1..count.to_i).map do
+ TestApp.cap("deploy")
+ stdout, _stderr = run_vagrant_command("readlink #{TestApp.current_path}")
+
+ stdout.strip
+ end
+end
+
+Given(/^(\d+) valid existing releases$/) do |num|
+ a_day = 86_400 # in seconds
+ offset = -(a_day * num.to_i)
+ num.to_i.times do
+ run_vagrant_command("mkdir -p
#{TestApp.release_path(TestApp.timestamp(offset))}")
+ offset += a_day
+ end
+end
+
+Given(/^an invalid release named "(.+)"$/) do |filename|
+ run_vagrant_command("mkdir -p #{TestApp.release_path(filename)}")
+end
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/features/support/remote_command_helpers.rb
new/features/support/remote_command_helpers.rb
--- old/features/support/remote_command_helpers.rb 2017-06-16
17:17:46.000000000 +0200
+++ new/features/support/remote_command_helpers.rb 2017-09-08
18:36:50.000000000 +0200
@@ -15,6 +15,10 @@
%Q{[ -#{type} "#{path}" ]}
end
+ def symlinked?(symlink_path, target_path)
+ "[ #{symlink_path} -ef #{target_path} ]"
+ end
+
def safely_remove_file(_path)
run_vagrant_command("rm #{test_file}")
rescue
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/features/support/vagrant_helpers.rb
new/features/support/vagrant_helpers.rb
--- old/features/support/vagrant_helpers.rb 2017-06-16 17:17:46.000000000
+0200
+++ new/features/support/vagrant_helpers.rb 2017-09-08 18:36:50.000000000
+0200
@@ -1,4 +1,4 @@
-require "English"
+require "open3"
module VagrantHelpers
extend self
@@ -16,17 +16,18 @@
def vagrant_cli_command(command)
puts "[vagrant] #{command}"
- Dir.chdir(VAGRANT_ROOT) do
- `#{VAGRANT_BIN} #{command} 2>&1`.split("\n").each do |line|
- puts "[vagrant] #{line}"
- end
+ stdout, stderr, status = Dir.chdir(VAGRANT_ROOT) do
+ Open3.capture3("#{VAGRANT_BIN} #{command}")
end
- $CHILD_STATUS
+
+ (stdout + stderr).each_line { |line| puts "[vagrant] #{line}" }
+
+ [stdout, stderr, status]
end
def run_vagrant_command(command)
- status = vagrant_cli_command("ssh -c #{command.inspect}")
- return true if status.success?
+ stdout, stderr, status = vagrant_cli_command("ssh -c #{command.inspect}")
+ return [stdout, stderr] if status.success?
raise VagrantSSHCommandError, status
end
end
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/lib/capistrano/configuration/question.rb
new/lib/capistrano/configuration/question.rb
--- old/lib/capistrano/configuration/question.rb 2017-06-16
17:17:46.000000000 +0200
+++ new/lib/capistrano/configuration/question.rb 2017-09-08
18:36:50.000000000 +0200
@@ -18,6 +18,7 @@
def ask_question
$stdout.print question
+ $stdout.flush
end
def value_or_default
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/lib/capistrano/dsl.rb new/lib/capistrano/dsl.rb
--- old/lib/capistrano/dsl.rb 2017-06-16 17:17:46.000000000 +0200
+++ new/lib/capistrano/dsl.rb 2017-09-08 18:36:50.000000000 +0200
@@ -19,13 +19,19 @@
colors = SSHKit::Color.new($stderr)
$stderr.puts colors.colorize("Skipping task `#{task_name}'.", :yellow)
$stderr.puts "Capistrano tasks may only be invoked once. Since task
`#{task}' was previously invoked, invoke(\"#{task_name}\") at #{file}:#{line}
will be skipped."
- $stderr.puts "If you really meant to run this task again, first call
Rake::Task[\"#{task_name}\"].reenable"
+ $stderr.puts "If you really meant to run this task again, use
invoke!(\"#{task_name}\")"
$stderr.puts colors.colorize("THIS BEHAVIOR MAY CHANGE IN A FUTURE
VERSION OF CAPISTRANO. Please join the conversation here if this affects you.",
:red)
$stderr.puts
colors.colorize("https://github.com/capistrano/capistrano/issues/1686", :red)
end
task.invoke(*args)
end
+ def invoke!(task_name, *args)
+ task = Rake::Task[task_name]
+ task.reenable
+ task.invoke(*args)
+ end
+
def t(key, options={})
I18n.t(key, options.merge(scope: :capistrano))
end
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/lib/capistrano/i18n.rb new/lib/capistrano/i18n.rb
--- old/lib/capistrano/i18n.rb 2017-06-16 17:17:46.000000000 +0200
+++ new/lib/capistrano/i18n.rb 2017-09-08 18:36:50.000000000 +0200
@@ -13,7 +13,7 @@
question: "Please enter %{key}: ",
question_default: "Please enter %{key} (%{default_value}): ",
keeping_releases: "Keeping %{keep_releases} of %{releases} deployed releases
on %{host}",
- skip_cleanup: "Skipping cleanup of old releases on %{host}; unexpected
foldername found (should be timestamp)",
+ skip_cleanup: "Skipping cleanup of invalid releases on %{host}; unexpected
foldername found (should be timestamp)",
no_old_releases: "No old releases (keeping newest %{keep_releases}) on
%{host}",
linked_file_does_not_exist: "linked file %{file} does not exist on %{host}",
cannot_rollback: "There are no older releases to rollback to",
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/lib/capistrano/tasks/deploy.rake
new/lib/capistrano/tasks/deploy.rake
--- old/lib/capistrano/tasks/deploy.rake 2017-06-16 17:17:46.000000000
+0200
+++ new/lib/capistrano/tasks/deploy.rake 2017-09-08 18:36:50.000000000
+0200
@@ -149,11 +149,13 @@
task :cleanup do
on release_roles :all do |host|
releases = capture(:ls, "-x", releases_path).split
- if !(releases.all? { |e| /^\d{14}$/ =~ e })
- warn t(:skip_cleanup, host: host.to_s)
- elsif releases.count >= fetch(:keep_releases)
- info t(:keeping_releases, host: host.to_s, keep_releases:
fetch(:keep_releases), releases: releases.count)
- directories = (releases - releases.last(fetch(:keep_releases)))
+ valid, invalid = releases.partition { |e| /^\d{14}$/ =~ e }
+
+ warn t(:skip_cleanup, host: host.to_s) if invalid.any?
+
+ if valid.count >= fetch(:keep_releases)
+ info t(:keeping_releases, host: host.to_s, keep_releases:
fetch(:keep_releases), releases: valid.count)
+ directories = (valid - valid.last(fetch(:keep_releases)))
if directories.any?
directories_str = directories.map do |release|
releases_path.join(release)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/lib/capistrano/version.rb
new/lib/capistrano/version.rb
--- old/lib/capistrano/version.rb 2017-06-16 17:17:46.000000000 +0200
+++ new/lib/capistrano/version.rb 2017-09-08 18:36:50.000000000 +0200
@@ -1,3 +1,3 @@
module Capistrano
- VERSION = "3.8.2".freeze
+ VERSION = "3.9.1".freeze
end
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/metadata new/metadata
--- old/metadata 2017-06-16 17:17:46.000000000 +0200
+++ new/metadata 2017-09-08 18:36:50.000000000 +0200
@@ -1,7 +1,7 @@
--- !ruby/object:Gem::Specification
name: capistrano
version: !ruby/object:Gem::Version
- version: 3.8.2
+ version: 3.9.1
platform: ruby
authors:
- Tom Clements
@@ -9,7 +9,7 @@
autorequire:
bindir: bin
cert_chain: []
-date: 2017-06-16 00:00:00.000000000 Z
+date: 2017-09-08 00:00:00.000000000 Z
dependencies:
- !ruby/object:Gem::Dependency
name: airbrussh
@@ -285,7 +285,7 @@
version: '0'
requirements: []
rubyforge_project:
-rubygems_version: 2.6.11
+rubygems_version: 2.6.13
signing_key:
specification_version: 4
summary: Capistrano - Welcome to easy deployment with Ruby over SSH
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/spec/lib/capistrano/dsl_spec.rb
new/spec/lib/capistrano/dsl_spec.rb
--- old/spec/lib/capistrano/dsl_spec.rb 2017-06-16 17:17:46.000000000 +0200
+++ new/spec/lib/capistrano/dsl_spec.rb 2017-09-08 18:36:50.000000000 +0200
@@ -71,13 +71,54 @@
end
describe "#invoke" do
- it "will print a message on stderr, when reinvoking task" do
- Rake::Task.define_task("some_task")
+ context "reinvoking" do
+ it "will not reenable invoking task" do
+ counter = 0
- dsl.invoke("some_task")
- expect do
- dsl.invoke("some_task")
- end.to output(/.*Capistrano tasks may only be invoked
once.*/).to_stderr
+ Rake::Task.define_task("A") do
+ counter += 1
+ end
+
+ expect do
+ dsl.invoke("A")
+ dsl.invoke("A")
+ end.to change { counter }.by(1)
+ end
+
+ it "will print a message on stderr" do
+ Rake::Task.define_task("B")
+
+ expect do
+ dsl.invoke("B")
+ dsl.invoke("B")
+ end.to output(/If you really meant to run this task again, use
invoke!/).to_stderr
+ end
+ end
+ end
+
+ describe "#invoke!" do
+ context "reinvoking" do
+ it "will reenable invoking task" do
+ counter = 0
+
+ Rake::Task.define_task("C") do
+ counter += 1
+ end
+
+ expect do
+ dsl.invoke!("C")
+ dsl.invoke!("C")
+ end.to change { counter }.by(2)
+ end
+
+ it "will not print a message on stderr" do
+ Rake::Task.define_task("D")
+
+ expect do
+ dsl.invoke!("D")
+ dsl.invoke!("D")
+ end.to_not output(/If you really meant to run this task again, use
invoke!/).to_stderr
+ end
end
end
end
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/spec/support/test_app.rb new/spec/support/test_app.rb
--- old/spec/support/test_app.rb 2017-06-16 17:17:46.000000000 +0200
+++ new/spec/support/test_app.rb 2017-09-08 18:36:50.000000000 +0200
@@ -132,12 +132,12 @@
deploy_to.join("releases")
end
- def release_path
- releases_path.join(timestamp)
+ def release_path(t=timestamp)
+ releases_path.join(t)
end
- def timestamp
- Time.now.utc.strftime("%Y%m%d%H%M%S")
+ def timestamp(offset=0)
+ (Time.now.utc + offset).strftime("%Y%m%d%H%M%S")
end
def repo_path