Allow READMEs with names other than README.md
Diff
src/git.rs | 29 ++++++++++++++++++++++-------
src/methods/repo.rs | 2 +-
templates/repo/about.html | 6 +++++-
3 files changed, 25 insertions(+), 12 deletions(-)
@@ -16,7 +16,7 @@
#[derive(Clone)]
pub struct Git {
commits: Cache<Oid, Arc<Commit>>,
readme_cache: Cache<PathBuf, Arc<str>>,
readme_cache: Cache<PathBuf, Option<Arc<str>>>,
refs: Cache<PathBuf, Arc<Refs>>,
repository_metadata: Arc<ArcSwapOption<RepositoryMetadataList>>,
}
@@ -96,7 +96,9 @@
.await
}
pub async fn get_readme(&self, repo: PathBuf) -> Arc<str> {
pub async fn get_readme(&self, repo: PathBuf) -> Option<Arc<str>> {
const README_FILES: &[&str] = &["README.md", "README", "README.txt"];
self.readme_cache
.get_with(repo.clone(), async {
tokio::task::spawn_blocking(move || {
@@ -104,15 +106,22 @@
let head = repo.head().unwrap();
let commit = head.peel_to_commit().unwrap();
let tree = commit.tree().unwrap();
for file in README_FILES {
let object = if let Some(o) = tree.get_name(file) {
o
} else {
continue;
};
let object = object.to_object(&repo)
.unwrap();
let blob = object.into_blob().unwrap();
return Some(Arc::from(String::from_utf8(blob.content().to_vec()).unwrap()));
}
let object = tree
.get_name("README.md")
.unwrap()
.to_object(&repo)
.unwrap();
let blob = object.into_blob().unwrap();
Arc::from(String::from_utf8(blob.content().to_vec()).unwrap())
None
})
.await
.unwrap()
@@ -161,7 +161,7 @@
#[template(path = "repo/about.html")]
pub struct View {
repo: Repository,
readme: Arc<str>,
readme: Option<Arc<str>>,
}
let readme = git.get_readme(repository_path).await;
@@ -1,7 +1,11 @@
{% extends "repo/base.html" %}
{% block about_nav_class %}active{% endblock %}
{% block content %}
<pre>{{ readme }}</pre>
{% if let Some(readme) = readme %}
<pre>{{ readme }}</pre>
{% else %}
No README in repository HEAD.
{% endif %}
{% endblock %}