git/list[1] front-page[2] threads[3] people[4] search[5] about
 

Re: [PATCH 00/11] Start retiring .git/remotes/ and .git/branches/ for good

From
Ævar Arnfjörð Bjarmason <avarab@gmail.com>
Date
May 16, 2017, 08:05 UTC
Message-ID
<CACBZZX5EXxsB3TWiiB0TH-ZpOsadcAPAe4chrQBe7py9VAMY+Q@mail.gmail.com>
In-Reply-To
<xmqq7f1h63h9.fsf@gitster.mtv.corp.google.com>
On Tue, May 16, 2017 at 2:37 AM, Junio C Hamano <gitster@pobox.com> wrote:
Show 40 quoted lines
> Johannes Schindelin <Johannes.Schindelin@gmx.de> writes:
>
>> On Fri, 12 May 2017, Junio C Hamano wrote:
>>
>>> Is it really hurting us having to support these old information
>>> sources we treat as read-only?
>>
>> Well, you frequently complain about my patches, claiming that they place
>> unnecessary maintenance burden on you.
>>
>> I would say that the .git/remotes/ and .git/branches/ code is a lot more
>> maintenance burden than most of my patches.
>
> I wasn't going to respond to this thread anymore, because I didn't
> feel like the discussion was going anywhere, and you already said
> you won't listen to me.
>
> You seem to be confused between "maintenance burden" and "burden on
> the maintainer". I felt that it needs to be corrected for other
> people reading this exchange from the sideline.
>
>     When we worked to add feature X in the remotes subsystem, we
>     were slowed down because we had to adjust the code also for
>     .git/branches.  The same story for feature Y.  The same for
>     feature Z.  This is getting ridiculous/cumbersome, especially
>     given that we know .git/branches is not used by anybody.
>
> That's a maintenance burden, and the "we" refers to the Git
> development community as a whole, not the maintainer.  It is not a
> burden on _me_.
>
> Also important to notice is I do not know what X, Y and Z are with
> respect to .git/branches feature.  That is where "Is it really
> hurting?" question comes from, but it hasn't been answered so far.
>
> What's burden on the maintainer is having to engage in a discussion
> like this one, to reject an attempt to remove something that is not
> demonstratably a maintenance burden, because the maintainer has to
> act as the last-resort champion for the end-users, when others on
> the list do not speak up X-<.
This and many other discussions on-list basically come down to:
1. Someone wants to change X.
2. This would have user impact Y.
3. We have no way to quantify Y.
4. X doesn't happen out of fear of unquantifiable Y.

It seems to me that a way out of this that would make everyone happy is to go through some deprecation cycle through several releases with X where:

1. We detect that you're using X, and warn that it's a candidate for deprecation
2. In another release, we turn off the feature by default, threatening
that it's going to go away forever unless someone pipes up (this is
what we did with rsync:// accidentally)
3. In another release, If you turned on the feature after #2 we emit a
noisy warning every time it's used, saying "it'll really be removed in
$release+1"

Another open source community I'm involved in, the Perl language, used to have the same issue. Every time something like adding/changing/removing X came up we'd have the same discussion all over again from scratch.

A lot of that was solved by having some written down guide for how deprecations are done: http://perldoc.perl.org/perlpolicy.html#BACKWARD-COMPATIBILITY-AND-DEPRECATION

Of course that's not a perfect solution, nothing is, but it makes it much easier to get patches like this on some sort of well-defined track towards deprecation.

> Yes, I know that proving that something we currently support is not
> used by anybody is HARD [*1*].  That is why removal is costly.  And
> that in turn is why we need to be careful when adding new things and
> making changes in general.

From my reading of this series we already have a solution to that. We start warning and then we find out who's using it.

To the extent that that causes issues I think it's better to peel that discussion off this specific topic, i.e. the pain that causes users is not specific to this proposed update, but has to do with how we want to do deprecations in general, and the trade-offs involved with doing that.

