Subject: Re: New command/tool: git filter-repo

From: Ævar Arnfjörð Bjarmason <[email-masked]>
Date: Fri, 08 Feb 2019 19:53:32 +0100

On Thu, Jan 31 2019, Elijah Newren wrote:

> What's the future?  (Core command of git.git?  place it in contrib?  keep it
> in a separate repo?)  I'm hoping to discuss that at the contributor summit
> today, but feedback on the list is also welcome.

Some of this I may have mentioned at the summit, but here for the list:

* I think it should be a candidate for a core (not "just contrib")
  git.git command, given that we have someone willing to maintain it &
  deal with bugs etc. I'm not worried about that given the author.

* It's unfortunate in terms of API we need to support going forward that
  this obligates us to support a fairly intricate python API going
  forward, so it's similar (but more detailed) to Git.pm (which I also
  tried to get rid of as an external API a while ago).

  However, as you correctly note that's the only way a command like this
  can be really fast, we already have the "no special API" command with
  git-filter-branch, and that's horribly slow.

  But perhaps there's ways we can in advance deal with a potential
  future breaking API change. E.g. some Pythonic way of versioning the
  API, or just prominently documenting whatever (low?) stability
  guarantees we're making.

  I imagine if we need to make breaking changes in the future that'll
  less big of a deal than in other cases, since we'd expect the API use
  to be one-off migration scripts, although maybe it'll get used for
  all-the-time exports (e.g. mirroring internal->external repos with
  filtering).

* The rest of our commands are hooked up to the i18n framework. I don't
  think this should be a blocker, but it's worth thinking about what the
  plan for this is.

  Are we going to need the equivalent of Git::I18N for Python (which
  presumably will be a run-time dependency on something needing the
  Python API that links to gettext).

  Or perhaps we could do the translated strings in C, by making the
  program you're invoking be a C command, invoking the Python part as a
  helper (which would need to re-invoke a helper if it prints its own
  messages).

Thanks for working on this!