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

Re: [RFC PATCH 02/10] Move textconv_object to be with other textconv methods

From
Jeff King <peff@peff.net>
Date
May 9, 2017, 02:34 UTC
Message-ID
<20170509023434.hxhmvemmrymgu5ij@sigill.intra.peff.net>
In-Reply-To
<xmqqziem6bq8.fsf@gitster.mtv.corp.google.com>
On Tue, May 09, 2017 at 10:49:19AM +0900, Junio C Hamano wrote:
Show 11 quoted lines
> Jeff King <peff@peff.net> writes:
> 
> > The specific helpers have less visibility, which is good. The public
> > functions a() and b() were already public, so no change. But now the
> > common helper is public, too, even though nobody except a() and b() care
> > about it.
> >
> > So it's a tradeoff. And the important question is: is the bleed-over
> > between a() and b() worse than the common bits being made public?
> 
> At this point you are saying the same thing as I said ;-) 

Maybe, but I think my hunch is that the answer to the question is different than yours. ;)

Show 9 quoted lines
> I haven't touched diff.c for a while, but my impression was that it
> was already a smallest logical unit, especially since some bits like
> diff-lib.c (the interface for the front-end programs to drive the
> machinery via the three standard pairs of sources) and ws.c (diff
> subsystem to deal with whitespace errors) are already split out (and
> needless to say, the diffcore transformations are all in their own
> separate files).  Over time people may have added what does not
> belong there merely for convenience, which may want to get ejected,
> but I do not think of many instances of them offhand.

Just skimming the file, I suspect diff_filespec could be broken out into a semi-public interface (many of its functions already are public anyway), probably dirstat could be broken out, and possibly other specific formats could be broken into their own files. But I didn't spend much time on it.

Show 11 quoted lines
> It appears that the textconv related helpers (which was where this
> discussion thread started from) could be first restructured so that
> they do not depend on diff_filespec and turned into a more generic
> "I have this path and a blob object name, please run textconv to it
> and..." interface and then moved out of the file into its own
> textconv.[ch].  It does not need access to quite a few fields in
> diff_filespec structure (e.g.  it shouldn't care what filemode the
> thing has).  The diff machinery wants the result in a contiguous
> piece of memory and that could be a good starting point, but I said
> "and..." above because I am not sure if it is the best generic
> thing the restructured interface can do to the result.

I think some of the users of textconv do have to go through some contortions to turn their buffers into diff_filespecs (e.g., blame and grep), and it would be nice to fix that. But the diff-driver lookup and caching is tied to the diff_filespec, too (which is perhaps a sign of a misfeature in the first place, as the "diff" attribute is being used for things like "grep" and "cat-file"). So we'd have to resolve that.

So I think there is room for improvement there, but I'm also not sure it is worth the trouble. AFAIK neither textconv nor the general length of diff.c is holding up anybody's work or even making it significantly more difficult. If people have spare cycles, they are free to work on anything, of course. But I can think of code that is probably in more dire need of refactoring. :)

-Peff
Previous: Junio C HamanoNext: Jeff Smith
Message 19 of 52 in “Add blame to libgit”
  1. 00/10 Add blame to libgitJeff Smith, May 5, 2017
  2. 01/10 Remove unneeded dependency on blob.h from blameJeff Smith, May 5, 2017
  3. Ævar Arnfjörð BjarmasonMay 5, 2017
  4. 03/10 Add some missing definitions to header filesJeff Smith, May 5, 2017
  5. Junio C HamanoMay 5, 2017
  6. 05/10 Split blame origin into its own fileJeff Smith, May 5, 2017
  7. 07/10 Break out scoreboard a little betterJeff Smith, May 5, 2017
  8. Junio C HamanoMay 5, 2017
  9. 09/10 Break out scoreboard init and setupJeff Smith, May 5, 2017
  10. 08/10 Split blame scoreboard into its own fileJeff Smith, May 5, 2017
  11. 06/10 Move fake_working_tree_commit() to libJeff Smith, May 5, 2017
  12. 02/10 Move textconv_object to be with other textconv methodsJeff Smith, May 5, 2017
  13. Junio C HamanoMay 5, 2017
  14. Stefan BellerMay 5, 2017
  15. Junio C HamanoMay 8, 2017
  16. Jeff KingMay 8, 2017
  17. Stefan BellerMay 8, 2017
  18. Junio C HamanoMay 9, 2017
  19. Jeff KingMay 9, 2017
  20. 04/10 Remove unused parameter from get_origin()Jeff Smith, May 5, 2017
  21. 10/10 Move scoreboard init and setup to libJeff Smith, May 5, 2017
  22. Junio C HamanoMay 5, 2017
  23. 00/22 Add blame to libgitJeff Smith, May 14, 2017
  24. 01/22 blame: remove unneeded dependency on blob.hJeff Smith, May 14, 2017
  25. 03/22 blame: remove unused parametersJeff Smith, May 14, 2017
  26. 02/22 blame: move textconv_object with related functionsJeff Smith, May 14, 2017
  27. 05/22 blame: move scoreboard structure to headerJeff Smith, May 14, 2017
  28. 06/22 blame: move stat counters to scoreboardJeff Smith, May 14, 2017
  29. 04/22 blame: move origin and entry structures to headerJeff Smith, May 14, 2017
  30. Junio C HamanoMay 14, 2017
  31. 07/22 blame: move copy/move thresholds to scoreboardJeff Smith, May 14, 2017
  32. 08/22 blame: move contents_from to scoreboardJeff Smith, May 14, 2017
  33. 11/22 blame: move xdl_opts flags to scoreboardJeff Smith, May 14, 2017
  34. 10/22 blame: move show_root flag to scoreboardJeff Smith, May 14, 2017
  35. 09/22 blame: move reverse flag to scoreboardJeff Smith, May 14, 2017
  36. 18/22 blame: move fake-commit-related methods to libgitJeff Smith, May 14, 2017
  37. 21/22 blame: create scoreboard setup function in libgitJeff Smith, May 14, 2017
  38. 19/22 blame: move scoreboard-related methods to libgitJeff Smith, May 14, 2017
  39. 15/22 blame: wrap blame_sort and compare_blame_finalJeff Smith, May 14, 2017
  40. 20/22 blame: create scoreboard init function in libgitJeff Smith, May 14, 2017
  41. 22/22 blame: create entry prepend function in libgitJeff Smith, May 14, 2017
  42. 13/22 blame: make sanity_check use a callback in scoreboardJeff Smith, May 14, 2017
  43. 17/22 blame: move origin-related methods to libgitJeff Smith, May 14, 2017
  44. 16/22 blame: rework methods that determine 'final' commitJeff Smith, May 14, 2017
  45. 14/22 blame: move progess updates to a scoreboard callbackJeff Smith, May 14, 2017
  46. 12/22 blame: move no_whole_file_rename flag to scoreboardJeff Smith, May 14, 2017
  47. Junio C HamanoMay 15, 2017
  48. Jeffrey SmithMay 15, 2017
  49. Junio C HamanoMay 16, 2017
  50. Jeffrey SmithMay 16, 2017
  51. Junio C HamanoMay 16, 2017
  52. Jeffrey SmithMay 5, 2017

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.