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

Re: [PATCH v4 1/7] archive: optionally add "virtual" files

From
Junio C Hamano <gitster@pobox.com>
Date
May 11, 2022, 19:27 UTC
Message-ID
<xmqqzgjnkgy0.fsf@gitster.g>
In-Reply-To
<3cf6e4f8-9151-6d68-21ca-b94d6a7557e6@web.de>
René Scharfe <l.s.r@web.de> writes:
Show 18 quoted lines
> Am 11.05.22 um 01:21 schrieb Junio C Hamano:
>> <rsbecker@nexbridge.com> writes:
>>
>>>> If we did "--add-virtual-file=<path>:0644:<contents>" instead from day one, it
>>>> certainly adds a few more lines of logic to this patch, and the calling "scalar
>>>> diagnose" may have to pass a few more bytes, but I suspect that such a change
>>>> would help the project in the longer run.
>
>> I did say "scalar diagnose" may not care.  But a patch to "git
>> archive" will affect other people, and among them there would be
>> people who say "gee, now I can add a handful of files from the
>> command line with their contents, without actually having them in
>> throw-away untracked files, when running 'git archive'.  That's
>> handy!", try it out and get disappointed by their inability to
>> create executable files that way.
>
> Which might motivate them to contribute a patch to add that feature.
> Give them a chance! :)

Yes, but there is no way to reuse the same option in a backward compatible way to later add the mode information, and that is why we want to be careful before a half-feature squats on an option.

> FWIW, I'd already be satisfied by a convincing outline of a way towards
> a complete solution to accept the partial feature, just to be sure we
> don't paint ourselves into a corner.

Exactly. As you say, an extra and separate option can be used. I do not know if that is a workaround because we didn't design the first option to take an additional option, or a welcome feature.

> Regarding file modes: We only effectively support the executable bit,
> so an additional option --add-virtual-executable-file=<path>:<contents>
> would suffice.

While I do not think we want to support more than one "is it executable or not?" bit, I am not so sure about what the current code does, though, for these "not from a tree, but added as extra files" entries.

If you add an extra file from an on-disk untracked file, the add_file_cb() callback picks up the full st.st_mode for the file, and write_archive_entries() in its loop over args->extra_files pass the full info->stat.st_mode down to write_entry(), which is used by archive-tar.c::write_tar_entry() to obtain mode bits pretty much as-is. For tracked paths, we probably are normalizing the blobs between 0644 and 0755 way before the values are passed as "mode" parameter to the write_entry() functions, but for these extra files, there is no such massaging.

So, I am OK with --add-virtual-executable=<path>:<contents> (but the point still stands that the way the code in the patch squats in the codepath makes it necessary to first refator it before it can happen) as a separate option. We may want to massage the mode bit we grab from these extra files, if we were to go that route, though.

