2008. 6. 23. 09:52

Trac 0.11 정식 버전 릴리즈되었네요. (덤으로 0.10.5 버전도)

0.11 버전이 오랜 기간 끝에 릴리즈되었네요.
이미 써 보신 분들은 아시겠지만, 몇가지 하이라이트를 정리해보면...
  • 템플릿(Template) 엔진을 Genshi로 변경
  • 티켓의 워크플로우 변경 (accepted가 추가됨)
  • 텍스트 문법에 따른 색깔 표시(Syntax Highlighting)하는 엔진을 Pygments로 기본 탑제.
  • 소스 브라우저 향상 (페이지 로딩 없이 폴더 트리 표시)
  • 사용자 설정 개선
  • WebAdmin 플러그인 기본 탑제
대략 이정도입니다. 사용자 관점에서 본다면 그렇게 많은 차이가 나지 않아보이기도 합니다. 일부는 0.10에서도 플러그인으로 되는 부분이기 때문에...

여하튼 TOW의 Trac 0.11 버전도 조만간 테스트를 해볼 예정입니다. 만약, Trac 자체의 인스톨러가 아주 편하게 되어 있다면, TOW 프로젝트를 더 이상 진행할 이유가 없겠죠. (그럼 좋겠는데...)

p.s. 0.10.4 버전의 보안 패치정도 수준의 릴리즈인 0.10.5도 함께 릴리즈가 되었네요. TOW 0.2.2의 다음버전이 릴리즈할 이유가 생겼네요.

참고사이트: Trac 0.11 릴리즈노트, Trac 다운로드


2008. 6. 18. 11:59

500 Internal Server 에러가 가끔 나는 군요.

제가 사용하는 TOW도 가끔 500 Internal Server 에러가 나는데, 역시나 windows event log의 문제인가 봅니다.


[Wed Jun 18 11:48:43 2008] [error] [client ...] mod_python (pid=2980, interpreter='tow.localhost', phase='PythonHandler', handler='trac.web.modpython_frontend'): Application error
[Wed Jun 18 11:48:43 2008] [error] [client ...] ServerName: 'tow.localhost'
[Wed Jun 18 11:48:43 2008] [error] [client ...] DocumentRoot: 'C:/TOW/Apache/htdocs'
[Wed Jun 18 11:48:43 2008] [error] [client ...] URI: '/projects/.../ticket/133'
[Wed Jun 18 11:48:43 2008] [error] [client ...] Location: '/projects'
[Wed Jun 18 11:48:43 2008] [error] [client ...] Directory: None
[Wed Jun 18 11:48:43 2008] [error] [client ...] Filename: 'C:/TOW/Apache/cgi-bin/trac.cgi'
[Wed Jun 18 11:48:43 2008] [error] [client ...] PathInfo: '/.../ticket/133'
[Wed Jun 18 11:48:43 2008] [error] [client ...] Traceback (most recent call last):
[Wed Jun 18 11:48:43 2008] [error] [client ...]   File "C:\\TOW\\Python\\Lib\\site-packages\\mod_python\\importer.py", line 1537, in HandlerDispatch\n    default=default_handler, arg=req, silent=hlist.silent)
[Wed Jun 18 11:48:43 2008] [error] [client ...]   File "C:\\TOW\\Python\\Lib\\site-packages\\mod_python\\importer.py", line 1229, in _process_target\n    result = _execute_target(config, req, object, arg)
[Wed Jun 18 11:48:43 2008] [error] [client ...]   File "C:\\TOW\\Python\\Lib\\site-packages\\mod_python\\importer.py", line 1128, in _execute_target\n    result = object(arg)
[Wed Jun 18 11:48:43 2008] [error] [client ...]   File "C:\\TOW\\Python\\Lib\\site-packages\\trac\\web\\modpython_frontend.py", line 87, in handler\n    gateway.run(dispatch_request)
[Wed Jun 18 11:48:43 2008] [error] [client ...]   File "C:\\TOW\\Python\\Lib\\site-packages\\trac\\web\\wsgi.py", line 87, in run\n    response = application(self.environ, self._start_response)
[Wed Jun 18 11:48:43 2008] [error] [client ...]   File "C:\\TOW\\Python\\Lib\\site-packages\\trac\\web\\main.py", line 416, in dispatch_request\n    env.log.warn(e)
[Wed Jun 18 11:48:43 2008] [error] [client ...]   File "C:\\TOW\\Python\\lib\\logging\\__init__.py", line 983, in warning\n    apply(self._log, (WARNING, msg, args), kwargs)
[Wed Jun 18 11:48:43 2008] [error] [client ...]   File "C:\\TOW\\Python\\lib\\logging\\__init__.py", line 1079, in _log\n    self.handle(record)
[Wed Jun 18 11:48:43 2008] [error] [client ...]   File "C:\\TOW\\Python\\lib\\logging\\__init__.py", line 1089, in handle\n    self.callHandlers(record)
[Wed Jun 18 11:48:43 2008] [error] [client ...]   File "C:\\TOW\\Python\\lib\\logging\\__init__.py", line 1126, in callHandlers\n    hdlr.handle(record)
[Wed Jun 18 11:48:43 2008] [error] [client ...]   File "C:\\TOW\\Python\\lib\\logging\\__init__.py", line 642, in handle\n    self.emit(record)
[Wed Jun 18 11:48:43 2008] [error] [client ...]   File "C:\\TOW\\Python\\Lib\\logging\\handlers.py", line 819, in emit\n    self.handleError(record)
[Wed Jun 18 11:48:43 2008] [error] [client ...]   File "C:\\TOW\\Python\\lib\\logging\\__init__.py", line 693, in handleError\n    traceback.print_exception(ei[0], ei[1], ei[2], None, sys.stderr)
[Wed Jun 18 11:48:43 2008] [error] [client ...]   File "C:\\TOW\\Python\\lib\\traceback.py", line 125, in print_exception\n    print_tb(tb, limit, file)
[Wed Jun 18 11:48:43 2008] [error] [client ...]   File "C:\\TOW\\Python\\lib\\traceback.py", line 70, in print_tb\n    if line: _print(file, '    ' + line.strip())
[Wed Jun 18 11:48:43 2008] [error] [client ...]   File "C:\\TOW\\Python\\lib\\traceback.py", line 13, in _print\n    file.write(str+terminator)
[Wed Jun 18 11:48:43 2008] [error] [client ...] IOError: [Errno 9] Bad file descriptor

