Pull to refresh

Comments 49

Вопрос не по теме интеграции, а по постановке задачи.

> что бы при коммите в git, автоматически в TrackStudio задача получала статус завершена

А разве коммит в систему контроля версий означает, что задача закрыта?

Коммит — это лишь внесение дельты под контроль версий. В моём понимании задача закрыта тогда, когда вносимые изменения протестированы и кто-то, выполняющий роль проверяющего, посчитал, что по задаче больше не надо ничего делать и её можно закрыть.

Поправьте, плз, если я недопонял постановку задачи или логику работы TrackStudio.

А за техническое решение — мой плюс.

да согласен коммит — это всего лишь применение изменений.
Я лучше напишу так:
что бы при коммите в git, автоматически в TrackStudio задаче добавлялся комментарии с различными типами сообщения.
Зачтено, давай зачётку. :)
В Redmine можно указать просто номер задачи в commit message #146 и коммит будет виден из задачи. А можно написать что-то типа fixes #146 и состояние задачи будет изменено. То есть, задача не обязательно будет закрыта, а, например, помечена разработчиком, как реализованная — в противном случае разработчику пришлось бы делать это отдельно в баг-трекере. Конечно, совершенству нет предела — неплохо бы и затраченное время заполнять автоматом, но такого, вроде, нет.
Да, Редмайн весьма продвинут, в том числе и в этом вопросе. Но, повторюсь, автоматическое закрытие записи — это не есть хорошо. Только человек и только после детального разбора результатов работы.
В TS вообще есть интеграция с многими SCM, и она работает по тому принципу что вы описали.
Но пока они не хотят реализовывать интеграцию с Git, но мне это не мешает.
Максим Крамаренко в своем блоге уже сказал, что интеграция с git скоро будет.
Да, не ожидал что тема интеграции с git будет настолько популярна :-)

Про Git/Mercurial спрашивали буквально пару раз, а про bazaar никто не спрашивал, но мы сделали т.к. сами его используем.
Замечание по поводу скрипта, создающего правило импорта: гораздо проще создать одно правило вручную и написать простенький скрипт Create Task/Before Trigger (а возможно InsteadOf Trigger), который будет разбирать название создаваемой задачи (которое суть поле subject письма) и описание задачи (которое формируется из тела письма), вырезать нужное-ненужное и создавать хоть 100500 задач в нужных местах.
приведи пример!

У меня то подразумевается в первую очередь добавление комментариев к существующим задачам. А сама возможность создания задач по средствам импорта писем это уже побочное действие TS (но уж очень удобное)
Ну комментарии к существующим задачам создаются непосредственно из писем с решеткой и номером задачи в subject. Нужно только правило создания повыше засунуть, в корень проекта (не корень TS)
То есть как я понял, если в корневую папку всех существующих проектов положить правило, которое будет создавать сообщение с типом комментарии, то если в subject будет #номер_задачи TS создаст сообщение в нужном месте?
если через условия правила пролезает и категория совпадает — создаст.
а как же объяснить TS что надо создать задачу именно в нужном проекте, если правило будет висеть в корне.
То есть перемещать в нужное место так?
У утилиты №3 говорящее название :-)
зачем надо было «так» замазывать artzub@gmail.com если оно отлично читается? :)
вообще хз, зачем я замазал мыло! gmail и так спам фильтрует, да и не думаю что здесь кто-то этим заниматься будет.
а как оно если сравнить с git + trac vs git + TrackStudio?
если четно меня trac не привлекает.
По этой причине его не пробовал и соответственно ни чего не могу сказать по поводу сравнения.
Абсолютно так же как и git + MantisBT или git + Redmine. Все умеют работать с git.
Кому как больше нравится.
А я почту так шлю:

#!/usr/bin/python
# -*- coding: utf8 -*-
MAILSERVER='10.0.0.5'
FROM = 'dem@nospam.ru'
import smtplib
from email.MIMEMultipart import MIMEMultipart
from email.MIMEBase import MIMEBase
from email.MIMEText import MIMEText
from email.Utils import COMMASPACE, formatdate
from email import Encoders
import os

def sendMail(to, subject, text, files=[],server=MAILSERVER):
assert type(to)==list
assert type(files)==list
fro = FROM

