Example #1
0
 /**
  * Executa comando
  *
  * @param Object $oInput
  * @param Object $oOutput
  * @access public
  * @return void
  */
 public function execute($oInput, $oOutput)
 {
     $oOutput->write("baixando atualizações...\r");
     $oComando = $this->getApplication()->execute('cvs update -dRP');
     $aRetornoComandoUpdate = $oComando->output;
     $iStatusComandoUpdate = $oComando->code;
     /**
      * Caso CVS encontre conflito, retorna erro 1
      */
     if ($iStatusComandoUpdate > 1) {
         $oOutput->writeln('<error>Erro nº ' . $iStatusComandoUpdate . ' ao execurar cvs update -dR:' . "\n" . $this->getApplication()->getLastError() . '</error>');
         return $iStatusComandoUpdate;
     }
     $oOutput->writeln(str_repeat(' ', \Shell::columns()) . "\r" . "Atualizações baixados");
     $sComandoRoot = '';
     /**
      * Senha do root
      */
     $sSenhaRoot = $this->getApplication()->getConfig('senhaRoot');
     /**
      * Executa comando como root 
      * - caso for existir senha no arquivo de configuracoes
      */
     if (!empty($sSenhaRoot)) {
         $sComandoRoot = "echo '{$sSenhaRoot}' | sudo -S ";
     }
     $oComando = $this->getApplication()->execute($sComandoRoot . 'chmod 777 -R ' . getcwd());
     $aRetornoComandoPermissoes = $oComando->output;
     $iStatusComandoPermissoes = $oComando->code;
     if ($iStatusComandoPermissoes > 0) {
         throw new Exception("Erro ao atualizar permissões dos arquivos, configura a senha do root: cvsgit config -e");
     }
 }
Example #2
0
 /**
  * Executa comando
  *
  * @param Object $oInput
  * @param Object $oOutput
  * @access public
  * @return void
  */
 public function execute($oInput, $oOutput)
 {
     $oParametros = new \StdClass();
     $oParametros->aArquivos = $oInput->getArgument('arquivos');
     $oParametros->iTag = ltrim(strtoupper($oInput->getOption('tag')), 'T');
     $oParametros->aMensagens = $oInput->getOption('message');
     $oParametros->sData = $oInput->getOption('date');
     $oArquivoModel = new ArquivoModel();
     $aArquivosCommitados = $oArquivoModel->getCommitados($oParametros);
     if (empty($aArquivosCommitados)) {
         throw new \Exception("Nenhum arquivo encontrado.");
     }
     $oOutput->writeln("");
     $oBuscaOutputFormatter = new OutputFormatterStyle('red', null, array());
     $oOutput->getFormatter()->setStyle('busca', $oBuscaOutputFormatter);
     foreach ($aArquivosCommitados as $oDadosCommit) {
         $sTitulo = "- <comment>" . date('d/m/Y', strtotime($oDadosCommit->date)) . "</comment> as " . date('H:s:i', strtotime($oDadosCommit->date));
         $sTitulo .= " " . count($oDadosCommit->aArquivos) . " arquivo(s) commitado(s)";
         $oOutput->writeln($sTitulo);
         if (!empty($oDadosCommit->title)) {
             $oOutput->writeln("\n  " . $oDadosCommit->title);
         }
         $oTabela = new \Table();
         $oTabela->setHeaders(array('1', '1', '1', '1'));
         foreach ($oDadosCommit->aArquivos as $oArquivo) {
             $sArquivo = $this->getApplication()->clearPath($oArquivo->name);
             $sTag = $oArquivo->tag;
             $sMensagem = $oArquivo->message;
             foreach ($oParametros->aArquivos as $sParametroArquivo) {
                 $sArquivo = $this->colorirBusca($sArquivo, $sParametroArquivo, 'busca');
             }
             if (!empty($oParametros->iTag)) {
                 $sTag = $this->colorirBusca($oArquivo->tag, $oParametros->iTag, 'busca');
             }
             if (!empty($oParametros->aMensagens)) {
                 foreach ($oParametros->aMensagens as $sMensagemBuscar) {
                     $sMensagem = $this->colorirBusca($sMensagem, $sMensagemBuscar, 'busca');
                 }
             }
             $oTabela->addRow(array($oArquivo->type, " {$sArquivo}", " {$sTag}", " {$sMensagem}"));
         }
         $oOutput->writeln("  " . str_replace("\n", "\n  ", $oTabela->render(true)));
     }
 }
