license_auto 0.1.1.2 → 0.1.1.3
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.gitignore +1 -0
- data/.gitmodules +3 -0
- data/.travis.yml +9 -2
- data/README.md +10 -8
- data/lib/license_auto/exceptions.rb +10 -0
- data/lib/license_auto/license/frequency.rb +1 -1
- data/lib/license_auto/license/readme.rb +21 -2
- data/lib/license_auto/license/similarity.rb +4 -3
- data/lib/license_auto/license_info_wrapper.rb +16 -0
- data/lib/license_auto/matcher.rb +14 -4
- data/lib/license_auto/package.rb +29 -15
- data/lib/license_auto/package_manager.rb +6 -2
- data/lib/license_auto/package_manager/bundler.rb +10 -6
- data/lib/license_auto/package_manager/gemfury.rb +2 -0
- data/lib/license_auto/package_manager/git_module.rb +73 -0
- data/lib/license_auto/package_manager/golang.rb +155 -0
- data/lib/license_auto/package_manager/gradle.rb +145 -0
- data/lib/license_auto/package_manager/maven.rb +133 -0
- data/lib/license_auto/package_manager/npm.rb +117 -1
- data/lib/license_auto/package_manager/pip.rb +8 -2
- data/lib/license_auto/repo.rb +51 -3
- data/lib/license_auto/source_code_server.rb +13 -0
- data/lib/license_auto/var/golang_std_libs.rb +160 -0
- data/lib/license_auto/version.rb +1 -1
- data/lib/license_auto/website.rb +1 -0
- data/lib/license_auto/website/cocoapods_org.rb +10 -0
- data/lib/license_auto/website/github_com.rb +43 -18
- data/lib/license_auto/website/homepage_spider.rb +56 -0
- data/lib/license_auto/website/maven_central_repository.rb +258 -0
- data/lib/license_auto/website/npm_registry.rb +178 -0
- data/lib/license_auto/website/ruby_gems_org.rb +119 -8
- data/license_auto.gemspec +1 -0
- data/package.json +30 -0
- metadata +25 -40
- data/lib/license_auto/package_manager/golang_stdlibs.rb +0 -161
- data/remove/api.rb +0 -60
- data/remove/api/bitbucket.rb +0 -142
- data/remove/api/code_google_com.rb +0 -66
- data/remove/api/excel_export.rb +0 -189
- data/remove/api/gem_data.rb +0 -30
- data/remove/api/git_kernel_org.rb +0 -59
- data/remove/api/github.rb +0 -376
- data/remove/api/go_pkg_in.rb +0 -41
- data/remove/api/golang_org.rb +0 -63
- data/remove/api/google_source_com.rb +0 -68
- data/remove/api/gradle2.rb +0 -41
- data/remove/api/helper.rb +0 -26
- data/remove/api/j_center.rb +0 -23
- data/remove/api/maven_central_repository.rb +0 -192
- data/remove/api/mq.rb +0 -30
- data/remove/api/npm_registry.rb +0 -169
- data/remove/api/pattern.rb +0 -33
- data/remove/api/remote_source_package.rb +0 -319
- data/remove/api/spider.rb +0 -47
- data/remove/cloner.rb +0 -154
- data/remove/db.rb +0 -267
- data/remove/license_auto +0 -4
- data/remove/misc.rb +0 -131
- data/remove/mq_pack.rb +0 -219
- data/remove/mq_repo.rb +0 -106
- data/remove/parser/gemfile_parser.rb +0 -221
- data/remove/parser/golang_parser.rb +0 -104
- data/remove/parser/gradle_parser.rb +0 -141
- data/remove/parser/manifest_parser.rb +0 -66
- data/remove/parser/maven_parser.rb +0 -91
- data/remove/parser/npm_parser.rb +0 -82
- data/remove/parser/pip_parser.rb +0 -1
- data/remove/parser/rebar_parser.rb +0 -61
- data/remove/recorder.rb +0 -184
- data/remove/script/apt-get.deps.sh +0 -37
- data/remove/script/debian_dpkg_list.sh +0 -2
- data/remove/script/rubygems.org.importdb.sh +0 -22
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 25e8473c8a7057ec658e75dc3118b48f0927c6de
|
4
|
+
data.tar.gz: fb83bc24a7e8d4e38708f6a5b8d7bec826b3a599
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: eb3dafb0555ff74d75139208e68dd942e5d3fb1fc23661cc13bcdfc489cc479bff9dec9306c9827558fee739dd1a218f9b3528dced0a089ed732873216be355f
|
7
|
+
data.tar.gz: 7f171ed8fcf9d9313b56dddffc04e868445ae375b9b98c7d25b5d02f6b2da8bb595da5c94243382ffa606e5000738740cfd300f5a604d59ed11a26d874d9ffab
|
data/.gitignore
CHANGED
data/.gitmodules
ADDED
data/.travis.yml
CHANGED
data/README.md
CHANGED
@@ -1,6 +1,7 @@
|
|
1
|
-
# license_auto
|
1
|
+
# license_auto
|
2
2
|
|
3
|
-
![Progress](http://progressed.io/bar/
|
3
|
+
![Progress](http://progressed.io/bar/30?title=progress)
|
4
|
+
[![Gem Version](https://badge.fury.io/rb/license_auto.svg)](https://badge.fury.io/rb/license_auto)
|
4
5
|
[![Code Climate](https://codeclimate.com/github/mineworks/license_auto/badges/gpa.svg)](https://codeclimate.com/github/mineworks/license_auto)
|
5
6
|
[![Build Status](https://travis-ci.org/mineworks/license_auto.svg?branch=master)](https://travis-ci.org/mineworks/license_auto)
|
6
7
|
|
@@ -21,21 +22,21 @@
|
|
21
22
|
<td>Gemfile(.lock)</td>
|
22
23
|
<td>https://rubygems.org/</td>
|
23
24
|
<!-- <td> https://rubygems.org/pages/data</td> -->
|
24
|
-
<td>
|
25
|
+
<td>70</td>
|
25
26
|
</tr>
|
26
27
|
<tr>
|
27
28
|
<td>Java</td>
|
28
29
|
<td>Gradle, Maven</td>
|
29
30
|
<td>build.gradle, pom.xml</td>
|
30
31
|
<td>https://repo1.maven.org/maven2</td>
|
31
|
-
<td>
|
32
|
+
<td>100</td>
|
32
33
|
</tr>
|
33
34
|
<tr>
|
34
35
|
<td>NodeJS</td>
|
35
36
|
<td>npm</td>
|
36
37
|
<td>package.json</td>
|
37
38
|
<td>http://registry.npmjs.org</td>
|
38
|
-
<td>
|
39
|
+
<td>100</td>
|
39
40
|
</tr>
|
40
41
|
<tr>
|
41
42
|
<td>Debian</td>
|
@@ -49,7 +50,7 @@
|
|
49
50
|
<td>go list -json ./...</td>
|
50
51
|
<td></td>
|
51
52
|
<td></td>
|
52
|
-
<td>
|
53
|
+
<td>50</td>
|
53
54
|
</tr>
|
54
55
|
<tr>
|
55
56
|
<td>Python</td>
|
@@ -75,9 +76,10 @@
|
|
75
76
|
* Gradle v2.9
|
76
77
|
* Maven v3.x
|
77
78
|
* Rebar v2.6.1
|
78
|
-
*
|
79
|
+
* NodeJS v5.7.0+
|
80
|
+
* npm v3.6.0
|
79
81
|
* Python pip v1.5.6
|
80
|
-
*
|
82
|
+
* golang v1.6
|
81
83
|
|
82
84
|
## Install
|
83
85
|
``` bash
|
@@ -20,6 +20,16 @@ module LicenseAuto
|
|
20
20
|
end
|
21
21
|
end
|
22
22
|
|
23
|
+
class SourceURLNotFound < LicenseAutoError
|
24
|
+
def initialize(message=nil, server=nil)
|
25
|
+
@message = message
|
26
|
+
@server = server
|
27
|
+
end
|
28
|
+
def message
|
29
|
+
"Package #{@message} can not be found in server #{@server}"
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
23
33
|
class VirtualMethodError < RuntimeError
|
24
34
|
##
|
25
35
|
# Just call to super with some fancy message.
|
@@ -14,12 +14,19 @@ module LicenseAuto
|
|
14
14
|
attr_reader :license_content
|
15
15
|
|
16
16
|
def initialize(filename, content)
|
17
|
+
@content = content.encode('UTF-8', :invalid => :replace, :undef => :replace)
|
17
18
|
impl = formator(filename)
|
18
|
-
@license_content =
|
19
|
+
@license_content =
|
20
|
+
if impl.nil?
|
21
|
+
LicenseAuto.info("Unknown readme format: #{filename}, returned full-text instead")
|
22
|
+
@content
|
23
|
+
else
|
24
|
+
impl.cut_license(@content)
|
25
|
+
end
|
19
26
|
end
|
20
27
|
|
21
28
|
def extensions
|
22
|
-
[Markdown]
|
29
|
+
[Markdown, RDoc]
|
23
30
|
end
|
24
31
|
|
25
32
|
def formator(filename)
|
@@ -40,4 +47,16 @@ module LicenseAuto
|
|
40
47
|
end
|
41
48
|
end
|
42
49
|
end
|
50
|
+
|
51
|
+
class RDoc
|
52
|
+
FILE_EXTENSION = /\.rdoc$/i
|
53
|
+
PATTERN = /(?<text>^==\s*(license|copy|copying)(.*\n*)*)($|(?=\n^==))/i
|
54
|
+
|
55
|
+
def self.cut_license(content)
|
56
|
+
matched = PATTERN.match(content)
|
57
|
+
if matched
|
58
|
+
matched[:text]
|
59
|
+
end
|
60
|
+
end
|
61
|
+
end
|
43
62
|
end
|
@@ -10,7 +10,8 @@ module LicenseAuto
|
|
10
10
|
SIM_RATIO = 0.85
|
11
11
|
|
12
12
|
def initialize(license_content)
|
13
|
-
|
13
|
+
@license_content = license_content.encode('UTF-8', :invalid => :replace, :undef => :replace)
|
14
|
+
# LicenseAuto.logger.debug("\n#{@license_content}")
|
14
15
|
@license_template_documents =
|
15
16
|
LICENSE_SORTED_FREQUENCY.reject {|template_name|
|
16
17
|
abs_filename_path(template_name).nil?
|
@@ -19,7 +20,7 @@ module LicenseAuto
|
|
19
20
|
TfIdfSimilarity::Document.new(File.read(abs_file))
|
20
21
|
}.compact
|
21
22
|
@license_template_documents.push(
|
22
|
-
TfIdfSimilarity::Document.new(license_content)
|
23
|
+
TfIdfSimilarity::Document.new(@license_content)
|
23
24
|
)
|
24
25
|
model = TfIdfSimilarity::TfIdfModel.new(@license_template_documents)
|
25
26
|
@matrix = model.similarity_matrix
|
@@ -49,7 +50,7 @@ module LicenseAuto
|
|
49
50
|
|
50
51
|
license_name = LICENSE_SORTED_FREQUENCY[sim_license_index]
|
51
52
|
|
52
|
-
debug = "License: #{license_name}, Ratio: #{max_sim_ratio}"
|
53
|
+
debug = "License: #{license_name}, Ratio: #{max_sim_ratio}, license_content:\n #{@license_content[0..70]}..."
|
53
54
|
LicenseAuto.logger.debug(debug)
|
54
55
|
|
55
56
|
[license_name, max_sim_ratio]
|
@@ -3,12 +3,28 @@ require 'hashie/mash'
|
|
3
3
|
|
4
4
|
module LicenseAuto
|
5
5
|
|
6
|
+
|
7
|
+
class PackWrapper < Hashie::Dash
|
8
|
+
include Hashie::Extensions::Mash
|
9
|
+
|
10
|
+
property :pack_id
|
11
|
+
property :homepage, default: nil
|
12
|
+
property :project_url, default: nil
|
13
|
+
property :source_url, default: nil
|
14
|
+
property :cmt, default: nil
|
15
|
+
end
|
16
|
+
|
6
17
|
class LicenseInfoWrapper < Hashie::Dash
|
7
18
|
include Hashie::Extensions::Mash
|
19
|
+
include Hashie::Extensions::Coercion
|
8
20
|
|
9
21
|
property :licenses, default: []
|
10
22
|
property :readmes, default: []
|
11
23
|
property :notices, default: []
|
24
|
+
property :cmt, default: nil
|
25
|
+
property :pack
|
26
|
+
|
27
|
+
coerce_key :pack, PackWrapper
|
12
28
|
|
13
29
|
end
|
14
30
|
|
data/lib/license_auto/matcher.rb
CHANGED
@@ -25,11 +25,15 @@ module LicenseAuto
|
|
25
25
|
end
|
26
26
|
|
27
27
|
def match_github_resource()
|
28
|
-
|
28
|
+
github_resource.match(@url)
|
29
29
|
end
|
30
30
|
|
31
31
|
def match_bitbucket_resource
|
32
|
-
|
32
|
+
github_resource.match(@url)
|
33
|
+
end
|
34
|
+
|
35
|
+
def match_maven_default_central
|
36
|
+
maven_default_central_resource.match(@url)
|
33
37
|
end
|
34
38
|
|
35
39
|
private
|
@@ -37,12 +41,16 @@ module LicenseAuto
|
|
37
41
|
##
|
38
42
|
# vcs: Version Control System
|
39
43
|
|
44
|
+
def maven_default_central_resource
|
45
|
+
/repo1\.maven\.org\/maven2/
|
46
|
+
end
|
47
|
+
|
40
48
|
# FIXME: @Cissy
|
41
49
|
def github_resource
|
42
50
|
# /(git\+)?(?<protocol>(http[s]?|git))(:\/\/|@)(?<host>(www\.)?github\.com)(\/|:)(?<owner>.+)\/(?<repo>[^\/.]+)(?<vcs>\.git)?/
|
43
51
|
/(git\+)?
|
44
|
-
(?<protocol>(http[s]?|git))
|
45
|
-
(:\/\/|@)
|
52
|
+
(?<protocol>(http[s]?|git))?
|
53
|
+
(:\/\/|@)?
|
46
54
|
(?<host>(www\.)?github\.com)
|
47
55
|
(\/|:)
|
48
56
|
(?<owner>.+)\/
|
@@ -90,7 +98,9 @@ module LicenseAuto
|
|
90
98
|
##
|
91
99
|
# git ref: commit hash/branch/tag
|
92
100
|
def match_the_ref(ref)
|
101
|
+
# LicenseAuto.logger.debug(ref)
|
93
102
|
version_pattern = /[vV]?#{@name.gsub(/\./, '\.').gsub(/\//, '\/')}$/i
|
103
|
+
# LicenseAuto.logger.debug(version_pattern)
|
94
104
|
version_pattern.match(ref)
|
95
105
|
end
|
96
106
|
|
data/lib/license_auto/package.rb
CHANGED
@@ -1,13 +1,15 @@
|
|
1
1
|
require 'hashie/mash'
|
2
2
|
|
3
|
+
require 'license_auto/matcher'
|
3
4
|
require 'license_auto/website/ruby_gems_org'
|
4
5
|
require 'license_auto/website/gemfury_com'
|
5
6
|
require 'license_auto/website/github_com'
|
7
|
+
require 'license_auto/website/npm_registry'
|
8
|
+
require 'license_auto/website/maven_central_repository'
|
6
9
|
|
7
10
|
|
8
11
|
module LicenseAuto
|
9
12
|
|
10
|
-
##
|
11
13
|
# Package: {
|
12
14
|
# language: 'Ruby', # Ruby|Golang|Java|NodeJS|Erlang|Python|
|
13
15
|
# name: 'bundler',
|
@@ -19,20 +21,21 @@ module LicenseAuto
|
|
19
21
|
class Package < Hashie::Mash
|
20
22
|
extend LicenseAuto
|
21
23
|
|
22
|
-
##
|
23
24
|
# Default project server of all kinds of languages.
|
24
25
|
#
|
25
26
|
# Key: language name
|
26
27
|
#
|
27
28
|
# Value: default project server
|
28
29
|
|
29
|
-
|
30
|
-
Ruby: RubyGemsOrg
|
30
|
+
PACKAGE_SERVERS = {
|
31
|
+
Ruby: RubyGemsOrg,
|
32
|
+
NodeJS: NpmRegistry,
|
33
|
+
GitModule: GithubCom
|
34
|
+
# TODO: add many server, eg. http://gopkg.in
|
31
35
|
}
|
32
36
|
|
33
|
-
|
34
|
-
|
35
|
-
GemfuryCom,
|
37
|
+
SOURCE_CODE_SERVERS = [
|
38
|
+
# GemfuryCom,
|
36
39
|
GithubCom,
|
37
40
|
]
|
38
41
|
|
@@ -85,18 +88,16 @@ module LicenseAuto
|
|
85
88
|
# ]
|
86
89
|
# }
|
87
90
|
def get_license_info()
|
91
|
+
@server.get_license_info if chose_package_server
|
88
92
|
|
89
93
|
# args = {
|
90
94
|
# fetch_license_text: true
|
91
95
|
# }.merge(args)
|
92
96
|
|
93
|
-
@server.get_license_info if chose_package_server
|
94
|
-
|
95
97
|
# TODO: uncomment these line, add Google or Yahoo!
|
96
98
|
# if @server.nil?
|
97
99
|
# @server.get_license_info if chose_search_engine
|
98
100
|
# end
|
99
|
-
|
100
101
|
end
|
101
102
|
|
102
103
|
private
|
@@ -104,11 +105,24 @@ module LicenseAuto
|
|
104
105
|
def chose_package_server()
|
105
106
|
begin
|
106
107
|
@server =
|
107
|
-
if self.server
|
108
|
-
|
109
|
-
|
110
|
-
|
111
|
-
|
108
|
+
if self.language == 'Golang' and self.server
|
109
|
+
matcher = Matcher::SourceURL.new(self.server)
|
110
|
+
github_matched = matcher.match_github_resource
|
111
|
+
if github_matched
|
112
|
+
GithubCom.new(self, github_matched[:owner], github_matched[:repo])
|
113
|
+
else
|
114
|
+
LicenseAuto.logger.fatal("Golang server: #{self.server} should be supported!")
|
115
|
+
end
|
116
|
+
elsif self.language == 'Java' # and self.server
|
117
|
+
matcher = Matcher::SourceURL.new(self.server)
|
118
|
+
maven_default_matched = matcher.match_maven_default_central
|
119
|
+
if maven_default_matched
|
120
|
+
LicenseAuto::MavenCentralRepository.new(self.group, self.name, self.version)
|
121
|
+
else
|
122
|
+
LicenseAuto.logger.fatal("Maven server: #{self.server} should be supported!")
|
123
|
+
end
|
124
|
+
elsif self.server
|
125
|
+
PACKAGE_SERVERS.fetch(self.language.to_sym).new(self)
|
112
126
|
end
|
113
127
|
rescue KeyError => e
|
114
128
|
LicenseAuto.logger.fatal("#{e}")
|
@@ -4,11 +4,12 @@ require 'license_auto/logger'
|
|
4
4
|
require 'license_auto/module'
|
5
5
|
|
6
6
|
module LicenseAuto
|
7
|
-
class
|
7
|
+
class PackageManager
|
8
8
|
|
9
9
|
virtual :initialize,
|
10
10
|
:parse_dependencies,
|
11
|
-
:dependency_file_pattern
|
11
|
+
:dependency_file_pattern,
|
12
|
+
:check_cli
|
12
13
|
|
13
14
|
# def self.package_managers
|
14
15
|
# [Bundler, NPM, Pip, Bower, Maven, Gradle, CocoaPods, Rebar, Nuget]
|
@@ -28,6 +29,9 @@ module LicenseAuto
|
|
28
29
|
# @return Array[Regexp]
|
29
30
|
def dependency_file_pattern; end
|
30
31
|
|
32
|
+
# return Boolean
|
33
|
+
def check_cli; end
|
34
|
+
|
31
35
|
def dependency_file_path_names(pattern=dependency_file_pattern)
|
32
36
|
if FileTest.directory?(@path)
|
33
37
|
Find.find(@path).select do |filename|
|
@@ -4,7 +4,7 @@ require 'license_auto/website/ruby_gems_org'
|
|
4
4
|
# require 'license_auto/package_manager/gemfury'
|
5
5
|
|
6
6
|
module LicenseAuto
|
7
|
-
class Bundler < LicenseAuto::
|
7
|
+
class Bundler < LicenseAuto::PackageManager
|
8
8
|
|
9
9
|
LANGUAGE = 'Ruby'
|
10
10
|
|
@@ -13,11 +13,11 @@ module LicenseAuto
|
|
13
13
|
end
|
14
14
|
|
15
15
|
def dependency_file_pattern
|
16
|
-
/#{@path}\/gem.*\.lock$/i
|
16
|
+
/#{@path}\/[0-9a-zA-Z_.]*gem.*\.lock$/i
|
17
17
|
end
|
18
18
|
|
19
19
|
def gemfile_pattern
|
20
|
-
|
20
|
+
/#{@path}\/[0-9a-zA-Z_.]*gemfile$/i
|
21
21
|
end
|
22
22
|
|
23
23
|
def parse_dependencies
|
@@ -30,13 +30,12 @@ module LicenseAuto
|
|
30
30
|
|
31
31
|
lock_files = dependency_file_path_names
|
32
32
|
if lock_files.empty?
|
33
|
-
LicenseAuto.logger.info("
|
33
|
+
LicenseAuto.logger.info("#{LANGUAGE}: #{dependency_file_pattern} file not exist")
|
34
34
|
gem_files = dependency_file_path_names(pattern=gemfile_pattern)
|
35
35
|
# TODO: parse gem_files
|
36
36
|
unless gem_files.empty?
|
37
|
-
LicenseAuto.logger.
|
37
|
+
LicenseAuto.logger.warn("#{LANGUAGE}: Gemfile exisit: #{gem_files}")
|
38
38
|
end
|
39
|
-
|
40
39
|
return []
|
41
40
|
else
|
42
41
|
lock_files.map {|dep_file|
|
@@ -83,5 +82,10 @@ module LicenseAuto
|
|
83
82
|
end
|
84
83
|
# LicenseAuto.logger.debug(JSON.pretty_generate(dep_files))
|
85
84
|
end
|
85
|
+
|
86
|
+
def self.check_cli
|
87
|
+
# TODO check bundle
|
88
|
+
true
|
89
|
+
end
|
86
90
|
end
|
87
91
|
end
|