git@vger.kernel.org list mirror (unofficial, one of many)
 help / color / mirror / code / Atom feed
* [PATCH 00/11] Start retiring .git/remotes/ and .git/branches/ for good
@ 2017-05-11 13:47 Johannes Schindelin
  2017-05-11 13:47 ` [PATCH 01/11] git-parse-remote: fix highly misleading man page Johannes Schindelin
                   ` (12 more replies)
  0 siblings, 13 replies; 62+ messages in thread
From: Johannes Schindelin @ 2017-05-11 13:47 UTC (permalink / raw)
  To: git; +Cc: Junio C Hamano

Git uses the config for remote/upstream information in favor of the
previously-used .git/remotes/ and .git/branches/ for a decade now.

Nothing in Git writes to these files any longer, and the most prominent
user of .git/branches/ (Cogito) is long abandoned.

It is time to start not only deprecating this feature, but *really*
deprecating it. Like, really, *really*. For reals.

Half of this patch series does that.

The second half is a preview of the patches to finally rip out the code
that implements .git/remotes/ & .git/branches/ support. We we will want
to apply them to a future major version of Git, after *really*
deprecating .git/remotes/ & .git/branches/ support for at least one
major version (I would be more comfortable with three major versions,
actually).

Note: even after these patches, there is still a file mentioning
.git/remote/ (sic!) and .git/branches/:
Documentation/git-show-branch.txt. The reference is not, however,
describing Git's internals, but merely uses existing commit history
(from the olden days) in an example.

There is also a reference in contrib/examples/git-fetch.sh, but that
should remain there, for historians' purposes.

Oh, and the reason that I split out the changes to t5505, t5510, t5515 &
t5516 in the PREVIEW part is that those changes are unfortunately not
quite as trivial as I hoped, and require a bit of a rationale for the
way they were performed in the commit message. Read: I wanted to make
this patch series easier to review. And as I already split out all the
t/ patches, it felt silly to *not* split out the t0060 patch.


Johannes Schindelin (11):
  git-parse-remote: fix highly misleading man page
  Documentation: really deprecate .git/remotes/ and .git/branches/
  remote: warn loud and clear when .git/branches/ is *still* used
  remote: warn loud and clear when .git/remotes/ is *still* used
  Revert "Revert "Don't create the $GIT_DIR/branches directory on init""
  PREVIEW: t5510: convert .git/remotes/ test to use a regular remote
  PREVIEW: t5516: stop testing .git/branches/ functionality
  PREVIEW: remote: remove support for migrating ancient remotes
  PREVIEW: t5515: remove .git/remotes/ and .git/branches/ tests
  PREVIEW: t0060: stop testing support for .git/remotes/ and
    .git/branches/
  PREVIEW: remove support for .git/remotes/ and .git/branches/

 Documentation/git-parse-remote.txt                 |  7 +-
 Documentation/git-remote.txt                       |  4 -
 Documentation/gitrepository-layout.txt             | 19 +++--
 Documentation/urls-remotes.txt                     | 65 +---------------
 builtin/remote.c                                   | 27 -------
 path.c                                             |  2 -
 remote.c                                           | 89 ----------------------
 remote.h                                           |  4 +-
 t/t0060-path-utils.sh                              |  2 -
 t/t5505-remote.sh                                  | 55 -------------
 t/t5510-fetch.sh                                   | 10 +--
 t/t5515-fetch-merge-logic.sh                       | 23 ------
 t/t5515/fetch.br-branches-default                  |  8 --
 t/t5515/fetch.br-branches-default-merge            |  9 ---
 ...etch.br-branches-default-merge_branches-default |  9 ---
 t/t5515/fetch.br-branches-default-octopus          | 10 ---
 ...ch.br-branches-default-octopus_branches-default | 10 ---
 t/t5515/fetch.br-branches-default_branches-default |  8 --
 t/t5515/fetch.br-branches-one                      |  8 --
 t/t5515/fetch.br-branches-one-merge                |  9 ---
 t/t5515/fetch.br-branches-one-merge_branches-one   |  9 ---
 t/t5515/fetch.br-branches-one-octopus              |  9 ---
 t/t5515/fetch.br-branches-one-octopus_branches-one |  9 ---
 t/t5515/fetch.br-branches-one_branches-one         |  8 --
 t/t5515/fetch.br-remote-explicit                   | 11 ---
 t/t5515/fetch.br-remote-explicit-merge             | 11 ---
 .../fetch.br-remote-explicit-merge_remote-explicit | 11 ---
 t/t5515/fetch.br-remote-explicit-octopus           | 11 ---
 ...etch.br-remote-explicit-octopus_remote-explicit | 11 ---
 t/t5515/fetch.br-remote-explicit_remote-explicit   | 11 ---
 t/t5515/fetch.br-remote-glob                       | 11 ---
 t/t5515/fetch.br-remote-glob-merge                 | 11 ---
 t/t5515/fetch.br-remote-glob-merge_remote-glob     | 11 ---
 t/t5515/fetch.br-remote-glob-octopus               | 11 ---
 t/t5515/fetch.br-remote-glob-octopus_remote-glob   | 11 ---
 t/t5515/fetch.br-remote-glob_remote-glob           | 11 ---
 t/t5515/fetch.br-unconfig_branches-default         |  8 --
 t/t5515/fetch.br-unconfig_branches-one             |  8 --
 t/t5515/fetch.br-unconfig_remote-explicit          | 11 ---
 t/t5515/fetch.br-unconfig_remote-glob              | 11 ---
 t/t5515/fetch.master_branches-default              |  8 --
 t/t5515/fetch.master_branches-one                  |  8 --
 t/t5515/fetch.master_remote-explicit               | 11 ---
 t/t5515/fetch.master_remote-glob                   | 11 ---
 t/t5515/refs.br-branches-default                   | 12 ---
 t/t5515/refs.br-branches-default-merge             | 12 ---
 ...refs.br-branches-default-merge_branches-default | 12 ---
 t/t5515/refs.br-branches-default-octopus           | 12 ---
 ...fs.br-branches-default-octopus_branches-default | 12 ---
 t/t5515/refs.br-branches-default_branches-default  | 12 ---
 t/t5515/refs.br-branches-one                       | 12 ---
 t/t5515/refs.br-branches-one-merge                 | 12 ---
 t/t5515/refs.br-branches-one-merge_branches-one    | 12 ---
 t/t5515/refs.br-branches-one-octopus               | 12 ---
 t/t5515/refs.br-branches-one-octopus_branches-one  | 12 ---
 t/t5515/refs.br-branches-one_branches-one          | 12 ---
 t/t5515/refs.br-remote-explicit                    | 15 ----
 t/t5515/refs.br-remote-explicit-merge              | 15 ----
 .../refs.br-remote-explicit-merge_remote-explicit  | 15 ----
 t/t5515/refs.br-remote-explicit-octopus            | 15 ----
 ...refs.br-remote-explicit-octopus_remote-explicit | 15 ----
 t/t5515/refs.br-remote-explicit_remote-explicit    | 15 ----
 t/t5515/refs.br-remote-glob                        | 15 ----
 t/t5515/refs.br-remote-glob-merge                  | 15 ----
 t/t5515/refs.br-remote-glob-merge_remote-glob      | 15 ----
 t/t5515/refs.br-remote-glob-octopus                | 15 ----
 t/t5515/refs.br-remote-glob-octopus_remote-glob    | 15 ----
 t/t5515/refs.br-remote-glob_remote-glob            | 15 ----
 t/t5515/refs.br-unconfig_branches-default          | 12 ---
 t/t5515/refs.br-unconfig_branches-one              | 12 ---
 t/t5515/refs.br-unconfig_remote-explicit           | 15 ----
 t/t5515/refs.br-unconfig_remote-glob               | 15 ----
 t/t5515/refs.master_branches-default               | 12 ---
 t/t5515/refs.master_branches-one                   | 12 ---
 t/t5515/refs.master_remote-explicit                | 15 ----
 t/t5515/refs.master_remote-glob                    | 15 ----
 t/t5516-fetch-push.sh                              | 55 +------------
 templates/branches--                               |  1 -
 78 files changed, 20 insertions(+), 1089 deletions(-)
 delete mode 100644 t/t5515/fetch.br-branches-default
 delete mode 100644 t/t5515/fetch.br-branches-default-merge
 delete mode 100644 t/t5515/fetch.br-branches-default-merge_branches-default
 delete mode 100644 t/t5515/fetch.br-branches-default-octopus
 delete mode 100644 t/t5515/fetch.br-branches-default-octopus_branches-default
 delete mode 100644 t/t5515/fetch.br-branches-default_branches-default
 delete mode 100644 t/t5515/fetch.br-branches-one
 delete mode 100644 t/t5515/fetch.br-branches-one-merge
 delete mode 100644 t/t5515/fetch.br-branches-one-merge_branches-one
 delete mode 100644 t/t5515/fetch.br-branches-one-octopus
 delete mode 100644 t/t5515/fetch.br-branches-one-octopus_branches-one
 delete mode 100644 t/t5515/fetch.br-branches-one_branches-one
 delete mode 100644 t/t5515/fetch.br-remote-explicit
 delete mode 100644 t/t5515/fetch.br-remote-explicit-merge
 delete mode 100644 t/t5515/fetch.br-remote-explicit-merge_remote-explicit
 delete mode 100644 t/t5515/fetch.br-remote-explicit-octopus
 delete mode 100644 t/t5515/fetch.br-remote-explicit-octopus_remote-explicit
 delete mode 100644 t/t5515/fetch.br-remote-explicit_remote-explicit
 delete mode 100644 t/t5515/fetch.br-remote-glob
 delete mode 100644 t/t5515/fetch.br-remote-glob-merge
 delete mode 100644 t/t5515/fetch.br-remote-glob-merge_remote-glob
 delete mode 100644 t/t5515/fetch.br-remote-glob-octopus
 delete mode 100644 t/t5515/fetch.br-remote-glob-octopus_remote-glob
 delete mode 100644 t/t5515/fetch.br-remote-glob_remote-glob
 delete mode 100644 t/t5515/fetch.br-unconfig_branches-default
 delete mode 100644 t/t5515/fetch.br-unconfig_branches-one
 delete mode 100644 t/t5515/fetch.br-unconfig_remote-explicit
 delete mode 100644 t/t5515/fetch.br-unconfig_remote-glob
 delete mode 100644 t/t5515/fetch.master_branches-default
 delete mode 100644 t/t5515/fetch.master_branches-one
 delete mode 100644 t/t5515/fetch.master_remote-explicit
 delete mode 100644 t/t5515/fetch.master_remote-glob
 delete mode 100644 t/t5515/refs.br-branches-default
 delete mode 100644 t/t5515/refs.br-branches-default-merge
 delete mode 100644 t/t5515/refs.br-branches-default-merge_branches-default
 delete mode 100644 t/t5515/refs.br-branches-default-octopus
 delete mode 100644 t/t5515/refs.br-branches-default-octopus_branches-default
 delete mode 100644 t/t5515/refs.br-branches-default_branches-default
 delete mode 100644 t/t5515/refs.br-branches-one
 delete mode 100644 t/t5515/refs.br-branches-one-merge
 delete mode 100644 t/t5515/refs.br-branches-one-merge_branches-one
 delete mode 100644 t/t5515/refs.br-branches-one-octopus
 delete mode 100644 t/t5515/refs.br-branches-one-octopus_branches-one
 delete mode 100644 t/t5515/refs.br-branches-one_branches-one
 delete mode 100644 t/t5515/refs.br-remote-explicit
 delete mode 100644 t/t5515/refs.br-remote-explicit-merge
 delete mode 100644 t/t5515/refs.br-remote-explicit-merge_remote-explicit
 delete mode 100644 t/t5515/refs.br-remote-explicit-octopus
 delete mode 100644 t/t5515/refs.br-remote-explicit-octopus_remote-explicit
 delete mode 100644 t/t5515/refs.br-remote-explicit_remote-explicit
 delete mode 100644 t/t5515/refs.br-remote-glob
 delete mode 100644 t/t5515/refs.br-remote-glob-merge
 delete mode 100644 t/t5515/refs.br-remote-glob-merge_remote-glob
 delete mode 100644 t/t5515/refs.br-remote-glob-octopus
 delete mode 100644 t/t5515/refs.br-remote-glob-octopus_remote-glob
 delete mode 100644 t/t5515/refs.br-remote-glob_remote-glob
 delete mode 100644 t/t5515/refs.br-unconfig_branches-default
 delete mode 100644 t/t5515/refs.br-unconfig_branches-one
 delete mode 100644 t/t5515/refs.br-unconfig_remote-explicit
 delete mode 100644 t/t5515/refs.br-unconfig_remote-glob
 delete mode 100644 t/t5515/refs.master_branches-default
 delete mode 100644 t/t5515/refs.master_branches-one
 delete mode 100644 t/t5515/refs.master_remote-explicit
 delete mode 100644 t/t5515/refs.master_remote-glob
 delete mode 100644 templates/branches--


base-commit: b06d3643105c8758ed019125a4399cb7efdcce2c
Published-As: https://github.com/dscho/git/releases/tag/retire-cogito-branches-v1
Fetch-It-Via: git fetch https://github.com/dscho/git retire-cogito-branches-v1

-- 
2.12.2.windows.2.800.gede8f145e06


^ permalink raw reply	[flat|nested] 62+ messages in thread

* [PATCH 01/11] git-parse-remote: fix highly misleading man page
  2017-05-11 13:47 [PATCH 00/11] Start retiring .git/remotes/ and .git/branches/ for good Johannes Schindelin
@ 2017-05-11 13:47 ` Johannes Schindelin
  2017-05-11 17:21   ` Stefan Beller
  2017-05-11 13:47 ` [PATCH 02/11] Documentation: really deprecate .git/remotes/ and .git/branches/ Johannes Schindelin
                   ` (11 subsequent siblings)
  12 siblings, 1 reply; 62+ messages in thread
From: Johannes Schindelin @ 2017-05-11 13:47 UTC (permalink / raw)
  To: git; +Cc: Junio C Hamano

The man page still talked about the .git/remotes/ directory (which is no
longer in use, as of 75c384efb52 (Do not create $GIT_DIR/remotes/
directory anymore., 2006-12-19)).

Let's just revamp it almost completely to reflect the *purpose* of that
scriptlet, as opposed to its implementation details.

Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
---
 Documentation/git-parse-remote.txt | 7 +++----
 1 file changed, 3 insertions(+), 4 deletions(-)

diff --git a/Documentation/git-parse-remote.txt b/Documentation/git-parse-remote.txt
index a45ea1ece81..7f865f33898 100644
--- a/Documentation/git-parse-remote.txt
+++ b/Documentation/git-parse-remote.txt
@@ -3,7 +3,7 @@ git-parse-remote(1)
 
 NAME
 ----
-git-parse-remote - Routines to help parsing remote repository access parameters
+git-parse-remote - Routines to help parsing remote repository information
 
 
 SYNOPSIS
@@ -14,9 +14,8 @@ SYNOPSIS
 DESCRIPTION
 -----------
 This script is included in various scripts to supply
-routines to parse files under $GIT_DIR/remotes/ and
-$GIT_DIR/branches/ and configuration variables that are related
-to fetching, pulling and pushing.
+routines to query the remote repository and its branch
+associated with the current branch.
 
 GIT
 ---
-- 
2.12.2.windows.2.800.gede8f145e06



^ permalink raw reply	[flat|nested] 62+ messages in thread

* [PATCH 02/11] Documentation: really deprecate .git/remotes/ and .git/branches/
  2017-05-11 13:47 [PATCH 00/11] Start retiring .git/remotes/ and .git/branches/ for good Johannes Schindelin
  2017-05-11 13:47 ` [PATCH 01/11] git-parse-remote: fix highly misleading man page Johannes Schindelin
@ 2017-05-11 13:47 ` Johannes Schindelin
  2017-05-11 13:47 ` [PATCH 03/11] remote: warn loud and clear when .git/branches/ is *still* used Johannes Schindelin
                   ` (10 subsequent siblings)
  12 siblings, 0 replies; 62+ messages in thread
From: Johannes Schindelin @ 2017-05-11 13:47 UTC (permalink / raw)
  To: git; +Cc: Junio C Hamano

The documentation did not make it quite clear just how deprecated these
directories are.

Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
---
 Documentation/gitrepository-layout.txt | 19 +++++-----
 Documentation/urls-remotes.txt         | 65 ++--------------------------------
 2 files changed, 11 insertions(+), 73 deletions(-)

diff --git a/Documentation/gitrepository-layout.txt b/Documentation/gitrepository-layout.txt
index f51ed4e37cd..9f2275f06d5 100644
--- a/Documentation/gitrepository-layout.txt
+++ b/Documentation/gitrepository-layout.txt
@@ -144,12 +144,11 @@ config::
 	used instead.
 
 branches::
-	A slightly deprecated way to store shorthands to be used
+	A highly deprecated way to store shorthands to be used
 	to specify a URL to 'git fetch', 'git pull' and 'git push'.
 	A file can be stored as `branches/<name>` and then
 	'name' can be given to these commands in place of
-	'repository' argument.  See the REMOTES section in
-	linkgit:git-fetch[1] for details.  This mechanism is legacy
+	'repository' argument.  This mechanism is legacy
 	and not likely to be found in modern repositories. This
 	directory is ignored if $GIT_COMMON_DIR is set and
 	"$GIT_COMMON_DIR/branches" will be used instead.
@@ -213,13 +212,13 @@ info/sparse-checkout::
 	See also: linkgit:git-read-tree[1].
 
 remotes::
-	Stores shorthands for URL and default refnames for use
-	when interacting with remote repositories via 'git fetch',
-	'git pull' and 'git push' commands.  See the REMOTES section
-	in linkgit:git-fetch[1] for details.  This mechanism is legacy
-	and not likely to be found in modern repositories. This
-	directory is ignored if $GIT_COMMON_DIR is set and
-	"$GIT_COMMON_DIR/remotes" will be used instead.
+	A highly deprecated location to store shorthands for URL and
+	default refnames for use when interacting with remote
+	repositories via 'git fetch', 'git pull' and 'git push'
+	commands.  This mechanism is legacy and not likely to be
+	found in modern repositories. This directory is ignored if
+	$GIT_COMMON_DIR is set and "$GIT_COMMON_DIR/remotes" will
+	be used instead.
 
 logs::
 	Records of changes made to refs are stored in this directory.
diff --git a/Documentation/urls-remotes.txt b/Documentation/urls-remotes.txt
index bd184cd6539..a7214a9cae5 100644
--- a/Documentation/urls-remotes.txt
+++ b/Documentation/urls-remotes.txt
@@ -3,15 +3,8 @@ include::urls.txt[]
 REMOTES[[REMOTES]]
 ------------------
 
-The name of one of the following can be used instead
-of a URL as `<repository>` argument:
-
-* a remote in the Git configuration file: `$GIT_DIR/config`,
-* a file in the `$GIT_DIR/remotes` directory, or
-* a file in the `$GIT_DIR/branches` directory.
-
-All of these also allow you to omit the refspec from the command line
-because they each contain a refspec which git will use by default.
+The name of a remote in the Git configuration file: `$GIT_DIR/config`
+can be used instead of a URL as `<repository>` argument.
 
 Named remote in configuration file
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
@@ -35,60 +28,6 @@ config file would appear like this:
 The `<pushurl>` is used for pushes only. It is optional and defaults
 to `<url>`.
 
-Named file in `$GIT_DIR/remotes`
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-
-You can choose to provide the name of a
-file in `$GIT_DIR/remotes`.  The URL
-in this file will be used to access the repository.  The refspec
-in this file will be used as default when you do not
-provide a refspec on the command line.  This file should have the
-following format:
-
-------------
-	URL: one of the above URL format
-	Push: <refspec>
-	Pull: <refspec>
-
-------------
-
-`Push:` lines are used by 'git push' and
-`Pull:` lines are used by 'git pull' and 'git fetch'.
-Multiple `Push:` and `Pull:` lines may
-be specified for additional branch mappings.
-
-Named file in `$GIT_DIR/branches`
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-
-You can choose to provide the name of a
-file in `$GIT_DIR/branches`.
-The URL in this file will be used to access the repository.
-This file should have the following format:
-
-
-------------
-	<url>#<head>
-------------
-
-`<url>` is required; `#<head>` is optional.
-
-Depending on the operation, git will use one of the following
-refspecs, if you don't provide one on the command line.
-`<branch>` is the name of this file in `$GIT_DIR/branches` and
-`<head>` defaults to `master`.
-
-git fetch uses:
-
-------------
-	refs/heads/<head>:refs/heads/<branch>
-------------
-
-git push uses:
-
-------------
-	HEAD:refs/heads/<head>
-------------
-
 
 
 
-- 
2.12.2.windows.2.800.gede8f145e06



^ permalink raw reply	[flat|nested] 62+ messages in thread

* [PATCH 03/11] remote: warn loud and clear when .git/branches/ is *still* used
  2017-05-11 13:47 [PATCH 00/11] Start retiring .git/remotes/ and .git/branches/ for good Johannes Schindelin
  2017-05-11 13:47 ` [PATCH 01/11] git-parse-remote: fix highly misleading man page Johannes Schindelin
  2017-05-11 13:47 ` [PATCH 02/11] Documentation: really deprecate .git/remotes/ and .git/branches/ Johannes Schindelin
@ 2017-05-11 13:47 ` Johannes Schindelin
  2017-05-11 13:47 ` [PATCH 04/11] remote: warn loud and clear when .git/remotes/ " Johannes Schindelin
                   ` (9 subsequent siblings)
  12 siblings, 0 replies; 62+ messages in thread
From: Johannes Schindelin @ 2017-05-11 13:47 UTC (permalink / raw)
  To: git; +Cc: Junio C Hamano

Since at least 5751f49010e (Move remote parsing into a library file out
of builtin-push., 2007-05-12), we strongly prefer remotes and upstream
branches to be specified in the config rather than .git/remotes/ and
.git/branches/.

For some time, we still retained compatibility with Cogito (which was an
excellent project demonstrating many useful features that eventually
were integrated into Git proper) by creating the branches/ subdirectory
upon git-init.

In preparation for removing support for this ancient compatibility that
should no longer be necessary, let's warn everybody who is still using
that feature (if there is anybody left, that is).

Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
---
 remote.c | 3 +++
 1 file changed, 3 insertions(+)

diff --git a/remote.c b/remote.c
index 801137c72eb..04ab2230337 100644
--- a/remote.c
+++ b/remote.c
@@ -290,6 +290,9 @@ static void read_branches_file(struct remote *remote)
 		return;
 	}
 
+	warning(_("the branch '%s' uses the long-deprecated '%s' file"),
+		remote->name, git_path("branches/%s", remote->name));
+
 	remote->configured_in_repo = 1;
 	remote->origin = REMOTE_BRANCHES;
 
-- 
2.12.2.windows.2.800.gede8f145e06



^ permalink raw reply	[flat|nested] 62+ messages in thread

* [PATCH 04/11] remote: warn loud and clear when .git/remotes/ is *still* used
  2017-05-11 13:47 [PATCH 00/11] Start retiring .git/remotes/ and .git/branches/ for good Johannes Schindelin
                   ` (2 preceding siblings ...)
  2017-05-11 13:47 ` [PATCH 03/11] remote: warn loud and clear when .git/branches/ is *still* used Johannes Schindelin
@ 2017-05-11 13:47 ` Johannes Schindelin
  2017-05-11 13:47 ` [PATCH 05/11] Revert "Revert "Don't create the $GIT_DIR/branches directory on init"" Johannes Schindelin
                   ` (8 subsequent siblings)
  12 siblings, 0 replies; 62+ messages in thread
From: Johannes Schindelin @ 2017-05-11 13:47 UTC (permalink / raw)
  To: git; +Cc: Junio C Hamano

Since at least 75c384efb52 (Do not create $GIT_DIR/remotes/ directory
anymore., 2006-12-19), we strongly prefer remotes and upstream branches
to be specified in the config rather than .git/remotes/ and
.git/branches/.

For some time, we still retained backwards-compatibility. At some stage,
it becomes pointless, though, as it just adds maintenance burden for no
good reason: no repositories created within the past decade have
populated these directories, and pre-existing repositories were most
likely migrated by now.

In preparation for removing support for this ancient compatibility that
should no longer be necessary, let's warn everybody who is still using
that feature (if there is anybody left, that is).

Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
---
 remote.c | 4 ++++
 1 file changed, 4 insertions(+)

diff --git a/remote.c b/remote.c
index 04ab2230337..b2ae168035e 100644
--- a/remote.c
+++ b/remote.c
@@ -255,6 +255,10 @@ static void read_remotes_file(struct remote *remote)
 
 	if (!f)
 		return;
