Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add support for bitbucket repos cloned with ssh #174

Open
wants to merge 1 commit into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
9 changes: 9 additions & 0 deletions git-open
Original file line number Diff line number Diff line change
Expand Up @@ -199,6 +199,15 @@ elif [[ "${#pathargs[@]}" -ge 3 && ${pathargs[${#pathargs[@]} - 3]} == 'scm' ]];
pathargs=(${pathPref[@]} 'projects' ${pathargs[${#pathargs[@]} - 2]} 'repos' "${pathargs[@]:${#pathargs[@]} - 1}")
IFS='/' urlpath="${pathargs[*]}"
providerBranchRef="/browse?at=$remote_ref"
elif [[ "$domain" == *"bitbucket"* ]] && [[ $gitprotocol == 'ssh' ]]; then
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Is this for bitbucket.org or Bitbucket Server (Self hosted). Can we get a test or at the very least an example URL -> what it should be converted to?

Copy link
Author

@prabhu43 prabhu43 Oct 11, 2020

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@derimagia In my case, it is for self-hosted bitbucket. I mentioned the example urls in the issue. Also added a test for the same. Please review it once again.

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I have the same use case using a self-hosted bitbucket server but bitbucket isn't in the domain name so this would still not work for me. I wonder if there's a way to add a flag or update to this PR that uses the same functionality but doesn't assume that bitbucket is in the domain.

Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I was wondering if this was the case. Currently the way it looks like we determine if it's a bitbucket server is if it has scm in the URL (third to last segment). Is this still valid but only with non-ssh?

Either way the way we may already support this is with the existing open. config params.

It's not gitlab specific and people have used it for other providers, can it be used here?

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@derimagia Yes, current way of determining bitbucket server does not work with ssh. It works with the code I pushed in this PR.

The documentation is not clear to use config param for bitbucket if it is already supported.

Remote url in git config: ssh://[email protected]/aaa/bbb.git
URL to be opened: https://bitbucket.scm.xyz.com/projects/aaa/repos/bbb/browse

I tried these commands, still it did not work

git config "open.https://bitbucket.scm.xyz.com.domain" "bitbucket.scm.xyz.com/projects"
git config "open.https://bitbucket.scm.xyz.com.domain" "bitbucket.scm.xyz.com"
git config "open.https://bitbucket.scm.xyz.com.protocol" "https"

# bitbucket repo cloned with ssh will not have /scm/ segment in url path
# e.g. /ppp/test-repo.git

# Build the repo url starting with 'projects' and then keep the first argument, the string 'repos', and finally the rest of the arguments.
# shellcheck disable=SC2206
pathargs=('projects' ${pathargs[${#pathargs[@]} - 2]} 'repos' "${pathargs[@]:${#pathargs[@]} - 1}")
IFS='/' urlpath="${pathargs[*]}"
providerBranchRef="/browse?at=$remote_ref"
elif [[ "${#pathargs[@]}" -ge '2' && ${pathargs[${#pathargs[@]} - 2]} == '_git' ]]; then
# Visual Studio Team Services and Team Foundation Server always have /_git/ as the second to last segment in the url path
if (( is_issue )); then
Expand Down
7 changes: 7 additions & 0 deletions test/git-open.bats
Original file line number Diff line number Diff line change
Expand Up @@ -472,6 +472,13 @@ setup() {
assert_output "https://mybb.domain.com/root/context/projects/~first.last/repos/rrr/browse?at=refs/heads/develop"
}

@test "bitbucket: Selfhosted Bitbucket Server with ssh:// clone urls" {
# https://github.com/paulirish/git-open/pull/174
git remote set-url origin "ssh://[email protected]/ppp/rrr.git"
run ../git-open
assert_output "https://bitbucket.domain.com/projects/ppp/repos/rrr"
}


##
## GitLab
Expand Down