aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorChristian Weiske <cweiske@cweiske.de>2012-11-21 22:34:24 +0100
committerChristian Weiske <cweiske@cweiske.de>2012-11-21 22:34:24 +0100
commitba158e3ed03dec10e6654b0b0dd3710504bdf04d (patch)
tree80112971f0e3b6d5d1f1ec4ef28f2208b7ff1680 /src
parentd63a7b14a6e1140fe5aa0610b1490f69b3494623 (diff)
downloadphorkie-ba158e3ed03dec10e6654b0b0dd3710504bdf04d.tar.gz
phorkie-ba158e3ed03dec10e6654b0b0dd3710504bdf04d.zip
first work on Fork origin display; works for local forks
Diffstat (limited to 'src')
-rw-r--r--src/phorkie/Repository.php8
-rw-r--r--src/phorkie/Repository/ConnectionInfo.php42
-rw-r--r--src/phorkie/Repository/Remote.php94
3 files changed, 144 insertions, 0 deletions
diff --git a/src/phorkie/Repository.php b/src/phorkie/Repository.php
index 5c68ee4..6b7435c 100644
--- a/src/phorkie/Repository.php
+++ b/src/phorkie/Repository.php
@@ -359,6 +359,14 @@ class Repository
return $arCommits;
}
+
+ /**
+ * @return Repository_ConnectionInfo
+ */
+ public function getConnectionInfo()
+ {
+ return new Repository_ConnectionInfo($this);
+ }
}
?>
diff --git a/src/phorkie/Repository/ConnectionInfo.php b/src/phorkie/Repository/ConnectionInfo.php
new file mode 100644
index 0000000..3815856
--- /dev/null
+++ b/src/phorkie/Repository/ConnectionInfo.php
@@ -0,0 +1,42 @@
+<?php
+namespace phorkie;
+
+class Repository_ConnectionInfo
+{
+ protected $arConfig;
+ protected $repo;
+
+
+ public function __construct(Repository $repo)
+ {
+ $this->repo = $repo;
+ $this->arConfig = parse_ini_file($this->repo->gitDir . '/config', true);
+ }
+
+ public function isFork()
+ {
+ return $this->getOrigin() !== null;
+ }
+
+
+ public function getOrigin()
+ {
+ return $this->getRemote('origin');
+ }
+
+ /**
+ * @return Repository_Remote|null NULL if the remote does not exist, array
+ * with repository information otherwise
+ */
+ public function getRemote($name)
+ {
+ if (!isset($this->arConfig['remote ' . $name])) {
+ return null;
+ }
+ return new Repository_Remote($name, $this->arConfig['remote ' . $name]);
+ }
+
+}
+
+
+?>
diff --git a/src/phorkie/Repository/Remote.php b/src/phorkie/Repository/Remote.php
new file mode 100644
index 0000000..4f5034c
--- /dev/null
+++ b/src/phorkie/Repository/Remote.php
@@ -0,0 +1,94 @@
+<?php
+namespace phorkie;
+
+class Repository_Remote
+{
+ protected $arConfig;
+ protected $name;
+
+ public function __construct($name, $arConfig)
+ {
+ $this->name = $name;
+ $this->arConfig = $arConfig;
+ }
+
+
+ public function getTitle()
+ {
+ if (isset($this->arConfig['title'])) {
+ return $this->arConfig['title'];
+ }
+ if ($this->isLocal()) {
+ $local = $this->getLocalRepository();
+ if ($local !== null) {
+ return $local->getTitle();
+ }
+ return 'deleted local paste';
+ }
+
+ return 'untitled repository';
+ }
+
+ public function getCloneURL()
+ {
+ if ($this->isLocal()) {
+ $local = $this->getLocalRepository();
+ if ($local !== null) {
+ return $local->getCloneURL();
+ }
+ }
+
+ return $this->arConfig['url'];
+ }
+
+ public function getWebURL()
+ {
+ if (isset($this->arConfig['homepage'])) {
+ return $this->arConfig['homepage'];
+ }
+
+ if ($this->isLocal()) {
+ $local = $this->getLocalRepository();
+ if ($local !== null) {
+ return $local->getLink('display');
+ }
+ }
+
+ return null;
+ }
+
+ /**
+ * Tells you if this remote repository is a paste on the local server
+ *
+ * @return boolean True of false
+ */
+ public function isLocal()
+ {
+ return isset($this->arConfig['url'])
+ && $this->arConfig['url']{0} == '/';
+ }
+
+ /**
+ * If this remote is a local paste, then we'll get the repository object
+ * returned
+ *
+ * @return Repository Repository object or NULL
+ */
+ public function getLocalRepository()
+ {
+ if (!file_exists($this->arConfig['url'] . '/config')) {
+ return null;
+ }
+ $dir = basename($this->arConfig['url']);
+ if (substr($dir, -4) != '.git') {
+ //phorks are bare repositories "123.git"
+ return null;
+ }
+ $repo = new Repository();
+ $repo->loadById(substr($dir, 0, -4));
+ return $repo;
+ }
+
+}
+
+?>