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())); } }
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; } }
/** * 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))); } }
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>"); } } }
/** * 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); }
/** * 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>"); } } }