Skip to content

Latest commit

 

History

History
79 lines (53 loc) · 4.27 KB

README.en.md

File metadata and controls

79 lines (53 loc) · 4.27 KB

Visitors

jcci

Description

Java code commit impact analysis, is a pure python library that analyzes the impact of two git submissions of Java projects on the project and generates tree chart data.

PYPI: jcci (It will be several versions behind github)

Achieve Effect

效果图

Software Architecture

The general principle is the same as Find Usage of Idea, locate the impact of the code through code changes, and continuously traverse the affected classes and methods until the top controller layer is found

The code is mainly written by python and mainly involves 2 libraries:

  • javalang java file syntax parsing library
  • unidiff git diff information parsing library

Obtain information such as import class extends implements declarators methods of each Java file through javalang syntax analysis

Parse git diff information through unidiff (diff file, added_line_num, removed_lin_num)

Then judge which classes and methods are affected according to the code lines added or deleted in the file, and continuously traverse the affected classes and methods until you find the top controller layer

By passing in the commit id of the project git address branch twice, the impact of code changes between the two commit ids can be analyzed, and the tree diagram data can be generated to display the affected links.

Installation

Require python >= 3.9 , sqlite3 >= 3.38

Instructions

After the project is cloned, create a new python file and introduce jcci in the src directory of the jcci project.

from path.to.jcci.src.jcci.analyze import JCCI

# Compare different commits on the same branch
commit_analyze = JCCI('[email protected]', 'username1')
commit_analyze.analyze_two_commit('master','commit_id1','commit_id2')

# To analyze the impact of methods in a class, use the analyze_class_method method. The last parameter is the line number(s) of the method(s) you want to analyze. If multiple methods are specified, separate their line numbers with commas. If left blank, it will analyze the impact of the entire class.
class_analyze = JCCI('[email protected]', 'username1')
class_analyze.analyze_class_method('master','commit_id1', 'package\src\main\java\ClassA.java', '20,81')

# Compare different branches
branch_analyze = JCCI('[email protected]', 'username1')
branch_analyze.analyze_two_branch('branch_new','branch_old')


# Multi-project joint analysis is supported by the above three methods. Take the analyze_two_commit method as an example.
dependents = [
    {
        'git_url': '[email protected]',
        'branch': 'master',  # default master when empty
        'commit_id': 'HEAD'  # default HEAD when empty
    }
]
commit_analyze = JCCI('[email protected]', 'username1')
commit_analyze.analyze_two_commit('master','commit_id1','commit_id2', dependents=dependents)

Parameter Description:

  • project_git_url - project git address, the code uses the native git configuration to clone the code, ensure the native git permissions or splice the url through username, password/token to clone the code. Example: https://userName:[email protected]/xxx.git or https://[email protected]/xxx.git
  • username1 - Enter whatever you want. In order to avoid incorrect results caused by concurrent analysis of the same project, when user 1 analyzes project A, user B needs to wait, so this parameter is set.

At the same time, the project will be cloned in the directory and then analyzed to generate a file with the suffix format xxx.cci, which contains the tree diagram data generated by the analysis results, download jcci-result.html , upload analyze result file end with .cci, then can be displayed through the view.

Security

Project analysis is performed based on the local environment. There is no code collection or log reporting. The source code can be checked, so please feel free to use it.

If this tool is helpful to you, please click star in the upper right corner ⭐

Communication

Scan QR code via WeChat app, and comment:JCCI communication

communicate via Wechat