A dashboard for monitoring code debt in a git repository.
Project description
git-code-debt
A dashboard for monitoring code debt in a git repository.
Installation
pip install git-code-debt
Usage
Basic / tl;dr Usage
make a generate_config.yaml
# required: repository to clone (can be anything `git clone` understands) even
# a repository already on disk
repo: git@github.com:asottile/git-code-debt
# required: database generation path
database: database.db
# optional: default False
skip_default_metrics: false
# optional: default []
metric_package_names: []
# optional: default ^$ (python regex) to exclude paths such as '^vendor/'
exclude: ^$
invoke the cli
# Generate code metric data (substitute your own repo path)
$ git-code-debt-generate
# Start the server
$ git-code-debt-server database.db
Updating data on an existing database
Adding data to the database is as simple as running generate again.
git-code-debt
will pick up in the git history from where data was generated
previously.
$ git-code-debt-generate
Creating your own metrics
- Create a python project which adds
git-code-debt
as a dependency. - Create a package where you'll write your metrics
- Add your package to
metric_package_names
in yourgenerate_config.yaml
The simplest way to write your own custom metrics is to extend
git_code_debt.metrics.base.SimpleLineCounterBase
Here's what the base class looks like
class SimpleLineCounterBase(DiffParserBase):
# ...
def should_include_file(self, file_diff_stat):
"""Implement me to return whether a filename should be included.
By default, this returns True.
:param FileDiffStat file_diff_stat:
"""
return True
def line_matches_metric(self, line, file_diff_stat):
"""Implement me to return whether a line matches the metric.
:param bytes line: Line in the file
:param FileDiffStat file_diff_stat:
"""
raise NotImplementedError
Here's an example metric
from git_code_debt.metrics.base import SimpleLineCounterBase
class Python__init__LineCount(SimpleLineCounterBase):
"""Counts the number of lines in __init__.py"""
def should_include_file(self, file_diff_stat):
return file_diff_stat.filename == b'__init__.py'
def line_matches_metric(self, line, file_diff_stat):
# All lines in __init__.py match
return True
More complex metrics can extend DiffParserBase
class DiffParserBase(object):
# Specify __metric__ = False to not be included (useful for base classes)
__metric__ = False
def get_metrics_from_stat(self, commit, file_diff_stats):
"""Implement me to yield Metric objects from the input list of
FileStat objects.
Args:
commit - Commit object
file_diff_stats - list of FileDiffStat objects
Returns:
generator of Metric objects
"""
raise NotImplementedError
def get_metrics_info(self):
"""Implement me to yield `MetricInfo` objects."""
raise NotImplementedError
Some screenshots
Index
Graph
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
git_code_debt-0.11.0.tar.gz
(51.6 kB
view hashes)
Built Distribution
Close
Hashes for git_code_debt-0.11.0-py2.py3-none-any.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 53031e25438aec5c78dfbb91430174ea5c43f9361d11784a246ec299a627e27e |
|
MD5 | a79c0102016dc7e8fbab4c6e37a827e5 |
|
BLAKE2b-256 | 56457a9d8dc3c2331ae501ca61c8744d4383675e707816484ca9a37527dc1eb1 |