Merge pull request #477 from vbrandl/feature/branch-in-generator

Allow providing a branch name in generator
This commit is contained in:
Valentin Brandl 2022-08-22 11:57:05 +02:00 committed by GitHub
commit 5543301140
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
5 changed files with 31 additions and 12 deletions

View File

@ -24,7 +24,7 @@ use crate::{
error::{Error, Result},
service::{Bitbucket, FormService, GitHub, Gitlab, Service, Sourcehut},
statics::{CLIENT, CSS, FAVICON, VERSION_INFO},
template::RepoInfo,
template::{RepoGeneratorInfo, RepoInfo},
};
use actix_web::{
dev::Server,
@ -55,6 +55,7 @@ struct GeneratorForm<'a> {
service: FormService,
user: Cow<'a, str>,
repo: Cow<'a, str>,
branch: Option<Cow<'a, str>>,
}
#[derive(Debug)]
@ -437,16 +438,23 @@ async fn generate(
state: web::Data<State>,
repo_count: web::Data<AtomicUsize>,
) -> Result<HttpResponse> {
let repo = format!("{}/{}", params.user, params.repo);
let mut buf = Vec::new();
let repo_info = RepoGeneratorInfo {
service: params.service,
user: &params.user,
repo: &params.repo,
branch: params
.branch
.as_deref()
.filter(|s| !s.is_empty())
.unwrap_or("master"),
};
templates::generate(
&mut buf,
VERSION_INFO,
repo_count.load(Ordering::Relaxed),
&state.settings.base_url,
params.service.url(),
params.service.service(),
&repo,
&repo_info,
)?;
Ok(HttpResponse::Ok().content_type("text/html").body(buf))

View File

@ -28,8 +28,8 @@ pub(crate) trait Service: Sized + 'static {
}
}
#[derive(Deserialize, Serialize)]
pub(crate) enum FormService {
#[derive(Deserialize, Serialize, Clone, Copy)]
pub enum FormService {
#[serde(rename = "github")]
GitHub,
#[serde(rename = "gitlab")]

View File

@ -1,3 +1,5 @@
use crate::service::FormService;
pub struct RepoInfo<'a> {
pub commit_url: &'a str,
pub commits: u64,
@ -9,3 +11,10 @@ pub struct RepoInfo<'a> {
pub url: &'a str,
pub branch: &'a str,
}
pub struct RepoGeneratorInfo<'a> {
pub service: FormService,
pub user: &'a str,
pub repo: &'a str,
pub branch: &'a str,
}

View File

@ -1,16 +1,16 @@
@use super::base;
@use crate::statics::VersionInfo;
@use crate::{statics::VersionInfo, template::RepoGeneratorInfo};
@(version_info: VersionInfo, repo_count: usize, base_url: &str, url: &str, service: &str, path: &str)
@(version_info: VersionInfo, repo_count: usize, base_url: &str, repo_info: &RepoGeneratorInfo)
@:base("Hits-of-Code Badges", "Badge Generator", {
<p>
Here is the markdown for the badge for <a href="https://@url/@path">@url/@path</a>
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>
</p>
<pre>
[![Hits-of-Code](@base_url/@service/@path)](@base_url/@service/@path/view)
[![Hits-of-Code](@base_url/@repo_info.service.service()/@repo_info.user/@repo_info.repo?branch=@repo_info.branch)](@base_url/@repo_info.service.service()/@repo_info.user/@repo_info.repo/view?branch=@repo_info.branch)
</pre>
<p>
@ -18,6 +18,6 @@ It will be rendered like this
</p>
<pre>
<a href="@base_url/@service/@path/view"><img src="@base_url/@service/@path" alt="example badge" /></a>
<a href="@base_url/@repo_info.service.service()/@repo_info.user/@repo_info.repo/view?branch=@repo_info.branch"><img src="@base_url/@repo_info.service.service()/@repo_info.user/@repo_info.repo?branch=@repo_info.branch" alt="example badge" /></a>
</pre>
}, version_info, repo_count)

View File

@ -80,6 +80,8 @@ the lines of
<input name="user" id="user" type="text" placeholder="user" />
<label>/</label>
<input name="repo" id="repo" type="text" placeholder="repository" />
<label>:</label>
<input name="branch" id="branch" type="text" placeholder="branch (defaults to `master`)" />
<button type="submit">Generate</button>
</form>