pmdtester 1.4.1 → 1.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 0002a7305089264a200552384fff3179d706c2a89b39ef28cec2f2c184e84331
4
- data.tar.gz: b59758aa8ece040b8d90c3577fcdc05000615e5efb32504b6e96599686d0ee6a
3
+ metadata.gz: 1d00209411d45b04f8ebcfb34d4289b682a9c3d044998b1f82e15c1d08e184ed
4
+ data.tar.gz: d6d6a48c4a2c558b9058c91dc57e2043e304addc90b8e7cc7441f07c50dac624
5
5
  SHA512:
6
- metadata.gz: d18602b80cad2306aba780a338c90831aeaff5b17ebce880384a2e1b94405c7e45ae40e9842f878fe3ee514e8651b1bb856bfea35bab130f0f67606690ac53a7
7
- data.tar.gz: 36c0c70dada772cfe44d595eeefd2cf131925db7a884dbd092bc4490cbf2ea948df23449c2dcdc78f39b75c4863b4c41b84d73a0346874c78c8aa5dee03a5ad4
6
+ metadata.gz: 82c0d9bce215128d2fb56f44116c7c6f5394b8a34ff8b26918974a89e2c6e67b4d76c14b3a920b372e345ffbe33e114cdacfbcdd962f1c76f5fddc24595d8998
7
+ data.tar.gz: effbb41f97137a0b6a93bc200cd8ebb3b7323dabaeef1eca50bfee3dd97b00e0418987b28661328902b1f66942843acad32bc397f1dc04590cbc9d0a19d1c4b7
@@ -15,6 +15,7 @@ on:
15
15
 
16
16
  jobs:
17
17
  build:
18
+ timeout-minutes: 120
18
19
  runs-on: ubuntu-latest
19
20
  continue-on-error: false
20
21
  if: ${{ !contains(github.event.head_commit.message, '[skip ci]') }}
@@ -27,9 +28,9 @@ jobs:
27
28
  ~/.cache
28
29
  vendor/bundle
29
30
  target/repositories
30
- key: v1-${{ runner.os }}-${{ hashFiles('pmdtester.gemspec') }}
31
+ key: v3-${{ runner.os }}-${{ hashFiles('pmdtester.gemspec') }}
31
32
  restore-keys: |
32
- v1-${{ runner.os }}-
33
+ v3-${{ runner.os }}-
33
34
  - name: Set up Ruby 2.7
34
35
  uses: ruby/setup-ruby@v1
35
36
  with:
@@ -8,6 +8,7 @@ on:
8
8
 
9
9
  jobs:
10
10
  build:
11
+ timeout-minutes: 120
11
12
  runs-on: ubuntu-latest
12
13
  continue-on-error: false
13
14
  steps:
@@ -19,9 +20,9 @@ jobs:
19
20
  ~/.cache
20
21
  vendor/bundle
21
22
  target/repositories
22
- key: v1-${{ runner.os }}-${{ hashFiles('pmdtester.gemspec') }}
23
+ key: v3-${{ runner.os }}-${{ hashFiles('pmdtester.gemspec') }}
23
24
  restore-keys: |
24
- v1-${{ runner.os }}-
25
+ v3-${{ runner.os }}-
25
26
  - name: Set up Ruby 2.7
26
27
  uses: ruby/setup-ruby@v1
27
28
  with:
