Browse Source

Fixing issues with ProjectTask and absolute paths.
Fixes #1720

mark_story 15 years ago
parent
commit
2b20eb8999

+ 10 - 12
lib/Cake/Console/Command/Task/ProjectTask.php

@@ -49,23 +49,21 @@ class ProjectTask extends Shell {
 			$project = $this->args[0];
 		}
 
-		if ($project && isset($_SERVER['PWD'])) {
-			$project = $_SERVER['PWD'] . DS . $project;
-		}
-
 		while (!$project) {
 			$prompt = __d('cake_console', "What is the path to the project you want to bake?");
 			$project = $this->in($prompt, null, APP_PATH . 'myapp');
 		}
 
-		if ($project) {
-			$response = false;
-			while ($response == false && is_dir($project) === true && file_exists($project . 'Config' . 'core.php')) {
-				$prompt = __d('cake_console', '<warning>A project already exists in this location:</warning> %s Overwrite?', $project);
-				$response = $this->in($prompt, array('y','n'), 'n');
-				if (strtolower($response) === 'n') {
-					$response = $project = false;
-				}
+		if ($project && !Folder::isAbsolute($project) && isset($_SERVER['PWD'])) {
+			$project = $_SERVER['PWD'] . DS . $project;
+		}
+
+		$response = false;
+		while ($response == false && is_dir($project) === true && file_exists($project . 'Config' . 'core.php')) {
+			$prompt = __d('cake_console', '<warning>A project already exists in this location:</warning> %s Overwrite?', $project);
+			$response = $this->in($prompt, array('y','n'), 'n');
+			if (strtolower($response) === 'n') {
+				$response = $project = false;
 			}
 		}
 

+ 14 - 0
lib/Cake/Test/Case/Console/Command/Task/ProjectTaskTest.php

@@ -110,6 +110,20 @@ class ProjectTaskTest extends CakeTestCase {
 	}
 
 /**
+ * test bake with an absolute path.
+ *
+ * @return void
+ */
+	public function testExecuteWithAbsolutePath() {
+		$this->Task->args[0] = TMP . 'tests' . DS . 'bake_test';
+		$this->Task->params['skel'] = CAKE . 'Console' . DS . 'templates' . DS . 'skel';
+		$this->Task->expects($this->at(0))->method('in')->will($this->returnValue('y'));
+		$this->Task->execute();
+
+		$this->assertTrue(is_dir($this->Task->args[0]), 'No project dir');
+	}
+
+/**
  * test bake() method with -empty flag,  directory creation and empty files.
  *
  * @return void