git-subtree: Bail out if we find output from Rust rewrite

This is going to be forward compatible, but not backward compatible:
projects are expected to adopt the new tool, but not go back to this
old one.

CC: Colin Stagner <ask+git@howdoi.land>
CC: Johannes Schindelin <Johannes.Schindelin@gmx.de>
Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
Ian Jackson
2026-07-06 12:58:15 +01:00
committed by Junio C Hamano
parent e9019fcafe
commit cd6ad979ab

View File

@@ -278,6 +278,20 @@ main () {
"cmd_$arg_command" "$@"
}
# Usage: reject_if_v2_config REV
#
# Bails if we find .git-subtree/config. This file is used by the RIIR
# git-subtree, which can read data from this script, but which generates
# data that this script cannot cope with. So if we find that the user's
# project has already been processed with the new tool, we stop, to
# avoid generating broken output.
reject_if_v2_config () {
local config=.git-subtree/config
if git rev-parse --verify -q "$rev:$config"; then
die "fatal: tree contains $config: has been processed with new standalone (Rust) git-subtree; use that tool instead of this one. See https://codeberg.org/diziet/git-subtree https://crates.io/crates/git-subtree"
fi
}
# Usage: cache_setup
cache_setup () {
assert test $# = 0
@@ -846,6 +860,7 @@ process_split_commit () {
# Or: cmd_add REPOSITORY REF
cmd_add () {
reject_if_v2_config HEAD
ensure_clean
if test $# -eq 1
@@ -934,6 +949,8 @@ cmd_split () {
die "fatal: you must provide exactly one revision, and optionally a repository. Got: '$*'"
fi
reject_if_v2_config "$rev"
# Now validate prefix against the commit, not the working tree
if ! git cat-file -e "$rev:$dir" 2>/dev/null
then
@@ -1034,6 +1051,7 @@ cmd_merge () {
then
repository="$2"
fi
reject_if_v2_config HEAD
ensure_clean
if test -n "$arg_addmerge_squash"