Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/eclipse/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Git FileRevision获取多行注释-仅获取第一行_Java_Eclipse_Git_Version Control_Eclipse Plugin - Fatal编程技术网

Java Git FileRevision获取多行注释-仅获取第一行

Java Git FileRevision获取多行注释-仅获取第一行,java,eclipse,git,version-control,eclipse-plugin,Java,Eclipse,Git,Version Control,Eclipse Plugin,我正在开发Eclipse插件。我尝试提取所有源代码修订(从git repo或svn或任何其他存储库中)的信息:提交id、日期、作者、消息 我有一个提交消息的问题,那些有多行的消息TL;DR I仅从包含多行内容的提交邮件中获得第一行内容。您知道如何获取整个mesage内容吗 下面是一个工作代码。只需在第一行输入工作区中已连接SCM的项目名称 IProject selectedProject = ResourcesPlugin.getWorkspace().getRoot().getProj

我正在开发Eclipse插件。我尝试提取所有源代码修订(从git repo或svn或任何其他存储库中)的信息:提交id、日期、作者、消息

我有一个提交消息的问题,那些有多行的消息TL;DR I仅从包含多行内容的提交邮件中获得第一行内容。您知道如何获取整个mesage内容吗

下面是一个工作代码。只需在第一行输入工作区中已连接SCM的项目名称

    IProject selectedProject = ResourcesPlugin.getWorkspace().getRoot().getProject("testGit");
    IJavaProject javaProject = JavaCore.create(selectedProject);
    IPackageFragment[] packages = javaProject.getPackageFragments();

    for (IPackageFragment mypackage : packages) {
        if (mypackage.getKind() == IPackageFragmentRoot.K_SOURCE) {
            for (ICompilationUnit unit : mypackage.getCompilationUnits()) {
                IResource file = unit.getResource();
                IFileRevision[] revisions = getFileRevisions(javaProject, file);
                if (revisions != null && revisions.length > 0) {
                    for (IFileRevision revision : revisions) {
                        System.out.println(revision.getComment());
                        System.out.println("============================================");
                    }
                }
            }
        }
    }

private IFileRevision[] getFileRevisions(IJavaProject project, IResource file) {
    RepositoryProvider repositoryProvider = RepositoryProvider.getProvider(project.getProject());
    IFileRevision[] revisions = null;
    IFileHistoryProvider fileHistoryProvider = repositoryProvider.getFileHistoryProvider();
    if (fileHistoryProvider == null)
        return null;
    IFileHistory iFileHistory = fileHistoryProvider.getFileHistoryFor(file,
            FileHistoryProvider.SINGLE_LINE_OF_DESCENT, null);
    if (iFileHistory != null) {
        revisions = iFileHistory.getFileRevisions();
    }
    return revisions;
}
请注意,您需要创建新的插件项目,而不是Java项目。然后需要添加依赖项,然后修复缺失的导入:

 org.eclipse.jdt.core,
 org.eclipse.core.resources,
 org.eclipse.team.core,
 org.eclipse.team.ui
代码可以在任何地方运行。最简单的方法是创建Hello World插件并在构造函数中的某个位置运行代码。

主要问题是EGit类
CommitFileRevision
只返回一条短消息,请参阅

为了得到完整的评论,我绝对不是专家,我认为你必须使用JGit。也许你想了解更多信息。这里还有一些问题,所以关于这个话题,请自己搜索


更新:

下面是一个快速脏代码片段,通过反射从(非公共但包本地)EGit类
CommitFileRevision
获取
RevCommit
。我将代码放在“Hello world”插件的菜单操作中:

公共作废运行(IAction操作){
//MessageDialog.openInformation(window.getShell(),“SO_GitPlugin”,“您好,Eclipse世界”);
试一试{
IProject selectedProject=ResourcesPlugin.getWorkspace().getRoot().getProject(“SoccerTable”);
IJavaProject javaProject=JavaCore.create(selectedProject);
IPackageFragment[]packages=javaProject.getPackageFragments();
对于(IPackageFragment mypackage:packages){
if(mypackage.getKind()==IPackageFragmentRoot.K_源){
对于(ICompilationUnit单位:mypackage.getCompilationUnits()){
IResource file=unit.getResource();
IFilerRevision[]revisions=getFileRevisions(javaProject,文件);
如果(修订版!=null&&revisions.length>0){
对于(IFileRevision修订版:修订版){
Method=revision.getClass().getMethod(“getRevCommit”);
方法setAccessible(true);
RevCommit RevCommit=(RevCommit)方法。invoke(revision);
系统输出打印LN(修订版);
//System.out.println(revision.getComment());
System.out.println(revCommit.getFullMessage());
System.out.println(“======================================================================”);
}
}
}
}
}
}
捕获(例外e){
e、 printStackTrace();
}
}
孩子们,不要在家里这样做它只是一个黑客的概念证明,实际上不必用它来引导一切。顺便说一句,您必须将插件依赖项
org.eclipse.jgit
添加到您的项目中