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

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

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
#!/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()

Странное ограничение

В универе инет ужасен, единственное, что с ним можно делать так это качать с торрентов. А сегодня оказалось что ещё и ограничение ввели на размер скачиваемого,закачиваемого файла. Вполне логично, что менеджеры закачек должны были бы справиться с этим ограничением путём увеличения количества кусков на которые будет биться файл. Но Download Master отказывался увеличивать число кусков больше чем 8. Было решено накатать скриптик на python для закачки маленькими кусочками. Оказалось, что ограничивает squid установленный на сервере, и ограничение на размер ровно 5000000, не 5 мегабайт а именно 5000000 байт. Почему когда речь идёт об объёме, то всегда это не в пользу юзера? такое подозрение что в squid установлено ограничение именно в 5 мегабайт, кто может подтвердить или опровергнуть это утверждение прошу написать в комментарии, самому ставить и смотреть как там это в интерфейсе сделано неохота. Это всё лирика, интересно вот что, при запросе куска любого размера большого файла, начиная с 0 байта squid возвращал сообщение что файл большой и идите лесом, но если послать запрос на кусок начиная с 1 байта то всё прекрасно скачивается, естественно с ограничением в 5000000 байт, ну а 1 байт для многих типов файлов известен, так что проблем со скачкой нет, только бы скорость побольше)
upd: с этим BitComet так же прекрасно справляется.

Скрипт для скачивания видео vkontakte.ru из групп

Описание
Скрип позволяет скачивать видео из групп vkontakte.ru. Скрипт написан на python и расчитан на кодировку UTF-8 в противном случае работа не гарантируется, скачать python можно тут. Запуск производится командой python vkontakte.py. Для скачивания нужно задать поля email и password, а также url – ссылка на список видео группы.



Загрузка
[download#8]
Список изменений
v.0.2.0 Скрипт теперь снова скачивает :)
v.0.1.0 Исправлен интерфейс, исправлены ошибки в названиях файлов и прочие мелкие недочёты.
v.0.0.1 начальная реализация скрипта

Скачать видео с Вконтакте.РУ

Наткнулся я тут вконтакте на довольно интересную группу:”Советские психоделические мультики”) ну и т.к. у меня анлим и надо что-то качать, решил качнуть все мультфильмы из группы)) Собственно начал думать как это сделать, есть онлайн сервисы, также есть плагин для Firefox и userjs для Opera, но есть одно большое но в любом из этих способов нужно качать по одному файлу, да и к тому же ручами заходить копировать и т.д и т.п.,
Читать полностью »