Merge branch 'bugfix/misc_v3_1_backports' into 'release/v3.1'
Multiple v3.1 backports See merge request idf/esp-idf!3378
This commit is contained in:
commit
027e081622
12 changed files with 71 additions and 10 deletions
|
@ -1,5 +1,5 @@
|
||||||
#
|
ifdef CONFIG_BT_ENABLED
|
||||||
#Component Makefile
|
|
||||||
#
|
|
||||||
|
|
||||||
COMPONENT_ADD_LDFLAGS = -Wl,--whole-archive -l$(COMPONENT_NAME) -Wl,--no-whole-archive
|
COMPONENT_ADD_LDFLAGS = -Wl,--whole-archive -l$(COMPONENT_NAME) -Wl,--no-whole-archive
|
||||||
|
else
|
||||||
|
COMPONENT_CONFIG_ONLY := 1
|
||||||
|
endif
|
||||||
|
|
|
@ -29,6 +29,7 @@
|
||||||
#include "soc/io_mux_reg.h"
|
#include "soc/io_mux_reg.h"
|
||||||
#include "soc/rtc_cntl_reg.h"
|
#include "soc/rtc_cntl_reg.h"
|
||||||
#include "soc/timer_group_reg.h"
|
#include "soc/timer_group_reg.h"
|
||||||
|
#include "soc/efuse_reg.h"
|
||||||
|
|
||||||
#include "driver/rtc_io.h"
|
#include "driver/rtc_io.h"
|
||||||
|
|
||||||
|
@ -163,6 +164,11 @@ void IRAM_ATTR call_start_cpu0()
|
||||||
ESP_EARLY_LOGI(TAG, "Pro cpu up.");
|
ESP_EARLY_LOGI(TAG, "Pro cpu up.");
|
||||||
|
|
||||||
#if !CONFIG_FREERTOS_UNICORE
|
#if !CONFIG_FREERTOS_UNICORE
|
||||||
|
if (REG_GET_BIT(EFUSE_BLK0_RDATA3_REG, EFUSE_RD_CHIP_VER_DIS_APP_CPU)) {
|
||||||
|
ESP_EARLY_LOGE(TAG, "Running on single core chip, but application is built with dual core support.");
|
||||||
|
ESP_EARLY_LOGE(TAG, "Please enable CONFIG_FREERTOS_UNICORE option in menuconfig.");
|
||||||
|
abort();
|
||||||
|
}
|
||||||
ESP_EARLY_LOGI(TAG, "Starting app cpu, entry point is %p", call_start_cpu1);
|
ESP_EARLY_LOGI(TAG, "Starting app cpu, entry point is %p", call_start_cpu1);
|
||||||
//Flush and enable icache for APP CPU
|
//Flush and enable icache for APP CPU
|
||||||
Cache_Flush(1);
|
Cache_Flush(1);
|
||||||
|
|
|
@ -607,11 +607,15 @@ static uint32_t get_power_down_flags()
|
||||||
// RTC_SLOW_MEM is Auto, keep it powered up as well.
|
// RTC_SLOW_MEM is Auto, keep it powered up as well.
|
||||||
|
|
||||||
// These labels are defined in the linker script:
|
// These labels are defined in the linker script:
|
||||||
extern int _rtc_data_start, _rtc_data_end, _rtc_bss_start, _rtc_bss_end;
|
extern int _rtc_data_start, _rtc_data_end,
|
||||||
|
_rtc_bss_start, _rtc_bss_end,
|
||||||
|
_rtc_noinit_start, _rtc_noinit_end;
|
||||||
|
|
||||||
if ((s_config.pd_options[ESP_PD_DOMAIN_RTC_SLOW_MEM] == ESP_PD_OPTION_AUTO) &&
|
if ((s_config.pd_options[ESP_PD_DOMAIN_RTC_SLOW_MEM] == ESP_PD_OPTION_AUTO) &&
|
||||||
(&_rtc_data_end > &_rtc_data_start || &_rtc_bss_end > &_rtc_bss_start ||
|
(&_rtc_data_end > &_rtc_data_start ||
|
||||||
(s_config.wakeup_triggers & RTC_ULP_TRIG_EN))) {
|
&_rtc_bss_end > &_rtc_bss_start ||
|
||||||
|
&_rtc_noinit_end > &_rtc_noinit_start ||
|
||||||
|
(s_config.wakeup_triggers & RTC_ULP_TRIG_EN))) {
|
||||||
s_config.pd_options[ESP_PD_DOMAIN_RTC_SLOW_MEM] = ESP_PD_OPTION_ON;
|
s_config.pd_options[ESP_PD_DOMAIN_RTC_SLOW_MEM] = ESP_PD_OPTION_ON;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -17,7 +17,10 @@ set(COMPONENT_SRCS "FreeRTOS-openocd.c"
|
||||||
"xtensa_overlay_os_hook.c"
|
"xtensa_overlay_os_hook.c"
|
||||||
"xtensa_vector_defaults.S"
|
"xtensa_vector_defaults.S"
|
||||||
"xtensa_vectors.S")
|
"xtensa_vectors.S")
|
||||||
set(COMPONENT_REQUIRES)
|
|
||||||
|
# app_trace is required by FreeRTOS headers only when CONFIG_SYSVIEW_ENABLE=y,
|
||||||
|
# but requirements can't depend on config options, so always require it.
|
||||||
|
set(COMPONENT_REQUIRES app_trace)
|
||||||
|
|
||||||
register_component()
|
register_component()
|
||||||
|
|
||||||
|
|
|
@ -77,9 +77,9 @@ struct crypto_cipher * fast_crypto_cipher_init(enum crypto_cipher_alg alg,
|
||||||
break;
|
break;
|
||||||
case CRYPTO_CIPHER_ALG_AES:
|
case CRYPTO_CIPHER_ALG_AES:
|
||||||
mbedtls_aes_init(&(ctx->u.aes.ctx_enc));
|
mbedtls_aes_init(&(ctx->u.aes.ctx_enc));
|
||||||
mbedtls_aes_setkey_enc(&(ctx->u.aes.ctx_enc), key, 256);
|
mbedtls_aes_setkey_enc(&(ctx->u.aes.ctx_enc), key, key_len * 8);
|
||||||
mbedtls_aes_init(&(ctx->u.aes.ctx_dec));
|
mbedtls_aes_init(&(ctx->u.aes.ctx_dec));
|
||||||
mbedtls_aes_setkey_dec(&(ctx->u.aes.ctx_dec), key, 256);
|
mbedtls_aes_setkey_dec(&(ctx->u.aes.ctx_dec), key, key_len * 8);
|
||||||
os_memcpy(ctx->u.aes.cbc, iv, AES_BLOCK_SIZE);
|
os_memcpy(ctx->u.aes.cbc, iv, AES_BLOCK_SIZE);
|
||||||
break;
|
break;
|
||||||
#ifdef CONFIG_DES3
|
#ifdef CONFIG_DES3
|
||||||
|
|
|
@ -463,7 +463,9 @@ struct tlsv1_client * tlsv1_client_init(void)
|
||||||
suites[count++] = TLS_RSA_WITH_AES_256_CBC_SHA;
|
suites[count++] = TLS_RSA_WITH_AES_256_CBC_SHA;
|
||||||
suites[count++] = TLS_RSA_WITH_AES_128_CBC_SHA256;
|
suites[count++] = TLS_RSA_WITH_AES_128_CBC_SHA256;
|
||||||
suites[count++] = TLS_RSA_WITH_AES_128_CBC_SHA;
|
suites[count++] = TLS_RSA_WITH_AES_128_CBC_SHA;
|
||||||
|
#ifdef CONFIG_DES3
|
||||||
suites[count++] = TLS_RSA_WITH_3DES_EDE_CBC_SHA;
|
suites[count++] = TLS_RSA_WITH_3DES_EDE_CBC_SHA;
|
||||||
|
#endif
|
||||||
suites[count++] = TLS_RSA_WITH_RC4_128_SHA;
|
suites[count++] = TLS_RSA_WITH_RC4_128_SHA;
|
||||||
suites[count++] = TLS_RSA_WITH_RC4_128_MD5;
|
suites[count++] = TLS_RSA_WITH_RC4_128_MD5;
|
||||||
conn->num_cipher_suites = count;
|
conn->num_cipher_suites = count;
|
||||||
|
@ -560,12 +562,16 @@ int tlsv1_client_get_cipher(struct tlsv1_client *conn, char *buf,
|
||||||
case TLS_RSA_WITH_RC4_128_SHA:
|
case TLS_RSA_WITH_RC4_128_SHA:
|
||||||
cipher = "RC4-SHA";
|
cipher = "RC4-SHA";
|
||||||
break;
|
break;
|
||||||
|
#ifdef CONFIG_DES
|
||||||
case TLS_RSA_WITH_DES_CBC_SHA:
|
case TLS_RSA_WITH_DES_CBC_SHA:
|
||||||
cipher = "DES-CBC-SHA";
|
cipher = "DES-CBC-SHA";
|
||||||
break;
|
break;
|
||||||
|
#endif
|
||||||
|
#ifdef CONFIG_DES3
|
||||||
case TLS_RSA_WITH_3DES_EDE_CBC_SHA:
|
case TLS_RSA_WITH_3DES_EDE_CBC_SHA:
|
||||||
cipher = "DES-CBC3-SHA";
|
cipher = "DES-CBC3-SHA";
|
||||||
break;
|
break;
|
||||||
|
#endif
|
||||||
case TLS_DH_anon_WITH_AES_128_CBC_SHA256:
|
case TLS_DH_anon_WITH_AES_128_CBC_SHA256:
|
||||||
cipher = "ADH-AES-128-SHA256";
|
cipher = "ADH-AES-128-SHA256";
|
||||||
break;
|
break;
|
||||||
|
@ -601,12 +607,16 @@ int tlsv1_client_get_cipher(struct tlsv1_client *conn, char *buf,
|
||||||
case TLS_RSA_WITH_RC4_128_SHA:
|
case TLS_RSA_WITH_RC4_128_SHA:
|
||||||
strcpy(cipher, "RC4-SHA");
|
strcpy(cipher, "RC4-SHA");
|
||||||
break;
|
break;
|
||||||
|
#ifdef CONFIG_DES
|
||||||
case TLS_RSA_WITH_DES_CBC_SHA:
|
case TLS_RSA_WITH_DES_CBC_SHA:
|
||||||
strcpy(cipher, "DES-CBC-SHA");
|
strcpy(cipher, "DES-CBC-SHA");
|
||||||
break;
|
break;
|
||||||
|
#endif
|
||||||
|
#ifdef CONFIG_DES3
|
||||||
case TLS_RSA_WITH_3DES_EDE_CBC_SHA:
|
case TLS_RSA_WITH_3DES_EDE_CBC_SHA:
|
||||||
strcpy(cipher, "DES-CBC3-SHA");
|
strcpy(cipher, "DES-CBC3-SHA");
|
||||||
break;
|
break;
|
||||||
|
#endif
|
||||||
case TLS_DH_anon_WITH_AES_128_CBC_SHA256:
|
case TLS_DH_anon_WITH_AES_128_CBC_SHA256:
|
||||||
strcpy(cipher, "ADH-AES-128-SHA256");
|
strcpy(cipher, "ADH-AES-128-SHA256");
|
||||||
break;
|
break;
|
||||||
|
@ -780,9 +790,13 @@ int tlsv1_client_set_cipher_list(struct tlsv1_client *conn, u8 *ciphers)
|
||||||
suites[count++] = TLS_DH_anon_WITH_AES_256_CBC_SHA;
|
suites[count++] = TLS_DH_anon_WITH_AES_256_CBC_SHA;
|
||||||
suites[count++] = TLS_DH_anon_WITH_AES_128_CBC_SHA256;
|
suites[count++] = TLS_DH_anon_WITH_AES_128_CBC_SHA256;
|
||||||
suites[count++] = TLS_DH_anon_WITH_AES_128_CBC_SHA;
|
suites[count++] = TLS_DH_anon_WITH_AES_128_CBC_SHA;
|
||||||
|
#ifdef CONFIG_DES3
|
||||||
suites[count++] = TLS_DH_anon_WITH_3DES_EDE_CBC_SHA;
|
suites[count++] = TLS_DH_anon_WITH_3DES_EDE_CBC_SHA;
|
||||||
|
#endif
|
||||||
suites[count++] = TLS_DH_anon_WITH_RC4_128_MD5;
|
suites[count++] = TLS_DH_anon_WITH_RC4_128_MD5;
|
||||||
|
#ifdef CONFIG_DES
|
||||||
suites[count++] = TLS_DH_anon_WITH_DES_CBC_SHA;
|
suites[count++] = TLS_DH_anon_WITH_DES_CBC_SHA;
|
||||||
|
#endif
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Cisco AP (at least 350 and 1200 series) local authentication
|
* Cisco AP (at least 350 and 1200 series) local authentication
|
||||||
|
|
|
@ -31,16 +31,24 @@ static const struct tls_cipher_suite tls_cipher_suites[] = {
|
||||||
TLS_HASH_MD5 },
|
TLS_HASH_MD5 },
|
||||||
{ TLS_RSA_WITH_RC4_128_SHA, TLS_KEY_X_RSA, TLS_CIPHER_RC4_128,
|
{ TLS_RSA_WITH_RC4_128_SHA, TLS_KEY_X_RSA, TLS_CIPHER_RC4_128,
|
||||||
TLS_HASH_SHA },
|
TLS_HASH_SHA },
|
||||||
|
#ifdef CONFIG_DES
|
||||||
{ TLS_RSA_WITH_DES_CBC_SHA, TLS_KEY_X_RSA, TLS_CIPHER_DES_CBC,
|
{ TLS_RSA_WITH_DES_CBC_SHA, TLS_KEY_X_RSA, TLS_CIPHER_DES_CBC,
|
||||||
TLS_HASH_SHA },
|
TLS_HASH_SHA },
|
||||||
|
#endif
|
||||||
|
#ifdef CONFIG_DES3
|
||||||
{ TLS_RSA_WITH_3DES_EDE_CBC_SHA, TLS_KEY_X_RSA,
|
{ TLS_RSA_WITH_3DES_EDE_CBC_SHA, TLS_KEY_X_RSA,
|
||||||
TLS_CIPHER_3DES_EDE_CBC, TLS_HASH_SHA },
|
TLS_CIPHER_3DES_EDE_CBC, TLS_HASH_SHA },
|
||||||
|
#endif
|
||||||
{ TLS_DH_anon_WITH_RC4_128_MD5, TLS_KEY_X_DH_anon,
|
{ TLS_DH_anon_WITH_RC4_128_MD5, TLS_KEY_X_DH_anon,
|
||||||
TLS_CIPHER_RC4_128, TLS_HASH_MD5 },
|
TLS_CIPHER_RC4_128, TLS_HASH_MD5 },
|
||||||
|
#ifdef CONFIG_DES
|
||||||
{ TLS_DH_anon_WITH_DES_CBC_SHA, TLS_KEY_X_DH_anon,
|
{ TLS_DH_anon_WITH_DES_CBC_SHA, TLS_KEY_X_DH_anon,
|
||||||
TLS_CIPHER_DES_CBC, TLS_HASH_SHA },
|
TLS_CIPHER_DES_CBC, TLS_HASH_SHA },
|
||||||
|
#endif
|
||||||
|
#ifdef CONFIG_DES3
|
||||||
{ TLS_DH_anon_WITH_3DES_EDE_CBC_SHA, TLS_KEY_X_DH_anon,
|
{ TLS_DH_anon_WITH_3DES_EDE_CBC_SHA, TLS_KEY_X_DH_anon,
|
||||||
TLS_CIPHER_3DES_EDE_CBC, TLS_HASH_SHA },
|
TLS_CIPHER_3DES_EDE_CBC, TLS_HASH_SHA },
|
||||||
|
#endif
|
||||||
{ TLS_RSA_WITH_AES_128_CBC_SHA, TLS_KEY_X_RSA, TLS_CIPHER_AES_128_CBC,
|
{ TLS_RSA_WITH_AES_128_CBC_SHA, TLS_KEY_X_RSA, TLS_CIPHER_AES_128_CBC,
|
||||||
TLS_HASH_SHA },
|
TLS_HASH_SHA },
|
||||||
{ TLS_DH_anon_WITH_AES_128_CBC_SHA, TLS_KEY_X_DH_anon,
|
{ TLS_DH_anon_WITH_AES_128_CBC_SHA, TLS_KEY_X_DH_anon,
|
||||||
|
@ -74,12 +82,16 @@ static const struct tls_cipher_data tls_ciphers[] = {
|
||||||
CRYPTO_CIPHER_ALG_RC4 },
|
CRYPTO_CIPHER_ALG_RC4 },
|
||||||
{ TLS_CIPHER_RC4_128, TLS_CIPHER_STREAM, 16, 16, 0,
|
{ TLS_CIPHER_RC4_128, TLS_CIPHER_STREAM, 16, 16, 0,
|
||||||
CRYPTO_CIPHER_ALG_RC4 },
|
CRYPTO_CIPHER_ALG_RC4 },
|
||||||
|
#ifdef CONFIG_DES
|
||||||
{ TLS_CIPHER_DES40_CBC, TLS_CIPHER_BLOCK, 5, 8, 8,
|
{ TLS_CIPHER_DES40_CBC, TLS_CIPHER_BLOCK, 5, 8, 8,
|
||||||
CRYPTO_CIPHER_ALG_DES },
|
CRYPTO_CIPHER_ALG_DES },
|
||||||
{ TLS_CIPHER_DES_CBC, TLS_CIPHER_BLOCK, 8, 8, 8,
|
{ TLS_CIPHER_DES_CBC, TLS_CIPHER_BLOCK, 8, 8, 8,
|
||||||
CRYPTO_CIPHER_ALG_DES },
|
CRYPTO_CIPHER_ALG_DES },
|
||||||
|
#endif
|
||||||
|
#ifdef CONFIG_DES3
|
||||||
{ TLS_CIPHER_3DES_EDE_CBC, TLS_CIPHER_BLOCK, 24, 24, 8,
|
{ TLS_CIPHER_3DES_EDE_CBC, TLS_CIPHER_BLOCK, 24, 24, 8,
|
||||||
CRYPTO_CIPHER_ALG_3DES },
|
CRYPTO_CIPHER_ALG_3DES },
|
||||||
|
#endif
|
||||||
{ TLS_CIPHER_AES_128_CBC, TLS_CIPHER_BLOCK, 16, 16, 16,
|
{ TLS_CIPHER_AES_128_CBC, TLS_CIPHER_BLOCK, 16, 16, 16,
|
||||||
CRYPTO_CIPHER_ALG_AES },
|
CRYPTO_CIPHER_ALG_AES },
|
||||||
{ TLS_CIPHER_AES_256_CBC, TLS_CIPHER_BLOCK, 32, 32, 16,
|
{ TLS_CIPHER_AES_256_CBC, TLS_CIPHER_BLOCK, 32, 32, 16,
|
||||||
|
|
|
@ -363,7 +363,9 @@ struct tlsv1_server * tlsv1_server_init(struct tlsv1_credentials *cred)
|
||||||
suites = conn->cipher_suites;
|
suites = conn->cipher_suites;
|
||||||
suites[count++] = TLS_RSA_WITH_AES_256_CBC_SHA;
|
suites[count++] = TLS_RSA_WITH_AES_256_CBC_SHA;
|
||||||
suites[count++] = TLS_RSA_WITH_AES_128_CBC_SHA;
|
suites[count++] = TLS_RSA_WITH_AES_128_CBC_SHA;
|
||||||
|
#ifdef CONFIG_DES3
|
||||||
suites[count++] = TLS_RSA_WITH_3DES_EDE_CBC_SHA;
|
suites[count++] = TLS_RSA_WITH_3DES_EDE_CBC_SHA;
|
||||||
|
#endif
|
||||||
suites[count++] = TLS_RSA_WITH_RC4_128_SHA;
|
suites[count++] = TLS_RSA_WITH_RC4_128_SHA;
|
||||||
suites[count++] = TLS_RSA_WITH_RC4_128_MD5;
|
suites[count++] = TLS_RSA_WITH_RC4_128_MD5;
|
||||||
conn->num_cipher_suites = count;
|
conn->num_cipher_suites = count;
|
||||||
|
@ -471,12 +473,16 @@ int tlsv1_server_get_cipher(struct tlsv1_server *conn, char *buf,
|
||||||
case TLS_RSA_WITH_RC4_128_SHA:
|
case TLS_RSA_WITH_RC4_128_SHA:
|
||||||
cipher = "RC4-SHA";
|
cipher = "RC4-SHA";
|
||||||
break;
|
break;
|
||||||
|
#ifdef CONFIG_DES
|
||||||
case TLS_RSA_WITH_DES_CBC_SHA:
|
case TLS_RSA_WITH_DES_CBC_SHA:
|
||||||
cipher = "DES-CBC-SHA";
|
cipher = "DES-CBC-SHA";
|
||||||
break;
|
break;
|
||||||
|
#endif
|
||||||
|
#ifdef CONFIG_DES3
|
||||||
case TLS_RSA_WITH_3DES_EDE_CBC_SHA:
|
case TLS_RSA_WITH_3DES_EDE_CBC_SHA:
|
||||||
cipher = "DES-CBC3-SHA";
|
cipher = "DES-CBC3-SHA";
|
||||||
break;
|
break;
|
||||||
|
#endif
|
||||||
case TLS_DH_anon_WITH_AES_128_CBC_SHA:
|
case TLS_DH_anon_WITH_AES_128_CBC_SHA:
|
||||||
cipher = "ADH-AES-128-SHA";
|
cipher = "ADH-AES-128-SHA";
|
||||||
break;
|
break;
|
||||||
|
|
|
@ -248,6 +248,11 @@ Here are couple of tips on navigation and use of ``menuconfig``:
|
||||||
* Pressing ``?`` while highlighting a configuration item displays help about that item.
|
* Pressing ``?`` while highlighting a configuration item displays help about that item.
|
||||||
* Type ``/`` to search the configuration items.
|
* Type ``/`` to search the configuration items.
|
||||||
|
|
||||||
|
.. attention::
|
||||||
|
|
||||||
|
When using ESP32-DevKitC board with ESP32-SOLO-1 module, enable single core mode (:envvar:`CONFIG_FREERTOS_UNICORE`) in menuconfig before flashing example applications.
|
||||||
|
|
||||||
|
|
||||||
.. _get-started-build-cmake:
|
.. _get-started-build-cmake:
|
||||||
|
|
||||||
Build The Project
|
Build The Project
|
||||||
|
|
|
@ -204,6 +204,11 @@ Here are couple of tips on navigation and use of ``menuconfig``:
|
||||||
If you are **Arch Linux** user, navigate to ``SDK tool configuration`` and change the name of ``Python 2 interpreter`` from ``python`` to ``python2``.
|
If you are **Arch Linux** user, navigate to ``SDK tool configuration`` and change the name of ``Python 2 interpreter`` from ``python`` to ``python2``.
|
||||||
|
|
||||||
|
|
||||||
|
.. attention::
|
||||||
|
|
||||||
|
When using ESP32-DevKitC board with ESP32-SOLO-1 module, enable single core mode (:envvar:`CONFIG_FREERTOS_UNICORE`) in menuconfig before flashing example applications.
|
||||||
|
|
||||||
|
|
||||||
.. _get-started-build-flash:
|
.. _get-started-build-flash:
|
||||||
|
|
||||||
Build and Flash
|
Build and Flash
|
||||||
|
|
|
@ -200,6 +200,10 @@ ESP-IDF 的 :idf:`examples` 目录下有一系列示例工程,都可以按照
|
||||||
|
|
||||||
如果你是 **Arch Linux** 用户,需要进入 ``SDK tool configuration`` 将 ``Python 2 interpreter`` 从 ``python`` 修改为 ``python2``。
|
如果你是 **Arch Linux** 用户,需要进入 ``SDK tool configuration`` 将 ``Python 2 interpreter`` 从 ``python`` 修改为 ``python2``。
|
||||||
|
|
||||||
|
.. attention::
|
||||||
|
|
||||||
|
如果 ESP32-DevKitC 板载的是 ESP32-SOLO-1 模组,请务必在烧写示例程序之前在 menuconfig 中使能单核模式(:envvar:`CONFIG_FREERTOS_UNICORE`)。
|
||||||
|
|
||||||
|
|
||||||
.. _get-started-build-flash:
|
.. _get-started-build-flash:
|
||||||
|
|
||||||
|
|
|
@ -109,6 +109,8 @@ function(git_describe _var _repo_dir)
|
||||||
|
|
||||||
execute_process(COMMAND
|
execute_process(COMMAND
|
||||||
"${GIT_EXECUTABLE}"
|
"${GIT_EXECUTABLE}"
|
||||||
|
"-C"
|
||||||
|
${_repo_dir}
|
||||||
describe
|
describe
|
||||||
${hash}
|
${hash}
|
||||||
${ARGN}
|
${ARGN}
|
||||||
|
|
Loading…
Reference in a new issue