WorkingCopyConflictTracker::__construct()   A
last analyzed

Complexity

Conditions 1
Paths 1

Size

Total Lines 5
Code Lines 3

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 4
CRAP Score 1

Importance

Changes 1
Bugs 0 Features 0
Metric Value
eloc 3
c 1
b 0
f 0
dl 0
loc 5
ccs 4
cts 4
cp 1
rs 10
cc 1
nc 1
nop 2
crap 1
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\Repository;
12
13
14
use ConsoleHelpers\SVNBuddy\Command\ConflictsCommand;
15
use ConsoleHelpers\SVNBuddy\Config\CommandConfig;
16
use ConsoleHelpers\SVNBuddy\Repository\Connector\Connector;
17
18
class WorkingCopyConflictTracker
19
{
20
21
	/**
22
	 * Repository connector
23
	 *
24
	 * @var Connector
25
	 */
26
	protected $repositoryConnector;
27
28
	/**
29
	 * Command config.
30
	 *
31
	 * @var CommandConfig
32
	 */
33
	protected $commandConfig;
34
35
	/**
36
	 * Conflicts command.
37
	 *
38
	 * @var ConflictsCommand
39
	 */
40
	protected $conflictsCommand;
41
42
	/**
43
	 * Creates working copy conflict tracker instance.
44
	 *
45
	 * @param Connector     $repository_connector Repository connector.
46
	 * @param CommandConfig $command_config       Command config.
47
	 */
48 11
	public function __construct(Connector $repository_connector, CommandConfig $command_config)
49
	{
50 11
		$this->repositoryConnector = $repository_connector;
51 11
		$this->commandConfig = $command_config;
52 11
		$this->conflictsCommand = new ConflictsCommand();
53
	}
54
55
	/**
56
	 * Adds new conflicts to previously recorded.
57
	 *
58
	 * @param string $wc_path Working copy path.
59
	 *
60
	 * @return void
61
	 * @throws \LogicException When working copy has no conflicts.
62
	 */
63 3
	public function add($wc_path)
64
	{
65 3
		$new_conflicts = $this->getNewConflicts($wc_path);
66
67 3
		if ( !$new_conflicts ) {
68 1
			throw new \LogicException('The working copy at "' . $wc_path . '" has no conflicts to be added.');
69
		}
70
71 2
		$this->setRecordedConflicts(
72 2
			$wc_path,
73 2
			array_unique(array_merge($this->getRecordedConflicts($wc_path), $new_conflicts))
74 2
		);
75
	}
76
77
	/**
78
	 * Replaces previously recorded conflicts with new ones.
79
	 *
80
	 * @param string $wc_path Working copy path.
81
	 *
82
	 * @return void
83
	 * @throws \LogicException When working copy has no conflicts.
84
	 */
85 3
	public function replace($wc_path)
86
	{
87 3
		$new_conflicts = $this->getNewConflicts($wc_path);
88
89 3
		if ( !$new_conflicts ) {
90 1
			throw new \LogicException('The working copy at "' . $wc_path . '" has no conflicts to be added.');
91
		}
92
93 2
		$this->setRecordedConflicts($wc_path, $new_conflicts);
94
	}
95
96
	/**
97
	 * Erases previously recorded conflicts.
98
	 *
99
	 * @param string $wc_path Working copy path.
100
	 *
101
	 * @return void
102
	 */
103 1
	public function erase($wc_path)
104
	{
105 1
		$this->setRecordedConflicts($wc_path, array());
106
	}
107
108
	/**
109
	 * Returns previously recoded conflicts.
110
	 *
111
	 * @param string $wc_path Working copy path.
112
	 *
113
	 * @return array
114
	 */
115 7
	public function getNewConflicts($wc_path)
116
	{
117 7
		return $this->repositoryConnector->getWorkingCopyConflicts($wc_path);
118
	}
119
120
	/**
121
	 * Returns previously recoded conflicts.
122
	 *
123
	 * @param string $wc_path Working copy path.
124
	 *
125
	 * @return array
126
	 */
127 6
	public function getRecordedConflicts($wc_path)
128
	{
129 6
		return $this->commandConfig->getSettingValue(
130 6
			ConflictsCommand::SETTING_CONFLICTS_RECORDED_CONFLICTS,
131 6
			$this->conflictsCommand,
132 6
			$wc_path
133 6
		);
134
	}
135
136
	/**
137
	 * Returns previously recoded conflicts.
138
	 *
139
	 * @param string $wc_path   Working copy path.
140
	 * @param array  $conflicts Conflicts.
141
	 *
142
	 * @return void
143
	 */
144 5
	protected function setRecordedConflicts($wc_path, array $conflicts)
145
	{
146 5
		sort($conflicts, SORT_STRING);
147
148 5
		$this->commandConfig->setSettingValue(
149 5
			ConflictsCommand::SETTING_CONFLICTS_RECORDED_CONFLICTS,
150 5
			$this->conflictsCommand,
151 5
			$wc_path,
152 5
			$conflicts
153 5
		);
154
	}
155
156
}
157