Commit Briefs


74735c56c8 Stefan Sperling

untangle committer and author_time parameters of got_worktree_commit()

Make the semantics of the author_time parameter self-contained by treating author_time == 0 as the fallback case, instead of treating committer == NULL as the fallback case. Having the semantics of one parameter depend on the semantics of another might lead to subtle bugs introduced during potential future refactoring of this code.


f9d1117339 Stefan Sperling

cvg: add author_time argument to got_worktree_cvg_commit()

No functional change, but keeps the code in sync with got. Patch by Sven M. Hallberg


02a9e99535 Stefan Sperling

got rebase: preserve author timestamps

Adds test_rebase_preserves_author_data to regress/cmdline/rebase.sh. Patch by Sven M. Hallberg


8c25a0e66c Stefan Sperling

relax repository path permission checks in gotsys-repo-create

Since gotwebd can now be given read access to gotd repositories by making the directory readable for the _gotwebd group, these checks are too strict. Stop requiring a specific GID, and allow group rx bits to be set for group read access. As before, keep rejecting world/other rwx bits for safety. Read access to repositories is supposed to be managed by gotd.


d77bec5ef2 Stefan Sperling

fix gotsys-read-conf crash when ssh key comments are missing in gotsys.conf

Add test coverage for this issue.


8c3d2a37a5 Stefan Sperling

bump version number


4688fbd6c7 Stefan Sperling

CHANGES for 0.113


9925e94074 Stefan Sperling

fix a race in gotd notification processing

Dequeue notifications from the list only once the notify process has confirmed that the notification has been sent. This should be more robust for the following reason: In some spots were are checking the list head against NULL to see if any notifications are still pending. By removing notifications from this list too early, this check did not cover notifications which were still in flight. We could thus end up deciding to shut down the session process too early, and the last notification of several would fail. Issue observed when sending a new commit on a branch and a new tag which tags this commit to gotd in a single 'got send' operation. Only the tag notification would make it, while the other notification never arrived after an 'unexpected EOF' error in the notify process while trying to send a confirmation to the session process. ok op@


d907758cbe Stefan Sperling

fix bogus "unexpected privsep message" from gotsh during "got send"

Ensure that gotsh receives its end of the pack file data pipe before repo_write starts sending pack file status messages. Messages of type GOTD_IMSG_PACKFILE_StATUS would end up being received in gotsh's serve_write() function too early. This race is similar to the one fixed for repo_read back in commit c2274a511a7415078e2628f969b8459f69432411 Reported by martijn@, who pin-pointed the problematic case in the code, thanks!


Branches

Tags

0.101

0.100

0.99

Tree

.gitignorecommits | blame
CHANGEScommits | blame
LICENCEcommits | blame
Makefilecommits | blame
Makefile.inccommits | blame
READMEcommits | blame
TODOcommits | blame
cvg/
gitwrapper/
got/
got-dist.txtcommits | blame
got-version.mkcommits | blame
gotadmin/
gotctl/
gotd/
gotsh/
gotsys/
gotsysctl/
gotsysd/
gotwebd/
include/
lib/
libexec/
regress/
template/
tog/
util/

README

