-
Notifications
You must be signed in to change notification settings - Fork 0
/
HgRevertTask.php
141 lines (129 loc) · 2.97 KB
/
HgRevertTask.php
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
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
<?php
/**
* Utilise Mercurial from within Phing.
*
* PHP Version 5.4
*
* @category Tasks
* @package phing.tasks.ext
* @author Ken Guest <[email protected]>
* @license LGPL (see http://www.gnu.org/licenses/lgpl.html)
* @link https://github.com/kenguest/Phing-HG
*/
namespace Phing\Task\Ext\Hg;
use Phing\Exception\BuildException;
use Phing\Project;
use Phing\Util\StringHelper;
/**
* Integration/Wrapper for hg revert
*
* @category Tasks
* @package phing.tasks.ext.hg
* @author Ken Guest <[email protected]>
* @license LGPL (see http://www.gnu.org/licenses/lgpl.html)
* @link HgRevertTask.php
*/
class HgRevertTask extends HgBaseTask
{
/**
* All
*
* @var bool
*/
protected $all = false;
/**
* Name of file to be reverted.
*
* @var string
*/
protected $file = null;
/**
* Revision
*
* @var string
*/
protected $revision = '';
/**
* Set whether all files are to be reverted.
*
* @param string $value Jenkins style boolean value
*
* @return void
*/
public function setAll($value)
{
$this->all = StringHelper::booleanValue($value);
}
/**
* Set filename to be reverted.
*
* @param string $file Filename
*
* @return void
*/
public function setFile($file)
{
$this->file = $file;
}
/**
* Get filename to be reverted.
*
* @return string
*/
public function getFile()
{
return $this->file;
}
/**
* Set revision attribute
*
* @param string $revision Revision
*
* @return void
*/
public function setRevision($revision)
{
$this->revision = $revision;
}
/**
* The main entry point method.
*
* @throws BuildException
* @return void
*/
public function main()
{
$clone = $this->getFactoryInstance('revert');
$clone->setQuiet($this->getQuiet());
$clone->setAll($this->all);
if ($this->repository === '') {
$project = $this->getProject();
$dir = $project->getProperty('application.startdir');
} else {
$dir = $this->repository;
}
$cwd = getcwd();
$this->checkRepositoryIsDirAndExists($dir);
chdir($dir);
if ($this->revision !== '') {
$clone->setRev($this->revision);
}
if ($this->file !== null) {
$clone->addName($this->file);
}
try {
$this->log("Executing: " . $clone->asString(), Project::MSG_INFO);
$output = $clone->execute();
if ($output !== '') {
$this->log(PHP_EOL . $output);
}
} catch (\Exception $ex) {
$msg = $ex->getMessage();
$p = strpos($msg, 'hg returned:');
if ($p !== false) {
$msg = substr($msg, $p + 13);
}
throw new BuildException($msg);
}
}
}