protected function getCustomTransactionOldValue(PhabricatorLiskDAO $object, PhabricatorApplicationTransaction $xaction)
 {
     switch ($xaction->getTransactionType()) {
         case PhabricatorRepositoryTransaction::TYPE_VCS:
             return $object->getVersionControlSystem();
         case PhabricatorRepositoryTransaction::TYPE_ACTIVATE:
             return $object->isTracked();
         case PhabricatorRepositoryTransaction::TYPE_NAME:
             return $object->getName();
         case PhabricatorRepositoryTransaction::TYPE_DESCRIPTION:
             return $object->getDetail('description');
         case PhabricatorRepositoryTransaction::TYPE_ENCODING:
             return $object->getDetail('encoding');
         case PhabricatorRepositoryTransaction::TYPE_DEFAULT_BRANCH:
             return $object->getDetail('default-branch');
         case PhabricatorRepositoryTransaction::TYPE_TRACK_ONLY:
             return array_keys($object->getDetail('branch-filter', array()));
         case PhabricatorRepositoryTransaction::TYPE_AUTOCLOSE_ONLY:
             return array_keys($object->getDetail('close-commits-filter', array()));
         case PhabricatorRepositoryTransaction::TYPE_UUID:
             return $object->getUUID();
         case PhabricatorRepositoryTransaction::TYPE_SVN_SUBPATH:
             return $object->getDetail('svn-subpath');
         case PhabricatorRepositoryTransaction::TYPE_NOTIFY:
             return (int) (!$object->getDetail('herald-disabled'));
         case PhabricatorRepositoryTransaction::TYPE_AUTOCLOSE:
             return (int) (!$object->getDetail('disable-autoclose'));
         case PhabricatorRepositoryTransaction::TYPE_REMOTE_URI:
             return $object->getDetail('remote-uri');
         case PhabricatorRepositoryTransaction::TYPE_LOCAL_PATH:
             return $object->getDetail('local-path');
         case PhabricatorRepositoryTransaction::TYPE_HOSTING:
             return $object->isHosted();
         case PhabricatorRepositoryTransaction::TYPE_PROTOCOL_HTTP:
             return $object->getServeOverHTTP();
         case PhabricatorRepositoryTransaction::TYPE_PROTOCOL_SSH:
             return $object->getServeOverSSH();
         case PhabricatorRepositoryTransaction::TYPE_PUSH_POLICY:
             return $object->getPushPolicy();
         case PhabricatorRepositoryTransaction::TYPE_CREDENTIAL:
             return $object->getCredentialPHID();
         case PhabricatorRepositoryTransaction::TYPE_DANGEROUS:
             return $object->shouldAllowDangerousChanges();
         case PhabricatorRepositoryTransaction::TYPE_SLUG:
             return $object->getRepositorySlug();
         case PhabricatorRepositoryTransaction::TYPE_SERVICE:
             return $object->getAlmanacServicePHID();
         case PhabricatorRepositoryTransaction::TYPE_SYMBOLS_LANGUAGE:
             return $object->getSymbolLanguages();
         case PhabricatorRepositoryTransaction::TYPE_SYMBOLS_SOURCES:
             return $object->getSymbolSources();
         case PhabricatorRepositoryTransaction::TYPE_STAGING_URI:
             return $object->getDetail('staging-uri');
         case PhabricatorRepositoryTransaction::TYPE_AUTOMATION_BLUEPRINTS:
             return $object->getDetail('automation.blueprintPHIDs', array());
     }
 }
 protected function getCustomTransactionOldValue(PhabricatorLiskDAO $object, PhabricatorApplicationTransaction $xaction)
 {
     switch ($xaction->getTransactionType()) {
         case HarbormasterBuildStepTransaction::TYPE_CREATE:
             return null;
         case HarbormasterBuildStepTransaction::TYPE_NAME:
             if ($this->getIsNewObject()) {
                 return null;
             }
             return $object->getName();
         case HarbormasterBuildStepTransaction::TYPE_DEPENDS_ON:
             if ($this->getIsNewObject()) {
                 return null;
             }
             return $object->getDetail('dependsOn', array());
         case HarbormasterBuildStepTransaction::TYPE_DESCRIPTION:
             if ($this->getIsNewObject()) {
                 return null;
             }
             return $object->getDescription();
     }
     return parent::getCustomTransactionOldValue($object, $xaction);
 }
 protected function applyFinalEffects(PhabricatorLiskDAO $object, array $xactions)
 {
     // If the repository does not have a local path yet, assign it one based
     // on its ID. We can't do this earlier because we won't have an ID yet.
     $local_path = $object->getDetail('local-path');
     if (!strlen($local_path)) {
         $local_key = 'repository.default-local-path';
         $local_root = PhabricatorEnv::getEnvConfig($local_key);
         $local_root = rtrim($local_root, '/');
         $id = $object->getID();
         $local_path = "{$local_root}/{$id}/";
         $object->setDetail('local-path', $local_path);
         $object->save();
     }
     return $xactions;
 }