git-pandas 2.7.0__tar.gz → 2.7.1__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {git_pandas-2.7.0 → git_pandas-2.7.1}/CHANGELOG.md +27 -0
- {git_pandas-2.7.0 → git_pandas-2.7.1}/PKG-INFO +1 -1
- {git_pandas-2.7.0 → git_pandas-2.7.1}/docs/source/conf.py +2 -2
- {git_pandas-2.7.0 → git_pandas-2.7.1}/docs/source/index.rst +1 -0
- {git_pandas-2.7.0 → git_pandas-2.7.1}/docs/source/project.rst +1 -1
- {git_pandas-2.7.0 → git_pandas-2.7.1}/docs/source/repository.rst +1 -1
- git_pandas-2.7.1/docs/source/result_schemas.rst +557 -0
- git_pandas-2.7.1/docs/source/schema_contracts.py +337 -0
- {git_pandas-2.7.0 → git_pandas-2.7.1}/gitpandas/project.py +6 -2
- {git_pandas-2.7.0 → git_pandas-2.7.1}/gitpandas/repository.py +34 -2
- {git_pandas-2.7.0 → git_pandas-2.7.1}/mcp_server/server.py +1 -1
- {git_pandas-2.7.0 → git_pandas-2.7.1}/pyproject.toml +1 -1
- {git_pandas-2.7.0 → git_pandas-2.7.1}/tests/test_Project/test_edge_cases.py +5 -6
- {git_pandas-2.7.0 → git_pandas-2.7.1}/tests/test_Repository/test_commits_in_tags.py +11 -0
- {git_pandas-2.7.0 → git_pandas-2.7.1}/tests/test_Repository/test_edge_cases.py +4 -7
- git_pandas-2.7.1/tests/test_cache_parity.py +333 -0
- git_pandas-2.7.1/tests/test_limit_validation.py +98 -0
- git_pandas-2.7.1/tests/test_schema_contracts.py +119 -0
- {git_pandas-2.7.0 → git_pandas-2.7.1}/.cursor/rules/project_overview.mdc +0 -0
- {git_pandas-2.7.0 → git_pandas-2.7.1}/.cursor/rules/pytest_standards.mdc +0 -0
- {git_pandas-2.7.0 → git_pandas-2.7.1}/.cursor/rules/python_standards.mdc +0 -0
- {git_pandas-2.7.0 → git_pandas-2.7.1}/.cursor/rules/sphinx_docs_standards.mdc +0 -0
- {git_pandas-2.7.0 → git_pandas-2.7.1}/.cursor/rules/testing.mdc +0 -0
- {git_pandas-2.7.0 → git_pandas-2.7.1}/.github/ISSUE_TEMPLATE.md +0 -0
- {git_pandas-2.7.0 → git_pandas-2.7.1}/.github/PULL_REQUEST_TEMPLATE.md +0 -0
- {git_pandas-2.7.0 → git_pandas-2.7.1}/.github/workflows/docs.yml +0 -0
- {git_pandas-2.7.0 → git_pandas-2.7.1}/.github/workflows/pypi-publish.yml +0 -0
- {git_pandas-2.7.0 → git_pandas-2.7.1}/.github/workflows/test-docs-build.yml +0 -0
- {git_pandas-2.7.0 → git_pandas-2.7.1}/.github/workflows/test-suite.yml +0 -0
- {git_pandas-2.7.0 → git_pandas-2.7.1}/.gitignore +0 -0
- {git_pandas-2.7.0 → git_pandas-2.7.1}/.obvious/codebase-map.md +0 -0
- {git_pandas-2.7.0 → git_pandas-2.7.1}/.obvious/config.yml +0 -0
- {git_pandas-2.7.0 → git_pandas-2.7.1}/.obvious/obvious.md +0 -0
- {git_pandas-2.7.0 → git_pandas-2.7.1}/.obvious/skills/local-dev/SKILL.md +0 -0
- {git_pandas-2.7.0 → git_pandas-2.7.1}/CONTRIBUTING.md +0 -0
- {git_pandas-2.7.0 → git_pandas-2.7.1}/LICENSE.md +0 -0
- {git_pandas-2.7.0 → git_pandas-2.7.1}/Makefile +0 -0
- {git_pandas-2.7.0 → git_pandas-2.7.1}/README.md +0 -0
- {git_pandas-2.7.0 → git_pandas-2.7.1}/docs/AUDIT_REPORT.md +0 -0
- {git_pandas-2.7.0 → git_pandas-2.7.1}/docs/Makefile +0 -0
- {git_pandas-2.7.0 → git_pandas-2.7.1}/docs/make.bat +0 -0
- {git_pandas-2.7.0 → git_pandas-2.7.1}/docs/requirements.txt +0 -0
- {git_pandas-2.7.0 → git_pandas-2.7.1}/docs/source/CNAME +0 -0
- {git_pandas-2.7.0 → git_pandas-2.7.1}/docs/source/_static/custom.css +0 -0
- {git_pandas-2.7.0 → git_pandas-2.7.1}/docs/source/cache.rst +0 -0
- {git_pandas-2.7.0 → git_pandas-2.7.1}/docs/source/contributors.rst +0 -0
- {git_pandas-2.7.0 → git_pandas-2.7.1}/docs/source/performance.rst +0 -0
- {git_pandas-2.7.0 → git_pandas-2.7.1}/docs/source/remote_operations.rst +0 -0
- {git_pandas-2.7.0 → git_pandas-2.7.1}/docs/source/usecases.rst +0 -0
- {git_pandas-2.7.0 → git_pandas-2.7.1}/examples/__init__.py +0 -0
- {git_pandas-2.7.0 → git_pandas-2.7.1}/examples/attributes.py +0 -0
- {git_pandas-2.7.0 → git_pandas-2.7.1}/examples/bus_analysis.py +0 -0
- {git_pandas-2.7.0 → git_pandas-2.7.1}/examples/cache_management.py +0 -0
- {git_pandas-2.7.0 → git_pandas-2.7.1}/examples/cache_timestamps.py +0 -0
- {git_pandas-2.7.0 → git_pandas-2.7.1}/examples/cloud_repo.py +0 -0
- {git_pandas-2.7.0 → git_pandas-2.7.1}/examples/commit_history.py +0 -0
- {git_pandas-2.7.0 → git_pandas-2.7.1}/examples/cumulative_blame.py +0 -0
- {git_pandas-2.7.0 → git_pandas-2.7.1}/examples/definitions.py +0 -0
- {git_pandas-2.7.0 → git_pandas-2.7.1}/examples/file_change_rates.py +0 -0
- {git_pandas-2.7.0 → git_pandas-2.7.1}/examples/hours_estimate.py +0 -0
- {git_pandas-2.7.0 → git_pandas-2.7.1}/examples/img/cumulative_blame.png +0 -0
- {git_pandas-2.7.0 → git_pandas-2.7.1}/examples/img/cumulative_project_blame.png +0 -0
- {git_pandas-2.7.0 → git_pandas-2.7.1}/examples/img/githubblame.png +0 -0
- {git_pandas-2.7.0 → git_pandas-2.7.1}/examples/img/lifeline.png +0 -0
- {git_pandas-2.7.0 → git_pandas-2.7.1}/examples/img/stravalib_cumulative_blame.png +0 -0
- {git_pandas-2.7.0 → git_pandas-2.7.1}/examples/lifeline.py +0 -0
- {git_pandas-2.7.0 → git_pandas-2.7.1}/examples/parallel_blame.py +0 -0
- {git_pandas-2.7.0 → git_pandas-2.7.1}/examples/project_blame.py +0 -0
- {git_pandas-2.7.0 → git_pandas-2.7.1}/examples/punchcard.py +0 -0
- {git_pandas-2.7.0 → git_pandas-2.7.1}/examples/release_analytics.py +0 -0
- {git_pandas-2.7.0 → git_pandas-2.7.1}/examples/remote_fetch_and_cache_warming.py +0 -0
- {git_pandas-2.7.0 → git_pandas-2.7.1}/examples/repo_file_detail.py +0 -0
- {git_pandas-2.7.0 → git_pandas-2.7.1}/gitpandas/__init__.py +0 -0
- {git_pandas-2.7.0 → git_pandas-2.7.1}/gitpandas/cache.py +0 -0
- {git_pandas-2.7.0 → git_pandas-2.7.1}/gitpandas/logging.py +0 -0
- {git_pandas-2.7.0 → git_pandas-2.7.1}/gitpandas/utilities/__init__.py +0 -0
- {git_pandas-2.7.0 → git_pandas-2.7.1}/gitpandas/utilities/check_api.py +0 -0
- {git_pandas-2.7.0 → git_pandas-2.7.1}/gitpandas/utilities/plotting.py +0 -0
- {git_pandas-2.7.0 → git_pandas-2.7.1}/img/cumulative_blame.png +0 -0
- {git_pandas-2.7.0 → git_pandas-2.7.1}/img/lifeline.png +0 -0
- {git_pandas-2.7.0 → git_pandas-2.7.1}/img/punchcard.png +0 -0
- {git_pandas-2.7.0 → git_pandas-2.7.1}/mcp_server/README.md +0 -0
- {git_pandas-2.7.0 → git_pandas-2.7.1}/tests/__init__.py +0 -0
- {git_pandas-2.7.0 → git_pandas-2.7.1}/tests/conftest.py +0 -0
- {git_pandas-2.7.0 → git_pandas-2.7.1}/tests/test_Project/__init__.py +0 -0
- {git_pandas-2.7.0 → git_pandas-2.7.1}/tests/test_Project/test_advanced.py +0 -0
- {git_pandas-2.7.0 → git_pandas-2.7.1}/tests/test_Project/test_blame_file_detail_empty.py +0 -0
- {git_pandas-2.7.0 → git_pandas-2.7.1}/tests/test_Project/test_blame_multi_repo.py +0 -0
- {git_pandas-2.7.0 → git_pandas-2.7.1}/tests/test_Project/test_bus_factor.py +0 -0
- {git_pandas-2.7.0 → git_pandas-2.7.1}/tests/test_Project/test_commits_in_tags.py +0 -0
- {git_pandas-2.7.0 → git_pandas-2.7.1}/tests/test_Project/test_cumulative_blame_output_shape.py +0 -0
- {git_pandas-2.7.0 → git_pandas-2.7.1}/tests/test_Project/test_date_source.py +0 -0
- {git_pandas-2.7.0 → git_pandas-2.7.1}/tests/test_Project/test_default_branch_detection.py +0 -0
- {git_pandas-2.7.0 → git_pandas-2.7.1}/tests/test_Project/test_error_handling.py +0 -0
- {git_pandas-2.7.0 → git_pandas-2.7.1}/tests/test_Project/test_file_detail_author.py +0 -0
- {git_pandas-2.7.0 → git_pandas-2.7.1}/tests/test_Project/test_github_profile.py +0 -0
- {git_pandas-2.7.0 → git_pandas-2.7.1}/tests/test_Project/test_project_limit_allocation.py +0 -0
- {git_pandas-2.7.0 → git_pandas-2.7.1}/tests/test_Project/test_properties.py +0 -0
- {git_pandas-2.7.0 → git_pandas-2.7.1}/tests/test_Project/test_punchcard.py +0 -0
- {git_pandas-2.7.0 → git_pandas-2.7.1}/tests/test_Project/test_revs_num_datapoints.py +0 -0
- {git_pandas-2.7.0 → git_pandas-2.7.1}/tests/test_Repository/__init__.py +0 -0
- {git_pandas-2.7.0 → git_pandas-2.7.1}/tests/test_Repository/test_advanced.py +0 -0
- {git_pandas-2.7.0 → git_pandas-2.7.1}/tests/test_Repository/test_bus_factor.py +0 -0
- {git_pandas-2.7.0 → git_pandas-2.7.1}/tests/test_Repository/test_cumulative_blame_duplicate_dates.py +0 -0
- {git_pandas-2.7.0 → git_pandas-2.7.1}/tests/test_Repository/test_cumulative_blame_output_shape.py +0 -0
- {git_pandas-2.7.0 → git_pandas-2.7.1}/tests/test_Repository/test_date_source.py +0 -0
- {git_pandas-2.7.0 → git_pandas-2.7.1}/tests/test_Repository/test_error_handling.py +0 -0
- {git_pandas-2.7.0 → git_pandas-2.7.1}/tests/test_Repository/test_file_change_history_values.py +0 -0
- {git_pandas-2.7.0 → git_pandas-2.7.1}/tests/test_Repository/test_file_detail.py +0 -0
- {git_pandas-2.7.0 → git_pandas-2.7.1}/tests/test_Repository/test_file_operations.py +0 -0
- {git_pandas-2.7.0 → git_pandas-2.7.1}/tests/test_Repository/test_file_owner_author.py +0 -0
- {git_pandas-2.7.0 → git_pandas-2.7.1}/tests/test_Repository/test_hours_estimate.py +0 -0
- {git_pandas-2.7.0 → git_pandas-2.7.1}/tests/test_Repository/test_properties.py +0 -0
- {git_pandas-2.7.0 → git_pandas-2.7.1}/tests/test_Repository/test_punchcard.py +0 -0
- {git_pandas-2.7.0 → git_pandas-2.7.1}/tests/test_Repository/test_rev_to_rev.py +0 -0
- {git_pandas-2.7.0 → git_pandas-2.7.1}/tests/test_Repository/test_revs_num_datapoints.py +0 -0
- {git_pandas-2.7.0 → git_pandas-2.7.1}/tests/test_bulk_fetch_warm.py +0 -0
- {git_pandas-2.7.0 → git_pandas-2.7.1}/tests/test_by_validation.py +0 -0
- {git_pandas-2.7.0 → git_pandas-2.7.1}/tests/test_cache.py +0 -0
- {git_pandas-2.7.0 → git_pandas-2.7.1}/tests/test_cache_immutability.py +0 -0
- {git_pandas-2.7.0 → git_pandas-2.7.1}/tests/test_cache_integration.py +0 -0
- {git_pandas-2.7.0 → git_pandas-2.7.1}/tests/test_cache_key_consistency.py +0 -0
- {git_pandas-2.7.0 → git_pandas-2.7.1}/tests/test_cache_management.py +0 -0
- {git_pandas-2.7.0 → git_pandas-2.7.1}/tests/test_cache_threading.py +0 -0
- {git_pandas-2.7.0 → git_pandas-2.7.1}/tests/test_cache_warming.py +0 -0
- {git_pandas-2.7.0 → git_pandas-2.7.1}/tests/test_cached_signatures.py +0 -0
- {git_pandas-2.7.0 → git_pandas-2.7.1}/tests/test_examples.py +0 -0
- {git_pandas-2.7.0 → git_pandas-2.7.1}/tests/test_logging.py +0 -0
- {git_pandas-2.7.0 → git_pandas-2.7.1}/tests/test_mcp_serialization.py +0 -0
- {git_pandas-2.7.0 → git_pandas-2.7.1}/tests/test_remote_fetch.py +0 -0
- {git_pandas-2.7.0 → git_pandas-2.7.1}/tests/test_repository_cache.py +0 -0
- {git_pandas-2.7.0 → git_pandas-2.7.1}/tests/test_utilities/test_check_api.py +0 -0
- {git_pandas-2.7.0 → git_pandas-2.7.1}/tests/test_utilities/test_init.py +0 -0
- {git_pandas-2.7.0 → git_pandas-2.7.1}/tests/test_utilities/test_plotting.py +0 -0
|
@@ -1,6 +1,33 @@
|
|
|
1
1
|
Unreleased
|
|
2
2
|
==========
|
|
3
3
|
|
|
4
|
+
v2.7.1
|
|
5
|
+
======
|
|
6
|
+
|
|
7
|
+
## Documentation
|
|
8
|
+
|
|
9
|
+
* **NEW**: A "Result schemas" docs page lists the exact columns, index levels and dtype kinds of populated results for the core analysis methods on `Repository` and `ProjectDirectory`. It is generated from constants that `tests/test_schema_contracts.py` checks against real output.
|
|
10
|
+
|
|
11
|
+
## Bug Fixes
|
|
12
|
+
|
|
13
|
+
### Tag History Compatibility
|
|
14
|
+
|
|
15
|
+
* **FIXED**: `commits_in_tags()` converts time bounds to epoch seconds without deprecated generic-unit Timedelta division, avoiding the NumPy deprecation warning while preserving whole-second flooring.
|
|
16
|
+
|
|
17
|
+
### MCP Datetime Serialization
|
|
18
|
+
|
|
19
|
+
* **FIXED**: The standalone MCP adapter serializes pandas 3 datetime columns at any resolution as timestamp strings, rather than overlooking columns that are not nanosecond-based.
|
|
20
|
+
|
|
21
|
+
### Limit Validation
|
|
22
|
+
|
|
23
|
+
**Behavior change: a negative `limit` now raises `ValueError` instead of returning a result.** Git treats `max_count=-1` as unlimited, so a negative `limit` used to mean "everything" on some methods and "nothing" on others (a project-level `limit=-1` over two repositories returned 5, 0, 1 and 5 rows from `commit_history`, `file_change_history`, `hours_estimate` and `revs` on a 2x5-commit fixture).
|
|
24
|
+
|
|
25
|
+
* **FIXED**: `limit` must be `None` or a non-negative integer on `Repository.commit_history`, `file_change_history`, `file_change_rates`, `hours_estimate`, `revs`, `punchcard`, `cumulative_blame`, `parallel_cumulative_blame` and the matching `ProjectDirectory` methods. Negative values, booleans, floats and NaN raise `ValueError` before Git or cache access, so nothing is cached. `limit=0` (zero commits), `None` and positive integers behave as before; floats such as `limit=2.0` are now rejected rather than floored.
|
|
26
|
+
|
|
27
|
+
## Testing & Quality
|
|
28
|
+
|
|
29
|
+
* **ENHANCED**: Value-level cached-versus-uncached parity coverage now checks every public analysis method and flags public methods missing from the coverage table.
|
|
30
|
+
|
|
4
31
|
v2.7.0
|
|
5
32
|
======
|
|
6
33
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.5
|
|
2
2
|
Name: git-pandas
|
|
3
|
-
Version: 2.7.
|
|
3
|
+
Version: 2.7.1
|
|
4
4
|
Summary: A utility for interacting with data from git repositories as Pandas dataframes
|
|
5
5
|
Project-URL: Documentation, https://gitpandas.mcginniscommawill.com
|
|
6
6
|
Project-URL: Source, https://github.com/wdm0006/git-pandas
|
|
@@ -80,9 +80,9 @@ author = "Will McGinnis"
|
|
|
80
80
|
# built documents.
|
|
81
81
|
#
|
|
82
82
|
# The short X.Y version.
|
|
83
|
-
version = "2.
|
|
83
|
+
version = "2.7.1"
|
|
84
84
|
# The full version, including alpha/beta/rc tags.
|
|
85
|
-
release = "2.
|
|
85
|
+
release = "2.7.1"
|
|
86
86
|
|
|
87
87
|
# The language for content autogenerated by Sphinx. Refer to documentation
|
|
88
88
|
# for a list of supported languages.
|
|
@@ -114,7 +114,7 @@ Common Parameters
|
|
|
114
114
|
Most analysis methods support these filtering parameters:
|
|
115
115
|
|
|
116
116
|
* **branch**: Branch to analyze (defaults to repository's default branch)
|
|
117
|
-
* **limit**: Maximum number of commits to analyze
|
|
117
|
+
* **limit**: Maximum number of commits to analyze; must be ``None`` or a non-negative integer (excluding booleans). Invalid values raise ``ValueError``; zero selects no commits
|
|
118
118
|
* **days**: Limit analysis to last N days
|
|
119
119
|
* **ignore_globs**: List of glob patterns for files to ignore
|
|
120
120
|
* **include_globs**: List of glob patterns for files to include
|
|
@@ -135,7 +135,7 @@ Common Parameters
|
|
|
135
135
|
Most analysis methods support these filtering parameters:
|
|
136
136
|
|
|
137
137
|
* **branch**: Branch to analyze (defaults to repository's default branch)
|
|
138
|
-
* **limit**: Maximum number of commits to analyze
|
|
138
|
+
* **limit**: Maximum number of commits to analyze; must be ``None`` or a non-negative integer (excluding booleans). Invalid values raise ``ValueError``; zero selects no commits
|
|
139
139
|
* **days**: Limit analysis to last N days
|
|
140
140
|
* **ignore_globs**: List of glob patterns for files to ignore
|
|
141
141
|
* **include_globs**: List of glob patterns for files to include
|
|
@@ -0,0 +1,557 @@
|
|
|
1
|
+
.. This page is generated: python docs/source/schema_contracts.py > docs/source/result_schemas.rst
|
|
2
|
+
|
|
3
|
+
Result schemas
|
|
4
|
+
==============
|
|
5
|
+
|
|
6
|
+
Exact column order, index levels and dtype kinds of populated results, pinned by
|
|
7
|
+
``tests/test_schema_contracts.py``. Kinds are ``str``, ``int``, ``float``, ``bool`` and ``datetime``
|
|
8
|
+
(UTC); they hold on pandas 2 and 3. Shapes differ between ``Repository`` and ``ProjectDirectory`` and
|
|
9
|
+
between populated and empty results; both are listed as they are today.
|
|
10
|
+
|
|
11
|
+
Repository.commit_history()
|
|
12
|
+
---------------------------
|
|
13
|
+
|
|
14
|
+
Index: ``date`` (datetime)
|
|
15
|
+
|
|
16
|
+
UTC ``date`` index; includes a ``branch`` column.
|
|
17
|
+
|
|
18
|
+
.. list-table::
|
|
19
|
+
:header-rows: 1
|
|
20
|
+
|
|
21
|
+
* - Column
|
|
22
|
+
- Kind
|
|
23
|
+
* - ``author``
|
|
24
|
+
- str
|
|
25
|
+
* - ``committer``
|
|
26
|
+
- str
|
|
27
|
+
* - ``message``
|
|
28
|
+
- str
|
|
29
|
+
* - ``commit_sha``
|
|
30
|
+
- str
|
|
31
|
+
* - ``lines``
|
|
32
|
+
- int
|
|
33
|
+
* - ``insertions``
|
|
34
|
+
- int
|
|
35
|
+
* - ``deletions``
|
|
36
|
+
- int
|
|
37
|
+
* - ``net``
|
|
38
|
+
- int
|
|
39
|
+
* - ``branch``
|
|
40
|
+
- str
|
|
41
|
+
* - ``repository``
|
|
42
|
+
- str
|
|
43
|
+
|
|
44
|
+
ProjectDirectory.commit_history()
|
|
45
|
+
---------------------------------
|
|
46
|
+
|
|
47
|
+
Index: ``(unnamed integer index)`` (int)
|
|
48
|
+
|
|
49
|
+
``date`` is a column; the integer index restarts at 0 for each repository; no ``branch`` column.
|
|
50
|
+
|
|
51
|
+
.. list-table::
|
|
52
|
+
:header-rows: 1
|
|
53
|
+
|
|
54
|
+
* - Column
|
|
55
|
+
- Kind
|
|
56
|
+
* - ``repository``
|
|
57
|
+
- str
|
|
58
|
+
* - ``author``
|
|
59
|
+
- str
|
|
60
|
+
* - ``committer``
|
|
61
|
+
- str
|
|
62
|
+
* - ``date``
|
|
63
|
+
- datetime
|
|
64
|
+
* - ``message``
|
|
65
|
+
- str
|
|
66
|
+
* - ``commit_sha``
|
|
67
|
+
- str
|
|
68
|
+
* - ``lines``
|
|
69
|
+
- int
|
|
70
|
+
* - ``insertions``
|
|
71
|
+
- int
|
|
72
|
+
* - ``deletions``
|
|
73
|
+
- int
|
|
74
|
+
* - ``net``
|
|
75
|
+
- int
|
|
76
|
+
|
|
77
|
+
Repository.file_change_history()
|
|
78
|
+
--------------------------------
|
|
79
|
+
|
|
80
|
+
Index: ``date`` (datetime)
|
|
81
|
+
|
|
82
|
+
``date`` is both the index and a column.
|
|
83
|
+
|
|
84
|
+
.. list-table::
|
|
85
|
+
:header-rows: 1
|
|
86
|
+
|
|
87
|
+
* - Column
|
|
88
|
+
- Kind
|
|
89
|
+
* - ``filename``
|
|
90
|
+
- str
|
|
91
|
+
* - ``insertions``
|
|
92
|
+
- int
|
|
93
|
+
* - ``deletions``
|
|
94
|
+
- int
|
|
95
|
+
* - ``lines``
|
|
96
|
+
- int
|
|
97
|
+
* - ``message``
|
|
98
|
+
- str
|
|
99
|
+
* - ``committer``
|
|
100
|
+
- str
|
|
101
|
+
* - ``author``
|
|
102
|
+
- str
|
|
103
|
+
* - ``date``
|
|
104
|
+
- datetime
|
|
105
|
+
* - ``repository``
|
|
106
|
+
- str
|
|
107
|
+
|
|
108
|
+
ProjectDirectory.file_change_history()
|
|
109
|
+
--------------------------------------
|
|
110
|
+
|
|
111
|
+
Index: ``(unnamed integer index)`` (int)
|
|
112
|
+
|
|
113
|
+
No ``lines`` column; ``date`` is a column on a default integer index.
|
|
114
|
+
|
|
115
|
+
.. list-table::
|
|
116
|
+
:header-rows: 1
|
|
117
|
+
|
|
118
|
+
* - Column
|
|
119
|
+
- Kind
|
|
120
|
+
* - ``repository``
|
|
121
|
+
- str
|
|
122
|
+
* - ``date``
|
|
123
|
+
- datetime
|
|
124
|
+
* - ``author``
|
|
125
|
+
- str
|
|
126
|
+
* - ``committer``
|
|
127
|
+
- str
|
|
128
|
+
* - ``message``
|
|
129
|
+
- str
|
|
130
|
+
* - ``filename``
|
|
131
|
+
- str
|
|
132
|
+
* - ``insertions``
|
|
133
|
+
- int
|
|
134
|
+
* - ``deletions``
|
|
135
|
+
- int
|
|
136
|
+
|
|
137
|
+
Repository.revs()
|
|
138
|
+
-----------------
|
|
139
|
+
|
|
140
|
+
Index: ``(unnamed integer index)`` (int)
|
|
141
|
+
|
|
142
|
+
``date`` is epoch seconds stored as an integer column.
|
|
143
|
+
|
|
144
|
+
.. list-table::
|
|
145
|
+
:header-rows: 1
|
|
146
|
+
|
|
147
|
+
* - Column
|
|
148
|
+
- Kind
|
|
149
|
+
* - ``date``
|
|
150
|
+
- int
|
|
151
|
+
* - ``rev``
|
|
152
|
+
- str
|
|
153
|
+
* - ``repository``
|
|
154
|
+
- str
|
|
155
|
+
|
|
156
|
+
ProjectDirectory.revs()
|
|
157
|
+
-----------------------
|
|
158
|
+
|
|
159
|
+
Index: ``(unnamed integer index)`` (int)
|
|
160
|
+
|
|
161
|
+
``date`` is epoch seconds stored as a float column.
|
|
162
|
+
|
|
163
|
+
.. list-table::
|
|
164
|
+
:header-rows: 1
|
|
165
|
+
|
|
166
|
+
* - Column
|
|
167
|
+
- Kind
|
|
168
|
+
* - ``repository``
|
|
169
|
+
- str
|
|
170
|
+
* - ``rev``
|
|
171
|
+
- str
|
|
172
|
+
* - ``date``
|
|
173
|
+
- float
|
|
174
|
+
|
|
175
|
+
Repository.blame(by='repository')
|
|
176
|
+
---------------------------------
|
|
177
|
+
|
|
178
|
+
Index: ``committer`` (str)
|
|
179
|
+
|
|
180
|
+
.. list-table::
|
|
181
|
+
:header-rows: 1
|
|
182
|
+
|
|
183
|
+
* - Column
|
|
184
|
+
- Kind
|
|
185
|
+
* - ``loc``
|
|
186
|
+
- int
|
|
187
|
+
* - ``repository``
|
|
188
|
+
- str
|
|
189
|
+
|
|
190
|
+
ProjectDirectory.blame(by='repository')
|
|
191
|
+
---------------------------------------
|
|
192
|
+
|
|
193
|
+
Index: ``committer`` (str)
|
|
194
|
+
|
|
195
|
+
No ``repository`` column.
|
|
196
|
+
|
|
197
|
+
.. list-table::
|
|
198
|
+
:header-rows: 1
|
|
199
|
+
|
|
200
|
+
* - Column
|
|
201
|
+
- Kind
|
|
202
|
+
* - ``loc``
|
|
203
|
+
- int
|
|
204
|
+
|
|
205
|
+
Repository.blame(by='file')
|
|
206
|
+
---------------------------
|
|
207
|
+
|
|
208
|
+
Index: ``committer`` (str), ``file`` (str)
|
|
209
|
+
|
|
210
|
+
.. list-table::
|
|
211
|
+
:header-rows: 1
|
|
212
|
+
|
|
213
|
+
* - Column
|
|
214
|
+
- Kind
|
|
215
|
+
* - ``loc``
|
|
216
|
+
- int
|
|
217
|
+
* - ``repository``
|
|
218
|
+
- str
|
|
219
|
+
|
|
220
|
+
ProjectDirectory.blame(by='file')
|
|
221
|
+
---------------------------------
|
|
222
|
+
|
|
223
|
+
Index: ``committer`` (str), ``file`` (str), ``repository`` (str)
|
|
224
|
+
|
|
225
|
+
``repository`` is an index level, not a column.
|
|
226
|
+
|
|
227
|
+
.. list-table::
|
|
228
|
+
:header-rows: 1
|
|
229
|
+
|
|
230
|
+
* - Column
|
|
231
|
+
- Kind
|
|
232
|
+
* - ``loc``
|
|
233
|
+
- int
|
|
234
|
+
|
|
235
|
+
Repository.tags()
|
|
236
|
+
-----------------
|
|
237
|
+
|
|
238
|
+
Index: ``tag_date`` (datetime), ``commit_date`` (datetime)
|
|
239
|
+
|
|
240
|
+
.. list-table::
|
|
241
|
+
:header-rows: 1
|
|
242
|
+
|
|
243
|
+
* - Column
|
|
244
|
+
- Kind
|
|
245
|
+
* - ``tag``
|
|
246
|
+
- str
|
|
247
|
+
* - ``annotated``
|
|
248
|
+
- bool
|
|
249
|
+
* - ``annotation``
|
|
250
|
+
- nullable_str
|
|
251
|
+
* - ``tag_sha``
|
|
252
|
+
- nullable_str
|
|
253
|
+
* - ``commit_sha``
|
|
254
|
+
- str
|
|
255
|
+
* - ``repository``
|
|
256
|
+
- str
|
|
257
|
+
|
|
258
|
+
ProjectDirectory.tags()
|
|
259
|
+
-----------------------
|
|
260
|
+
|
|
261
|
+
Index: ``tag_date`` (datetime), ``commit_date`` (datetime)
|
|
262
|
+
|
|
263
|
+
.. list-table::
|
|
264
|
+
:header-rows: 1
|
|
265
|
+
|
|
266
|
+
* - Column
|
|
267
|
+
- Kind
|
|
268
|
+
* - ``tag``
|
|
269
|
+
- str
|
|
270
|
+
* - ``annotated``
|
|
271
|
+
- bool
|
|
272
|
+
* - ``annotation``
|
|
273
|
+
- nullable_str
|
|
274
|
+
* - ``tag_sha``
|
|
275
|
+
- nullable_str
|
|
276
|
+
* - ``commit_sha``
|
|
277
|
+
- str
|
|
278
|
+
* - ``repository``
|
|
279
|
+
- str
|
|
280
|
+
|
|
281
|
+
Repository.commits_in_tags()
|
|
282
|
+
----------------------------
|
|
283
|
+
|
|
284
|
+
Index: ``tag_date`` (datetime), ``commit_date`` (datetime)
|
|
285
|
+
|
|
286
|
+
.. list-table::
|
|
287
|
+
:header-rows: 1
|
|
288
|
+
|
|
289
|
+
* - Column
|
|
290
|
+
- Kind
|
|
291
|
+
* - ``commit_sha``
|
|
292
|
+
- str
|
|
293
|
+
* - ``tag``
|
|
294
|
+
- str
|
|
295
|
+
* - ``repository``
|
|
296
|
+
- str
|
|
297
|
+
|
|
298
|
+
ProjectDirectory.commits_in_tags()
|
|
299
|
+
----------------------------------
|
|
300
|
+
|
|
301
|
+
Index: ``tag_date`` (datetime), ``commit_date`` (datetime)
|
|
302
|
+
|
|
303
|
+
.. list-table::
|
|
304
|
+
:header-rows: 1
|
|
305
|
+
|
|
306
|
+
* - Column
|
|
307
|
+
- Kind
|
|
308
|
+
* - ``commit_sha``
|
|
309
|
+
- str
|
|
310
|
+
* - ``tag``
|
|
311
|
+
- str
|
|
312
|
+
* - ``repository``
|
|
313
|
+
- str
|
|
314
|
+
|
|
315
|
+
Repository.punchcard()
|
|
316
|
+
----------------------
|
|
317
|
+
|
|
318
|
+
Index: ``(unnamed integer index)`` (int)
|
|
319
|
+
|
|
320
|
+
.. list-table::
|
|
321
|
+
:header-rows: 1
|
|
322
|
+
|
|
323
|
+
* - Column
|
|
324
|
+
- Kind
|
|
325
|
+
* - ``hour_of_day``
|
|
326
|
+
- int
|
|
327
|
+
* - ``day_of_week``
|
|
328
|
+
- int
|
|
329
|
+
* - ``lines``
|
|
330
|
+
- int
|
|
331
|
+
* - ``insertions``
|
|
332
|
+
- int
|
|
333
|
+
* - ``deletions``
|
|
334
|
+
- int
|
|
335
|
+
* - ``net``
|
|
336
|
+
- int
|
|
337
|
+
|
|
338
|
+
ProjectDirectory.punchcard()
|
|
339
|
+
----------------------------
|
|
340
|
+
|
|
341
|
+
Index: ``(unnamed integer index)`` (int)
|
|
342
|
+
|
|
343
|
+
.. list-table::
|
|
344
|
+
:header-rows: 1
|
|
345
|
+
|
|
346
|
+
* - Column
|
|
347
|
+
- Kind
|
|
348
|
+
* - ``hour_of_day``
|
|
349
|
+
- int
|
|
350
|
+
* - ``day_of_week``
|
|
351
|
+
- int
|
|
352
|
+
* - ``lines``
|
|
353
|
+
- int
|
|
354
|
+
* - ``insertions``
|
|
355
|
+
- int
|
|
356
|
+
* - ``deletions``
|
|
357
|
+
- int
|
|
358
|
+
* - ``net``
|
|
359
|
+
- int
|
|
360
|
+
|
|
361
|
+
Repository.hours_estimate()
|
|
362
|
+
---------------------------
|
|
363
|
+
|
|
364
|
+
Index: ``(unnamed integer index)`` (int)
|
|
365
|
+
|
|
366
|
+
.. list-table::
|
|
367
|
+
:header-rows: 1
|
|
368
|
+
|
|
369
|
+
* - Column
|
|
370
|
+
- Kind
|
|
371
|
+
* - ``committer``
|
|
372
|
+
- str
|
|
373
|
+
* - ``hours``
|
|
374
|
+
- float
|
|
375
|
+
* - ``repository``
|
|
376
|
+
- str
|
|
377
|
+
|
|
378
|
+
ProjectDirectory.hours_estimate()
|
|
379
|
+
---------------------------------
|
|
380
|
+
|
|
381
|
+
Index: ``(unnamed integer index)`` (int)
|
|
382
|
+
|
|
383
|
+
.. list-table::
|
|
384
|
+
:header-rows: 1
|
|
385
|
+
|
|
386
|
+
* - Column
|
|
387
|
+
- Kind
|
|
388
|
+
* - ``committer``
|
|
389
|
+
- str
|
|
390
|
+
* - ``hours``
|
|
391
|
+
- float
|
|
392
|
+
* - ``repository``
|
|
393
|
+
- str
|
|
394
|
+
|
|
395
|
+
Repository.file_detail()
|
|
396
|
+
------------------------
|
|
397
|
+
|
|
398
|
+
Index: ``(unnamed integer index)`` (int)
|
|
399
|
+
|
|
400
|
+
``file`` is a column.
|
|
401
|
+
|
|
402
|
+
.. list-table::
|
|
403
|
+
:header-rows: 1
|
|
404
|
+
|
|
405
|
+
* - Column
|
|
406
|
+
- Kind
|
|
407
|
+
* - ``file``
|
|
408
|
+
- str
|
|
409
|
+
* - ``loc``
|
|
410
|
+
- int
|
|
411
|
+
* - ``file_owner``
|
|
412
|
+
- str
|
|
413
|
+
* - ``ext``
|
|
414
|
+
- str
|
|
415
|
+
* - ``last_edit_date``
|
|
416
|
+
- datetime
|
|
417
|
+
* - ``repository``
|
|
418
|
+
- str
|
|
419
|
+
|
|
420
|
+
ProjectDirectory.file_detail()
|
|
421
|
+
------------------------------
|
|
422
|
+
|
|
423
|
+
Index: ``file`` (str), ``repository`` (str)
|
|
424
|
+
|
|
425
|
+
``(file, repository)`` index; a stray ``index`` column of row numbers leaks through.
|
|
426
|
+
|
|
427
|
+
.. list-table::
|
|
428
|
+
:header-rows: 1
|
|
429
|
+
|
|
430
|
+
* - Column
|
|
431
|
+
- Kind
|
|
432
|
+
* - ``index``
|
|
433
|
+
- int
|
|
434
|
+
* - ``loc``
|
|
435
|
+
- int
|
|
436
|
+
* - ``file_owner``
|
|
437
|
+
- str
|
|
438
|
+
* - ``ext``
|
|
439
|
+
- str
|
|
440
|
+
* - ``last_edit_date``
|
|
441
|
+
- datetime
|
|
442
|
+
|
|
443
|
+
Repository.bus_factor(by='repository')
|
|
444
|
+
--------------------------------------
|
|
445
|
+
|
|
446
|
+
Index: ``(unnamed integer index)`` (int)
|
|
447
|
+
|
|
448
|
+
.. list-table::
|
|
449
|
+
:header-rows: 1
|
|
450
|
+
|
|
451
|
+
* - Column
|
|
452
|
+
- Kind
|
|
453
|
+
* - ``repository``
|
|
454
|
+
- str
|
|
455
|
+
* - ``bus factor``
|
|
456
|
+
- int
|
|
457
|
+
|
|
458
|
+
ProjectDirectory.bus_factor(by='projectd')
|
|
459
|
+
------------------------------------------
|
|
460
|
+
|
|
461
|
+
Index: ``(unnamed integer index)`` (int)
|
|
462
|
+
|
|
463
|
+
Default grouping; the first column is named ``projectd``.
|
|
464
|
+
|
|
465
|
+
.. list-table::
|
|
466
|
+
:header-rows: 1
|
|
467
|
+
|
|
468
|
+
* - Column
|
|
469
|
+
- Kind
|
|
470
|
+
* - ``projectd``
|
|
471
|
+
- str
|
|
472
|
+
* - ``bus factor``
|
|
473
|
+
- int
|
|
474
|
+
|
|
475
|
+
Repository.bus_factor(by='file')
|
|
476
|
+
--------------------------------
|
|
477
|
+
|
|
478
|
+
Index: ``(unnamed integer index)`` (int)
|
|
479
|
+
|
|
480
|
+
.. list-table::
|
|
481
|
+
:header-rows: 1
|
|
482
|
+
|
|
483
|
+
* - Column
|
|
484
|
+
- Kind
|
|
485
|
+
* - ``file``
|
|
486
|
+
- str
|
|
487
|
+
* - ``bus factor``
|
|
488
|
+
- int
|
|
489
|
+
* - ``repository``
|
|
490
|
+
- str
|
|
491
|
+
|
|
492
|
+
ProjectDirectory.bus_factor(by='file')
|
|
493
|
+
--------------------------------------
|
|
494
|
+
|
|
495
|
+
Index: ``(unnamed integer index)`` (int)
|
|
496
|
+
|
|
497
|
+
.. list-table::
|
|
498
|
+
:header-rows: 1
|
|
499
|
+
|
|
500
|
+
* - Column
|
|
501
|
+
- Kind
|
|
502
|
+
* - ``file``
|
|
503
|
+
- str
|
|
504
|
+
* - ``bus factor``
|
|
505
|
+
- int
|
|
506
|
+
* - ``repository``
|
|
507
|
+
- str
|
|
508
|
+
|
|
509
|
+
ProjectDirectory.bus_factor(by='repository')
|
|
510
|
+
--------------------------------------------
|
|
511
|
+
|
|
512
|
+
Index: ``(unnamed integer index)`` (int)
|
|
513
|
+
|
|
514
|
+
``bus factor`` has object dtype.
|
|
515
|
+
|
|
516
|
+
.. list-table::
|
|
517
|
+
:header-rows: 1
|
|
518
|
+
|
|
519
|
+
* - Column
|
|
520
|
+
- Kind
|
|
521
|
+
* - ``repository``
|
|
522
|
+
- str
|
|
523
|
+
* - ``bus factor``
|
|
524
|
+
- object
|
|
525
|
+
|
|
526
|
+
Empty results
|
|
527
|
+
-------------
|
|
528
|
+
|
|
529
|
+
Where the empty frame differs from the populated one:
|
|
530
|
+
|
|
531
|
+
.. list-table::
|
|
532
|
+
:header-rows: 1
|
|
533
|
+
|
|
534
|
+
* - Method
|
|
535
|
+
- Columns
|
|
536
|
+
- Index
|
|
537
|
+
* - Repository.file_change_history
|
|
538
|
+
- ``filename``, ``insertions``, ``deletions``, ``lines``, ``message``, ``committer``, ``author``
|
|
539
|
+
- (unnamed integer index)
|
|
540
|
+
* - Repository.revs
|
|
541
|
+
- ``date``, ``rev``
|
|
542
|
+
- (unnamed integer index)
|
|
543
|
+
* - Repository.tags
|
|
544
|
+
- ``tag_date``, ``commit_date``, ``tag``, ``annotated``, ``annotation``, ``tag_sha``, ``commit_sha``, ``repository``
|
|
545
|
+
- (unnamed integer index)
|
|
546
|
+
* - Repository.commits_in_tags
|
|
547
|
+
- ``commit_sha``, ``tag``, ``tag_date``, ``commit_date``
|
|
548
|
+
- (unnamed integer index)
|
|
549
|
+
* - ProjectDirectory.revs
|
|
550
|
+
- ``repository``, ``rev``
|
|
551
|
+
- (unnamed integer index)
|
|
552
|
+
* - ProjectDirectory.tags
|
|
553
|
+
- (none)
|
|
554
|
+
- (unnamed integer index)
|
|
555
|
+
* - ProjectDirectory.commits_in_tags
|
|
556
|
+
- ``commit_sha``, ``tag``, ``tag_date``, ``commit_date``
|
|
557
|
+
- (unnamed integer index)
|