Mercurial > hg
view relnotes/next @ 44477:ad718271a9eb
git: skeleton of a new extension to _directly_ operate on git repos
This is based in part of work I did years ago in hgit, but it's mostly
new code since I'm using pygit2 instead of dulwich and the hg storage
interfaces have improved. Some cleanup of old hgit code by Pulkit,
which I greatly appreciate.
test-git-interop.t does not cover a whole lot of cases, but it
passes. It includes status, diff, making a new commit, and `hg annotate`
working on the git repository.
This is _not_ (yet) production quality code: this is an
experiment. Known technical debt lurking in this implementation:
* Writing bookmarks just totally ignores transactions.
* The way progress is threaded down into the gitstore is awful.
* Ideally we'd find a way to incrementally reindex DAGs. I'm not sure
how to do that efficiently, so we might need a "known only fast-forwards"
mode on the DAG indexer for use on `hg commit` and friends.
* We don't even _try_ to do anything reasonable for `hg pull` or `hg push`.
* Mercurial need an interface for the changelog type.
Tests currently require git 2.24 as far as I'm aware: `git status` has
some changed output that I didn't try and handle in a compatible way.
This patch has produced some interesting cleanups, most recently on
the manifest type. I expect continuing down this road will produce
other meritorious cleanups throughout our code.
Differential Revision: https://phab.mercurial-scm.org/D6734
author | Augie Fackler <augie@google.com> |
---|---|
date | Tue, 11 Feb 2020 00:44:59 -0500 |
parents | 6a34e438461b |
children | bd7b2c8d06cc |
line wrap: on
line source
== New Features == * `hg purge`/`hg clean` can now delete ignored files instead of untracked files, with the new -i flag. * `hg log` now defaults to using an '%' symbol for commits involved in unresolved merge conflicts. That includes unresolved conflicts caused by e.g. `hg update --merge` and `hg graft`. '@' still takes precedence, so what used to be marked '@' still is. * New `conflictlocal()` and `conflictother()` revsets return the commits that are being merged, when there are conflicts. Also works for conflicts caused by e.g. `hg graft`. * `hg copy --forget` can be used to unmark a file as copied. * The `format.revlog-compression` configuration entry now accept a list. The first available option will be used. for example setting:: [format] revlog-compression=zstd, zlib Will use `zstd` compression for new repositories is available, and will simply fall back to `zlib` if not. * `hg debugmergestate` output is now templated, which may be useful e.g. for IDEs that want to help the user resolve merge conflicts. == New Experimental Features == * `hg copy` now supports a `--at-rev` argument to mark files as copied in the specified commit. It only works with `--after` for now (i.e., it's only useful for marking files copied using non-hg `cp` as copied). * Use `hg copy --forget --at-rev REV` to unmark already committed copies. == Bug Fixes == * Fix server exception when concurrent pushes delete the same bookmark * Prevent pushes of divergent bookmarks (foo@remote) * The push error "remote repository changed while pushing - please try again" now only happens when a concurrent push changed related heads (instead of when a concurrent pushed any revision). == Backwards Compatibility Changes == * When `hg rebase` pauses for merge conflict resolution, the working copy will no longer have the rebased node as a second parent. You can use the new `conflictparents()` revset for finding the other parent during a conflict. * `hg recover` does not verify the validity of the whole repository anymore. You can pass `--verify` or call `hg verify` if necessary. * `hg debugmergestate` output format changed. Let us know if that is causing you problems and we'll roll it back. * Resolved merge conflicts are now cleared by `hg commit` even if the working copy has no changes. == Internal API Changes == * The deprecated `ui.progress()` has now been deleted. Please use `ui.makeprogress()` instead. * `hg.merge()` now takes a `ctx` instead of the previous `repo` and `node` arguments. * `hg.merge()` has lost its `abort` argument. Please call `hg.abortmerge()` directly instead. * `hg.merge()` has lost its `mergeforce` argument. It should have only ever been called with the same value as the `force` argument. * The `*others` argument of `cmdutil.check_incompatible_arguments()` changed from being varargs argument to being a single collection.