gitflow-analytics 3.13.5__tar.gz → 3.13.6__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.
- {gitflow_analytics-3.13.5 → gitflow_analytics-3.13.6}/PKG-INFO +1 -1
- {gitflow_analytics-3.13.5 → gitflow_analytics-3.13.6}/pyproject.toml +3 -0
- {gitflow_analytics-3.13.5 → gitflow_analytics-3.13.6}/src/gitflow_analytics/_version.py +1 -1
- {gitflow_analytics-3.13.5 → gitflow_analytics-3.13.6}/src/gitflow_analytics/cli.py +124 -0
- {gitflow_analytics-3.13.5 → gitflow_analytics-3.13.6}/src/gitflow_analytics/core/git_auth.py +74 -0
- {gitflow_analytics-3.13.5 → gitflow_analytics-3.13.6}/src/gitflow_analytics/core/git_timeout_wrapper.py +8 -0
- {gitflow_analytics-3.13.5 → gitflow_analytics-3.13.6}/src/gitflow_analytics.egg-info/PKG-INFO +1 -1
- {gitflow_analytics-3.13.5 → gitflow_analytics-3.13.6}/tests/test_reports.py +0 -1
- {gitflow_analytics-3.13.5 → gitflow_analytics-3.13.6}/CHANGELOG.md +0 -0
- {gitflow_analytics-3.13.5 → gitflow_analytics-3.13.6}/CLAUDE.md +0 -0
- {gitflow_analytics-3.13.5 → gitflow_analytics-3.13.6}/LICENSE +0 -0
- {gitflow_analytics-3.13.5 → gitflow_analytics-3.13.6}/MANIFEST.in +0 -0
- {gitflow_analytics-3.13.5 → gitflow_analytics-3.13.6}/README.md +0 -0
- {gitflow_analytics-3.13.5 → gitflow_analytics-3.13.6}/docs/DOCUMENTATION-STANDARDS.md +0 -0
- {gitflow_analytics-3.13.5 → gitflow_analytics-3.13.6}/docs/README.md +0 -0
- {gitflow_analytics-3.13.5 → gitflow_analytics-3.13.6}/docs/SECURITY.md +0 -0
- {gitflow_analytics-3.13.5 → gitflow_analytics-3.13.6}/docs/STRUCTURE.md +0 -0
- {gitflow_analytics-3.13.5 → gitflow_analytics-3.13.6}/docs/_archive/README.md +0 -0
- {gitflow_analytics-3.13.5 → gitflow_analytics-3.13.6}/docs/_archive/analysis-files/ewtn-critical-security-report.md +0 -0
- {gitflow_analytics-3.13.5 → gitflow_analytics-3.13.6}/docs/_archive/old-logs/prompts/agent_engineer_20250915_085239_236.md +0 -0
- {gitflow_analytics-3.13.5 → gitflow_analytics-3.13.6}/docs/_archive/old-logs/prompts/agent_engineer_20250915_114233_697.md +0 -0
- {gitflow_analytics-3.13.5 → gitflow_analytics-3.13.6}/docs/_archive/old-logs/prompts/agent_engineer_20250915_115330_511.md +0 -0
- {gitflow_analytics-3.13.5 → gitflow_analytics-3.13.6}/docs/_archive/old-logs/prompts/agent_engineer_20250915_120516_669.md +0 -0
- {gitflow_analytics-3.13.5 → gitflow_analytics-3.13.6}/docs/_archive/old-logs/prompts/agent_engineer_20250915_124906_951.md +0 -0
- {gitflow_analytics-3.13.5 → gitflow_analytics-3.13.6}/docs/_archive/old-logs/prompts/agent_engineer_20250915_175540_671.md +0 -0
- {gitflow_analytics-3.13.5 → gitflow_analytics-3.13.6}/docs/_archive/old-logs/prompts/agent_engineer_20250915_214023_300.md +0 -0
- {gitflow_analytics-3.13.5 → gitflow_analytics-3.13.6}/docs/_archive/old-logs/prompts/agent_engineer_20250916_130622_510.md +0 -0
- {gitflow_analytics-3.13.5 → gitflow_analytics-3.13.6}/docs/_archive/old-logs/prompts/agent_ops_20250915_123323_419.md +0 -0
- {gitflow_analytics-3.13.5 → gitflow_analytics-3.13.6}/docs/_archive/old-logs/prompts/agent_ops_20250915_134446_128.md +0 -0
- {gitflow_analytics-3.13.5 → gitflow_analytics-3.13.6}/docs/_archive/old-logs/prompts/agent_ops_20250915_184656_725.md +0 -0
- {gitflow_analytics-3.13.5 → gitflow_analytics-3.13.6}/docs/_archive/old-logs/prompts/agent_research_20250915_091233_023.md +0 -0
- {gitflow_analytics-3.13.5 → gitflow_analytics-3.13.6}/docs/_archive/old-logs/prompts/agent_research_20250915_100404_339.md +0 -0
- {gitflow_analytics-3.13.5 → gitflow_analytics-3.13.6}/docs/_archive/old-logs/prompts/agent_research_20250915_110606_413.md +0 -0
- {gitflow_analytics-3.13.5 → gitflow_analytics-3.13.6}/docs/_archive/old-logs/prompts/system_prompt_20250915_084833_641.md +0 -0
- {gitflow_analytics-3.13.5 → gitflow_analytics-3.13.6}/docs/_archive/old-logs/prompts/system_prompt_20250915_090830_660.md +0 -0
- {gitflow_analytics-3.13.5 → gitflow_analytics-3.13.6}/docs/_archive/old-logs/prompts/system_prompt_20250916_130545_822.md +0 -0
- {gitflow_analytics-3.13.5 → gitflow_analytics-3.13.6}/docs/_archive/old-reports/output/database_qualitative_report_20250630_20250824.md +0 -0
- {gitflow_analytics-3.13.5 → gitflow_analytics-3.13.6}/docs/_archive/old-reports/output/narrative_report_20250630_20250824.md +0 -0
- {gitflow_analytics-3.13.5 → gitflow_analytics-3.13.6}/docs/_archive/old-reports/reports-24week/database_qualitative_report_20250303_20250817.md +0 -0
- {gitflow_analytics-3.13.5 → gitflow_analytics-3.13.6}/docs/_archive/old-reports/reports-24week/narrative_report_20250303_20250817.md +0 -0
- {gitflow_analytics-3.13.5 → gitflow_analytics-3.13.6}/docs/_archive/old-reports/test-ewtn-reports/narrative_report_20250810.md +0 -0
- {gitflow_analytics-3.13.5 → gitflow_analytics-3.13.6}/docs/_archive/old-reports/test-reports/database_qualitative_report_20250908_20250914.md +0 -0
- {gitflow_analytics-3.13.5 → gitflow_analytics-3.13.6}/docs/_archive/old-reports/test-reports/narrative_report_20250908_20250914.md +0 -0
- {gitflow_analytics-3.13.5 → gitflow_analytics-3.13.6}/docs/_archive/old-reports/test-weekly-reports/database_qualitative_report_20250623_20250817.md +0 -0
- {gitflow_analytics-3.13.5 → gitflow_analytics-3.13.6}/docs/_archive/old-reports/test-weekly-reports/narrative_report_20250623_20250817.md +0 -0
- {gitflow_analytics-3.13.5 → gitflow_analytics-3.13.6}/docs/_archive/temp-files/CHANGELOG_INTERACTIVE_LAUNCHER.md +0 -0
- {gitflow_analytics-3.13.5 → gitflow_analytics-3.13.6}/docs/_archive/temp-files/CLEANUP_SUMMARY-20250929.md +0 -0
- {gitflow_analytics-3.13.5 → gitflow_analytics-3.13.6}/docs/_archive/temp-files/FEATURES_READY_FOR_TESTING.md +0 -0
- {gitflow_analytics-3.13.5 → gitflow_analytics-3.13.6}/docs/_archive/temp-files/FIX_SUMMARY.md +0 -0
- {gitflow_analytics-3.13.5 → gitflow_analytics-3.13.6}/docs/_archive/temp-files/IMPLEMENTATION_SUMMARY.md +0 -0
- {gitflow_analytics-3.13.5 → gitflow_analytics-3.13.6}/docs/_archive/temp-files/PROGRESS_TRACKING_FIXES.md +0 -0
- {gitflow_analytics-3.13.5 → gitflow_analytics-3.13.6}/docs/_archive/temp-files/PROJECT_CLEANUP_REPORT-20250929.md +0 -0
- {gitflow_analytics-3.13.5 → gitflow_analytics-3.13.6}/docs/_archive/temp-files/README.md +0 -0
- {gitflow_analytics-3.13.5 → gitflow_analytics-3.13.6}/docs/_archive/temp-files/STORY_POINTS_CONFIG_SUMMARY-archived.md +0 -0
- {gitflow_analytics-3.13.5 → gitflow_analytics-3.13.6}/docs/_archive/temp-files/SYNTAX_ERROR_FIX.md +0 -0
- {gitflow_analytics-3.13.5 → gitflow_analytics-3.13.6}/docs/_archive/temp-files/TEST_REPORT_GIT_CLONING.md +0 -0
- {gitflow_analytics-3.13.5 → gitflow_analytics-3.13.6}/docs/_archive/temp-files/TIMEZONE_BUG_RESOLUTION.md +0 -0
- {gitflow_analytics-3.13.5 → gitflow_analytics-3.13.6}/docs/_archive/temp-files/USAGE_EXAMPLES-archived.md +0 -0
- {gitflow_analytics-3.13.5 → gitflow_analytics-3.13.6}/docs/_archive/temp-files/code_analysis_report.md +0 -0
- {gitflow_analytics-3.13.5 → gitflow_analytics-3.13.6}/docs/architecture/README.md +0 -0
- {gitflow_analytics-3.13.5 → gitflow_analytics-3.13.6}/docs/architecture/branch-analysis-optimization.md +0 -0
- {gitflow_analytics-3.13.5 → gitflow_analytics-3.13.6}/docs/architecture/caching-strategy.md +0 -0
- {gitflow_analytics-3.13.5 → gitflow_analytics-3.13.6}/docs/architecture/llm-classifier-refactoring.md +0 -0
- {gitflow_analytics-3.13.5 → gitflow_analytics-3.13.6}/docs/architecture/ml-pipeline.md +0 -0
- {gitflow_analytics-3.13.5 → gitflow_analytics-3.13.6}/docs/configuration/configuration.md +0 -0
- {gitflow_analytics-3.13.5 → gitflow_analytics-3.13.6}/docs/deployment/README.md +0 -0
- {gitflow_analytics-3.13.5 → gitflow_analytics-3.13.6}/docs/design/README.md +0 -0
- {gitflow_analytics-3.13.5 → gitflow_analytics-3.13.6}/docs/design/circuit-breaker-implementation.md +0 -0
- {gitflow_analytics-3.13.5 → gitflow_analytics-3.13.6}/docs/design/commit-classification-design.md +0 -0
- {gitflow_analytics-3.13.5 → gitflow_analytics-3.13.6}/docs/design/git_pm_correlation_design.md +0 -0
- {gitflow_analytics-3.13.5 → gitflow_analytics-3.13.6}/docs/design/platform-agnostic-pm-framework.md +0 -0
- {gitflow_analytics-3.13.5 → gitflow_analytics-3.13.6}/docs/design/qualitative_data_extraction.md +0 -0
- {gitflow_analytics-3.13.5 → gitflow_analytics-3.13.6}/docs/developer/README.md +0 -0
- {gitflow_analytics-3.13.5 → gitflow_analytics-3.13.6}/docs/developer/contributing.md +0 -0
- {gitflow_analytics-3.13.5 → gitflow_analytics-3.13.6}/docs/developer/development-setup.md +0 -0
- {gitflow_analytics-3.13.5 → gitflow_analytics-3.13.6}/docs/developer/project-organization.md +0 -0
- {gitflow_analytics-3.13.5 → gitflow_analytics-3.13.6}/docs/developer/refactoring-guide.md +0 -0
- {gitflow_analytics-3.13.5 → gitflow_analytics-3.13.6}/docs/developer/training-guide.md +0 -0
- {gitflow_analytics-3.13.5 → gitflow_analytics-3.13.6}/docs/examples/README.md +0 -0
- {gitflow_analytics-3.13.5 → gitflow_analytics-3.13.6}/docs/examples/interactive-launcher-examples.md +0 -0
- {gitflow_analytics-3.13.5 → gitflow_analytics-3.13.6}/docs/examples/story-points-configuration.md +0 -0
- {gitflow_analytics-3.13.5 → gitflow_analytics-3.13.6}/docs/getting-started/README.md +0 -0
- {gitflow_analytics-3.13.5 → gitflow_analytics-3.13.6}/docs/getting-started/first-analysis.md +0 -0
- {gitflow_analytics-3.13.5 → gitflow_analytics-3.13.6}/docs/getting-started/installation.md +0 -0
- {gitflow_analytics-3.13.5 → gitflow_analytics-3.13.6}/docs/getting-started/quickstart.md +0 -0
- {gitflow_analytics-3.13.5 → gitflow_analytics-3.13.6}/docs/guides/LLM_CLASSIFICATION_GUIDE.md +0 -0
- {gitflow_analytics-3.13.5 → gitflow_analytics-3.13.6}/docs/guides/README.md +0 -0
- {gitflow_analytics-3.13.5 → gitflow_analytics-3.13.6}/docs/guides/chatgpt-setup.md +0 -0
- {gitflow_analytics-3.13.5 → gitflow_analytics-3.13.6}/docs/guides/identity-resolution-enhanced.md +0 -0
- {gitflow_analytics-3.13.5 → gitflow_analytics-3.13.6}/docs/guides/interactive-launcher.md +0 -0
- {gitflow_analytics-3.13.5 → gitflow_analytics-3.13.6}/docs/guides/managing-aliases.md +0 -0
- {gitflow_analytics-3.13.5 → gitflow_analytics-3.13.6}/docs/guides/ml-categorization.md +0 -0
- {gitflow_analytics-3.13.5 → gitflow_analytics-3.13.6}/docs/guides/pm-platform-setup.md +0 -0
- {gitflow_analytics-3.13.5 → gitflow_analytics-3.13.6}/docs/guides/troubleshooting.md +0 -0
- {gitflow_analytics-3.13.5 → gitflow_analytics-3.13.6}/docs/quick-reference/launcher-and-identity.md +0 -0
- {gitflow_analytics-3.13.5 → gitflow_analytics-3.13.6}/docs/reference/README.md +0 -0
- {gitflow_analytics-3.13.5 → gitflow_analytics-3.13.6}/docs/reference/cache-system.md +0 -0
- {gitflow_analytics-3.13.5 → gitflow_analytics-3.13.6}/docs/reference/cli-commands.md +0 -0
- {gitflow_analytics-3.13.5 → gitflow_analytics-3.13.6}/docs/reference/configuration-schema.md +0 -0
- {gitflow_analytics-3.13.5 → gitflow_analytics-3.13.6}/docs/reference/json-export-schema.md +0 -0
- {gitflow_analytics-3.13.5 → gitflow_analytics-3.13.6}/setup.cfg +0 -0
- {gitflow_analytics-3.13.5 → gitflow_analytics-3.13.6}/src/gitflow_analytics/__init__.py +0 -0
- {gitflow_analytics-3.13.5 → gitflow_analytics-3.13.6}/src/gitflow_analytics/classification/__init__.py +0 -0
- {gitflow_analytics-3.13.5 → gitflow_analytics-3.13.6}/src/gitflow_analytics/classification/batch_classifier.py +0 -0
- {gitflow_analytics-3.13.5 → gitflow_analytics-3.13.6}/src/gitflow_analytics/classification/classifier.py +0 -0
- {gitflow_analytics-3.13.5 → gitflow_analytics-3.13.6}/src/gitflow_analytics/classification/feature_extractor.py +0 -0
- {gitflow_analytics-3.13.5 → gitflow_analytics-3.13.6}/src/gitflow_analytics/classification/linguist_analyzer.py +0 -0
- {gitflow_analytics-3.13.5 → gitflow_analytics-3.13.6}/src/gitflow_analytics/classification/model.py +0 -0
- {gitflow_analytics-3.13.5 → gitflow_analytics-3.13.6}/src/gitflow_analytics/cli_wizards/__init__.py +0 -0
- {gitflow_analytics-3.13.5 → gitflow_analytics-3.13.6}/src/gitflow_analytics/cli_wizards/install_wizard.py +0 -0
- {gitflow_analytics-3.13.5 → gitflow_analytics-3.13.6}/src/gitflow_analytics/cli_wizards/menu.py +0 -0
- {gitflow_analytics-3.13.5 → gitflow_analytics-3.13.6}/src/gitflow_analytics/cli_wizards/run_launcher.py +0 -0
- {gitflow_analytics-3.13.5 → gitflow_analytics-3.13.6}/src/gitflow_analytics/config/__init__.py +0 -0
- {gitflow_analytics-3.13.5 → gitflow_analytics-3.13.6}/src/gitflow_analytics/config/aliases.py +0 -0
- {gitflow_analytics-3.13.5 → gitflow_analytics-3.13.6}/src/gitflow_analytics/config/errors.py +0 -0
- {gitflow_analytics-3.13.5 → gitflow_analytics-3.13.6}/src/gitflow_analytics/config/loader.py +0 -0
- {gitflow_analytics-3.13.5 → gitflow_analytics-3.13.6}/src/gitflow_analytics/config/profiles.py +0 -0
- {gitflow_analytics-3.13.5 → gitflow_analytics-3.13.6}/src/gitflow_analytics/config/repository.py +0 -0
- {gitflow_analytics-3.13.5 → gitflow_analytics-3.13.6}/src/gitflow_analytics/config/schema.py +0 -0
- {gitflow_analytics-3.13.5 → gitflow_analytics-3.13.6}/src/gitflow_analytics/config/validator.py +0 -0
- {gitflow_analytics-3.13.5 → gitflow_analytics-3.13.6}/src/gitflow_analytics/config.py +0 -0
- {gitflow_analytics-3.13.5 → gitflow_analytics-3.13.6}/src/gitflow_analytics/constants.py +0 -0
- {gitflow_analytics-3.13.5 → gitflow_analytics-3.13.6}/src/gitflow_analytics/core/__init__.py +0 -0
- {gitflow_analytics-3.13.5 → gitflow_analytics-3.13.6}/src/gitflow_analytics/core/analyzer.py +0 -0
- {gitflow_analytics-3.13.5 → gitflow_analytics-3.13.6}/src/gitflow_analytics/core/branch_mapper.py +0 -0
- {gitflow_analytics-3.13.5 → gitflow_analytics-3.13.6}/src/gitflow_analytics/core/cache.py +0 -0
- {gitflow_analytics-3.13.5 → gitflow_analytics-3.13.6}/src/gitflow_analytics/core/data_fetcher.py +0 -0
- {gitflow_analytics-3.13.5 → gitflow_analytics-3.13.6}/src/gitflow_analytics/core/identity.py +0 -0
- {gitflow_analytics-3.13.5 → gitflow_analytics-3.13.6}/src/gitflow_analytics/core/metrics_storage.py +0 -0
- {gitflow_analytics-3.13.5 → gitflow_analytics-3.13.6}/src/gitflow_analytics/core/progress.py +0 -0
- {gitflow_analytics-3.13.5 → gitflow_analytics-3.13.6}/src/gitflow_analytics/core/schema_version.py +0 -0
- {gitflow_analytics-3.13.5 → gitflow_analytics-3.13.6}/src/gitflow_analytics/core/subprocess_git.py +0 -0
- {gitflow_analytics-3.13.5 → gitflow_analytics-3.13.6}/src/gitflow_analytics/extractors/__init__.py +0 -0
- {gitflow_analytics-3.13.5 → gitflow_analytics-3.13.6}/src/gitflow_analytics/extractors/base.py +0 -0
- {gitflow_analytics-3.13.5 → gitflow_analytics-3.13.6}/src/gitflow_analytics/extractors/ml_tickets.py +0 -0
- {gitflow_analytics-3.13.5 → gitflow_analytics-3.13.6}/src/gitflow_analytics/extractors/story_points.py +0 -0
- {gitflow_analytics-3.13.5 → gitflow_analytics-3.13.6}/src/gitflow_analytics/extractors/tickets.py +0 -0
- {gitflow_analytics-3.13.5 → gitflow_analytics-3.13.6}/src/gitflow_analytics/identity_llm/__init__.py +0 -0
- {gitflow_analytics-3.13.5 → gitflow_analytics-3.13.6}/src/gitflow_analytics/identity_llm/analysis_pass.py +0 -0
- {gitflow_analytics-3.13.5 → gitflow_analytics-3.13.6}/src/gitflow_analytics/identity_llm/analyzer.py +0 -0
- {gitflow_analytics-3.13.5 → gitflow_analytics-3.13.6}/src/gitflow_analytics/identity_llm/models.py +0 -0
- {gitflow_analytics-3.13.5 → gitflow_analytics-3.13.6}/src/gitflow_analytics/integrations/__init__.py +0 -0
- {gitflow_analytics-3.13.5 → gitflow_analytics-3.13.6}/src/gitflow_analytics/integrations/github_integration.py +0 -0
- {gitflow_analytics-3.13.5 → gitflow_analytics-3.13.6}/src/gitflow_analytics/integrations/jira_integration.py +0 -0
- {gitflow_analytics-3.13.5 → gitflow_analytics-3.13.6}/src/gitflow_analytics/integrations/orchestrator.py +0 -0
- {gitflow_analytics-3.13.5 → gitflow_analytics-3.13.6}/src/gitflow_analytics/metrics/__init__.py +0 -0
- {gitflow_analytics-3.13.5 → gitflow_analytics-3.13.6}/src/gitflow_analytics/metrics/activity_scoring.py +0 -0
- {gitflow_analytics-3.13.5 → gitflow_analytics-3.13.6}/src/gitflow_analytics/metrics/branch_health.py +0 -0
- {gitflow_analytics-3.13.5 → gitflow_analytics-3.13.6}/src/gitflow_analytics/metrics/dora.py +0 -0
- {gitflow_analytics-3.13.5 → gitflow_analytics-3.13.6}/src/gitflow_analytics/models/__init__.py +0 -0
- {gitflow_analytics-3.13.5 → gitflow_analytics-3.13.6}/src/gitflow_analytics/models/database.py +0 -0
- {gitflow_analytics-3.13.5 → gitflow_analytics-3.13.6}/src/gitflow_analytics/pm_framework/__init__.py +0 -0
- {gitflow_analytics-3.13.5 → gitflow_analytics-3.13.6}/src/gitflow_analytics/pm_framework/adapters/__init__.py +0 -0
- {gitflow_analytics-3.13.5 → gitflow_analytics-3.13.6}/src/gitflow_analytics/pm_framework/adapters/jira_adapter.py +0 -0
- {gitflow_analytics-3.13.5 → gitflow_analytics-3.13.6}/src/gitflow_analytics/pm_framework/base.py +0 -0
- {gitflow_analytics-3.13.5 → gitflow_analytics-3.13.6}/src/gitflow_analytics/pm_framework/models.py +0 -0
- {gitflow_analytics-3.13.5 → gitflow_analytics-3.13.6}/src/gitflow_analytics/pm_framework/orchestrator.py +0 -0
- {gitflow_analytics-3.13.5 → gitflow_analytics-3.13.6}/src/gitflow_analytics/pm_framework/registry.py +0 -0
- {gitflow_analytics-3.13.5 → gitflow_analytics-3.13.6}/src/gitflow_analytics/qualitative/__init__.py +0 -0
- {gitflow_analytics-3.13.5 → gitflow_analytics-3.13.6}/src/gitflow_analytics/qualitative/chatgpt_analyzer.py +0 -0
- {gitflow_analytics-3.13.5 → gitflow_analytics-3.13.6}/src/gitflow_analytics/qualitative/classifiers/__init__.py +0 -0
- {gitflow_analytics-3.13.5 → gitflow_analytics-3.13.6}/src/gitflow_analytics/qualitative/classifiers/change_type.py +0 -0
- {gitflow_analytics-3.13.5 → gitflow_analytics-3.13.6}/src/gitflow_analytics/qualitative/classifiers/domain_classifier.py +0 -0
- {gitflow_analytics-3.13.5 → gitflow_analytics-3.13.6}/src/gitflow_analytics/qualitative/classifiers/intent_analyzer.py +0 -0
- {gitflow_analytics-3.13.5 → gitflow_analytics-3.13.6}/src/gitflow_analytics/qualitative/classifiers/llm/__init__.py +0 -0
- {gitflow_analytics-3.13.5 → gitflow_analytics-3.13.6}/src/gitflow_analytics/qualitative/classifiers/llm/base.py +0 -0
- {gitflow_analytics-3.13.5 → gitflow_analytics-3.13.6}/src/gitflow_analytics/qualitative/classifiers/llm/batch_processor.py +0 -0
- {gitflow_analytics-3.13.5 → gitflow_analytics-3.13.6}/src/gitflow_analytics/qualitative/classifiers/llm/cache.py +0 -0
- {gitflow_analytics-3.13.5 → gitflow_analytics-3.13.6}/src/gitflow_analytics/qualitative/classifiers/llm/cost_tracker.py +0 -0
- {gitflow_analytics-3.13.5 → gitflow_analytics-3.13.6}/src/gitflow_analytics/qualitative/classifiers/llm/openai_client.py +0 -0
- {gitflow_analytics-3.13.5 → gitflow_analytics-3.13.6}/src/gitflow_analytics/qualitative/classifiers/llm/prompts.py +0 -0
- {gitflow_analytics-3.13.5 → gitflow_analytics-3.13.6}/src/gitflow_analytics/qualitative/classifiers/llm/response_parser.py +0 -0
- {gitflow_analytics-3.13.5 → gitflow_analytics-3.13.6}/src/gitflow_analytics/qualitative/classifiers/llm_commit_classifier.py +0 -0
- {gitflow_analytics-3.13.5 → gitflow_analytics-3.13.6}/src/gitflow_analytics/qualitative/classifiers/risk_analyzer.py +0 -0
- {gitflow_analytics-3.13.5 → gitflow_analytics-3.13.6}/src/gitflow_analytics/qualitative/core/__init__.py +0 -0
- {gitflow_analytics-3.13.5 → gitflow_analytics-3.13.6}/src/gitflow_analytics/qualitative/core/llm_fallback.py +0 -0
- {gitflow_analytics-3.13.5 → gitflow_analytics-3.13.6}/src/gitflow_analytics/qualitative/core/nlp_engine.py +0 -0
- {gitflow_analytics-3.13.5 → gitflow_analytics-3.13.6}/src/gitflow_analytics/qualitative/core/pattern_cache.py +0 -0
- {gitflow_analytics-3.13.5 → gitflow_analytics-3.13.6}/src/gitflow_analytics/qualitative/core/processor.py +0 -0
- {gitflow_analytics-3.13.5 → gitflow_analytics-3.13.6}/src/gitflow_analytics/qualitative/enhanced_analyzer.py +0 -0
- {gitflow_analytics-3.13.5 → gitflow_analytics-3.13.6}/src/gitflow_analytics/qualitative/example_enhanced_usage.py +0 -0
- {gitflow_analytics-3.13.5 → gitflow_analytics-3.13.6}/src/gitflow_analytics/qualitative/models/__init__.py +0 -0
- {gitflow_analytics-3.13.5 → gitflow_analytics-3.13.6}/src/gitflow_analytics/qualitative/models/schemas.py +0 -0
- {gitflow_analytics-3.13.5 → gitflow_analytics-3.13.6}/src/gitflow_analytics/qualitative/utils/__init__.py +0 -0
- {gitflow_analytics-3.13.5 → gitflow_analytics-3.13.6}/src/gitflow_analytics/qualitative/utils/batch_processor.py +0 -0
- {gitflow_analytics-3.13.5 → gitflow_analytics-3.13.6}/src/gitflow_analytics/qualitative/utils/cost_tracker.py +0 -0
- {gitflow_analytics-3.13.5 → gitflow_analytics-3.13.6}/src/gitflow_analytics/qualitative/utils/metrics.py +0 -0
- {gitflow_analytics-3.13.5 → gitflow_analytics-3.13.6}/src/gitflow_analytics/qualitative/utils/text_processing.py +0 -0
- {gitflow_analytics-3.13.5 → gitflow_analytics-3.13.6}/src/gitflow_analytics/reports/__init__.py +0 -0
- {gitflow_analytics-3.13.5 → gitflow_analytics-3.13.6}/src/gitflow_analytics/reports/analytics_writer.py +0 -0
- {gitflow_analytics-3.13.5 → gitflow_analytics-3.13.6}/src/gitflow_analytics/reports/base.py +0 -0
- {gitflow_analytics-3.13.5 → gitflow_analytics-3.13.6}/src/gitflow_analytics/reports/branch_health_writer.py +0 -0
- {gitflow_analytics-3.13.5 → gitflow_analytics-3.13.6}/src/gitflow_analytics/reports/classification_writer.py +0 -0
- {gitflow_analytics-3.13.5 → gitflow_analytics-3.13.6}/src/gitflow_analytics/reports/cli_integration.py +0 -0
- {gitflow_analytics-3.13.5 → gitflow_analytics-3.13.6}/src/gitflow_analytics/reports/csv_writer.py +0 -0
- {gitflow_analytics-3.13.5 → gitflow_analytics-3.13.6}/src/gitflow_analytics/reports/data_models.py +0 -0
- {gitflow_analytics-3.13.5 → gitflow_analytics-3.13.6}/src/gitflow_analytics/reports/database_report_generator.py +0 -0
- {gitflow_analytics-3.13.5 → gitflow_analytics-3.13.6}/src/gitflow_analytics/reports/example_usage.py +0 -0
- {gitflow_analytics-3.13.5 → gitflow_analytics-3.13.6}/src/gitflow_analytics/reports/factory.py +0 -0
- {gitflow_analytics-3.13.5 → gitflow_analytics-3.13.6}/src/gitflow_analytics/reports/formatters.py +0 -0
- {gitflow_analytics-3.13.5 → gitflow_analytics-3.13.6}/src/gitflow_analytics/reports/html_generator.py +0 -0
- {gitflow_analytics-3.13.5 → gitflow_analytics-3.13.6}/src/gitflow_analytics/reports/interfaces.py +0 -0
- {gitflow_analytics-3.13.5 → gitflow_analytics-3.13.6}/src/gitflow_analytics/reports/json_exporter.py +0 -0
- {gitflow_analytics-3.13.5 → gitflow_analytics-3.13.6}/src/gitflow_analytics/reports/narrative_writer.py +0 -0
- {gitflow_analytics-3.13.5 → gitflow_analytics-3.13.6}/src/gitflow_analytics/reports/story_point_correlation.py +0 -0
- {gitflow_analytics-3.13.5 → gitflow_analytics-3.13.6}/src/gitflow_analytics/reports/weekly_trends_writer.py +0 -0
- {gitflow_analytics-3.13.5 → gitflow_analytics-3.13.6}/src/gitflow_analytics/security/__init__.py +0 -0
- {gitflow_analytics-3.13.5 → gitflow_analytics-3.13.6}/src/gitflow_analytics/security/config.py +0 -0
- {gitflow_analytics-3.13.5 → gitflow_analytics-3.13.6}/src/gitflow_analytics/security/extractors/__init__.py +0 -0
- {gitflow_analytics-3.13.5 → gitflow_analytics-3.13.6}/src/gitflow_analytics/security/extractors/dependency_checker.py +0 -0
- {gitflow_analytics-3.13.5 → gitflow_analytics-3.13.6}/src/gitflow_analytics/security/extractors/secret_detector.py +0 -0
- {gitflow_analytics-3.13.5 → gitflow_analytics-3.13.6}/src/gitflow_analytics/security/extractors/vulnerability_scanner.py +0 -0
- {gitflow_analytics-3.13.5 → gitflow_analytics-3.13.6}/src/gitflow_analytics/security/llm_analyzer.py +0 -0
- {gitflow_analytics-3.13.5 → gitflow_analytics-3.13.6}/src/gitflow_analytics/security/reports/__init__.py +0 -0
- {gitflow_analytics-3.13.5 → gitflow_analytics-3.13.6}/src/gitflow_analytics/security/reports/security_report.py +0 -0
- {gitflow_analytics-3.13.5 → gitflow_analytics-3.13.6}/src/gitflow_analytics/security/security_analyzer.py +0 -0
- {gitflow_analytics-3.13.5 → gitflow_analytics-3.13.6}/src/gitflow_analytics/training/__init__.py +0 -0
- {gitflow_analytics-3.13.5 → gitflow_analytics-3.13.6}/src/gitflow_analytics/training/model_loader.py +0 -0
- {gitflow_analytics-3.13.5 → gitflow_analytics-3.13.6}/src/gitflow_analytics/training/pipeline.py +0 -0
- {gitflow_analytics-3.13.5 → gitflow_analytics-3.13.6}/src/gitflow_analytics/types/__init__.py +0 -0
- {gitflow_analytics-3.13.5 → gitflow_analytics-3.13.6}/src/gitflow_analytics/types/commit_types.py +0 -0
- {gitflow_analytics-3.13.5 → gitflow_analytics-3.13.6}/src/gitflow_analytics/ui/__init__.py +0 -0
- {gitflow_analytics-3.13.5 → gitflow_analytics-3.13.6}/src/gitflow_analytics/ui/progress_display.py +0 -0
- {gitflow_analytics-3.13.5 → gitflow_analytics-3.13.6}/src/gitflow_analytics/utils/__init__.py +0 -0
- {gitflow_analytics-3.13.5 → gitflow_analytics-3.13.6}/src/gitflow_analytics/utils/commit_utils.py +0 -0
- {gitflow_analytics-3.13.5 → gitflow_analytics-3.13.6}/src/gitflow_analytics/verify_activity.py +0 -0
- {gitflow_analytics-3.13.5 → gitflow_analytics-3.13.6}/src/gitflow_analytics.egg-info/SOURCES.txt +0 -0
- {gitflow_analytics-3.13.5 → gitflow_analytics-3.13.6}/src/gitflow_analytics.egg-info/dependency_links.txt +0 -0
- {gitflow_analytics-3.13.5 → gitflow_analytics-3.13.6}/src/gitflow_analytics.egg-info/entry_points.txt +0 -0
- {gitflow_analytics-3.13.5 → gitflow_analytics-3.13.6}/src/gitflow_analytics.egg-info/requires.txt +0 -0
- {gitflow_analytics-3.13.5 → gitflow_analytics-3.13.6}/src/gitflow_analytics.egg-info/top_level.txt +0 -0
- {gitflow_analytics-3.13.5 → gitflow_analytics-3.13.6}/tests/__init__.py +0 -0
- {gitflow_analytics-3.13.5 → gitflow_analytics-3.13.6}/tests/conftest.py +0 -0
- {gitflow_analytics-3.13.5 → gitflow_analytics-3.13.6}/tests/core/__init__.py +0 -0
- {gitflow_analytics-3.13.5 → gitflow_analytics-3.13.6}/tests/core/test_analyzer.py +0 -0
- {gitflow_analytics-3.13.5 → gitflow_analytics-3.13.6}/tests/core/test_analyzer_merge_stats.py +0 -0
- {gitflow_analytics-3.13.5 → gitflow_analytics-3.13.6}/tests/core/test_cache.py +0 -0
- {gitflow_analytics-3.13.5 → gitflow_analytics-3.13.6}/tests/core/test_data_fetcher.py +0 -0
- {gitflow_analytics-3.13.5 → gitflow_analytics-3.13.6}/tests/core/test_data_fetcher_merge_stats.py +0 -0
- {gitflow_analytics-3.13.5 → gitflow_analytics-3.13.6}/tests/core/test_identity.py +0 -0
- {gitflow_analytics-3.13.5 → gitflow_analytics-3.13.6}/tests/core/test_merge_commit_detection.py +0 -0
- {gitflow_analytics-3.13.5 → gitflow_analytics-3.13.6}/tests/core/test_progress.py +0 -0
- {gitflow_analytics-3.13.5 → gitflow_analytics-3.13.6}/tests/debug_bulk_exists.py +0 -0
- {gitflow_analytics-3.13.5 → gitflow_analytics-3.13.6}/tests/debug_commit_story_points.py +0 -0
- {gitflow_analytics-3.13.5 → gitflow_analytics-3.13.6}/tests/debug_database_storage.py +0 -0
- {gitflow_analytics-3.13.5 → gitflow_analytics-3.13.6}/tests/debug_jira_enrichment.py +0 -0
- {gitflow_analytics-3.13.5 → gitflow_analytics-3.13.6}/tests/debug_story_points.py +0 -0
- {gitflow_analytics-3.13.5 → gitflow_analytics-3.13.6}/tests/extractors/__init__.py +0 -0
- {gitflow_analytics-3.13.5 → gitflow_analytics-3.13.6}/tests/integration/__init__.py +0 -0
- {gitflow_analytics-3.13.5 → gitflow_analytics-3.13.6}/tests/integration/conftest.py +0 -0
- {gitflow_analytics-3.13.5 → gitflow_analytics-3.13.6}/tests/integration/test_merge_exclusion_workflow.py +0 -0
- {gitflow_analytics-3.13.5 → gitflow_analytics-3.13.6}/tests/integrations/__init__.py +0 -0
- {gitflow_analytics-3.13.5 → gitflow_analytics-3.13.6}/tests/metrics/__init__.py +0 -0
- {gitflow_analytics-3.13.5 → gitflow_analytics-3.13.6}/tests/models/__init__.py +0 -0
- {gitflow_analytics-3.13.5 → gitflow_analytics-3.13.6}/tests/qualitative/__init__.py +0 -0
- {gitflow_analytics-3.13.5 → gitflow_analytics-3.13.6}/tests/qualitative/test_basic_integration.py +0 -0
- {gitflow_analytics-3.13.5 → gitflow_analytics-3.13.6}/tests/reports/__init__.py +0 -0
- {gitflow_analytics-3.13.5 → gitflow_analytics-3.13.6}/tests/run_all_tests.py +0 -0
- {gitflow_analytics-3.13.5 → gitflow_analytics-3.13.6}/tests/run_security_all_repos.py +0 -0
- {gitflow_analytics-3.13.5 → gitflow_analytics-3.13.6}/tests/run_security_analysis.py +0 -0
- {gitflow_analytics-3.13.5 → gitflow_analytics-3.13.6}/tests/test-qa-install/test_error_handling.py +0 -0
- {gitflow_analytics-3.13.5 → gitflow_analytics-3.13.6}/tests/test-qa-install/test_wizard_automated.py +0 -0
- {gitflow_analytics-3.13.5 → gitflow_analytics-3.13.6}/tests/test_atomic_caching.py +0 -0
- {gitflow_analytics-3.13.5 → gitflow_analytics-3.13.6}/tests/test_cache_invalidation.py +0 -0
- {gitflow_analytics-3.13.5 → gitflow_analytics-3.13.6}/tests/test_classification_system.py +0 -0
- {gitflow_analytics-3.13.5 → gitflow_analytics-3.13.6}/tests/test_cli.py +0 -0
- {gitflow_analytics-3.13.5 → gitflow_analytics-3.13.6}/tests/test_cli_wizards/__init__.py +0 -0
- {gitflow_analytics-3.13.5 → gitflow_analytics-3.13.6}/tests/test_cli_wizards/test_menu.py +0 -0
- {gitflow_analytics-3.13.5 → gitflow_analytics-3.13.6}/tests/test_config.py +0 -0
- {gitflow_analytics-3.13.5 → gitflow_analytics-3.13.6}/tests/test_config_extends.py +0 -0
- {gitflow_analytics-3.13.5 → gitflow_analytics-3.13.6}/tests/test_config_profiles.py +0 -0
- {gitflow_analytics-3.13.5 → gitflow_analytics-3.13.6}/tests/test_config_story_points.py +0 -0
- {gitflow_analytics-3.13.5 → gitflow_analytics-3.13.6}/tests/test_jira_connection.py +0 -0
- {gitflow_analytics-3.13.5 → gitflow_analytics-3.13.6}/tests/test_llm_commit_classification.py +0 -0
- {gitflow_analytics-3.13.5 → gitflow_analytics-3.13.6}/tests/test_march_2025_comparison.py +0 -0
- {gitflow_analytics-3.13.5 → gitflow_analytics-3.13.6}/tests/test_metrics.py +0 -0
- {gitflow_analytics-3.13.5 → gitflow_analytics-3.13.6}/tests/test_ml_accuracy.py +0 -0
- {gitflow_analytics-3.13.5 → gitflow_analytics-3.13.6}/tests/test_ml_components.py +0 -0
- {gitflow_analytics-3.13.5 → gitflow_analytics-3.13.6}/tests/test_ml_comprehensive.py +0 -0
- {gitflow_analytics-3.13.5 → gitflow_analytics-3.13.6}/tests/test_ml_integration.py +0 -0
- {gitflow_analytics-3.13.5 → gitflow_analytics-3.13.6}/tests/test_pm_env_resolution.py +0 -0
- {gitflow_analytics-3.13.5 → gitflow_analytics-3.13.6}/tests/test_report_abstraction.py +0 -0
- {gitflow_analytics-3.13.5 → gitflow_analytics-3.13.6}/tests/test_story_points_analysis.py +0 -0
- {gitflow_analytics-3.13.5 → gitflow_analytics-3.13.6}/tests/test_training_pipeline.py +0 -0
- {gitflow_analytics-3.13.5 → gitflow_analytics-3.13.6}/tests/test_two_step_process.py +0 -0
- {gitflow_analytics-3.13.5 → gitflow_analytics-3.13.6}/tests/utils/__init__.py +0 -0
- {gitflow_analytics-3.13.5 → gitflow_analytics-3.13.6}/tests/utils/test_commit_utils.py +0 -0
|
@@ -96,6 +96,9 @@ target-version = "py39"
|
|
|
96
96
|
select = ["E", "F", "UP", "B", "SIM", "I"]
|
|
97
97
|
ignore = ["E501"] # Line too long - handled by formatter
|
|
98
98
|
|
|
99
|
+
[tool.ruff.lint.per-file-ignores]
|
|
100
|
+
"tests/**/*.py" = ["E402", "E722", "F401", "SIM102"] # Allow test-specific patterns
|
|
101
|
+
|
|
99
102
|
[tool.black]
|
|
100
103
|
line-length = 100
|
|
101
104
|
target-version = ['py39']
|
|
@@ -1590,6 +1590,68 @@ def analyze(
|
|
|
1590
1590
|
total_commits += result["stats"]["total_commits"]
|
|
1591
1591
|
total_tickets += result["stats"]["unique_tickets"]
|
|
1592
1592
|
|
|
1593
|
+
# Fetch and enrich with GitHub PRs after data collection
|
|
1594
|
+
if repo_config.github_repo:
|
|
1595
|
+
try:
|
|
1596
|
+
if display:
|
|
1597
|
+
display.print_status(
|
|
1598
|
+
" 📥 Fetching pull requests from GitHub...",
|
|
1599
|
+
"info",
|
|
1600
|
+
)
|
|
1601
|
+
|
|
1602
|
+
# Load commits that were just fetched from cache
|
|
1603
|
+
with cache.get_session() as session:
|
|
1604
|
+
from gitflow_analytics.models.database import CachedCommit
|
|
1605
|
+
|
|
1606
|
+
cached_commits = (
|
|
1607
|
+
session.query(CachedCommit)
|
|
1608
|
+
.filter(
|
|
1609
|
+
CachedCommit.repo_path == str(repo_path),
|
|
1610
|
+
CachedCommit.timestamp >= start_date,
|
|
1611
|
+
CachedCommit.timestamp <= end_date,
|
|
1612
|
+
)
|
|
1613
|
+
.all()
|
|
1614
|
+
)
|
|
1615
|
+
|
|
1616
|
+
# Convert to dict format for enrichment
|
|
1617
|
+
commits_for_enrichment = []
|
|
1618
|
+
for cached_commit in cached_commits:
|
|
1619
|
+
commit_dict = {
|
|
1620
|
+
"hash": cached_commit.commit_hash,
|
|
1621
|
+
"author_name": cached_commit.author_name,
|
|
1622
|
+
"author_email": cached_commit.author_email,
|
|
1623
|
+
"date": cached_commit.timestamp,
|
|
1624
|
+
"message": cached_commit.message,
|
|
1625
|
+
}
|
|
1626
|
+
commits_for_enrichment.append(commit_dict)
|
|
1627
|
+
|
|
1628
|
+
# Enrich with GitHub PR data
|
|
1629
|
+
enrichment = orchestrator.enrich_repository_data(
|
|
1630
|
+
repo_config, commits_for_enrichment, start_date
|
|
1631
|
+
)
|
|
1632
|
+
|
|
1633
|
+
if enrichment["prs"]:
|
|
1634
|
+
pr_count = len(enrichment["prs"])
|
|
1635
|
+
if display:
|
|
1636
|
+
display.print_status(
|
|
1637
|
+
f" ✅ Found {pr_count} pull requests",
|
|
1638
|
+
"success",
|
|
1639
|
+
)
|
|
1640
|
+
else:
|
|
1641
|
+
click.echo(f" ✅ Found {pr_count} pull requests")
|
|
1642
|
+
|
|
1643
|
+
except Exception as e:
|
|
1644
|
+
logger.warning(
|
|
1645
|
+
f"Failed to fetch PRs for {repo_config.github_repo}: {e}"
|
|
1646
|
+
)
|
|
1647
|
+
if display:
|
|
1648
|
+
display.print_status(
|
|
1649
|
+
f" ⚠️ Could not fetch PRs: {e}",
|
|
1650
|
+
"warning",
|
|
1651
|
+
)
|
|
1652
|
+
else:
|
|
1653
|
+
click.echo(f" ⚠️ Could not fetch PRs: {e}")
|
|
1654
|
+
|
|
1593
1655
|
# Collect unique developers if available
|
|
1594
1656
|
if "developers" in result["stats"]:
|
|
1595
1657
|
total_developers.update(result["stats"]["developers"])
|
|
@@ -2088,6 +2150,68 @@ def analyze(
|
|
|
2088
2150
|
total_commits += result["stats"]["total_commits"]
|
|
2089
2151
|
total_tickets += result["stats"]["unique_tickets"]
|
|
2090
2152
|
|
|
2153
|
+
# Fetch and enrich with GitHub PRs after data collection
|
|
2154
|
+
if repo_config.github_repo:
|
|
2155
|
+
try:
|
|
2156
|
+
if display:
|
|
2157
|
+
display.print_status(
|
|
2158
|
+
" 📥 Fetching pull requests from GitHub...",
|
|
2159
|
+
"info",
|
|
2160
|
+
)
|
|
2161
|
+
|
|
2162
|
+
# Load commits that were just fetched from cache
|
|
2163
|
+
with cache.get_session() as session:
|
|
2164
|
+
from gitflow_analytics.models.database import CachedCommit
|
|
2165
|
+
|
|
2166
|
+
cached_commits = (
|
|
2167
|
+
session.query(CachedCommit)
|
|
2168
|
+
.filter(
|
|
2169
|
+
CachedCommit.repo_path == str(repo_path),
|
|
2170
|
+
CachedCommit.timestamp >= start_date,
|
|
2171
|
+
CachedCommit.timestamp <= end_date,
|
|
2172
|
+
)
|
|
2173
|
+
.all()
|
|
2174
|
+
)
|
|
2175
|
+
|
|
2176
|
+
# Convert to dict format for enrichment
|
|
2177
|
+
commits_for_enrichment = []
|
|
2178
|
+
for cached_commit in cached_commits:
|
|
2179
|
+
commit_dict = {
|
|
2180
|
+
"hash": cached_commit.commit_hash,
|
|
2181
|
+
"author_name": cached_commit.author_name,
|
|
2182
|
+
"author_email": cached_commit.author_email,
|
|
2183
|
+
"date": cached_commit.timestamp,
|
|
2184
|
+
"message": cached_commit.message,
|
|
2185
|
+
}
|
|
2186
|
+
commits_for_enrichment.append(commit_dict)
|
|
2187
|
+
|
|
2188
|
+
# Enrich with GitHub PR data
|
|
2189
|
+
enrichment = orchestrator.enrich_repository_data(
|
|
2190
|
+
repo_config, commits_for_enrichment, start_date
|
|
2191
|
+
)
|
|
2192
|
+
|
|
2193
|
+
if enrichment["prs"]:
|
|
2194
|
+
pr_count = len(enrichment["prs"])
|
|
2195
|
+
if display:
|
|
2196
|
+
display.print_status(
|
|
2197
|
+
f" ✅ Found {pr_count} pull requests",
|
|
2198
|
+
"success",
|
|
2199
|
+
)
|
|
2200
|
+
else:
|
|
2201
|
+
click.echo(f" ✅ Found {pr_count} pull requests")
|
|
2202
|
+
|
|
2203
|
+
except Exception as e:
|
|
2204
|
+
logger.warning(
|
|
2205
|
+
f"Failed to fetch PRs for {repo_config.github_repo}: {e}"
|
|
2206
|
+
)
|
|
2207
|
+
if display:
|
|
2208
|
+
display.print_status(
|
|
2209
|
+
f" ⚠️ Could not fetch PRs: {e}",
|
|
2210
|
+
"warning",
|
|
2211
|
+
)
|
|
2212
|
+
else:
|
|
2213
|
+
click.echo(f" ⚠️ Could not fetch PRs: {e}")
|
|
2214
|
+
|
|
2091
2215
|
# Collect unique developers if available
|
|
2092
2216
|
if "developers" in result["stats"]:
|
|
2093
2217
|
total_developers.update(result["stats"]["developers"])
|
{gitflow_analytics-3.13.5 → gitflow_analytics-3.13.6}/src/gitflow_analytics/core/git_auth.py
RENAMED
|
@@ -112,6 +112,80 @@ def setup_git_credentials(token: str, username: str = "git") -> bool:
|
|
|
112
112
|
return False
|
|
113
113
|
|
|
114
114
|
|
|
115
|
+
def ensure_remote_url_has_token(repo_path: Path, token: str) -> bool:
|
|
116
|
+
"""Embed GitHub token in remote URL for HTTPS authentication.
|
|
117
|
+
|
|
118
|
+
This is needed because subprocess git operations may not have access
|
|
119
|
+
to the credential helper store due to environment variable restrictions
|
|
120
|
+
(GIT_CREDENTIAL_HELPER="" and GIT_ASKPASS="/bin/echo" in git_timeout_wrapper).
|
|
121
|
+
|
|
122
|
+
Args:
|
|
123
|
+
repo_path: Path to the git repository
|
|
124
|
+
token: GitHub personal access token
|
|
125
|
+
|
|
126
|
+
Returns:
|
|
127
|
+
True if URL was updated with token, False if already has token,
|
|
128
|
+
not applicable (SSH URL), or operation failed
|
|
129
|
+
"""
|
|
130
|
+
if not token:
|
|
131
|
+
logger.debug("No token provided, skipping remote URL update")
|
|
132
|
+
return False
|
|
133
|
+
|
|
134
|
+
try:
|
|
135
|
+
# Get current origin remote URL
|
|
136
|
+
result = subprocess.run(
|
|
137
|
+
["git", "remote", "get-url", "origin"],
|
|
138
|
+
cwd=repo_path,
|
|
139
|
+
capture_output=True,
|
|
140
|
+
text=True,
|
|
141
|
+
check=True,
|
|
142
|
+
)
|
|
143
|
+
current_url = result.stdout.strip()
|
|
144
|
+
|
|
145
|
+
if not current_url:
|
|
146
|
+
logger.debug(f"No origin remote found for {repo_path}")
|
|
147
|
+
return False
|
|
148
|
+
|
|
149
|
+
# Check if it's an HTTPS GitHub URL without embedded token
|
|
150
|
+
if current_url.startswith("https://github.com/"):
|
|
151
|
+
# URL format: https://github.com/org/repo.git
|
|
152
|
+
# New format: https://git:TOKEN@github.com/org/repo.git
|
|
153
|
+
new_url = current_url.replace("https://github.com/", f"https://git:{token}@github.com/")
|
|
154
|
+
|
|
155
|
+
# Update the remote URL
|
|
156
|
+
subprocess.run(
|
|
157
|
+
["git", "remote", "set-url", "origin", new_url],
|
|
158
|
+
cwd=repo_path,
|
|
159
|
+
capture_output=True,
|
|
160
|
+
text=True,
|
|
161
|
+
check=True,
|
|
162
|
+
)
|
|
163
|
+
logger.debug(f"Updated remote URL with embedded token for {repo_path.name}")
|
|
164
|
+
return True
|
|
165
|
+
|
|
166
|
+
elif "@github.com" in current_url:
|
|
167
|
+
# Already has authentication embedded (either token or SSH)
|
|
168
|
+
logger.debug(f"Remote URL already has authentication for {repo_path.name}")
|
|
169
|
+
return False
|
|
170
|
+
|
|
171
|
+
elif current_url.startswith("git@github.com:"):
|
|
172
|
+
# SSH URL, no need to modify
|
|
173
|
+
logger.debug(f"Using SSH authentication for {repo_path.name}")
|
|
174
|
+
return False
|
|
175
|
+
|
|
176
|
+
else:
|
|
177
|
+
# Unknown URL format
|
|
178
|
+
logger.debug(f"Unknown URL format for {repo_path.name}: {current_url}")
|
|
179
|
+
return False
|
|
180
|
+
|
|
181
|
+
except subprocess.CalledProcessError as e:
|
|
182
|
+
logger.warning(f"Could not update remote URL for {repo_path.name}: {e.stderr}")
|
|
183
|
+
return False
|
|
184
|
+
except Exception as e:
|
|
185
|
+
logger.warning(f"Unexpected error updating remote URL for {repo_path.name}: {e}")
|
|
186
|
+
return False
|
|
187
|
+
|
|
188
|
+
|
|
115
189
|
def preflight_git_authentication(config: dict) -> bool:
|
|
116
190
|
"""Run pre-flight checks for git authentication and setup credentials.
|
|
117
191
|
|
|
@@ -14,6 +14,7 @@ from pathlib import Path
|
|
|
14
14
|
from typing import Callable, Optional, TypeVar
|
|
15
15
|
|
|
16
16
|
from ..constants import Timeouts
|
|
17
|
+
from .git_auth import ensure_remote_url_has_token
|
|
17
18
|
|
|
18
19
|
logger = logging.getLogger(__name__)
|
|
19
20
|
|
|
@@ -208,6 +209,13 @@ class GitTimeoutWrapper:
|
|
|
208
209
|
True if fetch succeeded, False otherwise
|
|
209
210
|
"""
|
|
210
211
|
try:
|
|
212
|
+
# Embed GitHub token in remote URL if available
|
|
213
|
+
# This is necessary because git operations run with GIT_CREDENTIAL_HELPER=""
|
|
214
|
+
# and GIT_ASKPASS="/bin/echo", which disable credential helpers
|
|
215
|
+
token = os.environ.get("GITHUB_TOKEN")
|
|
216
|
+
if token:
|
|
217
|
+
ensure_remote_url_has_token(repo_path, token)
|
|
218
|
+
|
|
211
219
|
self.run_git_command(
|
|
212
220
|
["git", "fetch", "--all"], cwd=repo_path, timeout=timeout, check=True
|
|
213
221
|
)
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{gitflow_analytics-3.13.5 → gitflow_analytics-3.13.6}/docs/_archive/temp-files/FIX_SUMMARY.md
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{gitflow_analytics-3.13.5 → gitflow_analytics-3.13.6}/docs/_archive/temp-files/SYNTAX_ERROR_FIX.md
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{gitflow_analytics-3.13.5 → gitflow_analytics-3.13.6}/docs/design/circuit-breaker-implementation.md
RENAMED
|
File without changes
|
{gitflow_analytics-3.13.5 → gitflow_analytics-3.13.6}/docs/design/commit-classification-design.md
RENAMED
|
File without changes
|
{gitflow_analytics-3.13.5 → gitflow_analytics-3.13.6}/docs/design/git_pm_correlation_design.md
RENAMED
|
File without changes
|
{gitflow_analytics-3.13.5 → gitflow_analytics-3.13.6}/docs/design/platform-agnostic-pm-framework.md
RENAMED
|
File without changes
|
{gitflow_analytics-3.13.5 → gitflow_analytics-3.13.6}/docs/design/qualitative_data_extraction.md
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{gitflow_analytics-3.13.5 → gitflow_analytics-3.13.6}/docs/developer/project-organization.md
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{gitflow_analytics-3.13.5 → gitflow_analytics-3.13.6}/docs/examples/interactive-launcher-examples.md
RENAMED
|
File without changes
|
{gitflow_analytics-3.13.5 → gitflow_analytics-3.13.6}/docs/examples/story-points-configuration.md
RENAMED
|
File without changes
|
|
File without changes
|
{gitflow_analytics-3.13.5 → gitflow_analytics-3.13.6}/docs/getting-started/first-analysis.md
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{gitflow_analytics-3.13.5 → gitflow_analytics-3.13.6}/docs/guides/LLM_CLASSIFICATION_GUIDE.md
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{gitflow_analytics-3.13.5 → gitflow_analytics-3.13.6}/docs/guides/identity-resolution-enhanced.md
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{gitflow_analytics-3.13.5 → gitflow_analytics-3.13.6}/docs/quick-reference/launcher-and-identity.md
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{gitflow_analytics-3.13.5 → gitflow_analytics-3.13.6}/docs/reference/configuration-schema.md
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{gitflow_analytics-3.13.5 → gitflow_analytics-3.13.6}/src/gitflow_analytics/classification/model.py
RENAMED
|
File without changes
|
{gitflow_analytics-3.13.5 → gitflow_analytics-3.13.6}/src/gitflow_analytics/cli_wizards/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
{gitflow_analytics-3.13.5 → gitflow_analytics-3.13.6}/src/gitflow_analytics/cli_wizards/menu.py
RENAMED
|
File without changes
|
|
File without changes
|
{gitflow_analytics-3.13.5 → gitflow_analytics-3.13.6}/src/gitflow_analytics/config/__init__.py
RENAMED
|
File without changes
|
{gitflow_analytics-3.13.5 → gitflow_analytics-3.13.6}/src/gitflow_analytics/config/aliases.py
RENAMED
|
File without changes
|
{gitflow_analytics-3.13.5 → gitflow_analytics-3.13.6}/src/gitflow_analytics/config/errors.py
RENAMED
|
File without changes
|
{gitflow_analytics-3.13.5 → gitflow_analytics-3.13.6}/src/gitflow_analytics/config/loader.py
RENAMED
|
File without changes
|
{gitflow_analytics-3.13.5 → gitflow_analytics-3.13.6}/src/gitflow_analytics/config/profiles.py
RENAMED
|
File without changes
|
{gitflow_analytics-3.13.5 → gitflow_analytics-3.13.6}/src/gitflow_analytics/config/repository.py
RENAMED
|
File without changes
|
{gitflow_analytics-3.13.5 → gitflow_analytics-3.13.6}/src/gitflow_analytics/config/schema.py
RENAMED
|
File without changes
|
{gitflow_analytics-3.13.5 → gitflow_analytics-3.13.6}/src/gitflow_analytics/config/validator.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{gitflow_analytics-3.13.5 → gitflow_analytics-3.13.6}/src/gitflow_analytics/core/__init__.py
RENAMED
|
File without changes
|
{gitflow_analytics-3.13.5 → gitflow_analytics-3.13.6}/src/gitflow_analytics/core/analyzer.py
RENAMED
|
File without changes
|
{gitflow_analytics-3.13.5 → gitflow_analytics-3.13.6}/src/gitflow_analytics/core/branch_mapper.py
RENAMED
|
File without changes
|
|
File without changes
|
{gitflow_analytics-3.13.5 → gitflow_analytics-3.13.6}/src/gitflow_analytics/core/data_fetcher.py
RENAMED
|
File without changes
|
{gitflow_analytics-3.13.5 → gitflow_analytics-3.13.6}/src/gitflow_analytics/core/identity.py
RENAMED
|
File without changes
|
{gitflow_analytics-3.13.5 → gitflow_analytics-3.13.6}/src/gitflow_analytics/core/metrics_storage.py
RENAMED
|
File without changes
|
{gitflow_analytics-3.13.5 → gitflow_analytics-3.13.6}/src/gitflow_analytics/core/progress.py
RENAMED
|
File without changes
|
{gitflow_analytics-3.13.5 → gitflow_analytics-3.13.6}/src/gitflow_analytics/core/schema_version.py
RENAMED
|
File without changes
|
{gitflow_analytics-3.13.5 → gitflow_analytics-3.13.6}/src/gitflow_analytics/core/subprocess_git.py
RENAMED
|
File without changes
|