From 8e416474c06398857a990bb0bd6d4725ab17f100 Mon Sep 17 00:00:00 2001 From: epriestley Date: Wed, 13 Dec 2017 05:52:39 -0800 Subject: [PATCH] Add a Herald pre-commit field for detecting LFS usage Summary: Depends on D18825. Ref T7789. See PHI131. Allows installs to selectively disable LFS by adding Herald rules to block commits that use LFS. Test Plan: - Wrote an LFS rule ("When commit uses git lfs, block commit"). - Pushed an LFS commit: rejected. - Pushed a non-lFS commit: success. Reviewers: amckinley Reviewed By: amckinley Maniphest Tasks: T7789 Differential Revision: https://secure.phabricator.com/D18827 --- src/__phutil_library_map__.php | 2 + ...iffusionPreCommitUsesGitLFSHeraldField.php | 41 +++++++++++++++++++ 2 files changed, 43 insertions(+) create mode 100644 src/applications/diffusion/herald/DiffusionPreCommitUsesGitLFSHeraldField.php diff --git a/src/__phutil_library_map__.php b/src/__phutil_library_map__.php index 924e81a5ff..f86b3a1d2d 100644 --- a/src/__phutil_library_map__.php +++ b/src/__phutil_library_map__.php @@ -821,6 +821,7 @@ phutil_register_library_map(array( 'DiffusionPreCommitRefRepositoryHeraldField' => 'applications/diffusion/herald/DiffusionPreCommitRefRepositoryHeraldField.php', 'DiffusionPreCommitRefRepositoryProjectsHeraldField' => 'applications/diffusion/herald/DiffusionPreCommitRefRepositoryProjectsHeraldField.php', 'DiffusionPreCommitRefTypeHeraldField' => 'applications/diffusion/herald/DiffusionPreCommitRefTypeHeraldField.php', + 'DiffusionPreCommitUsesGitLFSHeraldField' => 'applications/diffusion/herald/DiffusionPreCommitUsesGitLFSHeraldField.php', 'DiffusionPullEventGarbageCollector' => 'applications/diffusion/garbagecollector/DiffusionPullEventGarbageCollector.php', 'DiffusionPushCapability' => 'applications/diffusion/capability/DiffusionPushCapability.php', 'DiffusionPushEventViewController' => 'applications/diffusion/controller/DiffusionPushEventViewController.php', @@ -5881,6 +5882,7 @@ phutil_register_library_map(array( 'DiffusionPreCommitRefRepositoryHeraldField' => 'DiffusionPreCommitRefHeraldField', 'DiffusionPreCommitRefRepositoryProjectsHeraldField' => 'DiffusionPreCommitRefHeraldField', 'DiffusionPreCommitRefTypeHeraldField' => 'DiffusionPreCommitRefHeraldField', + 'DiffusionPreCommitUsesGitLFSHeraldField' => 'DiffusionPreCommitContentHeraldField', 'DiffusionPullEventGarbageCollector' => 'PhabricatorGarbageCollector', 'DiffusionPushCapability' => 'PhabricatorPolicyCapability', 'DiffusionPushEventViewController' => 'DiffusionPushLogController', diff --git a/src/applications/diffusion/herald/DiffusionPreCommitUsesGitLFSHeraldField.php b/src/applications/diffusion/herald/DiffusionPreCommitUsesGitLFSHeraldField.php new file mode 100644 index 0000000000..3a34db777c --- /dev/null +++ b/src/applications/diffusion/herald/DiffusionPreCommitUsesGitLFSHeraldField.php @@ -0,0 +1,41 @@ +getAdapter()->getDiffContent('+'); + + // At the time of writing, all current Git LFS files begin with this + // line, verbatim: + // + // version https://git-lfs.github.com/spec/v1 + // + // ...but we don't try to match the specific version here, in the hopes + // that this might also detect future versions. + $pattern = '(^version\s*https://git-lfs.github.com/spec/)i'; + + foreach ($map as $path => $content) { + if (preg_match($pattern, $content)) { + return true; + } + } + + return false; + } + + protected function getHeraldFieldStandardType() { + return self::STANDARD_BOOL; + } + +} -- 2.51.2