Commit graph

710 commits

Author SHA1 Message Date
Thomas Lauf
1d3dd8f440 Make display of ids and annotations the default in summary report for new users
Initialize a new 'timewarrior.cfg' file with the respective settings

Signed-off-by: Thomas Lauf <thomas.lauf@tngtech.com>
2025-06-01 23:39:53 +02:00
Thomas Lauf
191ad1ec8a Update test zoo docker images
* Add Fedora 42
* Remove Fedora 40
* Remove Ubuntu 20.04

Signed-off-by: Thomas Lauf <thomas.lauf@tngtech.com>
2025-05-31 21:43:31 +02:00
Thomas Lauf
549cb7ba61 Update copyright
Signed-off-by: Thomas Lauf <thomas.lauf@tngtech.com>
2025-04-19 23:00:44 +02:00
Thomas Lauf
576af3fd5f Add the sub-command range to the modify command.
Additionally, this also makes the syntax of the `modify` command more flexible.
Before, the sub-command had to follow right after the `modify` command, now one can also write it with the id between command and sub-command:
```
$ timew modify @1 start 09:30
```
The `range` sub-command modifies both start and end time of the interval. It expects a range as parameter, e.g.
```
$ timew modify @3 range 08:15 - 13:37
```

Closes #627

Signed-off-by: Thomas Lauf <thomas.lauf@tngtech.com>
2025-04-19 22:59:33 +02:00
Thomas Lauf
11e5f941fd Update macOS test script
Do not install CMake, is already provided by GitHub runner
Upgrade PYTHON to 3.10.16
Print Asciidoctor version in info output
2025-02-05 23:29:30 +01:00
Thomas Lauf
e735c3a403 Set CMake minimum version to 3.10 2025-02-05 22:42:14 +01:00
Thomas Lauf
77f66969c5 Update test zoo
- Remove 'version' from docker-compose.yml
- Add Asciidoctor version to informative output
- Fix Asciidoctor install on OpenSUSE Tumbleweed
- Add Ubuntu 24.04 to test zoo
- Drop Ubuntu 18.04 from test zoo
- Add Fedora 40 to test zoo
- Add Fedora 41 to test zoo
- Drop Fedora 37 from test zoo
- Drop Fedora 38 from test zoo

Closes #648
2025-02-02 22:05:50 +01:00
Scott Mcdermott
05724a9d21 Make python tests use timezone, py3.12 deprecated tz-less utcnow()
Python upstream is trying to eliminate tz-naive date functions that
imply anything to do with a timezone, even UTC.  They have deprecated
datetime.datetime.utcnow() in Python 3.12 and thus running tests emits
many warnings for us.

We switch to instantiate datetime objects taht are intended to reflect
UTC to have a timezone, or if we instantiate naive ones and then later
convert, we do the full conversion.

After the changes, the tests still work on Python 3.9, but now also on
Python 3.12 without warnings.

See PR description for #632 for more details.

Signed-off-by: Scott Mcdermott <scott@smemsh.net>
2024-09-13 15:45:11 +02:00
Scott Mcdermott
05b72bba6f Use raw python strings for regex escapes in test summary
Python warns about "\d" and friends that aren't in raw quotes, so we add
the 'r'aw string-qualifier.

Signed-off-by: Scott Mcdermott <scott@smemsh.net>
2024-09-13 15:45:11 +02:00
Thomas Lauf
ba197c6198 Jettison centos7 and centos8 in favor of centos-stream9
CentOS 8 reached end of life on 2021-12-31 (CentOS Stream8 on 2024-05-31)
CentOS 7 reaches end of life on 2024-06-30

Signed-off-by: Thomas Lauf <thomas.lauf@tngtech.com>
2024-06-05 20:26:22 +02:00
Thomas Lauf
74562b2d47 Fix open suse Docker images
Update Asciidoctor

Signed-off-by: Thomas Lauf <thomas.lauf@tngtech.com>
2024-02-27 22:25:45 +01:00
Thomas Lauf
f24b297541 Tweak output of macOS test script
- "hide" grep statement
- remove superfluous version information for python3

Signed-off-by: Thomas Lauf <thomas.lauf@tngtech.com>
2024-01-13 18:57:49 +01:00
Thomas Lauf
bcc78a941f Update test zoo
- Unify test setup in Docker files
- Add Fedora 38 Docker image
- Add OpenSUSE Leap Docker image
- Add OpenSUSE Tumbleweed Docker image
- Drop Fedora 36 Docker image
- Drop OpenSUSE 15 Docker image

