greenmining 1.2.2__tar.gz → 1.2.4__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.
Files changed (42) hide show
  1. {greenmining-1.2.2 → greenmining-1.2.4}/CHANGELOG.md +20 -0
  2. {greenmining-1.2.2/greenmining.egg-info → greenmining-1.2.4}/PKG-INFO +1 -1
  3. {greenmining-1.2.2 → greenmining-1.2.4}/greenmining/__init__.py +8 -1
  4. {greenmining-1.2.2 → greenmining-1.2.4}/greenmining/services/local_repo_analyzer.py +11 -0
  5. {greenmining-1.2.2 → greenmining-1.2.4/greenmining.egg-info}/PKG-INFO +1 -1
  6. {greenmining-1.2.2 → greenmining-1.2.4}/pyproject.toml +1 -1
  7. {greenmining-1.2.2 → greenmining-1.2.4}/LICENSE +0 -0
  8. {greenmining-1.2.2 → greenmining-1.2.4}/MANIFEST.in +0 -0
  9. {greenmining-1.2.2 → greenmining-1.2.4}/README.md +0 -0
  10. {greenmining-1.2.2 → greenmining-1.2.4}/greenmining/__main__.py +0 -0
  11. {greenmining-1.2.2 → greenmining-1.2.4}/greenmining/analyzers/__init__.py +0 -0
  12. {greenmining-1.2.2 → greenmining-1.2.4}/greenmining/analyzers/code_diff_analyzer.py +0 -0
  13. {greenmining-1.2.2 → greenmining-1.2.4}/greenmining/analyzers/metrics_power_correlator.py +0 -0
  14. {greenmining-1.2.2 → greenmining-1.2.4}/greenmining/analyzers/statistical_analyzer.py +0 -0
  15. {greenmining-1.2.2 → greenmining-1.2.4}/greenmining/analyzers/temporal_analyzer.py +0 -0
  16. {greenmining-1.2.2 → greenmining-1.2.4}/greenmining/controllers/__init__.py +0 -0
  17. {greenmining-1.2.2 → greenmining-1.2.4}/greenmining/controllers/repository_controller.py +0 -0
  18. {greenmining-1.2.2 → greenmining-1.2.4}/greenmining/energy/__init__.py +0 -0
  19. {greenmining-1.2.2 → greenmining-1.2.4}/greenmining/energy/base.py +0 -0
  20. {greenmining-1.2.2 → greenmining-1.2.4}/greenmining/energy/carbon_reporter.py +0 -0
  21. {greenmining-1.2.2 → greenmining-1.2.4}/greenmining/energy/codecarbon_meter.py +0 -0
  22. {greenmining-1.2.2 → greenmining-1.2.4}/greenmining/energy/cpu_meter.py +0 -0
  23. {greenmining-1.2.2 → greenmining-1.2.4}/greenmining/energy/rapl.py +0 -0
  24. {greenmining-1.2.2 → greenmining-1.2.4}/greenmining/gsf_patterns.py +0 -0
  25. {greenmining-1.2.2 → greenmining-1.2.4}/greenmining/models/__init__.py +0 -0
  26. {greenmining-1.2.2 → greenmining-1.2.4}/greenmining/models/aggregated_stats.py +0 -0
  27. {greenmining-1.2.2 → greenmining-1.2.4}/greenmining/models/analysis_result.py +0 -0
  28. {greenmining-1.2.2 → greenmining-1.2.4}/greenmining/models/commit.py +0 -0
  29. {greenmining-1.2.2 → greenmining-1.2.4}/greenmining/models/repository.py +0 -0
  30. {greenmining-1.2.2 → greenmining-1.2.4}/greenmining/services/__init__.py +0 -0
  31. {greenmining-1.2.2 → greenmining-1.2.4}/greenmining/services/commit_extractor.py +0 -0
  32. {greenmining-1.2.2 → greenmining-1.2.4}/greenmining/services/data_aggregator.py +0 -0
  33. {greenmining-1.2.2 → greenmining-1.2.4}/greenmining/services/data_analyzer.py +0 -0
  34. {greenmining-1.2.2 → greenmining-1.2.4}/greenmining/services/github_graphql_fetcher.py +0 -0
  35. {greenmining-1.2.2 → greenmining-1.2.4}/greenmining/services/reports.py +0 -0
  36. {greenmining-1.2.2 → greenmining-1.2.4}/greenmining/utils.py +0 -0
  37. {greenmining-1.2.2 → greenmining-1.2.4}/greenmining.egg-info/SOURCES.txt +0 -0
  38. {greenmining-1.2.2 → greenmining-1.2.4}/greenmining.egg-info/dependency_links.txt +0 -0
  39. {greenmining-1.2.2 → greenmining-1.2.4}/greenmining.egg-info/requires.txt +0 -0
  40. {greenmining-1.2.2 → greenmining-1.2.4}/greenmining.egg-info/top_level.txt +0 -0
  41. {greenmining-1.2.2 → greenmining-1.2.4}/setup.cfg +0 -0
  42. {greenmining-1.2.2 → greenmining-1.2.4}/setup.py +0 -0