Example #3
0
 /**
  * Runs the commands given
  *
  * @return void
  * @author Dan Cox
  */
 public function runProcess($command)
 {
     $args = explode(' ', $this->DI->get('mask')->replace($command));
     $p = $this->hasDefinition($args);
     if (!$p) {
         $process = $this->DI->get('skeletonprocess');
         $process->build(['directory' => $this->input->getArgument('directory'), 'verbose' => $this->input->getOption('output') ? TRUE : FALSE]);
         $p = $process->setArguments($args)->getProcess();
     }
     try {
         $p->mustRun();
         $cmd = $p->getCommandLine();
     } catch (\Exception $e) {
         $this->output->writeln($e->getMessage());
         return false;
     }
     $this->output->writeln("Successfully ran command: {$cmd}");
     return true;
 }
Example #4
0
 /**
  * Executa o comando
  *
  * @param Object $oInput
  * @param Object $oOutput
  * @access public
  * @return void
  */
 public function execute($oInput, $oOutput)
 {
     $lImportarHistorico = $oInput->getOption('import');
     $oParametros = new StdClass();
     $oParametros->aArquivos = $oInput->getArgument('arquivos');
     $oParametros->iTag = $oInput->getOption('tag');
     $oParametros->aMensagens = $oInput->getOption('message');
     $oParametros->sUsuario = $oInput->getOption('user');
     $oParametros->sData = $oInput->getOption('date');
     $this->oOutput = $oOutput;
     $this->oInput = $oInput;
     $this->oModel = $this->getApplication()->getModel();
     $this->oDataBase = $this->oModel->getDataBase();
     if (!empty($lImportarHistorico)) {
         return $this->importarHistorico();
     }
     $aHistorico = $this->getHistorico($oParametros);
     if (empty($aHistorico)) {
         throw new Exception("Histórico não encontrado.");
     }
     $oTabela = new Table();
     $oTabela->setHeaders(array('Arquivo', 'Autor', 'Data', 'Hora', 'Versão', 'Tag', 'Mensagem'));
     foreach ($aHistorico as $oArquivo) {
         $sArquivo = $this->getApplication()->clearPath($oArquivo->name);
         $sAutor = $oArquivo->author;
         $sData = date('d/m/Y', strtotime($oArquivo->date));
         $sHora = date('H:i:s', strtotime($oArquivo->date));
         $sVersao = $oArquivo->revision;
         $sTags = implode(',', $oArquivo->tags);
         $sMensagem = Encode::toUTF8($oArquivo->message);
         $oTabela->addRow(array($sArquivo, $sAutor, $sData, $sHora, $sVersao, $sTags, $sMensagem));
     }
     $sOutput = $oTabela->render();
     $iColunas = array_sum($oTabela->getWidths());
     $iColunas += count($oTabela->getWidths()) * 2;
     $iColunas += count($oTabela->getWidths()) - 1;
     if ($iColunas > \Shell::columns()) {
         $this->getApplication()->less($sOutput);
         return;
     }
     $oOutput->writeln($sOutput);
 }
Example #5
0
 /**
  * Executa o comando
  *
  * @param Object $oInput
  * @param Object $oOutput
  * @access public
  * @return void
  */
 public function execute($oInput, $oOutput)
 {
     $this->sArquivoConfiguracoes = CONFIG_DIR . basename($this->getApplication()->getModel()->getProjeto()->name) . '_config.json';
     if ($oInput->getOption('restart')) {
         $this->criarArquivoConfiguracoes();
         $oOutput->writeln("<info>Configurações reiniciadas.</info>");
         return;
     }
     if (!file_exists($this->sArquivoConfiguracoes)) {
         $this->criarArquivoConfiguracoes();
     }
     /**
      * Editar usando editor 
      */
     if ($oInput->getOption('edit')) {
         $iStatus = $this->editarArquivoConfiguracoes();
         if ($iStatus > 0) {
             throw new Exception('Não foi possivel editar configurações');
         }
         return $iStatus;
     }
     $oConfig = new Config($this->sArquivoConfiguracoes);
     $sOutput = PHP_EOL;
     $aIgnore = $oConfig->get('ignore');
     $iTagRelease = $oConfig->get('tag')->release;
     $tagsSprint = $oConfig->get('tag')->sprint;
     $sOutput .= "- <comment>Arquivo:</comment> " . PHP_EOL;
     $sOutput .= "  " . $this->sArquivoConfiguracoes . PHP_EOL;
     /**
      * Ignorar 
      */
     if (!empty($aIgnore)) {
         $sOutput .= PHP_EOL;
         $sOutput .= "- <comment>Ignorar:</comment>" . PHP_EOL;
         $sOutput .= '  ' . implode(PHP_EOL . '  ', $aIgnore) . PHP_EOL;
     }
     /**
      * Tags 
      */
     if (!empty($iTagRelease) || !empty($tagsSprint)) {
         $sOutput .= PHP_EOL;
         $sOutput .= "- <comment>Tags:</comment>" . PHP_EOL;
         if (!empty($iTagRelease)) {
             $sOutput .= PHP_EOL;
             $sOutput .= "  <comment>Release:</comment>" . PHP_EOL;
             $sOutput .= '  ' . $iTagRelease . PHP_EOL;
         }
         if (!empty($tagsSprint)) {
             if (is_array($tagsSprint)) {
                 $sOutput .= PHP_EOL;
                 $sOutput .= "  <comment>Sprint:</comment>" . PHP_EOL;
                 $sOutput .= '  ' . implode(', ', $tagsSprint) . PHP_EOL;
             }
             if (is_object($tagsSprint)) {
                 $sOutput .= PHP_EOL;
                 $sOutput .= "  <comment>Sprint:</comment>" . PHP_EOL;
                 foreach ($tagsSprint as $sTag => $sDescricao) {
                     $sOutput .= '  ' . $sTag;
                     if (!empty($sDescricao)) {
                         $sOutput .= ': ' . $sDescricao;
                     }
                     $sOutput .= PHP_EOL;
                 }
             }
         }
     }
     $oOutput->writeln($sOutput);
 }
