A changelog finder and parser for packages available on pypi, npm and rubygems.
Python Makefile
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Failed to load latest commit information.
changelogs
docs
tests
vcr/cassettes
.editorconfig
.gitignore
.pyup.yml
.travis.yml
AUTHORS.rst
CONTRIBUTING.rst
HISTORY.rst
LICENSE
MANIFEST.in
Makefile
README.rst
requirements_dev.txt add mock to dev requirements Apr 26, 2017
setup.cfg
setup.py
tox.ini
travis_pypi_setup.py

README.rst

Documentation Status Updates

A changelog finder and parser with command line interface for packages available on pypi, npm, rubygems and launchpad.net. Originally developed for pyup.io.

Installation

To install changelogs, run this command in your terminal:

$ pip install changelogs

Usage

To use changelogs in a Python project:

import changelogs

logs = changelogs.get("flask")
logs = changelogs.get("babel", vendor="npm")
logs = changelogs.get("bundler", vendor="npm")

Or, from the command line:

changelogs flask
changelogs babel npm
changelogs bundler gem

If you are on macOS, you can chain the open command:

changelogs babel npm >> babel.log && open babel.log

About

When trying to get a changelog for a given package, there are a bunch of problems:

  • There is no central place to store a changelog. If a project has a changelog, it's most likely somewhere in the git repo at all kinds of different places. This makes it hard to find.
  • The package index meta data often has no direct link to the git repo. This makes the repo hard to find.
  • There is no changelog standard. Everyone uses a different approach. This makes it hard to parse.

This project is trying to solve this by:

  • first querying the package vendor for package meta data like the homepage or docs URL.
  • if the meta data doesn't contain a valid URL to a repo, visit all available URLs and scrape them to find one.
  • if there is a valid repo URL, visit the repo and look for possible changelogs like Changes.txt, NEWS.md or history.rst.
  • fetch the content and somewhat try to parse it.