Completed
Push — develop ( 5f7df1...9cb564 )
by Matteo
10s
created

CallerSSH2::__construct()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 5
Code Lines 3

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 0
CRAP Score 2
Metric Value
dl 0
loc 5
ccs 0
cts 4
cp 0
rs 9.4285
cc 1
eloc 3
nc 1
nop 2
crap 2
1
<?php
2
/**
3
 * GitElephant - An abstraction layer for git written in PHP
4
 * Copyright (C) 2013  Matteo Giachino
5
 *
6
 * This program is free software: you can redistribute it and/or modify
7
 * it under the terms of the GNU General Public License as published by
8
 * the Free Software Foundation, either version 3 of the License, or
9
 * (at your option) any later version.
10
 *
11
 * This program is distributed in the hope that it will be useful,
12
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14
 * GNU General Public License for more details.
15
 *
16
 * You should have received a copy of the GNU General Public License
17
 * along with this program.  If not, see [http://www.gnu.org/licenses/].
18
 */
19
20
namespace GitElephant\Command\Caller;
21
22
/**
23
 * Caller via ssh2 PECL extension
24
 *
25
 * @author Matteo Giachino <[email protected]>
26
 */
27
class CallerSSH2 implements CallerInterface
28
{
29
    /**
30
     * @var resource
31
     */
32
    private $resource;
33
34
    /**
35
     * @var string
36
     */
37
    private $gitPath;
38
39
    /**
40
     * the output lines of the command
41
     *
42
     * @var array
43
     */
44
    private $outputLines = array();
45
46
    /**
47
     * @param resource $resource
48
     * @param string   $gitPath path of the git executable on the remote host
49
     *
50
     * @internal param string $host remote host
51
     * @internal param int $port remote port
52
     */
53
    public function __construct($resource, $gitPath = '/usr/bin/git')
54
    {
55
        $this->resource = $resource;
56
        $this->gitPath = $gitPath;
57
    }
58
59
    /**
60
     * execute a command
61
     *
62
     * @param string      $cmd the command
63
     * @param bool        $git prepend git to the command
64
     * @param null|string $cwd directory where the command should be executed
65
     *
66
     * @return CallerInterface
67
     */
68
    public function execute($cmd, $git = true, $cwd = null)
69
    {
70
        if ($git) {
71
            $cmd = $this->gitPath . ' ' . $cmd;
72
        }
73
        $stream = ssh2_exec($this->resource, $cmd);
74
        stream_set_blocking($stream, 1);
75
        $data = stream_get_contents($stream);
76
        fclose($stream);
77
        // rtrim values
78
        $values = array_map('rtrim', explode(PHP_EOL, $data));
79
        $this->outputLines = $values;
80
81
        return $this;
82
    }
83
84
    /**
85
     * after calling execute this method should return the output
86
     *
87
     * @param bool $stripBlankLines strips the blank lines
88
     *
89
     * @return array
90
     */
91
    public function getOutputLines($stripBlankLines = false)
92
    {
93
        if ($stripBlankLines) {
94
            $output = array();
95
            foreach ($this->outputLines as $line) {
96
                if ('' !== $line) {
97
                    $output[] = $line;
98
                }
99
            }
100
101
            return $output;
102
        }
103
104
        return $this->outputLines;
105
    }
106
}
107