scip-cli 2.9.0__tar.gz → 2.9.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.
Files changed (154) hide show
  1. {scip_cli-2.9.0 → scip_cli-2.9.1}/PKG-INFO +1 -1
  2. {scip_cli-2.9.0 → scip_cli-2.9.1}/scip_cli/__init__.py +1 -1
  3. {scip_cli-2.9.0 → scip_cli-2.9.1}/scip_cli/commands/reindex.py +4 -0
  4. {scip_cli-2.9.0 → scip_cli-2.9.1}/scip_cli/indexing/__init__.py +2 -1
  5. {scip_cli-2.9.0 → scip_cli-2.9.1}/scip_cli/indexing/core.py +17 -0
  6. {scip_cli-2.9.0 → scip_cli-2.9.1}/tests/test_index_prune.py +9 -1
  7. {scip_cli-2.9.0 → scip_cli-2.9.1}/.agents/commands/migration-problems.md +0 -0
  8. {scip_cli-2.9.0 → scip_cli-2.9.1}/.agents/rules/agent.mdc +0 -0
  9. {scip_cli-2.9.0 → scip_cli-2.9.1}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
  10. {scip_cli-2.9.0 → scip_cli-2.9.1}/.github/ISSUE_TEMPLATE/feature_request.md +0 -0
  11. {scip_cli-2.9.0 → scip_cli-2.9.1}/.github/ISSUE_TEMPLATE/question.md +0 -0
  12. {scip_cli-2.9.0 → scip_cli-2.9.1}/.github/pull_request_template.md +0 -0
  13. {scip_cli-2.9.0 → scip_cli-2.9.1}/.github/workflows/ci.yml +0 -0
  14. {scip_cli-2.9.0 → scip_cli-2.9.1}/.gitignore +0 -0
  15. {scip_cli-2.9.0 → scip_cli-2.9.1}/.pre-commit-config.yaml +0 -0
  16. {scip_cli-2.9.0 → scip_cli-2.9.1}/AGENTS.md +0 -0
  17. {scip_cli-2.9.0 → scip_cli-2.9.1}/CODE_OF_CONDUCT.md +0 -0
  18. {scip_cli-2.9.0 → scip_cli-2.9.1}/CONTRIBUTING.md +0 -0
  19. {scip_cli-2.9.0 → scip_cli-2.9.1}/LICENSE +0 -0
  20. {scip_cli-2.9.0 → scip_cli-2.9.1}/README.md +0 -0
  21. {scip_cli-2.9.0 → scip_cli-2.9.1}/SECURITY.md +0 -0
  22. {scip_cli-2.9.0 → scip_cli-2.9.1}/docs/port.md +0 -0
  23. {scip_cli-2.9.0 → scip_cli-2.9.1}/docs/ports/conclusions.md +0 -0
  24. {scip_cli-2.9.0 → scip_cli-2.9.1}/docs/ports/experiment-summary.md +0 -0
  25. {scip_cli-2.9.0 → scip_cli-2.9.1}/docs/ports/go-experiment.md +0 -0
  26. {scip_cli-2.9.0 → scip_cli-2.9.1}/docs/ports/go.md +0 -0
  27. {scip_cli-2.9.0 → scip_cli-2.9.1}/docs/ports/plan.md +0 -0
  28. {scip_cli-2.9.0 → scip_cli-2.9.1}/docs/ports/rust-experiment.md +0 -0
  29. {scip_cli-2.9.0 → scip_cli-2.9.1}/docs/ports/rust.md +0 -0
  30. {scip_cli-2.9.0 → scip_cli-2.9.1}/docs/ports/summary.md +0 -0
  31. {scip_cli-2.9.0 → scip_cli-2.9.1}/docs/ports/zig-experiment.md +0 -0
  32. {scip_cli-2.9.0 → scip_cli-2.9.1}/docs/ports/zig.md +0 -0
  33. {scip_cli-2.9.0 → scip_cli-2.9.1}/pyproject.toml +0 -0
  34. {scip_cli-2.9.0 → scip_cli-2.9.1}/scip_cli/SKILL.md +0 -0
  35. {scip_cli-2.9.0 → scip_cli-2.9.1}/scip_cli/__main__.py +0 -0
  36. {scip_cli-2.9.0 → scip_cli-2.9.1}/scip_cli/analyze/__init__.py +0 -0
  37. {scip_cli-2.9.0 → scip_cli-2.9.1}/scip_cli/analyze/common.py +0 -0
  38. {scip_cli-2.9.0 → scip_cli-2.9.1}/scip_cli/analyze/file.py +0 -0
  39. {scip_cli-2.9.0 → scip_cli-2.9.1}/scip_cli/analyze/graph.py +0 -0
  40. {scip_cli-2.9.0 → scip_cli-2.9.1}/scip_cli/analyze/live.py +0 -0
  41. {scip_cli-2.9.0 → scip_cli-2.9.1}/scip_cli/analyze/project.py +0 -0
  42. {scip_cli-2.9.0 → scip_cli-2.9.1}/scip_cli/analyze/sections.py +0 -0
  43. {scip_cli-2.9.0 → scip_cli-2.9.1}/scip_cli/analyze/symbol.py +0 -0
  44. {scip_cli-2.9.0 → scip_cli-2.9.1}/scip_cli/analyze/targets.py +0 -0
  45. {scip_cli-2.9.0 → scip_cli-2.9.1}/scip_cli/cache.py +0 -0
  46. {scip_cli-2.9.0 → scip_cli-2.9.1}/scip_cli/cli_args.py +0 -0
  47. {scip_cli-2.9.0 → scip_cli-2.9.1}/scip_cli/commands/__init__.py +0 -0
  48. {scip_cli-2.9.0 → scip_cli-2.9.1}/scip_cli/commands/analyze.py +0 -0
  49. {scip_cli-2.9.0 → scip_cli-2.9.1}/scip_cli/commands/code.py +0 -0
  50. {scip_cli-2.9.0 → scip_cli-2.9.1}/scip_cli/commands/deps.py +0 -0
  51. {scip_cli-2.9.0 → scip_cli-2.9.1}/scip_cli/commands/members.py +0 -0
  52. {scip_cli-2.9.0 → scip_cli-2.9.1}/scip_cli/commands/rdeps.py +0 -0
  53. {scip_cli-2.9.0 → scip_cli-2.9.1}/scip_cli/commands/refs.py +0 -0
  54. {scip_cli-2.9.0 → scip_cli-2.9.1}/scip_cli/commands/search.py +0 -0
  55. {scip_cli-2.9.0 → scip_cli-2.9.1}/scip_cli/commands/skill.py +0 -0
  56. {scip_cli-2.9.0 → scip_cli-2.9.1}/scip_cli/commands/symbols.py +0 -0
  57. {scip_cli-2.9.0 → scip_cli-2.9.1}/scip_cli/config.py +0 -0
  58. {scip_cli-2.9.0 → scip_cli-2.9.1}/scip_cli/debug.py +0 -0
  59. {scip_cli-2.9.0 → scip_cli-2.9.1}/scip_cli/discover.py +0 -0
  60. {scip_cli-2.9.0 → scip_cli-2.9.1}/scip_cli/exclude.py +0 -0
  61. {scip_cli-2.9.0 → scip_cli-2.9.1}/scip_cli/indexing/constants.py +0 -0
  62. {scip_cli-2.9.0 → scip_cli-2.9.1}/scip_cli/indexing/convert.py +0 -0
  63. {scip_cli-2.9.0 → scip_cli-2.9.1}/scip_cli/indexing/languages.py +0 -0
  64. {scip_cli-2.9.0 → scip_cli-2.9.1}/scip_cli/indexing/orchestrate.py +0 -0
  65. {scip_cli-2.9.0 → scip_cli-2.9.1}/scip_cli/indexing/postprocess.py +0 -0
  66. {scip_cli-2.9.0 → scip_cli-2.9.1}/scip_cli/indexing/runners.py +0 -0
  67. {scip_cli-2.9.0 → scip_cli-2.9.1}/scip_cli/indexing/typescript.py +0 -0
  68. {scip_cli-2.9.0 → scip_cli-2.9.1}/scip_cli/merge.py +0 -0
  69. {scip_cli-2.9.0 → scip_cli-2.9.1}/scip_cli/metadata.py +0 -0
  70. {scip_cli-2.9.0 → scip_cli-2.9.1}/scip_cli/output.py +0 -0
  71. {scip_cli-2.9.0 → scip_cli-2.9.1}/scip_cli/paths.py +0 -0
  72. {scip_cli-2.9.0 → scip_cli-2.9.1}/scip_cli/project.py +0 -0
  73. {scip_cli-2.9.0 → scip_cli-2.9.1}/scip_cli/queries.py +0 -0
  74. {scip_cli-2.9.0 → scip_cli-2.9.1}/scip_cli/scip_tool.py +0 -0
  75. {scip_cli-2.9.0 → scip_cli-2.9.1}/scip_cli/scope.py +0 -0
  76. {scip_cli-2.9.0 → scip_cli-2.9.1}/scip_cli/session.py +0 -0
  77. {scip_cli-2.9.0 → scip_cli-2.9.1}/scip_cli/source.py +0 -0
  78. {scip_cli-2.9.0 → scip_cli-2.9.1}/scip_cli/sql.py +0 -0
  79. {scip_cli-2.9.0 → scip_cli-2.9.1}/scip_cli/symbols.py +0 -0
  80. {scip_cli-2.9.0 → scip_cli-2.9.1}/scip_cli/targets.py +0 -0
  81. {scip_cli-2.9.0 → scip_cli-2.9.1}/scip_cli/tsconfig.py +0 -0
  82. {scip_cli-2.9.0 → scip_cli-2.9.1}/scripts/bench.sh +0 -0
  83. {scip_cli-2.9.0 → scip_cli-2.9.1}/scripts/bench_postprocess.py +0 -0
  84. {scip_cli-2.9.0 → scip_cli-2.9.1}/scripts/build.sh +0 -0
  85. {scip_cli-2.9.0 → scip_cli-2.9.1}/scripts/publish.sh +0 -0
  86. {scip_cli-2.9.0 → scip_cli-2.9.1}/scripts/test.sh +0 -0
  87. {scip_cli-2.9.0 → scip_cli-2.9.1}/tests/__init__.py +0 -0
  88. {scip_cli-2.9.0 → scip_cli-2.9.1}/tests/analyze_db.py +0 -0
  89. {scip_cli-2.9.0 → scip_cli-2.9.1}/tests/bench_db.py +0 -0
  90. {scip_cli-2.9.0 → scip_cli-2.9.1}/tests/conftest.py +0 -0
  91. {scip_cli-2.9.0 → scip_cli-2.9.1}/tests/e2e_harness.py +0 -0
  92. {scip_cli-2.9.0 → scip_cli-2.9.1}/tests/fixture_catalog.py +0 -0
  93. {scip_cli-2.9.0 → scip_cli-2.9.1}/tests/fixtures/typescript-project/package.json +0 -0
  94. {scip_cli-2.9.0 → scip_cli-2.9.1}/tests/fixtures/typescript-project/src/__tests__/fixtureOnly.spec.ts +0 -0
  95. {scip_cli-2.9.0 → scip_cli-2.9.1}/tests/fixtures/typescript-project/src/app/handler.ts +0 -0
  96. {scip_cli-2.9.0 → scip_cli-2.9.1}/tests/fixtures/typescript-project/src/config.ts +0 -0
  97. {scip_cli-2.9.0 → scip_cli-2.9.1}/tests/fixtures/typescript-project/src/consumer.ts +0 -0
  98. {scip_cli-2.9.0 → scip_cli-2.9.1}/tests/fixtures/typescript-project/src/dead.ts +0 -0
  99. {scip_cli-2.9.0 → scip_cli-2.9.1}/tests/fixtures/typescript-project/src/domain/i18n/en.ts +0 -0
  100. {scip_cli-2.9.0 → scip_cli-2.9.1}/tests/fixtures/typescript-project/src/domain/i18n/index.ts +0 -0
  101. {scip_cli-2.9.0 → scip_cli-2.9.1}/tests/fixtures/typescript-project/src/domain/i18n/useLocale.ts +0 -0
  102. {scip_cli-2.9.0 → scip_cli-2.9.1}/tests/fixtures/typescript-project/src/domain/labels/index.ts +0 -0
  103. {scip_cli-2.9.0 → scip_cli-2.9.1}/tests/fixtures/typescript-project/src/events/streamTypes.ts +0 -0
  104. {scip_cli-2.9.0 → scip_cli-2.9.1}/tests/fixtures/typescript-project/src/gateway/index.ts +0 -0
  105. {scip_cli-2.9.0 → scip_cli-2.9.1}/tests/fixtures/typescript-project/src/helper.ts +0 -0
  106. {scip_cli-2.9.0 → scip_cli-2.9.1}/tests/fixtures/typescript-project/src/hooks/useHookA.ts +0 -0
  107. {scip_cli-2.9.0 → scip_cli-2.9.1}/tests/fixtures/typescript-project/src/hooks/useHookB.ts +0 -0
  108. {scip_cli-2.9.0 → scip_cli-2.9.1}/tests/fixtures/typescript-project/src/hooks/useItems.ts +0 -0
  109. {scip_cli-2.9.0 → scip_cli-2.9.1}/tests/fixtures/typescript-project/src/index.ts +0 -0
  110. {scip_cli-2.9.0 → scip_cli-2.9.1}/tests/fixtures/typescript-project/src/integrations/inferenceClient.ts +0 -0
  111. {scip_cli-2.9.0 → scip_cli-2.9.1}/tests/fixtures/typescript-project/src/lib/handler.ts +0 -0
  112. {scip_cli-2.9.0 → scip_cli-2.9.1}/tests/fixtures/typescript-project/src/loaders/useInference.ts +0 -0
  113. {scip_cli-2.9.0 → scip_cli-2.9.1}/tests/fixtures/typescript-project/src/models/MutationAggregate.ts +0 -0
  114. {scip_cli-2.9.0 → scip_cli-2.9.1}/tests/fixtures/typescript-project/src/pages/panelPage.ts +0 -0
  115. {scip_cli-2.9.0 → scip_cli-2.9.1}/tests/fixtures/typescript-project/src/rules/applyRule.ts +0 -0
  116. {scip_cli-2.9.0 → scip_cli-2.9.1}/tests/fixtures/typescript-project/src/types/a.ts +0 -0
  117. {scip_cli-2.9.0 → scip_cli-2.9.1}/tests/fixtures/typescript-project/src/types/b.ts +0 -0
  118. {scip_cli-2.9.0 → scip_cli-2.9.1}/tests/fixtures/typescript-project/src/ui/Button.ts +0 -0
  119. {scip_cli-2.9.0 → scip_cli-2.9.1}/tests/fixtures/typescript-project/src/ui/LazyPanel.ts +0 -0
  120. {scip_cli-2.9.0 → scip_cli-2.9.1}/tests/fixtures/typescript-project/src/ui/buttonConsumer.ts +0 -0
  121. {scip_cli-2.9.0 → scip_cli-2.9.1}/tests/fixtures/typescript-project/src/ui/menuModule.ts +0 -0
  122. {scip_cli-2.9.0 → scip_cli-2.9.1}/tests/fixtures/typescript-project/src/user.ts +0 -0
  123. {scip_cli-2.9.0 → scip_cli-2.9.1}/tests/fixtures/typescript-project/src/widget.ts +0 -0
  124. {scip_cli-2.9.0 → scip_cli-2.9.1}/tests/fixtures/typescript-project/src/widgets/OrphanWidget.ts +0 -0
  125. {scip_cli-2.9.0 → scip_cli-2.9.1}/tests/fixtures/typescript-project/tsconfig.json +0 -0
  126. {scip_cli-2.9.0 → scip_cli-2.9.1}/tests/perf_util.py +0 -0
  127. {scip_cli-2.9.0 → scip_cli-2.9.1}/tests/test_analyze.py +0 -0
  128. {scip_cli-2.9.0 → scip_cli-2.9.1}/tests/test_analyze_graph.py +0 -0
  129. {scip_cli-2.9.0 → scip_cli-2.9.1}/tests/test_analyze_perf.py +0 -0
  130. {scip_cli-2.9.0 → scip_cli-2.9.1}/tests/test_bench_queries.py +0 -0
  131. {scip_cli-2.9.0 → scip_cli-2.9.1}/tests/test_cache.py +0 -0
  132. {scip_cli-2.9.0 → scip_cli-2.9.1}/tests/test_composability.py +0 -0
  133. {scip_cli-2.9.0 → scip_cli-2.9.1}/tests/test_config.py +0 -0
  134. {scip_cli-2.9.0 → scip_cli-2.9.1}/tests/test_discover.py +0 -0
  135. {scip_cli-2.9.0 → scip_cli-2.9.1}/tests/test_e2e.py +0 -0
  136. {scip_cli-2.9.0 → scip_cli-2.9.1}/tests/test_e2e_analyze_patterns.py +0 -0
  137. {scip_cli-2.9.0 → scip_cli-2.9.1}/tests/test_e2e_perf.py +0 -0
  138. {scip_cli-2.9.0 → scip_cli-2.9.1}/tests/test_exclude_globs.py +0 -0
  139. {scip_cli-2.9.0 → scip_cli-2.9.1}/tests/test_index_batching.py +0 -0
  140. {scip_cli-2.9.0 → scip_cli-2.9.1}/tests/test_indexer_env.py +0 -0
  141. {scip_cli-2.9.0 → scip_cli-2.9.1}/tests/test_indexer_fallback.py +0 -0
  142. {scip_cli-2.9.0 → scip_cli-2.9.1}/tests/test_merge.py +0 -0
  143. {scip_cli-2.9.0 → scip_cli-2.9.1}/tests/test_metadata.py +0 -0
  144. {scip_cli-2.9.0 → scip_cli-2.9.1}/tests/test_multi_symbol.py +0 -0
  145. {scip_cli-2.9.0 → scip_cli-2.9.1}/tests/test_pure_functions.py +0 -0
  146. {scip_cli-2.9.0 → scip_cli-2.9.1}/tests/test_python_index_integration.py +0 -0
  147. {scip_cli-2.9.0 → scip_cli-2.9.1}/tests/test_qualified_symbols.py +0 -0
  148. {scip_cli-2.9.0 → scip_cli-2.9.1}/tests/test_reindex.py +0 -0
  149. {scip_cli-2.9.0 → scip_cli-2.9.1}/tests/test_scip_tool.py +0 -0
  150. {scip_cli-2.9.0 → scip_cli-2.9.1}/tests/test_scope.py +0 -0
  151. {scip_cli-2.9.0 → scip_cli-2.9.1}/tests/test_symbols_freq.py +0 -0
  152. {scip_cli-2.9.0 → scip_cli-2.9.1}/tests/test_targets.py +0 -0
  153. {scip_cli-2.9.0 → scip_cli-2.9.1}/tests/test_tsconfig.py +0 -0
  154. {scip_cli-2.9.0 → scip_cli-2.9.1}/tests/test_typescript_projects.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.5
