Skip to content

Commit 6fbfdb5

Browse files
weichweichorhun
andauthored
feat(args): allow GitLab groups with --gitlab-repo (#807)
* feat: allow gitlab groups * refactor(arg): improve remote value parser --------- Co-authored-by: Orhun Parmaksız <orhunparmaksiz@gmail.com>
1 parent 9831ccb commit 6fbfdb5

File tree

5 files changed

+34
-8
lines changed

5 files changed

+34
-8
lines changed

Cargo.lock

Lines changed: 1 addition & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Cargo.toml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ log = "0.4.21"
99
secrecy = { version = "0.8.0", features = ["serde"] }
1010
lazy_static = "1.5.0"
1111
dirs = "5.0.1"
12+
url = "2.5.2"
1213

1314
[profile.dev]
1415
opt-level = 0

git-cliff-core/Cargo.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -73,7 +73,7 @@ tokio = { version = "1.39.3", features = [
7373
"macros",
7474
], optional = true }
7575
futures = { version = "0.3.30", optional = true }
76-
url = "2.5.2"
76+
url.workspace = true
7777
dyn-clone = "1.0.17"
7878
urlencoding = "2.1.3"
7979
cacache = { version = "13.0.0", features = ["mmap"], default-features = false }

git-cliff/Cargo.toml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,7 @@ indicatif = { version = "0.17.8", optional = true }
5656
env_logger = "=0.10.2"
5757
pprof = { version = "0.13", optional = true }
5858
rand = { version = "0.8.4", optional = true }
59+
url.workspace = true
5960

6061
[dependencies.git-cliff-core]
6162
version = "2.4.0" # managed by release.sh

git-cliff/src/args.rs

Lines changed: 30 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ use glob::Pattern;
2222
use regex::Regex;
2323
use secrecy::SecretString;
2424
use std::path::PathBuf;
25+
use url::Url;
2526

2627
#[derive(Debug, Clone, Copy, ValueEnum)]
2728
pub enum Strip {
@@ -353,10 +354,16 @@ impl TypedValueParser for RemoteValueParser {
353354
value: &std::ffi::OsStr,
354355
) -> Result<Self::Value, clap::Error> {
355356
let inner = clap::builder::StringValueParser::new();
356-
let value = inner.parse_ref(cmd, arg, value)?;
357-
let parts = value.split('/').rev().collect::<Vec<&str>>();
358-
if let (Some(owner), Some(repo)) = (parts.get(1), parts.first()) {
359-
Ok(RemoteValue(Remote::new(*owner, *repo)))
357+
let mut value = inner.parse_ref(cmd, arg, value)?;
358+
if let Ok(url) = Url::parse(&value) {
359+
value = url.path().trim_start_matches('/').to_string();
360+
}
361+
let parts = value.rsplit_once('/');
362+
if let Some((owner, repo)) = parts {
363+
Ok(RemoteValue(Remote::new(
364+
owner.to_string(),
365+
repo.to_string(),
366+
)))
360367
} else {
361368
let mut err = clap::Error::new(ErrorKind::ValueValidation).with_cmd(cmd);
362369
if let Some(arg) = arg {
@@ -460,9 +467,14 @@ mod tests {
460467
OsStr::new("test/repo")
461468
)?
462469
);
463-
assert!(remote_value_parser
464-
.parse_ref(&Opt::command(), None, OsStr::new("test"))
465-
.is_err());
470+
assert_eq!(
471+
RemoteValue(Remote::new("gitlab/group/test", "repo")),
472+
remote_value_parser.parse_ref(
473+
&Opt::command(),
474+
None,
475+
OsStr::new("gitlab/group/test/repo")
476+
)?
477+
);
466478
assert_eq!(
467479
RemoteValue(Remote::new("test", "testrepo")),
468480
remote_value_parser.parse_ref(
@@ -471,6 +483,17 @@ mod tests {
471483
OsStr::new("https://github.com/test/testrepo")
472484
)?
473485
);
486+
assert_eq!(
487+
RemoteValue(Remote::new("archlinux/packaging/packages", "arch-repro-status")),
488+
remote_value_parser.parse_ref(
489+
&Opt::command(),
490+
None,
491+
OsStr::new("https://gitlab.archlinux.org/archlinux/packaging/packages/arch-repro-status")
492+
)?
493+
);
494+
assert!(remote_value_parser
495+
.parse_ref(&Opt::command(), None, OsStr::new("test"))
496+
.is_err());
474497
assert!(remote_value_parser
475498
.parse_ref(&Opt::command(), None, OsStr::new(""))
476499
.is_err());

0 commit comments

Comments
 (0)