Game of Trees (Got) is a version control system which prioritizes ease
of use and simplicity over flexibility (https://gameoftrees.org)

Got is still under development; it is being developed exclusively
on OpenBSD and its target audience are OpenBSD developers. Got is
ISC-licensed and was designed with pledge(2) and unveil(2) in mind.

Got uses Git repositories to store versioned data. Git can be used
for any functionality which has not yet been implemented in Got.
It will always remain possible to work with both Got and Git on
the same repository.

A Got release tarball will install files under /usr/local by default.
This default can be changed by passing PREFIX=/some/path to make.

A build started in Got's Git repository will install files under ~/bin,
which may have to be added to $PATH and be created first:

 $ mkdir ~/bin

To compile the Got client tool suite on OpenBSD, run:

 $ make obj
 $ make
 $ make install

This will install the following commands:

 got, the command line interface
 tog, an ncurses-based interactive Git repository browser
 several helper programs from the libexec directory
 man pages (only installed if building sources from a Got release tarball)

Tests will pass only after 'make install' because they rely on installed
binaries in $PATH. Any tests written as shell scripts also depend on git(1).
Tests which use the got clone, fetch, and send commands will fail if
'ssh 127.0.0.1' does not succeed non-interactively.

Tests for HTTP protocol support rely on the HTTP::Daemon Perl module.

 $ doas pkg_add git p5-http-daemon
 $ make regress

To test with packed repositories, run:

 $ make regress GOT_TEST_PACK=1

To test with packed repositories using the ref-delta representation for
deltified objects, run:

 $ make regress GOT_TEST_PACK=ref-delta

To test with sha256 object IDs instead of sha1, run:

 $ make regress GOT_TEST_ALGO=sha256

The GOT_TEST_PACK and GOT_TEST_ALGO flags can be combined to test packed
repositories with sha256 object IDs.

Because got unveils the /tmp directory by default using the /tmp directory
for test data can hide bugs. However, /tmp remains the default because
there is no better alternative that works out of the box. In order to
store test data in a directory other than /tmp, such as ~/got-test, run:

 $ mkdir ~/got-test
 $ make regress GOT_TEST_ROOT=~/got-test

The tog automated test suite is also run with 'make regress'.
Like Got, however, individual tests or the entire suite can be run:

 $ cd regress/tog
 $ make		# run all tests
 $ ./log.sh	# run log view tests

Man page files in the Got source tree can be viewed with 'man -l':

 $ man -l got/got.1
 $ man -l got/git-repository.5
 $ man -l got/got-worktree.5
 $ man -l tog/tog.1

EXAMPLES in got.1 contains a quick-start guide for OpenBSD developers.


To compile the Got server tool suite on OpenBSD, run:

 $ make obj
 $ make server
 $ make server-install

This will install the following commands:

 gotd, the repository server program
 gotctl, the server control utility
 gotsh, the login shell for users accessing the server via the network
 gitwrapper, like mailwrapper(8) but for git-upload-pack and git-receive-pack

See the following manual page files for information about server setup:

 $ man -l gotd/gotd.8
 $ man -l gotd/gotd.conf.5
 $ man -l gotctl/gotctl.8
 $ man -l gotsh/gotsh.1
 $ man -l gitwrapper/gitwrapper.1

See regress/gotd/README for information about running the server test suite.


Game of Trees Web Daemon (gotwebd) is a FastCGI program which displays
repository data and is designed to work with httpd(8).

To compile gotwebd on OpenBSD, run:

 $ make webd
 # make webd-install

This will create the following files:
  the daemon program /usr/local/sbin/gotwebd
  css and image files in /var/www/htdocs/gotwebd
  the gotwebd init script in /etc/rc.d
  man pages (only installed if building sources from a Got release tarball)

Documentation is available in manual pages:

 $ man -l gotwebd/gotwebd.8
 $ man -l gotwebd/gotwebd.conf.5

The gotwebd test suite must be started as root in order to start and stop
the gotwebd daemon. With the gotwebd binary installed, the test suite can
be run from the top-level directory:

 $ doas make webd-regress

The test suite switches to non-root users as appropriate.


gotsysd(8) is a daemon which can be used to manage a gotd(8) server by
committing a configuration file to the special "gotsys.git" repository.

To compile gotsysd on OpenBSD, run:

 $ make sysd
 # make sysd-install

This will create the following files:
  the daemon program /usr/local/sbin/gotsysd
  the control program /usr/local/sbin/gotsysctl
  man pages (only installed if building sources from a Got release tarball)

Related documentation is available in manual pages:

 $ man -l gotsys/gotsys.conf.5
 $ man -l gotsys/gotsys.1
 $ man -l gotsysd/gotsysd.8
 $ man -l gotsysd/gotsysd.conf.5
 $ man -l gotsysctl/gotsysctl.8

See regress/gotsysd/README for information about the gotsysd test suite.


Got can be built with profiling enabled to debug performance issues.
Note that profiled builds cannot make use of pledge(2).
Profiling should only be enabled for one program at a time. Otherwise,
multiple programs will attempt to write to the 'gmon.out' file in the
current working directory.

For example, to compile got-read-pack with profiling enabled:

  $ cd libexec/got-read-pack
  $ make clean
  $ make PROFILE=1
  $ make install

Running any Got command which ends up using got-read-pack should now
produce the file 'gmon.out' in the current working directory.
The gprof2dot program can be used to generate a profile graph:

  $ doas pkg_add gprof2dot graphviz
  $ gprof ~/bin/got-read-pack gmon.out | gprof2dot | dot -T png > profile.png


Guidelines for reporting problems:

All problem/bug reports should include a reproduction recipe in form of a
shell script which starts out with an empty repository and runs a series of
Got and/or Git commands to trigger the problem, be it a crash or some other
undesirable behaviour.

The regress/cmdline directory contains plenty of example scripts.
An ideal reproduction recipe is written as an xfail ("expected failure")
regression test. For a real-world example of an xfail test, see commits
4866d0842a2b34812818685aaa31d3e0a966412d and
2b496619daecc1f25b1bc0c53e01685030dc2c74 in Got's history.

Please take this request very seriously; Ask for help with writing your
regression test before asking for your problem to be fixed. Time invested
in writing a regression test saves time wasted on back-and-forth discussion
about how the problem can be reproduced. A regression test will need to be
written in any case to verify a fix and prevent the problem from resurfacing.

It is also possible to write test cases in C. Various examples of this
exist in the regress/ directory. Most such tests are unit tests; it is
unlikely that a problem found during regular usage will require a test
to be written in C.

Please always try to find a way to trigger your problem via the command line
interface before reporting a problem without a written test case included.
If writing an automated test really turns out to be impossible, please
explain in very clear terms how the problem can be reproduced.

Mail problem reports to: gameoftrees@openbsd.org


Guidelines for submitting patches:

Mail patches to: gameoftrees@openbsd.org
Pull requests via any Git hosting sites will likely be overlooked.
Please keep the intended target audience in mind when contributing to Got.


Subscribing to the gameoftrees@openbsd.org mailing list:

The mailing list is used for patch reviews, bug reports, and user questions.
To subscribe, send mail to majordomo@openbsd.org with a message body of:
subscribe gameoftrees

See https://www.openbsd.org/mail.html for more information.