Skip to content

Commit 06174db

Browse files
fix: open repository with - in domain
closes #62
1 parent f2ccb2d commit 06174db

4 files changed

Lines changed: 98 additions & 41 deletions

File tree

CHANGELOG.md

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,13 @@ All notable changes to this project will be documented in this file.
55
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
66
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
77

8+
## [0.3.1] - 2021-04-17
9+
10+
### Changed
11+
12+
- update the code to get the remote parts
13+
- remove the quircky regex
14+
815
## [0.3.0] - 2021-01-30
916

1017
### Added

Cargo.lock

Lines changed: 47 additions & 3 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Cargo.toml

Lines changed: 18 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1,28 +1,29 @@
11
[package]
2-
name = "gitweb"
3-
version = "0.3.0"
42
authors = ["Yoann Fleury <yoann.fleury@yahoo.com>"]
5-
edition = "2018"
3+
categories = ["command-line-utilities"]
64
description = "Open the current remote repository in your browser"
7-
repository = "https://github.com/yoannfleurydev/gitweb"
5+
edition = "2018"
6+
exclude = [
7+
"docs/",
8+
".editorconfig",
9+
".github/",
10+
"*.md",
11+
]
812
homepage = "https://github.com/yoannfleurydev/gitweb"
9-
readme = "README.md"
1013
keywords = ["git", "browser"]
11-
categories = ["command-line-utilities"]
1214
license = "Apache-2.0"
13-
exclude = [
14-
"docs/",
15-
".editorconfig",
16-
".github/",
17-
"*.md"
18-
]
15+
name = "gitweb"
16+
readme = "README.md"
17+
repository = "https://github.com/yoannfleurydev/gitweb"
18+
version = "0.3.1"
1919

2020
[dependencies]
21-
regex = "1"
22-
structopt = "0.3"
23-
open = "1.6"
21+
anyhow = "1.0"
22+
flexi_logger = "0.17"
23+
git-url-parse = "0.3"
2424
git2 = "0.13"
2525
log = "0.4"
26-
flexi_logger = "0.17"
27-
anyhow = "1.0"
26+
open = "1.6"
27+
regex = "1"
28+
structopt = "0.3"
2829
thiserror = "1.0"

src/lib.rs

Lines changed: 26 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
use regex::Regex;
1+
use git_url_parse::GitUrl;
22
use thiserror::Error;
33

44
use crate::options::Opt;
@@ -87,19 +87,19 @@ struct MergeRequestParts {
8787
const DEFAULT_REMOTE_ORIGIN: &str = "origin";
8888

8989
fn get_remote_parts(url: &str) -> anyhow::Result<RemoteParts> {
90-
let re: Regex = Regex::new(r"((\w+://)|(git@))(.+@)*(?P<domain>[\w\d.]+)(:[\d]+)?/*(:?)(?P<repository>[^.]*)(\.git)?(/)?$").unwrap();
90+
let giturl = GitUrl::parse(url).map_err(|_| Issue::UnableToGetRemoteParts)?;
9191

92-
let caps = re
93-
.captures(url)
94-
.ok_or_else(|| ())
95-
.map_err(|_| Issue::UnableToGetRemoteParts)?;
96-
97-
let domain = caps
98-
.name("domain")
92+
let domain = giturl
93+
.host
9994
.map_or(GitProvider::GitHub.hostname(), |m| m.as_str().to_string());
100-
let repository = caps
101-
.name("repository")
102-
.map_or("".to_string(), |m| m.as_str().to_string());
95+
96+
let repository = giturl
97+
.path
98+
.replace(".git", "") // don't want the .git part
99+
.split("/")
100+
.filter(|s| !s.is_empty())
101+
.collect::<Vec<&str>>()
102+
.join("/");
103103

104104
Ok(RemoteParts { domain, repository })
105105
}
@@ -122,7 +122,7 @@ fn get_merge_request_parts(domain: &str) -> anyhow::Result<MergeRequestParts, Is
122122
path: "pulls".to_string(),
123123
tail: "".to_string(),
124124
}),
125-
_ => Err(Issue::UnknownProvider)
125+
_ => Err(Issue::UnknownProvider),
126126
}
127127
}
128128

@@ -280,6 +280,15 @@ mod tests {
280280
assert_eq!(repository, "path/to/repo");
281281
}
282282

283+
#[test]
284+
fn test_with_http_dash_and_port_git_url_parts() {
285+
let RemoteParts { domain, repository } =
286+
get_remote_parts("http://host-dash.xz:80/path/to/repo.git/").unwrap();
287+
288+
assert_eq!(domain, "host-dash.xz");
289+
assert_eq!(repository, "path/to/repo");
290+
}
291+
283292
#[test]
284293
fn test_with_http_git_url_parts() {
285294
let RemoteParts { domain, repository } =
@@ -291,35 +300,31 @@ mod tests {
291300

292301
#[test]
293302
fn test_get_merge_request_parts_with_github() {
294-
let MergeRequestParts { path, tail } =
295-
get_merge_request_parts(GITHUB_HOSTNAME).unwrap();
303+
let MergeRequestParts { path, tail } = get_merge_request_parts(GITHUB_HOSTNAME).unwrap();
296304

297305
assert_eq!(path, "pulls");
298306
assert_eq!(tail, "");
299307
}
300308

301309
#[test]
302310
fn test_get_merge_request_parts_with_gitlab() {
303-
let MergeRequestParts { path, tail } =
304-
get_merge_request_parts(GITLAB_HOSTNAME).unwrap();
311+
let MergeRequestParts { path, tail } = get_merge_request_parts(GITLAB_HOSTNAME).unwrap();
305312

306313
assert_eq!(path, "-/merge_requests");
307314
assert_eq!(tail, "");
308315
}
309316

310317
#[test]
311318
fn test_get_merge_request_parts_with_bitbucket() {
312-
let MergeRequestParts { path, tail } =
313-
get_merge_request_parts(BITBUCKET_HOSTNAME).unwrap();
319+
let MergeRequestParts { path, tail } = get_merge_request_parts(BITBUCKET_HOSTNAME).unwrap();
314320

315321
assert_eq!(path, "pull-requests");
316322
assert_eq!(tail, "");
317323
}
318324

319325
#[test]
320326
fn test_get_merge_request_parts_with_gitea() {
321-
let MergeRequestParts { path, tail } =
322-
get_merge_request_parts(GITEA_HOSTNAME).unwrap();
327+
let MergeRequestParts { path, tail } = get_merge_request_parts(GITEA_HOSTNAME).unwrap();
323328

324329
assert_eq!(path, "pulls");
325330
assert_eq!(tail, "");

0 commit comments

Comments
 (0)