data/History.md CHANGED
@@ -1,3 +1,14 @@
1
+ # 1.5.0 / 2022-05-06
2
+
3
+ ## Enhancements
4
+
5
+ * [#108](https://github.com/pmd/pmd-regression-tester/issues/108): Disable progress bar for PMD 7
6
+ * [#109](https://github.com/pmd/pmd-regression-tester/issues/109): Make stdout/stderr and exit code available
7
+
8
+ ## Fixed Issues
9
+
10
+ * [#107](https://github.com/pmd/pmd-regression-tester/issues/107): Deprecated command line options is used: `-auxclasspath`
11
+
1
12
  # 1.4.1 / 2022-04-12
2
13
 
3
14
  ## Fixed Issues
@@ -60,6 +60,11 @@ module PmdTester
60
60
  # copy original pmd reports
61
61
  copy_file("#{root}/base_pmd_report.xml", project.report_diff.base_report.file)
62
62
  copy_file("#{root}/patch_pmd_report.xml", project.report_diff.patch_report.file)
63
+ # copy stdout and stderr outputs
64
+ copy_file("#{root}/base_stdout.txt", "#{project.report_diff.base_report.report_folder}/stdout.txt")
65
+ copy_file("#{root}/base_stderr.txt", "#{project.report_diff.base_report.report_folder}/stderr.txt")
66
+ copy_file("#{root}/patch_stdout.txt", "#{project.report_diff.patch_report.report_folder}/stdout.txt")
67
+ copy_file("#{root}/patch_stderr.txt", "#{project.report_diff.patch_report.report_folder}/stderr.txt")
63
68
  # render full pmd reports
64
69
  write_file("#{root}/base_pmd_report.html",
65
70
  render_liquid('project_pmd_report.html', pmd_report_liquid_env(project, BASE)))
@@ -120,6 +125,7 @@ module PmdTester
120
125
 
121
126
  'execution_time' => PmdReportDetail.convert_seconds(report.exec_time),
122
127
  'timestamp' => report.timestamp,
128
+ 'exit_code' => report.exit_code,
123
129
 
124
130
  'rules' => report.rule_summaries,
125
131
  'errors' => report.errors_by_file.all_values.map { |e| error_to_hash(e, project) },
@@ -25,7 +25,7 @@ module PmdTester
25
25
  def get_pmd_binary_file
26
26
  logger.info "#{@pmd_branch_name}: Start packaging PMD"
27
27
  Dir.chdir(@local_git_repo) do
28
- build_branch_sha = Cmd.execute("git rev-parse #{@pmd_branch_name}^{commit}")
28
+ build_branch_sha = Cmd.execute_successfully("git rev-parse #{@pmd_branch_name}^{commit}")
29
29
 
30
30
  checkout_build_branch # needs a clean working tree, otherwise fails
31
31
 
@@ -70,49 +70,53 @@ module PmdTester
70
70
  ' -Dcheckstyle.skip=true' \
71
71
  ' -Dpmd.skip=true' \
72
72
  ' -T1C -B'
73
- Cmd.execute(package_cmd)
73
+ Cmd.execute_successfully(package_cmd)
74
74
  end
75
75
 
76
76
  logger.info "#{@pmd_branch_name}: Extracting the zip"
77
- Cmd.execute("unzip -qo #{pmd_dist_target} -d pmd-dist/target/exploded")
78
- Cmd.execute("mv pmd-dist/target/exploded/pmd-bin-#{@pmd_version} #{into_dir}")
77
+ Cmd.execute_successfully("unzip -qo #{pmd_dist_target} -d pmd-dist/target/exploded")
78
+ Cmd.execute_successfully("mv pmd-dist/target/exploded/pmd-bin-#{@pmd_version} #{into_dir}")
79
79
  end
80
80
 
81
81
  def determine_pmd_version
82
82
  version_cmd = "./mvnw -q -Dexec.executable=\"echo\" -Dexec.args='${project.version}' " \
83
83
  '--non-recursive org.codehaus.mojo:exec-maven-plugin:1.5.0:exec'
84
- Cmd.execute(version_cmd)
84
+ Cmd.execute_successfully(version_cmd)
85
85
  end
86
86
 
87
87
  def get_last_commit_sha
88
88
  get_last_commit_sha_cmd = 'git rev-parse HEAD^{commit}'
89
- Cmd.execute(get_last_commit_sha_cmd)
89
+ Cmd.execute_successfully(get_last_commit_sha_cmd)
90
90
  end
91
91
 
92
92
  def get_last_commit_message
93
93
  get_last_commit_message_cmd = 'git log -1 --pretty=%B'
94
- Cmd.execute(get_last_commit_message_cmd)
94
+ Cmd.execute_successfully(get_last_commit_message_cmd)
95
95
  end
96
96
 
97
97
  def generate_pmd_report(project)
98
98
  error_recovery_options = @error_recovery ? 'PMD_JAVA_OPTS="-Dpmd.error_recovery -ea" ' : ''
99
99
  run_path = "#{saved_distro_path(@pmd_branch_details.branch_last_sha)}/bin/run.sh"
100
100
  fail_on_violation = should_use_long_cli_options ? '--fail-on-violation false' : '-failOnViolation false'
101
+ auxclasspath_option = create_auxclasspath_option(project)
101
102
  pmd_cmd = "#{error_recovery_options}" \
102
103
  "#{run_path} pmd -d #{project.local_source_path} -f xml " \
103
104
  "-R #{project.get_config_path(@pmd_branch_name)} " \
104
105
  "-r #{project.get_pmd_report_path(@pmd_branch_name)} " \
105
106
  "#{fail_on_violation} -t #{@threads} " \
106
- "#{project.auxclasspath}"
107
+ "#{auxclasspath_option}" \
108
+ "#{pmd7? ? ' --no-progress' : ''}"
107
109
  start_time = Time.now
110
+ exit_code = nil
108
111
  if File.exist?(project.get_pmd_report_path(@pmd_branch_name))
109
112
  logger.warn "#{@pmd_branch_name}: Skipping PMD run - report " \
110
113
  "#{project.get_pmd_report_path(@pmd_branch_name)} already exists"
111
114
  else
112
- Cmd.execute(pmd_cmd)
115
+ status = Cmd.execute(pmd_cmd, project.get_project_target_dir(@pmd_branch_name))
116
+ exit_code = status.exitstatus
113
117
  end
114
118
  end_time = Time.now
115
- [end_time - start_time, end_time]
119
+ [end_time - start_time, end_time, exit_code]
116
120
  end
117
121
 
118
122
  def generate_config_for(project)
@@ -139,12 +143,12 @@ module PmdTester
139
143
  progress_logger = SimpleProgressLogger.new("generating #{project.name}'s PMD report")
140
144
  progress_logger.start
141
145
  generate_config_for(project)
142
- execution_time, end_time = generate_pmd_report(project)
146
+ execution_time, end_time, exit_code = generate_pmd_report(project)
143
147
  progress_logger.stop
144
148
  sum_time += execution_time
145
149
 
146
- report_details = PmdReportDetail.new(execution_time: execution_time, timestamp: end_time)
147
- report_details.save(project.get_report_info_path(@pmd_branch_name))
150
+ PmdReportDetail.create(execution_time: execution_time, timestamp: end_time,
151
+ exit_code: exit_code, report_info_path: project.get_report_info_path(@pmd_branch_name))
148
152
  logger.info "#{project.name}'s PMD report was generated successfully"
149
153
  end
150
154
 
@@ -167,7 +171,7 @@ module PmdTester
167
171
  def checkout_build_branch
168
172
  logger.info "#{@pmd_branch_name}: Checking out the branch"
169
173
  # note that this would fail if the tree is dirty
170
- Cmd.execute("git checkout #{@pmd_branch_name}")
174
+ Cmd.execute_successfully("git checkout #{@pmd_branch_name}")
171
175
 
172
176
  # determine the version
173
177
  @pmd_version = determine_pmd_version
@@ -193,12 +197,25 @@ module PmdTester
193
197
  end
194
198
 
195
199
  def wd_has_dirty_git_changes
196
- !Cmd.execute('git status --porcelain').empty?
200
+ !Cmd.execute_successfully('git status --porcelain').empty?
197
201
  end
198
202
 
199
203
  def should_use_long_cli_options
200
204
  logger.debug "PMD Version: #{@pmd_version}"
201
205
  Semver.compare(@pmd_version, '6.41.0') >= 0
202
206
  end
207
+
208
+ def create_auxclasspath_option(project)
209
+ auxclasspath_option = ''
210
+ unless project.auxclasspath.empty?
211
+ auxclasspath_option = should_use_long_cli_options ? '--aux-classpath ' : '-auxclasspath '
212
+ auxclasspath_option += project.auxclasspath
213
+ end
214
+ auxclasspath_option
215
+ end
216
+
217
+ def pmd7?
218
+ Semver.compare(@pmd_version, '7.0.0-SNAPSHOT') >= 0
219
+ end
203
220
  end
204
221
  end
@@ -30,7 +30,7 @@ module PmdTester
30
30
  # once but may be used with several tags.
31
31
  clone_cmd = "git clone --no-single-branch --depth 1 #{project.connection} #{path}"
32
32
 
33
- Cmd.execute(clone_cmd)
33
+ Cmd.execute_successfully(clone_cmd)
34
34
  end
35
35
 
36
36
  Dir.chdir(path) do
@@ -71,7 +71,7 @@ module PmdTester
71
71
  if project.auxclasspath_command
72
72
  logger.debug "Executing auxclasspath-command: #{project.auxclasspath_command}"
73
73
  auxclasspath = run_as_script(Dir.getwd, project.auxclasspath_command)
74
- project.auxclasspath = "-auxclasspath #{auxclasspath}"
74
+ project.auxclasspath = auxclasspath
75
75
  else
76
76
  project.auxclasspath = ''
77
77
  end
@@ -87,7 +87,7 @@ module PmdTester
87
87
  if command.start_with?('#!')
88
88
  shell = command.lines[0].chomp[2..] # remove leading "#!"
89
89
  end
90
- stdout = Cmd.execute("#{shell} #{script.path}")
90
+ stdout = Cmd.execute_successfully("#{shell} #{script.path}")
91
91
  ensure
92
92
  script.unlink
93
93
  end
@@ -99,7 +99,7 @@ module PmdTester
99
99
 
100
100
  reset_cmd = "git checkout #{tag}; git reset --hard #{tag}"
101
101
 
102
- Cmd.execute(reset_cmd)
102
+ Cmd.execute_successfully(reset_cmd)
103
103
  end
104
104
  end
105
105
  end
@@ -21,6 +21,9 @@ module PmdTester
21
21
  'base_timestamp' => rdiff.base_report.timestamp,
22
22
  'patch_timestamp' => rdiff.patch_report.timestamp,
23
23
 
24
+ 'base_exit_code' => rdiff.base_report.exit_code,
25
+ 'patch_exit_code' => rdiff.patch_report.exit_code,
26
+
24
27
  'rule_diffs' => rdiff.rule_summaries
25
28
  }
26
29
  end
@@ -176,7 +176,7 @@ module PmdTester
176
176
 
177
177
  # We only need to support git here, since PMD's repo is using git.
178
178
  diff_cmd = "git diff --name-only #{base}..#{patch} #{filepath_filter}"
179
- filenames = Cmd.execute(diff_cmd)
179
+ filenames = Cmd.execute_successfully(diff_cmd)
180
180
  end
181
181
  filenames.split("\n")
182
182
  end
data/lib/pmdtester/cmd.rb CHANGED
@@ -6,9 +6,35 @@ module PmdTester
6
6
  # Containing the common method for executing shell command
7
7
  class Cmd
8
8
  extend PmdTester
9
- def self.execute(cmd)
10
- stdout, _stderr, _status = internal_execute(cmd)
11
- stdout&.chomp!
9
+
10
+ #
11
+ # Executes the given command and returns the process status.
12
+ # stdout and stderr are written to the files "stdout.txt" and "stderr.txt"
13
+ # in path.
14
+ #
15
+ def self.execute(cmd, path)
16
+ stdout, stderr, status = internal_execute(cmd)
17
+
18
+ file = File.new("#{path}/stdout.txt", 'w')
19
+ file.puts stdout
20
+ file.close
21
+
22
+ file = File.new("#{path}/stderr.txt", 'w')
23
+ file.puts stderr
24
+ file.close
25
+
26
+ status
27
+ end
28
+
29
+ def self.execute_successfully(cmd)
30
+ stdout, stderr, status = internal_execute(cmd)
31
+
32
+ unless status.success?
33
+ logger.error stdout
34
+ logger.error stderr
35
+ raise CmdException.new(cmd, stdout, stderr, status)
36
+ end
37
+
12
38
  stdout
13
39
  end
14
40
 
@@ -22,14 +48,12 @@ module PmdTester
22
48
 
23
49
  stdout, stderr, status = Open3.capture3("#{cmd};")
24
50
 
25
- logger.debug stdout
26
- unless status.success?
27
- logger.error stdout
28
- logger.error stderr
29
- raise CmdException.new(cmd, stderr)
30
- end
51
+ logger.debug "status: #{status}"
52
+ logger.debug "stdout: #{stdout}"
53
+ logger.debug "stderr: #{stderr}"
31
54
 
32
55
  stdout&.chomp!
56
+ stderr&.chomp!
33
57
 
34
58
  [stdout, stderr, status]
35
59
  end
@@ -40,15 +64,19 @@ module PmdTester
40
64
  # The exception should be raised when the shell command failed.
41
65
  class CmdException < StandardError
42
66
  attr_reader :cmd
67
+ attr_reader :stdout
43
68
  attr_reader :error
69
+ attr_reader :status
44
70
  attr_reader :message
45
71
 
46
72
  COMMON_MSG = 'An error occurred while executing the shell command'
47
73
 
48
- def initialize(cmd, error)
74
+ def initialize(cmd, stdout, error, status)
49
75
  @cmd = cmd
76
+ @stdout = stdout
50
77
  @error = error
51
- @message = "#{COMMON_MSG} '#{cmd}'"
78
+ @status = status
79
+ @message = "#{COMMON_MSG} '#{cmd}' #{status}"
52
80
  end
53
81
  end
54
82
  end
@@ -8,15 +8,22 @@ module PmdTester
8
8
  attr_accessor :execution_time
9
9
  attr_accessor :timestamp
10
10
  attr_accessor :working_dir
11
+ attr_accessor :exit_code
11
12
 
12
- def initialize(execution_time: 0, timestamp: '', working_dir: Dir.getwd)
13
+ def initialize(execution_time: 0, timestamp: '', working_dir: Dir.getwd, exit_code: nil)
13
14
  @execution_time = execution_time
14
15
  @timestamp = timestamp
15
16
  @working_dir = working_dir
17
+ @exit_code = exit_code.nil? ? '?' : exit_code.to_s
16
18
  end
17
19
 
18
20
  def save(report_info_path)
19
- hash = { execution_time: @execution_time, timestamp: @timestamp, working_dir: @working_dir }
21
+ hash = {
22
+ execution_time: @execution_time,
23
+ timestamp: @timestamp,
24
+ working_dir: @working_dir,
25
+ exit_code: @exit_code
26
+ }
20
27
  file = File.new(report_info_path, 'w')
21
28
  file.puts JSON.generate(hash)
22
29
  file.close
@@ -36,6 +43,13 @@ module PmdTester
36
43
  self.class.convert_seconds(@execution_time)
37
44
  end
38
45
 
46
+ def self.create(execution_time: 0, timestamp: '', working_dir: Dir.getwd, exit_code: nil, report_info_path:)
47
+ detail = PmdReportDetail.new(execution_time: execution_time, timestamp: timestamp,
48
+ working_dir: working_dir, exit_code: exit_code)
49
+ detail.save(report_info_path)
50
+ detail
51
+ end
52
+
39
53
  # convert seconds into HH::MM::SS
40
54
  def self.convert_seconds(seconds)
41
55
  Time.at(seconds.abs).utc.strftime('%H:%M:%S')
@@ -32,7 +32,8 @@ module PmdTester
32
32
  file: report_file,
33
33
 
34
34
  timestamp: report_details.timestamp,
35
- exec_time: report_details.execution_time
35
+ exec_time: report_details.execution_time,
36
+ exit_code: report_details.exit_code
36
37
  )
37
38
  end
38
39
 
@@ -123,6 +123,9 @@ module PmdTester
123
123
  get_report_info_path(base_branch),
124
124
  get_report_info_path(patch_branch),
125
125
  filter_set)
