|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [PATCH 2/2] xen/misra: diff-report.py: add report patching feature
On Fri, 19 May 2023, Luca Fancellu wrote:
> > On 19 May 2023, at 10:46, Luca Fancellu <Luca.Fancellu@xxxxxxx> wrote:
> >
> > Add a feature to the diff-report.py script that improves the comparison
> > between two analysis report, one from a baseline codebase and the other
> > from the changes applied to the baseline.
> >
> > The comparison between reports of different codebase is an issue because
> > entries in the baseline could have been moved in position due to addition
> > or deletion of unrelated lines or can disappear because of deletion of
> > the interested line, making the comparison between two revisions of the
> > code harder.
> >
> > Having a baseline report, a report of the codebase with the changes
> > called "new report" and a git diff format file that describes the
> > changes happened to the code from the baseline, this feature can
> > understand which entries from the baseline report are deleted or shifted
> > in position due to changes to unrelated lines and can modify them as
> > they will appear in the "new report".
> >
> > Having the "patched baseline" and the "new report", now it's simple
> > to make the diff between them and print only the entry that are new.
> >
> > Signed-off-by: Luca Fancellu <luca.fancellu@xxxxxxx>
> > ---
> > Changes from v1:
> > - Made the script compatible with python2 (Stefano)
> > ---
> > xen/scripts/diff-report.py | 55 ++++-
> > xen/scripts/xen_analysis/diff_tool/debug.py | 21 ++
> > xen/scripts/xen_analysis/diff_tool/report.py | 87 +++++++
> > .../diff_tool/unified_format_parser.py | 232 ++++++++++++++++++
> > 4 files changed, 393 insertions(+), 2 deletions(-)
> > create mode 100644
> > xen/scripts/xen_analysis/diff_tool/unified_format_parser.py
> >
> > diff --git a/xen/scripts/diff-report.py b/xen/scripts/diff-report.py
> > index f97cb2355cc3..d608e3a05aa1 100755
> > --- a/xen/scripts/diff-report.py
> > +++ b/xen/scripts/diff-report.py
> > @@ -7,6 +7,10 @@ from argparse import ArgumentParser
> > from xen_analysis.diff_tool.cppcheck_report import CppcheckReport
> > from xen_analysis.diff_tool.debug import Debug
> > from xen_analysis.diff_tool.report import ReportError
> > +from xen_analysis.diff_tool.unified_format_parser import \
> > + (UnifiedFormatParser, UnifiedFormatParseError)
> > +from xen_analysis.settings import repo_dir
> > +from xen_analysis.utils import invoke_command
> >
> >
> > def log_info(text, end='\n'):
> > @@ -36,9 +40,32 @@ def main(argv):
> > "against the baseline.")
> > parser.add_argument("-v", "--verbose", action='store_true',
> > help="Print more informations during the run.")
> > + parser.add_argument("--patch", type=str,
> > + help="The patch file containing the changes to the
> > "
> > + "code, from the baseline analysis result to
> > the "
> > + "'check report' analysis result.\n"
> > + "Do not use with --baseline-rev/--report-rev")
> > + parser.add_argument("--baseline-rev", type=str,
> > + help="Revision or SHA of the codebase analysed to "
> > + "create the baseline report.\n"
> > + "Use together with --report-rev")
> > + parser.add_argument("--report-rev", type=str,
> > + help="Revision or SHA of the codebase analysed to "
> > + "create the 'check report'.\n"
> > + "Use together with --baseline-rev")
> >
> > args = parser.parse_args()
> >
> > + if args.patch and (args.baseline_rev or args.report_rev):
> > + print("ERROR: '--patch' argument can't be used with
> > '--baseline-rev'"
> > + " or '--report-rev'.")
> > + sys.exit(1)
> > +
> > + if bool(args.baseline_rev) != bool(args.report_rev):
> > + print("ERROR: '--baseline-rev' must be used together with "
> > + "'--report-rev'.")
> > + sys.exit(1)
> > +
> > if args.out == "stdout":
> > file_out = sys.stdout
> > else:
> > @@ -63,11 +90,35 @@ def main(argv):
> > new_rep.parse()
> > debug.debug_print_parsed_report(new_rep)
> > log_info(" [OK]")
> > - except ReportError as e:
> > + diff_source = None
> > + if args.patch:
> > + diff_source = os.path.realpath(args.patch)
> > + elif args.baseline_rev:
> > + git_diff = invoke_command(
> > + "git diff --git-dir={} -C -C {}..{}".format(repo_dir,
> > +
> > args.baseline_rev,
> > +
> > args.report_rev),
> > + True, "Error occured invoking:\n{}\n\n{}"
> > + )
>
> I’ve noticed now an issue here, when using --baseline-rev/--report-rev, the
> fix is this one:
>
> diff --git a/xen/scripts/diff-report.py b/xen/scripts/diff-report.py
> index d608e3a05aa1..636f98f5eebe 100755
> --- a/xen/scripts/diff-report.py
> +++ b/xen/scripts/diff-report.py
> @@ -95,9 +95,8 @@ def main(argv):
> diff_source = os.path.realpath(args.patch)
> elif args.baseline_rev:
> git_diff = invoke_command(
> - "git diff --git-dir={} -C -C {}..{}".format(repo_dir,
> -
> args.baseline_rev,
> - args.report_rev),
> + "git --git-dir={}/.git diff -C -C {}..{}"
> + .format(repo_dir, args.baseline_rev, args.report_rev),
> True, "Error occured invoking:\n{}\n\n{}"
> )
> diff_source = git_diff.splitlines(keepends=True)
>
> I’ll wait for other feedback on the patch before sending it again.
With this change:
Acked-by: Stefano Stabellini <sstabellini@xxxxxxxxxx>
Tested-by: Stefano Stabellini <sstabellini@xxxxxxxxxx>
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |