Don't completely replace parent GetHash, override and call base
[gitphp.git] / include / git / Ref.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
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
<?php
/**
 * GitPHP Ref
 *
 * Base class for ref objects
 *
 * @author Christopher Han <xiphux@gmail.com>
 * @copyright Copyright (c) 2010 Christopher Han
 * @package GitPHP
 * @subpackage Git
 */
 
require_once(GITPHP_GITOBJECTDIR . 'GitObject.class.php');
 
/**
 * Git Ref class
 *
 * @package GitPHP
 * @subpackage Git
 */
abstract class GitPHP_Ref extends GitPHP_GitObject
{
        
        /**
         * refName
         *
         * Stores the ref name
         *
         * @access protected
         */
        protected $refName;
 
        /**
         * refDir
         *
         * Stores the ref directory
         *
         * @access protected
         */
        protected $refDir;
 
        /**
         * __construct
         *
         * Instantiates ref
         *
         * @access public
         * @param mixed $project the project
         * @param string $refDir the ref directory
         * @param string $refName the ref name
         * @param string $refHash the ref hash
         * @throws Exception if not a valid ref
         * @return mixed git ref
         */
        public function __construct($project, $refDir, $refName, $refHash = '')
        {
                $this->project = $project;
                $this->refDir = $refDir;
                $this->refName = $refName;
                if (!empty($refHash)) {
                        $this->SetHash($refHash);
                }
        }
 
        /**
         * GetHash
         *
         * Gets the hash for this ref (overrides base)
         *
         * @access public
         * @return string object hash
         */
        public function GetHash()
        {
                if (empty($this->hash))
                        $this->FindHash();
 
                return $this->hash;
        }
 
        /**
         * FindHash
         *
         * Looks up the hash for the ref
         *
         * @access protected
         * @throws Exception if hash is not found
         */
        protected function FindHash()
        {
                $exe = new GitPHP_GitExe($this->GetProject());
                $args = array();
                $args[] = '--hash';
                $args[] = '--verify';
                $args[] = $this->GetRefPath();
                $hash = trim($exe->Execute(GIT_SHOW_REF, $args));
 
                if (empty($hash))
                        throw new Exception('Invalid ref ' . $this->GetRefPath());
 
                $this->SetHash($hash);
        }
 
        /**
         * GetName
         *
         * Gets the ref name
         *
         * @access public
         * @return string ref name
         */
        public function GetName()
        {
                return $this->refName;
        }
 
        /**
         * GetDirectory
         *
         * Gets the ref directory
         *
         * @access public
         * @return string ref directory
         */
        public function GetDirectory()
        {
                return $this->refDir;
        }
 
        /**
         * GetRefPath
         *
         * Gets the path to the ref within the project
         *
         * @access public
         * @return string ref path
         */
        public function GetRefPath()
        {
                return 'refs/' . $this->refDir . '/' . $this->refName;
        }
 
        /**
         * GetFullPath
         *
         * Gets the path to the ref including the project path
         *
         * @access public
         * @return string full ref path
         */
        public function GetFullPath()
        {
                return $this->GetProject()->GetPath() . '/' . $this->GetRefPath();
        }
 
        /**
         * __sleep
         *
         * Called to prepare the object for serialization
         *
         * @access public
         * @return array list of properties to serialize
         */
        public function __sleep()
        {
                $properties = array('refName', 'refDir');
 
                return array_merge($properties, parent::__sleep());
        }
 
}
 
comments