Skip to content

Commit e1871dc

Browse files
committed
Add to parse pub result file without flutter cmd
Signed-off-by: Jiyeong Seok <[email protected]>
1 parent 99ad285 commit e1871dc

File tree

5 files changed

+617
-280
lines changed

5 files changed

+617
-280
lines changed

src/fosslight_dependency/package_manager/Pub.py

Lines changed: 45 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,10 @@ def __del__(self):
3737
shutil.rmtree(self.tmp_dir)
3838

3939
def run_plugin(self):
40+
if os.path.exists(self.input_file_name):
41+
logger.info(f"Found {self.input_file_name}, skip the flutter cmd to analyze dependency.")
42+
return True
43+
4044
if not os.path.exists(const.SUPPORT_PACKAE.get(self.package_manager_name)):
4145
logger.error(f"Cannot find the file({const.SUPPORT_PACKAE.get(self.package_manager_name)})")
4246
return False
@@ -66,11 +70,7 @@ def run_plugin(self):
6670
ret = subprocess.check_output(cmd, shell=True)
6771
if ret != 0:
6872
pub_deps = ret.decode('utf8')
69-
for line in pub_deps.split('\n'):
70-
re_result = re.findall(r'\-\-\s(\S+[^.\s])[.|\s]', line)
71-
if re_result:
72-
self.total_dep_list.append(re_result[0])
73-
self.total_dep_list = list(set(self.total_dep_list))
73+
self.parse_no_deps_file(pub_deps)
7474

7575
cmd = f"flutter pub run flutter_oss_licenses:generate.dart -o {self.input_file_name} --json"
7676
ret = subprocess.call(cmd, shell=True)
@@ -81,10 +81,23 @@ def run_plugin(self):
8181

8282
return True
8383

84+
def parse_no_deps_file(self, f):
85+
for line in f.split('\n'):
86+
re_result = re.findall(r'\-\-\s(\S+[^.\s])[.|\s]', line)
87+
if re_result:
88+
self.total_dep_list.append(re_result[0])
89+
self.total_dep_list = list(set(self.total_dep_list))
90+
8491
def parse_oss_information(self, f_name):
8592
tmp_license_txt_file_name = 'tmp_license.txt'
8693
json_data = ''
8794
comment = ''
95+
tmp_no_deps_file = 'tmp_no_deps_result.txt'
96+
97+
if os.path.exists(tmp_no_deps_file):
98+
with open(tmp_no_deps_file, 'r', encoding='utf8') as deps_f:
99+
deps_l = deps_f.read()
100+
self.parse_no_deps_file(deps_l)
88101

89102
with open(f_name, 'r', encoding='utf8') as pub_file:
90103
json_f = json.load(pub_file)
@@ -94,34 +107,35 @@ def parse_oss_information(self, f_name):
94107

95108
for json_data in json_f:
96109
oss_origin_name = json_data['name']
97-
if oss_origin_name in self.total_dep_list:
98-
oss_name = f"{self.package_manager_name}:{oss_origin_name}"
99-
oss_version = json_data['version']
100-
homepage = json_data['homepage']
101-
dn_loc = f"{self.dn_url}{oss_origin_name}/versions/{oss_version}"
102-
license_txt = json_data['license']
103-
104-
tmp_license_txt = open(tmp_license_txt_file_name, 'w', encoding='utf-8')
105-
tmp_license_txt.write(license_txt)
106-
tmp_license_txt.close()
107-
108-
license_name_with_license_scanner = check_and_run_license_scanner(self.platform,
109-
self.license_scanner_bin,
110-
tmp_license_txt_file_name)
111-
112-
if license_name_with_license_scanner != "":
113-
license_name = license_name_with_license_scanner
110+
if self.total_dep_list != [] and oss_origin_name not in self.total_dep_list:
111+
continue
112+
oss_name = f"{self.package_manager_name}:{oss_origin_name}"
113+
oss_version = json_data['version']
114+
homepage = json_data['homepage']
115+
dn_loc = f"{self.dn_url}{oss_origin_name}/versions/{oss_version}"
116+
license_txt = json_data['license']
117+
118+
tmp_license_txt = open(tmp_license_txt_file_name, 'w', encoding='utf-8')
119+
tmp_license_txt.write(license_txt)
120+
tmp_license_txt.close()
121+
122+
license_name_with_license_scanner = check_and_run_license_scanner(self.platform,
123+
self.license_scanner_bin,
124+
tmp_license_txt_file_name)
125+
126+
if license_name_with_license_scanner != "":
127+
license_name = license_name_with_license_scanner
128+
else:
129+
license_name = ''
130+
131+
if self.direct_dep:
132+
if json_data['isDirectDependency']:
133+
comment = 'direct'
114134
else:
115-
license_name = ''
116-
117-
if self.direct_dep:
118-
if json_data['isDirectDependency']:
119-
comment = 'direct'
120-
else:
121-
comment = 'transitive'
135+
comment = 'transitive'
122136

123-
sheet_list.append([const.SUPPORT_PACKAE.get(self.package_manager_name),
124-
oss_name, oss_version, license_name, dn_loc, homepage, '', '', comment])
137+
sheet_list.append([const.SUPPORT_PACKAE.get(self.package_manager_name),
138+
oss_name, oss_version, license_name, dn_loc, homepage, '', '', comment])
125139
except Exception as e:
126140
logger.error(f"Fail to parse pub oss information: {e}")
127141

tests/test_pub/pubspec.yaml

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -16,9 +16,7 @@ dependencies:
1616
uni_links: ^0.5.1
1717

1818
dev_dependencies:
19-
flutter_test:
20-
sdk: flutter
21-
build_runner: ^2.0.3
19+
flutter_oss_licenses: ^2.0.1
2220

2321
# For information on the generic Dart part of this file, see the
2422
# following page: https://www.dartlang.org/tools/pub/pubspec
@@ -68,4 +66,4 @@ flutter:
6866
# weight: 700
6967
#
7068
# For details regarding fonts in packages, see
71-
# https://flutter.dev/custom-fonts/#from-packages
69+
# https://flutter.dev/custom-fonts/#from-packages

0 commit comments

Comments
 (0)