Skip to content

Commit c83841a

Browse files
committed
Convert the TODO to markdown
1 parent 6c33bc5 commit c83841a

2 files changed

Lines changed: 116 additions & 206 deletions

File tree

TODO.md

Lines changed: 116 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,116 @@
1+
# Ideas for things to do
2+
3+
## Bugs
4+
5+
* Find some bugs and fix them :-)
6+
7+
* Check that the capstone merge in a block outline is merged correctly.
8+
9+
* Since the ancestry of its two parents is incomplete, Git would probably try to do a recursive merge. See if we can somehow do better without filling in the whole diagram.
10+
11+
* Compare the merges that would come from continuing each side of the outline, and verify that they are identical.
12+
13+
14+
## Convenience features
15+
16+
* Add a two-argument form of the `start` and `init` commands to specify both branches in one go. (Or maybe not, if we want to leave the way open to supporting octipus merges!) Maybe `--onto=X` like rebase?
17+
18+
* Improve the handling of log messages. Incorporate log messages from manual merge conflicts into suggested log messages for the simplified commits.
19+
20+
* Allow the user to specify which conflict they would like to resolve next, and set it up for them.
21+
22+
* Allow the user to block certain merges, meaning that they should never be skipped over or merged automatically.
23+
24+
* Add a `git imerge pause` that puts an imerge on hold and resets the working copy to a reasonable state.
25+
26+
* Allow the user to specify a test that is run automatically after each automatic merge, (à la `git bisect run`).
27+
28+
29+
## New merge goals and styles
30+
31+
* Add a `--goal=sparse` option that retains all of the conflicted merges and enough intermediate history to connect them.
32+
33+
* Add an option that allows the user to resolve conflicts in larger chunks; for example, add a rebase-with-history-type merge where each branch commit is merged directly to its final location on the last master commit. (Perhaps `--conflicts={pairwise|fewest}`.)
34+
35+
* Permit switching between goal/conflict choices when they are meaningful while prohibiting nonsensical ones.
36+
37+
38+
## Collaboration
39+
40+
* Add `git imerge push REMOTE` to push the status of an in-progress merge to REMOTE.
41+
42+
* Add `git imerge pull REMOTE` to pull the current state of an incremental merge from REMOTE.
43+
44+
* Add some kind of `fetch`-like functionality that stores the result into a remote namespace.
45+
46+
* The analogue of "non-fast-forward" for incremental merges is different than for other references. A `push`/`pull` should be prohibited if:
47+
48+
* Any of the branches is updated in a non-fast-forward fashion.
49+
50+
* Any commit `I1-I2` is updated (at all!) when there is an existing commit `I1'-I2'` with `I1' >= I1` and `I2' >= I2`.
51+
52+
* As a safety precaution, the DAG of the retrieved merges should probably be checked for self-consistency (see `git imerge fsck` below).
53+
54+
* Add smarter ways to reconcile two versions of an in-progress merge that are not fast-forwards of each other. Probably this should work with two arbitrary local merges (one of which is probably from a remote).
55+
56+
57+
## Flexibility
58+
59+
* Allow commits to be skipped over when merging if, for example, they are broken (analogous to `git bisect skip`). This should be allowed when an imerge is being initialized and also after an imerge is in progress.
60+
61+
* Allow arbitrary manual merge commits to be recorded, and be smarter about how such commits are integrated.
62+
63+
* Allow recorded merges to be retroactively rejected, adjusting subsequent merges accordingly.
64+
65+
* In first version, just discard all commits that depended on it.
66+
67+
* In later versions, salvage parts of the subsequent merges when possible.
68+
69+
70+
### Relax `--first-parent` limitation
71+
72+
* Allow recursive merges: if one of the `--first-parent` merges is itself a merge, maybe it can be "exploded" into individual commits and these commits merged with the second branch as part of the first merge or as a subsidiary merge.
73+
74+
* Allow more complicated topologies in the two branches to be merged, and somehow form the appropriate Cartesian product of their commits with the correct ancestry.
75+
76+
77+
## Tools
78+
79+
* `git imerge info` -- show a detailed, human-readable summary of all intermediate commits related to this imerge.
80+
81+
* `git imerge parse M-N` -- show SHA-1 of the specified merge if it has been done. Maybe also `git imerge parse NAME/M-N`.
82+
83+
* `git imerge show M-N` -- show more, human-readable info about the specified imerge.
84+
85+
* `git imerge list -v` -- add more information to the display; for example, the goals, status, etc. of each imerge.
86+
87+
* `git imerge status` -- show the current imerge status (issue #22). If the user has been asked to do a merge, show the log messages for the two original commits again.
88+
89+
90+
## Miscellaneous
91+
92+
* Add a command `git imerge fsck` (for lack of a better name) that checks the consistency of the intermediate commits (especially their DAG).
93+
94+
* Maybe expand diagram to 2x2 characters per merge, to make room for more information (e.g., block boundaries could go in the interstices).
95+
96+
* Maybe fix PPM output.
97+
98+
* Maybe keep a record of all merge attempts, successful and failed.
99+
100+
* When running subprocesses, set a more specific value to environment variable `GIT_IMERGE` reflecting exactly what git-imerge is doing at the time (e.g., 'autofill', 'automerge', etc). See issue #17.
101+
102+
* Add better tools and hints for getting out of a screwed-up merge attempt (see, e.g., issue #29).
103+
104+
105+
## Testing
106+
107+
* Add a tool that can create two branches with conflicts at arbitrary places. (This is pretty easy--if commit I1-I2 should conflict, then make commits I1 and I2 both create a file `conflict-i1-i2` with differing contents.
108+
109+
* Test adjacent conflicts in various places.
110+
111+
* Cook up some way to make conflicts that unexpectedly appear and disappear when merged as part of a block vs. pairwise. (Maybe this can be done using commits involving file renames followed by the addition of replacements.) Test such scenarios.
112+
113+
114+
## GUI
115+
116+
* Maybe add a web interface (implementing using Python's built-in webserver) would be easiest.

TODO.rst

Lines changed: 0 additions & 206 deletions
This file was deleted.

0 commit comments

Comments
 (0)