doc/user/project/img/deploy_boards_landing_page.png

42 KiB | W: | H:

doc/user/project/img/deploy_boards_landing_page.png

14.1 KiB | W: | H:

doc/user/project/img/deploy_boards_landing_page.png
doc/user/project/img/deploy_boards_landing_page.png
doc/user/project/img/deploy_boards_landing_page.png
doc/user/project/img/deploy_boards_landing_page.png
  • 2-up
  • Swipe
  • Onion skin
doc/user/project/img/issue_boards_blocked_icon_v12_8.png

64.8 KiB | W: | H:

doc/user/project/img/issue_boards_blocked_icon_v12_8.png

31.1 KiB | W: | H:

doc/user/project/img/issue_boards_blocked_icon_v12_8.png
doc/user/project/img/issue_boards_blocked_icon_v12_8.png
doc/user/project/img/issue_boards_blocked_icon_v12_8.png
doc/user/project/img/issue_boards_blocked_icon_v12_8.png
  • 2-up
  • Swipe
  • Onion skin
File moved
doc/user/project/img/labels_key_value_v12_1.png

163 KiB | W: | H:

doc/user/project/img/labels_key_value_v12_1.png

54.2 KiB | W: | H:

doc/user/project/img/labels_key_value_v12_1.png
doc/user/project/img/labels_key_value_v12_1.png
doc/user/project/img/labels_key_value_v12_1.png
doc/user/project/img/labels_key_value_v12_1.png
  • 2-up
  • Swipe
  • Onion skin
doc/user/project/integrations/img/grafana_embedded.png

62.6 KiB | W: | H:

doc/user/project/integrations/img/grafana_embedded.png

27.4 KiB | W: | H:

doc/user/project/integrations/img/grafana_embedded.png
doc/user/project/integrations/img/grafana_embedded.png
doc/user/project/integrations/img/grafana_embedded.png
doc/user/project/integrations/img/grafana_embedded.png
  • 2-up
  • Swipe
  • Onion skin
