diff --git a/src/Composer/Console/Application.php b/src/Composer/Console/Application.php
index d6b265f53..96ba7d900 100644
--- a/src/Composer/Console/Application.php
+++ b/src/Composer/Console/Application.php
@@ -126,6 +126,24 @@ class Application extends BaseApplication
}
}
+ // prompt user for dir change if no composer.json is present in current dir
+ if ($io->isInteractive() && !in_array($commandName, array('init', 'about', 'help', 'diagnose', 'self-update', 'global'), true) && !file_exists('./composer.json')) {
+ $dir = dirname(getcwd());
+ $home = realpath(getenv('HOME') ?: getenv('USERPROFILE') ?: '/');
+
+ // abort when we reach the home dir or top of the filesystem
+ while (dirname($dir) !== $dir && $dir !== $home) {
+ if (file_exists($dir.'/composer.json')) {
+ if ($io->askConfirmation('No composer.json in current directory, do you want to use the one at '.$dir.'? [Y,n]? ', true)) {
+ $oldWorkingDir = getcwd();
+ chdir($dir);
+ }
+ break;
+ }
+ $dir = dirname($dir);
+ }
+ }
+
if (!$this->disablePluginsByDefault && !$this->hasPluginCommands && 'global' !== $commandName) {
try {
foreach ($this->getPluginCommands() as $command) {