@@ -10,28 +10,12 @@ var Position = VsCode.Position;
1010var path = require ( 'path' ) ;
1111var fs = require ( 'fs' ) ;
1212var git = require ( 'parse-git-config' ) ;
13- var parse = require ( 'github-url-from-git' ) ;
1413var open = require ( 'open' ) ;
1514var copy = require ( 'copy-paste' ) . copy ;
1615var gitRev = require ( 'git-rev-2' ) ;
1716var findParentDir = require ( 'find-parent-dir' ) ;
1817
19- function formGitHubLink ( parsedUri , branch , subdir , line ) {
20- if ( subdir ) {
21- return parsedUri + "/blob/" + branch + subdir + ( line ? "#L" + line : "" ) ;
22- }
23-
24- return parsedUri + "/tree/" + branch ;
25- }
26-
27-
28- function formBitBucketLink ( parsedUri , branch , subdir , line ) {
29- return parsedUri + "/src/" + branch + ( subdir ? subdir : "" ) + ( line ? "#cl-" + line : "" ) ;
30- }
31-
32- function formVisualStudioLink ( parsedUri , subdir , branch , line ) {
33- return parsedUri + "#" + ( subdir ? "path=" + subdir : "" ) + "&version=GB" + branch + ( line ? "&line=" + line : "" ) ;
34- }
18+ const gitProvider = require ( './gitProvider' ) ;
3519
3620function getGitHubLink ( cb , fileFsPath , line ) {
3721 var cwd = workspace . rootPath ;
@@ -40,56 +24,27 @@ function getGitHubLink(cb, fileFsPath, line) {
4024 git ( {
4125 cwd : repoDir
4226 } , function ( err , config ) {
43- var rawUri , parseOpts , parsedUri , branch , projectName ,
44- subdir , gitLink , scUrls , workspaceConfiguration ;
45-
46- workspaceConfiguration = VsCode . workspace . getConfiguration ( "openInGitHub" ) ;
47- scUrls = {
48- github : 'https://' + workspaceConfiguration . gitHubDomain ,
49- bitbucket : 'https://bitbucket.org' ,
50- visualstudiocom : / ^ h t t p s : \/ \/ [ \w \d - ] * \. v i s u a l s t u d i o .c o m \/ /
51- }
27+ const rawUri = config [ 'remote \"origin\"' ] . url ;
28+ const provider = gitProvider ( rawUri ) ;
5229
53- rawUri = config [ 'remote \"origin\"' ] . url ;
54- parseOpts = {
55- extraBaseUrls : [
56- 'bitbucket.org' ,
57- workspaceConfiguration . gitHubDomain
58- ]
59- }
60-
61- rawUri = rawUri . replace ( 'bitbucket.org:' , 'bitbucket.org/' )
62-
63- parsedUri = parse ( rawUri , parseOpts ) ;
64- if ( ! parsedUri ) {
65- parsedUri = rawUri ;
30+ if ( ! provider ) {
31+ Window . showWarningMessage ( 'Unknown Git provider.' ) ;
32+ return ;
6633 }
6734
6835 gitRev . branch ( cwd , function ( branchErr , branch ) {
6936 if ( branchErr || ! branch )
7037 branch = 'master' ;
7138
72- projectName = parsedUri . substring ( parsedUri . lastIndexOf ( "/" ) + 1 , parsedUri . length ) ;
73- subdir = fileFsPath ? fileFsPath . substring ( workspace . rootPath . length ) . replace ( / \" / g, "" ) : undefined ;
39+ let subdir = fileFsPath ? fileFsPath . substring ( workspace . rootPath . length ) . replace ( / \" / g, "" ) : undefined ;
7440
7541 if ( repoDir !== cwd ) {
7642 // The workspace directory is a subdirectory of the git repo folder so we need to prepend the the nested path
7743 var repoRelativePath = cwd . replace ( repoDir , "/" ) ;
7844 subdir = repoRelativePath + subdir ;
7945 }
8046
81- if ( parsedUri . startsWith ( scUrls . github ) ) {
82- gitLink = formGitHubLink ( parsedUri , branch , subdir , line ) ;
83- } else if ( parsedUri . startsWith ( scUrls . bitbucket ) ) {
84- gitLink = formBitBucketLink ( parsedUri , branch , subdir , line ) ;
85- } else if ( scUrls . visualstudiocom . test ( parsedUri ) ) {
86- gitLink = formVisualStudioLink ( parsedUri , subdir , branch , line ) ;
87- } else {
88- Window . showWarningMessage ( 'Unknown Git provider.' ) ;
89- }
90-
91- if ( gitLink )
92- cb ( gitLink ) ;
47+ cb ( provider . webUrl ( branch , subdir , line ) ) ;
9348 } ) ;
9449 } ) ;
9550}
0 commit comments