Example #6
0
 /**
  * Executa comando
  *
  * @param Object $oInput
  * @param Object $oOutput
  * @access public
  * @return void
  */
 public function execute($oInput, $oOutput)
 {
     if (!file_exists('CVS/Repository')) {
         throw new Exception('Diretório atual não é um repositorio CVS.');
     }
     $sDiretorioAtual = getcwd();
     $sRepositorio = trim(file_get_contents('CVS/Repository'));
     $sArquivoBanco = CONFIG_DIR . $sRepositorio . '.db';
     $sArquivoConfig = CONFIG_DIR . $sRepositorio . '_config.json';
     /**
      * Força inicialização do projeto 
      */
     if ($oInput->getOption('force')) {
         /**
          * Remove arquivo do banco de dados 
          */
         if (file_exists($sArquivoBanco)) {
             if (!unlink($sArquivoBanco)) {
                 throw new Exception("Não foi possivel remover banco de dados: " . $sArquivoBanco);
             }
         }
         /**
          * Remove arquivo de configuração 
          */
         if (file_exists($sArquivoConfig)) {
             if (!unlink($sArquivoConfig)) {
                 throw new Exception("Não foi possivel remover configurações: " . $sArquivoConfig);
             }
         }
     }
     /**
      * Arquivo já existe, verifica se projeto já foi inicializado 
      */
     if (file_exists($sArquivoBanco)) {
         $oDataBase = new FileDataBase($sArquivoBanco);
         $aProjetos = $oDataBase->selectAll("select name, path from project where name = '{$sRepositorio}' or path = '{$sDiretorioAtual}'");
         /**
          * Diretorio atual ja inicializado 
          */
         foreach ($aProjetos as $oProjeto) {
             if ($oProjeto->name == $sRepositorio || $oProjeto->path == $sDiretorioAtual) {
                 $oOutput->writeln(sprintf('<info>"%s" já inicializado</info>', $sRepositorio));
                 return true;
             }
         }
     }
     /**
      * Diretório onde aplicação guarda arquivos de configuracão e banco de dados 
      */
     if (!is_dir(CONFIG_DIR) && !mkdir(CONFIG_DIR)) {
         throw new Exception('Não foi possivel criar diretório: ' . CONFIG_DIR);
     }
     /**
      * Cria copia do arquivo do banco
      */
     $lArquivoConfiguracoes = copy(APPLICATION_DIR . 'cvsgit/install/config.json', $sArquivoConfig);
     if (!$lArquivoConfiguracoes) {
         throw new Exception("Não foi possivel criar arquivo de configurações no diretório: " . $sArquivoConfig);
     }
     /**
      * Cria copia do arquivo de configuracao
      */
     $lArquivoBancoDados = copy(APPLICATION_DIR . 'cvsgit/install/cvsgit.db', $sArquivoBanco);
     if (!$lArquivoBancoDados) {
         throw new Exception("Não foi possivel criar arquivo do banco de dados no diretório: " . CONFIG_DIR);
     }
     $oDataBase = new FileDataBase($sArquivoBanco);
     $oDataBase->begin();
     $oDataBase->insert('project', array('name' => $sRepositorio, 'path' => $sDiretorioAtual, 'date' => date('Y-m-d H:i:s')));
     $oOutput->writeln(sprintf('<info>"%s" inicializado</info>', $sRepositorio));
     $oDataBase->commit();
 }
