Releases: glandium/git-cinnabar
0.3.2
This is mostly a bug and regression-fixing release.
What's new since 0.3.1?
- Fixed a performance regression when cloning big repositories on OSX.
- git configuration items with line breaks are now supported.
- Fixed a number of issues with corner cases in mercurial data (such as, but not limited to nodes with no first parent, malformed .hgtags, etc.)
- Fixed a stack overflow, a buffer overflow and a use-after free in cinnabar-helper.
- Better work with git worktrees, or when called from subdirectories.
- Updated git to 2.7.4 for cinnabar-helper.
- Properly remove all refs meant to be removed when using git version lower than 2.1.
0.3.1
This is a brown paper bag release. It turns out I managed to break the upgrade path only 10 commits before the release.
What's new since 0.3.0?
git cinnabar fsck
doesn't fail to upgrade metadata.- The
remote.$remote.cinnabar-draft
config works again. - Don't fail to clone an empty repository.
- Allow to specify mercurial configuration items in a .git/hgrc file.
0.3.0
Development had been stalled for a few months, with many improvements in the next
branch without any new release. I used some time during the new year break and after in order to straighten things up in order to create a new
release, delaying many of the originally planned changes to a future 0.4.0 release.
What's new since 0.2.2?
- Speed and memory usage were improved when doing
git push
. - Now works on Windows, at least to some extent. See details.
- Support for pre-0.1.0 git-cinnabar repositories was removed. You must first use a git-cinnabar version between 0.1.0 and 0.2.2 to upgrade its metadata.
- It is now possible to attach/graft git-cinnabar metadata to existing commits matching mercurial changesets. This allows to migrate from some other hg-to-git tool to git-cinnabar while preserving the existing git commits.
See an example of how this works with the git clone of the Gecko mercurial repository - Avoid mercurial printing its progress bar, messing up with git-cinnabar's output.
- It is now possible to fetch from an incremental mercurial bundle (without a root changeset).
- It is now possible to push to a new mercurial repository without
-f
. - By default, reject pushing a new root to a mercurial repository.
- Make the connection to a mercurial repository through ssh respect the
GIT_SSH
andGIT_SSH_COMMAND
environment variables. git cinnabar
now has a proper argument parser for all its subcommands.- A new
git cinnabar python
command allows to run python scripts or open a python shell with the right sys.path to import the cinnabar module. - All git-cinnabar metadata is now kept under a single ref (although for convenience, other refs are created, but they can be derived if necessary).
- Consequently, a new
git cinnabar rollback
command allows to roll back to previous metadata states. - git-cinnabar metadata now tracks the manifests DAG.
- A new
git cinnabar bundle
command allows to create mercurial bundles, mostly for debugging purposes, without requiring to hit a mercurial server. - Updated git to 2.7.0 for the native helper.
Development process changes
Up to before this release closing in, the master
branch was dedicated to releases, and development was happening on the next
branch, until a new release happens.
From now on, the release
branch will take dot-release fixes and new releases, while the master
branch will receive all changes that are validated through testing (currently semi-automatically tested with out-of-tree tests based on four real-life mercurial repositories, with some automated CI based on in-tree tests used in the future).
The next
branch will receive changes to be tested in CI when things will be hooked up, and may have rewritten history as a consequence of wanting passing tests on every commit on master
.
0.2.2
What's new since 0.2.1?
- Don't require
core.ignorecase
to be set to false on the repository when using a case-insensitive file system. If you did setcore.ignorecase
to false because git-cinnabar told you to, you can now set it back to true. - Raise an exception when git update-ref or git fast-import return an error. Silently ignoring those errors could lead to bad repositories after an upgrade from pre-0.1.0 versions on OS X, where the default maximum number of open files is low (256), and where git update-ref uses a lot of lock files for large transactions.
- Updated git to 2.4.0, when building with the native helper.
- When doing
git cinnabar reclone
, skip remotes withremote.$remote.skipDefaultUpdate
set to true.
0.2.1
What's new since 0.2.0?
Not much, but this felt important enough to warrant a release, even though the issue has been there since before 0.1.0:
Mercurial can be slower when cloning or pulling a list of "heads" that contain non-topological heads. On repositories like the mercurial repository, it's not so much of a big deal, taking 7s instead of 4s. But on big repositories like mozilla-central, it's taking 23 minutes instead of 2 minutes and 20s (on my machine). And that's with 100% CPU use on the server side.
The problem is that mozilla-central recently merged some old closed heads, such that it now has branch heads that aren't topological heads. Git-cinnabar, until this release, would request those branch heads, leading the server to use the slow path mentioned above. This release works around the issue.
It also fixes an issue pushing to a remote empty mercurial repository.
0.2.0
What's new since 0.1.1?
git cinnabar git2hg
andgit cinnabar hg2git
commands that allow to translate (possibly abbreviated) git sha1s to mercurial sha1s and vice-versa.- A "native" helper makes some operations faster. It is not required for git-cinnabar to work, but it can improve performance significantly. Check the Setup instructions in the README file.
- Do not store mercurial metadata when pushing to non-publishing repositories. For Mozilla developers, this means not storing that metadata when pushing to try, which is a good thing when you know each of them makes pulling slower.
This behavior can be changed if necessary.
Future releases will allow to remove metadata that was created by previous releases but that wouldn't be created with 0.2.0. - Made the discovery phase of pushes require less round trips (the phase that finds what is common between the local and remote repositories), hopefully making pushing faster.
- Improved logging, which now doesn't require fiddling with the code to get extra logging.
- Made fsck validate more things, and act on more errors.
- Fixed a few edge cases.
- Better handle files with weird names, and that git quotes in its output.
- Extensively tested on the following repositories: mozilla-central, mozilla-beta, mercurial, hg-git, cpython.
What to expect next?
- Allow to push merge commits.
- Improve memory footprint for pushes (currently, it's fairly catastrophic on big repositories ; don't try to push multiple hundreds of commits of a Mozilla-sized repository if you don't have multiple gigabytes of memory available).
- As mentioned above, allow to remove some metadata.
- And more...
If you want to follow the improvements more closely, I encourage you to switch to the next
branch. I won't push anything there that hasn't been extensively tested on the above mentioned repositories.
And as always, please report any issue you run into.
0.1.1
0.1.1 is a one-bugfix release fixing an issue where git-cinnabar could be confused if commands were started from a subdirectory of the repository. It might be the cause for corruptions leading to issues such as the impossibility
to push.
If you do encounter failures please report them. Please also paste the output of git cinnabar fsck
.
0.1.0
As you may or may not know, I have been working on this project for quite some time, but actually really started the most critical parts a couple months ago. After having looked for (and chosen) a new name for what was a prototype project, it's now time for a very first release.
So what is this all about?
Cinnabar is the common natural form in which mercury can be found on Earth. It contains mercury sulfide and its powder is used to make the vermillion pigment.
What does that have to do with git?
Hint: mercury.
Git-cinnabar is a git remote helper (you can think of that as a plugin) to interact with mercurial repositories. It allows to clone, pull and push from/to mercurial remote repositories, using git.
Numerous such tools already exist. Where git-cinnabar stands out is that it doesn't use a local mercurial clone under the hood (unlike all the existing other such tools), and is close to an order of magnitude faster to clone a repository like mozilla-central than the git-remote-hg that used to be shipped as a contrib to git.
I won't claim it is exempt of problems and limitations, which is why it's not a 1.0. I'm however confident enough with its state to make the first "official" release.
If you've been using the prototype, you can actually continue to use that clone and update it. Github conveniently keeps things working after a rename. You can update the remote url if you feel like it, though.
If you are a Gecko developer, you can take a look at a possible workflow.