![Oracle Drags Its Feet in the JavaScript Trademark Dispute](https://cdn.sanity.io/images/cgdhsj6q/production/919c3b22c24f93884c548d60cbb338e819ff2435-1024x1024.webp?w=400&fit=max&auto=format)
Security News
Oracle Drags Its Feet in the JavaScript Trademark Dispute
Oracle seeks to dismiss fraud claims in the JavaScript trademark dispute, delaying the case and avoiding questions about its right to the name.
libdolt
is all the reusable internal workings of the
Dolt repository browser. It provides all
the mechanics for retrieving the data you need display Git trees, blobs, blame
and more, and also includes tools to render them in a web context.
libdolt
does not depend on Sinatra, or any other web context, so it can easily
be embedded in other frameworks/apps. Most notably, libdolt
is used as the
repository browser in Gitorious 3,
and as a stand-alone repository browser in Dolt.
libdolt depends on two system packages to do its job.
# 1) Install Python development files
sudo apt-get install -y python-dev libicu-dev
# 2) Install dolt. This may or may not require the use of sudo, depending on
# how you installed Ruby.
gem install libdolt
# 1) Install Python development files
sudo yum install -y python-devel libicu-devel
# 2) Install dolt. This may or may not require the use of sudo, depending on
# how you installed Ruby.
gem install dolt
libdolt
provides two main abstractions you may be interested in:
Dolt::RepositoryLookup
provides an API that will fetch various bits of
information from your git repository, and returns a hash of data. This hash
can typically be used for rendering in a template of some sort.Dolt::ControllerActions
provides a web front-end to the repository lookup.
It will use the lookup class to fetch the information it needs, and then it
will render them using Tiltout. If
you're looking to make a web-based repository browser, you can use this class
in a Sinatra, Rack or Rails application, provide you own templates etc.The Dolt::RepositoryLookup
class provides many methods that use
libgit2/Rugged in conjunction with the
classes found in lib/libdolt/git
to fetch, consolidate and prepare Git
repository data in a display-friendly way. All methods return a hash.
The repository lookup class depends on a "repository resolver". This is an
object that can take a string from the URL, such as "gitorious/mainline"
and
return a usable repository object. The repository object is expected to conform
to the Dolt::Git::Repository
interface. Typically you will want to instantiate
this object, but you can in theory provide your own implementation, so long as
you maintain the interface.
Repository resolvers are quite simple animals. Here's an example of how to make Dolt work with Gitorious' Repository model objects:
module Gitorious
module Dolt
class RepositoryResolver
# How you initialize your objects is up to you - Dolt doesn't care, it
# only ever sees the instance, not the class itself.
def initialize(scope = ::Repository)
@scope = scope
end
def resolve(repo)
repository = @scope.find_by_path(repo)
raise ActiveRecord::RecordNotFound.new if repository.nil?
Gitorious::Dolt::Repository.new(repository)
end
end
end
end
All actions return a hash that include these keys:
path
- The repository-relative pathref
- The ref or object idresolver = Gitorious::Dolt::RepositoryResolver.new
lookup = Dolt::RepositoryLookup.new(resolver)
data = lookup.tree("gitorious/mainline", "master", "")
#=> {
# :path => "",
# :ref => "master",
# :tree => #<Rugged::Tree:16209820 {oid: 89cd7e9d4564928de6b803b36c6e3d081c8d9ca1}>
# <"README.org" b40c249db94476cac7fa91a9d6491c0faf21ec21>
# <"lib" 264c348a80906538018616fa16fc35d04bdf38b0>,
# :readme => { :blob => #<Rugged::Blob:0x00000002111460>, :path => "README.org" }
# }
Note that the tree
lookup will include a readme blob if one is available, and
Dolt is able to render it.
The controller actions that ship with libdolt are web framework agnostic. They return arrays that can be passed directly to Rack, or can be picked apart for further processing. The controller actions can be configured to redirect any request for symbolic refs (e.g. a request for something on "master" will redirect to the current tip of that branch), and it provides error handling, renders blobs with syntax highlighting and more.
The controller actions have three dependencies: a router, a repository lookup instance (see above) and a renderer.
The router is expected to respond to these messages:
tree_url(repo, ref, path)
blob_url(repo, ref, path)
tree_entry_url(repo, ref, path)
blame_url(repo, ref, path)
history_url(repo, ref, path)
tree_history_url(repo, ref, path)
raw_url(repo, ref, path)
The renderer can be anything that understands this message:
renderer.render(template, data, template_options)
# e.g.
renderer.render("tree", {
:ref => "master",
:path => lib",
:tree => tree
}, { :layout => "dark_skin" })
Tiltout is well suited for the task. To just use the built-in templates in libdolt:
renderer = Tiltout.new(Dolt.template_dir, { :layout => "layout" })
renderer.helper(Dolt::View::Object)
renderer.helper(Dolt::View::Urls)
renderer.helper(Dolt::View::Blob)
renderer.helper(Dolt::View::Blame)
renderer.helper(Dolt::View::Breadcrumb)
renderer.helper(Dolt::View::Tree)
renderer.helper(Dolt::View::Commit)
renderer.helper(Dolt::View::Gravatar)
renderer.helper(Dolt::View::TabWidth)
renderer.helper(Dolt::View::BinaryBlobEmbedder)
renderer.helper(:tab_width => options[:tab_width], :maxdepth => 3)
actions = Dolt::ControllerActions.new(some_router, lookup, renderer)
response = actions.blob("gitorious/libdolt", "master", "Readme.md")
#=> [200, {
"Content-Type" => "text/html; charset=utf-8",
"X-UA-Compatible" => "IE=edge"
}, [html...]]
The controller actions also accept a last argument, which is a hash of additional data to expose to the templates. This is useful if you are using a custom layout and/or templates.
Dolt uses the GitHub::Markup
library
(through Makeup) to render certain
markup formats as HTML. Dolt does not have a hard dependency on any of the
required gems to actually render markups, so see the
GitHub::Markup
docs for information on
what and how to install support for various languages.
Various rendering techniques are implemented as modules that can be included in
you Tiltout views. Here's an excerpt from Dolt's bin/dolt
script (which runs a
standalone repository browser locally on your box):
# Attempt to syntax highlight every blob
# renderer.helper(Dolt::View::SyntaxHighlight)
# Attempt to render every blob as markup
# renderer.helper(Dolt::View::Markup)
# Render supported formats as markup, syntax highlight the rest
# (if attempting to render some format as markup crashes, it will
# fall back to syntax highlighting)
renderer.helper(Dolt::View::SmartBlobRenderer)
libdolt is free software licensed under the GNU Affero General Public License (AGPL). libdolt is developed as part of the Gitorious project.
FAQs
Unknown package
We found that libdolt demonstrated a not healthy version release cadence and project activity because the last version was released a year ago. It has 1 open source maintainer collaborating on the project.
Did you know?
Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.
Security News
Oracle seeks to dismiss fraud claims in the JavaScript trademark dispute, delaying the case and avoiding questions about its right to the name.
Security News
The Linux Foundation is warning open source developers that compliance with global sanctions is mandatory, highlighting legal risks and restrictions on contributions.
Security News
Maven Central now validates Sigstore signatures, making it easier for developers to verify the provenance of Java packages.