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.
Files changed (73) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +1 -0
  3. data/.gitmodules +3 -0
  4. data/.travis.yml +9 -2
  5. data/README.md +10 -8
  6. data/lib/license_auto/exceptions.rb +10 -0
  7. data/lib/license_auto/license/frequency.rb +1 -1
  8. data/lib/license_auto/license/readme.rb +21 -2
  9. data/lib/license_auto/license/similarity.rb +4 -3
  10. data/lib/license_auto/license_info_wrapper.rb +16 -0
  11. data/lib/license_auto/matcher.rb +14 -4
  12. data/lib/license_auto/package.rb +29 -15
  13. data/lib/license_auto/package_manager.rb +6 -2
  14. data/lib/license_auto/package_manager/bundler.rb +10 -6
  15. data/lib/license_auto/package_manager/gemfury.rb +2 -0
  16. data/lib/license_auto/package_manager/git_module.rb +73 -0
  17. data/lib/license_auto/package_manager/golang.rb +155 -0
  18. data/lib/license_auto/package_manager/gradle.rb +145 -0
  19. data/lib/license_auto/package_manager/maven.rb +133 -0
  20. data/lib/license_auto/package_manager/npm.rb +117 -1
  21. data/lib/license_auto/package_manager/pip.rb +8 -2
  22. data/lib/license_auto/repo.rb +51 -3
  23. data/lib/license_auto/source_code_server.rb +13 -0
  24. data/lib/license_auto/var/golang_std_libs.rb +160 -0
  25. data/lib/license_auto/version.rb +1 -1
  26. data/lib/license_auto/website.rb +1 -0
  27. data/lib/license_auto/website/cocoapods_org.rb +10 -0
  28. data/lib/license_auto/website/github_com.rb +43 -18
  29. data/lib/license_auto/website/homepage_spider.rb +56 -0
  30. data/lib/license_auto/website/maven_central_repository.rb +258 -0
  31. data/lib/license_auto/website/npm_registry.rb +178 -0
  32. data/lib/license_auto/website/ruby_gems_org.rb +119 -8
  33. data/license_auto.gemspec +1 -0
  34. data/package.json +30 -0
  35. metadata +25 -40
  36. data/lib/license_auto/package_manager/golang_stdlibs.rb +0 -161
  37. data/remove/api.rb +0 -60
  38. data/remove/api/bitbucket.rb +0 -142
  39. data/remove/api/code_google_com.rb +0 -66
  40. data/remove/api/excel_export.rb +0 -189
  41. data/remove/api/gem_data.rb +0 -30
  42. data/remove/api/git_kernel_org.rb +0 -59
  43. data/remove/api/github.rb +0 -376
  44. data/remove/api/go_pkg_in.rb +0 -41
  45. data/remove/api/golang_org.rb +0 -63
  46. data/remove/api/google_source_com.rb +0 -68
  47. data/remove/api/gradle2.rb +0 -41
  48. data/remove/api/helper.rb +0 -26
  49. data/remove/api/j_center.rb +0 -23
  50. data/remove/api/maven_central_repository.rb +0 -192
  51. data/remove/api/mq.rb +0 -30
  52. data/remove/api/npm_registry.rb +0 -169
  53. data/remove/api/pattern.rb +0 -33
  54. data/remove/api/remote_source_package.rb +0 -319
  55. data/remove/api/spider.rb +0 -47
  56. data/remove/cloner.rb +0 -154
  57. data/remove/db.rb +0 -267
  58. data/remove/license_auto +0 -4
  59. data/remove/misc.rb +0 -131
  60. data/remove/mq_pack.rb +0 -219
  61. data/remove/mq_repo.rb +0 -106
  62. data/remove/parser/gemfile_parser.rb +0 -221
  63. data/remove/parser/golang_parser.rb +0 -104
  64. data/remove/parser/gradle_parser.rb +0 -141
  65. data/remove/parser/manifest_parser.rb +0 -66
  66. data/remove/parser/maven_parser.rb +0 -91
  67. data/remove/parser/npm_parser.rb +0 -82
  68. data/remove/parser/pip_parser.rb +0 -1
  69. data/remove/parser/rebar_parser.rb +0 -61
  70. data/remove/recorder.rb +0 -184
  71. data/remove/script/apt-get.deps.sh +0 -37
  72. data/remove/script/debian_dpkg_list.sh +0 -2
  73. data/remove/script/rubygems.org.importdb.sh +0 -22