msg = MIMEMultipart()
msg['From'] = fro
msg['To'] = COMMASPACE.join(to)
msg['Date'] = formatdate(localtime=True)
msg['Subject'] = subject
text_message = MIMEText(text)
text_message.set_charset('UTF-8')
msg.attach( text_message )

for file in files:
part = MIMEBase('application', «octet-stream»)
part.set_payload( open(file,«rb»).read() )
Encoders.encode_base64(part)
part.add_header('Content-Disposition', 'attachment; filename="%s"'
% os.path.basename(file))
msg.attach(part)

smtp = smtplib.SMTP(server)
smtp.sendmail(fro, to, msg.as_string() )
smtp.close()

sendMail(
[«dem@nospam.ru»],
«test»,«Проверка»
)
#[«photo.jpg»,«memo.sxw»]
Парсер гад:

#!/usr/bin/python
# -*- coding: utf8 -*-
MAILSERVER='10.0.0.5'
FROM = 'dem@nospam.ru'
import smtplib
from email.MIMEMultipart import MIMEMultipart
from email.MIMEBase import MIMEBase
from email.MIMEText import MIMEText
from email.Utils import COMMASPACE, formatdate
from email import Encoders
import os



def sendMail(to, subject, text, files=[],server=MAILSERVER):
    assert type(to)==list
    assert type(files)==list
    fro = FROM

    msg = MIMEMultipart()
    msg['From'] = fro
    msg['To'] = COMMASPACE.join(to)
    msg['Date'] = formatdate(localtime=True)
    msg['Subject'] = subject
    text_message = MIMEText(text)
    text_message.set_charset('UTF-8')
    msg.attach( text_message )

    for file in files:
        part = MIMEBase('application', "octet-stream")
        part.set_payload( open(file,"rb").read() )
        Encoders.encode_base64(part)
        part.add_header('Content-Disposition', 'attachment; filename="%s"'
                       % os.path.basename(file))
        msg.attach(part)

    smtp = smtplib.SMTP(server)
    smtp.sendmail(fro, to, msg.as_string() )
    smtp.close()


sendMail(
        ["dem@nospam.ru"],
        "test","Проверка"
    )
#["photo.jpg","memo.sxw"]    
и на gmail хорошо отправляет!
если да, то такой вариант более удобен, 2 связки сразу уходят.
Да вот такая версия отправила на раз:

#!/usr/bin/python
# -*- coding: cp1251 -*-
MAILSERVER='gmail-smtp-in.l.google.com'
FROM = 'dem@nospam.ru'
import smtplib
from email.MIMEMultipart import MIMEMultipart
from email.MIMEBase import MIMEBase
from email.MIMEText import MIMEText
from email.Utils import COMMASPACE, formatdate
from email import Encoders
import os



def sendMail(to, subject, text, files=[],server=MAILSERVER):
    assert type(to)==list
    assert type(files)==list
    fro = FROM

    msg = MIMEMultipart()
    msg['From'] = fro
    msg['To'] = COMMASPACE.join(to)
    msg['Date'] = formatdate(localtime=True)
    msg['Subject'] = subject
    text_message = MIMEText(text)
    text_message.set_charset('UTF-8')
    msg.attach( text_message )

    for file in files:
        part = MIMEBase('application', "octet-stream")
        part.set_payload( open(file,"rb").read() )
        Encoders.encode_base64(part)
        part.add_header('Content-Disposition', 'attachment; filename="%s"'
                       % os.path.basename(file))
        msg.attach(part)

    smtp = smtplib.SMTP(server)
    smtp.sendmail(fro, to, msg.as_string() )
    smtp.close()


sendMail(
        ["NOSPAM@gmail.com"],
        "test","Testing"
    )
#["photo.jpg","memo.sxw"]    


Только учтите у меня IP соответсвует домену моему и я из него и отправляю хотя на адрес гугловского сервера. Если что шлите через SMTP своего провайдера.
и на gmail хорошо отправляет? это вопрос опечатался.
А чем не устраивает входящий в комплект msmtp.exe? Умеет слать и через gmail тоже.
В папке профиля создается файл msmtprc.txt с таким содержимым — все прекрасно работает
# setup some defaults
defaults
tls_trust_file C:/Git/bin/curl-ca-bundle.crt
logfile ~/.msmtp.log

# create an account called «default»
account default

# setup server host and port
host smtp.gmail.com
port 587

# enable TLS
tls on

# set FROM address
from username@gmail.com

