Скрипт генерации лога для code_swarm

Обсуждаем TrackStudio по-русски

Скрипт генерации лога для code_swarm

Postby artzub » Thu Aug 26, 2010 12:53 pm

Привет, всем!

Может вы слышали про такой вот замечательный продукт code_swarm (более свежая версия на github).
В общем пришла мне в голову мысль а что если сделать лог активности в TS и в результате родился вот такой вот скритп:
Code: Select all
<#assign listresult>
   <@std.script>
import java.util.*;
import com.trackstudio.kernel.cache.*;
import java.io.*;
import com.trackstudio.secured.*;
import com.trackstudio.securedkernel.*;
import com.trackstudio.tools.*;
import java.text.SimpleDateFormat;
import com.trackstudio.app.adapter.AdapterManager;

try
{               
      String strOut = "";
      String strOut_Code = "";
      SimpleDateFormat df = new SimpleDateFormat("EEE MMM d HH:mm:ss yyyy Z", new Locale("us", "US"));
      List taskList = TaskRelatedManager.getInstance().getAllTasksIdCollection();
      for(String curTaskId : taskList){
         SecuredTaskBean curTask = new SecuredTaskBean(curTaskId, sc);
         if(curTask != null)
         {
            
            String pathTask = "";
            String ext = ".task";
            for(SecuredTaskBean curTask_ : Util.fullPath(curTask)){
               if(curTask_.getCategory().getPreferences().contains("V"))
                  pathTask += "/" + curTask_.getNumber();
               else
                  pathTask += "/" + curTask_.getNumber() /*getName().replaceAll("/", "_")*/;
            }
            
            pathTask = pathTask.replaceAll("(/758(/|$))", "/Forum$2");
            
            if(pathTask.matches(".*(/152(/|$)).*")){
               ext = ".supp";
               pathTask = pathTask.replaceAll("(/152(/|$))", "/Suppor$2");
            }
            
            if(pathTask.matches(".*(/1012(/|$)).*")){
               ext = ".buh";            
               pathTask = pathTask.replaceAll("(/1012(/|$))", "/Acts$2");
            }
            
            if(pathTask.matches(".*(/761(/|$)).*")){
               ext = ".fts";            
               pathTask = pathTask.replaceAll("(/761(/|$))", "/TS$2");
            }
            
            if(pathTask.matches(".*(/2012(/|$)).*")){
               ext = ".frb";            
               pathTask = pathTask.replaceAll("(/2012(/|$))", "/RBook$2");
            }
            
            if(pathTask.matches(".*(/760(/|$)).*")){
               ext = ".fsp";            
               pathTask = pathTask.replaceAll("(/760(/|$))", "/SelzParam$2");
            }
            
            if(pathTask.matches(".*(/759(/|$)).*")){
               ext = ".fselz";            
               pathTask = pathTask.replaceAll("(/759(/|$))", "/Selz$2");
            }
            
            if(pathTask.matches(".*(/331(/|$)).*")){
               ext = ".selz";            
               pathTask = pathTask.replaceAll("(/331(/|$))", "/Selz$2");
            }
            
            if(pathTask.matches(".*(/335(/|$)).*")){
               ext = ".sparam";            
               pathTask = pathTask.replaceAll("(/335(/|$))", "/SelzParam$2");
            }
            
            if(pathTask.matches(".*(/334(/|$)).*")){
               ext = ".rbook";            
               pathTask = pathTask.replaceAll("(/334(/|$))", "/RBook$2");
            }
            
            pathTask += ext;
            
            strOut_Code += "<event date=\"" +
               Long.toString(curTask.getSubmitdate().getTime().getTime()) +
               "\"  author=\"";
            if(curTask.getSubmitter() != null)
               strOut_Code += curTask.getSubmitter().getLogin();
            strOut_Code += "\"  filename=\"" + pathTask +
               "\" action=\"A\"  comment=\"\"/>\n";
            
            strOut += Long.toString(curTask.getSubmitdate().getTime().getTime()/1000) + "|";
            if(curTask.getSubmitter() != null)
               strOut += curTask.getSubmitter().getLogin();
            strOut += "|A|" + pathTask + "|\n";
            
            for(SecuredMessageBean curMess : curTask.getMessages())
            {
               strOut_Code += "<event date=\"" +
                  Long.toString(curMess.getTime().getTime().getTime()) +
                  "\"  author=\"";
               if(curMess.getSubmitter() != null)
                  strOut_Code += curMess.getSubmitter().getLogin();
               strOut_Code += "\"  filename=\"" + pathTask +
                  "\" action=\"M\"  comment=\"\"/>\n";
               
               strOut += Long.toString(curMess.getTime().getTime().getTime()/1000) +"|";
               if(curMess.getSubmitter() != null)
                  strOut += curMess.getSubmitter().getLogin();
               strOut += "|M|" + pathTask + "|\n";
            }
            
            if(curTask.getHandlerUser()!=null){
               strOut_Code += "<event date=\"" +
                  Long.toString(curTask.getSubmitdate().getTime().getTime()) +
                  "\"  author=\"";
               strOut_Code += curTask.getHandlerUser().getLogin();
               strOut_Code += "\"  filename=\"" + pathTask +
                  "\" action=\"M\"  comment=\"\"/>\n";
            
               strOut += Long.toString(curTask.getSubmitdate().getTime().getTime()/1000) + "|";                              
               strOut += curTask.getHandlerUser().getLogin();                              
               strOut += "|M|" + pathTask + "|\n";               
            }            
            
            if(curTask.getHandler()!=null){
               strOut_Code += "<event date=\"" +
                  Long.toString(curTask.getSubmitdate().getTime().getTime()) +
                  "\"  author=\"";
               strOut_Code += curTask.getHandler().getLogin();
               strOut_Code += "\"  filename=\"" + pathTask +
                  "\" action=\"M\"  comment=\"\"/>\n";
               
               strOut += Long.toString(curTask.getSubmitdate().getTime().getTime()/1000) + "|";                              
               strOut += curTask.getHandler().getLogin();                              
               strOut += "|M|" + pathTask + "|\n";
            }
            
            if(curTask.getHandlerGroup()!=null){
               for(SecuredUserAclBean curAcl :   AdapterManager.getInstance().
                        getSecuredAclAdapterManager().
                        getGroupUserAclList(sc, curTask.getHandlerGroupId())){
                  strOut_Code += "<event date=\"" +
                     Long.toString(curTask.getSubmitdate().getTime().getTime()) +
                     "\"  author=\"";
                  strOut_Code += curAcl.getToUser().getLogin();   
                  strOut_Code += "\"  filename=\"" + pathTask +
                     "\" action=\"M\"  comment=\"\"/>\n";
                        
                  strOut += Long.toString(curTask.getSubmitdate().getTime().getTime()/1000) + "|";   
                  strOut += curAcl.getToUser().getLogin();                  
                  strOut += "|M|" + pathTask + "|\n";
               }
            }
         }         
      }
      
      try {
         FileOutputStream fos = new FileOutputStream("C:/temp/git_g.log");
         Writer out = new OutputStreamWriter(fos, "UTF8");
         out.write(strOut);
         out.close();
         
         FileOutputStream fos = new FileOutputStream("C:/temp/actions.xml");
         Writer out = new OutputStreamWriter(fos, "UTF8");
         out.write("<?xml version=\"1.0\"?>\n<file_events>" +
            strOut_Code +
            "</file_events>");
         out.close();
      } catch (IOException e) {
         return e.printStackTrace();
      }      
      return strOut;
}
catch(Exception e)
{
   return e.Message;
}
   </@std.script>