Signed-off-by: Thomas Lauf <thomas.lauf@tngtech.com>
2023-12-24 19:26:50 +01:00
Thomas Lauf
491a195cbc Fix test name
Signed-off-by: Thomas Lauf <thomas.lauf@tngtech.com>
2023-12-24 14:35:08 +01:00
Thomas Lauf
ea95ca8a70 Update copyright ranges
Signed-off-by: Thomas Lauf <thomas.lauf@tngtech.com>
2023-12-23 23:14:46 +01:00
Thomas Lauf
bf683eedbf Filter summary based on ids
Closes  #573

Signed-off-by: Thomas Lauf <thomas.lauf@tngtech.com>
2023-12-23 22:38:31 +01:00
Thomas Lauf
7b4a234f03 Unify coding style
Signed-off-by: Thomas Lauf <thomas.lauf@tngtech.com>
2023-12-23 22:38:31 +01:00
Thomas Lauf
054af9c1e9 Remove restriction for annotation display
Signed-off-by: Thomas Lauf <thomas.lauf@tngtech.com>
2023-10-31 10:07:37 +01:00
Thomas Lauf
67c5b7de6c Refactor UnitTest class
- Use UnitTest::ok in UnitTest::notok
- Extract report_* functions
- Extract common color function and constants
- Use templates to reduce code duplication
2023-10-14 19:44:27 +02:00
Thomas Lauf
6d79ea4a6d Update copyright statements
Signed-off-by: Thomas Lauf <thomas.lauf@tngtech.com>
2023-09-18 12:33:17 +02:00
Thomas Lauf
a72659f753 Move test for 'untag' from 'tag.t' to 'untag.t'
Signed-off-by: Thomas Lauf <thomas.lauf@tngtech.com>
2023-08-11 20:50:29 +02:00
Thomas Lauf
8e96ad5229 Add functions to add/remove a set of tags to/from an interval
Signed-off-by: Thomas Lauf <thomas.lauf@tngtech.com>
2023-08-11 19:25:47 +02:00
Iúri Archer
4469e9056a
Add retag command (#551)
Closes #515 

---------

Signed-off-by: cyberme0w <iuri_archer@hotmail.com>
2023-07-31 22:45:08 +02:00
Shaun Ruffell
7a75210ce1 AtomicFile: Operate on the target of symlinks
Currently, if an AtomicFile is opened on a symlink, the AtomicFile would
end up overwriting the link. This change makes AtomicFiles operate on
the targets of the links and not the links themselves.

```
$ test/AtomicFileTest
1..22
ok 1 - AtomicFileTest: Shall not exists before finalize
ok 2 - AtomicFileTest: Shall exists after finalize
ok 3 - AtomicFileTest: Shall have the correct data
ok 4 - AtomicFileTest: Neither shall exist before finalize
ok 5 - AtomicFileTest: Both shall exists after finalize
ok 6 - AtomicFileTest: First file shall contain the correct data
ok 7 - AtomicFileTest: Second file shall contain the correct data
ok 8 - AtomicFileTest: Appending does not update original before finalize
ok 9 - AtomicFileTest: Finalizing updates the appended data
ok 10 - AtomicFileTest: Read from Atomicfile
ok 11 - AtomicFileTest: Read from Atomicfile should read unfinalized data
ok 12 - AtomicFileTest: Two AtomicFiles should access same temp file (part 1)
ok 13 - AtomicFileTest: Two AtomicFiles should access same temp file (part 2)
ok 14 - AtomicFileTest: Two AtomicFiles should access same temp file (part 3)
ok 15 - AtomicFileTest: File not removed before finalize
ok 16 - AtomicFileTest: File is removed after finalize
ok 17 - AtomicFileTest: writes to symlinks end up in target
ok 18 - AtomicFileTest: shall maintain symlink
ok 19 - AtomicFileTest: AtomicFile::write_raw throws on error # skip
ok 20 - AtomicFileTest: AtomicFile::finalize_all() throws on error # skip
ok 21 - AtomicFileTest: AtomicFile::reset clears failure state # skip
ok 22 - AtomicFileTest: AtomicFile::append throws on error # skip
ok 23 - AtomicFileTest: AtomicFile::append did not partially fill the file. # skip
ok 24 - AtomicFileTest: AtomicFile::append failures prevent finalization # skip
```

Fixes #546

Signed-off-by: Shaun Ruffell <sruffell@sruffell.net>
2023-06-23 17:35:00 +02:00
Shaun Ruffell
c67a4715f8 AtomicFileTest: Fix test output to be test/problems --details compliant
Before this change, when AtomicFileTest had errors, there was no match for details:
```
$ test/problems --details test/all.log
Traceback (most recent call last):
  File "test/problems", line 145, in <module>
    details_errors[filename] += " - " + detail.match(line).group(1) + "\n"
AttributeError: 'NoneType' object has no attribute 'group'
```

Now the details are pulled out properly:
```
$ test/problems --details test/all.log
Failed:
AtomicFile.t (2):
 - AtomicFile::write_raw throws on error
 - AtomicFile::finalize_all() throws on error

Unexpected successes:

Skipped:

Expected failures:
```

Why these tests are failing on this particular host is a matter for another time...

Signed-off-by: Shaun Ruffell <sruffell@sruffell.net>
2023-06-23 17:35:00 +02:00
Thomas Lauf
26f2791d6b Set correct application name in test suite run script
Signed-off-by: Thomas Lauf <thomas.lauf@tngtech.com>
2023-06-17 14:19:02 +02:00
Thomas Lauf
c6aa8815a2 Make CMake/Make signal start of test suite run
Signed-off-by: Thomas Lauf <thomas.lauf@tngtech.com>
2023-06-17 14:19:02 +02:00
Thomas Lauf
34bba44d38 Replace CLI::getFilter by CLI::getRange and CLI::getTags
- Add CLI::getRange
- Make CLI::getTags return a set instead of a vector. This has the side effect that the tags are sorted now...
- Replace variable 'filter' by 'range' and 'tags'. Variable 'filter' was just a wrapper, better use the components directly
2023-06-17 14:19:02 +02:00
Thomas Lauf
f346142560 Fix output redirection
Signed-off-by: Thomas Lauf <thomas.lauf@tngtech.com>
2023-06-17 14:19:02 +02:00
Thomas Lauf
9299fd3e39 Apply Clang-Tidy
Use emplace_back instead of push_back
Use 'nullptr'
Use function 'empty ()' instead of 'size () == 0'
Mark single-argument constructors as 'explicit'
Call static function correctly
2023-06-17 14:19:02 +02:00
Thomas Lauf
2535c2c399 Cleanup includes
- Remove unused includes
- Use '<..>' style consistently
- Strip any paths from include
- Replace deprecated C++ headers
- Sort includes according to LLVM rules
  https://llvm.org/docs/CodingStandards.html#include-style

Signed-off-by: Thomas Lauf <thomas.lauf@tngtech.com>
2023-06-17 14:19:02 +02:00
Thomas Lauf
3008e458e9 Update project to C++17
- Bump CMake to minimum version 3.8
- Set C++ standard to 17
- Remove CMAKE_LEGACY_CYGWIN_WIN32 compatibility mode
- Remove C++11 stuff
- Update documentation

Signed-off-by: Thomas Lauf <thomas.lauf@tngtech.com>
2023-06-17 08:41:07 +02:00
Thomas Lauf
20a8a4a4cc Cleanup CMake files
- Replace tabs with spaces
- Use lowercase for CMake commands
- Unify alignment
- Remove superfluous empty line
- Add space after CMake command

Signed-off-by: Thomas Lauf <thomas.lauf@tngtech.com>
2023-05-26 09:53:03 +02:00
Thomas Lauf
5b87c962e7 Polish up bash scripts
- Use '-n' instead of '! -z'
- Quote all the things...
- Enclose variable references in '{}'

Signed-off-by: Thomas Lauf <thomas.lauf@tngtech.com>
2023-04-18 23:18:43 +02:00
Thomas Lauf
14d364bff7 Drop unused assignments
Signed-off-by: Thomas Lauf <thomas.lauf@tngtech.com>
2023-04-17 08:17:29 +02:00
Thomas Lauf
81225722aa Remove stuff for Python < 3.7
Signed-off-by: Thomas Lauf <thomas.lauf@tngtech.com>
2023-04-17 08:17:29 +02:00
Thomas Lauf
2a73e3bc77 Add quotes to soothe spell checker
Signed-off-by: Thomas Lauf <thomas.lauf@tngtech.com>
2023-04-17 08:17:29 +02:00
Thomas Lauf
a1d418a686 Fix grammar and spelling
Signed-off-by: Thomas Lauf <thomas.lauf@tngtech.com>
2023-04-17 08:17:29 +02:00
Thomas Lauf
70a1082224 Use local man pages in tests
We need to set the value of `MANPATH` to the local man pages when running helper function 'run_cmd_wait_nofail'.
Use the already set Timewarrior environment for this.

Signed-off-by: Thomas Lauf <thomas.lauf@tngtech.com>
2023-04-14 13:50:35 +02:00
Maxim Beder
68d4978b7d Add test for summary truncating long anotations
When calling summary command with :annotations hint, if the annotation
is longer than a certain length, it's going to be truncated. The issue
is that the length and truncation are done on a raw string without
considering UTF8 multibyte characters, so there are edge cases when an
annotation is truncated in the middle of a character creating an invalid
UTF8 string.

Added a test case for this scenario.

Signed-off-by: Maxim Beder <macsim.beder@gmail.com>
2023-04-14 12:23:16 +02:00
Thomas Lauf
082708a7ca Fix typos and wording
Signed-off-by: Thomas Lauf <thomas.lauf@tngtech.com>
2023-04-04 22:44:44 +02:00
Thomas Lauf
14bed139f6 Update copyrights
Signed-off-by: Thomas Lauf <thomas.lauf@tngtech.com>
2023-04-04 22:44:44 +02:00
Thomas Lauf
c6130157c6 Specify ranges without ':' in configuration
Signed-off-by: Thomas Lauf <thomas.lauf@tngtech.com>
2023-04-02 18:50:35 +02:00
Thomas Lauf
016d3a99e7 Update Ubuntu docker images
- Remove no longer supported version
- Add current version

Signed-off-by: Thomas Lauf <thomas.lauf@tngtech.com>
2023-01-14 00:16:09 +01:00
Thomas Lauf
ba0514543f Update Fedora docker images
- Remove no longer supported versions
- Add current versions

Signed-off-by: Thomas Lauf <thomas.lauf@tngtech.com>
2023-01-13 22:41:13 +01:00
Thomas Lauf
55ad661e0d Add tests for configurable report range, update man page
Signed-off-by: Thomas Lauf <thomas.lauf@tngtech.com>
2022-12-31 22:22:49 +01:00
Thomas Lauf
4a0ab1236d Add --details option
- extracts and prints affected tests

Signed-off-by: Thomas Lauf <thomas.lauf@tngtech.com>
2022-12-29 13:56:21 +01:00
Scott Mcdermott
bf26176243 Allow specification of intervals to the export command
This patch checks if intervals are given on cli to 'timew export', and
if so will filter only those numbered IDs out from the db.  This lets
the user that already knows the interval(s) they want to know about, to
ask for only those, without parsing the whole thing (similar to how we
can do this for taskwarrior IDs).

If both intervals and other filters -- time range or tags -- are given,
this is considered an error.  There would seem to be little use to AND
or OR tags/ranges with IDs because anyone that knew IDs to request would
already know those IDs met their requirement.

Fixes #510

Code additions from @lauft PR notes (thanks!):

- factor out 'filtering' so we can do only one call to getTracked()
- simplify (tag || range) to .empty(), which already checks both
- error message phrasing

Signed-off-by: Scott Mcdermott <scott@smemsh.net>
2022-12-28 22:13:35 +01:00
Thomas Lauf
25ff673521 Beautify tests
- Replace unused return variables with '_'
- Use 'expected' and 'actual' for test values
- Add whitespace

Signed-off-by: Thomas Lauf <thomas.lauf@tngtech.com>
2022-11-25 16:54:10 +01:00
Thomas Lauf
3d3faafcba Compare output of 'timew help start' to 'man timew-start'
The command timew help should redirect to the man tool.
Instead of testing that the header of the output matches some reg ex,
test that the outputs of `timew help` and `man` are equal

Signed-off-by: Thomas Lauf <thomas.lauf@tngtech.com>
2022-11-25 16:52:39 +01:00