Overview

Packages

  • None
  • Vcs

Classes

  • Horde_Vcs
  • Horde_Vcs_Base
  • Horde_Vcs_Cvs
  • Horde_Vcs_Directory_Base
  • Horde_Vcs_Directory_Cvs
  • Horde_Vcs_Directory_Git
  • Horde_Vcs_Directory_Rcs
  • Horde_Vcs_Directory_Svn
  • Horde_Vcs_File_Base
  • Horde_Vcs_File_Cvs
  • Horde_Vcs_File_Git
  • Horde_Vcs_File_Rcs
  • Horde_Vcs_File_Svn
  • Horde_Vcs_Git
  • Horde_Vcs_Log_Base
  • Horde_Vcs_Log_Cvs
  • Horde_Vcs_Log_Git
  • Horde_Vcs_Log_Rcs
  • Horde_Vcs_Log_Svn
  • Horde_Vcs_Patchset
  • Horde_Vcs_Patchset_Base
  • Horde_Vcs_Patchset_Cvs
  • Horde_Vcs_Patchset_Git
  • Horde_Vcs_Patchset_Svn
  • Horde_Vcs_QuickLog_Base
  • Horde_Vcs_QuickLog_Cvs
  • Horde_Vcs_QuickLog_Git
  • Horde_Vcs_QuickLog_Rcs
  • Horde_Vcs_QuickLog_Svn
  • Horde_Vcs_Rcs
  • Horde_Vcs_Svn
  • Overview
  • Package
  • Class
  • Tree
 1: <?php
 2: /**
 3:  * Git patchset class.
 4:  *
 5:  * Copyright 2008-2012 Horde LLC (http://www.horde.org/)
 6:  *
 7:  * See the enclosed file COPYING for license information (LGPL). If you
 8:  * did not receive this file, see http://www.horde.org/licenses/lgpl21.
 9:  *
10:  * @author  Chuck Hagenbuch <chuck@horde.org>
11:  * @author  Michael Slusarz <slusarz@horde.org>
12:  * @package Vcs
13:  */
14: class Horde_Vcs_Patchset_Git extends Horde_Vcs_Patchset_Base
15: {
16:     /**
17:      * Constructor
18:      *
19:      * @param Horde_Vcs $rep  A Horde_Vcs repository object.
20:      * @param array $opts     Additional options.
21:      * <pre>
22:      * 'file' - (string) The filename to produce patchsets for.
23:      * 'range' - (array) The patchsets to process.
24:      *           DEFAULT: None (all patchsets are processed).
25:      * </pre>
26:      */
27:     public function __construct($rep, $opts = array())
28:     {
29:         $revs = array();
30: 
31:         if (isset($opts['file'])) {
32:             $ob = $rep->getFile($opts['file']);
33:             $revs = $ob->getLog();
34:         } elseif (!empty($opts['range'])) {
35:             foreach ($opts['range'] as $val) {
36:                 /* Grab a filename in the patchset to get log info. */
37:                 list($resource, $stream) = $rep->runCommand('diff-tree --name-only -r ' . escapeshellarg($val));
38: 
39:                 /* The first line is the SHA1 hash. */
40:                 $ob = $rep->getFile(fgets($stream));
41:                 fclose($stream);
42:                 proc_close($resource);
43:                 $revs[$val] = $ob->getLog($val);
44:             }
45:         }
46: 
47:         reset($revs);
48:         while (list($rev, $log) = each($revs)) {
49:             if (empty($log)) {
50:                 continue;
51:             }
52: 
53:             $this->_patchsets[$rev] = array_merge(
54:                 $log->toHash(),
55:                 array('members' => array())
56:             );
57: 
58:             foreach ($log->getFiles() as $file) {
59:                 $from = $log->getParent();
60:                 $to = $rev;
61: 
62:                 switch ($file['status']) {
63:                 case 'A':
64:                     $status = Horde_Vcs_Patchset::ADDED;
65:                     break;
66: 
67:                 case 'D':
68:                     $status = Horde_Vcs_Patchset::DELETED;
69:                     break;
70: 
71:                 default:
72:                     $status = Horde_Vcs_Patchset::MODIFIED;
73:                 }
74: 
75:                 $statinfo = isset($file['added'])
76:                     ? array('added' => $file['added'], 'deleted' => $file['deleted'])
77:                     : array();
78: 
79:                 $this->_patchsets[$rev]['members'][] = array_merge(array(
80:                     'file' => $file['srcPath'],
81:                     'from' => $from,
82:                     'status' => $status,
83:                     'to' => $to,
84:                 ), $statinfo);
85:             }
86:         }
87:     }
88: }
89: 
API documentation generated by ApiGen