micropython-stubber 1.20.5__py3-none-any.whl → 1.23.0__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {micropython_stubber-1.20.5.dist-info → micropython_stubber-1.23.0.dist-info}/LICENSE +30 -30
- {micropython_stubber-1.20.5.dist-info → micropython_stubber-1.23.0.dist-info}/METADATA +1 -1
- micropython_stubber-1.23.0.dist-info/RECORD +159 -0
- mpflash/README.md +184 -184
- mpflash/libusb_flash.ipynb +203 -203
- mpflash/mpflash/add_firmware.py +98 -98
- mpflash/mpflash/ask_input.py +236 -236
- mpflash/mpflash/bootloader/__init__.py +37 -36
- mpflash/mpflash/bootloader/manual.py +102 -102
- mpflash/mpflash/bootloader/micropython.py +10 -10
- mpflash/mpflash/bootloader/touch1200.py +45 -45
- mpflash/mpflash/cli_download.py +129 -129
- mpflash/mpflash/cli_flash.py +219 -219
- mpflash/mpflash/cli_group.py +98 -98
- mpflash/mpflash/cli_list.py +81 -81
- mpflash/mpflash/cli_main.py +41 -41
- mpflash/mpflash/common.py +164 -164
- mpflash/mpflash/config.py +43 -47
- mpflash/mpflash/connected.py +74 -74
- mpflash/mpflash/download.py +360 -360
- mpflash/mpflash/downloaded.py +130 -129
- mpflash/mpflash/errors.py +9 -9
- mpflash/mpflash/flash.py +55 -52
- mpflash/mpflash/flash_esp.py +59 -59
- mpflash/mpflash/flash_stm32.py +18 -24
- mpflash/mpflash/flash_stm32_cube.py +111 -111
- mpflash/mpflash/flash_stm32_dfu.py +104 -101
- mpflash/mpflash/flash_uf2.py +89 -67
- mpflash/mpflash/flash_uf2_boardid.py +15 -15
- mpflash/mpflash/flash_uf2_linux.py +129 -123
- mpflash/mpflash/flash_uf2_macos.py +37 -34
- mpflash/mpflash/flash_uf2_windows.py +38 -34
- mpflash/mpflash/list.py +89 -89
- mpflash/mpflash/logger.py +41 -41
- mpflash/mpflash/mpboard_id/__init__.py +93 -93
- mpflash/mpflash/mpboard_id/add_boards.py +255 -255
- mpflash/mpflash/mpboard_id/board.py +37 -37
- mpflash/mpflash/mpboard_id/board_id.py +86 -86
- mpflash/mpflash/mpboard_id/store.py +43 -43
- mpflash/mpflash/mpremoteboard/__init__.py +226 -221
- mpflash/mpflash/mpremoteboard/mpy_fw_info.py +141 -141
- mpflash/mpflash/mpremoteboard/runner.py +140 -140
- mpflash/mpflash/uf2disk.py +12 -12
- mpflash/mpflash/vendor/basicgit.py +288 -288
- mpflash/mpflash/vendor/click_aliases.py +91 -91
- mpflash/mpflash/vendor/dfu.py +165 -165
- mpflash/mpflash/vendor/pydfu.py +605 -605
- mpflash/mpflash/vendor/readme.md +2 -2
- mpflash/mpflash/vendor/versions.py +119 -117
- mpflash/mpflash/worklist.py +171 -170
- mpflash/poetry.lock +1588 -1588
- mpflash/pyproject.toml +64 -60
- mpflash/stm32_udev_rules.md +62 -62
- stubber/__init__.py +3 -3
- stubber/basicgit.py +294 -288
- stubber/board/board_info.csv +193 -193
- stubber/board/boot.py +34 -34
- stubber/board/createstubs.py +986 -986
- stubber/board/createstubs_db.py +825 -825
- stubber/board/createstubs_db_min.py +331 -331
- stubber/board/createstubs_db_mpy.mpy +0 -0
- stubber/board/createstubs_lvgl.py +741 -741
- stubber/board/createstubs_lvgl_min.py +741 -741
- stubber/board/createstubs_mem.py +766 -766
- stubber/board/createstubs_mem_min.py +306 -306
- stubber/board/createstubs_mem_mpy.mpy +0 -0
- stubber/board/createstubs_min.py +294 -294
- stubber/board/createstubs_mpy.mpy +0 -0
- stubber/board/fw_info.py +141 -141
- stubber/board/info.py +183 -183
- stubber/board/main.py +19 -19
- stubber/board/modulelist.txt +247 -247
- stubber/board/pyrightconfig.json +34 -34
- stubber/bulk/mcu_stubber.py +454 -454
- stubber/codemod/_partials/__init__.py +48 -48
- stubber/codemod/_partials/db_main.py +147 -147
- stubber/codemod/_partials/lvgl_main.py +77 -77
- stubber/codemod/_partials/modules_reader.py +80 -80
- stubber/codemod/add_comment.py +53 -53
- stubber/codemod/add_method.py +65 -65
- stubber/codemod/board.py +317 -317
- stubber/codemod/enrich.py +145 -145
- stubber/codemod/merge_docstub.py +284 -284
- stubber/codemod/modify_list.py +54 -54
- stubber/codemod/utils.py +57 -57
- stubber/commands/build_cmd.py +94 -94
- stubber/commands/cli.py +55 -51
- stubber/commands/clone_cmd.py +77 -66
- stubber/commands/config_cmd.py +29 -29
- stubber/commands/enrich_folder_cmd.py +71 -70
- stubber/commands/get_core_cmd.py +71 -69
- stubber/commands/get_docstubs_cmd.py +89 -87
- stubber/commands/get_frozen_cmd.py +114 -112
- stubber/commands/get_mcu_cmd.py +61 -56
- stubber/commands/merge_cmd.py +67 -66
- stubber/commands/publish_cmd.py +119 -119
- stubber/commands/stub_cmd.py +31 -30
- stubber/commands/switch_cmd.py +62 -54
- stubber/commands/variants_cmd.py +49 -48
- stubber/cst_transformer.py +178 -178
- stubber/data/board_info.csv +193 -193
- stubber/data/board_info.json +1729 -1729
- stubber/data/micropython_tags.csv +15 -15
- stubber/data/requirements-core-micropython.txt +38 -38
- stubber/data/requirements-core-pycopy.txt +39 -39
- stubber/downloader.py +36 -36
- stubber/freeze/common.py +68 -68
- stubber/freeze/freeze_folder.py +69 -69
- stubber/freeze/freeze_manifest_2.py +113 -113
- stubber/freeze/get_frozen.py +127 -127
- stubber/get_cpython.py +101 -101
- stubber/get_lobo.py +59 -59
- stubber/minify.py +418 -418
- stubber/publish/bump.py +86 -86
- stubber/publish/candidates.py +262 -262
- stubber/publish/database.py +18 -18
- stubber/publish/defaults.py +45 -45
- stubber/publish/enums.py +24 -24
- stubber/publish/helpers.py +29 -29
- stubber/publish/merge_docstubs.py +130 -130
- stubber/publish/missing_class_methods.py +49 -49
- stubber/publish/package.py +146 -146
- stubber/publish/pathnames.py +51 -51
- stubber/publish/publish.py +120 -120
- stubber/publish/pypi.py +38 -38
- stubber/publish/stubpackage.py +1029 -1029
- stubber/rst/__init__.py +9 -9
- stubber/rst/classsort.py +77 -77
- stubber/rst/lookup.py +530 -530
- stubber/rst/output_dict.py +401 -401
- stubber/rst/reader.py +822 -822
- stubber/rst/report_return.py +69 -69
- stubber/rst/rst_utils.py +540 -540
- stubber/stubber.py +38 -38
- stubber/stubs_from_docs.py +90 -90
- stubber/tools/manifestfile.py +655 -610
- stubber/tools/readme.md +7 -6
- stubber/update_fallback.py +117 -117
- stubber/update_module_list.py +123 -123
- stubber/utils/__init__.py +5 -5
- stubber/utils/config.py +127 -127
- stubber/utils/makeversionhdr.py +54 -54
- stubber/utils/manifest.py +92 -92
- stubber/utils/post.py +79 -79
- stubber/utils/repos.py +157 -154
- stubber/utils/stubmaker.py +139 -139
- stubber/utils/typed_config_toml.py +77 -77
- stubber/utils/versions.py +128 -120
- stubber/variants.py +106 -106
- micropython_stubber-1.20.5.dist-info/RECORD +0 -159
- {micropython_stubber-1.20.5.dist-info → micropython_stubber-1.23.0.dist-info}/WHEEL +0 -0
- {micropython_stubber-1.20.5.dist-info → micropython_stubber-1.23.0.dist-info}/entry_points.txt +0 -0
stubber/utils/post.py
CHANGED
@@ -1,79 +1,79 @@
|
|
1
|
-
"""Pre/Post Processing for createstubs.py"""
|
2
|
-
import subprocess
|
3
|
-
import sys
|
4
|
-
from pathlib import Path
|
5
|
-
from typing import List
|
6
|
-
|
7
|
-
import autoflake
|
8
|
-
from loguru import logger as log
|
9
|
-
|
10
|
-
from .stubmaker import generate_pyi_files
|
11
|
-
|
12
|
-
|
13
|
-
def do_post_processing(stub_paths: List[Path], stubgen: bool, black: bool, autoflake: bool):
|
14
|
-
"Common post processing"
|
15
|
-
for path in stub_paths:
|
16
|
-
if stubgen:
|
17
|
-
log.debug("Generate type hint files (pyi) in folder: {}".format(path))
|
18
|
-
generate_pyi_files(path)
|
19
|
-
if black:
|
20
|
-
run_black(path)
|
21
|
-
if autoflake:
|
22
|
-
run_autoflake(path, process_pyi=True)
|
23
|
-
|
24
|
-
|
25
|
-
def run_black(path: Path, capture_output: bool = False):
|
26
|
-
"""
|
27
|
-
run black to format the code / stubs
|
28
|
-
"""
|
29
|
-
log.debug("Running black on: {}".format(path))
|
30
|
-
cmd = [
|
31
|
-
sys.executable,
|
32
|
-
"-m",
|
33
|
-
"black",
|
34
|
-
path.as_posix(),
|
35
|
-
"--line-length",
|
36
|
-
"140",
|
37
|
-
]
|
38
|
-
result = subprocess.run(cmd, capture_output=True, text=True, encoding="utf-8")
|
39
|
-
|
40
|
-
return result.returncode
|
41
|
-
|
42
|
-
|
43
|
-
def run_autoflake(path: Path, capture_output: bool = False, process_pyi: bool = False):
|
44
|
-
"""
|
45
|
-
run autoflake to remove unused imports
|
46
|
-
needs to be run BEFORE black otherwise it does not recognize long import from`s.
|
47
|
-
note: is run file-by-file to include processing .pyi files
|
48
|
-
"""
|
49
|
-
if not path.exists():
|
50
|
-
log.warning(f"Path does not exist: {path}")
|
51
|
-
return -1
|
52
|
-
log.info(f"Running autoflake on: {path}")
|
53
|
-
# create a list of files to be formatted
|
54
|
-
files: List[str] = []
|
55
|
-
files.extend([str(f) for f in path.rglob("*.py")])
|
56
|
-
if process_pyi:
|
57
|
-
files.extend([str(f) for f in path.rglob("*.pyi")])
|
58
|
-
|
59
|
-
# build an argument list
|
60
|
-
autoflake_args = {
|
61
|
-
"write_to_stdout": False, # print changed text to stdout
|
62
|
-
"in_place": True, # make changes to files instead of printing diffs
|
63
|
-
"remove_all_unused_imports": False,
|
64
|
-
"ignore_init_module_imports": False, # exclude __init__.py when removing unused imports
|
65
|
-
"expand_star_imports": False,
|
66
|
-
"remove_duplicate_keys": False,
|
67
|
-
"remove_unused_variables": False, # remove all unused imports (not just those from the standard library)
|
68
|
-
"remove_rhs_for_unused_variables": False,
|
69
|
-
"ignore_pass_statements": False, # remove pass when superfluous
|
70
|
-
"ignore_pass_after_docstring": False, # ignore pass statements after a newline ending on '"""'
|
71
|
-
"check": False, # return error code if changes are needed
|
72
|
-
"check_diff": False,
|
73
|
-
"quiet": False,
|
74
|
-
}
|
75
|
-
# format the files
|
76
|
-
exit_status = 0
|
77
|
-
for name in files:
|
78
|
-
log.debug(f"Running autoflake on: {name}")
|
79
|
-
exit_status |= autoflake.fix_file(name, args=autoflake_args)
|
1
|
+
"""Pre/Post Processing for createstubs.py"""
|
2
|
+
import subprocess
|
3
|
+
import sys
|
4
|
+
from pathlib import Path
|
5
|
+
from typing import List
|
6
|
+
|
7
|
+
import autoflake
|
8
|
+
from loguru import logger as log
|
9
|
+
|
10
|
+
from .stubmaker import generate_pyi_files
|
11
|
+
|
12
|
+
|
13
|
+
def do_post_processing(stub_paths: List[Path], stubgen: bool, black: bool, autoflake: bool):
|
14
|
+
"Common post processing"
|
15
|
+
for path in stub_paths:
|
16
|
+
if stubgen:
|
17
|
+
log.debug("Generate type hint files (pyi) in folder: {}".format(path))
|
18
|
+
generate_pyi_files(path)
|
19
|
+
if black:
|
20
|
+
run_black(path)
|
21
|
+
if autoflake:
|
22
|
+
run_autoflake(path, process_pyi=True)
|
23
|
+
|
24
|
+
|
25
|
+
def run_black(path: Path, capture_output: bool = False):
|
26
|
+
"""
|
27
|
+
run black to format the code / stubs
|
28
|
+
"""
|
29
|
+
log.debug("Running black on: {}".format(path))
|
30
|
+
cmd = [
|
31
|
+
sys.executable,
|
32
|
+
"-m",
|
33
|
+
"black",
|
34
|
+
path.as_posix(),
|
35
|
+
"--line-length",
|
36
|
+
"140",
|
37
|
+
]
|
38
|
+
result = subprocess.run(cmd, capture_output=True, text=True, encoding="utf-8")
|
39
|
+
|
40
|
+
return result.returncode
|
41
|
+
|
42
|
+
|
43
|
+
def run_autoflake(path: Path, capture_output: bool = False, process_pyi: bool = False):
|
44
|
+
"""
|
45
|
+
run autoflake to remove unused imports
|
46
|
+
needs to be run BEFORE black otherwise it does not recognize long import from`s.
|
47
|
+
note: is run file-by-file to include processing .pyi files
|
48
|
+
"""
|
49
|
+
if not path.exists():
|
50
|
+
log.warning(f"Path does not exist: {path}")
|
51
|
+
return -1
|
52
|
+
log.info(f"Running autoflake on: {path}")
|
53
|
+
# create a list of files to be formatted
|
54
|
+
files: List[str] = []
|
55
|
+
files.extend([str(f) for f in path.rglob("*.py")])
|
56
|
+
if process_pyi:
|
57
|
+
files.extend([str(f) for f in path.rglob("*.pyi")])
|
58
|
+
|
59
|
+
# build an argument list
|
60
|
+
autoflake_args = {
|
61
|
+
"write_to_stdout": False, # print changed text to stdout
|
62
|
+
"in_place": True, # make changes to files instead of printing diffs
|
63
|
+
"remove_all_unused_imports": False,
|
64
|
+
"ignore_init_module_imports": False, # exclude __init__.py when removing unused imports
|
65
|
+
"expand_star_imports": False,
|
66
|
+
"remove_duplicate_keys": False,
|
67
|
+
"remove_unused_variables": False, # remove all unused imports (not just those from the standard library)
|
68
|
+
"remove_rhs_for_unused_variables": False,
|
69
|
+
"ignore_pass_statements": False, # remove pass when superfluous
|
70
|
+
"ignore_pass_after_docstring": False, # ignore pass statements after a newline ending on '"""'
|
71
|
+
"check": False, # return error code if changes are needed
|
72
|
+
"check_diff": False,
|
73
|
+
"quiet": False,
|
74
|
+
}
|
75
|
+
# format the files
|
76
|
+
exit_status = 0
|
77
|
+
for name in files:
|
78
|
+
log.debug(f"Running autoflake on: {name}")
|
79
|
+
exit_status |= autoflake.fix_file(name, args=autoflake_args)
|
stubber/utils/repos.py
CHANGED
@@ -1,154 +1,157 @@
|
|
1
|
-
""" utility functions to handle to cloned repos needed for stubbing."""
|
2
|
-
|
3
|
-
import csv
|
4
|
-
import os
|
5
|
-
import pkgutil
|
6
|
-
import tempfile
|
7
|
-
from collections import defaultdict
|
8
|
-
from pathlib import Path
|
9
|
-
from typing import Tuple
|
10
|
-
|
11
|
-
from loguru import logger as log
|
12
|
-
from packaging.version import Version
|
13
|
-
|
14
|
-
import stubber.basicgit as git
|
15
|
-
from
|
16
|
-
from stubber.utils.
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
git.fetch(
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
ntf.file.
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
#
|
80
|
-
if
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
|
99
|
-
|
100
|
-
|
101
|
-
|
102
|
-
|
103
|
-
|
104
|
-
|
105
|
-
|
106
|
-
|
107
|
-
|
108
|
-
git.fetch(
|
109
|
-
|
110
|
-
|
111
|
-
|
112
|
-
|
113
|
-
|
114
|
-
|
115
|
-
|
116
|
-
|
117
|
-
|
118
|
-
|
119
|
-
|
120
|
-
|
121
|
-
|
122
|
-
|
123
|
-
|
124
|
-
|
125
|
-
|
126
|
-
|
127
|
-
|
128
|
-
|
129
|
-
|
130
|
-
|
131
|
-
|
132
|
-
|
133
|
-
|
134
|
-
|
135
|
-
|
136
|
-
|
137
|
-
|
138
|
-
|
139
|
-
|
140
|
-
if dest_path
|
141
|
-
|
142
|
-
|
143
|
-
|
144
|
-
mpy_path =
|
145
|
-
mpy_lib_path =
|
146
|
-
|
147
|
-
|
148
|
-
|
149
|
-
|
150
|
-
|
151
|
-
if not (
|
152
|
-
log.error("micropython
|
153
|
-
raise LookupError
|
154
|
-
|
1
|
+
""" utility functions to handle to cloned repos needed for stubbing."""
|
2
|
+
|
3
|
+
import csv
|
4
|
+
import os
|
5
|
+
import pkgutil
|
6
|
+
import tempfile
|
7
|
+
from collections import defaultdict
|
8
|
+
from pathlib import Path
|
9
|
+
from typing import Tuple
|
10
|
+
|
11
|
+
from loguru import logger as log
|
12
|
+
from packaging.version import Version
|
13
|
+
|
14
|
+
import stubber.basicgit as git
|
15
|
+
from mpflash.vendor.versions import get_stable_mp_version
|
16
|
+
from stubber.utils.config import CONFIG
|
17
|
+
from stubber.utils.versions import SET_PREVIEW, V_PREVIEW
|
18
|
+
|
19
|
+
# # log = logging.getLogger(__name__)
|
20
|
+
|
21
|
+
|
22
|
+
def switch(tag: str, *, mpy_path: Path, mpy_lib_path: Path):
|
23
|
+
"""
|
24
|
+
Switch to a specific version of the micropython repos.
|
25
|
+
|
26
|
+
Specify the version with --tag or --version to specify the version tag
|
27
|
+
of the MicroPython repo.
|
28
|
+
The Micropython-lib repo will be checked out to a commit that corresponds
|
29
|
+
in time to that version tag, in order to allow non-current versions to be
|
30
|
+
stubbed correctly.
|
31
|
+
|
32
|
+
The repros must be cloned already
|
33
|
+
"""
|
34
|
+
# fetch then switch
|
35
|
+
git.fetch(mpy_path)
|
36
|
+
git.fetch(mpy_lib_path)
|
37
|
+
|
38
|
+
if not tag or tag in {"master", ""}:
|
39
|
+
tag = V_PREVIEW
|
40
|
+
if tag in SET_PREVIEW:
|
41
|
+
git.switch_branch(repo=mpy_path, branch="master")
|
42
|
+
else:
|
43
|
+
git.checkout_tag(repo=mpy_path, tag=tag)
|
44
|
+
match_lib_with_mpy(version_tag=tag, mpy_path=mpy_path, lib_path=mpy_lib_path)
|
45
|
+
|
46
|
+
|
47
|
+
def read_micropython_lib_commits(filename: str = "data/micropython_tags.csv"):
|
48
|
+
"""
|
49
|
+
Read a csv with the micropython version and matching micropython-lib commit-hashes
|
50
|
+
these can be used to make sure that the correct micropython-lib version is checked out.
|
51
|
+
|
52
|
+
filename is relative to the 'stubber' package
|
53
|
+
|
54
|
+
git for-each-ref --sort=creatordate --format '%(refname) %(creatordate)' refs/tags
|
55
|
+
"""
|
56
|
+
data = pkgutil.get_data("stubber", filename)
|
57
|
+
if not data:
|
58
|
+
raise FileNotFoundError(f"Resource {filename} not found")
|
59
|
+
version_commit = defaultdict() # lgtm [py/multiple-definition]
|
60
|
+
with tempfile.NamedTemporaryFile(prefix="tags", suffix=".csv", mode="w+t") as ntf:
|
61
|
+
ntf.file.write(data.decode(encoding="utf8"))
|
62
|
+
ntf.file.seek(0)
|
63
|
+
# read the csv file using DictReader
|
64
|
+
reader = csv.DictReader(ntf.file, skipinitialspace=True) # dialect="excel",
|
65
|
+
rows = list(reader)
|
66
|
+
# create a dict version --> commit_hash
|
67
|
+
version_commit = {
|
68
|
+
row["version"].split("/")[-1]: row["lib_commit_hash"]
|
69
|
+
for row in rows
|
70
|
+
if row["version"].startswith("refs/tags/")
|
71
|
+
}
|
72
|
+
# add default
|
73
|
+
version_commit = defaultdict(lambda: "master", version_commit)
|
74
|
+
return version_commit
|
75
|
+
|
76
|
+
|
77
|
+
def match_lib_with_mpy(version_tag: str, mpy_path: Path, lib_path: Path) -> bool:
|
78
|
+
micropython_lib_commits = read_micropython_lib_commits()
|
79
|
+
# Make sure that the correct micropython-lib release is checked out
|
80
|
+
# check if micropython-lib has matching tags
|
81
|
+
if version_tag in SET_PREVIEW:
|
82
|
+
# micropython-lib is now a submodule
|
83
|
+
result = git.checkout_commit("master", lib_path)
|
84
|
+
if not result:
|
85
|
+
log.error("Could not checkout micropython-lib @master")
|
86
|
+
return False
|
87
|
+
|
88
|
+
return git.sync_submodules(mpy_path)
|
89
|
+
elif Version(version_tag) >= Version("v1.20.0"):
|
90
|
+
# micropython-lib is now a submodule
|
91
|
+
result = git.checkout_tag(version_tag, lib_path)
|
92
|
+
if not result:
|
93
|
+
log.warning(f"Could not checkout micropython-lib @{version_tag}")
|
94
|
+
if not git.checkout_tag("master", lib_path):
|
95
|
+
log.error("Could not checkout micropython-lib @master")
|
96
|
+
return False
|
97
|
+
return git.sync_submodules(mpy_path)
|
98
|
+
else:
|
99
|
+
log.info(
|
100
|
+
f"Matching repo's: Micropython {version_tag} needs micropython-lib:{micropython_lib_commits[version_tag]}"
|
101
|
+
)
|
102
|
+
return git.checkout_commit(micropython_lib_commits[version_tag], lib_path)
|
103
|
+
|
104
|
+
|
105
|
+
def fetch_repos(tag: str, mpy_path: Path, mpy_lib_path: Path):
|
106
|
+
"""Fetch updates, then switch to the provided tag"""
|
107
|
+
log.info("fetch updates")
|
108
|
+
git.fetch(mpy_path)
|
109
|
+
git.fetch(mpy_lib_path)
|
110
|
+
try:
|
111
|
+
git.fetch(CONFIG.mpy_stubs_path)
|
112
|
+
except Exception:
|
113
|
+
log.trace("no stubs repo found : {CONFIG.mpy_stubs_path}")
|
114
|
+
|
115
|
+
if not tag:
|
116
|
+
tag = V_PREVIEW
|
117
|
+
|
118
|
+
log.info(f"Switching to {tag}")
|
119
|
+
if tag == V_PREVIEW:
|
120
|
+
git.switch_branch(repo=mpy_path, branch="master")
|
121
|
+
else:
|
122
|
+
if tag == "stable":
|
123
|
+
tag = get_stable_mp_version()
|
124
|
+
git.switch_tag(tag, repo=mpy_path)
|
125
|
+
result = match_lib_with_mpy(version_tag=tag, mpy_path=mpy_path, lib_path=mpy_lib_path)
|
126
|
+
|
127
|
+
log.info(f"{str(mpy_path):<40} {git.get_local_tag(mpy_path)}")
|
128
|
+
log.info(f"{str(mpy_lib_path):<40} {git.get_local_tag(mpy_lib_path)}")
|
129
|
+
try:
|
130
|
+
sub_mod_path = mpy_path / "lib/micropython-lib"
|
131
|
+
if (sub_mod_path / ".git").exists():
|
132
|
+
log.info(f"{str(sub_mod_path):<40} {git.get_local_tag(sub_mod_path)}")
|
133
|
+
except Exception:
|
134
|
+
pass
|
135
|
+
return result
|
136
|
+
|
137
|
+
|
138
|
+
def repo_paths(dest_path: Path) -> Tuple[Path, Path]:
|
139
|
+
"""Return the paths to the micropython and micropython-lib repos, given a path to the repos.'"""
|
140
|
+
if not dest_path.exists():
|
141
|
+
os.mkdir(dest_path)
|
142
|
+
# repos are relative to provided path
|
143
|
+
if dest_path != CONFIG.repo_path:
|
144
|
+
mpy_path = dest_path / "micropython"
|
145
|
+
mpy_lib_path = dest_path / "micropython-lib"
|
146
|
+
else:
|
147
|
+
mpy_path = CONFIG.mpy_path
|
148
|
+
mpy_lib_path = CONFIG.mpy_lib_path
|
149
|
+
|
150
|
+
# if no repos then error
|
151
|
+
if not (mpy_path / ".git").exists():
|
152
|
+
log.error("micropython repo not found")
|
153
|
+
raise LookupError
|
154
|
+
if not (mpy_lib_path / ".git").exists():
|
155
|
+
log.error("micropython-lib repo not found")
|
156
|
+
raise LookupError
|
157
|
+
return mpy_path, mpy_lib_path
|