Exemplo n.º 1
0
 private function buscarArquivosModificados()
 {
     /**
      * Model do comando 
      */
     $oArquivoModel = new ArquivoModel();
     /**
      * lista dos arquivos adicionados para commit 
      */
     $aArquivos = $oArquivoModel->getAdicionados();
     foreach ($aArquivos as $oCommit) {
         $this->processarArquivo($this->getApplication()->clearPath($oCommit->getArquivo()));
     }
 }
Exemplo n.º 2
0
 private function processarParametros()
 {
     $this->aArquivos = array();
     $this->sTituloPush = $this->oInput->getOption('message');
     $oArquivoModel = new ArquivoModel();
     $aArquivosAdicionados = $oArquivoModel->getAdicionados();
     $aArquivosParaCommit = $this->oInput->getArgument('arquivos');
     foreach ($aArquivosParaCommit as $sArquivo) {
         $sArquivo = realpath($sArquivo);
         if (empty($aArquivosAdicionados[$sArquivo])) {
             throw new Exception("Arquivo não encontrado na lista para commit: " . $this->getApplication()->clearPath($sArquivo));
         }
         $this->aArquivos[$sArquivo] = $aArquivosAdicionados[$sArquivo];
     }
     if (empty($aArquivosParaCommit)) {
         $this->aArquivos = $aArquivosAdicionados;
     }
 }
Exemplo n.º 3
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)));
     }
 }
Exemplo n.º 4
0
 public function execute($oInput, $oOutput)
 {
     $oArquivoModel = new ArquivoModel();
     $aArquivos = $oArquivoModel->getAdicionados();
     $aArquivosInformados = $oInput->getArgument('arquivos');
     $aArquivosRemover = array();
     if (empty($aArquivos)) {
         $oOutput->writeln('<error>Nenhum arquivo para remover</error>');
         return 1;
     }
     foreach ($aArquivosInformados as $sArquivo) {
         if (empty($aArquivos[$sArquivo]) && empty($aArquivos[getcwd() . '/' . $sArquivo])) {
             $oOutput->writeln("<error>Arquivo não encontrado na lista: {$sArquivo}</error>");
             continue;
         }
         $aArquivosRemover[] = $sArquivo;
     }
     /**
      * Nenhum arquivo informado, pergunta se pode remover todos 
      *
      */
     if (empty($aArquivosInformados)) {
         $oDialog = $this->getHelperSet()->get('dialog');
         $sRemoverTodos = $oDialog->ask($oOutput, 'Nenhum arquivo inforamado, remover todos da lista? (s/N): ');
         if (strtoupper($sRemoverTodos) == 'S') {
             $aArquivosRemover = array_keys($aArquivos);
         }
     }
     if (!empty($aArquivosRemover)) {
         foreach ($aArquivosRemover as $sArquivoRemovido) {
             $sArquivoRemovido = realpath($sArquivoRemovido);
             $lRemovido = $oArquivoModel->removerArquivo($sArquivoRemovido);
             if (!$lRemovido) {
                 throw new \Exception('Não foi possivel remover arquivo da lista: ' . $sArquivoRemovido);
             }
             $sArquivoRemovido = $this->getApplication()->clearPath($sArquivoRemovido);
             $oOutput->writeln("<info>Arquivo removido da lista: {$sArquivoRemovido}</info>");
         }
     }
 }
Exemplo n.º 5
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);
 }
Exemplo n.º 6
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>");
         }
     }
 }