? commitlog/includes/plugins/views_sets/VersioncontrolViewsSetIndividualCommitView.class.php
? commitlog/includes/plugins/views_sets/individual_commit_view.inc
Index: commitlog/includes/views/default_views/commitlog_commit_items.view.php
===================================================================
RCS file: /cvs/drupal-contrib/contributions/modules/versioncontrol/commitlog/includes/views/default_views/commitlog_commit_items.view.php,v
retrieving revision 1.1
diff -u -p -r1.1 commitlog_commit_items.view.php
--- commitlog/includes/views/default_views/commitlog_commit_items.view.php	16 Jan 2011 19:26:01 -0000	1.1
+++ commitlog/includes/views/default_views/commitlog_commit_items.view.php	16 Jan 2011 21:24:15 -0000
@@ -35,6 +35,7 @@ $handler->override_option('fields', arra
     'empty' => '',
     'hide_empty' => 0,
     'empty_zero' => 0,
+    'link_type' => 'log',
     'exclude' => 0,
     'id' => 'path',
     'table' => 'versioncontrol_item_revisions',
Index: includes/views/versioncontrol.views.inc
===================================================================
RCS file: /cvs/drupal-contrib/contributions/modules/versioncontrol/includes/views/versioncontrol.views.inc,v
retrieving revision 1.22
diff -u -p -r1.22 versioncontrol.views.inc
--- includes/views/versioncontrol.views.inc	3 Jan 2011 16:09:20 -0000	1.22
+++ includes/views/versioncontrol.views.inc	16 Jan 2011 21:24:16 -0000
@@ -291,6 +291,7 @@ function versioncontrol_views_data() {
       'click sortable' => TRUE,
       'additional fields' => array(
         'vcs' => array('table' => 'versioncontrol_repositories', 'field' => 'vcs'),
+        'repo_id' => array('table' => 'versioncontrol_repositories', 'field' => 'repo_id'),
       ),
     ),
     'sort' => array(
@@ -307,7 +308,7 @@ function versioncontrol_views_data() {
     'title'    => t('Message'),
     'help'     => t('The Operation Message'),
     'field'    => array(
-      'handler' => 'views_handler_field',
+      'handler' => 'versioncontrol_handler_field_operation_message',
     ),
   );
   $data['versioncontrol_operations']['table']['join'] = array(
@@ -440,8 +441,14 @@ function versioncontrol_views_data() {
   $data['versioncontrol_item_revisions']['path'] = array(
     'title' => t("File path"),
     'help' => t("The file path within the repository"),
-    'field' => array(
-      'handler' => 'views_handler_field',
+    'field'    => array(
+      'handler' => 'versioncontrol_handler_field_item_revision_path',
+      'click sortable' => TRUE,
+      'additional fields' => array(
+        'vcs' => array('table' => 'versioncontrol_repositories', 'field' => 'vcs'),
+        'repo_id' => array('table' => 'versioncontrol_repositories', 'field' => 'repo_id'),
+        'item_revision_id',
+      ),
     ),
     'sort' => array(
       'handler' => 'views_handler_sort',
@@ -461,6 +468,7 @@ function versioncontrol_views_data() {
       'click sortable' => TRUE,
       'additional fields' => array(
         'vcs' => array('table' => 'versioncontrol_repositories', 'field' => 'vcs'),
+        'repo_id' => array('table' => 'versioncontrol_repositories', 'field' => 'repo_id'),
       ),
     ),
     'sort' => array(
@@ -545,6 +553,9 @@ function versioncontrol_views_handlers()
       'versioncontrol_handler_field_operation_type' => array(
         'parent' => 'views_handler_field',
       ),
+      'versioncontrol_handler_field_operation_message' => array(
+        'parent' => 'views_handler_field',
+      ),
       'versioncontrol_handler_field_operation_revision' => array(
         'parent' => 'views_handler_field',
       ),
@@ -557,6 +568,9 @@ function versioncontrol_views_handlers()
       'versioncontrol_handler_field_item_revision_action' => array(
         'parent' => 'views_handler_field',
       ),
+      'versioncontrol_handler_field_item_revision_path' => array(
+        'parent' => 'views_handler_field',
+      ),
       'versioncontrol_handler_field_item_revision_visual_diffstat' => array(
         'parent' => 'views_handler_field',
       ),
Index: includes/views/handlers/versioncontrol_handler_field_item_revision_path.inc
===================================================================
RCS file: includes/views/handlers/versioncontrol_handler_field_item_revision_path.inc
diff -N includes/views/handlers/versioncontrol_handler_field_item_revision_path.inc
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ includes/views/handlers/versioncontrol_handler_field_item_revision_path.inc	16 Jan 2011 21:24:16 -0000
@@ -0,0 +1,73 @@
+<?php
+// $Id$
+class versioncontrol_handler_field_item_revision_path extends views_handler_field {
+  public $backends = NULL;
+  public $repos = array();
+  public $itemRevisions = array();
+
+  function construct() {
+    parent::construct();
+    $this->backends = versioncontrol_get_backends();
+  }
+
+  /**
+   * Get a repository of the @param $vcs type.
+   */
+  function getRepository($vcs, $repo_id) {
+    if (!isset($this->repos[$repo_id])) {
+      $this->repos[$repo_id] = $this->backends[$vcs]->loadEntity('repo', array($repo_id));
+    }
+    return $this->repos[$repo_id];
+  }
+
+  /**
+   * Get an item revision.
+   */
+  function getItemRevision($vcs, $item_revision_id) {
+    if (!isset($this->itemRevisions[$item_revision_id])) {
+      $this->itemRevisions[$item_revision_id] = $this->backends[$vcs]->loadEntity('item', array($item_revision_id));
+    }
+    return $this->itemRevisions[$item_revision_id];
+  }
+
+  function option_definition() {
+    $options = parent::option_definition();
+    $options['link_type'] = array('default' => 'view', 'translatable' => TRUE);
+    return $options;
+  }
+
+  function options_form(&$form, &$form_state) {
+    parent::options_form($form, $form_state);
+    $form['link_type'] = array(
+      '#type' => 'radios',
+      '#title' => t('Where to link at the repository browser'),
+      '#default_value' => $this->options['link_type'],
+      '#options' => array(
+        'view' => t('Item content'),
+        'log' => t('Item log history'),
+      ),
+    );
+  }
+
+  function render($values) {
+    $path = $values->{$this->field_alias};
+    $vcs = $values->{$this->aliases['vcs']};
+    $repo_id = $values->{$this->aliases['repo_id']};
+    $item_revision_id = $values->{$this->aliases['item_revision_id']};
+    $repo = $this->getRepository($vcs, $repo_id);
+    $url_handler = $repo->getUrlHandler();
+    $item_revision = $this->getItemRevision($vcs, $item_revision_id);
+    $link_type = !empty($this->options['link_type']) ? $this->options['link_type'] : 'view';
+    switch ($link_type) {
+      case 'log':
+        $link = $url_handler->getItemLogViewUrl($item_revision);
+      case 'view':
+      default:
+        $link = $url_handler->getItemViewUrl($item_revision);
+    }
+    if (!empty($link)) {
+      return l(check_plain($path), $link);
+    }
+    return check_plain($path);
+  }
+}
Index: includes/views/handlers/versioncontrol_handler_field_operation_message.inc
===================================================================
RCS file: includes/views/handlers/versioncontrol_handler_field_operation_message.inc
diff -N includes/views/handlers/versioncontrol_handler_field_operation_message.inc
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ includes/views/handlers/versioncontrol_handler_field_operation_message.inc	16 Jan 2011 21:24:16 -0000
@@ -0,0 +1,36 @@
+<?php
+// $Id$
+
+/**
+ * Version Control API field handler to be able to generate bug tracker
+ * links.
+ */
+class versioncontrol_handler_field_operation_message extends views_handler_field {
+  function option_definition() {
+    $options = parent::option_definition();
+    $options['issue_tracker_url'] = array('default' => '', 'translatable' => TRUE);
+    return $options;
+  }
+
+  function options_form(&$form, &$form_state) {
+    parent::options_form($form, $form_state);
+    $form['issue_tracker_url'] = array(
+      '#type' => 'textfield',
+      '#title' => t('Issue tracker URL'),
+      '#description' => t('Convert #123 into a link to the issue tracker. Use %issue_id in the place the issue ID should be replaced. For example http://drupal.org/node/%issue_id'),
+      '#default_value' => '',
+    );
+  }
+
+  function render($values) {
+    $message = $values->{$this->field_alias};
+    if (empty($this->options['issue_tracker_url'])) {
+      return $message;
+    }
+    return preg_replace('/#(\d+)\b/ie',
+      "strtr('<a href=\"!url\">#\\1</a>', array('!url' => strtr(\$this->options['issue_tracker_url'], array('%issue_id' => \\1))))",
+      htmlspecialchars($message)
+    );
+  }
+
+}
Index: includes/views/handlers/versioncontrol_handler_field_operation_revision.inc
===================================================================
RCS file: /cvs/drupal-contrib/contributions/modules/versioncontrol/includes/views/handlers/versioncontrol_handler_field_operation_revision.inc,v
retrieving revision 1.1
diff -u -p -r1.1 versioncontrol_handler_field_operation_revision.inc
--- includes/views/handlers/versioncontrol_handler_field_operation_revision.inc	3 Dec 2010 08:44:58 -0000	1.1
+++ includes/views/handlers/versioncontrol_handler_field_operation_revision.inc	16 Jan 2011 21:24:16 -0000
@@ -7,16 +7,40 @@
  */
 class versioncontrol_handler_field_operation_revision extends views_handler_field {
   public $backends = NULL;
+  public $repos = array();
 
   function construct() {
     parent::construct();
     $this->backends = versioncontrol_get_backends();
+    $this->additional_fields['repo_id'] = array('table' => 'versioncontrol_operations', 'field' => 'repo_id');
+  }
+
+  function query() {
+    $this->ensure_my_table();
+    $this->add_additional_fields();
+  }
+
+  /**
+   * Get a repository of the @param $vcs type.
+   */
+  function getRepository($vcs, $repo_id) {
+    if (!isset($this->repos[$repo_id])) {
+      $this->repos[$repo_id] = $this->backends[$vcs]->loadEntity('repo', array($repo_id));
+    }
+    return $this->repos[$repo_id];
   }
 
   function render($values) {
     $revision = $values->{$this->field_alias};
     $vcs = $values->{$this->aliases['vcs']};
+    $repo_id = $values->{$this->aliases['repo_id']};
     $revision = $this->backends[$vcs]->formatRevisionIdentifier($revision, 'short');
+    $repo = $this->getRepository($vcs, $repo_id);
+    $url_handler = $repo->getUrlHandler();
+    $link = $url_handler->getCommitViewUrl($revision);
+    if (!empty($link)) {
+      return l(check_plain($revision), $link);
+    }
     return check_plain($revision);
   }
 }
