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
	 epriestley
					epriestley