diff options
Diffstat (limited to 'lib/gitlab/temporarily_allow.rb')
-rw-r--r-- | lib/gitlab/temporarily_allow.rb | 36 |
1 files changed, 36 insertions, 0 deletions
diff --git a/lib/gitlab/temporarily_allow.rb b/lib/gitlab/temporarily_allow.rb new file mode 100644 index 00000000000..2fd2fc63617 --- /dev/null +++ b/lib/gitlab/temporarily_allow.rb @@ -0,0 +1,36 @@ +module Gitlab + module TemporarilyAllow + TEMPORARILY_ALLOW_MUTEX = Mutex.new + + def temporarily_allow(key) + temporarily_allow_add(key, 1) + yield + ensure + temporarily_allow_add(key, -1) + end + + def temporarily_allowed?(key) + if RequestStore.active? + h = RequestStore[:temporarily_allow] + h && h[key] > 0 + else + TEMPORARILY_ALLOW_MUTEX.synchronize do + h = @temporarily_allow + h && h[key] > 0 + end + end + end + + def temporarily_allow_add(key, value) + if RequestStore.active? + RequestStore[:temporarily_allow] ||= Hash.new(0) + RequestStore[:temporarily_allow][key] += value + else + TEMPORARILY_ALLOW_MUTEX.synchronize do + @temporarily_allow ||= Hash.new(0) + @temporarily_allow[key] += value + end + end + end + end +end |