......@@ -180,18 +180,6 @@ These are shortcuts to your last 4 visited boards.
When you're revisiting an issue board in a project or group with multiple boards,
GitLab will automatically load the last board you visited.
### Multi-select Issue Cards
As the name suggest, multi-select issue cards allows more than one issue card
to be dragged and dropped across different lists. This becomes helpful while
moving and grooming a lot of issues at once.
You can multi-select an issue card by pressing `CTRL` + `Left mouse click` on
Windows or `CMD` + `Left mouse click` on MacOS. Once done, start by dragging one
of the issue card you have selected and drop it in the new list you want.
![Multi-select Issue Cards](img/issue_boards_multi_select.png)
### Configurable Issue Boards **(STARTER)**
> Introduced in [GitLab Starter Edition 10.2](https://about.gitlab.com/releases/2017/11/22/gitlab-10-2-released/#issue-boards-configuration).
......@@ -467,6 +455,19 @@ When dragging issues between lists, different behavior occurs depending on the s
| From label `A` list | `A` removed | Issue closed | `A` removed<br/>`B` added | `Bob` assigned |
| From assignee `Alice` list | `Alice` unassigned | Issue closed | `B` added | `Alice` unassigned<br/>`Bob` assigned |
### Multi-select issue cards
> [Introduced](https://gitlab.com/gitlab-org/gitlab/issues/18954) in GitLab 12.4.
You can select multiple issue cards, then drag the group to another position within the list, or to another list. This makes it faster to reorder many issues at once.
To select and move multiple cards:
1. Select each card with <kbd>Ctrl</kbd>+`Click` on Windows or Linux, or <kbd>Cmd</kbd>+`Click` on MacOS.
1. Drag one of the selected cards to another position or list and all selected cards will be moved.
![Multi-select Issue Cards](img/issue_boards_multi_select_v12_4.png)
## Tips
A few things to remember:
......
......
doc/user/project/issues/img/related_issue_block_v12_8.png

115 KiB | W: | H:

doc/user/project/issues/img/related_issue_block_v12_8.png

35 KiB | W: | H:

doc/user/project/issues/img/related_issue_block_v12_8.png
doc/user/project/issues/img/related_issue_block_v12_8.png
doc/user/project/issues/img/related_issue_block_v12_8.png
doc/user/project/issues/img/related_issue_block_v12_8.png
  • 2-up
  • Swipe
  • Onion skin
doc/user/project/issues/img/related_issues_add_v12_8.png

103 KiB | W: | H:

doc/user/project/issues/img/related_issues_add_v12_8.png

32.2 KiB | W: | H:

doc/user/project/issues/img/related_issues_add_v12_8.png
doc/user/project/issues/img/related_issues_add_v12_8.png
doc/user/project/issues/img/related_issues_add_v12_8.png
doc/user/project/issues/img/related_issues_add_v12_8.png
  • 2-up
  • Swipe
  • Onion skin
doc/user/project/issues/img/related_issues_remove_v12_8.png

35.2 KiB | W: | H:

doc/user/project/issues/img/related_issues_remove_v12_8.png

10.5 KiB | W: | H:

doc/user/project/issues/img/related_issues_remove_v12_8.png
doc/user/project/issues/img/related_issues_remove_v12_8.png
doc/user/project/issues/img/related_issues_remove_v12_8.png
doc/user/project/issues/img/related_issues_remove_v12_8.png
  • 2-up
  • Swipe
  • Onion skin
doc/user/project/merge_requests/img/approvals_premium_mr_widget_v12_7.png

194 KiB | W: | H:

doc/user/project/merge_requests/img/approvals_premium_mr_widget_v12_7.png

49 KiB | W: | H:

doc/user/project/merge_requests/img/approvals_premium_mr_widget_v12_7.png
doc/user/project/merge_requests/img/approvals_premium_mr_widget_v12_7.png
doc/user/project/merge_requests/img/approvals_premium_mr_widget_v12_7.png
doc/user/project/merge_requests/img/approvals_premium_mr_widget_v12_7.png
  • 2-up
  • Swipe
  • Onion skin
doc/user/project/merge_requests/img/mr_approvals_by_code_owners_v12_7.png

86.7 KiB | W: | H:

doc/user/project/merge_requests/img/mr_approvals_by_code_owners_v12_7.png

25 KiB | W: | H:

doc/user/project/merge_requests/img/mr_approvals_by_code_owners_v12_7.png
doc/user/project/merge_requests/img/mr_approvals_by_code_owners_v12_7.png
doc/user/project/merge_requests/img/mr_approvals_by_code_owners_v12_7.png
doc/user/project/merge_requests/img/mr_approvals_by_code_owners_v12_7.png
  • 2-up
  • Swipe
  • Onion skin
doc/user/project/merge_requests/img/scoped_to_protected_branch_v12_8.png

89.6 KiB | W: | H:

doc/user/project/merge_requests/img/scoped_to_protected_branch_v12_8.png

32.2 KiB | W: | H:

doc/user/project/merge_requests/img/scoped_to_protected_branch_v12_8.png
doc/user/project/merge_requests/img/scoped_to_protected_branch_v12_8.png
doc/user/project/merge_requests/img/scoped_to_protected_branch_v12_8.png
doc/user/project/merge_requests/img/scoped_to_protected_branch_v12_8.png
  • 2-up
  • Swipe
  • Onion skin
doc/user/project/releases/img/releases_count_v12_8.png

90.3 KiB | W: | H:

doc/user/project/releases/img/releases_count_v12_8.png

27 KiB | W: | H:

doc/user/project/releases/img/releases_count_v12_8.png
doc/user/project/releases/img/releases_count_v12_8.png
doc/user/project/releases/img/releases_count_v12_8.png
doc/user/project/releases/img/releases_count_v12_8.png
  • 2-up
  • Swipe
  • Onion skin
doc/user/project/releases/img/upcoming_release_v12_7.png

85.7 KiB | W: | H:

doc/user/project/releases/img/upcoming_release_v12_7.png

22.7 KiB | W: | H:

doc/user/project/releases/img/upcoming_release_v12_7.png
doc/user/project/releases/img/upcoming_release_v12_7.png
doc/user/project/releases/img/upcoming_release_v12_7.png
doc/user/project/releases/img/upcoming_release_v12_7.png
  • 2-up
  • Swipe
  • Onion skin
doc/user/project/repository/img/forking_workflow_fork_button.png

26.8 KiB | W: | H:

doc/user/project/repository/img/forking_workflow_fork_button.png

10.1 KiB | W: | H:

doc/user/project/repository/img/forking_workflow_fork_button.png
doc/user/project/repository/img/forking_workflow_fork_button.png
doc/user/project/repository/img/forking_workflow_fork_button.png
doc/user/project/repository/img/forking_workflow_fork_button.png
  • 2-up
  • Swipe
  • Onion skin
......@@ -19,7 +19,7 @@ Unfortunately, it's not so easy and that workflow won't work. Deleting files in
a commit doesn't actually reduce the size of the repo since the earlier commits
and blobs are still around. What you need to do is rewrite history with Git's
[`filter-branch` option](https://git-scm.com/book/en/v2/Git-Tools-Rewriting-History#The-Nuclear-Option:-filter-branch),
or an open source community-maintained tool like the
or an open source community-maintained tool like the
[BFG](https://rtyley.github.io/bfg-repo-cleaner/).
Note that even with that method, until `git gc` runs on the GitLab side, the
......
......
......@@ -49,7 +49,7 @@ module Gitlab
return [uri, nil] unless address_info
ip_address = ip_address(address_info)
return [uri, nil] if domain_whitelisted?(uri) || ip_whitelisted?(ip_address)
return [uri, nil] if domain_whitelisted?(uri) || ip_whitelisted?(ip_address, port: get_port(uri))
protected_uri_with_hostname = enforce_uri_hostname(ip_address, uri, dns_rebind_protection)
......@@ -254,11 +254,11 @@ module Gitlab
end
def domain_whitelisted?(uri)
Gitlab::UrlBlockers::UrlWhitelist.domain_whitelisted?(uri.normalized_host)
Gitlab::UrlBlockers::UrlWhitelist.domain_whitelisted?(uri.normalized_host, port: get_port(uri))
end
def ip_whitelisted?(ip_address)
Gitlab::UrlBlockers::UrlWhitelist.ip_whitelisted?(ip_address)
def ip_whitelisted?(ip_address, port: nil)
Gitlab::UrlBlockers::UrlWhitelist.ip_whitelisted?(ip_address, port: port)
end
def config
......
......
# frozen_string_literal: true
module Gitlab
module UrlBlockers
class DomainWhitelistEntry
attr_reader :domain, :port
def initialize(domain, port: nil)
@domain = domain
@port = port
end
def match?(requested_domain, requested_port = nil)
return false unless domain == requested_domain
return true if port.nil?
port == requested_port
end
end
end
end
# frozen_string_literal: true
module Gitlab
module UrlBlockers
class IpWhitelistEntry
attr_reader :ip, :port
# Argument ip should be an IPAddr object
def initialize(ip, port: nil)
@ip = ip
@port = port
end
def match?(requested_ip, requested_port = nil)
return false unless ip.include?(requested_ip)
return true if port.nil?
port == requested_port
end
end
end
end
......@@ -4,21 +4,25 @@ module Gitlab
module UrlBlockers
class UrlWhitelist
class << self
def ip_whitelisted?(ip_string)
def ip_whitelisted?(ip_string, port: nil)
return false if ip_string.blank?
ip_whitelist, _ = outbound_local_requests_whitelist_arrays
ip_obj = Gitlab::Utils.string_to_ip_object(ip_string)
ip_whitelist.any? { |ip| ip.include?(ip_obj) }
ip_whitelist.any? do |ip_whitelist_entry|
ip_whitelist_entry.match?(ip_obj, port)
end
end
def domain_whitelisted?(domain_string)
def domain_whitelisted?(domain_string, port: nil)
return false if domain_string.blank?
_, domain_whitelist = outbound_local_requests_whitelist_arrays
domain_whitelist.include?(domain_string)
domain_whitelist.any? do |domain_whitelist_entry|
domain_whitelist_entry.match?(domain_string, port)
end
end
private
......
......