{ "info": { "author": "Kevin James", "author_email": "KevinJames@thekev.in", "bugtrack_url": null, "classifiers": [ "Development Status :: 3 - Alpha", "Intended Audience :: Developers", "Intended Audience :: End Users/Desktop", "License :: OSI Approved :: MIT License", "Natural Language :: English", "Operating System :: OS Independent", "Programming Language :: Python", "Programming Language :: Python :: 3.6", "Programming Language :: Python :: 3.7", "Programming Language :: Python :: 3 :: Only" ], "description": "getchanges\n==========\n\n``getchanges`` aims to be a CLI tool for finding and retrieving changelogs for\nany package. That means:\n\n* system packages (``apt``, ``zypper``, ``pacman``, ``brew``, ...)\n* language packages (``pip``, ``gem``, ``cargo``, ...)\n* ad-hoc scripts (``curl https://foo.bar > /bin/foobar``, ...)\n\nThis project is a Work In-Progress! Expect very little for now and avoid the\ndisappointment.\n\nIf you're looking to contribute -- that's fantastic, I'm always open to getting\nsome helping hands! Feel free to dive right in.\n\nUsage\n-----\n\nThe rough end goal is to have::\n\n $ changes [-sSOURCE] [--from FROM_VERSION] [--to TO_VERSION] NAME\n\nwhere::\n\n OPTIONS:\n Sets the name (of package / command) to search.\n -s, --source Provides a source language restriction/hint.\n -f, --from Outputs the Changelog beginning with this version.\n -t, --to Outputs the Changelog ending with this version.\n\nPlan\n----\n\nMy plan is to start by requiring source hints, which will let me build up a\nlibrary of package-source-parsers::\n\n $ changes -spy coveralls # parses https://pypi.org/project/coveralls/\n # finds https://github.com/coveralls-clients/coveralls-python/blob/master/CHANGELOG.md\n $ changes -sbrew ripgrep # parses https://github.com/Homebrew/homebrew-core/blob/master/Formula/awscli.rb\n # finds https://github.com/aws/aws-cli\n # locates https://github.com/aws/aws-cli/blob/develop/CHANGELOG.rst\n\nI'll also want to expand this to cover packages whose names do not match their\ncli commands, eg. so utilities can be looked up directly::\n\n $ changes -sbrew rg # determines rg -> ripgrep\n # parses https://github.com/Homebrew/homebrew-core/blob/master/Formula/ripgrep.rb\n # finds https://github.com/BurntSushi/ripgrep\n # locates https://github.com/BurntSushi/ripgrep/blob/master/CHANGELOG.md\n\nOnce that has some coverage, I'll expand the \"Changelog locator\" chunk::\n\n $ changes -spy coverage # parses https://pypi.org/project/coverage/\n # finds https://bitbucket.org/ned/coveragepy\n # links to https://github.com/nedbat/coveragepy\n # locates https://github.com/nedbat/coveragepy/blob/master/CHANGES.rst\n $ changes -sgem mailchimp-api # parses https://rubygems.org/gems/mailchimp-api\n # finds https://bitbucket.org/mailchimp/mailchimp-api-ruby/\n # locates https://bitbucket.org/mailchimp/mailchimp-api-ruby/compare/2.0.6..2.0.5\n\nBy now, it will probably be obvious that some projects will simply refuse to be\neasy to work with, so I'll probably try to come up with a decently\nstraightforward way to drop-in overrides. Hopefully, I'll have been keeping the\nvarious pieces separate enough to avoid letting this step turn into too much of\na headache.\n\nAt that point, I can work on changelog parsers -- I realize there are infinite\npossible options here, but a bit of best-effort parsing of ``.md``, ``.rst``,\n``NEWS``, GitHub releases, and commit logs should be a decent 80% -- especially\nif I focus on various \"standards\" such as `conventional changelogs`_.\n\nThis will allow me to add version range flags with a reasonable chance of\nworking::\n\n $ changes -srust clap --from v2.31.2 # parses https://github.com/clap-rs/clap/blob/master/CHANGELOG.md\n\nAnd, finally, a more general search function can get played with until I end up\nwith my rough end goal::\n\n $ changes hub --from 2.4.0 --to 2.5.1 # parses https://github.com/github/hub/releases\n\nReleasing\n---------\n\n#. bump `setup.py:version`\n#. `clog -C CHANGELOG.md -F --setversion=x.y.z`\n#. `git add setup.py CHANGELOG.md`\n#. `git commit -m 'chore(release): bump version'`\n#. `git tag -a x.y.z --cleanup=whitespace`\n\n.. _conventional changelogs: https://github.com/conventional-changelog/conventional-changelog\n\n\n", "description_content_type": "", "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/TheKevJames/experiments/blob/master/getchanges", "keywords": "", "license": "MIT", "maintainer": "", "maintainer_email": "", "name": "getchanges", "package_url": "https://pypi.org/project/getchanges/", "platform": "Posix; MacOS X; Windows", "project_url": "https://pypi.org/project/getchanges/", "project_urls": { "Changelog": "https://github.com/TheKevJames/experiments/blob/master/getchanges/CHANGELOG.md", "Homepage": "https://github.com/TheKevJames/experiments/blob/master/getchanges" }, "release_url": "https://pypi.org/project/getchanges/0.1.0/", "requires_dist": [ "aiohttp (==3.5.4)", "docopt (==0.6.2)", "yarl (==1.3.0)" ], "requires_python": ">= 3.5", "summary": "getchanges is a utility for retrieving changelogs", "version": "0.1.0" }, "last_serial": 4773318, "releases": { "0.0.1": [ { "comment_text": "", "digests": { "md5": "5047d20c641feb8b4ab8a4c7dbfa9f9e", "sha256": "e544397b0d734768d3cac602c0237782f1db51d616eb4dd7687f258d930a9130" }, "downloads": -1, "filename": "getchanges-0.0.1-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "5047d20c641feb8b4ab8a4c7dbfa9f9e", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": ">= 3.5", "size": 9901, "upload_time": "2018-09-11T06:07:15", "url": "https://files.pythonhosted.org/packages/eb/96/f4703a203d1b0529552e18f65a3704dff7379c6cc4e2fdefb437308caa83/getchanges-0.0.1-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "2995535799995ab71fb8bc86a3124738", "sha256": "28cc90cce6076ddf8f65e7c891a23e70961885a49f04ee5e20c80c03181db9b9" }, "downloads": -1, "filename": "getchanges-0.0.1.tar.gz", "has_sig": false, "md5_digest": "2995535799995ab71fb8bc86a3124738", "packagetype": "sdist", "python_version": "source", "requires_python": ">= 3.5", "size": 7131, "upload_time": "2018-09-11T06:07:17", "url": "https://files.pythonhosted.org/packages/ef/d3/67a35cb96f101e04aa9c66f0e7b30f9489fff6ccbb194b747da6f04315d8/getchanges-0.0.1.tar.gz" } ], "0.0.2": [ { "comment_text": "", "digests": { "md5": "4c85367ba907558f8b9b1bfabc3b11c2", "sha256": "2b5d0e7d044a86546bf47d31b364464b3a5c5855ca0c9cf2dfdab066637e6e26" }, "downloads": -1, "filename": "getchanges-0.0.2-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "4c85367ba907558f8b9b1bfabc3b11c2", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": ">= 3.5", "size": 10256, "upload_time": "2018-09-11T07:45:42", "url": "https://files.pythonhosted.org/packages/0c/56/2fef341bdd54df5fda1f9a6749c8326bdddac08d70452f62dea938948ba9/getchanges-0.0.2-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "ce1bd09ef4544da2505f957824ad77c4", "sha256": "c2ce17bf84a250b901e1b55f7edf34eca380481bc8cb31e762a2cea13925479a" }, "downloads": -1, "filename": "getchanges-0.0.2.tar.gz", "has_sig": false, "md5_digest": "ce1bd09ef4544da2505f957824ad77c4", "packagetype": "sdist", "python_version": "source", "requires_python": ">= 3.5", "size": 7409, "upload_time": "2018-09-11T07:45:44", "url": "https://files.pythonhosted.org/packages/13/8b/e34c0769229eec91ee2ca583edc04432e0f60ac63e1472a661dd4bb07090/getchanges-0.0.2.tar.gz" } ], "0.1.0": [ { "comment_text": "", "digests": { "md5": "5a63f0c4475784774e5521d158e30ddc", "sha256": "36e5ffae27bb17dc03244ad80063202db53975c66db83e4df3c946eb24e6988a" }, "downloads": -1, "filename": "getchanges-0.1.0-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "5a63f0c4475784774e5521d158e30ddc", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": ">= 3.5", "size": 10501, "upload_time": "2019-02-02T22:32:36", "url": "https://files.pythonhosted.org/packages/8e/3c/b0624119f4cfa93de8c1e97d335bb04d299d920c9e5b6144d6ab27d6592f/getchanges-0.1.0-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "4a69c9420e14ac1ff6b971d76f40204e", "sha256": "a5e8a02f7169f490eaf25510cd76380e43632faac292e9305e20b51a2c2f7095" }, "downloads": -1, "filename": "getchanges-0.1.0.tar.gz", "has_sig": false, "md5_digest": "4a69c9420e14ac1ff6b971d76f40204e", "packagetype": "sdist", "python_version": "source", "requires_python": ">= 3.5", "size": 7505, "upload_time": "2019-02-02T22:32:37", "url": "https://files.pythonhosted.org/packages/66/ca/b0bbc7079ddc970f203582409b00103dabc679b593f3483fe7701a3bbe3d/getchanges-0.1.0.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "5a63f0c4475784774e5521d158e30ddc", "sha256": "36e5ffae27bb17dc03244ad80063202db53975c66db83e4df3c946eb24e6988a" }, "downloads": -1, "filename": "getchanges-0.1.0-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "5a63f0c4475784774e5521d158e30ddc", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": ">= 3.5", "size": 10501, "upload_time": "2019-02-02T22:32:36", "url": "https://files.pythonhosted.org/packages/8e/3c/b0624119f4cfa93de8c1e97d335bb04d299d920c9e5b6144d6ab27d6592f/getchanges-0.1.0-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "4a69c9420e14ac1ff6b971d76f40204e", "sha256": "a5e8a02f7169f490eaf25510cd76380e43632faac292e9305e20b51a2c2f7095" }, "downloads": -1, "filename": "getchanges-0.1.0.tar.gz", "has_sig": false, "md5_digest": "4a69c9420e14ac1ff6b971d76f40204e", "packagetype": "sdist", "python_version": "source", "requires_python": ">= 3.5", "size": 7505, "upload_time": "2019-02-02T22:32:37", "url": "https://files.pythonhosted.org/packages/66/ca/b0bbc7079ddc970f203582409b00103dabc679b593f3483fe7701a3bbe3d/getchanges-0.1.0.tar.gz" } ] }