aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJunio C Hamano <gitster@pobox.com>2025-02-03 10:23:33 -0800
committerJunio C Hamano <gitster@pobox.com>2025-02-03 10:23:33 -0800
commit803b5acaa7cb979b5d623270af18d6d8354fce9b (patch)
tree63217cc10fcc21306c913e44f9fd7a69e3d1885e
parentc43136d67b7c6a9ecfa988004eb4a87bfbe957a0 (diff)
parent8ccc75c2452b5814d2445d60d54266293ca48674 (diff)
downloadgit-803b5acaa7cb979b5d623270af18d6d8354fce9b.tar.gz
Merge branch 'ps/3.0-remote-deprecation'
Following the procedure we established to introduce breaking changes for Git 3.0, allow an early opt-in for removing support of $GIT_DIR/branches/ and $GIT_DIR/remotes/ directories to configure remotes. * ps/3.0-remote-deprecation: remote: announce removal of "branches/" and "remotes/" builtin/pack-redundant: remove subcommand with breaking changes ci: repurpose "linux-gcc" job for deprecations ci: merge linux-gcc-default into linux-gcc Makefile: wire up build option for deprecated features
-rw-r--r--.github/workflows/main.yml6
-rw-r--r--.gitlab-ci.yml6
-rw-r--r--Documentation/BreakingChanges.txt25
-rw-r--r--Documentation/gitrepository-layout.txt7
-rw-r--r--GIT-BUILD-OPTIONS.in1
-rw-r--r--Makefile7
-rw-r--r--builtin/remote.c2
-rwxr-xr-xci/lib.sh5
-rwxr-xr-xci/run-build-and-tests.sh3
-rw-r--r--contrib/buildsystems/CMakeLists.txt1
-rw-r--r--git.c2
-rw-r--r--meson.build6
-rw-r--r--meson_options.txt2
-rw-r--r--remote.c26
-rw-r--r--remote.h2
-rwxr-xr-xt/t5323-pack-redundant.sh6
-rwxr-xr-xt/t5505-remote.sh6
-rwxr-xr-xt/t5510-fetch.sh13
-rwxr-xr-xt/t5515-fetch-merge-logic.sh47
-rwxr-xr-xt/t5516-fetch-push.sh14
-rw-r--r--t/test-lib.sh4
21 files changed, 132 insertions, 59 deletions
diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml
index 900be9957a..686855bb5e 100644
--- a/.github/workflows/main.yml
+++ b/.github/workflows/main.yml
@@ -265,9 +265,8 @@ jobs:
- jobname: linux-reftable
cc: clang
pool: ubuntu-latest
- - jobname: linux-gcc
+ - jobname: linux-breaking-changes
cc: gcc
- cc_package: gcc-8
pool: ubuntu-20.04
- jobname: linux-TEST-vars
cc: gcc
@@ -285,9 +284,6 @@ jobs:
- jobname: osx-meson
cc: clang
pool: macos-13
- - jobname: linux-gcc-default
- cc: gcc
- pool: ubuntu-latest
- jobname: linux-leaks
cc: gcc
pool: ubuntu-latest
diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index 9254e01583..50d74a31c6 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -45,17 +45,13 @@ test:linux:
- jobname: linux-reftable
image: ubuntu:latest
CC: clang
- - jobname: linux-gcc
+ - jobname: linux-breaking-changes
image: ubuntu:20.04
CC: gcc
- CC_PACKAGE: gcc-8
- jobname: linux-TEST-vars
image: ubuntu:20.04
CC: gcc
CC_PACKAGE: gcc-8
- - jobname: linux-gcc-default
- image: ubuntu:latest
- CC: gcc
- jobname: linux-leaks
image: ubuntu:latest
CC: gcc
diff --git a/Documentation/BreakingChanges.txt b/Documentation/BreakingChanges.txt
index 27acff86db..7c388e56c8 100644
--- a/Documentation/BreakingChanges.txt
+++ b/Documentation/BreakingChanges.txt
@@ -154,6 +154,31 @@ Cf. <xmqq1rjuz6n3.fsf_-_@gitster.c.googlers.com>,
<CAKvOHKAFXQwt4D8yUCCkf_TQL79mYaJ=KAKhtpDNTvHJFuX1NA@mail.gmail.com>,
<20230323204047.GA9290@coredump.intra.peff.net>,
+* Support for storing shorthands for remote URLs in "$GIT_COMMON_DIR/branches/"
+ and "$GIT_COMMON_DIR/remotes/" has been long superseded by storing remotes in
+ the repository configuration.
++
+The mechanism has originally been introduced in f170e4b39d ([PATCH] fetch/pull:
+short-hand notation for remote repositories., 2005-07-16) and was superseded by
+6687f8fea2 ([PATCH] Use .git/remote/origin, not .git/branches/origin.,
+2005-08-20), where we switched from ".git/branches/" to ".git/remotes/". That
+commit already mentions an upcoming deprecation of the ".git/branches/"
+directory, and starting with a1d4aa7424 (Add repository-layout document.,
+2005-09-01) we have also marked this layout as deprecated. Eventually we also
+started to migrate away from ".git/remotes/" in favor of config-based remotes,
+and we have marked the directory as legacy in 3d3d282146 (Documentation:
+Grammar correction, wording fixes and cleanup, 2011-08-23)
++
+As our documentation mentions, these directories are not to be found in modern
+repositories at all and most users aren't even aware of these mechanisms. They
+have been deprecated for almost 20 years and 14 years respectively, and we are
+not aware of any active users that have complained about this deprecation.
+Furthermore, the ".git/branches/" directory is nowadays misleadingly named and
+may cause confusion as "branches" are almost exclusively used in the context of
+references.
++
+These features will be removed.
+
== Superseded features that will not be deprecated
Some features have gained newer replacements that aim to improve the design in
diff --git a/Documentation/gitrepository-layout.txt b/Documentation/gitrepository-layout.txt
index fa8b51daf0..85911ca8ea 100644
--- a/Documentation/gitrepository-layout.txt
+++ b/Documentation/gitrepository-layout.txt
@@ -153,7 +153,7 @@ config.worktree::
linkgit:git-worktree[1]).
branches::
- A slightly deprecated way to store shorthands to be used
+ A 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
@@ -162,7 +162,8 @@ branches::
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.
-
++
+Git will stop reading remotes from this directory in Git 3.0.
hooks::
Hooks are customization scripts used by various Git
@@ -238,6 +239,8 @@ remotes::
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.
++
+Git will stop reading remotes from this directory in Git 3.0.
logs::
Records of changes made to refs are stored in this directory.
diff --git a/GIT-BUILD-OPTIONS.in b/GIT-BUILD-OPTIONS.in
index edff75ae16..ada575fbcb 100644
--- a/GIT-BUILD-OPTIONS.in
+++ b/GIT-BUILD-OPTIONS.in
@@ -45,4 +45,5 @@ TEST_OUTPUT_DIRECTORY=@TEST_OUTPUT_DIRECTORY@
TEST_SHELL_PATH=@TEST_SHELL_PATH@
USE_GETTEXT_SCHEME=@USE_GETTEXT_SCHEME@
USE_LIBPCRE2=@USE_LIBPCRE2@
+WITH_BREAKING_CHANGES=@WITH_BREAKING_CHANGES@
X=@X@
diff --git a/Makefile b/Makefile
index 2f6e2d5295..0739c5c1c0 100644
--- a/Makefile
+++ b/Makefile
@@ -1273,7 +1273,9 @@ BUILTIN_OBJS += builtin/mv.o
BUILTIN_OBJS += builtin/name-rev.o
BUILTIN_OBJS += builtin/notes.o
BUILTIN_OBJS += builtin/pack-objects.o
+ifndef WITH_BREAKING_CHANGES
BUILTIN_OBJS += builtin/pack-redundant.o
+endif
BUILTIN_OBJS += builtin/pack-refs.o
BUILTIN_OBJS += builtin/patch-id.o
BUILTIN_OBJS += builtin/prune-packed.o
@@ -2236,6 +2238,10 @@ ifdef FSMONITOR_OS_SETTINGS
COMPAT_OBJS += compat/fsmonitor/fsm-path-utils-$(FSMONITOR_OS_SETTINGS).o
endif
+ifdef WITH_BREAKING_CHANGES
+ BASIC_CFLAGS += -DWITH_BREAKING_CHANGES
+endif
+
ifeq ($(TCLTK_PATH),)
NO_TCLTK = NoThanks
endif
@@ -3194,6 +3200,7 @@ GIT-BUILD-OPTIONS: FORCE
-e "s|@TEST_SHELL_PATH@|\'$(TEST_SHELL_PATH_SQ)\'|" \
-e "s|@USE_GETTEXT_SCHEME@|\'$(USE_GETTEXT_SCHEME)\'|" \
-e "s|@USE_LIBPCRE2@|\'$(USE_LIBPCRE2)\'|" \
+ -e "s|@WITH_BREAKING_CHANGES@|\'$(WITH_BREAKING_CHANGES)\'|" \
-e "s|@X@|\'$(X)\'|" \
GIT-BUILD-OPTIONS.in >$@+
@if grep -q '^[A-Z][A-Z_]*=@.*@$$' $@+; then echo "Unsubstituted build options in $@" >&2 && exit 1; fi
diff --git a/builtin/remote.c b/builtin/remote.c
index 315cbb88e6..71d84fb3cf 100644
--- a/builtin/remote.c
+++ b/builtin/remote.c
@@ -642,10 +642,12 @@ static int migrate_file(struct remote *remote)
strbuf_addf(&buf, "remote.%s.fetch", remote->name);
for (i = 0; i < remote->fetch.nr; i++)
git_config_set_multivar(buf.buf, remote->fetch.items[i].raw, "^$", 0);
+#ifndef WITH_BREAKING_CHANGES
if (remote->origin == REMOTE_REMOTES)
unlink_or_warn(git_path("remotes/%s", remote->name));
else if (remote->origin == REMOTE_BRANCHES)
unlink_or_warn(git_path("branches/%s", remote->name));
+#endif /* WITH_BREAKING_CHANGES */
strbuf_release(&buf);
return 0;
diff --git a/ci/lib.sh b/ci/lib.sh
index 8885ee3c3f..4d7851e559 100755
--- a/ci/lib.sh
+++ b/ci/lib.sh
@@ -329,11 +329,6 @@ export SKIP_DASHED_BUILT_INS=YesPlease
case "$distro" in
ubuntu-*)
- if test "$jobname" = "linux-gcc-default"
- then
- break
- fi
-
# Python 2 is end of life, and Ubuntu 23.04 and newer don't actually
# have it anymore. We thus only test with Python 2 on older LTS
# releases.
diff --git a/ci/run-build-and-tests.sh b/ci/run-build-and-tests.sh
index 76667a1277..599dc1c32c 100755
--- a/ci/run-build-and-tests.sh
+++ b/ci/run-build-and-tests.sh
@@ -13,8 +13,9 @@ esac
run_tests=t
case "$jobname" in
-linux-gcc)
+linux-breaking-changes)
export GIT_TEST_DEFAULT_INITIAL_BRANCH_NAME=main
+ export WITH_BREAKING_CHANGES=YesPlease
;;
linux-TEST-vars)
export OPENSSL_SHA1_UNSAFE=YesPlease
diff --git a/contrib/buildsystems/CMakeLists.txt b/contrib/buildsystems/CMakeLists.txt
index 10dc54fdcb..3179e7ff7a 100644
--- a/contrib/buildsystems/CMakeLists.txt
+++ b/contrib/buildsystems/CMakeLists.txt
@@ -1205,6 +1205,7 @@ string(REPLACE "@TEST_OUTPUT_DIRECTORY@" "" git_build_options "${git_build_optio
string(REPLACE "@TEST_SHELL_PATH@" "'${TEST_SHELL_PATH}'" git_build_options "${git_build_options}")
string(REPLACE "@USE_GETTEXT_SCHEME@" "" git_build_options "${git_build_options}")
string(REPLACE "@USE_LIBPCRE2@" "" git_build_options "${git_build_options}")
+string(REPLACE "@WITH_BREAKING_CHANGES@" "" git_build_options "${git_build_options}")
string(REPLACE "@X@" "${EXE_EXTENSION}" git_build_options "${git_build_options}")
if(USE_VCPKG)
string(APPEND git_build_options "PATH=\"$PATH:$TEST_DIRECTORY/../compat/vcbuild/vcpkg/installed/x64-windows/bin\"\n")
diff --git a/git.c b/git.c
index a94dab3770..b23761480f 100644
--- a/git.c
+++ b/git.c
@@ -587,7 +587,9 @@ static struct cmd_struct commands[] = {
{ "name-rev", cmd_name_rev, RUN_SETUP },
{ "notes", cmd_notes, RUN_SETUP },
{ "pack-objects", cmd_pack_objects, RUN_SETUP },
+#ifndef WITH_BREAKING_CHANGES
{ "pack-redundant", cmd_pack_redundant, RUN_SETUP | NO_PARSEOPT },
+#endif
{ "pack-refs", cmd_pack_refs, RUN_SETUP },
{ "patch-id", cmd_patch_id, RUN_SETUP_GENTLY | NO_PARSEOPT },
{ "pickaxe", cmd_blame, RUN_SETUP },
diff --git a/meson.build b/meson.build
index 548eac62b2..23a8422dba 100644
--- a/meson.build
+++ b/meson.build
@@ -655,6 +655,12 @@ build_options_config.set('GIT_TEST_UTF8_LOCALE', '')
build_options_config.set_quoted('LOCALEDIR', fs.as_posix(get_option('prefix') / get_option('localedir')))
build_options_config.set('GITWEBDIR', fs.as_posix(get_option('prefix') / get_option('datadir') / 'gitweb'))
+if get_option('breaking_changes')
+ build_options_config.set('WITH_BREAKING_CHANGES', 'YesPlease')
+else
+ build_options_config.set('WITH_BREAKING_CHANGES', '')
+endif
+
if get_option('sane_tool_path') != ''
build_options_config.set_quoted('BROKEN_PATH_FIX', 's|^\# @BROKEN_PATH_FIX@$|git_broken_path_fix "' + get_option('sane_tool_path') + '"|')
else
diff --git a/meson_options.txt b/meson_options.txt
index c0d72d85a3..a0fe26f455 100644
--- a/meson_options.txt
+++ b/meson_options.txt
@@ -59,6 +59,8 @@ option('sha256_backend', type: 'combo', choices: ['openssl', 'nettle', 'gcrypt',
description: 'The backend used for hashing objects with the SHA256 object format.')
# Build tweaks.
+option('breaking_changes', type: 'boolean', value: false,
+ description: 'Enable upcoming breaking changes.')
option('macos_use_homebrew_gettext', type: 'boolean', value: true,
description: 'Use gettext from Homebrew instead of the slightly-broken system-provided one.')
diff --git a/remote.c b/remote.c
index 0f6fba8562..1779f0e7bb 100644
--- a/remote.c
+++ b/remote.c
@@ -294,6 +294,7 @@ static void add_instead_of(struct rewrite *rewrite, const char *instead_of)
rewrite->instead_of_nr++;
}
+#ifndef WITH_BREAKING_CHANGES
static const char *skip_spaces(const char *s)
{
while (isspace(*s))
@@ -301,6 +302,21 @@ static const char *skip_spaces(const char *s)
return s;
}
+static void warn_about_deprecated_remote_type(const char *type,
+ const struct remote *remote)
+{
+ warning(_("reading remote from \"%s/%s\", which is nominated for removal.\n"
+ "\n"
+ "If you still use the \"remotes/\" directory it is recommended to\n"
+ "migrate to config-based remotes:\n"
+ "\n"
+ "\tgit remote rename %s %s\n"
+ "\n"
+ "If you cannot, please let us know why you still need to use it by\n"
+ "sending an e-mail to <git@vger.kernel.org>."),
+ type, remote->name, remote->name, remote->name);
+}
+
static void read_remotes_file(struct remote_state *remote_state,
struct remote *remote)
{
@@ -309,6 +325,9 @@ static void read_remotes_file(struct remote_state *remote_state,
if (!f)
return;
+
+ warn_about_deprecated_remote_type("remotes", remote);
+
remote->configured_in_repo = 1;
remote->origin = REMOTE_REMOTES;
while (strbuf_getline(&buf, f) != EOF) {
@@ -338,6 +357,8 @@ static void read_branches_file(struct remote_state *remote_state,
if (!f)
return;
+ warn_about_deprecated_remote_type("branches", remote);
+
strbuf_getline_lf(&buf, f);
fclose(f);
strbuf_trim(&buf);
@@ -375,6 +396,7 @@ static void read_branches_file(struct remote_state *remote_state,
strbuf_release(&buf);
free(to_free);
}
+#endif /* WITH_BREAKING_CHANGES */
static int handle_config(const char *key, const char *value,
const struct config_context *ctx, void *cb)
@@ -591,6 +613,7 @@ static void read_config(struct repository *repo, int early)
alias_all_urls(repo->remote_state);
}
+#ifndef WITH_BREAKING_CHANGES
static int valid_remote_nick(const char *name)
{
if (!name[0] || is_dot_or_dotdot(name))
@@ -602,6 +625,7 @@ static int valid_remote_nick(const char *name)
return 0;
return 1;
}
+#endif /* WITH_BREAKING_CHANGES */
static const char *remotes_remote_for_branch(struct remote_state *remote_state,
struct branch *branch,
@@ -744,12 +768,14 @@ remotes_remote_get_1(struct remote_state *remote_state, const char *name,
&name_given);
ret = make_remote(remote_state, name, 0);
+#ifndef WITH_BREAKING_CHANGES
if (valid_remote_nick(name) && have_git_dir()) {
if (!valid_remote(ret))
read_remotes_file(remote_state, ret);
if (!valid_remote(ret))
read_branches_file(remote_state, ret);
}
+#endif /* WITH_BREAKING_CHANGES */
if (name_given && !valid_remote(ret))
add_url_alias(remote_state, ret, name);
if (!valid_remote(ret))
diff --git a/remote.h b/remote.h
index bda10dd5c8..a19353f689 100644
--- a/remote.h
+++ b/remote.h
@@ -21,8 +21,10 @@ struct transport_ls_refs_options;
enum {
REMOTE_UNCONFIGURED = 0,
REMOTE_CONFIG,
+#ifndef WITH_BREAKING_CHANGES
REMOTE_REMOTES,
REMOTE_BRANCHES
+#endif /* WITH_BREAKING_CHANGES */
};
struct rewrite {
diff --git a/t/t5323-pack-redundant.sh b/t/t5323-pack-redundant.sh
index 8dbbcc5e51..688cd9706c 100755
--- a/t/t5323-pack-redundant.sh
+++ b/t/t5323-pack-redundant.sh
@@ -36,6 +36,12 @@ relationship between packs and objects is as follows:
. ./test-lib.sh
+if ! test_have_prereq WITHOUT_BREAKING_CHANGES
+then
+ skip_all='skipping git-pack-redundant tests; built with breaking changes'
+ test_done
+fi
+
main_repo=main.git
shared_repo=shared.git
diff --git a/t/t5505-remote.sh b/t/t5505-remote.sh
index 519f7973e3..93a6662df7 100755
--- a/t/t5505-remote.sh
+++ b/t/t5505-remote.sh
@@ -1113,7 +1113,7 @@ Pull: refs/heads/main:refs/heads/origin
Pull: refs/heads/next:refs/heads/origin2
EOF
-test_expect_success 'migrate a remote from named file in $GIT_DIR/remotes' '
+test_expect_success WITHOUT_BREAKING_CHANGES 'migrate a remote from named file in $GIT_DIR/remotes' '
git clone one five &&
origin_url=$(pwd)/one &&
(
@@ -1139,7 +1139,7 @@ test_expect_success 'migrate a remote from named file in $GIT_DIR/remotes' '
)
'
-test_expect_success 'migrate a remote from named file in $GIT_DIR/branches' '
+test_expect_success WITHOUT_BREAKING_CHANGES 'migrate a remote from named file in $GIT_DIR/branches' '
git clone --template= one six &&
origin_url=$(pwd)/one &&
(
@@ -1155,7 +1155,7 @@ test_expect_success 'migrate a remote from named file in $GIT_DIR/branches' '
)
'
-test_expect_success 'migrate a remote from named file in $GIT_DIR/branches (2)' '
+test_expect_success WITHOUT_BREAKING_CHANGES 'migrate a remote from named file in $GIT_DIR/branches (2)' '
git clone --template= one seven &&
(
cd seven &&
diff --git a/t/t5510-fetch.sh b/t/t5510-fetch.sh
index 2d9587059f..0b89aca77e 100755
--- a/t/t5510-fetch.sh
+++ b/t/t5510-fetch.sh
@@ -34,14 +34,11 @@ test_expect_success "clone and setup child repos" '
git clone . three &&
(
cd three &&
- git config branch.main.remote two &&
- git config branch.main.merge refs/heads/one &&
- mkdir -p .git/remotes &&
- cat >.git/remotes/two <<-\EOF
- URL: ../two/.git/
- Pull: refs/heads/main:refs/heads/two
- Pull: refs/heads/one:refs/heads/one
- EOF
+ git config set remote.two.url ../two/.git/ &&
+ git config set remote.two.fetch refs/heads/main:refs/heads/two &&
+ git config set --append remote.two.fetch refs/heads/one:refs/heads/one &&
+ git config set branch.main.remote two &&
+ git config set branch.main.merge refs/heads/one
) &&
git clone . bundle &&
git clone . seven
diff --git a/t/t5515-fetch-merge-logic.sh b/t/t5515-fetch-merge-logic.sh
index 320d26796d..4e6026c611 100755
--- a/t/t5515-fetch-merge-logic.sh
+++ b/t/t5515-fetch-merge-logic.sh
@@ -104,28 +104,31 @@ test_expect_success setup '
git config remote.config-glob.fetch refs/heads/*:refs/remotes/rem/* &&
remotes="$remotes config-glob" &&
- mkdir -p .git/remotes &&
- cat >.git/remotes/remote-explicit <<-\EOF &&
- URL: ../.git/
- Pull: refs/heads/main:remotes/rem/main
- Pull: refs/heads/one:remotes/rem/one
- Pull: two:remotes/rem/two
- Pull: refs/heads/three:remotes/rem/three
- EOF
- remotes="$remotes remote-explicit" &&
-
- cat >.git/remotes/remote-glob <<-\EOF &&
- URL: ../.git/
- Pull: refs/heads/*:refs/remotes/rem/*
- EOF
- 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" &&
+ if test_have_prereq WITHOUT_BREAKING_CHANGES
+ then
+ mkdir -p .git/remotes &&
+ cat >.git/remotes/remote-explicit <<-\EOF &&
+ URL: ../.git/
+ Pull: refs/heads/main:remotes/rem/main
+ Pull: refs/heads/one:remotes/rem/one
+ Pull: two:remotes/rem/two
+ Pull: refs/heads/three:remotes/rem/three
+ EOF
+ remotes="$remotes remote-explicit" &&
+
+ cat >.git/remotes/remote-glob <<-\EOF &&
+ URL: ../.git/
+ Pull: refs/heads/*:refs/remotes/rem/*
+ EOF
+ 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"
+ fi &&
for remote in $remotes ; do
git config branch.br-$remote.remote $remote &&
diff --git a/t/t5516-fetch-push.sh b/t/t5516-fetch-push.sh
index 041d7d806f..85ed049627 100755
--- a/t/t5516-fetch-push.sh
+++ b/t/t5516-fetch-push.sh
@@ -975,7 +975,7 @@ 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' '
+test_expect_success WITHOUT_BREAKING_CHANGES 'fetch with branches' '
mk_empty testrepo &&
git branch second $the_first_commit &&
git checkout second &&
@@ -991,7 +991,7 @@ test_expect_success 'fetch with branches' '
git checkout main
'
-test_expect_success 'fetch with branches containing #' '
+test_expect_success WITHOUT_BREAKING_CHANGES 'fetch with branches containing #' '
mk_empty testrepo &&
mkdir testrepo/.git/branches &&
echo "..#second" > testrepo/.git/branches/branch2 &&
@@ -1005,7 +1005,7 @@ test_expect_success 'fetch with branches containing #' '
git checkout main
'
-test_expect_success 'push with branches' '
+test_expect_success WITHOUT_BREAKING_CHANGES 'push with branches' '
mk_empty testrepo &&
git checkout second &&
@@ -1022,7 +1022,7 @@ test_expect_success 'push with branches' '
)
'
-test_expect_success 'push with branches containing #' '
+test_expect_success WITHOUT_BREAKING_CHANGES 'push with branches containing #' '
mk_empty testrepo &&
test_when_finished "rm -rf .git/branches" &&
@@ -1211,18 +1211,16 @@ test_expect_success 'push --porcelain --dry-run rejected' '
'
test_expect_success 'push --prune' '
- mk_test testrepo heads/main heads/second heads/foo heads/bar &&
+ mk_test testrepo heads/main heads/foo heads/bar &&
git push --prune testrepo : &&
check_push_result testrepo $the_commit heads/main &&
- check_push_result testrepo $the_first_commit heads/second &&
! check_push_result testrepo $the_first_commit heads/foo heads/bar
'
test_expect_success 'push --prune refspec' '
- mk_test testrepo tmp/main tmp/second tmp/foo tmp/bar &&
+ mk_test testrepo tmp/main tmp/foo tmp/bar &&
git push --prune testrepo "refs/heads/*:refs/tmp/*" &&
check_push_result testrepo $the_commit tmp/main &&
- check_push_result testrepo $the_first_commit tmp/second &&
! check_push_result testrepo $the_first_commit tmp/foo tmp/bar
'
diff --git a/t/test-lib.sh b/t/test-lib.sh
index 9f27a49995..9001ed3a64 100644
--- a/t/test-lib.sh
+++ b/t/test-lib.sh
@@ -1862,6 +1862,10 @@ test_lazy_prereq CURL '
curl --version
'
+test_lazy_prereq WITHOUT_BREAKING_CHANGES '
+ test -z "$WITH_BREAKING_CHANGES"
+'
+
# SHA1 is a test if the hash algorithm in use is SHA-1. This is both for tests
# which will not work with other hash algorithms and tests that work but don't
# test anything meaningful (e.g. special values which cause short collisions).