Skip to main content

Repository Participation Observer. A tool for investigation git repository contribution data and patterns.

Project description

RPO: Repository Participation Observer

A command line tool and Python library to help you analyze and visualized Git repositories. Ever wondered who has most contributions? How participation has changed over time? What are the hotspots in your code that change frequently? Who has the highest bus factor? rpo can help.

NOTE: This is alpha software under active development. There will be breaking changes.

Usage

CLI

Usage: rpo [OPTIONS] COMMAND [ARGS]...

Options:
  -r, --repository PATH
  -b, --branch TEXT
  --allow-dirty                Proceed with analyis even if repository has
                               uncommitted changes
  File selection:              Give you control over which files should be
                               included in your analysis
    -g, --glob TEXT            File path glob patterns to INCLUDE. If
                               specified, matching paths will be the only
                               files included in aggregation.            If
                               neither --glob nor --xglob are specified, all
                               files will be included in aggregation. Paths
                               are relative to root of repository.
    -xg, --xglob TEXT          File path glob patterns to EXCLUDE. If
                               specified, matching paths will be filtered
                               before aggregation.            If neither
                               --glob nor --xglob are specified, all files
                               will be included in aggregation. Paths are
                               relative to root of repository.
    --exclude-generated-files  If set, exclude common generated files like
                               package-manager generated lock files from
                               analysis
  Data selection:              Control over how repository data is aggregated
                               and sorted
    -A, --aggregate-by TEXT    Controls the field used to aggregate data
    -I, --identify-by TEXT     Controls the field used to identify auhors.
    -S, --sort-by TEXT         Controls the field used to sort output
  Plot options:                Control plot output, if available
    -p, --plot PATH            The directory where plot output visualization
                               will live. Either a filename ending with '.png'
                               or a directory.
  Output options:              Control how data is displayed or saved
    --save-as LIST             Save the report data to the path provided;
                               format is determined by the filename extension,
                               which must be one of (.json|.csv). If no save-
                               as path is provided, the report will be printed
                               to stdout
  --help                       Show this message and exit.

Commands:
  activity-report   Produces file or author report of activity at a...
  cumulative-blame  Computes the cumulative blame of the repository over...
  repo-blame        Computes the per user blame for all files at a given...
  revisions         List all revisions in the repository
  summary           Generate very high level summary for the repository

Library

pip install rpo
from rpo import RepositoryAnalyzer

ra = RepoAnalyser("./path/to_git_repo")

Examples

NOTE: depending on your shell, you may or may not need to escape the splat character in the glob patterns used below.

See test_cli.sh for more examples.

Git Blame for all Files in a Repo at a Given Revision, Identify Users by Email

$ rpo -r ../my-local-repo -R HEAD -I email repo-blame

Cumulative Git Blame for all Files in a Repo at a Given Revision, Identify Users by Name

$ rpo -r ../my-local-repo cumulative-blame

Author Activity Report, Including Only Files that Match a Pattern

$ rpo -r ../my-local-repo -g tests/\* activity-report

Author Activity Report, Excluding Files that Match a Pattern

$ rpo -r ../my-local-repo -xg tests/\* activity-report

File Activity Report, Excluding Files that Match a Pattern

$ rpo -r ../my-local-repo -xg tests/\* activity-report -t files

Features

  • Automatically generate aliases that refer to the same person
  • Support analyzing by glob
  • Support excluding by glob
  • Produce blame charts
  • Optionally ignore merge commits
  • Optionally ignore whitespace
  • Identify major refactorings
  • Fast execution, even on giant repositories

Performance

The goal is for the library to work even on the largest libraries. In general, the performance is proportional to the number of authors, commits, and files being considered in the aggregations.

The authors regularly test using the cpython repository, which contains over 1,000,000 objects. That takes a while.

TODO: Performance graphs

Similar Projects and Inspiration

Thanks to GitPandas for inspiration.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

rpo-0.1.0a4.tar.gz (12.8 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

rpo-0.1.0a4-py3-none-any.whl (12.6 kB view details)

Uploaded Python 3

File details

Details for the file rpo-0.1.0a4.tar.gz.

File metadata

  • Download URL: rpo-0.1.0a4.tar.gz
  • Upload date:
  • Size: 12.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.7.9

File hashes

Hashes for rpo-0.1.0a4.tar.gz
Algorithm Hash digest
SHA256 fc1a9eddcd608c9e1fd3c257da2ec8bfb93831c2ae982f441ded2166094b8b07
MD5 9869d24dbf5294440281e88b4a043ee4
BLAKE2b-256 438792d2cd09454eaf7a4f93fa4464d7721af4250d83945015e487164f03bb1f

See more details on using hashes here.

File details

Details for the file rpo-0.1.0a4-py3-none-any.whl.

File metadata

  • Download URL: rpo-0.1.0a4-py3-none-any.whl
  • Upload date:
  • Size: 12.6 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.7.9

File hashes

Hashes for rpo-0.1.0a4-py3-none-any.whl
Algorithm Hash digest
SHA256 b21676d5a73fb8d23f6d121184b1aafb3a2a7317edcea4246bfd594615397789
MD5 71c31660beef957f17d5a100cdc65dfa
BLAKE2b-256 e1b2ab38df9d48516353443d1ed935c531adb20282a82e365fed77b282e89ff4

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page