All notable changes to this project will be documented in this file.
The format is based on Keep a Changelog and this project adheres to Semantic Versioning.
- Support
main
andmaster
(overridden bygit config timestamp.defaultBranch
or--default-branch
) as default branch names. In addition to them,git config init.defaultBranch
is also considered a default branch. Default branches do not get their branch name appended to the timestamp branch name.
Issuing timestamps for multiple default branches in your repository will technically work, but timestamps of both branches will depend on each other, which will most likely be a horror trip for the humans having to deal with this.
So, if you have bothmaster
andmain
active in your repository, setgit config timestamp.defaultBranch
andgit config init.defaultBranch
to the same value. --interval
specifies the time interval to wait between contacting multiple timestampers (comma-separated list passed to--servers
) to ensure a consitent order of timestamps, when timestamps are requested in the same second and even in the presence of small time skews. (Maximum time skew between timestamping client and server has been hardcoded to ±30s since the first release to raise the red flag as early as possible.)
- Fix real
pylint
warnings, suppressed spurious ones
- Now depends on
deltat
package
- Switching to
configargparse
because ofauto_env_var_prefix
- One test was using system-wide
git-timestamp
instead of local - Keyid was not always set when needed
make python-package
now builds a local Python package without attempting to upload to PyPI- Support for timestamping against multiple comma-separated servers in one go (only for automatic branch name selection)
- Document
ZEITGITTER_FAKE_TIME
. - Allow
TIMESTAMP_*
environment variables to set parameters. Parameter priority is as follows:- (Highest) Parameters on the command line
- Parameters from environment variables (
TIMESTAMP_*
) - Parameters stored in the
git
configuration files - (Lowest) Defaults provided in the program
- Intermediate releases are now named
<VERSION>.postN
, whereN
is the number of commits since the last tag (usinggit describe
). Previously, all were named<VERSION>.post0
- Allow
--version
and--help
even outside a git repository
- Do not record Zeitgitter key IDs in
~/.gitconfig
ifFORCE_GIT_REPO_CONFIG
environment variable is set; use~/.git/config
instead. This is useful for some Docker setups such asautoblockchainify
.
- Better explanation if not talking to a Zeitgitter server
- Better explanation if
~/.gnupg
or its contents pose permission problems - Explain automatic timestamping in the README
- Support server aliases. Initialized with all public Zeitgitter servers
- Document freezeing of
pygit2
git timestamp
(i.e., with implicit--branch
and--append-branch-name
options) with detached HEAD resulted in traceback; now it returns an error
- Include Ubuntu 20.04 in documentation
- Defaults to Python 3 now, as Python 2 has been sunset as of 2020-01-01
- Updated documentation to match the new/changed options and the dropping of Python 2 support (Python 2 still works, but is not supported anymore)
- This is only a status update, there are no code changes to the previous release:
- Development status updated to
stable
- Maintainer address updated
- Quick installation instructions
- 'https://' is now optional for
--server
enable = false
ingit config
is no longer treated as a True value- Some versions of
pygit2.discover_repository()
raiseKeyError
when nogit
repository is found; this is now also caught and handled
- "Signature timestamp too far off now" more user-readable
- Can now run selected tests only:
make tests TESTS=tests/20-branch.sh
etc. --append-branch-name
(default:yes
) appends the branch name on timestamp branches for non-master
branches. I.e.,git timestamp
with no additional options will timestamp togitta-timestamps
for branchmaster
andgitta-timestamps-foobar
for branchfoobar
. (Timestamping from different branches to the same timestamp branch is not for the faint of heart and has unexpected side effects, including exposing private branches and making temporary branches permanent.)
- No longer allow timestamping a timestamp branch head onto itself (would cause a merge commit with the same parent twice)
- Updated and extended ServerList.md
--quiet
option
- Handle
--server http://localhost:1234
- Tag and branch name validity checks match
zeitgitterd
's
ZEITGITTER_FAKE_TIME
now used for testing- Support optional boolean arguments: If the option (e.g.,
--enable
or--quiet
) is specified without an argument, it defaults to true; if the option is not specified, it defaults to false. This allows changing an option on the command line which has been specified differently ingit config
. Having a--no-…
counterpart would not allow consistent overriding ofgit config
options on the command line in both directions. The downside: Having such an option last before the positional arguments requires explicit specification oftrue
to avoid parsing the positional argument as the truth value.
--version
option- Support for inclusion in other packages by providing default-enabled or default-disabled operation.
- Changed client license to MIT
- Use
pygit2
information for global.gitconfig
path determination - Avoid picking
www
from servername when auto-naming the branch
- Mention Haber/Stornetta in documentation
- No more exception on initial key import
- Detect duplicate timestamp on timestamp branch root as well
- Fixed path for
make install
- Do not abort if
~/.gitconfig
does not exist when using a timestamper for the first time (working around apygit2
problem)
- Handling of HTTP errors
- Domain names in tests
- Default server set to
https://gitta.enotar.ch
; can be changed withgit config [--global] timestamper.server …
- Allow dots in tag/branch names, as long as they are not next to each other
(i.e.,
..
is not allowed)
- Added
setuptools
to dependencies - Handle HTTP POST redirects adequately
- Split into client (git-timestamp) and server (zeitgitterd).
- Persistent information about the timestampers' keys is now stored in the global git configuration (key also stored globally; more TOFU-like)
- Updated
enotar.ch
andigitt.ch
URLs tozeitgitter.net
make apt
installs dependencies on systems supportingapt
- Distributable via PyPI
- Added Python 2.x compatibility; tested with 2.7
- Automatically derive default timestamp branch name from servername (first component not named 'igitt') followd by '-timestamps'.
- Better error message when wrong
gnupg
module has been installed
- Fetch GnuPG key again if missing from keyring. This fixes unexpected behavior when running as sudo vs. natively as root.
- Work around a bug in older GnuPG installs (create
pubring.kbx
if it does not yet exist before attemptingscan_keys()
).
- Higher-level README
- Is now implemented as a package (
make install
still installs a flat file though, for simplicity)
--server
can be set in git config- Prevent actual duplicate entries created by
git timestamp --branch
- Documented that
git timestamp --help
does not work and to use-h
, as--help
is swallowed bygit
and not forwarded togit-timestamp
. - Client system tests (require Internet connectivity)
- Ability to run multiple GnuPG processes (including gpg-agents) in parallel
- Handle missing
--push-repository
(again)
- Made tests compatible with older GnuPG versions
- Made some error messages more consistent
--tag
overrides--branch
. This allows to store a default branch ingit config
, yet timestamp a tag when necessary.
Initial public release