Notícias para quem usa mercurial

11/12/2008
  • No dia 2 de dezembro foi lançada a nova versão do Mercurial, a 1.1. Entre as novidades, compatibilidade com Python 2.6, maior conformidade com o padrão WSGI e o suporte a rebase através de uma extensão. Mais informações nas Notas de Lançamento.
  • A ferramenta de buscas de código do google, o codesearch, ganhou suporte a repositórios no git e no mercurial no último dia 09. Agora é possível procurar lá coisas como do Mozilla, JDK e NetBeans, que são três softwares cujo repositório de código é gerenciado pelo mercurial. Mais no Blog do Google Code.
  • O tópico do fórum do ohloh pedindo suporte ao mercurial é sempre movimentado. Nessa semana, começou um movimento espontâneo dos usuários, dizendo que fariam doações para que o mercurial fosse logo suportado pelo ohloh. Para a alegria dos usuários, Robin Luckey (um dos desenvolvedores do ohloh) apareceu na thread dizendo que nas próximas semanas ele vai trabalhar no código do ohloh para que o suporte a novos sistemas de controle de versão sejam adicionados de forma mais transparente.

Boas notícias para quem usa o mercurial para gerenciar seus códigos fonte!


Email por Walter Cruz em Python
Tags: git, mercurial, scm, svn

Dr. Project

21/07/2008

Link: https://www.drproject.org/

Apesar da recente popularização de sistemas de controles de versão distribuídos como o git ou o mercurial, o svn ainda é a ferramenta mais popular para controle de versões. E junto com ele, quase sempre está o trac, que adiciona ao repositório um wiki, tickets e outras ferramentas para gerenciar o desenvolvimento.

Porém, a maior questão dos usuários com o trac é ter de subir uma instalação do trac para cada repositório. Não é uma tarefa muito difícil, mas convenhamos, podia ser mais fácil.

Pensando nisso, a Universidade de Toronto fez um fork do trac, adicionando a capacidade de múltiplos projetos. Entre as facilidades oferecidas, podemos citar, por exemplo, que criar um projeto no DrProject já cria o respectivo repositório.

Comparação

O DrProject era originalmente um fork do portal open source leve chamado Trac. Essa é a comparação dos dois hoje:

DrProject Trac
Múltiplos projetos por portal sim não
Listas de e-mails integradas sim não
Controle de Acesso baseado em Roles sim não
Contas de Usuários externas sim por plugins de terceiros
Camada de banco de dados Elixir/SQLAlchemy SQL manual
Navegador de repositório Subversion sim sim
Support a Perforce, BZR, etc. não por plugins de terceiros
Busca Cross-Component sim sim
Administração baseada em Web sim parcial
Sintaxe do Wiki Markdown custom
Milestones Sim Sim
Tagging yes by third-party plugin
Remote Scripting API yes no
Client-Side Javascript Dojo handwritten Javascript
RSS Feeds yes yes
Custom Ticket Views no yes
Integração ao Eclipse não por plugins de terceiros

Segundo Jeff Balogh, o trunk dele é estável, com o desenvolvimento feito nos branches.

O projeto foi originalmente desenvolvido para uso no ensino[bb]. Numa troca de e-mail rápida com os desenvolvedores, perguntei no que isso se fazia presente no projeto. David Wolever me disse que o sistema de permissões é um reflexo disso, já que num projeto open source o acesso ao código não precisa ser restrito. Greg Wilson me falou a respeito das listas de e-mail integradas, e das operações em lote, como criar vários projetos com nomes sequenciais - que são úteis dentro de um ambiente de ensino.

A instalação do projeto foi parecida com a do trac, com a exceção que o DrProject espera que os repositórios estejam dentro dele, já que ele os administra. Numa tentativa de atualização, o meu banco de dados (sqlite) teve algum problema, mas logo depois o problema desapareceu. Sinais de que o projeto ainda tem muito o que andar, mas é uma boa pedida pra adicionar na lista de coisas a testar.


Email por Walter Cruz em Python, Resenhas
Tags: svn, trac

Micro Tutorial de Mercurial

22/04/2008

Creio que a primeira vez que li algo sobre controle de versão distribuído foi no blog do Thiago Arrais . Até falei sobre isso um tempo atrás .

Eu comecei a utilizar o mercurial. Daí, até descobrir o assembla, foi um pulo. Pensei em fazer um tutorial sobre o mercurial, mas sempre esbarrei na preguiça.

