Skip to content

Commit 2708742

Browse files
authored
Merge pull request #86 from fosslight/latest_version
Download the latest version of package url
2 parents 6f269b8 + aa11349 commit 2708742

File tree

3 files changed

+17
-70
lines changed

3 files changed

+17
-70
lines changed

requirements.txt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,8 @@ openpyxl
44
progress
55
pyyaml
66
beautifulsoup4
7-
fosslight_util>=1.4.32
7+
fosslight_util>=1.4.36
88
fosslight_source>=1.7.3
99
fosslight_dependency>=3.7.4
1010
fosslight_binary>=4.1.24
11-
fosslight_prechecker>=3.0.1
11+
fosslight_prechecker>=3.0.1

src/fosslight_scanner/common.py

Lines changed: 4 additions & 60 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,6 @@
77
import sys
88
import logging
99
import shutil
10-
import re
1110
import pandas as pd
1211
import yaml
1312
import copy
@@ -90,63 +89,6 @@ def call_analysis_api(path_to_run, str_run_start, return_idx, func, *args):
9089
return success, result
9190

9291

93-
def extract_name_from_link(link):
94-
# Github : https://github.com/(owner)/(repo)
95-
# npm : www.npmjs.com/package/(package)
96-
# npm : https://www.npmjs.com/package/@(group)/(package)
97-
# pypi : https://pypi.org/project/(oss_name)
98-
# pypi2 : https://files.pythonhosted.org/packages/source/(alphabet)/(oss_name)/(oss_name)-(version).tar.gz
99-
# Maven: https://mvnrepository.com/artifact/(group)/(artifact)
100-
# pub: https://pub.dev/packages/(package)
101-
# Cocoapods: https://cocoapods.org/(package)
102-
pkg_pattern = {
103-
"github": r'https?:\/\/github.com\/([^\/]+)\/([^\/\.]+)(\.git)?',
104-
"pypi": r'https?:\/\/pypi\.org\/project\/([^\/]+)',
105-
"pypi2": r'https?:\/\/files\.pythonhosted\.org\/packages\/source\/[\w]\/([^\/]+)\/([^\/]+)',
106-
"maven": r'https?:\/\/mvnrepository\.com\/artifact\/([^\/]+)\/([^\/]+)',
107-
"npm": r'https?:\/\/www\.npmjs\.com\/package\/([^\/]+)(\/[^\/]+)?',
108-
"pub": r'https?:\/\/pub\.dev\/packages\/([^\/]+)',
109-
"pods": r'https?:\/\/cocoapods\.org\/pods\/([^\/]+)'
110-
}
111-
oss_name = ""
112-
if link.startswith("www."):
113-
link = link.replace("www.", "https://www.", 1)
114-
for key, value in pkg_pattern.items():
115-
try:
116-
p = re.compile(value)
117-
match = p.match(link)
118-
if match:
119-
group = match.group(1)
120-
if key == "github":
121-
repo = match.group(2)
122-
oss_name = f"{group}-{repo}"
123-
break
124-
elif (key == "pypi") or (key == "pypi2"):
125-
oss_name = f"pypi:{group}"
126-
oss_name = re.sub(r"[-_.]+", "-", oss_name).lower()
127-
break
128-
elif key == "maven":
129-
artifact = match.group(2)
130-
oss_name = f"{group}:{artifact}"
131-
break
132-
elif key == "npm":
133-
if group.startswith("@"):
134-
pkg = match.group(2)
135-
oss_name = f"npm:{group}{pkg}"
136-
else:
137-
oss_name = f"npm:{group}"
138-
break
139-
elif key == "pub":
140-
oss_name = f"pub:{group}"
141-
break
142-
elif key == "pods":
143-
oss_name = f"cocoapods:{group}"
144-
break
145-
except Exception as ex:
146-
logger.debug(f"extract_name_from_link_{key}:{ex}")
147-
return oss_name
148-
149-
15092
def overwrite_excel(excel_file_path, oss_name, column_name='OSS Name'):
15193
if oss_name != "":
15294
try:
@@ -169,7 +111,8 @@ def overwrite_excel(excel_file_path, oss_name, column_name='OSS Name'):
169111
logger.debug(f"overwrite_excel:{ex}")
170112

171113

172-
def merge_yamls(_output_dir, merge_yaml_files, final_report, remove_src_data=False, default_oss_name='', url=''):
114+
def merge_yamls(_output_dir, merge_yaml_files, final_report, remove_src_data=False,
115+
default_oss_name='', default_oss_version='', url=''):
173116
success = True
174117
err_msg = ''
175118

