diff --git a/docs/recipe/deploy/rollback.md b/docs/recipe/deploy/rollback.md
index 687d16541..137948269 100644
--- a/docs/recipe/deploy/rollback.md
+++ b/docs/recipe/deploy/rollback.md
@@ -37,7 +37,7 @@ The value of this configuration is autogenerated on access.
## Tasks
### rollback {#rollback}
-[Source](https://github.com/deployphp/deployer/blob/master/recipe/deploy/rollback.php#L63)
+[Source](https://github.com/deployphp/deployer/blob/master/recipe/deploy/rollback.php#L67)
Rollbacks to the previous release.
diff --git a/recipe/deploy/release.php b/recipe/deploy/release.php
index 42d9a2f3c..81cb74dfe 100644
--- a/recipe/deploy/release.php
+++ b/recipe/deploy/release.php
@@ -176,6 +176,8 @@
$status = "$release (bad)";
} elseif (test("[ -f releases/$release/DIRTY_RELEASE ]")) {
$status = "$release (dirty)";
+ } elseif (!test("[ -f releases/$release/FINISHED_RELEASE ]")) {
+ $status = "$release (unfinished)";
} else {
$status = "$release";
}
diff --git a/recipe/deploy/rollback.php b/recipe/deploy/rollback.php
index 7afd34d01..dd2e4adb2 100644
--- a/recipe/deploy/rollback.php
+++ b/recipe/deploy/rollback.php
@@ -36,8 +36,12 @@
while (isset($releasesBeforeCurrent[0])) {
$candidate = $releasesBeforeCurrent[0];
- // Skip all bad releases.
- if (test("[ -f {{deploy_path}}/releases/$candidate/BAD_RELEASE ]")) {
+ if (
+ // Only consider successful releases.
+ !test("[ -f {{deploy_path}}/releases/$candidate/FINISHED_RELEASE ]")
+ // Skip all bad releases (that have previously been rolled back).
+ || test("[ -f {{deploy_path}}/releases/$candidate/BAD_RELEASE ]")
+ ) {
array_shift($releasesBeforeCurrent);
continue;
}
diff --git a/recipe/deploy/symlink.php b/recipe/deploy/symlink.php
index 8b9c2c0a2..e8257c2f1 100644
--- a/recipe/deploy/symlink.php
+++ b/recipe/deploy/symlink.php
@@ -18,4 +18,6 @@
run("cd {{deploy_path}} && {{bin/symlink}} {{release_path}} {{current_path}}"); // Atomic override symlink.
run("cd {{deploy_path}} && rm release"); // Remove release link.
}
+
+ run("echo '{{user}}' > {{release_path}}/FINISHED_RELEASE");
});