Al ver que todavía no hay en Launchpad un script bzr_set.py para la nueva release de OpenERP 6.1, me he tomado la libertad de crearme uno propio con lo que tenemos disponible de momento.
Para los que no conozcais el script, ejecutándolo podemos crear en ese directorio toda la estructura de OpenERP, con lo que tendriamos una instancia de OpenERP completa. Lo he modificado de tal manera que además de bajarnos la 6.1 también nos baja la localización española haciendo también todos los enlaces simbólicos. Para los que desarrolleis os facilitará mucho el trabajo.
Ya que no puedo adjuntar archivos en este blog os paso el código tal cual:
#!/usr/bin/python
# Modificado por Juani Ubeda para uso temporal #(http://www.informaticartica.blogspot.com)
__all__ = ['update_openerp']
import os
import shutil
import glob
import bzrlib.builtins
from bzrlib.plugins import launchpad
from bzrlib.branch import Branch
from bzrlib.errors import NotBranchError
from bzrlib.revisionspec import RevisionSpec
def run_cmd(cmdname, *args, **kwargs):
f = getattr(bzrlib.builtins, 'cmd_' + cmdname)()
if hasattr(f, '_setup_outf'):
# old versions of bzr does not have this function
# this function must be called to avoid a exception in bzr code
f._setup_outf()
return f.run(*args, **kwargs)
_VERSIONS = ('4.2', '5.0', '6.0', '6.1','trunk')
_DEFAULT_VERSION = '6.1'
_EXTRA_ADDONS_MAP = {
'4.2': '4.2-extra-addons',
'5.0': 'stable_5.0-extra-addons',
'6.0': 'extra-6.0',
'6.1': 'trunk-extra-addons',
}
def update_openerp(dest_dir, version=_DEFAULT_VERSION, lplogin=None, export=False, revision=None, verbose=False):
"""
if lplogin == None -> make a branch instead of a checkout
if export == True -> bzr export
if revision is provided, get the branches at this revision
more information with:
$> bzr help revisionspec
"""
def log(msg):
if verbose:
print msg
if version not in _VERSIONS:
raise Exception('Unknown version')
dest_dir = dest_dir or '.'
branch = lplogin is None
if branch:
BASEURL = 'lp:'
else:
BASEURL = 'bzr+ssh://%s@bazaar.launchpad.net/' % (lplogin,)
# map branch URLs according to version
extraversion = _EXTRA_ADDONS_MAP[version]
communityversion = 'trunk'
webversion = version
bzr_repository = {
'server': (BASEURL + '~openerp/openobject-server/' + version, True),
'client': (BASEURL + '~openerp/openobject-client/' + version, True),
'addons': (BASEURL + '~openerp/openobject-addons/' + version, True),
'addons-extra': (BASEURL + '~openerp-commiter/openobject-addons/' + extraversion, False),
'addons-community': (BASEURL + '~openerp-community/openobject-addons/' + communityversion + '-addons-community', False),
'web': (BASEURL + '~openerp/openerp-web/' + webversion, True),
'spanish': (BASEURL + '~openerp-spain-team/openerp-spain/' + version, True),
}
bzr_links = {
'addons/*': 'server/openerp/addons/',
'addons-extra/*': 'server/openerp/addons/',
'addons-community/*': 'server/openerp/addons/',
'spanish': 'server/openerp/addons/',
}
if branch:
cmd = {'new': lambda u, l, r: run_cmd('branch', u, l, revision=r),
'update': lambda u, l, r: run_cmd('pull', u, directory=l, overwrite=True, revision=r),
}
else:
cmd = {'new': lambda u, l, r: run_cmd('checkout', u, l, lightweight=True, revision=r),
'update': lambda u, l, r: run_cmd('update', l), # no revision option :(
}
cmd['export'] = lambda u, l, r: run_cmd('export', l, u, revision=r)
msg = "%(status)s %(type)s of %(from)s into %(to)s"
if not os.path.exists(dest_dir):
os.makedirs(dest_dir)
for local, (bzrdir, has_tags) in bzr_repository.items():
local = os.path.join(dest_dir, local)
typ = ['checkout', 'branch'][branch]
if export:
if os.path.exists(local):
shutil.rmtree(local)
status = 'export'
typ = 'sources'
else:
try:
b = Branch.open(local)
# FIXME check that the current workingDirectory is a branch or a checkout
status = 'update'
except NotBranchError:
status = 'new'
frm = bzrdir
rev = None
if revision and (not revision.startswith('tag:') or has_tags):
frm = '%s (%s)' % (bzrdir, revision)
rev = RevisionSpec.from_string(revision)
log(msg % {'status': status, 'type': typ, 'to': local, 'from': frm})
cmd[status](bzrdir, local, rev and [rev] or None)
# Doing symlinks
log('(Re)Computing Symbolic links...')
for src2,dest2 in bzr_links.items():
src2 = os.path.join(dest_dir, src2)
dest2 = os.path.join(dest_dir, dest2)
for src in glob.glob(src2):
dest = os.path.join(dest2, os.path.basename(src))
if not os.path.isdir(dest):
os.symlink(os.path.realpath(src), dest)
log('='*79)
log('Sources of OpenERP have been installed. If you develop new features,')
log('you can get more information on how to contribute to the project here:')
log('\thttp://test.openobject.com')
log('='*79)
#
# Testing bzr send
#
if __name__ == '__main__':
import optparse
description = """Tool that allows you to get the last sources of openerp on launchpad.
It downloads all branches, and create symlinks for addons in the server. By
default, it loads the latest stable version.
"""
parser = optparse.OptionParser(description=description,
usage="%prog [options] [directory]")
parser.add_option('--checkout', dest='lplogin', help="Specify the launchpad login to make a checkout instead of a branch")
parser.add_option('--export', dest='export', help='Make an export of the sources, instead of branches', action='store_true', default=False)
parser.add_option('-v', dest="version", default=_DEFAULT_VERSION, type="choice", choices=_VERSIONS, help="Specify the version to take (trunk, 4.2, 5.0, 6.0)")
parser.add_option('-r', dest="revision", default=None, help="Specify the revision to take. (useful to take a specific TAG or to specify a DATE)")
parser.add_option('-q', '--quiet', dest='quiet', help='Suppress the output', action='store_true', default=False)
opt, args = parser.parse_args()
dest_dir = args and args[0] or '.'
update_openerp(dest_dir, opt.version, opt.lplogin, opt.export, opt.revision, not opt.quiet)
Espero que os sea de utilidad, el uso es simple:
- Copias este código en un archivo de texto y lo llamais por ejemplo bzr_set.py
- Lo copiais a un directorio donde querais tener la instancia de OpenERP 6.1
- Lo ejecutais con la orden : python bzr_set.py
- Esperais un ratito a que termine. (Os dará una serie de Warnings, si quereis evitarlos descargad de Launchpad el script y la carpeta y archivo ocultos que lo acompañan y reemplazais el script por el mío)
Para arrancar openerp seguid los siguientes pasos:
- entrar en la carpeta server : cd server
- arrancar el servidor : ./openerp-server --addons-path=openerp/addons/,../web/addons --load=web
- escribir en el navegador : http://localhost:8069
- a disfrutar ........ ;)
Cada vez que lo ejecuteis os actualizará los directorios con lo último de cada rama.
Saludos ,
Juani
Al arrancar da este mensaje
ResponderEliminar----
new branch of lp:~openerp-commiter/openobject-addons/trunk-extra-addons into ./addons-extra
/usr/lib/python2.6/dist-packages/Crypto/Util/randpool.py:40: RandomPool_DeprecationWarning: This application uses RandomPool, which is BROKEN in older releases. See http://www.pycrypto.org/randpool-broken
RandomPool_DeprecationWarning)
----
¿sabes a qué es debido?
Luego en la rama de spanish da este warning
-------
/usr/lib/python2.6/dist-packages/bzrlib/lockable_files.py:61: UserWarning: 'LockableFiles()' was gc'd while locked
warnings.warn("%r was gc'd while locked" % self.repr)
/usr/lib/python2.6/dist-packages/bzrlib/lockable_files.py:61: UserWarning: 'LockableFiles()' was gc'd while locked
warnings.warn("%r was gc'd while locked" % self.repr)
-------
¿tiene importancia?
Un saludo y gracias por todo Juani !!
Buenas Carlos, gracias por tus comentarios, hace ilusión ver que los demás te siguen. En principio comentarte que desconozco ese primer error que muestras pero me da la sensación de que deberías actualizar las librerías python y en concreto la de crypto.
ResponderEliminarEn el segundo caso no pasa nada, te descargará el contenido de launchpad sin problemas.
Un apunte (otro), a la hora de hacer los enlaces el script, puede que nos deje una versión de un módulo que está en addons-extra en vez de en addons (que son los oficiales) y tendríamos una versión del módulo "menos oficial", dependiendo el orden en el que hagamos los enlaces y si machacamos los ya creados o no.
ResponderEliminar¿sabes si el script a la hora de realizar los enlaces (symlink) mantiene el directorio si es que existe o lo machaca ?? Vamos si hace los enlaces con "ln -s" o con "ln -sf".
Yo he mirado y según el orden del script:
bzr_links = {
'addons/*': 'server/openerp/addons/',
'addons-extra/*': 'server/openerp/addons/',
'addons-community/*': 'server/openerp/addons/',
'spanish': 'server/openerp/addons/',
}
primero haría los enlaces a addons, luego a addons-extra, ....
Yo he comprobado que si existe la carpeta "edi" de addons ya creada, NO hace un enlace a la carpeta "edi" de addons-extra, por lo que parece que los enlaces (si es que existen) NO los machaca.
Un saludo Juani (y claro que te seguimos ..., aquí estaremos dando guerra)
Al volver a ejecutar el script para actualizar, me ha dado este error:
ResponderEliminarroot@ERP:/opt/openerp/61# python bzr_set.py
update branch of lp:~openerp-commiter/openobject-addons/trunk-extra-addons into ./addons-extra
/usr/lib/python2.6/dist-packages/Crypto/Util/randpool.py:40: RandomPool_DeprecationWarning: This application uses RandomPool, which is BROKEN in older releases. See http://www.pycrypto.org/randpool-broken
RandomPool_DeprecationWarning)
Enter passphrase for key '/root/.ssh/id_rsa':
Traceback (most recent call last):
File "bzr_set.py", line 152, in
update_openerp(dest_dir, opt.version, opt.lplogin, opt.export, opt.revision, not opt.quiet)
File "bzr_set.py", line 115, in update_openerp
cmd[status](bzrdir, local, rev and [rev] or None)
File "bzr_set.py", line 78, in
'update': lambda u, l, r: run_cmd('pull', u, directory=l, overwrite=True, revision=r),
File "bzr_set.py", line 21, in run_cmd
return f.run(*args, **kwargs)
File "/usr/lib/python2.6/dist-packages/bzrlib/builtins.py", line 1004, in run
branch_to.lock_write()
File "/usr/lib/python2.6/dist-packages/bzrlib/branch.py", line 2144, in lock_write
return self.control_files.lock_write(token=token)
File "/usr/lib/python2.6/dist-packages/bzrlib/lockable_files.py", line 193, in lock_write
token_from_lock = self._lock.lock_write(token=token)
File "/usr/lib/python2.6/dist-packages/bzrlib/lockdir.py", line 600, in lock_write
return self.wait_lock()
File "/usr/lib/python2.6/dist-packages/bzrlib/lockdir.py", line 568, in wait_lock
raise LockContention(self)
bzrlib.errors.LockContention: Could not acquire lock "LockDir(file:///opt/openerp/61/addons-extra/.bzr/branch/lock)":
Solución:
he borrado el contenido del directorio /opt/openerp/61/addons-extra/.bzr/branch/lock, lo he vuelto a lanzar y sin problemas
Por si a alguien más le ocurre ;-)