From df7712cbfed5ea9f84f16333b9c8c94eaba6269d Mon Sep 17 00:00:00 2001 From: Prabhu Jayakumar Date: Sat, 10 Oct 2020 22:11:37 +0530 Subject: [PATCH] Add support for bitbucket repos cloned with ssh Signed-off-by: Prabhu Jayakumar --- git-open | 9 +++++++++ test/git-open.bats | 7 +++++++ 2 files changed, 16 insertions(+) diff --git a/git-open b/git-open index 1fcc655..9001f89 100755 --- a/git-open +++ b/git-open @@ -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 + # 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 diff --git a/test/git-open.bats b/test/git-open.bats index 3de5e9e..3797213 100755 --- a/test/git-open.bats +++ b/test/git-open.bats @@ -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://git@bitbucket.domain.com/ppp/rrr.git" + run ../git-open + assert_output "https://bitbucket.domain.com/projects/ppp/repos/rrr" +} + ## ## GitLab