@@ -1,66 +0,0 @@
1
- require 'yaml'
2
-
3
- require_relative '../../lib/db'
4
- require_relative '../api/pattern'
5
-
6
- class ManifestParser
7
- def initialize(repo_filepath, repo_id)
8
- @repo_filepath = repo_filepath
9
- @manifest_file_list = []
10
- ymls = api_get_repo_manifest_file_list(repo_id).values[0][0]
11
- if ymls != nil
12
- @manifest_file_list = ymls.gsub(' ', '').split(',')
13
- end
14
- end
15
-
16
- def start
17
- packs = []
18
- $plog.debug("@manifest_file_list: #{@manifest_file_list}")
19
- @manifest_file_list.each {|file_name|
20
- manifest_file_namepath = "#{@repo_filepath}/#{file_name}"
21
- $plog.debug("manifest_file_namepath: #{manifest_file_namepath}")
22
- if File.exists?(manifest_file_namepath)
23
- # TODO:
24
- if file_name =~ API::FILE_NAME_PATTERN[:components_yml]
25
- else
26
- # normal 'manifest.yml' file
27
- dependencies = ManifestYAML.new(manifest_file_namepath).get_dependencies
28
- packs.concat(dependencies)
29
- end
30
-
31
- else
32
- raise "Parameter error, @manifest_file_list: #{@manifest_file_list}"
33
- end
34
- }
35
- packs
36
- end
37
- end
38
-
39
- class ManifestYAML
40
- attr_reader :contents, :pack_language, :manifest_file_namepath
41
-
42
- def initialize(manifest_file_namepath)
43
- @contents = YAML.load_file(manifest_file_namepath)
44
- @pack_language = 'manifest.yml'
45
- end
46
-
47
- def get_dependencies()
48
- if @contents['dependencies'] == nil
49
- return []
50
- else
51
- return @contents['dependencies']
52
- end
53
- end
54
-
55
- def get_exclude_files()
56
- @contents['exclude_files']
57
- end
58
-
59
- end
60
-
61
- if __FILE__ == $0
62
- path = '/tmp/license_website/github.com/cloudfoundry/python-buildpack'
63
- id = 81
64
- p = ManifestParser.new(path, id)
65
- p.start
66
- end
@@ -1,91 +0,0 @@
1
- require 'open3'
2
- require_relative '../misc'
3
-
4
- class MavenParser
5
-
6
- def initialize(repo_path)
7
- @repo_path = repo_path
8
- @package_list = Array.new
9
- @pom_xml = /pom.xml/
10
- end
11
-
12
- def find_build_dot_pom
13
- filenames = Misc::DirUtils.new(@repo_path).filter_filename(@pom_xml)
14
-
15
- if filenames.size == 0
16
- return false
17
- else
18
- return true
19
- end
20
- end
21
-
22
- def start
23
-
24
- if find_build_dot_pom == false
25
- return []
26
- end
27
-
28
- cmd = 'mvn dependency:resolve'
29
- flag = false
30
- Dir.chdir(@repo_path)
31
- Open3.popen3(cmd) {|i,o,e,t|
32
- out = o.readlines
33
- error = e.readlines
34
- if error.length > 0
35
- # TODO
36
- elsif out.length > 0
37
- out.each do |row|
38
- flag = true if row == "[INFO] BUILD SUCCESS\n"
39
- end
40
- else
41
- # TODO
42
- end
43
- }
44
- if flag
45
- cmd = 'mvn dependency:list'
46
- flag = false
47
- packages = []
48
- Dir.chdir(@repo_path)
49
- Open3.popen3(cmd) {|i,o,e,t|
50
- out = o.readlines
51
- error = e.readlines
52
- if error.length > 0
53
- # TODO
54
- elsif out.length > 0
55
- out.each do |row|
56
- # p row
57
- if row == "[INFO] The following files have been resolved:\n"
58
- flag = true
59
- elsif row == "[INFO] \n"
60
- flag = false
61
- elsif flag == true
62
- packages << row
63
- end
64
- end
65
- else
66
- # TODO
67
- end
68
- }
69
- packages.each do |line|
70
- line.gsub!(/\[INFO\]/,'').strip!
71
- pack = line.split("\:")
72
- @package_list << {
73
- :group =>pack[0],
74
- :name =>pack[1],
75
- :version => pack[3]
76
- }
77
- end
78
- end
79
-
80
- return @package_list
81
- end
82
-
83
- end
84
-
85
- if __FILE__ == $0
86
- path = "/home/li/ruby/maximus-master"
87
- packs = MavenParser.new(path).start
88
- packs.each do |row|
89
- p row
90
- end
91
- end
@@ -1,82 +0,0 @@
1
- require 'json'
2
- require 'open3'
3
- require_relative '../../config/config'
4
- require_relative '../../lib/misc'
5
- require_relative '../api/npm_registry'
6
- require_relative '../api/pattern'
7
-
8
- class NpmParser
9
- def initialize(repo_path)
10
- @repo_path = repo_path
11
- @package_json_pattern = /#{repo_path}\/.*package\.json$/
12
- end
13
-
14
- def start
15
- pack_name_versions = []
16
- filenames = Misc::DirUtils.new(@repo_path).filter_filename(@package_json_pattern)
17
- filenames.each {|filename|
18
- $plog.debug(filename)
19
- j = JSON.parse(File.read(filename))
20
- deps = j['dependencies']
21
- dev_deps = j['devDependencies']
22
- [deps, dev_deps].each {|d|
23
- if d.nil?
24
- next
25
- end
26
- d.each {|pack_name,semver|
27
- if _is_valid_semver(semver)
28
- certain_version = API::NpmRegistry.new(pack_name, semver).chose_one_available_version(semver)
29
- pack = {'name' => pack_name, 'version' => certain_version}
30
- pack_name_versions.push(pack)
31
- elsif semver =~ API::SOURCE_URL_PATTERN[:npm_urls]
32
- r = API::SOURCE_URL_PATTERN[:npm_urls].match(semver)
33
- # TODO: save by original type
34
- if r['host'] =~ API::SOURCE_URL_PATTERN[:github_dot_com]
35
- source_url = "https://github.com/#{r['owner']}/#{r['repo']}"
36
- else
37
- source_url = semver
38
- end
39
- if r['ref'] == nil
40
- version = 'master'
41
- else
42
- version = r['ref']
43
- end
44
- pack = {
45
- 'name' => pack_name,
46
- 'version' => version,
47
- 'uri' => source_url
48
- }
49
- pack_name_versions.push(pack)
50
- else
51
- pack = {
52
- 'name' => pack_name,
53
- 'version' => semver,
54
- 'uri' => nil
55
- }
56
- pack_name_versions.push(pack)
57
- # raise "Unknown semver pattern: #{semver}, pack_name"
58
- end
59
- }
60
- }
61
- }
62
- pack_name_versions
63
- end
64
-
65
- # DOC: https://github.com/npm/node-semver/blob/5f89ecbe78145ad0b501cf6279f602a23c89738d/test/index.js#L461
66
- def _is_valid_semver(semver)
67
- is_valid = false
68
- cmd = "node -e \"var semver = require('semver'); var valid = semver.validRange('#{semver}'); console.log(valid)\""
69
- $plog.debug(cmd)
70
- Open3.popen3(cmd) {|i,o,e,t|
71
- out = o.readlines
72
- error = e.readlines
73
- if error.length > 0
74
- $plog.error(error)
75
- raise "node -e evaluate script error: #{cmd}, #{error}"
76
- elsif out.length > 0
77
- is_valid = out[0].gsub(/\n/,'') != 'null'
78
- end
79
- }
80
- is_valid
81
- end
82
- end
@@ -1 +0,0 @@
1
- # TODO:
@@ -1,61 +0,0 @@
1
- require 'json'
2
- require 'open3'
3
- require_relative '../../config/config'
4
- require_relative '../../lib/misc'
5
- require_relative '../api'
6
-
7
- class ErlangParser
8
-
9
- def initialize(repo_path)
10
- @repo_path = repo_path
11
- @rebar_config_pattern = /#{repo_path}\/rebar\.config$/
12
- end
13
-
14
- def start
15
- packs = []
16
- filenames = Misc::DirUtils.new(@repo_path).filter_filename(@rebar_config_pattern)
17
- if filenames.size == 1
18
- cmd = "rebar list-deps"
19
- Dir.chdir(@repo_path) {
20
- Open3.popen3(cmd) {|i,o,e,t|
21
- output = o.read
22
- error = e.read
23
- if error.length > 0
24
- packs = filter_items(error)
25
- elsif output.length > 0
26
- packs = filter_items(output)
27
- else
28
- raise "#{self.class}.list_projects error error: #{cmd}, #{error}"
29
- end
30
- }
31
- }
32
- end
33
- packs
34
- end
35
-
36
- def filter_items(output)
37
- packs = []
38
- output = output.gsub(/\s/, '').gsub(/ERROR:Missingdependencies:/, '').split(/\},\{/)
39
- output.each {|d|
40
- pattern = /dep,\"(?<local_dir>.+)\",(?<app_name>.+),\[*\],\{(?<repository_type>(git|hg|bzr)),\"(?<location_url>.*)\",\"(?<ref>.+)\"}/
41
- matched = pattern.match(d)
42
- if matched
43
- # repository_type = matched[:repository_type]
44
- source_url = matched[:location_url]
45
- pack_version = matched[:ref]
46
- if source_url =~ API::SOURCE_URL_PATTERN[:github]
47
- pack_name = API::Github.new(source_url).repo
48
- source_url = source_url.gsub(/git:\/\//, 'https://')
49
- else
50
- pack_name = source_url
51
- end
52
- packs.push({
53
- 'name' => pack_name,
54
- 'version' => pack_version,
55
- 'uri' => source_url
56
- })
57
- end
58
- }
59
- packs
60
- end
61
- end
data/remove/recorder.rb DELETED
@@ -1,184 +0,0 @@
1
- # encoding: utf-8
2
- require 'csv'
3
- require 'json'
4
- require_relative '../config/config'
5
- require_relative './api'
6
-
7
- class PacksSaver
8
- def initialize(repo_id, packs, lang, release_id)
9
- @release_id = release_id
10
- @repo_id = repo_id
11
- @packs = packs
12
- @lang = lang
13
- end
14
-
15
- def save()
16
- if @lang == 'Golang'
17
- save_golang
18
- elsif @lang == 'Ruby'
19
- save_ruby
20
- elsif @lang == 'manifest.yml' or @lang == 'NodeJs' or @lang == 'Erlang'
21
- save_manifest
22
- elsif @lang == 'Gradle'
23
- save_gradle
24
- end
25
- end
26
-
27
- def save_gradle
28
- @packs.each {|pack|
29
- begin
30
- $plog.debug(pack)
31
- pack_name = [pack[:group], pack[:name]].join(':')
32
- pack_version = pack[:version]
33
- status = 10
34
- homepage, source_url = nil, pack['uri']
35
- license, cmt = nil, nil
36
-
37
- pg_result = api_add_pack(pack_name, pack_version, @lang, homepage, source_url, license, status, cmt)
38
- enqueue_result(pg_result)
39
- rescue Exception => _
40
- $plog.error(_)
41
- end
42
- }
43
- end
44
-
45
- def save_manifest
46
- @packs.each {|pack|
47
- begin
48
- $plog.debug(pack)
49
- pack_name, pack_version, status = pack['name'], pack['version'], 10
50
- homepage, source_url = nil, pack['uri']
51
- license, cmt = nil, nil
52
-
53
- pg_result = api_add_pack(pack_name, pack_version, @lang, homepage, source_url, license, status, cmt)
54
- enqueue_result(pg_result)
55
- rescue Exception => _
56
- $plog.error(_)
57
- end
58
- }
59
- end
60
-
61
- def save_ruby
62
- def license_name_format(origin_license)
63
- if origin_license.nil?
64
- return nil
65
- end
66
- empty_pattern = /---\s\[\]\n/
67
- license = origin_license.gsub(empty_pattern, '').gsub(/---\s\n[\.]+\n/, '').gsub(/---\n-\s/, '').gsub(/\n/, '').gsub(/['"\s]+$/, '').gsub(/^['"\s]+/, '')
68
- if license.empty?
69
- return nil
70
- else
71
- return license
72
- end
73
- end
74
-
75
- @packs.each {|pack|
76
- begin
77
- pack[:license] = license_name_format(pack[:license])
78
- # $plog.debug(pack)
79
- pack_name, pack_version, status = pack[:pack_name], pack[:pack_version], pack[:status]
80
- homepage, source_url = pack[:homepage], pack[:source_url]
81
- # lang is a website in act
82
- license, cmt, lang = pack[:license], pack[:cmt], pack[:language]
83
-
84
- pg_result = api_add_pack(pack_name, pack_version, lang, homepage, source_url, license, status, cmt)
85
- enqueue_result(pg_result)
86
- rescue Exception => _
87
- $plog.error(_)
88
- end
89
- }
90
- end
91
-
92
- # 处理api_add_pack()返回的结果
93
- def enqueue_result(pg_result)
94
- begin
95
- if pg_result != nil
96
- pack_id = pg_result['pack_id'].to_i
97
- is_newbie = pg_result['is_newbie'] == 't'
98
- api_add_product_repo_pack(@repo_id, pack_id, @release_id)
99
-
100
- if is_newbie
101
- queue_name = 'license_auto.pack'
102
- $rmq.publish(queue_name, {:pack_id => pack_id}.to_json, check_exist=true)
103
- end
104
- $plog.debug("pack_id: #{pack_id}, is_newbie: #{is_newbie}")
105
- else
106
- $plog.error("#{pack_url} insert failed!")
107
- end
108
- rescue Exception => _
109
- $plog.error(_)
110
- end
111
- end
112
-
113
- def save_golang()
114
- @packs.each { |pack_name, pack_url|
115
- begin
116
- $plog.debug("save_golange: #{pack_url}")
117
-
118
- pack_version = 'unknown'
119
- homepage = nil
120
- source_url = nil
121
- status = 10
122
- cmt = nil
123
-
124
- remote = API::RemoteSourceVCS.new(pack_url)
125
-
126
- if remote.vcs == nil
127
- status = 30
128
- cmt = 'Unknown repo site'
129
- pack_name = pack_name.split('/').last
130
- else
131
- pack_name = remote.vcs.repo
132
- source_url = remote.vcs.repo_url
133
- homepage = remote.get_homepage
134
- last_commit = remote.vcs.last_commits
135
- if last_commit
136
- pack_version = last_commit['sha']
137
- end
138
- end
139
- # $plog.debug("#{pack_version}, #{pack_url}")
140
- license = nil
141
- pg_result = api_add_pack(pack_name, pack_version, 'Golang', homepage, source_url, license, status, cmt)
142
- enqueue_result(pg_result)
143
- rescue Exception => _
144
- $plog.error(_)
145
- end
146
- }
147
- end
148
-
149
- end
150
-
151
- class PackUpdate
152
- def initialize(pack_id, pack)
153
- @pack_id = pack_id
154
- @pack = pack
155
- end
156
-
157
- def update()
158
- ok = api_update_pack_info(@pack_id, @pack)
159
- end
160
-
161
- def self.judge_pack_status(packer)
162
- # TODO: @Micfan test it
163
- if is_std_license(packer[:license]) and ( packer[:license_url] or packer[:license_text])
164
- packer[:unclear_license] = nil
165
- packer[:status] = 40
166
- else
167
- packer[:unclear_license] = packer[:license]
168
- packer[:license] = nil
169
- packer[:status] = 30
170
- end
171
- return packer
172
- end
173
-
174
- def self.is_std_license(license)
175
- where = "where name = '#{license}'"
176
- std_licenses = api_get_std_license_name(where)
177
- return std_licenses.ntuples == 1
178
- end
179
-
180
- end
181
-
182
- if __FILE__ == $0
183
- p PackUpdate.is_std_license('MIT')
184
- end