Reject dangerous changes in Git repositories by default
Summary: Ref T4189. This adds a per-repository "dangerous changes" flag, which defaults to off. This flag must be enabled to do non-appending branch mutation (delete branches / rewrite history).
Test Plan:
With flag on and off, performed various safe and dangerous pushes.
>>> orbital ~/repos/POEMS $ git push origin :blarp
remote: +---------------------------------------------------------------+
remote: | * * * PUSH REJECTED BY EVIL DRAGON BUREAUCRATS * * * |
remote: +---------------------------------------------------------------+
remote: \
remote: \ ^ /^
remote: \ / \ // \
remote: \ |\___/| / \// .\
remote: \ /V V \__ / // | \ \ *----*
remote: / / \/_/ // | \ \ \ |
remote: @___@` \/_ // | \ \ \/\ \
remote: 0/0/| \/_ // | \ \ \ \
remote: 0/0/0/0/| \/// | \ \ | |
remote: 0/0/0/0/0/_|_ / ( // | \ _\ | /
remote: 0/0/0/0/0/0/`/,_ _ _/ ) ; -. | _ _\.-~ / /
remote: ,-} _ *-.|.-~-. .~ ~
remote: \ \__/ `/\ / ~-. _ .-~ /
remote: \____(Oo) *. } { /
remote: ( (--) .----~-.\ \-` .~
remote: //__\\ \ DENIED! ///.----..< \ _ -~
remote: // \\ ///-._ _ _ _ _ _ _{^ - - - - ~
remote:
remote:
remote: DANGEROUS CHANGE: The change you're attempting to push deletes the branch 'blarp'.
remote: Dangerous change protection is enabled for this repository.
remote: Edit the repository configuration before making dangerous changes.
remote:
To ssh://dweller@localhost/diffusion/POEMS/
! [remote rejected] blarp (pre-receive hook declined)
error: failed to push some refs to 'ssh://dweller@localhost/diffusion/POEMS/'
Reviewers: btrahan
Reviewed By: btrahan
CC: aran, chad, richardvanvelzen
Maniphest Tasks: T4189
Differential Revision: https://secure.phabricator.com/D7689
This commit is contained in:
@@ -86,6 +86,43 @@ if ($repository->isHg()) {
|
||||
|
||||
$engine->setStdin($stdin);
|
||||
|
||||
$err = $engine->execute();
|
||||
try {
|
||||
$err = $engine->execute();
|
||||
} catch (DiffusionCommitHookRejectException $ex) {
|
||||
$console = PhutilConsole::getConsole();
|
||||
|
||||
if (PhabricatorEnv::getEnvConfig('phabricator.serious-business')) {
|
||||
$preamble = pht('*** PUSH REJECTED BY COMMIT HOOK ***');
|
||||
} else {
|
||||
$preamble = pht(<<<EOTXT
|
||||
+---------------------------------------------------------------+
|
||||
| * * * PUSH REJECTED BY EVIL DRAGON BUREAUCRATS * * * |
|
||||
+---------------------------------------------------------------+
|
||||
\
|
||||
\ ^ /^
|
||||
\ / \ // \
|
||||
\ |\___/| / \// .\
|
||||
\ /V V \__ / // | \ \ *----*
|
||||
/ / \/_/ // | \ \ \ |
|
||||
@___@` \/_ // | \ \ \/\ \
|
||||
0/0/| \/_ // | \ \ \ \
|
||||
0/0/0/0/| \/// | \ \ | |
|
||||
0/0/0/0/0/_|_ / ( // | \ _\ | /
|
||||
0/0/0/0/0/0/`/,_ _ _/ ) ; -. | _ _\.-~ / /
|
||||
,-} _ *-.|.-~-. .~ ~
|
||||
\ \__/ `/\ / ~-. _ .-~ /
|
||||
\____(Oo) *. } { /
|
||||
( (--) .----~-.\ \-` .~
|
||||
//__\\\\ \ DENIED! ///.----..< \ _ -~
|
||||
// \\\\ ///-._ _ _ _ _ _ _{^ - - - - ~
|
||||
|
||||
EOTXT
|
||||
);
|
||||
}
|
||||
|
||||
$console->writeErr("%s\n\n", $preamble);
|
||||
$console->writeErr("%s\n\n", $ex->getMessage());
|
||||
$err = 1;
|
||||
}
|
||||
|
||||
exit($err);
|
||||
|
||||
Reference in New Issue
Block a user