Skip to content

Commit 3897d1d

Browse files
committed
rename SCA deps restore func to clarify
1 parent cf6c771 commit 3897d1d

File tree

6 files changed

+88
-74
lines changed

6 files changed

+88
-74
lines changed

cycode/cli/apps/report/sbom/path/path_command.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88
from cycode.cli.apps.report.sbom.common import create_sbom_report, send_report_feedback
99
from cycode.cli.exceptions.handle_report_sbom_errors import handle_report_exception
1010
from cycode.cli.files_collector.path_documents import get_relevant_documents
11-
from cycode.cli.files_collector.sca.sca_code_scanner import perform_pre_scan_documents_actions
11+
from cycode.cli.files_collector.sca.sca_file_collector import add_sca_dependencies_tree_documents_if_needed
1212
from cycode.cli.files_collector.zip_documents import zip_documents
1313
from cycode.cli.utils.get_api_client import get_report_cycode_client
1414
from cycode.cli.utils.progress_bar import SbomReportProgressBarSection
@@ -41,7 +41,7 @@ def path_command(
4141
)
4242
# TODO(MarshalX): combine perform_pre_scan_documents_actions with get_relevant_document.
4343
# unhardcode usage of context in perform_pre_scan_documents_actions
44-
perform_pre_scan_documents_actions(ctx, consts.SCA_SCAN_TYPE, documents)
44+
add_sca_dependencies_tree_documents_if_needed(ctx, consts.SCA_SCAN_TYPE, documents)
4545

4646
zipped_documents = zip_documents(consts.SCA_SCAN_TYPE, documents)
4747
report_execution = client.request_sbom_report_execution(report_parameters, zip_file=zipped_documents)

cycode/cli/apps/scan/code_scanner.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@
1717
from cycode.cli.exceptions import custom_exceptions
1818
from cycode.cli.exceptions.handle_scan_errors import handle_scan_exception
1919
from cycode.cli.files_collector.path_documents import get_relevant_documents
20-
from cycode.cli.files_collector.sca.sca_code_scanner import perform_pre_scan_documents_actions
20+
from cycode.cli.files_collector.sca.sca_file_collector import add_sca_dependencies_tree_documents_if_needed
2121
from cycode.cli.files_collector.zip_documents import zip_documents
2222
from cycode.cli.models import CliError, Document, LocalScanResult
2323
from cycode.cli.utils.progress_bar import ScanProgressBarSection
@@ -42,7 +42,7 @@ def scan_disk_files(ctx: typer.Context, paths: tuple[str, ...]) -> None:
4242

4343
try:
4444
documents = get_relevant_documents(progress_bar, ScanProgressBarSection.PREPARE_LOCAL_FILES, scan_type, paths)
45-
perform_pre_scan_documents_actions(ctx, scan_type, documents)
45+
add_sca_dependencies_tree_documents_if_needed(ctx, scan_type, documents)
4646
scan_documents(ctx, documents, get_scan_parameters(ctx, paths))
4747
except Exception as e:
4848
handle_scan_exception(ctx, e)

cycode/cli/apps/scan/commit_range_scanner.py

