Back to Codeberg

fix: parsing scp-like remote url syntax #542

forgejo-contrib-forgejo-cli-pulls-542.md

latest13.1 KB
Original Source

forgejo-contrib/forgejo-cli

Watch20

Star402

Fork

You've already forked forgejo-cli

51

CodeIssues 44Pull requests 8Releases 11Packages 2WikiActivity

fix: parsing scp-like remote url syntax #542

Merged

Cyborusmerged 2 commits from piotr-ginal/forgejo-cli:ginal/fix-scp-url into main 2026-07-06 21:16:56 +02:00

Conversation 0Commits 2Files changed 1 +24 -4

piotr-ginal commented 2026-07-02 22:27:24 +02:00

Contributor

Copy link

Changes Made

When trying to use the CLI with the foolowing remote url configured (as the only remote): [email protected]:piotr-ginal/forgejo-cli.git

I got the following error:

text
$ fj --host codeberg.org repo view
Error: relative URL without a base

Location:
    src/repo.rs:136:43

The same remote (same repo etc) but with cli compiled on ade375d23c

text
$ ./target/release/fj --host codeberg.org repo view
keys file not found, creating
piotr-ginal/forgejo-cli
Fork of forgejo-contrib/forgejo-cli

The problem causing this was introduced in 1df2ad5b01 #462

git show 1df2ad5b01f3fec5786b81f51dd7751b3ad768a1 -- src/main.rs

