|
1 | | -==== |
2 | | -TODO |
3 | | -==== |
| 1 | +For a list of tickets, please visit |
| 2 | +http://byronimo.lighthouseapp.com/projects/51787-gitpython/overview |
4 | 3 |
|
5 | | -General |
6 | | -------- |
7 | | -* Classes requiring repo actually only need the git command - this should be |
8 | | - changed to limit their access level and make things a little safer. |
9 | | -* Check for correct usage of id, ref and hexsha and define their meanings, |
10 | | - currently its not so clear what id may be in cases or not - afaik its usually |
11 | | - a sha or ref unless cat-file is used where it must be a sha |
12 | | -* Overhaul command caching - currently its possible to create many instances of |
13 | | - the std-in command types, as it appears they are not killed when the repo gets |
14 | | - deleted. |
15 | | -* git command on windows may be killed using the /F options which probably is like |
16 | | - SIGKILL. This is bad as the process might be doing something, leaving the resource |
17 | | - locked and/or in an inconsistent state. Without the /F option, git does not terminate |
18 | | - itself, probably it listens to SIGINT which is not sent by TASKKILL. We can't really |
19 | | - help it, but may be at some point git handles windows signals properly. |
20 | | - |
21 | | -Object |
22 | | ------- |
23 | | -* DataStream method should read the data itself. This would be easy once you have |
24 | | - the actul loose object, but will be hard if it is in a pack. In a distant future, |
25 | | - we might be able to do that or at least implement direct object reading for loose |
26 | | - objects ( to safe a command call ). Currently object information comes from |
27 | | - persistent commands anyway, so the penalty is not that high. The data_stream |
28 | | - though is not based on persistent commands. |
29 | | - It would be good to improve things there as cat-file keeps all the data in a buffer |
30 | | - before it writes it. Hence it does not write to a stream directly, which can be |
31 | | - bad if files are large, say 1GB :). |
32 | | - |
33 | | -Config |
34 | | ------- |
35 | | -* Cache the config_reader of the repository and check whether they need to |
36 | | - update their information as the local file(s) have changed. Currently |
37 | | - we re-read all configuration data each time a config-reader is created. |
38 | | - In a way this leaves it to the user to actually keep the config-reader for |
39 | | - multiple uses, but there are cases when the user can hardly do that. |
40 | 4 |
|
41 | | -Diff |
42 | | ----- |
43 | | -* Check docs on diff-core to be sure the raw-format presented there can be read |
44 | | - properly: |
45 | | - - http://www.kernel.org/pub/software/scm/git-core/docs/gitdiffcore.html |
46 | 5 |
|
47 | | -Docs |
48 | | ----- |
49 | | -* Overhaul docs - check examples, check looks, improve existing docs |
50 | | -* Config: auto-generated module does not appear at all ( except for two lines ) |
51 | | - - its probably related to some fishy error lines: |
52 | | - :0: (ERROR/3) Unexpected indentation. |
53 | | - :0: (ERROR/3) Unexpected indentation. |
54 | | -* Rewrite doc-strings to use default sphinx fields, such as :param x: |
55 | 6 |
|
56 | | -Index |
57 | | ------ |
58 | | -* [advanced] |
59 | | - write_tree should write a tree directly, which would require ability to create |
60 | | - objects in the first place. Should be rather simple as it is |
61 | | - "tree" bytes datablock | sha1sum and zipped. |
62 | | - Currently we use some file swapping and the git command to do it which probably |
63 | | - is much slower. The thing is that properly writing a tree from an index involves |
64 | | - creating several tree objects, so in the end it might be slower. |
65 | | - Hmm, probably its okay to use the command unless we go c(++) |
66 | | -* Implement diff so that temporary indices can be used as well ( using file swapping ) |
67 | | -* Proper merge handling with index and working copy |
68 | | -* Checkout individual blobs using the index and git-checkout. Blobs can already |
69 | | - be written using their stream_data method. |
70 | | -* index.add: could be implemented in python together with hash-object, allowing |
71 | | - to keep the internal entry cache and write once everything is done. Problem |
72 | | - would be that all other git commands are unaware of the changes unless the index |
73 | | - gets written. Its worth an evaluation at least. |
74 | | - A problem going with it is that there might be shell-related limitations on non-unix |
75 | | - where the commandline grows too large. |
76 | | -* index.remove: On windows, there can be a command line length overflow |
77 | | - as we pass the paths directly as argv. This is as we use git-rm to be able |
78 | | - to remove whole directories easily. This could be implemented using |
79 | | - git-update-index if this becomes an issue, but then we had to do all the globbing |
80 | | - and directory removal ourselves |
81 | | -* commit: advance head = False - tree object should get the base commit wrapping |
82 | | - that index uses after writing itself as tree. Perhaps it would even be better |
83 | | - to have a Commit.create method from a tree or from an index. Allowing the |
84 | | - latter would be quite flexible and would fit into the system as refs have |
85 | | - create methods as well |
86 | | - |
87 | | -Refs |
88 | | ------ |
89 | | -* For performance reasons it would be good to reimplement git-update-ref to be |
90 | | - fully equivalent to what the command does. Currently it does some checking and |
91 | | - handles symbolic refs as well as normal refs, updating the reflog if required. |
92 | | - Its low-priority though as we don't set references directly that often. |
93 | | -* I have read that refs can be symbolic refs as well which would imply the need |
94 | | - to possibly dereference them. This makes sense as they originally where possibly |
95 | | - a symbolic link. This would mean References could be derived from SymbolicReference |
96 | | - officially, but it would still be bad as not all References are symbolic ones. |
97 | | -* Making the reflog available as command might be useful actually. This way historical |
98 | | - references/commits can be returned. Git internally manages this if refs are specified |
99 | | - with HEAD@{0} for instance |
100 | | -* Possibly follow symbolic links when manually parsing references by walking the |
101 | | - directory tree. Currently the packed-refs file wouldn't be followed either. |
102 | | - |
103 | | -Remote |
104 | | ------- |
105 | | -* When parsing fetch-info, the regex will not allow spaces in the target remote ref as |
106 | | - I couldn't properly parse the optional space separated note in that case. Probably |
107 | | - the regex should be improved to handle this gracefully. |
108 | | - |
109 | | -Repo |
110 | | ----- |
111 | | -* Blame: Read the blame format making assumptions about its structure, |
112 | | - currently regex are used a lot although we can deduct what will be next. |
113 | | - - Read data from a stream directly from git command |
114 | | -* Figure out how to implement a proper merge API. It should be index based, but provide |
115 | | - all necessary information to the ones willing to ask for it. The index implementation |
116 | | - actually provides this already, but some real use-cases would be great to have a least. |
117 | 7 |
|
118 | | - |
119 | | -Submodules |
120 | | ----------- |
121 | | -* add submodule support |
122 | | -* see tree |
123 | | - |
124 | | -TestSystem |
125 | | ----------- |
126 | | -* Figure out a good way to indicate the required presense of a git-daemon to host |
127 | | - a specific path. Ideally, the system would detect the missing daemon and inform |
128 | | - the user about the required command-line to start the daemon where we need it. |
129 | | - Reason for us being unable to start a daemon is that it will always fork - we can |
130 | | - only kill itself, but not its children. Even if we would a pgrep like match, we still |
131 | | - would not know whether it truly is our daemons - in that case user permissions should |
132 | | - stop us though. |
133 | | - |
134 | | -Tree |
135 | | ----- |
136 | | -* Should return submodules during iteration ( identifies as commit ) |
137 | | -* Work through test and check for test-case cleanup and completeness ( what about |
138 | | - testing whether it raises on invalid input ? ). See 6dc7799d44e1e5b9b77fd19b47309df69ec01a99 |
139 | | - |