Example #7
0
 /**
  * Executa comando
  *
  * @param Object $oInput
  * @param Object $oOutput
  * @access public
  * @return void
  */
 public function execute($oInput, $oOutput)
 {
     $lTabela = false;
     $lCriados = false;
     $lModificados = false;
     $lConflitos = false;
     $lAtulizados = false;
     $lAdicionados = false;
     $lRemovidos = false;
     $lPush = false;
     $lPesquisaCvs = true;
     $aArquivosParaCommit = array();
     $aTabelaModificacoes = array();
     $aModificacoes = array();
     $aRetornoComandoUpdate = array();
     $aModificados = array();
     $aCriados = array();
     $aAtualizados = array();
     $aConflitos = array();
     $aAdicionados = array();
     $aRemovidos = array();
     $aRemovidosLocal = array();
     $sStatusOutput = "";
     $sStatusOutputTabela = "";
     $sListaUpdate = "";
     $sListaArquivos = "";
     $iParametros = 0;
     foreach ($oInput->getOptions() as $sArgumento => $sValorArgumento) {
         if (empty($sValorArgumento)) {
             continue;
         }
         switch ($sArgumento) {
             /**
              * Exibe modificacoes em tabela
              */
             case 'table':
                 $lTabela = true;
                 $iParametros++;
                 break;
                 /**
                  * Criados
                  */
             /**
              * Criados
              */
             case 'new':
                 $lCriados = true;
                 $iParametros++;
                 break;
                 /**
                  * Modificados
                  */
             /**
              * Modificados
              */
             case 'modified':
                 $lModificados = true;
                 $iParametros++;
                 break;
                 /**
                  * Conflitos
                  */
             /**
              * Conflitos
              */
             case 'conflict':
                 $lConflitos = true;
                 $iParametros++;
                 break;
             case 'update':
                 $lAtulizados = true;
                 $iParametros++;
                 break;
             case 'added':
                 $lAdicionados = true;
                 $iParametros++;
                 break;
             case 'removed':
                 $lRemovidos = true;
                 $iParametros++;
                 break;
             case 'push':
                 $lPush = true;
                 $iParametros++;
                 break;
         }
     }
     /**
      * Passou somente parametro --push
      * - Nao pesquisa cvs(commando cvs -qn update)
      */
     if ($iParametros == 1 && $lPush) {
         $lPesquisaCvs = false;
     }
     /**
      * Passou parametros --push e --table
      * - Nao pesquisa cvs(commando cvs -qn update)
      */
     if ($iParametros == 2 && $lPush && $lTabela) {
         $lPesquisaCvs = false;
     }
     /**
      * - Nenhum parametro informado
      * - Passou somente parametro --table
      */
     if ($iParametros == 0 || $lTabela && $iParametros == 1) {
         $lCriados = true;
         $lModificados = true;
         $lConflitos = true;
         $lAtulizados = true;
         $lAdicionados = true;
         $lRemovidos = true;
         $lPush = true;
     }
     /**
      * Model do comando
      */
     $oArquivoModel = new ArquivoModel();
     /**
      * lista dos arquivos adicionados para commit
      */
     $aArquivos = $oArquivoModel->getAdicionados();
     foreach ($aArquivos as $oCommit) {
         $aArquivosParaCommit[] = $this->getApplication()->clearPath($oCommit->getArquivo());
     }
     /**
      * Pesquisa modificacoes no cvs apenas se:
      *  - nenhum parametro informado
      *  - não passou somente parametro push
      */
     if ($lPesquisaCvs) {
         $oComando = $this->getApplication()->execute('cvs -qn update -dR');
         $aRetornoComandoUpdate = $oComando->output;
         $iStatusComandoUpdate = $oComando->code;
         /**
          * Verificação mair que 1 pois quando existem merge cvs retorna status 1
          * - e merge nao é erro, e sim aviso
          */
         if ($iStatusComandoUpdate > 1) {
             throw new Exception('Erro nº ' . $iStatusComandoUpdate . ' ao execurar cvs -qn update -dR:' . "\n" . $this->getApplication()->getLastError());
         }
     }
     /**
      * Arquivos para ignorar
      */
     $aArquivosIgnorar = array();
     $aIgnorar = $this->getApplication()->getConfig('ignore');
     foreach ($aIgnorar as $sIgnore) {
         $sOperador = "*";
         if (is_file($sIgnore)) {
             $sOperador = "";
         }
         $aFiles = $this->getApplication()->glob($sOperador, GLOB_BRACE, $sIgnore, true);
         $aArquivosIgnorar = array_merge($aArquivosIgnorar, $aFiles);
     }
     /**
      * Parse no retorno do comando cvs update
      */
     foreach ($aRetornoComandoUpdate as $sLinhaUpdate) {
         $aLinha = explode(' ', $sLinhaUpdate);
         $oLinha = new \StdClass();
         $sTipo = trim(array_shift($aLinha));
         /**
          * Linha não é um tipo de commit: U, ?, C...
          */
         if (!in_array($sTipo, array_keys($this->aTiposCommit))) {
             continue;
         }
         $oLinha->sTipo = $sTipo;
         $oLinha->sArquivo = trim(implode(' ', $aLinha));
         /**
          * Arquivo está na lista dos ignorados, pula
          */
         if (!empty($aIgnorar) && in_array($oLinha->sArquivo, $aArquivosIgnorar)) {
             continue;
         }
         /**
          * Array com todas as modificaos
          */
         $aModificacoes[$sTipo][] = $oLinha;
         /**
          * Lista com os erros do comando update
          */
         $aLinhasErros = explode("\n", $this->getApplication()->getLastError());
         /**
          * Arquivo removido localmente
          * Percorre as linhas de erro procurando o arquivo
          *
          * @todo - arquivo com ultima versao no cvs como removido nao aparece no update
          */
         foreach ($aLinhasErros as $sLinhaErro) {
             /**
              * Encontrou arquivo na linh atual
              */
             if (strpos($sLinhaErro, "`{$oLinha->sArquivo}'") !== false) {
                 /**
                  * Contei a string lost na linha atual do arquivo
                  */
                 if (strpos($sLinhaErro, "lost") !== false) {
                     $sTipo = "-";
                     break;
                 }
             }
         }
         /**
          * Separa em arrays as modificacoes pelo tipo de commit
          */
         switch ($sTipo) {
             /**
              * Novo
              */
             case '?':
                 $aCriados[] = $oLinha;
                 break;
                 /**
                  * Modificado
                  */
             /**
              * Modificado
              */
             case 'M':
                 $aModificados[] = $oLinha;
                 break;
                 /**
                  * Conflito
                  */
             /**
              * Conflito
              */
             case 'C':
                 $aConflitos[] = $oLinha;
                 break;
                 /**
                  * Atualizado
                  */
             /**
              * Atualizado
              */
             case 'U':
             case 'P':
                 $aAtualizados[] = $oLinha;
                 break;
                 /**
                  * Adicionado e nao commitado
                  */
             /**
              * Adicionado e nao commitado
              */
             case 'A':
                 $aAdicionados[] = $oLinha;
                 break;
                 /**
                  * Removido e nao commitado
                  */
             /**
              * Removido e nao commitado
              */
             case 'R':
                 $aRemovidos[] = $oLinha;
                 break;
                 /**
                  * Removido no projeto local
                  */
             /**
              * Removido no projeto local
              */
             case '-':
                 $aRemovidosLocal[] = $oLinha;
                 break;
         }
     }
     /**
      * Novos
      * - arquivos criados e nao adicionados para commit
      */
     if ($lCriados) {
         $sArquivosCriados = '';
         foreach ($aCriados as $oArquivoCriado) {
             if (in_array($oArquivoCriado->sArquivo, $aArquivosParaCommit)) {
                 continue;
             }
             $sArquivosCriados .= "\n " . $oArquivoCriado->sArquivo;
             $aTabelaModificacoes['?'][] = $oArquivoCriado->sArquivo;
         }
         if (!empty($sArquivosCriados)) {
             $sStatusOutput .= "\n- Arquivos criados: ";
             $sStatusOutput .= "\n <comment>{$sArquivosCriados}</comment>\n";
         }
     }
     /**
      * Modificados
      * - arquivos modificados e nao adicionados para commit
      */
     if ($lModificados) {
         $sArquivosModificados = '';
         foreach ($aModificados as $oArquivoModificado) {
             if (in_array($oArquivoModificado->sArquivo, $aArquivosParaCommit)) {
                 continue;
             }
             $sArquivosModificados .= "\n " . $oArquivoModificado->sArquivo;
             $aTabelaModificacoes['M'][] = $oArquivoModificado->sArquivo;
         }
         if (!empty($sArquivosModificados)) {
             $sStatusOutput .= "\n- Arquivos modificados: ";
             $sStatusOutput .= "\n <error>{$sArquivosModificados}</error>\n";
         }
     }
     /**
      * Conflitos
      * - arquivos com conflito
      */
     if ($lConflitos) {
         $sArquivosConflito = '';
         foreach ($aConflitos as $oArquivoConflito) {
             $sArquivosConflito .= "\n " . $oArquivoConflito->sArquivo;
             $aTabelaModificacoes['C'][] = $oArquivoConflito->sArquivo;
         }
         if (!empty($sArquivosConflito)) {
             $sStatusOutput .= "\n- Arquivos com conflito: ";
             $sStatusOutput .= "\n <error>{$sArquivosConflito}</error>\n";
         }
     }
     /**
      * Atualizados
      * - arquivos atualizados no repository e nao local
      */
     if ($lAtulizados) {
         $sArquivosAtualizados = '';
         foreach ($aAtualizados as $oArquivoAtualizado) {
             if (in_array($oArquivoAtualizado->sArquivo, $aArquivosParaCommit)) {
                 continue;
             }
             $sArquivosAtualizados .= "\n " . $oArquivoAtualizado->sArquivo;
             $aTabelaModificacoes['U'][] = $oArquivoAtualizado->sArquivo;
         }
         if (!empty($sArquivosAtualizados)) {
             $sStatusOutput .= "\n- Arquivos Atualizados: ";
             $sStatusOutput .= "\n <info>{$sArquivosAtualizados}</info>\n";
         }
     }
     /**
      * Adicionados
      * - arquivos adicionados e ainda n?o commitados
      */
     if ($lAdicionados) {
         $sArquivosAdicionados = '';
         foreach ($aAdicionados as $oArquivoAdicionado) {
             if (in_array($oArquivoAdicionado->sArquivo, $aArquivosParaCommit)) {
                 continue;
             }
             $sArquivosAdicionados .= "\n " . $oArquivoAdicionado->sArquivo;
             $aTabelaModificacoes['A'][] = $oArquivoAdicionado->sArquivo;
         }
         if (!empty($sArquivosAdicionados)) {
             $sStatusOutput .= "\n- Arquivos adicionados: ";
             $sStatusOutput .= "\n  <info>{$sArquivosAdicionados}</info>\n";
         }
     }
     /**
      * Removidos
      * - arquivos removidos e ainda não commitados
      */
     if ($lRemovidos) {
         $sArquivosRemovidos = '';
         foreach ($aRemovidos as $oArquivoRemovido) {
             if (in_array($oArquivoRemovido->sArquivo, $aArquivosParaCommit)) {
                 continue;
             }
             $sArquivosRemovidos .= "\n " . $oArquivoRemovido->sArquivo;
             $aTabelaModificacoes['R'][] = $oArquivoRemovido->sArquivo;
         }
         if (!empty($sArquivosRemovidos)) {
             $sStatusOutput .= "\n- Arquivos marcados como removido: ";
             $sStatusOutput .= "\n <info>{$sArquivosRemovidos}</info>\n";
         }
         $sArquivosRemovidosLocal = '';
         foreach ($aRemovidosLocal as $oArquivoRemovidoLocal) {
             if (in_array($oArquivoRemovidoLocal->sArquivo, $aArquivosParaCommit)) {
                 continue;
             }
             $sArquivosRemovidosLocal .= "\n " . $oArquivoRemovidoLocal->sArquivo;
             $aTabelaModificacoes['-'][] = $oArquivoRemovidoLocal->sArquivo;
         }
         if (!empty($sArquivosRemovidosLocal)) {
             $sStatusOutput .= "\n- Arquivos removidos do projeto local: ";
             $sStatusOutput .= "\n <error>{$sArquivosRemovidosLocal}</error>\n";
         }
     }
     /**
      * Tabela
      * - Lista modificações em tableas
      */
     if ($lTabela) {
         $oTabela = new \Table();
         $oTabela->setHeaders(array('Tipo', 'Arquivo'));
         foreach ($aTabelaModificacoes as $sTipo => $aArquivosModificacao) {
             $sTipoModificacao = "[{$sTipo}] " . strtr($sTipo, $this->aTiposCommit);
             foreach ($aArquivosModificacao as $sArquivoModificacao) {
                 $oTabela->addRow(array($sTipoModificacao, $sArquivoModificacao));
             }
         }
         if (!empty($aTabelaModificacoes)) {
             $sStatusOutputTabela .= "\nModificações nao tratadas: \n";
             $sStatusOutputTabela .= $oTabela->render();
         }
     }
     /**
      * Push
      * - arquivos para commit
      */
     if ($lPush) {
         /**
          * Tabela
          * - Lista arquivos prontos para commit em tabela
          */
         if ($lTabela) {
             $oTabelaCommit = new \Table();
             $oTabelaCommit->setHeaders(array('Arquivo', 'Tag Mensagem', 'Tag Arquivo', 'Mensagem', 'Tipo'));
             foreach ($aArquivos as $oCommit) {
                 $sTipo = $oCommit->getTipo();
                 switch ($oCommit->getComando()) {
                     case Arquivo::COMANDO_ADICIONAR_TAG:
                         $sTipo = 'Adicionar tag';
                         break;
                     case Arquivo::COMANDO_REMOVER_TAG:
                         $sTipo = 'Remover tag';
                         break;
                 }
                 $oTabelaCommit->addRow(array($this->getApplication()->clearPath($oCommit->getArquivo()), $oCommit->getTagMensagem(), $oCommit->getTagArquivo(), $oCommit->getMensagem(), $sTipo));
             }
             if (!empty($aArquivos)) {
                 $sStatusOutputTabela .= "\nArquivos prontos para commit: \n";
                 $sStatusOutputTabela .= $oTabelaCommit->render();
             }
         }
         /**
          * Sem tabela
          * - Lista arquivos prontos para commit em linha
          */
         if (!$lTabela) {
             foreach ($aArquivos as $oCommit) {
                 $sListaArquivos .= "\n " . $this->getApplication()->clearPath($oCommit->getArquivo()) . " ";
             }
             if (!empty($sListaArquivos)) {
                 $sStatusOutput .= "\n- Arquivos prontos para commit: ";
                 $sStatusOutput .= "\n <info>{$sListaArquivos}</info>\n";
             }
         }
     }
     /**
      * Nenhuma modifiação encontrada
      */
     if (empty($sStatusOutput) && empty($sStatusOutputTabela)) {
         $oOutput->writeln('Nenhuma modificação encontrada');
         return 0;
     }
     if ($lTabela) {
         $sStatusOutput = $sStatusOutputTabela;
     }
     $sStatusOutput = ltrim($sStatusOutput, "\n");
     $oOutput->writeln($sStatusOutput);
 }
 /**
  * @param  SplFileInfo $file
  * @param  string      $column
  * @param  null|Object $output
  * @param  string      $delimiter
  * 
  * @return array
  */
 public function parseCvs(SplFileInfo $file, $column, $output = null, $delimiter = '|')
 {
     $parsed = array();
     $f = $file->openFile();
     while (!$f->eof()) {
         $data = $f->fgetcsv($delimiter);
         if (count($data) == $column) {
             $parsed[] = $data;
         } elseif ($output && $data[0]) {
             $output->writeln(var_dump($data));
         }
         $f->next();
     }
     return $parsed;
 }