diff
fn ssh_url_parse(s: &str) -> Result<url::Url, url::ParseError> {
- url::Url::parse(s).or_else(|_| {
+ let mut url = url::Url::parse(s)?;
+ if url.cannot_be_a_base() {
         let mut new_s = String::new();
         new_s.push_str("ssh://");

         let auth_end = s.find("@").unwrap_or(0);
         new_s.push_str(&s[..auth_end]);
         new_s.push_str(&s[auth_end..].replacen(":", "/", 1));
- url::Url::parse(&new_s)
- })
+ url = url::Url::parse(&new_s)?
+ }

The scp-like syntax (user@host:path) fails Url::parse outright with a parse error, so it never reaches the cannot_be_a_base() check.

@tpikonen Am i missing something here?

Also, ive written two simple test cases showing this bug, feel free to check out at the commit adding the test and run cargo test to see for yourself.

As these would be the only tests in this repo, just let me know and ill drop the commit from the PR

Code of Conduct

  • I agree to act in accordance with the CoC & AI Agreement.
  • This contribution was not generated by an LLM, even in part.

Changes Made When trying to use the CLI with the foolowing remote url configured (as the only remote): [email protected]:piotr-ginal/forgejo-cli.git I got the following error: $ fj --host codeberg.org repo view Error: relative URL without a base Location: src/repo.rs:136:43 The same remote (same repo etc) but with cli compiled on ade375d23c07a5c9dc1b01568ef0c9703f18a3aa $ ./target/release/fj --host codeberg.org repo view keys file not found, creating piotr-ginal/forgejo-cli Fork of forgejo-contrib/forgejo-cli The problem causing this was introduced in 1df2ad5b01f3fec5786b81f51dd7751b3ad768a1 #462 git show 1df2ad5b01f3fec5786b81f51dd7751b3ad768a1 -- src/main.rs diff fn ssh_url_parse(s: &str) -\> Result\<url::Url, url::ParseError\> { - url::Url::parse(s).or_else(|_| { + let mut url = url::Url::parse(s)?; + if url.cannot_be_a_base() { let mut new_s = String::new(); new_s.push_str("ssh://"); let auth_end = s.find("@").unwrap_or(0); new_s.push_str(&s[..auth_end]); new_s.push_str(&s[auth_end..].replacen(":", "/", 1)); - url::Url::parse(&new_s) - }) + url = url::Url::parse(&new_s)? + } The scp-like syntax (user@host:path) fails Url::parse outright with a parse error, so it never reaches the cannot_be_a_base() check. @tpikonen Am i missing something here? Also, ive written two simple test cases showing this bug, feel free to check out at the commit adding the test and run cargo test to see for yourself. As these would be the only tests in this repo, just let me know and ill drop the commit from the PR ### Code of Conduct - [x] I agree to act in accordance with the CoC & AI Agreement. - [x] This contribution was not generated by an LLM, even in part.

piotr-ginal added 1 commit 2026-07-02 22:27:25 +02:00

fix: parsing scp-like remote url syntax

All checks were successful

ci/woodpecker/pr/check-typos Pipeline was successful

Details

ci/woodpecker/pr/check Pipeline was successful

Details

ci/woodpecker/pr/check-clippy Pipeline was successful

Details

fcbd2e860f

piotr-ginal force-pushed ginal/fix-scp-url from fcbd2e860f

All checks were successful

ci/woodpecker/pr/check-typos Pipeline was successful

Details

ci/woodpecker/pr/check Pipeline was successful

Details

ci/woodpecker/pr/check-clippy Pipeline was successful

Details

to 8ce903e0b2

All checks were successful

ci/woodpecker/pr/check-typos Pipeline was successful

Details

ci/woodpecker/pr/check Pipeline was successful

Details

ci/woodpecker/pr/check-clippy Pipeline was successful

Details

2026-07-02 22:29:43 +02:00 Compare

piotr-ginal force-pushed ginal/fix-scp-url from 8ce903e0b2

All checks were successful

ci/woodpecker/pr/check-typos Pipeline was successful

Details

ci/woodpecker/pr/check Pipeline was successful

Details

ci/woodpecker/pr/check-clippy Pipeline was successful

Details

to 8bf319223a

All checks were successful

ci/woodpecker/pr/check-typos Pipeline was successful

Details

ci/woodpecker/pr/check Pipeline was successful

Details

ci/woodpecker/pr/check-clippy Pipeline was successful

Details

2026-07-03 00:36:48 +02:00 Compare

Cyborus approved these changes 2026-07-06 20:23:41 +02:00

Cyborus merged commit 8f081ea058 into main 2026-07-06 21:16:56 +02:00

Cyborus referenced this pull request from a commit 2026-07-06 21:16:57 +02:00 Merge pull request 'fix: parsing scp-like remote url syntax' (#542) from piotr-ginal/forgejo-cli:ginal/fix-scp-url into main

Sign in to join this conversation.

Reviewers

No reviewers

Cyborus

Labels

Clear labels[ Kind/Breaking Breaking change that won't be backward compatible

](#)[ Kind/Bug Something is not working

](#)[ Kind/Design Discussion about UI/UX design

](#)[ Kind/Documentation Documentation changes

](#)[ Kind/Enhancement Improve existing functionality

](#)[ Kind/Feature New functionality

](#)[ Kind/Security This is security issue

](#)[ Kind/Testing Issue or pull request related to testing

](#)[ Kind/Upstream This is an issue with upstream software (Forgejo) that is probably not our fault

](#)

[ Priority

Critical The priority is critical

](#)[ Priority

High The priority is high

](#)[ Priority

Low The priority is low

](#)[ Priority

Medium The priority is medium

](#)

[ Reviewed

Confirmed Issue has been confirmed

](#)[ Reviewed

Duplicate This issue or pull request already exists

](#)[ Reviewed

Invalid Invalid issue

](#)[ Reviewed

Won't Fix This issue won't be fixed

](#)

[ Status

Abandoned Somebody has started to work on this but abandoned work

](#)[ Status

Blocked Something is blocking this issue or pull request

](#)[ Status

Need More Info Feedback is required to reproduce issue or to continue work

](#)

[ Suspicious

](#)

No labels Kind/Breaking Kind/Bug Kind/Design Kind/Documentation Kind/Enhancement Kind/Feature Kind/Security Kind/Testing Kind/Upstream [ Priority

Critical ](/forgejo-contrib/forgejo-cli/pulls?labels=173012) [ Priority

High ](/forgejo-contrib/forgejo-cli/pulls?labels=173013) [ Priority

Low ](/forgejo-contrib/forgejo-cli/pulls?labels=173015) [ Priority

Medium ](/forgejo-contrib/forgejo-cli/pulls?labels=173014) [ Reviewed

Confirmed ](/forgejo-contrib/forgejo-cli/pulls?labels=173007) [ Reviewed

Duplicate ](/forgejo-contrib/forgejo-cli/pulls?labels=173005) [ Reviewed

Invalid ](/forgejo-contrib/forgejo-cli/pulls?labels=173006) [ Reviewed

Won't Fix ](/forgejo-contrib/forgejo-cli/pulls?labels=173008) [ Status

Abandoned ](/forgejo-contrib/forgejo-cli/pulls?labels=173011) [ Status

Blocked ](/forgejo-contrib/forgejo-cli/pulls?labels=173010) [ Status

Need More Info ](/forgejo-contrib/forgejo-cli/pulls?labels=173009) Suspicious

Milestone

Clear milestone

No items

No milestone

Projects

Clear projects

No items

No project

Assignees

Clear assignees

No assignees

2 participants

Notifications Subscribe

Due date

The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference

forgejo-contrib/forgejo-cli!542

WritePreview

Loading…

Add table

| Rows | | | Columns | |

CancelOK

Add a link

Url Description Hint: With a URL in your clipboard, you can paste directly into the editor to create a link.

CancelOK

CancelSave

Reference in a new issue

Repository

forgejo-contrib/forgejo-cli

Title

Body

Create issue

No description provided.

Delete branch "piotr-ginal/forgejo-cli:ginal/fix-scp-url"

Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?

No Yes