gjp 0.11.1 → 0.11.2

Sign up to get free protection for your applications and to get access to all the features.
@@ -7,18 +7,16 @@ require "open-uri"
7
7
  module Gjp
8
8
  # attempts to get java projects' scm addresses
9
9
  class SourceAddressGetter
10
- def self.log
11
- Gjp.logger
12
- end
10
+ include Logger
13
11
 
14
12
  # returns the pom corresponding to a file or directory, if it can be found
15
- def self.get_source_address(file)
13
+ def get_source_address(file)
16
14
  log.info("looking for source address for: #{file}")
17
15
  (get_source_address_from_pom(file) or get_source_address_from_github(file))
18
16
  end
19
17
 
20
18
  # returns an scm address in a pom file
21
- def self.get_source_address_from_pom(file)
19
+ def get_source_address_from_pom(file)
22
20
  pom = Pom.new(file)
23
21
  result = pom.connection_address
24
22
 
@@ -29,7 +27,7 @@ module Gjp
29
27
  end
30
28
 
31
29
  # returns an scm address looking for it on github
32
- def self.get_source_address_from_github(file)
30
+ def get_source_address_from_github(file)
33
31
  pom = Pom.new(file)
34
32
 
35
33
  result = (github_search(pom.artifact_id) or github_search(pom.artifact_id.split("-").first) or github_search(pom.group_id))
@@ -41,7 +39,7 @@ module Gjp
41
39
  end
42
40
 
43
41
  # returns a Giuthub repo address based on the keyword
44
- def self.github_search(keyword)
42
+ def github_search(keyword)
45
43
  if keyword != "" and keyword != nil
46
44
  response = RestClient.get "https://api.github.com/legacy/repos/search/" + CGI::escape(keyword), :user_agent => "gjp/" + Gjp::VERSION, :language => "java", :sort => "forks"
47
45
  json = JSON.parse(response.to_s)
@@ -5,12 +5,10 @@ require "rest_client"
5
5
  module Gjp
6
6
  # attempts to get java projects' sources from scm
7
7
  class SourceGetter
8
- def self.log
9
- Gjp.logger
10
- end
8
+ include Logger
11
9
 
12
10
  # downloads a project's source into a specified directory
13
- def self.get_source(address, pomfile, directory)
11
+ def get_source(address, pomfile, directory)
14
12
  log.info("downloading: #{address} in #{directory}, pomfile: #{pomfile}")
15
13
 
16
14
  dummy, prefix, scm_address = address.split(/^([^:]+):(.*)$/)
@@ -20,7 +18,7 @@ module Gjp
20
18
  end
21
19
 
22
20
  # checks code out from an scm
23
- def self.get_source_from_scm(prefix, scm_address, pomfile, directory)
21
+ def get_source_from_scm(prefix, scm_address, pomfile, directory)
24
22
  pom = Pom.new(pomfile)
25
23
  dir = File.join(directory, "#{pom.group_id}:#{pom.artifact_id}:#{pom.version}")
26
24
  begin
@@ -37,7 +35,7 @@ module Gjp
37
35
  end
38
36
 
39
37
  # checks code out of git
40
- def self.get_source_from_git(scm_address, dir, version)
38
+ def get_source_from_git(scm_address, dir, version)
41
39
  `git clone #{scm_address} #{dir}`
42
40
 
43
41
  Dir.chdir(dir) do
@@ -53,7 +51,7 @@ module Gjp
53
51
  end
54
52
 
55
53
  # checks code out of svn
56
- def self.get_source_from_svn(scm_address, dir, version)
54
+ def get_source_from_svn(scm_address, dir, version)
57
55
  `svn checkout #{scm_address} #{dir}`
58
56
 
59
57
  Dir.chdir(dir) do
@@ -69,16 +67,18 @@ module Gjp
69
67
  end
70
68
 
71
69
  # return the (heuristically) most similar tag to the specified version
