1 | <?php |
||
37 | class MigrateCommand extends AbstractCommand |
||
38 | { |
||
39 | 18 | protected function configure() |
|
87 | |||
88 | 11 | public function execute(InputInterface $input, OutputInterface $output) |
|
89 | { |
||
90 | 11 | $configuration = $this->getMigrationConfiguration($input, $output); |
|
91 | 11 | $migration = $this->createMigration($configuration); |
|
92 | |||
93 | 11 | $this->outputHeader($configuration, $output); |
|
94 | |||
95 | 11 | $timeAllqueries = $input->getOption('query-time'); |
|
96 | |||
97 | 11 | $executedMigrations = $configuration->getMigratedVersions(); |
|
98 | 11 | $availableMigrations = $configuration->getAvailableVersions(); |
|
99 | |||
100 | 11 | $version = $this->getVersionNameFromAlias($input->getArgument('version'), $output, $configuration); |
|
101 | 11 | if ($version === false) { |
|
102 | 3 | return 1; |
|
103 | } |
||
104 | |||
105 | 8 | $executedUnavailableMigrations = array_diff($executedMigrations, $availableMigrations); |
|
106 | 8 | if (!empty($executedUnavailableMigrations)) { |
|
107 | 1 | $output->writeln(sprintf( |
|
108 | '<error>WARNING! You have %s previously executed migrations' |
||
109 | 1 | . ' in the database that are not registered migrations.</error>', |
|
110 | 1 | count($executedUnavailableMigrations) |
|
111 | )); |
||
112 | |||
113 | 1 | foreach ($executedUnavailableMigrations as $executedUnavailableMigration) { |
|
114 | 1 | $output->writeln(sprintf( |
|
115 | 1 | ' <comment>>></comment> %s (<comment>%s</comment>)', |
|
116 | 1 | $configuration->getDateTime($executedUnavailableMigration), |
|
117 | 1 | $executedUnavailableMigration |
|
118 | )); |
||
119 | } |
||
120 | |||
121 | 1 | $question = 'Are you sure you wish to continue? (y/n)'; |
|
122 | 1 | if (! $this->canExecute($question, $input, $output)) { |
|
123 | 1 | $output->writeln('<error>Migration cancelled!</error>'); |
|
124 | |||
125 | 1 | return 1; |
|
126 | } |
||
127 | } |
||
128 | |||
129 | 7 | if ($path = $input->getOption('write-sql')) { |
|
130 | 2 | $path = is_bool($path) ? getcwd() : $path; |
|
131 | 2 | $migration->writeSqlFile($path, $version); |
|
132 | 2 | return 0; |
|
133 | } |
||
134 | |||
135 | 5 | $dryRun = (boolean) $input->getOption('dry-run'); |
|
136 | |||
137 | 5 | $cancelled = false; |
|
138 | 5 | $migration->setNoMigrationException($input->getOption('allow-no-migration')); |
|
139 | 5 | $result = $migration->migrate($version, $dryRun, $timeAllqueries, function () use ($input, $output, &$cancelled) { |
|
|
|||
140 | $question = 'WARNING! You are about to execute a database migration' |
||
141 | . ' that could result in schema changes and data lost.' |
||
142 | 4 | . ' Are you sure you wish to continue? (y/n)'; |
|
143 | 4 | $canContinue = $this->canExecute($question, $input, $output); |
|
144 | 4 | $cancelled = !$canContinue; |
|
145 | |||
146 | 4 | return $canContinue; |
|
147 | 5 | }); |
|
148 | |||
149 | 5 | if ($cancelled) { |
|
150 | 1 | $output->writeln('<error>Migration cancelled!</error>'); |
|
151 | 1 | return 1; |
|
152 | } |
||
153 | 4 | } |
|
154 | |||
155 | /** |
||
156 | * Create a new migration instance to execute the migrations. |
||
157 | * |
||
158 | * @param $configuration The configuration with which the migrations will be executed |
||
159 | * @return Migration a new migration instance |
||
160 | */ |
||
161 | 1 | protected function createMigration(Configuration $configuration) |
|
165 | |||
166 | /** |
||
167 | * @param string $question |
||
168 | * @param InputInterface $input |
||
169 | * @param OutputInterface $output |
||
170 | * @return bool |
||
171 | */ |
||
172 | 5 | private function canExecute($question, InputInterface $input, OutputInterface $output) |
|
180 | |||
181 | /** |
||
182 | * @param string $versionAlias |
||
183 | * @param OutputInterface $output |
||
184 | * @param Configuration $configuration |
||
185 | * @return bool|string |
||
186 | */ |
||
187 | 11 | private function getVersionNameFromAlias($versionAlias, OutputInterface $output, Configuration $configuration) |
|
213 | } |
||
214 |
This check looks for variable assignements that are either overwritten by other assignments or where the variable is not used subsequently.
Both the
$myVar
assignment in line 1 and the$higher
assignment in line 2 are dead. The first because$myVar
is never used and the second because$higher
is always overwritten for every possible time line.