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 parent::GetHash(); } /** * 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()); } } |