portable: include sha{1,2} portably
[got-portable.git] / TODO
blob31443a1e068d94872c495a4437cb1990ba777c65
1 got:
2 - Teach 'got merge' to merge changes into an arbitrary subdirectory
3   of the work tree. This would be nice for merging vendor branches.
4   Say you have a branch 'llvm-12' which intially contains a 12.0
5   release tree as published by the LLVM project, added to the repository
6   with a command such as 'got import -b llvm-12'. On the main branch we
7   would want to merge files from the llvm-12 branch into /usr/src/gnu/llvm
8   instead of the root directory checked out at /usr/src.
9   The next LLVM release 12.1 would later be committed onto the llvm-12
10   branch and then merged into main at /usr/src/gnu/llvm in the same way.
11 - When a clone fails the HEAD symref will always point to "refs/heads/main"
12   (ie. the internal default HEAD symref of Got). Resuming a failed clone with
13   'got fetch' is supposed to work. To make this easier, if the HEAD symref
14   points to a non-existent reference it should be updated by 'got fetch'
15   to match the HEAD symref sent by the server.
16 - If invoked in a work tree, got fetch could default to fetching the work
17   tree's current branch, instead of fetching the remote repository's HEAD.
18 - 'got patch' should be able to detect an already applied patch.
19 - 'got patch' should ideally do more passes if a patch doesn't apply and
20   try fancy things (like ignoring context and whitespaces) only in later
21   passes.
22 - investigate whether it's worth for 'got patch' to memory-map the files to
23   edit.  (c.f. Plan A / Plan B in Larry' patch.)
24 - when fetching pack files got should verify that the requested branch tips
25   are present in the pack file sent by the server, before making this pack
26   file visible to readers of the repository
27 - enforce that log messages are encoded in either ASCII or UTF-8; this
28   mostly matters for -portable since OpenBSD doesn't provide other locales
29 - by default, deny rebasing of commits that exist in refs/remotes or refs/tags
31 tog:
32 - make 'tog log' respond to key presses while 'loading...' history; loading
33   can be slow for paths in a deep history if the path has not been changed
34   very often, and 'tog log' blocks far too long in this case
35 - make it possible to view the contents of tag objects
36 - verify signed tag objects
37 - make it possible to toggle the parent to diff against in merge commits
39 gotwebd:
40 - fix COMMITS page for paths that were deleted and/or re-added to the
41   repository. One way would be not to let the commit graph filter paths.
42   As an additional optimization we could keep a tailq or the object-id
43   set for everything traversed in the repo to have fast reverse-lookups.
44   (has the additional requirement to invalidate it when the reference
45   timestamp changes)
46 - reply with 404 on some kind of errors ('reference not found' for sure,
47   maybe also tree entry not found?)
48 - support category grouping a-la gitweb/cgit with the gitweb.category
49   config option or via the "category" file in the root of the repo.
50 - consider changing the URL scheme to avoid so many query parameters
52 gotd:
53 - ensure all error messages are propagated to clients before disconnecting,
54   there are probably still some cases where such error reporting is skipped
55 - client connection timeout handling needs to be checked by regress tests,
56   and is likely in need of improvement
57 - implement stress-tests to observe and fix misbehaviour under load
58 - listener's fd-reserve limit needs to be reviewed and perhaps adjusted
59 - implement pre-commit checks (in lieu of hook scripts):
60   1. deny branch history rewriting ('got send -f') via gotd.conf [done]
61   2. allow/deny creation/deletion of references via gotd.conf
62   3. deny modifications within a given reference namespace via gotd.conf [done]
63   4. entirely hide a given reference namespace from clients via gotd.conf
64   5. allow/deny addition of binary files to a repo via gotd.conf
65   6. enforce a particular blob size limit via gotd.conf
66   7. optionally reject merge commits via gotd.conf
67 - implement post-commit-event libexec handlers (in lieu of hook scripts):
68   1. commit email notification, plaintext smtp to localhost port 25 [done]
69   2. general-purpose HTTP(s) GET/POST request as commit notification [done]
70   3. perform the equivalent of 'got send' to another repository
71 - keep track of available repository disk space and fail gracefully when
72   uploaded pack files would fill up the disk too much, keeping a reserve
73 - reuse packed non-delta objects directly (without re-deltification) for speed
75 gotadmin:
76 - add support for generating git-fast-export streams from a repository
77 - add support for importing git-fast-export streams into a repository
78 - speed up 'gotadmin pack -a' is too slow on repositories with many pack files