/var/log/life.log
Блог программиста из солнечной Бурятии

Сборка модулей Bitrix + Git

Помимо того, что git полезен при разработке, теги git’a оказались удобны при создании обновлений для публикации в маркетплэйсе.
Каждая версия помечается соответствующим тегом. А затем скрипт по этим тегам собирает пакет обновлений.

#!/usr/bin/env python
# -*- coding: utf-8 -*-

import subprocess
import shlex
import os
import shutil
import zipfile
import sys

def converter(filePath):
    if any([filePath.endswith(extension) for extension in '.php,.sql'.split(',')]):
        with open(filePath, "rb") as F:
            text = F.read().decode("utf-8").encode("cp1251")
            if filePath.endswith('.sql'):
                filePath +=  '.cp1251'
            with open(filePath, "wb") as f:
                f.write(text)
                f.close()
        F.close()

def zipdir(path, zip, folder):
    rootlen = len(path)-len(folder) - 1
    for root, dirs, files in os.walk(path):
        for file in files:
            fn = os.path.join(root, file)
            zip.write(fn,fn[rootlen:])

def mklastversion(last_version, curdir):
    if os.path.exists(last_version):
        shutil.rmtree(last_version)
    os.mkdir(last_version)

    for item in os.listdir(curdir):
        if item!='.git' and item!='.last_version' and item!="update" and item != scriptname and item != ".gitignore":
            path = curdir+"\"+item
            if os.path.isdir(path):
                shutil.copytree(path,last_version + "
\"+item)
            elif os.path.isfile(path):
                shutil.copy(path,last_version + "
\"+item)

    for item in os.walk(last_version):
        for f in item[2]:
            path = item[0]+"
\"+f
            converter(path)
    zip = zipfile.ZipFile(curdir+"
\\.last_version.zip", 'w')
    zipdir(curdir+"
\\.last_version", zip,".last_version")
    zip.close()
    shutil.move(curdir+"
\\.last_version.zip",curdir+"\\.last_version")

curdir = os.path.abspath(os.curdir)
last_version = curdir +"
\\.last_version"
scriptname = os.path.basename(__file__)

mklastversion(last_version, curdir)


git_tag = 'git tag'
args = shlex.split(git_tag)
p = subprocess.Popen(args, stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
tags = p.communicate()[0].split("
\n")[:-1]
if len(tags)==1 or len(tags)==0:
    sys.exit(0)
prev_version = tags[-2]
cur_version = tags[-1]

git_diff = 'git diff '+prev_version+' '+cur_version+ ' --name-only'

args = shlex.split(git_diff)
p = subprocess.Popen(args, stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
update_list = p.communicate()[0].split("
\n")[:-1]



update_path = curdir+"
\\update\"+cur_version
if os.path.exists(update_path):
    shutil.rmtree(update_path)
os.mkdir(update_path)
for filename in update_list:
    dirname = "
\".join((update_path+"\"+filename.replace('/',"\")).split("\")[:-1])
    if not os.path.exists(dirname):
        os.makedirs(dirname)
    shutil.copyfile(last_version+"
\"+filename,update_path+"\"+filename.replace('/',"\"))
desc = raw_input("
Description: ")
f = open(curdir+"
\\update\"+cur_version+"\\description.ru",'wb')
f.write(desc.decode("
cp866").encode("cp1251"))
f.close()
zip = zipfile.ZipFile(curdir+"
\\update\"+cur_version+".zip", 'w')
zipdir(update_path, zip,cur_version)
zip.close()

2 комментария на запись «Сборка модулей Bitrix + Git»

  1. gunlinux пишет:

    http://youtu.be/TY0Ki5mU94s , grunt , gulp используешь?

  2. VampiRUS пишет:

    Ну, это я полтора года назад скриптик набросал:)
    а для гранта переписывать на js — влом, работает — не трогаю:)
    мне идеология не нравится, было бы оно глобально как питон, с папкой .git я ещё могу смириться, но папочки node_modules мне определённо не нравятся, там где без этого не обойтись, пользуюсь.

Оставить комментарий

Вы так же можете оставить комментарий используя ваш OpenId, для этого нужно войти.