</#assign>
${listresult}

запускать рекомендую с правами root'а. Я его исполняю из шаблонов но можно и в триггер подложить сделав java файлик если.
если вы посмотрите там еще и код генерации лога для gource или на github, но в gource косячно отрабатывает так как генерируются по дате как попало.
если кто доработает скрипт буду благодарен.
А разработчикам предлагаю включить подобный механизм в TS =) прям чтоб была команда сделать лог для codeswarm или gource =)
TS 4.0.5
skype:artzubalex
icq: 227194966
twitter:artzub
artzub
 
Posts: 35
Joined: Wed Oct 28, 2009 9:35 am
Location: Krasnoyarsk

Re: Скрипт генерации лога для code_swarm

Postby admin » Thu Aug 26, 2010 4:01 pm

Да, занятно, посмотрим :-)
Maxim Kramarenko (mailto: maximkr@trackstudio.com)
TrackStudio - Hierarchical Bug & Issue Tracking Software
http://www.trackstudio.com
admin
Site Admin
 
Posts: 7305
Joined: Thu Jan 01, 1970 3:00 am
Location: Smolensk, Russia

Re: Скрипт генерации лога для code_swarm

Postby Petr » Fri Aug 27, 2010 1:15 pm

а где вы документацию нашли как этот лог создавать?
TS Support
email: parsentev@yandex.ru
Petr
 
Posts: 1125
Joined: Wed Aug 12, 2009 4:38 pm

Re: Скрипт генерации лога для code_swarm

Postby Petr » Fri Aug 27, 2010 5:38 pm

вопрос снять, сделаем кнопку в меню она будет отдавать схему xml для текущай задачи + потомки, и считает все коммиты.
TS Support
email: parsentev@yandex.ru
Petr
 
Posts: 1125
Joined: Wed Aug 12, 2009 4:38 pm

Re: Скрипт генерации лога для code_swarm

Postby artzub » Mon Aug 30, 2010 6:46 am

Там если для gource генерировать лог то его сортировать надо по дате.

мой результат визуализации здесь
TS 4.0.5
skype:artzubalex
icq: 227194966
twitter:artzub
artzub
 
Posts: 35
Joined: Wed Oct 28, 2009 9:35 am
Location: Krasnoyarsk


Return to TrackStudio Support [Russian]

Who is online

Users browsing this forum: No registered users and 0 guests