/
functions.php
123 lines (111 loc) · 3.23 KB
/
functions.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
<?php
namespace DBPatcher;
/**
* @param PatchFile[] $patchFiles
* @param array $rowsFromDb
* @param callable $patchWithUpdatedStatusFactory
* @return PatchFile[]
*/
function getPatchesWithStatuses(
$patchFiles,
$rowsFromDb,
$patchWithUpdatedStatusFactory
) {
return array_map(
function ($p) use ($rowsFromDb, $patchWithUpdatedStatusFactory) {
if (array_key_exists($p->name, $rowsFromDb)) {
return call_user_func_array(
$patchWithUpdatedStatusFactory,
array($p, $rowsFromDb[$p->name]['status'], $rowsFromDb[$p->name]['md5'])
);
}
return $p;
},
$patchFiles
);
}
/**
* @param PatchFile $patchFile
* @param integer $status
* @param string $md5
* @return PatchFile
*/
function getPatchWithUpdatedStatus($patchFile, $status, $md5)
{
switch ($status) {
case PatchFile::STATUS_INSTALLED:
if ($patchFile->md5 !== $md5) {
return PatchFile::copyWithNewStatus($patchFile, PatchFile::STATUS_CHANGED);
}
break;
case PatchFile::STATUS_ERROR:
if ($patchFile->md5 !== $md5) {
return PatchFile::copyWithNewStatus($patchFile, PatchFile::STATUS_NEW);
}
break;
default:
return PatchFile::copyWithNewStatus($patchFile, PatchFile::STATUS_NEW);
}
return PatchFile::copyWithNewStatus($patchFile, $status);
}
// --------------------------------------------------------------------------------------------------------------------
/**
* @param string[] $patchNames
* @param string $baseDir
* @param callable $patchFileFactory
* @return PatchFile[]
*/
function getPatchFiles($patchNames, $baseDir, $patchFileFactory)
{
return array_map(
function ($patchName) use ($baseDir, $patchFileFactory) {
return call_user_func($patchFileFactory, $patchName, $baseDir);
},
$patchNames
);
}
/**
* @param string $baseDir
* @return string[]
*/
function getPatchNamesList($baseDir)
{
$result = array();
foreach (new \RecursiveIteratorIterator(new \RecursiveDirectoryIterator($baseDir)) as $fileInfo) {
if ($fileInfo->isFile()) {
$patchName = ltrim(substr($fileInfo->getPathname(), strlen($baseDir)), '/');
$nameWoExt = $fileInfo->getExtension() ?
substr($patchName, 0, strlen($patchName) - strlen($fileInfo->getExtension()) - 1) :
$patchName;
$result[$nameWoExt] = $patchName;
}
}
ksort($result);
return array_values($result);
}
/**
* @param PatchFile $patchFile
* @return string
*/
function patchStatusText($patchFile)
{
switch ($patchFile->status) {
case PatchFile::STATUS_INSTALLED:
return 'installed';
case PatchFile::STATUS_CHANGED:
return 'installed but changed after installation';
case PatchFile::STATUS_ERROR:
return 'installed with errors';
default:
return 'new';
}
}
/**
* @param PatchFile $patchFile
* @return string
*/
function patchText($patchFile)
{
$statusText = \DBPatcher\patchStatusText($patchFile);
return "* {$patchFile->name} [{$statusText}]";
}