Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
9 changes: 4 additions & 5 deletions cycode/cli/files_collector/sca/base_restore_dependencies.py
Original file line number Diff line number Diff line change
Expand Up @@ -59,14 +59,13 @@ def try_restore_dependencies(self, document: Document) -> Optional[Document]:
manifest_file_path = self.get_manifest_file_path(document)
restore_file_path = build_dep_tree_path(document.absolute_path, self.get_lock_file_name())
relative_restore_file_path = build_dep_tree_path(document.path, self.get_lock_file_name())
working_directory_path = self.get_working_directory(document)

if not self.verify_restore_file_already_exist(restore_file_path):
output = execute_commands(
self.get_commands(manifest_file_path),
self.command_timeout,
commands=self.get_commands(manifest_file_path),
timeout=self.command_timeout,
output_file_path=restore_file_path if self.create_output_file_manually else None,
working_directory=working_directory_path,
working_directory=self.get_working_directory(document),
)
if output is None: # one of the commands failed
return None
Expand All @@ -75,7 +74,7 @@ def try_restore_dependencies(self, document: Document) -> Optional[Document]:
return Document(relative_restore_file_path, restore_file_content, self.is_git_diff)

def get_working_directory(self, document: Document) -> Optional[str]:
return None
return os.path.dirname(document.absolute_path)

@staticmethod
def verify_restore_file_already_exist(restore_file_path: str) -> bool:
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -43,6 +43,3 @@ def get_commands(self, manifest_file_path: str) -> list[list[str]]:

def get_lock_file_name(self) -> str:
return GO_RESTORE_FILE_NAME

def get_working_directory(self, document: Document) -> Optional[str]:
return os.path.dirname(document.absolute_path)
Original file line number Diff line number Diff line change
Expand Up @@ -30,34 +30,36 @@ def get_lock_file_name(self) -> str:
return join_paths('target', MAVEN_CYCLONE_DEP_TREE_FILE_NAME)

def try_restore_dependencies(self, document: Document) -> Optional[Document]:
restore_dependencies_document = super().try_restore_dependencies(document)
manifest_file_path = self.get_manifest_file_path(document)
if document.content is None:
restore_dependencies_document = self.restore_from_secondary_command(
document, manifest_file_path, restore_dependencies_document
)
else:
restore_dependencies_document.content = get_file_content(
join_paths(get_file_dir(manifest_file_path), self.get_lock_file_name())
)
return self.restore_from_secondary_command(document, manifest_file_path)

restore_dependencies_document = super().try_restore_dependencies(document)
if restore_dependencies_document is None:
return None

restore_dependencies_document.content = get_file_content(
join_paths(get_file_dir(manifest_file_path), self.get_lock_file_name())
)

return restore_dependencies_document

def restore_from_secondary_command(
self, document: Document, manifest_file_path: str, restore_dependencies_document: Optional[Document]
) -> Optional[Document]:
# TODO(MarshalX): does it even work? Ignored restore_dependencies_document arg
secondary_restore_command = create_secondary_restore_commands(manifest_file_path)
backup_restore_content = execute_commands(secondary_restore_command, self.command_timeout)
restore_dependencies_document = Document(
build_dep_tree_path(document.path, MAVEN_DEP_TREE_FILE_NAME), backup_restore_content, self.is_git_diff
def restore_from_secondary_command(self, document: Document, manifest_file_path: str) -> Optional[Document]:
restore_content = execute_commands(
commands=create_secondary_restore_commands(manifest_file_path),
timeout=self.command_timeout,
working_directory=self.get_working_directory(document),
)
restore_dependencies = None
if restore_dependencies_document.content is not None:
restore_dependencies = restore_dependencies_document
restore_dependencies.content = get_file_content(MAVEN_DEP_TREE_FILE_NAME)
if restore_content is None:
return None

return restore_dependencies
restore_file_path = build_dep_tree_path(document.absolute_path, MAVEN_DEP_TREE_FILE_NAME)
return Document(
path=build_dep_tree_path(document.path, MAVEN_DEP_TREE_FILE_NAME),
content=get_file_content(restore_file_path),
is_git_diff_format=self.is_git_diff,
absolute_path=restore_file_path,
)


def create_secondary_restore_commands(manifest_file_path: str) -> list[list[str]]:
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,3 @@
import os
from typing import Optional

from cycode.cli.files_collector.sca.base_restore_dependencies import BaseRestoreDependencies
from cycode.cli.models import Document

Expand All @@ -17,6 +14,3 @@ def get_commands(self, manifest_file_path: str) -> list[list[str]]:

def get_lock_file_name(self) -> str:
return RUBY_LOCK_FILE_NAME

def get_working_directory(self, document: Document) -> Optional[str]:
return os.path.dirname(document.absolute_path)
Original file line number Diff line number Diff line change
@@ -1,6 +1,3 @@
import os
from typing import Optional

from cycode.cli.files_collector.sca.base_restore_dependencies import BaseRestoreDependencies
from cycode.cli.models import Document

Expand All @@ -17,6 +14,3 @@ def get_commands(self, manifest_file_path: str) -> list[list[str]]:

def get_lock_file_name(self) -> str:
return SBT_LOCK_FILE_NAME

def get_working_directory(self, document: Document) -> Optional[str]:
return os.path.dirname(document.absolute_path)
21 changes: 12 additions & 9 deletions cycode/cli/files_collector/sca/sca_code_scanner.py
Original file line number Diff line number Diff line change
Expand Up @@ -92,17 +92,16 @@ def get_project_file_ecosystem(document: Document) -> Optional[str]:

def try_restore_dependencies(
ctx: typer.Context,
documents_to_add: dict[str, Document],
restore_dependencies: 'BaseRestoreDependencies',
document: Document,
) -> None:
) -> Optional[Document]:
if not restore_dependencies.is_project(document):
return
return None

restore_dependencies_document = restore_dependencies.restore(document)
if restore_dependencies_document is None:
logger.warning('Error occurred while trying to generate dependencies tree, %s', {'filename': document.path})
return
return None

if restore_dependencies_document.content is None:
logger.warning('Error occurred while trying to generate dependencies tree, %s', {'filename': document.path})
Expand All @@ -114,10 +113,7 @@ def try_restore_dependencies(
manifest_file_path = get_manifest_file_path(document, is_monitor_action, project_path)
logger.debug('Succeeded to generate dependencies tree on path: %s', manifest_file_path)

if restore_dependencies_document.path in documents_to_add:
logger.debug('Duplicate document on restore for path: %s', restore_dependencies_document.path)
else:
documents_to_add[restore_dependencies_document.path] = restore_dependencies_document
return restore_dependencies_document


def add_dependencies_tree_document(
Expand All @@ -128,7 +124,14 @@ def add_dependencies_tree_document(

for restore_dependencies in restore_dependencies_list:
for document in documents_to_scan:
try_restore_dependencies(ctx, documents_to_add, restore_dependencies, document)
restore_dependencies_document = try_restore_dependencies(ctx, restore_dependencies, document)
if restore_dependencies_document is None:
continue

if restore_dependencies_document.path in documents_to_add:
logger.debug('Duplicate document on restore for path: %s', restore_dependencies_document.path)
else:
documents_to_add[restore_dependencies_document.path] = restore_dependencies_document

# mutate original list using slice assignment
documents_to_scan[:] = list(documents_to_add.values())
Expand Down