Migration From 1.x to 2.x
There are a few breaking changes in 2.x. This document will help you migrate your code from 1.x to 2.x.
Python Version Support
idf-build-apps 1.x supports Python 2.7 and Python 3.4 or newer. idf-build-apps 2.x only supports Python 3.7 or newer.
Normal Arguments to Keyword-only Arguments
In 2.x, we move some arguments from normal arguments to keyword-only arguments. This is to make the API more consistent and easier to use.
To understand the difference between these terms better, here’s a quick summary:
“positonal-only argument” means the argument is a positional-only argument. (python 3.8+ only)
“keyword-only argument” means the argument is a keyword-only argument.
“normal argument” means the argument is not a positional-only argument, nor a keyword-only argument.
For example, in the following function:
def foo(a, /, b, c, *, d=1, e=2, f=3):
pass
“a” is a positional-only argument.
“b” and “c” are normal arguments.
“d”, “e”, and “f” are keyword-only arguments.
The following calls are valid:
foo(1, 2, 3, d=4, e=5, f=6)
foo(1, 2, c=3, d=4, e=5, f=6)
foo(1, b=2, c=3, d=4, e=5, f=6)
The following calls are invalid:
foo(1, 2, 3, 4, 5, 6)
foo(1, b=2, 3, d=4, e=5, f=6)
foo(a=1, b=2, c=3, d=4, e=5, f=6)
App.__init__()
The __init__
function of App
class, and all its sub-classes, like CMakeApp
, and MakeApp
, now takes only app_dir
, and target
as normal arguments. All the rest of the arguments are keyword-only arguments.
Before:
app = App('foo', 'esp32', 'sdkconfig.ci', 'default')
After:
app = App('foo', 'esp32', sdkconfig_path='sdkconfig.ci', config_name='default')
or all in keyword-only arguments:
app = App(app_dir='foo', target='esp32', sdkconfig_path='sdkconfig.ci', config_name='default')
App.build()
The build
function of App
class, and all its sub-classes, like CMakeApp
, and MakeApp
, now takes all arguments as keyword-only arguments.
find_apps()
The find_apps
function now takes only paths
and target
as normal arguments. All the rest of the arguments are keyword-only arguments.
build_apps()
The build_apps
function now takes only apps
as normal argument. All the rest of the arguments are keyword-only arguments.
Function Signature Changes
In 2.x, we change the signature of some functions to make them more intuitive and self-explanatory.
find_apps()
build_log_path
is renamed tobuild_log_filename
. The file will be generated underbuild_dir
if specified.size_json_path
is renamed tosize_json_filename
. The file will be generated underbuild_dir
if specified.
CLI Changes
In 2.x, we change the separator for some options to better differentiate them from None
and empty list.
--modified-components
--modified-files
--ignore-app-dependencies-filepatterns
Before:
idf-build-apps build -p foo -t esp32 --modified-components foo bar --modified-files foo bar --ignore-app-dependencies-filepatterns foo bar
After:
idf-build-apps build -p foo -t esp32 --modified-components 'foo;bar' --modified-files 'foo;bar' --ignore-app-dependencies-filepatterns 'foo;bar'
passing ''
to specify it as None
idf-build-apps build -p foo -t esp32 --modified-components ''
or passing ';'
to specify it as an empty list
idf-build-apps build -p foo -t esp32 --modified-components ';'