Compare commits
42 commits
Author | SHA1 | Date | |
---|---|---|---|
1ae3c33344 | |||
aed3749da8 | |||
b68a68b500 | |||
ade1c79361 | |||
0170ec19c7 | |||
8834a65e4c | |||
b1154359e4 | |||
3838cdc0af | |||
1f9beb85a5 | |||
2670ed4ab8 | |||
4df97eefcb | |||
82f94d1dae | |||
7f6b36d4da | |||
06ec67816a | |||
e647d79e1e | |||
f853851568 | |||
4131531bff | |||
9086a5d9b1 | |||
cce48878e7 | |||
185ae88ba3 | |||
29fb134633 | |||
9951b44932 | |||
692af39768 | |||
73446887f5 | |||
e20937f98f | |||
2ff3286aa9 | |||
174ed544b2 | |||
5579144fee | |||
7613142221 | |||
d9b90390e7 | |||
59a9329032 | |||
be3adf7026 | |||
eb371b75fe | |||
1b80ad37bc | |||
3c83fc9139 | |||
711f87aad8 | |||
0a8d19d37d | |||
fe06ffc176 | |||
0d6f8d2921 | |||
4080b2d09d | |||
73731fa9db | |||
18d296dcd6 |
259 changed files with 3389 additions and 2324 deletions
2
.gitignore
vendored
2
.gitignore
vendored
|
@ -7,10 +7,10 @@
|
|||
/dist/arch/arsse/
|
||||
/dist/arch/src/
|
||||
/dist/arch/pkg/
|
||||
/dist/man/
|
||||
/arsse.db*
|
||||
/config.php
|
||||
/.php_cs.cache
|
||||
/.php-cs-fixer.cache
|
||||
/tests/.phpunit.result.cache
|
||||
|
||||
# Dependencies
|
||||
|
|
|
@ -4,6 +4,7 @@
|
|||
* See LICENSE and AUTHORS files for details */
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace JKingWeb\Arsse;
|
||||
|
||||
const BASE = __DIR__.DIRECTORY_SEPARATOR;
|
||||
|
@ -13,7 +14,10 @@ $paths = [
|
|||
BASE."arsse.php",
|
||||
BASE."RoboFile.php",
|
||||
BASE."lib",
|
||||
BASE."tests",
|
||||
BASE."tests/cases",
|
||||
BASE."tests/lib",
|
||||
BASE."tests/bootstrap.php",
|
||||
BASE."tests/server.php",
|
||||
];
|
||||
$rules = [
|
||||
// house rules where PSR series is silent
|
||||
|
@ -35,6 +39,7 @@ $rules = [
|
|||
'no_blank_lines_after_phpdoc' => true,
|
||||
'no_empty_comment' => true,
|
||||
'no_empty_phpdoc' => true,
|
||||
'no_empty_statement' => true,
|
||||
'no_extra_blank_lines' => true, // this could probably use more configuration
|
||||
'no_mixed_echo_print' => ['use' => "echo"],
|
||||
'no_short_bool_cast' => true,
|
||||
|
@ -48,28 +53,16 @@ $rules = [
|
|||
'pow_to_exponentiation' => true,
|
||||
'set_type_to_cast' => true,
|
||||
'standardize_not_equals' => true,
|
||||
'trailing_comma_in_multiline_array' => true,
|
||||
'trailing_comma_in_multiline' => ['elements' => ["arrays"]],
|
||||
'unary_operator_spaces' => true,
|
||||
'yoda_style' => false,
|
||||
// PSR standard to apply
|
||||
'@PSR2' => true,
|
||||
// PSR-12 rules; php-cs-fixer does not yet support PSR-12 natively
|
||||
'compact_nullable_typehint' => true,
|
||||
'declare_equal_normalize' => ['space' => "none"],
|
||||
'function_typehint_space' => true,
|
||||
'lowercase_cast' => true,
|
||||
'lowercase_static_reference' => true,
|
||||
'no_alternative_syntax' => true,
|
||||
'no_empty_statement' => true,
|
||||
'no_leading_import_slash' => true,
|
||||
'no_leading_namespace_whitespace' => true,
|
||||
'no_whitespace_in_blank_line' => true,
|
||||
'return_type_declaration' => ['space_before' => "none"],
|
||||
'single_trait_insert_per_statement' => true,
|
||||
'short_scalar_cast' => true,
|
||||
'visibility_required' => ['elements' => ["const", "property", "method"]],
|
||||
'@PSR12' => true,
|
||||
// house exceptions to PSR rules
|
||||
'braces' => ['position_after_functions_and_oop_constructs' => "same"],
|
||||
'curly_braces_position' => [
|
||||
'functions_opening_brace' => "same_line",
|
||||
'classes_opening_brace' => "same_line",
|
||||
],
|
||||
'function_declaration' => ['closure_function_spacing' => "none"],
|
||||
'new_with_braces' => false, // no option to specify absence of braces
|
||||
];
|
||||
|
@ -82,4 +75,4 @@ foreach ($paths as $path) {
|
|||
$finder = $finder->in($path);
|
||||
}
|
||||
}
|
||||
return \PhpCsFixer\Config::create()->setRiskyAllowed(true)->setRules($rules)->setFinder($finder);
|
||||
return (new \PhpCsFixer\Config)->setRiskyAllowed(true)->setRules($rules)->setFinder($finder);
|
17
CHANGELOG
17
CHANGELOG
|
@ -1,3 +1,18 @@
|
|||
Version 0.??.? (2024-??-??)
|
||||
===========================
|
||||
|
||||
Bug fixes:
|
||||
- Do not hang when language files are missing or corrupted
|
||||
|
||||
Version 0.10.5 (2024-01-10)
|
||||
===========================
|
||||
|
||||
Changes:
|
||||
- Require PHP 7.3
|
||||
- Adapt the Arch package to make using alternative PHP interpreters easier
|
||||
(see manual for details)
|
||||
- Multiple editorial and stylistic changes to the UNIX manual page
|
||||
|
||||
Version 0.10.4 (2023-01-24)
|
||||
===========================
|
||||
|
||||
|
@ -72,7 +87,7 @@ Bug fixes:
|
|||
- Further relax Fever HTTP correctness, to fix more clients
|
||||
- Use icons specified in Atom feeds when available
|
||||
- Do not return null as subscription unread count
|
||||
- Explicitly forbid U+003A COLON and control characters in usernames, for
|
||||
- Explicitly forbid U+003A COLON and control characters in usernames, for
|
||||
compatibility with RFC 7617
|
||||
- Never return 401 in response to an OPTIONS request
|
||||
- Accept "t" and "f" as booleans in Tiny Tiny RSS
|
||||
|
|
37
README.md
37
README.md
|
@ -34,13 +34,13 @@ Also necessary to the functioning of the application is the `/vendor/` directory
|
|||
|
||||
The `/locale/` and `/sql/` directories contain human-language files and database schemata, both of which are occasionally used by the application in the course of execution. The `/www/` directory serves as a document root for a few static files to be made available to users by a Web server.
|
||||
|
||||
The `/dist/` directory, on the other hand, contains general and system-specific build files, and samples of configuration for Web servers and other system integration. These are not used by The Arsse itself, but are used during the process of preparing new releases for supported operating systems.
|
||||
The `/dist/` directory, on the other hand, contains general and system-specific build files, manual pages, and samples of configuration for Web servers and other system integration. These are not used by The Arsse itself, but are used during the process of preparing new releases for supported operating systems.
|
||||
|
||||
## Documentation
|
||||
|
||||
The source text for The Arsse's manual can be found in `/docs/`, with pages written in [Markdown](https://spec.commonmark.org/current/) and converted to HTML [with Daux](#building-the-manual). If a static manual is generated its files will appear under `/manual/`.
|
||||
|
||||
The Arsse also has a UNIX manual page, also written in Markdown, which can be found under `/manpages/`. [Pandoc](https://pandoc.org/) is needed to convert it to the appropriate format, with the results stored under `/dist/man/`.
|
||||
The Arsse also has a UNIX manual page written in [mdoc](https://man.archlinux.org/man/extra/mandoc/mandoc_mdoc.7.en) format, which can be found under `/dist/man/`.
|
||||
|
||||
In addition to the manuals the files `/README.md` (this file), `/CHANGELOG`, `/UPGRADING`, `/LICENSE`, and `/AUTHORS` also document various things about the software, rather than the software itself.
|
||||
|
||||
|
@ -64,17 +64,17 @@ PHPUnit's configuration can be customized by copying its configuration file to `
|
|||
|
||||
The `/vendor-bin/` directory houses the files needed for the tools used in The Arsse's programming environment. These are managed by the Composer ["bin" plugin](https://github.com/bamarni/composer-bin-plugin) and are not used by The Arsse itself. The following files are also related to various programming tools:
|
||||
|
||||
| Path | Description |
|
||||
|-------------------|----------------------------------------------------------|
|
||||
| `/.gitattributes` | Git settings for handling files |
|
||||
| `/.gitignore` | Git file exclusion patterns |
|
||||
| `/.php_cs.dist` | Configuration for [php-cs-fixer](https://cs.symfony.com) |
|
||||
| `/.php_cs.cache` | Cache for php-cs-fixer |
|
||||
| `/composer.json` | Configuration for Composer |
|
||||
| `/composer.lock` | Version synchronization data for Composer |
|
||||
| `/RoboFile.php` | Task definitions for [Robo](https://robo.li/) |
|
||||
| `/robo` | Simple wrapper for executing Robo on POSIX systems |
|
||||
| `/robo.bat` | Simple wrapper for executing Robo on Windows |
|
||||
| Path | Description |
|
||||
|---------------------------|----------------------------------------------------------|
|
||||
| `/.gitattributes` | Git settings for handling files |
|
||||
| `/.gitignore` | Git file exclusion patterns |
|
||||
| `/.php-cs-fixer.dist.php` | Configuration for [php-cs-fixer](https://cs.symfony.com) |
|
||||
| `/.php-cs-fixer.cache` | Cache for php-cs-fixer |
|
||||
| `/composer.json` | Configuration for Composer |
|
||||
| `/composer.lock` | Version synchronization data for Composer |
|
||||
| `/RoboFile.php` | Task definitions for [Robo](https://robo.li/) |
|
||||
| `/robo` | Simple wrapper for executing Robo on POSIX systems |
|
||||
| `/robo.bat` | Simple wrapper for executing Robo on Windows |
|
||||
|
||||
In addition the files `/package.json` and `/postcss.config.js` as well as the `/node_modules/` directory are used by [Yarn](https://yarnpkg.com/) and [PostCSS](https://postcss.org/) when modifying the stylesheet for The Arsse's manual.
|
||||
|
||||
|
@ -90,11 +90,11 @@ There is also a `test:quick` Robo task which excludes slower tests, and a `test:
|
|||
|
||||
### Test coverage
|
||||
|
||||
Computing the coverage of tests can be done by running `./robo coverage`, after which an HTML-format coverage report will be written to `/tests/coverage/`. Either [PCOV](https://github.com/krakjoe/pcov), [Xdebug](https://xdebug.org), or [phpdbg](https://php.net/manual/en/book.phpdbg.php) is required for this. PCOV is generally recommended as it is faster than Xdebug; phpdbg is faster still, but less accurate. If using either PCOV or Xdebug, the extension need not be enabled globally; PHPUnit will enable it when needed.
|
||||
Computing the coverage of tests can be done by running `./robo coverage`, after which an HTML-format coverage report will be written to `/tests/coverage/`. Either [PCOV](https://github.com/krakjoe/pcov) or [Xdebug](https://xdebug.org) is required for this. PCOV is generally recommended as it is faster than Xdebug. Neither extension need be enabled globally; Robo will enable it when needed.
|
||||
|
||||
## Enforcing coding style
|
||||
|
||||
The [php-cs-fixer](https://cs.symfony.com) tool, executed via `./robo clean`, can be used to rewrite code to adhere to The Arsse's coding style. The style largely follows [PSR-2](https://www.php-fig.org/psr/psr-2/) with some exceptions:
|
||||
The [php-cs-fixer](https://cs.symfony.com) tool, executed via `./robo clean`, can be used to rewrite code to adhere to The Arsse's coding style. The style largely follows [PSR-12](https://www.php-fig.org/psr/psr-12/) with some exceptions:
|
||||
|
||||
- Classes, methods, and functions should have their opening brace on the same line as the signature
|
||||
- Anonymous functions should have no space before the parameter list
|
||||
|
@ -107,20 +107,13 @@ The Arsse's user manual, made using [Daux](https://daux.io/), can be compiled by
|
|||
|
||||
The manual employs a custom theme derived from the standard Daux theme. If the standard Daux theme receives improvements, the custom theme can be rebuilt by running `./robo manual:theme`. This requires that [NodeJS](https://nodejs.org) and [Yarn](https://yarnpkg.com/) be installed, but JavaScript tools are not required to modify The Arsse itself, nor the content of the manual.
|
||||
|
||||
## Building the man page
|
||||
|
||||
The Arsse's UNIX manual page is authored in Markdown, and must be converted to the native roff format using [Pandoc](https://pandoc.org/). This can be done by running `./robo manpage`, which will output appropriate files to `/dist/man/`. The conversion should not be done manually as there is post-processing required for optimal output.
|
||||
|
||||
## Packaging a release
|
||||
|
||||
Producing release packages is done by running `./robo package`. This performs the following operations:
|
||||
|
||||
- Duplicates a [Git](https://git-scm.com/) working tree with the commit (usually a release tag) to package
|
||||
- Generates UNIX manual pages with [Pandoc](https://pandoc.org/)
|
||||
- Generates the HTML manual
|
||||
- Installs runtime Composer dependencies with an optimized autoloader
|
||||
- Deletes numerous unneeded files
|
||||
- Exports the default configuration of The Arsse to a file
|
||||
- Compresses the remaining files into a tarball
|
||||
- Produces a binary package for Arch Linux, if possible
|
||||
- Produces source and binary packages for Debian using [pbuilder](https://pbuilder-team.pages.debian.net/pbuilder/), if possible
|
||||
|
|
129
RoboFile.php
129
RoboFile.php
|
@ -55,8 +55,8 @@ class RoboFile extends \Robo\Tasks {
|
|||
* tests/coverage/. Additional reports may be produced by passing
|
||||
* arguments to this task as one would to PHPUnit.
|
||||
*
|
||||
* Robo first tries to use pcov and will fall back first to xdebug then
|
||||
* phpdbg. Neither pcov nor xdebug need to be enabled to be used; they
|
||||
* Robo first tries to use pcov and will fall back to xdebug.
|
||||
* Neither pcov nor xdebug need to be enabled to be used; they
|
||||
* only need to be present in the extension load path to be used.
|
||||
*/
|
||||
public function coverage(array $args): Result {
|
||||
|
@ -80,9 +80,9 @@ class RoboFile extends \Robo\Tasks {
|
|||
return $this->runTests($exec, "typical", array_merge(["--coverage-html", BASE_TEST."coverage"], $args));
|
||||
}
|
||||
|
||||
/** Runs the coding standards fixer */
|
||||
/** Runs the coding-style fixer */
|
||||
public function clean($opts = ['demo|d' => false]): Result {
|
||||
$t = $this->taskExec(norm(BASE."vendor/bin/php-cs-fixer"));
|
||||
$t = $this->taskExec(norm(BASE."vendor-bin/csfixer/vendor/bin/php-cs-fixer"));
|
||||
$t->arg("fix");
|
||||
if ($opts['demo']) {
|
||||
$t->args("--dry-run", "--diff")->option("--diff-format", "udiff");
|
||||
|
@ -90,9 +90,10 @@ class RoboFile extends \Robo\Tasks {
|
|||
return $t->run();
|
||||
}
|
||||
|
||||
/** Finds the first suitable means of computing code coverage, either pcov or xdebug. */
|
||||
protected function findCoverageEngine(): string {
|
||||
$dir = rtrim(ini_get("extension_dir"), "/").\DIRECTORY_SEPARATOR;
|
||||
$ext = IS_WIN ? "dll" : (IS_MAC ? "dylib" : "so");
|
||||
$ext = IS_WIN ? "dll" : "so";
|
||||
$php = escapeshellarg(\PHP_BINARY);
|
||||
$code = escapeshellarg(BASE."lib");
|
||||
if (extension_loaded("pcov")) {
|
||||
|
@ -104,25 +105,27 @@ class RoboFile extends \Robo\Tasks {
|
|||
} elseif (file_exists($dir."xdebug.$ext")) {
|
||||
return "$php -d zend_extension=xdebug.$ext -d xdebug.mode=coverage";
|
||||
} else {
|
||||
if (IS_WIN) {
|
||||
$dbg = dirname(\PHP_BINARY)."\\phpdbg.exe";
|
||||
$dbg = file_exists($dbg) ? $dbg : "";
|
||||
} else {
|
||||
$dbg = trim(`which phpdbg 2>/dev/null`);
|
||||
}
|
||||
if ($dbg) {
|
||||
return escapeshellarg($dbg)." -qrr";
|
||||
} else {
|
||||
return $php;
|
||||
}
|
||||
return $php;
|
||||
}
|
||||
}
|
||||
|
||||
/** Returns the necessary shell arguments to print error output or all output to the bitbucket
|
||||
*
|
||||
* @param bool $all Whether all output (true) or only error output (false) should be suppressed
|
||||
*/
|
||||
protected function blackhole(bool $all = false): string {
|
||||
$hole = IS_WIN ? "nul" : "/dev/null";
|
||||
return $all ? ">$hole 2>&1" : "2>$hole";
|
||||
}
|
||||
|
||||
/** Executes PHPUnit, used by the test and coverage tasks.
|
||||
*
|
||||
* This also executes the built-in PHP Web server, which is required to fetch some newsfeeds during tests
|
||||
*
|
||||
* @param string $executor The path to the PHP binary to execute with any required extra arguments. Normally this is either "php" or the result of findCoverageEngine()
|
||||
* @param string $set The set of tests to run, either "typical" (excludes redundant tests), "quick" (excludes redundant and slow tests), "coverage" (excludes tests not needed for coverage), or "full" (all tests)
|
||||
* @param array $args Extra arguments passed by Robo from the command line
|
||||
*/
|
||||
protected function runTests(string $executor, string $set, array $args): Result {
|
||||
switch ($set) {
|
||||
case "typical":
|
||||
|
@ -146,6 +149,12 @@ class RoboFile extends \Robo\Tasks {
|
|||
return $this->taskExec($executor)->option("-d", "zend.assertions=1")->arg($execpath)->option("-c", $confpath)->args(array_merge($set, $args))->run();
|
||||
}
|
||||
|
||||
/** Returns a Git version string for a given Git tree-ish ID
|
||||
*
|
||||
* Returns an array containing the tree-ish string and the version string.
|
||||
*
|
||||
* @param string|null $commit The tree-ish ID. If not supplied the user will be prompted
|
||||
*/
|
||||
protected function commitVersion(?string $commit): array {
|
||||
$target = $commit ?? $this->askDefault("Reference commit:", "HEAD");
|
||||
$base = escapeshellarg(BASE);
|
||||
|
@ -158,13 +167,11 @@ class RoboFile extends \Robo\Tasks {
|
|||
return [$target, $version];
|
||||
}
|
||||
|
||||
/** Checks whether all the supplied terminal commands are available in path */
|
||||
protected function toolExists(string ...$binary): bool {
|
||||
$blackhole = $this->blackhole(IS_WIN);
|
||||
foreach ($binary as $bin) {
|
||||
if (
|
||||
(IS_WIN && (!exec(escapeshellarg($bin)." --help $blackhole", $junk, $status) || $status))
|
||||
|| (!IS_WIN && (!exec("which ".escapeshellarg($bin)." $blackhole", $junk, $status) || $status))
|
||||
) {
|
||||
if (!exec(escapeshellarg($bin)." --help $blackhole", $junk, $status) || $status) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
@ -182,8 +189,8 @@ class RoboFile extends \Robo\Tasks {
|
|||
* of new tooling.
|
||||
*/
|
||||
public function packageGeneric(string $commit = null): Result {
|
||||
if (!$this->toolExists("git", "pandoc")) {
|
||||
throw new \Exception("Git and Pandoc are required in PATH to produce generic release tarballs");
|
||||
if (!$this->toolExists("git")) {
|
||||
throw new \Exception("Git is required in PATH to produce generic release tarballs");
|
||||
}
|
||||
// establish which commit to package
|
||||
[$commit, $version] = $this->commitVersion($commit);
|
||||
|
@ -230,17 +237,17 @@ class RoboFile extends \Robo\Tasks {
|
|||
}
|
||||
// save commit description to VERSION file for reference
|
||||
$t->addTask($this->taskWriteToFile($dir."VERSION")->text($version));
|
||||
if (file_exists($dir."docs") || file_exists($dir."manpages")) {
|
||||
if (file_exists($dir."docs") || file_exists($dir."manpages/en.md")) {
|
||||
// perform Composer installation in the temp location with dev dependencies to include Robo and Daux
|
||||
$t->addTask($this->taskExec("composer install")->arg("-q")->dir($dir));
|
||||
}
|
||||
if (file_exists($dir."manpages")) {
|
||||
// generate manpages
|
||||
$t->addTask($this->taskExec("./robo manpage")->dir($dir));
|
||||
}
|
||||
if (file_exists($dir."docs")) {
|
||||
// generate the HTML manual
|
||||
$t->addTask($this->taskExec("./robo manual -q")->dir($dir));
|
||||
if (file_exists($dir."docs")) {
|
||||
// generate the HTML manual
|
||||
$t->addTask($this->taskExec("./robo manual -q")->dir($dir));
|
||||
}
|
||||
if (file_exists($dir."manpages/en.md")) {
|
||||
// generate manpages (NOTE: obsolete process)
|
||||
$t->addTask($this->taskExec("./robo manpage")->dir($dir));
|
||||
}
|
||||
}
|
||||
// perform Composer installation in the temp location for final output
|
||||
$t->addTask($this->taskExec("composer install")->dir($dir)->arg("--no-dev")->arg("-o")->arg("--no-scripts")->arg("-q"));
|
||||
|
@ -400,12 +407,12 @@ class RoboFile extends \Robo\Tasks {
|
|||
return $t->run();
|
||||
}
|
||||
|
||||
/** Generates static manual pages in the "manual" directory
|
||||
/** Generates static HTML manual pages in the "manual" directory
|
||||
*
|
||||
* The resultant files are suitable for offline viewing and inclusion into release builds
|
||||
*/
|
||||
public function manual(array $args): Result {
|
||||
$execpath = escapeshellarg(norm(BASE."vendor/bin/daux"));
|
||||
$execpath = escapeshellarg(norm(BASE."vendor-bin/daux/vendor/bin/daux"));
|
||||
$t = $this->collectionBuilder();
|
||||
$t->taskExec($execpath)->arg("generate")->option("-d", BASE."manual")->args($args);
|
||||
$t->taskDeleteDir(BASE."manual/daux_libraries");
|
||||
|
@ -416,7 +423,7 @@ class RoboFile extends \Robo\Tasks {
|
|||
|
||||
/** Serves a live view of the manual using the built-in Web server */
|
||||
public function manualLive(array $args): Result {
|
||||
$execpath = escapeshellarg(norm(BASE."vendor/bin/daux"));
|
||||
$execpath = escapeshellarg(norm(BASE."vendor-bin/daux/vendor/bin/daux"));
|
||||
return $this->taskExec($execpath)->arg("serve")->args($args)->run();
|
||||
}
|
||||
|
||||
|
@ -447,29 +454,15 @@ class RoboFile extends \Robo\Tasks {
|
|||
return $t->run();
|
||||
}
|
||||
|
||||
/** Generates the "arsse" command's manual page (UNIX man page)
|
||||
/** Parses the contents of the CHANGELOG file into an array structure
|
||||
*
|
||||
* This requires that the Pandoc document converter be installed and
|
||||
* available in $PATH.
|
||||
* This is done line-by-line and tends to be quite strict.
|
||||
* The parsed output can be used to generate changelogs in other formats,
|
||||
* such as a Debian changelog or RPM changelog.
|
||||
*
|
||||
* @param string $text The text of the CHANGELOG file
|
||||
* @param string $targetVersion The x.y.z version number of the latest release. This is used to check that version numbers and dates have been updated when preparing a release
|
||||
*/
|
||||
public function manpage(): Result {
|
||||
if (!$this->toolExists("pandoc")) {
|
||||
throw new \Exception("Pandoc is required in PATH to generate manual pages");
|
||||
}
|
||||
$t = $this->collectionBuilder();
|
||||
$man = [
|
||||
'en' => "man1/arsse.1",
|
||||
];
|
||||
foreach ($man as $src => $out) {
|
||||
$src = BASE."manpages/$src.md";
|
||||
$out = BASE."dist/man/$out";
|
||||
$t->addTask($this->taskFilesystemStack()->mkdir(dirname($out), 0755));
|
||||
$t->addTask($this->taskExec("pandoc -s -f markdown-smart -t man -o ".escapeshellarg($out)." ".escapeshellarg($src)));
|
||||
$t->addTask($this->taskReplaceInFile($out)->regex('/\.\n(?!\.)/s')->to(". "));
|
||||
}
|
||||
return $t->run();
|
||||
}
|
||||
|
||||
protected function changelogParse(string $text, string $targetVersion): array {
|
||||
$lines = preg_split('/\r?\n/', $text);
|
||||
$version = "";
|
||||
|
@ -479,7 +472,7 @@ class RoboFile extends \Robo\Tasks {
|
|||
$expected = ["version"];
|
||||
for ($a = 0; $a < sizeof($lines);) {
|
||||
$l = rtrim($lines[$a++]);
|
||||
if (in_array("version", $expected) && preg_match('/^Version (\d+(?:\.\d+)*) \(([\d\?]{4}-[\d\?]{2}-[\d\?]{2})\)\s*$/D', $l, $m)) {
|
||||
if (in_array("version", $expected) && preg_match('/^Version ([\d\?]+(?:\.[\d\?]+)*) \(([\d\?]{4}-[\d\?]{2}-[\d\?]{2})\)\s*$/D', $l, $m)) {
|
||||
$version = $m[1];
|
||||
if (!preg_match('/^\d{4}-\d{2}-\d{2}$/D', $m[2])) {
|
||||
// uncertain dates are allowed only for the top version, and only if it does not match the target version (otherwise we have forgotten to set the correct date before tagging)
|
||||
|
@ -524,7 +517,7 @@ class RoboFile extends \Robo\Tasks {
|
|||
} elseif (in_array("item", $expected) && preg_match('/^- (\w.*)$/D', $l, $m)) {
|
||||
$entry[$section][] = $m[1];
|
||||
$expected = ["item", "continuation", "blank line"];
|
||||
} elseif (in_array("continuation", $expected) && preg_match('/^ (\w.*)$/D', $l, $m)) {
|
||||
} elseif (in_array("continuation", $expected) && preg_match('/^ (\S.*)$/D', $l, $m)) {
|
||||
$last = sizeof($entry[$section]) - 1;
|
||||
$entry[$section][$last] .= "\n".$m[1];
|
||||
} else {
|
||||
|
@ -546,7 +539,18 @@ class RoboFile extends \Robo\Tasks {
|
|||
return $out;
|
||||
}
|
||||
|
||||
/** Produce a Debian changelog from a parsed CHANGELOG file
|
||||
*
|
||||
* The Debian changelog format is extremely specific with certain tokens
|
||||
* having special meaning and leading whitespace also being significant.
|
||||
* Modifying this function should be done with extreme care.
|
||||
*
|
||||
* @param array $log The parsed chaneglog, output by changelogParse()
|
||||
* @param string $targetVersion The second output of commitVersion()
|
||||
*/
|
||||
protected function changelogDebian(array $log, string $targetVersion): string {
|
||||
$authorName = "J. King";
|
||||
$authorMail = "jking@jkingweb.ca";
|
||||
$latest = $log[0]['version'];
|
||||
$baseVersion = preg_replace('/^(\d+(?:\.\d+)*).*/', "$1", $targetVersion);
|
||||
if ($baseVersion !== $targetVersion && version_compare($latest, $baseVersion, ">")) {
|
||||
|
@ -582,11 +586,20 @@ class RoboFile extends \Robo\Tasks {
|
|||
$out .= " * ".trim(preg_replace("/^/m", " ", $item))."\n";
|
||||
}
|
||||
}
|
||||
$out .= "\n -- J. King <jking@jkingweb.ca> ".\DateTimeImmutable::createFromFormat("Y-m-d", $entry['date'], new \DateTimeZone("UTC"))->format("D, d M Y")." 00:00:00 +0000\n\n";
|
||||
$out .= "\n -- $authorName <$authorMail> ".\DateTimeImmutable::createFromFormat("Y-m-d", $entry['date'], new \DateTimeZone("UTC"))->format("D, d M Y")." 00:00:00 +0000\n\n";
|
||||
}
|
||||
return $out;
|
||||
}
|
||||
|
||||
/** Produces a Debian "source control" file from various bits of data
|
||||
*
|
||||
* As with a Debian changelog, the output is of a very exacting format,
|
||||
* and this function should be modified with care.
|
||||
*
|
||||
* @param string $dir The path to Debian-specific files, with trailing slash
|
||||
* @param string $version The Debian version string, in the format x.y.z-a
|
||||
* @param array $tarballs An array of paths to the "orig" and "debian" tarball files
|
||||
*/
|
||||
protected function generateDebianSourceControl(string $dir, string $version, array $tarballs): string {
|
||||
// read in control file
|
||||
if (!$control = @file_get_contents($dir."control")) {
|
||||
|
|
|
@ -11,6 +11,15 @@ usually prudent:
|
|||
`composer install -o --no-dev`
|
||||
|
||||
|
||||
Upgrading from 0.10.4 to 0.10.5
|
||||
=============================
|
||||
|
||||
- PHP 7.3 is now required
|
||||
- Web server configuration in the Arch Linux package has been modified to ease
|
||||
the use of alternative PHP interpreters; please review the sample
|
||||
configuration files for changes
|
||||
|
||||
|
||||
Upgrading from 0.10.2 to 0.10.3
|
||||
=============================
|
||||
|
||||
|
|
|
@ -4,6 +4,7 @@
|
|||
* See LICENSE and AUTHORS files for details */
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace JKingWeb\Arsse;
|
||||
|
||||
const BASE = __DIR__.DIRECTORY_SEPARATOR;
|
||||
|
@ -13,7 +14,7 @@ require_once BASE."vendor".DIRECTORY_SEPARATOR."autoload.php";
|
|||
ignore_user_abort(true);
|
||||
ini_set("memory_limit", "-1");
|
||||
ini_set("max_execution_time", "0");
|
||||
// FIXME: This is required because various dependencies have yet to adjust to PHP 8.1
|
||||
// NOTE: While running in the wild we don't want to spew deprecation warnings if users are ahead of us in PHP versions
|
||||
error_reporting(\E_ALL & ~\E_DEPRECATED);
|
||||
|
||||
if (\PHP_SAPI === "cli") {
|
||||
|
|
|
@ -18,36 +18,38 @@
|
|||
|
||||
],
|
||||
"require": {
|
||||
"php": "^7.1 || ^8.0",
|
||||
"php": ">=7.3",
|
||||
"ext-intl": "*",
|
||||
"ext-json": "*",
|
||||
"ext-hash": "*",
|
||||
"ext-filter": "*",
|
||||
"ext-dom": "*",
|
||||
"nicolus/picofeed": "dev-bugfix",
|
||||
"nicolus/picofeed": "dev-patch-3",
|
||||
"hosteurope/password-generator": "1.*",
|
||||
"docopt/docopt": "1.*",
|
||||
"jkingweb/druuid": "3.*",
|
||||
"guzzlehttp/psr7": "1.*",
|
||||
"laminas/laminas-httphandlerrunner": "1.*"
|
||||
"guzzlehttp/psr7": "2.*",
|
||||
"laminas/laminas-httphandlerrunner": "2.*"
|
||||
},
|
||||
"require-dev": {
|
||||
"bamarni/composer-bin-plugin": "*"
|
||||
},
|
||||
"suggest": {
|
||||
"ext-pcntl": "To respond to signals, particular to reload configuration via SIGHUP"
|
||||
"ext-pcntl": "To respond to signals, particularly to reload configuration via SIGHUP"
|
||||
},
|
||||
"config": {
|
||||
"platform": {
|
||||
"php": "7.1.33"
|
||||
"php": "7.3.33"
|
||||
},
|
||||
"allow-plugins": {
|
||||
"bamarni/composer-bin-plugin": true
|
||||
}
|
||||
},
|
||||
"scripts": {
|
||||
"post-install-cmd": ["@composer bin all install"],
|
||||
"post-update-cmd": ["@composer bin all update"]
|
||||
"extra": {
|
||||
"bamarni-bin": {
|
||||
"bin-links": false,
|
||||
"forward-command": true
|
||||
}
|
||||
},
|
||||
"autoload": {
|
||||
"psr-4": {
|
||||
|
@ -63,7 +65,7 @@
|
|||
"repositories": [
|
||||
{
|
||||
"type": "vcs",
|
||||
"url": "https://github.com/rhukster/picoFeed"
|
||||
"url": "https://github.com/JKingweb/picoFeed-1/"
|
||||
}
|
||||
]
|
||||
}
|
||||
|
|
630
composer.lock
generated
630
composer.lock
generated
|
@ -4,28 +4,25 @@
|
|||
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
|
||||
"This file is @generated automatically"
|
||||
],
|
||||
"content-hash": "21a116823c3335992910966f31861811",
|
||||
"content-hash": "8d22dd66c6cde0b1ed4ca0009293bf88",
|
||||
"packages": [
|
||||
{
|
||||
"name": "docopt/docopt",
|
||||
"version": "1.0.4",
|
||||
"version": "1.0.5",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/docopt/docopt.php.git",
|
||||
"reference": "bf3683a16e09fa1665e493eb4d5a29469e132a4f"
|
||||
"reference": "0e3db660cf2f2eb07a83253790b7d97cdb398826"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/docopt/docopt.php/zipball/bf3683a16e09fa1665e493eb4d5a29469e132a4f",
|
||||
"reference": "bf3683a16e09fa1665e493eb4d5a29469e132a4f",
|
||||
"url": "https://api.github.com/repos/docopt/docopt.php/zipball/0e3db660cf2f2eb07a83253790b7d97cdb398826",
|
||||
"reference": "0e3db660cf2f2eb07a83253790b7d97cdb398826",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
"php": ">=5.3.0"
|
||||
},
|
||||
"require-dev": {
|
||||
"phpunit/phpunit": "4.1.*"
|
||||
},
|
||||
"type": "library",
|
||||
"autoload": {
|
||||
"classmap": [
|
||||
|
@ -52,43 +49,53 @@
|
|||
],
|
||||
"support": {
|
||||
"issues": "https://github.com/docopt/docopt.php/issues",
|
||||
"source": "https://github.com/docopt/docopt.php/tree/1.0.4"
|
||||
"source": "https://github.com/docopt/docopt.php/tree/1.0.5"
|
||||
},
|
||||
"time": "2019-12-03T02:48:46+00:00"
|
||||
"time": "2023-03-22T12:31:48+00:00"
|
||||
},
|
||||
{
|
||||
"name": "guzzlehttp/guzzle",
|
||||
"version": "6.5.8",
|
||||
"version": "7.8.1",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/guzzle/guzzle.git",
|
||||
"reference": "a52f0440530b54fa079ce76e8c5d196a42cad981"
|
||||
"reference": "41042bc7ab002487b876a0683fc8dce04ddce104"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/guzzle/guzzle/zipball/a52f0440530b54fa079ce76e8c5d196a42cad981",
|
||||
"reference": "a52f0440530b54fa079ce76e8c5d196a42cad981",
|
||||
"url": "https://api.github.com/repos/guzzle/guzzle/zipball/41042bc7ab002487b876a0683fc8dce04ddce104",
|
||||
"reference": "41042bc7ab002487b876a0683fc8dce04ddce104",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
"ext-json": "*",
|
||||
"guzzlehttp/promises": "^1.0",
|
||||
"guzzlehttp/psr7": "^1.9",
|
||||
"php": ">=5.5",
|
||||
"symfony/polyfill-intl-idn": "^1.17"
|
||||
"guzzlehttp/promises": "^1.5.3 || ^2.0.1",
|
||||
"guzzlehttp/psr7": "^1.9.1 || ^2.5.1",
|
||||
"php": "^7.2.5 || ^8.0",
|
||||
"psr/http-client": "^1.0",
|
||||
"symfony/deprecation-contracts": "^2.2 || ^3.0"
|
||||
},
|
||||
"provide": {
|
||||
"psr/http-client-implementation": "1.0"
|
||||
},
|
||||
"require-dev": {
|
||||
"bamarni/composer-bin-plugin": "^1.8.2",
|
||||
"ext-curl": "*",
|
||||
"phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.4 || ^7.0",
|
||||
"psr/log": "^1.1"
|
||||
"php-http/client-integration-tests": "dev-master#2c025848417c1135031fdf9c728ee53d0a7ceaee as 3.0.999",
|
||||
"php-http/message-factory": "^1.1",
|
||||
"phpunit/phpunit": "^8.5.36 || ^9.6.15",
|
||||
"psr/log": "^1.1 || ^2.0 || ^3.0"
|
||||
},
|
||||
"suggest": {
|
||||
"ext-curl": "Required for CURL handler support",
|
||||
"ext-intl": "Required for Internationalized Domain Name (IDN) support",
|
||||
"psr/log": "Required for using the Log middleware"
|
||||
},
|
||||
"type": "library",
|
||||
"extra": {
|
||||
"branch-alias": {
|
||||
"dev-master": "6.5-dev"
|
||||
"bamarni-bin": {
|
||||
"bin-links": true,
|
||||
"forward-command": false
|
||||
}
|
||||
},
|
||||
"autoload": {
|
||||
|
@ -141,19 +148,20 @@
|
|||
}
|
||||
],
|
||||
"description": "Guzzle is a PHP HTTP client library",
|
||||
"homepage": "http://guzzlephp.org/",
|
||||
"keywords": [
|
||||
"client",
|
||||
"curl",
|
||||
"framework",
|
||||
"http",
|
||||
"http client",
|
||||
"psr-18",
|
||||
"psr-7",
|
||||
"rest",
|
||||
"web service"
|
||||
],
|
||||
"support": {
|
||||
"issues": "https://github.com/guzzle/guzzle/issues",
|
||||
"source": "https://github.com/guzzle/guzzle/tree/6.5.8"
|
||||
"source": "https://github.com/guzzle/guzzle/tree/7.8.1"
|
||||
},
|
||||
"funding": [
|
||||
{
|
||||
|
@ -169,38 +177,37 @@
|
|||
"type": "tidelift"
|
||||
}
|
||||
],
|
||||
"time": "2022-06-20T22:16:07+00:00"
|
||||
"time": "2023-12-03T20:35:24+00:00"
|
||||
},
|
||||
{
|
||||
"name": "guzzlehttp/promises",
|
||||
"version": "1.5.2",
|
||||
"version": "2.0.2",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/guzzle/promises.git",
|
||||
"reference": "b94b2807d85443f9719887892882d0329d1e2598"
|
||||
"reference": "bbff78d96034045e58e13dedd6ad91b5d1253223"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/guzzle/promises/zipball/b94b2807d85443f9719887892882d0329d1e2598",
|
||||
"reference": "b94b2807d85443f9719887892882d0329d1e2598",
|
||||
"url": "https://api.github.com/repos/guzzle/promises/zipball/bbff78d96034045e58e13dedd6ad91b5d1253223",
|
||||
"reference": "bbff78d96034045e58e13dedd6ad91b5d1253223",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
"php": ">=5.5"
|
||||
"php": "^7.2.5 || ^8.0"
|
||||
},
|
||||
"require-dev": {
|
||||
"symfony/phpunit-bridge": "^4.4 || ^5.1"
|
||||
"bamarni/composer-bin-plugin": "^1.8.2",
|
||||
"phpunit/phpunit": "^8.5.36 || ^9.6.15"
|
||||
},
|
||||
"type": "library",
|
||||
"extra": {
|
||||
"branch-alias": {
|
||||
"dev-master": "1.5-dev"
|
||||
"bamarni-bin": {
|
||||
"bin-links": true,
|
||||
"forward-command": false
|
||||
}
|
||||
},
|
||||
"autoload": {
|
||||
"files": [
|
||||
"src/functions_include.php"
|
||||
],
|
||||
"psr-4": {
|
||||
"GuzzleHttp\\Promise\\": "src/"
|
||||
}
|
||||
|
@ -237,7 +244,7 @@
|
|||
],
|
||||
"support": {
|
||||
"issues": "https://github.com/guzzle/promises/issues",
|
||||
"source": "https://github.com/guzzle/promises/tree/1.5.2"
|
||||
"source": "https://github.com/guzzle/promises/tree/2.0.2"
|
||||
},
|
||||
"funding": [
|
||||
{
|
||||
|
@ -253,47 +260,48 @@
|
|||
"type": "tidelift"
|
||||
}
|
||||
],
|
||||
"time": "2022-08-28T14:55:35+00:00"
|
||||
"time": "2023-12-03T20:19:20+00:00"
|
||||
},
|
||||
{
|
||||
"name": "guzzlehttp/psr7",
|
||||
"version": "1.9.0",
|
||||
"version": "2.6.2",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/guzzle/psr7.git",
|
||||
"reference": "e98e3e6d4f86621a9b75f623996e6bbdeb4b9318"
|
||||
"reference": "45b30f99ac27b5ca93cb4831afe16285f57b8221"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/guzzle/psr7/zipball/e98e3e6d4f86621a9b75f623996e6bbdeb4b9318",
|
||||
"reference": "e98e3e6d4f86621a9b75f623996e6bbdeb4b9318",
|
||||
"url": "https://api.github.com/repos/guzzle/psr7/zipball/45b30f99ac27b5ca93cb4831afe16285f57b8221",
|
||||
"reference": "45b30f99ac27b5ca93cb4831afe16285f57b8221",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
"php": ">=5.4.0",
|
||||
"psr/http-message": "~1.0",
|
||||
"ralouphie/getallheaders": "^2.0.5 || ^3.0.0"
|
||||
"php": "^7.2.5 || ^8.0",
|
||||
"psr/http-factory": "^1.0",
|
||||
"psr/http-message": "^1.1 || ^2.0",
|
||||
"ralouphie/getallheaders": "^3.0"
|
||||
},
|
||||
"provide": {
|
||||
"psr/http-factory-implementation": "1.0",
|
||||
"psr/http-message-implementation": "1.0"
|
||||
},
|
||||
"require-dev": {
|
||||
"ext-zlib": "*",
|
||||
"phpunit/phpunit": "~4.8.36 || ^5.7.27 || ^6.5.14 || ^7.5.20 || ^8.5.8 || ^9.3.10"
|
||||
"bamarni/composer-bin-plugin": "^1.8.2",
|
||||
"http-interop/http-factory-tests": "^0.9",
|
||||
"phpunit/phpunit": "^8.5.36 || ^9.6.15"
|
||||
},
|
||||
"suggest": {
|
||||
"laminas/laminas-httphandlerrunner": "Emit PSR-7 responses"
|
||||
},
|
||||
"type": "library",
|
||||
"extra": {
|
||||
"branch-alias": {
|
||||
"dev-master": "1.9-dev"
|
||||
"bamarni-bin": {
|
||||
"bin-links": true,
|
||||
"forward-command": false
|
||||
}
|
||||
},
|
||||
"autoload": {
|
||||
"files": [
|
||||
"src/functions_include.php"
|
||||
],
|
||||
"psr-4": {
|
||||
"GuzzleHttp\\Psr7\\": "src/"
|
||||
}
|
||||
|
@ -332,6 +340,11 @@
|
|||
"name": "Tobias Schultze",
|
||||
"email": "webmaster@tubo-world.de",
|
||||
"homepage": "https://github.com/Tobion"
|
||||
},
|
||||
{
|
||||
"name": "Márk Sági-Kazár",
|
||||
"email": "mark.sagikazar@gmail.com",
|
||||
"homepage": "https://sagikazarmark.hu"
|
||||
}
|
||||
],
|
||||
"description": "PSR-7 message implementation that also provides common utility methods",
|
||||
|
@ -347,7 +360,7 @@
|
|||
],
|
||||
"support": {
|
||||
"issues": "https://github.com/guzzle/psr7/issues",
|
||||
"source": "https://github.com/guzzle/psr7/tree/1.9.0"
|
||||
"source": "https://github.com/guzzle/psr7/tree/2.6.2"
|
||||
},
|
||||
"funding": [
|
||||
{
|
||||
|
@ -363,7 +376,7 @@
|
|||
"type": "tidelift"
|
||||
}
|
||||
],
|
||||
"time": "2022-06-20T21:43:03+00:00"
|
||||
"time": "2023-12-03T20:05:35+00:00"
|
||||
},
|
||||
{
|
||||
"name": "hosteurope/password-generator",
|
||||
|
@ -539,39 +552,33 @@
|
|||
},
|
||||
{
|
||||
"name": "laminas/laminas-httphandlerrunner",
|
||||
"version": "1.2.0",
|
||||
"version": "2.1.0",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/laminas/laminas-httphandlerrunner.git",
|
||||
"reference": "e1a5dad040e0043135e8095ee27d1fbf6fb640e1"
|
||||
"reference": "4d337cde83e6b901a4443b0ab5c3b97cbaa46413"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/laminas/laminas-httphandlerrunner/zipball/e1a5dad040e0043135e8095ee27d1fbf6fb640e1",
|
||||
"reference": "e1a5dad040e0043135e8095ee27d1fbf6fb640e1",
|
||||
"url": "https://api.github.com/repos/laminas/laminas-httphandlerrunner/zipball/4d337cde83e6b901a4443b0ab5c3b97cbaa46413",
|
||||
"reference": "4d337cde83e6b901a4443b0ab5c3b97cbaa46413",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
"laminas/laminas-zendframework-bridge": "^1.0",
|
||||
"php": "^7.1",
|
||||
"php": "^7.3 || ~8.0.0 || ~8.1.0",
|
||||
"psr/http-message": "^1.0",
|
||||
"psr/http-message-implementation": "^1.0",
|
||||
"psr/http-server-handler": "^1.0"
|
||||
},
|
||||
"replace": {
|
||||
"zendframework/zend-httphandlerrunner": "^1.1.0"
|
||||
},
|
||||
"require-dev": {
|
||||
"laminas/laminas-coding-standard": "~1.0.0",
|
||||
"laminas/laminas-diactoros": "^1.7 || ^2.1.1",
|
||||
"phpunit/phpunit": "^7.0.2"
|
||||
"laminas/laminas-coding-standard": "~2.3.0",
|
||||
"laminas/laminas-diactoros": "^2.8.0",
|
||||
"phpunit/phpunit": "^9.5.9",
|
||||
"psalm/plugin-phpunit": "^0.16.1",
|
||||
"vimeo/psalm": "^4.10.0"
|
||||
},
|
||||
"type": "library",
|
||||
"extra": {
|
||||
"branch-alias": {
|
||||
"dev-master": "1.2.x-dev",
|
||||
"dev-develop": "1.3.x-dev"
|
||||
},
|
||||
"laminas": {
|
||||
"config-provider": "Laminas\\HttpHandlerRunner\\ConfigProvider"
|
||||
}
|
||||
|
@ -608,40 +615,37 @@
|
|||
"type": "community_bridge"
|
||||
}
|
||||
],
|
||||
"time": "2020-06-03T15:52:17+00:00"
|
||||
"time": "2021-09-22T09:27:36+00:00"
|
||||
},
|
||||
{
|
||||
"name": "laminas/laminas-xml",
|
||||
"version": "1.2.0",
|
||||
"version": "1.4.0",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/laminas/laminas-xml.git",
|
||||
"reference": "879cc66d1bba6a37705e98074f52a6960c220020"
|
||||
"reference": "dcadeefdb6d7ed6b39d772b47e3845003d6ea60f"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/laminas/laminas-xml/zipball/879cc66d1bba6a37705e98074f52a6960c220020",
|
||||
"reference": "879cc66d1bba6a37705e98074f52a6960c220020",
|
||||
"url": "https://api.github.com/repos/laminas/laminas-xml/zipball/dcadeefdb6d7ed6b39d772b47e3845003d6ea60f",
|
||||
"reference": "dcadeefdb6d7ed6b39d772b47e3845003d6ea60f",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
"laminas/laminas-zendframework-bridge": "^1.0",
|
||||
"php": "^5.6 || ^7.0"
|
||||
"ext-dom": "*",
|
||||
"ext-simplexml": "*",
|
||||
"php": "^7.3 || ~8.0.0 || ~8.1.0"
|
||||
},
|
||||
"replace": {
|
||||
"zendframework/zendxml": "self.version"
|
||||
"conflict": {
|
||||
"zendframework/zendxml": "*"
|
||||
},
|
||||
"require-dev": {
|
||||
"ext-iconv": "*",
|
||||
"laminas/laminas-coding-standard": "~1.0.0",
|
||||
"phpunit/phpunit": "^5.7.27 || ^6.5.8 || ^7.1.4"
|
||||
"phpunit/phpunit": "^9.5.8",
|
||||
"squizlabs/php_codesniffer": "3.6.1 as 2.9999999.9999999"
|
||||
},
|
||||
"type": "library",
|
||||
"extra": {
|
||||
"branch-alias": {
|
||||
"dev-master": "1.2.x-dev",
|
||||
"dev-develop": "1.3.x-dev"
|
||||
}
|
||||
},
|
||||
"autoload": {
|
||||
"psr-4": {
|
||||
"Laminas\\Xml\\": "src/"
|
||||
|
@ -660,86 +664,31 @@
|
|||
],
|
||||
"support": {
|
||||
"chat": "https://laminas.dev/chat",
|
||||
"docs": "https://docs.laminas.dev/laminas-xml/",
|
||||
"forum": "https://discourse.laminas.dev",
|
||||
"issues": "https://github.com/laminas/laminas-xml/issues",
|
||||
"rss": "https://github.com/laminas/laminas-xml/releases.atom",
|
||||
"source": "https://github.com/laminas/laminas-xml"
|
||||
},
|
||||
"time": "2019-12-31T18:05:42+00:00"
|
||||
},
|
||||
{
|
||||
"name": "laminas/laminas-zendframework-bridge",
|
||||
"version": "1.1.1",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/laminas/laminas-zendframework-bridge.git",
|
||||
"reference": "6ede70583e101030bcace4dcddd648f760ddf642"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/laminas/laminas-zendframework-bridge/zipball/6ede70583e101030bcace4dcddd648f760ddf642",
|
||||
"reference": "6ede70583e101030bcace4dcddd648f760ddf642",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
"php": "^5.6 || ^7.0 || ^8.0"
|
||||
},
|
||||
"require-dev": {
|
||||
"phpunit/phpunit": "^5.7 || ^6.5 || ^7.5 || ^8.1 || ^9.3",
|
||||
"squizlabs/php_codesniffer": "^3.5"
|
||||
},
|
||||
"type": "library",
|
||||
"extra": {
|
||||
"laminas": {
|
||||
"module": "Laminas\\ZendFrameworkBridge"
|
||||
}
|
||||
},
|
||||
"autoload": {
|
||||
"files": [
|
||||
"src/autoload.php"
|
||||
],
|
||||
"psr-4": {
|
||||
"Laminas\\ZendFrameworkBridge\\": "src//"
|
||||
}
|
||||
},
|
||||
"notification-url": "https://packagist.org/downloads/",
|
||||
"license": [
|
||||
"BSD-3-Clause"
|
||||
],
|
||||
"description": "Alias legacy ZF class names to Laminas Project equivalents.",
|
||||
"keywords": [
|
||||
"ZendFramework",
|
||||
"autoloading",
|
||||
"laminas",
|
||||
"zf"
|
||||
],
|
||||
"support": {
|
||||
"forum": "https://discourse.laminas.dev/",
|
||||
"issues": "https://github.com/laminas/laminas-zendframework-bridge/issues",
|
||||
"rss": "https://github.com/laminas/laminas-zendframework-bridge/releases.atom",
|
||||
"source": "https://github.com/laminas/laminas-zendframework-bridge"
|
||||
},
|
||||
"funding": [
|
||||
{
|
||||
"url": "https://funding.communitybridge.org/projects/laminas-project",
|
||||
"type": "community_bridge"
|
||||
}
|
||||
],
|
||||
"time": "2020-09-14T14:23:00+00:00"
|
||||
"time": "2021-11-30T02:16:35+00:00"
|
||||
},
|
||||
{
|
||||
"name": "nicolus/picofeed",
|
||||
"version": "dev-bugfix",
|
||||
"version": "dev-patch-3",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/rhukster/picoFeed.git",
|
||||
"reference": "b8e5e34ce7d0b97f1910b8c574aa72ff768a4078"
|
||||
"url": "https://github.com/JKingweb/picoFeed-1.git",
|
||||
"reference": "536911c180651fea79d6e1894a826fff6ab87a52"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/rhukster/picoFeed/zipball/b8e5e34ce7d0b97f1910b8c574aa72ff768a4078",
|
||||
"reference": "b8e5e34ce7d0b97f1910b8c574aa72ff768a4078",
|
||||
"url": "https://api.github.com/repos/JKingweb/picoFeed-1/zipball/536911c180651fea79d6e1894a826fff6ab87a52",
|
||||
"reference": "536911c180651fea79d6e1894a826fff6ab87a52",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
|
@ -788,26 +737,27 @@
|
|||
"description": "RSS/Atom parsing library",
|
||||
"homepage": "https://github.com/nicolus/picoFeed",
|
||||
"support": {
|
||||
"source": "https://github.com/rhukster/picoFeed/tree/bugfix"
|
||||
"source": "https://github.com/JKingweb/picoFeed-1/tree/patch-3"
|
||||
},
|
||||
"time": "2022-09-23T17:42:18+00:00"
|
||||
"time": "2023-03-23T01:54:27+00:00"
|
||||
},
|
||||
{
|
||||
"name": "psr/http-message",
|
||||
"version": "1.0.1",
|
||||
"name": "psr/http-client",
|
||||
"version": "1.0.3",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/php-fig/http-message.git",
|
||||
"reference": "f6561bf28d520154e4b0ec72be95418abe6d9363"
|
||||
"url": "https://github.com/php-fig/http-client.git",
|
||||
"reference": "bb5906edc1c324c9a05aa0873d40117941e5fa90"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/php-fig/http-message/zipball/f6561bf28d520154e4b0ec72be95418abe6d9363",
|
||||
"reference": "f6561bf28d520154e4b0ec72be95418abe6d9363",
|
||||
"url": "https://api.github.com/repos/php-fig/http-client/zipball/bb5906edc1c324c9a05aa0873d40117941e5fa90",
|
||||
"reference": "bb5906edc1c324c9a05aa0873d40117941e5fa90",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
"php": ">=5.3.0"
|
||||
"php": "^7.0 || ^8.0",
|
||||
"psr/http-message": "^1.0 || ^2.0"
|
||||
},
|
||||
"type": "library",
|
||||
"extra": {
|
||||
|
@ -815,6 +765,112 @@
|
|||
"dev-master": "1.0.x-dev"
|
||||
}
|
||||
},
|
||||
"autoload": {
|
||||
"psr-4": {
|
||||
"Psr\\Http\\Client\\": "src/"
|
||||
}
|
||||
},
|
||||
"notification-url": "https://packagist.org/downloads/",
|
||||
"license": [
|
||||
"MIT"
|
||||
],
|
||||
"authors": [
|
||||
{
|
||||
"name": "PHP-FIG",
|
||||
"homepage": "https://www.php-fig.org/"
|
||||
}
|
||||
],
|
||||
"description": "Common interface for HTTP clients",
|
||||
"homepage": "https://github.com/php-fig/http-client",
|
||||
"keywords": [
|
||||
"http",
|
||||
"http-client",
|
||||
"psr",
|
||||
"psr-18"
|
||||
],
|
||||
"support": {
|
||||
"source": "https://github.com/php-fig/http-client"
|
||||
},
|
||||
"time": "2023-09-23T14:17:50+00:00"
|
||||
},
|
||||
{
|
||||
"name": "psr/http-factory",
|
||||
"version": "1.0.2",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/php-fig/http-factory.git",
|
||||
"reference": "e616d01114759c4c489f93b099585439f795fe35"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/php-fig/http-factory/zipball/e616d01114759c4c489f93b099585439f795fe35",
|
||||
"reference": "e616d01114759c4c489f93b099585439f795fe35",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
"php": ">=7.0.0",
|
||||
"psr/http-message": "^1.0 || ^2.0"
|
||||
},
|
||||
"type": "library",
|
||||
"extra": {
|
||||
"branch-alias": {
|
||||
"dev-master": "1.0.x-dev"
|
||||
}
|
||||
},
|
||||
"autoload": {
|
||||
"psr-4": {
|
||||
"Psr\\Http\\Message\\": "src/"
|
||||
}
|
||||
},
|
||||
"notification-url": "https://packagist.org/downloads/",
|
||||
"license": [
|
||||
"MIT"
|
||||
],
|
||||
"authors": [
|
||||
{
|
||||
"name": "PHP-FIG",
|
||||
"homepage": "https://www.php-fig.org/"
|
||||
}
|
||||
],
|
||||
"description": "Common interfaces for PSR-7 HTTP message factories",
|
||||
"keywords": [
|
||||
"factory",
|
||||
"http",
|
||||
"message",
|
||||
"psr",
|
||||
"psr-17",
|
||||
"psr-7",
|
||||
"request",
|
||||
"response"
|
||||
],
|
||||
"support": {
|
||||
"source": "https://github.com/php-fig/http-factory/tree/1.0.2"
|
||||
},
|
||||
"time": "2023-04-10T20:10:41+00:00"
|
||||
},
|
||||
{
|
||||
"name": "psr/http-message",
|
||||
"version": "1.1",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/php-fig/http-message.git",
|
||||
"reference": "cb6ce4845ce34a8ad9e68117c10ee90a29919eba"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/php-fig/http-message/zipball/cb6ce4845ce34a8ad9e68117c10ee90a29919eba",
|
||||
"reference": "cb6ce4845ce34a8ad9e68117c10ee90a29919eba",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
"php": "^7.2 || ^8.0"
|
||||
},
|
||||
"type": "library",
|
||||
"extra": {
|
||||
"branch-alias": {
|
||||
"dev-master": "1.1.x-dev"
|
||||
}
|
||||
},
|
||||
"autoload": {
|
||||
"psr-4": {
|
||||
"Psr\\Http\\Message\\": "src/"
|
||||
|
@ -841,27 +897,27 @@
|
|||
"response"
|
||||
],
|
||||
"support": {
|
||||
"source": "https://github.com/php-fig/http-message/tree/master"
|
||||
"source": "https://github.com/php-fig/http-message/tree/1.1"
|
||||
},
|
||||
"time": "2016-08-06T14:39:51+00:00"
|
||||
"time": "2023-04-04T09:50:52+00:00"
|
||||
},
|
||||
{
|
||||
"name": "psr/http-server-handler",
|
||||
"version": "1.0.1",
|
||||
"version": "1.0.2",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/php-fig/http-server-handler.git",
|
||||
"reference": "aff2f80e33b7f026ec96bb42f63242dc50ffcae7"
|
||||
"reference": "84c4fb66179be4caaf8e97bd239203245302e7d4"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/php-fig/http-server-handler/zipball/aff2f80e33b7f026ec96bb42f63242dc50ffcae7",
|
||||
"reference": "aff2f80e33b7f026ec96bb42f63242dc50ffcae7",
|
||||
"url": "https://api.github.com/repos/php-fig/http-server-handler/zipball/84c4fb66179be4caaf8e97bd239203245302e7d4",
|
||||
"reference": "84c4fb66179be4caaf8e97bd239203245302e7d4",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
"php": ">=7.0",
|
||||
"psr/http-message": "^1.0"
|
||||
"psr/http-message": "^1.0 || ^2.0"
|
||||
},
|
||||
"type": "library",
|
||||
"extra": {
|
||||
|