SymlinkFilesystem::removeSymlink()   A
last analyzed

Complexity

Conditions 3
Paths 3

Size

Total Lines 14
Code Lines 6

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
dl 0
loc 14
c 0
b 0
f 0
rs 9.4285
cc 3
eloc 6
nc 3
nop 1
1
<?php
2
3
/*
4
 * This file is part of the "Composer Shared Package Plugin" package.
5
 *
6
 * https://github.com/Letudiant/composer-shared-package-plugin
7
 *
8
 * For the full license information, please view the LICENSE
9
 * file that was distributed with this source code.
10
 */
11
12
namespace LEtudiant\Composer\Util;
13
14
use Composer\Util\Filesystem;
15
16
/**
17
 * @author Sylvain Lorinet <[email protected]>
18
 */
19
class SymlinkFilesystem extends Filesystem
20
{
21
    /**
22
     * Create a symlink
23
     *
24
     * @param string $sourcePath
25
     * @param string $symlinkPath
26
     *
27
     * @return bool
28
     */
29
    public function ensureSymlinkExists($sourcePath, $symlinkPath)
30
    {
31
        if (!is_link($symlinkPath)) {
32
            $this->ensureDirectoryExists(dirname($symlinkPath));
33
34
            return symlink($sourcePath, $symlinkPath);
35
        }
36
37
        return false;
38
    }
39
40
    /**
41
     * @param string $symlinkPath
42
     *
43
     * @return bool
44
     *
45
     * @throws \RuntimeException
46
     */
47
    public function removeSymlink($symlinkPath)
48
    {
49
        if (is_link($symlinkPath)) {
50
            if (!$this->unlink($symlinkPath)) {
51
                // @codeCoverageIgnoreStart
52
                throw new \RuntimeException('Unable to remove the symlink : ' . $symlinkPath);
53
                // @codeCoverageIgnoreEnd
54
            }
55
56
            return true;
57
        }
58
59
        return false;
60
    }
61
62
    /**
63
     * @param string $directoryPath
64
     *
65
     * @return bool
66
     *
67
     * @throws \RuntimeException
68
     */
69
    public function removeEmptyDirectory($directoryPath)
70
    {
71
        if (is_dir($directoryPath) && $this->isDirEmpty($directoryPath)) {
72
            if (!$this->removeDirectory($directoryPath)) {
73
                // @codeCoverageIgnoreStart
74
                throw new \RuntimeException('Unable to remove the directory : ' . $directoryPath);
75
                // @codeCoverageIgnoreEnd
76
            }
77
78
            return true;
79
        }
80
81
        return false;
82
    }
83
}
84