git@vger.kernel.org mailing list mirror (one of many)
 help / color / mirror / code / Atom feed
* [PATCH] Deprecate support for .git/info/grafts
@ 2018-04-13 11:11 Johannes Schindelin
  2018-04-13 18:22 ` Stefan Beller
                   ` (2 more replies)
  0 siblings, 3 replies; 115+ messages in thread
From: Johannes Schindelin @ 2018-04-13 11:11 UTC (permalink / raw)
  To: git; +Cc: Junio C Hamano, Jakub Narebski

The grafts feature was a convenient way to "stich together" ancient
history to the fresh start of linux.git.

Its implementation is, however, not up to Git's standards, as there are
too many ways where it can lead to surprising and unwelcome behavior.

For example, when pushing from a repository with active grafts, it is
possible to miss commits that have been "grafted out", resulting in a
broken state on the other side.

Also, the grafts feature is limited to "rewriting" commits' list of
parents, it cannot replace anything else.

The much younger feature implemented as `git replace` set out to remedy
those limitations and dangerous bugs.

Seeing as `git replace` is pretty mature by now, it is time to deprecate
support for the graft file, and to retire it eventually.

Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
---
 advice.c                  | 2 ++
 advice.h                  | 1 +
 commit.c                  | 9 +++++++++
 t/t6001-rev-list-graft.sh | 9 +++++++++
 4 files changed, 21 insertions(+)

diff --git a/advice.c b/advice.c
index 406efc183ba..4411704fd45 100644
--- a/advice.c
+++ b/advice.c
@@ -19,6 +19,7 @@ int advice_rm_hints = 1;
 int advice_add_embedded_repo = 1;
 int advice_ignored_hook = 1;
 int advice_waiting_for_editor = 1;
