Merge pull request #11 from bessl/patch-2
[gitphp.git] / include / git / archive / Archive_Tar.class.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
/**
 * Tar archive creation class
 *
 * @author Christopher Han <xiphux@gmail.com>
 * @copyright Copyright (c) 2012 Christopher Han
 * @package GitPHP
 * @subpackage Git\Archive
 */
class GitPHP_Archive_Tar implements GitPHP_ArchiveStrategy_Interface
{
        /**
         * Executable
         *
         * @var GitPHP_GitExe
         */
        protected $exe;
 
        /**
         * Process handle
         *
         * @var resource
         */
        protected $handle;
 
        /**
         * Set executable for this archive
         *
         * @param GitPHP_GitExe $exe git exe
         */
        public function SetExe($exe)
        {
                $this->exe = $exe;
        }
 
        /**
         * Open a descriptor for this archive
         *
         * @param GitPHP_Archive $archive archive
         * @return boolean true on success
         */
        public function Open($archive)
        {
                if (!$archive)
                        return false;
 
                if ($this->handle) {
                        return true;
                }
 
                $args = array();
                $args[] = '--format=tar';
                $args[] = '--prefix=' . $archive->GetPrefix();
                $args[] = $archive->GetObject()->GetHash();
 
                $this->handle = $this->exe->Open($archive->GetProject()->GetPath(), GIT_ARCHIVE, $args);
 
                return ($this->handle !== false);
        }
 
        /**
         * Read a chunk of the archive data
         *
         * @param int $size size of data to read
         * @return string|boolean archive data or false
         */
        public function Read($size = 1048576)
        {
                if (!$this->handle)
                        return false;
 
                if (feof($this->handle))
                        return false;
 
                return fread($this->handle, $size);
        }
 
        /**
         * Close archive descriptor
         */
        public function Close()
        {
                if (!$this->handle)
                        return true;
 
                pclose($this->handle);
 
                $this->handle = null;
 
                return true;
        }
 
        /**
         * Gets the file extension for this format
         *
         * @return string extension
         */
        public function Extension()
        {
                return 'tar';
        }
 
        /**
         * Gets the mime type for this format
         *
         * @return string mime type
         */
        public function MimeType()
        {
                return 'application/x-tar';
        }
 
        /**
         * Gets whether this archiver is valid
         *
         * @return boolean true if valid
         */
        public function Valid()
        {
                return true;
        }
}
 
comments