mirror of
https://github.com/martinvonz/jj.git
synced 2024-12-27 06:27:43 +00:00
94aec90bee
For large repos, it's useful to be able to use shorter change id and commit id prefixes by resolving the prefix in a limited subset of the repo (typically the same subset that you'd want to see in your default log output). For very large repos, like Google's internal one, the shortest unique prefix evaluated within the whole repo is practically useless because it's long enough that the user would want to copy and paste it anyway. Mercurial supports this with its `revisions.disambiguatewithin` config (added in https://www.mercurial-scm.org/repo/hg/rev/503f936489dd). I'd like to add the same feature to jj. Mercurial's implementation works by attempting to resolve the prefix in the whole repo and then, if the prefix was ambiguous, it resolves it in the configured subset instead. The advantage of doing it that way is that there's no extra cost of resolving the revset defining the subset if the prefix was not ambiguous within the whole repo. However, there are two important reasons to do it differently in jj: * We support very large repos using custom backends, and it's probably cheaper to resolve a prefix within the subset because it can all be cached on the client. Resolving the prefix within the whole repo requires a roundtrip to the server. * We want to be able to resolve change id prefixes, which is always done in *some* revset. That revset is currently `all()`, i.e. all visible commits. Even on local disk, it's probably cheaper to resolve a small revset first and then resolve the prefix within that than it is to build up the index of all visible change ids. We could achieve the goal by letting each revset engine respect the configured subset, but since the solution proposed above makes sense also for local-disk repos, I think it's better to do it outside of the revset engine, so all revset engines can share the code. This commit prepares for the new functionality by moving the symbol resolution out of `Index::evaluate_revset()`. |
||
---|---|---|
.. | ||
test_bad_locking.rs | ||
test_commit_builder.rs | ||
test_commit_concurrent.rs | ||
test_conflicts.rs | ||
test_diff_summary.rs | ||
test_git.rs | ||
test_index.rs | ||
test_init.rs | ||
test_load_repo.rs | ||
test_merge_trees.rs | ||
test_mut_repo.rs | ||
test_operations.rs | ||
test_refs.rs | ||
test_revset.rs | ||
test_revset_graph_iterator.rs | ||
test_rewrite.rs | ||
test_view.rs | ||
test_working_copy.rs | ||
test_working_copy_concurrent.rs | ||
test_working_copy_sparse.rs | ||
test_workspace.rs |