mirror of
https://github.com/git/git.git
synced 2025-12-12 20:36:24 +01:00
Merge branch 'ps/symlink-symref-deprecation'
"Symlink symref" has been added to the list of things that will disappear at Git 3.0 boundary. * ps/symlink-symref-deprecation: refs/files: deprecate writing symrefs as symbolic links
This commit is contained in:
@@ -295,6 +295,26 @@ The command will be removed.
|
|||||||
+
|
+
|
||||||
cf. <xmqqa59i45wc.fsf@gitster.g>
|
cf. <xmqqa59i45wc.fsf@gitster.g>
|
||||||
|
|
||||||
|
* Support for `core.preferSymlinkRefs=true` has been deprecated and will be
|
||||||
|
removed in Git 3.0. Writing symbolic refs as symbolic links will be phased
|
||||||
|
out in favor of using plain files using the textual representation of
|
||||||
|
symbolic refs.
|
||||||
|
+
|
||||||
|
Symbolic references were initially always stored as a symbolic link. This was
|
||||||
|
changed in 9b143c6e15 (Teach update-ref about a symbolic ref stored in a
|
||||||
|
textfile., 2005-09-25), where a new textual symref format was introduced to
|
||||||
|
store those symbolic refs in a plain file. In 9f0bb90d16
|
||||||
|
(core.prefersymlinkrefs: use symlinks for .git/HEAD, 2006-05-02), the Git
|
||||||
|
project switched the default to use the textual symrefs in favor of symbolic
|
||||||
|
links.
|
||||||
|
+
|
||||||
|
The migration away from symbolic links has happened almost 20 years ago by now,
|
||||||
|
and there is no known reason why one should prefer them nowadays. Furthermore,
|
||||||
|
symbolic links are not supported on some platforms.
|
||||||
|
+
|
||||||
|
Note that only the writing side for such symbolic links is deprecated. Reading
|
||||||
|
such symbolic links is still supported for now.
|
||||||
|
|
||||||
== Superseded features that will not be deprecated
|
== Superseded features that will not be deprecated
|
||||||
|
|
||||||
Some features have gained newer replacements that aim to improve the design in
|
Some features have gained newer replacements that aim to improve the design in
|
||||||
|
|||||||
@@ -290,6 +290,9 @@ core.preferSymlinkRefs::
|
|||||||
and other symbolic reference files, use symbolic links.
|
and other symbolic reference files, use symbolic links.
|
||||||
This is sometimes needed to work with old scripts that
|
This is sometimes needed to work with old scripts that
|
||||||
expect HEAD to be a symbolic link.
|
expect HEAD to be a symbolic link.
|
||||||
|
+
|
||||||
|
This configuration is deprecated and will be removed in Git 3.0. Symbolic refs
|
||||||
|
will always be written as textual symrefs.
|
||||||
|
|
||||||
core.alternateRefsCommand::
|
core.alternateRefsCommand::
|
||||||
When advertising tips of available history from an alternate, use the shell to
|
When advertising tips of available history from an alternate, use the shell to
|
||||||
|
|||||||
@@ -2113,20 +2113,35 @@ static int commit_ref_update(struct files_ref_store *refs,
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef NO_SYMLINK_HEAD
|
#if defined(NO_SYMLINK_HEAD) || defined(WITH_BREAKING_CHANGES)
|
||||||
#define create_ref_symlink(a, b) (-1)
|
#define create_ref_symlink(a, b) (-1)
|
||||||
#else
|
#else
|
||||||
static int create_ref_symlink(struct ref_lock *lock, const char *target)
|
static int create_ref_symlink(struct ref_lock *lock, const char *target)
|
||||||
{
|
{
|
||||||
|
static int warn_once = 1;
|
||||||
|
char *ref_path;
|
||||||
int ret = -1;
|
int ret = -1;
|
||||||
|
|
||||||
char *ref_path = get_locked_file_path(&lock->lk);
|
ref_path = get_locked_file_path(&lock->lk);
|
||||||
unlink(ref_path);
|
unlink(ref_path);
|
||||||
ret = symlink(target, ref_path);
|
ret = symlink(target, ref_path);
|
||||||
free(ref_path);
|
free(ref_path);
|
||||||
|
|
||||||
if (ret)
|
if (ret)
|
||||||
fprintf(stderr, "no symlink - falling back to symbolic ref\n");
|
fprintf(stderr, "no symlink - falling back to symbolic ref\n");
|
||||||
|
|
||||||
|
if (warn_once)
|
||||||
|
warning(_("'core.preferSymlinkRefs=true' is nominated for removal.\n"
|
||||||
|
"hint: The use of symbolic links for symbolic refs is deprecated\n"
|
||||||
|
"hint: and will be removed in Git 3.0. The configuration that\n"
|
||||||
|
"hint: tells Git to use them is thus going away. You can unset\n"
|
||||||
|
"hint: it with:\n"
|
||||||
|
"hint:\n"
|
||||||
|
"hint:\tgit config unset core.preferSymlinkRefs\n"
|
||||||
|
"hint:\n"
|
||||||
|
"hint: Git will then use the textual symref format instead."));
|
||||||
|
warn_once = 0;
|
||||||
|
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
@@ -477,9 +477,29 @@ test_expect_success SYMLINKS 'symref transaction supports symlinks' '
|
|||||||
prepare
|
prepare
|
||||||
commit
|
commit
|
||||||
EOF
|
EOF
|
||||||
git update-ref --no-deref --stdin <stdin &&
|
git update-ref --no-deref --stdin <stdin 2>err &&
|
||||||
test_path_is_symlink .git/TEST_SYMREF_HEAD &&
|
if test_have_prereq WITH_BREAKING_CHANGES
|
||||||
test "$(test_readlink .git/TEST_SYMREF_HEAD)" = refs/heads/new
|
then
|
||||||
|
test_path_is_file .git/TEST_SYMREF_HEAD &&
|
||||||
|
echo "ref: refs/heads/new" >expect &&
|
||||||
|
test_cmp expect .git/TEST_SYMREF_HEAD &&
|
||||||
|
test_must_be_empty err
|
||||||
|
else
|
||||||
|
test_path_is_symlink .git/TEST_SYMREF_HEAD &&
|
||||||
|
test "$(test_readlink .git/TEST_SYMREF_HEAD)" = refs/heads/new &&
|
||||||
|
cat >expect <<-EOF &&
|
||||||
|
warning: ${SQ}core.preferSymlinkRefs=true${SQ} is nominated for removal.
|
||||||
|
hint: The use of symbolic links for symbolic refs is deprecated
|
||||||
|
hint: and will be removed in Git 3.0. The configuration that
|
||||||
|
hint: tells Git to use them is thus going away. You can unset
|
||||||
|
hint: it with:
|
||||||
|
hint:
|
||||||
|
hint: git config unset core.preferSymlinkRefs
|
||||||
|
hint:
|
||||||
|
hint: Git will then use the textual symref format instead.
|
||||||
|
EOF
|
||||||
|
test_cmp expect err
|
||||||
|
fi
|
||||||
'
|
'
|
||||||
|
|
||||||
test_expect_success 'symref transaction supports false symlink config' '
|
test_expect_success 'symref transaction supports false symlink config' '
|
||||||
|
|||||||
Reference in New Issue
Block a user