126
+
127
+ report_diff.base_report.report_folder = get_project_target_dir(base_branch)
128
+ report_diff.patch_report.report_folder = get_project_target_dir(patch_branch)
126
129
  end
127
130
  end
128
131
  end
@@ -57,17 +57,22 @@ module PmdTester
57
57
  :configerrors_by_rule,
58
58
  :exec_time,
59
59
  :timestamp,
60
+ :exit_code,
60
61
  :file
61
62
 
63
+ attr_accessor :report_folder
64
+
62
65
  def initialize(report_document: nil,
63
66
  file: '',
64
67
  exec_time: 0,
65
- timestamp: '0')
68
+ timestamp: '0',
69
+ exit_code: '?')
66
70
  initialize_empty
67
71
  initialize_with_report_document report_document unless report_document.nil?
68
72
  @exec_time = exec_time
69
73
  @timestamp = timestamp
70
74
  @file = file
75
+ @exit_code = exit_code
71
76
  end
72
77
 
73
78
  def self.empty
@@ -108,6 +113,7 @@ module PmdTester
108
113
  @violations_by_file = CollectionByFile.new
109
114
  @errors_by_file = CollectionByFile.new
110
115
  @configerrors_by_rule = {}
116
+ @report_folder = ''
111
117
  end
112
118
  end