+
+	warning(_("the remote '%s' uses the long-deprecated '%s' file"),
+		remote->name, git_path("branches/%s", remote->name));
+
 	remote->configured_in_repo = 1;
 	remote->origin = REMOTE_REMOTES;
 	while (strbuf_getline(&buf, f) != EOF) {
-- 
2.12.2.windows.2.800.gede8f145e06



^ permalink raw reply	[flat|nested] 62+ messages in thread

* [PATCH 05/11] Revert "Revert "Don't create the $GIT_DIR/branches directory on init""
  2017-05-11 13:47 [PATCH 00/11] Start retiring .git/remotes/ and .git/branches/ for good Johannes Schindelin
                   ` (3 preceding siblings ...)
  2017-05-11 13:47 ` [PATCH 04/11] remote: warn loud and clear when .git/remotes/ " Johannes Schindelin
@ 2017-05-11 13:47 ` Johannes Schindelin
  2017-05-11 17:26   ` Stefan Beller
  2017-05-11 13:47 ` [PATCH 06/11] PREVIEW: t5510: convert .git/remotes/ test to use a regular remote Johannes Schindelin
                   ` (7 subsequent siblings)
  12 siblings, 1 reply; 62+ messages in thread
From: Johannes Schindelin @ 2017-05-11 13:47 UTC (permalink / raw)
  To: git; +Cc: Junio C Hamano

A long, long, long time ago, we stored the "upstream" information of
branches in files inside the .git/branches/ directory. We don't do this
anymore, though. Since 5751f49010e (Move remote parsing into a library
file out of builtin-push., 2007-05-12), to be precise.

This is sort of a sibling to 75c384efb52 (Do not create $GIT_DIR/remotes/
directory anymore., 2006-12-19).

The tests t5505-remote and t5516-fetch-push need to be adjusted now, as
they expect to find a .git/branches/ directory.

This reverts c8a58ac5a52 (Revert "Don't create the $GIT_DIR/branches
directory on init", 2009-10-31).

Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
---
 t/t5505-remote.sh     | 2 ++
 t/t5516-fetch-push.sh | 4 ++++
 templates/branches--  | 1 -
 3 files changed, 6 insertions(+), 1 deletion(-)
 delete mode 100644 templates/branches--

diff --git a/t/t5505-remote.sh b/t/t5505-remote.sh
index a6c0178f3af..4fd66760c75 100755
--- a/t/t5505-remote.sh
+++ b/t/t5505-remote.sh
@@ -830,6 +830,7 @@ test_expect_success 'migrate a remote from named file in $GIT_DIR/branches' '
 	(
 		cd six &&
 		git remote rm origin &&
+		mkdir -p .git/branches &&
 		echo "$origin_url" >.git/branches/origin &&
 		git remote rename origin origin &&
 		test_path_is_missing .git/branches/origin &&
@@ -844,6 +845,7 @@ test_expect_success 'migrate a remote from named file in $GIT_DIR/branches (2)'
 	(
 		cd seven &&
 		git remote rm origin &&
+		mkdir .git/branches &&
 		echo "quux#foom" > .git/branches/origin &&
 		git remote rename origin origin &&
 		test_path_is_missing .git/branches/origin &&
diff --git a/t/t5516-fetch-push.sh b/t/t5516-fetch-push.sh
index 177897ea0b1..457f648ad91 100755
--- a/t/t5516-fetch-push.sh
+++ b/t/t5516-fetch-push.sh
@@ -866,6 +866,7 @@ test_expect_success 'fetch with branches' '
 	mk_empty testrepo &&
 	git branch second $the_first_commit &&
 	git checkout second &&
+	mkdir -p testrepo/.git/branches &&
 	echo ".." > testrepo/.git/branches/branch1 &&
 	(
 		cd testrepo &&
@@ -879,6 +880,7 @@ test_expect_success 'fetch with branches' '
 
 test_expect_success 'fetch with branches containing #' '
 	mk_empty testrepo &&
+	mkdir -p testrepo/.git/branches &&
 	echo "..#second" > testrepo/.git/branches/branch2 &&
 	(
 		cd testrepo &&
@@ -893,6 +895,7 @@ test_expect_success 'fetch with branches containing #' '
 test_expect_success 'push with branches' '
 	mk_empty testrepo &&
 	git checkout second &&
+	mkdir -p .git/branches &&
 	echo "testrepo" > .git/branches/branch1 &&
 	git push branch1 &&
 	(
@@ -905,6 +908,7 @@ test_expect_success 'push with branches' '
 
 test_expect_success 'push with branches containing #' '
 	mk_empty testrepo &&
+	mkdir -p .git/branches &&
 	echo "testrepo#branch3" > .git/branches/branch2 &&
 	git push branch2 &&
 	(
diff --git a/templates/branches-- b/templates/branches--
deleted file mode 100644
index fae88709a63..00000000000
--- a/templates/branches--
+++ /dev/null
@@ -1 +0,0 @@
-: this is just to ensure the directory exists.
-- 
2.12.2.windows.2.800.gede8f145e06



^ permalink raw reply	[flat|nested] 62+ messages in thread

* [PATCH 06/11] PREVIEW: t5510: convert .git/remotes/ test to use a regular remote
  2017-05-11 13:47 [PATCH 00/11] Start retiring .git/remotes/ and .git/branches/ for good Johannes Schindelin
                   ` (4 preceding siblings ...)
  2017-05-11 13:47 ` [PATCH 05/11] Revert "Revert "Don't create the $GIT_DIR/branches directory on init"" Johannes Schindelin
@ 2017-05-11 13:47 ` Johannes Schindelin
  2017-05-11 13:47 ` [PATCH 07/11] PREVIEW: t5516: stop testing .git/branches/ functionality Johannes Schindelin
                   ` (6 subsequent siblings)
  12 siblings, 0 replies; 62+ messages in thread
From: Johannes Schindelin @ 2017-05-11 13:47 UTC (permalink / raw)
  To: git; +Cc: Junio C Hamano

We are about to stop supporting the .git/remotes/ and .git/branches/
feature. In preparation, t5510-fetch is adjusted *not* to verify that
.git/remotes/ works.

As the tests are entangled, we do not simply remove the test repository
with such a remote, but convert it to use a regular remote instead.

Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
---
 t/t5510-fetch.sh | 10 ++++------
 1 file changed, 4 insertions(+), 6 deletions(-)

diff --git a/t/t5510-fetch.sh b/t/t5510-fetch.sh
index 668c54be41e..f51b3360348 100755
--- a/t/t5510-fetch.sh
+++ b/t/t5510-fetch.sh
@@ -46,12 +46,10 @@ test_expect_success "clone and setup child repos" '
 		cd three &&
 		git config branch.master.remote two &&
 		git config branch.master.merge refs/heads/one &&
-		mkdir -p .git/remotes &&
-		{
-			echo "URL: ../two/.git/"
-			echo "Pull: refs/heads/master:refs/heads/two"
-			echo "Pull: refs/heads/one:refs/heads/one"
-		} >.git/remotes/two
+		git config remote.two.url ../two/.git/ &&
+		git config remote.two.fetch refs/heads/master:refs/heads/two &&
+		git config --add remote.two.fetch \
+			refs/heads/one:refs/heads/one
 	) &&
 	git clone . bundle &&
 	git clone . seven
-- 
2.12.2.windows.2.800.gede8f145e06



^ permalink raw reply	[flat|nested] 62+ messages in thread

* [PATCH 07/11] PREVIEW: t5516: stop testing .git/branches/ functionality
  2017-05-11 13:47 [PATCH 00/11] Start retiring .git/remotes/ and .git/branches/ for good Johannes Schindelin
                   ` (5 preceding siblings ...)
  2017-05-11 13:47 ` [PATCH 06/11] PREVIEW: t5510: convert .git/remotes/ test to use a regular remote Johannes Schindelin
@ 2017-05-11 13:47 ` Johannes Schindelin
  2017-05-11 13:47 ` [PATCH 08/11] PREVIEW: remote: remove support for migrating ancient remotes Johannes Schindelin
                   ` (5 subsequent siblings)
  12 siblings, 0 replies; 62+ messages in thread
From: Johannes Schindelin @ 2017-05-11 13:47 UTC (permalink / raw)
  To: git; +Cc: Junio C Hamano

We are about to remove support for .git/remotes/ and .git/branches/, at
long last. In preparation for this move, let's remove the corresponding
regression tests from t5516-fetch-push.

Note: the `push --prune` test case (and another test case after that)
relied on the side effect where a branch with the name `second` was
created earlier. We simply move that branch creation into that test
case.

Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
---
 t/t5516-fetch-push.sh | 59 +--------------------------------------------------
 1 file changed, 1 insertion(+), 58 deletions(-)

diff --git a/t/t5516-fetch-push.sh b/t/t5516-fetch-push.sh
index 457f648ad91..c8ba7b67f67 100755
--- a/t/t5516-fetch-push.sh
+++ b/t/t5516-fetch-push.sh
@@ -862,64 +862,6 @@ test_expect_success 'allow push to HEAD of non-bare repository (config)' '
 	! grep "warning: updating the current branch" stderr
 '
 
-test_expect_success 'fetch with branches' '
-	mk_empty testrepo &&
-	git branch second $the_first_commit &&
-	git checkout second &&
-	mkdir -p testrepo/.git/branches &&
-	echo ".." > testrepo/.git/branches/branch1 &&
-	(
-		cd testrepo &&
-		git fetch branch1 &&
-		echo "$the_commit commit	refs/heads/branch1" >expect &&
-		git for-each-ref refs/heads >actual &&
-		test_cmp expect actual
-	) &&
-	git checkout master
-'
-
-test_expect_success 'fetch with branches containing #' '
-	mk_empty testrepo &&
-	mkdir -p testrepo/.git/branches &&
-	echo "..#second" > testrepo/.git/branches/branch2 &&
-	(
-		cd testrepo &&
-		git fetch branch2 &&
-		echo "$the_first_commit commit	refs/heads/branch2" >expect &&
-		git for-each-ref refs/heads >actual &&
-		test_cmp expect actual
-	) &&
-	git checkout master
-'
-
-test_expect_success 'push with branches' '
-	mk_empty testrepo &&
-	git checkout second &&
-	mkdir -p .git/branches &&
-	echo "testrepo" > .git/branches/branch1 &&
-	git push branch1 &&
-	(
-		cd testrepo &&
-		echo "$the_first_commit commit	refs/heads/master" >expect &&
-		git for-each-ref refs/heads >actual &&
-		test_cmp expect actual
-	)
-'
-
-test_expect_success 'push with branches containing #' '
-	mk_empty testrepo &&
-	mkdir -p .git/branches &&
-	echo "testrepo#branch3" > .git/branches/branch2 &&
-	git push branch2 &&
-	(
-		cd testrepo &&
-		echo "$the_first_commit commit	refs/heads/branch3" >expect &&
-		git for-each-ref refs/heads >actual &&
-		test_cmp expect actual
-	) &&
-	git checkout master
-'
-
 test_expect_success 'push into aliased refs (consistent)' '
 	mk_test testrepo heads/master &&
 	mk_child testrepo child1 &&
@@ -1042,6 +984,7 @@ test_expect_success 'push --porcelain --dry-run rejected' '
 
 test_expect_success 'push --prune' '
 	mk_test testrepo heads/master heads/second heads/foo heads/bar &&
+	git branch second $the_first_commit &&
 	git push --prune testrepo : &&
 	check_push_result testrepo $the_commit heads/master &&
 	check_push_result testrepo $the_first_commit heads/second &&
-- 
2.12.2.windows.2.800.gede8f145e06



^ permalink raw reply	[flat|nested] 62+ messages in thread

* [PATCH 08/11] PREVIEW: remote: remove support for migrating ancient remotes
  2017-05-11 13:47 [PATCH 00/11] Start retiring .git/remotes/ and .git/branches/ for good Johannes Schindelin
                   ` (6 preceding siblings ...)
  2017-05-11 13:47 ` [PATCH 07/11] PREVIEW: t5516: stop testing .git/branches/ functionality Johannes Schindelin
@ 2017-05-11 13:47 ` Johannes Schindelin
  2017-05-11 13:48 ` [PATCH 09/11] PREVIEW: t5515: remove .git/remotes/ and .git/branches/ tests Johannes Schindelin
                   ` (4 subsequent siblings)
  12 siblings, 0 replies; 62+ messages in thread
From: Johannes Schindelin @ 2017-05-11 13:47 UTC (permalink / raw)
  To: git; +Cc: Junio C Hamano

By now, everybody will have moved on... no need to burden ourselves with
now-obsolete code.

Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
---
 Documentation/git-remote.txt |  4 ----
 builtin/remote.c             | 27 ---------------------
 t/t5505-remote.sh            | 57 --------------------------------------------
 3 files changed, 88 deletions(-)

diff --git a/Documentation/git-remote.txt b/Documentation/git-remote.txt
index 577b969c1bd..746fdd27ced 100644
--- a/Documentation/git-remote.txt
+++ b/Documentation/git-remote.txt
@@ -84,10 +84,6 @@ will always behave as if `--mirror` was passed.
 
 Rename the remote named <old> to <new>. All remote-tracking branches and
 configuration settings for the remote are updated.
-+
-In case <old> and <new> are the same, and <old> is a file under
-`$GIT_DIR/remotes` or `$GIT_DIR/branches`, the remote is converted to
-the configuration file format.
 
 'remove'::
 'rm'::
diff --git a/builtin/remote.c b/builtin/remote.c
index addf97ad293..c3502f24223 100644
--- a/builtin/remote.c
+++ b/builtin/remote.c
@@ -574,30 +574,6 @@ static int read_remote_branches(const char *refname,
 	return 0;
 }
 
-static int migrate_file(struct remote *remote)
-{
-	struct strbuf buf = STRBUF_INIT;
-	int i;
-
-	strbuf_addf(&buf, "remote.%s.url", remote->name);
-	for (i = 0; i < remote->url_nr; i++)
-		git_config_set_multivar(buf.buf, remote->url[i], "^$", 0);
-	strbuf_reset(&buf);
-	strbuf_addf(&buf, "remote.%s.push", remote->name);
-	for (i = 0; i < remote->push_refspec_nr; i++)
-		git_config_set_multivar(buf.buf, remote->push_refspec[i], "^$", 0);
-	strbuf_reset(&buf);
-	strbuf_addf(&buf, "remote.%s.fetch", remote->name);
-	for (i = 0; i < remote->fetch_refspec_nr; i++)
-		git_config_set_multivar(buf.buf, remote->fetch_refspec[i], "^$", 0);
-	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));
-
-	return 0;
-}
-
 static int mv(int argc, const char **argv)
 {
 	struct option options[] = {
@@ -621,9 +597,6 @@ static int mv(int argc, const char **argv)
 	if (!remote_is_configured(oldremote, 1))
 		die(_("No such remote: %s"), rename.old);
 
-	if (!strcmp(rename.old, rename.new) && oldremote->origin != REMOTE_CONFIG)
-		return migrate_file(oldremote);
-
 	newremote = remote_get(rename.new);
 	if (remote_is_configured(newremote, 1))
 		die(_("remote %s already exists."), rename.new);
diff --git a/t/t5505-remote.sh b/t/t5505-remote.sh
index 4fd66760c75..857950ac8ee 100755
--- a/t/t5505-remote.sh
+++ b/t/t5505-remote.sh
@@ -798,63 +798,6 @@ Pull: refs/heads/master:refs/heads/origin
 Pull: refs/heads/next:refs/heads/origin2
 EOF
 
-test_expect_success 'migrate a remote from named file in $GIT_DIR/remotes' '
-	git clone one five &&
-	origin_url=$(pwd)/one &&
-	(
-		cd five &&
-		git remote remove origin &&
-		mkdir -p .git/remotes &&
-		cat ../remotes_origin >.git/remotes/origin &&
-		git remote rename origin origin &&
-		test_path_is_missing .git/remotes/origin &&
-		test "$(git config remote.origin.url)" = "$origin_url" &&
-		cat >push_expected <<-\EOF &&
-		refs/heads/master:refs/heads/upstream
-		refs/heads/next:refs/heads/upstream2
-		EOF
-		cat >fetch_expected <<-\EOF &&
-		refs/heads/master:refs/heads/origin
-		refs/heads/next:refs/heads/origin2
-		EOF
-		git config --get-all remote.origin.push >push_actual &&
-		git config --get-all remote.origin.fetch >fetch_actual &&
-		test_cmp push_expected push_actual &&
-		test_cmp fetch_expected fetch_actual
-	)
-'
-
-test_expect_success 'migrate a remote from named file in $GIT_DIR/branches' '
-	git clone one six &&
-	origin_url=$(pwd)/one &&
-	(
-		cd six &&
-		git remote rm origin &&
-		mkdir -p .git/branches &&
-		echo "$origin_url" >.git/branches/origin &&
-		git remote rename origin origin &&
-		test_path_is_missing .git/branches/origin &&
-		test "$(git config remote.origin.url)" = "$origin_url" &&
-		test "$(git config remote.origin.fetch)" = "refs/heads/master:refs/heads/origin" &&
-		test "$(git config remote.origin.push)" = "HEAD:refs/heads/master"
-	)
-'
-
-test_expect_success 'migrate a remote from named file in $GIT_DIR/branches (2)' '
-	git clone one seven &&
-	(
-		cd seven &&
-		git remote rm origin &&
-		mkdir .git/branches &&
-		echo "quux#foom" > .git/branches/origin &&
-		git remote rename origin origin &&
-		test_path_is_missing .git/branches/origin &&
-		test "$(git config remote.origin.url)" = "quux" &&
-		test "$(git config remote.origin.fetch)" = "refs/heads/foom:refs/heads/origin"
-		test "$(git config remote.origin.push)" = "HEAD:refs/heads/foom"
-	)
-'
-
 test_expect_success 'remote prune to cause a dangling symref' '
 	git clone one eight &&
 	(
-- 
2.12.2.windows.2.800.gede8f145e06



^ permalink raw reply	[flat|nested] 62+ messages in thread

* [PATCH 09/11] PREVIEW: t5515: remove .git/remotes/ and .git/branches/ tests
  2017-05-11 13:47 [PATCH 00/11] Start retiring .git/remotes/ and .git/branches/ for good Johannes Schindelin
                   ` (7 preceding siblings ...)
  2017-05-11 13:47 ` [PATCH 08/11] PREVIEW: remote: remove support for migrating ancient remotes Johannes Schindelin
@ 2017-05-11 13:48 ` Johannes Schindelin
  2017-05-11 13:48 ` [PATCH 10/11] PREVIEW: t0060: stop testing support for .git/remotes/ and .git/branches/ Johannes Schindelin
                   ` (3 subsequent siblings)
  12 siblings, 0 replies; 62+ messages in thread
From: Johannes Schindelin @ 2017-05-11 13:48 UTC (permalink / raw)
  To: git; +Cc: Junio C Hamano

We are about to remove support for the long-obsolete .git/remotes/ and
.git/branches/ directories. Let's stop testing them, in preparation for
that move.

The bulk of this patch simply removes support files that are no longer
needed.

Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
---
 t/t5515-fetch-merge-logic.sh                       | 23 ----------------------
 t/t5515/fetch.br-branches-default                  |  8 --------
 t/t5515/fetch.br-branches-default-merge            |  9 ---------
 ...etch.br-branches-default-merge_branches-default |  9 ---------
 t/t5515/fetch.br-branches-default-octopus          | 10 ----------
 ...ch.br-branches-default-octopus_branches-default | 10 ----------
 t/t5515/fetch.br-branches-default_branches-default |  8 --------
 t/t5515/fetch.br-branches-one                      |  8 --------
 t/t5515/fetch.br-branches-one-merge                |  9 ---------
 t/t5515/fetch.br-branches-one-merge_branches-one   |  9 ---------
 t/t5515/fetch.br-branches-one-octopus              |  9 ---------
 t/t5515/fetch.br-branches-one-octopus_branches-one |  9 ---------
 t/t5515/fetch.br-branches-one_branches-one         |  8 --------
 t/t5515/fetch.br-remote-explicit                   | 11 -----------
 t/t5515/fetch.br-remote-explicit-merge             | 11 -----------
 .../fetch.br-remote-explicit-merge_remote-explicit | 11 -----------
 t/t5515/fetch.br-remote-explicit-octopus           | 11 -----------
 ...etch.br-remote-explicit-octopus_remote-explicit | 11 -----------
 t/t5515/fetch.br-remote-explicit_remote-explicit   | 11 -----------
 t/t5515/fetch.br-remote-glob                       | 11 -----------
 t/t5515/fetch.br-remote-glob-merge                 | 11 -----------
 t/t5515/fetch.br-remote-glob-merge_remote-glob     | 11 -----------
 t/t5515/fetch.br-remote-glob-octopus               | 11 -----------
 t/t5515/fetch.br-remote-glob-octopus_remote-glob   | 11 -----------
 t/t5515/fetch.br-remote-glob_remote-glob           | 11 -----------
 t/t5515/fetch.br-unconfig_branches-default         |  8 --------
 t/t5515/fetch.br-unconfig_branches-one             |  8 --------
 t/t5515/fetch.br-unconfig_remote-explicit          | 11 -----------
 t/t5515/fetch.br-unconfig_remote-glob              | 11 -----------
 t/t5515/fetch.master_branches-default              |  8 --------
 t/t5515/fetch.master_branches-one                  |  8 --------
 t/t5515/fetch.master_remote-explicit               | 11 -----------
 t/t5515/fetch.master_remote-glob                   | 11 -----------
 t/t5515/refs.br-branches-default                   | 12 -----------
 t/t5515/refs.br-branches-default-merge             | 12 -----------
 ...refs.br-branches-default-merge_branches-default | 12 -----------
 t/t5515/refs.br-branches-default-octopus           | 12 -----------
 ...fs.br-branches-default-octopus_branches-default | 12 -----------
 t/t5515/refs.br-branches-default_branches-default  | 12 -----------
 t/t5515/refs.br-branches-one                       | 12 -----------
 t/t5515/refs.br-branches-one-merge                 | 12 -----------
 t/t5515/refs.br-branches-one-merge_branches-one    | 12 -----------
 t/t5515/refs.br-branches-one-octopus               | 12 -----------
 t/t5515/refs.br-branches-one-octopus_branches-one  | 12 -----------
 t/t5515/refs.br-branches-one_branches-one          | 12 -----------
 t/t5515/refs.br-remote-explicit                    | 15 --------------
 t/t5515/refs.br-remote-explicit-merge              | 15 --------------
 .../refs.br-remote-explicit-merge_remote-explicit  | 15 --------------
 t/t5515/refs.br-remote-explicit-octopus            | 15 --------------
 ...refs.br-remote-explicit-octopus_remote-explicit | 15 --------------
 t/t5515/refs.br-remote-explicit_remote-explicit    | 15 --------------
 t/t5515/refs.br-remote-glob                        | 15 --------------
 t/t5515/refs.br-remote-glob-merge                  | 15 --------------
 t/t5515/refs.br-remote-glob-merge_remote-glob      | 15 --------------
 t/t5515/refs.br-remote-glob-octopus                | 15 --------------
 t/t5515/refs.br-remote-glob-octopus_remote-glob    | 15 --------------
 t/t5515/refs.br-remote-glob_remote-glob            | 15 --------------
 t/t5515/refs.br-unconfig_branches-default          | 12 -----------
 t/t5515/refs.br-unconfig_branches-one              | 12 -----------
 t/t5515/refs.br-unconfig_remote-explicit           | 15 --------------
 t/t5515/refs.br-unconfig_remote-glob               | 15 --------------
 t/t5515/refs.master_branches-default               | 12 -----------
 t/t5515/refs.master_branches-one                   | 12 -----------
 t/t5515/refs.master_remote-explicit                | 15 --------------
 t/t5515/refs.master_remote-glob                    | 15 --------------
 65 files changed, 769 deletions(-)
 delete mode 100644 t/t5515/fetch.br-branches-default
 delete mode 100644 t/t5515/fetch.br-branches-default-merge
 delete mode 100644 t/t5515/fetch.br-branches-default-merge_branches-default
 delete mode 100644 t/t5515/fetch.br-branches-default-octopus
 delete mode 100644 t/t5515/fetch.br-branches-default-octopus_branches-default
 delete mode 100644 t/t5515/fetch.br-branches-default_branches-default
 delete mode 100644 t/t5515/fetch.br-branches-one
 delete mode 100644 t/t5515/fetch.br-branches-one-merge
 delete mode 100644 t/t5515/fetch.br-branches-one-merge_branches-one
 delete mode 100644 t/t5515/fetch.br-branches-one-octopus
 delete mode 100644 t/t5515/fetch.br-branches-one-octopus_branches-one
 delete mode 100644 t/t5515/fetch.br-branches-one_branches-one
 delete mode 100644 t/t5515/fetch.br-remote-explicit
 delete mode 100644 t/t5515/fetch.br-remote-explicit-merge
 delete mode 100644 t/t5515/fetch.br-remote-explicit-merge_remote-explicit
 delete mode 100644 t/t5515/fetch.br-remote-explicit-octopus
 delete mode 100644 t/t5515/fetch.br-remote-explicit-octopus_remote-explicit
 delete mode 100644 t/t5515/fetch.br-remote-explicit_remote-explicit
 delete mode 100644 t/t5515/fetch.br-remote-glob
 delete mode 100644 t/t5515/fetch.br-remote-glob-merge
 delete mode 100644 t/t5515/fetch.br-remote-glob-merge_remote-glob
 delete mode 100644 t/t5515/fetch.br-remote-glob-octopus
 delete mode 100644 t/t5515/fetch.br-remote-glob-octopus_remote-glob
 delete mode 100644 t/t5515/fetch.br-remote-glob_remote-glob
 delete mode 100644 t/t5515/fetch.br-unconfig_branches-default
 delete mode 100644 t/t5515/fetch.br-unconfig_branches-one
 delete mode 100644 t/t5515/fetch.br-unconfig_remote-explicit
 delete mode 100644 t/t5515/fetch.br-unconfig_remote-glob
 delete mode 100644 t/t5515/fetch.master_branches-default
 delete mode 100644 t/t5515/fetch.master_branches-one
 delete mode 100644 t/t5515/fetch.master_remote-explicit
 delete mode 100644 t/t5515/fetch.master_remote-glob
 delete mode 100644 t/t5515/refs.br-branches-default
 delete mode 100644 t/t5515/refs.br-branches-default-merge
 delete mode 100644 t/t5515/refs.br-branches-default-merge_branches-default
 delete mode 100644 t/t5515/refs.br-branches-default-octopus
 delete mode 100644 t/t5515/refs.br-branches-default-octopus_branches-default
 delete mode 100644 t/t5515/refs.br-branches-default_branches-default
 delete mode 100644 t/t5515/refs.br-branches-one
 delete mode 100644 t/t5515/refs.br-branches-one-merge
 delete mode 100644 t/t5515/refs.br-branches-one-merge_branches-one
 delete mode 100644 t/t5515/refs.br-branches-one-octopus
 delete mode 100644 t/t5515/refs.br-branches-one-octopus_branches-one
 delete mode 100644 t/t5515/refs.br-branches-one_branches-one
 delete mode 100644 t/t5515/refs.br-remote-explicit
 delete mode 100644 t/t5515/refs.br-remote-explicit-merge
 delete mode 100644 t/t5515/refs.br-remote-explicit-merge_remote-explicit
 delete mode 100644 t/t5515/refs.br-remote-explicit-octopus
 delete mode 100644 t/t5515/refs.br-remote-explicit-octopus_remote-explicit
 delete mode 100644 t/t5515/refs.br-remote-explicit_remote-explicit
 delete mode 100644 t/t5515/refs.br-remote-glob
 delete mode 100644 t/t5515/refs.br-remote-glob-merge
 delete mode 100644 t/t5515/refs.br-remote-glob-merge_remote-glob
 delete mode 100644 t/t5515/refs.br-remote-glob-octopus
 delete mode 100644 t/t5515/refs.br-remote-glob-octopus_remote-glob
 delete mode 100644 t/t5515/refs.br-remote-glob_remote-glob
 delete mode 100644 t/t5515/refs.br-unconfig_branches-default
 delete mode 100644 t/t5515/refs.br-unconfig_branches-one
 delete mode 100644 t/t5515/refs.br-unconfig_remote-explicit
 delete mode 100644 t/t5515/refs.br-unconfig_remote-glob
 delete mode 100644 t/t5515/refs.master_branches-default
 delete mode 100644 t/t5515/refs.master_branches-one
 delete mode 100644 t/t5515/refs.master_remote-explicit
 delete mode 100644 t/t5515/refs.master_remote-glob

diff --git a/t/t5515-fetch-merge-logic.sh b/t/t5515-fetch-merge-logic.sh
index 36b0dbc01cf..19639ffe598 100755
--- a/t/t5515-fetch-merge-logic.sh
+++ b/t/t5515-fetch-merge-logic.sh
@@ -55,29 +55,6 @@ test_expect_success setup '
 	git config remote.config-glob.fetch refs/heads/*:refs/remotes/rem/* &&
 	remotes="$remotes config-glob" &&
 
-	mkdir -p .git/remotes &&
-	{
-		echo "URL: ../.git/"
-		echo "Pull: refs/heads/master:remotes/rem/master"
-		echo "Pull: refs/heads/one:remotes/rem/one"
-		echo "Pull: two:remotes/rem/two"
-		echo "Pull: refs/heads/three:remotes/rem/three"
-	} >.git/remotes/remote-explicit &&
-	remotes="$remotes remote-explicit" &&
-
-	{
-		echo "URL: ../.git/"
-		echo "Pull: refs/heads/*:refs/remotes/rem/*"
-	} >.git/remotes/remote-glob &&
-	remotes="$remotes remote-glob" &&
-
-	mkdir -p .git/branches &&
-	echo "../.git" > .git/branches/branches-default &&
-	remotes="$remotes branches-default" &&
-
-	echo "../.git#one" > .git/branches/branches-one &&
-	remotes="$remotes branches-one" &&
-
 	for remote in $remotes ; do
 		git config branch.br-$remote.remote $remote &&
 		git config branch.br-$remote-merge.remote $remote &&
diff --git a/t/t5515/fetch.br-branches-default b/t/t5515/fetch.br-branches-default
deleted file mode 100644
index a1bc3d53a60..00000000000
--- a/t/t5515/fetch.br-branches-default
+++ /dev/null
@@ -1,8 +0,0 @@
-# br-branches-default
-754b754407bf032e9a2f9d5a9ad05ca79a6b228f		branch 'master' of ../
-6c9dec2b923228c9ff994c6cfe4ae16c12408dc5	not-for-merge	tag 'tag-master' of ../
-8e32a6d901327a23ef831511badce7bf3bf46689	not-for-merge	tag 'tag-one' of ../
-22feea448b023a2d864ef94b013735af34d238ba	not-for-merge	tag 'tag-one-tree' of ../
-c61a82b60967180544e3c19f819ddbd0c9f89899	not-for-merge	tag 'tag-three' of ../
-0e3b14047d3ee365f4f2a1b673db059c3972589c	not-for-merge	tag 'tag-three-file' of ../
-525b7fb068d59950d185a8779dc957c77eed73ba	not-for-merge	tag 'tag-two' of ../
diff --git a/t/t5515/fetch.br-branches-default-merge b/t/t5515/fetch.br-branches-default-merge
deleted file mode 100644
index 12ab08e8acb..00000000000
--- a/t/t5515/fetch.br-branches-default-merge
+++ /dev/null
@@ -1,9 +0,0 @@
-# br-branches-default-merge
-0567da4d5edd2ff4bb292a465ba9e64dcad9536b		branch 'three' of ../
-754b754407bf032e9a2f9d5a9ad05ca79a6b228f	not-for-merge	branch 'master' of ../
-6c9dec2b923228c9ff994c6cfe4ae16c12408dc5	not-for-merge	tag 'tag-master' of ../
-8e32a6d901327a23ef831511badce7bf3bf46689	not-for-merge	tag 'tag-one' of ../
-22feea448b023a2d864ef94b013735af34d238ba	not-for-merge	tag 'tag-one-tree' of ../
-c61a82b60967180544e3c19f819ddbd0c9f89899	not-for-merge	tag 'tag-three' of ../
-0e3b14047d3ee365f4f2a1b673db059c3972589c	not-for-merge	tag 'tag-three-file' of ../
-525b7fb068d59950d185a8779dc957c77eed73ba	not-for-merge	tag 'tag-two' of ../
diff --git a/t/t5515/fetch.br-branches-default-merge_branches-default b/t/t5515/fetch.br-branches-default-merge_branches-default
deleted file mode 100644
index 54427522dd5..00000000000
--- a/t/t5515/fetch.br-branches-default-merge_branches-default
+++ /dev/null
@@ -1,9 +0,0 @@
-# br-branches-default-merge branches-default
-0567da4d5edd2ff4bb292a465ba9e64dcad9536b		branch 'three' of ../
-754b754407bf032e9a2f9d5a9ad05ca79a6b228f	not-for-merge	branch 'master' of ../
-6c9dec2b923228c9ff994c6cfe4ae16c12408dc5	not-for-merge	tag 'tag-master' of ../
-8e32a6d901327a23ef831511badce7bf3bf46689	not-for-merge	tag 'tag-one' of ../
-22feea448b023a2d864ef94b013735af34d238ba	not-for-merge	tag 'tag-one-tree' of ../
-c61a82b60967180544e3c19f819ddbd0c9f89899	not-for-merge	tag 'tag-three' of ../
-0e3b14047d3ee365f4f2a1b673db059c3972589c	not-for-merge	tag 'tag-three-file' of ../
-525b7fb068d59950d185a8779dc957c77eed73ba	not-for-merge	tag 'tag-two' of ../
diff --git a/t/t5515/fetch.br-branches-default-octopus b/t/t5515/fetch.br-branches-default-octopus
deleted file mode 100644
index 498a761aae8..00000000000
--- a/t/t5515/fetch.br-branches-default-octopus
+++ /dev/null
@@ -1,10 +0,0 @@
-# br-branches-default-octopus
-8e32a6d901327a23ef831511badce7bf3bf46689		branch 'one' of ../
-6134ee8f857693b96ff1cc98d3e2fd62b199e5a8		branch 'two' of ../
-754b754407bf032e9a2f9d5a9ad05ca79a6b228f	not-for-merge	branch 'master' of ../
-6c9dec2b923228c9ff994c6cfe4ae16c12408dc5	not-for-merge	tag 'tag-master' of ../
-8e32a6d901327a23ef831511badce7bf3bf46689	not-for-merge	tag 'tag-one' of ../
-22feea448b023a2d864ef94b013735af34d238ba	not-for-merge	tag 'tag-one-tree' of ../
-c61a82b60967180544e3c19f819ddbd0c9f89899	not-for-merge	tag 'tag-three' of ../
-0e3b14047d3ee365f4f2a1b673db059c3972589c	not-for-merge	tag 'tag-three-file' of ../
-525b7fb068d59950d185a8779dc957c77eed73ba	not-for-merge	tag 'tag-two' of ../
diff --git a/t/t5515/fetch.br-branches-default-octopus_branches-default b/t/t5515/fetch.br-branches-default-octopus_branches-default
deleted file mode 100644
index 0857f134e10..00000000000
--- a/t/t5515/fetch.br-branches-default-octopus_branches-default
+++ /dev/null
@@ -1,10 +0,0 @@
-# br-branches-default-octopus branches-default
-8e32a6d901327a23ef831511badce7bf3bf46689		branch 'one' of ../
-6134ee8f857693b96ff1cc98d3e2fd62b199e5a8		branch 'two' of ../
-754b754407bf032e9a2f9d5a9ad05ca79a6b228f	not-for-merge	branch 'master' of ../
-6c9dec2b923228c9ff994c6cfe4ae16c12408dc5	not-for-merge	tag 'tag-master' of ../
-8e32a6d901327a23ef831511badce7bf3bf46689	not-for-merge	tag 'tag-one' of ../
-22feea448b023a2d864ef94b013735af34d238ba	not-for-merge	tag 'tag-one-tree' of ../
-c61a82b60967180544e3c19f819ddbd0c9f89899	not-for-merge	tag 'tag-three' of ../
-0e3b14047d3ee365f4f2a1b673db059c3972589c	not-for-merge	tag 'tag-three-file' of ../
-525b7fb068d59950d185a8779dc957c77eed73ba	not-for-merge	tag 'tag-two' of ../
diff --git a/t/t5515/fetch.br-branches-default_branches-default b/t/t5515/fetch.br-branches-default_branches-default
deleted file mode 100644
index 8cbd7189362..00000000000
--- a/t/t5515/fetch.br-branches-default_branches-default
+++ /dev/null
@@ -1,8 +0,0 @@
-# br-branches-default branches-default
-754b754407bf032e9a2f9d5a9ad05ca79a6b228f		branch 'master' of ../
-6c9dec2b923228c9ff994c6cfe4ae16c12408dc5	not-for-merge	tag 'tag-master' of ../
-8e32a6d901327a23ef831511badce7bf3bf46689	not-for-merge	tag 'tag-one' of ../
-22feea448b023a2d864ef94b013735af34d238ba	not-for-merge	tag 'tag-one-tree' of ../
-c61a82b60967180544e3c19f819ddbd0c9f89899	not-for-merge	tag 'tag-three' of ../
-0e3b14047d3ee365f4f2a1b673db059c3972589c	not-for-merge	tag 'tag-three-file' of ../
-525b7fb068d59950d185a8779dc957c77eed73ba	not-for-merge	tag 'tag-two' of ../
diff --git a/t/t5515/fetch.br-branches-one b/t/t5515/fetch.br-branches-one
deleted file mode 100644
index c98f6705263..00000000000
--- a/t/t5515/fetch.br-branches-one
+++ /dev/null
@@ -1,8 +0,0 @@
-# br-branches-one
-8e32a6d901327a23ef831511badce7bf3bf46689		branch 'one' of ../
-6c9dec2b923228c9ff994c6cfe4ae16c12408dc5	not-for-merge	tag 'tag-master' of ../
-8e32a6d901327a23ef831511badce7bf3bf46689	not-for-merge	tag 'tag-one' of ../
-22feea448b023a2d864ef94b013735af34d238ba	not-for-merge	tag 'tag-one-tree' of ../
-c61a82b60967180544e3c19f819ddbd0c9f89899	not-for-merge	tag 'tag-three' of ../
-0e3b14047d3ee365f4f2a1b673db059c3972589c	not-for-merge	tag 'tag-three-file' of ../
-525b7fb068d59950d185a8779dc957c77eed73ba	not-for-merge	tag 'tag-two' of ../
diff --git a/t/t5515/fetch.br-branches-one-merge b/t/t5515/fetch.br-branches-one-merge
deleted file mode 100644
index 54a77420d5d..00000000000
--- a/t/t5515/fetch.br-branches-one-merge
+++ /dev/null
@@ -1,9 +0,0 @@
-# br-branches-one-merge
-0567da4d5edd2ff4bb292a465ba9e64dcad9536b		branch 'three' of ../
-8e32a6d901327a23ef831511badce7bf3bf46689	not-for-merge	branch 'one' of ../
-6c9dec2b923228c9ff994c6cfe4ae16c12408dc5	not-for-merge	tag 'tag-master' of ../
-8e32a6d901327a23ef831511badce7bf3bf46689	not-for-merge	tag 'tag-one' of ../
-22feea448b023a2d864ef94b013735af34d238ba	not-for-merge	tag 'tag-one-tree' of ../
-c61a82b60967180544e3c19f819ddbd0c9f89899	not-for-merge	tag 'tag-three' of ../
-0e3b14047d3ee365f4f2a1b673db059c3972589c	not-for-merge	tag 'tag-three-file' of ../
-525b7fb068d59950d185a8779dc957c77eed73ba	not-for-merge	tag 'tag-two' of ../
diff --git a/t/t5515/fetch.br-branches-one-merge_branches-one b/t/t5515/fetch.br-branches-one-merge_branches-one
deleted file mode 100644
index b4d1bb0b0ba..00000000000
--- a/t/t5515/fetch.br-branches-one-merge_branches-one
+++ /dev/null
@@ -1,9 +0,0 @@
-# br-branches-one-merge branches-one
-0567da4d5edd2ff4bb292a465ba9e64dcad9536b		branch 'three' of ../
-8e32a6d901327a23ef831511badce7bf3bf46689	not-for-merge	branch 'one' of ../
-6c9dec2b923228c9ff994c6cfe4ae16c12408dc5	not-for-merge	tag 'tag-master' of ../
-8e32a6d901327a23ef831511badce7bf3bf46689	not-for-merge	tag 'tag-one' of ../
-22feea448b023a2d864ef94b013735af34d238ba	not-for-merge	tag 'tag-one-tree' of ../
-c61a82b60967180544e3c19f819ddbd0c9f89899	not-for-merge	tag 'tag-three' of ../
-0e3b14047d3ee365f4f2a1b673db059c3972589c	not-for-merge	tag 'tag-three-file' of ../
-525b7fb068d59950d185a8779dc957c77eed73ba	not-for-merge	tag 'tag-two' of ../
diff --git a/t/t5515/fetch.br-branches-one-octopus b/t/t5515/fetch.br-branches-one-octopus
deleted file mode 100644
index 97c4b544b8c..00000000000
--- a/t/t5515/fetch.br-branches-one-octopus
+++ /dev/null
@@ -1,9 +0,0 @@
-# br-branches-one-octopus
-8e32a6d901327a23ef831511badce7bf3bf46689		branch 'one' of ../
-6134ee8f857693b96ff1cc98d3e2fd62b199e5a8		branch 'two' of ../
-6c9dec2b923228c9ff994c6cfe4ae16c12408dc5	not-for-merge	tag 'tag-master' of ../
-8e32a6d901327a23ef831511badce7bf3bf46689	not-for-merge	tag 'tag-one' of ../
-22feea448b023a2d864ef94b013735af34d238ba	not-for-merge	tag 'tag-one-tree' of ../
-c61a82b60967180544e3c19f819ddbd0c9f89899	not-for-merge	tag 'tag-three' of ../
-0e3b14047d3ee365f4f2a1b673db059c3972589c	not-for-merge	tag 'tag-three-file' of ../
-525b7fb068d59950d185a8779dc957c77eed73ba	not-for-merge	tag 'tag-two' of ../
diff --git a/t/t5515/fetch.br-branches-one-octopus_branches-one b/t/t5515/fetch.br-branches-one-octopus_branches-one
deleted file mode 100644
index df705f74c7d..00000000000
--- a/t/t5515/fetch.br-branches-one-octopus_branches-one
+++ /dev/null
@@ -1,9 +0,0 @@
-# br-branches-one-octopus branches-one
-8e32a6d901327a23ef831511badce7bf3bf46689		branch 'one' of ../
-6134ee8f857693b96ff1cc98d3e2fd62b199e5a8		branch 'two' of ../
-6c9dec2b923228c9ff994c6cfe4ae16c12408dc5	not-for-merge	tag 'tag-master' of ../
-8e32a6d901327a23ef831511badce7bf3bf46689	not-for-merge	tag 'tag-one' of ../
-22feea448b023a2d864ef94b013735af34d238ba	not-for-merge	tag 'tag-one-tree' of ../
-c61a82b60967180544e3c19f819ddbd0c9f89899	not-for-merge	tag 'tag-three' of ../
-0e3b14047d3ee365f4f2a1b673db059c3972589c	not-for-merge	tag 'tag-three-file' of ../
-525b7fb068d59950d185a8779dc957c77eed73ba	not-for-merge	tag 'tag-two' of ../
diff --git a/t/t5515/fetch.br-branches-one_branches-one b/t/t5515/fetch.br-branches-one_branches-one
deleted file mode 100644
index 96890e5bd99..00000000000
--- a/t/t5515/fetch.br-branches-one_branches-one
+++ /dev/null
@@ -1,8 +0,0 @@
-# br-branches-one branches-one
-8e32a6d901327a23ef831511badce7bf3bf46689		branch 'one' of ../
-6c9dec2b923228c9ff994c6cfe4ae16c12408dc5	not-for-merge	tag 'tag-master' of ../
-8e32a6d901327a23ef831511badce7bf3bf46689	not-for-merge	tag 'tag-one' of ../
-22feea448b023a2d864ef94b013735af34d238ba	not-for-merge	tag 'tag-one-tree' of ../
-c61a82b60967180544e3c19f819ddbd0c9f89899	not-for-merge	tag 'tag-three' of ../
-0e3b14047d3ee365f4f2a1b673db059c3972589c	not-for-merge	tag 'tag-three-file' of ../
-525b7fb068d59950d185a8779dc957c77eed73ba	not-for-merge	tag 'tag-two' of ../
diff --git a/t/t5515/fetch.br-remote-explicit b/t/t5515/fetch.br-remote-explicit
deleted file mode 100644
index ab44bc55196..00000000000
--- a/t/t5515/fetch.br-remote-explicit
+++ /dev/null
@@ -1,11 +0,0 @@
-# br-remote-explicit
-754b754407bf032e9a2f9d5a9ad05ca79a6b228f		branch 'master' of ../
-8e32a6d901327a23ef831511badce7bf3bf46689	not-for-merge	branch 'one' of ../
-6134ee8f857693b96ff1cc98d3e2fd62b199e5a8	not-for-merge	branch 'two' of ../
-0567da4d5edd2ff4bb292a465ba9e64dcad9536b	not-for-merge	branch 'three' of ../
-6c9dec2b923228c9ff994c6cfe4ae16c12408dc5	not-for-merge	tag 'tag-master' of ../
-8e32a6d901327a23ef831511badce7bf3bf46689	not-for-merge	tag 'tag-one' of ../
-22feea448b023a2d864ef94b013735af34d238ba	not-for-merge	tag 'tag-one-tree' of ../
-c61a82b60967180544e3c19f819ddbd0c9f89899	not-for-merge	tag 'tag-three' of ../
-0e3b14047d3ee365f4f2a1b673db059c3972589c	not-for-merge	tag 'tag-three-file' of ../
-525b7fb068d59950d185a8779dc957c77eed73ba	not-for-merge	tag 'tag-two' of ../
diff --git a/t/t5515/fetch.br-remote-explicit-merge b/t/t5515/fetch.br-remote-explicit-merge
deleted file mode 100644
index d018b3515f7..00000000000
--- a/t/t5515/fetch.br-remote-explicit-merge
+++ /dev/null
@@ -1,11 +0,0 @@
-# br-remote-explicit-merge
-0567da4d5edd2ff4bb292a465ba9e64dcad9536b		branch 'three' of ../
-754b754407bf032e9a2f9d5a9ad05ca79a6b228f	not-for-merge	branch 'master' of ../
-8e32a6d901327a23ef831511badce7bf3bf46689	not-for-merge	branch 'one' of ../
-6134ee8f857693b96ff1cc98d3e2fd62b199e5a8	not-for-merge	branch 'two' of ../
-6c9dec2b923228c9ff994c6cfe4ae16c12408dc5	not-for-merge	tag 'tag-master' of ../
-8e32a6d901327a23ef831511badce7bf3bf46689	not-for-merge	tag 'tag-one' of ../
-22feea448b023a2d864ef94b013735af34d238ba	not-for-merge	tag 'tag-one-tree' of ../
-c61a82b60967180544e3c19f819ddbd0c9f89899	not-for-merge	tag 'tag-three' of ../
-0e3b14047d3ee365f4f2a1b673db059c3972589c	not-for-merge	tag 'tag-three-file' of ../
-525b7fb068d59950d185a8779dc957c77eed73ba	not-for-merge	tag 'tag-two' of ../
diff --git a/t/t5515/fetch.br-remote-explicit-merge_remote-explicit b/t/t5515/fetch.br-remote-explicit-merge_remote-explicit
deleted file mode 100644
index 0d3d780dd0c..00000000000
--- a/t/t5515/fetch.br-remote-explicit-merge_remote-explicit
+++ /dev/null
@@ -1,11 +0,0 @@
-# br-remote-explicit-merge remote-explicit
-0567da4d5edd2ff4bb292a465ba9e64dcad9536b		branch 'three' of ../
-754b754407bf032e9a2f9d5a9ad05ca79a6b228f	not-for-merge	branch 'master' of ../
-8e32a6d901327a23ef831511badce7bf3bf46689	not-for-merge	branch 'one' of ../
-6134ee8f857693b96ff1cc98d3e2fd62b199e5a8	not-for-merge	branch 'two' of ../
-6c9dec2b923228c9ff994c6cfe4ae16c12408dc5	not-for-merge	tag 'tag-master' of ../
-8e32a6d901327a23ef831511badce7bf3bf46689	not-for-merge	tag 'tag-one' of ../
-22feea448b023a2d864ef94b013735af34d238ba	not-for-merge	tag 'tag-one-tree' of ../
-c61a82b60967180544e3c19f819ddbd0c9f89899	not-for-merge	tag 'tag-three' of ../
-0e3b14047d3ee365f4f2a1b673db059c3972589c	not-for-merge	tag 'tag-three-file' of ../
-525b7fb068d59950d185a8779dc957c77eed73ba	not-for-merge	tag 'tag-two' of ../
diff --git a/t/t5515/fetch.br-remote-explicit-octopus b/t/t5515/fetch.br-remote-explicit-octopus
deleted file mode 100644
index 6f843044ede..00000000000
--- a/t/t5515/fetch.br-remote-explicit-octopus
+++ /dev/null
@@ -1,11 +0,0 @@
-# br-remote-explicit-octopus
-8e32a6d901327a23ef831511badce7bf3bf46689		branch 'one' of ../
-6134ee8f857693b96ff1cc98d3e2fd62b199e5a8		branch 'two' of ../
-754b754407bf032e9a2f9d5a9ad05ca79a6b228f	not-for-merge	branch 'master' of ../
-0567da4d5edd2ff4bb292a465ba9e64dcad9536b	not-for-merge	branch 'three' of ../
-6c9dec2b923228c9ff994c6cfe4ae16c12408dc5	not-for-merge	tag 'tag-master' of ../
-8e32a6d901327a23ef831511badce7bf3bf46689	not-for-merge	tag 'tag-one' of ../
-22feea448b023a2d864ef94b013735af34d238ba	not-for-merge	tag 'tag-one-tree' of ../
-c61a82b60967180544e3c19f819ddbd0c9f89899	not-for-merge	tag 'tag-three' of ../
-0e3b14047d3ee365f4f2a1b673db059c3972589c	not-for-merge	tag 'tag-three-file' of ../
-525b7fb068d59950d185a8779dc957c77eed73ba	not-for-merge	tag 'tag-two' of ../
diff --git a/t/t5515/fetch.br-remote-explicit-octopus_remote-explicit b/t/t5515/fetch.br-remote-explicit-octopus_remote-explicit
deleted file mode 100644
index 3546a837136..00000000000
--- a/t/t5515/fetch.br-remote-explicit-octopus_remote-explicit
+++ /dev/null
@@ -1,11 +0,0 @@
-# br-remote-explicit-octopus remote-explicit
-8e32a6d901327a23ef831511badce7bf3bf46689		branch 'one' of ../
-6134ee8f857693b96ff1cc98d3e2fd62b199e5a8		branch 'two' of ../
-754b754407bf032e9a2f9d5a9ad05ca79a6b228f	not-for-merge	branch 'master' of ../
-0567da4d5edd2ff4bb292a465ba9e64dcad9536b	not-for-merge	branch 'three' of ../
-6c9dec2b923228c9ff994c6cfe4ae16c12408dc5	not-for-merge	tag 'tag-master' of ../
-8e32a6d901327a23ef831511badce7bf3bf46689	not-for-merge	tag 'tag-one' of ../
-22feea448b023a2d864ef94b013735af34d238ba	not-for-merge	tag 'tag-one-tree' of ../
-c61a82b60967180544e3c19f819ddbd0c9f89899	not-for-merge	tag 'tag-three' of ../
-0e3b14047d3ee365f4f2a1b673db059c3972589c	not-for-merge	tag 'tag-three-file' of ../
-525b7fb068d59950d185a8779dc957c77eed73ba	not-for-merge	tag 'tag-two' of ../
diff --git a/t/t5515/fetch.br-remote-explicit_remote-explicit b/t/t5515/fetch.br-remote-explicit_remote-explicit
deleted file mode 100644
index 01e014e6a02..00000000000
--- a/t/t5515/fetch.br-remote-explicit_remote-explicit
+++ /dev/null
@@ -1,11 +0,0 @@
-# br-remote-explicit remote-explicit
-754b754407bf032e9a2f9d5a9ad05ca79a6b228f		branch 'master' of ../
-8e32a6d901327a23ef831511badce7bf3bf46689	not-for-merge	branch 'one' of ../
-6134ee8f857693b96ff1cc98d3e2fd62b199e5a8	not-for-merge	branch 'two' of ../
-0567da4d5edd2ff4bb292a465ba9e64dcad9536b	not-for-merge	branch 'three' of ../
-6c9dec2b923228c9ff994c6cfe4ae16c12408dc5	not-for-merge	tag 'tag-master' of ../
-8e32a6d901327a23ef831511badce7bf3bf46689	not-for-merge	tag 'tag-one' of ../
-22feea448b023a2d864ef94b013735af34d238ba	not-for-merge	tag 'tag-one-tree' of ../
-c61a82b60967180544e3c19f819ddbd0c9f89899	not-for-merge	tag 'tag-three' of ../
-0e3b14047d3ee365f4f2a1b673db059c3972589c	not-for-merge	tag 'tag-three-file' of ../
-525b7fb068d59950d185a8779dc957c77eed73ba	not-for-merge	tag 'tag-two' of ../
diff --git a/t/t5515/fetch.br-remote-glob b/t/t5515/fetch.br-remote-glob
deleted file mode 100644
index 09bfcee00f9..00000000000
--- a/t/t5515/fetch.br-remote-glob
+++ /dev/null
@@ -1,11 +0,0 @@
-# br-remote-glob
-754b754407bf032e9a2f9d5a9ad05ca79a6b228f	not-for-merge	branch 'master' of ../
-8e32a6d901327a23ef831511badce7bf3bf46689	not-for-merge	branch 'one' of ../
-0567da4d5edd2ff4bb292a465ba9e64dcad9536b	not-for-merge	branch 'three' of ../
-6134ee8f857693b96ff1cc98d3e2fd62b199e5a8	not-for-merge	branch 'two' of ../
-6c9dec2b923228c9ff994c6cfe4ae16c12408dc5	not-for-merge	tag 'tag-master' of ../
-8e32a6d901327a23ef831511badce7bf3bf46689	not-for-merge	tag 'tag-one' of ../
-22feea448b023a2d864ef94b013735af34d238ba	not-for-merge	tag 'tag-one-tree' of ../
-c61a82b60967180544e3c19f819ddbd0c9f89899	not-for-merge	tag 'tag-three' of ../
-0e3b14047d3ee365f4f2a1b673db059c3972589c	not-for-merge	tag 'tag-three-file' of ../
-525b7fb068d59950d185a8779dc957c77eed73ba	not-for-merge	tag 'tag-two' of ../
diff --git a/t/t5515/fetch.br-remote-glob-merge b/t/t5515/fetch.br-remote-glob-merge
deleted file mode 100644
index 7e1a433a64f..00000000000
--- a/t/t5515/fetch.br-remote-glob-merge
+++ /dev/null
@@ -1,11 +0,0 @@
-# br-remote-glob-merge
-0567da4d5edd2ff4bb292a465ba9e64dcad9536b		branch 'three' of ../
-754b754407bf032e9a2f9d5a9ad05ca79a6b228f	not-for-merge	branch 'master' of ../
-8e32a6d901327a23ef831511badce7bf3bf46689	not-for-merge	branch 'one' of ../
-6134ee8f857693b96ff1cc98d3e2fd62b199e5a8	not-for-merge	branch 'two' of ../
-6c9dec2b923228c9ff994c6cfe4ae16c12408dc5	not-for-merge	tag 'tag-master' of ../
-8e32a6d901327a23ef831511badce7bf3bf46689	not-for-merge	tag 'tag-one' of ../
-22feea448b023a2d864ef94b013735af34d238ba	not-for-merge	tag 'tag-one-tree' of ../
-c61a82b60967180544e3c19f819ddbd0c9f89899	not-for-merge	tag 'tag-three' of ../
-0e3b14047d3ee365f4f2a1b673db059c3972589c	not-for-merge	tag 'tag-three-file' of ../
-525b7fb068d59950d185a8779dc957c77eed73ba	not-for-merge	tag 'tag-two' of ../
diff --git a/t/t5515/fetch.br-remote-glob-merge_remote-glob b/t/t5515/fetch.br-remote-glob-merge_remote-glob
deleted file mode 100644
index 53571bb4ec6..00000000000
--- a/t/t5515/fetch.br-remote-glob-merge_remote-glob
+++ /dev/null
@@ -1,11 +0,0 @@
-# br-remote-glob-merge remote-glob
-0567da4d5edd2ff4bb292a465ba9e64dcad9536b		branch 'three' of ../
-754b754407bf032e9a2f9d5a9ad05ca79a6b228f	not-for-merge	branch 'master' of ../
-8e32a6d901327a23ef831511badce7bf3bf46689	not-for-merge	branch 'one' of ../
-6134ee8f857693b96ff1cc98d3e2fd62b199e5a8	not-for-merge	branch 'two' of ../
-6c9dec2b923228c9ff994c6cfe4ae16c12408dc5	not-for-merge	tag 'tag-master' of ../
-8e32a6d901327a23ef831511badce7bf3bf46689	not-for-merge	tag 'tag-one' of ../
-22feea448b023a2d864ef94b013735af34d238ba	not-for-merge	tag 'tag-one-tree' of ../
-c61a82b60967180544e3c19f819ddbd0c9f89899	not-for-merge	tag 'tag-three' of ../
-0e3b14047d3ee365f4f2a1b673db059c3972589c	not-for-merge	tag 'tag-three-file' of ../
-525b7fb068d59950d185a8779dc957c77eed73ba	not-for-merge	tag 'tag-two' of ../
diff --git a/t/t5515/fetch.br-remote-glob-octopus b/t/t5515/fetch.br-remote-glob-octopus
deleted file mode 100644
index c7c8b6d7f47..00000000000
--- a/t/t5515/fetch.br-remote-glob-octopus
+++ /dev/null
@@ -1,11 +0,0 @@
-# br-remote-glob-octopus
-8e32a6d901327a23ef831511badce7bf3bf46689		branch 'one' of ../
-6134ee8f857693b96ff1cc98d3e2fd62b199e5a8		branch 'two' of ../
-754b754407bf032e9a2f9d5a9ad05ca79a6b228f	not-for-merge	branch 'master' of ../
-0567da4d5edd2ff4bb292a465ba9e64dcad9536b	not-for-merge	branch 'three' of ../
-6c9dec2b923228c9ff994c6cfe4ae16c12408dc5	not-for-merge	tag 'tag-master' of ../
-8e32a6d901327a23ef831511badce7bf3bf46689	not-for-merge	tag 'tag-one' of ../
-22feea448b023a2d864ef94b013735af34d238ba	not-for-merge	tag 'tag-one-tree' of ../
-c61a82b60967180544e3c19f819ddbd0c9f89899	not-for-merge	tag 'tag-three' of ../
-0e3b14047d3ee365f4f2a1b673db059c3972589c	not-for-merge	tag 'tag-three-file' of ../
-525b7fb068d59950d185a8779dc957c77eed73ba	not-for-merge	tag 'tag-two' of ../
diff --git a/t/t5515/fetch.br-remote-glob-octopus_remote-glob b/t/t5515/fetch.br-remote-glob-octopus_remote-glob
deleted file mode 100644
index 36076fba0cc..00000000000
--- a/t/t5515/fetch.br-remote-glob-octopus_remote-glob
+++ /dev/null
@@ -1,11 +0,0 @@
-# br-remote-glob-octopus remote-glob
-8e32a6d901327a23ef831511badce7bf3bf46689		branch 'one' of ../
-6134ee8f857693b96ff1cc98d3e2fd62b199e5a8		branch 'two' of ../
-754b754407bf032e9a2f9d5a9ad05ca79a6b228f	not-for-merge	branch 'master' of ../
-0567da4d5edd2ff4bb292a465ba9e64dcad9536b	not-for-merge	branch 'three' of ../
-6c9dec2b923228c9ff994c6cfe4ae16c12408dc5	not-for-merge	tag 'tag-master' of ../
-8e32a6d901327a23ef831511badce7bf3bf46689	not-for-merge	tag 'tag-one' of ../
-22feea448b023a2d864ef94b013735af34d238ba	not-for-merge	tag 'tag-one-tree' of ../
-c61a82b60967180544e3c19f819ddbd0c9f89899	not-for-merge	tag 'tag-three' of ../
-0e3b14047d3ee365f4f2a1b673db059c3972589c	not-for-merge	tag 'tag-three-file' of ../
-525b7fb068d59950d185a8779dc957c77eed73ba	not-for-merge	tag 'tag-two' of ../
diff --git a/t/t5515/fetch.br-remote-glob_remote-glob b/t/t5515/fetch.br-remote-glob_remote-glob
deleted file mode 100644
index 20ba5cb1725..00000000000
--- a/t/t5515/fetch.br-remote-glob_remote-glob
+++ /dev/null
@@ -1,11 +0,0 @@
-# br-remote-glob remote-glob
-754b754407bf032e9a2f9d5a9ad05ca79a6b228f	not-for-merge	branch 'master' of ../
-8e32a6d901327a23ef831511badce7bf3bf46689	not-for-merge	branch 'one' of ../
-0567da4d5edd2ff4bb292a465ba9e64dcad9536b	not-for-merge	branch 'three' of ../
-6134ee8f857693b96ff1cc98d3e2fd62b199e5a8	not-for-merge	branch 'two' of ../
-6c9dec2b923228c9ff994c6cfe4ae16c12408dc5	not-for-merge	tag 'tag-master' of ../
-8e32a6d901327a23ef831511badce7bf3bf46689	not-for-merge	tag 'tag-one' of ../
-22feea448b023a2d864ef94b013735af34d238ba	not-for-merge	tag 'tag-one-tree' of ../
-c61a82b60967180544e3c19f819ddbd0c9f89899	not-for-merge	tag 'tag-three' of ../
-0e3b14047d3ee365f4f2a1b673db059c3972589c	not-for-merge	tag 'tag-three-file' of ../
-525b7fb068d59950d185a8779dc957c77eed73ba	not-for-merge	tag 'tag-two' of ../
diff --git a/t/t5515/fetch.br-unconfig_branches-default b/t/t5515/fetch.br-unconfig_branches-default
deleted file mode 100644
index da30e3c62c2..00000000000
--- a/t/t5515/fetch.br-unconfig_branches-default
+++ /dev/null
@@ -1,8 +0,0 @@
-# br-unconfig branches-default
-754b754407bf032e9a2f9d5a9ad05ca79a6b228f		branch 'master' of ../
-6c9dec2b923228c9ff994c6cfe4ae16c12408dc5	not-for-merge	tag 'tag-master' of ../
-8e32a6d901327a23ef831511badce7bf3bf46689	not-for-merge	tag 'tag-one' of ../
-22feea448b023a2d864ef94b013735af34d238ba	not-for-merge	tag 'tag-one-tree' of ../
-c61a82b60967180544e3c19f819ddbd0c9f89899	not-for-merge	tag 'tag-three' of ../
-0e3b14047d3ee365f4f2a1b673db059c3972589c	not-for-merge	tag 'tag-three-file' of ../
-525b7fb068d59950d185a8779dc957c77eed73ba	not-for-merge	tag 'tag-two' of ../
diff --git a/t/t5515/fetch.br-unconfig_branches-one b/t/t5515/fetch.br-unconfig_branches-one
deleted file mode 100644
index e4614314c54..00000000000
--- a/t/t5515/fetch.br-unconfig_branches-one
+++ /dev/null
@@ -1,8 +0,0 @@
-# br-unconfig branches-one
-8e32a6d901327a23ef831511badce7bf3bf46689		branch 'one' of ../
-6c9dec2b923228c9ff994c6cfe4ae16c12408dc5	not-for-merge	tag 'tag-master' of ../
-8e32a6d901327a23ef831511badce7bf3bf46689	not-for-merge	tag 'tag-one' of ../
-22feea448b023a2d864ef94b013735af34d238ba	not-for-merge	tag 'tag-one-tree' of ../
-c61a82b60967180544e3c19f819ddbd0c9f89899	not-for-merge	tag 'tag-three' of ../
-0e3b14047d3ee365f4f2a1b673db059c3972589c	not-for-merge	tag 'tag-three-file' of ../
-525b7fb068d59950d185a8779dc957c77eed73ba	not-for-merge	tag 'tag-two' of ../
diff --git a/t/t5515/fetch.br-unconfig_remote-explicit b/t/t5515/fetch.br-unconfig_remote-explicit
deleted file mode 100644
index 6318dd11b4c..00000000000
--- a/t/t5515/fetch.br-unconfig_remote-explicit
+++ /dev/null
@@ -1,11 +0,0 @@
-# br-unconfig remote-explicit
-754b754407bf032e9a2f9d5a9ad05ca79a6b228f		branch 'master' of ../
-8e32a6d901327a23ef831511badce7bf3bf46689	not-for-merge	branch 'one' of ../
-6134ee8f857693b96ff1cc98d3e2fd62b199e5a8	not-for-merge	branch 'two' of ../
-0567da4d5edd2ff4bb292a465ba9e64dcad9536b	not-for-merge	branch 'three' of ../
-6c9dec2b923228c9ff994c6cfe4ae16c12408dc5	not-for-merge	tag 'tag-master' of ../
-8e32a6d901327a23ef831511badce7bf3bf46689	not-for-merge	tag 'tag-one' of ../
-22feea448b023a2d864ef94b013735af34d238ba	not-for-merge	tag 'tag-one-tree' of ../
-c61a82b60967180544e3c19f819ddbd0c9f89899	not-for-merge	tag 'tag-three' of ../
-0e3b14047d3ee365f4f2a1b673db059c3972589c	not-for-merge	tag 'tag-three-file' of ../
-525b7fb068d59950d185a8779dc957c77eed73ba	not-for-merge	tag 'tag-two' of ../
diff --git a/t/t5515/fetch.br-unconfig_remote-glob b/t/t5515/fetch.br-unconfig_remote-glob
deleted file mode 100644
index 1d9afad7d84..00000000000
--- a/t/t5515/fetch.br-unconfig_remote-glob
+++ /dev/null
@@ -1,11 +0,0 @@
-# br-unconfig remote-glob
-754b754407bf032e9a2f9d5a9ad05ca79a6b228f	not-for-merge	branch 'master' of ../
-8e32a6d901327a23ef831511badce7bf3bf46689	not-for-merge	branch 'one' of ../
-0567da4d5edd2ff4bb292a465ba9e64dcad9536b	not-for-merge	branch 'three' of ../
-6134ee8f857693b96ff1cc98d3e2fd62b199e5a8	not-for-merge	branch 'two' of ../
-6c9dec2b923228c9ff994c6cfe4ae16c12408dc5	not-for-merge	tag 'tag-master' of ../
-8e32a6d901327a23ef831511badce7bf3bf46689	not-for-merge	tag 'tag-one' of ../
-22feea448b023a2d864ef94b013735af34d238ba	not-for-merge	tag 'tag-one-tree' of ../
-c61a82b60967180544e3c19f819ddbd0c9f89899	not-for-merge	tag 'tag-three' of ../
-0e3b14047d3ee365f4f2a1b673db059c3972589c	not-for-merge	tag 'tag-three-file' of ../
-525b7fb068d59950d185a8779dc957c77eed73ba	not-for-merge	tag 'tag-two' of ../
diff --git a/t/t5515/fetch.master_branches-default b/t/t5515/fetch.master_branches-default
deleted file mode 100644
index 2eedd3bfa4a..00000000000
--- a/t/t5515/fetch.master_branches-default
+++ /dev/null
@@ -1,8 +0,0 @@
-# master branches-default
-754b754407bf032e9a2f9d5a9ad05ca79a6b228f		branch 'master' of ../
-6c9dec2b923228c9ff994c6cfe4ae16c12408dc5	not-for-merge	tag 'tag-master' of ../
-8e32a6d901327a23ef831511badce7bf3bf46689	not-for-merge	tag 'tag-one' of ../
-22feea448b023a2d864ef94b013735af34d238ba	not-for-merge	tag 'tag-one-tree' of ../
-c61a82b60967180544e3c19f819ddbd0c9f89899	not-for-merge	tag 'tag-three' of ../
-0e3b14047d3ee365f4f2a1b673db059c3972589c	not-for-merge	tag 'tag-three-file' of ../
-525b7fb068d59950d185a8779dc957c77eed73ba	not-for-merge	tag 'tag-two' of ../
diff --git a/t/t5515/fetch.master_branches-one b/t/t5515/fetch.master_branches-one
deleted file mode 100644
index 901ce21d333..00000000000
--- a/t/t5515/fetch.master_branches-one
+++ /dev/null
@@ -1,8 +0,0 @@
-# master branches-one
-8e32a6d901327a23ef831511badce7bf3bf46689		branch 'one' of ../
-6c9dec2b923228c9ff994c6cfe4ae16c12408dc5	not-for-merge	tag 'tag-master' of ../
-8e32a6d901327a23ef831511badce7bf3bf46689	not-for-merge	tag 'tag-one' of ../
-22feea448b023a2d864ef94b013735af34d238ba	not-for-merge	tag 'tag-one-tree' of ../
-c61a82b60967180544e3c19f819ddbd0c9f89899	not-for-merge	tag 'tag-three' of ../
-0e3b14047d3ee365f4f2a1b673db059c3972589c	not-for-merge	tag 'tag-three-file' of ../
-525b7fb068d59950d185a8779dc957c77eed73ba	not-for-merge	tag 'tag-two' of ../
diff --git a/t/t5515/fetch.master_remote-explicit b/t/t5515/fetch.master_remote-explicit
deleted file mode 100644
index b3cfe6b98b2..00000000000
--- a/t/t5515/fetch.master_remote-explicit
+++ /dev/null
@@ -1,11 +0,0 @@
-# master remote-explicit
-754b754407bf032e9a2f9d5a9ad05ca79a6b228f		branch 'master' of ../
-8e32a6d901327a23ef831511badce7bf3bf46689	not-for-merge	branch 'one' of ../
-6134ee8f857693b96ff1cc98d3e2fd62b199e5a8	not-for-merge	branch 'two' of ../
-0567da4d5edd2ff4bb292a465ba9e64dcad9536b	not-for-merge	branch 'three' of ../
-6c9dec2b923228c9ff994c6cfe4ae16c12408dc5	not-for-merge	tag 'tag-master' of ../
-8e32a6d901327a23ef831511badce7bf3bf46689	not-for-merge	tag 'tag-one' of ../
-22feea448b023a2d864ef94b013735af34d238ba	not-for-merge	tag 'tag-one-tree' of ../
-c61a82b60967180544e3c19f819ddbd0c9f89899	not-for-merge	tag 'tag-three' of ../
-0e3b14047d3ee365f4f2a1b673db059c3972589c	not-for-merge	tag 'tag-three-file' of ../
-525b7fb068d59950d185a8779dc957c77eed73ba	not-for-merge	tag 'tag-two' of ../
diff --git a/t/t5515/fetch.master_remote-glob b/t/t5515/fetch.master_remote-glob
deleted file mode 100644
index 118befd1e48..00000000000
--- a/t/t5515/fetch.master_remote-glob
+++ /dev/null
@@ -1,11 +0,0 @@
-# master remote-glob
-754b754407bf032e9a2f9d5a9ad05ca79a6b228f	not-for-merge	branch 'master' of ../
-8e32a6d901327a23ef831511badce7bf3bf46689	not-for-merge	branch 'one' of ../
-0567da4d5edd2ff4bb292a465ba9e64dcad9536b	not-for-merge	branch 'three' of ../
-6134ee8f857693b96ff1cc98d3e2fd62b199e5a8	not-for-merge	branch 'two' of ../
-6c9dec2b923228c9ff994c6cfe4ae16c12408dc5	not-for-merge	tag 'tag-master' of ../
-8e32a6d901327a23ef831511badce7bf3bf46689	not-for-merge	tag 'tag-one' of ../
-22feea448b023a2d864ef94b013735af34d238ba	not-for-merge	tag 'tag-one-tree' of ../
-c61a82b60967180544e3c19f819ddbd0c9f89899	not-for-merge	tag 'tag-three' of ../
-0e3b14047d3ee365f4f2a1b673db059c3972589c	not-for-merge	tag 'tag-three-file' of ../
-525b7fb068d59950d185a8779dc957c77eed73ba	not-for-merge	tag 'tag-two' of ../
diff --git a/t/t5515/refs.br-branches-default b/t/t5515/refs.br-branches-default
deleted file mode 100644
index 21917c1e5db..00000000000
--- a/t/t5515/refs.br-branches-default
+++ /dev/null
@@ -1,12 +0,0 @@
-754b754407bf032e9a2f9d5a9ad05ca79a6b228f refs/heads/branches-default
-0567da4d5edd2ff4bb292a465ba9e64dcad9536b refs/remotes/origin/HEAD
-754b754407bf032e9a2f9d5a9ad05ca79a6b228f refs/remotes/origin/master
-8e32a6d901327a23ef831511badce7bf3bf46689 refs/remotes/origin/one
-0567da4d5edd2ff4bb292a465ba9e64dcad9536b refs/remotes/origin/three
-6134ee8f857693b96ff1cc98d3e2fd62b199e5a8 refs/remotes/origin/two
-6c9dec2b923228c9ff994c6cfe4ae16c12408dc5 refs/tags/tag-master
-8e32a6d901327a23ef831511badce7bf3bf46689 refs/tags/tag-one
-22feea448b023a2d864ef94b013735af34d238ba refs/tags/tag-one-tree
-c61a82b60967180544e3c19f819ddbd0c9f89899 refs/tags/tag-three
-0e3b14047d3ee365f4f2a1b673db059c3972589c refs/tags/tag-three-file
-525b7fb068d59950d185a8779dc957c77eed73ba refs/tags/tag-two
diff --git a/t/t5515/refs.br-branches-default-merge b/t/t5515/refs.br-branches-default-merge
deleted file mode 100644
index 21917c1e5db..00000000000
--- a/t/t5515/refs.br-branches-default-merge
+++ /dev/null
@@ -1,12 +0,0 @@
-754b754407bf032e9a2f9d5a9ad05ca79a6b228f refs/heads/branches-default
-0567da4d5edd2ff4bb292a465ba9e64dcad9536b refs/remotes/origin/HEAD
-754b754407bf032e9a2f9d5a9ad05ca79a6b228f refs/remotes/origin/master
-8e32a6d901327a23ef831511badce7bf3bf46689 refs/remotes/origin/one
-0567da4d5edd2ff4bb292a465ba9e64dcad9536b refs/remotes/origin/three
-6134ee8f857693b96ff1cc98d3e2fd62b199e5a8 refs/remotes/origin/two
-6c9dec2b923228c9ff994c6cfe4ae16c12408dc5 refs/tags/tag-master
-8e32a6d901327a23ef831511badce7bf3bf46689 refs/tags/tag-one
-22feea448b023a2d864ef94b013735af34d238ba refs/tags/tag-one-tree
-c61a82b60967180544e3c19f819ddbd0c9f89899 refs/tags/tag-three
-0e3b14047d3ee365f4f2a1b673db059c3972589c refs/tags/tag-three-file
-525b7fb068d59950d185a8779dc957c77eed73ba refs/tags/tag-two
diff --git a/t/t5515/refs.br-branches-default-merge_branches-default b/t/t5515/refs.br-branches-default-merge_branches-default
deleted file mode 100644
index 21917c1e5db..00000000000
--- a/t/t5515/refs.br-branches-default-merge_branches-default
+++ /dev/null
@@ -1,12 +0,0 @@
-754b754407bf032e9a2f9d5a9ad05ca79a6b228f refs/heads/branches-default
-0567da4d5edd2ff4bb292a465ba9e64dcad9536b refs/remotes/origin/HEAD
-754b754407bf032e9a2f9d5a9ad05ca79a6b228f refs/remotes/origin/master
-8e32a6d901327a23ef831511badce7bf3bf46689 refs/remotes/origin/one
-0567da4d5edd2ff4bb292a465ba9e64dcad9536b refs/remotes/origin/three
-6134ee8f857693b96ff1cc98d3e2fd62b199e5a8 refs/remotes/origin/two
-6c9dec2b923228c9ff994c6cfe4ae16c12408dc5 refs/tags/tag-master
-8e32a6d901327a23ef831511badce7bf3bf46689 refs/tags/tag-one
-22feea448b023a2d864ef94b013735af34d238ba refs/tags/tag-one-tree
-c61a82b60967180544e3c19f819ddbd0c9f89899 refs/tags/tag-three
-0e3b14047d3ee365f4f2a1b673db059c3972589c refs/tags/tag-three-file
-525b7fb068d59950d185a8779dc957c77eed73ba refs/tags/tag-two
diff --git a/t/t5515/refs.br-branches-default-octopus b/t/t5515/refs.br-branches-default-octopus
deleted file mode 100644
index 21917c1e5db..00000000000
--- a/t/t5515/refs.br-branches-default-octopus
+++ /dev/null
@@ -1,12 +0,0 @@
-754b754407bf032e9a2f9d5a9ad05ca79a6b228f refs/heads/branches-default
-0567da4d5edd2ff4bb292a465ba9e64dcad9536b refs/remotes/origin/HEAD
-754b754407bf032e9a2f9d5a9ad05ca79a6b228f refs/remotes/origin/master
-8e32a6d901327a23ef831511badce7bf3bf46689 refs/remotes/origin/one
-0567da4d5edd2ff4bb292a465ba9e64dcad9536b refs/remotes/origin/three
-6134ee8f857693b96ff1cc98d3e2fd62b199e5a8 refs/remotes/origin/two
-6c9dec2b923228c9ff994c6cfe4ae16c12408dc5 refs/tags/tag-master
-8e32a6d901327a23ef831511badce7bf3bf46689 refs/tags/tag-one
-22feea448b023a2d864ef94b013735af34d238ba refs/tags/tag-one-tree
-c61a82b60967180544e3c19f819ddbd0c9f89899 refs/tags/tag-three
-0e3b14047d3ee365f4f2a1b673db059c3972589c refs/tags/tag-three-file
-525b7fb068d59950d185a8779dc957c77eed73ba refs/tags/tag-two
diff --git a/t/t5515/refs.br-branches-default-octopus_branches-default b/t/t5515/refs.br-branches-default-octopus_branches-default
deleted file mode 100644
index 21917c1e5db..00000000000
--- a/t/t5515/refs.br-branches-default-octopus_branches-default
+++ /dev/null
@@ -1,12 +0,0 @@
-754b754407bf032e9a2f9d5a9ad05ca79a6b228f refs/heads/branches-default
-0567da4d5edd2ff4bb292a465ba9e64dcad9536b refs/remotes/origin/HEAD
-754b754407bf032e9a2f9d5a9ad05ca79a6b228f refs/remotes/origin/master
-8e32a6d901327a23ef831511badce7bf3bf46689 refs/remotes/origin/one
-0567da4d5edd2ff4bb292a465ba9e64dcad9536b refs/remotes/origin/three
-6134ee8f857693b96ff1cc98d3e2fd62b199e5a8 refs/remotes/origin/two
-6c9dec2b923228c9ff994c6cfe4ae16c12408dc5 refs/tags/tag-master
-8e32a6d901327a23ef831511badce7bf3bf46689 refs/tags/tag-one
-22feea448b023a2d864ef94b013735af34d238ba refs/tags/tag-one-tree
-c61a82b60967180544e3c19f819ddbd0c9f89899 refs/tags/tag-three
-0e3b14047d3ee365f4f2a1b673db059c3972589c refs/tags/tag-three-file
-525b7fb068d59950d185a8779dc957c77eed73ba refs/tags/tag-two
diff --git a/t/t5515/refs.br-branches-default_branches-default b/t/t5515/refs.br-branches-default_branches-default
deleted file mode 100644
index 21917c1e5db..00000000000
--- a/t/t5515/refs.br-branches-default_branches-default
+++ /dev/null
@@ -1,12 +0,0 @@
-754b754407bf032e9a2f9d5a9ad05ca79a6b228f refs/heads/branches-default
-0567da4d5edd2ff4bb292a465ba9e64dcad9536b refs/remotes/origin/HEAD
-754b754407bf032e9a2f9d5a9ad05ca79a6b228f refs/remotes/origin/master
-8e32a6d901327a23ef831511badce7bf3bf46689 refs/remotes/origin/one
-0567da4d5edd2ff4bb292a465ba9e64dcad9536b refs/remotes/origin/three
-6134ee8f857693b96ff1cc98d3e2fd62b199e5a8 refs/remotes/origin/two
-6c9dec2b923228c9ff994c6cfe4ae16c12408dc5 refs/tags/tag-master
-8e32a6d901327a23ef831511badce7bf3bf46689 refs/tags/tag-one
-22feea448b023a2d864ef94b013735af34d238ba refs/tags/tag-one-tree
-c61a82b60967180544e3c19f819ddbd0c9f89899 refs/tags/tag-three
-0e3b14047d3ee365f4f2a1b673db059c3972589c refs/tags/tag-three-file
-525b7fb068d59950d185a8779dc957c77eed73ba refs/tags/tag-two
diff --git a/t/t5515/refs.br-branches-one b/t/t5515/refs.br-branches-one
deleted file mode 100644
index 8a705a5df25..00000000000
--- a/t/t5515/refs.br-branches-one
+++ /dev/null
@@ -1,12 +0,0 @@
-8e32a6d901327a23ef831511badce7bf3bf46689 refs/heads/branches-one
-0567da4d5edd2ff4bb292a465ba9e64dcad9536b refs/remotes/origin/HEAD
-754b754407bf032e9a2f9d5a9ad05ca79a6b228f refs/remotes/origin/master
-8e32a6d901327a23ef831511badce7bf3bf46689 refs/remotes/origin/one
-0567da4d5edd2ff4bb292a465ba9e64dcad9536b refs/remotes/origin/three
-6134ee8f857693b96ff1cc98d3e2fd62b199e5a8 refs/remotes/origin/two
-6c9dec2b923228c9ff994c6cfe4ae16c12408dc5 refs/tags/tag-master
-8e32a6d901327a23ef831511badce7bf3bf46689 refs/tags/tag-one
-22feea448b023a2d864ef94b013735af34d238ba refs/tags/tag-one-tree
-c61a82b60967180544e3c19f819ddbd0c9f89899 refs/tags/tag-three
-0e3b14047d3ee365f4f2a1b673db059c3972589c refs/tags/tag-three-file
-525b7fb068d59950d185a8779dc957c77eed73ba refs/tags/tag-two
diff --git a/t/t5515/refs.br-branches-one-merge b/t/t5515/refs.br-branches-one-merge
deleted file mode 100644
index 8a705a5df25..00000000000
--- a/t/t5515/refs.br-branches-one-merge
+++ /dev/null
@@ -1,12 +0,0 @@
-8e32a6d901327a23ef831511badce7bf3bf46689 refs/heads/branches-one
-0567da4d5edd2ff4bb292a465ba9e64dcad9536b refs/remotes/origin/HEAD
-754b754407bf032e9a2f9d5a9ad05ca79a6b228f refs/remotes/origin/master
-8e32a6d901327a23ef831511badce7bf3bf46689 refs/remotes/origin/one
-0567da4d5edd2ff4bb292a465ba9e64dcad9536b refs/remotes/origin/three
-6134ee8f857693b96ff1cc98d3e2fd62b199e5a8 refs/remotes/origin/two
-6c9dec2b923228c9ff994c6cfe4ae16c12408dc5 refs/tags/tag-master
-8e32a6d901327a23ef831511badce7bf3bf46689 refs/tags/tag-one
-22feea448b023a2d864ef94b013735af34d238ba refs/tags/tag-one-tree
-c61a82b60967180544e3c19f819ddbd0c9f89899 refs/tags/tag-three
-0e3b14047d3ee365f4f2a1b673db059c3972589c refs/tags/tag-three-file
-525b7fb068d59950d185a8779dc957c77eed73ba refs/tags/tag-two
diff --git a/t/t5515/refs.br-branches-one-merge_branches-one b/t/t5515/refs.br-branches-one-merge_branches-one
deleted file mode 100644
index 8a705a5df25..00000000000
--- a/t/t5515/refs.br-branches-one-merge_branches-one
+++ /dev/null
@@ -1,12 +0,0 @@
-8e32a6d901327a23ef831511badce7bf3bf46689 refs/heads/branches-one
-0567da4d5edd2ff4bb292a465ba9e64dcad9536b refs/remotes/origin/HEAD
-754b754407bf032e9a2f9d5a9ad05ca79a6b228f refs/remotes/origin/master
-8e32a6d901327a23ef831511badce7bf3bf46689 refs/remotes/origin/one
-0567da4d5edd2ff4bb292a465ba9e64dcad9536b refs/remotes/origin/three
-6134ee8f857693b96ff1cc98d3e2fd62b199e5a8 refs/remotes/origin/two
-6c9dec2b923228c9ff994c6cfe4ae16c12408dc5 refs/tags/tag-master
-8e32a6d901327a23ef831511badce7bf3bf46689 refs/tags/tag-one
-22feea448b023a2d864ef94b013735af34d238ba refs/tags/tag-one-tree
-c61a82b60967180544e3c19f819ddbd0c9f89899 refs/tags/tag-three
-0e3b14047d3ee365f4f2a1b673db059c3972589c refs/tags/tag-three-file
-525b7fb068d59950d185a8779dc957c77eed73ba refs/tags/tag-two
diff --git a/t/t5515/refs.br-branches-one-octopus b/t/t5515/refs.br-branches-one-octopus
deleted file mode 100644
index 8a705a5df25..00000000000
--- a/t/t5515/refs.br-branches-one-octopus
+++ /dev/null
@@ -1,12 +0,0 @@
-8e32a6d901327a23ef831511badce7bf3bf46689 refs/heads/branches-one
-0567da4d5edd2ff4bb292a465ba9e64dcad9536b refs/remotes/origin/HEAD
-754b754407bf032e9a2f9d5a9ad05ca79a6b228f refs/remotes/origin/master
-8e32a6d901327a23ef831511badce7bf3bf46689 refs/remotes/origin/one
-0567da4d5edd2ff4bb292a465ba9e64dcad9536b refs/remotes/origin/three
-6134ee8f857693b96ff1cc98d3e2fd62b199e5a8 refs/remotes/origin/two
-6c9dec2b923228c9ff994c6cfe4ae16c12408dc5 refs/tags/tag-master
-8e32a6d901327a23ef831511badce7bf3bf46689 refs/tags/tag-one
-22feea448b023a2d864ef94b013735af34d238ba refs/tags/tag-one-tree
-c61a82b60967180544e3c19f819ddbd0c9f89899 refs/tags/tag-three
-0e3b14047d3ee365f4f2a1b673db059c3972589c refs/tags/tag-three-file
-525b7fb068d59950d185a8779dc957c77eed73ba refs/tags/tag-two
diff --git a/t/t5515/refs.br-branches-one-octopus_branches-one b/t/t5515/refs.br-branches-one-octopus_branches-one
deleted file mode 100644
index 8a705a5df25..00000000000
--- a/t/t5515/refs.br-branches-one-octopus_branches-one
+++ /dev/null
@@ -1,12 +0,0 @@
-8e32a6d901327a23ef831511badce7bf3bf46689 refs/heads/branches-one
-0567da4d5edd2ff4bb292a465ba9e64dcad9536b refs/remotes/origin/HEAD
-754b754407bf032e9a2f9d5a9ad05ca79a6b228f refs/remotes/origin/master
-8e32a6d901327a23ef831511badce7bf3bf46689 refs/remotes/origin/one
-0567da4d5edd2ff4bb292a465ba9e64dcad9536b refs/remotes/origin/three
-6134ee8f857693b96ff1cc98d3e2fd62b199e5a8 refs/remotes/origin/two
-6c9dec2b923228c9ff994c6cfe4ae16c12408dc5 refs/tags/tag-master
-8e32a6d901327a23ef831511badce7bf3bf46689 refs/tags/tag-one
-22feea448b023a2d864ef94b013735af34d238ba refs/tags/tag-one-tree
-c61a82b60967180544e3c19f819ddbd0c9f89899 refs/tags/tag-three
-0e3b14047d3ee365f4f2a1b673db059c3972589c refs/tags/tag-three-file
-525b7fb068d59950d185a8779dc957c77eed73ba refs/tags/tag-two
diff --git a/t/t5515/refs.br-branches-one_branches-one b/t/t5515/refs.br-branches-one_branches-one
deleted file mode 100644
index 8a705a5df25..00000000000
--- a/t/t5515/refs.br-branches-one_branches-one
+++ /dev/null
@@ -1,12 +0,0 @@
-8e32a6d901327a23ef831511badce7bf3bf46689 refs/heads/branches-one
-0567da4d5edd2ff4bb292a465ba9e64dcad9536b refs/remotes/origin/HEAD
-754b754407bf032e9a2f9d5a9ad05ca79a6b228f refs/remotes/origin/master
-8e32a6d901327a23ef831511badce7bf3bf46689 refs/remotes/origin/one
-0567da4d5edd2ff4bb292a465ba9e64dcad9536b refs/remotes/origin/three
-6134ee8f857693b96ff1cc98d3e2fd62b199e5a8 refs/remotes/origin/two
-6c9dec2b923228c9ff994c6cfe4ae16c12408dc5 refs/tags/tag-master
-8e32a6d901327a23ef831511badce7bf3bf46689 refs/tags/tag-one
-22feea448b023a2d864ef94b013735af34d238ba refs/tags/tag-one-tree
-c61a82b60967180544e3c19f819ddbd0c9f89899 refs/tags/tag-three
-0e3b14047d3ee365f4f2a1b673db059c3972589c refs/tags/tag-three-file
-525b7fb068d59950d185a8779dc957c77eed73ba refs/tags/tag-two
diff --git a/t/t5515/refs.br-remote-explicit b/t/t5515/refs.br-remote-explicit
deleted file mode 100644
index 9bbbfd9fc53..00000000000
--- a/t/t5515/refs.br-remote-explicit
+++ /dev/null
@@ -1,15 +0,0 @@
-0567da4d5edd2ff4bb292a465ba9e64dcad9536b refs/remotes/origin/HEAD
-754b754407bf032e9a2f9d5a9ad05ca79a6b228f refs/remotes/origin/master
-8e32a6d901327a23ef831511badce7bf3bf46689 refs/remotes/origin/one
-0567da4d5edd2ff4bb292a465ba9e64dcad9536b refs/remotes/origin/three
-6134ee8f857693b96ff1cc98d3e2fd62b199e5a8 refs/remotes/origin/two
-754b754407bf032e9a2f9d5a9ad05ca79a6b228f refs/remotes/rem/master
-8e32a6d901327a23ef831511badce7bf3bf46689 refs/remotes/rem/one
-0567da4d5edd2ff4bb292a465ba9e64dcad9536b refs/remotes/rem/three
-6134ee8f857693b96ff1cc98d3e2fd62b199e5a8 refs/remotes/rem/two
-6c9dec2b923228c9ff994c6cfe4ae16c12408dc5 refs/tags/tag-master
-8e32a6d901327a23ef831511badce7bf3bf46689 refs/tags/tag-one
-22feea448b023a2d864ef94b013735af34d238ba refs/tags/tag-one-tree
-c61a82b60967180544e3c19f819ddbd0c9f89899 refs/tags/tag-three
-0e3b14047d3ee365f4f2a1b673db059c3972589c refs/tags/tag-three-file
-525b7fb068d59950d185a8779dc957c77eed73ba refs/tags/tag-two
diff --git a/t/t5515/refs.br-remote-explicit-merge b/t/t5515/refs.br-remote-explicit-merge
deleted file mode 100644
index 9bbbfd9fc53..00000000000
--- a/t/t5515/refs.br-remote-explicit-merge
+++ /dev/null
@@ -1,15 +0,0 @@
-0567da4d5edd2ff4bb292a465ba9e64dcad9536b refs/remotes/origin/HEAD
-754b754407bf032e9a2f9d5a9ad05ca79a6b228f refs/remotes/origin/master
-8e32a6d901327a23ef831511badce7bf3bf46689 refs/remotes/origin/one
-0567da4d5edd2ff4bb292a465ba9e64dcad9536b refs/remotes/origin/three
-6134ee8f857693b96ff1cc98d3e2fd62b199e5a8 refs/remotes/origin/two
-754b754407bf032e9a2f9d5a9ad05ca79a6b228f refs/remotes/rem/master
-8e32a6d901327a23ef831511badce7bf3bf46689 refs/remotes/rem/one
-0567da4d5edd2ff4bb292a465ba9e64dcad9536b refs/remotes/rem/three
-6134ee8f857693b96ff1cc98d3e2fd62b199e5a8 refs/remotes/rem/two
-6c9dec2b923228c9ff994c6cfe4ae16c12408dc5 refs/tags/tag-master
-8e32a6d901327a23ef831511badce7bf3bf46689 refs/tags/tag-one
-22feea448b023a2d864ef94b013735af34d238ba refs/tags/tag-one-tree
-c61a82b60967180544e3c19f819ddbd0c9f89899 refs/tags/tag-three
-0e3b14047d3ee365f4f2a1b673db059c3972589c refs/tags/tag-three-file
-525b7fb068d59950d185a8779dc957c77eed73ba refs/tags/tag-two
diff --git a/t/t5515/refs.br-remote-explicit-merge_remote-explicit b/t/t5515/refs.br-remote-explicit-merge_remote-explicit
deleted file mode 100644
index 9bbbfd9fc53..00000000000
--- a/t/t5515/refs.br-remote-explicit-merge_remote-explicit
+++ /dev/null
@@ -1,15 +0,0 @@
-0567da4d5edd2ff4bb292a465ba9e64dcad9536b refs/remotes/origin/HEAD
-754b754407bf032e9a2f9d5a9ad05ca79a6b228f refs/remotes/origin/master
-8e32a6d901327a23ef831511badce7bf3bf46689 refs/remotes/origin/one
-0567da4d5edd2ff4bb292a465ba9e64dcad9536b refs/remotes/origin/three
-6134ee8f857693b96ff1cc98d3e2fd62b199e5a8 refs/remotes/origin/two
-754b754407bf032e9a2f9d5a9ad05ca79a6b228f refs/remotes/rem/master
-8e32a6d901327a23ef831511badce7bf3bf46689 refs/remotes/rem/one
-0567da4d5edd2ff4bb292a465ba9e64dcad9536b refs/remotes/rem/three
-6134ee8f857693b96ff1cc98d3e2fd62b199e5a8 refs/remotes/rem/two
-6c9dec2b923228c9ff994c6cfe4ae16c12408dc5 refs/tags/tag-master
-8e32a6d901327a23ef831511badce7bf3bf46689 refs/tags/tag-one
-22feea448b023a2d864ef94b013735af34d238ba refs/tags/tag-one-tree
-c61a82b60967180544e3c19f819ddbd0c9f89899 refs/tags/tag-three
-0e3b14047d3ee365f4f2a1b673db059c3972589c refs/tags/tag-three-file
-525b7fb068d59950d185a8779dc957c77eed73ba refs/tags/tag-two
diff --git a/t/t5515/refs.br-remote-explicit-octopus b/t/t5515/refs.br-remote-explicit-octopus
deleted file mode 100644
index 9bbbfd9fc53..00000000000
--- a/t/t5515/refs.br-remote-explicit-octopus
+++ /dev/null
@@ -1,15 +0,0 @@
-0567da4d5edd2ff4bb292a465ba9e64dcad9536b refs/remotes/origin/HEAD
-754b754407bf032e9a2f9d5a9ad05ca79a6b228f refs/remotes/origin/master
-8e32a6d901327a23ef831511badce7bf3bf46689 refs/remotes/origin/one
-0567da4d5edd2ff4bb292a465ba9e64dcad9536b refs/remotes/origin/three
-6134ee8f857693b96ff1cc98d3e2fd62b199e5a8 refs/remotes/origin/two
-754b754407bf032e9a2f9d5a9ad05ca79a6b228f refs/remotes/rem/master
-8e32a6d901327a23ef831511badce7bf3bf46689 refs/remotes/rem/one
-0567da4d5edd2ff4bb292a465ba9e64dcad9536b refs/remotes/rem/three
-6134ee8f857693b96ff1cc98d3e2fd62b199e5a8 refs/remotes/rem/two
-6c9dec2b923228c9ff994c6cfe4ae16c12408dc5 refs/tags/tag-master
-8e32a6d901327a23ef831511badce7bf3bf46689 refs/tags/tag-one
-22feea448b023a2d864ef94b013735af34d238ba refs/tags/tag-one-tree
-c61a82b60967180544e3c19f819ddbd0c9f89899 refs/tags/tag-three
-0e3b14047d3ee365f4f2a1b673db059c3972589c refs/tags/tag-three-file
-525b7fb068d59950d185a8779dc957c77eed73ba refs/tags/tag-two
diff --git a/t/t5515/refs.br-remote-explicit-octopus_remote-explicit b/t/t5515/refs.br-remote-explicit-octopus_remote-explicit
deleted file mode 100644
index 9bbbfd9fc53..00000000000
--- a/t/t5515/refs.br-remote-explicit-octopus_remote-explicit
+++ /dev/null
@@ -1,15 +0,0 @@
-0567da4d5edd2ff4bb292a465ba9e64dcad9536b refs/remotes/origin/HEAD
-754b754407bf032e9a2f9d5a9ad05ca79a6b228f refs/remotes/origin/master
-8e32a6d901327a23ef831511badce7bf3bf46689 refs/remotes/origin/one
-0567da4d5edd2ff4bb292a465ba9e64dcad9536b refs/remotes/origin/three
-6134ee8f857693b96ff1cc98d3e2fd62b199e5a8 refs/remotes/origin/two
-754b754407bf032e9a2f9d5a9ad05ca79a6b228f refs/remotes/rem/master
-8e32a6d901327a23ef831511badce7bf3bf46689 refs/remotes/rem/one
-0567da4d5edd2ff4bb292a465ba9e64dcad9536b refs/remotes/rem/three
-6134ee8f857693b96ff1cc98d3e2fd62b199e5a8 refs/remotes/rem/two
-6c9dec2b923228c9ff994c6cfe4ae16c12408dc5 refs/tags/tag-master
-8e32a6d901327a23ef831511badce7bf3bf46689 refs/tags/tag-one
-22feea448b023a2d864ef94b013735af34d238ba refs/tags/tag-one-tree
-c61a82b60967180544e3c19f819ddbd0c9f89899 refs/tags/tag-three
-0e3b14047d3ee365f4f2a1b673db059c3972589c refs/tags/tag-three-file
-525b7fb068d59950d185a8779dc957c77eed73ba refs/tags/tag-two
diff --git a/t/t5515/refs.br-remote-explicit_remote-explicit b/t/t5515/refs.br-remote-explicit_remote-explicit
deleted file mode 100644
index 9bbbfd9fc53..00000000000
--- a/t/t5515/refs.br-remote-explicit_remote-explicit
+++ /dev/null
@@ -1,15 +0,0 @@
-0567da4d5edd2ff4bb292a465ba9e64dcad9536b refs/remotes/origin/HEAD
-754b754407bf032e9a2f9d5a9ad05ca79a6b228f refs/remotes/origin/master
-8e32a6d901327a23ef831511badce7bf3bf46689 refs/remotes/origin/one
-0567da4d5edd2ff4bb292a465ba9e64dcad9536b refs/remotes/origin/three
-6134ee8f857693b96ff1cc98d3e2fd62b199e5a8 refs/remotes/origin/two
-754b754407bf032e9a2f9d5a9ad05ca79a6b228f refs/remotes/rem/master
-8e32a6d901327a23ef831511badce7bf3bf46689 refs/remotes/rem/one
-0567da4d5edd2ff4bb292a465ba9e64dcad9536b refs/remotes/rem/three
-6134ee8f857693b96ff1cc98d3e2fd62b199e5a8 refs/remotes/rem/two
-6c9dec2b923228c9ff994c6cfe4ae16c12408dc5 refs/tags/tag-master
-8e32a6d901327a23ef831511badce7bf3bf46689 refs/tags/tag-one
-22feea448b023a2d864ef94b013735af34d238ba refs/tags/tag-one-tree
-c61a82b60967180544e3c19f819ddbd0c9f89899 refs/tags/tag-three
-0e3b14047d3ee365f4f2a1b673db059c3972589c refs/tags/tag-three-file
-525b7fb068d59950d185a8779dc957c77eed73ba refs/tags/tag-two
diff --git a/t/t5515/refs.br-remote-glob b/t/t5515/refs.br-remote-glob
deleted file mode 100644
index 9bbbfd9fc53..00000000000
--- a/t/t5515/refs.br-remote-glob
+++ /dev/null
@@ -1,15 +0,0 @@
-0567da4d5edd2ff4bb292a465ba9e64dcad9536b refs/remotes/origin/HEAD
-754b754407bf032e9a2f9d5a9ad05ca79a6b228f refs/remotes/origin/master
-8e32a6d901327a23ef831511badce7bf3bf46689 refs/remotes/origin/one
-0567da4d5edd2ff4bb292a465ba9e64dcad9536b refs/remotes/origin/three
-6134ee8f857693b96ff1cc98d3e2fd62b199e5a8 refs/remotes/origin/two
-754b754407bf032e9a2f9d5a9ad05ca79a6b228f refs/remotes/rem/master
-8e32a6d901327a23ef831511badce7bf3bf46689 refs/remotes/rem/one
-0567da4d5edd2ff4bb292a465ba9e64dcad9536b refs/remotes/rem/three
-6134ee8f857693b96ff1cc98d3e2fd62b199e5a8 refs/remotes/rem/two
-6c9dec2b923228c9ff994c6cfe4ae16c12408dc5 refs/tags/tag-master
-8e32a6d901327a23ef831511badce7bf3bf46689 refs/tags/tag-one
-22feea448b023a2d864ef94b013735af34d238ba refs/tags/tag-one-tree
-c61a82b60967180544e3c19f819ddbd0c9f89899 refs/tags/tag-three
-0e3b14047d3ee365f4f2a1b673db059c3972589c refs/tags/tag-three-file
-525b7fb068d59950d185a8779dc957c77eed73ba refs/tags/tag-two
diff --git a/t/t5515/refs.br-remote-glob-merge b/t/t5515/refs.br-remote-glob-merge
deleted file mode 100644
index 9bbbfd9fc53..00000000000
--- a/t/t5515/refs.br-remote-glob-merge
+++ /dev/null
@@ -1,15 +0,0 @@
-0567da4d5edd2ff4bb292a465ba9e64dcad9536b refs/remotes/origin/HEAD
-754b754407bf032e9a2f9d5a9ad05ca79a6b228f refs/remotes/origin/master
-8e32a6d901327a23ef831511badce7bf3bf46689 refs/remotes/origin/one
-0567da4d5edd2ff4bb292a465ba9e64dcad9536b refs/remotes/origin/three
-6134ee8f857693b96ff1cc98d3e2fd62b199e5a8 refs/remotes/origin/two
-754b754407bf032e9a2f9d5a9ad05ca79a6b228f refs/remotes/rem/master
-8e32a6d901327a23ef831511badce7bf3bf46689 refs/remotes/rem/one
-0567da4d5edd2ff4bb292a465ba9e64dcad9536b refs/remotes/rem/three
-6134ee8f857693b96ff1cc98d3e2fd62b199e5a8 refs/remotes/rem/two
-6c9dec2b923228c9ff994c6cfe4ae16c12408dc5 refs/tags/tag-master
-8e32a6d901327a23ef831511badce7bf3bf46689 refs/tags/tag-one
-22feea448b023a2d864ef94b013735af34d238ba refs/tags/tag-one-tree
-c61a82b60967180544e3c19f819ddbd0c9f89899 refs/tags/tag-three
-0e3b14047d3ee365f4f2a1b673db059c3972589c refs/tags/tag-three-file
-525b7fb068d59950d185a8779dc957c77eed73ba refs/tags/tag-two
diff --git a/t/t5515/refs.br-remote-glob-merge_remote-glob b/t/t5515/refs.br-remote-glob-merge_remote-glob
deleted file mode 100644
index 9bbbfd9fc53..00000000000
--- a/t/t5515/refs.br-remote-glob-merge_remote-glob
+++ /dev/null
@@ -1,15 +0,0 @@
-0567da4d5edd2ff4bb292a465ba9e64dcad9536b refs/remotes/origin/HEAD
-754b754407bf032e9a2f9d5a9ad05ca79a6b228f refs/remotes/origin/master
-8e32a6d901327a23ef831511badce7bf3bf46689 refs/remotes/origin/one
-0567da4d5edd2ff4bb292a465ba9e64dcad9536b refs/remotes/origin/three
-6134ee8f857693b96ff1cc98d3e2fd62b199e5a8 refs/remotes/origin/two
-754b754407bf032e9a2f9d5a9ad05ca79a6b228f refs/remotes/rem/master
-8e32a6d901327a23ef831511badce7bf3bf46689 refs/remotes/rem/one
-0567da4d5edd2ff4bb292a465ba9e64dcad9536b refs/remotes/rem/three
-6134ee8f857693b96ff1cc98d3e2fd62b199e5a8 refs/remotes/rem/two
-6c9dec2b923228c9ff994c6cfe4ae16c12408dc5 refs/tags/tag-master
-8e32a6d901327a23ef831511badce7bf3bf46689 refs/tags/tag-one
-22feea448b023a2d864ef94b013735af34d238ba refs/tags/tag-one-tree
-c61a82b60967180544e3c19f819ddbd0c9f89899 refs/tags/tag-three
-0e3b14047d3ee365f4f2a1b673db059c3972589c refs/tags/tag-three-file
-525b7fb068d59950d185a8779dc957c77eed73ba refs/tags/tag-two
diff --git a/t/t5515/refs.br-remote-glob-octopus b/t/t5515/refs.br-remote-glob-octopus
deleted file mode 100644
index 9bbbfd9fc53..00000000000
--- a/t/t5515/refs.br-remote-glob-octopus
+++ /dev/null
@@ -1,15 +0,0 @@
-0567da4d5edd2ff4bb292a465ba9e64dcad9536b refs/remotes/origin/HEAD
-754b754407bf032e9a2f9d5a9ad05ca79a6b228f refs/remotes/origin/master
-8e32a6d901327a23ef831511badce7bf3bf46689 refs/remotes/origin/one
-0567da4d5edd2ff4bb292a465ba9e64dcad9536b refs/remotes/origin/three
-6134ee8f857693b96ff1cc98d3e2fd62b199e5a8 refs/remotes/origin/two
-754b754407bf032e9a2f9d5a9ad05ca79a6b228f refs/remotes/rem/master
-8e32a6d901327a23ef831511badce7bf3bf46689 refs/remotes/rem/one
-0567da4d5edd2ff4bb292a465ba9e64dcad9536b refs/remotes/rem/three
-6134ee8f857693b96ff1cc98d3e2fd62b199e5a8 refs/remotes/rem/two
-6c9dec2b923228c9ff994c6cfe4ae16c12408dc5 refs/tags/tag-master
-8e32a6d901327a23ef831511badce7bf3bf46689 refs/tags/tag-one
-22feea448b023a2d864ef94b013735af34d238ba refs/tags/tag-one-tree
-c61a82b60967180544e3c19f819ddbd0c9f89899 refs/tags/tag-three
-0e3b14047d3ee365f4f2a1b673db059c3972589c refs/tags/tag-three-file
-525b7fb068d59950d185a8779dc957c77eed73ba refs/tags/tag-two
diff --git a/t/t5515/refs.br-remote-glob-octopus_remote-glob b/t/t5515/refs.br-remote-glob-octopus_remote-glob
deleted file mode 100644
index 9bbbfd9fc53..00000000000
--- a/t/t5515/refs.br-remote-glob-octopus_remote-glob
+++ /dev/null
@@ -1,15 +0,0 @@
-0567da4d5edd2ff4bb292a465ba9e64dcad9536b refs/remotes/origin/HEAD
-754b754407bf032e9a2f9d5a9ad05ca79a6b228f refs/remotes/origin/master
-8e32a6d901327a23ef831511badce7bf3bf46689 refs/remotes/origin/one
-0567da4d5edd2ff4bb292a465ba9e64dcad9536b refs/remotes/origin/three
-6134ee8f857693b96ff1cc98d3e2fd62b199e5a8 refs/remotes/origin/two
-754b754407bf032e9a2f9d5a9ad05ca79a6b228f refs/remotes/rem/master
-8e32a6d901327a23ef831511badce7bf3bf46689 refs/remotes/rem/one
-0567da4d5edd2ff4bb292a465ba9e64dcad9536b refs/remotes/rem/three
-6134ee8f857693b96ff1cc98d3e2fd62b199e5a8 refs/remotes/rem/two
-6c9dec2b923228c9ff994c6cfe4ae16c12408dc5 refs/tags/tag-master
-8e32a6d901327a23ef831511badce7bf3bf46689 refs/tags/tag-one
-22feea448b023a2d864ef94b013735af34d238ba refs/tags/tag-one-tree
-c61a82b60967180544e3c19f819ddbd0c9f89899 refs/tags/tag-three
-0e3b14047d3ee365f4f2a1b673db059c3972589c refs/tags/tag-three-file
-525b7fb068d59950d185a8779dc957c77eed73ba refs/tags/tag-two
diff --git a/t/t5515/refs.br-remote-glob_remote-glob b/t/t5515/refs.br-remote-glob_remote-glob
deleted file mode 100644
index 9bbbfd9fc53..00000000000
--- a/t/t5515/refs.br-remote-glob_remote-glob
+++ /dev/null
@@ -1,15 +0,0 @@
-0567da4d5edd2ff4bb292a465ba9e64dcad9536b refs/remotes/origin/HEAD
-754b754407bf032e9a2f9d5a9ad05ca79a6b228f refs/remotes/origin/master
-8e32a6d901327a23ef831511badce7bf3bf46689 refs/remotes/origin/one
-0567da4d5edd2ff4bb292a465ba9e64dcad9536b refs/remotes/origin/three
-6134ee8f857693b96ff1cc98d3e2fd62b199e5a8 refs/remotes/origin/two
-754b754407bf032e9a2f9d5a9ad05ca79a6b228f refs/remotes/rem/master
-8e32a6d901327a23ef831511badce7bf3bf46689 refs/remotes/rem/one
-0567da4d5edd2ff4bb292a465ba9e64dcad9536b refs/remotes/rem/three
-6134ee8f857693b96ff1cc98d3e2fd62b199e5a8 refs/remotes/rem/two
-6c9dec2b923228c9ff994c6cfe4ae16c12408dc5 refs/tags/tag-master
-8e32a6d901327a23ef831511badce7bf3bf46689 refs/tags/tag-one
-22feea448b023a2d864ef94b013735af34d238ba refs/tags/tag-one-tree
-c61a82b60967180544e3c19f819ddbd0c9f89899 refs/tags/tag-three
-0e3b14047d3ee365f4f2a1b673db059c3972589c refs/tags/tag-three-file
-525b7fb068d59950d185a8779dc957c77eed73ba refs/tags/tag-two
diff --git a/t/t5515/refs.br-unconfig_branches-default b/t/t5515/refs.br-unconfig_branches-default
deleted file mode 100644
index 21917c1e5db..00000000000
--- a/t/t5515/refs.br-unconfig_branches-default
+++ /dev/null
@@ -1,12 +0,0 @@
-754b754407bf032e9a2f9d5a9ad05ca79a6b228f refs/heads/branches-default
-0567da4d5edd2ff4bb292a465ba9e64dcad9536b refs/remotes/origin/HEAD
-754b754407bf032e9a2f9d5a9ad05ca79a6b228f refs/remotes/origin/master
-8e32a6d901327a23ef831511badce7bf3bf46689 refs/remotes/origin/one
-0567da4d5edd2ff4bb292a465ba9e64dcad9536b refs/remotes/origin/three
-6134ee8f857693b96ff1cc98d3e2fd62b199e5a8 refs/remotes/origin/two
-6c9dec2b923228c9ff994c6cfe4ae16c12408dc5 refs/tags/tag-master
-8e32a6d901327a23ef831511badce7bf3bf46689 refs/tags/tag-one
-22feea448b023a2d864ef94b013735af34d238ba refs/tags/tag-one-tree
-c61a82b60967180544e3c19f819ddbd0c9f89899 refs/tags/tag-three
-0e3b14047d3ee365f4f2a1b673db059c3972589c refs/tags/tag-three-file
-525b7fb068d59950d185a8779dc957c77eed73ba refs/tags/tag-two
diff --git a/t/t5515/refs.br-unconfig_branches-one b/t/t5515/refs.br-unconfig_branches-one
deleted file mode 100644
index 8a705a5df25..00000000000
--- a/t/t5515/refs.br-unconfig_branches-one
+++ /dev/null
@@ -1,12 +0,0 @@
-8e32a6d901327a23ef831511badce7bf3bf46689 refs/heads/branches-one
-0567da4d5edd2ff4bb292a465ba9e64dcad9536b refs/remotes/origin/HEAD
-754b754407bf032e9a2f9d5a9ad05ca79a6b228f refs/remotes/origin/master
-8e32a6d901327a23ef831511badce7bf3bf46689 refs/remotes/origin/one
-0567da4d5edd2ff4bb292a465ba9e64dcad9536b refs/remotes/origin/three
-6134ee8f857693b96ff1cc98d3e2fd62b199e5a8 refs/remotes/origin/two
-6c9dec2b923228c9ff994c6cfe4ae16c12408dc5 refs/tags/tag-master
-8e32a6d901327a23ef831511badce7bf3bf46689 refs/tags/tag-one
-22feea448b023a2d864ef94b013735af34d238ba refs/tags/tag-one-tree
-c61a82b60967180544e3c19f819ddbd0c9f89899 refs/tags/tag-three
-0e3b14047d3ee365f4f2a1b673db059c3972589c refs/tags/tag-three-file
-525b7fb068d59950d185a8779dc957c77eed73ba refs/tags/tag-two
diff --git a/t/t5515/refs.br-unconfig_remote-explicit b/t/t5515/refs.br-unconfig_remote-explicit
deleted file mode 100644
index 9bbbfd9fc53..00000000000
--- a/t/t5515/refs.br-unconfig_remote-explicit
+++ /dev/null
@@ -1,15 +0,0 @@
-0567da4d5edd2ff4bb292a465ba9e64dcad9536b refs/remotes/origin/HEAD
-754b754407bf032e9a2f9d5a9ad05ca79a6b228f refs/remotes/origin/master
-8e32a6d901327a23ef831511badce7bf3bf46689 refs/remotes/origin/one
-0567da4d5edd2ff4bb292a465ba9e64dcad9536b refs/remotes/origin/three
-6134ee8f857693b96ff1cc98d3e2fd62b199e5a8 refs/remotes/origin/two
-754b754407bf032e9a2f9d5a9ad05ca79a6b228f refs/remotes/rem/master
-8e32a6d901327a23ef831511badce7bf3bf46689 refs/remotes/rem/one
-0567da4d5edd2ff4bb292a465ba9e64dcad9536b refs/remotes/rem/three
-6134ee8f857693b96ff1cc98d3e2fd62b199e5a8 refs/remotes/rem/two
-6c9dec2b923228c9ff994c6cfe4ae16c12408dc5 refs/tags/tag-master
-8e32a6d901327a23ef831511badce7bf3bf46689 refs/tags/tag-one
-22feea448b023a2d864ef94b013735af34d238ba refs/tags/tag-one-tree
-c61a82b60967180544e3c19f819ddbd0c9f89899 refs/tags/tag-three
-0e3b14047d3ee365f4f2a1b673db059c3972589c refs/tags/tag-three-file
-525b7fb068d59950d185a8779dc957c77eed73ba refs/tags/tag-two
diff --git a/t/t5515/refs.br-unconfig_remote-glob b/t/t5515/refs.br-unconfig_remote-glob
deleted file mode 100644
index 9bbbfd9fc53..00000000000
--- a/t/t5515/refs.br-unconfig_remote-glob
+++ /dev/null
@@ -1,15 +0,0 @@
-0567da4d5edd2ff4bb292a465ba9e64dcad9536b refs/remotes/origin/HEAD
-754b754407bf032e9a2f9d5a9ad05ca79a6b228f refs/remotes/origin/master
-8e32a6d901327a23ef831511badce7bf3bf46689 refs/remotes/origin/one
-0567da4d5edd2ff4bb292a465ba9e64dcad9536b refs/remotes/origin/three
-6134ee8f857693b96ff1cc98d3e2fd62b199e5a8 refs/remotes/origin/two
-754b754407bf032e9a2f9d5a9ad05ca79a6b228f refs/remotes/rem/master
-8e32a6d901327a23ef831511badce7bf3bf46689 refs/remotes/rem/one
-0567da4d5edd2ff4bb292a465ba9e64dcad9536b refs/remotes/rem/three
-6134ee8f857693b96ff1cc98d3e2fd62b199e5a8 refs/remotes/rem/two
-6c9dec2b923228c9ff994c6cfe4ae16c12408dc5 refs/tags/tag-master
-8e32a6d901327a23ef831511badce7bf3bf46689 refs/tags/tag-one
-22feea448b023a2d864ef94b013735af34d238ba refs/tags/tag-one-tree
-c61a82b60967180544e3c19f819ddbd0c9f89899 refs/tags/tag-three
-0e3b14047d3ee365f4f2a1b673db059c3972589c refs/tags/tag-three-file
-525b7fb068d59950d185a8779dc957c77eed73ba refs/tags/tag-two
diff --git a/t/t5515/refs.master_branches-default b/t/t5515/refs.master_branches-default
deleted file mode 100644
index 21917c1e5db..00000000000
--- a/t/t5515/refs.master_branches-default
+++ /dev/null
@@ -1,12 +0,0 @@
-754b754407bf032e9a2f9d5a9ad05ca79a6b228f refs/heads/branches-default
-0567da4d5edd2ff4bb292a465ba9e64dcad9536b refs/remotes/origin/HEAD
-754b754407bf032e9a2f9d5a9ad05ca79a6b228f refs/remotes/origin/master
-8e32a6d901327a23ef831511badce7bf3bf46689 refs/remotes/origin/one
-0567da4d5edd2ff4bb292a465ba9e64dcad9536b refs/remotes/origin/three
-6134ee8f857693b96ff1cc98d3e2fd62b199e5a8 refs/remotes/origin/two
-6c9dec2b923228c9ff994c6cfe4ae16c12408dc5 refs/tags/tag-master
-8e32a6d901327a23ef831511badce7bf3bf46689 refs/tags/tag-one
-22feea448b023a2d864ef94b013735af34d238ba refs/tags/tag-one-tree
-c61a82b60967180544e3c19f819ddbd0c9f89899 refs/tags/tag-three
-0e3b14047d3ee365f4f2a1b673db059c3972589c refs/tags/tag-three-file
-525b7fb068d59950d185a8779dc957c77eed73ba refs/tags/tag-two
diff --git a/t/t5515/refs.master_branches-one b/t/t5515/refs.master_branches-one
deleted file mode 100644
index 8a705a5df25..00000000000
--- a/t/t5515/refs.master_branches-one
+++ /dev/null
@@ -1,12 +0,0 @@
-8e32a6d901327a23ef831511badce7bf3bf46689 refs/heads/branches-one
-0567da4d5edd2ff4bb292a465ba9e64dcad9536b refs/remotes/origin/HEAD
-754b754407bf032e9a2f9d5a9ad05ca79a6b228f refs/remotes/origin/master
-8e32a6d901327a23ef831511badce7bf3bf46689 refs/remotes/origin/one
-0567da4d5edd2ff4bb292a465ba9e64dcad9536b refs/remotes/origin/three
-6134ee8f857693b96ff1cc98d3e2fd62b199e5a8 refs/remotes/origin/two
-6c9dec2b923228c9ff994c6cfe4ae16c12408dc5 refs/tags/tag-master
-8e32a6d901327a23ef831511badce7bf3bf46689 refs/tags/tag-one
-22feea448b023a2d864ef94b013735af34d238ba refs/tags/tag-one-tree
-c61a82b60967180544e3c19f819ddbd0c9f89899 refs/tags/tag-three
-0e3b14047d3ee365f4f2a1b673db059c3972589c refs/tags/tag-three-file
-525b7fb068d59950d185a8779dc957c77eed73ba refs/tags/tag-two
diff --git a/t/t5515/refs.master_remote-explicit b/t/t5515/refs.master_remote-explicit
deleted file mode 100644
index 9bbbfd9fc53..00000000000
--- a/t/t5515/refs.master_remote-explicit
+++ /dev/null
@@ -1,15 +0,0 @@
-0567da4d5edd2ff4bb292a465ba9e64dcad9536b refs/remotes/origin/HEAD
-754b754407bf032e9a2f9d5a9ad05ca79a6b228f refs/remotes/origin/master
-8e32a6d901327a23ef831511badce7bf3bf46689 refs/remotes/origin/one
-0567da4d5edd2ff4bb292a465ba9e64dcad9536b refs/remotes/origin/three
-6134ee8f857693b96ff1cc98d3e2fd62b199e5a8 refs/remotes/origin/two
-754b754407bf032e9a2f9d5a9ad05ca79a6b228f refs/remotes/rem/master
-8e32a6d901327a23ef831511badce7bf3bf46689 refs/remotes/rem/one
-0567da4d5edd2ff4bb292a465ba9e64dcad9536b refs/remotes/rem/three
-6134ee8f857693b96ff1cc98d3e2fd62b199e5a8 refs/remotes/rem/two
-6c9dec2b923228c9ff994c6cfe4ae16c12408dc5 refs/tags/tag-master
-8e32a6d901327a23ef831511badce7bf3bf46689 refs/tags/tag-one
-22feea448b023a2d864ef94b013735af34d238ba refs/tags/tag-one-tree
-c61a82b60967180544e3c19f819ddbd0c9f89899 refs/tags/tag-three
-0e3b14047d3ee365f4f2a1b673db059c3972589c refs/tags/tag-three-file
-525b7fb068d59950d185a8779dc957c77eed73ba refs/tags/tag-two
diff --git a/t/t5515/refs.master_remote-glob b/t/t5515/refs.master_remote-glob
deleted file mode 100644
index 9bbbfd9fc53..00000000000
--- a/t/t5515/refs.master_remote-glob
+++ /dev/null
@@ -1,15 +0,0 @@
-0567da4d5edd2ff4bb292a465ba9e64dcad9536b refs/remotes/origin/HEAD
-754b754407bf032e9a2f9d5a9ad05ca79a6b228f refs/remotes/origin/master
-8e32a6d901327a23ef831511badce7bf3bf46689 refs/remotes/origin/one
-0567da4d5edd2ff4bb292a465ba9e64dcad9536b refs/remotes/origin/three
-6134ee8f857693b96ff1cc98d3e2fd62b199e5a8 refs/remotes/origin/two
-754b754407bf032e9a2f9d5a9ad05ca79a6b228f refs/remotes/rem/master
-8e32a6d901327a23ef831511badce7bf3bf46689 refs/remotes/rem/one
-0567da4d5edd2ff4bb292a465ba9e64dcad9536b refs/remotes/rem/three
-6134ee8f857693b96ff1cc98d3e2fd62b199e5a8 refs/remotes/rem/two
-6c9dec2b923228c9ff994c6cfe4ae16c12408dc5 refs/tags/tag-master
-8e32a6d901327a23ef831511badce7bf3bf46689 refs/tags/tag-one
-22feea448b023a2d864ef94b013735af34d238ba refs/tags/tag-one-tree
-c61a82b60967180544e3c19f819ddbd0c9f89899 refs/tags/tag-three
-0e3b14047d3ee365f4f2a1b673db059c3972589c refs/tags/tag-three-file
-525b7fb068d59950d185a8779dc957c77eed73ba refs/tags/tag-two
-- 
2.12.2.windows.2.800.gede8f145e06



^ permalink raw reply	[flat|nested] 62+ messages in thread

* [PATCH 10/11] PREVIEW: t0060: stop testing support for .git/remotes/ and .git/branches/
  2017-05-11 13:47 [PATCH 00/11] Start retiring .git/remotes/ and .git/branches/ for good Johannes Schindelin
                   ` (8 preceding siblings ...)
  2017-05-11 13:48 ` [PATCH 09/11] PREVIEW: t5515: remove .git/remotes/ and .git/branches/ tests Johannes Schindelin
@ 2017-05-11 13:48 ` Johannes Schindelin
  2017-05-11 13:48 ` [PATCH 11/11] PREVIEW: remove " Johannes Schindelin
                   ` (2 subsequent siblings)
  12 siblings, 0 replies; 62+ messages in thread
From: Johannes Schindelin @ 2017-05-11 13:48 UTC (permalink / raw)
  To: git; +Cc: Junio C Hamano

We are about to remove that feature for good.

Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
---
 t/t0060-path-utils.sh | 2 --
 1 file changed, 2 deletions(-)

diff --git a/t/t0060-path-utils.sh b/t/t0060-path-utils.sh
index 444b5a4df80..162c9a5a2f7 100755
--- a/t/t0060-path-utils.sh
+++ b/t/t0060-path-utils.sh
@@ -295,8 +295,6 @@ test_git_path GIT_COMMON_DIR=bar info/exclude             bar/info/exclude
 test_git_path GIT_COMMON_DIR=bar info/grafts              bar/info/grafts
 test_git_path GIT_COMMON_DIR=bar info/sparse-checkout     .git/info/sparse-checkout
 test_git_path GIT_COMMON_DIR=bar info//sparse-checkout    .git/info//sparse-checkout
-test_git_path GIT_COMMON_DIR=bar remotes/bar              bar/remotes/bar
-test_git_path GIT_COMMON_DIR=bar branches/bar             bar/branches/bar
 test_git_path GIT_COMMON_DIR=bar logs/refs/heads/master   bar/logs/refs/heads/master
 test_git_path GIT_COMMON_DIR=bar refs/heads/master        bar/refs/heads/master
 test_git_path GIT_COMMON_DIR=bar refs/bisect/foo          .git/refs/bisect/foo
-- 
2.12.2.windows.2.800.gede8f145e06



^ permalink raw reply	[flat|nested] 62+ messages in thread

* [PATCH 11/11] PREVIEW: remove support for .git/remotes/ and .git/branches/
  2017-05-11 13:47 [PATCH 00/11] Start retiring .git/remotes/ and .git/branches/ for good Johannes Schindelin
                   ` (9 preceding siblings ...)
  2017-05-11 13:48 ` [PATCH 10/11] PREVIEW: t0060: stop testing support for .git/remotes/ and .git/branches/ Johannes Schindelin
@ 2017-05-11 13:48 ` Johannes Schindelin
  2017-05-11 18:19   ` Stefan Beller
  2017-05-12  1:14 ` [PATCH 00/11] Start retiring .git/remotes/ and .git/branches/ for good Junio C Hamano
  2017-05-12  9:11 ` Jeff King
  12 siblings, 1 reply; 62+ messages in thread
From: Johannes Schindelin @ 2017-05-11 13:48 UTC (permalink / raw)
  To: git; +Cc: Junio C Hamano

At long last, after a cycle or three of warning users who *still* use
the ancient feature of .git/remotes/ and .git/branches/, it is time to
retire the code.

Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
---
 path.c   |  2 --
 remote.c | 96 ----------------------------------------------------------------
 remote.h |  4 +--
 3 files changed, 1 insertion(+), 101 deletions(-)

diff --git a/path.c b/path.c
index c1cb1cf6273..ee709bb2337 100644
--- a/path.c
+++ b/path.c
@@ -104,7 +104,6 @@ struct common_dir {
 };
 
 static struct common_dir common_list[] = {
-	{ 0, 1, 0, "branches" },
 	{ 0, 1, 0, "hooks" },
 	{ 0, 1, 0, "info" },
 	{ 0, 0, 1, "info/sparse-checkout" },
@@ -115,7 +114,6 @@ static struct common_dir common_list[] = {
 	{ 0, 1, 0, "objects" },
 	{ 0, 1, 0, "refs" },
 	{ 0, 1, 1, "refs/bisect" },
-	{ 0, 1, 0, "remotes" },
 	{ 0, 1, 0, "worktrees" },
 	{ 0, 1, 0, "rr-cache" },
 	{ 0, 1, 0, "svn" },
diff --git a/remote.c b/remote.c
index b2ae168035e..914ff74c0d2 100644
--- a/remote.c
+++ b/remote.c
@@ -241,89 +241,6 @@ static void add_instead_of(struct rewrite *rewrite, const char *instead_of)
 	rewrite->instead_of_nr++;
 }
 
-static const char *skip_spaces(const char *s)
-{
-	while (isspace(*s))
-		s++;
-	return s;
-}
-
-static void read_remotes_file(struct remote *remote)
-{
-	struct strbuf buf = STRBUF_INIT;
-	FILE *f = fopen(git_path("remotes/%s", remote->name), "r");
-
-	if (!f)
-		return;
-
-	warning(_("the remote '%s' uses the long-deprecated '%s' file"),
-		remote->name, git_path("branches/%s", remote->name));
-
-	remote->configured_in_repo = 1;
-	remote->origin = REMOTE_REMOTES;
-	while (strbuf_getline(&buf, f) != EOF) {
-		const char *v;
-
-		strbuf_rtrim(&buf);
-
-		if (skip_prefix(buf.buf, "URL:", &v))
-			add_url_alias(remote, xstrdup(skip_spaces(v)));
-		else if (skip_prefix(buf.buf, "Push:", &v))
-			add_push_refspec(remote, xstrdup(skip_spaces(v)));
-		else if (skip_prefix(buf.buf, "Pull:", &v))
-			add_fetch_refspec(remote, xstrdup(skip_spaces(v)));
-	}
-	strbuf_release(&buf);
-	fclose(f);
-}
-
-static void read_branches_file(struct remote *remote)
-{
-	char *frag;
-	struct strbuf buf = STRBUF_INIT;
-	FILE *f = fopen(git_path("branches/%s", remote->name), "r");
-
-	if (!f)
-		return;
-
-	strbuf_getline_lf(&buf, f);
-	fclose(f);
-	strbuf_trim(&buf);
-	if (!buf.len) {
-		strbuf_release(&buf);
-		return;
-	}
-
-	warning(_("the branch '%s' uses the long-deprecated '%s' file"),
-		remote->name, git_path("branches/%s", remote->name));
-
-	remote->configured_in_repo = 1;
-	remote->origin = REMOTE_BRANCHES;
-
-	/*
-	 * The branches file would have URL and optionally
-	 * #branch specified.  The "master" (or specified) branch is
-	 * fetched and stored in the local branch matching the
-	 * remote name.
-	 */
-	frag = strchr(buf.buf, '#');
-	if (frag)
-		*(frag++) = '\0';
-	else
-		frag = "master";
-
-	add_url_alias(remote, strbuf_detach(&buf, NULL));
-	add_fetch_refspec(remote, xstrfmt("refs/heads/%s:refs/heads/%s",
-					  frag, remote->name));
-
-	/*
-	 * Cogito compatible push: push current HEAD to remote #branch
-	 * (master if missing)
-	 */
-	add_push_refspec(remote, xstrfmt("HEAD:refs/heads/%s", frag));
-	remote->fetch_tags = 1; /* always auto-follow */
-}
-
 static int handle_config(const char *key, const char *value, void *cb)
 {
 	const char *name;
@@ -652,13 +569,6 @@ void free_refspec(int nr_refspec, struct refspec *refspec)
 	free(refspec);
 }
 
-static int valid_remote_nick(const char *name)
-{
-	if (!name[0] || is_dot_or_dotdot(name))
-		return 0;
-	return !strchr(name, '/'); /* no slash */
-}
-
 const char *remote_for_branch(struct branch *branch, int *explicit)
 {
 	if (branch && branch->remote_name) {
@@ -700,12 +610,6 @@ static struct remote *remote_get_1(const char *name,
 		name = get_default(current_branch, &name_given);
 
 	ret = make_remote(name, 0);
-	if (valid_remote_nick(name) && have_git_dir()) {
-		if (!valid_remote(ret))
-			read_remotes_file(ret);
-		if (!valid_remote(ret))
-			read_branches_file(ret);
-	}
 	if (name_given && !valid_remote(ret))
 		add_url_alias(ret, name);
 	if (!valid_remote(ret))
diff --git a/remote.h b/remote.h
index 6c28cd3e4bf..921b3d43356 100644
--- a/remote.h
+++ b/remote.h
@@ -6,9 +6,7 @@
 
 enum {
 	REMOTE_UNCONFIGURED = 0,
-	REMOTE_CONFIG,
-	REMOTE_REMOTES,
-	REMOTE_BRANCHES
+	REMOTE_CONFIG
 };
 
 struct remote {
-- 
2.12.2.windows.2.800.gede8f145e06

^ permalink raw reply	[flat|nested] 62+ messages in thread

* Re: [PATCH 01/11] git-parse-remote: fix highly misleading man page
  2017-05-11 13:47 ` [PATCH 01/11] git-parse-remote: fix highly misleading man page Johannes Schindelin
@ 2017-05-11 17:21   ` Stefan Beller
  2017-05-11 19:14     ` Johannes Schindelin
                       ` (6 more replies)
  0 siblings, 7 replies; 62+ messages in thread
From: Stefan Beller @ 2017-05-11 17:21 UTC (permalink / raw)
  To: Johannes Schindelin; +Cc: git, Junio C Hamano

On Thu, May 11, 2017 at 6:47 AM, Johannes Schindelin
<johannes.schindelin@gmx.de> wrote:
> The man page still talked about the .git/remotes/ directory (which is no
> longer in use, as of 75c384efb52 (Do not create $GIT_DIR/remotes/
> directory anymore., 2006-12-19)).
>
> Let's just revamp it almost completely to reflect the *purpose* of that
> scriptlet, as opposed to its implementation details.
>
> Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
> ---
>  Documentation/git-parse-remote.txt | 7 +++----
>  1 file changed, 3 insertions(+), 4 deletions(-)
>
> diff --git a/Documentation/git-parse-remote.txt b/Documentation/git-parse-remote.txt
> index a45ea1ece81..7f865f33898 100644
> --- a/Documentation/git-parse-remote.txt
> +++ b/Documentation/git-parse-remote.txt
> @@ -3,7 +3,7 @@ git-parse-remote(1)
>
>  NAME
>  ----
> -git-parse-remote - Routines to help parsing remote repository access parameters
> +git-parse-remote - Routines to help parsing remote repository information

Today I learned about git-parse-remote. Upon further inspection it is
just a lib,
not anything useful for a user. (The man page with or without this patch
is not very helpful to me)

Only git-rebase as well as git-submodule include this lib, the submodules
only need get_default_remote (4 lines of sh), which is also available
in the submodule--helper, we'd just have to expose it and make it accessible.

I wonder if we'd want to retire this script in the long run.

I also wonder if rewriting the man page is good use of (your) time, as the
last contribution specifically to Documentation/git-parse-remote.txt
is 62d955fd43 (parse-remote: remove unused functions, 2009-06-12),
which has been a while since.

The outline in the coverletter promised more than just rewording, but
I am fine with the change as is; it's a good start.

Thanks,
Stefan

^ permalink raw reply	[flat|nested] 62+ messages in thread

* Re: [PATCH 05/11] Revert "Revert "Don't create the $GIT_DIR/branches directory on init""
  2017-05-11 13:47 ` [PATCH 05/11] Revert "Revert "Don't create the $GIT_DIR/branches directory on init"" Johannes Schindelin
@ 2017-05-11 17:26   ` Stefan Beller
  0 siblings, 0 replies; 62+ messages in thread
From: Stefan Beller @ 2017-05-11 17:26 UTC (permalink / raw)
  To: Johannes Schindelin; +Cc: git, Junio C Hamano

On Thu, May 11, 2017 at 6:47 AM, Johannes Schindelin
<johannes.schindelin@gmx.de> wrote:
> A long, long, long time ago, we stored the "upstream" information of
> branches in files inside the .git/branches/ directory. We don't do this
> anymore, though. Since 5751f49010e (Move remote parsing into a library
> file out of builtin-push., 2007-05-12), to be precise.
>
> This is sort of a sibling to 75c384efb52 (Do not create $GIT_DIR/remotes/
> directory anymore., 2006-12-19).
>
> The tests t5505-remote and t5516-fetch-push need to be adjusted now, as
> they expect to find a .git/branches/ directory.
>
> This reverts c8a58ac5a52 (Revert "Don't create the $GIT_DIR/branches
> directory on init", 2009-10-31).
>
> Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
> ---

This (and the previous patches) makes sense to me.

Thanks,
Stefan

^ permalink raw reply	[flat|nested] 62+ messages in thread

* Re: [PATCH 11/11] PREVIEW: remove support for .git/remotes/ and .git/branches/
  2017-05-11 13:48 ` [PATCH 11/11] PREVIEW: remove " Johannes Schindelin
@ 2017-05-11 18:19   ` Stefan Beller
  2017-05-11 19:19     ` Johannes Schindelin
  0 siblings, 1 reply; 62+ messages in thread
From: Stefan Beller @ 2017-05-11 18:19 UTC (permalink / raw)
  To: Johannes Schindelin; +Cc: git, Junio C Hamano

On Thu, May 11, 2017 at 6:48 AM, Johannes Schindelin
<johannes.schindelin@gmx.de> wrote:
> At long last, after a cycle or three of warning users who *still* use
> the ancient feature of .git/remotes/ and .git/branches/, it is time to
> retire the code.
>
> Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
> ---

The PREVIEW patches also look good to me, though I just
skimmed them and other may chime in on the timing of them.

Thanks,
Stefan

^ permalink raw reply	[flat|nested] 62+ messages in thread

* Re: [PATCH 01/11] git-parse-remote: fix highly misleading man page
  2017-05-11 17:21   ` Stefan Beller
@ 2017-05-11 19:14     ` Johannes Schindelin
  2020-11-11 15:17     ` [PATCH 0/5] Remove now-unused git-parse-remote Ævar Arnfjörð Bjarmason
                       ` (5 subsequent siblings)
  6 siblings, 0 replies; 62+ messages in thread
From: Johannes Schindelin @ 2017-05-11 19:14 UTC (permalink / raw)
  To: Stefan Beller; +Cc: git, Junio C Hamano

Hi Stefan,


On Thu, 11 May 2017, Stefan Beller wrote:

> On Thu, May 11, 2017 at 6:47 AM, Johannes Schindelin
> <johannes.schindelin@gmx.de> wrote:
> > The man page still talked about the .git/remotes/ directory (which is
> > no longer in use, as of 75c384efb52 (Do not create $GIT_DIR/remotes/
> > directory anymore., 2006-12-19)).
> >
> > Let's just revamp it almost completely to reflect the *purpose* of
> > that scriptlet, as opposed to its implementation details.
> >
> > Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
> > ---
> >  Documentation/git-parse-remote.txt | 7 +++----
> >  1 file changed, 3 insertions(+), 4 deletions(-)
> >
> > diff --git a/Documentation/git-parse-remote.txt b/Documentation/git-parse-remote.txt
> > index a45ea1ece81..7f865f33898 100644
> > --- a/Documentation/git-parse-remote.txt
> > +++ b/Documentation/git-parse-remote.txt
> > @@ -3,7 +3,7 @@ git-parse-remote(1)
> >
> >  NAME
> >  ----
> > -git-parse-remote - Routines to help parsing remote repository access parameters
> > +git-parse-remote - Routines to help parsing remote repository information
> 
> Today I learned about git-parse-remote. Upon further inspection it is
> just a lib, not anything useful for a user. (The man page with or
> without this patch is not very helpful to me)

Yes, I figured as much when I read the man page. It shows how much most of
our man pages of the olden days improved when you find an unchanged one...

> Only git-rebase as well as git-submodule include this lib, the
> submodules only need get_default_remote (4 lines of sh), which is also
> available in the submodule--helper, we'd just have to expose it and make
> it accessible.
> 
> I wonder if we'd want to retire this script in the long run.

I do not think that we can. Just like git-sh-setup, we advertised it for
use in custom scripts.

> I also wonder if rewriting the man page is good use of (your) time, as
> the last contribution specifically to Documentation/git-parse-remote.txt
> is 62d955fd43 (parse-remote: remove unused functions, 2009-06-12), which
> has been a while since.

1) we still advertise those "shell library files" for consumption in
   users' scripts, so I think we have to keep the man page, too, and

2) The fact that the man page is stale just shows how dearly it is in need
   of being edited, no? ;-)

> The outline in the coverletter promised more than just rewording, but
> I am fine with the change as is; it's a good start.

You mean the commit message (I do not think I talked about the
git-parse-remote man page in the cover letter)?

If so, I think I only promised to completely revamp it and to stop talking
about implementation details...

Ciao,
Dscho

^ permalink raw reply	[flat|nested] 62+ messages in thread

* Re: [PATCH 11/11] PREVIEW: remove support for .git/remotes/ and .git/branches/
  2017-05-11 18:19   ` Stefan Beller
@ 2017-05-11 19:19     ` Johannes Schindelin
  0 siblings, 0 replies; 62+ messages in thread
From: Johannes Schindelin @ 2017-05-11 19:19 UTC (permalink / raw)
  To: Stefan Beller; +Cc: git, Junio C Hamano

Hi Stefan,

On Thu, 11 May 2017, Stefan Beller wrote:

> On Thu, May 11, 2017 at 6:48 AM, Johannes Schindelin
> <johannes.schindelin@gmx.de> wrote:
> > At long last, after a cycle or three of warning users who *still* use
> > the ancient feature of .git/remotes/ and .git/branches/, it is time to
> > retire the code.
> >
> > Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
> > ---
> 
> The PREVIEW patches also look good to me, though I just
> skimmed them and other may chime in on the timing of them.

Thanks for the review!

I agree that the PREVIEW part is not quite as important as the first half.
I only bothered with it because I did want to make sure that the first
half is correct, that it does cover all the places we will need to delete
in the end.

In other words: the PREVIEW part should become its own patch series, that
I hope Junio will carry in pu (or next) for a while, similar to the
changes that removed the historical wart of the funny argument order in
`git merge`.

Ciao,
Dscho

^ permalink raw reply	[flat|nested] 62+ messages in thread

* Re: [PATCH 00/11] Start retiring .git/remotes/ and .git/branches/ for good
  2017-05-11 13:47 [PATCH 00/11] Start retiring .git/remotes/ and .git/branches/ for good Johannes Schindelin
                   ` (10 preceding siblings ...)
  2017-05-11 13:48 ` [PATCH 11/11] PREVIEW: remove " Johannes Schindelin
@ 2017-05-12  1:14 ` Junio C Hamano
  2017-05-12 10:18   ` Johannes Schindelin
  2017-05-12 12:00   ` Junio C Hamano
  2017-05-12  9:11 ` Jeff King
  12 siblings, 2 replies; 62+ messages in thread
From: Junio C Hamano @ 2017-05-12  1:14 UTC (permalink / raw)
  To: Johannes Schindelin; +Cc: git

Johannes Schindelin <johannes.schindelin@gmx.de> writes:

> Git uses the config for remote/upstream information in favor of the
> previously-used .git/remotes/ and .git/branches/ for a decade now.

The last time I thought about trying this several years ago, I found
that people who need to grab things from many places still do use
.git/branches/ and their use case is hard to migrate to .git/config,
primarily because the former is "one per file" and it is easy to
add/remove/tweak without affecting others.  Ask akpm@ if he still
prefers to use .git/branches/ for example.

Is it really hurting us having to support these old information
sources we treat as read-only?

^ permalink raw reply	[flat|nested] 62+ messages in thread

* Re: [PATCH 00/11] Start retiring .git/remotes/ and .git/branches/ for good
  2017-05-11 13:47 [PATCH 00/11] Start retiring .git/remotes/ and .git/branches/ for good Johannes Schindelin
                   ` (11 preceding siblings ...)
  2017-05-12  1:14 ` [PATCH 00/11] Start retiring .git/remotes/ and .git/branches/ for good Junio C Hamano
@ 2017-05-12  9:11 ` Jeff King
  2017-05-12 11:09   ` Johannes Schindelin
  12 siblings, 1 reply; 62+ messages in thread
From: Jeff King @ 2017-05-12  9:11 UTC (permalink / raw)
  To: Johannes Schindelin; +Cc: git, Junio C Hamano

On Thu, May 11, 2017 at 03:47:33PM +0200, Johannes Schindelin wrote:

> Git uses the config for remote/upstream information in favor of the
> previously-used .git/remotes/ and .git/branches/ for a decade now.
> 
> Nothing in Git writes to these files any longer, and the most prominent
> user of .git/branches/ (Cogito) is long abandoned.
> 
> It is time to start not only deprecating this feature, but *really*
> deprecating it. Like, really, *really*. For reals.

I like the goal, and the patches themselves (both the deprecations and
the actual removal) all look good to me.

If we want to start slow (and if Junio is right that there may be some
people who are actually using this feature, we probably should), step 0
may be making people aware that it's on the horizon, even before we
start issuing annoying warnings to them. This thread does that to some
degree, but we could also put it in the release notes for a version.
That's not guaranteed to get people's attention, but it gives more
opportunity for them to speak up before installing a version of Git that
produces warnings whenever they fetch.

-Peff

^ permalink raw reply	[flat|nested] 62+ messages in thread

* Re: [PATCH 00/11] Start retiring .git/remotes/ and .git/branches/ for good
  2017-05-12  1:14 ` [PATCH 00/11] Start retiring .git/remotes/ and .git/branches/ for good Junio C Hamano
@ 2017-05-12 10:18   ` Johannes Schindelin
  2017-05-16  0:37     ` Junio C Hamano
  2017-05-12 12:00   ` Junio C Hamano
  1 sibling, 1 reply; 62+ messages in thread
From: Johannes Schindelin @ 2017-05-12 10:18 UTC (permalink / raw)
  To: Junio C Hamano; +Cc: git

Hi Junio,

On Fri, 12 May 2017, Junio C Hamano wrote:

> Johannes Schindelin <johannes.schindelin@gmx.de> writes:
> 
> > Git uses the config for remote/upstream information in favor of the
> > previously-used .git/remotes/ and .git/branches/ for a decade now.
> 
> The last time I thought about trying this several years ago, I found
> that people who need to grab things from many places still do use
> .git/branches/ and their use case is hard to migrate to .git/config,
> primarily because the former is "one per file" and it is easy to
> add/remove/tweak without affecting others.  Ask akpm@ if he still
> prefers to use .git/branches/ for example.
> 
> 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.

Also: I do not buy that it is hard to migrate from .git/branches/ to
.git/config. All you have to is to call git-config (maybe twice) instead
of pasting a oneliner into a file. I do not have akpm@'s email address
handy, BTW.

Ciao,
Dscho

^ permalink raw reply	[flat|nested] 62+ messages in thread

* Re: [PATCH 00/11] Start retiring .git/remotes/ and .git/branches/ for good
  2017-05-12  9:11 ` Jeff King
@ 2017-05-12 11:09   ` Johannes Schindelin
  0 siblings, 0 replies; 62+ messages in thread
From: Johannes Schindelin @ 2017-05-12 11:09 UTC (permalink / raw)
  To: Jeff King; +Cc: git, Junio C Hamano

Hi Peff,

On Fri, 12 May 2017, Jeff King wrote:

> On Thu, May 11, 2017 at 03:47:33PM +0200, Johannes Schindelin wrote:
> 
> > Git uses the config for remote/upstream information in favor of the
> > previously-used .git/remotes/ and .git/branches/ for a decade now.
> > 
> > Nothing in Git writes to these files any longer, and the most
> > prominent user of .git/branches/ (Cogito) is long abandoned.
> > 
> > It is time to start not only deprecating this feature, but *really*
> > deprecating it. Like, really, *really*. For reals.
> 
> I like the goal, and the patches themselves (both the deprecations and
> the actual removal) all look good to me.

Thanks!

> If we want to start slow (and if Junio is right that there may be some
> people who are actually using this feature, we probably should), step 0
> may be making people aware that it's on the horizon, even before we
> start issuing annoying warnings to them. This thread does that to some
> degree, but we could also put it in the release notes for a version.
> That's not guaranteed to get people's attention, but it gives more
> opportunity for them to speak up before installing a version of Git that
> produces warnings whenever they fetch.

Okay. I do not think there is any value in putting this into the release
notes, of course, as 1) next to nobody reads them, at least not closely,
and 2) people who still use .git/branches/ very clearly missed the release
notes of a decade ago that .git/branches/ is not the way to go.

Of course, it takes what it takes. If we spend 6+ cycles deprecating a
feature that only one person may still use, for what we know, so be it.

Ciao,
Dscho

^ permalink raw reply	[flat|nested] 62+ messages in thread

* Re: [PATCH 00/11] Start retiring .git/remotes/ and .git/branches/ for good
  2017-05-12  1:14 ` [PATCH 00/11] Start retiring .git/remotes/ and .git/branches/ for good Junio C Hamano
  2017-05-12 10:18   ` Johannes Schindelin
@ 2017-05-12 12:00   ` Junio C Hamano
  2017-05-12 14:19     ` Johannes Schindelin
  1 sibling, 1 reply; 62+ messages in thread
From: Junio C Hamano @ 2017-05-12 12:00 UTC (permalink / raw)
  To: Johannes Schindelin; +Cc: git

Junio C Hamano <gitster@pobox.com> writes:

> Johannes Schindelin <johannes.schindelin@gmx.de> writes:
>
>> Git uses the config for remote/upstream information in favor of the
>> previously-used .git/remotes/ and .git/branches/ for a decade now.
>
> The last time I thought about trying this several years ago, I found
> that people who need to grab things from many places still do use
> .git/branches/ and their use case is hard to migrate to .git/config,
> primarily because the former is "one per file" and it is easy to
> add/remove/tweak without affecting others.  Ask akpm@ if he still
> prefers to use .git/branches/ for example.

FWIW, I do not think there is any reason for people to be using
.git/remotes/, but for .git/branches/, I do not think I can offer a
more efficient and easier to use alternative based on .git/config to
do these things:

 $ grep <substring> .git/branches/* ;# what did I call that remote?
 $ cat .git/branches/$name ;# where do I get that from?
 $ echo "$URL#$branch" >.git/branches/$name ;# I just learned a new src
 $ rm .git/branch/$name ;# I no longer need it

without having to learn things experienced CLI/UNIX person already
knows.  We simply cannot beat the above with anything like 

    $ git config remote.$name.fetch refs/heads/$branch

even though the config based remote definition may be infinitely
more powerful.

> Is it really hurting us having to support these old information
> sources we treat as read-only?

And this one is also important.  I do not think we had to touch any
code that handles .git/remotes/ or .git/branches when we extended
the .git/config based configuration for remotes, simply because the
old data source are pretty much frozen read-only places these days.


^ permalink raw reply	[flat|nested] 62+ messages in thread

* Re: [PATCH 00/11] Start retiring .git/remotes/ and .git/branches/ for good
  2017-05-12 12:00   ` Junio C Hamano
@ 2017-05-12 14:19     ` Johannes Schindelin
  2017-05-12 17:38       ` Jonathan Nieder
  2017-05-12 21:11       ` Junio C Hamano
  0 siblings, 2 replies; 62+ messages in thread
From: Johannes Schindelin @ 2017-05-12 14:19 UTC (permalink / raw)
  To: Junio C Hamano; +Cc: git

Hi Junio,

On Fri, 12 May 2017, Junio C Hamano wrote:

> Junio C Hamano <gitster@pobox.com> writes:
> 
> > Johannes Schindelin <johannes.schindelin@gmx.de> writes:
> >
> >> Git uses the config for remote/upstream information in favor of the
> >> previously-used .git/remotes/ and .git/branches/ for a decade now.
> >
> > The last time I thought about trying this several years ago, I found
> > that people who need to grab things from many places still do use
> > .git/branches/ and their use case is hard to migrate to .git/config,
> > primarily because the former is "one per file" and it is easy to
> > add/remove/tweak without affecting others.  Ask akpm@ if he still
> > prefers to use .git/branches/ for example.
> 
> FWIW, I do not think there is any reason for people to be using
> .git/remotes/, but for .git/branches/, I do not think I can offer a
> more efficient and easier to use alternative based on .git/config to
> do these things:
> 
>  $ grep <substring> .git/branches/* ;# what did I call that remote?
>  $ cat .git/branches/$name ;# where do I get that from?
>  $ echo "$URL#$branch" >.git/branches/$name ;# I just learned a new src
>  $ rm .git/branch/$name ;# I no longer need it
> 
> without having to learn things experienced CLI/UNIX person already
> knows.

I do not understand what you want to tell me with that example. It is
confusing me utterly.

> We simply cannot beat the above with anything like 
> 
>     $ git config remote.$name.fetch refs/heads/$branch
> 
> even though the config based remote definition may be infinitely
> more powerful.

Then maybe we need to teach, say, `git remote` to be that powerful?

> > Is it really hurting us having to support these old information
> > sources we treat as read-only?
> 
> And this one is also important.  I do not think we had to touch any
> code that handles .git/remotes/ or .git/branches when we extended
> the .git/config based configuration for remotes, simply because the
> old data source are pretty much frozen read-only places these days.

Okay. But by the same reasoning, I want to hear nothing from you anymore
about the sort of maintenance burden you talked about in the ssh_variant
patches. That burden was ridiculously small compared to what you tell me
you want to keep (and for a single user that may have moved on). Not one
word.

Ciao,
Dscho

^ permalink raw reply	[flat|nested] 62+ messages in thread

* Re: [PATCH 00/11] Start retiring .git/remotes/ and .git/branches/ for good
  2017-05-12 14:19     ` Johannes Schindelin
@ 2017-05-12 17:38       ` Jonathan Nieder
  2017-05-13 10:13         ` Junio C Hamano
  2017-05-12 21:11       ` Junio C Hamano
  1 sibling, 1 reply; 62+ messages in thread
From: Jonathan Nieder @ 2017-05-12 17:38 UTC (permalink / raw)
  To: Johannes Schindelin; +Cc: Junio C Hamano, git

Johannes Schindelin wrote:
> On Fri, 12 May 2017, Junio C Hamano wrote:

>> And this one is also important.  I do not think we had to touch any
>> code that handles .git/remotes/ or .git/branches when we extended
>> the .git/config based configuration for remotes, simply because the
>> old data source are pretty much frozen read-only places these days.
>
> Okay. But by the same reasoning, I want to hear nothing from you anymore
> about the sort of maintenance burden you talked about in the ssh_variant
> patches. That burden was ridiculously small compared to what you tell me
> you want to keep (and for a single user that may have moved on). Not one
> word.

I don't understand this argument at all.  There are costs and benefits
to removing an existing feature, just like there are costs and benefits
to adding a feature.  If I understand the two examples you're comparing
correctly, then the same principle is at play in both: when it is much
more expensive to remove a feature than to not add it in the first
place, a maintainer has to push back on both addition and removal of
features.

I like patches 3 and 4 because they warn before taking something out
from people's feet.  So I think this series heads in a good direction.

I wonder if in the endgame we'd want git to still recognize the files,
so it can point people to some documentation on how to convert them to
the supported thing.  That way, when people ask "What do I have to do
to work with my very old git repository using current versions of
git?", the answer could still be "Just use current git --- it will
work in an intuitive way and will give advice when it needs your help,
without you needing to proactively do anything special."

Thanks,
Jonathan

^ permalink raw reply	[flat|nested] 62+ messages in thread

* Re: [PATCH 00/11] Start retiring .git/remotes/ and .git/branches/ for good
  2017-05-12 14:19     ` Johannes Schindelin
  2017-05-12 17:38       ` Jonathan Nieder
@ 2017-05-12 21:11       ` Junio C Hamano
  2017-05-15  8:42         ` Johannes Schindelin
  1 sibling, 1 reply; 62+ messages in thread
From: Junio C Hamano @ 2017-05-12 21:11 UTC (permalink / raw)
  To: Johannes Schindelin; +Cc: git

Johannes Schindelin <Johannes.Schindelin@gmx.de> writes:

> On Fri, 12 May 2017, Junio C Hamano wrote:
>>  ...
>> FWIW, I do not think there is any reason for people to be using
>> .git/remotes/, but for .git/branches/, I do not think I can offer a
>> more efficient and easier to use alternative based on .git/config to
>> do these things:
>> 
>>  $ grep <substring> .git/branches/* ;# what did I call that remote?
>>  $ cat .git/branches/$name ;# where do I get that from?
>>  $ echo "$URL#$branch" >.git/branches/$name ;# I just learned a new src
>>  $ rm .git/branch/$name ;# I no longer need it
>> 
>> without having to learn things experienced CLI/UNIX person already
>> knows.
>
> I do not understand what you want to tell me with that example. It is
> confusing me utterly.

They show how it helps a user, whose primary use of Git is to fetch
from many places, to keep the the old "branches" machinery.  It is
not "hard" to migrate in the sense that there is a way to (1) find
the short-name you gave to a remote from a part of URL etc., (2)
find the exact attributes of the repository a short-name refers to,
(3) update an existing or add a new short-name and (4) remove an
existing one.  The remotes.*.{url,fetch} configuration are expressive
enough to represent these operations.  It however is more work and I
couldn't think of alternatives.

>
>> We simply cannot beat the above with anything like 
>> 
>>     $ git config remote.$name.fetch refs/heads/$branch
>> 
>> even though the config based remote definition may be infinitely
>> more powerful.
>
> Then maybe we need to teach, say, `git remote` to be that powerful?

Ah, after all, you weren't confused utterly.  

Not necessarily "that powerful", but yes, if we had something that
is quick and easy to use as a replacement, I do agree we can plan
.git/{branches,remotes}'s removal.  The point of "branches" thing to
existing users, I think, is not its expressive power (it is much
much simpler and can do only one thing) but its simplicity.

Thanks.

^ permalink raw reply	[flat|nested] 62+ messages in thread

* Re: [PATCH 00/11] Start retiring .git/remotes/ and .git/branches/ for good
  2017-05-12 17:38       ` Jonathan Nieder
@ 2017-05-13 10:13         ` Junio C Hamano
  0 siblings, 0 replies; 62+ messages in thread
From: Junio C Hamano @ 2017-05-13 10:13 UTC (permalink / raw)
  To: Jonathan Nieder; +Cc: Johannes Schindelin, git

Jonathan Nieder <jrnieder@gmail.com> writes:

> Johannes Schindelin wrote:
>> On Fri, 12 May 2017, Junio C Hamano wrote:
>
>>> And this one is also important.  I do not think we had to touch any
>>> code that handles .git/remotes/ or .git/branches when we extended
>>> the .git/config based configuration for remotes, simply because the
>>> old data source are pretty much frozen read-only places these days.
>>
>> Okay. But by the same reasoning, I want to hear nothing from you anymore
>> about the sort of maintenance burden you talked about in the ssh_variant
>> patches. That burden was ridiculously small compared to what you tell me
>> you want to keep (and for a single user that may have moved on). Not one
>> word.
>
> I don't understand this argument at all.  There are costs and benefits
> to removing an existing feature, just like there are costs and benefits
> to adding a feature.  If I understand the two examples you're comparing
> correctly, then the same principle is at play in both: when it is much
> more expensive to remove a feature than to not add it in the first
> place, a maintainer has to push back on both addition and removal of
> features.

FWIW, I do not understand Dscho's argument, either.

And I do agree with you about additions and removals.  While these
are a bit of apples and oranges comparison, the same principle
indeed sits behind them.  Incompatible changes, including removal,
are costly to existing users, so we want to avoid them or when we
cannot avoid them, we try to find a way to alleviate the pain.  When
adding something new, we try to make sure that the addition will not
introduce the need to make incompatible changes in the future.




^ permalink raw reply	[flat|nested] 62+ messages in thread

* Re: [PATCH 00/11] Start retiring .git/remotes/ and .git/branches/ for good
  2017-05-12 21:11       ` Junio C Hamano
@ 2017-05-15  8:42         ` Johannes Schindelin
  0 siblings, 0 replies; 62+ messages in thread
From: Johannes Schindelin @ 2017-05-15  8:42 UTC (permalink / raw)
  To: Junio C Hamano; +Cc: git

Hi Junio,

On Sat, 13 May 2017, Junio C Hamano wrote:

> Johannes Schindelin <Johannes.Schindelin@gmx.de> writes:
> 
> > On Fri, 12 May 2017, Junio C Hamano wrote:
> >>  ...
> >> FWIW, I do not think there is any reason for people to be using
> >> .git/remotes/, but for .git/branches/, I do not think I can offer a
> >> more efficient and easier to use alternative based on .git/config to
> >> do these things:
> >> 
> >>  $ grep <substring> .git/branches/* ;# what did I call that remote?
> >>  $ cat .git/branches/$name ;# where do I get that from?
> >>  $ echo "$URL#$branch" >.git/branches/$name ;# I just learned a new src
> >>  $ rm .git/branch/$name ;# I no longer need it
> >> 
> >> without having to learn things experienced CLI/UNIX person already
> >> knows.
> >
> > I do not understand what you want to tell me with that example. It is
> > confusing me utterly.
> 
> They show how it helps a user, whose primary use of Git is to fetch
> from many places, to keep the the old "branches" machinery.

M'kay. Not quite sure how that differs from my use case, which works quite
well with the "config" way. My `git remote | wc -l` says 21.

Let me re-format what you said next.

> It is not "hard" to migrate in the sense that there is a way to
>
> (1) find the short-name you gave to a remote from a part of URL etc.,
>
> (2) find the exact attributes of the repository a short-name refers to,
>
> (3) update an existing or add a new short-name and
>
> (4) remove an existing one.
>
> The remotes.*.{url,fetch} configuration are expressive enough to
> represent these operations.  It however is more work and I couldn't
> think of alternatives.

So if I understand correctly, you want to do

(1) `git remote -v | grep <part-of-the-url>`

(2) `git remote show <shortname>`

(3) if (1) did not find it:
	`git remote add -f <short-name> <URL>`,
    otherwise:
	`git fetch <shortname>`

(4) `git remove rm <shortname>`

I have to admit that I used `git remote -v | grep ^<shortname>` for (2)
all the time, until I had a quick look at builtin/remote.c so I would not
make a complete fool out of myself in this reply, and I will use `git -p
remote show <shortname>` henceforth.

As to (1), I really do not use this myself, as my remotes pretty much
always have names that I remember very well. And if I don't, neither do I
remember the URL, so I have to sift through the output of `git -p remote
-v` manually anyway.

> >> We simply cannot beat the above with anything like 
> >> 
> >>     $ git config remote.$name.fetch refs/heads/$branch
> >> 
> >> even though the config based remote definition may be infinitely
> >> more powerful.
> >
> > Then maybe we need to teach, say, `git remote` to be that powerful?
> 
> Ah, after all, you weren't confused utterly.

No, I was, and I am still at least partially confused. I just read your
"We simply cannot beat ..." as a round-about way to say "I wish we had an
easy way to do XYZ" without stating the XYZ in a way that even dimwits
such as myself can understand.

> Not necessarily "that powerful", but yes, if we had something that
> is quick and easy to use as a replacement, I do agree we can plan
> .git/{branches,remotes}'s removal.  The point of "branches" thing to
> existing users, I think, is not its expressive power (it is much
> much simpler and can do only one thing) but its simplicity.

Okay, so my quest at removing maintenance burden is not entirely pointless
an exercise and a waste of my time.

Good. I will continue to work on that front, then, among other things.

Ciao,
Dscho

^ permalink raw reply	[flat|nested] 62+ messages in thread

* Re: [PATCH 00/11] Start retiring .git/remotes/ and .git/branches/ for good
  2017-05-12 10:18   ` Johannes Schindelin
@ 2017-05-16  0:37     ` Junio C Hamano
  2017-05-16  8:05       ` Ævar Arnfjörð Bjarmason
  0 siblings, 1 reply; 62+ messages in thread
From: Junio C Hamano @ 2017-05-16  0:37 UTC (permalink / raw)
  To: Johannes Schindelin; +Cc: git

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-<.

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.


[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.

^ permalink raw reply	[flat|nested] 62+ messages in thread

* Re: [PATCH 00/11] Start retiring .git/remotes/ and .git/branches/ for good
  2017-05-16  0:37     ` Junio C Hamano
@ 2017-05-16  8:05       ` Ævar Arnfjörð Bjarmason
  2017-05-16  9:06         ` Junio C Hamano
  0 siblings, 1 reply; 62+ messages in thread
From: Ævar Arnfjörð Bjarmason @ 2017-05-16  8:05 UTC (permalink / raw)
  To: Junio C Hamano; +Cc: Johannes Schindelin, Git Mailing List

On Tue, May 16, 2017 at 2:37 AM, Junio C Hamano <gitster@pobox.com> wrote:
> 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.

> [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.

^ permalink raw reply	[flat|nested] 62+ messages in thread

* Re: [PATCH 00/11] Start retiring .git/remotes/ and .git/branches/ for good
  2017-05-16  8:05       ` Ævar Arnfjörð Bjarmason
@ 2017-05-16  9:06         ` Junio C Hamano
  2017-05-16 10:02           ` Ævar Arnfjörð Bjarmason
  0 siblings, 1 reply; 62+ messages in thread
From: Junio C Hamano @ 2017-05-16  9:06 UTC (permalink / raw)
  To: Ævar Arnfjörð Bjarmason
  Cc: Johannes Schindelin, Git Mailing List

Ævar Arnfjörð Bjarmason <avarab@gmail.com> writes:

> 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.

You forgot the step 0. You need to answer two questions: "Is
changing X necessary?" and "Does that necessity outweigh the
inconvenience caused to existing users by the deprecation flow?"

You need to answer yes to both before you even consider going into
the later steps.  Once that happens,...


> 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"

... the deprecation practice is very well established around here.

In this case, however, we haven't even seen the first question "Is
it needed?"  answered "yes", let alone "Is it needed enough?".

^ permalink raw reply	[flat|nested] 62+ messages in thread

* Re: [PATCH 00/11] Start retiring .git/remotes/ and .git/branches/ for good
  2017-05-16  9:06         ` Junio C Hamano
@ 2017-05-16 10:02           ` Ævar Arnfjörð Bjarmason
  2017-05-17  0:51             ` Junio C Hamano
  0 siblings, 1 reply; 62+ messages in thread
From: Ævar Arnfjörð Bjarmason @ 2017-05-16 10:02 UTC (permalink / raw)
  To: Junio C Hamano; +Cc: Johannes Schindelin, Git Mailing List

On Tue, May 16, 2017 at 11:06 AM, Junio C Hamano <gitster@pobox.com> wrote:
> Ævar Arnfjörð Bjarmason <avarab@gmail.com> writes:
>
>> 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.
>
> You forgot the step 0. You need to answer two questions: "Is
> changing X necessary?" and "Does that necessity outweigh the
> inconvenience caused to existing users by the deprecation flow?"
>
> You need to answer yes to both before you even consider going into
> the later steps.  Once that happens,...

Leaving this change aside, because I'm not interested in this change,
but the process in general. That seems to be a recipe for leaving
certain types of changes in deprecation limbo.

I.e. we say "don't use this", but can't follow through because users
may be inconvenienced, and we can't get any data on how users may be
inconvenienced because of the chicken & egg problem of not being able
to push those deprecations in any way to users.

One way to bridge that gap would be to e.g. have something similar to
"use <VERSION>" in Perl, where users can opt-in to new features & hard
deprecations.

Plenty of us package up git for other users, and various downstream
distributors (particularly more "bleeding edge" distros, like Arch,
Gentoo, Debian unstable) might be convinced to turn such a switch.

Wouldn't that go a long way to bridging the gap we have between
"surely nobody needs this anymore, let's remove it" and "we don't know
if someone really needs this, so let's keep it forever"?

>> 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"
>
> ... the deprecation practice is very well established around here.

It seems pretty haphazard to me, is it even documented somewhere?

I'm talking about an establish process backed up by code, where for
example I can add an experimental feature in v2.14.0, it'll be subject
to change & warn unless you configure core.use_experimental=true or
whatever until v2.16.0, then it'll be considered stable, and changing
the semantics of any stable feature will require opt-in configuration
that'll only become default after N more release cycles where N is
some well-defined number.

Git's deprecation cycles, such as they are, seem to be better
described as: it'll be noted in the release notes or docs, then left
for some indeterminate amount of time until we have the argument on a
case-by-case basis of if/when/how to deal with that specific case.

This causes issues for devs wanting to deprecate things, but more
importantly doesn't at close the loop on deprecations by bringing
users into the loop. What am I to conclude as a user from various
mentions of deprecations in our docs? Some of which have been there
for 5-10  years.

^ permalink raw reply	[flat|nested] 62+ messages in thread

* Re: [PATCH 00/11] Start retiring .git/remotes/ and .git/branches/ for good
  2017-05-16 10:02           ` Ævar Arnfjörð Bjarmason
@ 2017-05-17  0:51             ` Junio C Hamano
  0 siblings, 0 replies; 62+ messages in thread
From: Junio C Hamano @ 2017-05-17  0:51 UTC (permalink / raw)
  To: Ævar Arnfjörð Bjarmason
  Cc: Johannes Schindelin, Git Mailing List

Ævar Arnfjörð Bjarmason <avarab@gmail.com> writes:

> It seems pretty haphazard to me, is it even documented somewhere?
>
> I'm talking about an establish process backed up by code, where for
> example I can add an experimental feature in v2.14.0, it'll be subject
> to change & warn unless you configure core.use_experimental=true or
> whatever until v2.16.0, then it'll be considered stable, and changing
> the semantics of any stable feature will require opt-in configuration
> that'll only become default after N more release cycles where N is
> some well-defined number.
>
> Git's deprecation cycles, such as they are, seem to be better
> described as: it'll be noted in the release notes or docs, then left
> for some indeterminate amount of time until we have the argument on a
> case-by-case basis of if/when/how to deal with that specific case.

I do not think we have any "Statutory law" about how to make a
backward-incompatible change in Documentation/; I do not terribly
mind if we see some write-up on the topic there.

Having said that, after getting burned by "git-foo no longer is on
your $PATH" change in 1.6 era [*1*], I think we have been pretty
good at following the same pattern to ease the pain to the users
during transition each time we had to introduce a change that forces
existing users to adjust to the new world order.  Recall how any of
the following (not exhaustive samples) were done: introducing and
making the default value of push.default from "matching" to
"simple"; removal of "git tar-tree"; "git add -u" working on the
whole tree even when run from a subdirectory.  We start by issuing
warning message when a deprecated feature is used or a feature that
will change its default is used, wait for a few releases (depending
on how entrenched its use is), and then finally flip the switch and
remove the message.

You are right to point out that we tend to refrain from setting the
timetable from the beginning of the deprecation dance, and it might
be a good idea to set the exact cut-off date upfront.  I have no
strong opinion.


[References]

*1* https://public-inbox.org/git/?q=gmane:93813

^ permalink raw reply	[flat|nested] 62+ messages in thread

* [PATCH 0/5] Remove now-unused git-parse-remote
  2017-05-11 17:21   ` Stefan Beller
  2017-05-11 19:14     ` Johannes Schindelin
@ 2020-11-11 15:17     ` Ævar Arnfjörð Bjarmason
  2020-11-11 17:37       ` Jeff King
  2020-11-12 14:19       ` How do I "git fetch" with a custom <refspec> but a default remote? Ævar Arnfjörð Bjarmason
  2020-11-11 15:17     ` [PATCH 1/5] parse-remote: remove unused GIT_DIR variable Ævar Arnfjörð Bjarmason
                       ` (4 subsequent siblings)
  6 siblings, 2 replies; 62+ messages in thread
From: Ævar Arnfjörð Bjarmason @ 2020-11-11 15:17 UTC (permalink / raw)
  To: git
  Cc: Junio C Hamano, Johannes Schindelin, Stefan Beller, Jeff King,
	Ævar Arnfjörð Bjarmason

I started poking at removing .git/branches from the default template,
which I had a patch for until I noticed Johannes's old[1] series.

In any case, this is one thing that came out of that
investigation. The code we're keeping by moving it to git-submodule.sh
can also be replaced by some C code we have, but I wanted to leave
that to another submission (if I'll get to it), and make this simply a
code removal.

1. https://public-inbox.org/git/cover.1494509599.git.johannes.schindelin@gmx.de/

Ævar Arnfjörð Bjarmason (5):
  parse-remote: remove unused GIT_DIR variable
  parse-remote: remove long-dead rebase code
  parse-remote: remove long-dead git-pull.sh code
  parse-remote: move used code to git-submodule.sh
  parse-remote: remove this now-unused library

 .gitignore                         |  1 -
 Documentation/git-parse-remote.txt | 23 -------
 Makefile                           |  2 -
 command-list.txt                   |  1 -
 git-parse-remote.sh                | 98 ------------------------------
 git-submodule.sh                   |  8 ++-
 6 files changed, 7 insertions(+), 126 deletions(-)
 delete mode 100644 Documentation/git-parse-remote.txt

-- 
2.29.2.222.g5d2a92d10f8


^ permalink raw reply	[flat|nested] 62+ messages in thread

* [PATCH 1/5] parse-remote: remove unused GIT_DIR variable
  2017-05-11 17:21   ` Stefan Beller
  2017-05-11 19:14     ` Johannes Schindelin
  2020-11-11 15:17     ` [PATCH 0/5] Remove now-unused git-parse-remote Ævar Arnfjörð Bjarmason
@ 2020-11-11 15:17     ` Ævar Arnfjörð Bjarmason
  2020-11-11 15:17     ` [PATCH 2/5] parse-remote: remove long-dead rebase code Ævar Arnfjörð Bjarmason
                       ` (3 subsequent siblings)
  6 siblings, 0 replies; 62+ messages in thread
From: Ævar Arnfjörð Bjarmason @ 2020-11-11 15:17 UTC (permalink / raw)
  To: git
  Cc: Junio C Hamano, Johannes Schindelin, Stefan Beller, Jeff King,
	Ævar Arnfjörð Bjarmason

This variable was last used in code removed way back in
45781adb9a ("get_remote_url(): use the same data source as ls-remote
to get remote urls", 2011-03-01).

Since it's only used in git-submodule.sh it could have been the case
that the code there relied on us setting $GIT_DIR, but that's not the
case. The only use of $GIT_DIR in git-submodule.sh involves a $GIT_DIR
variable that the code there sets by itself.

Signed-off-by: Ævar Arnfjörð Bjarmason <avarab@gmail.com>
---
 git-parse-remote.sh | 4 ----
 1 file changed, 4 deletions(-)

diff --git a/git-parse-remote.sh b/git-parse-remote.sh
index d3c39980f3..6b743cda17 100644
--- a/git-parse-remote.sh
+++ b/git-parse-remote.sh
@@ -2,10 +2,6 @@
 # upstream branch that should be pulled by "git pull" from the current
 # branch.
 
-# git-ls-remote could be called from outside a git managed repository;
-# this would fail in that case and would issue an error message.
-GIT_DIR=$(git rev-parse -q --git-dir) || :;
-
 get_default_remote () {
 	curr_branch=$(git symbolic-ref -q HEAD)
 	curr_branch="${curr_branch#refs/heads/}"
-- 
2.29.2.222.g5d2a92d10f8


^ permalink raw reply	[flat|nested] 62+ messages in thread

* [PATCH 2/5] parse-remote: remove long-dead rebase code
  2017-05-11 17:21   ` Stefan Beller
                       ` (2 preceding siblings ...)
  2020-11-11 15:17     ` [PATCH 1/5] parse-remote: remove unused GIT_DIR variable Ævar Arnfjörð Bjarmason
@ 2020-11-11 15:17     ` Ævar Arnfjörð Bjarmason
  2020-11-11 15:17     ` [PATCH 3/5] parse-remote: remove long-dead git-pull.sh code Ævar Arnfjörð Bjarmason
                       ` (2 subsequent siblings)
  6 siblings, 0 replies; 62+ messages in thread
From: Ævar Arnfjörð Bjarmason @ 2020-11-11 15:17 UTC (permalink / raw)
  To: git
  Cc: Junio C Hamano, Johannes Schindelin, Stefan Beller, Jeff King,
	Ævar Arnfjörð Bjarmason

Remove code that was last used in the now-removed rebase.useBuiltin
setting. See d03ebd411c ("rebase: remove the rebase.useBuiltin
setting", 2019-03-18) for the removal of its last user.

Signed-off-by: Ævar Arnfjörð Bjarmason <avarab@gmail.com>
---
 git-parse-remote.sh | 47 ---------------------------------------------
 1 file changed, 47 deletions(-)

diff --git a/git-parse-remote.sh b/git-parse-remote.sh
index 6b743cda17..e3f6195281 100644
--- a/git-parse-remote.sh
+++ b/git-parse-remote.sh
@@ -48,50 +48,3 @@ get_remote_merge_branch () {
 	    esac
 	esac
 }
-
-error_on_missing_default_upstream () {
-	cmd="$1"
-	op_type="$2"
-	op_prep="$3" # FIXME: op_prep is no longer used
-	example="$4"
-	branch_name=$(git symbolic-ref -q HEAD)
-	display_branch_name="${branch_name#refs/heads/}"
-	# If there's only one remote, use that in the suggestion
-	remote="$(gettext "<remote>")"
-	branch="$(gettext "<branch>")"
-	if test $(git remote | wc -l) = 1
-	then
-		remote=$(git remote)
-	fi
-
-	if test -z "$branch_name"
-	then
-		gettextln "You are not currently on a branch."
-	else
-		gettextln "There is no tracking information for the current branch."
-	fi
-	case "$op_type" in
-	rebase)
-		gettextln "Please specify which branch you want to rebase against."
-		;;
-	merge)
-		gettextln "Please specify which branch you want to merge with."
-		;;
-	*)
-		echo >&2 "BUG: unknown operation type: $op_type"
-		exit 1
-		;;
-	esac
-	eval_gettextln "See git-\${cmd}(1) for details."
-	echo
-	echo "    $example"
-	echo
-	if test -n "$branch_name"
-	then
-		gettextln "If you wish to set tracking information for this branch you can do so with:"
-		echo
-		echo "    git branch --set-upstream-to=$remote/$branch $display_branch_name"
-		echo
-	fi
-	exit 1
-}
-- 
2.29.2.222.g5d2a92d10f8


^ permalink raw reply	[flat|nested] 62+ messages in thread

* [PATCH 3/5] parse-remote: remove long-dead git-pull.sh code
  2017-05-11 17:21   ` Stefan Beller
                       ` (3 preceding siblings ...)
  2020-11-11 15:17     ` [PATCH 2/5] parse-remote: remove long-dead rebase code Ævar Arnfjörð Bjarmason
@ 2020-11-11 15:17     ` Ævar Arnfjörð Bjarmason
  2020-11-11 15:17     ` [PATCH 4/5] parse-remote: move used code to git-submodule.sh Ævar Arnfjörð Bjarmason
  2020-11-11 15:17     ` [PATCH 5/5] parse-remote: remove this now-unused library Ævar Arnfjörð Bjarmason
  6 siblings, 0 replies; 62+ messages in thread
From: Ævar Arnfjörð Bjarmason @ 2020-11-11 15:17 UTC (permalink / raw)
  To: git
  Cc: Junio C Hamano, Johannes Schindelin, Stefan Beller, Jeff King,
	Ævar Arnfjörð Bjarmason

Remove long-dead code that used to be used by git-pull.sh before
49eb8d39c7 ("Remove contrib/examples/*", 2018-03-25).

Signed-off-by: Ævar Arnfjörð Bjarmason <avarab@gmail.com>
---
 git-parse-remote.sh | 40 ----------------------------------------
 1 file changed, 40 deletions(-)

diff --git a/git-parse-remote.sh b/git-parse-remote.sh
index e3f6195281..864519eecf 100644
--- a/git-parse-remote.sh
+++ b/git-parse-remote.sh
@@ -8,43 +8,3 @@ get_default_remote () {
 	origin=$(git config --get "branch.$curr_branch.remote")
 	echo ${origin:-origin}
 }
-
-get_remote_merge_branch () {
-	case "$#" in
-	0|1)
-	    origin="$1"
-	    default=$(get_default_remote)
-	    test -z "$origin" && origin=$default
-	    curr_branch=$(git symbolic-ref -q HEAD) &&
-	    [ "$origin" = "$default" ] &&
-	    echo $(git for-each-ref --format='%(upstream)' $curr_branch)
-	    ;;
-	*)
-	    repo=$1
-	    shift
-	    ref=$1
-	    # FIXME: It should return the tracking branch
-	    #        Currently only works with the default mapping
-	    case "$ref" in
-	    +*)
-		ref=$(expr "z$ref" : 'z+\(.*\)')
-		;;
-	    esac
-	    expr "z$ref" : 'z.*:' >/dev/null || ref="${ref}:"
-	    remote=$(expr "z$ref" : 'z\([^:]*\):')
-	    case "$remote" in
-	    '' | HEAD ) remote=HEAD ;;
-	    heads/*) remote=${remote#heads/} ;;
-	    refs/heads/*) remote=${remote#refs/heads/} ;;
-	    refs/* | tags/* | remotes/* ) remote=
-	    esac
-	    [ -n "$remote" ] && case "$repo" in
-		.)
-		    echo "refs/heads/$remote"
-		    ;;
-		*)
-		    echo "refs/remotes/$repo/$remote"
-		    ;;
-	    esac
-	esac
-}
-- 
2.29.2.222.g5d2a92d10f8


^ permalink raw reply	[flat|nested] 62+ messages in thread

* [PATCH 4/5] parse-remote: move used code to git-submodule.sh
  2017-05-11 17:21   ` Stefan Beller
                       ` (4 preceding siblings ...)
  2020-11-11 15:17     ` [PATCH 3/5] parse-remote: remove long-dead git-pull.sh code Ævar Arnfjörð Bjarmason
@ 2020-11-11 15:17     ` Ævar Arnfjörð Bjarmason
  2020-11-11 15:17     ` [PATCH 5/5] parse-remote: remove this now-unused library Ævar Arnfjörð Bjarmason
  6 siblings, 0 replies; 62+ messages in thread
From: Ævar Arnfjörð Bjarmason @ 2020-11-11 15:17 UTC (permalink / raw)
  To: git
  Cc: Junio C Hamano, Johannes Schindelin, Stefan Beller, Jeff King,
	Ævar Arnfjörð Bjarmason

Move the only code in git-parse-remote.sh that was actually used to
git-submodule.sh.

This leaves just a comment in git-parse-remote.sh for ease of review,
a later commit will remove it and its build system configuration.

Signed-off-by: Ævar Arnfjörð Bjarmason <avarab@gmail.com>
---
 git-parse-remote.sh | 7 -------
 git-submodule.sh    | 7 +++++++
 2 files changed, 7 insertions(+), 7 deletions(-)

diff --git a/git-parse-remote.sh b/git-parse-remote.sh
index 864519eecf..b8d6a215e6 100644
--- a/git-parse-remote.sh
+++ b/git-parse-remote.sh
@@ -1,10 +1,3 @@
 # This is a shell library to calculate the remote repository and
 # upstream branch that should be pulled by "git pull" from the current
 # branch.
-
-get_default_remote () {
-	curr_branch=$(git symbolic-ref -q HEAD)
-	curr_branch="${curr_branch#refs/heads/}"
-	origin=$(git config --get "branch.$curr_branch.remote")
-	echo ${origin:-origin}
-}
diff --git a/git-submodule.sh b/git-submodule.sh
index 7ce52872b7..a6219c34e2 100755
--- a/git-submodule.sh
+++ b/git-submodule.sh
@@ -413,6 +413,13 @@ is_tip_reachable () (
 	test -z "$rev"
 )
 
+get_default_remote () {
+	curr_branch=$(git symbolic-ref -q HEAD)
+	curr_branch="${curr_branch#refs/heads/}"
+	origin=$(git config --get "branch.$curr_branch.remote")
+	echo ${origin:-origin}
+}
+
 fetch_in_submodule () (
 	sanitize_submodule_env &&
 	cd "$1" &&
-- 
2.29.2.222.g5d2a92d10f8


^ permalink raw reply	[flat|nested] 62+ messages in thread

* [PATCH 5/5] parse-remote: remove this now-unused library
  2017-05-11 17:21   ` Stefan Beller
                       ` (5 preceding siblings ...)
  2020-11-11 15:17     ` [PATCH 4/5] parse-remote: move used code to git-submodule.sh Ævar Arnfjörð Bjarmason
@ 2020-11-11 15:17     ` Ævar Arnfjörð Bjarmason
  2020-11-11 16:33       ` Junio C Hamano
  6 siblings, 1 reply; 62+ messages in thread
From: Ævar Arnfjörð Bjarmason @ 2020-11-11 15:17 UTC (permalink / raw)
  To: git
  Cc: Junio C Hamano, Johannes Schindelin, Stefan Beller, Jeff King,
	Ævar Arnfjörð Bjarmason

Completely remove the git-parse-remote shellscript library.

Since e9460a66e0 ("parse-remote: support default reflist in
get_remote_merge_branch", 2009-06-12) when there were around 300 lines
of code here used by various core code everything in it has become
unsued, and that unused code was removed in preceding commits. Almost
all of its previous functionality has now been rewritten in C.

Signed-off-by: Ævar Arnfjörð Bjarmason <avarab@gmail.com>
---
 .gitignore                         |  1 -
 Documentation/git-parse-remote.txt | 23 -----------------------
 Makefile                           |  2 --
 command-list.txt                   |  1 -
 git-submodule.sh                   |  1 -
 5 files changed, 28 deletions(-)
 delete mode 100644 Documentation/git-parse-remote.txt

diff --git a/.gitignore b/.gitignore
index 6232d33924..9da275e4e8 100644
--- a/.gitignore
+++ b/.gitignore
@@ -114,7 +114,6 @@
 /git-pack-redundant
 /git-pack-objects
 /git-pack-refs
-/git-parse-remote
 /git-patch-id
 /git-prune
 /git-prune-packed
diff --git a/Documentation/git-parse-remote.txt b/Documentation/git-parse-remote.txt
deleted file mode 100644
index a45ea1ece8..0000000000
--- a/Documentation/git-parse-remote.txt
+++ /dev/null
@@ -1,23 +0,0 @@
-git-parse-remote(1)
-===================
-
-NAME
-----
-git-parse-remote - Routines to help parsing remote repository access parameters
-
-
-SYNOPSIS
---------
-[verse]
-'. "$(git --exec-path)/git-parse-remote"'
-
-DESCRIPTION
------------
-This script is included in various scripts to supply
-routines to parse files under $GIT_DIR/remotes/ and
-$GIT_DIR/branches/ and configuration variables that are related
-to fetching, pulling and pushing.
-
-GIT
----
-Part of the linkgit:git[1] suite
diff --git a/Makefile b/Makefile
index 790a883932..c874dff9b8 100644
--- a/Makefile
+++ b/Makefile
@@ -613,7 +613,6 @@ SCRIPT_SH += git-submodule.sh
 SCRIPT_SH += git-web--browse.sh
 
 SCRIPT_LIB += git-mergetool--lib
-SCRIPT_LIB += git-parse-remote
 SCRIPT_LIB += git-rebase--preserve-merges
 SCRIPT_LIB += git-sh-i18n
 SCRIPT_LIB += git-sh-setup
@@ -2577,7 +2576,6 @@ XGETTEXT_FLAGS_PERL = $(XGETTEXT_FLAGS) --language=Perl \
 	--keyword=__ --keyword=N__ --keyword="__n:1,2"
 LOCALIZED_C = $(C_OBJ:o=c) $(LIB_H) $(GENERATED_H)
 LOCALIZED_SH = $(SCRIPT_SH)
-LOCALIZED_SH += git-parse-remote.sh
 LOCALIZED_SH += git-rebase--preserve-merges.sh
 LOCALIZED_SH += git-sh-setup.sh
 LOCALIZED_PERL = $(SCRIPT_PERL)
diff --git a/command-list.txt b/command-list.txt
index 0e3204e7d1..c19c8a94fe 100644
--- a/command-list.txt
+++ b/command-list.txt
@@ -135,7 +135,6 @@ git-p4                                  foreignscminterface
 git-pack-objects                        plumbingmanipulators
 git-pack-redundant                      plumbinginterrogators
 git-pack-refs                           ancillarymanipulators
-git-parse-remote                        synchelpers
 git-patch-id                            purehelpers
 git-prune                               ancillarymanipulators   complete
 git-prune-packed                        plumbingmanipulators
diff --git a/git-submodule.sh b/git-submodule.sh
index a6219c34e2..e7962e1a45 100755
--- a/git-submodule.sh
+++ b/git-submodule.sh
@@ -20,7 +20,6 @@ USAGE="[--quiet] [--cached]
 OPTIONS_SPEC=
 SUBDIRECTORY_OK=Yes
 . git-sh-setup
-. git-parse-remote
 require_work_tree
 wt_prefix=$(git rev-parse --show-prefix)
 cd_to_toplevel
-- 
2.29.2.222.g5d2a92d10f8


^ permalink raw reply	[flat|nested] 62+ messages in thread

* Re: [PATCH 5/5] parse-remote: remove this now-unused library
  2020-11-11 15:17     ` [PATCH 5/5] parse-remote: remove this now-unused library Ævar Arnfjörð Bjarmason
@ 2020-11-11 16:33       ` Junio C Hamano
  2020-11-12 20:31         ` [PATCH v2 0/2] Retire git-parse-remote Junio C Hamano
  0 siblings, 1 reply; 62+ messages in thread
From: Junio C Hamano @ 2020-11-11 16:33 UTC (permalink / raw)
  To: Ævar Arnfjörð Bjarmason
  Cc: git, Johannes Schindelin, Stefan Beller, Jeff King

Ævar Arnfjörð Bjarmason  <avarab@gmail.com> writes:

> Completely remove the git-parse-remote shellscript library.
>
> Since e9460a66e0 ("parse-remote: support default reflist in
> get_remote_merge_branch", 2009-06-12) when there were around 300 lines
> of code here used by various core code everything in it has become
> unsued, and that unused code was removed in preceding commits. Almost
> all of its previous functionality has now been rewritten in C.

Very pleasing to see this.

I would imagine that an equally easy to understand and more compact
presentation of this series would have been to

 - copy minimally needed code to git-submodule.sh verbatim, while
   dropping the dot-source from git-submodule.sh (patch 1)

 - just say "nobody now dot-sources this shell library" and do what
   this step does.

Especially 1/5 confused me more than it helped me to understand the
end result ;-)  It does not matter in the endgame that GIT_DIR was
defined there, as long as we know nobody other than git-submodule.sh
dot-sources the shell library and git-submodule.sh uses its own setup.

But that can only be said with perfect hindsight after seeing all
your efforts in these five patches.

Thanks.



^ permalink raw reply	[flat|nested] 62+ messages in thread

* Re: [PATCH 0/5] Remove now-unused git-parse-remote
  2020-11-11 15:17     ` [PATCH 0/5] Remove now-unused git-parse-remote Ævar Arnfjörð Bjarmason
@ 2020-11-11 17:37       ` Jeff King
  2020-11-11 19:29         ` Junio C Hamano
  2020-11-12 14:09         ` Ævar Arnfjörð Bjarmason
  2020-11-12 14:19       ` How do I "git fetch" with a custom <refspec> but a default remote? Ævar Arnfjörð Bjarmason
  1 sibling, 2 replies; 62+ messages in thread
From: Jeff King @ 2020-11-11 17:37 UTC (permalink / raw)
  To: Ævar Arnfjörð Bjarmason
  Cc: git, Junio C Hamano, Johannes Schindelin, Stefan Beller

On Wed, Nov 11, 2020 at 04:17:49PM +0100, Ævar Arnfjörð Bjarmason wrote:

> I started poking at removing .git/branches from the default template,
> which I had a patch for until I noticed Johannes's old[1] series.
> 
> In any case, this is one thing that came out of that
> investigation. The code we're keeping by moving it to git-submodule.sh
> can also be replaced by some C code we have, but I wanted to leave
> that to another submission (if I'll get to it), and make this simply a
> code removal.

I'm happy to see unused code go away in general, but this raises a
question: what promises have we made to end-user scripts about this
library being available?

We do install it, including a manpage which claims you can do:

  . "$(git --exec-path)/git-parse-remote"

though it does not actually document any particular functions being
available. It looks like we've removed functions before without warning
(e.g., 1a92777504 (git-request-pull: open-code the only invocation of
get_remote_url, 2011-03-01)).

I'm just wondering if we need to have any kind of warning or deprecation
period.

To be clear, I find it pretty unlikely that anybody is using the rather
esoteric functions in this file, but that's usually when I get most
surprised. :)

>  .gitignore                         |  1 -
>  Documentation/git-parse-remote.txt | 23 -------
>  Makefile                           |  2 -
>  command-list.txt                   |  1 -
>  git-parse-remote.sh                | 98 ------------------------------
>  git-submodule.sh                   |  8 ++-
>  6 files changed, 7 insertions(+), 126 deletions(-)
>  delete mode 100644 Documentation/git-parse-remote.txt

I expected to see a "delete" line for git-parse-remote.sh here. I
thought at first maybe you were leaving the empty shell so that people
could continue to source it (keeping the promise in the manpage, but not
providing any actual functions). But it looks like the final patch stops
building it at all, leaving the now-useless source file.

-Peff

^ permalink raw reply	[flat|nested] 62+ messages in thread

* Re: [PATCH 0/5] Remove now-unused git-parse-remote
  2020-11-11 17:37       ` Jeff King
@ 2020-11-11 19:29         ` Junio C Hamano
  2020-11-12 14:09         ` Ævar Arnfjörð Bjarmason
  1 sibling, 0 replies; 62+ messages in thread
From: Junio C Hamano @ 2020-11-11 19:29 UTC (permalink / raw)
  To: Jeff King
  Cc: Ævar Arnfjörð Bjarmason, git, Johannes Schindelin,
	Stefan Beller

Jeff King <peff@peff.net> writes:

> To be clear, I find it pretty unlikely that anybody is using the rather
> esoteric functions in this file, but that's usually when I get most
> surprised. :)

I had the same thought when we removed unused functions the last
time, but then stopped worrying about it for this particular shell
library ;-)

> I expected to see a "delete" line for git-parse-remote.sh here. I
> thought at first maybe you were leaving the empty shell so that people
> could continue to source it (keeping the promise in the manpage, but not
> providing any actual functions). But it looks like the final patch stops
> building it at all, leaving the now-useless source file.

A good point.  I do not mind to see a reroll to remove it at the
end.

^ permalink raw reply	[flat|nested] 62+ messages in thread

* Re: [PATCH 0/5] Remove now-unused git-parse-remote
  2020-11-11 17:37       ` Jeff King
  2020-11-11 19:29         ` Junio C Hamano
@ 2020-11-12 14:09         ` Ævar Arnfjörð Bjarmason
  2020-11-12 18:42           ` Jeff King
  1 sibling, 1 reply; 62+ messages in thread
From: Ævar Arnfjörð Bjarmason @ 2020-11-12 14:09 UTC (permalink / raw)
  To: Jeff King; +Cc: git, Junio C Hamano, Johannes Schindelin, Stefan Beller


On Wed, Nov 11 2020, Jeff King wrote:

> On Wed, Nov 11, 2020 at 04:17:49PM +0100, Ævar Arnfjörð Bjarmason wrote:
>
>> I started poking at removing .git/branches from the default template,
>> which I had a patch for until I noticed Johannes's old[1] series.
>> 
>> In any case, this is one thing that came out of that
>> investigation. The code we're keeping by moving it to git-submodule.sh
>> can also be replaced by some C code we have, but I wanted to leave
>> that to another submission (if I'll get to it), and make this simply a
>> code removal.
>
> I'm happy to see unused code go away in general, but this raises a
> question: what promises have we made to end-user scripts about this
> library being available?
>
> We do install it, including a manpage which claims you can do:
>
>   . "$(git --exec-path)/git-parse-remote"
>
> though it does not actually document any particular functions being
> available. It looks like we've removed functions before without warning
> (e.g., 1a92777504 (git-request-pull: open-code the only invocation of
> get_remote_url, 2011-03-01)).
>
> I'm just wondering if we need to have any kind of warning or deprecation
> period.
>
> To be clear, I find it pretty unlikely that anybody is using the rather
> esoteric functions in this file, but that's usually when I get most
> surprised. :)

I think it's fine to just remove it, I'll note that in a v2 commit
message. I.e. the convention at the time was just to create these *.sh
libraries as documented, but I don't think anyone used them outside of
git.git.

If they did maybe we should move them to contrib and ... create the same
bitrot as with the *.sh builtins :)

So I think it's better just to "git rm" it, if it breaks things for
anyone they can just get the last version and maintain it themselves.

>>  .gitignore                         |  1 -
>>  Documentation/git-parse-remote.txt | 23 -------
>>  Makefile                           |  2 -
>>  command-list.txt                   |  1 -
>>  git-parse-remote.sh                | 98 ------------------------------
>>  git-submodule.sh                   |  8 ++-
>>  6 files changed, 7 insertions(+), 126 deletions(-)
>>  delete mode 100644 Documentation/git-parse-remote.txt
>
> I expected to see a "delete" line for git-parse-remote.sh here. I
> thought at first maybe you were leaving the empty shell so that people
> could continue to source it (keeping the promise in the manpage, but not
> providing any actual functions). But it looks like the final patch stops
> building it at all, leaving the now-useless source file.

That was just a mistake on my part, I meant to "git rm" it but
forgot. Will fix it v2.

^ permalink raw reply	[flat|nested] 62+ messages in thread

* How do I "git fetch" with a custom <refspec> but a default remote?
  2020-11-11 15:17     ` [PATCH 0/5] Remove now-unused git-parse-remote Ævar Arnfjörð Bjarmason
  2020-11-11 17:37       ` Jeff King
@ 2020-11-12 14:19       ` Ævar Arnfjörð Bjarmason
  2020-11-12 18:51         ` Jeff King
  2020-11-14 12:12         ` Ævar Arnfjörð Bjarmason
  1 sibling, 2 replies; 62+ messages in thread
From: Ævar Arnfjörð Bjarmason @ 2020-11-12 14:19 UTC (permalink / raw)
  To: git
  Cc: Junio C Hamano, Johannes Schindelin, Stefan Beller, Jeff King,
	Ævar Arnfjörð Bjarmason


On Wed, Nov 11 2020, Ævar Arnfjörð Bjarmason wrote:

> In any case, this is one thing that came out of that
> investigation. The code we're keeping by moving it to git-submodule.sh
> can also be replaced by some C code we have, but I wanted to leave
> that to another submission (if I'll get to it), and make this simply a
> code removal.

I may have missed a way to do $subject, but I don't think it's
possible. The reason I want it is because git-submodule.sh does this:

    git fetch $(get_default_remote) "$@" ;;

Where that shellscript function gets the name of the remote configured
for the current branch. If you do just a:

    git fetch

Then it will do the right thing, per its documentation:

     When no remote is specified, by default the origin remote will be
     used, unless there’s an upstream branch configured for the current
     branch.

But git-submodule.sh wants to do:

    git fetch <default-remote> <some-sha1>

So the caller is forced to find out what that is.

I came up with this patch:
    
    diff --git a/builtin/fetch.c b/builtin/fetch.c
    index f9c3c49f14..f110ac8d08 100644
    --- a/builtin/fetch.c
    +++ b/builtin/fetch.c
    @@ -56,6 +56,7 @@ static int prune_tags = -1; /* unspecified */
     #define PRUNE_TAGS_BY_DEFAULT 0 /* do we prune tags by default? */
     
     static int all, append, dry_run, force, keep, multiple, update_head_ok;
    +static int default_remote;
     static int write_fetch_head = 1;
     static int verbosity, deepen_relative, set_upstream;
     static int progress = -1;
    @@ -140,6 +141,8 @@ static struct option builtin_fetch_options[] = {
            OPT__VERBOSITY(&verbosity),
            OPT_BOOL(0, "all", &all,
                     N_("fetch from all remotes")),
    +       OPT_BOOL(0, "default-remote", &default_remote,
    +                N_("fetch from default remote")),
            OPT_BOOL(0, "set-upstream", &set_upstream,
                     N_("set upstream for git pull/fetch")),
            OPT_BOOL('a', "append", &append,
    @@ -1852,7 +1855,7 @@ int cmd_fetch(int argc, const char **argv, const char *prefix)
                    else if (argc > 1)
                            die(_("fetch --all does not make sense with refspecs"));
                    (void) for_each_remote(get_one_remote_for_fetch, &list);
    -       } else if (argc == 0) {
    +       } else if (argc == 0 || default_remote) {
                    /* No arguments -- use default remote */
                    remote = remote_get(NULL);
            } else if (multiple) {

Which allows me to do:

    -               git fetch $(get_default_remote) "$@" ;;
    +               git fetch --default-remote "$@" ;;


So it works, but what do we think about this calling convention? Do we
have any prior art for commands that take positional arguments like
<remote> and <refspec> where you'd like to use a default for an earlier
argument to provide a subsequent one?

To make it more general and consistent we'de probably like a --remote=*
and --refspec arguments, so the invocation would be:

    git fetch ([--remote=]<name> | --default-remote) [([--refspec=]<refspec> | --default-refspec)]

But maybe I'm overthinking it...


^ permalink raw reply	[flat|nested] 62+ messages in thread

* Re: [PATCH 0/5] Remove now-unused git-parse-remote
  2020-11-12 14:09         ` Ævar Arnfjörð Bjarmason
@ 2020-11-12 18:42           ` Jeff King
  0 siblings, 0 replies; 62+ messages in thread
From: Jeff King @ 2020-11-12 18:42 UTC (permalink / raw)
  To: Ævar Arnfjörð Bjarmason
  Cc: git, Junio C Hamano, Johannes Schindelin, Stefan Beller

On Thu, Nov 12, 2020 at 03:09:25PM +0100, Ævar Arnfjörð Bjarmason wrote:

> > To be clear, I find it pretty unlikely that anybody is using the rather
> > esoteric functions in this file, but that's usually when I get most
> > surprised. :)
> 
> I think it's fine to just remove it, I'll note that in a v2 commit
> message. I.e. the convention at the time was just to create these *.sh
> libraries as documented, but I don't think anyone used them outside of
> git.git.

OK. I'm fine with that interpretation as long as we are doing it
consciously. It might be worth noting in the release notes (not only the
removal here, but our general attitude towards these shell libraries).

> If they did maybe we should move them to contrib and ... create the same
> bitrot as with the *.sh builtins :)

Please no. :)

> > I expected to see a "delete" line for git-parse-remote.sh here. I
> > thought at first maybe you were leaving the empty shell so that people
> > could continue to source it (keeping the promise in the manpage, but not
> > providing any actual functions). But it looks like the final patch stops
> > building it at all, leaving the now-useless source file.
> 
> That was just a mistake on my part, I meant to "git rm" it but
> forgot. Will fix it v2.

Makes sense.

-Peff

^ permalink raw reply	[flat|nested] 62+ messages in thread

* Re: How do I "git fetch" with a custom <refspec> but a default remote?
  2020-11-12 14:19       ` How do I "git fetch" with a custom <refspec> but a default remote? Ævar Arnfjörð Bjarmason
@ 2020-11-12 18:51         ` Jeff King
  2020-11-12 19:26           ` Chris Torek
  2020-11-14 12:12         ` Ævar Arnfjörð Bjarmason
  1 sibling, 1 reply; 62+ messages in thread
From: Jeff King @ 2020-11-12 18:51 UTC (permalink / raw)
  To: Ævar Arnfjörð Bjarmason
  Cc: git, Junio C Hamano, Johannes Schindelin, Stefan Beller

On Thu, Nov 12, 2020 at 03:19:19PM +0100, Ævar Arnfjörð Bjarmason wrote:

> On Wed, Nov 11 2020, Ævar Arnfjörð Bjarmason wrote:
> 
> > In any case, this is one thing that came out of that
> > investigation. The code we're keeping by moving it to git-submodule.sh
> > can also be replaced by some C code we have, but I wanted to leave
> > that to another submission (if I'll get to it), and make this simply a
> > code removal.
> 
> I may have missed a way to do $subject, but I don't think it's
> possible.

I'm pretty certain it's not. I've run into this before and looked for a
solution without finding one (in my case I was not scripting, but was
just too lazy to type "origin").

> I came up with this patch:
> [...]
> So it works, but what do we think about this calling convention? Do we
> have any prior art for commands that take positional arguments like
> <remote> and <refspec> where you'd like to use a default for an earlier
> argument to provide a subsequent one?

It seems perfectly reasonable to me. The logic for parsing (that users
must understand) is: if --default-remote is specified, act as if the
default remote was specified as the first argument.

I can't think offhand of a case exactly like this, but certainly options
like "git tag -d" influences how the non-option arguments are parsed.

> To make it more general and consistent we'de probably like a --remote=*
> and --refspec arguments, so the invocation would be:
> 
>     git fetch ([--remote=]<name> | --default-remote) [([--refspec=]<refspec> | --default-refspec)]
> 
> But maybe I'm overthinking it...

If we were starting from scratch, then I think that might have been
nicer, because --default-remote would be implied if there is no
"--remote" option. And then my lazy-to-type:

  git fetch topic

would just work. But given that we have the positional <remote>
parameter already, I don't think adding --remote gives much value. And
it raises the question of what "git fetch --remote=foo --remote=bar"
means (I think the answer is last-one-wins).

Slightly orthogonal, but I've occasionally also wished for:

  git fetch @{upstream}

or

  git fetch @{push}

to grab the latest copy of related branches. Those are a _bit_ funny in
that we usually resolve those names to the local tracking branch. But I
think the semantics are clear (we get to that tracking branch by
applying fetch refspecs to a particular remote).

I mention it only in case it gives you any bright ideas on how the
command-line parsing would work there.

-Peff

^ permalink raw reply	[flat|nested] 62+ messages in thread

* Re: How do I "git fetch" with a custom <refspec> but a default remote?
  2020-11-12 18:51         ` Jeff King
@ 2020-11-12 19:26           ` Chris Torek
  2020-11-12 20:48             ` Jeff King
  0 siblings, 1 reply; 62+ messages in thread
From: Chris Torek @ 2020-11-12 19:26 UTC (permalink / raw)
  To: Jeff King
  Cc: Ævar Arnfjörð Bjarmason, Git List, Junio C Hamano,
	Johannes Schindelin, Stefan Beller

On Thu, Nov 12, 2020 at 10:52 AM Jeff King <peff@peff.net> wrote:
> If we were starting from scratch, then I think that might have been
> nicer, because --default-remote would be implied if there is no
> "--remote" option. And then my lazy-to-type:
>
>   git fetch topic
>
> would just work. But given that we have the positional <remote>
> parameter already, I don't think adding --remote gives much value. And
> it raises the question of what "git fetch --remote=foo --remote=bar"
> means (I think the answer is last-one-wins).

Since `git fetch` can fetch from more than one remote, it seems to me
to make more sense to mean "fetch from each".

(This isn't necessarily an argument in favor of adding these options,
just my suggestion for what multiple `--remote=` settings would mean.)

Chris

^ permalink raw reply	[flat|nested] 62+ messages in thread

* [PATCH v2 0/2] Retire git-parse-remote
  2020-11-11 16:33       ` Junio C Hamano
@ 2020-11-12 20:31         ` Junio C Hamano
  2020-11-12 20:31           ` [PATCH v2 1/2] parse-remote: move used code to git-submodule.sh Junio C Hamano
                             ` (7 more replies)
  0 siblings, 8 replies; 62+ messages in thread
From: Junio C Hamano @ 2020-11-12 20:31 UTC (permalink / raw)
  To: git; +Cc: Ævar Arnfjörð Bjarmason

This is based on Ævar's 5-patch series, which removed unused bits
from git-parse-remote one by one, before finally moving the remnant
to the only user to remove the file.

Earlier I suggested an alternative arrangement of the series to just
lift what is still in use and then discard the rest without even
splitting them out into separate commits---it is easy to see what's
not used by grepping for names of the helper functions.

The only difference in the end result is that git-parse-remote.sh file
itself is also removed.

Ævar Arnfjörð Bjarmason (2):
  parse-remote: move used code to git-submodule.sh
  parse-remote: remove this now-unused library

 .gitignore                         |   1 -
 Documentation/git-parse-remote.txt |  23 -------
 Makefile                           |   2 -
 command-list.txt                   |   1 -
 git-parse-remote.sh                | 101 -----------------------------
 git-submodule.sh                   |   8 ++-
 6 files changed, 7 insertions(+), 129 deletions(-)
 delete mode 100644 Documentation/git-parse-remote.txt
 delete mode 100644 git-parse-remote.sh

Range-diff against v1:
1:  f8c1396d68 < -:  ---------- parse-remote: remove unused GIT_DIR variable
2:  5f2dac99b8 < -:  ---------- parse-remote: remove long-dead rebase code
3:  871a40c7e0 < -:  ---------- parse-remote: remove long-dead git-pull.sh code
4:  17b0d43b65 ! 1:  8d8de925ea parse-remote: move used code to git-submodule.sh
    @@ Metadata
      ## Commit message ##
         parse-remote: move used code to git-submodule.sh
     
    -    Move the only code in git-parse-remote.sh that was actually used to
    -    git-submodule.sh.
    +    Move the get_default_remote () helper from git-parse-remote.sh to
    +    git-submodule.sh, as the latter is the only user.
     
    -    This leaves just a comment in git-parse-remote.sh for ease of review,
    -    a later commit will remove it and its build system configuration.
    +    There are two more helper functions, get_remote_merge_branch() and
    +    error_on_missing_default_upstream(), in the git-parse-remote shell
    +    function library, but they are not referenced by git-submodule.sh;
    +    stop dot-sourcing the git-parse-remote.
     
         Signed-off-by: Ævar Arnfjörð Bjarmason <avarab@gmail.com>
         Signed-off-by: Junio C Hamano <gitster@pobox.com>
     
      ## git-parse-remote.sh ##
     @@
    - # This is a shell library to calculate the remote repository and
    - # upstream branch that should be pulled by "git pull" from the current
    - # branch.
    --
    + # this would fail in that case and would issue an error message.
    + GIT_DIR=$(git rev-parse -q --git-dir) || :;
    + 
     -get_default_remote () {
     -	curr_branch=$(git symbolic-ref -q HEAD)
     -	curr_branch="${curr_branch#refs/heads/}"
     -	origin=$(git config --get "branch.$curr_branch.remote")
     -	echo ${origin:-origin}
     -}
    +-
    + get_remote_merge_branch () {
    + 	case "$#" in
    + 	0|1)
     
      ## git-submodule.sh ##
    +@@ git-submodule.sh: USAGE="[--quiet] [--cached]
    + OPTIONS_SPEC=
    + SUBDIRECTORY_OK=Yes
    + . git-sh-setup
    +-. git-parse-remote
    + require_work_tree
    + wt_prefix=$(git rev-parse --show-prefix)
    + cd_to_toplevel
     @@ git-submodule.sh: is_tip_reachable () (
      	test -z "$rev"
      )
5:  1bda9e4479 ! 2:  a7520d32df parse-remote: remove this now-unused library
    @@ Metadata
      ## Commit message ##
         parse-remote: remove this now-unused library
     
    -    Completely remove the git-parse-remote shellscript library.
    -
    -    Since e9460a66e0 ("parse-remote: support default reflist in
    -    get_remote_merge_branch", 2009-06-12) when there were around 300 lines
    -    of code here used by various core code everything in it has become
    -    unsued, and that unused code was removed in preceding commits. Almost
    -    all of its previous functionality has now been rewritten in C.
    +    Since the previous step stopped dot-sourcing it from
    +    git-submodule.sh, nothing uses git-parse-remote, which
    +    still has two unused functions.  Remove the dead code
    +    together with the file itself and documentation.
     
         Signed-off-by: Ævar Arnfjörð Bjarmason <avarab@gmail.com>
         Signed-off-by: Junio C Hamano <gitster@pobox.com>
    @@ command-list.txt: git-p4                                  foreignscminterface
      git-prune                               ancillarymanipulators   complete
      git-prune-packed                        plumbingmanipulators
     
    - ## git-submodule.sh ##
    -@@ git-submodule.sh: USAGE="[--quiet] [--cached]
    - OPTIONS_SPEC=
    - SUBDIRECTORY_OK=Yes
    - . git-sh-setup
    --. git-parse-remote
    - require_work_tree
    - wt_prefix=$(git rev-parse --show-prefix)
    - cd_to_toplevel
    + ## git-parse-remote.sh (deleted) ##
    +@@
    +-# This is a shell library to calculate the remote repository and
    +-# upstream branch that should be pulled by "git pull" from the current
    +-# branch.
    +-
    +-# git-ls-remote could be called from outside a git managed repository;
    +-# this would fail in that case and would issue an error message.
    +-GIT_DIR=$(git rev-parse -q --git-dir) || :;
    +-
    +-get_remote_merge_branch () {
    +-	case "$#" in
    +-	0|1)
    +-	    origin="$1"
    +-	    default=$(get_default_remote)
    +-	    test -z "$origin" && origin=$default
    +-	    curr_branch=$(git symbolic-ref -q HEAD) &&
    +-	    [ "$origin" = "$default" ] &&
    +-	    echo $(git for-each-ref --format='%(upstream)' $curr_branch)
    +-	    ;;
    +-	*)
    +-	    repo=$1
    +-	    shift
    +-	    ref=$1
    +-	    # FIXME: It should return the tracking branch
    +-	    #        Currently only works with the default mapping
    +-	    case "$ref" in
    +-	    +*)
    +-		ref=$(expr "z$ref" : 'z+\(.*\)')
    +-		;;
    +-	    esac
    +-	    expr "z$ref" : 'z.*:' >/dev/null || ref="${ref}:"
    +-	    remote=$(expr "z$ref" : 'z\([^:]*\):')
    +-	    case "$remote" in
    +-	    '' | HEAD ) remote=HEAD ;;
    +-	    heads/*) remote=${remote#heads/} ;;
    +-	    refs/heads/*) remote=${remote#refs/heads/} ;;
    +-	    refs/* | tags/* | remotes/* ) remote=
    +-	    esac
    +-	    [ -n "$remote" ] && case "$repo" in
    +-		.)
    +-		    echo "refs/heads/$remote"
    +-		    ;;
    +-		*)
    +-		    echo "refs/remotes/$repo/$remote"
    +-		    ;;
    +-	    esac
    +-	esac
    +-}
    +-
    +-error_on_missing_default_upstream () {
    +-	cmd="$1"
    +-	op_type="$2"
    +-	op_prep="$3" # FIXME: op_prep is no longer used
    +-	example="$4"
    +-	branch_name=$(git symbolic-ref -q HEAD)
    +-	display_branch_name="${branch_name#refs/heads/}"
    +-	# If there's only one remote, use that in the suggestion
    +-	remote="$(gettext "<remote>")"
    +-	branch="$(gettext "<branch>")"
    +-	if test $(git remote | wc -l) = 1
    +-	then
    +-		remote=$(git remote)
    +-	fi
    +-
    +-	if test -z "$branch_name"
    +-	then
    +-		gettextln "You are not currently on a branch."
    +-	else
    +-		gettextln "There is no tracking information for the current branch."
    +-	fi
    +-	case "$op_type" in
    +-	rebase)
    +-		gettextln "Please specify which branch you want to rebase against."
    +-		;;
    +-	merge)
    +-		gettextln "Please specify which branch you want to merge with."
    +-		;;
    +-	*)
    +-		echo >&2 "BUG: unknown operation type: $op_type"
    +-		exit 1
    +-		;;
    +-	esac
    +-	eval_gettextln "See git-\${cmd}(1) for details."
    +-	echo
    +-	echo "    $example"
    +-	echo
    +-	if test -n "$branch_name"
    +-	then
    +-		gettextln "If you wish to set tracking information for this branch you can do so with:"
    +-		echo
    +-		echo "    git branch --set-upstream-to=$remote/$branch $display_branch_name"
    +-		echo
    +-	fi
    +-	exit 1
    +-}
-- 
2.29.2-442-ga30192deef


^ permalink raw reply	[flat|nested] 62+ messages in thread

* [PATCH v2 1/2] parse-remote: move used code to git-submodule.sh
  2020-11-12 20:31         ` [PATCH v2 0/2] Retire git-parse-remote Junio C Hamano
@ 2020-11-12 20:31           ` Junio C Hamano
  2020-11-12 20:31           ` [PATCH v2 2/2] parse-remote: remove this now-unused library Junio C Hamano
                             ` (6 subsequent siblings)
  7 siblings, 0 replies; 62+ messages in thread
From: Junio C Hamano @ 2020-11-12 20:31 UTC (permalink / raw)
  To: git; +Cc: Ævar Arnfjörð Bjarmason

From: Ævar Arnfjörð Bjarmason <avarab@gmail.com>

Move the get_default_remote () helper from git-parse-remote.sh to
git-submodule.sh, as the latter is the only user.

There are two more helper functions, get_remote_merge_branch() and
error_on_missing_default_upstream(), in the git-parse-remote shell
function library, but they are not referenced by git-submodule.sh;
stop dot-sourcing the git-parse-remote.

Signed-off-by: Ævar Arnfjörð Bjarmason <avarab@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
---
 git-parse-remote.sh | 7 -------
 git-submodule.sh    | 8 +++++++-
 2 files changed, 7 insertions(+), 8 deletions(-)

diff --git a/git-parse-remote.sh b/git-parse-remote.sh
index d3c39980f3..0c2a5ef6c4 100644
--- a/git-parse-remote.sh
+++ b/git-parse-remote.sh
@@ -6,13 +6,6 @@
 # this would fail in that case and would issue an error message.
 GIT_DIR=$(git rev-parse -q --git-dir) || :;
 
-get_default_remote () {
-	curr_branch=$(git symbolic-ref -q HEAD)
-	curr_branch="${curr_branch#refs/heads/}"
-	origin=$(git config --get "branch.$curr_branch.remote")
-	echo ${origin:-origin}
-}
-
 get_remote_merge_branch () {
 	case "$#" in
 	0|1)
diff --git a/git-submodule.sh b/git-submodule.sh
index 7ce52872b7..e7962e1a45 100755
--- a/git-submodule.sh
+++ b/git-submodule.sh
@@ -20,7 +20,6 @@ USAGE="[--quiet] [--cached]
 OPTIONS_SPEC=
 SUBDIRECTORY_OK=Yes
 . git-sh-setup
-. git-parse-remote
 require_work_tree
 wt_prefix=$(git rev-parse --show-prefix)
 cd_to_toplevel
@@ -413,6 +412,13 @@ is_tip_reachable () (
 	test -z "$rev"
 )
 
+get_default_remote () {
+	curr_branch=$(git symbolic-ref -q HEAD)
+	curr_branch="${curr_branch#refs/heads/}"
+	origin=$(git config --get "branch.$curr_branch.remote")
+	echo ${origin:-origin}
+}
+
 fetch_in_submodule () (
 	sanitize_submodule_env &&
 	cd "$1" &&
-- 
2.29.2-442-ga30192deef


^ permalink raw reply	[flat|nested] 62+ messages in thread

* [PATCH v2 2/2] parse-remote: remove this now-unused library
  2020-11-12 20:31         ` [PATCH v2 0/2] Retire git-parse-remote Junio C Hamano
  2020-11-12 20:31           ` [PATCH v2 1/2] parse-remote: move used code to git-submodule.sh Junio C Hamano
@ 2020-11-12 20:31           ` Junio C Hamano
  2020-11-12 20:49           ` [PATCH v2 0/2] Retire git-parse-remote Jeff King
                             ` (5 subsequent siblings)
  7 siblings, 0 replies; 62+ messages in thread
From: Junio C Hamano @ 2020-11-12 20:31 UTC (permalink / raw)
  To: git; +Cc: Ævar Arnfjörð Bjarmason

From: Ævar Arnfjörð Bjarmason <avarab@gmail.com>

Since the previous step stopped dot-sourcing it from
git-submodule.sh, nothing uses git-parse-remote, which
still has two unused functions.  Remove the dead code
together with the file itself and documentation.

Signed-off-by: Ævar Arnfjörð Bjarmason <avarab@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
---
 .gitignore                         |  1 -
 Documentation/git-parse-remote.txt | 23 --------
 Makefile                           |  2 -
 command-list.txt                   |  1 -
 git-parse-remote.sh                | 94 ------------------------------
 5 files changed, 121 deletions(-)
 delete mode 100644 Documentation/git-parse-remote.txt
 delete mode 100644 git-parse-remote.sh

diff --git a/.gitignore b/.gitignore
index 6232d33924..9da275e4e8 100644
--- a/.gitignore
+++ b/.gitignore
@@ -114,7 +114,6 @@
 /git-pack-redundant
 /git-pack-objects
 /git-pack-refs
-/git-parse-remote
 /git-patch-id
 /git-prune
 /git-prune-packed
diff --git a/Documentation/git-parse-remote.txt b/Documentation/git-parse-remote.txt
deleted file mode 100644
index a45ea1ece8..0000000000
--- a/Documentation/git-parse-remote.txt
+++ /dev/null
@@ -1,23 +0,0 @@
-git-parse-remote(1)
-===================
-
-NAME
-----
-git-parse-remote - Routines to help parsing remote repository access parameters
-
-
-SYNOPSIS
---------
-[verse]
-'. "$(git --exec-path)/git-parse-remote"'
-
-DESCRIPTION
------------
-This script is included in various scripts to supply
-routines to parse files under $GIT_DIR/remotes/ and
-$GIT_DIR/branches/ and configuration variables that are related
-to fetching, pulling and pushing.
-
-GIT
----
-Part of the linkgit:git[1] suite
diff --git a/Makefile b/Makefile
index 1fb0ec1705..9c154a2666 100644
--- a/Makefile
+++ b/Makefile
@@ -613,7 +613,6 @@ SCRIPT_SH += git-submodule.sh
 SCRIPT_SH += git-web--browse.sh
 
 SCRIPT_LIB += git-mergetool--lib
-SCRIPT_LIB += git-parse-remote
 SCRIPT_LIB += git-rebase--preserve-merges
 SCRIPT_LIB += git-sh-i18n
 SCRIPT_LIB += git-sh-setup
@@ -2577,7 +2576,6 @@ XGETTEXT_FLAGS_PERL = $(XGETTEXT_FLAGS) --language=Perl \
 	--keyword=__ --keyword=N__ --keyword="__n:1,2"
 LOCALIZED_C = $(C_OBJ:o=c) $(LIB_H) $(GENERATED_H)
 LOCALIZED_SH = $(SCRIPT_SH)
-LOCALIZED_SH += git-parse-remote.sh
 LOCALIZED_SH += git-rebase--preserve-merges.sh
 LOCALIZED_SH += git-sh-setup.sh
 LOCALIZED_PERL = $(SCRIPT_PERL)
diff --git a/command-list.txt b/command-list.txt
index 0e3204e7d1..c19c8a94fe 100644
--- a/command-list.txt
+++ b/command-list.txt
@@ -135,7 +135,6 @@ git-p4                                  foreignscminterface
 git-pack-objects                        plumbingmanipulators
 git-pack-redundant                      plumbinginterrogators
 git-pack-refs                           ancillarymanipulators
-git-parse-remote                        synchelpers
 git-patch-id                            purehelpers
 git-prune                               ancillarymanipulators   complete
 git-prune-packed                        plumbingmanipulators
diff --git a/git-parse-remote.sh b/git-parse-remote.sh
deleted file mode 100644
index 0c2a5ef6c4..0000000000
--- a/git-parse-remote.sh
+++ /dev/null
@@ -1,94 +0,0 @@
-# This is a shell library to calculate the remote repository and
-# upstream branch that should be pulled by "git pull" from the current
-# branch.
-
-# git-ls-remote could be called from outside a git managed repository;
-# this would fail in that case and would issue an error message.
-GIT_DIR=$(git rev-parse -q --git-dir) || :;
-
-get_remote_merge_branch () {
-	case "$#" in
-	0|1)
-	    origin="$1"
-	    default=$(get_default_remote)
-	    test -z "$origin" && origin=$default
-	    curr_branch=$(git symbolic-ref -q HEAD) &&
-	    [ "$origin" = "$default" ] &&
-	    echo $(git for-each-ref --format='%(upstream)' $curr_branch)
-	    ;;
-	*)
-	    repo=$1
-	    shift
-	    ref=$1
-	    # FIXME: It should return the tracking branch
-	    #        Currently only works with the default mapping
-	    case "$ref" in
-	    +*)
-		ref=$(expr "z$ref" : 'z+\(.*\)')
-		;;
-	    esac
-	    expr "z$ref" : 'z.*:' >/dev/null || ref="${ref}:"
-	    remote=$(expr "z$ref" : 'z\([^:]*\):')
-	    case "$remote" in
-	    '' | HEAD ) remote=HEAD ;;
-	    heads/*) remote=${remote#heads/} ;;
-	    refs/heads/*) remote=${remote#refs/heads/} ;;
-	    refs/* | tags/* | remotes/* ) remote=
-	    esac
-	    [ -n "$remote" ] && case "$repo" in
-		.)
-		    echo "refs/heads/$remote"
-		    ;;
-		*)
-		    echo "refs/remotes/$repo/$remote"
-		    ;;
-	    esac
-	esac
-}
-
-error_on_missing_default_upstream () {
-	cmd="$1"
-	op_type="$2"
-	op_prep="$3" # FIXME: op_prep is no longer used
-	example="$4"
-	branch_name=$(git symbolic-ref -q HEAD)
-	display_branch_name="${branch_name#refs/heads/}"
-	# If there's only one remote, use that in the suggestion
-	remote="$(gettext "<remote>")"
-	branch="$(gettext "<branch>")"
-	if test $(git remote | wc -l) = 1
-	then
-		remote=$(git remote)
-	fi
-
-	if test -z "$branch_name"
-	then
-		gettextln "You are not currently on a branch."
-	else
-		gettextln "There is no tracking information for the current branch."
-	fi
-	case "$op_type" in
-	rebase)
-		gettextln "Please specify which branch you want to rebase against."
-		;;
-	merge)
-		gettextln "Please specify which branch you want to merge with."
-		;;
-	*)
-		echo >&2 "BUG: unknown operation type: $op_type"
-		exit 1
-		;;
-	esac
-	eval_gettextln "See git-\${cmd}(1) for details."
-	echo
-	echo "    $example"
-	echo
-	if test -n "$branch_name"
-	then
-		gettextln "If you wish to set tracking information for this branch you can do so with:"
-		echo
-		echo "    git branch --set-upstream-to=$remote/$branch $display_branch_name"
-		echo
-	fi
-	exit 1
-}
-- 
2.29.2-442-ga30192deef


^ permalink raw reply	[flat|nested] 62+ messages in thread

* Re: How do I "git fetch" with a custom <refspec> but a default remote?
  2020-11-12 19:26           ` Chris Torek
@ 2020-11-12 20:48             ` Jeff King
  2020-11-12 21:22               ` Junio C Hamano
  0 siblings, 1 reply; 62+ messages in thread
From: Jeff King @ 2020-11-12 20:48 UTC (permalink / raw)
  To: Chris Torek
  Cc: Ævar Arnfjörð Bjarmason, Git List, Junio C Hamano,
	Johannes Schindelin, Stefan Beller

On Thu, Nov 12, 2020 at 11:26:25AM -0800, Chris Torek wrote:

> On Thu, Nov 12, 2020 at 10:52 AM Jeff King <peff@peff.net> wrote:
> > If we were starting from scratch, then I think that might have been
> > nicer, because --default-remote would be implied if there is no
> > "--remote" option. And then my lazy-to-type:
> >
> >   git fetch topic
> >
> > would just work. But given that we have the positional <remote>
> > parameter already, I don't think adding --remote gives much value. And
> > it raises the question of what "git fetch --remote=foo --remote=bar"
> > means (I think the answer is last-one-wins).
> 
> Since `git fetch` can fetch from more than one remote, it seems to me
> to make more sense to mean "fetch from each".

Ah, right, I forgot that --multiple existed. Without it, specifying
multiple remotes makes no sense at all. But perhaps giving multiple
--remote would implicitly specify "--multiple". That makes sense to me.

> (This isn't necessarily an argument in favor of adding these options,
> just my suggestion for what multiple `--remote=` settings would mean.)

Likewise. "makes sense" above mostly means I would not object to it, but
I am not advocating for it. :)

-Peff

^ permalink raw reply	[flat|nested] 62+ messages in thread

* Re: [PATCH v2 0/2] Retire git-parse-remote
  2020-11-12 20:31         ` [PATCH v2 0/2] Retire git-parse-remote Junio C Hamano
  2020-11-12 20:31           ` [PATCH v2 1/2] parse-remote: move used code to git-submodule.sh Junio C Hamano
  2020-11-12 20:31           ` [PATCH v2 2/2] parse-remote: remove this now-unused library Junio C Hamano
@ 2020-11-12 20:49           ` Jeff King
  2020-11-12 21:25             ` Junio C Hamano
  2020-11-13  9:42           ` Ævar Arnfjörð Bjarmason
                             ` (4 subsequent siblings)
  7 siblings, 1 reply; 62+ messages in thread
From: Jeff King @ 2020-11-12 20:49 UTC (permalink / raw)
  To: Junio C Hamano; +Cc: git, Ævar Arnfjörð Bjarmason

On Thu, Nov 12, 2020 at 12:31:53PM -0800, Junio C Hamano wrote:

> This is based on Ævar's 5-patch series, which removed unused bits
> from git-parse-remote one by one, before finally moving the remnant
> to the only user to remove the file.
> 
> Earlier I suggested an alternative arrangement of the series to just
> lift what is still in use and then discard the rest without even
> splitting them out into separate commits---it is easy to see what's
> not used by grepping for names of the helper functions.

FWIW, this arrangement makes much more sense to me. But I am happy with
either (as long as the file is fully deleted in the end ;) ).

-Peff

^ permalink raw reply	[flat|nested] 62+ messages in thread

* Re: How do I "git fetch" with a custom <refspec> but a default remote?
  2020-11-12 20:48             ` Jeff King
@ 2020-11-12 21:22               ` Junio C Hamano
  0 siblings, 0 replies; 62+ messages in thread
From: Junio C Hamano @ 2020-11-12 21:22 UTC (permalink / raw)
  To: Jeff King
  Cc: Chris Torek, Ævar Arnfjörð Bjarmason, Git List,
	Johannes Schindelin, Stefan Beller

Jeff King <peff@peff.net> writes:

> On Thu, Nov 12, 2020 at 11:26:25AM -0800, Chris Torek wrote:
>
>> On Thu, Nov 12, 2020 at 10:52 AM Jeff King <peff@peff.net> wrote:
>> > If we were starting from scratch, then I think that might have been
>> > nicer, because --default-remote would be implied if there is no
>> > "--remote" option. And then my lazy-to-type:
>> >
>> >   git fetch topic
>> >
>> > would just work. But given that we have the positional <remote>
>> > parameter already, I don't think adding --remote gives much value. And
>> > it raises the question of what "git fetch --remote=foo --remote=bar"
>> > means (I think the answer is last-one-wins).
>> 
>> Since `git fetch` can fetch from more than one remote, it seems to me
>> to make more sense to mean "fetch from each".
>
> Ah, right, I forgot that --multiple existed. Without it, specifying
> multiple remotes makes no sense at all. But perhaps giving multiple
> --remote would implicitly specify "--multiple". That makes sense to me.
>
>> (This isn't necessarily an argument in favor of adding these options,
>> just my suggestion for what multiple `--remote=` settings would mean.)
>
> Likewise. "makes sense" above mostly means I would not object to it, but
> I am not advocating for it. :)

I am not sure if it makes much sense, though.

The "--multiple" mode of "fetch" is about running the default fetch
against each of the named remotes and the idea does not mesh very
well with using (possibly different) fetch refspec per each of these
fetch operations.

We could come up with the maximally flexible and orthogonal syntax
that gives the command one or more (remote, fetch refspec) tuples
and give a way to say "use the default remote" for the first
component of the tuple, and a way to say "use the configured way for
the remote" for the second component of the tuple.  But at that
point, there would just be a single syntax that can be used to drive
fetches from multiple repositories, so...




^ permalink raw reply	[flat|nested] 62+ messages in thread

* Re: [PATCH v2 0/2] Retire git-parse-remote
  2020-11-12 20:49           ` [PATCH v2 0/2] Retire git-parse-remote Jeff King
@ 2020-11-12 21:25             ` Junio C Hamano
  0 siblings, 0 replies; 62+ messages in thread
From: Junio C Hamano @ 2020-11-12 21:25 UTC (permalink / raw)
  To: Jeff King; +Cc: git, Ævar Arnfjörð Bjarmason

Jeff King <peff@peff.net> writes:

> On Thu, Nov 12, 2020 at 12:31:53PM -0800, Junio C Hamano wrote:
>
>> This is based on Ævar's 5-patch series, which removed unused bits
>> from git-parse-remote one by one, before finally moving the remnant
>> to the only user to remove the file.
>> 
>> Earlier I suggested an alternative arrangement of the series to just
>> lift what is still in use and then discard the rest without even
>> splitting them out into separate commits---it is easy to see what's
>> not used by grepping for names of the helper functions.
>
> FWIW, this arrangement makes much more sense to me. But I am happy with
> either (as long as the file is fully deleted in the end ;) ).

Yeah, one thing I screwed up was that I moved and not copied the
still-used helper in [1/2].  For that to be a sensible change, we
must know nobody uses the helper from git-parse-remote but the
explanation for it would say that nothing dot-sources it and at that
point there is no point to have these changes in two patches ;-)

But as long as the endgame state is sensible, it does not make too
much of a difference.

^ permalink raw reply	[flat|nested] 62+ messages in thread

* Re: [PATCH v2 0/2] Retire git-parse-remote
  2020-11-12 20:31         ` [PATCH v2 0/2] Retire git-parse-remote Junio C Hamano
                             ` (2 preceding siblings ...)
  2020-11-12 20:49           ` [PATCH v2 0/2] Retire git-parse-remote Jeff King
@ 2020-11-13  9:42           ` Ævar Arnfjörð Bjarmason
  2020-11-14 12:21           ` [PATCH v3 0/3] submodule sh->C & retire parse-remote Ævar Arnfjörð Bjarmason
                             ` (3 subsequent siblings)
  7 siblings, 0 replies; 62+ messages in thread
From: Ævar Arnfjörð Bjarmason @ 2020-11-13  9:42 UTC (permalink / raw)
  To: Junio C Hamano; +Cc: git


On Thu, Nov 12 2020, Junio C Hamano wrote:

> This is based on Ævar's 5-patch series, which removed unused bits
> from git-parse-remote one by one, before finally moving the remnant
> to the only user to remove the file.

I was planning to re-roll this myself today, but I see you beat me to
it. This version looks good to me.


^ permalink raw reply	[flat|nested] 62+ messages in thread

* Re: How do I "git fetch" with a custom <refspec> but a default remote?
  2020-11-12 14:19       ` How do I "git fetch" with a custom <refspec> but a default remote? Ævar Arnfjörð Bjarmason
  2020-11-12 18:51         ` Jeff King
@ 2020-11-14 12:12         ` Ævar Arnfjörð Bjarmason
  1 sibling, 0 replies; 62+ messages in thread
From: Ævar Arnfjörð Bjarmason @ 2020-11-14 12:12 UTC (permalink / raw)
  To: git
  Cc: Junio C Hamano, Johannes Schindelin, Stefan Beller, Jeff King,
	Ævar Arnfjörð Bjarmason, Jonathan Tan


On Thu, Nov 12 2020, Ævar Arnfjörð Bjarmason wrote:

> On Wed, Nov 11 2020, Ævar Arnfjörð Bjarmason wrote:
>
>> In any case, this is one thing that came out of that
>> investigation. The code we're keeping by moving it to git-submodule.sh
>> can also be replaced by some C code we have, but I wanted to leave
>> that to another submission (if I'll get to it), and make this simply a
>> code removal.
>
> I may have missed a way to do $subject, but I don't think it's
> possible. The reason I want it is because git-submodule.sh does this:
>
>     git fetch $(get_default_remote) "$@" ;;
>
> Where that shellscript function gets the name of the remote configured
> for the current branch. If you do just a:
>
>     git fetch
>
> Then it will do the right thing, per its documentation:
>
>      When no remote is specified, by default the origin remote will be
>      used, unless there’s an upstream branch configured for the current
>      branch.
>
> But git-submodule.sh wants to do:
>
>     git fetch <default-remote> <some-sha1>
>
> So the caller is forced to find out what that is.
>
> I came up with this patch:
>     
>     diff --git a/builtin/fetch.c b/builtin/fetch.c
>     index f9c3c49f14..f110ac8d08 100644
>     --- a/builtin/fetch.c
>     +++ b/builtin/fetch.c
>     @@ -56,6 +56,7 @@ static int prune_tags = -1; /* unspecified */
>      #define PRUNE_TAGS_BY_DEFAULT 0 /* do we prune tags by default? */
>      
>      static int all, append, dry_run, force, keep, multiple, update_head_ok;
>     +static int default_remote;
>      static int write_fetch_head = 1;
>      static int verbosity, deepen_relative, set_upstream;
>      static int progress = -1;
>     @@ -140,6 +141,8 @@ static struct option builtin_fetch_options[] = {
>             OPT__VERBOSITY(&verbosity),
>             OPT_BOOL(0, "all", &all,
>                      N_("fetch from all remotes")),
>     +       OPT_BOOL(0, "default-remote", &default_remote,
>     +                N_("fetch from default remote")),
>             OPT_BOOL(0, "set-upstream", &set_upstream,
>                      N_("set upstream for git pull/fetch")),
>             OPT_BOOL('a', "append", &append,
>     @@ -1852,7 +1855,7 @@ int cmd_fetch(int argc, const char **argv, const char *prefix)
>                     else if (argc > 1)
>                             die(_("fetch --all does not make sense with refspecs"));
>                     (void) for_each_remote(get_one_remote_for_fetch, &list);
>     -       } else if (argc == 0) {
>     +       } else if (argc == 0 || default_remote) {
>                     /* No arguments -- use default remote */
>                     remote = remote_get(NULL);
>             } else if (multiple) {
>
> Which allows me to do:
>
>     -               git fetch $(get_default_remote) "$@" ;;
>     +               git fetch --default-remote "$@" ;;
>
>
> So it works, but what do we think about this calling convention? Do we
> have any prior art for commands that take positional arguments like
> <remote> and <refspec> where you'd like to use a default for an earlier
> argument to provide a subsequent one?
>
> To make it more general and consistent we'de probably like a --remote=*
> and --refspec arguments, so the invocation would be:
>
>     git fetch ([--remote=]<name> | --default-remote) [([--refspec=]<refspec> | --default-refspec)]
>
> But maybe I'm overthinking it...

To reply to my own question, this is possible with the --stdin option:

    echo <refpec> | git fetch --stdin

See 2b713c272c ("fetch: allow refspecs specified through stdin",
2020-08-17)[1].

1. https://lore.kernel.org/git/9f277f1631a37785dcd72a552dd86738d639ea59.1597722942.git.jonathantanmy@google.com/

^ permalink raw reply	[flat|nested] 62+ messages in thread

* [PATCH v3 0/3] submodule sh->C & retire parse-remote
  2020-11-12 20:31         ` [PATCH v2 0/2] Retire git-parse-remote Junio C Hamano
                             ` (3 preceding siblings ...)
  2020-11-13  9:42           ` Ævar Arnfjörð Bjarmason
@ 2020-11-14 12:21           ` Ævar Arnfjörð Bjarmason
  2020-11-14 12:21           ` [PATCH v3 1/3] submodule: use "fetch" logic instead of custom remote discovery Ævar Arnfjörð Bjarmason
                             ` (2 subsequent siblings)
  7 siblings, 0 replies; 62+ messages in thread
From: Ævar Arnfjörð Bjarmason @ 2020-11-14 12:21 UTC (permalink / raw)
  To: git
  Cc: Junio C Hamano, Johannes Schindelin, Stefan Beller, Jeff King,
	Jonathan Tan, Ævar Arnfjörð Bjarmason

From my 5 commits to remove it in v1, to Junio's 2 commits in v2, to
just one in this series :)

The removal is now simplified by changing the submodule code to invoke
C helpers instead of this old shellscript code. As a result 3/3 is
just a plain removal without needing to move any code to
git-submodule.sh.

Ævar Arnfjörð Bjarmason (3):
  submodule: use "fetch" logic instead of custom remote discovery
  submodule: remove sh function in favor of helper
  parse-remote: remove this now-unused library

 .gitignore                         |   1 -
 Documentation/git-parse-remote.txt |  23 -------
 Makefile                           |   2 -
 command-list.txt                   |   1 -
 git-parse-remote.sh                | 101 -----------------------------
 git-submodule.sh                   |  19 +++---
 6 files changed, 10 insertions(+), 137 deletions(-)
 delete mode 100644 Documentation/git-parse-remote.txt
 delete mode 100644 git-parse-remote.sh

-- 
2.29.2.222.g5d2a92d10f8


^ permalink raw reply	[flat|nested] 62+ messages in thread

* [PATCH v3 1/3] submodule: use "fetch" logic instead of custom remote discovery
  2020-11-12 20:31         ` [PATCH v2 0/2] Retire git-parse-remote Junio C Hamano
                             ` (4 preceding siblings ...)
  2020-11-14 12:21           ` [PATCH v3 0/3] submodule sh->C & retire parse-remote Ævar Arnfjörð Bjarmason
@ 2020-11-14 12:21           ` Ævar Arnfjörð Bjarmason
  2020-11-16 21:13             ` Junio C Hamano
  2020-11-14 12:21           ` [PATCH v3 2/3] submodule: remove sh function in favor of helper Ævar Arnfjörð Bjarmason
  2020-11-14 12:21           ` [PATCH v3 3/3] parse-remote: remove this now-unused library Ævar Arnfjörð Bjarmason
  7 siblings, 1 reply; 62+ messages in thread
From: Ævar Arnfjörð Bjarmason @ 2020-11-14 12:21 UTC (permalink / raw)
  To: git
  Cc: Junio C Hamano, Johannes Schindelin, Stefan Beller, Jeff King,
	Jonathan Tan, Ævar Arnfjörð Bjarmason

Replace a use of the get_default_remote() function with an invocation
of "git fetch"

The "fetch" command already has logic to discover the remote for the
current branch. However, before it learned to accept a custom
refspec *and* use its idea of the default remote, it wasn't possible
to get rid of some equivalent of the "get_default_remote" invocation
here.

As it turns out the recently added "--stdin" option to fetch[1] gives
us a way to do that. Let's use it instead.

While I'm at it simplify the "fetch_in_submodule" function. It wasn't
necessary to pass "$@" to "fetch" since we'd only ever provide one
SHA-1 as an argument in the previous "*" codepath (in addition to
"--depth=N"). Rewrite the function to more narrowly reflect its
use-case.

1. https://lore.kernel.org/git/87eekwf87n.fsf@evledraar.gmail.com/

Signed-off-by: Ævar Arnfjörð Bjarmason <avarab@gmail.com>
---
 git-submodule.sh | 16 +++++++++-------
 1 file changed, 9 insertions(+), 7 deletions(-)

diff --git a/git-submodule.sh b/git-submodule.sh
index 7ce52872b7..d39fd226d8 100755
--- a/git-submodule.sh
+++ b/git-submodule.sh
@@ -416,13 +416,15 @@ is_tip_reachable () (
 fetch_in_submodule () (
 	sanitize_submodule_env &&
 	cd "$1" &&
-	case "$2" in
-	'')
-		git fetch ;;
-	*)
-		shift
-		git fetch $(get_default_remote) "$@" ;;
-	esac
+	if test $# -eq 3
+	then
+		echo "$3" | git fetch --stdin "$2"
+	elif test "$2" -ne ""
+	then
+		git fetch "$2"
+	else
+		git fetch
+	fi
 )
 
 #
-- 
2.29.2.222.g5d2a92d10f8


^ permalink raw reply	[flat|nested] 62+ messages in thread

* [PATCH v3 2/3] submodule: remove sh function in favor of helper
  2020-11-12 20:31         ` [PATCH v2 0/2] Retire git-parse-remote Junio C Hamano
                             ` (5 preceding siblings ...)
  2020-11-14 12:21           ` [PATCH v3 1/3] submodule: use "fetch" logic instead of custom remote discovery Ævar Arnfjörð Bjarmason
@ 2020-11-14 12:21           ` Ævar Arnfjörð Bjarmason
  2020-11-14 12:21           ` [PATCH v3 3/3] parse-remote: remove this now-unused library Ævar Arnfjörð Bjarmason
  7 siblings, 0 replies; 62+ messages in thread
From: Ævar Arnfjörð Bjarmason @ 2020-11-14 12:21 UTC (permalink / raw)
  To: git
  Cc: Junio C Hamano, Johannes Schindelin, Stefan Beller, Jeff King,
	Jonathan Tan, Ævar Arnfjörð Bjarmason

Remove the now-redundant "get_default_remote" function by converting
its last user to the "print-default-remote" helper.

As can be seen in 13424764db ("submodule: port submodule subcommand
'sync' from shell to C", 2018-01-15) this helper is already used
internally by the C code for submodule remote name discovery.

The "get_default_remote" function in "git-parse-remote.sh" will be
removed in a follow-up change.

Signed-off-by: Ævar Arnfjörð Bjarmason <avarab@gmail.com>
---
 git-submodule.sh | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/git-submodule.sh b/git-submodule.sh
index d39fd226d8..d39a28215c 100755
--- a/git-submodule.sh
+++ b/git-submodule.sh
@@ -578,7 +578,7 @@ cmd_update()
 				fetch_in_submodule "$sm_path" $depth ||
 				die "$(eval_gettext "Unable to fetch in submodule path '\$sm_path'")"
 			fi
-			remote_name=$(sanitize_submodule_env; cd "$sm_path" && get_default_remote)
+			remote_name=$(sanitize_submodule_env; cd "$sm_path" && git submodule--helper print-default-remote)
 			sha1=$(sanitize_submodule_env; cd "$sm_path" &&
 				git rev-parse --verify "${remote_name}/${branch}") ||
 			die "$(eval_gettext "Unable to find current \${remote_name}/\${branch} revision in submodule path '\$sm_path'")"
-- 
2.29.2.222.g5d2a92d10f8


^ permalink raw reply	[flat|nested] 62+ messages in thread

* [PATCH v3 3/3] parse-remote: remove this now-unused library
  2020-11-12 20:31         ` [PATCH v2 0/2] Retire git-parse-remote Junio C Hamano
                             ` (6 preceding siblings ...)
  2020-11-14 12:21           ` [PATCH v3 2/3] submodule: remove sh function in favor of helper Ævar Arnfjörð Bjarmason
@ 2020-11-14 12:21           ` Ævar Arnfjörð Bjarmason
  2020-11-16 21:19             ` Junio C Hamano
  7 siblings, 1 reply; 62+ messages in thread
From: Ævar Arnfjörð Bjarmason @ 2020-11-14 12:21 UTC (permalink / raw)
  To: git
  Cc: Junio C Hamano, Johannes Schindelin, Stefan Beller, Jeff King,
	Jonathan Tan, Ævar Arnfjörð Bjarmason

The previous two commits removed the last use of a function in this
library, but most of it had been dead code for a while[1][2]. Only the
"get_default_remote" function was still being used.

Even though we had a manual page for this library it was never
intended (or I expect, actually) used outside of git.git. Let's just
remove it, if anyone still cares about a function here they can pull
them into their own project[3].

1. Last use of error_on_missing_default_upstream():
   d03ebd411c ("rebase: remove the rebase.useBuiltin setting",
   2019-03-18)

2. Last use of get_remote_merge_branch(): 49eb8d39c7 ("Remove
   contrib/examples/*", 2018-03-25)

3. https://lore.kernel.org/git/87a6vmhdka.fsf@evledraar.gmail.com/

Signed-off-by: Ævar Arnfjörð Bjarmason <avarab@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
---
 .gitignore                         |   1 -
 Documentation/git-parse-remote.txt |  23 -------
 Makefile                           |   2 -
 command-list.txt                   |   1 -
 git-parse-remote.sh                | 101 -----------------------------
 git-submodule.sh                   |   1 -
 6 files changed, 129 deletions(-)
 delete mode 100644 Documentation/git-parse-remote.txt
 delete mode 100644 git-parse-remote.sh

diff --git a/.gitignore b/.gitignore
index 6232d33924..9da275e4e8 100644
--- a/.gitignore
+++ b/.gitignore
@@ -114,7 +114,6 @@
 /git-pack-redundant
 /git-pack-objects
 /git-pack-refs
-/git-parse-remote
 /git-patch-id
 /git-prune
 /git-prune-packed
diff --git a/Documentation/git-parse-remote.txt b/Documentation/git-parse-remote.txt
deleted file mode 100644
index a45ea1ece8..0000000000
--- a/Documentation/git-parse-remote.txt
+++ /dev/null
@@ -1,23 +0,0 @@
-git-parse-remote(1)
-===================
-
-NAME
-----
-git-parse-remote - Routines to help parsing remote repository access parameters
-
-
-SYNOPSIS
---------
-[verse]
-'. "$(git --exec-path)/git-parse-remote"'
-
-DESCRIPTION
------------
-This script is included in various scripts to supply
-routines to parse files under $GIT_DIR/remotes/ and
-$GIT_DIR/branches/ and configuration variables that are related
-to fetching, pulling and pushing.
-
-GIT
----
-Part of the linkgit:git[1] suite
diff --git a/Makefile b/Makefile
index 790a883932..c874dff9b8 100644
--- a/Makefile
+++ b/Makefile
@@ -613,7 +613,6 @@ SCRIPT_SH += git-submodule.sh
 SCRIPT_SH += git-web--browse.sh
 
 SCRIPT_LIB += git-mergetool--lib
-SCRIPT_LIB += git-parse-remote
 SCRIPT_LIB += git-rebase--preserve-merges
 SCRIPT_LIB += git-sh-i18n
 SCRIPT_LIB += git-sh-setup
@@ -2577,7 +2576,6 @@ XGETTEXT_FLAGS_PERL = $(XGETTEXT_FLAGS) --language=Perl \
 	--keyword=__ --keyword=N__ --keyword="__n:1,2"
 LOCALIZED_C = $(C_OBJ:o=c) $(LIB_H) $(GENERATED_H)
 LOCALIZED_SH = $(SCRIPT_SH)
-LOCALIZED_SH += git-parse-remote.sh
 LOCALIZED_SH += git-rebase--preserve-merges.sh
 LOCALIZED_SH += git-sh-setup.sh
 LOCALIZED_PERL = $(SCRIPT_PERL)
diff --git a/command-list.txt b/command-list.txt
index 0e3204e7d1..c19c8a94fe 100644
--- a/command-list.txt
+++ b/command-list.txt
@@ -135,7 +135,6 @@ git-p4                                  foreignscminterface
 git-pack-objects                        plumbingmanipulators
 git-pack-redundant                      plumbinginterrogators
 git-pack-refs                           ancillarymanipulators
-git-parse-remote                        synchelpers
 git-patch-id                            purehelpers
 git-prune                               ancillarymanipulators   complete
 git-prune-packed                        plumbingmanipulators
diff --git a/git-parse-remote.sh b/git-parse-remote.sh
deleted file mode 100644
index d3c39980f3..0000000000
--- a/git-parse-remote.sh
+++ /dev/null
@@ -1,101 +0,0 @@
-# This is a shell library to calculate the remote repository and
-# upstream branch that should be pulled by "git pull" from the current
-# branch.
-
-# git-ls-remote could be called from outside a git managed repository;
-# this would fail in that case and would issue an error message.
-GIT_DIR=$(git rev-parse -q --git-dir) || :;
-
-get_default_remote () {
-	curr_branch=$(git symbolic-ref -q HEAD)
-	curr_branch="${curr_branch#refs/heads/}"
-	origin=$(git config --get "branch.$curr_branch.remote")
-	echo ${origin:-origin}
-}
-
-get_remote_merge_branch () {
-	case "$#" in
-	0|1)
-	    origin="$1"
-	    default=$(get_default_remote)
-	    test -z "$origin" && origin=$default
-	    curr_branch=$(git symbolic-ref -q HEAD) &&
-	    [ "$origin" = "$default" ] &&
-	    echo $(git for-each-ref --format='%(upstream)' $curr_branch)
-	    ;;
-	*)
-	    repo=$1
-	    shift
-	    ref=$1
-	    # FIXME: It should return the tracking branch
-	    #        Currently only works with the default mapping
-	    case "$ref" in
-	    +*)
-		ref=$(expr "z$ref" : 'z+\(.*\)')
-		;;
-	    esac
-	    expr "z$ref" : 'z.*:' >/dev/null || ref="${ref}:"
-	    remote=$(expr "z$ref" : 'z\([^:]*\):')
-	    case "$remote" in
-	    '' | HEAD ) remote=HEAD ;;
-	    heads/*) remote=${remote#heads/} ;;
-	    refs/heads/*) remote=${remote#refs/heads/} ;;
-	    refs/* | tags/* | remotes/* ) remote=
-	    esac
-	    [ -n "$remote" ] && case "$repo" in
-		.)
-		    echo "refs/heads/$remote"
-		    ;;
-		*)
-		    echo "refs/remotes/$repo/$remote"
-		    ;;
-	    esac
-	esac
-}
-
-error_on_missing_default_upstream () {
-	cmd="$1"
-	op_type="$2"
-	op_prep="$3" # FIXME: op_prep is no longer used
-	example="$4"
-	branch_name=$(git symbolic-ref -q HEAD)
-	display_branch_name="${branch_name#refs/heads/}"
-	# If there's only one remote, use that in the suggestion
-	remote="$(gettext "<remote>")"
-	branch="$(gettext "<branch>")"
-	if test $(git remote | wc -l) = 1
-	then
-		remote=$(git remote)
-	fi
-
-	if test -z "$branch_name"
-	then
-		gettextln "You are not currently on a branch."
-	else
-		gettextln "There is no tracking information for the current branch."
-	fi
-	case "$op_type" in
-	rebase)
-		gettextln "Please specify which branch you want to rebase against."
-		;;
-	merge)
-		gettextln "Please specify which branch you want to merge with."
-		;;
-	*)
-		echo >&2 "BUG: unknown operation type: $op_type"
-		exit 1
-		;;
-	esac
-	eval_gettextln "See git-\${cmd}(1) for details."
-	echo
-	echo "    $example"
-	echo
-	if test -n "$branch_name"
-	then
-		gettextln "If you wish to set tracking information for this branch you can do so with:"
-		echo
-		echo "    git branch --set-upstream-to=$remote/$branch $display_branch_name"
-		echo
-	fi
-	exit 1
-}
diff --git a/git-submodule.sh b/git-submodule.sh
index d39a28215c..86ad60c05c 100755
--- a/git-submodule.sh
+++ b/git-submodule.sh
@@ -20,7 +20,6 @@ USAGE="[--quiet] [--cached]
 OPTIONS_SPEC=
 SUBDIRECTORY_OK=Yes
 . git-sh-setup
-. git-parse-remote
 require_work_tree
 wt_prefix=$(git rev-parse --show-prefix)
 cd_to_toplevel
-- 
2.29.2.222.g5d2a92d10f8


^ permalink raw reply	[flat|nested] 62+ messages in thread

* Re: [PATCH v3 1/3] submodule: use "fetch" logic instead of custom remote discovery
  2020-11-14 12:21           ` [PATCH v3 1/3] submodule: use "fetch" logic instead of custom remote discovery Ævar Arnfjörð Bjarmason
@ 2020-11-16 21:13             ` Junio C Hamano
  0 siblings, 0 replies; 62+ messages in thread
From: Junio C Hamano @ 2020-11-16 21:13 UTC (permalink / raw)
  To: Ævar Arnfjörð Bjarmason
  Cc: git, Johannes Schindelin, Stefan Beller, Jeff King, Jonathan Tan

Ævar Arnfjörð Bjarmason  <avarab@gmail.com> writes:

> Replace a use of the get_default_remote() function with an invocation
> of "git fetch"
>
> The "fetch" command already has logic to discover the remote for the
> current branch. However, before it learned to accept a custom
> refspec *and* use its idea of the default remote, it wasn't possible
> to get rid of some equivalent of the "get_default_remote" invocation
> here.
>
> As it turns out the recently added "--stdin" option to fetch[1] gives
> us a way to do that. Let's use it instead.

Ah, that was what your earlier question was about.

The hits from "git grep fetch_in_submodule" says that $1 is the path
to the submodule, $2 is the $depth and $3 (when exists) is the
object name of what we are fetching:

git-submodule.sh:578:	fetch_in_submodule "$sm_path" $depth ||
git-submodule.sh:601:	fetch_in_submodule "$sm_path" $depth ||
git-submodule.sh:607:	fetch_in_submodule "$sm_path" $depth "$sha1" ||

> While I'm at it simplify the "fetch_in_submodule" function. It wasn't
> necessary to pass "$@" to "fetch" since we'd only ever provide one
> SHA-1 as an argument in the previous "*" codepath (in addition to
> "--depth=N"). Rewrite the function to more narrowly reflect its
> use-case.

>  	cd "$1" &&
> -	case "$2" in
> -	'')
> -		git fetch ;;
> -	*)
> -		shift
> -		git fetch $(get_default_remote) "$@" ;;
> -	esac

So when $2 (i.e. --depth=N) is empty, we just did the default "git
fetch".  Otherwise, "git fetch <remote> --depth=N [<sha1>]" was run.

> +	if test $# -eq 3
> +	then
> +		echo "$3" | git fetch --stdin "$2"

This is not quite equivalent in that an empty depth would have
resulted in the default "git fetch" in the original code, with or
without "$3", totally ignoring "$sha1".  Is this a bugfix snuck in
"while we are at it", or is this an unintended regression?

> +	elif test "$2" -ne ""
> +	then
> +		git fetch "$2"
> +	else
> +		git fetch
> +	fi

Even if it is an unintended regression, fixing it should be trivial;
we just need to flip the order of conditions, like so:

	if test -z "$2"
	then
		git fetch
	elif test $# = 3
	then
		echo "$3" | git fetch --stdin "$2"
	else
		git fetch "$2"
	fi


^ permalink raw reply	[flat|nested] 62+ messages in thread

* Re: [PATCH v3 3/3] parse-remote: remove this now-unused library
  2020-11-14 12:21           ` [PATCH v3 3/3] parse-remote: remove this now-unused library Ævar Arnfjörð Bjarmason
@ 2020-11-16 21:19             ` Junio C Hamano
  2020-11-17 14:24               ` Ævar Arnfjörð Bjarmason
  0 siblings, 1 reply; 62+ messages in thread
From: Junio C Hamano @ 2020-11-16 21:19 UTC (permalink / raw)
  To: Ævar Arnfjörð Bjarmason
  Cc: git, Johannes Schindelin, Stefan Beller, Jeff King, Jonathan Tan

Ævar Arnfjörð Bjarmason  <avarab@gmail.com> writes:

> The previous two commits removed the last use of a function in this
> library, but most of it had been dead code for a while[1][2]. Only the
> "get_default_remote" function was still being used.

Yup.  ... still being used, but now it is gone.

> Even though we had a manual page for this library it was never
> intended (or I expect, actually) used outside of git.git. Let's just
> remove it, if anyone still cares about a function here they can pull
> them into their own project[3].
>
> 1. Last use of error_on_missing_default_upstream():
>    d03ebd411c ("rebase: remove the rebase.useBuiltin setting",
>    2019-03-18)
>
> 2. Last use of get_remote_merge_branch(): 49eb8d39c7 ("Remove
>    contrib/examples/*", 2018-03-25)
>
> 3. https://lore.kernel.org/git/87a6vmhdka.fsf@evledraar.gmail.com/

I am not sure why we even need reference [3] here.  

Isn't it another mailing list article where you express your opinion
"they can dig our old version and copy it to their project", which
is the same statement you are making in this proposed log message?

Are we saying "we said the same thing on the list before, which is
stronger truth than the claim in this proposed log message"?

The removal of unused file is quite welcome.

Thanks.

^ permalink raw reply	[flat|nested] 62+ messages in thread

* Re: [PATCH v3 3/3] parse-remote: remove this now-unused library
  2020-11-16 21:19             ` Junio C Hamano
@ 2020-11-17 14:24               ` Ævar Arnfjörð Bjarmason
  0 siblings, 0 replies; 62+ messages in thread
From: Ævar Arnfjörð Bjarmason @ 2020-11-17 14:24 UTC (permalink / raw)
  To: Junio C Hamano
  Cc: git, Johannes Schindelin, Stefan Beller, Jeff King, Jonathan Tan


On Mon, Nov 16 2020, Junio C Hamano wrote:

> Ævar Arnfjörð Bjarmason  <avarab@gmail.com> writes:
>
>> The previous two commits removed the last use of a function in this
>> library, but most of it had been dead code for a while[1][2]. Only the
>> "get_default_remote" function was still being used.
>
> Yup.  ... still being used, but now it is gone.
>
>> Even though we had a manual page for this library it was never
>> intended (or I expect, actually) used outside of git.git. Let's just
>> remove it, if anyone still cares about a function here they can pull
>> them into their own project[3].
>>
>> 1. Last use of error_on_missing_default_upstream():
>>    d03ebd411c ("rebase: remove the rebase.useBuiltin setting",
>>    2019-03-18)
>>
>> 2. Last use of get_remote_merge_branch(): 49eb8d39c7 ("Remove
>>    contrib/examples/*", 2018-03-25)
>>
>> 3. https://lore.kernel.org/git/87a6vmhdka.fsf@evledraar.gmail.com/
>
> I am not sure why we even need reference [3] here.  
>
> Isn't it another mailing list article where you express your opinion
> "they can dig our old version and copy it to their project", which
> is the same statement you are making in this proposed log message?
>
> Are we saying "we said the same thing on the list before, which is
> stronger truth than the claim in this proposed log message"?

I was aiming for answering the question of "why didn't he just move it
to contrib/?" by adding an (it seems too much of an indirect) reference
to contrib/examples/, without going into that whole saga again in the
commit message itself.

^ permalink raw reply	[flat|nested] 62+ messages in thread

end of thread, other threads:[~2020-11-17 14:27 UTC | newest]

Thread overview: 62+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2017-05-11 13:47 [PATCH 00/11] Start retiring .git/remotes/ and .git/branches/ for good Johannes Schindelin
2017-05-11 13:47 ` [PATCH 01/11] git-parse-remote: fix highly misleading man page Johannes Schindelin
2017-05-11 17:21   ` Stefan Beller
2017-05-11 19:14     ` Johannes Schindelin
2020-11-11 15:17     ` [PATCH 0/5] Remove now-unused git-parse-remote Ævar Arnfjörð Bjarmason
2020-11-11 17:37       ` Jeff King
2020-11-11 19:29         ` Junio C Hamano
2020-11-12 14:09         ` Ævar Arnfjörð Bjarmason
2020-11-12 18:42           ` Jeff King
2020-11-12 14:19       ` How do I "git fetch" with a custom <refspec> but a default remote? Ævar Arnfjörð Bjarmason
2020-11-12 18:51         ` Jeff King
2020-11-12 19:26           ` Chris Torek
2020-11-12 20:48             ` Jeff King
2020-11-12 21:22               ` Junio C Hamano
2020-11-14 12:12         ` Ævar Arnfjörð Bjarmason
2020-11-11 15:17     ` [PATCH 1/5] parse-remote: remove unused GIT_DIR variable Ævar Arnfjörð Bjarmason
2020-11-11 15:17     ` [PATCH 2/5] parse-remote: remove long-dead rebase code Ævar Arnfjörð Bjarmason
2020-11-11 15:17     ` [PATCH 3/5] parse-remote: remove long-dead git-pull.sh code Ævar Arnfjörð Bjarmason
2020-11-11 15:17     ` [PATCH 4/5] parse-remote: move used code to git-submodule.sh Ævar Arnfjörð Bjarmason
2020-11-11 15:17     ` [PATCH 5/5] parse-remote: remove this now-unused library Ævar Arnfjörð Bjarmason
2020-11-11 16:33       ` Junio C Hamano
2020-11-12 20:31         ` [PATCH v2 0/2] Retire git-parse-remote Junio C Hamano
2020-11-12 20:31           ` [PATCH v2 1/2] parse-remote: move used code to git-submodule.sh Junio C Hamano
2020-11-12 20:31           ` [PATCH v2 2/2] parse-remote: remove this now-unused library Junio C Hamano
2020-11-12 20:49           ` [PATCH v2 0/2] Retire git-parse-remote Jeff King
2020-11-12 21:25             ` Junio C Hamano
2020-11-13  9:42           ` Ævar Arnfjörð Bjarmason
2020-11-14 12:21           ` [PATCH v3 0/3] submodule sh->C & retire parse-remote Ævar Arnfjörð Bjarmason
2020-11-14 12:21           ` [PATCH v3 1/3] submodule: use "fetch" logic instead of custom remote discovery Ævar Arnfjörð Bjarmason
2020-11-16 21:13             ` Junio C Hamano
2020-11-14 12:21           ` [PATCH v3 2/3] submodule: remove sh function in favor of helper Ævar Arnfjörð Bjarmason
2020-11-14 12:21           ` [PATCH v3 3/3] parse-remote: remove this now-unused library Ævar Arnfjörð Bjarmason
2020-11-16 21:19             ` Junio C Hamano
2020-11-17 14:24               ` Ævar Arnfjörð Bjarmason
2017-05-11 13:47 ` [PATCH 02/11] Documentation: really deprecate .git/remotes/ and .git/branches/ Johannes Schindelin
2017-05-11 13:47 ` [PATCH 03/11] remote: warn loud and clear when .git/branches/ is *still* used Johannes Schindelin
2017-05-11 13:47 ` [PATCH 04/11] remote: warn loud and clear when .git/remotes/ " Johannes Schindelin
2017-05-11 13:47 ` [PATCH 05/11] Revert "Revert "Don't create the $GIT_DIR/branches directory on init"" Johannes Schindelin
2017-05-11 17:26   ` Stefan Beller
2017-05-11 13:47 ` [PATCH 06/11] PREVIEW: t5510: convert .git/remotes/ test to use a regular remote Johannes Schindelin
2017-05-11 13:47 ` [PATCH 07/11] PREVIEW: t5516: stop testing .git/branches/ functionality Johannes Schindelin
2017-05-11 13:47 ` [PATCH 08/11] PREVIEW: remote: remove support for migrating ancient remotes Johannes Schindelin
2017-05-11 13:48 ` [PATCH 09/11] PREVIEW: t5515: remove .git/remotes/ and .git/branches/ tests Johannes Schindelin
2017-05-11 13:48 ` [PATCH 10/11] PREVIEW: t0060: stop testing support for .git/remotes/ and .git/branches/ Johannes Schindelin
2017-05-11 13:48 ` [PATCH 11/11] PREVIEW: remove " Johannes Schindelin
2017-05-11 18:19   ` Stefan Beller
2017-05-11 19:19     ` Johannes Schindelin
2017-05-12  1:14 ` [PATCH 00/11] Start retiring .git/remotes/ and .git/branches/ for good Junio C Hamano
2017-05-12 10:18   ` Johannes Schindelin
2017-05-16  0:37     ` Junio C Hamano
2017-05-16  8:05       ` Ævar Arnfjörð Bjarmason
2017-05-16  9:06         ` Junio C Hamano
2017-05-16 10:02           ` Ævar Arnfjörð Bjarmason
2017-05-17  0:51             ` Junio C Hamano
2017-05-12 12:00   ` Junio C Hamano
2017-05-12 14:19     ` Johannes Schindelin
2017-05-12 17:38       ` Jonathan Nieder
2017-05-13 10:13         ` Junio C Hamano
2017-05-12 21:11       ` Junio C Hamano
2017-05-15  8:42         ` Johannes Schindelin
2017-05-12  9:11 ` Jeff King
2017-05-12 11:09   ` Johannes Schindelin

git@vger.kernel.org list mirror (unofficial, one of many)

This inbox may be cloned and mirrored by anyone:

	git clone --mirror https://public-inbox.org/git
	git clone --mirror http://ou63pmih66umazou.onion/git
	git clone --mirror http://czquwvybam4bgbro.onion/git
	git clone --mirror http://hjrcffqmbrq6wope.onion/git

	# If you have public-inbox 1.1+ installed, you may
	# initialize and index your mirror using the following commands:
	public-inbox-init -V1 git git/ https://public-inbox.org/git \
		git@vger.kernel.org
	public-inbox-index git

Example config snippet for mirrors.
Newsgroups are available over NNTP:
	nntp://news.public-inbox.org/inbox.comp.version-control.git
	nntp://ou63pmih66umazou.onion/inbox.comp.version-control.git
	nntp://czquwvybam4bgbro.onion/inbox.comp.version-control.git
	nntp://hjrcffqmbrq6wope.onion/inbox.comp.version-control.git
	nntp://news.gmane.io/gmane.comp.version-control.git
 note: .onion URLs require Tor: https://www.torproject.org/

code repositories for project(s) associated with this inbox:

	https://80x24.org/mirrors/git.git

AGPL code for this site: git clone https://public-inbox.org/public-inbox.git