2
2
  Name: scip-cli
3
- Version: 2.9.0
3
+ Version: 2.9.1
4
4
  Summary: Fast code intelligence via SCIP indexes
5
5
  Project-URL: Homepage, https://github.com/flesler/scip-cli
6
6
  Author: Ariel Flesler
@@ -1,3 +1,3 @@
1
1
  """scip-cli: Fast code intelligence via SCIP indexes."""
2
2
 
3
- __version__ = "2.9.0"
3
+ __version__ = "2.9.1"
@@ -1,6 +1,7 @@
1
1
  """Force re-indexing of the current project."""
2
2
 
3
3
  import sys
4
+ import time
4
5
 
5
6
  from ..cache import (
6
7
  cleanup_in_progress_index,
@@ -98,7 +99,9 @@ def main(args):
98
99
 
99
100
  os.environ["SCIP_CLI_KEEP_EXTERNAL"] = "1"
100
101
 
102
+ started = time.perf_counter()
101
103
  _output_db, skipped, total = index_project(root, lang, cache_dir, replace=True, log=False)
104
+ elapsed_seconds = time.perf_counter() - started
102
105
  except RuntimeError as e:
103
106
  cleanup_in_progress_index(cache_dir)
104
107
  print(f"Error: {e}", file=sys.stderr)
@@ -116,4 +119,5 @@ def main(args):
116
119
  lang.value,
117
120
  projects=total if total > 1 else None,
118
121
  skipped=skipped,
122
+ elapsed_seconds=elapsed_seconds,
119
123
  )
