git/list[1] front-page[2] threads[3] people[4] search[5] about
 

Re: [PATCH/RFC] Teach fast-import to import subtrees named by tree id

From
Jonathan Nieder <jrnieder@gmail.com>
Date
Jul 2, 2010, 04:42 UTC
Message-ID
<20100702044220.GB7209@burratino>
In-Reply-To
<AANLkTinSvg6fqu0Y-EHpMoQDZcYBIRP3qRprsHQQwjZE@mail.gmail.com>
Sverre Rabbelier wrote:
> On Thu, Jul 1, 2010 at 05:18, Jonathan Nieder <jrnieder@gmail.com> wrote:
>> I was not sure whether to add a "feature" specification for
>> this, so I’ll try that as a separate patch.
[...]
> That should be as easy as adding an option though?
Yes, I think so.
-- 8< --
Subject: fast-import: And a feature option for importing subtrees

The "feature external-trees" command avoids wasting time importing with old backends only to error out on a later "M 040000 <tree hash> <path>".

Its use is completely optional. In particular, if backends without the external-trees feature become extinct, then there will be no reason to keep using it.

Signed-off-by: Jonathan Nieder <jrnieder@gmail.com>
---
 Documentation/git-fast-import.txt |   17 +++++++++++++----
 fast-import.c                     |    3 +++
 2 files changed, 16 insertions(+), 4 deletions(-)
diff --git a/Documentation/git-fast-import.txt b/Documentation/git-fast-import.txt
index 5edf059..54a3ea1 100644
--- a/Documentation/git-fast-import.txt
+++ b/Documentation/git-fast-import.txt
@@ -484,9 +484,12 @@ External data format::
 +
 Here usually `<dataref>` must be either a mark reference (`:<idnum>`)
 set by a prior `blob` command, or a full 40-byte SHA-1 of an
-existing Git blob object.  If `<mode>` is `040000` then
-`<dataref>` must be the full 40-byte SHA-1 of an existing
-Git tree object or a mark reference set with `--import-marks`.
+existing Git blob object.
++
+If `<mode>` is `040000` then `<dataref>` must be the full 40-byte
+SHA-1 of an existing Git tree object or a mark reference set with
+`--import-marks`.  Frontends can check for a backend supporting
+this mode with the `feature external-trees` command.
 
 Inline data format::
 	The data content for the file has not been supplied yet.
@@ -889,7 +892,8 @@ The <feature> part of the command may be any string matching
 ^[a-zA-Z][a-zA-Z-]*$ and should be understood by fast-import.
 
 Feature work identical as their option counterparts with the
-exception of the import-marks feature, see below.
+exception of the import-marks and external-trees features;
+see below.
 
 The following features are currently supported:
 
@@ -898,6 +902,7 @@ The following features are currently supported:
 * export-marks
 * relative-marks
 * no-relative-marks
+* external-trees
 * force
 
 The import-marks behaves differently from when it is specified as
@@ -905,6 +910,10 @@ commandline option in that only one "feature import-marks" is allowed
 per stream. Also, any --import-marks= specified on the commandline
 will override those from the stream (if any).
 
+The `feature external-trees` command can be used to abort early
+if the backend does not support `M 040000 <tree hash> <path>`.
+It has no effect in recent fast-import verisons.
+
 `option`
 ~~~~~~~~
 Processes the specified option so that git fast-import behaves in a
diff --git a/fast-import.c b/fast-import.c
index ad6843a..290d4b1 100644
--- a/fast-import.c
+++ b/fast-import.c
@@ -2820,6 +2820,9 @@ static void parse_feature(void)
 	if (seen_data_command)
 		die("Got feature command '%s' after data command", feature);
 
+	if (!prefixcmp(feature, "external-trees"))
+		/* Yes, we do support the M 040000 command. */
+		return;
 	if (parse_one_feature(feature, 1))
 		return;
 