Show 5 quoted lines
> [Footnotes]
>
> *1* Removal of "rsync" transport we did recently was a happy but
>     rare case.  It has been broken for a few years without anybody
>     complaining.
Previous: Junio C HamanoNext: Junio C Hamano
Message 51 of 62 in “Start retiring .git/remotes/ and .git/branches/ for good”
  1. 00/11 Start retiring .git/remotes/ and .git/branches/ for goodJohannes Schindelin, May 11, 2017
  2. 05/11 Revert "Revert "Don't create the $GIT_DIR/branches directory on init""Johannes Schindelin, May 11, 2017
  3. Stefan BellerMay 11, 2017
  4. 04/11 remote: warn loud and clear when .git/remotes/ is *still* usedJohannes Schindelin, May 11, 2017
  5. 01/11 git-parse-remote: fix highly misleading man pageJohannes Schindelin, May 11, 2017
  6. Stefan BellerMay 11, 2017
  7. Johannes SchindelinMay 11, 2017
  8. 0/5 Remove now-unused git-parse-remoteÆvar Arnfjörð Bjarmason, Nov 11, 2020
  9. Jeff KingNov 11, 2020
  10. Junio C HamanoNov 11, 2020
  11. Ævar Arnfjörð BjarmasonNov 12, 2020
  12. Jeff KingNov 12, 2020
  13. How do I "git fetch" with a custom <refspec> but a default remote?Ævar Arnfjörð Bjarmason, Nov 12, 2020
  14. Jeff KingNov 12, 2020
  15. Chris TorekNov 12, 2020
  16. Jeff KingNov 12, 2020
  17. Junio C HamanoNov 12, 2020
  18. Ævar Arnfjörð BjarmasonNov 14, 2020
  19. 1/5 parse-remote: remove unused GIT_DIR variableÆvar Arnfjörð Bjarmason, Nov 11, 2020
  20. 2/5 parse-remote: remove long-dead rebase codeÆvar Arnfjörð Bjarmason, Nov 11, 2020
  21. 4/5 parse-remote: move used code to git-submodule.shÆvar Arnfjörð Bjarmason, Nov 11, 2020
  22. 5/5 parse-remote: remove this now-unused libraryÆvar Arnfjörð Bjarmason, Nov 11, 2020
  23. Junio C HamanoNov 11, 2020
  24. 0/2 Retire git-parse-remoteJunio C Hamano, Nov 12, 2020
  25. 1/2 parse-remote: move used code to git-submodule.shJunio C Hamano, Nov 12, 2020
  26. 2/2 parse-remote: remove this now-unused libraryJunio C Hamano, Nov 12, 2020
  27. Jeff KingNov 12, 2020
  28. Junio C HamanoNov 12, 2020
  29. Ævar Arnfjörð BjarmasonNov 13, 2020
  30. 0/3 submodule sh->C & retire parse-remoteÆvar Arnfjörð Bjarmason, Nov 14, 2020
  31. 1/3 submodule: use "fetch" logic instead of custom remote discoveryÆvar Arnfjörð Bjarmason, Nov 14, 2020
  32. Junio C HamanoNov 16, 2020
  33. 3/3 parse-remote: remove this now-unused libraryÆvar Arnfjörð Bjarmason, Nov 14, 2020
  34. Junio C HamanoNov 16, 2020
  35. Ævar Arnfjörð BjarmasonNov 17, 2020
  36. 2/3 submodule: remove sh function in favor of helperÆvar Arnfjörð Bjarmason, Nov 14, 2020
  37. 3/5 parse-remote: remove long-dead git-pull.sh codeÆvar Arnfjörð Bjarmason, Nov 11, 2020
  38. 03/11 remote: warn loud and clear when .git/branches/ is *still* usedJohannes Schindelin, May 11, 2017
  39. 09/11 PREVIEW: t5515: remove .git/remotes/ and .git/branches/ testsJohannes Schindelin, May 11, 2017
  40. 02/11 Documentation: really deprecate .git/remotes/ and .git/branches/Johannes Schindelin, May 11, 2017
  41. 10/11 PREVIEW: t0060: stop testing support for .git/remotes/ and .git/branches/Johannes Schindelin, May 11, 2017
  42. 11/11 PREVIEW: remove support for .git/remotes/ and .git/branches/Johannes Schindelin, May 11, 2017
  43. Stefan BellerMay 11, 2017
  44. Johannes SchindelinMay 11, 2017
  45. 06/11 PREVIEW: t5510: convert .git/remotes/ test to use a regular remoteJohannes Schindelin, May 11, 2017
  46. 07/11 PREVIEW: t5516: stop testing .git/branches/ functionalityJohannes Schindelin, May 11, 2017
  47. 08/11 PREVIEW: remote: remove support for migrating ancient remotesJohannes Schindelin, May 11, 2017
  48. Junio C HamanoMay 12, 2017
  49. Johannes SchindelinMay 12, 2017
  50. Junio C HamanoMay 16, 2017
  51. Ævar Arnfjörð BjarmasonMay 16, 2017
  52. Junio C HamanoMay 16, 2017
  53. Ævar Arnfjörð BjarmasonMay 16, 2017
  54. Junio C HamanoMay 17, 2017
  55. Junio C HamanoMay 12, 2017
  56. Johannes SchindelinMay 12, 2017
  57. Jonathan NiederMay 12, 2017
  58. Junio C HamanoMay 13, 2017
  59. Junio C HamanoMay 12, 2017
  60. Johannes SchindelinMay 15, 2017
  61. Jeff KingMay 12, 2017
  62. Johannes SchindelinMay 12, 2017

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.