@@ -8,7 +8,7 @@ from .constants import (
8
8
  DEFAULT_TS_INDEX_BATCH_SIZE,
9
9
  MAX_TS_INDEX_BATCH_SIZE,
10
10
  )
11
- from .core import format_db_size, get_db, index_project, indexer_env, log_index_complete
11
+ from .core import format_db_size, format_elapsed, get_db, index_project, indexer_env, log_index_complete
12
12
  from .orchestrate import effective_ts_batch_size, ts_index_batch_size
13
13
  from .runners import run_indexer_with_fallback
14
14
  from .typescript import typescript_projects
@@ -19,6 +19,7 @@ __all__ = [
19
19
  "MAX_TS_INDEX_BATCH_SIZE",
20
20
  "effective_ts_batch_size",
21
21
  "format_db_size",
22
+ "format_elapsed",
22
23
  "get_db",
23
24
  "index_project",
24
25
  "indexer_env",
@@ -34,12 +34,27 @@ def format_db_size(db_path: Path) -> str:
34
34
  return f"{nbytes / (1024 * 1024):.1f} MB"
35
35
 
36
36
 
37
+ def format_elapsed(seconds: float) -> str:
38
+ """Human-readable wall-clock duration for index completion logs."""
39
+ if seconds >= 60:
40
+ minutes = int(seconds // 60)
41
+ secs = round(seconds % 60)
42
+ if secs == 60:
43
+ minutes += 1
44
+ secs = 0
45
+ return f"{minutes}m {secs}s"
46
+ if seconds >= 10:
47
+ return f"{round(seconds)}s"
48
+ return f"{seconds:.1f}s"
49
+
50
+
37
51
  def log_index_complete(
38
52
  db_path: Path,
39
53
  lang: str,
40
54
  *,
41
55
  projects: int | None = None,
42
56
  skipped: int = 0,
57
+ elapsed_seconds: float | None = None,
43
58
  ) -> None:
44
59
  """One-line stderr summary after a successful index write."""
45
60
  size = format_db_size(db_path)
@@ -48,6 +63,8 @@ def log_index_complete(
48
63
  suffix = f", {projects} projects"
49
64
  if skipped:
50
65
  suffix += f", {skipped} skipped"
66
+ if elapsed_seconds is not None:
67
+ suffix += f", {format_elapsed(elapsed_seconds)}"
51
68
  print(f"Indexed {db_path} ({size}, {lang}{suffix})", file=sys.stderr)
52
69
 
53
70
 
@@ -110,18 +110,26 @@ class TestIndexLogging:
110
110
  kb.write_bytes(b"x" * 2048)
111
111
  assert format_db_size(kb) == "2.0 KB"
112
112
 
113
+ def test_format_elapsed(self):
114
+ from scip_cli.indexing import format_elapsed
115
+
116
+ assert format_elapsed(0.4) == "0.4s"
117
+ assert format_elapsed(12.3) == "12s"
118
+ assert format_elapsed(65.0) == "1m 5s"
119
+
113
120
  def test_log_index_complete(self, tmp_path, capsys):
114
121
  from scip_cli.indexing import log_index_complete
115
122
 
116
123
  db = tmp_path / "index.db"
117
124
  db.write_bytes(b"x" * 1024)
118
- log_index_complete(db, "typescript", projects=3, skipped=1)
125
+ log_index_complete(db, "typescript", projects=3, skipped=1, elapsed_seconds=47.2)
119
126
  err = capsys.readouterr().err
120
127
  assert "Indexed" in err
121
128
  assert "1.0 KB" in err
122
129
  assert "typescript" in err
123
130
  assert "3 projects" in err
124
131
  assert "1 skipped" in err
132
+ assert "47s" in err
125
133
 
126
134
 
127
135
  class TestDocumentPathPrefix:
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
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