From 6fb3df8166e976c408e14fc6ff13d539f839d7d1 Mon Sep 17 00:00:00 2001 From: Jeroen van der Heijden Date: Wed, 12 Nov 2025 12:38:51 +0100 Subject: [PATCH 1/2] Opimize del history --- src/ti/ttask.c | 17 ++++++++++++----- 1 file changed, 12 insertions(+), 5 deletions(-) diff --git a/src/ti/ttask.c b/src/ti/ttask.c index e1395bac..27722354 100644 --- a/src/ti/ttask.c +++ b/src/ti/ttask.c @@ -750,7 +750,6 @@ static int ttask__del_history(mp_unp_t * up) { vec_t ** commits; mp_obj_t obj, mp_scope, mp_id; - size_t i; if (mp_next(up, &obj) != MP_ARR || obj.via.sz != 2 || mp_next(up, &mp_scope) != MP_U64 || @@ -779,21 +778,29 @@ static int ttask__del_history(mp_unp_t * up) commits = &ti.commits; } - for (i = obj.via.sz; i--;) + if (obj.via.sz) { - uint32_t j = 0; + uint32_t i = obj.via.sz, j = (*commits)->n-1; + if (mp_next(up, &mp_id) != MP_U64) { log_critical("task `del_history`: invalid task data"); return -1; } - for (vec_each(*commits, ti_commit_t, commit), j++) + for (vec_each_rev(*commits, ti_commit_t, commit) j--) { if (commit->id == mp_id.via.u64) { ti_commit_destroy(vec_remove(*commits, j)); - break; + if (!(--i)) + break; + + if (mp_next(up, &mp_id) != MP_U64) + { + log_critical("task `del_history`: invalid task data"); + return -1; + } } } } From 586c98bfca8e6269eaf3b65a80b0d77932bc75fd Mon Sep 17 00:00:00 2001 From: Jeroen van der Heijden Date: Wed, 12 Nov 2025 12:45:48 +0100 Subject: [PATCH 2/2] Update CHANGELOG, version, and added comments --- CHANGELOG.md | 1 + inc/ti/version.h | 2 +- src/ti/commits.c | 1 + src/ti/ttask.c | 3 ++- 4 files changed, 5 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index fa9bb1d7..e3b9527f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,7 @@ # v1.8.3-alpha0 * Added the `America/Coyhaique` time zone, pr #432. +* Optimize `del_history` task _(use single loop)_, pr #433. # v1.8.2 diff --git a/inc/ti/version.h b/inc/ti/version.h index 5acb029b..0b0cac01 100644 --- a/inc/ti/version.h +++ b/inc/ti/version.h @@ -25,7 +25,7 @@ * "-rc0" * "" */ -#define TI_VERSION_PRE_RELEASE "-alpha0" +#define TI_VERSION_PRE_RELEASE "-alpha1" #define TI_MAINTAINER \ "Jeroen van der Heijden " diff --git a/src/ti/commits.c b/src/ti/commits.c index 2a4c60c1..1c5fc7b1 100644 --- a/src/ti/commits.c +++ b/src/ti/commits.c @@ -463,6 +463,7 @@ vec_t * ti_commits_del(vec_t ** commits, ti_commits_options_t * options) if (!vec) return NULL; + /* must push from high to low as the `del_history` depends on this order */ commits__init(*commits, options, &begin, &end); while (begin < end) { diff --git a/src/ti/ttask.c b/src/ti/ttask.c index 27722354..c1d5ac62 100644 --- a/src/ti/ttask.c +++ b/src/ti/ttask.c @@ -787,7 +787,8 @@ static int ttask__del_history(mp_unp_t * up) log_critical("task `del_history`: invalid task data"); return -1; } - + /* we can use a single loop as we're sure the commits in the list are + * ordered from high to low */ for (vec_each_rev(*commits, ti_commit_t, commit) j--) { if (commit->id == mp_id.via.u64)