Timewarrior - Commandline Time Tracking and Reporting timewarrior.net https://timewarrior.net
Find a file
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
.github Bump docker/build-push-action from 4.1.0 to 4.1.1 2023-06-20 14:14:20 +02:00
cmake Update project to C++17 2023-06-17 08:41:07 +02:00
completion Update README.md for shell completions 2023-05-29 16:42:44 +02:00
doc Update holidays/README 2023-06-17 14:19:02 +02:00
docker Add workflow for Timewarrior Docker image 2023-01-05 23:20:00 +01:00
ext Update project to C++17 2023-06-17 08:41:07 +02:00
src AtomicFile: Operate on the target of symlinks 2023-06-23 17:35:00 +02:00
test AtomicFile: Operate on the target of symlinks 2023-06-23 17:35:00 +02:00
.gitignore Clean up .gitignore files 2019-04-10 12:08:42 +02:00
.gitmodules Changed URL for libshared 2018-02-18 11:16:38 +01:00
AUTHORS Update AUTHORS, ChangLog 2023-06-08 17:33:14 +02:00
ChangeLog Update project to C++17 2023-06-17 08:41:07 +02:00
cmake.h.in Remove reference to 'TIMEW_RCDIR' 2023-06-17 14:19:02 +02:00
CMakeLists.txt Update project to C++17 2023-06-17 08:41:07 +02:00
commit.h.in Framework: Added program framework and UTF8 code 2015-12-10 09:31:48 -05:00
CONTRIBUTING.md Fix grammar and spelling 2023-06-17 14:19:02 +02:00
DCO Fix spelling 2023-01-07 18:58:42 +01:00
docker-compose.yml Update Ubuntu docker images 2023-01-14 00:16:09 +01:00
INSTALL Remove reference to 'TIMEW_RCDIR' 2023-06-17 14:19:02 +02:00
LICENSE Update copyrights 2023-04-04 22:44:44 +02:00
README.md Use term 'macOS' instead of 'OS-X' 2023-06-17 15:17:29 +02:00

Timewarrior logo

Tests Release Release date Commits since release
Twitter

Timewarrior

macOS downloads GitHub downloads Linux downloads

Thank you for taking a look at Timewarrior!

Timewarrior is a time tracking utility that offers simple stopwatch features as well as sophisticated calendar-based backfill, along with flexible reporting. It is a portable, well-supported and very active Open Source project.

Please visit timewarrior.net for extensive documentation, downloads, news and more.

Installing

Arch Debian Fedora Homebrew Ubuntu

From Package

Thanks to the community, there are binary packages available here.

Building Timewarrior

Building Timewarrior yourself requires

  • Git
  • CMake (>= 3.8)
  • Make
  • C++ compiler with full C++17 support, currently GCC 8+ or Clang 5+
  • Python 3 (for running the testsuite)
  • Asciidoctor (for creating documentation)

There are two ways to retrieve the Timewarrior sources:

Build Timewarrior, optionally run the test suite, and install it.

cmake -DCMAKE_BUILD_TYPE=release
make
[make test]
sudo make install

This copies files into the right place (default under /usr/local), and installs man pages.

Add the optional parameter -DCMAKE_INSTALL_PREFIX=/path/to/your/install/location to the cmake command if you want to install Timewarrior at a location other than /usr/local. The make install command may not require sudo depending on your choice of install location.

Community

Twitter Reddit Libera.chat Discord GitHub discussions

Timewarrior has a lively community on many places on the internet. The project has its own Twitter account, and shares community spaces on IRC and Discord with Taskwarrior.

Best place to ask questions is our discussions forum on GitHub. For other support options, take a look at timewarrior.net/support

Contributing

Contributors Milestone progress Good first issues

Contributions are greatly appreciated. Whether in the form of code patches, ideas, discussion, bug reports, encouragement or criticism, we need you!

For support options, take a look at CONTRIBUTING.md or visit timewarior.net.

Visit GitHub and participate in the future of Timewarrior.

License

Timewarrior is released under the MIT license. For details check the LICENSE file.