113
119
 
@@ -97,8 +97,8 @@ module PmdTester
97
97
  unzip_cmd = "unzip -qo #{zip_filename}"
98
98
 
99
99
  Dir.chdir(target_path) do
100
- Cmd.execute(wget_cmd) unless File.exist?(zip_filename)
101
- Cmd.execute(unzip_cmd)
100
+ Cmd.execute_successfully(wget_cmd) unless File.exist?(zip_filename)
101
+ Cmd.execute_successfully(unzip_cmd)
102
102
  end
103
103
 
104
104
  "#{target_path}/#{branch_filename}"
@@ -4,6 +4,12 @@ module PmdTester
4
4
  # Utility to deal with semantic versions
5
5
  class Semver
6
6
  def self.compare(version_a, version_b)
7
+ result = internal_compare(version_a, version_b)
8
+ PmdTester.logger.debug " result: #{result}"
9
+ result
10
+ end
11
+
12
+ private_class_method def self.internal_compare(version_a, version_b)
7
13
  PmdTester.logger.debug "Comparing #{version_a} <=> #{version_b}"
8
14
  m = /(\d+)\.(\d+)\.(\d+)(.*)/.match(version_a)
9
15
  a_major = m[1].to_i
data/lib/pmdtester.rb CHANGED
@@ -33,7 +33,7 @@ require_relative 'pmdtester/parsers/projects_parser'
33
33
  # and unexpected behaviors will not be introduced to PMD project
