tog: teach test harness to count and basic tree tests
[got-portable.git] / TODO
bloba26e81152d789fe2a4c828e7043bd560a2d2e34e
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 - Teach 'got merge' to forward a branch reference if possible, instead of
12   creating a merge commit. Forwarding should only be done if linear
13   history exists from the tip of the branch being merged to the tip of
14   the work tree's branch, and if the tip of the work tree's branch is
15   itself not a merge commit (this makes "stacked" merges possible
16   by default, and prevents a 'main' branch reference from being forwarded
17   to a vendor branch in case no new commits were added to 'main' since
18   the previous vendor merge). Provide an option (-M) which forces creation
19   of a merge commit, for cases where users deem forwarding undesirable.
20 - When a clone fails the HEAD symref will always point to "refs/heads/main"
21   (ie. the internal default HEAD symref of Got). Resuming a failed clone with
22   'got fetch' is supposed to work. To make this easier, if the HEAD symref
23   points to a non-existent reference it should be updated by 'got fetch'
24   to match the HEAD symref sent by the server.
25 - If invoked in a work tree, got fetch could default to fetching the work
26   tree's current branch, instead of fetching the remote repository's HEAD.
27 - 'got patch' should be able to detect an already applied patch.
28 - 'got patch' should ideally do more passes if a patch doesn't apply and
29   try fancy things (like ignoring context and whitespaces) only in later
30   passes.
31 - investigate whether it's worth for 'got patch' to memory-map the files to
32   edit.  (c.f. Plan A / Plan B in Larry' patch.)
33 - when fetching pack files got should verify that the requested branch tips
34   are present in the pack file sent by the server, before making this pack
35   file visible to readers of the repository
37 network protocol:
38 - add http(s) transport with libtls, speaking the two Git HTTP protocols
39   (both "dumb" and "smart" need to work) via got-fetch-pack, or a new helper
40   like got-fetch-http; it is fine if HTTP remains a fetch-only protocol, and
41   works only against servers which don't require authentication for fetches;
42   anything beyond this would require a full-featured HTTP client (Git uses
43   libcurl, which we cannot use as it is not in the OpenBSD base system)
45 tog:
46 - make 'tog log' respond to key presses while 'loading...' history; loading
47   can be slow for paths in a deep history if the path has not been changed
48   very often, and 'tog log' blocks far too long in this case
49 - make it possible to view the contents of tag objects
50 - verify signed tag objects
51 - make it possible to toggle the parent to diff against in merge commits
53 gotwebd:
54 - reply with a non-200 reply code when an error occurs
55 - fix COMMITS page for paths that were deleted and/or re-added to the
56   repository. One way would be not to let the commit graph filter paths.
57   As an additional optimization we could keep a tailq or the object-id
58   set for everything traversed in the repo to have fast reverse-lookups.
59   (has the additional requirement to invalidate it when the reference
60   timestamp changes)
61 - run-time changes of addresses on interfaces are being ignored by gotwebd
62 - perhaps "bind interface" should be removed in favour of using only IP
63   addresses? This makes the address family selection explicit and avoids
64   having to monitor interfaces for dynamic address changes.
65 - add breadcrumbs to navigate in the directory tree
66 - add more action links, like "raw", "blame" and "commits" in the blob
67   page.
68 - add a "rawdiff" page to serve a diff as text/plain (or text/x-patch),
69   or maybe "rawcommit" that includes the commentary too.
70 - consider changing the URL scheme to avoid so many query parameters
72 gotd:
73 - ensure all error messages are propagated to clients before disconnecting,
74   there are probably still some cases where such error reporting is skipped
75 - client connection timeout handling needs to be checked by regress tests,
76   and is likely in need of improvement
77 - implement stress-tests to observe and fix misbehaviour under load
78 - listener's fd-reserve limit needs to be reviewed and perhaps adjusted 
79 - implement pre-commit checks (in lieu of hook scripts):
80   1. deny branch history rewriting ('got send -f') via gotd.conf [done]
81   2. allow/deny creation/deletion of references via gotd.conf
82   3. deny modifications within a given reference namespace via gotd.conf [done]
83   4. entirely hide a given reference namespace from clients via gotd.conf
84   5. allow/deny addition of binary files to a repo via gotd.conf
85   6. enforce a particular blob size limit via gotd.conf
86   7. optionally reject merge commits via gotd.conf
87 - implement post-commit-event libexec handlers (in lieu of hook scripts):
88   1. commit email notification, plaintext smtp to localhost port 25
89   2. general-purpose HTTP(s) GET/POST request as commit notification,
90      should use a format string to encode commit-info in the request URL
91   3. perform the equivalent of 'got send' to another repository
92 - keep track of available repository disk space and fail gracefully when
93   uploaded pack files would fill up the disk too much, keeping a reserve
94 - reuse packed non-delta objects directly (without re-deltification) for speed
96 gotadmin:
97 - teach 'gotadmin cleanup' to remove redundant pack files
98 - add support for generating git-fast-export streams from a repository
99 - add support for importing git-fast-export streams into a repository
100 - speed up 'gotadmin pack -a' is too slow on repositories with many pack files