다음버전의 log 기본 설정을 파일로 해야겠습니다.
2008. 6. 16. 10:12

Trac의 마일스톤(milestone)과 버전(version)을 어떻게 구분해서 쓰시나요?

Trac을 쓰다보면 마일스톤과 버전이 어찌보면 같은 의미같기도 하고, 아닌거 같기도 하고 그렇습니다. 찾아봤더니 다른 분들도 역시나 햇갈려 하시나 봅니다.

Trac의 메일링리스트에서 다음과 같은 글을 찾았습니다.
(출처: http://www.mail-archive.com/trac@lists.edgewall.com/msg01241.html)

- A milestone is created for each future version of the software we intend to release. This includes bug fix releases as well as major planned versions.

- When a bug is found and a ticket is created, we set the version field to the version of our product in which the bug was discovered. This is later updated if the bug was found to have been introduced in an earlier version.

- If a ticket is created for an enhancement or task (i.e. anything
other than a bug) then the version field is left empty.

- Periodically I set the milestones of all tickets to be the version (s) in which we expect the bugs to be fixed or features to be introduced.

- When we tag a new release the milestone is marked as completed and
we then add the version of the new release to the version list in Trac (so that bugs can be filed against that version). A new milestone is then created for the next release in that branch.

번역을 해보면...

- 마일스톤은 릴리즈하려는 소프트웨어의 미래의 버전마다 만든다. 여기에는 버그수정이나 메이저로 계획한 버전들도 포함된다.

- 버그를 찾아서 티켓을 발행할 때, 버전 필드에는 버그를 찾은 버전으로 선택한다. 만약 이 버그가 더 이전의 버전에서 발견되었다면 나중에 해당 버전으로 업데이트해야 한다.

- 티켓이 개선사항(enhancement)나 할일(task)라면(버그가 아닌 다른 것들이면) 버전 필드는 비어둔다.

- 주기적으로 모든 티켓의 마일 스톤을 해결되거나 나중에 추가될 것으로 예측하는 버전으로 설정한다.

- 새 릴리즈를 태그할 때 마일스톤이 끝난 것으로 하고 버전 목록에 새 릴리즈 버전을 추가한다. (그래야 이 버전에 대해 버그가 발견되면 선택을 할 수 있기 때문이다.) 브랜치에는 다음버전을 위해 다음 릴리즈를 위해 마일스톤을 새로 만든다.

이렇습니다. 댓글메시지에도 나오지만 마일스톤은 "미래"이며, 버전은 "과거"를 의미하네요.
결론적으로 보면 버전의 항목들과 마일스톤의 항목들은 버전 형식("1.0", "1.1.1.1" 등)과 같이 되겠더군요. 사실 지금은 다르게 해 놓고 썼거든요.

반드시 이렇게 써야 하는건 아니겠지만, 이렇게 쓰게 되면 좀 더 전달이 잘 될 듯 합니다.
도움이 되시길...