# setup authentication
auth on
user username@gmail.com
Поиск по диску C: файла msmtp.exe не дал результата.
Прошу прощения… Я как с самого начала настроил так и работает. Информацию брал с git tips, поэтому и вклинилось в голову что идет с msysgit. На самом деле она действительно распространяется отдельно, а вот статья
git.wiki.kernel.org/index.php/GitTips#Using_msmtp_to_send_your_patches
хм когда я разбирался не смог найти ни чего по этому вопросу.
Сочувствую тем, кто использует TrackStudio. Более неудобного и кривого продукта не встречал (опыт использования 2 года). Наконец-то начинаем с него съезжать. Авторам данного творения посылаю лучи.
а что вас не устраивает в нем?
Общее убожество, глючность (постоянно бьются страницы), абсолютно ебанутая система переноса задач — это первое, что пришло на ум. У нас в конторе 6 менеджеров, ни один положительно не отзывается о трек студио спустя 2 года использования. Не могу назвать ни одной вещи, чем бы TrackStudio мне нравился.
И, вдобавок, иностранные ребята не говорят «чтооо?» при упоминании TrackStudio.
«не» следует убрать из предыдущего поста
а вы какой версией пользуетесь?
ну и конечно не кто вам не запрещает написать свой интерфейс для TS у нее же есть такая возможность, я как нибудь напишу статью.
Мы эту вещь купили чтобы она экономила нам время и деньги, а не для того, чтобы потратить на неё время наших программистов. CSS-ку для хоть какой-то оптимизации интерфейса у нас кто-то всё-таки сделал, но проблему бьющихся страниц CSS-ка не решила, как вы понимаете.

Версия 3.5.
эта стать посвящена версии 4,
она много чем отличается от 3.5 и проблем с интерфейсом нет.
ну вообщем на вкус и цвет товарищей нет.
Видимо у меня просто больше положительных впечатлении от TS и моим требованиям все соответствует.
В этом корень проблем. Мне тоже не нравится, как 3.5 работает «из коробки». Но возможностей настроить под себя у TS гораздо больше, чем у конкурентов.
У продукции «Автоваза» тоже…
1) А какая именно 3.5? В последнее время (год-полтора) багрепорты по 3.5 приходили с интенсивностью 1 штука в пару месяцев (т.е. довольно редко). Сейчас никаких открытых проблем с выводом страниц в 3.5 нет, насколько я знаю.

2) Что не нравится с переносом задач, если не секрет? Вроде обычный cut/paste, я даже не представляю как еще можно сделать.

3) Интерфейс в 3.5 был в самом деле не слишком удобным, но эта версия была выпущена в 2006 году, с тех пор много изменилось. Вот список what's new от 4.0:
www.trackstudio.ru/whatsnew.html
1. 3.5.56. Интересный момент: мы ни разу не писали багрепорты по данному продукту. Даже не могу объяснить почему. Может быть из-за того, что всего в нём не перечинишь %)

2. Большинство наших менеджеров в первое время вообще не понимали, что таким способом можно перенести задачи. Потом один всё-таки допёр до этого (и ведь нельзя сказать, что у нас тормоза работают), после чего все остальные (включая меня) удивились, что оно так странно и неудобно сделано. Имхо, перенос должен быть в т.ч. в настройках задачи, т.е. при её редактировании должна быть возможность перенести её в любую ветвь иерархии.

3. Мы купили эту версию в первой половине 2009 года, т.е. далеко не в бог знает какие времена.
1) Если глюки повторяются, то обычно исправляем все в течение 1-2 недель, список известных багов в 3.5.77 сейчас практически пустой.

2) Перенос через редактирование задачи был в TrackStudio 3.0, потом от него отказались из-за непонимания со стороны пользователей назначения этого поля. Перенос задачи — это действие, поэтому пользователи ожидали увидеть какую-нибудь кнопку/менюшку, а не просто поле выбора новой родительской задачи. Кроме того, часто нужно переносить множества задач по условиям фильтрации (например, «все открытые задачи переносим в новую версию»), через редактирование свойств задачи это тоже трудно сделать.

Мне тоже интересно :-)
Спасибо, ушло в избранное.
В самом начале только поправьте, пожалуйста: можно организовать удобную процесс разработки…
спасибо, поправил.
Only those users with full accounts are able to leave comments. Log in, please.