34
34
  # after fixing an issue and new rules can work as expected.
35
35
  module PmdTester
36
- VERSION = '1.4.1'
36
+ VERSION = '1.5.0'
37
37
  BASE = 'base'
38
38
  PATCH = 'patch'
39
39
  PR_NUM_ENV_VAR = 'PMD_CI_PULL_REQUEST_NUMBER' # see PmdBranchDetail
data/pmdtester.gemspec CHANGED
@@ -1,17 +1,17 @@
1
1
  # DO NOT EDIT THIS FILE. Instead, edit Rakefile, and run `rake hoe:spec`.
2
2
 
3
3
  # -*- encoding: utf-8 -*-
4
- # stub: pmdtester 1.4.1 ruby lib
4
+ # stub: pmdtester 1.5.0 ruby lib
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = "pmdtester".freeze
8
- s.version = "1.4.1"
8
+ s.version = "1.5.0"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0".freeze) if s.respond_to? :required_rubygems_version=
11
11
  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=
12
12
  s.require_paths = ["lib".freeze]
13
13
  s.authors = ["Andreas Dangel".freeze, "Binguo Bao".freeze, "Cl\u00E9ment Fournier".freeze]
14
- s.date = "2022-04-12"
14
+ s.date = "2022-05-06"
15
15
  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
