mirror of
https://github.com/GothenburgBitFactory/taskwarrior.git
synced 2025-07-07 20:06:36 +02:00
add some simple replica functions
This commit is contained in:
parent
1c734851ae
commit
b01285d780
4 changed files with 70 additions and 4 deletions
|
@ -31,6 +31,24 @@ static void test_replica_undo_empty(void) {
|
||||||
tc_replica_free(rep);
|
tc_replica_free(rep);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// adding an undo point succeeds
|
||||||
|
static void test_replica_add_undo_point(void) {
|
||||||
|
TCReplica *rep = tc_replica_new_in_memory();
|
||||||
|
TEST_ASSERT_NULL(tc_replica_error(rep));
|
||||||
|
TEST_ASSERT_EQUAL(TC_RESULT_OK, tc_replica_add_undo_point(rep, true));
|
||||||
|
TEST_ASSERT_NULL(tc_replica_error(rep));
|
||||||
|
tc_replica_free(rep);
|
||||||
|
}
|
||||||
|
|
||||||
|
// rebuilding working set succeeds
|
||||||
|
static void test_replica_rebuild_working_set(void) {
|
||||||
|
TCReplica *rep = tc_replica_new_in_memory();
|
||||||
|
TEST_ASSERT_NULL(tc_replica_error(rep));
|
||||||
|
TEST_ASSERT_EQUAL(TC_RESULT_OK, tc_replica_rebuild_working_set(rep, true));
|
||||||
|
TEST_ASSERT_NULL(tc_replica_error(rep));
|
||||||
|
tc_replica_free(rep);
|
||||||
|
}
|
||||||
|
|
||||||
// When tc_replica_undo is passed NULL for undone_out, it still succeeds
|
// When tc_replica_undo is passed NULL for undone_out, it still succeeds
|
||||||
static void test_replica_undo_empty_null_undone_out(void) {
|
static void test_replica_undo_empty_null_undone_out(void) {
|
||||||
TCReplica *rep = tc_replica_new_in_memory();
|
TCReplica *rep = tc_replica_new_in_memory();
|
||||||
|
@ -190,6 +208,8 @@ int replica_tests(void) {
|
||||||
RUN_TEST(test_replica_creation);
|
RUN_TEST(test_replica_creation);
|
||||||
RUN_TEST(test_replica_creation_disk);
|
RUN_TEST(test_replica_creation_disk);
|
||||||
RUN_TEST(test_replica_undo_empty);
|
RUN_TEST(test_replica_undo_empty);
|
||||||
|
RUN_TEST(test_replica_add_undo_point);
|
||||||
|
RUN_TEST(test_replica_rebuild_working_set);
|
||||||
RUN_TEST(test_replica_undo_empty_null_undone_out);
|
RUN_TEST(test_replica_undo_empty_null_undone_out);
|
||||||
RUN_TEST(test_replica_task_creation);
|
RUN_TEST(test_replica_task_creation);
|
||||||
RUN_TEST(test_replica_all_tasks);
|
RUN_TEST(test_replica_all_tasks);
|
||||||
|
|
|
@ -271,6 +271,40 @@ pub unsafe extern "C" fn tc_replica_undo<'a>(
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Add an UndoPoint, if one has not already been added by this Replica. This occurs automatically
|
||||||
|
/// when a change is made. The `force` flag allows forcing a new UndoPoint even if one has already
|
||||||
|
/// been created by this Replica, and may be useful when a Replica instance is held for a long time
|
||||||
|
/// and used to apply more than one user-visible change.
|
||||||
|
#[no_mangle]
|
||||||
|
pub unsafe extern "C" fn tc_replica_add_undo_point(rep: *mut TCReplica, force: bool) -> TCResult {
|
||||||
|
wrap(
|
||||||
|
rep,
|
||||||
|
|rep| {
|
||||||
|
rep.add_undo_point(force)?;
|
||||||
|
Ok(TCResult::Ok)
|
||||||
|
},
|
||||||
|
TCResult::Error,
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Rebuild this replica's working set, based on whether tasks are pending or not. If `renumber`
|
||||||
|
/// is true, then existing tasks may be moved to new working-set indices; in any case, on
|
||||||
|
/// completion all pending tasks are in the working set and all non- pending tasks are not.
|
||||||
|
#[no_mangle]
|
||||||
|
pub unsafe extern "C" fn tc_replica_rebuild_working_set(
|
||||||
|
rep: *mut TCReplica,
|
||||||
|
renumber: bool,
|
||||||
|
) -> TCResult {
|
||||||
|
wrap(
|
||||||
|
rep,
|
||||||
|
|rep| {
|
||||||
|
rep.rebuild_working_set(renumber)?;
|
||||||
|
Ok(TCResult::Ok)
|
||||||
|
},
|
||||||
|
TCResult::Error,
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
/// Get the latest error for a replica, or NULL if the last operation succeeded. Subsequent calls
|
/// Get the latest error for a replica, or NULL if the last operation succeeded. Subsequent calls
|
||||||
/// to this function will return NULL. The rep pointer must not be NULL. The caller must free the
|
/// to this function will return NULL. The rep pointer must not be NULL. The caller must free the
|
||||||
/// returned string.
|
/// returned string.
|
||||||
|
@ -297,6 +331,3 @@ pub unsafe extern "C" fn tc_replica_free(rep: *mut TCReplica) {
|
||||||
}
|
}
|
||||||
drop(replica);
|
drop(replica);
|
||||||
}
|
}
|
||||||
|
|
||||||
// TODO: tc_replica_rebuild_working_set
|
|
||||||
// TODO: tc_replica_add_undo_point
|
|
||||||
|
|
|
@ -253,6 +253,21 @@ struct TCTask *tc_replica_import_task_with_uuid(struct TCReplica *rep, struct TC
|
||||||
*/
|
*/
|
||||||
TCResult tc_replica_undo(struct TCReplica *rep, int32_t *undone_out);
|
TCResult tc_replica_undo(struct TCReplica *rep, int32_t *undone_out);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Add an UndoPoint, if one has not already been added by this Replica. This occurs automatically
|
||||||
|
* when a change is made. The `force` flag allows forcing a new UndoPoint even if one has already
|
||||||
|
* been created by this Replica, and may be useful when a Replica instance is held for a long time
|
||||||
|
* and used to apply more than one user-visible change.
|
||||||
|
*/
|
||||||
|
TCResult tc_replica_add_undo_point(struct TCReplica *rep, bool force);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Rebuild this replica's working set, based on whether tasks are pending or not. If `renumber`
|
||||||
|
* is true, then existing tasks may be moved to new working-set indices; in any case, on
|
||||||
|
* completion all pending tasks are in the working set and all non- pending tasks are not.
|
||||||
|
*/
|
||||||
|
TCResult tc_replica_rebuild_working_set(struct TCReplica *rep, bool renumber);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Get the latest error for a replica, or NULL if the last operation succeeded. Subsequent calls
|
* Get the latest error for a replica, or NULL if the last operation succeeded. Subsequent calls
|
||||||
* to this function will return NULL. The rep pointer must not be NULL. The caller must free the
|
* to this function will return NULL. The rep pointer must not be NULL. The caller must free the
|
||||||
|
|
|
@ -177,7 +177,7 @@ impl Replica {
|
||||||
|
|
||||||
/// Add an UndoPoint, if one has not already been added by this Replica. This occurs
|
/// Add an UndoPoint, if one has not already been added by this Replica. This occurs
|
||||||
/// automatically when a change is made. The `force` flag allows forcing a new UndoPoint
|
/// automatically when a change is made. The `force` flag allows forcing a new UndoPoint
|
||||||
/// even if one has laready been created by this Replica, and may be useful when a Replica
|
/// even if one has already been created by this Replica, and may be useful when a Replica
|
||||||
/// instance is held for a long time and used to apply more than one user-visible change.
|
/// instance is held for a long time and used to apply more than one user-visible change.
|
||||||
pub fn add_undo_point(&mut self, force: bool) -> anyhow::Result<()> {
|
pub fn add_undo_point(&mut self, force: bool) -> anyhow::Result<()> {
|
||||||
if force || !self.added_undo_point {
|
if force || !self.added_undo_point {
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue