Commit:    abfc9e24ae4c347927259d8c4f4daabfa08407e6
Author:    David Soria Parra <d...@php.net>         Fri, 22 Jun 2012 18:55:59 
+0200
Parents:   9f700801135cca87ce65c61a8753d743650d6443
Branches:  master

Link:       
http://git.php.net/?p=karma.git;a=commitdiff;h=abfc9e24ae4c347927259d8c4f4daabfa08407e6

Log:
Deny overwriting commits on certain branches

We don't want people to be able to use force pushes on certain branches,
such as PHP-5.4/PHP-5.3/master.

Changed paths:
  M  hooks/pre-receive
  M  lib/Git/PushInformation.php


Diff:
diff --git a/hooks/pre-receive b/hooks/pre-receive
index b23fb2c..2fcfe42 100755
--- a/hooks/pre-receive
+++ b/hooks/pre-receive
@@ -23,6 +23,10 @@ include 'Git/PushInformation.php';
 include 'Git/ReceiveHook.php';
 include 'Git/PreReceiveHook.php';
 
+$restrictedBranches =
+    ['php-src.git' => ['refs/heads/PHP-5.4', 'refs/heads/PHP-5.3', 
'refs/heads/master'],
+     'playground.git' => ['refs/heads/dsp']];
+
 function deny($reason)
 {
     fwrite(STDERR, $reason . "\n");
@@ -121,6 +125,18 @@ if (empty($req_paths)) {
     $req_paths = ['']; // we can empty paths for trivial merge
 }
 
+$restricted = [];
+if (isset($restrictedBranches[$repo_name])) {
+    $restricted = array_filter($restrictedBranches[$repo_name],
+        function ($branch) use ($pi) {
+            return in_array($branch, $pi->getBranches());
+        });
+}
+
+if (count($restricted) > 0 && $pi->isForced()) {
+    deny("You are allowed to overwrite commits on " . implode(', ', 
$restricted));
+}
+
 $prefix          = sprintf('%s/', $repo_name);
 $avail_lines     = $hook->getKarmaFile();
 $req_paths       = array_map(function ($x) use ($prefix) { return $prefix . 
$x;}, $req_paths);
diff --git a/lib/Git/PushInformation.php b/lib/Git/PushInformation.php
index 8b54161..1ee1351 100644
--- a/lib/Git/PushInformation.php
+++ b/lib/Git/PushInformation.php
@@ -92,4 +92,10 @@ class PushInformation
 
         return array_reduce($result, function($a, $b) { return $a || $b; }, 
false);
     }
+
+    public function getBranches () {
+        return $this->hook->mapInput(function ($oldrev, $newrev, $refname) {
+            return $refname;
+        });
+    }
 }


--
PHP CVS Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php

Reply via email to