@@ -183,7 +126,8 @@ def merge_yamls(_output_dir, merge_yaml_files, final_report, remove_src_data=Fal
183126
if remove_src_data:
184127
existed_yaml = {}
185128
for oi in oss_list:
186-
oi.name = default_oss_name if oi.name == '-' else oi.name
129+
oi.name = default_oss_name if oi.name == '' else oi.name
130+
oi.version = default_oss_version if oi.version == '' else oi.version
187131
oi.download_location = url if oi.download_location == '' else oi.download_location
188132
create_yaml_with_ossitem(oi, existed_yaml)
189133
with open(os.path.join(_output_dir, mf), 'w') as f:

src/fosslight_scanner/fosslight_scanner.py

Lines changed: 11 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@
2323
from fosslight_util.output_format import check_output_format
2424
from fosslight_prechecker._precheck import run_lint as prechecker_lint
2525
from .common import (copy_file, call_analysis_api,
26-
overwrite_excel, extract_name_from_link,
26+
overwrite_excel,
2727
merge_yamls, correct_scanner_result,
2828
create_scancodejson)
2929
from fosslight_util.write_excel import merge_excels
@@ -104,7 +104,7 @@ def run_scanner(src_path, dep_arguments, output_path, keep_raw_data=False,
104104
run_src=True, run_bin=True, run_dep=True, run_prechecker=True,
105105
remove_src_data=True, result_log={}, output_file="",
106106
output_extension="", num_cores=-1, db_url="",
107-
default_oss_name="", url="",
107+
default_oss_name="", default_oss_version="", url="",
108108
correct_mode=True, correct_fpath="", ui_mode=False):
109109
final_excel_dir = output_path
110110
success = True
@@ -206,6 +206,7 @@ def run_scanner(src_path, dep_arguments, output_path, keep_raw_data=False,
206206

207207
if remove_src_data:
208208
overwrite_excel(_output_dir, default_oss_name, "OSS Name")
209+
overwrite_excel(_output_dir, default_oss_version, "OSS Version")
209210
overwrite_excel(_output_dir, url, "Download Location")
210211
success, err_msg = merge_excels(_output_dir, final_report, merge_files)
211212

@@ -219,7 +220,7 @@ def run_scanner(src_path, dep_arguments, output_path, keep_raw_data=False,
219220
shutil.rmtree(os.path.join(_output_dir, tmp_dir), ignore_errors=True)
220221
elif output_extension == ".yaml":
221222
success, err_msg = merge_yamls(_output_dir, merge_files, final_report,
222-
remove_src_data, default_oss_name, url)
223+
remove_src_data, default_oss_name, default_oss_version, url)
223224
if success:
224225
if os.path.isfile(final_report):
225226
logger.info(f'Generated the result file: {final_report}')
@@ -254,14 +255,16 @@ def download_source(link, out_dir):
254255
start_time = datetime.now().strftime('%Y%m%d_%H%M%S')
255256
success = False
256257
temp_src_dir = ""
258+
oss_name = ""
259+
oss_version = ""
257260
try:
258261
success, final_excel_dir, result_log = init(out_dir)
259262
temp_src_dir = os.path.join(
260263
_output_dir, SRC_DIR_FROM_LINK_PREFIX + start_time)
261264

262265
link = link.strip()
263266
logger.info(f"Link to download: {link}")
264-
success, msg = cli_download_and_extract(
267+
success, msg, oss_name, oss_version = cli_download_and_extract(
265268
link, temp_src_dir, _output_dir)
266269

267270
if success:
@@ -272,7 +275,7 @@ def download_source(link, out_dir):
272275
except Exception as ex:
273276
success = False
274277
logger.error(f"Failed to analyze from link: {ex}")
275-
return success, temp_src_dir
278+
return success, temp_src_dir, oss_name, oss_version
276279

277280

278281
def init(output_path="", make_outdir=True):
@@ -305,6 +308,7 @@ def run_main(mode, path_arg, dep_arguments, output_file_or_dir, file_format, url
305308

306309
output_file = ""
307310
default_oss_name = ""
311+
default_oss_version = ""
308312
src_path = ""
309313
_executed_path = os.getcwd()
310314

@@ -392,8 +396,7 @@ def run_main(mode, path_arg, dep_arguments, output_file_or_dir, file_format, url
392396

393397
if url_to_analyze != "":
394398
remove_downloaded_source = True
395-
default_oss_name = extract_name_from_link(url_to_analyze)
396-
success, src_path = download_source(url_to_analyze, output_path)
399+
success, src_path, default_oss_name, default_oss_version = download_source(url_to_analyze, output_path)
397400

398401
if output_extension == ".yaml":
399402
correct_mode = False
@@ -407,7 +410,7 @@ def run_main(mode, path_arg, dep_arguments, output_file_or_dir, file_format, url
407410
run_src, run_bin, run_dep, run_prechecker,
408411
remove_downloaded_source, {}, output_file,
409412
output_extension, num_cores, db_url,
410-
default_oss_name, url_to_analyze,
413+
default_oss_name, default_oss_version, url_to_analyze,
411414
correct_mode, correct_fpath, ui_mode)
412415
else:
413416
logger.error("No mode has been selected for analysis.")

0 commit comments

Comments
 (0)