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

Re: [PATCH v3 5/5] remote: announce removal of "branches/" and "remotes/"

From
Patrick Steinhardt <ps@pks.im>
Date
Jan 22, 2025, 11:05 UTC
Message-ID
<Z5DRESPpegE41xaT@pks.im>
In-Reply-To
<xmqqtt9ryi3f.fsf@gitster.g>
On Tue, Jan 21, 2025 at 01:25:56PM -0800, Junio C Hamano wrote:
Show 20 quoted lines
> Patrick Steinhardt <ps@pks.im> writes:
> > diff --git a/builtin/remote.c b/builtin/remote.c
> > index 1ad3e70a6b..e565b2b3fe 100644
> > --- a/builtin/remote.c
> > +++ b/builtin/remote.c
> > @@ -640,10 +640,12 @@ static int migrate_file(struct remote *remote)
> >  	strbuf_addf(&buf, "remote.%s.fetch", remote->name);
> >  	for (i = 0; i < remote->fetch.nr; i++)
> >  		git_config_set_multivar(buf.buf, remote->fetch.items[i].raw, "^$", 0);
> > +#ifndef WITH_BREAKING_CHANGES
> >  	if (remote->origin == REMOTE_REMOTES)
> >  		unlink_or_warn(git_path("remotes/%s", remote->name));
> >  	else if (remote->origin == REMOTE_BRANCHES)
> >  		unlink_or_warn(git_path("branches/%s", remote->name));
> > +#endif /* WITH_BREAKING_CHANGES */
> >  	strbuf_release(&buf);
> 
> Interesting.  I wonder if our new warning should talk about whatever
> end-user facing interface that triggers this code path.  It would
> help them wean themselves away from the old interface, no?

Not quite sure that I understand what you're saying. Is it that we should tell whether we were reading from "branches/" or "remotes/"? If so we already do that.

Show 38 quoted lines
> > diff --git a/remote.c b/remote.c
> > index 10104d11e3..5feb0ae886 100644
> > --- a/remote.c
> > +++ b/remote.c
> > @@ -293,6 +293,7 @@ static void add_instead_of(struct rewrite *rewrite, const char *instead_of)
> >  	rewrite->instead_of_nr++;
> >  }
> >  
> > +#ifndef WITH_BREAKING_CHANGES
> >  static const char *skip_spaces(const char *s)
> >  {
> >  	while (isspace(*s))
> > @@ -308,6 +309,13 @@ static void read_remotes_file(struct remote_state *remote_state,
> >  
> >  	if (!f)
> >  		return;
> > +
> > +	warning(_("Reading remote from \"remotes/%s\", which is nominated\n"
> > +		  "for removal. If you still use the \"remotes/\" directory\n"
> > +		  "it is recommended to migrate to config-based remotes. If\n"
> 
> Do we have a way to concisely say "how" to do this?  If I am reading
> the caller of migrate_file() in builtin/remote.c, it would be
> 
>     $ git remote mv foo foo
> 
> for any foo in .git/remotes/* or .git/branches/* hierarchy?
> 
> Of course they may be an ancient leftover file that the user even no
> longer is aware of having, in which case
> 
>     $ rm .git/remotes/foo
> 
> might be an OK answer, but even then
> 
>     $ git remote rm foo
> 
> would probably be more appropriate.

Very good idea indeed. We also have tests that exercise this behaviour in t5505 (with the slight exception that it is `git remote rename`, not `git remote mv`).

Patrick
Previous: Junio C HamanoNext: Junio C Hamano
Message 9 of 10 in “remote: announce removal of "branches/" and "remotes/"”
  1. 0/5 remote: announce removal of "branches/" and "remotes/"Patrick Steinhardt, Jan 20, 2025
  2. 1/5 Makefile: wire up build option for deprecated featuresPatrick Steinhardt, Jan 20, 2025
  3. 2/5 ci: merge linux-gcc-default into linux-gccPatrick Steinhardt, Jan 20, 2025
  4. 3/5 ci: repurpose "linux-gcc" job for deprecationsPatrick Steinhardt, Jan 20, 2025
  5. 4/5 builtin/pack-redundant: remove subcommand with breaking changesPatrick Steinhardt, Jan 20, 2025
  6. Junio C HamanoJan 21, 2025
  7. 5/5 remote: announce removal of "branches/" and "remotes/"Patrick Steinhardt, Jan 20, 2025
  8. Junio C HamanoJan 21, 2025
  9. Patrick SteinhardtJan 22, 2025
  10. Junio C HamanoJan 22, 2025

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.