Loading GitLab/API.pm +7 −2 Original line number Diff line number Diff line Loading @@ -18,6 +18,7 @@ use URI::Escape; use URI::QueryParam; use GitLab::API::Cache; use GitLab::API::Guard; use GitLab::API::Iterator; use parent "Exporter"; Loading Loading @@ -123,7 +124,7 @@ sub new { } sub sudo { my ($self, $who) = @_; my ($self, $who, $code) = @_; carp "Using sudo() without administrator privileges" if defined $who && !$self->is_admin; Loading @@ -132,7 +133,11 @@ sub sudo { $self->http->default_header(Sudo => $who); $self->{impersonate} = $who; return; # don't return default_header's output return if !defined $who || (!defined wantarray && !defined $code); my $guard = GitLab::API::Guard->new(sub { $self->sudo(undef); }); return $code->() if defined $code; return $guard; } sub http { return shift->{http}; } Loading GitLab/API/Guard.pm 0 → 100644 +13 −0 Original line number Diff line number Diff line package GitLab::API::Guard; sub new { my ($class, $clean) = @_; bless { _clean => $clean }, $class; } sub DESTROY { my ($self) = @_; $self->{_clean}->() if defined $self->{_clean}; } 1; Loading
GitLab/API.pm +7 −2 Original line number Diff line number Diff line Loading @@ -18,6 +18,7 @@ use URI::Escape; use URI::QueryParam; use GitLab::API::Cache; use GitLab::API::Guard; use GitLab::API::Iterator; use parent "Exporter"; Loading Loading @@ -123,7 +124,7 @@ sub new { } sub sudo { my ($self, $who) = @_; my ($self, $who, $code) = @_; carp "Using sudo() without administrator privileges" if defined $who && !$self->is_admin; Loading @@ -132,7 +133,11 @@ sub sudo { $self->http->default_header(Sudo => $who); $self->{impersonate} = $who; return; # don't return default_header's output return if !defined $who || (!defined wantarray && !defined $code); my $guard = GitLab::API::Guard->new(sub { $self->sudo(undef); }); return $code->() if defined $code; return $guard; } sub http { return shift->{http}; } Loading
GitLab/API/Guard.pm 0 → 100644 +13 −0 Original line number Diff line number Diff line package GitLab::API::Guard; sub new { my ($class, $clean) = @_; bless { _clean => $clean }, $class; } sub DESTROY { my ($self) = @_; $self->{_clean}->() if defined $self->{_clean}; } 1;