Então, veio a comunidade rails, com seu discurso de três letras: git, git, git! O Fábio Akita publicou um micro tutorial de git, e eu resolvi segui-lo, traduzindo os comandos para o mercurial.

Pra começar a história: nem todas as opções que o git suporta são suportadas pelo mercurial. Algumas são tratáveis pelo uso de extensões, outras estão planejadas para serem adicionadas no futuro.

Para começar, após instalar o mercurial, vamos fazer uma configuração básica e habilitar os plugins necessários. O arquivo é o .hgrc, no $HOME do usuário.

[extensions]
record=
shelve=/home/digo/shelve.py
transplant=

[ui]
username = Walter Cruz <waltercruz@gmail.com>
ignore = ~/.hgignore

e o artigo .hgignore, que configura quais são os padrões de arquivos a serem ignorados.

# use glob syntax.
syntax: glob

*.elc
*.pyc
*~
.*.swp

# switch to regexp syntax.
syntax: regexp
^\.pc/

Isso feito, vamos partir para a nossa exploração. Acompanhem junto com o artigo original do Akita. Nem tudo se traduz numa equivalência 100%, e tenho algumas considerações a fazer no final:

Clone da suíte de testes dos microformats

digo@ubuntu:~/devel$ hg clone <a href="http://hg.microformats.org/tests">http://hg.microformats.org/tests</a> microformats_tests
requesting all changes
adding changesets
adding manifests
adding file changes
added 359 changesets with 1249 changes to 384 files
updating working directory
223 files updated, 0 files merged, 0 files removed, 0 files unresolved

digo@ubuntu:~/devel/microformats_tests$ hg branches
default                        358:302778d2f672

Manipulando Branches Locais

digo@ubuntu:~/devel/microformats_tests$ hg branch working
marked working directory as branch working

digo@ubuntu:~/devel/microformats_tests$ hg ci -m working

digo@ubuntu:~/devel/microformats_tests$ hg branch
working

digo@ubuntu:~/devel/microformats_tests$ hg branches
working                        359:e2d6b4522602
default                        358:302778d2f672 (inactive)

digo@ubuntu:~/devel/microformats_tests$ hg status
M README.web
M TODO
? walter.txt

digo@ubuntu:~/devel/microformats_tests$ hg add
adding walter.txt

digo@ubuntu:~/devel/microformats_tests$ hg ci -m "Primeiro commit"

digo@ubuntu:~/devel/microformats_tests$ hg branches
working                        359:445e4b41d270
default                        358:302778d2f672 (inactive)

digo@ubuntu:~/devel/microformats_tests$ hg update -C default
2 files updated, 0 files merged, 1 files removed, 0 files unresolved

digo@ubuntu:~/devel/microformats_tests$ hg branch meufix
marked working directory as branch meufix

digo@ubuntu:~/devel/microformats_tests$ hg ci -m meufix
created new head

digo@ubuntu:~/devel/microformats_tests$ hg ci -m "minha correcao"

digo@ubuntu:~/devel/microformats_tests$ hg branch
meufix

Merges Triviais

digo@ubuntu:~/devel/microformats_tests$ hg update -C default
1 files updated, 0 files merged, 0 files removed, 0 files unresolved