72
- def self.get_best_tag(tags, version)
73
- versions_to_tags =Hash[
70
+ def get_best_tag(tags, version)
71
+ version_matcher = VersionMatcher.new
72
+
73
+ versions_to_tags = Hash[
74
74
  *tags.map do |tag|
75
- [VersionMatcher.split_version(tag)[1], tag]
75
+ [version_matcher.split_version(tag)[1], tag]
76
76
  end.flatten
77
77
  ]
78
78
 
79
79
  log.info("found the following versions and tags: #{versions_to_tags}")
80
80
 
81
- best_version = VersionMatcher.best_match(version, versions_to_tags.keys)
81
+ best_version = version_matcher.best_match(version, versions_to_tags.keys)
82
82
  versions_to_tags[best_version]
83
83
  end
84
84
  end
@@ -1,5 +1,5 @@
1
1
  # encoding: UTF-8
2
2
 
3
3
  module Gjp
4
- VERSION = "0.11.1"
4
+ VERSION = "0.11.2"
5
5
  end
@@ -5,15 +5,13 @@ require "text"
5
5
  module Gjp
6
6
  # heuristically matches version strings
7
7
  class VersionMatcher
8
- def self.log
9
- Gjp.logger
10
- end
8
+ include Logger
11
9
 
12
10
  # heuristically splits a full name into an artifact name and version string
13
11
  # assumes that version strings begin with a numeric character and are separated
14
12
  # by a ., -, _, ~ or space
15
13
  # returns a [name, version] pair
16
- def self.split_version(full_name)
14
+ def split_version(full_name)
17
15
  matches = full_name.match(/(.*?)(?:[\.\-\_ ~,]?([0-9].*))?$/)
18
16
  if matches != nil and matches.length > 1
19
17
  [matches[1], matches[2]]
@@ -29,7 +27,7 @@ module Gjp
29
27
  # - "comparison" is a subtraction if the chunk is an integer, a string distance measure otherwise
30
28
  # - score weighs differently on chunk index (first chunks are most important)
31
29
  # - lowest score wins
32
- def self.best_match(my_version, their_versions)
30
+ def best_match(my_version, their_versions)
33
31
  log.debug("version comparison: #{my_version} vs #{their_versions.join(', ')}")
34
32
 
35
33
  my_chunks = my_version.split /[\.\-\_ ~,]/
@@ -77,7 +75,7 @@ module Gjp
77
75
  # for integers, the score is the difference between their values
78
76
  # for strings, the score is the Levenshtein distance
79
77
  # in any case score is normalized between 0 (identical) and 99 (very different/uncomparable)
80
- def self.chunk_distance(my_chunk, their_chunk)
78
+ def chunk_distance(my_chunk, their_chunk)
81
79
  if my_chunk == nil
82
80
  my_chunk = "0"
83
81
  end
@@ -0,0 +1,3 @@
1
+ gjp will generate file lists for all packages here.
2
+
3
+ You can edit them manually if you wish before package generation.
@@ -0,0 +1,9 @@
1
+ Any files you put here will be copied as is in the "kit" package.
2
+
3
+ You should add all dependencies and build tools here, so that they are
4
+ available at build time.
5
+
6
+ gjp will recognise Maven, Ant and other popular build tool binaries in here.
7
+
8
+ Some generally useful configuration files are also placed here (eg.
9
+ m2/settings.xml for Maven builds.
@@ -0,0 +1,257 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+
3
+ <!--
4
+ Licensed to the Apache Software Foundation (ASF) under one
5
+ or more contributor license agreements. See the NOTICE file
6
+ distributed with this work for additional information
7
+ regarding copyright ownership. The ASF licenses this file
8
+ to you under the Apache License, Version 2.0 (the
9
+ "License"); you may not use this file except in compliance
10
+ with the License. You may obtain a copy of the License at
11
+
12
+ http://www.apache.org/licenses/LICENSE-2.0
13
+
14
+ Unless required by applicable law or agreed to in writing,
15
+ software distributed under the License is distributed on an
16
+ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
17
+ KIND, either express or implied. See the License for the
18
+ specific language governing permissions and limitations
19
+ under the License.
20
+ -->
21
+
22
+ <!--
23
+ | This is the configuration file for Maven. It can be specified at two levels:
24
+ |
25
+ | 1. User Level. This settings.xml file provides configuration for a single user,
26
+ | and is normally provided in ${user.home}/.m2/settings.xml.
27
+ |
28
+ | NOTE: This location can be overridden with the CLI option:
29
+ |
30
+ | -s /path/to/user/settings.xml
31
+ |
32
+ | 2. Global Level. This settings.xml file provides configuration for all Maven
33
+ | users on a machine (assuming they're all using the same Maven
34
+ | installation). It's normally provided in
35
+ | ${maven.home}/conf/settings.xml.
36
+ |
37
+ | NOTE: This location can be overridden with the CLI option:
38
+ |
39
+ | -gs /path/to/global/settings.xml
40
+ |
41
+ | The sections in this sample file are intended to give you a running start at
42
+ | getting the most out of your Maven installation. Where appropriate, the default
43
+ | values (values used when the setting is not specified) are provided.
44
+ |
45
+ |-->
46
+ <settings xmlns="http://maven.apache.org/SETTINGS/1.0.0"
47
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
48
+ xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0 http://maven.apache.org/xsd/settings-1.0.0.xsd">
49
+ <!-- localRepository
50
+ | The path to the local repository maven will use to store artifacts.
51
+ |
52
+ | Default: ~/.m2/repository
53
+ <localRepository>/path/to/local/repo</localRepository>
54
+ -->
55
+
56
+ <!-- interactiveMode
57
+ | This will determine whether maven prompts you when it needs input. If set to false,
58
+ | maven will use a sensible default value, perhaps based on some other setting, for
59
+ | the parameter in question.
60
+ |
61
+ | Default: true
62
+ <interactiveMode>true</interactiveMode>
63
+ -->
64
+
65
+ <!-- offline
66
+ | Determines whether maven should attempt to connect to the network when executing a build.
67
+ | This will have an effect on artifact downloads, artifact deployment, and others.
68
+ |
69
+ | Default: false
70
+ <offline>false</offline>
71
+ -->
72
+
73
+ <!-- pluginGroups
74
+ | This is a list of additional group identifiers that will be searched when resolving plugins by their prefix, i.e.
75
+ | when invoking a command line like "mvn prefix:goal". Maven will automatically add the group identifiers
76
+ | "org.apache.maven.plugins" and "org.codehaus.mojo" if these are not already contained in the list.
77
+ |-->
78
+ <pluginGroups>
79
+ <!-- pluginGroup
80
+ | Specifies a further group identifier to use for plugin lookup.
81
+ <pluginGroup>com.your.plugins</pluginGroup>
82
+ -->
83
+ </pluginGroups>
84
+
85
+ <!-- proxies
86
+ | This is a list of proxies which can be used on this machine to connect to the network.
87
+ | Unless otherwise specified (by system property or command-line switch), the first proxy
88
+ | specification in this list marked as active will be used.
89
+ |-->
90
+ <proxies>
91
+ <!-- proxy
92
+ | Specification for one proxy, to be used in connecting to the network.
93
+ |
94
+ <proxy>
95
+ <id>optional</id>
96
+ <active>true</active>
97
+ <protocol>http</protocol>
98
+ <username>proxyuser</username>
99
+ <password>proxypass</password>
100
+ <host>proxy.host.net</host>
101
+ <port>80</port>
102
+ <nonProxyHosts>local.net|some.host.com</nonProxyHosts>
103
+ </proxy>
104
+ -->
105
+ </proxies>
106
+
107
+ <!-- servers
108
+ | This is a list of authentication profiles, keyed by the server-id used within the system.
109
+ | Authentication profiles can be used whenever maven must make a connection to a remote server.
110
+ |-->
111
+ <servers>
112
+ <!-- server
113
+ | Specifies the authentication information to use when connecting to a particular server, identified by
114
+ | a unique name within the system (referred to by the 'id' attribute below).
115
+ |
116
+ | NOTE: You should either specify username/password OR privateKey/passphrase, since these pairings are
117
+ | used together.
118
+ |
119
+ <server>
120
+ <id>deploymentRepo</id>
121
+ <username>repouser</username>
122
+ <password>repopwd</password>
123
+ </server>
124
+ -->
125
+
126
+ <!-- Another sample, using keys to authenticate.
127
+ <server>
128
+ <id>siteServer</id>
129
+ <privateKey>/path/to/private/key</privateKey>
130
+ <passphrase>optional; leave empty if not used.</passphrase>
131
+ </server>
132
+ -->
133
+ </servers>
134
+
135
+ <!-- mirrors
136
+ | This is a list of mirrors to be used in downloading artifacts from remote repositories.
137
+ |
138
+ | It works like this: a POM may declare a repository to use in resolving certain artifacts.
139
+ | However, this repository may have problems with heavy traffic at times, so people have mirrored
140
+ | it to several places.
141
+ |
142
+ | That repository definition will have a unique id, so we can create a mirror reference for that
143
+ | repository, to be used as an alternate download site. The mirror site will be the preferred
144
+ | server for that repository.
145
+ |-->
146
+ <mirrors>
147
+ <!-- mirror
148
+ | Specifies a repository mirror site to use instead of a given repository. The repository that
149
+ | this mirror serves has an ID that matches the mirrorOf element of this mirror. IDs are used
150
+ | for inheritance and direct lookup purposes, and must be unique across the set of mirrors.
151
+ |
152
+ <mirror>
153
+ <id>mirrorId</id>
154
+ <mirrorOf>repositoryId</mirrorOf>
155
+ <name>Human Readable Name for this Mirror.</name>
156
+ <url>http://my.repository.com/repo/path</url>
157
+ </mirror>
158
+ -->
159
+ </mirrors>
160
+
161
+ <!-- profiles
162
+ | This is a list of profiles which can be activated in a variety of ways, and which can modify
163
+ | the build process. Profiles provided in the settings.xml are intended to provide local machine-
164
+ | specific paths and repository locations which allow the build to work in the local environment.
165
+ |
166
+ | For example, if you have an integration testing plugin - like cactus - that needs to know where
167
+ | your Tomcat instance is installed, you can provide a variable here such that the variable is
168
+ | dereferenced during the build process to configure the cactus plugin.
169
+ |
170
+ | As noted above, profiles can be activated in a variety of ways. One way - the activeProfiles
171
+ | section of this document (settings.xml) - will be discussed later. Another way essentially
172
+ | relies on the detection of a system property, either matching a particular value for the property,
173
+ | or merely testing its existence. Profiles can also be activated by JDK version prefix, where a
174
+ | value of '1.4' might activate a profile when the build is executed on a JDK version of '1.4.2_07'.
175
+ | Finally, the list of active profiles can be specified directly from the command line.
176
+ |
177
+ | NOTE: For profiles defined in the settings.xml, you are restricted to specifying only artifact
178
+ | repositories, plugin repositories, and free-form properties to be used as configuration
179
+ | variables for plugins in the POM.
180
+ |
181
+ |-->
182
+ <profiles>
183
+ <!-- profile
184
+ | Specifies a set of introductions to the build process, to be activated using one or more of the
185
+ | mechanisms described above. For inheritance purposes, and to activate profiles via <activatedProfiles/>
186
+ | or the command line, profiles have to have an ID that is unique.
187
+ |
188
+ | An encouraged best practice for profile identification is to use a consistent naming convention
189
+ | for profiles, such as 'env-dev', 'env-test', 'env-production', 'user-jdcasey', 'user-brett', etc.
190
+ | This will make it more intuitive to understand what the set of introduced profiles is attempting
191
+ | to accomplish, particularly when you only have a list of profile id's for debug.
192
+ |
193
+ | This profile example uses the JDK version to trigger activation, and provides a JDK-specific repo.
194
+ <profile>
195
+ <id>jdk-1.4</id>
196
+
197
+ <activation>
198
+ <jdk>1.4</jdk>
199
+ </activation>
200
+
201
+ <repositories>
202
+ <repository>
203
+ <id>jdk14</id>
204
+ <name>Repository for JDK 1.4 builds</name>
205
+ <url>http://www.myhost.com/maven/jdk14</url>
206
+ <layout>default</layout>
207
+ <snapshotPolicy>always</snapshotPolicy>
208
+ </repository>
209
+ </repositories>
210
+ </profile>
211
+ -->
212
+
213
+ <!--
214
+ | Here is another profile, activated by the system property 'target-env' with a value of 'dev',
215
+ | which provides a specific path to the Tomcat instance. To use this, your plugin configuration
216
+ | might hypothetically look like:
217
+ |
218
+ | ...
219
+ | <plugin>
220
+ | <groupId>org.myco.myplugins</groupId>
221
+ | <artifactId>myplugin</artifactId>
222
+ |
223
+ | <configuration>
224
+ | <tomcatLocation>${tomcatPath}</tomcatLocation>
225
+ | </configuration>
226
+ | </plugin>
227
+ | ...
228
+ |
229
+ | NOTE: If you just wanted to inject this configuration whenever someone set 'target-env' to
230
+ | anything, you could just leave off the <value/> inside the activation-property.
231
+ |
232
+ <profile>
233
+ <id>env-dev</id>
234
+
235
+ <activation>
236
+ <property>
237
+ <name>target-env</name>
238
+ <value>dev</value>
239
+ </property>
240
+ </activation>
241
+
242
+ <properties>
243
+ <tomcatPath>/path/to/tomcat/instance</tomcatPath>
244
+ </properties>
245
+ </profile>
246
+ -->
247
+ </profiles>
248
+
249
+ <!-- activeProfiles
250
+ | List of profiles that are active for all builds.
251
+ |
252
+ <activeProfiles>
253
+ <activeProfile>alwaysActiveProfile</activeProfile>
254
+ <activeProfile>anotherAlwaysActiveProfile</activeProfile>
255
+ </activeProfiles>
256
+ -->
257
+ </settings>
@@ -0,0 +1,13 @@
1
+ For each package you want to create, you should create a subdirectory here
2
+ named after the package Maven name "orgId:artifactId:version", eg.
3
+
4
+ ./commons-collections:commons-collections:3.2/
5
+
6
+ In that directory, place all the source files "verbatim" (as checked out from
7
+ the original source repository).
8
+
9
+ You can create any other directory for your convenience here. In case of git-
10
+ tracked projects, for example, you can clone the whole repository and copy the
11
+ version you want to build in orgId_artifactId_version.
12
+
13
+ Please note that .gitignore files are honored!
@@ -3,7 +3,6 @@
3
3
  require 'spec_helper'
4
4
 
5
5
  describe Gjp::LimitedNetworkUser do
6
-
7
6
  let(:user) { Gjp::LimitedNetworkUser.new("nonet_test") }
8
7
 
9
8
  before(:each) do
@@ -16,20 +15,20 @@ describe Gjp::LimitedNetworkUser do
16
15
  end
17
16
  end
18
17
 
19
- describe ".set_up" do
18
+ describe "#set_up" do
20
19
  it "set_ups a limited network user" do
21
20
  user.set_up?.should be_true
22
21
  end
23
22
  end
24
23
 
25
- describe ".tear_down" do
24
+ describe "#tear_down" do
26
25
  it "tears down a limited network user" do
27
26
  user.tear_down
28
27
  user.set_up?.should be_false
29
28
  end
30
29
  end
31
30
 
32
- describe ".set_up?" do
31
+ describe "#set_up?" do
33
32
  it "checks if a limited network user has been set up" do
34
33
  user.set_up?.should be_true
35
34