@@ -1,5 +1,23 @@
1
1
  # Changelog
2
2
 
3
+ ## [1.2.4] - 2026-02-01
4
+
5
+ ### Added
6
+ - `skip_merges` parameter exposed in `analyze_repositories()` API (default: True)
7
+ - `commit_order` parameter to control commit traversal order: "newest_first" (default) or "oldest_first"
8
+
9
+ ### Changed
10
+ - Commit analysis now configurable between newest-first (recent trends) and oldest-first (evolution studies)
11
+
12
+ ## [1.2.3] - 2026-02-01
13
+
14
+ ### Fixed
15
+ - `cleanup_after` parameter not exposed in top-level `analyze_repositories()` API
16
+ - Repositories with empty commit histories no longer included in analysis results
17
+
18
+ ### Changed
19
+ - Experiment notebook updated with full Android-domain pipeline run and results
20
+
3
21
  ## [1.2.1] - 2026-02-01
4
22
 
5
23
  ### Fixed
@@ -98,6 +116,8 @@
98
116
  - Green awareness analysis
99
117
  - Docker containerization
100
118
 
119
+ [1.2.4]: https://github.com/adam-bouafia/greenmining/compare/v1.2.3...v1.2.4
120
+ [1.2.3]: https://github.com/adam-bouafia/greenmining/compare/v1.2.1...v1.2.3
101
121
  [1.2.1]: https://github.com/adam-bouafia/greenmining/compare/v1.2.0...v1.2.1
102
122
  [1.2.0]: https://github.com/adam-bouafia/greenmining/compare/v1.1.9...v1.2.0
103
123
  [1.1.9]: https://github.com/adam-bouafia/greenmining/compare/v1.1.6...v1.1.9
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: greenmining
3
- Version: 1.2.2
3
+ Version: 1.2.4
4
4
  Summary: An empirical Python library for Mining Software Repositories (MSR) in Green IT research
5
5
  Author-email: Adam Bouafia <a.bouafia@student.vu.nl>
6
6
  License: MIT
@@ -8,7 +8,7 @@ from greenmining.gsf_patterns import (
8
8
  is_green_aware,
9
9
  )
10
10
 
11
- __version__ = "1.2.2"
11
+ __version__ = "1.2.4"
12
12
 
13
13
 
