Hi again,
So, since last time a lot of things happened, but we still have a
problem with a review policy that just doesn't match the resources
available. It would be nice if every single change could get a thorough
review, but that requires at least two active contributors. In reality,
we have one — me — and helpful people who try to keep up, but just don't
have the time. I don't mean to show any disrespect or ingratitude, and I
know people have good reasons to be busy, but that's just the way it is.
So, I'd like to propose a change to allow the project to move forward:
- Make me the sole maintainer.
This might sound a bit drastic, but it's worth pointing out that our
main outside dependency, Dulwich, has worked this way for years. And we
just don't have a team of contributors available, sadly. We also have a
rather long list of maintainers, some of whom have simply gone silent.
For about a year, I've been primary contributor of code. I hope people
would consider me worthy of the responsibility!
We have a rather thorough test suite that should catch the most obvious
mistakes, but what about changes to the user experience? In order to
strike a compromise between getting good changes in while stopping bad
changes, I'd like propose a policy of a one-month beta prior to any
feature release. This way, people have a reasonable timeframe for
complaining, should I make a change that's too wild or invasive 🙂
Review needn't disappear completely, it'd just be another tool in the
box when needed.
Now, what's the motivation for this?
This is not only about getting reviews unstuck, but also about something
deeper: One challenge with hg-git is that the codebase is rather
unwieldy, with most complicated code contained within one very large
file, `git_handler.py`. This Python module has a class that both handles
state and storage, conversion details, interacting with both Dulwich and
Mercurial. In short: it does waaaay too much. The code is ripe for a
refactoring. We've done some of this, but more is needed.
We have outstanding pull requests that add many useful things, for example:
- Allow creating obsolescence markers on pull.
- Transfer Git metadata between Mercurial clones.
- Allow using branches or topics instead of bookmarks.
Some of these are relatively straightforward, but just add yet more
complexity to an already overcomplicated codebase. Others run into
issues with where we store files. In particular, where we store our
metadata necessitates that we lock the working directory on both pull
and push. That's not only annoying, but also a problem when transferring
it. In order to address this, and allow some form of upgrading, we need
some abstraction or decoupling.
Currently, I'd rather not start that refactor, as the effort might very
well just stall. Again.
So, if there's agreement on this, my plan is as follows:
- First, merge the least invasive changes into default, along with some
other tweaks to make pushing safer and more consistent with Mercurial.
- Cut a beta release, and await feedback.
- Start thinking about how to refactor the code.
(For one thing, this would allow me to answer a question recently posted
on our issue tracker: When is the next release?)
Now, this isn't the only way forward, of course. One possible
alternative is to significantly lower the standard of review for most
changes.
Thoughts?
- Dan