Lines changed: 12 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,10 @@
2828
get_pre_commit_modified_documents,
2929
parse_commit_range,
3030
)
31-
from cycode.cli.files_collector.sca import sca_code_scanner
31+
from cycode.cli.files_collector.sca.sca_file_collector import (
32+
perform_pre_commit_range_scan_actions,
33+
perform_pre_hook_range_scan_actions,
34+
)
3235
from cycode.cli.files_collector.zip_documents import zip_documents
3336
from cycode.cli.models import Document
3437
from cycode.cli.utils.git_proxy import git_proxy
@@ -169,13 +172,15 @@ def _scan_commit_range_documents(
169172

170173
def _scan_sca_commit_range(ctx: typer.Context, path: str, commit_range: str, **_) -> None:
171174
scan_parameters = get_scan_parameters(ctx, (path,))
175+
172176
from_commit_rev, to_commit_rev = parse_commit_range(commit_range, path)
173177
from_commit_documents, to_commit_documents, _ = get_commit_range_modified_documents(
174178
ctx.obj['progress_bar'], ScanProgressBarSection.PREPARE_LOCAL_FILES, path, from_commit_rev, to_commit_rev
175179
)
176180
from_commit_documents = excluder.exclude_irrelevant_documents_to_scan(consts.SCA_SCAN_TYPE, from_commit_documents)
177181
to_commit_documents = excluder.exclude_irrelevant_documents_to_scan(consts.SCA_SCAN_TYPE, to_commit_documents)
178-
sca_code_scanner.perform_pre_commit_range_scan_actions(
182+
183+
perform_pre_commit_range_scan_actions(
179184
path, from_commit_documents, from_commit_rev, to_commit_documents, to_commit_rev
180185
)
181186

@@ -197,6 +202,7 @@ def _scan_secret_commit_range(
197202

198203
def _scan_sast_commit_range(ctx: typer.Context, path: str, commit_range: str, **_) -> None:
199204
scan_parameters = get_scan_parameters(ctx, (path,))
205+
200206
from_commit_rev, to_commit_rev = parse_commit_range(commit_range, path)
201207
_, commit_documents, diff_documents = get_commit_range_modified_documents(
202208
ctx.obj['progress_bar'], ScanProgressBarSection.PREPARE_LOCAL_FILES, path, from_commit_rev, to_commit_rev
@@ -226,6 +232,7 @@ def scan_commit_range(ctx: typer.Context, path: str, commit_range: str, **kwargs
226232

227233
def _scan_sca_pre_commit(ctx: typer.Context, repo_path: str) -> None:
228234
scan_parameters = get_scan_parameters(ctx)
235+
229236
git_head_documents, pre_committed_documents = get_pre_commit_modified_documents(
230237
progress_bar=ctx.obj['progress_bar'],
231238
progress_bar_section=ScanProgressBarSection.PREPARE_LOCAL_FILES,
@@ -235,7 +242,9 @@ def _scan_sca_pre_commit(ctx: typer.Context, repo_path: str) -> None:
235242
pre_committed_documents = excluder.exclude_irrelevant_documents_to_scan(
236243
consts.SCA_SCAN_TYPE, pre_committed_documents
237244
)
238-
sca_code_scanner.perform_pre_hook_range_scan_actions(repo_path, git_head_documents, pre_committed_documents)
245+
246+
perform_pre_hook_range_scan_actions(repo_path, git_head_documents, pre_committed_documents)
247+
239248
_scan_commit_range_documents(
240249
ctx,
241250
git_head_documents,

cycode/cli/apps/scan/repository/repository_command.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010
from cycode.cli.exceptions.handle_scan_errors import handle_scan_exception
1111
from cycode.cli.files_collector.file_excluder import excluder
1212
from cycode.cli.files_collector.repository_documents import get_git_repository_tree_file_entries
13-
from cycode.cli.files_collector.sca.sca_code_scanner import perform_pre_scan_documents_actions
13+
from cycode.cli.files_collector.sca.sca_file_collector import add_sca_dependencies_tree_documents_if_needed
1414
from cycode.cli.logger import logger
1515
from cycode.cli.models import Document
1616
from cycode.cli.utils.path_utils import get_path_by_os
@@ -60,7 +60,7 @@ def repository_command(
6060

6161
documents_to_scan = excluder.exclude_irrelevant_documents_to_scan(scan_type, documents_to_scan)
6262

63-
perform_pre_scan_documents_actions(ctx, scan_type, documents_to_scan)
63+
add_sca_dependencies_tree_documents_if_needed(ctx, scan_type, documents_to_scan)
6464

6565
logger.debug('Found all relevant files for scanning %s', {'path': path, 'branch': branch})
6666
scan_documents(ctx, documents_to_scan, get_scan_parameters(ctx, (str(path),)))

cycode/cli/files_collector/repository_documents.py

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,13 +4,12 @@
44
from typing import TYPE_CHECKING, Optional, Union
55

66
from cycode.cli import consts
7-
from cycode.cli.files_collector.sca.sca_code_scanner import get_file_content_from_commit_diff
87
from cycode.cli.models import Document
98
from cycode.cli.utils.git_proxy import git_proxy
109
from cycode.cli.utils.path_utils import get_file_content, get_path_by_os
1110

1211
if TYPE_CHECKING:
13-
from git import Blob, Diff
12+
from git import Blob, Diff, Repo
1413
from git.objects.base import IndexObjUnion
1514
from git.objects.tree import TraversedTreeTup
1615

@@ -103,6 +102,18 @@ def get_pre_commit_modified_documents(
103102
return git_head_documents, pre_committed_documents
104103

105104

105+
def get_file_content_from_commit_path(repo: 'Repo', commit: str, file_path: str) -> Optional[str]:
106+
try:
107+
return repo.git.show(f'{commit}:{file_path}')
108+
except git_proxy.get_git_command_error():
109+
return None
110+
111+
112+
def get_file_content_from_commit_diff(repo: 'Repo', commit: str, diff: 'Diff') -> Optional[str]:
113+
file_path = get_diff_file_path(diff, relative=True)
114+
return get_file_content_from_commit_path(repo, commit, file_path)
115+
116+
106117
def get_commit_range_modified_documents(
107118
progress_bar: 'BaseProgressBar',
108119
progress_bar_section: 'ProgressBarSection',

cycode/cli/files_collector/sca/sca_code_scanner.py renamed to cycode/cli/files_collector/sca/sca_file_collector.py

Lines changed: 57 additions & 63 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
import typer
44

55
from cycode.cli import consts
6+
from cycode.cli.files_collector.repository_documents import get_file_content_from_commit_path
67
from cycode.cli.files_collector.sca.base_restore_dependencies import BaseRestoreDependencies
78
from cycode.cli.files_collector.sca.go.restore_go_dependencies import RestoreGoDependencies
89
from cycode.cli.files_collector.sca.maven.restore_gradle_dependencies import RestoreGradleDependencies
@@ -17,12 +18,27 @@
1718
from cycode.logger import get_logger
1819

1920
if TYPE_CHECKING:
20-
from git import Diff, Repo
21+
from git import Repo
2122

2223
BUILD_DEP_TREE_TIMEOUT = 180
2324

2425

25-
logger = get_logger('SCA Code Scanner')
26+
logger = get_logger('SCA File Collector')
27+
28+
29+
def _add_ecosystem_related_files_if_exists(
30+
documents: list[Document], repo: Optional['Repo'] = None, commit_rev: Optional[str] = None
31+
) -> None:
32+
documents_to_add: list[Document] = []
33+
for doc in documents:
34+
ecosystem = _get_project_file_ecosystem(doc)
35+
if ecosystem is None:
36+
logger.debug('Failed to resolve project file ecosystem: %s', doc.path)
37+
continue
38+
39+
documents_to_add.extend(_get_doc_ecosystem_related_project_files(doc, documents, ecosystem, commit_rev, repo))
40+
41+
documents.extend(documents_to_add)
2642

2743

2844
def perform_pre_commit_range_scan_actions(
@@ -33,40 +49,25 @@ def perform_pre_commit_range_scan_actions(
3349
to_commit_rev: str,
3450
) -> None:
3551
repo = git_proxy.get_repo(path)
36-
add_ecosystem_related_files_if_exists(from_commit_documents, repo, from_commit_rev)
37-
add_ecosystem_related_files_if_exists(to_commit_documents, repo, to_commit_rev)
52+
_add_ecosystem_related_files_if_exists(from_commit_documents, repo, from_commit_rev)
53+
_add_ecosystem_related_files_if_exists(to_commit_documents, repo, to_commit_rev)
3854

3955

4056
def perform_pre_hook_range_scan_actions(
4157
repo_path: str, git_head_documents: list[Document], pre_committed_documents: list[Document]
4258
) -> None:
4359
repo = git_proxy.get_repo(repo_path)
44-
add_ecosystem_related_files_if_exists(git_head_documents, repo, consts.GIT_HEAD_COMMIT_REV)
45-
add_ecosystem_related_files_if_exists(pre_committed_documents)
46-
47-
48-
def add_ecosystem_related_files_if_exists(
49-
documents: list[Document], repo: Optional['Repo'] = None, commit_rev: Optional[str] = None
50-
) -> None:
51-
documents_to_add: list[Document] = []
52-
for doc in documents:
53-
ecosystem = get_project_file_ecosystem(doc)
54-
if ecosystem is None:
55-
logger.debug('Failed to resolve project file ecosystem: %s', doc.path)
56-
continue
60+
_add_ecosystem_related_files_if_exists(git_head_documents, repo, consts.GIT_HEAD_COMMIT_REV)
61+
_add_ecosystem_related_files_if_exists(pre_committed_documents)
5762

58-
documents_to_add.extend(get_doc_ecosystem_related_project_files(doc, documents, ecosystem, commit_rev, repo))
59-
60-
documents.extend(documents_to_add)
6163

62-
63-
def get_doc_ecosystem_related_project_files(
64+
def _get_doc_ecosystem_related_project_files(
6465
doc: Document, documents: list[Document], ecosystem: str, commit_rev: Optional[str], repo: Optional['Repo']
6566
) -> list[Document]:
6667
documents_to_add: list[Document] = []
6768
for ecosystem_project_file in consts.PROJECT_FILES_BY_ECOSYSTEM_MAP.get(ecosystem):
6869
file_to_search = join_paths(get_file_dir(doc.path), ecosystem_project_file)
69-
if not is_project_file_exists_in_documents(documents, file_to_search):
70+
if not _is_project_file_exists_in_documents(documents, file_to_search):
7071
if repo:
7172
file_content = get_file_content_from_commit_path(repo, commit_rev, file_to_search)
7273
else:
@@ -78,19 +79,23 @@ def get_doc_ecosystem_related_project_files(
7879
return documents_to_add
7980

8081

81-
def is_project_file_exists_in_documents(documents: list[Document], file: str) -> bool:
82+
def _is_project_file_exists_in_documents(documents: list[Document], file: str) -> bool:
8283
return any(doc for doc in documents if file == doc.path)
8384

8485

85-
def get_project_file_ecosystem(document: Document) -> Optional[str]:
86+
def _get_project_file_ecosystem(document: Document) -> Optional[str]:
8687
for ecosystem, project_files in consts.PROJECT_FILES_BY_ECOSYSTEM_MAP.items():
8788
for project_file in project_files:
8889
if document.path.endswith(project_file):
8990
return ecosystem
9091
return None
9192

9293

93-
def try_restore_dependencies(
94+
def _get_manifest_file_path(document: Document, is_monitor_action: bool, project_path: str) -> str:
95+
return join_paths(project_path, document.path) if is_monitor_action else document.path
96+
97+
98+
def _try_restore_dependencies(
9499
ctx: typer.Context,
95100
restore_dependencies: 'BaseRestoreDependencies',
96101
document: Document,
@@ -110,34 +115,13 @@ def try_restore_dependencies(
110115
is_monitor_action = ctx.obj.get('monitor', False)
111116
project_path = get_path_from_context(ctx)
112117

113-
manifest_file_path = get_manifest_file_path(document, is_monitor_action, project_path)
118+
manifest_file_path = _get_manifest_file_path(document, is_monitor_action, project_path)
114119
logger.debug('Succeeded to generate dependencies tree on path: %s', manifest_file_path)
115120

116121
return restore_dependencies_document
117122

118123

119-
def add_dependencies_tree_document(
120-
ctx: typer.Context, documents_to_scan: list[Document], is_git_diff: bool = False
121-
) -> None:
122-
documents_to_add: dict[str, Document] = {document.path: document for document in documents_to_scan}
123-
restore_dependencies_list = restore_handlers(ctx, is_git_diff)
124-
125-
for restore_dependencies in restore_dependencies_list:
126-
for document in documents_to_scan:
127-
restore_dependencies_document = try_restore_dependencies(ctx, restore_dependencies, document)
128-
if restore_dependencies_document is None:
129-
continue
130-
131-
if restore_dependencies_document.path in documents_to_add:
132-
logger.debug('Duplicate document on restore for path: %s', restore_dependencies_document.path)
133-
else:
134-
documents_to_add[restore_dependencies_document.path] = restore_dependencies_document
135-
136-
# mutate original list using slice assignment
137-
documents_to_scan[:] = list(documents_to_add.values())
138-
139-
140-
def restore_handlers(ctx: typer.Context, is_git_diff: bool) -> list[BaseRestoreDependencies]:
124+
def _get_restore_handlers(ctx: typer.Context, is_git_diff: bool) -> list[BaseRestoreDependencies]:
141125
return [
142126
RestoreGradleDependencies(ctx, is_git_diff, BUILD_DEP_TREE_TIMEOUT),
143127
RestoreMavenDependencies(ctx, is_git_diff, BUILD_DEP_TREE_TIMEOUT),
@@ -149,28 +133,38 @@ def restore_handlers(ctx: typer.Context, is_git_diff: bool) -> list[BaseRestoreD
149133
]
150134

151135

152-
def get_manifest_file_path(document: Document, is_monitor_action: bool, project_path: str) -> str:
153-
return join_paths(project_path, document.path) if is_monitor_action else document.path
136+
def _add_dependencies_tree_documents(
137+
ctx: typer.Context, documents_to_scan: list[Document], is_git_diff: bool = False
138+
) -> None:
139+
logger.debug(
140+
'Adding dependencies tree documents, %s',
141+
{'documents_count': len(documents_to_scan), 'is_git_diff': is_git_diff},
142+
)
154143

144+
documents_to_add: dict[str, Document] = {document.path: document for document in documents_to_scan}
145+
restore_dependencies_list = _get_restore_handlers(ctx, is_git_diff)
155146

156-
def get_file_content_from_commit_path(repo: 'Repo', commit: str, file_path: str) -> Optional[str]:
157-
try:
158-
return repo.git.show(f'{commit}:{file_path}')
159-
except git_proxy.get_git_command_error():
160-
return None
147+
for restore_dependencies in restore_dependencies_list:
148+
for document in documents_to_scan:
149+
restore_dependencies_document = _try_restore_dependencies(ctx, restore_dependencies, document)
150+
if restore_dependencies_document is None:
151+
continue
161152

153+
if restore_dependencies_document.path in documents_to_add:
154+
logger.debug('Duplicate document on restore for path: %s', restore_dependencies_document.path)
155+
else:
156+
logger.debug('Adding dependencies tree document, %s', restore_dependencies_document.path)
157+
documents_to_add[restore_dependencies_document.path] = restore_dependencies_document
162158

163-
def get_file_content_from_commit_diff(repo: 'Repo', commit: str, diff: 'Diff') -> Optional[str]:
164-
from cycode.cli.files_collector.repository_documents import get_diff_file_path
159+
logger.debug('Finished adding dependencies tree documents, %s', {'documents_count': len(documents_to_add)})
165160

166-
file_path = get_diff_file_path(diff, relative=True)
167-
return get_file_content_from_commit_path(repo, commit, file_path)
161+
# mutate original list using slice assignment
162+
documents_to_scan[:] = list(documents_to_add.values())
168163

169164

170-
def perform_pre_scan_documents_actions(
165+
def add_sca_dependencies_tree_documents_if_needed(
171166
ctx: typer.Context, scan_type: str, documents_to_scan: list[Document], is_git_diff: bool = False
172167
) -> None:
173168
no_restore = ctx.params.get('no-restore', False)
174169
if scan_type == consts.SCA_SCAN_TYPE and not no_restore:
175-
logger.debug('Perform pre-scan document add_dependencies_tree_document action')
176-
add_dependencies_tree_document(ctx, documents_to_scan, is_git_diff)
170+
_add_dependencies_tree_documents(ctx, documents_to_scan, is_git_diff)

0 commit comments

Comments
 (0)