Updated to remove vfsStreams (no longer needed by tests)
Updated Perforce to cleanup, modified VcsRepository to call cleanup on Driver class Updated tests, perforce constructor to make tests cleaner/easierpull/2184/merge^2
parent
997b1b5d46
commit
dd81449998
|
@ -30,8 +30,7 @@
|
||||||
"symfony/process": "~2.1"
|
"symfony/process": "~2.1"
|
||||||
},
|
},
|
||||||
"require-dev": {
|
"require-dev": {
|
||||||
"phpunit/phpunit": "~3.7.10",
|
"phpunit/phpunit": "~3.7.10"
|
||||||
"mikey179/vfsStream" : "1.2.*"
|
|
||||||
},
|
},
|
||||||
"suggest": {
|
"suggest": {
|
||||||
"ext-zip": "Enabling the zip extension allows you to unzip archives, and allows gzip compression of all internet traffic",
|
"ext-zip": "Enabling the zip extension allows you to unzip archives, and allows gzip compression of all internet traffic",
|
||||||
|
|
|
@ -3,7 +3,7 @@
|
||||||
"This file locks the dependencies of your project to a known state",
|
"This file locks the dependencies of your project to a known state",
|
||||||
"Read more about it at http://getcomposer.org/doc/01-basic-usage.md#composer-lock-the-lock-file"
|
"Read more about it at http://getcomposer.org/doc/01-basic-usage.md#composer-lock-the-lock-file"
|
||||||
],
|
],
|
||||||
"hash": "6203fdb419c10ffd84f85611fc9eec61",
|
"hash": "370b764a9317165e8ea7a2e1623e031b",
|
||||||
"packages": [
|
"packages": [
|
||||||
{
|
{
|
||||||
"name": "justinrainbow/json-schema",
|
"name": "justinrainbow/json-schema",
|
||||||
|
@ -15,7 +15,7 @@
|
||||||
},
|
},
|
||||||
"dist": {
|
"dist": {
|
||||||
"type": "zip",
|
"type": "zip",
|
||||||
"url": "https://github.com/justinrainbow/json-schema/zipball/v1.1.0",
|
"url": "https://github.com/justinrainbow/json-schema/archive/v1.1.0.zip",
|
||||||
"reference": "v1.1.0",
|
"reference": "v1.1.0",
|
||||||
"shasum": ""
|
"shasum": ""
|
||||||
},
|
},
|
||||||
|
@ -28,7 +28,37 @@
|
||||||
"JsonSchema": "src/"
|
"JsonSchema": "src/"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"time": "2012-01-02 21:33:17"
|
"notification-url": "https://packagist.org/downloads/",
|
||||||
|
"license": [
|
||||||
|
"NewBSD"
|
||||||
|
],
|
||||||
|
"authors": [
|
||||||
|
{
|
||||||
|
"name": "Igor Wiedler",
|
||||||
|
"email": "igor@wiedler.ch",
|
||||||
|
"homepage": "http://wiedler.ch/igor/"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Bruno Prieto Reis",
|
||||||
|
"email": "bruno.p.reis@gmail.com"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Justin Rainbow",
|
||||||
|
"email": "justin.rainbow@gmail.com"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Robert Schönthal",
|
||||||
|
"email": "seroscho@googlemail.com",
|
||||||
|
"homepage": "http://digitalkaoz.net"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"description": "A library to validate a json schema.",
|
||||||
|
"homepage": "https://github.com/justinrainbow/json-schema",
|
||||||
|
"keywords": [
|
||||||
|
"json",
|
||||||
|
"schema"
|
||||||
|
],
|
||||||
|
"time": "2012-01-03 00:33:17"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "seld/jsonlint",
|
"name": "seld/jsonlint",
|
||||||
|
@ -79,17 +109,17 @@
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "symfony/console",
|
"name": "symfony/console",
|
||||||
"version": "dev-master",
|
"version": "v2.3.3",
|
||||||
"target-dir": "Symfony/Component/Console",
|
"target-dir": "Symfony/Component/Console",
|
||||||
"source": {
|
"source": {
|
||||||
"type": "git",
|
"type": "git",
|
||||||
"url": "https://github.com/symfony/Console.git",
|
"url": "https://github.com/symfony/Console.git",
|
||||||
"reference": "872a494b88fba2f62be85e0bc8441e7946bb6ba6"
|
"reference": "v2.3.3"
|
||||||
},
|
},
|
||||||
"dist": {
|
"dist": {
|
||||||
"type": "zip",
|
"type": "zip",
|
||||||
"url": "https://api.github.com/repos/symfony/Console/zipball/872a494b88fba2f62be85e0bc8441e7946bb6ba6",
|
"url": "https://api.github.com/repos/symfony/Console/zipball/v2.3.3",
|
||||||
"reference": "872a494b88fba2f62be85e0bc8441e7946bb6ba6",
|
"reference": "v2.3.3",
|
||||||
"shasum": ""
|
"shasum": ""
|
||||||
},
|
},
|
||||||
"require": {
|
"require": {
|
||||||
|
@ -104,7 +134,7 @@
|
||||||
"type": "library",
|
"type": "library",
|
||||||
"extra": {
|
"extra": {
|
||||||
"branch-alias": {
|
"branch-alias": {
|
||||||
"dev-master": "2.4-dev"
|
"dev-master": "2.3-dev"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"autoload": {
|
"autoload": {
|
||||||
|
@ -128,7 +158,7 @@
|
||||||
],
|
],
|
||||||
"description": "Symfony Console Component",
|
"description": "Symfony Console Component",
|
||||||
"homepage": "http://symfony.com",
|
"homepage": "http://symfony.com",
|
||||||
"time": "2013-08-09 06:00:31"
|
"time": "2013-07-21 12:12:18"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "symfony/finder",
|
"name": "symfony/finder",
|
||||||
|
@ -179,17 +209,17 @@
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "symfony/process",
|
"name": "symfony/process",
|
||||||
"version": "dev-master",
|
"version": "v2.3.3",
|
||||||
"target-dir": "Symfony/Component/Process",
|
"target-dir": "Symfony/Component/Process",
|
||||||
"source": {
|
"source": {
|
||||||
"type": "git",
|
"type": "git",
|
||||||
"url": "https://github.com/symfony/Process.git",
|
"url": "https://github.com/symfony/Process.git",
|
||||||
"reference": "723fe405fcc878ae75469babcb9507d292797ece"
|
"reference": "v2.3.3"
|
||||||
},
|
},
|
||||||
"dist": {
|
"dist": {
|
||||||
"type": "zip",
|
"type": "zip",
|
||||||
"url": "https://api.github.com/repos/symfony/Process/zipball/723fe405fcc878ae75469babcb9507d292797ece",
|
"url": "https://api.github.com/repos/symfony/Process/zipball/v2.3.3",
|
||||||
"reference": "723fe405fcc878ae75469babcb9507d292797ece",
|
"reference": "v2.3.3",
|
||||||
"shasum": ""
|
"shasum": ""
|
||||||
},
|
},
|
||||||
"require": {
|
"require": {
|
||||||
|
@ -198,7 +228,7 @@
|
||||||
"type": "library",
|
"type": "library",
|
||||||
"extra": {
|
"extra": {
|
||||||
"branch-alias": {
|
"branch-alias": {
|
||||||
"dev-master": "2.4-dev"
|
"dev-master": "2.3-dev"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"autoload": {
|
"autoload": {
|
||||||
|
@ -222,40 +252,10 @@
|
||||||
],
|
],
|
||||||
"description": "Symfony Process Component",
|
"description": "Symfony Process Component",
|
||||||
"homepage": "http://symfony.com",
|
"homepage": "http://symfony.com",
|
||||||
"time": "2013-08-09 07:03:52"
|
"time": "2013-08-02 21:51:01"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"packages-dev": [
|
"packages-dev": [
|
||||||
{
|
|
||||||
"name": "mikey179/vfsStream",
|
|
||||||
"version": "v1.2.0",
|
|
||||||
"source": {
|
|
||||||
"type": "git",
|
|
||||||
"url": "https://github.com/mikey179/vfsStream.git",
|
|
||||||
"reference": "v1.2.0"
|
|
||||||
},
|
|
||||||
"dist": {
|
|
||||||
"type": "zip",
|
|
||||||
"url": "https://api.github.com/repos/mikey179/vfsStream/zipball/v1.2.0",
|
|
||||||
"reference": "v1.2.0",
|
|
||||||
"shasum": ""
|
|
||||||
},
|
|
||||||
"require": {
|
|
||||||
"php": ">=5.3.0"
|
|
||||||
},
|
|
||||||
"type": "library",
|
|
||||||
"autoload": {
|
|
||||||
"psr-0": {
|
|
||||||
"org\\bovigo\\vfs\\": "src/main/php"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"notification-url": "https://packagist.org/downloads/",
|
|
||||||
"license": [
|
|
||||||
"BSD"
|
|
||||||
],
|
|
||||||
"homepage": "http://vfs.bovigo.org/",
|
|
||||||
"time": "2013-04-01 10:41:02"
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"name": "phpunit/php-code-coverage",
|
"name": "phpunit/php-code-coverage",
|
||||||
"version": "1.2.12",
|
"version": "1.2.12",
|
||||||
|
@ -675,10 +675,9 @@
|
||||||
|
|
||||||
],
|
],
|
||||||
"minimum-stability": "stable",
|
"minimum-stability": "stable",
|
||||||
"stability-flags": {
|
"stability-flags": [
|
||||||
"symfony/console": 20,
|
|
||||||
"symfony/process": 20
|
],
|
||||||
},
|
|
||||||
"platform": {
|
"platform": {
|
||||||
"php": ">=5.3.2"
|
"php": ">=5.3.2"
|
||||||
},
|
},
|
||||||
|
|
|
@ -6,10 +6,14 @@
|
||||||
* (c) Nils Adermann <naderman@naderman.de>
|
* (c) Nils Adermann <naderman@naderman.de>
|
||||||
* Jordi Boggiano <j.boggiano@seld.be>
|
* Jordi Boggiano <j.boggiano@seld.be>
|
||||||
*
|
*
|
||||||
|
* Contributor: Matt Whittom <Matt.Whittom@veteransunited.com>
|
||||||
|
* Date: 7/17/13
|
||||||
|
*
|
||||||
* For the full copyright and license information, please view the LICENSE
|
* For the full copyright and license information, please view the LICENSE
|
||||||
* file that was distributed with this source code.
|
* file that was distributed with this source code.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
||||||
namespace Composer\Downloader;
|
namespace Composer\Downloader;
|
||||||
|
|
||||||
use Composer\Package\PackageInterface;
|
use Composer\Package\PackageInterface;
|
||||||
|
@ -17,7 +21,7 @@ use Composer\Repository\VcsRepository;
|
||||||
use Composer\Util\Perforce;
|
use Composer\Util\Perforce;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @author Jordi Boggiano <j.boggiano@seld.be>
|
* @author Matt Whittom <Matt.Whittom@veteransunited.com>
|
||||||
*/
|
*/
|
||||||
class PerforceDownloader extends VcsDownloader
|
class PerforceDownloader extends VcsDownloader
|
||||||
{
|
{
|
||||||
|
@ -39,6 +43,7 @@ class PerforceDownloader extends VcsDownloader
|
||||||
$this->perforce->writeP4ClientSpec();
|
$this->perforce->writeP4ClientSpec();
|
||||||
$this->perforce->connectClient();
|
$this->perforce->connectClient();
|
||||||
$this->perforce->syncCodeBase($label);
|
$this->perforce->syncCodeBase($label);
|
||||||
|
$this->perforce->cleanupClientSpec();
|
||||||
}
|
}
|
||||||
|
|
||||||
private function initPerforce($package, $path){
|
private function initPerforce($package, $path){
|
||||||
|
@ -47,7 +52,7 @@ class PerforceDownloader extends VcsDownloader
|
||||||
}
|
}
|
||||||
$repository = $package->getRepository();
|
$repository = $package->getRepository();
|
||||||
$repoConfig = $this->getRepoConfig($repository);
|
$repoConfig = $this->getRepoConfig($repository);
|
||||||
$this->perforce = new Perforce($repoConfig, $package->getSourceUrl(), $path);
|
$this->perforce = Perforce::createPerforce($repoConfig, $package->getSourceUrl(), $path);
|
||||||
}
|
}
|
||||||
|
|
||||||
public function injectPerforce($perforce){
|
public function injectPerforce($perforce){
|
||||||
|
@ -64,14 +69,13 @@ class PerforceDownloader extends VcsDownloader
|
||||||
*/
|
*/
|
||||||
public function doUpdate(PackageInterface $initial, PackageInterface $target, $path)
|
public function doUpdate(PackageInterface $initial, PackageInterface $target, $path)
|
||||||
{
|
{
|
||||||
print("PerforceDownloader:doUpdate\n");
|
|
||||||
$this->doDownload($target, $path);
|
$this->doDownload($target, $path);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* {@inheritDoc}
|
* {@inheritDoc}
|
||||||
*/
|
*/
|
||||||
public function getLocalChanges($path)
|
public function getLocalChanges(PackageInterface $package, $path)
|
||||||
{
|
{
|
||||||
print ("Perforce driver does not check for local changes before overriding\n");
|
print ("Perforce driver does not check for local changes before overriding\n");
|
||||||
return;
|
return;
|
||||||
|
|
|
@ -6,13 +6,14 @@
|
||||||
* (c) Nils Adermann <naderman@naderman.de>
|
* (c) Nils Adermann <naderman@naderman.de>
|
||||||
* Jordi Boggiano <j.boggiano@seld.be>
|
* Jordi Boggiano <j.boggiano@seld.be>
|
||||||
*
|
*
|
||||||
* Contributor: matt-whittom
|
* Contributor: Matt Whittom <Matt.Whittom@veteransunited.com>
|
||||||
* Date: 7/17/13
|
* Date: 7/17/13
|
||||||
*
|
*
|
||||||
* For the full copyright and license information, please view the LICENSE
|
* For the full copyright and license information, please view the LICENSE
|
||||||
* file that was distributed with this source code.
|
* file that was distributed with this source code.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
||||||
namespace Composer\Repository\Vcs;
|
namespace Composer\Repository\Vcs;
|
||||||
|
|
||||||
use Composer\IO\IOInterface;
|
use Composer\IO\IOInterface;
|
||||||
|
@ -21,12 +22,14 @@ use Composer\Util\Filesystem;
|
||||||
use Composer\Util\Perforce;
|
use Composer\Util\Perforce;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @author matt-whittom <>
|
* @author Matt Whittom <Matt.Whittom@veteransunited.com>
|
||||||
*/
|
*/
|
||||||
class PerforceDriver extends VcsDriver {
|
class PerforceDriver extends VcsDriver {
|
||||||
protected $depot;
|
protected $depot;
|
||||||
protected $branch;
|
protected $branch;
|
||||||
protected $perforce;
|
protected $perforce;
|
||||||
|
protected $composer_info;
|
||||||
|
protected $composer_info_identifier;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* {@inheritDoc}
|
* {@inheritDoc}
|
||||||
|
@ -54,7 +57,7 @@ class PerforceDriver extends VcsDriver {
|
||||||
}
|
}
|
||||||
|
|
||||||
$repoDir = $this->config->get('cache-vcs-dir') . "/$this->depot";
|
$repoDir = $this->config->get('cache-vcs-dir') . "/$this->depot";
|
||||||
$this->perforce = new Perforce($this->repoConfig, $this->getUrl(), $repoDir, $this->process);
|
$this->perforce = Perforce::createPerforce($this->repoConfig, $this->getUrl(), $repoDir, $this->process);
|
||||||
}
|
}
|
||||||
|
|
||||||
public function injectPerforce(Perforce $perforce) {
|
public function injectPerforce(Perforce $perforce) {
|
||||||
|
@ -66,6 +69,12 @@ class PerforceDriver extends VcsDriver {
|
||||||
* {@inheritDoc}
|
* {@inheritDoc}
|
||||||
*/
|
*/
|
||||||
public function getComposerInformation($identifier) {
|
public function getComposerInformation($identifier) {
|
||||||
|
if (isset($this->composer_info_identifier)){
|
||||||
|
if (strcmp($identifier, $this->composer_info_identifier) === 0 )
|
||||||
|
{
|
||||||
|
return $this->composer_info;
|
||||||
|
}
|
||||||
|
}
|
||||||
$composer_info = $this->perforce->getComposerInformation($identifier);
|
$composer_info = $this->perforce->getComposerInformation($identifier);
|
||||||
|
|
||||||
return $composer_info;
|
return $composer_info;
|
||||||
|
@ -127,9 +136,12 @@ class PerforceDriver extends VcsDriver {
|
||||||
* {@inheritDoc}
|
* {@inheritDoc}
|
||||||
*/
|
*/
|
||||||
public function hasComposerFile($identifier) {
|
public function hasComposerFile($identifier) {
|
||||||
$composer_info = $this->perforce->getComposerInformation("//$this->depot/$identifier");
|
$this->composer_info = $this->perforce->getComposerInformation("//$this->depot/$identifier");
|
||||||
$result = strlen(trim($composer_info)) > 0;
|
$this->composer_info_identifier = $identifier;
|
||||||
|
$result = false;
|
||||||
|
if (isset($this->composer_info)){
|
||||||
|
$result = count($this->composer_info) > 0;
|
||||||
|
}
|
||||||
return $result;
|
return $result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -146,4 +158,20 @@ class PerforceDriver extends VcsDriver {
|
||||||
public static function supports(IOInterface $io, $url, $deep = FALSE) {
|
public static function supports(IOInterface $io, $url, $deep = FALSE) {
|
||||||
return Perforce::checkServerExists($url, new ProcessExecutor);
|
return Perforce::checkServerExists($url, new ProcessExecutor);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* {@inheritDoc}
|
||||||
|
*/
|
||||||
|
public function cleanup(){
|
||||||
|
$this->perforce->cleanupClientSpec();
|
||||||
|
$this->perforce = null;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getDepot(){
|
||||||
|
return $this->depot;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getBranch(){
|
||||||
|
return $this->branch;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -105,4 +105,12 @@ abstract class VcsDriver implements VcsDriverInterface
|
||||||
{
|
{
|
||||||
return (bool) preg_match('{^(file://|/|[a-z]:[\\\\/])}i', $url);
|
return (bool) preg_match('{^(file://|/|[a-z]:[\\\\/])}i', $url);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* {@inheritDoc}
|
||||||
|
*/
|
||||||
|
public function cleanup()
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -81,6 +81,12 @@ interface VcsDriverInterface
|
||||||
*/
|
*/
|
||||||
public function hasComposerFile($identifier);
|
public function hasComposerFile($identifier);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Performs any cleanup necessary as the driver is not longer needed
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
public function cleanup();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Checks if this driver can handle a given url
|
* Checks if this driver can handle a given url
|
||||||
*
|
*
|
||||||
|
|
|
@ -253,6 +253,7 @@ class VcsRepository extends ArrayRepository
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
$driver->cleanup();
|
||||||
|
|
||||||
if (!$verbose) {
|
if (!$verbose) {
|
||||||
$this->io->overwrite('', false);
|
$this->io->overwrite('', false);
|
||||||
|
|
|
@ -1,60 +1,91 @@
|
||||||
<?php
|
<?php
|
||||||
/**
|
/*
|
||||||
* Created by JetBrains PhpStorm.
|
* This file is part of Composer.
|
||||||
* User: matt.whittom
|
*
|
||||||
* Date: 7/23/13
|
* (c) Nils Adermann <naderman@naderman.de>
|
||||||
* Time: 3:22 PM
|
* Jordi Boggiano <j.boggiano@seld.be>
|
||||||
* To change this template use File | Settings | File Templates.
|
*
|
||||||
|
* Contributor: Matt Whittom <Matt.Whittom@veteransunited.com>
|
||||||
|
* Date: 7/17/13
|
||||||
|
*
|
||||||
|
* For the full copyright and license information, please view the LICENSE
|
||||||
|
* file that was distributed with this source code.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
||||||
namespace Composer\Util;
|
namespace Composer\Util;
|
||||||
|
|
||||||
use Composer\IO\IOInterface;
|
use Composer\IO\IOInterface;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author Matt Whittom <Matt.Whittom@veteransunited.com>
|
||||||
|
*/
|
||||||
class Perforce {
|
class Perforce {
|
||||||
|
|
||||||
protected $path;
|
protected $path;
|
||||||
protected $p4client;
|
protected $p4Depot;
|
||||||
protected $p4user;
|
protected $p4Client;
|
||||||
protected $p4password;
|
protected $p4User;
|
||||||
protected $p4port;
|
protected $p4Password;
|
||||||
protected $p4stream;
|
protected $p4Port;
|
||||||
protected $p4clientSpec;
|
protected $p4Stream;
|
||||||
protected $p4depotType;
|
protected $p4ClientSpec;
|
||||||
protected $p4branch;
|
protected $p4DepotType;
|
||||||
|
protected $p4Branch;
|
||||||
protected $process;
|
protected $process;
|
||||||
|
protected $unique_perforce_client_name;
|
||||||
|
protected $windowsFlag;
|
||||||
|
|
||||||
public function __construct($repoConfig, $port, $path, ProcessExecutor $process = NULL) {
|
|
||||||
$this->p4port = $port;
|
public static function createPerforce($repoConfig, $port, $path, ProcessExecutor $process = NULL) {
|
||||||
|
if (!isset($process)){
|
||||||
|
$process = new ProcessExecutor;
|
||||||
|
}
|
||||||
|
$isWindows = defined('PHP_WINDOWS_VERSION_BUILD');
|
||||||
|
if (isset($repoConfig['unique_perforce_client_name'])){
|
||||||
|
$unique_perforce_client_name = $repoConfig['unique_perforce_client_name'];
|
||||||
|
} else {
|
||||||
|
$unique_perforce_client_name = gethostname() . "_" . time();
|
||||||
|
$repoConfig['unique_perforce_client_name'] = $unique_perforce_client_name;
|
||||||
|
}
|
||||||
|
|
||||||
|
$perforce = new Perforce($repoConfig, $port, $path, $process, $isWindows, $unique_perforce_client_name);
|
||||||
|
return $perforce;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function __construct($repoConfig, $port, $path, ProcessExecutor $process, $isWindows, $unique_perforce_client_name) {
|
||||||
|
$this->windowsFlag = $isWindows;
|
||||||
|
$this->unique_perforce_client_name = $unique_perforce_client_name;
|
||||||
|
$this->p4Port = $port;
|
||||||
$this->path = $path;
|
$this->path = $path;
|
||||||
$this->process = $process ? : new ProcessExecutor;
|
|
||||||
$fs = new Filesystem();
|
$fs = new Filesystem();
|
||||||
$fs->ensureDirectoryExists($path);
|
$fs->ensureDirectoryExists($path);
|
||||||
|
$this->process = $process;
|
||||||
|
|
||||||
if (isset($repoConfig['depot'])) {
|
if (isset($repoConfig['depot'])) {
|
||||||
$this->p4depot = $repoConfig['depot'];
|
$this->p4Depot = $repoConfig['depot'];
|
||||||
}
|
}
|
||||||
if (isset($repoConfig['branch'])) {
|
if (isset($repoConfig['branch'])) {
|
||||||
$this->p4branch = $repoConfig['branch'];
|
$this->p4Branch = $repoConfig['branch'];
|
||||||
}
|
}
|
||||||
if (isset($repoConfig['p4user'])) {
|
if (isset($repoConfig['p4user'])) {
|
||||||
$this->p4user = $repoConfig['p4user'];
|
$this->p4User = $repoConfig['p4user'];
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
$this->p4user = $this->getP4variable("P4USER");
|
$this->p4User = $this->getP4variable("P4USER");
|
||||||
}
|
}
|
||||||
if (isset($repoConfig['p4password'])) {
|
if (isset($repoConfig['p4password'])) {
|
||||||
$this->p4password = $repoConfig['p4password'];
|
$this->p4Password = $repoConfig['p4password'];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
protected function getRandomValue() {
|
public function cleanupClientSpec(){
|
||||||
return mt_rand(1000, 9999);
|
$client = $this->getClient();
|
||||||
}
|
$command = "p4 client -d $client";
|
||||||
|
$this->executeCommand($command);
|
||||||
protected function isWindows(){
|
$clientSpec = $this->getP4ClientSpec();
|
||||||
return defined('PHP_WINDOWS_VERSION_BUILD');
|
$fileSystem = new FileSystem($this->process);
|
||||||
|
$fileSystem->remove($clientSpec);
|
||||||
}
|
}
|
||||||
|
|
||||||
protected function executeCommand($command) {
|
protected function executeCommand($command) {
|
||||||
|
@ -64,14 +95,13 @@ class Perforce {
|
||||||
return $result;
|
return $result;
|
||||||
}
|
}
|
||||||
|
|
||||||
protected function getClient() {
|
public function getClient() {
|
||||||
if (!isset($this->p4client)) {
|
if (!isset($this->p4Client)) {
|
||||||
$random_value = $this->getRandomValue();
|
|
||||||
$clean_stream_name = str_replace("@", "", str_replace("/", "_", str_replace("//", "", $this->getStream())));
|
$clean_stream_name = str_replace("@", "", str_replace("/", "_", str_replace("//", "", $this->getStream())));
|
||||||
$this->p4client = "composer_perforce_" . $random_value . "_" . $clean_stream_name;
|
$this->p4Client = "composer_perforce_" . $this->unique_perforce_client_name . "_" . $clean_stream_name;
|
||||||
}
|
}
|
||||||
|
|
||||||
return $this->p4client;
|
return $this->p4Client;
|
||||||
}
|
}
|
||||||
|
|
||||||
protected function getPath() {
|
protected function getPath() {
|
||||||
|
@ -79,28 +109,31 @@ class Perforce {
|
||||||
}
|
}
|
||||||
|
|
||||||
protected function getPort() {
|
protected function getPort() {
|
||||||
return $this->p4port;
|
return $this->p4Port;
|
||||||
}
|
}
|
||||||
|
|
||||||
protected function isStream() {
|
public function setStream($stream) {
|
||||||
return (strcmp($this->p4depotType, "stream") === 0);
|
$this->p4Stream = $stream;
|
||||||
|
$this->p4DepotType = "stream";
|
||||||
}
|
}
|
||||||
|
|
||||||
protected function getStream() {
|
public function isStream() {
|
||||||
if (!isset($this->p4stream)) {
|
return (strcmp($this->p4DepotType, "stream") === 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getStream() {
|
||||||
|
if (!isset($this->p4Stream)) {
|
||||||
if ($this->isStream()) {
|
if ($this->isStream()) {
|
||||||
$this->p4stream = "//$this->p4depot/$this->p4branch";
|
$this->p4Stream = "//$this->p4Depot/$this->p4Branch";
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
$this->p4stream = "//$this->p4depot";
|
$this->p4Stream = "//$this->p4Depot";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
return $this->p4Stream;
|
||||||
return $this->p4stream;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
protected function getStreamWithoutLabel() {
|
public function getStreamWithoutLabel($stream) {
|
||||||
$stream = $this->getStream();
|
|
||||||
$index = strpos($stream, "@");
|
$index = strpos($stream, "@");
|
||||||
if ($index === FALSE) {
|
if ($index === FALSE) {
|
||||||
return $stream;
|
return $stream;
|
||||||
|
@ -109,37 +142,37 @@ class Perforce {
|
||||||
return substr($stream, 0, $index);
|
return substr($stream, 0, $index);
|
||||||
}
|
}
|
||||||
|
|
||||||
protected function getP4ClientSpec() {
|
public function getP4ClientSpec() {
|
||||||
$p4clientSpec = $this->path . "/" . $this->getClient() . ".p4.spec";
|
$p4clientSpec = $this->path . "/" . $this->getClient() . ".p4.spec";
|
||||||
|
|
||||||
return $p4clientSpec;
|
return $p4clientSpec;
|
||||||
}
|
}
|
||||||
|
|
||||||
public function getUser() {
|
public function getUser() {
|
||||||
return $this->p4user;
|
return $this->p4User;
|
||||||
}
|
}
|
||||||
|
|
||||||
public function queryP4User(IOInterface $io) {
|
public function queryP4User(IOInterface $io) {
|
||||||
$this->getUser();
|
$this->getUser();
|
||||||
if (strlen($this->p4user) > 0) {
|
if (strlen($this->p4User) > 0) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
$this->p4user = $this->getP4variable("P4USER");
|
$this->p4User = $this->getP4variable("P4USER");
|
||||||
if (strlen($this->p4user) > 0) {
|
if (strlen($this->p4User) > 0) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
$this->p4user = $io->ask("Enter P4 User:");
|
$this->p4User = $io->ask("Enter P4 User:");
|
||||||
if ($this->isWindows()) {
|
if ($this->windowsFlag) {
|
||||||
$command = "p4 set P4USER=$this->p4user";
|
$command = "p4 set P4USER=$this->p4User";
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
$command = "export P4USER=$this->p4user";
|
$command = "export P4USER=$this->p4User";
|
||||||
}
|
}
|
||||||
$result = $this->executeCommand($command);
|
$result = $this->executeCommand($command);
|
||||||
}
|
}
|
||||||
|
|
||||||
protected function getP4variable($name) {
|
protected function getP4variable($name) {
|
||||||
if ($this->isWindows()) {
|
if ($this->windowsFlag) {
|
||||||
$command = "p4 set";
|
$command = "p4 set";
|
||||||
$result = $this->executeCommand($command);
|
$result = $this->executeCommand($command);
|
||||||
$resArray = explode("\n", $result);
|
$resArray = explode("\n", $result);
|
||||||
|
@ -167,20 +200,20 @@ class Perforce {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
protected function queryP4Password(IOInterface $io) {
|
public function queryP4Password(IOInterface $io) {
|
||||||
if (isset($this->p4password)) {
|
if (isset($this->p4Password)) {
|
||||||
return $this->p4password;
|
return $this->p4Password;
|
||||||
}
|
}
|
||||||
$password = $this->getP4variable("P4PASSWD");
|
$password = $this->getP4variable("P4PASSWD");
|
||||||
if (strlen($password) <= 0) {
|
if (strlen($password) <= 0) {
|
||||||
$password = $io->askAndHideAnswer("Enter password for Perforce user " . $this->getUser() . ": ");
|
$password = $io->askAndHideAnswer("Enter password for Perforce user " . $this->getUser() . ": ");
|
||||||
}
|
}
|
||||||
$this->p4password = $password;
|
$this->p4Password = $password;
|
||||||
|
|
||||||
return $password;
|
return $password;
|
||||||
}
|
}
|
||||||
|
|
||||||
protected function generateP4Command($command, $useClient = TRUE) {
|
public function generateP4Command($command, $useClient = TRUE) {
|
||||||
$p4Command = "p4 ";
|
$p4Command = "p4 ";
|
||||||
$p4Command = $p4Command . "-u " . $this->getUser() . " ";
|
$p4Command = $p4Command . "-u " . $this->getUser() . " ";
|
||||||
if ($useClient) {
|
if ($useClient) {
|
||||||
|
@ -192,22 +225,16 @@ class Perforce {
|
||||||
return $p4Command;
|
return $p4Command;
|
||||||
}
|
}
|
||||||
|
|
||||||
protected function isLoggedIn() {
|
public function isLoggedIn() {
|
||||||
$command = $this->generateP4Command("login -s", FALSE);
|
$command = $this->generateP4Command("login -s", FALSE);
|
||||||
$result = trim($this->executeCommand($command));
|
$result = trim($this->executeCommand($command));
|
||||||
$index = strpos($result, $this->getUser());
|
$index = strpos($result, $this->getUser());
|
||||||
if ($index === FALSE) {
|
if ($index === FALSE) {
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
public function setStream($stream) {
|
|
||||||
$this->p4stream = $stream;
|
|
||||||
$this->p4depotType = "stream";
|
|
||||||
}
|
|
||||||
|
|
||||||
public function connectClient() {
|
public function connectClient() {
|
||||||
$p4CreateClientCommand = $this->generateP4Command("client -i < " . $this->getP4ClientSpec());
|
$p4CreateClientCommand = $this->generateP4Command("client -i < " . $this->getP4ClientSpec());
|
||||||
$this->executeCommand($p4CreateClientCommand);
|
$this->executeCommand($p4CreateClientCommand);
|
||||||
|
@ -230,7 +257,7 @@ class Perforce {
|
||||||
chdir($prevDir);
|
chdir($prevDir);
|
||||||
}
|
}
|
||||||
|
|
||||||
protected function writeClientSpecToFile($spec) {
|
public function writeClientSpecToFile($spec) {
|
||||||
fwrite($spec, "Client: " . $this->getClient() . "\n\n");
|
fwrite($spec, "Client: " . $this->getClient() . "\n\n");
|
||||||
fwrite($spec, "Update: " . date("Y/m/d H:i:s") . "\n\n");
|
fwrite($spec, "Update: " . date("Y/m/d H:i:s") . "\n\n");
|
||||||
fwrite($spec, "Access: " . date("Y/m/d H:i:s") . "\n");
|
fwrite($spec, "Access: " . date("Y/m/d H:i:s") . "\n");
|
||||||
|
@ -243,7 +270,7 @@ class Perforce {
|
||||||
fwrite($spec, "LineEnd: local\n\n");
|
fwrite($spec, "LineEnd: local\n\n");
|
||||||
if ($this->isStream()) {
|
if ($this->isStream()) {
|
||||||
fwrite($spec, "Stream:\n");
|
fwrite($spec, "Stream:\n");
|
||||||
fwrite($spec, " " . $this->getStreamWithoutLabel() . "\n");
|
fwrite($spec, " " . $this->getStreamWithoutLabel($this->p4Stream) . "\n");
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
fwrite(
|
fwrite(
|
||||||
|
@ -255,7 +282,8 @@ class Perforce {
|
||||||
}
|
}
|
||||||
|
|
||||||
public function writeP4ClientSpec() {
|
public function writeP4ClientSpec() {
|
||||||
$spec = fopen($this->getP4ClientSpec(), 'w');
|
$clientSpec = $this->getP4ClientSpec();
|
||||||
|
$spec = fopen($clientSpec, 'w');
|
||||||
try {
|
try {
|
||||||
$this->writeClientSpecToFile($spec);
|
$this->writeClientSpecToFile($spec);
|
||||||
} catch (Exception $e) {
|
} catch (Exception $e) {
|
||||||
|
@ -308,7 +336,7 @@ class Perforce {
|
||||||
$this->queryP4User($io);
|
$this->queryP4User($io);
|
||||||
if (!$this->isLoggedIn()) {
|
if (!$this->isLoggedIn()) {
|
||||||
$password = $this->queryP4Password($io);
|
$password = $this->queryP4Password($io);
|
||||||
if ($this->isWindows()) {
|
if ($this->windowsFlag) {
|
||||||
$this->windowsLogin($password);
|
$this->windowsLogin($password);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
|
@ -382,12 +410,11 @@ class Perforce {
|
||||||
public function getBranches() {
|
public function getBranches() {
|
||||||
$possible_branches = array();
|
$possible_branches = array();
|
||||||
if (!$this->isStream()) {
|
if (!$this->isStream()) {
|
||||||
$possible_branches[$this->p4branch] = $this->getStream();
|
$possible_branches[$this->p4Branch] = $this->getStream();
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
$command = $this->generateP4Command("streams //$this->p4depot/...");
|
$command = $this->generateP4Command("streams //$this->p4Depot/...");
|
||||||
$result = "";
|
$result = $this->executeCommand($command);
|
||||||
$this->process->execute($command, $result);
|
|
||||||
$resArray = explode("\n", $result);
|
$resArray = explode("\n", $result);
|
||||||
foreach ($resArray as $line) {
|
foreach ($resArray as $line) {
|
||||||
$resBits = explode(" ", $line);
|
$resBits = explode(" ", $line);
|
||||||
|
@ -398,7 +425,7 @@ class Perforce {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
$branches = array();
|
$branches = array();
|
||||||
$branches['master'] = $possible_branches[$this->p4branch];
|
$branches['master'] = $possible_branches[$this->p4Branch];
|
||||||
|
|
||||||
return $branches;
|
return $branches;
|
||||||
}
|
}
|
||||||
|
@ -427,8 +454,8 @@ class Perforce {
|
||||||
$index = strpos($line, "Depot");
|
$index = strpos($line, "Depot");
|
||||||
if (!($index === FALSE)) {
|
if (!($index === FALSE)) {
|
||||||
$fields = explode(" ", $line);
|
$fields = explode(" ", $line);
|
||||||
if (strcmp($this->p4depot, $fields[1]) === 0) {
|
if (strcmp($this->p4Depot, $fields[1]) === 0) {
|
||||||
$this->p4depotType = $fields[3];
|
$this->p4DepotType = $fields[3];
|
||||||
|
|
||||||
return $this->isStream();
|
return $this->isStream();
|
||||||
}
|
}
|
||||||
|
|
|
@ -60,7 +60,8 @@ class PerforceDownloaderTest extends \PHPUnit_Framework_TestCase {
|
||||||
$repoConfig = array("depot"=>"TEST_DEPOT", "branch"=>"TEST_BRANCH", "p4user"=>"TEST_USER");
|
$repoConfig = array("depot"=>"TEST_DEPOT", "branch"=>"TEST_BRANCH", "p4user"=>"TEST_USER");
|
||||||
$port = "TEST_PORT";
|
$port = "TEST_PORT";
|
||||||
$path = "TEST_PATH";
|
$path = "TEST_PATH";
|
||||||
$perforce = $this->getMock('Composer\Util\Perforce', array('setStream', 'queryP4User', 'writeP4ClientSpec', 'connectClient', 'syncCodeBase'), array($repoConfig, $port, $path));
|
$process = $this->getmock('Composer\Util\ProcessExecutor');
|
||||||
|
$perforce = $this->getMock('Composer\Util\Perforce', array('setStream', 'queryP4User', 'writeP4ClientSpec', 'connectClient', 'syncCodeBase'), array($repoConfig, $port, $path, $process, true, "TEST"));
|
||||||
$ref = "SOURCE_REF";
|
$ref = "SOURCE_REF";
|
||||||
$label = "LABEL";
|
$label = "LABEL";
|
||||||
$perforce->expects($this->at(0))
|
$perforce->expects($this->at(0))
|
||||||
|
|
|
@ -48,9 +48,6 @@ class PerforceDriverTest extends \PHPUnit_Framework_TestCase {
|
||||||
$fs->removeDirectory($this->testPath);
|
$fs->removeDirectory($this->testPath);
|
||||||
}
|
}
|
||||||
|
|
||||||
//Test:
|
|
||||||
//hasComposerFile
|
|
||||||
|
|
||||||
public function testInitializeCapturesVariablesFromRepoConfig() {
|
public function testInitializeCapturesVariablesFromRepoConfig() {
|
||||||
$this->setUp();
|
$this->setUp();
|
||||||
$repo_config = array(
|
$repo_config = array(
|
||||||
|
@ -58,8 +55,9 @@ class PerforceDriverTest extends \PHPUnit_Framework_TestCase {
|
||||||
'depot' => 'TEST_DEPOT_CONFIG',
|
'depot' => 'TEST_DEPOT_CONFIG',
|
||||||
'branch' => 'TEST_BRANCH_CONFIG'
|
'branch' => 'TEST_BRANCH_CONFIG'
|
||||||
);
|
);
|
||||||
$driver = new TestingPerforceDriver($repo_config, $this->io, $this->config, $this->process, $this->remoteFileSystem);
|
$driver = new PerforceDriver($repo_config, $this->io, $this->config, $this->process, $this->remoteFileSystem);
|
||||||
$arguments = array(array('depot'=>'TEST_DEPOT', 'branch'=>'TEST_BRANCH'), 'port'=>'TEST_PORT', 'path'=>$this->testPath);
|
$process = $this->getMock('Composer\Util\ProcessExecutor');
|
||||||
|
$arguments = array(array('depot'=>'TEST_DEPOT', 'branch'=>'TEST_BRANCH'), 'port'=>'TEST_PORT', 'path'=>$this->testPath, $process, true, "TEST");
|
||||||
$perforce = $this->getMock('Composer\Util\Perforce', null, $arguments);
|
$perforce = $this->getMock('Composer\Util\Perforce', null, $arguments);
|
||||||
$driver->injectPerforce($perforce);
|
$driver->injectPerforce($perforce);
|
||||||
$driver->initialize();
|
$driver->initialize();
|
||||||
|
@ -75,7 +73,7 @@ class PerforceDriverTest extends \PHPUnit_Framework_TestCase {
|
||||||
'depot' => 'TEST_DEPOT_CONFIG',
|
'depot' => 'TEST_DEPOT_CONFIG',
|
||||||
'branch' => 'TEST_BRANCH_CONFIG'
|
'branch' => 'TEST_BRANCH_CONFIG'
|
||||||
);
|
);
|
||||||
$driver = new TestingPerforceDriver($repo_config, $this->io, $this->config, $this->process, $this->remoteFileSystem);
|
$driver = new PerforceDriver($repo_config, $this->io, $this->config, $this->process, $this->remoteFileSystem);
|
||||||
$perforce = $this->getMockBuilder('Composer\Util\Perforce')->disableOriginalConstructor()->getMock();
|
$perforce = $this->getMockBuilder('Composer\Util\Perforce')->disableOriginalConstructor()->getMock();
|
||||||
$perforce->expects($this->at(0))
|
$perforce->expects($this->at(0))
|
||||||
->method('p4Login')
|
->method('p4Login')
|
||||||
|
@ -99,8 +97,9 @@ class PerforceDriverTest extends \PHPUnit_Framework_TestCase {
|
||||||
'depot' => 'TEST_DEPOT_CONFIG',
|
'depot' => 'TEST_DEPOT_CONFIG',
|
||||||
'branch' => 'TEST_BRANCH_CONFIG'
|
'branch' => 'TEST_BRANCH_CONFIG'
|
||||||
);
|
);
|
||||||
$driver = new TestingPerforceDriver($repo_config, $this->io, $this->config, $this->process, $this->remoteFileSystem);
|
$driver = new PerforceDriver($repo_config, $this->io, $this->config, $this->process, $this->remoteFileSystem);
|
||||||
$arguments = array(array('depot'=>'TEST_DEPOT', 'branch'=>'TEST_BRANCH'), 'port'=>'TEST_PORT', 'path'=>$this->testPath);
|
$process = $this->getMock('Composer\Util\ProcessExecutor');
|
||||||
|
$arguments = array(array('depot'=>'TEST_DEPOT', 'branch'=>'TEST_BRANCH'), 'port'=>'TEST_PORT', 'path'=>$this->testPath, $process, true, "TEST");
|
||||||
$perforce = $this->getMock('Composer\Util\Perforce', array('getComposerInformation'), $arguments);
|
$perforce = $this->getMock('Composer\Util\Perforce', array('getComposerInformation'), $arguments);
|
||||||
$perforce->expects($this->at(0))
|
$perforce->expects($this->at(0))
|
||||||
->method('getComposerInformation')
|
->method('getComposerInformation')
|
||||||
|
|
|
@ -1,26 +0,0 @@
|
||||||
<?php
|
|
||||||
/**
|
|
||||||
* Created by JetBrains PhpStorm.
|
|
||||||
* User: matt.whittom
|
|
||||||
* Date: 8/9/13
|
|
||||||
* Time: 10:42 AM
|
|
||||||
* To change this template use File | Settings | File Templates.
|
|
||||||
*/
|
|
||||||
|
|
||||||
namespace Composer\Test\Repository\Vcs;
|
|
||||||
|
|
||||||
use Composer\Repository\Vcs\PerforceDriver;
|
|
||||||
|
|
||||||
class TestingPerforceDriver extends PerforceDriver {
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Test Helper functions
|
|
||||||
*/
|
|
||||||
public function getDepot(){
|
|
||||||
return $this->depot;
|
|
||||||
}
|
|
||||||
public function getBranch(){
|
|
||||||
return $this->branch;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
|
@ -1,21 +1,26 @@
|
||||||
<?php
|
<?php
|
||||||
/**
|
/*
|
||||||
* Created by JetBrains PhpStorm.
|
* This file is part of Composer.
|
||||||
* User: matt.whittom
|
*
|
||||||
* Date: 7/31/13
|
* (c) Nils Adermann <naderman@naderman.de>
|
||||||
* Time: 2:13 PM
|
* Jordi Boggiano <j.boggiano@seld.be>
|
||||||
* To change this template use File | Settings | File Templates.
|
*
|
||||||
|
* Contributor: Matt Whittom <Matt.Whittom@veteransunited.com>
|
||||||
|
* Date: 7/17/13
|
||||||
|
*
|
||||||
|
* For the full copyright and license information, please view the LICENSE
|
||||||
|
* file that was distributed with this source code.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
||||||
namespace Composer\Test\Util;
|
namespace Composer\Test\Util;
|
||||||
|
|
||||||
use Composer\Test\Util\TestingPerforce;
|
use Composer\Util\Perforce;
|
||||||
use Composer\Util\ProcessExecutor;
|
use Composer\Util\ProcessExecutor;
|
||||||
use org\bovigo\vfs\vfsStreamWrapper;
|
|
||||||
use org\bovigo\vfs\vfsStreamDirectory;
|
|
||||||
use org\bovigo\vfs\vfsStream;
|
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author Matt Whittom <Matt.Whittom@veteransunited.com>
|
||||||
|
*/
|
||||||
class PerforceTest extends \PHPUnit_Framework_TestCase {
|
class PerforceTest extends \PHPUnit_Framework_TestCase {
|
||||||
|
|
||||||
protected $perforce;
|
protected $perforce;
|
||||||
|
@ -24,54 +29,59 @@ class PerforceTest extends \PHPUnit_Framework_TestCase {
|
||||||
public function setUp() {
|
public function setUp() {
|
||||||
$this->processExecutor = $this->getMock('Composer\Util\ProcessExecutor');
|
$this->processExecutor = $this->getMock('Composer\Util\ProcessExecutor');
|
||||||
$repoConfig = array("depot"=>"depot", "branch"=>"branch", "p4user"=>"user");
|
$repoConfig = array("depot"=>"depot", "branch"=>"branch", "p4user"=>"user");
|
||||||
$this->perforce = new TestingPerforce($repoConfig, "port", "path", $this->processExecutor);
|
$this->perforce = new Perforce($repoConfig, "port", "path", $this->processExecutor, true, "TEST");
|
||||||
}
|
}
|
||||||
|
|
||||||
public function testGetClientWithoutStream() {
|
public function testGetClientWithoutStream() {
|
||||||
$client = $this->perforce->testGetClient();
|
$client = $this->perforce->getClient();
|
||||||
|
$hostname = gethostname();
|
||||||
|
$timestamp = time();
|
||||||
|
|
||||||
$expected = "composer_perforce_TEST_depot";
|
$expected = "composer_perforce_TEST_depot";
|
||||||
$this->assertEquals($expected, $client);
|
$this->assertEquals($expected, $client);
|
||||||
}
|
}
|
||||||
|
|
||||||
public function testGetClientFromStream() {
|
public function testGetClientFromStream() {
|
||||||
$this->perforce->setDepotType("stream");
|
$this->setPerforceToStream();
|
||||||
$client = $this->perforce->testGetClient();
|
|
||||||
|
$client = $this->perforce->getClient();
|
||||||
|
|
||||||
$expected = "composer_perforce_TEST_depot_branch";
|
$expected = "composer_perforce_TEST_depot_branch";
|
||||||
$this->assertEquals($expected, $client);
|
$this->assertEquals($expected, $client);
|
||||||
}
|
}
|
||||||
|
|
||||||
public function testGetStreamWithoutStream() {
|
public function testGetStreamWithoutStream() {
|
||||||
$stream = $this->perforce->testGetStream();
|
$stream = $this->perforce->getStream();
|
||||||
$this->assertEquals("//depot", $stream);
|
$this->assertEquals("//depot", $stream);
|
||||||
}
|
}
|
||||||
|
|
||||||
public function testGetStreamWithStream() {
|
public function testGetStreamWithStream() {
|
||||||
$this->perforce->setDepotType("stream");
|
$this->setPerforceToStream();
|
||||||
$stream = $this->perforce->testGetStream();
|
|
||||||
|
$stream = $this->perforce->getStream();
|
||||||
$this->assertEquals("//depot/branch", $stream);
|
$this->assertEquals("//depot/branch", $stream);
|
||||||
}
|
}
|
||||||
|
|
||||||
public function testGetStreamWithoutLabel() {
|
|
||||||
$stream = $this->perforce->testGetStreamWithoutLabel();
|
public function testGetStreamWithoutLabelWithStreamWithoutLabel(){
|
||||||
$this->assertEquals("//depot", $stream);
|
$stream = $this->perforce->getStreamWithoutLabel("//depot/branch");
|
||||||
$this->perforce->setDepotType("stream");
|
|
||||||
$stream = $this->perforce->testGetStreamWithoutLabel();
|
|
||||||
$this->assertEquals("//depot/branch", $stream);
|
$this->assertEquals("//depot/branch", $stream);
|
||||||
$this->perforce->setStream("//depot/branching@label");
|
}
|
||||||
$stream = $this->perforce->testGetStreamWithoutLabel();
|
|
||||||
|
public function testGetStreamWithoutLabelWithStreamWithLabel(){
|
||||||
|
$stream = $this->perforce->getStreamWithoutLabel("//depot/branching@label");
|
||||||
$this->assertEquals("//depot/branching", $stream);
|
$this->assertEquals("//depot/branching", $stream);
|
||||||
}
|
}
|
||||||
|
|
||||||
public function testGetClientSpec() {
|
public function testGetClientSpec() {
|
||||||
$clientSpec = $this->perforce->testGetClientSpec();
|
$clientSpec = $this->perforce->getP4ClientSpec();
|
||||||
$expected = "path/composer_perforce_TEST_depot.p4.spec";
|
$expected = "path/composer_perforce_TEST_depot.p4.spec";
|
||||||
$this->assertEquals($expected, $clientSpec);
|
$this->assertEquals($expected, $clientSpec);
|
||||||
}
|
}
|
||||||
|
|
||||||
public function testGenerateP4Command() {
|
public function testGenerateP4Command() {
|
||||||
$command = "do something";
|
$command = "do something";
|
||||||
$p4Command = $this->perforce->testGenerateP4Command($command);
|
$p4Command = $this->perforce->generateP4Command($command);
|
||||||
$expected = "p4 -u user -c composer_perforce_TEST_depot -p port do something";
|
$expected = "p4 -u user -c composer_perforce_TEST_depot -p port do something";
|
||||||
$this->assertEquals($expected, $p4Command);
|
$this->assertEquals($expected, $p4Command);
|
||||||
}
|
}
|
||||||
|
@ -79,13 +89,16 @@ class PerforceTest extends \PHPUnit_Framework_TestCase {
|
||||||
public function testQueryP4UserWithUserAlreadySet(){
|
public function testQueryP4UserWithUserAlreadySet(){
|
||||||
$io = $this->getMock('Composer\IO\IOInterface');
|
$io = $this->getMock('Composer\IO\IOInterface');
|
||||||
|
|
||||||
$this->perforce->setP4User("TEST_USER");
|
$repoConfig = array("depot"=>"depot", "branch"=>"branch", "p4user"=>"TEST_USER");
|
||||||
|
$this->perforce = new Perforce($repoConfig, "port", "path", $this->processExecutor, true, "TEST");
|
||||||
|
|
||||||
$this->perforce->queryP4user($io);
|
$this->perforce->queryP4user($io);
|
||||||
$this->assertEquals("TEST_USER", $this->perforce->getUser());
|
$this->assertEquals("TEST_USER", $this->perforce->getUser());
|
||||||
}
|
}
|
||||||
|
|
||||||
public function testQueryP4UserWithUserSetInP4VariablesWithWindowsOS(){
|
public function testQueryP4UserWithUserSetInP4VariablesWithWindowsOS(){
|
||||||
$this->perforce->windows_flag = true;
|
$repoConfig = array("depot"=>"depot", "branch"=>"branch");
|
||||||
|
$this->perforce = new Perforce($repoConfig, "port", "path", $this->processExecutor, true, "TEST");
|
||||||
|
|
||||||
$io = $this->getMock('Composer\IO\IOInterface');
|
$io = $this->getMock('Composer\IO\IOInterface');
|
||||||
$expectedCommand = "p4 set";
|
$expectedCommand = "p4 set";
|
||||||
|
@ -94,13 +107,13 @@ class PerforceTest extends \PHPUnit_Framework_TestCase {
|
||||||
->with($this->equalTo($expectedCommand))
|
->with($this->equalTo($expectedCommand))
|
||||||
->will($this->returnCallback(function($command, &$output) {$output = "P4USER=TEST_P4VARIABLE_USER\n"; return true;}));
|
->will($this->returnCallback(function($command, &$output) {$output = "P4USER=TEST_P4VARIABLE_USER\n"; return true;}));
|
||||||
|
|
||||||
$this->perforce->setP4User(null);
|
|
||||||
$this->perforce->queryP4user($io);
|
$this->perforce->queryP4user($io);
|
||||||
$this->assertEquals("TEST_P4VARIABLE_USER", $this->perforce->getUser());
|
$this->assertEquals("TEST_P4VARIABLE_USER", $this->perforce->getUser());
|
||||||
}
|
}
|
||||||
|
|
||||||
public function testQueryP4UserWithUserSetInP4VariablesNotWindowsOS(){
|
public function testQueryP4UserWithUserSetInP4VariablesNotWindowsOS(){
|
||||||
$this->perforce->windows_flag = false;
|
$repoConfig = array("depot"=>"depot", "branch"=>"branch");
|
||||||
|
$this->perforce = new Perforce($repoConfig, "port", "path", $this->processExecutor, false, "TEST");
|
||||||
|
|
||||||
$io = $this->getMock('Composer\IO\IOInterface');
|
$io = $this->getMock('Composer\IO\IOInterface');
|
||||||
$expectedCommand = 'echo $P4USER';
|
$expectedCommand = 'echo $P4USER';
|
||||||
|
@ -109,12 +122,13 @@ class PerforceTest extends \PHPUnit_Framework_TestCase {
|
||||||
->with($this->equalTo($expectedCommand))
|
->with($this->equalTo($expectedCommand))
|
||||||
->will($this->returnCallback(function($command, &$output) {$output = "TEST_P4VARIABLE_USER\n"; return true;}));
|
->will($this->returnCallback(function($command, &$output) {$output = "TEST_P4VARIABLE_USER\n"; return true;}));
|
||||||
|
|
||||||
$this->perforce->setP4User(null);
|
|
||||||
$this->perforce->queryP4user($io);
|
$this->perforce->queryP4user($io);
|
||||||
$this->assertEquals("TEST_P4VARIABLE_USER", $this->perforce->getUser());
|
$this->assertEquals("TEST_P4VARIABLE_USER", $this->perforce->getUser());
|
||||||
}
|
}
|
||||||
|
|
||||||
public function testQueryP4UserQueriesForUser(){
|
public function testQueryP4UserQueriesForUser(){
|
||||||
|
$repoConfig = array("depot"=>"depot", "branch"=>"branch");
|
||||||
|
$this->perforce = new Perforce($repoConfig, "port", "path", $this->processExecutor, false, "TEST");
|
||||||
$io = $this->getMock('Composer\IO\IOInterface');
|
$io = $this->getMock('Composer\IO\IOInterface');
|
||||||
$expectedQuestion = "Enter P4 User:";
|
$expectedQuestion = "Enter P4 User:";
|
||||||
$io->expects($this->at(0))
|
$io->expects($this->at(0))
|
||||||
|
@ -122,13 +136,13 @@ class PerforceTest extends \PHPUnit_Framework_TestCase {
|
||||||
->with($this->equalTo($expectedQuestion))
|
->with($this->equalTo($expectedQuestion))
|
||||||
->will($this->returnValue("TEST_QUERY_USER"));
|
->will($this->returnValue("TEST_QUERY_USER"));
|
||||||
|
|
||||||
$this->perforce->setP4User(null);
|
|
||||||
$this->perforce->queryP4user($io);
|
$this->perforce->queryP4user($io);
|
||||||
$this->assertEquals("TEST_QUERY_USER", $this->perforce->getUser());
|
$this->assertEquals("TEST_QUERY_USER", $this->perforce->getUser());
|
||||||
}
|
}
|
||||||
|
|
||||||
public function testQueryP4UserStoresResponseToQueryForUserWithWindows(){
|
public function testQueryP4UserStoresResponseToQueryForUserWithWindows(){
|
||||||
$this->perforce->windows_flag = true;
|
$repoConfig = array("depot"=>"depot", "branch"=>"branch");
|
||||||
|
$this->perforce = new Perforce($repoConfig, "port", "path", $this->processExecutor, true, "TEST");
|
||||||
|
|
||||||
$io = $this->getMock('Composer\IO\IOInterface');
|
$io = $this->getMock('Composer\IO\IOInterface');
|
||||||
$expectedQuestion = "Enter P4 User:";
|
$expectedQuestion = "Enter P4 User:";
|
||||||
|
@ -142,12 +156,12 @@ class PerforceTest extends \PHPUnit_Framework_TestCase {
|
||||||
->with($this->equalTo($expectedCommand))
|
->with($this->equalTo($expectedCommand))
|
||||||
->will($this->returnValue(0));
|
->will($this->returnValue(0));
|
||||||
|
|
||||||
$this->perforce->setP4User(null);
|
|
||||||
$this->perforce->queryP4user($io);
|
$this->perforce->queryP4user($io);
|
||||||
}
|
}
|
||||||
|
|
||||||
public function testQueryP4UserStoresResponseToQueryForUserWithoutWindows(){
|
public function testQueryP4UserStoresResponseToQueryForUserWithoutWindows(){
|
||||||
$this->perforce->windows_flag = false;
|
$repoConfig = array("depot"=>"depot", "branch"=>"branch");
|
||||||
|
$this->perforce = new Perforce($repoConfig, "port", "path", $this->processExecutor, false, "TEST");
|
||||||
|
|
||||||
$io = $this->getMock('Composer\IO\IOInterface');
|
$io = $this->getMock('Composer\IO\IOInterface');
|
||||||
$expectedQuestion = "Enter P4 User:";
|
$expectedQuestion = "Enter P4 User:";
|
||||||
|
@ -161,35 +175,34 @@ class PerforceTest extends \PHPUnit_Framework_TestCase {
|
||||||
->with($this->equalTo($expectedCommand))
|
->with($this->equalTo($expectedCommand))
|
||||||
->will($this->returnValue(0));
|
->will($this->returnValue(0));
|
||||||
|
|
||||||
$this->perforce->setP4User(null);
|
|
||||||
$this->perforce->queryP4user($io);
|
$this->perforce->queryP4user($io);
|
||||||
}
|
}
|
||||||
|
|
||||||
public function testQueryP4PasswordWithPasswordAlreadySet(){
|
public function testQueryP4PasswordWithPasswordAlreadySet(){
|
||||||
|
$repoConfig = array("depot"=>"depot", "branch"=>"branch", "p4user"=>"user", "p4password"=>"TEST_PASSWORD");
|
||||||
|
$this->perforce = new Perforce($repoConfig, "port", "path", $this->processExecutor, false, "TEST");
|
||||||
$io = $this->getMock('Composer\IO\IOInterface');
|
$io = $this->getMock('Composer\IO\IOInterface');
|
||||||
|
|
||||||
$this->perforce->setP4Password("TEST_PASSWORD");
|
$password = $this->perforce->queryP4Password($io);
|
||||||
$password = $this->perforce->testQueryP4Password($io);
|
|
||||||
$this->assertEquals("TEST_PASSWORD", $password);
|
$this->assertEquals("TEST_PASSWORD", $password);
|
||||||
}
|
}
|
||||||
|
|
||||||
public function testQueryP4PasswordWithPasswordSetInP4VariablesWithWindowsOS(){
|
public function testQueryP4PasswordWithPasswordSetInP4VariablesWithWindowsOS(){
|
||||||
$this->perforce->windows_flag = true;
|
|
||||||
|
|
||||||
$io = $this->getMock('Composer\IO\IOInterface');
|
$io = $this->getMock('Composer\IO\IOInterface');
|
||||||
|
|
||||||
$expectedCommand = "p4 set";
|
$expectedCommand = "p4 set";
|
||||||
$this->processExecutor->expects($this->at(0))
|
$this->processExecutor->expects($this->at(0))
|
||||||
->method('execute')
|
->method('execute')
|
||||||
->with($this->equalTo($expectedCommand))
|
->with($this->equalTo($expectedCommand))
|
||||||
->will($this->returnCallback(function($command, &$output) {$output = "P4PASSWD=TEST_P4VARIABLE_PASSWORD\n"; return true;}));
|
->will($this->returnCallback(function($command, &$output) {$output = "P4PASSWD=TEST_P4VARIABLE_PASSWORD\n"; return true;}));
|
||||||
|
|
||||||
$this->perforce->setP4Password(null);
|
$password = $this->perforce->queryP4Password($io);
|
||||||
$password = $this->perforce->testQueryP4Password($io);
|
|
||||||
$this->assertEquals("TEST_P4VARIABLE_PASSWORD", $password);
|
$this->assertEquals("TEST_P4VARIABLE_PASSWORD", $password);
|
||||||
}
|
}
|
||||||
|
|
||||||
public function testQueryP4PasswordWithPasswordSetInP4VariablesNotWindowsOS(){
|
public function testQueryP4PasswordWithPasswordSetInP4VariablesNotWindowsOS(){
|
||||||
$this->perforce->windows_flag = false;
|
$repoConfig = array("depot"=>"depot", "branch"=>"branch", "p4user"=>"user");
|
||||||
|
$this->perforce = new Perforce($repoConfig, "port", "path", $this->processExecutor, false, "TEST");
|
||||||
|
|
||||||
$io = $this->getMock('Composer\IO\IOInterface');
|
$io = $this->getMock('Composer\IO\IOInterface');
|
||||||
$expectedCommand = 'echo $P4PASSWD';
|
$expectedCommand = 'echo $P4PASSWD';
|
||||||
|
@ -198,8 +211,7 @@ class PerforceTest extends \PHPUnit_Framework_TestCase {
|
||||||
->with($this->equalTo($expectedCommand))
|
->with($this->equalTo($expectedCommand))
|
||||||
->will($this->returnCallback(function($command, &$output) {$output = "TEST_P4VARIABLE_PASSWORD\n"; return true;}));
|
->will($this->returnCallback(function($command, &$output) {$output = "TEST_P4VARIABLE_PASSWORD\n"; return true;}));
|
||||||
|
|
||||||
$this->perforce->setP4Password(null);
|
$password = $this->perforce->queryP4Password($io);
|
||||||
$password = $this->perforce->testQueryP4Password($io);
|
|
||||||
$this->assertEquals("TEST_P4VARIABLE_PASSWORD", $password);
|
$this->assertEquals("TEST_P4VARIABLE_PASSWORD", $password);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -211,62 +223,60 @@ class PerforceTest extends \PHPUnit_Framework_TestCase {
|
||||||
->with($this->equalTo($expectedQuestion))
|
->with($this->equalTo($expectedQuestion))
|
||||||
->will($this->returnValue("TEST_QUERY_PASSWORD"));
|
->will($this->returnValue("TEST_QUERY_PASSWORD"));
|
||||||
|
|
||||||
$this->perforce->setP4Password(null);
|
$password = $this->perforce->queryP4Password($io);
|
||||||
$password = $this->perforce->testQueryP4Password($io);
|
|
||||||
$this->assertEquals("TEST_QUERY_PASSWORD", $password);
|
$this->assertEquals("TEST_QUERY_PASSWORD", $password);
|
||||||
}
|
}
|
||||||
|
|
||||||
public function testWriteP4ClientSpecWithoutStream() {
|
public function testWriteP4ClientSpecWithoutStream() {
|
||||||
vfsStreamWrapper::register();
|
$stream = fopen("php://memory", 'w+');
|
||||||
VfsStreamWrapper::setRoot(new vfsStreamDirectory("path"));
|
$this->perforce->writeClientSpecToFile($stream);
|
||||||
$clientSpec = $this->perforce->testGetClientSpec();
|
|
||||||
$this->perforce->writeP4ClientSpec();
|
rewind($stream);
|
||||||
$spec = fopen(vfsStream::url($clientSpec), 'r');
|
|
||||||
$expectedArray = $this->getExpectedClientSpec(FALSE);
|
$expectedArray = $this->getExpectedClientSpec(FALSE);
|
||||||
try {
|
try {
|
||||||
foreach ($expectedArray as $expected) {
|
foreach ($expectedArray as $expected) {
|
||||||
$this->assertStringStartsWith($expected, fgets($spec));
|
$this->assertStringStartsWith($expected, fgets($stream));
|
||||||
}
|
}
|
||||||
$this->assertFalse(fgets($spec));
|
$this->assertFalse(fgets($stream));
|
||||||
} catch (Exception $e) {
|
} catch (Exception $e) {
|
||||||
fclose($spec);
|
fclose($stream);
|
||||||
throw $e;
|
throw $e;
|
||||||
}
|
}
|
||||||
fclose($spec);
|
fclose($stream);
|
||||||
}
|
}
|
||||||
|
|
||||||
public function testWriteP4ClientSpecWithStream() {
|
public function testWriteP4ClientSpecWithStream() {
|
||||||
vfsStreamWrapper::register();
|
$this->setPerforceToStream();
|
||||||
VfsStreamWrapper::setRoot(new vfsStreamDirectory("path"));
|
$stream = fopen("php://memory", 'w+');
|
||||||
$this->perforce->setStream("//depot/branching@label");
|
|
||||||
$clientSpec = $this->perforce->testGetClientSpec();
|
$this->perforce->writeClientSpecToFile($stream);
|
||||||
$this->perforce->writeP4ClientSpec();
|
rewind($stream);
|
||||||
$spec = fopen(vfsStream::url($clientSpec), 'r');
|
|
||||||
$expectedArray = $this->getExpectedClientSpec(TRUE);
|
$expectedArray = $this->getExpectedClientSpec(TRUE);
|
||||||
try {
|
try {
|
||||||
foreach ($expectedArray as $expected) {
|
foreach ($expectedArray as $expected) {
|
||||||
$this->assertStringStartsWith($expected, fgets($spec));
|
$this->assertStringStartsWith($expected, fgets($stream));
|
||||||
}
|
}
|
||||||
$this->assertFalse(fgets($spec));
|
$this->assertFalse(fgets($stream));
|
||||||
} catch (Exception $e) {
|
} catch (Exception $e) {
|
||||||
fclose($spec);
|
fclose($stream);
|
||||||
throw $e;
|
throw $e;
|
||||||
}
|
}
|
||||||
fclose($spec);
|
fclose($stream);
|
||||||
}
|
}
|
||||||
|
|
||||||
public function testIsLoggedIn() {
|
public function testIsLoggedIn() {
|
||||||
$expectedCommand = $this->winCompat("p4 -u user -p port login -s");
|
$expectedCommand = "p4 -u user -p port login -s";
|
||||||
$this->processExecutor->expects($this->at(0))
|
$this->processExecutor->expects($this->at(0))
|
||||||
->method('execute')
|
->method('execute')
|
||||||
->with($this->equalTo($expectedCommand), $this->equalTo(null))
|
->with($this->equalTo($expectedCommand), $this->equalTo(null))
|
||||||
->will($this->returnValue(0));
|
->will($this->returnValue(0));
|
||||||
|
|
||||||
$this->perforce->testIsLoggedIn();
|
$this->perforce->isLoggedIn();
|
||||||
}
|
}
|
||||||
|
|
||||||
public function testConnectClient() {
|
public function testConnectClient() {
|
||||||
$expectedCommand = $this->winCompat("p4 -u user -c composer_perforce_TEST_depot -p port client -i < path/composer_perforce_TEST_depot.p4.spec");
|
$expectedCommand = "p4 -u user -c composer_perforce_TEST_depot -p port client -i < path/composer_perforce_TEST_depot.p4.spec";
|
||||||
$this->processExecutor->expects($this->at(0))
|
$this->processExecutor->expects($this->at(0))
|
||||||
->method('execute')
|
->method('execute')
|
||||||
->with($this->equalTo($expectedCommand), $this->equalTo(null))
|
->with($this->equalTo($expectedCommand), $this->equalTo(null))
|
||||||
|
@ -276,33 +286,25 @@ class PerforceTest extends \PHPUnit_Framework_TestCase {
|
||||||
}
|
}
|
||||||
|
|
||||||
public function testGetBranchesWithStream() {
|
public function testGetBranchesWithStream() {
|
||||||
$expectedCommand = $this->winCompat("p4 -u user -c composer_perforce_TEST_depot_branchlabel -p port streams //depot/...");
|
$this->setPerforceToStream();
|
||||||
|
|
||||||
|
$expectedCommand = "p4 -u user -c composer_perforce_TEST_depot_branch -p port streams //depot/...";
|
||||||
$this->processExecutor->expects($this->at(0))
|
$this->processExecutor->expects($this->at(0))
|
||||||
->method('execute')
|
->method('execute')
|
||||||
->with($this->equalTo($expectedCommand))
|
->with($this->equalTo($expectedCommand))
|
||||||
->will($this->returnCallback(function($command, &$output) {$output = "Stream //depot/branch mainline none 'branch'\n"; return true;}));
|
->will($this->returnCallback(function($command, &$output) {$output = "Stream //depot/branch mainline none 'branch'\n"; return true;}));
|
||||||
|
|
||||||
$this->perforce->setStream("//depot/branch@label");
|
|
||||||
$branches = $this->perforce->getBranches();
|
$branches = $this->perforce->getBranches();
|
||||||
$this->assertEquals("//depot/branch", $branches['master']);
|
$this->assertEquals("//depot/branch", $branches['master']);
|
||||||
}
|
}
|
||||||
|
|
||||||
public function testGetBranchesWithoutStream() {
|
public function testGetBranchesWithoutStream() {
|
||||||
$expectedCommand = $this->winCompat("p4 -u user -p port depots");
|
|
||||||
$this->processExecutor->expects($this->at(0))
|
|
||||||
->method('execute')
|
|
||||||
->with($this->equalTo($expectedCommand))
|
|
||||||
->will($this->returnCallback(function($command, &$output) {$output = "Depot depot 2013/01/28 local /path/to/depots/depot/... 'depot project'\n"; return true;}));
|
|
||||||
|
|
||||||
$result = $this->perforce->checkStream("depot");
|
|
||||||
$this->assertFalse($result);
|
|
||||||
|
|
||||||
$branches = $this->perforce->getBranches();
|
$branches = $this->perforce->getBranches();
|
||||||
$this->assertEquals("//depot", $branches['master']);
|
$this->assertEquals("//depot", $branches['master']);
|
||||||
}
|
}
|
||||||
|
|
||||||
public function testGetTagsWithoutStream() {
|
public function testGetTagsWithoutStream() {
|
||||||
$expectedCommand = $this->winCompat("p4 -u user -c composer_perforce_TEST_depot -p port labels");
|
$expectedCommand = "p4 -u user -c composer_perforce_TEST_depot -p port labels";
|
||||||
$this->processExecutor->expects($this->at(0))
|
$this->processExecutor->expects($this->at(0))
|
||||||
->method('execute')
|
->method('execute')
|
||||||
->with($this->equalTo($expectedCommand))
|
->with($this->equalTo($expectedCommand))
|
||||||
|
@ -314,36 +316,35 @@ class PerforceTest extends \PHPUnit_Framework_TestCase {
|
||||||
}
|
}
|
||||||
|
|
||||||
public function testGetTagsWithStream() {
|
public function testGetTagsWithStream() {
|
||||||
$expectedCommand = $this->winCompat("p4 -u user -c composer_perforce_TEST_depot_branch -p port labels");
|
$this->setPerforceToStream();
|
||||||
|
|
||||||
|
$expectedCommand = "p4 -u user -c composer_perforce_TEST_depot_branch -p port labels";
|
||||||
$this->processExecutor->expects($this->at(0))
|
$this->processExecutor->expects($this->at(0))
|
||||||
->method('execute')
|
->method('execute')
|
||||||
->with($this->equalTo($expectedCommand))
|
->with($this->equalTo($expectedCommand))
|
||||||
->will($this->returnCallback(function($command, &$output) {$output = "Label 0.0.1 2013/07/31 'First Label!'\nLabel 0.0.2 2013/08/01 'Second Label!'\n"; return true;}));
|
->will($this->returnCallback(function($command, &$output) {$output = "Label 0.0.1 2013/07/31 'First Label!'\nLabel 0.0.2 2013/08/01 'Second Label!'\n"; return true;}));
|
||||||
|
|
||||||
$this->perforce->setStream("//depot/branch");
|
|
||||||
$tags = $this->perforce->getTags();
|
$tags = $this->perforce->getTags();
|
||||||
$this->assertEquals("//depot/branch@0.0.1", $tags['0.0.1']);
|
$this->assertEquals("//depot/branch@0.0.1", $tags['0.0.1']);
|
||||||
$this->assertEquals("//depot/branch@0.0.2", $tags['0.0.2']);
|
$this->assertEquals("//depot/branch@0.0.2", $tags['0.0.2']);
|
||||||
}
|
}
|
||||||
|
|
||||||
public function testCheckStreamWithoutStream() {
|
public function testCheckStreamWithoutStream() {
|
||||||
$this->perforce->commandReturnValue = "Depot depot 2013/01/28 local /path/to/depots/depot/... 'depot project'";
|
|
||||||
$result = $this->perforce->checkStream("depot");
|
$result = $this->perforce->checkStream("depot");
|
||||||
$this->assertFalse($result);
|
$this->assertFalse($result);
|
||||||
$this->assertFalse($this->perforce->testIsStream());
|
$this->assertFalse($this->perforce->isStream());
|
||||||
}
|
}
|
||||||
|
|
||||||
public function testCheckStreamWithStream() {
|
public function testCheckStreamWithStream() {
|
||||||
$line1 = "Depot depot 2013/01/28 branch /path/to/depots/depot/... 'depot project'\n";
|
$this->processExecutor->expects($this->any())->method('execute')
|
||||||
$line2 = "Depot depot 2013/01/28 development /path/to/depots/depot/... 'depot project'\n";
|
->will($this->returnCallback(function($command, &$output) {$output = "Depot depot 2013/06/25 stream /p4/1/depots/depot/... 'Created by Me'"; return true;}));
|
||||||
$this->perforce->commandReturnValue = $line1 . $line2;
|
|
||||||
$result = $this->perforce->checkStream("depot");
|
$result = $this->perforce->checkStream("depot");
|
||||||
$this->assertFalse($result);
|
$this->assertTrue($result);
|
||||||
$this->assertFalse($this->perforce->testIsStream());
|
$this->assertTrue($this->perforce->isStream());
|
||||||
}
|
}
|
||||||
|
|
||||||
public function testGetComposerInformationWithoutLabelWithoutStream() {
|
public function testGetComposerInformationWithoutLabelWithoutStream() {
|
||||||
$expectedCommand = $this->winCompat("p4 -u user -c composer_perforce_TEST_depot -p port print //depot/composer.json");
|
$expectedCommand = "p4 -u user -c composer_perforce_TEST_depot -p port print //depot/composer.json";
|
||||||
$this->processExecutor->expects($this->at(0))
|
$this->processExecutor->expects($this->at(0))
|
||||||
->method('execute')
|
->method('execute')
|
||||||
->with($this->equalTo($expectedCommand))
|
->with($this->equalTo($expectedCommand))
|
||||||
|
@ -360,13 +361,13 @@ class PerforceTest extends \PHPUnit_Framework_TestCase {
|
||||||
}
|
}
|
||||||
|
|
||||||
public function testGetComposerInformationWithLabelWithoutStream() {
|
public function testGetComposerInformationWithLabelWithoutStream() {
|
||||||
$expectedCommand = $this->winCompat("p4 -u user -p port files //depot/composer.json@0.0.1");
|
$expectedCommand = "p4 -u user -p port files //depot/composer.json@0.0.1";
|
||||||
$this->processExecutor->expects($this->at(0))
|
$this->processExecutor->expects($this->at(0))
|
||||||
->method('execute')
|
->method('execute')
|
||||||
->with($this->equalTo($expectedCommand))
|
->with($this->equalTo($expectedCommand))
|
||||||
->will($this->returnCallback(function($command, &$output) {$output = "//depot/composer.json#1 - branch change 10001 (text)"; return true;}));
|
->will($this->returnCallback(function($command, &$output) {$output = "//depot/composer.json#1 - branch change 10001 (text)"; return true;}));
|
||||||
|
|
||||||
$expectedCommand = $this->winCompat("p4 -u user -c composer_perforce_TEST_depot -p port print //depot/composer.json@10001");
|
$expectedCommand = "p4 -u user -c composer_perforce_TEST_depot -p port print //depot/composer.json@10001";
|
||||||
$this->processExecutor->expects($this->at(1))
|
$this->processExecutor->expects($this->at(1))
|
||||||
->method('execute')
|
->method('execute')
|
||||||
->with($this->equalTo($expectedCommand))
|
->with($this->equalTo($expectedCommand))
|
||||||
|
@ -384,13 +385,14 @@ class PerforceTest extends \PHPUnit_Framework_TestCase {
|
||||||
}
|
}
|
||||||
|
|
||||||
public function testGetComposerInformationWithoutLabelWithStream() {
|
public function testGetComposerInformationWithoutLabelWithStream() {
|
||||||
$expectedCommand = $this->winCompat("p4 -u user -c composer_perforce_TEST_depot_branch -p port print //depot/branch/composer.json");
|
$this->setPerforceToStream();
|
||||||
|
|
||||||
|
$expectedCommand = "p4 -u user -c composer_perforce_TEST_depot_branch -p port print //depot/branch/composer.json";
|
||||||
$this->processExecutor->expects($this->at(0))
|
$this->processExecutor->expects($this->at(0))
|
||||||
->method('execute')
|
->method('execute')
|
||||||
->with($this->equalTo($expectedCommand))
|
->with($this->equalTo($expectedCommand))
|
||||||
->will($this->returnCallback(function($command, &$output) {$output = PerforceTest::getComposerJson(); return true;}));
|
->will($this->returnCallback(function($command, &$output) {$output = PerforceTest::getComposerJson(); return true;}));
|
||||||
|
|
||||||
$this->perforce->setStream("//depot/branch");
|
|
||||||
$result = $this->perforce->getComposerInformation("//depot/branch");
|
$result = $this->perforce->getComposerInformation("//depot/branch");
|
||||||
|
|
||||||
$expected = array(
|
$expected = array(
|
||||||
|
@ -403,19 +405,19 @@ class PerforceTest extends \PHPUnit_Framework_TestCase {
|
||||||
}
|
}
|
||||||
|
|
||||||
public function testGetComposerInformationWithLabelWithStream() {
|
public function testGetComposerInformationWithLabelWithStream() {
|
||||||
$expectedCommand = $this->winCompat("p4 -u user -p port files //depot/branch/composer.json@0.0.1");
|
$this->setPerforceToStream();
|
||||||
|
$expectedCommand = "p4 -u user -p port files //depot/branch/composer.json@0.0.1";
|
||||||
$this->processExecutor->expects($this->at(0))
|
$this->processExecutor->expects($this->at(0))
|
||||||
->method('execute')
|
->method('execute')
|
||||||
->with($this->equalTo($expectedCommand))
|
->with($this->equalTo($expectedCommand))
|
||||||
->will($this->returnCallback(function($command, &$output) {$output = "//depot/composer.json#1 - branch change 10001 (text)"; return true;}));
|
->will($this->returnCallback(function($command, &$output) {$output = "//depot/composer.json#1 - branch change 10001 (text)"; return true;}));
|
||||||
|
|
||||||
$expectedCommand = $this->winCompat("p4 -u user -c composer_perforce_TEST_depot_branch -p port print //depot/branch/composer.json@10001");
|
$expectedCommand = "p4 -u user -c composer_perforce_TEST_depot_branch -p port print //depot/branch/composer.json@10001";
|
||||||
$this->processExecutor->expects($this->at(1))
|
$this->processExecutor->expects($this->at(1))
|
||||||
->method('execute')
|
->method('execute')
|
||||||
->with($this->equalTo($expectedCommand))
|
->with($this->equalTo($expectedCommand))
|
||||||
->will($this->returnCallback(function($command, &$output) {$output = PerforceTest::getComposerJson(); return true;}));
|
->will($this->returnCallback(function($command, &$output) {$output = PerforceTest::getComposerJson(); return true;}));
|
||||||
|
|
||||||
$this->perforce->setStream("//depot/branch");
|
|
||||||
$result = $this->perforce->getComposerInformation("//depot/branch@0.0.1");
|
$result = $this->perforce->getComposerInformation("//depot/branch@0.0.1");
|
||||||
|
|
||||||
$expected = array(
|
$expected = array(
|
||||||
|
@ -428,7 +430,7 @@ class PerforceTest extends \PHPUnit_Framework_TestCase {
|
||||||
}
|
}
|
||||||
|
|
||||||
public function testSyncCodeBaseWithoutStream() {
|
public function testSyncCodeBaseWithoutStream() {
|
||||||
$expectedCommand = $this->winCompat("p4 -u user -c composer_perforce_TEST_depot -p port sync -f @label");
|
$expectedCommand = "p4 -u user -c composer_perforce_TEST_depot -p port sync -f @label";
|
||||||
$this->processExecutor->expects($this->at(1))
|
$this->processExecutor->expects($this->at(1))
|
||||||
->method('execute')
|
->method('execute')
|
||||||
->with($this->equalTo($expectedCommand), $this->equalTo(null))
|
->with($this->equalTo($expectedCommand), $this->equalTo(null))
|
||||||
|
@ -438,20 +440,20 @@ class PerforceTest extends \PHPUnit_Framework_TestCase {
|
||||||
}
|
}
|
||||||
|
|
||||||
public function testSyncCodeBaseWithStream() {
|
public function testSyncCodeBaseWithStream() {
|
||||||
$expectedCommand = $this->winCompat("p4 -u user -c composer_perforce_TEST_depot_branch -p port sync -f @label");
|
$this->setPerforceToStream();
|
||||||
$this->processExecutor->expects($this->at(1))
|
$expectedCommand = "p4 -u user -c composer_perforce_TEST_depot_branch -p port sync -f @label";
|
||||||
->method('execute')
|
$this->processExecutor->expects($this->at(1))
|
||||||
->with($this->equalTo($expectedCommand), $this->equalTo(null))
|
->method('execute')
|
||||||
->will($this->returnValue(0));
|
->with($this->equalTo($expectedCommand))
|
||||||
|
->will($this->returnValue(0));
|
||||||
|
|
||||||
$this->perforce->setStream("//depot/branch");
|
|
||||||
$this->perforce->syncCodeBase("label");
|
$this->perforce->syncCodeBase("label");
|
||||||
}
|
}
|
||||||
|
|
||||||
public function testCheckServerExists() {
|
public function testCheckServerExists() {
|
||||||
$processExecutor = $this->getMock('Composer\Util\ProcessExecutor');
|
$processExecutor = $this->getMock('Composer\Util\ProcessExecutor');
|
||||||
|
|
||||||
$expectedCommand = $this->winCompat("p4 -p perforce.does.exist:port info -s");
|
$expectedCommand = "p4 -p perforce.does.exist:port info -s";
|
||||||
$processExecutor->expects($this->at(0))
|
$processExecutor->expects($this->at(0))
|
||||||
->method('execute')
|
->method('execute')
|
||||||
->with($this->equalTo($expectedCommand), $this->equalTo(null))
|
->with($this->equalTo($expectedCommand), $this->equalTo(null))
|
||||||
|
@ -464,7 +466,7 @@ class PerforceTest extends \PHPUnit_Framework_TestCase {
|
||||||
public function testCheckServerExistsWithFailure() {
|
public function testCheckServerExistsWithFailure() {
|
||||||
$processExecutor = $this->getMock('Composer\Util\ProcessExecutor');
|
$processExecutor = $this->getMock('Composer\Util\ProcessExecutor');
|
||||||
|
|
||||||
$expectedCommand = $this->winCompat("p4 -p perforce.does.not.exist:port info -s");
|
$expectedCommand = "p4 -p perforce.does.not.exist:port info -s";
|
||||||
$processExecutor->expects($this->at(0))
|
$processExecutor->expects($this->at(0))
|
||||||
->method('execute')
|
->method('execute')
|
||||||
->with($this->equalTo($expectedCommand), $this->equalTo(null))
|
->with($this->equalTo($expectedCommand), $this->equalTo(null))
|
||||||
|
@ -513,7 +515,7 @@ class PerforceTest extends \PHPUnit_Framework_TestCase {
|
||||||
);
|
);
|
||||||
if ($withStream) {
|
if ($withStream) {
|
||||||
$expectedArray[] = "Stream:";
|
$expectedArray[] = "Stream:";
|
||||||
$expectedArray[] = " //depot/branching";
|
$expectedArray[] = " //depot/branch";
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
$expectedArray[] = "View: //depot/... //composer_perforce_TEST_depot/depot/...";
|
$expectedArray[] = "View: //depot/... //composer_perforce_TEST_depot/depot/...";
|
||||||
|
@ -522,16 +524,8 @@ class PerforceTest extends \PHPUnit_Framework_TestCase {
|
||||||
return $expectedArray;
|
return $expectedArray;
|
||||||
}
|
}
|
||||||
|
|
||||||
private function winCompat($cmd) {
|
private function setPerforceToStream(){
|
||||||
if (defined('PHP_WINDOWS_VERSION_BUILD')) {
|
$this->perforce->setStream("//depot/branch");
|
||||||
$cmd = str_replace('cd ', 'cd /D ', $cmd);
|
|
||||||
$cmd = str_replace('composerPath', getcwd() . '/composerPath', $cmd);
|
|
||||||
|
|
||||||
return strtr($cmd, "'", '"');
|
|
||||||
}
|
|
||||||
|
|
||||||
return $cmd;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1,106 +0,0 @@
|
||||||
<?php
|
|
||||||
/**
|
|
||||||
* Created by JetBrains PhpStorm.
|
|
||||||
* User: matt.whittom
|
|
||||||
* Date: 7/31/13
|
|
||||||
* Time: 2:37 PM
|
|
||||||
* To change this template use File | Settings | File Templates.
|
|
||||||
*/
|
|
||||||
|
|
||||||
namespace Composer\Test\Util;
|
|
||||||
|
|
||||||
|
|
||||||
use Composer\Util\Perforce;
|
|
||||||
use org\bovigo\vfs\vfsStream;
|
|
||||||
|
|
||||||
|
|
||||||
class TestingPerforce extends Perforce {
|
|
||||||
public $windows_flag;
|
|
||||||
|
|
||||||
public function __construct($repoConfig, $port, $path, $process=null){
|
|
||||||
parent::__construct($repoConfig, $port, $path, $process);
|
|
||||||
$this->windows_flag = false;
|
|
||||||
}
|
|
||||||
/*
|
|
||||||
* Override functions
|
|
||||||
*/
|
|
||||||
protected function getRandomValue() {
|
|
||||||
return "TEST";
|
|
||||||
}
|
|
||||||
protected function isWindows(){
|
|
||||||
return $this->windows_flag;
|
|
||||||
}
|
|
||||||
|
|
||||||
// protected function executeCommand($command) {
|
|
||||||
// $this->previousCommand = $this->lastCommand;
|
|
||||||
// $this->lastCommand = $command;
|
|
||||||
// $result = $this->commandReturnValue;
|
|
||||||
// $this->commandReturnValue = $this->nextCommandReturnValue;
|
|
||||||
// $this->nextCommandReturnValue = null;
|
|
||||||
// return $result;
|
|
||||||
// }
|
|
||||||
|
|
||||||
public function writeP4ClientSpec() {
|
|
||||||
$spec = fopen(vfsStream::url($this->getP4ClientSpec()), 'w');
|
|
||||||
$this->writeClientSpecToFile($spec);
|
|
||||||
fclose($spec);
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Test Helper functions
|
|
||||||
*/
|
|
||||||
public function setDepotType($depotType) {
|
|
||||||
$this->p4depotType = $depotType;
|
|
||||||
$this->p4stream = NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Functions to expose protected methods for testing:
|
|
||||||
*/
|
|
||||||
public function setP4User($p4user){
|
|
||||||
$this->p4user = $p4user;
|
|
||||||
}
|
|
||||||
public function setP4Password($password){
|
|
||||||
$this->p4password = $password;
|
|
||||||
}
|
|
||||||
|
|
||||||
public function testGetClient() {
|
|
||||||
return $this->getClient();
|
|
||||||
}
|
|
||||||
|
|
||||||
public function testGetStream() {
|
|
||||||
return $this->getStream();
|
|
||||||
}
|
|
||||||
|
|
||||||
public function testGetStreamWithoutLabel() {
|
|
||||||
return $this->getStreamWithoutLabel();
|
|
||||||
}
|
|
||||||
|
|
||||||
public function testGetClientSpec() {
|
|
||||||
return $this->getP4ClientSpec();
|
|
||||||
}
|
|
||||||
|
|
||||||
public function testGenerateP4Command($command, $useClient = TRUE) {
|
|
||||||
return $this->generateP4Command($command, $useClient);
|
|
||||||
}
|
|
||||||
|
|
||||||
public function testIsLoggedIn()
|
|
||||||
{
|
|
||||||
return $this->isLoggedIn();
|
|
||||||
}
|
|
||||||
|
|
||||||
public function testIsStream()
|
|
||||||
{
|
|
||||||
return $this->isStream();
|
|
||||||
}
|
|
||||||
|
|
||||||
public function testGetP4Variable($name)
|
|
||||||
{
|
|
||||||
return $this->testGetP4Variable($name);
|
|
||||||
}
|
|
||||||
|
|
||||||
public function testQueryP4Password($io)
|
|
||||||
{
|
|
||||||
return $this->queryP4Password($io);
|
|
||||||
}
|
|
||||||
}
|
|
Loading…
Reference in New Issue