update 0.5.0 changelog
[phorkie.git] / src / phorkie / Repository / ConnectionInfo.php
index 3815856a8444d62449e72828adfc3d53fd04fe3f..f6a7a40697fef6b52d10cb5ff748654a22fac76c 100644 (file)
@@ -10,7 +10,10 @@ class Repository_ConnectionInfo
     public function __construct(Repository $repo)
     {
         $this->repo = $repo;
-        $this->arConfig = parse_ini_file($this->repo->gitDir . '/config', true);
+        //we need raw parsing; https://bugs.php.net/bug.php?id=68347
+        $this->arConfig = parse_ini_file(
+            $this->repo->gitDir . '/config', true, INI_SCANNER_RAW
+        );
     }
 
     public function isFork()
@@ -18,6 +21,11 @@ class Repository_ConnectionInfo
         return $this->getOrigin() !== null;
     }
 
+    public function hasForks()
+    {
+        return count($this->getForks()) > 0;
+    }
+
 
     public function getOrigin()
     {
@@ -30,13 +38,24 @@ class Repository_ConnectionInfo
      */
     public function getRemote($name)
     {
-        if (!isset($this->arConfig['remote ' . $name])) {
+        if (!isset($this->arConfig['remote "' . $name . '"'])) {
             return null;
         }
-        return new Repository_Remote($name, $this->arConfig['remote ' . $name]);
+        return new Repository_Remote($name, $this->arConfig['remote "' . $name . '"']);
     }
 
+    public function getForks()
+    {
+        $arForks = array();
+        foreach ($this->arConfig as $name => $data) {
+            if (substr($name, 0, 13) != 'remote "fork-') {
+                continue;
+            }
+            $arForks[substr($name, 8, -1)] = new Repository_Remote(
+                substr($name, 8, -1), $data
+            );
+        }
+        return $arForks;
+    }
 }
-
-
 ?>