Skip to content

Commit

Permalink
Get all directory entries at the given SHA
Browse files Browse the repository at this point in the history
This commit adds Gollum-formatted entries that represent the directory
tree of the repository at the given SHA. For example, using the Gollum
`lotr.git` test wiki, we get the following array back:

    @repo.lstree_all_directories(sha)
    =>
    [{:sha=>"6e48abfc56565574859e081ee58eae655d48cf71",
      :mode=>16384,
      :type=>"tree",
      :name=>"Gondor",
      :path=>"Gondor"},
     {:sha=>"760982a3b84987919b99748d87c7890bb54afd07",
      :mode=>16384,
      :type=>"tree",
      :name=>"Mordor",
      :path=>"Mordor"},
     {:sha=>"a13e77aca82edd8e6bd4096e351627859f74ffec",
      :mode=>16384,
      :type=>"tree",
      :name=>"Rivendell",
      :path=>"Rivendell"}]

In subsequent commits to `gollum` and `gollum-lib`, using this method
can help us make Gollum's "Overview" page more performant for large
wikis.

Currently, Gollum has no mechanism for getting the directory tree of
the git repository, meaning we have to reverse-engineer the directory
tree by using the paths of files checked into the repository.
  • Loading branch information
benjaminwil committed May 6, 2024
1 parent 3763285 commit ee4b045
Showing 1 changed file with 6 additions and 0 deletions.
6 changes: 6 additions & 0 deletions lib/rugged_adapter/git_layer_rugged.rb
Original file line number Diff line number Diff line change
Expand Up @@ -659,6 +659,12 @@ def lstree(sha, options = {})
results
end

def lstree_all_directories(sha)
@repo.lookup(sha).tree.each_tree.map { |rugged_tree_entry|
::Gollum::Git::Tree.tree_entry_from_rugged_hash rugged_tree_entry
}
end

def path
@repo.path
end
Expand Down

0 comments on commit ee4b045

Please sign in to comment.