Inheritance: implements VersionPress\ChangeInfos\ChangeInfo
 /**
  * @test
  * @dataProvider changeInfosRepresentingBulkActions
  */
 public function bulkActionsAreGroupedIntoBulkChangeInfo($changeInfos)
 {
     $changeInfoEnvelope = new ChangeInfoEnvelope($changeInfos, '1.0');
     $groupedChangeInfoList = $changeInfoEnvelope->getReorganizedInfoList();
     $this->assertCount(1, $groupedChangeInfoList);
     $this->assertInstanceOf(BulkChangeInfo::class, $groupedChangeInfoList[0]);
 }
 /**
  * For a given commit message, creates ChangeInfoEnvelope containing all ChangeInfo.
  *
  * @param CommitMessage $commitMessage
  * @return ChangeInfoEnvelope|UntrackedChangeInfo
  */
 public static function buildChangeInfo(CommitMessage $commitMessage)
 {
     if (self::findMatchingChangeInfo($commitMessage) === 'VersionPress\\ChangeInfos\\UntrackedChangeInfo') {
         return UntrackedChangeInfo::buildFromCommitMessage($commitMessage);
     }
     return ChangeInfoEnvelope::buildFromCommitMessage($commitMessage);
 }
 /**
  * @param ChangeInfoEnvelope|UntrackedChangeInfo $changeInfo
  * @param string $fullAction
  * @return bool
  * @throws \Exception
  */
 public static function containsAction($changeInfo, $fullAction)
 {
     if ($changeInfo instanceof ChangeInfoEnvelope) {
         $changeInfos = $changeInfo->getChangeInfoList();
         foreach ($changeInfos as $ci) {
             if (self::getFullAction($ci) == $fullAction) {
                 return true;
             }
         }
         return false;
     } else {
         throw new \Exception("Only ChangeInfoEnvelopes are supported");
     }
 }
Example #4
0
 /**
  * Calls Git `add -A` on files that are related to the given $changeInfo.
  * The "exchange format" is an array documented in {@see TrackedChangedInfo::getChangedFiles()}.
  *
  * @param TrackedChangeInfo|ChangeInfoEnvelope $changeInfo
  */
 private function stageRelatedFiles($changeInfo)
 {
     if ($changeInfo instanceof ChangeInfoEnvelope) {
         /** @var TrackedChangeInfo $subChangeInfo */
         foreach ($changeInfo->getChangeInfoList() as $subChangeInfo) {
             $this->stageRelatedFiles($subChangeInfo);
         }
         return;
     }
     $changes = $changeInfo->getChangedFiles();
     foreach ($changes as $change) {
         if ($change["type"] === "storage-file") {
             $entityName = $change["entity"];
             $entityId = $change["id"];
             $parentId = $change["parent-id"];
             $path = $this->storageFactory->getStorage($entityName)->getEntityFilename($entityId, $parentId);
         } elseif ($change["type"] === "all-storage-files") {
             $entityName = $change["entity"];
             $path = $this->storageFactory->getStorage($entityName)->getPathCommonToAllEntities();
         } elseif ($change["type"] === "path") {
             $path = $change["path"];
         } else {
             continue;
         }
         $this->repository->stageAll($path);
     }
 }
 /**
  * Creates manual commit. Adds everything to stage.
  *
  * @param WP_REST_Request $request
  * @return WP_REST_Response|WP_Error
  */
 public function commit(WP_REST_Request $request)
 {
     $currentUser = wp_get_current_user();
     if ($currentUser->ID === 0) {
         return new WP_Error('error', 'You don\'t have permission to do this.', ['status' => 403]);
     }
     /** @noinspection PhpUndefinedFieldInspection */
     $authorName = $currentUser->display_name;
     /** @noinspection PhpUndefinedFieldInspection */
     $authorEmail = $currentUser->user_email;
     $this->gitRepository->stageAll();
     $status = $this->gitRepository->getStatus(true);
     if (ArrayUtils::any($status, function ($fileStatus) {
         $vpdbName = basename(VP_VPDB_DIR);
         return Strings::contains($fileStatus[1], $vpdbName);
     })) {
         $this->updateDatabase($status);
     }
     $commitMessage = new CommitMessage($request['commit-message']);
     $changeInfoEnvelope = new ChangeInfoEnvelope([new UntrackedChangeInfo($commitMessage)]);
     $this->gitRepository->commit($changeInfoEnvelope->getCommitMessage(), $authorName, $authorEmail);
     return new WP_REST_Response(true);
 }