14
14
  def fetch_repositories(
@@ -73,6 +73,8 @@ def analyze_repositories(
73
73
  since_date: str = None,
74
74
  to_date: str = None,
75
75
  cleanup_after: bool = True,
76
+ skip_merges: bool = True,
77
+ commit_order: str = "newest_first",
76
78
  ):
77
79
  # Analyze multiple repositories from URLs.
78
80
  # Args:
@@ -88,6 +90,9 @@ def analyze_repositories(
88
90
  # github_token: GitHub token for private HTTPS repositories
89
91
  # since_date: Analyze commits from this date (YYYY-MM-DD string)
90
92
  # to_date: Analyze commits up to this date (YYYY-MM-DD string)
93
+ # cleanup_after: Remove cloned repos after analysis (default True)
94
+ # skip_merges: Skip merge commits (default True)
95
+ # commit_order: "newest_first" (default) or "oldest_first"
91
96
  from greenmining.services.local_repo_analyzer import LocalRepoAnalyzer
92
97
 
93
98
  kwargs = {}
@@ -109,6 +114,8 @@ def analyze_repositories(
109
114
  ssh_key_path=ssh_key_path,
110
115
  github_token=github_token,
111
116
  cleanup_after=cleanup_after,
117
+ skip_merges=skip_merges,
118
+ commit_order=commit_order,
112
119
  **kwargs,
113
120
  )
114
121
 
@@ -205,6 +205,7 @@ class LocalRepoAnalyzer:
205
205
  process_metrics: str = "standard",
206
206
  since_date: Optional[datetime] = None,
207
207
  to_date: Optional[datetime] = None,
208
+ commit_order: str = "newest_first",
208
209
  ):
209
210
  # Initialize the local repository analyzer.
210
211
  # Args:
@@ -221,6 +222,7 @@ class LocalRepoAnalyzer:
221
222
  # method_level_analysis: Extract per-method metrics via Lizard
222
223
  # include_source_code: Include source code before/after in results
223
224
  # process_metrics: "standard" or "full" PyDriller process metrics
225
+ # commit_order: "newest_first" (default) or "oldest_first"
224
226
  self.clone_path = clone_path or Path.cwd() / "greenmining_repos"
225
227
  self.clone_path.mkdir(parents=True, exist_ok=True)
226
228
  self.max_commits = max_commits
@@ -230,6 +232,7 @@ class LocalRepoAnalyzer:
230
232
  self.skip_merges = skip_merges
231
233
  self.compute_process_metrics = compute_process_metrics
232
234
  self.cleanup_after = cleanup_after
235
+ self.commit_order = commit_order
233
236
  self.gsf_patterns = GSF_PATTERNS
234
237
 
235
238
  # Phase 1.3: Private repository support
@@ -459,6 +462,8 @@ class LocalRepoAnalyzer:
459
462
  }
460
463
  if self.to_date:
461
464
  repo_config["to"] = self.to_date
465
+ if self.commit_order == "oldest_first":
466
+ repo_config["order"] = "reverse"
462
467
 
463
468
  # Use owner_repo format for unique directory names (avoids collisions
464
469
  # when multiple repos share the same name, e.g. open-android/Android
@@ -639,6 +644,9 @@ class LocalRepoAnalyzer:
639
644
  colored_print(f"\n[{i}/{len(urls)}] Processing repository...", "cyan")
640
645
  try:
641
646
  result = self.analyze_repository(url)
647
+ if result.total_commits == 0:
648
+ colored_print(f" Skipping {result.name}: no commits in date range", "yellow")
649
+ continue
642
650
  results.append(result)
643
651
  except Exception as e:
644
652
  colored_print(f" Error analyzing {url}: {e}", "red")
@@ -656,6 +664,9 @@ class LocalRepoAnalyzer:
656
664
  url = future_to_url[future]
657
665
  try:
658
666
  result = future.result()
667
+ if result.total_commits == 0:
668
+ colored_print(f" Skipping {result.name}: no commits in date range", "yellow")
669
+ continue
659
670
  results.append(result)
660
671
  colored_print(f" Completed: {result.name}", "green")
661
672
  except Exception as e:
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: greenmining
3
- Version: 1.2.2
3
+ Version: 1.2.4
4
4
  Summary: An empirical Python library for Mining Software Repositories (MSR) in Green IT research
5
5
  Author-email: Adam Bouafia <a.bouafia@student.vu.nl>
6
6
  License: MIT
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "greenmining"
7
- version = "1.2.2"
7
+ version = "1.2.4"
8
8
  description = "An empirical Python library for Mining Software Repositories (MSR) in Green IT research"
9
9
  readme = "README.md"
10
10
  requires-python = ">=3.9"
File without changes
File without changes
File without changes
File without changes
File without changes