Paladox has uploaded a new change for review.

  https://gerrit.wikimedia.org/r/284517

Change subject: Allow viewing all ref type commits
......................................................................

Allow viewing all ref type commits

This allows us to view ref types such as refs/changes and refs/meta since
we use gerrit where we have the repo's but we carn't currently view all
commit since some are open and stored in refs/changes which phabricator
dosen't view yet, with this patch it lets us view those commits.

Change-Id: I7f8205651f717e98271f6f18c37730955f953d68
---
M src/applications/diffusion/query/lowlevel/DiffusionLowLevelGitRefQuery.php
M src/applications/repository/engine/PhabricatorRepositoryPullEngine.php
2 files changed, 70 insertions(+), 3 deletions(-)


  git pull ssh://gerrit.wikimedia.org:29418/phabricator/phabricator 
refs/changes/17/284517/1

diff --git 
a/src/applications/diffusion/query/lowlevel/DiffusionLowLevelGitRefQuery.php 
b/src/applications/diffusion/query/lowlevel/DiffusionLowLevelGitRefQuery.php
index 1f17f5f..08d9e2d 100644
--- a/src/applications/diffusion/query/lowlevel/DiffusionLowLevelGitRefQuery.php
+++ b/src/applications/diffusion/query/lowlevel/DiffusionLowLevelGitRefQuery.php
@@ -43,6 +43,10 @@
       $prefixes[] = 'refs/tags/';
     }
 
+    if (!$this->isTag) {
+      $prefixes[] = 'refs/meta/';
+    }
+
     $order = '-creatordate';
 
     $futures = array();
@@ -55,6 +59,7 @@
     }
 
     // Resolve all the futures first. We want to iterate over them in prefix
+
     // order, not resolution order.
     foreach (new FutureIterator($futures) as $prefix => $future) {
       $future->resolvex();
@@ -63,7 +68,6 @@
     $results = array();
     foreach ($futures as $prefix => $future) {
       list($stdout) = $future->resolvex();
-
       $stdout = rtrim($stdout);
       if (!strlen($stdout)) {
         continue;
@@ -103,7 +107,70 @@
       }
     }
 
-    return $results;
+    $prefixes_custom = array();
+
+    if (!$this->isTag) {
+      $prefixes_custom[] = 'refs/changes/';
+    }
+
+    $futures_custom = array();
+    foreach ($prefixes_custom as $prefix_custom) {
+      $futures_custom['refs/'] = $repository->getLocalCommandFuture(
+        'for-each-ref --sort=%s --format=%s %s',
+        $order,
+        $this->getFormatString(),
+        $prefix_custom);
+    }
+
+    // Resolve all the futures first. We want to iterate over them in prefix
+    // order, not resolution order.
+    foreach (new FutureIterator($futures_custom) as $prefix_custom => 
$future_custom) {
+      $future_custom->resolvex();
+    }
+
+    foreach ($futures_custom as $prefix_custom => $future_custom) {
+      list($stdout) = $future_custom->resolvex();
+
+      $stdout = rtrim($stdout);
+      if (!strlen($stdout)) {
+        continue;
+      }
+
+      // NOTE: Although git supports --count, we can't apply any offset or
+      // limit logic until the very end because we may encounter a HEAD which
+      // we want to discard.
+
+      $lines = explode("\5", $stdout);
+      $lines = array_filter($lines);
+      foreach ($lines as $line) {
+        $fields = $this->extractFields($line);
+
+        $creator = $fields['creator'];
+        $matches = null;
+        if (preg_match('/^(.*) ([0-9]+) ([0-9+-]+)$/', $creator, $matches)) {
+          $fields['author'] = $matches[1];
+          $fields['epoch'] = (int)$matches[2];
+        } else {
+          $fields['author'] = null;
+          $fields['epoch'] = null;
+        }
+
+        $commit = nonempty($fields['*objectname'], $fields['objectname']);
+
+        $short = substr($fields['refname'], strlen($prefix_custom));
+        if ($short == 'HEAD') {
+          continue;
+        }
+
+        $ref = id(new DiffusionRepositoryRef())
+          ->setShortName($short)
+          ->setCommitIdentifier($commit)
+          ->setRawFields($fields);
+
+        $results[] = $ref;
+      }
+    }
+   return $results;
   }
 
   /**
diff --git 
a/src/applications/repository/engine/PhabricatorRepositoryPullEngine.php 
b/src/applications/repository/engine/PhabricatorRepositoryPullEngine.php
index 690f942..3fbbd53 100644
--- a/src/applications/repository/engine/PhabricatorRepositoryPullEngine.php
+++ b/src/applications/repository/engine/PhabricatorRepositoryPullEngine.php
@@ -314,7 +314,7 @@
         // For bare working copies, we need this magic incantation.
         $future = $repository->getRemoteCommandFuture(
           'fetch origin %s --prune',
-          '+refs/heads/*:refs/heads/*');
+          '+refs/*:refs/*');
       } else {
         $future = $repository->getRemoteCommandFuture(
           'fetch --all --prune');

-- 
To view, visit https://gerrit.wikimedia.org/r/284517
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings

Gerrit-MessageType: newchange
Gerrit-Change-Id: I7f8205651f717e98271f6f18c37730955f953d68
Gerrit-PatchSet: 1
Gerrit-Project: phabricator/phabricator
Gerrit-Branch: wmf/dev
Gerrit-Owner: Paladox <[email protected]>

_______________________________________________
MediaWiki-commits mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits

Reply via email to