+int advice_graft_file_deprecated = 1;
 
 static struct {
 	const char *name;
@@ -42,6 +43,7 @@ static struct {
 	{ "addembeddedrepo", &advice_add_embedded_repo },
 	{ "ignoredhook", &advice_ignored_hook },
 	{ "waitingforeditor", &advice_waiting_for_editor },
+	{ "graftfiledeprecated", &advice_graft_file_deprecated },
 
 	/* make this an alias for backward compatibility */
 	{ "pushnonfastforward", &advice_push_update_rejected }
diff --git a/advice.h b/advice.h
index 70568fa7922..9f5064e82a8 100644
--- a/advice.h
+++ b/advice.h
@@ -21,6 +21,7 @@ extern int advice_rm_hints;
 extern int advice_add_embedded_repo;
 extern int advice_ignored_hook;
 extern int advice_waiting_for_editor;
+extern int advice_graft_file_deprecated;
 
 int git_default_advice_config(const char *var, const char *value);
 __attribute__((format (printf, 1, 2)))
diff --git a/commit.c b/commit.c
index ca474a7c112..a96b0a27154 100644
--- a/commit.c
+++ b/commit.c
@@ -12,6 +12,7 @@
 #include "prio-queue.h"
 #include "sha1-lookup.h"
 #include "wt-status.h"
+#include "advice.h"
 
 static struct commit_extra_header *read_commit_extra_header_lines(const char *buf, size_t len, const char **);
 
@@ -176,6 +177,14 @@ static int read_graft_file(const char *graft_file)
 	struct strbuf buf = STRBUF_INIT;
 	if (!fp)
 		return -1;
+	if (advice_graft_file_deprecated)
+		advise(_("Support for <GIT_DIR>/info/grafts is deprecated\n"
+			 "and will be removed in a future Git version.\n"
+			 "\n"
+			 "Please use \"git replace --graft [...]\" instead.\n"
+			 "\n"
+			 "Turn this message off by running\n"
+			 "\"git config advice.graftFileDeprecated false\""));
 	while (!strbuf_getwholeline(&buf, fp, '\n')) {
 		/* The format is just "Commit Parent1 Parent2 ...\n" */
 		struct commit_graft *graft = read_graft_line(&buf);
diff --git a/t/t6001-rev-list-graft.sh b/t/t6001-rev-list-graft.sh
index 05ddc69cf2a..7504ba47511 100755
--- a/t/t6001-rev-list-graft.sh
+++ b/t/t6001-rev-list-graft.sh
@@ -110,4 +110,13 @@ do
 	"
 
 done
+
+test_expect_success 'show advice that grafts are deprecated' '
+	git show HEAD 2>err &&
+	test_i18ngrep "git replace" err &&
+	test_config advice.graftFileDeprecated false &&
+	git show HEAD 2>err &&
+	test_i18ngrep ! "git replace" err
+'
+
 test_done

base-commit: fe0a9eaf31dd0c349ae4308498c33a5c3794b293
-- 
2.17.0.windows.1.4.g7e4058d72e3

Published-As: https://github.com/dscho/git/releases/tag/deprecate-grafts-v1
Fetch-It-Via: git fetch https://github.com/dscho/git deprecate-grafts-v1

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

end of thread, other threads:[~2018-11-28  9:03 UTC | newest]

Thread overview: 115+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2018-04-13 11:11 [PATCH] Deprecate support for .git/info/grafts Johannes Schindelin
2018-04-13 18:22 ` Stefan Beller
2018-04-13 22:35   ` Johannes Schindelin
2018-04-13 22:45     ` Stefan Beller
2018-04-19  8:15       ` Johannes Schindelin
2018-04-13 18:57 ` Eric Sunshine
2018-04-19  8:14   ` Johannes Schindelin
2018-04-19  8:17 ` [PATCH v2 0/7] Deprecate .git/info/grafts Johannes Schindelin
2018-04-19  8:17   ` [PATCH v2 1/7] replace: "libify" create_graft() Johannes Schindelin
2018-04-20  0:25     ` Junio C Hamano
2018-04-20 11:51       ` Jakub Narebski
2018-04-20 15:32       ` Johannes Schindelin
2018-04-19  8:17   ` [PATCH v2 2/7] replace: introduce --convert-graft-file Johannes Schindelin
2018-04-19 10:09     ` Christian Couder
2018-04-20 13:57       ` Johannes Schindelin
2018-04-20  1:05     ` Junio C Hamano
2018-04-20 15:26       ` Johannes Schindelin
2018-04-19  8:18   ` [PATCH v2 3/7] Add a test for `git replace --convert-graft-file` Johannes Schindelin
2018-04-20  1:21     ` Junio C Hamano
2018-04-20 15:31       ` Johannes Schindelin
2018-04-19  8:18   ` [PATCH v2 4/7] Deprecate support for .git/info/grafts Johannes Schindelin
2018-04-19  8:18   ` [PATCH v2 5/7] filter-branch: stop suggesting to use grafts Johannes Schindelin
2018-04-19  8:19   ` [PATCH v2 6/7] technical/shallow: describe the relationship with replace refs Johannes Schindelin
2018-04-19  8:21   ` [PATCH v2 7/7] technical/shallow: describe why shallow cannot use " Johannes Schindelin
2018-04-20 22:20   ` [PATCH v3 00/11] Deprecate .git/info/grafts Johannes Schindelin
2018-04-20 22:20     ` [PATCH v3 01/11] argv_array: offer to split a string by whitespace Johannes Schindelin
2018-04-20 23:29       ` Stefan Beller
2018-04-21  9:39         ` Johannes Schindelin
2018-04-20 22:21     ` [PATCH v3 02/11] commit: Let the callback of for_each_mergetag return on error Johannes Schindelin
2018-04-20 22:21     ` [PATCH v3 03/11] replace: avoid using die() to indicate a bug Johannes Schindelin
2018-04-20 22:21     ` [PATCH v3 04/11] replace: "libify" create_graft() and callees Johannes Schindelin
2018-04-20 22:22     ` [PATCH v3 05/11] replace: introduce --convert-graft-file Johannes Schindelin
2018-04-20 22:23     ` [PATCH v3 06/11] Add a test for `git replace --convert-graft-file` Johannes Schindelin
2018-04-21  6:20       ` SZEDER Gábor
2018-04-21  9:42         ` Johannes Schindelin
2018-04-20 22:24     ` [PATCH v3 07/11] Deprecate support for .git/info/grafts Johannes Schindelin
2018-04-20 22:25     ` [PATCH v3 08/11] filter-branch: stop suggesting to use grafts Johannes Schindelin
2018-04-20 22:26     ` [PATCH v3 09/11] technical/shallow: describe the relationship with replace refs Johannes Schindelin
2018-04-22 15:16       ` Philip Oakley
2018-04-24 19:10         ` Johannes Schindelin
2018-04-24 21:34           ` Philip Oakley
2018-04-25  0:40             ` Junio C Hamano
2018-04-25  7:17               ` Johannes Schindelin
2018-04-20 22:26     ` [PATCH v3 10/11] technical/shallow: describe why shallow cannot use " Johannes Schindelin
2018-04-20 22:27     ` [PATCH v3 11/11] Remove obsolete script to convert grafts to " Johannes Schindelin
2018-04-21  9:43     ` [PATCH v4 00/11] Deprecate .git/info/grafts Johannes Schindelin
2018-04-21  9:46       ` [PATCH v4 01/11] argv_array: offer to split a string by whitespace Johannes Schindelin
2018-04-24  1:15         ` Junio C Hamano
2018-04-24  2:38           ` Junio C Hamano
2018-04-21  9:46       ` [PATCH v4 02/11] commit: Let the callback of for_each_mergetag return on error Johannes Schindelin
2018-04-21  9:47       ` [PATCH v4 03/11] replace: avoid using die() to indicate a bug Johannes Schindelin
2018-04-21  9:47       ` [PATCH v4 04/11] replace: "libify" create_graft() and callees Johannes Schindelin
2018-04-23 19:08         ` Stefan Beller
2018-04-24 18:51           ` Johannes Schindelin
2018-04-24 19:03             ` Stefan Beller
2018-04-25  7:10               ` Johannes Schindelin
2018-04-21  9:48       ` [PATCH v4 05/11] replace: introduce --convert-graft-file Johannes Schindelin
2018-04-22  3:30         ` Eric Sunshine
2018-04-24 19:04           ` Johannes Schindelin
2018-04-21  9:48       ` [PATCH v4 06/11] Add a test for `git replace --convert-graft-file` Johannes Schindelin
2018-04-21  9:49       ` [PATCH v4 07/11] Deprecate support for .git/info/grafts Johannes Schindelin
2018-04-21  9:49       ` [PATCH v4 08/11] filter-branch: stop suggesting to use grafts Johannes Schindelin
2018-04-21  9:51       ` [PATCH v4 09/11] technical/shallow: describe the relationship with replace refs Johannes Schindelin
2018-04-21  9:56       ` [PATCH v4 10/11] technical/shallow: describe why shallow cannot use " Johannes Schindelin
2018-04-21  9:56       ` [PATCH v4 11/11] Remove obsolete script to convert grafts to " Johannes Schindelin
2018-04-23 19:24       ` [PATCH v4 00/11] Deprecate .git/info/grafts Stefan Beller
2018-04-25  9:53       ` [PATCH v5 " Johannes Schindelin
2018-04-25  9:53         ` [PATCH v5 01/11] argv_array: offer to split a string by whitespace Johannes Schindelin
2018-04-25  9:54         ` [PATCH v5 02/11] commit: Let the callback of for_each_mergetag return on error Johannes Schindelin
2018-04-25  9:54         ` [PATCH v5 03/11] replace: avoid using die() to indicate a bug Johannes Schindelin
2018-04-25  9:54         ` [PATCH v5 04/11] replace: "libify" create_graft() and callees Johannes Schindelin
2018-04-25  9:54         ` [PATCH v5 05/11] replace: introduce --convert-graft-file Johannes Schindelin
2018-04-25  9:54         ` [PATCH v5 06/11] Add a test for `git replace --convert-graft-file` Johannes Schindelin
2018-04-25  9:54         ` [PATCH v5 07/11] Deprecate support for .git/info/grafts Johannes Schindelin
2018-04-25  9:54         ` [PATCH v5 08/11] filter-branch: stop suggesting to use grafts Johannes Schindelin
2018-04-25  9:54         ` [PATCH v5 09/11] technical/shallow: stop referring to grafts Johannes Schindelin
2018-04-25 12:25           ` Jakub Narębski
2018-04-26  9:19             ` Johannes Schindelin
2018-04-25  9:54         ` [PATCH v5 10/11] technical/shallow: describe why shallow cannot use replace refs Johannes Schindelin
2018-04-25  9:54         ` [PATCH v5 11/11] Remove obsolete script to convert grafts to " Johannes Schindelin
2018-04-26  4:10         ` [PATCH v5 00/11] Deprecate .git/info/grafts Junio C Hamano
2018-04-27 21:03           ` Johannes Schindelin
2018-04-27 21:39         ` [PATCH v6 " Johannes Schindelin
2018-04-27 21:39           ` [PATCH v6 01/11] argv_array: offer to split a string by whitespace Johannes Schindelin
2018-04-27 21:39           ` [PATCH v6 02/11] commit: Let the callback of for_each_mergetag return on error Johannes Schindelin
2018-04-27 21:39           ` [PATCH v6 03/11] replace: avoid using die() to indicate a bug Johannes Schindelin
2018-04-27 21:39           ` [PATCH v6 04/11] replace: "libify" create_graft() and callees Johannes Schindelin
2018-04-27 21:39           ` [PATCH v6 05/11] replace: introduce --convert-graft-file Johannes Schindelin
2018-04-27 21:39           ` [PATCH v6 06/11] Add a test for `git replace --convert-graft-file` Johannes Schindelin
2018-04-28  1:25             ` SZEDER Gábor
2018-04-28 13:07               ` Johannes Schindelin
2018-04-27 21:39           ` [PATCH v6 07/11] Deprecate support for .git/info/grafts Johannes Schindelin
2018-04-27 21:39           ` [PATCH v6 08/11] filter-branch: stop suggesting to use grafts Johannes Schindelin
2018-04-27 21:40           ` [PATCH v6 09/11] technical/shallow: stop referring to grafts Johannes Schindelin
2018-04-27 21:40           ` [PATCH v6 10/11] technical/shallow: describe why shallow cannot use replace refs Johannes Schindelin
2018-04-27 21:40           ` [PATCH v6 11/11] Remove obsolete script to convert grafts to " Johannes Schindelin
2018-04-28  9:04             ` Philip Oakley
2018-04-28 13:13               ` Johannes Schindelin
2018-04-28 15:00               ` Stefan Beller
2018-04-28 22:47           ` [Re-send PATCH v7 00/12] Deprecate .git/info/grafts Johannes Schindelin
2018-04-28 22:44             ` [PATCH v7 01/12] argv_array: offer to split a string by whitespace Johannes Schindelin
2018-04-28 22:44             ` [PATCH v7 02/12] commit: Let the callback of for_each_mergetag return on error Johannes Schindelin
2018-04-28 22:44             ` [PATCH v7 03/12] replace: avoid using die() to indicate a bug Johannes Schindelin
2018-04-28 22:44             ` [PATCH v7 04/12] replace: "libify" create_graft() and callees Johannes Schindelin
2018-04-28 22:44             ` [PATCH v7 05/12] replace: prepare create_graft() for converting graft files wholesale Johannes Schindelin
2018-04-28 22:44             ` [PATCH v7 06/12] replace: introduce --convert-graft-file Johannes Schindelin
2018-04-28 22:44             ` [PATCH v7 07/12] Add a test for `git replace --convert-graft-file` Johannes Schindelin
2018-04-28 22:44             ` [PATCH v7 08/12] Deprecate support for .git/info/grafts Johannes Schindelin
2018-11-27 20:12               ` [PATCH] advice: don't pointlessly suggest --convert-graft-file Ævar Arnfjörð Bjarmason
2018-11-28  6:34                 ` Junio C Hamano
2018-11-28  9:03                 ` Johannes Schindelin
2018-04-28 22:44             ` [PATCH v7 09/12] filter-branch: stop suggesting to use grafts Johannes Schindelin
2018-04-28 22:45             ` [PATCH v7 10/12] technical/shallow: stop referring to grafts Johannes Schindelin
2018-04-28 22:45             ` [PATCH v7 11/12] technical/shallow: describe why shallow cannot use replace refs Johannes Schindelin
2018-04-28 22:45             ` [PATCH v7 12/12] Remove obsolete script to convert grafts to " Johannes Schindelin

Code repositories for project(s) associated with this public inbox

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

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).