Commit graph

1860 commits

Author SHA1 Message Date
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
a7d2cdc2b2 Update libshared to a2475a1fa417915d6eb4dc615dc8941b4f140135
Signed-off-by: Thomas Lauf <thomas.lauf@tngtech.com>
2023-09-13 15:15:54 +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
Thomas Lauf
bddb874034 Improve configurability of CMake install directories
Make installation of man pages configurable per section
Use configuration variable TIMEW_BINDIR
Update documentation

Closes #553

Signed-off-by: Thomas Lauf <thomas.lauf@tngtech.com>
2023-08-11 15:30:26 +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
Tadeas Uhlir
ae5f8fc279 Make XDG base dirs work on all UNIX like systems
Signed-off-by: Tadeas Uhlir <tadeas.uhlir@gmail.com>
2023-07-29 15:40:41 +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
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
77fb1851a7 Fix grammar and spelling
Use notations 'Clang'/'GCC', 'Asciidoctor', 'Make', 'Git', 'CMake' when referring to the tool, not the command

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
12c089aee1 Fix wording
Signed-off-by: Thomas Lauf <thomas.lauf@tngtech.com>
2023-04-18 23:18:43 +02:00
Maxim Beder
f4085904ee Fix summary truncating long annotations
Fixed summary truncating annotations which are too long and consisting
of multibyte characters, by using UTF8 aware functions for measuring
length of the string and takeing a substring.

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
fd1e26eff3 Add configurable default range for report 'gaps'
Signed-off-by: Thomas Lauf <thomas.lauf@tngtech.com>
2023-04-02 18:50:35 +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
f9ca6c6f5e Make display of columns for week number and day of week configurable
Closes #389

Signed-off-by: Thomas Lauf <thomas.lauf@tngtech.com>
2022-12-29 18:06:07 +01:00
Thomas Lauf
3c6caff67b Show error message if command track is called with an id
Closes #439

Signed-off-by: Thomas Lauf <thomas.lauf@tngtech.com>
2022-12-29 14:24:37 +01:00
Thomas Lauf
30c69d8e78 Extract format constants
Signed-off-by: Thomas Lauf <thomas.lauf@tngtech.com>
2022-12-29 14:07:41 +01:00
Thomas Lauf
da06ff22da Add curly braces
Signed-off-by: Thomas Lauf <thomas.lauf@tngtech.com>
2022-12-29 14:07:41 +01:00
Thomas Lauf
8d14f8b5f6 Move retrieval of configuration up
Signed-off-by: Thomas Lauf <thomas.lauf@tngtech.com>
2022-12-29 14:07:41 +01:00
Thomas Lauf
6f141f6301 Make display of tags column configurable
Signed-off-by: Thomas Lauf <thomas.lauf@tngtech.com>
2022-12-29 14:07:41 +01:00
Thomas Lauf
6fdda2bacd Extract column index calculation from loop
Signed-off-by: Thomas Lauf <thomas.lauf@tngtech.com>
2022-12-29 14:07:41 +01:00
Thomas Lauf
44bd1dee31 Code style: add curly braces
Signed-off-by: Thomas Lauf <thomas.lauf@tngtech.com>
2022-12-29 14:07:41 +01:00
Thomas Lauf
4f8a04e4ca Separate colum index from column offset
Signed-off-by: Thomas Lauf <thomas.lauf@tngtech.com>
2022-12-29 14:07:41 +01:00
Thomas Lauf
fabf70faa3 Add default value to Rules::getBoolean
Signed-off-by: Thomas Lauf <thomas.lauf@tngtech.com>
2022-12-29 14:07:41 +01:00
Thomas Lauf
5265b26e86 Add configurable default range for reports
Query rule 'reports.<name>.range' for the specific default range of the report.
Use rule 'reports.range' to configure an overall default range for all reports.
Make internal reports 'summary', 'month', 'week', 'day', and 'gaps' use this feature.

Closes #477

