Обсуждение: Переезд на Google Code Issue Tracker
От: seregaa Ниоткуда http://blogtani.ru
Дата: 09.06.10 15:21
Оценка: 210 (4) +1
По договоренности с Владимиром Кочетковым я занялся изучением миграции с мантиса на google code Issue Tracker.
Пока остановились на следующей схеме:
1. Экспортируем баги из мантиса в xml файл (у мантиса для этого есть штатный плагин). Пример файла приведен в конце этого сообщения.
2. Заливаем баги в гугл с помощью Google Code Issue Tracker Data API, к которому есть .Net обертка (http://code.google.com/p/google-code-issue-tracker/)

API имеет ограничение — автор и дата создания бага всегда берутся текущие, т.е. перенести эту информацию из мантиса "один к одному" не удастся. Придется хранить ее в теле описания бага в каком то формате. Думаю в теле же стоит сохранить идентификатор оригинального бага — эти идентификаторы уже много где засветились (например в комментариях к коммитам), поэтому терять идентификаторы нельзя. Структура бага в гугле намного проще, чем в мантисе, многие атрибуты предлагается хранить в виде лейблов (приоритет, важность, компонент) или прямо в основном описании (шаги для воспроизведения, доп. информация).

Вот список всех атрибутов мантиса и описание того, как я собираюсь сохранить их в гугловом трекере:
В виде лейблов (в мантисе эти атрибуты имеют небольшой список предопределенных значений):
<priority>
<reproducibility>
<resolution>
<severity>
<category>

В атрибуте "Status" (под статус в гугле заведен отдельный атрибут):
<status>

В заголовке:
<summary>

В основном описании:
<description>
<additional_information>
<steps_to_reproduce>

В основном описании, в виде дополнительных тэгов:
<id>
<date_submitted>
<duplicate_id>
<last_updated>

Также в виде тегов в основном описании. Значения этих атрибутов имеют случайный характер, а сами атрибуты были использованы очень редко, поэтому заводить под них лейблы думаю не стоит:
<build>
<os>
<os_build>
<platform>

Вот _полный_ список использования этих атрибутов:

build: 1132
os: Windows XP
os_build: 69
platform: CygWin
build: r6488
os: WinXP
os_build: SP2
platform: MS.NET 2.0
build: 6552
build: 6552
build: 0.9.3
os: ALTLinux
os_build: 3.0
platform: i686
profile_id: 2
build: May 2008 CTP build 0.9.4.8036
os: Windows XP SP 2
build: -r8391

Планирую игнорировать, как неиспользуемые в нашем мантисе:
<eta>
<fixed_in_version>
<profile_id>
<project_description>
<project_id>
<project_name>
<projection>
<sponsorship_total>
<sticky>
<version>
<view_state>

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

Пример экспортированного xml:
  Скрытый текст
    <bug>
      <additional_information>My additional findings on this issue.  
1-) The types even can't be get from C#. Assembly.GetTypes(&lt;above_assembly&gt;) results in same exception for C#
2-) It doesn't happen if Method's accessor is public
3-) It doesn't happen if Derived takes only 1 generic parameter
4-) It emits such a code for derived class:

.override  method instance void class ClassLibrary1.Base`1&lt;!T&gt;::Method()

C# won't emit above. And removing above IL code fixes the issue. So it look like an emitting problem to me.</additional_information>
      <handler_email></handler_email>
      <handler_id></handler_id>
      <handler_realname></handler_realname>
      <handler_username></handler_username>
      <build></build>
      <category>Compiler</category>
      <date_submitted>05-11-10 17:08</date_submitted>
      <description>The below code compiles fine. But you cannot reference it from another assembly.


  public  class Base[U]
  {
   protected virtual  Method() :void
   {
   }
  }
 
  public  class Derived[K,T]: Base[T]
  {    
   protected override Method() : void
   {  
   }
  }

When you try you get error as :

 Error: Method override 'Method' on type 'ClassLibrary1.Derived'2' from assembly 'ClassLibrary1, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null' cannot find a method to replace..</description>
      <duplicate_id>0</duplicate_id>
      <eta>none</eta>
      <fixed_in_version></fixed_in_version>
      <id>1223</id>
      <last_updated>05-11-10 17:10</last_updated>
      <bugnotes>
        <bugnote>
          <id>2307</id>
          <reporter_id>168</reporter_id>
          <note>Assembly.GetTypes(&lt;above_assembly&gt;) will be  =&gt; ref_to_above_assembly.GetTypes();</note>
          <view_state>10</view_state>
          <date_submitted>05-14-10 17:59</date_submitted>
          <last_modified>05-14-10 17:59</last_modified>
        </bugnote>
      </bugnotes>
      <os></os>
      <os_build></os_build>
      <platform></platform>
      <priority>normal</priority>
      <profile_id>0</profile_id>
      <project_description></project_description>
      <project_id>1</project_id>
      <project_name>Nemerle</project_name>
      <projection>none</projection>
      <reporter_email>emperon@nospam.nospam</reporter_email>
      <reporter_id>168</reporter_id>
      <reporter_realname></reporter_realname>
      <reporter_username>reverseblade</reporter_username>
      <reproducibility>always</reproducibility>
      <resolution>open</resolution>
      <severity>major</severity>
      <sponsorship_total>0</sponsorship_total>
      <status>new</status>
      <steps_to_reproduce></steps_to_reproduce>
      <sticky>0</sticky>
      <summary>Generic parameter and virtual/override</summary>
      <version></version>
      <view_state>public</view_state>
    </bug>
Мобильная версия сайта RSDN — http://rsdn.org/forum/rsdn/6938747
Автор: sergeya
Дата: 19.10.17
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.