November 27, 2012
Programação
1 Comment
Ao tentar atualizar um repositório do svn através do git na minha máquina recebi o seguinte erro:
fatal: bad object 0dfa7fb77d2a08b78a9d57d3445f3d60c4734cf6
rev-list -1 0dfa7fb77d2a08b78a9d57d3445f3d60c4734cf6 bd5d9701516cfe2d4661eaa95a03755f7ae3c8a3 0fae1f416f17141abd6d78d9e042a1c5a35c7873 --not dc522b20890dbbdfef1c3bd104587d59b353d5ce: command returned error: 128
Para resolver esse problema entre no diretório .git e rode o seguinte comando:
grep -ir 0dfa7fb77d2a08b78a9d57d3445f3d60c4734cf6 *
No meu caso o comando acima retornou apenas 1 arquivo:
Binary file ./svn/.caches/lookup_svn_merge.db matches
Apague o arquivo e rode novamente o comando git svn rebase
September 5, 2012
Linux, Programação
1 Comment
Hoje precisei gerar o diff do svn de alguns arquivos cujo nomes estavam armazenados dentro de um arquivo.
Para gerar o diff no svn de cada um desses arquivos basta fazer o seguinte:
cat arquivos.txt | xargs -I {} svn diff -r 39177:HEAD https://svn/projeto{} > diff.txt
Onde o arquivo arquivos.txt contém o nome dos arquivos em cada linha, e o diff.txt será o diff de todos esses arquivos.
May 23, 2012
Linux, Programação
No Comments
Para excluir arquivos não versionados no SVN você pode utilizar o seguinte comando:
svn status --no-ignore | grep '^\?' | sed 's/^\? //' | xargs -Ixx rm -rf xx
A primeira parte desse comando lista todos os arquivos alterados no SVN (modificados, adicionados, excluídos e não versionados), a segunda parte do comando filtra as linhas que começam com “?” (arquivos não versionados).
A terceira parte elimina o “?” e os espaços do começo das linhas e a quarta parte exclui arquivo por arquivo retornado pelos comandos anteriores.
Este texto foi adaptado do link http://www.guyrutenberg.com/2008/01/18/delete-unversioned-files-under-svn/
January 6, 2012
Programação
No Comments
Algum tempo atrás eu coloquei um repositório Git disponibilizado através do Apache2 + WebDAV utilizando a seguinte configuração do apache:
<Location /repositorio.git>
Dav on
AuthType Basic
AuthName "Repositorio Git"
AuthUserFile /etc/apache2/repositorio.passwd
Require valid-user
</Location>
Após algum tempo comecei a receber erros ao tentar fazer o push de muitas alterações. Se eu tentasse realizar vários push’s com erro, uma hora o push funcionava.
Fui procurar outras formas de disponibilizar o repositório Git no Apache2 e encontrei a forma descrita abaixo:
SetEnv GIT_PROJECT_ROOT /var/www/git
SetEnv GIT_HTTP_EXPORT_ALL
AliasMatch ^/git/(.*/objects/[0-9a-f]{2}/[0-9a-f]{38})$ /var/www/git/$1
AliasMatch ^/git/(.*/objects/pack/pack-[0-9a-f]{40}.(pack|idx))$ /var/www/git/$1
ScriptAlias /git/ /usr/lib/git-core/git-http-backend/
Esta configuração até agora não deu problema.
Mais detalhes dessa configuração podem ser encontrados no help do comando git-http-backend:
http://manpages.ubuntu.com/manpages/lucid/man1/git-http-backend.1.html
January 4, 2012
Programação
3 Comments
O seguinte texto foi traduzido e adaptado de:
http://jungels.net/articles/diff-patch-ten-minutes.html
Primeira situação: você está tentando compilar um pacote à partir do código fonte e descobre que alguém já o modificou para compilar na sua plataforma. Ele disponibilizou o seu trabalho como um “patch”, mas você não tem certeza de como utilizá-lo. Para utilizá-lo você deve aplicar o patch no código fonte original com uma ferramenta de linha de comando chamada patch.
Segunda situação: você fez o download do código fonte de um pacote open source e depois de algumas alterações você conseguiu compilá-lo na sua plataforma. Você gostaria de disponibilizar o seu trabalho para outros programadores, ou para os autores do pacote, sem distribuir todo o pacote modificado. Nesta situação você deve criar um patch, e a ferramenta necessária é a diff.
Este é um guia rápido para gerar ou utilizar patches que irá ajudá-lo nestas situações, mostrando como usar as ferramentas nas situações mais comuns.
Aplicando patches com patch
Para aplicar um patch em um arquivo, vá ao diretório onde o arquivo está e chame o comando patch:
patch < foo.patch
O comando acima assume que o patch está distribuído no formato unificado, que identifica o arquivo no qual patch deve ser aplicado. Se não estiver no formato unificado, você pode especificar o arquivo na linha de comando:
patch foo.txt < bar.patch
A aplicação de patches em um diretório (caso mais comum) é similar, mas você deve setar um "p level". Isto significa que dentro dos arquivos de patches, os arquivos são identificados por caminhos que possam ser diferentes de quando o patch foi criado. O "p level" faz com que o patch ignore partes do caminho do arquivo para que seja possível identificar os arquivos corretamente. Geralmente um "p level" de 1 irá funcionar, então utilize:
patch -p1 < baz.patch
Você deve mudar para o diretório raiz do código fonte antes de executar este comando. Se o "p level" utilizado não identificar corretamente os arquivos, procure nomes de arquivos no patch. Se você ver um nome como:
/users/stephen/package/src/net/http.c
E você estiver trabalhando em um diretório que contenha net/http.c, use:
patch -p5 < baz.patch
Em geral, conte quantos separadores de diretório (/) você precisa remover à partir do começo do caminho, até que o restante seja um caminho que exista no diretório atual. O valor encontrado será o "p level" que deve ser utilizado.
Para remover um patch, use a flag -R:
patch -p5 -R < baz.patch
Criando patches com diff
Utilizar a ferramenta diff é simples quer você esteja trabalhando com um arquivo ou com diretórios. Para criar um patch à partir de um arquivo, use:
diff -u original.c new.c > original.patch
Para criar um patch de um diretório inteiro, faça uma cópia do diretório:
cp -R original new
Faça as alterações necessárias no diretório new/. E então cria o patch com o comando:
diff -rupN original/ new/ > original.patch
Isto é tudo o que você precisa saber para começar a utilizar as ferramentas diff e patch. Para mais informações utilize:
man diff
man patch
Traduções
Inglês: http://jungels.net/articles/diff-patch-ten-minutes.html
Espanhol: http://www.rat.uclatux.org.ve/2009/05/guia-de-10-minutos-de-diff-y-patch/
Francês: http://fredgnix.wordpress.com/2012/02/15/diff-et-patch-en-dix-minutes/
October 16, 2011
Programas
1 Comment
Instalei o Mac OS X Snow Leopard em uma VM esses dias e tive que alterar o teclado para o padrão ABNT2. Depois de alguma pesquisa encontrei o seguinte site http://www.appunix.com.br/howto/mac-os/teclado-abnt2-on-mac-os-x-hackintosh-snow-leopad/ que descreve como fazer o procedimento manual e, também fornece um arquivo .pkg para instalar as configurações do teclado ABNT2.
February 2, 2011
Linux, Ubuntu
24 Comments
Essa semana atualizei o ubuntu que estava na minha máquina da versão 8.04 até a 10.10.
Para fazer esse upgrade tive que atualizar versão por versão, nada que fosse muito difícil já que o programa de atualização faz tudo automaticamente.
Ao tentar migrar da versão 10.04 para a versão 10.10 apareceu o seguinte erro:
Could not determine the upgrade
An unresolvable problem occurred while calculating the upgrade:
E:Error, pkgProblemResolver::Resolve generated breaks, this may be caused by held packages.
This can be caused by:
* Upgrading to a pre-release version of Ubuntu
* Running the current pre-release version of Ubuntu
* Unofficial software packages not provided by Ubuntu
Após algumas pesquisas na internet a solução foi remover o pacote xserver-xorg-video-nouveau através do comando:
apt-get --purge remove xserver-xorg-video-nouveau
Fontes:
http://ubuntuforums.org/showthread.php?t=1664249
https://bugs.launchpad.net/ubuntu/+source/xorg-server/+bug/614993
January 27, 2011
Java EE, Programação
11 Comments
Ao se colocar o JSF 2.0 no Weblogic 10.3.0.0, os EJB’s não são injetados nos manageds beans do JSF através da anotação @EJB.
Para corrigir esse problema, basta utilizar a classe abaixo:
import java.lang.reflect.Field;
import java.util.*;
import javax.ejb.EJB;
import javax.el.*;
import javax.naming.NamingException;
import com.sun.faces.el.ManagedBeanELResolver;
public class VariableResolver extends CompositeELResolver {
private final Map, List> ejbFields;
public VariableResolver() {
this.ejbFields = new HashMap, List>();
add(new ManagedBeanELResolver());
}
private void preencherEjbFields(List fields, Class clazz, Set> visitados) {
if (clazz != null && !visitados.contains(clazz)) {
visitados.add(clazz);
for (Field field : clazz.getDeclaredFields()) {
EJB ejb = field.getAnnotation(EJB.class);
if (ejb != null) {
field.setAccessible(true);
fields.add(new EJBField(field, ejb.mappedName(), field.getType()));
}
}
preencherEjbFields(fields, clazz.getSuperclass(), visitados);
for (Class i : clazz.getInterfaces()) {
preencherEjbFields(fields, i, visitados);
}
}
}
private List getEjbFields(Object obj) {
List fields = ejbFields.get(obj.getClass());
if (fields == null) {
fields = new ArrayList();
Set> visitados = new HashSet>();
preencherEjbFields(fields, obj.getClass(), visitados);
synchronized (ejbFields) {
ejbFields.put(obj.getClass(), fields);
}
}
return fields;
}
private void processarEjbs(Object obj) throws IllegalAccessException, ClassCastException, NamingException, IllegalArgumentException {
for (EJBField field : getEjbFields(obj)) {
if (field.getField().get(obj) == null) {
Object ejb = ServiceLocator.lookup(field.getType(), field.getMappedName());
field.getField().set(obj, ejb);
}
}
}
@Override
public Object getValue(ELContext arg0, Object arg1, Object arg2) {
try {
Object obj = super.getValue(arg0, arg1, arg2);
if (obj != null) {
processarEjbs(obj);
}
return obj;
} catch (IllegalArgumentException ex) {
throw new ELException(ex.getMessage(), ex);
} catch (IllegalAccessException ex) {
throw new ELException(ex.getMessage(), ex);
} catch (NamingException ex) {
throw new ELException(ex.getMessage(), ex);
}
}
private class EJBField {
private Field field;
private String mappedName;
private Class type;
public EJBField(Field field, String mappedName, Class type) {
this.field = field;
this.mappedName = mappedName;
this.type = type;
}
public Field getField() {
return field;
}
public String getMappedName() {
return mappedName;
}
public Class getType() {
return type;
}
}
}
E declarar o el-resolver no faces-config.xml:
<faces-config>
<application>
<el-resolver>VariableResolver</el-resolver>
</application>
</faces-config>
January 27, 2011
Java, Java EE, Programação
No Comments
Ao tentar efetuar o deploy de uma aplicação com JPA (implementação: Hibernate), ocorre o seguinte erro:
org.springframework.orm.hibernate3.HibernateQueryException: ClassNotFoundException: org.hibernate.hql.ast.HqlToken [SELECT p FROM PARAMETRO p WHERE UPPER(RTRIM(p.parametroPK.parametroGeral)) = :parametroGeral AND UPPER(RTRIM(p.parametroPK.codigo)) = :codigo]; nested exception is org.hibernate.QueryException: ClassNotFoundException: org.hibernate.hql.ast.HqlToken [SELECT p FROM PARAMETRO p WHERE UPPER(RTRIM(p.parametroPK.parametroGeral)) = :parametroGeral AND UPPER(RTRIM(p.parametroPK.codigo)) = :codigo]
Caused by: org.hibernate.QueryException: ClassNotFoundException: org.hibernate.hql.ast.HqlToken [SELECT p FROM PARAMETRO p WHERE UPPER(RTRIM(p.parametroPK.parametroGeral)) = :parametroGeral AND UPPER(RTRIM(p.parametroPK.codigo)) = :codigo]
at org.hibernate.hql.ast.HqlLexer.panic(HqlLexer.java:57)
at antlr.CharScanner.setTokenObjectClass(CharScanner.java:340)
at org.hibernate.hql.ast.HqlLexer.setTokenObjectClass(HqlLexer.java:31)
at antlr.CharScanner.<init>(CharScanner.java:51)
at antlr.CharScanner.<init>(CharScanner.java:60)
at org.hibernate.hql.antlr.HqlBaseLexer.<init>(HqlBaseLexer.java:56)
at org.hibernate.hql.antlr.HqlBaseLexer.<init>(HqlBaseLexer.java:53)
at org.hibernate.hql.antlr.HqlBaseLexer.<init>(HqlBaseLexer.java:50)
at org.hibernate.hql.ast.HqlLexer.<init>(HqlLexer.java:26)
at org.hibernate.hql.ast.HqlParser.getInstance(HqlParser.java:44)
at org.hibernate.hql.ast.QueryTranslatorImpl.parse(QueryTranslatorImpl.java:242)
at org.hibernate.hql.ast.QueryTranslatorImpl.doCompile(QueryTranslatorImpl.java:157)
at org.hibernate.hql.ast.QueryTranslatorImpl.compile(QueryTranslatorImpl.java:111)
at org.hibernate.engine.query.HQLQueryPlan.<init>(HQLQueryPlan.java:77)
at org.hibernate.engine.query.HQLQueryPlan.<init>(HQLQueryPlan.java:56)
at org.hibernate.engine.query.QueryPlanCache.getHQLQueryPlan(QueryPlanCache.java:72)
at org.hibernate.impl.AbstractSessionImpl.getHQLQueryPlan(AbstractSessionImpl.java:133)
at org.hibernate.impl.AbstractSessionImpl.createQuery(AbstractSessionImpl.java:112)
at org.hibernate.impl.SessionImpl.createQuery(SessionImpl.java:1623)
at org.springframework.orm.hibernate3.HibernateTemplate$29.doInHibernate(HibernateTemplate.java:837)
at org.springframework.orm.hibernate3.HibernateTemplate.execute(HibernateTemplate.java:367)
at org.springframework.orm.hibernate3.HibernateTemplate.find(HibernateTemplate.java:835)
at org.springframework.orm.hibernate3.HibernateTemplate.find(HibernateTemplate.java:827)
at db.ProductManagerDaoHB.getProductList(ProductManagerDaoHB.java:14)
at bus.ProductManager.getProducts(ProductManager.java:25)
at web.controllers.SpringappController.handleRequest(SpringappController.java:33)
at org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter.handle(SimpleControllerHandlerAdapter.java:48)
at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:819)
at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:754)
at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:399)
at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:354)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:740)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:853)
at weblogic.servlet.internal.ServletStubImpl$ServletInvocationAction.run(ServletStubImpl.java:971)
at weblogic.servlet.internal.ServletStubImpl.invokeServlet(ServletStubImpl.java:402)
at weblogic.servlet.internal.ServletStubImpl.invokeServlet(ServletStubImpl.java:305)
at weblogic.servlet.internal.WebAppServletContext$ServletInvocationAction.run(WebAppServletContext.java:6350)
at weblogic.security.acl.internal.AuthenticatedSubject.doAs(AuthenticatedSubject.java:317)
at weblogic.security.service.SecurityManager.runAs(SecurityManager.java:118)
at weblogic.servlet.internal.WebAppServletContext.invokeServlet(WebAppServletContext.java:3635)
at weblogic.servlet.internal.ServletRequestImpl.execute(ServletRequestImpl.java:2585)
at weblogic.kernel.ExecuteThread.execute(ExecuteThread.java:197)
at weblogic.kernel.ExecuteThread.run(ExecuteThread.java:170)
Para resolver este problema basta alterar o persistence.xml e adicionar a seguinte linha:
<property name="hibernate.query.factory_class" value="org.hibernate.hql.classic.ClassicQueryTranslatorFactory"/>
Fonte: http://forum.springsource.org/showthread.php?t=36860
January 27, 2011
Java, Programação
No Comments
Esses dias precisei fazer alguns testes que verificavam se existia uma propriedade de sistema para tomar determinada ação.
Ao se passar a propriedade através da seguinte linha de comando:
mvn -Dminha.propriedade=valor test
Verifiquei que o teste nunca encontrava a propriedade passada através da chamada System.getProperty("minha.propriedade")
.
Dois jeitos fáceis para fazer a passagem de propriedade corretamente para os testes são:
mvn -Dminha.propriedade=valor test -DforkMode=never
ou
mvn test -DargLine="-Dminha.propriedade=valor"
Particularmente eu prefiro o segundo jeito.
Fonte: http://stackoverflow.com/questions/824019/maven-2-1-0-not-passing-on-system-properties-to-java-virtual-machine
« Previous Entries