Signed-off-by: Thomas Lauf <thomas.lauf@tngtech.com>
2022-12-29 14:07:41 +01:00
Thomas Lauf
d056719a36 Enable to enter quoted hints as config value
Signed-off-by: Thomas Lauf <thomas.lauf@tngtech.com>
2022-12-29 14:01:20 +01:00
Thomas Lauf
29a00fbcd9 Code style: add curly braces
Signed-off-by: Thomas Lauf <thomas.lauf@tngtech.com>
2022-12-29 14:01:20 +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
Stanisław Wysocki
04822aa195 Use XDG Base Directories compliant dirs on Unix for new installations
Signed-off-by: Stanisław Wysocki <garethel@protonmail.com>
2022-09-27 23:33:43 +02:00
Thomas Lauf
601050ae1f Quote filename
Signed-off-by: Thomas Lauf <thomas.lauf@tngtech.com>
2022-09-27 23:33:43 +02:00
Thomas Lauf
de17a067dc Use angle brackets in includes
Signed-off-by: Thomas Lauf <thomas.lauf@tngtech.com>
2022-09-27 23:33:43 +02:00
Thomas Lauf
23028bacb8 Remove stray entry
Signed-off-by: Thomas Lauf <thomas.lauf@tngtech.com>
2022-09-15 12:48:45 +02:00
Los Patchos
74a3d94f12 Return report exit code.
Continues to throw an exception and to return 255 if no output is produced.

Signed-off-by: Los Patchos <44246129+lospatchos@users.noreply.github.com>
2022-09-14 22:13:11 +02:00
Thomas Lauf
cbf87fc42e Clang-Tidy: Use emplace_back instead of push_back
Signed-off-by: Thomas Lauf <thomas.lauf@tngtech.com>
2022-09-14 22:12:44 +02:00
Shaun Ruffell
478e62db51 Update libshared to 47c3262fa97c4b69542040d39be6c516c38d0e57
Needed to allow database to be kept on some network filesystems
(GothenburgBitFactory/libshared#70).

fixes #465
Signed-off-by: Shaun Ruffell <sruffell@sruffell.net>
2022-08-19 12:45:17 +02:00
Thomas Lauf
69fc14af0b Make getAnnotation() const
Signed-off-by: Thomas Lauf <thomas.lauf@tngtech.com>
2022-08-17 21:24:57 +02:00
Thomas Lauf
79a02f73ca Make timew summary display open intervals with future start time
Closes #491

Signed-off-by: Thomas Lauf <thomas.lauf@tngtech.com>
2022-08-17 21:12:13 +02:00
Thomas Lauf
7c316b2ae1 Abort initialization if user does not confirm creation of new database
Fixes #489

Signed-off-by: Thomas Lauf <thomas.lauf@tngtech.com>
2022-08-17 07:46:23 +02:00
Thomas Lauf
8ba588dc24 Remove obsolete function subset (with Interval)
Signed-off-by: Thomas Lauf <thomas.lauf@tngtech.com>
2022-01-09 12:00:56 +01:00
Thomas Lauf
be5607bb8e Remove obsolete function getIntervalsByIds
- Was replaced by interval filter IntervalFilterAllWithIds in 9968b9e9

Signed-off-by: Thomas Lauf <thomas.lauf@tngtech.com>
2022-01-09 11:53:34 +01:00
Thomas Lauf
993ae85d5c Add check whether requested intervals have been found when searching by ID
- Restores behaviour which got lost when switching to the new interval filtering in 9968b9e9
- Add test for each command

Signed-off-by: Thomas Lauf <thomas.lauf@tngtech.com>
2022-01-09 11:43:56 +01:00
Thomas Lauf
6cf52faeb6 Update libshared to 072e0e0cb91c1e05e02db59ed83924b43e992938
With 179a6153, all 'end of' named dates point to the last second of the respective interval.
(see GothenburgBitFactory/taskwarrior#2519)
Redefine hint intervals in Timewarrior by 'start of' named dates, such that their ranges comprise the full interval as expected.

Signed-off-by: Thomas Lauf <thomas.lauf@tngtech.com>
2022-01-05 23:42:19 +01:00
Thomas Lauf
8ab44ba5e5 Skip empty intervals when flattening
Closes #403

Signed-off-by: Thomas Lauf <thomas.lauf@tngtech.com>
2022-01-03 23:15:16 +01:00
Thomas Lauf
4044635e08 Add complementary hint :holidays/no-holidays
Signed-off-by: Thomas Lauf <thomas.lauf@tngtech.com>
2022-01-02 15:48:03 +01:00
Thomas Lauf
1a6d5cacca Make summary output configurable via rules
- add config `reports.summary.ids` to toggle display of IDs
- add config `reports.summary.annotations` to toggle display of annotations
- add hints `:no-ids` and `:no-annotations` to override positive configs

Closes #474

Signed-off-by: Thomas Lauf <thomas.lauf@tngtech.com>
2022-01-02 15:48:03 +01:00