diff options
| -rwxr-xr-x | php-doctrine-orm-get-source.sh | 62 | ||||
| -rw-r--r-- | php-doctrine-orm-upstream.patch | 73 | ||||
| -rw-r--r-- | php-doctrine-orm.spec | 115 | 
3 files changed, 145 insertions, 105 deletions
| diff --git a/php-doctrine-orm-get-source.sh b/php-doctrine-orm-get-source.sh new file mode 100755 index 0000000..e283587 --- /dev/null +++ b/php-doctrine-orm-get-source.sh @@ -0,0 +1,62 @@ +#/bin/sh + +GIT=`which git` +RPM=`which rpm` + +if [ -z "$GIT" ] +then +    echo "ERROR: 'git' command not found" 1>&2 +    exit 1 +elif [ -z "$RPM" ] +then +    echo "ERROR: 'rpm' command not found" 1>&2 +    exit 1 +fi + +function print { +    echo -e "\e[0;33m>>>>> ${1}\e[0m" +} + +SPEC=`ls *.spec` +NAME=`echo $SPEC | sed 's#\.spec##'` +VERSION=`egrep '%global\s*github_version' $SPEC | awk '{print $3}'` + +print "SPEC = $SPEC" +print "NAME = $NAME" + +GIT_OWNER=`egrep '%global\s*github_owner' $SPEC | awk '{print $3}'` +GIT_NAME=`egrep '%global\s*github_name' $SPEC | awk '{print $3}'` +GIT_COMMIT=`egrep '%global\s*github_commit' $SPEC | awk '{print $3}'` +GIT_REPO=https://github.com/${GIT_OWNER}/${GIT_NAME} +GIT_DIR=`echo $GIT_REPO | sed 's#.*/##'` + +print "GIT_OWNER = $GIT_OWNER" +print "GIT_NAME = $GIT_NAME" +print "GIT_COMMIT = $GIT_COMMIT" +print "GIT_REPO = $GIT_REPO" +print "GIT_DIR = $GIT_DIR" + +TEMP_DIR=$(mktemp --dir) + +pushd $TEMP_DIR +    print "Cloning git repo..." +    $GIT clone $GIT_REPO + +    pushd $GIT_DIR +        print "Checking out commit..." +        $GIT checkout $GIT_COMMIT +    popd + +    TAR_DIR=${GIT_NAME}-${GIT_COMMIT} +    print "TAR_DIR = $TAR_DIR" + +    mv $GIT_DIR $TAR_DIR + +    TAR_FILE=`$RPM --eval='%{_sourcedir}'`/${NAME}-${VERSION}-${GIT_COMMIT}.tar.gz +    print "TAR_FILE = $TAR_FILE" + +    [ -e $TAR_FILE ] && rm -f $TAR_FILE +    tar --exclude-vcs -czf $TAR_FILE $TAR_DIR +popd + +rm -rf $TEMP_DIR diff --git a/php-doctrine-orm-upstream.patch b/php-doctrine-orm-upstream.patch deleted file mode 100644 index b2dff4c..0000000 --- a/php-doctrine-orm-upstream.patch +++ /dev/null @@ -1,73 +0,0 @@ -Adapted for 2.4 from: - -From 361ec2a474d78168473fb82a041f32c4b7665643 Mon Sep 17 00:00:00 2001 -From: Marco Pivetta <ocramius@gmail.com> -Date: Thu, 14 Aug 2014 15:51:48 +0200 -Subject: [PATCH] DDC-3120 - using `Doctrine\Instantiator` when building new - instances - ---- - lib/Doctrine/ORM/Mapping/ClassMetadataInfo.php | 21 +++++++-------------- - 1 file changed, 7 insertions(+), 14 deletions(-) - -diff --git a/lib/Doctrine/ORM/Mapping/ClassMetadataInfo.php b/lib/Doctrine/ORM/Mapping/ClassMetadataInfo.php -index 5d36f64..f8b4bb7 100644 ---- a/lib/Doctrine/ORM/Mapping/ClassMetadataInfo.php -+++ b/lib/Doctrine/ORM/Mapping/ClassMetadataInfo.php -@@ -20,6 +20,7 @@ - namespace Doctrine\ORM\Mapping; -  - use BadMethodCallException; -+use Doctrine\Instantiator\Instantiator; - use InvalidArgumentException; - use RuntimeException; - use Doctrine\DBAL\Types\Type; -@@ -610,11 +611,9 @@ class ClassMetadataInfo implements Class -     public $reflFields = array(); -  -     /** --     * The prototype from which new instances of the mapped class are created. --     * --     * @var object -+     * @var \Doctrine\Instantiator\InstantiatorInterface|null -      */ --    private $_prototype; -+    private $instantiator; -  -     /** -      * Initializes a new ClassMetadata instance that will hold the object-relational mapping -@@ -628,6 +627,7 @@ class ClassMetadataInfo implements Class -         $this->name = $entityName; -         $this->rootEntityName = $entityName; -         $this->namingStrategy = $namingStrategy ?: new DefaultNamingStrategy(); -+        $this->instantiator   = new Instantiator(); -     } -  -     /** -@@ -865,15 +865,7 @@ class ClassMetadataInfo implements Class -      */ -     public function newInstance() -     { --        if ($this->_prototype === null) { --            if (PHP_VERSION_ID === 50429 || PHP_VERSION_ID === 50513 || PHP_VERSION_ID >= 50600) { --                $this->_prototype = $this->reflClass->newInstanceWithoutConstructor(); --            } else { --                $this->_prototype = unserialize(sprintf('O:%d:"%s":0:{}', strlen($this->name), $this->name)); --            } --        } -- --        return clone $this->_prototype; -+        return $this->instantiator->instantiate($this->name); -     } -     /** -      * Restores some state that can not be serialized/unserialized. -@@ -885,7 +877,8 @@ class ClassMetadataInfo implements Class -     public function wakeupReflection($reflService) -     { -         // Restore ReflectionClass and properties --        $this->reflClass = $reflService->getClass($this->name); -+        $this->reflClass    = $reflService->getClass($this->name); -+        $this->instantiator = $this->instantiator ?: new Instantiator(); -  -         foreach ($this->fieldMappings as $field => $mapping) { -             $this->reflFields[$field] = isset($mapping['declared']) diff --git a/php-doctrine-orm.spec b/php-doctrine-orm.spec index 67ed6e9..b313239 100644 --- a/php-doctrine-orm.spec +++ b/php-doctrine-orm.spec @@ -31,6 +31,11 @@  %global symfony_min_ver     2.1  %global symfony_max_ver     3.0 +%{!?__phpunit:  %global __phpunit  %{_bindir}/phpunit} + +# Build using "--without tests" to disable tests +%global with_tests %{?_without_tests:0}%{!?_without_tests:1} +  Name:      php-%{composer_vendor}-%{composer_project}  Version:   %{github_version}  Release:   1%{?dist} @@ -39,37 +44,61 @@ Summary:   Doctrine Object-Relational-Mapper (ORM)  Group:     Development/Libraries  License:   MIT  URL:       http://www.doctrine-project.org/projects/orm.html -Source0:   https://github.com/%{github_owner}/%{github_name}/archive/%{github_commit}/%{name}-%{github_version}-%{github_commit}.tar.gz + +# Run "php-doctrine-orm-get-source.sh" to create source +Source0:   %{name}-%{version}-%{github_commit}.tar.gz +Source1:   %{name}-get-source.sh +  # Update bin script:  # 1) Add she-bang  # 2) Auto-load using Doctrine\Common\ClassLoader  Patch0:    %{name}-bin.patch -# Upstream fix for latest PHP -Patch1:    %{name}-upstream.patch -Requires:  php-composer(doctrine/instantiator) >= 1.0.2 -  BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n)  BuildArch: noarch - -Requires:  php(language)                      >= %{php_min_ver} -Requires:  php-composer(doctrine/collections) >= %{collections_min_ver} -Requires:  php-composer(doctrine/collections) <  %{collections_max_ver} -Requires:  php-composer(doctrine/dbal)        >= %{dbal_min_ver} -Requires:  php-composer(doctrine/dbal)        <  %{dbal_max_ver} -Requires:  php-symfony-console                >= %{symfony_min_ver} -Requires:  php-symfony-console                <  %{symfony_max_ver} -Requires:  php-symfony-yaml                   >= %{symfony_min_ver} -Requires:  php-symfony-yaml                   <  %{symfony_max_ver} -# phpcompatinfo (computed from v2.4.2) -Requires:  php-ctype -Requires:  php-dom -Requires:  php-pcre -Requires:  php-pdo -Requires:  php-reflection -Requires:  php-simplexml -Requires:  php-spl -Requires:  php-tokenizer +%if %{with_tests} +BuildRequires: php-phpunit-PHPUnit +# composer.json +BuildRequires: php(language)                      >= %{php_min_ver} +BuildRequires: php-composer(doctrine/collections) >= %{collections_min_ver} +BuildRequires: php-composer(doctrine/collections) <  %{collections_max_ver} +BuildRequires: php-composer(doctrine/dbal)        >= %{dbal_min_ver} +BuildRequires: php-composer(doctrine/dbal)        <  %{dbal_max_ver} +BuildRequires: php-symfony-console                >= %{symfony_min_ver} +BuildRequires: php-symfony-console                <  %{symfony_max_ver} +BuildRequires: php-symfony-yaml                   >= %{symfony_min_ver} +BuildRequires: php-symfony-yaml                   <  %{symfony_max_ver} +# phpcompatinfo (computed from version 2.4.6) +BuildRequires: php-ctype +BuildRequires: php-date +BuildRequires: php-dom +BuildRequires: php-pcre +BuildRequires: php-pdo +BuildRequires: php-reflection +BuildRequires: php-simplexml +BuildRequires: php-spl +BuildRequires: php-tokenizer +%endif + +# composer.json +Requires:      php(language)                      >= %{php_min_ver} +Requires:      php-composer(doctrine/collections) >= %{collections_min_ver} +Requires:      php-composer(doctrine/collections) <  %{collections_max_ver} +Requires:      php-composer(doctrine/dbal)        >= %{dbal_min_ver} +Requires:      php-composer(doctrine/dbal)        <  %{dbal_max_ver} +Requires:      php-symfony-console                >= %{symfony_min_ver} +Requires:      php-symfony-console                <  %{symfony_max_ver} +Requires:      php-symfony-yaml                   >= %{symfony_min_ver} +Requires:      php-symfony-yaml                   <  %{symfony_max_ver} +# phpcompatinfo (computed from version 2.4.6) +Requires:      php-ctype +Requires:      php-dom +Requires:      php-pcre +Requires:      php-pdo +Requires:      php-reflection +Requires:      php-simplexml +Requires:      php-spl +Requires:      php-tokenizer  # Composer  Provides:  php-composer(%{composer_vendor}/%{composer_project}) = %{version} @@ -100,16 +129,10 @@ Optional caches (see Doctrine\ORM\Tools\Setup::createConfiguration()):  # Patch bin script  %patch0 -p1 -# For PHP 5.5.13+ -%patch1 -p1 -  # Remove empty file  rm -f lib/Doctrine/ORM/README.markdown -# Clenup backup files -find . -name \*.orig -exec rm {} \; - -# Remove unnecessary executable bit +# Remove unnecessary executable bits  chmod a-x lib/Doctrine/ORM/Tools/Pagination/Paginator.php @@ -128,7 +151,29 @@ install -pm 0755 bin/doctrine.php %{buildroot}/%{_bindir}/doctrine  %check -# No upstream tests provided in source +%if %{with_tests} +# Rewrite "tests/Doctrine/Tests/TestInit.php" +mv tests/Doctrine/Tests/TestInit.php tests/Doctrine/Tests/TestInit.php.dist +cat > tests/Doctrine/Tests/TestInit.php <<'TEST_INIT' +<?php + +spl_autoload_register(function ($class) { +    $src = str_replace('\\', '/', $class).'.php'; +    @include_once $src; +}); +TEST_INIT + +# Weird el6 error +# TODO: Investigate and submit upstream patch +%if 0%{?el6} +sed 's#$this->_em->clear();#if (isset($this->_em)) { $this->_em->clear(); }#' \ +    -i tests/Doctrine/Tests/OrmFunctionalTestCase.php +%endif + +%{__phpunit} --include-path ./lib:./tests -d date.timezone="UTC" +%else +: Tests skipped +%endif  %clean @@ -145,6 +190,12 @@ rm -rf %{buildroot}  %changelog +* Tue Oct 14 2014 Shawn Iwinski <shawn.iwinski@gmail.com> - 2.4.6-1 +- Updated to 2.4.6 (BZ #1108129) +- Manual git clone source instead of GitHub archive URL (to include tests) +- Removed Patch1 (%%{name}-upstream.patch) +- Added tests +  * Tue Oct  7 2014 Remi Collet <remi@fedoraproject.org> 2.4.6-1  - Update to 2.4.6 | 
