İmkansız denen şeyler çoğunlukla denenmemiş olanlardır.
Jim Goodvin
Delicious StumbleUpon Digg Twitter Facebook

Python İçin Svn Sunucu İşlemleri Yardımcısı

Yazan : admin Tarih : January 4, 2009-6:37 am Etiketler : ,

Google Code üzerindeki proje oluşturma limitini ne yazık ki doldurdum. İşe yaramayacak bir kaç projeyi sildim ancak tam olarak silinmediği için hala limit dolu olarak görünüyor. Bunun üzerine svnservisi.com alan adını alıp kendi svn sunucumu kurmaya karar verdim. Tabi genel kullanımada açık ve herhangi bir sınırlama olmayacak (maddi, manevi gidebildiği yere kadar :) )

Şu an bir vps üzerinde. Sistemde tam olarak bitmedi iş yoğunluğundan ötürü. Eğer asterisk sunucusu ile ilgili yapılacakları bu hafta sonu tamamlayabilirsem sanırım bu pazartesi ya da hafta ortalarında rahata kavuşacağım ve biraz dinlenme imkanı bulacağım. Böyle bir durumda bir iki hafta sonra svnservisi.com yayın hayatına başlayabilir.

Bu sitede kullanmak üzere python ile arka planda depo işlemlerini gerçekleştirebilmek için bir modül geliştirdim. Benim işimi şu an için görüyor. Bir kaç şey daha eklemem ve kodları biraz daha düzenlemem gerekecek gibi. Onlarıda bahsi geçen iş yoğunluğu bittikten sonra ele alabilirim. Yarın yorucu bir gün olacak, iletiyi burada noktalayıp biraz dinlensem iyi olur kanaatimce.

 
#-*- coding: utf-8 -*-
 
import os
import sys
import ConfigParser
 
def create_value_list(argv):
    i = 0
    value_list = {}
    value_name = ""
    for value in argv:
        if i==0:
            value_list[value[2:]] = ""
            value_name = value[2:]
            i = 1
        else:
            if value.split(",").__len__()>1:
                value_list[value_name] = value.split(",")
            else:
                value_list[value_name] = value
            i = 0
 
    return value_list
 
class SvnConf:
    def user_add(self):
        config_file = "%s%s/conf/passwd" %(self.argv['repo_path'],self.argv['project'])
 
        config = ConfigParser.RawConfigParser()
        config.read(config_file)
 
        config.set("users", self.argv['username'], self.argv['secret'])
 
        configfile = open(config_file,"wb")
        config.write(configfile)
 
    def user_del(self):
        config_file = "%s%s/conf/passwd" %(self.argv['repo_path'],self.argv['project'])
 
        config = ConfigParser.RawConfigParser()
        config.read(config_file)
 
        config.remove_option("users", self.argv['username'])
 
        configfile = open(config_file,"wb")
        config.write(configfile)
 
    def user_edit(self):
        self.user_del()
        self.user_add()
 
    def set_svnserve(self):
        config_file = "%s%s/conf/svnserve.conf" %(self.argv['repo_path'],self.argv['project'])
 
        config = ConfigParser.RawConfigParser()
        config.read(config_file)
 
        if self.argv.has_key("realm"):
            config.set("general", "realm", self.argv['realm'])
        if self.argv.has_key("password_db"):
            config.set("general", "password-db", self.argv['password_db'])
        if self.argv.has_key("auth_access"):
            config.set("general", "auth-access", self.argv['auth_access'])
        if self.argv.has_key("anon_access"):
            config.set("general", "anon-access", self.argv['anon_access'])
        if self.argv.has_key("authz"):
            config.set("general", "authz-db", self.argv['authz'])
 
        configfile = open(config_file,"wb")
        config.write(configfile)
 
class SvnApi(SvnConf):
    def __init__(self,argv):
        self.argv = argv
 
    def create(self):
        trunk_dir = "file:///%s%s/trunk" %(self.argv['repo_path'],self.argv['project'])
        branches_dir = "file:///%s%s/branches" %(self.argv['repo_path'],self.argv['project'])
        tags_dir = "file:///%s%s/tags" %(self.argv['repo_path'],self.argv['project'])
 
        os.system("svnadmin create %s%s" %(self.argv['repo_path'],self.argv['project']))
        os.system("svn mkdir -m 'Initial directory structure.' %s %s %s --username %s"
                  %(
                    trunk_dir,
                    branches_dir,
                    tags_dir,
                    self.argv['username']
                    )
        )
 
if __name__=="__main__":
    argv = create_value_list(sys.argv[1:])
    svn = SvnApi(argv)
 
    for action in argv['action_list']:
        if not action=="":
            exec("svn.%s()" %(action))
 

Kullanımına dair bir kaç örnek:

 
# Proje oluşturur ve proje için bir kullanıcı tanımlar.
$ python svnapi.py --repo_path /var/svn/ --project proje_adi --username omer --secret 12345 --action_list create,user_add
# Kullanıcı bilgilerini düzenler
$ python svnapi.py --repo_path /var/svn/ --project proje_adi --username omer --secret 1029304 --action_list user_edit,
# Kullanıcıyı siler
$ python svnapi.py --repo_path /var/svn/ --project proje_adi --username omer --action_list user_del,
 

cok guzel bir fikir.

bu arada, svn icin python’a yazilmis guzel bir kutuphane vardi diye hatirliyorum. ama server tarafi icin miydi emin degilim.

Yorumlayan Emre Yılmaz Tarih January 6, 2009 5:35 pm

pysvn ile yükleyip denemiştim ancak bir depo oluşturmak için uğraşmış ve yapamamıştım.

Yalnız:

>>> import svn.repos
>>> dir(svn.repos)

İşe yarayacak gibi bu işlemler için.

Yorumlayan Ömer Ücel Tarih January 6, 2009 5:51 pm

Kolay, GAE ve Django kullanarak yazılan uygulamaların grafiksel ortamda çalıştırılabilmesini ve yönetilebilmesini sağlar.

http://kolay.googlecode.com
Günümüzde bir çok site ya da e-posta servisine üye olmamız gerekebiliyor. Tüm bu üyeliklerde aynı şifreyi kullanmak güvenlik açısından ne yazık ki bir risk oluşturmakta. Ayrıca tüm bu şifreleri akılda tutmak büyük çaba gerektirirken, bunları bir yere not etmekte birilerinin eline geçmesine fırsat vermektedir.

Hatırlat programı ile şifrelerinizi kategorilendirerek kayıt altında tutabilirsiniz. Verileriniz kaydedilirken sizin belirlediğiniz bir anahtar vasıtasıyla gizlendiği için birileri veritabanına erişse bile bunu çözmesi epey güç olacak.

İşletim sistemi değişikliklerinde ya da yeni sistem kurulumunda, programdaki yedekleme/geri yükleme özelliğini kullanarak bilgilerinizi taşıyabileceksiniz (Bu özellik henüz projeye dahil edilmemiştir).

http://hatirlat.googlecode.com
Yapılacak işlerle ilgili küçük notlar almanızı sağlar.

http://notal.googlecode.com