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

Re: RFC: git cat-file --follow-symlinks?

From
David Turner <dturner@twopensource.com>
Date
Apr 30, 2015, 19:25 UTC
Message-ID
<1430421924.22711.57.camel@ubuntu>
In-Reply-To
<20150430033725.GB12361@peff.net>
On Wed, 2015-04-29 at 23:37 -0400, Jeff King wrote:
Show 6 quoted lines
>   3. Return an object with the symlink relative to the original
>      filename (so "../external" in this case). This is kind of weird,
>      though, because we're not just returning a string from the name
>      resolution. It's an actual object.  So we'd be generating a fake
>      object that doesn't actually exist in the object db and
>      returning that. Feeding that sha1 to another program would fail.
Show 5 quoted lines
> I can't say that I'm excited about any of them. Perhaps you or somebody
> else can think of a more clever solution.
> 
> Note that the complication with (3) does come from my trying to push
> this down into the name-resolution code.

All else being equal, I would prefer the more general solution. But here, the generality comes with a price that seems somewhat high.

When I think about the commands that might use this, cat-file and ls-tree are at the top of the list (although as noted, I am only likely to use cat-file, and it's not clear what ls-tree should do in the event of an out-of-repo link).

I could imagine someone caring about grep and diff. Someone who cares about grep would likely want it to be willing to go out-of-worktree (as opposed to silently missing things). I think we all agree that having git go out-of-worktree is a mistake, so I'm not sure this use-case is one that is supportable.

The weirdest case is log. If I say git log HEAD^{resolve} -- foo/bar/baz, does it mean "commits that have touched what is now pointed to by foo/bar/baz"? Or does it mean "commits that have touched a thing that was at that time pointed to by foo/bar/baz"? [1] The second one is more useful, since it could not otherwise be achieved. But I think this would require additional code in log on top of whatever additional code is in sha1_name. In other words, we would not get it for free just by adjusting sha1_name.

Are there other relevant commands that I'm missing?  

If not, I think we should reconsider the original thought of just supporting cat-file. The nice thing about just supporting cat-file is that for out-of-repo links we can add a special form to the output, that does not contain a sha (since there is no corresponding sha in the repo). In other words, something like your solution 3, quoted above.

[1] See page 11 of http://inform7.com/learn/documents/WhitePaper.pdf ("Has the president ever been ill?") for a similar case.

Previous: Junio C HamanoNext: Junio C Hamano
Message 32 of 43 in “RFC: git cat-file --follow-symlinks?”
  1. David TurnerApr 29, 2015
  2. Jonathan NiederApr 29, 2015
  3. David TurnerApr 29, 2015
  4. Junio C HamanoApr 29, 2015
  5. David TurnerApr 29, 2015
  6. Jeff KingApr 29, 2015
  7. Jonathan NiederApr 29, 2015
  8. Jeff KingApr 29, 2015
  9. David TurnerApr 29, 2015
  10. Jeff KingApr 29, 2015
  11. Jeff KingApr 30, 2015
  12. David TurnerApr 30, 2015
  13. Jeff KingApr 30, 2015
  14. Junio C HamanoApr 30, 2015
  15. Jeff KingApr 30, 2015
  16. David TurnerApr 30, 2015
  17. Jeff KingApr 30, 2015
  18. Junio C HamanoApr 30, 2015
  19. Michael HaggertyApr 30, 2015
  20. David TurnerApr 30, 2015
  21. Junio C HamanoApr 30, 2015
  22. David TurnerApr 30, 2015
  23. Jeff KingApr 30, 2015
  24. David TurnerApr 30, 2015
  25. Jeff KingApr 30, 2015
  26. David TurnerApr 30, 2015
  27. Jeff KingApr 30, 2015
  28. David TurnerApr 30, 2015
  29. Andreas SchwabApr 30, 2015
  30. Jeff KingApr 30, 2015
  31. Junio C HamanoApr 30, 2015
  32. David TurnerApr 30, 2015
  33. Junio C HamanoApr 30, 2015
  34. Jeff KingApr 30, 2015
  35. Junio C HamanoApr 30, 2015
  36. David TurnerMay 1, 2015
  37. Jeff KingMay 1, 2015
  38. David TurnerMay 1, 2015
  39. Jeff KingMay 1, 2015
  40. David TurnerMay 1, 2015
  41. Junio C HamanoApr 29, 2015
  42. David TurnerApr 29, 2015
  43. Michael HaggertyApr 30, 2015

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.