Example #9
0
 /**
  * Executa o comando
  *
  * @param Object $oInput
  * @param Object $oOutput
  * @access public
  * @return void
  */
 public function execute($oInput, $oOutput)
 {
     $sArquivo = $oInput->getArgument('arquivo');
     $sArquivo = $this->getApplication()->clearPath($sArquivo);
     /**
      * Lista somenta as tags
      */
     $oComando = $this->getApplication()->execute('cvs log -h ' . escapeshellarg($sArquivo));
     $aRetornoComandoTags = $oComando->output;
     $iStatusComandoTags = $oComando->code;
     if ($iStatusComandoTags > 0) {
         throw new Exception('Erro ao execurar cvs log -h ' . escapeshellarg($sArquivo) . PHP_EOL . $this->getApplication()->getLastError(), $iStatusComandoTags);
     }
     $aTagsPorVersao = array();
     $iVersaoAtual = 0;
     $lInicioListaTags = false;
     foreach ($aRetornoComandoTags as $iIndiceTags => $sLinhaRetornoTag) {
         if (strpos($sLinhaRetornoTag, 'head:') !== false) {
             $iVersaoAtual = trim(str_replace('head:', '', $sLinhaRetornoTag));
             continue;
         }
         if (strpos($sLinhaRetornoTag, 'symbolic names:') !== false) {
             $lInicioListaTags = true;
             continue;
         }
         if ($lInicioListaTags) {
             if (strpos($sLinhaRetornoTag, 'keyword substitution') !== false) {
                 break;
             }
             if (strpos($sLinhaRetornoTag, 'total revisions') !== false) {
                 break;
             }
             $aLinhaTag = explode(':', $sLinhaRetornoTag);
             $iVersao = trim($aLinhaTag[1]);
             $sTag = trim($aLinhaTag[0]);
             $aTagsPorVersao[$iVersao][] = $sTag;
         }
     }
     /**
      * Lista informacoes do commit, sem as tags
      */
     $oComando = $this->getApplication()->execute('cvs log -N ' . escapeshellarg($sArquivo));
     $aRetornoComandoInformacoes = $oComando->output;
     $iStatusComandoInformacoes = $oComando->code;
     if ($iStatusComandoInformacoes > 0) {
         throw new Exception('Erro ao execurar cvs log -N ' . escapeshellarg($sArquivo) . PHP_EOL . $this->getApplication()->getLastError(), $iStatusComandoInformacoes);
     }
     $aLog = array();
     $iLinhaInformacaoCommit = 0;
     $oTabela = new Table();
     $oTabela->setHeaders(array('Autor', 'Data', 'Versao', 'Tag', 'Mensagem'));
     $aLinhas = array();
     $iVersao = null;
     $sAutor = null;
     $sData = null;
     $sMensagem = null;
     foreach ($aRetornoComandoInformacoes as $iIndice => $sLinhaRetorno) {
         if (strpos($sLinhaRetorno, '------') !== false) {
             continue;
         }
         if ($iLinhaInformacaoCommit == 0 && $iIndice > 11) {
             $sTagsPorVersao = null;
             if (!empty($aTagsPorVersao[$iVersao])) {
                 $sTagsPorVersao = implode(', ', $aTagsPorVersao[$iVersao]);
             }
             $oTabela->addRow(array($sAutor, $sData, $iVersao, $sTagsPorVersao, Encode::toUTF8($sMensagem)));
             $iVersao = '';
             $sAutor = '';
             $sData = '';
             $sMensagem = '';
         }
         if ($iLinhaInformacaoCommit > 0) {
             $iLinhaInformacaoCommit--;
         }
         /**
          * Versao
          */
         if (strpos($sLinhaRetorno, 'revision') !== false && strpos($sLinhaRetorno, 'revision') === 0) {
             $iLinhaInformacaoCommit = 2;
         }
         /**
          * Versao
          */
         if ($iLinhaInformacaoCommit == 2) {
             $iVersao = trim(str_replace('revision', '', $sLinhaRetorno));
             continue;
         }
         /**
          * Data e autor 
          */
         if ($iLinhaInformacaoCommit == 1) {
             $sLinhaRetorno = strtr($sLinhaRetorno, array('date:' => '', 'author:' => ''));
             $aLinhaInformacoesCommit = explode(';', $sLinhaRetorno);
             $sLinhaData = array_shift($aLinhaInformacoesCommit);
             $aLinhaData = explode(' ', $sLinhaData);
             $sData .= implode('/', array_reverse(explode('-', $aLinhaData[1])));
             $sAutor = trim(array_shift($aLinhaInformacoesCommit));
             continue;
         }
         /**
          * Mensagem 
          */
         if ($iLinhaInformacaoCommit == 0) {
             $sMensagem = $sLinhaRetorno;
         }
     }
     $sOutput = Encode::toUTF8($oTabela->render());
     $iColunas = array_sum($oTabela->getWidths());
     $iColunas += count($oTabela->getWidths()) * 2;
     $iColunas += count($oTabela->getWidths()) - 1;
     if ($iColunas > \Shell::columns()) {
         $this->getApplication()->less($sOutput);
         return;
     }
     $oOutput->writeln($sOutput);
 }
