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
e3ba5333
Commit
e3ba5333
authored
Jun 03, 2019
by
GitLab Bot
Browse files
Options
Browse Files
Download
Plain Diff
Automatic merge of gitlab-org/gitlab-ce master
parents
03d8e2bd
672a6238
Changes
51
Hide whitespace changes
Inline
Side-by-side
Showing
51 changed files
with
84 additions
and
78 deletions
+84
-78
app/assets/javascripts/behaviors/shortcuts/shortcuts_issuable.js
...ets/javascripts/behaviors/shortcuts/shortcuts_issuable.js
+1
-1
app/assets/javascripts/boards/components/modal/index.vue
app/assets/javascripts/boards/components/modal/index.vue
+1
-1
app/assets/javascripts/boards/models/list.js
app/assets/javascripts/boards/models/list.js
+2
-2
app/assets/javascripts/branches/branches_delete_modal.js
app/assets/javascripts/branches/branches_delete_modal.js
+1
-1
app/assets/javascripts/clusters/components/application_row.vue
...ssets/javascripts/clusters/components/application_row.vue
+1
-1
app/assets/javascripts/compare_autocomplete.js
app/assets/javascripts/compare_autocomplete.js
+1
-1
app/assets/javascripts/create_item_dropdown.js
app/assets/javascripts/create_item_dropdown.js
+1
-1
app/assets/javascripts/error_tracking_settings/store/getters.js
...sets/javascripts/error_tracking_settings/store/getters.js
+2
-2
app/assets/javascripts/frequent_items/store/actions.js
app/assets/javascripts/frequent_items/store/actions.js
+1
-1
app/assets/javascripts/gl_dropdown.js
app/assets/javascripts/gl_dropdown.js
+2
-2
app/assets/javascripts/gl_form.js
app/assets/javascripts/gl_form.js
+1
-1
app/assets/javascripts/ide/components/preview/clientside.vue
app/assets/javascripts/ide/components/preview/clientside.vue
+1
-1
app/assets/javascripts/ide/components/repo_commit_section.vue
...assets/javascripts/ide/components/repo_commit_section.vue
+1
-1
app/assets/javascripts/ide/lib/editor_options.js
app/assets/javascripts/ide/lib/editor_options.js
+1
-1
app/assets/javascripts/ide/stores/getters.js
app/assets/javascripts/ide/stores/getters.js
+4
-3
app/assets/javascripts/ide/stores/modules/commit/actions.js
app/assets/javascripts/ide/stores/modules/commit/actions.js
+1
-1
app/assets/javascripts/ide/stores/modules/pipelines/getters.js
...ssets/javascripts/ide/stores/modules/pipelines/getters.js
+1
-1
app/assets/javascripts/ide/stores/mutations.js
app/assets/javascripts/ide/stores/mutations.js
+1
-1
app/assets/javascripts/image_diff/helpers/comment_indicator_helper.js
...avascripts/image_diff/helpers/comment_indicator_helper.js
+1
-1
app/assets/javascripts/image_diff/image_diff.js
app/assets/javascripts/image_diff/image_diff.js
+2
-2
app/assets/javascripts/image_diff/view_types.js
app/assets/javascripts/image_diff/view_types.js
+1
-1
app/assets/javascripts/issuable_index.js
app/assets/javascripts/issuable_index.js
+1
-1
app/assets/javascripts/issue_show/components/app.vue
app/assets/javascripts/issue_show/components/app.vue
+1
-1
app/assets/javascripts/label_manager.js
app/assets/javascripts/label_manager.js
+1
-1
app/assets/javascripts/lib/utils/accessor.js
app/assets/javascripts/lib/utils/accessor.js
+1
-1
app/assets/javascripts/lib/utils/datetime_utility.js
app/assets/javascripts/lib/utils/datetime_utility.js
+1
-1
app/assets/javascripts/lib/utils/text_markdown.js
app/assets/javascripts/lib/utils/text_markdown.js
+3
-3
app/assets/javascripts/mr_notes/stores/getters.js
app/assets/javascripts/mr_notes/stores/getters.js
+1
-1
app/assets/javascripts/notes/components/discussion_notes.vue
app/assets/javascripts/notes/components/discussion_notes.vue
+1
-1
app/assets/javascripts/notes/components/noteable_note.vue
app/assets/javascripts/notes/components/noteable_note.vue
+1
-1
app/assets/javascripts/notes/mixins/issuable_state.js
app/assets/javascripts/notes/mixins/issuable_state.js
+2
-2
app/assets/javascripts/notes/stores/getters.js
app/assets/javascripts/notes/stores/getters.js
+1
-1
app/assets/javascripts/pages/projects/pipeline_schedules/shared/components/interval_pattern_input.vue
...ne_schedules/shared/components/interval_pattern_input.vue
+1
-1
app/assets/javascripts/profile/account/index.js
app/assets/javascripts/profile/account/index.js
+1
-1
app/assets/javascripts/projects/gke_cluster_dropdowns/store/actions.js
...vascripts/projects/gke_cluster_dropdowns/store/actions.js
+1
-1
app/assets/javascripts/projects/gke_cluster_dropdowns/store/getters.js
...vascripts/projects/gke_cluster_dropdowns/store/getters.js
+3
-3
app/assets/javascripts/registry/stores/mutations.js
app/assets/javascripts/registry/stores/mutations.js
+2
-2
app/assets/javascripts/right_sidebar.js
app/assets/javascripts/right_sidebar.js
+2
-2
app/assets/javascripts/search_autocomplete.js
app/assets/javascripts/search_autocomplete.js
+2
-2
app/assets/javascripts/sidebar/components/time_tracking/time_tracker.vue
...scripts/sidebar/components/time_tracking/time_tracker.vue
+3
-3
app/assets/javascripts/vue_merge_request_widget/components/deployment.vue
...cripts/vue_merge_request_widget/components/deployment.vue
+4
-4
app/assets/javascripts/vue_merge_request_widget/components/mr_widget_pipeline_container.vue
...equest_widget/components/mr_widget_pipeline_container.vue
+1
-1
app/assets/javascripts/vue_merge_request_widget/mr_widget_options.vue
...avascripts/vue_merge_request_widget/mr_widget_options.vue
+1
-1
app/assets/javascripts/vue_merge_request_widget/stores/mr_widget_store.js
...cripts/vue_merge_request_widget/stores/mr_widget_store.js
+3
-3
app/assets/javascripts/vue_shared/components/pikaday.vue
app/assets/javascripts/vue_shared/components/pikaday.vue
+1
-1
app/assets/javascripts/vue_shared/components/table_pagination.vue
...ts/javascripts/vue_shared/components/table_pagination.vue
+1
-1
babel.config.js
babel.config.js
+1
-1
doc/topics/autodevops/index.md
doc/topics/autodevops/index.md
+8
-7
spec/frontend/helpers/vue_test_utils_helper.js
spec/frontend/helpers/vue_test_utils_helper.js
+3
-1
spec/javascripts/helpers/vue_test_utils_helper.js
spec/javascripts/helpers/vue_test_utils_helper.js
+3
-1
spec/javascripts/matchers.js
spec/javascripts/matchers.js
+1
-1
No files found.
app/assets/javascripts/behaviors/shortcuts/shortcuts_issuable.js
View file @
e3ba5333
...
...
@@ -37,7 +37,7 @@ export default class ShortcutsIssuable extends Shortcuts {
}
// Sanity check: Make sure the selected text comes from a discussion : it can either contain a message...
let
foundMessage
=
!!
documentFragment
.
querySelector
(
'
.md
'
);
let
foundMessage
=
Boolean
(
documentFragment
.
querySelector
(
'
.md
'
)
);
// ... Or come from a message
if
(
!
foundMessage
)
{
...
...
app/assets/javascripts/boards/components/modal/index.vue
View file @
e3ba5333
...
...
@@ -124,7 +124,7 @@ export default {
data
.
issues
.
forEach
(
issueObj
=>
{
const
issue
=
new
ListIssue
(
issueObj
);
const
foundSelectedIssue
=
ModalStore
.
findSelectedIssue
(
issue
);
issue
.
selected
=
!!
foundSelectedIssue
;
issue
.
selected
=
Boolean
(
foundSelectedIssue
)
;
this
.
issues
.
push
(
issue
);
});
...
...
app/assets/javascripts/boards/models/list.js
View file @
e3ba5333
...
...
@@ -37,8 +37,8 @@ class List {
this
.
type
=
obj
.
list_type
;
const
typeInfo
=
this
.
getTypeInfo
(
this
.
type
);
this
.
preset
=
!!
typeInfo
.
isPreset
;
this
.
isExpandable
=
!!
typeInfo
.
isExpandable
;
this
.
preset
=
Boolean
(
typeInfo
.
isPreset
)
;
this
.
isExpandable
=
Boolean
(
typeInfo
.
isExpandable
)
;
this
.
isExpanded
=
true
;
this
.
page
=
1
;
this
.
loading
=
true
;
...
...
app/assets/javascripts/branches/branches_delete_modal.js
View file @
e3ba5333
...
...
@@ -23,7 +23,7 @@ class DeleteModal {
const
branchData
=
e
.
currentTarget
.
dataset
;
this
.
branchName
=
branchData
.
branchName
||
''
;
this
.
deletePath
=
branchData
.
deletePath
||
''
;
this
.
isMerged
=
!!
branchData
.
isMerged
;
this
.
isMerged
=
Boolean
(
branchData
.
isMerged
)
;
this
.
updateModal
();
}
...
...
app/assets/javascripts/clusters/components/application_row.vue
View file @
e3ba5333
...
...
@@ -142,7 +142,7 @@ export default {
);
},
hasLogo
()
{
return
!!
this
.
logoUrl
;
return
Boolean
(
this
.
logoUrl
)
;
},
identiconId
()
{
// generate a deterministic integer id for the identicon background
...
...
app/assets/javascripts/compare_autocomplete.js
View file @
e3ba5333
...
...
@@ -40,7 +40,7 @@ export default function initCompareAutocomplete(limitTo = null, clickHandler = (
},
selectable
:
true
,
filterable
:
true
,
filterRemote
:
!!
$dropdown
.
data
(
'
refsUrl
'
),
filterRemote
:
Boolean
(
$dropdown
.
data
(
'
refsUrl
'
)
),
fieldName
:
$dropdown
.
data
(
'
fieldName
'
),
filterInput
:
'
input[type="search"]
'
,
renderRow
:
function
(
ref
)
{
...
...
app/assets/javascripts/create_item_dropdown.js
View file @
e3ba5333
...
...
@@ -12,7 +12,7 @@ export default class CreateItemDropdown {
this
.
fieldName
=
options
.
fieldName
;
this
.
onSelect
=
options
.
onSelect
||
(()
=>
{});
this
.
getDataOption
=
options
.
getData
;
this
.
getDataRemote
=
!!
options
.
filterRemote
;
this
.
getDataRemote
=
Boolean
(
options
.
filterRemote
)
;
this
.
createNewItemFromValueOption
=
options
.
createNewItemFromValue
;
this
.
$dropdown
=
options
.
$dropdown
;
this
.
$dropdownContainer
=
this
.
$dropdown
.
parent
();
...
...
app/assets/javascripts/error_tracking_settings/store/getters.js
View file @
e3ba5333
...
...
@@ -2,10 +2,10 @@ import _ from 'underscore';
import
{
__
,
s__
,
sprintf
}
from
'
~/locale
'
;
import
{
getDisplayName
}
from
'
../utils
'
;
export
const
hasProjects
=
state
=>
!!
state
.
projects
&&
state
.
projects
.
length
>
0
;
export
const
hasProjects
=
state
=>
Boolean
(
state
.
projects
)
&&
state
.
projects
.
length
>
0
;
export
const
isProjectInvalid
=
(
state
,
getters
)
=>
!!
state
.
selectedProject
&&
Boolean
(
state
.
selectedProject
)
&&
getters
.
hasProjects
&&
!
state
.
projects
.
some
(
project
=>
_
.
isMatch
(
state
.
selectedProject
,
project
));
...
...
app/assets/javascripts/frequent_items/store/actions.js
View file @
e3ba5333
...
...
@@ -51,7 +51,7 @@ export const fetchSearchedItems = ({ state, dispatch }, searchQuery) => {
const
params
=
{
simple
:
true
,
per_page
:
20
,
membership
:
!!
gon
.
current_user_id
,
membership
:
Boolean
(
gon
.
current_user_id
)
,
};
if
(
state
.
namespace
===
'
projects
'
)
{
...
...
app/assets/javascripts/gl_dropdown.js
View file @
e3ba5333
...
...
@@ -307,8 +307,8 @@ GitLabDropdown = (function() {
// Set Defaults
this
.
filterInput
=
this
.
options
.
filterInput
||
this
.
getElement
(
FILTER_INPUT
);
this
.
noFilterInput
=
this
.
options
.
noFilterInput
||
this
.
getElement
(
NO_FILTER_INPUT
);
this
.
highlight
=
!!
this
.
options
.
highlight
;
this
.
icon
=
!!
this
.
options
.
icon
;
this
.
highlight
=
Boolean
(
this
.
options
.
highlight
)
;
this
.
icon
=
Boolean
(
this
.
options
.
icon
)
;
this
.
filterInputBlur
=
this
.
options
.
filterInputBlur
!=
null
?
this
.
options
.
filterInputBlur
:
true
;
// If no input is passed create a default one
...
...
app/assets/javascripts/gl_form.js
View file @
e3ba5333
...
...
@@ -13,7 +13,7 @@ export default class GLForm {
const
dataSources
=
(
gl
.
GfmAutoComplete
&&
gl
.
GfmAutoComplete
.
dataSources
)
||
{};
Object
.
keys
(
this
.
enableGFM
).
forEach
(
item
=>
{
if
(
item
!==
'
emojis
'
)
{
this
.
enableGFM
[
item
]
=
!!
dataSources
[
item
]
;
this
.
enableGFM
[
item
]
=
Boolean
(
dataSources
[
item
])
;
}
});
// Before we start, we should clean up any previous data for this form
...
...
app/assets/javascripts/ide/components/preview/clientside.vue
View file @
e3ba5333
...
...
@@ -105,7 +105,7 @@ export default {
.
then
(()
=>
{
this
.
initManager
(
'
#ide-preview
'
,
this
.
sandboxOpts
,
{
fileResolver
:
{
isFile
:
p
=>
Promise
.
resolve
(
!!
this
.
entries
[
createPathWithExt
(
p
)]
),
isFile
:
p
=>
Promise
.
resolve
(
Boolean
(
this
.
entries
[
createPathWithExt
(
p
)])
),
readFile
:
p
=>
this
.
loadFileContent
(
createPathWithExt
(
p
)).
then
(
content
=>
content
),
},
});
...
...
app/assets/javascripts/ide/components/repo_commit_section.vue
View file @
e3ba5333
...
...
@@ -30,7 +30,7 @@ export default {
...
mapGetters
([
'
lastOpenedFile
'
,
'
hasChanges
'
,
'
someUncommittedChanges
'
,
'
activeFile
'
]),
...
mapGetters
(
'
commit
'
,
[
'
discardDraftButtonDisabled
'
]),
showStageUnstageArea
()
{
return
!!
(
this
.
someUncommittedChanges
||
this
.
lastCommitMsg
||
!
this
.
unusedSeal
);
return
Boolean
(
this
.
someUncommittedChanges
||
this
.
lastCommitMsg
||
!
this
.
unusedSeal
);
},
activeFileKey
()
{
return
this
.
activeFile
?
this
.
activeFile
.
key
:
null
;
...
...
app/assets/javascripts/ide/lib/editor_options.js
View file @
e3ba5333
...
...
@@ -11,7 +11,7 @@ export const defaultEditorOptions = {
export
default
[
{
readOnly
:
model
=>
!!
model
.
file
.
file_lock
,
readOnly
:
model
=>
Boolean
(
model
.
file
.
file_lock
)
,
quickSuggestions
:
model
=>
!
(
model
.
language
===
'
markdown
'
),
},
];
app/assets/javascripts/ide/stores/getters.js
View file @
e3ba5333
...
...
@@ -42,9 +42,10 @@ export const emptyRepo = state =>
export
const
currentTree
=
state
=>
state
.
trees
[
`
${
state
.
currentProjectId
}
/
${
state
.
currentBranchId
}
`
];
export
const
hasChanges
=
state
=>
!!
state
.
changedFiles
.
length
||
!!
state
.
stagedFiles
.
length
;
export
const
hasChanges
=
state
=>
Boolean
(
state
.
changedFiles
.
length
)
||
Boolean
(
state
.
stagedFiles
.
length
);
export
const
hasMergeRequest
=
state
=>
!!
state
.
currentMergeRequestId
;
export
const
hasMergeRequest
=
state
=>
Boolean
(
state
.
currentMergeRequestId
)
;
export
const
allBlobs
=
state
=>
Object
.
keys
(
state
.
entries
)
...
...
@@ -70,7 +71,7 @@ export const isCommitModeActive = state => state.currentActivityView === activit
export
const
isReviewModeActive
=
state
=>
state
.
currentActivityView
===
activityBarViews
.
review
;
export
const
someUncommittedChanges
=
state
=>
!!
(
state
.
changedFiles
.
length
||
state
.
stagedFiles
.
length
);
Boolean
(
state
.
changedFiles
.
length
||
state
.
stagedFiles
.
length
);
export
const
getChangesInFolder
=
state
=>
path
=>
{
const
changedFilesCount
=
state
.
changedFiles
.
filter
(
f
=>
filePathMatches
(
f
.
path
,
path
)).
length
;
...
...
app/assets/javascripts/ide/stores/modules/commit/actions.js
View file @
e3ba5333
...
...
@@ -102,7 +102,7 @@ export const updateFilesAfterCommit = ({ commit, dispatch, rootState, rootGetter
eventHub
.
$emit
(
`editor.update.model.content.
${
file
.
key
}
`
,
{
content
:
file
.
content
,
changed
:
!!
changedFile
,
changed
:
Boolean
(
changedFile
)
,
});
});
};
...
...
app/assets/javascripts/ide/stores/modules/pipelines/getters.js
View file @
e3ba5333
import
{
states
}
from
'
./constants
'
;
export
const
hasLatestPipeline
=
state
=>
!
state
.
isLoadingPipeline
&&
!!
state
.
latestPipeline
;
export
const
hasLatestPipeline
=
state
=>
!
state
.
isLoadingPipeline
&&
Boolean
(
state
.
latestPipeline
)
;
export
const
pipelineFailed
=
state
=>
state
.
latestPipeline
&&
state
.
latestPipeline
.
details
.
status
.
text
===
states
.
failed
;
...
...
app/assets/javascripts/ide/stores/mutations.js
View file @
e3ba5333
...
...
@@ -142,7 +142,7 @@ export default {
Object
.
assign
(
state
.
entries
[
file
.
path
],
{
raw
:
file
.
content
,
changed
:
!!
changedFile
,
changed
:
Boolean
(
changedFile
)
,
staged
:
false
,
prevPath
:
''
,
moved
:
false
,
...
...
app/assets/javascripts/image_diff/helpers/comment_indicator_helper.js
View file @
e3ba5333
...
...
@@ -14,7 +14,7 @@ export function addCommentIndicator(containerEl, { x, y }) {
export
function
removeCommentIndicator
(
imageFrameEl
)
{
const
commentIndicatorEl
=
imageFrameEl
.
querySelector
(
'
.comment-indicator
'
);
const
imageEl
=
imageFrameEl
.
querySelector
(
'
img
'
);
const
willRemove
=
!!
commentIndicatorEl
;
const
willRemove
=
Boolean
(
commentIndicatorEl
)
;
let
meta
=
{};
if
(
willRemove
)
{
...
...
app/assets/javascripts/image_diff/image_diff.js
View file @
e3ba5333
...
...
@@ -6,8 +6,8 @@ import { isImageLoaded } from '../lib/utils/image_utility';
export
default
class
ImageDiff
{
constructor
(
el
,
options
)
{
this
.
el
=
el
;
this
.
canCreateNote
=
!!
(
options
&&
options
.
canCreateNote
);
this
.
renderCommentBadge
=
!!
(
options
&&
options
.
renderCommentBadge
);
this
.
canCreateNote
=
Boolean
(
options
&&
options
.
canCreateNote
);
this
.
renderCommentBadge
=
Boolean
(
options
&&
options
.
renderCommentBadge
);
this
.
$noteContainer
=
$
(
'
.note-container
'
,
this
.
el
);
this
.
imageBadges
=
[];
}
...
...
app/assets/javascripts/image_diff/view_types.js
View file @
e3ba5333
...
...
@@ -5,5 +5,5 @@ export const viewTypes = {
};
export
function
isValidViewType
(
validate
)
{
return
!!
Object
.
getOwnPropertyNames
(
viewTypes
).
find
(
viewType
=>
viewType
===
validate
);
return
Boolean
(
Object
.
getOwnPropertyNames
(
viewTypes
).
find
(
viewType
=>
viewType
===
validate
)
);
}
app/assets/javascripts/issuable_index.js
View file @
e3ba5333
...
...
@@ -12,7 +12,7 @@ export default class IssuableIndex {
}
initBulkUpdate
(
pagePrefix
)
{
const
userCanBulkUpdate
=
$
(
'
.issues-bulk-update
'
).
length
>
0
;
const
alreadyInitialized
=
!!
this
.
bulkUpdateSidebar
;
const
alreadyInitialized
=
Boolean
(
this
.
bulkUpdateSidebar
)
;
if
(
userCanBulkUpdate
&&
!
alreadyInitialized
)
{
IssuableBulkUpdateActions
.
init
({
...
...
app/assets/javascripts/issue_show/components/app.vue
View file @
e3ba5333
...
...
@@ -156,7 +156,7 @@ export default {
return
this
.
store
.
formState
;
},
hasUpdated
()
{
return
!!
this
.
state
.
updatedAt
;
return
Boolean
(
this
.
state
.
updatedAt
)
;
},
issueChanged
()
{
const
{
...
...
app/assets/javascripts/label_manager.js
View file @
e3ba5333
...
...
@@ -53,7 +53,7 @@ export default class LabelManager {
toggleEmptyState
(
$label
,
$btn
,
action
)
{
this
.
emptyState
.
classList
.
toggle
(
'
hidden
'
,
!!
this
.
prioritizedLabels
[
0
].
querySelector
(
'
:scope > li
'
),
Boolean
(
this
.
prioritizedLabels
[
0
].
querySelector
(
'
:scope > li
'
)
),
);
}
...
...
app/assets/javascripts/lib/utils/accessor.js
View file @
e3ba5333
...
...
@@ -2,7 +2,7 @@ function isPropertyAccessSafe(base, property) {
let
safe
;
try
{
safe
=
!!
base
[
property
]
;
safe
=
Boolean
(
base
[
property
])
;
}
catch
(
error
)
{
safe
=
false
;
}
...
...
app/assets/javascripts/lib/utils/datetime_utility.js
View file @
e3ba5333
...
...
@@ -513,7 +513,7 @@ export const stringifyTime = (timeObject, fullNameFormat = false) => {
const
reducedTime
=
_
.
reduce
(
timeObject
,
(
memo
,
unitValue
,
unitName
)
=>
{
const
isNonZero
=
!!
unitValue
;
const
isNonZero
=
Boolean
(
unitValue
)
;
if
(
fullNameFormat
&&
isNonZero
)
{
// Remove traling 's' if unit value is singular
...
...
app/assets/javascripts/lib/utils/text_markdown.js
View file @
e3ba5333
...
...
@@ -223,9 +223,9 @@ export function insertMarkdownText({
return
tag
.
replace
(
textPlaceholder
,
val
);
}
if
(
val
.
indexOf
(
tag
)
===
0
)
{
return
''
+
val
.
replace
(
tag
,
''
);
return
String
(
val
.
replace
(
tag
,
''
)
);
}
else
{
return
''
+
tag
+
val
;
return
String
(
tag
)
+
val
;
}
})
.
join
(
'
\n
'
);
...
...
@@ -233,7 +233,7 @@ export function insertMarkdownText({
}
else
if
(
tag
.
indexOf
(
textPlaceholder
)
>
-
1
)
{
textToInsert
=
tag
.
replace
(
textPlaceholder
,
selected
);
}
else
{
textToInsert
=
''
+
startChar
+
tag
+
selected
+
(
wrap
?
tag
:
'
'
);
textToInsert
=
String
(
startChar
)
+
tag
+
selected
+
(
wrap
?
tag
:
'
'
);
}
if
(
removedFirstNewLine
)
{
...
...
app/assets/javascripts/mr_notes/stores/getters.js
View file @
e3ba5333
export
default
{
isLoggedIn
(
state
,
getters
)
{
return
!!
getters
.
getUserData
.
id
;
return
Boolean
(
getters
.
getUserData
.
id
)
;
},
};
app/assets/javascripts/notes/components/discussion_notes.vue
View file @
e3ba5333
...
...
@@ -49,7 +49,7 @@ export default {
computed
:
{
...
mapGetters
([
'
userCanReply
'
]),
hasReplies
()
{
return
!!
this
.
replies
.
length
;
return
Boolean
(
this
.
replies
.
length
)
;
},
replies
()
{
return
this
.
discussion
.
notes
.
slice
(
1
);
...
...
app/assets/javascripts/notes/components/noteable_note.vue
View file @
e3ba5333
...
...
@@ -75,7 +75,7 @@ export default {
};
},
canReportAsAbuse
()
{
return
!!
this
.
note
.
report_abuse_path
&&
this
.
author
.
id
!==
this
.
getUserData
.
id
;
return
Boolean
(
this
.
note
.
report_abuse_path
)
&&
this
.
author
.
id
!==
this
.
getUserData
.
id
;
},
noteAnchorId
()
{
return
`note_
${
this
.
note
.
id
}
`
;
...
...
app/assets/javascripts/notes/mixins/issuable_state.js
View file @
e3ba5333
export
default
{
methods
:
{
isConfidential
(
issue
)
{
return
!!
issue
.
confidential
;
return
Boolean
(
issue
.
confidential
)
;
},
isLocked
(
issue
)
{
return
!!
issue
.
discussion_locked
;
return
Boolean
(
issue
.
discussion_locked
)
;
},
hasWarning
(
issue
)
{
...
...
app/assets/javascripts/notes/stores/getters.js
View file @
e3ba5333
...
...
@@ -20,7 +20,7 @@ export const getNoteableData = state => state.noteableData;
export
const
getNoteableDataByProp
=
state
=>
prop
=>
state
.
noteableData
[
prop
];
export
const
userCanReply
=
state
=>
!!
state
.
noteableData
.
current_user
.
can_create_note
;
export
const
userCanReply
=
state
=>
Boolean
(
state
.
noteableData
.
current_user
.
can_create_note
)
;
export
const
openState
=
state
=>
state
.
noteableData
.
state
;
...
...
app/assets/javascripts/pages/projects/pipeline_schedules/shared/components/interval_pattern_input.vue
View file @
e3ba5333
...
...
@@ -29,7 +29,7 @@ export default {
// The text input is editable when there's a custom interval, or when it's
// a preset interval and the user clicks the 'custom' radio button
isEditable
()
{
return
!!
(
this
.
customInputEnabled
||
!
this
.
intervalIsPreset
);
return
Boolean
(
this
.
customInputEnabled
||
!
this
.
intervalIsPreset
);
},
},
watch
:
{
...
...
app/assets/javascripts/profile/account/index.js
View file @
e3ba5333
...
...
@@ -35,7 +35,7 @@ export default () => {
return
createElement
(
'
delete-account-modal
'
,
{
props
:
{
actionUrl
:
deleteAccountModalEl
.
dataset
.
actionUrl
,
confirmWithPassword
:
!!
deleteAccountModalEl
.
dataset
.
confirmWithPassword
,
confirmWithPassword
:
Boolean
(
deleteAccountModalEl
.
dataset
.
confirmWithPassword
)
,
username
:
deleteAccountModalEl
.
dataset
.
username
,
},
});
...
...
app/assets/javascripts/projects/gke_cluster_dropdowns/store/actions.js
View file @
e3ba5333
...
...
@@ -57,7 +57,7 @@ export const validateProjectBilling = ({ dispatch, commit, state }) =>
resp
=>
{
const
{
billingEnabled
}
=
resp
.
result
;
commit
(
types
.
SET_PROJECT_BILLING_STATUS
,
!!
billingEnabled
);
commit
(
types
.
SET_PROJECT_BILLING_STATUS
,
Boolean
(
billingEnabled
)
);
dispatch
(
'
setIsValidatingProjectBilling
'
,
false
);
resolve
();
},
...
...
app/assets/javascripts/projects/gke_cluster_dropdowns/store/getters.js
View file @
e3ba5333
export
const
hasProject
=
state
=>
!!
state
.
selectedProject
.
projectId
;
export
const
hasZone
=
state
=>
!!
state
.
selectedZone
;
export
const
hasMachineType
=
state
=>
!!
state
.
selectedMachineType
;
export
const
hasProject
=
state
=>
Boolean
(
state
.
selectedProject
.
projectId
)
;
export
const
hasZone
=
state
=>
Boolean
(
state
.
selectedZone
)
;
export
const
hasMachineType
=
state
=>
Boolean
(
state
.
selectedMachineType
)
;
app/assets/javascripts/registry/stores/mutations.js
View file @
e3ba5333
...
...
@@ -9,7 +9,7 @@ export default {
[
types
.
SET_REPOS_LIST
](
state
,
list
)
{
Object
.
assign
(
state
,
{
repos
:
list
.
map
(
el
=>
({
canDelete
:
!!
el
.
destroy_path
,
canDelete
:
Boolean
(
el
.
destroy_path
)
,
destroyPath
:
el
.
destroy_path
,
id
:
el
.
id
,
isLoading
:
false
,
...
...
@@ -42,7 +42,7 @@ export default {
location
:
element
.
location
,
createdAt
:
element
.
created_at
,
destroyPath
:
element
.
destroy_path
,
canDelete
:
!!
element
.
destroy_path
,
canDelete
:
Boolean
(
element
.
destroy_path
)
,
}));
},
...
...
app/assets/javascripts/right_sidebar.js
View file @
e3ba5333
...
...
@@ -82,9 +82,9 @@ Sidebar.prototype.toggleTodo = function(e) {
ajaxType
=
$this
.
data
(
'
deletePath
'
)
?
'
delete
'
:
'
post
'
;
if
(
$this
.
data
(
'
deletePath
'
))
{
url
=
''
+
$this
.
data
(
'
deletePath
'
);
url
=
String
(
$this
.
data
(
'
deletePath
'
)
);
}
else
{
url
=
''
+
$this
.
data
(
'
createPath
'
);
url
=
String
(
$this
.
data
(
'
createPath
'
)
);
}
$this
.
tooltip
(
'
hide
'
);
...
...
app/assets/javascripts/search_autocomplete.js
View file @
e3ba5333
...
...
@@ -379,7 +379,7 @@ export class SearchAutocomplete {
}
}
}
this
.
wrap
.
toggleClass
(
'
has-value
'
,
!!
e
.
target
.
value
);
this
.
wrap
.
toggleClass
(
'
has-value
'
,
Boolean
(
e
.
target
.
value
)
);
}
onSearchInputFocus
()
{
...
...
@@ -396,7 +396,7 @@ export class SearchAutocomplete {
onClearInputClick
(
e
)
{
e
.
preventDefault
();
this
.
wrap
.
toggleClass
(
'
has-value
'
,
!!
e
.
target
.
value
);
this
.
wrap
.
toggleClass
(
'
has-value
'
,
Boolean
(
e
.
target
.
value
)
);
return
this
.
searchInput
.
val
(
''
).
focus
();
}
...
...
app/assets/javascripts/sidebar/components/time_tracking/time_tracker.vue
View file @
e3ba5333
...
...
@@ -49,10 +49,10 @@ export default {
},
computed
:
{
hasTimeSpent
()
{
return
!!
this
.
timeSpent
;
return
Boolean
(
this
.
timeSpent
)
;
},
hasTimeEstimate
()
{
return
!!
this
.
timeEstimate
;
return
Boolean
(
this
.
timeEstimate
)
;
},
showComparisonState
()
{
return
this
.
hasTimeEstimate
&&
this
.
hasTimeSpent
;
...
...
@@ -67,7 +67,7 @@ export default {
return
!
this
.
hasTimeEstimate
&&
!
this
.
hasTimeSpent
;
},
showHelpState
()
{
return
!!
this
.
showHelp
;
return
Boolean
(
this
.
showHelp
)
;
},
},
created
()
{
...
...
app/assets/javascripts/vue_merge_request_widget/components/deployment.vue
View file @
e3ba5333
...
...
@@ -77,16 +77,16 @@ export default {
return
this
.
deployment
.
external_url
;
},
hasExternalUrls
()
{
return
!!
(
this
.
deployment
.
external_url
&&
this
.
deployment
.
external_url_formatted
);
return
Boolean
(
this
.
deployment
.
external_url
&&
this
.
deployment
.
external_url_formatted
);
},
hasDeploymentTime
()
{
return
!!
(
this
.
deployment
.
deployed_at
&&
this
.
deployment
.
deployed_at_formatted
);
return
Boolean
(
this
.
deployment
.
deployed_at
&&
this
.
deployment
.
deployed_at_formatted
);
},
hasDeploymentMeta
()
{
return
!!
(
this
.
deployment
.
url
&&
this
.
deployment
.
name
);
return
Boolean
(
this
.
deployment
.
url
&&
this
.
deployment
.
name
);
},
hasMetrics
()
{
return
!!
this
.
deployment
.
metrics_url
;
return
Boolean
(
this
.
deployment
.
metrics_url
)
;
},
deployedText
()
{
return
this
.
$options
.
deployedTextMap
[
this
.
deployment
.
status
];
...
...
app/assets/javascripts/vue_merge_request_widget/components/mr_widget_pipeline_container.vue
View file @
e3ba5333
...
...
@@ -56,7 +56,7 @@ export default {
return
this
.
isPostMerge
?
this
.
mr
.
mergePipeline
:
this
.
mr
.
pipeline
;
},
showVisualReviewAppLink
()
{
return
!!
(
this
.
mr
.
visualReviewFF
&&
this
.
mr
.
visualReviewAppAvailable
);
return
Boolean
(
this
.
mr
.
visualReviewFF
&&
this
.
mr
.
visualReviewAppAvailable
);
},
},
};
...
...
app/assets/javascripts/vue_merge_request_widget/mr_widget_options.vue
View file @
e3ba5333
...
...
@@ -97,7 +97,7 @@ export default {
return
this
.
mr
.
hasCI
;
},
shouldRenderRelatedLinks
()
{
return
!!
this
.
mr
.
relatedLinks
&&
!
this
.
mr
.
isNothingToMergeState
;
return
Boolean
(
this
.
mr
.
relatedLinks
)
&&
!
this
.
mr
.
isNothingToMergeState
;
},
shouldRenderSourceBranchRemovalStatus
()
{
return
(
...
...
app/assets/javascripts/vue_merge_request_widget/stores/mr_widget_store.js
View file @
e3ba5333
...
...
@@ -79,7 +79,7 @@ export default class MergeRequestStore {
this
.
autoMergeStrategy
=
data
.
auto_merge_strategy
;
this
.
mergePath
=
data
.
merge_path
;
this
.
ffOnlyEnabled
=
data
.
ff_only_enabled
;
this
.
shouldBeRebased
=
!!
data
.
should_be_rebased
;
this
.
shouldBeRebased
=
Boolean
(
data
.
should_be_rebased
)
;
this
.
statusPath
=
data
.
status_path
;
this
.
emailPatchesPath
=
data
.
email_patches_path
;
this
.
plainDiffPath
=
data
.
plain_diff_path
;
...
...
@@ -92,9 +92,9 @@ export default class MergeRequestStore {
this
.
isOpen
=
data
.
state
===
'
opened
'
;
this
.
hasMergeableDiscussionsState
=
data
.
mergeable_discussions_state
===
false
;
this
.
canRemoveSourceBranch
=
currentUser
.
can_remove_source_branch
||
false
;
this
.
canMerge
=
!!
data
.
merge_path
;
this
.
canMerge
=
Boolean
(
data
.
merge_path
)
;
this
.
canCreateIssue
=
currentUser
.
can_create_issue
||
false
;
this
.
canCancelAutomaticMerge
=
!!
data
.
cancel_auto_merge_path
;
this
.
canCancelAutomaticMerge
=
Boolean
(
data
.
cancel_auto_merge_path
)
;
this
.
isSHAMismatch
=
this
.
sha
!==
data
.
diff_head_sha
;
this
.
canBeMerged
=
data
.
can_be_merged
||
false
;
this
.
isMergeAllowed
=
data
.
mergeable
||
false
;
...
...
app/assets/javascripts/vue_shared/components/pikaday.vue
View file @
e3ba5333
...
...
@@ -34,7 +34,7 @@ export default {
format
:
'
yyyy-mm-dd
'
,
container
:
this
.
$el
,
defaultDate
:
this
.
selectedDate
,
setDefaultDate
:
!!
this
.
selectedDate
,
setDefaultDate
:
Boolean
(
this
.
selectedDate
)
,
minDate
:
this
.
minDate
,
maxDate
:
this
.
maxDate
,
parse
:
dateString
=>
parsePikadayDate
(
dateString
),
...
...
app/assets/javascripts/vue_shared/components/table_pagination.vue
View file @
e3ba5333
...
...
@@ -121,7 +121,7 @@ export default {
this
.
change
(
1
);
break
;
default
:
this
.
change
(
+
text
);
this
.
change
(
Number
(
text
)
);
break
;
}
},
...
...
babel.config.js
View file @
e3ba5333
...
...
@@ -39,7 +39,7 @@ if (BABEL_ENV === 'karma' || BABEL_ENV === 'coverage') {
}
// Jest is running in node environment, so we need additional plugins
const
isJest
=
!!
process
.
env
.
JEST_WORKER_ID
;
const
isJest
=
Boolean
(
process
.
env
.
JEST_WORKER_ID
)
;
if
(
isJest
)
{
plugins
.
push
(
'
@babel/plugin-transform-modules-commonjs
'
);
/*
...
...
doc/topics/autodevops/index.md
View file @
e3ba5333
...
...
@@ -582,16 +582,17 @@ Note that a post-install hook means that if any deploy succeeds,
If present,
`DB_MIGRATE`
will be run as a shell command within an application pod as
a helm pre-upgrade hook.
For example, in a Rails application:
For example, in a Rails application in an image built with
[
Herokuish
](
https://github.com/gliderlabs/herokuish
)
:
-
`DB_INITIALIZE`
can be set to
`cd /app && RAILS_ENV=production
bin/setup`
-
`DB_MIGRATE`
can be set to
`cd /app && RAILS_ENV=production bin/update`
-
`DB_INITIALIZE`
can be set to
`RAILS_ENV=production /bin/herokuish procfile exec bin/rails db:setup`
-
`DB_MIGRATE`
can be set to
`RAILS_ENV=production /bin/herokuish procfile exec bin/rails db:migrate`
NOTE:
**Note:**
The
`/app`
path is the directory of your project inside the docker image
as
[
configured by
Herokuish
](
https://github.com/gliderlabs/herokuish#paths
)
Unless you have a
`Dockerfile`
in your repo, your image is built with
Herokuish. You must prefix commands run in these images with
`/bin/herokuish
procfile exec`
in order to replicate the the environment your application is
run in.
### Auto Monitoring
...
...
spec/frontend/helpers/vue_test_utils_helper.js
View file @
e3ba5333
...
...
@@ -16,4 +16,6 @@ const vNodeContainsText = (vnode, text) =>
* @param {String} text
*/
export
const
shallowWrapperContainsSlotText
=
(
shallowWrapper
,
slotName
,
text
)
=>
!!
shallowWrapper
.
vm
.
$slots
[
slotName
].
filter
(
vnode
=>
vNodeContainsText
(
vnode
,
text
)).
length
;
Boolean
(
shallowWrapper
.
vm
.
$slots
[
slotName
].
filter
(
vnode
=>
vNodeContainsText
(
vnode
,
text
)).
length
,
);
spec/javascripts/helpers/vue_test_utils_helper.js
View file @
e3ba5333
...
...
@@ -16,4 +16,6 @@ const vNodeContainsText = (vnode, text) =>
* @param {String} text
*/
export
const
shallowWrapperContainsSlotText
=
(
shallowWrapper
,
slotName
,
text
)
=>
!!
shallowWrapper
.
vm
.
$slots
[
slotName
].
filter
(
vnode
=>
vNodeContainsText
(
vnode
,
text
)).
length
;
Boolean
(
shallowWrapper
.
vm
.
$slots
[
slotName
].
filter
(
vnode
=>
vNodeContainsText
(
vnode
,
text
)).
length
,
);
spec/javascripts/matchers.js
View file @
e3ba5333
...
...
@@ -28,7 +28,7 @@ export default {
reference
.
getAttribute
(
'
xlink:href
'
).
endsWith
(
`#
${
iconName
}
`
),
);
const
result
=
{
pass
:
!!
matchingIcon
,
pass
:
Boolean
(
matchingIcon
)
,
};
if
(
result
.
pass
)
{
...
...
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