Thanks.
Previous: René ScharfeNext: René Scharfe
Message 82 of 140 in “scalar: implement the subcommand "diagnose"”
  1. 0/5 scalar: implement the subcommand "diagnose"Johannes Schindelin via GitGitGadget, Jan 26, 2022
  2. 1/5 Implement `scalar diagnose`Johannes Schindelin via GitGitGadget, Jan 26, 2022
  3. René ScharfeJan 26, 2022
  4. Taylor BlauJan 26, 2022
  5. Johannes SchindelinFeb 6, 2022
  6. Elijah NewrenJan 27, 2022
  7. 2/5 scalar diagnose: include disk space informationJohannes Schindelin via GitGitGadget, Jan 26, 2022
  8. 3/5 scalar: teach `diagnose` to gather packfile infoMatthew John Cheetham via GitGitGadget, Jan 26, 2022
  9. Taylor BlauJan 26, 2022
  10. Derrick StoleeJan 27, 2022
  11. Johannes SchindelinFeb 6, 2022
  12. 4/5 scalar: teach `diagnose` to gather loose objects informationMatthew John Cheetham via GitGitGadget, Jan 26, 2022
  13. Taylor BlauJan 26, 2022
  14. Derrick StoleeJan 27, 2022
  15. Elijah NewrenJan 27, 2022
  16. Johannes SchindelinFeb 6, 2022
  17. 5/5 scalar diagnose: show a spinner while staging contentJohannes Schindelin via GitGitGadget, Jan 26, 2022
  18. Derrick StoleeJan 27, 2022
  19. Johannes SchindelinFeb 6, 2022
  20. 0/6 scalar: implement the subcommand "diagnose"Johannes Schindelin via GitGitGadget, Feb 6, 2022
  21. 2/6 scalar: validate the optional enlistment argumentJohannes Schindelin via GitGitGadget, Feb 6, 2022
  22. 1/6 archive: optionally add "virtual" filesJohannes Schindelin via GitGitGadget, Feb 6, 2022
  23. René ScharfeFeb 7, 2022
  24. Junio C HamanoFeb 7, 2022
  25. Johannes SchindelinFeb 8, 2022
  26. Junio C HamanoFeb 8, 2022
  27. René ScharfeFeb 8, 2022
  28. Junio C HamanoFeb 9, 2022
  29. René ScharfeFeb 10, 2022
  30. Junio C HamanoFeb 10, 2022
  31. René ScharfeFeb 11, 2022
  32. Junio C HamanoFeb 11, 2022
  33. René ScharfeFeb 12, 2022
  34. Junio C HamanoFeb 13, 2022
  35. René ScharfeFeb 13, 2022
  36. Junio C HamanoFeb 14, 2022
  37. Johannes SchindelinFeb 8, 2022
  38. 3/6 Implement `scalar diagnose`Johannes Schindelin via GitGitGadget, Feb 6, 2022
  39. René ScharfeFeb 7, 2022
  40. Johannes SchindelinFeb 8, 2022
  41. 4/6 scalar diagnose: include disk space informationJohannes Schindelin via GitGitGadget, Feb 6, 2022
  42. 5/6 scalar: teach `diagnose` to gather packfile infoMatthew John Cheetham via GitGitGadget, Feb 6, 2022
  43. 6/6 scalar: teach `diagnose` to gather loose objects informationMatthew John Cheetham via GitGitGadget, Feb 6, 2022
  44. 0/7 scalar: implement the subcommand "diagnose"Johannes Schindelin via GitGitGadget, May 4, 2022
  45. 2/7 archive --add-file-with-contents: allow paths containing colonsJohannes Schindelin via GitGitGadget, May 4, 2022
  46. Elijah NewrenMay 7, 2022
  47. Johannes SchindelinMay 9, 2022
  48. 1/7 archive: optionally add "virtual" filesJohannes Schindelin via GitGitGadget, May 4, 2022
  49. 3/7 scalar: validate the optional enlistment argumentJohannes Schindelin via GitGitGadget, May 4, 2022
  50. 5/7 scalar diagnose: include disk space informationJohannes Schindelin via GitGitGadget, May 4, 2022
  51. 7/7 scalar: teach `diagnose` to gather loose objects informationMatthew John Cheetham via GitGitGadget, May 4, 2022
  52. 6/7 scalar: teach `diagnose` to gather packfile infoMatthew John Cheetham via GitGitGadget, May 4, 2022
  53. 4/7 Implement `scalar diagnose`Johannes Schindelin via GitGitGadget, May 4, 2022
  54. Elijah NewrenMay 7, 2022
  55. 0/7 scalar: implement the subcommand "diagnose"Johannes Schindelin via GitGitGadget, May 10, 2022
  56. 2/7 archive --add-file-with-contents: allow paths containing colonsJohannes Schindelin via GitGitGadget, May 10, 2022
  57. Junio C HamanoMay 10, 2022
  58. rsbecker@nexbridge.comMay 10, 2022
  59. Johannes SchindelinMay 19, 2022
  60. Johannes SchindelinMay 19, 2022
  61. Junio C HamanoMay 19, 2022
  62. 3/7 scalar: validate the optional enlistment argumentJohannes Schindelin via GitGitGadget, May 10, 2022
  63. Ævar Arnfjörð BjarmasonMay 17, 2022
  64. Junio C HamanoMay 18, 2022
  65. Ævar Arnfjörð BjarmasonMay 20, 2022
  66. Johannes SchindelinMay 20, 2022
  67. Ævar Arnfjörð BjarmasonMay 21, 2022
  68. Junio C HamanoMay 22, 2022
  69. Johannes SchindelinMay 24, 2022
  70. Ævar Arnfjörð BjarmasonMay 24, 2022
  71. Junio C HamanoMay 24, 2022
  72. Johannes SchindelinMay 25, 2022
  73. 4/7 Implement `scalar diagnose`Johannes Schindelin via GitGitGadget, May 10, 2022
  74. Ævar Arnfjörð BjarmasonMay 17, 2022
  75. 6/7 scalar: teach `diagnose` to gather packfile infoMatthew John Cheetham via GitGitGadget, May 10, 2022
  76. 5/7 scalar diagnose: include disk space informationJohannes Schindelin via GitGitGadget, May 10, 2022
  77. 1/7 archive: optionally add "virtual" filesJohannes Schindelin via GitGitGadget, May 10, 2022
  78. Junio C HamanoMay 10, 2022
  79. rsbecker@nexbridge.comMay 10, 2022
  80. Junio C HamanoMay 10, 2022
  81. René ScharfeMay 11, 2022
  82. Junio C HamanoMay 11, 2022
  83. René ScharfeMay 12, 2022
  84. Junio C HamanoMay 12, 2022
  85. Junio C HamanoMay 12, 2022
  86. René ScharfeMay 14, 2022
  87. fixup! archive: optionally add "virtual" filesJunio C Hamano, May 12, 2022
  88. 7/7 scalar: teach `diagnose` to gather loose objects informationMatthew John Cheetham via GitGitGadget, May 10, 2022
  89. Ævar Arnfjörð BjarmasonMay 17, 2022
  90. rsbecker@nexbridge.comMay 17, 2022
  91. Johannes SchindelinMay 19, 2022
  92. 0/7 scalar: implement the subcommand "diagnose"Johannes Schindelin via GitGitGadget, May 19, 2022
  93. 1/7 archive: optionally add "virtual" filesJohannes Schindelin via GitGitGadget, May 19, 2022
  94. René ScharfeMay 20, 2022
  95. Junio C HamanoMay 20, 2022
  96. 2/7 archive --add-file-with-contents: allow paths containing colonsJohannes Schindelin via GitGitGadget, May 19, 2022
  97. 5/7 scalar diagnose: include disk space informationJohannes Schindelin via GitGitGadget, May 19, 2022
  98. 4/7 Implement `scalar diagnose`Johannes Schindelin via GitGitGadget, May 19, 2022
  99. 3/7 scalar: validate the optional enlistment argumentJohannes Schindelin via GitGitGadget, May 19, 2022
  100. 6/7 scalar: teach `diagnose` to gather packfile infoMatthew John Cheetham via GitGitGadget, May 19, 2022
  101. 7/7 scalar: teach `diagnose` to gather loose objects informationMatthew John Cheetham via GitGitGadget, May 19, 2022
  102. Junio C HamanoMay 19, 2022
  103. 0/7 scalar: implement the subcommand "diagnose"Johannes Schindelin via GitGitGadget, May 21, 2022
  104. 1/7 archive: optionally add "virtual" filesJohannes Schindelin via GitGitGadget, May 21, 2022
  105. Junio C HamanoMay 25, 2022
  106. René ScharfeMay 26, 2022
  107. Junio C HamanoMay 26, 2022
  108. René ScharfeMay 26, 2022
  109. Junio C HamanoMay 26, 2022
  110. René ScharfeMay 27, 2022
  111. Junio C HamanoMay 27, 2022
  112. René ScharfeMay 28, 2022
  113. 3/7 scalar: validate the optional enlistment argumentJohannes Schindelin via GitGitGadget, May 21, 2022
  114. 2/7 archive --add-virtual-file: allow paths containing colonsJohannes Schindelin via GitGitGadget, May 21, 2022
  115. Junio C HamanoMay 25, 2022
  116. Junio C HamanoMay 25, 2022
  117. Junio C HamanoMay 25, 2022
  118. 6/7 scalar: teach `diagnose` to gather packfile infoMatthew John Cheetham via GitGitGadget, May 21, 2022
  119. 4/7 Implement `scalar diagnose`Johannes Schindelin via GitGitGadget, May 21, 2022
  120. 5/7 scalar diagnose: include disk space informationJohannes Schindelin via GitGitGadget, May 21, 2022
  121. 7/7 scalar: teach `diagnose` to gather loose objects informationMatthew John Cheetham via GitGitGadget, May 21, 2022
  122. 0/7 js/scalar-diagnose rebasedJunio C Hamano, May 28, 2022
  123. 1/7 archive: optionally add "virtual" filesJunio C Hamano, May 28, 2022
  124. 3/7 scalar: validate the optional enlistment argumentJunio C Hamano, May 28, 2022
  125. 2/7 archive --add-virtual-file: allow paths containing colonsJunio C Hamano, May 28, 2022
  126. Adam DinwoodieJun 15, 2022
  127. Junio C HamanoJun 15, 2022
  128. Adam DinwoodieJun 15, 2022
  129. Johannes SchindelinJun 18, 2022
  130. Junio C HamanoJun 18, 2022
  131. Adam DinwoodieJun 20, 2022
  132. 4/7 scalar: implement `scalar diagnose`Junio C Hamano, May 28, 2022
  133. Ævar Arnfjörð BjarmasonJun 10, 2022
  134. Junio C HamanoJun 10, 2022
  135. Ævar Arnfjörð BjarmasonJun 10, 2022
  136. 6/7 scalar: teach `diagnose` to gather packfile infoJunio C Hamano, May 28, 2022
  137. 7/7 scalar: teach `diagnose` to gather loose objects informationJunio C Hamano, May 28, 2022
  138. 5/7 scalar diagnose: include disk space informationJunio C Hamano, May 28, 2022
  139. Johannes SchindelinMay 30, 2022
  140. Junio C HamanoMay 30, 2022

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.