remote forking: use the original http/https url in description
authorChristian Weiske <cweiske@cweiske.de>
Fri, 21 Sep 2012 18:10:41 +0000 (20:10 +0200)
committerChristian Weiske <cweiske@cweiske.de>
Fri, 21 Sep 2012 18:10:41 +0000 (20:10 +0200)
data/templates/fork-remote-multiple.htm
src/phorkie/ForkRemote.php
src/phorkie/Forker.php
www/fork-remote.php

index f5a95b2..8709f11 100644 (file)
@@ -1,4 +1,5 @@
 <form method="post" action="/fork-remote" enctype="multipart/form-data" class="well form-inline form-horizontal">
+ <input type="hidden" name="orig_url" value="{{remote_url}}" />
  <div class="control-group">
   <p>
    The URL you provided contains links to several Git repositories.
index c9ed748..d2b077b 100644 (file)
@@ -22,13 +22,15 @@ class ForkRemote
 
     public function parse()
     {
-        $arUrl = parse_url($this->url);
+        $arUrl  = parse_url($this->url);
         $scheme = $arUrl['scheme'] ?: '';
+
         if ($scheme == 'https' && isset($arUrl['host'])
             && $arUrl['host'] == 'gist.github.com'
         ) {
-            $scheme = 'git';
-            $this->url = 'git://gist.github.com/'. ltrim($arUrl['path'], '/') . '.git';
+            $this->arGitUrls[][] = 'git://gist.github.com/'
+                . ltrim($arUrl['path'], '/') . '.git';
+            return true;
         }
 
         switch ($scheme) {
@@ -113,6 +115,22 @@ class ForkRemote
         return $this->arGitUrls;
     }
 
+    /**
+     * Get the URL from which the git URL was derived, often
+     * the HTTP URL.
+     *
+     * @return string
+     */
+    public function getUrl()
+    {
+        return $this->url;
+    }
+
+    public function setUrl($url)
+    {
+        $this->url = $url;
+    }
+
     public function isSupported($url)
     {
         return parse_url($url, PHP_URL_SCHEME) == 'git';
index 3425a72..f4901ed 100644 (file)
@@ -10,12 +10,12 @@ class Forker
         return $new;
     }
 
-    public function forkRemote($url)
+    public function forkRemote($cloneUrl, $originalUrl)
     {
-        $new = $this->fork($url);
+        $new = $this->fork($cloneUrl);
         file_put_contents(
             $new->gitDir . '/description',
-            'Fork of ' . $url
+            'Fork of ' . $originalUrl
         );
         return $new;
     }
index 374c8b8..0567748 100644 (file)
@@ -14,8 +14,11 @@ if (isset($_POST['remote_url'])) {
         //no url found
         $error = 'No git:// clone URL found';
     } else if (false !== ($gitUrl = $fr->getUniqueGitUrl())) {
+        if (isset($_POST['orig_url'])) {
+            $fr->setUrl($_POST['orig_url']);
+        }
         $forker = new Forker();
-        $new    = $forker->forkRemote($gitUrl);
+        $new    = $forker->forkRemote($gitUrl, $fr->getUrl());
         redirect($new->getLink('display'));
     } else {
         //multiple urls found