Skip to content

Commit d40123d

Browse files
committed
fix(gitlab): add support for gitlab subgroups + escape user path
1 parent 20f1277 commit d40123d

File tree

2 files changed

+42
-1
lines changed

2 files changed

+42
-1
lines changed

index.js

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,17 @@ module.exports = function (string) {
3737
var m = /^\/([\w-]+)\/([\w-.]+)\/archive\/(.+)\.tar\.gz?$/.exec(path)
3838
if (m) return m.slice(1, 4)
3939

40+
// https://docs.gitlab.com/ce/user/group/subgroups/
41+
if (~url.host.indexOf('gitlab')) {
42+
var m = /^\/((?:[\w-.]+\/)+)([\w-.]+)$/.exec(path)
43+
if (m) {
44+
m = m.slice(1, 3);
45+
// remove slash at the end
46+
m[0] = m[0].slice(0, -1);
47+
return m.concat((url.hash || '').slice(1));
48+
}
49+
}
50+
4051
return false
4152
}
4253

test.js

Lines changed: 31 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -87,10 +87,40 @@ describe('gitlab urls', function () {
8787
})
8888

8989
it('parses git gitlab url', function () {
90-
var url = 'git@gitlab.team.com:user/test1.git'
90+
var url = 'git@gitlab.com:user/test1.git'
9191
var parsed = parse(url)
9292
assert.deepEqual(['user', 'test1', ''], parsed)
9393
})
94+
95+
it('parses git gitlab url with one subgroup', function () {
96+
var url = 'git@gitlab.com:user/subgroup/test1.git'
97+
var parsed = parse(url)
98+
assert.deepEqual(['user/subgroup', 'test1', ''], parsed)
99+
})
100+
101+
it('parses git gitlab url with two nested subgroups', function () {
102+
var url = 'git@gitlab.com:user/subgroup1/subgroup2/test1.git'
103+
var parsed = parse(url)
104+
assert.deepEqual(['user/subgroup1/subgroup2', 'test1', ''], parsed)
105+
})
106+
107+
it('parses git gitlab url with three nested subgroups', function () {
108+
var url = 'git@gitlab.com:user/subgroup1/subgroup2/subgroup3/test1.git'
109+
var parsed = parse(url)
110+
assert.deepEqual(['user/subgroup1/subgroup2/subgroup3', 'test1', ''], parsed)
111+
})
112+
113+
it('parses git hosted gitlab url with subgroups', function () {
114+
var url = 'git@gitlab.team.com:user/subgroup1/subgroup2/subgroup3/test1.git'
115+
var parsed = parse(url)
116+
assert.deepEqual(['user/subgroup1/subgroup2/subgroup3', 'test1', ''], parsed)
117+
})
118+
119+
it('cannot parse subgroups in non-gitlab URLs', function () {
120+
var url = 'git@stash.local:user/subgroup1/subgroup2/subgroup3/test1.git'
121+
var parsed = parse(url)
122+
assert.equal(false, parsed)
123+
})
94124
})
95125

96126
describe('git @ syntax', function () {

0 commit comments

Comments
 (0)