Example #10
0
 /**
  * Executa comando
  *
  * @param Object $oInput
  * @param Object $oOutput
  * @access public
  * @return void
  */
 public function execute($oInput, $oOutput)
 {
     $oArquivoModel = new ArquivoModel();
     $aArquivosAdicionados = $oArquivoModel->getAdicionados();
     $aArquivos = array();
     $aOpcoes = array('added', 'delete');
     $sComando = null;
     $aArquivosParametro = $oInput->getArgument('arquivos');
     /**
      * Verifica arquivos passados por parametro 
      */
     foreach ($aArquivosParametro as $sArquivo) {
         if (!file_exists($sArquivo)) {
             $oOutput->writeln("<error>Arquivo não encontradao: {$sArquivo}</error>");
             continue;
         }
         $sArquivo = realpath($sArquivo);
         /**
          * Arquivo já adicionado a lista, pega ele 
          */
         if (!empty($aArquivosAdicionados[$sArquivo])) {
             $aArquivos[$sArquivo] = $aArquivosAdicionados[$sArquivo];
             continue;
         }
         $oArquivo = new Arquivo();
         $oArquivo->setArquivo($sArquivo);
         /**
          * Arquivos não adicionados ainda a lista 
          */
         $aArquivos[$sArquivo] = $oArquivo;
     }
     /**
      * Nenhum arquivo passado por parametro, poe tag em todos os arquivos ja adicionados 
      */
     if (empty($aArquivos)) {
         $aArquivos = $aArquivosAdicionados;
     }
     foreach ($oInput->getOptions() as $sArgumento => $sValorArgumento) {
         if (empty($sValorArgumento) || !in_array($sArgumento, $aOpcoes)) {
             continue;
         }
         if (!empty($sComando)) {
             throw new Exception("Mais de uma comando usado(added, delete)");
         }
         if (empty($sComando)) {
             $sComando = $sArgumento;
         }
     }
     if (empty($sComando)) {
         $sComando = 'added';
     }
     /**
      * Tag do arquivo, sem prefixo T 
      */
     $iTag = ltrim(strtoupper($oInput->getArgument('tag')), 'T');
     $aArquivosTaggeados = $oArquivoModel->taggear($aArquivos, $iTag, $sComando);
     if (!empty($aArquivosTaggeados)) {
         foreach ($aArquivosTaggeados as $sArquivo) {
             $oOutput->writeln("<info>Arquivo com tag atualizada: " . $this->getApplication()->clearPath($sArquivo) . "</info>");
         }
     }
 }