Skip to content

Commit 537cb0a

Browse files
committed
Merge pull request #89 from oowekyala:src-subpath
Make it possible to select a subpath of cloned directory #89
2 parents 407c08a + 5221212 commit 537cb0a

35 files changed

+371
-107
lines changed

History.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,12 @@
22

33
## New and Noteworthy
44

5+
* Support for Mercurial is removed. The only SCM supported in the project-list.xml is "git".
6+
57
## Fixed Issues
68

9+
* [#89](https://github.com/pmd/pmd-regression-tester/pull/89): Make it possible to select a subpath of cloned directory
10+
711
## External Contributions
812

913
# 1.1.2 / 2021-04-20

Manifest.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ config/design.xml
2020
config/project-list.xml
2121
config/projectlist_1_0_0.xsd
2222
config/projectlist_1_1_0.xsd
23+
config/projectlist_1_2_0.xsd
2324
lib/pmdtester.rb
2425
lib/pmdtester/builders/liquid_renderer.rb
2526
lib/pmdtester/builders/pmd_report_builder.rb

config/project-list.xml

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
<?xml version="1.0"?>
22

33
<projectlist xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
4-
xsi:noNamespaceSchemaLocation="projectlist_1_0_0.xsd">
4+
xsi:noNamespaceSchemaLocation="projectlist_1_2_0.xsd">
55
<description>Standard Projects</description>
66

77
<project>
@@ -20,10 +20,11 @@ xsi:noNamespaceSchemaLocation="projectlist_1_0_0.xsd">
2020
<tag>v5.0.6.RELEASE</tag>
2121
</project>
2222

23-
<!---<project>
24-
<name>openjdk10</name>
25-
<type>hg</type>
26-
<connection>http://hg.openjdk.java.net/jdk10/jdk10/jdk</connection>
27-
<webview-url>http://hg.openjdk.java.net/jdk10/jdk10/jdk/file/777356696811</webview-url>
28-
</project> -->
23+
<project>
24+
<name>openjdk-11</name>
25+
<type>git</type>
26+
<connection>https://github.com/openjdk/jdk</connection>
27+
<tag>jdk-11+28</tag>
28+
<src-subpath>src/java.base</src-subpath>
29+
</project>
2930
</projectlist>

config/projectlist_1_2_0.xsd

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
<?xml version="1.0" ?>
2+
<!-- version 1.1.0 -->
3+
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
4+
<xs:element name="projectlist">
5+
<xs:complexType>
6+
<xs:sequence>
7+
<xs:element name="description" type="xs:string" minOccurs="1" maxOccurs="1"/>
8+
<xs:element name="project" type="project" minOccurs="1" maxOccurs="unbounded"/>
9+
</xs:sequence>
10+
</xs:complexType>
11+
</xs:element>
12+
<xs:complexType name="project">
13+
<xs:sequence>
14+
<xs:element name="name" type="xs:string" minOccurs="1" maxOccurs="1"/>
15+
<xs:element name="type" minOccurs="1" maxOccurs="1">
16+
<xs:simpleType>
17+
<xs:restriction base="xs:string">
18+
<xs:enumeration value="git"/>
19+
</xs:restriction>
20+
</xs:simpleType>
21+
</xs:element>
22+
<xs:element name="connection" type="xs:string" minOccurs="1" maxOccurs="1"/>
23+
<xs:element name="webview-url" type="xs:string" minOccurs="0" maxOccurs="1"/>
24+
<xs:element name="tag" type="xs:string" minOccurs="0" maxOccurs="1"/>
25+
<xs:element name="src-subpath" type="xs:string" minOccurs="0" maxOccurs="1" default=".">
26+
<xs:annotation>
27+
<xs:documentation>
28+
Value of the -dir option for the PMD run.
29+
The value must be a directory path relative to the root directory of the clone.
30+
Defaults to just '.', ie the entire directory.
31+
</xs:documentation>
32+
</xs:annotation>
33+
</xs:element>
34+
<xs:element name="exclude-pattern" type="xs:string" minOccurs="0" maxOccurs="unbounded"/>
35+
<xs:element name="build-command" type="xs:string" minOccurs="0" maxOccurs="1"/>
36+
<xs:element name="auxclasspath-command" type="xs:string" minOccurs="0" maxOccurs="1"/>
37+
</xs:sequence>
38+
</xs:complexType>
39+
</xs:schema>

lib/pmdtester/builders/pmd_report_builder.rb

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -69,7 +69,7 @@ def build_pmd(into_dir:)
6969
' -Dmaven.source.skip=true' \
7070
' -Dcheckstyle.skip=true' \
7171
' -Dpmd.skip=true' \
72-
' -T1C'
72+
' -T1C -B'
7373
Cmd.execute(package_cmd)
7474
end
7575

@@ -119,7 +119,7 @@ def generate_config_for(project)
119119
doc = Nokogiri::XML(File.read(@branch_config))
120120
ruleset = doc.at_css('ruleset')
121121
ruleset.add_child("\n")
122-
project.exclude_pattern.each do |exclude_pattern|
122+
project.exclude_patterns.each do |exclude_pattern|
123123
ruleset.add_child(" <exclude-pattern>#{exclude_pattern}</exclude-pattern>\n")
124124
end
125125

lib/pmdtester/builders/project_builder.rb

Lines changed: 14 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -17,11 +17,19 @@ def clone_projects
1717

1818
@projects.each do |project|
1919
logger.info "Start cloning #{project.name} repository"
20-
path = project.local_source_path
21-
clone_cmd = "#{project.type} clone #{project.connection} #{path}"
20+
path = project.clone_root_path
21+
2222
if File.exist?(path)
2323
logger.warn "Skipping clone, project path #{path} already exists"
2424
else
25+
raise "Unsupported project type '#{project.type}' - only git is supported" unless project.type == 'git'
26+
27+
# git:
28+
# Don't download whole history
29+
# Note we don't use --single-branch, because the repo is downloaded
30+
# once but may be used with several tags.
31+
clone_cmd = "git clone --no-single-branch --depth 1 #{project.connection} #{path}"
32+
2533
Cmd.execute(clone_cmd)
2634
end
2735

@@ -38,7 +46,7 @@ def build_projects
3846
logger.info 'Building projects started'
3947

4048
@projects.each do |project|
41-
path = project.local_source_path
49+
path = project.clone_root_path
4250
Dir.chdir(path) do
4351
progress_logger = SimpleProgressLogger.new("building #{project.name} in #{path}")
4452
progress_logger.start
@@ -87,12 +95,9 @@ def run_as_script(path, command)
8795
end
8896

8997
def execute_reset_cmd(type, tag)
90-
case type
91-
when 'git'
92-
reset_cmd = "git checkout #{tag}; git reset --hard #{tag}"
93-
when 'hg'
94-
reset_cmd = "hg up #{tag}"
95-
end
98+
raise "Unsupported project type '#{type}' - only git is supported" unless type == 'git'
99+
100+
reset_cmd = "git checkout #{tag}; git reset --hard #{tag}"
96101

97102
Cmd.execute(reset_cmd)
98103
end

lib/pmdtester/parsers/projects_parser.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ def parse(list_file)
2121
end
2222

2323
def schema_file_path
24-
ResourceLocator.locate('config/projectlist_1_1_0.xsd')
24+
ResourceLocator.locate('config/projectlist_1_2_0.xsd')
2525
end
2626
end
2727

lib/pmdtester/project.rb

Lines changed: 24 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
# frozen_string_literal: true
22

3+
require 'pathname'
4+
35
module PmdTester
46
# This class represents all the information about the project
57
class Project
@@ -12,15 +14,16 @@ class Project
1214
attr_reader :connection
1315
attr_reader :webview_url
1416
attr_reader :tag
15-
attr_reader :exclude_pattern
17+
attr_reader :exclude_patterns
18+
attr_reader :src_subpath
1619
attr_accessor :report_diff
1720
# key: pmd branch name as String => value: local path of pmd report
1821
attr_reader :build_command
1922
attr_reader :auxclasspath_command
2023
# stores the auxclasspath calculated after cloning/preparing the project
2124
attr_accessor :auxclasspath
2225

23-
def initialize(project)
26+
def initialize(project) # rubocop:disable Metrics/CyclomaticComplexity, Metrics/PerceivedComplexity
2427
@name = project.at_xpath('name').text
2528
@type = project.at_xpath('type').text
2629
@connection = project.at_xpath('connection').text
@@ -31,9 +34,10 @@ def initialize(project)
3134
@webview_url = default_webview_url
3235
@webview_url = webview_url_element.text unless webview_url_element.nil?
3336

34-
@exclude_pattern = []
37+
@src_subpath = project.at_xpath('src-subpath')&.text || '.'
38+
@exclude_patterns = []
3539
project.xpath('exclude-pattern').each do |ep|
36-
@exclude_pattern.push(ep.text)
40+
@exclude_patterns.push(ep.text)
3741
end
3842

3943
@build_command = project.at_xpath('build-command')&.text
@@ -56,17 +60,17 @@ def default_webview_url
5660
# Change the file path from 'LOCAL_DIR/SOURCE_CODE_PATH' to
5761
# 'WEB_VIEW_URL/SOURCE_CODE_PATH'
5862
def get_webview_url(file_path)
59-
file_path.gsub(%r{/#{local_source_path}}, @webview_url)
63+
file_path.gsub(%r{/#{clone_root_path}}, @webview_url)
6064
end
6165

6266
# Change the file path from 'LOCAL_DIR/SOURCE_CODE_PATH' to
6367
# 'PROJECT_NAME/SOURCE_CODE_PATH'
6468
def get_path_inside_project(file_path)
65-
file_path.gsub(%r{/#{local_source_path}}, @name)
69+
file_path.gsub(%r{/#{clone_root_path}}, @name)
6670
end
6771

6872
def get_local_path(file_path)
69-
file_path.sub(%r{/#{local_source_path}/}, '')
73+
file_path.sub(%r{/#{clone_root_path}/}, '')
7074
end
7175

7276
def get_pmd_report_path(branch_name)
@@ -93,17 +97,26 @@ def get_config_path(branch_name)
9397
end
9498
end
9599

100+
##
101+
# Path to the sources to analyze (below or equal to clone_root_path)
102+
def local_source_path
103+
# normalize path
104+
Pathname.new("#{clone_root_path}/#{src_subpath}").cleanpath
105+
end
106+
107+
##
108+
# Path to the clone directory
109+
def clone_root_path
110+
"#{REPOSITORIES_PATH}/#{@name}"
111+
end
112+
96113
def get_project_target_dir(branch_name)
97114
branch_filename = PmdBranchDetail.branch_filename(branch_name)
98115
dir = "target/reports/#{branch_filename}/#{@name}"
99116
FileUtils.mkdir_p(dir) unless File.directory?(dir)
100117
dir
101118
end
102119

103-
def local_source_path
104-
"#{REPOSITORIES_PATH}/#{@name}"
105-
end
106-
107120
def compute_report_diff(base_branch, patch_branch, filter_set)
108121
self.report_diff = build_report_diff(get_pmd_report_path(base_branch),
109122
get_pmd_report_path(patch_branch),

pmdtester.gemspec

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,22 +1,22 @@
11
# DO NOT EDIT THIS FILE. Instead, edit Rakefile, and run `rake hoe:spec`.
22

33
# -*- encoding: utf-8 -*-
4-
# stub: pmdtester 1.1.2 ruby lib
4+
# stub: pmdtester 1.2.0.pre.SNAPSHOT ruby lib
55

66
Gem::Specification.new do |s|
77
s.name = "pmdtester".freeze
8-
s.version = "1.1.2"
8+
s.version = "1.2.0.pre.SNAPSHOT"
99

10-
s.required_rubygems_version = Gem::Requirement.new(">= 0".freeze) if s.respond_to? :required_rubygems_version=
10+
s.required_rubygems_version = Gem::Requirement.new("> 1.3.1".freeze) if s.respond_to? :required_rubygems_version=
1111
s.metadata = { "bug_tracker_uri" => "https://github.com/pmd/pmd-regression-tester/issues", "homepage_uri" => "https://pmd.github.io", "source_code_uri" => "https://github.com/pmd/pmd-regression-tester" } if s.respond_to? :metadata=
1212
s.require_paths = ["lib".freeze]
1313
s.authors = ["Andreas Dangel".freeze, "Binguo Bao".freeze, "Cl\u00E9ment Fournier".freeze]
14-
s.date = "2021-04-20"
14+
s.date = "2021-06-17"
1515
s.description = "A regression testing tool ensure that new problems and unexpected behaviors will not be introduced to PMD project after fixing an issue , and new rules can work as expected.".freeze
1616
s.email = ["[email protected]".freeze, "[email protected]".freeze, "[email protected]".freeze]
1717
s.executables = ["pmdtester".freeze]
1818
s.extra_rdoc_files = ["History.md".freeze, "Manifest.txt".freeze, "README.rdoc".freeze]
19-
s.files = [".ci/build.sh".freeze, ".ci/inc/fetch_ci_scripts.bash".freeze, ".ci/manual-integration-tests.sh".freeze, ".github/workflows/build.yml".freeze, ".github/workflows/manual-integration-tests.yml".freeze, ".gitignore".freeze, ".hoerc".freeze, ".rubocop.yml".freeze, ".rubocop_todo.yml".freeze, ".ruby-version".freeze, "Gemfile".freeze, "History.md".freeze, "LICENSE".freeze, "Manifest.txt".freeze, "README.rdoc".freeze, "Rakefile".freeze, "bin/pmdtester".freeze, "config/all-java.xml".freeze, "config/design.xml".freeze, "config/project-list.xml".freeze, "config/projectlist_1_0_0.xsd".freeze, "config/projectlist_1_1_0.xsd".freeze, "lib/pmdtester.rb".freeze, "lib/pmdtester/builders/liquid_renderer.rb".freeze, "lib/pmdtester/builders/pmd_report_builder.rb".freeze, "lib/pmdtester/builders/project_builder.rb".freeze, "lib/pmdtester/builders/project_hasher.rb".freeze, "lib/pmdtester/builders/rule_set_builder.rb".freeze, "lib/pmdtester/builders/simple_progress_logger.rb".freeze, "lib/pmdtester/builders/summary_report_builder.rb".freeze, "lib/pmdtester/cmd.rb".freeze, "lib/pmdtester/collection_by_file.rb".freeze, "lib/pmdtester/parsers/options.rb".freeze, "lib/pmdtester/parsers/pmd_report_document.rb".freeze, "lib/pmdtester/parsers/projects_parser.rb".freeze, "lib/pmdtester/pmd_branch_detail.rb".freeze, "lib/pmdtester/pmd_configerror.rb".freeze, "lib/pmdtester/pmd_error.rb".freeze, "lib/pmdtester/pmd_report_detail.rb".freeze, "lib/pmdtester/pmd_tester_utils.rb".freeze, "lib/pmdtester/pmd_violation.rb".freeze, "lib/pmdtester/project.rb".freeze, "lib/pmdtester/report_diff.rb".freeze, "lib/pmdtester/resource_locator.rb".freeze, "lib/pmdtester/runner.rb".freeze, "pmdtester.gemspec".freeze, "resources/_includes/diff_pill_row.html".freeze, "resources/css/bootstrap.min.css".freeze, "resources/css/datatables.min.css".freeze, "resources/css/pmd-tester.css".freeze, "resources/js/bootstrap.min.js".freeze, "resources/js/code-snippets.js".freeze, "resources/js/datatables.min.js".freeze, "resources/js/jquery-3.2.1.slim.min.js".freeze, "resources/js/jquery.min.js".freeze, "resources/js/popper.min.js".freeze, "resources/js/project-report.js".freeze, "resources/project_diff_report.html".freeze, "resources/project_index.html".freeze]
19+
s.files = [".ci/build.sh".freeze, ".ci/inc/fetch_ci_scripts.bash".freeze, ".ci/manual-integration-tests.sh".freeze, ".github/workflows/build.yml".freeze, ".github/workflows/manual-integration-tests.yml".freeze, ".gitignore".freeze, ".hoerc".freeze, ".rubocop.yml".freeze, ".rubocop_todo.yml".freeze, ".ruby-version".freeze, "Gemfile".freeze, "History.md".freeze, "LICENSE".freeze, "Manifest.txt".freeze, "README.rdoc".freeze, "Rakefile".freeze, "bin/pmdtester".freeze, "config/all-java.xml".freeze, "config/design.xml".freeze, "config/project-list.xml".freeze, "config/projectlist_1_0_0.xsd".freeze, "config/projectlist_1_1_0.xsd".freeze, "config/projectlist_1_2_0.xsd".freeze, "lib/pmdtester.rb".freeze, "lib/pmdtester/builders/liquid_renderer.rb".freeze, "lib/pmdtester/builders/pmd_report_builder.rb".freeze, "lib/pmdtester/builders/project_builder.rb".freeze, "lib/pmdtester/builders/project_hasher.rb".freeze, "lib/pmdtester/builders/rule_set_builder.rb".freeze, "lib/pmdtester/builders/simple_progress_logger.rb".freeze, "lib/pmdtester/builders/summary_report_builder.rb".freeze, "lib/pmdtester/cmd.rb".freeze, "lib/pmdtester/collection_by_file.rb".freeze, "lib/pmdtester/parsers/options.rb".freeze, "lib/pmdtester/parsers/pmd_report_document.rb".freeze, "lib/pmdtester/parsers/projects_parser.rb".freeze, "lib/pmdtester/pmd_branch_detail.rb".freeze, "lib/pmdtester/pmd_configerror.rb".freeze, "lib/pmdtester/pmd_error.rb".freeze, "lib/pmdtester/pmd_report_detail.rb".freeze, "lib/pmdtester/pmd_tester_utils.rb".freeze, "lib/pmdtester/pmd_violation.rb".freeze, "lib/pmdtester/project.rb".freeze, "lib/pmdtester/report_diff.rb".freeze, "lib/pmdtester/resource_locator.rb".freeze, "lib/pmdtester/runner.rb".freeze, "pmdtester.gemspec".freeze, "resources/_includes/diff_pill_row.html".freeze, "resources/css/bootstrap.min.css".freeze, "resources/css/datatables.min.css".freeze, "resources/css/pmd-tester.css".freeze, "resources/js/bootstrap.min.js".freeze, "resources/js/code-snippets.js".freeze, "resources/js/datatables.min.js".freeze, "resources/js/jquery-3.2.1.slim.min.js".freeze, "resources/js/jquery.min.js".freeze, "resources/js/popper.min.js".freeze, "resources/js/project-report.js".freeze, "resources/project_diff_report.html".freeze, "resources/project_index.html".freeze]
2020
s.homepage = "https://pmd.github.io".freeze
2121
s.licenses = ["BSD-2-Clause".freeze]
2222
s.rdoc_options = ["--main".freeze, "README.rdoc".freeze]

test/integration_test_pmd_report_builder.rb

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,8 @@ def setup
1111

1212
def test_build
1313
argv = %w[-r target/repositories/pmd -b master -p origin/pmd/7.0.x
14-
-c test/resources/pmd7-config.xml -l test/resources/project-test.xml
14+
-c test/resources/integration_test_pmd_report_builder/pmd7-config.xml
15+
-l test/resources/integration_test_pmd_report_builder/project-test.xml
1516
--error-recovery --debug]
1617
options = PmdTester::Options.new(argv)
1718
projects = ProjectsParser.new.parse(options.project_list)

0 commit comments

Comments
 (0)