Failed Conditions
Branch master (acad7e)
by Alexander
18:14 queued 08:15
created

src/SVNBuddy/Container.php (1 issue)

Upgrade to new PHP Analysis Engine

These results are based on our legacy PHP analysis, consider migrating to our new PHP analysis engine instead. Learn more

1
<?php
2
/**
3
 * This file is part of the SVN-Buddy library.
4
 * For the full copyright and license information, please view
5
 * the LICENSE file that was distributed with this source code.
6
 *
7
 * @copyright Alexander Obuhovich <[email protected]>
8
 * @link      https://github.com/console-helpers/svn-buddy
9
 */
10
11
namespace ConsoleHelpers\SVNBuddy;
12
13
14
use ConsoleHelpers\SVNBuddy\Cache\CacheManager;
15
use ConsoleHelpers\DatabaseMigration\MigrationManager;
16
use ConsoleHelpers\DatabaseMigration\PhpMigrationRunner;
17
use ConsoleHelpers\DatabaseMigration\SqlMigrationRunner;
18
use ConsoleHelpers\SVNBuddy\Config\CommandConfig;
19
use ConsoleHelpers\SVNBuddy\Database\StatementProfiler;
20
use ConsoleHelpers\SVNBuddy\Helper\DateHelper;
21
use ConsoleHelpers\SVNBuddy\Helper\OutputHelper;
22
use ConsoleHelpers\SVNBuddy\Helper\SizeHelper;
23
use ConsoleHelpers\SVNBuddy\MergeSourceDetector\ClassicMergeSourceDetector;
24
use ConsoleHelpers\SVNBuddy\MergeSourceDetector\InPortalMergeSourceDetector;
25
use ConsoleHelpers\SVNBuddy\MergeSourceDetector\MergeSourceDetectorAggregator;
26
use ConsoleHelpers\SVNBuddy\Process\ProcessFactory;
27
use ConsoleHelpers\SVNBuddy\Repository\CommitMessageBuilder;
28
use ConsoleHelpers\SVNBuddy\Repository\Connector\Connector;
29
use ConsoleHelpers\SVNBuddy\Repository\Connector\UrlResolver;
30
use ConsoleHelpers\SVNBuddy\Repository\Parser\LogMessageParserFactory;
31
use ConsoleHelpers\SVNBuddy\Repository\Parser\RevisionListParser;
32
use ConsoleHelpers\SVNBuddy\Repository\RevisionLog\DatabaseManager;
33
use ConsoleHelpers\SVNBuddy\Repository\RevisionLog\RevisionLogFactory;
34
use ConsoleHelpers\SVNBuddy\Repository\RevisionLog\RevisionPrinter;
35
use ConsoleHelpers\SVNBuddy\Repository\WorkingCopyResolver;
36
use Symfony\Component\Console\Formatter\OutputFormatterStyle;
37
use Symfony\Component\Console\Output\OutputInterface;
38
39
class Container extends \ConsoleHelpers\ConsoleKit\Container
40
{
41
42
	/**
43
	 * {@inheritdoc}
44
	 */
45 176
	public function __construct(array $values = array())
46
	{
47 176
		parent::__construct($values);
48
49 176
		$this['app_name'] = 'SVN-Buddy';
50 176
		$this['app_version'] = '@git-version@';
51
52 176
		$this['working_directory_sub_folder'] = '.svn-buddy';
53
54 176
		$this['config_defaults'] = array(
55 176
			'repository-connector.username' => '',
56 176
			'repository-connector.password' => '',
57 176
			'repository-connector.last-revision-cache-duration' => '10 minutes',
58 176
			'update-channel' => 'stable',
59
		);
60
61
		$this->extend('output', function ($output) {
62
			/** @var OutputInterface $output */
63 176
			$output->getFormatter()->setStyle('debug', new OutputFormatterStyle('white', 'magenta'));
64
65 9
			return $output;
66 176
		});
67
68
		$this['process_factory'] = function () {
69 7
			return new ProcessFactory();
70
		};
71
72
		$this['merge_source_detector'] = function () {
73 1
			$merge_source_detector = new MergeSourceDetectorAggregator(0);
74 1
			$merge_source_detector->add(new ClassicMergeSourceDetector(0));
75 1
			$merge_source_detector->add(new InPortalMergeSourceDetector(50));
76
77 1
			return $merge_source_detector;
78
		};
79
80
		$this['repository_url_resolver'] = function ($c) {
0 ignored issues
show
Comprehensibility introduced by
Avoid variables with short names like $c. Configured minimum length is 3.

Short variable names may make your code harder to understand. Variable names should be self-descriptive. This check looks for variable names who are shorter than a configured minimum.

Loading history...
81 1
			return new UrlResolver($c['repository_connector']);
82
		};
83
84
		$this['cache_manager'] = function ($c) {
85 7
			return new CacheManager($c['working_directory'], $c['size_helper'], $c['io']);
86
		};
87
88
		$this['statement_profiler'] = function () {
89 20
			$statement_profiler = new StatementProfiler();
90
91
			// The "AbstractPlugin::getLastRevision" method.
92 20
			$statement_profiler->ignoreDuplicateStatement('SELECT LastRevision FROM PluginData WHERE Name = :name');
93
94
			// The "AbstractPlugin::getProject" method.
95 20
			$statement_profiler->ignoreDuplicateStatement('SELECT Id FROM Projects WHERE Path = :path');
96
97
			// The "AbstractDatabaseCollectorPlugin::getProjects" method.
98 20
			$statement_profiler->ignoreDuplicateStatement(
99
				'SELECT Path, Id AS PathId, RevisionAdded, RevisionDeleted, RevisionLastSeen
100
				FROM Paths
101
				WHERE PathHash IN (:path_hashes)'
102 20
			);
103
104
			// The "ProjectsPlugin::createRepositoryWideProject" method.
105 20
			$statement_profiler->ignoreDuplicateStatement(
106
				'SELECT Id FROM Paths WHERE ProjectPath = :project_path LIMIT 100'
107 20
			);
108
109 20
			$statement_profiler->setActive(true);
110 20
			$statement_profiler->trackDuplicates(false);
111
112 20
			return $statement_profiler;
113
		};
114
115
		$this['project_root_folder'] = function () {
116 150
			return dirname(dirname(__DIR__));
117
		};
118
119
		$this['migration_manager'] = function ($c) {
120 150
			$migrations_directory = $c['project_root_folder'] . '/migrations';
121 150
			$migration_manager = new MigrationManager($migrations_directory, $c);
122 150
			$migration_manager->registerMigrationRunner(new SqlMigrationRunner());
123 150
			$migration_manager->registerMigrationRunner(new PhpMigrationRunner());
124
125 150
			return $migration_manager;
126
		};
127
128
		$this['db_manager'] = function ($c) {
129 2
			return new DatabaseManager($c['working_directory'], $c['migration_manager'], $c['statement_profiler']);
130
		};
131
132
		$this['revision_log_factory'] = function ($c) {
133 2
			return new RevisionLogFactory(
134 2
				$c['repository_connector'],
135 2
				$c['db_manager'],
136 2
				$c['log_message_parser_factory']
137 2
			);
138
		};
139
140
		$this['log_message_parser_factory'] = function () {
141 3
			return new LogMessageParserFactory();
142
		};
143
144
		$this['revision_list_parser'] = function () {
145 2
			return new RevisionListParser();
146
		};
147
148
		$this['revision_printer'] = function ($c) {
149 1
			return new RevisionPrinter($c['date_helper'], $c['output_helper']);
150
		};
151
152
		$this['repository_connector'] = function ($c) {
153 6
			return new Connector($c['config_editor'], $c['process_factory'], $c['io'], $c['cache_manager']);
154
		};
155
156
		$this['commit_message_builder'] = function ($c) {
157 1
			return new CommitMessageBuilder(
158 1
				$c['repository_connector'],
159 1
				$c['revision_list_parser'],
160 1
				$c['revision_log_factory']
161 1
			);
162
		};
163
164
		$this['working_copy_resolver'] = function ($c) {
165 2
			return new WorkingCopyResolver($c['repository_connector']);
166
		};
167
168
		$this['command_config'] = function ($c) {
169 1
			return new CommandConfig($c['config_editor'], $c['working_copy_resolver']);
170
		};
171
172
		$this['date_helper'] = function () {
173 2
			return new DateHelper();
174
		};
175
176
		$this['size_helper'] = function () {
177 8
			return new SizeHelper();
178
		};
179
180
		$this['output_helper'] = function () {
181 2
			return new OutputHelper();
182
		};
183
184 1
		$this['editor'] = function () {
185 1
			return new InteractiveEditor();
186
		};
187 176
	}
188
189
}
190