Various things TODO:
- obviously, add more commands
- move validation logic into the command modules
- much more extensive command validation: I do not ever want to see a script stack due to knowable error conditions (e.g., invalid branch name)
- elmininate dependencies on static information (e.g., CWD) from utility components
- write unit tests
- generally, check for state of repositories (merging, etc.) before doing operations... also bare repos, "unborn" repos, etc.
- use rebase status of meta-repo to track rebases
git-meta rebasecontinue, abort, etc.
- progress meters for remote operations (fetch, include, open, pull, etc.)
- I've done a lot of this work on the 'working-on-progress-bars' branch, but it's dependent on the nodegit issues listed below
- I believe it may be possible to factor out some of the logic between rebase, cherry-pick, and merge.
- status doesn't show new submodules, or when new submodules have new info
- Write tests for all methods.
- Add assertions for preconditions to methods, particularly argument types.
- Eliminate calls to
exitexcept for in the main modules. Change calls to
UserErrorexceptions; document this in method contracts.
Open Issues to Watch
Progress on fetches
Currently, nodegit calls back on each object that is downloaded; this causes an amount of overhead that is prohibitive.
Nodegit keeps process running
Performance of libgit/rebase
option to skip workdir check
skip unchecked out subdirs by, e.g., making this change:
DIFF_INCLUDE_UNMODIFIED | DIFF_INCLUDE_UNREADABLE | GIT_DIFF_INCLUDE_UNTRACKED | GIT_DIFF_RECURSE_UNTRACKED_DIRS | /* needed to match baseline */
git_checkout_iteratormethod in checkout.c
git_submodule_statusis the actual bottleneck. It's slow because it calls
submodule_update_headeach time, and that method calls
git_repository_head_tree, which is slow. Could probably cache this once per run.