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