gjp 0.30.0 → 0.31.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.
- data/README.md +28 -6
- data/lib/gjp.rb +1 -0
- data/lib/gjp/cli.rb +17 -0
- data/lib/gjp/kit_checker.rb +107 -0
- data/lib/gjp/version.rb +1 -1
- data/spec/lib/kit_checker_spec.rb +119 -0
- metadata +5 -2
data/README.md
CHANGED
@@ -114,7 +114,13 @@ The remaining (mostly very outdated) jars will be listed by `gjp` when the downl
|
|
114
114
|
|
115
115
|
to get pointers to relevant sites if available in the pom itself.
|
116
116
|
|
117
|
-
A list of commonly used jars can be found [below](#frequently-used-
|
117
|
+
A list of commonly used jars can be found [below](#frequently-used-sources).
|
118
|
+
|
119
|
+
You can also use:
|
120
|
+
|
121
|
+
gjp list-kit-missing-sources
|
122
|
+
|
123
|
+
To get a list of jars that have one or more `.class` file which does not have a corresponding `.java` file in `kit/` (or zip files in `kit/`).
|
118
124
|
|
119
125
|
### Ant builds
|
120
126
|
|
@@ -158,11 +164,27 @@ If you want to be 100% sure your package builds without network access, you can
|
|
158
164
|
|
159
165
|
* if packages build at first but then fail after a few days because Maven tries to connect to the Internet, add the `--option` flag to the `mvn` line in `build.sh`;
|
160
166
|
|
161
|
-
### Frequently used
|
162
|
-
|
163
|
-
*
|
164
|
-
*
|
165
|
-
*
|
167
|
+
### Frequently used sources
|
168
|
+
|
169
|
+
* antlr-2.7.7: `wget http://www.antlr2.org/download/antlr-2.7.7.tar.gz -O kit/m2/antlr/antlr/2.7.7/antlr-2.7.7-sources.tar.gz`;
|
170
|
+
* ant-launcher-1.6.5: sources included in ant-1.6.5;
|
171
|
+
* asm-3.3.1: `wget http://download.forge.ow2.org/asm/asm-3.3.1.tar.gz -O kit/m2/asm/asm/3.3.1/asm-3.3.1-sources.tar.gz`;
|
172
|
+
* jsr305-1.3.9: sources included in jar;
|
173
|
+
* jsr305-2.0.1: sources included in jar;
|
174
|
+
* commons-lang-1.0: `wget http://archive.apache.org/dist/commons/lang/source/lang-1.0-src.tar.gz -O kit/m2/commons-lang/commons-lang/1.0/commons-lang-1.0-sources.tar.gz`;
|
175
|
+
* commons-logging-api-1.1: `wget http://archive.apache.org/dist/commons/logging/source/commons-logging-1.1-src.tar.gz -O kit/m2/commons-logging/commons-logging/1.1/commons-logging-1.1-sources.tar.gz` (included in commons-logging-1.1);
|
176
|
+
* commons-logging-1.0: `wget http://archive.apache.org/dist/commons/logging/source/commons-logging-1.0-src.tar.gz -O kit/m2/commons-logging/commons-logging/1.0/commons-logging-1.0-sources.tar.gz`;
|
177
|
+
* dom4j-1.1: `wget http://dom4j.cvs.sourceforge.net/viewvc/dom4j/dom4j/?view=tar&pathrev=dom4j-1-1 -O kit/m2/dom4j/dom4j/1.1/dom4j-1.1-sources.tar.gz`;
|
178
|
+
* doxia-sink-api-1.0-alpha-4: use `svn export http://svn.apache.org/repos/asf/maven/doxia/doxia/tags/doxia-sink-api-1.0-alpha-4/ kit/m2/doxia/doxia-sink-api/1.0-alpha-4/doxia-sink-api-1.0-alpha-4-sources`;
|
179
|
+
* kxml2-2.2.2: use `wget http://sourceforge.net/projects/kxml/files/kxml2/2.2.2/kxml2-src-2.2.2.zip/download -O kit/m2/net/sf/kxml/kxml2/2.2.2/kxml2-2.2.2-sources.zip`;
|
180
|
+
* log4j-1.2.12: `wget http://archive.apache.org/dist/logging/log4j/1.2.12/logging-log4j-1.2.12.tar.gz -O kit/m2/log4j/log4j/1.2.12/log4j-1.2.12-sources.tar.gz`;
|
181
|
+
* stringtemplate-3.2: `wget http://www.stringtemplate.org/download/stringtemplate-3.2.tar.gz -O kit/m2/org/antlr/stringtemplate/3.2/stringtemplate-3.2-sources.tar.gz`;
|
182
|
+
* velocity-tools-2.0: `wget http://archive.apache.org/dist/velocity/tools/2.0/velocity-tools-2.0-src.tar.gz -O kit/m2/org/apache/velocity/velocity-tools/2.0/velocity-tools-2.0-sources.tar.gz`;
|
183
|
+
* velocity-1.5: `wget http://archive.apache.org/dist/velocity/engine/1.5/velocity-1.5.tar.gz -O kit/m2/org/apache/velocity/velocity/1.5/velocity-1.5-sources.tar.gz`;
|
184
|
+
* trilead-ssh2-build213-svnkit-1.3: `svn export http://svn.svnkit.com/repos/svnkit/tags/1.3.5/ kit/m2/org/tmatesoft/svnkit/svnkit/1.3.5/svnkit-1.3.5-sources` (included in svnkit 1.3.5 full sources because of custom patch);
|
185
|
+
* xercesImpl-2.9.1: `wget http://archive.apache.org/dist/xerces/j/source/Xerces-J-src.2.9.1.tar.gz -O kit/m2/xerces/xercesImpl/2.9.1/xercesImpl-2.9.1-sources.tar.gz`;
|
186
|
+
* xmlpull-1.1.3.1: wget `http://www.extreme.indiana.edu/xmlpull-website/v1/download/xmlpull_1_1_3_4c_src.tgz -O kit/m2/xmlpull/xmlpull/1.1.3.1/xmlpull-1.1.3.1-sources.tar.gz`
|
187
|
+
* xmlunit-1.3: `wget http://sourceforge.net/projects/xmlunit/files/xmlunit%20for%20Java/XMLUnit%20for%20Java%201.3/xmlunit-1.3-src.zip/download -O kit/m2/xmlunit/xmlunit/1.3/xmlunit-1.3-sources.zip`;
|
166
188
|
|
167
189
|
## Motivation
|
168
190
|
|
data/lib/gjp.rb
CHANGED
data/lib/gjp/cli.rb
CHANGED
@@ -339,6 +339,23 @@ module Gjp
|
|
339
339
|
end
|
340
340
|
end
|
341
341
|
|
342
|
+
subcommand "list-kit-missing-sources", "Locates jars in kit/ that have no source files" do
|
343
|
+
def execute
|
344
|
+
checking_exceptions do
|
345
|
+
project = Gjp::Project.new(".")
|
346
|
+
kit_checker = Gjp::KitChecker.new(project)
|
347
|
+
|
348
|
+
ensure_dry_running(false, project) do
|
349
|
+
puts "Some source files were not found in these archives:"
|
350
|
+
kit_checker.get_unsourced.each do |archive|
|
351
|
+
percentage = "%.2f" % (100.0 * archive[:unsourced_class_names].length()/archive[:class_names].length())
|
352
|
+
puts "#{format_path(archive[:archive], project)} (~#{percentage}% missing)"
|
353
|
+
end
|
354
|
+
end
|
355
|
+
end
|
356
|
+
end
|
357
|
+
end
|
358
|
+
|
342
359
|
private
|
343
360
|
|
344
361
|
def ensure_dry_running(state, project)
|
@@ -0,0 +1,107 @@
|
|
1
|
+
# encoding: UTF-8
|
2
|
+
|
3
|
+
require "find"
|
4
|
+
|
5
|
+
module Gjp
|
6
|
+
# checks kits for errors
|
7
|
+
class KitChecker
|
8
|
+
include Logger
|
9
|
+
|
10
|
+
def initialize(project)
|
11
|
+
@project = project
|
12
|
+
end
|
13
|
+
|
14
|
+
# returns an array of [path, archive] couples found in kit/
|
15
|
+
# archive is not nil if path is inside a zip file
|
16
|
+
def kit_file_paths
|
17
|
+
@project.from_directory("kit") do
|
18
|
+
plain_file_paths = Dir[File.join("**", "*")].select do |path|
|
19
|
+
File.file?(path)
|
20
|
+
end.map do |path|
|
21
|
+
[path, nil]
|
22
|
+
end
|
23
|
+
|
24
|
+
archived_file_paths = plain_file_paths.select do |path, archive|
|
25
|
+
path. =~ /\.(zip)|([jwe]ar)$/
|
26
|
+
end.map do |path, archive|
|
27
|
+
result = []
|
28
|
+
Zip::ZipFile.foreach(path) do |entry|
|
29
|
+
if entry.file?
|
30
|
+
result << [entry.to_s, path]
|
31
|
+
end
|
32
|
+
end
|
33
|
+
result
|
34
|
+
end.flatten(1)
|
35
|
+
|
36
|
+
plain_file_paths + archived_file_paths
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
40
|
+
# returns a list of class names for which
|
41
|
+
# we have source files in kit/
|
42
|
+
def get_source_class_names(paths)
|
43
|
+
source_paths = paths.select do |path, archive|
|
44
|
+
path =~ /\.java$/
|
45
|
+
end
|
46
|
+
|
47
|
+
# heuristically add all possible package names, walking
|
48
|
+
# back the directory tree all the way back to root.
|
49
|
+
# This could add non-existent names, but allows not looking
|
50
|
+
# in the file at all
|
51
|
+
class_names = source_paths.map do |path, archive|
|
52
|
+
class_name = path_to_class(path)
|
53
|
+
parts = class_name.split(".")
|
54
|
+
last_index = parts.length() -1
|
55
|
+
(0..last_index).map do |i|
|
56
|
+
parts[i..last_index].join(".")
|
57
|
+
end
|
58
|
+
end.flatten
|
59
|
+
|
60
|
+
Set.new(class_names)
|
61
|
+
end
|
62
|
+
|
63
|
+
# returns a list of class names for which
|
64
|
+
# we have binary files in kit/
|
65
|
+
def get_compiled_classes(paths)
|
66
|
+
result = {}
|
67
|
+
compiled_paths = paths.select do |path, archive|
|
68
|
+
path =~ /\.class$/
|
69
|
+
end.each do |path, archive|
|
70
|
+
class_name = path_to_class(path)
|
71
|
+
if result[archive] == nil
|
72
|
+
result[archive] = [class_name]
|
73
|
+
else
|
74
|
+
result[archive] << class_name
|
75
|
+
end
|
76
|
+
end
|
77
|
+
|
78
|
+
result
|
79
|
+
end
|
80
|
+
|
81
|
+
# returns a hash that associates archive names and
|
82
|
+
# the unsourced classes within them
|
83
|
+
def get_unsourced
|
84
|
+
paths = kit_file_paths
|
85
|
+
source_class_names = get_source_class_names(paths)
|
86
|
+
archive_paths_to_class_names = get_compiled_classes(paths)
|
87
|
+
|
88
|
+
result = archive_paths_to_class_names.map do |archive, class_names|
|
89
|
+
unsourced_class_names = class_names.select do |class_name|
|
90
|
+
source_class_names.include?(class_name) == false
|
91
|
+
end
|
92
|
+
{:archive => archive, :class_names => class_names, :unsourced_class_names => unsourced_class_names}
|
93
|
+
end.select do |archive|
|
94
|
+
archive[:unsourced_class_names].any?
|
95
|
+
end
|
96
|
+
end
|
97
|
+
|
98
|
+
private
|
99
|
+
# attempts to turn a .java/.class file name into a class name
|
100
|
+
def path_to_class(path)
|
101
|
+
path
|
102
|
+
.gsub(/\$.+?\./, ".") # remove $InnerClasses
|
103
|
+
.gsub(/\..+?$/, "") # remove .extension
|
104
|
+
.gsub("/", ".") # convert paths in package names
|
105
|
+
end
|
106
|
+
end
|
107
|
+
end
|
data/lib/gjp/version.rb
CHANGED
@@ -0,0 +1,119 @@
|
|
1
|
+
# encoding: UTF-8
|
2
|
+
|
3
|
+
require "spec_helper"
|
4
|
+
require "rubygems"
|
5
|
+
require "zip/zip"
|
6
|
+
|
7
|
+
describe Gjp::KitChecker do
|
8
|
+
include Gjp::Mockers
|
9
|
+
|
10
|
+
before(:each) do
|
11
|
+
create_mock_project
|
12
|
+
@kit_checker = Gjp::KitChecker.new(@project)
|
13
|
+
end
|
14
|
+
|
15
|
+
after(:each) do
|
16
|
+
delete_mock_project
|
17
|
+
end
|
18
|
+
|
19
|
+
describe "#kit_file_paths" do
|
20
|
+
it "returns an array of paths found in kit" do
|
21
|
+
@project.from_directory("kit") do
|
22
|
+
FileUtils.touch("top_level")
|
23
|
+
FileUtils.mkdir_p("directory")
|
24
|
+
FileUtils.touch(File.join("directory","in_directory"))
|
25
|
+
Zip::ZipFile.open("zipped.zip", Zip::ZipFile::CREATE) do |zipfile|
|
26
|
+
Dir[File.join("directory", "**", "**")].each do |file|
|
27
|
+
zipfile.add(file.sub("/directory", ""), file)
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
all_files = @kit_checker.kit_file_paths
|
33
|
+
|
34
|
+
all_files.should include ["top_level", nil]
|
35
|
+
all_files.should_not include ["directory", nil]
|
36
|
+
all_files.should include ["directory/in_directory", nil]
|
37
|
+
all_files.should include ["zipped.zip", nil]
|
38
|
+
all_files.should include ["directory/in_directory", "zipped.zip"]
|
39
|
+
end
|
40
|
+
end
|
41
|
+
|
42
|
+
describe "#get_source_classes" do
|
43
|
+
it "distills source class names in kit" do
|
44
|
+
all_files = [
|
45
|
+
["path/to/ClassOne.java", nil],
|
46
|
+
["path/to/ClassTwo.java", "path/to/archive.jar"],
|
47
|
+
["ClassThree.java", "another_archive.jar"],
|
48
|
+
["path/to/CompiledClass.class", "yet_another.jar"],
|
49
|
+
]
|
50
|
+
|
51
|
+
class_names = @kit_checker.get_source_class_names(all_files)
|
52
|
+
|
53
|
+
class_names.should include "path.to.ClassOne"
|
54
|
+
class_names.should include "path.to.ClassTwo"
|
55
|
+
class_names.should include "ClassThree"
|
56
|
+
class_names.should_not include "path.to.CompiledClass"
|
57
|
+
end
|
58
|
+
end
|
59
|
+
|
60
|
+
describe "#get_compiled_classes" do
|
61
|
+
it "distills source class names in kit" do
|
62
|
+
all_files = [
|
63
|
+
["path/to/ClassOne.class", nil],
|
64
|
+
["path/to/ClassTwo.class", "path/to/archive.jar"],
|
65
|
+
["ClassThree.class", "another_archive.jar"],
|
66
|
+
["path/to/SourceClass.java", "yet_another.jar"],
|
67
|
+
]
|
68
|
+
|
69
|
+
classes = @kit_checker.get_compiled_classes(all_files)
|
70
|
+
|
71
|
+
classes[nil].should include "path.to.ClassOne"
|
72
|
+
classes["path/to/archive.jar"].should include "path.to.ClassTwo"
|
73
|
+
classes["another_archive.jar"].should include "ClassThree"
|
74
|
+
classes["yet_another.jar"].should be_nil
|
75
|
+
end
|
76
|
+
end
|
77
|
+
|
78
|
+
describe "#get_unsourced" do
|
79
|
+
it "returns a list of jars wich source files are missing" do
|
80
|
+
@project.from_directory("kit") do
|
81
|
+
FileUtils.mkdir_p("package1")
|
82
|
+
FileUtils.touch(File.join("package1","UnsourcedClass.class"))
|
83
|
+
|
84
|
+
FileUtils.mkdir_p("package2")
|
85
|
+
FileUtils.touch(File.join("package2","SourcedClass.java"))
|
86
|
+
Zip::ZipFile.open("zipped-source-2.jar", Zip::ZipFile::CREATE) do |zipfile|
|
87
|
+
Dir[File.join("package2", "**", "**")].each do |file|
|
88
|
+
zipfile.add(file.sub("/package2", ""), file)
|
89
|
+
end
|
90
|
+
end
|
91
|
+
FileUtils.rm(File.join("package2","SourcedClass.java"))
|
92
|
+
FileUtils.touch(File.join("package2","SourcedClass.class"))
|
93
|
+
Zip::ZipFile.open("zipped-2.jar", Zip::ZipFile::CREATE) do |zipfile|
|
94
|
+
Dir[File.join("package2", "**", "**")].each do |file|
|
95
|
+
zipfile.add(file.sub("/package2", ""), file)
|
96
|
+
end
|
97
|
+
end
|
98
|
+
|
99
|
+
FileUtils.mkdir_p("package3")
|
100
|
+
FileUtils.touch(File.join("package3","SourcedSameArchive.java"))
|
101
|
+
FileUtils.touch(File.join("package3","SourcedSameArchive.class"))
|
102
|
+
Zip::ZipFile.open("zipped-3.zip", Zip::ZipFile::CREATE) do |zipfile|
|
103
|
+
Dir[File.join("package3", "**", "**")].each do |file|
|
104
|
+
zipfile.add(file.sub("/package3", ""), file)
|
105
|
+
end
|
106
|
+
end
|
107
|
+
end
|
108
|
+
|
109
|
+
unsourced = @kit_checker.get_unsourced
|
110
|
+
unsourced.length().should eq 1
|
111
|
+
|
112
|
+
unsourced.first[:archive].should be_nil
|
113
|
+
unsourced.first[:class_names].should include "package1.UnsourcedClass"
|
114
|
+
unsourced.first[:class_names].should include "package2.SourcedClass"
|
115
|
+
unsourced.first[:class_names].should include "package3.SourcedSameArchive"
|
116
|
+
unsourced.first[:unsourced_class_names].should include "package1.UnsourcedClass"
|
117
|
+
end
|
118
|
+
end
|
119
|
+
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: gjp
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.31.0
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2013-12-
|
12
|
+
date: 2013-12-30 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: rake
|
@@ -161,6 +161,7 @@ files:
|
|
161
161
|
- lib/gjp/archiver.rb
|
162
162
|
- lib/gjp/cli.rb
|
163
163
|
- lib/gjp/git.rb
|
164
|
+
- lib/gjp/kit_checker.rb
|
164
165
|
- lib/gjp/kit_runner.rb
|
165
166
|
- lib/gjp/kit_spec_adapter.rb
|
166
167
|
- lib/gjp/limited_network_user.rb
|
@@ -204,6 +205,7 @@ files:
|
|
204
205
|
- spec/lib/ant_runner_spec.rb
|
205
206
|
- spec/lib/archiver_spec.rb
|
206
207
|
- spec/lib/git_spec.rb
|
208
|
+
- spec/lib/kit_checker_spec.rb
|
207
209
|
- spec/lib/kit_runner_spec.rb
|
208
210
|
- spec/lib/limited_network_user_spec_interactive.rb
|
209
211
|
- spec/lib/maven_runner_spec.rb
|
@@ -262,6 +264,7 @@ test_files:
|
|
262
264
|
- spec/lib/ant_runner_spec.rb
|
263
265
|
- spec/lib/archiver_spec.rb
|
264
266
|
- spec/lib/git_spec.rb
|
267
|
+
- spec/lib/kit_checker_spec.rb
|
265
268
|
- spec/lib/kit_runner_spec.rb
|
266
269
|
- spec/lib/limited_network_user_spec_interactive.rb
|
267
270
|
- spec/lib/maven_runner_spec.rb
|