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 e1395bac..c1d5ac62 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,30 @@ 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++) + /* 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) { 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; + } } } }