From 9b9cfb7bbd124a72c9321fa963809446a072a396 Mon Sep 17 00:00:00 2001
From: Niklas Fiekas <niklas.fiekas@googlemail.com>
Date: Wed, 28 Sep 2011 15:57:02 +0200
Subject: [PATCH 2/2]  #1291308 by Niklas Fiekas: Add
 VersioncontrolGitRepositoryController

---
 includes/VersioncontrolGitBackend.php              |    1 +
 includes/VersioncontrolGitRepository.php           |   28 ++++++++++++++++++++
 includes/VersioncontrolGitRepositoryController.php |   23 ++++++++++++++++
 versioncontrol_git.info                            |    1 +
 4 files changed, 53 insertions(+), 0 deletions(-)
 create mode 100644 includes/VersioncontrolGitRepositoryController.php

diff --git a/includes/VersioncontrolGitBackend.php b/includes/VersioncontrolGitBackend.php
index f6b26dd..a38493e 100644
--- a/includes/VersioncontrolGitBackend.php
+++ b/includes/VersioncontrolGitBackend.php
@@ -12,6 +12,7 @@ class VersioncontrolGitBackend extends VersioncontrolBackend {
     );
 
   public $classesControllers = array(
+    'repo' => 'VersioncontrolGitRepositoryController',
     'operation' => 'VersioncontrolGitOperationController',
     'item' => 'VersioncontrolGitItemController',
   );
diff --git a/includes/VersioncontrolGitRepository.php b/includes/VersioncontrolGitRepository.php
index a93f1f0..dde63a7 100644
--- a/includes/VersioncontrolGitRepository.php
+++ b/includes/VersioncontrolGitRepository.php
@@ -3,6 +3,34 @@
 class VersioncontrolGitRepository extends VersioncontrolRepository {
 
   /**
+   * The branch name of the default (HEAD) branch or empty if this information
+   * is not available.
+   */
+  public $default_branch;
+
+  protected function backendDelete($options) {
+    db_delete('versioncontrol_git_repositories')
+      ->condition('repo_id', $this->repo_id)
+      ->execute();
+  }
+
+  protected function backendUpdate($options) {
+    db_update('versioncontrol_git_repositories')
+      ->condition('repo_id', $this->repo_id)
+      ->fields(array('default_branch' => $this->default_branch))
+      ->execute();
+  }
+
+  protected function backendInsert($options) {
+    db_insert('versioncontrol_git_repositories')
+      ->fields(array(
+        'repo_id' => $this->repo_id,
+        'default_branch' => $this->default_branch,
+      ))
+      ->execute();
+  }
+
+  /**
    * State flag indicating whether or not the GIT_DIR variable has been pushed
    * into the environment.
    *
diff --git a/includes/VersioncontrolGitRepositoryController.php b/includes/VersioncontrolGitRepositoryController.php
new file mode 100644
index 0000000..a8dc33b
--- /dev/null
+++ b/includes/VersioncontrolGitRepositoryController.php
@@ -0,0 +1,23 @@
+<?php
+
+/**
+ * @file
+ *
+ * Extends VersioncontrolRepositoryController with Git specific features.
+ */
+
+class VersioncontrolGitRepositoryController extends VersioncontrolRepositoryController {
+
+  /**
+   * Extends the base query with the git backend's additional data in
+   * {versioncontrol_git_repositories}.
+   *
+   * @return SelectQuery
+   */
+  protected function buildQueryBase($ids, $conditions) {
+    $query = parent::buildQueryBase($ids, $conditions);
+    $alias = $query->leftJoin('versioncontrol_git_repositories', 'vcgr', 'base.repo_id = vcgr.repo_id');
+    $query->fields($alias, drupal_schema_fields_sql('versioncontrol_git_repositories'));
+    return $query;
+  }
+}
diff --git a/versioncontrol_git.info b/versioncontrol_git.info
index 1ae170e..cc474f3 100644
--- a/versioncontrol_git.info
+++ b/versioncontrol_git.info
@@ -11,4 +11,5 @@ files[] = includes/VersioncontrolGitItem.php
 files[] = includes/VersioncontrolGitItemController.php
 files[] = includes/VersioncontrolGitOperation.php
 files[] = includes/VersioncontrolGitOperationController.php
+files[] = includes/VersioncontrolGitRepositoryController.php
 files[] = includes/VersioncontrolGitRepositoryManagerWorkerInterface.php
-- 
1.7.4.4

