blob: d6da31230f7003988ed7d0cf6ceb853984b2c8e3 (
plain) (
blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
|
<?php
namespace PHPGit\Command;
use PHPGit\Command;
use Symfony\Component\OptionsResolver\OptionsResolverInterface;
/**
* Remove files from the working tree and from the index - `git rm`
*
* @author Kazuyuki Hayashi
*/
class RmCommand extends Command
{
/**
* Remove files from the working tree and from the index
*
* ``` php
* $git = new PHPGit\Git();
* $git->setRepository('/path/to/repo');
* $git->rm('CHANGELOG-1.0-1.1.txt', ['force' => true]);
* ```
*
* ##### Options
*
* - **force** (_boolean_) Override the up-to-date check
* - **cached** (_boolean_) Unstage and remove paths only from the index
* - **recursive** (_boolean_) Allow recursive removal when a leading directory name is given
*
* @param string|array|\Traversable $file Files to remove. Fileglobs (e.g. *.c) can be given to remove all matching files.
* @param array $options [optional] An array of options {@see RmCommand::setDefaultOptions}
*
* @return bool
*/
public function __invoke($file, array $options = array())
{
$options = $this->resolve($options);
$builder = $this->git->getProcessBuilder()
->add('rm');
$this->addFlags($builder, $options, array('force', 'cached'));
if ($options['recursive']) {
$builder->add('-r');
}
if (!is_array($file) && !($file instanceof \Traversable)) {
$file = array($file);
}
foreach ($file as $value) {
$builder->add($value);
}
$this->git->run($builder->getProcess());
return true;
}
/**
* Equivalent to $git->rm($file, ['cached' => true]);
*
* ##### Options
*
* - **force** (_boolean_) Override the up-to-date check
* - **recursive** (_boolean_) Allow recursive removal when a leading directory name is given
*
* @param string|array|\Traversable $file Files to remove. Fileglobs (e.g. *.c) can be given to remove all matching files.
* @param array $options [optional] An array of options {@see RmCommand::setDefaultOptions}
*
* @return bool
*/
public function cached($file, array $options = array())
{
$options['cached'] = true;
return $this->__invoke($file, $options);
}
/**
* {@inheritdoc}
*
* - **force** (_boolean_) Override the up-to-date check
* - **cached** (_boolean_) Unstage and remove paths only from the index
* - **recursive** (_boolean_) Allow recursive removal when a leading directory name is given
*/
public function setDefaultOptions(OptionsResolverInterface $resolver)
{
$resolver->setDefaults(array(
'force' => false,
'cached' => false,
'recursive' => false
));
}
}
|