* zap: rm download commands and related services
* zap: rm list state tracking services except SubversionService (but currently unused)
* zap: rm unused db tables and related resources
* refactor: reorganize CLI commands and options hopefully for the last time
* tweak: rm port mappings from docker-compose.yml. use docker-compose.override.yml if you need that.
* feat: archival-related svn scripts
* doc: update README with some roadmappy verbiage
* feat: add meta/bin/push-to-aspirecloud
* feat: upload to AC in chunks of 100 (configurable)
* fix: add ASPIRECLOUD_ADMIN_API_* envars to docker-compose.yml
* feat: add --after parameter to meta dump commands
* feat: enable compression in push-to-aspirecloud
* fix: respect the --update-all flag once again
* docs: update README with AC integration instructions
* refactor: use epoch seconds for timestamps
* fix: use single query to filter for pulled time
* refactor: use ResourceType instead of strings in most places
* refactor: inline RevisionService into AbstractListService
* fix: lolphp of numeric string => int conversion in addNewAndRequested
* refactor: make themes commands somewhat more generic
* refactor: rename WpEndpointClient -> DotOrgApiClient
* build: add saloonphp/saloon
* refactor: replace DotOrgApiService with saloon
* refactor: move request constructors to abstract base
* refactor: rearrange, refactor, and rename commands and services
* refactor: pull configure() method up to base class in sync commands
* feat: use async pool with concurrency of 10
* feat: use saloon for downloads
* fix: don't escape slashes in log json
* chore: comment out some excess log spam
* fix: mark 404 downloads as processed
* refactor: rename Resource -> ResourceType (Resource is just too common)
* feat: replace progressive backoff with saloonphp/rate-limit-plugin
* fix: disable HasRateLimits trait, it's severely bugged with async
* wip: replacing pdo with dbal
* wip: nuke stats, we'll use the db for that
* wip: refactoring ListService, adding caching
* refactor: rm unnecessary cache in SubversionService
* chore: drop aspiresync.sqlite in the app root
* fix: urldecode slugs scraped from svn
* feat: add RegexUtil for a more convenient regex api
* fix: add blank version lists to fetched subversion slugs
* test: wipe out all tests except the one unit test
* refactor: rename getUpdatedListOfItems -> getUpdatedItems
* refactor: rm $action param from getItemsForAction
* fix: drop action in ThemeListService::getItemsForAction
* refactor: move most ListService methods into AbstractListService
* fix: move AbstractMetadataService up one dir
* refactor: fully factor all six of plugin/theme services into base
* fix: add missing columns in saveOpen
* chore: port RevisionMetadataService to use DBAL
* chore: drop aura/sql
* fix: catch any fetch errors that slip past Guzzle
* fix: convert numeric string keys to real strings
* test: new stubs and useless unit test
* chore: put more useful data in aspirepress_meta
* chore: don't save aspirepress_meta, we can generate it during dump
* feat: create Logger service from katzgrau/KLogger
* refactor: fix IDE warnings in Logger.php, strip out doc comments
* feat: wire up log service
* feat: LogService is now JsonLogger and less than 100 LOC
* chore: only include context when non-empty
* fix: use double quotes in messages so strings interpolate
* fix: log to tempfile by default, stdout doesn't make much sense yet
* refactor: change getCategory() to a readonly property
* fix: various fixes around logging (+tests)
* fix: use static:: consistently in JsonLogger
* chore: add lots of debug trace logging
* fix: default log file to /dev/null
* feat: generate aspiresync_meta on export
* chore: add debug logging in metadata service
* fix: use constructor injection for loggers because of readonly class
* refactor: fix most ide warnings
* wip: gardening
* fix: switch php container from alpine to ubuntu
* feat: add juicefs client to container
* fix: generate en_US.UTF-8 locales in container
* feat: add some scripts for working with juicefs
* fix: use juicefs installer instead of hamfisted COPY
* refactor: switch db backend to sqlite
* fix: change some sql bits to sqlite syntax
* style: clean up sqlite schema
* fix: enable foreign key pragma
* wip: save metadata directly to db for all response types
* feat: implement --skip-newer-than-secs
* feat: report closed plugins at info level so real errors stand out
* refactor: remove meta:import:plugins command
* fix: write not-found status for Plugin not found
* feat: sync theme metadata directly to sqlite
* chore: go back to the original names of plugins:meta and themes:meta
* wip: cleanups
* chore: drop UtilCleanCommand since the filesystem is no longer much used
* wip: gardening
* fix: don't send any user-agent header at all
* style: inline factory constructor args and use named args
* wip: replace laminas service manager with symfony's container
* chore: zap unneeded factories
* chore: rm postgres stuff from build, replace bootstrap with make init
* tmp: move laminas-style config into attic
* test: disable SvnServiceTest due to external network calls
* wip: continue replacing laminas-servicemanager
* refactor: use #[AutoWire] attributes in ExtendedPdoFactory
* wip: use resolveEnvPlaceHolders: true (tho we don't use them now)
* refactor: normalize naming of commands
* chore: abort the juicefs experiment
* fix: use right default db name in makefile
* fix: append versions to outcomes array
* fix: add UA for downloads (empty UA is blocked)
* fix: add missing zip package
* refactor: use flysystem for download commands
* refactor: drop RunAllCommand, we have make for that
* chore: clear out attic (UtilUploadCommand is not coming back)
* chore: rm unused CallbackInterface.php
* refactor: rename GetItemsFromSourceTrait -> HasStats
* wip: download commands wip
* fix: change full timeout to 15 from 5
* wip: ProcessManager
* wip: single version at a time download jobs
* fix: drop silly --ansi option, that's for symfony console
* fix: use right params in getDownloadUrl sql
* chore: improve logging in plugins:download:single
* chore: run composer bump
* chore: upgrade and bump
* docs: fix typos in README.md (credit to @AmnestyAm)
* chore: rename DOWNLOAD_DIR to DOWNLOADS_DIR for consistency
* docs: update README.md to reflect the latest configuration (+reformat)
* doc: rm redundant USAGE from README.md (we already have command help)
* docs: rm LICENSE section from README.md, we'll let it speak for itself
speculation on whether or not the GPL applies definitely doesn't belong there, and we don't even use any GPL'd components I know of.
* chore: drop Partial download commands, they're largely unnecessary now
* refactor: factor Download commands into a common base
* chore: implement themes:download:single
* format: make fix
* wip: refactoring various services
* refactor: ThemesListService now uses svn like plugins
* fix: actually execute parallel processes this time
* fix: remove processStartDelay
* refactor: factor out AbstractDownloadService
* fix: disable output on process start, which suddenly stopped working
* feat: add export commands
* fix: add newlines to exports
* chore: rename export -> dump
* feat: initialize and use a proper test environment and not the real db
* chore: rearrange status messages so slugs line up
* fix: create dirs if they don't exist
* fix: download full list of fields for theme metadata
* fix: rm request uri from retry messages that already contain it
* fix: use 1.2 api with all fields for plugin metadata
* fix: use right table name in getVersionsForUnfinalizedPlugins
* style: reformat sql into heredoc in PluginMetadataService
* feat: add FileUtil::cachedFile
* build: split make check and make fix
* feat: add symfony/var-dumper and roave/security-advisories
* chore: switch to 2 second connect timeout, 10 retries, 500ms backoff
* feat: inject Guzzle client with retry logic
* fix: replace flysystem calls with builtins when writing files
flysystem just plain falls on its face, files we tell it to write just don't show up.
* fix: write svn data to tempfile and not the final filename
* refactor: fetch only latest rows per action in revisions table
the revisions table is also now append-only: preserveRevision always inserts a new row
* feat: new FileUtil for common filesystem operations
* feat: use thecodingmachine/safe for json functions
* style: fix all files with phpcs
* fix: exempt GuzzleClientFactory from phpcs because phpcs chokes on it
* refactor: remove use of Filesystem everywhere except S3 ops
* refactor: drop code/ and build/ dirs, do everything from the root
* chore: drop unused NETWORK envar in makefile
* feat: skip downloads if metadata file already exists
* feat: add --skip-existing flag and leave -u alone