Skip to content

Commit 9bb5d97

Browse files
authored
refactor: optimize build times (#65)
* refactor: optimize build times When we copy app folder we also copy app resources, which cause app rebuilds. Avoid app rebuilds by copy only file changes. * fix: run type
1 parent 5d63d31 commit 9bb5d97

File tree

11 files changed

+33
-29
lines changed

11 files changed

+33
-29
lines changed

core/utils/file_utils.py

+3-3
Original file line numberDiff line numberDiff line change
@@ -141,9 +141,9 @@ def exists(path):
141141
return os.path.isfile(path)
142142

143143
@staticmethod
144-
def copy(src, target):
145-
shutil.copy(src, target)
146-
Log.info('Copy {0} to {1}'.format(os.path.abspath(src), os.path.abspath(target)))
144+
def copy(source, target):
145+
shutil.copy(source, target)
146+
Log.info('Copy {0} to {1}'.format(os.path.abspath(source), os.path.abspath(target)))
147147

148148
@staticmethod
149149
def delete(path):

core/utils/npm.py

+2-2
Original file line numberDiff line numberDiff line change
@@ -37,14 +37,14 @@ def download(package, output_file):
3737
src_file = os.path.join(Settings.TEST_SUT_HOME, npm_package)
3838
File.delete(path=output_file)
3939
Npm.__run_npm_command('pack ' + output, folder=Settings.TEST_SUT_HOME)
40-
File.copy(src=src_file, target=output_file)
40+
File.copy(source=src_file, target=output_file)
4141
File.delete(src_file)
4242

4343
@staticmethod
4444
def pack(folder, output_file):
4545
Npm.__run_npm_command('pack', folder=folder)
4646
src_file = File.find_by_extension(folder=folder, extension='tgz')[0]
47-
File.copy(src=src_file, target=output_file)
47+
File.copy(source=src_file, target=output_file)
4848
File.delete(src_file)
4949

5050
@staticmethod

core_tests/unit/utils/file_tests.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ def test_02_replace(self):
2020
new_value = 'Android here\n.page { background-color: red;}'
2121

2222
# Create new file (so we don't break original one).
23-
File.copy(src=old_scss, target=new_scss)
23+
File.copy(source=old_scss, target=new_scss)
2424
assert len(File.read(path=new_scss).splitlines()) == 14, 'Unexpected lines count.'
2525

2626
# Replace

data/sync/hello_world_js.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -66,7 +66,7 @@ def __sync_hello_world_js_ts(app_type, app_name, platform, device,
6666
bundle=bundle, hmr=hmr, uglify=uglify, aot=aot, snapshot=snapshot)
6767
__verify_snapshot_skipped(snapshot, result)
6868

69-
strings = TnsLogs.run_messages(app_name=app_name, platform=platform, run_type=RunType.FULL, bundle=bundle,
69+
strings = TnsLogs.run_messages(app_name=app_name, platform=platform, run_type=RunType.UNKNOWN, bundle=bundle,
7070
hmr=hmr, instrumented=instrumented)
7171
TnsLogs.wait_for_log(log_file=result.log_file, string_list=strings, timeout=240)
7272

products/nativescript/preview_helpers.py

+4-4
Original file line numberDiff line numberDiff line change
@@ -20,10 +20,10 @@ class Preview(object):
2020
@staticmethod
2121
def get_app_packages():
2222
"""Copy Preview App packages from Shares to local folder"""
23-
File.copy(src=Settings.Packages.PREVIEW_APP_IOS, target=TEST_SUT_HOME)
24-
File.copy(src=Settings.Packages.PREVIEW_APP_ANDROID, target=TEST_SUT_HOME)
25-
File.copy(src=Settings.Packages.PLAYGROUND_APP_IOS, target=TEST_SUT_HOME)
26-
File.copy(src=Settings.Packages.PLAYGROUND_APP_ANDROID, target=TEST_SUT_HOME)
23+
File.copy(source=Settings.Packages.PREVIEW_APP_IOS, target=TEST_SUT_HOME)
24+
File.copy(source=Settings.Packages.PREVIEW_APP_ANDROID, target=TEST_SUT_HOME)
25+
File.copy(source=Settings.Packages.PLAYGROUND_APP_IOS, target=TEST_SUT_HOME)
26+
File.copy(source=Settings.Packages.PLAYGROUND_APP_ANDROID, target=TEST_SUT_HOME)
2727

2828
@staticmethod
2929
def unpack_ios_simulator_packages():

run_common.py

+3-3
Original file line numberDiff line numberDiff line change
@@ -72,7 +72,7 @@ def __get_runtimes():
7272
# Copy or download tns-android
7373
android_package = os.path.join(Settings.TEST_SUT_HOME, 'tns-android.tgz')
7474
if '.tgz' in Settings.Packages.ANDROID:
75-
File.copy(src=Settings.Packages.ANDROID, target=android_package)
75+
File.copy(source=Settings.Packages.ANDROID, target=android_package)
7676
Settings.Packages.ANDROID = android_package
7777
else:
7878
Npm.download(package=Settings.Packages.ANDROID, output_file=android_package)
@@ -81,7 +81,7 @@ def __get_runtimes():
8181
if Settings.HOST_OS == OSType.OSX:
8282
ios_package = os.path.join(Settings.TEST_SUT_HOME, 'tns-ios.tgz')
8383
if '.tgz' in Settings.Packages.IOS:
84-
File.copy(src=Settings.Packages.IOS, target=ios_package)
84+
File.copy(source=Settings.Packages.IOS, target=ios_package)
8585
Settings.Packages.IOS = ios_package
8686
else:
8787
Npm.download(package=Settings.Packages.IOS, output_file=ios_package)
@@ -95,7 +95,7 @@ def __install_ns_cli():
9595
# Copy NativeScript CLI (if used from local package)
9696
if '.tgz' in Settings.Packages.NS_CLI:
9797
cli_package = os.path.join(Settings.TEST_SUT_HOME, 'nativescript.tgz')
98-
File.copy(src=Settings.Packages.NS_CLI, target=cli_package)
98+
File.copy(source=Settings.Packages.NS_CLI, target=cli_package)
9999
Settings.Packages.NS_CLI = cli_package
100100

101101
# Install NativeScript CLI

tests/cli/preview/templates/hello_word_js_tests.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@ def setUpClass(cls):
3535
Tns.create(app_name=cls.app_name, template=Template.HELLO_WORLD_JS.local_package, update=True)
3636
src = os.path.join(Settings.TEST_RUN_HOME, 'assets', 'logs', 'hello-world-js', 'app.js')
3737
target = os.path.join(Settings.TEST_RUN_HOME, cls.app_name, 'app')
38-
File.copy(src=src, target=target)
38+
File.copy(source=src, target=target)
3939

4040
# Copy TestApp to data folder.
4141
Folder.copy(source=cls.source_project_dir, target=cls.target_project_dir)

tests/cli/preview/templates/hello_word_ng_tests.py

+2-2
Original file line numberDiff line numberDiff line change
@@ -34,10 +34,10 @@ def setUpClass(cls):
3434
Tns.create(app_name=cls.app_name, template=Template.HELLO_WORLD_NG.local_package, update=True)
3535
src = os.path.join(Settings.TEST_RUN_HOME, 'assets', 'logs', 'hello-world-ng', 'main.ts')
3636
target = os.path.join(Settings.TEST_RUN_HOME, cls.app_name, 'src')
37-
File.copy(src=src, target=target)
37+
File.copy(source=src, target=target)
3838
src = os.path.join(Settings.TEST_RUN_HOME, 'assets', 'logs', 'hello-world-ng', 'items.component.ts')
3939
target = os.path.join(Settings.TEST_RUN_HOME, cls.app_name, 'src', 'app', 'item')
40-
File.copy(src=src, target=target)
40+
File.copy(source=src, target=target)
4141

4242
# Copy TestApp to data folder.
4343
Folder.copy(source=cls.source_project_dir, target=cls.target_project_dir)

tests/cli/run/templates/hello_world_js_tests.py

+7-5
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
from core.enums.platform_type import Platform
77
from core.settings import Settings
88
from core.utils.file_utils import Folder, File
9+
from data.changes import Changes
910
from data.sync.hello_world_js import sync_hello_world_js
1011
from data.templates import Template
1112
from products.nativescript.tns import Tns
@@ -24,7 +25,7 @@ def setUpClass(cls):
2425
Tns.create(app_name=cls.app_name, template=Template.HELLO_WORLD_JS.local_package, update=True)
2526
src = os.path.join(Settings.TEST_RUN_HOME, 'assets', 'logs', 'hello-world-js', 'app.js')
2627
target = os.path.join(Settings.TEST_RUN_HOME, cls.app_name, 'app')
27-
File.copy(src=src, target=target)
28+
File.copy(source=src, target=target)
2829
Tns.platform_add_android(app_name=cls.app_name, framework_path=Settings.Android.FRAMEWORK_PATH)
2930
if Settings.HOST_OS is OSType.OSX:
3031
Tns.platform_add_ios(app_name=cls.app_name, framework_path=Settings.IOS.FRAMEWORK_PATH)
@@ -36,10 +37,11 @@ def setUp(self):
3637
TnsRunTest.setUp(self)
3738
# "src" folder of TestApp will be restored before each test.
3839
# This will ensure failures in one test do not cause common failures.
39-
source_src = os.path.join(self.target_project_dir, 'app')
40-
target_src = os.path.join(self.source_project_dir, 'app')
41-
Folder.clean(target_src)
42-
Folder.copy(source=source_src, target=target_src)
40+
for change in [Changes.JSHelloWord.CSS, Changes.JSHelloWord.XML, Changes.JSHelloWord.JS]:
41+
source_src = os.path.join(self.target_project_dir, 'app', os.path.basename(change.file_path))
42+
target_src = os.path.join(self.source_project_dir, change.file_path)
43+
File.clean(path=target_src)
44+
File.copy(source=source_src, target=target_src)
4345

4446
def test_100_run_android(self):
4547
sync_hello_world_js(self.app_name, Platform.ANDROID, self.emu)

tests/cli/run/templates/hello_world_ng_tests.py

+2-2
Original file line numberDiff line numberDiff line change
@@ -24,10 +24,10 @@ def setUpClass(cls):
2424
Tns.create(app_name=cls.app_name, template=Template.HELLO_WORLD_NG.local_package, update=True)
2525
src = os.path.join(Settings.TEST_RUN_HOME, 'assets', 'logs', 'hello-world-ng', 'main.ts')
2626
target = os.path.join(Settings.TEST_RUN_HOME, cls.app_name, 'src')
27-
File.copy(src=src, target=target)
27+
File.copy(source=src, target=target)
2828
src = os.path.join(Settings.TEST_RUN_HOME, 'assets', 'logs', 'hello-world-ng', 'items.component.ts')
2929
target = os.path.join(Settings.TEST_RUN_HOME, cls.app_name, 'src', 'app', 'item')
30-
File.copy(src=src, target=target)
30+
File.copy(source=src, target=target)
3131
Tns.platform_add_android(app_name=cls.app_name, framework_path=Settings.Android.FRAMEWORK_PATH)
3232
if Settings.HOST_OS is OSType.OSX:
3333
Tns.platform_add_ios(app_name=cls.app_name, framework_path=Settings.IOS.FRAMEWORK_PATH)

tests/cli/run/templates/hello_world_ts_tests.py

+7-5
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
from core.enums.platform_type import Platform
77
from core.settings import Settings
88
from core.utils.file_utils import Folder, File
9+
from data.changes import Changes
910
from data.sync.hello_world_js import sync_hello_world_ts
1011
from data.templates import Template
1112
from products.nativescript.tns import Tns
@@ -24,7 +25,7 @@ def setUpClass(cls):
2425
Tns.create(app_name=cls.app_name, template=Template.HELLO_WORLD_TS.local_package, update=True)
2526
src = os.path.join(Settings.TEST_RUN_HOME, 'assets', 'logs', 'hello-world-ts', 'app.ts')
2627
target = os.path.join(Settings.TEST_RUN_HOME, cls.app_name, 'app')
27-
File.copy(src=src, target=target)
28+
File.copy(source=src, target=target)
2829
Tns.platform_add_android(app_name=cls.app_name, framework_path=Settings.Android.FRAMEWORK_PATH)
2930
if Settings.HOST_OS is OSType.OSX:
3031
Tns.platform_add_ios(app_name=cls.app_name, framework_path=Settings.IOS.FRAMEWORK_PATH)
@@ -36,10 +37,11 @@ def setUp(self):
3637
TnsRunTest.setUp(self)
3738
# "src" folder of TestApp will be restored before each test.
3839
# This will ensure failures in one test do not cause common failures.
39-
source_src = os.path.join(self.target_project_dir, 'app')
40-
target_src = os.path.join(self.source_project_dir, 'app')
41-
Folder.clean(target_src)
42-
Folder.copy(source=source_src, target=target_src)
40+
for change in [Changes.TSHelloWord.CSS, Changes.TSHelloWord.XML, Changes.TSHelloWord.TS]:
41+
source_src = os.path.join(self.target_project_dir, 'app', os.path.basename(change.file_path))
42+
target_src = os.path.join(self.source_project_dir, change.file_path)
43+
File.clean(path=target_src)
44+
File.copy(source=source_src, target=target_src)
4345

4446
def test_100_run_android(self):
4547
sync_hello_world_ts(self.app_name, Platform.ANDROID, self.emu)

0 commit comments

Comments
 (0)