digo@ubuntu:~/devel/microformats_tests$ hg merge meufix
1 files updated, 0 files merged, 0 files removed, 0 files unresolved
(branch merge, don't forget to commit)

digo@ubuntu:~/devel/microformats_tests$ hg update -C working
3 files updated, 0 files merged, 0 files removed, 0 files unresolved

Merge vs Rebase

digo@ubuntu:~/devel/microformats_tests$ hg shelve

digo@ubuntu:~/devel/microformats_tests$ hg transplant default

digo@ubuntu:~/devel/microformats_tests$ hg unshelve
unshelve completed

digo@ubuntu:~/devel/microformats_tests$ hg status
M Rakefile

digo@ubuntu:~/devel/microformats_tests$ hg ci -m "mais um commit"

Reusando e Resincronizando seus Repositórios

digo@ubuntu:~/devel/microformats_tests$ cd ..
digo@ubuntu:~/devel$ hg clone microformats_tests/ mf_tests
updating working directory
223 files updated, 0 files merged, 0 files removed, 0 files unresolved

digo@ubuntu:~/devel/mf_tests$ hg status
M TODO

digo@ubuntu:~/devel/mf_tests$ hg ci -m "modificacao no projeto"

digo@ubuntu:~/devel/mf_tests$ hg push
pushing to /home/digo/devel/microformats_tests
searching for changes
adding changesets
adding manifests
adding file changes
added 1 changesets with 1 changes to 1 files

digo@ubuntu:~/devel/mf_tests$ cd ../microformats_tests/

digo@ubuntu:~/devel/microformats_tests$ hg update -C default
3 files updated, 0 files merged, 1 files removed, 0 files unresolved

digo@ubuntu:~/devel/microformats_tests$ hg update -C working
4 files updated, 0 files merged, 0 files removed, 0 files unresolved

digo@ubuntu:~/devel/microformats_tests$ hg ci -A -m "Novo arquivo"

adding todo
removing TODO

Renomeando arquivos

digo@ubuntu:~/devel/microformats_tests$ hg update -C default
3 files updated, 0 files merged, 2 files removed, 0 files unresolved

digo@ubuntu:~/devel/microformats_tests$ hg update -C working
4 files updated, 0 files merged, 1 files removed, 0 files unresolved

digo@ubuntu:~/devel/microformats_tests$ hg mv Rakefile rakefile

conteúdo do rakefile (branch working):

# Walter Cruz
# a rakefile for working with these microformats test files. Maintained by ryan king <ryan@theryanking.com>.

digo@ubuntu:~/devel/microformats_tests$ hg update -C default
3 files updated, 0 files merged, 3 files removed, 0 files unresolved

conteúdo do rakefile (branch default):

# a rakefile for working with these microformats test files. Maintained by ryan king <ryan@theryanking.com>.
# tutorial mercurial
digo@ubuntu:~/devel/microformats_tests$ hg merge working
abort: outstanding uncommitted changes

digo@ubuntu:~/devel/microformats_tests$ hg merge -f working
3 files updated, 1 files merged, 0 files removed, 0 files unresolved
(branch merge, don't forget to commit)

conteúdo após merge:

# Walter Cruz
# a rakefile for working with these microformats test files. Maintained by ryan king <ryan@theryanking.com>.
# tutorial mercurial

Considerações:

Finda a jornada, alguns pontos:

  • Atualmente o git oferece mais opções que o mercurial. O stash é bacana, e a adição iterativa de arquivos é interessante também. Algumas dessas coisas puderam ser resolvidas pelo uso de extensões, mas ainda assim não trazem uma equivalência total. Por exemplo, no mercurial, não é possível remover um branch.
  • Eu gosto dos comandos do mercurial :) - A principal diferença em relação ao git está na área dos branches.
  • Gostaria de ler em algum lugar sobre as diferenças internas de implementação entre ambos.
  • Não sei ainda qual é o padrão para trabalhar com um repositório mercurial sincronizando com um subversion. O que tenho feito até agora é migrar meus antigos repositórios.
  • Eu não gosto de CVS (Sim, o artigo não tem nada a ver com CVS, mas o código do b2evolution está no CVS, e eu tenho de usá-lo de vez em quando).
  • O git pode ser publicado na web usando o gitweb. O mercurial pode ser publicado facilmente na web também.
  • Gostei do mercurial me avisar ao tentar fazer um merge sem ter comitado as coisas antes.
  • Atualmente, me parece que o git tem coisas que o mercurial não tem. Não sei do inverso.

Enquanto eu escrevia esse texto, o Akita publicou uma entrevista com Chris Wanstrath com uma frase interessante: "As far as other solutions go, it’s Rails vs Django all over again. If you use Mercurial, that’s fine. The two are so similar (yes, Git does work great on Windows) that as long as people move to distributed source control, it’s still a win."

Sobre a questão de hospedagem para mercurial, eu sugiro uma olhada no assembla.


Email por Walter Cruz em Programação
Tags: git, mercurial, svn

Espertinho esse paster não?

21/04/2008

walter@walter:~/devel/python/pylons_projects/artigos$ paster controller falchemy
Creating /home/walter/devel/python/pylons_projects/artigos/artigos/controllers/falchemy.py
Running svn add /home/walter/devel/python/pylons_projects/artigos/artigos/controllers/falchemy.py
Creating /home/walter/devel/python/pylons_projects/artigos/artigos/tests/functional/test_falchemy.py
Running svn add /home/walter/devel/python/pylons_projects/artigos/artigos/tests/functional/test_falchemy.py
 

Ao criar um controlador em uma pasta que estava num repositório svn, ele já adicionou o controller ao repositório :D


Email por Walter Cruz em Python, Pylons
Tags: paster, pylons, subversion, svn

1 2 >>