@@ -254,3 +254,43 @@ If I run:
254254git push origin v1.0:refs/heads/master
255255
256256and v1.0 is an annotated tag, then I probably meant v1.0^{commit}, not ^{tag}.
257+
258+ ### Speeding up reachability queries: generation numbers
259+
260+ - Language: C (implementation), any (prototype)
261+ - Difficulty: medium to hard
262+ - Possible mentors: Jakub Narębski, possibly Jeff King
263+
264+ The goal is to create a helper structure to hold generation numbers
265+ (also known as node level) or other indices to speed up reachability
266+ queries, that is answering a question whether one commit (or other
267+ object) is reachable from another. This would make ` git log ` queries,
268+ such as ` git log A..B ` faster.
269+
270+ At minimum it would consist of a prototype that would help to find
271+ out how much performance improvement we can get out of this idea,
272+ and what is the cost of maintaining such information.
273+
274+ ### Speeding up reachability queries: bitmap indices
275+
276+ - Language: C (git) or Java (JGit), or any (prototype)
277+ - Difficulty: medium to hard
278+ - Possible mentors: Jakub Narębski, possibly Jeff King
279+
280+ Nowadays Git uses bitmap index (if there is one) to speed up
281+ reachability queries, which leads to faster clone and fetch;
282+ you can read more about it at < http://githubengineering.com/counting-objects/ > .
283+ It also began to be used to speed up ` git log ` queries.
284+
285+ The idea of bitmap indices came to Git via JGit, Git
286+ implementation in Java. Both Git and JGit use the same file
287+ format for storing [ compressed] bitmaps, but they use different
288+ heuristics (different rules) for selecting revisions which
289+ would have bitmap index. For each object that has associated
290+ bitmap, the bit at i-th position is on if and only if
291+ i-th object is reachable from it.
292+
293+ The goal is to examine various heuristics, and what are
294+ their advantages (better performance) and disadvantages (more
295+ disk space) for different scenarios. One could for example
296+ compare Git and JGit heuristics.
0 commit comments