Migrando issues entre proyectos de Bitbucket
Hace un tiempo conté como migré un repositorio Mercurial a Git . Se trataba de un proyecto hospedado en Bitbucket y para cambiar de DVCS tuve que crear un proyecto nuevo, que tambien hospedamos allí porque somos pobretones y nos da repos privados gratis. En la mudanza se me quedaron varios issues que necesitaba migrar. Y no era el único.
Buscando un rato encontré scriptcitos para migrar desde o hacia GitHub pero no había para migrar entre proyectos de Bitbucket, algo bastante común desde que empezaron a ofrecer soporte Git.
Decidí entonces que debía hacer mi propio scriptcito migrador. La cosa se complicaba porque el par de bibliotecas python que interactuan con la API de Bitbucket no tenian, hasta el momento, soporte para "postear" issues
Pero no hay darse por vencido: se me ocurrió mirar el par de forks de cada proyecto y encontré justo lo que estaba buscando.
Entonces bastó con instalar el fork de David Paz Reyes
$ pip install git+https://github.com/davidmpaz/BitBucket-api.git
he hice un script que migra todo los issues en estado new
del repo original (gpec
) al nuevo (gpec
) y los potenciales comentarios que tenga.
Como el autor se pierde (dado que el nuevo quedará publicado con mi usuario)
agrego un comentario avisando que es un issue migrado.
#!/usr/bin/env python # -*- coding: utf-8 -*- from bitbucket import bitbucket gpec = bitbucket.Bitbucket('tin_nqn', '***', 'gpec') gpec3 = bitbucket.Bitbucket('tin_nqn', '***', 'gpec3') # request original ISSUES _, result = gpec.get_issues() for issue in result['issues'][:]: original_id = issue['local_id'] if issue['status'] != 'new': continue # and post to the new repo ok, new_issue = gpec3.add_issue(**issue) if not ok: print 'Fail migrating #%d' % original_id continue new_id = new_issue['local_id'] print 'Migrated #%d as #%d in the new project' % (original_id, new_id) # add a comment to mark the migration who = issue.get('reported_by', None) who = who['username'] if who else 'anonymous' gpec3.add_issue_comment(new_id, content="Issue migrated from the original repo. " "Was #%d reported by %s" % (original_id, who)) # migrate comments result, comments = gpec.get_issue_comments(original_id) for c in comments: if not c['content']: continue gpec3.add_issue_comment(new_id, **c)
¡Disfruten!
Comentarios
Comments powered by Disqus