mirror of
https://github.com/qodo-ai/pr-agent.git
synced 2025-07-07 06:10:39 +08:00
diff_files
This commit is contained in:
@ -24,10 +24,10 @@ def get_pr_diff(git_provider: Union[GithubProvider, Any], token_handler: TokenHa
|
|||||||
Returns a string with the diff of the PR.
|
Returns a string with the diff of the PR.
|
||||||
If needed, apply diff minimization techniques to reduce the number of tokens
|
If needed, apply diff minimization techniques to reduce the number of tokens
|
||||||
"""
|
"""
|
||||||
git_provider.pr.files = list(git_provider.get_diff_files())
|
git_provider.pr.diff_files = list(git_provider.get_diff_files())
|
||||||
|
|
||||||
# get pr languages
|
# get pr languages
|
||||||
pr_languages = sort_files_by_main_languages(git_provider.get_languages(), git_provider.pr.files)
|
pr_languages = sort_files_by_main_languages(git_provider.get_languages(), git_provider.pr.diff_files)
|
||||||
|
|
||||||
# generate a standard diff string, with patch extension
|
# generate a standard diff string, with patch extension
|
||||||
patches_extended, total_tokens = pr_generate_extended_diff(pr_languages, token_handler)
|
patches_extended, total_tokens = pr_generate_extended_diff(pr_languages, token_handler)
|
||||||
|
@ -26,8 +26,6 @@ class GithubProvider:
|
|||||||
self.pr = self._get_pr()
|
self.pr = self._get_pr()
|
||||||
|
|
||||||
def get_files(self):
|
def get_files(self):
|
||||||
if hasattr(self.pr, 'files'):
|
|
||||||
return self.pr.files
|
|
||||||
return self.pr.get_files()
|
return self.pr.get_files()
|
||||||
|
|
||||||
def get_diff_files(self) -> list[FilePatchInfo]:
|
def get_diff_files(self) -> list[FilePatchInfo]:
|
||||||
|
@ -122,21 +122,26 @@ class PRReviewer:
|
|||||||
|
|
||||||
pr = self.git_provider.pr
|
pr = self.git_provider.pr
|
||||||
last_commit_id = list(pr.get_commits())[-1]
|
last_commit_id = list(pr.get_commits())[-1]
|
||||||
files = list(self.git_provider.get_diff_files())
|
if hasattr(pr, 'diff_files'): # prevent bringing all the files again
|
||||||
|
diff_files = pr.diff_files
|
||||||
|
else:
|
||||||
|
diff_files = list(self.git_provider.get_diff_files())
|
||||||
|
|
||||||
for d in data['PR Feedback']['Code suggestions']:
|
for d in data['PR Feedback']['Code suggestions']:
|
||||||
relevant_file = d['relevant file'].strip()
|
relevant_file = d['relevant file'].strip()
|
||||||
relevant_line_in_file = d['relevant line in file'].strip()
|
relevant_line_in_file = d['relevant line in file'].strip()
|
||||||
content = d['suggestion content']
|
content = d['suggestion content']
|
||||||
position = -1
|
position = -1
|
||||||
for file in files:
|
for file in diff_files:
|
||||||
if file.filename.strip() == relevant_file:
|
if file.filename.strip() == relevant_file:
|
||||||
patch = file.patch
|
patch = file.patch
|
||||||
patch_lines = patch.splitlines()
|
patch_lines = patch.splitlines()
|
||||||
for i, line in enumerate(patch_lines):
|
for i, line in enumerate(patch_lines):
|
||||||
if relevant_line_in_file in line:
|
if relevant_line_in_file in line:
|
||||||
position = i
|
position = i
|
||||||
|
break
|
||||||
if position == -1:
|
if position == -1:
|
||||||
|
if settings.config.verbosity_level >= 2:
|
||||||
logging.info(f"Could not find position for {relevant_file} {relevant_line_in_file}")
|
logging.info(f"Could not find position for {relevant_file} {relevant_line_in_file}")
|
||||||
else:
|
else:
|
||||||
body = content
|
body = content
|
||||||
|
Reference in New Issue
Block a user