Тестирование пул-запросов - PullRequest
1 голос
/ 15 октября 2019

Недавно я обнаружил уязвимость в пакете, который мне нравится использовать в моих проектах Laravel. Пакет представляет собой средство просмотра журнала для Laravel: https://github.com/ARCANEDEV/LogViewer.

Я поставил вопрос об уязвимости, и владелец сказал, что могу добавить запрос на извлечение, чтобы попытаться исправить проблему, и я чувствую, что могухотя бы попытайтесь.

Мой вопрос: есть ли способ использовать версию пакета с моим запросом на извлечение в среде тестирования, как если бы я устанавливал ее через Composer?

По существу,Вдали от реальных модульных тестов, есть ли способ запустить пакет в проекте?

Обновляет данные исследований и доступные ответы

После долгих поисков и чтения ответовЯ попытался сделать следующее:

  • Развернуть репо, для которого я хочу сделать запрос на извлечение. Разветвление здесь: https://github.com/blorange2/LogViewer
  • Клонируйте этот разветвленный репо на мою локальную машину и переключитесь на ветку, которая совместима с моей текущей версией Laravel (версия v4.5 для Laravel 5.6)
  • Обновите composer.json в моем локальном проекте, чтобы иметь массив repositories

  "repositories": [
    {
      "type": "path",
      "url": "../forks/LogViewer"
    }
  ],

. В целом все выглядит так:


{
  "name": "laravel/laravel",
  "description": "The Laravel Framework.",
  "keywords": [
    "framework",
    "laravel"
  ],
  "license": "MIT",
  "type": "project",
  "repositories": [
    {
      "type": "path",
      "url": "../forks/LogViewer"
    }
  ],
  "require": {
    "php": "^7.1.3",
    "alexusmai/laravel-purifier": "^0.5.0",
    "arcanedev/log-viewer": "^4.5",
    "artesaos/laravel-linkedin": "^1.3",
    "barryvdh/laravel-dompdf": "^0.8.4",
    "cartalyst/tags": "6.0.*",
    "cornford/googlmapper": "^2.33",
    "doctrine/dbal": "^2.9",
    "fideloper/proxy": "^4.0",
    "guzzlehttp/guzzle": "^6.3",
    "guzzlehttp/psr7": "^1.4",
    "happyr/linkedin-api-client": "^1.0",
    "intervention/image": "^2.5",
    "ixudra/curl": "^6.16",
    "jdavidbakr/mail-tracker": "~2.1",
    "laravel/framework": "5.6.*",
    "laravel/scout": "^5.0",
    "laravel/socialite": "^3.0",
    "laravel/tinker": "^1.0",
    "laravelcollective/html": "^5.6",
    "laravolt/avatar": "^3.0",
    "league/flysystem-sftp": "~1.0",
    "maatwebsite/excel": "^3.1",
    "maddhatter/laravel-fullcalendar": "^1.3",
    "mews/purifier": "^2.1",
    "php-http/curl-client": "^1.7",
    "php-http/message": "^1.6",
    "pusher/pusher-http-laravel": "^4.2",
    "socialiteproviders/microsoft-graph": "^2.0",
    "spatie/calendar-links": "^1.0",
    "spatie/flysystem-dropbox": "^1.2",
    "spatie/laravel-analytics": "^3.6",
    "spatie/laravel-backup": "^5.9",
    "spatie/laravel-medialibrary": "7.6.3",
    "spatie/laravel-permission": "^2.12",
    "teamtnt/laravel-scout-tntsearch-driver": "^3.0",
    "thujohn/twitter": "^2.2",
    "unisharp/laravel-filemanager": "~1.8",
    "vimeo/laravel": "^5.0"
  },
  "require-dev": {
    "barryvdh/laravel-debugbar": "^3.2",
    "filp/whoops": "^2.0",
    "fzaninotto/faker": "^1.4",
    "mockery/mockery": "^1.0",
    "nunomaduro/collision": "^2.0",
    "phpunit/phpunit": "^7.0"
  },
  "autoload": {
    "files": [
      "app/Helpers/Helper.php"
    ],
    "classmap": [
      "database/seeds",
      "database/factories"
    ],
    "psr-4": {
      "App\\": "app/"
    }
  },
  "autoload-dev": {
    "psr-4": {
      "Tests\\": "tests/"
    }
  },
  "extra": {
    "laravel": {
      "dont-discover": []
    }
  },
  "scripts": {
    "post-root-package-install": [
      "@php -r \"file_exists('.env') || copy('.env.example', '.env');\""
    ],
    "post-create-project-cmd": [
      "@php artisan key:generate"
    ],
    "post-autoload-dump": [
      "Illuminate\\Foundation\\ComposerScripts::postAutoloadDump",
      "@php artisan package:discover"
    ]
  },
  "config": {
    "preferred-install": "dist",
    "sort-packages": true,
    "optimize-autoloader": true
  },
  "minimum-stability": "dev",
  "prefer-stable": true
}

Мой основной проектнаходится по следующему пути (от запуска pwd в Windows) C:\xampp\htdocs\projects\newable\newable-intranet

Клонированный, разветвленный проект находится здесь: C:\xampp\htdocs\projects\forks\LogViewer.

Однако при запуске composer update не используетсялокальная версия, она просто использует: "arcanedev/log-viewer": "^4.5",

1 Ответ

2 голосов
/ 15 октября 2019

Если вы хотите использовать в своем проекте пользовательскую версию библиотеки, как в оригинальном пакете, вы можете изменить composer.json.

Вы можете добавить исходные коды пользовательских пакетов (или репозитории) в ваш composer.json для локальной разработки, я предпочитаю path-repository :

{
    "repositories": [
        {
            "type": "path",
            "url": "../LogViewer"
        }
    ],
    "require": {
        "arcanedev/log-viewer": "*",
        ...
    },
    ...
}

Так что, если ваш проект и библиотека LogView находятся в одном каталоге рабочего пространства, рядомсторона, это подпрыгнет до этой рабочей области-каталога и перейдет в папку библиотеки. Там он будет искать composer.json. После этого вы сможете обновить свою пользовательскую библиотеку, например, используя composer require arcanedev/log-viewer:"*" or by manually changing the entry as shown above and then run composer install`.

Заставлять composer загружать пользовательскую версию время от времени может быть непросто, но в целом это должно работать. Если он не «загрузит» вашу версию, т.е. символическую ссылку на локальную папку, попробуйте удалить существующую папку поставщика и снова запустить composer install. Вы также можете добавить выходные данные отладки в composer install -vvv, чтобы посмотреть, найден ли репозиторий и используется ли он.

Менее сложным подходом было бы удалить исходную библиотечную папку из вендора / папки вашего проекта и вместо этого поместить символическую ссылку наВаша пользовательская библиотека вручную. Этого обычно достаточно, когда все, что вы делаете - это небольшое исправление в коде библиотеки, но когда вы меняете зависимости и требования к версии, я предпочитаю первый подход, поскольку он в основном имитирует загрузку пакета через composer, обеспечивая его надлежащее использование в клиентских проектах.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...