16
16
  s.email = ["andreas.dangel@pmd-code.org".freeze, "djydewang@gmail.com".freeze, "clement.fournier76@gmail.com".freeze]
17
17
  s.executables = ["pmdtester".freeze]
@@ -71,6 +71,12 @@
71
71
  <td class="patch">{{diff.patch_timestamp}}</td>
72
72
  <td class="diff"></td>
73
73
  </tr>
74
+ <tr>
75
+ <td class="item">Exit Code</td>
76
+ <td class="base">{{diff.base_exit_code}} <a href="base_stdout.txt">stdout</a> | <a href="base_stderr.txt">stderr</a></td>
77
+ <td class="patch">{{diff.patch_exit_code}} <a href="patch_stdout.txt">stdout</a> | <a href="patch_stderr.txt">stderr</a></td>
78
+ <td class="diff"></td>
79
+ </tr>
74
80
  <tr>
75
81
  <td class="item">Full Report</td>
76
82
  <td class="base"><a href="base_pmd_report.html">Base PMD Report</a></td>
@@ -53,6 +53,10 @@
53
53
  <td class="item">Timestamp</td>
54
54
  <td class="{{branch}}">{{report.timestamp}}</td>
55
55
  </tr>
56
+ <tr>
57
+ <td class="item">Exit Code</td>
58
+ <td class="{{branch}}">{{report.exit_code}} <a href="{{branch}}_stdout.txt">stdout</a> | <a href="{{branch}}_stderr.txt">stderr</a></td>
59
+ </tr>
56
60
  <tr>
57
61
  <td class="item">Full Report</td>
58
62
  <td class="{{branch}}"><a href="{{branch}}_pmd_report.xml">{{branch}}_pmd_report.xml</a></td>
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: pmdtester
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.4.1
4
+ version: 1.5.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Andreas Dangel
@@ -10,7 +10,7 @@ authors:
10
10
  autorequire:
11
11
  bindir: bin
12
12
  cert_chain: []
13
- date: 2022-04-12 00:00:00.000000000 Z
13
+ date: 2022-05-06 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: nokogiri