Compare commits

..

1 Commits

Author SHA1 Message Date
a342824b8d Update changelog
All checks were successful
continuous-integration/drone/push Build is passing
2023-01-13 12:20:56 +01:00
15 changed files with 622 additions and 1495 deletions

View File

@ -5,145 +5,14 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
## [Unreleased]
## [0.35.0] 2023-05-04
* Updated [`h2`](https://github.com/hyperium/h2) from 0.3.16 to 0.3.17, fixes [SEC#11] ([#599])
* Updated [`git2`](https://github.com/rust-lang/git2-rs) from 0.16.1 to 0.17.0 ([#602])
* Updated [`git2`](https://github.com/rust-lang/git2-rs) from 0.17.0 to 0.17.1 ([#603])
* Updated [`tracing-subscriber`](https://github.com/tokio-rs/tracing) from 0.3.16 to 0.3.17 ([#604])
* Updated [`tokio`](https://github.com/tokio-rs/tokio) from 1.27.0 to 1.28.0 ([#605])
* Updated [`tracing`](https://github.com/tokio-rs/tracing) from 0.1.37 to 0.1.38 ([#607])
* Updated [`vergen`](https://github.com/rustyhorde/vergen) from 8.1.1 to 8.1.3 ([#608])
* Downgrade yanked [`tracing`](https://github.com/tokio-rs/tracing) 0.1.38 to 0.1.37 ([#611])
* Updated [`reqwest`](https://github.com/seanmonstar/reqwest) from 0.11.16 to 0.11.17 ([#609])
* Updated [`anyhow`](https://github.com/dtolnay/anyhow) from 1.0.70 to 1.0.71 ([#610])
[#599]: https://github.com/vbrandl/hoc/pull/599
[#602]: https://github.com/vbrandl/hoc/pull/602
[#603]: https://github.com/vbrandl/hoc/pull/603
[#604]: https://github.com/vbrandl/hoc/pull/604
[#605]: https://github.com/vbrandl/hoc/pull/605
[#607]: https://github.com/vbrandl/hoc/pull/607
[#608]: https://github.com/vbrandl/hoc/pull/608
[#611]: https://github.com/vbrandl/hoc/pull/611
[#609]: https://github.com/vbrandl/hoc/pull/609
[#610]: https://github.com/vbrandl/hoc/pull/610
[SEC#11]: https://github.com/vbrandl/hoc/security/dependabot/11
## [0.34.0] 2023-04-13
* Updated [`tracing-actix-web`](https://github.com/LukeMathWalker/tracing-actix-web) from 0.7.2 to 0.7.3 ([#578])
* Updated [`serde`](https://github.com/serde-rs/serde) from 1.0.156 to 1.0.158 ([#580])
* Updated [`mime`](https://github.com/hyperium/mime) from 0.3.16 to 0.3.17 ([#582])
* Updated [`dotenvy`](https://github.com/allan2/dotenvy) from 0.15.6 to 0.15.7 ([#583])
* Updated [`reqwest`](https://github.com/seanmonstar/reqwest) from 0.11.14 to 0.11.16 ([#586])
* Updated [`tokio`](https://github.com/tokio-rs/tokio) from 1.26.0 to 1.27.0 ([#588])
* Updated [`tempfile`](https://github.com/Stebalien/tempfile) from 3.4.0 to 3.5.0 ([#590])
* Updated [`tracing-bunyan-formatter`](https://github.com/LukeMathWalker/tracing-bunyan-formatter) from 0.3.6 to 0.3.7 ([#593])
* Updated [`serde`](https://github.com/serde-rs/serde) from 1.0.158 to 1.0.160 ([#594])
* Updated [`serde_json`](https://github.com/serde-rs/json) from 1.0.94 to 1.0.96 ([#595])
* Updated [`openssl`](https://github.com/sfackler/rust-openssl) from 0.10.40 to 0.10.50, fixes [SEC#6], [SEC#7], and [SEC#8] ([#596])
[#578]: https://github.com/vbrandl/hoc/pull/578
[#580]: https://github.com/vbrandl/hoc/pull/580
[#582]: https://github.com/vbrandl/hoc/pull/582
[#583]: https://github.com/vbrandl/hoc/pull/583
[#586]: https://github.com/vbrandl/hoc/pull/586
[#588]: https://github.com/vbrandl/hoc/pull/588
[#590]: https://github.com/vbrandl/hoc/pull/590
[#593]: https://github.com/vbrandl/hoc/pull/593
[#594]: https://github.com/vbrandl/hoc/pull/594
[#595]: https://github.com/vbrandl/hoc/pull/595
[#596]: https://github.com/vbrandl/hoc/pull/596
[SEC#6]: https://github.com/vbrandl/hoc/security/dependabot/6
[SEC#7]: https://github.com/vbrandl/hoc/security/dependabot/7
[SEC#8]: https://github.com/vbrandl/hoc/security/dependabot/8
## [0.33.0] 2023-03-16
* Updated [`futures`](https://github.com/rust-lang/futures-rs) from 0.3.26 to 0.3.27 ([#575])
* Updated [`serde`](https://github.com/serde-rs/serde) from 1.0.152 to 1.0.156 ([#576])
* Use edition 2021 ([#577])
[#575]: https://github.com/vbrandl/hoc/pull/575
[#576]: https://github.com/vbrandl/hoc/pull/576
[#577]: https://github.com/vbrandl/hoc/pull/577
## [0.32.0] 2023-03-06
* Updated [`actix-web`](https://github.com/actix/actix-web) from 4.3.0 to 4.3.1 ([#566])
* Updated [`tempfile`](https://github.com/Stebalien/tempfile) from 3.3.0 to 3.4.0 ([#567])
* Updated [`awc`](https://github.com/actix/actix-web) from 3.1.0 to 3.1.1 ([#568])
* Updated [`tokio`](https://github.com/tokio-rs/tokio) from 1.25.0 to 1.26.0 ([#569])
* Updated [`serde_json`](https://github.com/serde-rs/json) from 1.0.93 to 1.0.94 ([#570])
[#566]: https://github.com/vbrandl/hoc/pull/566
[#567]: https://github.com/vbrandl/hoc/pull/567
[#568]: https://github.com/vbrandl/hoc/pull/568
[#569]: https://github.com/vbrandl/hoc/pull/569
[#570]: https://github.com/vbrandl/hoc/pull/570
## [0.31.0] 2023-02-13
### Dependency Updates
* Updated [`tokio`](https://github.com/tokio-rs/tokio) from 1.24.1 to 1.24.2 ([#547])
* Updated [`badgers`](https://github.com/vbrandl/badgers) from 1.1.0 to 1.2.0 ([#548])
* Updated [`reqwest`](https://github.com/seanmonstar/reqwest) from 0.11.13 to 0.11.14 ([#549])
* Updated [`bumpalo`](https://github.com/fitzgen/bumpalo) from 3.10.0 to 3.12.0 ([#550])
* Updated [`libgit2-sys`](https://github.com/rust-lang/git2-rs) from 0.14.1+1.5.0 to 0.14.2+1.5.1 ([#551])
* Updated [`git2`](https://github.com/rust-lang/git2-rs) from 0.16.0 to 0.16.1 ([#552])
* Updated [`actix-rt`](https://github.com/actix/actix-net) from 2.7.0 to 2.8.0 ([#553])
* Updated [`actix-web`](https://github.com/actix/actix-web) from 4.2.1 to 4.3.0 ([#554])
* Updated [`awc`](https://github.com/actix/actix-web) from 3.0.1 to 3.1.0 ([#555])
* Updated [`tokio`](https://github.com/tokio-rs/tokio) from 1.24.2 to 1.25.0 ([#558])
* Updated [`ructe`](https://github.com/kaj/ructe) from 0.15.0 to 0.16.1 ([#559])
* Updated [`futures`](https://github.com/rust-lang/futures-rs) from 0.3.25 to 0.3.26 ([#560])
* Updated [`bytes`](https://github.com/tokio-rs/bytes) from 1.3.0 to 1.4.0 ([#561])
* Updated [`serde_json`](https://github.com/serde-rs/json) from 1.0.91 to 1.0.92 ([#562])
* Updated [`vergen`](https://github.com/rustyhorde/vergen) from 7.5.0 to 7.5.1 ([#563])
* Updated [`serde_json`](https://github.com/serde-rs/json) from 1.0.92 to 1.0.93 ([#564])
[#547]: https://github.com/vbrandl/hoc/pull/547
[#548]: https://github.com/vbrandl/hoc/pull/548
[#550]: https://github.com/vbrandl/hoc/pull/550
[#551]: https://github.com/vbrandl/hoc/pull/551
[#552]: https://github.com/vbrandl/hoc/pull/552
[#553]: https://github.com/vbrandl/hoc/pull/553
[#554]: https://github.com/vbrandl/hoc/pull/554
[#555]: https://github.com/vbrandl/hoc/pull/555
[#558]: https://github.com/vbrandl/hoc/pull/558
[#559]: https://github.com/vbrandl/hoc/pull/559
[#560]: https://github.com/vbrandl/hoc/pull/560
[#561]: https://github.com/vbrandl/hoc/pull/561
[#562]: https://github.com/vbrandl/hoc/pull/562
[#563]: https://github.com/vbrandl/hoc/pull/563
[#564]: https://github.com/vbrandl/hoc/pull/564
## [0.30.0] 2023-01-16
### New Features
* Allow customization of the badge label ([#546])
### Dependency Updates
* Updated [`tracing-actix-web`](https://github.com/LukeMathWalker/tracing-actix-web) from 0.7.1 to 0.7.2 ([#542])
* Updated [`git2`](https://github.com/rust-lang/git2-rs) from 0.15.0 to 0.16.0 ([#544])
* Updated [`tracing-bunyan-formatter`](https://github.com/LukeMathWalker/tracing-bunyan-formatter) from 0.3.4 to 0.3.6 ([#543])
[#542]: https://github.com/vbrandl/hoc/pull/542
[#544]: https://github.com/vbrandl/hoc/pull/544
[#546]: https://github.com/vbrandl/hoc/pull/546
[#543]: https://github.com/vbrandl/hoc/pull/543
## [0.29.0] 2023-01-07

1802
Cargo.lock generated

File diff suppressed because it is too large Load Diff

View File

@ -1,9 +1,9 @@
[package]
name = "hoc"
version = "0.35.0"
version = "0.29.0"
authors = ["Valentin Brandl <vbrandl@riseup.net>"]
edition = "2021"
build = "src/build.rs"
edition = "2018"
build = "build.rs"
[lib]
path = "src/lib.rs"
@ -13,36 +13,35 @@ path = "src/main.rs"
name = "hoc"
[dependencies]
actix-rt = "2.8.0"
actix-web = "4.3.1"
badgers = "1.2.0"
bytes = "1.4.0"
actix-rt = "2.7.0"
actix-web = "4.2.1"
badgers = "1.1.0"
bytes = "1.3.0"
config = { version = "0.13.3", features = ["toml"] }
dotenvy = "0.15.7"
futures = "0.3.27"
git2 = "0.17.1"
dotenvy = "0.15.6"
futures = "0.3.25"
git2 = "0.15.0"
lazy_static = "1.4.0"
mime = "0.3"
number_prefix = "0.4.0"
openssl-probe = "0.1.5"
reqwest = "0.11.17"
serde = "1.0.158"
reqwest = "0.11.13"
serde = "1.0.152"
serde_derive = "1.0.137"
serde_json = "1.0.94"
serde_json = "1.0.91"
tracing = "0.1.37"
tracing-actix-web = "0.7.3"
tracing-bunyan-formatter = "0.3.6"
tracing-actix-web = "0.7.2"
tracing-bunyan-formatter = "0.3.4"
tracing-futures = "0.2.5"
tracing-log = "0.1.3"
tracing-subscriber = { version = "0.3.17", features = ["registry", "env-filter"] }
tracing-subscriber = { version = "0.3.16", features = ["registry", "env-filter"] }
[build-dependencies]
anyhow = "1.0.71"
ructe = { version = "0.16.1", features = ["mime03"] }
vergen = { version = "8.1.3", default-features = false, features = ["git", "gitoxide"] }
ructe = { version = "0.15.0", features = ["mime03"] }
vergen = { version = "7.5.0", default-features = false, features = ["git"] }
[dev-dependencies]
awc = "3.1.1"
ructe = "0.16.1"
tempfile = "3.5.0"
tokio = "1.28.0"
awc = "3.0.1"
ructe = "0.15.0"
tempfile = "3.3.0"
tokio = "1.24.1"

View File

@ -10,7 +10,7 @@ RUN echo 'fn main() { println!("Hello, world!"); }' >> src/main.rs
COPY ./Cargo.lock ./Cargo.lock
COPY ./Cargo.toml ./Cargo.toml
# HACK: remove build-dependencies so we have at least some caching
RUN head -n $(($(grep -n "\[build-dependencies\]" Cargo.toml | cut -f1 -d:) - 1)) Cargo.toml | sed '/src\/build.rs/d' > \
RUN head -n $(($(grep -n "\[build-dependencies\]" Cargo.toml | cut -f1 -d:) - 1)) Cargo.toml | sed '/build.rs/d' > \
Cargo.toml2 && rm Cargo.toml && mv Cargo.toml2 Cargo.toml
# build to cache dependencies
RUN cargo build --release
@ -24,6 +24,7 @@ COPY ./.git ./.git
# copy source code
COPY ./static ./static
COPY ./templates ./templates
COPY ./build.rs ./build.rs
COPY ./src ./src
# build source code
RUN cargo build --release

15
build.rs Normal file
View File

@ -0,0 +1,15 @@
extern crate ructe;
extern crate vergen;
use ructe::{Ructe, RucteError};
use vergen::{vergen, Config, ShaKind};
fn main() -> Result<(), RucteError> {
let mut config = Config::default();
*config.git_mut().sha_kind_mut() = ShaKind::Short;
vergen(config).expect("Unable to generate static repo info");
let mut ructe = Ructe::from_env()?;
let mut statics = ructe.statics()?;
statics.add_files("static")?;
ructe.compile_templates("templates")
}

View File

@ -1,12 +0,0 @@
use anyhow::Result;
use ructe::Ructe;
use vergen::EmitBuilder;
fn main() -> Result<()> {
EmitBuilder::builder().git_sha(true).emit()?;
let mut ructe = Ructe::from_env()?;
let mut statics = ructe.statics()?;
statics.add_files("static")?;
Ok(ructe.compile_templates("templates")?)
}

View File

@ -19,13 +19,13 @@ pub enum Error {
impl fmt::Display for Error {
fn fmt(&self, fmt: &mut fmt::Formatter) -> fmt::Result {
match self {
Error::Badge(s) => write!(fmt, "Badge({s})"),
Error::Client(e) => write!(fmt, "Client({e})"),
Error::Git(e) => write!(fmt, "Git({e})"),
Error::Badge(s) => write!(fmt, "Badge({})", s),
Error::Client(e) => write!(fmt, "Client({})", e),
Error::Git(e) => write!(fmt, "Git({})", e),
Error::Internal => write!(fmt, "Internal Error"),
Error::Io(e) => write!(fmt, "Io({e})"),
Error::Parse(e) => write!(fmt, "Parse({e})"),
Error::Serial(e) => write!(fmt, "Serial({e})"),
Error::Io(e) => write!(fmt, "Io({})", e),
Error::Parse(e) => write!(fmt, "Parse({})", e),
Error::Serial(e) => write!(fmt, "Serial({})", e),
Error::BranchNotFound => write!(fmt, "Repo doesn't have master branch"),
}
}
@ -43,11 +43,11 @@ impl ResponseError for Error {
let mut buf = Vec::new();
match self {
Error::BranchNotFound => {
templates::p404_no_master_html(&mut buf, VERSION_INFO, 0).unwrap();
templates::p404_no_master(&mut buf, VERSION_INFO, 0).unwrap();
HttpResponse::NotFound().content_type("text/html").body(buf)
}
_ => {
templates::p500_html(&mut buf, VERSION_INFO, 0).unwrap();
templates::p500(&mut buf, VERSION_INFO, 0).unwrap();
HttpResponse::InternalServerError()
.content_type("text/html")
.body(buf)

View File

@ -83,14 +83,8 @@ struct JsonResponse<'a> {
}
#[derive(Deserialize, Debug)]
struct BadgeQuery {
struct BranchQuery {
branch: Option<String>,
#[serde(default = "default_label")]
label: String,
}
fn default_label() -> String {
"Hits-of-Code".to_string()
}
fn pull(path: impl AsRef<Path>) -> Result<()> {
@ -101,8 +95,8 @@ fn pull(path: impl AsRef<Path>) -> Result<()> {
}
fn hoc(repo: &str, repo_dir: &str, cache_dir: &str, branch: &str) -> Result<(u64, String, u64)> {
let repo_dir = format!("{repo_dir}/{repo}");
let cache_dir = format!("{cache_dir}/{repo}.json");
let repo_dir = format!("{}/{}", repo_dir, repo);
let cache_dir = format!("{}/{}.json", cache_dir, repo);
let cache_dir = Path::new(&cache_dir);
let repo = Repository::open_bare(&repo_dir)?;
// TODO: do better...
@ -132,8 +126,8 @@ fn hoc(repo: &str, repo_dir: &str, cache_dir: &str, branch: &str) -> Result<(u64
}
CacheState::Old { head, .. } => {
info!("Updating cache");
arg.push(format!("{head}..{branch}"));
arg_commit_count.push(format!("{head}..{branch}"));
arg.push(format!("{}..{}", head, branch));
arg_commit_count.push(format!("{}..{}", head, branch));
}
CacheState::No | CacheState::NoneForBranch(..) => {
info!("Creating cache");
@ -214,8 +208,8 @@ where
data.1.to_lowercase()
);
info!("Deleting cache and repository");
let cache_dir = format!("{}/{repo}.json", &state.cache());
let repo_dir = format!("{}/{repo}", &state.repos());
let cache_dir = format!("{}/{}.json", &state.cache(), repo);
let repo_dir = format!("{}/{}", &state.repos(), repo);
std::fs::remove_file(cache_dir).or_else(|e| {
if e.kind() == io::ErrorKind::NotFound {
Ok(())
@ -262,10 +256,10 @@ where
);
let future = async {
let repo = format!("{}/{}", data.0.to_lowercase(), data.1.to_lowercase());
let service_path = format!("{}/{repo}", T::url_path());
let service_url = format!("{}/{repo}", T::domain());
let path = format!("{}/{service_url}", state.repos());
let url = format!("https://{service_url}");
let service_path = format!("{}/{}", T::url_path(), repo);
let service_url = format!("{}/{}", T::domain(), repo);
let path = format!("{}/{}", state.repos(), service_url);
let url = format!("https://{}", service_url);
let remote_exists = remote_exists(&url).await?;
let file = Path::new(&path);
if !file.exists() {
@ -284,7 +278,7 @@ where
let (hoc, head, commits) = hoc(&service_url, &state.repos(), &state.cache(), branch)?;
let hoc_pretty = match NumberPrefix::decimal(hoc as f64) {
NumberPrefix::Standalone(hoc) => hoc.to_string(),
NumberPrefix::Prefixed(prefix, hoc) => format!("{hoc:.1}{prefix}"),
NumberPrefix::Prefixed(prefix, hoc) => format!("{:.1}{}", hoc, prefix),
};
let res = HocResult::Hoc {
hoc,
@ -304,7 +298,7 @@ pub(crate) async fn json_hoc<T: Service>(
state: web::Data<State>,
repo_count: web::Data<AtomicUsize>,
data: web::Path<(String, String)>,
branch: web::Query<BadgeQuery>,
branch: web::Query<BranchQuery>,
) -> Result<HttpResponse> {
let branch = branch.branch.as_deref().unwrap_or("master");
let rc_clone = repo_count.clone();
@ -340,15 +334,14 @@ pub(crate) async fn calculate_hoc<T: Service>(
state: web::Data<State>,
repo_count: web::Data<AtomicUsize>,
data: web::Path<(String, String)>,
query: web::Query<BadgeQuery>,
branch: web::Query<BranchQuery>,
) -> HttpResponse {
let rc_clone = repo_count.clone();
let label = query.label.clone();
let mapper = move |r| match r {
HocResult::NotFound => p404(rc_clone),
HocResult::Hoc { hoc_pretty, .. } => {
let badge_opt = BadgeOptions {
subject: label,
subject: "Hits-of-Code".to_string(),
color: "#007ec6".to_string(),
status: hoc_pretty,
};
@ -359,10 +352,10 @@ pub(crate) async fn calculate_hoc<T: Service>(
Ok(no_cache_response(body))
}
};
let branch = query.branch.as_deref().unwrap_or("master");
let branch = branch.branch.as_deref().unwrap_or("master");
let error_badge = |_| {
let error_badge = Badge::new(BadgeOptions {
subject: query.label.clone(),
subject: "Hits-of-Code".to_string(),
color: "#ff0000".to_string(),
status: "error".to_string(),
})
@ -379,10 +372,9 @@ async fn overview<T: Service>(
state: web::Data<State>,
repo_count: web::Data<AtomicUsize>,
data: web::Path<(String, String)>,
query: web::Query<BadgeQuery>,
branch: web::Query<BranchQuery>,
) -> Result<HttpResponse> {
let branch = query.branch.as_deref().unwrap_or("master");
let label = query.label.clone();
let branch = branch.branch.as_deref().unwrap_or("master");
let base_url = state.settings.base_url.clone();
let rc_clone = repo_count.clone();
let mapper = move |r| match r {
@ -408,12 +400,11 @@ async fn overview<T: Service>(
url: &url,
branch,
};
templates::overview_html(
templates::overview(
&mut buf,
VERSION_INFO,
rc_clone.load(Ordering::Relaxed),
repo_info,
label,
)?;
Ok(HttpResponse::Ok().content_type("text/html").body(buf))
@ -433,7 +424,7 @@ async fn index(
repo_count: web::Data<AtomicUsize>,
) -> Result<HttpResponse> {
let mut buf = Vec::new();
templates::index_html(
templates::index(
&mut buf,
VERSION_INFO,
repo_count.load(Ordering::Relaxed),
@ -459,7 +450,7 @@ async fn generate(
.filter(|s| !s.is_empty())
.unwrap_or("master"),
};
templates::generate_html(
templates::generate(
&mut buf,
VERSION_INFO,
repo_count.load(Ordering::Relaxed),
@ -472,7 +463,7 @@ async fn generate(
fn p404(repo_count: web::Data<AtomicUsize>) -> Result<HttpResponse> {
let mut buf = Vec::new();
templates::p404_html(&mut buf, VERSION_INFO, repo_count.load(Ordering::Relaxed))?;
templates::p404(&mut buf, VERSION_INFO, repo_count.load(Ordering::Relaxed))?;
Ok(HttpResponse::NotFound().content_type("text/html").body(buf))
}

View File

@ -4,7 +4,7 @@ pub struct VersionInfo<'a> {
}
pub(crate) const VERSION_INFO: VersionInfo = VersionInfo {
commit: env!("VERGEN_GIT_SHA"),
commit: env!("VERGEN_GIT_SHA_SHORT"),
version: env!("CARGO_PKG_VERSION"),
};

View File

@ -1,9 +1,9 @@
@use super::base_html;
@use super::base;
@use crate::{statics::VersionInfo, template::RepoGeneratorInfo};
@(version_info: VersionInfo, repo_count: usize, base_url: &str, repo_info: &RepoGeneratorInfo)
@:base_html("Hits-of-Code Badges", "Badge Generator", {
@:base("Hits-of-Code Badges", "Badge Generator", {
<p>
Here is the markdown for the badge for <a href="https://@repo_info.service.url()/@repo_info.user/@repo_info.repo">@repo_info.user/@repo_info.repo</a>

View File

@ -1,9 +1,9 @@
@use super::base_html;
@use super::base;
@use crate::statics::VersionInfo;
@(version_info: VersionInfo, repo_count: usize, base_url: &str)
@:base_html("Hits-of-Code Badges", "Hits-of-Code Badges", {
@:base("Hits-of-Code Badges", "Hits-of-Code Badges", {
<p>
This API offers badges for the Hits-of-Code metric for your repositories. This metric was proposed by
@ -51,10 +51,6 @@ in your repository or you want a badge for another branch of your repository, ju
<code>?branch=&lt;branch-name&gt;</code> to the URL.
</p>
<p>
The badge label can be customized using the <code>label=&lt;some-label&gt;</code> query parameter. It defaults to <code>Hits-of-Code</code>.
</p>
<p>
You can also request the HoC as JSON by appending <code>/json</code> to the request path. This will return a JSON object
with three fields: <code>count</code> (the HoC value), <code>commits</code> (the number of commits) and

View File

@ -1,10 +1,10 @@
@use super::base_html;
@use super::base;
@use crate::statics::VersionInfo;
@use crate::template::RepoInfo;
@(version_info: VersionInfo, repo_count: usize, repo_info: RepoInfo, label: String)
@(version_info: VersionInfo, repo_count: usize, repo_info: RepoInfo)
@:base_html("Hits-of-Code Badges", "Overview", {
@:base("Hits-of-Code Badges", "Overview", {
<p>
The project <a href="@repo_info.url">@repo_info.url</a> has
@ -19,7 +19,7 @@ To include the badge in your readme, use the following markdown:
</p>
<pre>
[![@label](@repo_info.base_url/@repo_info.path?branch=@repo_info.branch&label=@label)](@repo_info.base_url/@repo_info.path/view?branch=@repo_info.branch&label=@label)
[![Hits-of-Code](@repo_info.base_url/@repo_info.path?branch=@repo_info.branch)](@repo_info.base_url/@repo_info.path/view?branch=@repo_info.branch)
</pre>

View File

@ -1,9 +1,9 @@
@use super::base_html;
@use super::base;
@use crate::statics::VersionInfo;
@(version_info: VersionInfo, repo_count: usize)
@:base_html("Page not Found - Hits-of-Code Badges", "404 - Page not Found", {
@:base("Page not Found - Hits-of-Code Badges", "404 - Page not Found", {
<p>
<big>Sorry</big>. I couldn't find the page you are looking for. Please go <a href="/">back to the homepage</a>.
</p>

View File

@ -1,9 +1,9 @@
@use super::base_html;
@use super::base;
@use crate::statics::VersionInfo;
@(version_info: VersionInfo, repo_count: usize)
@:base_html("Branch not Found - Hits-of-Code Badges", "404 - Branch not Found", {
@:base("Branch not Found - Hits-of-Code Badges", "404 - Branch not Found", {
<p>
<big>Sorry</big>. I couldn't find the requested branch of your repositroy. Currently this service assumes the
extistence of a branch named <code>master</code>. If you'd like to request a badge for another branch, you can do so by

View File

@ -1,9 +1,9 @@
@use super::base_html;
@use super::base;
@use crate::statics::VersionInfo;
@(version_info: VersionInfo, repo_count: usize)
@:base_html("Internal Server Error - Hits-of-Code Badges", "500 - Internal Server Error", {
@:base("Internal Server Error - Hits-of-Code Badges", "500 - Internal Server Error", {
<p>
<big>Oops</big>. Looks like a made a mistake. Please go <a href="/">back to the homepage</a> and try again.
</p>