-- 
1.7.1.1
Previous: Sverre RabbelierNext: Ramkumar Ramachandra
Message 74 of 75 in “Teach fast-import to import subtrees named by tree id”
  1. Teach fast-import to import subtrees named by tree idJonathan Nieder, Jul 1, 2010
  2. Teach fast-import to print the id of each imported commitJonathan Nieder, Jul 1, 2010
  3. Sverre RabbelierJul 2, 2010
  4. Jonathan NiederJul 2, 2010
  5. Sverre RabbelierJul 2, 2010
  6. Jonathan NiederJul 2, 2010
  7. Sverre RabbelierJul 2, 2010
  8. Jonathan NiederJul 2, 2010
  9. Sverre RabbelierJul 2, 2010
  10. Sam VilainJul 4, 2010
  11. Jonathan NiederJul 4, 2010
  12. Sam VilainJul 4, 2010
  13. Jonathan NiederJul 4, 2010
  14. Ramkumar RamachandraAug 17, 2010
  15. 0/3 fast-import: give importers access to the object storeJonathan Nieder, Sep 5, 2010
  16. 1/3 t9300 (fast-import): style tweaksJonathan Nieder, Sep 5, 2010
  17. 00/24 Re: [PATCH 1/3] t9300 (fast-import): style tweaksJonathan Nieder, Sep 24, 2010
  18. 01/24 t9300 (fast-import): avoid exiting early on failureJonathan Nieder, Sep 24, 2010
  19. 02/24 t9300 (fast-import): avoid hard-coded object namesJonathan Nieder, Sep 24, 2010
  20. 03/24 t9300 (fast-import): guard "export large marks" test setupJonathan Nieder, Sep 24, 2010
  21. Ramkumar RamachandraSep 24, 2010
  22. Raja R HarinathSep 24, 2010
  23. Ramkumar RamachandraSep 24, 2010
  24. Raja R HarinathSep 24, 2010
  25. 04/24 t9300 (fast-import): check exit status from upstream of pipesJonathan Nieder, Sep 24, 2010
  26. 05/24 t9300 (fast-import): check exit status from command substitutionsJonathan Nieder, Sep 24, 2010
  27. 06/24 t9300 (fast-import): use test_cmp in place of test $(foo) = $(bar)Jonathan Nieder, Sep 24, 2010
  28. 07/24 t9300 (fast-import): use tabs to indentJonathan Nieder, Sep 24, 2010
  29. Ramkumar RamachandraSep 24, 2010
  30. Jonathan NiederSep 24, 2010
  31. 08/24 t9300 (fast-import), series A: re-indentJonathan Nieder, Sep 24, 2010
  32. Sverre RabbelierSep 24, 2010
  33. Jonathan NiederSep 24, 2010
  34. 09/24 t9300 (fast-import), series B: re-indentJonathan Nieder, Sep 24, 2010
  35. 10/24 t9300 (fast-import), series C: re-indentJonathan Nieder, Sep 24, 2010
  36. 11/24 t9300 (fast-import), series D: re-indentJonathan Nieder, Sep 24, 2010
  37. 12/24 t9300 (fast-import), series E: re-indentJonathan Nieder, Sep 24, 2010
  38. 13/24 t9300 (fast-import), series F: re-indentJonathan Nieder, Sep 24, 2010
  39. 14/24 t9300 (fast-import), series H: re-indentJonathan Nieder, Sep 24, 2010
  40. 15/24 t9300 (fast-import), series I: re-indentJonathan Nieder, Sep 24, 2010
  41. 16/24 t9300 (fast-import), series J: re-indentJonathan Nieder, Sep 24, 2010
  42. 17/24 t9300 (fast-import), series K: re-indentJonathan Nieder, Sep 24, 2010
  43. 18/24 t9300 (fast-import), series L: re-indentJonathan Nieder, Sep 24, 2010
  44. 19/24 t9300 (fast-import), series M: re-indentJonathan Nieder, Sep 24, 2010
  45. 20/24 t9300 (fast-import), series N: re-indentJonathan Nieder, Sep 24, 2010
  46. 21/24 t9300 (fast-import), series O: re-indentJonathan Nieder, Sep 24, 2010
  47. 22/24 t9300 (fast-import), series P: re-indentJonathan Nieder, Sep 24, 2010
  48. 23/24 t9300 (fast-import), series Q: re-indentJonathan Nieder, Sep 24, 2010
  49. 24/24 t9300 (fast-import), series R: re-indentJonathan Nieder, Sep 24, 2010
  50. svn-fe statusJonathan Nieder, Sep 25, 2010
  51. Sverre RabbelierSep 25, 2010
  52. Jonathan NiederSep 27, 2010
  53. Sverre RabbelierSep 27, 2010
  54. 2/3 Teach fast-import to print the id of each imported commitJonathan Nieder, Sep 5, 2010
  55. 3/3 fast-import: Let importers retrieve the objects being writtenJonathan Nieder, Sep 5, 2010
  56. Ramkumar RamachandraSep 5, 2010
  57. Sverre RabbelierSep 5, 2010
  58. Ramkumar RamachandraSep 5, 2010
  59. Sverre RabbelierSep 5, 2010
  60. Jonathan NiederSep 5, 2010
  61. 4/3 fast-import: typofixJonathan Nieder, Sep 8, 2010
  62. 5/3 fast-import: allow cat command with empty pathJonathan Nieder, Sep 8, 2010
  63. 6/3 fast-import: Allow cat requests at arbitrary points in streamJonathan Nieder, Sep 8, 2010
  64. Sverre RabbelierSep 8, 2010
  65. Jonathan NiederSep 8, 2010
  66. Ramkumar RamachandraSep 8, 2010
  67. Sam VilainSep 16, 2010
  68. Sverre RabbelierSep 17, 2010
  69. Jonathan NiederSep 24, 2010
  70. Sverre RabbelierSep 24, 2010
  71. Jonathan NiederSep 25, 2010
  72. Sverre RabbelierSep 25, 2010
  73. Sverre RabbelierJul 2, 2010
  74. Jonathan NiederJul 2, 2010
  75. Ramkumar RamachandraJul 2, 2010

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.