Skip to content

Commit 92bbe33

Browse files
committed
feat!: remove gix remote --url in favor of determining the intention similar to git fetch (#450)
1 parent 8c7351c commit 92bbe33

File tree

4 files changed

+22
-35
lines changed

4 files changed

+22
-35
lines changed

Diff for: gitoxide-core/src/repository/fetch.rs

+1-3
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,6 @@ pub struct Options {
66
pub format: OutputFormat,
77
pub dry_run: bool,
88
pub remote: Option<String>,
9-
pub url: Option<git::Url>,
109
/// If non-empty, override all ref-specs otherwise configured in the remote
1110
pub ref_specs: Vec<BString>,
1211
}
@@ -27,11 +26,10 @@ pub(crate) mod function {
2726
format,
2827
dry_run,
2928
remote,
30-
url,
3129
ref_specs,
3230
}: Options,
3331
) -> anyhow::Result<()> {
34-
let _remote = crate::repository::remote::by_name_or_url(&repo, remote.as_deref(), url)?;
32+
let _remote = crate::repository::remote::by_name_or_url(&repo, remote.as_deref())?;
3533
todo!()
3634
}
3735
}

Diff for: gitoxide-core/src/repository/remote.rs

+17-16
Original file line numberDiff line numberDiff line change
@@ -21,10 +21,9 @@ mod refs_impl {
2121
Tracking { ref_specs: Vec<BString> },
2222
}
2323

24-
pub struct Context {
24+
pub struct Options {
2525
pub format: OutputFormat,
26-
pub name: Option<String>,
27-
pub url: Option<git_repository::Url>,
26+
pub name_or_url: Option<String>,
2827
pub handshake_info: bool,
2928
}
3029

@@ -38,15 +37,14 @@ mod refs_impl {
3837
mut progress: impl git::Progress,
3938
mut out: impl std::io::Write,
4039
err: impl std::io::Write,
41-
refs::Context {
40+
refs::Options {
4241
format,
43-
name,
44-
url,
42+
name_or_url,
4543
handshake_info,
46-
}: refs::Context,
44+
}: refs::Options,
4745
) -> anyhow::Result<()> {
4846
use anyhow::Context;
49-
let mut remote = by_name_or_url(&repo, name.as_deref(), url)?;
47+
let mut remote = by_name_or_url(&repo, name_or_url.as_deref())?;
5048
if let refs::Kind::Tracking { ref_specs, .. } = &kind {
5149
if format != OutputFormat::Human {
5250
bail!("JSON output isn't yet supported for listing ref-mappings.");
@@ -255,17 +253,20 @@ use git_repository as git;
255253

256254
pub(crate) fn by_name_or_url<'repo>(
257255
repo: &'repo git::Repository,
258-
name: Option<&str>,
259-
url: Option<git::Url>,
256+
name_or_url: Option<&str>,
260257
) -> anyhow::Result<git::Remote<'repo>> {
261-
use anyhow::{bail, Context};
262-
Ok(match (name, url) {
263-
(Some(name), None) => repo.find_remote(&name)?,
264-
(None, None) => repo
258+
use anyhow::Context;
259+
Ok(match name_or_url {
260+
Some(name) => {
261+
if name.contains('/') {
262+
repo.remote_at(git::url::parse(name.into())?)?
263+
} else {
264+
repo.find_remote(&name)?
265+
}
266+
}
267+
None => repo
265268
.head()?
266269
.into_remote(git::remote::Direction::Fetch)
267270
.context("Cannot find a remote for unborn branch")??,
268-
(None, Some(url)) => repo.remote_at(url)?,
269-
(Some(_), Some(_)) => bail!("Must not set both the remote name and the url - they are mutually exclusive"),
270271
})
271272
}

Diff for: src/plumbing/main.rs

+2-6
Original file line numberDiff line numberDiff line change
@@ -118,14 +118,12 @@ pub fn main() -> Result<()> {
118118
dry_run,
119119
remote,
120120
ref_spec,
121-
url,
122121
}) => {
123122
let opts = core::repository::fetch::Options {
124123
format,
125124
dry_run,
126125
remote,
127126
ref_specs: ref_spec,
128-
url,
129127
};
130128
prepare_and_run(
131129
"fetch",
@@ -150,7 +148,6 @@ pub fn main() -> Result<()> {
150148
#[cfg_attr(feature = "small", allow(unused_variables))]
151149
Subcommands::Remote(remote::Platform {
152150
name,
153-
url,
154151
cmd,
155152
handshake_info,
156153
}) => match cmd {
@@ -162,9 +159,8 @@ pub fn main() -> Result<()> {
162159
core::repository::remote::refs::Kind::Tracking { ref_specs: ref_spec }
163160
}
164161
};
165-
let context = core::repository::remote::refs::Context {
166-
name,
167-
url,
162+
let context = core::repository::remote::refs::Options {
163+
name_or_url: name,
168164
format,
169165
handshake_info,
170166
};

Diff for: src/plumbing/options/mod.rs

+2-10
Original file line numberDiff line numberDiff line change
@@ -123,16 +123,12 @@ pub mod fetch {
123123
#[clap(long, short = 'n')]
124124
pub dry_run: bool,
125125

126-
/// The name of the remote to connect to.
126+
/// The name of the remote to connect to, or the url of the remote to connect to directly.
127127
///
128128
/// If unset, the current branch will determine the remote.
129129
#[clap(long, short = 'r')]
130130
pub remote: Option<String>,
131131

132-
/// Connect directly to the given URL, forgoing any configuration from the repository.
133-
#[clap(long, short = 'u', conflicts_with("remote"), parse(try_from_os_str = std::convert::TryFrom::try_from))]
134-
pub url: Option<git::Url>,
135-
136132
/// Override the built-in and configured ref-specs with one or more of the given ones.
137133
#[clap(parse(try_from_os_str = git::env::os_str_to_bstring))]
138134
pub ref_spec: Vec<git_repository::bstr::BString>,
@@ -144,16 +140,12 @@ pub mod remote {
144140

145141
#[derive(Debug, clap::Parser)]
146142
pub struct Platform {
147-
/// The name of the remote to connect to.
143+
/// The name of the remote to connect to, or the URL of the remote to connect to directly.
148144
///
149145
/// If unset, the current branch will determine the remote.
150146
#[clap(long, short = 'n')]
151147
pub name: Option<String>,
152148

153-
/// Connect directly to the given URL, forgoing any configuration from the repository.
154-
#[clap(long, short = 'u', conflicts_with("name"), parse(try_from_os_str = std::convert::TryFrom::try_from))]
155-
pub url: Option<git::Url>,
156-
157149
/// Output additional typically information provided by the server as part of the connection handshake.
158150
#[clap(long)]
159151
pub handshake_info: bool,

0 commit comments

Comments
 (0)