From ea6e6196b07745734c0e100e42b0e7f545f754f7 Mon Sep 17 00:00:00 2001
From: Marco Villegas <marvil07@gmail.com>
Date: Fri, 14 Jan 2011 18:07:43 -0500
Subject: [PATCH] task #994870 follow-up: Missing controller.

- Add missing item revision controller(needed for actually load the
  values on controller loading).
- gitweb: Removed items has not blob hash, so avoid returning a failed
  link.
---
 includes/VersioncontrolGitBackend.php              |    1 +
 includes/VersioncontrolGitItemController.php       |   17 +++++++++++++++++
 .../VersioncontrolRepositoryUrlHandlerGitweb.inc   |    4 ++++
 versioncontrol_git.info                            |    1 +
 4 files changed, 23 insertions(+), 0 deletions(-)
 create mode 100644 includes/VersioncontrolGitItemController.php

diff --git includes/VersioncontrolGitBackend.php includes/VersioncontrolGitBackend.php
index 3638574..b0547db 100644
--- includes/VersioncontrolGitBackend.php
+++ includes/VersioncontrolGitBackend.php
@@ -13,6 +13,7 @@ class VersioncontrolGitBackend extends VersioncontrolBackend {
 
   public $classesControllers = array(
     'operation' => 'VersioncontrolGitOperationController',
+    'item' => 'VersioncontrolGitItemController',
   );
 
   public $defaultViews = array(
diff --git includes/VersioncontrolGitItemController.php includes/VersioncontrolGitItemController.php
new file mode 100644
index 0000000..8b1e11f
--- /dev/null
+++ includes/VersioncontrolGitItemController.php
@@ -0,0 +1,17 @@
+<?php
+
+class VersioncontrolGitItemController extends VersioncontrolItemController {
+
+  /**
+   * Extend the base query with the git backend's additional data in
+   * {versioncontrol_git_operations}.
+   *
+   * @return SelectQuery
+   */
+  protected function buildQueryBase($ids, $conditions) {
+    $query = parent::buildQueryBase($ids, $conditions);
+    $alias = $query->leftJoin('versioncontrol_git_item_revisions', 'vcgir', 'base.item_revision_id = vcgir.item_revision_id');
+    $query->fields($alias, drupal_schema_fields_sql('versioncontrol_git_item_revisions'));
+    return $query;
+  }
+}
diff --git includes/plugins/webviewer_url_handlers/VersioncontrolRepositoryUrlHandlerGitweb.inc includes/plugins/webviewer_url_handlers/VersioncontrolRepositoryUrlHandlerGitweb.inc
index db22c03..6fca2dc 100644
--- includes/plugins/webviewer_url_handlers/VersioncontrolRepositoryUrlHandlerGitweb.inc
+++ includes/plugins/webviewer_url_handlers/VersioncontrolRepositoryUrlHandlerGitweb.inc
@@ -45,6 +45,10 @@ class VersioncontrolRepositoryUrlHandlerGitweb extends VersioncontrolRepositoryU
    * content.
    */
   public function getItemViewUrl(&$item) {
+    // Removed items has not blob hash
+    if (is_null($item->blob_hash)) {
+      return '';
+    }
     $placeholders = array(
       '%repo_name' => $this->repository->name,
       '%path'     => substr($item->path, 1),
diff --git versioncontrol_git.info versioncontrol_git.info
index 5f73184..d8e0c2a 100644
--- versioncontrol_git.info
+++ versioncontrol_git.info
@@ -9,5 +9,6 @@ files[] = includes/VersioncontrolGitAccount.php
 files[] = includes/VersioncontrolGitBackend.php
 files[] = includes/VersioncontrolGitRepository.php
 files[] = includes/VersioncontrolGitItem.php
+files[] = includes/VersioncontrolGitItemController.php
 files[] = includes/VersioncontrolGitOperation.php
 files[] = includes/VersioncontrolGitOperationController.php
-- 
1.7.2.3

