[Gelistirici] pisi rubymodules

Fatih Aşıcı fatih at pardus.org.tr
12 Tem 2010 Pzt 09:49:01 EEST


On Monday 12 July 2010 02:08:17 Gökmen Görgen wrote:
> # -*- coding: utf-8 -*-
> #
> # Copyright (C) 2005-2010 TUBITAK/UEKAE

2005'te yazmaya başlamadıysan burayı düzeltmen gerekiyor :)

> #
> # This program is free software; you can redistribute it and/or modify it
> under # the terms of the GNU General Public License as published by the
> Free # Software Foundation; either version 2 of the License, or (at your
> option) # any later version.
> #
> # Please read the COPYING file.
> # Author: Gökmen Görgen, gkmngrgn [at] gmail.com
>
> # standard python modules
> from glob import glob
> from gettext import translation
> from os import path
> from os import popen

"import os" daha iyi.

>
> __trans = translation('pisi', fallback=True)
> _ = __trans.ugettext
>
> # Pisi Modules
> import pisi.context as ctx
>
> # ActionsAPI Modules
> import pisi.actionsapi
> import pisi.actionsapi.get as get
> from pisi.actionsapi.shelltools import export
> from pisi.actionsapi.shelltools import isEmpty
> from pisi.actionsapi.shelltools import system
>
> class ConfigureError(pisi.actionsapi.Error):
>     def __init__(self, value=''):
>         pisi.actionsapi.Error.__init__(self, value)
>         self.value = value
>         ctx.ui.error(value)
>
> class CompileError(pisi.actionsapi.Error):
>     def __init__(self, value=''):
>         pisi.actionsapi.Error.__init__(self, value)
>         self.value = value
>         ctx.ui.error(value)
>
> class InstallError(pisi.actionsapi.Error):
>     def __init__(self, value=''):
>         pisi.actionsapi.Error.__init__(self, value)
>         self.value = value
>         ctx.ui.error(value)
>
> class RunTimeError(pisi.actionsapi.Error):
>     def __init__(self, value=''):
>         pisi.actionsapi.Error.__init__(self, value)
>         self.value = value
>         ctx.ui.error(value)
>

pythonmodules içinde de bu kısım aynı. Ekrana hata mesajı basmak için pisi.Error 
sınıfını miras almak yetiyor aslında. Sandbox için belki böyle bir şey yapılmış
olabilir. Şimdilik böyle kalsın; sonra bakarız.

> def getconfig(config):

ActionsAPI modüllerinin kendine has garip bir isimlendirme stili var. Bu modül Pisi'nin
yazım stilini izliyor. Bence güzel.

Yalnız getconfig'i de diğerlerine benzer şekilde get_config yapalım.

>     return popen("ruby -rrbconfig -e 'puts Config::CONFIG[\"%s\"]'" %
> config).read().strip()

Bu kısımda olası Exception'ları yakalamak gerekir mi acaba?

> def get_ruby_version():
>     return getconfig('ruby_version')
>
> def get_rubylibdir():
>     return getconfig('rubylibdir')
>
> def get_sitedir():
>     return getconfig('sitedir')
>
> def get_ruby_install_name():
>     return getconfig('ruby_install_name')
>
> def get_gemhome():
>     (rubylibdir, ruby_version) = path.split(get_rubylibdir())
>
>     return path.join(get.installDIR(), rubylibdir.lstrip('/'), 'gems',
> ruby_version)
>
> def get_sitelibdir():
>     return getconfig('sitelibdir')
>
> def rdodoc():
>     from pisi.actionsapi.pisitools import dodoc
>
>
>     docs = ('AUTHORS', 'CHANGELOG', 'CONTRIBUTORS', 'Change*',
> 'KNOWN_BUGS', 'MAINTAINERS', 'NEWS', 'README*', 'History.txt')
>
>     for doc_glob in docs:
>         for doc in glob(doc_glob):
>             if not isEmpty(doc):
>                 dodoc(doc)

Bu fonksiyona daha anlaşılır bir isim bulunabilir. auto_dodoc gibi mesela?

> def install(parameters = ''):
>     '''does ruby setup.rb install'''
>     if system('ruby -w setup.rb --prefix=/usr --destdir=%s %s' %
> (get.installDIR(), parameters)): raise InstallError, _('Install failed.')
>
>     rdodoc()

/usr öneki hardcode edilmemeli. get.defaultprefixDIR() var bunun için.

> def rake_install(parameters = ''):
>     '''execute rake script for installation'''

Başka fonksiyonlarda da aynı durum söz konusu. Argümanlara öntanımlı değer atanırken
eşittir işaretinin etrafında boşluk olmamalı.

>     if system('rake -t -l /usr/lib %s' % parameters):
>         raise InstallError, _('Install failed.')
>
>     rdodoc()

/lib kısmını hardcode etmemek şu an mümkün değil sanırım. Şimdilik sadece get.defaultprefixDIR'ı
kullanalım.

> def run(parameters = ''):
>     '''executes parameters with ruby'''
>     export('DESTDIR', get.installDIR())
>
>     if system('ruby %s' % parameters):
>         raise RuntimeError, _("Running %s failed.") % parameters

Hata mesajı "Running 'ruby %s' failed." şeklinde olacaktı sanırım.



Gelistirici mesaj listesiyle ilgili daha fazla bilgi