All of lore.kernel.org
 help / color / mirror / Atom feed
From: Johannes Schindelin <johannes.schindelin@gmx.de>
To: git@vger.kernel.org
Cc: Johannes Schindelin <johannes.schindelin@gmx.de>,
	Junio C Hamano <gitster@pobox.com>,
	Jakub Narebski <jnareb@gmail.com>,
	Stefan Beller <sbeller@google.com>,
	Eric Sunshine <sunshine@sunshineco.com>,
	Christian Couder <christian.couder@gmail.com>,
	Philip Oakley <philipoakley@iee.org>
Subject: [PATCH v7 08/12] Deprecate support for .git/info/grafts
Date: Sun, 29 Apr 2018 00:44:44 +0200	[thread overview]
Message-ID: <82ccde9ed8a390133852a5d9e07ef471f94db263.1524955439.git.johannes.schindelin@gmx.de> (raw)
In-Reply-To: <cover.1524955439.git.johannes.schindelin@gmx.de>

The grafts feature was a convenient way to "stitch 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 (since 4228e8bc98
(replace: add --graft option, 2014-07-19) it can perform the graft
file's duties), it is time to deprecate support for the graft file, and
to retire it eventually.

Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
Reviewed-by: Stefan Beller <sbeller@google.com>
---
 advice.c                  |  2 ++
 advice.h                  |  1 +
 commit.c                  | 10 ++++++++++
 t/t6001-rev-list-graft.sh |  9 +++++++++
 4 files changed, 22 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 2952ec987c5..451d3ce8dfe 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,15 @@ 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 --convert-graft-file\"\n"
+			 "to convert the grafts into replace refs.\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
-- 
2.17.0.windows.1.36.gdf4ca5fb72a



  parent reply	other threads:[~2018-04-28 22:45 UTC|newest]

Thread overview: 115+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
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             ` Johannes Schindelin [this message]
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

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=82ccde9ed8a390133852a5d9e07ef471f94db263.1524955439.git.johannes.schindelin@gmx.de \
    --to=johannes.schindelin@gmx.de \
    --cc=christian.couder@gmail.com \
    --cc=git@vger.kernel.org \
    --cc=gitster@pobox.com \
    --cc=jnareb@gmail.com \
    --cc=philipoakley@iee.org \
    --cc=sbeller@google.com \
    --cc=sunshine@sunshineco.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.