VersionControl_SVN
[ class tree: VersionControl_SVN ] [ index: VersionControl_SVN ] [ all elements ]

Source for file SVN.php

Documentation is available at SVN.php

  1. <?php
  2. /* vim: set expandtab tabstop=4 shiftwidth=4: */
  3. /**
  4.  * +----------------------------------------------------------------------+
  5.  * | This LICENSE is in the BSD license style.                            |
  6.  * | http://www.opensource.org/licenses/bsd-license.php                   |
  7.  * |                                                                      |
  8.  * | Redistribution and use in source and binary forms, with or without   |
  9.  * | modification, are permitted provided that the following conditions   |
  10.  * | are met:                                                             |
  11.  * |                                                                      |
  12.  * |  * Redistributions of source code must retain the above copyright    |
  13.  * |    notice, this list of conditions and the following disclaimer.     |
  14.  * |                                                                      |
  15.  * |  * Redistributions in binary form must reproduce the above           |
  16.  * |    copyright notice, this list of conditions and the following       |
  17.  * |    disclaimer in the documentation and/or other materials provided   |
  18.  * |    with the distribution.                                            |
  19.  * |                                                                      |
  20.  * |  * Neither the name of Clay Loveless nor the names of contributors   |
  21.  * |    may be used to endorse or promote products derived from this      |
  22.  * |    software without specific prior written permission.               |
  23.  * |                                                                      |
  24.  * | THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS  |
  25.  * | "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT    |
  26.  * | LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS    |
  27.  * | FOR A PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE      |
  28.  * | COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,  |
  29.  * | INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, |
  30.  * | BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;     |
  31.  * | LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER     |
  32.  * | CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT   |
  33.  * | LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN    |
  34.  * | ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE      |
  35.  * | POSSIBILITY OF SUCH DAMAGE.                                          |
  36.  * +----------------------------------------------------------------------+
  37.  *
  38.  * PHP version 5
  39.  *
  40.  * @category  VersionControl
  41.  * @package   VersionControl_SVN
  42.  * @author    Clay Loveless <clay@killersoft.com>
  43.  * @author    Michiel Rook <mrook@php.net>
  44.  * @author    Alexander Opitz <opitz.alexander@gmail.com>
  45.  * @copyright 2004-2007 Clay Loveless
  46.  * @license   http://www.opensource.org/licenses/bsd-license.php BSD License
  47.  * @link      http://pear.php.net/package/VersionControl_SVN
  48.  */
  49.  
  50. require_once 'VersionControl/SVN/Exception.php';
  51.  
  52. /**
  53.  * Note on the fetch modes -- as the project matures, more of these modes
  54.  * will be implemented. At the time of initial release only the
  55.  * Log and List commands implement anything other than basic
  56.  * RAW output.
  57.  */
  58.  
  59. /**
  60.  * This is a special constant that tells VersionControl_SVN the user hasn't specified
  61.  * any particular get mode, so the default should be used.
  62.  */
  63. define('VERSIONCONTROL_SVN_FETCHMODE_DEFAULT'0);
  64.  
  65. /**
  66.  * Responses returned in associative array format
  67.  */
  68. define('VERSIONCONTROL_SVN_FETCHMODE_ASSOC'1);
  69.  
  70. /**
  71.  * Responses returned as object properties
  72.  */
  73. define('VERSIONCONTROL_SVN_FETCHMODE_OBJECT'2);
  74.  
  75. /**
  76.  * Responses returned as raw XML (as passed-thru from svn --xml command responses)
  77.  */
  78. define('VERSIONCONTROL_SVN_FETCHMODE_XML'3);
  79.  
  80. /**
  81.  * Responses returned as string - unmodified from command-line output
  82.  */
  83. define('VERSIONCONTROL_SVN_FETCHMODE_RAW'4);
  84.  
  85. /**
  86.  * Responses returned as raw output, but all available output parsing methods
  87.  * are performed and stored in the {@link output} property.
  88.  */
  89. define('VERSIONCONTROL_SVN_FETCHMODE_ALL'5);
  90.  
  91. /**
  92.  * Responses returned as numbered array
  93.  */
  94. define('VERSIONCONTROL_SVN_FETCHMODE_ARRAY'6);
  95.  
  96. /**
  97.  * Simple OO interface for Subversion
  98.  *
  99.  * @tutorial  VersionControl_SVN.pkg
  100.  * @category  VersionControl
  101.  * @package   VersionControl_SVN
  102.  * @author    Clay Loveless <clay@killersoft.com>
  103.  * @author    Michiel Rook <mrook@php.net>
  104.  * @copyright 2004-2007 Clay Loveless
  105.  * @license   http://www.killersoft.com/LICENSE.txt BSD License
  106.  * @version   0.5.1
  107.  * @link      http://pear.php.net/package/VersionControl_SVN
  108.  */
  109. {
  110.     /**
  111.      * Reference array of subcommand shortcuts. Provided for convenience for
  112.      * those who prefer the shortcuts they're used to using with the svn
  113.      * command-line tools.
  114.      *
  115.      * You may specify your own shortcuts by passing them in to the factory.
  116.      * For example:
  117.      *
  118.      * <code>
  119.      * <?php
  120.      * require_once 'VersionControl/SVN.php';
  121.      *
  122.      * $options['shortcuts'] = array('boot' => 'Delete', 'checkin' => 'Commit');
  123.      *
  124.      * $svn = VersionControl_SVN::factory(array('boot', 'checkin'), $options);
  125.      *
  126.      * $switches = array(
  127.      *                 'username' => 'user', 'password' => 'pass', 'force' => true
  128.      *             );
  129.      * $args = array('svn://svn.example.com/repos/TestProject/file_to_delete.txt');
  130.      *
  131.      * $svn->boot->run($switches, $args);
  132.      *
  133.      * ?>
  134.      * </code>
  135.      *
  136.      * @var array $shortcuts Possible shortcuts and their real commands.
  137.      */
  138.     public static $shortcuts = array(
  139.         'praise'    => 'Blame',
  140.         'annotate'  => 'Blame',
  141.         'ann'       => 'Blame',
  142.         'co'        => 'Checkout',
  143.         'ci'        => 'Commit',
  144.         'cp'        => 'Copy',
  145.         'del'       => 'Delete',
  146.         'remove'    => 'Delete',
  147.         'rm'        => 'Delete',
  148.         'di'        => 'Diff',
  149.         'ls'        => 'List',
  150.         'mv'        => 'Move',
  151.         'rename'    => 'Move',
  152.         'ren'       => 'Move',
  153.         'pdel'      => 'Propdel',
  154.         'pd'        => 'Propdel',
  155.         'pget'      => 'Propget',
  156.         'pg'        => 'Propget',
  157.         'plist'     => 'Proplist',
  158.         'pl'        => 'Proplist',
  159.         'pset'      => 'Propset',
  160.         'ps'        => 'Propset',
  161.         'stat'      => 'Status',
  162.         'st'        => 'Status',
  163.         'sw'        => 'Switch',
  164.         'up'        => 'Update'
  165.     );
  166.  
  167.     /**
  168.      * Create a new VersionControl_SVN command object.
  169.      *
  170.      * $options is an array containing multiple options
  171.      * defined by the following associative keys:
  172.      *
  173.      * <code>
  174.      *
  175.      * array(
  176.      *  'username'      => 'Subversion repository login',
  177.      *  'password'      => 'Subversion repository password',
  178.      *  'config-dir'    => 'Path to a Subversion configuration directory',
  179.      *                     // [DEFAULT: null]
  180.      *  'config-option' => 'Set Subversion user configuration',
  181.      *                     // [DEFAULT: null]
  182.      *  'binaryPath'    => 'Path to the svn client binary installed as part of Subversion',
  183.      *                     // [DEFAULT: /usr/local/bin/svn]
  184.      *  'fetchmode'     => Type of returning of run function.
  185.      *                     // [DEFAULT: VERSIONCONTROL_SVN_FETCHMODE_ASSOC]
  186.      * )
  187.      *
  188.      * </code>
  189.      *
  190.      * Example 1.
  191.      * <code>
  192.      * <?php
  193.      * require_once 'VersionControl/SVN.php';
  194.      *
  195.      * $options = array(
  196.      *      'username'   => 'your_login',
  197.      *      'password'   => 'your_password',
  198.      * );
  199.      * 
  200.      * // Run a log command
  201.      * $svn = VersionControl_SVN::factory('log', $options);
  202.      *
  203.      * print_r($svn->run(array('path_to_your_svn'));
  204.      * ?>
  205.      * </code>
  206.      *
  207.      * @param string $command The Subversion command
  208.      * @param array  $options An associative array of option names and
  209.      *                         their values
  210.      *
  211.      * @return mixed A newly created command object or an stdObj with the
  212.      *                command objects set.
  213.      * @throws VersionControl_SVN_Exception Exception if command init fails.
  214.      */
  215.     public static function factory($command$options = array())
  216.     {
  217.         if (is_string($command&& strtoupper($command== '__ALL__'{
  218.             unset($command);
  219.             $command = array();
  220.             $command VersionControl_SVN::fetchCommands();
  221.         }
  222.         if (is_array($command)) {
  223.             $objects = new stdClass;
  224.             foreach ($command as $cmd{
  225.                 $obj VersionControl_SVN::init($cmd$options);
  226.                 $objects->$cmd $obj;
  227.             }
  228.             return $objects;
  229.         else {
  230.             $obj VersionControl_SVN::init($command$options);
  231.             return $obj;
  232.         }
  233.     }
  234.  
  235.     /**
  236.      * Initialize an object wrapper for a Subversion subcommand.
  237.      *
  238.      * @param string $command The Subversion command
  239.      * @param array  $options An associative array of option names and
  240.      *                         their values
  241.      *
  242.      * @return VersionControl_SVN_Command Instance of command.
  243.      * @throws VersionControl_SVN_Exception Exception if command init fails.
  244.      */
  245.     public static function init($command$options)
  246.     {
  247.         // Check for shortcuts for commands
  248.         $shortcuts = self::$shortcuts;
  249.         
  250.         if (isset($options['shortcuts']&& is_array($options['shortcuts'])) {
  251.             foreach ($options['shortcuts'as $key => $val{
  252.                 $shortcuts[strtolower($key)$val;       
  253.             }
  254.         }
  255.         
  256.         $cmd   = isset($shortcuts[strtolower($command)])
  257.             ? $shortcuts[strtolower($command)]
  258.             : $command;
  259.         $cmd   ucfirst(strtolower($cmd));
  260.         $class 'VersionControl_SVN_Command_' $cmd;
  261.         
  262.         if (include_once realpath(dirname(__FILE__)) . "/SVN/Command/{$cmd}.php"{
  263.             if (class_exists($class)) {
  264.                 $obj = new $class;
  265.                 $obj->options = $options;
  266.                 $obj->setOptions($options);
  267.                 return $obj;
  268.             }
  269.         }
  270.  
  271.         throw new VersionControl_SVN_Exception(
  272.             $command ' is not a known VersionControl_SVN command.',
  273.             VersionControl_SVN_Exception::UNKNOWN_CMD
  274.         );
  275.     }
  276.     
  277.     /**
  278.      * Scan through the SVN directory looking for subclasses.
  279.      *
  280.      * @return array Array with names of commands as value.
  281.      * @throws VersionControl_SVN_Exception Exception if fetching commands fails.
  282.      */
  283.     public static function fetchCommands()
  284.     {
  285.         $commands = array();
  286.         $dir realpath(dirname(__FILE__)) '/SVN/Command';
  287.         if (false === $dir
  288.             || !is_dir($dir)
  289.             || !is_readable($dir)
  290.         {
  291.             throw new VersionControl_SVN_Exception(
  292.                 'The path /SVN/Command doesn\'t exists or isn\'t readable.',
  293.                 VersionControl_SVN_Exception::ERROR
  294.             );
  295.         }
  296.         $dirEntries glob($dir '/*.php');
  297.         foreach ($dirEntries as $entry{
  298.             if (is_file($entry)
  299.                 && is_readable($entry)
  300.             {
  301.                 $commands[strtolower(basename($entry'.php'));
  302.             }
  303.         }
  304.  
  305.         return $commands;
  306.     }
  307.  
  308.     /**
  309.      * Return the VersionControl_SVN API version
  310.      *
  311.      * @return string The VersionControl_SVN API version number.
  312.      */
  313.     public static function apiVersion()
  314.     {
  315.         return '0.5.1';
  316.     }
  317. }
  318. ?>

Documentation generated on Sat, 09 Feb 2013 12:30:13 +0000 by phpDocumentor 1.4.3. PEAR Logo Copyright © PHP Group 2004.