Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
G
gitlab-ce
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
1
Merge Requests
1
Analytics
Analytics
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Commits
Issue Boards
Open sidebar
nexedi
gitlab-ce
Commits
4465c13b
Commit
4465c13b
authored
Aug 02, 2016
by
Ruben Davila
Browse files
Options
Browse Files
Download
Plain Diff
Merge remote-tracking branch 'ce/master' into ce-to-ee
parents
2ab42c0d
c2288b1e
Changes
12
Hide whitespace changes
Inline
Side-by-side
Showing
12 changed files
with
96 additions
and
347 deletions
+96
-347
CHANGELOG
CHANGELOG
+2
-0
app/assets/javascripts/lib/utils/md5.js
app/assets/javascripts/lib/utils/md5.js
+0
-211
app/assets/javascripts/lib/utils/utf8_encode.js
app/assets/javascripts/lib/utils/utf8_encode.js
+0
-70
app/models/project_team.rb
app/models/project_team.rb
+7
-2
config/initializers/metrics.rb
config/initializers/metrics.rb
+1
-0
doc/ci/quick_start/README.md
doc/ci/quick_start/README.md
+1
-1
doc/install/installation.md
doc/install/installation.md
+2
-2
lib/banzai/filter/relative_link_filter.rb
lib/banzai/filter/relative_link_filter.rb
+3
-0
lib/gitlab/import_export/relation_factory.rb
lib/gitlab/import_export/relation_factory.rb
+1
-1
lib/tasks/downtime_check.rake
lib/tasks/downtime_check.rake
+6
-20
spec/lib/banzai/filter/relative_link_filter_spec.rb
spec/lib/banzai/filter/relative_link_filter_spec.rb
+12
-0
spec/models/project_team_spec.rb
spec/models/project_team_spec.rb
+61
-40
No files found.
CHANGELOG
View file @
4465c13b
...
...
@@ -4,7 +4,9 @@ v 8.11.0 (unreleased)
- Fix the title of the toggle dropdown button. !5515 (herminiotorres)
- Improve diff performance by eliminating redundant checks for text blobs
- Remove magic comments (`# encoding: UTF-8`) from Ruby files. !5456 (winniehell)
- Add support for relative links starting with ./ or / to RelativeLinkFilter (winniehell)
- Fix CI status icon link underline (ClemMakesApps)
- The Repository class is now instrumented
- Cache the commit author in RequestStore to avoid extra lookups in PostReceive
- Fix of 'Commits being passed to custom hooks are already reachable when using the UI'
- Add support for using RequestStore within Sidekiq tasks via SIDEKIQ_REQUEST_STORE env variable
...
...
app/assets/javascripts/lib/utils/md5.js
deleted
100644 → 0
View file @
2ab42c0d
function
md5
(
str
)
{
// http://kevin.vanzonneveld.net
// + original by: Webtoolkit.info (http://www.webtoolkit.info/)
// + namespaced by: Michael White (http://getsprink.com)
// + tweaked by: Jack
// + improved by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
// + input by: Brett Zamir (http://brett-zamir.me)
// + bugfixed by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
// - depends on: utf8_encode
// * example 1: md5('Kevin van Zonneveld');
// * returns 1: '6e658d4bfcb59cc13f96c14450ac40b9'
var
xl
;
var
rotateLeft
=
function
(
lValue
,
iShiftBits
)
{
return
(
lValue
<<
iShiftBits
)
|
(
lValue
>>>
(
32
-
iShiftBits
));
};
var
addUnsigned
=
function
(
lX
,
lY
)
{
var
lX4
,
lY4
,
lX8
,
lY8
,
lResult
;
lX8
=
(
lX
&
0x80000000
);
lY8
=
(
lY
&
0x80000000
);
lX4
=
(
lX
&
0x40000000
);
lY4
=
(
lY
&
0x40000000
);
lResult
=
(
lX
&
0x3FFFFFFF
)
+
(
lY
&
0x3FFFFFFF
);
if
(
lX4
&
lY4
)
{
return
(
lResult
^
0x80000000
^
lX8
^
lY8
);
}
if
(
lX4
|
lY4
)
{
if
(
lResult
&
0x40000000
)
{
return
(
lResult
^
0xC0000000
^
lX8
^
lY8
);
}
else
{
return
(
lResult
^
0x40000000
^
lX8
^
lY8
);
}
}
else
{
return
(
lResult
^
lX8
^
lY8
);
}
};
var
_F
=
function
(
x
,
y
,
z
)
{
return
(
x
&
y
)
|
((
~
x
)
&
z
);
};
var
_G
=
function
(
x
,
y
,
z
)
{
return
(
x
&
z
)
|
(
y
&
(
~
z
));
};
var
_H
=
function
(
x
,
y
,
z
)
{
return
(
x
^
y
^
z
);
};
var
_I
=
function
(
x
,
y
,
z
)
{
return
(
y
^
(
x
|
(
~
z
)));
};
var
_FF
=
function
(
a
,
b
,
c
,
d
,
x
,
s
,
ac
)
{
a
=
addUnsigned
(
a
,
addUnsigned
(
addUnsigned
(
_F
(
b
,
c
,
d
),
x
),
ac
));
return
addUnsigned
(
rotateLeft
(
a
,
s
),
b
);
};
var
_GG
=
function
(
a
,
b
,
c
,
d
,
x
,
s
,
ac
)
{
a
=
addUnsigned
(
a
,
addUnsigned
(
addUnsigned
(
_G
(
b
,
c
,
d
),
x
),
ac
));
return
addUnsigned
(
rotateLeft
(
a
,
s
),
b
);
};
var
_HH
=
function
(
a
,
b
,
c
,
d
,
x
,
s
,
ac
)
{
a
=
addUnsigned
(
a
,
addUnsigned
(
addUnsigned
(
_H
(
b
,
c
,
d
),
x
),
ac
));
return
addUnsigned
(
rotateLeft
(
a
,
s
),
b
);
};
var
_II
=
function
(
a
,
b
,
c
,
d
,
x
,
s
,
ac
)
{
a
=
addUnsigned
(
a
,
addUnsigned
(
addUnsigned
(
_I
(
b
,
c
,
d
),
x
),
ac
));
return
addUnsigned
(
rotateLeft
(
a
,
s
),
b
);
};
var
convertToWordArray
=
function
(
str
)
{
var
lWordCount
;
var
lMessageLength
=
str
.
length
;
var
lNumberOfWords_temp1
=
lMessageLength
+
8
;
var
lNumberOfWords_temp2
=
(
lNumberOfWords_temp1
-
(
lNumberOfWords_temp1
%
64
))
/
64
;
var
lNumberOfWords
=
(
lNumberOfWords_temp2
+
1
)
*
16
;
var
lWordArray
=
new
Array
(
lNumberOfWords
-
1
);
var
lBytePosition
=
0
;
var
lByteCount
=
0
;
while
(
lByteCount
<
lMessageLength
)
{
lWordCount
=
(
lByteCount
-
(
lByteCount
%
4
))
/
4
;
lBytePosition
=
(
lByteCount
%
4
)
*
8
;
lWordArray
[
lWordCount
]
=
(
lWordArray
[
lWordCount
]
|
(
str
.
charCodeAt
(
lByteCount
)
<<
lBytePosition
));
lByteCount
++
;
}
lWordCount
=
(
lByteCount
-
(
lByteCount
%
4
))
/
4
;
lBytePosition
=
(
lByteCount
%
4
)
*
8
;
lWordArray
[
lWordCount
]
=
lWordArray
[
lWordCount
]
|
(
0x80
<<
lBytePosition
);
lWordArray
[
lNumberOfWords
-
2
]
=
lMessageLength
<<
3
;
lWordArray
[
lNumberOfWords
-
1
]
=
lMessageLength
>>>
29
;
return
lWordArray
;
};
var
wordToHex
=
function
(
lValue
)
{
var
wordToHexValue
=
""
,
wordToHexValue_temp
=
""
,
lByte
,
lCount
;
for
(
lCount
=
0
;
lCount
<=
3
;
lCount
++
)
{
lByte
=
(
lValue
>>>
(
lCount
*
8
))
&
255
;
wordToHexValue_temp
=
"
0
"
+
lByte
.
toString
(
16
);
wordToHexValue
=
wordToHexValue
+
wordToHexValue_temp
.
substr
(
wordToHexValue_temp
.
length
-
2
,
2
);
}
return
wordToHexValue
;
};
var
x
=
[],
k
,
AA
,
BB
,
CC
,
DD
,
a
,
b
,
c
,
d
,
S11
=
7
,
S12
=
12
,
S13
=
17
,
S14
=
22
,
S21
=
5
,
S22
=
9
,
S23
=
14
,
S24
=
20
,
S31
=
4
,
S32
=
11
,
S33
=
16
,
S34
=
23
,
S41
=
6
,
S42
=
10
,
S43
=
15
,
S44
=
21
;
str
=
this
.
utf8_encode
(
str
);
x
=
convertToWordArray
(
str
);
a
=
0x67452301
;
b
=
0xEFCDAB89
;
c
=
0x98BADCFE
;
d
=
0x10325476
;
xl
=
x
.
length
;
for
(
k
=
0
;
k
<
xl
;
k
+=
16
)
{
AA
=
a
;
BB
=
b
;
CC
=
c
;
DD
=
d
;
a
=
_FF
(
a
,
b
,
c
,
d
,
x
[
k
+
0
],
S11
,
0xD76AA478
);
d
=
_FF
(
d
,
a
,
b
,
c
,
x
[
k
+
1
],
S12
,
0xE8C7B756
);
c
=
_FF
(
c
,
d
,
a
,
b
,
x
[
k
+
2
],
S13
,
0x242070DB
);
b
=
_FF
(
b
,
c
,
d
,
a
,
x
[
k
+
3
],
S14
,
0xC1BDCEEE
);
a
=
_FF
(
a
,
b
,
c
,
d
,
x
[
k
+
4
],
S11
,
0xF57C0FAF
);
d
=
_FF
(
d
,
a
,
b
,
c
,
x
[
k
+
5
],
S12
,
0x4787C62A
);
c
=
_FF
(
c
,
d
,
a
,
b
,
x
[
k
+
6
],
S13
,
0xA8304613
);
b
=
_FF
(
b
,
c
,
d
,
a
,
x
[
k
+
7
],
S14
,
0xFD469501
);
a
=
_FF
(
a
,
b
,
c
,
d
,
x
[
k
+
8
],
S11
,
0x698098D8
);
d
=
_FF
(
d
,
a
,
b
,
c
,
x
[
k
+
9
],
S12
,
0x8B44F7AF
);
c
=
_FF
(
c
,
d
,
a
,
b
,
x
[
k
+
10
],
S13
,
0xFFFF5BB1
);
b
=
_FF
(
b
,
c
,
d
,
a
,
x
[
k
+
11
],
S14
,
0x895CD7BE
);
a
=
_FF
(
a
,
b
,
c
,
d
,
x
[
k
+
12
],
S11
,
0x6B901122
);
d
=
_FF
(
d
,
a
,
b
,
c
,
x
[
k
+
13
],
S12
,
0xFD987193
);
c
=
_FF
(
c
,
d
,
a
,
b
,
x
[
k
+
14
],
S13
,
0xA679438E
);
b
=
_FF
(
b
,
c
,
d
,
a
,
x
[
k
+
15
],
S14
,
0x49B40821
);
a
=
_GG
(
a
,
b
,
c
,
d
,
x
[
k
+
1
],
S21
,
0xF61E2562
);
d
=
_GG
(
d
,
a
,
b
,
c
,
x
[
k
+
6
],
S22
,
0xC040B340
);
c
=
_GG
(
c
,
d
,
a
,
b
,
x
[
k
+
11
],
S23
,
0x265E5A51
);
b
=
_GG
(
b
,
c
,
d
,
a
,
x
[
k
+
0
],
S24
,
0xE9B6C7AA
);
a
=
_GG
(
a
,
b
,
c
,
d
,
x
[
k
+
5
],
S21
,
0xD62F105D
);
d
=
_GG
(
d
,
a
,
b
,
c
,
x
[
k
+
10
],
S22
,
0x2441453
);
c
=
_GG
(
c
,
d
,
a
,
b
,
x
[
k
+
15
],
S23
,
0xD8A1E681
);
b
=
_GG
(
b
,
c
,
d
,
a
,
x
[
k
+
4
],
S24
,
0xE7D3FBC8
);
a
=
_GG
(
a
,
b
,
c
,
d
,
x
[
k
+
9
],
S21
,
0x21E1CDE6
);
d
=
_GG
(
d
,
a
,
b
,
c
,
x
[
k
+
14
],
S22
,
0xC33707D6
);
c
=
_GG
(
c
,
d
,
a
,
b
,
x
[
k
+
3
],
S23
,
0xF4D50D87
);
b
=
_GG
(
b
,
c
,
d
,
a
,
x
[
k
+
8
],
S24
,
0x455A14ED
);
a
=
_GG
(
a
,
b
,
c
,
d
,
x
[
k
+
13
],
S21
,
0xA9E3E905
);
d
=
_GG
(
d
,
a
,
b
,
c
,
x
[
k
+
2
],
S22
,
0xFCEFA3F8
);
c
=
_GG
(
c
,
d
,
a
,
b
,
x
[
k
+
7
],
S23
,
0x676F02D9
);
b
=
_GG
(
b
,
c
,
d
,
a
,
x
[
k
+
12
],
S24
,
0x8D2A4C8A
);
a
=
_HH
(
a
,
b
,
c
,
d
,
x
[
k
+
5
],
S31
,
0xFFFA3942
);
d
=
_HH
(
d
,
a
,
b
,
c
,
x
[
k
+
8
],
S32
,
0x8771F681
);
c
=
_HH
(
c
,
d
,
a
,
b
,
x
[
k
+
11
],
S33
,
0x6D9D6122
);
b
=
_HH
(
b
,
c
,
d
,
a
,
x
[
k
+
14
],
S34
,
0xFDE5380C
);
a
=
_HH
(
a
,
b
,
c
,
d
,
x
[
k
+
1
],
S31
,
0xA4BEEA44
);
d
=
_HH
(
d
,
a
,
b
,
c
,
x
[
k
+
4
],
S32
,
0x4BDECFA9
);
c
=
_HH
(
c
,
d
,
a
,
b
,
x
[
k
+
7
],
S33
,
0xF6BB4B60
);
b
=
_HH
(
b
,
c
,
d
,
a
,
x
[
k
+
10
],
S34
,
0xBEBFBC70
);
a
=
_HH
(
a
,
b
,
c
,
d
,
x
[
k
+
13
],
S31
,
0x289B7EC6
);
d
=
_HH
(
d
,
a
,
b
,
c
,
x
[
k
+
0
],
S32
,
0xEAA127FA
);
c
=
_HH
(
c
,
d
,
a
,
b
,
x
[
k
+
3
],
S33
,
0xD4EF3085
);
b
=
_HH
(
b
,
c
,
d
,
a
,
x
[
k
+
6
],
S34
,
0x4881D05
);
a
=
_HH
(
a
,
b
,
c
,
d
,
x
[
k
+
9
],
S31
,
0xD9D4D039
);
d
=
_HH
(
d
,
a
,
b
,
c
,
x
[
k
+
12
],
S32
,
0xE6DB99E5
);
c
=
_HH
(
c
,
d
,
a
,
b
,
x
[
k
+
15
],
S33
,
0x1FA27CF8
);
b
=
_HH
(
b
,
c
,
d
,
a
,
x
[
k
+
2
],
S34
,
0xC4AC5665
);
a
=
_II
(
a
,
b
,
c
,
d
,
x
[
k
+
0
],
S41
,
0xF4292244
);
d
=
_II
(
d
,
a
,
b
,
c
,
x
[
k
+
7
],
S42
,
0x432AFF97
);
c
=
_II
(
c
,
d
,
a
,
b
,
x
[
k
+
14
],
S43
,
0xAB9423A7
);
b
=
_II
(
b
,
c
,
d
,
a
,
x
[
k
+
5
],
S44
,
0xFC93A039
);
a
=
_II
(
a
,
b
,
c
,
d
,
x
[
k
+
12
],
S41
,
0x655B59C3
);
d
=
_II
(
d
,
a
,
b
,
c
,
x
[
k
+
3
],
S42
,
0x8F0CCC92
);
c
=
_II
(
c
,
d
,
a
,
b
,
x
[
k
+
10
],
S43
,
0xFFEFF47D
);
b
=
_II
(
b
,
c
,
d
,
a
,
x
[
k
+
1
],
S44
,
0x85845DD1
);
a
=
_II
(
a
,
b
,
c
,
d
,
x
[
k
+
8
],
S41
,
0x6FA87E4F
);
d
=
_II
(
d
,
a
,
b
,
c
,
x
[
k
+
15
],
S42
,
0xFE2CE6E0
);
c
=
_II
(
c
,
d
,
a
,
b
,
x
[
k
+
6
],
S43
,
0xA3014314
);
b
=
_II
(
b
,
c
,
d
,
a
,
x
[
k
+
13
],
S44
,
0x4E0811A1
);
a
=
_II
(
a
,
b
,
c
,
d
,
x
[
k
+
4
],
S41
,
0xF7537E82
);
d
=
_II
(
d
,
a
,
b
,
c
,
x
[
k
+
11
],
S42
,
0xBD3AF235
);
c
=
_II
(
c
,
d
,
a
,
b
,
x
[
k
+
2
],
S43
,
0x2AD7D2BB
);
b
=
_II
(
b
,
c
,
d
,
a
,
x
[
k
+
9
],
S44
,
0xEB86D391
);
a
=
addUnsigned
(
a
,
AA
);
b
=
addUnsigned
(
b
,
BB
);
c
=
addUnsigned
(
c
,
CC
);
d
=
addUnsigned
(
d
,
DD
);
}
var
temp
=
wordToHex
(
a
)
+
wordToHex
(
b
)
+
wordToHex
(
c
)
+
wordToHex
(
d
);
return
temp
.
toLowerCase
();
}
app/assets/javascripts/lib/utils/utf8_encode.js
deleted
100644 → 0
View file @
2ab42c0d
function
utf8_encode
(
argString
)
{
// http://kevin.vanzonneveld.net
// + original by: Webtoolkit.info (http://www.webtoolkit.info/)
// + improved by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
// + improved by: sowberry
// + tweaked by: Jack
// + bugfixed by: Onno Marsman
// + improved by: Yves Sucaet
// + bugfixed by: Onno Marsman
// + bugfixed by: Ulrich
// + bugfixed by: Rafal Kukawski
// + improved by: kirilloid
// + bugfixed by: kirilloid
// * example 1: utf8_encode('Kevin van Zonneveld');
// * returns 1: 'Kevin van Zonneveld'
if
(
argString
===
null
||
typeof
argString
===
"
undefined
"
)
{
return
""
;
}
var
string
=
(
argString
+
''
);
// .replace(/\r\n/g, "\n").replace(/\r/g, "\n");
var
utftext
=
''
,
start
,
end
,
stringl
=
0
;
start
=
end
=
0
;
stringl
=
string
.
length
;
for
(
var
n
=
0
;
n
<
stringl
;
n
++
)
{
var
c1
=
string
.
charCodeAt
(
n
);
var
enc
=
null
;
if
(
c1
<
128
)
{
end
++
;
}
else
if
(
c1
>
127
&&
c1
<
2048
)
{
enc
=
String
.
fromCharCode
(
(
c1
>>
6
)
|
192
,
(
c1
&
63
)
|
128
);
}
else
if
(
c1
&
0xF800
!=
0xD800
)
{
enc
=
String
.
fromCharCode
(
(
c1
>>
12
)
|
224
,
((
c1
>>
6
)
&
63
)
|
128
,
(
c1
&
63
)
|
128
);
}
else
{
// surrogate pairs
if
(
c1
&
0xFC00
!=
0xD800
)
{
throw
new
RangeError
(
"
Unmatched trail surrogate at
"
+
n
);
}
var
c2
=
string
.
charCodeAt
(
++
n
);
if
(
c2
&
0xFC00
!=
0xDC00
)
{
throw
new
RangeError
(
"
Unmatched lead surrogate at
"
+
(
n
-
1
));
}
c1
=
((
c1
&
0x3FF
)
<<
10
)
+
(
c2
&
0x3FF
)
+
0x10000
;
enc
=
String
.
fromCharCode
(
(
c1
>>
18
)
|
240
,
((
c1
>>
12
)
&
63
)
|
128
,
((
c1
>>
6
)
&
63
)
|
128
,
(
c1
&
63
)
|
128
);
}
if
(
enc
!==
null
)
{
if
(
end
>
start
)
{
utftext
+=
string
.
slice
(
start
,
end
);
}
utftext
+=
enc
;
start
=
end
=
n
+
1
;
}
}
if
(
end
>
start
)
{
utftext
+=
string
.
slice
(
start
,
stringl
);
}
return
utftext
;
}
app/models/project_team.rb
View file @
4465c13b
...
...
@@ -140,8 +140,13 @@ class ProjectTeam
def
max_member_access_for_user_ids
(
user_ids
)
user_ids
=
user_ids
.
uniq
key
=
"max_member_access:
#{
project
.
id
}
"
RequestStore
.
store
[
key
]
||=
{}
access
=
RequestStore
.
store
[
key
]
access
=
{}
if
RequestStore
.
active?
RequestStore
.
store
[
key
]
||=
{}
access
=
RequestStore
.
store
[
key
]
end
# Lookup only the IDs we need
user_ids
=
user_ids
-
access
.
keys
...
...
config/initializers/metrics.rb
View file @
4465c13b
...
...
@@ -144,6 +144,7 @@ if Gitlab::Metrics.enabled?
end
config
.
instrument_methods
(
Rinku
)
config
.
instrument_instance_methods
(
Repository
)
end
GC
::
Profiler
.
enable
...
...
doc/ci/quick_start/README.md
View file @
4465c13b
...
...
@@ -233,7 +233,7 @@ Awesome! You started using CI in GitLab!
Visit the
[
examples README
][
examples
]
to see a list of examples using GitLab
CI with various languages.
[
runner-install
]:
https://gitlab.com/gitlab-org/gitlab-ci-multi-runner/tree/master#install
ation
[
runner-install
]:
https://gitlab.com/gitlab-org/gitlab-ci-multi-runner/tree/master#install
-gitlab-runner
[
blog-ci
]:
https://about.gitlab.com/2015/05/06/why-were-replacing-gitlab-ci-jobs-with-gitlab-ci-dot-yml/
[
examples
]:
../examples/README.md
[
ci
]:
https://about.gitlab.com/gitlab-ci/
...
...
doc/install/installation.md
View file @
4465c13b
...
...
@@ -269,9 +269,9 @@ sudo usermod -aG redis git
### Clone the Source
# Clone GitLab repository
sudo -u git -H git clone https://gitlab.com/gitlab-org/gitlab-
ee.git -b 8-10-stable-e
e gitlab
sudo -u git -H git clone https://gitlab.com/gitlab-org/gitlab-
ce.git -b 8-11-stabl
e gitlab
**Note:**
You can change
`8-1
0-stable-e
e`
to
`master`
if you want the
*bleeding edge*
version, but never install master on a production server!
**Note:**
You can change
`8-1
1-stabl
e`
to
`master`
if you want the
*bleeding edge*
version, but never install master on a production server!
### Configure It
...
...
lib/banzai/filter/relative_link_filter.rb
View file @
4465c13b
...
...
@@ -87,10 +87,13 @@ module Banzai
def
build_relative_path
(
path
,
request_path
)
return
request_path
if
path
.
empty?
return
path
unless
request_path
return
path
[
1
..-
1
]
if
path
.
start_with?
(
'/'
)
parts
=
request_path
.
split
(
'/'
)
parts
.
pop
if
uri_type
(
request_path
)
!=
:tree
path
.
sub!
(
%r{^
\.
/}
,
''
)
while
path
.
start_with?
(
'../'
)
parts
.
pop
path
.
sub!
(
'../'
,
''
)
...
...
lib/gitlab/import_export/relation_factory.rb
View file @
4465c13b
...
...
@@ -44,7 +44,7 @@ module Gitlab
if
@relation_name
==
:notes
set_note_author
#
TODO: note attatchments not supported yet
#
attachment is deprecated and note uploads are handled by Markdown uploader
@relation_hash
[
'attachment'
]
=
nil
end
...
...
lib/tasks/downtime_check.rake
View file @
4465c13b
desc
'Checks if migrations in a branch require downtime'
task
downtime_check: :environment
do
# First we'll want to make sure we're comparing with the right upstream
# repository/branch.
current_branch
=
`git rev-parse --abbrev-ref HEAD`
.
strip
# Either the developer ran this task directly on the master branch, or they're
# making changes directly on the master branch.
if
current_branch
==
'master'
if
defined?
(
Gitlab
::
License
)
repo
=
'gitlab-ee'
else
repo
=
'gitlab-ce'
end
`git fetch https://gitlab.com/gitlab-org/
#{
repo
}
.git --depth 1`
compare_with
=
'FETCH_HEAD'
# The developer is working on a different branch, in this case we can just
# compare with the master branch.
if
defined?
(
Gitlab
::
License
)
repo
=
'gitlab-ee'
else
compare_with
=
'master
'
repo
=
'gitlab-ce
'
end
Rake
::
Task
[
'gitlab:db:downtime_check'
].
invoke
(
compare_with
)
`git fetch https://gitlab.com/gitlab-org/
#{
repo
}
.git --depth 1`
Rake
::
Task
[
'gitlab:db:downtime_check'
].
invoke
(
'FETCH_HEAD'
)
end
spec/lib/banzai/filter/relative_link_filter_spec.rb
View file @
4465c13b
...
...
@@ -78,12 +78,24 @@ describe Banzai::Filter::RelativeLinkFilter, lib: true do
end
context
'with a valid repository'
do
it
'rebuilds absolute URL for a file in the repo'
do
doc
=
filter
(
link
(
'/doc/api/README.md'
))
expect
(
doc
.
at_css
(
'a'
)[
'href'
]).
to
eq
"/
#{
project_path
}
/blob/
#{
ref
}
/doc/api/README.md"
end
it
'rebuilds relative URL for a file in the repo'
do
doc
=
filter
(
link
(
'doc/api/README.md'
))
expect
(
doc
.
at_css
(
'a'
)[
'href'
]).
to
eq
"/
#{
project_path
}
/blob/
#{
ref
}
/doc/api/README.md"
end
it
'rebuilds relative URL for a file in the repo with leading ./'
do
doc
=
filter
(
link
(
'./doc/api/README.md'
))
expect
(
doc
.
at_css
(
'a'
)[
'href'
]).
to
eq
"/
#{
project_path
}
/blob/
#{
ref
}
/doc/api/README.md"
end
it
'rebuilds relative URL for a file in the repo up one directory'
do
relative_link
=
link
(
'../api/README.md'
)
doc
=
filter
(
relative_link
,
requested_path:
'doc/update/7.14-to-8.0.md'
)
...
...
spec/models/project_team_spec.rb
View file @
4465c13b
...
...
@@ -199,48 +199,69 @@ describe ProjectTeam, models: true do
end
end
describe
"#max_member_access_for_users"
do
it
'returns correct roles for different users'
do
master
=
create
(
:user
)
reporter
=
create
(
:user
)
promoted_guest
=
create
(
:user
)
guest
=
create
(
:user
)
project
=
create
(
:project
)
shared_examples_for
"#max_member_access_for_users"
do
|
enable_request_store
|
describe
"#max_member_access_for_users"
do
before
do
RequestStore
.
begin!
if
enable_request_store
end
project
.
team
<<
[
master
,
:master
]
project
.
team
<<
[
reporter
,
:reporter
]
project
.
team
<<
[
promoted_guest
,
:guest
]
project
.
team
<<
[
guest
,
:guest
]
after
do
if
enable_request_store
RequestStore
.
end!
RequestStore
.
clear!
end
end
group
=
create
(
:group
)
group_developer
=
create
(
:user
)
second_developer
=
create
(
:user
)
project
.
project_group_links
.
create
(
group:
group
,
group_access:
Gitlab
::
Access
::
DEVELOPER
)
group
.
add_master
(
promoted_guest
)
group
.
add_developer
(
group_developer
)
group
.
add_developer
(
second_developer
)
second_group
=
create
(
:group
)
project
.
project_group_links
.
create
(
group:
second_group
,
group_access:
Gitlab
::
Access
::
MASTER
)
second_group
.
add_master
(
second_developer
)
users
=
[
master
,
reporter
,
promoted_guest
,
guest
,
group_developer
,
second_developer
].
map
(
&
:id
)
expected
=
{
master
.
id
=>
Gitlab
::
Access
::
MASTER
,
reporter
.
id
=>
Gitlab
::
Access
::
REPORTER
,
promoted_guest
.
id
=>
Gitlab
::
Access
::
DEVELOPER
,
guest
.
id
=>
Gitlab
::
Access
::
GUEST
,
group_developer
.
id
=>
Gitlab
::
Access
::
DEVELOPER
,
second_developer
.
id
=>
Gitlab
::
Access
::
MASTER
}
expect
(
project
.
team
.
max_member_access_for_user_ids
(
users
)).
to
eq
(
expected
)
it
'returns correct roles for different users'
do
master
=
create
(
:user
)
reporter
=
create
(
:user
)
promoted_guest
=
create
(
:user
)
guest
=
create
(
:user
)
project
=
create
(
:project
)
project
.
team
<<
[
master
,
:master
]
project
.
team
<<
[
reporter
,
:reporter
]
project
.
team
<<
[
promoted_guest
,
:guest
]
project
.
team
<<
[
guest
,
:guest
]
group
=
create
(
:group
)
group_developer
=
create
(
:user
)
second_developer
=
create
(
:user
)
project
.
project_group_links
.
create
(
group:
group
,
group_access:
Gitlab
::
Access
::
DEVELOPER
)
group
.
add_master
(
promoted_guest
)
group
.
add_developer
(
group_developer
)
group
.
add_developer
(
second_developer
)
second_group
=
create
(
:group
)
project
.
project_group_links
.
create
(
group:
second_group
,
group_access:
Gitlab
::
Access
::
MASTER
)
second_group
.
add_master
(
second_developer
)
users
=
[
master
,
reporter
,
promoted_guest
,
guest
,
group_developer
,
second_developer
].
map
(
&
:id
)
expected
=
{
master
.
id
=>
Gitlab
::
Access
::
MASTER
,
reporter
.
id
=>
Gitlab
::
Access
::
REPORTER
,
promoted_guest
.
id
=>
Gitlab
::
Access
::
DEVELOPER
,
guest
.
id
=>
Gitlab
::
Access
::
GUEST
,
group_developer
.
id
=>
Gitlab
::
Access
::
DEVELOPER
,
second_developer
.
id
=>
Gitlab
::
Access
::
MASTER
}
expect
(
project
.
team
.
max_member_access_for_user_ids
(
users
)).
to
eq
(
expected
)
end
end
end
describe
'#max_member_access_for_users with RequestStore'
do
it_behaves_like
"#max_member_access_for_users"
,
true
end
describe
'#max_member_access_for_users without RequestStore'
do
it_behaves_like
"#max_member_access_for_users"
,
false
end
end
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment